From: Sophie Brun Date: Mon, 14 Feb 2022 13:32:56 +0000 (+0000) Subject: Import vboot-utils_0~R99-14469.B.orig.tar.gz X-Git-Tag: archive/raspbian/0_R99-14469.B-2+rpi1~11 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=ffdf12b2edd1fa2eac8511eec69f5eeb51e799d0;p=vboot-utils.git Import vboot-utils_0~R99-14469.B.orig.tar.gz [dgit import orig vboot-utils_0~R99-14469.B.orig.tar.gz] --- ffdf12b2edd1fa2eac8511eec69f5eeb51e799d0 diff --git a/.checkpatch.conf b/.checkpatch.conf new file mode 100644 index 0000000..1f93e0e --- /dev/null +++ b/.checkpatch.conf @@ -0,0 +1,21 @@ +# Not Linux, so don't expect a Linux tree. +--no-tree + +# Ignore aspects we don't follow here. +--ignore BLOCK_COMMENT_STYLE +--ignore C99_COMMENTS +--ignore CAMELCASE +--ignore CONFIG_DESCRIPTION +--ignore GLOBAL_INITIALISERS +--ignore INITIALISED_STATIC +--ignore LINE_SPACING +--ignore MACRO_WITH_FLOW_CONTROL +--ignore NEW_TYPEDEFS +--ignore OPEN_BRACE +--ignore PREFER_ALIGNED +--ignore PREFER_PACKED +--ignore PREFER_PRINTF +--ignore SPACING +--ignore SPDX_LICENSE_TAG +--ignore SPLIT_STRING +--ignore TRAILING_STATEMENTS diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..16d606b --- /dev/null +++ b/.clang-format @@ -0,0 +1,10 @@ +BasedOnStyle: LLVM +Language: Cpp +IndentWidth: 8 +UseTab: Always +BreakBeforeBraces: Linux +AllowShortIfStatementsOnASingleLine: false +IndentCaseLabels: false +SortIncludes: false +ContinuationIndentWidth: 8 +ColumnLimit: 80 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9edc243 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +/build +/build-au +/build-main +Cargo.lock +ID +scripts/newbitmaps/default_source/*.bmp +scripts/newbitmaps/images/out_* +scripts/newbitmaps/lib/*.pyc +scripts/newbitmaps/strings/font +scripts/newbitmaps/strings/*.png +scripts/newbitmaps/strings/localized_text/*/*.png +target +.idea diff --git a/Android.mk b/Android.mk new file mode 100644 index 0000000..c54a3b7 --- /dev/null +++ b/Android.mk @@ -0,0 +1,172 @@ +# Copyright 2015 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Minimal makefile capable of compiling futility to sign images + +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE := libvboot_util-host + +ifeq ($(HOST_OS),darwin) +LOCAL_CFLAGS += -DHAVE_MACOS +endif + +# These are required to access large disks and files on 32-bit systems. +LOCAL_CFLAGS += -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 + +LOCAL_C_INCLUDES += \ + $(LOCAL_PATH)/firmware/include \ + $(LOCAL_PATH)/firmware/lib/include \ + $(LOCAL_PATH)/firmware/lib/cgptlib/include \ + $(LOCAL_PATH)/firmware/lib/cryptolib/include \ + $(LOCAL_PATH)/firmware/lib/tpm_lite/include \ + $(LOCAL_PATH)/firmware/2lib/include \ + $(LOCAL_PATH)/host/include \ + $(LOCAL_PATH)/host/lib/include + +# Firmware library sources needed by VbInit() call +VBINIT_SRCS = \ + firmware/lib/crc8.c \ + firmware/lib/utility.c \ + firmware/lib/vboot_api_init.c \ + firmware/lib/vboot_common_init.c \ + +# Additional firmware library sources needed by VbSelectFirmware() call +VBSF_SRCS = \ + firmware/lib/cryptolib/padding.c \ + firmware/lib/cryptolib/rsa.c \ + firmware/lib/cryptolib/rsa_utility.c \ + firmware/lib/cryptolib/sha1.c \ + firmware/lib/cryptolib/sha256.c \ + firmware/lib/cryptolib/sha512.c \ + firmware/lib/cryptolib/sha_utility.c \ + firmware/lib/stateful_util.c \ + firmware/lib/vboot_common.c \ + firmware/lib/region-fw.c \ + +# Additional firmware library sources needed by VbSelectAndLoadKernel() call +VBSLK_SRCS = \ + firmware/lib/cgptlib/cgptlib.c \ + firmware/lib/cgptlib/cgptlib_internal.c \ + firmware/lib/cgptlib/crc32.c \ + firmware/lib/gpt_misc.c \ + firmware/lib/utility_string.c \ + firmware/lib/vboot_api_kernel.c \ + firmware/lib/vboot_display.c \ + firmware/lib/vboot_kernel.c \ + firmware/lib/region-kernel.c \ + +VBINIT_SRCS += \ + firmware/stub/tpm_lite_stub.c \ + firmware/stub/utility_stub.c \ + firmware/stub/vboot_api_stub_region.c + +VBSF_SRCS += \ + firmware/stub/vboot_api_stub_sf.c + +VBSLK_SRCS += \ + firmware/stub/vboot_api_stub.c \ + firmware/stub/vboot_api_stub_disk.c \ + firmware/stub/vboot_api_stub_stream.c + +UTILLIB_SRCS = \ + cgpt/cgpt_create.c \ + cgpt/cgpt_add.c \ + cgpt/cgpt_boot.c \ + cgpt/cgpt_show.c \ + cgpt/cgpt_repair.c \ + cgpt/cgpt_prioritize.c \ + cgpt/cgpt_common.c \ + futility/dump_kernel_config_lib.c \ + host/lib/crossystem.c \ + host/lib/file_keys.c \ + host/lib/fmap.c \ + host/lib/host_common.c \ + host/lib/host_key.c \ + host/lib/host_keyblock.c \ + host/lib/host_misc.c \ + host/lib/util_misc.c \ + host/lib/host_signature.c \ + host/lib/signature_digest.c + +# host/arch/${HOST_ARCH}/lib/crossystem_arch.c \ + +LOCAL_SRC_FILES := \ + $(VBINIT_SRCS) \ + $(VBSF_SRCS) \ + $(VBSLK_SRCS) \ + $(UTILLIB_SRCS) + +LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_C_INCLUDES) +LOCAL_STATIC_LIBRARIES := libcrypto_static + +include $(BUILD_HOST_STATIC_LIBRARY) + +include $(CLEAR_VARS) + +LOCAL_MODULE := futility-host +LOCAL_IS_HOST_MODULE := true +LOCAL_MODULE_CLASS := EXECUTABLES +generated_sources := $(call local-generated-sources-dir) + +ifeq ($(HOST_OS),darwin) +LOCAL_CFLAGS += -DHAVE_MACOS +endif + +# These are required to access large disks and files on 32-bit systems. +LOCAL_CFLAGS += -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 + +FUTIL_STATIC_SRCS = \ + futility/futility.c \ + futility/cmd_dump_fmap.c \ + futility/cmd_gbb_utility.c \ + futility/misc.c + +FUTIL_SRCS = \ + ${FUTIL_STATIC_SRCS} \ + futility/cmd_dump_kernel_config.c \ + futility/cmd_load_fmap.c \ + futility/cmd_pcr.c \ + futility/cmd_show.c \ + futility/cmd_sign.c \ + futility/cmd_vbutil_firmware.c \ + futility/cmd_vbutil_kernel.c \ + futility/cmd_vbutil_key.c \ + futility/cmd_vbutil_keyblock.c \ + futility/file_type.c \ + futility/traversal.c \ + futility/vb1_helper.c + +# ${FUTIL_STATIC_WORKAROUND_SRCS:%.c=${BUILD}/%.o} \ + +LOCAL_SRC_FILES := \ + $(FUTIL_SRCS) \ + +$(generated_sources)/futility_cmds.c: ${FUTIL_SRCS:%=${LOCAL_PATH}/%} + @echo making $< from ${FUTIL_SRCS} + @rm -f $@ $@_t $@_commands + @mkdir -p $(dir $@) + @grep -hoRE '^DECLARE_FUTIL_COMMAND\([^,]+' $^ \ + | sed 's/DECLARE_FUTIL_COMMAND(\(.*\)/_CMD(\1)/' \ + | sort >>$@_commands + @external/vboot_reference/scripts/getversion.sh >> $@_t + @echo '#define _CMD(NAME) extern const struct' \ + 'futil_cmd_t __cmd_##NAME;' >> $@_t + @cat $@_commands >> $@_t + @echo '#undef _CMD' >> $@_t + @echo '#define _CMD(NAME) &__cmd_##NAME,' >> $@_t + @echo 'const struct futil_cmd_t *const futil_cmds[] = {' >> $@_t + @cat $@_commands >> $@_t + @echo '0}; /* null-terminated */' >> $@_t + @echo '#undef _CMD' >> $@_t + @mv $@_t $@ + @rm -f $@_commands + +LOCAL_GENERATED_SOURCES := $(generated_sources)/futility_cmds.c + +LOCAL_STATIC_LIBRARIES := libvboot_util-host +LOCAL_SHARED_LIBRARIES := libcrypto-host +include $(BUILD_HOST_EXECUTABLE) + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d251496 --- /dev/null +++ b/LICENSE @@ -0,0 +1,27 @@ +// Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4f0dee4 --- /dev/null +++ b/Makefile @@ -0,0 +1,1399 @@ +# Copyright 2013 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# This Makefile normally builds in a 'build' subdir, but use +# +# make BUILD= +# +# to put the output somewhere else. + +############################################################################## +# Make variables come in two flavors, immediate or deferred. +# +# Variable definitions are parsed like this: +# +# IMMEDIATE = DEFERRED +# or +# IMMEDIATE := IMMEDIATE +# +# Rules are parsed this way: +# +# IMMEDIATE : IMMEDIATE +# DEFERRED +# +# So you can assign variables in any order if they're only to be used in +# actions, but if you use a variable in either the target or prerequisite of a +# rule, the rule will be constructed using only the top-down, immediate value. +# +# So we'll try to define all the variables first. Then the rules. +# + +############################################################################## +# Configuration variables come first. +# +# Our convention is that we only use := for variables that will never be +# changed or appended. They must be defined before being used anywhere. + +# We should only run pwd once, not every time we refer to ${BUILD}. +SRCDIR := $(shell pwd) +export SRCDIR +BUILD = ${SRCDIR}/build +export BUILD + +# Stuff for 'make install' +INSTALL = install +DESTDIR = / +LIBDIR ?= lib + +# Default values +DEV_DEBUG_FORCE= + +# Where exactly do the pieces go? +# UB_DIR = utility binary directory +# ULP_DIR = pkgconfig directory, usually /usr/lib/pkgconfig +# UI_DIR = include directory for library headers +# US_DIR = shared data directory (for static content like devkeys) +# DF_DIR = utility defaults directory +# VB_DIR = vboot binary directory for dev-mode-only scripts +# DUT_TEST_DIR = vboot dut tests binary directory +UB_DIR=${DESTDIR}/usr/bin +UL_DIR=${DESTDIR}/usr/${LIBDIR} +ULP_DIR=${UL_DIR}/pkgconfig +UI_DIR=${DESTDIR}/usr/include/vboot +US_DIR=${DESTDIR}/usr/share/vboot +DF_DIR=${DESTDIR}/etc/default +VB_DIR=${US_DIR}/bin +DUT_TEST_DIR=${US_DIR}/tests + +# Where to install the (exportable) executables for testing? +TEST_INSTALL_DIR = ${BUILD}/install_for_test + +# Set when installing into the SDK instead of building for a board sysroot. +SDK_BUILD ?= + +# Verbose? Use V=1 +ifeq ($(filter-out 0,${V}),) +Q := @ +endif + +# Quiet? Use QUIET=1 +ifeq ($(filter-out 0,${QUIET}),) +PRINTF := printf +else +PRINTF := : +endif + +# Architecture detection +_machname := $(shell uname -m) +HOST_ARCH ?= ${_machname} + +# ARCH and/or FIRMWARE_ARCH are defined by the Chromium OS ebuild. +# Pick a valid target architecture if none is defined. +ifeq (${ARCH},) + ARCH := ${HOST_ARCH} +endif + +ifeq (${ARCH},armv7l) + override ARCH := arm +else ifneq (,$(filter aarch64 arm64,${ARCH})) + override ARCH := arm +else ifeq (${ARCH},i386) + override ARCH := x86 +else ifeq (${ARCH},i686) + override ARCH := x86 +else ifeq (${ARCH},amd64) + override ARCH := x86_64 +endif + +ifneq ($(wildcard host/arch/${ARCH}/lib/crossystem_arch.c),) + CROSSYSTEM_ARCH_C := host/arch/${ARCH}/lib/crossystem_arch.c +else + CROSSYSTEM_ARCH_C := host/arch/stub/lib/crossystem_arch.c +endif + +# FIRMWARE_ARCH is only defined by the Chromium OS ebuild if compiling +# for a firmware target (coreboot or depthcharge). It must map to the same +# consistent set of architectures as the host. +ifeq (${FIRMWARE_ARCH},i386) + override FIRMWARE_ARCH := x86 +else ifeq (${FIRMWARE_ARCH},amd64) + override FIRMWARE_ARCH := x86_64 +else ifeq (${FIRMWARE_ARCH},armv7) + override FIRMWARE_ARCH := arm +endif + +# Provide default CC and CFLAGS for firmware builds; if you have any -D flags, +# please add them after this point (e.g., -DVBOOT_DEBUG). +DEBUG_FLAGS := $(if $(filter-out 0,${DEBUG}),-g -Og,-g -Os) +WERROR := -Werror +FIRMWARE_FLAGS := -nostdinc -ffreestanding -fno-builtin -fno-stack-protector +COMMON_FLAGS := -pipe ${WERROR} -Wall -Wstrict-prototypes -Wtype-limits \ + -Wundef -Wmissing-prototypes -Wno-trigraphs -Wredundant-decls -Wshadow \ + -Wwrite-strings -Wstrict-aliasing -Wdate-time \ + -ffunction-sections -fdata-sections \ + -Wformat -Wno-format-security ${DEBUG_FLAGS} + +# FIRMWARE_ARCH is defined if compiling for a firmware target +# (coreboot or depthcharge). +ifeq (${FIRMWARE_ARCH},arm) +CC ?= armv7a-cros-linux-gnueabihf-gcc +CFLAGS ?= -march=armv5 -fno-common -ffixed-r8 -mfloat-abi=hard -marm + -mabi=aapcs-linux -mno-thumb-interwork ${FIRMWARE_FLAGS} ${COMMON_FLAGS} +else ifeq (${FIRMWARE_ARCH},x86) +CC ?= i686-pc-linux-gnu-gcc +# Drop -march=i386 to permit use of SSE instructions +CFLAGS ?= -fvisibility=hidden -fomit-frame-pointer \ + -fno-toplevel-reorder -fno-dwarf2-cfi-asm -mpreferred-stack-boundary=2 \ + ${FIRMWARE_FLAGS} ${COMMON_FLAGS} +else ifeq (${FIRMWARE_ARCH},x86_64) +CFLAGS ?= ${FIRMWARE_FLAGS} ${COMMON_FLAGS} -fvisibility=hidden \ + -fomit-frame-pointer +else +# FIRMWARE_ARCH not defined; assuming local compile. +CC ?= gcc +CFLAGS += -DCHROMEOS_ENVIRONMENT ${COMMON_FLAGS} +endif + +CFLAGS += -std=gnu11 + +# test_ccflag +# $(1): compiler flags to test +# $(2): code to insert into test snippet +# returns: $(1) if compiler was successful, empty string otherwise +test_ccflag = $(shell \ + printf "$(2)\nvoid _start(void) {}\n" | \ + $(CC) -nostdlib -Werror $(1) -xc -c - -o /dev/null \ + >/dev/null 2>&1 && echo "$(1)") + +COMMON_FLAGS += $(call test_ccflag,-Wimplicit-fallthrough) +COMMON_FLAGS += $(call test_ccflag,-Wno-address-of-packed-member) +COMMON_FLAGS += $(call test_ccflag,-Wno-unknown-warning) + +# Needs -Wl because LD is actually set to CC by default. +LDFLAGS += -Wl,--gc-sections + +ifneq ($(filter-out 0,${DEBUG})$(filter-out 0,${TEST_PRINT}),) +CFLAGS += -DVBOOT_DEBUG +endif + +ifeq ($(filter-out 0,${DISABLE_NDEBUG}),) +CFLAGS += -DNDEBUG +endif + +ifneq ($(filter-out 0,${FORCE_LOGGING_ON}),) +CFLAGS += -DFORCE_LOGGING_ON=${FORCE_LOGGING_ON} +endif + +ifneq ($(filter-out 0,${TPM2_MODE}),) +CFLAGS += -DTPM2_MODE +endif + +# Support devices with GPT in SPI-NOR (for nand device) +# TODO(b:184812319): Consider removing this code if nobody uses it. +ifneq ($(filter-out 0,${GPT_SPI_NOR}),) +CFLAGS += -DGPT_SPI_NOR +endif + +# Enable EC early firmware selection. +ifneq ($(filter-out 0,${EC_EFS}),) +CFLAGS += -DEC_EFS=1 +else +CFLAGS += -DEC_EFS=0 +endif + +# Some tests need to be disabled when using mocked_secdata_tpm. +ifneq ($(filter-out 0,${MOCK_TPM}),) +CFLAGS += -DMOCK_TPM +endif + +# TPM2_SIMULATOR indicates whether the TPM2 simulator feature is enable or not. +ifneq ($(filter-out 0,${TPM2_SIMULATOR}),) +CFLAGS += -DTPM2_SIMULATOR=1 +else +CFLAGS += -DTPM2_SIMULATOR=0 +endif + +# NOTE: We don't use these files but they are useful for other packages to +# query about required compiling/linking flags. +PC_IN_FILES = vboot_host.pc.in + +# Create / use dependency files +CFLAGS += -MMD -MF $@.d + +ifeq (${FIRMWARE_ARCH},) +# Creates position independent code for non firmware target. +CFLAGS += -fPIC +endif + +CFLAGS += -D_GNU_SOURCE + +# This is required to access large disks and files on 32-bit systems, +# but if the environment doesn't support it, at least compile support +# for what is possible. +# Pass through cflags_use_64bits to evaluate it only once, here. +cflags_use_64bits := $(call test_ccflag,-D_FILE_OFFSET_BITS=64,\#include ) +CFLAGS += $(cflags_use_64bits) + +# Code coverage +ifneq ($(filter-out 0,${COV}),) + COV_FLAGS = -O0 --coverage -DCOVERAGE + CFLAGS += ${COV_FLAGS} + LDFLAGS += ${COV_FLAGS} + COV_INFO = ${BUILD}/coverage.info +endif + +ifdef HAVE_MACOS + CFLAGS += -DHAVE_MACOS -Wno-deprecated-declarations +endif + +# Musl doesn't have execinfo.h. +ifndef HAVE_MUSL + CFLAGS += -DHAVE_EXECINFO_H +endif + +# And a few more default utilities +LD = ${CC} +CXX ?= g++ +PKG_CONFIG ?= pkg-config + +# Static? +ifneq ($(filter-out 0,${STATIC}),) +LDFLAGS += -static +PKG_CONFIG += --static +endif + +ifneq (${FUZZ_FLAGS},) +CFLAGS += ${FUZZ_FLAGS} +endif + +# Optional Libraries +LIBZIP_VERSION := $(shell ${PKG_CONFIG} --modversion libzip 2>/dev/null) +HAVE_LIBZIP := $(if ${LIBZIP_VERSION},1) +ifneq ($(filter-out 0,${HAVE_LIBZIP}),) + CFLAGS += -DHAVE_LIBZIP $(shell ${PKG_CONFIG} --cflags libzip) + LIBZIP_LIBS := $(shell ${PKG_CONFIG} --libs libzip) +endif + +HAVE_CROSID := $(shell ${PKG_CONFIG} --exists crosid && echo 1) +ifeq ($(HAVE_CROSID),1) + CFLAGS += -DHAVE_CROSID $(shell ${PKG_CONFIG} --cflags crosid) + CROSID_LIBS := $(shell ${PKG_CONFIG} --libs crosid) +endif + +# Determine QEMU architecture needed, if any +ifeq (${ARCH},${HOST_ARCH}) + # Same architecture; no need for QEMU + QEMU_ARCH := +else ifeq (${HOST_ARCH}-${ARCH},x86_64-x86) + # 64-bit host can run 32-bit targets directly + QEMU_ARCH := +else + QEMU_ARCH := ${ARCH} +endif + +# The top of the chroot for qemu must be passed in via the SYSROOT environment +# variable. In the Chromium OS chroot, this is done automatically by the +# ebuild. + +ifeq (${QEMU_ARCH},) + # Path to build output for running tests is same as for building + BUILD_RUN = ${BUILD} + SRC_RUN = ${SRCDIR} +else + $(info Using qemu for testing.) + # Path to build output for running tests is different in the chroot + BUILD_RUN = $(subst ${SYSROOT},,${BUILD}) + SRC_RUN = $(subst ${SYSROOT},,${SRCDIR}) + + QEMU_BIN = qemu-${QEMU_ARCH} + QEMU_RUN = ${BUILD_RUN}/${QEMU_BIN} + export QEMU_RUN + + RUNTEST = tests/test_using_qemu.sh +endif + +export BUILD_RUN + +############################################################################## +# The default target is here, to allow dependencies to be expressed below +# without accidentally changing the default target. + +# Default target. +.PHONY: all +all: fwlib futil utillib hostlib cgpt tlcl \ + $(if ${SDK_BUILD},${UTIL_FILES_SDK},${UTIL_FILES_BOARD}) \ + $(if $(filter x86_64,${ARCH}),$(if $(filter clang,${CC}),fuzzers)) \ + $(if $(filter-out 0,${COV}),coverage) + +############################################################################## +# Now we need to describe everything we might want or need to build + +# Everything wants these headers. +INCLUDES += \ + -Ifirmware/include \ + -Ifirmware/lib/include \ + -Ifirmware/lib/cgptlib/include \ + -Ifirmware/lib/cryptolib/include \ + -Ifirmware/lib/tpm_lite/include \ + -Ifirmware/2lib/include \ + -Ifirmware/lib20/include + +# If we're not building for a specific target, just stub out things like the +# TPM commands and various external functions that are provided by the BIOS. +ifeq (${FIRMWARE_ARCH},) +INCLUDES += -Ihost/include -Ihost/lib/include +INCLUDES += -Ihost/lib21/include +ifeq ($(shell uname -s), OpenBSD) +INCLUDES += -I/usr/local/include +endif +endif + +# Firmware library, used by the other firmware components (depthcharge, +# coreboot, etc.). It doesn't need exporting to some other place; they'll build +# this source tree locally and link to it directly. +FWLIB = ${BUILD}/vboot_fw.a + +# Separate TPM lightweight command library (TLCL) +TLCL = ${BUILD}/tlcl.a + +FWLIB_SRCS = \ + firmware/2lib/2api.c \ + firmware/2lib/2auxfw_sync.c \ + firmware/2lib/2common.c \ + firmware/2lib/2context.c \ + firmware/2lib/2crc8.c \ + firmware/2lib/2crypto.c \ + firmware/2lib/2ec_sync.c \ + firmware/2lib/2firmware.c \ + firmware/2lib/2gbb.c \ + firmware/2lib/2hmac.c \ + firmware/2lib/2kernel.c \ + firmware/2lib/2misc.c \ + firmware/2lib/2nvstorage.c \ + firmware/2lib/2packed_key.c \ + firmware/2lib/2recovery_reasons.c \ + firmware/2lib/2rsa.c \ + firmware/2lib/2secdata_firmware.c \ + firmware/2lib/2secdata_fwmp.c \ + firmware/2lib/2secdata_kernel.c \ + firmware/2lib/2sha1.c \ + firmware/2lib/2sha256.c \ + firmware/2lib/2sha512.c \ + firmware/2lib/2sha_utility.c \ + firmware/2lib/2struct.c \ + firmware/2lib/2stub_hwcrypto.c \ + firmware/2lib/2tpm_bootmode.c \ + firmware/lib/cgptlib/cgptlib.c \ + firmware/lib/cgptlib/cgptlib_internal.c \ + firmware/lib/cgptlib/crc32.c \ + firmware/lib/gpt_misc.c \ + firmware/lib/vboot_api_kernel.c \ + firmware/lib/vboot_kernel.c \ + firmware/lib20/api_kernel.c \ + firmware/lib20/kernel.c + +# TPM lightweight command library +ifeq ($(filter-out 0,${TPM2_MODE}),) +TLCL_SRCS = \ + firmware/lib/tpm_lite/tlcl.c +else +# TODO(apronin): tests for TPM2 case? +TLCL_SRCS = \ + firmware/lib/tpm2_lite/tlcl.c \ + firmware/lib/tpm2_lite/marshaling.c +endif + +# Support real TPM unless MOCK_TPM is set +ifneq ($(filter-out 0,${MOCK_TPM}),) +FWLIB_SRCS += \ + firmware/lib/tpm_lite/mocked_tlcl.c +endif + +ifneq ($(filter-out 0,${X86_SHA_EXT}),) +CFLAGS += -DX86_SHA_EXT +FWLIB_SRCS += \ + firmware/2lib/2sha256_x86.c +endif +# Even if X86_SHA_EXT is 0 we need cflags since this will be compiled for tests +${BUILD}/firmware/2lib/2sha256_x86.o: CFLAGS += -mssse3 -mno-avx -msha + +ifeq (${FIRMWARE_ARCH},) +# Include BIOS stubs in the firmware library when compiling for host +# TODO: split out other stub funcs too +FWLIB_SRCS += \ + firmware/stub/tpm_lite_stub.c \ + firmware/stub/vboot_api_stub.c \ + firmware/stub/vboot_api_stub_disk.c \ + firmware/stub/vboot_api_stub_stream.c \ + firmware/2lib/2stub.c +endif + +FWLIB_OBJS = ${FWLIB_SRCS:%.c=${BUILD}/%.o} +TLCL_OBJS = ${TLCL_SRCS:%.c=${BUILD}/%.o} +ALL_OBJS += ${FWLIB_OBJS} ${TLCL_OBJS} + +COMMONLIB_SRCS = \ + host/lib/fmap.c \ + host/lib/flashrom.c \ + host/lib/subprocess.c + +# Intermediate library for the vboot_reference utilities to link against. +UTILLIB = ${BUILD}/libvboot_util.a + +UTILLIB_SRCS = \ + cgpt/cgpt_add.c \ + cgpt/cgpt_boot.c \ + cgpt/cgpt_common.c \ + cgpt/cgpt_create.c \ + cgpt/cgpt_edit.c \ + cgpt/cgpt_prioritize.c \ + cgpt/cgpt_repair.c \ + cgpt/cgpt_show.c \ + futility/dump_kernel_config_lib.c \ + $(CROSSYSTEM_ARCH_C) \ + host/lib/chromeos_config.c \ + host/lib/crossystem.c \ + host/lib/crypto.c \ + host/lib/file_keys.c \ + $(COMMONLIB_SRCS) \ + host/lib/host_common.c \ + host/lib/host_key2.c \ + host/lib/host_keyblock.c \ + host/lib/host_misc.c \ + host/lib/host_signature.c \ + host/lib/host_signature2.c \ + host/lib/signature_digest.c \ + host/lib/util_misc.c \ + host/lib21/host_common.c \ + host/lib21/host_key.c \ + host/lib21/host_misc.c \ + host/lib21/host_signature.c + +UTILLIB_OBJS = ${UTILLIB_SRCS:%.c=${BUILD}/%.o} +ALL_OBJS += ${UTILLIB_OBJS} + +# Externally exported library for some target userspace apps to link with +# (cryptohome, updater, etc.) +HOSTLIB = ${BUILD}/libvboot_host.a + +HOSTLIB_SRCS = \ + cgpt/cgpt_add.c \ + cgpt/cgpt_boot.c \ + cgpt/cgpt_common.c \ + cgpt/cgpt_create.c \ + cgpt/cgpt_edit.c \ + cgpt/cgpt_find.c \ + cgpt/cgpt_prioritize.c \ + cgpt/cgpt_show.c \ + firmware/2lib/2common.c \ + firmware/2lib/2context.c \ + firmware/2lib/2crc8.c \ + firmware/2lib/2crypto.c \ + firmware/2lib/2hmac.c \ + firmware/2lib/2kernel.c \ + firmware/2lib/2nvstorage.c \ + firmware/2lib/2recovery_reasons.c \ + firmware/2lib/2rsa.c \ + firmware/2lib/2sha1.c \ + firmware/2lib/2sha256.c \ + firmware/2lib/2sha512.c \ + firmware/2lib/2sha_utility.c \ + firmware/2lib/2struct.c \ + firmware/2lib/2stub.c \ + firmware/2lib/2stub_hwcrypto.c \ + firmware/lib/cgptlib/cgptlib_internal.c \ + firmware/lib/cgptlib/crc32.c \ + firmware/lib/gpt_misc.c \ + firmware/stub/tpm_lite_stub.c \ + firmware/stub/vboot_api_stub.c \ + firmware/stub/vboot_api_stub_disk.c \ + futility/dump_kernel_config_lib.c \ + $(CROSSYSTEM_ARCH_C) \ + host/lib/chromeos_config.c \ + host/lib/crossystem.c \ + host/lib/crypto.c \ + host/lib/extract_vmlinuz.c \ + $(COMMONLIB_SRCS) \ + host/lib/host_misc.c \ + host/lib21/host_misc.c \ + ${TLCL_SRCS} + +ifneq ($(filter-out 0,${GPT_SPI_NOR}),) +HOSTLIB_SRCS += cgpt/cgpt_nor.c +endif + +HOSTLIB_OBJS = ${HOSTLIB_SRCS:%.c=${BUILD}/%.o} +ALL_OBJS += ${HOSTLIB_OBJS} + +# ---------------------------------------------------------------------------- +# Now for the userspace binaries + +CGPT = ${BUILD}/cgpt/cgpt + +CGPT_SRCS = \ + cgpt/cgpt.c \ + cgpt/cgpt_add.c \ + cgpt/cgpt_boot.c \ + cgpt/cgpt_common.c \ + cgpt/cgpt_create.c \ + cgpt/cgpt_edit.c \ + cgpt/cgpt_find.c \ + cgpt/cgpt_legacy.c \ + cgpt/cgpt_prioritize.c \ + cgpt/cgpt_repair.c \ + cgpt/cgpt_show.c \ + cgpt/cmd_add.c \ + cgpt/cmd_boot.c \ + cgpt/cmd_create.c \ + cgpt/cmd_edit.c \ + cgpt/cmd_find.c \ + cgpt/cmd_legacy.c \ + cgpt/cmd_prioritize.c \ + cgpt/cmd_repair.c \ + cgpt/cmd_show.c + +ifneq ($(filter-out 0,${GPT_SPI_NOR}),) +CGPT_SRCS += cgpt/cgpt_nor.c +endif + +CGPT_OBJS = ${CGPT_SRCS:%.c=${BUILD}/%.o} + +ALL_OBJS += ${CGPT_OBJS} + +CGPT_WRAPPER = ${BUILD}/cgpt/cgpt_wrapper + +CGPT_WRAPPER_SRCS = \ + cgpt/cgpt_nor.c \ + cgpt/cgpt_wrapper.c + +CGPT_WRAPPER_OBJS = ${CGPT_WRAPPER_SRCS:%.c=${BUILD}/%.o} + +ALL_OBJS += ${CGPT_WRAPPER_OBJS} + +# Utility defaults +UTIL_DEFAULTS = ${BUILD}/default/vboot_reference + +# Scripts to install directly (not compiled) +UTIL_SCRIPT_NAMES_SDK = \ + utility/dev_make_keypair \ + utility/vbutil_what_keys +UTIL_SCRIPT_NAMES_BOARD = \ + utility/chromeos-tpm-recovery \ + utility/dev_debug_vboot \ + utility/enable_dev_usb_boot \ + utility/tpm-nvsize + +UTIL_BIN_NAMES_SDK = \ + utility/dumpRSAPublicKey \ + utility/load_kernel_test \ + utility/pad_digest_utility \ + utility/signature_digest_utility \ + utility/verify_data +UTIL_BIN_NAMES_BOARD = \ + utility/crossystem \ + utility/dumpRSAPublicKey \ + utility/tpmc + +UTIL_SCRIPTS_SDK = $(addprefix ${BUILD}/,${UTIL_SCRIPT_NAMES_SDK}) +UTIL_SCRIPTS_BOARD = $(addprefix ${BUILD}/,${UTIL_SCRIPT_NAMES_BOARD}) +UTIL_BINS_SDK = $(addprefix ${BUILD}/,${UTIL_BIN_NAMES_SDK}) +UTIL_BINS_BOARD = $(addprefix ${BUILD}/,${UTIL_BIN_NAMES_BOARD}) +UTIL_FILES_SDK = ${UTIL_BINS_SDK} ${UTIL_SCRIPTS_SDK} +UTIL_FILES_BOARD = ${UTIL_BINS_BOARD} ${UTIL_SCRIPTS_BOARD} +ALL_OBJS += $(addsuffix .o,${UTIL_BINS_SDK}) +ALL_OBJS += $(addsuffix .o,${UTIL_BINS_BOARD}) + + +# Signing scripts that are also useful on DUTs. +SIGNING_SCRIPTS_BOARD = \ + scripts/image_signing/resign_firmwarefd.sh \ + scripts/image_signing/make_dev_firmware.sh \ + scripts/image_signing/make_dev_ssd.sh \ + scripts/image_signing/gbb_flags_common.sh \ + scripts/image_signing/set_gbb_flags.sh \ + scripts/image_signing/get_gbb_flags.sh \ + scripts/image_signing/common_minimal.sh + +# SDK installations just want everything. +SIGNING_SCRIPTS_SDK = $(wildcard scripts/image_signing/*.sh) + +# Unified firmware utility. +FUTIL_BIN = ${BUILD}/futility/futility + +# These are the executables that are now built in to futility. We'll create +# symlinks for these so the old names will still work. +FUTIL_SYMLINKS = \ + dump_fmap \ + dump_kernel_config \ + gbb_utility \ + vbutil_firmware \ + vbutil_kernel \ + vbutil_key \ + vbutil_keyblock + +FUTIL_SRCS = \ + futility/futility.c \ + futility/cmd_create.c \ + futility/cmd_dump_fmap.c \ + futility/cmd_dump_kernel_config.c \ + futility/cmd_gbb_utility.c \ + futility/cmd_gscvd.c \ + futility/cmd_load_fmap.c \ + futility/cmd_pcr.c \ + futility/cmd_show.c \ + futility/cmd_sign.c \ + futility/cmd_update.c \ + futility/cmd_validate_rec_mrc.c \ + futility/cmd_vbutil_firmware.c \ + futility/cmd_vbutil_firmware.c \ + futility/cmd_vbutil_kernel.c \ + futility/cmd_vbutil_key.c \ + futility/cmd_vbutil_keyblock.c \ + futility/file_type_bios.c \ + futility/file_type.c \ + futility/file_type_rwsig.c \ + futility/file_type_usbpd1.c \ + futility/misc.c \ + futility/vb1_helper.c \ + futility/vb2_helper.c + +# Maintain behaviour of default on. +USE_FLASHROM ?= 1 + +ifneq ($(filter-out 0,${USE_FLASHROM}),) +$(info building with libflashrom support) +FLASHROM_LIBS := $(shell ${PKG_CONFIG} --libs flashrom) +FUTIL_SRCS += futility/flashrom_drv.c \ + futility/updater_archive.c \ + futility/updater_quirks.c \ + futility/updater_utils.c \ + futility/updater.c +CFLAGS += -DUSE_FLASHROM +endif + +# List of commands built in futility. +FUTIL_CMD_LIST = ${BUILD}/gen/futility_cmds.c + +FUTIL_OBJS = ${FUTIL_SRCS:%.c=${BUILD}/%.o} ${FUTIL_CMD_LIST:%.c=%.o} + +${FUTIL_OBJS}: INCLUDES += -Ihost/lib21/include + +ALL_OBJS += ${FUTIL_OBJS} + + +# Library of handy test functions. +TESTLIB = ${BUILD}/tests/test.a + +TESTLIB_SRCS += \ + tests/test_common.c \ + tests/timer_utils.c \ + tests/crc32_test.c + +TESTLIB_OBJS = ${TESTLIB_SRCS:%.c=${BUILD}/%.o} +TEST_OBJS += ${TESTLIB_OBJS} + + +# And some compiled tests. +TEST_NAMES = \ + tests/cgptlib_test \ + tests/chromeos_config_tests \ + tests/gpt_misc_tests \ + tests/sha_benchmark \ + tests/subprocess_tests \ + tests/vboot_api_kernel4_tests \ + tests/vboot_api_kernel_tests \ + tests/vboot_kernel_tests \ + tests/vboot_kernel2_tests \ + tests/verify_kernel + +ifeq ($(filter-out 0,${MOCK_TPM})$(filter-out 0,${TPM2_MODE}),) +# tlcl_tests only works when MOCK_TPM is disabled +# TODO(apronin): tests for TPM2 case? +TEST_NAMES += \ + tests/tlcl_tests +endif + +TEST_FUTIL_NAMES = \ + tests/futility/binary_editor \ + tests/futility/test_file_types \ + tests/futility/test_not_really + +TEST_NAMES += ${TEST_FUTIL_NAMES} + +TEST2X_NAMES = \ + tests/vb2_api_tests \ + tests/vb2_auxfw_sync_tests \ + tests/vb2_common_tests \ + tests/vb2_common2_tests \ + tests/vb2_common3_tests \ + tests/vb2_crypto_tests \ + tests/vb2_ec_sync_tests \ + tests/vb2_firmware_tests \ + tests/vb2_gbb_tests \ + tests/vb2_host_flashrom_tests \ + tests/vb2_host_key_tests \ + tests/vb2_host_nvdata_flashrom_tests \ + tests/vb2_kernel_tests \ + tests/vb2_misc_tests \ + tests/vb2_nvstorage_tests \ + tests/vb2_rsa_utility_tests \ + tests/vb2_recovery_reasons_tests \ + tests/vb2_secdata_firmware_tests \ + tests/vb2_secdata_fwmp_tests \ + tests/vb2_secdata_kernel_tests \ + tests/vb2_sha_api_tests \ + tests/vb2_sha_tests \ + tests/hmac_test + +TEST20_NAMES = \ + tests/vb20_api_kernel_tests \ + tests/vb20_verify_fw.c \ + tests/vb20_kernel_tests \ + tests/vb20_rsa_padding_tests \ + tests/vb20_verify_fw + +TEST21_NAMES = \ + tests/vb21_host_common2_tests \ + tests/vb21_host_common_tests \ + tests/vb21_host_key_tests \ + tests/vb21_host_misc_tests \ + tests/vb21_host_sig_tests + +TEST_NAMES += ${TEST2X_NAMES} ${TEST20_NAMES} ${TEST21_NAMES} + +# Tests which should be run on dut +ifeq (${ARCH}, x86_64) +DUT_TEST_NAMES += tests/vb2_sha256_x86_tests +endif + +TEST_NAMES += ${DUT_TEST_NAMES} + +# And a few more... +ifeq ($(filter-out 0,${TPM2_MODE}),) +TLCL_TEST_NAMES = \ + tests/tpm_lite/tpmtest_earlyextend \ + tests/tpm_lite/tpmtest_earlynvram \ + tests/tpm_lite/tpmtest_earlynvram2 \ + tests/tpm_lite/tpmtest_enable \ + tests/tpm_lite/tpmtest_fastenable \ + tests/tpm_lite/tpmtest_globallock \ + tests/tpm_lite/tpmtest_redefine_unowned \ + tests/tpm_lite/tpmtest_spaceperm \ + tests/tpm_lite/tpmtest_testsetup \ + tests/tpm_lite/tpmtest_timing \ + tests/tpm_lite/tpmtest_writelimit +else +# TODO(apronin): tests for TPM2 case? +TLCL_TEST_NAMES = +endif + +TEST_NAMES += ${TLCL_TEST_NAMES} + +# Finally +TEST_BINS = $(addprefix ${BUILD}/,${TEST_NAMES}) +TEST_OBJS += $(addsuffix .o,${TEST_BINS}) + +TEST_FUTIL_BINS = $(addprefix ${BUILD}/,${TEST_FUTIL_NAMES}) +TEST2X_BINS = $(addprefix ${BUILD}/,${TEST2X_NAMES}) +TEST20_BINS = $(addprefix ${BUILD}/,${TEST20_NAMES}) +TEST21_BINS = $(addprefix ${BUILD}/,${TEST21_NAMES}) + +# Directory containing test keys +TEST_KEYS = ${SRC_RUN}/tests/testkeys + +# ---------------------------------------------------------------------------- +# Fuzzing binaries + +FUZZ_TEST_NAMES = \ + tests/cgpt_fuzzer \ + tests/vb2_keyblock_fuzzer \ + tests/vb2_preamble_fuzzer + +FUZZ_TEST_BINS = $(addprefix ${BUILD}/,${FUZZ_TEST_NAMES}) + +############################################################################## +# Finally, some targets. High-level ones first. + +# Create output directories if necessary. Do this via explicit shell commands +# so it happens before trying to generate/include dependencies. +SUBDIRS := firmware host cgpt utility futility tests tests/tpm_lite +_dir_create := $(foreach d, \ + $(shell find ${SUBDIRS} -name '*.c' -exec dirname {} \; | sort -u), \ + $(shell [ -d ${BUILD}/${d} ] || mkdir -p ${BUILD}/${d})) + +.PHONY: clean +clean: + ${Q}/bin/rm -rf ${BUILD} + +.PHONY: install +install: cgpt_install signing_install futil_install pc_files_install \ + lib_install $(if ${SDK_BUILD},,util_install_defaults) \ + $(foreach f,$(if ${SDK_BUILD},${UTIL_FILES_SDK},${UTIL_FILES_BOARD}), \ + util_install-$(patsubst ${BUILD}/%,%,${f})) + +.PHONY: install_dev +install_dev: devkeys_install headers_install + +.PHONY: install_mtd +install_mtd: install cgpt_wrapper_install + +.PHONY: install_for_test +install_for_test: override DESTDIR = ${TEST_INSTALL_DIR} +install_for_test: test_setup install \ + $(foreach f,${UTIL_FILES_SDK} ${UTIL_FILES_BOARD}, \ + util_install-$(patsubst ${BUILD}/%,%,${f})) + +# Don't delete intermediate object files +.SECONDARY: + +# ---------------------------------------------------------------------------- +# Firmware library + +# TPM-specific flags. These depend on the particular TPM we're targeting for. +# They are needed here only for compiling parts of the firmware code into +# user-level tests. + +# TPM_BLOCKING_CONTINUESELFTEST is defined if TPM_ContinueSelfTest blocks until +# the self test has completed. + +${TLCL_OBJS}: CFLAGS += -DTPM_BLOCKING_CONTINUESELFTEST + +# TPM_MANUAL_SELFTEST is defined if the self test must be started manually +# (with a call to TPM_ContinueSelfTest) instead of starting automatically at +# power on. +# +# We sincerely hope that TPM_BLOCKING_CONTINUESELFTEST and TPM_MANUAL_SELFTEST +# are not both defined at the same time. (See comment in code.) + +# CFLAGS += -DTPM_MANUAL_SELFTEST + +# NOTE: UNROLL_LOOPS *only* affects SHA256, *not* SHA512. This seems to have +# been a conscious decision at some point (see b/35501356) but whether it still +# holds up in all situations on all architectures today might need to be +# reevaluated. For now, since we currently always use SHA256 for (non-recovery) +# kernel bodies and don't unroll loops for firmware verification, it's not very +# relevant in practice. To unroll SHA512, UNROLL_LOOPS_SHA512 would need to be +# defined. +ifneq ($(filter-out 0,$(UNROLL_LOOPS)),) +$(info vboot SHA256 built with unrolled loops (faster, larger code size)) +CFLAGS += -DUNROLL_LOOPS +else +$(info vboot SHA256 built with tight loops (slower, smaller code size)) +endif + +.PHONY: fwlib +fwlib: $(if ${FIRMWARE_ARCH},${FWLIB},) + +${FWLIB}: ${FWLIB_OBJS} + @${PRINTF} " RM $(subst ${BUILD}/,,$@)\n" + ${Q}rm -f $@ + @${PRINTF} " AR $(subst ${BUILD}/,,$@)\n" + ${Q}ar qc $@ $^ + +.PHONY: tlcl +tlcl: ${TLCL} + +${TLCL}: ${TLCL_OBJS} + @${PRINTF} " RM $(subst ${BUILD}/,,$@)\n" + ${Q}rm -f $@ + @${PRINTF} " AR $(subst ${BUILD}/,,$@)\n" + ${Q}ar qc $@ $^ + +# ---------------------------------------------------------------------------- +# Host library(s) + +.PHONY: utillib +utillib: ${UTILLIB} + +# TODO: better way to make .a than duplicating this recipe each time? +${UTILLIB}: ${UTILLIB_OBJS} ${FWLIB_OBJS} ${TLCL_OBJS} + @${PRINTF} " RM $(subst ${BUILD}/,,$@)\n" + ${Q}rm -f $@ + @${PRINTF} " AR $(subst ${BUILD}/,,$@)\n" + ${Q}ar qc $@ $^ + +.PHONY: hostlib +hostlib: ${HOSTLIB} + +# TODO: better way to make .a than duplicating this recipe each time? +${HOSTLIB}: ${HOSTLIB_OBJS} + @${PRINTF} " RM $(subst ${BUILD}/,,$@)\n" + ${Q}rm -f $@ + @${PRINTF} " AR $(subst ${BUILD}/,,$@)\n" + ${Q}ar qc $@ $^ + +.PHONY: headers_install +headers_install: + @${PRINTF} " INSTALL HEADERS\n" + ${Q}mkdir -p ${UI_DIR} + ${Q}${INSTALL} -t ${UI_DIR} -m644 \ + host/include/* \ + firmware/2lib/include/2crypto.h \ + firmware/2lib/include/2recovery_reasons.h \ + firmware/2lib/include/2sysincludes.h \ + firmware/include/gpt.h \ + firmware/include/tlcl.h \ + firmware/include/tss_constants.h \ + firmware/include/tpm1_tss_constants.h \ + firmware/include/tpm2_tss_constants.h + +.PHONY: lib_install +lib_install: ${HOSTLIB} + @${PRINTF} " INSTALL HOSTLIB\n" + ${Q}mkdir -p ${UL_DIR} + ${Q}${INSTALL} -t ${UL_DIR} -m644 $^ + +.PHONY: devkeys_install +devkeys_install: + @${PRINTF} " INSTALL DEVKEYS\n" + ${Q}mkdir -p ${US_DIR}/devkeys + ${Q}${INSTALL} -t ${US_DIR}/devkeys -m644 \ + `find tests/devkeys -type f -maxdepth 1` + +# ---------------------------------------------------------------------------- +# CGPT library and utility + +.PHONY: cgpt_wrapper +cgpt_wrapper: ${CGPT_WRAPPER} + +${CGPT_WRAPPER}: ${CGPT_WRAPPER_OBJS} ${UTILLIB} + @$(PRINTF) " LD $(subst ${BUILD}/,,$@)\n" + ${Q}${LD} -o ${CGPT_WRAPPER} ${LDFLAGS} $^ ${LDLIBS} + +.PHONY: cgpt +cgpt: ${CGPT} $(if $(filter-out 0,${GPT_SPI_NOR}),cgpt_wrapper) + +# on FreeBSD: install misc/e2fsprogs-libuuid from ports, +# or e2fsprogs-libuuid from its binary package system. +# on OpenBSD: install sysutils/e2fsprogs from ports, +# or e2fsprogs from its binary package system, to install uuid/uid.h +${CGPT}: LDLIBS += -luuid + +${CGPT}: ${CGPT_OBJS} ${UTILLIB} + @${PRINTF} " LDcgpt $(subst ${BUILD}/,,$@)\n" + ${Q}${LD} -o ${CGPT} ${LDFLAGS} $^ ${LDLIBS} + +.PHONY: cgpt_install +cgpt_install: ${CGPT} + @${PRINTF} " INSTALL CGPT\n" + ${Q}mkdir -p ${UB_DIR} + ${Q}${INSTALL} -t ${UB_DIR} $^ + +.PHONY: cgpt_wrapper_install +cgpt_wrapper_install: cgpt_install ${CGPT_WRAPPER} + @$(PRINTF) " INSTALL cgpt_wrapper\n" + ${Q}${INSTALL} -t ${UB_DIR} ${CGPT_WRAPPER} + ${Q}mv ${UB_DIR}/$(notdir ${CGPT}) \ + ${UB_DIR}/$(notdir ${CGPT}).bin + ${Q}mv ${UB_DIR}/$(notdir ${CGPT_WRAPPER}) \ + ${UB_DIR}/$(notdir ${CGPT}) + +# ---------------------------------------------------------------------------- +# Utilities + +# These have their own headers too. +${BUILD}/utility/%: INCLUDES += -Iutility/include + +${UTIL_BINS_SDK}: ${UTILLIB} +${UTIL_BINS_SDK}: LIBS = ${UTILLIB} +${UTIL_BINS_BOARD}: ${UTILLIB} +${UTIL_BINS_BOARD}: LIBS = ${UTILLIB} + +${UTIL_SCRIPTS_SDK} ${UTIL_SCRIPTS_BOARD}: ${BUILD}/%: % + ${Q}cp -f $< $@ + ${Q}chmod a+rx $@ + +define UTIL_INSTALL_template +.PHONY: util_install-$(1) +util_install-$(1): $$(addprefix $${BUILD}/,$(1)) + @${PRINTF} " INSTALL $(1)\n" + ${Q}mkdir -p $${UB_DIR} + ${Q}${INSTALL} -t $${UB_DIR} $$< +endef + +$(foreach f, $(sort ${UTIL_FILES_SDK} ${UTIL_FILES_BOARD}), \ + $(eval $(call UTIL_INSTALL_template,$(patsubst ${BUILD}/%,%,${f})))) + +.PHONY: util_install_defaults +util_install_defaults: ${UTIL_DEFAULTS} + ${Q}mkdir -p ${DF_DIR} + ${Q}${INSTALL} -t ${DF_DIR} -m 'u=rw,go=r,a-s' ${UTIL_DEFAULTS} + +# And some signing stuff for the target +.PHONY: signing_install +signing_install: $(if ${SDK_BUILD},\ + ${SIGNING_SCRIPTS_SDK},${SIGNING_SCRIPTS_BOARD}) + @${PRINTF} " INSTALL SIGNING\n" + ${Q}mkdir -p ${VB_DIR} + ${Q}${INSTALL} -t ${VB_DIR} $^ + +# ---------------------------------------------------------------------------- +# Firmware Utility + +.PHONY: futil +futil: ${FUTIL_BIN} + +# FUTIL_LIBS is shared by FUTIL_BIN and TEST_FUTIL_BINS. +FUTIL_LIBS = ${CROSID_LIBS} ${CRYPTO_LIBS} ${LIBZIP_LIBS} ${FLASHROM_LIBS} + +${FUTIL_BIN}: LDLIBS += ${FUTIL_LIBS} +${FUTIL_BIN}: ${FUTIL_OBJS} ${UTILLIB} ${FWLIB} + @${PRINTF} " LD $(subst ${BUILD}/,,$@)\n" + ${Q}${LD} -o $@ ${LDFLAGS} $^ ${LDLIBS} + +.PHONY: futil_install +futil_install: ${FUTIL_BIN} + @${PRINTF} " INSTALL futility\n" + ${Q}mkdir -p ${UB_DIR} + ${Q}${INSTALL} -t ${UB_DIR} ${FUTIL_BIN} + ${Q}for prog in ${FUTIL_SYMLINKS}; do \ + ln -sf futility "${UB_DIR}/$$prog"; done + +# ---------------------------------------------------------------------------- +# Utility to generate TLCL structure definition header file. + +${BUILD}/utility/tlcl_generator: CFLAGS += -fpack-struct + +STRUCTURES_TMP=${BUILD}/tlcl_structures.tmp +STRUCTURES_SRC=firmware/lib/tpm_lite/include/tlcl_structures.h + +.PHONY: update_tlcl_structures +update_tlcl_structures: ${BUILD}/utility/tlcl_generator + @${PRINTF} " Rebuilding TLCL structures\n" + ${Q}${BUILD}/utility/tlcl_generator > ${STRUCTURES_TMP} + ${Q}cmp -s ${STRUCTURES_TMP} ${STRUCTURES_SRC} || \ + ( echo "%% Updating structures.h %%" && \ + cp ${STRUCTURES_TMP} ${STRUCTURES_SRC} ) + +# ---------------------------------------------------------------------------- +# Tests + +.PHONY: tests +tests: ${TEST_BINS} + +${TEST_BINS}: ${UTILLIB} ${TESTLIB} +${TEST_BINS}: INCLUDES += -Itests +${TEST_BINS}: LIBS = ${TESTLIB} ${UTILLIB} + +# Futility tests need almost everything that futility needs. +${TEST_FUTIL_BINS}: ${FUTIL_OBJS} ${UTILLIB} +${TEST_FUTIL_BINS}: INCLUDES += -Ifutility +${TEST_FUTIL_BINS}: OBJS += ${FUTIL_OBJS} ${UTILLIB} +${TEST_FUTIL_BINS}: LDLIBS += ${FUTIL_LIBS} + +${TEST2X_BINS}: ${FWLIB} +${TEST2X_BINS}: LIBS += ${FWLIB} + +${TEST20_BINS}: ${FWLIB} +${TEST20_BINS}: LIBS += ${FWLIB} +${TEST20_BINS}: LDLIBS += ${CRYPTO_LIBS} + +${TESTLIB}: ${TESTLIB_OBJS} + @${PRINTF} " RM $(subst ${BUILD}/,,$@)\n" + ${Q}rm -f $@ + @${PRINTF} " AR $(subst ${BUILD}/,,$@)\n" + ${Q}ar qc $@ $^ + +DUT_TEST_BINS = $(addprefix ${BUILD}/,${DUT_TEST_NAMES}) + +# Special build for sha256_x86 test +${BUILD}/tests/vb2_sha256_x86_tests: \ + ${BUILD}/firmware/2lib/2sha256_x86.o +${BUILD}/tests/vb2_sha256_x86_tests: \ + LIBS += ${BUILD}/firmware/2lib/2sha256_x86.o + +.PHONY: install_dut_test +install_dut_test: ${DUT_TEST_BINS} +ifneq ($(strip ${DUT_TEST_BINS}),) + @${PRINTF} " INSTALL DUT TESTS\n" + ${Q}mkdir -p ${DUT_TEST_DIR} + ${Q}${INSTALL} -t ${DUT_TEST_DIR} $^ +endif + +# ---------------------------------------------------------------------------- +# Fuzzers + +.PHONY: fuzzers +fuzzers: ${FUZZ_TEST_BINS} + +${FUZZ_TEST_BINS}: ${FWLIB} +${FUZZ_TEST_BINS}: LIBS = ${FWLIB} +${FUZZ_TEST_BINS}: LDFLAGS += -fsanitize=fuzzer + +# ---------------------------------------------------------------------------- +# Generic build rules. LIBS and OBJS can be overridden to tweak the generic +# rules for specific targets. + +${BUILD}/%: ${BUILD}/%.o ${OBJS} ${LIBS} + @${PRINTF} " LD $(subst ${BUILD}/,,$@)\n" + ${Q}${LD} -o $@ ${LDFLAGS} $< ${OBJS} ${LIBS} ${LDLIBS} + +${BUILD}/%.o: %.c + @${PRINTF} " CC $(subst ${BUILD}/,,$@)\n" + ${Q}${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< + +${BUILD}/%.o: ${BUILD}/%.c + @${PRINTF} " CC $(subst ${BUILD}/,,$@)\n" + ${Q}${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< + +# ---------------------------------------------------------------------------- +# Here are the special tweaks to the generic rules. + +# Always create the defaults file, since it depends on input variables +.PHONY: ${UTIL_DEFAULTS} +${UTIL_DEFAULTS}: + @${PRINTF} " CREATE $(subst ${BUILD}/,,$@)\n" + ${Q}rm -f $@ + ${Q}mkdir -p $(dir $@) + ${Q}echo '# Generated file. Do not edit.' > $@.tmp + ${Q}echo "DEV_DEBUG_FORCE=${DEV_DEBUG_FORCE}" >> $@.tmp + ${Q}mv -f $@.tmp $@ + +# Some utilities need external crypto functions +CRYPTO_LIBS := $(shell ${PKG_CONFIG} --libs libcrypto) +ifeq ($(shell uname -s), FreeBSD) +CRYPTO_LIBS += -lcrypto +endif +ifeq ($(shell uname -s), OpenBSD) +LDFLAGS += -Wl,-z,notext +endif + +${BUILD}/utility/dumpRSAPublicKey: LDLIBS += ${CRYPTO_LIBS} +${BUILD}/utility/pad_digest_utility: LDLIBS += ${CRYPTO_LIBS} +${BUILD}/utility/signature_digest_utility: LDLIBS += ${CRYPTO_LIBS} +${BUILD}/utility/verify_data: LDLIBS += ${CRYPTO_LIBS} + +${BUILD}/tests/vb2_host_key_tests: LDLIBS += ${CRYPTO_LIBS} +${BUILD}/tests/vb2_common2_tests: LDLIBS += ${CRYPTO_LIBS} +${BUILD}/tests/vb2_common3_tests: LDLIBS += ${CRYPTO_LIBS} +${BUILD}/tests/verify_kernel: LDLIBS += ${CRYPTO_LIBS} +${BUILD}/tests/hmac_test: LDLIBS += ${CRYPTO_LIBS} + +${TEST21_BINS}: LDLIBS += ${CRYPTO_LIBS} + +# Allow multiple definitions, so tests can mock functions from other libraries +${BUILD}/tests/%: LDFLAGS += -Xlinker --allow-multiple-definition +${BUILD}/tests/%: LDLIBS += -lrt -luuid +${BUILD}/tests/%: LIBS += ${TESTLIB} + +ifeq ($(filter-out 0,${TPM2_MODE}),) +# TODO(apronin): tests for TPM2 case? +TLCL_TEST_BINS = $(addprefix ${BUILD}/,${TLCL_TEST_NAMES}) +${TLCL_TEST_BINS}: OBJS += ${BUILD}/tests/tpm_lite/tlcl_tests.o +${TLCL_TEST_BINS}: ${BUILD}/tests/tpm_lite/tlcl_tests.o +TEST_OBJS += ${BUILD}/tests/tpm_lite/tlcl_tests.o +endif + +# ---------------------------------------------------------------------------- +# Here are the special rules that don't fit in the generic rules. + +# Generates the list of commands defined in futility by running grep in the +# source files looking for the DECLARE_FUTIL_COMMAND() macro usage. +${FUTIL_CMD_LIST}: ${FUTIL_SRCS} + @${PRINTF} " GEN $(subst ${BUILD}/,,$@)\n" + ${Q}rm -f $@ $@_t $@_commands + ${Q}mkdir -p ${BUILD}/gen + ${Q}grep -hoRE '^DECLARE_FUTIL_COMMAND\([^,]+' $^ \ + | sed 's/DECLARE_FUTIL_COMMAND(\(.*\)/_CMD(\1)/' \ + | sort >>$@_commands + ${Q}./scripts/getversion.sh >> $@_t + ${Q}echo '#define _CMD(NAME) extern const struct' \ + 'futil_cmd_t __cmd_##NAME;' >> $@_t + ${Q}cat $@_commands >> $@_t + ${Q}echo '#undef _CMD' >> $@_t + ${Q}echo '#define _CMD(NAME) &__cmd_##NAME,' >> $@_t + ${Q}echo 'const struct futil_cmd_t *const futil_cmds[] = {' >> $@_t + ${Q}cat $@_commands >> $@_t + ${Q}echo '0}; /* null-terminated */' >> $@_t + ${Q}echo '#undef _CMD' >> $@_t + ${Q}mv $@_t $@ + ${Q}rm -f $@_commands + +############################################################################## +# Targets that exist just to run tests + +.PHONY: test_setup +test_setup:: cgpt ${UTIL_FILES_SDK} ${UTIL_FILES_BOARD} futil tests + +# Qemu setup for cross-compiled tests. Need to copy qemu binary into the +# sysroot. +ifneq (${QEMU_ARCH},) +test_setup:: qemu_install + +.PHONY: qemu_install +qemu_install: +ifeq (${SYSROOT},) + $(error SYSROOT must be set to the top of the target-specific root \ +when cross-compiling for qemu-based tests to run properly.) +endif + @${PRINTF} " Copying qemu binary.\n" + ${Q}cp -fu /usr/bin/${QEMU_BIN} ${BUILD}/${QEMU_BIN} + ${Q}chmod a+rx ${BUILD}/${QEMU_BIN} +endif + +# Generate test keys +.PHONY: genkeys +genkeys: install_for_test + tests/gen_test_keys.sh + +# Generate test cases +.PHONY: gentestcases +gentestcases: install_for_test + tests/gen_test_cases.sh + +# Generate test cases for fuzzing +.PHONY: genfuzztestcases +genfuzztestcases: install_for_test + tests/gen_fuzz_test_cases.sh + +.PHONY: runcgpttests +runcgpttests: install_for_test + ${RUNTEST} ${BUILD_RUN}/tests/cgptlib_test + +.PHONY: runtestscripts +runtestscripts: install_for_test genfuzztestcases + scripts/image_signing/sign_android_unittests.sh + tests/load_kernel_tests.sh + tests/run_cgpt_tests.sh ${BUILD_RUN}/cgpt/cgpt + tests/run_cgpt_tests.sh ${BUILD_RUN}/cgpt/cgpt -D 358400 + tests/run_preamble_tests.sh + tests/run_vbutil_kernel_arg_tests.sh + tests/run_vbutil_tests.sh + tests/vb2_rsa_tests.sh + tests/vb2_firmware_tests.sh + +.PHONY: runmisctests +runmisctests: install_for_test + ${RUNTEST} ${BUILD_RUN}/tests/gpt_misc_tests + ${RUNTEST} ${BUILD_RUN}/tests/subprocess_tests +ifeq ($(filter-out 0,${MOCK_TPM})$(filter-out 0,${TPM2_MODE}),) +# tlcl_tests only works when MOCK_TPM is disabled + ${RUNTEST} ${BUILD_RUN}/tests/tlcl_tests +endif + ${RUNTEST} ${BUILD_RUN}/tests/vboot_api_kernel4_tests + ${RUNTEST} ${BUILD_RUN}/tests/vboot_api_kernel_tests + ${RUNTEST} ${BUILD_RUN}/tests/vboot_kernel_tests + ${RUNTEST} ${BUILD_RUN}/tests/vboot_kernel2_tests + +.PHONY: run2tests +run2tests: install_for_test + ${RUNTEST} ${BUILD_RUN}/tests/vb2_api_tests + ${RUNTEST} ${BUILD_RUN}/tests/vb2_auxfw_sync_tests + ${RUNTEST} ${BUILD_RUN}/tests/vb2_common_tests + ${RUNTEST} ${BUILD_RUN}/tests/vb2_common2_tests ${TEST_KEYS} + ${RUNTEST} ${BUILD_RUN}/tests/vb2_common3_tests ${TEST_KEYS} + ${RUNTEST} ${BUILD_RUN}/tests/vb2_crypto_tests + ${RUNTEST} ${BUILD_RUN}/tests/vb2_ec_sync_tests + ${RUNTEST} ${BUILD_RUN}/tests/vb2_firmware_tests + ${RUNTEST} ${BUILD_RUN}/tests/vb2_gbb_tests + ${RUNTEST} ${BUILD_RUN}/tests/vb2_host_key_tests + ${RUNTEST} ${BUILD_RUN}/tests/vb2_kernel_tests + ${RUNTEST} ${BUILD_RUN}/tests/vb2_misc_tests + ${RUNTEST} ${BUILD_RUN}/tests/vb2_nvstorage_tests + ${RUNTEST} ${BUILD_RUN}/tests/vb2_rsa_utility_tests + ${RUNTEST} ${BUILD_RUN}/tests/vb2_secdata_firmware_tests + ${RUNTEST} ${BUILD_RUN}/tests/vb2_secdata_fwmp_tests + ${RUNTEST} ${BUILD_RUN}/tests/vb2_secdata_kernel_tests + ${RUNTEST} ${BUILD_RUN}/tests/vb2_sha_api_tests + ${RUNTEST} ${BUILD_RUN}/tests/vb2_sha_tests + ${RUNTEST} ${BUILD_RUN}/tests/vb20_api_kernel_tests + ${RUNTEST} ${BUILD_RUN}/tests/vb20_kernel_tests + ${RUNTEST} ${BUILD_RUN}/tests/vb21_host_common_tests + ${RUNTEST} ${BUILD_RUN}/tests/vb21_host_common2_tests ${TEST_KEYS} + ${RUNTEST} ${BUILD_RUN}/tests/vb21_host_key_tests ${TEST_KEYS} ${BUILD} + ${RUNTEST} ${BUILD_RUN}/tests/vb21_host_misc_tests ${BUILD} + ${RUNTEST} ${BUILD_RUN}/tests/vb21_host_sig_tests ${TEST_KEYS} + ${RUNTEST} ${BUILD_RUN}/tests/hmac_test + +.PHONY: runfutiltests +runfutiltests: install_for_test + tests/futility/run_test_scripts.sh + ${RUNTEST} ${BUILD_RUN}/tests/futility/test_file_types + ${RUNTEST} ${BUILD_RUN}/tests/futility/test_not_really + +# Test all permutations of encryption keys, instead of just the ones we use. +# Not run by automated build. +.PHONY: runlongtests +runlongtests: install_for_test genkeys genfuzztestcases + ${RUNTEST} ${BUILD_RUN}/tests/vb2_common2_tests ${TEST_KEYS} --all + ${RUNTEST} ${BUILD_RUN}/tests/vb2_common3_tests ${TEST_KEYS} --all + ${RUNTEST} ${BUILD_RUN}/tests/vb21_host_common2_tests ${TEST_KEYS} --all + tests/run_preamble_tests.sh --all + tests/run_vbutil_tests.sh --all + +.PHONY: rununittests +rununittests: runcgpttests runmisctests run2tests + +# Print a big green success message at the end of all tests. If you don't see +# that, you know there was an error somewhere further up. +.PHONY: runtests +runtests: rununittests runtestscripts runfutiltests + ${Q}echo -e "\nruntests: \E[32;1mALL TESTS PASSED SUCCESSFULLY!\E[0;m\n" + +# Code coverage +.PHONY: coverage_init +coverage_init: install_for_test + rm -f ${COV_INFO}* + lcov -c -i -d . -b . -o ${COV_INFO}.initial + +.PHONY: coverage_html +coverage_html: + lcov -c -d . -b . -o ${COV_INFO}.tests + lcov -a ${COV_INFO}.initial -a ${COV_INFO}.tests -o ${COV_INFO}.total + lcov -r ${COV_INFO}.total '/usr/*' -o ${COV_INFO}.local + genhtml ${COV_INFO}.local -o ${BUILD}/coverage +# Generate addtional coverage stats just for firmware subdir, because the stats +# for the whole project don't include subdirectory summaries. This will print +# the summary for just the firmware sources. + lcov -r ${COV_INFO}.local '*/stub/*' -o ${COV_INFO}.nostub + lcov -e ${COV_INFO}.nostub '${SRCDIR}/firmware/*' \ + -o ${COV_INFO}.firmware + +.PHONY: coverage +ifeq ($(filter-out 0,${COV}),) +coverage: + $(error Build coverage like this: make clean && COV=1 make coverage) +else +coverage: coverage_init runtests coverage_html +endif + +# Include generated dependencies +ALL_DEPS += ${ALL_OBJS:%.o=%.o.d} +TEST_DEPS += ${TEST_OBJS:%.o=%.o.d} +-include ${ALL_DEPS} +-include ${TEST_DEPS} + +# We want to use only relative paths in cscope.files, especially since the +# paths inside and outside the chroot are different. +SRCDIRPAT=$(subst /,\/,${SRCDIR}/) + +# Note: vboot 2.0 is deprecated, so don't index those files +${BUILD}/cscope.files: all install_for_test + ${Q}rm -f $@ + ${Q}cat ${ALL_DEPS} | tr -d ':\\' | tr ' ' '\012' | \ + grep -v /lib20/ | \ + sed -e "s/${SRCDIRPAT}//" | \ + egrep '\.[chS]$$' | sort | uniq > $@ + +cmd_etags = etags -o ${BUILD}/TAGS $(shell cat ${BUILD}/cscope.files) +cmd_ctags = ctags -o ${BUILD}/tags $(shell cat ${BUILD}/cscope.files) +run_if_prog = $(if $(shell which $(1) 2>/dev/null),$(2),) + +.PHONY: tags TAGS xrefs +tags TAGS xrefs: ${BUILD}/cscope.files + ${Q}\rm -f ${BUILD}/tags ${BUILD}/TAGS + ${Q}$(call run_if_prog,etags,${cmd_etags}) + ${Q}$(call run_if_prog,ctags,${cmd_ctags}) + +PC_FILES = ${PC_IN_FILES:%.pc.in=${BUILD}/%.pc} +${PC_FILES}: ${PC_IN_FILES} + ${Q}sed \ + -e 's:@LDLIBS@:${LDLIBS}:' \ + -e 's:@LIBDIR@:${LIBDIR}:' \ + $< > $@ + +.PHONY: pc_files_install +pc_files_install: ${PC_FILES} + ${Q}mkdir -p ${ULP_DIR} + ${Q}${INSTALL} -D -m 0644 $< ${ULP_DIR}/$(notdir $<) diff --git a/OWNERS b/OWNERS new file mode 100644 index 0000000..21ecb22 --- /dev/null +++ b/OWNERS @@ -0,0 +1,5 @@ +jwerner@chromium.org +yupingso@chromium.org +twawrzynczak@chromium.org +hungte@chromium.org +* diff --git a/PRESUBMIT.cfg b/PRESUBMIT.cfg new file mode 100644 index 0000000..9f66545 --- /dev/null +++ b/PRESUBMIT.cfg @@ -0,0 +1,16 @@ +[Hook Overrides] +branch_check: true +cargo_clippy_check: true +checkpatch_check: true +long_line_check: false +signoff_check: true + +# We are using Linux style indentation with tabs +# The indentation is checked by checkpatch not the python script +tab_check: false + +[Hook Overrides Options] +cros_license_check: --exclude_regex=^\.checkpatch\.conf$ + +cargo_clippy_check: + --project=rust/vboot_reference-sys diff --git a/README b/README new file mode 100644 index 0000000..1787d4d --- /dev/null +++ b/README @@ -0,0 +1,177 @@ +This directory contains a reference implementation for Chrome OS +verified boot in firmware. + +---------- +Directory Structure +---------- + +The source is organized into distinct modules - + +firmware/ + + Contains ONLY the code required by the BIOS to validate the secure boot + components. There shouldn't be any code in here that signs or generates + images. BIOS should require ONLY this directory to implement secure boot. + Refer to firmware/README for futher details. + +cgpt/ + + Utility to read/write/modify GPT partitions. Similar to GNU parted or any + other GPT tool, but this has support for Chrome OS extensions. + +host/ + + Miscellaneous functions needed by userland utilities. + +futility/ + + The "firmware utility" tool, used to create, sign, and validate Chrome OS + images. + +utility/ + + Random other utilities, not necesssarily related to verified boot as such. + +tests/ + + User-land tests and benchmarks that test the reference implementation. + Please have a look at these if you'd like to understand how to use the + reference implementation. + +build/ + + The output directory where the generated files will be placed, and where + tests are run. + +scripts/ + + Tools and scripts used to generate and use new signing keypairs. These are + typically used only on a secure machine. + +rust/ + + Rust bindings for vboot_reference. See rust/README.md for more details. + +-------------------- +Building and testing +-------------------- + +The suite can be built on the host or in the chroot environment. + +Building on the host could fail if certain packages are not installed. If +there are host environment build problems due to missing .h files, try +researching what packages the files belong to and install the missing packages +before reporting a problem. + + +The commands are the more-or-less expected ones: + + make + make runtests + make install [ DESTDIR=/usr/local ] + + + +---------- +Some useful utilities: +---------- + +futility vbutil_key Convert a public key into .vbpubk format +futility vbutil_keyblock Wrap a public key inside a signature and checksum +futility vbutil_firmware Create a .vblock with signature info for a + firmware image +futility vbutil_kernel Pack a kernel image, bootloader, and config into + a signed binary + +dumpRSAPublicKey Dump RSA Public key (from a DER-encoded X509 + certificate) in a format suitable for use by + RSAVerify* functions in crypto/. + +verify_data.c Verify a given signature on a given file. + + + +---------- +Generating a signed firmware image: +---------- + +* Step 0: Build the tools, install them somewhere. + +* Step 1: Generate RSA root and signing keys. + + The root key is always 8192 bits. + + $ openssl genrsa -F4 -out root_key.pem 8192 + + The signing key can be between 1024-8192 bits. + + $ openssl genrsa -F4 -out signing_key.pem <1024|2048|4096|8192> + + Note: The -F4 option must be specified to generate RSA keys with a public + exponent of 65535. RSA keys with 3 as a public exponent (the default) + won't work. + +* Step 2: Generate pre-processed public versions of the above keys using + dumpRSAPublicKey. This utility expects an x509 certificate as + input, and emits an intermediate representation for further + processing. + + $ openssl req -batch -new -x509 -key root_key.pem -out root_key.crt + $ openssl req -batch -new -x509 -key signing_key.pem -out signing_key.crt + $ dumpRSAPublicKey root_key.crt > root_key.keyb + $ dumpRSAPublicKey signing_key.crt > signing_key.keyb + +************** TODO: STUFF PAST HERE IS OUT OF DATE *************** + +At this point we have all the requisite keys needed to generate a signed +firmware image. + +.pem RSA Public/Private Key Pair +.crt X509 Key Certificate +.keyb Pre-processed RSA Public Key + + +* Step 3: Use utility/firmware_utility to generate a signed firmare blob. + +$ utility/firmware_utility --generate \ + --root_key root_key.pem \ + --firmware_sign_key signing_key.pem \ + --firmware_sign_key_pub signing_key.keyb \ + --firmware_sign_algorithm \ + --firmware_key_version 1 \ + --firmware_version 1 \ + --in \ + --out + +Where is based on the signature algorithm to use for firmware +signining. The list of specifications can be output by running +'utility/firmware_utility' without any arguments. + +Note: --firmware_key_version and --firmware_version are part of a signed + image and are used to prevent rollbacks to older version. For testing, + they can just be set to valid values. + + +* Step 4: Verify that this image verifies. + +$ utility/firmware_utility --verify \ + --in + --root_key_pub root_key.keyb +Verification SUCCESS. + + +Note: The verification functions expects a pointer to the + pre-processed public root key as input. For testing purposes, + root_key.keyb can be stored in RW part of the firmware. For the + final firmware, this will be a fixed public key which cannot be + changed and must be stored in RO firmware. + +---------- +Generating a signed kernel image: +---------- + +The steps for generating a signed kernel image are similar to that of +a firmware image. Since verification is chained - RO firmware verifies +RW firmware which verifies the kernel, only the keys change. An additional +kernel signing key must be generated. The firmware signing generated above +is the root key equivalent for signed kernel images. diff --git a/cgpt/cgpt.c b/cgpt/cgpt.c new file mode 100644 index 0000000..d06874e --- /dev/null +++ b/cgpt/cgpt.c @@ -0,0 +1,98 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Utility for ChromeOS-specific GPT partitions, Please see corresponding .c + * files for more details. + */ + +#include +#include +#include +#include + +#include "cgpt.h" +#include "vboot_host.h" + +const char* progname; + +int GenerateGuid(Guid *newguid) +{ + /* From libuuid */ + uuid_generate(newguid->u.raw); + return CGPT_OK; +} + +struct { + const char *name; + int (*fp)(int argc, char *argv[]); + const char *comment; +} cmds[] = { + {"create", cmd_create, "Create or reset GPT headers and tables"}, + {"add", cmd_add, "Add, edit or remove a partition entry"}, + {"show", cmd_show, "Show partition table and entries"}, + {"repair", cmd_repair, "Repair damaged GPT headers and tables"}, + {"boot", cmd_boot, "Edit the PMBR sector for legacy BIOSes"}, + {"find", cmd_find, "Locate a partition by its GUID"}, + {"edit", cmd_edit, "Edit a drive entry"}, + {"prioritize", cmd_prioritize, + "Reorder the priority of all kernel partitions"}, + {"legacy", cmd_legacy, "Switch between GPT and Legacy GPT"}, +}; + +static void Usage(void) { + int i; + + printf("\nUsage: %s COMMAND [OPTIONS] DRIVE\n\n" + "Supported COMMANDs:\n\n", + progname); + + for (i = 0; i < sizeof(cmds)/sizeof(cmds[0]); ++i) { + printf(" %-15s %s\n", cmds[i].name, cmds[i].comment); + } + printf("\nFor more detailed usage, use %s COMMAND -h\n\n", progname); +} + +int main(int argc, char *argv[]) { + int i; + int match_count = 0; + int match_index = 0; + char* command; + + progname = strrchr(argv[0], '/'); + if (progname) + progname++; + else + progname = argv[0]; + + if (argc < 2) { + Usage(); + return CGPT_FAILED; + } + + // increment optind now, so that getopt skips argv[0] in command function + command = argv[optind++]; + + // Find the command to invoke. + for (i = 0; command && i < sizeof(cmds)/sizeof(cmds[0]); ++i) { + // exact match? + if (0 == strcmp(cmds[i].name, command)) { + match_index = i; + match_count = 1; + break; + } + // unique match? + else if (0 == strncmp(cmds[i].name, command, strlen(command))) { + match_index = i; + match_count++; + } + } + + if (match_count == 1) + return cmds[match_index].fp(argc, argv); + + // Couldn't find a single matching command. + Usage(); + + return CGPT_FAILED; +} diff --git a/cgpt/cgpt.h b/cgpt/cgpt.h new file mode 100644 index 0000000..89c357e --- /dev/null +++ b/cgpt/cgpt.h @@ -0,0 +1,209 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_CGPT_H_ +#define VBOOT_REFERENCE_CGPT_H_ + +#include +#if !defined(HAVE_MACOS) && !defined(__FreeBSD__) && !defined(__OpenBSD__) +#include +#endif +#include +#include +#include +#include "cgpt_endian.h" +#include "cgptlib.h" +#include "gpt.h" + +struct legacy_partition { + uint8_t status; + uint8_t f_head; + uint8_t f_sect; + uint8_t f_cyl; + uint8_t type; + uint8_t l_head; + uint8_t l_sect; + uint8_t l_cyl; + uint32_t f_lba; + uint32_t num_sect; +} __attribute__((packed)); + +// syslinux uses this format: +struct pmbr { + uint8_t bootcode[424]; + Guid boot_guid; + uint32_t disk_id; + uint8_t magic[2]; // 0x1d, 0x9a + struct legacy_partition part[4]; + uint8_t sig[2]; // 0x55, 0xaa +} __attribute__((packed)); + +void PMBRToStr(struct pmbr *pmbr, char *str, unsigned int buflen); + +// Handle to the drive storing the GPT. +struct drive { + uint64_t size; /* total size (in bytes) */ + GptData gpt; + struct pmbr pmbr; + int fd; /* file descriptor */ +}; + +// Opens a block device or file, loads raw GPT data from it. +// 'mode' should be O_RDONLY or O_RDWR. +// If 'drive_size' is 0, both the partitions and GPT structs reside on the same +// 'drive_path'. +// Otherwise, 'drive_size' is taken as the size of the device that all +// partitions will reside on, and 'drive_path' is where we store GPT structs. +// +// Returns CGPT_FAILED if any error happens. +// Returns CGPT_OK if success and information are stored in 'drive'. */ +int DriveOpen(const char *drive_path, struct drive *drive, int mode, + uint64_t drive_size); +int DriveClose(struct drive *drive, int update_as_needed); +int CheckValid(const struct drive *drive); + +/* Loads sectors from 'drive'. + * + * drive -- open drive. + * buf -- pointer to buffer of at least (sector_bytes * sector_count) size + * sector -- offset of starting sector (in sectors) + * sector_bytes -- bytes per sector + * sector_count -- number of sectors to load + * + * Returns CGPT_OK for successful. Aborts if any error occurs. + */ +int Load(struct drive *drive, uint8_t *buf, + const uint64_t sector, + const uint64_t sector_bytes, + const uint64_t sector_count); + +/* Saves sectors to 'drive'. + * + * drive -- open drive + * buf -- pointer to buffer + * sector -- starting sector offset + * sector_bytes -- bytes per sector + * sector_count -- number of sector to save + * + * Returns CGPT_OK for successful, CGPT_FAILED for failed. + */ +int Save(struct drive *drive, const uint8_t *buf, + const uint64_t sector, + const uint64_t sector_bytes, + const uint64_t sector_count); + + +/* Constant global type values to compare against */ +extern const Guid guid_chromeos_firmware; +extern const Guid guid_chromeos_kernel; +extern const Guid guid_chromeos_rootfs; +extern const Guid guid_linux_data; +extern const Guid guid_chromeos_reserved; +extern const Guid guid_efi; +extern const Guid guid_unused; + +int ReadPMBR(struct drive *drive); +int WritePMBR(struct drive *drive); + +/* Convert possibly unterminated UTF16 string to UTF8. + * Caller must prepare enough space for UTF8, which could be up to + * twice the byte length of UTF16 string plus the terminating '\0'. + * + * Return: CGPT_OK --- all character are converted successfully. + * CGPT_FAILED --- convert error, i.e. output buffer is too short. + */ +int UTF16ToUTF8(const uint16_t *utf16, unsigned int maxinput, + uint8_t *utf8, unsigned int maxoutput); + +/* Convert null-terminated UTF8 string to UTF16. + * Caller must prepare enough space for UTF16, which is the byte length of UTF8 + * plus the terminating 0x0000. + * + * Return: CGPT_OK --- all character are converted successfully. + * CGPT_FAILED --- convert error, i.e. output buffer is too short. + */ +int UTF8ToUTF16(const uint8_t *utf8, uint16_t *utf16, unsigned int maxoutput); + +/* Helper functions for supported GPT types. */ +int ResolveType(const Guid *type, char *buf); +int SupportedType(const char *name, Guid *type); +void PrintTypes(void); +void EntryDetails(GptEntry *entry, uint32_t index, int raw); + +uint32_t GetNumberOfEntries(const struct drive *drive); +GptEntry *GetEntry(GptData *gpt, int secondary, uint32_t entry_index); + +void SetRequired(struct drive *drive, int secondary, uint32_t entry_index, + int required); +int GetRequired(struct drive *drive, int secondary, uint32_t entry_index); +void SetLegacyBoot(struct drive *drive, int secondary, uint32_t entry_index, + int legacy_boot); +int GetLegacyBoot(struct drive *drive, int secondary, uint32_t entry_index); +void SetPriority(struct drive *drive, int secondary, uint32_t entry_index, + int priority); +int GetPriority(struct drive *drive, int secondary, uint32_t entry_index); +void SetTries(struct drive *drive, int secondary, uint32_t entry_index, + int tries); +int GetTries(struct drive *drive, int secondary, uint32_t entry_index); +void SetSuccessful(struct drive *drive, int secondary, uint32_t entry_index, + int success); +int GetSuccessful(struct drive *drive, int secondary, uint32_t entry_index); + +void SetRaw(struct drive *drive, int secondary, uint32_t entry_index, + uint32_t raw); + +void UpdateAllEntries(struct drive *drive); + +uint8_t RepairHeader(GptData *gpt, const uint32_t valid_headers); +uint8_t RepairEntries(GptData *gpt, const uint32_t valid_entries); +void UpdateCrc(GptData *gpt); +int IsSynonymous(const GptHeader* a, const GptHeader* b); + +int IsUnused(struct drive *drive, int secondary, uint32_t index); +int IsKernel(struct drive *drive, int secondary, uint32_t index); + +// Optional. Applications that need this must provide an implementation. +// +// Explanation: +// Some external utilities need to manipulate the GPT, but don't create new +// partitions from scratch. The cgpt executable uses libuuid to provide this +// functionality, but we don't want to have to build or install a separate +// instance of that library just for the 32-bit static post-install tool, +// which doesn't need this function. +int GenerateGuid(Guid *newguid); + +// For usage and error messages. +void Error(const char *format, ...); +void Warning(const char *format, ...); + +// Command functions. +int check_int_parse(char option, const char *buf); +int check_int_limit(char option, int val, int low, int high); +int cmd_show(int argc, char *argv[]); +int cmd_repair(int argc, char *argv[]); +int cmd_create(int argc, char *argv[]); +int cmd_add(int argc, char *argv[]); +int cmd_boot(int argc, char *argv[]); +int cmd_find(int argc, char *argv[]); +int cmd_edit(int argc, char *argv[]); +int cmd_prioritize(int argc, char *argv[]); +int cmd_legacy(int argc, char *argv[]); + +#define ARRAY_COUNT(array) (sizeof(array)/sizeof((array)[0])) +const char *GptError(int errnum); + +// Size in chars of the GPT Entry's PartitionName field +#define GPT_PARTNAME_LEN 72 + +/* The standard "assert" macro goes away when NDEBUG is defined. This doesn't. + */ +#define require(A) do { \ + if (!(A)) { \ + fprintf(stderr, "condition (%s) failed at %s:%d\n", \ + #A, __FILE__, __LINE__); \ + exit(1); } \ + } while (0) + +#endif /* VBOOT_REFERENCE_CGPT_H_ */ diff --git a/cgpt/cgpt_add.c b/cgpt/cgpt_add.c new file mode 100644 index 0000000..9267755 --- /dev/null +++ b/cgpt/cgpt_add.c @@ -0,0 +1,308 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include + +#include "cgpt.h" +#include "cgptlib_internal.h" +#include "cgpt_params.h" +#include "vboot_host.h" + +static void PrintCgptAddParams(const CgptAddParams *params) { + char tmp[64]; + + fprintf(stderr, "-i %d ", params->partition); + if (params->label) + fprintf(stderr, "-l %s ", params->label); + if (params->set_begin) + fprintf(stderr, "-b %llu ", (unsigned long long)params->begin); + if (params->set_size) + fprintf(stderr, "-s %llu ", (unsigned long long)params->size); + if (params->set_type) { + GuidToStr(¶ms->type_guid, tmp, sizeof(tmp)); + fprintf(stderr, "-t %s ", tmp); + } + if (params->set_unique) { + GuidToStr(¶ms->unique_guid, tmp, sizeof(tmp)); + fprintf(stderr, "-u %s ", tmp); + } + if (params->set_successful) + fprintf(stderr, "-S %d ", params->successful); + if (params->set_tries) + fprintf(stderr, "-T %d ", params->tries); + if (params->set_priority) + fprintf(stderr, "-P %d ", params->priority); + if (params->set_required) + fprintf(stderr, "-R %d ", params->required); + if (params->set_legacy_boot) + fprintf(stderr, "-B %d ", params->legacy_boot); + if (params->set_raw) + fprintf(stderr, "-A %#x ", params->raw_value); + + fprintf(stderr, "\n"); +} + +// This is the implementation-specific helper function. +static int GptSetEntryAttributes(struct drive *drive, + uint32_t index, + CgptAddParams *params) { + GptEntry *entry; + + entry = GetEntry(&drive->gpt, PRIMARY, index); + if (params->set_begin) + entry->starting_lba = params->begin; + if (params->set_size) + entry->ending_lba = entry->starting_lba + params->size - 1; + if (params->set_unique) { + memcpy(&entry->unique, ¶ms->unique_guid, sizeof(Guid)); + } else if (GuidIsZero(&entry->type)) { + if (CGPT_OK != GenerateGuid(&entry->unique)) { + Error("Unable to generate new GUID.\n"); + return -1; + } + } + if (params->set_type) + memcpy(&entry->type, ¶ms->type_guid, sizeof(Guid)); + if (params->label) { + if (CGPT_OK != UTF8ToUTF16((const uint8_t *)params->label, entry->name, + sizeof(entry->name) / sizeof(entry->name[0]))) { + Error("The label cannot be converted to UTF16.\n"); + return -1; + } + } + return 0; +} + +// This is an internal helper function which assumes no NULL args are passed. +// It sets the given attribute values for a single entry at the given index. +static int SetEntryAttributes(struct drive *drive, + uint32_t index, + CgptAddParams *params) { + if (params->set_raw) { + SetRaw(drive, PRIMARY, index, params->raw_value); + } else { + if (params->set_successful) + SetSuccessful(drive, PRIMARY, index, params->successful); + if (params->set_tries) + SetTries(drive, PRIMARY, index, params->tries); + if (params->set_priority) + SetPriority(drive, PRIMARY, index, params->priority); + if (params->set_legacy_boot) + SetLegacyBoot(drive, PRIMARY, index, params->legacy_boot); + if (params->set_required) + SetRequired(drive, PRIMARY, index, params->required); + } + + // New partitions must specify type, begin, and size. + if (IsUnused(drive, PRIMARY, index)) { + if (!params->set_begin || !params->set_size || !params->set_type) { + Error("-t, -b, and -s options are required for new partitions\n"); + return -1; + } + if (GuidIsZero(¶ms->type_guid)) { + Error("New partitions must have a type other than \"unused\"\n"); + return -1; + } + } + + return 0; +} + +static int CgptCheckAddValidity(struct drive *drive) { + int gpt_retval; + if (GPT_SUCCESS != (gpt_retval = GptValidityCheck(&drive->gpt))) { + Error("GptValidityCheck() returned %d: %s\n", + gpt_retval, GptError(gpt_retval)); + return -1; + } + + if (CGPT_OK != CheckValid(drive)) { + Error("please run 'cgpt repair' before adding anything.\n"); + return -1; + } + + return 0; +} + +static int CgptGetUnusedPartition(struct drive *drive, uint32_t *index, + CgptAddParams *params) { + uint32_t i; + uint32_t max_part = GetNumberOfEntries(drive); + if (params->partition) { + if (params->partition > max_part) { + Error("invalid partition number: %d\n", params->partition); + return -1; + } + *index = params->partition - 1; + return 0; + } else { + // Find next empty partition. + for (i = 0; i < max_part; i++) { + if (IsUnused(drive, PRIMARY, i)) { + params->partition = i + 1; + *index = i; + return 0; + } + } + Error("no unused partitions available\n"); + return -1; + } +} + +int CgptSetAttributes(CgptAddParams *params) { + struct drive drive; + + if (params == NULL) + return CGPT_FAILED; + + if (CGPT_OK != DriveOpen(params->drive_name, &drive, O_RDWR, + params->drive_size)) + return CGPT_FAILED; + + if (CgptCheckAddValidity(&drive)) { + goto bad; + } + + if (params->partition == 0 || + params->partition >= GetNumberOfEntries(&drive)) { + Error("invalid partition number: %d\n", params->partition); + goto bad; + } + + SetEntryAttributes(&drive, params->partition - 1, params); + + UpdateAllEntries(&drive); + + // Write it all out. + return DriveClose(&drive, 1); + +bad: + DriveClose(&drive, 0); + return CGPT_FAILED; +} + +// This method gets the partition details such as the attributes, the +// guids of the partitions, etc. Input is the partition number or the +// unique id of the partition. Output is populated in the respective +// fields of params. +int CgptGetPartitionDetails(CgptAddParams *params) { + struct drive drive; + int result = CGPT_FAILED; + int index; + + if (params == NULL) + return CGPT_FAILED; + + if (CGPT_OK != DriveOpen(params->drive_name, &drive, O_RDWR, + params->drive_size)) + return CGPT_FAILED; + + if (CgptCheckAddValidity(&drive)) { + goto bad; + } + + int max_part = GetNumberOfEntries(&drive); + if (params->partition > 0) { + if (params->partition >= max_part) { + Error("invalid partition number: %d\n", params->partition); + goto bad; + } + } else { + if (!params->set_unique) { + Error("either partition or unique_id must be specified\n"); + goto bad; + } + for (index = 0; index < max_part; index++) { + GptEntry *entry = GetEntry(&drive.gpt, PRIMARY, index); + if (GuidEqual(&entry->unique, ¶ms->unique_guid)) { + params->partition = index + 1; + break; + } + } + if (index >= max_part) { + Error("no partitions with the given unique id available\n"); + goto bad; + } + } + index = params->partition - 1; + + // GPT-specific code + GptEntry *entry = GetEntry(&drive.gpt, PRIMARY, index); + params->begin = entry->starting_lba; + params->size = entry->ending_lba - entry->starting_lba + 1; + memcpy(¶ms->type_guid, &entry->type, sizeof(Guid)); + memcpy(¶ms->unique_guid, &entry->unique, sizeof(Guid)); + params->raw_value = entry->attrs.fields.gpt_att; + + params->successful = GetSuccessful(&drive, PRIMARY, index); + params->tries = GetTries(&drive, PRIMARY, index); + params->priority = GetPriority(&drive, PRIMARY, index); + result = CGPT_OK; + +bad: + DriveClose(&drive, 0); + return result; +} + +static int GptAdd(struct drive *drive, CgptAddParams *params, uint32_t index) { + GptEntry *entry, backup; + int rv; + + entry = GetEntry(&drive->gpt, PRIMARY, index); + memcpy(&backup, entry, sizeof(backup)); + + if (SetEntryAttributes(drive, index, params) || + GptSetEntryAttributes(drive, index, params)) { + memcpy(entry, &backup, sizeof(*entry)); + return -1; + } + + UpdateAllEntries(drive); + + rv = CheckEntries((GptEntry*)drive->gpt.primary_entries, + (GptHeader*)drive->gpt.primary_header); + + if (0 != rv) { + // If the modified entry is illegal, recover it and return error. + memcpy(entry, &backup, sizeof(*entry)); + Error("%s\n", GptErrorText(rv)); + Error(""); + PrintCgptAddParams(params); + return -1; + } + + return 0; +} + +int CgptAdd(CgptAddParams *params) { + struct drive drive; + uint32_t index; + + if (params == NULL) + return CGPT_FAILED; + + if (CGPT_OK != DriveOpen(params->drive_name, &drive, O_RDWR, + params->drive_size)) + return CGPT_FAILED; + + if (CgptCheckAddValidity(&drive)) { + goto bad; + } + + if (CgptGetUnusedPartition(&drive, &index, params)) { + goto bad; + } + + if (GptAdd(&drive, params, index)) + goto bad; + + // Write it all out. + return DriveClose(&drive, 1); + +bad: + DriveClose(&drive, 0); + return CGPT_FAILED; +} diff --git a/cgpt/cgpt_boot.c b/cgpt/cgpt_boot.c new file mode 100644 index 0000000..d82720e --- /dev/null +++ b/cgpt/cgpt_boot.c @@ -0,0 +1,153 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include + +#include "cgpt.h" +#include "cgptlib_internal.h" +#include "cgpt_params.h" +#include "vboot_host.h" + +int CgptGetBootPartitionNumber(CgptBootParams *params) { + struct drive drive; + int gpt_retval= 0; + int retval; + + if (params == NULL) + return CGPT_FAILED; + + if (CGPT_OK != DriveOpen(params->drive_name, &drive, O_RDONLY, + params->drive_size)) + return CGPT_FAILED; + + if (GPT_SUCCESS != (gpt_retval = GptValidityCheck(&drive.gpt))) { + Error("GptValidityCheck() returned %d: %s\n", + gpt_retval, GptError(gpt_retval)); + retval = CGPT_FAILED; + goto done; + } + + if (CGPT_OK != ReadPMBR(&drive)) { + Error("Unable to read PMBR\n"); + retval = CGPT_FAILED; + goto done; + } + + char buf[GUID_STRLEN]; + GuidToStr(&drive.pmbr.boot_guid, buf, sizeof(buf)); + + int numEntries = GetNumberOfEntries(&drive); + int i; + for(i = 0; i < numEntries; i++) { + GptEntry *entry = GetEntry(&drive.gpt, ANY_VALID, i); + + if (GuidEqual(&entry->unique, &drive.pmbr.boot_guid)) { + params->partition = i + 1; + retval = CGPT_OK; + goto done; + } + } + + Error("Didn't find any boot partition\n"); + params->partition = 0; + retval = CGPT_FAILED; + +done: + (void) DriveClose(&drive, 1); + return retval; +} + + +int CgptBoot(CgptBootParams *params) { + struct drive drive; + int retval = 1; + int gpt_retval= 0; + int mode = O_RDONLY; + + if (params == NULL) + return CGPT_FAILED; + + if (params->create_pmbr || params->partition || params->bootfile) + mode = O_RDWR; + + if (CGPT_OK != DriveOpen(params->drive_name, &drive, mode, + params->drive_size)) { + return CGPT_FAILED; + } + + if (CGPT_OK != ReadPMBR(&drive)) { + Error("Unable to read PMBR\n"); + goto done; + } + + if (params->create_pmbr) { + drive.pmbr.magic[0] = 0x1d; + drive.pmbr.magic[1] = 0x9a; + drive.pmbr.sig[0] = 0x55; + drive.pmbr.sig[1] = 0xaa; + memset(&drive.pmbr.part, 0, sizeof(drive.pmbr.part)); + drive.pmbr.part[0].f_head = 0x00; + drive.pmbr.part[0].f_sect = 0x02; + drive.pmbr.part[0].f_cyl = 0x00; + drive.pmbr.part[0].type = 0xee; + drive.pmbr.part[0].l_head = 0xff; + drive.pmbr.part[0].l_sect = 0xff; + drive.pmbr.part[0].l_cyl = 0xff; + drive.pmbr.part[0].f_lba = htole32(1); + uint32_t max = 0xffffffff; + if (drive.gpt.streaming_drive_sectors < 0xffffffff) + max = drive.gpt.streaming_drive_sectors - 1; + drive.pmbr.part[0].num_sect = htole32(max); + } + + if (params->partition) { + if (GPT_SUCCESS != (gpt_retval = GptValidityCheck(&drive.gpt))) { + Error("GptValidityCheck() returned %d: %s\n", + gpt_retval, GptError(gpt_retval)); + goto done; + } + + if (params->partition > GetNumberOfEntries(&drive)) { + Error("invalid partition number: %d\n", params->partition); + goto done; + } + + uint32_t index = params->partition - 1; + GptEntry *entry = GetEntry(&drive.gpt, ANY_VALID, index); + memcpy(&drive.pmbr.boot_guid, &entry->unique, sizeof(Guid)); + } + + if (params->bootfile) { + int fd = open(params->bootfile, O_RDONLY); + if (fd < 0) { + Error("Can't read %s: %s\n", params->bootfile, strerror(errno)); + goto done; + } + + int n = read(fd, drive.pmbr.bootcode, sizeof(drive.pmbr.bootcode)); + if (n < 1) { + Error("problem reading %s: %s\n", params->bootfile, strerror(errno)); + close(fd); + goto done; + } + + close(fd); + } + + char buf[GUID_STRLEN]; + GuidToStr(&drive.pmbr.boot_guid, buf, sizeof(buf)); + printf("%s\n", buf); + + // Write it all out, if needed. + if (mode == O_RDONLY || CGPT_OK == WritePMBR(&drive)) + retval = 0; + +done: + (void) DriveClose(&drive, 1); + return retval; +} diff --git a/cgpt/cgpt_common.c b/cgpt/cgpt_common.c new file mode 100644 index 0000000..2f888fd --- /dev/null +++ b/cgpt/cgpt_common.c @@ -0,0 +1,1103 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Utility for ChromeOS-specific GPT partitions, Please see corresponding .c + * files for more details. + */ + +#include +#include +#include +#if !defined(HAVE_MACOS) && !defined(__FreeBSD__) && !defined(__OpenBSD__) +#include +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cgpt.h" +#include "cgptlib_internal.h" +#include "crc32.h" +#include "vboot_host.h" + +static const char kErrorTag[] = "ERROR"; +static const char kWarningTag[] = "WARNING"; + +static void LogToStderr(const char *tag, const char *format, va_list ap) { + fprintf(stderr, "%s: ", tag); + vfprintf(stderr, format, ap); +} + +void Error(const char *format, ...) { + va_list ap; + va_start(ap, format); + LogToStderr(kErrorTag, format, ap); + va_end(ap); +} + +void Warning(const char *format, ...) { + va_list ap; + va_start(ap, format); + LogToStderr(kWarningTag, format, ap); + va_end(ap); +} + +int check_int_parse(char option, const char *buf) { + if (!*optarg || (buf && *buf)) { + Error("invalid argument to -%c: \"%s\"\n", option, optarg); + return 1; + } + return 0; +} + +int check_int_limit(char option, int val, int low, int high) { + if (val < low || val > high) { + Error("value for -%c must be between %d and %d", option, low, high); + return 1; + } + return 0; +} + +int CheckValid(const struct drive *drive) { + if ((drive->gpt.valid_headers != MASK_BOTH) || + (drive->gpt.valid_entries != MASK_BOTH)) { + Warning("One of the GPT headers/entries is invalid\n\n"); + return CGPT_FAILED; + } + return CGPT_OK; +} + +int Load(struct drive *drive, uint8_t *buf, + const uint64_t sector, + const uint64_t sector_bytes, + const uint64_t sector_count) { + int count; /* byte count to read */ + int nread; + + require(buf); + if (!sector_count || !sector_bytes) { + Error("%s() failed at line %d: sector_count=%" PRIu64 ", sector_bytes=%" PRIu64 "\n", + __FUNCTION__, __LINE__, sector_count, sector_bytes); + return CGPT_FAILED; + } + /* Make sure that sector_bytes * sector_count doesn't roll over. */ + if (sector_bytes > (UINT64_MAX / sector_count)) { + Error("%s() failed at line %d: sector_count=%" PRIu64 ", sector_bytes=%" PRIu64 "\n", + __FUNCTION__, __LINE__, sector_count, sector_bytes); + return CGPT_FAILED; + } + count = sector_bytes * sector_count; + + if (-1 == lseek(drive->fd, sector * sector_bytes, SEEK_SET)) { + Error("Can't seek: %s\n", strerror(errno)); + return CGPT_FAILED; + } + + nread = read(drive->fd, buf, count); + if (nread < count) { + Error("Can't read enough: %d, not %d\n", nread, count); + return CGPT_FAILED; + } + + return CGPT_OK; +} + + +int ReadPMBR(struct drive *drive) { + if (-1 == lseek(drive->fd, 0, SEEK_SET)) + return CGPT_FAILED; + + int nread = read(drive->fd, &drive->pmbr, sizeof(struct pmbr)); + if (nread != sizeof(struct pmbr)) + return CGPT_FAILED; + + return CGPT_OK; +} + +int WritePMBR(struct drive *drive) { + if (-1 == lseek(drive->fd, 0, SEEK_SET)) + return CGPT_FAILED; + + int nwrote = write(drive->fd, &drive->pmbr, sizeof(struct pmbr)); + if (nwrote != sizeof(struct pmbr)) + return CGPT_FAILED; + + return CGPT_OK; +} + +int Save(struct drive *drive, const uint8_t *buf, + const uint64_t sector, + const uint64_t sector_bytes, + const uint64_t sector_count) { + int count; /* byte count to write */ + int nwrote; + + require(buf); + count = sector_bytes * sector_count; + + if (-1 == lseek(drive->fd, sector * sector_bytes, SEEK_SET)) + return CGPT_FAILED; + + nwrote = write(drive->fd, buf, count); + if (nwrote < count) + return CGPT_FAILED; + + return CGPT_OK; +} + +static int GptLoad(struct drive *drive, uint32_t sector_bytes) { + drive->gpt.sector_bytes = sector_bytes; + if (drive->size % drive->gpt.sector_bytes) { + Error("Media size (%llu) is not a multiple of sector size(%d)\n", + (long long unsigned int)drive->size, drive->gpt.sector_bytes); + return -1; + } + drive->gpt.streaming_drive_sectors = drive->size / drive->gpt.sector_bytes; + + drive->gpt.primary_header = malloc(drive->gpt.sector_bytes); + drive->gpt.secondary_header = malloc(drive->gpt.sector_bytes); + drive->gpt.primary_entries = malloc(GPT_ENTRIES_ALLOC_SIZE); + drive->gpt.secondary_entries = malloc(GPT_ENTRIES_ALLOC_SIZE); + if (!drive->gpt.primary_header || !drive->gpt.secondary_header || + !drive->gpt.primary_entries || !drive->gpt.secondary_entries) + return -1; + + /* TODO(namnguyen): Remove this and totally trust gpt_drive_sectors. */ + if (!(drive->gpt.flags & GPT_FLAG_EXTERNAL)) { + drive->gpt.gpt_drive_sectors = drive->gpt.streaming_drive_sectors; + } /* Else, we trust gpt.gpt_drive_sectors. */ + + // Read the data. + if (CGPT_OK != Load(drive, drive->gpt.primary_header, + GPT_PMBR_SECTORS, + drive->gpt.sector_bytes, GPT_HEADER_SECTORS)) { + Error("Cannot read primary GPT header\n"); + return -1; + } + if (CGPT_OK != Load(drive, drive->gpt.secondary_header, + drive->gpt.gpt_drive_sectors - GPT_PMBR_SECTORS, + drive->gpt.sector_bytes, GPT_HEADER_SECTORS)) { + Error("Cannot read secondary GPT header\n"); + return -1; + } + GptHeader* primary_header = (GptHeader*)drive->gpt.primary_header; + if (CheckHeader(primary_header, 0, drive->gpt.streaming_drive_sectors, + drive->gpt.gpt_drive_sectors, + drive->gpt.flags, + drive->gpt.sector_bytes) == 0) { + if (CGPT_OK != Load(drive, drive->gpt.primary_entries, + primary_header->entries_lba, + drive->gpt.sector_bytes, + CalculateEntriesSectors(primary_header, + drive->gpt.sector_bytes))) { + Error("Cannot read primary partition entry array\n"); + return -1; + } + } else { + Warning("Primary GPT header is %s\n", + memcmp(primary_header->signature, GPT_HEADER_SIGNATURE_IGNORED, + GPT_HEADER_SIGNATURE_SIZE) ? "invalid" : "being ignored"); + } + GptHeader* secondary_header = (GptHeader*)drive->gpt.secondary_header; + if (CheckHeader(secondary_header, 1, drive->gpt.streaming_drive_sectors, + drive->gpt.gpt_drive_sectors, + drive->gpt.flags, + drive->gpt.sector_bytes) == 0) { + if (CGPT_OK != Load(drive, drive->gpt.secondary_entries, + secondary_header->entries_lba, + drive->gpt.sector_bytes, + CalculateEntriesSectors(secondary_header, + drive->gpt.sector_bytes))) { + Error("Cannot read secondary partition entry array\n"); + return -1; + } + } else { + Warning("Secondary GPT header is %s\n", + memcmp(primary_header->signature, GPT_HEADER_SIGNATURE_IGNORED, + GPT_HEADER_SIGNATURE_SIZE) ? "invalid" : "being ignored"); + } + return 0; +} + +static int GptSave(struct drive *drive) { + int errors = 0; + + if (!(drive->gpt.ignored & MASK_PRIMARY)) { + if (drive->gpt.modified & GPT_MODIFIED_HEADER1) { + if (CGPT_OK != Save(drive, drive->gpt.primary_header, + GPT_PMBR_SECTORS, + drive->gpt.sector_bytes, GPT_HEADER_SECTORS)) { + errors++; + Error("Cannot write primary header: %s\n", strerror(errno)); + } + } + GptHeader* primary_header = (GptHeader*)drive->gpt.primary_header; + if (drive->gpt.modified & GPT_MODIFIED_ENTRIES1) { + if (CGPT_OK != Save(drive, drive->gpt.primary_entries, + primary_header->entries_lba, + drive->gpt.sector_bytes, + CalculateEntriesSectors(primary_header, + drive->gpt.sector_bytes))) { + errors++; + Error("Cannot write primary entries: %s\n", strerror(errno)); + } + } + + // Sync primary GPT before touching secondary so one is always valid. + if (drive->gpt.modified & (GPT_MODIFIED_HEADER1 | GPT_MODIFIED_ENTRIES1)) + if (fsync(drive->fd) < 0 && errno == EIO) { + errors++; + Error("I/O error when trying to write primary GPT\n"); + } + } + + // Only start writing secondary GPT if primary was written correctly. + if (!errors && !(drive->gpt.ignored & MASK_SECONDARY)) { + if (drive->gpt.modified & GPT_MODIFIED_HEADER2) { + if(CGPT_OK != Save(drive, drive->gpt.secondary_header, + drive->gpt.gpt_drive_sectors - GPT_PMBR_SECTORS, + drive->gpt.sector_bytes, GPT_HEADER_SECTORS)) { + errors++; + Error("Cannot write secondary header: %s\n", strerror(errno)); + } + } + GptHeader* secondary_header = (GptHeader*)drive->gpt.secondary_header; + if (drive->gpt.modified & GPT_MODIFIED_ENTRIES2) { + if (CGPT_OK != Save(drive, drive->gpt.secondary_entries, + secondary_header->entries_lba, + drive->gpt.sector_bytes, + CalculateEntriesSectors(secondary_header, + drive->gpt.sector_bytes))) { + errors++; + Error("Cannot write secondary entries: %s\n", strerror(errno)); + } + } + } + + return errors ? -1 : 0; +} + +/* + * Query drive size and bytes per sector. Return zero on success. On error, + * -1 is returned and errno is set appropriately. + */ +static int ObtainDriveSize(int fd, uint64_t* size, uint32_t* sector_bytes) { + struct stat stat; + if (fstat(fd, &stat) == -1) { + return -1; + } +#if !defined(HAVE_MACOS) && !defined(__FreeBSD__) && !defined(__OpenBSD__) + if ((stat.st_mode & S_IFMT) != S_IFREG) { + if (ioctl(fd, BLKGETSIZE64, size) < 0) { + return -1; + } + if (ioctl(fd, BLKSSZGET, sector_bytes) < 0) { + return -1; + } + } else { + *sector_bytes = 512; /* bytes */ + *size = stat.st_size; + } +#else + *sector_bytes = 512; /* bytes */ + *size = stat.st_size; +#endif + return 0; +} + +int DriveOpen(const char *drive_path, struct drive *drive, int mode, + uint64_t drive_size) { + uint32_t sector_bytes; + + require(drive_path); + require(drive); + + // Clear struct for proper error handling. + memset(drive, 0, sizeof(struct drive)); + + drive->fd = open(drive_path, mode | +#if !defined(HAVE_MACOS) && !defined(__FreeBSD__) && !defined(__OpenBSD__) + O_LARGEFILE | +#endif + O_NOFOLLOW); + if (drive->fd == -1) { + Error("Can't open %s: %s\n", drive_path, strerror(errno)); + return CGPT_FAILED; + } + + uint64_t gpt_drive_size; + if (ObtainDriveSize(drive->fd, &gpt_drive_size, §or_bytes) != 0) { + Error("Can't get drive size and bytes per sector for %s: %s\n", + drive_path, strerror(errno)); + goto error_close; + } + + drive->gpt.gpt_drive_sectors = gpt_drive_size / sector_bytes; + if (drive_size == 0) { + drive->size = gpt_drive_size; + drive->gpt.flags = 0; + } else { + drive->size = drive_size; + drive->gpt.flags = GPT_FLAG_EXTERNAL; + } + + + if (GptLoad(drive, sector_bytes)) { + goto error_close; + } + + // We just load the data. Caller must validate it. + return CGPT_OK; + +error_close: + (void) DriveClose(drive, 0); + return CGPT_FAILED; +} + + +int DriveClose(struct drive *drive, int update_as_needed) { + int errors = 0; + + if (update_as_needed) { + if (GptSave(drive)) { + errors++; + } + } + + free(drive->gpt.primary_header); + drive->gpt.primary_header = NULL; + free(drive->gpt.primary_entries); + drive->gpt.primary_entries = NULL; + free(drive->gpt.secondary_header); + drive->gpt.secondary_header = NULL; + free(drive->gpt.secondary_entries); + drive->gpt.secondary_entries = NULL; + + // Sync early! Only sync file descriptor here, and leave the whole system sync + // outside cgpt because whole system sync would trigger tons of disk accesses + // and timeout tests. + fsync(drive->fd); + + close(drive->fd); + + return errors ? CGPT_FAILED : CGPT_OK; +} + + +/* GUID conversion functions. Accepted format: + * + * "C12A7328-F81F-11D2-BA4B-00A0C93EC93B" + * + * Returns CGPT_OK if parsing is successful; otherwise CGPT_FAILED. + */ +int StrToGuid(const char *str, Guid *guid) { + uint32_t time_low; + uint16_t time_mid; + uint16_t time_high_and_version; + unsigned int chunk[11]; + + if (11 != sscanf(str, "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", + chunk+0, + chunk+1, + chunk+2, + chunk+3, + chunk+4, + chunk+5, + chunk+6, + chunk+7, + chunk+8, + chunk+9, + chunk+10)) { + printf("FAILED\n"); + return CGPT_FAILED; + } + + time_low = chunk[0] & 0xffffffff; + time_mid = chunk[1] & 0xffff; + time_high_and_version = chunk[2] & 0xffff; + + guid->u.Uuid.time_low = htole32(time_low); + guid->u.Uuid.time_mid = htole16(time_mid); + guid->u.Uuid.time_high_and_version = htole16(time_high_and_version); + + guid->u.Uuid.clock_seq_high_and_reserved = chunk[3] & 0xff; + guid->u.Uuid.clock_seq_low = chunk[4] & 0xff; + guid->u.Uuid.node[0] = chunk[5] & 0xff; + guid->u.Uuid.node[1] = chunk[6] & 0xff; + guid->u.Uuid.node[2] = chunk[7] & 0xff; + guid->u.Uuid.node[3] = chunk[8] & 0xff; + guid->u.Uuid.node[4] = chunk[9] & 0xff; + guid->u.Uuid.node[5] = chunk[10] & 0xff; + + return CGPT_OK; +} +void GuidToStr(const Guid *guid, char *str, unsigned int buflen) { + require(buflen >= GUID_STRLEN); + require(snprintf(str, buflen, + "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", + le32toh(guid->u.Uuid.time_low), + le16toh(guid->u.Uuid.time_mid), + le16toh(guid->u.Uuid.time_high_and_version), + guid->u.Uuid.clock_seq_high_and_reserved, + guid->u.Uuid.clock_seq_low, + guid->u.Uuid.node[0], guid->u.Uuid.node[1], + guid->u.Uuid.node[2], guid->u.Uuid.node[3], + guid->u.Uuid.node[4], guid->u.Uuid.node[5]) == GUID_STRLEN-1); +} + +/* Convert possibly unterminated UTF16 string to UTF8. + * Caller must prepare enough space for UTF8, which could be up to + * twice the byte length of UTF16 string plus the terminating '\0'. + * See the following table for encoding lengths. + * + * Code point UTF16 UTF8 + * 0x0000-0x007F 2 bytes 1 byte + * 0x0080-0x07FF 2 bytes 2 bytes + * 0x0800-0xFFFF 2 bytes 3 bytes + * 0x10000-0x10FFFF 4 bytes 4 bytes + * + * This function uses a simple state meachine to convert UTF-16 char(s) to + * a code point. Once a code point is parsed out, the state machine throws + * out sequencial UTF-8 chars in one time. + * + * Return: CGPT_OK --- all character are converted successfully. + * CGPT_FAILED --- convert error, i.e. output buffer is too short. + */ +int UTF16ToUTF8(const uint16_t *utf16, unsigned int maxinput, + uint8_t *utf8, unsigned int maxoutput) +{ + size_t s16idx, s8idx; + uint32_t code_point = 0; + int code_point_ready = 1; // code point is ready to output. + int retval = CGPT_OK; + + if (!utf16 || !maxinput || !utf8 || !maxoutput) + return CGPT_FAILED; + + maxoutput--; /* plan for termination now */ + + for (s16idx = s8idx = 0; + s16idx < maxinput && utf16[s16idx] && maxoutput; + s16idx++) { + uint16_t codeunit = le16toh(utf16[s16idx]); + + if (code_point_ready) { + if (codeunit >= 0xD800 && codeunit <= 0xDBFF) { + /* high surrogate, need the low surrogate. */ + code_point_ready = 0; + code_point = (codeunit & 0x03FF) + 0x0040; + } else { + /* BMP char, output it. */ + code_point = codeunit; + } + } else { + /* expect the low surrogate */ + if (codeunit >= 0xDC00 && codeunit <= 0xDFFF) { + code_point = (code_point << 10) | (codeunit & 0x03FF); + code_point_ready = 1; + } else { + /* the second code unit is NOT the low surrogate. Unexpected. */ + code_point_ready = 0; + retval = CGPT_FAILED; + break; + } + } + + /* If UTF code point is ready, output it. */ + if (code_point_ready) { + require(code_point <= 0x10FFFF); + if (code_point <= 0x7F && maxoutput >= 1) { + maxoutput -= 1; + utf8[s8idx++] = code_point & 0x7F; + } else if (code_point <= 0x7FF && maxoutput >= 2) { + maxoutput -= 2; + utf8[s8idx++] = 0xC0 | (code_point >> 6); + utf8[s8idx++] = 0x80 | (code_point & 0x3F); + } else if (code_point <= 0xFFFF && maxoutput >= 3) { + maxoutput -= 3; + utf8[s8idx++] = 0xE0 | (code_point >> 12); + utf8[s8idx++] = 0x80 | ((code_point >> 6) & 0x3F); + utf8[s8idx++] = 0x80 | (code_point & 0x3F); + } else if (code_point <= 0x10FFFF && maxoutput >= 4) { + maxoutput -= 4; + utf8[s8idx++] = 0xF0 | (code_point >> 18); + utf8[s8idx++] = 0x80 | ((code_point >> 12) & 0x3F); + utf8[s8idx++] = 0x80 | ((code_point >> 6) & 0x3F); + utf8[s8idx++] = 0x80 | (code_point & 0x3F); + } else { + /* buffer underrun */ + retval = CGPT_FAILED; + break; + } + } + } + utf8[s8idx++] = 0; + return retval; +} + +/* Convert UTF8 string to UTF16. The UTF8 string must be null-terminated. + * Caller must prepare enough space for UTF16, including a terminating 0x0000. + * See the following table for encoding lengths. In any case, the caller + * just needs to prepare the byte length of UTF8 plus the terminating 0x0000. + * + * Code point UTF16 UTF8 + * 0x0000-0x007F 2 bytes 1 byte + * 0x0080-0x07FF 2 bytes 2 bytes + * 0x0800-0xFFFF 2 bytes 3 bytes + * 0x10000-0x10FFFF 4 bytes 4 bytes + * + * This function converts UTF8 chars to a code point first. Then, convrts it + * to UTF16 code unit(s). + * + * Return: CGPT_OK --- all character are converted successfully. + * CGPT_FAILED --- convert error, i.e. output buffer is too short. + */ +int UTF8ToUTF16(const uint8_t *utf8, uint16_t *utf16, unsigned int maxoutput) +{ + size_t s16idx, s8idx; + uint32_t code_point = 0; + unsigned int expected_units = 1; + unsigned int decoded_units = 1; + int retval = CGPT_OK; + + if (!utf8 || !utf16 || !maxoutput) + return CGPT_FAILED; + + maxoutput--; /* plan for termination */ + + for (s8idx = s16idx = 0; + utf8[s8idx] && maxoutput; + s8idx++) { + uint8_t code_unit; + code_unit = utf8[s8idx]; + + if (expected_units != decoded_units) { + /* Trailing bytes of multi-byte character */ + if ((code_unit & 0xC0) == 0x80) { + code_point = (code_point << 6) | (code_unit & 0x3F); + ++decoded_units; + } else { + /* Unexpected code unit. */ + retval = CGPT_FAILED; + break; + } + } else { + /* parsing a new code point. */ + decoded_units = 1; + if (code_unit <= 0x7F) { + code_point = code_unit; + expected_units = 1; + } else if (code_unit <= 0xBF) { + /* 0x80-0xBF must NOT be the heading byte unit of a new code point. */ + retval = CGPT_FAILED; + break; + } else if (code_unit >= 0xC2 && code_unit <= 0xDF) { + code_point = code_unit & 0x1F; + expected_units = 2; + } else if (code_unit >= 0xE0 && code_unit <= 0xEF) { + code_point = code_unit & 0x0F; + expected_units = 3; + } else if (code_unit >= 0xF0 && code_unit <= 0xF4) { + code_point = code_unit & 0x07; + expected_units = 4; + } else { + /* illegal code unit: 0xC0-0xC1, 0xF5-0xFF */ + retval = CGPT_FAILED; + break; + } + } + + /* If no more unit is needed, output the UTF16 unit(s). */ + if ((retval == CGPT_OK) && + (expected_units == decoded_units)) { + /* Check if the encoding is the shortest possible UTF-8 sequence. */ + switch (expected_units) { + case 2: + if (code_point <= 0x7F) retval = CGPT_FAILED; + break; + case 3: + if (code_point <= 0x7FF) retval = CGPT_FAILED; + break; + case 4: + if (code_point <= 0xFFFF) retval = CGPT_FAILED; + break; + } + if (retval == CGPT_FAILED) break; /* leave immediately */ + + if ((code_point <= 0xD7FF) || + (code_point >= 0xE000 && code_point <= 0xFFFF)) { + utf16[s16idx++] = code_point; + maxoutput -= 1; + } else if (code_point >= 0x10000 && code_point <= 0x10FFFF && + maxoutput >= 2) { + utf16[s16idx++] = 0xD800 | ((code_point >> 10) - 0x0040); + utf16[s16idx++] = 0xDC00 | (code_point & 0x03FF); + maxoutput -= 2; + } else { + /* Three possibilities fall into here. Both are failure cases. + * a. surrogate pair (non-BMP characters; 0xD800~0xDFFF) + * b. invalid code point > 0x10FFFF + * c. buffer underrun + */ + retval = CGPT_FAILED; + break; + } + } + } + + /* A null-terminator shows up before the UTF8 sequence ends. */ + if (expected_units != decoded_units) { + retval = CGPT_FAILED; + } + + utf16[s16idx++] = 0; + return retval; +} + +/* global types to compare against */ +const Guid guid_chromeos_firmware = GPT_ENT_TYPE_CHROMEOS_FIRMWARE; +const Guid guid_chromeos_kernel = GPT_ENT_TYPE_CHROMEOS_KERNEL; +const Guid guid_chromeos_rootfs = GPT_ENT_TYPE_CHROMEOS_ROOTFS; +const Guid guid_basic_data = GPT_ENT_TYPE_BASIC_DATA; +const Guid guid_linux_data = GPT_ENT_TYPE_LINUX_FS; +const Guid guid_chromeos_reserved = GPT_ENT_TYPE_CHROMEOS_RESERVED; +const Guid guid_efi = GPT_ENT_TYPE_EFI; +const Guid guid_unused = GPT_ENT_TYPE_UNUSED; +const Guid guid_chromeos_minios = GPT_ENT_TYPE_CHROMEOS_MINIOS; +const Guid guid_chromeos_hibernate = GPT_ENT_TYPE_CHROMEOS_HIBERNATE; + +const static struct { + const Guid *type; + const char *name; + const char *description; +} supported_types[] = { + {&guid_chromeos_firmware, "firmware", "ChromeOS firmware"}, + {&guid_chromeos_kernel, "kernel", "ChromeOS kernel"}, + {&guid_chromeos_rootfs, "rootfs", "ChromeOS rootfs"}, + {&guid_linux_data, "data", "Linux data"}, + {&guid_basic_data, "basicdata", "Basic data"}, + {&guid_chromeos_reserved, "reserved", "ChromeOS reserved"}, + {&guid_efi, "efi", "EFI System Partition"}, + {&guid_unused, "unused", "Unused (nonexistent) partition"}, + {&guid_chromeos_minios, "minios", "ChromeOS miniOS"}, + {&guid_chromeos_hibernate, "hibernate", "ChromeOS hibernate"}, +}; + +/* Resolves human-readable GPT type. + * Returns CGPT_OK if found. + * Returns CGPT_FAILED if no known type found. */ +int ResolveType(const Guid *type, char *buf) { + int i; + for (i = 0; i < ARRAY_COUNT(supported_types); ++i) { + if (!memcmp(type, supported_types[i].type, sizeof(Guid))) { + strcpy(buf, supported_types[i].description); + return CGPT_OK; + } + } + return CGPT_FAILED; +} + +int SupportedType(const char *name, Guid *type) { + int i; + for (i = 0; i < ARRAY_COUNT(supported_types); ++i) { + if (!strcmp(name, supported_types[i].name)) { + memcpy(type, supported_types[i].type, sizeof(Guid)); + return CGPT_OK; + } + } + return CGPT_FAILED; +} + +void PrintTypes(void) { + int i; + printf("The partition type may also be given as one of these aliases:\n\n"); + for (i = 0; i < ARRAY_COUNT(supported_types); ++i) { + printf(" %-10s %s\n", supported_types[i].name, + supported_types[i].description); + } + printf("\n"); +} + +static GptHeader* GetGptHeader(const GptData *gpt) { + if (gpt->valid_headers & MASK_PRIMARY) + return (GptHeader*)gpt->primary_header; + else if (gpt->valid_headers & MASK_SECONDARY) + return (GptHeader*)gpt->secondary_header; + else + return 0; +} + +uint32_t GetNumberOfEntries(const struct drive *drive) { + GptHeader *header = GetGptHeader(&drive->gpt); + if (!header) + return 0; + return header->number_of_entries; +} + + +GptEntry *GetEntry(GptData *gpt, int secondary, uint32_t entry_index) { + GptHeader *header = GetGptHeader(gpt); + uint8_t *entries; + uint32_t stride = header->size_of_entry; + require(stride); + require(entry_index < header->number_of_entries); + + if (secondary == PRIMARY) { + entries = gpt->primary_entries; + } else if (secondary == SECONDARY) { + entries = gpt->secondary_entries; + } else { /* ANY_VALID */ + require(secondary == ANY_VALID); + if (gpt->valid_entries & MASK_PRIMARY) { + entries = gpt->primary_entries; + } else { + require(gpt->valid_entries & MASK_SECONDARY); + entries = gpt->secondary_entries; + } + } + + return (GptEntry*)(&entries[stride * entry_index]); +} + +void SetRequired(struct drive *drive, int secondary, uint32_t entry_index, + int required) { + require(required >= 0 && required <= CGPT_ATTRIBUTE_MAX_REQUIRED); + GptEntry *entry; + entry = GetEntry(&drive->gpt, secondary, entry_index); + SetEntryRequired(entry, required); +} + +int GetRequired(struct drive *drive, int secondary, uint32_t entry_index) { + GptEntry *entry; + entry = GetEntry(&drive->gpt, secondary, entry_index); + return GetEntryRequired(entry); +} + +void SetLegacyBoot(struct drive *drive, int secondary, uint32_t entry_index, + int legacy_boot) { + require(legacy_boot >= 0 && legacy_boot <= CGPT_ATTRIBUTE_MAX_LEGACY_BOOT); + GptEntry *entry; + entry = GetEntry(&drive->gpt, secondary, entry_index); + SetEntryLegacyBoot(entry, legacy_boot); +} + +int GetLegacyBoot(struct drive *drive, int secondary, uint32_t entry_index) { + GptEntry *entry; + entry = GetEntry(&drive->gpt, secondary, entry_index); + return GetEntryLegacyBoot(entry); +} + +void SetPriority(struct drive *drive, int secondary, uint32_t entry_index, + int priority) { + require(priority >= 0 && priority <= CGPT_ATTRIBUTE_MAX_PRIORITY); + GptEntry *entry; + entry = GetEntry(&drive->gpt, secondary, entry_index); + SetEntryPriority(entry, priority); +} + +int GetPriority(struct drive *drive, int secondary, uint32_t entry_index) { + GptEntry *entry; + entry = GetEntry(&drive->gpt, secondary, entry_index); + return GetEntryPriority(entry); +} + +void SetTries(struct drive *drive, int secondary, uint32_t entry_index, + int tries) { + require(tries >= 0 && tries <= CGPT_ATTRIBUTE_MAX_TRIES); + GptEntry *entry; + entry = GetEntry(&drive->gpt, secondary, entry_index); + SetEntryTries(entry, tries); +} + +int GetTries(struct drive *drive, int secondary, uint32_t entry_index) { + GptEntry *entry; + entry = GetEntry(&drive->gpt, secondary, entry_index); + return GetEntryTries(entry); +} + +void SetSuccessful(struct drive *drive, int secondary, uint32_t entry_index, + int success) { + require(success >= 0 && success <= CGPT_ATTRIBUTE_MAX_SUCCESSFUL); + GptEntry *entry; + entry = GetEntry(&drive->gpt, secondary, entry_index); + SetEntrySuccessful(entry, success); +} + +int GetSuccessful(struct drive *drive, int secondary, uint32_t entry_index) { + GptEntry *entry; + entry = GetEntry(&drive->gpt, secondary, entry_index); + return GetEntrySuccessful(entry); +} + +void SetRaw(struct drive *drive, int secondary, uint32_t entry_index, + uint32_t raw) { + GptEntry *entry; + entry = GetEntry(&drive->gpt, secondary, entry_index); + entry->attrs.fields.gpt_att = (uint16_t)raw; +} + +void UpdateAllEntries(struct drive *drive) { + RepairEntries(&drive->gpt, MASK_PRIMARY); + RepairHeader(&drive->gpt, MASK_PRIMARY); + + drive->gpt.modified |= (GPT_MODIFIED_HEADER1 | GPT_MODIFIED_ENTRIES1 | + GPT_MODIFIED_HEADER2 | GPT_MODIFIED_ENTRIES2); + UpdateCrc(&drive->gpt); +} + +int IsUnused(struct drive *drive, int secondary, uint32_t index) { + GptEntry *entry; + entry = GetEntry(&drive->gpt, secondary, index); + return GuidIsZero(&entry->type); +} + +int IsKernel(struct drive *drive, int secondary, uint32_t index) { + GptEntry *entry; + entry = GetEntry(&drive->gpt, secondary, index); + return GuidEqual(&entry->type, &guid_chromeos_kernel); +} + + +#define TOSTRING(A) #A +const char *GptError(int errnum) { + const char *error_string[] = { + TOSTRING(GPT_SUCCESS), + TOSTRING(GPT_ERROR_NO_VALID_KERNEL), + TOSTRING(GPT_ERROR_INVALID_HEADERS), + TOSTRING(GPT_ERROR_INVALID_ENTRIES), + TOSTRING(GPT_ERROR_INVALID_SECTOR_SIZE), + TOSTRING(GPT_ERROR_INVALID_SECTOR_NUMBER), + TOSTRING(GPT_ERROR_INVALID_UPDATE_TYPE) + }; + if (errnum < 0 || errnum >= ARRAY_COUNT(error_string)) + return ""; + return error_string[errnum]; +} + +/* Update CRC value if necessary. */ +void UpdateCrc(GptData *gpt) { + GptHeader *primary_header, *secondary_header; + + primary_header = (GptHeader*)gpt->primary_header; + secondary_header = (GptHeader*)gpt->secondary_header; + + if (gpt->modified & GPT_MODIFIED_ENTRIES1 && + memcmp(primary_header, GPT_HEADER_SIGNATURE2, + GPT_HEADER_SIGNATURE_SIZE)) { + size_t entries_size = primary_header->size_of_entry * + primary_header->number_of_entries; + primary_header->entries_crc32 = + Crc32(gpt->primary_entries, entries_size); + } + if (gpt->modified & GPT_MODIFIED_ENTRIES2) { + size_t entries_size = secondary_header->size_of_entry * + secondary_header->number_of_entries; + secondary_header->entries_crc32 = + Crc32(gpt->secondary_entries, entries_size); + } + if (gpt->modified & GPT_MODIFIED_HEADER1) { + primary_header->header_crc32 = 0; + primary_header->header_crc32 = Crc32( + (const uint8_t *)primary_header, sizeof(GptHeader)); + } + if (gpt->modified & GPT_MODIFIED_HEADER2) { + secondary_header->header_crc32 = 0; + secondary_header->header_crc32 = Crc32( + (const uint8_t *)secondary_header, sizeof(GptHeader)); + } +} +/* Two headers are NOT bitwise identical. For example, my_lba pointers to header + * itself so that my_lba in primary and secondary is definitely different. + * Only the following fields should be identical. + * + * first_usable_lba + * last_usable_lba + * number_of_entries + * size_of_entry + * disk_uuid + * + * If any of above field are not matched, overwrite secondary with primary since + * we always trust primary. + * If any one of header is invalid, copy from another. */ +int IsSynonymous(const GptHeader* a, const GptHeader* b) { + if ((a->first_usable_lba == b->first_usable_lba) && + (a->last_usable_lba == b->last_usable_lba) && + (a->number_of_entries == b->number_of_entries) && + (a->size_of_entry == b->size_of_entry) && + (!memcmp(&a->disk_uuid, &b->disk_uuid, sizeof(Guid)))) + return 1; + return 0; +} + +/* Primary entries and secondary entries should be bitwise identical. + * If two entries tables are valid, compare them. If not the same, + * overwrites secondary with primary (primary always has higher priority), + * and marks secondary as modified. + * If only one is valid, overwrites invalid one. + * If all are invalid, does nothing. + * This function returns bit masks for GptData.modified field. + * Note that CRC is NOT re-computed in this function. + */ +uint8_t RepairEntries(GptData *gpt, const uint32_t valid_entries) { + /* If we have an alternate GPT header signature, don't overwrite + * the secondary GPT with the primary one as that might wipe the + * partition table. Also don't overwrite the primary one with the + * secondary one as that will stop Windows from booting. */ + GptHeader* h = (GptHeader*)(gpt->primary_header); + if (!memcmp(h->signature, GPT_HEADER_SIGNATURE2, GPT_HEADER_SIGNATURE_SIZE)) + return 0; + + if (gpt->valid_headers & MASK_PRIMARY) { + h = (GptHeader*)gpt->primary_header; + } else if (gpt->valid_headers & MASK_SECONDARY) { + h = (GptHeader*)gpt->secondary_header; + } else { + /* We cannot trust any header, don't update entries. */ + return 0; + } + + size_t entries_size = h->number_of_entries * h->size_of_entry; + if (valid_entries == MASK_BOTH) { + if (memcmp(gpt->primary_entries, gpt->secondary_entries, entries_size)) { + memcpy(gpt->secondary_entries, gpt->primary_entries, entries_size); + return GPT_MODIFIED_ENTRIES2; + } + } else if (valid_entries == MASK_PRIMARY) { + memcpy(gpt->secondary_entries, gpt->primary_entries, entries_size); + return GPT_MODIFIED_ENTRIES2; + } else if (valid_entries == MASK_SECONDARY) { + memcpy(gpt->primary_entries, gpt->secondary_entries, entries_size); + return GPT_MODIFIED_ENTRIES1; + } + + return 0; +} + +/* The above five fields are shared between primary and secondary headers. + * We can recover one header from another through copying those fields. */ +static void CopySynonymousParts(GptHeader* target, const GptHeader* source) { + target->first_usable_lba = source->first_usable_lba; + target->last_usable_lba = source->last_usable_lba; + target->number_of_entries = source->number_of_entries; + target->size_of_entry = source->size_of_entry; + memcpy(&target->disk_uuid, &source->disk_uuid, sizeof(Guid)); +} + +/* This function repairs primary and secondary headers if possible. + * If both headers are valid (CRC32 is correct) but + * a) indicate inconsistent usable LBA ranges, + * b) inconsistent partition entry size and number, + * c) inconsistent disk_uuid, + * we will use the primary header to overwrite secondary header. + * If primary is invalid (CRC32 is wrong), then we repair it from secondary. + * If secondary is invalid (CRC32 is wrong), then we repair it from primary. + * This function returns the bitmasks for modified header. + * Note that CRC value is NOT re-computed in this function. UpdateCrc() will + * do it later. + */ +uint8_t RepairHeader(GptData *gpt, const uint32_t valid_headers) { + GptHeader *primary_header, *secondary_header; + + primary_header = (GptHeader*)gpt->primary_header; + secondary_header = (GptHeader*)gpt->secondary_header; + + if (valid_headers == MASK_BOTH) { + if (!IsSynonymous(primary_header, secondary_header)) { + CopySynonymousParts(secondary_header, primary_header); + return GPT_MODIFIED_HEADER2; + } + } else if (valid_headers == MASK_PRIMARY) { + memcpy(secondary_header, primary_header, sizeof(GptHeader)); + secondary_header->my_lba = gpt->gpt_drive_sectors - 1; /* the last sector */ + secondary_header->alternate_lba = primary_header->my_lba; + secondary_header->entries_lba = secondary_header->my_lba - + CalculateEntriesSectors(primary_header, gpt->sector_bytes); + return GPT_MODIFIED_HEADER2; + } else if (valid_headers == MASK_SECONDARY) { + memcpy(primary_header, secondary_header, sizeof(GptHeader)); + primary_header->my_lba = GPT_PMBR_SECTORS; /* the second sector on drive */ + primary_header->alternate_lba = secondary_header->my_lba; + /* TODO (namnguyen): Preserve (header, entries) padding space. */ + primary_header->entries_lba = primary_header->my_lba + GPT_HEADER_SECTORS; + return GPT_MODIFIED_HEADER1; + } + + return 0; +} + +int CgptGetNumNonEmptyPartitions(CgptShowParams *params) { + struct drive drive; + int gpt_retval; + int retval; + + if (params == NULL) + return CGPT_FAILED; + + if (CGPT_OK != DriveOpen(params->drive_name, &drive, O_RDONLY, + params->drive_size)) + return CGPT_FAILED; + + if (GPT_SUCCESS != (gpt_retval = GptValidityCheck(&drive.gpt))) { + Error("GptValidityCheck() returned %d: %s\n", + gpt_retval, GptError(gpt_retval)); + retval = CGPT_FAILED; + goto done; + } + + params->num_partitions = 0; + int numEntries = GetNumberOfEntries(&drive); + int i; + for(i = 0; i < numEntries; i++) { + GptEntry *entry = GetEntry(&drive.gpt, ANY_VALID, i); + if (GuidIsZero(&entry->type)) + continue; + + params->num_partitions++; + } + + retval = CGPT_OK; + +done: + DriveClose(&drive, 0); + return retval; +} + +int GuidEqual(const Guid *guid1, const Guid *guid2) { + return (0 == memcmp(guid1, guid2, sizeof(Guid))); +} + +int GuidIsZero(const Guid *gp) { + return GuidEqual(gp, &guid_unused); +} + +void PMBRToStr(struct pmbr *pmbr, char *str, unsigned int buflen) { + char buf[GUID_STRLEN]; + if (GuidIsZero(&pmbr->boot_guid)) { + require(snprintf(str, buflen, "PMBR") < buflen); + } else { + GuidToStr(&pmbr->boot_guid, buf, sizeof(buf)); + require(snprintf(str, buflen, "PMBR (Boot GUID: %s)", buf) < buflen); + } +} + +/* + * This is here because some CGPT functionality is provided in libvboot_host.a + * for other host utilities. GenerateGuid() is implemented (in cgpt.c which is + * *not* linked into libvboot_host.a) by calling into libuuid. We don't want to + * mandate libuuid as a dependency for every utilitity that wants to link + * libvboot_host.a, since they usually don't use the functionality that needs + * to generate new UUIDs anyway (just other functionality implemented in the + * same files). + */ +#ifndef HAVE_MACOS +__attribute__((weak)) int GenerateGuid(Guid *newguid) { return CGPT_FAILED; }; +#endif diff --git a/cgpt/cgpt_create.c b/cgpt/cgpt_create.c new file mode 100644 index 0000000..fac8992 --- /dev/null +++ b/cgpt/cgpt_create.c @@ -0,0 +1,140 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include + +#include "cgpt.h" +#include "cgptlib_internal.h" +#include "vboot_host.h" + +static void AllocAndClear(uint8_t **buf, uint64_t size) { + if (*buf) { + memset(*buf, 0, size); + } else { + *buf = calloc(1, size); + if (!*buf) { + Error("Cannot allocate %" PRIu64 " bytes.\n", size); + abort(); + } + } +} + +static int GptCreate(struct drive *drive, CgptCreateParams *params) { + // Do not replace any existing IGNOREME GPT headers. + if (!memcmp(((GptHeader*)drive->gpt.primary_header)->signature, + GPT_HEADER_SIGNATURE_IGNORED, GPT_HEADER_SIGNATURE_SIZE)) { + drive->gpt.ignored |= MASK_PRIMARY; + Warning("Primary GPT was marked ignored, will not overwrite.\n"); + } + + if (!memcmp(((GptHeader*)drive->gpt.secondary_header)->signature, + GPT_HEADER_SIGNATURE_IGNORED, GPT_HEADER_SIGNATURE_SIZE)) { + drive->gpt.ignored |= MASK_SECONDARY; + Warning("Secondary GPT was marked ignored, will not overwrite.\n"); + } + + // Allocate and/or erase the data. + // We cannot assume the GPT headers or entry arrays have been allocated + // by GptLoad() because those fields might have failed validation checks. + AllocAndClear(&drive->gpt.primary_header, + drive->gpt.sector_bytes * GPT_HEADER_SECTORS); + AllocAndClear(&drive->gpt.secondary_header, + drive->gpt.sector_bytes * GPT_HEADER_SECTORS); + + drive->gpt.modified |= (GPT_MODIFIED_HEADER1 | GPT_MODIFIED_ENTRIES1 | + GPT_MODIFIED_HEADER2 | GPT_MODIFIED_ENTRIES2); + + // Initialize a blank set + if (!params->zap) { + GptHeader *h = (GptHeader *)drive->gpt.primary_header; + memcpy(h->signature, GPT_HEADER_SIGNATURE, GPT_HEADER_SIGNATURE_SIZE); + h->revision = GPT_HEADER_REVISION; + h->size = sizeof(GptHeader); + h->my_lba = GPT_PMBR_SECTORS; /* The second sector on drive. */ + h->alternate_lba = drive->gpt.gpt_drive_sectors - GPT_HEADER_SECTORS; + if (CGPT_OK != GenerateGuid(&h->disk_uuid)) { + Error("Unable to generate new GUID.\n"); + return -1; + } + + /* Calculate number of entries */ + h->size_of_entry = sizeof(GptEntry); + h->number_of_entries = MAX_NUMBER_OF_ENTRIES; + if (drive->gpt.flags & GPT_FLAG_EXTERNAL) { + // We might have smaller space for the GPT table. Scale accordingly. + // + // +------+------------+---------------+-----+--------------+-----------+ + // | PMBR | Prim. Head | Prim. Entries | ... | Sec. Entries | Sec. Head | + // +------+------------+---------------+-----+--------------+-----------+ + // + // Half the size of gpt_drive_sectors must be big enough to hold PMBR + + // GPT Header + Entries Table, though the secondary structures do not + // contain PMBR. + size_t required_headers_size = + (GPT_PMBR_SECTORS + GPT_HEADER_SECTORS) * drive->gpt.sector_bytes; + size_t min_entries_size = MIN_NUMBER_OF_ENTRIES * h->size_of_entry; + size_t required_min_size = required_headers_size + min_entries_size; + size_t half_size = + (drive->gpt.gpt_drive_sectors / 2) * drive->gpt.sector_bytes; + if (half_size < required_min_size) { + Error("Not enough space to store GPT structures. Required %zu bytes.\n", + required_min_size * 2); + return -1; + } + size_t max_entries = + (half_size - required_headers_size) / h->size_of_entry; + if (h->number_of_entries > max_entries) { + h->number_of_entries = max_entries; + } + } + + /* Then use number of entries to calculate entries_lba. */ + h->entries_lba = h->my_lba + GPT_HEADER_SECTORS; + if (!(drive->gpt.flags & GPT_FLAG_EXTERNAL)) { + h->entries_lba += params->padding; + h->first_usable_lba = h->entries_lba + CalculateEntriesSectors(h, + drive->gpt.sector_bytes); + h->last_usable_lba = + (drive->gpt.streaming_drive_sectors - GPT_HEADER_SECTORS - + CalculateEntriesSectors(h, drive->gpt.sector_bytes) - 1); + } else { + h->first_usable_lba = params->padding; + h->last_usable_lba = (drive->gpt.streaming_drive_sectors - 1); + } + + size_t entries_size = h->number_of_entries * h->size_of_entry; + AllocAndClear(&drive->gpt.primary_entries, entries_size); + AllocAndClear(&drive->gpt.secondary_entries, entries_size); + + // Copy to secondary + RepairHeader(&drive->gpt, MASK_PRIMARY); + + UpdateCrc(&drive->gpt); + } + + return 0; +} + +int CgptCreate(CgptCreateParams *params) { + struct drive drive; + + if (params == NULL) + return CGPT_FAILED; + + if (CGPT_OK != DriveOpen(params->drive_name, &drive, O_RDWR, + params->drive_size)) + return CGPT_FAILED; + + if (GptCreate(&drive, params)) + goto bad; + + // Write it all out + return DriveClose(&drive, 1); + +bad: + + DriveClose(&drive, 0); + return CGPT_FAILED; +} diff --git a/cgpt/cgpt_edit.c b/cgpt/cgpt_edit.c new file mode 100644 index 0000000..963a8ac --- /dev/null +++ b/cgpt/cgpt_edit.c @@ -0,0 +1,51 @@ +/* Copyright 2018 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "cgpt.h" +#include "cgptlib_internal.h" +#include "cgpt_params.h" +#include "vboot_host.h" + +int CgptEdit(CgptEditParams *params) { + struct drive drive; + GptHeader *h; + int gpt_retval; + + if (params == NULL) + return CGPT_FAILED; + + if (CGPT_OK != DriveOpen(params->drive_name, &drive, O_RDWR, + params->drive_size)) + return CGPT_FAILED; + + if (GPT_SUCCESS != (gpt_retval = GptValidityCheck(&drive.gpt))) { + Error("GptValidityCheck() returned %d: %s\n", + gpt_retval, GptError(gpt_retval)); + goto bad; + } + + if (CGPT_OK != CheckValid(&drive)) { + Error("Please run 'cgpt repair' before changing settings.\n"); + goto bad; + } + + h = (GptHeader *)drive.gpt.primary_header; + if (params->set_unique) { + memcpy(&h->disk_uuid, ¶ms->unique_guid, sizeof(h->disk_uuid)); + } + // Copy to secondary + RepairHeader(&drive.gpt, MASK_PRIMARY); + drive.gpt.modified |= (GPT_MODIFIED_HEADER1 | GPT_MODIFIED_HEADER2); + + UpdateCrc(&drive.gpt); + + // Write it all out. + return DriveClose(&drive, 1); + +bad: + + DriveClose(&drive, 0); + return CGPT_FAILED; +} diff --git a/cgpt/cgpt_endian.h b/cgpt/cgpt_endian.h new file mode 100644 index 0000000..f59ab1b --- /dev/null +++ b/cgpt/cgpt_endian.h @@ -0,0 +1,56 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_CGPT_ENDIAN_H_ +#define VBOOT_REFERENCE_CGPT_ENDIAN_H_ + +// Newer distros already have this. For those that don't, we add it here. +#if !defined(HAVE_MACOS) && !defined(__FreeBSD__) +#include +#elif defined(__FreeBSD__) +#include +#endif + +#ifndef le16toh + +#ifndef HAVE_MACOS +# include +#endif + +# if __BYTE_ORDER == __LITTLE_ENDIAN +# define htobe16(x) __bswap_16 (x) +# define htole16(x) (x) +# define be16toh(x) __bswap_16 (x) +# define le16toh(x) (x) + +# define htobe32(x) __bswap_32 (x) +# define htole32(x) (x) +# define be32toh(x) __bswap_32 (x) +# define le32toh(x) (x) + +# define htobe64(x) __bswap_64 (x) +# define htole64(x) (x) +# define be64toh(x) __bswap_64 (x) +# define le64toh(x) (x) +# else +# define htobe16(x) (x) +# define htole16(x) __bswap_16 (x) +# define be16toh(x) (x) +# define le16toh(x) __bswap_16 (x) + +# define htobe32(x) (x) +# define htole32(x) __bswap_32 (x) +# define be32toh(x) (x) +# define le32toh(x) __bswap_32 (x) + +# define htobe64(x) (x) +# define htole64(x) __bswap_64 (x) +# define be64toh(x) (x) +# define le64toh(x) __bswap_64 (x) +# endif + +#endif + +#endif /* VBOOT_REFERENCE_CGPT_ENDIAN_H_ */ diff --git a/cgpt/cgpt_find.c b/cgpt/cgpt_find.c new file mode 100644 index 0000000..8046aad --- /dev/null +++ b/cgpt/cgpt_find.c @@ -0,0 +1,331 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include +#include + +#include "cgpt.h" +#include "cgptlib_internal.h" +#include "cgpt_nor.h" +#include "vboot_host.h" + +#define BUFSIZE 1024 + +// fill comparebuf with the data to be examined, returning true on success. +static int FillBuffer(CgptFindParams *params, int fd, uint64_t pos, + uint64_t count) { + uint8_t *bufptr = params->comparebuf; + + if (-1 == lseek(fd, pos, SEEK_SET)) + return 0; + + // keep reading until done or error + while (count) { + ssize_t bytes_read = read(fd, bufptr, count); + // negative means error, 0 means (unexpected) EOF + if (bytes_read <= 0) + return 0; + count -= bytes_read; + bufptr += bytes_read; + } + + return 1; +} + +// check partition data content. return true for match, 0 for no match or error +static int match_content(CgptFindParams *params, struct drive *drive, + GptEntry *entry) { + uint64_t part_size; + + if (!params->matchlen) + return 1; + + // Ensure that the region we want to match against is inside the partition. + part_size = drive->gpt.sector_bytes * + (entry->ending_lba - entry->starting_lba + 1); + if (params->matchoffset + params->matchlen > part_size) { + return 0; + } + + // Read the partition data. + if (!FillBuffer(params, drive->fd, + (drive->gpt.sector_bytes * entry->starting_lba) + params->matchoffset, + params->matchlen)) { + Error("unable to read partition data\n"); + return 0; + } + + // Compare it + if (0 == memcmp(params->matchbuf, params->comparebuf, params->matchlen)) { + return 1; + } + + // Nope. + return 0; +} + +// This needs to handle /dev/mmcblk0 -> /dev/mmcblk0p3, /dev/sda -> /dev/sda3 +static void showmatch(CgptFindParams *params, const char *filename, + int partnum, GptEntry *entry) { + const char * format = "%s%d\n"; + + /* + * Follow convention from disk_name() in kernel block/partition-generic.c + * code: + * If the last digit of the device name is a number, add a 'p' between the + * device name and the partition number. + */ + if (isdigit(filename[strlen(filename) - 1])) + format = "%sp%d\n"; + + if (params->numeric) { + printf("%d\n", partnum); + } else { + if (params->show_fn) { + params->show_fn(params, filename, partnum, entry); + } else { + printf(format, filename, partnum); + } + } + if (params->verbose > 0) + EntryDetails(entry, partnum - 1, params->numeric); +} + +// This returns true if a GPT partition matches the search criteria. If a match +// isn't found (or if the file doesn't contain a GPT), it returns false. The +// filename and partition number that matched is left in a global, since we +// could have multiple hits. +static int gpt_search(CgptFindParams *params, struct drive *drive, + const char *filename) { + int i; + GptEntry *entry; + int retval = 0; + char partlabel[GPT_PARTNAME_LEN]; + + if (GPT_SUCCESS != GptValidityCheck(&drive->gpt)) { + return 0; + } + + for (i = 0; i < GetNumberOfEntries(drive); ++i) { + entry = GetEntry(&drive->gpt, ANY_VALID, i); + + if (GuidIsZero(&entry->type)) + continue; + + int found = 0; + if ((params->set_unique && GuidEqual(¶ms->unique_guid, &entry->unique)) + || (params->set_type && GuidEqual(¶ms->type_guid, &entry->type))) { + found = 1; + } else if (params->set_label) { + if (CGPT_OK != UTF16ToUTF8(entry->name, + sizeof(entry->name) / sizeof(entry->name[0]), + (uint8_t *)partlabel, sizeof(partlabel))) { + Error("The label cannot be converted from UTF16, so abort.\n"); + return 0; + } + if (!strncmp(params->label, partlabel, sizeof(partlabel))) + found = 1; + } + if (found && match_content(params, drive, entry)) { + params->hits++; + retval++; + showmatch(params, filename, i+1, entry); + if (!params->match_partnum) + params->match_partnum = i+1; + } + } + + return retval; +} + +static int do_search(CgptFindParams *params, const char *fileName) { + int retval; + struct drive drive; + + if (CGPT_OK != DriveOpen(fileName, &drive, O_RDONLY, params->drive_size)) + return 0; + + retval = gpt_search(params, &drive, fileName); + + (void) DriveClose(&drive, 0); + + return retval; +} + + +#define PROC_MTD "/proc/mtd" +#define PROC_PARTITIONS "/proc/partitions" +#define DEV_DIR "/dev" +#define SYS_BLOCK_DIR "/sys/block" +#define MAX_PARTITION_NAME_LEN 128 + +static const char *devdirs[] = { "/dev", "/devices", "/devfs", 0 }; + +// Given basename "foo", see if we can find a whole, real device by that name. +// This is copied from the logic in the linux utility 'findfs', although that +// does more exhaustive searching. +static char *is_wholedev(const char *basename) { + int i; + struct stat statbuf; + static char pathname[BUFSIZE]; // we'll return this. + char tmpname[BUFSIZE]; + + // It should be a block device under /dev/, + for (i = 0; devdirs[i]; i++) { + sprintf(pathname, "%s/%s", devdirs[i], basename); + + if (0 != stat(pathname, &statbuf)) + continue; + + if (!S_ISBLK(statbuf.st_mode)) + continue; + + // It should have a symlink called /sys/block/*/device + sprintf(tmpname, "%s/%s/device", SYS_BLOCK_DIR, basename); + + if (0 != lstat(tmpname, &statbuf)) + continue; + + if (!S_ISLNK(statbuf.st_mode)) + continue; + + // found it + return pathname; + } + + return 0; +} + +#ifdef GPT_SPI_NOR +// This handles the MTD devices. ChromeOS uses /dev/mtdX for kernel partitions, +// /dev/ubiblockX_0 for root partitions, and /dev/ubiX for stateful partition. +static void chromeos_mtd_show(CgptFindParams *params, const char *filename, + int partnum, GptEntry *entry) { + if (GuidEqual(&guid_chromeos_kernel, &entry->type)) { + printf("/dev/mtd%d\n", partnum); + } else if (GuidEqual(&guid_chromeos_rootfs, &entry->type)) { + printf("/dev/ubiblock%d_0\n", partnum); + } else { + printf("/dev/ubi%d_0\n", partnum); + } +} + +static int scan_spi_gpt(CgptFindParams *params) { + int found = 0; + char partname[MAX_PARTITION_NAME_LEN]; + FILE *fp; + size_t line_length = 0; + char *line = NULL; + + fp = fopen(PROC_MTD, "re"); + if (!fp) { + return found; + } + + while (getline(&line, &line_length, fp) != -1) { + uint64_t sz; + uint32_t erasesz; + char name[128]; + // dev: size erasesize name + if (sscanf(line, "%64[^:]: %" PRIx64 " %x \"%127[^\"]\"", + partname, &sz, &erasesz, name) != 4) + continue; + if (strcmp(partname, "mtd0") == 0) { + char temp_dir[] = "/tmp/cgpt_find.XXXXXX"; + if (params->drive_size == 0) { + if (GetMtdSize("/dev/mtd0", ¶ms->drive_size) != 0) { + perror("GetMtdSize"); + goto cleanup; + } + } + if (ReadNorFlash(temp_dir) != 0) { + perror("ReadNorFlash"); + goto cleanup; + } + char nor_file[64]; + if (snprintf(nor_file, sizeof(nor_file), "%s/rw_gpt", temp_dir) > 0) { + params->show_fn = chromeos_mtd_show; + if (do_search(params, nor_file)) { + found++; + } + params->show_fn = NULL; + } + RemoveDir(temp_dir); + break; + } + } +cleanup: + fclose(fp); + free(line); + return found; +} +#else +// Stub +static int scan_spi_gpt(CgptFindParams *params) { + return 0; +} +#endif + +// This scans all the physical devices it can find, looking for a match. It +// returns true if any matches were found, false otherwise. +static int scan_real_devs(CgptFindParams *params) { + int found = 0; + char partname[MAX_PARTITION_NAME_LEN]; + char partname_prev[MAX_PARTITION_NAME_LEN]; + FILE *fp; + char *pathname; + + fp = fopen(PROC_PARTITIONS, "re"); + if (!fp) { + perror("can't read " PROC_PARTITIONS); + return found; + } + + size_t line_length = 0; + char *line = NULL; + partname_prev[0] = '\0'; + while (getline(&line, &line_length, fp) != -1) { + int ma, mi; + long long unsigned int sz; + + if (sscanf(line, " %d %d %llu %127[^\n ]", &ma, &mi, &sz, partname) != 4) + continue; + + /* Only check devices that have partitions under them. + * We can tell by checking that an entry like "sda" is immediately + * followed by one like "sda0". */ + if (!strncmp(partname_prev, partname, strlen(partname_prev)) && + strlen(partname_prev)) { + if ((pathname = is_wholedev(partname_prev))) { + if (do_search(params, pathname)) { + found++; + } + } + } + + strcpy(partname_prev, partname); + } + + fclose(fp); + free(line); + + found += scan_spi_gpt(params); + + return found; +} + + +void CgptFind(CgptFindParams *params) { + if (params == NULL) + return; + + if (params->drive_name != NULL) + do_search(params, params->drive_name); + else + scan_real_devs(params); +} diff --git a/cgpt/cgpt_legacy.c b/cgpt/cgpt_legacy.c new file mode 100644 index 0000000..89b33e6 --- /dev/null +++ b/cgpt/cgpt_legacy.c @@ -0,0 +1,66 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include + +#include "cgpt.h" +#include "cgptlib_internal.h" +#include "vboot_host.h" + +int CgptLegacy(CgptLegacyParams *params) { + struct drive drive; + int gpt_retval; + GptHeader *h1, *h2; + + if (params == NULL) + return CGPT_FAILED; + + if (CGPT_OK != DriveOpen(params->drive_name, &drive, O_RDWR, + params->drive_size)) + return CGPT_FAILED; + + if (GPT_SUCCESS != (gpt_retval = GptValidityCheck(&drive.gpt))) { + Error("GptValidityCheck() returned %d: %s\n", + gpt_retval, GptError(gpt_retval)); + goto bad; + } + + h1 = (GptHeader *)drive.gpt.primary_header; + h2 = (GptHeader *)drive.gpt.secondary_header; + if (params->mode == CGPT_LEGACY_MODE_EFIPART) { + drive.gpt.ignored = MASK_NONE; + memcpy(h1->signature, GPT_HEADER_SIGNATURE, GPT_HEADER_SIGNATURE_SIZE); + memcpy(h2->signature, GPT_HEADER_SIGNATURE, GPT_HEADER_SIGNATURE_SIZE); + RepairEntries(&drive.gpt, MASK_SECONDARY); + drive.gpt.modified |= (GPT_MODIFIED_HEADER1 | GPT_MODIFIED_ENTRIES1 | + GPT_MODIFIED_HEADER2); + } else if (params->mode == CGPT_LEGACY_MODE_IGNORE_PRIMARY) { + if (!(drive.gpt.valid_headers & MASK_SECONDARY) || + !(drive.gpt.valid_entries & MASK_SECONDARY) || + drive.gpt.ignored & MASK_SECONDARY) { + Error("Refusing to mark primary GPT ignored unless secondary is valid."); + goto bad; + } + memset(h1, 0, sizeof(*h1)); + memcpy(h1->signature, GPT_HEADER_SIGNATURE_IGNORED, + GPT_HEADER_SIGNATURE_SIZE); + drive.gpt.modified |= GPT_MODIFIED_HEADER1; + } else { + memcpy(h1->signature, GPT_HEADER_SIGNATURE2, GPT_HEADER_SIGNATURE_SIZE); + memcpy(h2->signature, GPT_HEADER_SIGNATURE2, GPT_HEADER_SIGNATURE_SIZE); + memset(drive.gpt.primary_entries, 0, drive.gpt.sector_bytes); + drive.gpt.modified |= (GPT_MODIFIED_HEADER1 | GPT_MODIFIED_ENTRIES1 | + GPT_MODIFIED_HEADER2); + } + + UpdateCrc(&drive.gpt); + + // Write it all out + return DriveClose(&drive, 1); + +bad: + (void) DriveClose(&drive, 0); + return CGPT_FAILED; +} diff --git a/cgpt/cgpt_nor.c b/cgpt/cgpt_nor.c new file mode 100644 index 0000000..4450adb --- /dev/null +++ b/cgpt/cgpt_nor.c @@ -0,0 +1,298 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include +#include +#if !defined(__FreeBSD__) +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cgpt.h" +#include "cgpt_nor.h" +#include "subprocess.h" + +static const char FLASHROM_PATH[] = "/usr/sbin/flashrom"; + +// Obtain the MTD size from its sysfs node. +int GetMtdSize(const char *mtd_device, uint64_t *size) { + mtd_device = strrchr(mtd_device, '/'); + if (mtd_device == NULL) { + errno = EINVAL; + return 1; + } + char *sysfs_name; + if (asprintf(&sysfs_name, "/sys/class/mtd%s/size", mtd_device) == -1) { + return 1; + } + FILE *fp = fopen(sysfs_name, "r"); + free(sysfs_name); + if (fp == NULL) { + return 1; + } + int ret = (fscanf(fp, "%" PRIu64 "\n", size) != 1); + fclose(fp); + return ret; +} + +// TODO(b:184812319): Remove these functions and use subprocess_run everywhere. +int ForkExecV(const char *cwd, const char *const argv[]) { + pid_t pid = fork(); + if (pid == -1) { + return -1; + } + int status = -1; + if (pid == 0) { + if (cwd && chdir(cwd) != 0) { + return -1; + } + execv(argv[0], (char *const *)argv); + // If this is reached, execv fails. + err(-1, "Cannot exec %s in %s.", argv[0], cwd); + } else { + if (waitpid(pid, &status, 0) != -1 && WIFEXITED(status)) + return WEXITSTATUS(status); + } + return status; +} + +static int ForkExecL(const char *cwd, const char *cmd, ...) { + int argc; + va_list ap; + va_start(ap, cmd); + for (argc = 1; va_arg(ap, char *) != NULL; ++argc); + va_end(ap); + + va_start(ap, cmd); + const char **argv = calloc(argc + 1, sizeof(char *)); + if (argv == NULL) { + errno = ENOMEM; + va_end(ap); + return -1; + } + argv[0] = cmd; + int i; + for (i = 1; i < argc; ++i) { + argv[i] = va_arg(ap, char *); + } + va_end(ap); + + int ret = ForkExecV(cwd, argv); + free(argv); + return ret; +} + +static int read_write(int source_fd, + uint64_t size, + const char *src_name, + int idx) { + int ret = 1; + const int bufsize = 4096; + char *buf = malloc(bufsize); + if (buf == NULL) { + goto clean_exit; + } + + ret++; + char *dest; + if (asprintf(&dest, "%s_%d", src_name, idx) == -1) { + goto free_buf; + } + + ret++; + int dest_fd = open(dest, O_WRONLY | O_CLOEXEC | O_CREAT, 0600); + if (dest_fd < 0) { + goto free_dest; + } + + ret++; + uint64_t copied = 0; + ssize_t nr_read; + ssize_t nr_write; + while (copied < size) { + size_t to_read = size - copied; + if (to_read > bufsize) { + to_read = bufsize; + } + nr_read = read(source_fd, buf, to_read); + if (nr_read < 0) { + goto close_dest_fd; + } + nr_write = 0; + while (nr_write < nr_read) { + ssize_t s = write(dest_fd, buf + nr_write, nr_read - nr_write); + if (s < 0) { + goto close_dest_fd; + } + nr_write += s; + } + copied += nr_read; + } + + ret = 0; + +close_dest_fd: + close(dest_fd); +free_dest: + free(dest); +free_buf: + free(buf); +clean_exit: + return ret; +} + +static int split_gpt(const char *dir_name, const char *file_name) { + int ret = 1; + char *source; + if (asprintf(&source, "%s/%s", dir_name, file_name) == -1) { + goto clean_exit; + } + + ret++; + int fd = open(source, O_RDONLY | O_CLOEXEC); + if (fd < 0) { + goto free_source; + } + + ret++; + struct stat stat; + if (fstat(fd, &stat) != 0 || (stat.st_size & 1) != 0) { + goto close_fd; + } + uint64_t half_size = stat.st_size / 2; + + ret++; + if (read_write(fd, half_size, source, 1) != 0 || + read_write(fd, half_size, source, 2) != 0) { + goto close_fd; + } + + ret = 0; +close_fd: + close(fd); +free_source: + free(source); +clean_exit: + return ret; +} + +static int remove_file_or_dir(const char *fpath, const struct stat *sb, + int typeflag, struct FTW *ftwbuf) { + return remove(fpath); +} + +int RemoveDir(const char *dir) { + return nftw(dir, remove_file_or_dir, 20, FTW_DEPTH | FTW_PHYS); +} + +// Read RW_GPT from NOR flash to "rw_gpt" in a temp dir |temp_dir_template|. +// |temp_dir_template| is passed to mkdtemp() so it must satisfy all +// requirements by mkdtemp. +// TODO(b:184812319): Replace this function with flashrom_read. +int ReadNorFlash(char *temp_dir_template) { + int ret = 0; + + // Create a temp dir to work in. + ret++; + if (mkdtemp(temp_dir_template) == NULL) { + Error("Cannot create a temporary directory.\n"); + return ret; + } + + // Read RW_GPT section from NOR flash to "rw_gpt". + ret++; + + char *cwd = getcwd(NULL, 0); + if (!cwd) { + Error("Cannot get current directory.\n"); + return ret; + } + if (chdir(temp_dir_template) < 0) { + Error("Cannot change directory.\n"); + goto out_free; + } + const char *const argv[] = {FLASHROM_PATH, "-i", "RW_GPT:rw_gpt", "-r"}; + // Redirect stdout to /dev/null so that flashrom does not muck up cgpt's + // output. + if (subprocess_run(argv, &subprocess_null, &subprocess_null, NULL) != 0) { + Error("Cannot exec flashrom to read from RW_GPT section.\n"); + RemoveDir(temp_dir_template); + } else { + ret = 0; + } + if (chdir(cwd) < 0) { + Error("Cannot change directory back to original.\n"); + goto out_free; + } + +out_free: + free(cwd); + return ret; +} + +// Write "rw_gpt" back to NOR flash. We write the file in two parts for safety. +// TODO(b:184812319): Replace this function with flashrom_write. +int WriteNorFlash(const char *dir) { + int ret = 0; + + ret++; + if (split_gpt(dir, "rw_gpt") != 0) { + Error("Cannot split rw_gpt in two.\n"); + return ret; + } + ret++; + int nr_fails = 0; + + char *cwd = getcwd(NULL, 0); + if (!cwd) { + Error("Cannot get current directory.\n"); + return ret; + } + if (chdir(dir) < 0) { + Error("Cannot change directory.\n"); + goto out_free; + } + const char *const argv1[] = {FLASHROM_PATH, "-i", "RW_GPT_PRIMARY:rw_gpt_1", + "-w", "--noverify-all"}; + // Redirect stdout to /dev/null so that flashrom does not muck up cgpt's + // output. + if (subprocess_run(argv1, &subprocess_null, &subprocess_null, NULL) != 0) { + Warning("Cannot write the 1st half of rw_gpt back with flashrom.\n"); + nr_fails++; + } + const char *const argv2[] = {FLASHROM_PATH, "-i", "RW_GPT_SECONDARY:rw_gpt_2", + "-w", "--noverify-all"}; + // Redirect stdout to /dev/null so that flashrom does not muck up cgpt's + // output. + if (subprocess_run(argv2, &subprocess_null, &subprocess_null, NULL) != 0) { + Warning("Cannot write the 2nd half of rw_gpt back with flashrom.\n"); + nr_fails++; + } + if (chdir(cwd) < 0) { + Error("Cannot change directory back to original.\n"); + goto out_free; + } + switch (nr_fails) { + case 0: ret = 0; break; + case 1: Warning("It might still be okay.\n"); break; + case 2: Error("Cannot write both parts back with flashrom.\n"); break; + } + +out_free: + free(cwd); + return ret; +} diff --git a/cgpt/cgpt_nor.h b/cgpt/cgpt_nor.h new file mode 100644 index 0000000..4746089 --- /dev/null +++ b/cgpt/cgpt_nor.h @@ -0,0 +1,34 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * This module provides some utility functions to use "flashrom" to read from + * and write to NOR flash. + */ + +#ifndef VBOOT_REFERENCE_CGPT_NOR_H_ +#define VBOOT_REFERENCE_CGPT_NOR_H_ + +// Obtain the MTD size from its sysfs node. |mtd_device| should point to +// a dev node such as /dev/mtd0. This function returns 0 on success. +int GetMtdSize(const char *mtd_device, uint64_t *size); + +// Exec |argv| in |cwd|. Return -1 on error, or exit code on success. |argv| +// must be terminated with a NULL element as is required by execv(). +int ForkExecV(const char *cwd, const char *const argv[]); + +// Similar to ForkExecV but with a vararg instead of an array of pointers. +int ForkExecL(const char *cwd, const char *cmd, ...); + +// Exec "rm" to remove |dir|. +int RemoveDir(const char *dir); + +// Read RW_GPT from NOR flash to "rw_gpt" in a temp dir |temp_dir_template|. +// |temp_dir_template| is passed to mkdtemp() so it must satisfy all +// requirements by mkdtemp(). +int ReadNorFlash(char *temp_dir_template); + +// Write "rw_gpt" back to NOR flash. We write the file in two parts for safety. +int WriteNorFlash(const char *dir); + +#endif /* VBOOT_REFERENCE_CGPT_NOR_H_ */ diff --git a/cgpt/cgpt_prioritize.c b/cgpt/cgpt_prioritize.c new file mode 100644 index 0000000..6d53f59 --- /dev/null +++ b/cgpt/cgpt_prioritize.c @@ -0,0 +1,215 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include + +#include "cgpt.h" +#include "cgptlib_internal.h" +#include "vboot_host.h" + +////////////////////////////////////////////////////////////////////////////// +// We need a sorted list of priority groups, where each element in the list +// contains an unordered list of GPT partition numbers. + +#define MAX_GROUPS 17 // 0-15, plus one "higher" + +typedef struct { + int priority; // priority of this group + int num_parts; // number of partitions in this group + uint32_t *part; // array of partitions in this group +} group_t; + +typedef struct { + int max_parts; // max number of partitions in any group + int num_groups; // number of non-empty groups + group_t group[MAX_GROUPS]; // array of groups +} group_list_t; + + +static group_list_t *NewGroupList(int max_p) { + int i; + group_list_t *gl = (group_list_t *)malloc(sizeof(group_list_t)); + require(gl); + gl->max_parts = max_p; + gl->num_groups = 0; + // reserve space for the maximum number of partitions in every group + for (i=0; igroup[i].priority = -1; + gl->group[i].num_parts = 0; + gl->group[i].part = (uint32_t *)malloc(sizeof(uint32_t) * max_p); + require(gl->group[i].part); + } + + return gl; +} + +static void FreeGroups(group_list_t *gl) { + int i; + for (i=0; igroup[i].part); + free(gl); +} + +static void AddToGroup(group_list_t *gl, int priority, int partition) { + int i; + // See if I've already got a group with this priority + for (i=0; inum_groups; i++) + if (gl->group[i].priority == priority) + break; + if (i == gl->num_groups) { + // no, add a group + require(i < MAX_GROUPS); + gl->num_groups++; + gl->group[i].priority = priority; + } + // add the partition to it + int j = gl->group[i].num_parts; + gl->group[i].part[j] = partition; + gl->group[i].num_parts++; +} + +static void ChangeGroup(group_list_t *gl, int old_priority, int new_priority) { + int i; + for (i=0; inum_groups; i++) + if (gl->group[i].priority == old_priority) { + gl->group[i].priority = new_priority; + break; + } +} + +static void SortGroups(group_list_t *gl) { + int i, j; + group_t tmp; + + // straight insertion sort is fast enough + for (i=1; inum_groups; i++) { + tmp = gl->group[i]; + for (j=i; j && (gl->group[j-1].priority < tmp.priority); j--) + gl->group[j] = gl->group[j-1]; + gl->group[j] = tmp; + } +} + +int CgptPrioritize(CgptPrioritizeParams *params) { + struct drive drive; + + int priority; + + int gpt_retval; + uint32_t index; + uint32_t max_part; + int num_kernels; + int i,j; + group_list_t *groups; + + if (params == NULL) + return CGPT_FAILED; + + if (CGPT_OK != DriveOpen(params->drive_name, &drive, O_RDWR, + params->drive_size)) + return CGPT_FAILED; + + if (GPT_SUCCESS != (gpt_retval = GptValidityCheck(&drive.gpt))) { + Error("GptValidityCheck() returned %d: %s\n", + gpt_retval, GptError(gpt_retval)); + goto bad; + } + + if (CGPT_OK != CheckValid(&drive)) { + Error("please run 'cgpt repair' before reordering the priority.\n"); + (void) DriveClose(&drive, 0); + return CGPT_OK; + } + + max_part = GetNumberOfEntries(&drive); + + if (params->set_partition) { + if (params->set_partition < 1 || params->set_partition > max_part) { + Error("invalid partition number: %d (must be between 1 and %d\n", + params->set_partition, max_part); + goto bad; + } + index = params->set_partition - 1; + // it must be a kernel + if (!IsKernel(&drive, PRIMARY, index)) { + Error("partition %d is not a ChromeOS kernel\n", params->set_partition); + goto bad; + } + } + + // How many kernel partitions do I have? + num_kernels = 0; + for (i = 0; i < max_part; i++) { + if (IsKernel(&drive, PRIMARY, i)) + num_kernels++; + } + + if (num_kernels) { + // Determine the current priority groups + groups = NewGroupList(num_kernels); + for (i = 0; i < max_part; i++) { + if (!IsKernel(&drive, PRIMARY, i)) + continue; + + priority = GetPriority(&drive, PRIMARY, i); + + // Is this partition special? + if (params->set_partition && (i+1 == params->set_partition)) { + params->orig_priority = priority; // remember the original priority + if (params->set_friends) + AddToGroup(groups, priority, i); // we'll move them all later + else + AddToGroup(groups, 99, i); // move only this one + } else { + AddToGroup(groups, priority, i); // just remember + } + } + + // If we're including friends, then change the original group priority + if (params->set_partition && params->set_friends) { + ChangeGroup(groups, params->orig_priority, 99); + } + + // Sorting gives the new order. Now we just need to reassign the + // priorities. + SortGroups(groups); + + // We'll never lower anything to zero, so if the last group is priority zero + // we can ignore it. + i = groups->num_groups; + if (groups->group[i-1].priority == 0) + groups->num_groups--; + + // Where do we start? + if (params->max_priority) + priority = params->max_priority; + else + priority = groups->num_groups > 15 ? 15 : groups->num_groups; + + // Figure out what the new values should be + for (i=0; inum_groups; i++) { + groups->group[i].priority = priority; + if (priority > 1) + priority--; + } + + // Now apply the ranking to the GPT + for (i=0; inum_groups; i++) + for (j=0; jgroup[i].num_parts; j++) + SetPriority(&drive, PRIMARY, + groups->group[i].part[j], groups->group[i].priority); + + FreeGroups(groups); + } + + // Write it all out + UpdateAllEntries(&drive); + + return DriveClose(&drive, 1); + +bad: + (void) DriveClose(&drive, 0); + return CGPT_FAILED; +} diff --git a/cgpt/cgpt_repair.c b/cgpt/cgpt_repair.c new file mode 100644 index 0000000..b4ddde6 --- /dev/null +++ b/cgpt/cgpt_repair.c @@ -0,0 +1,38 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include + +#include "cgpt.h" +#include "cgptlib_internal.h" +#include "vboot_host.h" + +int CgptRepair(CgptRepairParams *params) { + struct drive drive; + + if (params == NULL) + return CGPT_FAILED; + + if (CGPT_OK != DriveOpen(params->drive_name, &drive, O_RDWR, + params->drive_size)) + return CGPT_FAILED; + + int gpt_retval = GptValidityCheck(&drive.gpt); + if (params->verbose) + printf("GptValidityCheck() returned %d: %s\n", + gpt_retval, GptError(gpt_retval)); + + GptRepair(&drive.gpt); + if (drive.gpt.modified & GPT_MODIFIED_HEADER1) + printf("Primary Header is updated.\n"); + if (drive.gpt.modified & GPT_MODIFIED_ENTRIES1) + printf("Primary Entries is updated.\n"); + if (drive.gpt.modified & GPT_MODIFIED_ENTRIES2) + printf("Secondary Entries is updated.\n"); + if (drive.gpt.modified & GPT_MODIFIED_HEADER2) + printf("Secondary Header is updated.\n"); + + return DriveClose(&drive, 1); +} diff --git a/cgpt/cgpt_show.c b/cgpt/cgpt_show.c new file mode 100644 index 0000000..3923815 --- /dev/null +++ b/cgpt/cgpt_show.c @@ -0,0 +1,410 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#define __STDC_FORMAT_MACROS + +#include + +#include "cgpt.h" +#include "cgptlib_internal.h" +#include "crc32.h" +#include "vboot_host.h" + +/* Generate output like: + * + * [AB-CD-EF-01] for group = 1 + * [ABCD-EF01] for group = 3 (low byte first) + * + * Needs (size*3-1+3) bytes of space in 'buf' (included the tailing '\0'). + */ +#define BUFFER_SIZE(size) (size *3 - 1 + 3) +static short Uint8To2Chars(const uint8_t t) { + int h = t >> 4; + int l = t & 0xf; + h = (h >= 0xA) ? h - 0xA + 'A' : h + '0'; + l = (l >= 0xA) ? l - 0xA + 'A' : l + '0'; + return (h << 8) + l; +} + +static void RawDump(const uint8_t *memory, const int size, + char *buf, int group) { + int i, outlen = 0; + buf[outlen++] = '['; + for (i = 0; i < size; ++i) { + short c2 = Uint8To2Chars(memory[i]); + buf[outlen++] = c2 >> 8; + buf[outlen++] = c2 & 0xff; + if (i != (size - 1) && ((i + 1) % group) == 0) + buf[outlen++] = '-'; + } + buf[outlen++] = ']'; + buf[outlen++] = '\0'; +} + +/* Output formatters */ +#define TITLE_FMT "%12s%12s%8s %s\n" +#define GPT_FMT "%12"PRId64"%12"PRId64"%8s %s\n" +#define GPT_MORE "%12s%12s%8s ", "", "", "" +#define PARTITION_FMT "%12"PRId64"%12"PRId64"%8d %s\n" +#define PARTITION_MORE "%12s%12s%8s %s%s\n", "", "", "" + +static void PrintSignature(const char *indent, const char *sig, size_t n, + int raw) { + size_t i; + printf("%sSig: ", indent); + if (!raw) { + printf("["); + for (i = 0; i < n; ++i) + printf("%c", sig[i]); + printf("]"); + } else { + char *buf = malloc(BUFFER_SIZE(n)); + RawDump((uint8_t *)sig, n, buf, 1); + printf("%s", buf); + free(buf); + } + printf("\n"); +} + +static void HeaderDetails(GptHeader *header, GptEntry *entries, + const char *indent, int raw) { + PrintSignature(indent, header->signature, sizeof(header->signature), raw); + + printf("%sRev: 0x%08x\n", indent, header->revision); + printf("%sSize: %d (blocks)\n", indent, header->size); + printf("%sHeader CRC: 0x%08x %s\n", indent, header->header_crc32, + (HeaderCrc(header) != header->header_crc32) ? "(INVALID)" : ""); + printf("%sMy LBA: %lld\n", indent, (long long)header->my_lba); + printf("%sAlternate LBA: %lld\n", indent, (long long)header->alternate_lba); + printf("%sFirst LBA: %lld\n", indent, (long long)header->first_usable_lba); + printf("%sLast LBA: %lld\n", indent, (long long)header->last_usable_lba); + + { /* For disk guid */ + char buf[GUID_STRLEN]; + GuidToStr(&header->disk_uuid, buf, GUID_STRLEN); + printf("%sDisk UUID: %s\n", indent, buf); + } + + printf("%sEntries LBA: %lld\n", indent, (long long)header->entries_lba); + printf("%sNumber of entries: %d\n", indent, header->number_of_entries); + printf("%sSize of entry: %d\n", indent, header->size_of_entry); + printf("%sEntries CRC: 0x%08x %s\n", indent, header->entries_crc32, + header->entries_crc32 != + Crc32((const uint8_t *)entries,header->size_of_entry * + header->number_of_entries) + ? "INVALID" : "" + ); +} + +void EntryDetails(GptEntry *entry, uint32_t index, int raw) { + char contents[256]; // scratch buffer for formatting output + uint8_t label[GPT_PARTNAME_LEN]; + char type[GUID_STRLEN], unique[GUID_STRLEN]; + int clen; + + UTF16ToUTF8(entry->name, sizeof(entry->name) / sizeof(entry->name[0]), + label, sizeof(label)); + require(snprintf(contents, sizeof(contents), + "Label: \"%s\"", label) < sizeof(contents)); + printf(PARTITION_FMT, (uint64_t)entry->starting_lba, + (uint64_t)(entry->ending_lba - entry->starting_lba + 1), + index+1, contents); + + if (!raw && CGPT_OK == ResolveType(&entry->type, type)) { + printf(PARTITION_MORE, "Type: ", type); + } else { + GuidToStr(&entry->type, type, GUID_STRLEN); + printf(PARTITION_MORE, "Type: ", type); + } + GuidToStr(&entry->unique, unique, GUID_STRLEN); + printf(PARTITION_MORE, "UUID: ", unique); + + clen = 0; + if (!raw) { + if (GuidEqual(&guid_chromeos_kernel, &entry->type)) { + int tries = (entry->attrs.fields.gpt_att & + CGPT_ATTRIBUTE_TRIES_MASK) >> + CGPT_ATTRIBUTE_TRIES_OFFSET; + int successful = (entry->attrs.fields.gpt_att & + CGPT_ATTRIBUTE_SUCCESSFUL_MASK) >> + CGPT_ATTRIBUTE_SUCCESSFUL_OFFSET; + int priority = (entry->attrs.fields.gpt_att & + CGPT_ATTRIBUTE_PRIORITY_MASK) >> + CGPT_ATTRIBUTE_PRIORITY_OFFSET; + clen = snprintf(contents, sizeof(contents), + "priority=%d tries=%d successful=%d ", + priority, tries, successful); + } + + if (entry->attrs.fields.required) { + clen += snprintf(contents + clen, sizeof(contents) - clen, + "required=%d ", entry->attrs.fields.required); + require(clen < sizeof(contents)); + } + + if (entry->attrs.fields.efi_ignore) { + clen += snprintf(contents + clen, sizeof(contents) - clen, + "efi_ignore=%d ", entry->attrs.fields.efi_ignore); + require(clen < sizeof(contents)); + } + + if (entry->attrs.fields.legacy_boot) { + clen += snprintf(contents + clen, sizeof(contents) - clen, + "legacy_boot=%d ", entry->attrs.fields.legacy_boot); + require(clen < sizeof(contents)); + } + } else { + clen = snprintf(contents, sizeof(contents), + "[%x]", entry->attrs.fields.gpt_att); + } + require(clen < sizeof(contents)); + if (clen) + printf(PARTITION_MORE, "Attr: ", contents); +} + +static void EntriesDetails(struct drive *drive, const int secondary, int raw) { + uint32_t i; + + for (i = 0; i < GetNumberOfEntries(drive); ++i) { + GptEntry *entry; + entry = GetEntry(&drive->gpt, secondary, i); + + if (GuidIsZero(&entry->type)) + continue; + + EntryDetails(entry, i, raw); + } +} + +static int GptShow(struct drive *drive, CgptShowParams *params) { + int gpt_retval; + if (GPT_SUCCESS != (gpt_retval = GptValidityCheck(&drive->gpt))) { + Error("GptValidityCheck() returned %d: %s\n", + gpt_retval, GptError(gpt_retval)); + return CGPT_FAILED; + } + + if (params->partition) { // show single partition + + if (params->partition > GetNumberOfEntries(drive)) { + Error("invalid partition number: %d\n", params->partition); + return CGPT_FAILED; + } + + uint32_t index = params->partition - 1; + GptEntry *entry = GetEntry(&drive->gpt, ANY_VALID, index); + char buf[256]; // scratch buffer for string conversion + + if (params->single_item) { + switch(params->single_item) { + case 'b': + printf("%" PRId64 "\n", entry->starting_lba); + break; + case 's': { + uint64_t size = 0; + // If these aren't actually defined, don't show anything + if (entry->ending_lba || entry->starting_lba) + size = entry->ending_lba - entry->starting_lba + 1; + printf("%" PRId64 "\n", size); + break; + } + case 't': + GuidToStr(&entry->type, buf, sizeof(buf)); + printf("%s\n", buf); + break; + case 'u': + GuidToStr(&entry->unique, buf, sizeof(buf)); + printf("%s\n", buf); + break; + case 'l': + UTF16ToUTF8(entry->name, sizeof(entry->name) / sizeof(entry->name[0]), + (uint8_t *)buf, sizeof(buf)); + printf("%s\n", buf); + break; + case 'S': + printf("%d\n", GetSuccessful(drive, ANY_VALID, index)); + break; + case 'T': + printf("%d\n", GetTries(drive, ANY_VALID, index)); + break; + case 'P': + printf("%d\n", GetPriority(drive, ANY_VALID, index)); + break; + case 'R': + printf("%d\n", GetRequired(drive, ANY_VALID, index)); + break; + case 'B': + printf("%d\n", GetLegacyBoot(drive, ANY_VALID, index)); + break; + case 'A': + printf("%#x\n", entry->attrs.fields.gpt_att); + break; + } + } else { + printf(TITLE_FMT, "start", "size", "part", "contents"); + EntryDetails(entry, index, params->numeric); + } + + } else if (params->quick) { // show all partitions, quickly + uint32_t i; + GptEntry *entry; + char type[GUID_STRLEN]; + + for (i = 0; i < GetNumberOfEntries(drive); ++i) { + entry = GetEntry(&drive->gpt, ANY_VALID, i); + + if (GuidIsZero(&entry->type)) + continue; + + if (!params->numeric && CGPT_OK == ResolveType(&entry->type, type)) { + } else { + GuidToStr(&entry->type, type, GUID_STRLEN); + } + printf(PARTITION_FMT, (uint64_t)entry->starting_lba, + (uint64_t)(entry->ending_lba - entry->starting_lba + 1), + i+1, type); + } + } else { // show all partitions + GptEntry *entries; + + if (params->debug || params->verbose) { + printf("Drive details:\n"); + printf(" Total Size (bytes): %" PRIu64 "\n", drive->size); + printf(" LBA Size (bytes): %d\n", drive->gpt.sector_bytes); + if (drive->gpt.flags & GPT_FLAG_EXTERNAL) { + printf(" Drive (where GPT lives) Size (blocks): %" PRIu64 "\n", + drive->gpt.gpt_drive_sectors); + printf(" Drive (where partitions live) Size (blocks): %" PRIu64 "\n", + drive->gpt.streaming_drive_sectors); + } else { + // We know gpt_drive_sectors == streaming_drive_sectors here. + printf(" Drive Size (blocks): %" PRIu64 "\n", + drive->gpt.gpt_drive_sectors); + } + printf("\n"); + } + + if (CGPT_OK != ReadPMBR(drive)) { + Error("Unable to read PMBR\n"); + return CGPT_FAILED; + } + + printf(TITLE_FMT, "start", "size", "part", "contents"); + char buf[256]; // buffer for formatted PMBR content + PMBRToStr(&drive->pmbr, buf, sizeof(buf)); // will exit if buf is too small + printf(GPT_FMT, (uint64_t)0, (uint64_t)GPT_PMBR_SECTORS, "", buf); + + if (drive->gpt.ignored & MASK_PRIMARY) { + printf(GPT_FMT, (uint64_t)GPT_PMBR_SECTORS, + (uint64_t)GPT_HEADER_SECTORS, "IGNORED", "Pri GPT header"); + } else { + if (drive->gpt.valid_headers & MASK_PRIMARY) { + printf(GPT_FMT, (uint64_t)GPT_PMBR_SECTORS, + (uint64_t)GPT_HEADER_SECTORS, "", "Pri GPT header"); + } else { + printf(GPT_FMT, (uint64_t)GPT_PMBR_SECTORS, + (uint64_t)GPT_HEADER_SECTORS, "INVALID", "Pri GPT header"); + } + + if (params->debug || + ((drive->gpt.valid_headers & MASK_PRIMARY) && params->verbose)) { + GptHeader *header; + char indent[64]; + + require(snprintf(indent, sizeof(indent), GPT_MORE) < sizeof(indent)); + header = (GptHeader*)drive->gpt.primary_header; + entries = (GptEntry*)drive->gpt.primary_entries; + HeaderDetails(header, entries, indent, params->numeric); + } + + GptHeader* primary_header = (GptHeader*)drive->gpt.primary_header; + printf(GPT_FMT, (uint64_t)primary_header->entries_lba, + (uint64_t)CalculateEntriesSectors(primary_header, + drive->gpt.sector_bytes), + drive->gpt.valid_entries & MASK_PRIMARY ? "" : "INVALID", + "Pri GPT table"); + + if (params->debug || + (drive->gpt.valid_entries & MASK_PRIMARY)) + EntriesDetails(drive, PRIMARY, params->numeric); + } + + /****************************** Secondary *************************/ + if (drive->gpt.ignored & MASK_SECONDARY) { + printf(GPT_FMT, + (uint64_t)(drive->gpt.gpt_drive_sectors - GPT_HEADER_SECTORS), + (uint64_t)GPT_HEADER_SECTORS, "IGNORED", "Sec GPT header"); + } else { + GptHeader* secondary_header = (GptHeader*)drive->gpt.secondary_header; + printf(GPT_FMT, (uint64_t)secondary_header->entries_lba, + (uint64_t)CalculateEntriesSectors(secondary_header, + drive->gpt.sector_bytes), + drive->gpt.valid_entries & MASK_SECONDARY ? "" : "INVALID", + "Sec GPT table"); + /* We show secondary table details if any of following is true. + * 1. in debug mode. + * 2. primary table is being ignored + * 3. only secondary is valid. + * 4. secondary is not identical to primary. + */ + if (params->debug || (drive->gpt.ignored & MASK_PRIMARY) || + ((drive->gpt.valid_entries & MASK_SECONDARY) && + (!(drive->gpt.valid_entries & MASK_PRIMARY) || + memcmp(drive->gpt.primary_entries, drive->gpt.secondary_entries, + secondary_header->number_of_entries * + secondary_header->size_of_entry)))) { + EntriesDetails(drive, SECONDARY, params->numeric); + } + + if (drive->gpt.valid_headers & MASK_SECONDARY) { + printf(GPT_FMT, + (uint64_t)(drive->gpt.gpt_drive_sectors - GPT_HEADER_SECTORS), + (uint64_t)GPT_HEADER_SECTORS, "", "Sec GPT header"); + } else { + printf(GPT_FMT, (uint64_t)GPT_PMBR_SECTORS, + (uint64_t)GPT_HEADER_SECTORS, "INVALID", "Sec GPT header"); + } + /* We show secondary header if any of following is true: + * 1. in debug mode. + * 2. primary table is being ignored + * 3. only secondary is valid. + * 4. secondary is not synonymous to primary and not ignored. + */ + if (params->debug || (drive->gpt.ignored & MASK_PRIMARY) || + ((drive->gpt.valid_headers & MASK_SECONDARY) && + (!(drive->gpt.valid_headers & MASK_PRIMARY) || + !IsSynonymous((GptHeader*)drive->gpt.primary_header, + (GptHeader*)drive->gpt.secondary_header)) && + params->verbose)) { + GptHeader *header; + char indent[64]; + + require(snprintf(indent, sizeof(indent), GPT_MORE) < sizeof(indent)); + header = (GptHeader*)drive->gpt.secondary_header; + entries = (GptEntry*)drive->gpt.secondary_entries; + HeaderDetails(header, entries, indent, params->numeric); + } + } + } + + CheckValid(drive); + + return CGPT_OK; +} + +int CgptShow(CgptShowParams *params) { + struct drive drive; + + if (params == NULL) + return CGPT_FAILED; + + if (CGPT_OK != DriveOpen(params->drive_name, &drive, O_RDONLY, + params->drive_size)) + return CGPT_FAILED; + + int ret = GptShow(&drive, params); + DriveClose(&drive, 0); + return ret; +} diff --git a/cgpt/cgpt_wrapper.c b/cgpt/cgpt_wrapper.c new file mode 100644 index 0000000..d26682d --- /dev/null +++ b/cgpt/cgpt_wrapper.c @@ -0,0 +1,200 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * This utility wraps around "cgpt" execution to work with NAND. If the target + * device is an MTD device, this utility will read the GPT structures from + * FMAP, invokes "cgpt" on that, and writes the result back to NOR flash. */ + +#include +#include +#include +#include +#include +#if !defined(__FreeBSD__) +#include +#endif +#include +#include +#include +#include +#include +#include +#if !defined(__FreeBSD__) +#include +#endif +#include +#include + +#include "2common.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "cgpt.h" +#include "cgpt_nor.h" +#include "file_keys.h" + +// Check if cmdline |argv| has "-D". "-D" signifies that GPT structs are stored +// off device, and hence we should not wrap around cgpt. +static bool has_dash_D(int argc, const char *const argv[]) { + int i; + // We go from 2, because the second arg is a cgpt command such as "create". + for (i = 2; i < argc; ++i) { + if (strcmp("-D", argv[i]) == 0) { + return true; + } + } + return false; +} + +// Check if |device_path| is an MTD device based on its major number being 90. +static bool is_mtd(const char *device_path) { + struct stat stat; + if (lstat(device_path, &stat) != 0) { + return false; + } + +#if !defined(__FreeBSD__) + if (major(stat.st_rdev) == MTD_CHAR_MAJOR) { + return true; + } +#endif + return false; +} + +// Return the element in |argv| that is an MTD device. +static const char *find_mtd_device(int argc, const char *const argv[]) { + int i; + for (i = 2; i < argc; ++i) { + if (is_mtd(argv[i])) { + return argv[i]; + } + } + return NULL; +} + +static int wrap_cgpt(int argc, + const char *const argv[], + const char *mtd_device) { + uint8_t original_hash[VB2_SHA1_DIGEST_SIZE]; + uint8_t modified_hash[VB2_SHA1_DIGEST_SIZE]; + int ret = 0; + + // Create a temp dir to work in. + ret++; + char temp_dir[] = "/tmp/cgpt_wrapper.XXXXXX"; + if (ReadNorFlash(temp_dir) != 0) { + return ret; + } + char rw_gpt_path[PATH_MAX]; + if (snprintf(rw_gpt_path, sizeof(rw_gpt_path), "%s/rw_gpt", temp_dir) < 0) { + goto cleanup; + } + if (VB2_SUCCESS != DigestFile(rw_gpt_path, VB2_HASH_SHA1, + original_hash, sizeof(original_hash))) { + Error("Cannot compute original GPT digest.\n"); + goto cleanup; + } + + // Obtain the MTD size. + ret++; + uint64_t drive_size = 0; + if (GetMtdSize(mtd_device, &drive_size) != 0) { + Error("Cannot get the size of %s.\n", mtd_device); + goto cleanup; + } + + // Launch cgpt on "rw_gpt" with -D size. + ret++; + const char** my_argv = calloc(argc + 2 + 1, sizeof(char *)); + if (my_argv == NULL) { + errno = ENOMEM; + goto cleanup; + } + memcpy(my_argv, argv, sizeof(char *) * argc); + char *real_cgpt; + if (asprintf(&real_cgpt, "%s.bin", argv[0]) == -1) { + free(my_argv); + goto cleanup; + } + my_argv[0] = real_cgpt; + + int i; + for (i = 2; i < argc; ++i) { + if (strcmp(my_argv[i], mtd_device) == 0) { + my_argv[i] = rw_gpt_path; + } + } + my_argv[argc] = "-D"; + char size[32]; + snprintf(size, sizeof(size), "%" PRIu64, drive_size); + my_argv[argc + 1] = size; + i = ForkExecV(NULL, my_argv); + free(real_cgpt); + free(my_argv); + if (i != 0) { + Error("Cannot exec cgpt to modify rw_gpt.\n"); + goto cleanup; + } + + // Write back "rw_gpt" to NOR flash in two chunks. + ret++; + if (VB2_SUCCESS == DigestFile(rw_gpt_path, VB2_HASH_SHA1, + modified_hash, sizeof(modified_hash))) { + if (memcmp(original_hash, modified_hash, VB2_SHA1_DIGEST_SIZE) != 0) { + ret = WriteNorFlash(temp_dir); + } else { + ret = 0; + } + } + +cleanup: + RemoveDir(temp_dir); + return ret; +} + +int main(int argc, const char *argv[]) { + char resolved_cgpt[PATH_MAX]; + pid_t pid = getpid(); + char exe_link[40]; + int retval = 0; + + if (argc < 1) { + return -1; + } + + const char *orig_argv0 = argv[0]; + + snprintf(exe_link, sizeof(exe_link), "/proc/%d/exe", pid); + memset(resolved_cgpt, 0, sizeof(resolved_cgpt)); + if (readlink(exe_link, resolved_cgpt, sizeof(resolved_cgpt) - 1) == -1) { + perror("readlink"); + return -1; + } + + argv[0] = resolved_cgpt; + + if (argc > 2 && !has_dash_D(argc, argv)) { + const char *mtd_device = find_mtd_device(argc, argv); + if (mtd_device) { + retval = wrap_cgpt(argc, argv, mtd_device); + goto cleanup; + } + } + + // Forward to cgpt as-is. Real cgpt has been renamed cgpt.bin. + char *real_cgpt; + if (asprintf(&real_cgpt, "%s.bin", argv[0]) == -1) { + retval = -1; + goto cleanup; + } + argv[0] = real_cgpt; + if (execv(argv[0], (char * const *)argv) == -1) { + err(-2, "execv(%s) failed", real_cgpt); + } + free(real_cgpt); + retval = -2; + +cleanup: + argv[0] = orig_argv0; + return retval; +} diff --git a/cgpt/cmd_add.c b/cgpt/cmd_add.c new file mode 100644 index 0000000..b229ef1 --- /dev/null +++ b/cgpt/cmd_add.c @@ -0,0 +1,158 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include + +#include "cgpt.h" +#include "vboot_host.h" + +extern const char* progname; + +static void Usage(void) +{ + printf("\nUsage: %s add [OPTIONS] DRIVE\n\n" + "Add, edit, or remove a partition entry.\n\n" + "Options:\n" + " -D NUM Size (in bytes) of the disk where partitions reside;\n" + " default 0, meaning partitions and GPT structs are\n" + " both on DRIVE\n" + " -i NUM Specify partition (default is next available)\n" + " -b NUM First block (a.k.a. start of partition)\n" + " -s NUM Size (in blocks)\n" + " -t GUID Partition Type GUID\n" + " -u GUID Partition Unique ID\n" + " -l LABEL Label\n" + " -S NUM set Successful flag (0|1)\n" + " -T NUM set Tries flag (0-15)\n" + " -P NUM set Priority flag (0-15)\n" + " -R NUM set Required flag (0|1)\n" + " -B NUM set Legacy Boot flag (0|1)\n" + " -A NUM set raw 16-bit attribute value (bits 48-63)\n" + "\n" + "Use the -i option to modify an existing partition.\n" + "The -b, -s, and -t options must be given for new partitions.\n" + "\n", progname); + PrintTypes(); +} + +int cmd_add(int argc, char *argv[]) { + + CgptAddParams params; + memset(¶ms, 0, sizeof(params)); + + int c; + int errorcnt = 0; + char *e = 0; + + opterr = 0; // quiet, you + while ((c=getopt(argc, argv, ":hi:b:s:t:u:l:S:T:P:R:B:A:D:")) != -1) + { + switch (c) + { + case 'D': + params.drive_size = strtoull(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + break; + case 'i': + params.partition = (uint32_t)strtoul(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + break; + case 'b': + params.set_begin = 1; + params.begin = strtoull(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + break; + case 's': + params.set_size = 1; + params.size = strtoull(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + break; + case 't': + params.set_type = 1; + if (CGPT_OK != SupportedType(optarg, ¶ms.type_guid) && + CGPT_OK != StrToGuid(optarg, ¶ms.type_guid)) { + Error("invalid argument to -%c: %s\n", c, optarg); + errorcnt++; + } + break; + case 'u': + params.set_unique = 1; + if (CGPT_OK != StrToGuid(optarg, ¶ms.unique_guid)) { + Error("invalid argument to -%c: %s\n", c, optarg); + errorcnt++; + } + break; + case 'l': + params.label = optarg; + break; + case 'S': + params.set_successful = 1; + params.successful = (uint32_t)strtoul(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + errorcnt += check_int_limit(c, params.successful, 0, 1); + break; + case 'T': + params.set_tries = 1; + params.tries = (uint32_t)strtoul(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + errorcnt += check_int_limit(c, params.tries, 0, 15); + break; + case 'P': + params.set_priority = 1; + params.priority = (uint32_t)strtoul(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + errorcnt += check_int_limit(c, params.priority, 0, 15); + break; + case 'R': + params.set_required = 1; + params.required = (uint32_t)strtoul(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + errorcnt += check_int_limit(c, params.required, 0, 1); + break; + case 'B': + params.set_legacy_boot = 1; + params.legacy_boot = (uint32_t)strtoul(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + errorcnt += check_int_limit(c, params.legacy_boot, 0, 1); + break; + case 'A': + params.set_raw = 1; + params.raw_value = strtoull(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + break; + + case 'h': + Usage(); + return CGPT_OK; + case '?': + Error("unrecognized option: -%c\n", optopt); + errorcnt++; + break; + case ':': + Error("missing argument to -%c\n", optopt); + errorcnt++; + break; + default: + errorcnt++; + break; + } + } + if (errorcnt) + { + Usage(); + return CGPT_FAILED; + } + + if (optind >= argc) + { + Error("missing drive argument\n"); + return CGPT_FAILED; + } + + params.drive_name = argv[optind]; + + return CgptAdd(¶ms); +} diff --git a/cgpt/cmd_boot.c b/cgpt/cmd_boot.c new file mode 100644 index 0000000..a638deb --- /dev/null +++ b/cgpt/cmd_boot.c @@ -0,0 +1,90 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include + +#include "cgpt.h" +#include "vboot_host.h" + +extern const char* progname; + +static void Usage(void) +{ + printf("\nUsage: %s boot [OPTIONS] DRIVE\n\n" + "Edit the PMBR sector for legacy BIOSes\n\n" + "Options:\n" + " -D NUM Size (in bytes) of the disk where partitions reside;\n" + " default 0, meaning partitions and GPT structs are\n" + " both on DRIVE\n" + " -i NUM Set bootable partition\n" + " -b FILE Install bootloader code in the PMBR\n" + " -p Create legacy PMBR partition table\n" + "\n" + "With no options, it will just print the PMBR boot guid\n" + "\n", progname); +} + + +int cmd_boot(int argc, char *argv[]) { + CgptBootParams params; + memset(¶ms, 0, sizeof(params)); + + + int c; + int errorcnt = 0; + char *e = 0; + + opterr = 0; // quiet, you + while ((c=getopt(argc, argv, ":hi:b:pD:")) != -1) + { + switch (c) + { + case 'D': + params.drive_size = strtoull(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + break; + case 'i': + params.partition = (uint32_t)strtoul(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + break; + case 'b': + params.bootfile = optarg; + break; + case 'p': + params.create_pmbr = 1; + break; + + case 'h': + Usage(); + return CGPT_OK; + case '?': + Error("unrecognized option: -%c\n", optopt); + errorcnt++; + break; + case ':': + Error("missing argument to -%c\n", optopt); + errorcnt++; + break; + default: + errorcnt++; + break; + } + } + if (errorcnt) + { + Usage(); + return CGPT_FAILED; + } + + if (optind >= argc) { + Error("missing drive argument\n"); + return CGPT_FAILED; + } + + params.drive_name = argv[optind]; + + return CgptBoot(¶ms); +} diff --git a/cgpt/cmd_create.c b/cgpt/cmd_create.c new file mode 100644 index 0000000..dfa8a1f --- /dev/null +++ b/cgpt/cmd_create.c @@ -0,0 +1,82 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include + +#include "cgpt.h" +#include "vboot_host.h" + +extern const char* progname; + +static void Usage(void) +{ + printf("\nUsage: %s create [OPTIONS] DRIVE\n\n" + "Create or reset an empty GPT.\n\n" + "Options:\n" + " -D NUM Size (in bytes) of the disk where partitions reside;\n" + " default 0, meaning partitions and GPT structs are\n" + " both on DRIVE\n" + " -z Zero the blocks of the GPT table and entries\n" + " -p NUM Size (in blocks) of the disk to pad between the\n" + " primary GPT header and its entries, default 0\n" + "\n", progname); +} + +int cmd_create(int argc, char *argv[]) { + CgptCreateParams params; + memset(¶ms, 0, sizeof(params)); + + int c; + int errorcnt = 0; + char *e = 0; + + opterr = 0; // quiet, you + while ((c=getopt(argc, argv, ":hzp:D:")) != -1) + { + switch (c) + { + case 'D': + params.drive_size = strtoull(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + break; + case 'z': + params.zap = 1; + break; + case 'p': + params.padding = strtoull(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + break; + case 'h': + Usage(); + return CGPT_OK; + case '?': + Error("unrecognized option: -%c\n", optopt); + errorcnt++; + break; + case ':': + Error("missing argument to -%c\n", optopt); + errorcnt++; + break; + default: + errorcnt++; + break; + } + } + if (errorcnt) + { + Usage(); + return CGPT_FAILED; + } + + if (optind >= argc) { + Usage(); + return CGPT_FAILED; + } + + params.drive_name = argv[optind]; + + return CgptCreate(¶ms); +} diff --git a/cgpt/cmd_edit.c b/cgpt/cmd_edit.c new file mode 100644 index 0000000..7a4cdf5 --- /dev/null +++ b/cgpt/cmd_edit.c @@ -0,0 +1,87 @@ +/* Copyright 2018 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include + +#include "cgpt.h" +#include "vboot_host.h" + +extern const char* progname; + +static void Usage(void) +{ + printf("\nUsage: %s edit [OPTIONS] DRIVE\n\n" + "Edit a drive's parameters.\n\n" + "Options:\n" + " -D NUM Size (in bytes) of the disk where partitions reside;\n" + " default 0, meaning partitions and GPT structs are\n" + " both on DRIVE\n" + " -u GUID Drive Unique ID\n" + "\n", progname); +} + +int cmd_edit(int argc, char *argv[]) { + + CgptEditParams params; + memset(¶ms, 0, sizeof(params)); + + int c; + int errorcnt = 0; + char *e = 0; + + opterr = 0; // quiet, you + while ((c=getopt(argc, argv, ":hu:D:")) != -1) + { + switch (c) + { + case 'D': + params.drive_size = strtoull(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + break; + case 'u': + params.set_unique = 1; + if (CGPT_OK != StrToGuid(optarg, ¶ms.unique_guid)) { + Error("invalid argument to -%c: %s\n", c, optarg); + errorcnt++; + } + break; + case 'h': + Usage(); + return CGPT_OK; + case '?': + Error("unrecognized option: -%c\n", optopt); + errorcnt++; + break; + case ':': + Error("missing argument to -%c\n", optopt); + errorcnt++; + break; + default: + errorcnt++; + break; + } + } + if (errorcnt) + { + Usage(); + return CGPT_FAILED; + } + + if (optind >= argc) + { + Error("missing drive argument\n"); + return CGPT_FAILED; + } + + params.drive_name = argv[optind]; + + if (!params.set_unique) + { + Error("no parameters were edited\n"); + return CGPT_FAILED; + } + + return CgptEdit(¶ms); +} diff --git a/cgpt/cmd_find.c b/cgpt/cmd_find.c new file mode 100644 index 0000000..fe04b09 --- /dev/null +++ b/cgpt/cmd_find.c @@ -0,0 +1,183 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include + +#include "cgpt.h" +#include "vboot_host.h" + +extern const char* progname; + +static void Usage(void) +{ + printf("\nUsage: %s find [OPTIONS] [DRIVE]\n\n" + "Find a partition by its UUID or label. With no specified DRIVE\n" + "it scans all physical drives.\n\n" + "Options:\n" + " -D NUM Size (in bytes) of the disk where partitions reside;\n" + " default 0, meaning partitions and GPT structs are\n" + " both on DRIVE\n" + " -t GUID Search for Partition Type GUID\n" + " -u GUID Search for Partition Unique ID\n" + " -l LABEL Search for Label\n" + " -v Be verbose in displaying matches (repeatable)\n" + " -n Numeric output only\n" + " -1 Fail if more than one match is found\n" + " -M FILE" + " Matching partition data must also contain FILE content\n" + " -O NUM" + " Byte offset into partition to match content (default 0)\n" + "\n", progname); + PrintTypes(); +} + +// read a file into a buffer, return buffer and update size +static uint8_t *ReadFile(const char *filename, uint64_t *size) { + FILE *f; + uint8_t *buf; + long pos; + + f = fopen(filename, "rb"); + if (!f) { + return NULL; + } + + fseek(f, 0, SEEK_END); + pos = ftell(f); + if (pos < 0) { + fclose(f); + return NULL; + } + *size = pos; + rewind(f); + + buf = malloc(*size); + if (!buf) { + fclose(f); + return NULL; + } + + if(1 != fread(buf, *size, 1, f)) { + fclose(f); + free(buf); + return NULL; + } + + fclose(f); + return buf; +} + +int cmd_find(int argc, char *argv[]) { + + CgptFindParams params; + memset(¶ms, 0, sizeof(params)); + + int i; + int errorcnt = 0; + char *e = 0; + int c; + + opterr = 0; // quiet, you + while ((c=getopt(argc, argv, ":hv1nt:u:l:M:O:D:")) != -1) + { + switch (c) + { + case 'D': + params.drive_size = strtoull(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + break; + case 'v': + params.verbose++; + break; + case 'n': + params.numeric = 1; + break; + case '1': + params.oneonly = 1; + break; + case 'l': + params.set_label = 1; + params.label = optarg; + break; + case 't': + params.set_type = 1; + if (CGPT_OK != SupportedType(optarg, ¶ms.type_guid) && + CGPT_OK != StrToGuid(optarg, ¶ms.type_guid)) { + Error("invalid argument to -%c: %s\n", c, optarg); + errorcnt++; + } + break; + case 'u': + params.set_unique = 1; + if (CGPT_OK != StrToGuid(optarg, ¶ms.unique_guid)) { + Error("invalid argument to -%c: %s\n", c, optarg); + errorcnt++; + } + break; + case 'M': + params.matchbuf = ReadFile(optarg, ¶ms.matchlen); + if (!params.matchbuf || !params.matchlen) { + Error("Unable to read from %s\n", optarg); + errorcnt++; + } + // Go ahead and allocate space for the comparison too + params.comparebuf = (uint8_t *)malloc(params.matchlen); + if (!params.comparebuf) { + Error("Unable to allocate %" PRIu64 "bytes for comparison buffer\n", + params.matchlen); + errorcnt++; + } + break; + case 'O': + params.matchoffset = strtoull(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + break; + + case 'h': + Usage(); + return CGPT_OK; + case '?': + Error("unrecognized option: -%c\n", optopt); + errorcnt++; + break; + case ':': + Error("missing argument to -%c\n", optopt); + errorcnt++; + break; + default: + errorcnt++; + break; + } + } + if (!params.set_unique && !params.set_type && !params.set_label) { + Error("You must specify at least one of -t, -u, or -l\n"); + errorcnt++; + } + if (errorcnt) + { + Usage(); + return CGPT_FAILED; + } + + if (optind < argc) { + for (i=optind; i +#include + +#include "cgpt.h" +#include "vboot_host.h" + +extern const char* progname; + +static void Usage(void) +{ + printf("\nUsage: %s legacy [OPTIONS] DRIVE\n\n" + "Switch GPT header signature to \"CHROMEOS\".\n\n" + "Options:\n" + " -D NUM Size (in bytes) of the disk where partitions reside;\n" + " default 0, meaning partitions and GPT structs are\n" + " both on DRIVE\n" + " -e Switch GPT header signature back to \"EFI PART\"\n" + " -p Switch primary GPT header signature to \"IGNOREME\"\n" + "\n", progname); +} + +int cmd_legacy(int argc, char *argv[]) { + CgptLegacyParams params; + memset(¶ms, 0, sizeof(params)); + + int c; + char* e = 0; + int errorcnt = 0; + + opterr = 0; // quiet, you + while ((c=getopt(argc, argv, ":hepD:")) != -1) + { + switch (c) + { + case 'D': + params.drive_size = strtoull(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + break; + case 'e': + if (params.mode) { + Error("Incompatible flags, pick either -e or -p\n"); + errorcnt++; + } + params.mode = CGPT_LEGACY_MODE_EFIPART; + break; + case 'p': + if (params.mode) { + Error("Incompatible flags, pick either -e or -p\n"); + errorcnt++; + } + params.mode = CGPT_LEGACY_MODE_IGNORE_PRIMARY; + break; + case 'h': + Usage(); + return CGPT_OK; + case '?': + Error("unrecognized option: -%c\n", optopt); + errorcnt++; + break; + case ':': + Error("missing argument to -%c\n", optopt); + errorcnt++; + break; + default: + errorcnt++; + break; + } + } + if (errorcnt) + { + Usage(); + return CGPT_FAILED; + } + + if (optind >= argc) { + Usage(); + return CGPT_FAILED; + } + + params.drive_name = argv[optind]; + + return CgptLegacy(¶ms); +} diff --git a/cgpt/cmd_prioritize.c b/cgpt/cmd_prioritize.c new file mode 100644 index 0000000..afd257f --- /dev/null +++ b/cgpt/cmd_prioritize.c @@ -0,0 +1,107 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include +#include + +#include "cgpt.h" +#include "vboot_host.h" + +extern const char* progname; + +static void Usage(void) +{ + printf("\nUsage: %s prioritize [OPTIONS] DRIVE\n\n" + "Reorder the priority of all active ChromeOS Kernel partitions.\n\n" + "Options:\n" + " -D NUM Size (in bytes) of the disk where partitions reside;\n" + " default 0, meaning partitions and GPT structs are\n" + " both on DRIVE\n" + " -P NUM Highest priority to use in the new ordering. The\n" + " other partitions will be ranked in decreasing\n" + " priority while preserving their original order.\n" + " If necessary the lowest ranks will be coalesced.\n" + " No active kernels will be lowered to priority 0.\n" + " -i NUM Specify the partition to make the highest in the new\n" + " order.\n" + " -f Friends of the given partition (those with the same\n" + " starting priority) are also updated to the new\n" + " highest priority.\n" + "\n" + "With no options this will set the lowest active kernel to\n" + "priority 1 while maintaining the original order.\n" + "\n", progname); +} + +int cmd_prioritize(int argc, char *argv[]) { + CgptPrioritizeParams params; + memset(¶ms, 0, sizeof(params)); + + int c; + int errorcnt = 0; + char *e = 0; + + opterr = 0; // quiet, you + while ((c=getopt(argc, argv, ":hi:fP:D:")) != -1) + { + switch (c) + { + case 'D': + params.drive_size = strtoull(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + break; + case 'i': + params.set_partition = (uint32_t)strtoul(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + break; + case 'f': + params.set_friends = 1; + break; + case 'P': + params.max_priority = (int)strtol(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + errorcnt += check_int_limit(c, params.max_priority, 1, 15); + break; + + case 'h': + Usage(); + return CGPT_OK; + case '?': + Error("unrecognized option: -%c\n", optopt); + errorcnt++; + break; + case ':': + Error("missing argument to -%c\n", optopt); + errorcnt++; + break; + default: + errorcnt++; + break; + } + } + if (errorcnt) + { + Usage(); + return CGPT_FAILED; + } + + if (params.set_friends && !params.set_partition) { + Error("the -f option is only useful with the -i option\n"); + Usage(); + return CGPT_FAILED; + } + + if (optind >= argc) { + Error("missing drive argument\n"); + return CGPT_FAILED; + } + + params.drive_name = argv[optind]; + + return CgptPrioritize(¶ms); +} diff --git a/cgpt/cmd_repair.c b/cgpt/cmd_repair.c new file mode 100644 index 0000000..7e4012e --- /dev/null +++ b/cgpt/cmd_repair.c @@ -0,0 +1,72 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include + +#include "cgpt.h" +#include "vboot_host.h" + +extern const char* progname; + +static void Usage(void) +{ + printf("\nUsage: %s repair [OPTIONS] DRIVE\n\n" + "Repair damaged GPT headers and tables.\n\n" + "Options:\n" + " -D NUM Size (in bytes) of the disk where partitions reside;\n" + " default 0, meaning partitions and GPT structs are\n" + " both on DRIVE\n" + " -v Verbose\n" + "\n", progname); +} + +int cmd_repair(int argc, char *argv[]) { + CgptRepairParams params; + memset(¶ms, 0, sizeof(params)); + + int c; + char* e = 0; + int errorcnt = 0; + + opterr = 0; // quiet, you + while ((c=getopt(argc, argv, ":hvD:")) != -1) + { + switch (c) + { + case 'D': + params.drive_size = strtoull(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + break; + case 'v': + params.verbose++; + break; + + case 'h': + Usage(); + return CGPT_OK; + case '?': + Error("unrecognized option: -%c\n", optopt); + errorcnt++; + break; + case ':': + Error("missing argument to -%c\n", optopt); + errorcnt++; + break; + default: + errorcnt++; + break; + } + } + if (errorcnt) + { + Usage(); + return CGPT_FAILED; + } + + params.drive_name = argv[optind]; + + return CgptRepair(¶ms); +} diff --git a/cgpt/cmd_show.c b/cgpt/cmd_show.c new file mode 100644 index 0000000..ba19315 --- /dev/null +++ b/cgpt/cmd_show.c @@ -0,0 +1,140 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#define __STDC_FORMAT_MACROS + +#include +#include +#include + +#include "cgpt.h" +#include "vboot_host.h" + +extern const char* progname; + +static void Usage(void) +{ + printf("\nUsage: %s show [OPTIONS] DRIVE\n\n" + "Display the GPT table.\n\n" + "Units are blocks by default.\n\n" + "Options:\n" + " -D NUM Size (in bytes) of the disk where partitions reside;\n" + " default 0, meaning partitions and GPT structs are\n" + " both on DRIVE\n" + " -n Numeric output only\n" + " -v Verbose output\n" + " -q Quick output\n" + " -i NUM Show specified partition only\n" + " -d Debug output (including invalid headers)\n" + "\n" + "When using -i, specific fields may be displayed using one of:\n" + " -b first block (a.k.a. start of partition)\n" + " -s partition size (in blocks)\n" + " -t type guid\n" + " -u unique guid\n" + " -l label\n" + " -S Successful flag\n" + " -T Tries flag\n" + " -P Priority flag\n" + " -R Required flag\n" + " -B Legacy Boot flag\n" + " -A raw 16-bit attribute value (bits 48-63)\n" + "\n", progname); +} + +int cmd_show(int argc, char *argv[]) { + CgptShowParams params; + memset(¶ms, 0, sizeof(params)); + + int c; + int errorcnt = 0; + char *e = 0; + + opterr = 0; // quiet, you + while ((c=getopt(argc, argv, ":hnvqi:bstulSTPRBAdD:")) != -1) + { + switch (c) + { + case 'D': + params.drive_size = strtoull(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + break; + case 'n': + params.numeric = 1; + break; + case 'v': + params.verbose = 1; + break; + case 'q': + params.quick = 1; + break; + case 'i': + params.partition = (uint32_t)strtoul(optarg, &e, 0); + errorcnt += check_int_parse(c, e); + if (params.partition <= 0) { + Error("-i requires a number between 1 and 128 (inclusive)\n"); + errorcnt++; + } + break; + case 'b': + case 's': + case 't': + case 'u': + case 'l': + case 'S': + case 'T': + case 'P': + case 'R': + case 'B': + case 'A': + if (params.single_item) { + Error("-%c already specified; rejecting additional -%c\n", + params.single_item, c); + Error("Only a single item may be displayed at a time\n"); + errorcnt++; + } + params.single_item = c; + break; + + case 'd': + params.debug = 1; + break; + + case 'h': + Usage(); + return CGPT_OK; + case '?': + Error("unrecognized option: -%c\n", optopt); + errorcnt++; + break; + case ':': + Error("missing argument to -%c\n", optopt); + errorcnt++; + break; + default: + errorcnt++; + break; + } + } + if (!params.partition && params.single_item) { + Error("-i required when displaying a single item\n"); + errorcnt++; + } + if (errorcnt) + { + Usage(); + return CGPT_FAILED; + } + + if (optind >= argc) { + Error("missing drive argument\n"); + Usage(); + return CGPT_FAILED; + } + + params.drive_name = argv[optind]; + + return CgptShow(¶ms); +} diff --git a/emerge_test.sh b/emerge_test.sh new file mode 100755 index 0000000..99c33ec --- /dev/null +++ b/emerge_test.sh @@ -0,0 +1,60 @@ +#!/bin/sh +# Copyright 2014 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Tests emerging all the ebuilds that use vboot_reference either as an +# ebuild dependency or by checking out the code and compiling it in a +# different ebuild. This is meant to be run from the chroot as part of testing +# a new change in vboot_reference. + +# Required ebuilds: +TEST_EBUILDS=" + sys-boot/chromeos-bootimage + sys-boot/chromeos-u-boot + sys-boot/coreboot + sys-boot/depthcharge + chromeos-base/chromeos-cryptohome + chromeos-base/chromeos-ec + chromeos-base/chromeos-installer + chromeos-base/chromeos-initramfs + chromeos-base/chromeos-login + chromeos-base/update_engine + chromeos-base/vboot_reference + chromeos-base/verity +" + +set -e + +# Check running inside the chroot. +if [ ! -e /etc/cros_chroot_version ]; then + echo "You must run this inside the chroot." >&2 + exit 1 +fi + +# Detect the target board. +if [ "x${BOARD}" == "x" ]; then + if [ -e ~/trunk/src/scripts/.default_board ]; then + BOARD="`cat ~/trunk/src/scripts/.default_board`" + else + echo "You must pass BOARD environment variable or set a default board." >&2 + exit 1 + fi +fi + +VBOOT_REF_DIR="$(dirname "$0")" +echo "Running tests for board '${BOARD}' from ${VBOOT_REF_DIR}" + +cd "${VBOOT_REF_DIR}" + +echo "Running make runtests..." +make runtests -j32 + +echo "Removing build artifacts." +rm -rf build build-main + +echo "Running emerge tests (runs cros_workon start)." +# Ignore errors about already working on those repos. +cros_workon-${BOARD} start ${TEST_EBUILDS} || true + +emerge-${BOARD} ${TEST_EBUILDS} diff --git a/firmware/2lib/2api.c b/firmware/2lib/2api.c new file mode 100644 index 0000000..c041d8a --- /dev/null +++ b/firmware/2lib/2api.c @@ -0,0 +1,372 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Externally-callable APIs + * (Firmware portion) + */ + +#include "2api.h" +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2rsa.h" +#include "2secdata.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "2tpm_bootmode.h" + +vb2_error_t vb2api_fw_phase1(struct vb2_context *ctx) +{ + vb2_error_t rv; + struct vb2_shared_data *sd = vb2_get_sd(ctx); + + /* Initialize NV context */ + vb2_nv_init(ctx); + + /* + * Handle caller-requested reboot due to secdata. Do this before we + * even look at secdata. If we fail because of a reboot loop we'll be + * the first failure so will get to set the recovery reason. + */ + if (!(ctx->flags & VB2_CONTEXT_SECDATA_WANTS_REBOOT)) { + /* No reboot requested */ + vb2_nv_set(ctx, VB2_NV_TPM_REQUESTED_REBOOT, 0); + } else if (vb2_nv_get(ctx, VB2_NV_TPM_REQUESTED_REBOOT)) { + /* + * Reboot requested... again. Fool me once, shame on you. + * Fool me twice, shame on me. Fail into recovery to avoid + * a reboot loop. + */ + vb2api_fail(ctx, VB2_RECOVERY_RO_TPM_REBOOT, 0); + } else { + /* Reboot requested for the first time */ + vb2_nv_set(ctx, VB2_NV_TPM_REQUESTED_REBOOT, 1); + return VB2_ERROR_API_PHASE1_SECDATA_REBOOT; + } + + /* Initialize firmware & kernel secure data */ + rv = vb2_secdata_firmware_init(ctx); + if (rv) + vb2api_fail(ctx, VB2_RECOVERY_SECDATA_FIRMWARE_INIT, rv); + + rv = vb2_secdata_kernel_init(ctx); + if (rv) + vb2api_fail(ctx, VB2_RECOVERY_SECDATA_KERNEL_INIT, rv); + + /* Load and parse the GBB header */ + rv = vb2_fw_init_gbb(ctx); + if (rv) + vb2api_fail(ctx, VB2_RECOVERY_GBB_HEADER, rv); + + /* Check for dev switch */ + rv = vb2_check_dev_switch(ctx); + if (rv) + vb2api_fail(ctx, VB2_RECOVERY_DEV_SWITCH, rv); + + /* + * Check for recovery. Note that this function returns void, since any + * errors result in requesting recovery. That's also why we don't + * return error from failures in the preceding steps; those failures + * simply cause us to detect recovery mode here. + */ + vb2_check_recovery(ctx); + + /* + * Check for possible reasons to ask the firmware to make display + * available. VB2_CONTEXT_RECOVERY_MODE may have been set above by + * vb2_check_recovery. VB2_SD_FLAG_DEV_MODE_ENABLED may have been set + * above by vb2_check_dev_switch. VB2_NV_DIAG_REQUEST may have been + * set during the last boot in recovery mode. + */ + if (!(ctx->flags & VB2_CONTEXT_DISPLAY_INIT) && + (vb2_nv_get(ctx, VB2_NV_DISPLAY_REQUEST) || + sd->flags & VB2_SD_FLAG_DEV_MODE_ENABLED || + ctx->flags & VB2_CONTEXT_RECOVERY_MODE || + vb2_nv_get(ctx, VB2_NV_DIAG_REQUEST))) + ctx->flags |= VB2_CONTEXT_DISPLAY_INIT; + /* Mark display as available for downstream vboot and vboot callers. */ + if (ctx->flags & VB2_CONTEXT_DISPLAY_INIT) + sd->flags |= VB2_SD_FLAG_DISPLAY_AVAILABLE; + + /* Decide the boot mode */ + vb2_set_boot_mode(ctx); + + /* Return error if recovery is needed */ + if (ctx->flags & VB2_CONTEXT_RECOVERY_MODE) { + /* Always clear RAM when entering recovery mode */ + ctx->flags |= VB2_CONTEXT_CLEAR_RAM; + return VB2_ERROR_API_PHASE1_RECOVERY; + } + + return VB2_SUCCESS; +} + +vb2_error_t vb2api_fw_phase2(struct vb2_context *ctx) +{ + /* + * Use the slot from the last boot if this is a resume. Do not set + * VB2_SD_STATUS_CHOSE_SLOT so the try counter is not decremented on + * failure as we are explicitly not attempting to boot from a new slot. + */ + if (ctx->flags & VB2_CONTEXT_S3_RESUME) { + struct vb2_shared_data *sd = vb2_get_sd(ctx); + + /* Set the current slot to the last booted slot */ + sd->fw_slot = vb2_nv_get(ctx, VB2_NV_FW_TRIED); + + /* Set context flag if we're using slot B */ + if (sd->fw_slot) + ctx->flags |= VB2_CONTEXT_FW_SLOT_B; + + return VB2_SUCCESS; + } + + /* Always clear RAM when entering developer mode */ + if (ctx->flags & VB2_CONTEXT_DEVELOPER_MODE) + ctx->flags |= VB2_CONTEXT_CLEAR_RAM; + + /* Check for explicit request to clear TPM */ + VB2_TRY(vb2_check_tpm_clear(ctx), ctx, VB2_RECOVERY_TPM_CLEAR_OWNER); + + /* Decide which firmware slot to try this boot */ + VB2_TRY(vb2_select_fw_slot(ctx), ctx, VB2_RECOVERY_FW_SLOT); + + return VB2_SUCCESS; +} + +vb2_error_t vb2api_extend_hash(struct vb2_context *ctx, + const void *buf, + uint32_t size) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + struct vb2_digest_context *dc = (struct vb2_digest_context *) + vb2_member_of(sd, sd->hash_offset); + + /* Must have initialized hash digest work area */ + if (!sd->hash_size) + return VB2_ERROR_API_EXTEND_HASH_WORKBUF; + + /* Don't extend past the data we expect to hash */ + if (!size || size > sd->hash_remaining_size) + return VB2_ERROR_API_EXTEND_HASH_SIZE; + + sd->hash_remaining_size -= size; + + if (dc->using_hwcrypto) + return vb2ex_hwcrypto_digest_extend(buf, size); + else + return vb2_digest_extend(dc, buf, size); +} + +vb2_error_t vb2api_get_pcr_digest(struct vb2_context *ctx, + enum vb2_pcr_digest which_digest, + uint8_t *dest, + uint32_t *dest_size) +{ + const uint8_t *digest; + uint32_t digest_size; + + switch (which_digest) { + case BOOT_MODE_PCR: + digest = vb2_get_boot_state_digest(ctx); + digest_size = VB2_SHA1_DIGEST_SIZE; + break; + case HWID_DIGEST_PCR: + digest = vb2_get_gbb(ctx)->hwid_digest; + digest_size = VB2_GBB_HWID_DIGEST_SIZE; + break; + default: + return VB2_ERROR_API_PCR_DIGEST; + } + + if (digest == NULL || *dest_size < digest_size) + return VB2_ERROR_API_PCR_DIGEST_BUF; + + memcpy(dest, digest, digest_size); + if (digest_size < *dest_size) + memset(dest + digest_size, 0, *dest_size - digest_size); + + *dest_size = digest_size; + + return VB2_SUCCESS; +} + +vb2_error_t vb2api_fw_phase3(struct vb2_context *ctx) +{ + /* Verify firmware keyblock */ + VB2_TRY(vb2_load_fw_keyblock(ctx), ctx, VB2_RECOVERY_RO_INVALID_RW); + + /* Verify firmware preamble */ + VB2_TRY(vb2_load_fw_preamble(ctx), ctx, VB2_RECOVERY_RO_INVALID_RW); + + return VB2_SUCCESS; +} + +vb2_error_t vb2api_init_hash(struct vb2_context *ctx, uint32_t tag) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + const struct vb2_fw_preamble *pre; + struct vb2_digest_context *dc; + struct vb2_public_key key; + struct vb2_workbuf wb; + + vb2_workbuf_from_ctx(ctx, &wb); + + if (tag == VB2_HASH_TAG_INVALID) + return VB2_ERROR_API_INIT_HASH_TAG; + + /* Get preamble pointer */ + if (!sd->preamble_size) + return VB2_ERROR_API_INIT_HASH_PREAMBLE; + pre = (const struct vb2_fw_preamble *) + vb2_member_of(sd, sd->preamble_offset); + + /* For now, we only support the firmware body tag */ + if (tag != VB2_HASH_TAG_FW_BODY) + return VB2_ERROR_API_INIT_HASH_TAG; + + /* Allocate workbuf space for the hash */ + if (sd->hash_size) { + dc = (struct vb2_digest_context *) + vb2_member_of(sd, sd->hash_offset); + } else { + uint32_t dig_size = sizeof(*dc); + + dc = vb2_workbuf_alloc(&wb, dig_size); + if (!dc) + return VB2_ERROR_API_INIT_HASH_WORKBUF; + + sd->hash_offset = vb2_offset_of(sd, dc); + sd->hash_size = dig_size; + vb2_set_workbuf_used(ctx, sd->hash_offset + dig_size); + } + + /* + * Work buffer now contains: + * - vb2_shared_data + * - packed firmware data key + * - firmware preamble + * - hash data + */ + + /* + * Unpack the firmware data key to see which hashing algorithm we + * should use. + * + * TODO: really, the firmware body should be hashed, and not signed, + * because the signature we're checking is already signed as part of + * the firmware preamble. But until we can change the signing scripts, + * we're stuck with a signature here instead of a hash. + */ + if (!sd->data_key_size) + return VB2_ERROR_API_INIT_HASH_DATA_KEY; + + VB2_TRY(vb2_unpack_key_buffer(&key, + vb2_member_of(sd, sd->data_key_offset), + sd->data_key_size)); + + sd->hash_tag = tag; + sd->hash_remaining_size = pre->body_signature.data_size; + + if (vb2_hwcrypto_allowed(ctx)) { + vb2_error_t rv = vb2ex_hwcrypto_digest_init( + key.hash_alg, pre->body_signature.data_size); + if (!rv) { + VB2_DEBUG("Using HW crypto engine for hash_alg %d\n", + key.hash_alg); + dc->hash_alg = key.hash_alg; + dc->using_hwcrypto = 1; + return VB2_SUCCESS; + } + if (rv != VB2_ERROR_EX_HWCRYPTO_UNSUPPORTED) + return rv; + VB2_DEBUG("HW crypto for hash_alg %d not supported, using SW\n", + key.hash_alg); + } else { + VB2_DEBUG("HW crypto forbidden by TPM flag, using SW\n"); + } + + return vb2_digest_init(dc, key.hash_alg); +} + +vb2_error_t vb2api_check_hash_get_digest(struct vb2_context *ctx, + void *digest_out, + uint32_t digest_out_size) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + struct vb2_digest_context *dc = (struct vb2_digest_context *) + vb2_member_of(sd, sd->hash_offset); + struct vb2_workbuf wb; + + uint8_t *digest; + uint32_t digest_size = vb2_digest_size(dc->hash_alg); + + struct vb2_fw_preamble *pre; + struct vb2_public_key key; + + vb2_workbuf_from_ctx(ctx, &wb); + + /* Get preamble pointer */ + if (!sd->preamble_size) + return VB2_ERROR_API_CHECK_HASH_PREAMBLE; + pre = vb2_member_of(sd, sd->preamble_offset); + + /* Must have initialized hash digest work area */ + if (!sd->hash_size) + return VB2_ERROR_API_CHECK_HASH_WORKBUF; + + /* Should have hashed the right amount of data */ + if (sd->hash_remaining_size) + return VB2_ERROR_API_CHECK_HASH_SIZE; + + /* Allocate the digest */ + digest = vb2_workbuf_alloc(&wb, digest_size); + if (!digest) + return VB2_ERROR_API_CHECK_HASH_WORKBUF_DIGEST; + + /* Finalize the digest */ + if (dc->using_hwcrypto) + VB2_TRY(vb2ex_hwcrypto_digest_finalize(digest, digest_size)); + else + VB2_TRY(vb2_digest_finalize(dc, digest, digest_size)); + + /* The code below is specific to the body signature */ + if (sd->hash_tag != VB2_HASH_TAG_FW_BODY) + return VB2_ERROR_API_CHECK_HASH_TAG; + + /* + * The body signature is currently a *signature* of the body data, not + * just its hash. So we need to verify the signature. + */ + + /* Unpack the data key */ + if (!sd->data_key_size) + return VB2_ERROR_API_CHECK_HASH_DATA_KEY; + + VB2_TRY(vb2_unpack_key_buffer(&key, + vb2_member_of(sd, sd->data_key_offset), + sd->data_key_size)); + + key.allow_hwcrypto = vb2_hwcrypto_allowed(ctx); + + /* + * Check digest vs. signature. Note that this destroys the signature. + * That's ok, because we only check each signature once per boot. + */ + VB2_TRY(vb2_verify_digest(&key, &pre->body_signature, digest, &wb), + ctx, VB2_RECOVERY_FW_BODY); + + if (digest_out != NULL) { + if (digest_out_size < digest_size) + return VB2_ERROR_API_CHECK_DIGEST_SIZE; + memcpy(digest_out, digest, digest_size); + } + + return VB2_SUCCESS; +} + +int vb2api_check_hash(struct vb2_context *ctx) +{ + return vb2api_check_hash_get_digest(ctx, NULL, 0); +} diff --git a/firmware/2lib/2auxfw_sync.c b/firmware/2lib/2auxfw_sync.c new file mode 100644 index 0000000..eaea1d4 --- /dev/null +++ b/firmware/2lib/2auxfw_sync.c @@ -0,0 +1,70 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Auxiliary firmware (auxfw) sync routines for vboot. + */ + +#include "2api.h" +#include "2common.h" +#include "2misc.h" + +/** + * Determine if we are allowed to update auxfw. + * + * @param ctx Vboot2 context + * @return boolean (true iff we can update auxfw) + */ +static int auxfw_sync_allowed(struct vb2_context *ctx) +{ + struct vb2_gbb_header *gbb = vb2_get_gbb(ctx); + + /* Reasons not to do sync at all */ + if (gbb->flags & VB2_GBB_FLAG_DISABLE_AUXFW_SOFTWARE_SYNC) + return 0; + if (ctx->flags & VB2_CONTEXT_RECOVERY_MODE) + return 0; + return 1; +} + +/** + * Decides if auxfw sync is allowed to be performed. + * + * If sync is allowed, invokes the external callback, + * vb2ex_auxfw_check() to allow the client to decide on the auxfw + * update severity. + * + * @param ctx Vboot2 context + * @return VB2_SUCCESS, or non-zero error code. + */ +static vb2_error_t auxfw_sync_check_update(struct vb2_context *ctx, + enum vb2_auxfw_update_severity *severity) +{ + if (!auxfw_sync_allowed(ctx)) { + *severity = VB2_AUXFW_NO_UPDATE; + return VB2_SUCCESS; + } + + return vb2ex_auxfw_check(severity); +} + +vb2_error_t vb2api_auxfw_sync(struct vb2_context *ctx) +{ + enum vb2_auxfw_update_severity fw_update = VB2_AUXFW_NO_UPDATE; + + /* Check for update severity */ + VB2_TRY(auxfw_sync_check_update(ctx, &fw_update)); + + if (fw_update > VB2_AUXFW_NO_UPDATE) { + VB2_DEBUG("Updating auxfw\n"); + VB2_TRY(vb2ex_auxfw_update(), ctx, VB2_RECOVERY_AUXFW_UPDATE); + /* + * auxfw update is applied successfully. Request EC reboot to + * RO, so that the chips that had FW update get reset to a + * clean state. + */ + return VB2_REQUEST_REBOOT_EC_TO_RO; + } + + return vb2ex_auxfw_finalize(ctx); +} diff --git a/firmware/2lib/2common.c b/firmware/2lib/2common.c new file mode 100644 index 0000000..fa0585e --- /dev/null +++ b/firmware/2lib/2common.c @@ -0,0 +1,231 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Common functions between firmware and kernel verified boot. + * (Firmware portion) + */ + +#include "2common.h" +#include "2rsa.h" + +vb2_error_t vb2_safe_memcmp(const void *s1, const void *s2, size_t size) +{ + const unsigned char *us1 = s1; + const unsigned char *us2 = s2; + int result = 0; + + if (0 == size) + return 0; + + /* + * Code snippet without data-dependent branch due to Nate Lawson + * (nate@root.org) of Root Labs. + */ + while (size--) + result |= *us1++ ^ *us2++; + + return result != 0; +} + +vb2_error_t vb2_align(uint8_t **ptr, uint32_t *size, uint32_t align, + uint32_t want_size) +{ + uintptr_t p = (uintptr_t)*ptr; + uintptr_t offs = p & (align - 1); + + if (offs) { + offs = align - offs; + + if (*size < offs) + return VB2_ERROR_ALIGN_BIGGER_THAN_SIZE; + + *ptr += offs; + *size -= offs; + } + + if (*size < want_size) + return VB2_ERROR_ALIGN_SIZE; + + return VB2_SUCCESS; +} + +void vb2_workbuf_init(struct vb2_workbuf *wb, uint8_t *buf, uint32_t size) +{ + wb->buf = buf; + wb->size = size; + + /* Align the buffer so allocations will be aligned */ + if (vb2_align(&wb->buf, &wb->size, VB2_WORKBUF_ALIGN, 0)) + wb->size = 0; +} + +void *vb2_workbuf_alloc(struct vb2_workbuf *wb, uint32_t size) +{ + uint8_t *ptr = wb->buf; + + /* Round up size to work buffer alignment */ + size = vb2_wb_round_up(size); + + if (size > wb->size) + return NULL; + + wb->buf += size; + wb->size -= size; + + return ptr; +} + +void *vb2_workbuf_realloc(struct vb2_workbuf *wb, uint32_t oldsize, + uint32_t newsize) +{ + /* + * Just free and allocate to update the size. No need to move/copy + * memory, since the new pointer is guaranteed to be the same as the + * old one. The new allocation can fail, if the new size is too big. + */ + vb2_workbuf_free(wb, oldsize); + return vb2_workbuf_alloc(wb, newsize); +} + +void vb2_workbuf_free(struct vb2_workbuf *wb, uint32_t size) +{ + /* Round up size to work buffer alignment */ + size = vb2_wb_round_up(size); + + wb->buf -= size; + wb->size += size; +} + +ptrdiff_t vb2_offset_of(const void *base, const void *ptr) +{ + return (uintptr_t)ptr - (uintptr_t)base; +} + +void *vb2_member_of(void *parent, ptrdiff_t offset) +{ + /* TODO(kitching): vb2_assert(parent && offset) */ + return parent + offset; +} + +vb2_error_t vb2_verify_member_inside(const void *parent, size_t parent_size, + const void *member, size_t member_size, + ptrdiff_t member_data_offset, + size_t member_data_size) +{ + const uintptr_t parent_end = (uintptr_t)parent + parent_size; + const ptrdiff_t member_offs = vb2_offset_of(parent, member); + const ptrdiff_t member_end_offs = member_offs + member_size; + const ptrdiff_t data_offs = member_offs + member_data_offset; + const ptrdiff_t data_end_offs = data_offs + member_data_size; + + /* Make sure parent doesn't wrap */ + if (parent_end < (uintptr_t)parent) + return VB2_ERROR_INSIDE_PARENT_WRAPS; + + /* + * Make sure the member is fully contained in the parent and doesn't + * wrap. Use >, not >=, since member_size = 0 is possible. + */ + if (member_end_offs < member_offs) + return VB2_ERROR_INSIDE_MEMBER_WRAPS; + if (member_offs < 0 || member_offs > parent_size || + member_end_offs > parent_size) + return VB2_ERROR_INSIDE_MEMBER_OUTSIDE; + + /* Make sure the member data is after the member */ + if (member_data_size > 0 && data_offs < member_end_offs) + return VB2_ERROR_INSIDE_DATA_OVERLAP; + + /* Make sure parent fully contains member data, if any */ + if (data_end_offs < data_offs) + return VB2_ERROR_INSIDE_DATA_WRAPS; + if (data_offs < 0 || data_offs > parent_size || + data_end_offs > parent_size) + return VB2_ERROR_INSIDE_DATA_OUTSIDE; + + return VB2_SUCCESS; +} + +vb2_error_t vb2_verify_digest(const struct vb2_public_key *key, + struct vb2_signature *sig, const uint8_t *digest, + const struct vb2_workbuf *wb) +{ + /* A signature is destroyed in the process of being verified. */ + uint8_t *sig_data = vb2_signature_data_mutable(sig); + + if (sig->sig_size != vb2_rsa_sig_size(key->sig_alg)) { + VB2_DEBUG("Wrong data signature size for algorithm, " + "sig_size=%d, expected %d for algorithm %d.\n", + sig->sig_size, vb2_rsa_sig_size(key->sig_alg), + key->sig_alg); + return VB2_ERROR_VDATA_SIG_SIZE; + } + + if (key->allow_hwcrypto) { + vb2_error_t rv = + vb2ex_hwcrypto_rsa_verify_digest(key, sig_data, digest); + + if (rv != VB2_ERROR_EX_HWCRYPTO_UNSUPPORTED) { + VB2_DEBUG("Using HW RSA engine for sig_alg %d %s\n", + key->sig_alg, + rv ? "failed" : "succeeded"); + return rv; + } + + VB2_DEBUG("HW RSA for sig_alg %d not supported, using SW\n", + key->sig_alg); + } else { + VB2_DEBUG("HW RSA forbidden, using SW\n"); + } + + return vb2_rsa_verify_digest(key, sig_data, digest, wb); +} + +vb2_error_t vb2_verify_data(const uint8_t *data, uint32_t size, + struct vb2_signature *sig, + const struct vb2_public_key *key, + const struct vb2_workbuf *wb) +{ + struct vb2_workbuf wblocal = *wb; + uint8_t *digest; + uint32_t digest_size; + vb2_error_t rv; + + if (sig->data_size > size) { + VB2_DEBUG("Data buffer smaller than length of signed data.\n"); + return VB2_ERROR_VDATA_NOT_ENOUGH_DATA; + } + + /* Digest goes at start of work buffer */ + digest_size = vb2_digest_size(key->hash_alg); + if (!digest_size) + return VB2_ERROR_VDATA_DIGEST_SIZE; + + digest = vb2_workbuf_alloc(&wblocal, digest_size); + if (!digest) + return VB2_ERROR_VDATA_WORKBUF_DIGEST; + + if (key->allow_hwcrypto) { + rv = vb2ex_hwcrypto_digest_init(key->hash_alg, sig->data_size); + if (rv == VB2_SUCCESS) { + VB2_DEBUG("Using HW crypto engine for hash_alg %d\n", key->hash_alg); + VB2_TRY(vb2ex_hwcrypto_digest_extend(data, sig->data_size)); + VB2_TRY(vb2ex_hwcrypto_digest_finalize(digest, digest_size)); + } else if (rv == VB2_ERROR_EX_HWCRYPTO_UNSUPPORTED) { + VB2_DEBUG("HW crypto for hash_alg %d not supported, using SW\n", + key->hash_alg); + VB2_TRY(vb2_digest_buffer(data, sig->data_size, key->hash_alg, + digest, digest_size)); + } else { + VB2_DEBUG("HW crypto init error : %d\n", rv); + return rv; + } + } else { + VB2_DEBUG("HW crypto forbidden by TPM flag, using SW\n"); + VB2_TRY(vb2_digest_buffer(data, sig->data_size, key->hash_alg, + digest, digest_size)); + } + + return vb2_verify_digest(key, sig, digest, &wblocal); +} diff --git a/firmware/2lib/2context.c b/firmware/2lib/2context.c new file mode 100644 index 0000000..2fa017d --- /dev/null +++ b/firmware/2lib/2context.c @@ -0,0 +1,101 @@ +/* Copyright (c) 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Functions for initializing the vboot workbuffer and vb2_context. + */ + +#include "2api.h" +#include "2common.h" +#include "2misc.h" +#include "2sysincludes.h" + +void vb2_workbuf_from_ctx(struct vb2_context *ctx, struct vb2_workbuf *wb) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + vb2_workbuf_init(wb, (void *)sd + sd->workbuf_used, + sd->workbuf_size - sd->workbuf_used); +} + +void vb2_set_workbuf_used(struct vb2_context *ctx, uint32_t used) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + sd->workbuf_used = vb2_wb_round_up(used); +} + +vb2_error_t vb2api_init(void *workbuf, uint32_t size, + struct vb2_context **ctxptr) +{ + struct vb2_shared_data *sd = workbuf; + *ctxptr = NULL; + + if (!vb2_aligned(workbuf, VB2_WORKBUF_ALIGN)) + return VB2_ERROR_WORKBUF_ALIGN; + + if (size < vb2_wb_round_up(sizeof(*sd))) + return VB2_ERROR_WORKBUF_SMALL; + + /* Zero out vb2_shared_data (which includes vb2_context). */ + memset(sd, 0, sizeof(*sd)); + + /* Initialize shared data. */ + sd->magic = VB2_SHARED_DATA_MAGIC; + sd->struct_version_major = VB2_SHARED_DATA_VERSION_MAJOR; + sd->struct_version_minor = VB2_SHARED_DATA_VERSION_MINOR; + sd->workbuf_size = size; + sd->workbuf_used = vb2_wb_round_up(sizeof(*sd)); + + *ctxptr = &sd->ctx; + return VB2_SUCCESS; +} + +#pragma GCC diagnostic push +/* Don't warn for the version_minor check even if the checked version is 0. */ +#pragma GCC diagnostic ignored "-Wtype-limits" +vb2_error_t vb2api_relocate(void *new_workbuf, const void *cur_workbuf, + uint32_t size, struct vb2_context **ctxptr) +{ + const struct vb2_shared_data *cur_sd = cur_workbuf; + struct vb2_shared_data *new_sd; + + if (!vb2_aligned(new_workbuf, VB2_WORKBUF_ALIGN)) + return VB2_ERROR_WORKBUF_ALIGN; + + /* Check magic and version. */ + if (cur_sd->magic != VB2_SHARED_DATA_MAGIC) + return VB2_ERROR_SHARED_DATA_MAGIC; + + if (cur_sd->struct_version_major != VB2_SHARED_DATA_VERSION_MAJOR || + cur_sd->struct_version_minor < VB2_SHARED_DATA_VERSION_MINOR) + return VB2_ERROR_SHARED_DATA_VERSION; + + /* Check workbuf integrity. */ + if (cur_sd->workbuf_used < vb2_wb_round_up(sizeof(*cur_sd))) + return VB2_ERROR_WORKBUF_INVALID; + + if (cur_sd->workbuf_size < cur_sd->workbuf_used) + return VB2_ERROR_WORKBUF_INVALID; + + if (cur_sd->workbuf_used > size) + return VB2_ERROR_WORKBUF_SMALL; + + /* Relocate if necessary. */ + if (cur_workbuf != new_workbuf) + memmove(new_workbuf, cur_workbuf, cur_sd->workbuf_used); + + /* Set the new size, and return the context pointer. */ + new_sd = new_workbuf; + new_sd->workbuf_size = size; + *ctxptr = &new_sd->ctx; + + return VB2_SUCCESS; +} +#pragma GCC diagnostic pop + +vb2_error_t vb2api_reinit(void *workbuf, struct vb2_context **ctxptr) +{ + /* Blindly retrieve workbuf_size. vb2api_relocate() will + perform workbuf validation checks. */ + struct vb2_shared_data *sd = workbuf; + return vb2api_relocate(workbuf, workbuf, sd->workbuf_size, ctxptr); +} diff --git a/firmware/2lib/2crc8.c b/firmware/2lib/2crc8.c new file mode 100644 index 0000000..2760f27 --- /dev/null +++ b/firmware/2lib/2crc8.c @@ -0,0 +1,31 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Very simple 8-bit CRC function. + */ + +#include "2crc8.h" +#include "2sysincludes.h" + +/* Uses CRC-8 ITU version, with x^8 + x^2 + x + 1 polynomial. + Note that result will evaluate to zero for a buffer of all zeroes. */ +uint8_t vb2_crc8(const void *vptr, uint32_t size) +{ + const uint8_t *data = vptr; + unsigned crc = 0; + uint32_t i, j; + + /* Calculate CRC-8 directly. A table-based algorithm would be faster, + but for only a few bytes it isn't worth the code size. */ + for (j = size; j; j--, data++) { + crc ^= (*data << 8); + for(i = 8; i; i--) { + if (crc & 0x8000) + crc ^= (0x1070 << 3); + crc <<= 1; + } + } + + return (uint8_t)(crc >> 8); +} diff --git a/firmware/2lib/2crypto.c b/firmware/2lib/2crypto.c new file mode 100644 index 0000000..0c0978d --- /dev/null +++ b/firmware/2lib/2crypto.c @@ -0,0 +1,212 @@ +/* Copyright 2020 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Hash and signature algorithm parsing helpers for host utilities. + */ + +#include "2common.h" +#include "2crypto.h" +#include "2rsa.h" +#include "2sha.h" +#include "2sysincludes.h" + +/* + * These two need to be exported for host/lib/crypto.c, but they also need to be + * in .rodata to make coreboot XIP stages happy. We know they are immutable but + * there is no C language way to guarantee that, so we have to manually force + * the compiler to place them in .rodata. Also inject custom section flags so + * they are only allocatable (a) but not writeable (w). + */ + +__attribute__((section(".rodata.vb2_sig_names,\"a\"\n# "))) +const char *vb2_sig_names[VB2_SIG_ALG_COUNT] = { + [VB2_SIG_NONE] = "none", + [VB2_SIG_RSA1024] = "RSA1024", + [VB2_SIG_RSA2048] = "RSA2048", + [VB2_SIG_RSA4096] = "RSA4096", + [VB2_SIG_RSA8192] = "RSA8192", + [VB2_SIG_RSA2048_EXP3] = "RSA2048EXP3", + [VB2_SIG_RSA3072_EXP3] = "RSA3072EXP3", +}; + +__attribute__((section(".rodata.vb2_hash_names,\"a\"\n# "))) +const char *vb2_hash_names[VB2_HASH_ALG_COUNT] = { + [VB2_HASH_NONE] = "none", +#if VB2_SUPPORT_SHA1 + [VB2_HASH_SHA1] = VB2_SHA1_ALG_NAME, +#endif +#if VB2_SUPPORT_SHA256 + [VB2_HASH_SHA224] = VB2_SHA224_ALG_NAME, + [VB2_HASH_SHA256] = VB2_SHA256_ALG_NAME, +#endif +#if VB2_SUPPORT_SHA512 + [VB2_HASH_SHA384] = VB2_SHA384_ALG_NAME, + [VB2_HASH_SHA512] = VB2_SHA512_ALG_NAME, +#endif +}; + +/* The others are internal to this file. */ + +static const char *crypto_names[] = { +#if VB2_SUPPORT_SHA1 + [VB2_ALG_RSA1024_SHA1] = "RSA1024 SHA1", + [VB2_ALG_RSA2048_SHA1] = "RSA2048 SHA1", + [VB2_ALG_RSA4096_SHA1] = "RSA4096 SHA1", + [VB2_ALG_RSA8192_SHA1] = "RSA8192 SHA1", + [VB2_ALG_RSA2048_EXP3_SHA1] = "RSA2048 EXP3 SHA1", + [VB2_ALG_RSA3072_EXP3_SHA1] = "RSA3072 EXP3 SHA1", +#endif +#if VB2_SUPPORT_SHA256 + [VB2_ALG_RSA1024_SHA256] = "RSA1024 SHA256", + [VB2_ALG_RSA2048_SHA256] = "RSA2048 SHA256", + [VB2_ALG_RSA4096_SHA256] = "RSA4096 SHA256", + [VB2_ALG_RSA8192_SHA256] = "RSA8192 SHA256", + [VB2_ALG_RSA2048_EXP3_SHA256] = "RSA2048 EXP3 SHA256", + [VB2_ALG_RSA3072_EXP3_SHA256] = "RSA3072 EXP3 SHA256", +#endif +#if VB2_SUPPORT_SHA512 + [VB2_ALG_RSA1024_SHA512] = "RSA1024 SHA512", + [VB2_ALG_RSA2048_SHA512] = "RSA2048 SHA512", + [VB2_ALG_RSA4096_SHA512] = "RSA4096 SHA512", + [VB2_ALG_RSA8192_SHA512] = "RSA8192 SHA512", + [VB2_ALG_RSA2048_EXP3_SHA512] = "RSA2048 EXP3 SHA512", + [VB2_ALG_RSA3072_EXP3_SHA512] = "RSA3072 EXP3 SHA512", +#endif +}; + +static const char *crypto_filenames[] = { +#if VB2_SUPPORT_SHA1 + [VB2_ALG_RSA1024_SHA1] = "rsa1024", + [VB2_ALG_RSA2048_SHA1] = "rsa2048", + [VB2_ALG_RSA4096_SHA1] = "rsa4096", + [VB2_ALG_RSA8192_SHA1] = "rsa8192", + [VB2_ALG_RSA2048_EXP3_SHA1] = "rsa2048_exp3", + [VB2_ALG_RSA3072_EXP3_SHA1] = "rsa3072_exp3", +#endif +#if VB2_SUPPORT_SHA256 + [VB2_ALG_RSA1024_SHA256] = "rsa1024", + [VB2_ALG_RSA2048_SHA256] = "rsa2048", + [VB2_ALG_RSA4096_SHA256] = "rsa4096", + [VB2_ALG_RSA8192_SHA256] = "rsa8192", + [VB2_ALG_RSA2048_EXP3_SHA256] = "rsa2048_exp3", + [VB2_ALG_RSA3072_EXP3_SHA256] = "rsa3072_exp3", +#endif +#if VB2_SUPPORT_SHA512 + [VB2_ALG_RSA1024_SHA512] = "rsa1024", + [VB2_ALG_RSA2048_SHA512] = "rsa2048", + [VB2_ALG_RSA4096_SHA512] = "rsa4096", + [VB2_ALG_RSA8192_SHA512] = "rsa8192", + [VB2_ALG_RSA2048_EXP3_SHA512] = "rsa2048_exp3", + [VB2_ALG_RSA3072_EXP3_SHA512] = "rsa3072_exp3", +#endif +}; + +static const uint8_t crypto_to_sig[] = { +#if VB2_SUPPORT_SHA1 + [VB2_ALG_RSA1024_SHA1] = VB2_SIG_RSA1024, + [VB2_ALG_RSA2048_SHA1] = VB2_SIG_RSA2048, + [VB2_ALG_RSA4096_SHA1] = VB2_SIG_RSA4096, + [VB2_ALG_RSA8192_SHA1] = VB2_SIG_RSA8192, + [VB2_ALG_RSA2048_EXP3_SHA1] = VB2_SIG_RSA2048_EXP3, + [VB2_ALG_RSA3072_EXP3_SHA1] = VB2_SIG_RSA3072_EXP3, +#endif +#if VB2_SUPPORT_SHA256 + [VB2_ALG_RSA1024_SHA256] = VB2_SIG_RSA1024, + [VB2_ALG_RSA2048_SHA256] = VB2_SIG_RSA2048, + [VB2_ALG_RSA4096_SHA256] = VB2_SIG_RSA4096, + [VB2_ALG_RSA8192_SHA256] = VB2_SIG_RSA8192, + [VB2_ALG_RSA2048_EXP3_SHA256] = VB2_SIG_RSA2048_EXP3, + [VB2_ALG_RSA3072_EXP3_SHA256] = VB2_SIG_RSA3072_EXP3, +#endif +#if VB2_SUPPORT_SHA512 + [VB2_ALG_RSA1024_SHA512] = VB2_SIG_RSA1024, + [VB2_ALG_RSA2048_SHA512] = VB2_SIG_RSA2048, + [VB2_ALG_RSA4096_SHA512] = VB2_SIG_RSA4096, + [VB2_ALG_RSA8192_SHA512] = VB2_SIG_RSA8192, + [VB2_ALG_RSA2048_EXP3_SHA512] = VB2_SIG_RSA2048_EXP3, + [VB2_ALG_RSA3072_EXP3_SHA512] = VB2_SIG_RSA3072_EXP3, +#endif +}; + +static const uint8_t crypto_to_hash[] = { +#if VB2_SUPPORT_SHA1 + [VB2_ALG_RSA1024_SHA1] = VB2_HASH_SHA1, + [VB2_ALG_RSA2048_SHA1] = VB2_HASH_SHA1, + [VB2_ALG_RSA4096_SHA1] = VB2_HASH_SHA1, + [VB2_ALG_RSA8192_SHA1] = VB2_HASH_SHA1, + [VB2_ALG_RSA2048_EXP3_SHA1] = VB2_HASH_SHA1, + [VB2_ALG_RSA3072_EXP3_SHA1] = VB2_HASH_SHA1, +#endif +#if VB2_SUPPORT_SHA256 + [VB2_ALG_RSA1024_SHA256] = VB2_HASH_SHA256, + [VB2_ALG_RSA2048_SHA256] = VB2_HASH_SHA256, + [VB2_ALG_RSA4096_SHA256] = VB2_HASH_SHA256, + [VB2_ALG_RSA8192_SHA256] = VB2_HASH_SHA256, + [VB2_ALG_RSA2048_EXP3_SHA256] = VB2_HASH_SHA256, + [VB2_ALG_RSA3072_EXP3_SHA256] = VB2_HASH_SHA256, +#endif +#if VB2_SUPPORT_SHA512 + [VB2_ALG_RSA1024_SHA512] = VB2_HASH_SHA512, + [VB2_ALG_RSA2048_SHA512] = VB2_HASH_SHA512, + [VB2_ALG_RSA4096_SHA512] = VB2_HASH_SHA512, + [VB2_ALG_RSA8192_SHA512] = VB2_HASH_SHA512, + [VB2_ALG_RSA2048_EXP3_SHA512] = VB2_HASH_SHA512, + [VB2_ALG_RSA3072_EXP3_SHA512] = VB2_HASH_SHA512, +#endif +}; + +#if VB2_SUPPORT_SHA512 +_Static_assert(ARRAY_SIZE(crypto_names) == VB2_ALG_COUNT, ""); +_Static_assert(ARRAY_SIZE(crypto_filenames) == VB2_ALG_COUNT, ""); +_Static_assert(ARRAY_SIZE(crypto_to_sig) == VB2_ALG_COUNT, ""); +_Static_assert(ARRAY_SIZE(crypto_to_hash) == VB2_ALG_COUNT, ""); +#endif + +const char *vb2_get_hash_algorithm_name(enum vb2_hash_algorithm hash_alg) +{ if (hash_alg < ARRAY_SIZE(vb2_hash_names) && vb2_hash_names[hash_alg]) + return vb2_hash_names[hash_alg]; + else + return VB2_INVALID_ALG_NAME; +} + +const char *vb2_get_sig_algorithm_name(enum vb2_signature_algorithm sig_alg) +{ + if (sig_alg < ARRAY_SIZE(vb2_sig_names) && vb2_sig_names[sig_alg]) + return vb2_sig_names[sig_alg]; + else + return VB2_INVALID_ALG_NAME; +} + +const char *vb2_get_crypto_algorithm_name(enum vb2_crypto_algorithm alg) +{ + if (alg < ARRAY_SIZE(crypto_names) && crypto_names[alg]) + return crypto_names[alg]; + else + return VB2_INVALID_ALG_NAME; +} + +const char *vb2_get_crypto_algorithm_file(enum vb2_crypto_algorithm alg) +{ + if (alg < ARRAY_SIZE(crypto_filenames) && crypto_filenames[alg]) + return crypto_filenames[alg]; + else + return VB2_INVALID_ALG_NAME; +} + +enum vb2_signature_algorithm vb2_crypto_to_signature( + enum vb2_crypto_algorithm algorithm) +{ + if (algorithm < ARRAY_SIZE(crypto_to_sig)) + return crypto_to_sig[algorithm]; + else + return VB2_SIG_INVALID; +} + +enum vb2_hash_algorithm vb2_crypto_to_hash(enum vb2_crypto_algorithm algorithm) +{ + if (algorithm < ARRAY_SIZE(crypto_to_hash)) + return crypto_to_hash[algorithm]; + else + return VB2_HASH_INVALID; +} diff --git a/firmware/2lib/2ec_sync.c b/firmware/2lib/2ec_sync.c new file mode 100644 index 0000000..e75313b --- /dev/null +++ b/firmware/2lib/2ec_sync.c @@ -0,0 +1,376 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * EC software sync routines for vboot + */ + +#include "2api.h" +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2secdata.h" +#include "2sysincludes.h" + +#define SYNC_FLAG(select) \ + ((select) == VB_SELECT_FIRMWARE_READONLY ? \ + VB2_SD_FLAG_ECSYNC_EC_RO : VB2_SD_FLAG_ECSYNC_EC_RW) + +/** + * Print a hash to debug output + * + * @param hash Pointer to the hash + * @param hash_size Size of the hash in bytes + * @param desc Description of what's being hashed + */ +static void print_hash(const uint8_t *hash, uint32_t hash_size) +{ + int i; + for (i = 0; i < hash_size; i++) + VB2_DEBUG_RAW("%02x", hash[i]); + VB2_DEBUG_RAW("\n"); +} + +static const char *image_name_to_string(enum vb2_firmware_selection select) +{ + switch (select) { + case VB_SELECT_FIRMWARE_READONLY: + return "RO"; + case VB_SELECT_FIRMWARE_EC_ACTIVE: + return "RW(active)"; + case VB_SELECT_FIRMWARE_EC_UPDATE: + return "RW(update)"; + default: + return "UNKNOWN"; + } +} + +/** + * Check if the hash of the EC code matches the expected hash. + * + * @param ctx Vboot2 context + * @param select Which firmware image to check + * @return VB2_SUCCESS, or non-zero error code. + */ +static vb2_error_t check_ec_hash(struct vb2_context *ctx, + enum vb2_firmware_selection select) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + const uint8_t *hexp = NULL; + const uint8_t *hmir = NULL; + const uint8_t *heff = NULL; + int hexp_len, heff_len; + const int hmir_len = VB2_SHA256_DIGEST_SIZE; + vb2_error_t rv; + + /* + * Get expected EC hash and length. + */ + VB2_TRY(vb2ex_ec_get_expected_image_hash(select, &hexp, &hexp_len), + ctx, VB2_RECOVERY_EC_EXPECTED_HASH); + VB2_DEBUG("Hexp %10s: ", image_name_to_string(select)); + print_hash(hexp, hexp_len); + + /* + * Get mirrored EC hash. This returns NULL on old systems. On new + * systems without EFS2, Hmir will be updated but unused. + * + * If it's called from update_ec, Hmir and Hexp are already synced. + */ + hmir = vb2_secdata_kernel_get_ec_hash(ctx); + if (hmir && select == VB_SELECT_FIRMWARE_EC_ACTIVE) { + VB2_DEBUG(" %10s: ", "Hmir"); + print_hash(hmir, hmir_len); + if (hmir_len != hexp_len) { + VB2_DEBUG("Hmir size (%d) != Hexp size (%d)\n", + hmir_len, hexp_len); + rv = VB2_ERROR_EC_HASH_SIZE; + vb2api_fail(ctx, VB2_RECOVERY_EC_HASH_SIZE, rv); + return rv; + } + if (vb2_safe_memcmp(hmir, hexp, hexp_len)) { + VB2_DEBUG("Hmir != Hexp. Update Hmir.\n"); + vb2_secdata_kernel_set_ec_hash(ctx, hexp); + sd->flags |= VB2_SD_FLAG_ECSYNC_HMIR_UPDATED; + } + } + + /* + * Get effective EC hash and length. + */ + VB2_TRY(vb2ex_ec_hash_image(select, &heff, &heff_len), + ctx, VB2_RECOVERY_EC_HASH_FAILED); + VB2_DEBUG("Heff %10s: ", image_name_to_string(select)); + print_hash(heff, heff_len); + + /* Lengths should match. */ + if (heff_len != hexp_len) { + VB2_DEBUG("EC uses %d-byte hash but AP-RW contains %d bytes\n", + heff_len, hexp_len); + rv = VB2_ERROR_EC_HASH_SIZE; + vb2api_fail(ctx, VB2_RECOVERY_EC_HASH_SIZE, rv); + return rv; + } + + if (vb2_safe_memcmp(heff, hexp, hexp_len)) { + VB2_DEBUG("Heff != Hexp. Schedule update\n"); + sd->flags |= SYNC_FLAG(select); + } + + return VB2_SUCCESS; +} + +/** + * Update the specified EC and verify the update succeeded + * + * @param ctx Vboot2 context + * @param select Which firmware image to check + * @return VB2_SUCCESS, or non-zero error code. + */ +static vb2_error_t update_ec(struct vb2_context *ctx, + enum vb2_firmware_selection select) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + + VB2_DEBUG("Updating %s...\n", image_name_to_string(select)); + VB2_TRY(vb2ex_ec_update_image(select), ctx, VB2_RECOVERY_EC_UPDATE); + + /* Verify the EC was updated properly */ + sd->flags &= ~SYNC_FLAG(select); + VB2_TRY(check_ec_hash(ctx, select)); + if (sd->flags & SYNC_FLAG(select)) { + VB2_DEBUG("Failed to update\n"); + vb2api_fail(ctx, VB2_RECOVERY_EC_UPDATE, 0); + return VB2_REQUEST_REBOOT_EC_TO_RO; + } + + VB2_DEBUG("Updated %s successfully\n", image_name_to_string(select)); + + return VB2_SUCCESS; +} + +/** + * Set VB2_SD_FLAG_ECSYNC_EC_IN_RW flag for the EC + * + * @param ctx Vboot2 context + * @return VB2_SUCCESS, or non-zero if error. + */ +static vb2_error_t check_ec_active(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + int in_rw = 0; + /* + * We don't use VB2_CONTEXT_EC_TRUSTED, which checks if not EC_IN_RW. + * It is controlled by cr50 but on some platforms, cr50 can't know when + * a EC resets. So, we trust what EC-RW says. If it lies it's in RO, + * we'll flash RW while it's in RW. + */ + /* If we couldn't determine where the EC was, reboot to recovery. */ + VB2_TRY(vb2ex_ec_running_rw(&in_rw), + ctx, VB2_RECOVERY_EC_UNKNOWN_IMAGE); + + if (in_rw) + sd->flags |= VB2_SD_FLAG_ECSYNC_EC_IN_RW; + + return VB2_SUCCESS; +} + +/** + * Sync, jump, and protect EC device + * + * @param ctx Vboot2 context + * @return VB2_SUCCESS, or non-zero if error. + */ +static vb2_error_t sync_ec(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + + const enum vb2_firmware_selection select_rw = EC_EFS ? + VB_SELECT_FIRMWARE_EC_UPDATE : + VB_SELECT_FIRMWARE_EC_ACTIVE; + VB2_DEBUG("select_rw=%s\n", image_name_to_string(select_rw)); + + /* Update the RW Image */ + if (sd->flags & SYNC_FLAG(select_rw)) { + VB2_TRY(update_ec(ctx, select_rw), ctx, VB2_RECOVERY_EC_UPDATE); + /* Updated successfully. Cold reboot to switch to the new RW. */ + if (ctx->flags & VB2_CONTEXT_NO_BOOT) { + VB2_DEBUG("Rebooting to jump to new EC-RW\n"); + return VB2_REQUEST_REBOOT_EC_TO_RO; + } else if (EC_EFS) { + VB2_DEBUG("Rebooting to switch to new EC-RW\n"); + return VB2_REQUEST_REBOOT_EC_SWITCH_RW; + } + } + + if (sd->flags & VB2_SD_FLAG_ECSYNC_HMIR_UPDATED) { + /* + * After Hmir is updated, EFS needs to be retried since the + * verification result is revoked. + */ + VB2_DEBUG("Reset EC after Hmir update\n"); + return VB2_REQUEST_REBOOT_EC_TO_RO; + } + + /* We no longer trust the EC once it is already in RW or tries to jump + to RW. */ + ctx->flags &= ~VB2_CONTEXT_EC_TRUSTED; + + /* Tell EC to jump to RW. It should already be in RW for EFS2. */ + if (!(sd->flags & VB2_SD_FLAG_ECSYNC_EC_IN_RW)) { + VB2_DEBUG("jumping to EC-RW\n"); + VB2_TRY(vb2ex_ec_jump_to_rw(), ctx, VB2_RECOVERY_EC_JUMP_RW); + } + + /* Might need to update EC-RO */ + if (sd->flags & VB2_SD_FLAG_ECSYNC_EC_RO) { + VB2_DEBUG("RO Software Sync\n"); + + /* Reset RO Software Sync NV flag */ + vb2_nv_set(ctx, VB2_NV_TRY_RO_SYNC, 0); + + /* Update the RO Image */ + VB2_TRY(update_ec(ctx, VB_SELECT_FIRMWARE_READONLY), + ctx, VB2_RECOVERY_EC_UPDATE); + } + + /* Protect RO flash */ + VB2_TRY(vb2ex_ec_protect(VB_SELECT_FIRMWARE_READONLY), + ctx, VB2_RECOVERY_EC_PROTECT); + + /* Protect RW flash */ + VB2_TRY(vb2ex_ec_protect(select_rw), ctx, VB2_RECOVERY_EC_PROTECT); + + /* Disable further sysjumps */ + VB2_TRY(vb2ex_ec_disable_jump(), ctx, VB2_RECOVERY_EC_SOFTWARE_SYNC); + + return VB2_SUCCESS; +} + +/** + * EC sync, phase 1 + * + * This checks whether the EC is running the correct image to do EC sync, and + * whether any updates are necessary. + * + * @param ctx Vboot2 context + * @return VB2_SUCCESS, VB2_REQUEST_REBOOT_EC_TO_RO if the EC must reboot back + * to its RO code to continue EC sync, or other non-zero error code. + */ +static vb2_error_t ec_sync_phase1(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + struct vb2_gbb_header *gbb = vb2_get_gbb(ctx); + + /* Reasons not to do sync at all */ + if (!(ctx->flags & VB2_CONTEXT_EC_SYNC_SUPPORTED)) + return VB2_SUCCESS; + if (gbb->flags & VB2_GBB_FLAG_DISABLE_EC_SOFTWARE_SYNC) + return VB2_SUCCESS; + + /* Set VB2_SD_FLAG_ECSYNC_EC_IN_RW flag */ + if (check_ec_active(ctx)) + return VB2_REQUEST_REBOOT_EC_TO_RO; + + /* Check if we need to update RW. Failures trigger recovery mode. */ + if (check_ec_hash(ctx, VB_SELECT_FIRMWARE_EC_ACTIVE)) + return VB2_REQUEST_REBOOT_EC_TO_RO; + + /* See if we need to update EC-RO. */ + if (vb2_nv_get(ctx, VB2_NV_TRY_RO_SYNC) && + check_ec_hash(ctx, VB_SELECT_FIRMWARE_READONLY)) { + return VB2_REQUEST_REBOOT_EC_TO_RO; + } + + /* + * If we're in RW, we need to reboot back to RO because RW can't be + * updated while we're running it. + * + * If EC supports RW-A/B slots, we can proceed but we need + * to jump to the new RW version later. + */ + if ((sd->flags & SYNC_FLAG(VB_SELECT_FIRMWARE_EC_ACTIVE)) && + (sd->flags & VB2_SD_FLAG_ECSYNC_EC_IN_RW) && !EC_EFS) { + return VB2_REQUEST_REBOOT_EC_TO_RO; + } + + return VB2_SUCCESS; +} + +/** + * determine if we can update the EC + * + * @param ctx Vboot2 context + * @return boolean (true iff we can update the EC) + */ + +static int ec_sync_allowed(struct vb2_context *ctx) +{ + struct vb2_gbb_header *gbb = vb2_get_gbb(ctx); + + /* Reasons not to do sync at all */ + if (!(ctx->flags & VB2_CONTEXT_EC_SYNC_SUPPORTED)) + return 0; + if (gbb->flags & VB2_GBB_FLAG_DISABLE_EC_SOFTWARE_SYNC) + return 0; + if (ctx->flags & VB2_CONTEXT_RECOVERY_MODE) + return 0; + return 1; +} + +/** + * EC sync, phase 2 + * + * This updates the EC if necessary, makes sure it has protected its image(s), + * and makes sure it has jumped to the correct image. + * + * @param ctx Vboot2 context + * @return VB2_SUCCESS, VB2_REQUEST_REBOOT_EC_TO_RO if the EC must + * reboot back to its RO code to continue EC sync, or other non-zero error + * code. + */ +static vb2_error_t ec_sync_phase2(struct vb2_context *ctx) +{ + if (!ec_sync_allowed(ctx)) + return VB2_SUCCESS; + + /* Handle updates and jumps for EC */ + return sync_ec(ctx); +} + +vb2_error_t vb2api_ec_sync(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + + /* + * If the status indicates that the EC has already gone through + * software sync this boot, then don't do it again. + */ + if (sd->status & VB2_SD_STATUS_EC_SYNC_COMPLETE) { + VB2_DEBUG("EC software sync already performed this boot, skipping\n"); + return VB2_SUCCESS; + } + + /* + * If the device is in recovery mode, then EC sync should + * not be performed. + */ + if (ctx->flags & VB2_CONTEXT_RECOVERY_MODE) { + VB2_DEBUG("In recovery mode, skipping EC sync\n"); + return VB2_SUCCESS; + } + + /* Phase 1; this determines if we need an update */ + VB2_TRY(ec_sync_phase1(ctx)); + + /* Phase 2; Applies update and/or jumps to the correct EC image */ + VB2_TRY(ec_sync_phase2(ctx)); + + /* Phase 3; Let the platform know that EC software sync is now done */ + VB2_TRY(vb2ex_ec_vboot_done(ctx)); + + /* Establish that EC software sync is complete and successful */ + sd->status |= VB2_SD_STATUS_EC_SYNC_COMPLETE; + + return VB2_SUCCESS; +} diff --git a/firmware/2lib/2firmware.c b/firmware/2lib/2firmware.c new file mode 100644 index 0000000..bc708dc --- /dev/null +++ b/firmware/2lib/2firmware.c @@ -0,0 +1,237 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Misc functions which need access to vb2_context but are not public APIs + */ + +#include "2api.h" +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2rsa.h" +#include "2secdata.h" +#include "2sha.h" +#include "2sysincludes.h" + +vb2_error_t vb2_load_fw_keyblock(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + struct vb2_gbb_header *gbb = vb2_get_gbb(ctx); + struct vb2_workbuf wb; + + uint8_t *key_data; + uint32_t key_size; + struct vb2_public_key root_key; + + struct vb2_keyblock *kb; + uint32_t block_size; + + vb2_error_t rv = VB2_SUCCESS; + + vb2_workbuf_from_ctx(ctx, &wb); + + /* Read the root key */ + key_size = gbb->rootkey_size; + key_data = vb2_workbuf_alloc(&wb, key_size); + if (!key_data) + return VB2_ERROR_FW_KEYBLOCK_WORKBUF_ROOT_KEY; + + VB2_TRY(vb2ex_read_resource(ctx, VB2_RES_GBB, gbb->rootkey_offset, + key_data, key_size)); + + /* Unpack the root key */ + VB2_TRY(vb2_unpack_key_buffer(&root_key, key_data, key_size)); + + root_key.allow_hwcrypto = vb2_hwcrypto_allowed(ctx); + + /* Load the firmware keyblock header after the root key */ + kb = vb2_workbuf_alloc(&wb, sizeof(*kb)); + if (!kb) + return VB2_ERROR_FW_KEYBLOCK_WORKBUF_HEADER; + + VB2_TRY(vb2ex_read_resource(ctx, VB2_RES_FW_VBLOCK, 0, + kb, sizeof(*kb))); + + block_size = kb->keyblock_size; + + /* + * Load the entire keyblock, now that we know how big it is. Note that + * we're loading the entire keyblock instead of just the piece after + * the header. That means we re-read the header. But that's a tiny + * amount of data, and it makes the code much more straightforward. + */ + kb = vb2_workbuf_realloc(&wb, sizeof(*kb), block_size); + if (!kb) + return VB2_ERROR_FW_KEYBLOCK_WORKBUF; + + VB2_TRY(vb2ex_read_resource(ctx, VB2_RES_FW_VBLOCK, 0, kb, block_size)); + + /* Verify the keyblock */ + VB2_TRY(vb2_verify_keyblock(kb, block_size, &root_key, &wb), + ctx, VB2_RECOVERY_FW_KEYBLOCK); + + /* Key version is the upper 16 bits of the composite firmware version */ + if (kb->data_key.key_version > VB2_MAX_KEY_VERSION) + rv = VB2_ERROR_FW_KEYBLOCK_VERSION_RANGE; + if (!rv && kb->data_key.key_version < (sd->fw_version_secdata >> 16)) { + if (gbb->flags & VB2_GBB_FLAG_DISABLE_FW_ROLLBACK_CHECK) + VB2_DEBUG("Ignoring FW key rollback due to GBB flag\n"); + else + rv = VB2_ERROR_FW_KEYBLOCK_VERSION_ROLLBACK; + } + if (rv) { + vb2api_fail(ctx, VB2_RECOVERY_FW_KEY_ROLLBACK, rv); + return rv; + } + + sd->fw_version = kb->data_key.key_version << 16; + + /* Preamble follows the keyblock in the vblock. */ + sd->vblock_preamble_offset = kb->keyblock_size; + + /* + * Save the data key in the work buffer. We'll overwrite the root key + * we read above. That's ok, because now that we have the data key we + * no longer need the root key. First, let's double-check that it is + * well-formed though (although the keyblock was signed anyway). + */ + VB2_TRY(vb2_verify_packed_key_inside(kb, block_size, &kb->data_key)); + + /* Save the future offset and size while kb->data_key is still valid. + The check above made sure that key_offset and key_size are valid. */ + sd->data_key_offset = vb2_offset_of(sd, key_data); + sd->data_key_size = kb->data_key.key_offset + kb->data_key.key_size; + + /* + * Use memmove() instead of memcpy(). In theory, the destination will + * never overlap because with the source because the root key is likely + * to be at least as large as the data key, but there's no harm here in + * being paranoid. Make sure we immediately invalidate 'kb' after the + * move to guarantee we won't try to access it anymore. + */ + memmove(key_data, &kb->data_key, sd->data_key_size); + kb = NULL; + + /* + * Data key will persist in the workbuf after we return. + * + * Work buffer now contains: + * - vb2_shared_data + * - packed firmware data key + */ + vb2_set_workbuf_used(ctx, sd->data_key_offset + sd->data_key_size); + + return VB2_SUCCESS; +} + +vb2_error_t vb2_load_fw_preamble(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + struct vb2_gbb_header *gbb = vb2_get_gbb(ctx); + struct vb2_workbuf wb; + + uint8_t *key_data = vb2_member_of(sd, sd->data_key_offset); + uint32_t key_size = sd->data_key_size; + struct vb2_public_key data_key; + + /* Preamble goes in the next unused chunk of work buffer */ + struct vb2_fw_preamble *pre; + uint32_t pre_size; + + vb2_error_t rv = VB2_SUCCESS; + + vb2_workbuf_from_ctx(ctx, &wb); + + /* Unpack the firmware data key */ + if (!sd->data_key_size) + return VB2_ERROR_FW_PREAMBLE2_DATA_KEY; + + VB2_TRY(vb2_unpack_key_buffer(&data_key, key_data, key_size)); + + data_key.allow_hwcrypto = vb2_hwcrypto_allowed(ctx); + + /* Load the firmware preamble header */ + pre = vb2_workbuf_alloc(&wb, sizeof(*pre)); + if (!pre) + return VB2_ERROR_FW_PREAMBLE2_WORKBUF_HEADER; + + VB2_TRY(vb2ex_read_resource(ctx, VB2_RES_FW_VBLOCK, + sd->vblock_preamble_offset, + pre, sizeof(*pre))); + + pre_size = pre->preamble_size; + + /* Load the entire firmware preamble, now that we know how big it is */ + pre = vb2_workbuf_realloc(&wb, sizeof(*pre), pre_size); + if (!pre) + return VB2_ERROR_FW_PREAMBLE2_WORKBUF; + + VB2_TRY(vb2ex_read_resource(ctx, VB2_RES_FW_VBLOCK, + sd->vblock_preamble_offset, + pre, pre_size)); + + /* Work buffer now contains the data subkey data and the preamble */ + + /* Verify the preamble */ + VB2_TRY(vb2_verify_fw_preamble(pre, pre_size, &data_key, &wb), + ctx, VB2_RECOVERY_FW_PREAMBLE); + + /* + * Firmware version is the lower 16 bits of the composite firmware + * version. + */ + if (pre->firmware_version > VB2_MAX_PREAMBLE_VERSION) + rv = VB2_ERROR_FW_PREAMBLE_VERSION_RANGE; + /* Combine with the key version from vb2_load_fw_keyblock() */ + sd->fw_version |= pre->firmware_version; + if (!rv && sd->fw_version < sd->fw_version_secdata) { + if (gbb->flags & VB2_GBB_FLAG_DISABLE_FW_ROLLBACK_CHECK) + VB2_DEBUG("Ignoring FW rollback due to GBB flag\n"); + else + rv = VB2_ERROR_FW_PREAMBLE_VERSION_ROLLBACK; + } + if (rv) { + vb2api_fail(ctx, VB2_RECOVERY_FW_ROLLBACK, rv); + return rv; + } + + /* + * If this is a newer version than in secure storage, and we + * successfully booted the same slot last boot, roll forward the + * version in secure storage. + * + * Note that this happens before we've verified the firmware data this + * boot; we're relying on the indicator that the last boot was + * successful. That's ok, because even if the firmware data has a + * valid hash, the only way we can know if it's functional is to trust + * the status from the last boot. + */ + if (sd->fw_version > sd->fw_version_secdata && + sd->last_fw_slot == sd->fw_slot && + sd->last_fw_result == VB2_FW_RESULT_SUCCESS) { + sd->fw_version_secdata = sd->fw_version; + vb2_secdata_firmware_set(ctx, VB2_SECDATA_FIRMWARE_VERSIONS, + sd->fw_version); + } + + /* Keep track of where we put the preamble */ + sd->preamble_offset = vb2_offset_of(sd, pre); + sd->preamble_size = pre_size; + + /* + * Preamble will persist in work buffer after we return. + * + * Work buffer now contains: + * - vb2_shared_data + * - vb2_gbb_header + * - packed firmware data key + * - firmware preamble + * + * TODO: we could move the preamble down over the firmware data key + * since we don't need it anymore. + */ + vb2_set_workbuf_used(ctx, sd->preamble_offset + pre_size); + + return VB2_SUCCESS; +} diff --git a/firmware/2lib/2gbb.c b/firmware/2lib/2gbb.c new file mode 100644 index 0000000..9238c30 --- /dev/null +++ b/firmware/2lib/2gbb.c @@ -0,0 +1,117 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * GBB accessor functions. + */ + +#include "2common.h" +#include "2misc.h" + +static vb2_error_t vb2_gbb_read_key(struct vb2_context *ctx, uint32_t offset, + uint32_t *size, + struct vb2_packed_key **keyp, + struct vb2_workbuf *wb) +{ + struct vb2_workbuf wblocal = *wb; + + /* Check offset and size. */ + if (offset < sizeof(struct vb2_gbb_header)) + return VB2_ERROR_GBB_INVALID; + if (*size < sizeof(**keyp)) + return VB2_ERROR_GBB_INVALID; + + /* GBB header might be padded. Retrieve the vb2_packed_key + header so we can find out what the real size is. */ + *keyp = vb2_workbuf_alloc(&wblocal, sizeof(**keyp)); + if (!*keyp) + return VB2_ERROR_GBB_WORKBUF; + VB2_TRY(vb2ex_read_resource(ctx, VB2_RES_GBB, offset, *keyp, + sizeof(**keyp))); + + VB2_TRY(vb2_verify_packed_key_inside(*keyp, *size, *keyp)); + + /* Deal with a zero-size key (used in testing). */ + *size = (*keyp)->key_offset + (*keyp)->key_size; + *size = VB2_MAX(*size, sizeof(**keyp)); + + /* Now that we know the real size of the key, retrieve the key + data, and write it on the workbuf, directly after vb2_packed_key. */ + *keyp = vb2_workbuf_realloc(&wblocal, sizeof(**keyp), *size); + if (!*keyp) + return VB2_ERROR_GBB_WORKBUF; + + VB2_TRY(vb2ex_read_resource(ctx, VB2_RES_GBB, + offset + sizeof(**keyp), + (void *)*keyp + sizeof(**keyp), + *size - sizeof(**keyp))); + *wb = wblocal; + return VB2_SUCCESS; +} + +vb2_error_t vb2_gbb_read_root_key(struct vb2_context *ctx, + struct vb2_packed_key **keyp, uint32_t *size, + struct vb2_workbuf *wb) +{ + struct vb2_gbb_header *gbb = vb2_get_gbb(ctx); + uint32_t size_in = gbb->rootkey_size; + vb2_error_t ret = vb2_gbb_read_key(ctx, gbb->rootkey_offset, + &size_in, keyp, wb); + if (size) + *size = size_in; + return ret; +} + +vb2_error_t vb2_gbb_read_recovery_key(struct vb2_context *ctx, + struct vb2_packed_key **keyp, + uint32_t *size, struct vb2_workbuf *wb) +{ + struct vb2_gbb_header *gbb = vb2_get_gbb(ctx); + uint32_t size_in = gbb->recovery_key_size; + vb2_error_t ret = vb2_gbb_read_key(ctx, gbb->recovery_key_offset, + &size_in, keyp, wb); + if (size) + *size = size_in; + return ret; +} + +vb2_error_t vb2api_gbb_read_hwid(struct vb2_context *ctx, char *hwid, + uint32_t *size) +{ + struct vb2_gbb_header *gbb = vb2_get_gbb(ctx); + uint32_t i; + vb2_error_t ret; + + if (gbb->hwid_size == 0) { + VB2_DEBUG("invalid HWID size %d\n", gbb->hwid_size); + return VB2_ERROR_GBB_INVALID; + } + + *size = VB2_MIN(*size, VB2_GBB_HWID_MAX_SIZE); + *size = VB2_MIN(*size, gbb->hwid_size); + + ret = vb2ex_read_resource(ctx, VB2_RES_GBB, gbb->hwid_offset, + hwid, *size); + if (ret) { + VB2_DEBUG("read resource failure: %d\n", ret); + return ret; + } + + /* Count HWID size, and ensure that it fits in the given buffer. */ + for (i = 0; i < *size; i++) { + if (hwid[i] == '\0') { + *size = i + 1; + break; + } + } + if (hwid[*size - 1] != '\0') + return VB2_ERROR_INVALID_PARAMETER; + + return VB2_SUCCESS; +} + +vb2_gbb_flags_t vb2api_gbb_get_flags(struct vb2_context *ctx) +{ + struct vb2_gbb_header *gbb = vb2_get_gbb(ctx); + return gbb->flags; +} diff --git a/firmware/2lib/2hmac.c b/firmware/2lib/2hmac.c new file mode 100644 index 0000000..d67da42 --- /dev/null +++ b/firmware/2lib/2hmac.c @@ -0,0 +1,60 @@ +/* Copyright 2016 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "2hmac.h" +#include "2sha.h" +#include "2sysincludes.h" + +int hmac(enum vb2_hash_algorithm alg, + const void *key, uint32_t key_size, + const void *msg, uint32_t msg_size, + uint8_t *mac, uint32_t mac_size) +{ + uint32_t block_size; + uint32_t digest_size; + uint8_t k[VB2_MAX_BLOCK_SIZE]; + uint8_t o_pad[VB2_MAX_BLOCK_SIZE]; + uint8_t i_pad[VB2_MAX_BLOCK_SIZE]; + uint8_t b[VB2_MAX_DIGEST_SIZE]; + struct vb2_digest_context dc; + int i; + + if (!key | !msg | !mac) + return -1; + + digest_size = vb2_digest_size(alg); + block_size = vb2_hash_block_size(alg); + if (!digest_size || !block_size) + return -1; + + if (mac_size < digest_size) + return -1; + + if (key_size > block_size) { + vb2_digest_buffer((uint8_t *)key, key_size, alg, k, block_size); + key_size = digest_size; + } else { + memcpy(k, key, key_size); + } + if (key_size < block_size) + memset(k + key_size, 0, block_size - key_size); + + for (i = 0; i < block_size; i++) { + o_pad[i] = 0x5c ^ k[i]; + i_pad[i] = 0x36 ^ k[i]; + } + + vb2_digest_init(&dc, alg); + vb2_digest_extend(&dc, i_pad, block_size); + vb2_digest_extend(&dc, msg, msg_size); + vb2_digest_finalize(&dc, b, digest_size); + + vb2_digest_init(&dc, alg); + vb2_digest_extend(&dc, o_pad, block_size); + vb2_digest_extend(&dc, b, digest_size); + vb2_digest_finalize(&dc, mac, mac_size); + + return 0; +} diff --git a/firmware/2lib/2kernel.c b/firmware/2lib/2kernel.c new file mode 100644 index 0000000..5b18cad --- /dev/null +++ b/firmware/2lib/2kernel.c @@ -0,0 +1,199 @@ +/* Copyright 2020 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Kernel selection, loading, verification, and booting. + */ + +#include "2common.h" +#include "2kernel.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2rsa.h" +#include "2secdata.h" +#include "vboot_api.h" + +/** + * Reset any NVRAM requests. + * + * @param ctx Vboot context + * @return 1 if a reboot is required, 0 otherwise. + */ +static int vb2_reset_nv_requests(struct vb2_context *ctx) +{ + int need_reboot = 0; + + if (vb2_nv_get(ctx, VB2_NV_DISPLAY_REQUEST)) { + VB2_DEBUG("Unset display request (undo display init)\n"); + vb2_nv_set(ctx, VB2_NV_DISPLAY_REQUEST, 0); + need_reboot = 1; + } + + if (vb2_nv_get(ctx, VB2_NV_DIAG_REQUEST)) { + VB2_DEBUG("Unset diagnostic request (undo display init)\n"); + vb2_nv_set(ctx, VB2_NV_DIAG_REQUEST, 0); + need_reboot = 1; + } + + return need_reboot; +} + +vb2_error_t vb2_normal_boot(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + uint32_t max_rollforward = vb2_nv_get(ctx, + VB2_NV_KERNEL_MAX_ROLLFORWARD); + + /* Boot from fixed disk only */ + VB2_DEBUG("Entering\n"); + + if (vb2_reset_nv_requests(ctx)) { + VB2_DEBUG("Normal mode: reboot to reset NVRAM requests\n"); + return VB2_REQUEST_REBOOT; + } + + vb2_error_t rv = VbTryLoadKernel(ctx, VB_DISK_FLAG_FIXED); + + VB2_DEBUG("Checking if TPM kernel version needs advancing\n"); + + /* + * Special case for when we're trying a slot with new firmware. + * Firmware updates also usually change the kernel key, which means + * that the new firmware can only boot a new kernel, and the old + * firmware in the previous slot can only boot the previous kernel. + * + * Don't roll-forward the kernel version, because we don't yet know if + * the new kernel will successfully boot. + */ + if (vb2_nv_get(ctx, VB2_NV_FW_RESULT) == VB2_FW_RESULT_TRYING) { + VB2_DEBUG("Trying new FW; skip kernel version roll-forward.\n"); + return rv; + } + + /* + * Limit kernel version rollforward if needed. Can't limit kernel + * version to less than the version currently in the TPM. That is, + * we're limiting rollforward, not allowing rollback. + */ + if (max_rollforward < sd->kernel_version_secdata) + max_rollforward = sd->kernel_version_secdata; + + if (sd->kernel_version > max_rollforward) { + VB2_DEBUG("Limiting TPM kernel version roll-forward " + "to %#x < %#x\n", + max_rollforward, sd->kernel_version); + + sd->kernel_version = max_rollforward; + } + + if (sd->kernel_version > sd->kernel_version_secdata) { + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_VERSIONS, + sd->kernel_version); + } + + return rv; +} + +int vb2api_is_developer_signed(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + + if (!sd->kernel_key_offset || !sd->kernel_key_size) { + VB2_DEBUG("ERROR: Cannot call this before kernel_phase1!\n"); + return 0; + } + + struct vb2_public_key key; + if (vb2_unpack_key(&key, vb2_member_of(sd, sd->kernel_key_offset))) + return 0; + + /* This is a debugging aid, not a security-relevant feature. There's no + reason to hardcode the whole key or waste time computing a hash. Just + spot check the starting bytes of the pseudorandom part of the key. */ + uint32_t devkey_n0inv = ctx->flags & VB2_CONTEXT_RECOVERY_MODE ? + 0x18cebcf5 : /* recovery_key.vbpubk @0x24 */ + 0xe0cd87d9; /* kernel_subkey.vbpubk @0x24 */ + + if (key.n0inv == devkey_n0inv) + return 1; + + return 0; +} + +vb2_error_t vb2api_kernel_phase1(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + struct vb2_workbuf wb; + struct vb2_packed_key *packed_key; + uint32_t flags; + vb2_error_t rv; + + vb2_workbuf_from_ctx(ctx, &wb); + + /* + * Init secdata_fwmp spaces. No need to init secdata_firmware or + * secdata_kernel, since they were already read during firmware + * verification. Ignore errors in recovery mode. + */ + rv = vb2_secdata_fwmp_init(ctx); + if (rv && !(ctx->flags & VB2_CONTEXT_RECOVERY_MODE)) { + VB2_DEBUG("TPM: init secdata_fwmp returned %#x\n", rv); + vb2api_fail(ctx, VB2_RECOVERY_SECDATA_FWMP_INIT, rv); + return rv; + } + + /* Initialize experimental feature flags while in normal RW path. */ + if (!(ctx->flags & VB2_CONTEXT_RECOVERY_MODE)) { + flags = vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_FLAGS); + flags &= ~VB2_SECDATA_KERNEL_FLAG_PHONE_RECOVERY_DISABLED; + flags |= VB2_SECDATA_KERNEL_FLAG_PHONE_RECOVERY_UI_DISABLED; + flags &= ~VB2_SECDATA_KERNEL_FLAG_DIAGNOSTIC_UI_DISABLED; + flags |= VB2_SECDATA_KERNEL_FLAG_HWCRYPTO_ALLOWED; + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_FLAGS, flags); + } + + /* Read kernel version from secdata. */ + sd->kernel_version_secdata = + vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_VERSIONS); + sd->kernel_version = sd->kernel_version_secdata; + + vb2_fill_dev_boot_flags(ctx); + + /* Find the key to use to verify the kernel keyblock */ + if ((ctx->flags & VB2_CONTEXT_RECOVERY_MODE)) { + /* Load recovery key from GBB. */ + rv = vb2_gbb_read_recovery_key(ctx, &packed_key, NULL, &wb); + if (rv) { + if (ctx->boot_mode != VB2_BOOT_MODE_BROKEN_SCREEN) + VB2_DIE("GBB read recovery key failed.\n"); + else + /* + * If we're headed for the BROKEN screen, + * we won't need the recovery key. Just + * short-circuit with success. + */ + return VB2_SUCCESS; + } + } else { + /* Kernel subkey from firmware preamble */ + struct vb2_fw_preamble *pre; + + /* Make sure we have a firmware preamble loaded */ + if (!sd->preamble_size) + return VB2_ERROR_API_KPHASE1_PREAMBLE; + + pre = (struct vb2_fw_preamble *) + vb2_member_of(sd, sd->preamble_offset); + packed_key = &pre->kernel_subkey; + } + + sd->kernel_key_offset = vb2_offset_of(sd, packed_key); + sd->kernel_key_size = packed_key->key_offset + packed_key->key_size; + + vb2_set_workbuf_used(ctx, vb2_offset_of(sd, wb.buf)); + + if (vb2api_is_developer_signed(ctx)) + VB2_DEBUG("This is developer-signed firmware.\n"); + + return VB2_SUCCESS; +} diff --git a/firmware/2lib/2misc.c b/firmware/2lib/2misc.c new file mode 100644 index 0000000..6e92690 --- /dev/null +++ b/firmware/2lib/2misc.c @@ -0,0 +1,742 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Misc functions which need access to vb2_context but are not public APIs + */ + +#include "2api.h" +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2recovery_reasons.h" +#include "2rsa.h" +#include "2secdata.h" +#include "2sha.h" +#include "2struct.h" +#include "2sysincludes.h" +#include "vboot_api.h" +#include "vboot_struct.h" + +vb2_error_t vb2_validate_gbb_signature(uint8_t *sig) +{ + const static uint8_t sig_xor[VB2_GBB_SIGNATURE_SIZE] = + VB2_GBB_XOR_SIGNATURE; + int i; + for (i = 0; i < VB2_GBB_SIGNATURE_SIZE; i++) { + if (sig[i] != (sig_xor[i] ^ VB2_GBB_XOR_CHARS[i])) + return VB2_ERROR_GBB_MAGIC; + } + return VB2_SUCCESS; +} + +test_mockable +struct vb2_gbb_header *vb2_get_gbb(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + return (struct vb2_gbb_header *)((void *)sd + sd->gbb_offset); +} + +uint32_t vb2api_get_firmware_size(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + if (!sd->preamble_size) + return 0; + + const struct vb2_fw_preamble *pre = (const struct vb2_fw_preamble *) + vb2_member_of(sd, sd->preamble_offset); + return pre->body_signature.data_size; +} + +test_mockable +vb2_error_t vb2_read_gbb_header(struct vb2_context *ctx, + struct vb2_gbb_header *gbb) +{ + /* Read the entire header */ + VB2_TRY(vb2ex_read_resource(ctx, VB2_RES_GBB, 0, gbb, sizeof(*gbb))); + + /* Make sure it's really a GBB */ + VB2_TRY(vb2_validate_gbb_signature(gbb->signature)); + + /* Check for compatible version */ + if (gbb->major_version != VB2_GBB_MAJOR_VER) + return VB2_ERROR_GBB_VERSION; + + /* Current code is not backwards-compatible to 1.1 headers or older */ + if (gbb->minor_version < VB2_GBB_MINOR_VER) + return VB2_ERROR_GBB_TOO_OLD; + + /* + * Header size should be at least as big as we expect. It could be + * bigger, if the header has grown. + */ + if (gbb->header_size < sizeof(*gbb)) + return VB2_ERROR_GBB_HEADER_SIZE; + + return VB2_SUCCESS; +} + +test_mockable +void vb2api_fail(struct vb2_context *ctx, uint8_t reason, uint8_t subcode) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + + /* If NV data hasn't been initialized, initialize it now */ + if (!(sd->status & VB2_SD_STATUS_NV_INIT)) + vb2_nv_init(ctx); + + /* See if we were far enough in the boot process to choose a slot */ + if (sd->status & VB2_SD_STATUS_CHOSE_SLOT) { + + /* Boot failed */ + vb2_nv_set(ctx, VB2_NV_FW_RESULT, VB2_FW_RESULT_FAILURE); + + /* Use up remaining tries */ + vb2_nv_set(ctx, VB2_NV_TRY_COUNT, 0); + + /* + * Try the other slot next time. We'll alternate + * between slots, which may help if one or both slots is + * flaky. + */ + vb2_nv_set(ctx, VB2_NV_TRY_NEXT, 1 - sd->fw_slot); + + /* + * If we didn't try the other slot last boot, or we tried it + * and it didn't fail, try it next boot. + */ + if (sd->last_fw_slot != 1 - sd->fw_slot || + sd->last_fw_result != VB2_FW_RESULT_FAILURE) + return; + } + + /* + * If we're still here, we failed before choosing a slot, or both + * this slot and the other slot failed in successive boots. So we + * need to go to recovery. + * + * Set a recovery reason and subcode only if they're not already set. + * If recovery is already requested, it's a more specific error code + * than later code is providing and we shouldn't overwrite it. + */ + VB2_DEBUG("Need recovery, reason: %#x / %#x\n", reason, subcode); + if (!vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST)) { + vb2_nv_set(ctx, VB2_NV_RECOVERY_REQUEST, reason); + vb2_nv_set(ctx, VB2_NV_RECOVERY_SUBCODE, subcode); + } +} + +void vb2_check_recovery(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + uint32_t reason = vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST); + uint32_t subcode = vb2_nv_get(ctx, VB2_NV_RECOVERY_SUBCODE); + + VB2_DEBUG("Recovery reason from previous boot: %#x / %#x\n", + reason, subcode); + + /* + * Sets the current recovery request, unless there's already been a + * failure earlier in the boot process. + */ + if (!sd->recovery_reason) + sd->recovery_reason = reason; + + if (ctx->flags & VB2_CONTEXT_FORCE_RECOVERY_MODE) { + VB2_DEBUG("Recovery was requested manually\n"); + if (subcode && !sd->recovery_reason && + subcode != VB2_RECOVERY_TRAIN_AND_REBOOT) + /* + * Recovery was requested at 'broken' screen. + * Promote subcode to reason. + */ + sd->recovery_reason = subcode; + else + /* Recovery was forced. Override recovery reason */ + sd->recovery_reason = VB2_RECOVERY_RO_MANUAL; + } + + /* If recovery reason is non-zero, tell caller we need recovery mode */ + if (sd->recovery_reason) { + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + VB2_DEBUG("We have a recovery request: %#x / %#x\n", + sd->recovery_reason, + vb2_nv_get(ctx, VB2_NV_RECOVERY_SUBCODE)); + } + + sd->status |= VB2_SD_STATUS_RECOVERY_DECIDED; +} + +vb2_error_t vb2_fw_init_gbb(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + struct vb2_gbb_header *gbb; + struct vb2_workbuf wb; + + vb2_workbuf_from_ctx(ctx, &wb); + + /* Read GBB into next chunk of work buffer */ + gbb = vb2_workbuf_alloc(&wb, sizeof(*gbb)); + if (!gbb) + return VB2_ERROR_GBB_WORKBUF; + + VB2_TRY(vb2_read_gbb_header(ctx, gbb)); + + /* Keep on the work buffer permanently */ + sd->gbb_offset = vb2_offset_of(sd, gbb); + vb2_set_workbuf_used(ctx, vb2_offset_of(sd, wb.buf)); + + /* Set any context flags based on GBB flags */ + if (gbb->flags & VB2_GBB_FLAG_DISABLE_FWMP) + ctx->flags |= VB2_CONTEXT_NO_SECDATA_FWMP; + + return VB2_SUCCESS; +} + +vb2_error_t vb2_check_dev_switch(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + struct vb2_gbb_header *gbb = vb2_get_gbb(ctx); + uint32_t flags = 0; + uint32_t old_flags; + int is_dev = 0; + int valid_secdata = 1; + vb2_error_t rv; + + /* Check whether secdata_firmware is initialized */ + if (!(sd->status & VB2_SD_STATUS_SECDATA_FIRMWARE_INIT)) + valid_secdata = 0; + + /* Read secure flags */ + flags = vb2_secdata_firmware_get(ctx, VB2_SECDATA_FIRMWARE_FLAGS); + old_flags = flags; + + /* Handle dev disable request */ + if (valid_secdata && vb2_nv_get(ctx, VB2_NV_DISABLE_DEV_REQUEST)) { + flags &= ~VB2_SECDATA_FIRMWARE_FLAG_DEV_MODE; + + /* Clear the request */ + vb2_nv_set(ctx, VB2_NV_DISABLE_DEV_REQUEST, 0); + } + + /* + * Check if we've been asked by the caller to disable dev mode. Note + * that hardware switch and GBB flag will take precedence over this. + */ + if (ctx->flags & VB2_CONTEXT_DISABLE_DEVELOPER_MODE) + flags &= ~VB2_SECDATA_FIRMWARE_FLAG_DEV_MODE; + + /* Check virtual dev switch */ + if (flags & VB2_SECDATA_FIRMWARE_FLAG_DEV_MODE) + is_dev = 1; + + /* Check if GBB is forcing dev mode */ + if (gbb->flags & VB2_GBB_FLAG_FORCE_DEV_SWITCH_ON) + is_dev = 1; + + /* Handle whichever mode we end up in */ + if (is_dev) { + /* Developer mode */ + sd->flags |= VB2_SD_FLAG_DEV_MODE_ENABLED; + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; + + flags |= VB2_SECDATA_FIRMWARE_FLAG_LAST_BOOT_DEVELOPER; + } else { + /* Normal mode */ + flags &= ~VB2_SECDATA_FIRMWARE_FLAG_LAST_BOOT_DEVELOPER; + + /* + * Disable dev_boot_* flags. This ensures they will be + * initially disabled if the user later transitions back into + * developer mode. + */ + vb2_nv_set(ctx, VB2_NV_DEV_BOOT_EXTERNAL, 0); + vb2_nv_set(ctx, VB2_NV_DEV_BOOT_ALTFW, 0); + vb2_nv_set(ctx, VB2_NV_DEV_BOOT_SIGNED_ONLY, 0); + vb2_nv_set(ctx, VB2_NV_DEV_DEFAULT_BOOT, 0); + } + + if (ctx->flags & VB2_CONTEXT_FORCE_WIPEOUT_MODE) + vb2_nv_set(ctx, VB2_NV_REQ_WIPEOUT, 1); + + if (flags != old_flags) { + /* + * Just changed dev mode state. Clear TPM owner. This must be + * done here instead of simply passing a flag to + * vb2_check_tpm_clear(), because we don't want to update + * last_boot_developer and then fail to clear the TPM owner. + * + * Note that we do this even if secdata_firmware is having + * issues, since the TPM owner and secdata_firmware may be + * independent, and we want the owner to be cleared if *this + * boot* is different than the last one (perhaps due to GBB or + * hardware override). + */ + rv = vb2ex_tpm_clear_owner(ctx); + /* Check for failure to clear owner */ + if (valid_secdata && rv) { + /* + * Note that this truncates rv to 8 bit. Which + * is not as useful as the full error code, but + * we don't have NVRAM space to store the full + * 32-bit code. + */ + vb2api_fail(ctx, VB2_RECOVERY_TPM_CLEAR_OWNER, rv); + return rv; + } + + /* Save new flags */ + vb2_secdata_firmware_set(ctx, VB2_SECDATA_FIRMWARE_FLAGS, + flags); + } + + return VB2_SUCCESS; +} + +vb2_error_t vb2_check_tpm_clear(struct vb2_context *ctx) +{ + vb2_error_t rv; + + /* Check if we've been asked to clear the owner */ + if (!vb2_nv_get(ctx, VB2_NV_CLEAR_TPM_OWNER_REQUEST)) + return VB2_SUCCESS; /* No need to clear */ + + /* Request applies one time only */ + vb2_nv_set(ctx, VB2_NV_CLEAR_TPM_OWNER_REQUEST, 0); + + /* Try clearing */ + rv = vb2ex_tpm_clear_owner(ctx); + if (rv) { + /* + * Note that this truncates rv to 8 bit. Which is not as + * useful as the full error code, but we don't have NVRAM space + * to store the full 32-bit code. + */ + vb2api_fail(ctx, VB2_RECOVERY_TPM_CLEAR_OWNER, rv); + return rv; + } + + /* Clear successful */ + vb2_nv_set(ctx, VB2_NV_CLEAR_TPM_OWNER_DONE, 1); + return VB2_SUCCESS; +} + +vb2_error_t vb2_select_fw_slot(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + uint32_t tries; + + /* Get result of last boot */ + sd->last_fw_slot = vb2_nv_get(ctx, VB2_NV_FW_TRIED); + sd->last_fw_result = vb2_nv_get(ctx, VB2_NV_FW_RESULT); + + /* Save to the previous result fields in NV storage */ + vb2_nv_set(ctx, VB2_NV_FW_PREV_TRIED, sd->last_fw_slot); + vb2_nv_set(ctx, VB2_NV_FW_PREV_RESULT, sd->last_fw_result); + + /* Clear result, since we don't know what will happen this boot */ + vb2_nv_set(ctx, VB2_NV_FW_RESULT, VB2_FW_RESULT_UNKNOWN); + + /* Get slot to try */ + sd->fw_slot = vb2_nv_get(ctx, VB2_NV_TRY_NEXT); + + /* Check try count */ + tries = vb2_nv_get(ctx, VB2_NV_TRY_COUNT); + + if (sd->last_fw_result == VB2_FW_RESULT_TRYING && + sd->last_fw_slot == sd->fw_slot && + tries == 0) { + /* + * We used up our last try on the previous boot, so fall back + * to the other slot this boot. + */ + sd->fw_slot = 1 - sd->fw_slot; + vb2_nv_set(ctx, VB2_NV_TRY_NEXT, sd->fw_slot); + } + + if (tries > 0) { + /* Still trying this firmware */ + vb2_nv_set(ctx, VB2_NV_FW_RESULT, VB2_FW_RESULT_TRYING); + + /* Decrement non-zero try count, unless told not to */ + if (!(ctx->flags & VB2_CONTEXT_NOFAIL_BOOT)) + vb2_nv_set(ctx, VB2_NV_TRY_COUNT, tries - 1); + } + + /* Store the slot we're trying */ + vb2_nv_set(ctx, VB2_NV_FW_TRIED, sd->fw_slot); + + /* Set context flag if we're using slot B */ + if (sd->fw_slot) + ctx->flags |= VB2_CONTEXT_FW_SLOT_B; + + /* Set status flag */ + sd->status |= VB2_SD_STATUS_CHOSE_SLOT; + + return VB2_SUCCESS; +} + +vb2_error_t vb2api_enable_developer_mode(struct vb2_context *ctx) +{ + if (ctx->boot_mode != VB2_BOOT_MODE_MANUAL_RECOVERY) { + VB2_DEBUG("ERROR: Can only enable developer mode from manual " + "recovery mode\n"); + return VB2_ERROR_API_ENABLE_DEV_NOT_ALLOWED; + } + + uint32_t flags; + + VB2_DEBUG("Enabling developer mode...\n"); + + flags = vb2_secdata_firmware_get(ctx, VB2_SECDATA_FIRMWARE_FLAGS); + flags |= VB2_SECDATA_FIRMWARE_FLAG_DEV_MODE; + vb2_secdata_firmware_set(ctx, VB2_SECDATA_FIRMWARE_FLAGS, flags); + + VB2_DEBUG("Mode change will take effect on next reboot\n"); + + return VB2_SUCCESS; +} + +vb2_error_t vb2api_disable_developer_mode(struct vb2_context *ctx) +{ + if (vb2api_gbb_get_flags(ctx) & VB2_GBB_FLAG_FORCE_DEV_SWITCH_ON) { + VB2_DEBUG("ERROR: dev mode forced by GBB flag\n"); + return VB2_ERROR_API_DISABLE_DEV_NOT_ALLOWED; + } + + VB2_DEBUG("Leaving dev mode\n"); + vb2_nv_set(ctx, VB2_NV_DISABLE_DEV_REQUEST, 1); + return VB2_SUCCESS; +} + +void vb2api_request_diagnostics(struct vb2_context *ctx) { + vb2_nv_set(ctx, VB2_NV_DIAG_REQUEST, 1); + VB2_DEBUG("Diagnostics requested\n"); +} + +void vb2_clear_recovery(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + uint32_t reason = vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST); + uint32_t subcode = vb2_nv_get(ctx, VB2_NV_RECOVERY_SUBCODE); + + if (reason || subcode) + VB2_DEBUG("Clearing recovery request: %#x / %#x %s\n", + reason, subcode, + vb2_get_recovery_reason_string(reason)); + + /* Clear recovery request for both the manual recovery and the broken + screen. */ + vb2_nv_set(ctx, VB2_NV_RECOVERY_REQUEST, VB2_RECOVERY_NOT_REQUESTED); + vb2_nv_set(ctx, VB2_NV_RECOVERY_SUBCODE, 0); + + /* But stow recovery reason as subcode for the broken screen. */ + if (ctx->boot_mode == VB2_BOOT_MODE_BROKEN_SCREEN) { + VB2_DEBUG("Stow recovery reason as subcode (%#x)\n", + sd->recovery_reason); + vb2_nv_set(ctx, VB2_NV_RECOVERY_SUBCODE, sd->recovery_reason); + } +} + +int vb2api_need_reboot_for_display(struct vb2_context *ctx) +{ + if (!(vb2_get_sd(ctx)->flags & VB2_SD_FLAG_DISPLAY_AVAILABLE)) { + VB2_DEBUG("Need reboot to initialize display\n"); + vb2_nv_set(ctx, VB2_NV_DISPLAY_REQUEST, 1); + return 1; + } + return 0; +} + +uint32_t vb2api_get_recovery_reason(struct vb2_context *ctx) +{ + return vb2_get_sd(ctx)->recovery_reason; +} + +uint32_t vb2api_get_locale_id(struct vb2_context *ctx) +{ + return vb2_nv_get(ctx, VB2_NV_LOCALIZATION_INDEX); +} + +void vb2api_set_locale_id(struct vb2_context *ctx, uint32_t locale_id) +{ + vb2_nv_set(ctx, VB2_NV_LOCALIZATION_INDEX, locale_id); +} + +void vb2api_export_vbsd(struct vb2_context *ctx, void *dest) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + VbSharedDataHeader *vbsd = (void *)dest; + + /* Initialize with boilerplate fields. */ + memset(vbsd, 0, VB2_VBSD_SIZE); + vbsd->magic = VB_SHARED_DATA_MAGIC; + vbsd->struct_version = VB_SHARED_DATA_VERSION; + vbsd->struct_size = VB2_VBSD_SIZE; + vbsd->data_size = VB2_VBSD_SIZE; + vbsd->data_used = VB2_VBSD_SIZE; + vbsd->flags |= VBSD_BOOT_FIRMWARE_VBOOT2; + + /* Translate vboot2 flags and fields into vboot1. */ + if (ctx->flags & VB2_CONTEXT_EC_SYNC_SUPPORTED) + vbsd->flags |= VBSD_EC_SOFTWARE_SYNC; + if (ctx->flags & VB2_CONTEXT_NVDATA_V2) + vbsd->flags |= VBSD_NVDATA_V2; + if (ctx->flags & VB2_CONTEXT_DEVELOPER_MODE) + vbsd->flags |= VBSD_BOOT_DEV_SWITCH_ON; + if (ctx->flags & VB2_CONTEXT_FORCE_RECOVERY_MODE) + vbsd->flags |= VBSD_BOOT_REC_SWITCH_ON; + if (sd->flags & VB2_SD_FLAG_KERNEL_SIGNED) + vbsd->flags |= VBSD_KERNEL_KEY_VERIFIED; + + vbsd->fw_version_tpm_start = sd->fw_version_secdata; + vbsd->fw_version_tpm = sd->fw_version; + vbsd->kernel_version_tpm_start = sd->kernel_version_secdata; + vbsd->kernel_version_tpm = sd->kernel_version; + + vbsd->recovery_reason = sd->recovery_reason; + if (sd->recovery_reason) + vbsd->firmware_index = 0xff; + else + vbsd->firmware_index = sd->fw_slot; +} +_Static_assert(VB2_VBSD_SIZE == sizeof(VbSharedDataHeader), + "VB2_VBSD_SIZE incorrect"); + +int vb2api_phone_recovery_enabled(struct vb2_context *ctx) +{ + return !(vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_FLAGS) & + VB2_SECDATA_KERNEL_FLAG_PHONE_RECOVERY_DISABLED); +} + +int vb2api_phone_recovery_ui_enabled(struct vb2_context *ctx) +{ + /* + * When phone recovery functionality is disabled, return 0 even if + * PHONE_RECOVERY_UI_DISABLED is not set. + */ + return vb2api_phone_recovery_enabled(ctx) && + !(vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_FLAGS) & + VB2_SECDATA_KERNEL_FLAG_PHONE_RECOVERY_UI_DISABLED); +} + +int vb2api_diagnostic_ui_enabled(struct vb2_context *ctx) +{ + return !(vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_FLAGS) & + VB2_SECDATA_KERNEL_FLAG_DIAGNOSTIC_UI_DISABLED); +} + +enum vb2_dev_default_boot_target vb2api_get_dev_default_boot_target( + struct vb2_context *ctx) +{ + struct vb2_gbb_header *gbb = vb2_get_gbb(ctx); + + if (gbb->flags & VB2_GBB_FLAG_DEFAULT_DEV_BOOT_ALTFW) + return VB2_DEV_DEFAULT_BOOT_TARGET_ALTFW; + + switch (vb2_nv_get(ctx, VB2_NV_DEV_DEFAULT_BOOT)) { + case VB2_DEV_DEFAULT_BOOT_TARGET_EXTERNAL: + if (ctx->flags & VB2_CONTEXT_DEV_BOOT_EXTERNAL_ALLOWED) + return VB2_DEV_DEFAULT_BOOT_TARGET_EXTERNAL; + break; + + case VB2_DEV_DEFAULT_BOOT_TARGET_ALTFW: + if (ctx->flags & VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED) + return VB2_DEV_DEFAULT_BOOT_TARGET_ALTFW; + break; + } + + return VB2_DEV_DEFAULT_BOOT_TARGET_INTERNAL; +} + +void vb2_fill_dev_boot_flags(struct vb2_context *ctx) +{ + struct vb2_gbb_header *gbb = vb2_get_gbb(ctx); + + if (!vb2_secdata_fwmp_get_flag(ctx, + VB2_SECDATA_FWMP_DEV_DISABLE_BOOT) || + (gbb->flags & VB2_GBB_FLAG_FORCE_DEV_SWITCH_ON)) + ctx->flags |= VB2_CONTEXT_DEV_BOOT_ALLOWED; + + if (vb2_nv_get(ctx, VB2_NV_DEV_BOOT_EXTERNAL) || + (gbb->flags & VB2_GBB_FLAG_FORCE_DEV_BOOT_USB) || + vb2_secdata_fwmp_get_flag(ctx, + VB2_SECDATA_FWMP_DEV_ENABLE_EXTERNAL)) + ctx->flags |= VB2_CONTEXT_DEV_BOOT_EXTERNAL_ALLOWED; + + if (vb2_nv_get(ctx, VB2_NV_DEV_BOOT_ALTFW) || + (gbb->flags & VB2_GBB_FLAG_FORCE_DEV_BOOT_ALTFW) || + vb2_secdata_fwmp_get_flag(ctx, VB2_SECDATA_FWMP_DEV_ENABLE_ALTFW)) + ctx->flags |= VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED; +} + +int vb2api_use_short_dev_screen_delay(struct vb2_context *ctx) +{ + struct vb2_gbb_header *gbb = vb2_get_gbb(ctx); + return gbb->flags & VB2_GBB_FLAG_DEV_SCREEN_SHORT_DELAY; +} + +static void snprint_sha1_sum(struct vb2_packed_key *key, + char *dest, size_t dest_size) +{ + uint8_t *buf = ((uint8_t *)key) + key->key_offset; + uint64_t buflen = key->key_size; + uint8_t digest[VB2_SHA1_DIGEST_SIZE]; + int32_t used = 0; + int i; + + vb2_digest_buffer(buf, buflen, VB2_HASH_SHA1, digest, sizeof(digest)); + for (i = 0; i < sizeof(digest); i++) + if (used < dest_size) + used += snprintf(dest + used, dest_size - used, + "%02x", digest[i]); + dest[dest_size - 1] = '\0'; +} + +#define DEBUG_INFO_MAX_LENGTH 1024 + +#define DEBUG_INFO_APPEND(format, args...) do { \ + if (used < DEBUG_INFO_MAX_LENGTH) \ + used += snprintf(buf + used, DEBUG_INFO_MAX_LENGTH - used, \ + format, ## args); \ +} while (0) + +char *vb2api_get_debug_info(struct vb2_context *ctx) +{ + char *buf; + uint32_t used = 0; + + struct vb2_shared_data *sd = vb2_get_sd(ctx); + struct vb2_gbb_header *gbb = vb2_get_gbb(ctx); + struct vb2_workbuf wb; + char sha1sum[VB2_SHA1_DIGEST_SIZE * 2 + 1]; + + vb2_error_t rv; + uint32_t i; + + buf = malloc(DEBUG_INFO_MAX_LENGTH + 1); + if (buf == NULL) + return NULL; + + vb2_workbuf_from_ctx(ctx, &wb); + + /* Add hardware ID */ + { + char hwid[VB2_GBB_HWID_MAX_SIZE]; + uint32_t size = sizeof(hwid); + rv = vb2api_gbb_read_hwid(ctx, hwid, &size); + if (rv) + strcpy(hwid, "{INVALID}"); + DEBUG_INFO_APPEND("HWID: %s", hwid); + } + + /* Add recovery reason and subcode */ + i = vb2_nv_get(ctx, VB2_NV_RECOVERY_SUBCODE); + DEBUG_INFO_APPEND("\nrecovery_reason: %#.2x / %#.2x %s", + sd->recovery_reason, i, + vb2_get_recovery_reason_string(sd->recovery_reason)); + + /* Add vb2_context and vb2_shared_data flags */ + DEBUG_INFO_APPEND("\ncontext.flags: %#.16" PRIx64, ctx->flags); + DEBUG_INFO_APPEND("\nshared_data.flags: %#.8x", sd->flags); + DEBUG_INFO_APPEND("\nshared_data.status: %#.8x", sd->status); + + /* Add raw contents of nvdata */ + DEBUG_INFO_APPEND("\nnvdata:"); + if (vb2_nv_get_size(ctx) > 16) /* Multi-line starts on next line */ + DEBUG_INFO_APPEND("\n "); + for (i = 0; i < vb2_nv_get_size(ctx); i++) { + /* Split into 16-byte blocks */ + if (i > 0 && i % 16 == 0) + DEBUG_INFO_APPEND("\n "); + DEBUG_INFO_APPEND(" %02x", ctx->nvdata[i]); + } + + /* Add dev_boot_usb flag */ + i = vb2_nv_get(ctx, VB2_NV_DEV_BOOT_EXTERNAL); + DEBUG_INFO_APPEND("\ndev_boot_usb: %d", i); + + /* Add dev_boot_altfw flag */ + i = vb2_nv_get(ctx, VB2_NV_DEV_BOOT_ALTFW); + DEBUG_INFO_APPEND("\ndev_boot_altfw: %d", i); + + /* Add dev_default_boot flag */ + i = vb2_nv_get(ctx, VB2_NV_DEV_DEFAULT_BOOT); + DEBUG_INFO_APPEND("\ndev_default_boot: %d", i); + + /* Add dev_boot_signed_only flag */ + i = vb2_nv_get(ctx, VB2_NV_DEV_BOOT_SIGNED_ONLY); + DEBUG_INFO_APPEND("\ndev_boot_signed_only: %d", i); + + /* Add TPM versions */ + DEBUG_INFO_APPEND("\nTPM: fwver=%#.8x kernver=%#.8x", + sd->fw_version_secdata, sd->kernel_version_secdata); + + /* Add GBB flags */ + DEBUG_INFO_APPEND("\ngbb.flags: %#.8x", gbb->flags); + + /* Add sha1sum for Root & Recovery keys */ + { + struct vb2_packed_key *key; + struct vb2_workbuf wblocal = wb; + rv = vb2_gbb_read_root_key(ctx, &key, NULL, &wblocal); + if (rv == VB2_SUCCESS) { + snprint_sha1_sum(key, sha1sum, sizeof(sha1sum)); + DEBUG_INFO_APPEND("\ngbb.rootkey: %s", sha1sum); + } + } + + { + struct vb2_packed_key *key; + struct vb2_workbuf wblocal = wb; + rv = vb2_gbb_read_recovery_key(ctx, &key, NULL, &wblocal); + if (rv == VB2_SUCCESS) { + snprint_sha1_sum(key, sha1sum, sizeof(sha1sum)); + DEBUG_INFO_APPEND("\ngbb.recovery_key: %s", sha1sum); + } + } + + /* If we're in dev-mode, show the kernel subkey that we expect, too. */ + if (!(ctx->flags & VB2_CONTEXT_RECOVERY_MODE) && + sd->kernel_key_offset) { + struct vb2_packed_key *key = + vb2_member_of(sd, sd->kernel_key_offset); + snprint_sha1_sum(key, sha1sum, sizeof(sha1sum)); + DEBUG_INFO_APPEND("\nkernel_subkey: %s", sha1sum); + } + + buf[DEBUG_INFO_MAX_LENGTH] = '\0'; + return buf; +} + +void vb2_set_boot_mode(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + struct vb2_gbb_header *gbb = vb2_get_gbb(ctx); + + /* Cast boot mode to non-constant and assign */ + enum vb2_boot_mode *boot_mode = (enum vb2_boot_mode *)&ctx->boot_mode; + *boot_mode = VB2_BOOT_MODE_NORMAL; + + /* + * The only way to pass this check and proceed to the recovery process + * is to physically request a recovery (a.k.a. manual recovery). All + * other recovery requests including manual recovery requested by a + * (compromised) host will end up with 'broken' screen. + */ + if ((ctx->flags & VB2_CONTEXT_FORCE_RECOVERY_MODE) && + !(ctx->flags & VB2_CONTEXT_NO_BOOT) && + (ctx->flags & VB2_CONTEXT_EC_TRUSTED)) { + *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + } else if (sd->recovery_reason) { + if (gbb->flags & VB2_GBB_FLAG_FORCE_MANUAL_RECOVERY) + *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + else + *boot_mode = VB2_BOOT_MODE_BROKEN_SCREEN; + } else if (vb2api_diagnostic_ui_enabled(ctx) && + vb2_nv_get(ctx, VB2_NV_DIAG_REQUEST)) { + *boot_mode = VB2_BOOT_MODE_DIAGNOSTICS; + } else if (ctx->flags & VB2_CONTEXT_DEVELOPER_MODE) { + *boot_mode = VB2_BOOT_MODE_DEVELOPER; + } +} diff --git a/firmware/2lib/2nvstorage.c b/firmware/2lib/2nvstorage.c new file mode 100644 index 0000000..4fd9808 --- /dev/null +++ b/firmware/2lib/2nvstorage.c @@ -0,0 +1,447 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Non-volatile storage routines */ + +#include "2common.h" +#include "2crc8.h" +#include "2misc.h" +#include "2nvstorage_fields.h" +#include "2nvstorage.h" +#include "2sysincludes.h" + +static void vb2_nv_regen_crc(struct vb2_context *ctx) +{ + const int offs = ctx->flags & VB2_CONTEXT_NVDATA_V2 ? + VB2_NV_OFFS_CRC_V2 : VB2_NV_OFFS_CRC_V1; + + ctx->nvdata[offs] = vb2_crc8(ctx->nvdata, offs); + ctx->flags |= VB2_CONTEXT_NVDATA_CHANGED; +} + +int vb2_nv_get_size(const struct vb2_context *ctx) +{ + return ctx->flags & VB2_CONTEXT_NVDATA_V2 ? + VB2_NVDATA_SIZE_V2 : VB2_NVDATA_SIZE; +} + +/** + * Check the CRC of the non-volatile storage context. + * + * Use this if reading from non-volatile storage may be flaky, and you want to + * retry reading it several times. + * + * This may be called before vb2_context_init(). + * + * @param ctx Context pointer + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb2_nv_check_crc(const struct vb2_context *ctx) +{ + const uint8_t *p = ctx->nvdata; + const int offs = ctx->flags & VB2_CONTEXT_NVDATA_V2 ? + VB2_NV_OFFS_CRC_V2 : VB2_NV_OFFS_CRC_V1; + const int sig = ctx->flags & VB2_CONTEXT_NVDATA_V2 ? + VB2_NV_HEADER_SIGNATURE_V2 : VB2_NV_HEADER_SIGNATURE_V1; + + /* Check header */ + if (sig != (p[VB2_NV_OFFS_HEADER] & VB2_NV_HEADER_SIGNATURE_MASK)) + return VB2_ERROR_NV_HEADER; + + /* Check CRC */ + if (vb2_crc8(p, offs) != p[offs]) + return VB2_ERROR_NV_CRC; + + return VB2_SUCCESS; +} + +void vb2_nv_init(struct vb2_context *ctx) +{ + const int sig = ctx->flags & VB2_CONTEXT_NVDATA_V2 ? + VB2_NV_HEADER_SIGNATURE_V2 : VB2_NV_HEADER_SIGNATURE_V1; + struct vb2_shared_data *sd = vb2_get_sd(ctx); + uint8_t *p = ctx->nvdata; + + + /* Check data for consistency */ + if (vb2_nv_check_crc(ctx) != VB2_SUCCESS) { + /* Data is inconsistent (bad CRC or header); reset defaults */ + memset(p, 0, VB2_NVDATA_SIZE_V2); + p[VB2_NV_OFFS_HEADER] = (sig | + VB2_NV_HEADER_FW_SETTINGS_RESET | + VB2_NV_HEADER_KERNEL_SETTINGS_RESET); + + /* Regenerate CRC */ + vb2_nv_regen_crc(ctx); + + /* Set status flag. */ + sd->status |= VB2_SD_STATUS_NV_REINIT; + + /* TODO: unit test for status flag being set */ + } else { +#ifndef CHROMEOS_ENVIRONMENT + /* Always clear this on first reboot that didn't need reinit. */ + vb2_nv_set(ctx, VB2_NV_FIRMWARE_SETTINGS_RESET, 0); +#endif + } + + sd->status |= VB2_SD_STATUS_NV_INIT; +} + +/* Macro for vb2_nv_get() single-bit settings to reduce duplicate code. */ +#define GETBIT(offs, mask) (p[offs] & mask ? 1 : 0) + +uint32_t vb2_nv_get(struct vb2_context *ctx, enum vb2_nv_param param) +{ + const uint8_t *p = ctx->nvdata; + + /* + * TODO: We could reduce the binary size for this code by #ifdef'ing + * out the params not used by firmware verification. + */ + switch (param) { + case VB2_NV_FIRMWARE_SETTINGS_RESET: + return GETBIT(VB2_NV_OFFS_HEADER, + VB2_NV_HEADER_FW_SETTINGS_RESET); + + case VB2_NV_KERNEL_SETTINGS_RESET: + return GETBIT(VB2_NV_OFFS_HEADER, + VB2_NV_HEADER_KERNEL_SETTINGS_RESET); + + case VB2_NV_DEBUG_RESET_MODE: + return GETBIT(VB2_NV_OFFS_BOOT, VB2_NV_BOOT_DEBUG_RESET); + + case VB2_NV_TRY_NEXT: + return GETBIT(VB2_NV_OFFS_BOOT2, VB2_NV_BOOT2_TRY_NEXT); + + case VB2_NV_TRY_COUNT: + return p[VB2_NV_OFFS_BOOT] & VB2_NV_BOOT_TRY_COUNT_MASK; + + case VB2_NV_FW_TRIED: + return GETBIT(VB2_NV_OFFS_BOOT2, VB2_NV_BOOT2_TRIED); + + case VB2_NV_FW_RESULT: + return p[VB2_NV_OFFS_BOOT2] & VB2_NV_BOOT2_RESULT_MASK; + + case VB2_NV_FW_PREV_TRIED: + return GETBIT(VB2_NV_OFFS_BOOT2, VB2_NV_BOOT2_PREV_TRIED); + + case VB2_NV_FW_PREV_RESULT: + return (p[VB2_NV_OFFS_BOOT2] & VB2_NV_BOOT2_PREV_RESULT_MASK) + >> VB2_NV_BOOT2_PREV_RESULT_SHIFT; + + case VB2_NV_RECOVERY_REQUEST: + return p[VB2_NV_OFFS_RECOVERY]; + + case VB2_NV_DIAG_REQUEST: + return GETBIT(VB2_NV_OFFS_BOOT2, VB2_NV_BOOT2_REQ_DIAG); + + case VB2_NV_RECOVERY_SUBCODE: + return p[VB2_NV_OFFS_RECOVERY_SUBCODE]; + + case VB2_NV_LOCALIZATION_INDEX: + return p[VB2_NV_OFFS_LOCALIZATION]; + + case VB2_NV_KERNEL_FIELD: + return p[VB2_NV_OFFS_KERNEL1] | (p[VB2_NV_OFFS_KERNEL2] << 8); + + case VB2_NV_DEV_BOOT_EXTERNAL: + return GETBIT(VB2_NV_OFFS_DEV, VB2_NV_DEV_FLAG_EXTERNAL); + + case VB2_NV_DEV_BOOT_ALTFW: + return GETBIT(VB2_NV_OFFS_DEV, VB2_NV_DEV_FLAG_LEGACY); + + case VB2_NV_DEV_BOOT_SIGNED_ONLY: + return GETBIT(VB2_NV_OFFS_DEV, VB2_NV_DEV_FLAG_SIGNED_ONLY); + + case VB2_NV_DEV_DEFAULT_BOOT: + return (p[VB2_NV_OFFS_DEV] & VB2_NV_DEV_FLAG_DEFAULT_BOOT) + >> VB2_NV_DEV_DEFAULT_BOOT_SHIFT; + + case VB2_NV_DEV_ENABLE_UDC: + return GETBIT(VB2_NV_OFFS_DEV, VB2_NV_DEV_FLAG_UDC); + + case VB2_NV_DISABLE_DEV_REQUEST: + return GETBIT(VB2_NV_OFFS_BOOT, VB2_NV_BOOT_DISABLE_DEV); + + case VB2_NV_DISPLAY_REQUEST: + return GETBIT(VB2_NV_OFFS_BOOT, VB2_NV_BOOT_DISPLAY_REQUEST); + + case VB2_NV_BACKUP_NVRAM_REQUEST: + return GETBIT(VB2_NV_OFFS_BOOT, VB2_NV_BOOT_BACKUP_NVRAM); + + case VB2_NV_CLEAR_TPM_OWNER_REQUEST: + return GETBIT(VB2_NV_OFFS_TPM, VB2_NV_TPM_CLEAR_OWNER_REQUEST); + + case VB2_NV_CLEAR_TPM_OWNER_DONE: + return GETBIT(VB2_NV_OFFS_TPM, VB2_NV_TPM_CLEAR_OWNER_DONE); + + case VB2_NV_TPM_REQUESTED_REBOOT: + return GETBIT(VB2_NV_OFFS_TPM, VB2_NV_TPM_REBOOTED); + + case VB2_NV_REQ_WIPEOUT: + return GETBIT(VB2_NV_OFFS_HEADER , VB2_NV_HEADER_WIPEOUT); + + case VB2_NV_BOOT_ON_AC_DETECT: + return GETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_BOOT_ON_AC_DETECT); + + case VB2_NV_TRY_RO_SYNC: + return GETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_TRY_RO_SYNC); + + case VB2_NV_BATTERY_CUTOFF_REQUEST: + return GETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_BATTERY_CUTOFF); + + case VB2_NV_KERNEL_MAX_ROLLFORWARD: + return (p[VB2_NV_OFFS_KERNEL_MAX_ROLLFORWARD1] + | (p[VB2_NV_OFFS_KERNEL_MAX_ROLLFORWARD2] << 8) + | (p[VB2_NV_OFFS_KERNEL_MAX_ROLLFORWARD3] << 16) + | ((uint32_t)p[VB2_NV_OFFS_KERNEL_MAX_ROLLFORWARD4] + << 24)); + + case VB2_NV_FW_MAX_ROLLFORWARD: + /* Field only present in V2 */ + if (!(ctx->flags & VB2_CONTEXT_NVDATA_V2)) + return VB2_FW_MAX_ROLLFORWARD_V1_DEFAULT; + + return (p[VB2_NV_OFFS_FW_MAX_ROLLFORWARD1] + | (p[VB2_NV_OFFS_FW_MAX_ROLLFORWARD2] << 8) + | (p[VB2_NV_OFFS_FW_MAX_ROLLFORWARD3] << 16) + | ((uint32_t)p[VB2_NV_OFFS_FW_MAX_ROLLFORWARD4] << 24)); + + case VB2_NV_POST_EC_SYNC_DELAY: + return GETBIT(VB2_NV_OFFS_MISC, + VB2_NV_MISC_POST_EC_SYNC_DELAY); + + case VB2_NV_MINIOS_PRIORITY: + return GETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_MINIOS_PRIORITY); + + case VB2_NV_DEPRECATED_DEV_BOOT_FASTBOOT_FULL_CAP: + case VB2_NV_DEPRECATED_FASTBOOT_UNLOCK_IN_FW: + case VB2_NV_DEPRECATED_ENABLE_ALT_OS_REQUEST: + case VB2_NV_DEPRECATED_DISABLE_ALT_OS_REQUEST: + return 0; + } + + /* + * Put default return outside the switch() instead of in default:, so + * that adding a new param will cause a compiler warning. + */ + return 0; +} + +#undef GETBIT + +/* Macro for vb2_nv_set() single-bit settings to reduce duplicate code. */ +#define SETBIT(offs, mask) \ + { if (value) p[offs] |= mask; else p[offs] &= ~mask; } + +void vb2_nv_set(struct vb2_context *ctx, + enum vb2_nv_param param, + uint32_t value) +{ + uint8_t *p = ctx->nvdata; + + /* If not changing the value, don't regenerate the CRC. */ + if (vb2_nv_get(ctx, param) == value) + return; + + /* + * TODO: We could reduce the binary size for this code by #ifdef'ing + * out the params not used by firmware verification. + */ + switch (param) { + case VB2_NV_FIRMWARE_SETTINGS_RESET: + SETBIT(VB2_NV_OFFS_HEADER, VB2_NV_HEADER_FW_SETTINGS_RESET); + break; + + case VB2_NV_KERNEL_SETTINGS_RESET: + SETBIT(VB2_NV_OFFS_HEADER, VB2_NV_HEADER_KERNEL_SETTINGS_RESET); + break; + + case VB2_NV_DEBUG_RESET_MODE: + SETBIT(VB2_NV_OFFS_BOOT, VB2_NV_BOOT_DEBUG_RESET); + break; + + case VB2_NV_TRY_NEXT: + SETBIT(VB2_NV_OFFS_BOOT2, VB2_NV_BOOT2_TRY_NEXT); + break; + + case VB2_NV_TRY_COUNT: + /* Clip to valid range. */ + if (value > VB2_NV_BOOT_TRY_COUNT_MASK) + value = VB2_NV_BOOT_TRY_COUNT_MASK; + + p[VB2_NV_OFFS_BOOT] &= ~VB2_NV_BOOT_TRY_COUNT_MASK; + p[VB2_NV_OFFS_BOOT] |= (uint8_t)value; + break; + + case VB2_NV_FW_TRIED: + SETBIT(VB2_NV_OFFS_BOOT2, VB2_NV_BOOT2_TRIED); + break; + + case VB2_NV_FW_RESULT: + /* Map out of range values to unknown */ + if (value > VB2_NV_BOOT2_RESULT_MASK) + value = VB2_FW_RESULT_UNKNOWN; + + p[VB2_NV_OFFS_BOOT2] &= ~VB2_NV_BOOT2_RESULT_MASK; + p[VB2_NV_OFFS_BOOT2] |= (uint8_t)value; + break; + + case VB2_NV_FW_PREV_TRIED: + SETBIT(VB2_NV_OFFS_BOOT2, VB2_NV_BOOT2_PREV_TRIED); + break; + + case VB2_NV_FW_PREV_RESULT: + /* Map out of range values to unknown */ + if (value > VB2_NV_BOOT2_RESULT_MASK) + value = VB2_FW_RESULT_UNKNOWN; + + p[VB2_NV_OFFS_BOOT2] &= ~VB2_NV_BOOT2_PREV_RESULT_MASK; + p[VB2_NV_OFFS_BOOT2] |= + (uint8_t)(value << VB2_NV_BOOT2_PREV_RESULT_SHIFT); + break; + + case VB2_NV_RECOVERY_REQUEST: + /* + * Map values outside the valid range to the legacy reason, + * since we can't determine if we're called from kernel or user + * mode. + */ + if (value > 0xff) + value = VB2_RECOVERY_LEGACY; + p[VB2_NV_OFFS_RECOVERY] = (uint8_t)value; + break; + + case VB2_NV_DIAG_REQUEST: + SETBIT(VB2_NV_OFFS_BOOT2, VB2_NV_BOOT2_REQ_DIAG); + break; + + case VB2_NV_RECOVERY_SUBCODE: + p[VB2_NV_OFFS_RECOVERY_SUBCODE] = (uint8_t)value; + break; + + case VB2_NV_LOCALIZATION_INDEX: + /* Map values outside the valid range to the default index. */ + if (value > 0xFF) + value = 0; + p[VB2_NV_OFFS_LOCALIZATION] = (uint8_t)value; + break; + + case VB2_NV_KERNEL_FIELD: + p[VB2_NV_OFFS_KERNEL1] = (uint8_t)(value); + p[VB2_NV_OFFS_KERNEL2] = (uint8_t)(value >> 8); + break; + + case VB2_NV_DEV_BOOT_EXTERNAL: + SETBIT(VB2_NV_OFFS_DEV, VB2_NV_DEV_FLAG_EXTERNAL); + break; + + case VB2_NV_DEV_BOOT_ALTFW: + SETBIT(VB2_NV_OFFS_DEV, VB2_NV_DEV_FLAG_LEGACY); + break; + + case VB2_NV_DEV_BOOT_SIGNED_ONLY: + SETBIT(VB2_NV_OFFS_DEV, VB2_NV_DEV_FLAG_SIGNED_ONLY); + break; + + case VB2_NV_DEV_DEFAULT_BOOT: + /* Map out of range values to disk */ + if (value > (VB2_NV_DEV_FLAG_DEFAULT_BOOT >> + VB2_NV_DEV_DEFAULT_BOOT_SHIFT)) + value = VB2_DEV_DEFAULT_BOOT_TARGET_INTERNAL; + + p[VB2_NV_OFFS_DEV] &= ~VB2_NV_DEV_FLAG_DEFAULT_BOOT; + p[VB2_NV_OFFS_DEV] |= + (uint8_t)(value << VB2_NV_DEV_DEFAULT_BOOT_SHIFT); + break; + + case VB2_NV_DEV_ENABLE_UDC: + SETBIT(VB2_NV_OFFS_DEV, VB2_NV_DEV_FLAG_UDC); + break; + + case VB2_NV_DISABLE_DEV_REQUEST: + SETBIT(VB2_NV_OFFS_BOOT, VB2_NV_BOOT_DISABLE_DEV); + break; + + case VB2_NV_DISPLAY_REQUEST: + SETBIT(VB2_NV_OFFS_BOOT, VB2_NV_BOOT_DISPLAY_REQUEST); + break; + + case VB2_NV_BACKUP_NVRAM_REQUEST: + SETBIT(VB2_NV_OFFS_BOOT, VB2_NV_BOOT_BACKUP_NVRAM); + break; + + case VB2_NV_CLEAR_TPM_OWNER_REQUEST: + SETBIT(VB2_NV_OFFS_TPM, VB2_NV_TPM_CLEAR_OWNER_REQUEST); + break; + + case VB2_NV_CLEAR_TPM_OWNER_DONE: + SETBIT(VB2_NV_OFFS_TPM, VB2_NV_TPM_CLEAR_OWNER_DONE); + break; + + case VB2_NV_TPM_REQUESTED_REBOOT: + SETBIT(VB2_NV_OFFS_TPM, VB2_NV_TPM_REBOOTED); + break; + + case VB2_NV_REQ_WIPEOUT: + SETBIT(VB2_NV_OFFS_HEADER , VB2_NV_HEADER_WIPEOUT); + break; + + case VB2_NV_BOOT_ON_AC_DETECT: + SETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_BOOT_ON_AC_DETECT); + break; + + case VB2_NV_TRY_RO_SYNC: + SETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_TRY_RO_SYNC); + break; + + case VB2_NV_BATTERY_CUTOFF_REQUEST: + SETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_BATTERY_CUTOFF); + break; + + case VB2_NV_KERNEL_MAX_ROLLFORWARD: + p[VB2_NV_OFFS_KERNEL_MAX_ROLLFORWARD1] = (uint8_t)(value); + p[VB2_NV_OFFS_KERNEL_MAX_ROLLFORWARD2] = (uint8_t)(value >> 8); + p[VB2_NV_OFFS_KERNEL_MAX_ROLLFORWARD3] = (uint8_t)(value >> 16); + p[VB2_NV_OFFS_KERNEL_MAX_ROLLFORWARD4] = (uint8_t)(value >> 24); + break; + + case VB2_NV_FW_MAX_ROLLFORWARD: + /* Field only present in V2 */ + if (!(ctx->flags & VB2_CONTEXT_NVDATA_V2)) + return; + + p[VB2_NV_OFFS_FW_MAX_ROLLFORWARD1] = (uint8_t)(value); + p[VB2_NV_OFFS_FW_MAX_ROLLFORWARD2] = (uint8_t)(value >> 8); + p[VB2_NV_OFFS_FW_MAX_ROLLFORWARD3] = (uint8_t)(value >> 16); + p[VB2_NV_OFFS_FW_MAX_ROLLFORWARD4] = (uint8_t)(value >> 24); + break; + + case VB2_NV_POST_EC_SYNC_DELAY: + SETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_POST_EC_SYNC_DELAY); + break; + + case VB2_NV_MINIOS_PRIORITY: + SETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_MINIOS_PRIORITY); + break; + + case VB2_NV_DEPRECATED_DEV_BOOT_FASTBOOT_FULL_CAP: + case VB2_NV_DEPRECATED_FASTBOOT_UNLOCK_IN_FW: + case VB2_NV_DEPRECATED_ENABLE_ALT_OS_REQUEST: + case VB2_NV_DEPRECATED_DISABLE_ALT_OS_REQUEST: + return; + } + + /* + * Note there is no default case. This causes a compiler warning if + * a new param is added to the enum without adding support here. + */ + + /* Need to regenerate CRC, since the value changed. */ + vb2_nv_regen_crc(ctx); +} + +#undef SETBIT diff --git a/firmware/2lib/2packed_key.c b/firmware/2lib/2packed_key.c new file mode 100644 index 0000000..4e2c654 --- /dev/null +++ b/firmware/2lib/2packed_key.c @@ -0,0 +1,80 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Key unpacking functions + */ + +#include "2common.h" +#include "2packed_key.h" +#include "2rsa.h" +#include "2sysincludes.h" + +test_mockable +vb2_error_t vb2_unpack_key_buffer(struct vb2_public_key *key, + const uint8_t *buf, uint32_t size) +{ + const struct vb2_packed_key *packed_key = + (const struct vb2_packed_key *)buf; + const uint32_t *buf32; + uint32_t expected_key_size; + + /* Make sure passed buffer is big enough for the packed key */ + VB2_TRY(vb2_verify_packed_key_inside(buf, size, packed_key)); + + /* Unpack key algorithm */ + key->sig_alg = vb2_crypto_to_signature(packed_key->algorithm); + if (key->sig_alg == VB2_SIG_INVALID) { + VB2_DEBUG("Unsupported signature algorithm.\n"); + return VB2_ERROR_UNPACK_KEY_SIG_ALGORITHM; + } + + key->hash_alg = vb2_crypto_to_hash(packed_key->algorithm); + if (key->hash_alg == VB2_HASH_INVALID) { + VB2_DEBUG("Unsupported hash algorithm.\n"); + return VB2_ERROR_UNPACK_KEY_HASH_ALGORITHM; + } + + expected_key_size = vb2_packed_key_size(key->sig_alg); + if (!expected_key_size || expected_key_size != packed_key->key_size) { + VB2_DEBUG("Wrong key size for algorithm\n"); + return VB2_ERROR_UNPACK_KEY_SIZE; + } + + /* Make sure source buffer is 32-bit aligned */ + buf32 = (const uint32_t *)vb2_packed_key_data(packed_key); + if (!vb2_aligned(buf32, sizeof(uint32_t))) + return VB2_ERROR_UNPACK_KEY_ALIGN; + + /* Validity check key array size */ + key->arrsize = buf32[0]; + if (key->arrsize * sizeof(uint32_t) != vb2_rsa_sig_size(key->sig_alg)) + return VB2_ERROR_UNPACK_KEY_ARRAY_SIZE; + + key->n0inv = buf32[1]; + + /* Arrays point inside the key data */ + key->n = buf32 + 2; + key->rr = buf32 + 2 + key->arrsize; + + /* disable hwcrypto for RSA by default */ + key->allow_hwcrypto = 0; + +#ifdef __COVERITY__ + __coverity_tainted_data_sanitize__(key); + __coverity_tainted_data_sanitize__(buf); +#endif + return VB2_SUCCESS; +} + +vb2_error_t vb2_unpack_key(struct vb2_public_key *key, + const struct vb2_packed_key *packed_key) +{ + if (!packed_key) + return VB2_ERROR_UNPACK_KEY_BUFFER; + + return vb2_unpack_key_buffer(key, + (const uint8_t *)packed_key, + packed_key->key_offset + + packed_key->key_size); +} diff --git a/firmware/2lib/2recovery_reasons.c b/firmware/2lib/2recovery_reasons.c new file mode 100644 index 0000000..8c43dce --- /dev/null +++ b/firmware/2lib/2recovery_reasons.c @@ -0,0 +1,181 @@ +/* Copyright 2020 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Recovery reason string mapping. + */ + +#include "2recovery_reasons.h" +#include "2sysincludes.h" + +const char *vb2_get_recovery_reason_string(uint8_t code) +{ + switch ((enum vb2_nv_recovery)code) { + /* 0x00 */ case VB2_RECOVERY_NOT_REQUESTED: + return "Recovery not requested"; + /* 0x01 */ case VB2_RECOVERY_LEGACY: + return "Recovery requested from legacy utility"; + /* 0x02 */ case VB2_RECOVERY_RO_MANUAL: + return "Recovery button pressed"; + /* 0x03 */ case VB2_RECOVERY_RO_INVALID_RW: + return "RW firmware failed signature check"; + /* 0x04 */ case VB2_RECOVERY_DEPRECATED_RO_S3_RESUME: + return "S3 resume failed"; + /* 0x05 */ case VB2_RECOVERY_DEPRECATED_RO_TPM_ERROR: + return "TPM error in read-only firmware"; + /* 0x06 */ case VB2_RECOVERY_RO_SHARED_DATA: + return "Shared data error in read-only firmware"; + /* 0x07 */ case VB2_RECOVERY_DEPRECATED_RO_TEST_S3: + return "Test error from S3Resume()"; + /* 0x08 */ case VB2_RECOVERY_DEPRECATED_RO_TEST_LFS: + return "Test error from LoadFirmwareSetup()"; + /* 0x09 */ case VB2_RECOVERY_DEPRECATED_RO_TEST_LF: + return "Test error from LoadFirmware()"; + /* 0x10 */ case VB2_RECOVERY_DEPRECATED_RW_NOT_DONE: + return "RW firmware check not done"; + /* 0x11 */ case VB2_RECOVERY_DEPRECATED_RW_DEV_FLAG_MISMATCH: + return "RW firmware developer flag mismatch"; + /* 0x12 */ case VB2_RECOVERY_DEPRECATED_RW_REC_FLAG_MISMATCH: + return "RW firmware recovery flag mismatch"; + /* 0x13 */ case VB2_RECOVERY_FW_KEYBLOCK: + return "RW firmware unable to verify keyblock"; + /* 0x14 */ case VB2_RECOVERY_FW_KEY_ROLLBACK: + return "RW firmware key version rollback detected"; + /* 0x15 */ case VB2_RECOVERY_DEPRECATED_RW_DATA_KEY_PARSE: + return "RW firmware unable to parse data key"; + /* 0x16 */ case VB2_RECOVERY_FW_PREAMBLE: + return "RW firmware unable to verify preamble"; + /* 0x17 */ case VB2_RECOVERY_FW_ROLLBACK: + return "RW firmware version rollback detected"; + /* 0x18 */ case VB2_RECOVERY_DEPRECATED_FW_HEADER_VALID: + return "RW firmware header is valid"; + /* 0x19 */ case VB2_RECOVERY_DEPRECATED_FW_GET_FW_BODY: + return "RW firmware unable to get firmware body"; + /* 0x1a */ case VB2_RECOVERY_DEPRECATED_FW_HASH_WRONG_SIZE: + return "RW firmware hash is wrong size"; + /* 0x1b */ case VB2_RECOVERY_FW_BODY: + return "RW firmware unable to verify firmware body"; + /* 0x1c */ case VB2_RECOVERY_DEPRECATED_FW_VALID: + return "RW firmware is valid"; + /* 0x1d */ case VB2_RECOVERY_DEPRECATED_FW_NO_RO_NORMAL: + return "RW firmware read-only normal path is not supported"; + /* 0x20 */ case VB2_RECOVERY_RO_FIRMWARE: + return "Firmware problem outside of verified boot"; + /* 0x21 */ case VB2_RECOVERY_RO_TPM_REBOOT: + return "TPM requires a system reboot (should be transient)"; + /* 0x22 */ case VB2_RECOVERY_EC_SOFTWARE_SYNC: + return "EC software sync error"; + /* 0x23 */ case VB2_RECOVERY_EC_UNKNOWN_IMAGE: + return "EC software sync unable to determine active EC image"; + /* 0x24 */ case VB2_RECOVERY_DEPRECATED_EC_HASH: + return "EC software sync error obtaining EC image hash"; + /* 0x25 */ case VB2_RECOVERY_DEPRECATED_EC_EXPECTED_IMAGE: + return "EC software sync error " + "obtaining expected EC image from BIOS"; + /* 0x26 */ case VB2_RECOVERY_EC_UPDATE: + return "EC software sync error updating EC"; + /* 0x27 */ case VB2_RECOVERY_EC_JUMP_RW: + return "EC software sync unable to jump to EC-RW"; + /* 0x28 */ case VB2_RECOVERY_EC_PROTECT: + return "EC software sync protection error"; + /* 0x29 */ case VB2_RECOVERY_EC_EXPECTED_HASH: + return "EC software sync error " + "obtaining expected EC hash from BIOS"; + /* 0x2a */ case VB2_RECOVERY_DEPRECATED_EC_HASH_MISMATCH: + return "EC software sync error " + "comparing expected EC hash and image"; + /* 0x2b */ case VB2_RECOVERY_SECDATA_FIRMWARE_INIT: + return "Firmware secure NVRAM (TPM) initialization error"; + /* 0x2c */ case VB2_RECOVERY_GBB_HEADER: + return "Error parsing GBB header"; + /* 0x2d */ case VB2_RECOVERY_TPM_CLEAR_OWNER: + return "Error trying to clear TPM owner"; + /* 0x2e */ case VB2_RECOVERY_DEV_SWITCH: + return "Error reading or updating developer switch"; + /* 0x2f */ case VB2_RECOVERY_FW_SLOT: + return "Error selecting RW firmware slot"; + /* 0x30 */ case VB2_RECOVERY_AUXFW_UPDATE: + return "Error updating auxiliary firmware"; + /* 0x31 */ case VB2_RECOVERY_INTEL_CSE_LITE_SKU: + return "Intel CSE Lite SKU firmware failure"; + /* 0x3f */ case VB2_RECOVERY_RO_UNSPECIFIED: + return "Unspecified/unknown error in RO firmware"; + /* 0x41 */ case VB2_RECOVERY_DEPRECATED_RW_DEV_SCREEN: + return "User requested recovery from dev-mode warning screen"; + /* 0x42 */ case VB2_RECOVERY_DEPRECATED_RW_NO_OS: + return "No OS kernel detected (or kernel rollback attempt?)"; + /* 0x43 */ case VB2_RECOVERY_RW_INVALID_OS: + return "OS kernel or rootfs failed signature check"; + /* 0x44 */ case VB2_RECOVERY_DEPRECATED_RW_TPM_ERROR: + return "TPM error in rewritable firmware"; + /* 0x45 */ case VB2_RECOVERY_DEPRECATED_RW_DEV_MISMATCH: + return "RW firmware in dev mode, but dev switch is off"; + /* 0x46 */ case VB2_RECOVERY_RW_SHARED_DATA: + return "Shared data error in rewritable firmware"; + /* 0x47 */ case VB2_RECOVERY_DEPRECATED_RW_TEST_LK: + return "Test error from LoadKernel()"; + /* 0x48 */ case VB2_RECOVERY_DEPRECATED_RW_NO_DISK: + return "No bootable storage device in system"; + /* 0x49 */ case VB2_RECOVERY_TPM_E_FAIL: + return "TPM error that was not fixed by reboot"; + /* 0x50 */ case VB2_RECOVERY_RO_TPM_S_ERROR: + return "TPM setup error in read-only firmware"; + /* 0x51 */ case VB2_RECOVERY_RO_TPM_W_ERROR: + return "TPM write error in read-only firmware"; + /* 0x52 */ case VB2_RECOVERY_RO_TPM_L_ERROR: + return "TPM lock error in read-only firmware"; + /* 0x53 */ case VB2_RECOVERY_RO_TPM_U_ERROR: + return "TPM update error in read-only firmware"; + /* 0x54 */ case VB2_RECOVERY_RW_TPM_R_ERROR: + return "TPM read error in rewritable firmware"; + /* 0x55 */ case VB2_RECOVERY_RW_TPM_W_ERROR: + return "TPM write error in rewritable firmware"; + /* 0x56 */ case VB2_RECOVERY_RW_TPM_L_ERROR: + return "TPM lock error in rewritable firmware"; + /* 0x57 */ case VB2_RECOVERY_EC_HASH_FAILED: + return "EC software sync unable to get EC image hash"; + /* 0x58 */ case VB2_RECOVERY_EC_HASH_SIZE: + return "EC software sync invalid image hash size"; + /* 0x59 */ case VB2_RECOVERY_LK_UNSPECIFIED: + return "Unspecified error while trying to load kernel"; + /* 0x5a */ case VB2_RECOVERY_RW_NO_DISK: + return "No bootable storage device in system"; + /* 0x5b */ case VB2_RECOVERY_RW_NO_KERNEL: + return "No bootable kernel found on disk"; + /* 0x5c */ case VB2_RECOVERY_DEPRECATED_RW_BCB_ERROR: + return "BCB partition error on disk"; + /* 0x5d */ case VB2_RECOVERY_SECDATA_KERNEL_INIT: + return "Kernel secure NVRAM (TPM) initialization error"; + /* 0x5e */ case VB2_RECOVERY_DEPRECATED_FW_FASTBOOT: + return "Fastboot-mode requested in firmware"; + /* 0x5f */ case VB2_RECOVERY_RO_TPM_REC_HASH_L_ERROR: + return "Recovery hash space lock error in RO firmware"; + /* 0x60 */ case VB2_RECOVERY_TPM_DISABLE_FAILED: + return "Failed to disable TPM before running untrusted code"; + /* 0x61 */ case VB2_RECOVERY_ALTFW_HASH_MISMATCH: + return "Verification of alternate bootloader payload failed"; + /* 0x62 */ case VB2_RECOVERY_SECDATA_FWMP_INIT: + return "FWMP secure NVRAM (TPM) initialization error"; + /* 0x63 */ case VB2_RECOVERY_CR50_BOOT_MODE: + return "Failed to get boot mode from Cr50"; + /* 0x64 */ case VB2_RECOVERY_ESCAPE_NO_BOOT: + return "Attempt to escape from NO_BOOT mode was detected"; + /* 0x7f */ case VB2_RECOVERY_RW_UNSPECIFIED: + return "Unspecified/unknown error in RW firmware"; + /* 0x81 */ case VB2_RECOVERY_DEPRECATED_KE_DM_VERITY: + return "DM-verity error"; + /* 0xbf */ case VB2_RECOVERY_DEPRECATED_KE_UNSPECIFIED: + return "Unspecified/unknown error in kernel"; + /* 0xc1 */ case VB2_RECOVERY_US_TEST: + return "Recovery mode test from user-mode"; + /* 0xc2 */ case VB2_RECOVERY_DEPRECATED_BCB_USER_MODE: + return "User-mode requested recovery via BCB"; + /* 0xc3 */ case VB2_RECOVERY_DEPRECATED_US_FASTBOOT: + return "User-mode requested fastboot mode"; + /* 0xc4 */ case VB2_RECOVERY_TRAIN_AND_REBOOT: + return "User-mode requested DRAM train and reboot"; + /* 0xff */ case VB2_RECOVERY_US_UNSPECIFIED: + return "Unspecified/unknown error in user-mode"; + } + return "Unknown error code"; +} diff --git a/firmware/2lib/2rsa.c b/firmware/2lib/2rsa.c new file mode 100644 index 0000000..dcd8bad --- /dev/null +++ b/firmware/2lib/2rsa.c @@ -0,0 +1,412 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* + * Implementation of RSA signature verification which uses a pre-processed key + * for computation. The code extends Android's RSA verification code to support + * multiple RSA key lengths and hash digest algorithms. + */ + +#include "2common.h" +#include "2rsa.h" +#include "2rsa_private.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "vboot_test.h" + +/** + * a[] -= mod + */ +static void subM(const struct vb2_public_key *key, uint32_t *a) +{ + int64_t A = 0; + uint32_t i; + for (i = 0; i < key->arrsize; ++i) { + A += (uint64_t)a[i] - key->n[i]; + a[i] = (uint32_t)A; + A >>= 32; + } +} + +/** + * Return a[] >= mod + */ +int vb2_mont_ge(const struct vb2_public_key *key, uint32_t *a) +{ + uint32_t i; + for (i = key->arrsize; i;) { + --i; + if (a[i] < key->n[i]) + return 0; + if (a[i] > key->n[i]) + return 1; + } + return 1; /* equal */ +} + +/** + * Montgomery c[] += a * b[] / R % mod + */ +static void montMulAdd(const struct vb2_public_key *key, + uint32_t *c, + const uint32_t a, + const uint32_t *b) +{ + uint64_t A = (uint64_t)a * b[0] + c[0]; + uint32_t d0 = (uint32_t)A * key->n0inv; + uint64_t B = (uint64_t)d0 * key->n[0] + (uint32_t)A; + uint32_t i; + + for (i = 1; i < key->arrsize; ++i) { + A = (A >> 32) + (uint64_t)a * b[i] + c[i]; + B = (B >> 32) + (uint64_t)d0 * key->n[i] + (uint32_t)A; + c[i - 1] = (uint32_t)B; + } + + A = (A >> 32) + (B >> 32); + + c[i - 1] = (uint32_t)A; + + if (A >> 32) { + subM(key, c); + } +} + +/** + * Montgomery c[] += 0 * b[] / R % mod + */ +static void montMulAdd0(const struct vb2_public_key *key, + uint32_t *c, + const uint32_t *b) +{ + uint32_t d0 = c[0] * key->n0inv; + uint64_t B = (uint64_t)d0 * key->n[0] + c[0]; + uint32_t i; + + for (i = 1; i < key->arrsize; ++i) { + B = (B >> 32) + (uint64_t)d0 * key->n[i] + c[i]; + c[i - 1] = (uint32_t)B; + } + + c[i - 1] = B >> 32; +} + +/** + * Montgomery c[] = a[] * b[] / R % mod + */ +static void montMul(const struct vb2_public_key *key, + uint32_t *c, + const uint32_t *a, + const uint32_t *b) +{ + uint32_t i; + for (i = 0; i < key->arrsize; ++i) { + c[i] = 0; + } + for (i = 0; i < key->arrsize; ++i) { + montMulAdd(key, c, a[i], b); + } +} + +/* Montgomery c[] = a[] * 1 / R % key. */ +static void montMul1(const struct vb2_public_key *key, + uint32_t *c, + const uint32_t *a) +{ + int i; + + for (i = 0; i < key->arrsize; ++i) + c[i] = 0; + + montMulAdd(key, c, 1, a); + for (i = 1; i < key->arrsize; ++i) + montMulAdd0(key, c, a); +} + +/** + * In-place public exponentiation. + * + * @param key Key to use in signing + * @param inout Input and output big-endian byte array + * @param workbuf32 Work buffer; caller must verify this is + * (3 * key->arrsize) elements long. + * @param exp RSA public exponent: either 65537 (F4) or 3 + */ +static void modpow(const struct vb2_public_key *key, uint8_t *inout, + uint32_t *workbuf32, int exp) +{ + uint32_t *a = workbuf32; + uint32_t *aR = a + key->arrsize; + uint32_t *aaR = aR + key->arrsize; + uint32_t *aaa = aaR; /* Re-use location. */ + int i; + + /* Convert from big endian byte array to little endian word array. */ + for (i = 0; i < (int)key->arrsize; ++i) { + uint32_t tmp = + ((uint32_t)inout[((key->arrsize - 1 - i) * 4) + 0] + << 24) | + (inout[((key->arrsize - 1 - i) * 4) + 1] << 16) | + (inout[((key->arrsize - 1 - i) * 4) + 2] << 8) | + (inout[((key->arrsize - 1 - i) * 4) + 3] << 0); + a[i] = tmp; + } + + montMul(key, aR, a, key->rr); /* aR = a * RR / R mod M */ + if (exp == 3) { + montMul(key, aaR, aR, aR); /* aaR = aR * aR / R mod M */ + montMul(key, a, aaR, aR); /* a = aaR * aR / R mod M */ + montMul1(key, aaa, a); /* aaa = a * 1 / R mod M */ + } else { + /* Exponent 65537 */ + for (i = 0; i < 16; i+=2) { + montMul(key, aaR, aR, aR); /* aaR = aR * aR / R mod M */ + montMul(key, aR, aaR, aaR); /* aR = aaR * aaR / R mod M */ + } + montMul(key, aaa, aR, a); /* aaa = aR * a / R mod M */ + } + + /* Make sure aaa < mod; aaa is at most 1x mod too large. */ + if (vb2_mont_ge(key, aaa)) { + subM(key, aaa); + } + + /* Convert to bigendian byte array */ + for (i = (int)key->arrsize - 1; i >= 0; --i) { + uint32_t tmp = aaa[i]; + *inout++ = (uint8_t)(tmp >> 24); + *inout++ = (uint8_t)(tmp >> 16); + *inout++ = (uint8_t)(tmp >> 8); + *inout++ = (uint8_t)(tmp >> 0); + } +} + +uint32_t vb2_rsa_sig_size(enum vb2_signature_algorithm sig_alg) +{ + switch (sig_alg) { + case VB2_SIG_RSA1024: + return 1024 / 8; + case VB2_SIG_RSA2048: + case VB2_SIG_RSA2048_EXP3: + return 2048 / 8; + case VB2_SIG_RSA3072_EXP3: + return 3072 / 8; + case VB2_SIG_RSA4096: + return 4096 / 8; + case VB2_SIG_RSA8192: + return 8192 / 8; + default: + return 0; + } +} + +/** + * Return the exponent used by an RSA algorithm + * + * @param sig_alg Signature algorithm + * @return The exponent to use (3 or 65537(F4)), or 0 if error. + */ +static uint32_t vb2_rsa_exponent(enum vb2_signature_algorithm sig_alg) +{ + switch (sig_alg) { + case VB2_SIG_RSA1024: + case VB2_SIG_RSA2048: + case VB2_SIG_RSA4096: + case VB2_SIG_RSA8192: + return 65537; + case VB2_SIG_RSA2048_EXP3: + case VB2_SIG_RSA3072_EXP3: + return 3; + default: + return 0; + } +} + +uint32_t vb2_packed_key_size(enum vb2_signature_algorithm sig_alg) +{ + uint32_t sig_size = vb2_rsa_sig_size(sig_alg); + + if (!sig_size) + return 0; + + /* + * Total size needed by a RSAPublicKey buffer is = + * 2 * key_len bytes for the n and rr arrays + * + sizeof len + sizeof n0inv. + */ + return 2 * sig_size + 2 * sizeof(uint32_t); +} + +/* + * PKCS 1.5 padding (from the RSA PKCS#1 v2.1 standard) + * + * Depending on the RSA key size and hash function, the padding is calculated + * as follows: + * + * 0x00 || 0x01 || PS || 0x00 || T + * + * T: DER Encoded DigestInfo value which depends on the hash function used. + * + * SHA-1: (0x)30 21 30 09 06 05 2b 0e 03 02 1a 05 00 04 14 || H. + * SHA-256: (0x)30 31 30 0d 06 09 60 86 48 01 65 03 04 02 01 05 00 04 20 || H. + * SHA-512: (0x)30 51 30 0d 06 09 60 86 48 01 65 03 04 02 03 05 00 04 40 || H. + * + * Length(T) = 35 octets for SHA-1 + * Length(T) = 51 octets for SHA-256 + * Length(T) = 83 octets for SHA-512 + * + * PS: octet string consisting of {Length(RSA Key) - Length(T) - 3} 0xFF + */ +static const uint8_t sha1_tail[] = { + 0x00,0x30,0x21,0x30,0x09,0x06,0x05,0x2b, + 0x0e,0x03,0x02,0x1a,0x05,0x00,0x04,0x14 +}; + +static const uint8_t sha256_tail[] = { + 0x00,0x30,0x31,0x30,0x0d,0x06,0x09,0x60, + 0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x01, + 0x05,0x00,0x04,0x20 +}; + +static const uint8_t sha512_tail[] = { + 0x00,0x30,0x51,0x30,0x0d,0x06,0x09,0x60, + 0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x03, + 0x05,0x00,0x04,0x40 +}; + +/** + * Check pkcs 1.5 padding bytes + * + * @param sig Signature to verify + * @param key Key to take signature and hash algorithms from + * @return VB2_SUCCESS, or non-zero if error. + */ +test_mockable +vb2_error_t vb2_check_padding(const uint8_t *sig, + const struct vb2_public_key *key) +{ + /* Determine padding to use depending on the signature type */ + uint32_t sig_size = vb2_rsa_sig_size(key->sig_alg); + uint32_t hash_size = vb2_digest_size(key->hash_alg); + uint32_t pad_size = sig_size - hash_size; + const uint8_t *tail; + uint32_t tail_size; + int result = 0; + int i; + + if (!sig_size || !hash_size || hash_size > sig_size) + return VB2_ERROR_RSA_PADDING_SIZE; + + switch (key->hash_alg) { + case VB2_HASH_SHA1: + tail = sha1_tail; + tail_size = sizeof(sha1_tail); + break; + case VB2_HASH_SHA256: + tail = sha256_tail; + tail_size = sizeof(sha256_tail); + break; + case VB2_HASH_SHA512: + tail = sha512_tail; + tail_size = sizeof(sha512_tail); + break; + default: + return VB2_ERROR_RSA_PADDING_ALGORITHM; + } + + /* First 2 bytes are always 0x00 0x01 */ + result |= *sig++ ^ 0x00; + result |= *sig++ ^ 0x01; + + /* Then 0xff bytes until the tail */ + for (i = 0; i < pad_size - tail_size - 2; i++) + result |= *sig++ ^ 0xff; + + /* + * Then the tail. Even though there are probably no timing issues + * here, we use vb2_safe_memcmp() just to be on the safe side. + */ + result |= vb2_safe_memcmp(sig, tail, tail_size); + + return result ? VB2_ERROR_RSA_PADDING : VB2_SUCCESS; +} + +vb2_error_t vb2_rsa_verify_digest(const struct vb2_public_key *key, + uint8_t *sig, const uint8_t *digest, + const struct vb2_workbuf *wb) +{ + struct vb2_workbuf wblocal = *wb; + uint32_t *workbuf32; + uint32_t key_bytes; + int sig_size; + int pad_size; + int exp; + vb2_error_t rv = VB2_ERROR_EX_HWCRYPTO_UNSUPPORTED; + + if (!key || !sig || !digest) + return VB2_ERROR_RSA_VERIFY_PARAM; + + sig_size = vb2_rsa_sig_size(key->sig_alg); + exp = vb2_rsa_exponent(key->sig_alg); + if (!sig_size || !exp) { + VB2_DEBUG("Invalid signature type!\n"); + return VB2_ERROR_RSA_VERIFY_ALGORITHM; + } + + /* Signature length should be same as key length */ + key_bytes = key->arrsize * sizeof(uint32_t); + if (key_bytes != sig_size) { + VB2_DEBUG("Signature is of incorrect length!\n"); + return VB2_ERROR_RSA_VERIFY_SIG_LEN; + } + + workbuf32 = vb2_workbuf_alloc(&wblocal, 3 * key_bytes); + if (!workbuf32) { + VB2_DEBUG("ERROR - vboot2 work buffer too small!\n"); + return VB2_ERROR_RSA_VERIFY_WORKBUF; + } + + if (key->allow_hwcrypto) { + rv = vb2ex_hwcrypto_modexp(key, sig, workbuf32, exp); + + if (rv == VB2_SUCCESS) + VB2_DEBUG("Using HW modexp engine for sig_alg %d\n", + key->sig_alg); + else + VB2_DEBUG("HW modexp for sig_alg %d not supported, using SW\n", + key->sig_alg); + } else { + VB2_DEBUG("HW modexp forbidden, using SW\n"); + } + + if (rv != VB2_SUCCESS) { + modpow(key, sig, workbuf32, exp); + } + + vb2_workbuf_free(&wblocal, 3 * key_bytes); + + /* + * Check padding. Only fail immediately if the padding size is bad. + * Otherwise, continue on to check the digest to reduce the risk of + * timing based attacks. + */ + rv = vb2_check_padding(sig, key); + if (rv == VB2_ERROR_RSA_PADDING_SIZE) + return rv; + + /* + * Check digest. Even though there are probably no timing issues here, + * use vb2_safe_memcmp() just to be on the safe side. (That's also why + * we don't return before this check if the padding check failed.) + */ + pad_size = sig_size - vb2_digest_size(key->hash_alg); + if (vb2_safe_memcmp(sig + pad_size, digest, key_bytes - pad_size)) { + VB2_DEBUG("Digest check failed!\n"); + if (!rv) + rv = VB2_ERROR_RSA_VERIFY_DIGEST; + } + + return rv; +} diff --git a/firmware/2lib/2secdata_firmware.c b/firmware/2lib/2secdata_firmware.c new file mode 100644 index 0000000..b5d9692 --- /dev/null +++ b/firmware/2lib/2secdata_firmware.c @@ -0,0 +1,151 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Secure storage APIs + */ + +#include "2common.h" +#include "2crc8.h" +#include "2misc.h" +#include "2secdata.h" +#include "2secdata_struct.h" +#include "2sysincludes.h" + +vb2_error_t vb2api_secdata_firmware_check(struct vb2_context *ctx) +{ + struct vb2_secdata_firmware *sec = + (struct vb2_secdata_firmware *)ctx->secdata_firmware; + + /* Verify CRC */ + if (sec->crc8 != vb2_crc8(sec, offsetof(struct vb2_secdata_firmware, + crc8))) { + VB2_DEBUG("secdata_firmware: bad CRC\n"); + return VB2_ERROR_SECDATA_FIRMWARE_CRC; + } + + /* Verify version */ + if (sec->struct_version < VB2_SECDATA_FIRMWARE_VERSION) { + VB2_DEBUG("secdata_firmware: version incompatible\n"); + return VB2_ERROR_SECDATA_FIRMWARE_VERSION; + } + + return VB2_SUCCESS; +} + +uint32_t vb2api_secdata_firmware_create(struct vb2_context *ctx) +{ + struct vb2_secdata_firmware *sec = + (struct vb2_secdata_firmware *)ctx->secdata_firmware; + + /* Clear the entire struct */ + memset(sec, 0, sizeof(*sec)); + + /* Set to current version */ + sec->struct_version = VB2_SECDATA_FIRMWARE_VERSION; + + /* Calculate initial CRC */ + sec->crc8 = vb2_crc8(sec, offsetof(struct vb2_secdata_firmware, crc8)); + + /* Mark as changed */ + ctx->flags |= VB2_CONTEXT_SECDATA_FIRMWARE_CHANGED; + + return sizeof(*sec); +} + +vb2_error_t vb2_secdata_firmware_init(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + + VB2_TRY(vb2api_secdata_firmware_check(ctx)); + + /* Set status flag */ + sd->status |= VB2_SD_STATUS_SECDATA_FIRMWARE_INIT; + + /* Read this now to make sure crossystem has it even in rec mode */ + sd->fw_version_secdata = + vb2_secdata_firmware_get(ctx, VB2_SECDATA_FIRMWARE_VERSIONS); + + return VB2_SUCCESS; +} + +uint32_t vb2_secdata_firmware_get(struct vb2_context *ctx, + enum vb2_secdata_firmware_param param) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + struct vb2_secdata_firmware *sec = + (struct vb2_secdata_firmware *)ctx->secdata_firmware; + const char *msg; + + if (!(sd->status & VB2_SD_STATUS_SECDATA_FIRMWARE_INIT)) { + msg = "get before init"; + goto fail; + } + + switch (param) { + case VB2_SECDATA_FIRMWARE_FLAGS: + return sec->flags; + + case VB2_SECDATA_FIRMWARE_VERSIONS: + return sec->fw_versions; + + default: + msg = "invalid param"; + } + + fail: + VB2_REC_OR_DIE(ctx, "%s\n", msg); + return 0; +} + +void vb2_secdata_firmware_set(struct vb2_context *ctx, + enum vb2_secdata_firmware_param param, + uint32_t value) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + struct vb2_secdata_firmware *sec = + (struct vb2_secdata_firmware *)ctx->secdata_firmware; + const char *msg; + + if (!(sd->status & VB2_SD_STATUS_SECDATA_FIRMWARE_INIT)) { + msg = "set before init"; + goto fail; + } + + /* If not changing the value, just return early */ + if (value == vb2_secdata_firmware_get(ctx, param)) + return; + + switch (param) { + case VB2_SECDATA_FIRMWARE_FLAGS: + /* Make sure flags is in valid range */ + if (value > 0xff) { + msg = "flags out of range"; + goto fail; + } + + VB2_DEBUG("secdata_firmware flags updated from %#x to %#x\n", + sec->flags, value); + sec->flags = value; + break; + + case VB2_SECDATA_FIRMWARE_VERSIONS: + VB2_DEBUG("secdata_firmware versions updated from " + "%#x to %#x\n", + sec->fw_versions, value); + sec->fw_versions = value; + break; + + default: + msg = "invalid param"; + goto fail; + } + + /* Regenerate CRC */ + sec->crc8 = vb2_crc8(sec, offsetof(struct vb2_secdata_firmware, crc8)); + ctx->flags |= VB2_CONTEXT_SECDATA_FIRMWARE_CHANGED; + return; + + fail: + VB2_REC_OR_DIE(ctx, "%s\n", msg); +} diff --git a/firmware/2lib/2secdata_fwmp.c b/firmware/2lib/2secdata_fwmp.c new file mode 100644 index 0000000..cec2481 --- /dev/null +++ b/firmware/2lib/2secdata_fwmp.c @@ -0,0 +1,131 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Firmware management parameters (FWMP) APIs + */ + +#include "2common.h" +#include "2crc8.h" +#include "2misc.h" +#include "2secdata.h" +#include "2secdata_struct.h" + +test_mockable +vb2_error_t vb2api_secdata_fwmp_check(struct vb2_context *ctx, uint8_t *size) +{ + struct vb2_secdata_fwmp *sec = + (struct vb2_secdata_fwmp *)&ctx->secdata_fwmp; + + /* Verify that at least the minimum size has been read */ + if (*size < VB2_SECDATA_FWMP_MIN_SIZE) { + VB2_DEBUG("FWMP: missing %d bytes for minimum size\n", + VB2_SECDATA_FWMP_MIN_SIZE - *size); + *size = VB2_SECDATA_FWMP_MIN_SIZE; + return VB2_ERROR_SECDATA_FWMP_INCOMPLETE; + } + + /* Verify that struct_size is reasonable */ + if (sec->struct_size < VB2_SECDATA_FWMP_MIN_SIZE || + sec->struct_size > VB2_SECDATA_FWMP_MAX_SIZE) { + VB2_DEBUG("FWMP: invalid size: %d\n", sec->struct_size); + return VB2_ERROR_SECDATA_FWMP_SIZE; + } + + /* Verify that we have read full structure */ + if (*size < sec->struct_size) { + VB2_DEBUG("FWMP: missing %d bytes\n", sec->struct_size - *size); + *size = sec->struct_size; + return VB2_ERROR_SECDATA_FWMP_INCOMPLETE; + } + *size = sec->struct_size; + + /* Verify CRC */ + if (sec->crc8 != vb2_secdata_fwmp_crc(sec)) { + VB2_DEBUG("FWMP: bad CRC\n"); + return VB2_ERROR_SECDATA_FWMP_CRC; + } + + /* Verify major version is compatible */ + if ((sec->struct_version >> 4) != (VB2_SECDATA_FWMP_VERSION >> 4)) { + VB2_DEBUG("FWMP: major version incompatible\n"); + return VB2_ERROR_SECDATA_FWMP_VERSION; + } + + /* + * If this were a 1.1+ reader and the source was a 1.0 struct, + * we would need to take care of initializing the extra fields + * added in 1.1+. But that's not an issue yet. + */ + return VB2_SUCCESS; +} + +uint32_t vb2api_secdata_fwmp_create(struct vb2_context *ctx) +{ + struct vb2_secdata_fwmp *sec = (void *)&ctx->secdata_fwmp; + + /* Clear the entire struct */ + memset(sec, 0, sizeof(*sec)); + + /* Set to current version */ + sec->struct_version = VB2_SECDATA_FWMP_VERSION; + + /* Set the structure size */ + sec->struct_size = sizeof(*sec); + + /* Calculate initial CRC */ + sec->crc8 = vb2_secdata_fwmp_crc(sec); + + return sizeof(*sec); +} + +vb2_error_t vb2_secdata_fwmp_init(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + struct vb2_secdata_fwmp *sec = + (struct vb2_secdata_fwmp *)&ctx->secdata_fwmp; + + /* Skip checking if NO_SECDATA_FWMP is set. */ + if (!(ctx->flags & VB2_CONTEXT_NO_SECDATA_FWMP)) + VB2_TRY(vb2api_secdata_fwmp_check(ctx, &sec->struct_size)); + + /* Mark as initialized */ + sd->status |= VB2_SD_STATUS_SECDATA_FWMP_INIT; + + return VB2_SUCCESS; +} + +int vb2_secdata_fwmp_get_flag(struct vb2_context *ctx, + enum vb2_secdata_fwmp_flags flag) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + struct vb2_secdata_fwmp *sec = + (struct vb2_secdata_fwmp *)&ctx->secdata_fwmp; + + if (!(sd->status & VB2_SD_STATUS_SECDATA_FWMP_INIT)) { + VB2_REC_OR_DIE(ctx, "Must init FWMP before retrieving flag\n"); + return 0; + } + + if (ctx->flags & VB2_CONTEXT_NO_SECDATA_FWMP) + return 0; + + return !!(sec->flags & flag); +} + +uint8_t *vb2_secdata_fwmp_get_dev_key_hash(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + struct vb2_secdata_fwmp *sec = + (struct vb2_secdata_fwmp *)&ctx->secdata_fwmp; + + if (!(sd->status & VB2_SD_STATUS_SECDATA_FWMP_INIT)) { + VB2_REC_OR_DIE(ctx, "Must init FWMP before get dev key hash\n"); + return NULL; + } + + if (ctx->flags & VB2_CONTEXT_NO_SECDATA_FWMP) + return NULL; + + return sec->dev_key_hash; +} diff --git a/firmware/2lib/2secdata_kernel.c b/firmware/2lib/2secdata_kernel.c new file mode 100644 index 0000000..0d4208f --- /dev/null +++ b/firmware/2lib/2secdata_kernel.c @@ -0,0 +1,319 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Secure storage APIs - kernel version space + */ + +#include "2common.h" +#include "2crc8.h" +#include "2misc.h" +#include "2secdata.h" +#include "2secdata_struct.h" +#include "2sysincludes.h" +#include "vboot_test.h" + +#define MAJOR_VER(x) (((x) & 0xf0) >> 4) +#define MINOR_VER(x) ((x) & 0x0f) + +static inline int is_v0(struct vb2_context *ctx) +{ + struct vb2_secdata_kernel_v1 *sec = (void *)ctx->secdata_kernel; + return MAJOR_VER(sec->struct_version) == 0; +} + +/** + * Calculate crc8 of kernel secure storage. + * + * @param ctx Context pointer + * @return Calculated crc8 value. + */ +static uint8_t secdata_kernel_crc(struct vb2_context *ctx) +{ + size_t offset, size; + + if (is_v0(ctx)) { + offset = 0; + size = offsetof(struct vb2_secdata_kernel_v0, crc8); + } else { + struct vb2_secdata_kernel_v1 *sec + = (void *)ctx->secdata_kernel; + offset = offsetof(struct vb2_secdata_kernel_v1, flags); + size = sec->struct_size - offset; + } + + return vb2_crc8(ctx->secdata_kernel + offset, size); +} + +static vb2_error_t secdata_kernel_check_v0(struct vb2_context *ctx, + uint8_t *size) +{ + struct vb2_secdata_kernel_v0 *sec = (void *)ctx->secdata_kernel; + uint8_t ver = sec->struct_version; + + if (MINOR_VER(ver) != MINOR_VER(VB2_SECDATA_KERNEL_VERSION_V02)) { + VB2_DEBUG("secdata_kernel: bad struct_version (%d.%d)\n", + MAJOR_VER(ver), MINOR_VER(ver)); + return VB2_ERROR_SECDATA_KERNEL_VERSION; + } + + *size = VB2_SECDATA_KERNEL_SIZE_V02; + + /* Verify CRC */ + if (sec->crc8 != secdata_kernel_crc(ctx)) { + VB2_DEBUG("secdata_kernel: bad CRC\n"); + return VB2_ERROR_SECDATA_KERNEL_CRC; + } + + /* Verify UID */ + if (sec->uid != VB2_SECDATA_KERNEL_UID) { + VB2_DEBUG("secdata_kernel: bad UID\n"); + return VB2_ERROR_SECDATA_KERNEL_UID; + } + + return VB2_SUCCESS; +} + +static vb2_error_t secdata_kernel_check_v1(struct vb2_context *ctx, + uint8_t *size) +{ + struct vb2_secdata_kernel_v1 *sec = (void *)ctx->secdata_kernel; + uint8_t ver = sec->struct_version; + + if (MAJOR_VER(ver) != MAJOR_VER(VB2_SECDATA_KERNEL_VERSION_V10)) { + VB2_DEBUG("secdata_kernel: bad struct_version (%d.%d)\n", + MAJOR_VER(ver), MINOR_VER(ver)); + return VB2_ERROR_SECDATA_KERNEL_VERSION; + } + + if (sec->struct_size < VB2_SECDATA_KERNEL_SIZE_V10 || + VB2_SECDATA_KERNEL_MAX_SIZE < sec->struct_size) { + VB2_DEBUG("secdata_kernel: bad struct_size (%d)\n", + sec->struct_size); + return VB2_ERROR_SECDATA_KERNEL_STRUCT_SIZE; + } + + if (*size < sec->struct_size) { + VB2_DEBUG("secdata_kernel: incomplete data (missing %d bytes)\n", + sec->struct_size - *size); + *size = sec->struct_size; + return VB2_ERROR_SECDATA_KERNEL_INCOMPLETE; + } + + /* + * In case larger data should be passed, kindly let the caller know + * the right size. + */ + *size = sec->struct_size; + + /* Verify CRC */ + if (sec->crc8 != secdata_kernel_crc(ctx)) { + VB2_DEBUG("secdata_kernel: bad CRC\n"); + return VB2_ERROR_SECDATA_KERNEL_CRC; + } + + return VB2_SUCCESS; +} + +vb2_error_t vb2api_secdata_kernel_check(struct vb2_context *ctx, uint8_t *size) +{ + if (*size < VB2_SECDATA_KERNEL_MIN_SIZE) { + VB2_DEBUG("secdata_kernel: data size too small!\n"); + *size = VB2_SECDATA_KERNEL_MIN_SIZE; + return VB2_ERROR_SECDATA_KERNEL_INCOMPLETE; + } + + if (is_v0(ctx)) + return secdata_kernel_check_v0(ctx, size); + else + return secdata_kernel_check_v1(ctx, size); +} + +uint32_t vb2api_secdata_kernel_create(struct vb2_context *ctx) +{ + struct vb2_secdata_kernel_v1 *sec = (void *)ctx->secdata_kernel; + + /* Populate the struct */ + memset(sec, 0, sizeof(*sec)); + sec->struct_version = VB2_SECDATA_KERNEL_VERSION_LATEST; + sec->struct_size = sizeof(*sec); + sec->crc8 = secdata_kernel_crc(ctx); + + /* Mark as changed */ + ctx->flags |= VB2_CONTEXT_SECDATA_KERNEL_CHANGED; + + return sizeof(*sec); +} + +/* For TPM 1.2 */ +uint32_t vb2api_secdata_kernel_create_v0(struct vb2_context *ctx) +{ + struct vb2_secdata_kernel_v0 *sec = (void *)ctx->secdata_kernel; + + /* Clear the entire struct */ + memset(sec, 0, sizeof(*sec)); + + /* Set to current version */ + sec->struct_version = VB2_SECDATA_KERNEL_VERSION_V02; + + /* Set UID */ + sec->uid = VB2_SECDATA_KERNEL_UID; + + /* Calculate initial CRC */ + sec->crc8 = vb2_crc8(sec, offsetof(struct vb2_secdata_kernel_v0, crc8)); + + /* Mark as changed */ + ctx->flags |= VB2_CONTEXT_SECDATA_KERNEL_CHANGED; + + return sizeof(*sec); +} + +vb2_error_t vb2_secdata_kernel_init(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + uint8_t size = VB2_SECDATA_KERNEL_MAX_SIZE; + + VB2_TRY(vb2api_secdata_kernel_check(ctx, &size)); + + /* Set status flag */ + sd->status |= VB2_SD_STATUS_SECDATA_KERNEL_INIT; + + return VB2_SUCCESS; +} + +uint32_t vb2_secdata_kernel_get(struct vb2_context *ctx, + enum vb2_secdata_kernel_param param) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + const char *msg; + const struct vb2_secdata_kernel_v0 *v0 = (void *)ctx->secdata_kernel; + const struct vb2_secdata_kernel_v1 *v1 = (void *)ctx->secdata_kernel; + + if (!(sd->status & VB2_SD_STATUS_SECDATA_KERNEL_INIT)) { + msg = "get before init"; + goto fail; + } + + switch (param) { + case VB2_SECDATA_KERNEL_VERSIONS: + return is_v0(ctx) ? v0->kernel_versions : v1->kernel_versions; + case VB2_SECDATA_KERNEL_FLAGS: + if (is_v0(ctx)) { + VB2_DEBUG("VB2_SECDATA_KERNEL_FLAGS not supported for " + "secdata_kernel v0, return 0\n"); + return 0; + } + return v1->flags; + default: + msg = "invalid param"; + } + + fail: + VB2_REC_OR_DIE(ctx, "%s\n", msg); + return 0; +} + +void vb2_secdata_kernel_set(struct vb2_context *ctx, + enum vb2_secdata_kernel_param param, + uint32_t value) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + const char *msg; + struct vb2_secdata_kernel_v0 *v0 = (void *)ctx->secdata_kernel; + struct vb2_secdata_kernel_v1 *v1 = (void *)ctx->secdata_kernel; + uint32_t *ptr; + + if (!(sd->status & VB2_SD_STATUS_SECDATA_KERNEL_INIT)) { + msg = "set before init"; + goto fail; + } + + /* If not changing the value, just return early */ + if (value == vb2_secdata_kernel_get(ctx, param)) + return; + + switch (param) { + case VB2_SECDATA_KERNEL_VERSIONS: + ptr = is_v0(ctx) ? &v0->kernel_versions : &v1->kernel_versions; + VB2_DEBUG("secdata_kernel versions updated from %#x to %#x\n", + *ptr, value); + *ptr = value; + break; + case VB2_SECDATA_KERNEL_FLAGS: + if (is_v0(ctx)) { + VB2_DEBUG("VB2_SECDATA_KERNEL_FLAGS not supported for " + "secdata_kernel v0, silently ignore\n"); + return; + } + + /* Make sure flags is in valid range */ + if (value > UINT8_MAX) { + msg = "flags out of range"; + goto fail; + } + + VB2_DEBUG("secdata_kernel flags updated from %#x to %#x\n", + v1->flags, value); + v1->flags = value; + break; + default: + msg = "invalid param"; + goto fail; + } + + if (is_v0(ctx)) + v0->crc8 = secdata_kernel_crc(ctx); + else + v1->crc8 = secdata_kernel_crc(ctx); + + ctx->flags |= VB2_CONTEXT_SECDATA_KERNEL_CHANGED; + return; + + fail: + VB2_REC_OR_DIE(ctx, "%s\n", msg); +} + +const uint8_t *vb2_secdata_kernel_get_ec_hash(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + struct vb2_secdata_kernel_v1 *sec = (void *)ctx->secdata_kernel; + + if (!(sd->status & VB2_SD_STATUS_SECDATA_KERNEL_INIT)) { + VB2_REC_OR_DIE(ctx, "Get kernel secdata before init\n"); + return NULL; + } + if (is_v0(ctx)) { + VB2_DEBUG("kernel secdata v.0* doesn't support EC hash\n"); + return NULL; + } + + return sec->ec_hash; +} + +void vb2_secdata_kernel_set_ec_hash(struct vb2_context *ctx, + const uint8_t *sha256) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + struct vb2_secdata_kernel_v1 *sec = (void *)ctx->secdata_kernel; + + if (!(sd->status & VB2_SD_STATUS_SECDATA_KERNEL_INIT)) { + VB2_REC_OR_DIE(ctx, "Get kernel secdata before init\n"); + return; + } + if (is_v0(ctx)) { + VB2_REC_OR_DIE(ctx, "Invalid version of kernel secdata\n"); + return; + } + + memcpy(sec->ec_hash, sha256, sizeof(sec->ec_hash)); + sec->crc8 = secdata_kernel_crc(ctx); + + ctx->flags |= VB2_CONTEXT_SECDATA_KERNEL_CHANGED; + + return; +} + +uint32_t vb2api_get_kernel_rollback_version(struct vb2_context *ctx) +{ + return vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_VERSIONS); +} diff --git a/firmware/2lib/2sha1.c b/firmware/2lib/2sha1.c new file mode 100644 index 0000000..68ee4fd --- /dev/null +++ b/firmware/2lib/2sha1.c @@ -0,0 +1,292 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * SHA-1 implementation largely based on libmincrypt in the the Android + * Open Source Project (platorm/system/core.git/libmincrypt/sha.c + */ + +#include "2common.h" +#include "2sha.h" +#include "2sysincludes.h" + +/* + * Some machines lack byteswap.h and endian.h. These have to use the + * slower code, even if they're little-endian. + */ + +#if defined(HAVE_ENDIAN_H) && defined(HAVE_LITTLE_ENDIAN) + +/* + * This version is about 28% faster than the generic version below, + * but assumes little-endianness. + */ +static uint32_t ror27(uint32_t val) +{ + return (val >> 27) | (val << 5); +} + +static uint32_t ror2(uint32_t val) +{ + return (val >> 2) | (val << 30); +} + +static uint32_t ror31(uint32_t val) +{ + return (val >> 31) | (val << 1); +} + +static void sha1_transform(struct vb2_sha1_context *ctx) +{ + /* Note that this array uses 80*4=320 bytes of stack */ + uint32_t W[80]; + register uint32_t A, B, C, D, E; + int t; + + A = ctx->state[0]; + B = ctx->state[1]; + C = ctx->state[2]; + D = ctx->state[3]; + E = ctx->state[4]; + +#define SHA_F1(A,B,C,D,E,t) \ + E += ror27(A) + \ + (W[t] = bswap_32(ctx->buf.w[t])) + \ + (D^(B&(C^D))) + 0x5A827999; \ + B = ror2(B); + + for (t = 0; t < 15; t += 5) { + SHA_F1(A,B,C,D,E,t + 0); + SHA_F1(E,A,B,C,D,t + 1); + SHA_F1(D,E,A,B,C,t + 2); + SHA_F1(C,D,E,A,B,t + 3); + SHA_F1(B,C,D,E,A,t + 4); + } + SHA_F1(A,B,C,D,E,t + 0); /* 16th one, t == 15 */ + +#undef SHA_F1 + +#define SHA_F1(A,B,C,D,E,t) \ + E += ror27(A) + \ + (W[t] = ror31(W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16])) + \ + (D^(B&(C^D))) + 0x5A827999; \ + B = ror2(B); + + SHA_F1(E,A,B,C,D,t + 1); + SHA_F1(D,E,A,B,C,t + 2); + SHA_F1(C,D,E,A,B,t + 3); + SHA_F1(B,C,D,E,A,t + 4); + +#undef SHA_F1 + +#define SHA_F2(A,B,C,D,E,t) \ + E += ror27(A) + \ + (W[t] = ror31(W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16])) + \ + (B^C^D) + 0x6ED9EBA1; \ + B = ror2(B); + + for (t = 20; t < 40; t += 5) { + SHA_F2(A,B,C,D,E,t + 0); + SHA_F2(E,A,B,C,D,t + 1); + SHA_F2(D,E,A,B,C,t + 2); + SHA_F2(C,D,E,A,B,t + 3); + SHA_F2(B,C,D,E,A,t + 4); + } + +#undef SHA_F2 + +#define SHA_F3(A,B,C,D,E,t) \ + E += ror27(A) + \ + (W[t] = ror31(W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16])) + \ + ((B&C)|(D&(B|C))) + 0x8F1BBCDC; \ + B = ror2(B); + + for (; t < 60; t += 5) { + SHA_F3(A,B,C,D,E,t + 0); + SHA_F3(E,A,B,C,D,t + 1); + SHA_F3(D,E,A,B,C,t + 2); + SHA_F3(C,D,E,A,B,t + 3); + SHA_F3(B,C,D,E,A,t + 4); + } + +#undef SHA_F3 + +#define SHA_F4(A,B,C,D,E,t) \ + E += ror27(A) + \ + (W[t] = ror31(W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16])) + \ + (B^C^D) + 0xCA62C1D6; \ + B = ror2(B); + + for (; t < 80; t += 5) { + SHA_F4(A,B,C,D,E,t + 0); + SHA_F4(E,A,B,C,D,t + 1); + SHA_F4(D,E,A,B,C,t + 2); + SHA_F4(C,D,E,A,B,t + 3); + SHA_F4(B,C,D,E,A,t + 4); + } + +#undef SHA_F4 + + ctx->state[0] += A; + ctx->state[1] += B; + ctx->state[2] += C; + ctx->state[3] += D; + ctx->state[4] += E; +} + +void vb2_sha1_update(struct vb2_sha1_context *ctx, + const uint8_t *data, + uint32_t size) +{ + int i = ctx->count % sizeof(ctx->buf); + const uint8_t *p = (const uint8_t*)data; + + ctx->count += size; + + while (size > sizeof(ctx->buf) - i) { + memcpy(&ctx->buf.b[i], p, sizeof(ctx->buf) - i); + size -= sizeof(ctx->buf) - i; + p += sizeof(ctx->buf) - i; + sha1_transform(ctx); + i = 0; + } + + while (size--) { + ctx->buf.b[i++] = *p++; + if (i == sizeof(ctx->buf)) { + sha1_transform(ctx); + i = 0; + } + } +} + +uint8_t *vb2_sha1_finalize(struct vb2_sha1_context *ctx) +{ + uint32_t cnt = ctx->count * 8; + int i; + + vb2_sha1_update(ctx, (uint8_t*)"\x80", 1); + while ((ctx->count % sizeof(ctx->buf)) != (sizeof(ctx->buf) - 8)) { + vb2_sha1_update(ctx, (uint8_t*)"\0", 1); + } + + for (i = 0; i < 8; ++i) { + uint8_t tmp = cnt >> ((7 - i) * 8); + vb2_sha1_update(ctx, &tmp, 1); + } + + for (i = 0; i < 5; i++) { + ctx->buf.w[i] = bswap_32(ctx->state[i]); + } + + return ctx->buf.b; +} + +#else /* #if defined(HAVE_ENDIAN_H) && defined(HAVE_LITTLE_ENDIAN) */ + +#define rol(bits, value) (((value) << (bits)) | ((value) >> (32 - (bits)))) + +static void sha1_transform(struct vb2_sha1_context *ctx) +{ + /* Note that this array uses 80*4=320 bytes of stack */ + uint32_t W[80]; + uint32_t A, B, C, D, E; + uint8_t *p = ctx->buf; + int t; + + for(t = 0; t < 16; ++t) { + uint32_t tmp = (uint32_t)*p++ << 24; + tmp |= *p++ << 16; + tmp |= *p++ << 8; + tmp |= *p++; + W[t] = tmp; + } + + for(; t < 80; t++) { + W[t] = rol(1,W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16]); + } + + A = ctx->state[0]; + B = ctx->state[1]; + C = ctx->state[2]; + D = ctx->state[3]; + E = ctx->state[4]; + + for(t = 0; t < 80; t++) { + uint32_t tmp = rol(5,A) + E + W[t]; + + if (t < 20) + tmp += (D^(B&(C^D))) + 0x5A827999; + else if ( t < 40) + tmp += (B^C^D) + 0x6ED9EBA1; + else if ( t < 60) + tmp += ((B&C)|(D&(B|C))) + 0x8F1BBCDC; + else + tmp += (B^C^D) + 0xCA62C1D6; + + E = D; + D = C; + C = rol(30,B); + B = A; + A = tmp; + } + + ctx->state[0] += A; + ctx->state[1] += B; + ctx->state[2] += C; + ctx->state[3] += D; + ctx->state[4] += E; +} + +void vb2_sha1_update(struct vb2_sha1_context *ctx, + const uint8_t *data, + uint32_t size) +{ + int i = (int)(ctx->count % sizeof(ctx->buf)); + const uint8_t* p = (const uint8_t*) data; + + ctx->count += size; + + while (size--) { + ctx->buf[i++] = *p++; + if (i == sizeof(ctx->buf)) { + sha1_transform(ctx); + i = 0; + } + } +} + +void vb2_sha1_finalize(struct vb2_sha1_context *ctx, uint8_t *digest) +{ + uint32_t cnt = ctx->count << 3; + int i; + + vb2_sha1_update(ctx, (uint8_t*)"\x80", 1); + while ((ctx->count % sizeof(ctx->buf)) != (sizeof(ctx->buf) - 8)) { + vb2_sha1_update(ctx, (uint8_t*)"\0", 1); + } + for (i = 0; i < 8; ++i) { + uint8_t tmp = (uint8_t)((uint64_t)cnt >> ((7 - i) * 8)); + vb2_sha1_update(ctx, &tmp, 1); + } + + for (i = 0; i < 5; i++) { + uint32_t tmp = ctx->state[i]; + *digest++ = (uint8_t)(tmp >> 24); + *digest++ = (uint8_t)(tmp >> 16); + *digest++ = (uint8_t)(tmp >> 8); + *digest++ = (uint8_t)(tmp >> 0); + } +} + +#endif /* endianness */ + +void vb2_sha1_init(struct vb2_sha1_context *ctx) +{ + ctx->state[0] = 0x67452301; + ctx->state[1] = 0xefcdab89; + ctx->state[2] = 0x98badcfe; + ctx->state[3] = 0x10325476; + ctx->state[4] = 0xc3d2e1f0; + ctx->count = 0; +} diff --git a/firmware/2lib/2sha256.c b/firmware/2lib/2sha256.c new file mode 100644 index 0000000..0044113 --- /dev/null +++ b/firmware/2lib/2sha256.c @@ -0,0 +1,335 @@ +/* Copyright 2021 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* SHA-256 and SHA-512 implementation based on code by Oliver Gay + * under a BSD-style license. See below. + */ + +/* + * FIPS 180-2 SHA-224/256/384/512 implementation + * Last update: 02/02/2007 + * Issue date: 04/30/2005 + * + * Copyright (C) 2005, 2007 Olivier Gay + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "2common.h" +#include "2sha.h" +#include "2sha_private.h" +#include "2sysincludes.h" + +#define SHFR(x, n) (x >> n) +#define ROTR(x, n) ((x >> n) | (x << ((sizeof(x) << 3) - n))) +#define ROTL(x, n) ((x << n) | (x >> ((sizeof(x) << 3) - n))) +#define CH(x, y, z) ((x & y) ^ (~x & z)) +#define MAJ(x, y, z) ((x & y) ^ (x & z) ^ (y & z)) + +#define SHA256_F1(x) (ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22)) +#define SHA256_F2(x) (ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25)) +#define SHA256_F3(x) (ROTR(x, 7) ^ ROTR(x, 18) ^ SHFR(x, 3)) +#define SHA256_F4(x) (ROTR(x, 17) ^ ROTR(x, 19) ^ SHFR(x, 10)) + +/* Macros used for loops unrolling */ + +#define SHA256_SCR(i) \ + { \ + w[i] = SHA256_F4(w[i - 2]) + w[i - 7] \ + + SHA256_F3(w[i - 15]) + w[i - 16]; \ + } + +#define SHA256_EXP(a, b, c, d, e, f, g, h, j) \ + { \ + t1 = wv[h] + SHA256_F2(wv[e]) + CH(wv[e], wv[f], wv[g]) \ + + vb2_sha256_k[j] + w[j]; \ + t2 = SHA256_F1(wv[a]) + MAJ(wv[a], wv[b], wv[c]); \ + wv[d] += t1; \ + wv[h] = t1 + t2; \ + } + +const uint32_t vb2_sha256_h0[8] = { + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, + 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 +}; + +static const uint32_t sha224_h0[8] = { + 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, + 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 +}; + +const uint32_t vb2_sha256_k[64] = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, + 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, + 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, + 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, + 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, + 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 +}; + +/* SHA-256 implementation */ +void vb2_sha256_init(struct vb2_sha256_context *ctx, + enum vb2_hash_algorithm algo) +{ + const uint32_t *h0 = algo == VB2_HASH_SHA224 ? sha224_h0 : vb2_sha256_h0; + +#ifndef UNROLL_LOOPS + int i; + for (i = 0; i < 8; i++) { + ctx->h[i] = h0[i]; + } +#else + ctx->h[0] = h0[0]; ctx->h[1] = h0[1]; + ctx->h[2] = h0[2]; ctx->h[3] = h0[3]; + ctx->h[4] = h0[4]; ctx->h[5] = h0[5]; + ctx->h[6] = h0[6]; ctx->h[7] = h0[7]; +#endif /* !UNROLL_LOOPS */ + + ctx->size = 0; + ctx->total_size = 0; +} + +static void vb2_sha256_transform(struct vb2_sha256_context *ctx, + const uint8_t *message, + unsigned int block_nb) +{ + /* Note that these arrays use 72*4=288 bytes of stack */ + uint32_t w[64]; + uint32_t wv[8]; + uint32_t t1, t2; + const unsigned char *sub_block; + int i; + +#ifndef UNROLL_LOOPS + int j; +#endif + + for (i = 0; i < (int) block_nb; i++) { + sub_block = message + (i << 6); + +#ifndef UNROLL_LOOPS + for (j = 0; j < 16; j++) { + PACK32(&sub_block[j << 2], &w[j]); + } + + for (j = 16; j < 64; j++) { + SHA256_SCR(j); + } + + for (j = 0; j < 8; j++) { + wv[j] = ctx->h[j]; + } + + for (j = 0; j < 64; j++) { + t1 = wv[7] + SHA256_F2(wv[4]) + CH(wv[4], wv[5], wv[6]) + + vb2_sha256_k[j] + w[j]; + t2 = SHA256_F1(wv[0]) + MAJ(wv[0], wv[1], wv[2]); + wv[7] = wv[6]; + wv[6] = wv[5]; + wv[5] = wv[4]; + wv[4] = wv[3] + t1; + wv[3] = wv[2]; + wv[2] = wv[1]; + wv[1] = wv[0]; + wv[0] = t1 + t2; + } + + for (j = 0; j < 8; j++) { + ctx->h[j] += wv[j]; + } +#else + PACK32(&sub_block[ 0], &w[ 0]); PACK32(&sub_block[ 4], &w[ 1]); + PACK32(&sub_block[ 8], &w[ 2]); PACK32(&sub_block[12], &w[ 3]); + PACK32(&sub_block[16], &w[ 4]); PACK32(&sub_block[20], &w[ 5]); + PACK32(&sub_block[24], &w[ 6]); PACK32(&sub_block[28], &w[ 7]); + PACK32(&sub_block[32], &w[ 8]); PACK32(&sub_block[36], &w[ 9]); + PACK32(&sub_block[40], &w[10]); PACK32(&sub_block[44], &w[11]); + PACK32(&sub_block[48], &w[12]); PACK32(&sub_block[52], &w[13]); + PACK32(&sub_block[56], &w[14]); PACK32(&sub_block[60], &w[15]); + + SHA256_SCR(16); SHA256_SCR(17); SHA256_SCR(18); SHA256_SCR(19); + SHA256_SCR(20); SHA256_SCR(21); SHA256_SCR(22); SHA256_SCR(23); + SHA256_SCR(24); SHA256_SCR(25); SHA256_SCR(26); SHA256_SCR(27); + SHA256_SCR(28); SHA256_SCR(29); SHA256_SCR(30); SHA256_SCR(31); + SHA256_SCR(32); SHA256_SCR(33); SHA256_SCR(34); SHA256_SCR(35); + SHA256_SCR(36); SHA256_SCR(37); SHA256_SCR(38); SHA256_SCR(39); + SHA256_SCR(40); SHA256_SCR(41); SHA256_SCR(42); SHA256_SCR(43); + SHA256_SCR(44); SHA256_SCR(45); SHA256_SCR(46); SHA256_SCR(47); + SHA256_SCR(48); SHA256_SCR(49); SHA256_SCR(50); SHA256_SCR(51); + SHA256_SCR(52); SHA256_SCR(53); SHA256_SCR(54); SHA256_SCR(55); + SHA256_SCR(56); SHA256_SCR(57); SHA256_SCR(58); SHA256_SCR(59); + SHA256_SCR(60); SHA256_SCR(61); SHA256_SCR(62); SHA256_SCR(63); + + wv[0] = ctx->h[0]; wv[1] = ctx->h[1]; + wv[2] = ctx->h[2]; wv[3] = ctx->h[3]; + wv[4] = ctx->h[4]; wv[5] = ctx->h[5]; + wv[6] = ctx->h[6]; wv[7] = ctx->h[7]; + + SHA256_EXP(0,1,2,3,4,5,6,7, 0); SHA256_EXP(7,0,1,2,3,4,5,6, 1); + SHA256_EXP(6,7,0,1,2,3,4,5, 2); SHA256_EXP(5,6,7,0,1,2,3,4, 3); + SHA256_EXP(4,5,6,7,0,1,2,3, 4); SHA256_EXP(3,4,5,6,7,0,1,2, 5); + SHA256_EXP(2,3,4,5,6,7,0,1, 6); SHA256_EXP(1,2,3,4,5,6,7,0, 7); + SHA256_EXP(0,1,2,3,4,5,6,7, 8); SHA256_EXP(7,0,1,2,3,4,5,6, 9); + SHA256_EXP(6,7,0,1,2,3,4,5,10); SHA256_EXP(5,6,7,0,1,2,3,4,11); + SHA256_EXP(4,5,6,7,0,1,2,3,12); SHA256_EXP(3,4,5,6,7,0,1,2,13); + SHA256_EXP(2,3,4,5,6,7,0,1,14); SHA256_EXP(1,2,3,4,5,6,7,0,15); + SHA256_EXP(0,1,2,3,4,5,6,7,16); SHA256_EXP(7,0,1,2,3,4,5,6,17); + SHA256_EXP(6,7,0,1,2,3,4,5,18); SHA256_EXP(5,6,7,0,1,2,3,4,19); + SHA256_EXP(4,5,6,7,0,1,2,3,20); SHA256_EXP(3,4,5,6,7,0,1,2,21); + SHA256_EXP(2,3,4,5,6,7,0,1,22); SHA256_EXP(1,2,3,4,5,6,7,0,23); + SHA256_EXP(0,1,2,3,4,5,6,7,24); SHA256_EXP(7,0,1,2,3,4,5,6,25); + SHA256_EXP(6,7,0,1,2,3,4,5,26); SHA256_EXP(5,6,7,0,1,2,3,4,27); + SHA256_EXP(4,5,6,7,0,1,2,3,28); SHA256_EXP(3,4,5,6,7,0,1,2,29); + SHA256_EXP(2,3,4,5,6,7,0,1,30); SHA256_EXP(1,2,3,4,5,6,7,0,31); + SHA256_EXP(0,1,2,3,4,5,6,7,32); SHA256_EXP(7,0,1,2,3,4,5,6,33); + SHA256_EXP(6,7,0,1,2,3,4,5,34); SHA256_EXP(5,6,7,0,1,2,3,4,35); + SHA256_EXP(4,5,6,7,0,1,2,3,36); SHA256_EXP(3,4,5,6,7,0,1,2,37); + SHA256_EXP(2,3,4,5,6,7,0,1,38); SHA256_EXP(1,2,3,4,5,6,7,0,39); + SHA256_EXP(0,1,2,3,4,5,6,7,40); SHA256_EXP(7,0,1,2,3,4,5,6,41); + SHA256_EXP(6,7,0,1,2,3,4,5,42); SHA256_EXP(5,6,7,0,1,2,3,4,43); + SHA256_EXP(4,5,6,7,0,1,2,3,44); SHA256_EXP(3,4,5,6,7,0,1,2,45); + SHA256_EXP(2,3,4,5,6,7,0,1,46); SHA256_EXP(1,2,3,4,5,6,7,0,47); + SHA256_EXP(0,1,2,3,4,5,6,7,48); SHA256_EXP(7,0,1,2,3,4,5,6,49); + SHA256_EXP(6,7,0,1,2,3,4,5,50); SHA256_EXP(5,6,7,0,1,2,3,4,51); + SHA256_EXP(4,5,6,7,0,1,2,3,52); SHA256_EXP(3,4,5,6,7,0,1,2,53); + SHA256_EXP(2,3,4,5,6,7,0,1,54); SHA256_EXP(1,2,3,4,5,6,7,0,55); + SHA256_EXP(0,1,2,3,4,5,6,7,56); SHA256_EXP(7,0,1,2,3,4,5,6,57); + SHA256_EXP(6,7,0,1,2,3,4,5,58); SHA256_EXP(5,6,7,0,1,2,3,4,59); + SHA256_EXP(4,5,6,7,0,1,2,3,60); SHA256_EXP(3,4,5,6,7,0,1,2,61); + SHA256_EXP(2,3,4,5,6,7,0,1,62); SHA256_EXP(1,2,3,4,5,6,7,0,63); + + ctx->h[0] += wv[0]; ctx->h[1] += wv[1]; + ctx->h[2] += wv[2]; ctx->h[3] += wv[3]; + ctx->h[4] += wv[4]; ctx->h[5] += wv[5]; + ctx->h[6] += wv[6]; ctx->h[7] += wv[7]; +#endif /* !UNROLL_LOOPS */ + } +} + +void vb2_sha256_update(struct vb2_sha256_context *ctx, + const uint8_t *data, + uint32_t size) +{ + unsigned int block_nb; + unsigned int new_size, rem_size, tmp_size; + const uint8_t *shifted_data; + + tmp_size = VB2_SHA256_BLOCK_SIZE - ctx->size; + rem_size = size < tmp_size ? size : tmp_size; + + memcpy(&ctx->block[ctx->size], data, rem_size); + + if (ctx->size + size < VB2_SHA256_BLOCK_SIZE) { + ctx->size += size; + return; + } + + new_size = size - rem_size; + block_nb = new_size / VB2_SHA256_BLOCK_SIZE; + + shifted_data = data + rem_size; + + vb2_sha256_transform(ctx, ctx->block, 1); + vb2_sha256_transform(ctx, shifted_data, block_nb); + + rem_size = new_size % VB2_SHA256_BLOCK_SIZE; + + memcpy(ctx->block, &shifted_data[block_nb << 6], + rem_size); + + ctx->size = rem_size; + ctx->total_size += (block_nb + 1) << 6; +} + +void vb2_sha256_finalize(struct vb2_sha256_context *ctx, uint8_t *digest, + enum vb2_hash_algorithm algo) +{ + unsigned int block_nb; + unsigned int pm_size; + unsigned int size_b; +#ifndef UNROLL_LOOPS + int i; +#endif + + block_nb = (1 + ((VB2_SHA256_BLOCK_SIZE - 9) + < (ctx->size % VB2_SHA256_BLOCK_SIZE))); + + size_b = (ctx->total_size + ctx->size) << 3; + pm_size = block_nb << 6; + + memset(ctx->block + ctx->size, 0, pm_size - ctx->size); + ctx->block[ctx->size] = 0x80; + UNPACK32(size_b, ctx->block + pm_size - 4); + + vb2_sha256_transform(ctx, ctx->block, block_nb); + +#ifndef UNROLL_LOOPS + for (i = 0 ; i < (algo == VB2_HASH_SHA224 ? 7 : 8); i++) { + UNPACK32(ctx->h[i], &digest[i << 2]); + } +#else + UNPACK32(ctx->h[0], &digest[ 0]); + UNPACK32(ctx->h[1], &digest[ 4]); + UNPACK32(ctx->h[2], &digest[ 8]); + UNPACK32(ctx->h[3], &digest[12]); + UNPACK32(ctx->h[4], &digest[16]); + UNPACK32(ctx->h[5], &digest[20]); + UNPACK32(ctx->h[6], &digest[24]); + if (algo != VB2_HASH_SHA224) { + UNPACK32(ctx->h[7], &digest[28]); + } +#endif /* !UNROLL_LOOPS */ +} + +void vb2_sha256_extend(const uint8_t *from, const uint8_t *by, uint8_t *to) +{ + struct vb2_sha256_context dc; + int i; + + for (i = 0; i < 8; i++) { + PACK32(from, &dc.h[i]); + from += 4; + } + + vb2_sha256_transform(&dc, by, 1); + + for (i = 0; i < 8; i++) { + UNPACK32(dc.h[i], to); + to += 4; + } +} diff --git a/firmware/2lib/2sha256_x86.c b/firmware/2lib/2sha256_x86.c new file mode 100644 index 0000000..e80477e --- /dev/null +++ b/firmware/2lib/2sha256_x86.c @@ -0,0 +1,255 @@ +/* Copyright 2021 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * SHA256 implementation using x86 SHA extension. + * Mainly from https://github.com/noloader/SHA-Intrinsics/blob/master/sha256-x86.c, + * Written and place in public domain by Jeffrey Walton + * Based on code from Intel, and by Sean Gulley for + * the miTLS project. + */ +#include "2common.h" +#include "2sha.h" +#include "2sha_private.h" +#include "2api.h" + +static struct vb2_sha256_context sha_ctx; + +typedef int vb2_m128i __attribute__ ((vector_size(16))); + +static inline vb2_m128i vb2_loadu_si128(vb2_m128i *ptr) +{ + vb2_m128i result; + asm volatile ("movups %1, %0" : "=x"(result) : "m"(*ptr)); + return result; +} + +static inline void vb2_storeu_si128(vb2_m128i *to, vb2_m128i from) +{ + asm volatile ("movups %1, %0" : "=m"(*to) : "x"(from)); +} + +static inline vb2_m128i vb2_add_epi32(vb2_m128i a, vb2_m128i b) +{ + return a + b; +} + +static inline vb2_m128i vb2_shuffle_epi8(vb2_m128i value, vb2_m128i mask) +{ + asm ("pshufb %1, %0" : "+x"(value) : "xm"(mask)); + return value; +} + +static inline vb2_m128i vb2_shuffle_epi32(vb2_m128i value, int mask) +{ + vb2_m128i result; + asm ("pshufd %2, %1, %0" : "=x"(result) : "xm"(value), "i" (mask)); + return result; +} + +static inline vb2_m128i vb2_alignr_epi8(vb2_m128i a, vb2_m128i b, int imm8) +{ + asm ("palignr %2, %1, %0" : "+x"(a) : "xm"(b), "i"(imm8)); + return a; +} + +static inline vb2_m128i vb2_sha256msg1_epu32(vb2_m128i a, vb2_m128i b) +{ + asm ("sha256msg1 %1, %0" : "+x"(a) : "xm"(b)); + return a; +} + +static inline vb2_m128i vb2_sha256msg2_epu32(vb2_m128i a, vb2_m128i b) +{ + asm ("sha256msg2 %1, %0" : "+x"(a) : "xm"(b)); + return a; +} + +static inline vb2_m128i vb2_sha256rnds2_epu32(vb2_m128i a, vb2_m128i b, + vb2_m128i k) +{ + asm ("sha256rnds2 %1, %0" : "+x"(a) : "xm"(b), "Yz"(k)); + return a; +} + +#define SHA256_X86_PUT_STATE1(j, i) \ + { \ + msgtmp[j] = vb2_loadu_si128((vb2_m128i *) \ + (message + (i << 6) + (j * 16))); \ + msgtmp[j] = vb2_shuffle_epi8(msgtmp[j], shuf_mask); \ + msg = vb2_add_epi32(msgtmp[j], \ + vb2_loadu_si128((vb2_m128i *)&vb2_sha256_k[j * 4])); \ + state1 = vb2_sha256rnds2_epu32(state1, state0, msg); \ + } + +#define SHA256_X86_PUT_STATE0() \ + { \ + msg = vb2_shuffle_epi32(msg, 0x0E); \ + state0 = vb2_sha256rnds2_epu32(state0, state1, msg); \ + } + +#define SHA256_X86_LOOP(j) \ + { \ + int k = j & 3; \ + int prev_k = (k + 3) & 3; \ + int next_k = (k + 1) & 3; \ + msg = vb2_add_epi32(msgtmp[k], \ + vb2_loadu_si128((vb2_m128i *)&vb2_sha256_k[j * 4])); \ + state1 = vb2_sha256rnds2_epu32(state1, state0, msg); \ + tmp = vb2_alignr_epi8(msgtmp[k], msgtmp[prev_k], 4); \ + msgtmp[next_k] = vb2_add_epi32(msgtmp[next_k], tmp); \ + msgtmp[next_k] = vb2_sha256msg2_epu32(msgtmp[next_k], \ + msgtmp[k]); \ + SHA256_X86_PUT_STATE0(); \ + msgtmp[prev_k] = vb2_sha256msg1_epu32(msgtmp[prev_k], \ + msgtmp[k]); \ + } + +static void vb2_sha256_transform_x86ext(const uint8_t *message, + unsigned int block_nb) +{ + vb2_m128i state0, state1, msg, abef_save, cdgh_save; + vb2_m128i msgtmp[4]; + vb2_m128i tmp; + int i; + const vb2_m128i shuf_mask = {0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f}; + + state0 = vb2_loadu_si128((vb2_m128i *)&sha_ctx.h[0]); + state1 = vb2_loadu_si128((vb2_m128i *)&sha_ctx.h[4]); + for (i = 0; i < (int) block_nb; i++) { + abef_save = state0; + cdgh_save = state1; + + SHA256_X86_PUT_STATE1(0, i); + SHA256_X86_PUT_STATE0(); + + SHA256_X86_PUT_STATE1(1, i); + SHA256_X86_PUT_STATE0(); + msgtmp[0] = vb2_sha256msg1_epu32(msgtmp[0], msgtmp[1]); + + SHA256_X86_PUT_STATE1(2, i); + SHA256_X86_PUT_STATE0(); + msgtmp[1] = vb2_sha256msg1_epu32(msgtmp[1], msgtmp[2]); + + SHA256_X86_PUT_STATE1(3, i); + tmp = vb2_alignr_epi8(msgtmp[3], msgtmp[2], 4); + msgtmp[0] = vb2_add_epi32(msgtmp[0], tmp); + msgtmp[0] = vb2_sha256msg2_epu32(msgtmp[0], msgtmp[3]); + SHA256_X86_PUT_STATE0(); + msgtmp[2] = vb2_sha256msg1_epu32(msgtmp[2], msgtmp[3]); + + SHA256_X86_LOOP(4); + SHA256_X86_LOOP(5); + SHA256_X86_LOOP(6); + SHA256_X86_LOOP(7); + SHA256_X86_LOOP(8); + SHA256_X86_LOOP(9); + SHA256_X86_LOOP(10); + SHA256_X86_LOOP(11); + SHA256_X86_LOOP(12); + SHA256_X86_LOOP(13); + SHA256_X86_LOOP(14); + + msg = vb2_add_epi32(msgtmp[3], + vb2_loadu_si128((vb2_m128i *)&vb2_sha256_k[15 * 4])); + state1 = vb2_sha256rnds2_epu32(state1, state0, msg); + SHA256_X86_PUT_STATE0(); + + state0 = vb2_add_epi32(state0, abef_save); + state1 = vb2_add_epi32(state1, cdgh_save); + + } + + vb2_storeu_si128((vb2_m128i *)&sha_ctx.h[0], state0); + vb2_storeu_si128((vb2_m128i *)&sha_ctx.h[4], state1); +} + +vb2_error_t vb2ex_hwcrypto_digest_init(enum vb2_hash_algorithm hash_alg, + uint32_t data_size) +{ + if (hash_alg != VB2_HASH_SHA256) + return VB2_ERROR_EX_HWCRYPTO_UNSUPPORTED; + + sha_ctx.h[0] = vb2_sha256_h0[5]; + sha_ctx.h[1] = vb2_sha256_h0[4]; + sha_ctx.h[2] = vb2_sha256_h0[1]; + sha_ctx.h[3] = vb2_sha256_h0[0]; + sha_ctx.h[4] = vb2_sha256_h0[7]; + sha_ctx.h[5] = vb2_sha256_h0[6]; + sha_ctx.h[6] = vb2_sha256_h0[3]; + sha_ctx.h[7] = vb2_sha256_h0[2]; + sha_ctx.size = 0; + sha_ctx.total_size = 0; + memset(sha_ctx.block, 0, sizeof(sha_ctx.block)); + + return VB2_SUCCESS; +} + +vb2_error_t vb2ex_hwcrypto_digest_extend(const uint8_t *buf, uint32_t size) +{ + unsigned int remaining_blocks; + unsigned int new_size, rem_size, tmp_size; + const uint8_t *shifted_data; + + tmp_size = VB2_SHA256_BLOCK_SIZE - sha_ctx.size; + rem_size = size < tmp_size ? size : tmp_size; + + memcpy(&sha_ctx.block[sha_ctx.size], buf, rem_size); + + if (sha_ctx.size + size < VB2_SHA256_BLOCK_SIZE) { + sha_ctx.size += size; + return VB2_SUCCESS; + } + + new_size = size - rem_size; + remaining_blocks = new_size / VB2_SHA256_BLOCK_SIZE; + + shifted_data = buf + rem_size; + + vb2_sha256_transform_x86ext(sha_ctx.block, 1); + vb2_sha256_transform_x86ext(shifted_data, remaining_blocks); + + rem_size = new_size % VB2_SHA256_BLOCK_SIZE; + + memcpy(sha_ctx.block, &shifted_data[remaining_blocks * VB2_SHA256_BLOCK_SIZE], + rem_size); + + sha_ctx.size = rem_size; + sha_ctx.total_size += (remaining_blocks + 1) * VB2_SHA256_BLOCK_SIZE; + return VB2_SUCCESS; +} + +vb2_error_t vb2ex_hwcrypto_digest_finalize(uint8_t *digest, + uint32_t digest_size) +{ + unsigned int block_nb; + unsigned int pm_size; + unsigned int size_b; + unsigned int block_rem_size = sha_ctx.size % VB2_SHA256_BLOCK_SIZE; + if (digest_size != VB2_SHA256_DIGEST_SIZE) { + VB2_DEBUG("ERROR: Digest size does not match expected length.\n"); + return VB2_ERROR_SHA_FINALIZE_DIGEST_SIZE; + } + + block_nb = (1 + ((VB2_SHA256_BLOCK_SIZE - SHA256_MIN_PAD_LEN) + < block_rem_size)); + + size_b = (sha_ctx.total_size + sha_ctx.size) * 8; + pm_size = block_nb * VB2_SHA256_BLOCK_SIZE; + + memset(sha_ctx.block + sha_ctx.size, 0, pm_size - sha_ctx.size); + sha_ctx.block[sha_ctx.size] = SHA256_PAD_BEGIN; + UNPACK32(size_b, sha_ctx.block + pm_size - 4); + + vb2_sha256_transform_x86ext(sha_ctx.block, block_nb); + + UNPACK32(sha_ctx.h[3], &digest[ 0]); + UNPACK32(sha_ctx.h[2], &digest[ 4]); + UNPACK32(sha_ctx.h[7], &digest[ 8]); + UNPACK32(sha_ctx.h[6], &digest[12]); + UNPACK32(sha_ctx.h[1], &digest[16]); + UNPACK32(sha_ctx.h[0], &digest[20]); + UNPACK32(sha_ctx.h[5], &digest[24]); + UNPACK32(sha_ctx.h[4], &digest[28]); + return VB2_SUCCESS; +} diff --git a/firmware/2lib/2sha512.c b/firmware/2lib/2sha512.c new file mode 100644 index 0000000..b72ebce --- /dev/null +++ b/firmware/2lib/2sha512.c @@ -0,0 +1,359 @@ +/* SHA-256 and SHA-512 implementation based on code by Oliver Gay + * under a BSD-style license. See below. + */ + +/* + * FIPS 180-2 SHA-224/256/384/512 implementation + * Last update: 02/02/2007 + * Issue date: 04/30/2005 + * + * Copyright (C) 2005, 2007 Olivier Gay + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "2common.h" +#include "2sha.h" +#include "2sysincludes.h" + +#define SHFR(x, n) (x >> n) +#define ROTR(x, n) ((x >> n) | (x << ((sizeof(x) << 3) - n))) +#define ROTL(x, n) ((x << n) | (x >> ((sizeof(x) << 3) - n))) +#define CH(x, y, z) ((x & y) ^ (~x & z)) +#define MAJ(x, y, z) ((x & y) ^ (x & z) ^ (y & z)) + +#define SHA512_F1(x) (ROTR(x, 28) ^ ROTR(x, 34) ^ ROTR(x, 39)) +#define SHA512_F2(x) (ROTR(x, 14) ^ ROTR(x, 18) ^ ROTR(x, 41)) +#define SHA512_F3(x) (ROTR(x, 1) ^ ROTR(x, 8) ^ SHFR(x, 7)) +#define SHA512_F4(x) (ROTR(x, 19) ^ ROTR(x, 61) ^ SHFR(x, 6)) + +#define UNPACK32(x, str) \ + { \ + *((str) + 3) = (uint8_t) ((x) ); \ + *((str) + 2) = (uint8_t) ((x) >> 8); \ + *((str) + 1) = (uint8_t) ((x) >> 16); \ + *((str) + 0) = (uint8_t) ((x) >> 24); \ + } + +#define UNPACK64(x, str) \ + { \ + *((str) + 7) = (uint8_t) x; \ + *((str) + 6) = (uint8_t) ((uint64_t)x >> 8); \ + *((str) + 5) = (uint8_t) ((uint64_t)x >> 16); \ + *((str) + 4) = (uint8_t) ((uint64_t)x >> 24); \ + *((str) + 3) = (uint8_t) ((uint64_t)x >> 32); \ + *((str) + 2) = (uint8_t) ((uint64_t)x >> 40); \ + *((str) + 1) = (uint8_t) ((uint64_t)x >> 48); \ + *((str) + 0) = (uint8_t) ((uint64_t)x >> 56); \ + } + +#define PACK64(str, x) \ + { \ + *(x) = ((uint64_t) *((str) + 7) ) \ + | ((uint64_t) *((str) + 6) << 8) \ + | ((uint64_t) *((str) + 5) << 16) \ + | ((uint64_t) *((str) + 4) << 24) \ + | ((uint64_t) *((str) + 3) << 32) \ + | ((uint64_t) *((str) + 2) << 40) \ + | ((uint64_t) *((str) + 1) << 48) \ + | ((uint64_t) *((str) + 0) << 56); \ + } + +/* Macros used for loops unrolling */ + +#define SHA512_SCR(i) \ + { \ + w[i] = SHA512_F4(w[i - 2]) + w[i - 7] \ + + SHA512_F3(w[i - 15]) + w[i - 16]; \ + } + +#define SHA512_EXP(a, b, c, d, e, f, g ,h, j) \ + { \ + t1 = wv[h] + SHA512_F2(wv[e]) + CH(wv[e], wv[f], wv[g]) \ + + sha512_k[j] + w[j]; \ + t2 = SHA512_F1(wv[a]) + MAJ(wv[a], wv[b], wv[c]); \ + wv[d] += t1; \ + wv[h] = t1 + t2; \ + } + +static const uint64_t sha512_h0[8] = { + 0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL, + 0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL, + 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL, + 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL +}; + +static const uint64_t sha384_h0[8] = { + 0xcbbb9d5dc1059ed8ULL, 0x629a292a367cd507ULL, + 0x9159015a3070dd17ULL, 0x152fecd8f70e5939ULL, + 0x67332667ffc00b31ULL, 0x8eb44a8768581511ULL, + 0xdb0c2e0d64f98fa7ULL, 0x47b5481dbefa4fa4ULL +}; + +static const uint64_t sha512_k[80] = { + 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, + 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL, + 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL, + 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, + 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL, + 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL, + 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, + 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL, + 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL, + 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, + 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL, + 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL, + 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, + 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL, + 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL, + 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, + 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL, + 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL, + 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, + 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL, + 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL, + 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, + 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL, + 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL, + 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, + 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL, + 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL, + 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, + 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL, + 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL, + 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, + 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL, + 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL, + 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, + 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL, + 0x113f9804bef90daeULL, 0x1b710b35131c471bULL, + 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, + 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL, + 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, + 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL +}; + +/* SHA-512 implementation */ + +void vb2_sha512_init(struct vb2_sha512_context *ctx, + enum vb2_hash_algorithm algo) +{ + const uint64_t *h0 = algo == VB2_HASH_SHA384 ? sha384_h0 : sha512_h0; + +#ifdef UNROLL_LOOPS_SHA512 + ctx->h[0] = h0[0]; ctx->h[1] = h0[1]; + ctx->h[2] = h0[2]; ctx->h[3] = h0[3]; + ctx->h[4] = h0[4]; ctx->h[5] = h0[5]; + ctx->h[6] = h0[6]; ctx->h[7] = h0[7]; +#else + int i; + + for (i = 0; i < 8; i++) + ctx->h[i] = h0[i]; +#endif /* UNROLL_LOOPS_SHA512 */ + + ctx->size = 0; + ctx->total_size = 0; +} + +static void vb2_sha512_transform(struct vb2_sha512_context *ctx, + const uint8_t *message, + unsigned int block_nb) +{ + /* Note that these arrays use 88*8=704 bytes of stack */ + uint64_t w[80]; + uint64_t wv[8]; + uint64_t t1, t2; + const uint8_t *sub_block; + int i, j; + + for (i = 0; i < (int) block_nb; i++) { + sub_block = message + (i << 7); + +#ifdef UNROLL_LOOPS_SHA512 + PACK64(&sub_block[ 0], &w[ 0]); + PACK64(&sub_block[ 8], &w[ 1]); + PACK64(&sub_block[ 16], &w[ 2]); + PACK64(&sub_block[ 24], &w[ 3]); + PACK64(&sub_block[ 32], &w[ 4]); + PACK64(&sub_block[ 40], &w[ 5]); + PACK64(&sub_block[ 48], &w[ 6]); + PACK64(&sub_block[ 56], &w[ 7]); + PACK64(&sub_block[ 64], &w[ 8]); + PACK64(&sub_block[ 72], &w[ 9]); + PACK64(&sub_block[ 80], &w[10]); + PACK64(&sub_block[ 88], &w[11]); + PACK64(&sub_block[ 96], &w[12]); + PACK64(&sub_block[104], &w[13]); + PACK64(&sub_block[112], &w[14]); + PACK64(&sub_block[120], &w[15]); + + SHA512_SCR(16); SHA512_SCR(17); SHA512_SCR(18); SHA512_SCR(19); + SHA512_SCR(20); SHA512_SCR(21); SHA512_SCR(22); SHA512_SCR(23); + SHA512_SCR(24); SHA512_SCR(25); SHA512_SCR(26); SHA512_SCR(27); + SHA512_SCR(28); SHA512_SCR(29); SHA512_SCR(30); SHA512_SCR(31); + SHA512_SCR(32); SHA512_SCR(33); SHA512_SCR(34); SHA512_SCR(35); + SHA512_SCR(36); SHA512_SCR(37); SHA512_SCR(38); SHA512_SCR(39); + SHA512_SCR(40); SHA512_SCR(41); SHA512_SCR(42); SHA512_SCR(43); + SHA512_SCR(44); SHA512_SCR(45); SHA512_SCR(46); SHA512_SCR(47); + SHA512_SCR(48); SHA512_SCR(49); SHA512_SCR(50); SHA512_SCR(51); + SHA512_SCR(52); SHA512_SCR(53); SHA512_SCR(54); SHA512_SCR(55); + SHA512_SCR(56); SHA512_SCR(57); SHA512_SCR(58); SHA512_SCR(59); + SHA512_SCR(60); SHA512_SCR(61); SHA512_SCR(62); SHA512_SCR(63); + SHA512_SCR(64); SHA512_SCR(65); SHA512_SCR(66); SHA512_SCR(67); + SHA512_SCR(68); SHA512_SCR(69); SHA512_SCR(70); SHA512_SCR(71); + SHA512_SCR(72); SHA512_SCR(73); SHA512_SCR(74); SHA512_SCR(75); + SHA512_SCR(76); SHA512_SCR(77); SHA512_SCR(78); SHA512_SCR(79); + + wv[0] = ctx->h[0]; wv[1] = ctx->h[1]; + wv[2] = ctx->h[2]; wv[3] = ctx->h[3]; + wv[4] = ctx->h[4]; wv[5] = ctx->h[5]; + wv[6] = ctx->h[6]; wv[7] = ctx->h[7]; + + j = 0; + + do { + SHA512_EXP(0,1,2,3,4,5,6,7,j); j++; + SHA512_EXP(7,0,1,2,3,4,5,6,j); j++; + SHA512_EXP(6,7,0,1,2,3,4,5,j); j++; + SHA512_EXP(5,6,7,0,1,2,3,4,j); j++; + SHA512_EXP(4,5,6,7,0,1,2,3,j); j++; + SHA512_EXP(3,4,5,6,7,0,1,2,j); j++; + SHA512_EXP(2,3,4,5,6,7,0,1,j); j++; + SHA512_EXP(1,2,3,4,5,6,7,0,j); j++; + } while (j < 80); + + ctx->h[0] += wv[0]; ctx->h[1] += wv[1]; + ctx->h[2] += wv[2]; ctx->h[3] += wv[3]; + ctx->h[4] += wv[4]; ctx->h[5] += wv[5]; + ctx->h[6] += wv[6]; ctx->h[7] += wv[7]; +#else + for (j = 0; j < 16; j++) { + PACK64(&sub_block[j << 3], &w[j]); + } + + for (j = 16; j < 80; j++) { + SHA512_SCR(j); + } + + for (j = 0; j < 8; j++) { + wv[j] = ctx->h[j]; + } + + for (j = 0; j < 80; j++) { + t1 = wv[7] + SHA512_F2(wv[4]) + CH(wv[4], wv[5], wv[6]) + + sha512_k[j] + w[j]; + t2 = SHA512_F1(wv[0]) + MAJ(wv[0], wv[1], wv[2]); + wv[7] = wv[6]; + wv[6] = wv[5]; + wv[5] = wv[4]; + wv[4] = wv[3] + t1; + wv[3] = wv[2]; + wv[2] = wv[1]; + wv[1] = wv[0]; + wv[0] = t1 + t2; + } + + for (j = 0; j < 8; j++) + ctx->h[j] += wv[j]; +#endif /* UNROLL_LOOPS_SHA512 */ + } +} + +void vb2_sha512_update(struct vb2_sha512_context *ctx, + const uint8_t *data, + uint32_t size) +{ + unsigned int block_nb; + unsigned int new_size, rem_size, tmp_size; + const uint8_t *shifted_data; + + tmp_size = VB2_SHA512_BLOCK_SIZE - ctx->size; + rem_size = size < tmp_size ? size : tmp_size; + + memcpy(&ctx->block[ctx->size], data, rem_size); + + if (ctx->size + size < VB2_SHA512_BLOCK_SIZE) { + ctx->size += size; + return; + } + + new_size = size - rem_size; + block_nb = new_size / VB2_SHA512_BLOCK_SIZE; + + shifted_data = data + rem_size; + + vb2_sha512_transform(ctx, ctx->block, 1); + vb2_sha512_transform(ctx, shifted_data, block_nb); + + rem_size = new_size % VB2_SHA512_BLOCK_SIZE; + + memcpy(ctx->block, &shifted_data[block_nb << 7], + rem_size); + + ctx->size = rem_size; + ctx->total_size += (block_nb + 1) << 7; +} + +void vb2_sha512_finalize(struct vb2_sha512_context *ctx, uint8_t *digest, + enum vb2_hash_algorithm algo) +{ + unsigned int block_nb; + unsigned int pm_size; + unsigned int size_b; + +#ifndef UNROLL_LOOPS_SHA512 + int i; +#endif + + block_nb = 1 + ((VB2_SHA512_BLOCK_SIZE - 17) + < (ctx->size % VB2_SHA512_BLOCK_SIZE)); + + size_b = (ctx->total_size + ctx->size) << 3; + pm_size = block_nb << 7; + + memset(ctx->block + ctx->size, 0, pm_size - ctx->size); + ctx->block[ctx->size] = 0x80; + UNPACK32(size_b, ctx->block + pm_size - 4); + + vb2_sha512_transform(ctx, ctx->block, block_nb); + +#ifdef UNROLL_LOOPS_SHA512 + UNPACK64(ctx->h[0], &digest[ 0]); + UNPACK64(ctx->h[1], &digest[ 8]); + UNPACK64(ctx->h[2], &digest[16]); + UNPACK64(ctx->h[3], &digest[24]); + UNPACK64(ctx->h[4], &digest[32]); + UNPACK64(ctx->h[5], &digest[40]); + if (algo != VB2_HASH_SHA384) { + UNPACK64(ctx->h[6], &digest[48]); + UNPACK64(ctx->h[7], &digest[56]); + } +#else + for (i = 0 ; i < (algo == VB2_HASH_SHA384 ? 6 : 8); i++) + UNPACK64(ctx->h[i], &digest[i << 3]); +#endif /* UNROLL_LOOPS_SHA512 */ +} diff --git a/firmware/2lib/2sha_utility.c b/firmware/2lib/2sha_utility.c new file mode 100644 index 0000000..3a6c230 --- /dev/null +++ b/firmware/2lib/2sha_utility.c @@ -0,0 +1,169 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Utility functions for message digest functions. + */ + +#include "2common.h" +#include "2sha.h" +#include "2sysincludes.h" + +size_t vb2_digest_size(enum vb2_hash_algorithm hash_alg) +{ + switch (hash_alg) { +#if VB2_SUPPORT_SHA1 + case VB2_HASH_SHA1: + return VB2_SHA1_DIGEST_SIZE; +#endif +#if VB2_SUPPORT_SHA256 + case VB2_HASH_SHA224: + return VB2_SHA224_DIGEST_SIZE; + case VB2_HASH_SHA256: + return VB2_SHA256_DIGEST_SIZE; +#endif +#if VB2_SUPPORT_SHA512 + case VB2_HASH_SHA384: + return VB2_SHA384_DIGEST_SIZE; + case VB2_HASH_SHA512: + return VB2_SHA512_DIGEST_SIZE; +#endif + default: + return 0; + } +} + +size_t vb2_hash_block_size(enum vb2_hash_algorithm alg) +{ + switch (alg) { +#if VB2_SUPPORT_SHA1 + case VB2_HASH_SHA1: + return VB2_SHA1_BLOCK_SIZE; +#endif +#if VB2_SUPPORT_SHA256 + case VB2_HASH_SHA224: /* SHA224 reuses SHA256 internal structures */ + case VB2_HASH_SHA256: + return VB2_SHA256_BLOCK_SIZE; +#endif +#if VB2_SUPPORT_SHA512 + case VB2_HASH_SHA384: /* SHA384 reuses SHA512 internal structures */ + case VB2_HASH_SHA512: + return VB2_SHA512_BLOCK_SIZE; +#endif + default: + return 0; + } +} + +test_mockable +vb2_error_t vb2_digest_init(struct vb2_digest_context *dc, + enum vb2_hash_algorithm hash_alg) +{ + dc->hash_alg = hash_alg; + dc->using_hwcrypto = 0; + + switch (dc->hash_alg) { +#if VB2_SUPPORT_SHA1 + case VB2_HASH_SHA1: + vb2_sha1_init(&dc->sha1); + return VB2_SUCCESS; +#endif +#if VB2_SUPPORT_SHA256 + case VB2_HASH_SHA224: + case VB2_HASH_SHA256: + vb2_sha256_init(&dc->sha256, hash_alg); + return VB2_SUCCESS; +#endif +#if VB2_SUPPORT_SHA512 + case VB2_HASH_SHA384: + case VB2_HASH_SHA512: + vb2_sha512_init(&dc->sha512, hash_alg); + return VB2_SUCCESS; +#endif + default: + return VB2_ERROR_SHA_INIT_ALGORITHM; + } +} + +test_mockable +vb2_error_t vb2_digest_extend(struct vb2_digest_context *dc, const uint8_t *buf, + uint32_t size) +{ + switch (dc->hash_alg) { +#if VB2_SUPPORT_SHA1 + case VB2_HASH_SHA1: + vb2_sha1_update(&dc->sha1, buf, size); + return VB2_SUCCESS; +#endif +#if VB2_SUPPORT_SHA256 + case VB2_HASH_SHA224: + case VB2_HASH_SHA256: + vb2_sha256_update(&dc->sha256, buf, size); + return VB2_SUCCESS; +#endif +#if VB2_SUPPORT_SHA512 + case VB2_HASH_SHA384: + case VB2_HASH_SHA512: + vb2_sha512_update(&dc->sha512, buf, size); + return VB2_SUCCESS; +#endif + default: + return VB2_ERROR_SHA_EXTEND_ALGORITHM; + } +} + +test_mockable +vb2_error_t vb2_digest_finalize(struct vb2_digest_context *dc, uint8_t *digest, + uint32_t digest_size) +{ + if (digest_size < vb2_digest_size(dc->hash_alg)) + return VB2_ERROR_SHA_FINALIZE_DIGEST_SIZE; + + switch (dc->hash_alg) { +#if VB2_SUPPORT_SHA1 + case VB2_HASH_SHA1: + vb2_sha1_finalize(&dc->sha1, digest); + return VB2_SUCCESS; +#endif +#if VB2_SUPPORT_SHA256 + case VB2_HASH_SHA224: + case VB2_HASH_SHA256: + vb2_sha256_finalize(&dc->sha256, digest, dc->hash_alg); + return VB2_SUCCESS; +#endif +#if VB2_SUPPORT_SHA512 + case VB2_HASH_SHA384: + case VB2_HASH_SHA512: + vb2_sha512_finalize(&dc->sha512, digest, dc->hash_alg); + return VB2_SUCCESS; +#endif + default: + return VB2_ERROR_SHA_FINALIZE_ALGORITHM; + } +} + +test_mockable +vb2_error_t vb2_digest_buffer(const uint8_t *buf, uint32_t size, + enum vb2_hash_algorithm hash_alg, uint8_t *digest, + uint32_t digest_size) +{ + struct vb2_digest_context dc; + + VB2_TRY(vb2_digest_init(&dc, hash_alg)); + VB2_TRY(vb2_digest_extend(&dc, buf, size)); + + return vb2_digest_finalize(&dc, digest, digest_size); +} + +vb2_error_t vb2_hash_verify(const void *buf, uint32_t size, + const struct vb2_hash *hash) +{ + uint8_t hash_buf[VB2_MAX_DIGEST_SIZE]; + size_t hash_size = vb2_digest_size(hash->algo); + + VB2_TRY(vb2_digest_buffer(buf, size, hash->algo, hash_buf, hash_size)); + if (memcmp(hash_buf, hash->raw, hash_size)) + return VB2_ERROR_SHA_MISMATCH; + else + return VB2_SUCCESS; +} diff --git a/firmware/2lib/2struct.c b/firmware/2lib/2struct.c new file mode 100644 index 0000000..a16f869 --- /dev/null +++ b/firmware/2lib/2struct.c @@ -0,0 +1,317 @@ +/* Copyright 2021 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Functions for reading, checking and verifying firmware and + * kernel data structures. + */ + +#include "2common.h" + +vb2_error_t vb2_check_keyblock(const struct vb2_keyblock *block, uint32_t size, + const struct vb2_signature *sig) +{ + if(size < sizeof(*block)) { + VB2_DEBUG("Not enough space for keyblock header.\n"); + return VB2_ERROR_KEYBLOCK_TOO_SMALL_FOR_HEADER; + } + + if (memcmp(block->magic, VB2_KEYBLOCK_MAGIC, VB2_KEYBLOCK_MAGIC_SIZE)) { + VB2_DEBUG("Not a valid verified boot keyblock.\n"); + return VB2_ERROR_KEYBLOCK_MAGIC; + } + + if (block->header_version_major != VB2_KEYBLOCK_VERSION_MAJOR) { + VB2_DEBUG("Incompatible keyblock header version.\n"); + return VB2_ERROR_KEYBLOCK_HEADER_VERSION; + } + + if (size < block->keyblock_size) { + VB2_DEBUG("Not enough data for keyblock.\n"); + return VB2_ERROR_KEYBLOCK_SIZE; + } + + if (vb2_verify_signature_inside(block, block->keyblock_size, sig)) { + VB2_DEBUG("Keyblock signature off end of block\n"); + return VB2_ERROR_KEYBLOCK_SIG_OUTSIDE; + } + + /* Make sure advertised signature data sizes are valid. */ + if (block->keyblock_size < sig->data_size) { + VB2_DEBUG("Signature calculated past end of block\n"); + return VB2_ERROR_KEYBLOCK_SIGNED_TOO_MUCH; + } + + /* Verify we signed enough data */ + if (sig->data_size < sizeof(struct vb2_keyblock)) { + VB2_DEBUG("Didn't sign enough data\n"); + return VB2_ERROR_KEYBLOCK_SIGNED_TOO_LITTLE; + } + + /* Verify data key is inside the block and inside signed data */ + if (vb2_verify_packed_key_inside(block, block->keyblock_size, + &block->data_key)) { + VB2_DEBUG("Data key off end of keyblock\n"); + return VB2_ERROR_KEYBLOCK_DATA_KEY_OUTSIDE; + } + if (vb2_verify_packed_key_inside(block, sig->data_size, + &block->data_key)) { + VB2_DEBUG("Data key off end of signed data\n"); + return VB2_ERROR_KEYBLOCK_DATA_KEY_UNSIGNED; + } + + return VB2_SUCCESS; +} + +vb2_error_t vb2_verify_keyblock(struct vb2_keyblock *block, uint32_t size, + const struct vb2_public_key *key, + const struct vb2_workbuf *wb) +{ + struct vb2_signature *sig = &block->keyblock_signature; + vb2_error_t rv; + + /* Validity check keyblock before attempting signature check of data */ + VB2_TRY(vb2_check_keyblock(block, size, sig)); + + VB2_DEBUG("Checking keyblock signature...\n"); + rv = vb2_verify_data((const uint8_t *)block, size, sig, key, wb); + if (rv) { + VB2_DEBUG("Invalid keyblock signature.\n"); + return VB2_ERROR_KEYBLOCK_SIG_INVALID; + } + + /* Success */ + return VB2_SUCCESS; +} + +vb2_error_t vb2_verify_fw_preamble(struct vb2_fw_preamble *preamble, + uint32_t size, + const struct vb2_public_key *key, + const struct vb2_workbuf *wb) +{ + struct vb2_signature *sig = &preamble->preamble_signature; + + VB2_DEBUG("Verifying preamble.\n"); + + /* Validity checks before attempting signature of data */ + if(size < sizeof(*preamble)) { + VB2_DEBUG("Not enough data for preamble header\n"); + return VB2_ERROR_PREAMBLE_TOO_SMALL_FOR_HEADER; + } + if (preamble->header_version_major != + VB2_FIRMWARE_PREAMBLE_HEADER_VERSION_MAJOR) { + VB2_DEBUG("Incompatible firmware preamble header version.\n"); + return VB2_ERROR_PREAMBLE_HEADER_VERSION; + } + + if (preamble->header_version_minor < 1) { + VB2_DEBUG("Only preamble header 2.1+ supported\n"); + return VB2_ERROR_PREAMBLE_HEADER_OLD; + } + + if (size < preamble->preamble_size) { + VB2_DEBUG("Not enough data for preamble.\n"); + return VB2_ERROR_PREAMBLE_SIZE; + } + + /* Check signature */ + if (vb2_verify_signature_inside(preamble, preamble->preamble_size, + sig)) { + VB2_DEBUG("Preamble signature off end of preamble\n"); + return VB2_ERROR_PREAMBLE_SIG_OUTSIDE; + } + + /* Make sure advertised signature data sizes are valid. */ + if (preamble->preamble_size < sig->data_size) { + VB2_DEBUG("Signature calculated past end of the block\n"); + return VB2_ERROR_PREAMBLE_SIGNED_TOO_MUCH; + } + + if (vb2_verify_data((const uint8_t *)preamble, size, sig, key, wb)) { + VB2_DEBUG("Preamble signature validation failed\n"); + return VB2_ERROR_PREAMBLE_SIG_INVALID; + } + + /* Verify we signed enough data */ + if (sig->data_size < sizeof(struct vb2_fw_preamble)) { + VB2_DEBUG("Didn't sign enough data\n"); + return VB2_ERROR_PREAMBLE_SIGNED_TOO_LITTLE; + } + + /* Verify body signature is inside the signed data */ + if (vb2_verify_signature_inside(preamble, sig->data_size, + &preamble->body_signature)) { + VB2_DEBUG("Firmware body signature off end of preamble\n"); + return VB2_ERROR_PREAMBLE_BODY_SIG_OUTSIDE; + } + + /* Verify kernel subkey is inside the signed data */ + if (vb2_verify_packed_key_inside(preamble, sig->data_size, + &preamble->kernel_subkey)) { + VB2_DEBUG("Kernel subkey off end of preamble\n"); + return VB2_ERROR_PREAMBLE_KERNEL_SUBKEY_OUTSIDE; + } + + /* Success */ + return VB2_SUCCESS; +} + +uint32_t vb2_kernel_get_flags(const struct vb2_kernel_preamble *preamble) +{ + if (preamble->header_version_minor < 2) + return 0; + + return preamble->flags; +} + +test_mockable +vb2_error_t vb2_verify_keyblock_hash(const struct vb2_keyblock *block, + uint32_t size, + const struct vb2_workbuf *wb) +{ + const struct vb2_signature *sig = &block->keyblock_hash; + struct vb2_workbuf wblocal = *wb; + struct vb2_digest_context *dc; + uint8_t *digest; + uint32_t digest_size; + + /* Validity check keyblock before attempting hash check of data */ + VB2_TRY(vb2_check_keyblock(block, size, sig)); + + VB2_DEBUG("Checking keyblock hash...\n"); + + /* Digest goes at start of work buffer */ + digest_size = vb2_digest_size(VB2_HASH_SHA512); + digest = vb2_workbuf_alloc(&wblocal, digest_size); + if (!digest) + return VB2_ERROR_VDATA_WORKBUF_DIGEST; + + /* Hashing requires temp space for the context */ + dc = vb2_workbuf_alloc(&wblocal, sizeof(*dc)); + if (!dc) + return VB2_ERROR_VDATA_WORKBUF_HASHING; + + VB2_TRY(vb2_digest_init(dc, VB2_HASH_SHA512)); + + VB2_TRY(vb2_digest_extend(dc, (const uint8_t *)block, sig->data_size)); + + VB2_TRY(vb2_digest_finalize(dc, digest, digest_size)); + + if (vb2_safe_memcmp(vb2_signature_data(sig), digest, + digest_size) != 0) { + VB2_DEBUG("Invalid keyblock hash.\n"); + return VB2_ERROR_KEYBLOCK_HASH_INVALID_IN_DEV_MODE; + } + + /* Success */ + return VB2_SUCCESS; +} + +test_mockable +vb2_error_t vb2_verify_kernel_preamble(struct vb2_kernel_preamble *preamble, + uint32_t size, + const struct vb2_public_key *key, + const struct vb2_workbuf *wb) +{ + struct vb2_signature *sig = &preamble->preamble_signature; + uint32_t min_size = EXPECTED_VB2_KERNEL_PREAMBLE_2_0_SIZE; + + VB2_DEBUG("Verifying kernel preamble.\n"); + + /* Make sure it's even safe to look at the struct */ + if(size < min_size) { + VB2_DEBUG("Not enough data for preamble header.\n"); + return VB2_ERROR_PREAMBLE_TOO_SMALL_FOR_HEADER; + } + if (preamble->header_version_major != + VB2_KERNEL_PREAMBLE_HEADER_VERSION_MAJOR) { + VB2_DEBUG("Incompatible kernel preamble header version.\n"); + return VB2_ERROR_PREAMBLE_HEADER_VERSION; + } + + if (preamble->header_version_minor >= 2) + min_size = EXPECTED_VB2_KERNEL_PREAMBLE_2_2_SIZE; + else if (preamble->header_version_minor == 1) + min_size = EXPECTED_VB2_KERNEL_PREAMBLE_2_1_SIZE; + if(preamble->preamble_size < min_size) { + VB2_DEBUG("Preamble size too small for header.\n"); + return VB2_ERROR_PREAMBLE_TOO_SMALL_FOR_HEADER; + } + if (size < preamble->preamble_size) { + VB2_DEBUG("Not enough data for preamble.\n"); + return VB2_ERROR_PREAMBLE_SIZE; + } + + /* Check signature */ + if (vb2_verify_signature_inside(preamble, preamble->preamble_size, + sig)) { + VB2_DEBUG("Preamble signature off end of preamble\n"); + return VB2_ERROR_PREAMBLE_SIG_OUTSIDE; + } + + /* Make sure advertised signature data sizes are valid. */ + if (preamble->preamble_size < sig->data_size) { + VB2_DEBUG("Signature calculated past end of the block\n"); + return VB2_ERROR_PREAMBLE_SIGNED_TOO_MUCH; + } + + if (vb2_verify_data((const uint8_t *)preamble, size, sig, key, wb)) { + VB2_DEBUG("Preamble signature validation failed\n"); + return VB2_ERROR_PREAMBLE_SIG_INVALID; + } + + /* Verify we signed enough data */ + if (sig->data_size < sizeof(struct vb2_fw_preamble)) { + VB2_DEBUG("Didn't sign enough data\n"); + return VB2_ERROR_PREAMBLE_SIGNED_TOO_LITTLE; + } + + /* Verify body signature is inside the signed data */ + if (vb2_verify_signature_inside(preamble, sig->data_size, + &preamble->body_signature)) { + VB2_DEBUG("Body signature off end of preamble\n"); + return VB2_ERROR_PREAMBLE_BODY_SIG_OUTSIDE; + } + + /* + * If bootloader is present, verify it's covered by the body + * signature. + */ + if (preamble->bootloader_size) { + const void *body_ptr = + (const void *)(uintptr_t)preamble->body_load_address; + const void *bootloader_ptr = + (const void *)(uintptr_t)preamble->bootloader_address; + if (vb2_verify_member_inside(body_ptr, + preamble->body_signature.data_size, + bootloader_ptr, + preamble->bootloader_size, + 0, 0)) { + VB2_DEBUG("Bootloader off end of signed data\n"); + return VB2_ERROR_PREAMBLE_BOOTLOADER_OUTSIDE; + } + } + + /* + * If vmlinuz header is present, verify it's covered by the body + * signature. + */ + if (preamble->header_version_minor >= 1 && + preamble->vmlinuz_header_size) { + const void *body_ptr = + (const void *)(uintptr_t)preamble->body_load_address; + const void *vmlinuz_header_ptr = (const void *) + (uintptr_t)preamble->vmlinuz_header_address; + if (vb2_verify_member_inside(body_ptr, + preamble->body_signature.data_size, + vmlinuz_header_ptr, + preamble->vmlinuz_header_size, + 0, 0)) { + VB2_DEBUG("Vmlinuz header off end of signed data\n"); + return VB2_ERROR_PREAMBLE_VMLINUZ_HEADER_OUTSIDE; + } + } + + /* Success */ + return VB2_SUCCESS; +} diff --git a/firmware/2lib/2stub.c b/firmware/2lib/2stub.c new file mode 100644 index 0000000..da754ad --- /dev/null +++ b/firmware/2lib/2stub.c @@ -0,0 +1,263 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Stub API implementations which should be implemented by the caller. + */ + +#include +#include +#include +#include + +#include "2api.h" +#include "2common.h" +#include "2sysincludes.h" + +/*****************************************************************************/ +/* General utility stubs */ + +__attribute__((weak)) +void vb2ex_printf(const char *func, const char *fmt, ...) +{ +#ifdef VBOOT_DEBUG + va_list ap; + va_start(ap, fmt); + if (func) + fprintf(stderr, "%s: ", func); + vfprintf(stderr, fmt, ap); + va_end(ap); +#endif +} + +__attribute__((weak)) +void vb2ex_abort(void) +{ + /* Stub simply exits. */ + abort(); +} + +__attribute__((weak)) +uint32_t vb2ex_mtime(void) +{ + struct timeval tv; + gettimeofday(&tv, NULL); + return tv.tv_sec * VB2_MSEC_PER_SEC + tv.tv_usec / VB2_USEC_PER_MSEC; +} + +__attribute__((weak)) +vb2_error_t vb2ex_read_resource(struct vb2_context *ctx, + enum vb2_resource_index index, uint32_t offset, + void *buf, uint32_t size) +{ + VB2_DEBUG("function not implemented\n"); + return VB2_ERROR_EX_UNIMPLEMENTED; +} + +/*****************************************************************************/ +/* TPM-related stubs */ + +__attribute__((weak)) +vb2_error_t vb2ex_tpm_clear_owner(struct vb2_context *ctx) +{ + VB2_DEBUG("function not implemented\n"); + return VB2_ERROR_EX_UNIMPLEMENTED; +} + +__attribute__((weak)) +vb2_error_t vb2ex_tpm_set_mode(enum vb2_tpm_mode mode_val) +{ + VB2_DEBUG("function not implemented\n"); + return VB2_ERROR_EX_UNIMPLEMENTED; +} + +/*****************************************************************************/ +/* auxfw and EC-related stubs */ + +__attribute__((weak)) +vb2_error_t vb2ex_ec_running_rw(int *in_rw) +{ + *in_rw = 0; + return VB2_SUCCESS; +} + +__attribute__((weak)) +vb2_error_t vb2ex_ec_jump_to_rw(void) +{ + return VB2_SUCCESS; +} + +__attribute__((weak)) +vb2_error_t vb2ex_ec_disable_jump(void) +{ + return VB2_SUCCESS; +} + +__attribute__((weak)) +vb2_error_t vb2ex_ec_hash_image(enum vb2_firmware_selection select, + const uint8_t **hash, int *hash_size) +{ + static const uint8_t fake_hash[32] = {1, 2, 3, 4}; + + *hash = fake_hash; + *hash_size = sizeof(fake_hash); + return VB2_SUCCESS; +} + +__attribute__((weak)) +vb2_error_t vb2ex_ec_get_expected_image_hash(enum vb2_firmware_selection select, + const uint8_t **hash, int *hash_size) +{ + static const uint8_t fake_hash[32] = {1, 2, 3, 4}; + + *hash = fake_hash; + *hash_size = sizeof(fake_hash); + return VB2_SUCCESS; +} + +__attribute__((weak)) +vb2_error_t vb2ex_ec_update_image(enum vb2_firmware_selection select) +{ + return VB2_SUCCESS; +} + +__attribute__((weak)) +vb2_error_t vb2ex_ec_protect(enum vb2_firmware_selection select) +{ + return VB2_SUCCESS; +} + +__attribute__((weak)) +vb2_error_t vb2ex_ec_vboot_done(struct vb2_context *ctx) +{ + return VB2_SUCCESS; +} + +__attribute__((weak)) +vb2_error_t vb2ex_ec_battery_cutoff(void) +{ + return VB2_SUCCESS; +} + +__attribute__((weak)) +vb2_error_t vb2ex_auxfw_check(enum vb2_auxfw_update_severity *severity) +{ + *severity = VB2_AUXFW_NO_UPDATE; + return VB2_SUCCESS; +} + +__attribute__((weak)) +vb2_error_t vb2ex_auxfw_update(void) +{ + return VB2_SUCCESS; +} + +__attribute__((weak)) +vb2_error_t vb2ex_auxfw_finalize(struct vb2_context *ctx) +{ + return VB2_SUCCESS; +} + +/*****************************************************************************/ +/* UI-related stubs */ + +__attribute__((weak)) +const char *vb2ex_get_debug_info(struct vb2_context *ctx) +{ + return NULL; +} + +__attribute__((weak)) +const char *vb2ex_get_firmware_log(int reset) +{ + return NULL; +} + +__attribute__((weak)) +vb2_error_t vb2ex_diag_get_storage_health(const char **out) +{ + *out = "mock"; + return VB2_SUCCESS; +} + +__attribute__((weak)) +vb2_error_t vb2ex_diag_get_storage_test_log(const char **out) +{ + *out = "mock"; + return VB2_SUCCESS; +} + +__attribute__((weak)) +vb2_error_t vb2ex_diag_memory_quick_test(int reset, const char **out) +{ + *out = "mock"; + return VB2_SUCCESS; +} + +__attribute__((weak)) +vb2_error_t vb2ex_diag_memory_full_test(int reset, const char **out) +{ + *out = "mock"; + return VB2_SUCCESS; +} + +__attribute__((weak)) +void vb2ex_msleep(uint32_t msec) +{ +} + +__attribute__((weak)) +void vb2ex_beep(uint32_t msec, uint32_t frequency) +{ +} + +__attribute__((weak)) +uint32_t vb2ex_get_locale_count(void) +{ + return 0; +} + +__attribute__((weak)) +uint32_t vb2ex_get_altfw_count(void) +{ + return 0; +} + +__attribute__((weak)) +int vb2ex_physical_presence_pressed(void) +{ + return 0; +} + +__attribute__((weak)) +vb2_error_t vb2ex_commit_data(struct vb2_context *ctx) +{ + ctx->flags &= ~VB2_CONTEXT_SECDATA_FIRMWARE_CHANGED; + ctx->flags &= ~VB2_CONTEXT_SECDATA_KERNEL_CHANGED; + ctx->flags &= ~VB2_CONTEXT_NVDATA_CHANGED; + return VB2_SUCCESS; +} + +__attribute__((weak)) +vb2_error_t vb2ex_broken_screen_ui(struct vb2_context *ctx) +{ + return VB2_SUCCESS; +} + +__attribute__((weak)) +vb2_error_t vb2ex_manual_recovery_ui(struct vb2_context *ctx) +{ + return VB2_SUCCESS; +} + +__attribute__((weak)) +vb2_error_t vb2ex_developer_ui(struct vb2_context *ctx) +{ + return VB2_SUCCESS; +} + +__attribute__((weak)) +vb2_error_t vb2ex_diagnostic_ui(struct vb2_context *ctx) +{ + return VB2_SUCCESS; +} diff --git a/firmware/2lib/2stub_hwcrypto.c b/firmware/2lib/2stub_hwcrypto.c new file mode 100644 index 0000000..87fb733 --- /dev/null +++ b/firmware/2lib/2stub_hwcrypto.c @@ -0,0 +1,43 @@ +/* Copyright 2020 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Stub hwcrypto API implementations which should be implemented by the caller. + */ + +#include "2api.h" + +#ifndef X86_SHA_EXT +__attribute__((weak)) +vb2_error_t vb2ex_hwcrypto_digest_init(enum vb2_hash_algorithm hash_alg, + uint32_t data_size) +{ + return VB2_ERROR_EX_HWCRYPTO_UNSUPPORTED; +} + +__attribute__((weak)) +vb2_error_t vb2ex_hwcrypto_digest_extend(const uint8_t *buf, uint32_t size) +{ + return VB2_ERROR_SHA_EXTEND_ALGORITHM; /* Should not be called. */ +} + +__attribute__((weak)) +vb2_error_t vb2ex_hwcrypto_digest_finalize(uint8_t *digest, + uint32_t digest_size) +{ + return VB2_ERROR_SHA_FINALIZE_ALGORITHM; /* Should not be called. */ +} +#endif + +__attribute__((weak)) +vb2_error_t vb2ex_hwcrypto_rsa_verify_digest(const struct vb2_public_key *key, + const uint8_t *sig, const uint8_t *digest) +{ + return VB2_ERROR_EX_HWCRYPTO_UNSUPPORTED; +} + +__attribute__((weak)) +vb2_error_t vb2ex_hwcrypto_modexp(const struct vb2_public_key *key, + uint8_t *inout, uint32_t *workbuf32, int exp) { + return VB2_ERROR_EX_HWCRYPTO_UNSUPPORTED; +} diff --git a/firmware/2lib/2tpm_bootmode.c b/firmware/2lib/2tpm_bootmode.c new file mode 100644 index 0000000..81f6c40 --- /dev/null +++ b/firmware/2lib/2tpm_bootmode.c @@ -0,0 +1,54 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Functions for updating the TPM state with the status of boot path. + */ + +#include "2common.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "2tpm_bootmode.h" + +/* + * Input digests for PCR extend. + * These are calculated as: + * SHA1("|Developer_Mode||Recovery_Mode||Keyblock_Mode|"). + * Developer_Mode can be 0 or 1. + * Recovery_Mode can be 0 or 1. + * Keyblock flags are defined in 2struct.h and assumed always 0 in recovery mode + * or 7 in non-recovery mode. + * + * We map them to Keyblock_Mode as follows: + * ----------------------------------------- + * Keyblock Flags | Keyblock Mode + * ----------------------------------------- + * 0 recovery mode | 0 + * 7 Normal-signed firmware | 1 + */ + +const uint8_t kBootStateSHA1Digests[][VB2_SHA1_DIGEST_SIZE] = { + /* SHA1(0x00|0x00|0x01) */ + {0x25, 0x47, 0xcc, 0x73, 0x6e, 0x95, 0x1f, 0xa4, 0x91, 0x98, 0x53, 0xc4, + 0x3a, 0xe8, 0x90, 0x86, 0x1a, 0x3b, 0x32, 0x64}, + + /* SHA1(0x01|0x00|0x01) */ + {0xc4, 0x2a, 0xc1, 0xc4, 0x6f, 0x1d, 0x4e, 0x21, 0x1c, 0x73, 0x5c, 0xc7, + 0xdf, 0xad, 0x4f, 0xf8, 0x39, 0x11, 0x10, 0xe9}, + + /* SHA1(0x00|0x01|0x00) */ + {0x62, 0x57, 0x18, 0x91, 0x21, 0x5b, 0x4e, 0xfc, 0x1c, 0xea, 0xb7, 0x44, + 0xce, 0x59, 0xdd, 0x0b, 0x66, 0xea, 0x6f, 0x73}, + + /* SHA1(0x01|0x01|0x00) */ + {0x47, 0xec, 0x8d, 0x98, 0x36, 0x64, 0x33, 0xdc, 0x00, 0x2e, 0x77, 0x21, + 0xc9, 0xe3, 0x7d, 0x50, 0x67, 0x54, 0x79, 0x37}, +}; + +const uint8_t *vb2_get_boot_state_digest(struct vb2_context *ctx) +{ + int index = (ctx->flags & VB2_CONTEXT_RECOVERY_MODE ? 2 : 0) + + (ctx->flags & VB2_CONTEXT_DEVELOPER_MODE ? 1 : 0); + + return kBootStateSHA1Digests[index]; +} diff --git a/firmware/2lib/include/2api.h b/firmware/2lib/include/2api.h new file mode 100644 index 0000000..1430111 --- /dev/null +++ b/firmware/2lib/include/2api.h @@ -0,0 +1,1641 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * APIs between calling firmware and vboot_reference + * + * General notes: + * + * TODO: split this file into a vboot_entry_points.h file which contains the + * entry points for the firmware to call vboot_reference, and a + * vboot_firmware_exports.h which contains the APIs to be implemented by the + * calling firmware and exported to vboot_reference. + * + * Notes: + * * Assumes this code is never called in the S3 resume path. TPM resume + * must be done elsewhere, and VB2_NV_DEBUG_RESET_MODE is ignored. + */ + +#ifndef VBOOT_REFERENCE_2API_H_ +#define VBOOT_REFERENCE_2API_H_ + +#include "2constants.h" +#include "2crypto.h" +#include "2fw_hash_tags.h" +#include "2gbb_flags.h" +#include "2id.h" +#include "2recovery_reasons.h" +#include "2return_codes.h" +#include "2rsa.h" +#include "2secdata_struct.h" + +#define _VB2_TRY_IMPL(expr, ctx, recovery_reason, ...) do { \ + vb2_error_t _vb2_try_rv = (expr); \ + struct vb2_context *_vb2_try_ctx = (ctx); \ + uint8_t _vb2_try_reason = (recovery_reason); \ + if (_vb2_try_rv != VB2_SUCCESS) { \ + vb2ex_printf(__func__, \ + "%s returned %#x\n", #expr, _vb2_try_rv); \ + if (_vb2_try_rv >= VB2_REQUEST_END && \ + (_vb2_try_ctx) && \ + (_vb2_try_reason) != VB2_RECOVERY_NOT_REQUESTED) \ + vb2api_fail(_vb2_try_ctx, _vb2_try_reason, \ + _vb2_try_rv); \ + return _vb2_try_rv; \ + } \ +} while (0) + +/* + * Evaluate an expression and return *from the caller* on failure or if an + * action (such as reboot) is requested. + * + * This macro supports two forms of usage: + * 1. VB2_TRY(expr) + * 2. VB2_TRY(expr, ctx, recovery_reason) + * + * When the second form is used, vb2api_fail() will be called on failure before + * return. Note that nvdata only holds one byte for recovery subcode, so any + * other more significant bytes will be truncated. + * + * @param expr An expression (such as a function call) of type + * vb2_error_t. + * @param ctx Vboot context. + * @param recovery_reason Recovery reason passed to vb2api_fail(). + */ +#define VB2_TRY(expr, ...) _VB2_TRY_IMPL(expr, ##__VA_ARGS__, NULL, 0) + +/** + * Check if the return value is an error. + * + * @param rv The return value. + * @return True if the value is an error. + */ +static inline int vb2_is_error(vb2_error_t rv) +{ + return rv >= VB2_ERROR_BASE && rv <= VB2_ERROR_MAX; +} + +/* Flags for vb2_context. + * + * Unless otherwise noted, flags are set by verified boot and may be read (but + * not set or cleared) by the caller. + */ +enum vb2_context_flags { + + /* + * Verified boot has changed nvdata[]. Caller must save nvdata[] back + * to its underlying storage, then may clear this flag. + */ + VB2_CONTEXT_NVDATA_CHANGED = (1 << 0), + + /* + * Verified boot has changed secdata_firmware[]. Caller must save + * secdata_firmware[] back to its underlying storage, then may clear + * this flag. + */ + VB2_CONTEXT_SECDATA_FIRMWARE_CHANGED = (1 << 1), + + /* Recovery mode is requested this boot */ + VB2_CONTEXT_RECOVERY_MODE = (1 << 2), + + /* Developer mode is requested this boot */ + VB2_CONTEXT_DEVELOPER_MODE = (1 << 3), + + /* + * Force recovery mode due to physical user request. Caller may set + * this flag when initializing the context. + */ + VB2_CONTEXT_FORCE_RECOVERY_MODE = (1 << 4), + + /* + * Force developer mode enabled. Caller may set this flag when + * initializing the context. Previously used for forcing developer + * mode with physical dev switch. + * + * Deprecated as part of chromium:942901. + */ + VB2_CONTEXT_DEPRECATED_FORCE_DEVELOPER_MODE = (1 << 5), + + /* Using firmware slot B. If this flag is clear, using slot A. */ + VB2_CONTEXT_FW_SLOT_B = (1 << 6), + + /* RAM should be cleared by caller this boot */ + VB2_CONTEXT_CLEAR_RAM = (1 << 7), + + /* Wipeout by the app should be requested. */ + VB2_CONTEXT_FORCE_WIPEOUT_MODE = (1 << 8), + + /* Erase developer mode state if it is enabled. */ + VB2_CONTEXT_DISABLE_DEVELOPER_MODE = (1 << 9), + + /* + * Verified boot has changed secdata_kernel[]. Caller must save + * secdata_kernel[] back to its underlying storage, then may clear + * this flag. + */ + VB2_CONTEXT_SECDATA_KERNEL_CHANGED = (1 << 10), + + /* + * Allow kernel verification to roll forward the version in + * secdata_kernel[]. Caller may set this flag before calling + * vb2api_kernel_phase3(). + */ + VB2_CONTEXT_ALLOW_KERNEL_ROLL_FORWARD = (1 << 11), + + /* + * Boot optimistically: don't touch failure counters. Caller may set + * this flag when initializing the context. + */ + VB2_CONTEXT_NOFAIL_BOOT = (1 << 12), + + /* + * secdata is not ready this boot, but should be ready next boot. It + * would like to reboot. The decision whether to reboot or not must be + * deferred until vboot, because rebooting all the time before then + * could cause a device with malfunctioning secdata to get stuck in an + * unrecoverable crash loop. + */ + VB2_CONTEXT_SECDATA_WANTS_REBOOT = (1 << 13), + + /* + * Boot is S3->S0 resume, not S5->S0 normal boot. Caller may set this + * flag when initializing the context. + */ + VB2_CONTEXT_S3_RESUME = (1 << 14), + + /* + * System supports EC software sync. Caller may set this flag at any + * time before calling VbSelectAndLoadKernel(). + */ + VB2_CONTEXT_EC_SYNC_SUPPORTED = (1 << 15), + + /* + * EC software sync is slow to update; warning screen should be + * displayed. Caller may set this flag at any time before calling + * VbSelectAndLoadKernel(). Deprecated as part of chromium:1038259. + */ + VB2_CONTEXT_DEPRECATED_EC_SYNC_SLOW = (1 << 16), + + /* + * EC firmware supports early firmware selection; two EC images exist, + * and EC may have already verified and jumped to EC-RW prior to EC + * software sync. Deprecated as part of chromium:1038259. + */ + VB2_CONTEXT_DEPRECATED_EC_EFS = (1 << 17), + + /* + * NV storage uses data format V2. Data is size VB2_NVDATA_SIZE_V2, + * not VB2_NVDATA_SIZE. + * + * Caller must set this flag when initializing the context to use V2. + * (Vboot cannot infer the data size from the data itself, because the + * data provided by the caller could be uninitialized.) + */ + VB2_CONTEXT_NVDATA_V2 = (1 << 18), + + /* + * Allow vendor data to be set via the vendor data ui. + * + * Deprecated with CL:2512740. + */ + VB2_CONTEXT_DEPRECATED_VENDOR_DATA_SETTABLE = (1 << 19), + + /* + * Caller may set this before running vb2api_fw_phase1. In this case, + * it means: "Display is available on this boot. Please advertise + * as such to downstream vboot code and users." + * + * vboot may also set this before returning from vb2api_fw_phase1. + * In this case, it means: "Please initialize display so that it is + * available to downstream vboot code and users." This is used when + * vboot encounters some internally-generated request for display + * support. + */ + VB2_CONTEXT_DISPLAY_INIT = (1 << 20), + + /* + * Caller may set this before running vb2api_kernel_phase1. It means + * that there is no FWMP on this system, and thus default values should + * be used instead. + * + * Caller should *not* set this when FWMP is available but invalid. + */ + VB2_CONTEXT_NO_SECDATA_FWMP = (1 << 21), + + /* + * Enable detachable menu ui (volume up/down + power). + * + * Deprecated with CL:1975390. + */ + VB2_CONTEXT_DEPRECATED_DETACHABLE_UI = (1 << 22), + + /* + * NO_BOOT means the OS is not allowed to boot. Only relevant for EFS2. + */ + VB2_CONTEXT_NO_BOOT = (1 << 23), + + /* + * TRUSTED means EC is running an RO copy and PD isn't enabled. At + * least that was last known to the GSC. If EC RO is correctly behaving, + * it doesn't jump to RW when this flag is set. + */ + VB2_CONTEXT_EC_TRUSTED = (1 << 24), + + /* + * Boot into developer mode is allowed by FWMP or GBB flags. + */ + VB2_CONTEXT_DEV_BOOT_ALLOWED = (1 << 25), + + /* + * Boot into developer mode from external disk is allowed by nvdata, + * FWMP or GBB flags. + */ + VB2_CONTEXT_DEV_BOOT_EXTERNAL_ALLOWED = (1 << 26), + + /* + * Boot into developer mode from alternate bootloader is allowed by + * nvdata, FWMP or GBB flags. + */ + VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED = (1 << 27), +}; + +/* Boot mode decided in vb2api_fw_phase1. + * + * Boot mode is a constant set by verified boot and may be read (but should not + * be set or cleared) by the caller. + * The boot modes are mutually exclusive. If a boot fulfill more than one + * constraints of the listing boot modes, it will be set to the most important + * one. The priority is the same as the listing order. + */ +enum vb2_boot_mode { + /* Undefined, The boot mode is not set. */ + VB2_BOOT_MODE_UNDEFINED = 0, + + /* + * Manual recovery boot, regardless of dev mode state. + * + * VB2_CONTEXT_RECOVERY_MODE is set and the recovery is physically + * requested (a.k.a. Manual recovery). All other recovery requests + * including manual recovery requested by a (compromised) host will end + * up with a broken screen. + */ + VB2_BOOT_MODE_MANUAL_RECOVERY = 1, + + /* + * Broken screen. + * + * If a recovery boot is not a manual recovery (a.k.a. not requested + * physically), the recovery is not allowed and will end up with + * broken screen. + */ + VB2_BOOT_MODE_BROKEN_SCREEN = 2, + + /* + * Diagnostic boot. + * + * If diagnostic boot is enabled (a.k.a. vb2api_diagnostic_ui_enabled) + * and the nvdata contains VB2_NV_DIAG_REQUEST from previous boot, it + * will boot to diagnostic mode. + */ + VB2_BOOT_MODE_DIAGNOSTICS = 3, + + /* + * Developer boot: self-signed kernel okay. + * + * The developer mode switch is set (a.k.a. VB2_CONTEXT_DEVELOPER_MODE) + * and we are in the developer boot mode. + */ + VB2_BOOT_MODE_DEVELOPER = 4, + + /* Normal boot: kernel must be verified. */ + VB2_BOOT_MODE_NORMAL = 5, +}; + +/* Helper for aligning fields in vb2_context. */ +#define VB2_PAD_STRUCT3(size, align, count) \ + uint8_t _pad##count[align - (((size - 1) % align) + 1)] +#define VB2_PAD_STRUCT2(size, align, count) VB2_PAD_STRUCT3(size, align, count) +#define VB2_PAD_STRUCT(size, align) VB2_PAD_STRUCT2(size, align, __COUNTER__) + +/* + * Context for firmware verification. Pass this to all vboot APIs. + * + * Context is stored as part of vb2_shared_data, initialized with vb2api_init(). + * Subsequent retrieval of the context object should be done by calling + * vb2api_reinit(), e.g. if switching firmware applications. + * + * The context struct can be seen as the "publicly accessible" portion of + * vb2_shared_data, and thus does not require its own magic and version fields. + */ +struct vb2_context { + + /********************************************************************** + * Fields caller must initialize before calling any API functions. + */ + + /* + * Flags; see vb2_context_flags. Some flags may only be set by caller + * prior to calling vboot functions. + */ + uint64_t flags; + + /* + * Non-volatile data. Caller must fill this from some non-volatile + * location before calling vb2api_fw_phase1. If the + * VB2_CONTEXT_NVDATA_CHANGED flag is set when a vb2api function + * returns, caller must save the data back to the non-volatile location + * and then clear the flag. + */ + uint8_t nvdata[VB2_NVDATA_SIZE_V2]; + VB2_PAD_STRUCT(VB2_NVDATA_SIZE_V2, 8); + + /* + * Secure data for firmware verification stage. Caller must fill this + * from some secure non-volatile location before calling + * vb2api_fw_phase1. If the VB2_CONTEXT_SECDATA_FIRMWARE_CHANGED flag + * is set when a function returns, caller must save the data back to the + * secure non-volatile location and then clear the flag. + */ + uint8_t secdata_firmware[VB2_SECDATA_FIRMWARE_SIZE]; + VB2_PAD_STRUCT(VB2_SECDATA_FIRMWARE_SIZE, 8); + + /********************************************************************** + * Fields caller must initialize before calling vb2api_kernel_phase1(). + */ + + /* + * Secure data for kernel verification stage. Caller must fill this + * from some secure non-volatile location before calling + * vb2api_kernel_phase1. If the VB2_CONTEXT_SECDATA_KERNEL_CHANGED + * flag is set when a function returns, caller must save the data back + * to the secure non-volatile location and then clear the flag. + */ + uint8_t secdata_kernel[VB2_SECDATA_KERNEL_MAX_SIZE]; + VB2_PAD_STRUCT(VB2_SECDATA_KERNEL_MAX_SIZE, 8); + + /* + * Firmware management parameters (FWMP) secure data. Caller must fill + * this from some secure non-volatile location before calling + * vb2api_kernel_phase1. Since FWMP is a variable-size space, caller + * should initially fill in VB2_SECDATA_FWMP_MIN_SIZE bytes, and call + * vb2_secdata_fwmp_check() to see whether more should be read. If the + * VB2_CONTEXT_SECDATA_FWMP_CHANGED flag is set when a function + * returns, caller must save the data back to the secure non-volatile + * location and then clear the flag. + */ + uint8_t secdata_fwmp[VB2_SECDATA_FWMP_MAX_SIZE]; + VB2_PAD_STRUCT(VB2_SECDATA_FWMP_MAX_SIZE, 8); + + /********************************************************************** + * Fields below added in struct version 3.1. + */ + + /* + * Mutually exclusive boot mode. + * This constant is initialized after calling vb2api_fw_phase1(). + */ + const enum vb2_boot_mode boot_mode; +}; + +/* Resource index for vb2ex_read_resource() */ +enum vb2_resource_index { + + /* Google binary block */ + VB2_RES_GBB, + + /* + * Firmware verified boot block (keyblock+preamble). Use + * VB2_CONTEXT_FW_SLOT_B to determine whether this refers to slot A or + * slot B; vboot will set that flag to the proper state before reading + * the vblock. + */ + VB2_RES_FW_VBLOCK, + + /* + * Kernel verified boot block (keyblock+preamble) for the current + * kernel partition. Used only by vb2api_kernel_load_vblock(). + * Contents are allowed to change between calls to that function (to + * allow multiple kernels to be examined). + */ + VB2_RES_KERNEL_VBLOCK, +}; + +/* Digest ID for vbapi_get_pcr_digest() */ +enum vb2_pcr_digest { + /* Digest based on current developer and recovery mode flags */ + BOOT_MODE_PCR, + + /* SHA-256 hash digest of HWID, from GBB */ + HWID_DIGEST_PCR, +}; + +/****************************************************************************** + * APIs provided by verified boot. + * + * At a high level, call functions in the order described below. After each + * call, examine vb2_context.flags to determine whether nvdata or secdata + * needs to be written. + * + * If you need to cause the boot process to fail at any point, call + * vb2api_fail(). Then check vb2_context.flags to see what data needs to be + * written. Then reboot. + * + * Load nvdata from wherever you keep it. + * + * Load secdata_firmware from wherever you keep it. + * + * If it wasn't there at all (for example, this is the first boot + * of a new system in the factory), call + * vb2api_secdata_firmware_create() to initialize the data. + * + * If access to your storage is unreliable (reads/writes may + * contain corrupt data), you may call + * vb2api_secdata_firmware_check() to determine if the data was + * valid, and retry reading if it wasn't. (In that case, you + * should also read back and check the data after any time you + * write it, to make sure it was written correctly.) + * + * Call vb2api_fw_phase1(). At present, this nominally decides whether + * recovery mode is needed this boot. + * + * Call vb2api_fw_phase2(). At present, this nominally decides which + * firmware slot will be attempted (A or B). + * + * Call vb2api_fw_phase3(). At present, this nominally verifies the + * firmware keyblock and preamble. + * + * Lock down wherever you keep secdata_firmware. It should no longer be + * writable this boot. + * + * Verify the hash of each section of code/data you need to boot the RW + * firmware. For each section: + * + * Call vb2_init_hash() to see if the hash exists. + * + * Load the data for the section. Call vb2_extend_hash() on the + * data as you load it. You can load it all at once and make one + * call, or load and hash-extend a block at a time. + * + * Call vb2_check_hash() to see if the hash is valid. + * + * If it is valid, you may use the data and/or execute + * code from that section. + * + * If the hash was invalid, you must reboot. + * + * At this point, firmware verification is done, and vb2_context contains the + * kernel key needed to verify the kernel. That context should be preserved + * and passed on to kernel selection. The kernel selection process may be + * done by the same firmware image, or may be done by the RW firmware. The + * recommended order is: + * + * Load secdata_kernel from wherever you keep it. + * + * If it wasn't there at all (for example, this is the first boot + * of a new system in the factory), call + * vb2api_secdata_kernel_create() to initialize the data. + * + * If access to your storage is unreliable (reads/writes may + * contain corrupt data), you may call + * vb2api_secdata_kernel_check() to determine if the data was + * valid, and retry reading if it wasn't. (In that case, you + * should also read back and check the data after any time you +* write it, to make sure it was written correctly.) + * + * Call vb2api_kernel_phase1(). At present, this decides which key to + * use to verify kernel data - the recovery key from the GBB, or the + * kernel subkey from the firmware verification stage. + * + * Kernel phase 2 is finding loading, and verifying the kernel partition. + * + * Find a boot device (you're on your own here). + * + * Call vb2api_load_kernel_vblock() for each kernel partition on the + * boot device, until one succeeds. + * + * When that succeeds, call vb2api_get_kernel_size() to determine where + * the kernel is located in the stream and how big it is. Load or map + * the kernel. (Again, you're on your own. This is the responsibility of + * the caller so that the caller can choose whether to allocate a buffer, + * load the kernel data into a predefined area of RAM, or directly map a + * kernel file into the address space. Note that technically it doesn't + * matter whether the kernel data is even in the same file or stream as + * the vblock, as long as the caller loads the right data. + * + * Call vb2api_verify_kernel_data() on the kernel data. + * + * If you ran out of kernels before finding a good one, call vb2api_fail() + * with an appropriate recovery reason. + * + * Set the VB2_CONTEXT_ALLOW_KERNEL_ROLL_FORWARD flag if the current + * kernel partition has the successful flag (that is, it's already known + * or assumed to be a functional kernel partition). + * + * Call vb2api_kernel_phase3(). This cleans up from kernel verification + * and updates the secure data if needed. + * + * Lock down wherever you keep secdata_kernel. It should no longer be + * writable this boot. + */ + +/** + * Initialize verified boot data structures. + * + * Needs to be called once per boot, before using any API functions that + * accept a vb2_context object. Sets up the vboot work buffer, as well as + * vb2_shared_data and vb2_context. A pointer to the context object is + * written to ctxptr. After transitioning between different firmware + * applications, or any time the context pointer is lost, vb2api_reinit() + * should be used to restore access to the context and data on the workbuf. + * + * If the workbuf needs to be relocated, call vb2api_relocate() instead + * of copying memory manually. + * + * @param workbuf Workbuf memory location to initialize + * @param size Size of workbuf being initialized + * @param ctxptr Pointer to a context pointer to be filled in + * @return VB2_SUCCESS, or non-zero error code. + */ +vb2_error_t vb2api_init(void *workbuf, uint32_t size, + struct vb2_context **ctxptr); + +/** + * Reinitialize vboot data structures. + * + * After transitioning between different firmware applications, or any time the + * context pointer is lost, this function should be called to restore access to + * the workbuf. A pointer to the context object is written to ctxptr. Returns + * an error if the vboot work buffer is inconsistent. + * + * If the workbuf needs to be relocated, call vb2api_relocate() instead + * of copying memory manually. + * + * @param workbuf Workbuf memory location to check + * @param ctxptr Pointer to a context pointer to be filled in + * @return VB2_SUCCESS, or non-zero error code. + */ +vb2_error_t vb2api_reinit(void *workbuf, struct vb2_context **ctxptr); + +/** + * Relocate vboot data structures. + * + * Move the vboot work buffer from one memory location to another, and expand + * or contract the workbuf to fit. The target memory location may be the same + * as the original (used for a "resize" operation), and it is safe to call this + * function with overlapping memory regions. + * + * A pointer to the context object is written to ctxptr. Returns an error if + * the vboot work buffer is inconsistent, or if the new memory space is too + * small to contain the work buffer. + * + * @param new_workbuf Target workbuf memory location + * @param cur_workbuf Original workbuf memory location to relocate + * @param size Target size of relocated workbuf + * @param ctxptr Pointer to a context pointer to be filled in + * @return VB2_SUCCESS, or non-zero error code. + */ +vb2_error_t vb2api_relocate(void *new_workbuf, const void *cur_workbuf, + uint32_t size, struct vb2_context **ctxptr); + +/** + * Export "VBSD" vboot1 data structure. + * + * Copy relevant fields from vboot2 data structures to VbSharedDataHeader + * format. Takes a pointer to the memory space to be filled in. Expects + * the memory available to be of size VB2_VBSD_SIZE. + * + * @param ctx Context pointer + * @param dest Target memory to store VbSharedDataHeader + */ +void vb2api_export_vbsd(struct vb2_context *ctx, void *dest); + +/** + * Check the validity of firmware secure storage context. + * + * Checks version and CRC. + * + * @param ctx Context pointer + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb2api_secdata_firmware_check(struct vb2_context *ctx); + +/** + * Create fresh data in firmware secure storage context. + * + * Use this only when initializing the secure storage context on a new machine + * the first time it boots. Do NOT simply use this if + * vb2api_secdata_firmware_check() (or any other API in this library) fails; + * that could allow the secure data to be rolled back to an insecure state. + * + * @param ctx Context pointer + * @return size of created firmware secure storage data in bytes + */ +uint32_t vb2api_secdata_firmware_create(struct vb2_context *ctx); + +/** + * Check the validity of kernel secure storage context (ctx->secdata_kernel). + * + * Checks version, UID, and CRC. + * + * @param ctx Context pointer + * @param size (IN) Size of data to be checked + * (OUT) Expected size of data + * @return VB2_SUCCESS, or non-zero error code if error. If data is missing, + * it returns VB2_ERROR_SECDATA_KERNEL_INCOMPLETE and informs the caller + * of the expected size. + */ +vb2_error_t vb2api_secdata_kernel_check(struct vb2_context *ctx, uint8_t *size); + +/** + * Create fresh data in kernel secure storage context. + * + * Use this only when initializing the secure storage context on a new machine + * the first time it boots. Do NOT simply use this if + * vb2api_secdata_kernel_check() (or any other API in this library) fails; that + * could allow the secure data to be rolled back to an insecure state. + * + * vb2api_secdata_kernel_create always creates secdata kernel using the latest + * revision. + * + * @param ctx Context pointer + * @return size of created kernel secure storage data in bytes + */ +uint32_t vb2api_secdata_kernel_create(struct vb2_context *ctx); +uint32_t vb2api_secdata_kernel_create_v0(struct vb2_context *ctx); + +/** + * Create an empty Firmware Management Parameters (FWMP) in secure storage + * context. + * + * @param ctx Context pointer + * @return size of created FWMP secure storage data in bytes + */ +uint32_t vb2api_secdata_fwmp_create(struct vb2_context *ctx); + +/** + * Check the validity of firmware management parameters (FWMP) space. + * + * Checks size, version, and CRC. If the struct size is larger than the size + * passed in, the size pointer is set to the expected full size of the struct, + * and VB2_ERROR_SECDATA_FWMP_INCOMPLETE is returned. The caller should + * re-read the returned number of bytes, and call this function again. + * + * @param ctx Context pointer + * @param size Amount of struct which has been read + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb2api_secdata_fwmp_check(struct vb2_context *ctx, uint8_t *size); + +/** + * Report firmware failure to vboot. + * + * If the failure occurred after choosing a firmware slot, and the other + * firmware slot is not known-bad, try the other firmware slot after reboot. + * + * If the failure occurred before choosing a firmware slot, or both slots have + * failed in successive boots, request recovery. + * + * This may be called before vb2api_phase1() to indicate errors in the boot + * process prior to the start of vboot. On return, the calling firmware should + * check for updates to secdata and/or nvdata, then reboot. + * + * @param reason Recovery reason + * @param subcode Recovery subcode + */ +void vb2api_fail(struct vb2_context *ctx, uint8_t reason, uint8_t subcode); + +/** + * Firmware selection, phase 1. + * + * If the returned error is VB2_ERROR_API_PHASE1_RECOVERY, the calling firmware + * should jump directly to recovery-mode firmware without rebooting. + * + * For other errors, the calling firmware should check for updates to secdata + * and/or nvdata, then reboot. + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2api_fw_phase1(struct vb2_context *ctx); + +/** + * Firmware selection, phase 2. + * + * On error, the calling firmware should check for updates to secdata and/or + * nvdata, then reboot. + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2api_fw_phase2(struct vb2_context *ctx); + +/** + * Firmware selection, phase 3. + * + * On error, the calling firmware should check for updates to secdata and/or + * nvdata, then reboot. + * + * On success, the calling firmware should lock down secdata before continuing + * with the boot process. + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2api_fw_phase3(struct vb2_context *ctx); + +/** + * Initialize hashing data for the specified tag. + * + * @param ctx Vboot context + * @param tag Tag to start hashing (enum vb2_hash_tag) + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2api_init_hash(struct vb2_context *ctx, uint32_t tag); + +/** + * Extend the hash started by vb2api_init_hash() with additional data. + * + * (This is the same for both old and new style structs.) + * + * @param ctx Vboot context + * @param buf Data to hash + * @param size Size of data in bytes + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2api_extend_hash(struct vb2_context *ctx, const void *buf, + uint32_t size); + +/** + * Check the hash value started by vb2api_init_hash(). + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or error code on error. + */ +int vb2api_check_hash(struct vb2_context *ctx); + +/** + * Check the hash value started by vb2api_init_hash() while retrieving + * calculated digest. + * + * @param ctx Vboot context + * @param digest_out optional pointer to buffer to store digest + * @param digest_out_size optional size of buffer to store digest + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2api_check_hash_get_digest(struct vb2_context *ctx, + void *digest_out, + uint32_t digest_out_size); + +/** + * Get a PCR digest + * + * @param ctx Vboot context + * @param which_digest PCR index of the digest + * @param dest Destination where the digest is copied. + * Recommended size is VB2_PCR_DIGEST_RECOMMENDED_SIZE. + * @param dest_size IN: size of the buffer pointed by dest + * OUT: size of the copied digest + * @return VB2_SUCCESS, or error code on error + */ +vb2_error_t vb2api_get_pcr_digest(struct vb2_context *ctx, + enum vb2_pcr_digest which_digest, + uint8_t *dest, uint32_t *dest_size); + +/** + * Prepare for kernel verification stage. + * + * Must be called before other vb2api kernel functions. + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2api_kernel_phase1(struct vb2_context *ctx); + +/** + * Load the verified boot block (vblock) for a kernel. + * + * This function may be called multiple times, to load and verify the + * vblocks from multiple kernel partitions. + * + * @param ctx Vboot context + * @param stream Kernel stream + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2api_load_kernel_vblock(struct vb2_context *ctx); + +/** + * Get the size and offset of the kernel data for the most recent vblock. + * + * Valid after a successful call to vb2api_load_kernel_vblock(). + * + * @param ctx Vboot context + * @param offset_ptr Destination for offset in bytes of kernel data as + * reported by vblock. + * @param size_ptr Destination for size of kernel data in bytes. + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2api_get_kernel_size(struct vb2_context *ctx, + uint32_t *offset_ptr, uint32_t *size_ptr); + +/** + * Verify kernel data using the previously loaded kernel vblock. + * + * Valid after a successful call to vb2api_load_kernel_vblock(). This allows + * the caller to load or map the kernel data, as appropriate, and pass the + * pointer to the kernel data into vboot. + * + * @param ctx Vboot context + * @param buf Pointer to kernel data + * @param size Size of kernel data in bytes + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2api_verify_kernel_data(struct vb2_context *ctx, const void *buf, + uint32_t size); + +/** + * Clean up after kernel verification. + * + * Call this after successfully loading a vblock and verifying kernel data, + * or if you've run out of boot devices and/or kernel partitions. + * + * This cleans up intermediate data structures in the vboot context, and + * updates the version in the secure data if necessary. + */ +vb2_error_t vb2api_kernel_phase3(struct vb2_context *ctx); + +/** + * Read the hardware ID from the GBB, and store it onto the given buffer. + * + * @param ctx Vboot context. + * @param hwid Buffer to store HWID, which will be null-terminated. + * @param size Maximum size of HWID including null terminator. HWID + * length may not exceed 256 (VB2_GBB_HWID_MAX_SIZE), so + * this value is suggested. If size is too small, then + * VB2_ERROR_INVALID_PARAMETER is returned. Actual size + * of the output HWID string is returned in this pointer, + * also including null terminator. + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2api_gbb_read_hwid(struct vb2_context *ctx, char *hwid, + uint32_t *size); + +/** + * Retrieve current GBB flags. + * + * See enum vb2_gbb_flag in 2gbb_flags.h for a list of all GBB flags. + * + * @param ctx Vboot context. + * + * @return vb2_gbb_flags_t representing current GBB flags. + */ +vb2_gbb_flags_t vb2api_gbb_get_flags(struct vb2_context *ctx); + +/** + * Get the size of the signed firmware body. This is only legal to call after + * vb2api_fw_phase3() has returned successfully, and will return 0 otherwise. + * + * @param ctx Vboot context + * + * @return The firmware body size in bytes (or 0 if called too early). + */ +uint32_t vb2api_get_firmware_size(struct vb2_context *ctx); + +/** + * Check if this firmware was bundled with the well-known public developer key + * set (more specifically, checks the recovery key in recovery mode and the + * kernel subkey from the firmware preamble in other modes). This is a best + * effort check that could be misled by a specifically crafted key. + * + * May only be called after vb2api_kernel_phase1() has run. + * + * @param ctx Vboot context + * + * @return 1 for developer keys, 0 for any others. + */ +int vb2api_is_developer_signed(struct vb2_context *ctx); + +/** + * Return the current kernel rollback version from secdata. + * + * @param ctx Vboot context + * + * @return The rollback version number. + */ +uint32_t vb2api_get_kernel_rollback_version(struct vb2_context *ctx); + +/** + * If no display is available, set DISPLAY_REQUEST in nvdata. + * + * @param ctx Vboot2 context + * @return 1 if DISPLAY_REQUEST is set and a reboot is required, or 0 otherwise. + */ +int vb2api_need_reboot_for_display(struct vb2_context *ctx); + +/** + * Get the current recovery reason. + * + * See enum vb2_nv_recovery in 2recovery_reasons.h. + * + * @param ctx Vboot context + * @return Current recovery reason. + */ +uint32_t vb2api_get_recovery_reason(struct vb2_context *ctx); + +/** + * Get the current locale id from nvdata. + * + * @param ctx Vboot context + * @return Current locale id. + */ +uint32_t vb2api_get_locale_id(struct vb2_context *ctx); + +/** + * Set the locale id in nvdata. + * + * @param ctx Vboot context + * @param locale_id The locale id to be set + */ +void vb2api_set_locale_id(struct vb2_context *ctx, uint32_t locale_id); + +/** + * Whether phone recovery functionality is enabled or not. + * + * @param ctx Vboot context + * @return 1 if enabled, 0 if disabled. + */ +int vb2api_phone_recovery_enabled(struct vb2_context *ctx); + +/** + * Whether phone recovery instructions in recovery UI are enabled or not. + * + * @param ctx Vboot context + * @return 1 if enabled, 0 if disabled. + */ +int vb2api_phone_recovery_ui_enabled(struct vb2_context *ctx); + +/** + * Whether diagnostic UI functionality is enabled or not. + * + * @param ctx Vboot context + * @return 1 if enabled, 0 if disabled. + */ +int vb2api_diagnostic_ui_enabled(struct vb2_context *ctx); + +/* Default boot target in developer mode. */ +enum vb2_dev_default_boot_target { + /* Default to boot from internal disk. */ + VB2_DEV_DEFAULT_BOOT_TARGET_INTERNAL = 0, + + /* Default to boot from external disk. */ + VB2_DEV_DEFAULT_BOOT_TARGET_EXTERNAL = 1, + + /* Default to boot altfw. */ + VB2_DEV_DEFAULT_BOOT_TARGET_ALTFW = 2, +}; + +/** + * Get the default boot target in developer mode. This function must be called + * after vb2api_kernel_phase1. + * + * @param ctx Vboot context + * @return The developer mode default boot target. + */ +enum vb2_dev_default_boot_target vb2api_get_dev_default_boot_target( + struct vb2_context *ctx); + +/** + * Whether to use short delay instead of the normal delay in developer screens. + * + * @param ctx Vboot context + * @return 1 for short delay and 0 otherwise. + */ +int vb2api_use_short_dev_screen_delay(struct vb2_context *ctx); + +/** + * Request to enable developer mode. + * + * Enables the developer flag in vb2_context firmware secdata. Note that + * modified secdata must be saved for change to apply on reboot. + * + * NOTE: Doesn't update the LAST_BOOT_DEVELOPER secdata flag. That should be + * done on the next boot. + * + * @param ctx Vboot context + * @return VB2_SUCCESS if success; error if enabling developer mode is not + * allowed. + */ +vb2_error_t vb2api_enable_developer_mode(struct vb2_context *ctx); + +/** + * Request to disable developer mode by setting VB2_NV_DIAG_REQUEST. + * + * @param ctx Vboot context + * @return VB2_SUCCESS if success; other errors if the check of + * VB2_GBB_FLAG_FORCE_DEV_SWITCH_ON failed. + */ +vb2_error_t vb2api_disable_developer_mode(struct vb2_context *ctx); + +/** + * Request diagnostics by setting VB2_NV_DIAG_REQUEST. + * + * @param ctx Vboot context + */ +void vb2api_request_diagnostics(struct vb2_context *ctx); + +/*****************************************************************************/ +/* APIs provided by the caller to verified boot */ + +/** + * Read a verified boot resource. + * + * @param ctx Vboot context + * @param index Resource index to read + * @param offset Byte offset within resource to start at + * @param buf Destination for data + * @param size Amount of data to read + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2ex_read_resource(struct vb2_context *ctx, + enum vb2_resource_index index, uint32_t offset, + void *buf, uint32_t size); + +/** + * Print debug output. + * + * This should work like printf(). If func!=NULL, it will be a string with + * the current function name; that can be used to generate prettier debug + * output. If func==NULL, don't print any extra header/trailer so that this + * can be used to composite a bigger output string from several calls - for + * example, when doing a hex dump. + * + * @param func Function name generating output, or NULL. + * @param fmt Printf format string + */ +__attribute__((format(printf, 2, 3))) +void vb2ex_printf(const char *func, const char *fmt, ...); + +/** + * Initialize the hardware crypto engine to calculate a block-style digest. + * + * @param hash_alg Hash algorithm to use + * @param data_size Expected total size of data to hash + * @return VB2_SUCCESS, or non-zero error code (HWCRYPTO_UNSUPPORTED not fatal). + */ +vb2_error_t vb2ex_hwcrypto_digest_init(enum vb2_hash_algorithm hash_alg, + uint32_t data_size); + +/** + * Extend the hash in the hardware crypto engine with another block of data. + * + * @param buf Next data block to hash + * @param size Length of data block in bytes + * @return VB2_SUCCESS, or non-zero error code. + */ +vb2_error_t vb2ex_hwcrypto_digest_extend(const uint8_t *buf, uint32_t size); + +/** + * Finalize the digest in the hardware crypto engine and extract the result. + * + * @param digest Destination buffer for resulting digest + * @param digest_size Length of digest buffer in bytes + * @return VB2_SUCCESS, or non-zero error code. + */ +vb2_error_t vb2ex_hwcrypto_digest_finalize(uint8_t *digest, + uint32_t digest_size); + +/** + * Verify a RSA PKCS1.5 signature in hardware crypto engine + * against an expected hash digest. + * + * @param key Key to use in signature verification + * @param sig Signature to verify (destroyed in process) + * @param digest Digest of signed data + * @return VB2_SUCCESS, or non-zero error code (HWCRYPTO_UNSUPPORTED not fatal). + */ +vb2_error_t vb2ex_hwcrypto_rsa_verify_digest(const struct vb2_public_key *key, + const uint8_t *sig, + const uint8_t *digest); + +/** + * Calculate modexp using hardware crypto engine. + * + * @param key Key to use in signing + * @param inout Input and output big-endian byte array + * @param workbuf32 Work buffer; caller must verify this is + * (3 * key->arrsize) elements long. + * @param exp RSA public exponent: either 65537 (F4) or 3 + * @return VB2_SUCCESS or HWCRYPTO_UNSUPPORTED. + */ +vb2_error_t vb2ex_hwcrypto_modexp(const struct vb2_public_key *key, + uint8_t *inout, + uint32_t *workbuf32, int exp); + +/* + * Abort vboot flow due to a failed assertion or broken assumption. + * + * Likely due to caller misusing vboot (e.g. calling API functions + * out-of-order, filling in vb2_context fields inappropriately). + * Implementation should reboot or halt the machine, or fall back to some + * alternative boot flow. Retrying vboot is unlikely to succeed. + */ +void vb2ex_abort(void); + +/** + * Commit any pending data to disk. + * + * Commit nvdata and secdata spaces if modified. Normally this should be + * performed after vboot has completed executing and control has been passed + * back to the caller. However, in certain kernel verification cases (e.g. + * right before attempting to boot an OS; from a UI screen which requires + * user-initiated shutdown; just prior to triggering battery cut-off), the + * caller may not get a chance to commit this data. + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or non-zero error code. + */ +vb2_error_t vb2ex_commit_data(struct vb2_context *ctx); + +/*****************************************************************************/ +/* TPM functionality */ + +/** + * Initialize the TPM. + * + * @return VB2_SUCCESS, or non-zero error code. + */ +vb2_error_t vb2ex_tpm_init(void); + +/** + * Close and open the TPM. + * + * This is needed for running more complex commands at user level, such as + * TPM_TakeOwnership, since the TPM device can be opened only by one process at + * a time. + * + * @return VB2_SUCCESS, or non-zero error code. + */ +vb2_error_t vb2ex_tpm_close(void); +vb2_error_t vb2ex_tpm_open(void); + +/** + * Send request to TPM and receive response + * + * Send a request_length-byte request to the TPM and receive a response. On + * input, response_length is the size of the response buffer in bytes. On + * exit, response_length is set to the actual received response length in + * bytes. + * + * @param request Pointer to request buffer + * @param request_length Number of bytes to send + * @param response Pointer to response buffer + * @param response_length Size of response buffer; on return, + * set to number of received bytes + * @return TPM_SUCCESS, or non-zero if error. + */ +uint32_t vb2ex_tpm_send_recv(const uint8_t *request, uint32_t request_length, + uint8_t *response, uint32_t *response_length); + +#ifdef CHROMEOS_ENVIRONMENT + +/** + * Obtain cryptographically secure random bytes. + * + * This function is used to generate random nonces for TPM auth sessions for + * example. As an implication, the generated random bytes should not be + * predictable for a TPM communication interception attack. This implies a + * local source of randomness should be used, i.e. this should not be wired to + * the TPM RNG directly. Otherwise, an attacker with communication interception + * abilities could launch replay attacks by reusing previous nonces. + * + * @return VB2_SUCCESS, or non-zero error code. + */ +vb2_error_t vb2ex_tpm_get_random(uint8_t *buf, uint32_t length); + +#endif /* CHROMEOS_ENVIRONMENT */ + +/* Modes for vb2ex_tpm_set_mode. */ +enum vb2_tpm_mode { + /* + * TPM is enabled tentatively, and may be set to either + * ENABLED or DISABLED mode. + */ + VB2_TPM_MODE_ENABLED_TENTATIVE = 0, + + /* TPM is enabled, and mode may not be changed. */ + VB2_TPM_MODE_ENABLED = 1, + + /* TPM is disabled, and mode may not be changed. */ + VB2_TPM_MODE_DISABLED = 2, +}; + +/** + * Set the current TPM mode value, and validate that it was changed. If one + * of the following occurs, the function call fails: + * - TPM does not understand the instruction (old version) + * - TPM has already left the TpmModeEnabledTentative mode + * - TPM responds with a mode other than the requested mode + * - Some other communication error occurs + * Otherwise, the function call succeeds. + * + * @param mode_val Desired TPM mode to set. May be one of ENABLED + * or DISABLED from vb2_tpm_mode enum. + * @return VB2_SUCCESS, or non-zero error code. + */ +vb2_error_t vb2ex_tpm_set_mode(enum vb2_tpm_mode mode_val); + +/** + * Clear the TPM owner. + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2ex_tpm_clear_owner(struct vb2_context *ctx); + +/*****************************************************************************/ +/* Auxiliary firmware (auxfw) */ + +/** + * Sync all auxiliary firmware to the expected versions. + * + * This function will first check if an auxfw update is needed and + * what the "severity" of that update is (i.e., if any auxfw devices + * exist and the relative quickness of updating it. If the update is + * deemed slow, it may display a screen to notify the user. The + * platform is then instructed to perform the update. Finally, an EC + * reboot to its RO section is performed to ensure that auxfw devices + * are also reset and running the new firmware. + * + * @param ctx Vboot2 context + * @return VB2_SUCCESS, or non-zero error code. + */ +vb2_error_t vb2api_auxfw_sync(struct vb2_context *ctx); + +/* + * severity levels for an auxiliary firmware update request + */ +enum vb2_auxfw_update_severity { + /* no update needed and no protection needed */ + VB2_AUXFW_NO_DEVICE = 0, + /* no update needed */ + VB2_AUXFW_NO_UPDATE = 1, + /* update needed, can be done quickly */ + VB2_AUXFW_FAST_UPDATE = 2, + /* update needed, "this would take a while..." */ + VB2_AUXFW_SLOW_UPDATE = 3, +}; + +/* + * Check if any auxiliary firmware needs updating. + * + * This is called after the EC has been updated and is intended to + * version-check additional firmware blobs such as TCPCs. + * + * @param severity return parameter for health of auxiliary firmware + * (see vb2_auxfw_update_severity above) + * @return VBERROR_... error, VB2_SUCCESS on success. + */ +vb2_error_t vb2ex_auxfw_check(enum vb2_auxfw_update_severity *severity); + +/* + * Perform auxiliary firmware update(s). + * + * This is called after the EC has been updated and is intended to + * update additional firmware blobs such as TCPCs. + * + * @return VBERROR_... error, VB2_SUCCESS on success. + */ +vb2_error_t vb2ex_auxfw_update(void); + +/* + * Notify client that vboot is done with auxfw. + * + * If auxfw sync was successful, this will be called at the end so that + * the client may perform actions that require the auxfw to be in its + * final state. This may include protecting the communcations tunnels that + * allow auxiliary firmware updates from the OS. + * + * @param ctx Vboot context + * @return VBERROR_... error, VB2_SUCCESS on success. + */ +vb2_error_t vb2ex_auxfw_finalize(struct vb2_context *ctx); + +/*****************************************************************************/ +/* Embedded controller (EC) */ + +/* + * Firmware selection type for EC software sync logic. Note that we store + * these in a uint32_t because enum maps to int, which isn't fixed-size. + */ +enum vb2_firmware_selection { + /* Read only firmware for normal or developer path. */ + VB_SELECT_FIRMWARE_READONLY = 3, + /* Rewritable EC firmware currently set active */ + VB_SELECT_FIRMWARE_EC_ACTIVE = 4, + /* Rewritable EC firmware currently not set active thus updatable */ + VB_SELECT_FIRMWARE_EC_UPDATE = 5, + /* Keep this at the end */ + VB_SELECT_FIRMWARE_COUNT, +}; + +/** + * Sync the Embedded Controller device to the expected version. + * + * This function will check if EC software sync is allowed, and if it + * is, it will compare the expected image hash to the actual image + * hash. If they are the same, the EC will simply jump to its RW + * firwmare. Otherwise, the specified flash image will be updated to + * the new version, and the EC will reboot into its new firmware. + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb2api_ec_sync(struct vb2_context *ctx); + +/** + * Check if the EC is currently running rewritable code. + * + * If the EC is in RO code, sets *in_rw=0. + * If the EC is in RW code, sets *in_rw non-zero. + * If the current EC image is unknown, returns error. */ +vb2_error_t vb2ex_ec_running_rw(int *in_rw); + +/** + * Request the EC jump to its rewritable code. If successful, returns when the + * EC has booting its RW code far enough to respond to subsequent commands. + * Does nothing if the EC is already in its rewritable code. + */ +vb2_error_t vb2ex_ec_jump_to_rw(void); + +/** + * Tell the EC to refuse another jump until it reboots. Subsequent calls to + * vb2ex_ec_jump_to_rw() in this boot will fail. + */ +vb2_error_t vb2ex_ec_disable_jump(void); + +/** + * Read the SHA-256 hash of the selected EC image. + * + * @param select Image to get hash of. RO or RW. + * @param hash Pointer to the hash. + * @param hash_size Pointer to the hash size. + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2ex_ec_hash_image(enum vb2_firmware_selection select, + const uint8_t **hash, int *hash_size); + +/** + * Read the SHA-256 hash of the expected contents of the EC image associated + * with the main firmware specified by the "select" argument. + * + * @param select Image to get expected hash for (RO or RW). + * @param hash Pointer to the hash. + * @param hash_size Pointer to the hash size (in bytes). + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2ex_ec_get_expected_image_hash(enum vb2_firmware_selection select, + const uint8_t **hash, + int *hash_size); + +/** + * Update the selected EC image to the expected version. + * + * @param select Image to get expected hash for (RO or RW). + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2ex_ec_update_image(enum vb2_firmware_selection select); + +/** + * Lock the EC code to prevent updates until the EC is rebooted. + * Subsequent calls to vb2ex_ec_update_image() with the same region this + * boot will fail. + * + * @param select Image to get expected hash for (RO or RW). + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2ex_ec_protect(enum vb2_firmware_selection select); + +/** + * Perform EC post-verification / updating / jumping actions. + * + * This routine is called to perform certain actions that must wait until + * after the EC resides in its `final` image (the image the EC will + * run for the duration of boot). These actions include verifying that + * enough power is available to continue with boot. + * + * @param ctx Pointer to vboot context. + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2ex_ec_vboot_done(struct vb2_context *ctx); + +/** + * Request EC to stop discharging and cut-off battery. + */ +vb2_error_t vb2ex_ec_battery_cutoff(void); + +/*****************************************************************************/ +/* Functions for UI display. */ + +/** + * UI for a non-manual recovery ("BROKEN"). + * + * Enter the broken screen UI, which shows that an unrecoverable error was + * encountered last boot. Wait for the user to physically reset or shut down. + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or non-zero error code. + */ +vb2_error_t vb2ex_broken_screen_ui(struct vb2_context *ctx); + +/** + * UI for a manual recovery-mode boot. + * + * Enter the recovery menu, which prompts the user to insert recovery media, + * navigate the step-by-step recovery, or enter developer mode if allowed. + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or non-zero error code. + */ +vb2_error_t vb2ex_manual_recovery_ui(struct vb2_context *ctx); + +/** + * UI for a developer-mode boot. + * + * Enter the developer menu, which provides options to switch out of developer + * mode, boot from external media, use legacy bootloader, or boot Chrome OS from + * disk. + * + * If a timeout occurs, take the default boot action. + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or non-zero error code. + */ +vb2_error_t vb2ex_developer_ui(struct vb2_context *ctx); + +/** + * UI for a diagnostic tools boot. + * + * Enter the diagnostic tools menu, which provides debug information and + * diagnostic tests of various hardware components. + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or non-zero error code. + */ +vb2_error_t vb2ex_diagnostic_ui(struct vb2_context *ctx); + +/* Helpers for bitmask operations */ +#define VB2_SET_BIT(mask, index) ((mask) |= ((uint32_t)1 << (index))) +#define VB2_CLR_BIT(mask, index) ((mask) &= ~((uint32_t)1 << (index))) +#define VB2_GET_BIT(mask, index) ((mask) & ((uint32_t)1 << (index))) + +/** + * Check that physical presence button is currently pressed by the user. + * + * @return 1 for pressed, 0 for not. + */ +int vb2ex_physical_presence_pressed(void); + +/** + * Get the number of supported locales. + * + * @return Number of locales. 0 if none or on error. + */ +uint32_t vb2ex_get_locale_count(void); + +/** + * Return the number of available alternate bootloaders. + * + * @return Number of alternate bootloaders. 0 if none or on error. + */ +uint32_t vb2ex_get_altfw_count(void); + +/** + * Run alternate bootloader. + * + * @param altfw_id ID of alternate bootloader to run, where + * altfw_id <= vb2ex_get_altfw_count(). 0 for default, + * which corresponds to an alternate bootloader in + * the range 1 <= altfw_id <= vb2ex_getfw_count(). + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2ex_run_altfw(uint32_t altfw_id); + +/** + * Delay for at least the specified number of milliseconds. + * + * @param msec Duration in milliseconds. + */ +void vb2ex_msleep(uint32_t msec); + +/** + * Play a beep tone of the specified frequency in Hz for the duration msec. + * + * This is effectively a sleep call that makes noise. The implementation may + * beep at a fixed frequency if frequency support is not available. Regardless + * of whether any errors occur, the callback is expected to delay for the + * specified duration before returning. + * + * @param msec Duration of beep in milliseconds. + * @param frequency Sound frequency in Hz. + */ +void vb2ex_beep(uint32_t msec, uint32_t frequency); + +/** + * Get the full debug info string. + * + * Return a pointer to the full debug info string which is guaranteed to be + * null-terminated. The function implementation should manage string memory + * internally. Subsequent calls may update the string and return the same + * pointer, or return a new pointer if necessary. + * + * @param ctx Vboot context + * @return The pointer to the full debug info string. NULL on error. + */ +const char *vb2ex_get_debug_info(struct vb2_context *ctx); + +/** + * Get the vboot debug info. + * + * Return a pointer to the vboot debug info string which is guaranteed to be + * null-terminated. The caller owns the string and should call free() when + * finished with it. + * + * @param ctx Vboot context + * @return The pointer to the vboot debug info string. NULL on error. + */ +char *vb2api_get_debug_info(struct vb2_context *ctx); + +/** + * Get the full firmware log string. + * + * Return a pointer to the full firmware log string which is guaranteed to be + * null-terminated. The function implementation should snapshot the full + * firmware log when it is called. If `reset` is not zero, it will reset the + * firmware log snapshot. + * + * @param reset Discard the current firmware log snapshot and + * reacquire a new one. + * @return The pointer to the full firmware log string. NULL on error. + */ +const char *vb2ex_get_firmware_log(int reset); + +/** + * Get the health info of the storage. + * + * @param out For returning a read-only pointer of full log string which is + * guaranteed to be null-terminated. The function will manage + * memory internally, so the returned pointer will only be valid + * until next call. + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2ex_diag_get_storage_health(const char **out); + +/** + * Get the storage self-test log. + * + * @param out For returning a read-only pointer of full log string which is + * guaranteed to be null-terminated. The function will manage + * memory internally, so the returned pointer will only be valid + * until next call. + * @return The status of storage test. VB2_SUCCESS means the test is finished, + * regardless of passing or failing. VB2_ERROR_EX_DIAG_TEST_RUNNING means + * the test is still running. VB2_ERROR_EX_UNIMPLEMENTED means the storage + * self-test is not supported on this device. Other non-zero codes for internal + * errors. + */ +vb2_error_t vb2ex_diag_get_storage_test_log(const char **out); + +/** + * Get the memory diagnostic status. When it is called, it will take over the + * control for a short period of time running memory test, and then return the + * result of current status. If `reset` is not zero, it will reset the memory + * test state. + * + * @param reset Discard the current memory test result and re-initialize + * a new test. + * @param out For returning a read-only pointer of full log string which is + * guaranteed to be null-terminated. The function will manage + * memory internally, so the returned pointer will only be valid + * until next call. + * @return The status of memory test. VB2_SUCCESS means the test is finished, + * regardless of passing or failing. VB2_ERROR_EX_DIAG_TEST_RUNNING means + * the test is still running but the output buffer was unchanged. + * VB2_ERROR_EX_DIAG_TEST_UPDATED means the test is still running and the output + * buffer was updated. Other non-zero codes for internal errors. + */ +vb2_error_t vb2ex_diag_memory_quick_test(int reset, const char **out); +vb2_error_t vb2ex_diag_memory_full_test(int reset, const char **out); + +/*****************************************************************************/ +/* Timer. */ + +/** + * Read a millisecond timer. + * + * This should have a sufficient number of bits to avoid wraparound for at + * least 10 minutes. + * + * @return Current timer value in milliseconds. + */ +uint32_t vb2ex_mtime(void); + +#endif /* VBOOT_REFERENCE_2API_H_ */ diff --git a/firmware/2lib/include/2common.h b/firmware/2lib/include/2common.h new file mode 100644 index 0000000..d43f18a --- /dev/null +++ b/firmware/2lib/include/2common.h @@ -0,0 +1,473 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Common functions between firmware and kernel verified boot. + */ + +#ifndef VBOOT_REFERENCE_2COMMON_H_ +#define VBOOT_REFERENCE_2COMMON_H_ + +#include "2api.h" +#include "2gbb.h" +#include "2misc.h" +#include "2packed_key.h" +#include "2return_codes.h" +#include "2sha.h" +#include "2struct.h" +#include "2sysincludes.h" + +struct vb2_public_key; + +/* Time conversion constants. */ +#define VB2_USEC_PER_MSEC 1000ULL +#define VB2_MSEC_PER_SEC 1000ULL + +/* + * Return the min/max of A and B. This is used in macros which calculate the + * required buffer size, so can't be turned into a static inline function. + */ +#define VB2_MIN(a, b) ({ \ + typeof(a) __vb2_min_a = (a); \ + typeof(b) __vb2_min_b = (b); \ + __vb2_min_a < __vb2_min_b ? __vb2_min_a : __vb2_min_b; \ + }) +#define VB2_MAX(a, b) ({ \ + typeof(a) __vb2_max_a = (a); \ + typeof(b) __vb2_max_b = (b); \ + __vb2_max_a > __vb2_max_b ? __vb2_max_a : __vb2_max_b; \ + }) + +/* Return the number of elements in an array */ +#ifndef ARRAY_SIZE +#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) +#endif + +/* Platform-dependent debug/assert output macros. */ +#define VB2_DEBUG(format, args...) \ + vb2ex_printf(__func__, format, ## args) + +#define VB2_DEBUG_RAW(format, args...) \ + vb2ex_printf(NULL, format, ## args) + +#define VB2_ASSERT(expr) do { \ + if (!(expr)) { \ + VB2_DEBUG("assertion failed: %s at %s:%d\n", \ + #expr, __FILE__, __LINE__); \ + vb2ex_abort(); \ + for (;;); \ + } \ +} while (0) + +#define VB2_DIE(format, args...) do { \ + VB2_DEBUG(format, ## args); \ + vb2ex_abort(); \ + for (;;); \ +} while (0) + +#define VB2_REC_OR_DIE(ctx, format, args...) do { \ + VB2_DEBUG(format, ## args); \ + if ((vb2_get_sd(ctx)->status & VB2_SD_STATUS_RECOVERY_DECIDED) && \ + !(ctx->flags & VB2_CONTEXT_RECOVERY_MODE)) { \ + vb2ex_abort(); \ + for (;;); \ + } \ + VB2_DEBUG("IGNORING ABORT IN RECOVERY MODE!!!\n"); \ +} while (0) + +/* + * Define test_mockable and for mocking functions when compiled for Chrome OS + * environment (that is, not for firmware). + */ +#ifndef test_mockable +#ifdef CHROMEOS_ENVIRONMENT +#define test_mockable __attribute__((weak)) +#else +#define test_mockable +#endif +#endif + +#if (defined(__GNUC__) && __GNUC__ >= 7) +#define VBOOT_FALLTHROUGH __attribute__((__fallthrough__)) +#elif defined(__clang__) +#if __has_attribute(__fallthrough__) +#define VBOOT_FALLTHROUGH __attribute__((__fallthrough__)) +#endif +#else +#define VBOOT_FALLTHROUGH ((void)0) +#endif + +/** + * Round up a number to a multiple of VB2_WORKBUF_ALIGN + * + * @param v Number to round up + * @return The number, rounded up. + */ +static inline uint32_t vb2_wb_round_up(uint32_t v) +{ + return (v + VB2_WORKBUF_ALIGN - 1) & ~(VB2_WORKBUF_ALIGN - 1); +} + +/* Work buffer */ +struct vb2_workbuf { + uint8_t *buf; + uint32_t size; +}; + +/** + * Initialize a work buffer. + * + * @param wb Work buffer to init + * @param buf Pointer to work buffer data + * @param size Size of work buffer data in bytes + */ +void vb2_workbuf_init(struct vb2_workbuf *wb, uint8_t *buf, uint32_t size); + +/** + * Allocate space in a work buffer. + * + * Note that the returned buffer will always be aligned to VB2_WORKBUF_ALIGN. + * + * The work buffer acts like a stack, and detailed tracking of allocs and frees + * is not done. The caller must track the size of each allocation and free via + * vb2_workbuf_free() in the reverse order they were allocated. + * + * An acceptable alternate workflow inside a function is to pass in a const + * work buffer, then make a local copy. Allocations done to the local copy + * then don't change the passed-in work buffer, and will effectively be freed + * when the local copy goes out of scope. + * + * @param wb Work buffer + * @param size Requested size in bytes + * @return A pointer to the allocated space, or NULL if error. + */ +void *vb2_workbuf_alloc(struct vb2_workbuf *wb, uint32_t size); + +/** + * Reallocate space in a work buffer. + * + * Note that the returned buffer will always be aligned to VB2_WORKBUF_ALIGN. + * The work buffer acts like a stack, so this must only be done to the most + * recently allocated buffer. + * + * @param wb Work buffer + * @param oldsize Old allocation size in bytes + * @param newsize Requested size in bytes + * @return A pointer to the allocated space, or NULL if error. + */ +void *vb2_workbuf_realloc(struct vb2_workbuf *wb, uint32_t oldsize, + uint32_t newsize); + +/** + * Free the preceding allocation. + * + * Note that the work buffer acts like a stack, and detailed tracking of + * allocs and frees is not done. The caller must track the size of each + * allocation and free them in reverse order. + * + * @param wb Work buffer + * @param size Size of data to free + */ +void vb2_workbuf_free(struct vb2_workbuf *wb, uint32_t size); + +/* Check if a pointer is aligned on an align-byte boundary */ +#define vb2_aligned(ptr, align) (!(((uintptr_t)(ptr)) & ((align) - 1))) + +/** + * Safer memcmp() for use in crypto. + * + * Compares the buffers to see if they are equal. Time taken to perform + * the comparison is dependent only on the size, not the relationship of + * the match between the buffers. Note that unlike memcmp(), this only + * indicates inequality, not which buffer is lesser. + * + * @param s1 First buffer + * @param s2 Second buffer + * @param size Number of bytes to compare + * @return 0 if match or size=0, non-zero if at least one byte mismatched. + */ +vb2_error_t vb2_safe_memcmp(const void *s1, const void *s2, size_t size); + +/** + * Align a buffer and check its size. + * + * @param **ptr Pointer to pointer to align + * @param *size Points to size of buffer pointed to by *ptr + * @param align Required alignment (must be power of 2) + * @param want_size Required size + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb2_align(uint8_t **ptr, uint32_t *size, uint32_t align, + uint32_t want_size); + +/** + * Return offset of ptr from base. + * + * @param base Base pointer + * @param ptr Pointer at some offset from base + * @return The offset of ptr from base. + */ +ptrdiff_t vb2_offset_of(const void *base, const void *ptr); + +/** + * Return member of given object. + * + * @param parent Pointer to parent object + * @param offset Offset from base + * @return Pointer to child object. + */ +void *vb2_member_of(void *parent, ptrdiff_t offset); + +/** + * Return expected signature size for a signature/hash algorithm pair + * + * @param sig_alg Signature algorithm + * @param hash_alg Hash algorithm + * @return The signature size, or zero if error / unsupported algorithm. + */ +uint32_t vb2_sig_size(enum vb2_signature_algorithm sig_alg, + enum vb2_hash_algorithm hash_alg); + +/** + * Return a key ID for an unsigned hash algorithm. + * + * @param hash_alg Hash algorithm to return key for + * @return A pointer to the key ID for that hash algorithm with + * sig_alg=VB2_SIG_NONE, or NULL if error. + */ +const struct vb2_id *vb2_hash_id(enum vb2_hash_algorithm hash_alg); + +/* Size of work buffer sufficient for vb2_verify_digest() worst case. */ +#define VB2_VERIFY_DIGEST_WORKBUF_BYTES VB2_VERIFY_RSA_DIGEST_WORKBUF_BYTES + +/* Size of work buffer sufficient for vb2_verify_data() worst case. */ +#define VB2_VERIFY_DATA_WORKBUF_BYTES \ + (VB2_SHA512_DIGEST_SIZE + \ + VB2_MAX(VB2_VERIFY_DIGEST_WORKBUF_BYTES, \ + sizeof(struct vb2_digest_context))) + +/* Size of work buffer sufficient for vb2_verify_keyblock() worst case. */ +#define VB2_KEYBLOCK_VERIFY_WORKBUF_BYTES VB2_VERIFY_DATA_WORKBUF_BYTES + +/* Size of work buffer sufficient for vb2_verify_fw_preamble() worst case. */ +#define VB2_VERIFY_FIRMWARE_PREAMBLE_WORKBUF_BYTES VB2_VERIFY_DATA_WORKBUF_BYTES + +/* + * Size of work buffer sufficient for vb2_verify_kernel_preamble() worst + * case. + */ +#define VB2_VERIFY_KERNEL_PREAMBLE_WORKBUF_BYTES VB2_VERIFY_DATA_WORKBUF_BYTES + +/** + * Verify the data pointed to by a subfield is inside the parent data. + * + * The subfield has a header pointed to by member, and a separate data + * field at an offset relative to the header. That is: + * + * struct parent { + * (possibly other parent fields) + * struct member { + * (member header fields) + * }; + * (possibly other parent fields) + * }; + * (possibly some other parent data) + * (member data) + * (possibly some other parent data) + * + * @param parent Parent data + * @param parent_size Parent size in bytes + * @param member Subfield header + * @param member_size Size of subfield header in bytes + * @param member_data_offset Offset of member data from start of member + * @param member_data_size Size of member data in bytes + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb2_verify_member_inside(const void *parent, size_t parent_size, + const void *member, size_t member_size, + ptrdiff_t member_data_offset, + size_t member_data_size); + +/* + * Helper function to get data pointed to by a public key. + */ +static inline uint8_t *vb2_packed_key_data_mutable( + struct vb2_packed_key *key) +{ + return (uint8_t *)key + key->key_offset; +} + +static inline const uint8_t *vb2_packed_key_data( + const struct vb2_packed_key *key) +{ + return (const uint8_t *)((uintptr_t)key + key->key_offset); +} + +/** + * Verify a packed key is fully contained in its parent data + * + * @param parent Parent data + * @param parent_size Parent size in bytes + * @param key Packed key pointer + * @return VB2_SUCCESS, or non-zero if error. + */ +static inline vb2_error_t vb2_verify_packed_key_inside( + const void *parent, + uint32_t parent_size, + const struct vb2_packed_key *key) +{ + return vb2_verify_member_inside(parent, parent_size, + key, sizeof(*key), + key->key_offset, key->key_size); +} + +/* + * Helper functions to get data pointed to by a public key or signature. + */ +static inline uint8_t *vb2_signature_data_mutable( + struct vb2_signature *sig) +{ + return (uint8_t *)sig + sig->sig_offset; +} + +static inline const uint8_t *vb2_signature_data( + const struct vb2_signature *sig) +{ + return (const uint8_t *)((uintptr_t)sig + sig->sig_offset); +} + +/** + * Verify a signature is fully contained in its parent data + * + * @param parent Parent data + * @param parent_size Parent size in bytes + * @param sig Signature pointer + * @return VB2_SUCCESS, or non-zero if error. + */ +static inline vb2_error_t vb2_verify_signature_inside( + const void *parent, + uint32_t parent_size, + const struct vb2_signature *sig) +{ + return vb2_verify_member_inside(parent, parent_size, + sig, sizeof(*sig), + sig->sig_offset, sig->sig_size); +} + +/** + * Verify a signature against an expected hash digest. + * + * @param key Key to use in signature verification + * @param sig Signature to verify (may be destroyed in process) + * @param digest Digest of signed data + * @param wb Work buffer + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb2_verify_digest(const struct vb2_public_key *key, + struct vb2_signature *sig, const uint8_t *digest, + const struct vb2_workbuf *wb); + +/** + * Verify data matches signature. + * + * @param data Data to verify + * @param size Size of data buffer. Note that amount of data to + * actually validate is contained in sig->data_size. + * @param sig Signature of data (destroyed in process) + * @param key Key to use to validate signature + * @param wb Work buffer + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb2_verify_data(const uint8_t *data, uint32_t size, + struct vb2_signature *sig, + const struct vb2_public_key *key, + const struct vb2_workbuf *wb); + +/** + * Check the validity of a keyblock structure. + * + * Verifies all the header fields. Does not verify key index or keyblock + * flags. Should be called before verifying the keyblock data itself using + * the key. (This function does not itself verify the signature - just that + * the right amount of data is claimed to be signed.) + * + * @param block Keyblock to verify + * @param size Size of keyblock buffer + * @param sig Which signature inside the keyblock to use + */ +vb2_error_t vb2_check_keyblock(const struct vb2_keyblock *block, uint32_t size, + const struct vb2_signature *sig); + +/** + * Verify a keyblock using a public key. + * + * Header fields are also checked for validity. Does not verify key index or key + * block flags. Signature inside block is destroyed during check. + * + * @param block Keyblock to verify + * @param size Size of keyblock buffer + * @param key Key to use to verify block + * @param wb Work buffer + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb2_verify_keyblock(struct vb2_keyblock *block, uint32_t size, + const struct vb2_public_key *key, + const struct vb2_workbuf *wb); + +/** + * Check the validity of a firmware preamble using a public key. + * + * The signature in the preamble is destroyed during the check. + * + * @param preamble Preamble to verify + * @param size Size of preamble buffer + * @param key Key to use to verify preamble + * @param wb Work buffer + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb2_verify_fw_preamble(struct vb2_fw_preamble *preamble, + uint32_t size, + const struct vb2_public_key *key, + const struct vb2_workbuf *wb); + +/** + * Get the flags for the kernel preamble. + * + * @param preamble Preamble to check + * @return Flags for the preamble. Old preamble versions (<2.2) return 0. + */ +uint32_t vb2_kernel_get_flags(const struct vb2_kernel_preamble *preamble); + +/** + * Verify a keyblock using its hash. + * + * Header fields are also checked for validity. Does not verify key index or key + * block flags. Use this for self-signed keyblocks in developer mode. + * + * @param block Keyblock to verify + * @param size Size of keyblock buffer + * @param key Key to use to verify block + * @param wb Work buffer + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb2_verify_keyblock_hash(const struct vb2_keyblock *block, + uint32_t size, + const struct vb2_workbuf *wb); + +/** + * Check the validity of a kernel preamble using a public key. + * + * The signature in the preamble is destroyed during the check. + * + * @param preamble Preamble to verify + * @param size Size of preamble buffer + * @param key Key to use to verify preamble + * @param wb Work buffer + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb2_verify_kernel_preamble(struct vb2_kernel_preamble *preamble, + uint32_t size, + const struct vb2_public_key *key, + const struct vb2_workbuf *wb); + +#endif /* VBOOT_REFERENCE_2COMMON_H_ */ diff --git a/firmware/2lib/include/2constants.h b/firmware/2lib/include/2constants.h new file mode 100644 index 0000000..96dc999 --- /dev/null +++ b/firmware/2lib/include/2constants.h @@ -0,0 +1,89 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * General vboot-related constants. + * + * Constants that need to be exposed to assembly files or linker scripts + * may be placed here and imported via vb2_constants.h. + */ + +#ifndef VBOOT_REFERENCE_2CONSTANTS_H_ +#define VBOOT_REFERENCE_2CONSTANTS_H_ + +/* + * Size of non-volatile data used by vboot. + * + * If you only support non-volatile data format V1, then use VB2_NVDATA_SIZE. + * If you support V2, use VB2_NVDATA_SIZE_V2 and set context flag + * VB2_CONTEXT_NVDATA_V2. + */ +#define VB2_NVDATA_SIZE 16 +#define VB2_NVDATA_SIZE_V2 64 + +/* Size of secure data spaces used by vboot */ +#define VB2_SECDATA_FIRMWARE_SIZE 10 +#define VB2_SECDATA_KERNEL_SIZE_V02 13 +#define VB2_SECDATA_KERNEL_SIZE_V10 40 +#define VB2_SECDATA_KERNEL_MIN_SIZE 13 +#define VB2_SECDATA_KERNEL_MAX_SIZE 64 +#define VB2_SECDATA_FWMP_MIN_SIZE 40 +#define VB2_SECDATA_FWMP_MAX_SIZE 64 + +/* Size of current secdata_kernel revision. Referenced by external projects. */ +#define VB2_SECDATA_KERNEL_SIZE VB2_SECDATA_KERNEL_SIZE_V10 + +/* + * Recommended size of work buffer for firmware verification stage. + * + * TODO: The recommended size really depends on which key algorithms are + * used. Should have a better / more accurate recommendation than this. + */ +#define VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE (12 * 1024) + +/* + * Recommended size of work buffer for kernel verification stage. + * + * This is bigger because vboot 2.0 kernel preambles are usually padded to + * 64 KB. + * + * TODO: The recommended size really depends on which key algorithms are + * used. Should have a better / more accurate recommendation than this. + */ +#define VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE (80 * 1024) + +/* Recommended buffer size for vb2api_get_pcr_digest. */ +#define VB2_PCR_DIGEST_RECOMMENDED_SIZE 32 + +/* + * Alignment for work buffer pointers/allocations should be useful for any + * data type. When declaring workbuf buffers on the stack, the caller should + * use explicit alignment to avoid run-time errors. For example: + * + * int foo(void) + * { + * struct vb2_workbuf wb; + * uint8_t buf[NUM] __attribute__((aligned(VB2_WORKBUF_ALIGN))); + * wb.buf = buf; + * wb.size = sizeof(buf); + */ + +/* We want consistent alignment across all architectures. + 8-byte should work for all of them. */ +#define VB2_WORKBUF_ALIGN 8 + +/* Maximum length of a HWID in bytes, counting terminating null. */ +#define VB2_GBB_HWID_MAX_SIZE 256 + +/* Type and offset of flags member in vb2_gbb_header struct. */ +#define VB2_GBB_FLAGS_OFFSET 12 +#ifndef __ASSEMBLER__ +#include +typedef uint32_t vb2_gbb_flags_t; +#endif + +/* Size of legacy VbSharedDataHeader struct. Defined here to avoid including + the struct definition as part of a vb2_api.h include. */ +#define VB2_VBSD_SIZE 1096 + +#endif /* VBOOT_REFERENCE_2CONSTANTS_H_ */ diff --git a/firmware/2lib/include/2crc8.h b/firmware/2lib/include/2crc8.h new file mode 100644 index 0000000..f9e0cce --- /dev/null +++ b/firmware/2lib/include/2crc8.h @@ -0,0 +1,26 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Very simple 8-bit CRC function. + */ + +#ifndef VBOOT_REFERENCE_2CRC8_H_ +#define VBOOT_REFERENCE_2CRC8_H_ + +#include "2sysincludes.h" + +/** + * Calculate CRC-8 of the data, using the ITU version. + * + * Calculate CRC-8 ITU version of the given buffer, using x^8 + x^2 + x + 1 + * polynomial. Note that the CRC-8 will evaluate to zero for a buffer of all + * zeroes. + * + * @param data Data to CRC + * @param size Size of data in bytes + * @return CRC-8 of the data. + */ +uint8_t vb2_crc8(const void *data, uint32_t size); + +#endif /* VBOOT_REFERENCE_2CRC8_H_ */ diff --git a/firmware/2lib/include/2crypto.h b/firmware/2lib/include/2crypto.h new file mode 100644 index 0000000..14e1f14 --- /dev/null +++ b/firmware/2lib/include/2crypto.h @@ -0,0 +1,141 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Crypto constants for verified boot + */ + +#ifndef VBOOT_REFERENCE_2CRYPTO_H_ +#define VBOOT_REFERENCE_2CRYPTO_H_ + +#include "2sysincludes.h" + +/* Verified boot crypto algorithms */ +enum vb2_crypto_algorithm { + VB2_ALG_RSA1024_SHA1 = 0, + VB2_ALG_RSA1024_SHA256 = 1, + VB2_ALG_RSA1024_SHA512 = 2, + VB2_ALG_RSA2048_SHA1 = 3, + VB2_ALG_RSA2048_SHA256 = 4, + VB2_ALG_RSA2048_SHA512 = 5, + VB2_ALG_RSA4096_SHA1 = 6, + VB2_ALG_RSA4096_SHA256 = 7, + VB2_ALG_RSA4096_SHA512 = 8, + VB2_ALG_RSA8192_SHA1 = 9, + VB2_ALG_RSA8192_SHA256 = 10, + VB2_ALG_RSA8192_SHA512 = 11, + VB2_ALG_RSA2048_EXP3_SHA1 = 12, + VB2_ALG_RSA2048_EXP3_SHA256 = 13, + VB2_ALG_RSA2048_EXP3_SHA512 = 14, + VB2_ALG_RSA3072_EXP3_SHA1 = 15, + VB2_ALG_RSA3072_EXP3_SHA256 = 16, + VB2_ALG_RSA3072_EXP3_SHA512 = 17, + /* Number of algorithms */ + VB2_ALG_COUNT +}; + +/* Algorithm types for signatures */ +enum vb2_signature_algorithm { + /* Invalid or unsupported signature type */ + VB2_SIG_INVALID = 0, + + /* + * No signature algorithm. The digest is unsigned. See + * VB2_ID_NONE_* for key IDs to use with this algorithm. + */ + VB2_SIG_NONE = 1, + + /* RSA algorithms of the given length in bits (1024-8192) */ + VB2_SIG_RSA1024 = 2, /* Warning! This is likely to be deprecated! */ + VB2_SIG_RSA2048 = 3, + VB2_SIG_RSA4096 = 4, + VB2_SIG_RSA8192 = 5, + VB2_SIG_RSA2048_EXP3 = 6, + VB2_SIG_RSA3072_EXP3 = 7, + + /* Last index. Don't add anything below. */ + VB2_SIG_ALG_COUNT, +}; + +/* Algorithm types for hash digests */ +enum vb2_hash_algorithm { + /* Invalid or unsupported digest type */ + VB2_HASH_INVALID = 0, + /* For some applications, it's more useful that 0 means "no hash". */ + VB2_HASH_NONE = VB2_HASH_INVALID, + + /* SHA-1. Warning: This is likely to be deprecated soon! */ + VB2_HASH_SHA1 = 1, + + /* SHA-256 and SHA-512 */ + VB2_HASH_SHA256 = 2, + VB2_HASH_SHA512 = 3, + + /* SHA-224/SHA-384 are variants of SHA-256/SHA-512, respectively. */ + VB2_HASH_SHA224 = 4, + VB2_HASH_SHA384 = 5, + + /* Last index. Don't add anything below. */ + VB2_HASH_ALG_COUNT, +}; + +/* Arrays mapping signature/hash types to their string representations. */ +extern const char *vb2_sig_names[VB2_SIG_ALG_COUNT]; +extern const char *vb2_hash_names[VB2_HASH_ALG_COUNT]; + +/** + * Convert vb2_crypto_algorithm to vb2_signature_algorithm. + * + * @param algorithm Crypto algorithm (vb2_crypto_algorithm) + * + * @return The signature algorithm for that crypto algorithm, or + * VB2_SIG_INVALID if the crypto algorithm or its corresponding signature + * algorithm is invalid or not supported. + */ +enum vb2_signature_algorithm vb2_crypto_to_signature( + enum vb2_crypto_algorithm algorithm); + +/** + * Convert vb2_crypto_algorithm to vb2_hash_algorithm. + * + * @param algorithm Crypto algorithm (vb2_crypto_algorithm) + * + * @return The hash algorithm for that crypto algorithm, or VB2_HASH_INVALID if + * the crypto algorithm or its corresponding hash algorithm is invalid or not + * supported. + */ +enum vb2_hash_algorithm vb2_crypto_to_hash(enum vb2_crypto_algorithm algorithm); + +/** + * Return the name of a signature algorithm. + * + * @param sig_alg Signature algorithm to look up + * @return The corresponding name, or VB2_INVALID_ALG_NAME if no match. + */ +const char *vb2_get_sig_algorithm_name(enum vb2_signature_algorithm sig_alg); + +/** + * Return the name of a hash algorithm + * + * @param alg Hash algorithm ID + * @return The corresponding name, or VB2_INVALID_ALG_NAME if no match. + */ +const char *vb2_get_hash_algorithm_name(enum vb2_hash_algorithm alg); + +/** + * Return the name of a crypto algorithm. + * + * @param alg Crypto algorithm to look up + * @return The corresponding name, or VB2_INVALID_ALG_NAME if no match. + */ +const char *vb2_get_crypto_algorithm_name(enum vb2_crypto_algorithm alg); + +/** + * Return the name of a crypto algorithm. + * + * @param alg Crypto algorithm to look up + * @return The corresponding stem filename, or VB2_INVALID_ALG_NAME if no match. + */ +const char *vb2_get_crypto_algorithm_file(enum vb2_crypto_algorithm alg); + +#endif /* VBOOT_REFERENCE_2CRYPTO_H_ */ diff --git a/firmware/2lib/include/2fw_hash_tags.h b/firmware/2lib/include/2fw_hash_tags.h new file mode 100644 index 0000000..1ecec6e --- /dev/null +++ b/firmware/2lib/include/2fw_hash_tags.h @@ -0,0 +1,41 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Firmware hash tags for verified boot + */ + +#ifndef VBOOT_REFERENCE_2FW_HASH_TAGS_H_ +#define VBOOT_REFERENCE_2FW_HASH_TAGS_H_ + +#include + +/* + * Tags for types of hashable data. + * + * Note that not every firmware image will contain every tag. + * + * TODO: These are the ones that vboot specifically knows about given the + * current data structures. In the future, I'd really like the vboot preamble + * to contain an arbitrary list of tags and their hashes, so that we can hash + * ram init, main RW body, EC-RW for software sync, etc. all separately. + */ +enum vb2_hash_tag { + /* Invalid hash tag; never present in table */ + VB2_HASH_TAG_INVALID = 0, + + /* Firmware body */ + VB2_HASH_TAG_FW_BODY = 1, + + /* Kernel data key */ + VB2_HASH_TAG_KERNEL_DATA_KEY = 2, + + /* + * Tags over 0x40000000 are reserved for use by the calling firmware, + * which may associate them with arbitrary types of RW firmware data + * that it wants to track. + */ + VB2_HASH_TAG_CALLER_BASE = 0x40000000 +}; + +#endif /* VBOOT_REFERENCE_2FW_HASH_TAGS_H_ */ diff --git a/firmware/2lib/include/2gbb.h b/firmware/2lib/include/2gbb.h new file mode 100644 index 0000000..58da663 --- /dev/null +++ b/firmware/2lib/include/2gbb.h @@ -0,0 +1,46 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * GBB accessor functions. + */ + +#ifndef VBOOT_REFERENCE_2GBB_H_ +#define VBOOT_REFERENCE_2GBB_H_ + +#include "2common.h" + +struct vb2_packed_key; +struct vb2_workbuf; + +/** + * Read the root key from the GBB, and store it onto the given workbuf. + * + * @param ctx Vboot context. + * @param keyp Returns a pointer to the key. The caller may discard + * workbuf state if it wants to free the key. + * @param size If pointer is non-NULL, returns the total size of key, + * including data. + * @param wb Workbuf for data storage. + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2_gbb_read_root_key(struct vb2_context *ctx, + struct vb2_packed_key **keyp, uint32_t *size, + struct vb2_workbuf *wb); + +/** + * Read the recovery key from the GBB, and store it onto the given workbuf. + * + * @param ctx Vboot context. + * @param keyp Returns a pointer to the key. The caller may discard + * workbuf state if it wants to free the key. + * @param size If pointer is non-NULL, returns the total size of key, + * including data. + * @param wb Workbuf for data storage. + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2_gbb_read_recovery_key(struct vb2_context *ctx, + struct vb2_packed_key **keyp, + uint32_t *size, struct vb2_workbuf *wb); + +#endif /* VBOOT_REFERENCE_2GBB_H_ */ diff --git a/firmware/2lib/include/2gbb_flags.h b/firmware/2lib/include/2gbb_flags.h new file mode 100644 index 0000000..0eff7f7 --- /dev/null +++ b/firmware/2lib/include/2gbb_flags.h @@ -0,0 +1,96 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Flags for vb2_gbb_header.flags. + * + * Should be imported externally via vb2_api.h. + */ + +#ifndef VBOOT_REFERENCE_2GBB_FLAGS_H_ +#define VBOOT_REFERENCE_2GBB_FLAGS_H_ + +enum vb2_gbb_flag { + /* + * Reduce the dev screen delay to 2 sec from 30 sec to speed up + * factory. + */ + VB2_GBB_FLAG_DEV_SCREEN_SHORT_DELAY = 1 << 0, + + /* + * BIOS should load option ROMs from arbitrary PCI devices. We'll never + * enable this ourselves because it executes non-verified code, but if + * a customer wants to void their warranty and set this flag in the + * read-only flash, they should be able to do so. + * + * (TODO: Currently not supported. Mark as deprecated/unused?) + */ + VB2_GBB_FLAG_LOAD_OPTION_ROMS = 1 << 1, + + /* + * The factory flow may need the BIOS to boot a non-ChromeOS kernel if + * the dev-switch is on. This flag allows that. + * + * (TODO: Currently not supported. Mark as deprecated/unused?) + */ + VB2_GBB_FLAG_ENABLE_ALTERNATE_OS = 1 << 2, + + /* + * Force dev switch on, regardless of physical/keyboard dev switch + * position. + */ + VB2_GBB_FLAG_FORCE_DEV_SWITCH_ON = 1 << 3, + + /* + * Allow booting from external disk in dev mode even if + * dev_boot_usb=0. + */ + VB2_GBB_FLAG_FORCE_DEV_BOOT_USB = 1 << 4, + + /* Disable firmware rollback protection. */ + VB2_GBB_FLAG_DISABLE_FW_ROLLBACK_CHECK = 1 << 5, + + /* Allow Enter key to trigger dev->tonorm screen transition */ + VB2_GBB_FLAG_ENTER_TRIGGERS_TONORM = 1 << 6, + + /* Allow booting Legacy OSes in dev mode even if dev_boot_altfw=0. */ + VB2_GBB_FLAG_FORCE_DEV_BOOT_ALTFW = 1 << 7, + + /* + * Currently running FAFT tests. May be used as a hint to disable + * other debug features which may interfere with tests. However, this + * should never be used to modify Chrome OS behaviour on specific + * devices with the goal of passing a test. See chromium:965914 for + * more information. + */ + VB2_GBB_FLAG_RUNNING_FAFT = 1 << 8, + + /* Disable EC software sync */ + VB2_GBB_FLAG_DISABLE_EC_SOFTWARE_SYNC = 1 << 9, + + /* Default to booting legacy OS when dev screen times out */ + VB2_GBB_FLAG_DEFAULT_DEV_BOOT_ALTFW = 1 << 10, + + /* Disable auxiliary firmware (auxfw) software sync */ + VB2_GBB_FLAG_DISABLE_AUXFW_SOFTWARE_SYNC = 1 << 11, + + /* Disable shutdown on lid closed */ + VB2_GBB_FLAG_DISABLE_LID_SHUTDOWN = 1 << 12, + + /* + * Allow full fastboot capability in firmware even if + * dev_boot_fastboot_full_cap=0. Deprecated; see chromium:995172. + */ + VB2_GBB_FLAG_DEPRECATED_FORCE_DEV_BOOT_FASTBOOT_FULL_CAP = 1 << 13, + + /* Recovery mode always assumes manual recovery, even if EC_IN_RW=1 */ + VB2_GBB_FLAG_FORCE_MANUAL_RECOVERY = 1 << 14, + + /* Disable FWMP */ + VB2_GBB_FLAG_DISABLE_FWMP = 1 << 15, + + /* Enable USB Device Controller */ + VB2_GBB_FLAG_ENABLE_UDC = 1 << 16, +}; + +#endif /* VBOOT_REFERENCE_2GBB_FLAGS_H_ */ diff --git a/firmware/2lib/include/2hmac.h b/firmware/2lib/include/2hmac.h new file mode 100644 index 0000000..2f8d8f7 --- /dev/null +++ b/firmware/2lib/include/2hmac.h @@ -0,0 +1,29 @@ +/* Copyright 2016 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_2HMAC_H_ +#define VBOOT_REFERENCE_2HMAC_H_ + +#include +#include "2crypto.h" + +/** + * Compute HMAC + * + * @param alg Hash algorithm ID + * @param key HMAC key + * @param key_size HMAC key size + * @param msg Message to compute HMAC for + * @param msg_size Message size + * @param mac Computed message authentication code + * @param mac_size Size of the buffer pointed by + * @return + */ +int hmac(enum vb2_hash_algorithm alg, + const void *key, uint32_t key_size, + const void *msg, uint32_t msg_size, + uint8_t *mac, uint32_t mac_size); + +#endif /* VBOOT_REFERENCE_2HMAC_H_ */ diff --git a/firmware/2lib/include/2id.h b/firmware/2lib/include/2id.h new file mode 100644 index 0000000..d1897fd --- /dev/null +++ b/firmware/2lib/include/2id.h @@ -0,0 +1,37 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Key ID, used to quickly match keys with signatures. There's not a standard + * fingerprint for private keys, so we're using the sha1sum of the public key + * in our keyb format. Pretty much anything would work as long as it's + * resistant to collisions and easy to compare. + */ + +#ifndef VBOOT_REFERENCE_2ID_H_ +#define VBOOT_REFERENCE_2ID_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#define VB2_ID_NUM_BYTES 20 + +struct vb2_id { + uint8_t raw[VB2_ID_NUM_BYTES]; +} __attribute__((packed)); + +#define EXPECTED_ID_SIZE VB2_ID_NUM_BYTES + +/* IDs to use for "keys" with sig_alg==VB2_SIG_NONE */ +#define VB2_ID_NONE_SHA1 {{0x00, 0x01,}} +#define VB2_ID_NONE_SHA256 {{0x02, 0x56,}} +#define VB2_ID_NONE_SHA512 {{0x05, 0x12,}} + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* VBOOT_REFERENCE_2ID_H_ */ diff --git a/firmware/2lib/include/2kernel.h b/firmware/2lib/include/2kernel.h new file mode 100644 index 0000000..bed1a01 --- /dev/null +++ b/firmware/2lib/include/2kernel.h @@ -0,0 +1,21 @@ +/* Copyright 2020 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Kernel selection, loading, verification, and booting. + */ + +#ifndef VBOOT_REFERENCE_2KERNEL_H_ +#define VBOOT_REFERENCE_2KERNEL_H_ + +#include "2common.h" + +/** + * Handle a normal boot. + * + * @param ctx Vboot context. + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2_normal_boot(struct vb2_context *ctx); + +#endif /* VBOOT_REFERENCE_2KERNEL_H_ */ diff --git a/firmware/2lib/include/2misc.h b/firmware/2lib/include/2misc.h new file mode 100644 index 0000000..3d29287 --- /dev/null +++ b/firmware/2lib/include/2misc.h @@ -0,0 +1,209 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Misc functions which need access to vb2_context but are not public APIs + */ + +#ifndef VBOOT_REFERENCE_2MISC_H_ +#define VBOOT_REFERENCE_2MISC_H_ + +#include "2api.h" +#include "2struct.h" + +struct vb2_gbb_header; +struct vb2_workbuf; + +#define vb2_container_of(ptr, type, member) ({ \ + const typeof(((type *)0)->member) *__mptr = (ptr); \ + (type *)((uint8_t *)__mptr - offsetof(type, member) );}) \ + +/** + * Get the shared data pointer from the vboot context + * + * @param ctx Vboot context + * @return The shared data pointer. + */ +static inline struct vb2_shared_data *vb2_get_sd(struct vb2_context *ctx) +{ + return vb2_container_of(ctx, struct vb2_shared_data, ctx); +} + +/** + * Get the GBB header pointer from a vboot context's shared data + * + * @param ctx Vboot context + * @return The GBB header pointer. + */ +struct vb2_gbb_header *vb2_get_gbb(struct vb2_context *ctx); + +/** + * Validate gbb signature (the magic number) + * + * @param sig Pointer to the signature bytes to validate + * @return VB2_SUCCESS if valid or non-zero if error. + */ +vb2_error_t vb2_validate_gbb_signature(uint8_t *sig); + +/** + * Initialize a work buffer from the vboot context. + * + * This sets the work buffer to the unused portion of the context work buffer. + * + * @param ctx Vboot context + * @param wb Work buffer to initialize + */ +void vb2_workbuf_from_ctx(struct vb2_context *ctx, struct vb2_workbuf *wb); + +/** + * Set the amount of work buffer used in the vboot context. + * + * This will round up to VB2_WORKBUF_ALIGN, so that the next allocation will + * be aligned as expected. + * + * @param ctx Vboot context + * @param used Number of bytes used + */ +void vb2_set_workbuf_used(struct vb2_context *ctx, uint32_t used); + +/** + * Read the GBB header. + * + * @param ctx Vboot context + * @param gbb Destination for header + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb2_read_gbb_header(struct vb2_context *ctx, + struct vb2_gbb_header *gbb); + +/** + * Check for recovery reasons we can determine early in the boot process. + * + * On exit, check ctx->flags for VB2_CONTEXT_RECOVERY_MODE; if present, jump to + * the recovery path instead of continuing with normal boot. This is the only + * direct path to recovery mode. All other errors later in the boot process + * should induce a reboot instead of jumping to recovery, so that recovery mode + * starts from a consistent firmware state. + * + * @param ctx Vboot context + */ +void vb2_check_recovery(struct vb2_context *ctx); + +/** + * Parse the GBB header. + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2_fw_init_gbb(struct vb2_context *ctx); + +/** + * Check developer switch position. + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2_check_dev_switch(struct vb2_context *ctx); + +/** + * Check if we need to clear the TPM owner. + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2_check_tpm_clear(struct vb2_context *ctx); + +/** + * Decide which firmware slot to try this boot. + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2_select_fw_slot(struct vb2_context *ctx); + +/** + * Verify the firmware keyblock using the root key. + * + * After this call, the data key is stored in the work buffer. + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2_load_fw_keyblock(struct vb2_context *ctx); + +/** + * Verify the firmware preamble using the data subkey from the keyblock. + * + * After this call, the preamble is stored in the work buffer. + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2_load_fw_preamble(struct vb2_context *ctx); + +/** + * Verify the kernel keyblock using the previously-loaded kernel key. + * + * After this call, the data key is stored in the work buffer. + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2_load_kernel_keyblock(struct vb2_context *ctx); + +/** + * Verify the kernel preamble using the data subkey from the keyblock. + * + * After this call, the preamble is stored in the work buffer. + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or error code on error. + */ +vb2_error_t vb2_load_kernel_preamble(struct vb2_context *ctx); + +/** + * Clear recovery request appropriately. + * + * To avoid the recovery request "sticking" and the user being in a permanent + * recovery loop, the recovery request must be cleared and committed to nvdata. + * Note that this should be done at some point after we are certain the system + * does not require any reboots for non-vboot-related reasons (e.g. FSP + * initialization), and before triggering a reboot to exit a transient recovery + * mode (e.g. memory retraining request). + * + * In BROKEN cases, the recovery reason will be stowed away as subcode, to be + * retrieved after the user reboots in manual recovery. In manual recovery, + * subcode will be left alone to keep available for subsequent manual recovery + * requests, or for accessing from userspace on the next boot. + * + * This function modifies nvdata in vb2_context, but the caller is still + * expected to call vb2_commit_data. + * + * @param ctx Vboot context + */ +void vb2_clear_recovery(struct vb2_context *ctx); + +/** + * Fill VB2_CONTEXT_DEV_BOOT_ALLOWED, VB2_CONTEXT_DEV_BOOT_EXTERNAL_ALLOWED and + * VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED flags in ctx->flags. + * + * @param ctx Vboot context. + */ +void vb2_fill_dev_boot_flags(struct vb2_context *ctx); + +/** + * Determine and set a mutually exclusive boot mode in the vboot context. + * + * Determine the most relevant boot mode for current boot, store into + * ctx->boot_mode, which is a ctx field introduced in struct version 3.1. + * + * This function should be only called by vb2api_fw_phase1. + * The vb2api_fw_phase1 should call this function at its end phase once and all + * the following steps should directly access ctx->boot_mode to retrieve the + * most relevant boot mode. + * + * @param ctx Vboot context. + */ +void vb2_set_boot_mode(struct vb2_context *ctx); + +#endif /* VBOOT_REFERENCE_2MISC_H_ */ diff --git a/firmware/2lib/include/2nvstorage.h b/firmware/2lib/include/2nvstorage.h new file mode 100644 index 0000000..fe75823 --- /dev/null +++ b/firmware/2lib/include/2nvstorage.h @@ -0,0 +1,222 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Non-volatile storage routines + */ + +#ifndef VBOOT_REFERENCE_2NVSTORAGE_H_ +#define VBOOT_REFERENCE_2NVSTORAGE_H_ + +struct vb2_context; + +enum vb2_nv_param { + /* + * Parameter values have been reset to defaults (flag for firmware). + * 0=clear; 1=set. + */ + VB2_NV_FIRMWARE_SETTINGS_RESET = 0, + /* + * Parameter values have been reset to defaults (flag for kernel). + * 0=clear; 1=set. + */ + VB2_NV_KERNEL_SETTINGS_RESET, + /* Request debug reset on next S3->S0 transition. 0=clear; 1=set. */ + VB2_NV_DEBUG_RESET_MODE, + /* Firmware slot to try next. 0=A, 1=B */ + VB2_NV_TRY_NEXT, + /* + * Number of times to try booting RW firmware slot B before slot A. + * Valid range: 0-15. + * + * For VB2, number of times to try booting the slot indicated by + * VB2_NV_TRY_NEXT. On a 1->0 transition of try count, VB2_NV_TRY_NEXT + * will be set to the other slot. + */ + VB2_NV_TRY_COUNT, + /* + * Request recovery mode on next boot; see 2recovery_reason.h for + * currently defined reason codes. 8-bit value. + */ + VB2_NV_RECOVERY_REQUEST, + /* + * Localization index for screen bitmaps displayed by firmware. + * 8-bit value. + */ + VB2_NV_LOCALIZATION_INDEX, + /* Field reserved for kernel/user-mode use; 16-bit value. */ + VB2_NV_KERNEL_FIELD, + /* Allow booting from external disk in developer mode. 0=no, 1=yes. */ + VB2_NV_DEV_BOOT_EXTERNAL, + /* Allow booting of legacy OSes in developer mode. 0=no, 1=yes. */ + VB2_NV_DEV_BOOT_ALTFW, + /* Only boot Google-signed images in developer mode. 0=no, 1=yes. */ + VB2_NV_DEV_BOOT_SIGNED_ONLY, + /* + * Allow full fastboot capability in firmware in developer mode. + * 0=no, 1=yes. Deprecated; see chromium:995172. + */ + VB2_NV_DEPRECATED_DEV_BOOT_FASTBOOT_FULL_CAP, + /* Set default boot mode (see vb2_dev_default_boot_target) */ + VB2_NV_DEV_DEFAULT_BOOT, + /* Enable USB Device Controller */ + VB2_NV_DEV_ENABLE_UDC, + /* + * Set by userspace to request that RO firmware disable dev-mode on the + * next boot. This is likely only possible if the dev-switch is + * virtual. + */ + VB2_NV_DISABLE_DEV_REQUEST, + /* Set and cleared by vboot to request that display be initialized + at boot time, so that BIOS screens can be displayed. 0=no, 1=yes. */ + VB2_NV_DISPLAY_REQUEST, + /* Request that the firmware clear the TPM owner on the next boot. */ + VB2_NV_CLEAR_TPM_OWNER_REQUEST, + /* Flag that TPM owner was cleared on request. */ + VB2_NV_CLEAR_TPM_OWNER_DONE, + /* TPM requested a reboot already. */ + VB2_NV_TPM_REQUESTED_REBOOT, + /* More details on recovery reason */ + VB2_NV_RECOVERY_SUBCODE, + /* Request that NVRAM be backed up at next boot if possible. */ + VB2_NV_BACKUP_NVRAM_REQUEST, + /* Firmware slot tried this boot (0=A, 1=B) */ + VB2_NV_FW_TRIED, + /* Result of trying that firmware (see vb2_fw_result) */ + VB2_NV_FW_RESULT, + /* Firmware slot tried previous boot (0=A, 1=B) */ + VB2_NV_FW_PREV_TRIED, + /* Result of trying that firmware (see vb2_fw_result) */ + VB2_NV_FW_PREV_RESULT, + /* Request wipeout of the device by the app. */ + VB2_NV_REQ_WIPEOUT, + + /* Fastboot: Unlock in firmware, 0=disabled, 1=enabled. + Deprecated; see chromium:995172. */ + VB2_NV_DEPRECATED_FASTBOOT_UNLOCK_IN_FW, + /* Boot system when AC detected (0=no, 1=yes). */ + VB2_NV_BOOT_ON_AC_DETECT, + /* + * Try to update the EC-RO image after updating the EC-RW image + * (0=no, 1=yes). + */ + VB2_NV_TRY_RO_SYNC, + /* Cut off battery and shutdown on next boot. */ + VB2_NV_BATTERY_CUTOFF_REQUEST, + /* Maximum kernel version to roll forward to */ + VB2_NV_KERNEL_MAX_ROLLFORWARD, + + /*** Fields only available in NV storage V2 ***/ + + /* + * Maximum firmware version to roll forward to. Returns + * VB2_MAX_ROLLFORWARD_MAX_V1_DEFAULT for V1. + */ + VB2_NV_FW_MAX_ROLLFORWARD, + /* Deprecated: Enable AltOS Mode on next boot. */ + VB2_NV_DEPRECATED_ENABLE_ALT_OS_REQUEST, + /* Deprecated: Disable AltOS Mode on next boot. */ + VB2_NV_DEPRECATED_DISABLE_ALT_OS_REQUEST, + /* + * Add a short delay after EC software sync for any interaction + * with EC-RW (persistent). Formerly used for programmatically + * testing Alt OS booting. + */ + VB2_NV_POST_EC_SYNC_DELAY, + /* Request booting of diagnostic rom. 0=no, 1=yes. */ + VB2_NV_DIAG_REQUEST, + /* Priority of miniOS partition to load: 0=MINIOS-A, 1=MINIOS-B. */ + VB2_NV_MINIOS_PRIORITY, +}; + +/* Firmware result codes for VB2_NV_FW_RESULT and VB2_NV_FW_PREV_RESULT */ +enum vb2_fw_result { + /* Unknown */ + VB2_FW_RESULT_UNKNOWN = 0, + + /* Trying a new slot, but haven't reached success/failure */ + VB2_FW_RESULT_TRYING = 1, + + /* Successfully booted to the OS */ + VB2_FW_RESULT_SUCCESS = 2, + + /* Known failure */ + VB2_FW_RESULT_FAILURE = 3, +}; + +/* + * Default value for VB2_NV_FIRMWARE_MAX_ROLLFORWARD on V1. This preserves the + * existing behavior that V1 systems will always roll forward the firmware + * version when possible. + */ +#define VB2_FW_MAX_ROLLFORWARD_V1_DEFAULT 0xfffffffe + +/** + * Return the size of the non-volatile storage data in the context. + * + * This may be called before vb2_context_init(), but you must set + * VB2_CONTEXT_NVDATA_V2 if you support V2 record size. + * + * @param ctx Context pointer + * @return Size of the non-volatile storage data in bytes. + */ +int vb2_nv_get_size(const struct vb2_context *ctx); + +/** + * Check the CRC of the non-volatile storage context. + * + * Use this if reading from non-volatile storage may be flaky, and you want to + * retry reading it several times. + * + * This may be called before vb2_context_init(). + * + * @param ctx Context pointer + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb2_nv_check_crc(const struct vb2_context *ctx); + +/** + * Initialize the non-volatile storage context and verify its CRC. + * + * This may be called before vb2_context_init(), as long as: + * + * 1) The ctx structure has been cleared to 0. + * 2) Existing non-volatile data, if any, has been stored to ctx->nvdata[]. + * + * This is to support using the non-volatile storage functions to request + * recovery if there is an error allocating the workbuf for the context. It + * also allows host-side code to use this library without setting up a bunch of + * extra context. + * + * @param ctx Context pointer + */ +void vb2_nv_init(struct vb2_context *ctx); + +/** + * Read a non-volatile value. + * + * Valid only after calling vb2_nv_init(). + * + * @param ctx Context pointer + * @param param Parameter to read + * @return The value of the parameter. If you somehow force an invalid + * parameter number, returns 0. + */ +uint32_t vb2_nv_get(struct vb2_context *ctx, enum vb2_nv_param param); + +/** + * Write a non-volatile value. + * + * Ignores writes to unknown params. Valid only after calling vb2_nv_init(). + * If this changes ctx->nvdata[], it will set VB2_CONTEXT_NVDATA_CHANGED in + * ctx->flags. + * + * @param ctx Context pointer + * @param param Parameter to write + * @param value New value + */ +void vb2_nv_set(struct vb2_context *ctx, + enum vb2_nv_param param, + uint32_t value); + +#endif /* VBOOT_REFERENCE_2NVSTORAGE_H_ */ diff --git a/firmware/2lib/include/2nvstorage_fields.h b/firmware/2lib/include/2nvstorage_fields.h new file mode 100644 index 0000000..449b8fd --- /dev/null +++ b/firmware/2lib/include/2nvstorage_fields.h @@ -0,0 +1,113 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Non-volatile storage bitfields + */ + +#ifndef VBOOT_REFERENCE_2NVSTORAGE_FIELDS_H_ +#define VBOOT_REFERENCE_2NVSTORAGE_FIELDS_H_ + +/* + * Constants for NV storage. We use this rather than structs and bitfields so + * the data format is consistent across platforms and compilers. Total NV + * storage size is: + * + * Version 1: VB2_NVDATA_SIZE = 16 bytes + * Version 2: VB2_NVDATA_SIZE_V2 = 64 bytes + * + * Unused bits/bytes must be set to 0. + */ + +enum vb2_nv_offset { + /*** The following fields are present in all versions ***/ + VB2_NV_OFFS_HEADER = 0, + VB2_NV_OFFS_BOOT = 1, + VB2_NV_OFFS_RECOVERY = 2, + VB2_NV_OFFS_LOCALIZATION = 3, + VB2_NV_OFFS_DEV = 4, + VB2_NV_OFFS_TPM = 5, + VB2_NV_OFFS_RECOVERY_SUBCODE = 6, + VB2_NV_OFFS_BOOT2 = 7, + VB2_NV_OFFS_MISC = 8, + VB2_NV_OFFS_KERNEL_MAX_ROLLFORWARD1 = 9, /* bits 0-7 of 32 */ + VB2_NV_OFFS_KERNEL_MAX_ROLLFORWARD2 = 10, /* bits 8-15 of 32 */ + VB2_NV_OFFS_KERNEL1 = 11, /* bits 0-7 of 16 */ + VB2_NV_OFFS_KERNEL2 = 12, /* bits 8-15 of 16 */ + VB2_NV_OFFS_KERNEL_MAX_ROLLFORWARD3 = 13, /* bits 16-23 of 32 */ + VB2_NV_OFFS_KERNEL_MAX_ROLLFORWARD4 = 14, /* bits 24-31 of 32 */ + + /* + * CRC_V1 must be last field in V1. This byte can be reused in later + * versions. + */ + VB2_NV_OFFS_CRC_V1 = 15, + + /* The following fields are only present in V2+ */ + VB2_NV_OFFS_RESERVED_V2 = 15, /* Was CRC in V1 (unused = 0xff) */ + VB2_NV_OFFS_FW_MAX_ROLLFORWARD1 = 16, /* bits 0-7 of 32 */ + VB2_NV_OFFS_FW_MAX_ROLLFORWARD2 = 17, /* bits 8-15 of 32 */ + VB2_NV_OFFS_FW_MAX_ROLLFORWARD3 = 18, /* bits 16-23 of 32 */ + VB2_NV_OFFS_FW_MAX_ROLLFORWARD4 = 19, /* bits 24-31 of 32 */ + + /* CRC must be last field */ + VB2_NV_OFFS_CRC_V2 = 63, +}; + +/* Fields in VB2_NV_OFFS_HEADER (unused = 0x04) */ +#define VB2_NV_HEADER_WIPEOUT 0x08 +#define VB2_NV_HEADER_KERNEL_SETTINGS_RESET 0x10 +#define VB2_NV_HEADER_FW_SETTINGS_RESET 0x20 +#define VB2_NV_HEADER_SIGNATURE_MASK 0xc3 + +/* + * Valid signature values. Note that V1 readers only looked at mask 0xc0, and + * expect it to have value 0x40. Versions != V1 must have the top two bits != + * 0x40 so old readers will reject the data. Using all 1-bits or all 0-bits is + * also discouraged, because that is indistinguishable from all-erased data on + * some platforms. + */ +/* Version 1 = 16-byte record */ +#define VB2_NV_HEADER_SIGNATURE_V1 0x40 +/* Version 2 = 64-byte record */ +#define VB2_NV_HEADER_SIGNATURE_V2 0x03 + +/* Fields in VB2_NV_OFFS_BOOT */ +#define VB2_NV_BOOT_TRY_COUNT_MASK 0x0f +#define VB2_NV_BOOT_BACKUP_NVRAM 0x10 +#define VB2_NV_BOOT_DISPLAY_REQUEST 0x20 +#define VB2_NV_BOOT_DISABLE_DEV 0x40 +#define VB2_NV_BOOT_DEBUG_RESET 0x80 + +/* Fields in VB2_NV_OFFS_BOOT2 */ +#define VB2_NV_BOOT2_RESULT_MASK 0x03 +#define VB2_NV_BOOT2_TRIED 0x04 +#define VB2_NV_BOOT2_TRY_NEXT 0x08 +#define VB2_NV_BOOT2_PREV_RESULT_MASK 0x30 +#define VB2_NV_BOOT2_PREV_RESULT_SHIFT 4 /* Number of bits to shift result */ +#define VB2_NV_BOOT2_PREV_TRIED 0x40 +#define VB2_NV_BOOT2_REQ_DIAG 0x80 + +/* Fields in VB2_NV_OFFS_DEV (unused = 0x80) */ +#define VB2_NV_DEV_FLAG_EXTERNAL 0x01 +#define VB2_NV_DEV_FLAG_SIGNED_ONLY 0x02 +#define VB2_NV_DEV_FLAG_LEGACY 0x04 +#define VB2_NV_DEV_FLAG_DEPRECATED_FASTBOOT_FULL_CAP 0x08 +#define VB2_NV_DEV_FLAG_DEFAULT_BOOT 0x30 +#define VB2_NV_DEV_DEFAULT_BOOT_SHIFT 4 /* Number of bits to shift */ +#define VB2_NV_DEV_FLAG_UDC 0x40 + +/* Fields in VB2_NV_OFFS_TPM (unused = 0xf8) */ +#define VB2_NV_TPM_CLEAR_OWNER_REQUEST 0x01 +#define VB2_NV_TPM_CLEAR_OWNER_DONE 0x02 +#define VB2_NV_TPM_REBOOTED 0x04 + +/* Fields in VB2_NV_OFFS_MISC (unused = 0xa0) */ +#define VB2_NV_MISC_DEPRECATED_UNLOCK_FASTBOOT 0x01 +#define VB2_NV_MISC_BOOT_ON_AC_DETECT 0x02 +#define VB2_NV_MISC_TRY_RO_SYNC 0x04 +#define VB2_NV_MISC_BATTERY_CUTOFF 0x08 +#define VB2_NV_MISC_MINIOS_PRIORITY 0x10 +#define VB2_NV_MISC_POST_EC_SYNC_DELAY 0x40 + +#endif /* VBOOT_REFERENCE_2NVSTORAGE_FIELDS_H_ */ diff --git a/firmware/2lib/include/2packed_key.h b/firmware/2lib/include/2packed_key.h new file mode 100644 index 0000000..09c7355 --- /dev/null +++ b/firmware/2lib/include/2packed_key.h @@ -0,0 +1,39 @@ +/* Copyright 2021 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Functions related to unpacking keys and key buffers. + */ + +#ifndef VBOOT_REFERENCE_2PACKED_KEY_H_ +#define VBOOT_REFERENCE_2PACKED_KEY_H_ + +/** + * Unpack a vboot1-format key buffer for use in verification + * + * The elements of the unpacked key will point into the source buffer, so don't + * free the source buffer until you're done with the key. + * + * @param key Destintion for unpacked key + * @param buf Source buffer containing packed key + * @param size Size of buffer in bytes + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb2_unpack_key_buffer(struct vb2_public_key *key, + const uint8_t *buf, uint32_t size); + +/** + * Unpack a vboot1-format key for use in verification + * + * The elements of the unpacked key will point into the source packed key, so + * don't free the source until you're done with the public key. + * + * @param key Destintion for unpacked key + * @param packed_key Source packed key + * @param size Size of buffer in bytes + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb2_unpack_key(struct vb2_public_key *key, + const struct vb2_packed_key *packed_key); + +#endif /* VBOOT_REFERENCE_2PACKED_KEY_H_ */ diff --git a/firmware/2lib/include/2recovery_reasons.h b/firmware/2lib/include/2recovery_reasons.h new file mode 100644 index 0000000..30dbd2e --- /dev/null +++ b/firmware/2lib/include/2recovery_reasons.h @@ -0,0 +1,321 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Recovery reasons. + */ + +#ifndef VBOOT_REFERENCE_2RECOVERY_REASONS_H_ +#define VBOOT_REFERENCE_2RECOVERY_REASONS_H_ + +#include "2sysincludes.h" + +/** + * Return a description of the recovery reason code. + * + * @param recovery reason code + * @return A string literal with English description of the recovery reason + */ +const char *vb2_get_recovery_reason_string(uint8_t code); + +/* Recovery reason codes */ +enum vb2_nv_recovery { + + /**********************************************************************/ + /**** Uncategorized errors ********************************************/ + + /* Recovery not requested. */ + VB2_RECOVERY_NOT_REQUESTED = 0x00, + + /* + * Recovery requested from legacy utility. (Prior to the NV storage + * spec, recovery mode was a single bitfield; this value is reserved so + * that scripts which wrote 1 to the recovery field are distinguishable + * from scripts whch use the recovery reasons listed here. + */ + VB2_RECOVERY_LEGACY = 0x01, + + /* User manually requested recovery via recovery button */ + VB2_RECOVERY_RO_MANUAL = 0x02, + + + + /**********************************************************************/ + /**** Firmware verification (RO) errors (and some EC stuff???) ********/ + + /* Unspecified RW verification error (when none of 0x10-0x1f fit) */ + VB2_RECOVERY_RO_INVALID_RW = 0x03, + + /* S3 resume failed (deprecated) */ + VB2_RECOVERY_DEPRECATED_RO_S3_RESUME = 0x04, + + /* TPM error in read-only firmware (deprecated, see 0x54+) */ + VB2_RECOVERY_DEPRECATED_RO_TPM_ERROR = 0x05, + + /* Shared data error in read-only firmware */ + VB2_RECOVERY_RO_SHARED_DATA = 0x06, + + /* Test error from S3Resume() (deprecated) */ + VB2_RECOVERY_DEPRECATED_RO_TEST_S3 = 0x07, + + /* Test error from LoadFirmwareSetup() (deprecated) */ + VB2_RECOVERY_DEPRECATED_RO_TEST_LFS = 0x08, + + /* Test error from LoadFirmware() (deprecated) */ + VB2_RECOVERY_DEPRECATED_RO_TEST_LF = 0x09, + + /* + * RW firmware failed signature check (neither RW firmware slot was + * valid). Recovery reason is VB2_RECOVERY_DEPRECATED_RW_NOT_DONE + + * the check value for the slot which came closest to validating; see + * VBSD_LF_CHECK_* in vboot_struct.h (deprecated). + */ + VB2_RECOVERY_DEPRECATED_RW_NOT_DONE = 0x10, + + /* Latest tried RW firmware developer flag mismatch */ + VB2_RECOVERY_DEPRECATED_RW_DEV_FLAG_MISMATCH = 0x11, + + /* Latest tried RW firmware recovery flag mismatch */ + VB2_RECOVERY_DEPRECATED_RW_REC_FLAG_MISMATCH = 0x12, + + /* Latest tried RW firmware keyblock verification failed */ + VB2_RECOVERY_FW_KEYBLOCK = 0x13, + + /* Latest tried RW firmware key version too old */ + VB2_RECOVERY_FW_KEY_ROLLBACK = 0x14, + + /* Latest tried RW firmware unable to parse data key */ + VB2_RECOVERY_DEPRECATED_RW_DATA_KEY_PARSE = 0x15, + + /* Latest tried RW firmware preamble verification failed */ + VB2_RECOVERY_FW_PREAMBLE = 0x16, + + /* Latest tried RW firmware version too old */ + VB2_RECOVERY_FW_ROLLBACK = 0x17, + + /* Latest tried RW firmware header valid */ + VB2_RECOVERY_DEPRECATED_FW_HEADER_VALID = 0x18, + + /* Latest tried RW firmware unable to get firmware body */ + VB2_RECOVERY_DEPRECATED_FW_GET_FW_BODY = 0x19, + + /* Latest tried RW firmware hash wrong size */ + VB2_RECOVERY_DEPRECATED_FW_HASH_WRONG_SIZE = 0x1a, + + /* Latest tried RW firmware body verification failed */ + VB2_RECOVERY_FW_BODY = 0x1b, + + /* Latest tried RW firmware valid */ + VB2_RECOVERY_DEPRECATED_FW_VALID = 0x1c, + + /* Latest tried RW firmware RO normal path not supported */ + VB2_RECOVERY_DEPRECATED_FW_NO_RO_NORMAL = 0x1d, + + /* + * Firmware boot failure outside of verified boot (RAM init, missing + * SSD, etc.). + */ + VB2_RECOVERY_RO_FIRMWARE = 0x20, + + /* + * Recovery mode TPM initialization requires a system reboot. The + * system was already in recovery mode for some other reason when this + * happened. + */ + VB2_RECOVERY_RO_TPM_REBOOT = 0x21, + + /* EC software sync - other error */ + VB2_RECOVERY_EC_SOFTWARE_SYNC = 0x22, + + /* EC software sync - unable to determine active EC image */ + VB2_RECOVERY_EC_UNKNOWN_IMAGE = 0x23, + + /* EC software sync - error obtaining EC image hash (deprecated) */ + VB2_RECOVERY_DEPRECATED_EC_HASH = 0x24, + + /* EC software sync - error obtaining expected EC image (deprecated) */ + VB2_RECOVERY_DEPRECATED_EC_EXPECTED_IMAGE = 0x25, + + /* EC software sync - error updating EC */ + VB2_RECOVERY_EC_UPDATE = 0x26, + + /* EC software sync - unable to jump to EC-RW */ + VB2_RECOVERY_EC_JUMP_RW = 0x27, + + /* EC software sync - unable to protect / unprotect EC-RW */ + VB2_RECOVERY_EC_PROTECT = 0x28, + + /* EC software sync - error obtaining expected EC hash */ + VB2_RECOVERY_EC_EXPECTED_HASH = 0x29, + + /* EC software sync - expected EC image doesn't match hash (deprc.) */ + VB2_RECOVERY_DEPRECATED_EC_HASH_MISMATCH = 0x2a, + + /* Firmware secure data initialization error */ + VB2_RECOVERY_SECDATA_FIRMWARE_INIT = 0x2b, + + /* GBB header is bad */ + VB2_RECOVERY_GBB_HEADER = 0x2c, + + /* Unable to clear TPM owner */ + VB2_RECOVERY_TPM_CLEAR_OWNER = 0x2d, + + /* Error determining/updating virtual dev switch */ + VB2_RECOVERY_DEV_SWITCH = 0x2e, + + /* Error determining firmware slot */ + VB2_RECOVERY_FW_SLOT = 0x2f, + + /* Error updating auxiliary firmware */ + VB2_RECOVERY_AUXFW_UPDATE = 0x30, + + /* + * Intel CSE Lite SKU firmware failure; see subcodes defined in coreboot for specific + * reason. + */ + VB2_RECOVERY_INTEL_CSE_LITE_SKU = 0x31, + + /* Unspecified/unknown error in read-only firmware */ + VB2_RECOVERY_RO_UNSPECIFIED = 0x3f, + + + + /**********************************************************************/ + /**** Kernel verification (RW) errors *********************************/ + + /* + * User manually requested recovery by pressing a key at developer + * warning screen (deprecated) + */ + VB2_RECOVERY_DEPRECATED_RW_DEV_SCREEN = 0x41, + + /* No OS kernel detected (deprecated, now 0x5b) */ + VB2_RECOVERY_DEPRECATED_RW_NO_OS = 0x42, + + /* OS kernel failed signature check. Since the kernel corrupts itself + (DMVERROR) on a verity failure, may also indicate corrupt rootfs. */ + VB2_RECOVERY_RW_INVALID_OS = 0x43, + + /* TPM error in rewritable firmware (deprecated, see 0x54+) */ + VB2_RECOVERY_DEPRECATED_RW_TPM_ERROR = 0x44, + + /* RW firmware in dev mode, but dev switch is off (deprecated) */ + VB2_RECOVERY_DEPRECATED_RW_DEV_MISMATCH = 0x45, + + /* Shared data error in rewritable firmware */ + VB2_RECOVERY_RW_SHARED_DATA = 0x46, + + /* Test error from LoadKernel() (deprecated) */ + VB2_RECOVERY_DEPRECATED_RW_TEST_LK = 0x47, + + /* No bootable disk found (deprecated, see 0x5a) */ + VB2_RECOVERY_DEPRECATED_RW_NO_DISK = 0x48, + + /* Rebooting did not correct TPM_E_FAIL or TPM_E_FAILEDSELFTEST */ + VB2_RECOVERY_TPM_E_FAIL = 0x49, + + /* TPM setup error in read-only firmware */ + VB2_RECOVERY_RO_TPM_S_ERROR = 0x50, + + /* TPM write error in read-only firmware */ + VB2_RECOVERY_RO_TPM_W_ERROR = 0x51, + + /* TPM lock error in read-only firmware */ + VB2_RECOVERY_RO_TPM_L_ERROR = 0x52, + + /* TPM update error in read-only firmware */ + VB2_RECOVERY_RO_TPM_U_ERROR = 0x53, + + /* TPM read error in rewritable firmware */ + VB2_RECOVERY_RW_TPM_R_ERROR = 0x54, + + /* TPM write error in rewritable firmware */ + VB2_RECOVERY_RW_TPM_W_ERROR = 0x55, + + /* TPM lock error in rewritable firmware */ + VB2_RECOVERY_RW_TPM_L_ERROR = 0x56, + + /* EC software sync unable to get EC image hash */ + VB2_RECOVERY_EC_HASH_FAILED = 0x57, + + /* EC software sync invalid image hash size */ + VB2_RECOVERY_EC_HASH_SIZE = 0x58, + + /* Unspecified error while trying to load kernel */ + VB2_RECOVERY_LK_UNSPECIFIED = 0x59, + + /* No bootable storage device in system */ + VB2_RECOVERY_RW_NO_DISK = 0x5a, + + /* No bootable kernel found on disk */ + VB2_RECOVERY_RW_NO_KERNEL = 0x5b, + + /* BCB related error in RW firmware (deprecated) */ + VB2_RECOVERY_DEPRECATED_RW_BCB_ERROR = 0x5c, + + /* Kernel secure data initialization error */ + VB2_RECOVERY_SECDATA_KERNEL_INIT = 0x5d, + + /* Fastboot mode requested in firmware (deprecated) */ + VB2_RECOVERY_DEPRECATED_FW_FASTBOOT = 0x5e, + + /* Recovery hash space lock error in RO firmware */ + VB2_RECOVERY_RO_TPM_REC_HASH_L_ERROR = 0x5f, + + /* Failed to disable the TPM [prior to running untrusted code] */ + VB2_RECOVERY_TPM_DISABLE_FAILED = 0x60, + + /* Verification of altfw payload failed (deprecated) */ + VB2_RECOVERY_ALTFW_HASH_MISMATCH = 0x61, + + /* FWMP secure data initialization error */ + VB2_RECOVERY_SECDATA_FWMP_INIT = 0x62, + + /* Failed to get boot mode from TPM/Cr50 */ + VB2_RECOVERY_CR50_BOOT_MODE = 0x63, + + /* Attempt to escape from NO_BOOT mode was detected */ + VB2_RECOVERY_ESCAPE_NO_BOOT = 0x64, + + /* Unspecified/unknown error in rewritable firmware */ + VB2_RECOVERY_RW_UNSPECIFIED = 0x7f, + + + + /**********************************************************************/ + /**** OS level (kernel) errors (deprecated) ***************************/ + + /* + * Note: we want to avoid having the kernel touch vboot NVRAM directly + * in the future, so this whole range is essentially deprecated until + * further notice. + */ + + /* DM-verity error (deprecated) */ + VB2_RECOVERY_DEPRECATED_KE_DM_VERITY = 0x81, + + /* Unspecified/unknown error in kernel (deprecated) */ + VB2_RECOVERY_DEPRECATED_KE_UNSPECIFIED = 0xbf, + + + + /**********************************************************************/ + /**** OS level (userspace) errors *************************************/ + + /* Recovery mode test from user-mode */ + VB2_RECOVERY_US_TEST = 0xc1, + + /* Recovery requested by user-mode via BCB (deprecated) */ + VB2_RECOVERY_DEPRECATED_BCB_USER_MODE = 0xc2, + + /* Fastboot mode requested by user-mode (deprecated) */ + VB2_RECOVERY_DEPRECATED_US_FASTBOOT = 0xc3, + + /* User requested recovery for training memory and rebooting. */ + VB2_RECOVERY_TRAIN_AND_REBOOT = 0xc4, + + /* Unspecified/unknown error in user-mode */ + VB2_RECOVERY_US_UNSPECIFIED = 0xff, +}; + +#endif /* VBOOT_REFERENCE_2RECOVERY_REASONS_H_ */ diff --git a/firmware/2lib/include/2return_codes.h b/firmware/2lib/include/2return_codes.h new file mode 100644 index 0000000..176c2c6 --- /dev/null +++ b/firmware/2lib/include/2return_codes.h @@ -0,0 +1,1035 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_2RETURN_CODES_H_ +#define VBOOT_REFERENCE_2RETURN_CODES_H_ + +#include "2sysincludes.h" + +/* + * Functions which return an error all return this type. This is a 32-bit + * value rather than an int so it's consistent across different architectures. + */ +typedef uint32_t vb2_error_t; + +/* + * Return codes from verified boot functions. + * + * Note that other values may be passed through from vb2ex_*() calls; see + * the comment for VB2_ERROR_EX below. + */ +enum vb2_return_code { + /* Success - no error */ + VB2_SUCCESS = 0, + + /********************************************************************** + * Requests to the caller that are not considered errors + */ + VB2_REQUEST = 0x1000, + + /* Calling firmware requested shutdown */ + VB2_REQUEST_SHUTDOWN = 0x1001, + + /* Calling firmware needs to perform a reboot */ + VB2_REQUEST_REBOOT = 0x1002, + + /* Need EC to reboot to read-only code to switch RW slot */ + VB2_REQUEST_REBOOT_EC_SWITCH_RW = 0x1003, + + /* Need EC to reboot to read-only code */ + VB2_REQUEST_REBOOT_EC_TO_RO = 0x1004, + + /* Continue in the UI loop. This is used in UI internal functions. */ + VB2_REQUEST_UI_CONTINUE = 0x1005, + + /* Break from the UI loop. This is used in UI internal functions. */ + VB2_REQUEST_UI_EXIT = 0x1006, + + /* End of VB2_REQUEST_* */ + VB2_REQUEST_END = 0x5000, + + /********************************************************************** + * All vboot2 error codes start at a large offset from zero, to reduce + * the risk of overlap with other error codes (TPM, etc.). + */ + VB2_ERROR_BASE = 0x10000000, + + /* Unknown / unspecified error */ + VB2_ERROR_UNKNOWN = VB2_ERROR_BASE + 1, + + /* Mock error for testing */ + VB2_ERROR_MOCK, + + /********************************************************************** + * SHA errors + */ + VB2_ERROR_SHA = VB2_ERROR_BASE + 0x010000, + + /* Bad algorithm in vb2_digest_init() */ + VB2_ERROR_SHA_INIT_ALGORITHM, + + /* Bad algorithm in vb2_digest_extend() */ + VB2_ERROR_SHA_EXTEND_ALGORITHM, + + /* Bad algorithm in vb2_digest_finalize() */ + VB2_ERROR_SHA_FINALIZE_ALGORITHM, + + /* Digest size buffer too small in vb2_digest_finalize() */ + VB2_ERROR_SHA_FINALIZE_DIGEST_SIZE, + + /* Hash mismatch in vb2_hash_verify() */ + VB2_ERROR_SHA_MISMATCH, + + /********************************************************************** + * RSA errors + */ + VB2_ERROR_RSA = VB2_ERROR_BASE + 0x020000, + + /* Padding mismatch in vb2_check_padding() */ + VB2_ERROR_RSA_PADDING, + + /* Bad algorithm in vb2_check_padding() */ + VB2_ERROR_RSA_PADDING_ALGORITHM, + + /* Null param passed to vb2_verify_digest() */ + VB2_ERROR_RSA_VERIFY_PARAM, + + /* Bad algorithm in vb2_verify_digest() */ + VB2_ERROR_RSA_VERIFY_ALGORITHM, + + /* Bad signature length in vb2_verify_digest() */ + VB2_ERROR_RSA_VERIFY_SIG_LEN, + + /* Work buffer too small in vb2_verify_digest() */ + VB2_ERROR_RSA_VERIFY_WORKBUF, + + /* Digest mismatch in vb2_verify_digest() */ + VB2_ERROR_RSA_VERIFY_DIGEST, + + /* Bad size calculation in vb2_check_padding() */ + VB2_ERROR_RSA_PADDING_SIZE, + + /********************************************************************** + * NV storage errors + */ + VB2_ERROR_NV = VB2_ERROR_BASE + 0x030000, + + /* Bad header in vb2_nv_check_crc() */ + VB2_ERROR_NV_HEADER, + + /* Bad CRC in vb2_nv_check_crc() */ + VB2_ERROR_NV_CRC, + + /* Read error in nvdata backend */ + VB2_ERROR_NV_READ, + + /* Write error in nvdata backend */ + VB2_ERROR_NV_WRITE, + + /********************************************************************** + * Secure data storage errors + */ + VB2_ERROR_SECDATA = VB2_ERROR_BASE + 0x040000, + + /* Bad CRC in vb2api_secdata_firmware_check() */ + VB2_ERROR_SECDATA_FIRMWARE_CRC, + + /* Bad struct version in vb2api_secdata_firmware_check() */ + VB2_ERROR_SECDATA_FIRMWARE_VERSION, + + /* Invalid param in vb2_secdata_firmware_get(); + Deprecated with chromium:972956. */ + VB2_ERROR_DEPRECATED_SECDATA_FIRMWARE_GET_PARAM, + + /* Invalid param in vb2_secdata_firmware_set(); + Deprecated with chromium:972956. */ + VB2_ERROR_DEPRECATED_SECDATA_FIRMWARE_SET_PARAM, + + /* Invalid flags passed to vb2_secdata_firmware_set(); + Deprecated with chromium:972956. */ + VB2_ERROR_DEPRECATED_SECDATA_FIRMWARE_SET_FLAGS, + + /* Called vb2_secdata_firmware_get() with uninitialized secdata; + Deprecated with chromium:972956. */ + VB2_ERROR_DEPRECATED_SECDATA_FIRMWARE_GET_UNINITIALIZED, + + /* Called vb2_secdata_firmware_set() with uninitialized secdata; + Deprecated with chromium:972956. */ + VB2_ERROR_DEPRECATED_SECDATA_FIRMWARE_SET_UNINITIALIZED, + + /* Bad CRC in vb2api_secdata_kernel_check() */ + VB2_ERROR_SECDATA_KERNEL_CRC, + + /* Bad struct version in vb2_secdata_kernel_init() */ + VB2_ERROR_SECDATA_KERNEL_VERSION, + + /* Bad uid in vb2_secdata_kernel_init() */ + VB2_ERROR_SECDATA_KERNEL_UID, + + /* Invalid param in vb2_secdata_kernel_get(); + Deprecated with chromium:972956. */ + VB2_ERROR_DEPRECATED_SECDATA_KERNEL_GET_PARAM, + + /* Invalid param in vb2_secdata_kernel_set(); + Deprecated with chromium:972956. */ + VB2_ERROR_DEPRECATED_SECDATA_KERNEL_SET_PARAM, + + /* Invalid flags passed to vb2_secdata_kernel_set(); + Deprecated with chromium:972956. */ + VB2_ERROR_DEPRECATED_SECDATA_KERNEL_SET_FLAGS, + + /* Called vb2_secdata_kernel_get() with uninitialized secdata_kernel; + Deprecated with chromium:972956. */ + VB2_ERROR_DEPRECATED_SECDATA_KERNEL_GET_UNINITIALIZED, + + /* Called vb2_secdata_kernel_set() with uninitialized secdata_kernel; + Deprecated with chromium:972956. */ + VB2_ERROR_DEPRECATED_SECDATA_KERNEL_SET_UNINITIALIZED, + + /* Bad size in vb2api_secdata_fwmp_check() */ + VB2_ERROR_SECDATA_FWMP_SIZE, + + /* Incomplete structure in vb2api_secdata_fwmp_check() */ + VB2_ERROR_SECDATA_FWMP_INCOMPLETE, + + /* Bad CRC in vb2api_secdata_fwmp_check() */ + VB2_ERROR_SECDATA_FWMP_CRC, + + /* Bad struct version in vb2_secdata_fwmp_check() */ + VB2_ERROR_SECDATA_FWMP_VERSION, + + /* Error reading secdata_firmware from storage backend */ + VB2_ERROR_SECDATA_FIRMWARE_READ, + + /* Error writing secdata_firmware to storage backend */ + VB2_ERROR_SECDATA_FIRMWARE_WRITE, + + /* Error locking secdata_firmware in storage backend */ + VB2_ERROR_SECDATA_FIRMWARE_LOCK, + + /* Error reading secdata_kernel from storage backend */ + VB2_ERROR_SECDATA_KERNEL_READ, + + /* Error writing secdata_kernel to storage backend */ + VB2_ERROR_SECDATA_KERNEL_WRITE, + + /* Error locking secdata_kernel in storage backend */ + VB2_ERROR_SECDATA_KERNEL_LOCK, + + /* Error reading secdata_fwmp from storage backend */ + VB2_ERROR_SECDATA_FWMP_READ, + + /* Bad buffer size to read vb2_secdata_kernel */ + VB2_ERROR_SECDATA_KERNEL_BUFFER_SIZE, + + /* Incomplete structure in vb2api_secdata_kernel_check() */ + VB2_ERROR_SECDATA_KERNEL_INCOMPLETE, + + /* Bad struct size in vb2_secdata_kernel */ + VB2_ERROR_SECDATA_KERNEL_STRUCT_SIZE, + + /********************************************************************** + * Common code errors + */ + VB2_ERROR_COMMON = VB2_ERROR_BASE + 0x050000, + + /* Buffer is smaller than alignment offset in vb2_align() */ + VB2_ERROR_ALIGN_BIGGER_THAN_SIZE, + + /* Buffer is smaller than request in vb2_align() */ + VB2_ERROR_ALIGN_SIZE, + + /* Parent wraps around in vb2_verify_member_inside() */ + VB2_ERROR_INSIDE_PARENT_WRAPS, + + /* Member wraps around in vb2_verify_member_inside() */ + VB2_ERROR_INSIDE_MEMBER_WRAPS, + + /* Member outside parent in vb2_verify_member_inside() */ + VB2_ERROR_INSIDE_MEMBER_OUTSIDE, + + /* Member data wraps around in vb2_verify_member_inside() */ + VB2_ERROR_INSIDE_DATA_WRAPS, + + /* Member data outside parent in vb2_verify_member_inside() */ + VB2_ERROR_INSIDE_DATA_OUTSIDE, + + /* Unsupported signature algorithm in vb2_unpack_key_buffer() */ + VB2_ERROR_UNPACK_KEY_SIG_ALGORITHM, /* 0x150008 */ + + /* Bad key size in vb2_unpack_key_buffer() */ + VB2_ERROR_UNPACK_KEY_SIZE, + + /* Bad key alignment in vb2_unpack_key_buffer() */ + VB2_ERROR_UNPACK_KEY_ALIGN, + + /* Bad key array size in vb2_unpack_key_buffer() */ + VB2_ERROR_UNPACK_KEY_ARRAY_SIZE, + + /* Bad algorithm in vb2_verify_data() */ + VB2_ERROR_VDATA_ALGORITHM, + + /* Incorrect signature size for algorithm in vb2_verify_data() */ + VB2_ERROR_VDATA_SIG_SIZE, + + /* Data smaller than length of signed data in vb2_verify_data() */ + VB2_ERROR_VDATA_NOT_ENOUGH_DATA, + + /* Not enough work buffer for digest in vb2_verify_data() */ + VB2_ERROR_VDATA_WORKBUF_DIGEST, + + /* Not enough work buffer for hash temp data in vb2_verify_data() */ + VB2_ERROR_VDATA_WORKBUF_HASHING, /* 0x150010 */ + + /* + * Bad digest size in vb2_verify_data() - probably because algorithm + * is bad. + */ + VB2_ERROR_VDATA_DIGEST_SIZE, + + /* Unsupported hash algorithm in vb2_unpack_key_buffer() */ + VB2_ERROR_UNPACK_KEY_HASH_ALGORITHM, + + /* Member data overlaps member header */ + VB2_ERROR_INSIDE_DATA_OVERLAP, + + /* Unsupported packed key struct version */ + VB2_ERROR_UNPACK_KEY_STRUCT_VERSION, + + /* + * Buffer too small for total, fixed size, or description reported in + * common header, or member data checked via + * vb21_verify_common_member(). + */ + VB2_ERROR_COMMON_TOTAL_SIZE, + VB2_ERROR_COMMON_FIXED_SIZE, + VB2_ERROR_COMMON_DESC_SIZE, + VB2_ERROR_COMMON_MEMBER_SIZE, /* 0x150018 */ + + /* + * Total, fixed, description, or member offset/size not a multiple of + * 32 bits. + */ + VB2_ERROR_COMMON_TOTAL_UNALIGNED, + VB2_ERROR_COMMON_FIXED_UNALIGNED, + VB2_ERROR_COMMON_DESC_UNALIGNED, + VB2_ERROR_COMMON_MEMBER_UNALIGNED, + + /* Common struct description or member data wraps address space */ + VB2_ERROR_COMMON_DESC_WRAPS, + VB2_ERROR_COMMON_MEMBER_WRAPS, + + /* Common struct description is not null-terminated */ + VB2_ERROR_COMMON_DESC_TERMINATOR, + + /* Member data overlaps previous data */ + VB2_ERROR_COMMON_MEMBER_OVERLAP, /* 0x150020 */ + + /* Signature bad magic number */ + VB2_ERROR_SIG_MAGIC, + + /* Signature incompatible version */ + VB2_ERROR_SIG_VERSION, + + /* Signature header doesn't fit */ + VB2_ERROR_SIG_HEADER_SIZE, + + /* Signature unsupported algorithm */ + VB2_ERROR_SIG_ALGORITHM, + + /* Signature bad size for algorithm */ + VB2_ERROR_SIG_SIZE, + + /* Wrong amount of data signed */ + VB2_ERROR_VDATA_SIZE, + + /* Digest mismatch */ + VB2_ERROR_VDATA_VERIFY_DIGEST, + + /* Key algorithm doesn't match signature algorithm */ + VB2_ERROR_VDATA_ALGORITHM_MISMATCH, + + /* Bad magic number in vb2_unpack_key_buffer() */ + VB2_ERROR_UNPACK_KEY_MAGIC, + + /* Null public key buffer passed to vb2_unpack_key_buffer() */ + VB2_ERROR_UNPACK_KEY_BUFFER, + + /********************************************************************** + * Keyblock verification errors (all in vb2_verify_keyblock()) + */ + VB2_ERROR_KEYBLOCK = VB2_ERROR_BASE + 0x060000, + + /* Data buffer too small for header */ + VB2_ERROR_KEYBLOCK_TOO_SMALL_FOR_HEADER, + + /* Magic number not present */ + VB2_ERROR_KEYBLOCK_MAGIC, + + /* Header version incompatible */ + VB2_ERROR_KEYBLOCK_HEADER_VERSION, + + /* Data buffer too small for keyblock */ + VB2_ERROR_KEYBLOCK_SIZE, + + /* Signature data offset outside keyblock */ + VB2_ERROR_KEYBLOCK_SIG_OUTSIDE, + + /* Signature signed more data than size of keyblock */ + VB2_ERROR_KEYBLOCK_SIGNED_TOO_MUCH, + + /* Signature signed less data than size of keyblock header */ + VB2_ERROR_KEYBLOCK_SIGNED_TOO_LITTLE, + + /* Signature invalid */ + VB2_ERROR_KEYBLOCK_SIG_INVALID, + + /* Data key outside keyblock */ + VB2_ERROR_KEYBLOCK_DATA_KEY_OUTSIDE, + + /* Data key outside signed part of keyblock */ + VB2_ERROR_KEYBLOCK_DATA_KEY_UNSIGNED, + + /* Signature signed wrong amount of data */ + VB2_ERROR_KEYBLOCK_SIGNED_SIZE, + + /* No signature matching key ID */ + VB2_ERROR_KEYBLOCK_SIG_ID, + + /* Invalid keyblock hash in dev mode (self-signed kernel) */ + VB2_ERROR_KEYBLOCK_HASH_INVALID_IN_DEV_MODE, + + /********************************************************************** + * Preamble verification errors (all in vb2_verify_preamble()) + */ + VB2_ERROR_PREAMBLE = VB2_ERROR_BASE + 0x070000, + + /* Preamble data too small to contain header */ + VB2_ERROR_PREAMBLE_TOO_SMALL_FOR_HEADER, + + /* Header version incompatible */ + VB2_ERROR_PREAMBLE_HEADER_VERSION, + + /* Header version too old */ + VB2_ERROR_PREAMBLE_HEADER_OLD, + + /* Data buffer too small for preamble */ + VB2_ERROR_PREAMBLE_SIZE, + + /* Signature data offset outside preamble */ + VB2_ERROR_PREAMBLE_SIG_OUTSIDE, + + /* Signature signed more data than size of preamble */ + VB2_ERROR_PREAMBLE_SIGNED_TOO_MUCH, + + /* Signature signed less data than size of preamble header */ + VB2_ERROR_PREAMBLE_SIGNED_TOO_LITTLE, + + /* Signature invalid */ + VB2_ERROR_PREAMBLE_SIG_INVALID, + + /* Body signature outside preamble */ + VB2_ERROR_PREAMBLE_BODY_SIG_OUTSIDE, + + /* Kernel subkey outside preamble */ + VB2_ERROR_PREAMBLE_KERNEL_SUBKEY_OUTSIDE, + + /* Bad magic number */ + VB2_ERROR_PREAMBLE_MAGIC, + + /* Hash is signed */ + VB2_ERROR_PREAMBLE_HASH_SIGNED, + + /* Bootloader outside signed portion of body */ + VB2_ERROR_PREAMBLE_BOOTLOADER_OUTSIDE, + + /* Vmlinuz header outside signed portion of body */ + VB2_ERROR_PREAMBLE_VMLINUZ_HEADER_OUTSIDE, + + /********************************************************************** + * Misc higher-level code errors + */ + VB2_ERROR_MISC = VB2_ERROR_BASE + 0x080000, + + /* Work buffer too small (see vb2api_init and vb2api_reinit) */ + VB2_ERROR_WORKBUF_SMALL = 0x10080001, + + /* Work buffer unaligned (see vb2api_init and vb2api_reinit) */ + VB2_ERROR_WORKBUF_ALIGN = 0x10080002, + + /* Work buffer too small in GBB-related function */ + VB2_ERROR_GBB_WORKBUF = 0x10080003, + + /* Bad magic number in vb2_read_gbb_header() */ + VB2_ERROR_GBB_MAGIC = 0x10080004, + + /* Incompatible version in vb2_read_gbb_header() */ + VB2_ERROR_GBB_VERSION = 0x10080005, + + /* Old version in vb2_read_gbb_header() */ + VB2_ERROR_GBB_TOO_OLD = 0x10080006, + + /* Header size too small in vb2_read_gbb_header() */ + VB2_ERROR_GBB_HEADER_SIZE = 0x10080007, + + /* Work buffer too small for root key in vb2_load_fw_keyblock() */ + VB2_ERROR_FW_KEYBLOCK_WORKBUF_ROOT_KEY = 0x10080008, + + /* Work buffer too small for header in vb2_load_fw_keyblock() */ + VB2_ERROR_FW_KEYBLOCK_WORKBUF_HEADER = 0x10080009, + + /* Work buffer too small for keyblock in vb2_load_fw_keyblock() */ + VB2_ERROR_FW_KEYBLOCK_WORKBUF = 0x1008000a, + + /* Keyblock version out of range in vb2_load_fw_keyblock() */ + VB2_ERROR_FW_KEYBLOCK_VERSION_RANGE = 0x1008000b, + + /* Keyblock version rollback in vb2_load_fw_keyblock() */ + VB2_ERROR_FW_KEYBLOCK_VERSION_ROLLBACK = 0x1008000c, + + /* Missing firmware data key in vb2_load_fw_preamble() */ + VB2_ERROR_FW_PREAMBLE2_DATA_KEY = 0x1008000d, + + /* Work buffer too small for header in vb2_load_fw_preamble() */ + VB2_ERROR_FW_PREAMBLE2_WORKBUF_HEADER = 0x1008000e, + + /* Work buffer too small for preamble in vb2_load_fw_preamble() */ + VB2_ERROR_FW_PREAMBLE2_WORKBUF = 0x1008000f, + + /* Firmware version out of range in vb2_load_fw_preamble() */ + VB2_ERROR_FW_PREAMBLE_VERSION_RANGE = 0x10080010, + + /* Firmware version rollback in vb2_load_fw_preamble() */ + VB2_ERROR_FW_PREAMBLE_VERSION_ROLLBACK = 0x10080011, + + /* Not enough space in work buffer for resource object */ + VB2_ERROR_READ_RESOURCE_OBJECT_BUF = 0x10080012, + + /* Work buffer too small for header in vb2_load_kernel_keyblock() */ + VB2_ERROR_KERNEL_KEYBLOCK_WORKBUF_HEADER = 0x10080013, + + /* Work buffer too small for keyblock in vb2_load_kernel_keyblock() */ + VB2_ERROR_KERNEL_KEYBLOCK_WORKBUF = 0x10080014, + + /* Keyblock version out of range in vb2_load_kernel_keyblock() */ + VB2_ERROR_KERNEL_KEYBLOCK_VERSION_RANGE = 0x10080015, + + /* Keyblock version rollback in vb2_load_kernel_keyblock() */ + VB2_ERROR_KERNEL_KEYBLOCK_VERSION_ROLLBACK = 0x10080016, + + /* + * Keyblock flags don't match current mode in + * vb2_load_kernel_keyblock(). + */ + VB2_ERROR_KERNEL_KEYBLOCK_DEV_FLAG = 0x10080017, + VB2_ERROR_KERNEL_KEYBLOCK_REC_FLAG = 0x10080018, + + /* Missing firmware data key in vb2_load_kernel_preamble() */ + VB2_ERROR_KERNEL_PREAMBLE2_DATA_KEY = 0x10080019, + + /* Work buffer too small for header in vb2_load_kernel_preamble() */ + VB2_ERROR_KERNEL_PREAMBLE2_WORKBUF_HEADER = 0x1008001a, + + /* Work buffer too small for preamble in vb2_load_kernel_preamble() */ + VB2_ERROR_KERNEL_PREAMBLE2_WORKBUF = 0x1008001b, + + /* Kernel version out of range in vb2_load_kernel_preamble() */ + VB2_ERROR_KERNEL_PREAMBLE_VERSION_RANGE = 0x1008001c, + + /* Kernel version rollback in vb2_load_kernel_preamble() */ + VB2_ERROR_KERNEL_PREAMBLE_VERSION_ROLLBACK = 0x1008001d, + + /* Kernel preamble not loaded before calling vb2api_get_kernel_size() */ + VB2_ERROR_API_GET_KERNEL_SIZE_PREAMBLE = 0x1008001e, + + /* Unable to unpack kernel subkey in vb2_verify_vblock(); + * deprecated and replaced with VB2_ERROR_UNPACK_KEY_* */ + VB2_ERROR_DEPRECATED_VBLOCK_KERNEL_SUBKEY = 0x1008001f, + + /* + * Got a self-signed kernel in vb2_verify_vblock(), but need an + * officially signed one; deprecated and replaced with + * VB2_ERROR_KERNEL_KEYBLOCK_*. + */ + VB2_ERROR_DEPRECATED_VBLOCK_SELF_SIGNED = 0x10080020, + + /* Invalid keyblock hash in vb2_verify_vblock(); + * deprecated and replaced with VB2_ERROR_KERNEL_KEYBLOCK_* */ + VB2_ERROR_DEPRECATED_VBLOCK_KEYBLOCK_HASH = 0x10080021, + + /* Invalid keyblock in vb2_verify_vblock(); + * deprecated and replaced with VB2_ERROR_KERNEL_KEYBLOCK_* */ + VB2_ERROR_DEPRECATED_VBLOCK_KEYBLOCK = 0x10080022, + + /* Wrong dev key hash in vb2_verify_kernel_vblock_dev_key_hash() */ + VB2_ERROR_KERNEL_KEYBLOCK_DEV_KEY_HASH = 0x10080023, + + /* Work buffer too small in vb2_load_partition() */ + VB2_ERROR_LOAD_PARTITION_WORKBUF = 0x10080024, + + /* Unable to read vblock in vb2_load_partition() */ + VB2_ERROR_LOAD_PARTITION_READ_VBLOCK = 0x10080025, + + /* Unable to verify vblock in vb2_load_partition() */ + VB2_ERROR_LOAD_PARTITION_VERIFY_VBLOCK = 0x10080026, + + /* Kernel body offset too large in vb2_load_partition() */ + VB2_ERROR_LOAD_PARTITION_BODY_OFFSET = 0x10080027, + + /* Kernel body too big in vb2_load_partition() */ + VB2_ERROR_LOAD_PARTITION_BODY_SIZE = 0x10080028, + + /* Unable to read kernel body in vb2_load_partition() */ + VB2_ERROR_LOAD_PARTITION_READ_BODY = 0x10080029, + + /* Unable to unpack data key in vb2_load_partition() */ + VB2_ERROR_LOAD_PARTITION_DATA_KEY = 0x1008002a, + + /* Unable to verify body in vb2_load_partition() */ + VB2_ERROR_LOAD_PARTITION_VERIFY_BODY = 0x1008002b, + + /* Unable to get EC image hash in ec_sync_phase1() */ + VB2_ERROR_EC_HASH_IMAGE = 0x1008002c, + + /* Unable to get expected EC image hash in ec_sync_phase1() */ + VB2_ERROR_EC_HASH_EXPECTED = 0x1008002d, + + /* Expected and image hashes are different size in ec_sync_phase1() */ + VB2_ERROR_EC_HASH_SIZE = 0x1008002e, + + /* Incompatible version for vb2_shared_data structure being loaded */ + VB2_ERROR_SHARED_DATA_VERSION = 0x1008002f, + + /* Bad magic number in vb2_shared_data structure */ + VB2_ERROR_SHARED_DATA_MAGIC = 0x10080030, + + /* Some part of GBB data is invalid */ + VB2_ERROR_GBB_INVALID = 0x10080031, + + /* Invalid parameter */ + VB2_ERROR_INVALID_PARAMETER = 0x10080032, + + /* Problem with workbuf validity (see vb2api_init and vb2api_reinit) */ + VB2_ERROR_WORKBUF_INVALID = 0x10080033, + + /* Escape from NO_BOOT mode is detected */ + VB2_ERROR_ESCAPE_NO_BOOT = 0x10080034, + + /* + * Keyblock flags don't match current mode in + * vb2_load_kernel_keyblock(). + */ + VB2_ERROR_KERNEL_KEYBLOCK_MINIOS_FLAG = 0x10080035, + + /********************************************************************** + * API-level errors + */ + VB2_ERROR_API = VB2_ERROR_BASE + 0x090000, + + /* Bad tag in vb2api_init_hash() */ + VB2_ERROR_API_INIT_HASH_TAG, + + /* Preamble not present in vb2api_init_hash() */ + VB2_ERROR_API_INIT_HASH_PREAMBLE, + + /* Work buffer too small in vb2api_init_hash() */ + VB2_ERROR_API_INIT_HASH_WORKBUF, + + /* Missing firmware data key in vb2api_init_hash() */ + VB2_ERROR_API_INIT_HASH_DATA_KEY, + + /* Uninitialized work area in vb2api_extend_hash() */ + VB2_ERROR_API_EXTEND_HASH_WORKBUF, + + /* Too much data hashed in vb2api_extend_hash() */ + VB2_ERROR_API_EXTEND_HASH_SIZE, + + /* Preamble not present in vb2api_check_hash() */ + VB2_ERROR_API_CHECK_HASH_PREAMBLE, + + /* Uninitialized work area in vb2api_check_hash() */ + VB2_ERROR_API_CHECK_HASH_WORKBUF, + + /* Wrong amount of data hashed in vb2api_check_hash() */ + VB2_ERROR_API_CHECK_HASH_SIZE, + + /* Work buffer too small in vb2api_check_hash() */ + VB2_ERROR_API_CHECK_HASH_WORKBUF_DIGEST, + + /* Bad tag in vb2api_check_hash() */ + VB2_ERROR_API_CHECK_HASH_TAG, + + /* Missing firmware data key in vb2api_check_hash() */ + VB2_ERROR_API_CHECK_HASH_DATA_KEY, + + /* Signature size mismatch in vb2api_check_hash() */ + VB2_ERROR_API_CHECK_HASH_SIG_SIZE, + + /* Phase one needs recovery mode */ + VB2_ERROR_API_PHASE1_RECOVERY, + + /* Bad tag in vb2api_check_hash() */ + VB2_ERROR_API_INIT_HASH_ID, + + /* Signature mismatch in vb2api_check_hash() */ + VB2_ERROR_API_CHECK_HASH_SIG, + + /* Invalid enum vb2_pcr_digest requested to vb2api_get_pcr_digest */ + VB2_ERROR_API_PCR_DIGEST, + + /* Buffer size for the digest is too small for vb2api_get_pcr_digest */ + VB2_ERROR_API_PCR_DIGEST_BUF, + + /* Work buffer too small for recovery key in vb2api_kernel_phase1(); + * Deprecated: use vb2_gbb_read_recovery_key return values */ + VB2_ERROR_DEPRECATED_API_KPHASE1_WORKBUF_REC_KEY, + + /* Firmware preamble not present for vb2api_kernel_phase1() */ + VB2_ERROR_API_KPHASE1_PREAMBLE, + + /* Wrong amount of kernel data in vb2api_verify_kernel_data() */ + VB2_ERROR_API_VERIFY_KDATA_SIZE, + + /* Kernel preamble not present for vb2api_verify_kernel_data() */ + VB2_ERROR_API_VERIFY_KDATA_PREAMBLE, + + /* Insufficient workbuf for hashing in vb2api_verify_kernel_data() */ + VB2_ERROR_API_VERIFY_KDATA_WORKBUF, + + /* Bad data key in vb2api_verify_kernel_data() */ + VB2_ERROR_API_VERIFY_KDATA_KEY, + + /* Phase one passing through secdata's request to reboot */ + VB2_ERROR_API_PHASE1_SECDATA_REBOOT, + + /* Digest buffer passed into vb2api_check_hash incorrect. */ + VB2_ERROR_API_CHECK_DIGEST_SIZE, + + /* Disabling developer mode is not allowed by GBB flags */ + VB2_ERROR_API_DISABLE_DEV_NOT_ALLOWED, + + /* Enabling developer mode is not allowed in non-recovery mode */ + VB2_ERROR_API_ENABLE_DEV_NOT_ALLOWED, + + /********************************************************************** + * Errors which may be generated by implementations of vb2ex functions. + * Implementation may also return its own specific errors, which should + * NOT be in the range VB2_ERROR_BASE...VB2_ERROR_MAX to avoid + * conflicting with future vboot2 error codes. + */ + VB2_ERROR_EX = VB2_ERROR_BASE + 0x0a0000, + + /* Read resource not implemented + * Deprecated: use VB2_ERROR_EX_UNIMPLEMENTED (chromium:944804) */ + VB2_ERROR_EX_DEPRECATED_READ_RESOURCE_UNIMPLEMENTED, + + /* Resource index not found */ + VB2_ERROR_EX_READ_RESOURCE_INDEX, + + /* Size of resource not big enough for requested offset and/or size */ + VB2_ERROR_EX_READ_RESOURCE_SIZE, + + /* TPM clear owner failed */ + VB2_ERROR_EX_TPM_CLEAR_OWNER, + + /* TPM clear owner not implemented + * Deprecated: use VB2_ERROR_EX_UNIMPLEMENTED (chromium:944804) */ + VB2_ERROR_DEPRECATED_EX_TPM_CLEAR_OWNER_UNIMPLEMENTED, + + /* Hardware crypto engine doesn't support this algorithm (non-fatal) */ + VB2_ERROR_EX_HWCRYPTO_UNSUPPORTED, + + /* TPM does not understand this command */ + VB2_ERROR_EX_TPM_NO_SUCH_COMMAND, + + /* vb2ex function is unimplemented (stubbed in 2lib/2stub.c) */ + VB2_ERROR_EX_UNIMPLEMENTED, + + /* AUXFW peripheral busy. Cannot upgrade firmware at present. */ + VB2_ERROR_EX_AUXFW_PERIPHERAL_BUSY, + + /* Error setting vendor data (see: VbExSetVendorData). + * Deprecated: functionality removed with legacy UI (b/167643628) */ + VB2_ERROR_DEPRECATED_EX_SET_VENDOR_DATA, + + /* The memory test is running but the output buffer was unchanged. */ + VB2_ERROR_EX_DIAG_TEST_RUNNING, + + /* The memory test is running and the output buffer was updated. */ + VB2_ERROR_EX_DIAG_TEST_UPDATED, + + /* The memory test initialization failed. */ + VB2_ERROR_EX_DIAG_TEST_INIT_FAILED, + + /********************************************************************** + * LoadKernel errors + * + * Should be ordered by specificity -- lower number means more specific. + */ + VB2_ERROR_LK = 0x100b0000, + + /* Only an invalid kernel was found in LoadKernel() */ + VB2_ERROR_LK_INVALID_KERNEL_FOUND = 0x100b1000, + + /* No kernel partitions were found in LoadKernel() */ + VB2_ERROR_LK_NO_KERNEL_FOUND = 0x100b2000, + + /* No working block devices were found in VbTryLoadKernel() */ + VB2_ERROR_LK_NO_DISK_FOUND = 0x100b3000, + + /********************************************************************** + * UI errors + */ + VB2_ERROR_UI = 0x100c0000, + + /* Display initialization failed */ + VB2_ERROR_UI_DISPLAY_INIT = 0x100c0001, + + /* Problem finding screen entry or its draw function */ + VB2_ERROR_UI_INVALID_SCREEN = 0x100c0002, + + /* Screen drawing failed, including all CBGFX_ERROR_* errors returned + from libpayload */ + VB2_ERROR_UI_DRAW_FAILURE = 0x100c0003, + + /* Problem loading archive from CBFS */ + VB2_ERROR_UI_INVALID_ARCHIVE = 0x100c0004, + + /* Image not found in the archive */ + VB2_ERROR_UI_MISSING_IMAGE = 0x100c0005, + + /* Requested locale not available */ + VB2_ERROR_UI_INVALID_LOCALE = 0x100c0006, + + /* Memory allocation failure */ + VB2_ERROR_UI_MEMORY_ALLOC = 0x100c0007, + + /* Log screen initialization failed */ + VB2_ERROR_UI_LOG_INIT = 0x100c0008, + + /********************************************************************** + * Errors generated by host library (non-firmware) start here. + */ + VB2_ERROR_HOST_BASE = 0x20000000, + + /********************************************************************** + * Errors generated by host library misc functions + */ + VB2_ERROR_HOST_MISC = VB2_ERROR_HOST_BASE + 0x010000, + + /* Unable to open file in read_file() */ + VB2_ERROR_READ_FILE_OPEN, + + /* Bad size in read_file() */ + VB2_ERROR_READ_FILE_SIZE, + + /* Unable to allocate buffer in read_file() */ + VB2_ERROR_READ_FILE_ALLOC, + + /* Unable to read data in read_file() */ + VB2_ERROR_READ_FILE_DATA, + + /* Unable to open file in write_file() */ + VB2_ERROR_WRITE_FILE_OPEN, + + /* Unable to write data in write_file() */ + VB2_ERROR_WRITE_FILE_DATA, + + /* Unable to convert string to struct vb_id */ + VB2_ERROR_STR_TO_ID, + + /* Flashrom exited with failure status */ + VB2_ERROR_FLASHROM, + + /********************************************************************** + * Errors generated by host library key functions + */ + VB2_ERROR_HOST_KEY = VB2_ERROR_HOST_BASE + 0x020000, + + /* Unable to allocate key in vb2_private_key_read_pem() */ + VB2_ERROR_READ_PEM_ALLOC, + + /* Unable to open .pem file in vb2_private_key_read_pem() */ + VB2_ERROR_READ_PEM_FILE_OPEN, + + /* Bad RSA data from .pem file in vb2_private_key_read_pem() */ + VB2_ERROR_READ_PEM_RSA, + + /* Unable to set private key description */ + VB2_ERROR_PRIVATE_KEY_SET_DESC, + + /* Bad magic number in vb2_private_key_unpack() */ + VB2_ERROR_UNPACK_PRIVATE_KEY_MAGIC, + + /* Bad common header in vb2_private_key_unpack() */ + VB2_ERROR_UNPACK_PRIVATE_KEY_HEADER, + + /* Bad key data in vb2_private_key_unpack() */ + VB2_ERROR_UNPACK_PRIVATE_KEY_DATA, + + /* Bad struct version in vb2_private_key_unpack() */ + VB2_ERROR_UNPACK_PRIVATE_KEY_STRUCT_VERSION, + + /* Unable to allocate buffer in vb2_private_key_unpack() */ + VB2_ERROR_UNPACK_PRIVATE_KEY_ALLOC, + + /* Unable to unpack RSA key in vb2_private_key_unpack() */ + VB2_ERROR_UNPACK_PRIVATE_KEY_RSA, + + /* Unable to set description in vb2_private_key_unpack() */ + VB2_ERROR_UNPACK_PRIVATE_KEY_DESC, + + /* Bad bare hash key in vb2_private_key_unpack() */ + VB2_ERROR_UNPACK_PRIVATE_KEY_HASH, + + /* Unable to create RSA data in vb2_private_key_write() */ + VB2_ERROR_PRIVATE_KEY_WRITE_RSA, + + /* Unable to allocate packed key buffer in vb2_private_key_write() */ + VB2_ERROR_PRIVATE_KEY_WRITE_ALLOC, + + /* Unable to write file in vb2_private_key_write() */ + VB2_ERROR_PRIVATE_KEY_WRITE_FILE, + + /* Bad algorithm in vb2_private_key_hash() */ + VB2_ERROR_PRIVATE_KEY_HASH, + + /* Unable to determine key size in vb2_public_key_alloc() */ + VB2_ERROR_PUBLIC_KEY_ALLOC_SIZE, + + /* Unable to allocate buffer in vb2_public_key_alloc() */ + VB2_ERROR_PUBLIC_KEY_ALLOC, + + /* Unable to set public key description */ + VB2_ERROR_PUBLIC_KEY_SET_DESC, + + /* Unable to read key data in vb2_public_key_read_keyb() */ + VB2_ERROR_READ_KEYB_DATA, + + /* Wrong amount of data read in vb2_public_key_read_keyb() */ + VB2_ERROR_READ_KEYB_SIZE, + + /* Unable to allocate key buffer in vb2_public_key_read_keyb() */ + VB2_ERROR_READ_KEYB_ALLOC, + + /* Error unpacking RSA arrays in vb2_public_key_read_keyb() */ + VB2_ERROR_READ_KEYB_UNPACK, + + /* Unable to read key data in vb2_packed_key_read() */ + VB2_ERROR_READ_PACKED_KEY_DATA, + + /* Bad key data in vb2_packed_key_read() */ + VB2_ERROR_READ_PACKED_KEY, + + /* Unable to determine key size in vb2_public_key_pack() */ + VB2_ERROR_PUBLIC_KEY_PACK_SIZE, + + /* Bad hash algorithm in vb2_public_key_hash() */ + VB2_ERROR_PUBLIC_KEY_HASH, + + /* Bad key size in vb2_copy_packed_key() */ + VB2_ERROR_COPY_KEY_SIZE, + + /* Unable to convert back to vb1 crypto algorithm */ + VB2_ERROR_VB1_CRYPTO_ALGORITHM, + + /* Unable to allocate packed key */ + VB2_ERROR_PACKED_KEY_ALLOC, + + /* Unable to copy packed key */ + VB2_ERROR_PACKED_KEY_COPY, + + /* Packed key with invalid version */ + VB2_ERROR_PACKED_KEY_VERSION, + + /********************************************************************** + * Errors generated by host library signature functions + */ + VB2_ERROR_HOST_SIG = VB2_ERROR_HOST_BASE + 0x030000, + + /* Bad hash algorithm in vb2_digest_info() */ + VB2_ERROR_DIGEST_INFO, + + /* + * Unable to determine signature size for key algorithm in + * vb2_sig_size_for_key(). + */ + VB2_ERROR_SIG_SIZE_FOR_KEY, + + /* Bad signature size in vb2_sign_data() */ + VB2_SIGN_DATA_SIG_SIZE, + + /* Unable to get digest info in vb2_sign_data() */ + VB2_SIGN_DATA_DIGEST_INFO, + + /* Unable to get digest size in vb2_sign_data() */ + VB2_SIGN_DATA_DIGEST_SIZE, + + /* Unable to allocate digest buffer in vb2_sign_data() */ + VB2_SIGN_DATA_DIGEST_ALLOC, + + /* Unable to initialize digest in vb2_sign_data() */ + VB2_SIGN_DATA_DIGEST_INIT, + + /* Unable to extend digest in vb2_sign_data() */ + VB2_SIGN_DATA_DIGEST_EXTEND, + + /* Unable to finalize digest in vb2_sign_data() */ + VB2_SIGN_DATA_DIGEST_FINALIZE, + + /* RSA encrypt failed in vb2_sign_data() */ + VB2_SIGN_DATA_RSA_ENCRYPT, + + /* Not enough buffer space to hold signature in vb2_sign_object() */ + VB2_SIGN_OBJECT_OVERFLOW, + + /********************************************************************** + * Errors generated by host library keyblock functions + */ + VB2_ERROR_HOST_KEYBLOCK = VB2_ERROR_HOST_BASE + 0x040000, + + /* Unable to determine signature sizes for vb2_create_keyblock() */ + VB2_KEYBLOCK_CREATE_SIG_SIZE, + + /* Unable to pack data key for vb2_create_keyblock() */ + VB2_KEYBLOCK_CREATE_DATA_KEY, + + /* Unable to allocate buffer in vb2_create_keyblock() */ + VB2_KEYBLOCK_CREATE_ALLOC, + + /* Unable to sign keyblock in vb2_create_keyblock() */ + VB2_KEYBLOCK_CREATE_SIGN, + + /********************************************************************** + * Errors generated by host library firmware preamble functions + */ + VB2_ERROR_HOST_FW_PREAMBLE = VB2_ERROR_HOST_BASE + 0x050000, + + /* Unable to determine signature sizes for vb2_create_fw_preamble() */ + VB2_FW_PREAMBLE_CREATE_SIG_SIZE, + + /* Unable to allocate buffer in vb2_create_fw_preamble() */ + VB2_FW_PREAMBLE_CREATE_ALLOC, + + /* Unable to sign preamble in vb2_create_fw_preamble() */ + VB2_FW_PREAMBLE_CREATE_SIGN, + + /********************************************************************** + * Errors generated by unit test functions + */ + VB2_ERROR_UNIT_TEST = VB2_ERROR_HOST_BASE + 0x060000, + + /* Unable to open an input file needed for a unit test */ + VB2_ERROR_TEST_INPUT_FILE, + + /********************************************************************** + * Highest non-zero error generated inside vboot library. Note that + * error codes passed through vboot when it calls external APIs may + * still be outside this range. + */ + VB2_ERROR_MAX = VB2_ERROR_BASE + 0x1fffffff, +}; + +#endif /* VBOOT_REFERENCE_2RETURN_CODES_H_ */ diff --git a/firmware/2lib/include/2rsa.h b/firmware/2lib/include/2rsa.h new file mode 100644 index 0000000..6d5ffcb --- /dev/null +++ b/firmware/2lib/include/2rsa.h @@ -0,0 +1,60 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_2RSA_H_ +#define VBOOT_REFERENCE_2RSA_H_ + +#include "2crypto.h" +#include "2return_codes.h" + +struct vb2_workbuf; + +/* Public key structure in RAM */ +struct vb2_public_key { + uint32_t arrsize; /* Length of n[] and rr[] in number of uint32_t */ + uint32_t n0inv; /* -1 / n[0] mod 2^32 */ + const uint32_t *n; /* Modulus as little endian array */ + const uint32_t *rr; /* R^2 as little endian array */ + enum vb2_signature_algorithm sig_alg; /* Signature algorithm */ + enum vb2_hash_algorithm hash_alg; /* Hash algorithm */ + const char *desc; /* Description */ + uint32_t version; /* Key version */ + const struct vb2_id *id; /* Key ID */ + int allow_hwcrypto; /* Is hwcrypto allowed for key */ +}; + +/** + * Return the size of a RSA signature + * + * @param sig_alg Signature algorithm + * @return The size of the signature in bytes, or 0 if error. + */ +uint32_t vb2_rsa_sig_size(enum vb2_signature_algorithm sig_alg); + +/** + * Return the size of a pre-processed RSA public key. + * + * @param sig_alg Signature algorithm + * @return The size of the preprocessed key in bytes, or 0 if error. + */ +uint32_t vb2_packed_key_size(enum vb2_signature_algorithm sig_alg); + +/* Size of work buffer sufficient for vb2_rsa_verify_digest() worst case */ +#define VB2_VERIFY_RSA_DIGEST_WORKBUF_BYTES (3 * 1024) + +/** + * Verify a RSA PKCS1.5 signature against an expected hash digest. + * + * @param key Key to use in signature verification + * @param sig Signature to verify (destroyed in process) + * @param digest Digest of signed data + * @param wb Work buffer + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb2_rsa_verify_digest(const struct vb2_public_key *key, + uint8_t *sig, const uint8_t *digest, + const struct vb2_workbuf *wb); + +#endif /* VBOOT_REFERENCE_2RSA_H_ */ diff --git a/firmware/2lib/include/2rsa_private.h b/firmware/2lib/include/2rsa_private.h new file mode 100644 index 0000000..23a2aac --- /dev/null +++ b/firmware/2lib/include/2rsa_private.h @@ -0,0 +1,21 @@ +/* Copyright 2021 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Internal functions from 2rsa.c that have error conditions we can't trigger + * from the public APIs. These include checks for bad algorithms where the + * next call level up already checks for bad algorithms, etc. + * + * These functions aren't in 2rsa.h because they're not part of the public + * APIs. + */ + +#ifndef VBOOT_REFERENCE_2RSA_PRIVATE_H_ +#define VBOOT_REFERENCE_2RSA_PRIVATE_H_ + +struct vb2_public_key; +int vb2_mont_ge(const struct vb2_public_key *key, uint32_t *a); +vb2_error_t vb2_check_padding(const uint8_t *sig, + const struct vb2_public_key *key); + +#endif /* VBOOT_REFERENCE_2RSA_PRIVATE_H_ */ diff --git a/firmware/2lib/include/2secdata.h b/firmware/2lib/include/2secdata.h new file mode 100644 index 0000000..f9a0e30 --- /dev/null +++ b/firmware/2lib/include/2secdata.h @@ -0,0 +1,243 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Secure non-volatile storage routines + */ + +#ifndef VBOOT_REFERENCE_2SECDATA_H_ +#define VBOOT_REFERENCE_2SECDATA_H_ + +#include "2api.h" + +/*****************************************************************************/ +/* Firmware secure storage space */ + +/* Which param to get/set for vb2_secdata_firmware_get/set() */ +enum vb2_secdata_firmware_param { + /* Flags; see vb2_secdata_firmware_flags */ + VB2_SECDATA_FIRMWARE_FLAGS = 0, + + /* Firmware versions */ + VB2_SECDATA_FIRMWARE_VERSIONS, +}; + +/* Flags for firmware space */ +enum vb2_secdata_firmware_flags { + /* + * Last boot was developer mode. TPM ownership is cleared when + * transitioning to/from developer mode. Set/cleared by + * vb2_check_dev_switch(). + */ + VB2_SECDATA_FIRMWARE_FLAG_LAST_BOOT_DEVELOPER = (1 << 0), + + /* + * Virtual developer mode switch is on. Set/cleared by the + * keyboard-controlled dev screens in recovery mode. Cleared by + * vb2_check_dev_switch(). + */ + VB2_SECDATA_FIRMWARE_FLAG_DEV_MODE = (1 << 1), +}; + +/** + * Initialize firmware secure storage context and verify its CRC. + * + * This must be called before vb2_secdata_firmware_get/set(). + * + * @param ctx Context pointer + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb2_secdata_firmware_init(struct vb2_context *ctx); + +/** + * Read a firmware secure storage value. + * + * @param ctx Context pointer + * @param param Parameter to read + * @return Requested parameter value + */ +uint32_t vb2_secdata_firmware_get(struct vb2_context *ctx, + enum vb2_secdata_firmware_param param); + +/** + * Write a firmware secure storage value. + * + * @param ctx Context pointer + * @param param Parameter to write + * @param value New value + */ +void vb2_secdata_firmware_set(struct vb2_context *ctx, + enum vb2_secdata_firmware_param param, + uint32_t value); + +/*****************************************************************************/ +/* Kernel secure storage space + * + * These are separate functions so that they don't bloat the size of the early + * boot code which uses the firmware version space functions. + */ + +/* Which param to get/set for vb2_secdata_kernel_get/set() */ +enum vb2_secdata_kernel_param { + /* Kernel versions */ + VB2_SECDATA_KERNEL_VERSIONS = 0, + + /* Flags; see vb2_secdata_kernel_flags */ + VB2_SECDATA_KERNEL_FLAGS, +}; + +/* Flags for kernel space */ +enum vb2_secdata_kernel_flags { + /* + * Phone recovery functionality is disabled. + * + * RW firmware currently clears this flag to enable phone recovery on + * first boot (see function vb2api_kernel_phase1()). In the case that + * there are TPM communication issues, phone recovery is enabled by the + * default value of 0. See b/147744345 for details. + */ + VB2_SECDATA_KERNEL_FLAG_PHONE_RECOVERY_DISABLED = (1 << 0), + + /* Phone recovery instructions in recovery UI are disabled. */ + VB2_SECDATA_KERNEL_FLAG_PHONE_RECOVERY_UI_DISABLED = (1 << 1), + + /* + * Diagnostic UI is disabled. This includes both hiding the entry + * point on the recovery UI menu ("Launch diagnostics"), and + * disallowing the user from booting into the diagnostic UI. + */ + VB2_SECDATA_KERNEL_FLAG_DIAGNOSTIC_UI_DISABLED = (1 << 2), + + /* + * Allow HW acceleration for crypto + * + * RW firmware currently set this flag to enable HW acceleration + * for crypto. Verstage will use HW implementation for RSA/SHA + * only when this flag is set. + * + * Note: We used a flag in the FW preamble for this before. + * FW preamble was checked by verstage so the effect was immediate. + * However with TPM flag we have to modify this in RW stage which is + * after verstage, so even if we clear this flag the first boot + * WILL use hwcrypto, RW stage will run and clear this flag and then + * hwcrypto will be disabled from next boot. + */ + VB2_SECDATA_KERNEL_FLAG_HWCRYPTO_ALLOWED = (1 << 3), +}; + +/** + * Initialize kernel secure storage context and verify its CRC. + * + * This must be called before vb2_secdata_kernel_get/set(). + * + * @param ctx Context pointer + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb2_secdata_kernel_init(struct vb2_context *ctx); + +/** + * Read a kernel secure storage value. + * + * @param ctx Context pointer + * @param param Parameter to read + * @return Requested parameter value + */ +uint32_t vb2_secdata_kernel_get(struct vb2_context *ctx, + enum vb2_secdata_kernel_param param); + +/** + * Write a kernel secure storage value. + * + * @param ctx Context pointer + * @param param Parameter to write + * @param value New value + */ +void vb2_secdata_kernel_set(struct vb2_context *ctx, + enum vb2_secdata_kernel_param param, + uint32_t value); + +/** + * Get ec_hash from kernel secure storage. + * + * @param ctx Context pointer + * @return Buffer where hash is stored or NULL on error. + */ +const uint8_t *vb2_secdata_kernel_get_ec_hash(struct vb2_context *ctx); + +/** + * Set ec_hash in kernel secure storage. + * + * @param ctx Context pointer + * @param sha256 Hash to be set. 32 bytes. + */ +void vb2_secdata_kernel_set_ec_hash(struct vb2_context *ctx, + const uint8_t *sha256); + +/*****************************************************************************/ +/* Firmware management parameters (FWMP) space */ + +/* Flags for FWMP space */ +enum vb2_secdata_fwmp_flags { + VB2_SECDATA_FWMP_DEV_DISABLE_BOOT = (1 << 0), + VB2_SECDATA_FWMP_DEV_DISABLE_RECOVERY = (1 << 1), + VB2_SECDATA_FWMP_DEV_ENABLE_EXTERNAL = (1 << 2), + VB2_SECDATA_FWMP_DEV_ENABLE_ALTFW = (1 << 3), + VB2_SECDATA_FWMP_DEV_ENABLE_OFFICIAL_ONLY = (1 << 4), + VB2_SECDATA_FWMP_DEV_USE_KEY_HASH = (1 << 5), + /* CCD = case-closed debugging on cr50; flag implemented on cr50 */ + VB2_SECDATA_FWMP_DEV_DISABLE_CCD_UNLOCK = (1 << 6), + VB2_SECDATA_FWMP_DEV_FIPS_MODE = (1 << 7), +}; + +/** + * Initialize FWMP secure storage context and verify its CRC. + * + * This must be called before vb2_secdata_fwmp_get_flag/get_dev_key_hash(). + * + * @param ctx Context pointer + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb2_secdata_fwmp_init(struct vb2_context *ctx); + +/** + * Read a FWMP secure storage flag value. + * + * It is unsupported to call before successfully running vb2_secdata_fwmp_init. + * In this case, vboot will fail and exit. + * + * @param ctx Context pointer + * @param flag Flag to read + * @return current flag value (0 or 1) + */ +int vb2_secdata_fwmp_get_flag(struct vb2_context *ctx, + enum vb2_secdata_fwmp_flags flag); + +/** + * Return a pointer to FWMP dev key hash. + * + * @param ctx Context pointer + * @return uint8_t pointer to dev_key_hash field + */ +uint8_t *vb2_secdata_fwmp_get_dev_key_hash(struct vb2_context *ctx); + +/* + * Helper function to check if hwcrypto is allowed. + */ +static inline int vb2_hwcrypto_allowed(struct vb2_context *ctx) +{ + + /* disable hwcrypto in recovery mode */ + if (ctx->flags & VB2_CONTEXT_RECOVERY_MODE) + return 0; + + /* enable hwcrypto only if RW firmware set the flag */ + if (vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_FLAGS) + & VB2_SECDATA_KERNEL_FLAG_HWCRYPTO_ALLOWED) + return 1; + + return 0; + +} + + +#endif /* VBOOT_REFERENCE_2SECDATA_H_ */ diff --git a/firmware/2lib/include/2secdata_struct.h b/firmware/2lib/include/2secdata_struct.h new file mode 100644 index 0000000..7614043 --- /dev/null +++ b/firmware/2lib/include/2secdata_struct.h @@ -0,0 +1,150 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Secure non-volatile storage data structure definitions + */ + +#ifndef VBOOT_REFERENCE_2SECDATA_STRUCT_H_ +#define VBOOT_REFERENCE_2SECDATA_STRUCT_H_ + +#include "2constants.h" +#include "2crc8.h" +#include "2sha.h" +#include "2sysincludes.h" + +/*****************************************************************************/ +/* Firmware secure storage space */ + +#define VB2_SECDATA_FIRMWARE_VERSION 2 + +struct vb2_secdata_firmware { + /* Struct version, for backwards compatibility */ + uint8_t struct_version; + + /* Flags; see vb2_secdata_firmware_flags */ + uint8_t flags; + + /* Firmware versions */ + uint32_t fw_versions; + + /* Reserved for future expansion */ + uint8_t reserved[3]; + + /* CRC; must be last field in struct */ + uint8_t crc8; +} __attribute__((packed)); + +/*****************************************************************************/ +/* Kernel secure storage space + * + * We'll never convert v0.2 to v1.* or the other way. v0.2 or v1.* data will be + * passed around between AP and TPM without upgrade or downgrade. + * + * 1. Old BIOS on old device will read/write v0.2 data from/to TPM. + * 2. New BIOS on old device will read/write v0.2 data from/to TPM. + * 3. Old BIOS on new device will read/write v0.2 data from/to TPM. + * 4. New BIOS on new device will read/write v1.0 data from/to TPM. + */ + +/* Kernel space - KERNEL_NV_INDEX, locked with physical presence. */ +#define VB2_SECDATA_KERNEL_VERSION_V02 (0 << 4 | 2 << 0) /* 0.2 */ +#define VB2_SECDATA_KERNEL_VERSION_V10 (1 << 4 | 0 << 0) /* 1.0 */ +#define VB2_SECDATA_KERNEL_VERSION_LATEST VB2_SECDATA_KERNEL_VERSION_V10 +#define VB2_SECDATA_KERNEL_UID 0x4752574c /* 'LWRG' */ + +struct vb2_secdata_kernel_v0 { + /* Struct version, for backwards compatibility */ + uint8_t struct_version; /* 0.2 (or 0x02 in v0 format) */ + + /* Unique ID to detect space redefinition */ + uint32_t uid; + + /* Kernel versions */ + uint32_t kernel_versions; + + /* Reserved for future expansion */ + uint8_t reserved[3]; + + /* CRC; must be last field in struct */ + uint8_t crc8; +} __attribute__((packed)); +_Static_assert(sizeof(struct vb2_secdata_kernel_v0) + == VB2_SECDATA_KERNEL_SIZE_V02, + "VB2_SECDATA_KERNEL_SIZE_V02 incorrect"); +_Static_assert(sizeof(struct vb2_secdata_kernel_v0) + < VB2_SECDATA_KERNEL_MAX_SIZE, + "VB2_SECDATA_KERNEL_SIZE_V02 exceeds max size"); + +/* + * Secdata kernel v1.* series. + */ +struct vb2_secdata_kernel_v1 { + /* Struct version, for backwards compatibility */ + uint8_t struct_version; /* 1.0 (or 0x10 in v0 format) */ + + /* Size of the struct */ + uint8_t struct_size; + + /* 8-bit CRC for everything below */ + uint8_t crc8; + + /* Flags; see vb2_secdata_kernel_flags */ + uint8_t flags; + + /* Kernel versions */ + uint32_t kernel_versions; + + /* EC hash used for EFS2 */ + uint8_t ec_hash[VB2_SHA256_DIGEST_SIZE]; +}; +_Static_assert(sizeof(struct vb2_secdata_kernel_v1) + == VB2_SECDATA_KERNEL_SIZE_V10, + "VB2_SECDATA_KERNEL_SIZE_V10 incorrect"); +_Static_assert(sizeof(struct vb2_secdata_kernel_v1) + < VB2_SECDATA_KERNEL_MAX_SIZE, + "VB2_SECDATA_KERNEL_SIZE_V10 exceeds max size"); + +/*****************************************************************************/ +/* Firmware management parameters (FWMP) space */ + +#define VB2_SECDATA_FWMP_VERSION 0x10 /* 1.0 */ +#define VB2_SECDATA_FWMP_HASH_SIZE 32 /* enough for SHA-256 */ + +struct vb2_secdata_fwmp { + /* CRC-8 of fields following struct_size */ + uint8_t crc8; + + /* Structure size in bytes */ + uint8_t struct_size; + + /* Structure version (4 bits major, 4 bits minor) */ + uint8_t struct_version; + + /* Reserved; ignored by current reader */ + uint8_t reserved0; + + /* Flags; see enum vb2_secdata_fwmp_flags */ + uint32_t flags; + + /* Hash of developer kernel key */ + uint8_t dev_key_hash[VB2_SECDATA_FWMP_HASH_SIZE]; +}; + +/** + * Generate CRC for FWMP secure storage space. + * + * Calculate CRC hash from struct_version onward. In valid FWMP data, this CRC + * value should match the crc8 field. + * + * @param sec Pointer to FWMP struct + * @return 32-bit CRC hash of FWMP data + */ +static inline uint32_t vb2_secdata_fwmp_crc(struct vb2_secdata_fwmp *sec) +{ + int version_offset = offsetof(struct vb2_secdata_fwmp, struct_version); + return vb2_crc8((void *)sec + version_offset, + sec->struct_size - version_offset); +} + +#endif /* VBOOT_REFERENCE_2SECDATA_STRUCT_H_ */ diff --git a/firmware/2lib/include/2sha.h b/firmware/2lib/include/2sha.h new file mode 100644 index 0000000..e586a77 --- /dev/null +++ b/firmware/2lib/include/2sha.h @@ -0,0 +1,286 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * These APIs may be called by external firmware as well as vboot. External + * firmware must NOT include this header file directly; instead, import + * the external-facing vb2_sha.h. This is permissible because the + * SHA library routines below don't interact with the rest of vboot. + */ + +#ifndef VBOOT_REFERENCE_2SHA_H_ +#define VBOOT_REFERENCE_2SHA_H_ + +#include "2crypto.h" +#include "2return_codes.h" + +/* Hash algorithms may be disabled individually to save code space */ + +#ifndef VB2_SUPPORT_SHA1 +#define VB2_SUPPORT_SHA1 1 +#endif + +#ifndef VB2_SUPPORT_SHA256 +#define VB2_SUPPORT_SHA256 1 +#endif + +#ifndef VB2_SUPPORT_SHA512 +#define VB2_SUPPORT_SHA512 1 +#endif + +/* These are set to the biggest values among the supported hash algorithms. + * They have to be updated as we add new hash algorithms */ +#define VB2_MAX_DIGEST_SIZE VB2_SHA512_DIGEST_SIZE +#define VB2_MAX_BLOCK_SIZE VB2_SHA512_BLOCK_SIZE +#define VB2_INVALID_ALG_NAME "INVALID" + +#define VB2_SHA1_DIGEST_SIZE 20 +#define VB2_SHA1_BLOCK_SIZE 64 +#define VB2_SHA1_ALG_NAME "SHA1" + +/* Context structs for hash algorithms */ + +struct vb2_sha1_context { + uint32_t count; + uint32_t state[5]; +#if defined(HAVE_ENDIAN_H) && defined(HAVE_LITTLE_ENDIAN) + union { + uint8_t b[VB2_SHA1_BLOCK_SIZE]; + uint32_t w[VB2_SHA1_BLOCK_SIZE / sizeof(uint32_t)]; + } buf; +#else + uint8_t buf[VB2_SHA1_BLOCK_SIZE]; +#endif +}; + +#define VB2_SHA256_DIGEST_SIZE 32 +#define VB2_SHA256_BLOCK_SIZE 64 +#define VB2_SHA256_ALG_NAME "SHA256" + +struct vb2_sha256_context { + uint32_t h[8]; + uint32_t total_size; + uint32_t size; + uint8_t block[2 * VB2_SHA256_BLOCK_SIZE]; +}; + +#define VB2_SHA512_DIGEST_SIZE 64 +#define VB2_SHA512_BLOCK_SIZE 128 +#define VB2_SHA512_ALG_NAME "SHA512" + +struct vb2_sha512_context { + uint64_t h[8]; + uint32_t total_size; + uint32_t size; + uint8_t block[2 * VB2_SHA512_BLOCK_SIZE]; +}; + +/* + * SHA224/SHA384 are variants of SHA256/SHA512 that use almost all the same code + * (and the same context structures), so no separate "SUPPORT" flags for them. + */ +#define VB2_SHA224_DIGEST_SIZE 28 +#define VB2_SHA224_ALG_NAME "SHA224" +#define VB2_SHA384_DIGEST_SIZE 48 +#define VB2_SHA384_ALG_NAME "SHA384" + +/* Hash algorithm independent digest context; includes all of the above. */ +struct vb2_digest_context { + /* Context union for all algorithms */ + union { +#if VB2_SUPPORT_SHA1 + struct vb2_sha1_context sha1; +#endif +#if VB2_SUPPORT_SHA256 + struct vb2_sha256_context sha256; +#endif +#if VB2_SUPPORT_SHA512 + struct vb2_sha512_context sha512; +#endif + }; + + /* Current hash algorithm */ + enum vb2_hash_algorithm hash_alg; + + /* 1 if digest is computed with vb2ex_hwcrypto routines, else 0 */ + int using_hwcrypto; +}; + +/* + * Serializable data structure that can store any vboot hash. Layout used in + * CBFS attributes that need to be backwards-compatible -- do not change! + * When serializing/deserizaling this, you should store/load (offsetof(raw) + + * vb2_digest_size(algo)), not the full size of this structure. vboot functions + * taking a pointer to this should only access the |raw| array up to + * vb2_digest_size(algo) and not assume that the whole structure is accessible. + */ +struct vb2_hash { + /* Padding to match existing 4-byte big-endian from CBFS. + Could be reused for other stuff later (e.g. flags or something). */ + uint8_t reserved[3]; + /* enum vb2_hash_algorithm. Single byte to avoid endianness issues. */ + uint8_t algo; + /* The actual digest. Can add new types here as required. */ + union { + uint8_t raw[0]; +#if VB2_SUPPORT_SHA1 + uint8_t sha1[VB2_SHA1_DIGEST_SIZE]; +#endif +#if VB2_SUPPORT_SHA256 + uint8_t sha256[VB2_SHA256_DIGEST_SIZE]; +#endif +#if VB2_SUPPORT_SHA512 + uint8_t sha512[VB2_SHA512_DIGEST_SIZE]; +#endif + }; +}; +_Static_assert(sizeof(struct vb2_hash) - offsetof(struct vb2_hash, raw) + <= VB2_MAX_DIGEST_SIZE, "Update VB2_MAX_DIGEST_SIZE for new digests!"); +_Static_assert(VB2_HASH_ALG_COUNT <= UINT8_MAX, "vb2_hash.algo overflow!"); + +/** + * Initialize a hash context. + * + * @param ctx Hash context + * @param algo Hash algorithm (only for overloaded functions) + */ +void vb2_sha1_init(struct vb2_sha1_context *ctx); +void vb2_sha256_init(struct vb2_sha256_context *ctx, + enum vb2_hash_algorithm algo); +void vb2_sha512_init(struct vb2_sha512_context *ctx, + enum vb2_hash_algorithm algo); + +/** + * Update (extend) a hash. + * + * @param ctx Hash context + * @param data Data to hash + * @param size Length of data in bytes + */ +void vb2_sha1_update(struct vb2_sha1_context *ctx, + const uint8_t *data, + uint32_t size); +void vb2_sha256_update(struct vb2_sha256_context *ctx, + const uint8_t *data, + uint32_t size); +void vb2_sha512_update(struct vb2_sha512_context *ctx, + const uint8_t *data, + uint32_t size); + +/** + * Finalize a hash digest. + * + * @param ctx Hash context + * @param digest Destination for hash; must be VB_SHA*_DIGEST_SIZE bytes + * @param algo Hash algorithm (only for overloaded functions) + */ +void vb2_sha1_finalize(struct vb2_sha1_context *ctx, uint8_t *digest); +void vb2_sha256_finalize(struct vb2_sha256_context *ctx, uint8_t *digest, + enum vb2_hash_algorithm algo); +void vb2_sha512_finalize(struct vb2_sha512_context *ctx, uint8_t *digest, + enum vb2_hash_algorithm algo); + +/** + * Hash-extend data + * + * @param from Hash to be extended. It has to be the hash size. + * @param by Block to be extended by. It has to be the hash block size. + * @param to Destination for extended data + */ +void vb2_sha256_extend(const uint8_t *from, const uint8_t *by, uint8_t *to); + +/** + * Return the size of the digest for a hash algorithm. + * + * @param hash_alg Hash algorithm + * @return The size of the digest, or 0 if error. + */ +size_t vb2_digest_size(enum vb2_hash_algorithm hash_alg); + +/** + * Return the block size of a hash algorithm. + * + * @param hash_alg Hash algorithm + * @return The block size of the algorithm, or 0 if error. + */ +size_t vb2_hash_block_size(enum vb2_hash_algorithm alg); + +/** + * Initialize a digest context for doing block-style digesting. + * + * @param dc Digest context + * @param hash_alg Hash algorithm + * @return VB2_SUCCESS, or non-zero on error. + */ +vb2_error_t vb2_digest_init(struct vb2_digest_context *dc, + enum vb2_hash_algorithm hash_alg); + +/** + * Extend a digest's hash with another block of data. + * + * @param dc Digest context + * @param buf Data to hash + * @param size Length of data in bytes + * @return VB2_SUCCESS, or non-zero on error. + */ +vb2_error_t vb2_digest_extend(struct vb2_digest_context *dc, const uint8_t *buf, + uint32_t size); + +/** + * Finalize a digest and store the result. + * + * The destination digest should be at least vb2_digest_size(algorithm). + * + * @param dc Digest context + * @param digest Destination for digest + * @param digest_size Length of digest buffer in bytes. + * @return VB2_SUCCESS, or non-zero on error. + */ +vb2_error_t vb2_digest_finalize(struct vb2_digest_context *dc, + uint8_t *digest, uint32_t digest_size); + +/** + * Calculate the digest of a buffer and store the result. + * + * @param buf Data to hash + * @param size Length of data in bytes + * @param hash_alg Hash algorithm + * @param digest Destination for digest + * @param digest_size Length of digest buffer in bytes. + * @return VB2_SUCCESS, or non-zero on error. + */ +vb2_error_t vb2_digest_buffer(const uint8_t *buf, uint32_t size, + enum vb2_hash_algorithm hash_alg, uint8_t *digest, + uint32_t digest_size); + +/** + * Fill a vb2_hash structure with the hash of a buffer. + * + * @param buf Buffer to hash + * @param size Size of |buf| in bytes + * @param algo The hash algorithm to use (and store in |hash|) + * @param hash vb2_hash structure to fill with the hash of |buf| + * @return VB2_SUCCESS, or non-zero on error. + */ +static inline vb2_error_t vb2_hash_calculate(const void *buf, uint32_t size, + enum vb2_hash_algorithm algo, + struct vb2_hash *hash) +{ + hash->algo = algo; + return vb2_digest_buffer(buf, size, algo, hash->raw, + vb2_digest_size(algo)); +} + +/** + * Verify that a vb2_hash matches a buffer. + * + * @param buf Buffer to hash and match to |hash| + * @param size Size of |buf| in bytes + * @param hash Hash to compare to the buffer + * @return VB2_SUCCESS if hash matches, VB2_ERROR_SHA_MISMATCH if hash doesn't + * match, or non-zero on other error. + */ +vb2_error_t vb2_hash_verify(const void *buf, uint32_t size, + const struct vb2_hash *hash); + +#endif /* VBOOT_REFERENCE_2SHA_H_ */ diff --git a/firmware/2lib/include/2sha_private.h b/firmware/2lib/include/2sha_private.h new file mode 100644 index 0000000..ffa79f2 --- /dev/null +++ b/firmware/2lib/include/2sha_private.h @@ -0,0 +1,38 @@ +/* Copyright 2021 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Constants & macro for sha algorithms. + */ + +#ifndef VBOOT_REFERENCE_2SHA_PRIVATE_H_ +#define VBOOT_REFERENCE_2SHA_PRIVATE_H_ + +/* Sha256 padding is consisted of 0x80 + zeros + length of message (8 byte). + * So minimum length for padding is 9. + */ +#define SHA256_MIN_PAD_LEN 9 + +/* Beginning of sha256 padding is always 0x80 when messages are in bytes + */ +#define SHA256_PAD_BEGIN 0x80 + +extern const uint32_t vb2_sha256_h0[8]; +extern const uint32_t vb2_sha256_k[64]; + +#define UNPACK32(x, str) \ + { \ + *((str) + 3) = (uint8_t) ((x) ); \ + *((str) + 2) = (uint8_t) ((x) >> 8); \ + *((str) + 1) = (uint8_t) ((x) >> 16); \ + *((str) + 0) = (uint8_t) ((x) >> 24); \ + } + +#define PACK32(str, x) \ + { \ + *(x) = ((uint32_t) *((str) + 3) ) \ + | ((uint32_t) *((str) + 2) << 8) \ + | ((uint32_t) *((str) + 1) << 16) \ + | ((uint32_t) *((str) + 0) << 24); \ + } +#endif /* VBOOT_REFERENCE_2SHA_PRIVATE_H_ */ diff --git a/firmware/2lib/include/2struct.h b/firmware/2lib/include/2struct.h new file mode 100644 index 0000000..3e2c422 --- /dev/null +++ b/firmware/2lib/include/2struct.h @@ -0,0 +1,621 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Vboot data structures. + * + * Note: Many of the structs have pairs of 32-bit fields and reserved fields. + * This is to be backwards-compatible with older verified boot data which used + * 64-bit fields (when we thought that hey, UEFI is 64-bit so all our fields + * should be too). + * + * Offsets should be padded to 32-bit boundaries, since some architectures + * have trouble with accessing unaligned integers. + */ + +#ifndef VBOOT_REFERENCE_2STRUCT_H_ +#define VBOOT_REFERENCE_2STRUCT_H_ + +#include "2api.h" +#include "2constants.h" +#include "2crypto.h" +#include "2sysincludes.h" + +/* Flags for vb2_shared_data.flags */ +enum vb2_shared_data_flags { + /* + * VB2_SD_FLAG_MANUAL_RECOVERY (1 << 0) is deprecated. This flag is not + * necessary since the introduction of persistent context (CL:1716351). + * With introducing vb2_boot_mode and differentiating between manual + * recovery and broken screen (CL:3274699), it is suggested to leverage + * the vb2_boot_mode instead to determine if the user has physically + * requested recovery. + */ + + /* Developer mode is enabled */ + VB2_SD_FLAG_DEV_MODE_ENABLED = (1 << 1), + + /* + * TODO: might be nice to add flags for why dev mode is enabled - via + * gbb, virtual dev switch, or forced on for testing. + */ + + /* Kernel keyblock was verified by signature (not just hash) */ + VB2_SD_FLAG_KERNEL_SIGNED = (1 << 2), + + /* Software sync needs to update EC-RO or EC-RW */ + VB2_SD_FLAG_ECSYNC_EC_RO = (1 << 3), + VB2_SD_FLAG_ECSYNC_EC_RW = (1 << 4), + + /* + * VB2_SD_FLAG_ECSYNC_PD_RW (1 << 5) is deprecated. Vboot no + * longer supports updating "PD" devices running CrOS EC code. + */ + + /* Software sync says EC running RW */ + VB2_SD_FLAG_ECSYNC_EC_IN_RW = (1 << 6), + + /* + * VB2_SD_FLAG_ECSYNC_PD_IN_RW (1 << 7) is deprecated. Vboot + * no longer supports updating "PD" devices running CrOS EC + * code. + */ + + /* Display is available on this boot */ + VB2_SD_FLAG_DISPLAY_AVAILABLE = (1 << 8), + + /* Mirrored hash (Hmir) is updated. */ + VB2_SD_FLAG_ECSYNC_HMIR_UPDATED = (1 << 9), +}; + +/* Flags for vb2_shared_data.status */ +enum vb2_shared_data_status { + /* Reinitialized NV data due to invalid checksum */ + VB2_SD_STATUS_NV_REINIT = (1 << 0), + + /* NV data has been initialized */ + VB2_SD_STATUS_NV_INIT = (1 << 1), + + /* Secure data initialized */ + VB2_SD_STATUS_SECDATA_FIRMWARE_INIT = (1 << 2), + + /* Chose a firmware slot */ + VB2_SD_STATUS_CHOSE_SLOT = (1 << 3), + + /* Secure data kernel version space initialized */ + VB2_SD_STATUS_SECDATA_KERNEL_INIT = (1 << 4), + + /* FWMP secure data initialized */ + VB2_SD_STATUS_SECDATA_FWMP_INIT = (1 << 5), + + /* EC Sync completed successfully */ + VB2_SD_STATUS_EC_SYNC_COMPLETE = (1 << 6), + + /* Have checked whether we are booting into recovery mode or not. */ + VB2_SD_STATUS_RECOVERY_DECIDED = (1 << 7), +}; + +/* "V2SD" = vb2_shared_data.magic */ +#define VB2_SHARED_DATA_MAGIC 0x44533256 + +/* Current version of vb2_shared_data struct */ +#define VB2_SHARED_DATA_VERSION_MAJOR 3 +#define VB2_SHARED_DATA_VERSION_MINOR 1 + +/* MAX_SIZE should not be changed without bumping up DATA_VERSION_MAJOR. */ +#define VB2_CONTEXT_MAX_SIZE 384 + +/* + * Data shared between vboot API calls. Stored at the start of the work + * buffer. + */ +struct vb2_shared_data { + /* Magic number for struct (VB2_SHARED_DATA_MAGIC) */ + uint32_t magic; + + /* Version of this structure */ + uint16_t struct_version_major; + uint16_t struct_version_minor; + + /* Public fields are stored in the context object */ + struct vb2_context ctx; + + /* Padding for adding future vb2_context fields */ + uint8_t padding[VB2_CONTEXT_MAX_SIZE - sizeof(struct vb2_context)]; + + /* Work buffer length in bytes. */ + uint32_t workbuf_size; + + /* + * Amount of work buffer used so far. Verified boot sub-calls use + * this to know where the unused work area starts. + */ + uint32_t workbuf_used; + + /* Flags; see enum vb2_shared_data_flags */ + uint32_t flags; + + /* + * Reason we are in recovery mode this boot (enum vb2_nv_recovery), or + * 0 if we aren't. + */ + uint32_t recovery_reason; + + /* Firmware slot used last boot (0=A, 1=B) */ + uint32_t last_fw_slot; + + /* Result of last boot (enum vb2_fw_result) */ + uint32_t last_fw_result; + + /* Firmware slot used this boot */ + uint32_t fw_slot; + + /* + * Version for this slot (top 16 bits = key, lower 16 bits = firmware). + * + * TODO: Make this a union to allow getting/setting those versions + * separately? + */ + uint32_t fw_version; + + /* Version from secdata_firmware (must be <= fw_version to boot). */ + uint32_t fw_version_secdata; + + /* + * Status flags for this boot; see enum vb2_shared_data_status. Status + * is "what we've done"; flags above are "decisions we've made". + */ + uint32_t status; + + /* Offset from start of this struct to GBB header */ + uint32_t gbb_offset; + + /********************************************************************** + * Data from kernel verification stage. + * + * TODO: shouldn't be part of the main struct, since that needlessly + * uses more memory during firmware verification. + */ + + /* + * Version for the current kernel (top 16 bits = key, lower 16 bits = + * kernel preamble). + * + * TODO: Make this a union to allow getting/setting those versions + * separately? + */ + uint32_t kernel_version; + + /* Version from secdata_kernel (must be <= kernel_version to boot) */ + uint32_t kernel_version_secdata; + + /********************************************************************** + * Temporary variables used during firmware verification. These don't + * really need to persist through to the OS, but there's nowhere else + * we can put them. + */ + + /* Offset of preamble from start of vblock */ + uint32_t vblock_preamble_offset; + + /* + * Offset and size of packed data key in work buffer. Size is 0 if + * data key is not stored in the work buffer. + */ + uint32_t data_key_offset; + uint32_t data_key_size; + + /* + * Offset and size of firmware preamble in work buffer. Size is 0 if + * preamble is not stored in the work buffer. + */ + uint32_t preamble_offset; + uint32_t preamble_size; + + /* + * Offset and size of hash context in work buffer. Size is 0 if + * hash context is not stored in the work buffer. + */ + uint32_t hash_offset; + uint32_t hash_size; + + /* + * Current tag we're hashing + * + * For new structs, this is the offset of the vb2_signature struct + * in the work buffer. + * + * TODO: rename to hash_sig_offset when vboot1 structs are deprecated. + */ + uint32_t hash_tag; + + /* Amount of data we still expect to hash */ + uint32_t hash_remaining_size; + + /********************************************************************** + * Temporary variables used during kernel verification. These don't + * really need to persist through to the OS, but there's nowhere else + * we can put them. + * + * TODO: make a union with the firmware verification temp variables, + * or make both of them workbuf-allocated sub-structs, so that we can + * overlap them so kernel variables don't bloat firmware verification + * stage memory requirements. + */ + + /* + * Formerly a pointer to vboot1 shared data header ("VBSD"). Caller + * may now export a copy of VBSD via vb2api_export_vbsd(). + * TODO: Remove this field and bump struct_version_major. + */ + uintptr_t reserved0; + + /* + * Offset and size of packed kernel key in work buffer. Size is 0 if + * subkey is not stored in the work buffer. Note that kernel key may + * be inside the firmware preamble. + */ + uint32_t kernel_key_offset; + uint32_t kernel_key_size; +} __attribute__((packed)); + +/****************************************************************************/ + +/* Signature at start of the GBB + * Note that if you compile in the signature as is, you are likely to break any + * tools that search for the signature. */ +#define VB2_GBB_SIGNATURE "$GBB" +#define VB2_GBB_SIGNATURE_SIZE 4 +#define VB2_GBB_XOR_CHARS "****" +/* TODO: can we write a macro to produce this at compile time? */ +#define VB2_GBB_XOR_SIGNATURE { 0x0e, 0x6d, 0x68, 0x68 } + +#define VB2_GBB_HWID_DIGEST_SIZE 32 + +/* VB2 GBB struct version */ +#define VB2_GBB_MAJOR_VER 1 +#define VB2_GBB_MINOR_VER 2 +/* v1.2 - added fields for sha256 digest of the HWID */ + +struct vb2_gbb_header { + /* Fields present in version 1.1 */ + uint8_t signature[VB2_GBB_SIGNATURE_SIZE]; /* VB2_GBB_SIGNATURE */ + uint16_t major_version; /* See VB2_GBB_MAJOR_VER */ + uint16_t minor_version; /* See VB2_GBB_MINOR_VER */ + uint32_t header_size; /* Size of GBB header in bytes */ + + /* Flags (see enum vb2_gbb_flag in 2gbb_flags.h) */ + vb2_gbb_flags_t flags; + + /* Offsets (from start of header) and sizes (in bytes) of components */ + uint32_t hwid_offset; /* HWID */ + uint32_t hwid_size; + uint32_t rootkey_offset; /* Root key */ + uint32_t rootkey_size; + uint32_t bmpfv_offset; /* BMP FV; deprecated in current FW */ + uint32_t bmpfv_size; + uint32_t recovery_key_offset; /* Recovery key */ + uint32_t recovery_key_size; + + /* Added in version 1.2 */ + uint8_t hwid_digest[VB2_GBB_HWID_DIGEST_SIZE]; /* SHA-256 of HWID */ + + /* Pad to match EXPECTED_VB2_GBB_HEADER_SIZE. Initialize to 0. */ + uint8_t pad[48]; +} __attribute__((packed)); + +#define EXPECTED_VB2_GBB_HEADER_SIZE 128 + +/* VB2_GBB_FLAGS_OFFSET exposed in 2constants.h */ +_Static_assert(VB2_GBB_FLAGS_OFFSET == offsetof(struct vb2_gbb_header, flags), + "VB2_GBB_FLAGS_OFFSET set incorrectly"); + +/****************************************************************************/ + +/* Packed public key data */ +struct vb2_packed_key { + /* Offset of key data from start of this struct */ + uint32_t key_offset; + uint32_t reserved0; + + /* Size of key data in bytes (NOT strength of key in bits) */ + uint32_t key_size; + uint32_t reserved1; + + /* Signature algorithm used by the key (enum vb2_crypto_algorithm) */ + uint32_t algorithm; + uint32_t reserved2; + + /* Key version */ + uint32_t key_version; + uint32_t reserved3; + + /* TODO: when redoing this struct, add a text description of the key */ +} __attribute__((packed)); + +#define EXPECTED_VB2_PACKED_KEY_SIZE 32 + +/****************************************************************************/ + +/* Signature data (a secure hash, possibly signed) */ +struct vb2_signature { + /* Offset of signature data from start of this struct */ + uint32_t sig_offset; + uint32_t reserved0; + + /* Size of signature data in bytes */ + uint32_t sig_size; + uint32_t reserved1; + + /* Size of the data block which was signed in bytes */ + uint32_t data_size; + uint32_t reserved2; +} __attribute__((packed)); + +#define EXPECTED_VB2_SIGNATURE_SIZE 24 + +/****************************************************************************/ + +#define VB2_KEYBLOCK_MAGIC "CHROMEOS" +#define VB2_KEYBLOCK_MAGIC_SIZE 8 + +#define VB2_KEYBLOCK_VERSION_MAJOR 2 +#define VB2_KEYBLOCK_VERSION_MINOR 1 + +/* + * Keyblock flags. + * + * The following flags set where the key is valid. Not used by firmware + * verification; only kernel verification. + */ +#define VB2_KEYBLOCK_FLAG_DEVELOPER_0 0x1 /* Developer switch off */ +#define VB2_KEYBLOCK_FLAG_DEVELOPER_1 0x2 /* Developer switch on */ +#define VB2_KEYBLOCK_FLAG_RECOVERY_0 0x4 /* Not recovery mode */ +#define VB2_KEYBLOCK_FLAG_RECOVERY_1 0x8 /* Recovery mode */ +#define VB2_KEYBLOCK_FLAG_MINIOS_0 0x10 /* Not miniOS boot */ +#define VB2_KEYBLOCK_FLAG_MINIOS_1 0x20 /* miniOS boot */ + +/* + * Keyblock, containing the public key used to sign some other chunk of data. + * + * This should be followed by: + * 1) The data_key key data, pointed to by data_key.key_offset. + * 2) The checksum data for (vb2_keyblock + data_key data), pointed to + * by keyblock_checksum.sig_offset. + * 3) The signature data for (vb2_keyblock + data_key data), pointed to + * by keyblock_signature.sig_offset. + */ +struct vb2_keyblock { + /* Magic number */ + uint8_t magic[VB2_KEYBLOCK_MAGIC_SIZE]; + + /* Version of this header format */ + uint32_t header_version_major; + uint32_t header_version_minor; + + /* + * Length of this entire keyblock, including keys, signatures, and + * padding, in bytes + */ + uint32_t keyblock_size; + uint32_t reserved0; + + /* + * Signature for this keyblock (header + data pointed to by data_key) + * For use with signed data keys + */ + struct vb2_signature keyblock_signature; + + /* + * SHA-512 hash for this keyblock (header + data pointed to by + * data_key) For use with unsigned data keys. + * + * Only supported for kernel keyblocks, not firmware keyblocks. + */ + struct vb2_signature keyblock_hash; + + /* Flags for key (VB2_KEYBLOCK_FLAG_*) */ + uint32_t keyblock_flags; + uint32_t reserved1; + + /* Key to verify the chunk of data */ + struct vb2_packed_key data_key; +} __attribute__((packed)); + +#define EXPECTED_VB2_KEYBLOCK_SIZE 112 + +/****************************************************************************/ + +/* + * Rollback protection currently uses a 32-bit value comprised of the bottom 16 + * bits of the (firmware or kernel) preamble version and the bottom 16 bits of + * the key version. So each of those versions is effectively limited to 16 + * bits even though they get stored in 32-bit fields. + */ +#define VB2_MAX_KEY_VERSION 0xffff +#define VB2_MAX_PREAMBLE_VERSION 0xffff + +/****************************************************************************/ + +/* Firmware preamble header */ +#define VB2_FIRMWARE_PREAMBLE_HEADER_VERSION_MAJOR 2 +#define VB2_FIRMWARE_PREAMBLE_HEADER_VERSION_MINOR 1 + +/* Flags for vb2_fw_preamble.flags */ +/* Use RO-normal firmware (deprecated; do not use) */ +#define VB2_FIRMWARE_PREAMBLE_USE_RO_NORMAL 0x00000001 +/* Do not allow use of any hardware crypto accelerators. + * (deprecated; use VB2_SECDATA_KERNEL_FLAG_HWCRYPTO_ALLOWED instead) + */ +#define VB2_FIRMWARE_PREAMBLE_DISALLOW_HWCRYPTO 0x00000002 + +/* Premable block for rewritable firmware, vboot1 version 2.1. + * + * The firmware preamble header should be followed by: + * 1) The kernel_subkey key data, pointed to by kernel_subkey.key_offset. + * 2) The signature data for the firmware body, pointed to by + * body_signature.sig_offset. + * 3) The signature data for (header + kernel_subkey data + body signature + * data), pointed to by preamble_signature.sig_offset. + */ +struct vb2_fw_preamble { + /* + * Size of this preamble, including keys, signatures, and padding, in + * bytes + */ + uint32_t preamble_size; + uint32_t reserved0; + + /* + * Signature for this preamble (header + kernel subkey + body + * signature) + */ + struct vb2_signature preamble_signature; + + /* Version of this header format */ + uint32_t header_version_major; + uint32_t header_version_minor; + + /* Firmware version */ + uint32_t firmware_version; + uint32_t reserved1; + + /* Key to verify kernel keyblock */ + struct vb2_packed_key kernel_subkey; + + /* Signature for the firmware body */ + struct vb2_signature body_signature; + + /* + * Fields added in header version 2.1. You must verify the header + * version before reading these fields! + */ + + /* + * Flags; see VB2_FIRMWARE_PREAMBLE_*. Readers should return 0 for + * header version < 2.1. + */ + uint32_t flags; +} __attribute__((packed)); + +#define EXPECTED_VB2_FW_PREAMBLE_SIZE 108 + +_Static_assert(EXPECTED_VB2_FW_PREAMBLE_SIZE == sizeof(struct vb2_fw_preamble), + "EXPECTED_VB2_FW_PREAMBLE_SIZE incorrect"); + +/****************************************************************************/ + +/* Kernel preamble header */ +#define VB2_KERNEL_PREAMBLE_HEADER_VERSION_MAJOR 2 +#define VB2_KERNEL_PREAMBLE_HEADER_VERSION_MINOR 2 + +/* Flags for vb2_kernel_preamble.flags */ +/* Kernel image type = bits 1:0 */ +#define VB2_KERNEL_PREAMBLE_KERNEL_TYPE_MASK 0x00000003 +#define VB2_KERNEL_PREAMBLE_KERNEL_TYPE_CROS 0 +#define VB2_KERNEL_PREAMBLE_KERNEL_TYPE_BOOTIMG 1 +#define VB2_KERNEL_PREAMBLE_KERNEL_TYPE_MULTIBOOT 2 +/* Kernel type 3 is reserved for future use */ + +/* + * Preamble block for kernel, version 2.2 + * + * This should be followed by: + * 1) The signature data for the kernel body, pointed to by + * body_signature.sig_offset. + * 2) The signature data for (vb2_kernel_preamble + body signature data), + * pointed to by preamble_signature.sig_offset. + * 3) The 16-bit vmlinuz header, which is used for reconstruction of + * vmlinuz image. + */ +struct vb2_kernel_preamble { + /* + * Size of this preamble, including keys, signatures, vmlinuz header, + * and padding, in bytes + */ + uint32_t preamble_size; + uint32_t reserved0; + + /* Signature for this preamble (header + body signature) */ + struct vb2_signature preamble_signature; + + /* Version of this header format */ + uint32_t header_version_major; + uint32_t header_version_minor; + + /* Kernel version */ + uint32_t kernel_version; + uint32_t reserved1; + + /* Load address for kernel body */ + uint64_t body_load_address; + /* TODO (vboot 2.1): we never used that */ + + /* Address of bootloader, after body is loaded at body_load_address */ + uint64_t bootloader_address; + /* TODO (vboot 2.1): should be a 32-bit offset */ + + /* Size of bootloader in bytes */ + uint32_t bootloader_size; + uint32_t reserved2; + + /* Signature for the kernel body */ + struct vb2_signature body_signature; + + /* + * TODO (vboot 2.1): fields for kernel offset and size. Right now the + * size is implicitly the same as the size of data signed by the body + * signature, and the offset is implicitly at the end of the preamble. + * But that forces us to pad the preamble to 64KB rather than just + * having a tiny preamble and an offset field. + */ + + /* + * Fields added in header version 2.1. You must verify the header + * version before reading these fields! + */ + + /* + * Address of 16-bit header for vmlinuz reassembly. Readers should + * return 0 for header version < 2.1. + */ + uint64_t vmlinuz_header_address; + + /* Size of 16-bit header for vmlinuz in bytes. Readers should return 0 + for header version < 2.1 */ + uint32_t vmlinuz_header_size; + uint32_t reserved3; + + /* + * Fields added in header version 2.2. You must verify the header + * version before reading these fields! + */ + + /* + * Flags; see VB2_KERNEL_PREAMBLE_*. Readers should return 0 for + * header version < 2.2. Flags field is currently defined as: + * [31:2] - Reserved (for future use) + * [1:0] - Kernel image type (0b00 - CrOS, + * 0b01 - bootimg, + * 0b10 - multiboot) + */ + uint32_t flags; +} __attribute__((packed)); + +#define EXPECTED_VB2_KERNEL_PREAMBLE_2_0_SIZE 96 +#define EXPECTED_VB2_KERNEL_PREAMBLE_2_1_SIZE 112 +#define EXPECTED_VB2_KERNEL_PREAMBLE_2_2_SIZE 116 + +_Static_assert(EXPECTED_VB2_KERNEL_PREAMBLE_2_0_SIZE + == offsetof(struct vb2_kernel_preamble, vmlinuz_header_address), + "EXPECTED_VB2_KERNEL_PREAMBLE_2_0_SIZE incorrect"); + +_Static_assert(EXPECTED_VB2_KERNEL_PREAMBLE_2_1_SIZE + == offsetof(struct vb2_kernel_preamble, flags), + "EXPECTED_VB2_KERNEL_PREAMBLE_2_1_SIZE incorrect"); + +_Static_assert(EXPECTED_VB2_KERNEL_PREAMBLE_2_2_SIZE + == sizeof(struct vb2_kernel_preamble), + "EXPECTED_VB2_KERNEL_PREAMBLE_2_2_SIZE incorrect"); + +#endif /* VBOOT_REFERENCE_2STRUCT_H_ */ diff --git a/firmware/2lib/include/2sysincludes.h b/firmware/2lib/include/2sysincludes.h new file mode 100644 index 0000000..1e671e9 --- /dev/null +++ b/firmware/2lib/include/2sysincludes.h @@ -0,0 +1,24 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* + * System includes for vboot reference library. This is the ONLY + * place in firmware/ where system headers may be included via + * #include <...>, so that there's only one place that needs to be + * fixed up for platforms which don't have all the system includes. + */ + +#ifndef VBOOT_REFERENCE_2SYSINCLUDES_H_ +#define VBOOT_REFERENCE_2SYSINCLUDES_H_ + +#include +#include /* For PRIu64 */ +#include +#include +#include +#include +#include + +#endif /* VBOOT_REFERENCE_2SYSINCLUDES_H_ */ diff --git a/firmware/2lib/include/2tpm_bootmode.h b/firmware/2lib/include/2tpm_bootmode.h new file mode 100644 index 0000000..63f247d --- /dev/null +++ b/firmware/2lib/include/2tpm_bootmode.h @@ -0,0 +1,21 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Functions for updating the TPM state with the status of boot path. + */ + +#ifndef VBOOT_REFERENCE_2TPM_BOOTMODE_H_ +#define VBOOT_REFERENCE_2TPM_BOOTMODE_H_ + +#include "2api.h" + +/** + * Return digest indicating the boot state + * + * @param ctx Vboot context + * @return Pointer to sha1 digest of size VB2_SHA1_DIGEST_SIZE + */ +const uint8_t *vb2_get_boot_state_digest(struct vb2_context *ctx); + +#endif /* VBOOT_REFERENCE_2TPM_BOOTMODE_H_ */ diff --git a/firmware/README b/firmware/README new file mode 100644 index 0000000..e5d5256 --- /dev/null +++ b/firmware/README @@ -0,0 +1,36 @@ + +Here's what's what in the firmware/ directory. + +include/ +lib/ + + These are the original structures and APIs used in the earliest + Chromebooks and continuing through 2014. It never had a version as such to + begin with, but we now refer to this implementation as "vboot1" or + "vboot version 1.0". + +linktest/ +stub/ + + These are stubs used to link the vboot1 libraries into host-side test + executables so we can run some tests on the build machine instead of a + Chromebook. + +2lib/ + + In 2014 we began work on a new vboot API. The first step was just a + refactoring and renaming of the verification API. The public functions and + external headers that are exported for use by the Chrome OS firmware (or + anything else that wants to use vboot) live in here. The internal + structures and implementations go elsewhere. + +lib20/ + + This is an early implementation of the public (2lib/) API. It is + binary-compatible with vboot1, so although the interface details are + different, any existing on-device structures or signatures created by the + vboot1 tools can be validated using this implementation. + + This was deployed slightly before it was ready. That's not a problem, + thanks to the binary compatibility, but this directory will be abandoned + Real Soon Now, except for the product support branches. diff --git a/firmware/include/OWNERS b/firmware/include/OWNERS new file mode 100644 index 0000000..b8919e0 --- /dev/null +++ b/firmware/include/OWNERS @@ -0,0 +1 @@ +per-file tlcl*, tpm*, tss* = apronin@chromium.org, rspangler@chromium.org, vbendeb@chromium.org diff --git a/firmware/include/gpt.h b/firmware/include/gpt.h new file mode 100644 index 0000000..9f50509 --- /dev/null +++ b/firmware/include/gpt.h @@ -0,0 +1,141 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Defines UEFI related structure. See more details in the UEFI spec. + * + * To download UEFI standard, please visit UEFI homepage: + * http://www.uefi.org/ + */ + +#ifndef VBOOT_REFERENCE_CGPTLIB_GPT_H_ +#define VBOOT_REFERENCE_CGPTLIB_GPT_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* From the specification */ +#define GPT_HEADER_SIGNATURE_SIZE 8 +#define GPT_HEADER_REVISION 0x00010000 +#define GPT_HEADER_SIGNATURE "EFI PART" + +/* From https://chromium-review.googlesource.com/31264 */ +#define GPT_HEADER_SIGNATURE2 "CHROMEOS" + +/* From http://crosbug.com/p/52595 */ +#define GPT_HEADER_SIGNATURE_IGNORED "IGNOREME" + +/* + * The first 3 numbers should be stored in network-endian format according to + * the GUID RFC. The UEFI spec appendix A claims they should be stored in + * little-endian format. But they need to be _displayed_ in network-endian + * format, which is also how they're documented in the specs. + * + * Since what we have here are little-endian constants, they're byte-swapped + * from the normal display order. + */ +#define GPT_ENT_TYPE_UNUSED \ + {{{0x00000000,0x0000,0x0000,0x00,0x00,{0x00,0x00,0x00,0x00,0x00,0x00}}}} +#define GPT_ENT_TYPE_EFI \ + {{{0xc12a7328,0xf81f,0x11d2,0xba,0x4b,{0x00,0xa0,0xc9,0x3e,0xc9,0x3b}}}} +#define GPT_ENT_TYPE_CHROMEOS_FIRMWARE \ + {{{0xcab6e88e,0xabf3,0x4102,0xa0,0x7a,{0xd4,0xbb,0x9b,0xe3,0xc1,0xd3}}}} +#define GPT_ENT_TYPE_CHROMEOS_KERNEL \ + {{{0xfe3a2a5d,0x4f32,0x41a7,0xb7,0x25,{0xac,0xcc,0x32,0x85,0xa3,0x09}}}} +#define GPT_ENT_TYPE_CHROMEOS_ROOTFS \ + {{{0x3cb8e202,0x3b7e,0x47dd,0x8a,0x3c,{0x7f,0xf2,0xa1,0x3c,0xfc,0xec}}}} +#define GPT_ENT_TYPE_CHROMEOS_RESERVED \ + {{{0x2e0a753d,0x9e48,0x43b0,0x83,0x37,{0xb1,0x51,0x92,0xcb,0x1b,0x5e}}}} +#define GPT_ENT_TYPE_BASIC_DATA \ + {{{0xebd0a0a2,0xb9e5,0x4433,0x87,0xc0,{0x68,0xb6,0xb7,0x26,0x99,0xc7}}}} +#define GPT_ENT_TYPE_LINUX_FS \ + {{{0x0fc63daf,0x8483,0x4772,0x8e,0x79,{0x3d,0x69,0xd8,0x47,0x7d,0xe4}}}} +#define GPT_ENT_TYPE_CHROMEOS_MINIOS \ + {{{0x09845860,0x705f,0x4bb5,0xb1,0x6c,{0x8a,0x8a,0x09,0x9c,0xaf,0x52}}}} +#define GPT_ENT_TYPE_CHROMEOS_HIBERNATE \ + {{{0x3f0f8318,0xf146,0x4e6b,0x82,0x22,{0xc2,0x8c,0x8f,0x02,0xe0,0xd5}}}} + +#define UUID_NODE_LEN 6 +#define GUID_SIZE 16 + +/* GUID definition. Defined in appendix A of UEFI standard. */ +typedef struct { + union { + struct { + uint32_t time_low; + uint16_t time_mid; + uint16_t time_high_and_version; + uint8_t clock_seq_high_and_reserved; + uint8_t clock_seq_low; + uint8_t node[UUID_NODE_LEN]; + } Uuid; + uint8_t raw[GUID_SIZE]; + } u; +} __attribute__((packed)) Guid; + +#define GUID_EXPECTED_SIZE GUID_SIZE + +/* + * GPT header defines how many partitions exist on a drive and sectors managed. + * For every drive device, there are 2 headers, primary and secondary. Most of + * the fields are duplicates except my_lba and entries_lba. + * + * You may find more details in chapter 5 of the UEFI standard. + */ +typedef struct { + char signature[GPT_HEADER_SIGNATURE_SIZE]; + uint32_t revision; + uint32_t size; + uint32_t header_crc32; + uint32_t reserved_zero; + uint64_t my_lba; + uint64_t alternate_lba; + uint64_t first_usable_lba; + uint64_t last_usable_lba; + Guid disk_uuid; + uint64_t entries_lba; + uint32_t number_of_entries; + uint32_t size_of_entry; + uint32_t entries_crc32; + /* Remainder of sector is reserved and should be 0 */ +} __attribute__((packed)) GptHeader; + +#define GPTHEADER_EXPECTED_SIZE 92 + +/* + * GPT partition entry defines the starting and ending LBAs of a partition. It + * also contains the unique GUID, type, and attribute bits. + * + * You may find more details in chapter 5 of the UEFI standard. + */ +typedef struct { + Guid type; + Guid unique; + uint64_t starting_lba; + uint64_t ending_lba; + union { + struct { + uint8_t required:1; + uint8_t efi_ignore:1; + uint8_t legacy_boot:1; + uint8_t reserved1:5; + uint8_t reserved2; + uint16_t reserved[2]; + uint16_t gpt_att; + } __attribute__((packed)) fields; + uint64_t whole; + } attrs; + uint16_t name[36]; /* UTF-16 encoded partition name */ + /* Remainder of entry is reserved and should be 0 */ +} __attribute__((packed)) GptEntry; + +#define GPTENTRY_EXPECTED_SIZE 128 + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* VBOOT_REFERENCE_CGPTLIB_GPT_H_ */ diff --git a/firmware/include/gpt_misc.h b/firmware/include/gpt_misc.h new file mode 100644 index 0000000..aa46094 --- /dev/null +++ b/firmware/include/gpt_misc.h @@ -0,0 +1,220 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_GPT_MISC_H_ +#define VBOOT_REFERENCE_GPT_MISC_H_ + +#include "gpt.h" +#include "vboot_api.h" + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +enum { + GPT_SUCCESS = 0, + GPT_ERROR_NO_VALID_KERNEL, + GPT_ERROR_INVALID_HEADERS, + GPT_ERROR_INVALID_ENTRIES, + GPT_ERROR_INVALID_SECTOR_SIZE, + GPT_ERROR_INVALID_SECTOR_NUMBER, + GPT_ERROR_INVALID_UPDATE_TYPE, + GPT_ERROR_CRC_CORRUPTED, + GPT_ERROR_OUT_OF_REGION, + GPT_ERROR_START_LBA_OVERLAP, + GPT_ERROR_END_LBA_OVERLAP, + GPT_ERROR_DUP_GUID, + GPT_ERROR_INVALID_FLASH_GEOMETRY, + GPT_ERROR_NO_SUCH_ENTRY, + /* Number of errors */ + GPT_ERROR_COUNT +}; + +/* Bit masks for GptData.modified field. */ +#define GPT_MODIFIED_HEADER1 0x01 +#define GPT_MODIFIED_HEADER2 0x02 +#define GPT_MODIFIED_ENTRIES1 0x04 +#define GPT_MODIFIED_ENTRIES2 0x08 + +/* + * The 'update_type' of GptUpdateKernelEntry(). We expose TRY and BAD only + * because those are what verified boot needs. For more precise control on GPT + * attribute bits, please refer to gpt_internal.h. + */ +enum { + /* + * System will be trying to boot the currently selected kernel + * partition. Update its try count if necessary. + */ + GPT_UPDATE_ENTRY_TRY = 1, + /* + * The currently selected kernel partition failed validation. Mark + * entry as invalid. + */ + GPT_UPDATE_ENTRY_BAD = 2, + /* + * Used for fastboot mode. If kernel partition slot is marked active, + * its GPT entry is marked with S1,P2,T0. + */ + GPT_UPDATE_ENTRY_ACTIVE = 3, + /* + * Used for fastboot mode. If kernel partition slot is marked invalid, + * its GPT entry is marked with S0,P0,T0. + */ + GPT_UPDATE_ENTRY_INVALID = 4, +}; + +/* If this bit is 1, the GPT is stored in another from the streaming data */ +#define GPT_FLAG_EXTERNAL 0x1 + +/* + * A note about stored_on_device and gpt_drive_sectors: + * + * This code is used by both the "cgpt" utility and depthcharge/vboot. ATM, + * depthcharge does not have logic to properly setup stored_on_device and + * gpt_drive_sectors, but it does do a memset(gpt, 0, sizeof(GptData)). And so, + * GPT_STORED_ON_DEVICE should be 0 to make stored_on_device compatible with + * present behavior. At the same time, in vboot_kernel:LoadKernel(), and + * cgpt_common:GptLoad(), we need to have simple shims to set gpt_drive_sectors + * to drive_sectors. + * + * TODO(namnguyen): Remove those shims when the firmware can set these fields. + */ +typedef struct { + /* Fill in the following fields before calling GptInit() */ + /* GPT primary header, from sector 1 of disk (size: 512 bytes) */ + uint8_t *primary_header; + /* GPT secondary header, from last sector of disk (size: 512 bytes) */ + uint8_t *secondary_header; + /* Primary GPT table, follows primary header */ + uint8_t *primary_entries; + /* Secondary GPT table, precedes secondary header */ + uint8_t *secondary_entries; + /* Size of a LBA sector, in bytes */ + uint32_t sector_bytes; + /* Size of drive (that the partitions are on) in LBA sectors */ + uint64_t streaming_drive_sectors; + /* Size of the device that holds the GPT structures, 512-byte sectors */ + uint64_t gpt_drive_sectors; + /* Flags */ + uint32_t flags; + + /* Outputs */ + /* Which inputs have been modified? GPT_MODIFIED_* */ + uint8_t modified; + /* + * The current chromeos kernel index in partition table. -1 means not + * found on drive. Note that GPT partition numbers are traditionally + * 1-based, but we're using a zero-based index here. + */ + int current_kernel; + + /* Internal variables */ + uint8_t valid_headers, valid_entries, ignored; + int current_priority; +} GptData; + +/** + * Initializes the GPT data structure's internal state. + * + * The following fields must be filled before calling this function: + * + * primary_header + * secondary_header + * primary_entries + * secondary_entries + * sector_bytes + * drive_sectors + * stored_on_device + * gpt_device_sectors + * + * On return the modified field may be set, if the GPT data has been modified + * and should be written to disk. + * + * Returns GPT_SUCCESS if successful, non-zero if error: + * GPT_ERROR_INVALID_HEADERS, both partition table headers are invalid, enters + * recovery mode, + * GPT_ERROR_INVALID_ENTRIES, both partition table entries are invalid, enters + * recovery mode, + * GPT_ERROR_INVALID_SECTOR_SIZE, size of a sector is not supported, + * GPT_ERROR_INVALID_SECTOR_NUMBER, number of sectors in drive is invalid (too + * small) */ +int GptInit(GptData *gpt); + +/** + * Return the nth instance of parition entry matching the partition type guid + * from the gpt table. Instance value starts from 0. If the entry is not found, + * it returns NULL. + */ +GptEntry *GptFindNthEntry(GptData *gpt, const Guid *guid, unsigned int n); + +/** + * Allocate and read GPT data from the drive. The sector_bytes and + * drive_sectors fields should be filled on input. The primary and secondary + * header and entries are filled on output. + * + * Returns 0 if successful, 1 if error. + */ +int AllocAndReadGptData(VbExDiskHandle_t disk_handle, GptData *gptdata); + +/** + * Write any changes for the GPT data back to the drive, then free the buffers. + */ +int WriteAndFreeGptData(VbExDiskHandle_t disk_handle, GptData *gptdata); + +/** + * Return 1 if the entry is unused, 0 if it is used. + */ +int IsUnusedEntry(const GptEntry *e); + +/** + * Return size(in lba) of a partition represented by given GPT entry. + */ +size_t GptGetEntrySizeLba(const GptEntry *e); + +/** + * Return size(in bytes) of a partition represented by given GPT entry. + */ +size_t GptGetEntrySizeBytes(const GptData *gpt, const GptEntry *e); + +/** + * Updates the kernel entry with the specified index, using the specified type + * of update (GPT_UPDATE_ENTRY_*). + * + * On return the modified field may be set, if the GPT data has been modified + * and should be written to disk. + * + * Returns GPT_SUCCESS if successful, else + * GPT_ERROR_INVALID_UPDATE_TYPE, invalid 'update_type' is given. + */ +int GptUpdateKernelWithEntry(GptData *gpt, GptEntry *e, uint32_t update_type); + +/** + * Updates the kernel entry identified by current_kernel field. If + * current_kernel is not set it returns an error. + * + * Returns GPT_SUCCESS if successful, else + * GPT_ERROR_INVALID_UPDATE_TYPE, invalid 'update_type' is given. + */ +int GptUpdateKernelEntry(GptData *gpt, uint32_t update_type); + +/* Getters and setters for partition attribute fields. */ + +int GetEntryRequired(const GptEntry *e); +int GetEntryLegacyBoot(const GptEntry *e); +int GetEntrySuccessful(const GptEntry *e); +int GetEntryPriority(const GptEntry *e); +int GetEntryTries(const GptEntry *e); +void SetEntryRequired(GptEntry *e, int required); +void SetEntryLegacyBoot(GptEntry *e, int legacy_boot); +void SetEntrySuccessful(GptEntry *e, int successful); +void SetEntryPriority(GptEntry *e, int priority); +void SetEntryTries(GptEntry *e, int tries); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* VBOOT_REFERENCE_GPT_MISC_H_ */ diff --git a/firmware/include/tlcl.h b/firmware/include/tlcl.h new file mode 100644 index 0000000..d33fa47 --- /dev/null +++ b/firmware/include/tlcl.h @@ -0,0 +1,325 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * TPM Lightweight Command Library. + * + * A low-level library for interfacing to TPM hardware or an emulator. + */ + +#ifndef VBOOT_REFERENCE_TLCL_H_ +#define VBOOT_REFERENCE_TLCL_H_ + +#include +#include + +#include "tss_constants.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*****************************************************************************/ +/* Functions implemented in tlcl.c */ + +/** + * Call this first. Returns 0 if success, nonzero if error. + */ +uint32_t TlclLibInit(void); + +/** + * Call this on shutdown. Returns 0 if success, nonzero if error. + */ +uint32_t TlclLibClose(void); + +/* Low-level operations */ + +/** + * Perform a raw TPM request/response transaction. + */ +uint32_t TlclSendReceive(const uint8_t *request, uint8_t *response, + int max_length); + +/** + * Return the size of a TPM request or response packet. + */ +int TlclPacketSize(const uint8_t *packet); + +/* Commands */ + +/** + * Send a TPM_Startup(ST_CLEAR). The TPM error code is returned (0 for + * success). + */ +uint32_t TlclStartup(void); + +/** + * Save the TPM state. Normally done by the kernel before a suspend, included + * here for tests. The TPM error code is returned (0 for success). + */ +uint32_t TlclSaveState(void); + +/** + * Resume by sending a TPM_Startup(ST_STATE). The TPM error code is returned + * (0 for success). + */ +uint32_t TlclResume(void); + +/** + * Run the self test. + * + * Note---this is synchronous. To run this in parallel with other firmware, + * use ContinueSelfTest(). The TPM error code is returned. + */ +uint32_t TlclSelfTestFull(void); + +/** + * Run the self test in the background. + */ +uint32_t TlclContinueSelfTest(void); + +/** + * Define a space with permission [perm]. [index] is the index for the space, + * [size] the usable data size. The TPM error code is returned. + */ +uint32_t TlclDefineSpace(uint32_t index, uint32_t perm, uint32_t size); + +/** + * Define a space using owner authorization secret [owner_auth]. The space is + * set up to have permission [perm]. [index] is the index for the space, [size] + * the usable data size. Optional auth policy (such as PCR selections) can be + * passed via [auth_policy]. The TPM error code is returned. + */ +uint32_t TlclDefineSpaceEx(const uint8_t* owner_auth, uint32_t owner_auth_size, + uint32_t index, uint32_t perm, uint32_t size, + const void* auth_policy, uint32_t auth_policy_size); + +/** + * Initializes [auth_policy] to require PCR binding of the given + * [pcr_selection_bitmap]. The PCR values are passed in the [pcr_values] + * parameter with each entry corresponding to the sequence of indexes that + * corresponds to the bits that are set in [pcr_selection_bitmap]. Returns + * TPM_SUCCESS if successful, TPM_E_BUFFER_SIZE if the provided buffer is too + * short. The actual size of the policy will be set in [auth_policy_size] upon + * return, also for the case of insufficient buffer size. + */ +uint32_t TlclInitNvAuthPolicy(uint32_t pcr_selection_bitmap, + const uint8_t pcr_values[][TPM_PCR_DIGEST], + void* auth_policy, uint32_t* auth_policy_size); + +/** + * Write [length] bytes of [data] to space at [index]. The TPM error code is + * returned. + */ +uint32_t TlclWrite(uint32_t index, const void *data, uint32_t length); + +/** + * Read [length] bytes from space at [index] into [data]. The TPM error code + * is returned. + */ +uint32_t TlclRead(uint32_t index, void *data, uint32_t length); + +/** + * Read PCR at [index] into [data]. [length] must be TPM_PCR_DIGEST or + * larger. The TPM error code is returned. + */ +uint32_t TlclPCRRead(uint32_t index, void *data, uint32_t length); + +/** + * Write-lock space at [index]. The TPM error code is returned. + */ +uint32_t TlclWriteLock(uint32_t index); + +/** + * Read-lock space at [index]. The TPM error code is returned. + */ +uint32_t TlclReadLock(uint32_t index); + +/** + * Assert physical presence in software. The TPM error code is returned. + */ +uint32_t TlclAssertPhysicalPresence(void); + +/** + * Enable the physical presence command. The TPM error code is returned. + */ +uint32_t TlclPhysicalPresenceCMDEnable(void); + +/** + * Finalize the physical presence settings: sofware PP is enabled, hardware PP + * is disabled, and the lifetime lock is set. The TPM error code is returned. + */ +uint32_t TlclFinalizePhysicalPresence(void); + +uint32_t TlclAssertPhysicalPresenceResult(void); + +/** + * Turn off physical presence and locks it off until next reboot. The TPM + * error code is returned. + */ +uint32_t TlclLockPhysicalPresence(void); + +/** + * Set the nvLocked bit. The TPM error code is returned. + */ +uint32_t TlclSetNvLocked(void); + +/** + * Return 1 if the TPM is owned, 0 otherwise. + */ +int TlclIsOwned(void); + +/** + * Issue a ForceClear. The TPM error code is returned. + */ +uint32_t TlclForceClear(void); + +/** + * Issue a PhysicalEnable. The TPM error code is returned. + */ +uint32_t TlclSetEnable(void); + +/** + * Issue a PhysicalDisable. The TPM error code is returned. + */ +uint32_t TlclClearEnable(void); + +/** + * Issue a SetDeactivated. Pass 0 to activate. Returns result code. + */ +uint32_t TlclSetDeactivated(uint8_t flag); + +/** + * Get flags of interest. Pointers for flags you aren't interested in may + * be NULL. The TPM error code is returned. + */ +uint32_t TlclGetFlags(uint8_t *disable, uint8_t *deactivated, + uint8_t *nvlocked); + +/** + * Set the bGlobalLock flag, which only a reboot can clear. The TPM error + * code is returned. + */ +uint32_t TlclSetGlobalLock(void); + +/** + * Perform a TPM_Extend. + */ +uint32_t TlclExtend(int pcr_num, const uint8_t *in_digest, uint8_t *out_digest); + +/** + * Get the permission bits for the NVRAM space with |index|. + */ +uint32_t TlclGetPermissions(uint32_t index, uint32_t *permissions); + +/** + * Get the public information about the NVRAM space identified by |index|. All + * other parameters are filled in with the respective information. + * |auth_policy_size| is both an input an output parameter. It should contain + * the available buffer size in |auth_policy| and will be updated to indicate + * the size of the filled in auth policy upon return. If the buffer size is not + * sufficient, the return value will be TPM_E_BUFFER_SIZE. + */ +uint32_t TlclGetSpaceInfo(uint32_t index, uint32_t *attributes, uint32_t *size, + void* auth_policy, uint32_t* auth_policy_size); + +/** + * Get the entire set of permanent flags. + */ +uint32_t TlclGetPermanentFlags(TPM_PERMANENT_FLAGS *pflags); + +/** + * Get the entire set of volatile (ST_CLEAR) flags. + */ +uint32_t TlclGetSTClearFlags(TPM_STCLEAR_FLAGS *pflags); + +/** + * Get the ownership flag. The TPM error code is returned. + */ +uint32_t TlclGetOwnership(uint8_t *owned); + +/** + * Request [length] bytes from TPM RNG to be stored in [data]. Actual number of + * bytes read is stored in [size]. The TPM error code is returned. + */ +uint32_t TlclGetRandom(uint8_t *data, uint32_t length, uint32_t *size); + +/** + * Requests version information from the TPM. + * If vendor_specific_buf_size != NULL, requests also the vendor-specific + * variable-length part of the version: + * if vendor_specific_buf == NULL, determines its size and returns in + * *vendor_specific_buf_size; + * if vendor_specific_buf != NULL, fills the buffer until either the + * end of the vendor specific data or the end of the buffer, sets + * *vendor_specific_buf_size to the length of the filled data. + */ +uint32_t TlclGetVersion(uint32_t* vendor, uint64_t* firmware_version, + uint8_t* vendor_specific_buf, + size_t* vendor_specific_buf_size); + +/** + * Issues the IFX specific FieldUpgradeInfoRequest2 TPM_FieldUpgrade subcommand + * and fills in [info] with results. + */ +uint32_t TlclIFXFieldUpgradeInfo(TPM_IFX_FIELDUPGRADEINFO *info); + +#ifdef CHROMEOS_ENVIRONMENT + +/** + * Undefine the space. [index] is the index for the space. The TPM error code + * is returned. + */ +uint32_t TlclUndefineSpace(uint32_t index); + +/** + * Undefine a space. For TPM 2.0, it will use platform authrorization when the + * space is created by TPMA_NV_PLATFORMCREATE flag, or use owner authorization + * secret [owner_auth] otherwise. For TPM 1.2, only avaible when physical + * presence is set or TPM_PERMANENT_FLAGS->nvLocked is not set. + * [index] is the index for the space + * The TPM error code is returned. + */ +uint32_t TlclUndefineSpaceEx(const uint8_t* owner_auth, + uint32_t owner_auth_size, + uint32_t index); + +#ifndef TPM2_MODE + +/** + * Read the public half of the EK. + */ +uint32_t TlclReadPubek(uint32_t* public_exponent, + uint8_t* modulus, + uint32_t* modulus_size); + +/** + * Takes ownership of the TPM. [enc_owner_auth] and [enc_srk_auth] are the owner + * and SRK authorization secrets encrypted under the endorsement key. The clear + * text [owner_auth] needs to be passed as well for command auth. + */ +uint32_t TlclTakeOwnership(uint8_t enc_owner_auth[TPM_RSA_2048_LEN], + uint8_t enc_srk_auth[TPM_RSA_2048_LEN], + uint8_t owner_auth[TPM_AUTH_DATA_LEN]); + +/** + * Create a delegation family with the specified [family_label]. + */ +uint32_t TlclCreateDelegationFamily(uint8_t family_label); + +/** + * Read the delegation family table. Entries are stored in [table]. The size of + * the family table array must be specified in [table_size]. [table_size] gets + * updated to indicate actual number of table entries available. + */ +uint32_t TlclReadDelegationFamilyTable(TPM_FAMILY_TABLE_ENTRY *table, + uint32_t* table_size); + +#endif /* TPM2_MODE */ +#endif /* CHROMEOS_ENVIRONMENT */ + +#ifdef __cplusplus +} +#endif + +#endif /* VBOOT_REFERENCE_TLCL_H_ */ diff --git a/firmware/include/tpm1_tss_constants.h b/firmware/include/tpm1_tss_constants.h new file mode 100644 index 0000000..6edc491 --- /dev/null +++ b/firmware/include/tpm1_tss_constants.h @@ -0,0 +1,262 @@ +/* Copyright 2016 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Some TPM constants and type definitions for standalone compilation for use + * in the firmware + */ + +#ifndef VBOOT_REFERENCE_TPM1_TSS_CONSTANTS_H_ +#define VBOOT_REFERENCE_TPM1_TSS_CONSTANTS_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#define TPM_MAX_COMMAND_SIZE 4096 +#define TPM_LARGE_ENOUGH_COMMAND_SIZE 256 /* saves space in the firmware */ +#define TPM_PUBEK_SIZE 256 +#define TPM_PCR_DIGEST 20 + +#define TPM_NV_INDEX0 ((uint32_t) 0x00000000) +#define TPM_NV_INDEX_LOCK ((uint32_t) 0xffffffff) +#define TPM_NV_INDEX_TRIAL ((uint32_t) 0x0000f004) + +#define TPM_NV_PER_READ_STCLEAR (((uint32_t)1) << 31) +#define TPM_NV_PER_AUTHREAD (((uint32_t)1) << 18) +#define TPM_NV_PER_OWNERREAD (((uint32_t)1) << 17) +#define TPM_NV_PER_PPREAD (((uint32_t)1) << 16) +#define TPM_NV_PER_GLOBALLOCK (((uint32_t)1) << 15) +#define TPM_NV_PER_WRITE_STCLEAR (((uint32_t)1) << 14) +#define TPM_NV_PER_WRITEDEFINE (((uint32_t)1) << 13) +#define TPM_NV_PER_WRITEALL (((uint32_t)1) << 12) +#define TPM_NV_PER_AUTHWRITE (((uint32_t)1) << 2) +#define TPM_NV_PER_OWNERWRITE (((uint32_t)1) << 1) +#define TPM_NV_PER_PPWRITE (((uint32_t)1) << 0) + +#define TPM_TAG_NV_ATTRIBUTES ((uint16_t) 0x0017) +#define TPM_TAG_NV_DATA_PUBLIC ((uint16_t) 0x0018) +#define TPM_TAG_KEY12 ((uint16_t) 0x0028) + +#define TPM_TAG_RQU_COMMAND ((uint16_t) 0xc1) +#define TPM_TAG_RQU_AUTH1_COMMAND ((uint16_t) 0xc2) +#define TPM_TAG_RQU_AUTH2_COMMAND ((uint16_t) 0xc3) + +#define TPM_TAG_RSP_COMMAND ((uint16_t) 0xc4) +#define TPM_TAG_RSP_AUTH1_COMMAND ((uint16_t) 0xc5) +#define TPM_TAG_RSP_AUTH2_COMMAND ((uint16_t) 0xc6) + +typedef uint8_t TSS_BOOL; +typedef uint8_t TPM_BOOL; +typedef uint16_t TPM_TAG; +typedef uint16_t TPM_STRUCTURE_TAG; +typedef uint32_t TPM_NV_INDEX; +typedef uint32_t TPM_NV_PER_ATTRIBUTES; +typedef uint8_t TPM_LOCALITY_SELECTION; +typedef uint32_t TPM_COMMAND_CODE; +typedef uint16_t TPM_PHYSICAL_PRESENCE; +typedef uint16_t TPM_STARTUP_TYPE; +typedef uint32_t TPM_CAPABILITY_AREA; +typedef uint8_t TPM_FAMILY_LABEL; +typedef uint32_t TPM_FAMILY_ID; +typedef uint32_t TPM_FAMILY_VERIFICATION; +typedef uint32_t TPM_FAMILY_FLAGS; + +#define TPM_CAP_FLAG ((uint32_t) 0x00000004) +#define TPM_CAP_FLAG_PERMANENT ((uint32_t) 0x00000108) +#define TPM_CAP_FLAG_VOLATILE ((uint32_t) 0x00000109) + +#define TPM_CAP_PROPERTY ((uint32_t) 0x00000005) +#define TPM_CAP_PROP_OWNER ((uint32_t) 0x00000111) +#define TPM_CAP_NV_INDEX ((uint32_t) 0x00000011) +#define TPM_CAP_GET_VERSION_VAL ((uint32_t) 0x0000001a) + +#define TPM_AUTH_ALWAYS ((uint8_t) 0x01) + +#define TPM_KEY_USAGE_STORAGE ((uint16_t) 0x0011) + +#define TPM_ALG_RSA ((uint16_t)0x0001) + +#define TPM_ES_RSAESOAEP_SHA1_MGF1 ((uint16_t)0x0003) + +#define TPM_SS_NONE ((uint16_t)0x0001) + +#define TPM_PID_OWNER ((uint16_t) 0x0005) + +#define TPM_ET_OWNER ((uint32_t) 0x02) + +#define TPM_FAMILY_CREATE ((uint32_t) 0x00000001) + +#define TPM_ST_CLEAR ((uint16_t) 0x0001) +#define TPM_ST_STATE ((uint16_t) 0x0002) +#define TPM_ST_DEACTIVATED ((uint16_t) 0x0003) + +#define TPM_LOC_FOUR (((uint32_t)1)<<4) +#define TPM_LOC_THREE (((uint32_t)1)<<3) +#define TPM_LOC_TWO (((uint32_t)1)<<2) +#define TPM_LOC_ONE (((uint32_t)1)<<1) +#define TPM_LOC_ZERO (((uint32_t)1)<<0) + +#define TPM_ALL_LOCALITIES (TPM_LOC_ZERO | TPM_LOC_ONE | TPM_LOC_TWO \ + | TPM_LOC_THREE | TPM_LOC_FOUR) /* 0x1f */ + +#define TPM_PHYSICAL_PRESENCE_LOCK ((uint16_t) 0x0004) +#define TPM_PHYSICAL_PRESENCE_PRESENT ((uint16_t) 0x0008) +#define TPM_PHYSICAL_PRESENCE_NOTPRESENT ((uint16_t) 0x0010) +#define TPM_PHYSICAL_PRESENCE_CMD_ENABLE ((uint16_t) 0x0020) +#define TPM_PHYSICAL_PRESENCE_HW_ENABLE ((uint16_t) 0x0040) +#define TPM_PHYSICAL_PRESENCE_LIFETIME_LOCK ((uint16_t) 0x0080) +#define TPM_PHYSICAL_PRESENCE_CMD_DISABLE ((uint16_t) 0x0100) +#define TPM_PHYSICAL_PRESENCE_HW_DISABLE ((uint16_t) 0x0200) + +#define TPM_SHA1_160_HASH_LEN 0x14 +#define TPM_SHA1BASED_NONCE_LEN TPM_SHA1_160_HASH_LEN + +#define TPM_AUTH_DATA_LEN 0x14 + +#define TPM_RSA_2048_LEN 0x100 + +typedef struct tdTPM_DIGEST +{ + uint8_t digest[TPM_SHA1_160_HASH_LEN]; +} TPM_DIGEST; + +typedef TPM_DIGEST TPM_COMPOSITE_HASH; + +typedef struct tdTPM_PCR_SELECTION +{ + uint16_t sizeOfSelect; + uint8_t pcrSelect[3]; +} __attribute__((packed)) TPM_PCR_SELECTION; + +typedef struct tdTPM_NV_ATTRIBUTES +{ + TPM_STRUCTURE_TAG tag; + TPM_NV_PER_ATTRIBUTES attributes; +} __attribute__((packed)) TPM_NV_ATTRIBUTES; + +typedef struct tdTPM_PCR_INFO_SHORT +{ + TPM_PCR_SELECTION pcrSelection; + TPM_LOCALITY_SELECTION localityAtRelease; + TPM_COMPOSITE_HASH digestAtRelease; +} __attribute__((packed)) TPM_PCR_INFO_SHORT; + +typedef struct tdTPM_PERMANENT_FLAGS +{ + TPM_STRUCTURE_TAG tag; + TSS_BOOL disable; + TSS_BOOL ownership; + TSS_BOOL deactivated; + TSS_BOOL readPubek; + TSS_BOOL disableOwnerClear; + TSS_BOOL allowMaintenance; + TSS_BOOL physicalPresenceLifetimeLock; + TSS_BOOL physicalPresenceHWEnable; + TSS_BOOL physicalPresenceCMDEnable; + TSS_BOOL CEKPUsed; + TSS_BOOL TPMpost; + TSS_BOOL TPMpostLock; + TSS_BOOL FIPS; + TSS_BOOL Operator; + TSS_BOOL enableRevokeEK; + TSS_BOOL nvLocked; + TSS_BOOL readSRKPub; + TSS_BOOL tpmEstablished; + TSS_BOOL maintenanceDone; + TSS_BOOL disableFullDALogicInfo; +} TPM_PERMANENT_FLAGS; + +typedef struct tdTPM_STCLEAR_FLAGS{ + TPM_STRUCTURE_TAG tag; + TSS_BOOL deactivated; + TSS_BOOL disableForceClear; + TSS_BOOL physicalPresence; + TSS_BOOL physicalPresenceLock; + TSS_BOOL bGlobalLock; +} TPM_STCLEAR_FLAGS; + +typedef struct tdTPM_NV_DATA_PUBLIC +{ + TPM_STRUCTURE_TAG tag; + TPM_NV_INDEX nvIndex; + TPM_PCR_INFO_SHORT pcrInfoRead; + TPM_PCR_INFO_SHORT pcrInfoWrite; + TPM_NV_ATTRIBUTES permission; + TPM_BOOL bReadSTClear; + TPM_BOOL bWriteSTClear; + TPM_BOOL bWriteDefine; + uint32_t dataSize; +} TPM_NV_DATA_PUBLIC; + +typedef struct tdTPM_NONCE +{ + uint8_t nonce[TPM_SHA1BASED_NONCE_LEN]; +} TPM_NONCE; + +typedef struct tdTPM_FAMILY_TABLE_ENTRY +{ + TPM_STRUCTURE_TAG tag; + TPM_FAMILY_LABEL familyLabel; + TPM_FAMILY_ID familyID; + TPM_FAMILY_VERIFICATION verificationCount; + TPM_FAMILY_FLAGS flags; +} TPM_FAMILY_TABLE_ENTRY; + +typedef struct tdTPM_IFX_FIRMWAREPACKAGE { + uint32_t FwPackageIdentifier; + uint32_t Version; + uint32_t StaleVersion; +} TPM_IFX_FIRMWAREPACKAGE; + +typedef struct tdTPM_IFX_FIELDUPGRADEINFO +{ + uint16_t wMaxDataSize; + TPM_IFX_FIRMWAREPACKAGE sBootloaderFirmwarePackage; + TPM_IFX_FIRMWAREPACKAGE sFirmwarePackages[2]; + uint16_t wSecurityModuleStatus; + TPM_IFX_FIRMWAREPACKAGE sProcessFirmwarePackage; + uint16_t wFieldUpgradeCounter; +} TPM_IFX_FIELDUPGRADEINFO; + +typedef struct tdTPM_NV_AUTH_POLICY +{ + TPM_PCR_INFO_SHORT pcr_info_read; + TPM_PCR_INFO_SHORT pcr_info_write; +} TPM_NV_AUTH_POLICY; + +#define TPM_IFX_FieldUpgradeInfoRequest2 ((uint8_t) 0x11) + +/* Ordinals */ + +#define TPM_ORD_ContinueSelfTest ((uint32_t) 0x00000053) +#define TPM_ORD_Delegate_Manage ((uint32_t) 0x000000D2) +#define TPM_ORD_Delegate_ReadTable ((uint32_t) 0x000000DB) +#define TPM_ORD_Extend ((uint32_t) 0x00000014) +#define TPM_ORD_FieldUpgrade ((uint32_t) 0x000000AA) +#define TPM_ORD_ForceClear ((uint32_t) 0x0000005D) +#define TPM_ORD_GetCapability ((uint32_t) 0x00000065) +#define TPM_ORD_GetRandom ((uint32_t) 0x00000046) +#define TPM_ORD_NV_DefineSpace ((uint32_t) 0x000000CC) +#define TPM_ORD_NV_ReadValue ((uint32_t) 0x000000CF) +#define TPM_ORD_NV_WriteValue ((uint32_t) 0x000000CD) +#define TPM_ORD_OIAP ((uint32_t) 0x0000000A) +#define TPM_ORD_OSAP ((uint32_t) 0x0000000B) +#define TPM_ORD_PcrRead ((uint32_t) 0x00000015) +#define TPM_ORD_PhysicalEnable ((uint32_t) 0x0000006F) +#define TPM_ORD_PhysicalDisable ((uint32_t) 0x00000070) +#define TSC_ORD_PhysicalPresence ((uint32_t) 0x4000000A) +#define TPM_ORD_PhysicalSetDeactivated ((uint32_t) 0x00000072) +#define TPM_ORD_ReadPubek ((uint32_t) 0x0000007C) +#define TPM_ORD_SaveState ((uint32_t) 0x00000098) +#define TPM_ORD_SelfTestFull ((uint32_t) 0x00000050) +#define TPM_ORD_Startup ((uint32_t) 0x00000099) +#define TPM_ORD_TakeOwnership ((uint32_t) 0x0000000D) + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* VBOOT_REFERENCE_TPM1_TSS_CONSTANTS_H_ */ diff --git a/firmware/include/tpm2_marshaling.h b/firmware/include/tpm2_marshaling.h new file mode 100644 index 0000000..9fd79da --- /dev/null +++ b/firmware/include/tpm2_marshaling.h @@ -0,0 +1,97 @@ +/* Copyright 2016 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_TPM2_MARSHALING_H_ +#define VBOOT_REFERENCE_TPM2_MARSHALING_H_ + +#include "tss_constants.h" + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* The below functions are used to serialize/deserialize TPM2 commands. */ + +/** + * tpm_marshal_command + * + * Given a structure containing a TPM2 command, serialize the structure for + * sending it to the TPM. + * + * @command: code of the TPM2 command to marshal + * @tpm_command_body: a pointer to the command specific structure + * @buffer: buffer where command is marshaled to + * @buffer_size: size of the buffer + * + * Returns number of bytes placed in the buffer, or -1 on error. + * + */ +int tpm_marshal_command(TPM_CC command, void *tpm_command_body, + void *buffer, int buffer_size); + +/** + * tpm_unmarshal_response + * + * Given a buffer received from the TPM in response to a certain command, + * deserialize the buffer into the expeced response structure. + * + * @command: code of the TPM2 command for which a response is unmarshaled + * @response_body: buffer containing the serialized response. + * @response_size: number of bytes in the buffer containing response + * @response: structure to be filled with deserialized response, + * struct tpm2_response is a union of all possible responses. + * + * Returns 0 on success, or -1 on error. + */ +int tpm_unmarshal_response(TPM_CC command, + void *response_body, + int response_size, + struct tpm2_response *response); + +/** + * tpm_get_packet_size + * + * @packet: pointer to the start of the command or response packet. + * + * Returns the size of the tpm packet. + */ +uint32_t tpm_get_packet_size(const uint8_t *packet); + +/** + * tpm_get_packet_response_code + * + * @packet: pointer to the start of the response packet. + * + * Returns the response code. + */ +uint32_t tpm_get_packet_response_code(const uint8_t *packet); + +/** + * tpm_set_ph_disabled + * + * Sets the flag that indicates if platform hierarchy is disabled. + * Certain commands, like NV_Read, may need to use different + * authorization if platform hierarchy is disabled. + * + * @flag: 1 if platform hierarchy is disabled, 0 otherwise + */ +void tpm_set_ph_disabled(int flag); + +/** + * tpm_is_ph_disabled + * + * Gets the flag that indicates if platform hierarchy is disabled. + * Certain commands, like NV_Read, may need to use different + * authorization if platform hierarchy is disabled. + * + * Returns 1 if platform hierarchy is disabled, 0 otherwise + */ +int tpm_is_ph_disabled(void); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* VBOOT_REFERENCE_TPM2_MARSHALING_H_ */ diff --git a/firmware/include/tpm2_tss_constants.h b/firmware/include/tpm2_tss_constants.h new file mode 100644 index 0000000..becd710 --- /dev/null +++ b/firmware/include/tpm2_tss_constants.h @@ -0,0 +1,350 @@ +/* Copyright 2016 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Some TPM constants and type definitions for standalone compilation for use + * in the firmware + */ + +#ifndef VBOOT_REFERENCE_TPM2_TSS_CONSTANTS_H_ +#define VBOOT_REFERENCE_TPM2_TSS_CONSTANTS_H_ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#define TPM_BUFFER_SIZE 256 + +/* Tpm2 command tags. */ +#define TPM_ST_NO_SESSIONS 0x8001 +#define TPM_ST_SESSIONS 0x8002 + +/* TPM2 command codes. */ +#define TPM2_Hierarchy_Control ((TPM_CC)0x00000121) +#define TPM2_NV_UndefineSpace ((TPM_CC)0x00000122) +#define TPM2_Clear ((TPM_CC)0x00000126) +#define TPM2_NV_DefineSpace ((TPM_CC)0x0000012A) +#define TPM2_NV_Write ((TPM_CC)0x00000137) +#define TPM2_NV_WriteLock ((TPM_CC)0x00000138) +#define TPM2_SelfTest ((TPM_CC)0x00000143) +#define TPM2_Startup ((TPM_CC)0x00000144) +#define TPM2_Shutdown ((TPM_CC)0x00000145) +#define TPM2_NV_Read ((TPM_CC)0x0000014E) +#define TPM2_NV_ReadLock ((TPM_CC)0x0000014F) +#define TPM2_NV_ReadPublic ((TPM_CC)0x00000169) +#define TPM2_GetCapability ((TPM_CC)0x0000017A) +#define TPM2_GetRandom ((TPM_CC)0x0000017B) +#define TPM2_PCR_Extend ((TPM_CC)0x00000182) + +#define TPM_HT_PCR 0x00 +#define TPM_HT_NV_INDEX 0x01 + +#define HR_SHIFT 24 +#define HR_PCR (TPM_HT_PCR << HR_SHIFT) +#define HR_NV_INDEX (TPM_HT_NV_INDEX << HR_SHIFT) +#define TPM_RH_OWNER 0x40000001 +#define TPM_RH_PLATFORM 0x4000000C +#define TPM_RS_PW 0x40000009 + +/* TPM2 capabilities. */ +#define TPM_CAP_FIRST ((TPM_CAP)0x00000000) +#define TPM_CAP_TPM_PROPERTIES ((TPM_CAP)0x00000006) + +/* TPM properties */ +#define TPM_PT_NONE ((TPM_PT)0x00000000) +#define PT_GROUP ((TPM_PT)0x00000100) +#define PT_FIXED PT_GROUP +#define TPM_PT_MANUFACTURER (PT_FIXED + 5) +#define TPM_PT_VENDOR_STRING_1 (PT_FIXED + 6) +#define TPM_PT_VENDOR_STRING_4 (PT_FIXED + 9) +#define TPM_PT_FIRMWARE_VERSION_1 (PT_FIXED + 11) +#define TPM_PT_FIRMWARE_VERSION_2 (PT_FIXED + 12) +#define PT_VAR (PT_GROUP * 2) +#define TPM_PT_PERMANENT (PT_VAR + 0) +#define TPM_PT_STARTUP_CLEAR (PT_VAR + 1) + +/* TPM startup types. */ +#define TPM_SU_CLEAR ((TPM_SU)0x0000) +#define TPM_SU_STATE ((TPM_SU)0x0001) + +/* TPM algorithm IDs. */ +#define TPM_ALG_SHA1 ((TPM_ALG_ID)0x0004) +#define TPM_ALG_SHA256 ((TPM_ALG_ID)0x000B) +#define TPM_ALG_NULL ((TPM_ALG_ID)0x0010) + +/* NV index attributes. */ +#define TPMA_NV_PPWRITE ((TPMA_NV)(1UL << 0)) +#define TPMA_NV_OWNERWRITE ((TPMA_NV)(1UL << 1)) +#define TPMA_NV_AUTHWRITE ((TPMA_NV)(1UL << 2)) +#define TPMA_NV_POLICYWRITE ((TPMA_NV)(1UL << 3)) +#define TPMA_NV_COUNTER ((TPMA_NV)(1UL << 4)) +#define TPMA_NV_BITS ((TPMA_NV)(1UL << 5)) +#define TPMA_NV_EXTEND ((TPMA_NV)(1UL << 6)) +#define TPMA_NV_POLICY_DELETE ((TPMA_NV)(1UL << 10)) +#define TPMA_NV_WRITELOCKED ((TPMA_NV)(1UL << 11)) +#define TPMA_NV_WRITEALL ((TPMA_NV)(1UL << 12)) +#define TPMA_NV_WRITEDEFINE ((TPMA_NV)(1UL << 13)) +#define TPMA_NV_WRITE_STCLEAR ((TPMA_NV)(1UL << 14)) +#define TPMA_NV_GLOBALLOCK ((TPMA_NV)(1UL << 15)) +#define TPMA_NV_PPREAD ((TPMA_NV)(1UL << 16)) +#define TPMA_NV_OWNERREAD ((TPMA_NV)(1UL << 17)) +#define TPMA_NV_AUTHREAD ((TPMA_NV)(1UL << 18)) +#define TPMA_NV_POLICYREAD ((TPMA_NV)(1UL << 19)) +#define TPMA_NV_NO_DA ((TPMA_NV)(1UL << 25)) +#define TPMA_NV_ORDERLY ((TPMA_NV)(1UL << 26)) +#define TPMA_NV_CLEAR_STCLEAR ((TPMA_NV)(1UL << 27)) +#define TPMA_NV_READLOCKED ((TPMA_NV)(1UL << 28)) +#define TPMA_NV_WRITTEN ((TPMA_NV)(1UL << 29)) +#define TPMA_NV_PLATFORMCREATE ((TPMA_NV)(1UL << 30)) +#define TPMA_NV_READ_STCLEAR ((TPMA_NV)(1UL << 31)) + +#define TPMA_NV_MASK_READ (TPMA_NV_PPREAD | TPMA_NV_OWNERREAD |\ + TPMA_NV_AUTHREAD | TPMA_NV_POLICYREAD) +#define TPMA_NV_MASK_WRITE (TPMA_NV_PPWRITE | TPMA_NV_OWNERWRITE |\ + TPMA_NV_AUTHWRITE |\ + TPMA_NV_POLICYWRITE) + +/* Starting indexes of NV index ranges, as defined in "Registry of reserved + * TPM 2.0 handles and localities". + */ +#define TPMI_RH_NV_INDEX_TPM_START ((TPMI_RH_NV_INDEX)0x01000000) +#define TPMI_RH_NV_INDEX_PLATFORM_START ((TPMI_RH_NV_INDEX)0x01400000) +#define TPMI_RH_NV_INDEX_OWNER_START ((TPMI_RH_NV_INDEX)0x01800000) +#define TPMI_RH_NV_INDEX_TCG_OEM_START ((TPMI_RH_NV_INDEX)0x01C00000) +#define TPMI_RH_NV_INDEX_TCG_WG_START ((TPMI_RH_NV_INDEX)0x01C40000) +#define TPMI_RH_NV_INDEX_RESERVED_START ((TPMI_RH_NV_INDEX)0x01C90000) + +#define HASH_COUNT 1 /* Only SHA-256 is supported */ + +/* Table 206 - Defines for SHA256 Hash Values */ +#define SHA256_DIGEST_SIZE 32 + +typedef uint8_t TPMI_YES_NO; +typedef uint32_t TPM_CC; +typedef uint32_t TPM_HANDLE; +typedef TPM_HANDLE TPMI_DH_PCR; +typedef TPM_HANDLE TPMI_RH_NV_INDEX; +typedef TPM_HANDLE TPMI_RH_ENABLES; +typedef uint32_t TPM_CAP; +typedef uint32_t TPM_PT; +typedef uint16_t TPM_SU; +typedef uint16_t TPM_ALG_ID; +typedef TPM_ALG_ID TPMI_ALG_HASH; +typedef uint32_t TPMA_NV; + +typedef struct { + uint16_t size; + uint8_t *buffer; +} TPM2B, TPM2B_DIGEST, TPM2B_AUTH, TPM2B_NAME; + +typedef union { + struct { + uint16_t size; + const uint8_t *buffer; + } t; + TPM2B b; +} TPM2B_MAX_NV_BUFFER; + +typedef struct { + TPM_PT property; + uint32_t value; +} TPMS_TAGGED_PROPERTY; + +typedef struct { + uint32_t count; + TPMS_TAGGED_PROPERTY tpm_property[1]; +} TPML_TAGGED_TPM_PROPERTY; + +typedef union { + uint8_t sha256[SHA256_DIGEST_SIZE]; +} TPMU_HA; + +typedef struct { + TPMI_ALG_HASH hashAlg; + TPMU_HA digest; +} TPMT_HA; + +typedef struct { + uint32_t count; + TPMT_HA digests[HASH_COUNT]; +} TPML_DIGEST_VALUES; + +typedef union { + TPML_TAGGED_TPM_PROPERTY tpm_properties; +} TPMU_CAPABILITIES; + +typedef struct { + TPM_CAP capability; + TPMU_CAPABILITIES data; +} TPMS_CAPABILITY_DATA; + +typedef struct { + TPMI_RH_NV_INDEX nvIndex; + TPMI_ALG_HASH nameAlg; + TPMA_NV attributes; + TPM2B authPolicy; + uint16_t dataSize; +} TPMS_NV_PUBLIC; + +struct tpm2_nv_define_space_cmd { + TPM2B auth; + TPMS_NV_PUBLIC publicInfo; +}; + +struct tpm2_nv_undefine_space_cmd { + TPMI_RH_NV_INDEX nvIndex; + uint8_t use_platform_auth; +}; + +struct tpm2_nv_read_cmd { + TPMI_RH_NV_INDEX nvIndex; + uint16_t size; + uint16_t offset; +}; + +struct tpm2_nv_write_cmd { + TPMI_RH_NV_INDEX nvIndex; + TPM2B_MAX_NV_BUFFER data; + uint16_t offset; +}; + +struct tpm2_nv_read_lock_cmd { + TPMI_RH_NV_INDEX nvIndex; +}; + +struct tpm2_nv_write_lock_cmd { + TPMI_RH_NV_INDEX nvIndex; +}; + +struct tpm2_nv_read_public_cmd { + TPMI_RH_NV_INDEX nvIndex; +}; + +struct tpm2_hierarchy_control_cmd { + TPMI_RH_ENABLES enable; + TPMI_YES_NO state; +}; + +struct tpm2_get_capability_cmd { + TPM_CAP capability; + uint32_t property; + uint32_t property_count; +}; + +struct tpm2_get_random_cmd { + uint16_t bytes_requested; +}; + +struct tpm2_self_test_cmd { + TPMI_YES_NO full_test; +}; + +struct tpm2_startup_cmd { + TPM_SU startup_type; +}; + +struct tpm2_shutdown_cmd { + TPM_SU shutdown_type; +}; + +struct tpm2_pcr_extend_cmd { + TPMI_DH_PCR pcrHandle; + TPML_DIGEST_VALUES digests; +}; + +/* Common command/response header. */ +struct tpm_header { + uint16_t tpm_tag; + uint32_t tpm_size; + uint32_t tpm_code; +} __attribute__((packed)); + +struct nv_read_response { + uint32_t params_size; + TPM2B_MAX_NV_BUFFER buffer; +}; + +struct tpm2_session_attrs { + uint8_t continueSession : 1; + uint8_t auditExclusive : 1; + uint8_t auditReset : 1; + uint8_t reserved3_4 : 2; + uint8_t decrypt : 1; + uint8_t encrypt : 1; + uint8_t audit : 1; +}; + +struct tpm2_session_header { + uint32_t session_handle; + uint16_t nonce_size; + uint8_t *nonce; + union { + struct tpm2_session_attrs session_attr_bits; + uint8_t session_attrs; + } __attribute__((packed)); + uint16_t auth_size; + uint8_t *auth; +}; + +struct get_capability_response { + TPMI_YES_NO more_data; + TPMS_CAPABILITY_DATA capability_data; +} __attribute__((packed)); + +struct get_random_response { + TPM2B_DIGEST random_bytes; +} __attribute__((packed)); + +struct nv_read_public_response { + TPMS_NV_PUBLIC nvPublic; + TPM2B_NAME nvName; +} __attribute__((packed)); + +struct tpm2_response { + struct tpm_header hdr; + union { + struct nv_read_response nvr; + struct tpm2_session_header def_space; + struct get_capability_response cap; + struct get_random_response random; + struct nv_read_public_response nv_read_public; + }; +}; + +typedef struct { + uint32_t ownerAuthSet : 1; + uint32_t endorsementAuthSet : 1; + uint32_t lockoutAuthSet : 1; + uint32_t reserved3_7 : 5; + uint32_t disableClear : 1; + uint32_t inLockout : 1; + uint32_t tpmGeneratedEPS : 1; + uint32_t reserved11_31 : 21; +} TPM_PERMANENT_FLAGS; + +typedef struct { + uint32_t phEnable : 1; + uint32_t shEnable : 1; + uint32_t ehEnable : 1; + uint32_t phEnableNV : 1; + uint32_t reserved4_30 : 27; + uint32_t orderly : 1; +} TPM_STCLEAR_FLAGS; + +typedef struct tdTPM_IFX_FIELDUPGRADEINFO +{ +} TPM_IFX_FIELDUPGRADEINFO; + +/* TODO(apronin): For TPM2 certain properties must be received using + * TPM2_GetCapability instead of being hardcoded as they are now: + * TPM_MAX_COMMAND_SIZE -> use TPM_PT_MAX_COMMAND_SIZE for TPM2. + * TPM_PCR_DIGEST -> use TPM_PT_MAX_DIGEST for TPM2. + */ +#define TPM_MAX_COMMAND_SIZE 4096 +#define TPM_PCR_DIGEST 32 + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* VBOOT_REFERENCE_TPM2_TSS_CONSTANTS_H_ */ diff --git a/firmware/include/tss_constants.h b/firmware/include/tss_constants.h new file mode 100644 index 0000000..0dd3ab0 --- /dev/null +++ b/firmware/include/tss_constants.h @@ -0,0 +1,60 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_TSS_CONSTANTS_H_ +#define VBOOT_REFERENCE_TSS_CONSTANTS_H_ + +#include + +#define TPM_SUCCESS ((uint32_t) 0x00000000) + +#define TPM_E_ALREADY_INITIALIZED ((uint32_t) 0x00005000) /* vboot local */ +#define TPM_E_INTERNAL_INCONSISTENCY ((uint32_t) 0x00005001) /* vboot local */ +#define TPM_E_MUST_REBOOT ((uint32_t) 0x00005002) /* vboot local */ +#define TPM_E_CORRUPTED_STATE ((uint32_t) 0x00005003) /* vboot local */ +#define TPM_E_COMMUNICATION_ERROR ((uint32_t) 0x00005004) /* vboot local */ +#define TPM_E_RESPONSE_TOO_LARGE ((uint32_t) 0x00005005) /* vboot local */ +#define TPM_E_NO_DEVICE ((uint32_t) 0x00005006) /* vboot local */ +#define TPM_E_INPUT_TOO_SMALL ((uint32_t) 0x00005007) /* vboot local */ +#define TPM_E_WRITE_FAILURE ((uint32_t) 0x00005008) /* vboot local */ +#define TPM_E_READ_EMPTY ((uint32_t) 0x00005009) /* vboot local */ +#define TPM_E_READ_FAILURE ((uint32_t) 0x0000500a) /* vboot local */ +#define TPM_E_STRUCT_SIZE ((uint32_t) 0x0000500b) /* vboot local */ +#define TPM_E_STRUCT_VERSION ((uint32_t) 0x0000500c) /* vboot local */ +#define TPM_E_INTERNAL_ERROR ((uint32_t) 0x0000500d) /* vboot local */ +#define TPM_E_INVALID_RESPONSE ((uint32_t) 0x0000500e) /* vboot local */ +#define TPM_E_BUFFER_SIZE ((uint32_t) 0x0000500f) /* vboot local */ +#define TPM_E_NO_SUCH_COMMAND ((uint32_t) 0x00005010) /* vboot local */ + + +/* + * AP firmware relies on Tlcl returning these exact TPM1.2 error codes + * regardless of the TPM spec version in certain sitautions. So, TPM2.0 should + * map to these errors when necessary. All TPM2.0-spec-defined errors have + * either 0x100 or 0x80 bit set, so there is no confusion with actual error + * codes returned from a TPM2.0 chip. + */ +#define TPM_E_AUTHFAIL ((uint32_t) 0x00000001) +#define TPM_E_BADINDEX ((uint32_t) 0x00000002) +#define TPM_E_BAD_ORDINAL ((uint32_t) 0x0000000a) +#define TPM_E_OWNER_SET ((uint32_t) 0x00000014) +#define TPM_E_BADTAG ((uint32_t) 0x0000001e) +#define TPM_E_IOERROR ((uint32_t) 0x0000001f) +#define TPM_E_INVALID_POSTINIT ((uint32_t) 0x00000026) +#define TPM_E_BAD_PRESENCE ((uint32_t) 0x0000002d) +#define TPM_E_AREA_LOCKED ((uint32_t) 0x0000003c) +#define TPM_E_MAXNVWRITES ((uint32_t) 0x00000048) + +#define TPM_E_NON_FATAL 0x800 +#define TPM_E_NEEDS_SELFTEST ((uint32_t) (TPM_E_NON_FATAL + 1)) +#define TPM_E_DOING_SELFTEST ((uint32_t) (TPM_E_NON_FATAL + 2)) + +#ifdef TPM2_MODE +#include "tpm2_tss_constants.h" +#else +#include "tpm1_tss_constants.h" +#endif + +#endif /* VBOOT_REFERENCE_TSS_CONSTANTS_H_ */ diff --git a/firmware/include/vb2_api.h b/firmware/include/vb2_api.h new file mode 100644 index 0000000..a0ad7bd --- /dev/null +++ b/firmware/include/vb2_api.h @@ -0,0 +1,20 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * APIs between calling firmware and vboot_reference + * + * DO NOT INCLUDE THE HEADERS BELOW DIRECTLY! ONLY INCLUDE THIS FILE! + * + * Using vb2_api.h as the single point of contact between calling firmware and + * vboot allows subsequent refactoring of vboot (renaming of headers, etc.) + * without churning other projects' source code. + */ + +#ifndef VBOOT_REFERENCE_VB2_API_H_ +#define VBOOT_REFERENCE_VB2_API_H_ + +/* Standard APIs */ +#include "../2lib/include/2api.h" + +#endif /* VBOOT_REFERENCE_VB2_API_H_ */ diff --git a/firmware/include/vb2_constants.h b/firmware/include/vb2_constants.h new file mode 100644 index 0000000..204bca9 --- /dev/null +++ b/firmware/include/vb2_constants.h @@ -0,0 +1,14 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * This header may be imported to expose a limited set of constants to + * assembly files or linker scripts without including the entire vboot API. + */ + +#ifndef VBOOT_REFERENCE_VB2_CONSTANTS_H_ +#define VBOOT_REFERENCE_VB2_CONSTANTS_H_ + +#include "../2lib/include/2constants.h" + +#endif /* VBOOT_REFERENCE_VB2_CONSTANTS_H_ */ diff --git a/firmware/include/vb2_internals_please_do_not_use.h b/firmware/include/vb2_internals_please_do_not_use.h new file mode 100644 index 0000000..af72d5c --- /dev/null +++ b/firmware/include/vb2_internals_please_do_not_use.h @@ -0,0 +1,26 @@ +/* Copyright 2020 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Allows the caller to peek into vboot2 data structures, by including a + * specific set of internal header files. Including this header means the + * caller is broken and should be fixed. + * + * TODO(chromium:957880): The existence of this header is a bug, and it should + * be removed when it is no longer used. + */ + +#ifndef VBOOT_REFERENCE_VB2_INTERNALS_PLEASE_DO_NOT_USE_H_ +#define VBOOT_REFERENCE_VB2_INTERNALS_PLEASE_DO_NOT_USE_H_ + +/* + * Coreboot should not need access to vboot2 internals. But right now it does. + * At least this forces it to do so through a relatively narrow hole so vboot2 + * refactoring can continue. + * + * Please do not rip this into a wider hole, or expect this hole to continue. + */ +#include "../2lib/include/2misc.h" /* for vb2_get_sd() */ +#include "../2lib/include/2struct.h" /* for vb2_shared_data struct */ + +#endif /* VBOOT_REFERENCE_VB2_INTERNALS_PLEASE_DO_NOT_USE_H_ */ diff --git a/firmware/include/vb2_sha.h b/firmware/include/vb2_sha.h new file mode 100644 index 0000000..41ef050 --- /dev/null +++ b/firmware/include/vb2_sha.h @@ -0,0 +1,13 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * This header may be imported to expose vboot SHA implementation. + */ + +#ifndef VBOOT_REFERENCE_VB2_SHA_H_ +#define VBOOT_REFERENCE_VB2_SHA_H_ + +#include "../2lib/include/2sha.h" + +#endif /* VBOOT_REFERENCE_VB2_SHA_H_ */ diff --git a/firmware/include/vboot_api.h b/firmware/include/vboot_api.h new file mode 100644 index 0000000..ce3ac2d --- /dev/null +++ b/firmware/include/vboot_api.h @@ -0,0 +1,295 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * APIs provided by firmware to vboot_reference. + * + * General notes: + * + * All verified boot functions now start with "Vb" for namespace clarity. This + * fixes the problem where uboot and vboot both defined assert(). + * + * Verified boot APIs to be implemented by the calling firmware and exported to + * vboot_reference start with "VbEx". + * + * TODO: split this file into a vboot_entry_points.h file which contains the + * entry points for the firmware to call vboot_reference, and a + * vboot_firmware_exports.h which contains the APIs to be implemented by the + * calling firmware and exported to vboot_reference. + */ + +#ifndef VBOOT_REFERENCE_VBOOT_API_H_ +#define VBOOT_REFERENCE_VBOOT_API_H_ + +#include +#include + +#include "../2lib/include/2return_codes.h" +#include "gpt.h" + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +struct vb2_context; +typedef struct VbSharedDataHeader VbSharedDataHeader; + + +/*****************************************************************************/ +/* Main entry points from firmware into vboot_reference */ + +/* + * We use disk handles rather than indices. Using indices causes problems if + * a disk is removed/inserted in the middle of processing. + */ +typedef void *VbExDiskHandle_t; + +typedef struct VbSelectAndLoadKernelParams { + /* Inputs to VbSelectAndLoadKernel() */ + /* Destination buffer for kernel (normally at 0x100000 on x86) */ + void *kernel_buffer; + /* Size of kernel buffer in bytes */ + uint32_t kernel_buffer_size; + + /* + * Outputs from VbSelectAndLoadKernel(); valid only if it returns + * success. + */ + /* Handle of disk containing loaded kernel */ + VbExDiskHandle_t disk_handle; + /* Partition number on disk to boot (1...M) */ + uint32_t partition_number; + /* Address of bootloader image in RAM */ + uint64_t bootloader_address; + /* Size of bootloader image in bytes */ + uint32_t bootloader_size; + /* UniquePartitionGuid for boot partition */ + uint8_t partition_guid[16]; + /* Flags set by signer */ + uint32_t flags; +} VbSelectAndLoadKernelParams; + +/** + * Select and loads the kernel. + * + * Returns VB2_SUCCESS if success, non-zero if error; on error, caller + * should reboot. */ +vb2_error_t VbSelectAndLoadKernel(struct vb2_context *ctx, + VbSelectAndLoadKernelParams *kparams); + +/** + * Attempt loading a kernel from the specified type(s) of disks. + * + * If successful, sets kparams.disk_handle to the disk for the kernel and + * returns VB2_SUCCESS. + * + * @param ctx Vboot context + * @param disk_flags Flags to pass to VbExDiskGetInfo() + * @return VB2_SUCCESS or the most specific VB2_ERROR_LK error. + */ +vb2_error_t VbTryLoadKernel(struct vb2_context *ctx, uint32_t disk_flags); + +/* miniOS flags */ + +/* Boot from non-active miniOS partition only */ +#define VB_MINIOS_FLAG_NON_ACTIVE (1 << 0) + +/** + * Attempt loading a miniOS kernel from internal disk. + * + * Scans sectors at the start and end of the disk, and looks for miniOS kernels + * starting at the beginning of the sector. Attempts loading any miniOS + * kernels found. + * + * If successful, sets lkp.disk_handle to the disk for the kernel and returns + * VB2_SUCCESS. + * + * @param ctx Vboot context + * @param minios_flags Flags for miniOS + * @return VB2_SUCCESS or the most specific VB2_ERROR_LK error. + */ +vb2_error_t VbTryLoadMiniOsKernel(struct vb2_context *ctx, + uint32_t minios_flags); + +/*****************************************************************************/ +/* Disk access (previously in boot_device.h) */ + +/* Flags for VbDisk APIs */ + +/* + * Disk selection in the lower 16 bits (where the disk lives), and disk + * attributes in the higher 16 bits (extra information about the disk + * needed to access it correctly). + */ +#define VB_DISK_FLAG_SELECT_MASK 0xffff +#define VB_DISK_FLAG_ATTRIBUTE_MASK (0xffff << 16) + +/* Disk is removable. Example removable disks: SD cards, USB keys. */ +#define VB_DISK_FLAG_REMOVABLE (1 << 0) +/* + * Disk is fixed. If this flag is present, disk is internal to the system and + * not removable. Example fixed disks: internal SATA SSD, eMMC. + */ +#define VB_DISK_FLAG_FIXED (1 << 1) +/* + * Note that VB_DISK_FLAG_REMOVABLE and VB_DISK_FLAG_FIXED are + * mutually-exclusive for a single disk. VbExDiskGetInfo() may specify both + * flags to request disks of both types in a single call. + * + * At some point we could specify additional flags, but we don't currently + * have a way to make use of these: + * + * USB Device is known to be attached to USB. Note that the SD + * card reader inside x86 systems is attached to USB so this + * isn't super useful. + * SD Device is known to be a SD card. Note that external card + * readers might not return this information, so also of + * questionable use. + * READ_ONLY Device is known to be read-only. Could be used by recovery + * when processing read-only recovery image. + */ + +/* + * Disks are used in two ways: + * - As a random-access device to read and write the GPT + * - As a streaming device to read the kernel + * These are implemented differently on raw NAND vs eMMC/SATA/USB + * - On eMMC/SATA/USB, both of these refer to the same underlying + * storage, so they have the same size and LBA size. In this case, + * the GPT should not point to the same address as itself. + * - On raw NAND, the GPT is held on a portion of the SPI flash. + * Random access GPT operations refer to the SPI and streaming + * operations refer to NAND. The GPT may therefore point into + * the same offsets as itself. + * These types are distinguished by the following flag and VbDiskInfo + * has separate fields to describe the random-access ("GPT") and + * streaming aspects of the disk. If a disk is random-access (i.e. + * not raw NAND) then these fields are equal. + */ +#define VB_DISK_FLAG_EXTERNAL_GPT (1 << 16) + +/* Information on a single disk */ +typedef struct VbDiskInfo { + /* Disk handle */ + VbExDiskHandle_t handle; + /* Size of a random-access LBA sector in bytes */ + uint64_t bytes_per_lba; + /* Number of random-access LBA sectors on the device. + * If streaming_lba_count is 0, this stands in for the size of the + * randomly accessed portion as well as the streaming portion. + * Otherwise, this is only the randomly-accessed portion. */ + uint64_t lba_count; + /* Number of streaming sectors on the device */ + uint64_t streaming_lba_count; + /* Flags (see VB_DISK_FLAG_* constants) */ + uint32_t flags; + /* + * Optional name string, for use in debugging. May be empty or null if + * not available. + */ + const char *name; +} VbDiskInfo; + +/** + * Store information into [info] for all disks (storage devices) attached to + * the system which match all of the disk_flags. + * + * On output, count indicates how many disks are present, and [infos_ptr] + * points to a [count]-sized array of VbDiskInfo structs with the information + * on those disks; this pointer must be freed by calling VbExDiskFreeInfo(). + * If count=0, infos_ptr may point to NULL. If [infos_ptr] points to NULL + * because count=0 or error, it is not necessary to call VbExDiskFreeInfo(). + * + * A multi-function device (such as a 4-in-1 card reader) should provide + * multiple disk handles. + * + * The firmware must not alter or free the list pointed to by [infos_ptr] until + * VbExDiskFreeInfo() is called. + */ +vb2_error_t VbExDiskGetInfo(VbDiskInfo **infos_ptr, uint32_t *count, + uint32_t disk_flags); + +/** + * Free a disk information list [infos] previously returned by + * VbExDiskGetInfo(). If [preserve_handle] != NULL, the firmware must ensure + * that handle remains valid after this call; all other handles from the info + * list need not remain valid after this call. + */ +vb2_error_t VbExDiskFreeInfo(VbDiskInfo *infos, + VbExDiskHandle_t preserve_handle); + +/** + * Read lba_count LBA sectors, starting at sector lba_start, from the disk, + * into the buffer. + * + * This is used for random access to the GPT. It is not for the partition + * contents. The upper limit is lba_count. + * + * If the disk handle is invalid (for example, the handle refers to a disk + * which as been removed), the function must return error but must not + * crash. + */ +vb2_error_t VbExDiskRead(VbExDiskHandle_t handle, uint64_t lba_start, + uint64_t lba_count, void *buffer); + +/** + * Write lba_count LBA sectors, starting at sector lba_start, to the disk, from + * the buffer. + * + * This is used for random access to the GPT. It does not (necessarily) access + * the streaming portion of the device. + * + * If the disk handle is invalid (for example, the handle refers to a disk + * which as been removed), the function must return error but must not + * crash. + */ +vb2_error_t VbExDiskWrite(VbExDiskHandle_t handle, uint64_t lba_start, + uint64_t lba_count, const void *buffer); + +/* Streaming read interface */ +typedef void *VbExStream_t; + +/** + * Open a stream on a disk + * + * @param handle Disk to open the stream against + * @param lba_start Starting sector offset within the disk to stream from + * @param lba_count Maximum extent of the stream in sectors + * @param stream out-paramter for the generated stream + * + * @return Error code, or VB2_SUCCESS. + * + * This is used for access to the contents of the actual partitions on the + * device. It is not used to access the GPT. The size of the content addressed + * is within streaming_lba_count. + */ +vb2_error_t VbExStreamOpen(VbExDiskHandle_t handle, uint64_t lba_start, + uint64_t lba_count, VbExStream_t *stream_ptr); + +/** + * Read from a stream on a disk + * + * @param stream Stream to read from + * @param bytes Number of bytes to read + * @param buffer Destination to read into + * + * @return Error code, or VB2_SUCCESS. Failure to read as much data as + * requested is an error. + * + * This is used for access to the contents of the actual partitions on the + * device. It is not used to access the GPT. + */ +vb2_error_t VbExStreamRead(VbExStream_t stream, uint32_t bytes, void *buffer); + +/** + * Close a stream + * + * @param stream Stream to close + */ +void VbExStreamClose(VbExStream_t stream); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* VBOOT_REFERENCE_VBOOT_API_H_ */ diff --git a/firmware/lib/cgptlib/cgptlib.c b/firmware/lib/cgptlib/cgptlib.c new file mode 100644 index 0000000..4c091d0 --- /dev/null +++ b/firmware/lib/cgptlib/cgptlib.c @@ -0,0 +1,231 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "2common.h" +#include "2sysincludes.h" +#include "cgptlib.h" +#include "cgptlib_internal.h" +#include "crc32.h" +#include "gpt.h" +#include "vboot_api.h" + +int GptInit(GptData *gpt) +{ + int retval; + + gpt->modified = 0; + gpt->current_kernel = CGPT_KERNEL_ENTRY_NOT_FOUND; + gpt->current_priority = 999; + + retval = GptValidityCheck(gpt); + if (GPT_SUCCESS != retval) { + VB2_DEBUG("GptInit() failed validity check\n"); + return retval; + } + + GptRepair(gpt); + return GPT_SUCCESS; +} + +int GptNextKernelEntry(GptData *gpt, uint64_t *start_sector, uint64_t *size) +{ + GptHeader *header = (GptHeader *)gpt->primary_header; + GptEntry *entries = (GptEntry *)gpt->primary_entries; + GptEntry *e; + int new_kernel = CGPT_KERNEL_ENTRY_NOT_FOUND; + int new_prio = 0; + uint32_t i; + + /* + * If we already found a kernel, continue the scan at the current + * kernel's priority, in case there is another kernel with the same + * priority. + */ + if (gpt->current_kernel != CGPT_KERNEL_ENTRY_NOT_FOUND) { + for (i = gpt->current_kernel + 1; + i < header->number_of_entries; i++) { + e = entries + i; + if (!IsKernelEntry(e)) + continue; + VB2_DEBUG("GptNextKernelEntry looking at same prio " + "partition %d\n", i+1); + VB2_DEBUG("GptNextKernelEntry s%d t%d p%d\n", + GetEntrySuccessful(e), GetEntryTries(e), + GetEntryPriority(e)); + if (!(GetEntrySuccessful(e) || GetEntryTries(e))) + continue; + if (GetEntryPriority(e) == gpt->current_priority) { + gpt->current_kernel = i; + *start_sector = e->starting_lba; + *size = e->ending_lba - e->starting_lba + 1; + VB2_DEBUG("GptNextKernelEntry likes it\n"); + return GPT_SUCCESS; + } + } + } + + /* + * We're still here, so scan for the remaining kernel with the highest + * priority less than the previous attempt. + */ + for (i = 0, e = entries; i < header->number_of_entries; i++, e++) { + int current_prio = GetEntryPriority(e); + if (!IsKernelEntry(e)) + continue; + VB2_DEBUG("GptNextKernelEntry looking at new prio " + "partition %d\n", i+1); + VB2_DEBUG("GptNextKernelEntry s%d t%d p%d\n", + GetEntrySuccessful(e), GetEntryTries(e), + GetEntryPriority(e)); + if (!(GetEntrySuccessful(e) || GetEntryTries(e))) + continue; + if (current_prio >= gpt->current_priority) { + /* Already returned this kernel in a previous call */ + continue; + } + if (current_prio > new_prio) { + new_kernel = i; + new_prio = current_prio; + } + } + + /* + * Save what we found. Note that if we didn't find a new kernel, + * new_prio will still be -1, so future calls to this function will + * also fail. + */ + gpt->current_kernel = new_kernel; + gpt->current_priority = new_prio; + + if (CGPT_KERNEL_ENTRY_NOT_FOUND == new_kernel) { + VB2_DEBUG("GptNextKernelEntry no more kernels\n"); + return GPT_ERROR_NO_VALID_KERNEL; + } + + VB2_DEBUG("GptNextKernelEntry likes partition %d\n", new_kernel + 1); + e = entries + new_kernel; + *start_sector = e->starting_lba; + *size = e->ending_lba - e->starting_lba + 1; + return GPT_SUCCESS; +} + +/* + * Func: GptUpdateKernelWithEntry + * Desc: This function updates the given kernel entry according to the provided + * update_type. + */ +int GptUpdateKernelWithEntry(GptData *gpt, GptEntry *e, uint32_t update_type) +{ + int modified = 0; + + if (!IsKernelEntry(e)) + return GPT_ERROR_INVALID_UPDATE_TYPE; + + switch (update_type) { + case GPT_UPDATE_ENTRY_TRY: { + /* Used up a try */ + int tries; + if (GetEntrySuccessful(e)) { + /* + * Successfully booted this partition, so tries field + * is ignored. + */ + return GPT_SUCCESS; + } + tries = GetEntryTries(e); + if (tries > 1) { + /* Still have tries left */ + modified = 1; + SetEntryTries(e, tries - 1); + break; + } + /* Out of tries, so drop through and mark partition bad. */ + VBOOT_FALLTHROUGH; + } + case GPT_UPDATE_ENTRY_BAD: { + /* Giving up on this partition entirely. */ + if (!GetEntrySuccessful(e)) { + /* + * Only clear tries and priority if the successful bit + * is not set. + */ + modified = 1; + SetEntryTries(e, 0); + SetEntryPriority(e, 0); + } + break; + } + case GPT_UPDATE_ENTRY_ACTIVE: { + /* + * Used for fastboot mode. If kernel partition slot is marked + * active, its GPT entry is marked with S1,P2,T0. + */ + modified = 1; + SetEntryTries(e, 0); + SetEntryPriority(e, 2); + SetEntrySuccessful(e, 1); + break; + } + case GPT_UPDATE_ENTRY_INVALID: { + /* + * Used for fastboot mode. If kernel partition slot is marked + * invalid, its GPT entry is marked with S0,P0,T0 + */ + modified = 1; + SetEntryTries(e, 0); + SetEntryPriority(e, 0); + SetEntrySuccessful(e, 0); + break; + } + default: + return GPT_ERROR_INVALID_UPDATE_TYPE; + } + + if (modified) { + GptModified(gpt); + } + + return GPT_SUCCESS; +} + +/* + * Func: GptUpdateKernelEntry + * Desc: This function updates current_kernel entry with provided + * update_type. If current_kernel is not set, then it returns error. + */ +int GptUpdateKernelEntry(GptData *gpt, uint32_t update_type) +{ + GptEntry *entries = (GptEntry *)gpt->primary_entries; + GptEntry *e = entries + gpt->current_kernel; + + if (gpt->current_kernel == CGPT_KERNEL_ENTRY_NOT_FOUND) + return GPT_ERROR_INVALID_UPDATE_TYPE; + + return GptUpdateKernelWithEntry(gpt, e, update_type); +} + +/* + * Func: GptFindNthEntry + * Desc: This function returns the nth instance of parition entry matching the + * partition type guid from the gpt table. Instance value starts from 0. If the + * entry is not found it returns NULL. + */ +GptEntry *GptFindNthEntry(GptData *gpt, const Guid *guid, unsigned int n) +{ + GptHeader *header = (GptHeader *)gpt->primary_header; + GptEntry *entries = (GptEntry *)gpt->primary_entries; + GptEntry *e; + int i; + + for (i = 0, e = entries; i < header->number_of_entries; i++, e++) { + if (!memcmp(&e->type, guid, sizeof(*guid))) { + if (n == 0) + return e; + n--; + } + } + + return NULL; +} diff --git a/firmware/lib/cgptlib/cgptlib_internal.c b/firmware/lib/cgptlib/cgptlib_internal.c new file mode 100644 index 0000000..cb8ad2b --- /dev/null +++ b/firmware/lib/cgptlib/cgptlib_internal.c @@ -0,0 +1,518 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "2sysincludes.h" +#include "cgptlib.h" +#include "cgptlib_internal.h" +#include "crc32.h" +#include "gpt.h" +#include "gpt_misc.h" + +const static int MIN_SECTOR_SIZE = 512; + +size_t CalculateEntriesSectors(GptHeader* h, uint32_t sector_bytes) +{ + size_t bytes = h->number_of_entries * h->size_of_entry; + size_t ret = (bytes + sector_bytes - 1) / sector_bytes; + return ret; +} + +int CheckParameters(GptData *gpt) +{ + /* Only support 512-byte or larger sectors that are a power of 2 */ + if (gpt->sector_bytes < MIN_SECTOR_SIZE || + (gpt->sector_bytes & (gpt->sector_bytes - 1)) != 0) + return GPT_ERROR_INVALID_SECTOR_SIZE; + + /* + * gpt_drive_sectors should be reasonable. It cannot be unset, and it + * cannot differ from streaming_drive_sectors if the GPT structs are + * stored on same device. + */ + if (gpt->gpt_drive_sectors == 0 || + (!(gpt->flags & GPT_FLAG_EXTERNAL) && + gpt->gpt_drive_sectors != gpt->streaming_drive_sectors)) { + return GPT_ERROR_INVALID_SECTOR_NUMBER; + } + + /* + * Sector count of a drive should be reasonable. If the given value is + * too small to contain basic GPT structure (PMBR + Headers + Entries), + * the value is wrong. + */ + if (gpt->gpt_drive_sectors < + (1 + 2 * (1 + MIN_NUMBER_OF_ENTRIES / + (gpt->sector_bytes / sizeof(GptEntry))))) + return GPT_ERROR_INVALID_SECTOR_NUMBER; + + return GPT_SUCCESS; +} + +uint32_t HeaderCrc(GptHeader *h) +{ + uint32_t crc32, original_crc32; + + /* Original CRC is calculated with the CRC field 0. */ + original_crc32 = h->header_crc32; + h->header_crc32 = 0; + crc32 = Crc32((const uint8_t *)h, h->size); + h->header_crc32 = original_crc32; + + return crc32; +} + +int CheckHeader(GptHeader *h, int is_secondary, + uint64_t streaming_drive_sectors, + uint64_t gpt_drive_sectors, uint32_t flags, + uint32_t sector_bytes) +{ + if (!h) + return 1; + + /* + * Make sure we're looking at a header of reasonable size before + * attempting to calculate CRC. + */ + if (memcmp(h->signature, GPT_HEADER_SIGNATURE, + GPT_HEADER_SIGNATURE_SIZE) && + memcmp(h->signature, GPT_HEADER_SIGNATURE2, + GPT_HEADER_SIGNATURE_SIZE)) + return 1; + if (h->revision != GPT_HEADER_REVISION) + return 1; + if (h->size < MIN_SIZE_OF_HEADER || h->size > MAX_SIZE_OF_HEADER) + return 1; + + /* Check CRC before looking at remaining fields */ + if (HeaderCrc(h) != h->header_crc32) + return 1; + + /* Reserved fields must be zero. */ + if (h->reserved_zero) + return 1; + + /* Could check that padding is zero, but that doesn't matter to us. */ + + /* + * If entry size is different than our struct, we won't be able to + * parse it. Technically, any size 2^N where N>=7 is valid. + */ + if (h->size_of_entry != sizeof(GptEntry)) + return 1; + if ((h->number_of_entries < MIN_NUMBER_OF_ENTRIES) || + (h->number_of_entries > MAX_NUMBER_OF_ENTRIES) || + (!(flags & GPT_FLAG_EXTERNAL) && + h->number_of_entries != MAX_NUMBER_OF_ENTRIES)) + return 1; + + /* + * Check locations for the header and its entries. The primary + * immediately follows the PMBR, and is followed by its entries. The + * secondary is at the end of the drive, preceded by its entries. + */ + if (is_secondary) { + if (h->my_lba != gpt_drive_sectors - GPT_HEADER_SECTORS) + return 1; + if (h->entries_lba != h->my_lba - CalculateEntriesSectors(h, + sector_bytes)) + return 1; + } else { + if (h->my_lba != GPT_PMBR_SECTORS) + return 1; + if (h->entries_lba < h->my_lba + 1) + return 1; + } + + /* FirstUsableLBA <= LastUsableLBA. */ + if (h->first_usable_lba > h->last_usable_lba) + return 1; + + if (flags & GPT_FLAG_EXTERNAL) { + if (h->last_usable_lba >= streaming_drive_sectors) { + return 1; + } + return 0; + } + + /* + * FirstUsableLBA must be after the end of the primary GPT table array. + * LastUsableLBA must be before the start of the secondary GPT table + * array. + */ + /* TODO(namnguyen): Also check for padding between header & entries. */ + if (h->first_usable_lba < 2 + CalculateEntriesSectors(h, sector_bytes)) + return 1; + if (h->last_usable_lba >= + streaming_drive_sectors - 1 - CalculateEntriesSectors(h, + sector_bytes)) + return 1; + + /* Success */ + return 0; +} + +int IsKernelEntry(const GptEntry *e) +{ + static Guid chromeos_kernel = GPT_ENT_TYPE_CHROMEOS_KERNEL; + return !memcmp(&e->type, &chromeos_kernel, sizeof(Guid)); +} + +int CheckEntries(GptEntry *entries, GptHeader *h) +{ + if (!entries) + return GPT_ERROR_INVALID_ENTRIES; + GptEntry *entry; + uint32_t crc32; + uint32_t i; + + /* Check CRC before examining entries. */ + crc32 = Crc32((const uint8_t *)entries, + h->size_of_entry * h->number_of_entries); + if (crc32 != h->entries_crc32) + return GPT_ERROR_CRC_CORRUPTED; + + /* Check all entries. */ + for (i = 0, entry = entries; i < h->number_of_entries; i++, entry++) { + GptEntry *e2; + uint32_t i2; + + if (IsUnusedEntry(entry)) + continue; + + /* Entry must be in valid region. */ + if ((entry->starting_lba < h->first_usable_lba) || + (entry->ending_lba > h->last_usable_lba) || + (entry->ending_lba < entry->starting_lba)) + return GPT_ERROR_OUT_OF_REGION; + + /* Entry must not overlap other entries. */ + for (i2 = 0, e2 = entries; i2 < h->number_of_entries; + i2++, e2++) { + if (i2 == i || IsUnusedEntry(e2)) + continue; + + if ((entry->starting_lba >= e2->starting_lba) && + (entry->starting_lba <= e2->ending_lba)) + return GPT_ERROR_START_LBA_OVERLAP; + if ((entry->ending_lba >= e2->starting_lba) && + (entry->ending_lba <= e2->ending_lba)) + return GPT_ERROR_END_LBA_OVERLAP; + + /* UniqueGuid field must be unique. */ + if (0 == memcmp(&entry->unique, &e2->unique, + sizeof(Guid))) + return GPT_ERROR_DUP_GUID; + } + } + + /* Success */ + return 0; +} + +int HeaderFieldsSame(GptHeader *h1, GptHeader *h2) +{ + if (memcmp(h1->signature, h2->signature, sizeof(h1->signature))) + return 1; + if (h1->revision != h2->revision) + return 1; + if (h1->size != h2->size) + return 1; + if (h1->reserved_zero != h2->reserved_zero) + return 1; + if (h1->first_usable_lba != h2->first_usable_lba) + return 1; + if (h1->last_usable_lba != h2->last_usable_lba) + return 1; + if (memcmp(&h1->disk_uuid, &h2->disk_uuid, sizeof(Guid))) + return 1; + if (h1->number_of_entries != h2->number_of_entries) + return 1; + if (h1->size_of_entry != h2->size_of_entry) + return 1; + if (h1->entries_crc32 != h2->entries_crc32) + return 1; + + return 0; +} + +int GptValidityCheck(GptData *gpt) +{ + int retval; + GptHeader *header1 = (GptHeader *)(gpt->primary_header); + GptHeader *header2 = (GptHeader *)(gpt->secondary_header); + GptEntry *entries1 = (GptEntry *)(gpt->primary_entries); + GptEntry *entries2 = (GptEntry *)(gpt->secondary_entries); + GptHeader *goodhdr = NULL; + + gpt->valid_headers = 0; + gpt->valid_entries = 0; + gpt->ignored = 0; + + retval = CheckParameters(gpt); + if (retval != GPT_SUCCESS) + return retval; + + /* Check both headers; we need at least one valid header. */ + if (0 == CheckHeader(header1, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, gpt->flags, + gpt->sector_bytes)) { + gpt->valid_headers |= MASK_PRIMARY; + goodhdr = header1; + if (0 == CheckEntries(entries1, goodhdr)) + gpt->valid_entries |= MASK_PRIMARY; + } else if (header1 && !memcmp(header1->signature, + GPT_HEADER_SIGNATURE_IGNORED, GPT_HEADER_SIGNATURE_SIZE)) { + gpt->ignored |= MASK_PRIMARY; + } + if (0 == CheckHeader(header2, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, gpt->flags, + gpt->sector_bytes)) { + gpt->valid_headers |= MASK_SECONDARY; + if (!goodhdr) + goodhdr = header2; + /* Check header1+entries2 if it was good, to catch mismatch. */ + if (0 == CheckEntries(entries2, goodhdr)) + gpt->valid_entries |= MASK_SECONDARY; + } else if (header2 && !memcmp(header2->signature, + GPT_HEADER_SIGNATURE_IGNORED, GPT_HEADER_SIGNATURE_SIZE)) { + gpt->ignored |= MASK_SECONDARY; + } + + if (!gpt->valid_headers) + return GPT_ERROR_INVALID_HEADERS; + + /* + * If both headers are good but neither entries were good, check the + * entries with the secondary header. + */ + if (MASK_BOTH == gpt->valid_headers && !gpt->valid_entries) { + if (0 == CheckEntries(entries1, header2)) + gpt->valid_entries |= MASK_PRIMARY; + if (0 == CheckEntries(entries2, header2)) + gpt->valid_entries |= MASK_SECONDARY; + if (gpt->valid_entries) { + /* + * Sure enough, header2 had a good CRC for one of the + * entries. Mark header1 invalid, so we'll update its + * entries CRC. + */ + gpt->valid_headers &= ~MASK_PRIMARY; + goodhdr = header2; + } + } + + if (!gpt->valid_entries) + return GPT_ERROR_INVALID_ENTRIES; + + /* + * Now that we've determined which header contains a good CRC for + * the entries, make sure the headers are otherwise identical. + */ + if (MASK_BOTH == gpt->valid_headers && + 0 != HeaderFieldsSame(header1, header2)) + gpt->valid_headers &= ~MASK_SECONDARY; + + /* + * When we're ignoring a GPT, make it look in memory like the other one + * and pretend that everything is fine (until we try to save). + */ + if (MASK_NONE != gpt->ignored) { + GptRepair(gpt); + gpt->modified = 0; + } + + return GPT_SUCCESS; +} + +void GptRepair(GptData *gpt) +{ + GptHeader *header1 = (GptHeader *)(gpt->primary_header); + GptHeader *header2 = (GptHeader *)(gpt->secondary_header); + GptEntry *entries1 = (GptEntry *)(gpt->primary_entries); + GptEntry *entries2 = (GptEntry *)(gpt->secondary_entries); + int entries_size; + + /* Need at least one good header and one good set of entries. */ + if (MASK_NONE == gpt->valid_headers || MASK_NONE == gpt->valid_entries) + return; + + /* Repair headers if necessary */ + if (MASK_PRIMARY == gpt->valid_headers) { + /* Primary is good, secondary is bad */ + memcpy(header2, header1, sizeof(GptHeader)); + header2->my_lba = gpt->gpt_drive_sectors - GPT_HEADER_SECTORS; + header2->alternate_lba = GPT_PMBR_SECTORS; /* Second sector. */ + header2->entries_lba = header2->my_lba - + CalculateEntriesSectors(header1, gpt->sector_bytes); + header2->header_crc32 = HeaderCrc(header2); + gpt->modified |= GPT_MODIFIED_HEADER2; + } + else if (MASK_SECONDARY == gpt->valid_headers) { + /* Secondary is good, primary is bad */ + memcpy(header1, header2, sizeof(GptHeader)); + header1->my_lba = GPT_PMBR_SECTORS; /* Second sector. */ + header1->alternate_lba = + gpt->streaming_drive_sectors - GPT_HEADER_SECTORS; + /* TODO (namnguyen): Preserve (header, entries) padding. */ + header1->entries_lba = header1->my_lba + 1; + header1->header_crc32 = HeaderCrc(header1); + gpt->modified |= GPT_MODIFIED_HEADER1; + } + gpt->valid_headers = MASK_BOTH; + + /* Repair entries if necessary */ + entries_size = header1->size_of_entry * header1->number_of_entries; + if (MASK_PRIMARY == gpt->valid_entries) { + /* Primary is good, secondary is bad */ + memcpy(entries2, entries1, entries_size); + gpt->modified |= GPT_MODIFIED_ENTRIES2; + } + else if (MASK_SECONDARY == gpt->valid_entries) { + /* Secondary is good, primary is bad */ + memcpy(entries1, entries2, entries_size); + gpt->modified |= GPT_MODIFIED_ENTRIES1; + } + gpt->valid_entries = MASK_BOTH; +} + +int GetEntryRequired(const GptEntry *e) +{ + return e->attrs.fields.required; +} + +int GetEntryLegacyBoot(const GptEntry *e) +{ + return e->attrs.fields.legacy_boot; +} + +int GetEntrySuccessful(const GptEntry *e) +{ + return (e->attrs.fields.gpt_att & CGPT_ATTRIBUTE_SUCCESSFUL_MASK) >> + CGPT_ATTRIBUTE_SUCCESSFUL_OFFSET; +} + +int GetEntryPriority(const GptEntry *e) +{ + return (e->attrs.fields.gpt_att & CGPT_ATTRIBUTE_PRIORITY_MASK) >> + CGPT_ATTRIBUTE_PRIORITY_OFFSET; +} + +int GetEntryTries(const GptEntry *e) +{ + return (e->attrs.fields.gpt_att & CGPT_ATTRIBUTE_TRIES_MASK) >> + CGPT_ATTRIBUTE_TRIES_OFFSET; +} + +void SetEntryRequired(GptEntry *e, int required) +{ + e->attrs.fields.required = required; +} + +void SetEntryLegacyBoot(GptEntry *e, int legacy_boot) +{ + e->attrs.fields.legacy_boot = legacy_boot; +} + +void SetEntrySuccessful(GptEntry *e, int successful) +{ + if (successful) + e->attrs.fields.gpt_att |= CGPT_ATTRIBUTE_SUCCESSFUL_MASK; + else + e->attrs.fields.gpt_att &= ~CGPT_ATTRIBUTE_SUCCESSFUL_MASK; +} + +void SetEntryPriority(GptEntry *e, int priority) +{ + e->attrs.fields.gpt_att &= ~CGPT_ATTRIBUTE_PRIORITY_MASK; + e->attrs.fields.gpt_att |= + (priority << CGPT_ATTRIBUTE_PRIORITY_OFFSET) & + CGPT_ATTRIBUTE_PRIORITY_MASK; +} + +void SetEntryTries(GptEntry *e, int tries) +{ + e->attrs.fields.gpt_att &= ~CGPT_ATTRIBUTE_TRIES_MASK; + e->attrs.fields.gpt_att |= (tries << CGPT_ATTRIBUTE_TRIES_OFFSET) & + CGPT_ATTRIBUTE_TRIES_MASK; +} + +void GetCurrentKernelUniqueGuid(GptData *gpt, void *dest) +{ + GptEntry *entries = (GptEntry *)gpt->primary_entries; + GptEntry *e = entries + gpt->current_kernel; + memcpy(dest, &e->unique, sizeof(Guid)); +} + +void GptModified(GptData *gpt) { + GptHeader *header = (GptHeader *)gpt->primary_header; + + /* Update the CRCs */ + header->entries_crc32 = Crc32(gpt->primary_entries, + header->size_of_entry * + header->number_of_entries); + header->header_crc32 = HeaderCrc(header); + gpt->modified |= GPT_MODIFIED_HEADER1 | GPT_MODIFIED_ENTRIES1; + + /* + * Use the repair function to update the other copy of the GPT. This + * is a tad inefficient, but is much faster than the disk I/O to update + * the GPT on disk so it doesn't matter. + */ + gpt->valid_headers = MASK_PRIMARY; + gpt->valid_entries = MASK_PRIMARY; + GptRepair(gpt); +} + + +const char *GptErrorText(int error_code) +{ + switch(error_code) { + case GPT_SUCCESS: + return "none"; + + case GPT_ERROR_NO_VALID_KERNEL: + return "Invalid kernel"; + + case GPT_ERROR_INVALID_HEADERS: + return "Invalid headers"; + + case GPT_ERROR_INVALID_ENTRIES: + return "Invalid entries"; + + case GPT_ERROR_INVALID_SECTOR_SIZE: + return "Invalid sector size"; + + case GPT_ERROR_INVALID_SECTOR_NUMBER: + return "Invalid sector number"; + + case GPT_ERROR_INVALID_UPDATE_TYPE: + return "Invalid update type"; + + case GPT_ERROR_CRC_CORRUPTED: + return "Entries' crc corrupted"; + + case GPT_ERROR_OUT_OF_REGION: + return "Entry outside of valid region"; + + case GPT_ERROR_START_LBA_OVERLAP: + return "Starting LBA overlaps"; + + case GPT_ERROR_END_LBA_OVERLAP: + return "Ending LBA overlaps"; + + case GPT_ERROR_DUP_GUID: + return "Duplicated GUID"; + + case GPT_ERROR_INVALID_FLASH_GEOMETRY: + return "Invalid flash geometry"; + + case GPT_ERROR_NO_SUCH_ENTRY: + return "No entry found"; + + default: + break; + }; + return "Unknown"; +} diff --git a/firmware/lib/cgptlib/crc32.c b/firmware/lib/cgptlib/crc32.c new file mode 100644 index 0000000..f97fe5a --- /dev/null +++ b/firmware/lib/cgptlib/crc32.c @@ -0,0 +1,111 @@ +/* CRC32 implementation by Gary S. Brown. See license claim below. */ + +/* ============================================================= */ +/* COPYRIGHT (C) 1986 Gary S. Brown. You may use this program, or */ +/* code or tables extracted from it, as desired without restriction. */ +/* */ +/* First, the polynomial itself and its table of feedback terms. The */ +/* polynomial is */ +/* X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0 */ +/* */ +/* Note that we take it "backwards" and put the highest-order term in */ +/* the lowest-order bit. The X^32 term is "implied"; the LSB is the */ +/* X^31 term, etc. The X^0 term (usually shown as "+1") results in */ +/* the MSB being 1. */ +/* */ +/* Note that the usual hardware shift register implementation, which */ +/* is what we're using (we're merely optimizing it by doing eight-bit */ +/* chunks at a time) shifts bits into the lowest-order term. In our */ +/* implementation, that means shifting towards the right. Why do we */ +/* do it this way? Because the calculated CRC must be transmitted in */ +/* order from highest-order term to lowest-order term. UARTs transmit */ +/* characters in order from LSB to MSB. By storing the CRC this way, */ +/* we hand it to the UART in the order low-byte to high-byte; the UART */ +/* sends each low-bit to hight-bit; and the result is transmission bit */ +/* by bit from highest- to lowest-order term without requiring any bit */ +/* shuffling on our part. Reception works similarly. */ +/* */ +/* The feedback terms table consists of 256, 32-bit entries. Notes: */ +/* */ +/* The table can be generated at runtime if desired; code to do so */ +/* is shown later. It might not be obvious, but the feedback */ +/* terms simply represent the results of eight shift/xor opera- */ +/* tions for all combinations of data and CRC register values. */ +/* */ +/* The values must be right-shifted by eight bits by the "updcrc" */ +/* logic; the shift must be unsigned (bring in zeroes). On some */ +/* hardware you could probably optimize the shift in assembler by */ +/* using byte-swap instructions. */ +/* polynomial $edb88320 */ +/* */ +/* -------------------------------------------------------------------- */ + +#include "2sysincludes.h" +#include "crc32.h" + +static uint32_t crc32_tab[] = { + 0x00000000U, 0x77073096U, 0xee0e612cU, 0x990951baU, 0x076dc419U, + 0x706af48fU, 0xe963a535U, 0x9e6495a3U, 0x0edb8832U, 0x79dcb8a4U, + 0xe0d5e91eU, 0x97d2d988U, 0x09b64c2bU, 0x7eb17cbdU, 0xe7b82d07U, + 0x90bf1d91U, 0x1db71064U, 0x6ab020f2U, 0xf3b97148U, 0x84be41deU, + 0x1adad47dU, 0x6ddde4ebU, 0xf4d4b551U, 0x83d385c7U, 0x136c9856U, + 0x646ba8c0U, 0xfd62f97aU, 0x8a65c9ecU, 0x14015c4fU, 0x63066cd9U, + 0xfa0f3d63U, 0x8d080df5U, 0x3b6e20c8U, 0x4c69105eU, 0xd56041e4U, + 0xa2677172U, 0x3c03e4d1U, 0x4b04d447U, 0xd20d85fdU, 0xa50ab56bU, + 0x35b5a8faU, 0x42b2986cU, 0xdbbbc9d6U, 0xacbcf940U, 0x32d86ce3U, + 0x45df5c75U, 0xdcd60dcfU, 0xabd13d59U, 0x26d930acU, 0x51de003aU, + 0xc8d75180U, 0xbfd06116U, 0x21b4f4b5U, 0x56b3c423U, 0xcfba9599U, + 0xb8bda50fU, 0x2802b89eU, 0x5f058808U, 0xc60cd9b2U, 0xb10be924U, + 0x2f6f7c87U, 0x58684c11U, 0xc1611dabU, 0xb6662d3dU, 0x76dc4190U, + 0x01db7106U, 0x98d220bcU, 0xefd5102aU, 0x71b18589U, 0x06b6b51fU, + 0x9fbfe4a5U, 0xe8b8d433U, 0x7807c9a2U, 0x0f00f934U, 0x9609a88eU, + 0xe10e9818U, 0x7f6a0dbbU, 0x086d3d2dU, 0x91646c97U, 0xe6635c01U, + 0x6b6b51f4U, 0x1c6c6162U, 0x856530d8U, 0xf262004eU, 0x6c0695edU, + 0x1b01a57bU, 0x8208f4c1U, 0xf50fc457U, 0x65b0d9c6U, 0x12b7e950U, + 0x8bbeb8eaU, 0xfcb9887cU, 0x62dd1ddfU, 0x15da2d49U, 0x8cd37cf3U, + 0xfbd44c65U, 0x4db26158U, 0x3ab551ceU, 0xa3bc0074U, 0xd4bb30e2U, + 0x4adfa541U, 0x3dd895d7U, 0xa4d1c46dU, 0xd3d6f4fbU, 0x4369e96aU, + 0x346ed9fcU, 0xad678846U, 0xda60b8d0U, 0x44042d73U, 0x33031de5U, + 0xaa0a4c5fU, 0xdd0d7cc9U, 0x5005713cU, 0x270241aaU, 0xbe0b1010U, + 0xc90c2086U, 0x5768b525U, 0x206f85b3U, 0xb966d409U, 0xce61e49fU, + 0x5edef90eU, 0x29d9c998U, 0xb0d09822U, 0xc7d7a8b4U, 0x59b33d17U, + 0x2eb40d81U, 0xb7bd5c3bU, 0xc0ba6cadU, 0xedb88320U, 0x9abfb3b6U, + 0x03b6e20cU, 0x74b1d29aU, 0xead54739U, 0x9dd277afU, 0x04db2615U, + 0x73dc1683U, 0xe3630b12U, 0x94643b84U, 0x0d6d6a3eU, 0x7a6a5aa8U, + 0xe40ecf0bU, 0x9309ff9dU, 0x0a00ae27U, 0x7d079eb1U, 0xf00f9344U, + 0x8708a3d2U, 0x1e01f268U, 0x6906c2feU, 0xf762575dU, 0x806567cbU, + 0x196c3671U, 0x6e6b06e7U, 0xfed41b76U, 0x89d32be0U, 0x10da7a5aU, + 0x67dd4accU, 0xf9b9df6fU, 0x8ebeeff9U, 0x17b7be43U, 0x60b08ed5U, + 0xd6d6a3e8U, 0xa1d1937eU, 0x38d8c2c4U, 0x4fdff252U, 0xd1bb67f1U, + 0xa6bc5767U, 0x3fb506ddU, 0x48b2364bU, 0xd80d2bdaU, 0xaf0a1b4cU, + 0x36034af6U, 0x41047a60U, 0xdf60efc3U, 0xa867df55U, 0x316e8eefU, + 0x4669be79U, 0xcb61b38cU, 0xbc66831aU, 0x256fd2a0U, 0x5268e236U, + 0xcc0c7795U, 0xbb0b4703U, 0x220216b9U, 0x5505262fU, 0xc5ba3bbeU, + 0xb2bd0b28U, 0x2bb45a92U, 0x5cb36a04U, 0xc2d7ffa7U, 0xb5d0cf31U, + 0x2cd99e8bU, 0x5bdeae1dU, 0x9b64c2b0U, 0xec63f226U, 0x756aa39cU, + 0x026d930aU, 0x9c0906a9U, 0xeb0e363fU, 0x72076785U, 0x05005713U, + 0x95bf4a82U, 0xe2b87a14U, 0x7bb12baeU, 0x0cb61b38U, 0x92d28e9bU, + 0xe5d5be0dU, 0x7cdcefb7U, 0x0bdbdf21U, 0x86d3d2d4U, 0xf1d4e242U, + 0x68ddb3f8U, 0x1fda836eU, 0x81be16cdU, 0xf6b9265bU, 0x6fb077e1U, + 0x18b74777U, 0x88085ae6U, 0xff0f6a70U, 0x66063bcaU, 0x11010b5cU, + 0x8f659effU, 0xf862ae69U, 0x616bffd3U, 0x166ccf45U, 0xa00ae278U, + 0xd70dd2eeU, 0x4e048354U, 0x3903b3c2U, 0xa7672661U, 0xd06016f7U, + 0x4969474dU, 0x3e6e77dbU, 0xaed16a4aU, 0xd9d65adcU, 0x40df0b66U, + 0x37d83bf0U, 0xa9bcae53U, 0xdebb9ec5U, 0x47b2cf7fU, 0x30b5ffe9U, + 0xbdbdf21cU, 0xcabac28aU, 0x53b39330U, 0x24b4a3a6U, 0xbad03605U, + 0xcdd70693U, 0x54de5729U, 0x23d967bfU, 0xb3667a2eU, 0xc4614ab8U, + 0x5d681b02U, 0x2a6f2b94U, 0xb40bbe37U, 0xc30c8ea1U, 0x5a05df1bU, + 0x2d02ef8dU +}; + + +uint32_t Crc32(const void *buffer, uint32_t len) +{ + uint8_t *byte = (uint8_t *)buffer; + uint32_t i; + uint32_t value = ~0U; + + for (i = 0; i < len; ++i) + value = crc32_tab[(value ^ byte[i]) & 0xff] ^ (value >> 8); + return value ^ ~0U; +} diff --git a/firmware/lib/cgptlib/include/cgptlib.h b/firmware/lib/cgptlib/include/cgptlib.h new file mode 100644 index 0000000..93d15da --- /dev/null +++ b/firmware/lib/cgptlib/include/cgptlib.h @@ -0,0 +1,25 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_CGPTLIB_H_ +#define VBOOT_REFERENCE_CGPTLIB_H_ + +#include "2sysincludes.h" +#include "gpt_misc.h" + +/** + * Provides the location of the next kernel partition, in order of decreasing + * priority. + * + * On return the start_sector parameter contains the LBA sector for the start + * of the kernel partition, and the size parameter contains the size of the + * kernel partition in LBA sectors. gpt.current_kernel contains the partition + * index of the current chromeos kernel partition. + * + * Returns GPT_SUCCESS if successful, else + * GPT_ERROR_NO_VALID_KERNEL, no avaliable kernel, enters recovery mode */ +int GptNextKernelEntry(GptData *gpt, uint64_t *start_sector, uint64_t *size); + +#endif /* VBOOT_REFERENCE_CGPTLIB_H_ */ diff --git a/firmware/lib/cgptlib/include/cgptlib_internal.h b/firmware/lib/cgptlib/include/cgptlib_internal.h new file mode 100644 index 0000000..8066031 --- /dev/null +++ b/firmware/lib/cgptlib/include/cgptlib_internal.h @@ -0,0 +1,172 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_CGPTLIB_INTERNAL_H_ +#define VBOOT_REFERENCE_CGPTLIB_INTERNAL_H_ + +#include "2sysincludes.h" +#include "cgptlib.h" +#include "gpt.h" + +/* + * If gpt->current_kernel is this value, means either: + * 1. an initial value before scanning GPT entries, + * 2. after scanning, no any valid kernel is found. + */ +#define CGPT_KERNEL_ENTRY_NOT_FOUND (-1) + +/* + * Bit definitions and masks for GPT attributes. + * + * 63-61 -- (reserved) + * 60 -- read-only + * 59-57 -- (reserved) + * 56 -- success + * 55-52 -- tries + * 51-48 -- priority + * 47-3 -- UEFI: reserved for future use + * 2 -- UEFI: Legacy BIOS bootable + * 1 -- UEFI: partition is not mapped + * 0 -- UEFI: partition is required + */ +#define CGPT_ATTRIBUTE_SUCCESSFUL_OFFSET (56 - 48) +#define CGPT_ATTRIBUTE_MAX_SUCCESSFUL (1ULL) +#define CGPT_ATTRIBUTE_SUCCESSFUL_MASK (CGPT_ATTRIBUTE_MAX_SUCCESSFUL << \ + CGPT_ATTRIBUTE_SUCCESSFUL_OFFSET) + +#define CGPT_ATTRIBUTE_TRIES_OFFSET (52 - 48) +#define CGPT_ATTRIBUTE_MAX_TRIES (15ULL) +#define CGPT_ATTRIBUTE_TRIES_MASK (CGPT_ATTRIBUTE_MAX_TRIES << \ + CGPT_ATTRIBUTE_TRIES_OFFSET) + +#define CGPT_ATTRIBUTE_PRIORITY_OFFSET (48 - 48) +#define CGPT_ATTRIBUTE_MAX_PRIORITY (15ULL) +#define CGPT_ATTRIBUTE_PRIORITY_MASK (CGPT_ATTRIBUTE_MAX_PRIORITY << \ + CGPT_ATTRIBUTE_PRIORITY_OFFSET) + +#define CGPT_ATTRIBUTE_REQUIRED_OFFSET (0) +#define CGPT_ATTRIBUTE_MAX_REQUIRED (1ULL) +#define CGPT_ATTRIBUTE_LEGACY_BOOT_OFFSET (2) +#define CGPT_ATTRIBUTE_MAX_LEGACY_BOOT (1ULL) + +/* Defines ChromeOS-specific limitation on GPT */ +#define MIN_SIZE_OF_HEADER 92 +#define MAX_SIZE_OF_HEADER 512 +#define MIN_SIZE_OF_ENTRY 128 +#define MAX_SIZE_OF_ENTRY 512 +#define SIZE_OF_ENTRY_MULTIPLE 8 +#define MIN_NUMBER_OF_ENTRIES 16 +#define MAX_NUMBER_OF_ENTRIES 128 + +/* All GptData.(primary|secondary)_entries must be allocated to this size! */ +#define GPT_ENTRIES_ALLOC_SIZE (MAX_NUMBER_OF_ENTRIES * sizeof(GptEntry)) + +/* Defines GPT sizes */ +#define GPT_PMBR_SECTORS 1 /* size (in sectors) of PMBR */ +#define GPT_HEADER_SECTORS 1 + +/* + * Alias name of index in internal array for primary and secondary header and + * entries. + */ +enum { + /* constants for index */ + PRIMARY = 0, + SECONDARY = 1, + ANY_VALID = 9999, /* accept any between primary and secondary */ + + /* constants for bit mask */ + MASK_NONE = 0, + MASK_PRIMARY = 1, + MASK_SECONDARY = 2, + MASK_BOTH = 3, +}; + +/** + * Verify GptData parameters are valid. + */ +int CheckParameters(GptData* gpt); + +/** + * Check header fields. + * + * Returns 0 if header is valid, 1 if invalid. + */ +int CheckHeader(GptHeader *h, int is_secondary, + uint64_t streaming_drive_sectors, + uint64_t gpt_drive_sectors, uint32_t flags, + uint32_t sector_bytes); + +/** + * Calculate and return the header CRC. + */ +uint32_t HeaderCrc(GptHeader *h); + +/** + * Check entries. + * + * Returns 0 if entries are valid, 1 if invalid. + */ +int CheckEntries(GptEntry *entries, GptHeader *h); + +/** + * Return 0 if the GptHeaders are the same for all fields which don't differ + * between the primary and secondary headers - that is, all fields other than: + * + * my_lba + * alternate_lba + * entries_lba + */ +int HeaderFieldsSame(GptHeader *h1, GptHeader *h2); + +/** + * Check GptData, headers, entries. + * + * If successful, sets gpt->valid_headers and gpt->valid_entries and returns + * GPT_SUCCESS. + * + * On error, returns a GPT_ERROR_* return code. + */ +int GptValidityCheck(GptData *gpt); + +/** + * Repair GPT data by copying from one set of valid headers/entries to the + * other. Assumes GptValidityCheck() has been run to determine which headers + * and/or entries are already valid. + * + * The caller must make sure that even if one of the entries table is invalid + * then corresponding buffer is allocated and big enough to accommodate entries + * from the other (good) table. + */ +void GptRepair(GptData *gpt); + +/** + * Called when the primary entries are modified and the CRCs need to be + * recalculated and propagated to the secondary entries + */ +void GptModified(GptData *gpt); + +/** + * Return 1 if the entry is a Chrome OS kernel partition, else 0. + */ +int IsKernelEntry(const GptEntry *e); + +/** + * Copy the current kernel partition's UniquePartitionGuid to the dest. + */ +void GetCurrentKernelUniqueGuid(GptData *gpt, void *dest); + +/** + * Return a pointer to text describing the passed in error. + */ +const char *GptErrorText(int error_code); + +/** + * Return number of sectors required to store the entries table. Where + * a sector has size sector_bytes. + */ +size_t CalculateEntriesSectors(GptHeader* h, uint32_t sector_bytes); + +#endif /* VBOOT_REFERENCE_CGPTLIB_INTERNAL_H_ */ diff --git a/firmware/lib/cgptlib/include/crc32.h b/firmware/lib/cgptlib/include/crc32.h new file mode 100644 index 0000000..1f3e2a3 --- /dev/null +++ b/firmware/lib/cgptlib/include/crc32.h @@ -0,0 +1,13 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_CRC32_H_ +#define VBOOT_REFERENCE_CRC32_H_ + +#include "2sysincludes.h" + +uint32_t Crc32(const void *buffer, uint32_t len); + +#endif /* VBOOT_REFERENCE_CRC32_H_ */ diff --git a/firmware/lib/gpt_misc.c b/firmware/lib/gpt_misc.c new file mode 100644 index 0000000..641ef37 --- /dev/null +++ b/firmware/lib/gpt_misc.c @@ -0,0 +1,249 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "2common.h" +#include "2sysincludes.h" +#include "cgptlib.h" +#include "cgptlib_internal.h" +#include "crc32.h" +#include "gpt.h" +#include "vboot_api.h" + +/** + * Allocate and read GPT data from the drive. + * + * The sector_bytes and gpt_drive_sectors fields should be filled on input. The + * primary and secondary header and entries are filled on output. + * + * Returns 0 if successful, 1 if error. + */ +int AllocAndReadGptData(VbExDiskHandle_t disk_handle, GptData *gptdata) +{ + int primary_valid = 0, secondary_valid = 0; + + /* No data to be written yet */ + gptdata->modified = 0; + /* This should get overwritten by GptInit() */ + gptdata->ignored = 0; + + /* Allocate all buffers */ + gptdata->primary_header = (uint8_t *)malloc(gptdata->sector_bytes); + gptdata->secondary_header = + (uint8_t *)malloc(gptdata->sector_bytes); + gptdata->primary_entries = (uint8_t *)malloc(GPT_ENTRIES_ALLOC_SIZE); + gptdata->secondary_entries = (uint8_t *)malloc(GPT_ENTRIES_ALLOC_SIZE); + + /* In some cases we try to validate header1 with entries2 or vice versa, + so make sure the entries buffers always got fully initialized. */ + memset(gptdata->primary_entries, 0, GPT_ENTRIES_ALLOC_SIZE); + memset(gptdata->secondary_entries, 0, GPT_ENTRIES_ALLOC_SIZE); + + if (gptdata->primary_header == NULL || + gptdata->secondary_header == NULL || + gptdata->primary_entries == NULL || + gptdata->secondary_entries == NULL) + return 1; + + /* Read primary header from the drive, skipping the protective MBR */ + if (0 != VbExDiskRead(disk_handle, 1, 1, gptdata->primary_header)) { + VB2_DEBUG("Read error in primary GPT header\n"); + memset(gptdata->primary_header, 0, gptdata->sector_bytes); + } + + /* Only read primary GPT if the primary header is valid */ + GptHeader* primary_header = (GptHeader*)gptdata->primary_header; + if (0 == CheckHeader(primary_header, 0, + gptdata->streaming_drive_sectors, + gptdata->gpt_drive_sectors, + gptdata->flags, + gptdata->sector_bytes)) { + primary_valid = 1; + uint64_t entries_bytes = + (uint64_t)primary_header->number_of_entries + * primary_header->size_of_entry; + uint64_t entries_sectors = + (entries_bytes + gptdata->sector_bytes - 1) + / gptdata->sector_bytes; + if (0 != VbExDiskRead(disk_handle, + primary_header->entries_lba, + entries_sectors, + gptdata->primary_entries)) { + VB2_DEBUG("Read error in primary GPT entries\n"); + primary_valid = 0; + } + } else { + VB2_DEBUG("Primary GPT header is %s\n", + memcmp(primary_header->signature, + GPT_HEADER_SIGNATURE_IGNORED, + GPT_HEADER_SIGNATURE_SIZE) + ? "invalid" : "being ignored"); + } + + /* Read secondary header from the end of the drive */ + if (0 != VbExDiskRead(disk_handle, gptdata->gpt_drive_sectors - 1, 1, + gptdata->secondary_header)) { + VB2_DEBUG("Read error in secondary GPT header\n"); + memset(gptdata->secondary_header, 0, gptdata->sector_bytes); + } + + /* Only read secondary GPT if the secondary header is valid */ + GptHeader* secondary_header = (GptHeader*)gptdata->secondary_header; + if (0 == CheckHeader(secondary_header, 1, + gptdata->streaming_drive_sectors, + gptdata->gpt_drive_sectors, + gptdata->flags, + gptdata->sector_bytes)) { + secondary_valid = 1; + uint64_t entries_bytes = + (uint64_t)secondary_header->number_of_entries + * secondary_header->size_of_entry; + uint64_t entries_sectors = + (entries_bytes + gptdata->sector_bytes - 1) + / gptdata->sector_bytes; + if (0 != VbExDiskRead(disk_handle, + secondary_header->entries_lba, + entries_sectors, + gptdata->secondary_entries)) { + VB2_DEBUG("Read error in secondary GPT entries\n"); + secondary_valid = 0; + } + } else { + VB2_DEBUG("Secondary GPT header is %s\n", + memcmp(secondary_header->signature, + GPT_HEADER_SIGNATURE_IGNORED, + GPT_HEADER_SIGNATURE_SIZE) + ? "invalid" : "being ignored"); + } + + /* Return 0 if least one GPT header was valid */ + return (primary_valid || secondary_valid) ? 0 : 1; +} + +/** + * Write any changes for the GPT data back to the drive, then free the buffers. + * + * Returns 0 if successful, 1 if error. + */ +int WriteAndFreeGptData(VbExDiskHandle_t disk_handle, GptData *gptdata) +{ + int skip_primary = 0; + GptHeader *header; + uint64_t entries_bytes, entries_sectors; + int ret = 1; + + header = (GptHeader *)gptdata->primary_header; + if (!header) + header = (GptHeader *)gptdata->secondary_header; + if (!header) + return 1; /* No headers at all, so nothing to write */ + + entries_bytes = (uint64_t)header->number_of_entries + * header->size_of_entry; + entries_sectors = entries_bytes / gptdata->sector_bytes; + + /* + * TODO(namnguyen): Preserve padding between primary GPT header and + * its entries. + */ + uint64_t entries_lba = GPT_PMBR_SECTORS + GPT_HEADER_SECTORS; + if (gptdata->primary_header) { + GptHeader *h = (GptHeader *)(gptdata->primary_header); + entries_lba = h->entries_lba; + + if (gptdata->ignored & MASK_PRIMARY) { + VB2_DEBUG("Not updating primary GPT: " + "marked to be ignored.\n"); + skip_primary = 1; + } else if (gptdata->modified & GPT_MODIFIED_HEADER1) { + if (!memcmp(h->signature, GPT_HEADER_SIGNATURE2, + GPT_HEADER_SIGNATURE_SIZE)) { + VB2_DEBUG("Not updating primary GPT: " + "legacy mode is enabled.\n"); + skip_primary = 1; + } else { + VB2_DEBUG("Updating GPT header 1\n"); + if (0 != VbExDiskWrite(disk_handle, 1, 1, + gptdata->primary_header)) + goto fail; + } + } + } + + if (gptdata->primary_entries && !skip_primary) { + if (gptdata->modified & GPT_MODIFIED_ENTRIES1) { + VB2_DEBUG("Updating GPT entries 1\n"); + if (0 != VbExDiskWrite(disk_handle, entries_lba, + entries_sectors, + gptdata->primary_entries)) + goto fail; + } + } + + entries_lba = (gptdata->gpt_drive_sectors - entries_sectors - + GPT_HEADER_SECTORS); + if (gptdata->secondary_header && !(gptdata->ignored & MASK_SECONDARY)) { + GptHeader *h = (GptHeader *)(gptdata->secondary_header); + entries_lba = h->entries_lba; + if (gptdata->modified & GPT_MODIFIED_HEADER2) { + VB2_DEBUG("Updating GPT header 2\n"); + if (0 != VbExDiskWrite(disk_handle, + gptdata->gpt_drive_sectors - 1, 1, + gptdata->secondary_header)) + goto fail; + } + } + + if (gptdata->secondary_entries && !(gptdata->ignored & MASK_SECONDARY)){ + if (gptdata->modified & GPT_MODIFIED_ENTRIES2) { + VB2_DEBUG("Updating GPT entries 2\n"); + if (0 != VbExDiskWrite(disk_handle, + entries_lba, entries_sectors, + gptdata->secondary_entries)) + goto fail; + } + } + + ret = 0; + + fail: + /* Avoid leaking memory on disk write failure */ + if (gptdata->primary_header) + free(gptdata->primary_header); + if (gptdata->primary_entries) + free(gptdata->primary_entries); + if (gptdata->secondary_entries) + free(gptdata->secondary_entries); + if (gptdata->secondary_header) + free(gptdata->secondary_header); + + /* Success */ + return ret; +} + +int IsUnusedEntry(const GptEntry *e) +{ + static Guid zero = {{{0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 0}}}}; + return !memcmp(&zero, (const uint8_t*)(&e->type), sizeof(zero)); +} + +/* + * Func: GptGetEntrySize + * Desc: This function returns size(in lba) of a partition represented by + * given GPT entry. + */ +size_t GptGetEntrySizeLba(const GptEntry *e) +{ + return (e->ending_lba - e->starting_lba + 1); +} + +/* + * Func: GptGetEntrySize + * Desc: This function returns size(in bytes) of a partition represented by + * given GPT entry. + */ +size_t GptGetEntrySizeBytes(const GptData *gpt, const GptEntry *e) +{ + return GptGetEntrySizeLba(e) * gpt->sector_bytes; +} diff --git a/firmware/lib/include/load_kernel_fw.h b/firmware/lib/include/load_kernel_fw.h new file mode 100644 index 0000000..76d2556 --- /dev/null +++ b/firmware/lib/include/load_kernel_fw.h @@ -0,0 +1,41 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * High-level firmware API for loading and verifying kernel. + * (Firmware Portion) + */ + +#ifndef VBOOT_REFERENCE_LOAD_KERNEL_FW_H_ +#define VBOOT_REFERENCE_LOAD_KERNEL_FW_H_ + +#include "vboot_api.h" + +/** + * Attempt to load kernel from the specified device. + * + * @param ctx Vboot context + * @param params Params specific to loading the kernel + * @param disk_info Disk from which to read kernel + * + * Returns VB2_SUCCESS if successful. If unsuccessful, returns an error code. + */ +vb2_error_t LoadKernel(struct vb2_context *ctx, + VbSelectAndLoadKernelParams *params, + VbDiskInfo *disk_info); + +/** + * Attempt to load miniOS kernel from the specified device. + * + * @param ctx Vboot context + * @param params Params specific to loading the kernel + * @param disk_info Disk from which to read kernel + * @param minios_flags Flags for miniOS + * + * Returns VB2_SUCCESS if successful. If unsuccessful, returns an error code. + */ +vb2_error_t LoadMiniOsKernel(struct vb2_context *ctx, + VbSelectAndLoadKernelParams *params, + VbDiskInfo *disk_info, uint32_t minios_flags); + +#endif /* VBOOT_REFERENCE_LOAD_KERNEL_FW_H_ */ diff --git a/firmware/lib/include/vboot_struct.h b/firmware/lib/include/vboot_struct.h new file mode 100644 index 0000000..374dfd4 --- /dev/null +++ b/firmware/lib/include/vboot_struct.h @@ -0,0 +1,162 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * VbSharedDataHeader definition, for sharing with OS. + */ + +#ifndef VBOOT_REFERENCE_VBOOT_STRUCT_H_ +#define VBOOT_REFERENCE_VBOOT_STRUCT_H_ + +#include + +#include "2sysincludes.h" + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* Constants and sub-structures for VbSharedDataHeader */ + +/* Magic number for recognizing VbSharedDataHeader ("VbSD") */ +#define VB_SHARED_DATA_MAGIC 0x44536256 + +/* Version for struct_version */ +#define VB_SHARED_DATA_VERSION 2 + +/* + * Flags for VbSharedDataHeader + * + * TODO(b:124141368): Move these constants into crossystem once they are + * no longer needed in vboot2 code. + */ + +/* LoadFirmware() tried firmware B because of VbNvStorage firmware B tries; + Deprecated as part of chromium:1010389. */ +#define VBSD_FWB_TRIED 0x00000001 +/* + * LoadKernel() verified the good kernel keyblock using the kernel subkey from + * the firmware. If this flag is not present, it just used the hash of the + * kernel keyblock. + */ +#define VBSD_KERNEL_KEY_VERIFIED 0x00000002 +/* Developer switch was enabled at boot time */ +#define VBSD_BOOT_DEV_SWITCH_ON 0x00000010 +/* Recovery switch was enabled at boot time */ +#define VBSD_BOOT_REC_SWITCH_ON 0x00000020 +/* Firmware write protect was enabled at boot time */ +#define VBSD_BOOT_FIRMWARE_WP_ENABLED 0x00000040 +/* VbInit() was told the system supports EC software sync */ +#define VBSD_EC_SOFTWARE_SYNC 0x00000800 +/* Firmware used vboot2 for firmware selection */ +#define VBSD_BOOT_FIRMWARE_VBOOT2 0x00008000 +/* NvStorage uses 64-byte record, not 16-byte */ +#define VBSD_NVDATA_V2 0x00100000 + +/* Data shared to OS. */ +typedef struct VbSharedDataHeader { + /* Fields present in version 1 */ + /* Magic number for struct (VB_SHARED_DATA_MAGIC) */ + uint32_t magic; + /* Version of this structure */ + uint32_t struct_version; + /* Size of this structure in bytes */ + uint64_t struct_size; + /* Size of shared data buffer in bytes */ + uint64_t data_size; + /* Amount of shared data used so far */ + uint64_t data_used; + /* Flags */ + uint32_t flags; + /* Reserved for padding */ + uint32_t reserved0; + /* Previously, kernel subkey, from firmware (struct vb2_packed_key). + Now we use vboot2 workbuf for storage. */ + uint8_t reserved1[32]; + /* Offset of kernel subkey data from start of this struct */ + uint64_t kernel_subkey_data_offset; + /* Size of kernel subkey data */ + uint64_t kernel_subkey_data_size; + + /* + * These timer values are all deprecated. coreboot tstamp_table should + * be used instead. See crosbug.com/1014102. + */ + /* VbInit() enter/exit */ + uint64_t timer_vb_init_enter; + uint64_t timer_vb_init_exit; + /* VbSelectFirmware() enter/exit */ + uint64_t timer_vb_select_firmware_enter; + uint64_t timer_vb_select_firmware_exit; + /* VbSelectAndLoadKernel() enter/exit */ + uint64_t timer_vb_select_and_load_kernel_enter; + uint64_t timer_vb_select_and_load_kernel_exit; + + /* Information stored in TPM, as retrieved by firmware */ + /* Current firmware version in TPM */ + uint32_t fw_version_tpm; + /* Current kernel version in TPM */ + uint32_t kernel_version_tpm; + + /* Debugging information from LoadFirmware() */ + /* Result of checking RW firmware A and B */ + uint8_t check_fw_a_result; + uint8_t check_fw_b_result; + /* Firmware index returned by LoadFirmware() or 0xFF if failure */ + uint8_t firmware_index; + /* Reserved for padding */ + uint8_t reserved2; + /* Firmware TPM version at start of VbSelectFirmware() */ + uint32_t fw_version_tpm_start; + /* Firmware lowest version found */ + uint32_t fw_version_lowest; + + /* Debugging information from LoadKernel() */ + /* Number of times LoadKernel() called */ + uint32_t lk_call_count; + /* Reserved for padding */ + uint8_t reserved3[896]; + + /* + * Offset and size of supplemental kernel data. Reserve space for + * these fields now, so that future LoadKernel() versions can store + * information there without needing to shift down whatever data the + * original LoadFirmware() might have put immediately following its + * VbSharedDataHeader. + */ + uint64_t kernel_supplemental_offset; + uint64_t kernel_supplemental_size; + + /* + * Fields added in version 2. Before accessing, make sure that + * struct_version >= 2 + */ + /* Recovery reason for current boot */ + uint8_t recovery_reason; + /* Reserved for padding */ + uint8_t reserved4[7]; + /* Flags from firmware keyblock */ + uint64_t fw_keyblock_flags; + /* Kernel TPM version at start of VbSelectAndLoadKernel() */ + uint32_t kernel_version_tpm_start; + /* Kernel lowest version found */ + uint32_t kernel_version_lowest; + +} __attribute__((packed)) VbSharedDataHeader; + +/* Size of VbSharedDataheader for each version */ +#define VB_SHARED_DATA_HEADER_SIZE_V1 1072 +#define VB_SHARED_DATA_HEADER_SIZE_V2 1096 + +_Static_assert(VB_SHARED_DATA_HEADER_SIZE_V1 + == offsetof(VbSharedDataHeader, recovery_reason), + "VB_SHARED_DATA_HEADER_SIZE_V1 incorrect"); + +_Static_assert(VB_SHARED_DATA_HEADER_SIZE_V2 == sizeof(VbSharedDataHeader), + "VB_SHARED_DATA_HEADER_SIZE_V2 incorrect"); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* VBOOT_REFERENCE_VBOOT_STRUCT_H_ */ diff --git a/firmware/lib/include/vboot_test.h b/firmware/lib/include/vboot_test.h new file mode 100644 index 0000000..fb1f52a --- /dev/null +++ b/firmware/lib/include/vboot_test.h @@ -0,0 +1,17 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * This header is for APIs that are only used by test code. + */ + +#ifndef VBOOT_REFERENCE_TEST_API_H_ +#define VBOOT_REFERENCE_TEST_API_H_ + +/**************************************************************************** + * vboot_api_kernel.c */ + +struct VbSelectAndLoadKernelParams; +struct VbSelectAndLoadKernelParams **VbApiKernelGetParamsPtr(void); + +#endif /* VBOOT_REFERENCE_TEST_API_H_ */ diff --git a/firmware/lib/tpm2_lite/OWNERS b/firmware/lib/tpm2_lite/OWNERS new file mode 100644 index 0000000..eda9c5e --- /dev/null +++ b/firmware/lib/tpm2_lite/OWNERS @@ -0,0 +1,3 @@ +apronin@chromium.org +rspangler@chromium.org +vbendeb@chromium.org diff --git a/firmware/lib/tpm2_lite/marshaling.c b/firmware/lib/tpm2_lite/marshaling.c new file mode 100644 index 0000000..b9857d4 --- /dev/null +++ b/firmware/lib/tpm2_lite/marshaling.c @@ -0,0 +1,923 @@ +/* Copyright 2016 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "2common.h" +#include "2sysincludes.h" +#include "tpm2_marshaling.h" + +static uint16_t tpm_tag; /* Depends on the command type. */ +static int ph_disabled; /* Platform hierarchy disabled. */ + +static void write_be16(void *dest, uint16_t val) +{ + uint8_t *byte_dest = dest; + + byte_dest[0] = val >> 8; + byte_dest[1] = val; +} + +static void write_be32(void *dest, uint32_t val) +{ + uint8_t *byte_dest = dest; + + byte_dest[0] = val >> 24; + byte_dest[1] = val >> 16; + byte_dest[2] = val >> 8; + byte_dest[3] = val; +} + +static uint16_t read_be16(const void *src) +{ + const uint8_t *s = src; + return (((uint16_t)s[0]) << 8) | (((uint16_t)s[1]) << 0); +} + +static inline uint32_t read_be32(const void *src) +{ + const uint8_t *s = src; + + return (((uint32_t)s[0]) << 24) | (((uint32_t)s[1]) << 16) | + (((uint32_t)s[2]) << 8) | (((uint32_t)s[3]) << 0); +} + +/* + * Each unmarshaling function receives a pointer to the buffer pointer and a + * pointer to the size of data still in the buffer. The function extracts data + * from the buffer and adjusts both buffer pointer and remaining data size. + * + * Should there be not enough data in the buffer to unmarshal the required + * object, the remaining data size is set to -1 to indicate the error. The + * remaining data size is expected to be set to zero once the last data item + * has been extracted from the buffer. + */ + +static uint8_t unmarshal_u8(void **buffer, int *buffer_space) +{ + uint8_t value; + + if (*buffer_space < sizeof(value)) { + *buffer_space = -1; /* Indicate a failure. */ + return 0; + } + + value = *(uint8_t *)(*buffer); + *buffer = (void *) ((uintptr_t) (*buffer) + sizeof(value)); + *buffer_space -= sizeof(value); + + return value; +} + +static uint16_t unmarshal_u16(void **buffer, int *buffer_space) +{ + uint16_t value; + + if (*buffer_space < sizeof(value)) { + *buffer_space = -1; /* Indicate a failure. */ + return 0; + } + + value = read_be16(*buffer); + *buffer = (void *) ((uintptr_t) (*buffer) + sizeof(value)); + *buffer_space -= sizeof(value); + + return value; +} + +static uint32_t unmarshal_u32(void **buffer, int *buffer_space) +{ + uint32_t value; + + if (*buffer_space < sizeof(value)) { + *buffer_space = -1; /* Indicate a failure. */ + return 0; + } + + value = read_be32(*buffer); + *buffer = (void *) ((uintptr_t) (*buffer) + sizeof(value)); + *buffer_space -= sizeof(value); + + return value; +} + +#define unmarshal_TPM_HANDLE(a, b) unmarshal_u32(a, b) +#define unmarshal_ALG_ID(a, b) unmarshal_u16(a, b) + +static void unmarshal_TPM2B_MAX_NV_BUFFER(void **buffer, + int *size, + TPM2B_MAX_NV_BUFFER *nv_buffer) +{ + nv_buffer->t.size = unmarshal_u16(buffer, size); + if (nv_buffer->t.size > *size) { + VB2_DEBUG("size mismatch: expected %d, remaining %d\n", + nv_buffer->t.size, *size); + return; + } + + nv_buffer->t.buffer = *buffer; + + *buffer = ((uint8_t *)(*buffer)) + nv_buffer->t.size; + *size -= nv_buffer->t.size; +} + +static void unmarshal_authorization_section(void **buffer, int *size, + const char *cmd_name) +{ + /* + * Let's ignore the authorisation section. It should be 5 bytes total, + * just confirm that this is the case and report any discrepancy. + */ + if (*size != 5) + VB2_DEBUG("unexpected authorisation section size %d for %s\n", + *size, cmd_name); + + *buffer = ((uint8_t *)(*buffer)) + *size; + *size = 0; +} + +static void unmarshal_nv_read(void **buffer, int *size, + struct nv_read_response *nvr) +{ + /* Total size of the parameter field. */ + nvr->params_size = unmarshal_u32(buffer, size); + unmarshal_TPM2B_MAX_NV_BUFFER(buffer, size, &nvr->buffer); + + if (nvr->params_size != + (nvr->buffer.t.size + sizeof(nvr->buffer.t.size))) { + VB2_DEBUG("parameter/buffer %d/%d size mismatch", + nvr->params_size, nvr->buffer.t.size); + return; + } + + if (*size < 0) + return; + + unmarshal_authorization_section(buffer, size, "NV_Read"); +} + +static void unmarshal_TPM2B(void **buffer, + int *size, + TPM2B *tpm2b) +{ + tpm2b->size = unmarshal_u16(buffer, size); + if (tpm2b->size > *size) { + VB2_DEBUG("size mismatch: expected %d, remaining %d\n", + tpm2b->size, *size); + *size = -1; + return; + } + + tpm2b->buffer = *buffer; + + *buffer = ((uint8_t *)(*buffer)) + tpm2b->size; + *size -= tpm2b->size; +} + +static void unmarshal_TPMS_NV_PUBLIC(void **buffer, + int *size, + TPMS_NV_PUBLIC *pub) +{ + int tpm2b_size = unmarshal_u16(buffer, size); + if (tpm2b_size > *size) { + VB2_DEBUG("size mismatch: expected %d, remaining %d\n", + tpm2b_size, *size); + *size = -1; + return; + } + *size -= tpm2b_size; + + pub->nvIndex = unmarshal_TPM_HANDLE(buffer, &tpm2b_size); + pub->nameAlg = unmarshal_ALG_ID(buffer, &tpm2b_size); + pub->attributes = unmarshal_u32(buffer, &tpm2b_size); + unmarshal_TPM2B(buffer, &tpm2b_size, &pub->authPolicy); + pub->dataSize = unmarshal_u16(buffer, &tpm2b_size); + + if (tpm2b_size != 0) { + VB2_DEBUG("TPMS_NV_PUBLIC size doesn't match size field\n"); + *size = -1; + return; + } +} + +static void unmarshal_nv_read_public(void **buffer, int *size, + struct nv_read_public_response *nv_pub) +{ + unmarshal_TPMS_NV_PUBLIC(buffer, size, &nv_pub->nvPublic); + unmarshal_TPM2B(buffer, size, &nv_pub->nvName); + + if (*size > 0) { + VB2_DEBUG("extra %d bytes after nvName\n", *size); + *size = -1; + return; + } +} + +static void unmarshal_TPML_TAGGED_TPM_PROPERTY(void **buffer, int *size, + TPML_TAGGED_TPM_PROPERTY *prop) +{ + prop->count = unmarshal_u32(buffer, size); + + if (prop->count != 1) { + *size = -1; + VB2_DEBUG("Request to unmarshal unsupported " + "number of properties: %u\n", + prop->count); + return; + } + + prop->tpm_property[0].property = unmarshal_u32(buffer, size); + prop->tpm_property[0].value = unmarshal_u32(buffer, size); +} + +static void unmarshal_TPMS_CAPABILITY_DATA(void **buffer, int *size, + TPMS_CAPABILITY_DATA *cap_data) +{ + cap_data->capability = unmarshal_u32(buffer, size); + + switch (cap_data->capability) { + + case TPM_CAP_TPM_PROPERTIES: + unmarshal_TPML_TAGGED_TPM_PROPERTY(buffer, size, + &cap_data->data. + tpm_properties); + break; + + default: + *size = -1; + VB2_DEBUG("Request to unmarshal unsupported capability %#x\n", + cap_data->capability); + } +} + +static void unmarshal_get_capability(void **buffer, int *size, + struct get_capability_response *cap) +{ + /* Total size of the parameter field. */ + cap->more_data = unmarshal_u8(buffer, size); + unmarshal_TPMS_CAPABILITY_DATA(buffer, size, &cap->capability_data); +} + +static void unmarshal_get_random(void **buffer, int *size, + struct get_random_response *random) +{ + unmarshal_TPM2B(buffer, size, &random->random_bytes); +} + +/* + * Each marshaling function receives a pointer to the buffer to marshal into, + * a pointer to the data item to be marshaled, and a pointer to the remaining + * room in the buffer. + */ + +/* + * Marshaling an arbitrary blob requires its size in addition to common + * parameter set. + */ +static void marshal_blob(void **buffer, void *blob, + size_t blob_size, int *buffer_space) +{ + if (*buffer_space < blob_size) { + *buffer_space = -1; + return; + } + + memcpy(*buffer, blob, blob_size); + *buffer_space -= blob_size; + *buffer = (void *)((uintptr_t)(*buffer) + blob_size); +} + +static void marshal_u8(void **buffer, uint8_t value, int *buffer_space) +{ + uint8_t *bp = *buffer; + + if (*buffer_space < sizeof(value)) { + *buffer_space = -1; + return; + } + + *bp++ = value; + *buffer = bp; + *buffer_space -= sizeof(value); +} + +static void marshal_u16(void **buffer, uint16_t value, int *buffer_space) +{ + if (*buffer_space < sizeof(value)) { + *buffer_space = -1; + return; + } + write_be16(*buffer, value); + *buffer = (void *)((uintptr_t)(*buffer) + sizeof(value)); + *buffer_space -= sizeof(value); +} + +static void marshal_u32(void **buffer, uint32_t value, int *buffer_space) +{ + if (*buffer_space < sizeof(value)) { + *buffer_space = -1; + return; + } + + write_be32(*buffer, value); + *buffer = (void *)((uintptr_t)(*buffer) + sizeof(value)); + *buffer_space -= sizeof(value); +} + +#define marshal_TPM_HANDLE(a, b, c) marshal_u32(a, b, c) +#define marshal_TPM_SU(a, b, c) marshal_u16(a, b, c) +#define marshal_ALG_ID(a, b, c) marshal_u16(a, b, c) +#define marshal_TPMI_ALG_HASH(a, b, c) marshal_u16(a, b, c) + +/* + * For TPM2B* structures the size field (16 or 32 bits) goes before the data. + * When marshaling, we first reserve the space for the size field, then + * marshal the data, then fill the reserved size field with the actual size + * of the marshaled data. + */ +typedef struct { + int size; + void *location; +} tpm2_marshal_size_field; + +static void marshal_reserve_size_field(void **buffer, + tpm2_marshal_size_field *field, + int field_size, + int *buffer_space) +{ + if (field_size != sizeof(uint32_t) && field_size != sizeof(uint16_t)) { + VB2_DEBUG("Unsupported size field size: %d\n", field_size); + *buffer_space = -1; + return; + } + if (*buffer_space < field_size) { + *buffer_space = -1; + return; + } + field->size = field_size; + field->location = *buffer; + *buffer_space -= field_size; + *buffer = (void *)(((uintptr_t) *buffer) + field_size); +} + +static void marshal_fill_size_field(void **buffer, + tpm2_marshal_size_field *field, + int include_size_field, + int *buffer_space) +{ + uintptr_t size = (uintptr_t) *buffer - (uintptr_t) field->location; + + if (*buffer_space < 0) + return; /* The structure did not fit. */ + + if (!include_size_field) + size -= field->size; + if (field->size == sizeof(uint32_t)) + marshal_u32(&field->location, size, &field->size); + else /* if (field->size == sizeof(uint16_t)) */ + marshal_u16(&field->location, size, &field->size); +} + +static void marshal_session_header(void **buffer, + struct tpm2_session_header *session_header, + int *buffer_space) +{ + tpm2_marshal_size_field size_field; + + /* Skip room for the session header size. */ + marshal_reserve_size_field(buffer, &size_field, + sizeof(uint32_t), buffer_space); + + marshal_u32(buffer, session_header->session_handle, buffer_space); + marshal_u16(buffer, session_header->nonce_size, buffer_space); + marshal_blob(buffer, session_header->nonce, + session_header->nonce_size, buffer_space); + marshal_u8(buffer, session_header->session_attrs, buffer_space); + marshal_u16(buffer, session_header->auth_size, buffer_space); + marshal_blob(buffer, session_header->auth, + session_header->auth_size, buffer_space); + + /* Paste in the session size. */ + marshal_fill_size_field(buffer, &size_field, 0, buffer_space); +} + +static void marshal_TPM2B(void **buffer, + TPM2B *data, + int *buffer_space) +{ + size_t total_size = data->size + sizeof(data->size); + + if (total_size > *buffer_space) { + *buffer_space = -1; + return; + } + marshal_u16(buffer, data->size, buffer_space); + memcpy(*buffer, data->buffer, data->size); + *buffer = ((uint8_t *)(*buffer)) + data->size; + *buffer_space -= data->size; +} + +static void marshal_TPMS_NV_PUBLIC(void **buffer, + TPMS_NV_PUBLIC *data, + int *buffer_space) +{ + tpm2_marshal_size_field size_field; + + /* Skip room for the size. */ + marshal_reserve_size_field(buffer, &size_field, + sizeof(uint16_t), buffer_space); + + marshal_TPM_HANDLE(buffer, data->nvIndex, buffer_space); + marshal_ALG_ID(buffer, data->nameAlg, buffer_space); + marshal_u32(buffer, data->attributes, buffer_space); + marshal_TPM2B(buffer, &data->authPolicy, buffer_space); + marshal_u16(buffer, data->dataSize, buffer_space); + + /* Paste in the structure size. */ + marshal_fill_size_field(buffer, &size_field, 0, buffer_space); +} + +static void marshal_nv_define_space(void **buffer, + struct tpm2_nv_define_space_cmd + *command_body, + int *buffer_space) +{ + struct tpm2_session_header session_header; + + /* Use platform authorization if PLATFORMCREATE is set, and owner + * authorization otherwise (per TPM2 Spec. Part 2. Section 31.3.1). + * Owner authorization with empty password will work only until + * ownership is taken. Platform authorization will work only until + * platform hierarchy is disabled (i.e. in firmware or in recovery + * mode). + */ + if (command_body->publicInfo.attributes & TPMA_NV_PLATFORMCREATE) + marshal_TPM_HANDLE(buffer, TPM_RH_PLATFORM, buffer_space); + else + marshal_TPM_HANDLE(buffer, TPM_RH_OWNER, buffer_space); + + memset(&session_header, 0, sizeof(session_header)); + session_header.session_handle = TPM_RS_PW; + marshal_session_header(buffer, &session_header, buffer_space); + tpm_tag = TPM_ST_SESSIONS; + + marshal_TPM2B(buffer, &command_body->auth, buffer_space); + marshal_TPMS_NV_PUBLIC(buffer, &command_body->publicInfo, buffer_space); +} + +static void marshal_nv_undefine_space(void **buffer, + struct tpm2_nv_undefine_space_cmd + *command_body, + int *buffer_space) +{ + struct tpm2_session_header session_header; + + /* Use platform authorization if PLATFORMCREATE is set, and owner + * authorization otherwise (per TPM2 Spec. Part 2. Section 31.3.1). + * Owner authorization with empty password will work only until + * ownership is taken. Platform authorization will work only until + * platform hierarchy is disabled (i.e. in firmware or in recovery + * mode). + */ + if (command_body->use_platform_auth) + marshal_TPM_HANDLE(buffer, TPM_RH_PLATFORM, buffer_space); + else + marshal_TPM_HANDLE(buffer, TPM_RH_OWNER, buffer_space); + marshal_TPM_HANDLE(buffer, command_body->nvIndex, buffer_space); + + memset(&session_header, 0, sizeof(session_header)); + session_header.session_handle = TPM_RS_PW; + marshal_session_header(buffer, &session_header, buffer_space); + tpm_tag = TPM_ST_SESSIONS; +} + +/* Determine which authorization should be used when writing or write-locking + * an NV index. + * + * Use a simplified approach: + * 1) Use platform auth for indexes defined by TPM and Platform, as + * specified in "Registry of reserved TPM 2.0 handles and localities". + * That will only work for indexes with PPWRITE, and until the platform + * hierarchy is disabled. + * 2) Use empty password auth for other indexes. + * That will only work for indexes with AUTHWRITE and empty auth value. + * + * A more honest approach would require the caller to specify the + * authorization, or would check the NV index attributes. + * But that's not needed now, as all indexes defined by firmware are + * in the TPM range and have PPWRITE. The indexes defined by the + * OS are in the Owner range and have either OWNERWRITE or AUTHWRITE, + * but we don't ever use Tlcl to write to OWNERWRITE indexes. + */ +static TPM_HANDLE get_nv_index_write_auth(TPMI_RH_NV_INDEX nvIndex) +{ + return nvIndex >= TPMI_RH_NV_INDEX_OWNER_START ? + nvIndex : + TPM_RH_PLATFORM; +} + +static void marshal_nv_write(void **buffer, + struct tpm2_nv_write_cmd *command_body, + int *buffer_space) +{ + struct tpm2_session_header session_header; + + marshal_TPM_HANDLE(buffer, + get_nv_index_write_auth(command_body->nvIndex), + buffer_space); + marshal_TPM_HANDLE(buffer, command_body->nvIndex, buffer_space); + memset(&session_header, 0, sizeof(session_header)); + session_header.session_handle = TPM_RS_PW; + marshal_session_header(buffer, &session_header, buffer_space); + tpm_tag = TPM_ST_SESSIONS; + + marshal_TPM2B(buffer, &command_body->data.b, buffer_space); + marshal_u16(buffer, command_body->offset, buffer_space); +} + +static void marshal_nv_read(void **buffer, + struct tpm2_nv_read_cmd *command_body, + int *buffer_space) +{ + struct tpm2_session_header session_header; + + /* Use empty password auth if platform hierarchy is disabled */ + if (ph_disabled) + marshal_TPM_HANDLE(buffer, command_body->nvIndex, buffer_space); + else + marshal_TPM_HANDLE(buffer, TPM_RH_PLATFORM, buffer_space); + marshal_TPM_HANDLE(buffer, command_body->nvIndex, buffer_space); + memset(&session_header, 0, sizeof(session_header)); + session_header.session_handle = TPM_RS_PW; + marshal_session_header(buffer, &session_header, buffer_space); + tpm_tag = TPM_ST_SESSIONS; + marshal_u16(buffer, command_body->size, buffer_space); + marshal_u16(buffer, command_body->offset, buffer_space); +} + +static void marshal_nv_read_lock(void **buffer, + struct tpm2_nv_read_lock_cmd *command_body, + int *buffer_space) +{ + struct tpm2_session_header session_header; + + tpm_tag = TPM_ST_SESSIONS; + marshal_TPM_HANDLE(buffer, command_body->nvIndex, buffer_space); + marshal_TPM_HANDLE(buffer, command_body->nvIndex, buffer_space); + memset(&session_header, 0, sizeof(session_header)); + session_header.session_handle = TPM_RS_PW; + marshal_session_header(buffer, &session_header, buffer_space); +} + +static void marshal_nv_write_lock(void **buffer, + struct tpm2_nv_write_lock_cmd *command_body, + int *buffer_space) +{ + struct tpm2_session_header session_header; + + tpm_tag = TPM_ST_SESSIONS; + marshal_TPM_HANDLE(buffer, + get_nv_index_write_auth(command_body->nvIndex), + buffer_space); + marshal_TPM_HANDLE(buffer, command_body->nvIndex, buffer_space); + memset(&session_header, 0, sizeof(session_header)); + session_header.session_handle = TPM_RS_PW; + marshal_session_header(buffer, &session_header, buffer_space); +} + +static void marshal_nv_read_public(void **buffer, + struct tpm2_nv_read_public_cmd *command_body, + int *buffer_space) +{ + tpm_tag = TPM_ST_NO_SESSIONS; + + marshal_TPM_HANDLE(buffer, command_body->nvIndex, buffer_space); +} + +static void marshal_hierarchy_control(void **buffer, + struct tpm2_hierarchy_control_cmd + *command_body, + int *buffer_space) +{ + struct tpm2_session_header session_header; + + tpm_tag = TPM_ST_SESSIONS; + marshal_TPM_HANDLE(buffer, TPM_RH_PLATFORM, buffer_space); + memset(&session_header, 0, sizeof(session_header)); + session_header.session_handle = TPM_RS_PW; + marshal_session_header(buffer, &session_header, buffer_space); + + marshal_TPM_HANDLE(buffer, command_body->enable, buffer_space); + marshal_u8(buffer, command_body->state, buffer_space); +} + +static void marshal_get_capability(void **buffer, + struct tpm2_get_capability_cmd + *command_body, + int *buffer_space) +{ + tpm_tag = TPM_ST_NO_SESSIONS; + + marshal_u32(buffer, command_body->capability, buffer_space); + marshal_u32(buffer, command_body->property, buffer_space); + marshal_u32(buffer, command_body->property_count, buffer_space); +} + +static void marshal_get_random(void **buffer, struct tpm2_get_random_cmd + *command_body, + int *buffer_space) +{ + tpm_tag = TPM_ST_NO_SESSIONS; + + marshal_u16(buffer, command_body->bytes_requested, buffer_space); +} + +static void marshal_clear(void **buffer, + void *command_body, + int *buffer_space) +{ + struct tpm2_session_header session_header; + + tpm_tag = TPM_ST_SESSIONS; + marshal_TPM_HANDLE(buffer, TPM_RH_PLATFORM, buffer_space); + memset(&session_header, 0, sizeof(session_header)); + session_header.session_handle = TPM_RS_PW; + marshal_session_header(buffer, &session_header, buffer_space); +} + +static void marshal_self_test(void **buffer, + struct tpm2_self_test_cmd *command_body, + int *buffer_space) +{ + tpm_tag = TPM_ST_NO_SESSIONS; + + marshal_u8(buffer, command_body->full_test, buffer_space); +} + +static void marshal_startup(void **buffer, + struct tpm2_startup_cmd *command_body, + int *buffer_space) +{ + tpm_tag = TPM_ST_NO_SESSIONS; + + marshal_TPM_SU(buffer, command_body->startup_type, buffer_space); +} + +static void marshal_shutdown(void **buffer, + struct tpm2_shutdown_cmd *command_body, + int *buffer_space) +{ + tpm_tag = TPM_ST_NO_SESSIONS; + + marshal_TPM_SU(buffer, command_body->shutdown_type, buffer_space); +} + +static void marshal_TPMT_HA(void **buffer, + TPMT_HA *data, + int *buffer_space) +{ + if (data->hashAlg != TPM_ALG_SHA256) + { + VB2_DEBUG("Unsupported TPMT_HA hash algorithm: %#x\n", + data->hashAlg); + *buffer_space = -1; + return; + } + marshal_TPMI_ALG_HASH(buffer, data->hashAlg, buffer_space); + /* We only support SHA256 now. */ + marshal_blob(buffer, data->digest.sha256, + SHA256_DIGEST_SIZE, buffer_space); +} + +static void marshal_TPML_DIGEST_VALUES(void **buffer, + TPML_DIGEST_VALUES *data, + int *buffer_space) +{ + int i; + + marshal_u32(buffer, data->count, buffer_space); + for (i = 0; i < data->count; i++) + marshal_TPMT_HA(buffer, &data->digests[i], buffer_space); +} + +static void marshal_pcr_extend(void **buffer, + struct tpm2_pcr_extend_cmd *command_body, + int *buffer_space) +{ + struct tpm2_session_header session_header; + + tpm_tag = TPM_ST_SESSIONS; + marshal_TPM_HANDLE(buffer, command_body->pcrHandle, buffer_space); + memset(&session_header, 0, sizeof(session_header)); + session_header.session_handle = TPM_RS_PW; + marshal_session_header(buffer, &session_header, buffer_space); + marshal_TPML_DIGEST_VALUES(buffer, &command_body->digests, buffer_space); +} + +int tpm_marshal_command(TPM_CC command, void *tpm_command_body, + void *buffer, int buffer_size) +{ + void *cmd_body = (uint8_t *)buffer + sizeof(struct tpm_header); + int max_body_size = buffer_size - sizeof(struct tpm_header); + int body_size = max_body_size; + + /* Will be modified when marshaling some commands. */ + tpm_tag = TPM_ST_NO_SESSIONS; + + switch (command) { + + case TPM2_NV_DefineSpace: + marshal_nv_define_space(&cmd_body, tpm_command_body, &body_size); + break; + + case TPM2_NV_UndefineSpace: + marshal_nv_undefine_space(&cmd_body, tpm_command_body, &body_size); + break; + + case TPM2_NV_Read: + marshal_nv_read(&cmd_body, tpm_command_body, &body_size); + break; + + case TPM2_NV_Write: + marshal_nv_write(&cmd_body, tpm_command_body, &body_size); + break; + + case TPM2_NV_ReadLock: + marshal_nv_read_lock(&cmd_body, tpm_command_body, &body_size); + break; + + case TPM2_NV_WriteLock: + marshal_nv_write_lock(&cmd_body, tpm_command_body, &body_size); + break; + + case TPM2_NV_ReadPublic: + marshal_nv_read_public(&cmd_body, tpm_command_body, &body_size); + break; + + case TPM2_Hierarchy_Control: + marshal_hierarchy_control(&cmd_body, + tpm_command_body, &body_size); + break; + + case TPM2_GetCapability: + marshal_get_capability(&cmd_body, tpm_command_body, &body_size); + break; + + case TPM2_GetRandom: + marshal_get_random(&cmd_body, tpm_command_body, &body_size); + break; + + case TPM2_Clear: + marshal_clear(&cmd_body, tpm_command_body, &body_size); + break; + + case TPM2_SelfTest: + marshal_self_test(&cmd_body, tpm_command_body, &body_size); + break; + + case TPM2_Startup: + marshal_startup(&cmd_body, tpm_command_body, &body_size); + break; + + case TPM2_Shutdown: + marshal_shutdown(&cmd_body, tpm_command_body, &body_size); + break; + + case TPM2_PCR_Extend: + marshal_pcr_extend(&cmd_body, tpm_command_body, &body_size); + break; + + default: + body_size = -1; + VB2_DEBUG("Request to marshal unsupported command %#x\n", + command); + } + + if (body_size > 0) { + + /* See how much room was taken by marshaling. */ + body_size = max_body_size - body_size; + + body_size += sizeof(struct tpm_header); + + marshal_u16(&buffer, tpm_tag, &max_body_size); + marshal_u32(&buffer, body_size, &max_body_size); + marshal_u32(&buffer, command, &max_body_size); + } + + return body_size; +} + +int tpm_unmarshal_response(TPM_CC command, + void *response_body, + int cr_size, + struct tpm2_response *response) +{ + if (cr_size < sizeof(struct tpm_header)) + return -1; + + response->hdr.tpm_tag = unmarshal_u16(&response_body, &cr_size); + response->hdr.tpm_size = unmarshal_u32(&response_body, &cr_size); + response->hdr.tpm_code = unmarshal_u32(&response_body, &cr_size); + + if (!cr_size) { + if (response->hdr.tpm_size != sizeof(response->hdr)) + VB2_DEBUG("size mismatch in response to command %#x\n", + command); + return 0; + } + + switch (command) { + case TPM2_NV_Read: + unmarshal_nv_read(&response_body, &cr_size, + &response->nvr); + break; + + case TPM2_NV_ReadPublic: + unmarshal_nv_read_public(&response_body, &cr_size, + &response->nv_read_public); + break; + + case TPM2_GetCapability: + unmarshal_get_capability(&response_body, &cr_size, + &response->cap); + break; + + case TPM2_GetRandom: + unmarshal_get_random(&response_body, &cr_size, + &response->random); + break; + + case TPM2_Hierarchy_Control: + case TPM2_NV_Write: + case TPM2_NV_WriteLock: + case TPM2_NV_ReadLock: + case TPM2_Clear: + case TPM2_SelfTest: + case TPM2_Startup: + case TPM2_Shutdown: + case TPM2_NV_DefineSpace: + case TPM2_NV_UndefineSpace: + case TPM2_PCR_Extend: + /* Session data included in response can be safely ignored. */ + cr_size = 0; + break; + + default: + { + int i; + + VB2_DEBUG("Request to unmarshal unexpected command %#x," + " code %#x", + command, + response->hdr.tpm_code); + + for (i = 0; i < cr_size; i++) { + if (!(i % 16)) + VB2_DEBUG_RAW("\n"); + VB2_DEBUG_RAW("%2.2x ", + ((uint8_t *)response_body)[i]); + } + } + VB2_DEBUG("\n"); + return -1; + } + + if (cr_size) { + VB2_DEBUG("got %d bytes back in response to %#x," + " failed to parse (%d)\n", + response->hdr.tpm_size, + command, cr_size); + return -1; + } + + /* The entire message have been parsed. */ + return 0; +} + +uint32_t tpm_get_packet_size(const uint8_t *packet) +{ + /* 0: tag (16 bit) + * 2: size (32 bit) + */ + return read_be32(packet + 2); +} + +uint32_t tpm_get_packet_response_code(const uint8_t *packet) +{ + /* 0: tag (16 bit) + * 2: size (32 bit) + * 6: resp code (32 bit) + */ + return read_be32(packet + 6); +} + +void tpm_set_ph_disabled(int flag) +{ + ph_disabled = flag; +} + +int tpm_is_ph_disabled(void) +{ + return ph_disabled; +} diff --git a/firmware/lib/tpm2_lite/tlcl.c b/firmware/lib/tpm2_lite/tlcl.c new file mode 100644 index 0000000..b91119b --- /dev/null +++ b/firmware/lib/tpm2_lite/tlcl.c @@ -0,0 +1,685 @@ +/* Copyright 2016 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Some TPM constants and type definitions for standalone compilation for use + * in the firmware + */ + +#include "2common.h" +#include "2sysincludes.h" +#include "tlcl.h" +#include "tpm2_marshaling.h" + +/* + * TODO(chromium:1032930): Originally accessed by including secdata_tpm.h. + * This file moved to depthcharge, and vboot shouldn't need to know the indices + * of different TPM spaces anyways. But since the vboot TPM 2.0 implementation + * uses TPM 1.2 primitives as its API, TlclSetGlobalLock (TPM 1.2) needs to use + * the firmware space index to emulate a TlclWriteLock call (TPM 2.0). + */ +#define FIRMWARE_NV_INDEX 0x1007 + +/* Global buffer for deserialized responses. */ +struct tpm2_response tpm2_resp; + +/* + * Serializes and sends the command, gets back the response and + * parses it into the provided buffer. + * + * @command: command code. + * @command_body: command-specific payload. + * @response: pointer to the buffer to place the parsed response to. + * + * Returns the result of processing the command: + * - if an error happened at marshaling, sending, receiving or unmarshaling + * stages, returns the error code; + * - if the received response was successfully unmarshaled, returns success + * regardless of the received response code. + */ +static uint32_t tpm_get_response(TPM_CC command, + void *command_body, + struct tpm2_response *response) +{ + /* Command/response buffer. */ + static uint8_t cr_buffer[TPM_BUFFER_SIZE]; + int out_size; + uint32_t res; + uint32_t in_size; + + out_size = tpm_marshal_command(command, command_body, + cr_buffer, sizeof(cr_buffer)); + if (out_size < 0) { + VB2_DEBUG("command %#x, failed to serialize\n", command); + return TPM_E_WRITE_FAILURE; + } + + in_size = sizeof(cr_buffer); + res = vb2ex_tpm_send_recv(cr_buffer, out_size, cr_buffer, &in_size); + if (res != TPM_SUCCESS) { + VB2_DEBUG("tpm transaction failed for %#x with error %#x\n", + command, res); + return res; + } + + if (tpm_unmarshal_response(command, cr_buffer, in_size, response) < 0) { + VB2_DEBUG("command %#x, failed to parse response\n", command); + return TPM_E_READ_FAILURE; + } + + VB2_DEBUG("command %#x, return code %#x\n", command, + response->hdr.tpm_code); + + return TPM_SUCCESS; +} + +/* + * Same as tpm_get_response() but, if the response was successfully received, + * returns the received response code. The set of errors returned by the + * communication stack doesn't overlap with the set of errors returned by the + * TPM, so it's always possible to distinguish the two. In case of communication + * errors, the caller should not check other fields of response, as the response + * is likely not filled. In any case, it is recommended that callers, who need + * to work with response fields even if a non-zero response code was received + * from the TPM, use tpm_get_response() and explicitly check the response code + * themselves. + */ +static uint32_t tpm_send_receive(TPM_CC command, + void *command_body, + struct tpm2_response *response) +{ + uint32_t rv = tpm_get_response(command, command_body, response); + + return rv ? rv : response->hdr.tpm_code; +} + +/* + * Same as tpm_send_receive() for callers that care only about the return code. + */ +static uint32_t tpm_get_response_code(TPM_CC command, void *command_body) +{ + return tpm_send_receive(command, command_body, &tpm2_resp); +} + +static uint32_t tlcl_read_ph_disabled(void) +{ + uint32_t rv; + TPM_STCLEAR_FLAGS flags; + + rv = TlclGetSTClearFlags(&flags); + if (rv == TPM_SUCCESS) + tpm_set_ph_disabled(!flags.phEnable); + + return rv; +} + +uint32_t TlclLibInit(void) +{ + uint32_t rv; + + rv = vb2ex_tpm_init(); + if (rv != TPM_SUCCESS) + return rv; + + rv = tlcl_read_ph_disabled(); + if (rv != TPM_SUCCESS) + TlclLibClose(); + + return rv; +} + +uint32_t TlclLibClose(void) +{ + return vb2ex_tpm_close(); +} + +uint32_t TlclSendReceive(const uint8_t *request, uint8_t *response, + int max_length) +{ + uint32_t rv, resp_size; + + resp_size = max_length; + rv = vb2ex_tpm_send_recv(request, tpm_get_packet_size(request), + response, &resp_size); + + return rv ? rv : tpm_get_packet_response_code(response); +} + +int TlclPacketSize(const uint8_t *packet) +{ + return tpm_get_packet_size(packet); +} + +uint32_t TlclStartup(void) +{ + struct tpm2_startup_cmd startup; + + startup.startup_type = TPM_SU_CLEAR; + + return tpm_get_response_code(TPM2_Startup, &startup); +} + +uint32_t TlclSaveState(void) +{ + struct tpm2_shutdown_cmd shutdown; + + shutdown.shutdown_type = TPM_SU_STATE; + + return tpm_get_response_code(TPM2_Shutdown, &shutdown); +} + +uint32_t TlclResume(void) +{ + struct tpm2_startup_cmd startup; + + startup.startup_type = TPM_SU_STATE; + + return tpm_get_response_code(TPM2_Startup, &startup); +} + +uint32_t TlclSelfTestFull(void) +{ + struct tpm2_self_test_cmd self_test; + + self_test.full_test = 1; + + return tpm_get_response_code(TPM2_SelfTest, &self_test); +} + +uint32_t TlclContinueSelfTest(void) +{ + struct tpm2_self_test_cmd self_test; + + self_test.full_test = 0; + + return tpm_get_response_code(TPM2_SelfTest, &self_test); +} + +uint32_t TlclDefineSpace(uint32_t index, uint32_t perm, uint32_t size) +{ + return TlclDefineSpaceEx(NULL, 0, index, perm, size, NULL, 0); +} + +#ifdef CHROMEOS_ENVIRONMENT + +uint32_t TlclUndefineSpace(uint32_t index) +{ + return TlclUndefineSpaceEx(NULL, 0, index); +} + +uint32_t TlclUndefineSpaceEx(const uint8_t* owner_auth, + uint32_t owner_auth_size, + uint32_t index) +{ + struct tpm2_nv_undefine_space_cmd undefine_space; + uint32_t permissions; + uint32_t rv; + + /* Authentication support is not implemented. */ + VB2_ASSERT(owner_auth == NULL && owner_auth_size == 0); + + /* get the publicInfo of index */ + rv = TlclGetPermissions(index, &permissions); + if (rv != TPM_SUCCESS) { + return rv; + } + undefine_space.nvIndex = HR_NV_INDEX + index; + undefine_space.use_platform_auth = + (permissions & TPMA_NV_PLATFORMCREATE) > 0; + return tpm_get_response_code(TPM2_NV_UndefineSpace, &undefine_space); +} + +#endif /* CHROMEOS_ENVIRONMENT */ + +uint32_t TlclDefineSpaceEx(const uint8_t* owner_auth, uint32_t owner_auth_size, + uint32_t index, uint32_t perm, uint32_t size, + const void* auth_policy, uint32_t auth_policy_size) +{ + struct tpm2_nv_define_space_cmd define_space; + + /* Authentication support is not implemented. */ + VB2_ASSERT(owner_auth == NULL && owner_auth_size == 0); + + /* For backwards-compatibility, if no READ or WRITE permissions are set, + * assume readable/writeable with empty auth value. + */ + if (!(perm & TPMA_NV_MASK_WRITE)) + perm |= TPMA_NV_AUTHWRITE; + if (!(perm & TPMA_NV_MASK_READ)) + perm |= TPMA_NV_AUTHREAD; + + memset(&define_space, 0, sizeof(define_space)); + define_space.publicInfo.nvIndex = HR_NV_INDEX + index; + define_space.publicInfo.dataSize = size; + define_space.publicInfo.attributes = perm; + define_space.publicInfo.nameAlg = TPM_ALG_SHA256; + if (auth_policy && auth_policy_size > 0) { + define_space.publicInfo.authPolicy.size = auth_policy_size; + define_space.publicInfo.authPolicy.buffer = + (uint8_t*) auth_policy; + } + + return tpm_get_response_code(TPM2_NV_DefineSpace, &define_space); +} + +uint32_t TlclInitNvAuthPolicy(uint32_t pcr_selection_bitmap, + const uint8_t pcr_values[][TPM_PCR_DIGEST], + void* auth_policy, uint32_t* auth_policy_size) +{ + /* Actual PCR selection isn't implemented. */ + VB2_ASSERT(pcr_selection_bitmap == 0); + *auth_policy_size = 0; + return TPM_SUCCESS; +} + +/** + * Issue a ForceClear. The TPM error code is returned. + */ +uint32_t TlclForceClear(void) +{ + return tpm_get_response_code(TPM2_Clear, NULL); +} + +uint32_t TlclSetDeactivated(uint8_t flag) +{ + VB2_DEBUG("NOT YET IMPLEMENTED\n"); + return TPM_SUCCESS; +} + +uint32_t TlclSetEnable(void) +{ + VB2_DEBUG("NOT YET IMPLEMENTED\n"); + return TPM_SUCCESS; +} + +uint32_t TlclGetFlags(uint8_t* disable, + uint8_t* deactivated, + uint8_t *nvlocked) +{ + /* For TPM2 the flags are always the same */ + if (disable) + *disable = 0; + if (deactivated) + *deactivated = 0; + if (nvlocked) + *nvlocked = 1; + return TPM_SUCCESS; +} + +int TlclIsOwned(void) +{ + VB2_DEBUG("NOT YET IMPLEMENTED\n"); + return 0; +} + +uint32_t TlclExtend(int pcr_num, const uint8_t *in_digest, uint8_t *out_digest) +{ + struct tpm2_pcr_extend_cmd pcr_ext_cmd; + + pcr_ext_cmd.pcrHandle = HR_PCR + pcr_num; + pcr_ext_cmd.digests.count = 1; + pcr_ext_cmd.digests.digests[0].hashAlg = TPM_ALG_SHA256; + memcpy(pcr_ext_cmd.digests.digests[0].digest.sha256, in_digest, + sizeof(pcr_ext_cmd.digests.digests[0].digest.sha256)); + + return tpm_get_response_code(TPM2_PCR_Extend, &pcr_ext_cmd); +} + + +static uint32_t tlcl_nv_read_public(uint32_t index, + struct nv_read_public_response **presp) +{ + struct tpm2_response *response = &tpm2_resp; + struct tpm2_nv_read_public_cmd read_pub; + uint32_t rv; + + memset(&read_pub, 0, sizeof(read_pub)); + read_pub.nvIndex = HR_NV_INDEX + index; + + rv = tpm_send_receive(TPM2_NV_ReadPublic, &read_pub, response); + if (rv == TPM_SUCCESS) + *presp = &response->nv_read_public; + + return rv; +} + +/** + * Get the permission bits for the NVRAM space with |index|. + */ +uint32_t TlclGetPermissions(uint32_t index, uint32_t *permissions) +{ + uint32_t rv; + struct nv_read_public_response *resp; + + rv = tlcl_nv_read_public(index, &resp); + if (rv == TPM_SUCCESS) + *permissions = resp->nvPublic.attributes; + + return rv; +} + +uint32_t TlclGetSpaceInfo(uint32_t index, uint32_t *attributes, uint32_t *size, + void* auth_policy, uint32_t* auth_policy_size) +{ + uint32_t rv; + struct nv_read_public_response *resp; + + rv = tlcl_nv_read_public(index, &resp); + if (rv != TPM_SUCCESS) + return rv; + + *attributes = resp->nvPublic.attributes; + *size = resp->nvPublic.dataSize; + if (resp->nvPublic.authPolicy.size > *auth_policy_size) { + return TPM_E_BUFFER_SIZE; + } + + *auth_policy_size = resp->nvPublic.authPolicy.size; + memcpy(auth_policy, resp->nvPublic.authPolicy.buffer, + *auth_policy_size); + + return TPM_SUCCESS; +} + +static uint32_t tlcl_get_capability(TPM_CAP cap, TPM_PT property, + struct get_capability_response **presp) +{ + struct tpm2_response *response = &tpm2_resp; + struct tpm2_get_capability_cmd getcap; + uint32_t rv; + + getcap.capability = cap; + getcap.property = property; + getcap.property_count = 1; + + rv = tpm_send_receive(TPM2_GetCapability, &getcap, response); + if (rv == TPM_SUCCESS) + *presp = &response->cap; + + return rv; +} + +static uint32_t tlcl_get_tpm_property(TPM_PT property, uint32_t *pvalue) +{ + uint32_t rv; + struct get_capability_response *resp; + TPML_TAGGED_TPM_PROPERTY *tpm_prop; + + rv = tlcl_get_capability(TPM_CAP_TPM_PROPERTIES, property, &resp); + if (rv != TPM_SUCCESS) + return rv; + + if (resp->capability_data.capability != TPM_CAP_TPM_PROPERTIES) + return TPM_E_IOERROR; + + tpm_prop = &resp->capability_data.data.tpm_properties; + + if ((tpm_prop->count != 1) || + (tpm_prop->tpm_property[0].property != property)) + return TPM_E_IOERROR; + + *pvalue = tpm_prop->tpm_property[0].value; + return TPM_SUCCESS; +} + +uint32_t TlclGetPermanentFlags(TPM_PERMANENT_FLAGS *pflags) +{ + return tlcl_get_tpm_property(TPM_PT_PERMANENT, + (uint32_t *)pflags); +} + +uint32_t TlclGetSTClearFlags(TPM_STCLEAR_FLAGS *pflags) +{ + return tlcl_get_tpm_property(TPM_PT_STARTUP_CLEAR, + (uint32_t *)pflags); +} + +uint32_t TlclGetOwnership(uint8_t *owned) +{ + uint32_t rv; + TPM_PERMANENT_FLAGS flags; + *owned = 0; + + rv = TlclGetPermanentFlags(&flags); + if (rv == TPM_SUCCESS) + *owned = flags.ownerAuthSet; + + return rv; +} + +static uint32_t tlcl_lock_nv_write(uint32_t index) +{ + struct tpm2_nv_write_lock_cmd nv_wl; + + nv_wl.nvIndex = HR_NV_INDEX + index; + return tpm_get_response_code(TPM2_NV_WriteLock, &nv_wl); +} + +static uint32_t tlcl_disable_platform_hierarchy(void) +{ + struct tpm2_hierarchy_control_cmd hc; + uint32_t rv; + + hc.enable = TPM_RH_PLATFORM; + hc.state = 0; + + rv = tpm_get_response_code(TPM2_Hierarchy_Control, &hc); + if (rv == TPM_SUCCESS) + tpm_set_ph_disabled(1); + + return rv; +} + +/** + * The name of the function was kept to maintain the existing TPM API, but + * TPM2.0 does not use the global lock to protect the FW rollback counter. + * Instead it calls WriteLock for the FW NVRAM index to prevent future + * writes to it. + * + * It first checks if the platform hierarchy is already disabled, and does + * nothing, if so. Otherwise, WriteLock for the index obviously fails. + */ +uint32_t TlclSetGlobalLock(void) +{ + if (tpm_is_ph_disabled()) + return TPM_SUCCESS; + else + return tlcl_lock_nv_write(FIRMWARE_NV_INDEX); +} + +/** + * Turn off physical presence and locks it off until next reboot. The TPM + * error code is returned. + * + * The name of the function was kept to maintain the existing TPM API, but + * TPM2.0 does not have to use the Physical Presence concept. Instead it just + * removes platform authorization - this makes sure that firmware and kernel + * rollback counter spaces can not be modified. + * + * It also explicitly locks the kernel rollback counter space (the FW rollback + * counter space was locked before RW firmware started.) + */ +uint32_t TlclLockPhysicalPresence(void) +{ + if (tpm_is_ph_disabled()) + return TPM_SUCCESS; + + return tlcl_disable_platform_hierarchy(); +} + +uint32_t TlclRead(uint32_t index, void* data, uint32_t length) +{ + struct tpm2_nv_read_cmd nv_readc; + struct tpm2_response *response = &tpm2_resp; + uint32_t rv; + + memset(&nv_readc, 0, sizeof(nv_readc)); + + nv_readc.nvIndex = HR_NV_INDEX + index; + nv_readc.size = length; + + rv = tpm_send_receive(TPM2_NV_Read, &nv_readc, response); + + /* Need to map tpm error codes into internal values. */ + switch (rv) { + case TPM_SUCCESS: + break; + + case 0x28b: + return TPM_E_BADINDEX; + + default: + return rv; + } + + if (length > response->nvr.buffer.t.size) + return TPM_E_RESPONSE_TOO_LARGE; + + if (length < response->nvr.buffer.t.size) + return TPM_E_READ_EMPTY; + + memcpy(data, response->nvr.buffer.t.buffer, length); + + return TPM_SUCCESS; +} + +uint32_t TlclWrite(uint32_t index, const void *data, uint32_t length) +{ + struct tpm2_nv_write_cmd nv_writec; + + memset(&nv_writec, 0, sizeof(nv_writec)); + + nv_writec.nvIndex = HR_NV_INDEX + index; + nv_writec.data.t.size = length; + nv_writec.data.t.buffer = data; + + return tpm_get_response_code(TPM2_NV_Write, &nv_writec); +} + +uint32_t TlclPCRRead(uint32_t index, void *data, uint32_t length) +{ + VB2_DEBUG("NOT YET IMPLEMENTED\n"); + return TPM_SUCCESS; +} + +uint32_t TlclWriteLock(uint32_t index) +{ + struct tpm2_nv_write_lock_cmd nv_writelockc; + + memset(&nv_writelockc, 0, sizeof(nv_writelockc)); + + nv_writelockc.nvIndex = HR_NV_INDEX | index; + + return tpm_get_response_code(TPM2_NV_WriteLock, &nv_writelockc); +} + +uint32_t TlclReadLock(uint32_t index) +{ + struct tpm2_nv_read_lock_cmd nv_readlockc; + + memset(&nv_readlockc, 0, sizeof(nv_readlockc)); + + nv_readlockc.nvIndex = HR_NV_INDEX | index; + + return tpm_get_response_code(TPM2_NV_ReadLock, &nv_readlockc); +} + +uint32_t TlclGetRandom(uint8_t *data, uint32_t length, uint32_t *size) +{ + uint32_t rv; + struct tpm2_get_random_cmd random; + struct get_random_response *response = &tpm2_resp.random; + size_t max_len, offset; + + offset = offsetof(struct tpm2_response, random.random_bytes.buffer); + max_len = TPM_BUFFER_SIZE - offset; + + if (length > max_len) + return TPM_E_BUFFER_SIZE; + + random.bytes_requested = length; + + rv = tpm_send_receive(TPM2_GetRandom, &random, &tpm2_resp); + if (rv != TPM_SUCCESS) + return rv; + + *size = response->random_bytes.size; + if (*size > length) + return TPM_E_RESPONSE_TOO_LARGE; + + memcpy(data, response->random_bytes.buffer, *size); + + return rv; +} + +// Converts TPM_PT_VENDOR_STRING_x |value| to an array of bytes in |buf|. +// Returns the number of bytes in the array. +// |buf| should be at least 4 bytes long. +static size_t tlcl_vendor_string_parse(uint32_t value, uint8_t* buf) +{ + size_t len = 0; + int shift = 24; + for (; len < 4; shift -= 8) { + uint8_t byte = (value >> shift) & 0xffu; + if (!byte) + break; + buf[len++] = byte; + } + return len; +} + +uint32_t TlclGetVersion(uint32_t* vendor, uint64_t* firmware_version, + uint8_t* vendor_specific_buf, + size_t* vendor_specific_buf_size) +{ + uint32_t result = tlcl_get_tpm_property(TPM_PT_MANUFACTURER, vendor); + if (result != TPM_SUCCESS) + return result; + + uint32_t version_1; + uint32_t version_2; + result = tlcl_get_tpm_property(TPM_PT_FIRMWARE_VERSION_1, &version_1); + if (result != TPM_SUCCESS) + return result; + result = tlcl_get_tpm_property(TPM_PT_FIRMWARE_VERSION_2, &version_2); + if (result != TPM_SUCCESS) + return result; + + *firmware_version = ((uint64_t) version_1 << 32) | version_2; + + if (!vendor_specific_buf_size) + return TPM_SUCCESS; + + size_t total_size = 0; + uint32_t prop_id; + uint8_t prop_string[16]; + for (prop_id = TPM_PT_VENDOR_STRING_1; + prop_id <= TPM_PT_VENDOR_STRING_4; + ++prop_id) { + uint32_t prop_value; + result = tlcl_get_tpm_property(prop_id, &prop_value); + if (result != TPM_SUCCESS) + break; + + size_t prop_len = tlcl_vendor_string_parse( + prop_value, prop_string + total_size); + VB2_ASSERT(prop_len <= 4 && + total_size + prop_len <= sizeof(prop_string)); + total_size += prop_len; + if (prop_len < 4) + break; + } + if (vendor_specific_buf) { + if (total_size > *vendor_specific_buf_size) + total_size = *vendor_specific_buf_size; + memcpy(vendor_specific_buf, prop_string, total_size); + } + *vendor_specific_buf_size = total_size; + return TPM_SUCCESS; +} + +uint32_t TlclIFXFieldUpgradeInfo(TPM_IFX_FIELDUPGRADEINFO* info) +{ + VB2_DEBUG("NOT YET IMPLEMENTED\n"); + return TPM_E_IOERROR; +} diff --git a/firmware/lib/tpm_lite/OWNERS b/firmware/lib/tpm_lite/OWNERS new file mode 100644 index 0000000..eda9c5e --- /dev/null +++ b/firmware/lib/tpm_lite/OWNERS @@ -0,0 +1,3 @@ +apronin@chromium.org +rspangler@chromium.org +vbendeb@chromium.org diff --git a/firmware/lib/tpm_lite/include/tlcl_internal.h b/firmware/lib/tpm_lite/include/tlcl_internal.h new file mode 100644 index 0000000..51557d9 --- /dev/null +++ b/firmware/lib/tpm_lite/include/tlcl_internal.h @@ -0,0 +1,87 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_TLCL_INTERNAL_H_ +#define VBOOT_REFERENCE_TLCL_INTERNAL_H_ + +/* + * These numbers derive from adding the sizes of command fields as shown in the + * TPM commands manual. + */ +#define kTpmRequestHeaderLength 10 +#define kTpmResponseHeaderLength 10 +#define kTpmReadInfoLength 12 +#define kEncAuthLength 20 +#define kPcrDigestLength 20 +#define kTpmRequestAuthBlockLength \ + (sizeof(uint32_t) + sizeof(TPM_NONCE) + 1 + TPM_AUTH_DATA_LEN) +#define kTpmResponseAuthBlockLength (sizeof(TPM_NONCE) + 1 + TPM_AUTH_DATA_LEN) + + +/* + * Conversion functions. ToTpmTYPE puts a value of type TYPE into a TPM + * command buffer. FromTpmTYPE gets a value of type TYPE from a TPM command + * buffer into a variable. ReadTpmTYPE reads a value of type TYPE from a buffer + * and advances the buffer pointer to after the field. + */ +__attribute__((unused)) +static inline void ToTpmUint32(uint8_t *buffer, uint32_t x) { + buffer[0] = (uint8_t)(x >> 24); + buffer[1] = (uint8_t)((x >> 16) & 0xff); + buffer[2] = (uint8_t)((x >> 8) & 0xff); + buffer[3] = (uint8_t)(x & 0xff); +} + +/* + * See comment for above function. + */ +__attribute__((unused)) +static inline void FromTpmUint32(const uint8_t *buffer, uint32_t *x) { + *x = (((uint32_t)buffer[0] << 24) | + (buffer[1] << 16) | + (buffer[2] << 8) | + buffer[3]); +} + +/* + * See comment for above function. + */ +__attribute__((unused)) +static inline uint32_t ReadTpmUint32(const uint8_t **buffer) { + uint32_t value; + FromTpmUint32(*buffer, &value); + *buffer += sizeof(value); + return value; +} + +/* + * See comment for above function. + */ +__attribute__((unused)) +static inline void ToTpmUint16(uint8_t *buffer, uint16_t x) { + buffer[0] = (uint8_t)(x >> 8); + buffer[1] = (uint8_t)(x & 0xff); +} + +/* + * See comment for above function. + */ +__attribute__((unused)) +static inline void FromTpmUint16(const uint8_t *buffer, uint16_t *x) { + *x = (buffer[0] << 8) | buffer[1]; +} + +/* + * See comment for above function. + */ +__attribute__((unused)) +static inline uint16_t ReadTpmUint16(const uint8_t **buffer) { + uint16_t value; + FromTpmUint16(*buffer, &value); + *buffer += sizeof(value); + return value; +} + +#endif /* VBOOT_REFERENCE_TLCL_INTERNAL_H_ */ diff --git a/firmware/lib/tpm_lite/include/tlcl_structures.h b/firmware/lib/tpm_lite/include/tlcl_structures.h new file mode 100644 index 0000000..7356c43 --- /dev/null +++ b/firmware/lib/tpm_lite/include/tlcl_structures.h @@ -0,0 +1,181 @@ +/* This file is automatically generated */ + +const struct s_tpm_delegate_read_table_cmd{ + uint8_t buffer[10]; +} tpm_delegate_read_table_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0xdb, }, +}; + +const struct s_tpm_create_delegation_family_cmd{ + uint8_t buffer[23]; + uint16_t familyLabel; +} tpm_create_delegation_family_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0x17, 0x0, 0x0, 0x0, 0xd2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, }, +22, }; + +const struct s_tpm_takeownership_cmd{ + uint8_t buffer[624]; + uint16_t encOwnerAuth; + uint16_t encSrkAuth; +} tpm_takeownership_cmd = {{0x0, 0xc2, 0x0, 0x0, 0x2, 0x70, 0x0, 0x0, 0x0, 0xd, 0x0, 0x5, 0x0, 0x0, 0x1, 0x0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0, 0x0, 0x1, 0x0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0, 0x28, 0x0, 0x0, 0x0, 0x11, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x3, 0x0, 0x1, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }, +16, 276, }; + +const struct s_tpm_osap_cmd{ + uint8_t buffer[36]; + uint16_t entityType; + uint16_t entityValue; + uint16_t nonceOddOSAP; +} tpm_osap_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0x24, 0x0, 0x0, 0x0, 0xb, }, +10, 12, 16, }; + +const struct s_tpm_oiap_cmd{ + uint8_t buffer[10]; +} tpm_oiap_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0xa, }, +}; + +const struct s_tpm_ifx_fieldupgradeinforequest2_cmd{ + uint8_t buffer[13]; +} tpm_ifx_fieldupgradeinforequest2_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0xd, 0x0, 0x0, 0x0, 0xaa, 0x11, 0x0, 0x0, }, +}; + +const struct s_tpm_getversionval_cmd{ + uint8_t buffer[18]; +} tpm_getversionval_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0x12, 0x0, 0x0, 0x0, 0x65, 0x0, 0x0, 0x0, 0x1a, 0x0, 0x0, 0x0, 0x0, }, +}; + +const struct s_tpm_extend_cmd{ + uint8_t buffer[34]; + uint16_t pcrNum; + uint16_t inDigest; +} tpm_extend_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x14, }, +10, 14, }; + +const struct s_tpm_get_random_cmd{ + uint8_t buffer[14]; + uint16_t bytesRequested; +} tpm_get_random_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0xe, 0x0, 0x0, 0x0, 0x46, }, +10, }; + +const struct s_tpm_getownership_cmd{ + uint8_t buffer[22]; +} tpm_getownership_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0x16, 0x0, 0x0, 0x0, 0x65, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x1, 0x11, }, +}; + +const struct s_tpm_getspaceinfo_cmd{ + uint8_t buffer[22]; + uint16_t index; +} tpm_getspaceinfo_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0x16, 0x0, 0x0, 0x0, 0x65, 0x0, 0x0, 0x0, 0x11, 0x0, 0x0, 0x0, 0x4, }, +18, }; + +const struct s_tpm_getstclearflags_cmd{ + uint8_t buffer[22]; +} tpm_getstclearflags_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0x16, 0x0, 0x0, 0x0, 0x65, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x1, 0x9, }, +}; + +const struct s_tpm_getflags_cmd{ + uint8_t buffer[22]; +} tpm_getflags_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0x16, 0x0, 0x0, 0x0, 0x65, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x1, 0x8, }, +}; + +const struct s_tpm_physicalsetdeactivated_cmd{ + uint8_t buffer[11]; + uint16_t deactivated; +} tpm_physicalsetdeactivated_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0xb, 0x0, 0x0, 0x0, 0x72, }, +10, }; + +const struct s_tpm_physicalenable_cmd{ + uint8_t buffer[10]; +} tpm_physicalenable_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0x6f, }, +}; + +const struct s_tpm_physicaldisable_cmd{ + uint8_t buffer[10]; +} tpm_physicaldisable_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0x70, }, +}; + +const struct s_tpm_forceclear_cmd{ + uint8_t buffer[10]; +} tpm_forceclear_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0x5d, }, +}; + +const struct s_tpm_readpubek_cmd{ + uint8_t buffer[30]; + uint16_t antiReplay; +} tpm_readpubek_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x0, 0x0, 0x7c, }, +10, }; + +const struct s_tpm_continueselftest_cmd{ + uint8_t buffer[10]; +} tpm_continueselftest_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0x53, }, +}; + +const struct s_tpm_selftestfull_cmd{ + uint8_t buffer[10]; +} tpm_selftestfull_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0x50, }, +}; + +const struct s_tpm_resume_cmd{ + uint8_t buffer[12]; +} tpm_resume_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0x99, 0x0, 0x2, }, +}; + +const struct s_tpm_savestate_cmd{ + uint8_t buffer[10]; +} tpm_savestate_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0x98, }, +}; + +const struct s_tpm_startup_cmd{ + uint8_t buffer[12]; +} tpm_startup_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0x99, 0x0, 0x1, }, +}; + +const struct s_tpm_finalizepp_cmd{ + uint8_t buffer[12]; +} tpm_finalizepp_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0xc, 0x40, 0x0, 0x0, 0xa, 0x2, 0xa0, }, +}; + +const struct s_tpm_pplock_cmd{ + uint8_t buffer[12]; +} tpm_pplock_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0xc, 0x40, 0x0, 0x0, 0xa, 0x0, 0x4, }, +}; + +const struct s_tpm_ppenable_cmd{ + uint8_t buffer[12]; +} tpm_ppenable_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0xc, 0x40, 0x0, 0x0, 0xa, 0x0, 0x20, }, +}; + +const struct s_tpm_ppassert_cmd{ + uint8_t buffer[12]; +} tpm_ppassert_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0xc, 0x40, 0x0, 0x0, 0xa, 0x0, 0x8, }, +}; + +const struct s_tpm_pcr_read_cmd{ + uint8_t buffer[14]; + uint16_t pcrNum; +} tpm_pcr_read_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0xe, 0x0, 0x0, 0x0, 0x15, }, +10, }; + +const struct s_tpm_nv_read_cmd{ + uint8_t buffer[22]; + uint16_t index; + uint16_t length; +} tpm_nv_read_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0x16, 0x0, 0x0, 0x0, 0xcf, }, +10, 18, }; + +const struct s_tpm_nv_write_cmd{ + uint8_t buffer[256]; + uint16_t index; + uint16_t length; + uint16_t data; +} tpm_nv_write_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcd, }, +10, 18, 22, }; + +const struct s_tpm_nv_definespace_cmd{ + uint8_t buffer[101]; + uint16_t index; + uint16_t pcr_info_read; + uint16_t pcr_info_write; + uint16_t perm; + uint16_t size; +} tpm_nv_definespace_cmd = {{0x0, 0xc1, 0x0, 0x0, 0x0, 0x65, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x18, 0, 0, 0, 0, 0x0, 0x3, 0, 0, 0, 0x1f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0, 0x3, 0, 0, 0, 0x1f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0, 0x17, }, +12, 16, 42, 70, 77, }; + +const int kWriteInfoLength = 12; diff --git a/firmware/lib/tpm_lite/include/tpm_error_messages.h b/firmware/lib/tpm_lite/include/tpm_error_messages.h new file mode 100644 index 0000000..ad2692c --- /dev/null +++ b/firmware/lib/tpm_lite/include/tpm_error_messages.h @@ -0,0 +1,249 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * TPM error codes. + * + * Copy-pasted and lightly edited from TCG TPM Main Part 2 TPM Structures + * Version 1.2 Level 2 Revision 103 26 October 2006 Draft. + */ + +#ifndef VBOOT_REFERENCE_TPM_ERROR_MESSAGES_H_ +#define VBOOT_REFERENCE_TPM_ERROR_MESSAGES_H_ + +#define TPM_E_BASE 0x0 +#define TPM_E_NON_FATAL 0x800 + +typedef struct tpm_error_info { + const char* name; + uint32_t code; + const char* description; +} tpm_error_info; + +tpm_error_info tpm_error_table[] = { +{ "TPM_AUTHFAIL", TPM_E_BASE + 1, +"Authentication failed" }, +{ "TPM_BADINDEX", TPM_E_BASE + 2, +"The index to a PCR, DIR or other register is incorrect" }, +{ "TPM_BAD_PARAMETER", TPM_E_BASE + 3, +"One or more parameter is bad" }, +{ "TPM_AUDITFAILURE", TPM_E_BASE + 4, +"An operation completed successfully\n\ +but the auditing of that operation failed" }, +{ "TPM_CLEAR_DISABLED", TPM_E_BASE + 5, +"The clear disable flag is set and all clear operations now require\n\ +physical access" }, +{ "TPM_DEACTIVATED", TPM_E_BASE + 6, +"The TPM is deactivated" }, +{ "TPM_DISABLED", TPM_E_BASE + 7, +"The TPM is disabled" }, +{ "TPM_DISABLED_CMD", TPM_E_BASE + 8, +"The target command has been disabled" }, +{ "TPM_FAIL", TPM_E_BASE + 9, +"The operation failed" }, +{ "TPM_BAD_ORDINAL", TPM_E_BASE + 10, +"The ordinal was unknown or inconsistent" }, +{ "TPM_INSTALL_DISABLED", TPM_E_BASE + 11, +"The ability to install an owner is disabled" }, +{ "TPM_INVALID_KEYHANDLE", TPM_E_BASE + 12, +"The key handle can not be interpreted" }, +{ "TPM_KEYNOTFOUND", TPM_E_BASE + 13, +"The key handle points to an invalid key" }, +{ "TPM_INAPPROPRIATE_ENC", TPM_E_BASE + 14, +"Unacceptable encryption scheme" }, +{ "TPM_MIGRATEFAIL", TPM_E_BASE + 15, +"Migration authorization failed" }, +{ "TPM_INVALID_PCR_INFO", TPM_E_BASE + 16, +"PCR information could not be interpreted" }, +{ "TPM_NOSPACE", TPM_E_BASE + 17, +"No room to load key" }, +{ "TPM_NOSRK", TPM_E_BASE + 18, +"There is no SRK set" }, +{ "TPM_NOTSEALED_BLOB", TPM_E_BASE + 19, +"An encrypted blob is invalid or was not created by this TPM" }, +{ "TPM_OWNER_SET", TPM_E_BASE + 20, +"There is already an Owner" }, +{ "TPM_RESOURCES", TPM_E_BASE + 21, +"The TPM has insufficient internal resources to perform the requested action" }, +{ "TPM_SHORTRANDOM", TPM_E_BASE + 22, +"A random string was too short" }, +{ "TPM_SIZE", TPM_E_BASE + 23, +"The TPM does not have the space to perform the operation" }, +{ "TPM_WRONGPCRVAL", TPM_E_BASE + 24, +"The named PCR value does not match the current PCR value" }, +{ "TPM_BAD_PARAM_SIZE", TPM_E_BASE + 25, +"The paramSize argument to the command has the incorrect value" }, +{ "TPM_SHA_THREAD", TPM_E_BASE + 26, +"There is no existing SHA-1 thread" }, +{ "TPM_SHA_ERROR", TPM_E_BASE + 27, +"The calculation is unable to proceed because the existing SHA-1\n\ +thread has already encountered an error" }, +{ "TPM_FAILEDSELFTEST", TPM_E_BASE + 28, +"Self-test has failed and the TPM has shutdown" }, +{ "TPM_AUTH2FAIL", TPM_E_BASE + 29, +"The authorization for the second key in a 2 key function\n\ +failed authorization" }, +{ "TPM_BADTAG", TPM_E_BASE + 30, +"The tag value sent to for a command is invalid" }, +{ "TPM_IOERROR", TPM_E_BASE + 31, +"An IO error occurred transmitting information to the TPM" }, +{ "TPM_ENCRYPT_ERROR", TPM_E_BASE + 32, +"The encryption process had a problem" }, +{ "TPM_DECRYPT_ERROR", TPM_E_BASE + 33, +"The decryption process did not complete" }, +{ "TPM_INVALID_AUTHHANDLE", TPM_E_BASE + 34, +"An invalid handle was used" }, +{ "TPM_NO_ENDORSEMENT", TPM_E_BASE + 35, +"The TPM does not a EK installed" }, +{ "TPM_INVALID_KEYUSAGE", TPM_E_BASE + 36, +"The usage of a key is not allowed" }, +{ "TPM_WRONG_ENTITYTYPE", TPM_E_BASE + 37, +"The submitted entity type is not allowed" }, +{ "TPM_INVALID_POSTINIT", TPM_E_BASE + 38, +"The command was received in the wrong sequence relative to TPM_Init\n\ +and a subsequent TPM_Startup" }, +{ "TPM_INAPPROPRIATE_SIG", TPM_E_BASE + 39, +"Signed data cannot include additional DER information" }, +{ "TPM_BAD_KEY_PROPERTY", TPM_E_BASE + 40, +"The key properties in TPM_KEY_PARMs are not supported by this TPM" }, +{ "TPM_BAD_MIGRATION", TPM_E_BASE + 41, +"The migration properties of this key are incorrect" }, +{ "TPM_BAD_SCHEME", TPM_E_BASE + 42, +"The signature or encryption scheme for this key is incorrect or not\n\ +permitted in this situation" }, +{ "TPM_BAD_DATASIZE", TPM_E_BASE + 43, +"The size of the data (or blob) parameter is bad or inconsistent\n\ +with the referenced key" }, +{ "TPM_BAD_MODE", TPM_E_BASE + 44, +"A mode parameter is bad, such as capArea or subCapArea for\n\ +TPM_GetCapability, physicalPresence parameter for TPM_PhysicalPresence,\n\ +or migrationType for, TPM_CreateMigrationBlob" }, +{ "TPM_BAD_PRESENCE", TPM_E_BASE + 45, +"Either the physicalPresence or physicalPresenceLock bits\n\ +have the wrong value" }, +{ "TPM_BAD_VERSION", TPM_E_BASE + 46, +"The TPM cannot perform this version of the capability" }, +{ "TPM_NO_WRAP_TRANSPORT", TPM_E_BASE + 47, +"The TPM does not allow for wrapped transport sessions" }, +{ "TPM_AUDITFAIL_UNSUCCESSFUL", TPM_E_BASE + 48, +"TPM audit construction failed and the underlying command\n\ +was returning a failure code also" }, +{ "TPM_AUDITFAIL_SUCCESSFUL", TPM_E_BASE + 49, +"TPM audit construction failed and the underlying command\n\ +was returning success" }, +{ "TPM_NOTRESETABLE", TPM_E_BASE + 50, +"Attempt to reset a PCR register that does not have the resettable attribute" }, +{ "TPM_NOTLOCAL", TPM_E_BASE + 51, +"Attempt to reset a PCR register that requires locality\n\ +and locality modifier not part of command transport" }, +{ "TPM_BAD_TYPE", TPM_E_BASE + 52, +"Make identity blob not properly typed" }, +{ "TPM_INVALID_RESOURCE", TPM_E_BASE + 53, +"When saving context identified resource type does not match actual resource" }, +{ "TPM_NOTFIPS", TPM_E_BASE + 54, +"The TPM is attempting to execute a command only available when in FIPS mode" }, +{ "TPM_INVALID_FAMILY", TPM_E_BASE + 55, +"The command is attempting to use an invalid family ID" }, +{ "TPM_NO_NV_PERMISSION", TPM_E_BASE + 56, +"The permission to manipulate the NV storage is not available" }, +{ "TPM_REQUIRES_SIGN", TPM_E_BASE + 57, +"The operation requires a signed command" }, +{ "TPM_KEY_NOTSUPPORTED", TPM_E_BASE + 58, +"Wrong operation to load an NV key" }, +{ "TPM_AUTH_CONFLICT", TPM_E_BASE + 59, +"NV_LoadKey blob requires both owner and blob authorization" }, +{ "TPM_AREA_LOCKED", TPM_E_BASE + 60, +"The NV area is locked and not writable" }, +{ "TPM_BAD_LOCALITY", TPM_E_BASE + 61, +"The locality is incorrect for the attempted operation" }, +{ "TPM_READ_ONLY", TPM_E_BASE + 62, +"The NV area is read only and canât be written to" }, +{ "TPM_PER_NOWRITE", TPM_E_BASE + 63, +"There is no protection on the write to the NV area" }, +{ "TPM_FAMILYCOUNT", TPM_E_BASE + 64, +"The family count value does not match" }, +{ "TPM_WRITE_LOCKED", TPM_E_BASE + 65, +"The NV area has already been written to" }, +{ "TPM_BAD_ATTRIBUTES", TPM_E_BASE + 66, +"The NV area attributes conflict" }, +{ "TPM_INVALID_STRUCTURE", TPM_E_BASE + 67, +"The structure tag and version are invalid or inconsistent" }, +{ "TPM_KEY_OWNER_CONTROL", TPM_E_BASE + 68, +"The key is under control of the TPM Owner and can only be evicted\n\ +by the TPM Owner" }, +{ "TPM_BAD_COUNTER", TPM_E_BASE + 69, +"The counter handle is incorrect" }, +{ "TPM_NOT_FULLWRITE", TPM_E_BASE + 70, +"The write is not a complete write of the area" }, +{ "TPM_CONTEXT_GAP", TPM_E_BASE + 71, +"The gap between saved context counts is too large" }, +{ "TPM_MAXNVWRITES", TPM_E_BASE + 72, +"The maximum number of NV writes without an owner has been exceeded" }, +{ "TPM_NOOPERATOR", TPM_E_BASE + 73, +"No operator AuthData value is set" }, +{ "TPM_RESOURCEMISSING", TPM_E_BASE + 74, +"The resource pointed to by context is not loaded" }, +{ "TPM_DELEGATE_LOCK", TPM_E_BASE + 75, +"The delegate administration is locked" }, +{ "TPM_DELEGATE_FAMILY", TPM_E_BASE + 76, +"Attempt to manage a family other then the delegated family" }, +{ "TPM_DELEGATE_ADMIN", TPM_E_BASE + 77, +"Delegation table management not enabled" }, +{ "TPM_TRANSPORT_NOTEXCLUSIVE", TPM_E_BASE + 78, +"There was a command executed outside of an exclusive transport session" }, +{ "TPM_OWNER_CONTROL", TPM_E_BASE + 79, +"Attempt to context save a owner evict controlled key" }, +{ "TPM_DAA_RESOURCES", TPM_E_BASE + 80, +"The DAA command has no resources available to execute the command" }, +{ "TPM_DAA_INPUT_DATA0", TPM_E_BASE + 81, +"The consistency check on DAA parameter inputData0 has failed" }, +{ "TPM_DAA_INPUT_DATA1", TPM_E_BASE + 82, +"The consistency check on DAA parameter inputData1 has failed" }, +{ "TPM_DAA_ISSUER_SETTINGS", TPM_E_BASE + 83, +"The consistency check on DAA_issuerSettings has failed" }, +{ "TPM_DAA_TPM_SETTINGS", TPM_E_BASE + 84, +"The consistency check on DAA_tpmSpecific has failed" }, +{ "TPM_DAA_STAGE", TPM_E_BASE + 85, +"The atomic process indicated by the submitted DAA command is not\n\ +the expected process" }, +{ "TPM_DAA_ISSUER_VALIDITY", TPM_E_BASE + 86, +"The issuerâs validity check has detected an inconsistency" }, +{ "TPM_DAA_WRONG_W", TPM_E_BASE + 87, +"The consistency check on w has failed" }, +{ "TPM_BAD_HANDLE", TPM_E_BASE + 88, +"The handle is incorrect" }, +{ "TPM_BAD_DELEGATE", TPM_E_BASE + 89, +"Delegation is not correct" }, +{ "TPM_BADCONTEXT", TPM_E_BASE + 90, +"The context blob is invalid" }, +{ "TPM_TOOMANYCONTEXTS", TPM_E_BASE + 91, +"Too many contexts held by the TPM" }, +{ "TPM_MA_TICKET_SIGNATURE", TPM_E_BASE + 92, +"Migration authority signature validation failure" }, +{ "TPM_MA_DESTINATION", TPM_E_BASE + 93, +"Migration destination not authenticated" }, +{ "TPM_MA_SOURCE", TPM_E_BASE + 94, +"Migration source incorrect" }, +{ "TPM_MA_AUTHORITY", TPM_E_BASE + 95, +"Incorrect migration authority" }, +{ "TPM_PERMANENTEK", TPM_E_BASE + 97, +"Attempt to revoke the EK and the EK is not revocable" }, +{ "TPM_BAD_SIGNATURE", TPM_E_BASE + 98, +"Bad signature of CMK ticket" }, +{ "TPM_NOCONTEXTSPACE", TPM_E_BASE + 99, +"There is no room in the context list for additional contexts" }, +{ "TPM_RETRY", TPM_E_BASE + TPM_E_NON_FATAL, +"The TPM is too busy to respond to the command immediately, but\n\ +the command could be resubmitted at a later time. The TPM MAY\n\ +return TPM_RETRY for any command at any time" }, +{ "TPM_NEEDS_SELFTEST", TPM_E_BASE + TPM_E_NON_FATAL + 1, +"TPM_ContinueSelfTest has not been run" }, +{ "TPM_DOING_SELFTEST", TPM_E_BASE + TPM_E_NON_FATAL + 2, +"The TPM is currently executing the actions of TPM_ContinueSelfTest\n\ +because the ordinal required resources that have not been tested" }, +{ "TPM_DEFEND_LOCK_RUNNING", TPM_E_BASE + TPM_E_NON_FATAL + 3, +"The TPM is defending against dictionary attacks and is in some\n\ +time-out period" }, +}; + +#endif /* VBOOT_REFERENCE_TPM_ERROR_MESSAGES_H_ */ diff --git a/firmware/lib/tpm_lite/mocked_tlcl.c b/firmware/lib/tpm_lite/mocked_tlcl.c new file mode 100644 index 0000000..c29ada7 --- /dev/null +++ b/firmware/lib/tpm_lite/mocked_tlcl.c @@ -0,0 +1,231 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "2sysincludes.h" +#include "tlcl.h" +#include "tlcl_internal.h" + +uint32_t TlclLibInit(void) +{ + return TPM_SUCCESS; +} + +uint32_t TlclLibClose(void) +{ + return TPM_SUCCESS; +} + +uint32_t TlclStartup(void) +{ + return TPM_SUCCESS; +} + +uint32_t TlclSaveState(void) +{ + return TPM_SUCCESS; +} + +uint32_t TlclResume(void) +{ + return TPM_SUCCESS; +} + +uint32_t TlclSelfTestFull(void) +{ + return TPM_SUCCESS; +} + +uint32_t TlclContinueSelfTest(void) +{ + return TPM_SUCCESS; +} + +uint32_t TlclDefineSpace(uint32_t index, uint32_t perm, uint32_t size) +{ + return TPM_SUCCESS; +} + +uint32_t TlclDefineSpaceEx(const uint8_t* owner_auth, uint32_t owner_auth_size, + uint32_t index, uint32_t perm, uint32_t size, + const void* auth_policy, uint32_t auth_policy_size) +{ + return TPM_SUCCESS; +} + +#ifdef CHROMEOS_ENVIRONMENT + +uint32_t TlclUndefineSpace(uint32_t index) +{ + return TPM_SUCCESS; +} + +#endif /* CHROMEOS_ENVIRONMENT */ + +uint32_t TlclWrite(uint32_t index, const void* data, uint32_t length) +{ + return TPM_SUCCESS; +} + +uint32_t TlclRead(uint32_t index, void* data, uint32_t length) +{ + memset(data, '\0', length); + return TPM_SUCCESS; +} + +uint32_t TlclPCRRead(uint32_t index, void* data, uint32_t length) +{ + memset(data, '\0', length); + return TPM_SUCCESS; +} + +uint32_t TlclWriteLock(uint32_t index) +{ + return TPM_SUCCESS; +} + +uint32_t TlclReadLock(uint32_t index) +{ + return TPM_SUCCESS; +} + +uint32_t TlclAssertPhysicalPresence(void) +{ + return TPM_SUCCESS; +} + +uint32_t TlclPhysicalPresenceCMDEnable(void) +{ + return TPM_SUCCESS; +} + +uint32_t TlclFinalizePhysicalPresence(void) +{ + return TPM_SUCCESS; +} + +uint32_t TlclAssertPhysicalPresenceResult(void) +{ + return TPM_SUCCESS; +} + +uint32_t TlclLockPhysicalPresence(void) +{ + return TPM_SUCCESS; +} + +uint32_t TlclSetNvLocked(void) +{ + return TPM_SUCCESS; +} + +int TlclIsOwned(void) +{ + return 0; +} + +uint32_t TlclForceClear(void) +{ + return TPM_SUCCESS; +} + +uint32_t TlclSetEnable(void) +{ + return TPM_SUCCESS; +} + +uint32_t TlclClearEnable(void) +{ + return TPM_SUCCESS; +} + +uint32_t TlclSetDeactivated(uint8_t flag) +{ + return TPM_SUCCESS; +} + +uint32_t TlclGetPermanentFlags(TPM_PERMANENT_FLAGS* pflags) +{ + memset(pflags, '\0', sizeof(*pflags)); + return TPM_SUCCESS; +} + +uint32_t TlclGetSTClearFlags(TPM_STCLEAR_FLAGS* vflags) +{ + memset(vflags, '\0', sizeof(*vflags)); + return TPM_SUCCESS; +} + +uint32_t TlclGetFlags(uint8_t* disable, + uint8_t* deactivated, + uint8_t *nvlocked) +{ + *disable = 0; + *deactivated = 0; + *nvlocked = 0; + return TPM_SUCCESS; +} + +uint32_t TlclSetGlobalLock(void) +{ + return TPM_SUCCESS; +} + +uint32_t TlclExtend(int pcr_num, const uint8_t* in_digest, + uint8_t* out_digest) +{ + memcpy(out_digest, in_digest, kPcrDigestLength); + return TPM_SUCCESS; +} + +uint32_t TlclGetPermissions(uint32_t index, uint32_t* permissions) +{ + *permissions = 0; + return TPM_SUCCESS; +} + +uint32_t TlclGetOwnership(uint8_t* owned) +{ + *owned = 0; + return TPM_SUCCESS; +} + +uint32_t TlclGetRandom(uint8_t* data, uint32_t length, uint32_t *size) +{ + *size = length; + /* http://dilbert.com/strips/comic/2001-10-25/ */ + memset(data, '\x9', *size); + return TPM_SUCCESS; +} + +uint32_t TlclGetVersion(uint32_t* vendor, uint64_t* firmware_version, + uint8_t* vendor_specific_buf, + size_t* vendor_specific_buf_size) +{ + *vendor = 0x4e4f4e45; + *firmware_version = 0x1; + if (vendor_specific_buf_size) { + *vendor_specific_buf_size = 0; + } + return TPM_SUCCESS; +} + +int TlclPacketSize(const uint8_t* packet) +{ + uint32_t size; + FromTpmUint32(packet + sizeof(uint16_t), &size); + return (int) size; +} + +uint32_t TlclSendReceive(const uint8_t* request, uint8_t* response, + int max_length) +{ + return TPM_SUCCESS; +} + +uint32_t TlclIFXFieldUpgradeInfo(TPM_IFX_FIELDUPGRADEINFO* info) +{ + memset(info, 0, sizeof(*info)); + return TPM_SUCCESS; +} diff --git a/firmware/lib/tpm_lite/tlcl.c b/firmware/lib/tpm_lite/tlcl.c new file mode 100644 index 0000000..47f58dc --- /dev/null +++ b/firmware/lib/tpm_lite/tlcl.c @@ -0,0 +1,1376 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* A lightweight TPM command library. + * + * The general idea is that TPM commands are array of bytes whose + * fields are mostly compile-time constant. The goal is to build much + * of the commands at compile time (or build time) and change some of + * the fields at run time as needed. The code in + * utility/tlcl_generator.c builds structures containing the commands, + * as well as the offsets of the fields that need to be set at run + * time. + */ + +#include "2common.h" +#include "2hmac.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "tlcl.h" +#include "tlcl_internal.h" +#include "tlcl_structures.h" + +/* Sets the size field of a TPM command. */ +static inline void SetTpmCommandSize(uint8_t* buffer, uint32_t size) +{ + ToTpmUint32(buffer + sizeof(uint16_t), size); +} + +/* Gets the size field of a TPM command. */ +__attribute__((unused)) +static inline int TpmCommandSize(const uint8_t* buffer) +{ + uint32_t size; + FromTpmUint32(buffer + sizeof(uint16_t), &size); + return (int) size; +} + +/* Gets the size field of a TPM request or response. */ +int TlclPacketSize(const uint8_t* packet) +{ + return TpmCommandSize(packet); +} + +/* Gets the code field of a TPM command. */ +static inline int TpmCommandCode(const uint8_t* buffer) +{ + uint32_t code; + FromTpmUint32(buffer + sizeof(uint16_t) + sizeof(uint32_t), &code); + return code; +} + +/* Gets the return code field of a TPM result. */ +static inline int TpmReturnCode(const uint8_t* buffer) +{ + return TpmCommandCode(buffer); +} + +/* Like TlclSendReceive below, but do not retry if NEEDS_SELFTEST or + * DOING_SELFTEST errors are returned. + */ +static uint32_t TlclSendReceiveNoRetry(const uint8_t* request, + uint8_t* response, int max_length) +{ + + uint32_t response_length = max_length; + uint32_t result; + +#ifdef EXTRA_LOGGING + VB2_DEBUG("TPM: command: %x%x %x%x%x%x %x%x%x%x\n", + request[0], request[1], + request[2], request[3], request[4], request[5], + request[6], request[7], request[8], request[9]); +#endif + + result = vb2ex_tpm_send_recv(request, TpmCommandSize(request), + response, &response_length); + if (TPM_SUCCESS != result) { + /* Communication with TPM failed, so response is garbage */ + VB2_DEBUG("TPM: command %#x send/receive failed: %#x\n", + TpmCommandCode(request), result); + return result; + } + /* Otherwise, use the result code from the response */ + result = TpmReturnCode(response); + + /* TODO: add paranoia about returned response_length vs. max_length + * (and possibly expected length from the response header). See + * crosbug.com/17017 */ + +#ifdef EXTRA_LOGGING + VB2_DEBUG("TPM: response: %x%x %x%x%x%x %x%x%x%x\n", + response[0], response[1], + response[2], response[3], response[4], response[5], + response[6], response[7], response[8], response[9]); +#endif + + VB2_DEBUG("TPM: command %#x returned %#x\n", + TpmCommandCode(request), result); + + return result; +} + +/* Sends a TPM command and gets a response. Returns 0 if success or the TPM + * error code if error. In the firmware, waits for the self test to complete + * if needed. In the host, reports the first error without retries. */ +uint32_t TlclSendReceive(const uint8_t* request, uint8_t* response, + int max_length) +{ + uint32_t result = TlclSendReceiveNoRetry(request, response, max_length); + /* When compiling for the firmware, hide command failures due to the + * self test not having run or completed. */ +#ifndef CHROMEOS_ENVIRONMENT + /* If the command fails because the self test has not completed, try it + * again after attempting to ensure that the self test has completed. */ + if (result == TPM_E_NEEDS_SELFTEST || result == TPM_E_DOING_SELFTEST) { + result = TlclContinueSelfTest(); + if (result != TPM_SUCCESS) { + return result; + } +#if defined(TPM_BLOCKING_CONTINUESELFTEST) || defined(VB_RECOVERY_MODE) + /* Retry only once */ + result = TlclSendReceiveNoRetry(request, response, max_length); +#else + /* This needs serious testing. The TPM specification says: + * "iii. The caller MUST wait for the actions of + * TPM_ContinueSelfTest to complete before reissuing the + * command C1." But, if ContinueSelfTest is non-blocking, how + * do we know that the actions have completed other than trying + * again? */ + do { + result = TlclSendReceiveNoRetry(request, response, + max_length); + } while (result == TPM_E_DOING_SELFTEST); +#endif + } +#endif /* ! defined(CHROMEOS_ENVIRONMENT) */ + return result; +} + +/* Sends a command and returns the error code. */ +static uint32_t Send(const uint8_t* command) +{ + uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE]; + return TlclSendReceive(command, response, sizeof(response)); +} + +#ifdef CHROMEOS_ENVIRONMENT + +struct auth_session +{ + uint32_t handle; + TPM_NONCE nonce_even; + TPM_NONCE nonce_odd; + uint8_t shared_secret[TPM_AUTH_DATA_LEN]; + uint8_t valid; +}; + +static uint32_t StartOIAPSession(struct auth_session* session, + const uint8_t secret[TPM_AUTH_DATA_LEN]) +{ + session->valid = 0; + + uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE]; + uint32_t result = TlclSendReceive(tpm_oiap_cmd.buffer, response, + sizeof(response)); + if (result != TPM_SUCCESS) { + return result; + } + + uint32_t size; + FromTpmUint32(response + sizeof(uint16_t), &size); + if (size < kTpmResponseHeaderLength + sizeof(uint32_t) + + sizeof(TPM_NONCE)) { + return TPM_E_INVALID_RESPONSE; + } + + const uint8_t* cursor = response + kTpmResponseHeaderLength; + session->handle = ReadTpmUint32(&cursor); + memcpy(session->nonce_even.nonce, cursor, sizeof(TPM_NONCE)); + cursor += sizeof(TPM_NONCE); + VB2_ASSERT(cursor - response <= TPM_LARGE_ENOUGH_COMMAND_SIZE); + + memcpy(session->shared_secret, secret, TPM_AUTH_DATA_LEN); + session->valid = 1; + + return result; +} + +static uint32_t StartOSAPSession( + struct auth_session* session, + uint16_t entity_type, + uint32_t entity_value, + const uint8_t entity_usage_auth[TPM_AUTH_DATA_LEN]) +{ + session->valid = 0; + + /* Build OSAP command. */ + struct s_tpm_osap_cmd cmd; + memcpy(&cmd, &tpm_osap_cmd, sizeof(cmd)); + ToTpmUint16(cmd.buffer + cmd.entityType, entity_type); + ToTpmUint32(cmd.buffer + cmd.entityValue, entity_value); + if (vb2ex_tpm_get_random(cmd.buffer + cmd.nonceOddOSAP, + sizeof(TPM_NONCE)) != VB2_SUCCESS) { + return TPM_E_INTERNAL_ERROR; + } + + /* Send OSAP command. */ + uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE]; + uint32_t result = TlclSendReceive(cmd.buffer, response, + sizeof(response)); + if (result != TPM_SUCCESS) { + return result; + } + + /* Parse response. */ + uint32_t size; + FromTpmUint32(response + sizeof(uint16_t), &size); + if (size < kTpmResponseHeaderLength + sizeof(uint32_t) + + 2 * sizeof(TPM_NONCE)) { + return TPM_E_INVALID_RESPONSE; + } + + const uint8_t* cursor = response + kTpmResponseHeaderLength; + session->handle = ReadTpmUint32(&cursor); + memcpy(session->nonce_even.nonce, cursor, sizeof(TPM_NONCE)); + cursor += sizeof(TPM_NONCE); + const uint8_t* nonce_even_osap = cursor; + cursor += sizeof(TPM_NONCE); + VB2_ASSERT(cursor - response <= TPM_LARGE_ENOUGH_COMMAND_SIZE); + + /* Compute shared secret */ + uint8_t hmac_input[2 * sizeof(TPM_NONCE)]; + memcpy(hmac_input, nonce_even_osap, sizeof(TPM_NONCE)); + memcpy(hmac_input + sizeof(TPM_NONCE), cmd.buffer + cmd.nonceOddOSAP, + sizeof(TPM_NONCE)); + if (hmac(VB2_HASH_SHA1, entity_usage_auth, TPM_AUTH_DATA_LEN, + hmac_input, sizeof(hmac_input), session->shared_secret, + sizeof(session->shared_secret))) { + return TPM_E_INTERNAL_ERROR; + } + session->valid = 1; + + return result; +} + +/* Fills in the authentication block at the end of the command. The command body + * should already be initialized in |command_buffer|, and the included command + * size should account for the auth block that gets filled in. */ +static uint32_t AddRequestAuthBlock(struct auth_session* auth_session, + uint8_t* command_buffer, + uint32_t command_buffer_size, + uint8_t continue_auth_session) +{ + if (!auth_session->valid) { + return TPM_E_AUTHFAIL; + } + + /* Validity check to make sure the command buffer has sufficient space + * to add the auth block at the end of the command. */ + if (command_buffer_size < kTpmRequestHeaderLength) { + return TPM_E_BUFFER_SIZE; + } + const uint32_t size = TpmCommandSize(command_buffer); + if (size < kTpmResponseHeaderLength + kTpmRequestAuthBlockLength || + size > command_buffer_size) { + return TPM_E_INTERNAL_ERROR; + } + const uint32_t auth_offset = size - kTpmRequestAuthBlockLength; + + /* + * The digest of the command is computed over the command buffer, but + * excluding the leading tag and paramSize fields. + */ + struct vb2_sha1_context sha1_ctx; + vb2_sha1_init(&sha1_ctx); + vb2_sha1_update(&sha1_ctx, + command_buffer + sizeof(uint16_t) + sizeof(uint32_t), + auth_offset - sizeof(uint16_t) - sizeof(uint32_t)); + uint8_t buf[TPM_SHA1_160_HASH_LEN + 2 * sizeof(TPM_NONCE) + 1]; + vb2_sha1_finalize(&sha1_ctx, buf); + + /* Generate a fresh nonce. */ + if (vb2ex_tpm_get_random(auth_session->nonce_odd.nonce, + sizeof(TPM_NONCE)) != VB2_SUCCESS) { + return TPM_E_INTERNAL_ERROR; + } + + /* Append the authentication block to the command buffer. */ + uint8_t* cursor = command_buffer + auth_offset; + ToTpmUint32(cursor, auth_session->handle); + cursor += sizeof(uint32_t); + memcpy(cursor, auth_session->nonce_odd.nonce, sizeof(TPM_NONCE)); + cursor += sizeof(TPM_NONCE); + *cursor++ = continue_auth_session; + + /* Compute and append the MAC. */ + memcpy(buf + TPM_SHA1_160_HASH_LEN, auth_session->nonce_even.nonce, + sizeof(TPM_NONCE)); + memcpy(buf + TPM_SHA1_160_HASH_LEN + sizeof(TPM_NONCE), + auth_session->nonce_odd.nonce, sizeof(TPM_NONCE)); + buf[TPM_SHA1_160_HASH_LEN + 2 * sizeof(TPM_NONCE)] = + continue_auth_session; + if (hmac(VB2_HASH_SHA1, auth_session->shared_secret, + sizeof(auth_session->shared_secret), buf, sizeof(buf), cursor, + TPM_SHA1_160_HASH_LEN)) { + return TPM_E_AUTHFAIL; + } + cursor += TPM_SHA1_160_HASH_LEN; + + return TPM_SUCCESS; +} + +static uint32_t CheckResponseAuthBlock(struct auth_session* auth_session, + TPM_COMMAND_CODE ordinal, + uint8_t* response_buffer, + uint32_t response_buffer_size) +{ + if (!auth_session->valid) { + return TPM_E_AUTHFAIL; + } + + if (response_buffer_size < kTpmResponseHeaderLength) { + return TPM_E_INVALID_RESPONSE; + } + + /* Parse and validate the actual response size from the response. */ + uint32_t size; + FromTpmUint32(response_buffer + sizeof(uint16_t), &size); + if (size >= response_buffer_size || + size < kTpmResponseHeaderLength + kTpmResponseAuthBlockLength) { + return TPM_E_INVALID_RESPONSE; + } + uint32_t auth_offset = size - kTpmResponseAuthBlockLength; + + /* + * The digest of the response is computed over the return code, ordinal, + * response payload. + */ + struct vb2_sha1_context sha1_ctx; + vb2_sha1_init(&sha1_ctx); + vb2_sha1_update(&sha1_ctx, + response_buffer + sizeof(uint16_t) + sizeof(uint32_t), + sizeof(uint32_t)); + uint8_t ordinal_buf[sizeof(ordinal)]; + ToTpmUint32(ordinal_buf, ordinal); + vb2_sha1_update(&sha1_ctx, ordinal_buf, sizeof(ordinal_buf)); + vb2_sha1_update(&sha1_ctx, + response_buffer + kTpmResponseHeaderLength, + auth_offset - kTpmResponseHeaderLength); + uint8_t hmac_input[TPM_SHA1_160_HASH_LEN + 2 * sizeof(TPM_NONCE) + 1]; + vb2_sha1_finalize(&sha1_ctx, hmac_input); + + /* Compute the MAC. */ + uint8_t* cursor = response_buffer + auth_offset; + memcpy(hmac_input + TPM_SHA1_160_HASH_LEN, cursor, sizeof(TPM_NONCE)); + cursor += sizeof(TPM_NONCE); + memcpy(hmac_input + TPM_SHA1_160_HASH_LEN + sizeof(TPM_NONCE), + auth_session->nonce_odd.nonce, sizeof(TPM_NONCE)); + auth_session->valid = *cursor++; + hmac_input[TPM_SHA1_160_HASH_LEN + 2 * sizeof(TPM_NONCE)] = + auth_session->valid; + uint8_t mac[TPM_SHA1_160_HASH_LEN]; + if (hmac(VB2_HASH_SHA1, auth_session->shared_secret, + sizeof(auth_session->shared_secret), hmac_input, + sizeof(hmac_input), mac, sizeof(mac))) { + auth_session->valid = 0; + return TPM_E_AUTHFAIL; + } + + /* Check the MAC. */ + if (vb2_safe_memcmp(mac, cursor, sizeof(mac))) { + auth_session->valid = 0; + return TPM_E_AUTHFAIL; + } + + /* Success, save the even nonce. */ + memcpy(auth_session->nonce_even.nonce, response_buffer + auth_offset, + sizeof(TPM_NONCE)); + + return TPM_SUCCESS; +} + +#endif /* CHROMEOS_ENVIRONMENT */ + +/* Exported functions. */ + +uint32_t TlclLibInit(void) +{ + return vb2ex_tpm_init(); +} + +uint32_t TlclLibClose(void) +{ + return vb2ex_tpm_close(); +} + +uint32_t TlclStartup(void) +{ + VB2_DEBUG("TPM: Startup\n"); + return Send(tpm_startup_cmd.buffer); +} + +uint32_t TlclSaveState(void) +{ + VB2_DEBUG("TPM: SaveState\n"); + return Send(tpm_savestate_cmd.buffer); +} + +uint32_t TlclResume(void) +{ + VB2_DEBUG("TPM: Resume\n"); + return Send(tpm_resume_cmd.buffer); +} + +uint32_t TlclSelfTestFull(void) +{ + VB2_DEBUG("TPM: Self test full\n"); + return Send(tpm_selftestfull_cmd.buffer); +} + +uint32_t TlclContinueSelfTest(void) +{ + uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE]; + VB2_DEBUG("TPM: Continue self test\n"); + /* Call the No Retry version of SendReceive to avoid recursion. */ + return TlclSendReceiveNoRetry(tpm_continueselftest_cmd.buffer, + response, sizeof(response)); +} + +uint32_t TlclDefineSpace(uint32_t index, uint32_t perm, uint32_t size) +{ + VB2_DEBUG("TPM: TlclDefineSpace(%#x, %#x, %d)\n", index, perm, size); + return TlclDefineSpaceEx(NULL, 0, index, perm, size, NULL, 0); +} + +#ifdef CHROMEOS_ENVIRONMENT + +uint32_t TlclUndefineSpace(uint32_t index) +{ + VB2_DEBUG("TPM: TlclUndefineSpace(%#x)\n", index); + return TlclUndefineSpaceEx(NULL, 0, index); +} + +uint32_t TlclUndefineSpaceEx(const uint8_t* owner_auth, + uint32_t owner_auth_size, + uint32_t index) +{ + return TlclDefineSpaceEx(owner_auth, owner_auth_size, + index, 0, 0, + NULL, 0); +} + +#endif /* CHROMEOS_ENVIRONMENT */ + +uint32_t TlclDefineSpaceEx(const uint8_t* owner_auth, uint32_t owner_auth_size, + uint32_t index, uint32_t perm, uint32_t size, + const void* auth_policy, uint32_t auth_policy_size) +{ + uint32_t result; + + /* Build the request data. */ + uint8_t cmd[sizeof(tpm_nv_definespace_cmd.buffer) + + kTpmRequestAuthBlockLength]; + memcpy(cmd, &tpm_nv_definespace_cmd, sizeof(tpm_nv_definespace_cmd)); + ToTpmUint32(cmd + tpm_nv_definespace_cmd.index, index); + ToTpmUint32(cmd + tpm_nv_definespace_cmd.perm, perm); + ToTpmUint32(cmd + tpm_nv_definespace_cmd.size, size); + if (auth_policy != NULL) { + if (auth_policy_size != sizeof(TPM_NV_AUTH_POLICY)) { + return TPM_E_BUFFER_SIZE; + } + + const TPM_NV_AUTH_POLICY* policy = auth_policy; + memcpy(cmd + tpm_nv_definespace_cmd.pcr_info_read, + &policy->pcr_info_read, sizeof(policy->pcr_info_read)); + memcpy(cmd + tpm_nv_definespace_cmd.pcr_info_write, + &policy->pcr_info_write, sizeof(policy->pcr_info_write)); + } + +#ifdef CHROMEOS_ENVIRONMENT + struct auth_session auth_session; + if (owner_auth) { + if (owner_auth_size != TPM_AUTH_DATA_LEN) { + return TPM_E_AUTHFAIL; + } + + result = StartOSAPSession(&auth_session, TPM_ET_OWNER, 0, + owner_auth); + if (result != TPM_SUCCESS) { + return result; + } + + ToTpmUint32(cmd + sizeof(uint16_t), sizeof(cmd)); + ToTpmUint16(cmd, TPM_TAG_RQU_AUTH1_COMMAND); + result = AddRequestAuthBlock(&auth_session, cmd, sizeof(cmd), + 0); + if (result != TPM_SUCCESS) { + return result; + } + } +#endif + + /* Send the command. */ + uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE]; + result = TlclSendReceive(cmd, response, sizeof(response)); + if (result != TPM_SUCCESS) { + return result; + } + +#ifdef CHROMEOS_ENVIRONMENT + if (owner_auth) { + result = CheckResponseAuthBlock(&auth_session, + TPM_ORD_NV_DefineSpace, + response, sizeof(response)); + } +#endif + + return result; +} + +uint32_t TlclInitNvAuthPolicy(uint32_t pcr_selection_bitmap, + const uint8_t pcr_values[][TPM_PCR_DIGEST], + void* auth_policy, uint32_t* auth_policy_size) +{ + uint32_t buffer_size = *auth_policy_size; + *auth_policy_size = sizeof(TPM_NV_AUTH_POLICY); + if (!auth_policy || buffer_size < sizeof(TPM_NV_AUTH_POLICY)) { + return TPM_E_BUFFER_SIZE; + } + TPM_NV_AUTH_POLICY* policy = auth_policy; + + /* Note that although the struct definition allocates space for 3 bytes + * worth of PCR selection, it is technically a variably-sized field in + * the TPM structure definition. Since this is part of the policy + * digest, we need to carefully match our selection sizes. For now, we + * use 3 bytes, which aligns with TrouSerS behavior. */ + TPM_PCR_SELECTION* select = &policy->pcr_info_read.pcrSelection; + ToTpmUint16((uint8_t*)&select->sizeOfSelect, sizeof(select->pcrSelect)); + select->pcrSelect[0] = (pcr_selection_bitmap >> 0) & 0xff; + select->pcrSelect[1] = (pcr_selection_bitmap >> 8) & 0xff; + select->pcrSelect[2] = (pcr_selection_bitmap >> 16) & 0xff; + VB2_ASSERT((pcr_selection_bitmap & 0xff000000) == 0); + + /* Allow all localities except locality 3. Rationale: + * + * We don't actually care about restricting NVRAM access to specific + * localities. In fact localities aren't used in Chrome OS and locality + * 0 is used for everything. + * + * However, the TPM specification makes an effort to not allow NVRAM + * spaces that do not have some write access control configured: When + * defining a space, either at least one of OWNERWRITE, AUTHWRITE, + * WRITEDEFINE, PPWRITE or a locality restriction must be specified (See + * TPM_NV_DefineSpace command description in the spec). + * + * This complicates matters when defining an NVRAM space that should be + * writable and lockable (for the remainder of the boot cycle) by the OS + * even when the TPM is not owned: + * * OWNERWRITE doesn't work because there might be no owner. + * * PPWRITE restricts writing to firmware only. + * * Use of WRITEDEFINE prevents use of WRITE_STCLEAR (i.e. the space + * can either not be locked, or it would remain locked until next TPM + * clear). + * * AUTHWRITE looks workable at first sight (by setting a well-known + * auth secret). However writes must use TPM_NV_WriteValueAuth, which + * only works when the TPM is owned. Interestingly, the spec admits + * to that being a mistake in the TPM_NV_WriteValueAuth comment but + * asserts that the behavior is normative. + * + * Having ruled out all attributes, we're left with locality restriction + * as the only option to pass the access control requirement check in + * TPM_NV_DefineSpace. We choose to disallow locality 3, since that is + * the most unlikely one to be used in practice, i.e. the spec says + * locality 3 is for "Auxiliary components. Use of this is optional and, + * if used, it is implementation dependent." + */ + policy->pcr_info_read.localityAtRelease = + TPM_ALL_LOCALITIES & ~TPM_LOC_THREE; + + struct vb2_sha1_context sha1_ctx; + vb2_sha1_init(&sha1_ctx); + + vb2_sha1_update(&sha1_ctx, + (const uint8_t*)&policy->pcr_info_read.pcrSelection, + sizeof(policy->pcr_info_read.pcrSelection)); + + uint32_t num_pcrs = 0; + int i; + for (i = 0; i < sizeof(pcr_selection_bitmap) * 8; ++i) { + if ((1U << i) & pcr_selection_bitmap) { + num_pcrs++; + } + } + + uint8_t pcrs_size[sizeof(uint32_t)]; + ToTpmUint32(pcrs_size, num_pcrs * TPM_PCR_DIGEST); + vb2_sha1_update(&sha1_ctx, pcrs_size, sizeof(pcrs_size)); + + for (i = 0; i < num_pcrs; ++i) { + vb2_sha1_update(&sha1_ctx, pcr_values[i], TPM_PCR_DIGEST); + } + + vb2_sha1_finalize(&sha1_ctx, + policy->pcr_info_read.digestAtRelease.digest); + + /* Make the write policy an identical copy of the read auth policy. */ + memcpy(&policy->pcr_info_write, &policy->pcr_info_read, + sizeof(policy->pcr_info_read)); + + return TPM_SUCCESS; +} + +uint32_t TlclWrite(uint32_t index, const void* data, uint32_t length) +{ + struct s_tpm_nv_write_cmd cmd; + uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE]; + const int total_length = + kTpmRequestHeaderLength + kWriteInfoLength + length; + + VB2_DEBUG("TPM: TlclWrite(%#x, %d)\n", index, length); + memcpy(&cmd, &tpm_nv_write_cmd, sizeof(cmd)); + VB2_ASSERT(total_length <= TPM_LARGE_ENOUGH_COMMAND_SIZE); + SetTpmCommandSize(cmd.buffer, total_length); + + ToTpmUint32(cmd.buffer + tpm_nv_write_cmd.index, index); + ToTpmUint32(cmd.buffer + tpm_nv_write_cmd.length, length); + memcpy(cmd.buffer + tpm_nv_write_cmd.data, data, length); + + return TlclSendReceive(cmd.buffer, response, sizeof(response)); +} + +uint32_t TlclRead(uint32_t index, void* data, uint32_t length) +{ + struct s_tpm_nv_read_cmd cmd; + uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE]; + uint32_t result; + + VB2_DEBUG("TPM: TlclRead(%#x, %d)\n", index, length); + memcpy(&cmd, &tpm_nv_read_cmd, sizeof(cmd)); + ToTpmUint32(cmd.buffer + tpm_nv_read_cmd.index, index); + ToTpmUint32(cmd.buffer + tpm_nv_read_cmd.length, length); + + result = TlclSendReceive(cmd.buffer, response, sizeof(response)); + if (result == TPM_SUCCESS && length > 0) { + const uint8_t* nv_read_cursor = + response + kTpmResponseHeaderLength; + uint32_t result_length = ReadTpmUint32(&nv_read_cursor); + if (result_length > length) + result_length = length; /* Truncate to fit buffer */ + memcpy(data, nv_read_cursor, result_length); + } + + return result; +} + +uint32_t TlclPCRRead(uint32_t index, void* data, uint32_t length) +{ + struct s_tpm_pcr_read_cmd cmd; + uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE]; + uint32_t result; + + VB2_DEBUG("TPM: TlclPCRRead(%#x, %d)\n", index, length); + if (length < kPcrDigestLength) { + return TPM_E_IOERROR; + } + memcpy(&cmd, &tpm_pcr_read_cmd, sizeof(cmd)); + ToTpmUint32(cmd.buffer + tpm_pcr_read_cmd.pcrNum, index); + + result = TlclSendReceive(cmd.buffer, response, sizeof(response)); + if (result == TPM_SUCCESS) { + const uint8_t* pcr_read_cursor = + response + kTpmResponseHeaderLength; + memcpy(data, pcr_read_cursor, kPcrDigestLength); + } + + return result; +} + +uint32_t TlclWriteLock(uint32_t index) +{ + VB2_DEBUG("TPM: Write lock %#x\n", index); + return TlclWrite(index, NULL, 0); +} + +uint32_t TlclReadLock(uint32_t index) +{ + VB2_DEBUG("TPM: Read lock %#x\n", index); + return TlclRead(index, NULL, 0); +} + +uint32_t TlclAssertPhysicalPresence(void) +{ + VB2_DEBUG("TPM: Asserting physical presence\n"); + return Send(tpm_ppassert_cmd.buffer); +} + +uint32_t TlclPhysicalPresenceCMDEnable(void) +{ + VB2_DEBUG("TPM: Enable the physical presence command\n"); + return Send(tpm_ppenable_cmd.buffer); +} + +uint32_t TlclFinalizePhysicalPresence(void) +{ + VB2_DEBUG("TPM: Enable PP cmd, disable HW pp, and set lifetime lock\n"); + return Send(tpm_finalizepp_cmd.buffer); +} + +uint32_t TlclAssertPhysicalPresenceResult(void) +{ + uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE]; + return TlclSendReceive(tpm_ppassert_cmd.buffer, response, + sizeof(response)); +} + +uint32_t TlclLockPhysicalPresence(void) +{ + VB2_DEBUG("TPM: Lock physical presence\n"); + return Send(tpm_pplock_cmd.buffer); +} + +uint32_t TlclSetNvLocked(void) +{ + VB2_DEBUG("TPM: Set NV locked\n"); + return TlclDefineSpace(TPM_NV_INDEX_LOCK, 0, 0); +} + +int TlclIsOwned(void) +{ + uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE + TPM_PUBEK_SIZE]; + uint32_t result; + result = TlclSendReceive(tpm_readpubek_cmd.buffer, + response, sizeof(response)); + return (result != TPM_SUCCESS); +} + +uint32_t TlclForceClear(void) +{ + VB2_DEBUG("TPM: Force clear\n"); + return Send(tpm_forceclear_cmd.buffer); +} + +uint32_t TlclSetEnable(void) +{ + VB2_DEBUG("TPM: Enabling TPM\n"); + return Send(tpm_physicalenable_cmd.buffer); +} + +uint32_t TlclClearEnable(void) +{ + VB2_DEBUG("TPM: Disabling TPM\n"); + return Send(tpm_physicaldisable_cmd.buffer); +} + +uint32_t TlclSetDeactivated(uint8_t flag) +{ + struct s_tpm_physicalsetdeactivated_cmd cmd; + VB2_DEBUG("TPM: SetDeactivated(%d)\n", flag); + memcpy(&cmd, &tpm_physicalsetdeactivated_cmd, sizeof(cmd)); + *(cmd.buffer + cmd.deactivated) = flag; + return Send(cmd.buffer); +} + +uint32_t TlclGetPermanentFlags(TPM_PERMANENT_FLAGS* pflags) +{ + uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE]; + uint32_t size; + uint32_t result = TlclSendReceive(tpm_getflags_cmd.buffer, response, + sizeof(response)); + if (result != TPM_SUCCESS) + return result; + FromTpmUint32(response + kTpmResponseHeaderLength, &size); + /* TODO(crbug.com/379255): This fails. Find out why. + * VB2_ASSERT(size == sizeof(TPM_PERMANENT_FLAGS)); + */ + memcpy(pflags, + response + kTpmResponseHeaderLength + sizeof(size), + sizeof(TPM_PERMANENT_FLAGS)); + return result; +} + +uint32_t TlclGetSTClearFlags(TPM_STCLEAR_FLAGS* vflags) +{ + uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE]; + uint32_t size; + uint32_t result = TlclSendReceive(tpm_getstclearflags_cmd.buffer, + response, sizeof(response)); + if (result != TPM_SUCCESS) + return result; + FromTpmUint32(response + kTpmResponseHeaderLength, &size); + /* Ugly assertion, but the struct is padded up by one byte. */ + /* TODO(crbug.com/379255): This fails. Find out why. + * VB2_ASSERT(size == 7 && sizeof(TPM_STCLEAR_FLAGS) - 1 == 7); + */ + memcpy(vflags, + response + kTpmResponseHeaderLength + sizeof(size), + sizeof(TPM_STCLEAR_FLAGS)); + return result; +} + +uint32_t TlclGetFlags(uint8_t* disable, + uint8_t* deactivated, + uint8_t *nvlocked) +{ + TPM_PERMANENT_FLAGS pflags; + uint32_t result = TlclGetPermanentFlags(&pflags); + if (result == TPM_SUCCESS) { + if (disable) + *disable = pflags.disable; + if (deactivated) + *deactivated = pflags.deactivated; + if (nvlocked) + *nvlocked = pflags.nvLocked; + VB2_DEBUG("TPM: Got flags disable=%d, deactivated=%d, " + "nvlocked=%d\n", + pflags.disable, pflags.deactivated, pflags.nvLocked); + } + return result; +} + +uint32_t TlclSetGlobalLock(void) +{ + uint32_t x; + VB2_DEBUG("TPM: Set global lock\n"); + return TlclWrite(TPM_NV_INDEX0, (uint8_t*) &x, 0); +} + +uint32_t TlclExtend(int pcr_num, const uint8_t* in_digest, + uint8_t* out_digest) +{ + struct s_tpm_extend_cmd cmd; + uint8_t response[kTpmResponseHeaderLength + kPcrDigestLength]; + uint32_t result; + + memcpy(&cmd, &tpm_extend_cmd, sizeof(cmd)); + ToTpmUint32(cmd.buffer + tpm_extend_cmd.pcrNum, pcr_num); + memcpy(cmd.buffer + cmd.inDigest, in_digest, kPcrDigestLength); + + result = TlclSendReceive(cmd.buffer, response, sizeof(response)); + if (result != TPM_SUCCESS) + return result; + + memcpy(out_digest, response + kTpmResponseHeaderLength, + kPcrDigestLength); + return result; +} + +uint32_t TlclGetPermissions(uint32_t index, uint32_t* permissions) +{ + uint32_t dummy_attributes; + TPM_NV_AUTH_POLICY dummy_policy; + uint32_t dummy_policy_size = sizeof(dummy_policy); + + return TlclGetSpaceInfo(index, permissions, &dummy_attributes, + &dummy_policy, &dummy_policy_size); +} + +static int DecodePCRInfo(const uint8_t** cursor, + const uint8_t* end, + TPM_PCR_INFO_SHORT* pcr_info) +{ + const size_t available_size = end - *cursor; + if (available_size < sizeof(uint16_t)) { + return 0; + } + + uint16_t size_of_select = 0; + FromTpmUint16(*cursor, &size_of_select); + + /* Compute the actual size of the encoded PCR selection (which is a + * variable-length field). */ + const size_t encoded_pcr_info_size = sizeof(TPM_PCR_INFO_SHORT) - + sizeof(pcr_info->pcrSelection.pcrSelect) + size_of_select; + if (available_size < encoded_pcr_info_size || + size_of_select > sizeof(pcr_info->pcrSelection.pcrSelect)) { + return 0; + } + + memset(&pcr_info->pcrSelection, 0, sizeof(pcr_info->pcrSelection)); + const size_t pcr_selection_size = + sizeof(size_of_select) + size_of_select; + memcpy(&pcr_info->pcrSelection, *cursor, pcr_selection_size); + *cursor += pcr_selection_size; + + pcr_info->localityAtRelease = **cursor; + (*cursor)++; + + memcpy(&pcr_info->digestAtRelease, *cursor, sizeof(TPM_COMPOSITE_HASH)); + *cursor += sizeof(TPM_COMPOSITE_HASH); + + return 1; +} + +uint32_t TlclGetSpaceInfo(uint32_t index, uint32_t *attributes, uint32_t *size, + void* auth_policy, uint32_t* auth_policy_size) +{ + TPM_NV_AUTH_POLICY* policy; + uint32_t buffer_size = *auth_policy_size; + *auth_policy_size = sizeof(TPM_NV_AUTH_POLICY); + if (buffer_size < sizeof(TPM_NV_AUTH_POLICY)) { + return TPM_E_BUFFER_SIZE; + } + policy = auth_policy; + + struct s_tpm_getspaceinfo_cmd cmd; + memcpy(&cmd, &tpm_getspaceinfo_cmd, sizeof(cmd)); + ToTpmUint32(cmd.buffer + tpm_getspaceinfo_cmd.index, index); + uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE]; + uint32_t result = TlclSendReceive(cmd.buffer, response, + sizeof(response)); + if (result != TPM_SUCCESS) { + return result; + } + + uint32_t response_size = TpmCommandSize(response); + if (response_size > sizeof(response)) { + return TPM_E_RESPONSE_TOO_LARGE; + } + + const uint8_t* cursor = response + kTpmResponseHeaderLength; + uint32_t cap_size = ReadTpmUint32(&cursor); + if (cap_size > + response_size - sizeof(cap_size) - kTpmResponseHeaderLength) { + return TPM_E_INVALID_RESPONSE; + } + const uint8_t* end = cursor + cap_size; + + cursor += sizeof(uint16_t); /* skip tag */ + uint32_t response_index = ReadTpmUint32(&cursor); + if (index != response_index) { + return TPM_E_INVALID_RESPONSE; + } + + if (!DecodePCRInfo(&cursor, end, &policy->pcr_info_read) || + !DecodePCRInfo(&cursor, end, &policy->pcr_info_write)) { + return TPM_E_INVALID_RESPONSE; + } + + /* Make sure that the remaining data in the buffer matches the size of + * the remaining fields to decode. */ + if (end - cursor != + 2 * sizeof(uint32_t) + 3 * sizeof(uint8_t) + sizeof(uint16_t)) { + return TPM_E_INVALID_RESPONSE; + } + + cursor += sizeof(uint16_t); /* skip TPM_NV_ATTRIBUTES tag */ + *attributes = ReadTpmUint32(&cursor); + cursor += sizeof(uint8_t); /* skip bReadSTClear */ + cursor += sizeof(uint8_t); /* skip bWriteSTClear */ + cursor += sizeof(uint8_t); /* skip bWriteDefine */ + *size = ReadTpmUint32(&cursor); + + return TPM_SUCCESS; +} + +uint32_t TlclGetOwnership(uint8_t* owned) +{ + uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE]; + uint32_t size; + uint32_t result = TlclSendReceive(tpm_getownership_cmd.buffer, + response, sizeof(response)); + if (result != TPM_SUCCESS) + return result; + FromTpmUint32(response + kTpmResponseHeaderLength, &size); + /* TODO(crbug.com/379255): This fails. Find out why. + * VB2_ASSERT(size == sizeof(*owned)); + */ + memcpy(owned, + response + kTpmResponseHeaderLength + sizeof(size), + sizeof(*owned)); + return result; +} + +uint32_t TlclGetRandom(uint8_t* data, uint32_t length, uint32_t *size) +{ + struct s_tpm_get_random_cmd cmd; + uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE]; + uint32_t result; + + VB2_DEBUG("TPM: TlclGetRandom(%d)\n", length); + memcpy(&cmd, &tpm_get_random_cmd, sizeof(cmd)); + ToTpmUint32(cmd.buffer + tpm_get_random_cmd.bytesRequested, length); + /* There must be room in the response buffer for the bytes. */ + if (length > TPM_LARGE_ENOUGH_COMMAND_SIZE - kTpmResponseHeaderLength + - sizeof(uint32_t)) { + return TPM_E_IOERROR; + } + + result = TlclSendReceive(cmd.buffer, response, sizeof(response)); + if (result == TPM_SUCCESS) { + const uint8_t* get_random_cursor = + response + kTpmResponseHeaderLength; + *size = ReadTpmUint32(&get_random_cursor); + + /* There must be room in the target buffer for the bytes. */ + if (*size > length) { + return TPM_E_RESPONSE_TOO_LARGE; + } + memcpy(data, get_random_cursor, *size); + } + + return result; +} + +uint32_t TlclGetVersion(uint32_t* vendor, uint64_t* firmware_version, + uint8_t* vendor_specific_buf, + size_t* vendor_specific_buf_size) +{ + uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE]; + uint32_t result = TlclSendReceive(tpm_getversionval_cmd.buffer, + response, sizeof(response)); + if (result != TPM_SUCCESS) + return result; + + const uint8_t* cursor = response + kTpmResponseHeaderLength; + uint32_t size = ReadTpmUint32(&cursor); + + /* Verify size >= sizeof(TPM_CAP_VERSION_INFO). */ + const uint32_t kSizeofCapVersionInfo = 15; + if (size < kSizeofCapVersionInfo || + kTpmResponseHeaderLength + sizeof(size) + size > + TPM_LARGE_ENOUGH_COMMAND_SIZE) { + return TPM_E_IOERROR; + } + + cursor += sizeof(uint16_t); /* tag */ + cursor += sizeof(uint16_t); /* spec version */ + + *firmware_version = ReadTpmUint16(&cursor); + + cursor += sizeof(uint16_t); /* specLevel */ + cursor += sizeof(uint8_t); /* errataRev */ + + *vendor = ReadTpmUint32(&cursor); + + if (vendor_specific_buf_size) { + uint16_t vendor_specific_size = ReadTpmUint16(&cursor); + + if (size < kSizeofCapVersionInfo + vendor_specific_size) { + return TPM_E_IOERROR; + } + if (vendor_specific_buf) { + if (vendor_specific_size > *vendor_specific_buf_size) { + vendor_specific_size = + *vendor_specific_buf_size; + } + memcpy(vendor_specific_buf, cursor, + vendor_specific_size); + cursor += vendor_specific_size; + } + *vendor_specific_buf_size = vendor_specific_size; + } + + return TPM_SUCCESS; +} + +static void ParseIFXFirmwarePackage(const uint8_t** cursor, + TPM_IFX_FIRMWAREPACKAGE* firmware_package) +{ + firmware_package->FwPackageIdentifier = ReadTpmUint32(cursor); + firmware_package->Version = ReadTpmUint32(cursor); + firmware_package->StaleVersion = ReadTpmUint32(cursor); +} + +uint32_t TlclIFXFieldUpgradeInfo(TPM_IFX_FIELDUPGRADEINFO* info) +{ + uint32_t vendor; + uint64_t firmware_version; + uint32_t result = + TlclGetVersion(&vendor, &firmware_version, NULL, NULL); + if (result != TPM_SUCCESS) { + return result; + } + if (vendor != 0x49465800) { + return TPM_E_BAD_ORDINAL; + } + + uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE]; + result = TlclSendReceive(tpm_ifx_fieldupgradeinforequest2_cmd.buffer, + response, sizeof(response)); + if (result != TPM_SUCCESS) { + return result; + } + + const uint8_t* cursor = response + kTpmResponseHeaderLength; + uint16_t size = ReadTpmUint16(&cursor); + + /* Comments below indicate skipped fields of unknown purpose that are + * marked "internal" in the firmware updater source. */ + cursor += sizeof(uint16_t); /* internal1 */ + info->wMaxDataSize = ReadTpmUint16(&cursor); + cursor += sizeof(uint16_t); /* sSecurityModuleLogic.internal1 */ + cursor += sizeof(uint32_t); /* sSecurityModuleLogic.internal2 */ + cursor += sizeof(uint8_t[34]); /* sSecurityModuleLogic.internal3 */ + ParseIFXFirmwarePackage(&cursor, &info->sBootloaderFirmwarePackage); + uint16_t fw_entry_count = ReadTpmUint16(&cursor); + if (fw_entry_count > ARRAY_SIZE(info->sFirmwarePackages)) { + return TPM_E_INVALID_RESPONSE; + } + uint16_t i; + for (i = 0; i < fw_entry_count; ++i) { + ParseIFXFirmwarePackage(&cursor, &info->sFirmwarePackages[i]); + } + info->wSecurityModuleStatus = ReadTpmUint16(&cursor); + ParseIFXFirmwarePackage(&cursor, &info->sProcessFirmwarePackage); + cursor += sizeof(uint16_t); /* internal6 */ + cursor += sizeof(uint8_t[6]); /* internal7 */ + info->wFieldUpgradeCounter = ReadTpmUint16(&cursor); + + uint32_t parsed_bytes = cursor - response; + VB2_ASSERT(parsed_bytes <= TPM_LARGE_ENOUGH_COMMAND_SIZE); + if (parsed_bytes > kTpmResponseHeaderLength + sizeof(size) + size) { + return TPM_E_INVALID_RESPONSE; + } + + return result; +} + +#ifdef CHROMEOS_ENVIRONMENT + +static uint32_t ParseRsaKeyParms(const uint8_t* buffer, + const uint8_t* end, + uint32_t* key_len, + uint32_t* num_primes, + uint32_t* exponent) +{ + if (end - buffer < 3 * sizeof(uint32_t)) { + return TPM_E_INVALID_RESPONSE; + } + *key_len = ReadTpmUint32(&buffer); + *num_primes = ReadTpmUint32(&buffer); + uint32_t exponent_size = ReadTpmUint32(&buffer); + if (end - buffer < exponent_size) { + return TPM_E_INVALID_RESPONSE; + } + + if (exponent_size == 0) { + *exponent = 0x10001; + } else if (exponent_size <= sizeof(*exponent)) { + *exponent = 0; + int i; + for (i = 0; i < exponent_size; ++i) { + *exponent |= (*buffer++) << (8 * i); + } + } else { + return TPM_E_INTERNAL_ERROR; + } + + return TPM_SUCCESS; +} + +static uint32_t ParseTpmPubKey(const uint8_t** buffer, + const uint8_t* end, + uint32_t* algorithm, + uint16_t* enc_scheme, + uint16_t* sig_scheme, + uint32_t* key_len, + uint32_t* num_primes, + uint32_t* exponent, + uint8_t* modulus, + uint32_t* modulus_size) +{ + uint32_t result = TPM_SUCCESS; + + if (end - *buffer < 2 * sizeof(uint32_t) + 2 * sizeof(uint16_t)) { + return TPM_E_INVALID_RESPONSE; + } + + *algorithm = ReadTpmUint32(buffer); + *enc_scheme = ReadTpmUint16(buffer); + *sig_scheme = ReadTpmUint16(buffer); + + uint32_t parm_size = ReadTpmUint32(buffer); + if (end - *buffer < parm_size) { + return TPM_E_INVALID_RESPONSE; + } + + if (*algorithm == TPM_ALG_RSA) { + result = ParseRsaKeyParms(*buffer, *buffer + parm_size, + key_len, num_primes, exponent); + if (result != TPM_SUCCESS) { + return result; + } + } else { + return TPM_E_INTERNAL_ERROR; + } + + *buffer += parm_size; + + if (end - *buffer < sizeof(uint32_t)) { + return TPM_E_INVALID_RESPONSE; + } + + uint32_t actual_modulus_size = ReadTpmUint32(buffer); + if (end - *buffer < actual_modulus_size) { + return TPM_E_INVALID_RESPONSE; + } + + if (modulus && *modulus_size >= actual_modulus_size) { + memcpy(modulus, *buffer, actual_modulus_size); + } else { + result = TPM_E_BUFFER_SIZE; + } + *modulus_size = actual_modulus_size; + *buffer += actual_modulus_size; + + return result; +} + +uint32_t TlclReadPubek(uint32_t* public_exponent, + uint8_t* modulus, + uint32_t* modulus_size) +{ + struct s_tpm_readpubek_cmd cmd; + memcpy(&cmd, &tpm_readpubek_cmd, sizeof(cmd)); + if (vb2ex_tpm_get_random(cmd.buffer + tpm_readpubek_cmd.antiReplay, + sizeof(TPM_NONCE)) != VB2_SUCCESS) { + return TPM_E_INTERNAL_ERROR; + } + + /* The response contains the public endorsement key, so use a large + * response buffer. */ + uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE + TPM_RSA_2048_LEN]; + uint32_t result = TlclSendReceive(cmd.buffer, response, + sizeof(response)); + if (result != TPM_SUCCESS) { + return result; + } + + const uint8_t* cursor = response + kTpmResponseHeaderLength; + const uint8_t* end = response + sizeof(response); + + /* Parse the key */ + uint32_t algorithm; + uint16_t enc_scheme; + uint16_t sig_scheme; + uint32_t key_len; + uint32_t num_primes; + result = ParseTpmPubKey(&cursor, end, &algorithm, &enc_scheme, + &sig_scheme, &key_len, &num_primes, + public_exponent, modulus, modulus_size); + if (result != TPM_SUCCESS) { + return result; + } + + /* Parse the checksum */ + if (end - cursor < TPM_SHA1_160_HASH_LEN) { + return TPM_E_INVALID_RESPONSE; + } + const uint8_t* checksum = cursor; + cursor += TPM_SHA1_160_HASH_LEN; + + /* Check the digest */ + struct vb2_sha1_context sha1_ctx; + vb2_sha1_init(&sha1_ctx); + vb2_sha1_update(&sha1_ctx, response + kTpmResponseHeaderLength, + checksum - (response + kTpmResponseHeaderLength)); + vb2_sha1_update(&sha1_ctx, cmd.buffer + tpm_readpubek_cmd.antiReplay, + sizeof(TPM_NONCE)); + uint8_t digest[TPM_SHA1_160_HASH_LEN]; + vb2_sha1_finalize(&sha1_ctx, digest); + if (vb2_safe_memcmp(digest, checksum, sizeof(digest))) { + return TPM_E_AUTHFAIL; + } + + /* Validate expectations for the EK. */ + if (algorithm != TPM_ALG_RSA || + enc_scheme != TPM_ES_RSAESOAEP_SHA1_MGF1 || + sig_scheme != TPM_SS_NONE || + key_len != 2048 || + num_primes != 2) { + return TPM_E_INVALID_RESPONSE; + } + + return result; +} + +uint32_t TlclTakeOwnership(uint8_t enc_owner_auth[TPM_RSA_2048_LEN], + uint8_t enc_srk_auth[TPM_RSA_2048_LEN], + uint8_t owner_auth[TPM_AUTH_DATA_LEN]) +{ + /* Start an OAIP session. */ + struct auth_session auth_session; + uint32_t result = StartOIAPSession(&auth_session, owner_auth); + if (result != TPM_SUCCESS) { + return result; + } + + /* Build the TakeOwnership command. */ + struct s_tpm_takeownership_cmd cmd; + memcpy(&cmd, &tpm_takeownership_cmd, sizeof(cmd)); + memcpy(cmd.buffer + tpm_takeownership_cmd.encOwnerAuth, enc_owner_auth, + TPM_RSA_2048_LEN); + memcpy(cmd.buffer + tpm_takeownership_cmd.encSrkAuth, enc_srk_auth, + TPM_RSA_2048_LEN); + result = AddRequestAuthBlock(&auth_session, cmd.buffer, + sizeof(cmd.buffer), 0); + if (result != TPM_SUCCESS) { + return result; + } + + /* The response buffer needs to be large to hold the public half of the + * generated SRK. */ + uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE + TPM_RSA_2048_LEN]; + result = TlclSendReceive(cmd.buffer, response, sizeof(response)); + if (result != TPM_SUCCESS) { + return result; + } + + /* Check the auth tag on the response. */ + result = CheckResponseAuthBlock(&auth_session, TPM_ORD_TakeOwnership, + response, sizeof(response)); + if (result != TPM_SUCCESS) { + return result; + } + + return TPM_SUCCESS; +} + +uint32_t TlclCreateDelegationFamily(uint8_t family_label) +{ + struct s_tpm_create_delegation_family_cmd cmd; + memcpy(&cmd, &tpm_create_delegation_family_cmd, sizeof(cmd)); + cmd.buffer[tpm_create_delegation_family_cmd.familyLabel] = family_label; + return Send(cmd.buffer); +} + +uint32_t TlclReadDelegationFamilyTable(TPM_FAMILY_TABLE_ENTRY *table, + uint32_t* table_size) +{ + uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE]; + uint32_t result = TlclSendReceive(tpm_delegate_read_table_cmd.buffer, + response, sizeof(response)); + if (result != TPM_SUCCESS) { + return result; + } + + uint32_t size; + FromTpmUint32(response + sizeof(uint16_t), &size); + if (size < kTpmRequestHeaderLength + sizeof(uint32_t) || + size > sizeof(response)) { + return TPM_E_INVALID_RESPONSE; + } + + const uint8_t* cursor = response + kTpmRequestHeaderLength; + uint32_t table_bytes = ReadTpmUint32(&cursor); + + if (table_bytes > size - (cursor - response)) { + return TPM_E_INVALID_RESPONSE; + } + + const uint32_t table_entry_size = + sizeof(uint16_t) + sizeof(uint8_t) + 3 * sizeof(uint32_t); + uint32_t table_entries = table_bytes / table_entry_size; + int i; + for (i = 0; i < table_entries; ++i) { + if (i >= *table_size || !table) { + result = TPM_E_BUFFER_SIZE; + break; + } + + table[i].tag = ReadTpmUint16(&cursor); + table[i].familyLabel = *cursor++; + table[i].familyID = ReadTpmUint32(&cursor); + table[i].verificationCount = ReadTpmUint32(&cursor); + table[i].flags = ReadTpmUint32(&cursor); + } + + *table_size = table_entries; + + return result; +} + +#endif /* CHROMEOS_ENVIRONMENT */ diff --git a/firmware/lib/vboot_api_kernel.c b/firmware/lib/vboot_api_kernel.c new file mode 100644 index 0000000..85a8f4b --- /dev/null +++ b/firmware/lib/vboot_api_kernel.c @@ -0,0 +1,263 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * High-level firmware wrapper API - entry points for kernel selection + */ + +#include "2api.h" +#include "2common.h" +#include "2kernel.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2rsa.h" +#include "2secdata.h" +#include "2sysincludes.h" +#include "load_kernel_fw.h" +#include "vboot_api.h" +#include "vboot_struct.h" +#include "vboot_test.h" + +/* Global variables */ +static VbSelectAndLoadKernelParams *kparams_ptr; + +#ifdef CHROMEOS_ENVIRONMENT +/* Global variable accessor for unit tests */ +struct VbSelectAndLoadKernelParams **VbApiKernelGetParamsPtr(void) +{ + return &kparams_ptr; +} +#endif + +static vb2_error_t handle_battery_cutoff(struct vb2_context *ctx) +{ + /* + * Check if we need to cut-off battery. This should be done after EC + * FW and auxfw are updated, and before the kernel is started. This + * is to make sure all firmware is up-to-date before shipping (which + * is the typical use-case for cutoff). + */ + if (vb2_nv_get(ctx, VB2_NV_BATTERY_CUTOFF_REQUEST)) { + VB2_DEBUG("Request to cut-off battery\n"); + vb2_nv_set(ctx, VB2_NV_BATTERY_CUTOFF_REQUEST, 0); + + /* May lose power immediately, so commit our update now. */ + VB2_TRY(vb2ex_commit_data(ctx)); + + vb2ex_ec_battery_cutoff(); + return VB2_REQUEST_SHUTDOWN; + } + + return VB2_SUCCESS; +} + +static int is_valid_disk(VbDiskInfo *info, uint32_t disk_flags) +{ + return info->bytes_per_lba >= 512 && + (info->bytes_per_lba & (info->bytes_per_lba - 1)) == 0 && + info->lba_count >= 16 && + (info->flags & disk_flags & VB_DISK_FLAG_SELECT_MASK) && + ((info->flags & VB_DISK_FLAG_SELECT_MASK) & + ((info->flags & VB_DISK_FLAG_SELECT_MASK) - 1)) == 0; +} + +static vb2_error_t VbTryLoadKernelImpl(struct vb2_context *ctx, + uint32_t disk_flags, int minios, + uint32_t minios_flags) +{ + vb2_error_t rv = VB2_ERROR_LK_NO_DISK_FOUND; + VbDiskInfo* disk_info = NULL; + uint32_t disk_count = 0; + uint32_t i; + vb2_error_t new_rv; + + /* TODO: Should have been set by VbSelectAndLoadKernel. Remove when + this global is no longer needed. */ + VB2_ASSERT(kparams_ptr); + + kparams_ptr->disk_handle = NULL; + + /* Find disks */ + if (VB2_SUCCESS != VbExDiskGetInfo(&disk_info, &disk_count, disk_flags)) + disk_count = 0; + + /* Loop over disks */ + for (i = 0; i < disk_count; i++) { + VB2_DEBUG("trying disk %d\n", (int)i); + + if (!is_valid_disk(&disk_info[i], disk_flags)) { + VB2_DEBUG(" skipping: bytes_per_lba=%" PRIu64 + " lba_count=%" PRIu64 " flags=%#x\n", + disk_info[i].bytes_per_lba, + disk_info[i].lba_count, + disk_info[i].flags); + continue; + } + kparams_ptr->disk_handle = disk_info[i].handle; + + if (minios) { + new_rv = LoadMiniOsKernel(ctx, kparams_ptr, + &disk_info[i], minios_flags); + VB2_DEBUG("LoadMiniOsKernel() = %#x\n", new_rv); + } else { + new_rv = LoadKernel(ctx, kparams_ptr, &disk_info[i]); + VB2_DEBUG("LoadKernel() = %#x\n", new_rv); + } + + /* Stop now if we found a kernel. */ + if (VB2_SUCCESS == new_rv) { + VbExDiskFreeInfo(disk_info, disk_info[i].handle); + return VB2_SUCCESS; + } + + /* Don't update error if we already have a more specific one. */ + if (VB2_ERROR_LK_INVALID_KERNEL_FOUND != rv) + rv = new_rv; + } + + /* If we drop out of the loop, we didn't find any usable kernel. */ + if (!(ctx->flags & VB2_CONTEXT_RECOVERY_MODE) && + !(ctx->flags & VB2_CONTEXT_DEVELOPER_MODE)) { + switch (rv) { + case VB2_ERROR_LK_INVALID_KERNEL_FOUND: + vb2api_fail(ctx, VB2_RECOVERY_RW_INVALID_OS, rv); + break; + case VB2_ERROR_LK_NO_KERNEL_FOUND: + vb2api_fail(ctx, VB2_RECOVERY_RW_NO_KERNEL, rv); + break; + case VB2_ERROR_LK_NO_DISK_FOUND: + vb2api_fail(ctx, VB2_RECOVERY_RW_NO_DISK, rv); + break; + default: + vb2api_fail(ctx, VB2_RECOVERY_LK_UNSPECIFIED, rv); + break; + } + } + + /* If we didn't find any good kernels, don't return a disk handle. */ + VbExDiskFreeInfo(disk_info, NULL); + + return rv; +} + +test_mockable +vb2_error_t VbTryLoadKernel(struct vb2_context *ctx, uint32_t disk_flags) +{ + return VbTryLoadKernelImpl(ctx, disk_flags, 0, 0); +} + +test_mockable +vb2_error_t VbTryLoadMiniOsKernel(struct vb2_context *ctx, + uint32_t minios_flags) +{ + return VbTryLoadKernelImpl(ctx, VB_DISK_FLAG_FIXED, 1, minios_flags); +} + +vb2_error_t VbSelectAndLoadKernel(struct vb2_context *ctx, + VbSelectAndLoadKernelParams *kparams) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + vb2_gbb_flags_t gbb_flags = vb2api_gbb_get_flags(ctx); + + /* TODO: Send this argument through subsequent function calls, rather + than relying on a global to pass it to VbTryLoadKernel. */ + kparams_ptr = kparams; + + /* Init nvstorage space. TODO(kitching): Remove once we add assertions + to vb2_nv_get and vb2_nv_set. */ + vb2_nv_init(ctx); + + VB2_TRY(vb2api_kernel_phase1(ctx)); + + VB2_DEBUG("GBB flags are %#x\n", gbb_flags); + + /* + * Do EC and auxfw software sync unless we're in recovery mode. This + * has UI but it's just a single non-interactive WAIT screen. + */ + if (!(ctx->flags & VB2_CONTEXT_RECOVERY_MODE)) { + VB2_TRY(vb2api_ec_sync(ctx)); + VB2_TRY(vb2api_auxfw_sync(ctx)); + VB2_TRY(handle_battery_cutoff(ctx)); + } + + /* + * If in the broken screen, save the recovery reason as subcode. + * Otherwise, clear any leftover recovery requests or subcodes. + */ + vb2_clear_recovery(ctx); + + /* Select boot path */ + switch (ctx->boot_mode) { + case VB2_BOOT_MODE_MANUAL_RECOVERY: + case VB2_BOOT_MODE_BROKEN_SCREEN: + /* If we're in recovery mode just to do memory retraining, all + we need to do is reboot. */ + if (sd->recovery_reason == VB2_RECOVERY_TRAIN_AND_REBOOT) { + VB2_DEBUG("Reboot after retraining in recovery\n"); + return VB2_REQUEST_REBOOT; + } + + /* + * Need to commit nvdata changes immediately, since we will be + * entering either manual recovery UI or BROKEN screen shortly. + */ + vb2ex_commit_data(ctx); + + /* + * In EFS2, recovery mode can be entered even when battery is + * drained or damaged. EC-RO sets NO_BOOT flag in such case and + * uses PD power to boot AP. + * + * TODO: Inform user why recovery failed to start. + */ + if (ctx->flags & VB2_CONTEXT_NO_BOOT) + VB2_DEBUG("NO_BOOT in RECOVERY mode\n"); + + /* Recovery boot. This has UI. */ + if (ctx->boot_mode == VB2_BOOT_MODE_MANUAL_RECOVERY) + VB2_TRY(vb2ex_manual_recovery_ui(ctx)); + else + VB2_TRY(vb2ex_broken_screen_ui(ctx)); + break; + case VB2_BOOT_MODE_DIAGNOSTICS: + /* + * Need to clear the request flag and commit nvdata changes + * immediately to avoid booting back into diagnostic tool when a + * forced system reset occurs. + */ + vb2_nv_set(ctx, VB2_NV_DIAG_REQUEST, 0); + vb2ex_commit_data(ctx); + + /* Diagnostic boot. This has UI. */ + VB2_TRY(vb2ex_diagnostic_ui(ctx)); + /* + * The diagnostic menu should either boot a rom, or + * return either of reboot or shutdown. + */ + return VB2_REQUEST_REBOOT; + case VB2_BOOT_MODE_DEVELOPER: + /* Developer boot. This has UI. */ + VB2_TRY(vb2ex_developer_ui(ctx)); + break; + case VB2_BOOT_MODE_NORMAL: + /* Normal boot */ + VB2_TRY(vb2_normal_boot(ctx)); + break; + default: + return VB2_ERROR_ESCAPE_NO_BOOT; + } + + /* + * Stop all cases returning SUCCESS against NO_BOOT flag except when + * GBB flag disables software sync. + */ + if (!(gbb_flags & VB2_GBB_FLAG_DISABLE_EC_SOFTWARE_SYNC) + && (ctx->flags & VB2_CONTEXT_NO_BOOT)) { + VB2_DEBUG("Blocking escape from NO_BOOT mode.\n"); + vb2api_fail(ctx, VB2_RECOVERY_ESCAPE_NO_BOOT, 0); + return VB2_ERROR_ESCAPE_NO_BOOT; + } + + return VB2_SUCCESS; +} diff --git a/firmware/lib/vboot_kernel.c b/firmware/lib/vboot_kernel.c new file mode 100644 index 0000000..1edf4a5 --- /dev/null +++ b/firmware/lib/vboot_kernel.c @@ -0,0 +1,764 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Functions for loading a kernel from disk. + * (Firmware portion) + */ + +#include "2api.h" +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2packed_key.h" +#include "2secdata.h" +#include "2sysincludes.h" +#include "cgptlib.h" +#include "cgptlib_internal.h" +#include "gpt_misc.h" +#include "load_kernel_fw.h" +#include "vboot_api.h" + +enum vb2_load_partition_flags { + VB2_LOAD_PARTITION_FLAG_VBLOCK_ONLY = (1 << 0), + VB2_LOAD_PARTITION_FLAG_MINIOS = (1 << 1), +}; + +#define KBUF_SIZE 65536 /* Bytes to read at start of kernel partition */ + +/* Minimum context work buffer size needed for vb2_load_partition() */ +#define VB2_LOAD_PARTITION_WORKBUF_BYTES \ + (VB2_VERIFY_KERNEL_PREAMBLE_WORKBUF_BYTES + KBUF_SIZE) + +#define LOWEST_TPM_VERSION 0xffffffff + +/** + * Check if a valid keyblock is required. + * + * @param ctx Vboot context + * @return 1 if valid keyblock required (officially signed kernel); + * 0 if valid hash is enough (self-signed kernel). + */ +static int need_valid_keyblock(struct vb2_context *ctx) +{ + /* Normal and recovery modes always require official OS */ + if (ctx->boot_mode != VB2_BOOT_MODE_DEVELOPER) + return 1; + + /* FWMP can require developer mode to use signed kernels */ + if (vb2_secdata_fwmp_get_flag( + ctx, VB2_SECDATA_FWMP_DEV_ENABLE_OFFICIAL_ONLY)) + return 1; + + /* Developers may require signed kernels */ + if (vb2_nv_get(ctx, VB2_NV_DEV_BOOT_SIGNED_ONLY)) + return 1; + + return 0; +} + +/** + * Return a pointer to the keyblock inside a vblock. + * + * Must only be called during or after vb2_verify_kernel_vblock(). + * + * @param kbuf Buffer containing vblock + * @return The keyblock pointer. + */ +static struct vb2_keyblock *get_keyblock(uint8_t *kbuf) +{ + return (struct vb2_keyblock *)kbuf; +} + +/** + * Return a pointer to the kernel preamble inside a vblock. + * + * Must only be called during or after vb2_verify_kernel_vblock(). + * + * @param kbuf Buffer containing vblock + * @return The kernel preamble pointer. + */ +static struct vb2_kernel_preamble *get_preamble(uint8_t *kbuf) +{ + return (struct vb2_kernel_preamble *) + (kbuf + get_keyblock(kbuf)->keyblock_size); +} + +/** + * Return the offset of the kernel body from the start of the vblock. + * + * Must only be called during or after vb2_verify_kernel_vblock(). + * + * @param kbuf Buffer containing vblock + * @return The offset of the kernel body from the vblock start, in bytes. + */ +static uint32_t get_body_offset(uint8_t *kbuf) +{ + return (get_keyblock(kbuf)->keyblock_size + + get_preamble(kbuf)->preamble_size); +} + +/** + * Verify developer mode key hash. + * + * @param ctx Vboot context + * @param keyblock Keyblock to verify + * @return VB2_SUCCESS, or non-zero error code. + */ +static vb2_error_t vb2_verify_kernel_dev_key_hash( + struct vb2_context *ctx, struct vb2_keyblock *keyblock) +{ + struct vb2_packed_key *key = &keyblock->data_key; + uint8_t *buf = ((uint8_t *)key) + key->key_offset; + uint32_t buflen = key->key_size; + uint8_t digest[VB2_SHA256_DIGEST_SIZE]; + + VB2_DEBUG("Checking developer key hash.\n"); + VB2_TRY(vb2_digest_buffer(buf, buflen, VB2_HASH_SHA256, digest, + sizeof(digest))); + + uint8_t *fwmp_dev_key_hash = + vb2_secdata_fwmp_get_dev_key_hash(ctx); + if (fwmp_dev_key_hash == NULL) { + VB2_DEBUG("Couldn't retrieve developer key hash.\n"); + return VB2_ERROR_KERNEL_KEYBLOCK_DEV_KEY_HASH; + } + + if (vb2_safe_memcmp(digest, fwmp_dev_key_hash, + VB2_SHA256_DIGEST_SIZE)) { + int i; + + VB2_DEBUG("Wrong developer key hash.\n"); + VB2_DEBUG("Want: "); + for (i = 0; i < VB2_SHA256_DIGEST_SIZE; i++) + VB2_DEBUG_RAW("%02x ", fwmp_dev_key_hash[i]); + VB2_DEBUG_RAW("\n"); + VB2_DEBUG("Got: "); + for (i = 0; i < VB2_SHA256_DIGEST_SIZE; i++) + VB2_DEBUG_RAW("%02x ", digest[i]); + VB2_DEBUG_RAW("\n"); + + return VB2_ERROR_KERNEL_KEYBLOCK_DEV_KEY_HASH; + } + + return VB2_SUCCESS; +} + +/** + * Verify a kernel vblock. + * + * @param ctx Vboot context + * @param kbuf Buffer containing the vblock + * @param kbuf_size Size of the buffer in bytes + * @param lpflags Flags (one or more of vb2_load_partition_flags) + * @param wb Work buffer. Must be at least + * VB2_VERIFY_KERNEL_PREAMBLE_WORKBUF_BYTES bytes. + * @return VB2_SUCCESS, or non-zero error code. + */ +static vb2_error_t vb2_verify_kernel_vblock( + struct vb2_context *ctx, uint8_t *kbuf, uint32_t kbuf_size, + uint32_t lpflags, struct vb2_workbuf *wb) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + + uint8_t *key_data; + uint32_t key_size; + struct vb2_public_key kernel_key; + + int need_keyblock_valid = need_valid_keyblock(ctx); + int keyblock_valid = 1; /* Assume valid */ + + vb2_error_t rv; + + /* Locate key to verify kernel. This will either be a recovery key, or + a kernel subkey passed from firmware verification. */ + key_data = vb2_member_of(sd, sd->kernel_key_offset); + key_size = sd->kernel_key_size; + VB2_TRY(vb2_unpack_key_buffer(&kernel_key, key_data, key_size)); + + if (vb2_hwcrypto_allowed(ctx)) + kernel_key.allow_hwcrypto = 1; + + /* + * Clear any previous keyblock-valid flag (for example, from a previous + * kernel where the keyblock was signed but the preamble failed + * verification). + */ + sd->flags &= ~VB2_SD_FLAG_KERNEL_SIGNED; + + /* Verify the keyblock. */ + struct vb2_keyblock *keyblock = get_keyblock(kbuf); + rv = vb2_verify_keyblock(keyblock, kbuf_size, &kernel_key, wb); + if (rv) { + VB2_DEBUG("Verifying keyblock signature failed.\n"); + keyblock_valid = 0; + + /* Check if we must have an officially signed kernel */ + if (need_keyblock_valid) { + VB2_DEBUG("Self-signed kernels not enabled.\n"); + return rv; + } + + /* Otherwise, allow the kernel if the keyblock hash is valid */ + rv = vb2_verify_keyblock_hash(keyblock, kbuf_size, wb); + if (rv) { + VB2_DEBUG("Verifying keyblock hash failed.\n"); + return rv; + } + } + + /* Check the keyblock flags against boot flags. */ + if (!(keyblock->keyblock_flags & + ((ctx->flags & VB2_CONTEXT_DEVELOPER_MODE) ? + VB2_KEYBLOCK_FLAG_DEVELOPER_1 : + VB2_KEYBLOCK_FLAG_DEVELOPER_0))) { + VB2_DEBUG("Keyblock developer flag mismatch.\n"); + keyblock_valid = 0; + if (need_keyblock_valid) + return VB2_ERROR_KERNEL_KEYBLOCK_DEV_FLAG; + } + if (!(keyblock->keyblock_flags & + ((ctx->flags & VB2_CONTEXT_RECOVERY_MODE) ? + VB2_KEYBLOCK_FLAG_RECOVERY_1 : + VB2_KEYBLOCK_FLAG_RECOVERY_0))) { + VB2_DEBUG("Keyblock recovery flag mismatch.\n"); + keyblock_valid = 0; + if (need_keyblock_valid) + return VB2_ERROR_KERNEL_KEYBLOCK_REC_FLAG; + } + if (!(keyblock->keyblock_flags & + ((lpflags & VB2_LOAD_PARTITION_FLAG_MINIOS) ? + VB2_KEYBLOCK_FLAG_MINIOS_1 : + VB2_KEYBLOCK_FLAG_MINIOS_0))) { + VB2_DEBUG("Keyblock miniOS flag mismatch.\n"); + keyblock_valid = 0; + if (need_keyblock_valid) + return VB2_ERROR_KERNEL_KEYBLOCK_MINIOS_FLAG; + } + + /* Check for rollback of key version except in recovery mode. */ + uint32_t key_version = keyblock->data_key.key_version; + if (ctx->boot_mode != VB2_BOOT_MODE_MANUAL_RECOVERY) { + if (key_version < (sd->kernel_version_secdata >> 16)) { + keyblock_valid = 0; + if (need_keyblock_valid) { + VB2_DEBUG("Key version too old.\n"); + return VB2_ERROR_KERNEL_KEYBLOCK_VERSION_ROLLBACK; + } + } + if (key_version > VB2_MAX_KEY_VERSION) { + /* + * Key version is stored in 16 bits in the TPM, so key + * versions greater than 0xFFFF can't be stored + * properly. + */ + VB2_DEBUG("Key version > 0xFFFF.\n"); + keyblock_valid = 0; + if (need_keyblock_valid) + return VB2_ERROR_KERNEL_KEYBLOCK_VERSION_RANGE; + } + } + + /* If in developer mode and using key hash, check it. */ + if (ctx->boot_mode == VB2_BOOT_MODE_DEVELOPER && + vb2_secdata_fwmp_get_flag(ctx, VB2_SECDATA_FWMP_DEV_USE_KEY_HASH)) { + VB2_TRY(vb2_verify_kernel_dev_key_hash(ctx, keyblock)); + } + + /* + * At this point, we've checked everything. The kernel keyblock is at + * least self-consistent, and has either a valid signature or a valid + * hash. Track if it had a valid signature (that is, would we have + * been willing to boot it even if developer mode was off). + */ + if (keyblock_valid) + sd->flags |= VB2_SD_FLAG_KERNEL_SIGNED; + + /* Get key for preamble verification from the keyblock. */ + struct vb2_public_key data_key; + rv = vb2_unpack_key(&data_key, &keyblock->data_key); + if (rv) { + VB2_DEBUG("Unable to unpack kernel data key\n"); + return rv; + } + + /* Verify the preamble, which follows the keyblock */ + struct vb2_kernel_preamble *preamble = get_preamble(kbuf); + rv = vb2_verify_kernel_preamble(preamble, + kbuf_size - keyblock->keyblock_size, + &data_key, + wb); + if (rv) { + VB2_DEBUG("Preamble verification failed.\n"); + return rv; + } + + /* Rollback check for miniOS */ + if (need_keyblock_valid && (lpflags & VB2_LOAD_PARTITION_FLAG_MINIOS)) { + if (preamble->kernel_version < + (sd->kernel_version_secdata >> 24)) { + keyblock_valid = 0; + if (need_keyblock_valid) { + VB2_DEBUG("miniOS kernel version too old.\n"); + return VB2_ERROR_KERNEL_PREAMBLE_VERSION_ROLLBACK; + } + } + if (preamble->kernel_version > 0xff) { + /* + * Key version is stored in the top 8 bits of 16 bits + * in the TPM, so key versions greater than 0xFF can't + * be stored properly. + */ + VB2_DEBUG("Key version > 0xFF.\n"); + keyblock_valid = 0; + if (need_keyblock_valid) + return VB2_ERROR_KERNEL_PREAMBLE_VERSION_RANGE; + } + } + + /* + * Kernel preamble version is the lower 16 bits of the composite + * kernel version. + */ + if (preamble->kernel_version > VB2_MAX_PREAMBLE_VERSION) + return VB2_ERROR_KERNEL_PREAMBLE_VERSION_RANGE; + + /* Combine with the key version. */ + sd->kernel_version = key_version << 16 | preamble->kernel_version; + + /* If not in recovery mode, check for rollback of the kernel version. */ + if (need_keyblock_valid && + ctx->boot_mode != VB2_BOOT_MODE_MANUAL_RECOVERY && + sd->kernel_version < sd->kernel_version_secdata) { + VB2_DEBUG("Kernel version too low.\n"); + return VB2_ERROR_KERNEL_PREAMBLE_VERSION_ROLLBACK; + } + + VB2_DEBUG("Kernel preamble is good.\n"); + return VB2_SUCCESS; +} + +/** + * Load and verify a partition from the stream. + * + * @param ctx Vboot context + * @param params Load-kernel parameters + * @param stream Stream to load kernel from + * @param lpflags Flags (one or more of vb2_load_partition_flags) + * @return VB2_SUCCESS, or non-zero error code. + */ +static vb2_error_t vb2_load_partition( + struct vb2_context *ctx, VbSelectAndLoadKernelParams *params, + VbExStream_t stream, uint32_t lpflags) +{ + uint32_t read_ms = 0, start_ts; + struct vb2_workbuf wb; + + vb2_workbuf_from_ctx(ctx, &wb); + + /* Allocate kernel header buffer in workbuf */ + uint8_t *kbuf = vb2_workbuf_alloc(&wb, KBUF_SIZE); + if (!kbuf) + return VB2_ERROR_LOAD_PARTITION_WORKBUF; + + start_ts = vb2ex_mtime(); + if (VbExStreamRead(stream, KBUF_SIZE, kbuf)) { + VB2_DEBUG("Unable to read start of partition.\n"); + return VB2_ERROR_LOAD_PARTITION_READ_VBLOCK; + } + read_ms += vb2ex_mtime() - start_ts; + + if (vb2_verify_kernel_vblock(ctx, kbuf, KBUF_SIZE, lpflags, &wb)) + return VB2_ERROR_LOAD_PARTITION_VERIFY_VBLOCK; + + if (lpflags & VB2_LOAD_PARTITION_FLAG_VBLOCK_ONLY) + return VB2_SUCCESS; + + struct vb2_keyblock *keyblock = get_keyblock(kbuf); + struct vb2_kernel_preamble *preamble = get_preamble(kbuf); + + /* + * Make sure the kernel starts at or before what we already read into + * kbuf. + * + * We could deal with a larger offset by reading and discarding the + * data in between the vblock and the kernel data. + */ + uint32_t body_offset = get_body_offset(kbuf); + if (body_offset > KBUF_SIZE) { + VB2_DEBUG("Kernel body offset is %u > 64KB.\n", body_offset); + return VB2_ERROR_LOAD_PARTITION_BODY_OFFSET; + } + + uint8_t *kernbuf = params->kernel_buffer; + uint32_t kernbuf_size = params->kernel_buffer_size; + if (!kernbuf) { + /* Get kernel load address and size from the header. */ + kernbuf = (uint8_t *)((long)preamble->body_load_address); + kernbuf_size = preamble->body_signature.data_size; + } else if (preamble->body_signature.data_size > kernbuf_size) { + VB2_DEBUG("Kernel body doesn't fit in memory.\n"); + return VB2_ERROR_LOAD_PARTITION_BODY_SIZE; + } + + uint32_t body_toread = preamble->body_signature.data_size; + uint8_t *body_readptr = kernbuf; + + /* + * If we've already read part of the kernel, copy that to the beginning + * of the kernel buffer. + */ + uint32_t body_copied = KBUF_SIZE - body_offset; + if (body_copied > body_toread) + body_copied = body_toread; /* Don't over-copy tiny kernel */ + memcpy(body_readptr, kbuf + body_offset, body_copied); + body_toread -= body_copied; + body_readptr += body_copied; + + /* Read the kernel data */ + start_ts = vb2ex_mtime(); + if (body_toread && VbExStreamRead(stream, body_toread, body_readptr)) { + VB2_DEBUG("Unable to read kernel data.\n"); + return VB2_ERROR_LOAD_PARTITION_READ_BODY; + } + read_ms += vb2ex_mtime() - start_ts; + if (read_ms == 0) /* Avoid division by 0 in speed calculation */ + read_ms = 1; + VB2_DEBUG("read %u KB in %u ms at %u KB/s.\n", + (body_toread + KBUF_SIZE) / 1024, read_ms, + (uint32_t)(((body_toread + KBUF_SIZE) * VB2_MSEC_PER_SEC) / + (read_ms * 1024))); + + /* Get key for preamble/data verification from the keyblock. */ + struct vb2_public_key data_key; + if (vb2_unpack_key(&data_key, &keyblock->data_key)) { + VB2_DEBUG("Unable to unpack kernel data key\n"); + return VB2_ERROR_LOAD_PARTITION_DATA_KEY; + } + + if (vb2_hwcrypto_allowed(ctx)) + data_key.allow_hwcrypto = 1; + + /* Verify kernel data */ + if (vb2_verify_data(kernbuf, kernbuf_size, &preamble->body_signature, + &data_key, &wb)) { + VB2_DEBUG("Kernel data verification failed.\n"); + return VB2_ERROR_LOAD_PARTITION_VERIFY_BODY; + } + + /* If we're still here, the kernel is valid */ + VB2_DEBUG("Partition is good.\n"); + + /* Save kernel data back to parameters */ + params->bootloader_address = preamble->bootloader_address; + params->bootloader_size = preamble->bootloader_size; + params->flags = vb2_kernel_get_flags(preamble); + if (!params->kernel_buffer) { + params->kernel_buffer = kernbuf; + params->kernel_buffer_size = kernbuf_size; + } + + return VB2_SUCCESS; +} + +static vb2_error_t try_minios_kernel(struct vb2_context *ctx, + VbSelectAndLoadKernelParams *params, + VbDiskInfo *disk_info, + uint64_t sector) { + VbExStream_t stream; + uint64_t sectors_left = disk_info->lba_count - sector; + const uint32_t lpflags = VB2_LOAD_PARTITION_FLAG_MINIOS; + vb2_error_t rv = VB2_ERROR_LK_NO_KERNEL_FOUND; + + /* Re-open stream at correct offset to pass to vb2_load_partition. */ + if (VbExStreamOpen(params->disk_handle, sector, sectors_left, + &stream)) { + VB2_DEBUG("Unable to open disk handle.\n"); + return rv; + } + + rv = vb2_load_partition(ctx, params, stream, lpflags); + VB2_DEBUG("vb2_load_partition returned: %d\n", rv); + + VbExStreamClose(stream); + + if (rv) + return VB2_ERROR_LK_NO_KERNEL_FOUND; + return rv; +} + +static vb2_error_t try_minios_sectors(struct vb2_context *ctx, + VbSelectAndLoadKernelParams *params, + VbDiskInfo *disk_info, + uint64_t start, uint64_t count) +{ + const uint32_t buf_size = count * disk_info->bytes_per_lba; + char *buf; + VbExStream_t stream; + uint64_t isector; + vb2_error_t rv = VB2_ERROR_LK_NO_KERNEL_FOUND; + + buf = malloc(buf_size); + if (buf == NULL) { + VB2_DEBUG("Unable to allocate disk read buffer.\n"); + return rv; + } + + if (VbExStreamOpen(params->disk_handle, start, count, &stream)) { + VB2_DEBUG("Unable to open disk handle.\n"); + free(buf); + return rv; + } + if (VbExStreamRead(stream, buf_size, buf)) { + VB2_DEBUG("Unable to read disk.\n"); + free(buf); + VbExStreamClose(stream); + return rv; + } + VbExStreamClose(stream); + + for (isector = 0; isector < count; isector++) { + if (memcmp(buf + isector * disk_info->bytes_per_lba, + VB2_KEYBLOCK_MAGIC, VB2_KEYBLOCK_MAGIC_SIZE)) + continue; + VB2_DEBUG("Match on sector %" PRIu64 " / %" PRIu64 "\n", + start + isector, + disk_info->lba_count - 1); + rv = try_minios_kernel(ctx, params, disk_info, start + isector); + if (rv == VB2_SUCCESS) + break; + } + + free(buf); + return rv; +} + +static vb2_error_t try_minios_sector_region(struct vb2_context *ctx, + VbSelectAndLoadKernelParams *params, + VbDiskInfo *disk_info, + int end_region) +{ + const uint64_t disk_count_half = (disk_info->lba_count + 1) / 2; + const uint64_t check_count_256 = 256 * 1024 + * 1024 / disk_info->bytes_per_lba; // 256 MB + const uint64_t batch_count_1 = 1024 + * 1024 / disk_info->bytes_per_lba; // 1 MB + const uint64_t check_count = VB2_MIN(disk_count_half, check_count_256); + const uint64_t batch_count = VB2_MIN(disk_count_half, batch_count_1); + uint64_t sector; + uint64_t start; + uint64_t end; + const char *region_name; + vb2_error_t rv = VB2_ERROR_LK_NO_KERNEL_FOUND; + + if (!end_region) { + start = 0; + end = check_count; + region_name = "start"; + } else { + start = disk_info->lba_count - check_count; + end = disk_info->lba_count; + region_name = "end"; + } + + VB2_DEBUG("Checking %s of disk for kernels...\n", region_name); + for (sector = start; sector < end; sector += batch_count) { + rv = try_minios_sectors(ctx, params, disk_info, sector, + batch_count); + if (rv == VB2_SUCCESS) + return rv; + } + + return rv; +} + +/* + * Search for kernels by sector, rather than by partition. Only sectors near + * the start and end of disks are considered, and the kernel must start exactly + * at the first byte of the sector. + */ +vb2_error_t LoadMiniOsKernel(struct vb2_context *ctx, + VbSelectAndLoadKernelParams *params, + VbDiskInfo *disk_info, uint32_t minios_flags) +{ + vb2_error_t rv; + int end_region_first = vb2_nv_get(ctx, VB2_NV_MINIOS_PRIORITY); + + if (minios_flags & VB_MINIOS_FLAG_NON_ACTIVE) + rv = VB2_ERROR_UNKNOWN; /* Ignore active partition */ + else + rv = try_minios_sector_region(ctx, params, disk_info, + end_region_first); + + if (rv) + rv = try_minios_sector_region(ctx, params, disk_info, + !end_region_first); + if (rv) + return rv; + + rv = vb2ex_tpm_set_mode(VB2_TPM_MODE_DISABLED); + if (rv) + VB2_DEBUG("Failed to disable TPM\n"); + + return rv; +} + +vb2_error_t LoadKernel(struct vb2_context *ctx, + VbSelectAndLoadKernelParams *params, + VbDiskInfo *disk_info) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + int found_partitions = 0; + uint32_t lowest_version = LOWEST_TPM_VERSION; + vb2_error_t rv; + + /* Clear output params */ + params->partition_number = 0; + + /* Read GPT data */ + GptData gpt; + gpt.sector_bytes = (uint32_t)disk_info->bytes_per_lba; + gpt.streaming_drive_sectors = disk_info->streaming_lba_count + ?: disk_info->lba_count; + gpt.gpt_drive_sectors = disk_info->lba_count; + gpt.flags = disk_info->flags & VB_DISK_FLAG_EXTERNAL_GPT + ? GPT_FLAG_EXTERNAL : 0; + if (AllocAndReadGptData(disk_info->handle, &gpt)) { + VB2_DEBUG("Unable to read GPT data\n"); + goto gpt_done; + } + + /* Initialize GPT library */ + if (GptInit(&gpt)) { + VB2_DEBUG("Error parsing GPT\n"); + goto gpt_done; + } + + /* Loop over candidate kernel partitions */ + uint64_t part_start, part_size; + while (GptNextKernelEntry(&gpt, &part_start, &part_size) == + GPT_SUCCESS) { + + VB2_DEBUG("Found kernel entry at %" + PRIu64 " size %" PRIu64 "\n", + part_start, part_size); + + /* Found at least one kernel partition. */ + found_partitions++; + + /* Set up the stream */ + VbExStream_t stream = NULL; + if (VbExStreamOpen(disk_info->handle, + part_start, part_size, &stream)) { + VB2_DEBUG("Partition error getting stream.\n"); + VB2_DEBUG("Marking kernel as invalid.\n"); + GptUpdateKernelEntry(&gpt, GPT_UPDATE_ENTRY_BAD); + continue; + } + + uint32_t lpflags = 0; + if (params->partition_number > 0) { + /* + * If we already have a good kernel, we only needed to + * look at the vblock versions to check for rollback. + */ + lpflags |= VB2_LOAD_PARTITION_FLAG_VBLOCK_ONLY; + } + + rv = vb2_load_partition(ctx, params, stream, lpflags); + VbExStreamClose(stream); + + if (rv) { + VB2_DEBUG("Marking kernel as invalid (err=%x).\n", rv); + GptUpdateKernelEntry(&gpt, GPT_UPDATE_ENTRY_BAD); + continue; + } + + int keyblock_valid = sd->flags & VB2_SD_FLAG_KERNEL_SIGNED; + /* Track lowest version from a valid header. */ + if (keyblock_valid && lowest_version > sd->kernel_version) { + lowest_version = sd->kernel_version; + } + VB2_DEBUG("Keyblock valid: %d\n", keyblock_valid); + VB2_DEBUG("Combined version: %u\n", sd->kernel_version); + + /* + * If we're only looking at headers, we're done with this + * partition. + */ + if (lpflags & VB2_LOAD_PARTITION_FLAG_VBLOCK_ONLY) + continue; + + /* + * Otherwise, we found a partition we like. + * + * TODO: GPT partitions start at 1, but cgptlib starts them at + * 0. Adjust here, until cgptlib is fixed. + */ + params->partition_number = gpt.current_kernel + 1; + + /* + * TODO: GetCurrentKernelUniqueGuid() should take a destination + * size, or the dest should be a struct, so we know it's big + * enough. + */ + GetCurrentKernelUniqueGuid(&gpt, ¶ms->partition_guid); + + /* Update GPT to note this is the kernel we're trying. + * But not when we assume that the boot process may + * not complete for valid reasons (eg. early shutdown). + */ + if (!(ctx->flags & VB2_CONTEXT_NOFAIL_BOOT)) + GptUpdateKernelEntry(&gpt, GPT_UPDATE_ENTRY_TRY); + + /* + * If we're in recovery mode or we're about to boot a + * non-officially-signed kernel, there's no rollback + * protection, so we can stop at the first valid kernel. + */ + if (ctx->boot_mode == VB2_BOOT_MODE_MANUAL_RECOVERY || + !keyblock_valid) { + VB2_DEBUG("In recovery mode or dev-signed kernel\n"); + break; + } + + /* + * Otherwise, we do care about the key index in the TPM. If + * the good partition's key version is the same as the tpm, + * then the TPM doesn't need updating; we can stop now. + * Otherwise, we'll check all the other headers to see if they + * contain a newer key. + */ + if (sd->kernel_version == sd->kernel_version_secdata) { + VB2_DEBUG("Same kernel version\n"); + break; + } + } /* while(GptNextKernelEntry) */ + + gpt_done: + /* Write and free GPT data */ + WriteAndFreeGptData(disk_info->handle, &gpt); + + /* Handle finding a good partition */ + if (params->partition_number > 0) { + VB2_DEBUG("Good partition %d\n", params->partition_number); + /* + * Validity check - only store a new TPM version if we found + * one. If lowest_version is still at its initial value, we + * didn't find one; for example, we're in developer mode and + * just didn't look. + */ + if (lowest_version != LOWEST_TPM_VERSION && + lowest_version > sd->kernel_version_secdata) + sd->kernel_version = lowest_version; + + /* Success! */ + rv = VB2_SUCCESS; + } else if (found_partitions > 0) { + rv = VB2_ERROR_LK_INVALID_KERNEL_FOUND; + } else { + rv = VB2_ERROR_LK_NO_KERNEL_FOUND; + } + + return rv; +} diff --git a/firmware/lib20/api_kernel.c b/firmware/lib20/api_kernel.c new file mode 100644 index 0000000..403e932 --- /dev/null +++ b/firmware/lib20/api_kernel.c @@ -0,0 +1,144 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Externally-callable APIs + * (Kernel portion) + */ + +#include "2api.h" +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2rsa.h" +#include "2secdata.h" +#include "2sha.h" +#include "2sysincludes.h" + +vb2_error_t vb2api_load_kernel_vblock(struct vb2_context *ctx) +{ + /* Verify kernel keyblock */ + VB2_TRY(vb2_load_kernel_keyblock(ctx)); + + /* Verify kernel preamble */ + VB2_TRY(vb2_load_kernel_preamble(ctx)); + + return VB2_SUCCESS; +} + +vb2_error_t vb2api_get_kernel_size(struct vb2_context *ctx, + uint32_t *offset_ptr, uint32_t *size_ptr) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + const struct vb2_kernel_preamble *pre; + + /* Get preamble pointer */ + if (!sd->preamble_size) + return VB2_ERROR_API_GET_KERNEL_SIZE_PREAMBLE; + + pre = (const struct vb2_kernel_preamble *) + vb2_member_of(sd, sd->preamble_offset); + + if (offset_ptr) { + /* The kernel implicitly follows the preamble */ + *offset_ptr = sd->vblock_preamble_offset + + sd->preamble_size; + } + + if (size_ptr) { + /* Expect the kernel to be the size of data we signed */ + *size_ptr = pre->body_signature.data_size; + } + + return VB2_SUCCESS; +} + +vb2_error_t vb2api_verify_kernel_data(struct vb2_context *ctx, const void *buf, + uint32_t size) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + struct vb2_kernel_preamble *pre; + struct vb2_digest_context *dc; + struct vb2_public_key key; + struct vb2_workbuf wb; + + uint8_t *digest; + uint32_t digest_size; + + vb2_workbuf_from_ctx(ctx, &wb); + + /* Get preamble pointer */ + if (!sd->preamble_size) + return VB2_ERROR_API_VERIFY_KDATA_PREAMBLE; + + pre = (struct vb2_kernel_preamble *) + vb2_member_of(sd, sd->preamble_offset); + + /* Make sure we were passed the right amount of data */ + if (size != pre->body_signature.data_size) + return VB2_ERROR_API_VERIFY_KDATA_SIZE; + + /* Allocate workbuf space for the hash */ + dc = vb2_workbuf_alloc(&wb, sizeof(*dc)); + if (!dc) + return VB2_ERROR_API_VERIFY_KDATA_WORKBUF; + + /* + * Unpack the kernel data key to see which hashing algorithm we + * should use. + * + * TODO: really, the kernel body should be hashed, and not signed, + * because the signature we're checking is already signed as part of + * the kernel preamble. But until we can change the signing scripts, + * we're stuck with a signature here instead of a hash. + */ + if (!sd->data_key_size) + return VB2_ERROR_API_VERIFY_KDATA_KEY; + + VB2_TRY(vb2_unpack_key_buffer(&key, + vb2_member_of(sd, sd->data_key_offset), + sd->data_key_size)); + + VB2_TRY(vb2_digest_init(dc, key.hash_alg)); + + VB2_TRY(vb2_digest_extend(dc, buf, size)); + + digest_size = vb2_digest_size(key.hash_alg); + digest = vb2_workbuf_alloc(&wb, digest_size); + if (!digest) + return VB2_ERROR_API_CHECK_HASH_WORKBUF_DIGEST; + + VB2_TRY(vb2_digest_finalize(dc, digest, digest_size)); + + /* + * The body signature is currently a *signature* of the body data, not + * just its hash. So we need to verify the signature. + */ + + /* + * Check digest vs. signature. Note that this destroys the signature. + * That's ok, because we only check each signature once per boot. + */ + return vb2_verify_digest(&key, &pre->body_signature, digest, &wb); +} + +vb2_error_t vb2api_kernel_phase3(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + + /* + * If the kernel is a newer version than in secure storage, and the + * kernel signature is valid, and we're not in recovery mode, and we're + * allowed to, roll forward the version in secure storage. + */ + if (sd->kernel_version > sd->kernel_version_secdata && + (sd->flags & VB2_SD_FLAG_KERNEL_SIGNED) && + !(ctx->flags & VB2_CONTEXT_RECOVERY_MODE) && + (ctx->flags & VB2_CONTEXT_ALLOW_KERNEL_ROLL_FORWARD)) { + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_VERSIONS, + sd->kernel_version); + sd->kernel_version_secdata = sd->kernel_version; + } + + return VB2_SUCCESS; +} diff --git a/firmware/lib20/kernel.c b/firmware/lib20/kernel.c new file mode 100644 index 0000000..81ded65 --- /dev/null +++ b/firmware/lib20/kernel.c @@ -0,0 +1,270 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Kernel verified boot functions + */ + +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2rsa.h" +#include "2secdata.h" +#include "2sha.h" +#include "2sysincludes.h" + +/** + * Returns non-zero if the kernel needs to have a valid signature, instead of + * just a valid hash. + */ +static int vb2_need_signed_kernel(struct vb2_context *ctx) +{ + /* Recovery kernels are always signed */ + if (ctx->flags & VB2_CONTEXT_RECOVERY_MODE) + return 1; + + /* Normal mode kernels are always signed */ + if (!(ctx->flags & VB2_CONTEXT_DEVELOPER_MODE)) + return 1; + + /* Developers may require signed kernels */ + if (vb2_nv_get(ctx, VB2_NV_DEV_BOOT_SIGNED_ONLY)) + return 1; + + return 0; +} + +vb2_error_t vb2_load_kernel_keyblock(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + struct vb2_workbuf wb; + + uint8_t *key_data; + uint32_t key_size; + struct vb2_packed_key *packed_key; + struct vb2_public_key kernel_key; + + struct vb2_keyblock *kb; + uint32_t block_size; + + int rec_switch = (ctx->flags & VB2_CONTEXT_RECOVERY_MODE) != 0; + int dev_switch = (ctx->flags & VB2_CONTEXT_DEVELOPER_MODE) != 0; + int need_keyblock_valid = vb2_need_signed_kernel(ctx); + int keyblock_is_valid = 1; + + vb2_error_t rv; + + vb2_workbuf_from_ctx(ctx, &wb); + + /* + * Clear any previous keyblock-valid flag (for example, from a previous + * kernel where the keyblock was signed but the preamble failed + * verification). + */ + sd->flags &= ~VB2_SD_FLAG_KERNEL_SIGNED; + + /* Unpack the kernel key */ + key_data = vb2_member_of(sd, sd->kernel_key_offset); + key_size = sd->kernel_key_size; + VB2_TRY(vb2_unpack_key_buffer(&kernel_key, key_data, key_size)); + + /* Load the kernel keyblock header after the root key */ + kb = vb2_workbuf_alloc(&wb, sizeof(*kb)); + if (!kb) + return VB2_ERROR_KERNEL_KEYBLOCK_WORKBUF_HEADER; + + VB2_TRY(vb2ex_read_resource(ctx, VB2_RES_KERNEL_VBLOCK, 0, kb, + sizeof(*kb))); + + block_size = kb->keyblock_size; + + /* + * Load the entire keyblock, now that we know how big it is. Note that + * we're loading the entire keyblock instead of just the piece after + * the header. That means we re-read the header. But that's a tiny + * amount of data, and it makes the code much more straightforward. + */ + kb = vb2_workbuf_realloc(&wb, sizeof(*kb), block_size); + if (!kb) + return VB2_ERROR_KERNEL_KEYBLOCK_WORKBUF; + + VB2_TRY(vb2ex_read_resource(ctx, VB2_RES_KERNEL_VBLOCK, 0, kb, + block_size)); + + /* Verify the keyblock */ + rv = vb2_verify_keyblock(kb, block_size, &kernel_key, &wb); + if (rv) { + keyblock_is_valid = 0; + if (need_keyblock_valid) + return rv; + + /* Signature is invalid, but hash may be fine */ + VB2_TRY(vb2_verify_keyblock_hash(kb, block_size, &wb)); + } + + /* Check the keyblock flags against the current boot mode */ + if (!(kb->keyblock_flags & + (dev_switch ? VB2_KEYBLOCK_FLAG_DEVELOPER_1 : + VB2_KEYBLOCK_FLAG_DEVELOPER_0))) { + VB2_DEBUG("Keyblock developer flag mismatch.\n"); + keyblock_is_valid = 0; + if (need_keyblock_valid) + return VB2_ERROR_KERNEL_KEYBLOCK_DEV_FLAG; + } + if (!(kb->keyblock_flags & + (rec_switch ? VB2_KEYBLOCK_FLAG_RECOVERY_1 : + VB2_KEYBLOCK_FLAG_RECOVERY_0))) { + VB2_DEBUG("Keyblock recovery flag mismatch.\n"); + keyblock_is_valid = 0; + if (need_keyblock_valid) + return VB2_ERROR_KERNEL_KEYBLOCK_REC_FLAG; + } + + /* Check for keyblock rollback if not in recovery mode */ + /* Key version is the upper 16 bits of the composite version */ + if (!rec_switch && kb->data_key.key_version > VB2_MAX_KEY_VERSION) { + keyblock_is_valid = 0; + if (need_keyblock_valid) + return VB2_ERROR_KERNEL_KEYBLOCK_VERSION_RANGE; + } + if (!rec_switch && kb->data_key.key_version < + (sd->kernel_version_secdata >> 16)) { + keyblock_is_valid = 0; + if (need_keyblock_valid) + return VB2_ERROR_KERNEL_KEYBLOCK_VERSION_ROLLBACK; + } + + sd->kernel_version = kb->data_key.key_version << 16; + + /* + * At this point, we've checked everything. The kernel keyblock is at + * least self-consistent, and has either a valid signature or a valid + * hash. Track if it had a valid signature (that is, would we have + * been willing to boot it even if developer mode was off). + */ + if (keyblock_is_valid) + sd->flags |= VB2_SD_FLAG_KERNEL_SIGNED; + + /* Preamble follows the keyblock in the vblock */ + sd->vblock_preamble_offset = kb->keyblock_size; + + /* + * Keep just the data key from the vblock. This follows the kernel key + * (which we might still need to verify the next kernel, if the + * assoiciated kernel preamble and data don't verify). + */ + sd->data_key_offset = sd->workbuf_used; + key_data = vb2_member_of(sd, sd->data_key_offset); + packed_key = (struct vb2_packed_key *)key_data; + memmove(packed_key, &kb->data_key, sizeof(*packed_key)); + packed_key->key_offset = sizeof(*packed_key); + memmove(key_data + packed_key->key_offset, + (uint8_t*)&kb->data_key + kb->data_key.key_offset, + packed_key->key_size); + + /* Save the packed key size */ + sd->data_key_size = + packed_key->key_offset + packed_key->key_size; + + /* + * Data key will persist in the workbuf after we return. + * + * Work buffer now contains: + * - vb2_shared_data + * - kernel key + * - packed kernel data key + */ + vb2_set_workbuf_used(ctx, sd->data_key_offset + sd->data_key_size); + + return VB2_SUCCESS; +} + +vb2_error_t vb2_load_kernel_preamble(struct vb2_context *ctx) +{ + struct vb2_shared_data *sd = vb2_get_sd(ctx); + struct vb2_workbuf wb; + + uint8_t *key_data = vb2_member_of(sd, sd->data_key_offset); + uint32_t key_size = sd->data_key_size; + struct vb2_public_key data_key; + + /* Preamble goes in the next unused chunk of work buffer */ + /* TODO: what's the minimum workbuf size? Kernel preamble is usually + * padded to around 64KB. */ + struct vb2_kernel_preamble *pre; + uint32_t pre_size; + + vb2_workbuf_from_ctx(ctx, &wb); + + /* Unpack the kernel data key */ + if (!sd->data_key_size) + return VB2_ERROR_KERNEL_PREAMBLE2_DATA_KEY; + + VB2_TRY(vb2_unpack_key_buffer(&data_key, key_data, key_size)); + + /* Load the kernel preamble header */ + pre = vb2_workbuf_alloc(&wb, sizeof(*pre)); + if (!pre) + return VB2_ERROR_KERNEL_PREAMBLE2_WORKBUF_HEADER; + + VB2_TRY(vb2ex_read_resource(ctx, VB2_RES_KERNEL_VBLOCK, + sd->vblock_preamble_offset, + pre, sizeof(*pre))); + + pre_size = pre->preamble_size; + + /* Load the entire preamble, now that we know how big it is */ + pre = vb2_workbuf_realloc(&wb, sizeof(*pre), pre_size); + if (!pre) + return VB2_ERROR_KERNEL_PREAMBLE2_WORKBUF; + + VB2_TRY(vb2ex_read_resource(ctx, VB2_RES_KERNEL_VBLOCK, + sd->vblock_preamble_offset, + pre, pre_size)); + + /* + * Work buffer now contains: + * - vb2_shared_data + * - kernel key + * - packed kernel data key + * - kernel preamble + */ + + /* Verify the preamble */ + VB2_TRY(vb2_verify_kernel_preamble(pre, pre_size, &data_key, &wb)); + + /* + * Kernel preamble version is the lower 16 bits of the composite kernel + * version. + */ + if (pre->kernel_version > VB2_MAX_PREAMBLE_VERSION) + return VB2_ERROR_KERNEL_PREAMBLE_VERSION_RANGE; + + /* Combine with the key version from vb2_load_kernel_keyblock() */ + sd->kernel_version |= pre->kernel_version; + + if (vb2_need_signed_kernel(ctx) && + sd->kernel_version < sd->kernel_version_secdata) + return VB2_ERROR_KERNEL_PREAMBLE_VERSION_ROLLBACK; + + /* Keep track of where we put the preamble */ + sd->preamble_offset = vb2_offset_of(sd, pre); + sd->preamble_size = pre_size; + + /* + * Preamble will persist in work buffer after we return. + * + * Work buffer now contains: + * - vb2_shared_data + * - vb2_gbb_header + * - kernel key + * - packed kernel data key + * - kernel preamble + * + * TODO: we could move the preamble down over the kernel data key + * since we don't need it anymore. + */ + vb2_set_workbuf_used(ctx, sd->preamble_offset + pre_size); + + return VB2_SUCCESS; +} diff --git a/firmware/stub/OWNERS b/firmware/stub/OWNERS new file mode 100644 index 0000000..0cbadec --- /dev/null +++ b/firmware/stub/OWNERS @@ -0,0 +1 @@ +per-file tpm_lite* = apronin@chromium.org, rspangler@chromium.org, vbendeb@chromium.org diff --git a/firmware/stub/tpm_lite_stub.c b/firmware/stub/tpm_lite_stub.c new file mode 100644 index 0000000..01704f8 --- /dev/null +++ b/firmware/stub/tpm_lite_stub.c @@ -0,0 +1,300 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Stub implementations of utility functions which call their linux-specific + * equivalents. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "2common.h" +#include "2sysincludes.h" +#include "tlcl.h" +#include "tlcl_internal.h" + +#define TPM_DEVICE_PATH "/dev/tpm0" +/* Retry failed open()s for 5 seconds in 10ms polling intervals. */ +#define OPEN_RETRY_DELAY_NS (10 * 1000 * 1000) +#define OPEN_RETRY_MAX_NUM 500 +#define COMM_RETRY_MAX_NUM 3 + +/* TODO: these functions should pass errors back rather than returning void */ +/* TODO: if the only callers to these are just wrappers, should just + * remove the wrappers and call us directly. */ + + +/* The file descriptor for the TPM device. + */ +static int tpm_fd = -1; +/* If the library should exit during an OS-level TPM failure. + */ +static int exit_on_failure = 1; + +static inline uint32_t try_exit(uint32_t result) +{ + if (exit_on_failure) + exit(1); + return result; +} + +/* Print |n| bytes from array |a| to stderr, with newlines. + */ +__attribute__((unused)) static void DbgPrintBytes(const uint8_t* a, int n) +{ + int i; + VB2_DEBUG_RAW("DEBUG: "); + for (i = 0; i < n; i++) { + if (i && i % 16 == 0) + VB2_DEBUG_RAW("\nDEBUG: "); + VB2_DEBUG_RAW("%02x ", a[i]); + } + VB2_DEBUG_RAW("\n"); +} + + +/* Executes a command on the TPM. + */ +static uint32_t TpmExecute(const uint8_t *in, const uint32_t in_len, + uint8_t *out, uint32_t *pout_len) +{ + uint8_t response[TPM_MAX_COMMAND_SIZE]; + if (in_len <= 0) { + VB2_DEBUG("ERROR: invalid command length %d for command %#x\n", + in_len, in[9]); + return try_exit(TPM_E_INPUT_TOO_SMALL); + } else if (tpm_fd < 0) { + VB2_DEBUG("ERROR: the TPM device was not opened. " + "Forgot to call TlclLibInit?\n"); + return try_exit(TPM_E_NO_DEVICE); + } else { + int n; + int retries = 0; + int first_errno = 0; + + /* Write command. Retry in case of communication errors. + */ + for ( ; retries < COMM_RETRY_MAX_NUM; ++retries) { + n = write(tpm_fd, in, in_len); + if (n >= 0) { + break; + } + if (retries == 0) { + first_errno = errno; + } + VB2_DEBUG("TPM: write attempt %d failed: %s\n", + retries + 1, strerror(errno)); + } + if (n < 0) { + VB2_DEBUG("ERROR: write failure to TPM device: %s " + "(first error %d)\n", + strerror(errno), first_errno); + return try_exit(TPM_E_WRITE_FAILURE); + } else if (n != in_len) { + VB2_DEBUG("ERROR: bad write size to TPM device: " + "%d vs %u (%d retries, first error %d)\n", + n, in_len, retries, first_errno); + return try_exit(TPM_E_WRITE_FAILURE); + } + + /* Read response. Retry in case of communication errors. + */ + for (retries = 0, first_errno = 0; + retries < COMM_RETRY_MAX_NUM; ++retries) { + n = read(tpm_fd, response, sizeof(response)); + if (n >= 0) { + break; + } + if (retries == 0) { + first_errno = errno; + } + VB2_DEBUG("TPM: read attempt %d failed: %s\n", + retries + 1, strerror(errno)); + } + if (n == 0) { + VB2_DEBUG("ERROR: null read from TPM device\n"); + return try_exit(TPM_E_READ_EMPTY); + } else if (n < 0) { + VB2_DEBUG("ERROR: read failure from TPM device: %s " + "(first error %d)\n", + strerror(errno), first_errno); + return try_exit(TPM_E_READ_FAILURE); + } else { + if (n > *pout_len) { + VB2_DEBUG("ERROR: TPM response too long for " + "output buffer\n"); + return try_exit(TPM_E_RESPONSE_TOO_LARGE); + } else { + *pout_len = n; + memcpy(out, response, n); + } + } + } + return TPM_SUCCESS; +} + +/* Gets the tag field of a TPM command. + */ +__attribute__((unused)) +static inline int TpmTag(const uint8_t* buffer) +{ + uint16_t tag; + FromTpmUint16(buffer, &tag); + return (int) tag; +} + +/* Gets the size field of a TPM command. + */ +__attribute__((unused)) +static inline int TpmResponseSize(const uint8_t* buffer) +{ + uint32_t size; + FromTpmUint32(buffer + sizeof(uint16_t), &size); + return (int) size; +} + +vb2_error_t vb2ex_tpm_init(void) +{ + char *no_exit = getenv("TPM_NO_EXIT"); + if (no_exit) + exit_on_failure = !atoi(no_exit); + return vb2ex_tpm_open(); +} + +vb2_error_t vb2ex_tpm_close(void) +{ + if (tpm_fd != -1) { + close(tpm_fd); + tpm_fd = -1; + } + return VB2_SUCCESS; +} + +vb2_error_t vb2ex_tpm_open(void) +{ + const char *device_path; + struct timespec delay; + int retries, saved_errno; + + if (tpm_fd >= 0) + return VB2_SUCCESS; /* Already open */ + + device_path = getenv("TPM_DEVICE_PATH"); + if (device_path == NULL) { + device_path = TPM_DEVICE_PATH; + } + + /* Retry TPM opens on EBUSY failures. */ + for (retries = 0; retries < OPEN_RETRY_MAX_NUM; ++ retries) { + errno = 0; + tpm_fd = open(device_path, O_RDWR | O_CLOEXEC); + saved_errno = errno; + if (tpm_fd >= 0) + return VB2_SUCCESS; + if (saved_errno != EBUSY) + break; + + VB2_DEBUG("TPM: retrying %s: %s\n", + device_path, strerror(errno)); + + /* Stall until TPM comes back. */ + delay.tv_sec = 0; + delay.tv_nsec = OPEN_RETRY_DELAY_NS; + nanosleep(&delay, NULL); + } + VB2_DEBUG("ERROR: TPM: Cannot open TPM device %s: %s\n", + device_path, strerror(saved_errno)); + return try_exit(VB2_ERROR_UNKNOWN); +} + +uint32_t vb2ex_tpm_send_recv(const uint8_t* request, uint32_t request_length, + uint8_t* response, uint32_t* response_length) +{ + /* + * In a real firmware implementation, this function should contain + * the equivalent API call for the firmware TPM driver which takes a + * raw sequence of bytes as input command and a pointer to the + * output buffer for putting in the results. + * + * For EFI firmwares, this can make use of the EFI TPM driver as + * follows (based on page 16, of TCG EFI Protocol Specs Version 1.20 + * availaible from the TCG website): + * + * EFI_STATUS status; + * status = TcgProtocol->EFI_TCG_PASS_THROUGH_TO_TPM( + * TpmCommandSize(request), + * request, + * max_length, + * response); + * // Error checking depending on the value of the status above + */ +#ifndef NDEBUG + int tag, response_tag; +#endif + uint32_t result; + +#ifdef VBOOT_DEBUG + struct timeval before, after; + VB2_DEBUG("request (%d bytes):\n", request_length); + DbgPrintBytes(request, request_length); + gettimeofday(&before, NULL); +#endif + + result = TpmExecute(request, request_length, response, response_length); + if (result != TPM_SUCCESS) + return result; + +#ifdef VBOOT_DEBUG + gettimeofday(&after, NULL); + VB2_DEBUG("response (%d bytes):\n", *response_length); + DbgPrintBytes(response, *response_length); + VB2_DEBUG("execution time: %dms\n", + (int) ((after.tv_sec - before.tv_sec) * VB2_MSEC_PER_SEC + + (after.tv_usec - before.tv_usec) / VB2_USEC_PER_MSEC)); +#endif + +#ifndef NDEBUG + /* validity checks */ + tag = TpmTag(request); + response_tag = TpmTag(response); + assert( + (tag == TPM_TAG_RQU_COMMAND && + response_tag == TPM_TAG_RSP_COMMAND) || + (tag == TPM_TAG_RQU_AUTH1_COMMAND && + response_tag == TPM_TAG_RSP_AUTH1_COMMAND) || + (tag == TPM_TAG_RQU_AUTH2_COMMAND && + response_tag == TPM_TAG_RSP_AUTH2_COMMAND)); + assert(*response_length == TpmResponseSize(response)); +#endif + + return TPM_SUCCESS; +} + +vb2_error_t vb2ex_tpm_get_random(uint8_t *buf, uint32_t length) +{ + static int urandom_fd = -1; + if (urandom_fd < 0) { + urandom_fd = open("/dev/urandom", O_RDONLY); + if (urandom_fd == -1) { + return VB2_ERROR_UNKNOWN; + } + } + + if (length != read(urandom_fd, buf, length)) { + return VB2_ERROR_UNKNOWN; + } + + return VB2_SUCCESS; +} diff --git a/firmware/stub/vboot_api_stub.c b/firmware/stub/vboot_api_stub.c new file mode 100644 index 0000000..9335c8b --- /dev/null +++ b/firmware/stub/vboot_api_stub.c @@ -0,0 +1,25 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Stub implementations of firmware-provided API functions. + */ + +#include + +#include +#include +#include +#include +#include + +#include "2api.h" +#include "2common.h" +#include "vboot_api.h" +#include "vboot_test.h" + +__attribute__((weak)) +vb2_error_t vb2ex_run_altfw(uint32_t altfw_id) +{ + return VB2_SUCCESS; +} diff --git a/firmware/stub/vboot_api_stub_disk.c b/firmware/stub/vboot_api_stub_disk.c new file mode 100644 index 0000000..3244dc6 --- /dev/null +++ b/firmware/stub/vboot_api_stub_disk.c @@ -0,0 +1,50 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Stub implementations of disk APIs. + */ + +#include +#include +#include +#include +#include +#include + +#include "2common.h" +#include "vboot_api.h" + + +__attribute__((weak)) +vb2_error_t VbExDiskGetInfo(VbDiskInfo** infos_ptr, uint32_t* count, + uint32_t disk_flags) +{ + *infos_ptr = NULL; + *count = 0; + return VB2_SUCCESS; +} + + +__attribute__((weak)) +vb2_error_t VbExDiskFreeInfo(VbDiskInfo* infos_ptr, + VbExDiskHandle_t preserve_handle) +{ + return VB2_SUCCESS; +} + + +__attribute__((weak)) +vb2_error_t VbExDiskRead(VbExDiskHandle_t handle, uint64_t lba_start, + uint64_t lba_count, void* buffer) +{ + return VB2_SUCCESS; +} + + +__attribute__((weak)) +vb2_error_t VbExDiskWrite(VbExDiskHandle_t handle, uint64_t lba_start, + uint64_t lba_count, const void* buffer) +{ + return VB2_SUCCESS; +} diff --git a/firmware/stub/vboot_api_stub_stream.c b/firmware/stub/vboot_api_stub_stream.c new file mode 100644 index 0000000..68e7ec7 --- /dev/null +++ b/firmware/stub/vboot_api_stub_stream.c @@ -0,0 +1,89 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Stub implementations of stream APIs. + */ + +#include + +#include "2common.h" +#include "vboot_api.h" + +/* The stub implementation assumes 512-byte disk sectors */ +#define LBA_BYTES 512 + +/* Internal struct to simulate a stream for sector-based disks */ +struct disk_stream { + /* Disk handle */ + VbExDiskHandle_t handle; + + /* Next sector to read */ + uint64_t sector; + + /* Number of sectors left in partition */ + uint64_t sectors_left; +}; + +__attribute__((weak)) +vb2_error_t VbExStreamOpen(VbExDiskHandle_t handle, uint64_t lba_start, + uint64_t lba_count, VbExStream_t *stream) +{ + struct disk_stream *s; + + if (!handle) { + *stream = NULL; + return VB2_ERROR_UNKNOWN; + } + + s = malloc(sizeof(*s)); + s->handle = handle; + s->sector = lba_start; + s->sectors_left = lba_count; + + *stream = (void *)s; + + return VB2_SUCCESS; +} + +__attribute__((weak)) +vb2_error_t VbExStreamRead(VbExStream_t stream, uint32_t bytes, void *buffer) +{ + struct disk_stream *s = (struct disk_stream *)stream; + uint64_t sectors; + vb2_error_t rv; + + if (!s) + return VB2_ERROR_UNKNOWN; + + /* For now, require reads to be a multiple of the LBA size */ + if (bytes % LBA_BYTES) + return VB2_ERROR_UNKNOWN; + + /* Fail on overflow */ + sectors = bytes / LBA_BYTES; + if (sectors > s->sectors_left) + return VB2_ERROR_UNKNOWN; + + rv = VbExDiskRead(s->handle, s->sector, sectors, buffer); + if (rv != VB2_SUCCESS) + return rv; + + s->sector += sectors; + s->sectors_left -= sectors; + + return VB2_SUCCESS; +} + +__attribute__((weak)) +void VbExStreamClose(VbExStream_t stream) +{ + struct disk_stream *s = (struct disk_stream *)stream; + + /* Allow freeing a null pointer */ + if (!s) + return; + + free(s); + return; +} diff --git a/futility/cmd_create.c b/futility/cmd_create.c new file mode 100644 index 0000000..16a3733 --- /dev/null +++ b/futility/cmd_create.c @@ -0,0 +1,419 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include + +#include +#include +#include + +#include "2common.h" +#include "2id.h" +#include "2rsa.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "futility.h" +#include "futility_options.h" +#include "host_common21.h" +#include "host_key.h" +#include "host_key21.h" +#include "host_misc21.h" +#include "openssl_compat.h" +#include "util_misc.h" +#include "vboot_host.h" + +/* Command line options */ +enum { + OPT_OUTFILE = 1000, + OPT_VERSION, + OPT_DESC, + OPT_ID, + OPT_HASH_ALG, + OPT_HELP, +}; + +#define DEFAULT_VERSION 1 +#define DEFAULT_HASH VB2_HASH_SHA256; + +static char *infile, *outfile, *outext; +static uint32_t opt_version = DEFAULT_VERSION; +enum vb2_hash_algorithm opt_hash_alg = DEFAULT_HASH; +static char *opt_desc; +static struct vb2_id opt_id; +static int force_id; + +static const struct option long_opts[] = { + {"version", 1, 0, OPT_VERSION}, + {"desc", 1, 0, OPT_DESC}, + {"id", 1, 0, OPT_ID}, + {"hash_alg", 1, 0, OPT_HASH_ALG}, + {"help", 0, 0, OPT_HELP}, + {NULL, 0, 0, 0} +}; + +static void print_help(int argc, char *argv[]) +{ + enum vb2_hash_algorithm alg; + + printf("\n" +"Usage: " MYNAME " %s [options] []\n", argv[0]); + printf("\n" +"Create a keypair from an RSA key (.pem file).\n" +"\n" +"Options:\n" +"\n" +" --version Key version (default %d)\n" +" --hash_alg Hashing algorithm to use:\n", + DEFAULT_VERSION); + for (alg = 0; alg < VB2_HASH_ALG_COUNT; alg++) { + const char *name = vb2_get_hash_algorithm_name(alg); + if (strcmp(name, VB2_INVALID_ALG_NAME) != 0) + printf(" %d / %s%s\n", + alg, name, + alg == VB2_HASH_SHA256 ? " (default)" : ""); + } + printf( +" --id Identifier for this keypair (vb21 only)\n" +" --desc Human-readable description (vb21 only)\n" +"\n"); + +} + +static int vb1_make_keypair(void) +{ + struct vb2_private_key *privkey = NULL; + struct vb2_packed_key *pubkey = NULL; + struct rsa_st *rsa_key = NULL; + uint8_t *keyb_data = 0; + uint32_t keyb_size; + int ret = 1; + + FILE *fp = fopen(infile, "rb"); + if (!fp) { + fprintf(stderr, "Unable to open %s\n", infile); + goto done; + } + + /* TODO: this is very similar to vb2_read_private_key_pem() */ + + rsa_key = PEM_read_RSAPrivateKey(fp, NULL, NULL, NULL); + fclose(fp); + if (!rsa_key) { + fprintf(stderr, "Unable to read RSA key from %s\n", infile); + goto done; + } + + enum vb2_signature_algorithm sig_alg = vb2_rsa_sig_alg(rsa_key); + if (sig_alg == VB2_SIG_INVALID) { + fprintf(stderr, "Unsupported sig algorithm in RSA key\n"); + goto done; + } + + /* Combine the sig_alg with the hash_alg to get the vb1 algorithm */ + uint64_t vb1_algorithm = + vb2_get_crypto_algorithm(opt_hash_alg, sig_alg); + + /* Create the private key */ + privkey = (struct vb2_private_key *)calloc(sizeof(*privkey), 1); + if (!privkey) + goto done; + + privkey->rsa_private_key = rsa_key; + privkey->sig_alg = sig_alg; + privkey->hash_alg = opt_hash_alg; + + /* Write it out */ + strcpy(outext, ".vbprivk"); + if (0 != vb2_write_private_key(outfile, privkey)) { + fprintf(stderr, "unable to write private key\n"); + goto done; + } + printf("wrote %s\n", outfile); + + /* Create the public key */ + ret = vb_keyb_from_rsa(rsa_key, &keyb_data, &keyb_size); + if (ret) { + fprintf(stderr, "couldn't extract the public key\n"); + goto done; + } + + pubkey = vb2_alloc_packed_key(keyb_size, vb1_algorithm, opt_version); + if (!pubkey) + goto done; + memcpy((uint8_t *)vb2_packed_key_data(pubkey), keyb_data, keyb_size); + + /* Write it out */ + strcpy(outext, ".vbpubk"); + if (VB2_SUCCESS != vb2_write_packed_key(outfile, pubkey)) { + fprintf(stderr, "unable to write public key\n"); + goto done; + } + printf("wrote %s\n", outfile); + + ret = 0; + +done: + free(privkey); + free(pubkey); + free(keyb_data); + RSA_free(rsa_key); + return ret; +} + +static int vb2_make_keypair(void) +{ + struct vb2_private_key *privkey = 0; + struct vb2_public_key *pubkey = 0; + RSA *rsa_key = 0; + uint8_t *keyb_data = 0; + uint32_t keyb_size; + enum vb2_signature_algorithm sig_alg; + uint8_t *pubkey_buf = 0; + int has_priv = 0; + const BIGNUM *rsa_d; + + FILE *fp; + int ret = 1; + + fp = fopen(infile, "rb"); + if (!fp) { + fprintf(stderr, "Unable to open %s\n", infile); + goto done; + } + + rsa_key = PEM_read_RSAPrivateKey(fp, NULL, NULL, NULL); + + if (!rsa_key) { + /* Check if the PEM contains only a public key */ + if (0 != fseek(fp, 0, SEEK_SET)) { + fprintf(stderr, "Error seeking in %s\n", infile); + goto done; + } + rsa_key = PEM_read_RSA_PUBKEY(fp, NULL, NULL, NULL); + } + fclose(fp); + if (!rsa_key) { + fprintf(stderr, "Unable to read RSA key from %s\n", infile); + goto done; + } + /* Public keys doesn't have the private exponent */ + RSA_get0_key(rsa_key, NULL, NULL, &rsa_d); + has_priv = !!rsa_d; + if (!has_priv) + fprintf(stderr, "%s has a public key only.\n", infile); + + sig_alg = vb2_rsa_sig_alg(rsa_key); + if (sig_alg == VB2_SIG_INVALID) { + fprintf(stderr, "Unsupported sig algorithm in RSA key\n"); + goto done; + } + + if (has_priv) { + /* Create the private key */ + privkey = calloc(1, sizeof(*privkey)); + if (!privkey) { + fprintf(stderr, "Unable to allocate the private key\n"); + goto done; + } + + privkey->rsa_private_key = rsa_key; + privkey->sig_alg = sig_alg; + privkey->hash_alg = opt_hash_alg; + if (opt_desc && vb2_private_key_set_desc(privkey, opt_desc)) { + fprintf(stderr, + "Unable to set the private key description\n"); + goto done; + } + } + + /* Create the public key */ + if (vb2_public_key_alloc(&pubkey, sig_alg)) { + fprintf(stderr, "Unable to allocate the public key\n"); + goto done; + } + + /* Extract the keyb blob */ + if (vb_keyb_from_rsa(rsa_key, &keyb_data, &keyb_size)) { + fprintf(stderr, "Couldn't extract the public key\n"); + goto done; + } + + /* + * Copy the keyb blob to the public key's buffer, because that's where + * vb2_unpack_key_data() and vb2_public_key_pack() expect to find it. + */ + pubkey_buf = vb2_public_key_packed_data(pubkey); + memcpy(pubkey_buf, keyb_data, keyb_size); + + /* Fill in the internal struct pointers */ + if (vb2_unpack_key_data(pubkey, pubkey_buf, keyb_size)) { + fprintf(stderr, "Unable to unpack the public key blob\n"); + goto done; + } + + pubkey->hash_alg = opt_hash_alg; + pubkey->version = opt_version; + if (opt_desc && vb2_public_key_set_desc(pubkey, opt_desc)) { + fprintf(stderr, "Unable to set pubkey description\n"); + goto done; + } + + /* Update the IDs */ + if (!force_id) { + vb2_digest_buffer(keyb_data, keyb_size, VB2_HASH_SHA1, + opt_id.raw, sizeof(opt_id.raw)); + } + + memcpy((struct vb2_id *)pubkey->id, &opt_id, sizeof(opt_id)); + + /* Write them out */ + if (has_priv) { + privkey->id = opt_id; + strcpy(outext, ".vbprik2"); + if (vb21_private_key_write(privkey, outfile)) { + fprintf(stderr, "unable to write private key\n"); + goto done; + } + printf("wrote %s\n", outfile); + } + + strcpy(outext, ".vbpubk2"); + if (vb21_public_key_write(pubkey, outfile)) { + fprintf(stderr, "unable to write public key\n"); + goto done; + } + printf("wrote %s\n", outfile); + + ret = 0; + +done: + RSA_free(rsa_key); + if (privkey) /* prevent double-free */ + privkey->rsa_private_key = 0; + vb2_private_key_free(privkey); + vb2_public_key_free(pubkey); + free(keyb_data); + return ret; +} + +static int do_create(int argc, char *argv[]) +{ + int errorcnt = 0; + char *e, *s; + int i, r, len, remove_ext = 0; + + while ((i = getopt_long(argc, argv, "", long_opts, NULL)) != -1) { + switch (i) { + + case OPT_VERSION: + opt_version = strtoul(optarg, &e, 0); + if (!*optarg || (e && *e)) { + fprintf(stderr, + "invalid version \"%s\"\n", optarg); + errorcnt = 1; + } + break; + + case OPT_DESC: + opt_desc = optarg; + break; + + case OPT_ID: + if (VB2_SUCCESS != vb2_str_to_id(optarg, &opt_id)) { + fprintf(stderr, "invalid id \"%s\"\n", + optarg); + errorcnt = 1; + } + force_id = 1; + break; + + case OPT_HASH_ALG: + if (!vb2_lookup_hash_alg(optarg, &opt_hash_alg)) { + fprintf(stderr, + "invalid hash_alg \"%s\"\n", optarg); + errorcnt++; + } + break; + + case OPT_HELP: + print_help(argc, argv); + return !!errorcnt; + + case '?': + if (optopt) + fprintf(stderr, "Unrecognized option: -%c\n", + optopt); + else + fprintf(stderr, "Unrecognized option\n"); + errorcnt++; + break; + case ':': + fprintf(stderr, "Missing argument to -%c\n", optopt); + errorcnt++; + break; + case 0: /* handled option */ + break; + default: + FATAL("Unrecognized getopt output: %d\n", i); + } + } + + /* If we don't have an input file already, we need one */ + if (!infile) { + if (argc - optind <= 0) { + fprintf(stderr, "ERROR: missing input filename\n"); + errorcnt++; + } else { + infile = argv[optind++]; + } + } + + if (errorcnt) { + print_help(argc, argv); + return 1; + } + + /* Decide how to determine the output filenames. */ + if (argc > optind) { + s = argv[optind++]; /* just use this */ + } else { + s = infile; /* based on pem file name */ + remove_ext = 1; + } + + /* Make an extra-large copy to leave room for filename extensions */ + len = strlen(s) + 20; + outfile = (char *)malloc(len); + if (!outfile) { + fprintf(stderr, "ERROR: malloc() failed\n"); + return 1; + } + strcpy(outfile, s); + + if (remove_ext) { + /* Find the last '/' if any, then the last '.' before that. */ + s = strrchr(outfile, '/'); + if (!s) + s = outfile; + s = strrchr(s, '.'); + /* Cut off the extension */ + if (s) + *s = '\0'; + } + /* Remember that spot for later */ + outext = outfile + strlen(outfile); + + /* Okay, do it */ + if (vboot_version == VBOOT_VERSION_1_0) + r = vb1_make_keypair(); + else + r = vb2_make_keypair(); + + free(outfile); + return r; +} + +DECLARE_FUTIL_COMMAND(create, do_create, VBOOT_VERSION_ALL, + "Create a keypair from an RSA .pem file"); diff --git a/futility/cmd_dump_fmap.c b/futility/cmd_dump_fmap.c new file mode 100644 index 0000000..3a0e14e --- /dev/null +++ b/futility/cmd_dump_fmap.c @@ -0,0 +1,529 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "fmap.h" +#include "futility.h" + +enum { FMT_NORMAL, FMT_PRETTY, FMT_FLASHROM, FMT_HUMAN }; + +/* global variables */ +static int opt_extract; +static int opt_format = FMT_NORMAL; +static int opt_overlap; +static void *base_of_rom; +static size_t size_of_rom; +static int opt_gaps; + +/* Return 0 if successful */ +static int normal_fmap(const FmapHeader *fmh, int argc, char *argv[]) +{ + int i, retval = 0; + char buf[80]; /* DWR: magic number */ + const FmapAreaHeader *ah; + ah = (const FmapAreaHeader *) (fmh + 1); + /* Size must greater than 0, else behavior is undefined. */ + char *extract_names[argc >= 1 ? argc : 1]; + char *outname = 0; + + memset(extract_names, 0, sizeof(extract_names)); + + if (opt_extract) { + /* prepare the filenames to write areas to */ + for (i = 0; i < argc; i++) { + char *a = argv[i]; + char *f = strchr(a, ':'); + if (!f) + continue; + if (a == f || *(f+1) == '\0') { + fprintf(stderr, + "argument \"%s\" is bogus\n", a); + retval = 1; + continue; + } + *f++ = '\0'; + extract_names[i] = f; + } + if (retval) + return retval; + } + + if (FMT_NORMAL == opt_format) { + snprintf(buf, FMAP_SIGNATURE_SIZE + 1, "%s", + fmh->fmap_signature); + printf("fmap_signature %s\n", buf); + printf("fmap_version: %d.%d\n", + fmh->fmap_ver_major, fmh->fmap_ver_minor); + printf("fmap_base: 0x%" PRIx64 "\n", fmh->fmap_base); + printf("fmap_size: 0x%08x (%d)\n", fmh->fmap_size, + fmh->fmap_size); + snprintf(buf, FMAP_NAMELEN + 1, "%s", fmh->fmap_name); + printf("fmap_name: %s\n", buf); + printf("fmap_nareas: %d\n", fmh->fmap_nareas); + } + + for (i = 0; i < fmh->fmap_nareas; i++, ah++) { + snprintf(buf, FMAP_NAMELEN + 1, "%s", ah->area_name); + + if (argc) { + int j, found = 0; + outname = NULL; + for (j = 0; j < argc; j++) + if (!strcmp(argv[j], buf)) { + found = 1; + outname = extract_names[j]; + break; + } + if (!found) + continue; + } + + switch (opt_format) { + case FMT_PRETTY: + printf("%s %d %d\n", buf, ah->area_offset, + ah->area_size); + break; + case FMT_FLASHROM: + if (ah->area_size) + printf("0x%08x:0x%08x %s\n", ah->area_offset, + ah->area_offset + ah->area_size - 1, + buf); + break; + default: + printf("area: %d\n", i + 1); + printf("area_offset: 0x%08x\n", ah->area_offset); + printf("area_size: 0x%08x (%d)\n", ah->area_size, + ah->area_size); + printf("area_name: %s\n", buf); + } + + if (opt_extract) { + char *s; + if (!outname) { + for (s = buf; *s; s++) + if (*s == ' ') + *s = '_'; + outname = buf; + } + FILE *fp = fopen(outname, "wb"); + if (!fp) { + fprintf(stderr, "%s: can't open %s: %s\n", + argv[0], outname, strerror(errno)); + retval = 1; + } else if (!ah->area_size) { + fprintf(stderr, + "%s: section %s has zero size\n", + argv[0], buf); + } else if (ah->area_offset + ah->area_size > + size_of_rom) { + fprintf(stderr, "%s: section %s is larger" + " than the image\n", argv[0], buf); + retval = 1; + } else if (1 != fwrite(base_of_rom + ah->area_offset, + ah->area_size, 1, fp)) { + fprintf(stderr, "%s: can't write %s: %s\n", + argv[0], buf, strerror(errno)); + retval = 1; + } else { + if (FMT_NORMAL == opt_format) + printf("saved as \"%s\"\n", outname); + } + if (fp) + fclose(fp); + } + } + + return retval; +} + +/****************************************************************************/ +/* Stuff for human-readable form */ + +struct dup_s { + char *name; + struct dup_s *next; +}; + +struct node_s { + char *name; + uint32_t start; + uint32_t size; + uint32_t end; + struct node_s *parent; + int num_children; + struct node_s **child; + struct dup_s *alias; +}; + +static struct node_s *all_nodes; + +static void sort_nodes(int num, struct node_s *ary[]) +{ + int i, j; + struct node_s *tmp; + + /* bubble-sort is quick enough with only a few entries */ + for (i = 0; i < num; i++) { + for (j = i + 1; j < num; j++) { + if (ary[j]->start > ary[i]->start) { + tmp = ary[i]; + ary[i] = ary[j]; + ary[j] = tmp; + } + } + } +} + +static void line(int indent, const char *name, uint32_t start, uint32_t end, + uint32_t size, const char *append) +{ + int i; + for (i = 0; i < indent; i++) + printf(" "); + printf("%-25s %08x %08x %08x%s\n", name, start, end, size, + append ? append : ""); +} + +static int gapcount; +static void empty(int indent, uint32_t start, uint32_t end, char *name) +{ + char buf[80]; + if (opt_gaps) { + sprintf(buf, " // gap in %s", name); + line(indent + 1, "", start, end, end - start, buf); + } + gapcount++; +} + +static void show(struct node_s *p, int indent, int show_first) +{ + int i; + struct dup_s *alias; + if (show_first) { + line(indent, p->name, p->start, p->end, p->size, 0); + for (alias = p->alias; alias; alias = alias->next) + line(indent, alias->name, p->start, p->end, p->size, + " // DUPLICATE"); + } + sort_nodes(p->num_children, p->child); + for (i = 0; i < p->num_children; i++) { + if (i == 0 && p->end != p->child[i]->end) + empty(indent, p->child[i]->end, p->end, p->name); + show(p->child[i], indent + show_first, 1); + if (i < p->num_children - 1 + && p->child[i]->start != p->child[i + 1]->end) + empty(indent, p->child[i + 1]->end, p->child[i]->start, + p->name); + if (i == p->num_children - 1 && p->child[i]->start != p->start) + empty(indent, p->start, p->child[i]->start, p->name); + } +} + +static int overlaps(int i, int j) +{ + struct node_s *a = all_nodes + i; + struct node_s *b = all_nodes + j; + + return ((a->start < b->start) && (b->start < a->end) && + (b->start < a->end) && (a->end < b->end)); +} + +static int encloses(int i, int j) +{ + struct node_s *a = all_nodes + i; + struct node_s *b = all_nodes + j; + + return ((a->start <= b->start) && (a->end >= b->end)); +} + +static int duplicates(int i, int j) +{ + struct node_s *a = all_nodes + i; + struct node_s *b = all_nodes + j; + + return ((a->start == b->start) && (a->end == b->end)); +} + +static void add_dupe(int i, int j, int numnodes) +{ + int k; + struct dup_s *alias; + + alias = (struct dup_s *) malloc(sizeof(struct dup_s)); + alias->name = all_nodes[j].name; + alias->next = all_nodes[i].alias; + all_nodes[i].alias = alias; + for (k = j; k < numnodes; k++) + all_nodes[k] = all_nodes[k + 1]; +} + +static void add_child(struct node_s *p, int n) +{ + int i; + if (p->num_children && !p->child) { + p->child = + (struct node_s **)calloc(p->num_children, + sizeof(struct node_s *)); + if (!p->child) { + perror("calloc failed"); + exit(1); + } + } + for (i = 0; i < p->num_children; i++) + if (!p->child[i]) { + p->child[i] = all_nodes + n; + return; + } +} + +static int human_fmap(const FmapHeader *fmh) +{ + FmapAreaHeader *ah; + int i, j, errorcnt = 0; + int numnodes; + + ah = (FmapAreaHeader *) (fmh + 1); + + /* The challenge here is to generate a directed graph from the + * arbitrarily-ordered FMAP entries, and then to prune it until it's as + * simple (and deep) as possible. Overlapping regions are not allowed. + * Duplicate regions are okay, but may require special handling. */ + + /* Convert the FMAP info into our format. */ + numnodes = fmh->fmap_nareas; + + /* plus one for the all-enclosing "root" */ + all_nodes = (struct node_s *) calloc(numnodes + 1, + sizeof(struct node_s)); + if (!all_nodes) { + perror("calloc failed"); + exit(1); + } + for (i = 0; i < numnodes; i++) { + char buf[FMAP_NAMELEN + 1]; + strncpy(buf, ah[i].area_name, FMAP_NAMELEN); + buf[FMAP_NAMELEN] = '\0'; + all_nodes[i].name = strdup(buf); + if (!all_nodes[i].name) { + perror("strdup failed"); + exit(1); + } + all_nodes[i].start = ah[i].area_offset; + all_nodes[i].size = ah[i].area_size; + all_nodes[i].end = ah[i].area_offset + ah[i].area_size; + } + /* Now add the root node */ + all_nodes[numnodes].name = strdup("-entire flash-"); + all_nodes[numnodes].start = fmh->fmap_base; + all_nodes[numnodes].size = fmh->fmap_size; + all_nodes[numnodes].end = fmh->fmap_base + fmh->fmap_size; + + /* First, coalesce any duplicates */ + for (i = 0; i < numnodes; i++) { + for (j = i + 1; j < numnodes; j++) { + if (duplicates(i, j)) { + add_dupe(i, j, numnodes); + numnodes--; + } + } + } + + /* Each node should have at most one parent, which is the smallest + * enclosing node. Duplicate nodes "enclose" each other, but if there's + * already a relationship in one direction, we won't create another. + */ + for (i = 0; i < numnodes; i++) { + /* Find the smallest parent, which might be the root node. */ + int k = numnodes; + for (j = 0; j < numnodes; j++) { /* full O(N^2) comparison */ + if (i == j) + continue; + if (overlaps(i, j)) { + printf("ERROR: %s and %s overlap\n", + all_nodes[i].name, all_nodes[j].name); + printf(" %s: %#x - %#x\n", all_nodes[i].name, + all_nodes[i].start, all_nodes[i].end); + printf(" %s: %#x - %#x\n", all_nodes[j].name, + all_nodes[j].start, all_nodes[j].end); + if (opt_overlap < 2) { + printf("Use more -h args to ignore" + " this error\n"); + errorcnt++; + } + continue; + } + if (encloses(j, i) + && all_nodes[j].size < all_nodes[k].size) + k = j; + } + all_nodes[i].parent = all_nodes + k; + } + if (errorcnt) + return 1; + + /* Force those deadbeat parents to recognize their children */ + for (i = 0; i < numnodes; i++) /* how many */ + if (all_nodes[i].parent) + all_nodes[i].parent->num_children++; + for (i = 0; i < numnodes; i++) /* here they are */ + if (all_nodes[i].parent) + add_child(all_nodes[i].parent, i); + + /* Ready to go */ + printf("# name start end size\n"); + show(all_nodes + numnodes, 0, opt_gaps); + + if (gapcount && !opt_gaps) + printf("\nWARNING: unused regions found. Use -H to see them\n"); + + return 0; +} + +/* End of human-reable stuff */ +/****************************************************************************/ + +static const char usage[] = + "\nUsage: " MYNAME " %s [OPTIONS] FLASHIMAGE [NAME...]\n\n" + "Display (and extract) the FMAP components from a BIOS image.\n" + "\n" + "Options:\n" + " -x Extract the named sections from the file\n" + " -h Use a human-readable format\n" + " -H With -h, display any gaps\n" + " -p Use a format easy to parse by scripts\n" + " -F Use the format expected by flashrom\n" + "\n" + "Specify one or more NAMEs to dump only those sections.\n" + "\n"; + +static void print_help(int argc, char *argv[]) +{ + printf(usage, argv[0]); +} + +enum { + OPT_HELP = 1000, +}; +static const struct option long_opts[] = { + {"help", 0, 0, OPT_HELP}, + {NULL, 0, 0, 0} +}; +static int do_dump_fmap(int argc, char *argv[]) +{ + int c; + int errorcnt = 0; + struct stat sb; + int fd; + const FmapHeader *fmap; + int retval = 1; + + opterr = 0; /* quiet, you */ + while ((c = getopt_long(argc, argv, ":xpFhH", long_opts, 0)) != -1) { + switch (c) { + case 'x': + opt_extract = 1; + break; + case 'p': + opt_format = FMT_PRETTY; + break; + case 'F': + opt_format = FMT_FLASHROM; + break; + case 'H': + opt_gaps = 1; + VBOOT_FALLTHROUGH; + case 'h': + opt_format = FMT_HUMAN; + opt_overlap++; + break; + case OPT_HELP: + print_help(argc, argv); + return 0; + case '?': + fprintf(stderr, "%s: unrecognized switch: -%c\n", + argv[0], optopt); + errorcnt++; + break; + case ':': + fprintf(stderr, "%s: missing argument to -%c\n", + argv[0], optopt); + errorcnt++; + break; + default: + errorcnt++; + break; + } + } + + if (errorcnt || optind >= argc) { + print_help(argc, argv); + return 1; + } + + fd = open(argv[optind], O_RDONLY); + if (fd < 0) { + fprintf(stderr, "%s: can't open %s: %s\n", + argv[0], argv[optind], strerror(errno)); + return 1; + } + + if (0 != fstat(fd, &sb)) { + fprintf(stderr, "%s: can't stat %s: %s\n", + argv[0], argv[optind], strerror(errno)); + close(fd); + return 1; + } + + base_of_rom = + mmap(0, sb.st_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); + if (base_of_rom == (char *)-1) { + fprintf(stderr, "%s: can't mmap %s: %s\n", + argv[0], argv[optind], strerror(errno)); + close(fd); + return 1; + } + close(fd); /* done with this now */ + size_of_rom = sb.st_size; + + fmap = fmap_find(base_of_rom, size_of_rom); + if (fmap) { + switch (opt_format) { + case FMT_HUMAN: + retval = human_fmap(fmap); + break; + case FMT_NORMAL: + printf("hit at 0x%08x\n", + (uint32_t) ((char *)fmap - (char *)base_of_rom)); + VBOOT_FALLTHROUGH; + default: + retval = normal_fmap(fmap, + argc - optind - 1, + argv + optind + 1); + } + } + + if (0 != munmap(base_of_rom, sb.st_size)) { + fprintf(stderr, "%s: can't munmap %s: %s\n", + argv[0], argv[optind], strerror(errno)); + return 1; + } + + return retval; +} + +DECLARE_FUTIL_COMMAND(dump_fmap, do_dump_fmap, VBOOT_VERSION_ALL, + "Display FMAP contents from a firmware image"); diff --git a/futility/cmd_dump_kernel_config.c b/futility/cmd_dump_kernel_config.c new file mode 100644 index 0000000..a46a19d --- /dev/null +++ b/futility/cmd_dump_kernel_config.c @@ -0,0 +1,98 @@ +/* Copyright 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Exports the kernel commandline from a given partition/image. + */ + +#include +#include +#include +#include + +#include "futility.h" +#include "vboot_host.h" + +enum { + OPT_KLOADADDR = 1000, + OPT_HELP, +}; + +static const struct option long_opts[] = { + {"kloadaddr", 1, NULL, OPT_KLOADADDR}, + {"help", 0, 0, OPT_HELP}, + {NULL, 0, NULL, 0} +}; + +/* Print help and return error */ +static void print_help(int argc, char *argv[]) +{ + printf("\nUsage: " MYNAME " %s [--kloadaddr ADDRESS] " + "KERNEL_PARTITION\n\n", argv[0]); +} + +static int do_dump_kern_cfg(int argc, char *argv[]) +{ + char *infile = NULL; + char *config = NULL; + uint64_t kernel_body_load_address = USE_PREAMBLE_LOAD_ADDR; + int parse_error = 0; + char *e; + int i; + + while (((i = getopt_long(argc, argv, ":", long_opts, NULL)) != -1) && + !parse_error) { + switch (i) { + default: + case '?': + /* Unhandled option */ + parse_error = 1; + break; + + case 0: + /* silently handled option */ + break; + + case OPT_KLOADADDR: + kernel_body_load_address = strtoul(optarg, &e, 0); + if (!*optarg || (e && *e)) { + fprintf(stderr, "Invalid --kloadaddr\n"); + parse_error = 1; + } + break; + + case OPT_HELP: + print_help(argc, argv); + return 0; + } + } + + if (optind >= argc) { + fprintf(stderr, "Expected argument after options\n"); + parse_error = 1; + } else + infile = argv[optind]; + + if (parse_error) { + print_help(argc, argv); + return 1; + } + + if (!infile || !*infile) { + fprintf(stderr, "Must specify filename\n"); + return 1; + } + + config = FindKernelConfig(infile, kernel_body_load_address); + if (!config) + return 1; + + printf("%s", config); + + free(config); + return 0; +} + +DECLARE_FUTIL_COMMAND(dump_kernel_config, do_dump_kern_cfg, VBOOT_VERSION_ALL, + "Prints the kernel command line"); + diff --git a/futility/cmd_gbb_utility.c b/futility/cmd_gbb_utility.c new file mode 100644 index 0000000..8f21eee --- /dev/null +++ b/futility/cmd_gbb_utility.c @@ -0,0 +1,651 @@ +/* Copyright 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "futility.h" + +static void print_help(int argc, char *argv[]) +{ + printf("\n" + "Usage: " MYNAME " %s [-g|-s|-c] [OPTIONS] " + "bios_file [output_file]\n" + "\n" + "GET MODE:\n" + "-g, --get (default)\tGet (read) from bios_file, " + "with following options:\n" + " --hwid \tReport hardware id (default).\n" + " --flags \tReport header flags.\n" + " --digest \tReport digest of hwid (>= v1.2)\n" + " -k, --rootkey=FILE \tFile name to export Root Key.\n" + " -b, --bmpfv=FILE \tFile name to export Bitmap FV.\n" + " -r --recoverykey=FILE\tFile name to export Recovery Key.\n" + "\n" + "SET MODE:\n" + "-s, --set \tSet (write) to bios_file, " + "with following options:\n" + " -o, --output=FILE \tNew file name for ouptput.\n" + " --hwid=HWID \tThe new hardware id to be changed.\n" + " --flags=FLAGS \tThe new (numeric) flags value.\n" + " -k, --rootkey=FILE \tFile name of new Root Key.\n" + " -b, --bmpfv=FILE \tFile name of new Bitmap FV.\n" + " -r --recoverykey=FILE\tFile name of new Recovery Key.\n" + "\n" + "CREATE MODE:\n" + "-c, --create=hwid_size,rootkey_size,bmpfv_size," + "recoverykey_size\n" + " \tCreate a GBB blob by given size list.\n" + "SAMPLE:\n" + " %s -g bios.bin\n" + " %s --set --hwid='New Model' -k key.bin" + " bios.bin newbios.bin\n" + " %s -c 0x100,0x1000,0x03DE80,0x1000 gbb.blob\n\n", + argv[0], argv[0], argv[0], argv[0]); +} + +enum { + OPT_HWID = 1000, + OPT_FLAGS, + OPT_DIGEST, + OPT_HELP, +}; + +/* Command line options */ +static struct option long_opts[] = { + /* name has_arg *flag val */ + {"get", 0, NULL, 'g'}, + {"set", 0, NULL, 's'}, + {"create", 1, NULL, 'c'}, + {"output", 1, NULL, 'o'}, + {"rootkey", 1, NULL, 'k'}, + {"bmpfv", 1, NULL, 'b'}, + {"recoverykey", 1, NULL, 'r'}, + {"hwid", 0, NULL, OPT_HWID}, + {"flags", 0, NULL, OPT_FLAGS}, + {"digest", 0, NULL, OPT_DIGEST}, + {"help", 0, NULL, OPT_HELP}, + {NULL, 0, NULL, 0}, +}; + +static const char *short_opts = ":gsc:o:k:b:r:"; + +/* Change the has_arg field of a long_opts entry */ +static void opt_has_arg(const char *name, int val) +{ + struct option *p; + for (p = long_opts; p->name; p++) + if (!strcmp(name, p->name)) { + p->has_arg = val; + break; + } +} + +static int errorcnt; + +#define GBB_SEARCH_STRIDE 4 +static struct vb2_gbb_header *FindGbbHeader(uint8_t *ptr, size_t size) +{ + size_t i; + struct vb2_gbb_header *tmp, *gbb_header = NULL; + int count = 0; + + for (i = 0; i <= size - GBB_SEARCH_STRIDE; i += GBB_SEARCH_STRIDE) { + if (0 != memcmp(ptr + i, VB2_GBB_SIGNATURE, + VB2_GBB_SIGNATURE_SIZE)) + continue; + + /* Found something. See if it's any good. */ + tmp = (struct vb2_gbb_header *) (ptr + i); + if (futil_valid_gbb_header(tmp, size - i, NULL)) + if (!count++) + gbb_header = tmp; + } + + switch (count) { + case 0: + errorcnt++; + return NULL; + case 1: + return gbb_header; + default: + fprintf(stderr, "ERROR: multiple GBB headers found\n"); + errorcnt++; + return NULL; + } +} + +static uint8_t *create_gbb(const char *desc, off_t *sizeptr) +{ + char *str, *sizes, *param, *e = NULL; + size_t size = EXPECTED_VB2_GBB_HEADER_SIZE; + int i = 0; + /* Danger Will Robinson! four entries ==> four paramater blocks */ + uint32_t val[] = { 0, 0, 0, 0 }; + uint8_t *buf; + struct vb2_gbb_header *gbb; + + sizes = strdup(desc); + if (!sizes) { + errorcnt++; + fprintf(stderr, "ERROR: strdup() failed: %s\n", + strerror(errno)); + return NULL; + } + + for (str = sizes; (param = strtok(str, ", ")) != NULL; str = NULL) { + val[i] = (uint32_t) strtoul(param, &e, 0); + if (e && *e) { + errorcnt++; + fprintf(stderr, + "ERROR: invalid creation parameter: \"%s\"\n", + param); + free(sizes); + return NULL; + } + size += val[i++]; + if (i > ARRAY_SIZE(val)) + break; + } + + buf = (uint8_t *) calloc(1, size); + if (!buf) { + errorcnt++; + fprintf(stderr, "ERROR: can't malloc %zu bytes: %s\n", + size, strerror(errno)); + free(sizes); + return NULL; + } else if (sizeptr) { + *sizeptr = size; + } + + gbb = (struct vb2_gbb_header *) buf; + memcpy(gbb->signature, VB2_GBB_SIGNATURE, VB2_GBB_SIGNATURE_SIZE); + gbb->major_version = VB2_GBB_MAJOR_VER; + gbb->minor_version = VB2_GBB_MINOR_VER; + gbb->header_size = EXPECTED_VB2_GBB_HEADER_SIZE; + gbb->flags = 0; + + i = EXPECTED_VB2_GBB_HEADER_SIZE; + gbb->hwid_offset = i; + gbb->hwid_size = val[0]; + i += val[0]; + + gbb->rootkey_offset = i; + gbb->rootkey_size = val[1]; + i += val[1]; + + gbb->bmpfv_offset = i; + gbb->bmpfv_size = val[2]; + i += val[2]; + + gbb->recovery_key_offset = i; + gbb->recovery_key_size = val[3]; + i += val[1]; + + free(sizes); + return buf; +} + +static uint8_t *read_entire_file(const char *filename, off_t *sizeptr) +{ + FILE *fp = NULL; + uint8_t *buf = NULL; + struct stat sb; + + fp = fopen(filename, "rb"); + if (!fp) { + fprintf(stderr, "ERROR: Unable to open %s for reading: %s\n", + filename, strerror(errno)); + goto fail; + } + + if (0 != fstat(fileno(fp), &sb)) { + fprintf(stderr, "ERROR: can't fstat %s: %s\n", + filename, strerror(errno)); + goto fail; + } + if (sizeptr) + *sizeptr = sb.st_size; + + buf = (uint8_t *) malloc(sb.st_size); + if (!buf) { + fprintf(stderr, "ERROR: can't malloc %" PRIi64 " bytes: %s\n", + sb.st_size, strerror(errno)); + goto fail; + } + + if (1 != fread(buf, sb.st_size, 1, fp)) { + fprintf(stderr, "ERROR: Unable to read from %s: %s\n", + filename, strerror(errno)); + goto fail; + } + + if (0 != fclose(fp)) { + fprintf(stderr, "ERROR: Unable to close %s: %s\n", + filename, strerror(errno)); + fp = NULL; /* Don't try to close it again */ + goto fail; + } + + return buf; + +fail: + errorcnt++; + + if (buf) + free(buf); + + if (fp && 0 != fclose(fp)) + fprintf(stderr, "ERROR: Unable to close %s: %s\n", + filename, strerror(errno)); + return NULL; +} + +static int write_to_file(const char *msg, const char *filename, + uint8_t *start, size_t size) +{ + FILE *fp; + int r = 0; + + fp = fopen(filename, "wb"); + if (!fp) { + fprintf(stderr, "ERROR: Unable to open %s for writing: %s\n", + filename, strerror(errno)); + errorcnt++; + return errno; + } + + /* Don't write zero bytes */ + if (size && 1 != fwrite(start, size, 1, fp)) { + fprintf(stderr, "ERROR: Unable to write to %s: %s\n", + filename, strerror(errno)); + errorcnt++; + r = errno; + } + + if (0 != fclose(fp)) { + fprintf(stderr, "ERROR: Unable to close %s: %s\n", + filename, strerror(errno)); + errorcnt++; + if (!r) + r = errno; + } + + if (!r && msg) + printf("%s %s\n", msg, filename); + + return r; +} + +static int read_from_file(const char *msg, const char *filename, + uint8_t *start, uint32_t size) +{ + FILE *fp; + struct stat sb; + size_t count; + int r = 0; + + fp = fopen(filename, "rb"); + if (!fp) { + fprintf(stderr, "ERROR: Unable to open %s for reading: %s\n", + filename, strerror(errno)); + errorcnt++; + return errno; + } + + if (0 != fstat(fileno(fp), &sb)) { + fprintf(stderr, "ERROR: can't fstat %s: %s\n", + filename, strerror(errno)); + errorcnt++; + r = errno; + goto done_close; + } + + if (sb.st_size > size) { + fprintf(stderr, + "ERROR: file %s exceeds capacity (%" PRIu32 ")\n", + filename, size); + errorcnt++; + r = errno; + goto done_close; + } + + /* Wipe existing data. */ + memset(start, 0, size); + + /* It's okay if we read less than size. That's just the max. */ + count = fread(start, 1, size, fp); + if (ferror(fp)) { + fprintf(stderr, + "ERROR: Read %zu/%" PRIi64 " bytes from %s: %s\n", + count, sb.st_size, filename, strerror(errno)); + errorcnt++; + r = errno; + } + +done_close: + if (0 != fclose(fp)) { + fprintf(stderr, "ERROR: Unable to close %s: %s\n", + filename, strerror(errno)); + errorcnt++; + if (!r) + r = errno; + } + + if (!r && msg) + printf(" - import %s from %s: success\n", msg, filename); + + return r; +} + +static int do_gbb(int argc, char *argv[]) +{ + enum do_what_now { DO_GET, DO_SET, DO_CREATE } mode = DO_GET; + char *infile = NULL; + char *outfile = NULL; + char *opt_create = NULL; + char *opt_rootkey = NULL; + char *opt_bmpfv = NULL; + char *opt_recoverykey = NULL; + char *opt_hwid = NULL; + char *opt_flags = NULL; + int sel_hwid = 0; + int sel_digest = 0; + int sel_flags = 0; + uint8_t *inbuf = NULL; + off_t filesize; + uint8_t *outbuf = NULL; + struct vb2_gbb_header *gbb; + uint8_t *gbb_base; + int i; + + opterr = 0; /* quiet, you */ + while ((i = getopt_long(argc, argv, short_opts, long_opts, 0)) != -1) { + switch (i) { + case 'g': + mode = DO_GET; + opt_has_arg("flags", 0); + opt_has_arg("hwid", 0); + break; + case 's': + mode = DO_SET; + opt_has_arg("flags", 1); + opt_has_arg("hwid", 1); + break; + case 'c': + mode = DO_CREATE; + opt_create = optarg; + break; + case 'o': + outfile = optarg; + break; + case 'k': + opt_rootkey = optarg; + break; + case 'b': + opt_bmpfv = optarg; + break; + case 'r': + opt_recoverykey = optarg; + break; + case OPT_HWID: + /* --hwid is optional: null might be okay */ + opt_hwid = optarg; + sel_hwid = 1; + break; + case OPT_FLAGS: + /* --flags is optional: null might be okay */ + opt_flags = optarg; + sel_flags = 1; + break; + case OPT_DIGEST: + sel_digest = 1; + break; + case OPT_HELP: + print_help(argc, argv); + return !!errorcnt; + + case '?': + errorcnt++; + if (optopt) + fprintf(stderr, + "ERROR: unrecognized option: -%c\n", + optopt); + else if (argv[optind - 1]) + fprintf(stderr, + "ERROR: unrecognized option " + "(possibly \"%s\")\n", + argv[optind - 1]); + else + fprintf(stderr, "ERROR: unrecognized option\n"); + break; + case ':': + errorcnt++; + if (argv[optind - 1]) + fprintf(stderr, + "ERROR: missing argument to -%c (%s)\n", + optopt, argv[optind - 1]); + else + fprintf(stderr, + "ERROR: missing argument to -%c\n", + optopt); + break; + default: + errorcnt++; + fprintf(stderr, + "ERROR: error while parsing options\n"); + } + } + + /* Problems? */ + if (errorcnt) { + print_help(argc, argv); + return 1; + } + + /* Now try to do something */ + switch (mode) { + case DO_GET: + if (argc - optind < 1) { + fprintf(stderr, "\nERROR: missing input filename\n"); + print_help(argc, argv); + return 1; + } else { + infile = argv[optind++]; + } + + /* With no args, show the HWID */ + if (!opt_rootkey && !opt_bmpfv && !opt_recoverykey + && !sel_flags && !sel_digest) + sel_hwid = 1; + + inbuf = read_entire_file(infile, &filesize); + if (!inbuf) + break; + + gbb = FindGbbHeader(inbuf, filesize); + if (!gbb) { + fprintf(stderr, "ERROR: No GBB found in %s\n", infile); + break; + } + gbb_base = (uint8_t *) gbb; + + /* Get the stuff */ + if (sel_hwid) + printf("hardware_id: %s\n", + gbb->hwid_size ? (char *)(gbb_base + + gbb-> + hwid_offset) : ""); + if (sel_digest) + print_hwid_digest(gbb, "digest: ", "\n"); + + if (sel_flags) + printf("flags: 0x%08x\n", gbb->flags); + if (opt_rootkey) + write_to_file(" - exported root_key to file:", + opt_rootkey, + gbb_base + gbb->rootkey_offset, + gbb->rootkey_size); + if (opt_bmpfv) + write_to_file(" - exported bmp_fv to file:", opt_bmpfv, + gbb_base + gbb->bmpfv_offset, + gbb->bmpfv_size); + if (opt_recoverykey) + write_to_file(" - exported recovery_key to file:", + opt_recoverykey, + gbb_base + gbb->recovery_key_offset, + gbb->recovery_key_size); + break; + + case DO_SET: + if (argc - optind < 1) { + fprintf(stderr, "\nERROR: missing input filename\n"); + print_help(argc, argv); + return 1; + } + infile = argv[optind++]; + if (!outfile) + outfile = (argc - optind < 1) ? infile : argv[optind++]; + + if (sel_hwid && !opt_hwid) { + fprintf(stderr, "\nERROR: missing new HWID value\n"); + print_help(argc, argv); + return 1; + } + if (sel_flags && (!opt_flags || !*opt_flags)) { + fprintf(stderr, "\nERROR: missing new flags value\n"); + print_help(argc, argv); + return 1; + } + + /* With no args, we'll either copy it unchanged or do nothing */ + inbuf = read_entire_file(infile, &filesize); + if (!inbuf) + break; + + gbb = FindGbbHeader(inbuf, filesize); + if (!gbb) { + fprintf(stderr, "ERROR: No GBB found in %s\n", infile); + break; + } + gbb_base = (uint8_t *) gbb; + + outbuf = (uint8_t *) malloc(filesize); + if (!outbuf) { + errorcnt++; + fprintf(stderr, + "ERROR: can't malloc %" PRIi64 " bytes: %s\n", + filesize, strerror(errno)); + break; + } + + /* Switch pointers to outbuf */ + memcpy(outbuf, inbuf, filesize); + gbb = FindGbbHeader(outbuf, filesize); + if (!gbb) { + fprintf(stderr, + "INTERNAL ERROR: No GBB found in outbuf\n"); + exit(1); + } + gbb_base = (uint8_t *) gbb; + + if (opt_hwid) { + if (strlen(opt_hwid) + 1 > gbb->hwid_size) { + fprintf(stderr, + "ERROR: null-terminated HWID" + " exceeds capacity (%d)\n", + gbb->hwid_size); + errorcnt++; + } else { + /* Wipe data before writing new value. */ + memset(gbb_base + gbb->hwid_offset, 0, + gbb->hwid_size); + strcpy((char *)(gbb_base + gbb->hwid_offset), + opt_hwid); + update_hwid_digest(gbb); + } + } + + if (opt_flags) { + char *e = NULL; + uint32_t val; + val = (uint32_t) strtoul(opt_flags, &e, 0); + if (e && *e) { + fprintf(stderr, + "ERROR: invalid flags value: %s\n", + opt_flags); + errorcnt++; + } else { + gbb->flags = val; + } + } + + if (opt_rootkey) { + read_from_file("root_key", opt_rootkey, + gbb_base + gbb->rootkey_offset, + gbb->rootkey_size); + } + if (opt_bmpfv) + read_from_file("bmp_fv", opt_bmpfv, + gbb_base + gbb->bmpfv_offset, + gbb->bmpfv_size); + if (opt_recoverykey) + read_from_file("recovery_key", opt_recoverykey, + gbb_base + gbb->recovery_key_offset, + gbb->recovery_key_size); + + /* Write it out if there are no problems. */ + if (!errorcnt) + write_to_file("successfully saved new image to:", + outfile, outbuf, filesize); + + break; + + case DO_CREATE: + if (!outfile) { + if (argc - optind < 1) { + fprintf(stderr, + "\nERROR: missing output filename\n"); + print_help(argc, argv); + return 1; + } + outfile = argv[optind++]; + } + /* Parse the creation args */ + outbuf = create_gbb(opt_create, &filesize); + if (!outbuf) { + fprintf(stderr, + "\nERROR: unable to parse creation spec (%s)\n", + opt_create); + print_help(argc, argv); + return 1; + } + if (!errorcnt) + write_to_file("successfully created new GBB to:", + outfile, outbuf, filesize); + break; + } + + if (inbuf) + free(inbuf); + if (outbuf) + free(outbuf); + return !!errorcnt; +} + +DECLARE_FUTIL_COMMAND(gbb, do_gbb, VBOOT_VERSION_ALL, + "Manipulate the Google Binary Block (GBB)"); +DECLARE_FUTIL_COMMAND(gbb_utility, do_gbb, VBOOT_VERSION_ALL, + "Legacy name for `gbb` command"); diff --git a/futility/cmd_gscvd.c b/futility/cmd_gscvd.c new file mode 100644 index 0000000..7fff293 --- /dev/null +++ b/futility/cmd_gscvd.c @@ -0,0 +1,1050 @@ +/* + * Copyright 2021 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "fmap.h" +#include "futility.h" +#include "gsc_ro.h" +#include "host_key21.h" +#include "host_keyblock.h" +#include "host_signature.h" + +/* + * for testing purposes let's use + * - tests/devkeys/arv_root.vbprivk as the root private key + * - tests/devkeys/arv_root.vbpubk as the root public key + * used for signing of the platform public key + * - tests/devkeys/arv_platform.vbprivk signing platform key + * - tests/devkeys/arv_platform.vbpubk - public key used for signature + * verification + *------------ + * Command to create the signed public key block in ~/tmp/packed: + * + ./build/futility/futility vbutil_keyblock --pack ~/tmp/packed \ + --datapubkey tests/devkeys/arv_platform.vbpubk \ + --signprivate tests/devkeys/arv_root.vbprivk + *------------ + * Command to fill RO_GSCVD FMAP area in an AP firmware file. The input AP + * firmware file is ~/tmp/image-guybrush.serial.bin, the output signed + * AP firmware file is ~/tmp/guybrush-signed: + * + ./build/futility/futility gscvd --outfile ~/tmp/guybrush-signed \ + -R 818100:10000,f00000:100,f80000:2000,f8c000:1000,0x00804000:0x00000800 \ + -k ~/tmp/packed -p tests/devkeys/arv_platform.vbprivk -b 5a5a4352 \ + -r tests/devkeys/arv_root.vbpubk ~/tmp/image-guybrush.serial.bin + *------------ + * Command to validate a previously signed AP firmware file. The hash is the + * sha256sum of tests/devkeys/kernel_subkey.vbpubk: + * + build/futility/futility gscvd ~/tmp/guybrush-signed \ + 3d74429f35be8d34bcb425d4397e2218e6961afed456a78ce30047f5b54ed158 + */ + +/* Command line options processing support. */ +enum no_short_opts { + OPT_OUTFILE = 1000, +}; + +static const struct option long_opts[] = { + /* name hasarg *flag val */ + {"outfile", 1, NULL, OPT_OUTFILE}, + {"ranges", 1, NULL, 'R'}, + {"board_id", 1, NULL, 'b'}, + {"root_pub_key", 1, NULL, 'r'}, + {"keyblock", 1, NULL, 'k'}, + {"platform_priv", 1, NULL, 'p'}, + {"help", 0, NULL, 'h'}, + {} +}; + +static const char *short_opts = "R:b:hk:p:r:"; + +static const char usage[] = + "\n" + "This utility creates an RO verification space in the Chrome OS AP\n" + "firmware image or allows to validate a previously prepared image\n" + "containing the RO verification space.\n\n" + "Usage: " MYNAME " gscvd PARAMS []\n" + "\n\nCreation of RO Verification space:\n\n" + "Required PARAMS:\n" + " -R|--ranges STRING Comma separated colon delimited\n" + " hex tuples :, the\n" + " areas of the RO covered by the\n" + " signature\n" + " -b|--board_id The Board ID of the board for which\n" + " the image is being signed\n" + " -r|--root_pub_key The main public key, in .vbpubk\n" + " format, used to verify platform\n" + " key\n" + " -k|--keyblock Signed platform public key in\n" + " .keyblock format, used for run\n" + " time RO verifcation\n" + " -p|--platform_priv Private platform key in .vbprivk\n" + " format, used for signing RO\n" + " verification data\n" + "Optional PARAMS:\n" + " [--outfile] OUTFILE Output firmware image containing\n" + " RO verification information\n" + "\n\n" + "Validation of RO Verification space:\n\n" + " The only required parameter is , if optional\n" + " is given, it is compared to the hash\n" + " of the root key found in .\n" + "\n\n" + " -h|--help Print this message\n\n"; + +/* Structure helping to keep track of the file mapped into memory. */ +struct file_buf { + uint32_t len; + uint8_t *data; + int fd; + FmapAreaHeader *ro_gscvd; +}; + +/* + * Max number of RO ranges to cover. 32 is more than enough, this must be kept + * in sync with APRO_MAX_NUM_RANGES declaration in + * common/ap_ro_integrity_check.c in the Cr50 tree. + */ +#define MAX_RANGES 32 + +/* + * Container keeping track of the set of ranges to include in hash + * calculation. + */ +struct gscvd_ro_ranges { + size_t range_count; + struct gscvd_ro_range ranges[MAX_RANGES]; +}; + +/** + * Load the AP firmware file into memory. + * + * Map the requested file into memory, find RO_GSCVD area in the file, and + * cache the information in the passed in file_buf structure. + * + * @param file_name name of the AP firmware file + * @param file_buf pointer to the helper structure keeping information about + * the file + * + * @return 0 on success 1 on failure. + */ +static int load_ap_firmware(const char *file_name, struct file_buf *file) +{ + int fd; + int rv; + + fd = open(file_name, O_RDWR); + if (fd < 0) { + ERROR("Can't open %s: %s\n", file_name, + strerror(errno)); + return 1; + } + + file->fd = fd; + do { + rv = 1; + + if (futil_map_file(fd, MAP_RW, &file->data, &file->len)) { + file->data = NULL; + break; + } + + if (!fmap_find_by_name(file->data, file->len, NULL, "RO_GSCVD", + &file->ro_gscvd)) { + ERROR("Could not find RO_GSCVD in the FMAP\n"); + break; + } + rv = 0; + } while (false); + + return rv; +} + +/** + * Check if the passed in offset falls into the passed in FMAP area. + */ +static bool in_range(uint32_t offset, const FmapAreaHeader *ah) +{ + return (offset >= ah->area_offset) && + (offset <= (ah->area_offset + ah->area_size)); +} + +/** + * Check if the passed in range fits into the passed in FMAP area. + */ +static bool range_fits(const struct gscvd_ro_range *range, + const FmapAreaHeader *ah) +{ + if (in_range(range->offset, ah) && + in_range(range->offset + range->size, ah)) + return true; + + ERROR("Range %#x..+%#x does not fit in %s\n", range->offset, + range->size, ah->area_name); + + return false; +} + +/** + * Check if the passed in range overlaps with the area. + * + * @param range pointer to the range to check + * @param offset offset of the area to check against + * @param size size of the area to check against + * + * @return true if range overlaps with the area, false otherwise. + */ +static bool range_overlaps(const struct gscvd_ro_range *range, uint32_t offset, + size_t size) +{ + if (((range->offset + range->size) <= offset) || + (offset + size) <= range->offset) + return false; + + ERROR("Range %x..+%x overlaps with %x..+%zx\n", range->offset, + range->size, offset, size); + + return true; +} + +/* + * Check validity of the passed in ranges. + * + * All ranges must + * - fit into the WP_RO FMAP area + * - not overlap with the RO_GSCVD FMAP area + * - not overlap with each other + * + * @param ranges - pointer to the container of ranges to check + * @param file - pointer to the file layout descriptor + * + * @return zero on success, -1 on failures + */ +static int verify_ranges(const struct gscvd_ro_ranges *ranges, + const struct file_buf *file) +{ + size_t i; + FmapAreaHeader *wp_ro; + int errorcount; + + if (!fmap_find_by_name(file->data, file->len, NULL, "WP_RO", &wp_ro)) { + ERROR("Could not find WP_RO in the FMAP\n"); + return 1; + } + + errorcount = 0; + for (i = 0; i < ranges->range_count; i++) { + size_t j; + + /* Must fit into WP_RO. */ + if (!range_fits(ranges->ranges + i, wp_ro)) + errorcount++; + + /* Must not overlap with RO_GSCVD. */ + if (range_overlaps(ranges->ranges + i, + file->ro_gscvd->area_offset, + file->ro_gscvd->area_size)) + errorcount++; + + /* The last range is nothing to compare against. */ + if (i == ranges->range_count - 1) + break; + + /* Must not overlap with all following ranges. */ + for (j = i + 1; j < ranges->range_count; j++) + if (range_overlaps(ranges->ranges + i, + ranges->ranges[j].offset, + ranges->ranges[j].size)) + errorcount++; + } + + return errorcount ? -1 : 0; +} + +/** + * Parse range specification supplied by the user. + * + * The input is a string of the following format: + * :[,:[,...]] + * + * @param input user input, part of the command line + * @param output pointer to the ranges container + * + * @return zero on success, -1 on failure + */ +static int parse_ranges(const char *input, struct gscvd_ro_ranges *output) +{ + char *cursor; + char *delim; + char *str = strdup(input); + int rv = 0; + + if (!str) { + ERROR("Failed to allocate memory for ranges string copy!\n"); + return -1; + } + + output->range_count = 0; + cursor = str; + do { + char *colon; + char *e; + + if (output->range_count >= ARRAY_SIZE(output->ranges)) { + ERROR("Too many ranges!\n"); + rv = -1; + break; + } + + delim = strchr(cursor, ','); + if (delim) + *delim = '\0'; + colon = strchr(cursor, ':'); + if (!colon) { + rv = -1; + break; + } + *colon = '\0'; + + errno = 0; + output->ranges[output->range_count].offset = + strtol(cursor, &e, 16); + if (errno || *e) { + rv = -1; + break; + } + + output->ranges[output->range_count].size = + strtol(colon + 1, &e, 16); + if (errno || *e) { + rv = -1; + break; + } + + output->range_count++; + cursor = delim + 1; + /* Iterate until there is no more commas. */ + } while (delim); + + free(str); + if (rv) + ERROR("Misformatted ranges string\n"); + + return rv; +} + +/** + * Calculate hash of the RO ranges. + * + * @param ap_firmware_file pointer to the AP firmware file layout descriptor + * @param ranges pointer to the container of ranges to include in hash + * calculation + * @param hash_alg algorithm to use for hashing + * @param digest memory to copy the calculated hash to + * @param digest_ size requested size of the digest, padded with zeros if the + * SHA digest size is smaller than digest_size + * + * @return zero on success, -1 on failure. + */ +static int calculate_ranges_digest(const struct file_buf *ap_firmware_file, + const struct gscvd_ro_ranges *ranges, + enum vb2_hash_algorithm hash_alg, + void *digest, size_t digest_size) +{ + struct vb2_digest_context dc; + size_t i; + + /* Calculate the ranges digest. */ + if (vb2_digest_init(&dc, hash_alg) != VB2_SUCCESS) { + ERROR("Failed to init digest!\n"); + return 1; + } + + for (i = 0; i < ranges->range_count; i++) { + if (vb2_digest_extend(&dc, + ap_firmware_file->data + + ranges->ranges[i].offset, + ranges->ranges[i].size) != VB2_SUCCESS) { + ERROR("Failed to extend digest!\n"); + return -1; + } + } + + memset(digest, 0, digest_size); + if (vb2_digest_finalize(&dc, digest, digest_size) != VB2_SUCCESS) { + ERROR("Failed to finalize digest!\n"); + return -1; + } + + return 0; +} + +/** + * Build GSC verification data. + * + * Calculate size of the structure including the signature and the root key, + * allocate memory, fill up the structure, calculate AP RO ranges digest and + * then the GVD signature. + * + * @param ap_firmware_file pointer to the AP firmware file layout descriptor + * @param ranges pointer to the container of ranges to include in verification + * @param root_pubk pointer to the root pubk container + * @param privk pointer to the private key to use for signing + * @param board_id Board ID value to use. + * + * @return pointer to the created GVD (to be freed by the caller) on success, + * NULL on failure. + */ +static +struct gsc_verification_data *create_gvd(struct file_buf *ap_firmware_file, + struct gscvd_ro_ranges *ranges, + const struct vb2_packed_key *root_pubk, + const struct vb2_private_key *privk, + uint32_t board_id) +{ + struct gsc_verification_data *gvd; + size_t total_size; + size_t sig_size; + size_t ranges_size; + struct vb2_signature *sig; + const FmapHeader *fmh; + + sig_size = vb2_rsa_sig_size(privk->sig_alg); + ranges_size = ranges->range_count * sizeof(struct gscvd_ro_range); + total_size = sizeof(struct gsc_verification_data) + + root_pubk->key_size + sig_size + ranges_size; + + gvd = calloc(total_size, 1); + + if (!gvd) { + ERROR("Failed to allocate %zd bytes for gvd\n", total_size); + return NULL; + } + + gvd->gv_magic = GSC_VD_MAGIC; + gvd->size = total_size; + gvd->gsc_board_id = board_id; + gvd->rollback_counter = GSC_VD_ROLLBACK_COUNTER; + + /* Guaranteed to succeed. */ + fmh = fmap_find(ap_firmware_file->data, ap_firmware_file->len); + + gvd->fmap_location = (uintptr_t)fmh - (uintptr_t)ap_firmware_file->data; + + gvd->hash_alg = VB2_HASH_SHA256; + + if (calculate_ranges_digest(ap_firmware_file, ranges, gvd->hash_alg, + gvd->ranges_digest, + sizeof(gvd->ranges_digest))) { + free(gvd); + return NULL; + } + + /* Prepare signature header. */ + vb2_init_signature(&gvd->sig_header, + (uint8_t *)(gvd + 1) + ranges_size, + sig_size, + sizeof(struct gsc_verification_data) + ranges_size); + + /* Copy root key into the structure. */ + vb2_init_packed_key(&gvd->root_key_header, + (uint8_t *)(gvd + 1) + ranges_size + sig_size, + root_pubk->key_size); + vb2_copy_packed_key(&gvd->root_key_header, root_pubk); + + /* Copy ranges into the ranges section. */ + gvd->range_count = ranges->range_count; + memcpy(gvd->ranges, ranges->ranges, ranges_size); + + sig = vb2_calculate_signature((uint8_t *)gvd, + sizeof(struct gsc_verification_data) + + ranges_size, privk); + if (!sig) { + ERROR("Failed to calculate signature\n"); + free(gvd); + return NULL; + } + + /* Copy signature body into GVD after some basic checks. */ + if ((sig_size == sig->sig_size) && + (gvd->sig_header.data_size == sig->data_size)) { + vb2_copy_signature(&gvd->sig_header, sig); + } else { + ERROR("Inconsistent signature headers\n"); + free(sig); + free(gvd); + return NULL; + } + + free(sig); + + return gvd; +} + +/** + * Fill RO_GSCVD FMAP area. + * + * All trust chain components have been verified, AP RO sections digest + * calculated, and GVD signature created; put it all together in the dedicated + * FMAP area. + * + * @param ap_firmware_file pointer to the AP firmware file layout descriptor + * @param gvd pointer to the GVD header + * @param keyblock pointer to the keyblock container + * + * @return zero on success, -1 on failure + */ +static int fill_gvd_area(struct file_buf *ap_firmware_file, + struct gsc_verification_data *gvd, + struct vb2_keyblock *keyblock) +{ + size_t total; + uint8_t *cursor; + + /* How much room is needed for the whole thing? */ + total = gvd->size + keyblock->keyblock_size; + + if (total > ap_firmware_file->ro_gscvd->area_size) { + ERROR("GVD section does not fit, %zd > %d\n", + total, ap_firmware_file->ro_gscvd->area_size); + return -1; + } + + cursor = ap_firmware_file->data + + ap_firmware_file->ro_gscvd->area_offset; + + /* Copy GSC verification data */ + memcpy(cursor, gvd, gvd->size); + cursor += gvd->size; + + /* Keyblock, size includes everything. */ + memcpy(cursor, keyblock, keyblock->keyblock_size); + + return 0; +} + +/** + * Initialize a work buffer structure. + * + * Embedded vboot reference code does not use malloc/free, it uses the so + * called work buffer structure to provide a poor man's memory management + * tool. This program uses some of the embedded library functions, let's + * implement work buffer support to keep the embedded code happy. + * + * @param wb pointer to the workubffer structure to initialize + * @param size size of the buffer to allocate + * + * @return pointer to the allocated buffer on success, NULL on failure. + */ +static void *init_wb(struct vb2_workbuf *wb, size_t size) +{ + void *buf = malloc(size); + + if (!buf) + ERROR("Failed to allocate workblock of %zd\n", size); + else + vb2_workbuf_init(wb, buf, size); + + return buf; +} + +/** + * Validate that platform key keyblock was signed by the root key. + * + * This function performs the same step the GSC is supposed to perform: + * validate the platform key keyblock signature using the root public key. + * + * @param root_pubk pointer to the root public key container + * @param kblock pointer to the platform public key keyblock + * + * @return 0 on success, -1 on failure + */ +static int validate_pubk_signature(const struct vb2_packed_key *root_pubk, + struct vb2_keyblock *kblock) +{ + struct vb2_public_key pubk; + struct vb2_workbuf wb; + uint32_t kbsize; + int rv; + void *buf; + + if (vb2_unpack_key(&pubk, root_pubk) != VB2_SUCCESS) { + ERROR("Failed to unpack public key\n"); + return -1; + } + + /* Let's create an ample sized work buffer. */ + buf = init_wb(&wb, 8192); + if (!buf) + return -1; + + rv = -1; + do { + void *work; + + kbsize = kblock->keyblock_size; + work = vb2_workbuf_alloc(&wb, kbsize); + if (!work) { + ERROR("Failed to allocate workblock space %d\n", + kbsize); + break; + } + + memcpy(work, kblock, kbsize); + + if (vb2_verify_keyblock(work, kbsize, &pubk, &wb) != + VB2_SUCCESS) { + ERROR("Root and keyblock mismatch\n"); + break; + } + + rv = 0; + } while (false); + + free(buf); + + return rv; +} + +/** + * Validate that private and public parts of the platform key match. + * + * This is a fairly routine validation, the N components of the private and + * public RSA keys are compared. + * + * @param keyblock pointer to the keyblock containing the public key + * @param plat_privk pointer to the matching private key + * + * @return 0 on success, nonzero on failure + */ +static int validate_privk(struct vb2_keyblock *kblock, + struct vb2_private_key *plat_privk) +{ + const BIGNUM *privn; + BIGNUM *pubn; + struct vb2_public_key pubk; + int rv; + + privn = pubn = NULL; + + RSA_get0_key(plat_privk->rsa_private_key, &privn, NULL, NULL); + + if (vb2_unpack_key(&pubk, &kblock->data_key) != VB2_SUCCESS) { + ERROR("Failed to unpack public key\n"); + return -1; + } + + pubn = BN_new(); + pubn = BN_lebin2bn((uint8_t *)pubk.n, vb2_rsa_sig_size(pubk.sig_alg), + pubn); + rv = BN_cmp(pubn, privn); + if (rv) + ERROR("Public/private key N mismatch!\n"); + + BN_free(pubn); + return rv; +} + +/** + * Copy ranges from AP firmware file into gscvd_ro_ranges container + * + * While copying the ranges verify that they do not overlap. + * + * @param ap_firmware_file pointer to the AP firmware file layout descriptor + * @param gvd pointer to the GVD header followed by the ranges + * @param ranges pointer to the ranges container to copy ranges to + * + * @return 0 on successful copy nonzero on errors. + */ +static int copy_ranges(const struct file_buf *ap_firmware_file, + const struct gsc_verification_data *gvd, + struct gscvd_ro_ranges *ranges) +{ + ranges->range_count = gvd->range_count; + memcpy(ranges->ranges, gvd->ranges, + sizeof(ranges->ranges[0]) * ranges->range_count); + + return verify_ranges(ranges, ap_firmware_file); +} + +/** + * Basic validation of GVD included in a AP firmware file. + * + * This is not a cryptographic verification, just a check that the structure + * makes sense and the expected values are found in certain fields. + * + * @param gvd pointer to the GVD header followed by the ranges + * @param ap_firmware_file pointer to the AP firmware file layout descriptor + * + * @return zero on success, -1 on failure. + */ +static int validate_gvd(const struct gsc_verification_data *gvd, + const struct file_buf *ap_firmware_file) +{ + const FmapHeader *fmh; + + if (gvd->gv_magic != GSC_VD_MAGIC) { + ERROR("Incorrect gscvd magic %x\n", gvd->gv_magic); + return -1; + } + + if (!gvd->range_count || (gvd->range_count > MAX_RANGES)) { + ERROR("Incorrect gscvd range count %d\n", gvd->range_count); + return -1; + } + + /* Guaranteed to succeed. */ + fmh = fmap_find(ap_firmware_file->data, ap_firmware_file->len); + + if (gvd->fmap_location != + ((uintptr_t)fmh - (uintptr_t)ap_firmware_file->data)) { + ERROR("Incorrect gscvd fmap offset %x\n", gvd->fmap_location); + return -1; + } + + /* Make sure signature and root key fit. */ + if (vb2_verify_signature_inside(gvd, gvd->size, &gvd->sig_header) != + VB2_SUCCESS) { + ERROR("Corrupted signature header in GVD\n"); + return -1; + } + + if (vb2_verify_packed_key_inside(gvd, gvd->size, + &gvd->root_key_header) != + VB2_SUCCESS) { + ERROR("Corrupted root key header in GVD\n"); + return -1; + } + + return 0; +} + +/** + * Validate GVD signature. + * + * Given the entire GVD space (header plus ranges array), the signature and + * the public key, verify that the signature matches. + * + * @param gvd pointer to gsc_verification_data followed by the ranges array + * @param gvd_signature pointer to the vb2 signature container + * @param packedk pointer to the keyblock containing the public key + * + * @return zero on success, non-zero on failure + */ +static int validate_gvd_signature(struct gsc_verification_data *gvd, + const struct vb2_packed_key *packedk) +{ + struct vb2_workbuf wb; + void *buf; + int rv; + struct vb2_public_key pubk; + size_t signed_size; + + /* Extract public key from the public key keyblock. */ + if (vb2_unpack_key(&pubk, packedk) != VB2_SUCCESS) { + ERROR("Failed to unpack public key\n"); + return -1; + } + + /* Let's create an ample sized work buffer. */ + buf = init_wb(&wb, 8192); + if (!buf) + return -1; + + signed_size = sizeof(struct gsc_verification_data) + + gvd->range_count * sizeof(gvd->ranges[0]); + + rv = vb2_verify_data((const uint8_t *)gvd, signed_size, + &gvd->sig_header, + &pubk, &wb); + + free(buf); + return rv; +} + +/* + * Validate GVD of the passed in AP firmware file and possibly the root key hash + * + * The input parameters are the subset of the command line, the first argv + * string is the AP firmware file name, the second string, if present, is the + * hash of the root public key included in the RO_GSCVD area of the AP + * firmware file. + * + * @return zero on success, -1 on failure. + */ +static int validate_gscvd(int argc, char *argv[]) +{ + struct file_buf ap_firmware_file; + int rv; + struct gscvd_ro_ranges ranges; + struct gsc_verification_data *gvd; + const char *file_name; + uint8_t digest[sizeof(gvd->ranges_digest)]; + struct vb2_hash root_key_digest = { .algo = VB2_HASH_SHA256 }; + + /* Guaranteed to be available. */ + file_name = argv[0]; + + if (argc > 1) + parse_digest_or_die(root_key_digest.sha256, + sizeof(root_key_digest.sha256), + argv[1]); + + do { + struct vb2_keyblock *kblock; + + rv = -1; /* Speculative, will be cleared on success. */ + + if (load_ap_firmware(file_name, &ap_firmware_file)) + break; + + /* Copy ranges from gscvd to local structure. */ + gvd = (struct gsc_verification_data + *)(ap_firmware_file.data + + ap_firmware_file.ro_gscvd->area_offset); + + if (validate_gvd(gvd, &ap_firmware_file)) + break; + + if (copy_ranges(&ap_firmware_file, gvd, &ranges)) + break; + + if (calculate_ranges_digest(&ap_firmware_file, &ranges, + gvd->hash_alg, digest, + sizeof(digest))) + break; + + if (memcmp(digest, gvd->ranges_digest, sizeof(digest))) { + ERROR("Ranges digest mismatch\n"); + break; + } + + /* Find the keyblock. */ + kblock = (struct vb2_keyblock *)((uintptr_t)gvd + gvd->size); + + if ((argc > 1) && (vb2_hash_verify + (vb2_packed_key_data(&gvd->root_key_header), + gvd->root_key_header.key_size, + &root_key_digest) != VB2_SUCCESS)) { + ERROR("Sha256 mismatch\n"); + break; + } + + if (validate_pubk_signature(&gvd->root_key_header, + kblock)) + break; + + if (validate_gvd_signature(gvd, &kblock->data_key)) + break; + + rv = 0; + } while (false); + + return rv; +} + +/** + * Calculate and report sha256 hash of the public key body. + * + * The hash will be incorporated into GVC firmware to allow it to validate the + * root key. + * + * @param pubk pointer to the public key to process. + */ +static void dump_pubk_hash(const struct vb2_packed_key *pubk) +{ + struct vb2_hash hash; + size_t i; + + vb2_hash_calculate(vb2_packed_key_data(pubk), pubk->key_size, + VB2_HASH_SHA256, &hash); + + printf("Root key body sha256 hash:\n"); + + for (i = 0; i < sizeof(hash.sha256); i++) + printf("%02x", hash.sha256[i]); + + printf("\n"); +} + +/** + * The main function of this futilty option. + * + * See the usage string for input details. + * + * @return zero on success, nonzero on failure. + */ +static int do_gscvd(int argc, char *argv[]) +{ + int i; + int longindex; + char *infile = NULL; + char *outfile = NULL; + char *work_file = NULL; + struct gscvd_ro_ranges ranges; + int errorcount = 0; + struct vb2_packed_key *root_pubk = NULL; + struct vb2_keyblock *kblock = NULL; + struct vb2_private_key *plat_privk = NULL; + struct gsc_verification_data *gvd = NULL; + struct file_buf ap_firmware_file = { .fd = -1 }; + uint32_t board_id = UINT32_MAX; + int rv = 0; + + ranges.range_count = 0; + + while ((i = getopt_long(argc, argv, short_opts, long_opts, + &longindex)) != -1) { + switch (i) { + case OPT_OUTFILE: + outfile = optarg; + break; + case 'R': + if (parse_ranges(optarg, &ranges)) { + ERROR("Could not parse ranges\n"); + /* Error message has been already printed. */ + errorcount++; + } + break; + case 'b': { + char *e; + long long bid; + + bid = strtoull(optarg, &e, 16); + if (*e || (bid >= UINT32_MAX)) { + ERROR("Board ID value '%s' is invalid\n", + optarg); + errorcount++; + } else { + board_id = (uint32_t)bid; + } + break; + } + case 'r': + root_pubk = vb2_read_packed_key(optarg); + if (!root_pubk) { + ERROR("Could not read %s\n", optarg); + errorcount++; + } + break; + case 'k': + kblock = vb2_read_keyblock(optarg); + if (!kblock) { + ERROR("Could not read %s\n", optarg); + errorcount++; + } + break; + case 'p': + plat_privk = vb2_read_private_key(optarg); + if (!plat_privk) { + ERROR("Could not read %s\n", optarg); + errorcount++; + } + break; + case 'h': + printf("%s", usage); + return 0; + case '?': + if (optopt) + ERROR("Unrecognized option: -%c\n", optopt); + else + ERROR("Unrecognized option: %s\n", + argv[optind - 1]); + errorcount++; + break; + case ':': + ERROR("Missing argument to -%c\n", optopt); + errorcount++; + break; + case 0: /* handled option */ + break; + default: + FATAL("Unrecognized getopt output: %d\n", i); + } + } + + if ((optind == 1) && (argc > 1)) + /* This must be a validation request. */ + return validate_gscvd(argc - 1, argv + 1); + + if (optind != (argc - 1)) { + ERROR("Misformatted command line\n%s\n", usage); + return 1; + } + + if (errorcount || !ranges.range_count || !root_pubk || !kblock || + !plat_privk || (board_id == UINT32_MAX)) { + /* Error message(s) should have been printed by now. */ + ERROR("%s\n", usage); + return 1; + } + + infile = argv[optind]; + + if (outfile) { + futil_copy_file_or_die(infile, outfile); + work_file = outfile; + } else { + work_file = infile; + } + + do { + rv = 1; /* Speculative, will be cleared on success. */ + + if (validate_pubk_signature(root_pubk, kblock)) + break; + + if (validate_privk(kblock, plat_privk)) + break; + + if (load_ap_firmware(work_file, &ap_firmware_file)) + break; + + if (verify_ranges(&ranges, &ap_firmware_file)) + break; + + gvd = create_gvd(&ap_firmware_file, &ranges, + root_pubk, plat_privk, board_id); + if (!gvd) + break; + + if (fill_gvd_area(&ap_firmware_file, gvd, kblock)) + break; + + dump_pubk_hash(root_pubk); + + rv = 0; + } while (false); + + free(gvd); + free(root_pubk); + free(kblock); + vb2_private_key_free(plat_privk); + + /* Now flush the file. */ + if (ap_firmware_file.data) { + rv |= futil_unmap_file(ap_firmware_file.fd, true, + ap_firmware_file.data, + ap_firmware_file.len); + } + + if (ap_firmware_file.fd != -1) + close(ap_firmware_file.fd); + + return rv; +} + +DECLARE_FUTIL_COMMAND(gscvd, do_gscvd, VBOOT_VERSION_2_1, + "Create RO verification structure"); diff --git a/futility/cmd_load_fmap.c b/futility/cmd_load_fmap.c new file mode 100644 index 0000000..818fda8 --- /dev/null +++ b/futility/cmd_load_fmap.c @@ -0,0 +1,209 @@ +/* Copyright 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "fmap.h" +#include "futility.h" + +static const char usage[] = "\n" + "Usage: " MYNAME " %s [OPTIONS] FILE AREA:file [AREA:file ...]\n" + "\n" + "Replace the contents of specific FMAP areas. This is the complement\n" + "of " MYNAME " dump_fmap -x FILE AREA [AREA ...]\n" + "\n" + "Options:\n" + " -o OUTFILE Write the result to this file, instead of modifying\n" + " the input file. This is safer, since there are no\n" + " safeguards against doing something stupid.\n" + "\n" + "Example:\n" + "\n" + " This will clear the RO_VPD area, and scramble VBLOCK_B:\n" + "\n" + " " MYNAME " %s bios.bin RO_VPD:/dev/zero VBLOCK_B:/dev/urandom\n" + "\n"; + +static void print_help(int argc, char *argv[]) +{ + printf(usage, argv[0], argv[0]); +} + +enum { + OPT_HELP = 1000, +}; +static const struct option long_opts[] = { + /* name hasarg *flag val */ + {"help", 0, NULL, OPT_HELP}, + {NULL, 0, NULL, 0}, +}; +static const char *short_opts = ":o:"; + + +static int copy_to_area(char *file, uint8_t *buf, uint32_t len, char *area) +{ + FILE *fp; + int retval = 0; + int n; + + fp = fopen(file, "r"); + if (!fp) { + fprintf(stderr, "area %s: can't open %s for reading: %s\n", + area, file, strerror(errno)); + return 1; + } + + n = fread(buf, 1, len, fp); + if (n == 0) { + if (feof(fp)) + fprintf(stderr, "area %s: unexpected EOF on %s\n", + area, file); + if (ferror(fp)) + fprintf(stderr, "area %s: can't read from %s: %s\n", + area, file, strerror(errno)); + retval = 1; + } else if (n < len) { + fprintf(stderr, "Warning on area %s: only read %d " + "(not %d) from %s\n", area, n, len, file); + } + + if (0 != fclose(fp)) { + fprintf(stderr, "area %s: error closing %s: %s\n", + area, file, strerror(errno)); + retval = 1; + } + + return retval; +} + + +static int do_load_fmap(int argc, char *argv[]) +{ + char *infile = 0; + char *outfile = 0; + uint8_t *buf; + uint32_t len; + FmapHeader *fmap; + FmapAreaHeader *ah; + int errorcnt = 0; + int fd, i; + + opterr = 0; /* quiet, you */ + while ((i = getopt_long(argc, argv, short_opts, long_opts, 0)) != -1) { + switch (i) { + case 'o': + outfile = optarg; + break; + case OPT_HELP: + print_help(argc, argv); + return !!errorcnt; + case '?': + if (optopt) + fprintf(stderr, "Unrecognized option: -%c\n", + optopt); + else + fprintf(stderr, "Unrecognized option\n"); + errorcnt++; + break; + case ':': + fprintf(stderr, "Missing argument to -%c\n", optopt); + errorcnt++; + break; + default: + FATAL("Unrecognized getopt output: %d\n", i); + } + } + + if (errorcnt) { + print_help(argc, argv); + return 1; + } + + if (argc - optind < 2) { + fprintf(stderr, + "You must specify an input file" + " and at least one AREA:file argument\n"); + print_help(argc, argv); + return 1; + } + + infile = argv[optind++]; + + /* okay, let's do it ... */ + if (outfile) + futil_copy_file_or_die(infile, outfile); + else + outfile = infile; + + fd = open(outfile, O_RDWR); + if (fd < 0) { + fprintf(stderr, "Can't open %s: %s\n", + outfile, strerror(errno)); + return 1; + } + + errorcnt |= futil_map_file(fd, MAP_RW, &buf, &len); + if (errorcnt) + goto done_file; + + fmap = fmap_find(buf, len); + if (!fmap) { + fprintf(stderr, "Can't find an FMAP in %s\n", infile); + errorcnt++; + goto done_map; + } + + for (i = optind; i < argc; i++) { + char *a = argv[i]; + char *f = strchr(a, ':'); + + if (!f || a == f || *(f+1) == '\0') { + fprintf(stderr, "argument \"%s\" is bogus\n", a); + errorcnt++; + break; + } + *f++ = '\0'; + uint8_t *area_buf = fmap_find_by_name(buf, len, fmap, a, &ah); + if (!area_buf) { + fprintf(stderr, "Can't find area \"%s\" in FMAP\n", a); + errorcnt++; + break; + } + + if (0 != copy_to_area(f, area_buf, ah->area_size, a)) { + errorcnt++; + break; + } + } + +done_map: + errorcnt |= futil_unmap_file(fd, 1, buf, len); + +done_file: + + if (0 != close(fd)) { + fprintf(stderr, "Error closing %s: %s\n", + outfile, strerror(errno)); + errorcnt++; + } + + return !!errorcnt; +} + +DECLARE_FUTIL_COMMAND(load_fmap, do_load_fmap, VBOOT_VERSION_ALL, + "Replace the contents of specified FMAP areas"); + diff --git a/futility/cmd_pcr.c b/futility/cmd_pcr.c new file mode 100644 index 0000000..e267b24 --- /dev/null +++ b/futility/cmd_pcr.c @@ -0,0 +1,148 @@ +/* Copyright 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include +#include + +#include "2common.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "futility.h" + +static const char usage[] = "\n" + "Usage: " MYNAME " %s [OPTIONS] DIGEST [...]\n" + "\n" + "This simulates a TPM PCR extension, to determine the expected output\n" + "\n" + "Each DIGEST arg should be a hex string (spaces optional) of the\n" + "appropriate length. The PCR is extended with each digest in turn\n" + "and the new value displayed.\n" + "\n" + "Options:\n" + " -i Initialize the PCR with the first DIGEST argument\n" + " (the default is to start with all zeros)\n" + " -2 Use sha256 DIGESTS (the default is sha1)\n" + "\n" + "Examples:\n" + "\n" + " " MYNAME " %s b52791126f96a21a8ba4d511c6f25a1c1eb6dc9e\n" + " " MYNAME " %s " + "'b5 27 91 12 6f 96 a2 1a 8b a4 d5 11 c6 f2 5a 1c 1e b6 dc 9e'\n" + "\n"; + +static void print_help(int argc, char *argv[]) +{ + printf(usage, argv[0], argv[0], argv[0]); +} + +static void print_digest(const uint8_t *buf, int len) +{ + int i; + for (i = 0; i < len; i++) + printf("%02x", buf[i]); +} + +enum { + OPT_HELP = 1000, +}; +static const struct option long_opts[] = { + {"help", 0, 0, OPT_HELP}, + {NULL, 0, 0, 0} +}; +static int do_pcr(int argc, char *argv[]) +{ + uint8_t accum[VB2_MAX_DIGEST_SIZE * 2]; + uint8_t pcr[VB2_MAX_DIGEST_SIZE]; + int digest_alg = VB2_HASH_SHA1; + int digest_size; + int opt_init = 0; + int errorcnt = 0; + int i; + + opterr = 0; /* quiet, you */ + while ((i = getopt_long(argc, argv, ":i2", long_opts, NULL)) != -1) { + switch (i) { + case 'i': + opt_init = 1; + break; + case '2': + digest_alg = VB2_HASH_SHA256; + break; + case OPT_HELP: + print_help(argc, argv); + return !!errorcnt; + case '?': + if (optopt) + fprintf(stderr, "Unrecognized option: -%c\n", + optopt); + else + fprintf(stderr, "Unrecognized option\n"); + errorcnt++; + break; + case ':': + fprintf(stderr, "Missing argument to -%c\n", optopt); + errorcnt++; + break; + default: + FATAL("Unrecognized getopt output: %d\n", i); + } + } + + if (errorcnt) { + print_help(argc, argv); + return 1; + } + + if (argc - optind < 1 + opt_init) { + fprintf(stderr, "You must extend at least one DIGEST\n"); + print_help(argc, argv); + return 1; + } + + memset(pcr, 0, sizeof(pcr)); + + digest_size = vb2_digest_size(digest_alg); + if (!digest_size) { + fprintf(stderr, "Error determining digest size!\n"); + return 1; + } + + if (opt_init) { + parse_digest_or_die(pcr, digest_size, argv[optind]); + optind++; + } + + printf("PCR: "); + print_digest(pcr, digest_size); + printf("\n"); + + for (i = optind; i < argc; i++) { + memcpy(accum, pcr, sizeof(pcr)); + parse_digest_or_die(accum + digest_size, digest_size, argv[i]); + + printf(" + "); + print_digest(accum + digest_size, digest_size); + printf("\n"); + + if (VB2_SUCCESS != vb2_digest_buffer(accum, digest_size * 2, + digest_alg, + pcr, digest_size)) { + fprintf(stderr, "Error computing digest!\n"); + return 1; + } + + printf("PCR: "); + print_digest(pcr, digest_size); + printf("\n"); + } + + return 0; +} + +DECLARE_FUTIL_COMMAND(pcr, do_pcr, VBOOT_VERSION_ALL, + "Simulate a TPM PCR extension operation"); diff --git a/futility/cmd_show.c b/futility/cmd_show.c new file mode 100644 index 0000000..dbe6edd --- /dev/null +++ b/futility/cmd_show.c @@ -0,0 +1,638 @@ +/* Copyright 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "2api.h" +#include "2common.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "file_type_bios.h" +#include "file_type.h" +#include "fmap.h" +#include "futility.h" +#include "futility_options.h" +#include "host_common.h" +#include "host_key21.h" +#include "util_misc.h" +#include "vb1_helper.h" + +/* Options */ +struct show_option_s show_option = { + .padding = 65536, + .type = FILE_TYPE_UNKNOWN, +}; + +/* Shared work buffer */ +static uint8_t workbuf[VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); +static struct vb2_workbuf wb; + +void show_pubkey(const struct vb2_packed_key *pubkey, const char *sp) +{ + printf("%sVboot API: 1.0\n", sp); + printf("%sAlgorithm: %d %s\n", sp, pubkey->algorithm, + vb2_get_crypto_algorithm_name(pubkey->algorithm)); + printf("%sKey Version: %d\n", sp, pubkey->key_version); + printf("%sKey sha1sum: %s\n", + sp, packed_key_sha1_string(pubkey)); +} + +static void show_keyblock(struct vb2_keyblock *keyblock, const char *name, + int sign_key, int good_sig) +{ + if (name) + printf("Keyblock: %s\n", name); + else + printf("Keyblock:\n"); + printf(" Signature: %s\n", + sign_key ? (good_sig ? "valid" : "invalid") : "ignored"); + printf(" Size: %#x\n", keyblock->keyblock_size); + printf(" Flags: %d ", keyblock->keyblock_flags); + if (keyblock->keyblock_flags & VB2_KEYBLOCK_FLAG_DEVELOPER_0) + printf(" !DEV"); + if (keyblock->keyblock_flags & VB2_KEYBLOCK_FLAG_DEVELOPER_1) + printf(" DEV"); + if (keyblock->keyblock_flags & VB2_KEYBLOCK_FLAG_RECOVERY_0) + printf(" !REC"); + if (keyblock->keyblock_flags & VB2_KEYBLOCK_FLAG_RECOVERY_1) + printf(" REC"); + if (keyblock->keyblock_flags & VB2_KEYBLOCK_FLAG_MINIOS_0) + printf(" !MINIOS"); + if (keyblock->keyblock_flags & VB2_KEYBLOCK_FLAG_MINIOS_1) + printf(" MINIOS"); + printf("\n"); + + struct vb2_packed_key *data_key = &keyblock->data_key; + printf(" Data key algorithm: %d %s\n", data_key->algorithm, + vb2_get_crypto_algorithm_name(data_key->algorithm)); + printf(" Data key version: %d\n", data_key->key_version); + printf(" Data key sha1sum: %s\n", + packed_key_sha1_string(data_key)); +} + +int ft_show_pubkey(const char *name, uint8_t *buf, uint32_t len, void *data) +{ + struct vb2_packed_key *pubkey = (struct vb2_packed_key *)buf; + + if (vb2_packed_key_looks_ok(pubkey, len)) { + printf("%s looks bogus\n", name); + return 1; + } + + printf("Public Key file: %s\n", name); + show_pubkey(pubkey, " "); + + return 0; +} + +int ft_show_privkey(const char *name, uint8_t *buf, uint32_t len, void *data) +{ + struct vb2_packed_private_key *pkey = + (struct vb2_packed_private_key *)buf; + struct vb2_private_key key; + const unsigned char *start = pkey->key_data; + + if (len <= sizeof(*pkey)) { + printf("%s looks bogus\n", name); + return 1; + } + len -= sizeof(*pkey); + key.rsa_private_key = d2i_RSAPrivateKey(NULL, &start, len); + + printf("Private Key file: %s\n", name); + printf(" Vboot API: 1.0\n"); + printf(" Algorithm: %u %s\n", pkey->algorithm, + vb2_get_crypto_algorithm_name(pkey->algorithm)); + printf(" Key sha1sum: %s\n", + private_key_sha1_string(&key)); + + return 0; +} + +int ft_show_keyblock(const char *name, uint8_t *buf, uint32_t len, void *data) +{ + struct vb2_keyblock *block = (struct vb2_keyblock *)buf; + struct vb2_public_key *sign_key = show_option.k; + int good_sig = 0; + int retval = 0; + + /* Check the hash only first */ + if (0 != vb2_verify_keyblock_hash(block, len, &wb)) { + printf("%s is invalid\n", name); + return 1; + } + + /* Check the signature if we have one */ + if (sign_key && + VB2_SUCCESS == vb2_verify_keyblock(block, len, sign_key, &wb)) + good_sig = 1; + + if (show_option.strict && (!sign_key || !good_sig)) + retval = 1; + + show_keyblock(block, name, !!sign_key, good_sig); + + return retval; +} + +int ft_show_fw_preamble(const char *name, uint8_t *buf, uint32_t len, + void *data) +{ + struct vb2_keyblock *keyblock = (struct vb2_keyblock *)buf; + struct bios_state_s *state = (struct bios_state_s *)data; + struct vb2_public_key *sign_key = show_option.k; + uint8_t *fv_data = show_option.fv; + uint64_t fv_size = show_option.fv_size; + struct bios_area_s *fw_body_area = 0; + int good_sig = 0; + int retval = 0; + + /* Check the hash... */ + if (VB2_SUCCESS != vb2_verify_keyblock_hash(keyblock, len, &wb)) { + printf("%s keyblock component is invalid\n", name); + return 1; + } + + /* + * If we're being invoked while poking through a BIOS, we should + * be given the keys and data to verify as part of the state. If we + * have no state, then we're just looking at a standalone fw_preamble, + * so we'll have to get any keys or data from options. + */ + struct vb2_public_key root_key; + if (state) { + if (!sign_key && + state->rootkey.is_valid && + VB2_SUCCESS == vb2_unpack_key_buffer(&root_key, + state->rootkey.buf, + state->rootkey.len)) { + /* BIOS should have a rootkey in the GBB */ + sign_key = &root_key; + } + + /* Identify the firmware body for this VBLOCK */ + enum bios_component body_c = state->c == BIOS_FMAP_VBLOCK_A + ? BIOS_FMAP_FW_MAIN_A + : BIOS_FMAP_FW_MAIN_B; + fw_body_area = &state->area[body_c]; + } + + /* If we have a key, check the signature too */ + if (sign_key && VB2_SUCCESS == + vb2_verify_keyblock(keyblock, len, sign_key, &wb)) + good_sig = 1; + + show_keyblock(keyblock, name, !!sign_key, good_sig); + + if (show_option.strict && (!sign_key || !good_sig)) + retval = 1; + + struct vb2_public_key data_key; + if (VB2_SUCCESS != vb2_unpack_key(&data_key, &keyblock->data_key)) { + fprintf(stderr, "Error parsing data key in %s\n", name); + return 1; + } + + uint32_t more = keyblock->keyblock_size; + struct vb2_fw_preamble *pre2 = (struct vb2_fw_preamble *)(buf + more); + if (VB2_SUCCESS != vb2_verify_fw_preamble(pre2, len - more, + &data_key, &wb)) { + printf("%s is invalid\n", name); + return 1; + } + + uint32_t flags = pre2->flags; + if (pre2->header_version_minor < 1) + flags = 0; /* Old 2.0 structure didn't have flags */ + + printf("Firmware Preamble:\n"); + printf(" Size: %d\n", pre2->preamble_size); + printf(" Header version: %d.%d\n", + pre2->header_version_major, pre2->header_version_minor); + printf(" Firmware version: %d\n", pre2->firmware_version); + + struct vb2_packed_key *kernel_subkey = &pre2->kernel_subkey; + printf(" Kernel key algorithm: %d %s\n", + kernel_subkey->algorithm, + vb2_get_crypto_algorithm_name(kernel_subkey->algorithm)); + if (kernel_subkey->algorithm >= VB2_ALG_COUNT) + retval = 1; + printf(" Kernel key version: %d\n", kernel_subkey->key_version); + printf(" Kernel key sha1sum: %s\n", + packed_key_sha1_string(kernel_subkey)); + printf(" Firmware body size: %d\n", pre2->body_signature.data_size); + printf(" Preamble flags: %d\n", flags); + + if (flags & VB2_FIRMWARE_PREAMBLE_USE_RO_NORMAL) { + printf("Preamble requests USE_RO_NORMAL;" + " skipping body verification.\n"); + goto done; + } + + /* We'll need to get the firmware body from somewhere... */ + if (fw_body_area && fw_body_area->is_valid) { + fv_data = fw_body_area->buf; + fv_size = fw_body_area->len; + } + + if (!fv_data) { + printf("No firmware body available to verify.\n"); + if (show_option.strict) + return 1; + return 0; + } + + if (VB2_SUCCESS != + vb2_verify_data(fv_data, fv_size, &pre2->body_signature, + &data_key, &wb)) { + fprintf(stderr, "Error verifying firmware body.\n"); + return 1; + } + +done: + /* Can't trust the BIOS unless everything is signed (in which case + * we've already returned), but standalone files are okay. */ + if (state || (sign_key && good_sig)) { + if (!(flags & VB2_FIRMWARE_PREAMBLE_USE_RO_NORMAL)) + printf("Body verification succeeded.\n"); + if (state) + state->area[state->c].is_valid = 1; + } else { + printf("Seems legit, but the signature is unverified.\n"); + if (show_option.strict) + retval = 1; + } + + return retval; +} + +int ft_show_kernel_preamble(const char *name, uint8_t *buf, uint32_t len, + void *data) +{ + struct vb2_keyblock *keyblock = (struct vb2_keyblock *)buf; + struct vb2_public_key *sign_key = show_option.k; + int retval = 0; + + /* Check the hash... */ + if (VB2_SUCCESS != vb2_verify_keyblock_hash(keyblock, len, &wb)) { + printf("%s keyblock component is invalid\n", name); + return 1; + } + + /* If we have a key, check the signature too */ + int good_sig = 0; + if (sign_key && VB2_SUCCESS == + vb2_verify_keyblock(keyblock, len, sign_key, &wb)) + good_sig = 1; + + printf("Kernel partition: %s\n", name); + show_keyblock(keyblock, NULL, !!sign_key, good_sig); + + if (show_option.strict && (!sign_key || !good_sig)) + retval = 1; + + struct vb2_public_key data_key; + if (VB2_SUCCESS != vb2_unpack_key(&data_key, &keyblock->data_key)) { + fprintf(stderr, "Error parsing data key in %s\n", name); + return 1; + } + + uint32_t more = keyblock->keyblock_size; + struct vb2_kernel_preamble *pre2 = + (struct vb2_kernel_preamble *)(buf + more); + + if (VB2_SUCCESS != vb2_verify_kernel_preamble(pre2, len - more, + &data_key, &wb)) { + printf("%s is invalid\n", name); + return 1; + } + + printf("Kernel Preamble:\n"); + printf(" Size: %#x\n", pre2->preamble_size); + printf(" Header version: %u.%u\n", + pre2->header_version_major, + pre2->header_version_minor); + printf(" Kernel version: %u\n", pre2->kernel_version); + printf(" Body load address: 0x%" PRIx64 "\n", + pre2->body_load_address); + printf(" Body size: %#x\n", + pre2->body_signature.data_size); + printf(" Bootloader address: 0x%" PRIx64 "\n", + pre2->bootloader_address); + printf(" Bootloader size: %#x\n", pre2->bootloader_size); + + uint64_t vmlinuz_header_address = 0; + uint32_t vmlinuz_header_size = 0; + vb2_kernel_get_vmlinuz_header(pre2, + &vmlinuz_header_address, + &vmlinuz_header_size); + if (vmlinuz_header_size) { + printf(" Vmlinuz_header address: 0x%" PRIx64 "\n", + vmlinuz_header_address); + printf(" Vmlinuz header size: %#x\n", + vmlinuz_header_size); + } + + printf(" Flags: %#x\n", vb2_kernel_get_flags(pre2)); + + /* Verify kernel body */ + uint8_t *kernel_blob = 0; + uint64_t kernel_size = 0; + if (show_option.fv) { + /* It's in a separate file, which we've already read in */ + kernel_blob = show_option.fv; + kernel_size = show_option.fv_size; + } else if (len > show_option.padding) { + /* It should be at an offset within the input file. */ + kernel_blob = buf + show_option.padding; + kernel_size = len - show_option.padding; + } + + if (!kernel_blob) { + /* TODO: Is this always a failure? The preamble is okay. */ + fprintf(stderr, "No kernel blob available to verify.\n"); + return 1; + } + + if (VB2_SUCCESS != + vb2_verify_data(kernel_blob, kernel_size, &pre2->body_signature, + &data_key, &wb)) { + fprintf(stderr, "Error verifying kernel body.\n"); + return 1; + } + + printf("Body verification succeeded.\n"); + + printf("Config:\n%s\n", kernel_blob + kernel_cmd_line_offset(pre2)); + + return retval; +} + +enum no_short_opts { + OPT_PADDING = 1000, + OPT_TYPE, + OPT_PUBKEY, + OPT_HELP, +}; + +static const char usage[] = "\n" + "Usage: " MYNAME " %s [OPTIONS] FILE [...]\n" + "\n" + "Where FILE could be\n" + "\n" + " a boot descriptor block (BDB)\n" + " a keyblock (.keyblock)\n" + " a firmware preamble signature (VBLOCK_A/B)\n" + " a firmware image (bios.bin)\n" + " a kernel partition (/dev/sda2, /dev/mmcblk0p2)\n" + " keys in various formats (.vbpubk, .vbprivk, .pem)\n" + " several other file types related to verified boot\n" + "\n" + "Options:\n" + " -t Just show the type of each file\n" + " --type TYPE Override the detected file type\n" + " Use \"--type help\" for a list\n" + "Type-specific options:\n" + " -k|--publickey FILE.vbpubk Public key in vb1 format\n" + " --pubkey FILE.vpubk2 Public key in vb2 format\n" + " -f|--fv FILE Verify this payload (FW_MAIN_A/B)\n" + " --pad NUM Kernel vblock padding size\n" + " --strict " + "Fail unless all signatures are valid\n" + "\n"; + +static void print_help(int argc, char *argv[]) +{ + if (!strcmp(argv[0], "verify")) + printf("\nUsage: " MYNAME " %s [OPTIONS] FILE [...]\n\n" + "This is just an alias for\n\n" + " " MYNAME " show --strict\n\n", + argv[0]); + + printf(usage, "show"); +} + +static const struct option long_opts[] = { + /* name hasarg *flag val */ + {"publickey", 1, 0, 'k'}, + {"fv", 1, 0, 'f'}, + {"pad", 1, NULL, OPT_PADDING}, + {"type", 1, NULL, OPT_TYPE}, + {"strict", 0, &show_option.strict, 1}, + {"pubkey", 1, NULL, OPT_PUBKEY}, + {"help", 0, NULL, OPT_HELP}, + {NULL, 0, NULL, 0}, +}; +static const char *short_opts = ":f:k:t"; + + +static int show_type(char *filename) +{ + enum futil_file_err err; + enum futil_file_type type; + err = futil_file_type(filename, &type); + switch (err) { + case FILE_ERR_NONE: + printf("%s:\t%s\n", filename, futil_file_type_name(type)); + /* Only our recognized types return success */ + return 0; + case FILE_ERR_DIR: + printf("%s:\t%s\n", filename, "directory"); + break; + case FILE_ERR_CHR: + printf("%s:\t%s\n", filename, "character special"); + break; + case FILE_ERR_FIFO: + printf("%s:\t%s\n", filename, "FIFO"); + break; + case FILE_ERR_SOCK: + printf("%s:\t%s\n", filename, "socket"); + break; + default: + break; + } + /* Everything else is an error */ + return 1; +} + +static int do_show(int argc, char *argv[]) +{ + uint8_t *pubkbuf = NULL; + struct vb2_public_key pubk2; + char *infile = 0; + int ifd, i; + int errorcnt = 0; + uint8_t *buf; + uint32_t len; + char *e = 0; + int type_override = 0; + enum futil_file_type type; + + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + opterr = 0; /* quiet, you */ + while ((i = getopt_long(argc, argv, short_opts, long_opts, 0)) != -1) { + switch (i) { + case 'f': + show_option.fv = ReadFile(optarg, + &show_option.fv_size); + if (!show_option.fv) { + fprintf(stderr, "Error reading %s: %s\n", + optarg, strerror(errno)); + errorcnt++; + } + break; + case 'k': + if (VB2_SUCCESS != + vb2_read_file(optarg, &pubkbuf, &len)) { + fprintf(stderr, "Error reading %s\n", optarg); + errorcnt++; + break; + } + + if (VB2_SUCCESS != + vb2_unpack_key_buffer(&pubk2, pubkbuf, len)) { + fprintf(stderr, "Error unpacking %s\n", optarg); + errorcnt++; + break; + } + + show_option.k = &pubk2; + break; + case 't': + show_option.t_flag = 1; + break; + case OPT_PADDING: + show_option.padding = strtoul(optarg, &e, 0); + if (!*optarg || (e && *e)) { + fprintf(stderr, + "Invalid --padding \"%s\"\n", optarg); + errorcnt++; + } + break; + case OPT_TYPE: + if (!futil_str_to_file_type(optarg, + &show_option.type)) { + if (!strcasecmp("help", optarg)) + print_file_types_and_exit(errorcnt); + fprintf(stderr, + "Invalid --type \"%s\"\n", optarg); + errorcnt++; + } + type_override = 1; + break; + case OPT_PUBKEY: + if (vb21_packed_key_read(&show_option.pkey, optarg)) { + fprintf(stderr, "Error reading %s\n", optarg); + errorcnt++; + } + break; + case OPT_HELP: + print_help(argc, argv); + return !!errorcnt; + + case '?': + if (optopt) + fprintf(stderr, "Unrecognized option: -%c\n", + optopt); + else + fprintf(stderr, "Unrecognized option\n"); + errorcnt++; + break; + case ':': + fprintf(stderr, "Missing argument to -%c\n", optopt); + errorcnt++; + break; + case 0: /* handled option */ + break; + default: + FATAL("Unrecognized getopt output: %d\n", i); + } + } + + if (errorcnt) { + print_help(argc, argv); + return 1; + } + + if (argc - optind < 1) { + fprintf(stderr, "ERROR: missing input filename\n"); + print_help(argc, argv); + return 1; + } + + if (show_option.t_flag) { + for (i = optind; i < argc; i++) + errorcnt += show_type(argv[i]); + goto done; + } + + for (i = optind; i < argc; i++) { + infile = argv[i]; + ifd = open(infile, O_RDONLY); + if (ifd < 0) { + errorcnt++; + fprintf(stderr, "Can't open %s: %s\n", + infile, strerror(errno)); + continue; + } + + if (0 != futil_map_file(ifd, MAP_RO, &buf, &len)) { + errorcnt++; + goto boo; + } + + /* Allow the user to override the type */ + if (type_override) + type = show_option.type; + else + type = futil_file_type_buf(buf, len); + + errorcnt += futil_file_type_show(type, infile, buf, len); + + errorcnt += futil_unmap_file(ifd, MAP_RO, buf, len); +boo: + if (close(ifd)) { + errorcnt++; + fprintf(stderr, "Error when closing %s: %s\n", + infile, strerror(errno)); + } + } + +done: + if (pubkbuf) + free(pubkbuf); + if (show_option.fv) + free(show_option.fv); + + return !!errorcnt; +} + +DECLARE_FUTIL_COMMAND(show, do_show, VBOOT_VERSION_ALL, + "Display the content of various binary components"); + +static int do_verify(int argc, char *argv[]) +{ + show_option.strict = 1; + return do_show(argc, argv); +} + +DECLARE_FUTIL_COMMAND(verify, do_verify, + VBOOT_VERSION_ALL, + "Verify the signatures of various binary components"); diff --git a/futility/cmd_sign.c b/futility/cmd_sign.c new file mode 100644 index 0000000..be8b634 --- /dev/null +++ b/futility/cmd_sign.c @@ -0,0 +1,1073 @@ +/* Copyright 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "2common.h" +#include "file_type.h" +#include "file_type_bios.h" +#include "futility.h" +#include "futility_options.h" +#include "host_common.h" +#include "host_common21.h" +#include "host_key21.h" +#include "kernel_blob.h" +#include "util_misc.h" +#include "vb1_helper.h" + +/* Options */ +struct sign_option_s sign_option = { + .version = 1, + .arch = ARCH_UNSPECIFIED, + .kloadaddr = CROS_32BIT_ENTRY_ADDR, + .padding = 65536, + .type = FILE_TYPE_UNKNOWN, + .hash_alg = VB2_HASH_SHA256, /* default */ + .ro_size = 0xffffffff, + .rw_size = 0xffffffff, + .ro_offset = 0xffffffff, + .rw_offset = 0xffffffff, + .sig_size = 1024, +}; + +/* Helper to complain about invalid args. Returns num errors discovered */ +static int no_opt_if(int expr, const char *optname) +{ + if (expr) { + fprintf(stderr, "Missing --%s option\n", optname); + return 1; + } + return 0; +} + +/* This wraps/signs a public key, producing a keyblock. */ +int ft_sign_pubkey(const char *name, uint8_t *buf, uint32_t len, void *data) +{ + struct vb2_packed_key *data_key = (struct vb2_packed_key *)buf; + struct vb2_keyblock *block; + + if (vb2_packed_key_looks_ok(data_key, len)) { + fprintf(stderr, "Public key looks bad.\n"); + return 1; + } + + if (sign_option.pem_signpriv) { + if (sign_option.pem_external) { + /* External signing uses the PEM file directly. */ + block = vb2_create_keyblock_external( + data_key, + sign_option.pem_signpriv, + sign_option.pem_algo, + sign_option.flags, + sign_option.pem_external); + } else { + sign_option.signprivate = vb2_read_private_key_pem( + sign_option.pem_signpriv, + sign_option.pem_algo); + if (!sign_option.signprivate) { + fprintf(stderr, + "Unable to read PEM signing key: %s\n", + strerror(errno)); + return 1; + } + block = vb2_create_keyblock(data_key, + sign_option.signprivate, + sign_option.flags); + } + } else { + /* Not PEM. Should already have a signing key. */ + block = vb2_create_keyblock(data_key, sign_option.signprivate, + sign_option.flags); + } + + /* Write it out */ + return WriteSomeParts(sign_option.outfile, + block, block->keyblock_size, + NULL, 0); +} + +int ft_sign_raw_kernel(const char *name, uint8_t *buf, uint32_t len, + void *data) +{ + uint8_t *vmlinuz_data, *kblob_data, *vblock_data; + uint32_t vmlinuz_size, kblob_size, vblock_size; + int rv; + + vmlinuz_data = buf; + vmlinuz_size = len; + + kblob_data = CreateKernelBlob( + vmlinuz_data, vmlinuz_size, + sign_option.arch, sign_option.kloadaddr, + sign_option.config_data, sign_option.config_size, + sign_option.bootloader_data, sign_option.bootloader_size, + &kblob_size); + if (!kblob_data) { + fprintf(stderr, "Unable to create kernel blob\n"); + return 1; + } + VB2_DEBUG("kblob_size = %#x\n", kblob_size); + + vblock_data = SignKernelBlob(kblob_data, kblob_size, + sign_option.padding, + sign_option.version, + sign_option.kloadaddr, + sign_option.keyblock, + sign_option.signprivate, + sign_option.flags, &vblock_size); + if (!vblock_data) { + fprintf(stderr, "Unable to sign kernel blob\n"); + free(kblob_data); + return 1; + } + VB2_DEBUG("vblock_size = %#x\n", vblock_size); + + /* We should be creating a completely new output file. + * If not, something's wrong. */ + if (!sign_option.create_new_outfile) + FATAL("create_new_outfile should be selected\n"); + + if (sign_option.vblockonly) + rv = WriteSomeParts(sign_option.outfile, + vblock_data, vblock_size, + NULL, 0); + else + rv = WriteSomeParts(sign_option.outfile, + vblock_data, vblock_size, + kblob_data, kblob_size); + + free(vblock_data); + free(kblob_data); + return rv; +} + +int ft_sign_kern_preamble(const char *name, uint8_t *buf, uint32_t len, + void *data) +{ + uint8_t *kpart_data, *kblob_data, *vblock_data; + uint32_t kpart_size, kblob_size, vblock_size; + struct vb2_keyblock *keyblock = NULL; + struct vb2_kernel_preamble *preamble = NULL; + int rv = 0; + + kpart_data = buf; + kpart_size = len; + + /* Note: This just sets some static pointers. It doesn't malloc. */ + kblob_data = unpack_kernel_partition(kpart_data, kpart_size, + sign_option.padding, + &keyblock, &preamble, &kblob_size); + + if (!kblob_data) { + fprintf(stderr, "Unable to unpack kernel partition\n"); + return 1; + } + + /* + * We don't let --kloadaddr change when resigning, because the original + * vbutil_kernel program didn't do it right. Since obviously no one + * ever noticed, we'll maintain bug-compatibility by just not allowing + * it here either. To enable it, we'd need to update the zeropage + * table's cmd_line_ptr as well as the preamble. + */ + sign_option.kloadaddr = preamble->body_load_address; + + /* Replace the config if asked */ + if (sign_option.config_data && + 0 != UpdateKernelBlobConfig(kblob_data, kblob_size, + sign_option.config_data, + sign_option.config_size)) { + fprintf(stderr, "Unable to update config\n"); + return 1; + } + + /* Preserve the version unless a new one is given */ + if (!sign_option.version_specified) + sign_option.version = preamble->kernel_version; + + /* Preserve the flags if not specified */ + uint32_t kernel_flags = vb2_kernel_get_flags(preamble); + if (sign_option.flags_specified == 0) + sign_option.flags = kernel_flags; + + /* Replace the keyblock if asked */ + if (sign_option.keyblock) + keyblock = sign_option.keyblock; + + /* Compute the new signature */ + vblock_data = SignKernelBlob(kblob_data, kblob_size, + sign_option.padding, + sign_option.version, + sign_option.kloadaddr, + keyblock, + sign_option.signprivate, + sign_option.flags, + &vblock_size); + if (!vblock_data) { + fprintf(stderr, "Unable to sign kernel blob\n"); + return 1; + } + VB2_DEBUG("vblock_size = %#x\n", vblock_size); + + if (sign_option.create_new_outfile) { + /* Write out what we've been asked for */ + if (sign_option.vblockonly) + rv = WriteSomeParts(sign_option.outfile, + vblock_data, vblock_size, + NULL, 0); + else + rv = WriteSomeParts(sign_option.outfile, + vblock_data, vblock_size, + kblob_data, kblob_size); + } else { + /* If we're modifying an existing file, it's mmap'ed so that + * all our modifications to the buffer will get flushed to + * disk when we close it. */ + memcpy(kpart_data, vblock_data, vblock_size); + } + + free(vblock_data); + return rv; +} + + +int ft_sign_raw_firmware(const char *name, uint8_t *buf, uint32_t len, + void *data) +{ + struct vb2_signature *body_sig; + struct vb2_fw_preamble *preamble; + int rv; + + body_sig = vb2_calculate_signature(buf, len, sign_option.signprivate); + if (!body_sig) { + fprintf(stderr, "Error calculating body signature\n"); + return 1; + } + + preamble = vb2_create_fw_preamble( + sign_option.version, + (struct vb2_packed_key *)sign_option.kernel_subkey, + body_sig, + sign_option.signprivate, + sign_option.flags); + if (!preamble) { + fprintf(stderr, "Error creating firmware preamble.\n"); + free(body_sig); + return 1; + } + + rv = WriteSomeParts(sign_option.outfile, + sign_option.keyblock, + sign_option.keyblock->keyblock_size, + preamble, preamble->preamble_size); + + free(preamble); + free(body_sig); + + return rv; +} + +static const char usage_pubkey[] = "\n" + "To sign a public key / create a new keyblock:\n" + "\n" + "Required PARAMS:\n" + " [--datapubkey] INFILE The public key to wrap\n" + " [--outfile] OUTFILE The resulting keyblock\n" + "\n" + "Optional PARAMS:\n" + " A private signing key, specified as either\n" + " -s|--signprivate FILE.vbprivk Signing key in .vbprivk format\n" + " Or\n" + " --pem_signpriv FILE.pem Signing key in PEM format...\n" + " --pem_algo NUM AND the algorithm to use (0 - %d)\n" + "\n" + " If a signing key is not given, the keyblock will not be signed." + "\n\n" + "And these, too:\n\n" + " -f|--flags NUM Flags specifying use conditions\n" + " --pem_external PROGRAM" + " External program to compute the signature\n" + " (requires a PEM signing key)\n" + "\n"; +static void print_help_pubkey(int argc, char *argv[]) +{ + printf(usage_pubkey, VB2_ALG_COUNT - 1); +} + + +static const char usage_fw_main[] = "\n" + "To sign a raw firmware blob (FW_MAIN_A/B):\n" + "\n" + "Required PARAMS:\n" + " -s|--signprivate FILE.vbprivk The private firmware data key\n" + " -b|--keyblock FILE.keyblock The keyblock containing the\n" + " public firmware data key\n" + " -k|--kernelkey FILE.vbpubk The public kernel subkey\n" + " -v|--version NUM The firmware version number\n" + " [--fv] INFILE" + " The raw firmware blob (FW_MAIN_A/B)\n" + " [--outfile] OUTFILE Output VBLOCK_A/B\n" + "\n" + "Optional PARAMS:\n" + " -f|--flags NUM The preamble flags value" + " (default is 0)\n" + "\n"; +static void print_help_raw_firmware(int argc, char *argv[]) +{ + puts(usage_fw_main); +} + +static const char usage_bios[] = "\n" + "To sign a complete firmware image (bios.bin):\n" + "\n" + "Required PARAMS:\n" + " -s|--signprivate FILE.vbprivk The private firmware data key\n" + " -b|--keyblock FILE.keyblock The keyblock containing the\n" + " public firmware data key\n" + " -k|--kernelkey FILE.vbpubk The public kernel subkey\n" + " [--infile] INFILE Input firmware image (modified\n" + " in place if no OUTFILE given)\n" + "\n" + "These are required if the A and B firmware differ:\n" + " -S|--devsign FILE.vbprivk The DEV private firmware data key\n" + " -B|--devkeyblock FILE.keyblock The keyblock containing the\n" + " DEV public firmware data key\n" + "\n" + "Optional PARAMS:\n" + " -v|--version NUM The firmware version number" + " (default %d)\n" + " -f|--flags NUM The preamble flags value" + " (default is\n" + " unchanged, or 0 if unknown)\n" + " -d|--loemdir DIR Local OEM output vblock directory\n" + " -l|--loemid STRING Local OEM vblock suffix\n" + " [--outfile] OUTFILE Output firmware image\n" + "\n"; +static void print_help_bios_image(int argc, char *argv[]) +{ + printf(usage_bios, sign_option.version); +} + +static const char usage_new_kpart[] = "\n" + "To create a new kernel partition image (/dev/sda2, /dev/mmcblk0p2):\n" + "\n" + "Required PARAMS:\n" + " -s|--signprivate FILE.vbprivk" + " The private key to sign the kernel blob\n" + " -b|--keyblock FILE.keyblock Keyblock containing the public\n" + " key to verify the kernel blob\n" + " -v|--version NUM The kernel version number\n" + " --bootloader FILE Bootloader stub\n" + " --config FILE The kernel commandline file\n" + " --arch ARCH The CPU architecture (one of\n" + " x86|amd64, arm|aarch64, mips)\n" + " [--vmlinuz] INFILE Linux kernel bzImage file\n" + " [--outfile] OUTFILE Output kernel partition or vblock\n" + "\n" + "Optional PARAMS:\n" + " --kloadaddr NUM" + " RAM address to load the kernel body\n" + " (default %#x)\n" + " --pad NUM The vblock padding size in bytes\n" + " (default %#x)\n" + " --vblockonly Emit just the vblock (requires a\n" + " distinct outfile)\n" + " -f|--flags NUM The preamble flags value\n" + "\n"; +static void print_help_raw_kernel(int argc, char *argv[]) +{ + printf(usage_new_kpart, sign_option.kloadaddr, sign_option.padding); +} + +static const char usage_old_kpart[] = "\n" + "To resign an existing kernel partition (/dev/sda2, /dev/mmcblk0p2):\n" + "\n" + "Required PARAMS:\n" + " -s|--signprivate FILE.vbprivk" + " The private key to sign the kernel blob\n" + " [--infile] INFILE Input kernel partition (modified\n" + " in place if no OUTFILE given)\n" + "\n" + "Optional PARAMS:\n" + " -b|--keyblock FILE.keyblock Keyblock containing the public\n" + " key to verify the kernel blob\n" + " -v|--version NUM The kernel version number\n" + " --config FILE The kernel commandline file\n" + " --pad NUM The vblock padding size in bytes\n" + " (default %#x)\n" + " [--outfile] OUTFILE Output kernel partition or vblock\n" + " --vblockonly Emit just the vblock (requires a\n" + " distinct OUTFILE)\n" + " -f|--flags NUM The preamble flags value\n" + "\n"; +static void print_help_kern_preamble(int argc, char *argv[]) +{ + printf(usage_old_kpart, sign_option.padding); +} + +static void print_help_usbpd1(int argc, char *argv[]) +{ + enum vb2_hash_algorithm algo; + + printf("\n" + "Usage: " MYNAME " %s --type %s [options] INFILE [OUTFILE]\n" + "\n" + "This signs a %s.\n" + "\n" + "The INFILE is assumed to consist of equal-sized RO and RW" + " sections,\n" + "with the public key at the end of of the RO section and the" + " signature\n" + "at the end of the RW section (both in an opaque binary" + " format).\n" + "Signing the image will update both binary blobs, so both" + " public and\n" + "private keys are required.\n" + "\n" + "The signing key is specified with:\n" + "\n" + " --pem " + "FILE Signing keypair in PEM format\n" + "\n" + " --hash_alg " + "NUM Hash algorithm to use:\n", + argv[0], + futil_file_type_name(FILE_TYPE_USBPD1), + futil_file_type_desc(FILE_TYPE_USBPD1)); + for (algo = 0; algo < VB2_HASH_ALG_COUNT; algo++) { + const char *name = vb2_get_hash_algorithm_name(algo); + if (strcmp(name, VB2_INVALID_ALG_NAME) != 0) + printf(" %d / %s%s\n", + algo, name, + algo == VB2_HASH_SHA256 ? " (default)" : ""); + } + printf("\n" + "The size and offset assumptions can be overridden. " + "All numbers are in bytes.\n" + "Specify a size of 0 to ignore that section.\n" + "\n" + " --ro_size NUM" + " Size of the RO section (default half)\n" + " --rw_size NUM" + " Size of the RW section (default half)\n" + " --ro_offset NUM" + " Start of the RO section (default 0)\n" + " --rw_offset NUM" + " Start of the RW section (default half)\n" + "\n"); +} + +static void print_help_rwsig(int argc, char *argv[]) +{ + printf("\n" + "Usage: " MYNAME " %s --type %s [options] INFILE [OUTFILE]\n" + "\n" + "This signs a %s.\n" + "\n" + "Data only mode\n" + "This mode requires OUTFILE.\n" + "The INFILE is a binary blob of arbitrary size. It is signed using the\n" + "private key and the vb21_signature blob emitted.\n" + "\n" + "Data + Signature mode\n" + "If no OUTFILE is specified, the INFILE should contain an existing\n" + "vb21_signature blob near its end. The data_size from that signature is\n" + "used to re-sign a portion of the INFILE, and the old signature blob is\n" + "replaced.\n" + "\n" + "Key + Data + Signature mode\n" + "This mode also takes no output file.\n" + "If INFILE contains an FMAP, RW and signatures offsets are read from\n" + "FMAP. These regions must be named EC_RW and SIG_RW respectively.\n" + "If a public key is found in the region named KEY_RO, it will be replaced\n" + "in the RO image. This mode also produces EC_RW.bin which is a EC_RW\n" + "region image (same as the input file for 'Data + Signature mode').\n" + "\n" + "Options:\n" + "\n" + " --prikey FILE.vbprik2 Private key in vb2 format. Required\n" + " if INFILE is a binary blob. If not\n" + " provided, previous signature is copied\n" + " and a public key won't be replaced.\n" + " --version NUM Public key version if we are replacing\n" + " the key in INFILE (default: 1)\n" + " --sig_size NUM Offset from the end of INFILE where the\n" + " signature blob should be located, if\n" + " the file does not contain an FMAP.\n" + " (default 1024 bytes)\n" + " --data_size NUM Number of bytes of INFILE to sign\n" + "\n", + argv[0], + futil_file_type_name(FILE_TYPE_RWSIG), + futil_file_type_desc(FILE_TYPE_RWSIG)); +} + +static void (*help_type[NUM_FILE_TYPES])(int argc, char *argv[]) = { + [FILE_TYPE_PUBKEY] = &print_help_pubkey, + [FILE_TYPE_RAW_FIRMWARE] = &print_help_raw_firmware, + [FILE_TYPE_BIOS_IMAGE] = &print_help_bios_image, + [FILE_TYPE_RAW_KERNEL] = &print_help_raw_kernel, + [FILE_TYPE_KERN_PREAMBLE] = &print_help_kern_preamble, + [FILE_TYPE_USBPD1] = &print_help_usbpd1, + [FILE_TYPE_RWSIG] = &print_help_rwsig, +}; + +static const char usage_default[] = "\n" + "Usage: " MYNAME " %s [PARAMS] INFILE [OUTFILE]\n" + "\n" + "The following signing operations are supported:\n" + "\n" + " INFILE OUTFILE\n" + " public key (.vbpubk) keyblock\n" + " raw firmware blob (FW_MAIN_A/B) firmware preamble (VBLOCK_A/B)\n" + " full firmware image (bios.bin) same, or signed in-place\n" + " raw linux kernel (vmlinuz) kernel partition image\n" + " kernel partition (/dev/sda2) same, or signed in-place\n" + " usbpd1 firmware image same, or signed in-place\n" + " RW device image same, or signed in-place\n" + "\n" + "For more information, use \"" MYNAME " help %s TYPE\", where\n" + "TYPE is one of:\n\n"; +static void print_help_default(int argc, char *argv[]) +{ + enum futil_file_type type; + + printf(usage_default, argv[0], argv[0]); + for (type = 0; type < NUM_FILE_TYPES; type++) + if (help_type[type]) + printf(" %s", futil_file_type_name(type)); + printf("\n\n"); +} + +static void print_help(int argc, char *argv[]) +{ + enum futil_file_type type = FILE_TYPE_UNKNOWN; + + if (argc > 1) + futil_str_to_file_type(argv[1], &type); + + if (help_type[type]) + help_type[type](argc, argv); + else + print_help_default(argc, argv); +} + +enum no_short_opts { + OPT_FV = 1000, + OPT_INFILE, + OPT_OUTFILE, + OPT_BOOTLOADER, + OPT_CONFIG, + OPT_ARCH, + OPT_KLOADADDR, + OPT_PADDING, + OPT_PEM_SIGNPRIV, + OPT_PEM_ALGO, + OPT_PEM_EXTERNAL, + OPT_TYPE, + OPT_HASH_ALG, + OPT_RO_SIZE, + OPT_RW_SIZE, + OPT_RO_OFFSET, + OPT_RW_OFFSET, + OPT_DATA_SIZE, + OPT_SIG_SIZE, + OPT_PRIKEY, + OPT_HELP, +}; + +static const struct option long_opts[] = { + /* name hasarg *flag val */ + {"signprivate", 1, NULL, 's'}, + {"keyblock", 1, NULL, 'b'}, + {"kernelkey", 1, NULL, 'k'}, + {"devsign", 1, NULL, 'S'}, + {"devkeyblock", 1, NULL, 'B'}, + {"version", 1, NULL, 'v'}, + {"flags", 1, NULL, 'f'}, + {"loemdir", 1, NULL, 'd'}, + {"loemid", 1, NULL, 'l'}, + {"fv", 1, NULL, OPT_FV}, + {"infile", 1, NULL, OPT_INFILE}, + {"datapubkey", 1, NULL, OPT_INFILE}, /* alias */ + {"vmlinuz", 1, NULL, OPT_INFILE}, /* alias */ + {"outfile", 1, NULL, OPT_OUTFILE}, + {"bootloader", 1, NULL, OPT_BOOTLOADER}, + {"config", 1, NULL, OPT_CONFIG}, + {"arch", 1, NULL, OPT_ARCH}, + {"kloadaddr", 1, NULL, OPT_KLOADADDR}, + {"pad", 1, NULL, OPT_PADDING}, + {"pem_signpriv", 1, NULL, OPT_PEM_SIGNPRIV}, + {"pem", 1, NULL, OPT_PEM_SIGNPRIV}, /* alias */ + {"pem_algo", 1, NULL, OPT_PEM_ALGO}, + {"pem_external", 1, NULL, OPT_PEM_EXTERNAL}, + {"type", 1, NULL, OPT_TYPE}, + {"vblockonly", 0, &sign_option.vblockonly, 1}, + {"hash_alg", 1, NULL, OPT_HASH_ALG}, + {"ro_size", 1, NULL, OPT_RO_SIZE}, + {"rw_size", 1, NULL, OPT_RW_SIZE}, + {"ro_offset", 1, NULL, OPT_RO_OFFSET}, + {"rw_offset", 1, NULL, OPT_RW_OFFSET}, + {"data_size", 1, NULL, OPT_DATA_SIZE}, + {"sig_size", 1, NULL, OPT_SIG_SIZE}, + {"prikey", 1, NULL, OPT_PRIKEY}, + {"privkey", 1, NULL, OPT_PRIKEY}, /* alias */ + {"help", 0, NULL, OPT_HELP}, + {NULL, 0, NULL, 0}, +}; +static const char *short_opts = ":s:b:k:S:B:v:f:d:l:"; + +/* Return zero on success */ +static int parse_number_opt(const char *arg, const char *name, uint32_t *dest) +{ + char *e; + uint32_t val = strtoul(arg, &e, 0); + if (!*arg || (e && *e)) { + fprintf(stderr, "Invalid --%s \"%s\"\n", name, arg); + return 1; + } + *dest = val; + return 0; +} + +static int do_sign(int argc, char *argv[]) +{ + char *infile = 0; + int i; + int ifd = -1; + int errorcnt = 0; + uint8_t *buf; + uint32_t buf_len; + char *e = 0; + int mapping; + int helpind = 0; + int longindex; + + opterr = 0; /* quiet, you */ + while ((i = getopt_long(argc, argv, short_opts, long_opts, + &longindex)) != -1) { + switch (i) { + case 's': + sign_option.signprivate = vb2_read_private_key(optarg); + if (!sign_option.signprivate) { + fprintf(stderr, "Error reading %s\n", optarg); + errorcnt++; + } + break; + case 'b': + sign_option.keyblock = vb2_read_keyblock(optarg); + if (!sign_option.keyblock) { + fprintf(stderr, "Error reading %s\n", optarg); + errorcnt++; + } + break; + case 'k': + sign_option.kernel_subkey = vb2_read_packed_key(optarg); + if (!sign_option.kernel_subkey) { + fprintf(stderr, "Error reading %s\n", optarg); + errorcnt++; + } + break; + case 'S': + sign_option.devsignprivate = + vb2_read_private_key(optarg); + if (!sign_option.devsignprivate) { + fprintf(stderr, "Error reading %s\n", optarg); + errorcnt++; + } + break; + case 'B': + sign_option.devkeyblock = vb2_read_keyblock(optarg); + if (!sign_option.devkeyblock) { + fprintf(stderr, "Error reading %s\n", optarg); + errorcnt++; + } + break; + case 'v': + sign_option.version_specified = 1; + sign_option.version = strtoul(optarg, &e, 0); + if (!*optarg || (e && *e)) { + fprintf(stderr, + "Invalid --version \"%s\"\n", optarg); + errorcnt++; + } + break; + + case 'f': + sign_option.flags_specified = 1; + errorcnt += parse_number_opt(optarg, "flags", + &sign_option.flags); + break; + case 'd': + sign_option.loemdir = optarg; + break; + case 'l': + sign_option.loemid = optarg; + break; + case OPT_FV: + sign_option.fv_specified = 1; + VBOOT_FALLTHROUGH; + case OPT_INFILE: + sign_option.inout_file_count++; + infile = optarg; + break; + case OPT_OUTFILE: + sign_option.inout_file_count++; + sign_option.outfile = optarg; + break; + case OPT_BOOTLOADER: + sign_option.bootloader_data = ReadFile( + optarg, &sign_option.bootloader_size); + if (!sign_option.bootloader_data) { + fprintf(stderr, + "Error reading bootloader file: %s\n", + strerror(errno)); + errorcnt++; + } + VB2_DEBUG("bootloader file size=0x%" PRIx64 "\n", + sign_option.bootloader_size); + break; + case OPT_CONFIG: + sign_option.config_data = ReadConfigFile( + optarg, &sign_option.config_size); + if (!sign_option.config_data) { + fprintf(stderr, + "Error reading config file: %s\n", + strerror(errno)); + errorcnt++; + } + break; + case OPT_ARCH: + /* check the first 3 characters to also match x86_64 */ + if ((!strncasecmp(optarg, "x86", 3)) || + (!strcasecmp(optarg, "amd64"))) + sign_option.arch = ARCH_X86; + else if ((!strcasecmp(optarg, "arm")) || + (!strcasecmp(optarg, "aarch64"))) + sign_option.arch = ARCH_ARM; + else if (!strcasecmp(optarg, "mips")) + sign_option.arch = ARCH_MIPS; + else { + fprintf(stderr, + "Unknown architecture: \"%s\"\n", + optarg); + errorcnt++; + } + break; + case OPT_KLOADADDR: + errorcnt += parse_number_opt(optarg, "kloadaddr", + &sign_option.kloadaddr); + break; + case OPT_PADDING: + errorcnt += parse_number_opt(optarg, "padding", + &sign_option.padding); + break; + case OPT_RO_SIZE: + errorcnt += parse_number_opt(optarg, "ro_size", + &sign_option.ro_size); + break; + case OPT_RW_SIZE: + errorcnt += parse_number_opt(optarg, "rw_size", + &sign_option.rw_size); + break; + case OPT_RO_OFFSET: + errorcnt += parse_number_opt(optarg, "ro_offset", + &sign_option.ro_offset); + break; + case OPT_RW_OFFSET: + errorcnt += parse_number_opt(optarg, "rw_offset", + &sign_option.rw_offset); + break; + case OPT_DATA_SIZE: + errorcnt += parse_number_opt(optarg, "data_size", + &sign_option.data_size); + break; + case OPT_SIG_SIZE: + errorcnt += parse_number_opt(optarg, "sig_size", + &sign_option.sig_size); + break; + case OPT_PEM_SIGNPRIV: + sign_option.pem_signpriv = optarg; + break; + case OPT_PEM_ALGO: + sign_option.pem_algo_specified = 1; + sign_option.pem_algo = strtoul(optarg, &e, 0); + if (!*optarg || (e && *e) || + (sign_option.pem_algo >= VB2_ALG_COUNT)) { + fprintf(stderr, + "Invalid --pem_algo \"%s\"\n", optarg); + errorcnt++; + } + break; + case OPT_HASH_ALG: + if (!vb2_lookup_hash_alg(optarg, + &sign_option.hash_alg)) { + fprintf(stderr, + "invalid hash_alg \"%s\"\n", optarg); + errorcnt++; + } + break; + case OPT_PEM_EXTERNAL: + sign_option.pem_external = optarg; + break; + case OPT_TYPE: + if (!futil_str_to_file_type(optarg, + &sign_option.type)) { + if (!strcasecmp("help", optarg)) + print_file_types_and_exit(errorcnt); + fprintf(stderr, + "Invalid --type \"%s\"\n", optarg); + errorcnt++; + } + break; + case OPT_PRIKEY: + if (vb21_private_key_read(&sign_option.prikey, + optarg)) { + fprintf(stderr, "Error reading %s\n", optarg); + errorcnt++; + } + break; + case OPT_HELP: + helpind = optind - 1; + break; + + case '?': + if (optopt) + fprintf(stderr, "Unrecognized option: -%c\n", + optopt); + else + fprintf(stderr, "Unrecognized option: %s\n", + argv[optind - 1]); + errorcnt++; + break; + case ':': + fprintf(stderr, "Missing argument to -%c\n", optopt); + errorcnt++; + break; + case 0: /* handled option */ + break; + default: + FATAL("Unrecognized getopt output: %d\n", i); + } + } + + if (helpind) { + /* Skip all the options we've already parsed */ + optind--; + argv[optind] = argv[0]; + argc -= optind; + argv += optind; + print_help(argc, argv); + return !!errorcnt; + } + + /* If we don't have an input file already, we need one */ + if (!infile) { + if (argc - optind <= 0) { + errorcnt++; + fprintf(stderr, "ERROR: missing input filename\n"); + goto done; + } else { + sign_option.inout_file_count++; + infile = argv[optind++]; + } + } + + /* Look for an output file if we don't have one, just in case. */ + if (!sign_option.outfile && argc - optind > 0) { + sign_option.inout_file_count++; + sign_option.outfile = argv[optind++]; + } + + /* What are we looking at? */ + if (sign_option.type == FILE_TYPE_UNKNOWN && + futil_file_type(infile, &sign_option.type)) { + errorcnt++; + goto done; + } + + /* We may be able to infer the type based on the other args */ + if (sign_option.type == FILE_TYPE_UNKNOWN) { + if (sign_option.bootloader_data || sign_option.config_data + || sign_option.arch != ARCH_UNSPECIFIED) + sign_option.type = FILE_TYPE_RAW_KERNEL; + else if (sign_option.kernel_subkey || sign_option.fv_specified) + sign_option.type = FILE_TYPE_RAW_FIRMWARE; + } + + VB2_DEBUG("type=%s\n", futil_file_type_name(sign_option.type)); + + /* Check the arguments for the type of thing we want to sign */ + switch (sign_option.type) { + case FILE_TYPE_PUBKEY: + sign_option.create_new_outfile = 1; + if (sign_option.signprivate && sign_option.pem_signpriv) { + fprintf(stderr, + "Only one of --signprivate and --pem_signpriv" + " can be specified\n"); + errorcnt++; + } + if ((sign_option.signprivate && + sign_option.pem_algo_specified) || + (sign_option.pem_signpriv && + !sign_option.pem_algo_specified)) { + fprintf(stderr, "--pem_algo must be used with" + " --pem_signpriv\n"); + errorcnt++; + } + if (sign_option.pem_external && !sign_option.pem_signpriv) { + fprintf(stderr, "--pem_external must be used with" + " --pem_signpriv\n"); + errorcnt++; + } + /* We'll wait to read the PEM file, since the external signer + * may want to read it instead. */ + break; + case FILE_TYPE_BIOS_IMAGE: + case FILE_TYPE_OLD_BIOS_IMAGE: + errorcnt += no_opt_if(!sign_option.signprivate, "signprivate"); + errorcnt += no_opt_if(!sign_option.keyblock, "keyblock"); + errorcnt += no_opt_if(!sign_option.kernel_subkey, "kernelkey"); + break; + case FILE_TYPE_KERN_PREAMBLE: + errorcnt += no_opt_if(!sign_option.signprivate, "signprivate"); + if (sign_option.vblockonly || sign_option.inout_file_count > 1) + sign_option.create_new_outfile = 1; + break; + case FILE_TYPE_RAW_FIRMWARE: + sign_option.create_new_outfile = 1; + errorcnt += no_opt_if(!sign_option.signprivate, "signprivate"); + errorcnt += no_opt_if(!sign_option.keyblock, "keyblock"); + errorcnt += no_opt_if(!sign_option.kernel_subkey, "kernelkey"); + errorcnt += no_opt_if(!sign_option.version_specified, + "version"); + break; + case FILE_TYPE_RAW_KERNEL: + sign_option.create_new_outfile = 1; + errorcnt += no_opt_if(!sign_option.signprivate, "signprivate"); + errorcnt += no_opt_if(!sign_option.keyblock, "keyblock"); + errorcnt += no_opt_if(!sign_option.version_specified, + "version"); + errorcnt += no_opt_if(!sign_option.bootloader_data, + "bootloader"); + errorcnt += no_opt_if(!sign_option.config_data, "config"); + errorcnt += no_opt_if(sign_option.arch == ARCH_UNSPECIFIED, + "arch"); + break; + case FILE_TYPE_USBPD1: + errorcnt += no_opt_if(!sign_option.pem_signpriv, "pem"); + errorcnt += no_opt_if(sign_option.hash_alg == VB2_HASH_INVALID, + "hash_alg"); + break; + case FILE_TYPE_RWSIG: + if (sign_option.inout_file_count > 1) + /* Signing raw data. No signature pre-exists. */ + errorcnt += no_opt_if(!sign_option.prikey, "prikey"); + break; + default: + /* Anything else we don't care */ + break; + } + + VB2_DEBUG("infile=%s\n", infile); + VB2_DEBUG("sign_option.inout_file_count=%d\n", + sign_option.inout_file_count); + VB2_DEBUG("sign_option.create_new_outfile=%d\n", + sign_option.create_new_outfile); + + /* Make sure we have an output file if one is needed */ + if (!sign_option.outfile) { + if (sign_option.create_new_outfile) { + errorcnt++; + fprintf(stderr, "Missing output filename\n"); + goto done; + } else { + sign_option.outfile = infile; + } + } + + VB2_DEBUG("sign_option.outfile=%s\n", sign_option.outfile); + + if (argc - optind > 0) { + errorcnt++; + fprintf(stderr, "ERROR: too many arguments left over\n"); + } + + if (errorcnt) + goto done; + + if (sign_option.create_new_outfile) { + /* The input is read-only, the output is write-only. */ + mapping = MAP_RO; + VB2_DEBUG("open RO %s\n", infile); + ifd = open(infile, O_RDONLY); + if (ifd < 0) { + errorcnt++; + fprintf(stderr, "Can't open %s for reading: %s\n", + infile, strerror(errno)); + goto done; + } + } else { + /* We'll read-modify-write the output file */ + mapping = MAP_RW; + if (sign_option.inout_file_count > 1) + futil_copy_file_or_die(infile, sign_option.outfile); + VB2_DEBUG("open RW %s\n", sign_option.outfile); + infile = sign_option.outfile; + ifd = open(sign_option.outfile, O_RDWR); + if (ifd < 0) { + errorcnt++; + fprintf(stderr, "Can't open %s for writing: %s\n", + sign_option.outfile, strerror(errno)); + goto done; + } + } + + if (0 != futil_map_file(ifd, mapping, &buf, &buf_len)) { + errorcnt++; + goto done; + } + + errorcnt += futil_file_type_sign(sign_option.type, infile, + buf, buf_len); + + errorcnt += futil_unmap_file(ifd, mapping, buf, buf_len); + +done: + if (ifd >= 0 && close(ifd)) { + errorcnt++; + fprintf(stderr, "Error when closing ifd: %s\n", + strerror(errno)); + } + + if (sign_option.signprivate) + free(sign_option.signprivate); + if (sign_option.keyblock) + free(sign_option.keyblock); + if (sign_option.kernel_subkey) + free(sign_option.kernel_subkey); + if (sign_option.prikey) + vb2_private_key_free(sign_option.prikey); + + if (errorcnt) + fprintf(stderr, "Use --help for usage instructions\n"); + + return !!errorcnt; +} + +DECLARE_FUTIL_COMMAND(sign, do_sign, VBOOT_VERSION_ALL, + "Sign / resign various binary components"); diff --git a/futility/cmd_update.c b/futility/cmd_update.c new file mode 100644 index 0000000..e4b3765 --- /dev/null +++ b/futility/cmd_update.c @@ -0,0 +1,376 @@ +/* Copyright 2018 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * The command line tool to invoke firmware updater. + */ + +#include +#include +#include +#include + +#include "futility.h" +#include "updater.h" + +#ifdef USE_FLASHROM + +enum { + OPT_DUMMY = 0x100, + + OPT_CCD, + OPT_EMULATE, + OPT_FACTORY, + OPT_FAST, + OPT_FORCE, + OPT_GBB_FLAGS, + OPT_HOST_ONLY, + OPT_MANIFEST, + OPT_MODEL, + OPT_OUTPUT_DIR, + OPT_PD_IMAGE, + OPT_QUIRKS, + OPT_QUIRKS_LIST, + OPT_REPACK, + OPT_SERVO, + OPT_SERVO_NORESET, + OPT_SERVO_PORT, + OPT_SIGNATURE, + OPT_SYS_PROPS, + OPT_UNPACK, + OPT_WRITE_PROTECTION, +}; + +/* Command line options */ +static struct option const long_opts[] = { + /* name has_arg *flag val */ + {"help", 0, NULL, 'h'}, + {"debug", 0, NULL, 'd'}, + {"verbose", 0, NULL, 'v'}, + + {"image", 1, NULL, 'i'}, + {"ec_image", 1, NULL, 'e'}, + {"try", 0, NULL, 't'}, + {"archive", 1, NULL, 'a'}, + {"programmer", 1, NULL, 'p'}, + {"mode", 1, NULL, 'm'}, + + {"ccd", 0, NULL, OPT_CCD}, + {"servo", 0, NULL, OPT_SERVO}, + {"servo_noreset", 0, NULL, OPT_SERVO_NORESET}, + {"servo_port", 1, NULL, OPT_SERVO_PORT}, + {"emulate", 1, NULL, OPT_EMULATE}, + {"factory", 0, NULL, OPT_FACTORY}, + {"fast", 0, NULL, OPT_FAST}, + {"force", 0, NULL, OPT_FORCE}, + {"gbb_flags", 1, NULL, OPT_GBB_FLAGS}, + {"host_only", 0, NULL, OPT_HOST_ONLY}, + {"list-quirks", 0, NULL, OPT_QUIRKS_LIST}, + {"manifest", 0, NULL, OPT_MANIFEST}, + {"model", 1, NULL, OPT_MODEL}, + {"output_dir", 1, NULL, OPT_OUTPUT_DIR}, + {"pd_image", 1, NULL, OPT_PD_IMAGE}, + {"quirks", 1, NULL, OPT_QUIRKS}, + {"repack", 1, NULL, OPT_REPACK}, + {"signature_id", 1, NULL, OPT_SIGNATURE}, + {"sys_props", 1, NULL, OPT_SYS_PROPS}, + {"unpack", 1, NULL, OPT_UNPACK}, + {"wp", 1, NULL, OPT_WRITE_PROTECTION}, + + /* TODO(hungte) Remove following deprecated options. */ + {"noupdate_ec", 0, NULL, OPT_HOST_ONLY}, + {"noupdate_pd", 0, NULL, OPT_HOST_ONLY}, + {"nocheck_keys", 0, NULL, OPT_FORCE}, + {"update_main", 0, NULL, OPT_DUMMY}, + {"update_ec", 0, NULL, OPT_DUMMY}, + {"update_pd", 0, NULL, OPT_DUMMY}, + {"check_keys", 0, NULL, OPT_DUMMY}, + + {NULL, 0, NULL, 0}, +}; + +static const char * const short_opts = "hdvi:e:ta:m:p:"; + +static void print_help(int argc, char *argv[]) +{ + printf("\n" + "Usage: " MYNAME " %s [OPTIONS]\n" + "\n" + "Updates firmware in one of the following modes (default to recovery):\n" + " autoupdate:\tUpdate RW[A|B], or recovery if RO changed.\n" + " recovery: \tUpdate RW[A&B], (RO, RO:GBB[keys] - if RO changed)\n" + " factory: \tUpdate RW[A&B], RO, RO:GBB[keys,flags]\n" + "\n" + "Note: firmware sections with PRESERVE flags like VPD and\n" + " HWID in GBB are always preserved.\n" + " GBB flags are preserved in autoupdate and recovery modes.\n" + "\n" + "OPTIONS:\n" + "\n" + "-i, --image=FILE \tAP (host) firmware image (image.bin)\n" + "-e, --ec_image=FILE \tEC firmware image (i.e, ec.bin)\n" + " --pd_image=FILE \tPD firmware image (i.e, pd.bin)\n" + "-t, --try \tTry A/B update on reboot if possible\n" + "-a, --archive=PATH \tRead resources from archive\n" + " --manifest \tPrint out a JSON manifest and exit\n" + " --repack=DIR \tUpdates archive from DIR\n" + " --unpack=DIR \tExtracts archive to DIR\n" + "-p, --programmer=PRG\tChange AP (host) flashrom programmer\n" + " --fast \tReduce read cycles and do not verify\n" + " --quirks=LIST \tSpecify the quirks to apply\n" + " --list-quirks \tPrint all available quirks\n" + "-m, --mode=MODE \tRun updater in specified mode\n" + "\n" + "Legacy and compatibility options:\n" + " --factory \tAlias for --mode=factory\n" + " --force \tForce update (skip checking contents)\n" + " --output_dir=DIR\tSpecify the target for --mode=output\n" + "\n" + "Debugging and testing options:\n" + " --wp=1|0 \tSpecify write protection status\n" + " --host_only \tUpdate only AP (host) firmware\n" + " --emulate=FILE \tEmulate system firmware using file\n" + " --model=MODEL \tOverride system model for images\n" + " --gbb_flags=FLAG\tOverride new GBB flags\n" + " --ccd \tDo fast,force,wp=0,p=raiden_debug_spi\n" + " --servo \tFlash using Servo (v2, v4, micro, ...)\n" + " --servo_noreset \tLike servo but with 'custom_rst=true'\n" + " --servo_port=PRT\tOverride servod port, implies --servo\n" + " --signature_id=S\tOverride signature ID for key files\n" + " --sys_props=LIST\tList of system properties to override\n" + "-d, --debug \tPrint debugging messages\n" + "-v, --verbose \tPrint verbose messages\n" + "", + argv[0]); +} + +static char *add_servo_noreset(char *programmer) +{ + char *ret; + + if (strstr(programmer, "raiden_debug_spi:target=AP") == NULL) { + ERROR("servo_noreset only works for AP flashing over CCD.\n"); + free(programmer); + + return NULL; + } + + ASPRINTF(&ret, "%s,custom_rst=true", programmer); + free(programmer); + + return ret; +} + +static int do_update(int argc, char *argv[]) +{ + struct updater_config *cfg; + struct updater_config_arguments args = {0}; + int i, errorcnt = 0, do_update = 1; + int detect_servo = 0, do_servo_cpu_fw_spi = 0, servo_noreset = 0; + char *servo_programmer = NULL; + char *endptr; + + cfg = updater_new_config(); + assert(cfg); + + opterr = 0; + while ((i = getopt_long(argc, argv, short_opts, long_opts, 0)) != -1) { + switch (i) { + case 'h': + print_help(argc, argv); + updater_delete_config(cfg); + return !!errorcnt; + case 'd': + debugging_enabled = 1; + args.verbosity++; + break; + case 'v': + args.verbosity++; + break; + case 'i': + args.image = optarg; + break; + case 'e': + args.ec_image = optarg; + break; + case 't': + args.try_update = 1; + break; + case 'a': + args.archive = optarg; + break; + case 'm': + args.mode = optarg; + break; + case 'p': + args.programmer = optarg; + break; + + case OPT_PD_IMAGE: + args.pd_image = optarg; + break; + case OPT_REPACK: + args.repack = optarg; + break; + case OPT_UNPACK: + args.unpack = optarg; + break; + case OPT_QUIRKS: + args.quirks = optarg; + break; + case OPT_QUIRKS_LIST: + updater_list_config_quirks(cfg); + updater_delete_config(cfg); + return 0; + case OPT_OUTPUT_DIR: + args.output_dir = optarg; + break; + case OPT_MODEL: + args.model = optarg; + break; + case OPT_SIGNATURE: + args.signature_id = optarg; + break; + case OPT_WRITE_PROTECTION: + args.write_protection = optarg; + break; + case OPT_EMULATE: + args.emulation = optarg; + break; + case OPT_SYS_PROPS: + args.sys_props = optarg; + break; + case OPT_MANIFEST: + args.do_manifest = 1; + break; + case OPT_FACTORY: + args.is_factory = 1; + break; + case OPT_HOST_ONLY: + args.host_only = 1; + break; + case OPT_FORCE: + args.force_update = 1; + break; + case OPT_FAST: + args.fast_update = 1; + break; + case OPT_GBB_FLAGS: + args.gbb_flags = strtoul(optarg, &endptr, 0); + if (*endptr) { + ERROR("Invalid flags: %s\n", optarg); + errorcnt++; + } else { + args.override_gbb_flags = 1; + } + break; + case OPT_CCD: + args.fast_update = 1; + args.force_update = 1; + args.write_protection = "0"; + args.programmer = "raiden_debug_spi:target=AP"; + break; + case OPT_SERVO: + args.fast_update = 1; + args.force_update = 1; + args.write_protection = "0"; + args.host_only = 1; + detect_servo = 1; + break; + case OPT_SERVO_NORESET: + args.fast_update = 1; + args.force_update = 1; + args.write_protection = "0"; + args.host_only = 1; + detect_servo = 1; + servo_noreset = 1; + break; + case OPT_SERVO_PORT: + setenv(ENV_SERVOD_PORT, optarg, 1); + args.fast_update = 1; + args.force_update = 1; + args.write_protection = "0"; + args.host_only = 1; + detect_servo = 1; + break; + + case OPT_DUMMY: + break; + + case '?': + errorcnt++; + if (optopt) + ERROR("Unrecognized option: -%c\n", optopt); + else if (argv[optind - 1]) + ERROR("Unrecognized option (possibly '%s')\n", + argv[optind - 1]); + else + ERROR("Unrecognized option.\n"); + break; + default: + errorcnt++; + ERROR("Failed parsing options.\n"); + } + } + if (optind < argc) { + errorcnt++; + ERROR("Unexpected arguments.\n"); + } + + if (!errorcnt && detect_servo) { + servo_programmer = host_detect_servo(&do_servo_cpu_fw_spi); + + if (servo_programmer && servo_noreset) + servo_programmer = add_servo_noreset(servo_programmer); + + if (!servo_programmer) + errorcnt++; + else if (!args.programmer) + args.programmer = servo_programmer; + } + /* + * Some boards may need to fetch firmware before starting to + * update (i.e., in updater_setup_config) so we want to turn on + * cpu_fw_spi mode now. + */ + if (do_servo_cpu_fw_spi) + free(host_shell("dut-control cpu_fw_spi:on")); + + if (!errorcnt) + errorcnt += updater_setup_config(cfg, &args, &do_update); + if (!errorcnt && do_update) { + int r; + STATUS("Starting firmware updater.\n"); + r = update_firmware(cfg); + if (r != UPDATE_ERR_DONE) { + r = VB2_MIN(r, UPDATE_ERR_UNKNOWN); + ERROR("%s\n", updater_error_messages[r]); + errorcnt++; + } + /* Use stdout for the final result. */ + printf(">> %s: Firmware updater %s.\n", + errorcnt ? "FAILED": "DONE", + errorcnt ? "aborted" : "exits successfully"); + } + + if (do_servo_cpu_fw_spi) + free(host_shell("dut-control cpu_fw_spi:off")); + free(servo_programmer); + + updater_delete_config(cfg); + return !!errorcnt; +} +#define CMD_HELP_STR "Update system firmware" + +#else /* USE_FLASHROM */ + +static int do_update(int argc, char *argv[]) +{ + FATAL(MYNAME " was built without flashrom support, `update` command unavailable!\n"); + return -1; +} +#define CMD_HELP_STR "Update system firmware (unavailable in this build)" + +#endif /* !USE_FLASHROM */ + +DECLARE_FUTIL_COMMAND(update, do_update, VBOOT_VERSION_ALL, CMD_HELP_STR); diff --git a/futility/cmd_validate_rec_mrc.c b/futility/cmd_validate_rec_mrc.c new file mode 100644 index 0000000..1d35bed --- /dev/null +++ b/futility/cmd_validate_rec_mrc.c @@ -0,0 +1,272 @@ +/* Copyright 2016 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "futility.h" + +enum { + OPT_HELP = 1000, + OPT_OFFSET, +}; + +static const struct option long_opts[] = { + {"help", 0, 0, OPT_HELP}, + {"offset", 1, 0, OPT_OFFSET}, + {NULL, 0, NULL, 0}, +}; + +static void print_help(int argc, char *argv[]) +{ + printf("\nUsage: " MYNAME " %s FILE [OPTIONS]\n", argv[0]); + printf("\nOptions:\n"); + printf(" --offset Offset of cache within FILE\n"); + printf("\n"); +} + +struct mrc_metadata { + uint32_t signature; + uint32_t data_size; + uint16_t data_checksum; + uint16_t header_checksum; + uint32_t version; +} __attribute__((packed)); + +#define MRC_DATA_SIGNATURE (('M'<<0)|('R'<<8)|('C'<<16)|('D'<<24)) +#define REGF_BLOCK_SHIFT 4 +#define REGF_BLOCK_GRANULARITY (1 << REGF_BLOCK_SHIFT) +#define REGF_METADATA_BLOCK_SIZE REGF_BLOCK_GRANULARITY +#define REGF_UNALLOCATED_BLOCK 0xffff + +static unsigned long compute_ip_checksum(const void *addr, unsigned long length) +{ + const uint8_t *ptr; + volatile union { + uint8_t byte[2]; + uint16_t word; + } value; + unsigned long sum; + unsigned long i; + /* In the most straight forward way possible, + * compute an ip style checksum. + */ + sum = 0; + ptr = addr; + for(i = 0; i < length; i++) { + unsigned long v; + v = ptr[i]; + if (i & 1) { + v <<= 8; + } + /* Add the new value */ + sum += v; + /* Wrap around the carry */ + if (sum > 0xFFFF) { + sum = (sum + (sum >> 16)) & 0xFFFF; + } + } + value.byte[0] = sum & 0xff; + value.byte[1] = (sum >> 8) & 0xff; + return (~value.word) & 0xFFFF; +} + +static int verify_mrc_slot(struct mrc_metadata *md, unsigned long slot_len) +{ + uint32_t header_checksum; + + if (slot_len < sizeof(*md)) { + fprintf(stderr, "Slot too small!\n"); + return 1; + } + + if (md->signature != MRC_DATA_SIGNATURE) { + fprintf(stderr, "MRC signature mismatch\n"); + return 1; + } + + fprintf(stderr, "MRC signature match.. successful\n"); + + if (md->data_size > slot_len) { + fprintf(stderr, "MRC cache size overflow\n"); + return 1; + } + + header_checksum = md->header_checksum; + md->header_checksum = 0; + + if (header_checksum != compute_ip_checksum(md, sizeof(*md))) { + fprintf(stderr, "MRC metadata header checksum mismatch\n"); + return 1; + } + + md->header_checksum = header_checksum; + + fprintf(stderr, "MRC metadata header checksum.. verified!\n"); + + if (md->data_checksum != compute_ip_checksum(&md[1], md->data_size)) { + fprintf(stderr, "MRC data checksum mismatch\n"); + return 1; + } + + fprintf(stderr, "MRC data checksum.. verified!\n"); + return 0; +} + +static int block_offset_unallocated(uint16_t offset) +{ + return offset == REGF_UNALLOCATED_BLOCK; +} + +static uint8_t *get_next_mb(uint8_t *curr_mb) +{ + return curr_mb + REGF_METADATA_BLOCK_SIZE; +} + +static int get_mrc_data_slot(uint16_t *mb, uint32_t *data_offset, + uint32_t *data_size) +{ + uint16_t num_metadata_blocks = *mb; + + if (block_offset_unallocated(*mb)) { + fprintf(stderr, "MRC cache is empty!!\n"); + return 1; + } + + /* + * First block offset in metadata block tells the total number of + * metadata blocks. + * Currently, we expect only 1 metadata block to be used. + */ + if (num_metadata_blocks != 1) { + uint16_t *next_mb = (uint16_t *)get_next_mb((uint8_t *)mb); + if (!block_offset_unallocated(*next_mb)) { + fprintf(stderr, "More than 1 valid metadata block!!"); + return 1; + } + } + + /* + * RECOVERY_MRC_CACHE is expected to contain only one slot. Thus, there + * should be only one block offset present, indicating size of the MRC + * cache slot. + */ + mb++; + *data_offset = (1 << REGF_BLOCK_SHIFT) * num_metadata_blocks; + *data_size = (*mb - num_metadata_blocks) << REGF_BLOCK_SHIFT; + + mb++; + if (!block_offset_unallocated(*mb)) { + fprintf(stderr, "More than 1 slot in recovery mrc cache.\n"); + return 1; + } + + return 0; +} + +static int do_validate_rec_mrc(int argc, char *argv[]) +{ + char *infile = NULL; + int parse_error = 0; + int fd, i, ret = 1; + uint32_t file_size; + uint8_t *buff; + uint32_t offset = 0; + uint32_t data_offset; + uint32_t data_size; + char *e; + + while (((i = getopt_long(argc, argv, ":", long_opts, NULL)) != -1) && + !parse_error) { + switch (i) { + case OPT_HELP: + print_help(argc, argv); + return 0; + case OPT_OFFSET: + offset = strtoul(optarg, &e, 0); + if (!*optarg || (e && *e)) { + fprintf(stderr, "Invalid --offset\n"); + parse_error = 1; + } + break; + default: + case '?': + parse_error = 1; + break; + } + } + + if (parse_error) { + print_help(argc, argv); + return 1; + } + + if ((argc - optind) < 1) { + fprintf(stderr, "You must specify an input FILE!\n"); + print_help(argc, argv); + return 1; + } else if ((argc - optind) != 1) { + fprintf(stderr, "Unexpected arguments!\n"); + print_help(argc, argv); + return 1; + } + + infile = argv[optind++]; + + fd = open(infile, O_RDONLY); + if (fd < 0) { + fprintf(stderr, "Cannot open %s:%s\n", infile, strerror(errno)); + return 1; + } + + if (futil_map_file(fd, MAP_RO, &buff, &file_size) != FILE_ERR_NONE) { + fprintf(stderr, "Cannot map file %s\n", infile); + close(fd); + return 1; + } + + if (offset > file_size) { + fprintf(stderr, "File size(%#x) smaller than offset(%#x)\n", + file_size, offset); + futil_unmap_file(fd, MAP_RO, buff, file_size); + close(fd); + return 1; + } + + if (get_mrc_data_slot((uint16_t *)(buff + offset), &data_offset, + &data_size)) { + fprintf(stderr, "Metadata block error\n"); + futil_unmap_file(fd, MAP_RO, buff, file_size); + close(fd); + return 1; + } + offset += data_offset; + + if ((file_size > offset) && ((file_size - offset) >= data_size)) + ret = verify_mrc_slot((struct mrc_metadata *)(buff + offset), + data_size); + else + fprintf(stderr, "Offset or data size greater than file size: " + "offset=%#x, file size=%#x, data_size=%#x\n", + offset, file_size, data_size); + + if (futil_unmap_file(fd, MAP_RO, buff, file_size) != FILE_ERR_NONE) { + fprintf(stderr, "Failed to unmap file %s\n", infile); + ret = 1; + } + + close(fd); + return ret; +} + +DECLARE_FUTIL_COMMAND(validate_rec_mrc, do_validate_rec_mrc, VBOOT_VERSION_ALL, + "Validates content of Recovery MRC cache"); diff --git a/futility/cmd_vbutil_firmware.c b/futility/cmd_vbutil_firmware.c new file mode 100644 index 0000000..b7155f7 --- /dev/null +++ b/futility/cmd_vbutil_firmware.c @@ -0,0 +1,415 @@ +/* Copyright 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Verified boot firmware utility + */ + +#include +#include /* For PRIu64 */ +#include +#include +#include +#include + +#include "2api.h" +#include "2common.h" +#include "2rsa.h" +#include "2sysincludes.h" +#include "futility.h" +#include "host_common.h" +#include "host_key21.h" +#include "kernel_blob.h" +#include "util_misc.h" +#include "vb1_helper.h" + +/* Command line options */ +enum { + OPT_MODE_VBLOCK = 1000, + OPT_MODE_VERIFY, + OPT_KEYBLOCK, + OPT_SIGNPUBKEY, + OPT_SIGNPRIVATE, + OPT_VERSION, + OPT_FV, + OPT_KERNELKEY, + OPT_FLAGS, + OPT_HELP, +}; + +static const struct option long_opts[] = { + {"vblock", 1, 0, OPT_MODE_VBLOCK}, + {"verify", 1, 0, OPT_MODE_VERIFY}, + {"keyblock", 1, 0, OPT_KEYBLOCK}, + {"signpubkey", 1, 0, OPT_SIGNPUBKEY}, + {"signprivate", 1, 0, OPT_SIGNPRIVATE}, + {"version", 1, 0, OPT_VERSION}, + {"fv", 1, 0, OPT_FV}, + {"kernelkey", 1, 0, OPT_KERNELKEY}, + {"flags", 1, 0, OPT_FLAGS}, + {"help", 0, 0, OPT_HELP}, + {NULL, 0, 0, 0} +}; + +/* Print help and return error */ +static void print_help(int argc, char *argv[]) +{ + printf("\nUsage: " MYNAME " %s <--vblock|--verify> [OPTIONS]\n" + "\n" + "For '--vblock ', required OPTIONS are:\n" + "\n" + " --keyblock Keyblock in .keyblock format\n" + " --signprivate " + " Signing private key in .vbprivk format\n" + " --version Firmware version\n" + " --fv Firmware volume to sign\n" + " --kernelkey Kernel subkey in .vbpubk format\n" + "\n" + "optional OPTIONS are:\n" + " --flags Preamble flags (defaults to 0)\n" + "\n" + "For '--verify ', required OPTIONS are:\n" + "\n" + " --signpubkey " + " Signing public key in .vbpubk format\n" + " --fv Firmware volume to verify\n" + "\n" + "For '--verify ', optional OPTIONS are:\n" + " --kernelkey " + " Write the kernel subkey to this file\n\n", + argv[0]); +} + +/* Create a firmware .vblock */ +static int do_vblock(const char *outfile, const char *keyblock_file, + const char *signprivate, uint32_t version, + const char *fv_file, const char *kernelkey_file, + uint32_t preamble_flags) +{ + struct vb2_keyblock *keyblock = NULL; + struct vb2_private_key *signing_key = NULL; + struct vb2_packed_key *kernel_subkey = NULL; + struct vb2_signature *body_sig = NULL; + struct vb2_fw_preamble *preamble = NULL; + uint8_t *fv_data = NULL; + int retval = 1; + + if (!outfile) { + FATAL("Must specify output filename\n"); + goto vblock_cleanup; + } + if (!keyblock_file || !signprivate || !kernelkey_file) { + FATAL("Must specify all keys\n"); + goto vblock_cleanup; + } + if (!fv_file) { + FATAL("Must specify firmware volume\n"); + goto vblock_cleanup; + } + + /* Read the keyblock and keys */ + keyblock = vb2_read_keyblock(keyblock_file); + if (!keyblock) { + FATAL("Error reading keyblock.\n"); + goto vblock_cleanup; + } + + signing_key = vb2_read_private_key(signprivate); + if (!signing_key) { + FATAL("Error reading signing key.\n"); + goto vblock_cleanup; + } + + kernel_subkey = vb2_read_packed_key(kernelkey_file); + if (!kernel_subkey) { + FATAL("Error reading kernel subkey.\n"); + goto vblock_cleanup; + } + + /* Read and sign the firmware volume */ + uint32_t fv_size; + if (VB2_SUCCESS != vb2_read_file(fv_file, &fv_data, &fv_size)) + goto vblock_cleanup; + if (!fv_size) { + FATAL("Empty firmware volume file\n"); + goto vblock_cleanup; + } + body_sig = vb2_calculate_signature(fv_data, fv_size, signing_key); + if (!body_sig) { + FATAL("Error calculating body signature\n"); + goto vblock_cleanup; + } + + /* Create preamble */ + preamble = vb2_create_fw_preamble(version, kernel_subkey, body_sig, + signing_key, preamble_flags); + if (!preamble) { + FATAL("Error creating preamble.\n"); + goto vblock_cleanup; + } + + /* Write the output file */ + FILE *f = fopen(outfile, "wb"); + if (!f) { + FATAL("Can't open output file %s\n", outfile); + goto vblock_cleanup; + } + int i = ((1 != fwrite(keyblock, keyblock->keyblock_size, 1, f)) || + (1 != fwrite(preamble, preamble->preamble_size, 1, f))); + fclose(f); + if (i) { + FATAL("Can't write output file %s\n", outfile); + unlink(outfile); + goto vblock_cleanup; + } + + /* Success */ + retval = 0; + +vblock_cleanup: + if (keyblock) + free(keyblock); + if (signing_key) + free(signing_key); + if (kernel_subkey) + free(kernel_subkey); + if (fv_data) + free(fv_data); + if (body_sig) + free(body_sig); + if (preamble) + free(preamble); + + return retval; +} + +static int do_verify(const char *infile, const char *signpubkey, + const char *fv_file, const char *kernelkey_file) +{ + uint8_t workbuf[VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + struct vb2_workbuf wb; + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + uint32_t now = 0; + + uint8_t *pubkbuf = NULL; + uint8_t *blob = NULL; + uint8_t *fv_data = NULL; + int retval = 1; + + if (!infile || !signpubkey || !fv_file) { + FATAL("Must specify filename, signpubkey, and fv\n"); + goto verify_cleanup; + } + + /* Read public signing key */ + uint32_t pubklen; + struct vb2_public_key sign_key; + if (VB2_SUCCESS != vb2_read_file(signpubkey, &pubkbuf, &pubklen)) { + fprintf(stderr, "Error reading signpubkey.\n"); + goto verify_cleanup; + } + if (VB2_SUCCESS != vb2_unpack_key_buffer(&sign_key, pubkbuf, pubklen)) { + fprintf(stderr, "Error unpacking signpubkey.\n"); + goto verify_cleanup; + } + + /* Read blob */ + uint32_t blob_size; + if (VB2_SUCCESS != vb2_read_file(infile, &blob, &blob_size)) { + FATAL("Error reading input file\n"); + goto verify_cleanup; + } + + /* Read firmware volume */ + uint32_t fv_size; + if (VB2_SUCCESS != vb2_read_file(fv_file, &fv_data, &fv_size)) { + FATAL("Error reading firmware volume\n"); + goto verify_cleanup; + } + + /* Verify keyblock */ + struct vb2_keyblock *keyblock = (struct vb2_keyblock *)blob; + if (VB2_SUCCESS != + vb2_verify_keyblock(keyblock, blob_size, &sign_key, &wb)) { + FATAL("Error verifying keyblock.\n"); + goto verify_cleanup; + } + + now += keyblock->keyblock_size; + + printf("Keyblock:\n"); + printf(" Size: %d\n", keyblock->keyblock_size); + printf(" Flags: %d (ignored)\n", + keyblock->keyblock_flags); + + struct vb2_packed_key *packed_key = &keyblock->data_key; + printf(" Data key algorithm: %d %s\n", packed_key->algorithm, + vb2_get_crypto_algorithm_name(packed_key->algorithm)); + printf(" Data key version: %d\n", packed_key->key_version); + printf(" Data key sha1sum: %s\n", + packed_key_sha1_string(packed_key)); + + struct vb2_public_key data_key; + if (VB2_SUCCESS != + vb2_unpack_key(&data_key, &keyblock->data_key)) { + fprintf(stderr, "Error parsing data key.\n"); + goto verify_cleanup; + } + + /* Verify preamble */ + struct vb2_fw_preamble *pre2 = (struct vb2_fw_preamble *)(blob + now); + if (VB2_SUCCESS != + vb2_verify_fw_preamble(pre2, blob_size - now, &data_key, &wb)) { + FATAL("Error2 verifying preamble.\n"); + goto verify_cleanup; + } + now += pre2->preamble_size; + + uint32_t flags = pre2->flags; + if (pre2->header_version_minor < 1) + flags = 0; /* Old 2.0 structure didn't have flags */ + + printf("Preamble:\n"); + printf(" Size: %d\n", pre2->preamble_size); + printf(" Header version: %d.%d\n", + pre2->header_version_major, pre2->header_version_minor); + printf(" Firmware version: %d\n", pre2->firmware_version); + + struct vb2_packed_key *kernel_subkey = &pre2->kernel_subkey; + printf(" Kernel key algorithm: %d %s\n", kernel_subkey->algorithm, + vb2_get_crypto_algorithm_name(kernel_subkey->algorithm)); + printf(" Kernel key version: %d\n", kernel_subkey->key_version); + printf(" Kernel key sha1sum: %s\n", + packed_key_sha1_string(kernel_subkey)); + printf(" Firmware body size: %d\n", pre2->body_signature.data_size); + printf(" Preamble flags: %d\n", flags); + + /* TODO: verify body size same as signature size */ + + /* Verify body */ + if (flags & VB2_FIRMWARE_PREAMBLE_USE_RO_NORMAL) { + printf("Preamble requests USE_RO_NORMAL;" + " skipping body verification.\n"); + } else if (VB2_SUCCESS == + vb2_verify_data(fv_data, fv_size, &pre2->body_signature, + &data_key, &wb)) { + printf("Body verification succeeded.\n"); + } else { + FATAL("Error verifying firmware body.\n"); + goto verify_cleanup; + } + + if (kernelkey_file && + VB2_SUCCESS != vb2_write_packed_key(kernelkey_file, + kernel_subkey)) { + FATAL("Unable to write kernel subkey\n"); + goto verify_cleanup; + } + + /* Success */ + retval = 0; + +verify_cleanup: + if (pubkbuf) + free(pubkbuf); + if (blob) + free(blob); + if (fv_data) + free(fv_data); + + return retval; +} + +static int do_vbutil_firmware(int argc, char *argv[]) +{ + + char *filename = NULL; + char *keyblock_file = NULL; + char *signpubkey = NULL; + char *signprivate = NULL; + uint32_t version = 0; + char *fv_file = NULL; + char *kernelkey_file = NULL; + uint32_t preamble_flags = 0; + int mode = 0; + int parse_error = 0; + char *e; + int i; + + while ((i = getopt_long(argc, argv, "", long_opts, NULL)) != -1) { + switch (i) { + case '?': + /* Unhandled option */ + printf("Unknown option\n"); + parse_error = 1; + break; + case OPT_HELP: + print_help(argc, argv); + return !!parse_error; + + case OPT_MODE_VBLOCK: + case OPT_MODE_VERIFY: + mode = i; + filename = optarg; + break; + + case OPT_KEYBLOCK: + keyblock_file = optarg; + break; + + case OPT_SIGNPUBKEY: + signpubkey = optarg; + break; + + case OPT_SIGNPRIVATE: + signprivate = optarg; + break; + + case OPT_FV: + fv_file = optarg; + break; + + case OPT_KERNELKEY: + kernelkey_file = optarg; + break; + + case OPT_VERSION: + version = strtoul(optarg, &e, 0); + if (!*optarg || (e && *e)) { + printf("Invalid --version\n"); + parse_error = 1; + } + break; + + case OPT_FLAGS: + preamble_flags = strtoul(optarg, &e, 0); + if (!*optarg || (e && *e)) { + printf("Invalid --flags\n"); + parse_error = 1; + } + break; + } + } + + if (parse_error) { + print_help(argc, argv); + return 1; + } + + switch (mode) { + case OPT_MODE_VBLOCK: + return do_vblock(filename, keyblock_file, signprivate, version, + fv_file, kernelkey_file, preamble_flags); + case OPT_MODE_VERIFY: + return do_verify(filename, signpubkey, fv_file, kernelkey_file); + default: + fprintf(stderr, "Must specify a mode.\n"); + print_help(argc, argv); + return 1; + } +} + +DECLARE_FUTIL_COMMAND(vbutil_firmware, do_vbutil_firmware, VBOOT_VERSION_1_0, + "Verified boot firmware utility"); diff --git a/futility/cmd_vbutil_kernel.c b/futility/cmd_vbutil_kernel.c new file mode 100644 index 0000000..7268bee --- /dev/null +++ b/futility/cmd_vbutil_kernel.c @@ -0,0 +1,652 @@ +/* Copyright 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Verified boot kernel utility + */ + +#include +#include +#include +#include /* For PRIu64 */ +#if !defined(HAVE_MACOS) && !defined(__FreeBSD__) && !defined(__OpenBSD__) +#include /* For BLKGETSIZE64 */ +#endif +#include +#include +#include +#include +#include +#include + +#include "2common.h" +#include "2sysincludes.h" +#include "file_type.h" +#include "futility.h" +#include "host_common.h" +#include "kernel_blob.h" +#include "vb1_helper.h" + +/* Global opts */ +static int opt_verbose; +static int opt_vblockonly; +static uint64_t opt_pad = 65536; + +/* Command line options */ +enum { + OPT_MODE_PACK = 1000, + OPT_MODE_REPACK, + OPT_MODE_VERIFY, + OPT_MODE_GET_VMLINUZ, + OPT_ARCH, + OPT_OLDBLOB, + OPT_KLOADADDR, + OPT_KEYBLOCK, + OPT_SIGNPUBKEY, + OPT_SIGNPRIVATE, + OPT_VERSION, + OPT_VMLINUZ, + OPT_BOOTLOADER, + OPT_CONFIG, + OPT_VBLOCKONLY, + OPT_PAD, + OPT_VERBOSE, + OPT_MINVERSION, + OPT_VMLINUZ_OUT, + OPT_FLAGS, + OPT_HELP, +}; + +static const struct option long_opts[] = { + {"pack", 1, 0, OPT_MODE_PACK}, + {"repack", 1, 0, OPT_MODE_REPACK}, + {"verify", 1, 0, OPT_MODE_VERIFY}, + {"get-vmlinuz", 1, 0, OPT_MODE_GET_VMLINUZ}, + {"arch", 1, 0, OPT_ARCH}, + {"oldblob", 1, 0, OPT_OLDBLOB}, + {"kloadaddr", 1, 0, OPT_KLOADADDR}, + {"keyblock", 1, 0, OPT_KEYBLOCK}, + {"signpubkey", 1, 0, OPT_SIGNPUBKEY}, + {"signprivate", 1, 0, OPT_SIGNPRIVATE}, + {"version", 1, 0, OPT_VERSION}, + {"minversion", 1, 0, OPT_MINVERSION}, + {"vmlinuz", 1, 0, OPT_VMLINUZ}, + {"bootloader", 1, 0, OPT_BOOTLOADER}, + {"config", 1, 0, OPT_CONFIG}, + {"vblockonly", 0, 0, OPT_VBLOCKONLY}, + {"pad", 1, 0, OPT_PAD}, + {"verbose", 0, &opt_verbose, 1}, + {"vmlinuz-out", 1, 0, OPT_VMLINUZ_OUT}, + {"flags", 1, 0, OPT_FLAGS}, + {"help", 0, 0, OPT_HELP}, + {NULL, 0, 0, 0} +}; + + + +static const char usage[] = + "\n" + "Usage: " MYNAME " %s --pack [PARAMETERS]\n" + "\n" + " Required parameters:\n" + " --keyblock Keyblock in .keyblock format\n" + " --signprivate Private key to sign kernel data,\n" + " in .vbprivk format\n" + " --version Kernel version\n" + " --vmlinuz Linux kernel bzImage file\n" + " --bootloader Bootloader stub\n" + " --config Command line file\n" + " --arch Cpu architecture (default x86)\n" + "\n" + " Optional:\n" + " --kloadaddr
Assign kernel body load address\n" + " --pad Verification padding size in bytes\n" + " --vblockonly Emit just the verification blob\n" + " --flags NUM Flags to be passed in the header\n" + "\nOR\n\n" + "Usage: " MYNAME " %s --repack [PARAMETERS]\n" + "\n" + " Required parameters:\n" + " --signprivate Private key to sign kernel data,\n" + " in .vbprivk format\n" + " --oldblob Previously packed kernel blob\n" + " (including verfication blob)\n" + "\n" + " Optional:\n" + " --keyblock Keyblock in .keyblock format\n" + " --config New command line file\n" + " --version Kernel version\n" + " --kloadaddr
Assign kernel body load address\n" + " --pad Verification blob size in bytes\n" + " --vblockonly Emit just the verification blob\n" + "\nOR\n\n" + "Usage: " MYNAME " %s --verify [PARAMETERS]\n" + "\n" + " Optional:\n" + " --signpubkey " + " Public key to verify kernel keyblock,\n" + " in .vbpubk format\n" + " --verbose Print a more detailed report\n" + " --keyblock Outputs the verified keyblock,\n" + " in .keyblock format\n" + " --pad Verification padding size in bytes\n" + " --minversion Minimum combined kernel key version\n" + "\nOR\n\n" + "Usage: " MYNAME " %s --get-vmlinuz [PARAMETERS]\n" + "\n" + " Required parameters:\n" + " --vmlinuz-out vmlinuz image output file\n" + "\n"; + + +/* Print help and return error */ +static void print_help(int argc, char *argv[]) +{ + printf(usage, argv[0], argv[0], argv[0], argv[0]); +} + + +/* Return an explanation when fread() fails. */ +static const char *error_fread(FILE *fp) +{ + const char *retval = "beats me why"; + if (feof(fp)) + retval = "EOF"; + else if (ferror(fp)) + retval = strerror(errno); + clearerr(fp); + return retval; +} + + +/* This reads a complete kernel partition into a buffer */ +static uint8_t *ReadOldKPartFromFileOrDie(const char *filename, + uint32_t *size_ptr) +{ + FILE *fp = NULL; + struct stat statbuf; + uint8_t *buf; + uint32_t file_size = 0; + + if (0 != stat(filename, &statbuf)) + FATAL("Unable to stat %s: %s\n", filename, strerror(errno)); + + if (S_ISBLK(statbuf.st_mode)) { +#if !defined(HAVE_MACOS) && !defined(__FreeBSD__) && !defined(__OpenBSD__) + int fd = open(filename, O_RDONLY); + if (fd >= 0) { + ioctl(fd, BLKGETSIZE64, &file_size); + close(fd); + } +#endif + } else { + file_size = statbuf.st_size; + } + VB2_DEBUG("%s size is %#x\n", filename, file_size); + if (file_size < opt_pad) + FATAL("%s is too small to be a valid kernel blob\n", filename); + + VB2_DEBUG("Reading %s\n", filename); + fp = fopen(filename, "rb"); + if (!fp) + FATAL("Unable to open file %s: %s\n", filename, + strerror(errno)); + + buf = malloc(file_size); + if (1 != fread(buf, file_size, 1, fp)) + FATAL("Unable to read entirety of %s: %s\n", filename, + error_fread(fp)); + + if (size_ptr) + *size_ptr = file_size; + + fclose(fp); + return buf; +} + +/****************************************************************************/ + +static int do_vbutil_kernel(int argc, char *argv[]) +{ + char *filename = NULL; + char *oldfile = NULL; + char *keyblock_file = NULL; + char *signpubkey_file = NULL; + char *signprivkey_file = NULL; + char *version_str = NULL; + int version = -1; + char *vmlinuz_file = NULL; + char *bootloader_file = NULL; + char *config_file = NULL; + char *vmlinuz_out_file = NULL; + enum arch_t arch = ARCH_X86; + uint64_t kernel_body_load_address = CROS_32BIT_ENTRY_ADDR; + int mode = 0; + int parse_error = 0; + uint32_t min_version = 0; + char *e; + int i = 0; + int errcount = 0; + int rv; + struct vb2_keyblock *keyblock = NULL; + struct vb2_keyblock *t_keyblock = NULL; + struct vb2_private_key *signpriv_key = NULL; + struct vb2_packed_key *signpub_key = NULL; + uint8_t *kpart_data = NULL; + uint32_t kpart_size = 0; + uint8_t *vmlinuz_buf = NULL; + uint32_t vmlinuz_size = 0; + uint8_t *t_config_data; + uint32_t t_config_size; + uint8_t *t_bootloader_data; + uint32_t t_bootloader_size; + uint32_t vmlinuz_header_size = 0; + uint64_t vmlinuz_header_address = 0; + uint32_t vmlinuz_header_offset = 0; + struct vb2_kernel_preamble *preamble = NULL; + uint8_t *kblob_data = NULL; + uint32_t kblob_size = 0; + uint8_t *vblock_data = NULL; + uint32_t vblock_size = 0; + uint32_t flags = 0; + FILE *f; + + while (((i = getopt_long(argc, argv, ":", long_opts, NULL)) != -1) && + !parse_error) { + switch (i) { + default: + case '?': + /* Unhandled option */ + parse_error = 1; + break; + + case 0: + /* silently handled option */ + break; + case OPT_HELP: + print_help(argc, argv); + return !!parse_error; + + case OPT_MODE_PACK: + case OPT_MODE_REPACK: + case OPT_MODE_VERIFY: + case OPT_MODE_GET_VMLINUZ: + if (mode && (mode != i)) { + fprintf(stderr, + "Only one mode can be specified\n"); + parse_error = 1; + break; + } + mode = i; + filename = optarg; + break; + + case OPT_ARCH: + /* check the first 3 characters to also detect x86_64 */ + if ((!strncasecmp(optarg, "x86", 3)) || + (!strcasecmp(optarg, "amd64"))) + arch = ARCH_X86; + /* check the first 3 characters to also detect arm64 */ + else if ((!strncasecmp(optarg, "arm", 3)) || + (!strcasecmp(optarg, "aarch64"))) + arch = ARCH_ARM; + else if (!strcasecmp(optarg, "mips")) + arch = ARCH_MIPS; + else { + fprintf(stderr, + "Unknown architecture string: %s\n", + optarg); + parse_error = 1; + } + break; + + case OPT_OLDBLOB: + oldfile = optarg; + break; + + case OPT_KLOADADDR: + kernel_body_load_address = strtoul(optarg, &e, 0); + if (!*optarg || (e && *e)) { + fprintf(stderr, "Invalid --kloadaddr\n"); + parse_error = 1; + } + break; + + case OPT_KEYBLOCK: + keyblock_file = optarg; + break; + + case OPT_SIGNPUBKEY: + signpubkey_file = optarg; + break; + + case OPT_SIGNPRIVATE: + signprivkey_file = optarg; + break; + + case OPT_VMLINUZ: + vmlinuz_file = optarg; + break; + + case OPT_FLAGS: + flags = (uint32_t)strtoul(optarg, &e, 0); + if (!*optarg || (e && *e)) { + fprintf(stderr, "Invalid --flags\n"); + parse_error = 1; + } + break; + + case OPT_BOOTLOADER: + bootloader_file = optarg; + break; + + case OPT_CONFIG: + config_file = optarg; + break; + + case OPT_VBLOCKONLY: + opt_vblockonly = 1; + break; + + case OPT_VERSION: + version_str = optarg; + version = strtoul(optarg, &e, 0); + if (!*optarg || (e && *e)) { + fprintf(stderr, "Invalid --version\n"); + parse_error = 1; + } + break; + + case OPT_MINVERSION: + min_version = strtoul(optarg, &e, 0); + if (!*optarg || (e && *e)) { + fprintf(stderr, "Invalid --minversion\n"); + parse_error = 1; + } + break; + + case OPT_PAD: + opt_pad = strtoul(optarg, &e, 0); + if (!*optarg || (e && *e)) { + fprintf(stderr, "Invalid --pad\n"); + parse_error = 1; + } + break; + case OPT_VMLINUZ_OUT: + vmlinuz_out_file = optarg; + } + } + + if (parse_error) { + print_help(argc, argv); + return 1; + } + + switch (mode) { + case OPT_MODE_PACK: + + if (!keyblock_file) + FATAL("Missing required keyblock file.\n"); + + t_keyblock = (struct vb2_keyblock *)ReadFile(keyblock_file, 0); + if (!t_keyblock) + FATAL("Error reading keyblock.\n"); + + if (!signprivkey_file) + FATAL("Missing required signprivate file.\n"); + + signpriv_key = vb2_read_private_key(signprivkey_file); + if (!signpriv_key) + FATAL("Error reading signing key.\n"); + + if (!config_file) + FATAL("Missing required config file.\n"); + + VB2_DEBUG("Reading %s\n", config_file); + t_config_data = + ReadConfigFile(config_file, &t_config_size); + if (!t_config_data) + FATAL("Error reading config file.\n"); + + if (!bootloader_file) + FATAL("Missing required bootloader file.\n"); + + VB2_DEBUG("Reading %s\n", bootloader_file); + + if (VB2_SUCCESS != vb2_read_file(bootloader_file, + &t_bootloader_data, + &t_bootloader_size)) + FATAL("Error reading bootloader file.\n"); + VB2_DEBUG(" bootloader file size=%#x\n", t_bootloader_size); + + if (!vmlinuz_file) + FATAL("Missing required vmlinuz file.\n"); + + VB2_DEBUG("Reading %s\n", vmlinuz_file); + if (VB2_SUCCESS != + vb2_read_file(vmlinuz_file, &vmlinuz_buf, &vmlinuz_size)) + FATAL("Error reading vmlinuz file.\n"); + + VB2_DEBUG(" vmlinuz file size=%#x\n", vmlinuz_size); + if (!vmlinuz_size) + FATAL("Empty vmlinuz file\n"); + + kblob_data = CreateKernelBlob( + vmlinuz_buf, vmlinuz_size, + arch, kernel_body_load_address, + t_config_data, t_config_size, + t_bootloader_data, t_bootloader_size, + &kblob_size); + if (!kblob_data) + FATAL("Unable to create kernel blob\n"); + + VB2_DEBUG("kblob_size = %#x\n", kblob_size); + + vblock_data = SignKernelBlob(kblob_data, kblob_size, opt_pad, + version, kernel_body_load_address, + t_keyblock, signpriv_key, flags, + &vblock_size); + if (!vblock_data) + FATAL("Unable to sign kernel blob\n"); + + VB2_DEBUG("vblock_size = %#x\n", vblock_size); + + if (opt_vblockonly) + rv = WriteSomeParts(filename, + vblock_data, vblock_size, + NULL, 0); + else + rv = WriteSomeParts(filename, + vblock_data, vblock_size, + kblob_data, kblob_size); + + free(vmlinuz_buf); + free(t_config_data); + free(t_bootloader_data); + free(vblock_data); + vb2_free_private_key(signpriv_key); + return rv; + + case OPT_MODE_REPACK: + + /* Required */ + + if (!signprivkey_file) + FATAL("Missing required signprivate file.\n"); + + signpriv_key = vb2_read_private_key(signprivkey_file); + if (!signpriv_key) + FATAL("Error reading signing key.\n"); + + if (!oldfile) + FATAL("Missing previously packed blob.\n"); + + /* Load the kernel partition */ + kpart_data = ReadOldKPartFromFileOrDie(oldfile, &kpart_size); + + /* Make sure we have a kernel partition */ + if (FILE_TYPE_KERN_PREAMBLE != + futil_file_type_buf(kpart_data, kpart_size)) + FATAL("%s is not a kernel blob\n", oldfile); + + kblob_data = unpack_kernel_partition(kpart_data, kpart_size, + opt_pad, &keyblock, + &preamble, &kblob_size); + + if (!kblob_data) + FATAL("Unable to unpack kernel partition\n"); + + kernel_body_load_address = preamble->body_load_address; + + /* Update the config if asked */ + if (config_file) { + VB2_DEBUG("Reading %s\n", config_file); + t_config_data = + ReadConfigFile(config_file, &t_config_size); + if (!t_config_data) + FATAL("Error reading config file.\n"); + if (0 != UpdateKernelBlobConfig( + kblob_data, kblob_size, + t_config_data, t_config_size)) + FATAL("Unable to update config\n"); + } + + if (!version_str) + version = preamble->kernel_version; + + if (vb2_kernel_get_flags(preamble)) + flags = vb2_kernel_get_flags(preamble); + + if (keyblock_file) { + t_keyblock = (struct vb2_keyblock *) + ReadFile(keyblock_file, 0); + if (!t_keyblock) + FATAL("Error reading keyblock.\n"); + } + + /* Reuse previous body size */ + vblock_data = SignKernelBlob(kblob_data, kblob_size, opt_pad, + version, kernel_body_load_address, + t_keyblock ? t_keyblock : keyblock, + signpriv_key, flags, &vblock_size); + if (!vblock_data) + FATAL("Unable to sign kernel blob\n"); + + if (opt_vblockonly) + rv = WriteSomeParts(filename, + vblock_data, vblock_size, + NULL, 0); + else + rv = WriteSomeParts(filename, + vblock_data, vblock_size, + kblob_data, kblob_size); + return rv; + + case OPT_MODE_VERIFY: + + /* Optional */ + + if (signpubkey_file) { + signpub_key = vb2_read_packed_key(signpubkey_file); + if (!signpub_key) + FATAL("Error reading public key.\n"); + } + + /* Do it */ + + /* Load the kernel partition */ + kpart_data = ReadOldKPartFromFileOrDie(filename, &kpart_size); + + kblob_data = unpack_kernel_partition(kpart_data, kpart_size, + opt_pad, 0, 0, + &kblob_size); + if (!kblob_data) + FATAL("Unable to unpack kernel partition\n"); + + rv = VerifyKernelBlob(kblob_data, kblob_size, + signpub_key, keyblock_file, min_version); + + return rv; + + case OPT_MODE_GET_VMLINUZ: + + if (!vmlinuz_out_file) { + fprintf(stderr, + "USE: vbutil_kernel --get-vmlinuz " + "--vmlinuz-out \n"); + print_help(argc, argv); + return 1; + } + + kpart_data = ReadOldKPartFromFileOrDie(filename, &kpart_size); + + kblob_data = unpack_kernel_partition(kpart_data, kpart_size, + opt_pad, &keyblock, + &preamble, &kblob_size); + + if (!kblob_data) + FATAL("Unable to unpack kernel partition\n"); + + f = fopen(vmlinuz_out_file, "wb"); + if (!f) { + FATAL("Can't open output file %s\n", vmlinuz_out_file); + return 1; + } + + /* Now stick 16-bit header followed by kernel block into + output */ + vb2_kernel_get_vmlinuz_header(preamble, + &vmlinuz_header_address, + &vmlinuz_header_size); + if (vmlinuz_header_size) { + // verify that the 16-bit header is included in the + // kblob (to make sure that it's included in the + // signature) + if (vb2_verify_member_inside( + (void *)preamble->body_load_address, + kblob_size, + (void *)vmlinuz_header_address, + vmlinuz_header_size, 0, 0)) { + fclose(f); + unlink(vmlinuz_out_file); + FATAL("Vmlinuz header not signed!\n"); + return 1; + } + // calculate the vmlinuz_header offset from + // the beginning of the kpart_data. The kblob doesn't + // include the body_load_offset, but does include + // the keyblock and preamble sections. + vmlinuz_header_offset = vmlinuz_header_address - + preamble->body_load_address + + keyblock->keyblock_size + + preamble->preamble_size; + errcount |= + (1 != fwrite(kpart_data + vmlinuz_header_offset, + vmlinuz_header_size, + 1, + f)); + } + errcount |= (1 != fwrite(kblob_data, + kblob_size, + 1, + f)); + if (errcount) { + fclose(f); + unlink(vmlinuz_out_file); + FATAL("Can't write output file %s\n", vmlinuz_out_file); + return 1; + } + + fclose(f); + return 0; + } + + fprintf(stderr, + "You must specify a mode: " + "--pack, --repack, --verify, or --get-vmlinuz\n"); + print_help(argc, argv); + return 1; +} + +DECLARE_FUTIL_COMMAND(vbutil_kernel, do_vbutil_kernel, VBOOT_VERSION_1_0, + "Creates, signs, and verifies the kernel partition"); diff --git a/futility/cmd_vbutil_key.c b/futility/cmd_vbutil_key.c new file mode 100644 index 0000000..d26df3f --- /dev/null +++ b/futility/cmd_vbutil_key.c @@ -0,0 +1,236 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Verified boot key utility + */ + +#include +#include /* For PRIu64 */ +#include +#include +#include +#include + +#include "futility.h" +#include "host_common.h" +#include "host_key21.h" +#include "util_misc.h" +#include "vb1_helper.h" + +/* Command line options */ +enum { + OPT_INKEY = 1000, + OPT_KEY_VERSION, + OPT_ALGORITHM, + OPT_MODE_PACK, + OPT_MODE_UNPACK, + OPT_COPYTO, + OPT_HELP, +}; + +static const struct option long_opts[] = { + {"key", 1, 0, OPT_INKEY}, + {"version", 1, 0, OPT_KEY_VERSION}, + {"algorithm", 1, 0, OPT_ALGORITHM}, + {"pack", 1, 0, OPT_MODE_PACK}, + {"unpack", 1, 0, OPT_MODE_UNPACK}, + {"copyto", 1, 0, OPT_COPYTO}, + {"help", 0, 0, OPT_HELP}, + {NULL, 0, 0, 0} +}; + +static void print_help(int argc, char *argv[]) +{ + int i; + + printf("\n" + "Usage: " MYNAME " %s --pack [PARAMETERS]\n" + "\n" + " Required parameters:\n" + " --key RSA key file (.keyb or .pem)\n" + " --version Key version number " + "(required for .keyb,\n" + " ignored for .pem)\n" + " --algorithm " + "Signing algorithm to use with key:\n", argv[0]); + + for (i = 0; i < VB2_ALG_COUNT; i++) { + printf(" %d = (%s)\n", + i, vb2_get_crypto_algorithm_name(i)); + } + + printf("\nOR\n\n" + "Usage: " MYNAME " %s --unpack \n" + "\n" + " Optional parameters:\n" + " --copyto " + "Write a copy of the key to this file.\n\n", argv[0]); +} + +/* Pack a .keyb file into a .vbpubk, or a .pem into a .vbprivk */ +static int do_pack(const char *infile, const char *outfile, uint32_t algorithm, + uint32_t version) +{ + if (!infile || !outfile) { + fprintf(stderr, "vbutil_key: Must specify --in and --out\n"); + return 1; + } + + struct vb2_packed_key *pubkey = + vb2_read_packed_keyb(infile, algorithm, version); + if (pubkey) { + if (0 != vb2_write_packed_key(outfile, pubkey)) { + fprintf(stderr, "vbutil_key: Error writing key.\n"); + free(pubkey); + return 1; + } + free(pubkey); + return 0; + } + + struct vb2_private_key *privkey = + vb2_read_private_key_pem(infile, algorithm); + if (privkey) { + if (VB2_SUCCESS != vb2_write_private_key(outfile, privkey)) { + fprintf(stderr, "vbutil_key: Error writing key.\n"); + free(privkey); + return 1; + } + free(privkey); + return 0; + } + + FATAL("Unable to parse either .keyb or .pem from %s\n", infile); + return 1; +} + +/* Unpack a .vbpubk or .vbprivk */ +static int do_unpack(const char *infile, const char *outfile) +{ + struct vb2_packed_key *pubkey; + + if (!infile) { + fprintf(stderr, "Need file to unpack\n"); + return 1; + } + + pubkey = vb2_read_packed_key(infile); + if (pubkey) { + printf("Public Key file: %s\n", infile); + printf("Algorithm: %u %s\n", pubkey->algorithm, + vb2_get_crypto_algorithm_name(pubkey->algorithm)); + printf("Key Version: %u\n", pubkey->key_version); + printf("Key sha1sum: %s\n", + packed_key_sha1_string(pubkey)); + if (outfile && + VB2_SUCCESS != vb2_write_packed_key(outfile, pubkey)) { + fprintf(stderr, "butil_key: Error writing key copy\n"); + free(pubkey); + return 1; + } + free(pubkey); + return 0; + } + + struct vb2_private_key *privkey = vb2_read_private_key(infile); + if (privkey) { + printf("Private Key file: %s\n", infile); + + enum vb2_crypto_algorithm alg = + vb2_get_crypto_algorithm(privkey->hash_alg, + privkey->sig_alg); + printf("Algorithm: %u %s\n", alg, + vb2_get_crypto_algorithm_name(alg)); + if (outfile && + VB2_SUCCESS != vb2_write_private_key(outfile, privkey)) { + fprintf(stderr,"vbutil_key: Error writing key copy\n"); + free(privkey); + return 1; + } + free(privkey); + return 0; + } + + FATAL("Unable to parse either .vbpubk or vbprivk from %s\n", infile); + return 1; +} + +static int do_vbutil_key(int argc, char *argv[]) +{ + + char *infile = NULL; + char *outfile = NULL; + int mode = 0; + int parse_error = 0; + uint32_t version = 1; + uint32_t algorithm = VB2_ALG_COUNT; + char *e; + int i; + + while ((i = getopt_long(argc, argv, "", long_opts, NULL)) != -1) { + switch (i) { + case '?': + /* Unhandled option */ + FATAL("Unknown option\n"); + parse_error = 1; + break; + case OPT_HELP: + print_help(argc, argv); + return !!parse_error; + + case OPT_INKEY: + infile = optarg; + break; + + case OPT_KEY_VERSION: + version = strtoul(optarg, &e, 0); + if (!*optarg || (e && *e)) { + FATAL("Invalid --version\n"); + parse_error = 1; + } + break; + + case OPT_ALGORITHM: + algorithm = strtoul(optarg, &e, 0); + if (!*optarg || (e && *e)) { + FATAL("Invalid --algorithm\n"); + parse_error = 1; + } + break; + + case OPT_MODE_PACK: + mode = i; + outfile = optarg; + break; + + case OPT_MODE_UNPACK: + mode = i; + infile = optarg; + break; + + case OPT_COPYTO: + outfile = optarg; + break; + } + } + + if (parse_error) { + print_help(argc, argv); + return 1; + } + + switch (mode) { + case OPT_MODE_PACK: + return do_pack(infile, outfile, algorithm, version); + case OPT_MODE_UNPACK: + return do_unpack(infile, outfile); + default: + printf("Must specify a mode.\n"); + print_help(argc, argv); + return 1; + } +} + +DECLARE_FUTIL_COMMAND(vbutil_key, do_vbutil_key, VBOOT_VERSION_1_0, + "Wraps RSA keys with vboot headers"); diff --git a/futility/cmd_vbutil_keyblock.c b/futility/cmd_vbutil_keyblock.c new file mode 100644 index 0000000..28a3ccd --- /dev/null +++ b/futility/cmd_vbutil_keyblock.c @@ -0,0 +1,363 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Verified boot keyblock utility + */ + +#include +#include +#include +#include +#include + +#include "2common.h" +#include "2rsa.h" +#include "2sysincludes.h" +#include "futility.h" +#include "host_common.h" +#include "host_key21.h" +#include "util_misc.h" +#include "vb1_helper.h" + +/* Command line options */ +enum { + OPT_MODE_PACK = 1000, + OPT_MODE_UNPACK, + OPT_DATAPUBKEY, + OPT_SIGNPUBKEY, + OPT_SIGNPRIVATE, + OPT_SIGNPRIVATE_PEM, + OPT_PEM_ALGORITHM, + OPT_EXTERNAL_SIGNER, + OPT_FLAGS, + OPT_HELP, +}; + +static const struct option long_opts[] = { + {"pack", 1, 0, OPT_MODE_PACK}, + {"unpack", 1, 0, OPT_MODE_UNPACK}, + {"datapubkey", 1, 0, OPT_DATAPUBKEY}, + {"signpubkey", 1, 0, OPT_SIGNPUBKEY}, + {"signprivate", 1, 0, OPT_SIGNPRIVATE}, + {"signprivate_pem", 1, 0, OPT_SIGNPRIVATE_PEM}, + {"pem_algorithm", 1, 0, OPT_PEM_ALGORITHM}, + {"externalsigner", 1, 0, OPT_EXTERNAL_SIGNER}, + {"flags", 1, 0, OPT_FLAGS}, + {"help", 0, 0, OPT_HELP}, + {NULL, 0, 0, 0} +}; + +static const char usage[] = + "\n" + "Usage: " MYNAME " %s <--pack|--unpack> [OPTIONS]\n" + "\n" + "For '--pack ', required OPTIONS are:\n" + " --datapubkey Data public key in .vbpubk format\n" + "\n" + "Optional OPTIONS are:\n" + " --signprivate " + " Signing private key in .vbprivk format.\n" + "OR\n" + " --signprivate_pem \n" + " --pem_algorithm \n" + " Signing private key in .pem format and algorithm id.\n" + "(If one of the above arguments is not specified, the keyblock will\n" + "not be signed.)\n" + "\n" + " --flags Specifies allowed use conditions.\n" + " --externalsigner \"cmd\"" + " Use an external program cmd to calculate the signatures.\n" + "\n" + "For '--unpack ', optional OPTIONS are:\n" + " --signpubkey " + " Signing public key in .vbpubk format. This is required to\n" + " verify a signed keyblock.\n" + " --datapubkey " + " Write the data public key to this file.\n\n"; + +static void print_help(int argc, char *argv[]) +{ + printf(usage, argv[0]); +} + +/* Pack a .keyblock */ +static int Pack(const char *outfile, const char *datapubkey, + const char *signprivate, + const char *signprivate_pem, uint64_t pem_algorithm, + uint64_t flags, const char *external_signer) +{ + struct vb2_private_key *signing_key = NULL; + struct vb2_keyblock *block; + + if (!outfile) { + fprintf(stderr, + "vbutil_keyblock: Must specify output filename.\n"); + return 1; + } + if (!datapubkey) { + fprintf(stderr, + "vbutil_keyblock: Must specify data public key.\n"); + return 1; + } + + struct vb2_packed_key *data_key = vb2_read_packed_key(datapubkey); + if (!data_key) { + fprintf(stderr, "vbutil_keyblock: Error reading data key.\n"); + return 1; + } + + if (signprivate_pem) { + if (pem_algorithm >= VB2_ALG_COUNT) { + fprintf(stderr, + "vbutil_keyblock: Invalid --pem_algorithm %" + PRIu64 "\n", pem_algorithm); + return 1; + } + if (external_signer) { + /* External signing uses the PEM file directly. */ + block = vb2_create_keyblock_external(data_key, + signprivate_pem, + pem_algorithm, + flags, + external_signer); + } else { + signing_key = + vb2_read_private_key_pem(signprivate_pem, + pem_algorithm); + if (!signing_key) { + fprintf(stderr, "vbutil_keyblock:" + " Error reading signing key.\n"); + return 1; + } + block = vb2_create_keyblock(data_key, signing_key, + flags); + } + } else { + if (signprivate) { + signing_key = vb2_read_private_key(signprivate); + if (!signing_key) { + fprintf(stderr, "vbutil_keyblock:" + " Error reading signing key.\n"); + return 1; + } + } + block = vb2_create_keyblock(data_key, signing_key, flags); + } + + free(data_key); + if (signing_key) + free(signing_key); + + if (VB2_SUCCESS != vb2_write_keyblock(outfile, block)) { + fprintf(stderr, "vbutil_keyblock: Error writing keyblock.\n"); + return 1; + } + free(block); + return 0; +} + +static int Unpack(const char *infile, const char *datapubkey, + const char *signpubkey) +{ + struct vb2_packed_key *sign_key = NULL; + + if (!infile) { + fprintf(stderr, "vbutil_keyblock: Must specify filename\n"); + return 1; + } + + struct vb2_keyblock *block = vb2_read_keyblock(infile); + if (!block) { + fprintf(stderr, "vbutil_keyblock: Error reading keyblock.\n"); + return 1; + } + + /* If the signing public key is provided, then verify the block + * signature, since vb2_read_keyblock() only verified the hash. */ + if (signpubkey) { + static uint8_t workbuf[VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + static struct vb2_workbuf wb; + + if (block->keyblock_signature.sig_size == 0) { + fprintf(stderr, + "vbutil_keyblock: signpubkey provided but keyblock is not signed.\n"); + return 1; + } + + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + sign_key = vb2_read_packed_key(signpubkey); + if (!sign_key) { + fprintf(stderr, + "vbutil_keyblock: Error reading signpubkey.\n"); + return 1; + } + struct vb2_public_key key; + if (VB2_SUCCESS != vb2_unpack_key(&key, sign_key)) { + fprintf(stderr, + "vbutil_keyblock: Error reading signpubkey.\n"); + return 1; + } + + if (VB2_SUCCESS != + vb2_verify_keyblock(block, block->keyblock_size, + &key, &wb)) { + fprintf(stderr, "vbutil_keyblock:" + " Error verifying keyblock.\n"); + return 1; + } + free(sign_key); + } + + printf("Keyblock file: %s\n", infile); + printf("Signature %s\n", sign_key ? "valid" : "ignored"); + printf("Flags: %u ", block->keyblock_flags); + if (block->keyblock_flags & VB2_KEYBLOCK_FLAG_DEVELOPER_0) + printf(" !DEV"); + if (block->keyblock_flags & VB2_KEYBLOCK_FLAG_DEVELOPER_1) + printf(" DEV"); + if (block->keyblock_flags & VB2_KEYBLOCK_FLAG_RECOVERY_0) + printf(" !REC"); + if (block->keyblock_flags & VB2_KEYBLOCK_FLAG_RECOVERY_1) + printf(" REC"); + if (block->keyblock_flags & VB2_KEYBLOCK_FLAG_MINIOS_0) + printf(" !MINIOS"); + if (block->keyblock_flags & VB2_KEYBLOCK_FLAG_MINIOS_1) + printf(" MINIOS"); + printf("\n"); + + struct vb2_packed_key *data_key = &block->data_key; + printf("Data key algorithm: %u %s\n", data_key->algorithm, + vb2_get_crypto_algorithm_name(data_key->algorithm)); + printf("Data key version: %u\n", data_key->key_version); + printf("Data key sha1sum: %s\n", + packed_key_sha1_string(data_key)); + + if (datapubkey && + VB2_SUCCESS != vb2_write_packed_key(datapubkey, data_key)) { + fprintf(stderr, "vbutil_keyblock: error writing public key\n"); + return 1; + } + + free(block); + return 0; +} + +static int do_vbutil_keyblock(int argc, char *argv[]) +{ + + char *filename = NULL; + char *datapubkey = NULL; + char *signpubkey = NULL; + char *signprivate = NULL; + char *signprivate_pem = NULL; + char *external_signer = NULL; + uint64_t flags = 0; + uint64_t pem_algorithm = 0; + int is_pem_algorithm = 0; + int mode = 0; + int parse_error = 0; + char *e; + int i; + + while ((i = getopt_long(argc, argv, "", long_opts, NULL)) != -1) { + switch (i) { + case '?': + /* Unhandled option */ + printf("Unknown option\n"); + parse_error = 1; + break; + case OPT_HELP: + print_help(argc, argv); + return !!parse_error; + + case OPT_MODE_PACK: + case OPT_MODE_UNPACK: + mode = i; + filename = optarg; + break; + + case OPT_DATAPUBKEY: + datapubkey = optarg; + break; + + case OPT_SIGNPUBKEY: + signpubkey = optarg; + break; + + case OPT_SIGNPRIVATE: + signprivate = optarg; + break; + + case OPT_SIGNPRIVATE_PEM: + signprivate_pem = optarg; + break; + + case OPT_PEM_ALGORITHM: + pem_algorithm = strtoul(optarg, &e, 0); + if (!*optarg || (e && *e)) { + fprintf(stderr, "Invalid --pem_algorithm\n"); + parse_error = 1; + } else { + is_pem_algorithm = 1; + } + break; + + case OPT_EXTERNAL_SIGNER: + external_signer = optarg; + break; + + case OPT_FLAGS: + flags = strtoul(optarg, &e, 0); + if (!*optarg || (e && *e)) { + fprintf(stderr, "Invalid --flags\n"); + parse_error = 1; + } + break; + } + } + + /* Check if the right combination of options was provided. */ + if (signprivate && signprivate_pem) { + fprintf(stderr, + "Only one of --signprivate or --signprivate_pem must" + " be specified\n"); + parse_error = 1; + } + + if (signprivate_pem && !is_pem_algorithm) { + fprintf(stderr, "--pem_algorithm must be used with" + " --signprivate_pem\n"); + parse_error = 1; + } + + if (external_signer && !signprivate_pem) { + fprintf(stderr, + "--externalsigner must be used with --signprivate_pem" + "\n"); + parse_error = 1; + } + + if (parse_error) { + print_help(argc, argv); + return 1; + } + + switch (mode) { + case OPT_MODE_PACK: + return Pack(filename, datapubkey, signprivate, + signprivate_pem, pem_algorithm, + flags, external_signer); + case OPT_MODE_UNPACK: + return Unpack(filename, datapubkey, signpubkey); + default: + printf("Must specify a mode.\n"); + print_help(argc, argv); + return 1; + } +} + +DECLARE_FUTIL_COMMAND(vbutil_keyblock, do_vbutil_keyblock, VBOOT_VERSION_1_0, + "Creates, signs, and verifies a keyblock"); diff --git a/futility/dump_kernel_config_lib.c b/futility/dump_kernel_config_lib.c new file mode 100644 index 0000000..ff39c41 --- /dev/null +++ b/futility/dump_kernel_config_lib.c @@ -0,0 +1,146 @@ +/* Copyright 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Exports the kernel commandline from a given partition/image. + */ + +#include +#include +#include +#include +#include +#if !defined (__FreeBSD__) && !defined(__OpenBSD__) +#include +#endif +#include +#include + +#include "futility.h" +#include "host_common.h" +#include "kernel_blob.h" +#include "vboot_api.h" +#include "vboot_host.h" + +typedef ssize_t (*ReadFullyFn)(void *ctx, void *buf, size_t count); + +static ssize_t ReadFullyWithRead(void *ctx, void *buf, size_t count) +{ + ssize_t nr_read = 0; + int fd = *((int*)ctx); + while (nr_read < count) { + ssize_t to_read = count - nr_read; + ssize_t chunk = read(fd, buf + nr_read, to_read); + if (chunk < 0) { + return -1; + } else if (chunk == 0) { + break; + } + nr_read += chunk; + } + return nr_read; +} + +/* Skip the stream by calling |read_fn| many times. Return 0 on success. */ +static int SkipWithRead(void *ctx, ReadFullyFn read_fn, size_t count) +{ + char buf[1024]; + ssize_t nr_skipped = 0; + while (nr_skipped < count) { + ssize_t to_read = count - nr_skipped; + if (to_read > sizeof(buf)) { + to_read = sizeof(buf); + } + if (read_fn(ctx, buf, to_read) != to_read) { + return -1; + } + nr_skipped += to_read; + } + return 0; +} + +static char *FindKernelConfigFromStream(void *ctx, ReadFullyFn read_fn, + uint64_t kernel_body_load_address) +{ + struct vb2_keyblock keyblock; + struct vb2_kernel_preamble preamble; + uint32_t now = 0; + uint32_t offset = 0; + + /* Skip the keyblock */ + if (read_fn(ctx, &keyblock, sizeof(keyblock)) != sizeof(keyblock)) { + FATAL("not enough data to fill keyblock header\n"); + return NULL; + } + ssize_t to_skip = keyblock.keyblock_size - sizeof(keyblock); + if (to_skip < 0 || SkipWithRead(ctx, read_fn, to_skip)) { + FATAL("keyblock_size advances past the end of the blob\n"); + return NULL; + } + now += keyblock.keyblock_size; + + /* Open up the preamble */ + if (read_fn(ctx, &preamble, sizeof(preamble)) != sizeof(preamble)) { + FATAL("not enough data to fill preamble\n"); + return NULL; + } + to_skip = preamble.preamble_size - sizeof(preamble); + if (to_skip < 0 || SkipWithRead(ctx, read_fn, to_skip)) { + FATAL("preamble_size advances past the end of the blob\n"); + return NULL; + } + now += preamble.preamble_size; + + /* Read body_load_address from preamble if no + * kernel_body_load_address */ + if (kernel_body_load_address == USE_PREAMBLE_LOAD_ADDR) + kernel_body_load_address = preamble.body_load_address; + + /* The x86 kernels have a pointer to the kernel commandline in the + * zeropage table, but that's irrelevant for ARM. Both types keep the + * config blob in the same place, so just go find it. */ + offset = preamble.bootloader_address - + (kernel_body_load_address + CROS_PARAMS_SIZE + + CROS_CONFIG_SIZE) + now; + to_skip = offset - now; + if (to_skip < 0 || SkipWithRead(ctx, read_fn, to_skip)) { + FATAL("params are outside of the memory blob: %x\n", offset); + return NULL; + } + char *ret = malloc(CROS_CONFIG_SIZE); + if (!ret) { + FATAL("No memory\n"); + return NULL; + } + if (read_fn(ctx, ret, CROS_CONFIG_SIZE) != CROS_CONFIG_SIZE) { + FATAL("Cannot read kernel config\n"); + free(ret); + ret = NULL; + } + return ret; +} + +char *FindKernelConfig(const char *infile, uint64_t kernel_body_load_address) +{ + char *newstr = NULL; + + int fd = open(infile, O_RDONLY | O_CLOEXEC +#if !defined(__FreeBSD__) && !defined(__OpenBSD__) + | O_LARGEFILE +#endif + ); + if (fd < 0) { + FATAL("Cannot open %s\n", infile); + return NULL; + } + + void *ctx = &fd; + ReadFullyFn read_fn = ReadFullyWithRead; + + newstr = FindKernelConfigFromStream(ctx, read_fn, + kernel_body_load_address); + + close(fd); + + return newstr; +} diff --git a/futility/file_type.c b/futility/file_type.c new file mode 100644 index 0000000..b55d13f --- /dev/null +++ b/futility/file_type.c @@ -0,0 +1,180 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "file_type.h" +#include "futility.h" + +/* Description and functions to handle each file type */ +struct futil_file_type_s { + /* Short name for this type */ + const char *name; + /* Human-readable description */ + const char *desc; + /* Functions to identify, display, and sign this type of file. */ + enum futil_file_type (*recognize)(uint8_t *buf, uint32_t len); + int (*show)(const char *name, uint8_t *buf, uint32_t len, void *data); + int (*sign)(const char *name, uint8_t *buf, uint32_t len, void *data); +}; + +/* Populate a list of file types and operator functions. */ +static const struct futil_file_type_s futil_file_types[] = { + {"unknown", "not something we know about", 0, 0, 0}, +#define R_(x) x +#define S_(x) x +#define NONE 0 +#define FILE_TYPE(A, B, C, D, E, F) {B, C, D, E, F}, +#include "file_type.inc" +#undef FILE_TYPE +#undef NONE +#undef S_ +#undef R_ +}; + +const char * const futil_file_type_name(enum futil_file_type type) +{ + return futil_file_types[type].name; +} + +const char * const futil_file_type_desc(enum futil_file_type type) +{ + return futil_file_types[type].desc; +} + +/* Name to enum. Returns true on success. */ +int futil_str_to_file_type(const char *str, enum futil_file_type *type) +{ + int i; + for (i = 0; i < NUM_FILE_TYPES; i++) + if (!strcasecmp(str, futil_file_types[i].name)) { + *type = i; + return 1; + } + + *type = FILE_TYPE_UNKNOWN; + return 0; +} + +/* Print the list of type names and exit with the given value. */ +void print_file_types_and_exit(int retval) +{ + int i; + printf("\nValid file types are:\n\n"); + for (i = 0; i < NUM_FILE_TYPES; i++) + printf(" %-20s%s\n", futil_file_types[i].name, + futil_file_types[i].desc); + printf("\n"); + + exit(retval); +} + +/* Try to figure out what we're looking at */ +enum futil_file_type futil_file_type_buf(uint8_t *buf, uint32_t len) +{ + enum futil_file_type type; + int i; + + for (i = 0; i < NUM_FILE_TYPES; i++) { + if (futil_file_types[i].recognize) { + type = futil_file_types[i].recognize(buf, len); + if (type != FILE_TYPE_UNKNOWN) + return type; + } + } + + return FILE_TYPE_UNKNOWN; +} + +enum futil_file_err futil_file_type(const char *filename, + enum futil_file_type *type) +{ + int ifd; + uint8_t *buf; + uint32_t buf_len; + struct stat sb; + enum futil_file_err err = FILE_ERR_NONE; + + *type = FILE_TYPE_UNKNOWN; + + ifd = open(filename, O_RDONLY); + if (ifd < 0) { + fprintf(stderr, "Can't open %s: %s\n", + filename, strerror(errno)); + return FILE_ERR_OPEN; + } + + if (0 != fstat(ifd, &sb)) { + fprintf(stderr, "Can't stat input file: %s\n", + strerror(errno)); + close(ifd); + return FILE_ERR_STAT; + } + + if (S_ISREG(sb.st_mode) || S_ISBLK(sb.st_mode)) { + err = futil_map_file(ifd, MAP_RO, &buf, &buf_len); + if (err) { + close(ifd); + return err; + } + + *type = futil_file_type_buf(buf, buf_len); + + err = futil_unmap_file(ifd, MAP_RO, buf, buf_len); + if (err) { + close(ifd); + return err; + } + } else if (S_ISDIR(sb.st_mode)) { + err = FILE_ERR_DIR; + } else if (S_ISCHR(sb.st_mode)) { + err = FILE_ERR_CHR; + } else if (S_ISFIFO(sb.st_mode)) { + err = FILE_ERR_FIFO; + } else if (S_ISSOCK(sb.st_mode)) { + err = FILE_ERR_SOCK; + } + + if (close(ifd)) { + fprintf(stderr, "Error when closing %s: %s\n", + filename, strerror(errno)); + return FILE_ERR_CLOSE; + } + + return err; +} + +int futil_file_type_show(enum futil_file_type type, + const char *filename, + uint8_t *buf, uint32_t len) +{ + if (futil_file_types[type].show) + return futil_file_types[type].show(filename, buf, len, 0); + + fprintf(stderr, "Don't know how to show %s (type %s)\n", + filename, futil_file_type_name(type)); + return 1; +} + +int futil_file_type_sign(enum futil_file_type type, + const char *filename, + uint8_t *buf, uint32_t len) +{ + if (futil_file_types[type].sign) + return futil_file_types[type].sign(filename, buf, len, 0); + + fprintf(stderr, "Don't know how to sign %s (type %s)\n", + filename, futil_file_type_name(type)); + return 1; +} + diff --git a/futility/file_type.h b/futility/file_type.h new file mode 100644 index 0000000..e1efe76 --- /dev/null +++ b/futility/file_type.h @@ -0,0 +1,79 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_FILE_TYPE_H_ +#define VBOOT_REFERENCE_FILE_TYPE_H_ + +/* What type of things do I know how to handle? */ +enum futil_file_type { + FILE_TYPE_UNKNOWN, +#define FILE_TYPE(A, B, C, D, E, F) FILE_TYPE_ ## A, +#include "file_type.inc" +#undef FILE_TYPE + NUM_FILE_TYPES +}; + +/* Short name for file types */ +const char * const futil_file_type_name(enum futil_file_type type); + +/* Description of file type */ +const char * const futil_file_type_desc(enum futil_file_type type); + +/* Print the list of type names and exit with the given value. */ +void print_file_types_and_exit(int retval); + +/* Lookup a type by name. Return true on success */ +int futil_str_to_file_type(const char *str, enum futil_file_type *type); + +/* + * This tries to match the buffer content to one of the known file types. + */ +enum futil_file_type futil_file_type_buf(uint8_t *buf, uint32_t len); + +/* + * This opens a file and tries to match it to one of the known file types. + * It's not an error if it returns FILE_TYPE_UKNOWN. + */ +enum futil_file_err futil_file_type(const char *filename, + enum futil_file_type *type); + +/* + * Call the show() method on a buffer containing a specific file type. + * Returns zero on success. It's up to the caller to ensure that only valid + * file types are invoked. + */ +int futil_file_type_show(enum futil_file_type type, + const char *filename, + uint8_t *buf, uint32_t len); + +/* + * Call the sign() method on a buffer containing a specific file type. + * Returns zero on success. It's up to the caller to ensure that only valid + * file types are invoked. + */ +int futil_file_type_sign(enum futil_file_type type, + const char *filename, + uint8_t *buf, uint32_t len); + +/* + * Declare the file_type functions. Certain functions are reused for more than + * one file type, leading to redundant declarations here. + */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wredundant-decls" +#define R_(FOO) \ + enum futil_file_type FOO(uint8_t *buf, uint32_t len); +#define S_(FOO) \ + int FOO(const char *name, uint8_t *buf, uint32_t len, void *data); +#define NONE +#define FILE_TYPE(A, B, C, D, E, F) D E F +#include "file_type.inc" +#undef FILE_TYPE +#undef NONE +#undef S_ +#undef R_ +#pragma GCC diagnostic pop + +#endif /* VBOOT_REFERENCE_FILE_TYPE_H_ */ diff --git a/futility/file_type.inc b/futility/file_type.inc new file mode 100644 index 0000000..0d3acc9 --- /dev/null +++ b/futility/file_type.inc @@ -0,0 +1,82 @@ +/* -*- mode:c -*- + * + * Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * This declares the file types that we can handle. Note that the order may be + * important for types with recognizer functions, since we generally want to to + * look for big things first. + */ + +/* + * enum --type desc + * recognizer function + * show function + * sign function + */ +FILE_TYPE(BIOS_IMAGE, "bios", "Chrome OS BIOS image", + R_(ft_recognize_bios_image), + S_(ft_show_bios), + S_(ft_sign_bios)) +FILE_TYPE(OLD_BIOS_IMAGE, "oldbios", "Cr-48 Chrome OS BIOS image", + R_(ft_recognize_bios_image), + S_(ft_show_bios), + S_(ft_sign_bios)) +FILE_TYPE(GBB, "gbb", "GBB", + R_(ft_recognize_gbb), + S_(ft_show_gbb), + NONE) +FILE_TYPE(FW_PREAMBLE, "fw_pre", "firmware preamble (VBLOCK_A/B)", + R_(ft_recognize_vblock1), + S_(ft_show_fw_preamble), + NONE) +FILE_TYPE(KERN_PREAMBLE, "kernel", "kernel preamble/partition", + R_(ft_recognize_vblock1), + S_(ft_show_kernel_preamble), + S_(ft_sign_kern_preamble)) +FILE_TYPE(KEYBLOCK, "keyblock", "keyblock (signed public key)", + R_(ft_recognize_vblock1), + S_(ft_show_keyblock), + NONE) +FILE_TYPE(PUBKEY, "pubkey", "vb1 packed public key (.vbpubk)", + R_(ft_recognize_vb1_key), + S_(ft_show_pubkey), + S_(ft_sign_pubkey)) +FILE_TYPE(PRIVKEY, "prikey", "vb1 private key (.vbprivk)", + R_(ft_recognize_vb1_key), + S_(ft_show_privkey), + NONE) +FILE_TYPE(VB2_PUBKEY, "pubkey21", "vb21 public key (.vbpubk2)", + R_(ft_recognize_vb21_key), + S_(ft_show_vb21_pubkey), + NONE) +FILE_TYPE(VB2_PRIVKEY, "prikey21", "vb21 private key (.vbprik2)", + R_(ft_recognize_vb21_key), + S_(ft_show_vb21_privkey), + NONE) +FILE_TYPE(PEM, "pem", "RSA private key (.pem)", + R_(ft_recognize_pem), + S_(ft_show_pem), + NONE) +FILE_TYPE(RAW_FIRMWARE, "fwblob", "raw firmware blob (FW_MAIN_A/B)", + NONE, + NONE, + S_(ft_sign_raw_firmware)) +FILE_TYPE(RAW_KERNEL, "vmlinuz", "raw linux kernel", + NONE, + NONE, + S_(ft_sign_raw_kernel)) +FILE_TYPE(CHROMIUMOS_DISK, "disk_img", "chromiumos disk image", + R_(ft_recognize_gpt), + NONE, + NONE) +FILE_TYPE(RWSIG, "rwsig", "RW device image", + R_(ft_recognize_rwsig), + S_(ft_show_rwsig), + S_(ft_sign_rwsig)) +/* Firmware for USB Type-C power adapters */ +FILE_TYPE(USBPD1, "usbpd1", "USB-PD charger image (v1.0)", + R_(ft_recognize_usbpd1), + S_(ft_show_usbpd1), + S_(ft_sign_usbpd1)) diff --git a/futility/file_type_bios.c b/futility/file_type_bios.c new file mode 100644 index 0000000..fe0b223 --- /dev/null +++ b/futility/file_type_bios.c @@ -0,0 +1,509 @@ +/* Copyright 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include +#include + +#include "file_type_bios.h" +#include "file_type.h" +#include "fmap.h" +#include "futility.h" +#include "futility_options.h" +#include "host_common.h" +#include "vb1_helper.h" + +static const char * const fmap_name[] = { + "GBB", /* BIOS_FMAP_GBB */ + "FW_MAIN_A", /* BIOS_FMAP_FW_MAIN_A */ + "FW_MAIN_B", /* BIOS_FMAP_FW_MAIN_B */ + "VBLOCK_A", /* BIOS_FMAP_VBLOCK_A */ + "VBLOCK_B", /* BIOS_FMAP_VBLOCK_B */ +}; +_Static_assert(ARRAY_SIZE(fmap_name) == NUM_BIOS_COMPONENTS, + "Size of fmap_name[] should match NUM_BIOS_COMPONENTS"); + +static const char * const fmap_oldname[] = { + "GBB Area", /* BIOS_FMAP_GBB */ + "Firmware A Data", /* BIOS_FMAP_FW_MAIN_A */ + "Firmware B Data", /* BIOS_FMAP_FW_MAIN_B */ + "Firmware A Key", /* BIOS_FMAP_VBLOCK_A */ + "Firmware B Key", /* BIOS_FMAP_VBLOCK_B */ +}; +_Static_assert(ARRAY_SIZE(fmap_oldname) == NUM_BIOS_COMPONENTS, + "Size of fmap_oldname[] should match NUM_BIOS_COMPONENTS"); + +static void fmap_limit_area(FmapAreaHeader *ah, uint32_t len) +{ + uint32_t sum = ah->area_offset + ah->area_size; + if (sum < ah->area_size || sum > len) { + VB2_DEBUG("%s %#x + %#x > %#x\n", + ah->area_name, ah->area_offset, ah->area_size, len); + ah->area_offset = 0; + ah->area_size = 0; + } +} + +/** Show functions **/ + +int ft_show_gbb(const char *name, uint8_t *buf, uint32_t len, void *data) +{ + struct vb2_gbb_header *gbb = (struct vb2_gbb_header *)buf; + struct bios_state_s *state = (struct bios_state_s *)data; + int retval = 0; + uint32_t maxlen = 0; + + if (!len) { + printf("GBB header: %s \n", name); + return 1; + } + + /* It looks like a GBB or we wouldn't be called. */ + if (!futil_valid_gbb_header(gbb, len, &maxlen)) + retval = 1; + + printf("GBB header: %s\n", name); + printf(" Version: %d.%d\n", + gbb->major_version, gbb->minor_version); + printf(" Flags: 0x%08x\n", gbb->flags); + printf(" Regions: offset size\n"); + printf(" hwid 0x%08x 0x%08x\n", + gbb->hwid_offset, gbb->hwid_size); + printf(" bmpvf 0x%08x 0x%08x\n", + gbb->bmpfv_offset, gbb->bmpfv_size); + printf(" rootkey 0x%08x 0x%08x\n", + gbb->rootkey_offset, gbb->rootkey_size); + printf(" recovery_key 0x%08x 0x%08x\n", + gbb->recovery_key_offset, gbb->recovery_key_size); + + printf(" Size: 0x%08x / 0x%08x%s\n", + maxlen, len, maxlen > len ? " (not enough)" : ""); + + if (retval) { + printf("GBB header is invalid, ignoring content\n"); + return 1; + } + + printf("GBB content:\n"); + printf(" HWID: %s\n", buf + gbb->hwid_offset); + print_hwid_digest(gbb, " digest: ", "\n"); + + struct vb2_packed_key *pubkey = + (struct vb2_packed_key *)(buf + gbb->rootkey_offset); + if (vb2_packed_key_looks_ok(pubkey, gbb->rootkey_size) == VB2_SUCCESS) { + if (state) { + state->rootkey.offset = + state->area[BIOS_FMAP_GBB].offset + + gbb->rootkey_offset; + state->rootkey.buf = buf + gbb->rootkey_offset; + state->rootkey.len = gbb->rootkey_size; + state->rootkey.is_valid = 1; + } + printf(" Root Key:\n"); + show_pubkey(pubkey, " "); + } else { + retval = 1; + printf(" Root Key: \n"); + } + + pubkey = (struct vb2_packed_key *)(buf + gbb->recovery_key_offset); + if (vb2_packed_key_looks_ok(pubkey, gbb->recovery_key_size) + == VB2_SUCCESS) { + if (state) { + state->recovery_key.offset = + state->area[BIOS_FMAP_GBB].offset + + gbb->recovery_key_offset; + state->recovery_key.buf = buf + + gbb->recovery_key_offset; + state->recovery_key.len = gbb->recovery_key_size; + state->recovery_key.is_valid = 1; + } + printf(" Recovery Key:\n"); + show_pubkey(pubkey, " "); + } else { + retval = 1; + printf(" Recovery Key: \n"); + } + + if (!retval && state) + state->area[BIOS_FMAP_GBB].is_valid = 1; + + return retval; +} + +/* + * This handles FW_MAIN_A and FW_MAIN_B while processing a BIOS image. + * + * The data is just the RW firmware blob, so there's nothing useful to show + * about it. We'll just mark it as present so when we encounter corresponding + * VBLOCK area, we'll have this to verify. + */ +static int fmap_show_fw_main(const char *name, uint8_t *buf, uint32_t len, + void *data) +{ + struct bios_state_s *state = (struct bios_state_s *)data; + + if (!len) { + printf("Firmware body: %s \n", name); + return 1; + } + + printf("Firmware body: %s\n", name); + printf(" Offset: 0x%08x\n", + state->area[state->c].offset); + printf(" Size: 0x%08x\n", len); + + state->area[state->c].is_valid = 1; + + return 0; +} + +/* Functions to call to show the bios components */ +static int (*fmap_show_fn[])(const char *name, uint8_t *buf, uint32_t len, + void *data) = { + ft_show_gbb, + fmap_show_fw_main, + fmap_show_fw_main, + ft_show_fw_preamble, + ft_show_fw_preamble, +}; +_Static_assert(ARRAY_SIZE(fmap_show_fn) == NUM_BIOS_COMPONENTS, + "Size of fmap_show_fn[] should match NUM_BIOS_COMPONENTS"); + +int ft_show_bios(const char *name, uint8_t *buf, uint32_t len, void *data) +{ + FmapHeader *fmap; + FmapAreaHeader *ah = 0; + char ah_name[FMAP_NAMELEN + 1]; + enum bios_component c; + int retval = 0; + struct bios_state_s state; + + memset(&state, 0, sizeof(state)); + + printf("BIOS: %s\n", name); + + /* We've already checked, so we know this will work. */ + fmap = fmap_find(buf, len); + for (c = 0; c < NUM_BIOS_COMPONENTS; c++) { + /* We know one of these will work, too */ + if (fmap_find_by_name(buf, len, fmap, fmap_name[c], &ah) || + fmap_find_by_name(buf, len, fmap, fmap_oldname[c], &ah)) { + /* But the file might be truncated */ + fmap_limit_area(ah, len); + /* The name is not necessarily null-terminated */ + snprintf(ah_name, sizeof(ah_name), "%s", ah->area_name); + + /* Update the state we're passing around */ + state.c = c; + state.area[c].offset = ah->area_offset; + state.area[c].buf = buf + ah->area_offset; + state.area[c].len = ah->area_size; + + VB2_DEBUG("showing FMAP area %d (%s)," + " offset=0x%08x len=0x%08x\n", + c, ah_name, ah->area_offset, ah->area_size); + + /* Go look at it. */ + if (fmap_show_fn[c]) + retval += fmap_show_fn[c](ah_name, + state.area[c].buf, + state.area[c].len, + &state); + } + } + + return retval; +} + +/** Sign functions **/ + +/* + * This handles FW_MAIN_A and FW_MAIN_B while signing a BIOS image. The data is + * just the RW firmware blob so there's nothing useful to do with it, but we'll + * mark it as valid so that we'll know that this FMAP area exists and can + * be signed. + */ +static int fmap_sign_fw_main(const char *name, uint8_t *buf, uint32_t len, + void *data) +{ + struct bios_state_s *state = (struct bios_state_s *)data; + state->area[state->c].is_valid = 1; + return 0; +} + +/* + * This handles VBLOCK_A and VBLOCK_B while processing a BIOS image. We don't + * do any signing here. We just check to see if the existing FMAP area contains + * a firmware preamble so we can preserve its contents. We do the signing once + * we've looked over all the components. + */ +static int fmap_sign_fw_preamble(const char *name, uint8_t *buf, uint32_t len, + void *data) +{ + static uint8_t workbuf[VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + static struct vb2_workbuf wb; + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + struct vb2_keyblock *keyblock = (struct vb2_keyblock *)buf; + struct bios_state_s *state = (struct bios_state_s *)data; + + /* + * If we have a valid keyblock and fw_preamble, then we can use them to + * determine the size of the firmware body. Otherwise, we'll have to + * just sign the whole region. + */ + if (VB2_SUCCESS != vb2_verify_keyblock_hash(keyblock, len, &wb)) { + fprintf(stderr, "Warning: %s keyblock is invalid. " + "Signing the entire FW FMAP region...\n", name); + goto whatever; + } + + if (vb2_packed_key_looks_ok(&keyblock->data_key, + keyblock->data_key.key_offset + + keyblock->data_key.key_size)) { + fprintf(stderr, "Warning: %s public key is invalid. " + "Signing the entire FW FMAP region...\n", name); + goto whatever; + } + uint32_t more = keyblock->keyblock_size; + struct vb2_fw_preamble *preamble = + (struct vb2_fw_preamble *)(buf + more); + uint32_t fw_size = preamble->body_signature.data_size; + struct bios_area_s *fw_body_area = 0; + + switch (state->c) { + case BIOS_FMAP_VBLOCK_A: + fw_body_area = &state->area[BIOS_FMAP_FW_MAIN_A]; + /* Preserve the flags if they're not specified */ + if (!sign_option.flags_specified) + sign_option.flags = preamble->flags; + break; + case BIOS_FMAP_VBLOCK_B: + fw_body_area = &state->area[BIOS_FMAP_FW_MAIN_B]; + break; + default: + FATAL("Can only handle VBLOCK_A or VBLOCK_B\n"); + } + + if (fw_size > fw_body_area->len) { + fprintf(stderr, + "%s says the firmware is larger than we have\n", + name); + return 1; + } + + /* Update the firmware size */ + fw_body_area->len = fw_size; + +whatever: + state->area[state->c].is_valid = 1; + + return 0; +} + +static int write_new_preamble(struct bios_area_s *vblock, + struct bios_area_s *fw_body, + struct vb2_private_key *signkey, + struct vb2_keyblock *keyblock) +{ + struct vb2_signature *body_sig; + struct vb2_fw_preamble *preamble; + + body_sig = vb2_calculate_signature(fw_body->buf, fw_body->len, signkey); + if (!body_sig) { + fprintf(stderr, "Error calculating body signature\n"); + return 1; + } + + preamble = vb2_create_fw_preamble(sign_option.version, + (struct vb2_packed_key *)sign_option.kernel_subkey, + body_sig, + signkey, + sign_option.flags); + if (!preamble) { + fprintf(stderr, "Error creating firmware preamble.\n"); + free(body_sig); + return 1; + } + + /* Write the new keyblock */ + uint32_t more = keyblock->keyblock_size; + memcpy(vblock->buf, keyblock, more); + /* and the new preamble */ + memcpy(vblock->buf + more, preamble, preamble->preamble_size); + + free(preamble); + free(body_sig); + + return 0; +} + +static int write_loem(const char *ab, struct bios_area_s *vblock) +{ + char filename[PATH_MAX]; + int n; + n = snprintf(filename, sizeof(filename), "%s/vblock_%s.%s", + sign_option.loemdir ? sign_option.loemdir : ".", + ab, sign_option.loemid); + if (n >= sizeof(filename)) { + fprintf(stderr, "LOEM args produce bogus filename\n"); + return 1; + } + + FILE *fp = fopen(filename, "w"); + if (!fp) { + fprintf(stderr, "Can't open %s for writing: %s\n", + filename, strerror(errno)); + return 1; + } + + if (1 != fwrite(vblock->buf, vblock->len, 1, fp)) { + fprintf(stderr, "Can't write to %s: %s\n", + filename, strerror(errno)); + fclose(fp); + return 1; + } + if (fclose(fp)) { + fprintf(stderr, "Failed closing loem output: %s\n", + strerror(errno)); + return 1; + } + + return 0; +} + +/* This signs a full BIOS image after it's been traversed. */ +static int sign_bios_at_end(struct bios_state_s *state) +{ + struct bios_area_s *vblock_a = &state->area[BIOS_FMAP_VBLOCK_A]; + struct bios_area_s *vblock_b = &state->area[BIOS_FMAP_VBLOCK_B]; + struct bios_area_s *fw_a = &state->area[BIOS_FMAP_FW_MAIN_A]; + struct bios_area_s *fw_b = &state->area[BIOS_FMAP_FW_MAIN_B]; + int retval = 0; + + if (!vblock_a->is_valid || !vblock_b->is_valid || + !fw_a->is_valid || !fw_b->is_valid) { + fprintf(stderr, "Something's wrong. Not changing anything\n"); + return 1; + } + + /* Do A & B differ ? */ + if (fw_a->len != fw_b->len || + memcmp(fw_a->buf, fw_b->buf, fw_a->len)) { + /* Yes, must use DEV keys for A */ + if (!sign_option.devsignprivate || !sign_option.devkeyblock) { + fprintf(stderr, + "FW A & B differ. DEV keys are required.\n"); + return 1; + } + retval |= write_new_preamble(vblock_a, fw_a, + sign_option.devsignprivate, + sign_option.devkeyblock); + } else { + retval |= write_new_preamble(vblock_a, fw_a, + sign_option.signprivate, + sign_option.keyblock); + } + + /* FW B is always normal keys */ + retval |= write_new_preamble(vblock_b, fw_b, + sign_option.signprivate, + sign_option.keyblock); + + + + + if (sign_option.loemid) { + retval |= write_loem("A", vblock_a); + retval |= write_loem("B", vblock_b); + } + + return retval; +} + +/* Functions to call while preparing to sign the bios */ +static int (*fmap_sign_fn[])(const char *name, uint8_t *buf, uint32_t len, + void *data) = { + 0, + fmap_sign_fw_main, + fmap_sign_fw_main, + fmap_sign_fw_preamble, + fmap_sign_fw_preamble, +}; +_Static_assert(ARRAY_SIZE(fmap_sign_fn) == NUM_BIOS_COMPONENTS, + "Size of fmap_sign_fn[] should match NUM_BIOS_COMPONENTS"); + +int ft_sign_bios(const char *name, uint8_t *buf, uint32_t len, void *data) +{ + FmapHeader *fmap; + FmapAreaHeader *ah = 0; + char ah_name[FMAP_NAMELEN + 1]; + enum bios_component c; + int retval = 0; + struct bios_state_s state; + + memset(&state, 0, sizeof(state)); + + /* We've already checked, so we know this will work. */ + fmap = fmap_find(buf, len); + for (c = 0; c < NUM_BIOS_COMPONENTS; c++) { + /* We know one of these will work, too */ + if (fmap_find_by_name(buf, len, fmap, fmap_name[c], &ah) || + fmap_find_by_name(buf, len, fmap, fmap_oldname[c], &ah)) { + /* But the file might be truncated */ + fmap_limit_area(ah, len); + /* The name is not necessarily null-terminated */ + snprintf(ah_name, sizeof(ah_name), "%s", ah->area_name); + + /* Update the state we're passing around */ + state.c = c; + state.area[c].buf = buf + ah->area_offset; + state.area[c].len = ah->area_size; + + VB2_DEBUG("examining FMAP area %d (%s)," + " offset=0x%08x len=0x%08x\n", + c, ah_name, ah->area_offset, ah->area_size); + + /* Go look at it, but abort on error */ + if (fmap_sign_fn[c]) + retval += fmap_sign_fn[c](ah_name, + state.area[c].buf, + state.area[c].len, + &state); + } + } + + retval += sign_bios_at_end(&state); + + return retval; +} + +enum futil_file_type ft_recognize_bios_image(uint8_t *buf, uint32_t len) +{ + FmapHeader *fmap; + enum bios_component c; + + fmap = fmap_find(buf, len); + if (!fmap) + return FILE_TYPE_UNKNOWN; + + for (c = 0; c < NUM_BIOS_COMPONENTS; c++) + if (!fmap_find_by_name(buf, len, fmap, fmap_name[c], 0)) + break; + if (c == NUM_BIOS_COMPONENTS) + return FILE_TYPE_BIOS_IMAGE; + + for (c = 0; c < NUM_BIOS_COMPONENTS; c++) + if (!fmap_find_by_name(buf, len, fmap, fmap_oldname[c], 0)) + break; + if (c == NUM_BIOS_COMPONENTS) + return FILE_TYPE_OLD_BIOS_IMAGE; + + return FILE_TYPE_UNKNOWN; +} diff --git a/futility/file_type_bios.h b/futility/file_type_bios.h new file mode 100644 index 0000000..ef40107 --- /dev/null +++ b/futility/file_type_bios.h @@ -0,0 +1,43 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_FILE_TYPE_BIOS_H_ +#define VBOOT_REFERENCE_FILE_TYPE_BIOS_H_ + +#include + +/* + * The Chrome OS BIOS must contain specific FMAP areas, which we want to look + * at in a certain order. + */ +enum bios_component { + BIOS_FMAP_GBB, + BIOS_FMAP_FW_MAIN_A, + BIOS_FMAP_FW_MAIN_B, + BIOS_FMAP_VBLOCK_A, + BIOS_FMAP_VBLOCK_B, + + NUM_BIOS_COMPONENTS +}; + +/* Location information for each component */ +struct bios_area_s { + uint32_t offset; /* to avoid pointer math */ + uint8_t *buf; + uint32_t len; + uint32_t is_valid; +}; + +/* State to track as we visit all components */ +struct bios_state_s { + /* Current component */ + enum bios_component c; + /* Other activites, possibly before or after the current one */ + struct bios_area_s area[NUM_BIOS_COMPONENTS]; + struct bios_area_s recovery_key; + struct bios_area_s rootkey; +}; + +#endif /* VBOOT_REFERENCE_FILE_TYPE_BIOS_H_ */ diff --git a/futility/file_type_rwsig.c b/futility/file_type_rwsig.c new file mode 100644 index 0000000..a09782c --- /dev/null +++ b/futility/file_type_rwsig.c @@ -0,0 +1,442 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Some instances of the Chrome OS embedded controller firmware can't do a + * normal software sync handshake at boot, but will verify their own RW images + * instead. This is typically done by putting a struct vb2_packed_key in the RO + * image and a corresponding struct vb21_signature in the RW image. + * + * This file provides the basic implementation for that approach. + */ + +#include +#include +#include + +#include "2common.h" +#include "2rsa.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "file_type.h" +#include "fmap.h" +#include "futility.h" +#include "futility_options.h" +#include "host_common.h" +#include "host_common21.h" +#include "host_key21.h" +#include "host_misc.h" +#include "host_signature21.h" +#include "util_misc.h" + +#define SIGNATURE_RSVD_SIZE 1024 +#define EC_RW_FILENAME "EC_RW.bin" + +static inline void vb2_print_bytes(const void *ptr, uint32_t len) +{ + const uint8_t *buf = (const uint8_t *)ptr; + int i; + for (i = 0; i < len; i++) + printf("%02x", *buf++); +} + +static void show_sig(const char *name, const struct vb21_signature *sig) +{ + printf("Signature: %s\n", name); + printf(" Vboot API: 2.1\n"); + printf(" Desc: \"%s\"\n", vb21_common_desc(sig)); + printf(" Signature Algorithm: %d %s\n", sig->sig_alg, + vb2_get_sig_algorithm_name(sig->sig_alg)); + printf(" Hash Algorithm: %d %s\n", sig->hash_alg, + vb2_get_hash_algorithm_name(sig->hash_alg)); + printf(" Total size: %#x (%d)\n", sig->c.total_size, + sig->c.total_size); + printf(" ID: "); + vb2_print_bytes(&sig->id, sizeof(sig->id)); + printf("\n"); + printf(" Data size: %#x (%d)\n", sig->data_size, + sig->data_size); +} + +int ft_show_rwsig(const char *name, uint8_t *buf, uint32_t len, void *nuthin) +{ + const struct vb21_signature *sig = 0; + const struct vb21_packed_key *pkey = show_option.pkey; + struct vb2_public_key key; + uint8_t workbuf[VB2_VERIFY_DATA_WORKBUF_BYTES] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + struct vb2_workbuf wb; + uint32_t data_size, sig_size = SIGNATURE_RSVD_SIZE; + uint32_t total_data_size = 0; + uint8_t *data; + FmapHeader *fmap; + int i; + + VB2_DEBUG("name %s len 0x%08x (%d)\n", name, len, len); + + /* Am I just looking at a signature file? */ + VB2_DEBUG("Looking for signature at 0x0\n"); + sig = (const struct vb21_signature *)buf; + if (VB2_SUCCESS == vb21_verify_signature(sig, len)) { + show_sig(name, sig); + if (!show_option.fv) { + printf("No data available to verify\n"); + return show_option.strict; + } + data = show_option.fv; + data_size = show_option.fv_size; + total_data_size = show_option.fv_size; + } else if ((fmap = fmap_find(buf, len))) { + /* This looks like a full image. */ + FmapAreaHeader *fmaparea; + + VB2_DEBUG("Found an FMAP!\n"); + + /* If no public key is provided, use the one packed in RO + * image, and print that. */ + if (!pkey) { + pkey = (const struct vb21_packed_key *) + fmap_find_by_name(buf, len, fmap, "KEY_RO", 0); + + if (pkey) + ft_show_vb21_pubkey(name, (uint8_t *)pkey, + pkey->c.total_size, NULL); + } + + sig = (const struct vb21_signature *) + fmap_find_by_name(buf, len, fmap, "SIG_RW", &fmaparea); + if (!sig) { + VB2_DEBUG("No SIG_RW in FMAP.\n"); + return 1; + } + + sig_size = fmaparea->area_size; + + VB2_DEBUG("Looking for signature at %#tx (%#x)\n", + (uint8_t*)sig - buf, sig_size); + + if (VB2_SUCCESS != vb21_verify_signature(sig, sig_size)) + return 1; + + show_sig(name, sig); + data = fmap_find_by_name(buf, len, fmap, "EC_RW", &fmaparea); + data_size = sig->data_size; + /* + * TODO(crosbug.com/p/62231): EC_RW region should not include + * the signature. + */ + total_data_size = fmaparea->area_size-sig_size; + + if (!data) { + VB2_DEBUG("No EC_RW in FMAP.\n"); + return 1; + } + } else { + /* Or maybe this is just the RW portion, that does not + * contain a FMAP. */ + if (show_option.sig_size) + sig_size = show_option.sig_size; + + VB2_DEBUG("Looking for signature at %#x\n", len - sig_size); + + if (len < sig_size) { + VB2_DEBUG("File is too small\n"); + return 1; + } + + sig = (const struct vb21_signature *)(buf + len - sig_size); + if (VB2_SUCCESS == vb21_verify_signature(sig, sig_size)) { + show_sig(name, sig); + data = buf; + data_size = sig->data_size; + total_data_size = len - sig_size; + } else { + return 1; + } + } + + if (!pkey) { + printf("No public key available to verify with\n"); + return show_option.strict; + } + + /* We already did this once, so it should work again */ + if (vb21_unpack_key(&key, + (const uint8_t *)pkey, + pkey->c.total_size)) { + VB2_DEBUG("Can't unpack pubkey\n"); + return 1; + } + + if (data_size > total_data_size) { + VB2_DEBUG("Invalid signature data_size: bigger than total area size.\n"); + return 1; + } + + /* The sig is destroyed by the verify operation, so make a copy */ + { + uint8_t sigbuf[sig->c.total_size]; + memcpy(sigbuf, sig, sizeof(sigbuf)); + + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + if (vb21_verify_data(data, data_size, + (struct vb21_signature *)sigbuf, + (const struct vb2_public_key *)&key, + &wb)) { + fprintf(stderr, "Signature verification failed\n"); + return 1; + } + } + + /* Check that the rest of region is padded with 0xff. */ + for (i = data_size; i < total_data_size; i++) { + if (data[i] != 0xff) { + fprintf(stderr, "Padding verification failed\n"); + return 1; + } + } + + printf("Signature verification succeeded.\n"); + return 0; +} + +int ft_sign_rwsig(const char *name, uint8_t *buf, uint32_t len, void *nuthin) +{ + struct vb21_signature *tmp_sig = 0; + struct vb2_public_key *pubkey = 0; + struct vb21_packed_key *packedkey = 0; + uint8_t *keyb_data = 0; + uint32_t keyb_size; + uint8_t* data = buf; /* data to be signed */ + uint32_t r, data_size = len, sig_size = SIGNATURE_RSVD_SIZE; + int retval = 1; + FmapHeader *fmap = NULL; + FmapAreaHeader *fmaparea; + struct vb21_signature *old_sig = 0; + + VB2_DEBUG("name %s len 0x%08x (%d)\n", name, len, len); + + /* If we don't have a distinct OUTFILE, look for an existing sig */ + if (sign_option.inout_file_count < 2) { + fmap = fmap_find(buf, len); + + if (fmap) { + /* This looks like a full image. */ + VB2_DEBUG("Found an FMAP!\n"); + + old_sig = (struct vb21_signature *) + fmap_find_by_name(buf, len, fmap, "SIG_RW", + &fmaparea); + if (!old_sig) { + VB2_DEBUG("No SIG_RW in FMAP.\n"); + goto done; + } + + sig_size = fmaparea->area_size; + + VB2_DEBUG("Looking for signature at %#tx (%#x)\n", + (uint8_t*)old_sig - buf, sig_size); + + data = fmap_find_by_name(buf, len, fmap, "EC_RW", + &fmaparea); + if (!data) { + VB2_DEBUG("No EC_RW in FMAP.\n"); + goto done; + } + } else { + /* Or maybe this is just the RW portion, that does not + * contain a FMAP. */ + if (sign_option.sig_size) + sig_size = sign_option.sig_size; + + VB2_DEBUG("Looking for old signature at %#x\n", + len - sig_size); + + if (len < sig_size) { + fprintf(stderr, "File is too small\n"); + goto done; + } + + /* Take a look */ + old_sig = (struct vb21_signature *) + (buf + len - sig_size); + } + + if (vb21_verify_signature(old_sig, sig_size)) { + fprintf(stderr, "Can't find a valid signature\n"); + goto done; + } + + /* Use the same extent again */ + data_size = old_sig->data_size; + + VB2_DEBUG("Found sig: data_size is %#x (%d)\n", data_size, + data_size); + } + + /* Unless overridden */ + if (sign_option.data_size) + data_size = sign_option.data_size; + + /* Sign the blob */ + if (sign_option.prikey) { + r = vb21_sign_data(&tmp_sig, + data, data_size, sign_option.prikey, 0); + if (r) { + fprintf(stderr, + "Unable to sign data (error 0x%08x)\n", r); + goto done; + } + } else { + VB2_DEBUG("Private key not provided. Copying previous signature\n"); + if (!old_sig) { + /* This isn't necessary because no prikey mode runs only + * for fmap input or RW input */ + fprintf(stderr, "Previous signature not found.\n"); + goto done; + } + tmp_sig = calloc(1, old_sig->c.total_size); + if (!tmp_sig) + goto done; + memcpy(tmp_sig, old_sig, old_sig->c.total_size); + } + + if (sign_option.inout_file_count < 2) { + /* Overwrite the old signature */ + if (tmp_sig->c.total_size > sig_size) { + fprintf(stderr, "New sig is too large (%d > %d)\n", + tmp_sig->c.total_size, sig_size); + goto done; + } + VB2_DEBUG("Replacing old signature with new one\n"); + memset(old_sig, 0xff, sig_size); + memcpy(old_sig, tmp_sig, tmp_sig->c.total_size); + if (fmap) { + VB2_DEBUG("Writing %s (size=%d)\n", + EC_RW_FILENAME, fmaparea->area_size); + if (vb2_write_file(EC_RW_FILENAME, + data, fmaparea->area_size)) + goto done; + } + } else { + /* Write the signature to a new file */ + r = vb21_write_object(sign_option.outfile, tmp_sig); + if (r) { + fprintf(stderr, "Unable to write sig" + " (error 0x%08x, if that helps)\n", r); + goto done; + } + } + + /* For full images, let's replace the public key in RO. If prikey is + * not provided, skip it. */ + if (fmap && sign_option.prikey) { + uint8_t *new_pubkey; + uint8_t *pubkey_buf = 0; + + /* Create the public key */ + if (vb2_public_key_alloc(&pubkey, + sign_option.prikey->sig_alg)) { + fprintf(stderr, "Unable to allocate the public key\n"); + goto done; + } + + /* Extract the keyb blob */ + if (vb_keyb_from_rsa(sign_option.prikey->rsa_private_key, + &keyb_data, &keyb_size)) { + fprintf(stderr, "Couldn't extract the public key\n"); + goto done; + } + + /* + * Copy the keyb blob to the public key's buffer, because that's + * where vb2_unpack_key_data() and vb2_public_key_pack() expect + * to find it. + */ + pubkey_buf = vb2_public_key_packed_data(pubkey); + memcpy(pubkey_buf, keyb_data, keyb_size); + + /* Fill in the internal struct pointers */ + if (vb2_unpack_key_data(pubkey, pubkey_buf, keyb_size)) { + fprintf(stderr, "Unable to unpack the public key blob\n"); + goto done; + } + + pubkey->hash_alg = sign_option.prikey->hash_alg; + pubkey->version = sign_option.version_specified ? + sign_option.version : 1; + vb2_public_key_set_desc(pubkey, sign_option.prikey->desc); + + memcpy((struct vb2_id *)pubkey->id, &sign_option.prikey->id, + sizeof(*(pubkey->id))); + + if (vb21_public_key_pack(&packedkey, pubkey)) { + goto done; + } + + new_pubkey = fmap_find_by_name(buf, len, fmap, "KEY_RO", + &fmaparea); + if (!new_pubkey) { + VB2_DEBUG("No KEY_RO in FMAP.\n"); + goto done; + } + /* Overwrite the old signature */ + if (packedkey->c.total_size > fmaparea->area_size) { + fprintf(stderr, "New sig is too large (%d > %d)\n", + packedkey->c.total_size, sig_size); + goto done; + } + + memset(new_pubkey, 0xff, fmaparea->area_size); + memcpy(new_pubkey, packedkey, packedkey->c.total_size); + } + + /* Finally */ + retval = 0; +done: + if (tmp_sig) + free(tmp_sig); + if (pubkey) + vb2_public_key_free(pubkey); + if (packedkey) + free(packedkey); + if (keyb_data) + free(keyb_data); + + return retval; +} + +enum futil_file_type ft_recognize_rwsig(uint8_t *buf, uint32_t len) +{ + FmapHeader *fmap; + const struct vb21_signature *sig = NULL; + uint32_t sig_size; + + if (!vb21_verify_signature((const struct vb21_signature *)buf, len)) + return FILE_TYPE_RWSIG; + + fmap = fmap_find(buf, len); + if (fmap) { + /* This looks like a full image. */ + FmapAreaHeader *fmaparea; + + sig = (const struct vb21_signature *) + fmap_find_by_name(buf, len, fmap, "SIG_RW", &fmaparea); + + if (!sig) + return FILE_TYPE_UNKNOWN; + + sig_size = fmaparea->area_size; + } else { + /* RW-only image */ + sig = (const struct vb21_signature *) + (buf + len - SIGNATURE_RSVD_SIZE); + sig_size = SIGNATURE_RSVD_SIZE; + } + + if (len >= sig_size && !vb21_verify_signature(sig, sig_size)) + return FILE_TYPE_RWSIG; + + return FILE_TYPE_UNKNOWN; +} diff --git a/futility/file_type_usbpd1.c b/futility/file_type_usbpd1.c new file mode 100644 index 0000000..9379188 --- /dev/null +++ b/futility/file_type_usbpd1.c @@ -0,0 +1,483 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * The USB Type-C chargers released with Samus ("Pixel (2015)") have upgradable + * firmware. Due to space considerations, we don't have room for handy things + * like an FMAP or headers for the signatures. Accordingly, all the normally + * variable factors (image size, signature algorithms, etc.) are hard coded + * and the image itself just looks like a bunch of random numbers. + * + * This file handles those images, but PLEASE don't use it as a template for + * new devices. Look at file_type_rwsig.c instead. + */ + +#include +#include +#include + +#include "2common.h" +#include "2rsa.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "file_type.h" +#include "futility.h" +#include "futility_options.h" +#include "host_common.h" +#include "host_common21.h" +#include "host_key21.h" +#include "host_signature21.h" +#include "util_misc.h" + +/* Return 1 if okay, 0 if not */ +static int parse_size_opts(uint32_t len, + uint32_t *ro_size_ptr, uint32_t *rw_size_ptr, + uint32_t *ro_offset_ptr, uint32_t * rw_offset_ptr) +{ + uint32_t ro_size, rw_size, ro_offset, rw_offset; + + /* Assume the image has both RO and RW, evenly split. */ + ro_offset = 0; + ro_size = rw_size = rw_offset = len / 2; + + /* Unless told otherwise... */ + if (sign_option.ro_size != 0xffffffff) + ro_size = sign_option.ro_size; + if (sign_option.ro_offset != 0xffffffff) + ro_offset = sign_option.ro_offset; + + /* If RO is missing, the whole thing must be RW */ + if (!ro_size) { + rw_size = len; + rw_offset = 0; + } + + /* Unless that's overridden too */ + if (sign_option.rw_size != 0xffffffff) + rw_size = sign_option.rw_size; + if (sign_option.rw_offset != 0xffffffff) + rw_offset = sign_option.rw_offset; + + VB2_DEBUG("ro_size 0x%08x\n", ro_size); + VB2_DEBUG("ro_offset 0x%08x\n", ro_offset); + VB2_DEBUG("rw_size 0x%08x\n", rw_size); + VB2_DEBUG("rw_offset 0x%08x\n", rw_offset); + + /* Now let's do some validity checks. */ + if (ro_size > len || ro_offset > len - ro_size || + rw_size > len || rw_offset > len - rw_size) { + printf("size/offset values are bogus\n"); + return 0; + } + + *ro_size_ptr = ro_size; + *rw_size_ptr = rw_size; + *ro_offset_ptr = ro_offset; + *rw_offset_ptr = rw_offset; + + return 1; +} + +int ft_sign_usbpd1(const char *name, uint8_t *buf, uint32_t len, void *data) +{ + struct vb2_private_key *key_ptr = 0; + struct vb21_signature *sig_ptr = 0; + uint8_t *keyb_data = 0; + uint32_t keyb_size; + int retval = 1; + uint32_t sig_size; + uint32_t sig_offset; + uint32_t pub_size; + uint32_t pub_offset; + uint32_t ro_size; + uint32_t rw_size; + uint32_t ro_offset; + uint32_t rw_offset; + uint32_t r; + + VB2_DEBUG("name %s len %#.8x (%d)\n", name, len, len); + + /* Get image locations */ + if (!parse_size_opts(len, &ro_size, &rw_size, &ro_offset, &rw_offset)) + goto done; + + /* Read the signing keypair file */ + if (vb2_private_key_read_pem(&key_ptr, sign_option.pem_signpriv)) { + fprintf(stderr, "Unable to read keypair from %s\n", + sign_option.pem_signpriv); + goto done; + } + + /* Set the algs */ + key_ptr->hash_alg = sign_option.hash_alg; + key_ptr->sig_alg = vb2_rsa_sig_alg(key_ptr->rsa_private_key); + if (key_ptr->sig_alg == VB2_SIG_INVALID) { + fprintf(stderr, "Unsupported sig algorithm in RSA key\n"); + goto done; + } + + /* Figure out what needs signing */ + sig_size = vb2_rsa_sig_size(key_ptr->sig_alg); + if (rw_size < sig_size) { + fprintf(stderr, + "The RW image is too small to hold the signature" + " (0x%08x < %08x)\n", rw_size, sig_size); + goto done; + } + rw_size -= sig_size; + sig_offset = rw_offset + rw_size; + + VB2_DEBUG("rw_size => 0x%08x\n", rw_size); + VB2_DEBUG("rw_offset => 0x%08x\n", rw_offset); + VB2_DEBUG("sig_size 0x%08x\n", sig_size); + VB2_DEBUG("sig_offset 0x%08x\n", sig_offset); + + /* Sign the blob */ + r = vb21_sign_data(&sig_ptr, buf + rw_offset, rw_size, key_ptr, "Bah"); + if (r) { + fprintf(stderr, + "Unable to sign data (error 0x%08x, if that helps)\n", + r); + goto done; + } + + /* Double-check the size */ + if (sig_ptr->sig_size != sig_size) { + fprintf(stderr, + "ERROR: sig size is %d bytes, not %d as expected.\n", + sig_ptr->sig_size, sig_size); + goto done; + } + + /* Okay, looking good. Update the signature. */ + memcpy(buf + sig_offset, + (uint8_t *)sig_ptr + sig_ptr->sig_offset, + sig_ptr->sig_size); + + + /* If there's no RO section, we're done. */ + if (!ro_size) { + retval = 0; + goto done; + } + + /* Otherwise, now update the public key */ + if (vb_keyb_from_rsa(key_ptr->rsa_private_key, + &keyb_data, &keyb_size)) { + fprintf(stderr, "Couldn't extract the public key\n"); + goto done; + } + VB2_DEBUG("keyb_size is %#x (%d):\n", keyb_size, keyb_size); + + /* + * Of course the packed public key format is different. Why would you + * think otherwise? Since the dawn of time, vboot has used this: + * + * uint32_t nwords size of RSA key in 32-bit words + * uint32_t n0inv magic RSA n0inv + * uint32_t n[nwords] magic RSA modulus little endian array + * uint32_t rr[nwords] magic RSA R^2 little endian array + * + * But for no discernable reason, the usbpd1 format uses this: + * + * uint32_t n[nwords] magic RSA modulus little endian array + * uint32_t rr[nwords] magic RSA R^2 little endian array + * uint32_t n0inv magic RSA n0inv + * + * There's no nwords field, and n0inv is last insted of first. Sigh. + */ + pub_size = keyb_size - 4; + + /* align pubkey size to 16-byte boundary */ + uint32_t pub_pad = pub_size; + pub_size = (pub_size + 16) / 16 * 16; + pub_pad = pub_size - pub_pad; + + pub_offset = ro_offset + ro_size - pub_size; + + if (ro_size < pub_size) { + fprintf(stderr, + "The RO image is too small to hold the public key" + " (0x%08x < %08x)\n", ro_size, pub_size); + goto done; + } + + /* How many bytes in the arrays? */ + uint32_t nbytes = 4 * (*(uint32_t *)keyb_data); + /* Source offsets from keyb_data */ + uint32_t src_ofs_n0inv = 4; + uint32_t src_ofs_n = src_ofs_n0inv + 4; + uint32_t src_ofs_rr = src_ofs_n + nbytes; + /* Dest offsets from buf */ + uint32_t dst_ofs_n = pub_offset + 0; + uint32_t dst_ofs_rr = dst_ofs_n + nbytes; + uint32_t dst_ofs_n0inv = dst_ofs_rr + nbytes; + + VB2_DEBUG("len 0x%08x ro_size 0x%08x ro_offset 0x%08x\n", + len, ro_size, ro_offset); + VB2_DEBUG("pub_size 0x%08x pub_offset 0x%08x nbytes 0x%08x\n", + pub_size, pub_offset, nbytes); + VB2_DEBUG("pub_pad 0x%08x\n", pub_pad); + + /* Copy n[nwords] */ + memcpy(buf + dst_ofs_n, + keyb_data + src_ofs_n, + nbytes); + /* Copy rr[nwords] */ + memcpy(buf + dst_ofs_rr, + keyb_data + src_ofs_rr, + nbytes); + /* Copy n0inv */ + memcpy(buf + dst_ofs_n0inv, + keyb_data + src_ofs_n0inv, + 4); + /* Pad with 0xff */ + memset(buf + dst_ofs_n0inv + 4, 0xff, pub_pad); + + /* Finally */ + retval = 0; +done: + if (key_ptr) + vb2_private_key_free(key_ptr); + if (keyb_data) + free(keyb_data); + + return retval; +} + + +/* + * Algorithms that we want to try, in order. We've only ever shipped with + * RSA2048 / SHA256, but the others should work in tests. + */ +static enum vb2_signature_algorithm sigs[] = { + VB2_SIG_RSA2048, + VB2_SIG_RSA2048_EXP3, + VB2_SIG_RSA1024, + VB2_SIG_RSA4096, + VB2_SIG_RSA8192, +}; +static enum vb2_hash_algorithm hashes[] = { + VB2_HASH_SHA256, + VB2_HASH_SHA1, + VB2_HASH_SHA512, +}; + +/* + * The size of the public key structure used by usbpd1 is + * 2 x RSANUMBYTES for n and rr fields + * plus 4 for n0inv, aligned on a multiple of 16 + */ +static uint32_t usbpd1_packed_key_size(enum vb2_signature_algorithm sig_alg) +{ + switch (sig_alg) { + case VB2_SIG_RSA1024: + return 272; + case VB2_SIG_RSA2048: + case VB2_SIG_RSA2048_EXP3: + return 528; + case VB2_SIG_RSA4096: + return 1040; + case VB2_SIG_RSA8192: + return 2064; + default: + return 0; + } +} +static void vb2_pubkey_from_usbpd1(struct vb2_public_key *key, + enum vb2_signature_algorithm sig_alg, + enum vb2_hash_algorithm hash_alg, + const uint8_t *o_pubkey, + uint32_t o_pubkey_size) +{ + key->arrsize = vb2_rsa_sig_size(sig_alg) / sizeof(uint32_t); + key->n0inv = *((uint32_t *)o_pubkey + 2 * key->arrsize); + key->n = (uint32_t *)o_pubkey; + key->rr = (uint32_t *)o_pubkey + key->arrsize; + key->sig_alg = sig_alg; + key->hash_alg = hash_alg; + key->desc = 0; + key->version = 0; + key->id = vb2_hash_id(hash_alg); +} + +static vb2_error_t vb21_sig_from_usbpd1(struct vb21_signature **sig, + enum vb2_signature_algorithm sig_alg, + enum vb2_hash_algorithm hash_alg, + const uint8_t *o_sig, + uint32_t o_sig_size, uint32_t data_size) +{ + struct vb21_signature s = { + .c.magic = VB21_MAGIC_SIGNATURE, + .c.struct_version_major = VB21_SIGNATURE_VERSION_MAJOR, + .c.struct_version_minor = VB21_SIGNATURE_VERSION_MINOR, + .c.fixed_size = sizeof(s), + .sig_alg = sig_alg, + .hash_alg = hash_alg, + .data_size = data_size, + .sig_size = vb2_rsa_sig_size(sig_alg), + .sig_offset = sizeof(s), + }; + uint32_t total_size = sizeof(s) + o_sig_size; + uint8_t *buf = calloc(1, total_size); + if (!buf) + return VB2_ERROR_UNKNOWN; + + memcpy(buf, &s, sizeof(s)); + memcpy(buf + sizeof(s), o_sig, o_sig_size); + + *sig = (struct vb21_signature *)buf; + return VB2_SUCCESS; +} + +static void show_usbpd1_stuff(const char *name, + enum vb2_signature_algorithm sig_alg, + enum vb2_hash_algorithm hash_alg, + const uint8_t *o_pubkey, uint32_t o_pubkey_size) +{ + struct vb2_public_key key; + struct vb21_packed_key *pkey; + uint8_t sha1sum[VB2_SHA1_DIGEST_SIZE]; + int i; + + vb2_pubkey_from_usbpd1(&key, sig_alg, hash_alg, + o_pubkey, o_pubkey_size); + + if (vb21_public_key_pack(&pkey, &key)) + return; + + vb2_digest_buffer((uint8_t *)pkey + pkey->key_offset, pkey->key_size, + VB2_HASH_SHA1, sha1sum, sizeof(sha1sum)); + + printf("USB-PD v1 image: %s\n", name); + printf(" Algorithm: %s %s\n", + vb2_get_sig_algorithm_name(sig_alg), + vb2_get_hash_algorithm_name(hash_alg)); + printf(" Key sha1sum: "); + for (i = 0; i < VB2_SHA1_DIGEST_SIZE; i++) + printf("%02x", sha1sum[i]); + printf("\n"); + + free(pkey); +} + + +/* Returns VB2_SUCCESS or random error code */ +static vb2_error_t try_our_own(enum vb2_signature_algorithm sig_alg, + enum vb2_hash_algorithm hash_alg, + const uint8_t *o_pubkey, uint32_t o_pubkey_size, + const uint8_t *o_sig, uint32_t o_sig_size, + const uint8_t *data, uint32_t data_size) +{ + struct vb2_public_key pubkey; + struct vb21_signature *sig; + uint8_t buf[VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + struct vb2_workbuf wb = { + .buf = buf, + .size = sizeof(buf), + }; + vb2_error_t rv = VB2_ERROR_UNKNOWN; + + vb2_pubkey_from_usbpd1(&pubkey, sig_alg, hash_alg, + o_pubkey, o_pubkey_size); + + if ((rv = vb21_sig_from_usbpd1(&sig, sig_alg, hash_alg, + o_sig, o_sig_size, data_size))) + return rv; + + rv = vb21_verify_data(data, data_size, sig, &pubkey, &wb); + + free(sig); + + return rv; +} + +/* Returns VB2_SUCCESS if the image validates itself */ +static vb2_error_t check_self_consistency(const uint8_t *buf, const char *name, + uint32_t ro_size, uint32_t rw_size, + uint32_t ro_offset, + uint32_t rw_offset, + enum vb2_signature_algorithm sig_alg, + enum vb2_hash_algorithm hash_alg) +{ + /* Where are the important bits? */ + uint32_t sig_size = vb2_rsa_sig_size(sig_alg); + uint32_t sig_offset = rw_offset + rw_size - sig_size; + uint32_t pubkey_size = usbpd1_packed_key_size(sig_alg); + uint32_t pubkey_offset = ro_offset + ro_size - pubkey_size; + vb2_error_t rv; + + /* Skip stuff that obviously doesn't work */ + if (sig_size > rw_size || pubkey_size > ro_size) + return VB2_ERROR_UNKNOWN; + + rv = try_our_own(sig_alg, hash_alg, /* algs */ + buf + pubkey_offset, pubkey_size, /* pubkey blob */ + buf + sig_offset, sig_size, /* sig blob */ + buf + rw_offset, rw_size - sig_size); /* RW image */ + + if (rv == VB2_SUCCESS && name) + show_usbpd1_stuff(name, sig_alg, hash_alg, + buf + pubkey_offset, pubkey_size); + + return rv; +} + + +int ft_show_usbpd1(const char *name, uint8_t *buf, uint32_t len, void *data) +{ + uint32_t ro_size, rw_size, ro_offset, rw_offset; + int s, h; + + VB2_DEBUG("name %s len 0x%08x (%d)\n", name, len, len); + + /* Get image locations */ + if (!parse_size_opts(len, &ro_size, &rw_size, &ro_offset, &rw_offset)) + return 1; + + /* TODO: If we don't have a RO image, ask for a public key + * TODO: If we're given an external public key, use it (and its alg) */ + if (!ro_size) { + printf("Can't find the public key\n"); + return 1; + } + + /* TODO: Only loop through the numbers we haven't been given */ + for (s = 0; s < ARRAY_SIZE(sigs); s++) + for (h = 0; h < ARRAY_SIZE(hashes); h++) + if (!check_self_consistency(buf, name, + ro_size, rw_size, + ro_offset, rw_offset, + sigs[s], hashes[h])) + return 0; + + printf("This doesn't appear to be a complete usbpd1 image\n"); + return 1; +} + +enum futil_file_type ft_recognize_usbpd1(uint8_t *buf, uint32_t len) +{ + uint32_t ro_size, rw_size, ro_offset, rw_offset; + int s, h; + + /* + * Since we don't use any headers to identify or locate the pubkey and + * signature, in order to identify blob as the right type we have to + * just assume that the RO & RW are 1) both present, and 2) evenly + * split. Then we just try to use what we think might be the pubkey to + * validate what we think might be the signature. + */ + ro_offset = 0; + ro_size = rw_size = rw_offset = len / 2; + + for (s = 0; s < ARRAY_SIZE(sigs); s++) + for (h = 0; h < ARRAY_SIZE(hashes); h++) + if (!check_self_consistency(buf, 0, + ro_size, rw_size, + ro_offset, rw_offset, + sigs[s], hashes[h])) + return FILE_TYPE_USBPD1; + + return FILE_TYPE_UNKNOWN; +} diff --git a/futility/flashrom_drv.c b/futility/flashrom_drv.c new file mode 100644 index 0000000..69532f4 --- /dev/null +++ b/futility/flashrom_drv.c @@ -0,0 +1,227 @@ +/* Copyright 2021 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * The utility functions for firmware updater. + */ + +#include + +#include "2common.h" +#include "crossystem.h" +#include "host_misc.h" +#include "util_misc.h" +#include "updater.h" + +#define FLASHROM_OUTPUT_WP_PATTERN "write protect is " + +/* System environment values. */ +static const char * const FLASHROM_OUTPUT_WP_ENABLED = + FLASHROM_OUTPUT_WP_PATTERN "enabled", + * const FLASHROM_OUTPUT_WP_DISABLED = + FLASHROM_OUTPUT_WP_PATTERN "disabled"; + +// global to allow verbosity level to be injected into callback. +static enum flashrom_log_level g_verbose_screen = FLASHROM_MSG_INFO; + +static int flashrom_print_cb(enum flashrom_log_level level, const char *fmt, + va_list ap) +{ + int ret = 0; + FILE *output_type = (level < FLASHROM_MSG_INFO) ? stderr : stdout; + + if (level > g_verbose_screen) + return ret; + + ret = vfprintf(output_type, fmt, ap); + /* msg_*spew often happens inside chip accessors + * in possibly time-critical operations. + * Don't slow them down by flushing. + */ + if (level != FLASHROM_MSG_SPEW) + fflush(output_type); + + return ret; +} + +static char *flashrom_extract_params(const char *str, char **prog, char **params) +{ + char *tmp = strdup(str); + *prog = strtok(tmp, ":"); + *params = strtok(NULL, ""); + return tmp; +} + +int flashrom_read_image(struct firmware_image *image, const char *region, + int verbosity) +{ + int r = 0; + size_t len = 0; + + g_verbose_screen = verbosity; + + char *programmer, *params; + char *tmp = flashrom_extract_params(image->programmer, &programmer, ¶ms); + + struct flashrom_programmer *prog = NULL; + struct flashrom_flashctx *flashctx = NULL; + struct flashrom_layout *layout = NULL; + + flashrom_set_log_callback((flashrom_log_callback *)&flashrom_print_cb); + + r |= flashrom_init(1); + r |= flashrom_programmer_init(&prog, programmer, params); + r |= flashrom_flash_probe(&flashctx, prog, NULL); + + len = flashrom_flash_getsize(flashctx); + + if (region) { + r = flashrom_layout_read_fmap_from_buffer( + &layout, flashctx, (const uint8_t *)image->data, + image->size); + if (r > 0) { + WARN("could not read fmap from image, r=%d, " + "falling back to read from rom\n", r); + r = flashrom_layout_read_fmap_from_rom( + &layout, flashctx, 0, len); + if (r > 0) { + ERROR("could not read fmap from rom, r=%d\n", r); + r = -1; + goto err_cleanup; + } + } + // empty region causes seg fault in API. + r |= flashrom_layout_include_region(layout, region); + if (r > 0) { + ERROR("could not include region = '%s'\n", region); + r = -1; + goto err_cleanup; + } + flashrom_layout_set(flashctx, layout); + } + + image->data = calloc(1, len); + image->size = len; + image->file_name = strdup(""); + + r |= flashrom_image_read(flashctx, image->data, len); + +err_cleanup: + r |= flashrom_programmer_shutdown(prog); + flashrom_layout_release(layout); + flashrom_flash_release(flashctx); + free(tmp); + + return r; +} + +int flashrom_write_image(const struct firmware_image *image, + const char *region, + const struct firmware_image *diff_image, + int verbosity) +{ + int r = 0; + size_t len = 0; + + g_verbose_screen = verbosity; + + char *programmer, *params; + char *tmp = flashrom_extract_params(image->programmer, &programmer, ¶ms); + + struct flashrom_programmer *prog = NULL; + struct flashrom_flashctx *flashctx = NULL; + struct flashrom_layout *layout = NULL; + + flashrom_set_log_callback((flashrom_log_callback *)&flashrom_print_cb); + + r |= flashrom_init(1); + r |= flashrom_programmer_init(&prog, programmer, params); + r |= flashrom_flash_probe(&flashctx, prog, NULL); + + len = flashrom_flash_getsize(flashctx); + if (len == 0) { + ERROR("zero sized flash detected\n"); + r = -1; + goto err_cleanup; + } + + if (diff_image) { + if (diff_image->size != image->size) { + ERROR("diff_image->size != image->size"); + r = -1; + goto err_cleanup; + } + } + + if (region) { + r = flashrom_layout_read_fmap_from_buffer( + &layout, flashctx, (const uint8_t *)image->data, + image->size); + if (r > 0) { + WARN("could not read fmap from image, r=%d, " + "falling back to read from rom\n", r); + r = flashrom_layout_read_fmap_from_rom( + &layout, flashctx, 0, len); + if (r > 0) { + ERROR("could not read fmap from rom, r=%d\n", r); + r = -1; + goto err_cleanup; + } + } + // empty region causes seg fault in API. + r |= flashrom_layout_include_region(layout, region); + if (r > 0) { + ERROR("could not include region = '%s'\n", region); + r = -1; + goto err_cleanup; + } + flashrom_layout_set(flashctx, layout); + } + + flashrom_flag_set(flashctx, FLASHROM_FLAG_VERIFY_WHOLE_CHIP, true); + flashrom_flag_set(flashctx, FLASHROM_FLAG_VERIFY_AFTER_WRITE, true); + if (diff_image) /* equiv --noverify --flash-contents=diff_image at cli */ + flashrom_flag_set(flashctx, FLASHROM_FLAG_VERIFY_AFTER_WRITE, false); + + r |= flashrom_image_write(flashctx, image->data, image->size, + diff_image ? diff_image->data : NULL); + +err_cleanup: + r |= flashrom_programmer_shutdown(prog); + flashrom_layout_release(layout); + flashrom_flash_release(flashctx); + free(tmp); + + return r; +} + +/* Helper function to return write protection status via given programmer. */ +enum wp_state flashrom_get_wp(const char *programmer) +{ + char *command, *result; + const char *postfix; + int r; + + /* grep is needed because host_shell only returns 1 line. */ + postfix = " 2>/dev/null | grep \"" FLASHROM_OUTPUT_WP_PATTERN "\""; + + + /* TODO(b/203715651): link with flashrom directly. */ + ASPRINTF(&command, "flashrom --wp-status -p %s %s", programmer, postfix); + + /* invokes flashrom(8) with non-zero result if error. */ + result = host_shell(command); + strip_string(result, NULL); + free(command); + VB2_DEBUG("wp-status: %s\n", result); + + if (strstr(result, FLASHROM_OUTPUT_WP_ENABLED)) + r = WP_ENABLED; + else if (strstr(result, FLASHROM_OUTPUT_WP_DISABLED)) + r = WP_DISABLED; + else + r = WP_ERROR; + free(result); + + return r; +} diff --git a/futility/futility.c b/futility/futility.c new file mode 100644 index 0000000..0f262c2 --- /dev/null +++ b/futility/futility.c @@ -0,0 +1,388 @@ +/* Copyright 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "futility.h" + +/******************************************************************************/ +/* Logging stuff */ + +/* File to use for logging, if present */ +#define LOGFILE "/tmp/futility.log" + +/* Normally logging will only happen if the logfile already exists. Uncomment + * this to force log file creation (and thus logging) always. */ + +/* #define FORCE_LOGGING_ON */ + +static int log_fd = -1; + +/* Write the string and a newline. Silently give up on errors */ +static void log_str(const char *prefix, const char *str) +{ + int len, done, n; + + if (log_fd < 0) + return; + + if (!str) + str = "(NULL)"; + + if (prefix && *prefix) { + len = strlen(prefix); + for (done = 0; done < len; done += n) { + n = write(log_fd, prefix + done, len - done); + if (n < 0) + return; + } + } + + len = strlen(str); + if (len == 0) { + str = "(EMPTY)"; + len = strlen(str); + } + + for (done = 0; done < len; done += n) { + n = write(log_fd, str + done, len - done); + if (n < 0) + return; + } + + if (write(log_fd, "\n", 1) < 0) + return; +} + +static void log_close(void) +{ + struct flock lock; + + if (log_fd >= 0) { + memset(&lock, 0, sizeof(lock)); + lock.l_type = F_UNLCK; + lock.l_whence = SEEK_SET; + if (fcntl(log_fd, F_SETLKW, &lock)) + perror("Unable to unlock log file"); + + close(log_fd); + log_fd = -1; + } +} + +static void log_open(void) +{ + struct flock lock; + int ret; + +#ifdef FORCE_LOGGING_ON + log_fd = open(LOGFILE, O_WRONLY | O_APPEND | O_CREAT, 0666); +#else + log_fd = open(LOGFILE, O_WRONLY | O_APPEND); +#endif + if (log_fd < 0) { + + if (errno != EACCES) + return; + + /* Permission problems should improve shortly ... */ + sleep(1); + log_fd = open(LOGFILE, O_WRONLY | O_APPEND | O_CREAT, 0666); + if (log_fd < 0) /* Nope, they didn't */ + return; + } + + /* Let anyone have a turn */ + fchmod(log_fd, 0666); + + /* But only one at a time */ + memset(&lock, 0, sizeof(lock)); + lock.l_type = F_WRLCK; + lock.l_whence = SEEK_END; + + ret = fcntl(log_fd, F_SETLKW, &lock); /* this blocks */ + if (ret < 0) + log_close(); +} + +static void log_args(int argc, char *argv[]) +{ + int i; + ssize_t r; + pid_t parent; + char buf[80]; + FILE *fp; + char caller_buf[PATH_MAX]; + + log_open(); + + /* delimiter */ + log_str(NULL, "##### LOG #####"); + + /* Can we tell who called us? */ + parent = getppid(); + snprintf(buf, sizeof(buf), "/proc/%d/exe", parent); + r = readlink(buf, caller_buf, sizeof(caller_buf) - 1); + if (r >= 0) { + caller_buf[r] = '\0'; + log_str("CALLER:", caller_buf); + } + + /* From where? */ + snprintf(buf, sizeof(buf), "/proc/%d/cwd", parent); + r = readlink(buf, caller_buf, sizeof(caller_buf) - 1); + if (r >= 0) { + caller_buf[r] = '\0'; + log_str("DIR:", caller_buf); + } + + /* And maybe the args? */ + snprintf(buf, sizeof(buf), "/proc/%d/cmdline", parent); + fp = fopen(buf, "r"); + if (fp) { + memset(caller_buf, 0, sizeof(caller_buf)); + r = fread(caller_buf, 1, sizeof(caller_buf) - 1, fp); + if (r > 0) { + char *s = caller_buf; + for (i = 0; i < r && *s; ) { + log_str("CMDLINE:", s); + while (i < r && *s) + i++, s++; + i++, s++; + } + } + fclose(fp); + } + + /* Now log the stuff about ourselves */ + for (i = 0; i < argc; i++) + log_str(NULL, argv[i]); + + log_close(); +} + +/******************************************************************************/ + +static const char *const usage = "\n" +"Usage: " MYNAME " [options] COMMAND [args...]\n" +"\n" +"This is the unified firmware utility, which will eventually replace\n" +"most of the distinct verified boot tools formerly produced by the\n" +"vboot_reference package.\n" +"\n" +"When symlinked under the name of one of those previous tools, it should\n" +"fully implement the original behavior. It can also be invoked directly\n" +"as " MYNAME ", followed by the original name as the first argument.\n" +"\n"; + +static const char *const options = +"Global options:\n" +"\n" +" --vb1 Use only vboot v1.0 binary formats\n" +" --vb21 Use only vboot v2.1 binary formats\n" +" --debug Be noisy about what's going on\n" +"\n"; + +static const struct futil_cmd_t *find_command(const char *name) +{ + const struct futil_cmd_t *const *cmd; + + for (cmd = futil_cmds; *cmd; cmd++) + if (((*cmd)->version & vboot_version) && + !strcmp((*cmd)->name, name)) + return *cmd; + + return NULL; +} + +static void list_commands(void) +{ + const struct futil_cmd_t *const *cmd; + + for (cmd = futil_cmds; *cmd; cmd++) + if (vboot_version & (*cmd)->version) + printf(" %-20s %s\n", + (*cmd)->name, (*cmd)->shorthelp); +} + +static int run_command(const struct futil_cmd_t *cmd, int argc, char *argv[]) +{ + int i; + VB2_DEBUG("\"%s\" ...\n", cmd->name); + for (i = 0; i < argc; i++) + VB2_DEBUG(" argv[%d] = \"%s\"\n", i, argv[i]); + + return cmd->handler(argc, argv); +} + +static int do_help(int argc, char *argv[]) +{ + const struct futil_cmd_t *cmd; + const char *vstr = ""; + + /* Help about a known command? */ + if (argc > 1) { + cmd = find_command(argv[1]); + if (cmd) { + /* Let the command provide its own help */ + argv[0] = argv[1]; + argv[1] = (char *)"--help"; + return run_command(cmd, argc, argv); + } + } + + fputs(usage, stdout); + + if (vboot_version == VBOOT_VERSION_ALL) + fputs(options, stdout); + + switch (vboot_version) { + case VBOOT_VERSION_1_0: + vstr = "version 1.0 "; + break; + case VBOOT_VERSION_2_1: + vstr = "version 2.1 "; + break; + case VBOOT_VERSION_ALL: + vstr = ""; + break; + } + printf("The following %scommands are built-in:\n\n", vstr); + list_commands(); + printf("\nUse \"" MYNAME " help COMMAND\" for more information.\n\n"); + + return 0; +} + +DECLARE_FUTIL_COMMAND(help, do_help, VBOOT_VERSION_ALL, + "Show a bit of help (you're looking at it)"); + +static const char ver_help[] = + "Show the futility source revision and build date"; +static int do_version(int argc, char *argv[]) +{ + if (argc > 1) + printf("%s - %s\n", argv[0], ver_help); + else + printf("%s\n", futility_version); + return 0; +} + +DECLARE_FUTIL_COMMAND(version, do_version, VBOOT_VERSION_ALL, + ver_help); + +static char *simple_basename(char *str) +{ + char *s = strrchr(str, '/'); + if (s) + s++; + else + s = str; + return s; +} + +/* Here we go */ +#define OPT_HELP 1000 +int main(int argc, char *argv[], char *envp[]) +{ + char *progname; + const struct futil_cmd_t *cmd; + int i, errorcnt = 0; + int vb_ver = VBOOT_VERSION_ALL; + int helpind = 0; + struct option long_opts[] = { + {"debug", 0, &debugging_enabled, 1}, + {"vb1" , 0, &vb_ver, VBOOT_VERSION_1_0}, + {"vb21", 0, &vb_ver, VBOOT_VERSION_2_1}, + {"help", 0, 0, OPT_HELP}, + { 0, 0, 0, 0}, + }; + + log_args(argc, argv); + + /* How were we invoked? */ + progname = simple_basename(argv[0]); + + /* See if the program name is a command we recognize */ + cmd = find_command(progname); + if (cmd) { + /* Yep, just do that */ + return !!run_command(cmd, argc, argv); + } + + /* Parse the global options, stopping at the first non-option. */ + opterr = 0; /* quiet, you. */ + while ((i = getopt_long(argc, argv, "+:", long_opts, NULL)) != -1) { + switch (i) { + case OPT_HELP: + /* Remember where we found this option */ + /* Note: this might be GNU-specific */ + helpind = optind - 1; + break; + case '?': + if (optopt) + fprintf(stderr, "Unrecognized option: -%c\n", + optopt); + else + fprintf(stderr, "Unrecognized option: %s\n", + argv[optind - 1]); + errorcnt++; + break; + case ':': + fprintf(stderr, "Missing argument to -%c\n", optopt); + errorcnt++; + break; + case 0: /* handled option */ + break; + default: + FATAL("Unrecognized getopt output: %d\n", i); + } + } + vboot_version = vb_ver; + + /* + * Translate "--help" in the args to "help" as the first parameter, + * by rearranging argv[]. + */ + if (helpind) { + int j; + optind--; + for (j = helpind; j < optind; j++) + argv[j] = argv[j + 1]; + argv[j] = (char *)"help"; + } + + /* We require a command name. */ + if (errorcnt || argc == optind) { + do_help(1, argv); + return 1; + } + + /* For reasons I've forgotten, treat /blah/blah/CMD the same as CMD */ + argv[optind] = simple_basename(argv[optind]); + + /* Do we recognize the command? */ + cmd = find_command(argv[optind]); + if (cmd) { + /* Reset so commands can parse their own options */ + argc -= optind; + argv += optind; + optind = 0; + return !!run_command(cmd, argc, argv); + } + + /* Nope. We've no clue what we're being asked to do. */ + do_help(1, argv); + return 1; +} diff --git a/futility/futility.h b/futility/futility.h new file mode 100644 index 0000000..9d40ba7 --- /dev/null +++ b/futility/futility.h @@ -0,0 +1,157 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_FUTILITY_H_ +#define VBOOT_REFERENCE_FUTILITY_H_ + +#include + +#include "2common.h" +#include "host_key.h" + +/* This program */ +#define MYNAME "futility" + +/* Version string (autogenerated) */ +extern const char futility_version[]; + +/* Bitfields indicating the struct/format versions supported by a command */ +enum vboot_version { + /* + * v1.0 is the original structs used since the dawn of time. + * v2.0 can verify the firmware in smaller chunks, but there's + * no difference in the on-device structs, so it's only + * meaningful for the firmware API. Futility doesn't care. + */ + VBOOT_VERSION_1_0 = 0x00000001, + + /* + * v2.1 uses new and different structs, and is what v2.0 would have + * been if someone hadn't started using it before it was ready. + */ + VBOOT_VERSION_2_1 = 0x00000002, + + /* + * Everything we know about to date. + */ + VBOOT_VERSION_ALL = 0x00000003, +}; + +/* What's our preferred API & data format? */ +extern enum vboot_version vboot_version; + +/* Here's a structure to define the commands that futility implements. */ +struct futil_cmd_t { + /* String used to invoke this command */ + const char *const name; + /* Function to do the work. Returns 0 on success. + * Called with argv[0] == "name". + * It should handle its own "--help" option. */ + int (*const handler) (int argc, char **argv); + /* Supported ABIs */ + enum vboot_version version; + /* One-line summary of what it does */ + const char *const shorthelp; +}; + +/* Macro to define a command */ +#define DECLARE_FUTIL_COMMAND(NAME, HANDLER, VERSION, SHORTHELP) \ + const struct futil_cmd_t __cmd_##NAME = { \ + .name = #NAME, \ + .handler = HANDLER, \ + .version = VERSION, \ + .shorthelp = SHORTHELP, \ + } + +/* This is the list of pointers to all commands. */ +extern const struct futil_cmd_t *const futil_cmds[]; + +/* Size of an array */ +#ifndef ARRAY_SIZE +#define ARRAY_SIZE(array) (sizeof(array)/sizeof(array[0])) +#endif + +/* Fatal error (print error message and exit). */ +#define FATAL(format, ...) do { \ + fprintf(stderr, "FATAL: %s: " format, __func__, \ + ##__VA_ARGS__ ); \ + exit(1); \ + } while (0) + +/* Print error messages (won't exit). */ +#define ERROR(format, ...) fprintf(stderr, "ERROR: %s: " format, __func__, \ + ##__VA_ARGS__ ) +#define WARN(format, ...) fprintf(stderr, "WARNING: %s: " format, __func__, \ + ##__VA_ARGS__ ) +#define INFO(format, ...) fprintf(stderr, "INFO: %s: " format, __func__, \ + ##__VA_ARGS__ ) +#define STATUS(format, ...) fprintf(stderr, ">> " format, ##__VA_ARGS__ ) + +/* Debug output (off by default) */ +extern int debugging_enabled; + +/* Returns true if this looks enough like a GBB header to proceed. */ +int futil_looks_like_gbb(struct vb2_gbb_header *gbb, uint32_t len); + +/* + * Returns true if the gbb header is valid (and optionally updates *maxlen). + * This doesn't verify the contents, though. + */ +int futil_valid_gbb_header(struct vb2_gbb_header *gbb, uint32_t len, + uint32_t *maxlen); + +/* Sets the HWID string field inside a GBB header. */ +int futil_set_gbb_hwid(struct vb2_gbb_header *gbb, const char *hwid); + +/* For GBB v1.2 and later, update the hwid_digest */ +void update_hwid_digest(struct vb2_gbb_header *gbb); + +/* For GBB v1.2 and later, print the stored digest of the HWID (and whether + * it's correct). Return true if it is correct. */ +int print_hwid_digest(struct vb2_gbb_header *gbb, + const char *banner, const char *footer); + +/* Copies a file or dies with an error message */ +void futil_copy_file_or_die(const char *infile, const char *outfile); + +/* Possible file operation errors */ +enum futil_file_err { + FILE_ERR_NONE, + FILE_ERR_STAT, + FILE_ERR_SIZE, + FILE_ERR_MMAP, + FILE_ERR_MSYNC, + FILE_ERR_MUNMAP, + FILE_ERR_OPEN, + FILE_ERR_CLOSE, + FILE_ERR_DIR, + FILE_ERR_CHR, + FILE_ERR_FIFO, + FILE_ERR_SOCK, +}; + +/* Wrapper for mmap/munmap. Skips stupidly large files. */ +#define MAP_RO 0 +#define MAP_RW 1 +enum futil_file_err futil_map_file(int fd, int writeable, + uint8_t **buf, uint32_t *len); +enum futil_file_err futil_unmap_file(int fd, int writeable, + uint8_t *buf, uint32_t len); + +/* + * Parse input string as a hex representation of size len, exit with error if + * the string is not a valid hex string or is of a wrongs size. + */ +void parse_digest_or_die(uint8_t *buf, int len, const char *str); + +/* The CPU architecture is occasionally important */ +enum arch_t { + ARCH_UNSPECIFIED, + ARCH_X86, + ARCH_ARM, + ARCH_MIPS +}; + +#endif /* VBOOT_REFERENCE_FUTILITY_H_ */ diff --git a/futility/futility_options.h b/futility/futility_options.h new file mode 100644 index 0000000..a79505c --- /dev/null +++ b/futility/futility_options.h @@ -0,0 +1,70 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * We centralize option parsing but may split operations into multiple files, + * so let's declare the option structures in a single place (here). + */ + +#ifndef VBOOT_REFERENCE_FUTILITY_OPTIONS_H_ +#define VBOOT_REFERENCE_FUTILITY_OPTIONS_H_ + +#include + +#include "2rsa.h" +#include "file_type.h" + +struct vb2_private_key; +struct vb21_packed_key; + +struct show_option_s { + struct vb2_public_key *k; + uint8_t *fv; + uint64_t fv_size; + uint32_t padding; + int strict; + int t_flag; + enum futil_file_type type; + struct vb21_packed_key *pkey; + uint32_t sig_size; +}; +extern struct show_option_s show_option; + +struct sign_option_s { + struct vb2_private_key *signprivate; + struct vb2_keyblock *keyblock; + struct vb2_packed_key *kernel_subkey; + struct vb2_private_key *devsignprivate; + struct vb2_keyblock *devkeyblock; + uint32_t version; + int version_specified; + uint32_t flags; + int flags_specified; + char *loemdir; + char *loemid; + uint8_t *bootloader_data; + uint64_t bootloader_size; + uint8_t *config_data; + uint32_t config_size; + enum arch_t arch; + int fv_specified; + uint32_t kloadaddr; + uint32_t padding; + int vblockonly; + char *outfile; + int create_new_outfile; + int inout_file_count; + char *pem_signpriv; + int pem_algo_specified; + uint32_t pem_algo; + char *pem_external; + enum futil_file_type type; + enum vb2_hash_algorithm hash_alg; + uint32_t ro_size, rw_size; + uint32_t ro_offset, rw_offset; + uint32_t data_size, sig_size; + struct vb2_private_key *prikey; +}; +extern struct sign_option_s sign_option; + +#endif /* VBOOT_REFERENCE_FUTILITY_OPTIONS_H_ */ diff --git a/futility/kernel_blob.h b/futility/kernel_blob.h new file mode 100644 index 0000000..9043bac --- /dev/null +++ b/futility/kernel_blob.h @@ -0,0 +1,67 @@ +/* Copyright 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Constants describing the kernel blob content. + */ + +#ifndef VBOOT_REFERENCE_KERNEL_BLOB_H_ +#define VBOOT_REFERENCE_KERNEL_BLOB_H_ + +/* Linux vmlinuz header signature */ +#define VMLINUZ_HEADER_SIG 0x53726448 + +/* Maximum kernel command-line size */ +#define CROS_CONFIG_SIZE 4096 + +/* Size of the x86 zeropage table */ +#define CROS_PARAMS_SIZE 4096 + +/* Alignment of various chunks within the kernel blob */ +#define CROS_ALIGN 4096 + +/* Sentinel RAM address indicating that no entry address is specified */ +#define CROS_NO_ENTRY_ADDR (~0) + +/* RAM address where the 32-bit kernel expects to be started */ +#define CROS_32BIT_ENTRY_ADDR 0x100000 + +/* Simplified version of x86 kernel e820 memory map entries */ +#define E820_ENTRY_MAX 128 +#define E820_TYPE_RAM 1 +#define E820_TYPE_RESERVED 2 + +struct linux_kernel_e820entry { + uint64_t start_addr; + uint64_t segment_size; + uint32_t segment_type; +} __attribute__((packed)); + +/* Simplified version of the x86 kernel zeropage table */ +struct linux_kernel_params { + uint8_t pad0[0x1e8 - 0x0]; + uint8_t n_e820_entry; /* 1e8 */ + uint8_t pad1[0x1f1 - 0x1e9]; + uint8_t setup_sects; /* 1f1 */ + uint8_t pad2[0x1fe - 0x1f2]; + uint16_t boot_flag; /* 1fe */ + uint16_t jump; /* 200 */ + uint32_t header; /* 202 */ + uint16_t version; /* 206 */ + uint8_t pad3[0x210 - 0x208]; + uint8_t type_of_loader; /* 210 */ + uint8_t pad4[0x218 - 0x211]; + uint32_t ramdisk_image; /* 218 */ + uint32_t ramdisk_size; /* 21c */ + uint8_t pad5[0x228 - 0x220]; + uint32_t cmd_line_ptr; /* 228 */ + uint32_t ramdisk_max; /* 22c */ + uint32_t kernel_alignment; /* 230 */ + uint8_t relocatable_kernel; /* 234 */ + uint8_t min_alignment; /* 235 */ + uint8_t pad6[0x2d0 - 0x236]; + struct linux_kernel_e820entry + e820_entries[E820_ENTRY_MAX]; /* 2d0-cd0 */ +} __attribute__((packed)); + +#endif /* VBOOT_REFERENCE_KERNEL_BLOB_H_ */ diff --git a/futility/misc.c b/futility/misc.c new file mode 100644 index 0000000..76b8ad1 --- /dev/null +++ b/futility/misc.c @@ -0,0 +1,405 @@ +/* Copyright 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#if !defined(HAVE_MACOS) && !defined(__FreeBSD__) && !defined(__OpenBSD__) +#include /* For BLKGETSIZE64 */ +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "2common.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "cgptlib_internal.h" +#include "file_type.h" +#include "futility.h" + +/* Default is to support everything we can */ +enum vboot_version vboot_version = VBOOT_VERSION_ALL; + +int debugging_enabled; +void vb2ex_printf(const char *func, const char *format, ...) +{ + if (!debugging_enabled) + return; + + va_list ap; + va_start(ap, format); + fprintf(stderr, "DEBUG: %s: ", func); + vfprintf(stderr, format, ap); + va_end(ap); +} + +static int is_null_terminated(const char *s, int len) +{ + len--; + s += len; + while (len-- >= 0) + if (!*s--) + return 1; + return 0; +} + +static inline uint32_t max(uint32_t a, uint32_t b) +{ + return a > b ? a : b; +} + +enum futil_file_type ft_recognize_gbb(uint8_t *buf, uint32_t len) +{ + struct vb2_gbb_header *gbb = (struct vb2_gbb_header *)buf; + + if (memcmp(gbb->signature, VB2_GBB_SIGNATURE, VB2_GBB_SIGNATURE_SIZE)) + return FILE_TYPE_UNKNOWN; + if (gbb->major_version > VB2_GBB_MAJOR_VER) + return FILE_TYPE_UNKNOWN; + if (sizeof(struct vb2_gbb_header) > len) + return FILE_TYPE_UNKNOWN; + + /* close enough */ + return FILE_TYPE_GBB; +} + +int futil_valid_gbb_header(struct vb2_gbb_header *gbb, uint32_t len, + uint32_t *maxlen_ptr) +{ + if (len < sizeof(struct vb2_gbb_header)) + return 0; + + if (memcmp(gbb->signature, VB2_GBB_SIGNATURE, VB2_GBB_SIGNATURE_SIZE)) + return 0; + if (gbb->major_version != VB2_GBB_MAJOR_VER) + return 0; + + /* Check limits first, to help identify problems */ + if (maxlen_ptr) { + uint32_t maxlen = gbb->header_size; + maxlen = max(maxlen, + gbb->hwid_offset + gbb->hwid_size); + maxlen = max(maxlen, + gbb->rootkey_offset + gbb->rootkey_size); + maxlen = max(maxlen, + gbb->bmpfv_offset + gbb->bmpfv_size); + maxlen = max(maxlen, + gbb->recovery_key_offset + gbb->recovery_key_size); + *maxlen_ptr = maxlen; + } + + if (gbb->header_size != EXPECTED_VB2_GBB_HEADER_SIZE || + gbb->header_size > len) + return 0; + if (gbb->hwid_offset < EXPECTED_VB2_GBB_HEADER_SIZE) + return 0; + if (gbb->hwid_offset + gbb->hwid_size > len) + return 0; + if (gbb->hwid_size) { + const char *s = (const char *) + ((uint8_t *)gbb + gbb->hwid_offset); + if (!is_null_terminated(s, gbb->hwid_size)) + return 0; + } + if (gbb->rootkey_offset < EXPECTED_VB2_GBB_HEADER_SIZE) + return 0; + if (gbb->rootkey_offset + gbb->rootkey_size > len) + return 0; + + if (gbb->bmpfv_offset < EXPECTED_VB2_GBB_HEADER_SIZE) + return 0; + if (gbb->bmpfv_offset + gbb->bmpfv_size > len) + return 0; + if (gbb->recovery_key_offset < EXPECTED_VB2_GBB_HEADER_SIZE) + return 0; + if (gbb->recovery_key_offset + gbb->recovery_key_size > len) + return 0; + + /* Seems legit... */ + return 1; +} + +/* For GBB v1.2 and later, print the stored digest of the HWID (and whether + * it's correct). Return true if it is correct. */ +int print_hwid_digest(struct vb2_gbb_header *gbb, + const char *banner, const char *footer) +{ + printf("%s", banner); + + /* There isn't one for v1.1 and earlier, so assume it's good. */ + if (gbb->minor_version < 2) { + printf("%s", footer); + return 1; + } + + uint8_t *buf = (uint8_t *)gbb; + char *hwid_str = (char *)(buf + gbb->hwid_offset); + int is_valid = 0; + uint8_t digest[VB2_SHA256_DIGEST_SIZE]; + + if (VB2_SUCCESS == vb2_digest_buffer(buf + gbb->hwid_offset, + strlen(hwid_str), VB2_HASH_SHA256, + digest, sizeof(digest))) { + int i; + is_valid = 1; + /* print it, comparing as we go */ + for (i = 0; i < VB2_SHA256_DIGEST_SIZE; i++) { + printf("%02x", gbb->hwid_digest[i]); + if (gbb->hwid_digest[i] != digest[i]) + is_valid = 0; + } + } + + printf(" %s", is_valid ? "valid" : ""); + printf("%s", footer); + return is_valid; +} + +/* Deprecated. Use futil_set_gbb_hwid in future. */ +/* For GBB v1.2 and later, update the hwid_digest field. */ +void update_hwid_digest(struct vb2_gbb_header *gbb) +{ + /* There isn't one for v1.1 and earlier */ + if (gbb->minor_version < 2) + return; + + uint8_t *buf = (uint8_t *)gbb; + char *hwid_str = (char *)(buf + gbb->hwid_offset); + + vb2_digest_buffer(buf + gbb->hwid_offset, strlen(hwid_str), + VB2_HASH_SHA256, + gbb->hwid_digest, sizeof(gbb->hwid_digest)); +} + +/* Sets the HWID string field inside a GBB header. */ +int futil_set_gbb_hwid(struct vb2_gbb_header *gbb, const char *hwid) +{ + uint8_t *to = (uint8_t *)gbb + gbb->hwid_offset; + size_t len; + + assert(hwid); + len = strlen(hwid); + if (len >= gbb->hwid_size) + return -1; + + /* Zero whole area so we won't have garbage after NUL. */ + memset(to, 0, gbb->hwid_size); + memcpy(to, hwid, len); + + /* major_version starts from 1 and digest must be updated since v1.2. */ + if (gbb->major_version == 1 && gbb->minor_version < 2) + return 0; + + return vb2_digest_buffer(to, len, VB2_HASH_SHA256, gbb->hwid_digest, + sizeof(gbb->hwid_digest)); +} + +/* + * TODO: All sorts of race conditions likely here, and everywhere this is used. + * Do we care? If so, fix it. + */ +void futil_copy_file_or_die(const char *infile, const char *outfile) +{ + pid_t pid; + int status; + + VB2_DEBUG("%s -> %s\n", infile, outfile); + + pid = fork(); + + if (pid < 0) { + fprintf(stderr, "Couldn't fork /bin/cp process: %s\n", + strerror(errno)); + exit(1); + } + + /* child */ + if (!pid) { + execl("/bin/cp", "/bin/cp", infile, outfile, NULL); + fprintf(stderr, "Child couldn't exec /bin/cp: %s\n", + strerror(errno)); + exit(1); + } + + /* parent - wait for child to finish */ + if (wait(&status) == -1) { + fprintf(stderr, + "Couldn't wait for /bin/cp process to exit: %s\n", + strerror(errno)); + exit(1); + } + + if (WIFEXITED(status)) { + status = WEXITSTATUS(status); + /* zero is normal exit */ + if (!status) + return; + fprintf(stderr, "/bin/cp exited with status %d\n", status); + exit(1); + } + + if (WIFSIGNALED(status)) { + status = WTERMSIG(status); + fprintf(stderr, "/bin/cp was killed with signal %d\n", status); + exit(1); + } + + fprintf(stderr, "I have no idea what just happened\n"); + exit(1); +} + + +enum futil_file_err futil_map_file(int fd, int writeable, + uint8_t **buf, uint32_t *len) +{ + struct stat sb; + void *mmap_ptr; + uint32_t reasonable_len; + + if (0 != fstat(fd, &sb)) { + fprintf(stderr, "Can't stat input file: %s\n", + strerror(errno)); + return FILE_ERR_STAT; + } + +#if !defined(HAVE_MACOS) && !defined(__FreeBSD__) && !defined(__OpenBSD__) + if (S_ISBLK(sb.st_mode)) + ioctl(fd, BLKGETSIZE64, &sb.st_size); +#endif + + /* If the image is larger than 2^32 bytes, it's wrong. */ + if (sb.st_size < 0 || sb.st_size > UINT32_MAX) { + fprintf(stderr, "Image size is unreasonable\n"); + return FILE_ERR_SIZE; + } + reasonable_len = (uint32_t)sb.st_size; + + if (writeable) + mmap_ptr = mmap(0, sb.st_size, + PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); + else + mmap_ptr = mmap(0, sb.st_size, + PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0); + + if (mmap_ptr == (void *)-1) { + fprintf(stderr, "Can't mmap %s file: %s\n", + writeable ? "output" : "input", + strerror(errno)); + return FILE_ERR_MMAP; + } + + *buf = (uint8_t *)mmap_ptr; + *len = reasonable_len; + return FILE_ERR_NONE; +} + +enum futil_file_err futil_unmap_file(int fd, int writeable, + uint8_t *buf, uint32_t len) +{ + void *mmap_ptr = buf; + enum futil_file_err err = FILE_ERR_NONE; + + if (writeable && + (0 != msync(mmap_ptr, len, MS_SYNC|MS_INVALIDATE))) { + fprintf(stderr, "msync failed: %s\n", strerror(errno)); + err = FILE_ERR_MSYNC; + } + + if (0 != munmap(mmap_ptr, len)) { + fprintf(stderr, "Can't munmap pointer: %s\n", + strerror(errno)); + if (err == FILE_ERR_NONE) + err = FILE_ERR_MUNMAP; + } + + return err; +} + + +#define DISK_SECTOR_SIZE 512 +enum futil_file_type ft_recognize_gpt(uint8_t *buf, uint32_t len) +{ + GptHeader *h; + + /* GPT header starts at sector 1, is one sector long */ + if (len < 2 * DISK_SECTOR_SIZE) + return FILE_TYPE_UNKNOWN; + + h = (GptHeader *)(buf + DISK_SECTOR_SIZE); + + if (memcmp(h->signature, GPT_HEADER_SIGNATURE, + GPT_HEADER_SIGNATURE_SIZE) && + memcmp(h->signature, GPT_HEADER_SIGNATURE2, + GPT_HEADER_SIGNATURE_SIZE)) + return FILE_TYPE_UNKNOWN; + if (h->revision != GPT_HEADER_REVISION) + return FILE_TYPE_UNKNOWN; + if (h->size < MIN_SIZE_OF_HEADER || h->size > MAX_SIZE_OF_HEADER) + return FILE_TYPE_UNKNOWN; + + if (HeaderCrc(h) != h->header_crc32) + return FILE_TYPE_UNKNOWN; + + return FILE_TYPE_CHROMIUMOS_DISK; +} + +static int parse_hex(uint8_t *val, const char *str) +{ + uint8_t v = 0; + char c; + int digit; + + for (digit = 0; digit < 2; digit++) { + c = *str; + if (!c) + return 0; + if (!isxdigit(c)) + return 0; + c = tolower(c); + if (c >= '0' && c <= '9') + v += c - '0'; + else + v += 10 + c - 'a'; + if (!digit) + v <<= 4; + str++; + } + + *val = v; + return 1; +} + +void parse_digest_or_die(uint8_t *buf, int len, const char *str) +{ + const char *s = str; + int i; + + for (i = 0; i < len; i++) { + /* skip whitespace */ + while (*s && isspace(*s)) + s++; + if (!*s) + break; + if (!parse_hex(buf, s)) + break; + + /* on to the next byte */ + s += 2; + buf++; + } + + if ((i != len) || *s) { + fprintf(stderr, "Invalid DIGEST \"%s\"\n", str); + exit(1); + } +} diff --git a/futility/updater.c b/futility/updater.c new file mode 100644 index 0000000..b550b33 --- /dev/null +++ b/futility/updater.c @@ -0,0 +1,1662 @@ +/* Copyright 2018 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * A reference implementation for AP (and supporting images) firmware updater. + */ + +#include +#include + +#include "2rsa.h" +#include "crossystem.h" +#include "futility.h" +#include "host_misc.h" +#include "updater.h" +#include "util_misc.h" + +#define REMOVE_WP_URL "https://goo.gl/ces83U" + +static const char ROOTKEY_HASH_DEV[] = + "b11d74edd286c144e1135b49e7f0bc20cf041f10"; + +enum target_type { + TARGET_SELF, + TARGET_UPDATE, +}; + +enum rootkey_compat_result { + ROOTKEY_COMPAT_OK, + ROOTKEY_COMPAT_ERROR, + ROOTKEY_COMPAT_REKEY, + ROOTKEY_COMPAT_REKEY_TO_DEV, +}; + +/* + * Gets the system property by given type. + * If the property was not loaded yet, invoke the property getter function + * and cache the result. + * Returns the property value. + */ +int get_system_property(enum system_property_type property_type, + struct updater_config *cfg) +{ + struct system_property *prop; + + assert(property_type < SYS_PROP_MAX); + prop = &cfg->system_properties[property_type]; + if (!prop->initialized) { + prop->initialized = 1; + prop->value = prop->getter(); + } + return prop->value; +} + +static void print_system_properties(struct updater_config *cfg) +{ + int i; + + /* + * There may be error messages when fetching properties from active + * system, so we want to peek at them first and then print out. + */ + VB2_DEBUG("Scanning system properties...\n"); + for (i = 0; i < SYS_PROP_MAX; i++) { + get_system_property((enum system_property_type)i, cfg); + } + + printf("System properties: ["); + for (i = 0; i < SYS_PROP_MAX; i++) { + printf("%d,", + get_system_property((enum system_property_type)i, cfg)); + } + printf("]\n"); +} + +/* + * Overrides the return value of a system property. + * After invoked, next call to get_system_property(type, cfg) will return + * the given value. + */ +static void override_system_property(enum system_property_type property_type, + struct updater_config *cfg, + int value) +{ + struct system_property *prop; + + assert(property_type < SYS_PROP_MAX); + prop = &cfg->system_properties[property_type]; + prop->initialized = 1; + prop->value = value; +} + +/* + * Overrides system properties from a given list. + * The list should be string of integers eliminated by comma and/or space. + * For example, "1 2 3" and "1,2,3" both overrides first 3 properties. + * To skip some properties you have to use comma, for example + * "1, , 3" will only override the first and 3rd properties. + * Invalid characters and fields will be ignored. + * + * The current implementation is only for unit testing. + * In future we may extend this with name=value so users can use it easily on + * actual systems. + */ +static void override_properties_from_list(const char *override_list, + struct updater_config *cfg) +{ + const char *s = override_list; + char *e, c; + int i = 0, wait_comma = 0; + long int v; + + VB2_DEBUG("Input is <%s>\n", override_list); + for (c = *s; c; c = *++s) { + if (c == ',') { + if (!wait_comma) + i++; + wait_comma = 0; + } + if (!isascii(c) || !(isdigit(c) || c == '-')) + continue; + if (i >= SYS_PROP_MAX) { + ERROR("Too many fields (max is %d): %s.\n", + SYS_PROP_MAX, override_list); + return; + } + v = strtol(s, &e, 0); + s = e - 1; + VB2_DEBUG("property[%d].value = %ld\n", i, v); + override_system_property((enum system_property_type)i, cfg, v); + wait_comma = 1; + i++; + } +} + +/* Gets the value (setting) of specified quirks from updater configuration. */ +int get_config_quirk(enum quirk_types quirk, const struct updater_config *cfg) +{ + assert(quirk < QUIRK_MAX); + return cfg->quirks[quirk].value; +} + +/* Prints the name and description from all supported quirks. */ +void updater_list_config_quirks(const struct updater_config *cfg) +{ + const struct quirk_entry *entry = cfg->quirks; + int i; + + printf("Supported quirks:\n"); + for (i = 0; i < QUIRK_MAX; i++, entry++) { + printf(" '%s': %s (default: %d)\n", entry->name, + entry->help ? entry->help : "(no description)", + get_config_quirk((enum quirk_types)i, cfg)); + } +} + +/* + * Applies a quirk if applicable (the value should be non-zero). + * Returns 0 on success, otherwise failure. + */ +static int try_apply_quirk(enum quirk_types quirk, struct updater_config *cfg) +{ + const struct quirk_entry *entry = cfg->quirks + quirk; + assert(quirk < QUIRK_MAX); + + if (!entry->value) + return 0; + + if (!entry->apply) { + ERROR("<%s> not implemented.\n", entry->name); + return -1; + } + VB2_DEBUG("Applying quirk <%s>.\n", entry->name); + return entry->apply(cfg); +} + +/* + * Initialize the updater_config quirks from a list of settings. + * Returns 0 on success, otherwise failure. + */ +static int setup_config_quirks(const char *quirks, struct updater_config *cfg) +{ + /* + * The list should be in NAME[=VALUE],... + * Value defaults to 1 if not specified. + */ + int r = 0; + char *buf = strdup(quirks); + char *token; + const char *delimiters = ", \n\r\t"; + + token = strtok(buf, delimiters); + for (; token; token = strtok(NULL, delimiters)) { + const char *name = token; + char *equ = strchr(token, '='); + int i, value = 1; + struct quirk_entry *entry = cfg->quirks; + + if (!*name) + continue; + + if (equ) { + *equ = '\0'; + value = strtol(equ + 1, NULL, 0); + } + + VB2_DEBUG("Looking for quirk <%s=%d>.\n", name, value); + for (i = 0; i < QUIRK_MAX; i++, entry++) { + if (strcmp(name, entry->name)) + continue; + entry->value = value; + VB2_DEBUG("Set quirk %s to %d.\n", entry->name, value); + break; + } + if (i >= QUIRK_MAX) { + ERROR("Unknown quirk: %s\n", name); + r++; + } + } + free(buf); + return r; +} + +/* + * Checks if the section is filled with given character. + * If section size is 0, return 0. If section is not empty, return non-zero if + * the section is filled with same character c, otherwise 0. + */ +static int section_is_filled_with(const struct firmware_section *section, + uint8_t c) +{ + uint32_t i; + if (!section->size) + return 0; + for (i = 0; i < section->size; i++) + if (section->data[i] != c) + return 0; + return 1; +} + +/* + * Decides which target in RW firmware to manipulate. + * The `target` argument specifies if we want to know "the section to be + * update" (TARGET_UPDATE), or "the (active) section * to check" (TARGET_SELF). + * Returns the section name if success, otherwise NULL. + */ +static const char *decide_rw_target(struct updater_config *cfg, + enum target_type target, + int is_vboot2) +{ + const char *a = FMAP_RW_SECTION_A, *b = FMAP_RW_SECTION_B; + int slot = get_system_property(SYS_PROP_MAINFW_ACT, cfg); + + /* In vboot1, always update B and check content with A. */ + if (!is_vboot2) + return target == TARGET_UPDATE ? b : a; + + switch (slot) { + case SLOT_A: + return target == TARGET_UPDATE ? b : a; + + case SLOT_B: + return target == TARGET_UPDATE ? a : b; + } + + return NULL; +} + +/* + * Sets any needed system properties to indicate system should try the new + * firmware on next boot. + * The `target` argument is an FMAP section name indicating which to try. + * Returns 0 if success, non-zero if error. + */ +static int set_try_cookies(struct updater_config *cfg, const char *target, + int has_update, int is_vboot2) +{ + int tries = 8; + const char *slot; + + /* EC Software Sync needs few more reboots. */ + if (cfg->ec_image.data) + tries += 2; + + if (!has_update) + tries = 0; + + /* Find new slot according to target (section) name. */ + if (strcmp(target, FMAP_RW_SECTION_A) == 0) + slot = FWACT_A; + else if (strcmp(target, FMAP_RW_SECTION_B) == 0) + slot = FWACT_B; + else { + ERROR("Unknown target: %s\n", target); + return -1; + } + + if (cfg->emulation) { + INFO("(emulation) %s slot %s on next boot, try_count=%d.\n", + has_update ? "Try" : "Keep", slot, tries); + return 0; + } + + if (is_vboot2) { + if (VbSetSystemPropertyString("fw_try_next", slot)) { + ERROR("Failed to set fw_try_next to %s.\n", slot); + return -1; + } + if (!has_update && + VbSetSystemPropertyString("fw_result", "success")) { + ERROR("Failed to set fw_result to success.\n"); + return -1; + } + } + + /* fw_try_count is identical to fwb_tries in vboot1. */ + if (VbSetSystemPropertyInt("fw_try_count", tries)) { + ERROR("Failed to set fw_try_count to %d.\n", tries); + return -1; + } + + return 0; +} + +/* + * Emulates writing to firmware. + * Returns 0 if success, non-zero if error. + */ +static int emulate_write_firmware(const char *filename, + const struct firmware_image *image, + const char *section_name) +{ + struct firmware_image to_image = {0}; + struct firmware_section from, to; + int errorcnt = 0; + + from.data = image->data; + from.size = image->size; + + if (load_firmware_image(&to_image, filename, NULL)) { + ERROR("Cannot load image from %s.\n", filename); + return -1; + } + + if (section_name) { + find_firmware_section(&from, image, section_name); + if (!from.data) { + ERROR("No section %s in source image %s.\n", + section_name, image->file_name); + errorcnt++; + } + find_firmware_section(&to, &to_image, section_name); + if (!to.data) { + ERROR("No section %s in destination image %s.\n", + section_name, filename); + errorcnt++; + } + } else if (image->size != to_image.size) { + ERROR("Image size is different (%s:%d != %s:%d)\n", + image->file_name, image->size, to_image.file_name, + to_image.size); + errorcnt++; + } else { + to.data = to_image.data; + to.size = to_image.size; + } + + if (!errorcnt) { + size_t to_write = VB2_MIN(to.size, from.size); + + assert(from.data && to.data); + VB2_DEBUG("Writing %zu bytes\n", to_write); + memcpy(to.data, from.data, to_write); + } + + if (!errorcnt && vb2_write_file( + filename, to_image.data, to_image.size)) { + ERROR("Failed writing to file: %s\n", filename); + errorcnt++; + } + + free_firmware_image(&to_image); + return errorcnt; +} + +/* + * Writes a section from given firmware image to system firmware. + * If section_name is NULL, write whole image. + * Returns 0 if success, non-zero if error. + */ +static int write_firmware(struct updater_config *cfg, + const struct firmware_image *image, + const char *section_name) +{ + struct firmware_image *diff_image = NULL; + + if (cfg->emulation) { + INFO("(emulation) Writing %s from %s to %s (emu=%s).\n", + section_name ? section_name : "whole image", + image->file_name, image->programmer, cfg->emulation); + + return emulate_write_firmware( + cfg->emulation, image, section_name); + } + + if (cfg->fast_update && image == &cfg->image && cfg->image_current.data) + diff_image = &cfg->image_current; + + return write_system_firmware(image, diff_image, section_name, + &cfg->tempfiles, cfg->verbosity + 1); +} + +/* + * Returns True if we should start the update process for given image. + */ +static int has_valid_update(struct updater_config *cfg, + const struct firmware_image *image, + const char *section_name, + int is_host) +{ + if (!image->data) { + VB2_DEBUG("No data in <%s> image.\n", image->programmer); + return 0; + } + if (section_name && !firmware_section_exists(image, section_name)) { + VB2_DEBUG("Image %s<%s> does not have section %s.\n", + image->file_name, image->programmer, section_name); + return 0; + } + /* Currently only host emulation is supported. */ + if (cfg->emulation && !is_host) { + INFO("(emulation) Update %s from %s to %s (%d bytes), " + "skipped for non-host targets in emulation.\n", + section_name ? section_name : "whole image", + image->file_name, image->programmer, image->size); + return 0; + } + return 1; +} + +/* + * Write a section from given firmware image to system firmware if possible. + * If section_name is NULL, write whole image. If the image has no data or if + * the section does not exist, ignore and return success. + * Returns 0 if success, non-zero if error. + */ +static int write_optional_firmware(struct updater_config *cfg, + const struct firmware_image *image, + const char *section_name, + int check_programmer_wp, + int is_host) +{ + if (!has_valid_update(cfg, image, section_name, is_host)) + return 0; + /* + * EC & PD may have different WP settings and we want to write + * only if it is OK. + */ + if (check_programmer_wp && + get_system_property(SYS_PROP_WP_HW, cfg) == WP_ENABLED && + flashrom_get_wp(image->programmer) == WP_ENABLED) { + ERROR("Target %s is write protected, skip updating.\n", + image->programmer); + return 0; + } + + return write_firmware(cfg, image, section_name); +} + +/* + * Preserve the GBB contents from image_from to image_to. + * HWID is always preserved, and flags are preserved only if preserve_flags set. + * Returns 0 if success, otherwise -1 if GBB header can't be found or if HWID is + * too large. + */ +static int preserve_gbb(const struct firmware_image *image_from, + struct firmware_image *image_to, + int preserve_flags, int override_flags, + uint64_t override_value) +{ + const struct vb2_gbb_header *gbb_from; + struct vb2_gbb_header *gbb_to; + + gbb_from = find_gbb(image_from); + /* We do want to change GBB contents later. */ + gbb_to = (struct vb2_gbb_header *)find_gbb(image_to); + + if (!gbb_from || !gbb_to) + return -1; + + /* Preserve (for non-factory mode) or override flags. */ + if (override_flags) + gbb_to->flags = override_value; + else if (preserve_flags) + gbb_to->flags = gbb_from->flags; + + /* Preserve HWID. */ + return futil_set_gbb_hwid( + gbb_to, (const char *)gbb_from + gbb_from->hwid_offset); +} + +/* + * Preserves the regions locked by Intel management engine. + */ +static int preserve_management_engine(struct updater_config *cfg, + const struct firmware_image *image_from, + struct firmware_image *image_to) +{ + struct firmware_section section; + + find_firmware_section(§ion, image_from, FMAP_SI_ME); + if (!section.data) { + VB2_DEBUG("Skipped because no section %s.\n", FMAP_SI_ME); + return 0; + } + if (section_is_filled_with(§ion, 0xFF)) { + VB2_DEBUG("ME is probably locked - preserving %s.\n", + FMAP_SI_DESC); + return preserve_firmware_section( + image_from, image_to, FMAP_SI_DESC); + } + + if (try_apply_quirk(QUIRK_PRESERVE_ME, cfg) > 0) { + VB2_DEBUG("ME needs to be preserved - preserving %s.\n", + FMAP_SI_ME); + return preserve_firmware_section( + image_from, image_to, FMAP_SI_ME); + } + + return try_apply_quirk(QUIRK_UNLOCK_ME_FOR_UPDATE, cfg); +} + +/* Preserve firmware sections by FMAP area flags. */ +static int preserve_fmap_sections(struct firmware_image *from, + struct firmware_image *to, + int *count) +{ + int i, errcnt = 0; + FmapHeader *fmap = to->fmap_header; + FmapAreaHeader *ah = (FmapAreaHeader*)( + (uint8_t *)fmap + sizeof(FmapHeader)); + *count = 0; + + for (i = 0; i < fmap->fmap_nareas; i++, ah++) { + if (!(ah->area_flags & FMAP_AREA_PRESERVE)) + continue; + /* Warning: area_name 'may' not end with NUL. */ + if (!firmware_section_exists(from, ah->area_name)) { + VB2_DEBUG("FMAP area does not exist in source: %.*s\n", + FMAP_NAMELEN, ah->area_name); + continue; + } + VB2_DEBUG("Preserve FMAP area: %.*s\n", FMAP_NAMELEN, + ah->area_name); + errcnt += preserve_firmware_section(from, to, ah->area_name); + (*count)++; + } + + return errcnt; +} + +/* + * Preserve old images without "preserve" information in FMAP. + * We have to use the legacy hard-coded list of names. + */ +static int preserve_known_sections(struct firmware_image *from, + struct firmware_image *to) +{ + int errcnt = 0, i; + const char * const names[] = { + "RW_PRESERVE", /* Only octopus fw branch is using this. */ + "RO_VPD", + "RW_VPD", + "SMMSTORE", + "RW_NVRAM", + "RW_ELOG", + }; + + for (i = 0; i < ARRAY_SIZE(names); i++) { + if (!firmware_section_exists(from, names[i])) + continue; + VB2_DEBUG("Preserve firmware section: %s\n", names[i]); + errcnt += preserve_firmware_section(from, to, names[i]); + } + return errcnt; +} + +/* + * Preserves the critical sections from the current (active) firmware. + * Currently preserved sections: GBB (HWID and flags), x86 ME, and any firmware + * sections with FMAP_AREA_PRESERVE flag set (or a list of known names). + * Returns 0 if success, non-zero if error. + */ +static int preserve_images(struct updater_config *cfg) +{ + int errcnt = 0, found; + struct firmware_image *from = &cfg->image_current, *to = &cfg->image; + + errcnt += preserve_gbb(from, to, !cfg->factory_update, + cfg->override_gbb_flags, cfg->gbb_flags); + errcnt += preserve_management_engine(cfg, from, to); + errcnt += preserve_fmap_sections(from, to, &found); + + if (!found) + errcnt += preserve_known_sections(from, to); + + return errcnt; +} + +/* + * Compares if two sections have same size and data. + * Returns 0 if given sections are the same, otherwise non-zero. + */ +static int compare_section(const struct firmware_section *a, + const struct firmware_section *b) +{ + if (a->size != b->size) + return a->size - b->size; + return memcmp(a->data, b->data, a->size); +} + +/* + * Returns if the images are different (should be updated) in given section. + * If the section contents are the same or if the section does not exist on both + * images, return value is 0 (no need to update). Otherwise the return value is + * non-zero, indicating an update should be performed. + * If section_name is NULL, compare whole images. + */ +static int section_needs_update(const struct firmware_image *image_from, + const struct firmware_image *image_to, + const char *section_name) +{ + struct firmware_section from, to; + + if (!section_name) { + if (image_from->size != image_to->size) + return -1; + return memcmp(image_from->data, image_to->data, image_to->size); + } + + find_firmware_section(&from, image_from, section_name); + find_firmware_section(&to, image_to, section_name); + + return compare_section(&from, &to); +} + +/* + * Returns true if the write protection is enabled on current system. + */ +static int is_write_protection_enabled(struct updater_config *cfg) +{ + /* Default to enabled. */ + int wp = get_system_property(SYS_PROP_WP_HW, cfg); + if (wp == WP_DISABLED) + return wp; + /* For error or enabled, check WP SW. */ + wp = get_system_property(SYS_PROP_WP_SW, cfg); + /* Consider all errors as enabled. */ + if (wp != WP_DISABLED) + return WP_ENABLED; + return wp; +} + +/* + * Checks if the given firmware images are compatible with current platform. + * In current implementation (following Chrome OS style), we assume the platform + * is identical to the name before a dot (.) in firmware version. + * Returns 0 for success, otherwise failure. + */ +static int check_compatible_platform(struct updater_config *cfg) +{ + int len; + struct firmware_image *image_from = &cfg->image_current, + *image_to = &cfg->image; + const char *from_dot = strchr(image_from->ro_version, '.'), + *to_dot = strchr(image_to->ro_version, '.'); + + if (!from_dot || !to_dot) { + VB2_DEBUG("Missing dot (from=%p, to=%p)\n", from_dot, to_dot); + return -1; + } + len = from_dot - image_from->ro_version + 1; + VB2_DEBUG("Platform: %*.*s\n", len, len, image_from->ro_version); + return strncasecmp(image_from->ro_version, image_to->ro_version, len); +} + +/* + * Returns a valid root key from GBB header, or NULL on failure. + */ +const struct vb2_packed_key *get_rootkey( + const struct vb2_gbb_header *gbb) +{ + struct vb2_packed_key *key = NULL; + + key = (struct vb2_packed_key *)((uint8_t *)gbb + gbb->rootkey_offset); + if (vb2_packed_key_looks_ok(key, gbb->rootkey_size)) { + ERROR("Invalid root key.\n"); + return NULL; + } + return key; +} + +/* + * Returns a keyblock key from given image section, or NULL on failure. + */ +static const struct vb2_keyblock *get_keyblock( + const struct firmware_image *image, + const char *section_name) +{ + struct firmware_section section; + + find_firmware_section(§ion, image, section_name); + /* A keyblock must be followed by a vb2_fw_preamble. */ + if (section.size < sizeof(struct vb2_keyblock) + + sizeof(struct vb2_fw_preamble)) { + ERROR("Invalid section: %s\n", section_name); + return NULL; + } + return (const struct vb2_keyblock *)section.data; +} + +/* + * Duplicates a keyblock and returns the duplicated block. + * The caller must free the returned keyblock after being used. + */ +static struct vb2_keyblock *dupe_keyblock(const struct vb2_keyblock *block) +{ + struct vb2_keyblock *new_block; + + new_block = (struct vb2_keyblock *)malloc(block->keyblock_size); + assert(new_block); + memcpy(new_block, block, block->keyblock_size); + return new_block; +} + +/* + * Verifies if keyblock is signed with given key. + * Returns 0 on success, otherwise failure. + */ +static int verify_keyblock(const struct vb2_keyblock *block, + const struct vb2_packed_key *sign_key) { + int r; + uint8_t workbuf[VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + struct vb2_workbuf wb; + struct vb2_public_key key; + struct vb2_keyblock *new_block; + + if (block->keyblock_signature.sig_size == 0) { + ERROR("Keyblock is not signed.\n"); + return -1; + } + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + if (VB2_SUCCESS != vb2_unpack_key(&key, sign_key)) { + ERROR("Invalid signing key.\n"); + return -1; + } + + /* + * vb2_verify_keyblock will destroy the signature inside keyblock + * so we have to verify with a local copy. + */ + new_block = dupe_keyblock(block); + r = vb2_verify_keyblock(new_block, new_block->keyblock_size, &key, &wb); + free(new_block); + + if (r != VB2_SUCCESS) { + ERROR("Failed verifying keyblock.\n"); + return -1; + } + return 0; +} + +/* + * Gets the data key and firmware version from a section on firmware image. + * The section should contain a vb2_keyblock and a vb2_fw_preamble immediately + * after keyblock so we can decode and save the data key and firmware version + * into argument `data_key_version` and `firmware_version`. + * Returns 0 for success, otherwise failure. + */ +static int get_key_versions(const struct firmware_image *image, + const char *section_name, + unsigned int *data_key_version, + unsigned int *firmware_version) +{ + const struct vb2_keyblock *keyblock = get_keyblock(image, section_name); + const struct vb2_fw_preamble *pre; + + if (!keyblock) + return -1; + *data_key_version = keyblock->data_key.key_version; + pre = (struct vb2_fw_preamble *)((uint8_t*)keyblock + + keyblock->keyblock_size); + *firmware_version = pre->firmware_version; + VB2_DEBUG("%s: data key version = %d, firmware version = %d\n", + image->file_name, *data_key_version, *firmware_version); + return 0; +} + +/* + * Checks if the root key in ro_image can verify vblocks in rw_image. + * Returns 0 for success, otherwise failure. + */ +static enum rootkey_compat_result check_compatible_root_key( + const struct firmware_image *ro_image, + const struct firmware_image *rw_image) +{ + const struct vb2_gbb_header *gbb = find_gbb(ro_image); + const struct vb2_packed_key *rootkey; + const struct vb2_keyblock *keyblock; + + if (!gbb) + return ROOTKEY_COMPAT_ERROR; + + rootkey = get_rootkey(gbb); + if (!rootkey) + return ROOTKEY_COMPAT_ERROR; + + /* Assume VBLOCK_A and VBLOCK_B are signed in same way. */ + keyblock = get_keyblock(rw_image, FMAP_RW_VBLOCK_A); + if (!keyblock) + return ROOTKEY_COMPAT_ERROR; + + if (verify_keyblock(keyblock, rootkey) != 0) { + const struct vb2_gbb_header *gbb_rw = find_gbb(rw_image); + const struct vb2_packed_key *rootkey_rw = NULL; + int is_same_key = 0, to_dev = 0; + /* + * Try harder to provide more info. + * packed_key_sha1_string uses static buffer so don't call + * it twice in args list of one expression. + */ + if (gbb_rw) + rootkey_rw = get_rootkey(gbb_rw); + if (rootkey_rw) { + if (rootkey->key_offset == rootkey_rw->key_offset && + rootkey->key_size == rootkey_rw->key_size && + memcmp(rootkey, rootkey_rw, rootkey->key_size + + rootkey->key_offset) == 0) + is_same_key = 1; + if (strcmp(packed_key_sha1_string(rootkey_rw), + ROOTKEY_HASH_DEV) == 0) + to_dev = 1; + } + INFO("Current (RO) firmware image has root key: %s\n", + packed_key_sha1_string(rootkey)); + if (is_same_key) { + ERROR("Rootkey is same as target (RW) image. \n" + "Maybe RW corrupted?"); + return ROOTKEY_COMPAT_ERROR; + } + WARN("Target (RW) image is signed by root key: %s%s\n", + rootkey_rw ? packed_key_sha1_string(rootkey_rw) : + "", to_dev ? " (DEV/unsigned)" : ""); + return to_dev ? ROOTKEY_COMPAT_REKEY_TO_DEV : + ROOTKEY_COMPAT_REKEY; + } + return ROOTKEY_COMPAT_OK; +} + +/* + * Returns non-zero if the RW_LEGACY needs to be updated, otherwise 0. + */ +static int legacy_needs_update(struct updater_config *cfg) +{ + int has_from, has_to; + const char * const tag = "cros_allow_auto_update"; + const char *section = FMAP_RW_LEGACY; + const char *tmp_path; + + VB2_DEBUG("Checking %s contents...\n", FMAP_RW_LEGACY); + + tmp_path = get_firmware_image_temp_file(&cfg->image, &cfg->tempfiles); + if (!tmp_path) + return 0; + + has_to = cbfs_file_exists(tmp_path, section, tag); + has_from = cbfs_file_exists(tmp_path, section, tag); + + if (!has_from || !has_to) { + VB2_DEBUG("Current legacy firmware has%s updater tag (%s) and " + "target firmware has%s updater tag, won't update.\n", + has_from ? "" : " no", tag, has_to ? "" : " no"); + return 0; + } + + return section_needs_update( + &cfg->image_current, &cfg->image, FMAP_RW_LEGACY); +} + +/* + * Checks if the given firmware image is signed with a key that won't be + * blocked by TPM's anti-rollback detection. + * Returns 0 for success, otherwise failure. + */ +static int do_check_compatible_tpm_keys(struct updater_config *cfg, + const struct firmware_image *rw_image) +{ + unsigned int data_key_version = 0, firmware_version = 0, + tpm_data_key_version = 0, tpm_firmware_version = 0; + int tpm_fwver = 0; + + /* Fail if the given image does not look good. */ + if (get_key_versions(rw_image, FMAP_RW_VBLOCK_A, &data_key_version, + &firmware_version) != 0) + return -1; + + /* The stored tpm_fwver can be 0 (b/116298359#comment3). */ + tpm_fwver = get_system_property(SYS_PROP_TPM_FWVER, cfg); + if (tpm_fwver < 0) { + /* + * tpm_fwver is commonly misreported in --ccd mode, so allow + * force_update to ignore the reported value. + */ + if (!cfg->force_update) + ERROR("Invalid tpm_fwver: %d.\n", tpm_fwver); + return -1; + } + + tpm_data_key_version = tpm_fwver >> 16; + tpm_firmware_version = tpm_fwver & 0xffff; + VB2_DEBUG("TPM: data_key_version = %d, firmware_version = %d\n", + tpm_data_key_version, tpm_firmware_version); + + if (tpm_data_key_version > data_key_version) { + ERROR("Data key version rollback detected (%d->%d).\n", + tpm_data_key_version, data_key_version); + return -1; + } + if (tpm_firmware_version > firmware_version) { + ERROR("Firmware version rollback detected (%d->%d).\n", + tpm_firmware_version, firmware_version); + return -1; + } + return 0; +} + +/* + * Wrapper for do_check_compatible_tpm_keys. + * Will return 0 if do_check_compatible_tpm_keys success or if cfg.force_update + * is set; otherwise non-zero. + */ +static int check_compatible_tpm_keys(struct updater_config *cfg, + const struct firmware_image *rw_image) +{ + int r = do_check_compatible_tpm_keys(cfg, rw_image); + if (!r) + return r; + if (!cfg->force_update) { + ERROR("Add --force if you want to waive TPM checks.\n"); + return r; + } + WARN("TPM KEYS CHECK IS WAIVED BY --force. YOU ARE ON YOUR OWN.\n"); + return 0; +} + + +/* + * Update EC (RO+RW) firmware. + * Returns 0 if success, non-zero if error. + */ +static int update_ec_firmware(struct updater_config *cfg) +{ + struct firmware_image *ec_image = &cfg->ec_image; + if (!has_valid_update(cfg, ec_image, NULL, 0)) + return 0; + + int r = try_apply_quirk(QUIRK_EC_PARTIAL_RECOVERY, cfg); + switch (r) { + case EC_RECOVERY_FULL: + return write_optional_firmware(cfg, ec_image, NULL, 1, 0); + + case EC_RECOVERY_RO: + return write_optional_firmware(cfg, ec_image, "WP_RO", 1, 0); + + case EC_RECOVERY_DONE: + /* Done by some quirks, for example EC RO software sync. */ + return 0; + } + return r; +} + +const char * const updater_error_messages[] = { + [UPDATE_ERR_DONE] = "Done (no error)", + [UPDATE_ERR_NEED_RO_UPDATE] = "RO changed and no WP. Need full update.", + [UPDATE_ERR_NO_IMAGE] = "No image to update; try specify with -i.", + [UPDATE_ERR_SYSTEM_IMAGE] = "Cannot load system active firmware.", + [UPDATE_ERR_INVALID_IMAGE] = "The given firmware image is not valid.", + [UPDATE_ERR_SET_COOKIES] = "Failed writing system flags to try update.", + [UPDATE_ERR_WRITE_FIRMWARE] = "Failed writing firmware.", + [UPDATE_ERR_PLATFORM] = "Your system platform is not compatible.", + [UPDATE_ERR_TARGET] = "No valid RW target to update. Abort.", + [UPDATE_ERR_ROOT_KEY] = "RW signed by incompatible root key " + "(different from RO).", + [UPDATE_ERR_TPM_ROLLBACK] = "RW not usable due to TPM anti-rollback.", + [UPDATE_ERR_UNKNOWN] = "Unknown error.", +}; + +/* + * The main updater for "Try-RW update", to update only one RW section + * and try if it can boot properly on reboot. + * This was also known as --mode=autoupdate,--wp=1 in legacy updater. + * Returns UPDATE_ERR_DONE if success, otherwise error. + */ +static enum updater_error_codes update_try_rw_firmware( + struct updater_config *cfg, + struct firmware_image *image_from, + struct firmware_image *image_to, + int wp_enabled) +{ + const char *target; + int has_update = 1; + int is_vboot2 = get_system_property(SYS_PROP_FW_VBOOT2, cfg); + + preserve_gbb(image_from, image_to, 1, 0, 0); + if (!wp_enabled && section_needs_update( + image_from, image_to, FMAP_RO_SECTION)) + return UPDATE_ERR_NEED_RO_UPDATE; + + INFO("Checking compatibility...\n"); + if (check_compatible_root_key(image_from, image_to)) + return UPDATE_ERR_ROOT_KEY; + if (check_compatible_tpm_keys(cfg, image_to)) + return UPDATE_ERR_TPM_ROLLBACK; + + VB2_DEBUG("Firmware %s vboot2.\n", is_vboot2 ? "is" : "is NOT"); + target = decide_rw_target(cfg, TARGET_SELF, is_vboot2); + if (target == NULL) { + ERROR("TRY-RW update needs system to boot in RW firmware.\n"); + return UPDATE_ERR_TARGET; + } + + INFO("Checking %s contents...\n", target); + if (!firmware_section_exists(image_to, target)) { + ERROR("Cannot find section '%s' on firmware image: %s\n", + target, image_to->file_name); + return UPDATE_ERR_INVALID_IMAGE; + } + if (!cfg->force_update) + has_update = section_needs_update(image_from, image_to, target); + + if (has_update) { + target = decide_rw_target(cfg, TARGET_UPDATE, is_vboot2); + STATUS("TRY-RW UPDATE: Updating %s to try on reboot.\n", + target); + + if (write_firmware(cfg, image_to, target)) + return UPDATE_ERR_WRITE_FIRMWARE; + } + + /* Always set right cookies for next boot. */ + if (set_try_cookies(cfg, target, has_update, is_vboot2)) + return UPDATE_ERR_SET_COOKIES; + + /* Do not fail on updating legacy. */ + if (legacy_needs_update(cfg)) { + has_update = 1; + STATUS("LEGACY UPDATE: Updating %s.\n", FMAP_RW_LEGACY); + write_firmware(cfg, image_to, FMAP_RW_LEGACY); + } + + if (!has_update) + STATUS("NO UPDATE: No need to update.\n"); + + return UPDATE_ERR_DONE; +} + +/* + * The main updater for "RW update". + * This was also known as --mode=recovery, --wp=1 in legacy updater. + * Returns UPDATE_ERR_DONE if success, otherwise error. + */ +static enum updater_error_codes update_rw_firmware( + struct updater_config *cfg, + struct firmware_image *image_from, + struct firmware_image *image_to) +{ + STATUS("RW UPDATE: Updating RW sections (%s, %s, %s, and %s).\n", + FMAP_RW_SECTION_A, FMAP_RW_SECTION_B, FMAP_RW_SHARED, + FMAP_RW_LEGACY); + + INFO("Checking compatibility...\n"); + if (check_compatible_root_key(image_from, image_to)) + return UPDATE_ERR_ROOT_KEY; + if (check_compatible_tpm_keys(cfg, image_to)) + return UPDATE_ERR_TPM_ROLLBACK; + /* + * TODO(hungte) Speed up by flashing multiple sections in one + * command, or provide diff file. + */ + if (write_firmware(cfg, image_to, FMAP_RW_SECTION_A) || + write_firmware(cfg, image_to, FMAP_RW_SECTION_B) || + write_firmware(cfg, image_to, FMAP_RW_SHARED) || + write_optional_firmware(cfg, image_to, FMAP_RW_LEGACY, 0, 1)) + return UPDATE_ERR_WRITE_FIRMWARE; + + return UPDATE_ERR_DONE; +} + +/* + * The main updater for "Legacy update". + * This is equivalent to --mode=legacy. + * Returns UPDATE_ERR_DONE if success, otherwise error. + */ +static enum updater_error_codes update_legacy_firmware( + struct updater_config *cfg, + struct firmware_image *image_to) +{ + STATUS("LEGACY UPDATE: Updating firmware %s.\n", FMAP_RW_LEGACY); + + if (write_firmware(cfg, image_to, FMAP_RW_LEGACY)) + return UPDATE_ERR_WRITE_FIRMWARE; + + return UPDATE_ERR_DONE; +} + +/* + * The main updater for "Full update". + * This was also known as "--mode=factory" or "--mode=recovery, --wp=0" in + * legacy updater. + * Returns UPDATE_ERR_DONE if success, otherwise error. + */ +static enum updater_error_codes update_whole_firmware( + struct updater_config *cfg, + struct firmware_image *image_to) +{ + STATUS("FULL UPDATE: Updating whole firmware image(s), RO+RW.\n"); + + if (preserve_images(cfg)) + VB2_DEBUG("Failed to preserve some sections - ignore.\n"); + + INFO("Checking compatibility...\n"); + if (!cfg->force_update) { + /* Check if the image_to itself is broken */ + enum rootkey_compat_result r = check_compatible_root_key( + image_to, image_to); + if (r != ROOTKEY_COMPAT_OK) { + ERROR("Target image does not look valid. \n" + "Add --force if you really want to use it."); + return UPDATE_ERR_ROOT_KEY; + } + + /* Check if the system is going to re-key. */ + r = check_compatible_root_key(&cfg->image_current, image_to); + /* We only allow re-key to non-dev keys. */ + switch (r) { + case ROOTKEY_COMPAT_OK: + break; + case ROOTKEY_COMPAT_REKEY: + INFO("Will change firmware signing key.\n"); + break; + case ROOTKEY_COMPAT_REKEY_TO_DEV: + ERROR("Re-key to DEV is not allowed. \n" + "Add --force if you really want to do that."); + return UPDATE_ERR_ROOT_KEY; + default: + return UPDATE_ERR_ROOT_KEY; + } + } + if (check_compatible_tpm_keys(cfg, image_to)) + return UPDATE_ERR_TPM_ROLLBACK; + + /* FMAP may be different so we should just update all. */ + if (write_firmware(cfg, image_to, NULL) || + update_ec_firmware(cfg) || + write_optional_firmware(cfg, &cfg->pd_image, NULL, 1, 0)) + return UPDATE_ERR_WRITE_FIRMWARE; + + return UPDATE_ERR_DONE; +} + +/* + * The main updater to update system firmware using the configuration parameter. + * Returns UPDATE_ERR_DONE if success, otherwise failure. + */ +enum updater_error_codes update_firmware(struct updater_config *cfg) +{ + int wp_enabled, done = 0; + enum updater_error_codes r = UPDATE_ERR_UNKNOWN; + + struct firmware_image *image_from = &cfg->image_current, + *image_to = &cfg->image; + if (!image_to->data) + return UPDATE_ERR_NO_IMAGE; + + STATUS("Target image: %s (RO:%s, RW/A:%s, RW/B:%s).\n", + image_to->file_name, image_to->ro_version, + image_to->rw_version_a, image_to->rw_version_b); + + if (try_apply_quirk(QUIRK_MIN_PLATFORM_VERSION, cfg)) { + if (!cfg->force_update) { + ERROR("Add --force to waive checking the version.\n"); + return UPDATE_ERR_PLATFORM; + } + } + if (!image_from->data) { + int ret; + INFO("Loading current system firmware...\n"); + ret = load_system_firmware(image_from, &cfg->tempfiles, + cfg->verbosity); + if (ret == IMAGE_PARSE_FAILURE && cfg->force_update) { + WARN("No compatible firmware in system.\n"); + cfg->check_platform = 0; + } else if (ret) + return UPDATE_ERR_SYSTEM_IMAGE; + } + STATUS("Current system: %s (RO:%s, RW/A:%s, RW/B:%s).\n", + image_from->file_name, image_from->ro_version, + image_from->rw_version_a, image_from->rw_version_b); + + try_apply_quirk(QUIRK_NO_CHECK_PLATFORM, cfg); + if (cfg->check_platform && check_compatible_platform(cfg)) { + ERROR("The firmware image is not compatible with your system. " + "If you really want to proceed, please run again with: " + "--quirks=no_check_platform\n"); + return UPDATE_ERR_PLATFORM; + } + + wp_enabled = is_write_protection_enabled(cfg); + STATUS("Write protection: %d (%s; HW=%d, SW=%d).\n", wp_enabled, + wp_enabled ? "enabled" : "disabled", + get_system_property(SYS_PROP_WP_HW, cfg), + get_system_property(SYS_PROP_WP_SW, cfg)); + + if (try_apply_quirk(QUIRK_ENLARGE_IMAGE, cfg)) + return UPDATE_ERR_SYSTEM_IMAGE; + + if (try_apply_quirk(QUIRK_EVE_SMM_STORE, cfg)) + return UPDATE_ERR_INVALID_IMAGE; + + if (debugging_enabled) + print_system_properties(cfg); + + if (cfg->legacy_update) + return update_legacy_firmware(cfg, image_to); + + if (cfg->try_update) { + r = update_try_rw_firmware(cfg, image_from, image_to, + wp_enabled); + if (r == UPDATE_ERR_NEED_RO_UPDATE) + WARN("%s\n", updater_error_messages[r]); + else + done = 1; + } + + if (!done) { + r = wp_enabled ? update_rw_firmware(cfg, image_from, image_to) : + update_whole_firmware(cfg, image_to); + } + + /* Providing more hints for what to do on failure. */ + if (r == UPDATE_ERR_ROOT_KEY && wp_enabled) + ERROR("To change keys in RO area, you must first remove " + "write protection ( " REMOVE_WP_URL " ).\n"); + + return r; +} + +/* + * Allocates and initializes a updater_config object with default values. + * Returns the newly allocated object, or NULL on error. + */ +struct updater_config *updater_new_config() +{ + struct updater_config *cfg = (struct updater_config *)calloc( + 1, sizeof(struct updater_config)); + if (!cfg) + return cfg; + cfg->image.programmer = PROG_HOST; + cfg->image_current.programmer = PROG_HOST; + cfg->ec_image.programmer = PROG_EC; + cfg->pd_image.programmer = PROG_PD; + + cfg->check_platform = 1; + + init_system_properties(&cfg->system_properties[0], + ARRAY_SIZE(cfg->system_properties)); + updater_register_quirks(cfg); + return cfg; +} + +/* + * Setup quirks for updating current image. + * + * Quirks must be loaded after image loaded because we use image contents to + * decide default quirks to load. Also, we have to load default quirks first so + * user can override them using command line. + * + * Returns 0 on success, otherwise number of failures. + */ +static int updater_setup_quirks(struct updater_config *cfg, + const struct updater_config_arguments *arg) +{ + int errorcnt = 0; + const char *model_quirks = updater_get_model_quirks(cfg); + char *cbfs_quirks = updater_get_cbfs_quirks(cfg); + + if (model_quirks) + errorcnt += !!setup_config_quirks(model_quirks, cfg); + if (cbfs_quirks) { + errorcnt += !!setup_config_quirks(cbfs_quirks, cfg); + free(cbfs_quirks); + } + if (arg->quirks) + errorcnt += !!setup_config_quirks(arg->quirks, cfg); + return errorcnt; +} + +/* + * Loads images into updater configuration. + * Returns 0 on success, otherwise number of failures. + */ +static int updater_load_images(struct updater_config *cfg, + const struct updater_config_arguments *arg, + const char *image, + const char *ec_image, + const char *pd_image) +{ + int errorcnt = 0; + struct archive *ar = cfg->archive; + + if (!cfg->image.data && image) { + if (image && strcmp(image, "-") == 0) { + INFO("Reading image from stdin...\n"); + image = create_temp_file(&cfg->tempfiles); + if (image) + errorcnt += !!save_file_from_stdin(image); + } + errorcnt += !!load_firmware_image(&cfg->image, image, ar); + if (!errorcnt) + errorcnt += updater_setup_quirks(cfg, arg); + } + if (arg->host_only) + return errorcnt; + + if (!cfg->ec_image.data && ec_image) + errorcnt += !!load_firmware_image(&cfg->ec_image, ec_image, ar); + if (!cfg->pd_image.data && pd_image) + errorcnt += !!load_firmware_image(&cfg->pd_image, pd_image, ar); + return errorcnt; +} + +/* + * Writes a firmware image to specified file. + * Returns 0 on success, otherwise failure. + */ +static int updater_output_image(const struct firmware_image *image, + const char *fname, const char *root) +{ + int r = 0; + char *fpath; + + if (!image->data) + return 0; + + ASPRINTF(&fpath, "%s/%s", root, fname); + r = vb2_write_file(fpath, image->data, image->size); + if (r) + ERROR("Failed writing firmware image to: %s\n", fpath); + else + printf("Firmware image saved in: %s\n", fpath); + + free(fpath); + return !!r; +} + +/* + * Applies white label information to an existing model config. + * Returns 0 on success, otherwise failure. + */ +static int updater_apply_white_label(struct updater_config *cfg, + struct model_config *model, + const char *signature_id) +{ + const char *tmp_image = NULL; + + assert(model->is_white_label); + if (!signature_id) { + if (!cfg->image_current.data) { + INFO("Loading system firmware for white label...\n"); + load_system_firmware(&cfg->image_current, + &cfg->tempfiles, cfg->verbosity); + } + tmp_image = get_firmware_image_temp_file( + &cfg->image_current, &cfg->tempfiles); + if (!tmp_image) { + ERROR("Failed to get system current firmware\n"); + return 1; + } + if (get_config_quirk(QUIRK_OVERRIDE_SIGNATURE_ID, cfg) && + is_write_protection_enabled(cfg)) + quirk_override_signature_id( + cfg, model, &signature_id); + } + return !!model_apply_white_label( + model, cfg->archive, signature_id, tmp_image); +} + +/* + * Setup what the updater has to do against an archive. + * Returns number of failures, or 0 on success. + */ +static int updater_setup_archive( + struct updater_config *cfg, + const struct updater_config_arguments *arg, + struct manifest *manifest, + int is_factory) +{ + int errorcnt = 0; + struct archive *ar = cfg->archive; + const struct model_config *model; + + if (arg->do_manifest) { + assert(!arg->image); + print_json_manifest(manifest); + /* No additional error. */ + return errorcnt; + } + + model = manifest_find_model(manifest, arg->model); + if (!model) + return ++errorcnt; + + /* Load images now so we can get quirks in WL checks. */ + errorcnt += updater_load_images( + cfg, arg, model->image, model->ec_image, + model->pd_image); + + if (model->is_white_label && !manifest->has_keyset) { + /* + * Developers running unsigned updaters (usually local build) + * won't be able match any white label tags. + */ + WARN("No keysets found - this is probably a local build of \n" + "unsigned firmware updater. Skip applying white label."); + } else if (model->is_white_label) { + /* + * It is fine to fail in updater_apply_white_label for factory + * mode so we are not checking the return value; instead we + * verify if the patches do contain new root key. + */ + updater_apply_white_label(cfg, (struct model_config *)model, + arg->signature_id); + if (!model->patches.rootkey) { + if (is_factory || + is_write_protection_enabled(cfg) || + get_config_quirk(QUIRK_ALLOW_EMPTY_WLTAG, cfg)) { + WARN("No VPD for white label.\n"); + } else { + ERROR("Need VPD set for white label.\n"); + return ++errorcnt; + } + } + } + errorcnt += patch_image_by_model(&cfg->image, model, ar); + return errorcnt; +} + +/* + * Helper function to setup an allocated updater_config object. + * Returns number of failures, or 0 on success. + */ +int updater_setup_config(struct updater_config *cfg, + const struct updater_config_arguments *arg, + int *do_update) +{ + int errorcnt = 0; + int check_single_image = 0, check_wp_disabled = 0; + int do_output = 0; + const char *archive_path = arg->archive; + + /* Setup values that may change output or decision of other argument. */ + cfg->verbosity = arg->verbosity; + cfg->fast_update = arg->fast_update; + cfg->factory_update = arg->is_factory; + if (arg->force_update) + cfg->force_update = 1; + + /* Check incompatible options and return early. */ + if (arg->do_manifest) { + if (!!arg->archive == !!arg->image) { + ERROR("--manifest needs either -a or -i\n"); + return ++errorcnt; + } + if (arg->archive && (arg->ec_image || arg->pd_image)) { + ERROR("--manifest for archive (-a) does not accept \n" + "additional images (--ec_image, --pd_image)."); + return ++errorcnt; + } + *do_update = 0; + } + if (arg->repack || arg->unpack) { + if (!arg->archive) { + ERROR("--{re,un}pack needs --archive.\n"); + return ++errorcnt; + } + *do_update = 0; + } + + /* Setup update mode. */ + if (arg->try_update) + cfg->try_update = 1; + if (arg->mode) { + if (strcmp(arg->mode, "autoupdate") == 0) { + cfg->try_update = 1; + } else if (strcmp(arg->mode, "recovery") == 0) { + cfg->try_update = 0; + } else if (strcmp(arg->mode, "legacy") == 0) { + cfg->legacy_update = 1; + } else if (strcmp(arg->mode, "factory") == 0 || + strcmp(arg->mode, "factory_install") == 0) { + cfg->factory_update = 1; + } else if (strcmp(arg->mode, "output") == 0) { + do_output = 1; + } else { + errorcnt++; + ERROR("Invalid mode: %s\n", arg->mode); + } + } + if (cfg->factory_update) { + /* factory_update must be processed after arg->mode. */ + check_wp_disabled = 1; + cfg->try_update = 0; + } + cfg->gbb_flags = arg->gbb_flags; + cfg->override_gbb_flags = arg->override_gbb_flags; + + /* Setup properties and fields that do not have external dependency. */ + if (arg->programmer) { + check_single_image = 1; + cfg->image.programmer = arg->programmer; + cfg->image_current.programmer = arg->programmer; + VB2_DEBUG("AP (host) programmer changed to %s.\n", + arg->programmer); + } + if (arg->sys_props) + override_properties_from_list(arg->sys_props, cfg); + if (arg->write_protection) { + /* arg->write_protection must be done after arg->sys_props. */ + int r = strtol(arg->write_protection, NULL, 0); + override_system_property(SYS_PROP_WP_HW, cfg, r); + override_system_property(SYS_PROP_WP_SW, cfg, r); + } + + /* Set up archive and load images. */ + if (arg->emulation) { + /* Process emulation file first. */ + cfg->emulation = arg->emulation; + VB2_DEBUG("Using file %s for emulation.\n", arg->emulation); + errorcnt += !!load_firmware_image( + &cfg->image_current, arg->emulation, NULL); + } + + /* Always load images specified from command line directly. */ + errorcnt += updater_load_images( + cfg, arg, arg->image, arg->ec_image, arg->pd_image); + + if (!archive_path) + archive_path = "."; + cfg->archive = archive_open(archive_path); + if (!cfg->archive) { + ERROR("Failed to open archive: %s\n", archive_path); + return ++errorcnt; + } + + /* Process archives which may not have valid contents. */ + if (arg->repack || arg->unpack) { + const char *work_name = arg->repack ? arg->repack : arg->unpack; + struct archive *from, *to, *work; + + work = archive_open(work_name); + if (arg->repack) { + from = work; + to = cfg->archive; + } else { + to = work; + from = cfg->archive; + } + if (!work) { + ERROR("Failed to open: %s\n", work_name); + return ++errorcnt; + } + errorcnt += !!archive_copy(from, to); + /* TODO(hungte) Update manifest after copied. */ + archive_close(work); + return errorcnt; + } + + /* Load images from archive. */ + if (arg->archive) { + struct manifest *m = new_manifest_from_archive(cfg->archive); + if (m) { + errorcnt += updater_setup_archive( + cfg, arg, m, cfg->factory_update); + delete_manifest(m); + } else { + ERROR("Failure in archive: %s\n", arg->archive); + ++errorcnt; + } + } else if (arg->do_manifest) { + char name[] = "default"; + struct model_config model = { + .name = name, + .image = arg->image, + .ec_image = arg->ec_image, + .pd_image = arg->pd_image, + }; + struct manifest manifest = { + .num = 1, + .models = &model, + }; + assert(model.image); + print_json_manifest(&manifest); + } + + /* + * Images should be loaded now (either in first updater_load_images or + * second call from updater_setup_archive) and quirks should be loaded. + * For invocation without image, we want to get quirks now. + */ + if (!cfg->image.data && arg->quirks) + errorcnt += !!setup_config_quirks(arg->quirks, cfg); + + /* Additional checks. */ + if (check_single_image && !do_output && (cfg->ec_image.data || cfg->pd_image.data)) { + errorcnt++; + ERROR("EC/PD images are not supported in current mode.\n"); + } + if (check_wp_disabled && is_write_protection_enabled(cfg)) { + errorcnt++; + ERROR("Please remove write protection for factory mode \n" + "( " REMOVE_WP_URL " )."); + } + if (!errorcnt && do_output) { + const char *r = arg->output_dir; + if (!r) + r = "."; + /* TODO(hungte) Remove bios.bin when migration is done. */ + errorcnt += updater_output_image(&cfg->image, "bios.bin", r); + errorcnt += updater_output_image(&cfg->image, "image.bin", r); + errorcnt += updater_output_image(&cfg->ec_image, "ec.bin", r); + errorcnt += updater_output_image(&cfg->pd_image, "pd.bin", r); + *do_update = 0; + } + return errorcnt; +} + +/* + * Releases all resources in an updater configuration object. + */ +void updater_delete_config(struct updater_config *cfg) +{ + assert(cfg); + free_firmware_image(&cfg->image); + free_firmware_image(&cfg->image_current); + free_firmware_image(&cfg->ec_image); + free_firmware_image(&cfg->pd_image); + remove_all_temp_files(&cfg->tempfiles); + if (cfg->archive) + archive_close(cfg->archive); + free(cfg); +} diff --git a/futility/updater.h b/futility/updater.h new file mode 100644 index 0000000..856ea78 --- /dev/null +++ b/futility/updater.h @@ -0,0 +1,284 @@ +/* Copyright 2018 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * A reference implementation for AP (and supporting images) firmware updater. + */ + +#ifndef VBOOT_REFERENCE_FUTILITY_UPDATER_H_ +#define VBOOT_REFERENCE_FUTILITY_UPDATER_H_ + +#include "futility.h" +#include "updater_utils.h" + +/* FMAP section names. */ +static const char * const FMAP_RO_FRID = "RO_FRID", + * const FMAP_RO_SECTION = "RO_SECTION", + * const FMAP_RO_CBFS = "COREBOOT", + * const FMAP_RO_GBB = "GBB", + * const FMAP_RW_VBLOCK_A = "VBLOCK_A", + * const FMAP_RW_VBLOCK_B = "VBLOCK_B", + * const FMAP_RW_SECTION_A = "RW_SECTION_A", + * const FMAP_RW_SECTION_B = "RW_SECTION_B", + * const FMAP_RW_FWID = "RW_FWID", + * const FMAP_RW_FWID_A = "RW_FWID_A", + * const FMAP_RW_FWID_B = "RW_FWID_B", + * const FMAP_RW_SHARED = "RW_SHARED", + * const FMAP_RW_LEGACY = "RW_LEGACY", + * const FMAP_SI_DESC = "SI_DESC", + * const FMAP_SI_ME = "SI_ME"; + +struct updater_config; +struct quirk_entry { + const char *name; + const char *help; + int (*apply)(struct updater_config *cfg); + int value; +}; + +enum quirk_types { + QUIRK_ENLARGE_IMAGE, + QUIRK_MIN_PLATFORM_VERSION, + QUIRK_UNLOCK_ME_FOR_UPDATE, + QUIRK_UNLOCK_WILCO_ME_FOR_UPDATE, + QUIRK_EVE_SMM_STORE, + QUIRK_ALLOW_EMPTY_WLTAG, + QUIRK_EC_PARTIAL_RECOVERY, + QUIRK_OVERRIDE_SIGNATURE_ID, + QUIRK_PRESERVE_ME, + QUIRK_NO_CHECK_PLATFORM, + QUIRK_MAX, +}; + +/* Return values from QUIRK_EC_PARTIAL_RECOVERY. */ +enum { + EC_RECOVERY_FULL = 0, /* Must be 0 as default value of quirks. */ + EC_RECOVERY_RO, + EC_RECOVERY_DONE +}; + +struct updater_config { + struct firmware_image image, image_current; + struct firmware_image ec_image, pd_image; + struct system_property system_properties[SYS_PROP_MAX]; + struct quirk_entry quirks[QUIRK_MAX]; + struct archive *archive; + struct tempfile tempfiles; + int try_update; + int force_update; + int legacy_update; + int factory_update; + int check_platform; + int fast_update; + int verbosity; + const char *emulation; + int override_gbb_flags; + uint32_t gbb_flags; +}; + +struct updater_config_arguments { + char *image, *ec_image, *pd_image; + char *archive, *quirks, *mode; + const char *programmer, *write_protection; + char *model, *signature_id; + char *emulation, *sys_props; + char *output_dir; + char *repack, *unpack; + int is_factory, try_update, force_update, do_manifest, host_only; + int fast_update; + int verbosity; + int override_gbb_flags; + uint32_t gbb_flags; +}; + +struct patch_config { + char *rootkey; + char *vblock_a; + char *vblock_b; +}; + +struct model_config { + char *name; + char *image, *ec_image, *pd_image; + struct patch_config patches; + char *signature_id; + int is_white_label; +}; + +struct manifest { + int num; + struct model_config *models; + struct archive *archive; + int default_model; + int has_keyset; +}; + +enum updater_error_codes { + UPDATE_ERR_DONE, + UPDATE_ERR_NEED_RO_UPDATE, + UPDATE_ERR_NO_IMAGE, + UPDATE_ERR_SYSTEM_IMAGE, + UPDATE_ERR_INVALID_IMAGE, + UPDATE_ERR_SET_COOKIES, + UPDATE_ERR_WRITE_FIRMWARE, + UPDATE_ERR_PLATFORM, + UPDATE_ERR_TARGET, + UPDATE_ERR_ROOT_KEY, + UPDATE_ERR_TPM_ROLLBACK, + UPDATE_ERR_UNKNOWN, +}; + +/* Messages explaining enum updater_error_codes. */ +extern const char * const updater_error_messages[]; + +/* + * Returns a valid root key from GBB header, or NULL on failure. + */ +const struct vb2_packed_key *get_rootkey( + const struct vb2_gbb_header *gbb); + +/* + * The main updater to update system firmware using the configuration parameter. + * Returns UPDATE_ERR_DONE if success, otherwise failure. + */ +enum updater_error_codes update_firmware(struct updater_config *cfg); + +/* + * Allocates and initializes a updater_config object with default values. + * Returns the newly allocated object, or NULL on error. + */ +struct updater_config *updater_new_config(void); + +/* + * Releases all resources in an updater configuration object. + */ +void updater_delete_config(struct updater_config *cfg); + +/* + * Helper function to setup an allocated updater_config object. + * Returns number of failures, or 0 on success. + */ +int updater_setup_config(struct updater_config *cfg, + const struct updater_config_arguments *arg, + int *do_update); + +/* Prints the name and description from all supported quirks. */ +void updater_list_config_quirks(const struct updater_config *cfg); + +/* + * Registers known quirks to a updater_config object. + */ +void updater_register_quirks(struct updater_config *cfg); + +/* Gets the value (setting) of specified quirks from updater configuration. */ +int get_config_quirk(enum quirk_types quirk, const struct updater_config *cfg); + +/* Gets the system property by given type. Returns the property value. */ +int get_system_property(enum system_property_type property_type, + struct updater_config *cfg); +/* + * Gets the default quirk config string from target image name. + * Returns a string (in same format as --quirks) to load or NULL if no quirks. + */ +const char * const updater_get_model_quirks(struct updater_config *cfg); + +/* + * Gets the quirk config string from target image CBFS. + * Returns a string (in same format as --quirks) to load or NULL if no quirks. + */ +char * updater_get_cbfs_quirks(struct updater_config *cfg); + +/* + * Overrides signature id if the device was shipped with known + * special rootkey. + */ +int quirk_override_signature_id(struct updater_config *cfg, + struct model_config *model, + const char **signature_id); + +/* Functions from updater_archive.c */ + +/* + * Opens an archive from given path. + * The type of archive will be determined automatically. + * Returns a pointer to reference to archive (must be released by archive_close + * when not used), otherwise NULL on error. + */ +struct archive *archive_open(const char *path); + +/* + * Closes an archive reference. + * Returns 0 on success, otherwise non-zero as failure. + */ +int archive_close(struct archive *ar); + +/* + * Checks if an entry (either file or directory) exists in archive. + * Returns 1 if exists, otherwise 0 + */ +int archive_has_entry(struct archive *ar, const char *name); + +/* + * Reads a file from archive. + * Returns 0 on success (data and size reflects the file content), + * otherwise non-zero as failure. + */ +int archive_read_file(struct archive *ar, const char *fname, + uint8_t **data, uint32_t *size, int64_t *mtime); + +/* + * Writes a file into archive. + * If entry name (fname) is an absolute path (/file), always write into real + * file system. + * Returns 0 on success, otherwise non-zero as failure. + */ +int archive_write_file(struct archive *ar, const char *fname, + uint8_t *data, uint32_t size, int64_t mtime); + +/* + * Copies all entries from one archive to another. + * Returns 0 on success, otherwise non-zero as failure. + */ +int archive_copy(struct archive *from, struct archive *to); + +/* + * Creates a new manifest object by scanning files in archive. + * Returns the manifest on success, otherwise NULL for failure. + */ +struct manifest *new_manifest_from_archive(struct archive *archive); + +/* Releases all resources allocated by given manifest object. */ +void delete_manifest(struct manifest *manifest); + +/* Prints the information of objects in manifest (models and images) in JSON. */ +void print_json_manifest(const struct manifest *manifest); + +/* + * Modifies a firmware image from patch information specified in model config. + * Returns 0 on success, otherwise number of failures. + */ +int patch_image_by_model( + struct firmware_image *image, const struct model_config *model, + struct archive *archive); + +/* + * Finds the existing model_config from manifest that best matches current + * system (as defined by model_name). + * Returns a model_config from manifest, or NULL if not found. + */ +const struct model_config *manifest_find_model(const struct manifest *manifest, + const char *model_name); + +/* + * Applies white label information to an existing model configuration. + * Collects signature ID information from either parameter signature_id or + * image file (via VPD) and updates model.patches for key files. + * Returns 0 on success, otherwise failure. + */ +int model_apply_white_label( + struct model_config *model, + struct archive *archive, + const char *signature_id, + const char *image); + +#endif /* VBOOT_REFERENCE_FUTILITY_UPDATER_H_ */ diff --git a/futility/updater_archive.c b/futility/updater_archive.c new file mode 100644 index 0000000..93a043a --- /dev/null +++ b/futility/updater_archive.c @@ -0,0 +1,1150 @@ +/* Copyright 2018 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Accessing updater resources from an archive. + */ + +#include +#include +#include +#if defined(__OpenBSD__) +#include +#endif +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_LIBZIP +#ifndef __clang__ +/* If libzip headers were built for Clang but later get included with GCC you + need this. This check should really be in libzip but apparently they think + it's fine to ship compiler-specific system headers or something... */ +#define _Nullable +#define _Nonnull +#endif +#include +#endif + +#ifdef HAVE_CROSID +#include +#endif + +#include "host_misc.h" +#include "updater.h" +#include "util_misc.h" + +/* + * A firmware update package (archive) is a file packed by either shar(1) or + * zip(1). See https://chromium.googlesource.com/chromiumos/platform/firmware/ + * for more information. + * + * A package for single board (i.e., not Unified Build) will have all the image + * files in top folder: + * - host: 'image.bin' (or 'bios.bin' as legacy name before CL:1318712) + * - ec: 'ec.bin' + * - pd: 'pd.bin' + * If white label is supported, a 'keyset/' folder will be available, with key + * files in it: + * - rootkey.$WLTAG + * - vblock_A.$WLTAG + * - vblock_B.$WLTAG + * The $WLTAG should come from VPD value 'whitelabel_tag', or the + * 'customization_id'. Note 'customization_id' is in format LOEM[-VARIANT] and + * we can only take LOEM as $WLTAG, for example A-B => $WLTAG=A. + * + * A package for Unified Build is more complicated. There will be a models/ + * folder, and each model (by $(mosys platform model) ) should appear as a sub + * folder, with a 'setvars.sh' file inside. The 'setvars.sh' is a shell script + * describing what files should be used and the signature ID ($SIGID) to use. + * + * Similar to write label in non-Unified-Build, the keys and vblock files will + * be in 'keyset/' folder: + * - rootkey.$SIGID + * - vblock_A.$SIGID + * - vblock_B.$SIGID + * If $SIGID starts with 'sig-id-in-*' then we have to replace it by VPD value + * 'whitelabel_tag' as '$MODEL-$WLTAG'. + */ + +static const char * const SETVARS_IMAGE_MAIN = "IMAGE_MAIN", + * const SETVARS_IMAGE_EC = "IMAGE_EC", + * const SETVARS_IMAGE_PD = "IMAGE_PD", + * const SETVARS_SIGNATURE_ID = "SIGNATURE_ID", + * const SIG_ID_IN_VPD_PREFIX = "sig-id-in", + * const DIR_KEYSET = "keyset", + * const DIR_MODELS = "models", + * const DEFAULT_MODEL_NAME = "default", + * const VPD_WHITELABEL_TAG = "whitelabel_tag", + * const VPD_CUSTOMIZATION_ID = "customization_id", + * const ENV_VAR_MODEL_DIR = "${MODEL_DIR}", + * const PATH_STARTSWITH_KEYSET = "keyset/", + * const PATH_ENDSWITH_SERVARS = "/setvars.sh"; + +struct archive { + void *handle; + + void * (*open)(const char *name); + int (*close)(void *handle); + + int (*walk)(void *handle, void *arg, + int (*callback)(const char *path, void *arg)); + int (*has_entry)(void *handle, const char *name); + int (*read_file)(void *handle, const char *fname, + uint8_t **data, uint32_t *size, int64_t *mtime); + int (*write_file)(void *handle, const char *fname, + uint8_t *data, uint32_t size, int64_t mtime); +}; + +/* + * -- Begin of archive implementations -- + */ + +/* Callback for archive_open on a general file system. */ +static void *archive_fallback_open(const char *name) +{ + assert(name && *name); + return strdup(name); +} + +/* Callback for archive_close on a general file system. */ +static int archive_fallback_close(void *handle) +{ + free(handle); + return 0; +} + +/* Callback for archive_walk on a general file system. */ +static int archive_fallback_walk( + void *handle, void *arg, + int (*callback)(const char *path, void *arg)) +{ + FTS *fts_handle; + FTSENT *ent; + char *fts_argv[2] = {}; + char default_path[] = "."; + char *root = default_path; + size_t root_len; + + if (handle) + root = (char *)handle; + root_len = strlen(root); + fts_argv[0] = root; + + fts_handle = fts_open(fts_argv, FTS_NOCHDIR, NULL); + if (!fts_handle) + return -1; + + while ((ent = fts_read(fts_handle)) != NULL) { + char *path = ent->fts_path + root_len; + if (ent->fts_info != FTS_F && ent->fts_info != FTS_SL) + continue; + while (*path == '/') + path++; + if (!*path) + continue; + if (callback(path, arg)) + break; + } + return 0; +} + +/* Callback for fallback drivers to get full path easily. */ +static const char *archive_fallback_get_path(void *handle, const char *fname, + char **temp_path) +{ + if (handle && *fname != '/') { + ASPRINTF(temp_path, "%s/%s", (char *)handle, fname); + return *temp_path; + } + return fname; +} + +/* Callback for archive_has_entry on a general file system. */ +static int archive_fallback_has_entry(void *handle, const char *fname) +{ + int r; + char *temp_path = NULL; + const char *path = archive_fallback_get_path(handle, fname, &temp_path); + + VB2_DEBUG("Checking %s\n", path); + r = access(path, R_OK); + free(temp_path); + return r == 0; +} + +/* Callback for archive_read_file on a general file system. */ +static int archive_fallback_read_file(void *handle, const char *fname, + uint8_t **data, uint32_t *size, int64_t *mtime) +{ + int r; + char *temp_path = NULL; + const char *path = archive_fallback_get_path(handle, fname, &temp_path); + struct stat st; + + VB2_DEBUG("Reading %s\n", path); + *data = NULL; + *size = 0; + r = vb2_read_file(path, data, size) != VB2_SUCCESS; + if (mtime) { + if (stat(path, &st) == 0) + *mtime = st.st_mtime; + else + WARN("Unable to stat %s: %s\n", path, strerror(errno)); + } + free(temp_path); + return r; +} + +/* Callback for archive_write_file on a general file system. */ +static int archive_fallback_write_file(void *handle, const char *fname, + uint8_t *data, uint32_t size, int64_t mtime) +{ + int r; + char *temp_path = NULL; + const char *path = archive_fallback_get_path(handle, fname, &temp_path); + + VB2_DEBUG("Writing %s\n", path); + if (strchr(path, '/')) { + char *dirname = strdup(path); + *strrchr(dirname, '/') = '\0'; + /* TODO(hungte): call mkdir(2) instead of shell invocation. */ + if (access(dirname, W_OK) != 0) { + char *command; + ASPRINTF(&command, "mkdir -p %s", dirname); + free(host_shell(command)); + free(command); + } + free(dirname); + } + r = vb2_write_file(path, data, size) != VB2_SUCCESS; + if (mtime) { + struct timeval times[2] = { + {.tv_sec = mtime, .tv_usec = 0}, + {.tv_sec = mtime, .tv_usec = 0}, + }; + if (utimes(path, times) != 0) + WARN("Unable to set times on %s: %s\n", path, strerror(errno)); + } + free(temp_path); + return r; +} + +#ifdef HAVE_LIBZIP + +/* Callback for archive_open on a ZIP file. */ +static void *archive_zip_open(const char *name) +{ + return zip_open(name, 0, NULL); +} + +/* Callback for archive_close on a ZIP file. */ +static int archive_zip_close(void *handle) +{ + struct zip *zip = (struct zip *)handle; + + if (zip) + return zip_close(zip); + return 0; +} + +/* Callback for archive_has_entry on a ZIP file. */ +static int archive_zip_has_entry(void *handle, const char *fname) +{ + struct zip *zip = (struct zip *)handle; + assert(zip); + return zip_name_locate(zip, fname, 0) != -1; +} + +/* Callback for archive_walk on a ZIP file. */ +static int archive_zip_walk( + void *handle, void *arg, + int (*callback)(const char *name, void *arg)) +{ + zip_int64_t num, i; + struct zip *zip = (struct zip *)handle; + assert(zip); + + num = zip_get_num_entries(zip, 0); + if (num < 0) + return 1; + for (i = 0; i < num; i++) { + const char *name = zip_get_name(zip, i, 0); + if (*name && name[strlen(name) - 1] == '/') + continue; + if (callback(name, arg)) + break; + } + return 0; +} + +/* Callback for archive_zip_read_file on a ZIP file. */ +static int archive_zip_read_file(void *handle, const char *fname, + uint8_t **data, uint32_t *size, int64_t *mtime) +{ + struct zip *zip = (struct zip *)handle; + struct zip_file *fp; + struct zip_stat stat; + + assert(zip); + *data = NULL; + *size = 0; + zip_stat_init(&stat); + if (zip_stat(zip, fname, 0, &stat)) { + ERROR("Fail to stat entry in ZIP: %s\n", fname); + return 1; + } + fp = zip_fopen(zip, fname, 0); + if (!fp) { + ERROR("Failed to open entry in ZIP: %s\n", fname); + return 1; + } + *data = (uint8_t *)malloc(stat.size); + if (*data) { + if (zip_fread(fp, *data, stat.size) == stat.size) { + if (mtime) + *mtime = stat.mtime; + *size = stat.size; + } else { + ERROR("Failed to read entry in zip: %s\n", fname); + free(*data); + *data = NULL; + } + } + zip_fclose(fp); + return *data == NULL; +} + +/* Callback for archive_zip_write_file on a ZIP file. */ +static int archive_zip_write_file(void *handle, const char *fname, + uint8_t *data, uint32_t size, int64_t mtime) +{ + struct zip *zip = (struct zip *)handle; + struct zip_source *src; + + VB2_DEBUG("Writing %s\n", fname); + assert(zip); + src = zip_source_buffer(zip, data, size, 0); + if (!src) { + ERROR("Internal error: cannot allocate buffer: %s\n", fname); + return 1; + } + + if (zip_file_add(zip, fname, src, ZIP_FL_OVERWRITE) < 0) { + zip_source_free(src); + ERROR("Internal error: failed to add: %s\n", fname); + return 1; + } + /* zip_source_free is not needed if zip_file_add success. */ +#if LIBZIP_VERSION_MAJOR >= 1 + zip_file_set_mtime(zip, zip_name_locate(zip, fname, 0), mtime, 0); +#endif + return 0; +} +#endif + +/* + * Opens an archive from given path. + * The type of archive will be determined automatically. + * Returns a pointer to reference to archive (must be released by archive_close + * when not used), otherwise NULL on error. + */ +struct archive *archive_open(const char *path) +{ + struct stat path_stat; + struct archive *ar; + + if (stat(path, &path_stat) != 0) { + ERROR("Cannot identify type of path: %s\n", path); + return NULL; + } + + ar = (struct archive *)malloc(sizeof(*ar)); + if (!ar) { + ERROR("Internal error: allocation failure.\n"); + return NULL; + } + + if (S_ISDIR(path_stat.st_mode)) { + VB2_DEBUG("Found directory, use fallback (fs) driver: %s\n", + path); + /* Regular file system. */ + ar->open = archive_fallback_open; + ar->close = archive_fallback_close; + ar->walk = archive_fallback_walk; + ar->has_entry = archive_fallback_has_entry; + ar->read_file = archive_fallback_read_file; + ar->write_file = archive_fallback_write_file; + } else { +#ifdef HAVE_LIBZIP + VB2_DEBUG("Found file, use ZIP driver: %s\n", path); + ar->open = archive_zip_open; + ar->close = archive_zip_close; + ar->walk = archive_zip_walk; + ar->has_entry = archive_zip_has_entry; + ar->read_file = archive_zip_read_file; + ar->write_file = archive_zip_write_file; +#else + ERROR("Found file, but no drivers were enabled: %s\n", path); + free(ar); + return NULL; +#endif + } + ar->handle = ar->open(path); + if (!ar->handle) { + ERROR("Failed to open archive: %s\n", path); + free(ar); + return NULL; + } + return ar; +} + +/* + * Closes an archive reference. + * Returns 0 on success, otherwise non-zero as failure. + */ +int archive_close(struct archive *ar) +{ + int r = ar->close(ar->handle); + free(ar); + return r; +} + +/* + * Checks if an entry (either file or directory) exists in archive. + * If entry name (fname) is an absolute path (/file), always check + * with real file system. + * Returns 1 if exists, otherwise 0 + */ +int archive_has_entry(struct archive *ar, const char *name) +{ + if (!ar || *name == '/') + return archive_fallback_has_entry(NULL, name); + return ar->has_entry(ar->handle, name); +} + +/* + * Traverses all files within archive (directories are ignored). + * For every entry, the path (relative the archive root) will be passed to + * callback function, until the callback returns non-zero. + * The arg argument will also be passed to callback. + * Returns 0 on success otherwise non-zero as failure. + */ +static int archive_walk(struct archive *ar, void *arg, + int (*callback)(const char *path, void *arg)) +{ + if (!ar) + return archive_fallback_walk(NULL, arg, callback); + return ar->walk(ar->handle, arg, callback); +} + +/* + * Reads a file from archive. + * If entry name (fname) is an absolute path (/file), always read + * from real file system. + * Returns 0 on success (data and size reflects the file content), + * otherwise non-zero as failure. + */ +int archive_read_file(struct archive *ar, const char *fname, + uint8_t **data, uint32_t *size, int64_t *mtime) +{ + if (!ar || *fname == '/') + return archive_fallback_read_file(NULL, fname, data, size, mtime); + return ar->read_file(ar->handle, fname, data, size, mtime); +} + +/* + * Writes a file into archive. + * If entry name (fname) is an absolute path (/file), always write into real + * file system. + * Returns 0 on success, otherwise non-zero as failure. + */ +int archive_write_file(struct archive *ar, const char *fname, + uint8_t *data, uint32_t size, int64_t mtime) +{ + if (!ar || *fname == '/') + return archive_fallback_write_file(NULL, fname, data, size, mtime); + return ar->write_file(ar->handle, fname, data, size, mtime); +} + +struct _copy_arg { + struct archive *from, *to; +}; + +/* Callback for archive_copy. */ +static int archive_copy_callback(const char *path, void *_arg) +{ + const struct _copy_arg *arg = (const struct _copy_arg*)_arg; + uint32_t size; + uint8_t *data; + int64_t mtime; + int r; + + INFO("Copying: %s\n", path); + if (archive_read_file(arg->from, path, &data, &size, &mtime)) { + ERROR("Failed reading: %s\n", path); + return 1; + } + r = archive_write_file(arg->to, path, data, size, mtime); + VB2_DEBUG("result=%d\n", r); + free(data); + return r; +} + +/* + * Copies all entries from one archive to another. + * Returns 0 on success, otherwise non-zero as failure. + */ +int archive_copy(struct archive *from, struct archive *to) +{ + struct _copy_arg arg = { .from = from, .to = to }; + return archive_walk(from, &arg, archive_copy_callback); +} + +/* + * -- End of archive implementations -- + */ + +/* Utility function to convert a string. */ +static void str_convert(char *s, int (*convert)(int c)) +{ + int c; + + for (; *s; s++) { + c = *s; + if (!isascii(c)) + continue; + *s = convert(c); + } +} + +/* Returns 1 if name ends by given pattern, otherwise 0. */ +static int str_endswith(const char *name, const char *pattern) +{ + size_t name_len = strlen(name), pattern_len = strlen(pattern); + if (name_len < pattern_len) + return 0; + return strcmp(name + name_len - pattern_len, pattern) == 0; +} + +/* Returns 1 if name starts by given pattern, otherwise 0. */ +static int str_startswith(const char *name, const char *pattern) +{ + return strncmp(name, pattern, strlen(pattern)) == 0; +} + +/* Returns the VPD value by given key name, or NULL on error (or no value). */ +static char *vpd_get_value(const char *fpath, const char *key) +{ + char *command, *result; + + assert(fpath); + ASPRINTF(&command, "vpd -g %s -f %s 2>/dev/null", key, fpath); + result = host_shell(command); + free(command); + + if (result && !*result) { + free(result); + result = NULL; + } + return result; +} + +/* + * Reads and parses a setvars type file from archive, then stores into config. + * Returns 0 on success (at least one entry found), otherwise failure. + */ +static int model_config_parse_setvars_file( + struct model_config *cfg, struct archive *archive, + const char *fpath) +{ + uint8_t *data; + uint32_t len; + + char *ptr_line, *ptr_token; + char *line, *k, *v; + int valid = 0; + + if (archive_read_file(archive, fpath, &data, &len, NULL) != 0) { + ERROR("Failed reading: %s\n", fpath); + return -1; + } + + /* Valid content should end with \n, or \"; ensure ASCIIZ for parsing */ + if (len) + data[len - 1] = '\0'; + + for (line = strtok_r((char *)data, "\n\r", &ptr_line); line; + line = strtok_r(NULL, "\n\r", &ptr_line)) { + char *expand_path = NULL; + int found_valid = 1; + + /* Format: KEY="value" */ + k = strtok_r(line, "=", &ptr_token); + if (!k) + continue; + v = strtok_r(NULL, "\"", &ptr_token); + if (!v) + continue; + + /* Some legacy updaters may be still using ${MODEL_DIR}. */ + if (str_startswith(v, ENV_VAR_MODEL_DIR)) { + ASPRINTF(&expand_path, "%s/%s%s", DIR_MODELS, cfg->name, + v + strlen(ENV_VAR_MODEL_DIR)); + } + + if (strcmp(k, SETVARS_IMAGE_MAIN) == 0) + cfg->image = strdup(v); + else if (strcmp(k, SETVARS_IMAGE_EC) == 0) + cfg->ec_image = strdup(v); + else if (strcmp(k, SETVARS_IMAGE_PD) == 0) + cfg->pd_image = strdup(v); + else if (strcmp(k, SETVARS_SIGNATURE_ID) == 0) { + cfg->signature_id = strdup(v); + if (str_startswith(v, SIG_ID_IN_VPD_PREFIX)) + cfg->is_white_label = 1; + } else + found_valid = 0; + free(expand_path); + valid += found_valid; + } + free(data); + return valid == 0; +} + +/* + * Changes the rootkey in firmware GBB to given new key. + * Returns 0 on success, otherwise failure. + */ +static int change_gbb_rootkey(struct firmware_image *image, + const char *section_name, + const uint8_t *rootkey, uint32_t rootkey_len) +{ + const struct vb2_gbb_header *gbb = find_gbb(image); + uint8_t *gbb_rootkey; + if (!gbb) { + ERROR("Cannot find GBB in image %s.\n", image->file_name); + return -1; + } + if (gbb->rootkey_size < rootkey_len) { + ERROR("New root key (%u bytes) larger than GBB (%u bytes).\n", + rootkey_len, gbb->rootkey_size); + return -1; + } + + gbb_rootkey = (uint8_t *)gbb + gbb->rootkey_offset; + /* See cmd_gbb_utility: root key must be first cleared with zero. */ + memset(gbb_rootkey, 0, gbb->rootkey_size); + memcpy(gbb_rootkey, rootkey, rootkey_len); + return 0; +} + +/* + * Changes the VBlock in firmware section to new data. + * Returns 0 on success, otherwise failure. + */ +static int change_vblock(struct firmware_image *image, const char *section_name, + const uint8_t *vblock, uint32_t vblock_len) +{ + struct firmware_section section; + + find_firmware_section(§ion, image, section_name); + if (!section.data) { + ERROR("Need section %s in image %s.\n", section_name, + image->file_name); + return -1; + } + if (section.size < vblock_len) { + ERROR("Section %s too small (%zu bytes) for vblock (%u bytes).\n", + section_name, section.size, vblock_len); + return -1; + } + memcpy(section.data, vblock, vblock_len); + return 0; +} + +/* + * Applies a key file to firmware image. + * Returns 0 on success, otherwise failure. + */ +static int apply_key_file( + struct firmware_image *image, const char *path, + struct archive *archive, const char *section_name, + int (*apply)(struct firmware_image *image, const char *section, + const uint8_t *data, uint32_t len)) +{ + int r = 0; + uint8_t *data = NULL; + uint32_t len; + + r = archive_read_file(archive, path, &data, &len, NULL); + if (r == 0) { + VB2_DEBUG("Loaded file: %s\n", path); + r = apply(image, section_name, data, len); + if (r) + ERROR("Failed applying %s to %s\n", path, section_name); + } else { + ERROR("Failed reading: %s\n", path); + } + free(data); + return r; +} + +/* + * Modifies a firmware image from patch information specified in model config. + * Returns 0 on success, otherwise number of failures. + */ +int patch_image_by_model( + struct firmware_image *image, const struct model_config *model, + struct archive *archive) +{ + int err = 0; + if (model->patches.rootkey) + err += !!apply_key_file( + image, model->patches.rootkey, archive, + FMAP_RO_GBB, change_gbb_rootkey); + if (model->patches.vblock_a) + err += !!apply_key_file( + image, model->patches.vblock_a, archive, + FMAP_RW_VBLOCK_A, change_vblock); + if (model->patches.vblock_b) + err += !!apply_key_file( + image, model->patches.vblock_b, archive, + FMAP_RW_VBLOCK_B, change_vblock); + return err; +} + +/* + * Finds available patch files by given model. + * Updates `model` argument with path of patch files. + */ +static void find_patches_for_model(struct model_config *model, + struct archive *archive, + const char *signature_id) +{ + char *path; + int i; + + const char *names[] = { + "rootkey", + "vblock_A", + "vblock_B", + }; + + char **targets[] = { + &model->patches.rootkey, + &model->patches.vblock_a, + &model->patches.vblock_b, + }; + + assert(ARRAY_SIZE(names) == ARRAY_SIZE(targets)); + for (i = 0; i < ARRAY_SIZE(names); i++) { + ASPRINTF(&path, "%s/%s.%s", DIR_KEYSET, names[i], signature_id); + if (archive_has_entry(archive, path)) + *targets[i] = path; + else + free(path); + } +} + +/* + * Adds and copies one new model config to the existing list of given manifest. + * Returns a pointer to the newly allocated config, or NULL on failure. + */ +static struct model_config *manifest_add_model( + struct manifest *manifest, + const struct model_config *cfg) +{ + struct model_config *model; + manifest->num++; + manifest->models = (struct model_config *)realloc( + manifest->models, manifest->num * sizeof(*model)); + if (!manifest->models) { + ERROR("Internal error: failed to allocate buffer.\n"); + return NULL; + } + model = &manifest->models[manifest->num - 1]; + memcpy(model, cfg, sizeof(*model)); + return model; +} + +/* + * A callback function for manifest to scan files in archive. + * Returns 0 to keep scanning, or non-zero to stop. + */ +static int manifest_scan_entries(const char *name, void *arg) +{ + struct manifest *manifest = (struct manifest *)arg; + struct archive *archive = manifest->archive; + struct model_config model = {0}; + char *slash; + + if (str_startswith(name, PATH_STARTSWITH_KEYSET)) + manifest->has_keyset = 1; + if (!str_endswith(name, PATH_ENDSWITH_SERVARS)) + return 0; + + /* name: models/$MODEL/setvars.sh */ + model.name = strdup(strchr(name, '/') + 1); + slash = strchr(model.name, '/'); + if (slash) + *slash = '\0'; + + VB2_DEBUG("Found model <%s> setvars: %s\n", model.name, name); + if (model_config_parse_setvars_file(&model, archive, name)) { + ERROR("Invalid setvars file: %s\n", name); + return 0; + } + + /* In legacy setvars.sh, the ec_image and pd_image may not exist. */ + if (model.ec_image && !archive_has_entry(archive, model.ec_image)) { + VB2_DEBUG("Ignore non-exist EC image: %s\n", model.ec_image); + free(model.ec_image); + model.ec_image = NULL; + } + if (model.pd_image && !archive_has_entry(archive, model.pd_image)) { + VB2_DEBUG("Ignore non-exist PD image: %s\n", model.pd_image); + free(model.pd_image); + model.pd_image = NULL; + } + + /* Find patch files. */ + if (model.signature_id) + find_patches_for_model(&model, archive, model.signature_id); + + return !manifest_add_model(manifest, &model); +} + +/** + * get_manifest_key() - Wrapper to get the firmware manifest key from crosid + * + * @manifest_key_out - Output parameter of the firmware manifest key. + * + * Returns: + * - <0 if libcrosid is unavailable or there was an error reading + * device data + * - >=0 (the matched device index) success + */ +static int get_manifest_key(char **manifest_key_out) +{ +#ifdef HAVE_CROSID + return crosid_get_firmware_manifest_key(manifest_key_out); +#else + ERROR("This version of futility was compiled without libcrosid " + "(perhaps compiled outside of the Chrome OS build system?) and " + "the update command is not fully supported. Either compile " + "from the Chrome OS build, or pass --model to manually specify " + "the machine model.\n"); + return -1; +#endif +} + +/* + * Finds the existing model_config from manifest that best matches current + * system (as defined by model_name). + * Returns a model_config from manifest, or NULL if not found. + */ +const struct model_config *manifest_find_model(const struct manifest *manifest, + const char *model_name) +{ + char *manifest_key = NULL; + const struct model_config *model = NULL; + int i; + int matched_index; + + /* + * For manifest with single model defined, we should just return because + * there are other mechanisms like platform name check to double confirm + * if the firmware is valid. + */ + if (manifest->num == 1) + return &manifest->models[0]; + + if (!model_name) { + matched_index = get_manifest_key(&manifest_key); + if (matched_index < 0) { + ERROR("Failed to get device identity. " + "Run \"crosid -v\" for explanation.\n"); + return NULL; + } + + VB2_DEBUG("Matched chromeos-config index: %d\n", matched_index); + VB2_DEBUG("Manifest key (model): '%s'\n", manifest_key); + model_name = manifest_key; + } + + for (i = 0; !model && i < manifest->num; i++) { + if (strcmp(model_name, manifest->models[i].name) == 0) + model = &manifest->models[i]; + } + if (!model) { + ERROR("Unsupported model: '%s'.\n", model_name); + + fprintf(stderr, + "The firmware manifest key '%s' is not present in this " + "updater archive. The known keys to this updater " + "archive are:\n", model_name); + + for (i = 0; i < manifest->num; i++) + fprintf(stderr, " %s", manifest->models[i].name); + fprintf(stderr, "\n\n"); + fprintf(stderr, + "Perhaps you are trying to use an updater archive for " + "the wrong board, or designed for an older OS version " + "before this model was supported.\n"); + fprintf(stderr, + "Hint: Read the FIRMWARE_MANIFEST_KEY from the output " + "of the crosid command.\n"); + } + + + free(manifest_key); + return model; +} + +/* + * Determines the signature ID to use for white label. + * Returns the signature ID for looking up rootkey and vblock files. + * Caller must free the returned string. + */ +static char *resolve_signature_id(struct model_config *model, const char *image) +{ + int is_unibuild = model->signature_id ? 1 : 0; + char *wl_tag = vpd_get_value(image, VPD_WHITELABEL_TAG); + char *sig_id = NULL; + + /* Unified build: $model.$wl_tag, or $model (b/126800200). */ + if (is_unibuild) { + if (!wl_tag) { + WARN("No VPD '%s' set for white label - use model name " + "'%s' as default.\n", VPD_WHITELABEL_TAG, + model->name); + return strdup(model->name); + } + + ASPRINTF(&sig_id, "%s-%s", model->name, wl_tag); + free(wl_tag); + return sig_id; + } + + /* Non-Unibuild: Upper($wl_tag), or Upper(${cid%%-*}). */ + if (!wl_tag) { + char *cid = vpd_get_value(image, VPD_CUSTOMIZATION_ID); + if (cid) { + /* customization_id in format LOEM[-VARIANT]. */ + char *dash = strchr(cid, '-'); + if (dash) + *dash = '\0'; + wl_tag = cid; + } + } + if (wl_tag) + str_convert(wl_tag, toupper); + return wl_tag; +} + +/* + * Applies white label information to an existing model configuration. + * Collects signature ID information from either parameter signature_id or + * image file (via VPD) and updates model.patches for key files. + * Returns 0 on success, otherwise failure. + */ +int model_apply_white_label( + struct model_config *model, + struct archive *archive, + const char *signature_id, + const char *image) +{ + char *sig_id = NULL; + int r = 0; + + if (!signature_id) { + sig_id = resolve_signature_id(model, image); + signature_id = sig_id; + } + + if (signature_id) { + VB2_DEBUG("Find white label patches by signature ID: '%s'.\n", + signature_id); + find_patches_for_model(model, archive, signature_id); + } else { + signature_id = ""; + WARN("No VPD '%s' set for white label - use default keys.\n", + VPD_WHITELABEL_TAG); + } + if (!model->patches.rootkey) { + ERROR("No keys found for signature_id: '%s'\n", signature_id); + r = 1; + } else { + INFO("Applied for white label: %s\n", signature_id); + } + free(sig_id); + return r; +} + +/* + * Creates a new manifest object by scanning files in archive. + * Returns the manifest on success, otherwise NULL for failure. + */ +struct manifest *new_manifest_from_archive(struct archive *archive) +{ + struct manifest manifest = {0}, *new_manifest; + struct model_config model = {0}; + const char * const host_image_name = "image.bin", + * const old_host_image_name = "bios.bin", + * const ec_name = "ec.bin", + * const pd_name = "pd.bin"; + + manifest.archive = archive; + manifest.default_model = -1; + archive_walk(archive, &manifest, manifest_scan_entries); + if (manifest.num == 0) { + const char *image_name = NULL; + struct firmware_image image = {0}; + + /* Try to load from current folder. */ + if (archive_has_entry(archive, old_host_image_name)) + image_name = old_host_image_name; + else if (archive_has_entry(archive, host_image_name)) + image_name = host_image_name; + else + return 0; + + model.image = strdup(image_name); + if (archive_has_entry(archive, ec_name)) + model.ec_image = strdup(ec_name); + if (archive_has_entry(archive, pd_name)) + model.pd_image = strdup(pd_name); + /* Extract model name from FWID: $Vendor_$Platform.$Version */ + if (!load_firmware_image(&image, image_name, archive)) { + char *token = NULL; + if (strtok(image.ro_version, "_")) + token = strtok(NULL, "."); + if (token && *token) { + str_convert(token, tolower); + model.name = strdup(token); + } + free_firmware_image(&image); + } + if (!model.name) + model.name = strdup(DEFAULT_MODEL_NAME); + if (manifest.has_keyset) + model.is_white_label = 1; + manifest_add_model(&manifest, &model); + manifest.default_model = manifest.num - 1; + } + VB2_DEBUG("%d model(s) loaded.\n", manifest.num); + if (!manifest.num) { + ERROR("No valid configurations found from archive.\n"); + return NULL; + } + + new_manifest = (struct manifest *)malloc(sizeof(manifest)); + if (!new_manifest) { + ERROR("Internal error: memory allocation error.\n"); + return NULL; + } + memcpy(new_manifest, &manifest, sizeof(manifest)); + return new_manifest; +} + +/* Releases all resources allocated by given manifest object. */ +void delete_manifest(struct manifest *manifest) +{ + int i; + assert(manifest); + for (i = 0; i < manifest->num; i++) { + struct model_config *model = &manifest->models[i]; + free(model->name); + free(model->signature_id); + free(model->image); + free(model->ec_image); + free(model->pd_image); + free(model->patches.rootkey); + free(model->patches.vblock_a); + free(model->patches.vblock_b); + } + free(manifest->models); + free(manifest); +} + +static const char *get_gbb_key_hash(const struct vb2_gbb_header *gbb, + int32_t offset, int32_t size) +{ + struct vb2_packed_key *key; + + if (!gbb) + return ""; + key = (struct vb2_packed_key *)((uint8_t *)gbb + offset); + if (vb2_packed_key_looks_ok(key, size)) + return ""; + return packed_key_sha1_string(key); +} + +/* Prints the information of given image file in JSON format. */ +static void print_json_image( + const char *name, const char *fpath, struct model_config *m, + struct archive *archive, int indent, int is_host) +{ + struct firmware_image image = {0}; + const struct vb2_gbb_header *gbb = NULL; + if (!fpath) + return; + if (load_firmware_image(&image, fpath, archive)) + return; + if (!is_host) + printf(",\n"); + printf("%*s\"%s\": { \"versions\": { \"ro\": \"%s\", \"rw\": \"%s\" },", + indent, "", name, image.ro_version, image.rw_version_a); + indent += 2; + if (!is_host) { + /* No extra information to be printed */ + } else if (patch_image_by_model(&image, m, archive) != 0) { + ERROR("Failed to patch images by model: %s\n", m->name); + } else if (NULL != (gbb = find_gbb(&image))) { + printf("\n%*s\"keys\": { \"root\": \"%s\", ", + indent, "", + get_gbb_key_hash(gbb, gbb->rootkey_offset, + gbb->rootkey_size)); + printf("\"recovery\": \"%s\" },", + get_gbb_key_hash(gbb, gbb->recovery_key_offset, + gbb->recovery_key_size)); + } + printf("\n%*s\"image\": \"%s\" }", indent, "", fpath); + free_firmware_image(&image); +} + +/* Prints the information of objects in manifest (models and images) in JSON. */ +void print_json_manifest(const struct manifest *manifest) +{ + int i, indent; + struct archive *ar = manifest->archive; + + printf("{\n"); + for (i = 0, indent = 2; i < manifest->num; i++) { + struct model_config *m = &manifest->models[i]; + printf("%s%*s\"%s\": {\n", i ? ",\n" : "", indent, "", m->name); + indent += 2; + print_json_image("host", m->image, m, ar, indent, 1); + print_json_image("ec", m->ec_image, m, ar, indent, 0); + print_json_image("pd", m->pd_image, m, ar, indent, 0); + if (m->patches.rootkey) { + struct patch_config *p = &m->patches; + printf(",\n%*s\"patches\": { \"rootkey\": \"%s\", " + "\"vblock_a\": \"%s\", \"vblock_b\": \"%s\" }", + indent, "", p->rootkey, p->vblock_a, + p->vblock_b); + } + if (m->signature_id) + printf(",\n%*s\"signature_id\": \"%s\"", indent, "", + m->signature_id); + printf("\n }"); + indent -= 2; + assert(indent == 2); + } + printf("\n}\n"); +} diff --git a/futility/updater_quirks.c b/futility/updater_quirks.c new file mode 100644 index 0000000..e5ee5c1 --- /dev/null +++ b/futility/updater_quirks.c @@ -0,0 +1,587 @@ +/* Copyright 2018 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * The board-specific quirks needed by firmware updater. + */ + +#include +#include +#include +#include +#include + +#include "crossystem.h" +#include "futility.h" +#include "host_misc.h" +#include "updater.h" + +struct quirks_record { + const char * const match; + const char * const quirks; +}; + +static const struct quirks_record quirks_records[] = { + { .match = "Google_Whirlwind.", .quirks = "enlarge_image" }, + { .match = "Google_Arkham.", .quirks = "enlarge_image" }, + { .match = "Google_Storm.", .quirks = "enlarge_image" }, + { .match = "Google_Gale.", .quirks = "enlarge_image" }, + + { .match = "Google_Chell.", .quirks = "unlock_me_for_update" }, + { .match = "Google_Lars.", .quirks = "unlock_me_for_update" }, + { .match = "Google_Sentry.", .quirks = "unlock_me_for_update" }, + { .match = "Google_Asuka.", .quirks = "unlock_me_for_update" }, + { .match = "Google_Caroline.", .quirks = "unlock_me_for_update" }, + { .match = "Google_Cave.", .quirks = "unlock_me_for_update" }, + + { .match = "Google_Eve.", + .quirks = "unlock_me_for_update,eve_smm_store" }, + + { .match = "Google_Sarien.", + .quirks = "unlock_wilco_me_for_update" }, + { .match = "Google_Arcada.", + .quirks = "unlock_wilco_me_for_update" }, + { .match = "Google_Drallion.", + .quirks = "unlock_wilco_me_for_update" }, + + { .match = "Google_Poppy.", .quirks = "min_platform_version=6" }, + { .match = "Google_Scarlet.", .quirks = "min_platform_version=1" }, + { .match = "Google_Trogdor.", .quirks = "min_platform_version=2" }, + + /* Legacy white label units. */ + { .match = "Google_Enguarde.", .quirks = "allow_empty_wltag" }, + { .match = "Google_Expresso.", .quirks = "allow_empty_wltag" }, + { .match = "Google_Hana.", .quirks = "allow_empty_wltag" }, + { .match = "Google_Veyron_Jaq.", .quirks = "allow_empty_wltag" }, + { .match = "Google_Veyron_Jerry.", .quirks = "allow_empty_wltag" }, + { .match = "Google_Veyron_Mighty.", .quirks = "allow_empty_wltag" }, + { .match = "Google_Reks.", .quirks = "allow_empty_wltag" }, + { .match = "Google_Relm.", .quirks = "allow_empty_wltag" }, + { .match = "Google_Wizpig.", .quirks = "allow_empty_wltag" }, + + { .match = "Google_Phaser.", .quirks = "override_signature_id" }, +}; + +/* Preserves meta data and reload image contents from given file path. */ +static int reload_firmware_image(const char *file_path, + struct firmware_image *image) +{ + free_firmware_image(image); + return load_firmware_image(image, file_path, NULL); +} + +/* + * Returns True if the system has EC software sync enabled. + */ +static int is_ec_software_sync_enabled(struct updater_config *cfg) +{ + const struct vb2_gbb_header *gbb; + + /* Check if current system has disabled software sync or no support. */ + if (!(VbGetSystemPropertyInt("vdat_flags") & VBSD_EC_SOFTWARE_SYNC)) { + INFO("EC Software Sync is not available.\n"); + return 0; + } + + /* Check if the system has been updated to disable software sync. */ + gbb = find_gbb(&cfg->image); + if (!gbb) { + WARN("Invalid AP firmware image.\n"); + return 0; + } + if (gbb->flags & VB2_GBB_FLAG_DISABLE_EC_SOFTWARE_SYNC) { + INFO("EC Software Sync will be disabled in next boot.\n"); + return 0; + } + return 1; +} + +/* + * Schedules an EC RO software sync (in next boot) if applicable. + */ +static int ec_ro_software_sync(struct updater_config *cfg) +{ + const char *ec_ro_path; + uint8_t *ec_ro_data; + uint32_t ec_ro_len; + int is_same_ec_ro; + struct firmware_section ec_ro_sec; + const char *tmp_path = get_firmware_image_temp_file( + &cfg->image, &cfg->tempfiles); + + if (!tmp_path) + return 1; + find_firmware_section(&ec_ro_sec, &cfg->ec_image, "EC_RO"); + if (!ec_ro_sec.data || !ec_ro_sec.size) { + ERROR("EC image has invalid section '%s'.\n", "EC_RO"); + return 1; + } + ec_ro_path = cbfs_extract_file(tmp_path, FMAP_RO_CBFS, "ecro", + &cfg->tempfiles); + if (!ec_ro_path || + !cbfs_file_exists(tmp_path, FMAP_RO_CBFS, "ecro.hash")) { + INFO("No valid EC RO for software sync in AP firmware.\n"); + return 1; + } + if (vb2_read_file(ec_ro_path, &ec_ro_data, &ec_ro_len) != VB2_SUCCESS) { + ERROR("Failed to read EC RO.\n"); + return 1; + } + + is_same_ec_ro = (ec_ro_len <= ec_ro_sec.size && + memcmp(ec_ro_sec.data, ec_ro_data, ec_ro_len) == 0); + free(ec_ro_data); + + if (!is_same_ec_ro) { + /* TODO(hungte) If change AP RO is not a problem (hash will be + * different, which may be a problem to factory and HWID), or if + * we can be be sure this is for developers, extract EC RO and + * update AP RO CBFS to trigger EC RO sync with new EC. + */ + ERROR("The EC RO contents specified from AP (--image) and EC " + "(--ec_image) firmware images are different, cannot " + "update by EC RO software sync.\n"); + return 1; + } + VbSetSystemPropertyInt("try_ro_sync", 1); + return 0; +} + +/* + * Returns True if EC is running in RW. + */ +static int is_ec_in_rw(void) +{ + char buf[VB_MAX_STRING_PROPERTY]; + return (VbGetSystemPropertyString("ecfw_act", buf, sizeof(buf)) && + strcasecmp(buf, "RW") == 0); +} + +/* + * Quirk to enlarge a firmware image to match flash size. This is needed by + * devices using multiple SPI flash with different sizes, for example 8M and + * 16M. The image_to will be padded with 0xFF using the size of image_from. + * Returns 0 on success, otherwise failure. + */ +static int quirk_enlarge_image(struct updater_config *cfg) +{ + struct firmware_image *image_from = &cfg->image_current, + *image_to = &cfg->image; + const char *tmp_path; + size_t to_write; + FILE *fp; + + if (image_from->size <= image_to->size) + return 0; + + tmp_path = get_firmware_image_temp_file(image_to, &cfg->tempfiles); + if (!tmp_path) + return -1; + + VB2_DEBUG("Resize image from %u to %u.\n", + image_to->size, image_from->size); + to_write = image_from->size - image_to->size; + fp = fopen(tmp_path, "ab"); + if (!fp) { + ERROR("Cannot open temporary file %s.\n", tmp_path); + return -1; + } + while (to_write-- > 0) + fputc('\xff', fp); + fclose(fp); + return reload_firmware_image(tmp_path, image_to); +} + +/* + * Quirk to unlock a firmware image with SI_ME (management engine) when updating + * so the system has a chance to make sure SI_ME won't be corrupted on next boot + * before locking the Flash Master values in SI_DESC. + * Returns 0 on success, otherwise failure. + */ +static int quirk_unlock_me_for_update(struct updater_config *cfg) +{ + struct firmware_section section; + struct firmware_image *image_to = &cfg->image; + const int flash_master_offset = 128; + const uint8_t flash_master[] = { + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff + }; + + find_firmware_section(§ion, image_to, FMAP_SI_DESC); + if (section.size < flash_master_offset + ARRAY_SIZE(flash_master)) + return 0; + if (memcmp(section.data + flash_master_offset, flash_master, + ARRAY_SIZE(flash_master)) == 0) { + VB2_DEBUG("Target ME not locked.\n"); + return 0; + } + /* + * b/35568719: We should only update with unlocked ME and let + * board-postinst lock it. + */ + INFO("Changed Flash Master Values to unlocked.\n"); + memcpy(section.data + flash_master_offset, flash_master, + ARRAY_SIZE(flash_master)); + return 0; +} + +/* + * Quirk to unlock a firmware image with SI_ME (management engine) when updating + * so the system has a chance to make sure SI_ME won't be corrupted on next boot + * before locking the Flash Master values in SI_DESC. + * Returns 0 on success, otherwise failure. + */ +static int quirk_unlock_wilco_me_for_update(struct updater_config *cfg) +{ + struct firmware_section section; + struct firmware_image *image_to = &cfg->image; + const int flash_master_offset = 128; + const uint8_t flash_master[] = { + 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff + }; + + find_firmware_section(§ion, image_to, FMAP_SI_DESC); + if (section.size < flash_master_offset + ARRAY_SIZE(flash_master)) + return 0; + if (memcmp(section.data + flash_master_offset, flash_master, + ARRAY_SIZE(flash_master)) == 0) { + VB2_DEBUG("Target ME not locked.\n"); + return 0; + } + INFO("Changed Flash Master Values to unlocked.\n"); + memcpy(section.data + flash_master_offset, flash_master, + ARRAY_SIZE(flash_master)); + return 0; +} + +/* + * Checks and returns 0 if the platform version of current system is larger + * or equal to given number, otherwise non-zero. + */ +static int quirk_min_platform_version(struct updater_config *cfg) +{ + int min_version = get_config_quirk(QUIRK_MIN_PLATFORM_VERSION, cfg); + int platform_version = get_system_property(SYS_PROP_PLATFORM_VER, cfg); + + VB2_DEBUG("Minimum required version=%d, current platform version=%d\n", + min_version, platform_version); + + if (platform_version >= min_version) + return 0; + ERROR("Need platform version >= %d (current is %d). " + "This firmware will only run on newer systems.\n", + min_version, platform_version); + return -1; +} + +/* + * Quirk to help preserving SMM store on devices without a dedicated "SMMSTORE" + * FMAP section. These devices will store "smm_store" file in same CBFS where + * the legacy boot loader lives (i.e, FMAP RW_LEGACY). + * Note this currently has dependency on external program "cbstool". + * Returns 0 if the SMM store is properly preserved, or if the system is not + * available to do that (problem in cbfstool, or no "smm_store" in current + * system firmware). Otherwise non-zero as failure. + */ +static int quirk_eve_smm_store(struct updater_config *cfg) +{ + const char *smm_store_name = "smm_store"; + const char *old_store; + char *command; + const char *temp_image = get_firmware_image_temp_file( + &cfg->image_current, &cfg->tempfiles); + + if (!temp_image) + return -1; + + old_store = cbfs_extract_file(temp_image, FMAP_RW_LEGACY, + smm_store_name, &cfg->tempfiles); + if (!old_store) { + VB2_DEBUG("cbfstool failure or SMM store not available. " + "Don't preserve.\n"); + return 0; + } + + /* Reuse temp_image */ + temp_image = get_firmware_image_temp_file(&cfg->image, &cfg->tempfiles); + if (!temp_image) + return -1; + + /* crosreview.com/1165109: The offset is fixed at 0x1bf000. */ + ASPRINTF(&command, + "cbfstool \"%s\" remove -r %s -n \"%s\" 2>/dev/null; " + "cbfstool \"%s\" add -r %s -n \"%s\" -f \"%s\" " + " -t raw -b 0x1bf000", temp_image, FMAP_RW_LEGACY, + smm_store_name, temp_image, FMAP_RW_LEGACY, + smm_store_name, old_store); + free(host_shell(command)); + free(command); + + return reload_firmware_image(temp_image, &cfg->image); +} + +/* + * Update EC (RO+RW) in most reliable way. + * + * Some EC will reset TCPC when doing sysjump, and will make rootfs unavailable + * if the system was boot from USB, or other unexpected issues even if the + * system was boot from internal disk. To prevent that, try to partial update + * only RO and expect EC software sync to update RW later, or perform EC RO + * software sync. + * + * Returns: + * EC_RECOVERY_FULL to indicate a full recovery is needed. + * EC_RECOVERY_RO to indicate partial update (WP_RO) is needed. + * EC_RECOVERY_DONE to indicate EC RO software sync is applied. + * Other values to report failure. + */ +static int quirk_ec_partial_recovery(struct updater_config *cfg) +{ + /* + * http://crbug.com/1024401: Some EC needs extra header outside EC_RO so + * we have to update whole WP_RO, not just EC_RO. + */ + const char *ec_ro = "WP_RO"; + struct firmware_image *ec_image = &cfg->ec_image; + + int do_partial = get_config_quirk(QUIRK_EC_PARTIAL_RECOVERY, cfg); + if (do_partial == -1) { + char arch[VB_MAX_STRING_PROPERTY]; + /* + * Don't do partial update if can't decide arch (usually implies + * running outside DUT). + */ + do_partial = 0; + if (VbGetSystemPropertyString("arch", arch, sizeof(arch)) > 0) { + /* By default disabled for x86, otherwise enabled. */ + do_partial = !!strcmp(arch, "x86"); + } + } + + if (!do_partial) { + return EC_RECOVERY_FULL; + } else if (!firmware_section_exists(ec_image, ec_ro)) { + INFO("EC image does not have section '%s'.\n", ec_ro); + /* Need full update. */ + } else if (!is_ec_software_sync_enabled(cfg)) { + /* Message already printed, need full update. */ + } else if (is_ec_in_rw()) { + WARN("EC Software Sync detected, will only update EC RO. " + "The contents in EC RW will be updated after reboot.\n"); + return EC_RECOVERY_RO; + } else if (ec_ro_software_sync(cfg) == 0) { + INFO("EC RO and RW should be updated after reboot.\n"); + return EC_RECOVERY_DONE; + } + + WARN("Update EC RO+RW and may cause unexpected error later. " + "See http://crbug.com/782427#c4 for more information.\n"); + return EC_RECOVERY_FULL; +} + +/* + * Preserve ME during firmware update. + * + * Updating ME region while SoC is in S0 state is an unsupported use-case. On + * recent platforms, we are seeing issues more frequently because of this use- + * case. For the firmware updates performed using firmware update archive, + * preserve the ME region so that it gets updated in the successive boot. + * + * Returns: + * 1 to signal ME needs to be preserved. + * 0 to signal ME does not need to be preserved. + */ +static int quirk_preserve_me(struct updater_config *cfg) +{ + /* For a factory update donot preserve ME. */ + if (cfg->factory_update) { + WARN("Factory update. Not preserving ME.\n"); + return 0; + } + + /* + * For a non-archive update, the post boot script that updates ME + * does not have access to the firmware image after the boot. Hence + * donot preserve ME. + */ + if (!cfg->archive) { + WARN("Update using a non-archive image. Not preserving ME.\n"); + return 0; + } + + return 1; +} + +/* + * Disable checking platform compatibility. + */ +static int quirk_no_check_platform(struct updater_config *cfg) +{ + WARN("Disabled checking platform. You are on your own.\n"); + cfg->check_platform = 0; + return 0; +} + +/* + * Registers known quirks to a updater_config object. + */ +void updater_register_quirks(struct updater_config *cfg) +{ + struct quirk_entry *quirks; + + assert(ARRAY_SIZE(cfg->quirks) == QUIRK_MAX); + quirks = &cfg->quirks[QUIRK_ENLARGE_IMAGE]; + quirks->name = "enlarge_image"; + quirks->help = "Enlarge firmware image by flash size."; + quirks->apply = quirk_enlarge_image; + + quirks = &cfg->quirks[QUIRK_MIN_PLATFORM_VERSION]; + quirks->name = "min_platform_version"; + quirks->help = "Minimum compatible platform version " + "(also known as Board ID version)."; + quirks->apply = quirk_min_platform_version; + + quirks = &cfg->quirks[QUIRK_UNLOCK_WILCO_ME_FOR_UPDATE]; + quirks->name = "unlock_wilco_me_for_update"; + quirks->help = "Unlock ME for safe lockdown."; + quirks->apply = quirk_unlock_wilco_me_for_update; + + quirks = &cfg->quirks[QUIRK_UNLOCK_ME_FOR_UPDATE]; + quirks->name = "unlock_me_for_update"; + quirks->help = "b/35568719; only lock management engine in " + "board-postinst."; + quirks->apply = quirk_unlock_me_for_update; + + quirks = &cfg->quirks[QUIRK_EVE_SMM_STORE]; + quirks->name = "eve_smm_store"; + quirks->help = "b/70682365; preserve UEFI SMM store without " + "dedicated FMAP section."; + quirks->apply = quirk_eve_smm_store; + + quirks = &cfg->quirks[QUIRK_ALLOW_EMPTY_WLTAG]; + quirks->name = "allow_empty_wltag"; + quirks->help = "chromium/906962; allow devices without white label " + "tags set to use default keys."; + quirks->apply = NULL; /* Simple config. */ + + quirks = &cfg->quirks[QUIRK_EC_PARTIAL_RECOVERY]; + quirks->name = "ec_partial_recovery"; + quirks->help = "chromium/1024401; recover EC by partial RO update."; + quirks->apply = quirk_ec_partial_recovery; + quirks->value = -1; /* Decide at runtime. */ + + quirks = &cfg->quirks[QUIRK_OVERRIDE_SIGNATURE_ID]; + quirks->name = "override_signature_id"; + quirks->help = "chromium/146876241; override signature id for " + "devices shipped with different root key."; + quirks->apply = NULL; /* Simple config. */ + + quirks = &cfg->quirks[QUIRK_PRESERVE_ME]; + quirks->name = "preserve_me"; + quirks->help = "b/165590952; Preserve ME during firmware update except " + "for factory update or developer images."; + quirks->apply = quirk_preserve_me; + + quirks = &cfg->quirks[QUIRK_NO_CHECK_PLATFORM]; + quirks->name = "no_check_platform"; + quirks->help = "Do not check platform name."; + quirks->apply = quirk_no_check_platform; +} + +/* + * Gets the default quirk config string from target image name. + * Returns a string (in same format as --quirks) to load or NULL if no quirks. + */ +const char * const updater_get_model_quirks(struct updater_config *cfg) +{ + const char *pattern = cfg->image.ro_version; + int i; + + if (!pattern) { + VB2_DEBUG("Cannot identify system for default quirks.\n"); + return NULL; + } + + for (i = 0; i < ARRAY_SIZE(quirks_records); i++) { + const struct quirks_record *r = &quirks_records[i]; + if (strncmp(r->match, pattern, strlen(r->match)) != 0) + continue; + VB2_DEBUG("Found system default quirks: %s\n", r->quirks); + return r->quirks; + } + return NULL; +} + +/* + * Gets the quirk config string from target image CBFS. + * Returns a string (in same format as --quirks) to load or NULL if no quirks. + */ +char *updater_get_cbfs_quirks(struct updater_config *cfg) +{ + const char *entry_name = "updater_quirks"; + const char *cbfs_region = "FW_MAIN_A"; + struct firmware_section cbfs_section; + + /* Before invoking cbfstool, try to search for CBFS file name. */ + find_firmware_section(&cbfs_section, &cfg->image, cbfs_region); + if (!cbfs_section.size || !memmem(cbfs_section.data, cbfs_section.size, + entry_name, strlen(entry_name))) { + if (!cbfs_section.size) + VB2_DEBUG("Missing region: %s\n", cbfs_region); + else + VB2_DEBUG("Cannot find entry: %s\n", entry_name); + return NULL; + } + + const char *tmp_path = get_firmware_image_temp_file( + &cfg->image, &cfg->tempfiles); + uint8_t *data = NULL; + uint32_t size = 0; + + /* Although the name exists, it may not be a real file. */ + if (!cbfs_file_exists(tmp_path, cbfs_region, entry_name)) { + VB2_DEBUG("Found string '%s' but not a file.\n", entry_name); + return NULL; + } + + VB2_DEBUG("Found %s from CBFS %s\n", entry_name, cbfs_region); + tmp_path = cbfs_extract_file(tmp_path, cbfs_region, entry_name, + &cfg->tempfiles); + if (!tmp_path || + vb2_read_file(tmp_path, &data, &size) != VB2_SUCCESS) { + ERROR("Failed to read [%s] from CBFS [%s].\n", + entry_name, cbfs_region); + return NULL; + } + VB2_DEBUG("Got quirks (%u bytes): %s\n", size, data); + return (char *)data; +} + +/* + * Overrides signature id if the device was shipped with known + * special rootkey. + */ +int quirk_override_signature_id(struct updater_config *cfg, + struct model_config *model, + const char **signature_id) +{ + const char * const DOPEFISH_KEY_HASH = + "9a1f2cc319e2f2e61237dc51125e35ddd4d20984"; + + /* b/146876241 */ + assert(model); + if (strcmp(model->name, "phaser360") == 0) { + struct firmware_image *image = &cfg->image_current; + const char *key_hash = get_firmware_rootkey_hash(image); + if (key_hash && strcmp(key_hash, DOPEFISH_KEY_HASH) == 0) { + const char * const sig_dopefish = "phaser360-dopefish"; + WARN("A Phaser360 with Dopefish rootkey - " + "override signature_id to '%s'.\n", sig_dopefish); + *signature_id = sig_dopefish; + } + } + + return 0; +} diff --git a/futility/updater_utils.c b/futility/updater_utils.c new file mode 100644 index 0000000..50a3326 --- /dev/null +++ b/futility/updater_utils.c @@ -0,0 +1,651 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * The utility functions for firmware updater. + */ + +#include +#include +#include +#include +#include +#include +#if defined (__FreeBSD__) || defined(__OpenBSD__) +#include +#endif + +#include "2common.h" +#include "crossystem.h" +#include "host_misc.h" +#include "util_misc.h" +#include "updater.h" + +#define COMMAND_BUFFER_SIZE 256 + +/* System environment values. */ +static const char * const STR_REV = "rev"; + +/* + * Strips a string (usually from shell execution output) by removing all the + * trailing characters in pattern. If pattern is NULL, match by space type + * characters (space, new line, tab, ... etc). + */ +void strip_string(char *s, const char *pattern) +{ + int len; + assert(s); + + len = strlen(s); + while (len-- > 0) { + if (pattern) { + if (!strchr(pattern, s[len])) + break; + } else { + if (!isascii(s[len]) || !isspace(s[len])) + break; + } + s[len] = '\0'; + } +} + +/* + * Saves everything from stdin to given output file. + * Returns 0 on success, otherwise failure. + */ +int save_file_from_stdin(const char *output) +{ + FILE *in = stdin, *out = fopen(output, "wb"); + char buffer[4096]; + size_t sz; + + assert(in); + if (!out) + return -1; + + while (!feof(in)) { + sz = fread(buffer, 1, sizeof(buffer), in); + if (fwrite(buffer, 1, sz, out) != sz) { + fclose(out); + return -1; + } + } + fclose(out); + return 0; +} + +/* + * Returns 1 if a given file (cbfs_entry_name) exists inside a particular CBFS + * section of an image file, otherwise 0. + */ +int cbfs_file_exists(const char *image_file, + const char *section_name, + const char *cbfs_entry_name) +{ + char *cmd; + int r; + + ASPRINTF(&cmd, + "cbfstool '%s' print -r %s 2>/dev/null | grep -q '^%s '", + image_file, section_name, cbfs_entry_name); + r = system(cmd); + free(cmd); + return !r; +} + +/* + * Extracts files from a CBFS on given region (section) of image_file. + * Returns the path to a temporary file on success, otherwise NULL. + */ +const char *cbfs_extract_file(const char *image_file, + const char *cbfs_region, + const char *cbfs_name, + struct tempfile *tempfiles) +{ + const char *output = create_temp_file(tempfiles); + char *command, *result; + + if (!output) + return NULL; + + ASPRINTF(&command, "cbfstool \"%s\" extract -r %s -n \"%s\" " + "-f \"%s\" 2>&1", image_file, cbfs_region, + cbfs_name, output); + + result = host_shell(command); + free(command); + + if (!*result) + output = NULL; + + free(result); + return output; +} + +/* + * Loads the firmware information from an FMAP section in loaded firmware image. + * The section should only contain ASCIIZ string as firmware version. + * Returns 0 if a non-empty version string is stored in *version, otherwise -1. + */ +static int load_firmware_version(struct firmware_image *image, + const char *section_name, + char **version) +{ + struct firmware_section fwid; + int len = 0; + + /* + * section_name is NULL when parsing the RW versions on a non-vboot + * image (and already warned in load_firmware_image). We still need to + * initialize *version with empty string. + */ + if (section_name) { + find_firmware_section(&fwid, image, section_name); + if (fwid.size) + len = fwid.size; + else + WARN("No valid section '%s', missing version info.\n", + section_name); + } + + if (!len) { + *version = strdup(""); + return -1; + } + + /* + * For 'system current' images, the version string may contain + * invalid characters that we do want to strip. + */ + *version = strndup((const char *)fwid.data, len); + strip_string(*version, "\xff"); + return 0; +} + +static int parse_firmware_image(struct firmware_image *image) +{ + int ret = IMAGE_LOAD_SUCCESS; + const char *section_a = NULL, *section_b = NULL; + + VB2_DEBUG("Image size: %d\n", image->size); + assert(image->data); + + image->fmap_header = fmap_find(image->data, image->size); + + if (!image->fmap_header) { + ERROR("Invalid image file (missing FMAP): %s\n", image->file_name); + ret = IMAGE_PARSE_FAILURE; + } + + if (load_firmware_version(image, FMAP_RO_FRID, &image->ro_version)) + ret = IMAGE_PARSE_FAILURE; + + if (firmware_section_exists(image, FMAP_RW_FWID_A)) { + section_a = FMAP_RW_FWID_A; + section_b = FMAP_RW_FWID_B; + } else if (firmware_section_exists(image, FMAP_RW_FWID)) { + section_a = FMAP_RW_FWID; + section_b = FMAP_RW_FWID; + } else if (!ret) { + ERROR("Unsupported VBoot firmware (no RW ID): %s\n", image->file_name); + ret = IMAGE_PARSE_FAILURE; + } + + /* + * Load and initialize both RW A and B sections. + * Note some unit tests will create only RW A. + */ + load_firmware_version(image, section_a, &image->rw_version_a); + load_firmware_version(image, section_b, &image->rw_version_b); + + return ret; +} + +/* + * Loads a firmware image from file. + * If archive is provided and file_name is a relative path, read the file from + * archive. + * Returns IMAGE_LOAD_SUCCESS on success, IMAGE_READ_FAILURE on file I/O + * failure, or IMAGE_PARSE_FAILURE for non-vboot images. + */ +int load_firmware_image(struct firmware_image *image, const char *file_name, + struct archive *archive) +{ + if (!file_name) { + ERROR("No file name given\n"); + return IMAGE_READ_FAILURE; + } + + VB2_DEBUG("Load image file from %s...\n", file_name); + + if (!archive_has_entry(archive, file_name)) { + ERROR("Does not exist: %s\n", file_name); + return IMAGE_READ_FAILURE; + } + if (archive_read_file(archive, file_name, &image->data, &image->size, + NULL) != VB2_SUCCESS) { + ERROR("Failed to load %s\n", file_name); + return IMAGE_READ_FAILURE; + } + + image->file_name = strdup(file_name); + + return parse_firmware_image(image); +} + +/* + * Generates a temporary file for snapshot of firmware image contents. + * + * Returns a file path if success, otherwise NULL. + */ +const char *get_firmware_image_temp_file(const struct firmware_image *image, + struct tempfile *tempfiles) +{ + const char *tmp_path = create_temp_file(tempfiles); + if (!tmp_path) + return NULL; + + if (vb2_write_file(tmp_path, image->data, image->size) != VB2_SUCCESS) { + ERROR("Failed writing %s firmware image (%u bytes) to %s.\n", + image->programmer ? image->programmer : "temp", + image->size, tmp_path); + return NULL; + } + return tmp_path; +} + +/* + * Frees the allocated resource from a firmware image object. + */ +void free_firmware_image(struct firmware_image *image) +{ + /* + * The programmer is not allocated by load_firmware_image and must be + * preserved explicitly. + */ + const char *programmer = image->programmer; + + free(image->data); + free(image->file_name); + free(image->ro_version); + free(image->rw_version_a); + free(image->rw_version_b); + memset(image, 0, sizeof(*image)); + image->programmer = programmer; +} + +/* + * Finds a firmware section by given name in the firmware image. + * If successful, return zero and *section argument contains the address and + * size of the section; otherwise failure. + */ +int find_firmware_section(struct firmware_section *section, + const struct firmware_image *image, + const char *section_name) +{ + FmapAreaHeader *fah = NULL; + uint8_t *ptr; + + section->data = NULL; + section->size = 0; + ptr = fmap_find_by_name( + image->data, image->size, image->fmap_header, + section_name, &fah); + if (!ptr) + return -1; + section->data = (uint8_t *)ptr; + section->size = fah->area_size; + return 0; +} + +/* + * Returns true if the given FMAP section exists in the firmware image. + */ +int firmware_section_exists(const struct firmware_image *image, + const char *section_name) +{ + struct firmware_section section; + find_firmware_section(§ion, image, section_name); + return section.data != NULL; +} + +/* + * Preserves (copies) the given section (by name) from image_from to image_to. + * The offset may be different, and the section data will be directly copied. + * If the section does not exist on either images, return as failure. + * If the source section is larger, contents on destination be truncated. + * If the source section is smaller, the remaining area is not modified. + * Returns 0 if success, non-zero if error. + */ +int preserve_firmware_section(const struct firmware_image *image_from, + struct firmware_image *image_to, + const char *section_name) +{ + struct firmware_section from, to; + + find_firmware_section(&from, image_from, section_name); + find_firmware_section(&to, image_to, section_name); + if (!from.data || !to.data) { + VB2_DEBUG("Cannot find section %.*s: from=%p, to=%p\n", + FMAP_NAMELEN, section_name, from.data, to.data); + return -1; + } + if (from.size > to.size) { + WARN("Section %.*s is truncated after updated.\n", + FMAP_NAMELEN, section_name); + } + /* Use memmove in case if we need to deal with sections that overlap. */ + memmove(to.data, from.data, VB2_MIN(from.size, to.size)); + return 0; +} + +/* + * Finds the GBB (Google Binary Block) header on a given firmware image. + * Returns a pointer to valid GBB header, or NULL on not found. + */ +const struct vb2_gbb_header *find_gbb(const struct firmware_image *image) +{ + struct firmware_section section; + struct vb2_gbb_header *gbb_header; + + find_firmware_section(§ion, image, FMAP_RO_GBB); + gbb_header = (struct vb2_gbb_header *)section.data; + if (!futil_valid_gbb_header(gbb_header, section.size, NULL)) { + ERROR("Cannot find GBB in image: %s.\n", image->file_name); + return NULL; + } + return gbb_header; +} + +/* + * Executes a command on current host and returns stripped command output. + * If the command has failed (exit code is not zero), returns an empty string. + * The caller is responsible for releasing the returned string. + */ +char *host_shell(const char *command) +{ + /* Currently all commands we use do not have large output. */ + char buf[COMMAND_BUFFER_SIZE]; + + int result; + FILE *fp = popen(command, "r"); + + VB2_DEBUG("%s\n", command); + buf[0] = '\0'; + if (!fp) { + VB2_DEBUG("Execution error for %s.\n", command); + return strdup(buf); + } + + if (fgets(buf, sizeof(buf), fp)) + strip_string(buf, NULL); + result = pclose(fp); + if (!WIFEXITED(result) || WEXITSTATUS(result) != 0) { + VB2_DEBUG("Execution failure with exit code %d: %s\n", + WEXITSTATUS(result), command); + /* + * Discard all output if command failed, for example command + * syntax failure may lead to garbage in stdout. + */ + buf[0] = '\0'; + } + return strdup(buf); +} + + +/* An helper function to return "mainfw_act" system property. */ +static int host_get_mainfw_act(void) +{ + char buf[VB_MAX_STRING_PROPERTY]; + + if (!VbGetSystemPropertyString("mainfw_act", buf, sizeof(buf))) + return SLOT_UNKNOWN; + + if (strcmp(buf, FWACT_A) == 0) + return SLOT_A; + else if (strcmp(buf, FWACT_B) == 0) + return SLOT_B; + + return SLOT_UNKNOWN; +} + +/* A helper function to return the "tpm_fwver" system property. */ +static int host_get_tpm_fwver(void) +{ + return VbGetSystemPropertyInt("tpm_fwver"); +} + +/* A helper function to return the "hardware write protection" status. */ +static int host_get_wp_hw(void) +{ + /* wpsw refers to write protection 'switch', not 'software'. */ + return VbGetSystemPropertyInt("wpsw_cur"); +} + +/* A helper function to return "fw_vboot2" system property. */ +static int host_get_fw_vboot2(void) +{ + return VbGetSystemPropertyInt("fw_vboot2"); +} + +/* A help function to get $(mosys platform version). */ +static int host_get_platform_version(void) +{ + char *result = host_shell("mosys platform version"); + long rev = -1; + + /* Result should be 'revN' */ + if (strncmp(result, STR_REV, strlen(STR_REV)) == 0) + rev = strtol(result + strlen(STR_REV), NULL, 0); + + /* we should never have negative or extremely large versions, + * but clamp just to be sure + */ + if (rev < 0) + rev = 0; + if (rev > INT_MAX) + rev = INT_MAX; + + VB2_DEBUG("Raw data = [%s], parsed version is %ld\n", result, rev); + + free(result); + return rev; +} + +/* + * Helper function to detect type of Servo board attached to host. + * Returns a string as programmer parameter on success, otherwise NULL. + */ +char *host_detect_servo(int *need_prepare_ptr) +{ + const char *servo_port = getenv(ENV_SERVOD_PORT); + const char *servo_name = getenv(ENV_SERVOD_NAME); + char *servo_type = host_shell("dut-control -o servo_type 2>/dev/null"); + const char *programmer = NULL; + char *ret = NULL; + int need_prepare = 0; /* To prepare by dut-control cpu_fw_spi:on */ + char *servo_serial = NULL; + + /* Get serial name if servo port is provided. */ + if ((servo_port && *servo_port) || (servo_name && *servo_name)) { + const char *cmd = "dut-control -o serialname 2>/dev/null"; + + VB2_DEBUG("Select servod using port: %s or name: %s\n", + servo_port, servo_name); + if (strstr(servo_type, "with_servo_micro")) + cmd = ("dut-control -o servo_micro_serialname" + " 2>/dev/null"); + else if (strstr(servo_type, "with_ccd")) + cmd = "dut-control -o ccd_serialname 2>/dev/null"; + + servo_serial = host_shell(cmd); + VB2_DEBUG("Servo SN=%s (serial cmd: %s)\n", servo_serial, cmd); + } + + if (!*servo_type) { + ERROR("Failed to get servo type. Check servod.\n"); + } else if (servo_serial && !*servo_serial) { + ERROR("Failed to get serial at servo port %s.\n", servo_port); + } else if (strstr(servo_type, "servo_micro")) { + VB2_DEBUG("Selected Servo Micro.\n"); + programmer = "raiden_debug_spi"; + need_prepare = 1; + } else if (strstr(servo_type, "ccd_cr50") || + strstr(servo_type, "ccd_gsc")) { + VB2_DEBUG("Selected CCD.\n"); + programmer = "raiden_debug_spi:target=AP"; + } else { + VB2_DEBUG("Selected Servo V2.\n"); + programmer = "ft2232_spi:type=google-servo-v2"; + need_prepare = 1; + } + + if (programmer) { + if (!servo_serial) { + ret = strdup(programmer); + } else { + const char prefix = strchr(programmer, ':') ? ',' : ':'; + ASPRINTF(&ret, "%s%cserial=%s", programmer, prefix, + servo_serial); + } + VB2_DEBUG("Servo programmer: %s\n", ret); + } + + free(servo_type); + free(servo_serial); + *need_prepare_ptr = need_prepare; + + return ret; +} + +/* + * Loads the active system firmware image (usually from SPI flash chip). + * Returns 0 if success, non-zero if error. + */ +int load_system_firmware(struct firmware_image *image, + struct tempfile *tempfiles, int verbosity) +{ + int r; + + r = flashrom_read_image(image, NULL, (verbosity + 1)); + if (!r) + r = parse_firmware_image(image); + return r; +} + +/* + * Writes a section from given firmware image to system firmware. + * If section_name is NULL, write whole image. + * Returns 0 if success, non-zero if error. + */ +int write_system_firmware(const struct firmware_image *image, + const struct firmware_image *diff_image, + const char *section_name, + struct tempfile *tempfiles, + int verbosity) +{ + return flashrom_write_image(image, section_name, diff_image, (verbosity + 1)); +} + +/* Helper function to return host software write protection status. */ +static int host_get_wp_sw(void) +{ + return flashrom_get_wp(PROG_HOST); +} + +/* Helper function to configure all properties. */ +void init_system_properties(struct system_property *props, int num) +{ + memset(props, 0, num * sizeof(*props)); + assert(num >= SYS_PROP_MAX); + props[SYS_PROP_MAINFW_ACT].getter = host_get_mainfw_act; + props[SYS_PROP_TPM_FWVER].getter = host_get_tpm_fwver; + props[SYS_PROP_FW_VBOOT2].getter = host_get_fw_vboot2; + props[SYS_PROP_PLATFORM_VER].getter = host_get_platform_version; + props[SYS_PROP_WP_HW].getter = host_get_wp_hw; + props[SYS_PROP_WP_SW].getter = host_get_wp_sw; +} + +/* + * Helper function to create a new temporary file. + * All files created will be removed remove_all_temp_files(). + * Returns the path of new file, or NULL on failure. + */ +const char *create_temp_file(struct tempfile *head) +{ + struct tempfile *new_temp; + char new_path[] = P_tmpdir "/fwupdater.XXXXXX"; + int fd; + mode_t umask_save; + + /* Set the umask before mkstemp for security considerations. */ + umask_save = umask(077); + fd = mkstemp(new_path); + umask(umask_save); + if (fd < 0) { + ERROR("Failed to create new temp file in %s\n", new_path); + return NULL; + } + close(fd); + new_temp = (struct tempfile *)malloc(sizeof(*new_temp)); + if (new_temp) + new_temp->filepath = strdup(new_path); + if (!new_temp || !new_temp->filepath) { + remove(new_path); + free(new_temp); + ERROR("Failed to allocate buffer for new temp file.\n"); + return NULL; + } + VB2_DEBUG("Created new temporary file: %s.\n", new_path); + new_temp->next = NULL; + while (head->next) + head = head->next; + head->next = new_temp; + return new_temp->filepath; +} + +/* + * Helper function to remove all files created by create_temp_file(). + * This is intended to be called only once at end of program execution. + */ +void remove_all_temp_files(struct tempfile *head) +{ + /* head itself is dummy and should not be removed. */ + assert(!head->filepath); + struct tempfile *next = head->next; + head->next = NULL; + while (next) { + head = next; + next = head->next; + assert(head->filepath); + VB2_DEBUG("Remove temporary file: %s.\n", head->filepath); + remove(head->filepath); + free(head->filepath); + free(head); + } +} + +/* + * Returns rootkey hash of firmware image, or NULL on failure. + */ +const char *get_firmware_rootkey_hash(const struct firmware_image *image) +{ + const struct vb2_gbb_header *gbb = NULL; + const struct vb2_packed_key *rootkey = NULL; + + assert(image->data); + + gbb = find_gbb(image); + if (!gbb) { + WARN("No GBB found in image.\n"); + return NULL; + } + + rootkey = get_rootkey(gbb); + if (!rootkey) { + WARN("No rootkey found in image.\n"); + return NULL; + } + + return packed_key_sha1_string(rootkey); +} diff --git a/futility/updater_utils.h b/futility/updater_utils.h new file mode 100644 index 0000000..2ab6f07 --- /dev/null +++ b/futility/updater_utils.h @@ -0,0 +1,241 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Utilities for firmware updater. + */ + +#ifndef VBOOT_REFERENCE_FUTILITY_UPDATER_UTILS_H_ +#define VBOOT_REFERENCE_FUTILITY_UPDATER_UTILS_H_ + +#include +#include "fmap.h" + +#define ASPRINTF(strp, ...) do { if (asprintf(strp, __VA_ARGS__) >= 0) break; \ + ERROR("Failed to allocate memory, abort.\n"); exit(1); } while (0) + +/* Structure(s) declared in updater_archive */ +struct archive; + +/* flashrom programmers. */ +static const char * const PROG_HOST = "host", + * const PROG_EC = "ec", + * const PROG_PD = "ec:type=pd"; + +/* Firmware slots */ +static const char * const FWACT_A = "A", + * const FWACT_B = "B"; + +enum active_slot { + SLOT_UNKNOWN = -1, + SLOT_A = 0, + SLOT_B, +}; + +/* Utilities for managing temporary files. */ +struct tempfile { + char *filepath; + struct tempfile *next; +}; + +/* + * Create a new temporary file. + * + * The parameter head refers to a linked list dummy head. + * Returns the path of new file, or NULL on failure. + */ +const char *create_temp_file(struct tempfile *head); + +/* + * Remove all files created by create_temp_file(). + * + * The parameter head refers to the dummy head of linked list. + * This is intended to be called only once at end of program execution. + */ +void remove_all_temp_files(struct tempfile *head); + +/* Utilities for firmware images and (FMAP) sections */ +struct firmware_image { + const char *programmer; + uint32_t size; + uint8_t *data; + char *file_name; + char *ro_version, *rw_version_a, *rw_version_b; + FmapHeader *fmap_header; +}; + +enum { + IMAGE_LOAD_SUCCESS = 0, + IMAGE_READ_FAILURE = -1, + IMAGE_PARSE_FAILURE = -2, +}; + +/* + * Loads a firmware image from file. + * If archive is provided and file_name is a relative path, read the file from + * archive. + * Returns IMAGE_LOAD_SUCCESS on success, IMAGE_READ_FAILURE on file I/O + * failure, or IMAGE_PARSE_FAILURE for non-vboot images. + */ +int load_firmware_image(struct firmware_image *image, const char *file_name, + struct archive *archive); + +/* + * Loads the active system firmware image (usually from SPI flash chip). + * Returns 0 if success, non-zero if error. + */ +int load_system_firmware(struct firmware_image *image, + struct tempfile *tempfiles, int verbosity); + +/* Frees the allocated resource from a firmware image object. */ +void free_firmware_image(struct firmware_image *image); + +/* + * Generates a temporary file for snapshot of firmware image contents. + * + * Returns a file path if success, otherwise NULL. + */ +const char *get_firmware_image_temp_file(const struct firmware_image *image, + struct tempfile *tempfiles); + +/* + * Writes a section from given firmware image to system firmware. + * If section_name is NULL, write whole image. + * Returns 0 if success, non-zero if error. + */ +int write_system_firmware(const struct firmware_image *image, + const struct firmware_image *diff_image, + const char *section_name, + struct tempfile *tempfiles, + int verbosity); + +struct firmware_section { + uint8_t *data; + size_t size; +}; + +/* + * Returns true if the given FMAP section exists in the firmware image. + */ +int firmware_section_exists(const struct firmware_image *image, + const char *section_name); + +/* + * Finds a firmware section by given name in the firmware image. + * If successful, return zero and *section argument contains the address and + * size of the section; otherwise failure. + */ +int find_firmware_section(struct firmware_section *section, + const struct firmware_image *image, + const char *section_name); + +/* + * Preserves (copies) the given section (by name) from image_from to image_to. + * The offset may be different, and the section data will be directly copied. + * If the section does not exist on either images, return as failure. + * If the source section is larger, contents on destination be truncated. + * If the source section is smaller, the remaining area is not modified. + * Returns 0 if success, non-zero if error. + */ +int preserve_firmware_section(const struct firmware_image *image_from, + struct firmware_image *image_to, + const char *section_name); + +/* + * Finds the GBB (Google Binary Block) header on a given firmware image. + * Returns a pointer to valid GBB header, or NULL on not found. + */ +struct vb2_gbb_header; +const struct vb2_gbb_header *find_gbb(const struct firmware_image *image); + +/* + * Strips a string (usually from shell execution output) by removing all the + * trailing characters in pattern. If pattern is NULL, match by space type + * characters (space, new line, tab, ... etc). + */ +void strip_string(char *s, const char *pattern); + +/* + * Saves everything from stdin to given output file. + * Returns 0 on success, otherwise failure. + */ +int save_file_from_stdin(const char *output); + +/* + * Executes a command on current host and returns stripped command output. + * If the command has failed (exit code is not zero), returns an empty string. + * The caller is responsible for releasing the returned string. + */ +char *host_shell(const char *command); + +enum wp_state { + WP_ERROR = -1, + WP_DISABLED = 0, + WP_ENABLED, +}; + +/* Helper function to return write protection status via given programmer. */ +enum wp_state flashrom_get_wp(const char *programmer); + +/* The environment variable name for setting servod port. */ +#define ENV_SERVOD_PORT "SERVOD_PORT" + +/* The environment variable name for setting servod name. */ +#define ENV_SERVOD_NAME "SERVOD_NAME" + +/* + * Helper function to detect type of Servo board attached to host. + * Returns a string as programmer parameter on success, otherwise NULL. + */ +char *host_detect_servo(int *need_prepare_ptr); + +/* + * Returns 1 if a given file (cbfs_entry_name) exists inside a particular CBFS + * section of an image file, otherwise 0. + */ +int cbfs_file_exists(const char *image_file, + const char *section_name, + const char *cbfs_entry_name); + +/* + * Extracts files from a CBFS on given region (section) of image_file. + * Returns the path to a temporary file on success, otherwise NULL. + */ +const char *cbfs_extract_file(const char *image_file, + const char *cbfs_region, + const char *cbfs_name, + struct tempfile *tempfiles); + +/* Utilities for accessing system properties */ +struct system_property { + int (*getter)(void); + int value; + int initialized; +}; + +enum system_property_type { + SYS_PROP_MAINFW_ACT, + SYS_PROP_TPM_FWVER, + SYS_PROP_FW_VBOOT2, + SYS_PROP_PLATFORM_VER, + SYS_PROP_WP_HW, + SYS_PROP_WP_SW, + SYS_PROP_MAX +}; + +/* Helper function to initialize system properties. */ +void init_system_properties(struct system_property *props, int num); + +/* + * Returns rootkey hash of firmware image, or NULL on failure. + */ +const char *get_firmware_rootkey_hash(const struct firmware_image *image); + +int flashrom_read_image(struct firmware_image *image, const char *region, + int verbosity); +int flashrom_write_image(const struct firmware_image *image, + const char *region, + const struct firmware_image *diff_image, + int verbosity); + +#endif /* VBOOT_REFERENCE_FUTILITY_UPDATER_UTILS_H_ */ diff --git a/futility/vb1_helper.c b/futility/vb1_helper.c new file mode 100644 index 0000000..2a0e87a --- /dev/null +++ b/futility/vb1_helper.c @@ -0,0 +1,820 @@ +/* Copyright 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include /* For PRIu64 */ +#include +#include +#include +#include + +#include "2api.h" +#include "2common.h" +#include "2rsa.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "file_type.h" +#include "futility.h" +#include "host_common.h" +#include "kernel_blob.h" +#include "util_misc.h" +#include "vb1_helper.h" + +/****************************************************************************/ +/* Here are globals containing all the bits & pieces I'm working on. + * + * kernel vblock = keyblock + kernel preamble + padding to 64K (or whatever) + * kernel blob = 32-bit kernel + config file + params + bootloader stub + + * vmlinuz_header + * kernel partition = kernel vblock + kernel blob + * + * The vb2_kernel_preamble.preamble_size includes the padding. + */ + +/* The keyblock, preamble, and kernel blob are kept in separate places. */ +static struct vb2_keyblock *g_keyblock; +static struct vb2_kernel_preamble *g_preamble; +static uint8_t *g_kernel_blob_data; +static uint32_t g_kernel_blob_size; + +/* These refer to individual parts within the kernel blob. */ +static uint8_t *g_kernel_data; +static uint32_t g_kernel_size; +static uint8_t *g_config_data; +static uint32_t g_config_size; +static uint8_t *g_param_data; +static uint32_t g_param_size; +static uint8_t *g_bootloader_data; +static uint32_t g_bootloader_size; +static uint8_t *g_vmlinuz_header_data; +static uint32_t g_vmlinuz_header_size; + +static uint64_t g_ondisk_bootloader_addr; +static uint64_t g_ondisk_vmlinuz_header_addr; + + +/* + * Read the kernel command line from a file. Get rid of \n characters along + * the way and verify that the line fits into a 4K buffer. + * + * Return the buffer contaning the line on success (and set the line length + * using the passed in parameter), or NULL in case something goes wrong. + */ +uint8_t *ReadConfigFile(const char *config_file, uint32_t *config_size) +{ + uint8_t *config_buf; + int i; + + if (VB2_SUCCESS != vb2_read_file(config_file, &config_buf, config_size)) + return NULL; + VB2_DEBUG(" config file size=%#x\n", *config_size); + if (CROS_CONFIG_SIZE <= *config_size) { /* room for trailing '\0' */ + fprintf(stderr, "Config file %s is too large (>= %d bytes)\n", + config_file, CROS_CONFIG_SIZE); + free(config_buf); + return NULL; + } + + /* Replace newlines with spaces */ + for (i = 0; i < *config_size; i++) + if ('\n' == config_buf[i]) + config_buf[i] = ' '; + + return config_buf; +} + +/****************************************************************************/ + +/* Return the smallest integral multiple of [alignment] that is equal + * to or greater than [val]. Used to determine the number of + * pages/sectors/blocks/whatever needed to contain [val] + * items/bytes/etc. */ +static uint32_t roundup(uint32_t val, uint32_t alignment) +{ + uint32_t rem = val % alignment; + if (rem) + return val + (alignment - rem); + return val; +} + +/* Match regexp /\b--\b/ to delimit the start of the kernel commandline. If we + * don't find one, we'll use the whole thing. */ +static unsigned int find_cmdline_start(uint8_t *buf_ptr, unsigned int max_len) +{ + char *input = (char *)buf_ptr; + int start = 0; + int i; + for (i = 0; i < max_len - 1 && input[i]; i++) { + if ('-' == input[i] && '-' == input[i + 1]) { + if ((i == 0 || ' ' == input[i - 1]) && + (i + 2 >= max_len || ' ' == input[i + 2])) { + /* found "--" with nothing before or after it */ + start = i + 2; /* hope for a trailing '\0' */ + break; + } + } + } + while (' ' == input[start]) /* skip leading spaces */ + start++; + + return start; +} + +/* Offset of kernel command line string from the start of the kernel blob */ +uint64_t kernel_cmd_line_offset(const struct vb2_kernel_preamble *preamble) +{ + return preamble->bootloader_address - preamble->body_load_address - + CROS_CONFIG_SIZE - CROS_PARAMS_SIZE; +} + +/* Returns the size of the 32-bit kernel, or negative on error. */ +static int KernelSize(uint8_t *kernel_buf, + uint32_t kernel_size, + enum arch_t arch) +{ + uint32_t kernel32_start = 0; + struct linux_kernel_params *lh; + + /* Except for x86, the kernel is the kernel. */ + if (arch != ARCH_X86) + return kernel_size; + + /* The first part of the x86 vmlinuz is a header, followed by + * a real-mode boot stub. We only want the 32-bit part. */ + lh = (struct linux_kernel_params *)kernel_buf; + if (lh->header != VMLINUZ_HEADER_SIG) { + VB2_DEBUG("Not a linux kernel image\n"); + return kernel_size; + } + kernel32_start = (lh->setup_sects + 1) << 9; + if (kernel32_start >= kernel_size) { + fprintf(stderr, "Malformed kernel\n"); + return -1; + } + return kernel_size - kernel32_start; +} + +/* This extracts g_kernel_* and g_param_* from a standard vmlinuz file. + * It returns nonzero on error. */ +static int PickApartVmlinuz(uint8_t *kernel_buf, + uint32_t kernel_size, + enum arch_t arch, + uint64_t kernel_body_load_address) +{ + uint32_t kernel32_start = 0; + uint32_t kernel32_size = kernel_size; + struct linux_kernel_params *lh, *params; + + /* Except for x86, the kernel is the kernel. */ + switch (arch) { + case ARCH_X86: + /* The first part of the x86 vmlinuz is a header, followed by + * a real-mode boot stub. We only want the 32-bit part. */ + lh = (struct linux_kernel_params *)kernel_buf; + if (lh->header != VMLINUZ_HEADER_SIG) { + VB2_DEBUG("Not a linux kernel image\n"); + break; + } + kernel32_start = (lh->setup_sects + 1) << 9; + if (kernel32_start >= kernel_size) { + fprintf(stderr, "Malformed kernel\n"); + return -1; + } + kernel32_size = kernel_size - kernel32_start; + + VB2_DEBUG(" kernel16_start=%#x\n", 0); + VB2_DEBUG(" kernel16_size=%#x\n", kernel32_start); + + /* Copy the original zeropage data from kernel_buf into + * g_param_data, then tweak a few fields for our purposes */ + params = (struct linux_kernel_params *)(g_param_data); + memcpy(&(params->setup_sects), &(lh->setup_sects), + offsetof(struct linux_kernel_params, e820_entries) + - offsetof(struct linux_kernel_params, setup_sects)); + params->boot_flag = 0; + params->ramdisk_image = 0; /* we don't support initrd */ + params->ramdisk_size = 0; + params->type_of_loader = 0xff; + /* We need to point to the kernel commandline arg. On disk, it + * will come right after the 32-bit part of the kernel. */ + params->cmd_line_ptr = kernel_body_load_address + + roundup(kernel32_size, CROS_ALIGN) + + find_cmdline_start(g_config_data, g_config_size); + VB2_DEBUG(" cmdline_addr=%#x\n", params->cmd_line_ptr); + VB2_DEBUG(" version=%#x\n", params->version); + VB2_DEBUG(" kernel_alignment=%#x\n", params->kernel_alignment); + VB2_DEBUG(" relocatable_kernel=%#x\n", + params->relocatable_kernel); + /* Add a fake e820 memory map with 2 entries. */ + params->n_e820_entry = 2; + params->e820_entries[0].start_addr = 0x00000000; + params->e820_entries[0].segment_size = 0x00001000; + params->e820_entries[0].segment_type = E820_TYPE_RAM; + params->e820_entries[1].start_addr = 0xfffff000; + params->e820_entries[1].segment_size = 0x00001000; + params->e820_entries[1].segment_type = E820_TYPE_RESERVED; + break; + default: + break; + } + + VB2_DEBUG(" kernel32_start=%#x\n", kernel32_start); + VB2_DEBUG(" kernel32_size=%#x\n", kernel32_size); + + /* Keep just the 32-bit kernel. */ + if (kernel32_size) { + g_kernel_size = kernel32_size; + memcpy(g_kernel_data, kernel_buf + kernel32_start, + g_kernel_size); + } + + /* done */ + return 0; +} + +/* Split a kernel blob into separate g_kernel, g_param, g_config, + * g_bootloader, and g_vmlinuz_header parts. */ +static void UnpackKernelBlob(uint8_t *kernel_blob_data) +{ + uint32_t now; + uint32_t vmlinuz_header_size = 0; + uint64_t vmlinuz_header_address = 0; + + /* We have to work backwards from the end, because the preamble + only describes the bootloader and vmlinuz stubs. */ + + /* Vmlinuz Header is at the end */ + vb2_kernel_get_vmlinuz_header(g_preamble, + &vmlinuz_header_address, + &vmlinuz_header_size); + if (vmlinuz_header_size) { + now = vmlinuz_header_address - g_preamble->body_load_address; + g_vmlinuz_header_size = vmlinuz_header_size; + g_vmlinuz_header_data = kernel_blob_data + now; + + VB2_DEBUG("vmlinuz_header_size = %#x\n", + g_vmlinuz_header_size); + VB2_DEBUG("vmlinuz_header_ofs = %#x\n", now); + } + + /* Where does the bootloader stub begin? */ + now = g_preamble->bootloader_address - g_preamble->body_load_address; + + /* Bootloader is at the end */ + g_bootloader_size = g_preamble->bootloader_size; + g_bootloader_data = kernel_blob_data + now; + /* TODO: What to do if this is beyond the end of the blob? */ + + VB2_DEBUG("bootloader_size = %#x\n", g_bootloader_size); + VB2_DEBUG("bootloader_ofs = %#x\n", now); + + /* Before that is the params */ + now -= CROS_PARAMS_SIZE; + g_param_size = CROS_PARAMS_SIZE; + g_param_data = kernel_blob_data + now; + VB2_DEBUG("param_ofs = %#x\n", now); + + /* Before that is the config */ + now -= CROS_CONFIG_SIZE; + g_config_size = CROS_CONFIG_SIZE; + g_config_data = kernel_blob_data + now; + VB2_DEBUG("config_ofs = %#x\n", now); + + /* The kernel starts at offset 0 and extends up to the config */ + g_kernel_data = kernel_blob_data; + g_kernel_size = now; + VB2_DEBUG("kernel_size = %#x\n", g_kernel_size); +} + + +/* Replaces the config section of the specified kernel blob. + * Return nonzero on error. */ +int UpdateKernelBlobConfig(uint8_t *kblob_data, uint32_t kblob_size, + uint8_t *config_data, uint32_t config_size) +{ + /* We should have already examined this blob. If not, we could do it + * again, but it's more likely due to an error. */ + if (kblob_data != g_kernel_blob_data || + kblob_size != g_kernel_blob_size) { + fprintf(stderr, "Trying to update some other blob\n"); + return -1; + } + + memset(g_config_data, 0, g_config_size); + memcpy(g_config_data, config_data, config_size); + + return 0; +} + +/* Split a kernel partition into separate vblock and blob parts. */ +uint8_t *unpack_kernel_partition(uint8_t *kpart_data, + uint32_t kpart_size, + uint32_t padding, + struct vb2_keyblock **keyblock_ptr, + struct vb2_kernel_preamble **preamble_ptr, + uint32_t *blob_size_ptr) +{ + struct vb2_kernel_preamble *preamble; + uint32_t vmlinuz_header_size = 0; + uint64_t vmlinuz_header_address = 0; + uint32_t now = 0; + + /* Validity-check the keyblock */ + struct vb2_keyblock *keyblock = (struct vb2_keyblock *)kpart_data; + VB2_DEBUG("Keyblock is %#x bytes\n", keyblock->keyblock_size); + now += keyblock->keyblock_size; + if (now > kpart_size) { + fprintf(stderr, + "keyblock_size advances past the end of the blob\n"); + return NULL; + } + if (now > padding) { + fprintf(stderr, + "keyblock_size advances past %u byte padding\n", + padding); + return NULL; + } + + /* LGTM */ + g_keyblock = keyblock; + + /* And the preamble */ + preamble = (struct vb2_kernel_preamble *)(kpart_data + now); + VB2_DEBUG("Preamble is %#x bytes\n", preamble->preamble_size); + now += preamble->preamble_size; + if (now > kpart_size) { + fprintf(stderr, + "preamble_size advances past the end of the blob\n"); + return NULL; + } + if (now > padding) { + fprintf(stderr, "preamble_size advances past %u" + " byte padding\n", padding); + return NULL; + } + /* LGTM */ + VB2_DEBUG(" kernel_version = %d\n", preamble->kernel_version); + VB2_DEBUG(" bootloader_address = 0x%" PRIx64 "\n", + preamble->bootloader_address); + VB2_DEBUG(" bootloader_size = %#x\n", preamble->bootloader_size); + VB2_DEBUG(" kern_blob_size = %#x\n", + preamble->body_signature.data_size); + + uint32_t flags = vb2_kernel_get_flags(preamble); + VB2_DEBUG(" flags = %#x\n", flags); + + g_preamble = preamble; + g_ondisk_bootloader_addr = g_preamble->bootloader_address; + + vb2_kernel_get_vmlinuz_header(preamble, + &vmlinuz_header_address, + &vmlinuz_header_size); + if (vmlinuz_header_size) { + VB2_DEBUG(" vmlinuz_header_address = 0x%" PRIx64 "\n", + vmlinuz_header_address); + VB2_DEBUG(" vmlinuz_header_size = %#x\n", vmlinuz_header_size); + g_ondisk_vmlinuz_header_addr = vmlinuz_header_address; + } + + VB2_DEBUG("kernel blob is at offset %#x\n", now); + g_kernel_blob_data = kpart_data + now; + g_kernel_blob_size = preamble->body_signature.data_size; + + /* Validity check */ + if (kpart_size < now + g_kernel_blob_size) { + fprintf(stderr, + "kernel body size %u exceeds partition end\n", + g_kernel_blob_size); + return NULL; + } + + /* Update the blob pointers */ + UnpackKernelBlob(g_kernel_blob_data); + + if (keyblock_ptr) + *keyblock_ptr = keyblock; + if (preamble_ptr) + *preamble_ptr = preamble; + if (blob_size_ptr) + *blob_size_ptr = g_kernel_blob_size; + + return g_kernel_blob_data; +} + +uint8_t *SignKernelBlob(uint8_t *kernel_blob, + uint32_t kernel_size, + uint32_t padding, + int version, + uint64_t kernel_body_load_address, + struct vb2_keyblock *keyblock, + struct vb2_private_key *signpriv_key, + uint32_t flags, + uint32_t *vblock_size_ptr) +{ + /* Make sure the preamble fills up the rest of the required padding */ + uint32_t min_size = padding > keyblock->keyblock_size + ? padding - keyblock->keyblock_size : 0; + + /* Sign the kernel data */ + struct vb2_signature *body_sig = vb2_calculate_signature(kernel_blob, + kernel_size, + signpriv_key); + if (!body_sig) { + fprintf(stderr, "Error calculating body signature\n"); + return NULL; + } + + /* Create preamble */ + struct vb2_kernel_preamble *preamble = + vb2_create_kernel_preamble(version, + kernel_body_load_address, + g_ondisk_bootloader_addr, + g_bootloader_size, + body_sig, + g_ondisk_vmlinuz_header_addr, + g_vmlinuz_header_size, + flags, + min_size, + signpriv_key); + if (!preamble) { + fprintf(stderr, "Error creating preamble.\n"); + return 0; + } + + uint32_t outsize = keyblock->keyblock_size + preamble->preamble_size; + void *outbuf = calloc(outsize, 1); + memcpy(outbuf, keyblock, keyblock->keyblock_size); + memcpy(outbuf + keyblock->keyblock_size, + preamble, preamble->preamble_size); + + if (vblock_size_ptr) + *vblock_size_ptr = outsize; + return outbuf; +} + +/* Returns zero on success */ +int WriteSomeParts(const char *outfile, + void *part1_data, uint32_t part1_size, + void *part2_data, uint32_t part2_size) +{ + FILE *f; + + /* Write the output file */ + VB2_DEBUG("writing %s with %#x, %#x\n", + outfile, part1_size, part2_size); + + f = fopen(outfile, "wb"); + if (!f) { + fprintf(stderr, "Can't open output file %s: %s\n", + outfile, strerror(errno)); + return -1; + } + + if (part1_data && part1_size) { + if (1 != fwrite(part1_data, part1_size, 1, f)) { + fprintf(stderr, "Can't write output file %s: %s\n", + outfile, strerror(errno)); + fclose(f); + unlink(outfile); + return -1; + } + } + + if (part2_data && part2_size) { + if (1 != fwrite(part2_data, part2_size, 1, f)) { + fprintf(stderr, "Can't write output file %s: %s\n", + outfile, strerror(errno)); + fclose(f); + unlink(outfile); + return -1; + } + } + + fclose(f); + + /* Success */ + return 0; +} + +/* Returns 0 on success */ +int VerifyKernelBlob(uint8_t *kernel_blob, + uint32_t kernel_size, + struct vb2_packed_key *signpub_key, + const char *keyblock_outfile, + uint32_t min_version) +{ + int rv = -1; + uint32_t vmlinuz_header_size = 0; + uint64_t vmlinuz_header_address = 0; + + uint8_t workbuf[VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + struct vb2_workbuf wb; + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + if (signpub_key) { + struct vb2_public_key pubkey; + if (VB2_SUCCESS != vb2_unpack_key(&pubkey, signpub_key)) { + fprintf(stderr, "Error unpacking signing key.\n"); + goto done; + } + if (VB2_SUCCESS != + vb2_verify_keyblock(g_keyblock, g_keyblock->keyblock_size, + &pubkey, &wb)) { + fprintf(stderr, "Error verifying keyblock.\n"); + goto done; + } + } else if (VB2_SUCCESS != + vb2_verify_keyblock_hash(g_keyblock, + g_keyblock->keyblock_size, + &wb)) { + fprintf(stderr, "Error verifying keyblock.\n"); + goto done; + } + + printf("Keyblock:\n"); + struct vb2_packed_key *data_key = &g_keyblock->data_key; + printf(" Signature: %s\n", + signpub_key ? "valid" : "ignored"); + printf(" Size: %#x\n", g_keyblock->keyblock_size); + printf(" Flags: %u ", g_keyblock->keyblock_flags); + if (g_keyblock->keyblock_flags & VB2_KEYBLOCK_FLAG_DEVELOPER_0) + printf(" !DEV"); + if (g_keyblock->keyblock_flags & VB2_KEYBLOCK_FLAG_DEVELOPER_1) + printf(" DEV"); + if (g_keyblock->keyblock_flags & VB2_KEYBLOCK_FLAG_RECOVERY_0) + printf(" !REC"); + if (g_keyblock->keyblock_flags & VB2_KEYBLOCK_FLAG_RECOVERY_1) + printf(" REC"); + if (g_keyblock->keyblock_flags & VB2_KEYBLOCK_FLAG_MINIOS_0) + printf(" !MINIOS"); + if (g_keyblock->keyblock_flags & VB2_KEYBLOCK_FLAG_MINIOS_1) + printf(" MINIOS"); + printf("\n"); + printf(" Data key algorithm: %u %s\n", data_key->algorithm, + vb2_get_crypto_algorithm_name(data_key->algorithm)); + printf(" Data key version: %u\n", data_key->key_version); + printf(" Data key sha1sum: %s\n", + packed_key_sha1_string(data_key)); + + if (keyblock_outfile) { + FILE *f = NULL; + f = fopen(keyblock_outfile, "wb"); + if (!f) { + fprintf(stderr, "Can't open keyblock file %s: %s\n", + keyblock_outfile, strerror(errno)); + goto done; + } + if (1 != fwrite(g_keyblock, g_keyblock->keyblock_size, 1, f)) { + fprintf(stderr, "Can't write keyblock file %s: %s\n", + keyblock_outfile, strerror(errno)); + fclose(f); + goto done; + } + fclose(f); + } + + if (data_key->key_version < (min_version >> 16)) { + fprintf(stderr, "Data key version %u < minimum %u.\n", + data_key->key_version, (min_version >> 16)); + goto done; + } + + struct vb2_public_key pubkey; + if (VB2_SUCCESS != vb2_unpack_key(&pubkey, data_key)) { + fprintf(stderr, "Error parsing data key.\n"); + goto done; + } + + /* Verify preamble */ + if (VB2_SUCCESS != vb2_verify_kernel_preamble( + (struct vb2_kernel_preamble *)g_preamble, + g_preamble->preamble_size, &pubkey, &wb)) { + fprintf(stderr, "Error verifying preamble.\n"); + goto done; + } + + printf("Preamble:\n"); + printf(" Size: %#x\n", g_preamble->preamble_size); + printf(" Header version: %u.%u\n", + g_preamble->header_version_major, + g_preamble->header_version_minor); + printf(" Kernel version: %u\n", g_preamble->kernel_version); + printf(" Body load address: 0x%" PRIx64 "\n", + g_preamble->body_load_address); + printf(" Body size: %#x\n", + g_preamble->body_signature.data_size); + printf(" Bootloader address: 0x%" PRIx64 "\n", + g_preamble->bootloader_address); + printf(" Bootloader size: %#x\n", g_preamble->bootloader_size); + + vb2_kernel_get_vmlinuz_header(g_preamble, + &vmlinuz_header_address, + &vmlinuz_header_size); + if (vmlinuz_header_size) { + printf(" Vmlinuz header address: 0x%" PRIx64 "\n", + vmlinuz_header_address); + printf(" Vmlinuz header size: %#x\n", + (uint32_t)vmlinuz_header_size); + } + + printf(" Flags : %#x\n", + vb2_kernel_get_flags(g_preamble)); + + if (g_preamble->kernel_version < (min_version & 0xFFFF)) { + fprintf(stderr, + "Kernel version %u is lower than minimum %u.\n", + g_preamble->kernel_version, (min_version & 0xFFFF)); + goto done; + } + + /* Verify body */ + if (VB2_SUCCESS != + vb2_verify_data(kernel_blob, kernel_size, + &g_preamble->body_signature, + &pubkey, &wb)) { + fprintf(stderr, "Error verifying kernel body.\n"); + goto done; + } + printf("Body verification succeeded.\n"); + + printf("Config:\n%s\n", + kernel_blob + kernel_cmd_line_offset(g_preamble)); + + rv = 0; +done: + return rv; +} + + +uint8_t *CreateKernelBlob(uint8_t *vmlinuz_buf, uint32_t vmlinuz_size, + enum arch_t arch, uint64_t kernel_body_load_address, + uint8_t *config_data, uint32_t config_size, + uint8_t *bootloader_data, uint32_t bootloader_size, + uint32_t *blob_size_ptr) +{ + uint32_t now = 0; + int tmp; + + /* We have all the parts. How much room do we need? */ + tmp = KernelSize(vmlinuz_buf, vmlinuz_size, arch); + if (tmp < 0) + return NULL; + g_kernel_size = tmp; + g_config_size = CROS_CONFIG_SIZE; + g_param_size = CROS_PARAMS_SIZE; + g_bootloader_size = roundup(bootloader_size, CROS_ALIGN); + g_vmlinuz_header_size = vmlinuz_size-g_kernel_size; + g_kernel_blob_size = + roundup(g_kernel_size, CROS_ALIGN) + + g_config_size + + g_param_size + + g_bootloader_size + + g_vmlinuz_header_size; + + /* + * Round the whole blob up so it's a multiple of sectors, even on 4k + * devices. + */ + g_kernel_blob_size = roundup(g_kernel_blob_size, CROS_ALIGN); + VB2_DEBUG("g_kernel_blob_size %#x\n", g_kernel_blob_size); + + /* Allocate space for the blob. */ + g_kernel_blob_data = malloc(g_kernel_blob_size); + memset(g_kernel_blob_data, 0, g_kernel_blob_size); + + /* Assign the sub-pointers */ + g_kernel_data = g_kernel_blob_data + now; + VB2_DEBUG("g_kernel_size %#x ofs %#x\n", + g_kernel_size, now); + now += roundup(g_kernel_size, CROS_ALIGN); + + g_config_data = g_kernel_blob_data + now; + VB2_DEBUG("g_config_size %#x ofs %#x\n", + g_config_size, now); + now += g_config_size; + + g_param_data = g_kernel_blob_data + now; + VB2_DEBUG("g_param_size %#x ofs %#x\n", + g_param_size, now); + now += g_param_size; + + g_bootloader_data = g_kernel_blob_data + now; + VB2_DEBUG("g_bootloader_size %#x ofs %#x\n", + g_bootloader_size, now); + g_ondisk_bootloader_addr = kernel_body_load_address + now; + VB2_DEBUG("g_ondisk_bootloader_addr 0x%" PRIx64 "\n", + g_ondisk_bootloader_addr); + now += g_bootloader_size; + + if (g_vmlinuz_header_size) { + g_vmlinuz_header_data = g_kernel_blob_data + now; + VB2_DEBUG("g_vmlinuz_header_size %#x ofs %#x\n", + g_vmlinuz_header_size, now); + g_ondisk_vmlinuz_header_addr = kernel_body_load_address + now; + VB2_DEBUG("g_ondisk_vmlinuz_header_addr 0x%" PRIx64 "\n", + g_ondisk_vmlinuz_header_addr); + } + + VB2_DEBUG("end of kern_blob at kern_blob+%#x\n", now); + + /* Copy the kernel and params bits into the correct places */ + if (0 != PickApartVmlinuz(vmlinuz_buf, vmlinuz_size, + arch, kernel_body_load_address)) { + fprintf(stderr, "Error picking apart kernel file.\n"); + free(g_kernel_blob_data); + g_kernel_blob_data = NULL; + g_kernel_blob_size = 0; + return NULL; + } + + /* Copy the other bits too */ + memcpy(g_config_data, config_data, config_size); + memcpy(g_bootloader_data, bootloader_data, bootloader_size); + if (g_vmlinuz_header_size) { + memcpy(g_vmlinuz_header_data, + vmlinuz_buf, + g_vmlinuz_header_size); + } + + if (blob_size_ptr) + *blob_size_ptr = g_kernel_blob_size; + return g_kernel_blob_data; +} + +enum futil_file_type ft_recognize_vblock1(uint8_t *buf, uint32_t len) +{ + uint8_t workbuf[VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + struct vb2_workbuf wb; + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + /* Vboot 2.0 signature checks destroy the buffer, so make a copy */ + uint8_t *buf2 = malloc(len); + memcpy(buf2, buf, len); + struct vb2_keyblock *keyblock = (struct vb2_keyblock *)buf2; + if (VB2_SUCCESS != vb2_verify_keyblock_hash(keyblock, len, &wb)) { + free(buf2); + return FILE_TYPE_UNKNOWN; + } + + /* Try unpacking the data key from the keyblock */ + struct vb2_public_key data_key; + if (VB2_SUCCESS != + vb2_unpack_key(&data_key, &keyblock->data_key)) { + /* It looks like a bad keyblock, but still a keyblock */ + free(buf2); + return FILE_TYPE_KEYBLOCK; + } + + uint32_t more = keyblock->keyblock_size; + + /* Followed by firmware preamble too? */ + struct vb2_fw_preamble *pre2 = (struct vb2_fw_preamble *)(buf2 + more); + if (VB2_SUCCESS == + vb2_verify_fw_preamble(pre2, len - more, &data_key, &wb)) { + free(buf2); + return FILE_TYPE_FW_PREAMBLE; + } + + /* Recopy since firmware preamble check destroyed the buffer */ + memcpy(buf2, buf, len); + + /* Or maybe kernel preamble? */ + struct vb2_kernel_preamble *kern_preamble = + (struct vb2_kernel_preamble *)(buf2 + more); + if (VB2_SUCCESS == + vb2_verify_kernel_preamble(kern_preamble, len - more, + &data_key, &wb)) { + free(buf2); + return FILE_TYPE_KERN_PREAMBLE; + } + + free(buf2); + + /* No, just keyblock */ + return FILE_TYPE_KEYBLOCK; +} + +enum futil_file_type ft_recognize_vb1_key(uint8_t *buf, uint32_t len) +{ + /* Maybe just a packed public key? */ + const struct vb2_packed_key *pubkey = (struct vb2_packed_key *)buf; + if (vb2_packed_key_looks_ok(pubkey, len) == VB2_SUCCESS) + return FILE_TYPE_PUBKEY; + + /* How about a private key? */ + if (len < sizeof(uint64_t)) + return FILE_TYPE_UNKNOWN; + const unsigned char *start = buf + sizeof(uint64_t); + struct rsa_st *rsa = + d2i_RSAPrivateKey(NULL, &start, len - sizeof(uint64_t)); + if (rsa) { + RSA_free(rsa); + return FILE_TYPE_PRIVKEY; + } + + return FILE_TYPE_UNKNOWN; +} diff --git a/futility/vb1_helper.h b/futility/vb1_helper.h new file mode 100644 index 0000000..0699998 --- /dev/null +++ b/futility/vb1_helper.h @@ -0,0 +1,69 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#ifndef VBOOT_REFERENCE_VB1_HELPER_H_ +#define VBOOT_REFERENCE_VB1_HELPER_H_ + +struct vb2_kernel_preamble; +struct vb2_keyblock; +struct vb2_packed_key; + +/* Display a public key with variable indentation */ +void show_pubkey(const struct vb2_packed_key *pubkey, const char *sp); + +/* Other random functions needed for backward compatibility */ + +uint8_t *ReadConfigFile(const char *config_file, uint32_t *config_size); + +uint8_t *CreateKernelBlob(uint8_t *vmlinuz_buf, uint32_t vmlinuz_size, + enum arch_t arch, uint64_t kernel_body_load_address, + uint8_t *config_data, uint32_t config_size, + uint8_t *bootloader_data, uint32_t bootloader_size, + uint32_t *blob_size_ptr); + +uint8_t *SignKernelBlob(uint8_t *kernel_blob, + uint32_t kernel_size, + uint32_t padding, + int version, + uint64_t kernel_body_load_address, + struct vb2_keyblock *keyblock, + struct vb2_private_key *signpriv_key, + uint32_t flags, + uint32_t *vblock_size_ptr); + +int WriteSomeParts(const char *outfile, + void *part1_data, uint32_t part1_size, + void *part2_data, uint32_t part2_size); + +/** + * Unpack a kernel partition. + * + * @param kpart_data Kernel partition data + * @param kpart_size Size of kernel partition data in bytes + * @param padding Expected max size of keyblock+preamble + * @param keyblock_ptr Pointer to keyblock stored here on exit + * @param preamble_ptr Pointer to premable stored here on exit + * @param blob_size_ptr Size of kernel data blob stored here on exit + * + * @return A pointer to the kernel data blob, or NULL if error. + */ +uint8_t *unpack_kernel_partition(uint8_t *kpart_data, + uint32_t kpart_size, + uint32_t padding, + struct vb2_keyblock **keyblock_ptr, + struct vb2_kernel_preamble **preamble_ptr, + uint32_t *blob_size_ptr); + +int UpdateKernelBlobConfig(uint8_t *kblob_data, uint32_t kblob_size, + uint8_t *config_data, uint32_t config_size); + +int VerifyKernelBlob(uint8_t *kernel_blob, + uint32_t kernel_size, + struct vb2_packed_key *signpub_key, + const char *keyblock_outfile, + uint32_t min_version); + +uint64_t kernel_cmd_line_offset(const struct vb2_kernel_preamble *preamble); + +#endif /* VBOOT_REFERENCE_VB1_HELPER_H_ */ diff --git a/futility/vb2_helper.c b/futility/vb2_helper.c new file mode 100644 index 0000000..4d676a6 --- /dev/null +++ b/futility/vb2_helper.c @@ -0,0 +1,213 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include + +#include "2common.h" +#include "2id.h" +#include "2rsa.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "file_type.h" +#include "futility.h" +#include "futility_options.h" +#include "host_common.h" +#include "host_common21.h" +#include "host_key21.h" +#include "host_misc21.h" +#include "openssl_compat.h" +#include "util_misc.h" + +enum futil_file_type ft_recognize_vb21_key(uint8_t *buf, uint32_t len) +{ + struct vb2_public_key pubkey; + struct vb2_private_key *privkey = 0; + + /* The pubkey points into buf, so nothing to free */ + if (VB2_SUCCESS == vb21_unpack_key(&pubkey, buf, len)) + return FILE_TYPE_VB2_PUBKEY; + + /* The private key unpacks into new structs */ + if (VB2_SUCCESS == vb21_private_key_unpack(&privkey, buf, len)) { + vb2_private_key_free(privkey); + return FILE_TYPE_VB2_PRIVKEY; + } + + return FILE_TYPE_UNKNOWN; +} + +static inline void vb2_print_bytes(const void *ptr, uint32_t len) +{ + const uint8_t *buf = (const uint8_t *)ptr; + int i; + for (i = 0; i < len; i++) + printf("%02x", *buf++); +} + +static int vb2_public_key_sha1sum(struct vb2_public_key *key, uint8_t *digest) +{ + struct vb21_packed_key *pkey; + + if (vb21_public_key_pack(&pkey, key)) + return 0; + + vb2_digest_buffer((uint8_t *)pkey + pkey->key_offset, pkey->key_size, + VB2_HASH_SHA1, digest, VB2_SHA1_DIGEST_SIZE); + + free(pkey); + return 1; +} + +int ft_show_vb21_pubkey(const char *name, uint8_t *buf, uint32_t len, + void *data) +{ + struct vb2_public_key key; + uint8_t sha1sum[VB2_SHA1_DIGEST_SIZE]; + + /* The key's members will point into the state buffer after this. Don't + * free anything. */ + if (VB2_SUCCESS != vb21_unpack_key(&key, buf, len)) + return 1; + + printf("Public Key file: %s\n", name); + printf(" Vboot API: 2.1\n"); + printf(" Desc: \"%s\"\n", key.desc); + printf(" Signature Algorithm: %d %s\n", key.sig_alg, + vb2_get_sig_algorithm_name(key.sig_alg)); + printf(" Hash Algorithm: %d %s\n", key.hash_alg, + vb2_get_hash_algorithm_name(key.hash_alg)); + printf(" Version: 0x%08x\n", key.version); + printf(" ID: "); + vb2_print_bytes(key.id, sizeof(*key.id)); + printf("\n"); + if (vb2_public_key_sha1sum(&key, sha1sum) && + memcmp(key.id, sha1sum, sizeof(*key.id))) { + printf(" Key sha1sum: "); + vb2_print_bytes(sha1sum, sizeof(sha1sum)); + printf("\n"); + } + return 0; +} + +static int vb2_private_key_sha1sum(struct vb2_private_key *key, uint8_t *digest) +{ + uint8_t *buf; + uint32_t buflen; + + if (vb_keyb_from_rsa(key->rsa_private_key, &buf, &buflen)) + return 0; + + vb2_digest_buffer(buf, buflen, VB2_HASH_SHA1, digest, + VB2_SHA1_DIGEST_SIZE); + + free(buf); + return 1; +} + +int ft_show_vb21_privkey(const char *name, uint8_t *buf, uint32_t len, + void *data) +{ + struct vb2_private_key *key = 0; + uint8_t sha1sum[VB2_SHA1_DIGEST_SIZE]; + + if (VB2_SUCCESS != vb21_private_key_unpack(&key, buf, len)) + return 1; + + printf("Private key file: %s\n", name); + printf(" Vboot API: 2.1\n"); + printf(" Desc: \"%s\"\n", key->desc ? key->desc : ""); + printf(" Signature Algorithm: %d %s\n", key->sig_alg, + vb2_get_sig_algorithm_name(key->sig_alg)); + printf(" Hash Algorithm: %d %s\n", key->hash_alg, + vb2_get_hash_algorithm_name(key->hash_alg)); + printf(" ID: "); + vb2_print_bytes(&key->id, sizeof(key->id)); + printf("\n"); + if (vb2_private_key_sha1sum(key, sha1sum) && + memcmp(&key->id, sha1sum, sizeof(key->id))) { + printf(" Key sha1sum: "); + vb2_print_bytes(sha1sum, sizeof(sha1sum)); + printf("\n"); + } + vb2_private_key_free(key); + return 0; +} + +static RSA *rsa_from_buffer(uint8_t *buf, uint32_t len) +{ + BIO *bp; + RSA *rsa_key; + + bp = BIO_new_mem_buf(buf, len); + if (!bp) + return 0; + + rsa_key = PEM_read_bio_RSAPrivateKey(bp, NULL, NULL, NULL); + if (!rsa_key) { + if (BIO_reset(bp) < 0) + return 0; + rsa_key = PEM_read_bio_RSA_PUBKEY(bp, NULL, NULL, NULL); + } + if (!rsa_key) { + BIO_free(bp); + return 0; + } + + BIO_free(bp); + + return rsa_key; +} + +enum futil_file_type ft_recognize_pem(uint8_t *buf, uint32_t len) +{ + RSA *rsa_key = rsa_from_buffer(buf, len); + + if (rsa_key) { + RSA_free(rsa_key); + return FILE_TYPE_PEM; + } + + return FILE_TYPE_UNKNOWN; +} + +int ft_show_pem(const char *name, uint8_t *buf, uint32_t len, void *data) +{ + RSA *rsa_key; + uint8_t *keyb; + uint8_t digest[VB2_SHA1_DIGEST_SIZE]; + uint32_t keyb_len; + int i, bits; + const BIGNUM *rsa_key_n, *rsa_key_d; + + /* We're called only after ft_recognize_pem, so this should work. */ + rsa_key = rsa_from_buffer(buf, len); + if (!rsa_key) + FATAL("No RSA key found in buffer\n"); + + /* Use to presence of the private exponent to decide if it's public */ + RSA_get0_key(rsa_key, &rsa_key_n, NULL, &rsa_key_d); + printf("%s Key file: %s\n", rsa_key_d ? "Private" : "Public", + name); + + bits = BN_num_bits(rsa_key_n); + printf(" Key length: %d\n", bits); + + if (vb_keyb_from_rsa(rsa_key, &keyb, &keyb_len)) { + printf(" Key sha1sum: "); + RSA_free(rsa_key); + return 1; + } + + printf(" Key sha1sum: "); + vb2_digest_buffer(keyb, keyb_len, VB2_HASH_SHA1, + digest, sizeof(digest)); + for (i = 0; i < sizeof(digest); i++) + printf("%02x", digest[i]); + printf("\n"); + + free(keyb); + RSA_free(rsa_key); + return 0; +} diff --git a/host/arch/arm/lib/crossystem_arch.c b/host/arch/arm/lib/crossystem_arch.c new file mode 100644 index 0000000..116f8fc --- /dev/null +++ b/host/arch/arm/lib/crossystem_arch.c @@ -0,0 +1,553 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include +#include +#ifndef HAVE_MACOS +#include +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "crossystem_arch.h" +#include "crossystem.h" +#include "crossystem_vbnv.h" +#include "host_common.h" + +/* Base name for firmware FDT files */ +#define FDT_BASE_PATH "/proc/device-tree/firmware/chromeos" +/* Path to compatible FDT entry */ +#define FDT_COMPATIBLE_PATH "/proc/device-tree/compatible" +/* Path to the chromeos_arm platform device (deprecated) */ +#define PLATFORM_DEV_PATH "/sys/devices/platform/chromeos_arm" +/* These should match the Linux GPIO name (i.e., 'gpio-line-names'). */ +#define GPIO_NAME_RECOVERY_SW_L "RECOVERY_SW_L" +#define GPIO_NAME_RECOVERY_SW "RECOVERY_SW" +#define GPIO_NAME_WP_L "AP_FLASH_WP_L" +#define GPIO_NAME_WP "AP_FLASH_WP" +/* Device for NVCTX write */ +#define NVCTX_PATH "/dev/mmcblk%d" +/* Base name for GPIO files */ +#define GPIO_BASE_PATH "/sys/class/gpio" +#define GPIO_EXPORT_PATH GPIO_BASE_PATH "/export" +/* Name of NvStorage type property */ +#define FDT_NVSTORAGE_TYPE_PROP "nonvolatile-context-storage" +/* Errors */ +#define E_FAIL -1 +#define E_FILEOP -2 +#define E_MEM -3 +/* Common constants */ +#define FNAME_SIZE 80 +#define SECTOR_SIZE 512 +#define MAX_NMMCBLK 9 + +static int FindEmmcDev(void) +{ + int mmcblk; + unsigned value; + char filename[FNAME_SIZE]; + for (mmcblk = 0; mmcblk < MAX_NMMCBLK; mmcblk++) { + /* Get first non-removable mmc block device */ + snprintf(filename, sizeof(filename), + "/sys/block/mmcblk%d/removable", mmcblk); + if (ReadFileInt(filename, &value) < 0) + continue; + if (value == 0) + return mmcblk; + } + /* eMMC not found */ + return E_FAIL; +} + +static int ReadFdtValue(const char *property, int *value) +{ + char filename[FNAME_SIZE]; + FILE *file; + int data = 0; + + snprintf(filename, sizeof(filename), FDT_BASE_PATH "/%s", property); + file = fopen(filename, "rb"); + if (!file) { + fprintf(stderr, "Unable to open FDT property %s\n", property); + return E_FILEOP; + } + + if (fread(&data, 1, sizeof(data), file) != sizeof(data)) { + fprintf(stderr, "Unable to read FDT property %s\n", property); + return E_FILEOP; + } + fclose(file); + + if (value) + *value = ntohl(data); /* FDT is network byte order */ + + return 0; +} + +static int ReadFdtInt(const char *property) +{ + int value = 0; + if (ReadFdtValue(property, &value)) + return E_FAIL; + return value; +} + +static void GetFdtPropertyPath(const char *property, char *path, size_t size) +{ + if (property[0] == '/') + StrCopy(path, property, size); + else + snprintf(path, size, FDT_BASE_PATH "/%s", property); +} + +static int FdtPropertyExist(const char *property) +{ + char filename[FNAME_SIZE]; + struct stat file_status; + + GetFdtPropertyPath(property, filename, sizeof(filename)); + if (!stat(filename, &file_status)) + return 1; // It exists! + else + return 0; // It does not exist or some error happened. +} + +static int ReadFdtBlock(const char *property, void **block, size_t *size) +{ + char filename[FNAME_SIZE]; + FILE *file; + size_t property_size; + char *data; + + if (!block) + return E_FAIL; + + GetFdtPropertyPath(property, filename, sizeof(filename)); + file = fopen(filename, "rb"); + if (!file) { + fprintf(stderr, "Unable to open FDT property %s\n", property); + return E_FILEOP; + } + + fseek(file, 0, SEEK_END); + property_size = ftell(file); + rewind(file); + + data = malloc(property_size +1); + if (!data) { + fclose(file); + return E_MEM; + } + data[property_size] = 0; + + if (1 != fread(data, property_size, 1, file)) { + fprintf(stderr, "Unable to read from property %s\n", property); + fclose(file); + free(data); + return E_FILEOP; + } + + fclose(file); + *block = data; + if (size) + *size = property_size; + + return 0; +} + +static char * ReadFdtString(const char *property) +{ + void *str = NULL; + /* Do not need property size */ + ReadFdtBlock(property, &str, 0); + return (char *)str; +} + +static int VbGetPlatformGpioStatus(const char* name) +{ + char gpio_name[FNAME_SIZE]; + unsigned value; + + snprintf(gpio_name, sizeof(gpio_name), "%s/%s/value", + PLATFORM_DEV_PATH, name); + if (ReadFileInt(gpio_name, &value) < 0) + return -1; + + return (int)value; +} + +#ifndef HAVE_MACOS +static int gpioline_read_value(int chip_fd, int idx, bool active_low) +{ + struct gpiohandle_request request = { + .lineoffsets = { idx }, + .flags = GPIOHANDLE_REQUEST_INPUT | \ + (active_low ? GPIOHANDLE_REQUEST_ACTIVE_LOW : 0), + .lines = 1, + }; + struct gpiohandle_data data; + int ret; + + ret = ioctl(chip_fd, GPIO_GET_LINEHANDLE_IOCTL, &request); + if (ret < 0) { + perror("GPIO_GET_LINEHANDLE_IOCTL"); + return -1; + } + if (request.fd < 0) { + fprintf(stderr, "bad LINEHANDLE fd %d\n", request.fd); + return -1; + } + + ret = ioctl(request.fd, GPIOHANDLE_GET_LINE_VALUES_IOCTL, &data); + if (ret < 0) { + perror("GPIOHANDLE_GET_LINE_VALUES_IOCTL"); + close(request.fd); + return -1; + } + close(request.fd); + return data.values[0]; +} + +/* Return 1 if @idx line matches name; 0 if no match; negative if error. */ +static int gpioline_name_match(int chip_fd, int idx, const char *name) +{ + struct gpioline_info info = { + .line_offset = idx, + }; + int ret; + + ret = ioctl(chip_fd, GPIO_GET_LINEINFO_IOCTL, &info); + if (ret < 0) { + perror("GPIO_GET_LINEINFO_IOCTL"); + return -1; + } + + return strncmp(info.name, name, sizeof(info.name)) == 0; +} + +/* Return value of gpio, if found. Negative for error codes. */ +static int gpiochip_read_value(int chip_fd, const char *name, bool active_low) +{ + struct gpiochip_info info; + int i, ret; + + ret = ioctl(chip_fd, GPIO_GET_CHIPINFO_IOCTL, &info); + if (ret < 0) { + perror("GPIO_GET_CHIPINFO_IOCTL"); + return -1; + } + + for (i = 0; i < info.lines; i++) { + if (gpioline_name_match(chip_fd, i, name) != 1) + continue; + return gpioline_read_value(chip_fd, i, active_low); + } + + return -1; +} + +/* Return nonzero for entries with a 'gpiochip'-prefixed name. */ +static int gpiochip_scan_filter(const struct dirent *d) +{ + const char prefix[] = "gpiochip"; + return !strncmp(prefix, d->d_name, strlen(prefix)); +} + +/* + * Read a named GPIO via the Linux /dev/gpiochip* API, supported in recent + * kernels (e.g., ChromeOS kernel 4.14+). This method is preferred over the + * downstream chromeos_arm driver. + * + * Returns -1 for errors (e.g., API not supported, or @name not found); 1 for + * active; 0 for inactive. + */ +static int gpiod_read(const char *name, bool active_low) +{ + struct dirent **list; + int i, max, ret; + + ret = scandir("/dev", &list, gpiochip_scan_filter, alphasort); + if (ret < 0) { + perror("scandir"); + return -1; + } + max = ret; + /* No /dev/gpiochip* -- API not supported. */ + if (!max) + return -1; + + for (i = 0; i < max; i++) { + char buf[5 + NAME_MAX + 1]; + int fd; + + snprintf(buf, sizeof(buf), "/dev/%s", list[i]->d_name); + ret = open(buf, O_RDWR); + if (ret < 0) { + perror("open"); + break; + } + fd = ret; + + ret = gpiochip_read_value(fd, name, active_low); + close(fd); + if (ret >= 0) + break; + } + + for (i = 0; i < max; i++) + free(list[i]); + free(list); + + return ret >= 0 ? ret : -1; +} +#else +static int gpiod_read(const char *name, bool active_low) +{ + return -1; +} +#endif /* HAVE_MACOS */ + +static int vb2_read_nv_storage_disk(struct vb2_context *ctx) +{ + int nvctx_fd = -1; + uint8_t sector[SECTOR_SIZE]; + int rv = -1; + char nvctx_path[FNAME_SIZE]; + int emmc_dev; + int lba = ReadFdtInt("nonvolatile-context-lba"); + int offset = ReadFdtInt("nonvolatile-context-offset"); + int size = ReadFdtInt("nonvolatile-context-size"); + + emmc_dev = FindEmmcDev(); + if (emmc_dev < 0) + return E_FAIL; + snprintf(nvctx_path, sizeof(nvctx_path), NVCTX_PATH, emmc_dev); + + if (size != vb2_nv_get_size(ctx) || (size + offset > SECTOR_SIZE)) + return E_FAIL; + + nvctx_fd = open(nvctx_path, O_RDONLY); + if (nvctx_fd == -1) { + fprintf(stderr, "%s: failed to open %s\n", __FUNCTION__, + nvctx_path); + goto out; + } + lseek(nvctx_fd, lba * SECTOR_SIZE, SEEK_SET); + + rv = read(nvctx_fd, sector, SECTOR_SIZE); + if (size <= 0) { + fprintf(stderr, "%s: failed to read nvctx from device %s\n", + __FUNCTION__, nvctx_path); + goto out; + } + memcpy(ctx->nvdata, sector+offset, size); + rv = 0; + +out: + if (nvctx_fd > 0) + close(nvctx_fd); + + return rv; +} + +static int vb2_write_nv_storage_disk(struct vb2_context *ctx) +{ + int nvctx_fd = -1; + uint8_t sector[SECTOR_SIZE]; + int rv = -1; + char nvctx_path[FNAME_SIZE]; + int emmc_dev; + int lba = ReadFdtInt("nonvolatile-context-lba"); + int offset = ReadFdtInt("nonvolatile-context-offset"); + int size = ReadFdtInt("nonvolatile-context-size"); + + emmc_dev = FindEmmcDev(); + if (emmc_dev < 0) + return E_FAIL; + snprintf(nvctx_path, sizeof(nvctx_path), NVCTX_PATH, emmc_dev); + + if (size != vb2_nv_get_size(ctx) || (size + offset > SECTOR_SIZE)) + return E_FAIL; + + do { + nvctx_fd = open(nvctx_path, O_RDWR); + if (nvctx_fd == -1) { + fprintf(stderr, "%s: failed to open %s\n", + __FUNCTION__, nvctx_path); + break; + } + lseek(nvctx_fd, lba * SECTOR_SIZE, SEEK_SET); + rv = read(nvctx_fd, sector, SECTOR_SIZE); + if (rv <= 0) { + fprintf(stderr, + "%s: failed to read nvctx from device %s\n", + __FUNCTION__, nvctx_path); + break; + } + memcpy(sector+offset, ctx->nvdata, size); + lseek(nvctx_fd, lba * SECTOR_SIZE, SEEK_SET); + rv = write(nvctx_fd, sector, SECTOR_SIZE); + if (rv <= 0) { + fprintf(stderr, + "%s: failed to write nvctx to device %s\n", + __FUNCTION__, nvctx_path); + break; + } +#ifndef HAVE_MACOS + /* Must flush buffer cache here to make sure it goes to disk */ + rv = ioctl(nvctx_fd, BLKFLSBUF, 0); + if (rv < 0) { + fprintf(stderr, + "%s: failed to flush nvctx to device %s\n", + __FUNCTION__, nvctx_path); + break; + } +#endif + rv = 0; + } while (0); + + if (nvctx_fd > 0) + close(nvctx_fd); + + return rv; +} + +int vb2_read_nv_storage(struct vb2_context *ctx) +{ + /* Default to disk for older firmware which does not provide storage + * type */ + char *media; + if (!FdtPropertyExist(FDT_NVSTORAGE_TYPE_PROP)) + return vb2_read_nv_storage_disk(ctx); + media = ReadFdtString(FDT_NVSTORAGE_TYPE_PROP); + if (!strcmp(media, "disk")) + return vb2_read_nv_storage_disk(ctx); + if (!strcmp(media, "flash")) + return vb2_read_nv_storage_flashrom(ctx); + return -1; +} + +int vb2_write_nv_storage(struct vb2_context *ctx) +{ + /* Default to disk for older firmware which does not provide storage + * type */ + char *media; + if (!FdtPropertyExist(FDT_NVSTORAGE_TYPE_PROP)) + return vb2_write_nv_storage_disk(ctx); + media = ReadFdtString(FDT_NVSTORAGE_TYPE_PROP); + if (!strcmp(media, "disk")) + return vb2_write_nv_storage_disk(ctx); + if (!strcmp(media, "flash")) + return vb2_write_nv_storage_flashrom(ctx); + return -1; +} + +VbSharedDataHeader *VbSharedDataRead(void) +{ + void *block = NULL; + size_t size = 0; + if (ReadFdtBlock("vboot-shared-data", &block, &size)) + return NULL; + VbSharedDataHeader *p = (VbSharedDataHeader *)block; + if (p->magic != VB_SHARED_DATA_MAGIC) { + fprintf(stderr, "%s: failed to validate magic in " + "VbSharedDataHeader (%x != %x)\n", + __FUNCTION__, p->magic, VB_SHARED_DATA_MAGIC); + return NULL; + } + return (VbSharedDataHeader *)block; +} + +int VbGetArchPropertyInt(const char* name) +{ + if (!strcasecmp(name, "devsw_cur")) { + /* Systems with virtual developer switches return at-boot + * value */ + return VbGetSystemPropertyInt("devsw_boot"); + } else if (!strcasecmp(name, "recoverysw_cur")) { + int value; + /* Try GPIO chardev API first. */ + value = gpiod_read(GPIO_NAME_RECOVERY_SW_L, true); + if (value != -1) + return value; + value = gpiod_read(GPIO_NAME_RECOVERY_SW, false); + if (value != -1) + return value; + /* Try the deprecated chromeos_arm platform device next. */ + return VbGetPlatformGpioStatus("recovery"); + } else if (!strcasecmp(name, "wpsw_cur")) { + int value; + /* Try GPIO chardev API first. */ + value = gpiod_read(GPIO_NAME_WP_L, true); + if (value != -1) + return value; + value = gpiod_read(GPIO_NAME_WP, false); + if (value != -1) + return value; + /* Try the deprecated chromeos_arm platform device next. */ + return VbGetPlatformGpioStatus("write-protect"); + } else if (!strcasecmp(name, "recoverysw_ec_boot")) { + /* TODO: read correct value using ectool */ + return 0; + } else { + return -1; + } +} + +const char* VbGetArchPropertyString(const char* name, char* dest, + size_t size) +{ + char *str = NULL; + char *rv = NULL; + const char *prop = NULL; + + if (!strcasecmp(name,"arch")) + return StrCopy(dest, "arm", size); + + /* Properties from fdt */ + if (!strcasecmp(name, "ro_fwid")) + prop = "readonly-firmware-version"; + else if (!strcasecmp(name, "hwid")) + prop = "hardware-id"; + else if (!strcasecmp(name, "fwid")) + prop = "firmware-version"; + else if (!strcasecmp(name, "mainfw_type")) + prop = "firmware-type"; + else if (!strcasecmp(name, "ecfw_act")) + prop = "active-ec-firmware"; + + if (prop) + str = ReadFdtString(prop); + + if (str) { + rv = StrCopy(dest, str, size); + free(str); + return rv; + } + return NULL; +} + +int VbSetArchPropertyInt(const char* name, int value) +{ + /* All is handled in arch independent fashion */ + return -1; +} + +int VbSetArchPropertyString(const char* name, const char* value) +{ + /* All is handled in arch independent fashion */ + return -1; +} diff --git a/host/arch/mips/lib/crossystem_arch.c b/host/arch/mips/lib/crossystem_arch.c new file mode 100644 index 0000000..cb0ea92 --- /dev/null +++ b/host/arch/mips/lib/crossystem_arch.c @@ -0,0 +1,77 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include + +#include "crossystem_arch.h" +#include "crossystem.h" +#include "host_common.h" + +/* TODO: Currently these are stub implementations providing reasonable defaults + * wherever possible. They will need real implementation as part of of MIPS + * firmware bringup. */ + +int vb2_read_nv_storage(struct vb2_context *ctx) +{ + return -1; +} + +int vb2_write_nv_storage(struct vb2_context *ctx) +{ + return -1; +} + +VbSharedDataHeader *VbSharedDataRead(void) +{ + return NULL; +} + +int VbGetArchPropertyInt(const char* name) +{ + if (!strcasecmp(name,"devsw_cur")) { + return 1; + } else if (!strcasecmp(name,"recoverysw_cur")) { + return 0; + } else if (!strcasecmp(name,"wpsw_cur")) { + return 1; + } else if (!strcasecmp(name,"devsw_boot")) { + return 1; + } else if (!strcasecmp(name,"recoverysw_boot")) { + return 0; + } else if (!strcasecmp(name,"recoverysw_ec_boot")) { + return 0; + } + return -1; +} + +const char* VbGetArchPropertyString(const char* name, char* dest, size_t size) +{ + if (!strcasecmp(name,"hwid")) { + return StrCopy(dest, "UnknownMipsHwid", size); + } else if (!strcasecmp(name,"fwid")) { + return StrCopy(dest, "UnknownMipsFwid", size); + } else if (!strcasecmp(name,"ro_fwid")) { + return StrCopy(dest, "UnknownMipsRoFwid", size); + } else if (!strcasecmp(name,"mainfw_act")) { + return StrCopy(dest, "A", size); + } else if (!strcasecmp(name,"mainfw_type")) { + return StrCopy(dest, "developer", size); + } else if (!strcasecmp(name,"ecfw_act")) { + return StrCopy(dest, "RO", size); + } + return NULL; +} + +int VbSetArchPropertyInt(const char* name, int value) +{ + /* All is handled in arch independent fashion */ + return -1; +} + +int VbSetArchPropertyString(const char* name, const char* value) +{ + /* All is handled in arch independent fashion */ + return -1; +} diff --git a/host/arch/stub/lib/crossystem_arch.c b/host/arch/stub/lib/crossystem_arch.c new file mode 100644 index 0000000..4a71ddd --- /dev/null +++ b/host/arch/stub/lib/crossystem_arch.c @@ -0,0 +1,49 @@ +/* Copyright (c) 2020 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "crossystem_arch.h" +#include "crossystem.h" +#include "crossystem_vbnv.h" +#include "host_common.h" +#include "vboot_struct.h" + +int vb2_read_nv_storage(struct vb2_context *ctx) +{ + return -1; +} + + +int vb2_write_nv_storage(struct vb2_context *ctx) +{ + return -1; +} + +VbSharedDataHeader* VbSharedDataRead(void) +{ + return NULL; +} + +int VbGetArchPropertyInt(const char* name) +{ + return -1; +} + + +const char* VbGetArchPropertyString(const char* name, char* dest, + size_t size) +{ + return NULL; +} + + +int VbSetArchPropertyInt(const char* name, int value) +{ + return -1; +} + +int VbSetArchPropertyString(const char* name, const char* value) +{ + return -1; +} diff --git a/host/arch/x86/lib/crossystem_arch.c b/host/arch/x86/lib/crossystem_arch.c new file mode 100644 index 0000000..e805e2a --- /dev/null +++ b/host/arch/x86/lib/crossystem_arch.c @@ -0,0 +1,991 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include +#if !defined(__FreeBSD__) && !defined(__OpenBSD__) +#include +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "crossystem_arch.h" +#include "crossystem.h" +#include "crossystem_vbnv.h" +#include "host_common.h" +#include "vboot_struct.h" + +/* ACPI constants from Chrome OS Main Processor Firmware Spec */ +/* Boot reasons from BINF.0, from early H2C firmware */ +/* Unknown */ +#define BINF0_UNKNOWN 0 +/* Normal boot to Chrome OS */ +#define BINF0_NORMAL 1 +/* Developer mode boot (developer mode warning displayed) */ +#define BINF0_DEVELOPER 2 +/* Recovery initiated by user, using recovery button */ +#define BINF0_RECOVERY_BUTTON 3 +/* Recovery initiated by user pressing a key at developer mode warning + * screen */ +#define BINF0_RECOVERY_DEV_SCREEN_KEY 4 +/* Recovery caused by BIOS failed signature check (neither rewritable + * firmware was valid) */ +#define BINF0_RECOVERY_RW_FW_BAD 5 +/* Recovery caused by no OS kernel detected */ +#define BINF0_RECOVERY_NO_OS 6 +/* Recovery caused by OS kernel failed signature check */ +#define BINF0_RECOVERY_BAD_OS 7 +/* Recovery initiated by OS */ +#define BINF0_RECOVERY_OS_INITIATED 8 +/* OS-initiated S3 diagnostic path (debug mode boot) */ +#define BINF0_S3_DIAGNOSTIC_PATH 9 +/* S3 resume failed */ +#define BINF0_S3_RESUME_FAILED 10 +/* Recovery caused by TPM error */ +#define BINF0_RECOVERY_TPM_ERROR 11 +/* CHSW bitflags */ +#define CHSW_RECOVERY_BOOT 0x00000002 +#define CHSW_RECOVERY_EC_BOOT 0x00000004 +#define CHSW_DEV_BOOT 0x00000020 +/* CMOS reboot field bitflags */ +#define CMOSRF_RECOVERY 0x80 +#define CMOSRF_DEBUG_RESET 0x40 +#define CMOSRF_TRY_B 0x20 +/* GPIO signal types */ +#define GPIO_SIGNAL_TYPE_RECOVERY 1 +#define GPIO_SIGNAL_TYPE_DEPRECATED_DEV 2 /* Deprecated; see chromium:942901 */ +#define GPIO_SIGNAL_TYPE_WP 3 +#define GPIO_SIGNAL_TYPE_PHASE_ENFORCEMENT 4 + +/* Base name for ACPI files */ +#define ACPI_BASE_PATH "/sys/devices/platform/chromeos_acpi" +/* Paths for frequently used ACPI files */ +#define ACPI_BINF_PATH ACPI_BASE_PATH "/BINF" +#define ACPI_CHNV_PATH ACPI_BASE_PATH "/CHNV" +#define ACPI_CHSW_PATH ACPI_BASE_PATH "/CHSW" +#define ACPI_GPIO_PATH ACPI_BASE_PATH "/GPIO" +#define ACPI_VBNV_PATH ACPI_BASE_PATH "/VBNV" +#define ACPI_VDAT_PATH ACPI_BASE_PATH "/VDAT" + +/* Base name for GPIO files */ +#define GPIO_BASE_PATH "/sys/class/gpio" +#define GPIO_EXPORT_PATH GPIO_BASE_PATH "/export" + +/* Filename for NVRAM file */ +#define NVRAM_PATH "/dev/nvram" + +/* Filename for legacy firmware update tries */ +#define NEED_FWUPDATE_PATH "/mnt/stateful_partition/.need_firmware_update" + +/* Filenames for PCI Vendor and Device IDs */ +#define PCI_VENDOR_ID_PATH "/sys/bus/pci/devices/0000:00:00.0/vendor" +#define PCI_DEVICE_ID_PATH "/sys/bus/pci/devices/0000:00:00.0/device" + +typedef struct { + unsigned int base; + unsigned int uid; +} Basemapping; + +static void VbFixCmosChecksum(FILE* file) +{ +#if !defined(__FreeBSD__) && !defined(__OpenBSD__) + int fd = fileno(file); + ioctl(fd, NVRAM_SETCKS); +#endif +} + + +static int VbCmosRead(unsigned offs, size_t size, void *ptr) +{ + size_t res; + FILE* f; + + f = fopen(NVRAM_PATH, "rb"); + if (!f) + return -1; + + if (0 != fseek(f, offs, SEEK_SET)) { + fclose(f); + return -1; + } + + res = fread(ptr, size, 1, f); + if (1 != res && errno == EIO && ferror(f)) { + VbFixCmosChecksum(f); + res = fread(ptr, size, 1, f); + } + + fclose(f); + return (1 == res) ? 0 : -1; +} + + +static int VbCmosWrite(unsigned offs, size_t size, const void *ptr) +{ + size_t res; + FILE* f; + + f = fopen(NVRAM_PATH, "w+b"); + if (!f) + return -1; + + if (0 != fseek(f, offs, SEEK_SET)) { + fclose(f); + return -1; + } + + res = fwrite(ptr, size, 1, f); + if (1 != res && errno == EIO && ferror(f)) { + VbFixCmosChecksum(f); + res = fwrite(ptr, size, 1, f); + } + + fclose(f); + return (1 == res) ? 0 : -1; +} + + +int vb2_read_nv_storage(struct vb2_context *ctx) +{ + unsigned offs, blksz; + unsigned expectsz = vb2_nv_get_size(ctx); + + /* Get the byte offset from VBNV */ + if (ReadFileInt(ACPI_VBNV_PATH ".0", &offs) < 0) + return -1; + if (ReadFileInt(ACPI_VBNV_PATH ".1", &blksz) < 0) + return -1; + if (expectsz > blksz) + return -1; /* NV storage block is too small */ + + if (0 != VbCmosRead(offs, expectsz, ctx->nvdata)) + return -1; + + return 0; +} + + +int vb2_write_nv_storage(struct vb2_context *ctx) +{ + unsigned offs, blksz; + unsigned expectsz = vb2_nv_get_size(ctx); + + if (!(ctx->flags & VB2_CONTEXT_NVDATA_CHANGED)) + return 0; /* Nothing changed, so no need to write */ + + /* Get the byte offset from VBNV */ + if (ReadFileInt(ACPI_VBNV_PATH ".0", &offs) < 0) + return -1; + if (ReadFileInt(ACPI_VBNV_PATH ".1", &blksz) < 0) + return -1; + if (expectsz > blksz) + return -1; /* NV storage block is too small */ + + if (0 != VbCmosWrite(offs, expectsz, ctx->nvdata)) + return -1; + + /* Also attempt to write using flashrom if using vboot2 */ + VbSharedDataHeader *sh = VbSharedDataRead(); + if (sh) { + if (sh->flags & VBSD_BOOT_FIRMWARE_VBOOT2) + vb2_write_nv_storage_flashrom(ctx); + free(sh); + } + + return 0; +} + + +/* + * Get buffer data from ACPI. + * + * Buffer data is expected to be represented by a file which is a text dump of + * the buffer, representing each byte by two hex numbers, space and newline + * separated. + * + * On success, stores the amount of data read in bytes to *buffer_size; on + * erros, sets *buffer_size=0. + * + * Input - ACPI file name to get data from. + * + * Output: a pointer to AcpiBuffer structure containing the binary + * representation of the data. The caller is responsible for + * deallocating the pointer, this will take care of both the structure + * and the buffer. Null in case of error. + */ +static uint8_t* VbGetBuffer(const char* filename, int* buffer_size) +{ + FILE* f = NULL; + char* file_buffer = NULL; + uint8_t* output_buffer = NULL; + uint8_t* return_value = NULL; + + /* Assume error until proven otherwise */ + if (buffer_size) + *buffer_size = 0; + + do { + struct stat fs; + uint8_t* output_ptr; + int rv, i, real_size; + int parsed_size = 0; + + int fd = open(filename, O_RDONLY); + if (fd == -1) + break; + + rv = fstat(fd, &fs); + if (rv || !S_ISREG(fs.st_mode)) { + close(fd); + break; + } + + f = fdopen(fd, "r"); + if (!f) { + close(fd); + break; + } + + file_buffer = malloc(fs.st_size + 1); + if (!file_buffer) + break; + + real_size = fread(file_buffer, 1, fs.st_size, f); + if (!real_size) + break; + file_buffer[real_size] = '\0'; + + /* Each byte in the output will replace two characters and a + * space in the input, so the output size does not exceed input + * side/3 (a little less if account for newline characters). */ + output_buffer = malloc(real_size/3); + if (!output_buffer) + break; + output_ptr = output_buffer; + + /* process the file contents */ + for (i = 0; i < real_size; i++) { + char* base, *end; + + base = file_buffer + i; + + if (!isxdigit(*base)) + continue; + + output_ptr[parsed_size++] = + strtol(base, &end, 16) & 0xff; + + if ((end - base) != 2) + /* Input file format error */ + break; + + /* skip the second character and the following space */ + i += 2; + } + + if (i == real_size) { + /* all is well */ + return_value = output_buffer; + output_buffer = NULL; /* prevent it from deallocating */ + if (buffer_size) + *buffer_size = parsed_size; + } + } while(0); + + /* wrap up */ + if (f) + fclose(f); + + if (file_buffer) + free(file_buffer); + + if (output_buffer) + free(output_buffer); + + return return_value; +} + + +VbSharedDataHeader* VbSharedDataRead(void) +{ + VbSharedDataHeader* sh; + int got_size = 0; + int expect_size; + + sh = (VbSharedDataHeader*)VbGetBuffer(ACPI_VDAT_PATH, &got_size); + if (!sh) + return NULL; + + /* Make sure the size is sufficient for the struct version we got. + * Check supported old versions first. */ + if (1 == sh->struct_version) + expect_size = VB_SHARED_DATA_HEADER_SIZE_V1; + else { + /* There'd better be enough data for the current header size. */ + expect_size = sizeof(VbSharedDataHeader); + } + + if (got_size < expect_size) { + free(sh); + return NULL; + } + if (sh->data_size > got_size) + sh->data_size = got_size; /* Truncated read */ + + return sh; +} + + +/* Read the CMOS reboot field in NVRAM. + * + * Returns 0 if the mask is clear in the field, 1 if set, or -1 if error. */ +static int VbGetCmosRebootField(uint8_t mask) +{ + unsigned chnv; + uint8_t nvbyte; + + /* Get the byte offset from CHNV */ + if (ReadFileInt(ACPI_CHNV_PATH, &chnv) < 0) + return -1; + + if (0 != VbCmosRead(chnv, 1, &nvbyte)) + return -1; + + return (nvbyte & mask ? 1 : 0); +} + + +/* Write the CMOS reboot field in NVRAM. + * + * Sets (value=0) or clears (value!=0) the mask in the byte. + * + * Returns 0 if success, or -1 if error. */ +static int VbSetCmosRebootField(uint8_t mask, int value) +{ + unsigned chnv; + uint8_t nvbyte; + + /* Get the byte offset from CHNV */ + if (ReadFileInt(ACPI_CHNV_PATH, &chnv) < 0) + return -1; + + if (0 != VbCmosRead(chnv, 1, &nvbyte)) + return -1; + + /* Set/clear the mask */ + if (value) + nvbyte |= mask; + else + nvbyte &= ~mask; + + /* Write the byte back */ + if (0 != VbCmosWrite(chnv, 1, &nvbyte)) + return -1; + + /* Success */ + return 0; +} + + +/* Read the active main firmware type into the destination buffer. + * Passed the destination and its size. Returns the destination, or + * NULL if error. */ +static const char* VbReadMainFwType(char* dest, int size) +{ + unsigned value; + + /* Try reading type from BINF.3 */ + if (ReadFileInt(ACPI_BINF_PATH ".3", &value) == 0) { + switch(value) { + case BINF3_LEGACY: + return StrCopy(dest, "legacy", size); + case BINF3_NETBOOT: + return StrCopy(dest, "netboot", size); + case BINF3_RECOVERY: + return StrCopy(dest, "recovery", size); + case BINF3_NORMAL: + return StrCopy(dest, "normal", size); + case BINF3_DEVELOPER: + return StrCopy(dest, "developer", size); + default: + break; /* Fall through to legacy handling */ + } + } + + /* Fall back to BINF.0 for legacy systems like Mario. */ + if (ReadFileInt(ACPI_BINF_PATH ".0", &value) < 0) + /* Both BINF.0 and BINF.3 are missing, so this isn't Chrome OS + * firmware. */ + return StrCopy(dest, "nonchrome", size); + + switch(value) { + case BINF0_NORMAL: + return StrCopy(dest, "normal", size); + case BINF0_DEVELOPER: + return StrCopy(dest, "developer", size); + case BINF0_RECOVERY_BUTTON: + case BINF0_RECOVERY_DEV_SCREEN_KEY: + case BINF0_RECOVERY_RW_FW_BAD: + case BINF0_RECOVERY_NO_OS: + case BINF0_RECOVERY_BAD_OS: + case BINF0_RECOVERY_OS_INITIATED: + case BINF0_RECOVERY_TPM_ERROR: + /* Assorted flavors of recovery boot reason. */ + return StrCopy(dest, "recovery", size); + default: + /* Other values don't map cleanly to firmware type. */ + return NULL; + } +} + + +/* Read the recovery reason. Returns the reason code or -1 if error. */ +static vb2_error_t VbGetRecoveryReason(void) +{ + unsigned value; + + /* Try reading type from BINF.4 */ + if (ReadFileInt(ACPI_BINF_PATH ".4", &value) == 0) + return value; + + /* Fall back to BINF.0 for legacy systems like Mario. */ + if (ReadFileInt(ACPI_BINF_PATH ".0", &value) < 0) + return -1; + switch(value) { + case BINF0_NORMAL: + case BINF0_DEVELOPER: + return VB2_RECOVERY_NOT_REQUESTED; + case BINF0_RECOVERY_BUTTON: + return VB2_RECOVERY_RO_MANUAL; + case BINF0_RECOVERY_RW_FW_BAD: + return VB2_RECOVERY_RO_INVALID_RW; + case BINF0_RECOVERY_NO_OS: + return VB2_RECOVERY_RW_NO_KERNEL; + case BINF0_RECOVERY_BAD_OS: + return VB2_RECOVERY_RW_INVALID_OS; + case BINF0_RECOVERY_OS_INITIATED: + return VB2_RECOVERY_LEGACY; + default: + /* Other values don't map cleanly to firmware type. */ + return -1; + } +} + +/* Physical GPIO number may be accessed through /sys/class/gpio/gpio/, + * but and may differ by some offset . To determine that constant, + * we look for a directory named /sys/class/gpio/gpiochip/. If there's not + * exactly one match for that, we're SOL. + */ +static int FindGpioChipOffset(unsigned *gpio_num, unsigned *offset, + const char *name) +{ + DIR *dir; + struct dirent *ent; + int match = 0; + + dir = opendir(GPIO_BASE_PATH); + if (!dir) { + return 0; + } + + while(0 != (ent = readdir(dir))) { + if (1 == sscanf(ent->d_name, "gpiochip%u", offset)) { + match++; + } + } + + closedir(dir); + return (1 == match); +} + +/* Physical GPIO number may be accessed through /sys/class/gpio/gpio/, + * but and may differ by some offset . To determine that constant, + * we look for a directory named /sys/class/gpio/gpiochip/ and check for + * a 'label' file inside of it to find the expected the controller name. + */ +static int FindGpioChipOffsetByLabel(unsigned *gpio_num, unsigned *offset, + const char *name) +{ + DIR *dir; + struct dirent *ent; + char filename[128]; + char chiplabel[128]; + int match = 0; + unsigned controller_offset = 0; + + dir = opendir(GPIO_BASE_PATH); + if (!dir) { + return 0; + } + + while(0 != (ent = readdir(dir))) { + if (1 == sscanf(ent->d_name, "gpiochip%u", + &controller_offset)) { + /* + * Read the file at gpiochip/label to get the + * identifier for this bank of GPIOs. + */ + snprintf(filename, sizeof(filename), + "%s/gpiochip%u/label", + GPIO_BASE_PATH, controller_offset); + if (ReadFileString(chiplabel, sizeof(chiplabel), + filename)) { + if (!strncasecmp(chiplabel, name, + strlen(name))) { + /* + * Store offset when chip label is + * matched. + */ + *offset = controller_offset; + match++; + } + } + } + } + + closedir(dir); + return (1 == match); +} + +static int FindGpioChipOffsetByNumber(unsigned *gpio_num, unsigned *offset, + Basemapping *data) +{ + DIR *dir; + struct dirent *ent; + int match = 0; + + /* Obtain relative GPIO number. + * The assumption here is the Basemapping + * table is arranged in decreasing order of + * base address and ends with 0. + * A UID with value 0 indicates an invalid range + * and causes an early return to avoid the directory + * opening code below. + */ + do { + if (*gpio_num >= data->base) { + *gpio_num -= data->base; + break; + } + data++; + } while(1); + + if (data->uid == 0) { + return 0; + } + + dir = opendir(GPIO_BASE_PATH); + if (!dir) { + return 0; + } + + while(0 != (ent = readdir(dir))) { + /* For every gpiochip entry determine uid. */ + if (1 == sscanf(ent->d_name, "gpiochip%u", offset)) { + char uid_file[128]; + unsigned uid_value; + snprintf(uid_file, sizeof(uid_file), + "%s/gpiochip%u/device/firmware_node/uid", + GPIO_BASE_PATH, *offset); + if (ReadFileInt(uid_file, &uid_value) < 0) + continue; + if (data->uid == uid_value) { + match++; + break; + } + } + } + + closedir(dir); + return (1 == match); +} + + +/* Braswell has 4 sets of GPIO banks. It is expected the firmware exposes each + * bank of gpios using a UID in ACPI. Furthermore the gpio number exposed is + * relative to the bank. e.g. gpio MF_ISH_GPIO_4 in the bank specified by UID 3 + * would be encoded as 0x10016. + * + * UID | Bank Offset + * ----+------------ + * 1 | 0x0000 + * 2 | 0x8000 + * 3 | 0x10000 + * 4 | 0x18000 + */ +static int BraswellFindGpioChipOffset(unsigned *gpio_num, unsigned *offset, + const char *name) +{ + int ret; + struct utsname host; + unsigned int maj, min; + int gpe = 0; + static Basemapping data[]={ + {0x20000, 0}, + {0x18000, 4}, + {0x10000, 3}, + {0x08000, 2}, + {0x00000, 1}}; + + /* + * This quirk addresses b:143174998 and is required on kernels >= 4.16 + * when GPIO numbering has changed with an upstream commit: + * 03c4749dd6c7ff948a0ce59a44a1b97c015353c2 + * "gpio / ACPI: Drop unnecessary ACPI GPIO to Linux GPIO translation". + * With that change gpio ACPI/Linux kernel 1:1 mapping was introduced which + * made mismatch for gpio number and backward compatibility for user-space. + * Details on review commit review + * https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/2153155 + */ + + /* + * Here we are addressing particular wpsw_cur pin which is connected to + * East Community GPIO chip (uid == 3, base == 0x10000). In this case there + * is only one gap between 11 and 15 (0..11 15..26). For now crosssystem + * is not checking pins in other gpio banks, but it is worth to mention that + * there are gaps as well. + */ + if (*gpio_num >= 0x10000 && *gpio_num < 0x18000) + gpe = 1; + + ret = FindGpioChipOffsetByNumber(gpio_num, offset, data); + if (!ret || !gpe) + return ret; + + if (uname(&host) == 0) { + if (sscanf(host.release, "%u.%u.", &maj, &min) == 2) { +#if !defined(__FreeBSD__) && !defined(__OpenBSD__) + if (KERNEL_VERSION(maj, min, 0) >= KERNEL_VERSION(4, 16, 0) && + *offset > 11) + *offset += 3; +#endif + } else { + printf("Couldn't retrieve kernel version!\n"); + ret = 0; + } + } else { + perror("uname"); + ret = 0; + } + + return ret; +} + +/* BayTrail has 3 sets of GPIO banks. It is expected the firmware exposes + * each bank of gpios using a UID in ACPI. Furthermore the gpio number exposed + * is relative to the bank. e.g. gpio 6 in the bank specified by UID 3 would + * be encoded as 0x2006. + * UID | Bank Offset + * ----+------------ + * 1 | 0x0000 + * 2 | 0x1000 + * 3 | 0x2000 + */ +static int BayTrailFindGpioChipOffset(unsigned *gpio_num, unsigned *offset, + const char *name) +{ + static Basemapping data[]={ + {0x3000, 0}, + {0x2000, 3}, + {0x1000, 2}, + {0x0000, 1}}; + + return FindGpioChipOffsetByNumber(gpio_num, offset, data); +} + +struct GpioChipset { + const char *name; + int (*ChipOffsetAndGpioNumber)(unsigned *gpio_num, + unsigned *chip_offset, + const char *name); +}; + +static const struct GpioChipset chipsets_supported[] = { + { "AMD0030", FindGpioChipOffset }, + { "NM10", FindGpioChipOffset }, + { "CougarPoint", FindGpioChipOffset }, + { "PantherPoint", FindGpioChipOffset }, + { "LynxPoint", FindGpioChipOffset }, + { "PCH-LP", FindGpioChipOffset }, + { "INT3437:00", FindGpioChipOffsetByLabel }, + { "INT344B:00", FindGpioChipOffsetByLabel }, + /* INT3452 are for Apollolake */ + { "INT3452:00", FindGpioChipOffsetByLabel }, + { "INT3452:01", FindGpioChipOffsetByLabel }, + { "INT3452:02", FindGpioChipOffsetByLabel }, + { "INT3452:03", FindGpioChipOffsetByLabel }, + { "INT3455:00", FindGpioChipOffsetByLabel }, + { "INT34BB:00", FindGpioChipOffsetByLabel }, + { "INT34C8:00", FindGpioChipOffsetByLabel }, + { "INT34C5:00", FindGpioChipOffsetByLabel }, + /* INTC105x are for Alderlake */ + { "INTC1055:00", FindGpioChipOffsetByLabel }, + { "INTC1056:00", FindGpioChipOffsetByLabel }, + /* INT3453 are for GLK */ + { "INT3453:00", FindGpioChipOffsetByLabel }, + { "INT3453:01", FindGpioChipOffsetByLabel }, + { "INT3453:02", FindGpioChipOffsetByLabel }, + { "INT3453:03", FindGpioChipOffsetByLabel }, + { "BayTrail", BayTrailFindGpioChipOffset }, + { "Braswell", BraswellFindGpioChipOffset }, + { NULL }, +}; + +static const struct GpioChipset *FindChipset(const char *name) +{ + const struct GpioChipset *chipset = &chipsets_supported[0]; + + while (chipset->name != NULL) { + if (!strcmp(name, chipset->name)) + return chipset; + chipset++; + } + return NULL; +} + +/* Read a GPIO of the specified signal type (see ACPI GPIO SignalType). + * + * Returns 1 if the signal is asserted, 0 if not asserted, or -1 if error. */ +static int ReadGpio(unsigned signal_type) +{ + char name[128]; + int index = 0; + unsigned gpio_type; + unsigned active_high; + unsigned controller_num; + unsigned controller_offset = 0; + char controller_name[128]; + unsigned value; + const struct GpioChipset *chipset; + + /* Scan GPIO.* to find a matching signal type */ + for (index = 0; ; index++) { + snprintf(name, sizeof(name), "%s.%d/GPIO.0", ACPI_GPIO_PATH, + index); + if (ReadFileInt(name, &gpio_type) < 0) + return -1; /* Ran out of GPIOs before finding a match */ + if (gpio_type == signal_type) + break; + } + + /* Read attributes and controller info for the GPIO */ + snprintf(name, sizeof(name), "%s.%d/GPIO.1", ACPI_GPIO_PATH, index); + if (ReadFileInt(name, &active_high) < 0) + return -1; + snprintf(name, sizeof(name), "%s.%d/GPIO.2", ACPI_GPIO_PATH, index); + if (ReadFileInt(name, &controller_num) < 0) + return -1; + /* Do not attempt to read GPIO that is set to -1 in ACPI */ + if (controller_num == 0xFFFFFFFF) + return -1; + + /* Check for chipsets we recognize. */ + snprintf(name, sizeof(name), "%s.%d/GPIO.3", ACPI_GPIO_PATH, index); + if (!ReadFileString(controller_name, sizeof(controller_name), name)) + return -1; + chipset = FindChipset(controller_name); + if (chipset == NULL) + return -1; + + /* Modify GPIO number by driver's offset */ + if (!chipset->ChipOffsetAndGpioNumber(&controller_num, + &controller_offset, + chipset->name)) + return -1; + controller_offset += controller_num; + + /* Try reading the GPIO value */ + snprintf(name, sizeof(name), "%s/gpio%d/value", + GPIO_BASE_PATH, controller_offset); + if (ReadFileInt(name, &value) < 0) { + /* Try exporting the GPIO */ + FILE* f = fopen(GPIO_EXPORT_PATH, "wt"); + if (!f) + return -1; + fprintf(f, "%u", controller_offset); + fclose(f); + + /* Try re-reading the GPIO value */ + if (ReadFileInt(name, &value) < 0) + return -1; + } + + /* Normalize the value read from the kernel in case it is not always + * 1. */ + value = value ? 1 : 0; + + /* Compare the GPIO value with the active value and return 1 if + * match. */ + return (value == active_high ? 1 : 0); +} + + +int VbGetArchPropertyInt(const char* name) +{ + int value = -1; + + /* Switch positions */ + if (!strcasecmp(name,"devsw_cur")) { + /* Systems with virtual developer switches return at-boot + * value */ + value = VbGetSystemPropertyInt("devsw_boot"); + } else if (!strcasecmp(name,"recoverysw_cur")) { + value = ReadGpio(GPIO_SIGNAL_TYPE_RECOVERY); + } else if (!strcasecmp(name,"wpsw_cur")) { + value = ReadGpio(GPIO_SIGNAL_TYPE_WP); + } else if (!strcasecmp(name,"recoverysw_ec_boot")) { + value = ReadFileBit(ACPI_CHSW_PATH, CHSW_RECOVERY_EC_BOOT); + } else if (!strcasecmp(name,"phase_enforcement")) { + value = ReadGpio(GPIO_SIGNAL_TYPE_PHASE_ENFORCEMENT); + } + + /* Fields for old systems which don't have VbSharedData */ + if (VbSharedDataVersion() < 2) { + if (!strcasecmp(name,"recovery_reason")) { + value = VbGetRecoveryReason(); + } else if (!strcasecmp(name,"devsw_boot")) { + value = ReadFileBit(ACPI_CHSW_PATH, CHSW_DEV_BOOT); + } else if (!strcasecmp(name,"recoverysw_boot")) { + value = ReadFileBit(ACPI_CHSW_PATH, CHSW_RECOVERY_BOOT); + } + } + + /* NV storage values. If unable to get from NV storage, fall back to + * the CMOS reboot field used by older BIOS (e.g. Mario). */ + if (!strcasecmp(name,"recovery_request")) { + value = vb2_get_nv_storage(VB2_NV_RECOVERY_REQUEST); + if (-1 == value) + value = VbGetCmosRebootField(CMOSRF_RECOVERY); + } else if (!strcasecmp(name,"dbg_reset")) { + value = vb2_get_nv_storage(VB2_NV_DEBUG_RESET_MODE); + if (-1 == value) + value = VbGetCmosRebootField(CMOSRF_DEBUG_RESET); + } else if (!strcasecmp(name,"fwb_tries")) { + value = vb2_get_nv_storage(VB2_NV_TRY_COUNT); + if (-1 == value) + value = VbGetCmosRebootField(CMOSRF_TRY_B); + } + + /* Firmware update tries is now stored in the kernel field. On + * older systems where it's not, it was stored in a file in the + * stateful partition. */ + if (!strcasecmp(name,"fwupdate_tries")) { + unsigned fwupdate_value; + if (-1 != vb2_get_nv_storage(VB2_NV_KERNEL_FIELD)) + return -1; /* NvStorage supported; fail through + * arch-specific implementation to normal + * implementation. */ + /* Read value from file; missing file means value=0. */ + if (ReadFileInt(NEED_FWUPDATE_PATH, &fwupdate_value) < 0) + value = 0; + else + value = (int)fwupdate_value; + } + + return value; +} + + +const char* VbGetArchPropertyString(const char* name, char* dest, + size_t size) +{ + unsigned value; + + if (!strcasecmp(name,"arch")) { + return StrCopy(dest, "x86", size); + } else if (!strcasecmp(name,"hwid")) { + return ReadFileString(dest, size, ACPI_BASE_PATH "/HWID"); + } else if (!strcasecmp(name,"fwid")) { + return ReadFileString(dest, size, ACPI_BASE_PATH "/FWID"); + } else if (!strcasecmp(name,"ro_fwid")) { + return ReadFileString(dest, size, ACPI_BASE_PATH "/FRID"); + } else if (!strcasecmp(name,"mainfw_act")) { + if (ReadFileInt(ACPI_BINF_PATH ".1", &value) < 0) + return NULL; + switch(value) { + case 0: + return StrCopy(dest, "recovery", size); + case 1: + return StrCopy(dest, "A", size); + case 2: + return StrCopy(dest, "B", size); + default: + return NULL; + } + } else if (!strcasecmp(name,"mainfw_type")) { + return VbReadMainFwType(dest, size); + } else if (!strcasecmp(name,"ecfw_act")) { + if (ReadFileInt(ACPI_BINF_PATH ".2", &value) < 0) + return NULL; + switch(value) { + case 0: + return StrCopy(dest, "RO", size); + case 1: + return StrCopy(dest, "RW", size); + default: + return NULL; + } + } + + return NULL; +} + + +int VbSetArchPropertyInt(const char* name, int value) +{ + /* NV storage values. If unable to get from NV storage, fall back to + * the CMOS reboot field used by older BIOS. */ + if (!strcasecmp(name,"recovery_request")) { + if (0 == vb2_set_nv_storage(VB2_NV_RECOVERY_REQUEST, value)) + return 0; + return VbSetCmosRebootField(CMOSRF_RECOVERY, value); + } else if (!strcasecmp(name,"dbg_reset")) { + if (0 == vb2_set_nv_storage(VB2_NV_DEBUG_RESET_MODE, value)) + return 0; + return VbSetCmosRebootField(CMOSRF_DEBUG_RESET, value); + } else if (!strcasecmp(name,"fwb_tries")) { + if (0 == vb2_set_nv_storage(VB2_NV_TRY_COUNT, value)) + return 0; + return VbSetCmosRebootField(CMOSRF_TRY_B, value); + } + /* Firmware update tries is now stored in the kernel field. On + * older systems where it's not, it was stored in a file in the + * stateful partition. */ + else if (!strcasecmp(name,"fwupdate_tries")) { + if (-1 != vb2_get_nv_storage(VB2_NV_KERNEL_FIELD)) + return -1; /* NvStorage supported; fail through + * arch-specific implementation to normal + * implementation */ + + if (value) { + char buf[32]; + snprintf(buf, sizeof(buf), "%d", value); + return WriteFile(NEED_FWUPDATE_PATH, buf, strlen(buf)); + } else { + /* No update tries, so remove file if it exists. */ + unlink(NEED_FWUPDATE_PATH); + return 0; + } + } + + return -1; +} + +int VbSetArchPropertyString(const char* name, const char* value) +{ + /* If there were settable architecture-dependent string properties, + * they'd be here. */ + return -1; +} diff --git a/host/arch/x86_64/lib/crossystem_arch.c b/host/arch/x86_64/lib/crossystem_arch.c new file mode 120000 index 0000000..1f5d652 --- /dev/null +++ b/host/arch/x86_64/lib/crossystem_arch.c @@ -0,0 +1 @@ +../../x86/lib/crossystem_arch.c \ No newline at end of file diff --git a/host/include/cgpt_params.h b/host/include/cgpt_params.h new file mode 100644 index 0000000..b17a0b4 --- /dev/null +++ b/host/include/cgpt_params.h @@ -0,0 +1,142 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_CGPT_PARAMS_H_ +#define VBOOT_REFERENCE_CGPT_PARAMS_H_ + +#include + +#include "gpt.h" + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +enum { + CGPT_OK = 0, + CGPT_FAILED, +}; + +typedef struct CgptCreateParams { + const char *drive_name; + uint64_t drive_size; + int zap; + uint64_t padding; +} CgptCreateParams; + +typedef struct CgptAddParams { + const char *drive_name; + uint64_t drive_size; + uint32_t partition; + uint64_t begin; + uint64_t size; + Guid type_guid; + Guid unique_guid; + const char *label; + int successful; + int tries; + int priority; + int required; + int legacy_boot; + uint32_t raw_value; + int set_begin; + int set_size; + int set_type; + int set_unique; + int set_successful; + int set_tries; + int set_priority; + int set_required; + int set_legacy_boot; + int set_raw; +} CgptAddParams; + +typedef struct CgptEditParams { + const char *drive_name; + uint64_t drive_size; + Guid unique_guid; + int set_unique; +} CgptEditParams; + +typedef struct CgptShowParams { + const char *drive_name; + uint64_t drive_size; + int numeric; + int verbose; + int quick; + uint32_t partition; + int single_item; + int debug; + int num_partitions; +} CgptShowParams; + +typedef struct CgptRepairParams { + const char *drive_name; + uint64_t drive_size; + int verbose; +} CgptRepairParams; + +typedef struct CgptBootParams { + const char *drive_name; + uint64_t drive_size; + uint32_t partition; + const char *bootfile; + int create_pmbr; +} CgptBootParams; + +typedef struct CgptPrioritizeParams { + const char *drive_name; + uint64_t drive_size; + uint32_t set_partition; + int set_friends; + int max_priority; + int orig_priority; +} CgptPrioritizeParams; + +struct CgptFindParams; +typedef void (*CgptFindShowFn)(struct CgptFindParams *params, + const char *filename, int partnum, + GptEntry *entry); +typedef struct CgptFindParams { + const char *drive_name; + uint64_t drive_size; + int verbose; + int set_unique; + int set_type; + int set_label; + int oneonly; + int numeric; + uint8_t *matchbuf; + uint64_t matchlen; + uint64_t matchoffset; + uint8_t *comparebuf; + Guid unique_guid; + Guid type_guid; + const char *label; + int hits; + int match_partnum; /* 1-based; 0 means no match */ + /* when working with MTD, we actually work on a temp file, but we still + * need to print the device name. so this parameter is here to properly + * show the correct device name in that special case. */ + CgptFindShowFn show_fn; +} CgptFindParams; + +enum { + CGPT_LEGACY_MODE_LEGACY = 0, + CGPT_LEGACY_MODE_EFIPART, + CGPT_LEGACY_MODE_IGNORE_PRIMARY, +}; + +typedef struct CgptLegacyParams { + const char *drive_name; + uint64_t drive_size; + int mode; +} CgptLegacyParams; + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* VBOOT_REFERENCE_CGPT_PARAMS_H_ */ diff --git a/host/include/crossystem.h b/host/include/crossystem.h new file mode 100644 index 0000000..63e9ec7 --- /dev/null +++ b/host/include/crossystem.h @@ -0,0 +1,52 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_CROSSYSTEM_H_ +#define VBOOT_REFERENCE_CROSSYSTEM_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/* Recommended size for string property buffers used with + * VbGetSystemPropertyString(). */ +#define VB_MAX_STRING_PROPERTY ((size_t) 8192) + +/* Reads a system property integer. + * + * Returns the property value, or -1 if error. */ +int VbGetSystemPropertyInt(const char* name); + +/* Read a system property string into a destination buffer of the + * specified size. Returned string will be null-terminated. If the + * buffer is too small, the returned string will be truncated. + * + * The caller can expect an un-truncated value if the size provided is + * at least VB_MAX_STRING_PROPERTY. + * + * Returns the passed buffer, or NULL if error. */ +const char* VbGetSystemPropertyString(const char* name, char* dest, + size_t size); + +/* Sets a system property integer. + * + * Returns 0 if success, -1 if error. */ +int VbSetSystemPropertyInt(const char* name, int value); + +/* Set a system property string. + * + * The maximum length of the value accepted depends on the specific + * property, not on VB_MAX_STRING_PROPERTY. + * + * Returns 0 if success, -1 if error. */ +int VbSetSystemPropertyString(const char* name, const char* value); + +#ifdef __cplusplus +} +#endif + +#endif /* VBOOT_REFERENCE_CROSSYSTEM_H_ */ diff --git a/host/include/crossystem_vbnv.h b/host/include/crossystem_vbnv.h new file mode 100644 index 0000000..2f24618 --- /dev/null +++ b/host/include/crossystem_vbnv.h @@ -0,0 +1,35 @@ +/* Copyright 2016 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * vboot nv storage related functions exported for use by userspace programs + */ + +#ifndef VBOOT_REFERENCE_CROSSYSTEM_VBNV_H_ +#define VBOOT_REFERENCE_CROSSYSTEM_VBNV_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +struct vb2_context; + +/** + * Attempt to read non-volatile storage using flashrom. + * + * Returns 0 if success, non-zero if error. + */ +int vb2_read_nv_storage_flashrom(struct vb2_context *ctx); + +/** + * Attempt to write non-volatile storage using flashrom. + * + * Returns 0 if success, non-zero if error. + */ +int vb2_write_nv_storage_flashrom(struct vb2_context* ctx); + +#ifdef __cplusplus +} +#endif + +#endif /* VBOOT_REFERENCE_CROSSYSTEM_VBNV_H_ */ diff --git a/host/include/openssl_compat.h b/host/include/openssl_compat.h new file mode 100644 index 0000000..35bb250 --- /dev/null +++ b/host/include/openssl_compat.h @@ -0,0 +1,34 @@ +/* Copyright 2017 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_OPENSSL_COMPAT_H_ +#define VBOOT_REFERENCE_OPENSSL_COMPAT_H_ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#include + +#if OPENSSL_VERSION_NUMBER < 0x10100000L + +static inline void RSA_get0_key(const RSA *rsa, const BIGNUM **n, + const BIGNUM **e, const BIGNUM **d) +{ + if (n != NULL) + *n = rsa->n; + if (e != NULL) + *e = rsa->e; + if (d != NULL) + *d = rsa->d; +} + +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* VBOOT_REFERENCE_OPENSSL_COMPAT_H_ */ diff --git a/host/include/vboot_host.h b/host/include/vboot_host.h new file mode 100644 index 0000000..328c063 --- /dev/null +++ b/host/include/vboot_host.h @@ -0,0 +1,100 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * vboot-related functions exported for use by userspace programs + */ + +#ifndef VBOOT_REFERENCE_VBOOT_HOST_H_ +#define VBOOT_REFERENCE_VBOOT_HOST_H_ + +#include +#include +#include +#include + +#include "2crypto.h" +#include "cgpt_params.h" + +/****************************************************************************/ +/* EFI GPT manipulation */ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* partition table manipulation */ +int CgptCreate(CgptCreateParams *params); +int CgptAdd(CgptAddParams *params); +int CgptEdit(CgptEditParams *params); +int CgptSetAttributes(CgptAddParams *params); +int CgptGetPartitionDetails(CgptAddParams *params); +int CgptBoot(CgptBootParams *params); +int CgptGetBootPartitionNumber(CgptBootParams *params); +int CgptShow(CgptShowParams *params); +int CgptGetNumNonEmptyPartitions(CgptShowParams *params); +int CgptRepair(CgptRepairParams *params); +int CgptPrioritize(CgptPrioritizeParams *params); +void CgptFind(CgptFindParams *params); +int CgptLegacy(CgptLegacyParams *params); + +/* GUID conversion functions. Accepted format: + * + * "C12A7328-F81F-11D2-BA4B-00A0C93EC93B" + * + * At least GUID_STRLEN bytes should be reserved in 'str' (included the tailing + * '\0'). + */ +#define GUID_STRLEN 37 +int StrToGuid(const char *str, Guid *guid); +void GuidToStr(const Guid *guid, char *str, unsigned int buflen); +int GuidEqual(const Guid *guid1, const Guid *guid2); +int GuidIsZero(const Guid *guid); + + +/****************************************************************************/ +/* Kernel command line */ + +/* TODO(wfrichar): This needs a better location */ +#define MAX_KERNEL_CONFIG_SIZE 4096 + +/* Use this to obtain the body load address from the kernel preamble */ +#define USE_PREAMBLE_LOAD_ADDR (~0) + +/* Returns a new copy of the kernel cmdline. The caller must free it. */ +char *FindKernelConfig(const char *filename, + uint64_t kernel_body_load_address); + +/****************************************************************************/ +/* Kernel partition */ + +/* Used to get a bootable vmlinuz from the kernel partition. vmlinuz_out must + * be free'd after this function returns success. Success is indicated by a + * zero return value. + */ +int ExtractVmlinuz(void *kpart_data, size_t kpart_size, + void **vmlinuz_out, size_t *vmlinuz_size); + +/** + * Look up a signature algorithm by its string representation. + * + * @param str String representation of algo (e.g. "rsa2048" or "1") + * @param alg Output parameter that will be filled with found enum + * @return True if algorithm was found, false otherwise. + */ +bool vb2_lookup_sig_alg(const char *str, enum vb2_signature_algorithm *sig_alg); + +/** + * Look up a hash algorithm by its string representation. + * + * @param str String representation of algorithm (e.g. "sha1" or "1") + * @param alg Output parameter that will be filled with found enum + * @return True if algorithm was found, false otherwise. + */ +bool vb2_lookup_hash_alg(const char *str, enum vb2_hash_algorithm *hash_alg); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* VBOOT_REFERENCE_VBOOT_HOST_H_ */ diff --git a/host/lib/chromeos_config.c b/host/lib/chromeos_config.c new file mode 100644 index 0000000..6307318 --- /dev/null +++ b/host/lib/chromeos_config.c @@ -0,0 +1,108 @@ +/* Copyright 2020 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "2common.h" +#include "2return_codes.h" +#include "chromeos_config.h" +#include "host_misc.h" + +#define CHROMEOS_CONFIG_BASE "/run/chromeos-config/v1" + +vb2_error_t chromeos_config_get_string(const char *path, const char *property, + char **val_out) +{ + vb2_error_t rv; + uint32_t size; + char filepath[PATH_MAX]; + + *val_out = NULL; + + if (!path || path[0] != '/') { + VB2_DEBUG("Path parameter must begin with /"); + return VB2_ERROR_INVALID_PARAMETER; + } + + if (strstr(path, "//")) { + VB2_DEBUG("Path cannot contain //"); + return VB2_ERROR_INVALID_PARAMETER; + } + + if (strchr(property, '/')) { + VB2_DEBUG("Property cannot contain /"); + return VB2_ERROR_INVALID_PARAMETER; + } + + snprintf(filepath, sizeof(filepath), CHROMEOS_CONFIG_BASE "%s/%s", path, + property); + rv = vb2_read_file(filepath, (uint8_t **)val_out, &size); + + if (rv == VB2_SUCCESS) { + *val_out = realloc(*val_out, size + 1); + (*val_out)[size] = '\0'; + } + + return rv; +} + +vb2_error_t chromeos_config_get_boolean(const char *path, const char *property, + bool *val_out) +{ + char *val_string; + vb2_error_t rv; + + *val_out = false; + if ((rv = chromeos_config_get_string(path, property, &val_string)) != + VB2_SUCCESS) + return rv; + + if (!strcmp(val_string, "false")) + goto exit; + + if (!strcmp(val_string, "true")) { + *val_out = true; + goto exit; + } + + VB2_DEBUG("Config entry is not a boolean: %s:%s", path, property); + rv = VB2_ERROR_INVALID_PARAMETER; + + exit: + free(val_string); + return rv; +} + +vb2_error_t chromeos_config_get_integer(const char *path, const char *property, + int *val_out) +{ + char *endptr; + char *val_string; + vb2_error_t rv; + + *val_out = -1; + if ((rv = chromeos_config_get_string(path, property, &val_string)) != + VB2_SUCCESS) + goto exit; + + errno = 0; + *val_out = strtol(val_string, &endptr, 10); + if (errno || endptr) { + VB2_DEBUG("Config entry is not an integer: %s:%s", path, + property); + rv = VB2_ERROR_INVALID_PARAMETER; + goto exit; + } + + exit: + free(val_string); + return rv; +} diff --git a/host/lib/crossystem.c b/host/lib/crossystem.c new file mode 100644 index 0000000..7c3ee87 --- /dev/null +++ b/host/lib/crossystem.c @@ -0,0 +1,878 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "2api.h" +#include "2common.h" +#include "2nvstorage.h" +#include "2sysincludes.h" +#include "chromeos_config.h" +#include "crossystem_arch.h" +#include "crossystem.h" +#include "crossystem_vbnv.h" +#include "host_common.h" +#include "flashrom.h" +#include "subprocess.h" +#include "vboot_struct.h" + +/* Filename for crossystem lock */ +#define CROSSYSTEM_LOCK_PATH "/run/lock/crossystem.lock" + +/* Filename for kernel command line */ +#define KERNEL_CMDLINE_PATH "/proc/cmdline" + +/* Filename for the TPM simulator NV data */ +#define TPM_SIMULATOR_NVCHIP_PATH \ + "/mnt/stateful_partition/unencrypted/tpm2-simulator/NVChip" + +/* Fields that GetVdatString() can get */ +typedef enum VdatStringField { + VDAT_STRING_DEPRECATED_TIMERS = 0, /* Timer values */ + VDAT_STRING_LOAD_FIRMWARE_DEBUG, /* LoadFirmware() debug info */ + VDAT_STRING_DEPRECATED_LOAD_KERNEL_DEBUG, /* LoadKernel() debug info */ + VDAT_STRING_MAINFW_ACT /* Active main firmware */ +} VdatStringField; + + +/* Fields that GetVdatInt() can get */ +typedef enum VdatIntField { + VDAT_INT_FLAGS = 0, /* Flags */ + VDAT_INT_HEADER_VERSION, /* Header version for VbSharedData */ + VDAT_INT_DEVSW_BOOT, /* Dev switch position at boot */ + VDAT_INT_RECSW_BOOT, /* Recovery switch position at boot */ + VDAT_INT_HW_WPSW_BOOT, /* Hardware WP switch position at boot */ + + VDAT_INT_FW_VERSION_TPM, /* Current firmware version in TPM */ + VDAT_INT_KERNEL_VERSION_TPM, /* Current kernel version in TPM */ + VDAT_INT_TRIED_FIRMWARE_B, /* Tried firmware B due to fwb_tries */ + VDAT_INT_KERNEL_KEY_VERIFIED, /* Kernel key verified using + * signature, not just hash */ + VDAT_INT_RECOVERY_REASON, /* Recovery reason for current boot */ + VDAT_INT_FW_BOOT2 /* Firmware selection by vboot2 */ +} VdatIntField; + + +/* Description of build options that may be specified on the + * kernel command line. */ +typedef enum VbBuildOption { + VB_BUILD_OPTION_UNKNOWN, + VB_BUILD_OPTION_DEBUG, + VB_BUILD_OPTION_NODEBUG +} VbBuildOption; + +static const char *fw_results[] = {"unknown", "trying", "success", "failure"}; +static const char *default_boot[] = {"disk", "usb", "altfw"}; + +/* Masks for kern_nv usage by kernel. */ +#define KERN_NV_FWUPDATE_TRIES_MASK 0x000F +#define KERN_NV_BLOCK_DEVMODE_FLAG 0x0010 +#define KERN_NV_TPM_ATTACK_FLAG 0x0020 +/* If you want to use the remaining currently-unused bits in kern_nv + * for something kernel-y, define a new field (the way we did for + * fwupdate_tries). Don't just modify kern_nv directly, because that + * makes it too easy to accidentally corrupt other sub-fields. */ +#define KERN_NV_CURRENTLY_UNUSED 0xFFC0 + +/* Return true if the FWID starts with the specified string. */ +int FwidStartsWith(const char *start) +{ + char fwid[VB_MAX_STRING_PROPERTY]; + if (!VbGetSystemPropertyString("fwid", fwid, sizeof(fwid))) + return 0; + + return 0 == strncmp(fwid, start, strlen(start)); +} + +/* Acquire the lock for crossystem SetSystemProperty call. */ +static int AcquireCrossystemLock(void) +{ + int lock_fd; + + lock_fd = open(CROSSYSTEM_LOCK_PATH, O_RDWR | O_CREAT, 0600); + if (lock_fd < 0) + return -1; + + if (flock(lock_fd, LOCK_EX) < 0) + return -1; + + return lock_fd; +} + +/* Release the lock for crossystem SetSystemProperty call. */ +static int ReleaseCrossystemLock(int lock_fd) +{ + if (flock(lock_fd, F_UNLCK) < 0) + return -1; + + close(lock_fd); + + return 0; +} + +static struct vb2_context *get_fake_context(void) +{ + static uint8_t fake_workbuf[sizeof(struct vb2_shared_data) + 16] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + static struct vb2_context *fake_ctx; + + if (fake_ctx) + return fake_ctx; + + vb2api_init(fake_workbuf, sizeof(fake_workbuf), &fake_ctx); + + return fake_ctx; +} + +static int vnc_read; + +int vb2_get_nv_storage(enum vb2_nv_param param) +{ + VbSharedDataHeader* sh = VbSharedDataRead(); + struct vb2_context *ctx = get_fake_context(); + + if (!sh) + return -1; + + /* TODO: locking around NV access */ + if (!vnc_read) { + if (sh && sh->flags & VBSD_NVDATA_V2) + ctx->flags |= VB2_CONTEXT_NVDATA_V2; + if (0 != vb2_read_nv_storage(ctx)) { + free(sh); + return -1; + } + vb2_nv_init(ctx); + + /* TODO: If vnc.raw_changed, attempt to reopen NVRAM for write + * and save the new defaults. If we're able to, log. */ + + vnc_read = 1; + } + + free(sh); + return (int)vb2_nv_get(ctx, param); +} + +int vb2_set_nv_storage(enum vb2_nv_param param, int value) +{ + VbSharedDataHeader* sh = VbSharedDataRead(); + struct vb2_context *ctx = get_fake_context(); + + if (!sh) + return -1; + + /* TODO: locking around NV access */ + if (sh && sh->flags & VBSD_NVDATA_V2) + ctx->flags |= VB2_CONTEXT_NVDATA_V2; + if (0 != vb2_read_nv_storage(ctx)) { + free(sh); + return -1; + } + vb2_nv_init(ctx); + vb2_nv_set(ctx, param, (uint32_t)value); + + if (ctx->flags & VB2_CONTEXT_NVDATA_CHANGED) { + vnc_read = 0; + if (0 != vb2_write_nv_storage(ctx)) { + free(sh); + return -1; + } + } + + /* Success */ + free(sh); + return 0; +} + +/* + * Set a param value, and try to flag it for persistent backup. It's okay if + * backup isn't supported (which it isn't, in current designs). It's + * best-effort only. + */ +static int vb2_set_nv_storage_with_backup(enum vb2_nv_param param, int value) +{ + int retval; + retval = vb2_set_nv_storage(param, value); + if (!retval) + vb2_set_nv_storage(VB2_NV_BACKUP_NVRAM_REQUEST, 1); + return retval; +} + +/* Find what build/debug status is specified on the kernel command + * line, if any. */ +static VbBuildOption VbScanBuildOption(void) +{ + FILE* f = NULL; + char buf[4096] = ""; + char *t, *saveptr; + const char *delimiters = " \r\n"; + + f = fopen(KERNEL_CMDLINE_PATH, "r"); + if (NULL != f) { + if (NULL == fgets(buf, sizeof(buf), f)) + buf[0] = 0; + fclose(f); + } + for (t = strtok_r(buf, delimiters, &saveptr); t; + t = strtok_r(NULL, delimiters, &saveptr)) { + if (0 == strcmp(t, "cros_debug")) + return VB_BUILD_OPTION_DEBUG; + else if (0 == strcmp(t, "cros_nodebug")) + return VB_BUILD_OPTION_NODEBUG; + } + + return VB_BUILD_OPTION_UNKNOWN; +} + +/* Determine whether the running OS image was built for debugging. + * Returns 1 if yes, 0 if no or indeterminate. */ +static vb2_error_t VbGetDebugBuild(void) +{ + return VB_BUILD_OPTION_DEBUG == VbScanBuildOption(); +} + +/* Determine whether OS-level debugging should be allowed. + * Returns 1 if yes, 0 if no or indeterminate. */ +static int VbGetCrosDebug(void) +{ + /* If the currently running system specifies its debug status, use + * that in preference to other indicators. */ + VbBuildOption option = VbScanBuildOption(); + if (VB_BUILD_OPTION_DEBUG == option) { + return 1; + } else if (VB_BUILD_OPTION_NODEBUG == option) { + return 0; + } + + /* Command line is silent; allow debug if the dev switch is on. */ + if (1 == VbGetSystemPropertyInt("devsw_boot")) + return 1; + + /* All other cases disallow debug. */ + return 0; +} + +static char *GetVdatLoadFirmwareDebug(char *dest, int size, + const VbSharedDataHeader *sh) +{ + snprintf(dest, size, + "Check A result=%d\n" + "Check B result=%d\n" + "Firmware index booted=0x%02x\n" + "TPM combined version at start=0x%08x\n" + "Lowest combined version from firmware=0x%08x\n", + sh->check_fw_a_result, + sh->check_fw_b_result, + sh->firmware_index, + sh->fw_version_tpm_start, + sh->fw_version_lowest); + return dest; +} + +static char *GetVdatString(char *dest, int size, VdatStringField field) +{ + VbSharedDataHeader *sh = VbSharedDataRead(); + char *value = dest; + + if (!sh) + return NULL; + + switch (field) { + case VDAT_STRING_LOAD_FIRMWARE_DEBUG: + value = GetVdatLoadFirmwareDebug(dest, size, sh); + break; + + case VDAT_STRING_MAINFW_ACT: + switch(sh->firmware_index) { + case 0: + StrCopy(dest, "A", size); + break; + case 1: + StrCopy(dest, "B", size); + break; + case 0xFF: + StrCopy(dest, "recovery", size); + break; + default: + value = NULL; + } + break; + + default: + value = NULL; + break; + } + + free(sh); + return value; +} + +static int GetVdatInt(VdatIntField field) +{ + VbSharedDataHeader* sh = VbSharedDataRead(); + int value = -1; + + if (!sh) + return -1; + + /* Fields supported in version 1 */ + switch (field) { + case VDAT_INT_FLAGS: + value = (int)sh->flags; + break; + case VDAT_INT_HEADER_VERSION: + value = sh->struct_version; + break; + case VDAT_INT_TRIED_FIRMWARE_B: + value = (sh->flags & VBSD_FWB_TRIED ? 1 : 0); + break; + case VDAT_INT_KERNEL_KEY_VERIFIED: + value = (sh->flags & VBSD_KERNEL_KEY_VERIFIED ? 1 : 0); + break; + case VDAT_INT_FW_VERSION_TPM: + value = (int)sh->fw_version_tpm; + break; + case VDAT_INT_KERNEL_VERSION_TPM: + value = (int)sh->kernel_version_tpm; + break; + case VDAT_INT_FW_BOOT2: + value = (sh->flags & VBSD_BOOT_FIRMWARE_VBOOT2 ? 1 : 0); + VBOOT_FALLTHROUGH; + default: + break; + } + + /* Fields added in struct version 2 */ + if (sh->struct_version >= 2) { + switch(field) { + case VDAT_INT_DEVSW_BOOT: + value = (sh->flags & + VBSD_BOOT_DEV_SWITCH_ON ? 1 : 0); + break; + case VDAT_INT_RECSW_BOOT: + value = (sh->flags & + VBSD_BOOT_REC_SWITCH_ON ? 1 : 0); + break; + case VDAT_INT_HW_WPSW_BOOT: + value = (sh->flags & + VBSD_BOOT_FIRMWARE_WP_ENABLED ? 1 : 0); + break; + case VDAT_INT_RECOVERY_REASON: + value = sh->recovery_reason; + break; + default: + break; + } + } + + free(sh); + return value; +} + +/* Return version of VbSharedData struct or -1 if not found. */ +int VbSharedDataVersion(void) +{ + return GetVdatInt(VDAT_INT_HEADER_VERSION); +} + +int VbGetSystemPropertyInt(const char *name) +{ + int value = -1; + + /* Check architecture-dependent properties first */ + value = VbGetArchPropertyInt(name); + if (-1 != value) + return value; + + /* NV storage values */ + else if (!strcasecmp(name,"kern_nv")) { + value = vb2_get_nv_storage(VB2_NV_KERNEL_FIELD); + } else if (!strcasecmp(name,"nvram_cleared")) { + value = vb2_get_nv_storage(VB2_NV_KERNEL_SETTINGS_RESET); + } else if (!strcasecmp(name,"recovery_request")) { + value = vb2_get_nv_storage(VB2_NV_RECOVERY_REQUEST); + } else if (!strcasecmp(name,"diagnostic_request")) { + value = vb2_get_nv_storage(VB2_NV_DIAG_REQUEST); + } else if (!strcasecmp(name,"dbg_reset")) { + value = vb2_get_nv_storage(VB2_NV_DEBUG_RESET_MODE); + } else if (!strcasecmp(name,"disable_dev_request")) { + value = vb2_get_nv_storage(VB2_NV_DISABLE_DEV_REQUEST); + } else if (!strcasecmp(name,"clear_tpm_owner_request")) { + if (TPM2_SIMULATOR) + /* Check TPM simulator NVChip status */ + value = access(TPM_SIMULATOR_NVCHIP_PATH, F_OK) != 0; + else + value = vb2_get_nv_storage( + VB2_NV_CLEAR_TPM_OWNER_REQUEST); + } else if (!strcasecmp(name,"clear_tpm_owner_done")) { + value = vb2_get_nv_storage(VB2_NV_CLEAR_TPM_OWNER_DONE); + } else if (!strcasecmp(name,"tpm_rebooted")) { + value = vb2_get_nv_storage(VB2_NV_TPM_REQUESTED_REBOOT); + } else if (!strcasecmp(name,"fwb_tries") || + !strcasecmp(name,"fw_try_count")) { + value = vb2_get_nv_storage(VB2_NV_TRY_COUNT); + } else if (!strcasecmp(name,"fw_vboot2")) { + value = GetVdatInt(VDAT_INT_FW_BOOT2); + } else if (!strcasecmp(name,"fwupdate_tries")) { + value = vb2_get_nv_storage(VB2_NV_KERNEL_FIELD); + if (value != -1) + value &= KERN_NV_FWUPDATE_TRIES_MASK; + } else if (!strcasecmp(name,"block_devmode")) { + value = vb2_get_nv_storage(VB2_NV_KERNEL_FIELD); + if (value != -1) { + value &= KERN_NV_BLOCK_DEVMODE_FLAG; + value = !!value; + } + } else if (!strcasecmp(name,"tpm_attack")) { + value = vb2_get_nv_storage(VB2_NV_KERNEL_FIELD); + if (value != -1) { + value &= KERN_NV_TPM_ATTACK_FLAG; + value = !!value; + } + } else if (!strcasecmp(name,"loc_idx")) { + value = vb2_get_nv_storage(VB2_NV_LOCALIZATION_INDEX); + } else if (!strcasecmp(name,"backup_nvram_request")) { + value = vb2_get_nv_storage(VB2_NV_BACKUP_NVRAM_REQUEST); + } else if (!strcasecmp(name,"dev_boot_usb")) { + value = vb2_get_nv_storage(VB2_NV_DEV_BOOT_EXTERNAL); + } else if (!strcasecmp(name,"dev_boot_altfw") || + !strcasecmp(name,"dev_boot_legacy")) { + value = vb2_get_nv_storage(VB2_NV_DEV_BOOT_ALTFW); + } else if (!strcasecmp(name,"dev_boot_signed_only")) { + value = vb2_get_nv_storage(VB2_NV_DEV_BOOT_SIGNED_ONLY); + } else if (!strcasecmp(name,"dev_enable_udc")) { + value = vb2_get_nv_storage(VB2_NV_DEV_ENABLE_UDC); + } else if (!strcasecmp(name,"display_request")) { + value = vb2_get_nv_storage(VB2_NV_DISPLAY_REQUEST); + } else if (!strcasecmp(name,"recovery_subcode")) { + value = vb2_get_nv_storage(VB2_NV_RECOVERY_SUBCODE); + } else if (!strcasecmp(name,"wipeout_request")) { + value = vb2_get_nv_storage(VB2_NV_REQ_WIPEOUT); + } else if (!strcasecmp(name,"kernel_max_rollforward")) { + value = vb2_get_nv_storage(VB2_NV_KERNEL_MAX_ROLLFORWARD); + } + /* Other parameters */ + else if (!strcasecmp(name,"cros_debug")) { + value = VbGetCrosDebug(); + } else if (!strcasecmp(name,"debug_build")) { + value = VbGetDebugBuild(); + } else if (!strcasecmp(name,"devsw_boot")) { + value = GetVdatInt(VDAT_INT_DEVSW_BOOT); + } else if (!strcasecmp(name, "recoverysw_boot")) { + value = GetVdatInt(VDAT_INT_RECSW_BOOT); + } else if (!strcasecmp(name, "wpsw_cur")) { + /* Use "write-protect at boot" as a fallback value. */ + value = GetVdatInt(VDAT_INT_HW_WPSW_BOOT); + } else if (!strcasecmp(name,"vdat_flags")) { + value = GetVdatInt(VDAT_INT_FLAGS); + } else if (!strcasecmp(name,"tpm_fwver")) { + value = GetVdatInt(VDAT_INT_FW_VERSION_TPM); + } else if (!strcasecmp(name,"tpm_kernver")) { + value = GetVdatInt(VDAT_INT_KERNEL_VERSION_TPM); + } else if (!strcasecmp(name,"tried_fwb")) { + value = GetVdatInt(VDAT_INT_TRIED_FIRMWARE_B); + } else if (!strcasecmp(name,"recovery_reason")) { + value = GetVdatInt(VDAT_INT_RECOVERY_REASON); + } else if (!strcasecmp(name, "boot_on_ac_detect")) { + value = vb2_get_nv_storage(VB2_NV_BOOT_ON_AC_DETECT); + } else if (!strcasecmp(name, "try_ro_sync")) { + value = vb2_get_nv_storage(VB2_NV_TRY_RO_SYNC); + } else if (!strcasecmp(name, "battery_cutoff_request")) { + value = vb2_get_nv_storage(VB2_NV_BATTERY_CUTOFF_REQUEST); + } else if (!strcasecmp(name, "inside_vm")) { + /* Detect if the host is a VM. If there is no HWID and the + * firmware type is "nonchrome", then assume it is a VM. If + * HWID is present, it is a baremetal Chrome OS machine. Other + * cases are errors. */ + char hwid[VB_MAX_STRING_PROPERTY]; + if (!VbGetSystemPropertyString("hwid", hwid, sizeof(hwid))) { + char fwtype_buf[VB_MAX_STRING_PROPERTY]; + const char *fwtype = VbGetSystemPropertyString( + "mainfw_type", fwtype_buf, sizeof(fwtype_buf)); + if (fwtype && !strcasecmp(fwtype, "nonchrome")) { + value = 1; + } + } else { + value = 0; + } + } else if (!strcasecmp(name, "post_ec_sync_delay")) { + value = vb2_get_nv_storage(VB2_NV_POST_EC_SYNC_DELAY); + } + + return value; +} + +const char *VbGetSystemPropertyString(const char *name, char *dest, size_t size) +{ + /* Check for HWID override via cros_config */ + if (!strcasecmp(name, "hwid")) { + char *hwid_override; + + if (chromeos_config_get_string("/", "hwid-override", + &hwid_override) == VB2_SUCCESS) { + StrCopy(dest, hwid_override, size); + free(hwid_override); + return dest; + } + } + + /* Check architecture-dependent properties */ + if (VbGetArchPropertyString(name, dest, size)) + return dest; + + if (!strcasecmp(name,"kernkey_vfy")) { + switch(GetVdatInt(VDAT_INT_KERNEL_KEY_VERIFIED)) { + case 0: + return "hash"; + case 1: + return "sig"; + default: + return NULL; + } + } else if (!strcasecmp(name, "mainfw_act")) { + return GetVdatString(dest, size, VDAT_STRING_MAINFW_ACT); + } else if (!strcasecmp(name, "vdat_lfdebug")) { + return GetVdatString(dest, size, + VDAT_STRING_LOAD_FIRMWARE_DEBUG); + } else if (!strcasecmp(name, "fw_try_next")) { + return vb2_get_nv_storage(VB2_NV_TRY_NEXT) ? "B" : "A"; + } else if (!strcasecmp(name, "fw_tried")) { + return vb2_get_nv_storage(VB2_NV_FW_TRIED) ? "B" : "A"; + } else if (!strcasecmp(name, "fw_result")) { + int v = vb2_get_nv_storage(VB2_NV_FW_RESULT); + if (v < ARRAY_SIZE(fw_results)) + return fw_results[v]; + else + return "unknown"; + } else if (!strcasecmp(name, "fw_prev_tried")) { + return vb2_get_nv_storage(VB2_NV_FW_PREV_TRIED) ? "B" : "A"; + } else if (!strcasecmp(name, "fw_prev_result")) { + int v = vb2_get_nv_storage(VB2_NV_FW_PREV_RESULT); + if (v < ARRAY_SIZE(fw_results)) + return fw_results[v]; + else + return "unknown"; + } else if (!strcasecmp(name,"dev_default_boot")) { + int v = vb2_get_nv_storage(VB2_NV_DEV_DEFAULT_BOOT); + if (v < ARRAY_SIZE(default_boot)) + return default_boot[v]; + else + return "unknown"; + } else if (!strcasecmp(name, "minios_priority")) { + return vb2_get_nv_storage(VB2_NV_MINIOS_PRIORITY) ? "B" : "A"; + } + + return NULL; +} + +static int VbSetSystemPropertyIntInternal(const char *name, int value) +{ + /* Check architecture-dependent properties first */ + + if (0 == VbSetArchPropertyInt(name, value)) + return 0; + + /* NV storage values */ + if (!strcasecmp(name,"nvram_cleared")) { + /* Can only clear this flag; it's set inside the NV storage + * library. */ + return vb2_set_nv_storage(VB2_NV_KERNEL_SETTINGS_RESET, 0); + } else if (!strcasecmp(name,"recovery_request")) { + return vb2_set_nv_storage(VB2_NV_RECOVERY_REQUEST, value); + } else if (!strcasecmp(name,"diagnostic_request")) { + return vb2_set_nv_storage(VB2_NV_DIAG_REQUEST, value); + } else if (!strcasecmp(name,"recovery_subcode")) { + return vb2_set_nv_storage(VB2_NV_RECOVERY_SUBCODE, value); + } else if (!strcasecmp(name,"dbg_reset")) { + return vb2_set_nv_storage(VB2_NV_DEBUG_RESET_MODE, value); + } else if (!strcasecmp(name,"disable_dev_request")) { + return vb2_set_nv_storage(VB2_NV_DISABLE_DEV_REQUEST, value); + } else if (!strcasecmp(name,"clear_tpm_owner_request")) { + if (TPM2_SIMULATOR) { + /* We don't support to set clear_tpm_owner_request to 0 + * on simulator */ + if (value == 0) + return -1; + /* Check TPM simulator data status */ + if (!access(TPM_SIMULATOR_NVCHIP_PATH, F_OK)) { + /* Remove the TPM2.0 simulator data */ + return remove(TPM_SIMULATOR_NVCHIP_PATH); + } else { + /* Return success when the file is already + * removed */ + return 0; + } + } else { + return vb2_set_nv_storage( + VB2_NV_CLEAR_TPM_OWNER_REQUEST, value); + } + } else if (!strcasecmp(name,"clear_tpm_owner_done")) { + /* Can only clear this flag; it's set by firmware. */ + return vb2_set_nv_storage(VB2_NV_CLEAR_TPM_OWNER_DONE, 0); + } else if (!strcasecmp(name,"fwb_tries") || + !strcasecmp(name,"fw_try_count")) { + return vb2_set_nv_storage(VB2_NV_TRY_COUNT, value); + } else if (!strcasecmp(name,"display_request")) { + return vb2_set_nv_storage(VB2_NV_DISPLAY_REQUEST, value); + } else if (!strcasecmp(name,"wipeout_request")) { + /* Can only clear this flag, set only by firmware. */ + return vb2_set_nv_storage(VB2_NV_REQ_WIPEOUT, 0); + } else if (!strcasecmp(name,"backup_nvram_request")) { + /* Best-effort only, since it requires firmware and TPM + * support. */ + return vb2_set_nv_storage(VB2_NV_BACKUP_NVRAM_REQUEST, value); + } else if (!strcasecmp(name,"fwupdate_tries")) { + int kern_nv = vb2_get_nv_storage(VB2_NV_KERNEL_FIELD); + if (kern_nv == -1) + return -1; + kern_nv &= ~KERN_NV_FWUPDATE_TRIES_MASK; + kern_nv |= (value & KERN_NV_FWUPDATE_TRIES_MASK); + return vb2_set_nv_storage_with_backup( + VB2_NV_KERNEL_FIELD, kern_nv); + } else if (!strcasecmp(name,"block_devmode")) { + int kern_nv = vb2_get_nv_storage(VB2_NV_KERNEL_FIELD); + if (kern_nv == -1) + return -1; + kern_nv &= ~KERN_NV_BLOCK_DEVMODE_FLAG; + if (value) + kern_nv |= KERN_NV_BLOCK_DEVMODE_FLAG; + return vb2_set_nv_storage_with_backup( + VB2_NV_KERNEL_FIELD, kern_nv); + } else if (!strcasecmp(name,"tpm_attack")) { + /* This value should only be read and cleared, but we allow + * setting it to 1 for testing. */ + int kern_nv = vb2_get_nv_storage(VB2_NV_KERNEL_FIELD); + if (kern_nv == -1) + return -1; + kern_nv &= ~KERN_NV_TPM_ATTACK_FLAG; + if (value) + kern_nv |= KERN_NV_TPM_ATTACK_FLAG; + return vb2_set_nv_storage_with_backup( + VB2_NV_KERNEL_FIELD, kern_nv); + } else if (!strcasecmp(name,"loc_idx")) { + return vb2_set_nv_storage_with_backup( + VB2_NV_LOCALIZATION_INDEX, value); + } else if (!strcasecmp(name,"dev_boot_usb")) { + return vb2_set_nv_storage_with_backup( + VB2_NV_DEV_BOOT_EXTERNAL, value); + } else if (!strcasecmp(name,"dev_boot_altfw") || + !strcasecmp(name,"dev_boot_legacy")) { + return vb2_set_nv_storage_with_backup( + VB2_NV_DEV_BOOT_ALTFW, value); + } else if (!strcasecmp(name,"dev_boot_signed_only")) { + return vb2_set_nv_storage_with_backup( + VB2_NV_DEV_BOOT_SIGNED_ONLY, value); + } else if (!strcasecmp(name, "dev_enable_udc")) { + return vb2_set_nv_storage_with_backup( + VB2_NV_DEV_ENABLE_UDC, value); + } else if (!strcasecmp(name, "boot_on_ac_detect")) { + return vb2_set_nv_storage_with_backup( + VB2_NV_BOOT_ON_AC_DETECT, value); + } else if (!strcasecmp(name, "try_ro_sync")) { + return vb2_set_nv_storage_with_backup( + VB2_NV_TRY_RO_SYNC, value); + } else if (!strcasecmp(name, "battery_cutoff_request")) { + return vb2_set_nv_storage(VB2_NV_BATTERY_CUTOFF_REQUEST, value); + } else if (!strcasecmp(name,"kernel_max_rollforward")) { + return vb2_set_nv_storage(VB2_NV_KERNEL_MAX_ROLLFORWARD, value); + } else if (!strcasecmp(name, "post_ec_sync_delay")) { + return vb2_set_nv_storage(VB2_NV_POST_EC_SYNC_DELAY, value); + } + + return -1; +} + +int VbSetSystemPropertyInt(const char *name, int value) +{ + int result = -1; + int lock_fd; + + lock_fd = AcquireCrossystemLock(); + if (lock_fd < 0) + return -1; + + result = VbSetSystemPropertyIntInternal(name, value); + + if (ReleaseCrossystemLock(lock_fd) < 0) + return -1; + + return result; +} + +static int VbSetSystemPropertyStringInternal(const char *name, + const char *value) +{ + /* Chain to architecture-dependent properties */ + if (0 == VbSetArchPropertyString(name, value)) + return 0; + + if (!strcasecmp(name, "fw_try_next")) { + if (!strcasecmp(value, "A")) + return vb2_set_nv_storage(VB2_NV_TRY_NEXT, 0); + else if (!strcasecmp(value, "B")) + return vb2_set_nv_storage(VB2_NV_TRY_NEXT, 1); + else + return -1; + } else if (!strcasecmp(name, "minios_priority")) { + if (!strcasecmp(value, "A")) + return vb2_set_nv_storage(VB2_NV_MINIOS_PRIORITY, 0); + else if (!strcasecmp(value, "B")) + return vb2_set_nv_storage(VB2_NV_MINIOS_PRIORITY, 1); + else + return -1; + } else if (!strcasecmp(name, "fw_result")) { + int i; + + for (i = 0; i < ARRAY_SIZE(fw_results); i++) { + if (!strcasecmp(value, fw_results[i])) + return vb2_set_nv_storage(VB2_NV_FW_RESULT, i); + } + return -1; + } else if (!strcasecmp(name, "dev_default_boot")) { + int i; + + /* "legacy" term deprecated in favour of "altfw" + (see: b/179458327) */ + if (!strcasecmp(value, "legacy")) { + fprintf(stderr, + "!!!\n" + "!!! PLEASE USE 'altfw' INSTEAD OF 'legacy'\n" + "!!!\n"); + value = "altfw"; + } + + for (i = 0; i < ARRAY_SIZE(default_boot); i++) { + if (!strcasecmp(value, default_boot[i])) + return vb2_set_nv_storage( + VB2_NV_DEV_DEFAULT_BOOT, i); + } + return -1; + } + + return -1; +} + +int VbSetSystemPropertyString(const char *name, const char *value) +{ + int result = -1; + int lock_fd; + + lock_fd = AcquireCrossystemLock(); + if (lock_fd < 0) + return -1; + + result = VbSetSystemPropertyStringInternal(name, value); + + if (ReleaseCrossystemLock(lock_fd) < 0) + return -1; + + return result; +} + +/** + * Get index of the last valid VBNV entry in an EEPROM. + * + * @param buf Pointer to the beginning of the EEPROM. + * @param buf_sz Size of the EEPROM. + * @param vbnv_size The size of a single VBNV entry for this device. + * + * @return The index of the last valid VBNV entry on success, or -1 on + * failure. + */ +static int vb2_nv_index(const uint8_t *buf, uint32_t buf_sz, int vbnv_size) +{ + int index; + uint8_t blank[VB2_NVDATA_SIZE_V2]; + + /* The size of the buffer should be an even multiple of the + VBNV size. */ + if (buf_sz % vbnv_size != 0) { + VB2_DIE("The VBNV in flash (%u bytes) is not an even multiple " + "of the VBNV size (%u bytes). This is likely a " + "firmware bug.\n", buf_sz, vbnv_size); + } + + memset(blank, 0xff, sizeof(blank)); + for (index = 0; index < buf_sz / vbnv_size; index++) { + if (!memcmp(blank, &buf[index * vbnv_size], vbnv_size)) + break; + } + + if (!index) { + fprintf(stderr, "VBNV is uninitialized.\n"); + return -1; + } + + return index - 1; +} + +#define VBNV_FMAP_REGION "RW_NVRAM" + +int vb2_read_nv_storage_flashrom(struct vb2_context *ctx) +{ + int index; + int vbnv_size = vb2_nv_get_size(ctx); + uint8_t *flash_buf; + uint32_t flash_size; + + if (flashrom_read(FLASHROM_PROGRAMMER_INTERNAL_AP, VBNV_FMAP_REGION, + &flash_buf, &flash_size)) + return -1; + + index = vb2_nv_index(flash_buf, flash_size, vbnv_size); + if (index < 0) { + free(flash_buf); + return -1; + } + + memcpy(ctx->nvdata, &flash_buf[index * vbnv_size], vbnv_size); + free(flash_buf); + return 0; +} + +int vb2_write_nv_storage_flashrom(struct vb2_context *ctx) +{ + int rv = 0; + int current_index; + int next_index; + int vbnv_size = vb2_nv_get_size(ctx); + uint8_t *flash_buf; + uint32_t flash_size; + + if (flashrom_read(FLASHROM_PROGRAMMER_INTERNAL_AP, VBNV_FMAP_REGION, + &flash_buf, &flash_size)) + return -1; + + current_index = vb2_nv_index(flash_buf, flash_size, vbnv_size); + if (current_index < 0) { + rv = -1; + goto exit; + } + + next_index = current_index + 1; + if (next_index * vbnv_size == flash_size) { + /* VBNV is full. Erase and write at beginning. */ + memset(flash_buf, 0xff, flash_size); + next_index = 0; + } + + memcpy(&flash_buf[next_index * vbnv_size], ctx->nvdata, vbnv_size); + if (flashrom_write(FLASHROM_PROGRAMMER_INTERNAL_AP, VBNV_FMAP_REGION, + flash_buf, flash_size)) { + rv = -1; + goto exit; + } + + exit: + free(flash_buf); + return rv; +} diff --git a/host/lib/crypto.c b/host/lib/crypto.c new file mode 100644 index 0000000..7103ed8 --- /dev/null +++ b/host/lib/crypto.c @@ -0,0 +1,44 @@ +/* Copyright 2020 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include + +#include "vboot_host.h" + +static int lookup_helper(const char *str, const char *table[], size_t size, + unsigned int *out) +{ + unsigned int algo; + char *e; + + /* try string first */ + for (algo = 0; algo < size; algo++) + if (table[algo] && !strcasecmp(table[algo], str)) + goto found; + + /* fine, try number */ + algo = strtoul(str, &e, 0); + if (!*str || (e && *e)) + /* that's not a number */ + return false; + if (algo >= size || !table[algo]) + /* that's not a valid algorithm */ + return false; + + found: + *out = algo; + return true; +} + +bool vb2_lookup_sig_alg(const char *str, enum vb2_signature_algorithm *sig_alg) +{ + return lookup_helper(str, vb2_sig_names, VB2_SIG_ALG_COUNT, sig_alg); +} + +bool vb2_lookup_hash_alg(const char *str, enum vb2_hash_algorithm *hash_alg) +{ + return lookup_helper(str, vb2_hash_names, VB2_HASH_ALG_COUNT, hash_alg); +} diff --git a/host/lib/extract_vmlinuz.c b/host/lib/extract_vmlinuz.c new file mode 100644 index 0000000..1260f11 --- /dev/null +++ b/host/lib/extract_vmlinuz.c @@ -0,0 +1,76 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Exports a vmlinuz from a kernel partition in memory. + */ + +#include +#include + +#include "2common.h" +#include "2struct.h" +#include "vboot_host.h" +#include "vboot_struct.h" + +int ExtractVmlinuz(void *kpart_data, size_t kpart_size, + void **vmlinuz_out, size_t *vmlinuz_size) { + size_t now = 0; + struct vb2_kernel_preamble *preamble = NULL; + uint8_t *kblob_data = NULL; + uint32_t kblob_size = 0; + uint32_t vmlinuz_header_size = 0; + uint64_t vmlinuz_header_address = 0; + uint64_t vmlinuz_header_offset = 0; + void *vmlinuz = NULL; + + struct vb2_keyblock *keyblock = (struct vb2_keyblock *)kpart_data; + now += keyblock->keyblock_size; + if (now > kpart_size) + return 1; + + preamble = (struct vb2_kernel_preamble *)(kpart_data + now); + now += preamble->preamble_size; + if (now > kpart_size) + return 1; + + kblob_data = kpart_data + now; + kblob_size = preamble->body_signature.data_size; + + if (!kblob_data || (now + kblob_size) > kpart_size) + return 1; + + if (preamble->header_version_minor > 0) { + vmlinuz_header_address = preamble->vmlinuz_header_address; + vmlinuz_header_size = preamble->vmlinuz_header_size; + } + + if (!vmlinuz_header_size || + kpart_data + vmlinuz_header_offset + vmlinuz_header_size > + kpart_data) { + return 1; + } + + // calculate the vmlinuz_header offset from + // the beginning of the kpart_data. The kblob doesn't + // include the body_load_offset, but does include + // the keyblock and preamble sections. + vmlinuz_header_offset = vmlinuz_header_address - + preamble->body_load_address + + keyblock->keyblock_size + + preamble->preamble_size; + + vmlinuz = malloc(vmlinuz_header_size + kblob_size); + if (vmlinuz == NULL) + return 1; + + memcpy(vmlinuz, kpart_data + vmlinuz_header_offset, + vmlinuz_header_size); + + memcpy(vmlinuz + vmlinuz_header_size, kblob_data, kblob_size); + + *vmlinuz_out = vmlinuz; + *vmlinuz_size = vmlinuz_header_size + kblob_size; + + return 0; +} diff --git a/host/lib/file_keys.c b/host/lib/file_keys.c new file mode 100644 index 0000000..7ae7180 --- /dev/null +++ b/host/lib/file_keys.c @@ -0,0 +1,42 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Utility functions for file and key handling. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "2common.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "file_keys.h" +#include "host_common.h" +#include "signature_digest.h" + +vb2_error_t DigestFile(char *input_file, enum vb2_hash_algorithm alg, + uint8_t *digest, uint32_t digest_size) +{ + int input_fd, len; + uint8_t data[VB2_SHA1_BLOCK_SIZE]; + struct vb2_digest_context ctx; + + if( (input_fd = open(input_file, O_RDONLY)) == -1 ) { + fprintf(stderr, "Couldn't open %s\n", input_file); + return VB2_ERROR_UNKNOWN; + } + vb2_digest_init(&ctx, alg); + while ((len = read(input_fd, data, sizeof(data))) == sizeof(data)) + vb2_digest_extend(&ctx, data, len); + if (len != -1) + vb2_digest_extend(&ctx, data, len); + close(input_fd); + + return vb2_digest_finalize(&ctx, digest, digest_size); +} diff --git a/host/lib/flashrom.c b/host/lib/flashrom.c new file mode 100644 index 0000000..e83dfb2 --- /dev/null +++ b/host/lib/flashrom.c @@ -0,0 +1,169 @@ +/* Copyright 2020 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* For strdup */ +#define _POSIX_C_SOURCE 200809L + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "2api.h" +#include "2return_codes.h" +#include "host_misc.h" +#include "flashrom.h" +#include "subprocess.h" + +#define FLASHROM_EXEC_NAME "flashrom" + +/** + * Helper to create a temporary file, and optionally write some data + * into it. + * + * @param data If data needs to be written to the file, a + * pointer to the buffer. Pass NULL to just + * create an empty temporary file. + * @param data_size The size of the buffer to write, if applicable. + * @param path_out An output pointer for the filename. Caller + * should free. + * + * @return VB2_SUCCESS on success, or a relevant error. + */ +static vb2_error_t write_temp_file(const uint8_t *data, uint32_t data_size, + char **path_out) +{ + int fd; + ssize_t write_rv; + vb2_error_t rv; + char *path; + mode_t umask_save; + +#if defined(__FreeBSD__) +#define P_tmpdir "/tmp" +#endif + + *path_out = NULL; + path = strdup(P_tmpdir "/vb2_flashrom.XXXXXX"); + + /* Set the umask before mkstemp for security considerations. */ + umask_save = umask(077); + fd = mkstemp(path); + umask(umask_save); + if (fd < 0) { + rv = VB2_ERROR_WRITE_FILE_OPEN; + goto fail; + } + + while (data && data_size > 0) { + write_rv = write(fd, data, data_size); + if (write_rv < 0) { + close(fd); + unlink(path); + rv = VB2_ERROR_WRITE_FILE_DATA; + goto fail; + } + + data_size -= write_rv; + data += write_rv; + } + + close(fd); + *path_out = path; + return VB2_SUCCESS; + + fail: + free(path); + return rv; +} + +static vb2_error_t run_flashrom(const char *const argv[]) +{ + int status = subprocess_run(argv, &subprocess_null, &subprocess_null, + &subprocess_null); + if (status) { + fprintf(stderr, "Flashrom invocation failed (exit status %d):", + status); + + for (const char *const *argp = argv; *argp; argp++) + fprintf(stderr, " %s", *argp); + + fprintf(stderr, "\n"); + return VB2_ERROR_FLASHROM; + } + + return VB2_SUCCESS; +} + +vb2_error_t flashrom_read(const char *programmer, const char *region, + uint8_t **data_out, uint32_t *size_out) +{ + char *tmpfile; + char region_param[PATH_MAX]; + vb2_error_t rv; + + *data_out = NULL; + *size_out = 0; + + VB2_TRY(write_temp_file(NULL, 0, &tmpfile)); + + if (region) + snprintf(region_param, sizeof(region_param), "%s:%s", region, + tmpfile); + + const char *const argv[] = { + FLASHROM_EXEC_NAME, + "-p", + programmer, + "-r", + region ? "-i" : tmpfile, + region ? region_param : NULL, + NULL, + }; + + rv = run_flashrom(argv); + if (rv == VB2_SUCCESS) + rv = vb2_read_file(tmpfile, data_out, size_out); + + unlink(tmpfile); + free(tmpfile); + return rv; +} + +vb2_error_t flashrom_write(const char *programmer, const char *region, + uint8_t *data, uint32_t size) +{ + char *tmpfile; + char region_param[PATH_MAX]; + vb2_error_t rv; + + VB2_TRY(write_temp_file(data, size, &tmpfile)); + + if (region) + snprintf(region_param, sizeof(region_param), "%s:%s", region, + tmpfile); + + const char *const argv[] = { + FLASHROM_EXEC_NAME, + "-p", + programmer, + "--noverify-all", + "-w", + region ? "-i" : tmpfile, + region ? region_param : NULL, + NULL, + }; + + rv = run_flashrom(argv); + unlink(tmpfile); + free(tmpfile); + return rv; +} diff --git a/host/lib/fmap.c b/host/lib/fmap.c new file mode 100644 index 0000000..2609064 --- /dev/null +++ b/host/lib/fmap.c @@ -0,0 +1,67 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include + +#include "fmap.h" + +static int is_fmap(uint8_t *ptr) +{ + FmapHeader *fmap_header = (FmapHeader *)ptr; + + if (0 != memcmp(ptr, FMAP_SIGNATURE, FMAP_SIGNATURE_SIZE)) + return 0; + + if (fmap_header->fmap_ver_major == FMAP_VER_MAJOR) + return 1; + + fprintf(stderr, "Found FMAP, but major version is %u instead of %u\n", + fmap_header->fmap_ver_major, FMAP_VER_MAJOR); + return 0; +} + +/* Find and point to the FMAP header within the buffer */ +FmapHeader *fmap_find(uint8_t *ptr, size_t size) +{ + ssize_t offset, align; + ssize_t lim = size - sizeof(FmapHeader); + + if (lim >= 0 && is_fmap(ptr)) + return (FmapHeader *)ptr; + + /* Search large alignments before small ones to find "right" FMAP. */ + for (align = FMAP_SEARCH_STRIDE; align <= lim; align *= 2); + for (; align >= FMAP_SEARCH_STRIDE; align /= 2) + for (offset = align; offset <= lim; offset += align * 2) + if (is_fmap(ptr + offset)) + return (FmapHeader *)(ptr + offset); + + return NULL; +} + +/* Search for an area by name, return pointer to its beginning */ +uint8_t *fmap_find_by_name(uint8_t *ptr, size_t size, FmapHeader *fmap, + const char *name, FmapAreaHeader **ah_ptr) +{ + int i; + FmapAreaHeader *ah; + + if (!fmap) + fmap = fmap_find(ptr, size); + if (!fmap) + return NULL; + + ah = (FmapAreaHeader*)((void *)fmap + sizeof(FmapHeader)); + for (i = 0; i < fmap->fmap_nareas; i++) + if (!strncmp(ah[i].area_name, name, FMAP_NAMELEN)) { + if (ah_ptr) + *ah_ptr = ah + i; + return ptr + ah[i].area_offset; + } + + return NULL; +} diff --git a/host/lib/host_common.c b/host/lib/host_common.c new file mode 100644 index 0000000..82a5954 --- /dev/null +++ b/host/lib/host_common.c @@ -0,0 +1,154 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Host functions for verified boot. + */ + +#include + +#include "2common.h" +#include "2rsa.h" +#include "2sysincludes.h" +#include "host_common.h" +#include "host_key21.h" + +struct vb2_fw_preamble *vb2_create_fw_preamble( + uint32_t firmware_version, + const struct vb2_packed_key *kernel_subkey, + const struct vb2_signature *body_signature, + const struct vb2_private_key *signing_key, + uint32_t flags) +{ + uint32_t signed_size = (sizeof(struct vb2_fw_preamble) + + kernel_subkey->key_size + + body_signature->sig_size); + uint32_t block_size = signed_size + + vb2_rsa_sig_size(signing_key->sig_alg); + + /* Allocate keyblock */ + struct vb2_fw_preamble *h = + (struct vb2_fw_preamble *)calloc(block_size, 1); + if (!h) + return NULL; + + uint8_t *kernel_subkey_dest = (uint8_t *)(h + 1); + uint8_t *body_sig_dest = kernel_subkey_dest + kernel_subkey->key_size; + uint8_t *block_sig_dest = body_sig_dest + body_signature->sig_size; + + h->header_version_major = VB2_FIRMWARE_PREAMBLE_HEADER_VERSION_MAJOR; + h->header_version_minor = VB2_FIRMWARE_PREAMBLE_HEADER_VERSION_MINOR; + h->preamble_size = block_size; + h->firmware_version = firmware_version; + h->flags = flags; + + /* Copy data key */ + vb2_init_packed_key(&h->kernel_subkey, kernel_subkey_dest, + kernel_subkey->key_size); + if (VB2_SUCCESS != + vb2_copy_packed_key(&h->kernel_subkey, kernel_subkey)) { + free(h); + return NULL; + } + + /* Copy body signature */ + vb2_init_signature(&h->body_signature, + body_sig_dest, body_signature->sig_size, 0); + if (VB2_SUCCESS != + vb2_copy_signature(&h->body_signature, body_signature)) { + free(h); + return NULL; + } + + /* Set up signature struct so we can calculate the signature */ + vb2_init_signature(&h->preamble_signature, block_sig_dest, + vb2_rsa_sig_size(signing_key->sig_alg), signed_size); + + /* Calculate signature */ + struct vb2_signature *sig = + vb2_calculate_signature((uint8_t *)h, signed_size, signing_key); + vb2_copy_signature(&h->preamble_signature, sig); + free(sig); + + /* Return the header */ + return h; +} + +struct vb2_kernel_preamble *vb2_create_kernel_preamble( + uint32_t kernel_version, + uint64_t body_load_address, + uint64_t bootloader_address, + uint32_t bootloader_size, + const struct vb2_signature *body_signature, + uint64_t vmlinuz_header_address, + uint32_t vmlinuz_header_size, + uint32_t flags, + uint32_t desired_size, + const struct vb2_private_key *signing_key) +{ + uint64_t signed_size = (sizeof(struct vb2_kernel_preamble) + + body_signature->sig_size); + uint32_t sig_size = vb2_rsa_sig_size(signing_key->sig_alg); + uint32_t block_size = signed_size + sig_size; + + /* If the block size is smaller than the desired size, pad it */ + if (block_size < desired_size) + block_size = desired_size; + + /* Allocate keyblock */ + struct vb2_kernel_preamble *h = + (struct vb2_kernel_preamble *)calloc(block_size, 1); + if (!h) + return NULL; + + uint8_t *body_sig_dest = (uint8_t *)(h + 1); + uint8_t *block_sig_dest = body_sig_dest + body_signature->sig_size; + + h->header_version_major = VB2_KERNEL_PREAMBLE_HEADER_VERSION_MAJOR; + h->header_version_minor = VB2_KERNEL_PREAMBLE_HEADER_VERSION_MINOR; + h->preamble_size = block_size; + h->kernel_version = kernel_version; + h->body_load_address = body_load_address; + h->bootloader_address = bootloader_address; + h->bootloader_size = bootloader_size; + h->vmlinuz_header_address = vmlinuz_header_address; + h->vmlinuz_header_size = vmlinuz_header_size; + h->flags = flags; + + /* Copy body signature */ + vb2_init_signature(&h->body_signature, body_sig_dest, + body_signature->sig_size, 0); + vb2_copy_signature(&h->body_signature, body_signature); + + /* Set up signature struct so we can calculate the signature */ + vb2_init_signature(&h->preamble_signature, block_sig_dest, + sig_size, signed_size); + + /* Calculate signature */ + struct vb2_signature *sigtmp = + vb2_calculate_signature((uint8_t *)h, signed_size, signing_key); + vb2_copy_signature(&h->preamble_signature, sigtmp); + free(sigtmp); + + /* Return the header */ + return h; +} + +void vb2_kernel_get_vmlinuz_header(const struct vb2_kernel_preamble *preamble, + uint64_t *vmlinuz_header_address, + uint32_t *vmlinuz_header_size) +{ + if (preamble->header_version_minor < 1) { + *vmlinuz_header_address = 0; + *vmlinuz_header_size = 0; + } else { + /* + * Set header and size only if the preamble header version is > + * 2.1 as they don't exist in version 2.0 (Note that we don't + * need to check header_version_major; if that's not 2 then + * vb2_verify_kernel_preamble() would have already failed. + */ + *vmlinuz_header_address = preamble->vmlinuz_header_address; + *vmlinuz_header_size = preamble->vmlinuz_header_size; + } +} diff --git a/host/lib/host_key2.c b/host/lib/host_key2.c new file mode 100644 index 0000000..e2e3f31 --- /dev/null +++ b/host/lib/host_key2.c @@ -0,0 +1,328 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Host functions for keys. + */ + +#include + +#include +#include +#include + +#include "2common.h" +#include "2rsa.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "host_common.h" +#include "host_key21.h" +#include "host_key.h" +#include "host_misc.h" + +enum vb2_crypto_algorithm vb2_get_crypto_algorithm( + enum vb2_hash_algorithm hash_alg, + enum vb2_signature_algorithm sig_alg) +{ + /* Make sure algorithms are in the range supported by crypto alg */ + if (sig_alg < VB2_SIG_RSA1024 || sig_alg >= VB2_SIG_ALG_COUNT) + return VB2_ALG_COUNT; + if (hash_alg < VB2_HASH_SHA1 || hash_alg > VB2_HASH_SHA512) + return VB2_ALG_COUNT; + + return (sig_alg - VB2_SIG_RSA1024) + * (VB2_HASH_SHA512 - VB2_HASH_SHA1 + 1) + + (hash_alg - VB2_HASH_SHA1); +}; + +struct vb2_private_key *vb2_read_private_key(const char *filename) +{ + uint8_t *buf = NULL; + uint32_t bufsize = 0; + if (VB2_SUCCESS != vb2_read_file(filename, &buf, &bufsize)) { + VB2_DEBUG("unable to read from file %s\n", filename); + return NULL; + } + + struct vb2_private_key *key = + (struct vb2_private_key *)calloc(sizeof(*key), 1); + if (!key) { + VB2_DEBUG("Unable to allocate private key\n"); + free(buf); + return NULL; + } + + uint64_t alg = *(uint64_t *)buf; + key->hash_alg = vb2_crypto_to_hash(alg); + key->sig_alg = vb2_crypto_to_signature(alg); + const unsigned char *start = buf + sizeof(alg); + + key->rsa_private_key = + d2i_RSAPrivateKey(0, &start, bufsize - sizeof(alg)); + + if (!key->rsa_private_key) { + VB2_DEBUG("Unable to parse RSA private key\n"); + free(buf); + free(key); + return NULL; + } + + free(buf); + return key; +} + +struct vb2_private_key *vb2_read_private_key_pem( + const char* filename, + enum vb2_crypto_algorithm algorithm) +{ + if (algorithm >= VB2_ALG_COUNT) { + VB2_DEBUG("%s() called with invalid algorithm!\n", + __FUNCTION__); + return NULL; + } + + /* Read private key */ + FILE *f = fopen(filename, "r"); + if (!f) { + VB2_DEBUG("%s(): Couldn't open key file: %s\n", + __FUNCTION__, filename); + return NULL; + } + struct rsa_st *rsa_key = PEM_read_RSAPrivateKey(f, NULL, NULL, NULL); + fclose(f); + if (!rsa_key) { + VB2_DEBUG("%s(): Couldn't read private key from file: %s\n", + __FUNCTION__, filename); + return NULL; + } + + /* Store key and algorithm in our struct */ + struct vb2_private_key *key = + (struct vb2_private_key *)calloc(sizeof(*key), 1); + if (!key) { + RSA_free(rsa_key); + return NULL; + } + key->rsa_private_key = rsa_key; + key->hash_alg = vb2_crypto_to_hash(algorithm); + key->sig_alg = vb2_crypto_to_signature(algorithm); + + /* Return the key */ + return key; +} + +void vb2_free_private_key(struct vb2_private_key *key) +{ + if (!key) + return; + if (key->rsa_private_key) + RSA_free(key->rsa_private_key); + free(key); +} + +vb2_error_t vb2_write_private_key(const char *filename, + const struct vb2_private_key *key) +{ + /* Convert back to legacy vb1 algorithm enum */ + uint64_t alg = vb2_get_crypto_algorithm(key->hash_alg, key->sig_alg); + if (alg == VB2_ALG_COUNT) { + fprintf(stderr, "Can't find crypto algorithm\n"); + return VB2_ERROR_VB1_CRYPTO_ALGORITHM; + } + + uint8_t *outbuf = NULL; + int buflen = i2d_RSAPrivateKey(key->rsa_private_key, &outbuf); + if (buflen <= 0) { + fprintf(stderr, "Unable to write private key buffer\n"); + return VB2_ERROR_PRIVATE_KEY_WRITE_RSA; + } + + FILE *f = fopen(filename, "wb"); + if (!f) { + fprintf(stderr, "Unable to open file %s\n", filename); + free(outbuf); + return VB2_ERROR_PRIVATE_KEY_WRITE_FILE; + } + + if (1 != fwrite(&alg, sizeof(alg), 1, f) || + 1 != fwrite(outbuf, buflen, 1, f)) { + fprintf(stderr, "Unable to write to file %s\n", filename); + fclose(f); + unlink(filename); /* Delete any partial file */ + free(outbuf); + return VB2_ERROR_PRIVATE_KEY_WRITE_FILE; + } + + fclose(f); + free(outbuf); + return VB2_SUCCESS; +} + +void vb2_init_packed_key(struct vb2_packed_key *key, uint8_t *key_data, + uint32_t key_size) +{ + memset(key, 0, sizeof(*key)); + key->key_offset = vb2_offset_of(key, key_data); + key->key_size = key_size; + key->algorithm = VB2_ALG_COUNT; /* Key not present yet */ +} + +struct vb2_packed_key *vb2_alloc_packed_key(uint32_t key_size, + uint32_t algorithm, + uint32_t version) +{ + struct vb2_packed_key *key = + (struct vb2_packed_key *)calloc(sizeof(*key) + key_size, 1); + if (!key) + return NULL; + + key->algorithm = algorithm; + key->key_version = version; + key->key_size = key_size; + key->key_offset = sizeof(*key); + return key; +} + +vb2_error_t vb2_copy_packed_key(struct vb2_packed_key *dest, + const struct vb2_packed_key *src) +{ + if (dest->key_size < src->key_size) + return VB2_ERROR_COPY_KEY_SIZE; + + dest->key_size = src->key_size; + dest->algorithm = src->algorithm; + dest->key_version = src->key_version; + memcpy(vb2_packed_key_data_mutable(dest), + vb2_packed_key_data(src), + src->key_size); + return VB2_SUCCESS; +} + +struct vb2_packed_key *vb2_read_packed_key(const char *filename) +{ + struct vb2_packed_key *key = NULL; + uint32_t file_size = 0; + + if (VB2_SUCCESS != + vb2_read_file(filename, (uint8_t **)&key, &file_size)) { + return NULL; + } + + if (vb2_packed_key_looks_ok(key, file_size) == VB2_SUCCESS) + return key; + + /* Error */ + free(key); + return NULL; +} + +struct vb2_packed_key *vb2_read_packed_keyb(const char *filename, + uint32_t algorithm, + uint32_t version) +{ + if (algorithm >= VB2_ALG_COUNT) { + fprintf(stderr, "%s() - invalid algorithm\n", __func__); + return NULL; + } + if (version > VB2_MAX_KEY_VERSION) { + /* Currently, TPM only supports 16-bit version */ + fprintf(stderr, "%s() - invalid version %#x\n", __func__, + version); + return NULL; + } + + uint8_t *key_data = NULL; + uint32_t key_size = 0; + if (VB2_SUCCESS != vb2_read_file(filename, &key_data, &key_size)) + return NULL; + + uint32_t expected_key_size = + vb2_packed_key_size(vb2_crypto_to_signature(algorithm)); + if (!expected_key_size || expected_key_size != key_size) { + fprintf(stderr, "%s() - wrong key size %u for algorithm %u\n", + __func__, key_size, algorithm); + free(key_data); + return NULL; + } + + struct vb2_packed_key *key = + vb2_alloc_packed_key(key_size, algorithm, version); + if (!key) { + free(key_data); + return NULL; + } + memcpy(vb2_packed_key_data_mutable(key), key_data, key_size); + + free(key_data); + return key; +} + +vb2_error_t vb2_write_packed_key(const char *filename, + const struct vb2_packed_key *key) +{ + /* Copy the key, so its data is contiguous with the header */ + struct vb2_packed_key *kcopy = + vb2_alloc_packed_key(key->key_size, 0, 0); + if (!kcopy) + return VB2_ERROR_PACKED_KEY_ALLOC; + if (VB2_SUCCESS != vb2_copy_packed_key(kcopy, key)) { + free(kcopy); + return VB2_ERROR_PACKED_KEY_COPY; + } + + /* Write the copy, then free it */ + vb2_error_t rv = vb2_write_file(filename, kcopy, + kcopy->key_offset + kcopy->key_size); + free(kcopy); + return rv; +} + +vb2_error_t vb2_packed_key_looks_ok(const struct vb2_packed_key *key, + uint32_t size) +{ + struct vb2_public_key pubkey; + vb2_error_t rv; + + rv = vb2_unpack_key_buffer(&pubkey, (const uint8_t *)key, size); + if (rv) + return rv; + + if (key->key_version > VB2_MAX_KEY_VERSION) { + /* Currently, TPM only supports 16-bit version */ + VB2_DEBUG("packed key invalid version\n"); + return VB2_ERROR_PACKED_KEY_VERSION; + } + + return VB2_SUCCESS; +} + +vb2_error_t vb2_unpack_key_data(struct vb2_public_key *key, + const uint8_t *key_data, uint32_t key_size) +{ + const uint32_t *buf32 = (const uint32_t *)key_data; + uint32_t expected_key_size = vb2_packed_key_size(key->sig_alg); + + /* Make sure buffer is the correct length */ + if (!expected_key_size || expected_key_size != key_size) { + VB2_DEBUG("Wrong key size for algorithm\n"); + return VB2_ERROR_UNPACK_KEY_SIZE; + } + + /* Check for alignment */ + if (!vb2_aligned(buf32, sizeof(uint32_t))) + return VB2_ERROR_UNPACK_KEY_ALIGN; + + key->arrsize = buf32[0]; + + /* Validity check key array size */ + if (key->arrsize * sizeof(uint32_t) != vb2_rsa_sig_size(key->sig_alg)) + return VB2_ERROR_UNPACK_KEY_ARRAY_SIZE; + + key->n0inv = buf32[1]; + + /* Arrays point inside the key data */ + key->n = buf32 + 2; + key->rr = buf32 + 2 + key->arrsize; + + return VB2_SUCCESS; +} diff --git a/host/lib/host_keyblock.c b/host/lib/host_keyblock.c new file mode 100644 index 0000000..e5634ce --- /dev/null +++ b/host/lib/host_keyblock.c @@ -0,0 +1,173 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Host functions for verified boot. + */ + +#include + +#include "2sysincludes.h" + +#include "2api.h" +#include "2common.h" +#include "2rsa.h" +#include "2sha.h" +#include "host_common.h" +#include "host_key21.h" +#include "host_keyblock.h" +#include "host_key.h" + +struct vb2_keyblock *vb2_create_keyblock( + const struct vb2_packed_key *data_key, + const struct vb2_private_key *signing_key, + uint32_t flags) +{ + /* Allocate keyblock */ + uint32_t signed_size = sizeof(struct vb2_keyblock) + data_key->key_size; + uint32_t sig_data_size = + (signing_key ? vb2_rsa_sig_size(signing_key->sig_alg) : 0); + uint32_t block_size = + signed_size + VB2_SHA512_DIGEST_SIZE + sig_data_size; + struct vb2_keyblock *h = (struct vb2_keyblock *)calloc(block_size, 1); + if (!h) + return NULL; + + uint8_t *data_key_dest = (uint8_t *)(h + 1); + uint8_t *block_chk_dest = data_key_dest + data_key->key_size; + uint8_t *block_sig_dest = block_chk_dest + VB2_SHA512_DIGEST_SIZE; + + memcpy(h->magic, VB2_KEYBLOCK_MAGIC, VB2_KEYBLOCK_MAGIC_SIZE); + h->header_version_major = VB2_KEYBLOCK_VERSION_MAJOR; + h->header_version_minor = VB2_KEYBLOCK_VERSION_MINOR; + h->keyblock_size = block_size; + h->keyblock_flags = flags; + + /* Copy data key */ + vb2_init_packed_key(&h->data_key, data_key_dest, data_key->key_size); + vb2_copy_packed_key(&h->data_key, data_key); + + /* Set up signature structs so we can calculate the signatures */ + vb2_init_signature(&h->keyblock_hash, block_chk_dest, + VB2_SHA512_DIGEST_SIZE, signed_size); + if (signing_key) { + vb2_init_signature(&h->keyblock_signature, block_sig_dest, + sig_data_size, signed_size); + } else { + memset(&h->keyblock_signature, 0, + sizeof(h->keyblock_signature)); + } + + /* Calculate hash */ + struct vb2_signature *chk = + vb2_sha512_signature((uint8_t*)h, signed_size); + vb2_copy_signature(&h->keyblock_hash, chk); + free(chk); + + /* Calculate signature */ + if (signing_key) { + struct vb2_signature *sigtmp = + vb2_calculate_signature((uint8_t*)h, + signed_size, + signing_key); + vb2_copy_signature(&h->keyblock_signature, sigtmp); + free(sigtmp); + } + + /* Return the header */ + return h; +} + +/* TODO(gauravsh): This could easily be integrated into the function above + * since the code is almost a mirror - I have kept it as such to avoid changing + * the existing interface. */ +struct vb2_keyblock *vb2_create_keyblock_external( + const struct vb2_packed_key *data_key, + const char *signing_key_pem_file, + uint32_t algorithm, + uint32_t flags, + const char *external_signer) +{ + if (!signing_key_pem_file || !data_key || !external_signer) + return NULL; + + uint32_t signed_size = sizeof(struct vb2_keyblock) + data_key->key_size; + uint32_t sig_data_size = vb2_rsa_sig_size(vb2_crypto_to_signature(algorithm)); + uint32_t block_size = + signed_size + VB2_SHA512_DIGEST_SIZE + sig_data_size; + + /* Allocate keyblock */ + struct vb2_keyblock *h = (struct vb2_keyblock *)calloc(block_size, 1); + if (!h) + return NULL; + + uint8_t *data_key_dest = (uint8_t *)(h + 1); + uint8_t *block_chk_dest = data_key_dest + data_key->key_size; + uint8_t *block_sig_dest = block_chk_dest + VB2_SHA512_DIGEST_SIZE; + + memcpy(h->magic, VB2_KEYBLOCK_MAGIC, VB2_KEYBLOCK_MAGIC_SIZE); + h->header_version_major = VB2_KEYBLOCK_VERSION_MAJOR; + h->header_version_minor = VB2_KEYBLOCK_VERSION_MINOR; + h->keyblock_size = block_size; + h->keyblock_flags = flags; + + /* Copy data key */ + vb2_init_packed_key(&h->data_key, data_key_dest, data_key->key_size); + vb2_copy_packed_key(&h->data_key, data_key); + + /* Set up signature structs so we can calculate the signatures */ + vb2_init_signature(&h->keyblock_hash, block_chk_dest, + VB2_SHA512_DIGEST_SIZE, signed_size); + vb2_init_signature(&h->keyblock_signature, block_sig_dest, + sig_data_size, signed_size); + + /* Calculate checksum */ + struct vb2_signature *chk = + vb2_sha512_signature((uint8_t*)h, signed_size); + vb2_copy_signature(&h->keyblock_hash, chk); + free(chk); + + /* Calculate signature */ + struct vb2_signature *sigtmp = + vb2_external_signature((uint8_t*)h, signed_size, + signing_key_pem_file, algorithm, + external_signer); + vb2_copy_signature(&h->keyblock_signature, sigtmp); + free(sigtmp); + + /* Return the header */ + return h; +} + +struct vb2_keyblock *vb2_read_keyblock(const char *filename) +{ + uint8_t workbuf[VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + struct vb2_workbuf wb; + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + struct vb2_keyblock *block; + uint32_t file_size; + if (VB2_SUCCESS != + vb2_read_file(filename, (uint8_t **)&block, &file_size)) { + fprintf(stderr, "Error reading keyblock file: %s\n", filename); + return NULL; + } + + /* Verify the hash of the keyblock, since we can do that without + * the public signing key. */ + if (VB2_SUCCESS != vb2_verify_keyblock_hash(block, file_size, &wb)) { + fprintf(stderr, "Invalid keyblock file: %s\n", filename); + free(block); + return NULL; + } + + return block; +} + + +int vb2_write_keyblock(const char *filename, + const struct vb2_keyblock *keyblock) +{ + return vb2_write_file(filename, keyblock, keyblock->keyblock_size); +} diff --git a/host/lib/host_misc.c b/host/lib/host_misc.c new file mode 100644 index 0000000..4b6c863 --- /dev/null +++ b/host/lib/host_misc.c @@ -0,0 +1,118 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Host functions for verified boot. + */ + +/* TODO: change all 'return 0', 'return 1' into meaningful return codes */ + +#include +#include +#include +#include + +#include "host_common.h" + +char* StrCopy(char* dest, const char* src, int dest_size) +{ + strncpy(dest, src, dest_size); + dest[dest_size - 1] = '\0'; + return dest; +} + +uint8_t* ReadFile(const char* filename, uint64_t* sizeptr) +{ + FILE* f; + uint8_t* buf; + long size; + + f = fopen(filename, "rb"); + if (!f) { + fprintf(stderr, "Unable to open file %s\n", filename); + return NULL; + } + + fseek(f, 0, SEEK_END); + size = ftell(f); + if (size < 0) { + fclose(f); + return NULL; + } + rewind(f); + + buf = malloc(size); + if (!buf) { + fclose(f); + return NULL; + } + + if(1 != fread(buf, size, 1, f)) { + fprintf(stderr, "Unable to read from file %s\n", filename); + fclose(f); + free(buf); + return NULL; + } + + fclose(f); + if (sizeptr) + *sizeptr = size; + return buf; +} + +char* ReadFileString(char* dest, int size, const char* filename) +{ + char* got; + FILE* f; + + f = fopen(filename, "rt"); + if (!f) + return NULL; + + got = fgets(dest, size, f); + fclose(f); + return got; +} + +int ReadFileInt(const char* filename, unsigned* value) +{ + char buf[64]; + char* e = NULL; + + if (!ReadFileString(buf, sizeof(buf), filename)) + return -1; + + /* Convert to integer. Allow characters after the int ("123 blah"). */ + *value = (unsigned)strtoul(buf, &e, 0); + if (e == buf) + return -1; /* No characters consumed, so conversion failed */ + + return 0; +} + +int ReadFileBit(const char* filename, int bitmask) +{ + unsigned value; + if (ReadFileInt(filename, &value) < 0) + return -1; + else return (value & bitmask ? 1 : 0); +} + +vb2_error_t WriteFile(const char* filename, const void *data, uint64_t size) +{ + FILE *f = fopen(filename, "wb"); + if (!f) { + fprintf(stderr, "Unable to open file %s\n", filename); + return 1; + } + + if (1 != fwrite(data, size, 1, f)) { + fprintf(stderr, "Unable to write to file %s\n", filename); + fclose(f); + unlink(filename); /* Delete any partial file */ + return 1; + } + + fclose(f); + return 0; +} diff --git a/host/lib/host_signature.c b/host/lib/host_signature.c new file mode 100644 index 0000000..5b71d29 --- /dev/null +++ b/host/lib/host_signature.c @@ -0,0 +1,171 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Host functions for signature generation. + */ + +/* TODO: change all 'return 0', 'return 1' into meaningful return codes */ + +#include + +#include +#include +#include +#include +#include + +#include "2common.h" +#include "2rsa.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "host_common.h" +#include "host_signature21.h" + +/* Invoke [external_signer] command with [pem_file] as an argument, contents of + * [inbuf] passed redirected to stdin, and the stdout of the command is put + * back into [outbuf]. Returns -1 on error, 0 on success. + */ +static int sign_external(uint32_t size, const uint8_t *inbuf, uint8_t *outbuf, + uint32_t outbufsize, const char *pem_file, + const char *external_signer) +{ + int rv = 0, n; + int p_to_c[2], c_to_p[2]; /* pipe descriptors */ + pid_t pid; + + VB2_DEBUG("Will invoke \"%s %s\" to perform signing.\n" + "Input to the signer will be provided on standard in.\n" + "Output of the signer will be read from standard out.\n", + external_signer, pem_file); + + /* Need two pipes since we want to invoke the external_signer as + * a co-process writing to its stdin and reading from its stdout. */ + if (pipe(p_to_c) < 0 || pipe(c_to_p) < 0) { + VB2_DEBUG("pipe() error\n"); + return -1; + } + if ((pid = fork()) < 0) { + VB2_DEBUG("fork() error\n"); + return -1; + } else if (pid > 0) { /* Parent. */ + close(p_to_c[STDIN_FILENO]); + close(c_to_p[STDOUT_FILENO]); + + /* We provide input to the child process (external signer). */ + if (write(p_to_c[STDOUT_FILENO], inbuf, size) != size) { + VB2_DEBUG("write() error\n"); + rv = -1; + } else { + /* Send EOF to child (signer process). */ + close(p_to_c[STDOUT_FILENO]); + + do { + n = read(c_to_p[STDIN_FILENO], outbuf, + outbufsize); + outbuf += n; + outbufsize -= n; + } while (n > 0 && outbufsize); + + if (n < 0) { + VB2_DEBUG("read() error\n"); + rv = -1; + } + } + if (waitpid(pid, NULL, 0) < 0) { + VB2_DEBUG("waitpid() error\n"); + rv = -1; + } + } else { /* Child. */ + close (p_to_c[STDOUT_FILENO]); + close (c_to_p[STDIN_FILENO]); + /* Map the stdin to the first pipe (this pipe gets input + * from the parent) */ + if (STDIN_FILENO != p_to_c[STDIN_FILENO]) { + if (dup2(p_to_c[STDIN_FILENO], STDIN_FILENO) != + STDIN_FILENO) { + VB2_DEBUG("stdin dup2() failed\n"); + close(p_to_c[0]); + return -1; + } + } + /* Map the stdout to the second pipe (this pipe sends back + * signer output to the parent) */ + if (STDOUT_FILENO != c_to_p[STDOUT_FILENO]) { + if (dup2(c_to_p[STDOUT_FILENO], STDOUT_FILENO) != + STDOUT_FILENO) { + VB2_DEBUG("stdout dup2() failed\n"); + close(c_to_p[STDOUT_FILENO]); + return -1; + } + } + /* External signer is invoked here. */ + if (execl(external_signer, external_signer, pem_file, + (char *) 0) < 0) { + VB2_DEBUG("execl() of external signer failed\n"); + } + } + return rv; +} + +struct vb2_signature *vb2_external_signature(const uint8_t *data, uint32_t size, + const char *key_file, + uint32_t key_algorithm, + const char *external_signer) +{ + int vb2_alg = vb2_crypto_to_hash(key_algorithm); + uint8_t digest[VB2_MAX_DIGEST_SIZE]; + int digest_size = vb2_digest_size(vb2_alg); + + uint32_t digest_info_size = 0; + const uint8_t *digest_info = NULL; + if (VB2_SUCCESS != vb2_digest_info(vb2_alg, + &digest_info, &digest_info_size)) + return NULL; + + + uint8_t *signature_digest; + uint64_t signature_digest_len = digest_size + digest_info_size; + + int rv; + + /* Calculate the digest */ + if (VB2_SUCCESS != vb2_digest_buffer(data, size, vb2_alg, + digest, sizeof(digest))) + return NULL; + + /* Prepend the digest info to the digest */ + signature_digest = calloc(signature_digest_len, 1); + if (!signature_digest) + return NULL; + + memcpy(signature_digest, digest_info, digest_info_size); + memcpy(signature_digest + digest_info_size, digest, digest_size); + + /* Allocate output signature */ + uint32_t sig_size = + vb2_rsa_sig_size(vb2_crypto_to_signature(key_algorithm)); + struct vb2_signature *sig = vb2_alloc_signature(sig_size, size); + if (!sig) { + free(signature_digest); + return NULL; + } + + /* Sign the signature_digest into our output buffer */ + rv = sign_external(signature_digest_len, /* Input length */ + signature_digest, /* Input data */ + vb2_signature_data_mutable(sig), /* Output sig */ + sig_size, /* Max Output sig size */ + key_file, /* Key file to use */ + external_signer); /* External cmd to invoke */ + free(signature_digest); + + if (-1 == rv) { + VB2_DEBUG("RSA_private_encrypt() failed.\n"); + free(sig); + return NULL; + } + + /* Return the signature */ + return sig; +} diff --git a/host/lib/host_signature2.c b/host/lib/host_signature2.c new file mode 100644 index 0000000..b6cd652 --- /dev/null +++ b/host/lib/host_signature2.c @@ -0,0 +1,133 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Host functions for signature generation. + */ + +#include + +#include +#include +#include +#include +#include + +#include "2sysincludes.h" + +#include "2common.h" +#include "2rsa.h" +#include "2sha.h" +#include "file_keys.h" +#include "host_common.h" +#include "host_key21.h" +#include "host_signature21.h" + +struct vb2_signature *vb2_alloc_signature(uint32_t sig_size, + uint32_t data_size) +{ + struct vb2_signature *sig = (struct vb2_signature *) + calloc(sizeof(*sig) + sig_size, 1); + if (!sig) + return NULL; + + sig->sig_offset = sizeof(*sig); + sig->sig_size = sig_size; + sig->data_size = data_size; + + return sig; +} + +void vb2_init_signature(struct vb2_signature *sig, uint8_t *sig_data, + uint32_t sig_size, uint32_t data_size) +{ + memset(sig, 0, sizeof(*sig)); + sig->sig_offset = vb2_offset_of(sig, sig_data); + sig->sig_size = sig_size; + sig->data_size = data_size; +} + +vb2_error_t vb2_copy_signature(struct vb2_signature *dest, + const struct vb2_signature *src) +{ + if (dest->sig_size < src->sig_size) + return VB2_ERROR_SIG_SIZE; + + dest->sig_size = src->sig_size; + dest->data_size = src->data_size; + + memcpy(vb2_signature_data_mutable(dest), + vb2_signature_data(src), + src->sig_size); + + return VB2_SUCCESS; +} + +struct vb2_signature *vb2_sha512_signature(const uint8_t *data, uint32_t size) +{ + uint8_t digest[VB2_SHA512_DIGEST_SIZE]; + if (VB2_SUCCESS != vb2_digest_buffer(data, size, VB2_HASH_SHA512, + digest, sizeof(digest))) + return NULL; + + struct vb2_signature *sig = + vb2_alloc_signature(VB2_SHA512_DIGEST_SIZE, size); + if (!sig) + return NULL; + + memcpy(vb2_signature_data_mutable(sig), digest, VB2_SHA512_DIGEST_SIZE); + return sig; +} + +struct vb2_signature *vb2_calculate_signature( + const uint8_t *data, uint32_t size, + const struct vb2_private_key *key) +{ + uint8_t digest[VB2_MAX_DIGEST_SIZE]; + uint32_t digest_size = vb2_digest_size(key->hash_alg); + + uint32_t digest_info_size = 0; + const uint8_t *digest_info = NULL; + if (VB2_SUCCESS != vb2_digest_info(key->hash_alg, + &digest_info, &digest_info_size)) + return NULL; + + /* Calculate the digest */ + if (VB2_SUCCESS != vb2_digest_buffer(data, size, key->hash_alg, + digest, digest_size)) + return NULL; + + /* Prepend the digest info to the digest */ + int signature_digest_len = digest_size + digest_info_size; + uint8_t *signature_digest = malloc(signature_digest_len); + if (!signature_digest) + return NULL; + + memcpy(signature_digest, digest_info, digest_info_size); + memcpy(signature_digest + digest_info_size, digest, digest_size); + + /* Allocate output signature */ + struct vb2_signature *sig = (struct vb2_signature *) + vb2_alloc_signature(vb2_rsa_sig_size(key->sig_alg), size); + if (!sig) { + free(signature_digest); + return NULL; + } + + /* Sign the signature_digest into our output buffer */ + int rv = RSA_private_encrypt(signature_digest_len, /* Input length */ + signature_digest, /* Input data */ + vb2_signature_data_mutable(sig), /* Output sig */ + key->rsa_private_key, /* Key to use */ + RSA_PKCS1_PADDING); /* Padding */ + free(signature_digest); + + if (-1 == rv) { + fprintf(stderr, "%s: RSA_private_encrypt() failed\n", __func__); + free(sig); + return NULL; + } + + /* Return the signature */ + return sig; +} diff --git a/host/lib/include/chromeos_config.h b/host/lib/include/chromeos_config.h new file mode 100644 index 0000000..e83570e --- /dev/null +++ b/host/lib/include/chromeos_config.h @@ -0,0 +1,56 @@ +/* Copyright 2020 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_CHROMEOS_CONFIG_H_ +#define VBOOT_REFERENCE_CHROMEOS_CONFIG_H_ + +#include +#include + +#include "2common.h" +#include "2return_codes.h" + +/** + * Get a value from the model configuration on the device as a string. + * + * Note: this function allocates memory by its use of vb2_read_file, and relies + * on the caller to free the allocated memory. The output parameter will be set + * to NULL upon failure, so free can be safely called on this parameter. + * + * @param path The path in the config schema to the object containing + * the requested property. + * @param property The name of the requested property. + * @param val_out Output parameter which gets assigned to a + * null-terminated string. + * @return VB2_SUCCESS on success, or a relevant error upon error. + */ +vb2_error_t chromeos_config_get_string(const char *path, const char *property, + char **val_out); + +/** + * Get a value from the model configuration on the device as a boolean. + * + * @param path The path in the config schema to the object containing + * the requested property. + * @param property The name of the requested property. + * @param val_out Output parameter which gets assigned to a boolean. + * @return VB2_SUCCESS on success, or a relevant error upon error. + */ +vb2_error_t chromeos_config_get_boolean(const char *path, const char *property, + bool *val_out); + +/** + * Get a value from the model configuration on the device as an integer. + * + * @param path The path in the config schema to the object containing + * the requested property. + * @param property The name of the requested property. + * @param val_out Output parameter which gets assigned to an integer. + * @return VB2_SUCCESS on success, or a relevant error upon error. + */ +vb2_error_t chromeos_config_get_integer(const char *path, const char *property, + int *val_out); + +#endif /* VBOOT_REFERENCE_CHROMEOS_CONFIG_H_ */ diff --git a/host/lib/include/crossystem_arch.h b/host/lib/include/crossystem_arch.h new file mode 100644 index 0000000..6b94d44 --- /dev/null +++ b/host/lib/include/crossystem_arch.h @@ -0,0 +1,96 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Architecture-specific APIs for crossystem + */ + +#ifndef VBOOT_REFERENCE_CROSSYSTEM_ARCH_H_ +#define VBOOT_REFERENCE_CROSSYSTEM_ARCH_H_ + +#include + +#include "2sysincludes.h" +#include "2api.h" +#include "2nvstorage.h" +#include "vboot_struct.h" + +/* Firmware types from BINF.3. Placed in the common file because both x86 and + * arm use this. The constants are defined in "Chrome OS Main Processor + * Firmware Spec" + */ +#define BINF3_RECOVERY 0 +#define BINF3_NORMAL 1 +#define BINF3_DEVELOPER 2 +#define BINF3_NETBOOT 3 +#define BINF3_LEGACY 4 + + +/* INTERNAL APIS FOR CROSSYSTEM AVAILABLE TO ARCH-SPECIFIC FUNCTIONS */ + +/* Read an integer property from VbNvStorage. + * + * Returns the parameter value, or -1 if error. */ +int vb2_get_nv_storage(enum vb2_nv_param param); + +/* Write an integer property to VbNvStorage. + * + * Returns 0 if success, -1 if error. */ +int vb2_set_nv_storage(enum vb2_nv_param param, int value); + +/* Return true if the FWID starts with the specified string. */ +int FwidStartsWith(const char *start); + +/* Return version of VbSharedData struct or -1 if not found. */ +int VbSharedDataVersion(void); + +/* Apis WITH ARCH-SPECIFIC IMPLEMENTATIONS */ + +/* Read the non-volatile context from NVRAM. + * + * Returns 0 if success, -1 if error. */ +int vb2_read_nv_storage(struct vb2_context *ctx); + +/* Write the non-volatile context to NVRAM. + * + * Returns 0 if success, -1 if error. */ +int vb2_write_nv_storage(struct vb2_context *ctx); + +/* Read the VbSharedData buffer. + * + * Verifies the buffer contains at least enough data for the + * VbSharedDataHeader; if not, this is an error. + * + * If less data is read than expected, sets the returned structure's data_size + * to the actual amount of data read. If this is less than data_used, then + * some data was not returned; callers must handle this; this is not considered + * an error. + * + * Returns the data buffer, which must be freed by the caller using + * free(), or NULL if error. */ +VbSharedDataHeader* VbSharedDataRead(void); + +/* Read an architecture-specific system property integer. + * + * Returns the property value, or -1 if error. */ +int VbGetArchPropertyInt(const char* name); + +/* Read an architecture-specific system property string into a + * destination buffer of the specified size. Returned string will be + * null-terminated. If the buffer is too small, the returned string + * will be truncated. + * + * Returns the passed buffer, or NULL if error. */ +const char* VbGetArchPropertyString(const char* name, char* dest, size_t size); + +/* Set an architecture-specific system property integer. + * + * Returns 0 if success, -1 if error. */ +int VbSetArchPropertyInt(const char* name, int value); + +/* Set an architecture-specific system property string. + * + * Returns 0 if success, -1 if error. */ +int VbSetArchPropertyString(const char* name, const char* value); + +#endif /* VBOOT_REFERENCE_CROSSYSTEM_ARCH_H_ */ diff --git a/host/lib/include/file_keys.h b/host/lib/include/file_keys.h new file mode 100644 index 0000000..8176cdb --- /dev/null +++ b/host/lib/include/file_keys.h @@ -0,0 +1,20 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Utility functions for file and key handling. + */ + +#ifndef VBOOT_REFERENCE_FILE_KEYS_H_ +#define VBOOT_REFERENCE_FILE_KEYS_H_ + +#include "2sha.h" + +/* Calculates the appropriate digest for the data in [input_file] based on the + * hash algorithm [alg] and stores it into [digest], which is of size + * [digest_size]. Returns VB2_SUCCESS, or non-zero on error. + */ +vb2_error_t DigestFile(char *input_file, enum vb2_hash_algorithm alg, + uint8_t *digest, uint32_t digest_size); + +#endif /* VBOOT_REFERENCE_FILE_KEYS_H_ */ diff --git a/host/lib/include/flashrom.h b/host/lib/include/flashrom.h new file mode 100644 index 0000000..560fbb0 --- /dev/null +++ b/host/lib/include/flashrom.h @@ -0,0 +1,50 @@ +/* Copyright 2020 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Host utilites to execute flashrom command. + */ + +#include + +#include "2return_codes.h" + +#define FLASHROM_PROGRAMMER_INTERNAL_AP "host" +#define FLASHROM_PROGRAMMER_INTERNAL_EC "ec" + +/** + * Read using flashrom into an allocated buffer. + * + * @param programmer The name of the programmer to use. There are + * named constants FLASHROM_PROGRAMMER_INTERNAL_AP + * and FLASHROM_PROGRAMMER_INTERNAL_EC available + * for the AP and EC respectively, or a custom + * programmer string can be provided. + * @param region The name of the fmap region to read, or NULL to + * read the entire flash chip. + * @param data_out Output parameter of allocated buffer to read into. + * The caller should free the buffer. + * @param size_out Output parameter of buffer size. + * + * @return VB2_SUCCESS on success, or a relevant error. + */ +vb2_error_t flashrom_read(const char *programmer, const char *region, + uint8_t **data_out, uint32_t *size_out); + +/** + * Write using flashrom from a buffer. + * + * @param programmer The name of the programmer to use. There are + * named constants FLASHROM_PROGRAMMER_INTERNAL_AP + * and FLASHROM_PROGRAMMER_INTERNAL_EC available + * for the AP and EC respectively, or a custom + * programmer string can be provided. + * @param region The name of the fmap region to write, or NULL to + * write the entire flash chip. + * @param data The buffer to write. + * @param size The size of the buffer to write. + * + * @return VB2_SUCCESS on success, or a relevant error. + */ +vb2_error_t flashrom_write(const char *programmer, const char *region, + uint8_t *data, uint32_t size); diff --git a/host/lib/include/fmap.h b/host/lib/include/fmap.h new file mode 100644 index 0000000..4fddaae --- /dev/null +++ b/host/lib/include/fmap.h @@ -0,0 +1,57 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_FMAP_H_ +#define VBOOT_REFERENCE_FMAP_H_ + +#include +#include + +/* FMAP structs. See http://code.google.com/p/flashmap/wiki/FmapSpec */ +#define FMAP_NAMELEN 32 +#define FMAP_SIGNATURE "__FMAP__" +#define FMAP_SIGNATURE_SIZE 8 +#define FMAP_SEARCH_STRIDE 4 +#define FMAP_VER_MAJOR 1 +typedef struct _FmapHeader { + /* Avoid endian issues in signature... */ + char fmap_signature[FMAP_SIGNATURE_SIZE]; + uint8_t fmap_ver_major; + uint8_t fmap_ver_minor; + uint64_t fmap_base; + uint32_t fmap_size; + char fmap_name[FMAP_NAMELEN]; + uint16_t fmap_nareas; +} __attribute__((packed)) FmapHeader; + +enum fmap_flags { + FMAP_AREA_STATIC = 1 << 0, + FMAP_AREA_COMPRESSED = 1 << 1, + FMAP_AREA_RO = 1 << 2, + /* Should be preserved on update or rollback. */ + FMAP_AREA_PRESERVE = 1 << 3, +}; + +typedef struct _FmapAreaHeader { + uint32_t area_offset; + uint32_t area_size; + char area_name[FMAP_NAMELEN]; + uint16_t area_flags; +} __attribute__((packed)) FmapAreaHeader; + + +/* Find and point to the FMAP header within the buffer */ +FmapHeader *fmap_find(uint8_t *ptr, size_t size); + +/* Search for an area by name, return pointer to its beginning */ +uint8_t *fmap_find_by_name(uint8_t *ptr, size_t size, + /* optional, will call fmap_find() if NULL */ + FmapHeader *fmap, + /* The area name to search for */ + const char *name, + /* optional, return pointer to entry if not NULL */ + FmapAreaHeader **ah); + +#endif /* VBOOT_REFERENCE_FMAP_H_ */ diff --git a/host/lib/include/gsc_ro.h b/host/lib/include/gsc_ro.h new file mode 100644 index 0000000..00a4011 --- /dev/null +++ b/host/lib/include/gsc_ro.h @@ -0,0 +1,59 @@ +/* + * Copyright 2021 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef __VBOOT_REFERENCE_HOST_LIB_INCLUDE_GSC_RO_H +#define __VBOOT_REFERENCE_HOST_LIB_INCLUDE_GSC_RO_H + +#include +#include + +#include "2sha.h" + +struct gscvd_ro_range { + uint32_t offset; + uint32_t size; /* Use uint32_t as opposed to size_to be portable. */ +}; + +#define GSC_VD_MAGIC 0x65666135 /* Little endian '5 a f e' */ +#define GSC_VD_ROLLBACK_COUNTER 1 + +struct gsc_verification_data { + uint32_t gv_magic; + /* + * Size of this structure in bytes, including the ranges array, + * signature and root key bodies. + */ + uint16_t size; + uint16_t major_version; /* Version of this struct layout. Starts at 0 */ + uint16_t minor_version; + /* + * GSC will cache the counter value and will not accept verification + * data blobs with a lower value. + */ + uint16_t rollback_counter; + uint32_t gsc_board_id; /* Locks blob to certain platform. */ + uint32_t gsc_flags; /* A field for future enhancements. */ + /* + * The location of fmap that points to this blob. This location must + * also be in one of the verified sections, expressed as offset in + * flash + */ + uint32_t fmap_location; + uint32_t hash_alg; /* one of enum vb2_hash_algorithm alg. */ + struct vb2_signature sig_header; + struct vb2_packed_key root_key_header; + /* + * SHAxxx(ranges[0].offset..ranges[0].size || ... || + * ranges[n].offset..ranges[n].size) + * + * Let the digest space allow to accommodate the largest possible one. + */ + uint8_t ranges_digest[VB2_SHA512_DIGEST_SIZE]; + uint32_t range_count; /* Number of gscvd_ro_range entries. */ + struct gscvd_ro_range ranges[0]; +}; + +#endif /* ! __VBOOT_REFERENCE_HOST_LIB_INCLUDE_GSC_RO_H */ diff --git a/host/lib/include/host_common.h b/host/lib/include/host_common.h new file mode 100644 index 0000000..a37a6c9 --- /dev/null +++ b/host/lib/include/host_common.h @@ -0,0 +1,81 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Host-side functions for verified boot. + */ + +#ifndef VBOOT_REFERENCE_HOST_COMMON_H_ +#define VBOOT_REFERENCE_HOST_COMMON_H_ + +#include "host_key.h" +#include "host_key21.h" +#include "host_keyblock.h" +#include "host_misc.h" +#include "host_signature.h" +#include "vboot_api.h" +#include "vboot_host.h" +#include "vboot_struct.h" + +/** + * Create a firmware preamble. + * + * @param firmware_version Firmware version + * @param kernel_subkey Kernel subkey to store in preamble + * @param body_signature Signature of firmware body + * @param signing_key Private key to sign header with + * @param flags Firmware preamble flags + * + * @return The preamble, or NULL if error. Caller must free() it. + */ +struct vb2_fw_preamble *vb2_create_fw_preamble( + uint32_t firmware_version, + const struct vb2_packed_key *kernel_subkey, + const struct vb2_signature *body_signature, + const struct vb2_private_key *signing_key, + uint32_t flags); + + +/** + * Create a kernel preamble. + * + * @param kernel_version Firmware version + * @param body_load_address Load address for kernel body + * @param bootloader_address Load address for bootloader + * @param bootloader_size Size of bootloader in bytes + * @param body_signature Signature of kernel body + * @param vmlinuz_header_address Load address for 16-bit vmlinuz header + * @param vmlinuz_header_size Size of 16-bit vmlinuz header in bytes + * @param flags Kernel preamble flags + * @param desired_size Minimum size of preamble in bytes + * @param signing_key Private key to sign header with + * + * @return The preamble, or NULL if error. Caller must free() it. + */ +struct vb2_kernel_preamble *vb2_create_kernel_preamble( + uint32_t kernel_version, + uint64_t body_load_address, + uint64_t bootloader_address, + uint32_t bootloader_size, + const struct vb2_signature *body_signature, + uint64_t vmlinuz_header_address, + uint32_t vmlinuz_header_size, + uint32_t flags, + uint32_t desired_size, + const struct vb2_private_key *signing_key); + +/** + * Retrieve the 16-bit vmlinuz header address and size from the preamble. + * + * Size 0 means there is no 16-bit vmlinuz header present. Old preamble + * versions (<2.1) return 0 for both fields. + * + * @param preamble Preamble to check + * @param vmlinuz_header_address Destination for header address + * @param vmlinuz_header_size Destination for header size + */ +void vb2_kernel_get_vmlinuz_header(const struct vb2_kernel_preamble *preamble, + uint64_t *vmlinuz_header_address, + uint32_t *vmlinuz_header_size); + +#endif /* VBOOT_REFERENCE_HOST_COMMON_H_ */ diff --git a/host/lib/include/host_key.h b/host/lib/include/host_key.h new file mode 100644 index 0000000..c6fea5b --- /dev/null +++ b/host/lib/include/host_key.h @@ -0,0 +1,163 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Host-side functions for verified boot. + */ + +#ifndef VBOOT_REFERENCE_HOST_KEY_H_ +#define VBOOT_REFERENCE_HOST_KEY_H_ + +#include "2crypto.h" +#include "2return_codes.h" + +struct vb2_public_key; +struct vb2_packed_key; +struct vb2_private_key; + +/** + * Convert a vb2 hash and crypto algorithm to a vb1 crypto algorithm. + * + * @param hash_alg Hash algorithm + * @param sig_alg Signature algorithm + * + * @return The equivalent vb1 crypto algorithm or VB2_ALG_COUNT if error. + */ +enum vb2_crypto_algorithm vb2_get_crypto_algorithm( + enum vb2_hash_algorithm hash_alg, + enum vb2_signature_algorithm sig_alg); + +/** + * Read a private key from a .pem file. + * + * @param filename Filename to read from + * @param algorithm Algorithm to associate with file + * (enum vb2_crypto_algorithm) + * + * @return The private key or NULL if error. Caller must free() it. + */ +struct vb2_private_key *vb2_read_private_key_pem( + const char *filename, + enum vb2_crypto_algorithm algorithm); + +/** + * Free a private key. + * + * @param key Key to free; ok to pass NULL (ignored). + */ +void vb2_free_private_key(struct vb2_private_key *key); + +/** + * Write a private key to a file in .vbprivk format. + * + * @param filename Filename to write to + * @param key Key to write + * + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb2_write_private_key(const char *filename, + const struct vb2_private_key *key); + + +/** + * Read a private key from a .vbprivk file. + * + * @param filename Filename to read key from. + * + * @return The private key or NULL if error. Caller must free() it. + */ +struct vb2_private_key *vb2_read_private_key(const char *filename); + +/** + * Allocate a new public key. + * @param key_size Size of key data the key can hold + * @param algorithm Algorithm to store in key header + * @param version Version to store in key header + * + * @return The public key or NULL if error. Caller must free() it. + */ +struct vb2_packed_key *vb2_alloc_packed_key(uint32_t key_size, + uint32_t algorithm, + uint32_t version); + +/** + * Initialize a packed key structure. + * + * @param key Structure to initialize + * @param key_data Pointer to key data (following the structure) + * @param key_size Size of key + */ +void vb2_init_packed_key(struct vb2_packed_key *key, uint8_t *key_data, + uint32_t key_size); + +/** + * Copy a packed key. + * + * @param dest Destination packed key + * @param src Source packed key + * + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb2_copy_packed_key(struct vb2_packed_key *dest, + const struct vb2_packed_key *src); + +/** + * Read a packed key from a .vbpubk file. + * + * @param filename Name of file to read + * @param algorithm Crypto algorithm to associate with key + * @param version Version to store in key + * + * @return The packed key, or NULL if error. Caller must free() it. + */ +struct vb2_packed_key *vb2_read_packed_key(const char *filename); + +/** + * Validity-check a packed key structure. + * + * @param key Key to check + * @param size Size of key buffer in bytes + * + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb2_packed_key_looks_ok(const struct vb2_packed_key *key, + uint32_t size); + +/** + * Read a packed key from a .keyb file. + * + * @param filename Name of file to read + * @param algorithm Crypto algorithm to associate with key + * @param version Version to store in key + * + * @return The packed key, or NULL if error. Caller must free() it. + */ +struct vb2_packed_key *vb2_read_packed_keyb(const char *filename, + uint32_t algorithm, + uint32_t version); + +/** + * Write a packed key in .vbpubk format. + * + * @param filename Name of file to write + * @param key Key to write + * + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb2_write_packed_key(const char *filename, + const struct vb2_packed_key *key); + +/** + * Unpack the RSA data fields for a public key + * + * This is called by vb21_unpack_key() to extract the arrays from a packed key. + * These elements of *key will point inside the key_data buffer. + * + * @param key Destination key for RSA data fields + * @param key_data Packed key data (from inside a packed key buffer) + * @param key_size Size of packed key data in bytes + */ +vb2_error_t vb2_unpack_key_data(struct vb2_public_key *key, + const uint8_t *key_data, uint32_t key_size); + +#endif /* VBOOT_REFERENCE_HOST_KEY_H_ */ diff --git a/host/lib/include/host_keyblock.h b/host/lib/include/host_keyblock.h new file mode 100644 index 0000000..2125796 --- /dev/null +++ b/host/lib/include/host_keyblock.h @@ -0,0 +1,70 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Host-side functions for verified boot. + */ + +#ifndef VBOOT_REFERENCE_HOST_KEYBLOCK_H_ +#define VBOOT_REFERENCE_HOST_KEYBLOCK_H_ + +#include "host_key.h" +#include "vboot_struct.h" + +struct vb2_keyblock; + +/** + * Create a keyblock header + * + * @param data_key Data key to store in keyblock + * @param signing_key Key to sign keyblock with. May be NULL if keyblock + * only needs a hash digest. + * @param flags Keyblock flags + * + * @return The keyblock, or NULL if error. Caller must free() it. + */ +struct vb2_keyblock *vb2_create_keyblock( + const struct vb2_packed_key *data_key, + const struct vb2_private_key *signing_key, + uint32_t flags); + +/** + * Create a keyblock header using an external signer for all private key + * operations. + * + * @param data_key Data key to store in keyblock + * @param signing_key_pem_file Filename of private key + * @param algorithm Signing algorithm index + * @param flags Keyblock flags + * @param external_signer Path to external signer program + * + * @return The keyblock, or NULL if error. Caller must free() it. + */ +struct vb2_keyblock *vb2_create_keyblock_external( + const struct vb2_packed_key *data_key, + const char *signing_key_pem_file, + uint32_t algorithm, + uint32_t flags, + const char *external_signer); + +/** + * Read a keyblock from a .keyblock file. + * + * @param filename File to read keyblock from + * + * @return The keyblock, or NULL if error. Caller must free() it. + */ +struct vb2_keyblock *vb2_read_keyblock(const char *filename); + +/** + * Write a keyblock to a file in .keyblock format. + * + * @param filename Filename to write + * @param keyblock Keyblock to write + * + * @return VB2_SUCCESS, or non-zero if error. + */ +int vb2_write_keyblock(const char *filename, + const struct vb2_keyblock *keyblock); + +#endif /* VBOOT_REFERENCE_HOST_KEYBLOCK_H_ */ diff --git a/host/lib/include/host_misc.h b/host/lib/include/host_misc.h new file mode 100644 index 0000000..298e742 --- /dev/null +++ b/host/lib/include/host_misc.h @@ -0,0 +1,102 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Host-side misc functions for verified boot. + */ + +#ifndef VBOOT_REFERENCE_HOST_MISC_H_ +#define VBOOT_REFERENCE_HOST_MISC_H_ + +#include "vboot_struct.h" +#include "vboot_api.h" + +/* Copy up to dest_size-1 characters from src to dest, ensuring null + * termination (which strncpy() doesn't do). Returns the destination + * string. */ +char* StrCopy(char* dest, const char* src, int dest_size); + +/* Read data from [filename]. Store the size of returned data in [size]. + * + * Returns the data buffer, which the caller must Free(), or NULL if + * error. */ +uint8_t* ReadFile(const char* filename, uint64_t* size); + +/* Read a string from a file. Passed the destination, dest size, and + * filename to read. + * + * Returns the destination, or NULL if error. */ +char* ReadFileString(char* dest, int size, const char* filename); + +/* Read an unsigned integer from a file and save into passed pointer. + * + * Returns 0 if success, -1 if error. */ +int ReadFileInt(const char* filename, unsigned* value); + +/* Check if a bit is set in a file which contains an integer. + * + * Returns 1 if the bit is set, 0 if clear, or -1 if error. */ +int ReadFileBit(const char* filename, int bitmask); + +/* Writes [size] bytes of [data] to [filename]. + * + * Returns 0 if success, 1 if error. */ +vb2_error_t WriteFile(const char* filename, const void *data, uint64_t size); + +/** + * Read data from a file into a newly allocated buffer. + * The buffer will end with an extra null byte ('\0', not counted in size). + * + * @param filename Name of file to read from + * @param data_ptr On exit, pointer to newly allocated buffer with data + * will be stored here. Caller must free() the buffer + * when done with it. + * @param size_ptr On exit, size of data will be stored here. + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb2_read_file(const char *filename, uint8_t **data_ptr, + uint32_t *size_ptr); + +/** + * Write data to a file from a buffer. + * + * @param filename Name of file to write to + * @param buf Buffer to write + * @param size Number of bytes of data to write + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb2_write_file(const char *filename, const void *buf, + uint32_t size); + +/** + * Write a buffer which starts with a standard vb21_struct_common header. + * + * Determines the buffer size from the common header total size field. + * + * @param filename Name of file to write to + * @param buf Buffer to write + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb21_write_object(const char *filename, const void *buf); + +/** + * Round up a size to a multiple of 32 bits (4 bytes). + */ +static inline const uint32_t roundup32(uint32_t v) +{ + return (v + 3) & ~3; +} + +/** + * Return the buffer size required to hold a description string. + * + * If the string is NULL or empty, the size is zero. Otherwise, it is the + * size of a buffer which can hold the string and its null terminator, + * rounded up to the nerest multiple of 32 bits. + * + * @param desc Description string + * @return The buffer size in bytes. + */ +uint32_t vb2_desc_size(const char *desc); + +#endif /* VBOOT_REFERENCE_HOST_MISC_H_ */ diff --git a/host/lib/include/host_signature.h b/host/lib/include/host_signature.h new file mode 100644 index 0000000..72160fd --- /dev/null +++ b/host/lib/include/host_signature.h @@ -0,0 +1,88 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Host-side functions for verified boot. + */ + +#ifndef VBOOT_REFERENCE_HOST_SIGNATURE_H_ +#define VBOOT_REFERENCE_HOST_SIGNATURE_H_ + +#include "host_key.h" +#include "vboot_struct.h" + +struct vb2_private_key; +struct vb2_signature; + +/** + * Initialize a signature struct. + * + * @param sig Structure to initialize + * @param sig_data Pointer to signature data buffer (after sig) + * @param sig_size Size of signature data buffer in bytes + * @param data_size Amount of data signed in bytes + */ +void vb2_init_signature(struct vb2_signature *sig, uint8_t *sig_data, + uint32_t sig_size, uint32_t data_size); + + +/** + * Allocate a new signature. + * + * @param sig_size Size of signature in bytes + * @param data_size Amount of data signed in bytes + * + * @return The signature or NULL if error. Caller must free() it. + */ +struct vb2_signature *vb2_alloc_signature(uint32_t sig_size, + uint32_t data_size); + +/** + * Copy a signature. + * + * @param dest Destination signature + * @param src Source signature + * + * @return VB2_SUCCESS, or non-zero if error. */ +vb2_error_t vb2_copy_signature(struct vb2_signature *dest, + const struct vb2_signature *src); + +/** + * Calculate a SHA-512 digest-only signature. + * + * @param data Pointer to data to hash + * @param size Length of data in bytes + * + * @return The signature, or NULL if error. Caller must free() it. + */ +struct vb2_signature *vb2_sha512_signature(const uint8_t *data, uint32_t size); + +/** + * Calculate a signature for the data using the specified key. + * + * @param data Pointer to data to sign + * @param size Length of data in bytes + * @param key Private key to use to sign data + * + * @return The signature, or NULL if error. Caller must free() it. + */ +struct vb2_signature *vb2_calculate_signature( + const uint8_t *data, uint32_t size, const struct vb2_private_key *key); + +/** + * Calculate a signature for the data using an external signer. + * + * @param data Pointer to data to sign + * @param size Length of data in bytes + * @param key_file Name of file containing private key + * @param key_algorithm Key algorithm + * @param external_signer Path to external signer program + * + * @return The signature, or NULL if error. Caller must free() it. + */ +struct vb2_signature *vb2_external_signature(const uint8_t *data, uint32_t size, + const char *key_file, + uint32_t key_algorithm, + const char *external_signer); + +#endif /* VBOOT_REFERENCE_HOST_SIGNATURE_H_ */ diff --git a/host/lib/include/signature_digest.h b/host/lib/include/signature_digest.h new file mode 100644 index 0000000..ac0cd11 --- /dev/null +++ b/host/lib/include/signature_digest.h @@ -0,0 +1,36 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_SIGNATURE_DIGEST_H_ +#define VBOOT_REFERENCE_SIGNATURE_DIGEST_H_ + +#include + +/* Returns a buffer with DigestInfo (which depends on [algorithm]) + * prepended to [digest]. + */ +uint8_t* PrependDigestInfo(enum vb2_hash_algorithm hash_alg, uint8_t* digest); + +/* Function that outputs the message digest of the contents of a buffer in a + * format that can be used as input to OpenSSL for an RSA signature. + * Needed until the stable OpenSSL release supports SHA-256/512 digests for + * RSA signatures. + * + * Returns DigestInfo || Digest where DigestInfo is the OID depending on the + * choice of the hash algorithm (see padding.c). Caller owns the returned + * pointer and must Free() it. + */ +uint8_t* SignatureDigest(const uint8_t* buf, uint64_t len, + unsigned int algorithm); + +/* Calculates the signature on a buffer [buf] of length [len] using + * the private RSA key file from [key_file] and signature algorithm + * [algorithm]. + * + * Returns the signature. Caller owns the buffer and must Free() it. + */ +uint8_t* SignatureBuf(const uint8_t* buf, uint64_t len, const char* key_file, + unsigned int algorithm); +#endif /* VBOOT_REFERENCE_SIGNATURE_DIGEST_H_ */ diff --git a/host/lib/include/subprocess.h b/host/lib/include/subprocess.h new file mode 100644 index 0000000..b24b987 --- /dev/null +++ b/host/lib/include/subprocess.h @@ -0,0 +1,125 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Library for creating subprocesses in a high level manner. + */ + +#ifndef VBOOT_REFERENCE_SUBPROCESS_H_ +#define VBOOT_REFERENCE_SUBPROCESS_H_ + +#include +#include + +/** + * subprocess_target is the "mini language" of the subprocess + * library. It describes where to read or write data from the process. + * + * There are currently five target of targets: + * + * - TARGET_NULL: /dev/null, no need to describe any other fields. + * + * - TARGET_FD: file descriptor, put the fd in the fd field. + * + * - TARGET_FILE: FILE *, put the FILE pointer in the file field. + * + * - TARGET_BUFFER: read to, or write from, a buffer. Fields: + * - buffer->buf: the buffer + * - buffer->size: the size of that buffer + * - buffer->bytes_consumed: do not fill out this field. + * subprocess_run will set it to the number of bytes read from the + * process (if writing to a buffer). Goes unused when reading from + * a buffer. + * + * - TARGET_BUFFER_NULL_TERMINATED: when reading from a buffer, don't + * fill out the size field and subprocess_run will strlen for you. + * When writing to a buffer, subprocess_run will reserve one byte of + * the size for a null terminator and guarantee that the output is + * always NULL terminated. + * + * - TARGET_CALLBACK: when the target is provided as an input to a + * process, the callback will be called occasionally to provide + * input to the process. The callback should fill buf with up to + * buf_sz bytes of data, and return the number of bytes + * written, or negative values on error. When the target is provided + * as an output to a process, the callback will be called + * occasionally with buf_sz bytes of data from the output put into + * buf. In this case, the return value from the callback is + * ignored except for errors. The data field is for application use + * and will always be passed to the data parameter of the callback + * function. + */ +struct subprocess_target { + enum { + TARGET_NULL, + TARGET_FD, + TARGET_FILE, + TARGET_BUFFER, + TARGET_BUFFER_NULL_TERMINATED, + TARGET_CALLBACK, + } type; + union { + int fd; + FILE *file; + struct { + char *buf; + size_t size; + + /* + * This variable is the output of the number of bytes + * read or written. It should be read by the caller, not + * set. + */ + size_t bytes_consumed; + } buffer; + struct { + ssize_t (*cb)(char *buf, size_t buf_sz, void *data); + void *data; + } callback; + }; + struct { + int pipefd[2]; + } priv; +}; + +/** + * A convenience subprocess target which uses TARGET_NULL. + */ +extern struct subprocess_target subprocess_null; + +/** + * A convenience subprocess target which uses TARGET_FD to STDIN_FILENO. + */ +extern struct subprocess_target subprocess_stdin; + +/** + * A convenience subprocess target which uses TARGET_FD to STDOUT_FILENO. + */ +extern struct subprocess_target subprocess_stdout; + +/** + * A convenience subprocess target which uses TARGET_FD to STDERR_FILENO. + */ +extern struct subprocess_target subprocess_stderr; + +/** + * Call a process and run until completion. + * + * @param argv A NULL-terminated list of arguments describing + * the program to run. + * @param input The subprocess_target connected to stdin. + * @param output The subprocess_target connected to stdout. + * @param error The subprocess_target connected to stderr. + * + * If either input, output, or error are set to NULL, they will be + * &subprocess_stdin, &subprocess_stdout, or &subprocess_stderr + * respectively. + * + * @return The exit status on success, or negative values on error. + */ +int subprocess_run(const char *const argv[], + struct subprocess_target *input, + struct subprocess_target *output, + struct subprocess_target *error); + +#endif /* VBOOT_REFERENCE_SUBPROCESS_H_ */ diff --git a/host/lib/include/util_misc.h b/host/lib/include/util_misc.h new file mode 100644 index 0000000..1f92af9 --- /dev/null +++ b/host/lib/include/util_misc.h @@ -0,0 +1,68 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Host-side misc functions for verified boot. + */ + +#ifndef VBOOT_REFERENCE_UTIL_MISC_H_ +#define VBOOT_REFERENCE_UTIL_MISC_H_ + +#include "host_key.h" +#include "vboot_struct.h" + +struct rsa_st; +struct vb2_packed_key; +struct vb2_private_key; + +/** + * Returns the SHA1 digest of the packed key data as a string. + * + * The returned string is a global static buffer, so each call to this + * overwrites the previous digest string. So don't call this more than once + * per printf(). + * + * @param key Key to print digest for + * + * @return A string containing the SHA1 digest. + */ +const char *packed_key_sha1_string(const struct vb2_packed_key *key); + +/** + * Returns the SHA1 digest of the private key data as a string. + * + * The returned string is a global static buffer, so each call to this + * overwrites the previous digest string. So don't call this more than once + * per printf(). + * + * @param key Key to print digest for + * + * @return A string containing the SHA1 digest. + */ +const char *private_key_sha1_string(const struct vb2_private_key *key); + +/* + * Our packed RSBPublicKey buffer (historically in files ending with ".keyb", + * but also the part of struct vb2_packed_key and struct vb21_packed_key that + * is referenced by .key_offset) has this binary format: + * + * struct { + * uint32_t nwords; // size of RSA key in 32-bit words + * uint32_t N0inv; // -1 / N[0] mod 2^32 + * uint32_t modulus[nwords]; // modulus as a little endian array + * uint32_t R2[nwords]; // R^2 as little endian array + * }; + * + * This function allocates and extracts that binary structure directly + * from the RSA private key, rather than from a file. + * + * @param rsa_private_key RSA private key (duh) + * @param keyb_data Pointer to newly allocated binary blob + * @param keyb_size Size of newly allocated binary blob + * + * @return 0 on success, non-zero if unable to allocate enough memory. + */ +int vb_keyb_from_rsa(struct rsa_st *rsa_private_key, + uint8_t **keyb_data, uint32_t *keyb_size); + +#endif /* VBOOT_REFERENCE_UTIL_MISC_H_ */ diff --git a/host/lib/signature_digest.c b/host/lib/signature_digest.c new file mode 100644 index 0000000..f6be00a --- /dev/null +++ b/host/lib/signature_digest.c @@ -0,0 +1,114 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include + +#include +#include +#include + +#include "2common.h" +#include "2rsa.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "host_common.h" +#include "host_signature21.h" +#include "signature_digest.h" + +uint8_t* PrependDigestInfo(enum vb2_hash_algorithm hash_alg, uint8_t* digest) +{ + const int digest_size = vb2_digest_size(hash_alg); + uint32_t digestinfo_size = 0; + const uint8_t* digestinfo = NULL; + + if (VB2_SUCCESS != vb2_digest_info(hash_alg, &digestinfo, + &digestinfo_size)) + return NULL; + + uint8_t* p = malloc(digestinfo_size + digest_size); + memcpy(p, digestinfo, digestinfo_size); + memcpy(p + digestinfo_size, digest, digest_size); + return p; +} + +uint8_t* SignatureDigest(const uint8_t* buf, uint64_t len, + unsigned int algorithm) +{ + uint8_t* info_digest = NULL; + + uint8_t digest[VB2_SHA512_DIGEST_SIZE]; /* Longest digest */ + enum vb2_hash_algorithm hash_alg; + + if (algorithm >= VB2_ALG_COUNT) { + fprintf(stderr, + "SignatureDigest(): Called with invalid algorithm!\n"); + return NULL; + } + + hash_alg = vb2_crypto_to_hash(algorithm); + + if (VB2_SUCCESS == vb2_digest_buffer(buf, len, hash_alg, + digest, sizeof(digest))) { + info_digest = PrependDigestInfo(hash_alg, digest); + } + return info_digest; +} + +uint8_t* SignatureBuf(const uint8_t* buf, uint64_t len, const char* key_file, + unsigned int algorithm) +{ + const enum vb2_hash_algorithm hash_alg = vb2_crypto_to_hash(algorithm); + FILE* key_fp = NULL; + RSA* key = NULL; + uint8_t* signature = NULL; + uint8_t* signature_digest = SignatureDigest(buf, len, algorithm); + if (!signature_digest) { + fprintf(stderr, "SignatureBuf(): " + "Couldn't get signature digest\n"); + return NULL; + } + + const int digest_size = vb2_digest_size(hash_alg); + + uint32_t digestinfo_size = 0; + const uint8_t* digestinfo = NULL; + if (VB2_SUCCESS != vb2_digest_info(hash_alg, &digestinfo, + &digestinfo_size)) { + fprintf(stderr, "SignatureBuf(): Couldn't get digest info\n"); + free(signature_digest); + return NULL; + } + + int signature_digest_len = digest_size + digestinfo_size; + + key_fp = fopen(key_file, "r"); + if (!key_fp) { + fprintf(stderr, "SignatureBuf(): Couldn't open key file: %s\n", + key_file); + free(signature_digest); + return NULL; + } + if ((key = PEM_read_RSAPrivateKey(key_fp, NULL, NULL, NULL))) + signature = (uint8_t *)malloc( + vb2_rsa_sig_size(vb2_crypto_to_signature(algorithm))); + else + fprintf(stderr, "SignatureBuf(): " + "Couldn't read private key from: %s\n", key_file); + if (signature) { + if (-1 == RSA_private_encrypt( + signature_digest_len, /* Input length. */ + signature_digest, /* Input data. */ + signature, /* Output signature. */ + key, /* Key to use. */ + RSA_PKCS1_PADDING)) /* Padding to use. */ + fprintf(stderr, "SignatureBuf(): " + "RSA_private_encrypt() failed.\n"); + } + fclose(key_fp); + if (key) + RSA_free(key); + free(signature_digest); + return signature; +} diff --git a/host/lib/subprocess.c b/host/lib/subprocess.c new file mode 100644 index 0000000..242b189 --- /dev/null +++ b/host/lib/subprocess.c @@ -0,0 +1,325 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include +#include +#include + +#include "2common.h" +#include "subprocess.h" + +#define MAX_CB_BUF_SIZE 2048 + +static int init_target_private(struct subprocess_target *target) +{ + switch (target->type) { + case TARGET_BUFFER: + case TARGET_BUFFER_NULL_TERMINATED: + case TARGET_CALLBACK: + return pipe(target->priv.pipefd); + default: + return 0; + } +} + +static int flags_for_fd(int fd) +{ + switch (fd) { + case STDIN_FILENO: + return O_RDONLY; + case STDOUT_FILENO: + case STDERR_FILENO: + return O_WRONLY; + default: + return -1; + } +} + +static int connect_process_target(struct subprocess_target *target, int fd) +{ + int target_fd; + + switch (target->type) { + case TARGET_NULL: + target_fd = open("/dev/null", flags_for_fd(fd)); + break; + case TARGET_FD: + target_fd = target->fd; + break; + case TARGET_FILE: + target_fd = fileno(target->file); + break; + case TARGET_BUFFER: + case TARGET_BUFFER_NULL_TERMINATED: + case TARGET_CALLBACK: + switch (fd) { + case STDIN_FILENO: + target_fd = target->priv.pipefd[0]; + close(target->priv.pipefd[1]); + break; + case STDOUT_FILENO: + case STDERR_FILENO: + target_fd = target->priv.pipefd[1]; + close(target->priv.pipefd[0]); + break; + default: + return -1; + } + break; + default: + return -1; + } + + return dup2(target_fd, fd); +} + +static int process_target_input_buffer(struct subprocess_target *target) +{ + ssize_t write_rv; + size_t bytes_to_write; + char *buf; + + switch (target->type) { + case TARGET_BUFFER: + bytes_to_write = target->buffer.size; + break; + case TARGET_BUFFER_NULL_TERMINATED: + bytes_to_write = strlen(target->buffer.buf); + break; + default: + return -1; + } + + buf = target->buffer.buf; + while (bytes_to_write) { + write_rv = write(target->priv.pipefd[1], buf, bytes_to_write); + if (write_rv <= 0) + return -1; + buf += write_rv; + bytes_to_write -= write_rv; + } + + return 0; +} + +static int process_target_input_cb(struct subprocess_target *target) +{ + ssize_t write_rv, bytes_to_write; + char buf[MAX_CB_BUF_SIZE]; + char *bufptr; + + for (;;) { + bytes_to_write = target->callback.cb(buf, MAX_CB_BUF_SIZE, + target->callback.data); + if (bytes_to_write < 0 || bytes_to_write > MAX_CB_BUF_SIZE) + return -1; + if (bytes_to_write == 0) + return 0; + + bufptr = buf; + while (bytes_to_write) { + write_rv = write(target->priv.pipefd[1], bufptr, + bytes_to_write); + if (write_rv <= 0) + return -1; + bufptr += write_rv; + bytes_to_write -= write_rv; + } + } +} + +static int process_target_input(struct subprocess_target *target) +{ + int rv; + + switch (target->type) { + case TARGET_BUFFER: + case TARGET_BUFFER_NULL_TERMINATED: + case TARGET_CALLBACK: + break; + default: + return 0; + } + + close(target->priv.pipefd[0]); + switch (target->type) { + case TARGET_BUFFER: + case TARGET_BUFFER_NULL_TERMINATED: + rv = process_target_input_buffer(target); + break; + case TARGET_CALLBACK: + rv = process_target_input_cb(target); + break; + default: + return -1; + } + + close(target->priv.pipefd[1]); + return rv; +} + +static int process_target_output_buffer(struct subprocess_target *target) +{ + ssize_t read_rv; + size_t bytes_remaining; + + switch (target->type) { + case TARGET_BUFFER: + bytes_remaining = target->buffer.size; + break; + case TARGET_BUFFER_NULL_TERMINATED: + if (target->buffer.size == 0) + return -1; + bytes_remaining = target->buffer.size - 1; + break; + default: + return 0; + } + + target->buffer.bytes_consumed = 0; + while (bytes_remaining) { + read_rv = read( + target->priv.pipefd[0], + target->buffer.buf + target->buffer.bytes_consumed, + bytes_remaining); + if (read_rv < 0) + return -1; + if (read_rv == 0) + break; + target->buffer.bytes_consumed += read_rv; + bytes_remaining -= read_rv; + } + + if (target->type == TARGET_BUFFER_NULL_TERMINATED) + target->buffer.buf[target->buffer.bytes_consumed] = '\0'; + return 0; +} + +static int process_target_output_cb(struct subprocess_target *target) +{ + char buf[MAX_CB_BUF_SIZE]; + ssize_t rv; + + for (;;) { + rv = read(target->priv.pipefd[0], buf, MAX_CB_BUF_SIZE); + if (rv < 0) + return -1; + if (rv == 0) + break; + if (target->callback.cb(buf, rv, target->callback.data) < 0) + return -1; + } + + return 0; +} + +static int process_target_output(struct subprocess_target *target) +{ + int rv; + + switch (target->type) { + case TARGET_BUFFER: + case TARGET_BUFFER_NULL_TERMINATED: + case TARGET_CALLBACK: + break; + default: + return 0; + } + + close(target->priv.pipefd[1]); + switch (target->type) { + case TARGET_BUFFER: + case TARGET_BUFFER_NULL_TERMINATED: + rv = process_target_output_buffer(target); + break; + case TARGET_CALLBACK: + rv = process_target_output_cb(target); + break; + default: + return -1; + } + + close(target->priv.pipefd[0]); + return rv; +} + +struct subprocess_target subprocess_null = { + .type = TARGET_NULL, +}; + +struct subprocess_target subprocess_stdin = { + .type = TARGET_FD, + .fd = STDIN_FILENO, +}; + +struct subprocess_target subprocess_stdout = { + .type = TARGET_FD, + .fd = STDOUT_FILENO, +}; + +struct subprocess_target subprocess_stderr = { + .type = TARGET_FD, + .fd = STDERR_FILENO, +}; + +int subprocess_run(const char *const argv[], + struct subprocess_target *input, + struct subprocess_target *output, + struct subprocess_target *error) +{ + int status; + pid_t pid = -1; + + if (!input) + input = &subprocess_stdin; + if (!output) + output = &subprocess_stdout; + if (!error) + error = &subprocess_stderr; + + if (init_target_private(input) < 0) + goto fail; + if (init_target_private(output) < 0) + goto fail; + if (init_target_private(error) < 0) + goto fail; + + if ((pid = fork()) < 0) + goto fail; + if (pid == 0) { + /* Child process */ + if (connect_process_target(input, STDIN_FILENO) < 0) + goto fail; + if (connect_process_target(output, STDOUT_FILENO) < 0) + goto fail; + if (connect_process_target(error, STDERR_FILENO) < 0) + goto fail; + execvp(*argv, (char *const *)argv); + goto fail; + } + + /* Parent process */ + if (process_target_input(input) < 0) + goto fail; + if (process_target_output(output) < 0) + goto fail; + if (process_target_output(error) < 0) + goto fail; + + if (waitpid(pid, &status, 0) < 0) + goto fail; + + if (WIFEXITED(status)) + return WEXITSTATUS(status); + + fail: + VB2_DEBUG("Failed to execute external command: %s\n", strerror(errno)); + if (pid == 0) + exit(127); + return -1; +} diff --git a/host/lib/util_misc.c b/host/lib/util_misc.c new file mode 100644 index 0000000..26f7dac --- /dev/null +++ b/host/lib/util_misc.c @@ -0,0 +1,177 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Miscellaneous functions for userspace vboot utilities. + */ + +#include +#include + +#include +#include +#include +#include + +#include "2common.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "host_common.h" +#include "host_key21.h" +#include "openssl_compat.h" +#include "util_misc.h" + +const char *packed_key_sha1_string(const struct vb2_packed_key *key) +{ + uint8_t *buf = ((uint8_t *)key) + key->key_offset; + uint32_t buflen = key->key_size; + uint8_t digest[VB2_SHA1_DIGEST_SIZE]; + static char dest[VB2_SHA1_DIGEST_SIZE * 2 + 1]; + + vb2_digest_buffer(buf, buflen, VB2_HASH_SHA1, digest, sizeof(digest)); + + char *dnext = dest; + int i; + for (i = 0; i < sizeof(digest); i++) + dnext += sprintf(dnext, "%02x", digest[i]); + + return dest; +} + +const char *private_key_sha1_string(const struct vb2_private_key *key) +{ + uint8_t *buf; + uint32_t buflen; + uint8_t digest[VB2_SHA1_DIGEST_SIZE]; + static char dest[VB2_SHA1_DIGEST_SIZE * 2 + 1]; + + if (!key->rsa_private_key || + vb_keyb_from_rsa(key->rsa_private_key, &buf, &buflen)) { + return ""; + } + + vb2_digest_buffer(buf, buflen, VB2_HASH_SHA1, digest, sizeof(digest)); + + char *dnext = dest; + int i; + for (i = 0; i < sizeof(digest); i++) + dnext += sprintf(dnext, "%02x", digest[i]); + + free(buf); + return dest; +} + +int vb_keyb_from_rsa(struct rsa_st *rsa_private_key, + uint8_t **keyb_data, uint32_t *keyb_size) +{ + uint32_t i, nwords; + BIGNUM *N = NULL; + BIGNUM *Big1 = NULL, *Big2 = NULL, *Big32 = NULL, *BigMinus1 = NULL; + BIGNUM *B = NULL; + BIGNUM *N0inv = NULL, *R = NULL, *RR = NULL; + BIGNUM *RRTemp = NULL, *NnumBits = NULL; + BIGNUM *n = NULL, *rr = NULL; + const BIGNUM *rsa_private_key_n; + BN_CTX *bn_ctx = BN_CTX_new(); + uint32_t n0invout; + uint32_t bufsize; + uint32_t *outbuf; + int retval = 1; + + /* Size of RSA key in 32-bit words */ + nwords = RSA_size(rsa_private_key) / 4; + + bufsize = (2 + nwords + nwords) * sizeof(uint32_t); + outbuf = malloc(bufsize); + if (!outbuf) + goto done; + + *keyb_data = (uint8_t *)outbuf; + *keyb_size = bufsize; + + *outbuf++ = nwords; + + /* Initialize BIGNUMs */ +#define NEW_BIGNUM(x) do { x = BN_new(); if (!x) goto done; } while (0) + NEW_BIGNUM(N); + NEW_BIGNUM(Big1); + NEW_BIGNUM(Big2); + NEW_BIGNUM(Big32); + NEW_BIGNUM(BigMinus1); + NEW_BIGNUM(N0inv); + NEW_BIGNUM(R); + NEW_BIGNUM(RR); + NEW_BIGNUM(RRTemp); + NEW_BIGNUM(NnumBits); + NEW_BIGNUM(n); + NEW_BIGNUM(rr); + NEW_BIGNUM(B); +#undef NEW_BIGNUM + + RSA_get0_key(rsa_private_key, &rsa_private_key_n, NULL, NULL); + BN_copy(N, rsa_private_key_n); + BN_set_word(Big1, 1L); + BN_set_word(Big2, 2L); + BN_set_word(Big32, 32L); + BN_sub(BigMinus1, Big1, Big2); + + BN_exp(B, Big2, Big32, bn_ctx); /* B = 2^32 */ + + /* Calculate and output N0inv = -1 / N[0] mod 2^32 */ + BN_mod_inverse(N0inv, N, B, bn_ctx); + BN_sub(N0inv, B, N0inv); + n0invout = BN_get_word(N0inv); + + *outbuf++ = n0invout; + + /* Calculate R = 2^(# of key bits) */ + BN_set_word(NnumBits, BN_num_bits(N)); + BN_exp(R, Big2, NnumBits, bn_ctx); + + /* Calculate RR = R^2 mod N */ + BN_copy(RR, R); + BN_mul(RRTemp, RR, R, bn_ctx); + BN_mod(RR, RRTemp, N, bn_ctx); + + + /* Write out modulus as little endian array of integers. */ + for (i = 0; i < nwords; ++i) { + uint32_t nout; + + BN_mod(n, N, B, bn_ctx); /* n = N mod B */ + nout = BN_get_word(n); + *outbuf++ = nout; + + BN_rshift(N, N, 32); /* N = N/B */ + } + + /* Write R^2 as little endian array of integers. */ + for (i = 0; i < nwords; ++i) { + uint32_t rrout; + + BN_mod(rr, RR, B, bn_ctx); /* rr = RR mod B */ + rrout = BN_get_word(rr); + *outbuf++ = rrout; + + BN_rshift(RR, RR, 32); /* RR = RR/B */ + } + + outbuf = NULL; + retval = 0; + +done: + free(outbuf); + /* Free BIGNUMs. */ + BN_free(Big1); + BN_free(Big2); + BN_free(Big32); + BN_free(BigMinus1); + BN_free(N0inv); + BN_free(R); + BN_free(RRTemp); + BN_free(NnumBits); + BN_free(n); + BN_free(rr); + + return retval; +} diff --git a/host/lib21/host_common.c b/host/lib21/host_common.c new file mode 100644 index 0000000..245b188 --- /dev/null +++ b/host/lib21/host_common.c @@ -0,0 +1,303 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Signature validation functions + */ + +#include "2common.h" +#include "2rsa.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "host_common21.h" + +const char *vb21_common_desc(const void *buf) +{ + const struct vb21_struct_common *c = buf; + + return c->desc_size ? (const char *)c + c->fixed_size : ""; +} + +vb2_error_t vb21_verify_common_header(const void *parent, uint32_t parent_size) +{ + const struct vb21_struct_common *c = parent; + + /* Parent buffer size must be at least the claimed total size */ + if (parent_size < c->total_size) + return VB2_ERROR_COMMON_TOTAL_SIZE; + + /* + * And big enough for the fixed size, which itself must be at least as + * big as the common struct header. + */ + if (c->total_size < c->fixed_size || c->fixed_size < sizeof(*c)) + return VB2_ERROR_COMMON_FIXED_SIZE; + + /* Make sure sizes are all multiples of 32 bits */ + if (!vb2_aligned(c->total_size, sizeof(uint32_t))) + return VB2_ERROR_COMMON_TOTAL_UNALIGNED; + if (!vb2_aligned(c->fixed_size, sizeof(uint32_t))) + return VB2_ERROR_COMMON_FIXED_UNALIGNED; + if (!vb2_aligned(c->desc_size, sizeof(uint32_t))) + return VB2_ERROR_COMMON_DESC_UNALIGNED; + + /* Check description */ + if (c->desc_size > 0) { + /* Make sure description fits and doesn't wrap */ + if (c->fixed_size + c->desc_size < c->fixed_size) + return VB2_ERROR_COMMON_DESC_WRAPS; + if (c->fixed_size + c->desc_size > c->total_size) + return VB2_ERROR_COMMON_DESC_SIZE; + + /* Description must be null-terminated */ + if (vb21_common_desc(c)[c->desc_size - 1] != 0) + return VB2_ERROR_COMMON_DESC_TERMINATOR; + } + + return VB2_SUCCESS; +} + +vb2_error_t vb21_verify_common_member(const void *parent, uint32_t *min_offset, + uint32_t member_offset, + uint32_t member_size) +{ + const struct vb21_struct_common *c = parent; + uint32_t member_end = member_offset + member_size; + + /* Make sure member doesn't wrap */ + if (member_end < member_offset) + return VB2_ERROR_COMMON_MEMBER_WRAPS; + + /* Member offset and size must be 32-bit aligned */ + if (!vb2_aligned(member_offset, sizeof(uint32_t)) || + !vb2_aligned(member_size, sizeof(uint32_t))) + return VB2_ERROR_COMMON_MEMBER_UNALIGNED; + + /* Initialize minimum offset if necessary */ + if (!*min_offset) + *min_offset = c->fixed_size + c->desc_size; + + /* Member must be after minimum offset */ + if (member_offset < *min_offset) + return VB2_ERROR_COMMON_MEMBER_OVERLAP; + + /* Member must end before total size */ + if (member_end > c->total_size) + return VB2_ERROR_COMMON_MEMBER_SIZE; + + /* Update minimum offset for subsequent checks */ + *min_offset = member_end; + + return VB2_SUCCESS; +} + +vb2_error_t vb21_verify_common_subobject(const void *parent, + uint32_t *min_offset, + uint32_t member_offset) +{ + const struct vb21_struct_common *p = parent; + const struct vb21_struct_common *m = + (const struct vb21_struct_common *) + ((const uint8_t *)parent + member_offset); + vb2_error_t rv; + + /* + * Verify the parent has space at the member offset for the common + * header. + */ + rv = vb21_verify_common_member(parent, min_offset, member_offset, + sizeof(*m)); + if (rv) + return rv; + + /* + * Now it's safe to look at the member's header, and verify any + * additional data for the object past its common header fits in the + * parent. + */ + rv = vb21_verify_common_header(m, p->total_size - member_offset); + if (rv) + return rv; + + /* Advance the min offset to the end of the subobject */ + *min_offset = member_offset + m->total_size; + + return VB2_SUCCESS; +} + +uint32_t vb2_sig_size(enum vb2_signature_algorithm sig_alg, + enum vb2_hash_algorithm hash_alg) +{ + uint32_t digest_size = vb2_digest_size(hash_alg); + + /* Fail if we don't support the hash algorithm */ + if (!digest_size) + return 0; + + /* Handle unsigned hashes */ + if (sig_alg == VB2_SIG_NONE) + return digest_size; + + return vb2_rsa_sig_size(sig_alg); +} + +const struct vb2_id *vb2_hash_id(enum vb2_hash_algorithm hash_alg) +{ + switch(hash_alg) { +#ifdef VB2_SUPPORT_SHA1 + case VB2_HASH_SHA1: + { + static const struct vb2_id id = VB2_ID_NONE_SHA1; + return &id; + } +#endif +#ifdef VB2_SUPPORT_SHA256 + case VB2_HASH_SHA256: + { + static const struct vb2_id id = VB2_ID_NONE_SHA256; + return &id; + } +#endif +#ifdef VB2_SUPPORT_SHA512 + case VB2_HASH_SHA512: + { + static const struct vb2_id id = VB2_ID_NONE_SHA512; + return &id; + } +#endif + default: + return NULL; + } +} + +vb2_error_t vb21_verify_signature(const struct vb21_signature *sig, + uint32_t size) +{ + uint32_t min_offset = 0; + uint32_t expect_sig_size; + vb2_error_t rv; + + /* Check magic number */ + if (sig->c.magic != VB21_MAGIC_SIGNATURE) + return VB2_ERROR_SIG_MAGIC; + + /* Make sure common header is good */ + rv = vb21_verify_common_header(sig, size); + if (rv) + return rv; + + /* + * Check for compatible version. No need to check minor version, since + * that's compatible across readers matching the major version, and we + * haven't added any new fields. + */ + if (sig->c.struct_version_major != VB21_SIGNATURE_VERSION_MAJOR) + return VB2_ERROR_SIG_VERSION; + + /* Make sure header is big enough for signature */ + if (sig->c.fixed_size < sizeof(*sig)) + return VB2_ERROR_SIG_HEADER_SIZE; + + /* Make sure signature data is inside */ + rv = vb21_verify_common_member(sig, &min_offset, + sig->sig_offset, sig->sig_size); + if (rv) + return rv; + + /* Make sure signature size is correct for the algorithm */ + expect_sig_size = vb2_sig_size(sig->sig_alg, sig->hash_alg); + if (!expect_sig_size) + return VB2_ERROR_SIG_ALGORITHM; + if (sig->sig_size != expect_sig_size) + return VB2_ERROR_SIG_SIZE; + + return VB2_SUCCESS; +} + +/** + * Return the signature data for a signature + */ +static uint8_t *vb21_signature_data(struct vb21_signature *sig) +{ + return (uint8_t *)sig + sig->sig_offset; +} + +vb2_error_t vb21_verify_digest(const struct vb2_public_key *key, + struct vb21_signature *sig, + const uint8_t *digest, + const struct vb2_workbuf *wb) +{ + uint32_t key_sig_size = vb2_sig_size(key->sig_alg, key->hash_alg); + + /* If we can't figure out the signature size, key algorithm was bad */ + if (!key_sig_size) + return VB2_ERROR_VDATA_ALGORITHM; + + /* Make sure the signature and key algorithms match */ + if (key->sig_alg != sig->sig_alg || key->hash_alg != sig->hash_alg) + return VB2_ERROR_VDATA_ALGORITHM_MISMATCH; + + if (sig->sig_size != key_sig_size) + return VB2_ERROR_VDATA_SIG_SIZE; + + if (key->sig_alg == VB2_SIG_NONE) { + /* Bare hash */ + if (vb2_safe_memcmp(vb21_signature_data(sig), + digest, key_sig_size)) + return VB2_ERROR_VDATA_VERIFY_DIGEST; + + return VB2_SUCCESS; + } else { + /* RSA-signed digest */ + return vb2_rsa_verify_digest(key, + vb21_signature_data(sig), + digest, wb); + } +} + +vb2_error_t vb21_verify_data(const void *data, uint32_t size, + struct vb21_signature *sig, + const struct vb2_public_key *key, + const struct vb2_workbuf *wb) +{ + struct vb2_workbuf wblocal = *wb; + struct vb2_digest_context *dc; + uint8_t *digest; + uint32_t digest_size; + vb2_error_t rv; + + if (sig->data_size != size) { + VB2_DEBUG("Wrong amount of data signed.\n"); + return VB2_ERROR_VDATA_SIZE; + } + + /* Digest goes at start of work buffer */ + digest_size = vb2_digest_size(key->hash_alg); + if (!digest_size) + return VB2_ERROR_VDATA_DIGEST_SIZE; + + digest = vb2_workbuf_alloc(&wblocal, digest_size); + if (!digest) + return VB2_ERROR_VDATA_WORKBUF_DIGEST; + + /* Hashing requires temp space for the context */ + dc = vb2_workbuf_alloc(&wblocal, sizeof(*dc)); + if (!dc) + return VB2_ERROR_VDATA_WORKBUF_HASHING; + + rv = vb2_digest_init(dc, key->hash_alg); + if (rv) + return rv; + + rv = vb2_digest_extend(dc, data, size); + if (rv) + return rv; + + rv = vb2_digest_finalize(dc, digest, digest_size); + if (rv) + return rv; + + vb2_workbuf_free(&wblocal, sizeof(*dc)); + + return vb21_verify_digest(key, sig, digest, &wblocal); +} diff --git a/host/lib21/host_key.c b/host/lib21/host_key.c new file mode 100644 index 0000000..c880d45 --- /dev/null +++ b/host/lib21/host_key.c @@ -0,0 +1,605 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Host functions for keys. + */ + +#include + +#include + +#include "2common.h" +#include "2rsa.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "host_common.h" +#include "host_common21.h" +#include "host_key21.h" +#include "host_misc.h" +#include "openssl_compat.h" + +void vb2_private_key_free(struct vb2_private_key *key) +{ + if (!key) + return; + + if (key->rsa_private_key) + RSA_free(key->rsa_private_key); + + if (key->desc) + free(key->desc); + + free(key); +} + +vb2_error_t vb21_private_key_unpack(struct vb2_private_key **key_ptr, + const uint8_t *buf, uint32_t size) +{ + const struct vb21_packed_private_key *pkey = + (const struct vb21_packed_private_key *)buf; + struct vb2_private_key *key; + const unsigned char *start; + uint32_t min_offset = 0; + + *key_ptr = NULL; + + /* + * Check magic number. + * + * TODO: If it doesn't match, pass through to the old packed key format. + */ + if (pkey->c.magic != VB21_MAGIC_PACKED_PRIVATE_KEY) + return VB2_ERROR_UNPACK_PRIVATE_KEY_MAGIC; + + if (vb21_verify_common_header(buf, size)) + return VB2_ERROR_UNPACK_PRIVATE_KEY_HEADER; + + /* Make sure key data is inside */ + if (vb21_verify_common_member(pkey, &min_offset, + pkey->key_offset, pkey->key_size)) + return VB2_ERROR_UNPACK_PRIVATE_KEY_DATA; + + /* + * Check for compatible version. No need to check minor version, since + * that's compatible across readers matching the major version, and we + * haven't added any new fields. + */ + if (pkey->c.struct_version_major != + VB21_PACKED_PRIVATE_KEY_VERSION_MAJOR) + return VB2_ERROR_UNPACK_PRIVATE_KEY_STRUCT_VERSION; + + /* Allocate the new key */ + key = calloc(1, sizeof(*key)); + if (!key) + return VB2_ERROR_UNPACK_PRIVATE_KEY_ALLOC; + + /* Copy key algorithms and ID */ + key->sig_alg = pkey->sig_alg; + key->hash_alg = pkey->hash_alg; + key->id = pkey->id; + + /* Unpack RSA key */ + if (pkey->sig_alg == VB2_SIG_NONE) { + if (pkey->key_size != 0) { + free(key); + return VB2_ERROR_UNPACK_PRIVATE_KEY_HASH; + } + } else { + start = (const unsigned char *)(buf + pkey->key_offset); + key->rsa_private_key = d2i_RSAPrivateKey(0, &start, + pkey->key_size); + if (!key->rsa_private_key) { + free(key); + return VB2_ERROR_UNPACK_PRIVATE_KEY_RSA; + } + } + + /* Key description */ + if (pkey->c.desc_size) { + if (vb2_private_key_set_desc( + key, (const char *)(buf + pkey->c.fixed_size))) { + vb2_private_key_free(key); + return VB2_ERROR_UNPACK_PRIVATE_KEY_DESC; + } + } + + *key_ptr = key; + return VB2_SUCCESS; +} + +vb2_error_t vb21_private_key_read(struct vb2_private_key **key_ptr, + const char *filename) +{ + uint32_t size = 0; + uint8_t *buf = NULL; + vb2_error_t rv; + + *key_ptr = NULL; + + rv = vb2_read_file(filename, &buf, &size); + if (rv) + return rv; + + rv = vb21_private_key_unpack(key_ptr, buf, size); + + free(buf); + + return rv; +} + +vb2_error_t vb2_private_key_read_pem(struct vb2_private_key **key_ptr, + const char *filename) +{ + struct vb2_private_key *key; + FILE *f; + + *key_ptr = NULL; + + /* Allocate the new key */ + key = calloc(1, sizeof(*key)); + if (!key) + return VB2_ERROR_READ_PEM_ALLOC; + + /* Read private key */ + f = fopen(filename, "rb"); + if (!f) { + free(key); + return VB2_ERROR_READ_PEM_FILE_OPEN; + } + + key->rsa_private_key = PEM_read_RSAPrivateKey(f, NULL, NULL, NULL); + fclose(f); + + if (!key->rsa_private_key) { + free(key); + return VB2_ERROR_READ_PEM_RSA; + } + + *key_ptr = key; + return VB2_SUCCESS; +} + +vb2_error_t vb2_private_key_set_desc(struct vb2_private_key *key, + const char *desc) +{ + if (key->desc) + free(key->desc); + + if (desc) { + key->desc = strdup(desc); + if (!key->desc) + return VB2_ERROR_PRIVATE_KEY_SET_DESC; + } else { + key->desc = NULL; + } + + return VB2_SUCCESS; +} + +vb2_error_t vb21_private_key_write(const struct vb2_private_key *key, + const char *filename) +{ + struct vb21_packed_private_key pkey = { + .c.magic = VB21_MAGIC_PACKED_PRIVATE_KEY, + .c.struct_version_major = VB21_PACKED_PRIVATE_KEY_VERSION_MAJOR, + .c.struct_version_minor = VB21_PACKED_PRIVATE_KEY_VERSION_MINOR, + .c.fixed_size = sizeof(pkey), + .sig_alg = key->sig_alg, + .hash_alg = key->hash_alg, + .id = key->id, + }; + uint8_t *buf; + uint8_t *rsabuf = NULL; + int rsalen = 0; + vb2_error_t rv; + + memcpy(&pkey.id, &key->id, sizeof(pkey.id)); + + pkey.c.desc_size = vb2_desc_size(key->desc); + + if (key->sig_alg != VB2_SIG_NONE) { + /* Pack RSA key */ + rsalen = i2d_RSAPrivateKey(key->rsa_private_key, &rsabuf); + if (rsalen <= 0 || !rsabuf) + return VB2_ERROR_PRIVATE_KEY_WRITE_RSA; + } + + pkey.key_offset = pkey.c.fixed_size + pkey.c.desc_size; + pkey.key_size = roundup32(rsalen); + pkey.c.total_size = pkey.key_offset + pkey.key_size; + + /* Pack private key */ + buf = calloc(1, pkey.c.total_size); + if (!buf) { + free(rsabuf); + return VB2_ERROR_PRIVATE_KEY_WRITE_ALLOC; + } + + memcpy(buf, &pkey, sizeof(pkey)); + + /* strcpy() is ok here because we checked the length above */ + if (pkey.c.desc_size) + strcpy((char *)buf + pkey.c.fixed_size, key->desc); + + if (rsabuf) { + memcpy(buf + pkey.key_offset, rsabuf, rsalen); + free(rsabuf); + } + + rv = vb21_write_object(filename, buf); + free(buf); + + return rv ? VB2_ERROR_PRIVATE_KEY_WRITE_FILE : VB2_SUCCESS; +} + +vb2_error_t vb2_private_key_hash(const struct vb2_private_key **key_ptr, + enum vb2_hash_algorithm hash_alg) +{ + *key_ptr = NULL; + + switch (hash_alg) { +#if VB2_SUPPORT_SHA1 + case VB2_HASH_SHA1: + { + static const struct vb2_private_key key = { + .hash_alg = VB2_HASH_SHA1, + .sig_alg = VB2_SIG_NONE, + .desc = (char *)"Unsigned SHA1", + .id = VB2_ID_NONE_SHA1, + }; + *key_ptr = &key; + return VB2_SUCCESS; + } +#endif +#if VB2_SUPPORT_SHA256 + case VB2_HASH_SHA256: + { + static const struct vb2_private_key key = { + .hash_alg = VB2_HASH_SHA256, + .sig_alg = VB2_SIG_NONE, + .desc = (char *)"Unsigned SHA-256", + .id = VB2_ID_NONE_SHA256, + }; + *key_ptr = &key; + return VB2_SUCCESS; + } +#endif +#if VB2_SUPPORT_SHA512 + case VB2_HASH_SHA512: + { + static const struct vb2_private_key key = { + .hash_alg = VB2_HASH_SHA512, + .sig_alg = VB2_SIG_NONE, + .desc = (char *)"Unsigned SHA-512", + .id = VB2_ID_NONE_SHA512, + }; + *key_ptr = &key; + return VB2_SUCCESS; + } +#endif + default: + return VB2_ERROR_PRIVATE_KEY_HASH; + } +} + +vb2_error_t vb2_public_key_alloc(struct vb2_public_key **key_ptr, + enum vb2_signature_algorithm sig_alg) +{ + struct vb2_public_key *key; + uint32_t key_data_size = vb2_packed_key_size(sig_alg); + + /* The buffer contains the key, its ID, and its packed data */ + uint32_t buf_size = sizeof(*key) + sizeof(struct vb2_id) + + key_data_size; + + if (!key_data_size) + return VB2_ERROR_PUBLIC_KEY_ALLOC_SIZE; + + key = calloc(1, buf_size); + if (!key) + return VB2_ERROR_PUBLIC_KEY_ALLOC; + + key->id = (struct vb2_id *)(key + 1); + key->sig_alg = sig_alg; + + *key_ptr = key; + + return VB2_SUCCESS; +} + +void vb2_public_key_free(struct vb2_public_key *key) +{ + if (!key) + return; + + if (key->desc) + free((void *)key->desc); + + free(key); +} + +uint8_t *vb2_public_key_packed_data(struct vb2_public_key *key) +{ + return (uint8_t *)(key->id + 1); +} + +vb2_error_t vb2_public_key_read_keyb(struct vb2_public_key **key_ptr, + const char *filename) +{ + struct vb2_public_key *key = NULL; + uint8_t *key_data, *key_buf; + uint32_t key_size; + enum vb2_signature_algorithm sig_alg; + + *key_ptr = NULL; + + if (vb2_read_file(filename, &key_data, &key_size)) + return VB2_ERROR_READ_KEYB_DATA; + + /* Guess the signature algorithm from the key size + * Note: This only considers exponent F4 keys, as there is no way to + * distinguish between exp 3 and F4 based on size. Vboot API 2.1 is + * required to make proper use of exp 3 keys. */ + for (sig_alg = VB2_SIG_RSA1024; sig_alg <= VB2_SIG_RSA8192; sig_alg++) { + if (key_size == vb2_packed_key_size(sig_alg)) + break; + } + if (sig_alg > VB2_SIG_RSA8192) { + free(key_data); + return VB2_ERROR_READ_KEYB_SIZE; + } + + if (vb2_public_key_alloc(&key, sig_alg)) { + free(key_data); + return VB2_ERROR_READ_KEYB_ALLOC; + } + + /* Copy data from the file buffer to the public key buffer */ + key_buf = vb2_public_key_packed_data(key); + memcpy(key_buf, key_data, key_size); + free(key_data); + + if (vb2_unpack_key_data(key, key_buf, key_size)) { + vb2_public_key_free(key); + return VB2_ERROR_READ_KEYB_UNPACK; + } + + *key_ptr = key; + + return VB2_SUCCESS; +} + +vb2_error_t vb2_public_key_set_desc(struct vb2_public_key *key, + const char *desc) +{ + if (key->desc) + free((void *)key->desc); + + if (desc) { + key->desc = strdup(desc); + if (!key->desc) + return VB2_ERROR_PUBLIC_KEY_SET_DESC; + } else { + key->desc = NULL; + } + + return VB2_SUCCESS; +} + +vb2_error_t vb21_packed_key_read(struct vb21_packed_key **key_ptr, + const char *filename) +{ + struct vb2_public_key key; + uint8_t *buf; + uint32_t size; + + *key_ptr = NULL; + + if (vb2_read_file(filename, &buf, &size)) + return VB2_ERROR_READ_PACKED_KEY_DATA; + + /* Validity check: make sure key unpacks properly */ + if (vb21_unpack_key(&key, buf, size)) + return VB2_ERROR_READ_PACKED_KEY; + + *key_ptr = (struct vb21_packed_key *)buf; + + return VB2_SUCCESS; +} + +vb2_error_t vb21_public_key_pack(struct vb21_packed_key **key_ptr, + const struct vb2_public_key *pubk) +{ + struct vb21_packed_key key = { + .c.magic = VB21_MAGIC_PACKED_KEY, + .c.struct_version_major = VB21_PACKED_KEY_VERSION_MAJOR, + .c.struct_version_minor = VB21_PACKED_KEY_VERSION_MINOR, + }; + uint8_t *buf; + uint32_t *buf32; + + *key_ptr = NULL; + + /* Calculate sizes and offsets */ + key.c.fixed_size = sizeof(key); + key.c.desc_size = vb2_desc_size(pubk->desc); + key.key_offset = key.c.fixed_size + key.c.desc_size; + + if (pubk->sig_alg != VB2_SIG_NONE) { + key.key_size = vb2_packed_key_size(pubk->sig_alg); + if (!key.key_size) + return VB2_ERROR_PUBLIC_KEY_PACK_SIZE; + } + + key.c.total_size = key.key_offset + key.key_size; + + /* Copy/initialize fields */ + key.key_version = pubk->version; + key.sig_alg = pubk->sig_alg; + key.hash_alg = pubk->hash_alg; + key.id = *pubk->id; + + /* Allocate the new buffer */ + buf = calloc(1, key.c.total_size); + + /* Copy data into the buffer */ + memcpy(buf, &key, sizeof(key)); + + /* strcpy() is safe because we allocated above based on strlen() */ + if (pubk->desc && *pubk->desc) { + strcpy((char *)(buf + key.c.fixed_size), pubk->desc); + buf[key.c.fixed_size + key.c.desc_size - 1] = 0; + } + + if (pubk->sig_alg != VB2_SIG_NONE) { + /* Re-pack the key arrays */ + buf32 = (uint32_t *)(buf + key.key_offset); + buf32[0] = pubk->arrsize; + buf32[1] = pubk->n0inv; + memcpy(buf32 + 2, pubk->n, pubk->arrsize * sizeof(uint32_t)); + memcpy(buf32 + 2 + pubk->arrsize, pubk->rr, + pubk->arrsize * sizeof(uint32_t)); + } + + *key_ptr = (struct vb21_packed_key *)buf; + + return VB2_SUCCESS; +} + +vb2_error_t vb2_public_key_hash(struct vb2_public_key *key, + enum vb2_hash_algorithm hash_alg) +{ + switch (hash_alg) { +#if VB2_SUPPORT_SHA1 + case VB2_HASH_SHA1: + key->desc = "Unsigned SHA1"; + break; +#endif +#if VB2_SUPPORT_SHA256 + case VB2_HASH_SHA256: + key->desc = "Unsigned SHA-256"; + break; +#endif +#if VB2_SUPPORT_SHA512 + case VB2_HASH_SHA512: + key->desc = "Unsigned SHA-512"; + break; +#endif + default: + return VB2_ERROR_PUBLIC_KEY_HASH; + } + + key->sig_alg = VB2_SIG_NONE; + key->hash_alg = hash_alg; + key->id = vb2_hash_id(hash_alg); + return VB2_SUCCESS; +} + +enum vb2_signature_algorithm vb2_rsa_sig_alg(struct rsa_st *rsa) +{ + const BIGNUM *e, *n; + int exp, bits; + + RSA_get0_key(rsa, &n, &e, NULL); + exp = BN_get_word(e); + bits = BN_num_bits(n); + + switch (exp) { + case RSA_3: + switch (bits) { + case 2048: + return VB2_SIG_RSA2048_EXP3; + case 3072: + return VB2_SIG_RSA3072_EXP3; + } + break; + case RSA_F4: + switch (bits) { + case 1024: + return VB2_SIG_RSA1024; + case 2048: + return VB2_SIG_RSA2048; + case 4096: + return VB2_SIG_RSA4096; + case 8192: + return VB2_SIG_RSA8192; + } + } + + /* no clue */ + return VB2_SIG_INVALID; +} + +vb2_error_t vb21_public_key_write(const struct vb2_public_key *key, + const char *filename) +{ + struct vb21_packed_key *pkey; + int ret; + + ret = vb21_public_key_pack(&pkey, key); + if (ret) + return ret; + + ret = vb21_write_object(filename, pkey); + + free(pkey); + return ret; +} + +vb2_error_t vb21_unpack_key(struct vb2_public_key *key, const uint8_t *buf, + uint32_t size) +{ + const struct vb21_packed_key *pkey = + (const struct vb21_packed_key *)buf; + uint32_t sig_size; + uint32_t min_offset = 0; + vb2_error_t rv; + + /* Check magic number */ + if (pkey->c.magic != VB21_MAGIC_PACKED_KEY) + return VB2_ERROR_UNPACK_KEY_MAGIC; + + rv = vb21_verify_common_header(buf, size); + if (rv) + return rv; + + /* Make sure key data is inside */ + rv = vb21_verify_common_member(pkey, &min_offset, + pkey->key_offset, pkey->key_size); + if (rv) + return rv; + + /* + * Check for compatible version. No need to check minor version, since + * that's compatible across readers matching the major version, and we + * haven't added any new fields. + */ + if (pkey->c.struct_version_major != VB21_PACKED_KEY_VERSION_MAJOR) + return VB2_ERROR_UNPACK_KEY_STRUCT_VERSION; + + /* Copy key algorithms */ + key->hash_alg = pkey->hash_alg; + if (!vb2_digest_size(key->hash_alg)) + return VB2_ERROR_UNPACK_KEY_HASH_ALGORITHM; + + key->sig_alg = pkey->sig_alg; + if (key->sig_alg != VB2_SIG_NONE) { + sig_size = vb2_rsa_sig_size(key->sig_alg); + if (!sig_size) + return VB2_ERROR_UNPACK_KEY_SIG_ALGORITHM; + rv = vb2_unpack_key_data( + key, + (const uint8_t *)pkey + pkey->key_offset, + pkey->key_size); + if (rv) + return rv; + } + + /* Key description */ + key->desc = vb21_common_desc(pkey); + key->version = pkey->key_version; + key->id = &pkey->id; + + return VB2_SUCCESS; +} diff --git a/host/lib21/host_misc.c b/host/lib21/host_misc.c new file mode 100644 index 0000000..6c0e0ef --- /dev/null +++ b/host/lib21/host_misc.c @@ -0,0 +1,161 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Host functions for verified boot. + */ + +#include +#include +#include +#include + +#include "2common.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "host_common.h" +#include "host_common21.h" +#include "host_misc21.h" + +vb2_error_t vb2_read_file(const char *filename, uint8_t **data_ptr, + uint32_t *size_ptr) +{ + FILE *f; + uint8_t *buf; + long size; + + *data_ptr = NULL; + *size_ptr = 0; + + f = fopen(filename, "rb"); + if (!f) { + VB2_DEBUG("Unable to open file %s\n", filename); + return VB2_ERROR_READ_FILE_OPEN; + } + + fseek(f, 0, SEEK_END); + size = ftell(f); + rewind(f); + + if (size < 0 || size > UINT32_MAX) { + fclose(f); + return VB2_ERROR_READ_FILE_SIZE; + } + + buf = malloc(size + 1); + if (!buf) { + fclose(f); + return VB2_ERROR_READ_FILE_ALLOC; + } + buf[size] = '\0'; + + if(1 != fread(buf, size, 1, f)) { + VB2_DEBUG("Unable to read file %s\n", filename); + fclose(f); + free(buf); + return VB2_ERROR_READ_FILE_DATA; + } + + fclose(f); + + *data_ptr = buf; + *size_ptr = size; + return VB2_SUCCESS; +} + +vb2_error_t vb2_write_file(const char *filename, const void *buf, uint32_t size) +{ + FILE *f = fopen(filename, "wb"); + + if (!f) { + VB2_DEBUG("Unable to open file %s\n", filename); + return VB2_ERROR_WRITE_FILE_OPEN; + } + + if (1 != fwrite(buf, size, 1, f)) { + VB2_DEBUG("Unable to write to file %s\n", filename); + fclose(f); + unlink(filename); /* Delete any partial file */ + return VB2_ERROR_WRITE_FILE_DATA; + } + + fclose(f); + return VB2_SUCCESS; +} + +vb2_error_t vb21_write_object(const char *filename, const void *buf) +{ + const struct vb21_struct_common *cptr = buf; + + return vb2_write_file(filename, buf, cptr->total_size); +} + +uint32_t vb2_desc_size(const char *desc) +{ + if (!desc || !*desc) + return 0; + + return roundup32(strlen(desc) + 1); +} + +static const char *onedigit(const char *str, uint8_t *vptr) +{ + uint8_t val = 0; + char c; + + for (; (c = *str++) && !isxdigit(c);) + ; + if (!c) + return 0; + + if (c >= '0' && c <= '9') + val = c - '0'; + else if (c >= 'A' && c <= 'F') + val = 10 + c - 'A'; + else if (c >= 'a' && c <= 'f') + val = 10 + c - 'a'; + + *vptr = val; + return str; +} + +static const char *onebyte(const char *str, uint8_t *vptr) +{ + uint8_t val; + uint8_t digit; + + str = onedigit(str, &digit); + if (!str) + return 0; + val = digit << 4; + + str = onedigit(str, &digit); + if (!str) + return 0; + val |= digit; + + *vptr = val; + return str; +} + +vb2_error_t vb2_str_to_id(const char *str, struct vb2_id *id) +{ + uint8_t val = 0; + int i; + + if (!str) + return VB2_ERROR_STR_TO_ID; + + memset(id, 0, sizeof(*id)); + + for (i = 0; i < VB2_ID_NUM_BYTES; i++) { + + str = onebyte(str, &val); + if (!str) + break; + id->raw[i] = val; + } + + /* If we get at least one valid byte, that's good enough. */ + return i ? VB2_SUCCESS : VB2_ERROR_STR_TO_ID; +} diff --git a/host/lib21/host_signature.c b/host/lib21/host_signature.c new file mode 100644 index 0000000..77ee448 --- /dev/null +++ b/host/lib21/host_signature.c @@ -0,0 +1,257 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Host functions for signatures. + */ + +#include + +#include "2common.h" +#include "2rsa.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "host_common.h" +#include "host_common21.h" +#include "host_key21.h" +#include "host_misc.h" +#include "host_signature21.h" + +vb2_error_t vb2_digest_info(enum vb2_hash_algorithm hash_alg, + const uint8_t **buf_ptr, uint32_t *size_ptr) +{ + *buf_ptr = NULL; + *size_ptr = 0; + + switch (hash_alg) { +#if VB2_SUPPORT_SHA1 + case VB2_HASH_SHA1: + { + static const uint8_t info[] = { + 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, + 0x03, 0x02, 0x1a, 0x05, 0x00, 0x04, 0x14 + }; + *buf_ptr = info; + *size_ptr = sizeof(info); + return VB2_SUCCESS; + } +#endif +#if VB2_SUPPORT_SHA256 + case VB2_HASH_SHA256: + { + static const uint8_t info[] = { + 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, + 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, + 0x00, 0x04, 0x20 + }; + *buf_ptr = info; + *size_ptr = sizeof(info); + return VB2_SUCCESS; + } +#endif +#if VB2_SUPPORT_SHA512 + case VB2_HASH_SHA512: + { + static const uint8_t info[] = { + 0x30, 0x51, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, + 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03, 0x05, + 0x00, 0x04, 0x40 + }; + *buf_ptr = info; + *size_ptr = sizeof(info); + return VB2_SUCCESS; + } +#endif + default: + return VB2_ERROR_DIGEST_INFO; + } +} + +vb2_error_t vb21_sign_data(struct vb21_signature **sig_ptr, const uint8_t *data, + uint32_t size, const struct vb2_private_key *key, + const char *desc) +{ + struct vb21_signature s = { + .c.magic = VB21_MAGIC_SIGNATURE, + .c.struct_version_major = VB21_SIGNATURE_VERSION_MAJOR, + .c.struct_version_minor = VB21_SIGNATURE_VERSION_MINOR, + .c.fixed_size = sizeof(s), + .sig_alg = key->sig_alg, + .hash_alg = key->hash_alg, + .data_size = size, + .id = key->id, + }; + + struct vb2_digest_context dc; + uint32_t digest_size; + const uint8_t *info = NULL; + uint32_t info_size = 0; + uint32_t sig_digest_size; + uint8_t *sig_digest; + uint8_t *buf; + + *sig_ptr = NULL; + + /* Use key description if no description supplied */ + if (!desc) + desc = key->desc; + + s.c.desc_size = vb2_desc_size(desc); + + s.sig_offset = s.c.fixed_size + s.c.desc_size; + s.sig_size = vb2_sig_size(key->sig_alg, key->hash_alg); + if (!s.sig_size) + return VB2_SIGN_DATA_SIG_SIZE; + + s.c.total_size = s.sig_offset + s.sig_size; + + /* Determine digest size and allocate buffer */ + if (s.sig_alg != VB2_SIG_NONE) { + if (vb2_digest_info(s.hash_alg, &info, &info_size)) + return VB2_SIGN_DATA_DIGEST_INFO; + } + + digest_size = vb2_digest_size(key->hash_alg); + if (!digest_size) + return VB2_SIGN_DATA_DIGEST_SIZE; + + sig_digest_size = info_size + digest_size; + sig_digest = malloc(sig_digest_size); + if (!sig_digest) + return VB2_SIGN_DATA_DIGEST_ALLOC; + + /* Prepend digest info, if any */ + if (info_size) + memcpy(sig_digest, info, info_size); + + /* Calculate hash digest */ + if (vb2_digest_init(&dc, s.hash_alg)) { + free(sig_digest); + return VB2_SIGN_DATA_DIGEST_INIT; + } + + if (vb2_digest_extend(&dc, data, size)) { + free(sig_digest); + return VB2_SIGN_DATA_DIGEST_EXTEND; + } + + if (vb2_digest_finalize(&dc, sig_digest + info_size, digest_size)) { + free(sig_digest); + return VB2_SIGN_DATA_DIGEST_FINALIZE; + } + + /* Allocate signature buffer and copy header */ + buf = calloc(1, s.c.total_size); + memcpy(buf, &s, sizeof(s)); + + /* strcpy() is ok because we allocated buffer based on desc length */ + if (desc) + strcpy((char *)buf + s.c.fixed_size, desc); + + if (s.sig_alg == VB2_SIG_NONE) { + /* Bare hash signature is just the digest */ + memcpy(buf + s.sig_offset, sig_digest, sig_digest_size); + } else { + /* RSA-encrypt the signature */ + if (RSA_private_encrypt(sig_digest_size, + sig_digest, + buf + s.sig_offset, + key->rsa_private_key, + RSA_PKCS1_PADDING) == -1) { + free(sig_digest); + free(buf); + return VB2_SIGN_DATA_RSA_ENCRYPT; + } + } + + free(sig_digest); + *sig_ptr = (struct vb21_signature *)buf; + return VB2_SUCCESS; +} + +vb2_error_t vb21_sig_size_for_key(uint32_t *size_ptr, + const struct vb2_private_key *key, + const char *desc) +{ + uint32_t size = vb2_sig_size(key->sig_alg, key->hash_alg); + + if (!size) + return VB2_ERROR_SIG_SIZE_FOR_KEY; + + size += sizeof(struct vb21_signature); + size += vb2_desc_size(desc ? desc : key->desc); + + *size_ptr = size; + return VB2_SUCCESS; +} + +vb2_error_t vb21_sig_size_for_keys(uint32_t *size_ptr, + const struct vb2_private_key **key_list, + uint32_t key_count) +{ + uint32_t total = 0, size = 0; + vb2_error_t rv, i; + + *size_ptr = 0; + + for (i = 0; i < key_count; i++) { + rv = vb21_sig_size_for_key(&size, key_list[i], NULL); + if (rv) + return rv; + total += size; + } + + *size_ptr = total; + return VB2_SUCCESS; +} + +vb2_error_t vb21_sign_object(uint8_t *buf, uint32_t sig_offset, + const struct vb2_private_key *key, + const char *desc) +{ + struct vb21_struct_common *c = (struct vb21_struct_common *)buf; + struct vb21_signature *sig = NULL; + vb2_error_t rv; + + rv = vb21_sign_data(&sig, buf, sig_offset, key, desc); + if (rv) + return rv; + + if (sig_offset + sig->c.total_size > c->total_size) { + free(sig); + return VB2_SIGN_OBJECT_OVERFLOW; + } + + memcpy(buf + sig_offset, sig, sig->c.total_size); + free(sig); + + return VB2_SUCCESS; +} + +vb2_error_t vb21_sign_object_multiple(uint8_t *buf, uint32_t sig_offset, + const struct vb2_private_key **key_list, + uint32_t key_count) +{ + struct vb21_struct_common *c = (struct vb21_struct_common *)buf; + uint32_t sig_next = sig_offset; + vb2_error_t rv, i; + + for (i = 0; i < key_count; i++) { + struct vb21_signature *sig = NULL; + + rv = vb21_sign_data(&sig, buf, sig_offset, key_list[i], NULL); + if (rv) + return rv; + + if (sig_next + sig->c.total_size > c->total_size) { + free(sig); + return VB2_SIGN_OBJECT_OVERFLOW; + } + + memcpy(buf + sig_next, sig, sig->c.total_size); + sig_next += sig->c.total_size; + free(sig); + } + + return VB2_SUCCESS; +} diff --git a/host/lib21/include/host_common21.h b/host/lib21/include/host_common21.h new file mode 100644 index 0000000..55b623d --- /dev/null +++ b/host/lib21/include/host_common21.h @@ -0,0 +1,124 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Common functions between firmware and kernel verified boot. + */ + +#ifndef VBOOT_REFERENCE_VB21_COMMON_H_ +#define VBOOT_REFERENCE_VB21_COMMON_H_ + +#include "2common.h" +#include "2return_codes.h" +#include "2struct.h" +#include "host_struct21.h" + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/** + * Return the description of an object starting with a vb21_struct_common + * header. + * + * Does not validity-check the buffer; merely returns the pointer. + * + * @param buf Pointer to common object + * @return A pointer to description or an empty string if none. + */ +const char *vb21_common_desc(const void *buf); + +/** + * Verify the common struct header is fully contained in its parent data + * + * Also verifies the description is either zero-length or null-terminated. + * + * @param parent Parent data + * @param parent_size Parent size in bytes + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb21_verify_common_header(const void *parent, uint32_t parent_size); + +/** + * Verify a member is within the data for a parent object + * + * @param parent Parent data (starts with struct vb21_struct_common) + * @param min_offset Pointer to minimum offset where member can be located. + * If this offset is 0 on input, uses the size of the + * fixed header (and description, if any). This will be + * updated on return to the end of the passed member. On + * error, the value of min_offset is undefined. + * @param member_offset Offset of member data from start of parent, in bytes + * @param member_size Size of member data, in bytes + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb21_verify_common_member(const void *parent, uint32_t *min_offset, + uint32_t member_offset, + uint32_t member_size); + +/** + * Verify a member which starts with a common header is within the parent + * + * This does not verify the contents of the member or its header, only that the + * member's claimed total size fits within the parent's claimed total size at + * the specified offset. + * + * @param parent Parent data (starts with struct vb21_struct_common) + * @param min_offset Pointer to minimum offset where member can be located. + * If this offset is 0 on input, uses the size of the + * fixed header (and description, if any). This will be + * updated on return to the end of the passed member. On + * error, the value of min_offset is undefined. + * @param member_offset Offset of member data from start of parent, in bytes. + * This should be the start of the common header of the + * member. + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb21_verify_common_subobject(const void *parent, + uint32_t *min_offset, + uint32_t member_offset); + +/** + * Verify the integrity of a signature struct + * @param sig Signature struct + * @param size Size of buffer containing signature struct + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb21_verify_signature(const struct vb21_signature *sig, + uint32_t size); + +/** + * Verify a signature against an expected hash digest. + * + * @param key Key to use in signature verification + * @param sig Signature to verify (may be destroyed in process) + * @param digest Digest of signed data + * @param wb Work buffer + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb21_verify_digest(const struct vb2_public_key *key, + struct vb21_signature *sig, + const uint8_t *digest, + const struct vb2_workbuf *wb); + +/** + * Verify data matches signature. + * + * @param data Data to verify + * @param size Size of data buffer. Note that amount of data to + * actually validate is contained in sig->data_size. + * @param sig Signature of data (destroyed in process) + * @param key Key to use to validate signature + * @param wb Work buffer + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb21_verify_data(const void *data, uint32_t size, + struct vb21_signature *sig, + const struct vb2_public_key *key, + const struct vb2_workbuf *wb); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* VBOOT_REFERENCE_VB21_COMMON_H_ */ diff --git a/host/lib21/include/host_key21.h b/host/lib21/include/host_key21.h new file mode 100644 index 0000000..ae53ad5 --- /dev/null +++ b/host/lib21/include/host_key21.h @@ -0,0 +1,233 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Host-side functions for verified boot key structures + */ + +#ifndef VBOOT_REFERENCE_HOST_KEY2_H_ +#define VBOOT_REFERENCE_HOST_KEY2_H_ + +#include "2id.h" +#include "2return_codes.h" +#include "2struct.h" + +struct vb2_public_key; +struct vb21_packed_key; + +/* Private key data, in-memory format for use in signing calls. */ +struct vb2_private_key { + struct rsa_st *rsa_private_key; /* Private key data */ + enum vb2_hash_algorithm hash_alg; /* Hash algorithm */ + enum vb2_signature_algorithm sig_alg; /* Signature algorithm */ + char *desc; /* Description */ + struct vb2_id id; /* Key ID */ +}; + +struct vb2_packed_private_key { + /* Signature algorithm used by the key (enum vb2_crypto_algorithm) */ + uint32_t algorithm; + uint32_t reserved2; + /* Key data formatted for d2i_RSAPrivateKey() */ + uint8_t key_data[0]; +}; + +/** + * Free a private key. + * + * @param key Key containing internal data to free. + */ +void vb2_private_key_free(struct vb2_private_key *key); + +/** + * Unpack a private key from vb21_packed_private_key format. + * + * @param key_ptr Destination for newly allocated key; this must be + * freed with vb2_private_key_free(). + * @param buf Source buffer containing packed key + * @param size Size of buffer in bytes + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb21_private_key_unpack(struct vb2_private_key **key_ptr, + const uint8_t *buf, uint32_t size); + +/** + * Read a private key from vb21_packed_private_key format. + * + * @param key_ptr Destination for newly allocated key; this must be + * freed with vb2_private_key_free(). + * @param filename File to read key data from. + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb21_private_key_read(struct vb2_private_key **key_ptr, + const char *filename); + +/** + * Read a private key from a .pem file. + * + * This only reads the internal data for the key. It does not set any of the + * other fields in *key_ptr, since those are not contained in the .pem file. + * + * @param key_ptr Destination for newly allocated key; this must be + * freed with vb2_private_key_free(). + * @param filename File to read key data from. + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb2_private_key_read_pem(struct vb2_private_key **key_ptr, + const char *filename); + +/** + * Set the description of a private key. + * + * @param key Key to set description for + * @param desc Description string, or NULL if no description. + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb2_private_key_set_desc(struct vb2_private_key *key, + const char *desc); + +/** + * Write a private key to vb21_packed_private_key format. + * + * @param key Key to write + * @param filename File to write key data to. + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb21_private_key_write(const struct vb2_private_key *key, + const char *filename); + +/** + * Get a private key for an unsigned hash + * + * @param key_ptr Destination for pointer to key. The key is statically + * allocated and must not be freed. + * @param hash_alg Hash algorithm to use + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb2_private_key_hash(const struct vb2_private_key **key_ptr, + enum vb2_hash_algorithm hash_alg); + +/** + * Allocate a public key buffer of sufficient size for the signature algorithm. + * + * This only initializes the sig_alg field and the id field to an empty + * id. It does not set any of the other fields in *key_ptr. + * + * @param key_ptr Destination for newly allocated key; this must be + * freed with vb2_public_key_free(). + * @param sig_alg Signature algorithm for key. + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb2_public_key_alloc(struct vb2_public_key **key_ptr, + enum vb2_signature_algorithm sig_alg); + +/** + * Return the packed data for a key allocated with vb2_public_key_alloc(). + * + * The packed data is in the same buffer, following the key struct and ID. + */ +uint8_t *vb2_public_key_packed_data(struct vb2_public_key *key); + +/** + * Free a public key allocated by one of the functions below. + * + * Note that this should ONLY be called for public keys allocated via one + * of those functions; public keys created or filled in other ways (such as + * vb21_unpack_key()) do not allocate memory for sub-fields in the same way. + * + * @param key Key to free + */ +void vb2_public_key_free(struct vb2_public_key *key); + +/** + * Read a public key from a .keyb file. + * + * Guesses the signature algorithm based on the size of the .keyb file. Does + * not set the hash_alg, id, or desc fields, since those are not contained in + * the .keyb file. + * + * @param key_ptr Destination for newly allocated key; this must be + * freed with vb2_public_key_free(). + * @param filename File to read key from. + * @return VB2_SUCCESS, or non-zero error code if error. + */ + +vb2_error_t vb2_public_key_read_keyb(struct vb2_public_key **key_ptr, + const char *filename); + +/** + * Set the description of a public key. + * + * @param key Key to set description for + * @param desc Description string, or NULL if no description. + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb2_public_key_set_desc(struct vb2_public_key *key, + const char *desc); + +/** + * Read a public key in vb21_packed_key format. + * + * @param key_ptr On success, points to the newly allocated key buffer. + * Caller is responsible for calling free() on this. + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb21_packed_key_read(struct vb21_packed_key **key_ptr, + const char *filename); + +/** + * Pack a public key into vb21_packed_key format. + * + * @param pubk Public key to pack + * @param key_ptr On success, points to a newly allocated packed key + * buffer. Caller is responsible for calling free() on + * this. + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb21_public_key_pack(struct vb21_packed_key **key_ptr, + const struct vb2_public_key *pubk); + +/** + * Get a public key for an unsigned hash. + * + * @param key Destination for key data. + * @param hash_alg Hash algorithm to use + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb2_public_key_hash(struct vb2_public_key *key, + enum vb2_hash_algorithm hash_alg); + + +/** + * Return the signature algorithm implied by the bit length of an RSA key + * + * @param rsa RSA key + * @return vb2 signature algorithm + */ +enum vb2_signature_algorithm vb2_rsa_sig_alg(struct rsa_st *rsa); + +/** + * Write a public key to the vb21_packed_key format. + * + * @param key Key to write + * @param filename File to write key data to. + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb21_public_key_write(const struct vb2_public_key *key, + const char *filename); + +/** + * Unpack a key for use in verification + * + * The elements of the unpacked key will point into the source buffer, so don't + * free the source buffer until you're done with the key. + * + * @param key Destintion for unpacked key + * @param buf Source buffer containing packed key + * @param size Size of buffer in bytes + * @return VB2_SUCCESS, or non-zero error code if error. + */ +vb2_error_t vb21_unpack_key(struct vb2_public_key *key, const uint8_t *buf, + uint32_t size); + +#endif /* VBOOT_REFERENCE_HOST_KEY2_H_ */ diff --git a/host/lib21/include/host_misc21.h b/host/lib21/include/host_misc21.h new file mode 100644 index 0000000..795ebb2 --- /dev/null +++ b/host/lib21/include/host_misc21.h @@ -0,0 +1,26 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_HOST_MISC2_H_ +#define VBOOT_REFERENCE_HOST_MISC2_H_ + +#include +#include + +#include "2id.h" + +/* Length of string representation, including trailing '\0' */ +#define VB2_ID_MIN_STRLEN (2 * VB2_ID_NUM_BYTES + 1) + +/** + * Convert hex string to struct vb2_id. + * + * @param str Example: "01ABef000042" + * @param id Destination for binary representation + * @return VB2_SUCCESS, or non-zero if error. + */ +vb2_error_t vb2_str_to_id(const char *str, struct vb2_id *id); + +#endif /* VBOOT_REFERENCE_HOST_MISC2_H_ */ diff --git a/host/lib21/include/host_signature21.h b/host/lib21/include/host_signature21.h new file mode 100644 index 0000000..0b1784a --- /dev/null +++ b/host/lib21/include/host_signature21.h @@ -0,0 +1,96 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Host-side functions for verified boot key structures + */ + +#ifndef VBOOT_REFERENCE_HOST_SIGNATURE2_H_ +#define VBOOT_REFERENCE_HOST_SIGNATURE2_H_ + +#include "2struct.h" + +struct vb2_private_key; +struct vb21_signature; + +/** + * Get the digest info for a hash algorithm + * + * @param hash_alg Hash algorithm + * @param buf_ptr On success, points to the digest info + * @param size_ptr On success, contains the info size in bytes + * @return VB2_SUCCESS, or non-zero error code on failure. + */ +vb2_error_t vb2_digest_info(enum vb2_hash_algorithm hash_alg, + const uint8_t **buf_ptr, uint32_t *size_ptr); + +/** + * Sign data buffer + * + * @param sig_ptr On success, points to a newly allocated signature. + * Caller is responsible for calling free() on this. + * @param data Pointer to data to sign + * @param size Size of data to sign in bytes + * @param key Private key to use to sign data + * @param desc Optional description for signature. If NULL, the + * key description will be used. + * @return VB2_SUCCESS, or non-zero error code on failure. + */ +vb2_error_t vb21_sign_data(struct vb21_signature **sig_ptr, const uint8_t *data, + uint32_t size, const struct vb2_private_key *key, + const char *desc); + +/** + * Calculate the signature size for a private key. + * + * @param size_ptr On success, contains the signature size in bytes. + * @param key Key to calculate signature length from. + * @param desc Optional description for signature. If NULL, the + * key description will be used. + * @return VB2_SUCCESS, or non-zero error code on failure. + */ +vb2_error_t vb21_sig_size_for_key(uint32_t *size_ptr, + const struct vb2_private_key *key, + const char *desc); + +/** + * Calculate the total signature size for a list of keys. + * + * @param size_ptr On success, contains the signature size in bytes. + * @param key_list List of keys to calculate signature length from. + * @param key_count Number of keys. + * @return VB2_SUCCESS, or non-zero error code on failure. + */ +vb2_error_t vb21_sig_size_for_keys(uint32_t *size_ptr, + const struct vb2_private_key **key_list, + uint32_t key_count); + +/** + * Sign object with a key. + * + * @param buf Buffer containing object to sign, starting with + * common header + * @param sig_offset Offset in buffer at which to store signature. All + * data before this in the buffer will be signed. + * @param key Key to sign object with + * @param desc If non-null, description to use for signature + */ +vb2_error_t vb21_sign_object(uint8_t *buf, uint32_t sig_offset, + const struct vb2_private_key *key, + const char *desc); + +/** + * Sign object with list of keys. + * + * @param buf Buffer containing object to sign, starting with + * common header + * @param sig_offset Offset to start signatures. All data before this + * in the buffer will be signed. + * @param key_list List of keys to sign object with + * @param key_count Number of keys in list + */ +vb2_error_t vb21_sign_object_multiple(uint8_t *buf, uint32_t sig_offset, + const struct vb2_private_key **key_list, + uint32_t key_count); + +#endif /* VBOOT_REFERENCE_HOST_SIGNATURE2_H_ */ diff --git a/host/lib21/include/host_struct21.h b/host/lib21/include/host_struct21.h new file mode 100644 index 0000000..6f91e36 --- /dev/null +++ b/host/lib21/include/host_struct21.h @@ -0,0 +1,233 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Vboot 2.1 data structures + * + * Offsets should be padded to 32-bit boundaries, since some architectures + * have trouble with accessing unaligned integers. + */ + +#ifndef VBOOT_REFERENCE_VB21_STRUCT_H_ +#define VBOOT_REFERENCE_VB21_STRUCT_H_ + +#include "2id.h" +#include "2sysincludes.h" + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* + * Magic numbers used by vb21_struct_common.magic. + * + * All valid numbers should be listed here to avoid accidental overlap. + * Numbers start at a large value, so that previous parsers (which stored + * things like lengths and offsets at that field) will detect and reject new + * structs as invalid. + */ +enum vb21_struct_common_magic { + /* "Vb2I" = vb21_packed_private_key.c.magic */ + VB21_MAGIC_PACKED_PRIVATE_KEY = 0x49326256, + + /* "Vb2P" = vb21_packed_key.c.magic */ + VB21_MAGIC_PACKED_KEY = 0x50326256, + + /* "Vb2S" = vb21_signature.c.magic */ + VB21_MAGIC_SIGNATURE = 0x53326256, +}; + + +/* + * Generic struct header for all vboot2.1 structs. This makes it easy to + * automatically parse and identify vboot structs (e.g., in futility). This + * must be the first member of the parent vboot2.1 struct. + */ +struct vb21_struct_common { + /* Magic number; see vb21_struct_common_magic for expected values */ + uint32_t magic; + + /* + * Parent struct version; see each struct for the expected value. + * + * How to handle struct version mismatches, if the parser is version + * A.b and the data is version C.d: + * 1) If A.b == C.d, we're good. + * 2) If A != C, the data cannot be parsed at all. + * 3) If b < d, C.d is a newer version of data which is backwards- + * compatible to old parsers. We're good. + * 4) If b > d, C.d is an older version of data. The parser should + * use default values for fields added after version d. We're + * good. + * + * Struct versions start at 3.0, since the highest version of the old + * structures was 2.1. This way, there is no possibility of collision + * for old code which depends on the version number. + */ + uint16_t struct_version_major; + uint16_t struct_version_minor; + + /* + * Size of the parent structure and all its data, including the + * description and any necessary padding. That is, all data must lie + * in a contiguous region of bytes starting at the first + * byte of this header. + */ + uint32_t total_size; + + /* + * Size of the fixed portion of the parent structure. If a description + * is present, it must start at this offset. + */ + uint32_t fixed_size; + + /* + * The object may contain an ASCII description following the fixed + * portion of the structure. If it is present, it must be + * null-terminated, and padded with 0 (null) bytes to a multiple of 32 + * bits. + * + * Size of ASCII description in bytes, counting null terminator and + * padding (if any). Set 0 if no description is present. If non-zero, + * there must be a null terminator (0) at offset (fixed_size + + * desc_size - 1). + */ + uint32_t desc_size; +} __attribute__((packed)); + +#define EXPECTED_VB21_STRUCT_COMMON_SIZE 20 + +/* Current version of vb21_packed_key struct */ +#define VB21_PACKED_KEY_VERSION_MAJOR 3 +#define VB21_PACKED_KEY_VERSION_MINOR 0 + +/* + * Packed public key data + * + * The key data must be arranged like this: + * 1) vb21_packed_key header struct h + * 2) Key description (pointed to by h.c.fixed_size) + * 3) Key data key (pointed to by h.key_offset) + */ +struct vb21_packed_key { + /* Common header fields */ + struct vb21_struct_common c; + + /* Offset of key data from start of this struct */ + uint32_t key_offset; + + /* Size of key data in bytes (NOT strength of key in bits) */ + uint32_t key_size; + + /* Signature algorithm used by the key (enum vb2_signature_algorithm) */ + uint16_t sig_alg; + + /* + * Hash digest algorithm used with the key (enum vb2_hash_algorithm). + * This is explicitly specified as part of the key to prevent use of a + * strong key with a weak hash. + */ + uint16_t hash_alg; + + /* Key version */ + uint32_t key_version; + + /* Key ID */ + struct vb2_id id; +} __attribute__((packed)); + +#define EXPECTED_VB21_PACKED_KEY_SIZE \ + (EXPECTED_VB21_STRUCT_COMMON_SIZE + 16 + EXPECTED_ID_SIZE) + +/* Current version of vb21_packed_private_key struct */ +#define VB21_PACKED_PRIVATE_KEY_VERSION_MAJOR 3 +#define VB21_PACKED_PRIVATE_KEY_VERSION_MINOR 0 + +/* + * Packed private key data + * + * The key data must be arranged like this: + * 1) vb21_packed_private_key header struct h + * 2) Key description (pointed to by h.c.fixed_size) + * 3) Key data key (pointed to by h.key_offset) + */ +struct vb21_packed_private_key { + /* Common header fields */ + struct vb21_struct_common c; + + /* Offset of key data from start of this struct */ + uint32_t key_offset; + + /* Size of key data in bytes (NOT strength of key in bits) */ + uint32_t key_size; + + /* Signature algorithm used by the key (enum vb2_signature_algorithm) */ + uint16_t sig_alg; + + /* + * Hash digest algorithm used with the key (enum vb2_hash_algorithm). + * This is explicitly specified as part of the key to prevent use of a + * strong key with a weak hash. + */ + uint16_t hash_alg; + + /* Key ID */ + struct vb2_id id; +} __attribute__((packed)); + +#define EXPECTED_VB21_PACKED_PRIVATE_KEY_SIZE \ + (EXPECTED_VB21_STRUCT_COMMON_SIZE + 12 + EXPECTED_ID_SIZE) + +/* Current version of vb21_signature struct */ +#define VB21_SIGNATURE_VERSION_MAJOR 3 +#define VB21_SIGNATURE_VERSION_MINOR 0 + +/* + * Signature data + * + * The signature data must be arranged like this: + * 1) vb21_signature header struct h + * 2) Signature description (pointed to by h.c.fixed_size) + * 3) Signature data (pointed to by h.sig_offset) + */ +struct vb21_signature { + /* Common header fields */ + struct vb21_struct_common c; + + /* Offset of signature data from start of this struct */ + uint32_t sig_offset; + + /* Size of signature data in bytes */ + uint32_t sig_size; + + /* Size of the data block which was signed in bytes */ + uint32_t data_size; + + /* Signature algorithm used (enum vb2_signature_algorithm) */ + uint16_t sig_alg; + + /* Hash digest algorithm used (enum vb2_hash_algorithm) */ + uint16_t hash_alg; + + /* + * ID for the signature. + * + * If this is a keyblock signature entry, this is the ID of the key + * used to generate this signature. This allows the firmware to + * quickly determine which signature block (if any) goes with the key + * being used by the firmware. + * + * If this is a preamble hash entry, this is the ID of the data type + * being hashed. There is no key ID, because sig_alg=VB2_ALG_NONE. + */ + struct vb2_id id; +} __attribute__((packed)); + +#define EXPECTED_VB21_SIGNATURE_SIZE \ + (EXPECTED_VB21_STRUCT_COMMON_SIZE + 16 + EXPECTED_ID_SIZE) + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* VBOOT_REFERENCE_VB21_STRUCT_H_ */ diff --git a/rust/OWNERS b/rust/OWNERS new file mode 100644 index 0000000..fe3921f --- /dev/null +++ b/rust/OWNERS @@ -0,0 +1 @@ +allenwebb@chromium.org diff --git a/rust/README.md b/rust/README.md new file mode 100644 index 0000000..3a899ce --- /dev/null +++ b/rust/README.md @@ -0,0 +1,18 @@ +# Rust bindings for vboot_reference + +This path contains the vboot_reference-sys crate which uses bindgen to generate +Rust bindings for the vboot_reference C library. + +Each header is included as its own submodule. To use these bindings: + * Add `vboot_reference-sys` to your `Cargo.toml` for example: +```toml +[dependencies] +vboot_reference-sys = { path = "../../vboot_reference/rust/vboot_reference-sys" } +``` + * Include the symbols you need for example: +```rust +use vboot_reference_sys::crossystem::*; +``` + +The `build.rs` in `vboot_reference-sys` takes care of adding the necessary +includes and linker flags for `vboot_host` through the `pkg-config` crate. diff --git a/rust/vboot_reference-sys/Cargo.toml b/rust/vboot_reference-sys/Cargo.toml new file mode 100644 index 0000000..59769ee --- /dev/null +++ b/rust/vboot_reference-sys/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "vboot_reference-sys" +version = "1.0.0" +description = "Provides raw (unsafe) bindings to the vboot_reference C library." +authors = ["The Chromium OS Authors"] +edition = "2018" +build = "build.rs" + +[lib] +path = "lib.rs" + +[dependencies] +libc = "0.2.44" + +[build-dependencies] +pkg-config = "0.3" +which = "4.0.0" diff --git a/rust/vboot_reference-sys/build.rs b/rust/vboot_reference-sys/build.rs new file mode 100644 index 0000000..523602f --- /dev/null +++ b/rust/vboot_reference-sys/build.rs @@ -0,0 +1,54 @@ +// Copyright 2019 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/// Minijail's build script invoked by cargo. +/// +/// This script prefers linking against a pkg-config provided libminijail, but will fall back to +/// building libminijail statically. +use std::env; +use std::fs::remove_file; +use std::io; +use std::path::Path; +use std::process::Command; + +fn bindings_generation() -> io::Result<()> { + let bindgen = which::which("bindgen").unwrap(); + + let out_dir = env::var("OUT_DIR").unwrap(); + let gen_file = Path::new(&out_dir).join("./crossystem.rs"); + if gen_file.exists() { + remove_file(&gen_file).expect("Failed to remove generated file."); + } + let header_dir = Path::new("."); + let header_path = header_dir.join("crossystem.h"); + println!("cargo:rerun-if-changed={}", header_path.display()); + let status = Command::new(&bindgen) + .args(&["--default-enum-style", "rust"]) + .args(&["--blacklist-type", "__rlim64_t"]) + .args(&["--raw-line", "pub type __rlim64_t = u64;"]) + .args(&["--blacklist-type", "__u\\d{1,2}"]) + .args(&["--raw-line", "pub type __u8 = u8;"]) + .args(&["--raw-line", "pub type __u16 = u16;"]) + .args(&["--raw-line", "pub type __u32 = u32;"]) + .args(&["--blacklist-type", "__uint64_t"]) + .arg("--no-layout-tests") + .arg("--disable-header-comment") + .args(&["--output", gen_file.to_str().unwrap()]) + .arg(header_path.to_str().unwrap()) + .args(&[ + "--", + "-DUSE_BINDGEN", + "-D_FILE_OFFSET_BITS=64", + "-D_LARGEFILE_SOURCE", + "-D_LARGEFILE64_SOURCE", + ]) + .status()?; + assert!(status.success()); + Ok(()) +} + +fn main() -> io::Result<()> { + pkg_config::Config::new().probe("vboot_host").unwrap(); + bindings_generation() +} diff --git a/rust/vboot_reference-sys/crossystem.h b/rust/vboot_reference-sys/crossystem.h new file mode 120000 index 0000000..9672639 --- /dev/null +++ b/rust/vboot_reference-sys/crossystem.h @@ -0,0 +1 @@ +../../host/include/crossystem.h \ No newline at end of file diff --git a/rust/vboot_reference-sys/lib.rs b/rust/vboot_reference-sys/lib.rs new file mode 100644 index 0000000..85b6f2a --- /dev/null +++ b/rust/vboot_reference-sys/lib.rs @@ -0,0 +1,15 @@ +// Copyright 2022 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/// vboot_reference bindings for Rust. + +#[allow( + clippy::all, + non_camel_case_types, + non_snake_case, + non_upper_case_globals +)] +pub mod crossystem { + include!(concat!(env!("OUT_DIR"), "/crossystem.rs")); +} diff --git a/scripts/OWNERS b/scripts/OWNERS new file mode 100644 index 0000000..ad80321 --- /dev/null +++ b/scripts/OWNERS @@ -0,0 +1,4 @@ +vapier@chromium.org +engeg@chromium.org +roydsouza@chromium.org +allenwebb@google.com diff --git a/scripts/getversion.sh b/scripts/getversion.sh new file mode 100755 index 0000000..a563007 --- /dev/null +++ b/scripts/getversion.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2014 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# Generate version information + +if ghash=$(git rev-parse --short --verify HEAD 2>/dev/null); then + if gdesc=$(git describe --dirty --match='v*' 2>/dev/null); then + IFS="-" fields=($gdesc) + tag="${fields[0]}" + IFS="." vernum=($tag) + numcommits=$((${vernum[2]}+${fields[1]:-0})) + ver_major="${vernum[0]}" + ver_branch="${vernum[1]}" + else + numcommits=$(git rev-list HEAD | wc -l) + ver_major="v0" + ver_branch="0" + fi + # avoid putting the -dirty attribute if only the timestamp + # changed + dirty=$(sh -c "[ '$(git diff-index --name-only HEAD)' ] \ + && echo '-dirty'") + ver="${ver_major}.${ver_branch}.${numcommits}-${ghash}${dirty}" +else + ver="unknown" +fi + +date=$(date '+%F %T') + +echo "const char futility_version[] = \"${ver} ${date} ${USER}\";"; diff --git a/scripts/image_signing/common.sh b/scripts/image_signing/common.sh new file mode 100644 index 0000000..efa00a2 --- /dev/null +++ b/scripts/image_signing/common.sh @@ -0,0 +1,140 @@ +#!/bin/bash +# +# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# shellcheck disable=SC2039,SC2059,SC2155 + +# shellcheck source=./common_minimal.sh +. "$(dirname "$0")/common_minimal.sh" +CROS_LOG_PREFIX="${PROG}: " + +# Performs clean up by executing actions in the cleanup_actions array in +# reversed order. +cleanup() { + # Save the existing return value. + rv=$? + set +e + + cleanup_temps_and_mounts + cleanup_loopbacks + + set -e + return $rv +} + +# ANSI color codes used when displaying messages. +# Taken from src/scripts/common.sh. +V_BOLD_GREEN="\e[1;32m" +V_BOLD_RED="\e[1;31m" +V_BOLD_YELLOW="\e[1;33m" +V_VIDOFF="\e[0m" + +# Prints an informational message. +# Taken from src/scripts/common.sh. +# Arg: MESSAGE +info() { + echo -e >&2 "${V_BOLD_GREEN}${CROS_LOG_PREFIX:-}INFO : $*${V_VIDOFF}" +} + +# Prints a warning message. +# Taken from src/scripts/common.sh. +# Arg: MESSAGE +warn() { + echo -e >&2 "${V_BOLD_YELLOW}${CROS_LOG_PREFIX:-}WARNING: $*${V_VIDOFF}" +} + +# Prints the specified error and exit the script with an error code. +# Taken from src/scripts/common.sh. +# Args: MESSAGE +error() { + echo -e >&2 "${V_BOLD_RED}${CROS_LOG_PREFIX:-}ERROR : $*${V_VIDOFF}" +} + +TEMP_LOOP_LIST=$(mktemp) + +# Setup a loopback device for a file and scan for partitions, with retries. +# +# $1 - The file to back the new loopback device. +# $2-$N - Additional arguments to pass to losetup. +loopback_partscan() { + local lb_dev image="$1" + shift + + # We know partition scanning & dev node creation can be racy with udev and + # the kernel, and the kernel does not sleep/wait for it to finish. We have + # to use the partx tool manually as it will sleep until things are finished. + lb_dev=$(sudo losetup --show -f "$@" "${image}") + + # Cache the path so we can clean it up. + echo "${lb_dev}" >>"${TEMP_LOOP_LIST}" + + # Ignore problems deleting existing partitions. There shouldn't be any + # which will upset partx, but that's actually ok. + sudo partx -d "${lb_dev}" 2>/dev/null || true + sudo partx -a "${lb_dev}" + + echo "${lb_dev}" +} + +# Detach a loopback device set up earlier. +# +# $1 - The loop device to detach. +# $2-$N - Additional arguments to pass to losetup. +loopback_detach() { + # Retry the deletes before we detach. crbug.com/469259 + local i + for (( i = 0; i < 10; i++ )); do + if sudo partx -d "$1"; then + break + fi + warn "Sleeping & retrying ..." + sync + sleep 1 + done + sudo losetup --detach "$@" +} + +# Clear out all loopback devices we setup. +cleanup_loopbacks() { + local line + while read -r line; do + info "Cleanup: detaching ${line}" + loopback_detach "${line}" 2>/dev/null + done <"${TEMP_LOOP_LIST}" + rm -f "${TEMP_LOOP_LIST}" +} + +# Usage: lsbval path-to-lsb-file key +# Returns the value for the given lsb-release file variable. +lsbval() { + local lsbfile="$1" + local key="$2" + grep "^${key}=" "${lsbfile}" | sed "s/^${key}=//" +} + +# Usage: get_board_from_lsb_release rootfs +# Returns the exact board name from /etc/lsb-release. This may contain +# dashes or other characters not suitable for variable names. See the +# next function for that. +get_board_from_lsb_release() { + local rootfs="$1" + lsbval "${rootfs}/etc/lsb-release" CHROMEOS_RELEASE_BOARD +} + +# Usage: get_boardvar_from_lsb_release rootfs +# Returns the board name from /etc/lsb-release in a mangled form that can +# be used in variable names. e.g. dashes are turned into underscores. +get_boardvar_from_lsb_release() { + get_board_from_lsb_release "$@" | sed 's:[-]:_:g' +} + +# Usage: restore_lsb_selinux lsb-file +# restore lsb-release security.selinux attribute +restore_lsb_selinux() { + sudo setfattr -n security.selinux -v "u:object_r:cros_conf_file:s0" "$1" +} + +# This will override the trap set in common_minmal.sh +trap "cleanup" INT TERM EXIT diff --git a/scripts/image_signing/common_minimal.sh b/scripts/image_signing/common_minimal.sh new file mode 100644 index 0000000..e8f0336 --- /dev/null +++ b/scripts/image_signing/common_minimal.sh @@ -0,0 +1,520 @@ +#!/bin/sh +# +# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# Note: This file must be written in dash compatible way as scripts that use +# this may run in the Chrome OS client enviornment. + +# shellcheck disable=SC2039,SC2059,SC2155 + +# Determine script directory +SCRIPT_DIR=$(dirname "$0") +PROG=$(basename "$0") +: "${GPT:=cgpt}" +: "${FUTILITY:=futility}" + +# The tag when the rootfs is changed. +TAG_NEEDS_TO_BE_SIGNED="/root/.need_to_be_signed" + +# List of Temporary files and mount points. +TEMP_FILE_LIST=$(mktemp) +TEMP_DIR_LIST=$(mktemp) + +# Finds and loads the 'shflags' library, or return as failed. +load_shflags() { + # Load shflags + if [ -f /usr/share/misc/shflags ]; then + # shellcheck disable=SC1090,SC1091 + . /usr/share/misc/shflags + elif [ -f "${SCRIPT_DIR}/lib/shflags/shflags" ]; then + # shellcheck disable=SC1090 + . "${SCRIPT_DIR}/lib/shflags/shflags" + else + echo "ERROR: Cannot find the required shflags library." + return 1 + fi + + # Add debug option for debug output below + DEFINE_boolean debug $FLAGS_FALSE "Provide debug messages" "d" +} + +# Functions for debug output +# ---------------------------------------------------------------------------- + +# These helpers are for runtime systems. For scripts using common.sh, +# they'll get better definitions that will clobber these ones. +info() { + echo "${PROG}: INFO: $*" >&2 +} + +warn() { + echo "${PROG}: WARN: $*" >&2 +} + +error() { + echo "${PROG}: ERROR: $*" >&2 +} + +# Reports error message and exit(1) +# Args: error message +die() { + error "$@" + exit 1 +} + +# Returns true if we're running in debug mode. +# +# Note that if you don't set up shflags by calling load_shflags(), you +# must set $FLAGS_debug and $FLAGS_TRUE yourself. The default +# behavior is that debug will be off if you define neither $FLAGS_TRUE +# nor $FLAGS_debug. +is_debug_mode() { + [ "${FLAGS_debug:-not$FLAGS_TRUE}" = "$FLAGS_TRUE" ] +} + +# Prints messages (in parameters) in debug mode +# Args: debug message +debug_msg() { + if is_debug_mode; then + echo "DEBUG: $*" 1>&2 + fi +} + +# Functions for temporary files and directories +# ---------------------------------------------------------------------------- + +# Create a new temporary file and return its name. +# File is automatically cleaned when cleanup_temps_and_mounts() is called. +make_temp_file() { + local tempfile="$(mktemp)" + echo "$tempfile" >> "$TEMP_FILE_LIST" + echo "$tempfile" +} + +# Create a new temporary directory and return its name. +# Directory is automatically deleted and any filesystem mounted on it unmounted +# when cleanup_temps_and_mounts() is called. +make_temp_dir() { + local tempdir=$(mktemp -d) + echo "$tempdir" >> "$TEMP_DIR_LIST" + echo "$tempdir" +} + +cleanup_temps_and_mounts() { + while read -r line; do + rm -f "$line" + done < "$TEMP_FILE_LIST" + + set +e # umount may fail for unmounted directories + while read -r line; do + if [ -n "$line" ]; then + if has_needs_to_be_resigned_tag "$line"; then + echo "Warning: image may be modified. Please resign image." + fi + sudo umount "$line" 2>/dev/null + rm -rf "$line" + fi + done < "$TEMP_DIR_LIST" + set -e + rm -rf "$TEMP_DIR_LIST" "$TEMP_FILE_LIST" +} + +trap "cleanup_temps_and_mounts" EXIT + +# Functions for partition management +# ---------------------------------------------------------------------------- + +# Construct a partition device name from a whole disk block device and a +# partition number. +# This works for [/dev/sda, 3] (-> /dev/sda3) as well as [/dev/mmcblk0, 2] +# (-> /dev/mmcblk0p2). +make_partition_dev() { + local block="$1" + local num="$2" + # If the disk block device ends with a number, we add a 'p' before the + # partition number. + if [ "${block%[0-9]}" = "${block}" ]; then + echo "${block}${num}" + else + echo "${block}p${num}" + fi +} + +# Find the block size of a device in bytes +# Args: DEVICE (e.g. /dev/sda) +# Return: block size in bytes +blocksize() { + local output='' + local path="$1" + if [ -b "${path}" ]; then + local dev="${path##*/}" + local sys="/sys/block/${dev}/queue/logical_block_size" + output="$(cat "${sys}" 2>/dev/null)" + fi + echo "${output:-512}" +} + +# Read GPT table to find the starting location of a specific partition. +# Args: DEVICE PARTNUM +# Returns: offset (in sectors) of partition PARTNUM +partoffset() { + sudo "$GPT" show -b -i "$2" "$1" +} + +# Read GPT table to find the size of a specific partition. +# Args: DEVICE PARTNUM +# Returns: size (in sectors) of partition PARTNUM +partsize() { + sudo "$GPT" show -s -i "$2" "$1" +} + +# Tags a file system as "needs to be resigned". +# Args: MOUNTDIRECTORY +tag_as_needs_to_be_resigned() { + local mount_dir="$1" + sudo touch "$mount_dir/$TAG_NEEDS_TO_BE_SIGNED" +} + +# Determines if the target file system has the tag for resign +# Args: MOUNTDIRECTORY +# Returns: true if the tag is there otherwise false +has_needs_to_be_resigned_tag() { + local mount_dir="$1" + [ -f "$mount_dir/$TAG_NEEDS_TO_BE_SIGNED" ] +} + +# Determines if the target file system is a Chrome OS root fs +# Args: MOUNTDIRECTORY +# Returns: true if MOUNTDIRECTORY looks like root fs, otherwise false +is_rootfs_partition() { + local mount_dir="$1" + [ -f "$mount_dir/$(dirname "$TAG_NEEDS_TO_BE_SIGNED")" ] +} + +# If the kernel is buggy and is unable to loop+mount quickly, +# retry the operation a few times. +# Args: IMAGE PARTNUM MOUNTDIRECTORY [ro] +# +# This function does not check whether the partition is allowed to be mounted as +# RW. Callers must ensure the partition can be mounted as RW before calling +# this function without |ro| argument. +_mount_image_partition_retry() { + local image=$1 + local partnum=$2 + local mount_dir=$3 + local ro=$4 + local bs="$(blocksize "${image}")" + local offset=$(( $(partoffset "${image}" "${partnum}") * bs )) + local out try + + # shellcheck disable=SC2086 + set -- sudo LC_ALL=C mount -o loop,offset=${offset},${ro} \ + "${image}" "${mount_dir}" + try=1 + while [ ${try} -le 5 ]; do + if ! out=$("$@" 2>&1); then + if [ "${out}" = "mount: you must specify the filesystem type" ]; then + printf 'WARNING: mounting %s at %s failed (try %i); retrying\n' \ + "${image}" "${mount_dir}" "${try}" + # Try to "quiet" the disks and sleep a little to reduce contention. + sync + sleep $(( try * 5 )) + else + # Failed for a different reason; abort! + break + fi + else + # It worked! + return 0 + fi + : $(( try += 1 )) + done + echo "ERROR: mounting ${image} at ${mount_dir} failed:" + echo "${out}" + # We don't preserve the exact exit code of `mount`, but since + # no one in this code base seems to check it, it's a moot point. + return 1 +} + +# If called without 'ro', make sure the partition is allowed to be mounted as +# 'rw' before actually mounting it. +# Args: IMAGE PARTNUM MOUNTDIRECTORY [ro] +_mount_image_partition() { + local image=$1 + local partnum=$2 + local mount_dir=$3 + local ro=$4 + local bs="$(blocksize "${image}")" + local offset=$(( $(partoffset "${image}" "${partnum}") * bs )) + + if [ "$ro" != "ro" ]; then + # Forcibly call enable_rw_mount. It should fail on unsupported + # filesystems and be idempotent on ext*. + enable_rw_mount "${image}" ${offset} 2> /dev/null + fi + + _mount_image_partition_retry "$@" +} + +# If called without 'ro', make sure the partition is allowed to be mounted as +# 'rw' before actually mounting it. +# Args: LOOPDEV PARTNUM MOUNTDIRECTORY [ro] +_mount_loop_image_partition() { + local loopdev=$1 + local partnum=$2 + local mount_dir=$3 + local ro=$4 + local loop_rootfs="${loopdev}p${partnum}" + + if [ "$ro" != "ro" ]; then + # Forcibly call enable_rw_mount. It should fail on unsupported + # filesystems and be idempotent on ext*. + enable_rw_mount "${loop_rootfs}" 2>/dev/null + fi + + sudo mount -o "${ro}" "${loop_rootfs}" "${mount_dir}" +} + +# Mount a partition read-only from an image into a local directory +# Args: IMAGE PARTNUM MOUNTDIRECTORY +mount_image_partition_ro() { + _mount_image_partition "$@" "ro" +} + +# Mount a partition read-only from an image into a local directory +# Args: LOOPDEV PARTNUM MOUNTDIRECTORY +mount_loop_image_partition_ro() { + _mount_loop_image_partition "$@" "ro" +} + +# Mount a partition from an image into a local directory +# Args: IMAGE PARTNUM MOUNTDIRECTORY +mount_image_partition() { + local mount_dir=$3 + _mount_image_partition "$@" + if is_rootfs_partition "${mount_dir}"; then + tag_as_needs_to_be_resigned "${mount_dir}" + fi +} + +# Mount a partition from an image into a local directory +# Args: LOOPDEV PARTNUM MOUNTDIRECTORY +mount_loop_image_partition() { + local mount_dir=$3 + _mount_loop_image_partition "$@" + if is_rootfs_partition "${mount_dir}"; then + tag_as_needs_to_be_resigned "${mount_dir}" + fi +} + +# Mount the image's ESP (EFI System Partition) on a newly created temporary +# directory. +# Prints out the newly created temporary directory path if succeeded. +# If the image doens't have an ESP partition, returns 0 without print anything. +# Args: LOOPDEV +# Returns: 0 if succeeded, 1 otherwise. +mount_image_esp() { + local loopdev="$1" + local ESP_PARTNUM=12 + local loop_esp="${loopdev}p${ESP_PARTNUM}" + + local esp_offset=$(( $(partoffset "${loopdev}" "${ESP_PARTNUM}") )) + # Check if the image has an ESP partition. + if [[ "${esp_offset}" == "0" ]]; then + return 0 + fi + + local esp_dir="$(make_temp_dir)" + if ! sudo mount -o "${ro}" "${loop_esp}" "${esp_dir}"; then + return 1 + fi + + echo "${esp_dir}" + return 0 +} + +# Extract a partition to a file +# Args: IMAGE PARTNUM OUTPUTFILE +extract_image_partition() { + local image=$1 + local partnum=$2 + local output_file=$3 + local offset=$(partoffset "$image" "$partnum") + local size=$(partsize "$image" "$partnum") + + # shellcheck disable=SC2086 + dd if="$image" of="$output_file" bs=512 skip=$offset count=$size \ + conv=notrunc 2>/dev/null +} + +# Replace a partition in an image from file +# Args: IMAGE PARTNUM INPUTFILE +replace_image_partition() { + local image=$1 + local partnum=$2 + local input_file=$3 + local offset=$(partoffset "$image" "$partnum") + local size=$(partsize "$image" "$partnum") + + # shellcheck disable=SC2086 + dd if="$input_file" of="$image" bs=512 seek=$offset count=$size \ + conv=notrunc 2>/dev/null +} + +# For details, see crosutils.git/common.sh +enable_rw_mount() { + local rootfs="$1" + local offset="${2-0}" + + # Make sure we're checking an ext2 image + # shellcheck disable=SC2086 + if ! is_ext2 "$rootfs" $offset; then + echo "enable_rw_mount called on non-ext2 filesystem: $rootfs $offset" 1>&2 + return 1 + fi + + local ro_compat_offset=$((0x464 + 3)) # Set 'highest' byte + # Dash can't do echo -ne, but it can do printf "\NNN" + # We could use /dev/zero here, but this matches what would be + # needed for disable_rw_mount (printf '\377'). + printf '\000' | + sudo dd of="$rootfs" seek=$((offset + ro_compat_offset)) \ + conv=notrunc count=1 bs=1 2>/dev/null +} + +# For details, see crosutils.git/common.sh +is_ext2() { + local rootfs="$1" + local offset="${2-0}" + + # Make sure we're checking an ext2 image + local sb_magic_offset=$((0x438)) + local sb_value=$(sudo dd if="$rootfs" skip=$((offset + sb_magic_offset)) \ + count=2 bs=1 2>/dev/null) + local expected_sb_value=$(printf '\123\357') + if [ "$sb_value" = "$expected_sb_value" ]; then + return 0 + fi + return 1 +} + +disable_rw_mount() { + local rootfs="$1" + local offset="${2-0}" + + # Make sure we're checking an ext2 image + # shellcheck disable=SC2086 + if ! is_ext2 "$rootfs" $offset; then + echo "disable_rw_mount called on non-ext2 filesystem: $rootfs $offset" 1>&2 + return 1 + fi + + local ro_compat_offset=$((0x464 + 3)) # Set 'highest' byte + # Dash can't do echo -ne, but it can do printf "\NNN" + # We could use /dev/zero here, but this matches what would be + # needed for disable_rw_mount (printf '\377'). + printf '\377' | + sudo dd of="$rootfs" seek=$((offset + ro_compat_offset)) \ + conv=notrunc count=1 bs=1 2>/dev/null +} + +rw_mount_disabled() { + local rootfs="$1" + local offset="${2-0}" + + # Make sure we're checking an ext2 image + # shellcheck disable=SC2086 + if ! is_ext2 "$rootfs" $offset; then + return 2 + fi + + local ro_compat_offset=$((0x464 + 3)) # Set 'highest' byte + local ro_value=$(sudo dd if="$rootfs" skip=$((offset + ro_compat_offset)) \ + count=1 bs=1 2>/dev/null) + local expected_ro_value=$(printf '\377') + if [ "$ro_value" = "$expected_ro_value" ]; then + return 0 + fi + return 1 +} + +# Functions for CBFS management +# ---------------------------------------------------------------------------- + +# Get the compression algorithm used for the given CBFS file. +# Args: INPUT_CBFS_IMAGE CBFS_FILE_NAME +get_cbfs_compression() { + cbfstool "$1" print -r "FW_MAIN_A" | awk -vname="$2" '$1 == name {print $5}' +} + +# Store a file in CBFS. +# Args: INPUT_CBFS_IMAGE INPUT_FILE CBFS_FILE_NAME +store_file_in_cbfs() { + local image="$1" + local file="$2" + local name="$3" + local compression=$(get_cbfs_compression "$1" "${name}") + + # Don't re-add a file to a section if it's unchanged. Otherwise this seems + # to break signature of existing contents. https://crbug.com/889716 + if cbfstool "${image}" extract -r "FW_MAIN_A,FW_MAIN_B" \ + -f "${file}.orig" -n "${name}"; then + if cmp -s "${file}" "${file}.orig"; then + rm -f "${file}.orig" + return + fi + rm -f "${file}.orig" + fi + + cbfstool "${image}" remove -r "FW_MAIN_A,FW_MAIN_B" -n "${name}" || return + # This add can fail if + # 1. Size of a signature after compression is larger + # 2. CBFS is full + # These conditions extremely unlikely become true at the same time. + cbfstool "${image}" add -r "FW_MAIN_A,FW_MAIN_B" -t "raw" \ + -c "${compression}" -f "${file}" -n "${name}" || return +} + +# Misc functions +# ---------------------------------------------------------------------------- + +# Parses the version file containing key=value lines +# Args: key file +# Returns: value +get_version() { + local key="$1" + local file="$2" + awk -F= -vkey="${key}" '$1 == key { print $NF }' "${file}" +} + +# Returns true if all files in parameters exist. +# Args: List of files +ensure_files_exist() { + local filename return_value=0 + for filename in "$@"; do + if [ ! -f "$filename" ] && [ ! -b "$filename" ]; then + echo "ERROR: Cannot find required file: $filename" + return_value=1 + fi + done + + return $return_value +} + +# Check if the 'chronos' user already has a password +# Args: rootfs +no_chronos_password() { + local rootfs=$1 + # Make sure the chronos user actually exists. + if grep -qs '^chronos:' "${rootfs}/etc/passwd"; then + sudo grep -q '^chronos:\*:' "${rootfs}/etc/shadow" + fi +} + +# Returns true if given ec.bin is signed or false if not. +is_ec_rw_signed() { + ${FUTILITY} dump_fmap "$1" | grep -q KEY_RO +} + diff --git a/scripts/image_signing/convert_recovery_to_full_ssd.sh b/scripts/image_signing/convert_recovery_to_full_ssd.sh new file mode 100755 index 0000000..c249a4f --- /dev/null +++ b/scripts/image_signing/convert_recovery_to_full_ssd.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Script to convert a recovery image into an SSD image usable by factory. + +# TODO(gauravsh): crosbug.com/14790 (Merge this with +# convert_recovery_to_ssd.sh) + +# Load common constants and variables. +. "$(dirname "$0")/common_minimal.sh" + +usage() { + cat < + +Converts into a full SSD image usable by factory. Uses +stateful partition from SSD image . +EOF +} + +if [ $# -ne 3 ]; then + usage + exit 1 +fi + +type -P cgpt &>/dev/null || + { echo "cgpt tool must be in the path"; exit 1; } + +# Abort on errors. +set -e + +RECOVERY_IMAGE=$1 +IMAGE_ZIP=$2 +SSD_IMAGE=$3 + +work_dir=$(make_temp_dir) + +echo "Extracting original SSD image." +unzip -o $IMAGE_ZIP chromiumos_base_image.bin -d ${work_dir} + +mv ${work_dir}/chromiumos_base_image.bin ${SSD_IMAGE} + +kerna_offset=$(partoffset ${RECOVERY_IMAGE} 2) +kernb_offset=$(partoffset ${RECOVERY_IMAGE} 4) +# Kernel partition sizes should be the same. +kern_size=$(partsize ${RECOVERY_IMAGE} 2) + +rootfs=$(make_temp_file) +echo "Replacing RootFS on the SSD with that of the RECOVERY image" +extract_image_partition ${RECOVERY_IMAGE} 3 ${rootfs} +replace_image_partition ${SSD_IMAGE} 3 ${rootfs} + +kerna=$(make_temp_file) +echo "Replacing KernelA on the SSD with that of the RECOVERY image" +extract_image_partition ${RECOVERY_IMAGE} 4 ${kerna} +replace_image_partition ${SSD_IMAGE} 2 ${kerna} + +# Overwrite the kernel vblock on the created SSD image. +stateful_dir=$(make_temp_dir) +tmp_vblock=$(make_temp_file) +mount_image_partition_ro ${RECOVERY_IMAGE} 1 ${stateful_dir} +sudo cp ${stateful_dir}/vmlinuz_hd.vblock ${tmp_vblock} +echo "Overwriting kernel vblock with SSD kernel vblock" +sudo dd if=${tmp_vblock} of=${SSD_IMAGE} seek=${kerna_offset} bs=512 \ + conv=notrunc +sudo umount ${stateful_dir} + +# Zero out Kernel B partition. +echo "Zeroing out Kernel partition B" +sudo dd if=/dev/zero of=${SSD_IMAGE} seek=${kernb_offset} bs=512 \ + count=${kern_size} conv=notrunc +echo "${RECOVERY_IMAGE} was converted to a factory SSD image: ${SSD_IMAGE}" diff --git a/scripts/image_signing/convert_recovery_to_ssd.sh b/scripts/image_signing/convert_recovery_to_ssd.sh new file mode 100755 index 0000000..bd6c96d --- /dev/null +++ b/scripts/image_signing/convert_recovery_to_ssd.sh @@ -0,0 +1,71 @@ +#!/bin/bash +# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +usage() { + cat < [--force] + +In-place converts recovery into an SSD image. With --force, does not +ask for confirmation from the user. + +EOF + exit 1 +} + +if [ $# -lt 1 ] || [ $# -gt 3 ]; then + usage +else + IMAGE=$1 + shift +fi + +for arg in "$@"; do + case "$arg" in + --force) + IS_FORCE=${arg} + ;; + *) + usage + ;; + esac +done + +# Load common constants (and use GPT if set above) and variables. +. "$(dirname "$0")/common.sh" + +# Abort on errors. +set -e + +if [ "${IS_FORCE}" != "--force" ]; then + echo "This will modify ${IMAGE} in-place and convert it into an SSD image." + read -p "Are you sure you want to continue (y/N)? " SURE + SURE="${SURE:0:1}" + [ "${SURE}" != "y" ] && exit 1 +fi + +loopdev=$(loopback_partscan "${IMAGE}") +loop_kerna="${loopdev}p2" +loop_kernb="${loopdev}p4" + +# Move Kernel B to Kernel A. +info "Replacing Kernel partition A with Kernel partition B" +sudo cp "${loop_kernb}" "${loop_kerna}" + +# Overwrite the vblock. +info "Overwriting kernel partition A vblock with SSD vblock" +stateful_dir=$(make_temp_dir) +tmp_vblock=$(make_temp_file) +sudo mount -o ro "${loopdev}p1" "${stateful_dir}" +sudo cp "${stateful_dir}/vmlinuz_hd.vblock" "${tmp_vblock}" +# Unmount before overwriting image to avoid sync issues. +sudo umount "${stateful_dir}" +sudo dd if="${tmp_vblock}" of="${loop_kerna}" bs=512 conv=notrunc + +# Zero out Kernel B partition. +info "Zeroing out Kernel partition B" +# This will throw a "disk is full" error, so ignore it. +sudo cp /dev/zero "${loop_kernb}" 2>/dev/null || : + +info "${IMAGE} was converted to an SSD image." diff --git a/scripts/image_signing/ensure_no_nonrelease_files.sh b/scripts/image_signing/ensure_no_nonrelease_files.sh new file mode 100755 index 0000000..9e549ed --- /dev/null +++ b/scripts/image_signing/ensure_no_nonrelease_files.sh @@ -0,0 +1,72 @@ +#!/bin/bash + +# Copyright (c) 2012 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Abort on error. +set -e + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +usage() { + echo "Usage $PROG image [config]" +} + +main() { + # We want to catch all the discrepancies, not just the first one. + # So, any time we find one, we set testfail=1 and continue. + # When finished we will use testfail to determine our exit value. + local testfail=0 + + if [[ $# -ne 1 ]] && [[ $# -ne 2 ]]; then + usage + exit 1 + fi + + local image="$1" + + # Default config location: same name/directory as this script, + # with a .config file extension, ie ensure_no_nonrelease_files.config. + local configfile="$(dirname "$0")/${0/%.sh/.config}" + # Or, maybe a config was provided on the command line. + if [[ $# -eq 2 ]]; then + configfile="$2" + fi + # Either way, load test-expectations data from config. + . "${configfile}" || return 1 + + local loopdev rootfs + if [[ -d "${image}" ]]; then + rootfs="${image}" + else + rootfs=$(make_temp_dir) + loopdev=$(loopback_partscan "${image}") + mount_loop_image_partition "${loopdev}" 3 "${rootfs}" + fi + # Pick the right set of test-expectation data to use. + local brdvar=$(get_boardvar_from_lsb_release "${rootfs}") + eval "release_file_blocklist=(\"\${RELEASE_FILE_BLOCKLIST_${brdvar}[@]}\")" + + for file in ${release_file_blocklist}; do + if [ -e "${rootfs}/${file}" ]; then + error "${file} exists in this image!" + ls -al "${rootfs}/${file}" + testfail=1 + fi + done + + # Verify that session_manager isn't configured to pass additional + # environment variables or command-line arguments to Chrome. + local config_path="${rootfs}/etc/chrome_dev.conf" + local matches=$(grep -s "^[^#]" "${config_path}") + if [ -n "${matches}" ]; then + error "Found commands in ${config_path}:" + error "${matches}" + testfail=1 + fi + + exit ${testfail} +} +main "$@" diff --git a/scripts/image_signing/ensure_no_password.sh b/scripts/image_signing/ensure_no_password.sh new file mode 100755 index 0000000..5df6845 --- /dev/null +++ b/scripts/image_signing/ensure_no_password.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# abort on error +set -e + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +main() { + if [[ $# -ne 1 ]]; then + echo "Usage $0 " + exit 1 + fi + + local image="$1" + + local loopdev rootfs + if [[ -d "${image}" ]]; then + rootfs="${image}" + else + rootfs=$(make_temp_dir) + loopdev=$(loopback_partscan "${image}") + mount_loop_image_partition_ro "${loopdev}" 3 "${rootfs}" + fi + + if ! no_chronos_password "${rootfs}"; then + die "chronos password is set! Shouldn't be for release builds." + fi +} +main "$@" diff --git a/scripts/image_signing/ensure_not_ASAN.sh b/scripts/image_signing/ensure_not_ASAN.sh new file mode 100755 index 0000000..f19b1dd --- /dev/null +++ b/scripts/image_signing/ensure_not_ASAN.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Abort on error. +set -e + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +usage() { + echo "Usage $PROG image" +} + +main() { + if [[ $# -ne 1 ]]; then + usage + exit 1 + fi + + local image="$1" + + local loopdev rootfs + if [[ -d "${image}" ]]; then + rootfs="${image}" + else + rootfs=$(make_temp_dir) + loopdev=$(loopback_partscan "${image}") + mount_loop_image_partition_ro "${loopdev}" 3 "${rootfs}" + fi + + # This mirrors the check performed in the platform_ToolchainOptions + # autotest. + if readelf -s "$rootfs/opt/google/chrome/chrome" | \ + grep -q __asan_init; then + exit 1 + fi +} +main "$@" diff --git a/scripts/image_signing/ensure_not_tainted_license.sh b/scripts/image_signing/ensure_not_tainted_license.sh new file mode 100755 index 0000000..7eab1c9 --- /dev/null +++ b/scripts/image_signing/ensure_not_tainted_license.sh @@ -0,0 +1,71 @@ +#!/bin/bash +# +# Copyright 2020 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# This script ensures absence of a tag in image's license. + +# Abort on error. +set -e + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +usage() { + echo "Usage ${PROG} image" +} + +main() { + if [[ $# -ne 1 ]]; then + usage + exit 1 + fi + + local image="$1" + + local loopdev rootfs + if [[ -d "${image}" ]]; then + rootfs="${image}" + else + rootfs=$(make_temp_dir) + loopdev=$(loopback_partscan "${image}") + mount_loop_image_partition_ro "${loopdev}" 3 "${rootfs}" + fi + + local license_dir license tainted_tag tainted_status + license_dir="${rootfs}/opt/google/chrome/" + if [[ ! -d "${license_dir}" ]]; then + echo "Directory ${license_dir} does not exist. Skipping the tainted check." + exit 0 + fi + + license=$(find "${license_dir}" -name about_os_credits.html 2>/dev/null) + if [[ -z "${license}" ]]; then + echo "License file about_os_credits.html not found in ${license_dir}." + echo "Skipping the check of tainted license." + exit 0 + fi + + tainted_tag="" + # Add "|| :" to the grep command to prevent it from returning error code 1 if + # no match is found, which would cause the script to exit immediately with + # error code 1 due to set -e. + tainted_status=$(grep "${tainted_tag}" "${license}") || : + if [[ -n "${tainted_status}" ]]; then + echo "${license}:" + echo "License file contains packages with LICENSE=TAINTED." + echo "Remove those packages or modify their license to allow signing." + # Print the list of tainted packages. + sed -n '/Image is TAINTED/,/<\/ul>/{ + # Strip out HTML tags. + s/<[^>]*>//g + # Delete any empty lines. + /^[[:space:]]*$/d + p + }' "${license}" + exit 1 + fi + exit 0 +} +main "$@" diff --git a/scripts/image_signing/ensure_sane_lsb-release.sh b/scripts/image_signing/ensure_sane_lsb-release.sh new file mode 100755 index 0000000..0846963 --- /dev/null +++ b/scripts/image_signing/ensure_sane_lsb-release.sh @@ -0,0 +1,159 @@ +#!/bin/bash + +# Copyright (c) 2012 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Abort on error. +set -e + +LSB_FILE=/etc/lsb-release + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +usage() { + echo "Usage $PROG image [config]" +} + +# Usage: lsbequals path-to-lsb-file key expected-value +# Returns 0 if they match, 1 otherwise. +# Also outputs a warning message if they don't match. +lsbequals() { + local lsbfile="$1" + local key="$2" + local expectval="$3" + local realval=$(lsbval "$lsbfile" $key) + if [ "$realval" != "$expectval" ]; then + error "${key} mismatch. Expected '${expectval}'," \ + "image contains '${realval}'" + return 1 + fi + return 0 +} + +# Usage: check_keyval_in_list lsbfile lsbkey [list of values] +# Extracts the lsb-release value for the specified key, and confirms it +# matches one of the allowed values specified in value_array. +# Implementation note: +# You can't really pass bash arrays to functions. Best you can do is either +# serialize to string/pass/deserialize (e.g. using whitspace/IFS hacks), or, +# let the array contents be received as multiple arguments to the target +# function. We take the latter approach here, hence the shift's to get the +# first 2 arguments out, before we process the rest of the varargs. +check_keyval_in_list() { + local lsbfile="$1" + shift + local lsbkey="$1" + shift + local lsbval=$(lsbval "$lsbfile" "$lsbkey") + while [ $# -gt 0 ]; do + if [ "$lsbval" == "$1" ]; then + return 0 + fi + shift + done + # If we get here, it wasn't found + error "${lsbkey}: Value '${lsbval}' was not recognized" + return 1 +} + +# Usage: lsb_syntaxcheck path-to-lsb-file +# Enforces a number of basic validity checks on the overall format and contents +# of the lsb-release file: +# - Every line is "key=value". +# - No space after key, no space before value. +# - key is all A-Z or _, but not starting with _. +# - value is made up of printable characters, or is empty. +# - The whole file is a reasonable size (4kb). +lsb_syntaxcheck() { + local lsbfile="$1" + syntaxbad=0 + # Checks for key being A-Z_, 1 or more characters, not starting with _. + # Also checks for = with no spaces on either side. + # Checks that the value contains printables (and not starting with space). + # Alternatively, the value is permitted to be empty (0 chars) too. + # Allow comments to start with #. + badlines=$(grep -Ev \ + -e '^[A-Z][A-Z_]*=([[:graph:]][[:print:]]*)?$' \ + -e '^[[:space:]]*#' "${lsbfile}") + if [ -n "$badlines" ]; then + syntaxbad=1 + error "${lsbfile}: Some lines seem non-well-formed:" + error "${badlines}" + fi + + # Overall file size check: + size=$(ls -sk "$lsbfile" | cut -d ' ' -f 1) + if [ $size -gt 4 ]; then + syntaxbad=1 + error "${lsbfile}: This file exceeds 4kb" + fi + return $syntaxbad +} + +main() { + # We want to catch all the discrepancies, not just the first one. + # So, any time we find one, we set testfail=1 and continue. + # When finished we will use testfail to determine our exit value. + local testfail=0 + + if [ $# -ne 1 ] && [ $# -ne 2 ]; then + usage + exit 1 + fi + + local image="$1" + + # Default config location: same directory as this script. + local configfile="$(dirname "$0")/default_lsb_release.config" + # Or, maybe a config was provided on the command line. + if [ $# -eq 2 ]; then + configfile="$2" + fi + # Either way, load test-expectations data from config. + info "Loading config from ${configfile}" + . "$configfile" || return 1 + + local loopdev rootfs + if [[ -d "${image}" ]]; then + # We're given a mounted rootfs. + rootfs="${image}" + else + # Mount the disk image. + loopdev=$(loopback_partscan "${image}") + rootfs=$(make_temp_dir) + mount_loop_image_partition_ro "${loopdev}" 3 "${rootfs}" + fi + local lsb="$rootfs/$LSB_FILE" + + # Basic syntax check first. + lsb_syntaxcheck "$lsb" || testfail=1 + + lsbequals $lsb CHROMEOS_AUSERVER "$expected_auserver" || testfail=1 + lsbequals $lsb CHROMEOS_RELEASE_NAME "$expected_release_name" || testfail=1 + check_keyval_in_list $lsb CHROMEOS_RELEASE_TRACK \ + "${expected_release_tracks[@]}" || testfail=1 + + local board=$(get_board_from_lsb_release "${rootfs}") + if check_keyval_in_list $lsb CHROMEOS_RELEASE_BOARD \ + "${expected_boards[@]}"; then + local boardvar=$(get_boardvar_from_lsb_release "${rootfs}") + channel=$(lsbval $lsb CHROMEOS_RELEASE_TRACK) + # For a canary or dogfood channel, appid maybe a different default value. + if [[ "${channel}" == 'canary-channel' || + "${channel}" == 'dogfood-channel' ]]; then + eval "expected_appid=\"\$expected_appid_${channel%\-channel}\"" + else + eval "expected_appid=\"\$expected_appid_$boardvar\"" + fi + lsbequals $lsb CHROMEOS_RELEASE_APPID "$expected_appid" || testfail=1 + else # unrecognized board + testfail=1 + error "Unknown board: ${board}" + fi + + exit $testfail +} + +main "$@" diff --git a/scripts/image_signing/ensure_secure_kernelparams.sh b/scripts/image_signing/ensure_secure_kernelparams.sh new file mode 100755 index 0000000..b971ab4 --- /dev/null +++ b/scripts/image_signing/ensure_secure_kernelparams.sh @@ -0,0 +1,228 @@ +#!/bin/bash + +# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Abort on error. +set -e + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +# Given a kernel boot param string which includes ...dm="dmstuff"... +# this returns the dmstuff by itself. +get_dmparams() { + echo "$1" | sed 's/^.*\ dm="\([^"]*\)".*/\1/' +} + +# Given a kernel boot param string which includes ...dm="stuff"... +# this returns the param string with the dm="..." section removed. +# Useful in conjunction with get_dmparams to divide and process +# the two sections of parameters in seperate passes +kparams_remove_dm() { + echo "$1" | sed 's/dm="[^"]*"//' +} + +# Given a dm param string which includes dynamic values, return the +# same string with these values replaced by a magic string placeholder. +# This same magic placeholder is used in the config file, for comparison +# purposes. +dmparams_mangle() { + local dmparams=$1 + # First handle new key-value style verity parameters. + dmparams=$(echo "$dmparams" | + sed -e 's/root_hexdigest=[0-9a-fA-F]*/root_hexdigest=MAGIC_HASH/' | + sed -e 's/salt=[0-9a-fA-F]*/salt=MAGIC_SALT'/) + # If we didn't substitute the MAGIC_HASH yet, these are the old + # verity parameter format. + if [[ $dmparams != *MAGIC_HASH* ]]; then + dmparams=$(echo $dmparams | sed 's/sha1 [0-9a-fA-F]*/sha1 MAGIC_HASH/') + fi + # If we have bootcache enabled, replace its copy of the root_hexdigest + # with MAGIC_HASH. The parameter is positional. + if [[ $dmparams == *bootcache* ]]; then + dmparams=$(echo $dmparams | + sed -r 's:(bootcache (PARTUUID=)?%U(/PARTNROFF=|\+)1 [0-9]+) [0-9a-fA-F]+:\1 MAGIC_HASH:') + fi + echo $dmparams +} + +# This escapes any non-alphanum character, since many such characters +# are regex metacharacters. +escape_regexmetas() { + echo "$1" | sed 's/\([^a-zA-Z0-9]\)/\\\1/g' +} + +usage() { + echo "Usage $PROG image [config]" +} + +main() { + # We want to catch all the discrepancies, not just the first one. + # So, any time we find one, we set testfail=1 and continue. + # When finished we will use testfail to determine our exit value. + local testfail=0 + # A buffer to include useful information that we dump when things fail. + local output + # Copy of a string before it has been through sed + local pre_sed + # Where the disk image is mounted. + local loopdev + + if [[ $# -ne 1 ]] && [[ $# -ne 2 ]]; then + usage + exit 1 + fi + + local image="$1" + + # A byte that should not appear in the command line to use as a sed + # marker when doing regular expression replacements. + local M=$'\001' + + # Default config location: same name/directory as this script, + # with a .config file extension, ie ensure_secure_kernelparams.config. + local configfile="$(dirname "$0")/${0/%.sh/.config}" + # Or, maybe a config was provided on the command line. + if [[ $# -eq 2 ]]; then + configfile="$2" + fi + # Either way, load test-expectations data from config. + . "$configfile" || return 1 + + # Set up the image on a loopback device so it's faster to access. + local loopdev + loopdev=$(loopback_partscan "${image}") + + # TODO(jimhebert): Perform the kernel security tests on both the kernel + # partitions. Here, we just run it on kernel partition 4 + # which is the install kernel on the recovery image. + # crosbug.com/24274 + local loop_kern="${loopdev}p4" + local rootfs=$(make_temp_dir) + mount_loop_image_partition_ro "${loopdev}" 3 "${rootfs}" + + # Pick the right set of test-expectation data to use. + local boardvar=$(get_boardvar_from_lsb_release "${rootfs}") + eval "required_kparams=(\"\${required_kparams_${boardvar}[@]}\")" + eval "required_kparams_regex=(\"\${required_kparams_regex_${boardvar}[@]}\")" + eval "optional_kparams=(\"\${optional_kparams_${boardvar}[@]}\")" + eval "optional_kparams_regex=(\"\${optional_kparams_regex_${boardvar}[@]}\")" + eval "required_dmparams=(\"\${required_dmparams_${boardvar}[@]}\")" + eval "required_dmparams_regex=(\"\${required_dmparams_regex_${boardvar}[@]}\")" + output+="required_kparams=(\n" + output+="$(printf "\t'%s'\n" "${required_kparams[@]}")\n)\n" + output+="required_kparams_regex=(\n" + output+="$(printf "\t'%s'\n" "${required_kparams_regex[@]}")\n)\n" + output+="optional_kparams=(\n" + output+="$(printf "\t'%s'\n" "${optional_kparams[@]}")\n)\n" + output+="optional_kparams_regex=(\n" + output+="$(printf "\t'%s'\n" "${optional_kparams_regex[@]}")\n)\n" + output+="required_dmparams=(\n" + output+="$(printf "\t'%s'\n" "${required_dmparams[@]}")\n)\n" + output+="required_dmparams_regex=(\n" + output+="$(printf "\t'%s'\n" "${required_dmparams_regex[@]}")\n)\n" + + # Divide the dm params from the rest and process seperately. + local kparams=$(sudo dump_kernel_config "${loop_kern}") + local dmparams=$(get_dmparams "$kparams") + local kparams_nodm=$(kparams_remove_dm "$kparams") + + output+="\nkparams='${kparams}'\n" + output+="\ndmparams='${dmparams}'\n" + output+="\nkparams_nodm='${kparams_nodm}'\n" + + mangled_dmparams=$(dmparams_mangle "${dmparams}") + output+="\nmangled_dmparams='${mangled_dmparams}'\n" + # Special-case handling of the dm= param: + testfail=1 + for expected_dmparams in "${required_dmparams[@]}"; do + # Filter out all dynamic parameters. + if [ "$mangled_dmparams" = "$expected_dmparams" ]; then + testfail=0 + break + fi + done + + local sedout + for expected_dmparams in "${required_dmparams_regex[@]}"; do + if ! sedout=$(echo "${mangled_dmparams}" | \ + sed "s${M}^${expected_dmparams}\$${M}${M}"); then + echo "INTERNAL ERROR from sed script: ${expected_dmparams}" + break + elif [[ -z "${sedout}" ]]; then + testfail=0 + break + fi + done + + if [ $testfail -eq 1 ]; then + echo "Kernel dm= parameter does not match any expected values!" + echo "Actual value: ${dmparams}" + echo "Mangled testing value: ${mangled_dmparams}" + if [[ ${#required_dmparams[@]} -gt 0 ]]; then + echo "Expected -- only one need match:" + printf " >>> %s\n" "${required_dmparams[@]}" + fi + if [[ ${#required_dmparams_regex[@]} -gt 0 ]]; then + echo "Expected (regex) -- only one need match:" + printf " >>> %s\n" "${required_dmparams_regex[@]}" + fi + fi + + # Ensure all other required params are present. + for param in "${required_kparams[@]}"; do + if [[ "$kparams_nodm" != *$param* ]]; then + echo "Kernel parameters missing required value: $param" + testfail=1 + else + # Remove matched params as we go. If all goes well, kparams_nodm + # will be nothing left but whitespace by the end. + param=$(escape_regexmetas "$param") + kparams_nodm=$(echo " ${kparams_nodm} " | + sed "s${M} ${param} ${M} ${M}") + fi + done + + # Ensure all other required regex params are present. + for param in "${required_kparams_regex[@]}"; do + pre_sed=" ${kparams_nodm} " + kparams_nodm=$(echo "${pre_sed}" | sed "s${M} ${param} ${M} ${M}") + if [[ "${pre_sed}" == "${kparams_nodm}" ]]; then + echo "Kernel parameters missing required value: ${param}" + testfail=1 + fi + done + + # Check-off each of the allowed-but-optional params that were present. + for param in "${optional_kparams[@]}"; do + param=$(escape_regexmetas "$param") + kparams_nodm=$(echo " ${kparams_nodm} " | + sed "s${M} ${param} ${M} ${M}") + done + + # Check-off each of the allowed-but-optional params that were present. + for param in "${optional_kparams_regex[@]}"; do + kparams_nodm=$(echo " ${kparams_nodm} " | + sed "s${M} ${param} ${M} ${M}") + done + + # This section enforces the default-deny for any unexpected params + # not already processed by one of the above loops. + if [[ ! -z ${kparams_nodm// /} ]]; then + echo "Unexpected kernel parameters found:" + echo " $(echo "${kparams_nodm}" | sed -r 's: +: :g')" + testfail=1 + fi + + if [[ ${testfail} -eq 1 ]]; then + echo "Debug output:" + printf '%b\n' "${output}" + echo "(actual error will be at the top of output)" + fi + + exit $testfail +} + +main $@ diff --git a/scripts/image_signing/ensure_update_verification.sh b/scripts/image_signing/ensure_update_verification.sh new file mode 100755 index 0000000..e3929c5 --- /dev/null +++ b/scripts/image_signing/ensure_update_verification.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +# Copyright (c) 2012 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Verify that update payload verification is enabled. + +# Abort on error. +set -e + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +usage() { + echo "Usage: $PROG image" +} + +main() { + if [ $# -ne 1 ]; then + usage + exit 1 + fi + + local image=$1 + + local loopdev rootfs + if [[ -d "${image}" ]]; then + rootfs="${image}" + else + rootfs=$(make_temp_dir) + loopdev=$(loopback_partscan "${image}") + mount_loop_image_partition_ro "${loopdev}" 3 "${rootfs}" + fi + local key_location="/usr/share/update_engine/update-payload-key.pub.pem" + if [ ! -e "$rootfs/$key_location" ]; then + die "Update payload verification key not found at $key_location" + fi +} + +main "$@" diff --git a/scripts/image_signing/gbb_flags_common.sh b/scripts/image_signing/gbb_flags_common.sh new file mode 100755 index 0000000..63c3f12 --- /dev/null +++ b/scripts/image_signing/gbb_flags_common.sh @@ -0,0 +1,59 @@ +#!/bin/sh +# +# Copyright 2017 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# This script provides tools to read or change GBB flags on a live system. + +SCRIPT_BASE="$(dirname "$0")" +. "${SCRIPT_BASE}/common_minimal.sh" +load_shflags || exit 1 + +# Globals +# ---------------------------------------------------------------------------- + +# Values from vboot_reference/firmware/2lib/include/2gbb_flags.h +GBBFLAGS_DESCRIPTION_PREFIX=" + Defined flags (some values may be not supported by all systems): + + " +GBBFLAGS_LIST=" + VB2_GBB_FLAG_DEV_SCREEN_SHORT_DELAY 0x00000001 + VB2_GBB_FLAG_LOAD_OPTION_ROMS 0x00000002 + VB2_GBB_FLAG_ENABLE_ALTERNATE_OS 0x00000004 + VB2_GBB_FLAG_FORCE_DEV_SWITCH_ON 0x00000008 + VB2_GBB_FLAG_FORCE_DEV_BOOT_USB 0x00000010 + VB2_GBB_FLAG_DISABLE_FW_ROLLBACK_CHECK 0x00000020 + VB2_GBB_FLAG_ENTER_TRIGGERS_TONORM 0x00000040 + VB2_GBB_FLAG_FORCE_DEV_BOOT_ALTFW 0x00000080 + VB2_GBB_FLAG_RUNNING_FAFT 0x00000100 + VB2_GBB_FLAG_DISABLE_EC_SOFTWARE_SYNC 0x00000200 + VB2_GBB_FLAG_DEFAULT_DEV_BOOT_ALTFW 0x00000400 + VB2_GBB_FLAG_DISABLE_AUXFW_SOFTWARE_SYNC 0x00000800 + VB2_GBB_FLAG_DISABLE_LID_SHUTDOWN 0x00001000 + VB2_GBB_FLAG_FORCE_MANUAL_RECOVERY 0x00004000 + VB2_GBB_FLAG_DISABLE_FWMP 0x00008000 + VB2_GBB_FLAG_ENABLE_UDC 0x00010000 + " + +GBBFLAGS_DESCRIPTION_SUFFIX=" + To get a developer-friendly device, try 0x11 (short_delay + boot_usb). + For factory-related tests (always DEV), try 0x39. + For early development (disable EC/auxfw software sync), try 0xa39. + " +GBBFLAGS_DESCRIPTION="${GBBFLAGS_DESCRIPTION_PREFIX}${GBBFLAGS_LIST}" +GBBFLAGS_DESCRIPTION="${GBBFLAGS_DESCRIPTION}${GBBFLAGS_DESCRIPTION_SUFFIX}" + +FLAGS_HELP="Manages Chrome OS Firmware GBB Flags value. + + Usage: $0 [option_flags] GBB_FLAGS_VALUE + ${GBBFLAGS_DESCRIPTION}" + +flashrom_read() { + flashrom -p host -i GBB -r "$@" +} + +flashrom_write() { + flashrom -p host -i GBB --noverify-all -w "$@" +} diff --git a/scripts/image_signing/get_gbb_flags.sh b/scripts/image_signing/get_gbb_flags.sh new file mode 100755 index 0000000..2b78af6 --- /dev/null +++ b/scripts/image_signing/get_gbb_flags.sh @@ -0,0 +1,54 @@ +#!/bin/sh +# +# Copyright 2017 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# This script can change GBB flags in system live firmware or a given image +# file. + +SCRIPT_BASE="$(dirname "$0")" +. "${SCRIPT_BASE}/gbb_flags_common.sh" + +# DEFINE_string name default_value description flag +DEFINE_string file "" "Path to firmware image. Default to system firmware." "f" +DEFINE_boolean explicit ${FLAGS_FALSE} "Print list of what flags are set." "e" + +set -e + +main() { + if [ $# -ne 0 ]; then + flags_help + exit 1 + fi + + local image_file="${FLAGS_file}" + + if [ -z "${FLAGS_file}" ]; then + image_file="$(make_temp_file)" + flashrom_read "${image_file}" + fi + + # Process file. + + # Keep 'local' declaration split from assignment so return code is checked. + local gbb_flags + gbb_flags="$(futility gbb -g --flags "${image_file}")" + local raw_gbb_flags="$(echo "${gbb_flags}" | egrep -o "0x[0-9a-fA-F]+")" + printf "Chrome OS GBB set ${gbb_flags}\n" + + if [ "${FLAGS_explicit}" = "${FLAGS_TRUE}" ]; then + printf "Chrome OS GBB set flags listed:\n" + echo "${GBBFLAGS_LIST}" | while read -r flag code; do + if [ $((code & raw_gbb_flags)) -ne 0 ]; then + printf "${flag}\n" + fi + done + fi +} + +# Parse command line. +FLAGS "$@" || exit 1 +eval set -- "${FLAGS_ARGV}" + +main "$@" diff --git a/scripts/image_signing/insert_au_publickey.sh b/scripts/image_signing/insert_au_publickey.sh new file mode 100755 index 0000000..fe0dbcc --- /dev/null +++ b/scripts/image_signing/insert_au_publickey.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Install an update payload verification public key to the image. + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +main() { + set -e + + local image="$1" + local pub_key="$2" + if [ $# -ne 2 ]; then + cat < +Installs the update verification public key to . +EOF + exit 1 + fi + + local loopdev rootfs + if [[ -d "${image}" ]]; then + rootfs="${image}" + else + rootfs=$(make_temp_dir) + loopdev=$(loopback_partscan "${image}") + mount_loop_image_partition "${loopdev}" 3 "${rootfs}" + fi + + local key_location="/usr/share/update_engine/" + sudo mkdir -p "$rootfs/$key_location" + sudo cp "$pub_key" "$rootfs/$key_location/update-payload-key.pub.pem" + sudo chown root:root "$rootfs/$key_location/update-payload-key.pub.pem" + sudo chmod 644 "$rootfs/$key_location/update-payload-key.pub.pem" + echo "AU verification key was installed. Do not forget to resign the image!" +} + +main "$@" diff --git a/scripts/image_signing/insert_container_publickey.sh b/scripts/image_signing/insert_container_publickey.sh new file mode 100755 index 0000000..606a291 --- /dev/null +++ b/scripts/image_signing/insert_container_publickey.sh @@ -0,0 +1,55 @@ +#!/bin/bash +# Copyright 2017 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +load_shflags || exit 1 + +FLAGS_HELP="Usage: ${PROG} + +Installs the container verification public key to +. +" + +# Parse command line. +FLAGS "$@" || exit 1 +eval set -- "${FLAGS_ARGV}" + +# Abort on error. +set -e + +main() { + if [[ $# -ne 2 ]]; then + flags_help + exit 1 + fi + + local image="$1" + local pub_key="$2" + local loopdev + local rootfs + local key_location="/usr/share/misc/" + + if [[ -d "${image}" ]]; then + rootfs="${image}" + else + loopdev=$(loopback_partscan "${image}") + rootfs=$(make_temp_dir) + mount_loop_image_partition "${loopdev}" 3 "${rootfs}" + fi + + # Imageloader likes DER as a runtime format as it's easier to read. + local tmpfile=$(make_temp_file) + openssl pkey -pubin -in "${pub_key}" -out "${tmpfile}" -pubout -outform DER + + sudo install \ + -D -o root -g root -m 644 \ + "${tmpfile}" "${rootfs}/${key_location}/oci-container-key-pub.der" + info "Container verification key was installed." \ + "Do not forget to resign the image!" +} + +main "$@" diff --git a/scripts/image_signing/install_gsetup_certs.sh b/scripts/image_signing/install_gsetup_certs.sh new file mode 100755 index 0000000..e51843d --- /dev/null +++ b/scripts/image_signing/install_gsetup_certs.sh @@ -0,0 +1,72 @@ +#!/bin/bash +# Copyright 2018 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +. "$(dirname "$0")/common.sh" + +set -e + +usage() { + cat <: contains value of flag named 'flag_name' +# __flags__default: the default flag value +# __flags__help: the flag help string +# __flags__short: the flag short name +# __flags__type: the flag type +# +# Notes: +# - lists of strings are space separated, and a null value is the '~' char. + +# return if FLAGS already loaded +[ -n "${FLAGS_VERSION:-}" ] && return 0 +FLAGS_VERSION='1.0.3' + +# return values +FLAGS_TRUE=0 +FLAGS_FALSE=1 +FLAGS_ERROR=2 + +# reserved flag names +FLAGS_RESERVED='ARGC ARGV ERROR FALSE HELP PARENT RESERVED TRUE VERSION' + +_flags_debug() { echo "flags:DEBUG $@" >&2; } +_flags_warn() { echo "flags:WARN $@" >&2; } +_flags_error() { echo "flags:ERROR $@" >&2; } +_flags_fatal() { echo "flags:FATAL $@" >&2; } + +# specific shell checks +if [ -n "${ZSH_VERSION:-}" ]; then + setopt |grep "^shwordsplit$" >/dev/null + if [ $? -ne ${FLAGS_TRUE} ]; then + _flags_fatal 'zsh shwordsplit option is required for proper zsh operation' + exit ${FLAGS_ERROR} + fi + if [ -z "${FLAGS_PARENT:-}" ]; then + _flags_fatal "zsh does not pass \$0 through properly. please declare' \ +\"FLAGS_PARENT=\$0\" before calling shFlags" + exit ${FLAGS_ERROR} + fi +fi + +# +# constants +# + +# getopt version +__FLAGS_GETOPT_VERS_STD=0 +__FLAGS_GETOPT_VERS_ENH=1 +__FLAGS_GETOPT_VERS_BSD=2 + +getopt >/dev/null 2>&1 +case $? in + 0) __FLAGS_GETOPT_VERS=${__FLAGS_GETOPT_VERS_STD} ;; # bsd getopt + 2) + # TODO(kward): look into '-T' option to test the internal getopt() version + if [ "`getopt --version`" = '-- ' ]; then + __FLAGS_GETOPT_VERS=${__FLAGS_GETOPT_VERS_STD} + else + __FLAGS_GETOPT_VERS=${__FLAGS_GETOPT_VERS_ENH} + fi + ;; + *) + _flags_fatal 'unable to determine getopt version' + exit ${FLAGS_ERROR} + ;; +esac + +# getopt optstring lengths +__FLAGS_OPTSTR_SHORT=0 +__FLAGS_OPTSTR_LONG=1 + +__FLAGS_NULL='~' + +# flag info strings +__FLAGS_INFO_DEFAULT='default' +__FLAGS_INFO_HELP='help' +__FLAGS_INFO_SHORT='short' +__FLAGS_INFO_TYPE='type' + +# flag lengths +__FLAGS_LEN_SHORT=0 +__FLAGS_LEN_LONG=1 + +# flag types +__FLAGS_TYPE_NONE=0 +__FLAGS_TYPE_BOOLEAN=1 +__FLAGS_TYPE_FLOAT=2 +__FLAGS_TYPE_INTEGER=3 +__FLAGS_TYPE_STRING=4 + +# set the constants readonly +__flags_constants=`set |awk -F= '/^FLAGS_/ || /^__FLAGS_/ {print $1}'` +for __flags_const in ${__flags_constants}; do + # skip certain flags + case ${__flags_const} in + FLAGS_HELP) continue ;; + FLAGS_PARENT) continue ;; + esac + # set flag readonly + if [ -z "${ZSH_VERSION:-}" ]; then + readonly ${__flags_const} + else # handle zsh + case ${ZSH_VERSION} in + [123].*) readonly ${__flags_const} ;; + *) readonly -g ${__flags_const} ;; # declare readonly constants globally + esac + fi +done +unset __flags_const __flags_constants + +# +# internal variables +# + +__flags_boolNames=' ' # space separated list of boolean flag names +__flags_longNames=' ' # space separated list of long flag names +__flags_shortNames=' ' # space separated list of short flag names + +__flags_columns='' # screen width in columns +__flags_opts='' # temporary storage for parsed getopt flags + +#------------------------------------------------------------------------------ +# private functions +# + +# Define a flag. +# +# Calling this function will define the following info variables for the +# specified flag: +# FLAGS_flagname - the name for this flag (based upon the long flag name) +# __flags__default - the default value +# __flags_flagname_help - the help string +# __flags_flagname_short - the single letter alias +# __flags_flagname_type - the type of flag (one of __FLAGS_TYPE_*) +# +# Args: +# _flags__type: integer: internal type of flag (__FLAGS_TYPE_*) +# _flags__name: string: long flag name +# _flags__default: default flag value +# _flags__help: string: help string +# _flags__short: string: (optional) short flag name +# Returns: +# integer: success of operation, or error +_flags_define() +{ + if [ $# -lt 4 ]; then + flags_error='DEFINE error: too few arguments' + flags_return=${FLAGS_ERROR} + _flags_error "${flags_error}" + return ${flags_return} + fi + + _flags_type_=$1 + _flags_name_=$2 + _flags_default_=$3 + _flags_help_=$4 + _flags_short_=${5:-${__FLAGS_NULL}} + + _flags_return_=${FLAGS_TRUE} + + # TODO(kward): check for validity of the flag name (e.g. dashes) + + # check whether the flag name is reserved + echo " ${FLAGS_RESERVED} " |grep " ${_flags_name_} " >/dev/null + if [ $? -eq 0 ]; then + flags_error="flag name (${_flags_name_}) is reserved" + _flags_return_=${FLAGS_ERROR} + fi + + # require short option for getopt that don't support long options + if [ ${_flags_return_} -eq ${FLAGS_TRUE} \ + -a ${__FLAGS_GETOPT_VERS} -ne ${__FLAGS_GETOPT_VERS_ENH} \ + -a "${_flags_short_}" = "${__FLAGS_NULL}" ] + then + flags_error="short flag required for (${_flags_name_}) on this platform" + _flags_return_=${FLAGS_ERROR} + fi + + # check for existing long name definition + if [ ${_flags_return_} -eq ${FLAGS_TRUE} ]; then + if _flags_itemInList "${_flags_name_}" \ + ${__flags_longNames} ${__flags_boolNames} + then + flags_error="flag name ([no]${_flags_name_}) already defined" + _flags_warn "${flags_error}" + _flags_return_=${FLAGS_FALSE} + fi + fi + + # check for existing short name definition + if [ ${_flags_return_} -eq ${FLAGS_TRUE} \ + -a "${_flags_short_}" != "${__FLAGS_NULL}" ] + then + if _flags_itemInList "${_flags_short_}" ${__flags_shortNames}; then + flags_error="flag short name (${_flags_short_}) already defined" + _flags_warn "${flags_error}" + _flags_return_=${FLAGS_FALSE} + fi + fi + + # handle default value. note, on several occasions the 'if' portion of an + # if/then/else contains just a ':' which does nothing. a binary reversal via + # '!' is not done because it does not work on all shells. + if [ ${_flags_return_} -eq ${FLAGS_TRUE} ]; then + case ${_flags_type_} in + ${__FLAGS_TYPE_BOOLEAN}) + if _flags_validateBoolean "${_flags_default_}"; then + case ${_flags_default_} in + true|t|0) _flags_default_=${FLAGS_TRUE} ;; + false|f|1) _flags_default_=${FLAGS_FALSE} ;; + esac + else + flags_error="invalid default flag value '${_flags_default_}'" + _flags_return_=${FLAGS_ERROR} + fi + ;; + + ${__FLAGS_TYPE_FLOAT}) + if _flags_validateFloat "${_flags_default_}"; then + : + else + flags_error="invalid default flag value '${_flags_default_}'" + _flags_return_=${FLAGS_ERROR} + fi + ;; + + ${__FLAGS_TYPE_INTEGER}) + if _flags_validateInteger "${_flags_default_}"; then + : + else + flags_error="invalid default flag value '${_flags_default_}'" + _flags_return_=${FLAGS_ERROR} + fi + ;; + + ${__FLAGS_TYPE_STRING}) ;; # everything in shell is a valid string + + *) + flags_error="unrecognized flag type '${_flags_type_}'" + _flags_return_=${FLAGS_ERROR} + ;; + esac + fi + + if [ ${_flags_return_} -eq ${FLAGS_TRUE} ]; then + # store flag information + eval "FLAGS_${_flags_name_}='${_flags_default_}'" + eval "__flags_${_flags_name_}_${__FLAGS_INFO_TYPE}=${_flags_type_}" + eval "__flags_${_flags_name_}_${__FLAGS_INFO_DEFAULT}=\ +\"${_flags_default_}\"" + eval "__flags_${_flags_name_}_${__FLAGS_INFO_HELP}=\"${_flags_help_}\"" + eval "__flags_${_flags_name_}_${__FLAGS_INFO_SHORT}='${_flags_short_}'" + + # append flag name(s) to list of names + __flags_longNames="${__flags_longNames}${_flags_name_} " + __flags_shortNames="${__flags_shortNames}${_flags_short_} " + [ ${_flags_type_} -eq ${__FLAGS_TYPE_BOOLEAN} ] && \ + __flags_boolNames="${__flags_boolNames}no${_flags_name_} " + fi + + flags_return=${_flags_return_} + unset _flags_default_ _flags_help_ _flags_name_ _flags_return_ _flags_short_ \ + _flags_type_ + [ ${flags_return} -eq ${FLAGS_ERROR} ] && _flags_error "${flags_error}" + return ${flags_return} +} + +# Return valid getopt options using currently defined list of long options. +# +# This function builds a proper getopt option string for short (and long) +# options, using the current list of long options for reference. +# +# Args: +# _flags_optStr: integer: option string type (__FLAGS_OPTSTR_*) +# Output: +# string: generated option string for getopt +# Returns: +# boolean: success of operation (always returns True) +_flags_genOptStr() +{ + _flags_optStrType_=$1 + + _flags_opts_='' + + for _flags_flag_ in ${__flags_longNames}; do + _flags_type_=`_flags_getFlagInfo ${_flags_flag_} ${__FLAGS_INFO_TYPE}` + case ${_flags_optStrType_} in + ${__FLAGS_OPTSTR_SHORT}) + _flags_shortName_=`_flags_getFlagInfo \ + ${_flags_flag_} ${__FLAGS_INFO_SHORT}` + if [ "${_flags_shortName_}" != "${__FLAGS_NULL}" ]; then + _flags_opts_="${_flags_opts_}${_flags_shortName_}" + # getopt needs a trailing ':' to indicate a required argument + [ ${_flags_type_} -ne ${__FLAGS_TYPE_BOOLEAN} ] && \ + _flags_opts_="${_flags_opts_}:" + fi + ;; + + ${__FLAGS_OPTSTR_LONG}) + _flags_opts_="${_flags_opts_:+${_flags_opts_},}${_flags_flag_}" + # getopt needs a trailing ':' to indicate a required argument + [ ${_flags_type_} -ne ${__FLAGS_TYPE_BOOLEAN} ] && \ + _flags_opts_="${_flags_opts_}:" + ;; + esac + done + + echo "${_flags_opts_}" + unset _flags_flag_ _flags_opts_ _flags_optStrType_ _flags_shortName_ \ + _flags_type_ + return ${FLAGS_TRUE} +} + +# Returns flag details based on a flag name and flag info. +# +# Args: +# string: long flag name +# string: flag info (see the _flags_define function for valid info types) +# Output: +# string: value of dereferenced flag variable +# Returns: +# integer: one of FLAGS_{TRUE|FALSE|ERROR} +_flags_getFlagInfo() +{ + _flags_name_=$1 + _flags_info_=$2 + + _flags_nameVar_="__flags_${_flags_name_}_${_flags_info_}" + _flags_strToEval_="_flags_value_=\"\${${_flags_nameVar_}:-}\"" + eval "${_flags_strToEval_}" + if [ -n "${_flags_value_}" ]; then + flags_return=${FLAGS_TRUE} + else + # see if the _flags_name_ variable is a string as strings can be empty... + # note: the DRY principle would say to have this function call itself for + # the next three lines, but doing so results in an infinite loop as an + # invalid _flags_name_ will also not have the associated _type variable. + # Because it doesn't (it will evaluate to an empty string) the logic will + # try to find the _type variable of the _type variable, and so on. Not so + # good ;-) + _flags_typeVar_="__flags_${_flags_name_}_${__FLAGS_INFO_TYPE}" + _flags_strToEval_="_flags_type_=\"\${${_flags_typeVar_}:-}\"" + eval "${_flags_strToEval_}" + if [ "${_flags_type_}" = "${__FLAGS_TYPE_STRING}" ]; then + flags_return=${FLAGS_TRUE} + else + flags_return=${FLAGS_ERROR} + flags_error="invalid flag name (${_flags_nameVar_})" + fi + fi + + echo "${_flags_value_}" + unset _flags_info_ _flags_name_ _flags_strToEval_ _flags_type_ _flags_value_ \ + _flags_nameVar_ _flags_typeVar_ + [ ${flags_return} -eq ${FLAGS_ERROR} ] && _flags_error "${flags_error}" + return ${flags_return} +} + +# check for presense of item in a list. passed a string (e.g. 'abc'), this +# function will determine if the string is present in the list of strings (e.g. +# ' foo bar abc '). +# +# Args: +# _flags__str: string: string to search for in a list of strings +# unnamed: list: list of strings +# Returns: +# boolean: true if item is in the list +_flags_itemInList() +{ + _flags_str_=$1 + shift + + echo " ${*:-} " |grep " ${_flags_str_} " >/dev/null + if [ $? -eq 0 ]; then + flags_return=${FLAGS_TRUE} + else + flags_return=${FLAGS_FALSE} + fi + + unset _flags_str_ + return ${flags_return} +} + +# Returns the width of the current screen. +# +# Output: +# integer: width in columns of the current screen. +_flags_columns() +{ + if [ -z "${__flags_columns}" ]; then + # determine the value and store it + if eval stty size >/dev/null 2>&1; then + # stty size worked :-) + set -- `stty size` + __flags_columns=$2 + elif eval tput cols >/dev/null 2>&1; then + set -- `tput cols` + __flags_columns=$1 + else + __flags_columns=80 # default terminal width + fi + fi + echo ${__flags_columns} +} + +# Validate a boolean. +# +# Args: +# _flags__bool: boolean: value to validate +# Returns: +# bool: true if the value is a valid boolean +_flags_validateBoolean() +{ + _flags_bool_=$1 + + flags_return=${FLAGS_TRUE} + case "${_flags_bool_}" in + true|t|0) ;; + false|f|1) ;; + *) flags_return=${FLAGS_FALSE} ;; + esac + + unset _flags_bool_ + return ${flags_return} +} + +# Validate a float. +# +# Args: +# _flags__float: float: value to validate +# Returns: +# bool: true if the value is a valid float +_flags_validateFloat() +{ + _flags_float_=$1 + + if _flags_validateInteger ${_flags_float_}; then + flags_return=${FLAGS_TRUE} + else + flags_return=${FLAGS_TRUE} + case ${_flags_float_} in + -*) # negative floats + _flags_test_=`expr "${_flags_float_}" : '\(-[0-9][0-9]*\.[0-9][0-9]*\)'` + ;; + *) # positive floats + _flags_test_=`expr "${_flags_float_}" : '\([0-9][0-9]*\.[0-9][0-9]*\)'` + ;; + esac + [ "${_flags_test_}" != "${_flags_float_}" ] && flags_return=${FLAGS_FALSE} + fi + + unset _flags_float_ _flags_test_ + return ${flags_return} +} + +# Validate an integer. +# +# Args: +# _flags__integer: interger: value to validate +# Returns: +# bool: true if the value is a valid integer +_flags_validateInteger() +{ + _flags_int_=$1 + + flags_return=${FLAGS_TRUE} + case ${_flags_int_} in + -*) # negative ints + _flags_test_=`expr "${_flags_int_}" : '\(-[0-9][0-9]*\)'` + ;; + *) # positive ints + _flags_test_=`expr "${_flags_int_}" : '\([0-9][0-9]*\)'` + ;; + esac + [ "${_flags_test_}" != "${_flags_int_}" ] && flags_return=${FLAGS_FALSE} + + unset _flags_int_ _flags_test_ + return ${flags_return} +} + +# Parse command-line options using the standard getopt. +# +# Note: the flag options are passed around in the global __flags_opts so that +# the formatting is not lost due to shell parsing and such. +# +# Args: +# @: varies: command-line options to parse +# Returns: +# integer: a FLAGS success condition +_flags_getoptStandard() +{ + flags_return=${FLAGS_TRUE} + _flags_shortOpts_=`_flags_genOptStr ${__FLAGS_OPTSTR_SHORT}` + + # check for spaces in passed options + for _flags_opt_ in "$@"; do + # note: the silliness with the x's is purely for ksh93 on Ubuntu 6.06 + _flags_match_=`echo "x${_flags_opt_}x" |sed 's/ //g'` + if [ "${_flags_match_}" != "x${_flags_opt_}x" ]; then + flags_error='the available getopt does not support spaces in options' + flags_return=${FLAGS_ERROR} + break + fi + done + + if [ ${flags_return} -eq ${FLAGS_TRUE} ]; then + __flags_opts=`getopt ${_flags_shortOpts_} $@ 2>&1` + _flags_rtrn_=$? + if [ ${_flags_rtrn_} -ne ${FLAGS_TRUE} ]; then + _flags_warn "${__flags_opts}" + flags_error='unable to parse provided options with getopt.' + flags_return=${FLAGS_ERROR} + fi + fi + + unset _flags_match_ _flags_opt_ _flags_rtrn_ _flags_shortOpts_ + return ${flags_return} +} + +# Parse command-line options using the enhanced getopt. +# +# Note: the flag options are passed around in the global __flags_opts so that +# the formatting is not lost due to shell parsing and such. +# +# Args: +# @: varies: command-line options to parse +# Returns: +# integer: a FLAGS success condition +_flags_getoptEnhanced() +{ + flags_return=${FLAGS_TRUE} + _flags_shortOpts_=`_flags_genOptStr ${__FLAGS_OPTSTR_SHORT}` + _flags_boolOpts_=`echo "${__flags_boolNames}" \ + |sed 's/^ *//;s/ *$//;s/ /,/g'` + _flags_longOpts_=`_flags_genOptStr ${__FLAGS_OPTSTR_LONG}` + + __flags_opts=`getopt \ + -o ${_flags_shortOpts_} \ + -l "${_flags_longOpts_},${_flags_boolOpts_}" \ + -- "$@" 2>&1` + _flags_rtrn_=$? + if [ ${_flags_rtrn_} -ne ${FLAGS_TRUE} ]; then + _flags_warn "${__flags_opts}" + flags_error='unable to parse provided options with getopt.' + flags_return=${FLAGS_ERROR} + fi + + unset _flags_boolOpts_ _flags_longOpts_ _flags_rtrn_ _flags_shortOpts_ + return ${flags_return} +} + +# Dynamically parse a getopt result and set appropriate variables. +# +# This function does the actual conversion of getopt output and runs it through +# the standard case structure for parsing. The case structure is actually quite +# dynamic to support any number of flags. +# +# Args: +# argc: int: original command-line argument count +# @: varies: output from getopt parsing +# Returns: +# integer: a FLAGS success condition +_flags_parseGetopt() +{ + _flags_argc_=$1 + shift + + flags_return=${FLAGS_TRUE} + + if [ ${__FLAGS_GETOPT_VERS} -ne ${__FLAGS_GETOPT_VERS_ENH} ]; then + set -- $@ + else + # note the quotes around the `$@' -- they are essential! + eval set -- "$@" + fi + + # provide user with number of arguments to shift by later + # NOTE: the FLAGS_ARGC variable is obsolete as of 1.0.3 because it does not + # properly give user access to non-flag arguments mixed in between flag + # arguments. Its usage was replaced by FLAGS_ARGV, and it is being kept only + # for backwards compatibility reasons. + FLAGS_ARGC=`expr $# - 1 - ${_flags_argc_}` + + # handle options. note options with values must do an additional shift + while true; do + _flags_opt_=$1 + _flags_arg_=${2:-} + _flags_type_=${__FLAGS_TYPE_NONE} + _flags_name_='' + + # determine long flag name + case "${_flags_opt_}" in + --) shift; break ;; # discontinue option parsing + + --*) # long option + _flags_opt_=`expr "${_flags_opt_}" : '--\(.*\)'` + _flags_len_=${__FLAGS_LEN_LONG} + if _flags_itemInList "${_flags_opt_}" ${__flags_longNames}; then + _flags_name_=${_flags_opt_} + else + # check for negated long boolean version + if _flags_itemInList "${_flags_opt_}" ${__flags_boolNames}; then + _flags_name_=`expr "${_flags_opt_}" : 'no\(.*\)'` + _flags_type_=${__FLAGS_TYPE_BOOLEAN} + _flags_arg_=${__FLAGS_NULL} + fi + fi + ;; + + -*) # short option + _flags_opt_=`expr "${_flags_opt_}" : '-\(.*\)'` + _flags_len_=${__FLAGS_LEN_SHORT} + if _flags_itemInList "${_flags_opt_}" ${__flags_shortNames}; then + # yes. match short name to long name. note purposeful off-by-one + # (too high) with awk calculations. + _flags_pos_=`echo "${__flags_shortNames}" \ + |awk 'BEGIN{RS=" ";rn=0}$0==e{rn=NR}END{print rn}' \ + e=${_flags_opt_}` + _flags_name_=`echo "${__flags_longNames}" \ + |awk 'BEGIN{RS=" "}rn==NR{print $0}' rn="${_flags_pos_}"` + fi + ;; + esac + + # die if the flag was unrecognized + if [ -z "${_flags_name_}" ]; then + flags_error="unrecognized option (${_flags_opt_})" + flags_return=${FLAGS_ERROR} + break + fi + + # set new flag value + [ ${_flags_type_} -eq ${__FLAGS_TYPE_NONE} ] && \ + _flags_type_=`_flags_getFlagInfo \ + "${_flags_name_}" ${__FLAGS_INFO_TYPE}` + case ${_flags_type_} in + ${__FLAGS_TYPE_BOOLEAN}) + if [ ${_flags_len_} -eq ${__FLAGS_LEN_LONG} ]; then + if [ "${_flags_arg_}" != "${__FLAGS_NULL}" ]; then + eval "FLAGS_${_flags_name_}=${FLAGS_TRUE}" + else + eval "FLAGS_${_flags_name_}=${FLAGS_FALSE}" + fi + else + _flags_strToEval_="_flags_val_=\ +\${__flags_${_flags_name_}_${__FLAGS_INFO_DEFAULT}}" + eval "${_flags_strToEval_}" + if [ ${_flags_val_} -eq ${FLAGS_FALSE} ]; then + eval "FLAGS_${_flags_name_}=${FLAGS_TRUE}" + else + eval "FLAGS_${_flags_name_}=${FLAGS_FALSE}" + fi + fi + ;; + + ${__FLAGS_TYPE_FLOAT}) + if _flags_validateFloat "${_flags_arg_}"; then + eval "FLAGS_${_flags_name_}='${_flags_arg_}'" + else + flags_error="invalid float value (${_flags_arg_})" + flags_return=${FLAGS_ERROR} + break + fi + ;; + + ${__FLAGS_TYPE_INTEGER}) + if _flags_validateInteger "${_flags_arg_}"; then + eval "FLAGS_${_flags_name_}='${_flags_arg_}'" + else + flags_error="invalid integer value (${_flags_arg_})" + flags_return=${FLAGS_ERROR} + break + fi + ;; + + ${__FLAGS_TYPE_STRING}) + eval "FLAGS_${_flags_name_}='${_flags_arg_}'" + ;; + esac + + # handle special case help flag + if [ "${_flags_name_}" = 'help' ]; then + if [ ${FLAGS_help} -eq ${FLAGS_TRUE} ]; then + flags_help + flags_error='help requested' + flags_return=${FLAGS_FALSE} + break + fi + fi + + # shift the option and non-boolean arguements out. + shift + [ ${_flags_type_} != ${__FLAGS_TYPE_BOOLEAN} ] && shift + done + + # give user back non-flag arguments + FLAGS_ARGV='' + while [ $# -gt 0 ]; do + FLAGS_ARGV="${FLAGS_ARGV:+${FLAGS_ARGV} }'$1'" + shift + done + + unset _flags_arg_ _flags_len_ _flags_name_ _flags_opt_ _flags_pos_ \ + _flags_strToEval_ _flags_type_ _flags_val_ + return ${flags_return} +} + +#------------------------------------------------------------------------------ +# public functions +# + +# A basic boolean flag. Boolean flags do not take any arguments, and their +# value is either 1 (false) or 0 (true). For long flags, the false value is +# specified on the command line by prepending the word 'no'. With short flags, +# the presense of the flag toggles the current value between true and false. +# Specifying a short boolean flag twice on the command results in returning the +# value back to the default value. +# +# A default value is required for boolean flags. +# +# For example, lets say a Boolean flag was created whose long name was 'update' +# and whose short name was 'x', and the default value was 'false'. This flag +# could be explicitly set to 'true' with '--update' or by '-x', and it could be +# explicitly set to 'false' with '--noupdate'. +DEFINE_boolean() { _flags_define ${__FLAGS_TYPE_BOOLEAN} "$@"; } + +# Other basic flags. +DEFINE_float() { _flags_define ${__FLAGS_TYPE_FLOAT} "$@"; } +DEFINE_integer() { _flags_define ${__FLAGS_TYPE_INTEGER} "$@"; } +DEFINE_string() { _flags_define ${__FLAGS_TYPE_STRING} "$@"; } + +# Parse the flags. +# +# Args: +# unnamed: list: command-line flags to parse +# Returns: +# integer: success of operation, or error +FLAGS() +{ + # define a standard 'help' flag if one isn't already defined + [ -z "${__flags_help_type:-}" ] && \ + DEFINE_boolean 'help' false 'show this help' 'h' + + # parse options + if [ $# -gt 0 ]; then + if [ ${__FLAGS_GETOPT_VERS} -ne ${__FLAGS_GETOPT_VERS_ENH} ]; then + _flags_getoptStandard "$@" + else + _flags_getoptEnhanced "$@" + fi + flags_return=$? + else + # nothing passed; won't bother running getopt + __flags_opts='--' + flags_return=${FLAGS_TRUE} + fi + + if [ ${flags_return} -eq ${FLAGS_TRUE} ]; then + _flags_parseGetopt $# "${__flags_opts}" + flags_return=$? + fi + + [ ${flags_return} -eq ${FLAGS_ERROR} ] && _flags_fatal "${flags_error}" + return ${flags_return} +} + +# This is a helper function for determining the `getopt` version for platforms +# where the detection isn't working. It simply outputs debug information that +# can be included in a bug report. +# +# Args: +# none +# Output: +# debug info that can be included in a bug report +# Returns: +# nothing +flags_getoptInfo() +{ + # platform info + _flags_debug "uname -a: `uname -a`" + _flags_debug "PATH: ${PATH}" + + # shell info + if [ -n "${BASH_VERSION:-}" ]; then + _flags_debug 'shell: bash' + _flags_debug "BASH_VERSION: ${BASH_VERSION}" + elif [ -n "${ZSH_VERSION:-}" ]; then + _flags_debug 'shell: zsh' + _flags_debug "ZSH_VERSION: ${ZSH_VERSION}" + fi + + # getopt info + getopt >/dev/null + _flags_getoptReturn=$? + _flags_debug "getopt return: ${_flags_getoptReturn}" + _flags_debug "getopt --version: `getopt --version 2>&1`" + + unset _flags_getoptReturn +} + +# Returns whether the detected getopt version is the enhanced version. +# +# Args: +# none +# Output: +# none +# Returns: +# bool: true if getopt is the enhanced version +flags_getoptIsEnh() +{ + test ${__FLAGS_GETOPT_VERS} -eq ${__FLAGS_GETOPT_VERS_ENH} +} + +# Returns whether the detected getopt version is the standard version. +# +# Args: +# none +# Returns: +# bool: true if getopt is the standard version +flags_getoptIsStd() +{ + test ${__FLAGS_GETOPT_VERS} -eq ${__FLAGS_GETOPT_VERS_STD} +} + +# This is effectively a 'usage()' function. It prints usage information and +# exits the program with ${FLAGS_FALSE} if it is ever found in the command line +# arguments. Note this function can be overridden so other apps can define +# their own --help flag, replacing this one, if they want. +# +# Args: +# none +# Returns: +# integer: success of operation (always returns true) +flags_help() +{ + if [ -n "${FLAGS_HELP:-}" ]; then + echo "${FLAGS_HELP}" >&2 + else + echo "USAGE: ${FLAGS_PARENT:-$0} [flags] args" >&2 + fi + if [ -n "${__flags_longNames}" ]; then + echo 'flags:' >&2 + for flags_name_ in ${__flags_longNames}; do + flags_flagStr_='' + flags_boolStr_='' + + flags_default_=`_flags_getFlagInfo \ + "${flags_name_}" ${__FLAGS_INFO_DEFAULT}` + flags_help_=`_flags_getFlagInfo \ + "${flags_name_}" ${__FLAGS_INFO_HELP}` + flags_short_=`_flags_getFlagInfo \ + "${flags_name_}" ${__FLAGS_INFO_SHORT}` + flags_type_=`_flags_getFlagInfo \ + "${flags_name_}" ${__FLAGS_INFO_TYPE}` + + [ "${flags_short_}" != "${__FLAGS_NULL}" ] \ + && flags_flagStr_="-${flags_short_}" + + if [ ${__FLAGS_GETOPT_VERS} -eq ${__FLAGS_GETOPT_VERS_ENH} ]; then + [ "${flags_short_}" != "${__FLAGS_NULL}" ] \ + && flags_flagStr_="${flags_flagStr_}," + [ ${flags_type_} -eq ${__FLAGS_TYPE_BOOLEAN} ] \ + && flags_boolStr_='[no]' + flags_flagStr_="${flags_flagStr_}--${flags_boolStr_}${flags_name_}:" + fi + + case ${flags_type_} in + ${__FLAGS_TYPE_BOOLEAN}) + if [ ${flags_default_} -eq ${FLAGS_TRUE} ]; then + flags_defaultStr_='true' + else + flags_defaultStr_='false' + fi + ;; + ${__FLAGS_TYPE_FLOAT}|${__FLAGS_TYPE_INTEGER}) + flags_defaultStr_=${flags_default_} ;; + ${__FLAGS_TYPE_STRING}) flags_defaultStr_="'${flags_default_}'" ;; + esac + flags_defaultStr_="(default: ${flags_defaultStr_})" + + flags_helpStr_=" ${flags_flagStr_} ${flags_help_} ${flags_defaultStr_}" + flags_helpStrLen_=`expr "${flags_helpStr_}" : '.*'` + flags_columns_=`_flags_columns` + if [ ${flags_helpStrLen_} -lt ${flags_columns_} ]; then + echo "${flags_helpStr_}" >&2 + else + echo " ${flags_flagStr_} ${flags_help_}" >&2 + # note: the silliness with the x's is purely for ksh93 on Ubuntu 6.06 + # because it doesn't like empty strings when used in this manner. + flags_emptyStr_="`echo \"x${flags_flagStr_}x\" \ + |awk '{printf "%"length($0)-2"s", ""}'`" + flags_helpStr_=" ${flags_emptyStr_} ${flags_defaultStr_}" + flags_helpStrLen_=`expr "${flags_helpStr_}" : '.*'` + if [ ${__FLAGS_GETOPT_VERS} -eq ${__FLAGS_GETOPT_VERS_STD} \ + -o ${flags_helpStrLen_} -lt ${flags_columns_} ]; then + # indented to match help string + echo "${flags_helpStr_}" >&2 + else + # indented four from left to allow for longer defaults as long flag + # names might be used too, making things too long + echo " ${flags_defaultStr_}" >&2 + fi + fi + done + fi + + unset flags_boolStr_ flags_default_ flags_defaultStr_ flags_emptyStr_ \ + flags_flagStr_ flags_help_ flags_helpStr flags_helpStrLen flags_name_ \ + flags_columns_ flags_short_ flags_type_ + return ${FLAGS_TRUE} +} + +# Reset shflags back to an uninitialized state. +# +# Args: +# none +# Returns: +# nothing +flags_reset() +{ + for flags_name_ in ${__flags_longNames}; do + flags_strToEval_="unset FLAGS_${flags_name_}" + for flags_type_ in \ + ${__FLAGS_INFO_DEFAULT} \ + ${__FLAGS_INFO_HELP} \ + ${__FLAGS_INFO_SHORT} \ + ${__FLAGS_INFO_TYPE} + do + flags_strToEval_=\ +"${flags_strToEval_} __flags_${flags_name_}_${flags_type_}" + done + eval ${flags_strToEval_} + done + + # reset internal variables + __flags_boolNames=' ' + __flags_longNames=' ' + __flags_shortNames=' ' + + unset flags_name_ flags_type_ flags_strToEval_ +} diff --git a/scripts/image_signing/lib/sign_android_lib.sh b/scripts/image_signing/lib/sign_android_lib.sh new file mode 100644 index 0000000..4c1d25f --- /dev/null +++ b/scripts/image_signing/lib/sign_android_lib.sh @@ -0,0 +1,143 @@ +#!/bin/bash + +# Copyright 2018 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +. "$(dirname "$0")/common.sh" + +####################################### +# Return name according to the current signing debug key. The name is used to +# select key files. +# Globals: +# None +# Arguments: +# sha1: signature of the APK. +# keyset: "cheets" or "aosp" build? +# Outputs: +# Writes the name of the key to stdout. +# Returns: +# 0 on success, non-zero on error. +####################################### +android_choose_key() { + local sha1="$1" + local keyset="$2" + + if [[ "${keyset}" != "aosp" && "${keyset}" != "cheets" ]]; then + error "Unknown Android build keyset '${keyset}'." + return 1 + fi + + # Fingerprints below are generated by: + # 'cheets' keyset: + # $ keytool -file vendor/google_arc/certs/cheetskeys/$NAME.x509.pem \ + # -printcert | grep SHA1: + # 'aosp' keyset: + # $ keytool -file build/target/product/security/$NAME.x509.pem -printcert \ + # | grep SHA1: + declare -A platform_sha=( + ['cheets']='AA:04:E0:5F:82:9C:7E:D1:B9:F8:FC:99:6C:5A:54:43:83:D9:F5:BC' + ['aosp']='27:19:6E:38:6B:87:5E:76:AD:F7:00:E7:EA:84:E4:C6:EE:E3:3D:FA' + ) + declare -A media_sha=( + ['cheets']='D4:C4:2D:E0:B9:1B:15:72:FA:7D:A7:21:E0:A6:09:94:B4:4C:B5:AE' + ['aosp']='B7:9D:F4:A8:2E:90:B5:7E:A7:65:25:AB:70:37:AB:23:8A:42:F5:D3' + ) + declare -A shared_sha=( + ['cheets']='38:B6:2C:E1:75:98:E3:E1:1C:CC:F6:6B:83:BB:97:0E:2D:40:6C:AE' + ['aosp']='5B:36:8C:FF:2D:A2:68:69:96:BC:95:EA:C1:90:EA:A4:F5:63:0F:E5' + ) + declare -A release_sha=( + ['cheets']='EC:63:36:20:23:B7:CB:66:18:70:D3:39:3C:A9:AE:7E:EF:A9:32:42' + ['aosp']='61:ED:37:7E:85:D3:86:A8:DF:EE:6B:86:4B:D8:5B:0B:FA:A5:AF:81' + ) + declare -A networkstack_sha=( + ['cheets']='7C:AD:D6:52:41:69:E7:A4:47:6F:DA:74:D0:8E:F0:48:3A:6F:00:ED' + ['aosp']='7C:8B:DA:BD:21:F9:53:A1:B1:8C:CB:E7:B9:13:93:D9:FD:F9:48:30' + ) + + case "${sha1}" in + "${platform_sha["${keyset}"]}") + echo "platform" + ;; + "${media_sha["${keyset}"]}") + echo "media" + ;; + "${shared_sha["${keyset}"]}") + echo "shared" + ;; + "${release_sha["${keyset}"]}") + # The release_sha[] fingerprint is from devkey. Translate to releasekey. + echo "releasekey" + ;; + "${networkstack_sha["${keyset}"]}") + echo "networkstack" + ;; + *) + # Not a framework apk. Do not re-sign. + echo "" + ;; + esac + return 0 +} + +####################################### +# Extract 'ro.build.flavor' property from build property file. +# Globals: +# None +# Arguments: +# build_prop_file: path to build property file. +# Outputs: +# Writes the value of the property to stdout. +# Returns: +# 0 on success, non-zero on error. +####################################### +android_get_build_flavor_prop() { + local build_prop_file="$1" + local flavor_prop="" + + if ! flavor_prop=$(grep -a "^ro\.build\.flavor=" "${build_prop_file}"); then + return 1 + fi + flavor_prop=$(echo "${flavor_prop}" | cut -d "=" -f2) + echo "${flavor_prop}" + return 0 +} + +####################################### +# Pick the expected keyset ('cheets', 'aosp') depending on the build flavor. +# Globals: +# None +# Arguments: +# flavor_prop: the value of the build flavor property. +# Outputs: +# Writes the name of the keyset to stdout. +# Returns: +# 0 on success, non-zero on error. +####################################### +android_choose_signing_keyset() { + local flavor_prop="$1" + + # Property ro.build.flavor follows those patterns: + # - cheets builds: + # ro.build.flavor=cheets_${arch}-user(debug) + # - SDK builds: + # ro.build.flavor=sdk_google_cheets_${arch}-user(debug) # For N + # ro.build.flavor=sdk_cheets_${arch}-user(debug) # For P + # - AOSP builds: + # ro.build.flavor=aosp_cheets_${arch}-user(debug) + # "cheets" and "SDK" builds both use the same signing keys, cheetskeys. "AOSP" + # builds use the public AOSP signing keys. + if [[ "${flavor_prop}" == aosp_cheets_* ]]; then + keyset="aosp" + elif [[ "${flavor_prop}" == cheets_* || + "${flavor_prop}" == sdk_cheets_* || + "${flavor_prop}" == sdk_google_cheets_* || + "${flavor_prop}" == bertha_* ]]; then + keyset="cheets" + else + return 1 + fi + echo "${keyset}" + return 0 +} diff --git a/scripts/image_signing/make_dev_firmware.sh b/scripts/image_signing/make_dev_firmware.sh new file mode 100755 index 0000000..0db5638 --- /dev/null +++ b/scripts/image_signing/make_dev_firmware.sh @@ -0,0 +1,465 @@ +#!/bin/sh +# +# Copyright (c) 2012 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# This script can change key (usually developer keys) in a firmware binary +# image or system live firmware (EEPROM), and assign proper HWID, FLAGS as well. + +SCRIPT_BASE="$(dirname "$0")" +. "$SCRIPT_BASE/common_minimal.sh" +load_shflags || exit 1 + +# Constants used by DEFINE_* +VBOOT_BASE='/usr/share/vboot' +DEFAULT_KEYS_FOLDER="$VBOOT_BASE/devkeys" +DEFAULT_BACKUP_FOLDER='/mnt/stateful_partition/backups' + +# DEFINE_string name default_value description flag +DEFINE_string from "" "Path of input BIOS file (empty for system live BIOS)" "f" +DEFINE_string to "" "Path of output BIOS file (empty for system live BIOS)" "t" +DEFINE_string ec_from "" "Path of input EC file (empty for system live EC)" "e" +DEFINE_string ec_to "" "Path of output EC file (empty for system live EC)" "o" +DEFINE_string keys "$DEFAULT_KEYS_FOLDER" "Path to folder of dev keys" "k" +DEFINE_string preamble_flags "" "Override preamble flags value. Known values: + 0: None. (Using RW to boot in normal. aka, two-stop) + 1: VB_FIRMWARE_PREAMBLE_USE_RO_NORMAL (one-stop)" "p" +DEFINE_boolean mod_hwid \ + $FLAGS_TRUE "Modify HWID to indicate this is a modified firmware" "" +DEFINE_boolean mod_gbb_flags \ + $FLAGS_TRUE "Modify GBB flags to enable developer friendly features" "" +DEFINE_boolean change_ec \ + $FLAGS_FALSE "Change the key in the EC binary if EC uses EFS boot" "" +DEFINE_boolean force_backup \ + $FLAGS_TRUE "Create backup even if source is not live" "" +DEFINE_string backup_dir \ + "$DEFAULT_BACKUP_FOLDER" "Path of directory to store firmware backups" "" + +# Parse command line +FLAGS "$@" || exit 1 +eval set -- "$FLAGS_ARGV" + +# Globals +# ---------------------------------------------------------------------------- +set -e + +# the image we are (temporary) working with +IMAGE_BIOS="$(make_temp_file)" +IMAGE_BIOS="$(readlink -f "${IMAGE_BIOS}")" +if [ "${FLAGS_change_ec}" = "${FLAGS_TRUE}" ]; then + IMAGE_EC="$(make_temp_file)" + IMAGE_EC="$(readlink -f "${IMAGE_EC}")" +fi + +# a log file to keep the output results of executed command +EXEC_LOG="$(make_temp_file)" + +# Functions +# ---------------------------------------------------------------------------- + +flashrom_bios() { + if is_debug_mode; then + flashrom -V -p host "$@" + else + flashrom -p host "$@" + fi +} + +flashrom_ec() { + if is_debug_mode; then + flashrom -V -p ec "$@" + else + flashrom -p ec "$@" + fi +} + +# Execute the given command and log its output to the file ${EXEC_LOG}. +# If is_debug_mode, also print the output directly. +execute() { + if is_debug_mode; then + "$@" 2>&1 | tee "${EXEC_LOG}" + else + "$@" >"${EXEC_LOG}" 2>&1 + fi +} + +# Disables write protection status registers +disable_write_protection() { + # No need to change WP status in file mode + if [ -n "$FLAGS_to" ]; then + return $FLAGS_TRUE + fi + + # --wp-disable command may return success even if WP is still enabled, + # so we should use --wp-status to verify the results. + echo "Disabling system software write protection status..." + (flashrom_bios --wp-disable && flashrom_bios --wp-status) 2>&1 | + tee "$EXEC_LOG" | + grep -q '^WP: .* is disabled\.$' +} + +# Reads ${IMAGE_BIOS} from ${FLAGS_from} and ${IMAGE_EC} from ${FLAGS_ec_from} +read_image() { + if [ -z "$FLAGS_from" ]; then + echo "Reading system live BIOS firmware..." + execute flashrom_bios -r "${IMAGE_BIOS}" + else + debug_msg "reading from file: ${FLAGS_from}" + cp -f "${FLAGS_from}" "${IMAGE_BIOS}" + fi + if [ "${FLAGS_change_ec}" = "${FLAGS_TRUE}" ]; then + if [ -z "${FLAGS_ec_from}" ]; then + echo "Reading system live EC firmware..." + execute flashrom_ec -r "${IMAGE_EC}" + else + debug_msg "reading from file: ${FLAGS_ec_from}" + cp -f "${FLAGS_ec_from}" "${IMAGE_EC}" + fi + fi +} + +# Writes ${IMAGE_BIOS} to ${FLAGS_to} and ${IMAGE_EC} to ${FLAGS_ec_to} +write_image() { + if [ -z "${FLAGS_to}" ]; then + echo "Writing system live BIOS firmware..." + # TODO(hungte) we can enable partial write to make this faster + execute flashrom_bios -w "${IMAGE_BIOS}" + else + debug_msg "writing to file: ${FLAGS_to}" + cp -f "${IMAGE_BIOS}" "${FLAGS_to}" + chmod a+r "${FLAGS_to}" + fi + if [ "${FLAGS_change_ec}" = "${FLAGS_TRUE}" ]; then + if [ -z "${FLAGS_ec_to}" ]; then + echo "Writing system live EC firmware..." + # TODO(hungte) we can enable partial write to make this faster + execute flashrom_ec -w "${IMAGE_EC}" + else + debug_msg "writing to file: ${FLAGS_ec_to}" + cp -f "${IMAGE_EC}" "${FLAGS_ec_to}" + chmod a+r "${FLAGS_ec_to}" + fi + fi +} + +# Converts HWID from $1 to proper format with "DEV" extension +echo_dev_hwid() { + local hwid="$1" + local hwid_no_dev="${hwid% DEV}" + + # NOTE: Some DEV firmware image files may put GUID in HWID. + # These are not officially supported and they will see "{GUID} DEV". + + if [ "$hwid" != "$hwid_no_dev" ]; then + hwid="$hwid_no_dev" + fi + local hwid_dev="$hwid DEV" + debug_msg "echo_dev_hwid: [$1] -> [$hwid_dev]" + echo "$hwid_dev" +} + +# Main +# ---------------------------------------------------------------------------- +main() { + # Check parameters + local root_pubkey="${FLAGS_keys}/root_key.vbpubk" + local recovery_pubkey="${FLAGS_keys}/recovery_key.vbpubk" + local firmware_keyblock="${FLAGS_keys}/firmware.keyblock" + local firmware_prvkey="${FLAGS_keys}/firmware_data_key.vbprivk" + local dev_firmware_keyblock="${FLAGS_keys}/dev_firmware.keyblock" + local dev_firmware_prvkey="${FLAGS_keys}/dev_firmware_data_key.vbprivk" + local kernel_sub_pubkey="${FLAGS_keys}/kernel_subkey.vbpubk" + local ec_efs_pubkey="${FLAGS_keys}/key_ec_efs.vbpubk2" + local ec_efs_prvkey="${FLAGS_keys}/key_ec_efs.vbprik2" + local is_from_live=0 + local backup_bios_image='' + local backup_ec_image='' + + debug_msg "Prerequisite check" + ensure_files_exist \ + "${root_pubkey}" \ + "${recovery_pubkey}" \ + "${firmware_keyblock}" \ + "${firmware_prvkey}" \ + "${kernel_sub_pubkey}" \ + "${ec_efs_pubkey}" \ + "${ec_efs_prvkey}" || + exit 1 + + if [ -z "${FLAGS_from}" ]; then + is_from_live=1 + else + ensure_files_exist "${FLAGS_from}" || exit 1 + fi + + if [ -z "${FLAGS_ec_from}" ]; then + is_from_live=1 + else + ensure_files_exist "${FLAGS_ec_from}" || exit 1 + fi + + debug_msg "Checking software write protection status" + disable_write_protection || + if is_debug_mode; then + die "Failed to disable WP. Diagnose Message: $(cat "${EXEC_LOG}")" + else + die "Write protection is still enabled. " \ + "Please verify that hardware write protection is disabled." + fi + + debug_msg "Pulling image" + (read_image && + [ -s "${IMAGE_BIOS}" ] && + [ "${FLAGS_change_ec}" = "${FLAGS_FALSE}" -o -s "${IMAGE_EC}" ]) || + die "Failed to read image. Error message: $(cat "${EXEC_LOG}")" + + + debug_msg "Prepare to backup the file" + if [ -n "${is_from_live}" -o ${FLAGS_force_backup} = ${FLAGS_TRUE} ]; then + backup_bios_image="$(make_temp_file)" + debug_msg "Creating BIOS backup file to ${backup_bios_image}..." + cp -f "${IMAGE_BIOS}" "${backup_bios_image}" + + if [ "${FLAGS_change_ec}" = "${FLAGS_TRUE}" ]; then + backup_ec_image="$(make_temp_file)" + debug_msg "Creating EC backup file to ${backup_ec_image}..." + cp -f "${IMAGE_EC}" "${backup_ec_image}" + fi + fi + + local expanded_firmware_dir="$(make_temp_dir)" + if [ "${FLAGS_change_ec}" = "${FLAGS_TRUE}" ]; then + if is_ec_rw_signed "${IMAGE_EC}"; then + # TODO(waihong): These are duplicated from sign_official_build.sh. We need + # to move them to a single place for share. + debug_msg "Resign EC firmware with new EC EFS key" + local rw_bin="EC_RW.bin" + local rw_hash="EC_RW.hash" + # futility writes byproduct files to CWD, so we cd to temp dir. + local old_cwd=$(pwd) + cd "${expanded_firmware_dir}" + + ${FUTILITY} sign --type rwsig --prikey "${ec_efs_prvkey}" "${IMAGE_EC}" || + die "Failed to sign EC image" + # Above command produces EC_RW.bin. Compute its hash. + openssl dgst -sha256 -binary "${rw_bin}" > "${rw_hash}" + + debug_msg "Store ecrw and its hash to BIOS firmware" + store_file_in_cbfs "${IMAGE_BIOS}" "${rw_bin}" "ecrw" || + die "Failed to store ecrw in BIOS image" + store_file_in_cbfs "${IMAGE_BIOS}" "${rw_hash}" "ecrw.hash" || + die "Failed to store ecrw.hash in BIOS image" + + cd "${old_cwd}" + # Continuous the code below to resign the BIOS image. + else + echo "EC image is not signed. Skip changing its key." + fi + fi + + debug_msg "Detecting developer firmware keyblock" + local use_devfw_keyblock="$FLAGS_FALSE" + (cd "${expanded_firmware_dir}"; dump_fmap -x "${IMAGE_BIOS}" \ + >/dev/null 2>&1) || die "Failed to extract firmware image." + if [ -f "$expanded_firmware_dir/VBLOCK_A" ]; then + local has_dev=$FLAGS_TRUE has_norm=$FLAGS_TRUE + # In output of vbutil_keyblock, "!DEV" means "bootable on normal mode" and + # "DEV" means "bootable on developer mode". Here we try to match the pattern + # in output of vbutil_block, and disable the flags (has_dev, has_norm) if + # the pattern was not found. + vbutil_keyblock --unpack "$expanded_firmware_dir/VBLOCK_A" | + grep -qw '!DEV' || has_norm=$FLAGS_FALSE + vbutil_keyblock --unpack "$expanded_firmware_dir/VBLOCK_A" | + grep -qw '[^!]DEV' || has_dev=$FLAGS_FALSE + if [ "$has_norm" = "$FLAGS_FALSE" -a "$has_dev" = "$FLAGS_TRUE" ]; then + use_devfw_keyblock=$FLAGS_TRUE + fi + fi + + if [ "$use_devfw_keyblock" = "$FLAGS_TRUE" ]; then + echo "Using keyblocks (developer, normal)..." + else + echo "Using keyblocks (normal, normal)..." + dev_firmware_prvkey="$firmware_prvkey" + dev_firmware_keyblock="$firmware_keyblock" + fi + + debug_msg "Extract firmware version and data key version" + ${FUTILITY} gbb -g --rootkey="${expanded_firmware_dir}/rootkey" \ + "${IMAGE_BIOS}" >/dev/null 2>&1 + + local data_key_version firmware_version + # When we are going to flash directly from or to system, the versions stored + # in TPM can be found by crossystem; otherwise we'll need to guess from source + # firmware (FLAGS_from). + if [ -z "$FLAGS_to" -o -z "$FLAGS_from" ]; then + debug_msg "Reading TPM version from crossystem tpm_fwver." + data_key_version="$(( $(crossystem tpm_fwver) >> 16 ))" + firmware_version="$(( $(crossystem tpm_fwver) & 0xFFFF ))" + else + # TODO(hungte) On Vboot2, A/B slot may contain different firmware so we may + # need to check both and decide from largest number. + debug_msg "Guessing TPM version from original firmware." + local fw_info="$(vbutil_firmware \ + --verify "${expanded_firmware_dir}/VBLOCK_A" \ + --signpubkey "${expanded_firmware_dir}/rootkey" \ + --fv "${expanded_firmware_dir}/FW_MAIN_A" 2>/dev/null)" || + die "Failed to verify firmware slot A." + data_key_version="$( + echo "$fw_info" | sed -n '/^ *Data key version:/s/.*:[ \t]*//p')" + firmware_version="$( + echo "$fw_info" | sed -n '/^ *Firmware version:/s/.*:[ \t]*//p')" + fi + + local new_data_key_version="$( + vbutil_keyblock --unpack "$firmware_keyblock" | + sed -n '/^ *Data key version:/s/.*:[ \t]*//p')" + + # TODO(hungte) Change keyblock by data_key_version. + if [ "$data_key_version" -gt "$new_data_key_version" ]; then + echo "$(tput bold)$(tput setaf 1) + Warning: firmware data key version <$new_data_key_version> in your new keys + [$FLAGS_keys] is smaller than original firmware <$data_key_version> and + will boot into only recovery mode due to TPM anti-rollback detection. + + After reboot with dev recovery key, you will need to reset TPM by booting a + test or dev image in recovery mode (NOT Ctrl-U), switch to VT2 and run + command ; or use a factory install shim image + (build_image factory_install). + $(tput sgr 0)" >&2 + fi + + echo "Signing with Data Key Version: $data_key_version, " \ + "Firmware Version: $firmware_version" + + echo "Preparing new firmware image..." + + debug_msg "Resign the firmware code (A/B) with new keys" + # Note resign_firmwarefd.sh needs the original rootkey to determine firmware + # body size, so we must resign image before changing GBB rootkey. + + local unsigned_image="$(make_temp_file)" + local optional_opts="" + if [ -n "$FLAGS_preamble_flags" ]; then + debug_msg "Setting FLAGS=$FLAGS_preamble_flags" + optional_opts="$FLAGS_preamble_flags" + fi + cp -f "${IMAGE_BIOS}" "$unsigned_image" + execute "$SCRIPT_BASE/resign_firmwarefd.sh" \ + "${unsigned_image}" \ + "${IMAGE_BIOS}" \ + "${firmware_prvkey}" \ + "${firmware_keyblock}" \ + "${dev_firmware_prvkey}" \ + "${dev_firmware_keyblock}" \ + "${kernel_sub_pubkey}" \ + "${firmware_version}" \ + ${optional_opts} || + die "Failed to re-sign firmware. (message: $(cat "${EXEC_LOG}"))" + + debug_msg "Extract current HWID" + local old_hwid + old_hwid="$(${FUTILITY} gbb --get --hwid "${IMAGE_BIOS}" 2>"${EXEC_LOG}" | + sed -rne 's/^hardware_id: (.*)$/\1/p')" + + debug_msg "Decide new HWID" + [ -z "$old_hwid" ] && + die "Cannot find current HWID. (message: $(cat "${EXEC_LOG}"))" + local new_hwid="$old_hwid" + if [ "$FLAGS_mod_hwid" = "$FLAGS_TRUE" ]; then + new_hwid="$(echo_dev_hwid "$old_hwid")" + fi + + local old_gbb_flags + old_gbb_flags="$(${FUTILITY} gbb --get --flags "${IMAGE_BIOS}" \ + 2>"${EXEC_LOG}" | sed -rne 's/^flags: (.*)$/\1/p')" + debug_msg "Decide new GBB flags from: $old_gbb_flags" + [ -z "$old_gbb_flags" ] && + die "Cannot find GBB flags. (message: $(cat "${EXEC_LOG}"))" + # 0x30: VB2_GBB_FLAG_FORCE_DEV_BOOT_USB | + # VB2_GBB_FLAG_DISABLE_FW_ROLLBACK_CHECK + local new_gbb_flags="$((old_gbb_flags | 0x30))" + + debug_msg "Replace GBB parts (futility gbb allows changing on-the-fly)" + ${FUTILITY} gbb --set \ + --hwid="${new_hwid}" \ + --rootkey="${root_pubkey}" \ + --recoverykey="${recovery_pubkey}" \ + "${IMAGE_BIOS}" >"${EXEC_LOG}" 2>&1 || + die "Failed to change GBB Data. (message: $(cat "${EXEC_LOG}"))" + + # Old firmware does not support GBB flags, so let's make it an exception. + if [ "${FLAGS_mod_gbb_flags}" = "${FLAGS_TRUE}" ]; then + debug_msg "Changing GBB flags from ${old_gbb_flags} to ${new_gbb_flags}" + ${FUTILITY} gbb --set \ + --flags="${new_gbb_flags}" \ + "${IMAGE_BIOS}" >"${EXEC_LOG}" 2>&1 || + echo "Warning: Can't set GBB flags ${old_gbb_flags} -> ${new_gbb_flags}." + fi + + # TODO(hungte) compare if the image really needs to be changed. + + debug_msg "Check if we need to make backup file(s)" + if [ -n "${backup_bios_image}" ]; then + local backup_hwid_name="$(echo "${old_hwid}" | sed 's/ /_/g')" + local backup_date_time="$(date +'%Y%m%d_%H%M%S')" + local backup_bios_name="bios_${backup_hwid_name}_${backup_date_time}.fd" + local backup_bios_path="${FLAGS_backup_dir}/${backup_bios_name}" + local backup_ec_name="ec_${backup_hwid_name}_${backup_date_time}.fd" + local backup_ec_path='' + if mkdir -p "${FLAGS_backup_dir}" && + cp -f "${backup_bios_image}" "${backup_bios_path}"; then + if [ -n "${backup_ec_image}" ]; then + backup_ec_path="${FLAGS_backup_dir}/${backup_ec_name}" + cp -f "${backup_ec_image}" "${backup_ec_path}" + fi + elif cp -f "${backup_bios_image}" "/tmp/${backup_bios_name}"; then + backup_bios_path="/tmp/${backup_bios_name}" + if [ -n "${backup_ec_image}" ]; then + cp -f "${backup_ec_image}" "/tmp/${backup_ec_name}" + backup_ec_path="/tmp/${backup_ec_name}" + fi + else + backup_bios_path='' + fi + if [ -n "${backup_bios_path}" ]; then + # TODO(hungte) maybe we can wrap the flashrom by 'make_dev_firmware.sh -r' + # so that the only command to remember would be make_dev_firmware.sh. + echo " + Backup of current firmware image is stored in: + ${backup_bios_path} + ${backup_ec_path} + Please copy the backup file to a safe place ASAP. + + To stop using devkeys and restore original BIOS, execute command: + flashrom -p host -w [PATH_TO_BACKUP_BIOS] + Ex: flashrom -p host -w ${backup_bios_path}" + if [ -n "${backup_ec_image}" ]; then + echo " + To stop using devkeys and restore original EC, execute command: + flashrom -p ec -w [PATH_TO_BACKUP_EC] + Ex: flashrom -p ec -w ${backup_ec_path}" + fi + echo "" + else + echo "WARNING: Can't create file in ${FLAGS_backup_dir}. Ignore backups." + fi + fi + + # TODO(hungte) use vbutil_firmware to check if the new firmware is valid. + # Or, do verification in resign_firmwarefd.sh and trust it. + + debug_msg "Write the image" + write_image || + die "Failed to write image. Error message: $(cat "${EXEC_LOG}")" + + debug_msg "Complete." + if [ -z "$FLAGS_to" ]; then + echo "Successfully changed firmware to Developer Keys. New HWID: $new_hwid" + else + echo "Firmware '$FLAGS_to' now uses Developer Keys. New HWID: $new_hwid" + fi +} + +main diff --git a/scripts/image_signing/make_dev_ssd.sh b/scripts/image_signing/make_dev_ssd.sh new file mode 100755 index 0000000..992d89c --- /dev/null +++ b/scripts/image_signing/make_dev_ssd.sh @@ -0,0 +1,565 @@ +#!/bin/sh +# +# Copyright (c) 2012 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# This script can change key (usually developer keys) and kernel config +# of kernels on an disk image (usually for SSD but also works for USB). + +SCRIPT_BASE="$(dirname "$0")" +. "$SCRIPT_BASE/common_minimal.sh" +load_shflags || exit 1 + +# Constants used by DEFINE_* +VBOOT_BASE='/usr/share/vboot' +DEFAULT_KEYS_FOLDER="$VBOOT_BASE/devkeys" +DEFAULT_PARTITIONS='2 4' + +# Only store backup in stateful partition if available. +if [ -d /mnt/stateful_partition ]; then + DEFAULT_BACKUP_FOLDER="/mnt/stateful_partition" +else + DEFAULT_BACKUP_FOLDER="$(pwd)" +fi +DEFAULT_BACKUP_FOLDER="${DEFAULT_BACKUP_FOLDER}/cros_sign_backups" + +# TODO(hungte) The default image selection is no longer a SSD, so the script +# works more like "make_dev_image". We may change the file name in future. +ROOTDEV="$(rootdev -s 2>/dev/null)" +ROOTDEV_PARTITION="$(echo $ROOTDEV | sed -n 's/.*[^0-9]\([0-9][0-9]*\)$/\1/p')" +ROOTDEV_DISK="$(rootdev -s -d 2>/dev/null)" +ROOTDEV_KERNEL="$((ROOTDEV_PARTITION - 1))" + +# DEFINE_string name default_value description flag +DEFINE_string image "$ROOTDEV_DISK" "Path to device or image file" "i" +DEFINE_string keys "$DEFAULT_KEYS_FOLDER" "Path to folder of dev keys" "k" +DEFINE_boolean remove_rootfs_verification \ + "${FLAGS_FALSE}" "Modify kernel boot config to disable rootfs verification" "" +DEFINE_boolean enable_earlycon "${FLAGS_FALSE}" \ + "Enable earlycon from stdout-path (ARM/ARM64) or SPCR (x86)." "" +DEFINE_boolean disable_earlycon "${FLAGS_FALSE}" \ + "Disable earlycon." "" +DEFINE_boolean enable_console "${FLAGS_FALSE}" \ + "Enable serial console." "" +DEFINE_boolean disable_console "${FLAGS_FALSE}" \ + "Disable serial console." "" +DEFINE_string backup_dir \ + "$DEFAULT_BACKUP_FOLDER" "Path of directory to store kernel backups" "" +DEFINE_string save_config "" \ + "Base filename to store kernel configs to, instead of resigning." "" +DEFINE_string set_config "" \ + "Base filename to load kernel configs from" "" +DEFINE_boolean edit_config "${FLAGS_FALSE}" \ + "Edit kernel config in-place." "" +DEFINE_string partitions "" \ + "List of partitions to examine (default: $DEFAULT_PARTITIONS)" "" +DEFINE_boolean recovery_key "$FLAGS_FALSE" \ + "Use recovery key to sign image (to boot from USB)" "" +DEFINE_boolean force "$FLAGS_FALSE" \ + "Skip validity checks and make the change" "f" +DEFINE_boolean default_rw_root "${FLAGS_TRUE}" \ + "When --remove_rootfs_verification is set, change root mount option to RW." "" + +# Parse command line +FLAGS "$@" || exit 1 +ORIGINAL_CMD="$0" +ORIGINAL_PARAMS="$@" +eval set -- "$FLAGS_ARGV" +ORIGINAL_PARTITIONS="$FLAGS_partitions" +: ${FLAGS_partitions:=$DEFAULT_PARTITIONS} + +# Globals +# ---------------------------------------------------------------------------- +set -e + +# a log file to keep the output results of executed command +EXEC_LOG="$(make_temp_file)" + +# Functions +# ---------------------------------------------------------------------------- + +# Removes rootfs verification from kernel boot parameter +# And strip out bootcache args if it exists +remove_rootfs_verification() { + local new_root="PARTUUID=%U/PARTNROFF=1" + # the first line in sed is to strip out bootcache details + local rw_root_opt="s| ro | rw |" + if [ "${FLAGS_default_rw_root}" = "${FLAGS_FALSE}" ]; then + rw_root_opt="s| rw | ro |" + fi + + echo "$*" | sed ' + s| dm=\"2 [^"]*bootcache[^"]* vroot | dm=\"1 vroot | + s| root=/dev/dm-[0-9] | root='"$new_root"' | + s| dm_verity.dev_wait=1 | dm_verity.dev_wait=0 | + s| payload=PARTUUID=%U/PARTNROFF=1 | payload=ROOT_DEV | + s| hashtree=PARTUUID=%U/PARTNROFF=1 | hashtree=HASH_DEV | + '"${rw_root_opt}" +} + +remove_legacy_boot_rootfs_verification() { + # See src/scripts/create_legacy_bootloader_templates + local image="$1" + local mount_point="$(make_temp_dir)" + local config_file + debug_msg "Removing rootfs verification for legacy boot configuration." + mount_image_partition "$image" 12 "$mount_point" || return $FLAGS_FALSE + config_file="$mount_point/efi/boot/grub.cfg" + [ ! -f "$config_file" ] || + sudo sed -i 's/^ *set default=2 *$/set default=0/g' "$config_file" + config_file="$mount_point/syslinux/default.cfg" + [ ! -f "$config_file" ] || + sudo sed -i 's/-vusb/-usb/g; s/-vhd/-hd/g' "$config_file" + sudo umount "$mount_point" +} + +# Enable/Disable earlycon or serial console +insert_parameter() { + local cmdline="$1" + local param="$2" + + if [ -n "${cmdline##*${param}*}" ]; then + cmdline="${param} ${cmdline}" + fi + + echo "${cmdline}" +} + +remove_parameter() { + local cmdline="$1" + local param="$2" + + cmdline=$(echo "${cmdline}" | sed ' + s/'"${param} "'//g') + + echo "${cmdline}" +} + +# Wrapped version of dd +mydd() { + # oflag=sync is safer, but since we need bs=512, syncing every block would be + # very slow. + dd "$@" >"$EXEC_LOG" 2>&1 || + die "Failed in [dd $*], Message: $(cat "${EXEC_LOG}")" +} + +# Prints a more friendly name from kernel index number +cros_kernel_name() { + case $1 in + 2) + echo "Kernel A" + ;; + 4) + echo "Kernel B" + ;; + 6) + echo "Kernel C" + ;; + *) + echo "Partition $1" + esac +} + +find_valid_kernel_partitions() { + local part_id + local valid_partitions="" + for part_id in $*; do + local name="$(cros_kernel_name $part_id)" + local kernel_part="$(make_partition_dev "$FLAGS_image" "$part_id")" + if [ -z "$(dump_kernel_config "$kernel_part" 2>"$EXEC_LOG")" ]; then + info "${name}: no kernel boot information, ignored." >&2 + else + [ -z "$valid_partitions" ] && + valid_partitions="$part_id" || + valid_partitions="$valid_partitions $part_id" + continue + fi + done + debug_msg "find_valid_kernel_partitions: [$*] -> [$valid_partitions]" + echo "$valid_partitions" +} + +# Resigns a kernel on SSD or image. +resign_ssd_kernel() { + local ssd_device="$1" + local bs="$(blocksize "${ssd_device}")" + + # reasonable size for current kernel partition + local min_kernel_size=$((8000 * 1024 / bs)) + local resigned_kernels=0 + + for kernel_index in $FLAGS_partitions; do + local old_blob="$(make_temp_file)" + local new_blob="$(make_temp_file)" + local name="$(cros_kernel_name $kernel_index)" + local rootfs_index="$(($kernel_index + 1))" + + debug_msg "Probing $name information" + local offset size + offset="$(partoffset "$ssd_device" "$kernel_index")" || + die "Failed to get partition ${kernel_index} offset from ${ssd_device}" + size="$(partsize "$ssd_device" "$kernel_index")" || + die "Failed to get partition ${kernel_index} size from ${ssd_device}" + if [ ! $size -gt $min_kernel_size ]; then + info "${name} seems too small (${size}), ignored." + continue + fi + + debug_msg "Reading $name from partition $kernel_index" + mydd if="$ssd_device" of="$old_blob" bs=$bs skip=$offset count=$size + + debug_msg "Checking if $name is valid" + local kernel_config + if ! kernel_config="$(dump_kernel_config "$old_blob" 2>"$EXEC_LOG")"; then + debug_msg "dump_kernel_config error message: $(cat "$EXEC_LOG")" + info "${name}: no kernel boot information, ignored." + continue + fi + + if [ -n "${FLAGS_save_config}" ]; then + # Save current kernel config + local old_config_file + old_config_file="${FLAGS_save_config}.$kernel_index" + info "Saving ${name} config to ${old_config_file}" + echo "$kernel_config" > "$old_config_file" + # Just save; don't resign + continue + fi + + if [ -n "${FLAGS_set_config}" ]; then + # Set new kernel config from file + local new_config_file + new_config_file="${FLAGS_set_config}.$kernel_index" + kernel_config="$(cat "$new_config_file")" || + die "Failed to read new kernel config from ${new_config_file}" + debug_msg "New kernel config: $kernel_config)" + info "${name}: Replaced config from ${new_config_file}" + fi + + if [ "${FLAGS_edit_config}" = ${FLAGS_TRUE} ]; then + debug_msg "Editing kernel config file." + local new_config_file="$(make_temp_file)" + echo "${kernel_config}" >"${new_config_file}" + local old_md5sum="$(md5sum "${new_config_file}")" + local editor="${VISUAL:-${EDITOR:-vi}}" + info "${name}: Editing kernel config:" + # On ChromiumOS, some builds may come with broken EDITOR that refers to + # nano so we want to check again if the editor really exists. + if type "${editor}" >/dev/null 2>&1; then + "${editor}" "${new_config_file}" + else + # This script runs under dash but we want readline in bash to support + # editing in in console. + bash -c "read -e -i '${kernel_config}' && + echo \"\${REPLY}\" >${new_config_file}" || + die "Failed to run editor. Please specify editor name by VISUAL." + fi + kernel_config="$(cat "${new_config_file}")" + if [ "$(md5sum "${new_config_file}")" = "${old_md5sum}" ]; then + info "${name}: Config not changed." + else + debug_msg "New kernel config: ${kernel_config})" + info "${name}: Config updated" + fi + fi + + if [ ${FLAGS_remove_rootfs_verification} = $FLAGS_FALSE ]; then + debug_msg "Bypassing rootfs verification check" + else + debug_msg "Changing boot parameter to remove rootfs verification" + kernel_config="$(remove_rootfs_verification "$kernel_config")" + debug_msg "New kernel config: $kernel_config" + info "${name}: Disabled rootfs verification." + remove_legacy_boot_rootfs_verification "$ssd_device" + fi + + if [ "${FLAGS_enable_earlycon}" = "${FLAGS_TRUE}" ]; then + debug_msg "Enabling earlycon" + kernel_config="$(insert_parameter "${kernel_config}" "earlycon")" + debug_msg "New kernel config: ${kernel_config}" + elif [ "${FLAGS_disable_earlycon}" = "${FLAGS_TRUE}" ]; then + debug_msg "Disabling earlycon" + kernel_config="$(remove_parameter "${kernel_config}" "earlycon")" + debug_msg "New kernel config: ${kernel_config}" + fi + + if [ "${FLAGS_enable_console}" = "${FLAGS_TRUE}" ]; then + debug_msg "Enabling serial console" + kernel_config="$(remove_parameter "${kernel_config}" "console=")" + debug_msg "New kernel config: ${kernel_config}" + elif [ "${FLAGS_disable_console}" = "${FLAGS_TRUE}" ]; then + debug_msg "Disabling serial console" + kernel_config="$(insert_parameter "${kernel_config}" "console=")" + debug_msg "New kernel config: ${kernel_config}" + fi + + local new_kernel_config_file="$(make_temp_file)" + echo -n "$kernel_config" >"$new_kernel_config_file" + + debug_msg "Re-signing $name from $old_blob to $new_blob" + debug_msg "Using key: $KERNEL_DATAKEY" + vbutil_kernel \ + --repack "$new_blob" \ + --keyblock "$KERNEL_KEYBLOCK" \ + --config "$new_kernel_config_file" \ + --signprivate "$KERNEL_DATAKEY" \ + --oldblob "$old_blob" >"$EXEC_LOG" 2>&1 || + die "Failed to resign ${name}. Message: $(cat "${EXEC_LOG}")" + + debug_msg "Creating new kernel image (vboot+code+config)" + local new_kern="$(make_temp_file)" + cp "$old_blob" "$new_kern" + mydd if="$new_blob" of="$new_kern" conv=notrunc + + if is_debug_mode; then + debug_msg "for debug purposes, check *.dbgbin" + cp "$old_blob" old_blob.dbgbin + cp "$new_blob" new_blob.dbgbin + cp "$new_kern" new_kern.dbgbin + fi + + debug_msg "Verifying new kernel and keys" + vbutil_kernel \ + --verify "$new_kern" \ + --signpubkey "$KERNEL_PUBKEY" --verbose >"$EXEC_LOG" 2>&1 || + die "Failed to verify new ${name}. Message: $(cat "${EXEC_LOG}")" + + debug_msg "Backup old kernel blob" + local backup_date_time="$(date +'%Y%m%d_%H%M%S')" + local backup_name="$(echo "$name" | sed 's/ /_/g; s/^K/k/')" + local backup_file_name="${backup_name}_${backup_date_time}.bin" + local backup_file_path="$FLAGS_backup_dir/$backup_file_name" + if mkdir -p "$FLAGS_backup_dir" && + cp -f "$old_blob" "$backup_file_path"; then + info "Backup of ${name} is stored in: ${backup_file_path}" + else + warn "Cannot create file in ${FLAGS_backup_dir} ... Ignore backups." + fi + + debug_msg "Writing $name to partition $kernel_index" + mydd \ + if="$new_kern" \ + of="$ssd_device" \ + seek=$offset \ + bs=$bs \ + count=$size \ + conv=notrunc + resigned_kernels=$(($resigned_kernels + 1)) + + debug_msg "Make the root file system writable if needed." + # TODO(hungte) for safety concern, a more robust way would be to: + # (1) change kernel config to ro + # (2) check if we can enable rw mount + # (3) change kernel config to rw + if [ ${FLAGS_remove_rootfs_verification} = $FLAGS_TRUE ]; then + local root_offset_sector=$(partoffset "$ssd_device" $rootfs_index) + local root_offset_bytes=$((root_offset_sector * bs)) + if ! is_ext2 "$ssd_device" "$root_offset_bytes"; then + debug_msg "Non-ext2 partition: $ssd_device$rootfs_index, skip." + elif ! rw_mount_disabled "$ssd_device" "$root_offset_bytes"; then + debug_msg "Root file system is writable. No need to modify." + else + # disable the RO ext2 hack + debug_msg "Disabling rootfs ext2 RO bit hack" + enable_rw_mount "$ssd_device" "$root_offset_bytes" >"$EXEC_LOG" 2>&1 || + die "Failed turning off rootfs RO bit. OS may be corrupted. " \ + "Message: $(cat "${EXEC_LOG}")" + fi + fi + + # Sometimes doing "dump_kernel_config" or other I/O now (or after return to + # shell) will get the data before modification. Not a problem now, but for + # safety, let's try to sync more. + sync; sync; sync + + info "${name}: Re-signed with developer keys successfully." + done + + # If we saved the kernel config, exit now so we don't print an error + if [ -n "${FLAGS_save_config}" ]; then + info "(Kernels have not been resigned.)" + exit 0 + fi + + return $resigned_kernels +} + +validity_check_crossystem_flags() { + debug_msg "crossystem validity check" + if [ -n "${FLAGS_save_config}" ]; then + debug_msg "not resigning kernel." + return + fi + + if [ "$(crossystem dev_boot_signed_only)" = "0" ]; then + debug_msg "dev_boot_signed_only not set - safe." + return + fi + + echo " + ERROR: YOUR FIRMWARE WILL ONLY BOOT SIGNED IMAGES. + + Modifying the kernel or root filesystem will result in an unusable system. If + you really want to make this change, allow the firmware to boot self-signed + images by running: + + sudo crossystem dev_boot_signed_only=0 + + before re-executing this command. + " + return $FLAGS_FALSE +} + +validity_check_live_partitions() { + debug_msg "Partition validity check" + if [ "$FLAGS_partitions" = "$ROOTDEV_KERNEL" ]; then + debug_msg "only for current active partition - safe." + return + fi + if [ "$ORIGINAL_PARTITIONS" != "" ]; then + debug_msg "user has assigned partitions - provide more info." + info "Making change to ${FLAGS_partitions} on ${FLAGS_image}." + return + fi + echo " + ERROR: YOU ARE TRYING TO MODIFY THE LIVE SYSTEM IMAGE $FLAGS_image. + + The system may become unusable after that change, especially when you have + some auto updates in progress. To make it safer, we suggest you to only + change the partition you have booted with. To do that, re-execute this command + as: + + sudo $ORIGINAL_CMD $ORIGINAL_PARAMS --partitions $ROOTDEV_KERNEL + + If you are sure to modify other partition, please invoke the command again and + explicitly assign only one target partition for each time (--partitions N ) + " + return $FLAGS_FALSE +} + +validity_check_live_firmware() { + debug_msg "Firmware compatibility validity check" + if [ "$(crossystem mainfw_type)" = "developer" ]; then + debug_msg "developer type firmware in active." + return + fi + debug_msg "Loading firmware to check root key..." + local bios_image="$(make_temp_file)" + local rootkey_file="$(make_temp_file)" + info "checking system firmware..." + sudo flashrom -p host -i GBB -r "$bios_image" >/dev/null 2>&1 + futility gbb -g --rootkey="$rootkey_file" "$bios_image" >/dev/null 2>&1 + if [ ! -s "$rootkey_file" ]; then + debug_msg "failed to read root key from system firmware..." + else + # The magic 130 is counted by "od dev-rootkey" for the lines until the body + # of key is reached. Trailing bytes (0x00 or 0xFF - both may appear, and + # that's why we need to skip them) are started at line 131. + # TODO(hungte) compare with rootkey in $VBOOT_BASE directly. + local rootkey_hash="$(od "$rootkey_file" | + head -130 | md5sum | + sed 's/ .*$//' )" + if [ "$rootkey_hash" = "a13642246ef93daaf75bd791446fec9b" ]; then + debug_msg "detected DEV root key in firmware." + return + else + debug_msg "non-devkey hash: $rootkey_hash" + fi + fi + + echo " + ERROR: YOU ARE NOT USING DEVELOPER FIRMWARE, AND RUNNING THIS COMMAND MAY + THROW YOUR CHROMEOS DEVICE INTO UN-BOOTABLE STATE. + + You need to either install developer firmware, or change system root key. + + - To install developer firmware: type command + sudo chromeos-firmwareupdate --mode=todev + + - To change system rootkey: disable firmware write protection (a hardware + switch) and then type command: + sudo $SCRIPT_BASE/make_dev_firmware.sh + + If you are sure that you want to make such image without developer + firmware or you've already changed system root keys, please run this + command again with --force paramemeter: + + sudo $ORIGINAL_CMD --force $ORIGINAL_PARAMS + " + return $FLAGS_FALSE +} + +# Main +# ---------------------------------------------------------------------------- +main() { + local num_signed=0 + local num_given=$(echo "$FLAGS_partitions" | wc -w) + # Check parameters + if [ "$FLAGS_recovery_key" = "$FLAGS_TRUE" ]; then + KERNEL_KEYBLOCK="$FLAGS_keys/recovery_kernel.keyblock" + KERNEL_DATAKEY="$FLAGS_keys/recovery_kernel_data_key.vbprivk" + KERNEL_PUBKEY="$FLAGS_keys/recovery_key.vbpubk" + else + KERNEL_KEYBLOCK="$FLAGS_keys/kernel.keyblock" + KERNEL_DATAKEY="$FLAGS_keys/kernel_data_key.vbprivk" + KERNEL_PUBKEY="$FLAGS_keys/kernel_subkey.vbpubk" + fi + + debug_msg "Prerequisite check" + ensure_files_exist \ + "$KERNEL_KEYBLOCK" \ + "$KERNEL_DATAKEY" \ + "$KERNEL_PUBKEY" \ + "$FLAGS_image" || + exit 1 + + # checks for running on a live system image. + if [ "$FLAGS_image" = "$ROOTDEV_DISK" ]; then + debug_msg "check valid kernel partitions for live system" + local valid_partitions="$(find_valid_kernel_partitions $FLAGS_partitions)" + [ -n "$valid_partitions" ] || + die "No valid kernel partitions on ${FLAGS_image} (${FLAGS_partitions})." + FLAGS_partitions="$valid_partitions" + + # Validity checks + if [ "$FLAGS_force" = "$FLAGS_TRUE" ]; then + echo " + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! INFO: ALL VALIDITY CHECKS WERE BYPASSED. YOU ARE ON YOUR OWN. ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + " >&2 + local i + for i in $(seq 5 -1 1); do + echo -n "\rStart in $i second(s) (^C to abort)... " >&2 + sleep 1 + done + echo "" + elif ! validity_check_live_firmware || + ! validity_check_live_partitions || + ! validity_check_crossystem_flags; then + die "IMAGE ${FLAGS_image} IS NOT MODIFIED." + fi + fi + + resign_ssd_kernel "$FLAGS_image" || num_signed=$? + + debug_msg "Complete." + if [ $num_signed -gt 0 -a $num_signed -le $num_given ]; then + # signed something at least + info "Successfully re-signed ${num_signed} of ${num_given} kernel(s)" \ + " on device ${FLAGS_image}." + info "Please remember to reboot before updating the kernel on this device." + else + die "Failed re-signing kernels." + fi +} + +# People using this to process images may forget to add "-i", +# so adding parameter check is safer. +if [ "$#" -gt 0 ]; then + flags_help + die "Unknown parameters: $*" +fi + +main diff --git a/scripts/image_signing/remove_test_label.sh b/scripts/image_signing/remove_test_label.sh new file mode 100755 index 0000000..18a7978 --- /dev/null +++ b/scripts/image_signing/remove_test_label.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Remove the test label from lsb-release to prepare an image for +# signing using the official keys. + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +set -e +image=$1 + +loopdev=$(loopback_partscan "${image}") +rootfs=$(make_temp_dir) +mount_loop_image_partition "${loopdev}" 3 "${rootfs}" +sed -i 's/test//' "${rootfs}/etc/lsb-release" +restore_lsb_selinux "${rootfs}/etc/lsb-release" diff --git a/scripts/image_signing/resign_firmwarefd.sh b/scripts/image_signing/resign_firmwarefd.sh new file mode 100755 index 0000000..d4cb5b8 --- /dev/null +++ b/scripts/image_signing/resign_firmwarefd.sh @@ -0,0 +1,58 @@ +#!/bin/sh + +# Copyright (c) 2014 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Abort on error +set -e + +# This script is obsolete. The required functionality is now provided by the +# compiled futility executable, so all this does is invoke that. This wrapper +# should go away Real Soon Now. + + +# Which futility to run? +[ -z "$FUTILITY" ] && FUTILITY=futility + +# required +SRC_FD=$1 +DST_FD=$2 +FIRMWARE_DATAKEY=$3 +FIRMWARE_KEYBLOCK=$4 +DEV_FIRMWARE_DATAKEY=$5 +DEV_FIRMWARE_KEYBLOCK=$6 +KERNEL_SUBKEY=$7 +# optional +VERSION=$8 +PREAMBLE_FLAG=$9 +LOEM_OUTPUT_DIR=${10} +LOEMID=${11} + +if [ ! -e $DEV_FIRMWARE_KEYBLOCK ] || [ ! -e $DEV_FIRMWARE_DATAKEY ] ; then + echo "No dev firmware keyblock/datakey found. Reusing normal keys." + DEV_FIRMWARE_KEYBLOCK="$FIRMWARE_KEYBLOCK" + DEV_FIRMWARE_DATAKEY="$FIRMWARE_DATAKEY" +fi + +# pass optional args +[ -n "$VERSION" ] && VERSION="--version $VERSION" +[ -n "$PREAMBLE_FLAG" ] && PREAMBLE_FLAG="--flags $PREAMBLE_FLAG" +[ -n "$LOEM_OUTPUT_DIR" ] && LOEM_OUTPUT_DIR="--loemdir $LOEM_OUTPUT_DIR" +[ -n "$LOEMID" ] && LOEMID="--loemid $LOEMID" + +exec ${FUTILITY} sign \ + --signprivate $FIRMWARE_DATAKEY \ + --keyblock $FIRMWARE_KEYBLOCK \ + --devsign $DEV_FIRMWARE_DATAKEY \ + --devkeyblock $DEV_FIRMWARE_KEYBLOCK \ + --kernelkey $KERNEL_SUBKEY \ + $VERSION \ + $PREAMBLE_FLAG \ + $LOEM_OUTPUT_DIR \ + $LOEMID \ + $SRC_FD \ + $DST_FD + +echo UNABLE TO EXEC FUTILITY 1>&2 +exit 1 diff --git a/scripts/image_signing/resign_kernel_partition.sh b/scripts/image_signing/resign_kernel_partition.sh new file mode 100755 index 0000000..fd7cfd3 --- /dev/null +++ b/scripts/image_signing/resign_kernel_partition.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Script that just takes in a kernel partition and outputs a new vblock +# signed with the specific keys. For use on signing servers. + +# vbutil_kernel must be in the system path. + +SCRIPT_DIR=$(dirname $0) + +# Abort on error +set -e + +# Check arguments +if [ $# -lt 4 ] || [ $# -gt 5 ]; then + echo "usage: $0 src_kpart dst_vblock kernel_datakey kernel_keyblock [version]" + exit 1 +fi + +# Make sure the tools we need are available. +type -P vbutil_kernel &>/dev/null || \ + ( echo "vbutil_kernel tool not found."; exit 1; ) + +SRC_KPART=$1 +DST_VBLOCK=$2 +KERNEL_DATAKEY=$3 +KERNEL_KEYBLOCK=$4 +VERSION=$5 + +if [ -z $VERSION ]; then + VERSION=1 +fi +echo "Using kernel version: $VERSION" + +vbutil_kernel --repack "${DST_VBLOCK}" \ + --vblockonly \ + --keyblock "${KERNEL_KEYBLOCK}" \ + --signprivate "${KERNEL_DATAKEY}" \ + --version "${VERSION}" \ + --oldblob "${SRC_KPART}" + +echo "New kernel vblock was output to ${DST_VBLOCK}" + diff --git a/scripts/image_signing/sample-test-configs/README b/scripts/image_signing/sample-test-configs/README new file mode 100644 index 0000000..d60ad3d --- /dev/null +++ b/scripts/image_signing/sample-test-configs/README @@ -0,0 +1,4 @@ +These are sample configurations used with the test scripts located in the +parent directory. Note that these are not maintained in this git with complete +or necessarily current production data for Chrome OS. They serve to provide +examples of the configuraiton syntax. diff --git a/scripts/image_signing/sample-test-configs/ensure_no_nonrelease_files.config b/scripts/image_signing/sample-test-configs/ensure_no_nonrelease_files.config new file mode 100644 index 0000000..3e7556b --- /dev/null +++ b/scripts/image_signing/sample-test-configs/ensure_no_nonrelease_files.config @@ -0,0 +1,19 @@ +#!/bin/bash + +# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Files/directories that should never be present in a clean, +# standard release build. +RELEASE_FILE_BLOCKLIST=( +# Flag-file indicating "developer mode", crosh offers "shell" if present: +/root/.dev_mode + +# Should not ship with a local account pre-set on the system +/opt/google/chrome/localaccount + +# Generation of this should happen on-device. Don't want to introduce +# any cryptohome-related weaknesses e.g. everyone using the same salt. +/home/.shadow +) diff --git a/scripts/image_signing/sample-test-configs/ensure_sane_lsb-release.config b/scripts/image_signing/sample-test-configs/ensure_sane_lsb-release.config new file mode 100644 index 0000000..4dfae3c --- /dev/null +++ b/scripts/image_signing/sample-test-configs/ensure_sane_lsb-release.config @@ -0,0 +1,31 @@ +#!/bin/bash + +# Copyright (c) 2012 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +expected_auserver="https://tools.google.com/service/update2" +expected_release_name="Chrome OS" + +# List boards here +expected_boards=( + x86-mario + x86-alex-signed-mp-v3keys +) + +# List track names here +expected_release_tracks=( + canary-channel + dogfood-channel + beta-channel + dev-channel +) + +# Associate board names with APPID's by creating a series +# of variables here. Variables should be named based on +# expected boards (above), with hyphens transposed to +# underscores (to be legal in variable names). +expected_appid_x86_mario="{87efface-864d-49a5-9bb3-4b050a7c227a}" +expected_appid_x86_alex="{C776D42E-287A-435E-8BA7-E770BD30B46D}" +expected_appid_canary="{90F229CE-83E2-4FAF-8479-E368A34938B1}" +expected_appid_dogfood="{4897842343-83E2-4FAF-8479-E368A34938B1}" diff --git a/scripts/image_signing/sample-test-configs/ensure_secure_kernelparams.config b/scripts/image_signing/sample-test-configs/ensure_secure_kernelparams.config new file mode 100644 index 0000000..9b78def --- /dev/null +++ b/scripts/image_signing/sample-test-configs/ensure_secure_kernelparams.config @@ -0,0 +1,42 @@ +#!/bin/bash + +# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# +# COMMON +# +required_kparams_common=( quiet console=tty2 init=/sbin/init add_efi_memmap + boot=local rootwait ro noresume noswap i915.modeset=1 + loglevel=1 cros_secure kern_guid=%U tpm_tis.force=1 + tpm_tis.interrupts=0 root=/dev/dm-0 + dm_verity.error_behavior=3 dm_verity.max_bios=-1 + dm_verity.dev_wait=1 noinitrd ) + +optional_kparams_common=( ) +optional_kparams_regex_common=( ) + +# use "MAGIC_HASH" in place of the unpredictable sha1 hash, comparison +# functions later take care of the rest.... This set of dmparams +# taken from observation of current builds. In particular we may see +# the size of the filesystem creep over time. That size is denoted by +# the large number that appears a couple times in this string. +dmparams_common_list=('vroot none ro,0 1740800 verity %U+1 %U+1 1740800 0 sha1 MAGIC_HASH' +'vroot none ro,0 1740800 verity payload=%U+1 hashtree=%U+1 hashstart=1740800 alg=sha1 root_hexdigest=MAGIC_HASH' + +'vroot none ro,0 1740800 verity payload=%U+1 hashtree=%U+1 hashstart=1740800 alg=sha1 root_hexdigest=MAGIC_HASH salt=MAGIC_SALT' +) + +# +# x86-mario +# +required_kparams_x86_mario=( ${required_kparams_common[@]} ) +optional_kparams_x86_mario=( ${optional_kparams_common[@]} ) +optional_kparams_regex_x86_mario=( ${optional_kparams_regex_common[@]} ) +required_dmparams_x86_mario=("${required_dmparams_common[@]}") + +# Set up additional boards here. The "common" variables are +# not directly consulted by the test script, they're only +# here for your convenience in building up the board-specific +# configuration variables like the 3 shown above. diff --git a/scripts/image_signing/set_channel.sh b/scripts/image_signing/set_channel.sh new file mode 100755 index 0000000..d4e64ad --- /dev/null +++ b/scripts/image_signing/set_channel.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# Copyright (c) 2012 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Changes the channel on a Chrome OS image. + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +set -e + +if [ $# -ne 2 ]; then + cat < + +: Path to image. +: The new channel of the image. +EOF + exit 1 +fi + +main() { + local image=$1 + local to=$2 + local loopdev rootfs lsb + + if [[ -d "${image}" ]]; then + rootfs="${image}" + else + rootfs=$(make_temp_dir) + loopdev=$(loopback_partscan "${image}") + mount_loop_image_partition "${loopdev}" 3 "${rootfs}" + fi + lsb="${rootfs}/etc/lsb-release" + # Get the current channel on the image. + local from=$(lsbval "${lsb}" 'CHROMEOS_RELEASE_TRACK') + from=${from%"-channel"} + echo "Current channel is '${from}'. Changing to '${to}'." + + local sudo + if [[ ! -w ${lsb} ]] ; then + sudo="sudo" + fi + ${sudo} sed -i "s/\b${from}\b/${to}/" "${lsb}" && + restore_lsb_selinux "${lsb}" && + echo "Channel change successful." + cat "${lsb}" +} + +main "$@" diff --git a/scripts/image_signing/set_gbb_flags.sh b/scripts/image_signing/set_gbb_flags.sh new file mode 100755 index 0000000..7a22b85 --- /dev/null +++ b/scripts/image_signing/set_gbb_flags.sh @@ -0,0 +1,80 @@ +#!/bin/sh +# +# Copyright (c) 2012 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# This script can change GBB flags in system live firmware or a given image +# file. + +SCRIPT_BASE="$(dirname "$0")" +. "${SCRIPT_BASE}/gbb_flags_common.sh" + +# DEFINE_string name default_value description flag +DEFINE_string file "" "Path to firmware image. Default to system firmware." "f" +DEFINE_boolean check_wp ${FLAGS_TRUE} "Check write protection states first." "" + +set -e + +# Check write protection +# ---------------------------------------------------------------------------- +check_write_protection() { + local hw_wp="" sw_wp="" + if ! crossystem "wpsw_cur?0"; then + hw_wp="on" + fi + # Keep 'local' declaration split from assignment so return code is checked. + local wp_states + wp_states="$(flashrom -p host --wp-status 2>/dev/null | grep WP)" + local wp_disabled="$(echo "${wp_states}" | grep "WP:.*is disabled.")" + local wp_zero_len="$(echo "${wp_states}" | grep "WP:.*, len=0x00000000")" + if [ -z "${wp_disabled}" -a -z "${wp_zero_len}" ]; then + sw_wp="on" + fi + if [ -n "${hw_wp}" -a -n "${sw_wp}" ]; then + return ${FLAGS_FALSE} + fi + return ${FLAGS_TRUE} +} + +# Main +# ---------------------------------------------------------------------------- +main() { + if [ "$#" != "1" ]; then + flags_help + exit 1 + fi + + local value="$(($1))" + local image_file="${FLAGS_file}" + + if [ -z "${FLAGS_file}" ]; then + image_file="$(make_temp_file)" + flashrom_read "${image_file}" + fi + + # Process file + # Keep 'local' declaration split from assignment so return code is checked. + local old_value + old_value="$(futility gbb -g --flags "${image_file}")" + printf "Setting GBB flags from %s to %#x.." "${old_value}" "${value}" + futility gbb -s --flags="${value}" "${image_file}" + + if [ -z "${FLAGS_file}" ]; then + if [ "${FLAGS_check_wp}" = "${FLAGS_TRUE}" ]; then + if ! check_write_protection; then + echo "" + echo "WARNING: System GBB Flags are NOT changed!!!" + echo "ERROR: You must disable write protection before setting flags." + exit 1 + fi + fi + flashrom_write "$image_file" + fi +} + +# Parse command line +FLAGS "$@" || exit 1 +eval set -- "$FLAGS_ARGV" + +main "$@" diff --git a/scripts/image_signing/set_lsb_release.sh b/scripts/image_signing/set_lsb_release.sh new file mode 100755 index 0000000..55c1653 --- /dev/null +++ b/scripts/image_signing/set_lsb_release.sh @@ -0,0 +1,89 @@ +#!/bin/bash + +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Customizes a Chrome OS release image by setting /etc/lsb-release values. + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +set_lsb_release_keyval() { + local rootfs=$1 + local lsb="${rootfs}/etc/lsb-release" + local key=$2 + local value=$3 + local data + data=$( + ( + grep -Ev "^${key}=" "${lsb}" + echo "${key}=${value}" + ) | sort + ) + sudo tee "${lsb}" <<<"${data}" >/dev/null +} + +main() { + set -e + + if [[ $(( $# % 2 )) -eq 0 ]]; then + cat < [ [ ...]] + +Examples: + +$ $PROG chromiumos_image.bin + +Dumps /etc/lsb-release from chromiumos_image.bin to stdout. + +$ $PROG chromiumos_image.bin CHROMEOS_RELEASE_DESCRIPTION "New description" + +Sets the CHROMEOS_RELEASE_DESCRIPTION key's value to "New description" +in /etc/lsb-release in chromiumos_image.bin, sorts the keys and dumps +the updated file to stdout. + +EOF + exit 1 + fi + + # If there are no key/value pairs to process, we don't need write access. + local ro=$([[ $# -eq 0 ]] && echo true || echo false) + + local image=$1 + shift + local loopdev rootfs + + if [[ -d "${image}" ]]; then + rootfs="${image}" + else + rootfs=$(make_temp_dir) + loopdev=$(loopback_partscan "${image}") + + if ${ro}; then + mount_loop_image_partition_ro "${loopdev}" 3 "${rootfs}" + else + mount_loop_image_partition "${loopdev}" 3 "${rootfs}" + touch "${image}" # Updates the image modification time. + fi + fi + + # Process all the key/value pairs. + local key value + while [[ $# -ne 0 ]]; do + key=$1 value=$2 + shift 2 + set_lsb_release_keyval "${rootfs}" "${key}" "${value}" + done + if ! ${ro}; then + restore_lsb_selinux "${rootfs}/etc/lsb-release" + fi + + # Dump the final state. + cat "${rootfs}/etc/lsb-release" + + # Dump security context for lsb-release file + getfattr --absolute-names -n security.selinux "${rootfs}/etc/lsb-release" +} + +main "$@" diff --git a/scripts/image_signing/sign_android_image.sh b/scripts/image_signing/sign_android_image.sh new file mode 100755 index 0000000..5af1aa6 --- /dev/null +++ b/scripts/image_signing/sign_android_image.sh @@ -0,0 +1,431 @@ +#!/bin/bash + +# Copyright 2016 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +. "$(dirname "$0")/common.sh" +. "$(dirname "$0")/lib/sign_android_lib.sh" +load_shflags || exit 1 + +DEFINE_boolean use_apksigner "${FLAGS_FALSE}" \ + "Use apksigner instead of signapk for APK signing" + +FLAGS_HELP=" +Usage: $PROG /path/to/cros_root_fs/dir /path/to/keys/dir + +Re-sign framework apks in an Android system image. The image itself does not +need to be signed since it is shipped with Chrome OS image, which is already +signed. + +Android has many ``framework apks'' that are signed with different framework +keys, depends on the purpose of the apk. During development, apks are signed +with the debug one. This script is to re-sign those apks with corresponding +release key. It also handles some of the consequences of the key changes, such +as sepolicy update. +" + +# Parse command line. +FLAGS "$@" || exit 1 +eval set -- "${FLAGS_ARGV}" + +set -e + +# Re-sign framework apks with the corresponding release keys. Only apk with +# known key fingerprint are re-signed. We should not re-sign non-framework +# apks. +sign_framework_apks() { + local system_mnt="$1" + local key_dir="$2" + local working_dir="$3" + local flavor_prop="" + local keyset="" + + if ! flavor_prop=$(android_get_build_flavor_prop \ + "${system_mnt}/system/build.prop"); then + die "Failed to extract build flavor property from \ +'${system_mnt}/system/build.prop'." + fi + info "Found build flavor property '${flavor_prop}'." + if ! keyset=$(android_choose_signing_keyset "${flavor_prop}"); then + die "Unknown build flavor property '${flavor_prop}'." + fi + info "Expecting signing keyset '${keyset}'." + + info "Start signing framework apks" + + if ! image_content_integrity_check "${system_mnt}" "${working_dir}" \ + "Prepare apks signing"; then + return 1 + fi + + # Counters for validity check. + local counter_platform=0 + local counter_media=0 + local counter_shared=0 + local counter_releasekey=0 + local counter_networkstack=0 + local counter_total=0 + + local apk + while read -d $'\0' -r apk; do + local sha1="" + local keyname="" + + sha1=$(unzip -p "${apk}" META-INF/CERT.RSA | \ + keytool -printcert | awk '/^\s*SHA1:/ {print $2}') + + if ! keyname=$(android_choose_key "${sha1}" "${keyset}"); then + die "Failed to choose signing key for APK '${apk}' (SHA1 '${sha1}') in \ +build flavor '${flavor_prop}'." + fi + if [[ -z "${keyname}" ]]; then + continue + fi + + info "Re-signing (${keyname}) ${apk}" + + local temp_dir="$(make_temp_dir)" + local temp_apk="${temp_dir}/temp.apk" + local signed_apk="${temp_dir}/signed.apk" + + # Follow the standard manual signing process. See + # https://developer.android.com/studio/publish/app-signing.html. + cp -a "${apk}" "${temp_apk}" + # Explicitly remove existing signature. + zip -q "${temp_apk}" -d "META-INF/*" + + if [ "${FLAGS_use_apksigner}" = "$FLAGS_FALSE" ]; then + # Signapk now creates signature of APK Signature Scheme v2. No further APK + # changes should happen afterward. Also note that signapk now takes care + # of zipalign. + signapk "${key_dir}/$keyname.x509.pem" "${key_dir}/$keyname.pk8" \ + "${temp_apk}" "${signed_apk}" > /dev/null + else + # Key rotation: old key can sign a new key and generate a lineage file. + # Provided the lineage file, Android P can honor the new key. Lineage file + # can be generated similar to the following command: + # + # apksigner rotate --out media.lineage --old-signer --key old-media.pk8 + # --cert old-media.x509.pem --new-signer --key new-media.pk8 --cert + # new-media.x509.pem + # + # TODO(b/132818552): disable v1 signing once a check is removed. + + local extra_flags + local lineage_file="${key_dir}/$keyname.lineage}" + if [ -f ${lineage_file} ]; then + extra_flags="--lineage ${lineage_file}" + fi + apksigner sign --v1-signing-enabled true --v2-signing-enabled false \ + --key "${key_dir}/$keyname.pk8" --cert "${key_dir}/$keyname.x509.pem" \ + --in "${temp_apk}" --out "${signed_apk}" \ + ${extra_flags} + fi + if ! image_content_integrity_check "${system_mnt}" "${working_dir}" \ + "sign apk ${signed_apk}"; then + return 1 + fi + + # Copy the content instead of mv to avoid owner/mode changes. + sudo cp "${signed_apk}" "${apk}" && rm -f "${signed_apk}" + + # Set timestamp rounded to second since squash file system has resolution + # in seconds. Required in order for the packages cache generator output is + # compatible with the packed file system. + sudo touch "${apk}" -t "$(date +%m%d%H%M.%S)" + + : $(( counter_${keyname} += 1 )) + : $(( counter_total += 1 )) + if ! image_content_integrity_check "${system_mnt}" "${working_dir}" \ + "update re-signed apk ${apk}"; then + return 1 + fi + done < <(find "${system_mnt}/system" -type f -name '*.apk' -print0) + + info "Found ${counter_platform} platform APKs." + info "Found ${counter_media} media APKs." + info "Found ${counter_shared} shared APKs." + info "Found ${counter_releasekey} release APKs." + info "Found ${counter_networkstack} networkstack APKs." + info "Found ${counter_total} total APKs." + # Validity check. + if [[ ${counter_platform} -lt 2 || ${counter_media} -lt 2 || + ${counter_shared} -lt 2 || ${counter_releasekey} -lt 2 || + ${counter_total} -lt 25 ]]; then + die "Number of re-signed package seems to be wrong" + fi + + return 0 +} + +# Extracts certificate from the provided public key. +get_cert() { + # Full path to public key to read and extract certificate. It must exist. + local public_key=$1 + local cert=$(sed -E '/(BEGIN|END) CERTIFICATE/d' \ + "${public_key}" | tr -d '\n' \ + | base64 --decode | hexdump -v -e '/1 "%02x"') + + if [[ -z "${cert}" ]]; then + die "Unable to get the public platform key" + fi + echo "${cert}" +} + +# Replaces particular certificate in mac_permissions xml file with new one. +# Note, this does not fail if particular entry is not found. For example +# network_stack does not exist in P. +change_cert() { + # Type of signer entry to process. Could be platform, media or network_stack. + local type=$1 + # New certificate encoded to string. This replaces old one. + local cert=$2 + # *mac_permissions xml file to modify, plat_mac_permissions.xml for example. + local xml=$3 + local pattern="( /dev/null + cp "${release_cert}" . + local temp_zip=$(make_temp_file) + zip -q -r "${temp_zip}.zip" . + # Copy the content instead of mv to avoid owner/mode changes. + sudo cp "${temp_zip}.zip" "${ota_zip}" + popd > /dev/null +} + +# Snapshot file properties in a directory recursively. +snapshot_file_properties() { + local dir=$1 + sudo find "${dir}" -exec stat -c '%n:%u:%g:%a' {} + | sort +} + +# Integrity check that image content is unchanged. +image_content_integrity_check() { + local system_mnt=$1 + local working_dir=$2 + local reason=$3 + snapshot_file_properties "${system_mnt}" > "${working_dir}/properties.new" + local d + if ! d=$(diff "${working_dir}"/properties.{orig,new}); then + error "Unexpected change of file property, diff due to ${reason}\n${d}" + return 1 + fi + + return 0 +} + +sign_android_internal() { + local root_fs_dir=$1 + local key_dir=$2 + + # Detect vm/container type and set environment correspondingly. + # Keep this aligned with + # src/private-overlays/project-cheets-private/scripts/board_specific_setup.sh + local system_image="" + local selinux_dir="${root_fs_dir}/etc/selinux" + local file_contexts="" + local vm_candidate="${root_fs_dir}/opt/google/vms/android/system.raw.img" + local container_candidate=( + "${root_fs_dir}/opt/google/containers/android/system.raw.img") + if [[ -f "${vm_candidate}" ]]; then + system_image="${vm_candidate}" + file_contexts="${selinux_dir}/arc/contexts/files/android_file_contexts_vm" + elif [[ -f "${container_candidate}" ]]; then + system_image="${container_candidate}" + file_contexts="${selinux_dir}/arc/contexts/files/android_file_contexts" + else + die "System image does not exist" + fi + + local android_system_image="$(echo \ + "${root_fs_dir}"/opt/google/*/android/system.raw.img)" + local android_dir=$(dirname "${android_system_image}") + local system_img="${android_dir}/system.raw.img" + # Use the versions in $PATH rather than the system ones. + local unsquashfs=$(which unsquashfs) + local mksquashfs=$(which mksquashfs) + + if [[ $# -ne 2 ]]; then + flags_help + die "command takes exactly 2 args" + fi + + if [[ ! -f "${system_img}" ]]; then + die "System image does not exist: ${system_img}" + fi + + # NOTE: Keep compression_flags aligned with + # src/private-overlays/project-cheets-private/scripts/board_specific_setup.sh + local compression_flags="" + local compression=$(sudo "${unsquashfs}" -s "${system_img}" \ + | grep -e ^"Compression\s") + if [[ "${compression}" == "Compression gzip" ]]; then + compression_flags="-comp gzip" + elif [[ "${compression}" == "Compression lz4" ]]; then + compression_flags="-comp lz4 -Xhc -b 256K" + elif [[ "${compression}" == "Compression zstd" ]]; then + compression_flags="-comp zstd -b 256K" + else + die "Unexpected compression type: ${compression}" + fi + + if ! type -P zipalign &>/dev/null || ! type -P signapk &>/dev/null \ + || ! type -P apksigner &>/dev/null; then + # TODO(victorhsieh): Make this an error. This is not treating as error + # just to make an unrelated test pass by skipping this signing. + warn "Skip signing Android apks (some of executables are not found)." + exit 0 + fi + + local working_dir=$(make_temp_dir) + local system_mnt="${working_dir}/mnt" + + info "Unpacking squashfs system image to ${system_mnt}" + sudo "${unsquashfs}" -no-xattrs -f -no-progress -d "${system_mnt}" "${system_img}" + + snapshot_file_properties "${system_mnt}" > "${working_dir}/properties.orig" + + if ! sign_framework_apks "${system_mnt}" "${key_dir}" "${working_dir}"; then + return 1 + fi + + if ! image_content_integrity_check "${system_mnt}" "${working_dir}" \ + "sign_framework_apks"; then + return 1 + fi + + update_sepolicy "${system_mnt}" "${key_dir}" + if ! image_content_integrity_check "${system_mnt}" "${working_dir}" \ + "update_sepolicy"; then + return 1 + fi + + replace_ota_cert "${system_mnt}" "${key_dir}/releasekey.x509.pem" + if ! image_content_integrity_check "${system_mnt}" "${working_dir}" \ + "replace_ota_cert"; then + return 1 + fi + + # Packages cache needs to be regenerated when the key and timestamp are + # changed for apks. + local packages_cache="${system_mnt}/system/etc/packages_cache.xml" + local file_hash_cache="${system_mnt}/system/etc/file_hash_cache" + if [[ -f "${packages_cache}" ]]; then + if type -P aapt &>/dev/null; then + info "Regenerating packages cache ${packages_cache}" + # For the validity check. + local packages_before=$(grep " ${new_size}" + return 0 +} + +main() { + # TODO(b/175081695): Remove retries once root problem is fixed. + local attempts + for (( attempts = 1; attempts <= 3; ++attempts )); do + if sign_android_internal "$@"; then + exit 0 + fi + warn "Could not sign android image due to recoverable error, will retry," \ + "attempt # ${attempts}." + warn "@@@ALERT@@@" + lsof -n + dmesg + mount + done + die "Unable to sign Android image; giving up." +} + +main "$@" diff --git a/scripts/image_signing/sign_android_unittests.sh b/scripts/image_signing/sign_android_unittests.sh new file mode 100755 index 0000000..9bb99a8 --- /dev/null +++ b/scripts/image_signing/sign_android_unittests.sh @@ -0,0 +1,219 @@ +#!/bin/bash + +# Copyright 2018 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +. "$(dirname "$0")/lib/sign_android_lib.sh" + +# Expected APK signatures depending on the type of APK and the type of build. +declare -A platform_sha=( + ['cheets']='AA:04:E0:5F:82:9C:7E:D1:B9:F8:FC:99:6C:5A:54:43:83:D9:F5:BC' + ['aosp']='27:19:6E:38:6B:87:5E:76:AD:F7:00:E7:EA:84:E4:C6:EE:E3:3D:FA' +) +declare -A media_sha=( + ['cheets']='D4:C4:2D:E0:B9:1B:15:72:FA:7D:A7:21:E0:A6:09:94:B4:4C:B5:AE' + ['aosp']='B7:9D:F4:A8:2E:90:B5:7E:A7:65:25:AB:70:37:AB:23:8A:42:F5:D3' +) +declare -A shared_sha=( + ['cheets']='38:B6:2C:E1:75:98:E3:E1:1C:CC:F6:6B:83:BB:97:0E:2D:40:6C:AE' + ['aosp']='5B:36:8C:FF:2D:A2:68:69:96:BC:95:EA:C1:90:EA:A4:F5:63:0F:E5' +) +declare -A release_sha=( + ['cheets']='EC:63:36:20:23:B7:CB:66:18:70:D3:39:3C:A9:AE:7E:EF:A9:32:42' + ['aosp']='61:ED:37:7E:85:D3:86:A8:DF:EE:6B:86:4B:D8:5B:0B:FA:A5:AF:81' +) + + +test_android_choose_key_invalid_keyset() { + local keyname + local keyset + local keysets=("invalid_keyset" " " "") + + for keyset in "${keysets[@]}"; do + echo "TEST: Detection of invalid keyset '${keyset}'." + if keyname=$(android_choose_key "ignored_sha1" "${keyset}"); then + : $(( NUM_TEST_FAILURES += 1 )) + echo "ERROR: Failed to detect invalid keyset '${keyset}'." + else + echo "PASS: Detected invalid keyset '${keyset}'." + fi + done +} + +android_choose_key_test_helper() { + local sha1="$1" + local keyset="$2" + local expected_keyname="$3" + local keyname="invalid_key" + + echo "TEST: Detect '${expected_keyname}' key name for '${keyset}' keyset." + keyname=$(android_choose_key "${sha1}" "${keyset}") + if [[ "${keyname}" != "${expected_keyname}" ]]; then + : $(( NUM_TEST_FAILURES += 1 )) + echo "ERROR: Incorrect key name '${keyname}' returned." + else + echo "PASS: Correct key name '${keyname}' returned." + fi +} + +test_android_choose_key() { + local keyset + local expected_keyname + + local keysets=("cheets" "aosp") + for keyset in "${keysets[@]}"; do + expected_keyname="platform" + android_choose_key_test_helper "${platform_sha[${keyset}]}" "${keyset}" \ + "${expected_keyname}" + expected_keyname="media" + android_choose_key_test_helper "${media_sha[${keyset}]}" "${keyset}" \ + "${expected_keyname}" + expected_keyname="shared" + android_choose_key_test_helper "${shared_sha[${keyset}]}" "${keyset}" \ + "${expected_keyname}" + expected_keyname="releasekey" + android_choose_key_test_helper "${release_sha[${keyset}]}" "${keyset}" \ + "${expected_keyname}" + done +} + +build_flavor_test_helper() { + local prop_file="${BUILD}/build.prop" + local prop_content="$1" + local expected_flavor_prop="$2" + local flavor_prop="" + + echo "${prop_content}" > "${prop_file}" + flavor_prop=$(android_get_build_flavor_prop "${prop_file}") + if [[ "${flavor_prop}" != "${expected_flavor_prop}" ]]; then + : $(( NUM_TEST_FAILURES += 1 )) + echo "ERROR: Incorrect build flavor '${flavor_prop}' returned." + else + echo "PASS: Correct key name '${flavor_prop}' returned." + fi + rm "${prop_file}" +} + +test_android_get_build_flavor_prop() { + local prop_file="${BUILD}/build.prop" + local prop_content="" + local flavor_prop="" + + echo "TEST: Extract ro.build.flavor property." + prop_content="ro.random.prop=foo +other.prop=bar +x=foobar +ro.build.flavor=cheets_x86-user +another.prop=barfoo" + build_flavor_test_helper "${prop_content}" "cheets_x86-user" + + echo "TEST: Extract single ro.build.flavor property." + prop_content="ro.build.flavor=cheets_x86-user" + build_flavor_test_helper "${prop_content}" "cheets_x86-user" + + echo "TEST: Avoid commented out ro.build.flavor property." + prop_content="ro.random.prop=foo +other.prop=bar +x=foobar +#ro.build.flavor=commented_out +ro.build.flavor=cheets_x86-user +another.prop=barfoo" + build_flavor_test_helper "${prop_content}" "cheets_x86-user" + + # Missing ro.build.flavor property. + echo "TEST: Detect missing ro.build.flavor property." + echo "ro.random.prop=foo" > "${prop_file}" + if flavor_prop=$(android_get_build_flavor_prop "${prop_file}"); then + : $(( NUM_TEST_FAILURES += 1 )) + echo "ERROR: Failed to detect missing ro.build.flavor property." + else + echo "PASS: Detected missing ro.build.flavor property." + fi + rm "${prop_file}" +} + +choose_signing_keyset_test_helper() { + local flavor_prop="$1" + local expected_keyset="$2" + local keyset="" + + keyset=$(android_choose_signing_keyset "${flavor_prop}") + if [[ "${keyset}" != "${expected_keyset}" ]]; then + : $(( NUM_TEST_FAILURES += 1 )) + echo "ERROR: Incorrect keyset '${keyset}' returned instead of \ +'${expected_keyset}'." + else + echo "PASS: Correct keyset '${keyset}' returned." + fi +} + +choose_signing_keyset_test_invalid_flavors() { + local flavor="$1" + + echo "TEST: Detect invalid build flavor '${flavor}'." + if android_choose_signing_keyset "${flavor}"; then + : $(( NUM_TEST_FAILURES += 1 )) + echo "ERROR: Failed to detect invalid build flavor '${flavor}'." + else + echo "PASS: Detected invalid build flavor '${flavor}'." + fi +} + +test_android_choose_signing_keyset() { + echo "TEST: Keyset for aosp_cheets build." + choose_signing_keyset_test_helper "aosp_cheets_x86-userdebug" "aosp" + echo "TEST: Keyset for sdk_google_cheets build." + choose_signing_keyset_test_helper "sdk_google_cheets_x86-userdebug" "cheets" + echo "TEST: Keyset for sdk_cheets build." + choose_signing_keyset_test_helper "sdk_cheets_x86-userdebug" "cheets" + echo "TEST: Keyset for cheets_x86 build." + choose_signing_keyset_test_helper "cheets_x86-user" "cheets" + echo "TEST: Keyset for cheets_arm build." + choose_signing_keyset_test_helper "cheets_arm-user" "cheets" + echo "TEST: Keyset for cheets_x86_64 build." + choose_signing_keyset_test_helper "cheets_x86_64-user" "cheets" + echo "TEST: Keyset for userdebug build." + choose_signing_keyset_test_helper "cheets_x86-userdebug" "cheets" + echo "TEST: Keyset for bertha_x86 build." + choose_signing_keyset_test_helper "bertha_x86-user" "cheets" + echo "TEST: Keyset for bertha_arm build." + choose_signing_keyset_test_helper "bertha_arm-user" "cheets" + echo "TEST: Keyset for bertha_x86_64 build." + choose_signing_keyset_test_helper "bertha_x86_64-user" "cheets" + + choose_signing_keyset_test_invalid_flavors "aosp" + choose_signing_keyset_test_invalid_flavors "cheets" + choose_signing_keyset_test_invalid_flavors "bertha" + choose_signing_keyset_test_invalid_flavors "" + choose_signing_keyset_test_invalid_flavors " " +} + +main() { + if [[ $# -ne 0 ]]; then + echo "FAIL: unexpected arguments '$@'." + return 1 + fi + + BUILD=$(mktemp -d) + echo "Setting temporary build directory as '${BUILD}'." + + test_android_choose_key_invalid_keyset + test_android_choose_key + test_android_get_build_flavor_prop + test_android_choose_signing_keyset + + echo "Deleting temporary build directory '${BUILD}'." + rmdir "${BUILD}" + + if [[ ${NUM_TEST_FAILURES} -gt 0 ]]; then + echo "FAIL: found ${NUM_TEST_FAILURES} failed :(." + return 1 + fi + echo "PASS: all tests passed :)." + return 0 +} + +# Global incremented by each test when they fail. +NUM_TEST_FAILURES=0 +main "$@" diff --git a/scripts/image_signing/sign_firmware.sh b/scripts/image_signing/sign_firmware.sh new file mode 100755 index 0000000..0e7ac7c --- /dev/null +++ b/scripts/image_signing/sign_firmware.sh @@ -0,0 +1,133 @@ +#!/bin/bash +# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Wrapper script for re-signing a firmware image. + +# Determine script directory. +SCRIPT_DIR=$(dirname "$0") + +# Load common constants and variables. +. "${SCRIPT_DIR}/common_minimal.sh" + +# Abort on error. +set -e + +usage() { + cat< [firmware_version] \ +[loem_output_dir] + +Signs with keys in , setting firmware version +to . Outputs signed firmware to . +The and paths may be the same. +If no firmware version is specified, it is set as 1. +EOF + exit 1 +} + +gbb_update() { + local in_firmware="$1" + local key_dir="$2" + local out_firmware="$3" + local rootkey="$4" + + # Replace the root and recovery key in the Google Binary Block of the + # firmware. Note: This needs to happen after calling resign_firmwarefd.sh + # since it needs to be able to verify the firmware using the root key to + # determine the preamble flags. + futility gbb \ + -s \ + --recoverykey="${key_dir}/recovery_key.vbpubk" \ + --rootkey="${rootkey}" \ + "${in_firmware}" \ + "${out_firmware}" +} + +# Sign a single firmware image. +# ARGS: [loem_key] [loemid] +sign_one() { + local loem_key="$1" + local loemid="$2" + + # Resign the firmware with new keys. + "${SCRIPT_DIR}/resign_firmwarefd.sh" \ + "${in_firmware}" \ + "${temp_fw}" \ + "${key_dir}/firmware_data_key${loem_key}.vbprivk" \ + "${key_dir}/firmware${loem_key}.keyblock" \ + "${key_dir}/dev_firmware_data_key${loem_key}.vbprivk" \ + "${key_dir}/dev_firmware${loem_key}.keyblock" \ + "${key_dir}/kernel_subkey.vbpubk" \ + "${firmware_version}" \ + "" \ + "${loem_output_dir}" \ + "${loemid}" +} + +# Process all the keysets in the loem.ini file. +sign_loems() { + local line loem_section=false loem_index loemid + local rootkey + + while read line; do + # Find the [loem] section. + if ! ${loem_section}; then + if grep -q "^ *\[loem\] *$" <<<"${line}"; then + loem_section=true + fi + continue + # Abort when we hit the next section. + elif [[ ${line} == *"["* ]]; then + break + fi + + # Strip comments/whitespace. + line=$(sed -e 's:#.*::' -e 's:^ *::' -e 's: *$::' <<<"${line}") + if [[ -z "${line}" ]]; then + # Skip blank lines. + continue + fi + + loem_index=$(cut -d= -f1 <<<"${line}" | sed 's: *$::') + loemid=$(cut -d= -f2 <<<"${line}" | sed 's:^ *::') + + echo "### Processing LOEM ${loem_index} ${loemid}" + sign_one ".loem${loem_index}" "${loemid}" + + rootkey="${key_dir}/root_key.loem${loem_index}.vbpubk" + cp "${rootkey}" "${loem_output_dir}/rootkey.${loemid}" + + if [[ ${loem_index} == "1" ]]; then + gbb_update "${temp_fw}" "${key_dir}" "${out_firmware}" "${rootkey}" + fi + echo + done <"${key_dir}/loem.ini" +} + +main() { + if [[ $# -lt 3 || $# -gt 5 ]]; then + usage + fi + + local in_firmware=$1 + local key_dir=$2 + local out_firmware=$3 + local firmware_version=${4:-1} + local loem_output_dir=${5:-} + + local temp_fw=$(make_temp_file) + + if [[ -e ${key_dir}/loem.ini ]]; then + if [[ -z ${loem_output_dir} ]]; then + die "need loem_output_dir w/loem keysets" + fi + sign_loems + else + sign_one + gbb_update "${temp_fw}" "${key_dir}" "${out_firmware}" \ + "${key_dir}/root_key.vbpubk" + fi +} +main "$@" diff --git a/scripts/image_signing/sign_gsc_firmware.sh b/scripts/image_signing/sign_gsc_firmware.sh new file mode 100755 index 0000000..af7b7da --- /dev/null +++ b/scripts/image_signing/sign_gsc_firmware.sh @@ -0,0 +1,648 @@ +#!/bin/bash +# Copyright 2018 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +. "$(dirname "$0")/common.sh" + +load_shflags || exit 1 + +DEFINE_boolean override_keyid "${FLAGS_TRUE}" \ + "Override keyid from manifest." "" + +FLAGS_HELP="Usage: ${PROG} [options] + +Signs with keys in . +" + +# Parse command line. +FLAGS "$@" || exit 1 +eval set -- "${FLAGS_ARGV}" + +# Abort on error and uninitialized variables. +set -e +set -u + +PRE_PVT_BID_FLAG=0x10 +MP_BID_FLAG=0x10000 +CR50_NODE_LOCKED_VERSION="0.5.12" + +# Convert unsigned 32 bit value into a signed one. +to_int32() { + local inp="$1" + python -c \ + "import struct; \ + d=struct.pack('I', $inp); \ + print (struct.unpack('i', d)[0])" +} + +# Functions allowing to determine the base address of a binary blob in ihex +# format. Invoked in a subprocess through () to be able to use stdout as the +# return values. + +# In ihex format binary data is represented as a set of records. Each record +# is a text string of hex values in ASCII. All records start with a header +# which determines the record contents. +# +# The most common record type is the data record, its header includes the 16 +# bit address of where the record data will have to be placed in the physical +# address space. Naturally 16 bits is not enough as of last thirty years, some +# special types of record are used to specify the segment base of there the +# 16 bit address is used as the offset. +# +# The segment base is still represented as a 16 bit value, depending on the +# record type the base is shifted right ether 4 (record type 02) or 16 (record +# type 04) bits. +# +# The first two records of the ihex binary blob are a segment record and a +# data record. Combining the segment value from the first record and the +# address value from the second record one can determine the base address +# where the blob is supposed to be placed. +# +# See https://en.wikipedia.org/wiki/Intel_HEX for further details. +parse_segment() { + local string="$1" + + if [[ "${string}" =~ ^:020000 && "${#string}" -eq 15 ]]; then + local type="${string:7:2}" + local value="0x${string:9:4}" + local segment + + case "${type}" in + (02) + segment=$(( value << 4 )) + ;; + (04) + segment=$(( value << 16 )) + ;; + (*) + error "unknown segment record type ${type}" + ;; + esac + printf "0x%x" "${segment}" + else + error "unexpected segment record: ${string}" + fi +} + +# The second record in the ihex binary blob is mapped to the lowest 16 bit +# address in the segment. +parse_data() { + local string="$1" + + if [[ "${string}" =~ ^:10 && "${#string}" -eq 43 ]]; then + echo "0x${string:3:4}" + else + error "unexpected data record: ${string}" + fi +} + +# Given an ihex binary blob determine its base address as a sum of the segment +# address and the offset of the first record into the segment. +get_hex_base() { + local hexf="$1" + local strings + local segment + local base_offset + + # Some ihex blobs include , drop to allow for fixed size check. + mapfile -t strings < <(head -2 "${hexf}" | sed 's/\x0d//') + + if [[ ${#strings[@]} != 2 ]]; then + error "input file ${hexf} too short" + return + fi + segment="$(parse_segment "${strings[0]}")" + base_offset="$(parse_data "${strings[1]}")" + + if [[ -n "${segment}" && -n "${base_offset}" ]]; then + printf "%d\n" $(( segment + base_offset )) + else + error "${hexf} does not seem to be a valid ihex module." + fi +} + +# Paste a binary blob into a larger binary file at a given offset. +paste_bin() { + local file="${1}" + local blob="${2}" + local image_base="${3}" + local hex_base="${4}" + local file_size + local blob_size + local offset + + + file_size="$(stat -c '%s' "${file}")" + blob_size="$(stat -c '%s' "${blob}")" + offset="$(( hex_base - image_base ))" + + if [[ $(( blob_size + offset )) -ge ${file_size} ]];then + die \ + "Can't fit ${blob_size} bytes at offset ${offset} into ${file_size} bytes" + fi + dd if="${blob}" of="${file}" seek="${offset}" bs=1 conv=notrunc +} + +# This function accepts one argument, the name of the GSC manifest file which +# needs to be verified and in certain cases altered. +# +# The function verifies that the input manifest is a proper json file, and +# that the manifest conforms to GSC version numbering and board ID flags +# conventions for various build images: +# +# - only binaries where version is set to CR50_NODE_LOCKED_VERSION can be +# converted to node locked images. Board IDs for node locked images come +# from signing instructions, and the config1 manifest field value must have +# the 0x80000000 bit set. +# +# - when signing pre-pvt binaries (major version number is even) the 0x10 +# flags bit must be set. +# +# - when signing mp images (major version number is odd), the 0x10000 flags +# bit must be set (this can be overridden by signing instructions). +verify_and_prepare_gsc_manifest() { + if [[ $# -ne 1 ]]; then + die "Usage: verify_and_prepare_gsc_manifest " + fi + + local manifest_json="$1" + + local bid_flags + local config1 + local epoch + local major + local minor + local values + + mapfile -t values < <(jq '.config1,.epoch,.major,.minor,.board_id_flags' \ + "${manifest_json}") + + config1="${values[0]}" + epoch="${values[1]}" + major="${values[2]}" + minor="${values[3]}" + bid_flags="${values[4]}" + + if [[ ${major} == null ]]; then + die "Major version number not found in ${manifest_json}" + fi + + if [[ ${bid_flags} == null ]]; then + die "bid_flags not found in ${manifest_json}" + fi + + case "${INSN_TARGET:-}" in + + (NodeLocked) + if [[ -z ${INSN_DEVICE_ID:-} ]]; then + die "Node locked target without Device ID value" + fi + # Case of a node locked image, it must have the fixed version. + if [[ "${epoch}.${major}.${minor}" != "${CR50_NODE_LOCKED_VERSION}" ]] + then + die "Won't create node locked images for version $epoch.$major.$minor" + fi + + local sub + local devid0 + local devid1 + + devid0="$(to_int32 "0x${INSN_DEVICE_ID/-*}")" + devid1="$(to_int32 "0x${INSN_DEVICE_ID/*-}")" + cf1="$(to_int32 $(( 0x80000000 + config1 )))" + sub="$(printf " \"DEV_ID0\": %s,\\\n \"DEV_ID1\": %s," \ + "${devid0}" "${devid1}")" + + # Manifest fields must be modified as follows: + # + # - board_id related fields removed + # - 'config1' field bit 0x80000000 set + # - least significant bit of the 'tag' field originally set to all zeros + # changed from zero to one + # - DEV_ID values spliced in into the 'fuses' section + sed -i "/board_id/d;\ + s/\"config1\":.*/\"config1\": ${cf1},/;\ + s/\(tag.*0\+\)0/\11/;\ + /\"fuses\":/ a\ + $sub" "${manifest_json}" || die "Failed to edit the manifest" + return 0 + ;; + + (PrePVT) + # All we care about for pre pvt images is that major version number is + # even and the 0x10 Board ID flag is set. + if (( !(major & 1 ) && (bid_flags & PRE_PVT_BID_FLAG) )); then + return 0 + fi + ;; + + (ReleaseCandidate|GeneralRelease) + if (( (bid_flags & MP_BID_FLAG) && (major & 1) )); then + if [[ ${INSN_TARGET} == GeneralRelease ]]; then + # Strip Board ID information for approved for release MP images. + sed -i "/board_id/d" "${manifest_json}" + fi + return 0 + fi + ;; + + (*) + die "Unsupported target '${INSN_TARGET:-}'" + esac + + die "Inconsistent manifest ${manifest_json}: major = '${major}'," \ + "board_id_flags = '${bid_flags}' target = '${INSN_TARGET}'" +} + +# This function accepts two arguments, names of two binary files. +# +# It searches the first passed-in file for the first 8 bytes of the second +# passed in file. The od utility is used to generate full hex dump of the +# first file (16 bytes per line) and the first 8 bytes of the second file. +# grep is used to check if the pattern is present in the full dump. +find_blob_in_blob() { + if [[ $# -ne 2 ]]; then + die "Usage: find_blob_in_blob " + fi + + local main_blob="$1" + local pattern_blob="$2" + local pattern + # Show without offsets, single byte hex, no compression of zero runs. + local od_options=("-An" "-tx1" "-v") + + # Get the first 8 bytes of the pattern blob. + pattern="$(od "${od_options[@]}" -N8 "${pattern_blob}")" + + # Eliminate all newlines to be able to search the entire body as one unit. + if od "${od_options[@]}" "${main_blob}" | \ + tr -d '\n' | + grep -q -F "${pattern}"; then + return 0 + fi + + return 1 +} + +# This function accepts two arguments, names of the two ELF files. +# +# The files are searched for test RMA public key patterns - x25519 or p256, +# both files are supposed to have pattern of one of these keys and not the +# other. If this holds true the function prints the public key base name. If +# not both files include the same key, or include more than one key, the +# function reports failure and exits the script. +determine_rma_key_base() { + if [[ $# -ne 3 ]]; then + die "Usage: determine_rma_key_base " + fi + + local rma_key_dir="$1" + local elfs=( "$2" "$3" ) + local base_name="${rma_key_dir}/rma_key_blob" + local curve + local curves=( "x25519" "p256" ) + local elf + local key_file + local mask=1 + local result=0 + local rma_key_base + + for curve in "${curves[@]}"; do + key_file="${base_name}.${curve}.test" + for elf in "${elfs[@]}"; do + if find_blob_in_blob "${elf}" "${key_file}"; then + : $(( result |= mask )) + fi + : $(( mask <<= 1 )) + done + done + + case "${result}" in + (3) curve="x25519";; + (12) curve="p256";; + (*) die "could not determine key type in the ELF files";; + esac + + echo "${base_name}.${curve}" +} + +# Sign GSC RW firmware ELF images into a combined GSC firmware image +# using the provided production keys and manifests. +sign_rw() { + if [[ $# -ne 9 ]]; then + die "Usage: sign_rw " \ + " " + fi + + local key_file="$1" + local manifest_file="$2" + local fuses_file="$3" + local rma_key_dir="$4" + local rws=( "$5" "$6" ) + local result_file="$7" + local generation="$8" + local image_base="$9" + local base_name + local rma_key_base="" + local signer_command_params + local temp_dir + + temp_dir="$(make_temp_dir)" + signer_command_params=(-x "${fuses_file}" --key "${key_file}") + + case "${generation}" in + (h) + # H1 image might require some tweaking. + # If signing a chip factory image (version 0.0.22) do not try figuring + # out the RMA keys. + local gsc_version + + gsc_version="$(jq '.epoch * 10000 + .major * 100 + .minor' \ + "${manifest_file}")" + + if [[ "${gsc_version}" != "22" ]]; then + rma_key_base="$(determine_rma_key_base "${rma_key_dir}" "${rws[@]}")" + else + warn "Ignoring RMA keys for factory branch ${gsc_version}" + fi + + # Swap test public RMA server key with the prod version. + if [[ -n "${rma_key_base}" ]]; then + signer_command_params+=( + --swap "${rma_key_base}.test,${rma_key_base}.prod" + ) + fi + + # Indicate H1 signing. + signer_command_params+=( "--b" ) + base_name="cr50" + ;; + (d) + # Indicate D1 signing. + signer_command_params+=( "--dauntless" "--ihex" ) + base_name="ti50" + ;; + (*) + die "Unknown generation value \"${generation}\"" + ;; + esac + + signer_command_params+=(--json "${manifest_file}") + + + if [[ "${FLAGS_override_keyid}" == "${FLAGS_TRUE}" ]]; then + signer_command_params+=(--override-keyid) + fi + + for rw in "${rws[@]}"; do + local hex_signed="${temp_dir}/hex_signed" + local bin_signed="${temp_dir}/bin_signed" + local hex_base + + # Make sure output files are not owned by root. + touch "${bin_signed}" "${hex_signed}" + if ! gsc-codesigner "${signer_command_params[@]}" \ + -i "${rw}" -o "${hex_signed}"; then + die "gsc-codesigner ${signer_command_params[*]}" \ + "-i ${rw} -o ${hex_signed} failed" + fi + + if ! objcopy -I ihex "${hex_signed}" -O binary "${bin_signed}"; then + die "Failed to convert ${rw} from hex to bin" + fi + + if [[ -n "${rma_key_base}" ]]; then + if find_blob_in_blob "${bin_signed}" "${rma_key_base}.test"; then + die "test RMA key in the signed image!" + fi + + if ! find_blob_in_blob "${bin_signed}" "${rma_key_base}.prod"; then + die "prod RMA key not in the signed image!" + fi + fi + + hex_base="$(get_hex_base "${hex_signed}")" + paste_bin "${result_file}" "${bin_signed}" "${image_base}" "${hex_base}" + done + + if strings "${rw}" | grep -q "DBG/${base_name}"; then + die "Will not sign debug image with prod keys" + fi + +} + +# A very crude RO verification function. The key signature found at a fixed +# offset into the RO blob must match the RO type. Prod keys have bit D2 set to +# one, dev keys have this bit set to zero. +# +# The check is bypassed if the key file directory name includes string 'test'. +verify_ro() { + if [[ $# -ne 2 ]]; then + die "Usage: verify_ro " + fi + + local ro_bin="$1" + local key_file="$2" + local key_byte + local key_path + + if [[ ! -f "${ro_bin}" ]]; then + die "${ro_bin} not a file!" + fi + + key_path="$(dirname "${key_file}")" + if [[ ${key_path##*/} == *"test"* ]]; then + info "Test run, ignoring key type verification" + return 0 + fi + + # Key signature's lowest byte is byte #5 in the line at offset 0001a0. + key_byte="$(od -Ax -t x1 -v "${ro_bin}" | awk '/0001a0/ {print $6}')" + case "${key_byte}" in + (?[4567cdef]) + return 0 + ;; + esac + + die "RO key (${key_byte}) in ${ro_bin} does not match type prod" +} + +# This function prepares a full GSC image, consisting of two ROs and two RWs +# placed at their respective offsets into the resulting blob. It invokes the +# bs (binary signer) script to actually convert ELF versions of RWs into +# binaries and sign them. +# +# The signed image is placed in the directory named as concatenation of RO and +# RW version numbers and board ID fields, if set to non-default. The ebuild +# downloading the tarball from the BCS expects the image to be in that +# directory. +sign_gsc_firmware() { + if [[ $# -ne 10 ]]; then + die "Usage: sign_gsc_firmware " \ + " " + fi + + local key_file="$1" + local manifest_file="$2" + local fuses_file="$3" + local rma_key_dir="$4" + local ro_a_hex="$5" + local ro_b_hex="$6" + local rw_a="$7" + local rw_b="$8" + local output_file="$9" + local generation="${10}" + local temp_dir + local chip_name + + temp_dir="$(make_temp_dir)" + + case "${generation}" in + (h) + # H1 flash size, image size must match. + IMAGE_SIZE="$(( 512 * 1024 ))" + IMAGE_BASE="0x40000" + chip_name="cr50" + ;; + (d) + # D2 flash size, image size must match. + IMAGE_SIZE="$(( 1024 * 1024 ))" + IMAGE_BASE="0x80000" + chip_name="ti50" + ;; + esac + + verify_and_prepare_gsc_manifest "${manifest_file}" + + dd if=/dev/zero bs="${IMAGE_SIZE}" count=1 status=none | + tr '\000' '\377' > "${output_file}" + if [[ "$(stat -c '%s' "${output_file}")" != "${IMAGE_SIZE}" ]]; then + die "Failed creating ${output_file}" + fi + + if ! sign_rw "${key_file}" "${manifest_file}" "${fuses_file}" \ + "${rma_key_dir}" "${rw_a}" "${rw_b}" \ + "${output_file}" "${generation}" "${IMAGE_BASE}"; then + die "Failed invoking sign_rw for ${rw_a} and ${rw_b}" + fi + + local f + for f in "${ro_a_hex}" "${ro_b_hex}"; do + local hex_base + local bin + + hex_base="$(get_hex_base "${f}")" + bin="${temp_dir}/bin" + + if [[ -z ${hex_base} ]]; then + die "Failed retrieving base address from ${f}" + fi + + if ! objcopy -I ihex "${f}" -O binary "${bin}"; then + die "Failed to convert ${f} from hex to bin" + fi + if [[ "${generation}" == "h" ]]; then + verify_ro "${bin}" "${key_file}" + fi + + paste_bin "${output_file}" "${bin}" "${IMAGE_BASE}" "${hex_base}" + done + + # Tell the signer how to rename the @CHIP@ portion of the output. + echo "${chip_name}" > "${output_file}.rename" + + info "Image successfully signed to ${output_file}" +} + +# Sign the directory holding GSC firmware. +sign_gsc_firmware_dir() { + if [[ $# -ne 3 ]]; then + die "Usage: sign_gsc_firmware_dir " + fi + + local input="${1%/}" + local key_dir="$2" + local output="$3" + local generation + local rw_a + local rw_b + local manifest_source + local manifest_file + local key_file + local base_name + + manifest_source="${input}/prod.json" + manifest_file="${manifest_source}.updated" + + # Verify signing manifest. + jq . < "${manifest_source}" > "${manifest_file}" || \ + die "basic validation of ${manifest_source} failed" + + + # Retrieve chip type from the manifest, if present, otherwise use h1. + generation="$(jq ".generation" "${input}/prod.json" | sed 's/"//g')" + case "${generation}" in + (h|null) + generation="h" + base_name="cr50" + rw_a="${input}/ec.RW.elf" + rw_b="${input}/ec.RW_B.elf" + ;; + (d) + base_name="ti50" + rw_a="${input}/rw_A.hex" + rw_b="${input}/rw_B.hex" + ;; + (*) + die "Unknown generation value \"${generation}\" in signing manifest" + ;; + esac + + key_file="${key_dir}/${base_name}.pem" + if [[ ! -e "${key_file}" ]]; then + die "Missing key file: ${key_file}" + fi + + if [[ -d "${output}" ]]; then + output="${output}/${base_name}.bin.prod" + fi + + sign_gsc_firmware \ + "${key_file}" \ + "${manifest_file}" \ + "${input}/fuses.xml" \ + "${input}" \ + "${input}/prod.ro.A" \ + "${input}/prod.ro.B" \ + "${rw_a}" \ + "${rw_b}" \ + "${output}" \ + "${generation}" +} + +main() { + if [[ $# -ne 3 ]]; then + flags_help + exit 1 + fi + + local input="${1%/}" + local key_dir="$2" + local output="$3" + + local signing_instructions="${input}/signing_instructions.sh" + + if [[ -f ${signing_instructions} ]]; then + . "${signing_instructions}" + else + die "${signing_instructions} not found" + fi + + if [[ ! -d "${input}" ]]; then + die "Missing input directory: ${input}" + fi + + sign_gsc_firmware_dir "${input}" "${key_dir}" "${output}" +} +main "$@" diff --git a/scripts/image_signing/sign_official_build.sh b/scripts/image_signing/sign_official_build.sh new file mode 100755 index 0000000..d35db6f --- /dev/null +++ b/scripts/image_signing/sign_official_build.sh @@ -0,0 +1,1158 @@ +#!/bin/bash + +# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Sign the final build image using the "official" keys. +# +# Prerequisite tools needed in the system path: +# +# futility (from src/platform/vboot_reference) +# verity (from src/platform2/verity) +# load_kernel_test (from src/platform/vboot_reference) +# dumpe2fs +# e2fsck +# sha1sum + +MINIOS_KERNEL_GUID="09845860-705f-4bb5-b16c-8a8a099caf52" + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +# Print usage string +usage() { + cat < input_image /path/to/keys/dir [output_image] [version_file] +where is one of: + base (sign a base image) + recovery (sign a USB recovery image) + factory (sign a factory install image) + update_payload (sign a delta update hash) + firmware (sign a firmware image) + verify (verify an image including rootfs hashes) + accessory_usbpd (sign USB-PD accessory firmware) + accessory_rwsig (sign accessory RW firmware) + gsc_firmware (sign a GSC firmware image) + +output_image: File name of the signed output image +version_file: File name of where to read the kernel and firmware versions. + +If you are signing an image, you must specify an [output_image] and +optionally, a [version_file]. + +EOF + if [[ $# -gt 0 ]]; then + error "$*" + exit 1 + fi + exit 0 +} + +# Verify we have as many arguments as we expect, else show usage & quit. +# Usage: +# check_argc +# check_argc +check_argc() { + case $# in + 2) + if [[ $1 -ne $2 ]]; then + usage "command takes exactly $2 args" + fi + ;; + 3) + if [[ $1 -lt $2 || $1 -gt $3 ]]; then + usage "command takes $2 to $3 args" + fi + ;; + *) + die "check_argc: incorrect number of arguments" + esac +} + +# Abort on errors. +set -e + +# Add to the path since some tools reside here and may not be in the non-root +# system path. +PATH=$PATH:/usr/sbin:/sbin + +# Make sure the tools we need are available. +for prereqs in ${FUTILITY} verity load_kernel_test dumpe2fs e2fsck sha1sum; do + type -P "${prereqs}" &>/dev/null || \ + die "${prereqs} tool not found." +done + +TYPE=$1 +INPUT_IMAGE=$2 +KEY_DIR=$3 +OUTPUT_IMAGE=$4 +VERSION_FILE=$5 + +FIRMWARE_VERSION=1 +KERNEL_VERSION=1 + +# TODO(gauravsh): These are duplicated from chromeos-setimage. We need +# to move all signing and rootfs code to one single place where it can be +# reused. crosbug.com/19543 + +# get_verity_arg -> +get_verity_arg() { + echo "$1" | sed -n "s/.*\b$2=\([^ \"]*\).*/\1/p" +} + +# Get the dmparams parameters from a kernel config. +get_dmparams_from_config() { + local kernel_config=$1 + echo ${kernel_config} | sed -nre 's/.*dm="([^"]*)".*/\1/p' +} +# Get the verity root digest hash from a kernel config command line. +get_hash_from_config() { + local kernel_config=$1 + local dm_config=$(get_dmparams_from_config "${kernel_config}") + local vroot_dev=$(get_dm_device "${dm_config}" vroot) + echo $(get_verity_arg "${vroot_dev}" root_hexdigest) +} + +# Get the mapped device and its args. +# Usage: +# get_dm_device $dm_config [vboot|vroot] +# Assumes we have only one mapped device per device. +get_dm_device() { + local dm=$1 + local device=$2 + echo $(echo "${dm}" | sed -nre "s/.*${device}[^,]*,([^,]*).*/\1/p") +} + +# Set the mapped device and its args for a device. +# Usage: +# set_dm_device $dm_config [vboot|vroot] args +# Assumes we have only one mapped device per device. +set_dm_device() { + local dm=$1 + local device=$2 + local args=$3 + echo $(echo "${dm}" | + sed -nre "s#(.*${device}[^,]*,)([^,]*)(.*)#\1${args}\3#p") +} + +CALCULATED_KERNEL_CONFIG= +CALCULATED_DM_ARGS= +# Calculate rootfs hash of an image +# Args: ROOTFS_IMAGE KERNEL_CONFIG HASH_IMAGE +# +# rootfs calculation parameters are grabbed from KERNEL_CONFIG +# +# Updated dm-verity arguments (to be replaced in kernel config command line) +# with the new hash is stored in $CALCULATED_DM_ARGS and the new hash image is +# written to the file HASH_IMAGE. +calculate_rootfs_hash() { + local rootfs_image=$1 + local kernel_config=$2 + local hash_image=$3 + local dm_config=$(get_dmparams_from_config "${kernel_config}") + + if [ -z "${dm_config}" ]; then + warn "Couldn't grab dm_config. Aborting rootfs hash calculation." + return 1 + fi + local vroot_dev=$(get_dm_device "${dm_config}" vroot) + + # Extract the key-value parameters from the kernel command line. + local rootfs_sectors=$(get_verity_arg "${vroot_dev}" hashstart) + local verity_algorithm=$(get_verity_arg "${vroot_dev}" alg) + local root_dev=$(get_verity_arg "${vroot_dev}" payload) + local hash_dev=$(get_verity_arg "${vroot_dev}" hashtree) + local salt=$(get_verity_arg "${vroot_dev}" salt) + + local salt_arg + if [ -n "$salt" ]; then + salt_arg="salt=$salt" + fi + + # Run the verity tool on the rootfs partition. + local table=$(sudo verity mode=create \ + alg=${verity_algorithm} \ + payload="${rootfs_image}" \ + payload_blocks=$((rootfs_sectors / 8)) \ + hashtree="${hash_image}" ${salt_arg}) + # Reconstruct new kernel config command line and replace placeholders. + table="$(echo "${table}" | + sed -s "s|ROOT_DEV|${root_dev}|g;s|HASH_DEV|${hash_dev}|")" + CALCULATED_DM_ARGS="$(set_dm_device "${dm_config}" vroot "${table}")" + CALCULATED_KERNEL_CONFIG="$(echo "${kernel_config}" | + sed -e 's#\(.*dm="\)\([^"]*\)\(".*\)'"#\1${CALCULATED_DM_ARGS}\3#g")" +} + +# Re-calculate rootfs hash, update rootfs and kernel command line(s). +# Args: LOOPDEV KERNEL KERN_A_KEYBLOCK KERN_A_PRIVKEY KERN_B_KEYBLOCK \ +# KERN_B_PRIVKEY +# +# The rootfs is hashed by tool 'verity', and the hash data is stored after the +# rootfs. A hash of those hash data (also known as final verity hash) may be +# contained in kernel 2 or kernel 4 command line. +# +# This function reads dm-verity configuration from KERNEL, rebuilds the rootfs +# hash, and then resigns kernel A & B by their keyblock and private key files. +update_rootfs_hash() { + local loopdev="$1" # Input image. + local loop_kern="$2" # Kernel that contains verity args. + local kern_a_keyblock="$3" # Keyblock file for kernel A. + local kern_a_privkey="$4" # Private key file for kernel A. + local kern_b_keyblock="$5" # Keyblock file for kernel B. + local kern_b_privkey="$6" # Private key file for kernel A. + local loop_rootfs="${loopdev}p3" + + # Note even though there are two kernels, there is one place (after rootfs) + # for hash data, so we must assume both kernel use same hash algorithm (i.e., + # DM config). + info "Updating rootfs hash and updating config for Kernel partitions" + + # If we can't find dm parameters in the kernel config, bail out now. + local kernel_config=$(sudo ${FUTILITY} dump_kernel_config "${loop_kern}") + local dm_config=$(get_dmparams_from_config "${kernel_config}") + if [ -z "${dm_config}" ]; then + error "Couldn't grab dm_config from kernel ${loop_kern}" + error " (config: ${kernel_config})" + return 1 + fi + + # check and clear need_to_resign tag + local rootfs_dir=$(make_temp_dir) + sudo mount -o ro "${loop_rootfs}" "${rootfs_dir}" + if has_needs_to_be_resigned_tag "${rootfs_dir}"; then + # remount as RW + sudo mount -o remount,rw "${rootfs_dir}" + sudo rm -f "${rootfs_dir}/${TAG_NEEDS_TO_BE_SIGNED}" + fi + sudo umount "${rootfs_dir}" + + local hash_image=$(make_temp_file) + + # Disable rw mount support prior to hashing. + disable_rw_mount "${loop_rootfs}" + + if ! calculate_rootfs_hash "${loop_rootfs}" "${kernel_config}" \ + "${hash_image}"; then + error "calculate_rootfs_hash failed!" + error "Aborting rootfs hash update!" + return 1 + fi + + local rootfs_blocks=$(sudo dumpe2fs "${loop_rootfs}" 2> /dev/null | + grep "Block count" | + tr -d ' ' | + cut -f2 -d:) + local rootfs_sectors=$((rootfs_blocks * 8)) + + # Overwrite the appended hashes in the rootfs + sudo dd if="${hash_image}" of="${loop_rootfs}" bs=512 \ + seek=${rootfs_sectors} conv=notrunc 2>/dev/null + + # Update kernel command lines + local dm_args="${CALCULATED_DM_ARGS}" + local temp_config=$(make_temp_file) + local kernelpart= + local keyblock= + local priv_key= + local new_kernel_config= + + for kernelpart in 2 4; do + loop_kern="${loopdev}p${kernelpart}" + if ! new_kernel_config="$( + sudo ${FUTILITY} dump_kernel_config "${loop_kern}" 2>/dev/null)" && + [[ "${kernelpart}" == 4 ]]; then + # Legacy images don't have partition 4. + info "Skipping empty kernel partition 4 (legacy images)." + continue + fi + new_kernel_config="$(echo "${new_kernel_config}" | + sed -e 's#\(.*dm="\)\([^"]*\)\(".*\)'"#\1${dm_args}\3#g")" + info "New config for kernel partition ${kernelpart} is:" + echo "${new_kernel_config}" | tee "${temp_config}" + # Re-calculate kernel partition signature and command line. + if [[ "$kernelpart" == 2 ]]; then + keyblock="${kern_a_keyblock}" + priv_key="${kern_a_privkey}" + else + keyblock="${kern_b_keyblock}" + priv_key="${kern_b_privkey}" + fi + sudo ${FUTILITY} vbutil_kernel --repack "${loop_kern}" \ + --keyblock ${keyblock} \ + --signprivate ${priv_key} \ + --version "${KERNEL_VERSION}" \ + --oldblob "${loop_kern}" \ + --config ${temp_config} + done +} + +# Update the SSD install-able vblock file on stateful partition. +# ARGS: Loopdev +# This is deprecated because all new images should have a SSD boot-able kernel +# in partition 4. However, the signer needs to be able to sign new & old images +# (crbug.com/449450#c13) so we will probably never remove this. +update_stateful_partition_vblock() { + local loopdev="$1" + local temp_out_vb="$(make_temp_file)" + + local loop_kern="${loopdev}p4" + if [[ -z "$(sudo ${FUTILITY} dump_kernel_config "${loop_kern}" 2>/dev/null)" ]]; then + info "Building vmlinuz_hd.vblock from legacy image partition 2." + loop_kern="${loopdev}p2" + fi + + # vblock should always use kernel keyblock. + sudo ${FUTILITY} vbutil_kernel --repack "${temp_out_vb}" \ + --keyblock "${KEY_DIR}/kernel.keyblock" \ + --signprivate "${KEY_DIR}/kernel_data_key.vbprivk" \ + --oldblob "${loop_kern}" \ + --vblockonly + + # Copy the installer vblock to the stateful partition. + local stateful_dir=$(make_temp_dir) + sudo mount "${loopdev}p1" "${stateful_dir}" + sudo cp ${temp_out_vb} ${stateful_dir}/vmlinuz_hd.vblock + sudo umount "${stateful_dir}" +} + +# Do a validity check on the image's rootfs +# ARGS: Image +verify_image_rootfs() { + local rootfs=$1 + # This flips the read-only compatibility flag, so that e2fsck does not + # complain about unknown file system capabilities. + enable_rw_mount "${rootfs}" + info "Running e2fsck to check root file system for errors" + sudo e2fsck -fn "${rootfs}" || + die "Root file system has errors!" + # Flip the bit back so we don't break hashes. + disable_rw_mount "${rootfs}" +} + +# Extracts a firmware updater bundle (for firmware image binaries) file +# (generated by src/platform/firmware/pack_firmware.sh). +# Args: INPUT_FILE OUTPUT_DIR +extract_firmware_bundle() { + local input="$(readlink -f "$1")" + local output_dir="$2" + if [ ! -s "${input}" ]; then + return 1 + elif grep -q '^##CUTHERE##' "${input}"; then + # Bundle supports self-extraction. + "$input" --sb_extract "${output_dir}" || + die "Extracting firmware autoupdate (--sb_extract) failed." + else + # Legacy bundle - try uudecode. + uudecode -o - ${input} | tar -C ${output_dir} -zxf - 2>/dev/null || + die "Extracting firmware autoupdate failed." + fi +} + +# Repacks firmware updater bundle content from given folder. +# Args: INPUT_DIR TARGET_SCRIPT +repack_firmware_bundle() { + local input_dir="$1" + local target="$(readlink -f "$2")" + + if [ ! -s "${target}" ]; then + return 1 + elif grep -q '^##CUTHERE##' "${target}"; then + # Bundle supports repacking. + # Workaround issue crosbug.com/p/33719 + sed -i \ + 's/shar -Q -q -x -m -w/shar -Q -q -x -m --no-character-count/' \ + "${target}" + "$target" --sb_repack "${input_dir}" || + die "Updating firmware autoupdate (--sb_repack) failed." + else + # Legacy bundle using uuencode + tar.gz. + # Replace MD5 checksum in the firmware update payload. + local newfd_checksum="$(md5sum ${input_dir}/bios.bin | cut -f 1 -d ' ')" + local temp_version="$(make_temp_file)" + cat ${input_dir}/VERSION | + sed -e "s#\(.*\)\ \(.*bios.bin.*\)#${newfd_checksum}\ \2#" > ${temp_version} + mv ${temp_version} ${input_dir}/VERSION + + # Re-generate firmware_update.tgz and copy over encoded archive in + # the original shell ball. + sed -ine '/^begin .*firmware_package/,/end/D' "$target" + tar zcf - -C "${input_dir}" . | + uuencode firmware_package.tgz >>"${target}" + fi +} + +# Sign a firmware in-place with the given keys. +# Args: FIRMWARE_IMAGE KEY_DIR FIRMWARE_VERSION [LOEM_OUTPUT_DIR] +sign_firmware() { + local image=$1 + local key_dir=$2 + local firmware_version=$3 + local loem_output_dir=${4:-} + + # Resign the firmware with new keys, also replacing the root and recovery + # public keys in the GBB. + "${SCRIPT_DIR}/sign_firmware.sh" "${image}" "${key_dir}" "${image}" \ + "${firmware_version}" "${loem_output_dir}" + info "Signed firmware image output to ${image}" +} + +# Sign a delta update payload (usually created by paygen). +# Args: INPUT_IMAGE KEY_DIR OUTPUT_IMAGE +sign_update_payload() { + local image=$1 + local key_dir=$2 + local output=$3 + local key_output key_size key_file="${key_dir}/update_key.pem" + # Maps key size to verified boot's algorithm id (for pad_digest_utility). + # Hashing algorithm is always SHA-256. + local algo algos=( + [1024]=1 + [2048]=4 + [4096]=7 + [8192]=10 + ) + + key_output=$(${FUTILITY} show "${key_file}") + key_size=$(echo "${key_output}" | sed -n '/Key length/s/[^0-9]*//p') + algo=${algos[${key_size}]} + if [[ -z ${algo} ]]; then + die "Unknown algorithm: futility output=${key_output}" + fi + + pad_digest_utility ${algo} "${image}" | \ + openssl rsautl -sign -pkcs -inkey "${key_file}" -out "${output}" +} + +# Re-sign the firmware AU payload inside the image rootfs with a new keys. +# Args: LOOPDEV +resign_firmware_payload() { + local loopdev="$1" + + if [ -n "${NO_FWUPDATE}" ]; then + info "Skipping firmware update." + return + fi + + # Grab firmware image from the autoupdate bundle (shellball). + local rootfs_dir=$(make_temp_dir) + mount_loop_image_partition "${loopdev}" 3 "${rootfs_dir}" + local firmware_bundle="${rootfs_dir}/usr/sbin/chromeos-firmwareupdate" + local shellball_dir=$(make_temp_dir) + + # extract_firmware_bundle can fail if the image has no firmware update. + if ! extract_firmware_bundle "${firmware_bundle}" "${shellball_dir}"; then + # Unmount now to prevent changes. + sudo umount "${rootfs_dir}" + info "Didn't find a firmware update. Not signing firmware." + return + fi + info "Found a valid firmware update shellball." + + # For context on signing firmware for unified builds, see: + # go/cros-unibuild-signing + # + # This iterates over a signer_config.csv file, which contains the following: + # output_name,image,key_id (header) + # santa,models/santa/bios.bin,SOME_OEM (sample line) + # + # This dictates what output signature blocks to generate based on what + # keys/binaries. + # + # It reuses the LOEM architecture already existing in the signer keysets, + # but this could be revisited at a future date. + # + # Within signer_config.csv, it uses the key_id column to match the key + # value in loem.ini (if present) and signs the corresponding firmware + # image using that key. + # + # It then outputs the appropriate signature blocks based on the output_name. + # The firmware updater scripts then detects what output_name to use at + # runtime based on the platform. + local signer_config="${shellball_dir}/signer_config.csv" + if [[ -e "${signer_config}" ]]; then + info "Using signer_config.csv to determine firmware signatures" + info "See go/cros-unibuild-signing for details" + { + read # Burn the first line (header line) + while IFS="," read -r output_name bios_image key_id ec_image + do + local key_suffix='' + local extra_args=() + rootkey="${KEY_DIR}/root_key.vbpubk" + + # If there are OEM specific keys available, we're going to use them. + # Otherwise, we're going to ignore key_id from the config file and + # just use the common keys present in the keyset. + # + # The presence of the /keyset subdir in the shellball will indicate + # whether dynamic signature blocks are available or not. + # This is what updater4.sh currently uses to make the decision. + if [[ -e "${KEY_DIR}/loem.ini" ]]; then + # loem.ini has the format KEY_ID_VALUE = KEY_INDEX + local match="$(grep -E "[0-9]+ *= *${key_id}$" "${KEY_DIR}/loem.ini")" + local key_index="$(echo "${match}" | sed 's/ *= *.*$//g')" + info "Detected key index from loem.ini as ${key_index} for ${key_id}" + if [[ -z "${key_index}" ]]; then + die "Failed to find key_id ${key_id} in loem.ini file for " \ + "${output_name}" + fi + key_suffix=".loem${key_index}" + shellball_keyset_dir="${shellball_dir}/keyset" + mkdir -p "${shellball_keyset_dir}" + extra_args+=( + --loemdir "${shellball_keyset_dir}" + --loemid "${output_name}" + ) + rootkey="${KEY_DIR}/root_key${key_suffix}.vbpubk" + cp "${rootkey}" "${shellball_keyset_dir}/rootkey.${output_name}" + fi + + info "Signing firmware image ${bios_image} for ${output_name} " \ + "with key suffix ${key_suffix}" + + local temp_fw=$(make_temp_file) + + local signprivate="${KEY_DIR}/firmware_data_key${key_suffix}.vbprivk" + local keyblock="${KEY_DIR}/firmware${key_suffix}.keyblock" + local devsign="${KEY_DIR}/dev_firmware_data_key${key_suffix}.vbprivk" + local devkeyblock="${KEY_DIR}/dev_firmware${key_suffix}.keyblock" + + if [ ! -e "${devsign}" ] || [ ! -e "${devkeyblock}" ] ; then + echo "No dev firmware keyblock/datakey found. Reusing normal keys." + devsign="${signprivate}" + devkeyblock="${keyblock}" + fi + + # Path to bios.bin. + local bios_path="${shellball_dir}/${bios_image}" + + echo "Before EC signing ${bios_path}: md5 =" \ + $(md5sum ${bios_path} | awk '{print $1}') + + if [ -n "${ec_image}" ]; then + # Path to ec.bin. + local ec_path="${shellball_dir}/${ec_image}" + + # Resign ec.bin. + if is_ec_rw_signed "${ec_path}"; then + local rw_bin="EC_RW.bin" + local rw_hash="EC_RW.hash" + # futility writes byproduct files to CWD, so we cd to temp dir. + pushd "$(make_temp_dir)" > /dev/null + + echo "Signing EC with:" ${FUTILITY} sign --type rwsig --prikey \ + "${KEY_DIR}/key_ec_efs.vbprik2" "${ec_path}" + + ${FUTILITY} sign --type rwsig --prikey \ + "${KEY_DIR}/key_ec_efs.vbprik2" "${ec_path}" \ + || die "Failed to sign ${ec_path}" + # Above command produces EC_RW.bin. Compute its hash. + openssl dgst -sha256 -binary "${rw_bin}" > "${rw_hash}" + # Store EC_RW.bin and its hash in bios.bin. + store_file_in_cbfs "${bios_path}" "${rw_bin}" "ecrw" \ + || die "Failed to store file in ${bios_path}" + store_file_in_cbfs "${bios_path}" "${rw_hash}" "ecrw.hash" \ + || die "Failed to store file in ${bios_path}" + popd > /dev/null + info "Signed EC image output to ${ec_path}" + fi + fi + + echo "After EC signing ${bios_path}: md5 =" \ + $(md5sum ${bios_path} | awk '{print $1}') + + # Resign bios.bin. + echo "Signing Bios with:" ${FUTILITY} sign \ + --signprivate "${signprivate}" \ + --keyblock "${keyblock}" \ + --devsign "${devsign}" \ + --devkeyblock "${devkeyblock}" \ + --kernelkey "${KEY_DIR}/kernel_subkey.vbpubk" \ + --version "${FIRMWARE_VERSION}" \ + "${extra_args[@]}" \ + ${bios_path} \ + ${temp_fw} + ${FUTILITY} sign \ + --signprivate "${signprivate}" \ + --keyblock "${keyblock}" \ + --devsign "${devsign}" \ + --devkeyblock "${devkeyblock}" \ + --kernelkey "${KEY_DIR}/kernel_subkey.vbpubk" \ + --version "${FIRMWARE_VERSION}" \ + "${extra_args[@]}" \ + ${bios_path} \ + ${temp_fw} + + echo "After Bios signing ${temp_fw}: md5 =" \ + $(md5sum ${temp_fw} | awk '{print $1}') + + # For development phases, when the GBB can be updated still, set the + # recovery and root keys in the image. + echo "Setting GBB with:" ${FUTILITY} gbb \ + -s \ + --recoverykey="${KEY_DIR}/recovery_key.vbpubk" \ + --rootkey="${rootkey}" \ + "${temp_fw}" \ + "${bios_path}" + ${FUTILITY} gbb \ + -s \ + --recoverykey="${KEY_DIR}/recovery_key.vbpubk" \ + --rootkey="${rootkey}" \ + "${temp_fw}" \ + "${bios_path}" + + echo "After setting GBB on ${bios_path}: md5 =" \ + $(md5sum ${bios_path} | awk '{print $1}') + + info "Signed firmware image output to ${bios_path}" + done + unset IFS + } < "${signer_config}" + else + local image_file sign_args=() loem_sfx loem_output_dir + for image_file in "${shellball_dir}"/bios*.bin; do + if [[ -e "${KEY_DIR}/loem.ini" ]]; then + # Extract the extended details from "bios.bin" and use that in the + # subdir for the keyset. + loem_sfx=$(sed -r 's:.*/bios([^/]*)[.]bin$:\1:' <<<"${image_file}") + loem_output_dir="${shellball_dir}/keyset${loem_sfx}" + sign_args=( "${loem_output_dir}" ) + mkdir -p "${loem_output_dir}" + fi + sign_firmware "${image_file}" "${KEY_DIR}" "${FIRMWARE_VERSION}" \ + "${sign_args[@]}" + done + fi + + local signer_notes="${shellball_dir}/VERSION.signer" + echo "" >"$signer_notes" + echo "Signed with keyset in $(readlink -f "${KEY_DIR}") ." >>"${signer_notes}" + # record recovery_key + key="${KEY_DIR}/recovery_key.vbpubk" + sha1=$(${FUTILITY} vbutil_key --unpack "${key}" \ + | grep sha1sum | cut -d" " -f9) + echo "recovery: ${sha1}" >>"${signer_notes}" + # record root_key(s) + if [[ -d "${shellball_keyset_dir}" ]]; then + echo "List sha1sum of all loem/model's signatures:" >>"${signer_notes}" + for key in "${shellball_keyset_dir}"/rootkey.*; do + model="${key##*.}" + sha1=$(${FUTILITY} vbutil_key --unpack "${key}" \ + | grep sha1sum | cut -d" " -f9) + echo " ${model}: ${sha1}" >>"${signer_notes}" + done + else + echo "List sha1sum of single key's signature:" >>"${signer_notes}" + key="${KEY_DIR}/root_key.vbpubk" + sha1=$(${FUTILITY} vbutil_key --unpack "${key}" \ + | grep sha1sum | cut -d" " -f9) + echo " root: ${sha1}" >>"${signer_notes}" + fi + + new_shellball=$(make_temp_file) + cp -f "${firmware_bundle}" "${new_shellball}" + chmod a+rx "${new_shellball}" + repack_firmware_bundle "${shellball_dir}" "${new_shellball}" + sudo cp -f "${new_shellball}" "${firmware_bundle}" + sudo chmod a+rx "${firmware_bundle}" + # Unmount now to flush changes. + sudo umount "${rootfs_dir}" + info "Re-signed firmware AU payload in ${loopdev}" +} + +# Remove old container key if it exists. +# We can drop this logic once all devices that shipped R78 have gone EOL. +# So probably in like 2025. +remove_old_container_key() { + local loopdev="$1" + + local rootfs_dir=$(make_temp_dir) + mount_loop_image_partition "${loopdev}" 3 "${rootfs_dir}" + + sudo rm -f "${rootfs_dir}/usr/share/misc/oci-container-key-pub.der" + + sudo umount "${rootfs_dir}" +} + +# Re-sign Android image if exists. +resign_android_image_if_exists() { + local loopdev="$1" + + local rootfs_dir=$(make_temp_dir) + mount_loop_image_partition "${loopdev}" 3 "${rootfs_dir}" + + local system_img="$(echo "${rootfs_dir}"/opt/google/*/android/system.raw.img)" + local arc_version=$(grep CHROMEOS_ARC_VERSION= \ + "${rootfs_dir}/etc/lsb-release" | cut -d= -f2) + if [[ ! -e "${system_img}" || -z "${arc_version}" ]]; then + info "ARC image not found. Not signing Android APKs." + sudo umount "${rootfs_dir}" + return + fi + + info "Found ARC image version '${arc_version}', re-signing APKs." + # TODO(crbug.com/1141907): remove set -x and set +x below. + set -x + "${SCRIPT_DIR}/sign_android_image.sh" "${rootfs_dir}" "${KEY_DIR}/android" + + if ! sudo umount "${rootfs_dir}"; then + error "umount ${rootfs_dir} failed" + sudo lsof -n "${rootfs_dir}" + ps auxf + set +x + return 1 + fi + info "Re-signed Android image" + set +x +} + +# Sign UEFI binaries, if possible. +# Args: LOOPDEV +sign_uefi_binaries() { + local loopdev="$1" + local efi_glob="*.efi" + + if [[ ! -d "${KEY_DIR}/uefi" ]]; then + return 0 + fi + + local esp_dir + if ! esp_dir="$(mount_image_esp "${loopdev}")"; then + error "Could not mount EFI partition for signing UEFI binaries" + return 1 + elif [[ -z "${esp_dir}" ]]; then + return 0 + fi + # TODO(b/199136347): First class this as an arg and pass from config + # in the signing repo. This is a temporary fix to unblock reven-release. + if [[ "${KEY_DIR}" != *"Reven"* ]]; then + "${SCRIPT_DIR}/install_gsetup_certs.sh" "${esp_dir}" "${KEY_DIR}/uefi" + else + # b/205145491: the reven board's boot*.efi files are already signed, + # change the glob so that they don't get resigned. + efi_glob="grub*.efi" + fi + "${SCRIPT_DIR}/sign_uefi.sh" "${esp_dir}" "${KEY_DIR}/uefi" "${efi_glob}" + sudo umount "${esp_dir}" + + local rootfs_dir="$(make_temp_dir)" + mount_loop_image_partition "${loopdev}" 3 "${rootfs_dir}" + "${SCRIPT_DIR}/sign_uefi.sh" "${rootfs_dir}/boot" "${KEY_DIR}/uefi" \ + "${efi_glob}" + sudo umount "${rootfs_dir}" + + info "Signed UEFI binaries" + return 0 +} + +# Verify the signatures of UEFI binaries. +# Args: LOOPDEV +verify_uefi_signatures() { + local loopdev="$1" + local succeeded=1 + + if [[ ! -d "${KEY_DIR}/uefi" ]]; then + return 0 + fi + + local esp_dir + if ! esp_dir="$(mount_image_esp "${loopdev}")"; then + error "Could not mount EFI partition for verifying UEFI signatures" + return 1 + elif [[ -z "${esp_dir}" ]]; then + return 0 + fi + "${SCRIPT_DIR}/verify_uefi.sh" "${esp_dir}" "${esp_dir}" \ + "${KEY_DIR}/uefi" || succeeded=0 + + local rootfs_dir="$(make_temp_dir)" + mount_loop_image_partition_ro "${loopdev}" 3 "${rootfs_dir}" + "${SCRIPT_DIR}/verify_uefi.sh" "${rootfs_dir}/boot" "${esp_dir}" \ + "${KEY_DIR}/uefi" || succeeded=0 + sudo umount "${rootfs_dir}" + + sudo umount "${esp_dir}" + + if [[ "${succeeded}" == "0" ]]; then + die "UEFI signature verification failed" + fi +} + +# Sign a GSC firmware image with the given keys. +# Args: CONTAINER KEY_DIR [OUTPUT_CONTAINER] +sign_gsc_firmware() { + local image=$1 + local key_dir=$2 + local output=$3 + + "${SCRIPT_DIR}/sign_gsc_firmware.sh" \ + "${image}" "${key_dir}" "${output}" +} + +# Verify an image including rootfs hash using the specified keys. +verify_image() { + local loopdev=$(loopback_partscan "${INPUT_IMAGE}") + local loop_rootfs="${loopdev}p3" + + info "Verifying RootFS hash..." + # What we get from image. + local kernel_config + # What we calculate from the rootfs. + local new_kernel_config + # Depending on the type of image, the verity parameters may + # exist in either kernel partition 2 or kernel partition 4 + local partnum + for partnum in 2 4; do + info "Considering Kernel partition ${partnum}" + kernel_config=$(sudo ${FUTILITY} dump_kernel_config "${loopdev}p${partnum}") + local hash_image=$(make_temp_file) + if ! calculate_rootfs_hash "${loop_rootfs}" "${kernel_config}" \ + "${hash_image}"; then + info "Trying next kernel partition." + continue + fi + new_kernel_config="$CALCULATED_KERNEL_CONFIG" + break + done + + # Note: If calculate_rootfs_hash succeeded above, these should + # be non-empty. + expected_hash=$(get_hash_from_config "${new_kernel_config}") + got_hash=$(get_hash_from_config "${kernel_config}") + + if [ -z "${expected_hash}" ] || [ -z "${got_hash}" ]; then + die "Couldn't verify RootFS hash on the image." + fi + + if [ ! "${got_hash}" = "${expected_hash}" ]; then + cat </dev/null 2>&1 && \ + echo "YES"; } || echo "NO" + echo -n "With Recovery Key (Recovery Mode ON, Dev Mode ON): " && \ + { load_kernel_test "${INPUT_IMAGE}" "${try_key}" -b 3 >/dev/null 2>&1 && \ + echo "YES"; } || echo "NO" + + try_key=${KEY_DIR}/kernel_subkey.vbpubk + # The SSD key is only used in non-recovery mode. + echo -n "With SSD Key (Recovery Mode OFF, Dev Mode OFF): " && \ + { load_kernel_test "${INPUT_IMAGE}" "${try_key}" -b 0 >/dev/null 2>&1 && \ + echo "YES"; } || echo "NO" + echo -n "With SSD Key (Recovery Mode OFF, Dev Mode ON): " && \ + { load_kernel_test "${INPUT_IMAGE}" "${try_key}" -b 1 >/dev/null 2>&1 && \ + echo "YES"; } || echo "NO" + set -e + + verify_image_rootfs "${loop_rootfs}" + + verify_uefi_signatures "${INPUT_IMAGE}" + + # TODO(gauravsh): Check embedded firmware AU signatures. +} + +# Re-calculate recovery kernel hash. +# Args: LOOPDEV +update_recovery_kernel_hash() { + local loopdev="$1" + local loop_kerna="${loopdev}p2" + local loop_kernb="${loopdev}p4" + + # Update the Kernel B hash in Kernel A command line + local old_kerna_config="$(sudo ${FUTILITY} \ + dump_kernel_config "${loop_kerna}")" + local old_kernb_hash="$(echo "$old_kerna_config" | + sed -nEe "s#.*kern_b_hash=([a-z0-9]*).*#\1#p")" + if [[ "${#old_kernb_hash}" -lt 64 ]]; then + local new_kernb_hash=$(sudo sha1sum "${loop_kernb}" | cut -f1 -d' ') + else + local new_kernb_hash=$(sudo sha256sum "${loop_kernb}" | cut -f1 -d' ') + fi + + new_kerna_config=$(make_temp_file) + echo "$old_kerna_config" | + sed -e "s#\(kern_b_hash=\)[a-z0-9]*#\1${new_kernb_hash}#" \ + > ${new_kerna_config} + info "New config for kernel partition 2 is" + cat ${new_kerna_config} + + # Re-calculate kernel partition signature and command line. + sudo ${FUTILITY} vbutil_kernel --repack "${loop_kerna}" \ + --keyblock ${KEY_DIR}/recovery_kernel.keyblock \ + --signprivate ${KEY_DIR}/recovery_kernel_data_key.vbprivk \ + --version "${KERNEL_VERSION}" \ + --oldblob "${loop_kerna}" \ + --config ${new_kerna_config} +} + +# Re-sign miniOS kernels with new keys. +# Args: LOOPDEV KEYBLOCK PRIVKEY +resign_minios_kernels() { + local loopdev="$1" + local keyblock="$2" + local priv_key="$3" + + info "Searching for miniOS kernels to resign..." + + local loop_minios + for loop_minios in "${loopdev}p"*; do + local part_type_guid + part_type_guid=$(sudo lsblk -rnb -o PARTTYPE "${loop_minios}") + if [[ "${part_type_guid}" != "${MINIOS_KERNEL_GUID}" ]]; then + continue + fi + + # Skip miniOS partitions which are empty. This happens when miniOS + # kernels aren't written to the partitions because the feature is not + # enabled. + if ! sudo "${FUTILITY}" dump_kernel_config "${loop_minios}"; then + info "Skipping empty miniOS partition ${loop_minios}." + continue + fi + + # Delay checking that keyblock and private key exist until we are certain + # of a valid miniOS partition. Images that don't support miniOS might not + # provide these. (This check is repeated twice, but that's okay.) + if [[ ! -e "${keyblock}" ]]; then + error "Resign miniOS: keyblock doesn't exist: ${keyblock}" + return 1 + fi + if [[ ! -e "${priv_key}" ]]; then + error "Resign miniOS: private key doesn't exist: ${priv_key}" + return 1 + fi + + # Assume this is a miniOS kernel. + local minios_kernel_version=$((KERNEL_VERSION >> 24)) + if sudo ${FUTILITY} vbutil_kernel --repack "${loop_minios}" \ + --keyblock "${keyblock}" \ + --signprivate "${priv_key}" \ + --version "${minios_kernel_version}" \ + --oldblob "${loop_minios}"; then + info "Resign miniOS ${loop_minios}: done" + else + error "Resign miniOS ${loop_minios}: failed" + return 1 + fi + done +} + +# Update the legacy bootloader templates in EFI partition if available. +# Args: LOOPDEV KERNEL +update_legacy_bootloader() { + local loopdev="$1" + local loop_kern="$2" + + local esp_dir + if ! esp_dir="$(mount_image_esp "${loopdev}")"; then + error "Could not mount EFI partition for updating legacy bootloader cfg." + return 1 + elif [[ -z "${esp_dir}" ]]; then + info "Not updating legacy bootloader configs: ${loopdev}" + return 0 + fi + + # If we can't find the dm parameter in the kernel config, bail out now. + local kernel_config=$(sudo ${FUTILITY} dump_kernel_config "${loop_kern}") + local root_hexdigest="$(get_hash_from_config "${kernel_config}")" + if [[ -z "${root_hexdigest}" ]]; then + error "Couldn't grab root_digest from kernel partition ${loop_kern}" + error " (config: ${kernel_config})" + return 1 + fi + # Update syslinux configs for legacy BIOS systems. + if [[ -d "${esp_dir}/syslinux" ]]; then + local cfg=("${esp_dir}"/syslinux/*.cfg) + if ! sudo sed -i -r \ + "s/\broot_hexdigest=[a-z0-9]+/root_hexdigest=${root_hexdigest}/g" \ + "${cfg[@]}"; then + error "Updating syslinux configs failed: '${cfg[*]}'" + return 1 + fi + fi + # Update grub configs for EFI systems. + local grub_cfg="${esp_dir}/efi/boot/grub.cfg" + if [[ -f "${grub_cfg}" ]]; then + if ! sudo sed -i -r \ + "s/\broot_hexdigest=[a-z0-9]+/root_hexdigest=${root_hexdigest}/g" \ + "${grub_cfg}"; then + error "Updating grub config failed: '${grub_cfg}'" + return 1 + fi + fi +} + +# Sign an image file with proper keys. +# Args: IMAGE_TYPE INPUT OUTPUT DM_PARTNO KERN_A_KEYBLOCK KERN_A_PRIVKEY \ +# KERN_B_KEYBLOCK KERN_B_PRIVKEY MINIOS_KEYBLOCK MINIOS_PRIVKEY +# +# A ChromiumOS image file (INPUT) always contains 2 partitions (kernel A & B). +# This function will rebuild hash data by DM_PARTNO, resign kernel partitions by +# their KEYBLOCK and PRIVKEY files, and then write to OUTPUT file. Note some +# special images (specified by IMAGE_TYPE, like 'recovery' or 'factory_install') +# may have additional steps (ex, tweaking verity hash or not stripping files) +# when generating output file. +sign_image_file() { + local image_type="$1" + local input="$2" + local output="$3" + local dm_partno="$4" + local kernA_keyblock="$5" + local kernA_privkey="$6" + local kernB_keyblock="$7" + local kernB_privkey="$8" + local minios_keyblock="$9" + local minios_privkey="${10}" + + info "Preparing ${image_type} image..." + cp --sparse=always "${input}" "${output}" + + local loopdev=$(loopback_partscan "${output}") + local loop_kern="${loopdev}p${dm_partno}" + local loop_rootfs="${loopdev}p3" + + resign_firmware_payload "${loopdev}" + remove_old_container_key "${loopdev}" + resign_android_image_if_exists "${loopdev}" + sign_uefi_binaries "${loopdev}" + # We do NOT strip /boot for factory installer, since some devices need it to + # boot EFI. crbug.com/260512 would obsolete this requirement. + # + # We also do NOT strip /boot for legacy BIOS or EFI devices. This is because + # "cros_installer postinst" on BIOS or EFI systems relies on presence of + # /boot in rootfs to update kernel. We infer the BIOS type from the kernel + # config. + local loop_kerna="${loopdev}p2" + local kerna_config="$(sudo ${FUTILITY} dump_kernel_config "${loop_kerna}")" + if [[ "${image_type}" != "factory_install" && + " ${kerna_config} " != *" cros_legacy "* && + " ${kerna_config} " != *" cros_efi "* ]]; then + "${SCRIPT_DIR}/strip_boot_from_image.sh" --image "${loop_rootfs}" + fi + update_rootfs_hash "${loopdev}" "${loop_kern}" \ + "${kernA_keyblock}" "${kernA_privkey}" \ + "${kernB_keyblock}" "${kernB_privkey}" + update_stateful_partition_vblock "${loopdev}" + if [[ "${image_type}" == "recovery" ]]; then + update_recovery_kernel_hash "${loopdev}" + fi + if ! resign_minios_kernels "${loopdev}" "${minios_keyblock}" \ + "${minios_privkey}"; then + return 1 + fi + if ! update_legacy_bootloader "${loopdev}" "${loop_kern}"; then + # Error is already logged. + return 1 + fi + info "Signed ${image_type} image output to ${output}" +} + +# Verification +case ${TYPE} in +dump_config) + check_argc $# 2 + loopdev=$(loopback_partscan "${INPUT_IMAGE}") + for partnum in 2 4; do + info "kernel config in partition number ${partnum}:" + sudo ${FUTILITY} dump_kernel_config "${loopdev}p${partnum}" + echo + done + exit 0 + ;; +verify) + check_argc $# 2 + verify_image + exit 0 + ;; +*) + # All other signing commands take 4 to 5 args. + if [ -z "${OUTPUT_IMAGE}" ]; then + # Friendlier message. + usage "Missing output image name" + fi + check_argc $# 4 5 + ;; +esac + +# If a version file was specified, read the firmware and kernel +# versions from there. +if [ -n "${VERSION_FILE}" ]; then + FIRMWARE_VERSION=$(sed -n 's#^firmware_version=\(.*\)#\1#pg' ${VERSION_FILE}) + KERNEL_VERSION=$(sed -n 's#^kernel_version=\(.*\)#\1#pg' ${VERSION_FILE}) +fi +info "Using firmware version: ${FIRMWARE_VERSION}" +info "Using kernel version: ${KERNEL_VERSION}" + +# Make all modifications on output copy. +if [[ "${TYPE}" == "base" ]]; then + sign_image_file "base" "${INPUT_IMAGE}" "${OUTPUT_IMAGE}" 2 \ + "${KEY_DIR}/kernel.keyblock" \ + "${KEY_DIR}/kernel_data_key.vbprivk" \ + "${KEY_DIR}/kernel.keyblock" \ + "${KEY_DIR}/kernel_data_key.vbprivk" \ + "${KEY_DIR}/minios_kernel.keyblock" \ + "${KEY_DIR}/minios_kernel_data_key.vbprivk" +elif [[ "${TYPE}" == "recovery" ]]; then + sign_image_file "recovery" "${INPUT_IMAGE}" "${OUTPUT_IMAGE}" 4 \ + "${KEY_DIR}/recovery_kernel.keyblock" \ + "${KEY_DIR}/recovery_kernel_data_key.vbprivk" \ + "${KEY_DIR}/kernel.keyblock" \ + "${KEY_DIR}/kernel_data_key.vbprivk" \ + "${KEY_DIR}/minios_kernel.keyblock" \ + "${KEY_DIR}/minios_kernel_data_key.vbprivk" +elif [[ "${TYPE}" == "factory" ]]; then + sign_image_file "factory_install" "${INPUT_IMAGE}" "${OUTPUT_IMAGE}" 2 \ + "${KEY_DIR}/installer_kernel.keyblock" \ + "${KEY_DIR}/installer_kernel_data_key.vbprivk" \ + "${KEY_DIR}/kernel.keyblock" \ + "${KEY_DIR}/kernel_data_key.vbprivk" \ + "${KEY_DIR}/minios_kernel.keyblock" \ + "${KEY_DIR}/minios_kernel_data_key.vbprivk" +elif [[ "${TYPE}" == "firmware" ]]; then + if [[ -e "${KEY_DIR}/loem.ini" ]]; then + die "LOEM signing not implemented yet for firmware images" + fi + cp ${INPUT_IMAGE} ${OUTPUT_IMAGE} + sign_firmware ${OUTPUT_IMAGE} ${KEY_DIR} ${FIRMWARE_VERSION} +elif [[ "${TYPE}" == "update_payload" ]]; then + sign_update_payload ${INPUT_IMAGE} ${KEY_DIR} ${OUTPUT_IMAGE} +elif [[ "${TYPE}" == "accessory_usbpd" ]]; then + KEY_NAME="${KEY_DIR}/key_$(basename $(dirname ${INPUT_IMAGE}))" + if [[ ! -e "${KEY_NAME}.pem" ]]; then + KEY_NAME="${KEY_DIR}/key" + fi + cp "${INPUT_IMAGE}" "${OUTPUT_IMAGE}" + ${FUTILITY} sign --type usbpd1 --pem "${KEY_NAME}.pem" "${OUTPUT_IMAGE}" +elif [[ "${TYPE}" == "accessory_rwsig" ]]; then + # If one key is present in this container, assume it's the right one. + # See crbug.com/863464 + if [[ ! -e "${KEY_NAME}.vbprik2" ]]; then + KEYS=( "${KEY_DIR}"/*.vbprik2 ) + if [[ ${#KEYS[@]} -eq 1 ]]; then + KEY_NAME="${KEYS[0]}" + else + die "Expected exactly one key present in keyset for accessory_rwsig" + fi + fi + cp "${INPUT_IMAGE}" "${OUTPUT_IMAGE}" + ${FUTILITY} sign --type rwsig --prikey "${KEY_NAME}" \ + --version "${FIRMWARE_VERSION}" "${OUTPUT_IMAGE}" +elif [[ "${TYPE}" == "gsc_firmware" ]]; then + sign_gsc_firmware "${INPUT_IMAGE}" "${KEY_DIR}" "${OUTPUT_IMAGE}" +else + die "Invalid type ${TYPE}" +fi diff --git a/scripts/image_signing/sign_psp_verstagebl_fw.sh b/scripts/image_signing/sign_psp_verstagebl_fw.sh new file mode 100755 index 0000000..9d7fd87 --- /dev/null +++ b/scripts/image_signing/sign_psp_verstagebl_fw.sh @@ -0,0 +1,162 @@ +#!/bin/bash +# Copyright 2020 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Abort on error. +set -e -o pipefail + +# Determine script directory. +SCRIPT_DIR=$(dirname "$0") + +# Load common constants and variables. +. "${SCRIPT_DIR}/common.sh" + +usage() { + cat < + +Signs with keys in . Outputs signed firmware to +. The and paths should not +be the same. + +For detail, reference the AMD documentation titled "OEM PSP VERSTAGE +BL FW Signing Key Pair Generation and Certificate Request Process" +http://dr/corp/drive/folders/1ySJyDgbH73W1lqrhxMvM9UYl5TtJt_mw + +EOF + + if [[ $# -ne 0 ]]; then + echo "$*" >&2 + exit 1 + else + exit 0 + fi +} + +# Check the arguments to make sure we have the correct number. +if [[ $# -lt 3 ]]; then + usage "Error: Too few arguments" +fi +if [[ $# -gt 3 ]]; then + usage "Error: Too many arguments" +fi + +read_byte() { + local position="$1" + local file="$2" + + dd if="${file}" bs=1 count=1 skip="$((16#${position}))" status=none | + hexdump -e '/1 "%X"' +} + +write_byte() { + local position="$1" + local value="$2" + local file="$3" + + printf "\x${value}" | + dd of="${file}" bs=1 count=1 seek="${position}" conv=notrunc status=none +} + +read_dword_le() { + local position + position=$(printf -- "%d" "$1") + local file="$2" + read_byte "${position}" "${file}" + read_byte $((position + 1)) "${file}" + read_byte $((position + 2)) "${file}" + read_byte $((position + 3)) +} + +write_dword_le() { + local position + position=$(printf -- "%d" "$1") + local value + value=$(printf -- "%08x" "$2") + local file="$3" + + write_byte "${position}" "${value:6:2}" "$file" + write_byte $((position + 1)) "${value:4:2}" "$file" + write_byte $((position + 2)) "${value:2:2}" "$file" + write_byte $((position + 3)) "${value:0:2}" "$file" +} + +filesize() { + local file="$1" + stat -c %s -- "${file}" +} + +copy_key_id() { + local input_file="$1" + local input_offset + input_offset=$(printf -- "%d" "$2") + local output_file="$3" + local output_offset + output_offset=$(printf -- "%d" "$4") + + local id_size=16 + + dd if="${input_file}" skip="${input_offset}" \ + of="${output_file}" seek="${output_offset}" \ + bs=1 count="${id_size}" conv=notrunc status=none +} + +KEYNAME=psp_verstagebl_fw_signing + +main() { + local input_firmware="$1" + local key_dir="$2" + local output_firmware="$3" + + if [[ "${input_firmware}" == "${output_firmware}" ]]; then + usage "Error: input and output files must not be the same" + fi + + local amd_key="${key_dir}/${KEYNAME}.stkn" + local hashtype + local sig_size + local temp_sig + local temp_fw + local fw_size + local image_size + + temp_sig=$(make_temp_file) + temp_fw=$(make_temp_file) + + # TODO: Differentiate sizes for Picasso vs later chips + hashtype="-sha256" + sig_size=256 + + fw_size="$(($(filesize "${input_firmware}")))" + fw_minus_header_size="$((fw_size - 256))" + image_size="$((fw_size + sig_size))" + + cp "${input_firmware}" "${temp_fw}" + + # Refer to Appendix D in the AMD BIOS Signing Key Pair and Certification + # Process document for what needs to be changed in the psp_verstage header. + write_dword_le "0x14" "${fw_minus_header_size}" "${temp_fw}" + write_dword_le "0x30" "1" "${temp_fw}" + write_dword_le "0x6c" "${image_size}" "${temp_fw}" + + # TODO: Need the PSP verstage signing token from AMD to verify. + copy_key_id "${amd_key}" "0x04" "${temp_fw}" "0x38" + + local cmd=( + openssl dgst + "${hashtype}" + -sign "${key_dir}/${KEYNAME}.pem" + -sigopt rsa_padding_mode:pss + -sigopt rsa_pss_saltlen:-1 + -out "${temp_sig}" + ) + + "${cmd[@]}" "${temp_fw}" + + cat "${temp_fw}" "${temp_sig}" >"${output_firmware}" + + echo "Complete" +} + +main "$@" diff --git a/scripts/image_signing/sign_uefi.sh b/scripts/image_signing/sign_uefi.sh new file mode 100755 index 0000000..a053a4a --- /dev/null +++ b/scripts/image_signing/sign_uefi.sh @@ -0,0 +1,113 @@ +#!/bin/bash +# Copyright 2018 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +. "$(dirname "$0")/common.sh" + +set -e + +usage() { + cat </dev/null; then + die "Cannot sign UEFI binaries (sbattach not found)." + fi + if ! type -P sbsign &>/dev/null; then + die "Cannot sign UEFI binaries (sbsign not found)." + fi + if ! type -P sbverify &>/dev/null; then + die "Cannot sign UEFI binaries (sbverify not found)." + fi + + local bootloader_dir="${target_dir}/efi/boot" + local syslinux_dir="${target_dir}/syslinux" + local kernel_dir="${target_dir}" + + local verify_cert="${key_dir}/db/db.pem" + if [[ ! -f "${verify_cert}" ]]; then + die "No verification cert: ${verify_cert}" + fi + + local sign_cert="${key_dir}/db/db.children/db_child.pem" + if [[ ! -f "${sign_cert}" ]]; then + die "No signing cert: ${sign_cert}" + fi + + local sign_key="${key_dir}/db/db.children/db_child.rsa" + if [[ ! -f "${sign_key}" ]]; then + die "No signing key: ${sign_key}" + fi + + local working_dir="$(make_temp_dir)" + + local efi_file + # Leave ${efi_glob} unquoted so that globbing occurs. + for efi_file in "${bootloader_dir}"/${efi_glob}; do + if [[ ! -f "${efi_file}" ]]; then + continue + fi + sign_efi_file "${efi_file}" "${working_dir}" \ + "${sign_key}" "${sign_cert}" "${verify_cert}" + done + + local syslinux_kernel_file + for syslinux_kernel_file in "${syslinux_dir}"/vmlinuz.?; do + if [[ ! -f "${syslinux_kernel_file}" ]]; then + continue + fi + sign_efi_file "${syslinux_kernel_file}" "${working_dir}" \ + "${sign_key}" "${sign_cert}" "${verify_cert}" + done + + local kernel_file="$(readlink -f "${kernel_dir}/vmlinuz")" + if [[ -f "${kernel_file}" ]]; then + sign_efi_file "${kernel_file}" "${working_dir}" \ + "${sign_key}" "${sign_cert}" "${verify_cert}" + fi +} + +main "$@" diff --git a/scripts/image_signing/strip_boot_from_image.sh b/scripts/image_signing/strip_boot_from_image.sh new file mode 100755 index 0000000..0f36390 --- /dev/null +++ b/scripts/image_signing/strip_boot_from_image.sh @@ -0,0 +1,66 @@ +#!/bin/bash + +# Copyright (c) 2013 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Script to remove /boot directory from an image. + +# Load common constants. This should be the first executable line. +# The path to common.sh should be relative to your script's location. +. "$(dirname "$0")/common.sh" + +load_shflags + +DEFINE_string image "chromiumos_image.bin" \ + "Input file name of Chrome OS image to strip /boot from, or path to rootfs." + +# Parse command line. +FLAGS "$@" || exit 1 +eval set -- "${FLAGS_ARGV}" + +# Abort on error. +set -e + +# Swiped/modifed from $SRC/src/scripts/base_library/base_image_util.sh. +zero_free_space() { + local rootfs="$1" + + info "Zeroing freespace in ${rootfs}" + sudo sfill -llz "${rootfs}" +} + + +strip_boot() { + local image=$1 + + local rootfs_dir=$(make_temp_dir) + if [[ -b "${image}" ]]; then + enable_rw_mount "${image}" + sudo mount "${image}" "${rootfs_dir}" + tag_as_needs_to_be_resigned "${rootfs_dir}" + else + # Mount image so we can modify it. + local loopdev=$(loopback_partscan "${image}") + mount_loop_image_partition "${loopdev}" 3 "${rootfs_dir}" + fi + + sudo rm -rf "${rootfs_dir}/boot" && + info "/boot directory was removed." + + # To prevent the files we just removed from the FS from remaining as non- + # zero trash blocks that bloat payload sizes, need to zero them. This was + # done when the image was built, but needs to be repeated now that we've + # modified it in a non-trivial way. + zero_free_space "${rootfs_dir}" +} + +IMAGE=$(readlink -f "${FLAGS_image}") +if [[ ! -f "${IMAGE}" && ! -b "${IMAGE}" ]]; then + IMAGE= +fi +if [[ -z "${IMAGE}" ]]; then + die "Missing required argument: --from (image to update)" +fi + +strip_boot "${IMAGE}" diff --git a/scripts/image_signing/tag_image.sh b/scripts/image_signing/tag_image.sh new file mode 100755 index 0000000..fb9492e --- /dev/null +++ b/scripts/image_signing/tag_image.sh @@ -0,0 +1,232 @@ +#!/bin/bash + +# Copyright (c) 2012 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Script to manipulate the tag files in the output of build_image + +# Load common constants. This should be the first executable line. +# The path to common.sh should be relative to your script's location. +. "$(dirname "$0")/common.sh" + +load_shflags + +DEFINE_string from "chromiumos_image.bin" \ + "Input file name of Chrome OS image to tag/stamp." +DEFINE_string dev_mode "" \ + "(build-info) Tag as a developer mode build (1 to enable, 0 to disable)" +DEFINE_string update_firmware "" \ + "(auto-update) Force updating firmware (1 to enable, 0 to disable)" +DEFINE_string leave_firmware_alone "" \ + "(auto-update) For BIOS development use ONLY (1 to enable, 0 to disable)" +DEFINE_string leave_core "" \ + "(crash-reporter) Leave core dumps (1 to enable, 0 to disable)" + +# Parameters for manipulating /etc/lsb-release. +DEFINE_boolean remove_test_label false \ + "(build-info) Remove 'test' suffix in /etc/lsb-release" +DEFINE_boolean change_dev_to_beta false \ + "(build-info) Change 'dev' -> 'beta' in /etc/lsb-release" + + +# TODO(hungte) we can add factory_installer and factory_test, +# but I don't see any reason to tweak/check these values. + +# Parse command line. +FLAGS "$@" || exit 1 +eval set -- "${FLAGS_ARGV}" + +# Abort on error. +set -e + +if [ -z "${FLAGS_from}" ] || [ ! -s "${FLAGS_from}" ] ; then + echo "Error: need a valid file by --from" + exit 1 +fi + +# Global variable to track if the image is modified. +g_modified=${FLAGS_FALSE} + +# Processes (enable, disable, or simply report) a tag file. +# Args: DO_MODIFICATION NAME ROOT TAG_FILE ACTION +# +# When DO_MODIFICATION=${FLAGS_TRUE}, +# Creates (ACTION=1) the TAG_FILE in ROOT, or +# removes (ACTION=0) the TAG_FILE in ROOT, then +# reports the status (and change) to the tag file. +# When DO_MODIFICATION=${FLAGS_FALSE}, +# make a dry-run and only change ${g_modified} +function process_tag() { + local tag_status_text="" + local do_modification="$1" + local name="$2" + local root="$3" + local tag_file_path="$3/$4" + local action="$5" + local do_enable=${FLAGS_FALSE} + local do_disable=${FLAGS_FALSE} + + # only 1, 0, and "" are valid params to action. + case "${action}" in + "1" ) + do_enable=${FLAGS_TRUE} + ;; + "0" ) + do_disable=${FLAGS_TRUE} + ;; + "" ) + ;; + * ) + echo "Error: invalid param to ${name}: ${action} (must be 1 or 0)." + exit 1 + ;; + esac + + if [ -f "${tag_file_path}" ]; then + tag_status_text="ENABLED" + if [ "${do_disable}" = ${FLAGS_TRUE} ]; then + # disable the tag + if [ "${do_modification}" = ${FLAGS_TRUE} ]; then + sudo rm "${tag_file_path}" + fi + g_modified=${FLAGS_TRUE} + tag_status_text="${tag_status_text} => disabled" + elif [ "${do_disable}" != ${FLAGS_FALSE} ]; then + # internal error + echo "Internal error for tag ${name}: need disable param." 1>&2 + exit 1 + fi + else + tag_status_text="disabled" + if [ "${do_enable}" = ${FLAGS_TRUE} ]; then + # enable the tag + if [ "${do_modification}" = ${FLAGS_TRUE} ]; then + sudo touch "${tag_file_path}" + fi + g_modified=${FLAGS_TRUE} + tag_status_text="${tag_status_text} => ENABLED" + elif [ "${do_enable}" != ${FLAGS_FALSE} ]; then + # internal error + echo "Internal error for tag ${name}: need enable param." 1>&2 + exit 1 + fi + fi + + # report tag status + if [ "${do_modification}" != ${FLAGS_TRUE} ]; then + echo "${name}: ${tag_status_text}" + fi +} + +# Iterates all tags to a given partition root. +# Args: ROOTFS DO_MODIFICATION +# +# Check process_tag for the meaning of parameters. +process_all_tags() { + local rootfs="$1" + local do_modification="$2" + + process_tag "${do_modification}" \ + "(build-info) dev_mode" \ + "${rootfs}" \ + /root/.dev_mode \ + "${FLAGS_dev_mode}" + + process_tag "${do_modification}" \ + "(auto-update) update_firmware" \ + "${rootfs}" \ + /root/.force_update_firmware \ + "${FLAGS_update_firmware}" + + process_tag "${do_modification}" \ + "(auto-update) leave_firmware_alone" \ + "${rootfs}" \ + /root/.leave_firmware_alone \ + "${FLAGS_leave_firmware_alone}" + + process_tag "${do_modification}" \ + "(crash-reporter) leave_core" \ + "${rootfs}" \ + /root/.leave_core \ + "${FLAGS_leave_core}" +} + +# Iterates through all options for manipulating the lsb-release. +# Args: ROOTFS DO_MODIFICATION +process_all_lsb_mods() { + local rootfs="$1" + local do_modifications="$2" + local lsb="${rootfs}/etc/lsb-release" + local sudo + + if [ ! -w "${lsb}" ]; then + sudo="sudo" + fi + + if [ ${FLAGS_remove_test_label} = ${FLAGS_TRUE} ]; then + if grep -wq "test" "${lsb}"; then + g_modified=${FLAGS_TRUE} + fi + if [ ${do_modifications} = ${FLAGS_TRUE} ]; then + ${sudo} sed -i 's/\btest\b//' "${lsb}" && + restore_lsb_selinux "${lsb}" && + echo "Test Label removed from /etc/lsb-release" + fi + fi + + if [ ${FLAGS_change_dev_to_beta} = ${FLAGS_TRUE} ]; then + if grep -wq "dev" "${lsb}"; then + g_modified=${FLAGS_TRUE} + fi + if [ ${do_modifications} = ${FLAGS_TRUE} ]; then + ${sudo} sed -i 's/\bdev\b/beta/' "${lsb}" && + restore_lsb_selinux "${lsb}" && + echo "Dev Channel Label was changed to Beta" + fi + fi +} + + +IMAGE=$(readlink -f "${FLAGS_from}") +if [[ -z "${IMAGE}" || ! -f "${IMAGE}" ]]; then + echo "Missing required argument: --from (image to update)" + usage + exit 1 +fi + +# First round, mount as read-only and check if we need any modifications. +if [[ -d "${IMAGE}" ]]; then + rootfs="${IMAGE}" +else + loopdev=$(loopback_partscan "${IMAGE}") + rootfs=$(make_temp_dir) + mount_loop_image_partition_ro "${loopdev}" 3 "${rootfs}" +fi + +# we don't have tags in stateful partition yet... +# stateful_dir=$(make_temp_dir) +# mount_loop_image_partition "${loopdev}" 1 "${stateful_dir}" + +process_all_tags "${rootfs}" ${FLAGS_FALSE} +process_all_lsb_mods "${rootfs}" ${FLAGS_FALSE} + +if [ ${g_modified} = ${FLAGS_TRUE} ]; then + # Remount as RW. We can't use `mount -o rw,remount` because of the bits in + # the ext4 header we've set to block that. See enable_rw_mount for details. + if [[ ! -d "${IMAGE}" ]]; then + sudo umount "${rootfs}" + mount_loop_image_partition "${loopdev}" 3 "${rootfs}" + fi + + # second round, apply the modification to image. + process_all_tags "${rootfs}" ${FLAGS_TRUE} + process_all_lsb_mods "${rootfs}" ${FLAGS_TRUE} + + # This is supposed to be automatically done in mount_loop_image_partition, + # but it's no harm to explicitly make it again here. + tag_as_needs_to_be_resigned "${rootfs}" + echo "IMAGE IS MODIFIED. PLEASE REMEMBER TO RESIGN YOUR IMAGE." +else + echo "Image is not modified." +fi diff --git a/scripts/image_signing/verify_uefi.sh b/scripts/image_signing/verify_uefi.sh new file mode 100755 index 0000000..0d30511 --- /dev/null +++ b/scripts/image_signing/verify_uefi.sh @@ -0,0 +1,87 @@ +#!/bin/bash +# Copyright 2018 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +. "$(dirname "$0")/common.sh" + +set -e + +usage() { + cat </dev/null; then + die "Cannot verify UEFI signatures (sbverify not found)." + fi + + local bootloader_dir="${target_dir}/efi/boot" + local syslinux_dir="${target_dir}/syslinux" + local kernel_dir="${target_dir}" + local gsetup_dir="${esp_dir}/EFI/Google/GSetup" + + if [[ ! -f "${gsetup_dir}/pk/pk.der" ]]; then + die "No PK cert" + fi + + local db_cert_der="${gsetup_dir}/db/db.der" + if [[ ! -f "${db_cert_der}" ]]; then + die "No DB cert" + fi + + local cert="${key_dir}/db/db.pem" + + local working_dir="$(make_temp_dir)" + local gsetup_cert="${working_dir}/cert.pem" + openssl x509 -in "${db_cert_der}" -inform DER \ + -out "${gsetup_cert}" -outform PEM + + for efi_file in "${bootloader_dir}"/*.efi; do + if [[ ! -f "${efi_file}" ]]; then + continue + fi + sbverify --cert "${cert}" "${efi_file}" || + die "Verification failed. file:${efi_file} cert:${cert}" + sbverify --cert "${gsetup_cert}" "${efi_file}" || + die "Verification failed. file:${efi_file} cert:${gsetup_cert}" + done + + for syslinux_kernel_file in "${syslinux_dir}"/vmlinuz.?; do + if [[ ! -f "${syslinux_kernel_file}" ]]; then + continue + fi + sbverify --cert "${cert}" "${syslinux_kernel_file}" || + warn "Verification failed. file:${syslinux_kernel_file} cert:${cert}" + sbverify --cert "${gsetup_cert}" "${syslinux_kernel_file}" || + warn "Verification failed. file:${syslinux_kernel_file}" \ + "cert:${gsetup_cert}" + done + + local kernel_file="$(readlink -f "${kernel_dir}/vmlinuz")" + if [[ -f "${kernel_file}" ]]; then + sbverify --cert "${cert}" "${kernel_file}" || + warn "Verification failed: file:${kernel_file} cert:${cert}" + sbverify --cert "${gsetup_cert}" "${kernel_file}" || + warn "Verification failed: file:${kernel_file} cert:${gsetup_cert}" + fi +} + +main "$@" diff --git a/scripts/image_signing/versions.default b/scripts/image_signing/versions.default new file mode 100644 index 0000000..1fefcb3 --- /dev/null +++ b/scripts/image_signing/versions.default @@ -0,0 +1,7 @@ +# sign_official_build.sh can (optionally) take a file name from which to read +# firmware and kernel versions to set during the signing process. + +# This is a sample version file template. + +firmware_version=1 +kernel_version=1 diff --git a/scripts/keygeneration/accessory/common_leverage_hammer.sh b/scripts/keygeneration/accessory/common_leverage_hammer.sh new file mode 100644 index 0000000..1e0f712 --- /dev/null +++ b/scripts/keygeneration/accessory/common_leverage_hammer.sh @@ -0,0 +1,69 @@ +#!/bin/bash + +# Copyright 2017 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Load common constants and functions. +. "$(dirname "$0")/../common.sh" + +usage() { + cat <: Where to write the keys (default is cwd) +EOF + + if [[ $# -ne 0 ]]; then + die "$*" + else + exit 0 + fi +} + +generate_rsa3072_exp3_key() { + local output_dir="$1" + local key_name="$2" + + # Generate RSA key. + openssl genrsa -3 -out "${output_dir}/temp.pem" 3072 + + # Create a keypair from an RSA .pem file generated above. + futility create "${output_dir}/temp.pem" "${output_dir}/key_${key_name}" + + # Best attempt to securely delete the temp.pem file. + shred --remove "${output_dir}/temp.pem" +} + +# To generate a keypair with the same algorithm of Hammer and rename the kepair +# to specific accessory's name. +leverage_hammer_to_create_key() { + local output_dir="${PWD}" + local key_name="$1" + shift + + while [[ $# -gt 0 ]]; do + case "$1" in + -h|--help) + usage + ;; + -o|--output_dir) + output_dir="$2" + if [[ ! -d "${output_dir}" ]]; then + die "output dir ("${output_dir}") doesn't exist." + fi + shift + ;; + -*) + usage "Unknown option: "$1"" + ;; + *) + usage "Unknown argument "$1"" + ;; + esac + shift + done + + generate_rsa3072_exp3_key "${output_dir}" "${key_name}" +} diff --git a/scripts/keygeneration/accessory/create_new_ec_efs_key.sh b/scripts/keygeneration/accessory/create_new_ec_efs_key.sh new file mode 100755 index 0000000..54725e2 --- /dev/null +++ b/scripts/keygeneration/accessory/create_new_ec_efs_key.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +# Copyright 2017 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Load common constants and functions. +. "$(dirname "$0")/common_leverage_hammer.sh" + +main() { + set -e + + leverage_hammer_to_create_key "ec_efs" "$@" +} + +main "$@" diff --git a/scripts/keygeneration/accessory/create_new_hammer_like_keys.sh b/scripts/keygeneration/accessory/create_new_hammer_like_keys.sh new file mode 100755 index 0000000..3d5c96e --- /dev/null +++ b/scripts/keygeneration/accessory/create_new_hammer_like_keys.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +# Copyright 2017 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Load common constants and functions. +. "$(dirname "$0")/common_leverage_hammer.sh" + +main() { + set -e + + leverage_hammer_to_create_key "hammerlike" "$@" +} + +main "$@" diff --git a/scripts/keygeneration/add_loem_keys.sh b/scripts/keygeneration/add_loem_keys.sh new file mode 100755 index 0000000..4cf8f4c --- /dev/null +++ b/scripts/keygeneration/add_loem_keys.sh @@ -0,0 +1,83 @@ +#!/bin/bash +# Copyright 2015 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Load common constants and functions. +. "$(dirname "$0")/common.sh" + +usage() { + cat < + +If the existing keyset is not set up for loem usage, it will be converted. + +Note: Use 0 if you want to just convert an existing keyset. +EOF + exit ${1:-0} +} + +convert_keyset_to_loem() { + local f + + printf "Converting to loem keyset; continue? (y/N) " + read f + [[ ${f} == [yY] ]] + + for f in {firmware_data,root}_key.vb{pub,priv}k firmware.keyblock; do + if [[ ${f} == "root_key.vbprivk" && ! -e ${f} ]]; then + # For official keys, we won't have the private half of the root key. + echo "Skipping ${f} for official keys" + continue + fi + if [[ ${f} == *.vbprivk && ! -e ${f} ]]; then + # For official keys, will be gpg wrapped. + f+=".gpg" + fi + mv -i "${f}" "${f/./.loem1.}" + done + + echo "[loem]" > loem.ini +} + +main() { + set -e -u + + if [[ $# -ne 1 || $1 == -* ]]; then + usage + fi + + # Keep `local` and assignment split so return values are checked. + local firmware_key_version + local num_keys highest_key k + + if [[ ! -e ${VERSION_FILE} ]]; then + die "missing ${VERSION_FILE} in ${PWD}; please create one" + fi + + firmware_key_version=$(get_version "firmware_key_version") + + # See if we need to convert the keyset first. + if [[ -e root_key.vbpubk ]]; then + convert_keyset_to_loem + fi + + num_keys=$1 + highest_key=$(printf '%s\n' firmware.loem*.keyblock | + sed -r 's:firmware.loem(.*).keyblock:\1:' | + sort -n | tail -1) + echo "There are ${highest_key} loem keys; adding ${num_keys} more" + + for ((k = highest_key + 1; k < highest_key + 1 + num_keys; ++k)); do + echo "Generating LOEM ${k}" + make_pair root_key.loem${k} ${ROOT_KEY_ALGOID} + make_pair firmware_data_key.loem${k} ${FIRMWARE_DATAKEY_ALGOID} \ + ${firmware_key_version} + make_keyblock firmware.loem${k} ${FIRMWARE_KEYBLOCK_MODE} \ + firmware_data_key.loem${k} root_key.loem${k} + done + + echo + echo "Don't forget to update loem.ini to allocate the keys!" +} +main "$@" diff --git a/scripts/keygeneration/common.sh b/scripts/keygeneration/common.sh new file mode 100644 index 0000000..af6cd71 --- /dev/null +++ b/scripts/keygeneration/common.sh @@ -0,0 +1,289 @@ +#!/bin/bash +# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Common key generation functions. + +SCRIPT_DIR="$(dirname "$(readlink -f -- "$0")")" +PROG=$(basename "$0") +CROS_LOG_PREFIX="${PROG}: " + +# Prints an informational message. +info() { + echo "${CROS_LOG_PREFIX}INFO: $*" >&2 +} + +# Prints a warning message. +warn() { + echo "${CROS_LOG_PREFIX}WARNING: $*" >&2 +} + +# Prints an error message. +error() { + echo "${CROS_LOG_PREFIX}ERROR: $*" >&2 +} + +# Print an error message and then exit the script. +die() { + error "$@" + exit 1 +} + +# Algorithm ID mappings: +RSA1024_SHA1_ALGOID=0 +RSA1024_SHA256_ALGOID=1 +RSA1024_SHA512_ALGOID=2 +RSA2048_SHA1_ALGOID=3 +RSA2048_SHA256_ALGOID=4 +RSA2048_SHA512_ALGOID=5 +RSA4096_SHA1_ALGOID=6 +RSA4096_SHA256_ALGOID=7 +RSA4096_SHA512_ALGOID=8 +RSA8192_SHA1_ALGOID=9 +RSA8192_SHA256_ALGOID=10 +RSA8192_SHA512_ALGOID=11 +alg_to_keylen() { + echo $(( 1 << (10 + ($1 / 3)) )) +} + +# Default algorithms. +EC_ROOT_KEY_ALGOID=${RSA4096_SHA256_ALGOID} +EC_DATAKEY_ALGOID=${RSA4096_SHA256_ALGOID} + +ROOT_KEY_ALGOID=${RSA4096_SHA512_ALGOID} +RECOVERY_KEY_ALGOID=${RSA4096_SHA512_ALGOID} + +FIRMWARE_DATAKEY_ALGOID=${RSA4096_SHA256_ALGOID} +DEV_FIRMWARE_DATAKEY_ALGOID=${RSA4096_SHA256_ALGOID} + +RECOVERY_KERNEL_ALGOID=${RSA4096_SHA512_ALGOID} +MINIOS_KERNEL_ALGOID=${RSA4096_SHA512_ALGOID} +INSTALLER_KERNEL_ALGOID=${RSA4096_SHA512_ALGOID} +KERNEL_SUBKEY_ALGOID=${RSA4096_SHA256_ALGOID} +KERNEL_DATAKEY_ALGOID=${RSA2048_SHA256_ALGOID} + +# AP RO Verification. +ARV_ROOT_ALGOID=${RSA4096_SHA256_ALGOID} +ARV_PLATFORM_ALGOID=${RSA4096_SHA256_ALGOID} + +# Keyblock modes determine which boot modes a signing key is valid for use +# in verification. +# !DEV 0x1 DEV 0x2 +# !REC 0x4 REC 0x8 +# !MINIOS 0x10 MINIOS 0x20 +# Note that firmware keyblock modes are not used. Consider deprecating. + +# Only allow RW EC firmware in non-recovery + non-miniOS. +EC_KEYBLOCK_MODE=$((0x1 | 0x2 | 0x4 | 0x10)) +# Only allow RW firmware in non-recovery + non-miniOS. +FIRMWARE_KEYBLOCK_MODE=$((0x1 | 0x2 | 0x4 | 0x10)) +# Only allow in dev mode + non-recovery + non-miniOS. +DEV_FIRMWARE_KEYBLOCK_MODE=$((0x2 | 0x4 | 0x10)) +# Only allow in recovery mode + non-miniOS. +RECOVERY_KERNEL_KEYBLOCK_MODE=$((0x1 | 0x2 | 0x8 | 0x10)) +# Only allow in recovery mode + miniOS. +MINIOS_KERNEL_KEYBLOCK_MODE=$((0x1 | 0x2 | 0x8 | 0x20)) +# Only allow in non-recovery + non-miniOS. +KERNEL_KEYBLOCK_MODE=$((0x1 | 0x2 | 0x4 | 0x10)) +# Only allow in dev + recovery + non-miniOS. +INSTALLER_KERNEL_KEYBLOCK_MODE=$((0x2 | 0x8 | 0x10)) + +# Emit .vbpubk and .vbprivk using given basename and algorithm +# NOTE: This function also appears in ../../utility/dev_make_keypair. Making +# the two implementations the same would require some common.sh, which is more +# likely to cause problems than just keeping an eye out for any differences. If +# you feel the need to change this file, check the history of that other file +# to see what may need updating here too. +make_pair() { + local base=$1 + local alg=$2 + local key_version=${3:-1} + local len=$(alg_to_keylen $alg) + + echo "creating $base keypair (version = $key_version)..." + + # make the RSA keypair + openssl genrsa -F4 -out "${base}_${len}.pem" $len + # create a self-signed certificate + openssl req -batch -new -x509 -key "${base}_${len}.pem" \ + -out "${base}_${len}.crt" + # generate pre-processed RSA public key + dumpRSAPublicKey -cert "${base}_${len}.crt" > "${base}_${len}.keyb" + + # wrap the public key + vbutil_key \ + --pack "${base}.vbpubk" \ + --key "${base}_${len}.keyb" \ + --version "${key_version}" \ + --algorithm $alg + + # wrap the private key + vbutil_key \ + --pack "${base}.vbprivk" \ + --key "${base}_${len}.pem" \ + --algorithm $alg + + # remove intermediate files + rm -f "${base}_${len}.pem" "${base}_${len}.crt" "${base}_${len}.keyb" +} + +# Used to generate keys for signing update payloads. +make_au_payload_key() { + local dir=$1 + local priv="${dir}/update_key.pem" + local pub="${dir}/update-payload-key-pub.pem" + openssl genrsa -out "${priv}" 2048 + openssl rsa -pubout -in "${priv}" -out "${pub}" +} + +# Emit a .keyblock containing flags and a public key, signed by a private key +# flags are the bitwise OR of these (passed in decimal, though) +# 0x01 Developer switch off +# 0x02 Developer switch on +# 0x04 Not recovery mode +# 0x08 Recovery mode +# 0x10 Not miniOS mode +# 0x20 miniOS mode +make_keyblock() { + local base=$1 + local flags=$2 + local pubkey=$3 + local signkey=$4 + + echo "creating $base keyblock..." + + # create it + vbutil_keyblock \ + --pack "${base}.keyblock" \ + --flags $flags \ + --datapubkey "${pubkey}.vbpubk" \ + --signprivate "${signkey}.vbprivk" + + # verify it + vbutil_keyblock \ + --unpack "${base}.keyblock" \ + --signpubkey "${signkey}.vbpubk" +} + +# File to read current versions from. +VERSION_FILE="key.versions" + +# ARGS: [VERSION_FILE] +get_version() { + local key="$1" + local file="${2:-${VERSION_FILE}}" + awk -F= -vkey="${key}" '$1 == key { print $NF }' "${file}" +} + +# Loads the current versions prints them to stdout and sets the global version +# variables: CURR_FIRMKEY_VER CURR_FIRM_VER CURR_KERNKEY_VER CURR_KERN_VER +load_current_versions() { + local key_dir=$1 + local VERSION_FILE="${key_dir}/${VERSION_FILE}" + if [[ ! -f ${VERSION_FILE} ]]; then + return 1 + fi + CURR_FIRMKEY_VER=$(get_version "firmware_key_version") + # Firmware version is the kernel subkey version. + CURR_FIRM_VER=$(get_version "firmware_version") + # Kernel data key version is the kernel key version. + CURR_KERNKEY_VER=$(get_version "kernel_key_version") + CURR_KERN_VER=$(get_version "kernel_version") + + cat <.v.v.keyblock +# Args: SUBKEY_VERSION DATAKEY_VERSION +backup_existing_kernel_keyblock() { + if [[ ! -e kernel.keyblock ]]; then + return + fi + mv --no-clobber kernel.{keyblock,"v$2.v$1.keyblock"} +} + +# Make backups of existing kernel subkeys and keyblocks that will be revved. +# Backup format: +# for keys: .v.vb{pub|priv}k +# for keyblocks: .v.v.keyblock +# Args: SUBKEY_VERSION DATAKEY_VERSION +backup_existing_kernel_subkeys() { + local subkey_ver=$1 + local datakey_ver=$2 + # --no-clobber to prevent accidentally overwriting existing + # backups. + mv --no-clobber kernel_subkey.{vbprivk,"v${subkey_ver}.vbprivk"} + mv --no-clobber kernel_subkey.{vbpubk,"v${subkey_ver}.vbpubk"} + backup_existing_kernel_keyblock ${subkey_ver} ${datakey_ver} +} + +# Make backups of existing kernel data keys and keyblocks that will be revved. +# Backup format: +# for keys: .v.vb{pub|priv}k +# for keyblocks: .v.v.keyblock +# Args: SUBKEY_VERSION DATAKEY_VERSION +backup_existing_kernel_data_keys() { + local subkey_ver=$1 + local datakey_ver=$2 + # --no-clobber to prevent accidentally overwriting existing + # backups. + mv --no-clobber kernel_data_key.{vbprivk,"v${datakey_ver}.vbprivk"} + mv --no-clobber kernel_data_key.{vbpubk,"v${datakey_ver}.vbpubk"} + backup_existing_kernel_keyblock ${subkey_ver} ${datakey_ver} +} + +# Make backups of existing firmware keys and keyblocks that will be revved. +# Backup format: +# for keys: .v.vb{pub|priv}k +# for keyblocks: .v.v.keyblock +# Args: SUBKEY_VERSION DATAKEY_VERSION +backup_existing_firmware_keys() { + local subkey_ver=$1 + local datakey_ver=$2 + mv --no-clobber firmware_data_key.{vbprivk,"v${subkey_ver}.vbprivk"} + mv --no-clobber firmware_data_key.{vbpubk,"v${subkey_ver}.vbpubk"} + mv --no-clobber firmware.{keyblock,"v${datakey_ver}.v${subkey_ver}.keyblock"} +} + + +# Write new key version file with the updated key versions. +# Args: FIRMWARE_KEY_VERSION FIRMWARE_VERSION KERNEL_KEY_VERSION +# KERNEL_VERSION +write_updated_version_file() { + local firmware_key_version=$1 + local firmware_version=$2 + local kernel_key_version=$3 + local kernel_version=$4 + + cat > ${VERSION_FILE} < +increment_version() { + local key_dir=$1 + local VERSION_FILE="${key_dir}/${VERSION_FILE}" + local old_version=$(get_version $2) + local new_version=$(( ${old_version} + 1 )) + + if [[ ${new_version} -gt 0xffff ]]; then + echo "Version overflow!" >&2 + return 1 + fi + echo ${new_version} +} diff --git a/scripts/keygeneration/create_new_android_keys.sh b/scripts/keygeneration/create_new_android_keys.sh new file mode 100755 index 0000000..9701d41 --- /dev/null +++ b/scripts/keygeneration/create_new_android_keys.sh @@ -0,0 +1,93 @@ +#!/bin/bash + +# Copyright 2016 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Load common constants and functions. +. "$(dirname "$0")/common.sh" + +usage() { + cat < Name of the keyset (for key.versions) + --output Where to write the keys (default is cwd) +EOF + + if [[ $# -ne 0 ]]; then + die "unknown option $*" + else + exit 0 + fi +} + +main() { + set -e + + # Flag to indicate whether we should be generating a developer keyblock flag. + local dev_keyblock="false" + local android_keys="false" + local uefi_keys="false" + local root_key_algoid=${ROOT_KEY_ALGOID} + local recovery_key_algoid=${RECOVERY_KEY_ALGOID} + local recovery_kernel_algoid=${RECOVERY_KERNEL_ALGOID} + local minios_kernel_algoid=${MINIOS_KERNEL_ALGOID} + local installer_kernel_algoid=${INSTALLER_KERNEL_ALGOID} + local keyname + local output_dir="${PWD}" setperms="false" + + while [[ $# -gt 0 ]]; do + case $1 in + --devkeyblock) + echo "Will also generate developer firmware keyblock and data key." + dev_keyblock="true" + ;; + + --android) + echo "Will also generate Android keys." + android_keys="true" + ;; + + --uefi) + echo "Will also generate UEFI keys." + uefi_keys="true" + ;; + + --8k) + root_key_algoid=${RSA8192_SHA512_ALGOID} + recovery_key_algoid=${RSA8192_SHA512_ALGOID} + recovery_kernel_algoid=${RSA8192_SHA512_ALGOID} + installer_kernel_algoid=${RSA8192_SHA512_ALGOID} + ;; + --8k-root) + root_key_algoid=${RSA8192_SHA512_ALGOID} + ;; + --8k-recovery) + recovery_key_algoid=${RSA8192_SHA512_ALGOID} + ;; + --8k-recovery-kernel) + recovery_kernel_algoid=${RSA8192_SHA512_ALGOID} + ;; + --8k-installer-kernel) + installer_kernel_algoid=${RSA8192_SHA512_ALGOID} + ;; + + --4k) + root_key_algoid=${RSA4096_SHA512_ALGOID} + recovery_key_algoid=${RSA4096_SHA512_ALGOID} + recovery_kernel_algoid=${RSA4096_SHA512_ALGOID} + installer_kernel_algoid=${RSA4096_SHA512_ALGOID} + ;; + --4k-root) + root_key_algoid=${RSA4096_SHA512_ALGOID} + ;; + --4k-recovery) + recovery_key_algoid=${RSA4096_SHA512_ALGOID} + ;; + --4k-recovery-kernel) + recovery_kernel_algoid=${RSA4096_SHA512_ALGOID} + ;; + --4k-installer-kernel) + installer_kernel_algoid=${RSA4096_SHA512_ALGOID} + ;; + + --key-name) + keyname="$2" + shift + ;; + + --output) + output_dir="$2" + setperms="true" + if [[ -d "${output_dir}" ]]; then + die "output dir (${output_dir}) already exists" + fi + shift + ;; + + -h|--help) + usage + ;; + *) + usage "$1" + ;; + esac + shift + done + + mkdir -p "${output_dir}" + cd "${output_dir}" + if [[ "${setperms}" == "true" ]]; then + chmod 700 . + fi + + if [[ ! -e "${VERSION_FILE}" ]]; then + echo "No version file found. Creating default ${VERSION_FILE}." + ( + if [[ -n "${keyname}" ]]; then + echo "name=${keyname}" + fi + printf '%s_version=1\n' {firmware,kernel}{_key,} + ) > "${VERSION_FILE}" + fi + + local eckey_version fkey_version ksubkey_version kdatakey_version + + # Get the key versions for normal keypairs + eckey_version=$(get_version "ec_key_version") + fkey_version=$(get_version "firmware_key_version") + # Firmware version is the kernel subkey version. + ksubkey_version=$(get_version "firmware_version") + # Kernel data key version is the kernel key version. + kdatakey_version=$(get_version "kernel_key_version") + + # Create the normal keypairs + make_pair ec_root_key ${EC_ROOT_KEY_ALGOID} + make_pair ec_data_key ${EC_DATAKEY_ALGOID} ${eckey_version} + make_pair root_key ${root_key_algoid} + make_pair firmware_data_key ${FIRMWARE_DATAKEY_ALGOID} ${fkey_version} + if [[ "${dev_keyblock}" == "true" ]]; then + make_pair dev_firmware_data_key ${DEV_FIRMWARE_DATAKEY_ALGOID} ${fkey_version} + fi + make_pair kernel_subkey ${KERNEL_SUBKEY_ALGOID} ${ksubkey_version} + make_pair kernel_data_key ${KERNEL_DATAKEY_ALGOID} ${kdatakey_version} + + # Create the recovery and factory installer keypairs + make_pair recovery_key ${recovery_key_algoid} + make_pair recovery_kernel_data_key ${recovery_kernel_algoid} + make_pair minios_kernel_data_key ${minios_kernel_algoid} + make_pair installer_kernel_data_key ${installer_kernel_algoid} + make_pair arv_root ${ARV_ROOT_ALGOID} + make_pair arv_platform ${ARV_PLATFORM_ALGOID} + + # Create the firmware keyblock for use only in Normal mode. This is redundant, + # since it's never even checked during Recovery mode. + make_keyblock firmware ${FIRMWARE_KEYBLOCK_MODE} firmware_data_key root_key + # Ditto EC keyblock + make_keyblock ec ${EC_KEYBLOCK_MODE} ec_data_key ec_root_key + + if [[ "${dev_keyblock}" == "true" ]]; then + # Create the dev firmware keyblock for use only in Developer mode. + make_keyblock dev_firmware ${DEV_FIRMWARE_KEYBLOCK_MODE} dev_firmware_data_key root_key + fi + + # Create the recovery kernel keyblock for use only in Recovery mode. + make_keyblock recovery_kernel ${RECOVERY_KERNEL_KEYBLOCK_MODE} recovery_kernel_data_key recovery_key + + # Create the miniOS kernel keyblock for use only in miniOS mode. + make_keyblock minios_kernel ${MINIOS_KERNEL_KEYBLOCK_MODE} minios_kernel_data_key recovery_key + + # Create the normal kernel keyblock for use only in Normal mode. + make_keyblock kernel ${KERNEL_KEYBLOCK_MODE} kernel_data_key kernel_subkey + + # Create the installer keyblock for use in Developer + Recovery mode + # For use in Factory Install and Developer Mode install shims. + make_keyblock installer_kernel ${INSTALLER_KERNEL_KEYBLOCK_MODE} installer_kernel_data_key recovery_key + + if [[ "${android_keys}" == "true" ]]; then + mkdir android + "${SCRIPT_DIR}"/create_new_android_keys.sh android + fi + + if [[ "${uefi_keys}" == "true" ]]; then + mkdir -p uefi + "${SCRIPT_DIR}"/uefi/create_new_uefi_keys.sh --output uefi + fi + + if [[ "${setperms}" == "true" ]]; then + find -type f -exec chmod 400 {} + + find -type d -exec chmod 500 {} + + fi + + # CAUTION: The public parts of most of these blobs must be compiled into the + # firmware, which is built separately (and some of which can't be changed after + # manufacturing). If you update these keys, you must coordinate the changes + # with the BIOS people or you'll be unable to boot the resulting images. +} +main "$@" diff --git a/scripts/keygeneration/create_psp_verstagebl_key.sh b/scripts/keygeneration/create_psp_verstagebl_key.sh new file mode 100755 index 0000000..aeb7920 --- /dev/null +++ b/scripts/keygeneration/create_psp_verstagebl_key.sh @@ -0,0 +1,141 @@ +#!/bin/bash +# Copyright 2020 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Load common constants and functions. +. "$(dirname "$0")/common.sh" + +usage() { + cat < + +Generate a key pair for signing the PSP_Verstage binary to be loaded by +the PSP bootloader. For detail, reference the AMD documentation titled +"OEM PSP VERSTAGE BL FW Signing Key Pair Generation and Certificate Request +Process" - http://dr/corp/drive/folders/1ySJyDgbH73W1lqrhxMvM9UYl5TtJt_mw + +Arguments: +- Output Directory: Location for the keys to be generated. Must exist. +- Key size: 2048 for Picasso, Dali, & Pollock, 4096 for other F17h SOCs +EOF + + if [[ $# -ne 0 ]]; then + echo "$*" >&2 + exit 1 + else + exit 0 + fi +} + +KEYNAME=psp_verstagebl_fw_signing + +# Generate the key pair. +# ARGS: +create_psp_key() { + local name=$1 + local key=$2 + local keysize=$3 + + [[ $# -eq 3 ]] || error "${FUNCNAME} requires 3 args" + + local plainname="psp_verstagebl_${name}_${keysize}" + local embedname="psp_verstagebl_${name}" + + # HSM signer stuff -- need a unique name for the key. + echo "Will use plain name: ${plainname}, and embed name: ${embedname}." + + local cmd=( + openssl genrsa -F4 -out "${key}" "${keysize}" + ) + echo "> ${cmd[@]}" + "${cmd[@]}" || die "generating key failed" +} + +# Generate the CSR for this key. +# ARGS: key> +create_psp_csr() { + local dir=$1 + local key=$2 + local keysize=$3 + + [[ $# -eq 3 ]] || error "${FUNCNAME} requires 3 args" + + local hash + if [[ ${keysize} -eq 2048 ]]; then + hash="sha256" + else + hash="sha384" + fi + + local config="${dir}/${KEYNAME}.cnf" + local csr="${dir}/${KEYNAME}.csr" + + cat <"${config}" +[req] +default_md = ${hash} +prompt = no +distinguished_name = req_distinguished_name +req_extensions = v3_req + +[req_distinguished_name] +countryName = US +stateOrProvinceName = CA +localityName = Mountain View +organizationalUnitName = Google LLC +commonName = AMD Reference PSP Verstage BL FW Certificate + +# Google Platform Vendor ID [31:24] = 0x94 other bits [23:0] are reserved +serialNumber = 94000000 + +[v3_req] +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment +subjectKeyIdentifier = hash +EOF + + local cmd=( + openssl req -new + -config "${config}" + -key "${key}" + -out "${csr}" + ) + echo "> ${cmd[@]}" + "${cmd[@]}" || die "generating CSR failed" + + echo + echo "The following hash should be communicated to AMD separately from the CSR" + echo "to allow it to be verified." + local digest="${dir}/${KEYNAME}.digest" + openssl dgst -sha256 "${csr}" >"${digest}" || die "generating digest failed" + cat "${digest}" +} + +main() { + set -e + + # Check arguments. + if [[ $# -ne 3 ]]; then + usage "Error: Incorrect number of arguments" + fi + local name=$1 + local dir=$2 + local keysize=$3 + + if [[ "${keysize}" -ne 2048 && "${keysize}" -ne 4096 ]]; then + usage "Error: invalid keysize" + fi + + if [[ ! -d "${dir}" ]]; then + mkdir -p "${dir}" + else + echo "Error: ${dir} already exists" >&2 + exit 1 + fi + + local key="${dir}/${KEYNAME}.pem" + create_psp_key "${name}" "${key}" "${keysize}" + create_psp_csr "${dir}" "${key}" "${keysize}" +} + +main "$@" diff --git a/scripts/keygeneration/increment_firmware_data_key.sh b/scripts/keygeneration/increment_firmware_data_key.sh new file mode 100755 index 0000000..c6b65a4 --- /dev/null +++ b/scripts/keygeneration/increment_firmware_data_key.sh @@ -0,0 +1,45 @@ +#!/bin/bash +# Copyright (c) 2012 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Script to increment firmware version key for firmware updates. +# Used when revving versions for a firmware update. + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +# Abort on errors. +set -e + +if [ $# -ne 1 ]; then + cat < + + Increments the firmware version in the specified keyset. +EOF + exit 1 +fi + +KEY_DIR=$1 + +main() { + load_current_versions "${KEY_DIR}" + new_firmkey_ver=$(increment_version "${KEY_DIR}" "firmware_key_version") + + cd "${KEY_DIR}" + backup_existing_firmware_keys ${CURR_FIRM_VER} ${CURR_FIRMKEY_VER} + + cat < + + Increments the kernel data key in the specified keyset. +EOF + exit 1 +fi + +KEY_DIR=$1 + +main() { + load_current_versions "${KEY_DIR}" + new_kernkey_ver=$(increment_version "${KEY_DIR}" "kernel_key_version") + + cd "${KEY_DIR}" + backup_existing_kernel_data_keys ${CURR_FIRM_VER} ${CURR_KERNKEY_VER} + + cat < + + Increments the kernel subkey in the specified keyset. +EOF + exit 1 +fi + +KEY_DIR=$1 + +main() { + load_current_versions "${KEY_DIR}" + new_firm_ver=$(increment_version "${KEY_DIR}" "firmware_version") + + cd "${KEY_DIR}" + backup_existing_kernel_subkeys ${CURR_FIRM_VER} ${CURR_KERNKEY_VER} + + cat < + +Increments the kernel subkey, data key and firmware version in the +specified keyset. +EOF + exit 1 +fi + +KEY_DIR=$1 + +main() { + load_current_versions "${KEY_DIR}" + new_kernkey_ver=$(increment_version "${KEY_DIR}" "kernel_key_version") + new_firm_ver=$(increment_version "${KEY_DIR}" "firmware_version") + + cd "${KEY_DIR}" + backup_existing_kernel_subkeys ${CURR_FIRM_VER} ${CURR_KERNKEY_VER} + backup_existing_kernel_data_keys ${CURR_FIRM_VER} ${CURR_KERNKEY_VER} + + cat < + +Validity check a keyset directory for key versions. +EOF + exit 1 +fi + +KEY_DIR="$1" +VERSION_FILE="${KEY_DIR}/key.versions" + +keyblock_version() { + local keyblock="$1" + echo "$(vbutil_keyblock --unpack "${keyblock}" | grep 'Data key version' | + cut -f 2 -d : | tr -d ' ')" +} + +key_version() { + local key="$1" + echo "$(vbutil_key --unpack "${key}" | grep 'Key Version' | cut -f 2 -d : | + tr -d ' ')" +} + +# Compare versions and print out error if there is a mismatch. +check_versions() { + local expected="$1" + local got="$2" + local expected_label="$3" + local got_label="$4" + if [[ ${expected} != ${got} ]]; then + echo "ERROR: ${expected_label} version does not match ${got_label} version" + echo "EXPECTED (${expected_label} version): ${expected}" + echo "GOT (${got_label} version): ${got}" + return 1 + fi + return 0 +} + +# Check the key.versions against firmware.keyblock and firmware_data_key.vbpubk. +check_firmware_keyblock() { + local fkey_keyblock="$1" fkey="$2" + local got_fkey_keyblock="$(keyblock_version "${fkey_keyblock}")" + local got_fkey="$(key_version "${fkey}")" + + check_versions "${got_fkey_keyblock}" "${got_fkey}" \ + "${fkey_keyblock##*/} keyblock key" "firmware key" || testfail=1 + check_versions "${expected_fkey}" "${got_fkey}" "${fkey##*/} key" \ + "firmware key" || testfail=1 +} + +# Validate the firmware keys in an loem keyset. +check_loem_keyset() { + local line loem_index + while read line; do + loem_index=$(cut -d= -f1 <<<"${line}" | sed 's: *$::') + + check_firmware_keyblock \ + "${KEY_DIR}/firmware.loem${loem_index}.keyblock" \ + "${KEY_DIR}/firmware_data_key.loem${loem_index}.vbpubk" + done < <(grep = "${KEY_DIR}"/loem.ini) +} + +# Validate the firmware keys in a non-loem keyset. +check_non_loem_keyset() { + check_firmware_keyblock \ + "${KEY_DIR}/firmware.keyblock" \ + "${KEY_DIR}/firmware_data_key.vbpubk" +} + +main() { + local testfail=0 + + local expected_kkey="$(get_version kernel_key_version)" + local expected_fkey="$(get_version firmware_key_version)" + local expected_firmware="$(get_version firmware_version)" + local expected_kernel="$(get_version kernel_version)" + + check_versions "${expected_firmware}" "${expected_kkey}" \ + "firmware" "kernel key" || testfail=1 + + local got_kkey_keyblock="$(keyblock_version ${KEY_DIR}/kernel.keyblock)" + local got_ksubkey="$(key_version ${KEY_DIR}/kernel_subkey.vbpubk)" + local got_kdatakey="$(key_version ${KEY_DIR}/kernel_data_key.vbpubk)" + + if [[ -f "${KEY_DIR}"/loem.ini ]]; then + check_loem_keyset + else + check_non_loem_keyset + fi + + check_versions "${got_kkey_keyblock}" "${got_ksubkey}" "kernel keyblock key" \ + "kernel subkey" || testfail=1 + check_versions "${got_kdatakey}" "${got_ksubkey}" "kernel data key" \ + "kernel subkey" || testfail=1 + check_versions "${expected_kkey}" "${got_kdatakey}" "key.versions kernel key" \ + "kernel datakey" || testfail=1 + check_versions "${expected_kkey}" "${got_ksubkey}" "key.versions kernel key" \ + "kernel subkey" || testfail=1 + + exit ${testfail} +} + +main "$@" diff --git a/scripts/keygeneration/make_keyblock.sh b/scripts/keygeneration/make_keyblock.sh new file mode 100755 index 0000000..565a566 --- /dev/null +++ b/scripts/keygeneration/make_keyblock.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# Generates a keyblock containing a public key and signed using the given +# signing key. + +# Load common constants and functions. +. "$(dirname "$0")/common.sh" + +if [ $# -ne 4 ]; then + cat < + +Emits .keyblock containing .vbpubk signed with +.vbprivk with the given keyblock . +EOF + exit 1 +fi + +in_pubkey=$1 +in_signkey=$2 +keyblock_flags=$3 +out_keyblock=$4 + +make_keyblock $out_keyblock $keyblock_flags $in_pubkey $in_signkey diff --git a/scripts/keygeneration/make_pair.sh b/scripts/keygeneration/make_pair.sh new file mode 100755 index 0000000..cd5d0c1 --- /dev/null +++ b/scripts/keygeneration/make_pair.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# Generate .vbpubk and .vbprivk pairs with the given algorithm id. + +# Load common constants and functions. +. "$(dirname "$0")/common.sh" + +if [ $# -ne 2 ]; then + cat < + +Output: .vbprivk and .vbpubk +EOF + exit 1 +fi + +algoid=$1 +out_keypair=$2 + +make_pair $out_keypair $algoid diff --git a/scripts/keygeneration/uefi/create_new_uefi_keys.sh b/scripts/keygeneration/uefi/create_new_uefi_keys.sh new file mode 100755 index 0000000..2e91b01 --- /dev/null +++ b/scripts/keygeneration/uefi/create_new_uefi_keys.sh @@ -0,0 +1,80 @@ +#!/bin/bash +# Copyright 2018 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Load common constants and functions. +. "$(dirname "$0")/uefi_common.sh" + +usage() { + cat < Where to write the keys (default is cwd). + The base name must be '.../uefi'. + --no-pk Do not generate PK. +EOF + + if [[ $# -ne 0 ]]; then + die "unknown option $*" + else + exit 0 + fi +} + +main() { + set -e + + local generate_pk="true" + local output_dir="${PWD}" + + while [[ $# -gt 0 ]]; do + case $1 in + --output) + output_dir="$2" + shift + ;; + --no-pk) + info "Will not generate PK." + generate_pk="false" + ;; + -h|--help) + usage + ;; + *) + usage "Unknown option: $1" + ;; + esac + shift + done + + check_uefi_key_dir_name "${output_dir}" + pushd "${output_dir}" >/dev/null || die "Wrong output directory name" + + if [[ ! -e "${UEFI_VERSION_FILE}" ]]; then + echo "No version file found. Creating default ${UEFI_VERSION_FILE}." + printf '%s_key_version=1\n' {pk,kek,db,db_child} > "${UEFI_VERSION_FILE}" + fi + + local pk_key_version kek_key_version db_key_version db_child_key_version + + # Get the key versions for normal keypairs + pk_key_version=$(get_uefi_version "pk_key_version") + kek_key_version=$(get_uefi_version "kek_key_version") + db_key_version=$(get_uefi_version "db_key_version") + db_child_key_version=$(get_uefi_version "db_child_key_version") + + if [[ "${generate_pk}" == "true" ]]; then + make_pk_keypair "${pk_key_version}" + fi + make_kek_keypair "${kek_key_version}" + make_db_keypair "${db_key_version}" + make_db_child_keypair "${db_key_version}" "${db_child_key_version}" + + popd >/dev/null +} + +main "$@" diff --git a/scripts/keygeneration/uefi/increment_db_child_key.sh b/scripts/keygeneration/uefi/increment_db_child_key.sh new file mode 100755 index 0000000..fe206f8 --- /dev/null +++ b/scripts/keygeneration/uefi/increment_db_child_key.sh @@ -0,0 +1,45 @@ +#!/bin/bash +# Copyright 2018 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Script to increment UEFI DB child key. + +# Load common constants and variables. +. "$(dirname "$0")/uefi_common.sh" + +# Abort on errors. +set -e + +if [ $# -ne 1 ]; then + cat < + + Increments the UEFI DB child key in the specified keyset. +EOF + exit 1 +fi + +KEY_DIR="$1" + +main() { + check_uefi_key_dir_name "${KEY_DIR}" + + load_current_uefi_key_versions "${KEY_DIR}" + new_db_child_key_ver=$(increment_uefi_version "${KEY_DIR}" \ + "db_child_key_version") + + cd "${KEY_DIR}" + backup_db_child_keypair "${CURR_DB_CHILD_KEY_VER}" + + cat < + + Increments the UEFI DB key in the specified keyset. +EOF + exit 1 +fi + +KEY_DIR="$1" + +main() { + check_uefi_key_dir_name "${KEY_DIR}" + + load_current_uefi_key_versions "${KEY_DIR}" + new_db_key_ver=$(increment_uefi_version "${KEY_DIR}" "db_key_version") + new_db_child_key_ver=1 + + cd "${KEY_DIR}" + backup_db_keypair_and_children "${CURR_DB_KEY_VER}" + + cat < + + Increments the UEFI Key Exchange Key (KEK) in the specified keyset. +EOF + exit 1 +fi + +KEY_DIR="$1" + +main() { + check_uefi_key_dir_name "${KEY_DIR}" + + load_current_uefi_key_versions "${KEY_DIR}" + new_kek_key_ver=$(increment_uefi_version "${KEY_DIR}" "kek_key_version") + + cd "${KEY_DIR}" + backup_kek_keypair "${CURR_KEK_KEY_VER}" + + cat < + + Increments the UEFI Platform Key (PK) in the specified keyset. +EOF + exit 1 +fi + +KEY_DIR="$1" + +main() { + check_uefi_key_dir_name "${KEY_DIR}" + + load_current_uefi_key_versions "${KEY_DIR}" + new_pk_key_ver=$(increment_uefi_version "${KEY_DIR}" "pk_key_version") + + cd "${KEY_DIR}" + backup_pk_keypair "${CURR_PK_KEY_VER}" + + cat < [UEFI_VERSION_FILE] +get_uefi_version() { + local key="$1" + local file="${2:-${UEFI_VERSION_FILE}}" + awk -F= -vkey="${key}" '$1 == key { print $NF }' "${file}" +} + +# Loads the current versions, prints them to stdout, and sets the global version +# variables: CURR_PK_KEY_VER CURR_KEK_KEY_VER CURR_DB_KEY_VER +# CURR_DB_CHILD_KEY_VER +# ARGS: KEY_DIR +load_current_uefi_key_versions() { + local key_dir="$1" + local UEFI_VERSION_FILE="${key_dir}/${UEFI_VERSION_FILE}" + if [[ ! -f "${UEFI_VERSION_FILE}" ]]; then + return 1 + fi + CURR_PK_KEY_VER=$(get_uefi_version "pk_key_version") + CURR_KEK_KEY_VER=$(get_uefi_version "kek_key_version") + CURR_DB_KEY_VER=$(get_uefi_version "db_key_version") + CURR_DB_CHILD_KEY_VER=$(get_uefi_version "db_child_key_version") + + cat </dev/null || return 1 + openssl req -new -x509 -nodes -newkey rsa:2048 -sha256 \ + -keyout "${key_name}.rsa" -out "${key_name}.pem" \ + -subj "${subj}" -days 3650 + popd >/dev/null +} + +# Generates a pair of a private key and a cert signed by the given CA. +# "$1" (the first argument) is the CA file name without extension. +# The results are signed by "$1/$1.{rsa,pem}", and are generated in +# "$1/$1.children" directory under the current directory. Generated files are +# $1/$1.children/$2.rsa: The private key +# $1/$1.children/$2.csr: The Certificate Signing Request +# $1/$1.children/$2.pem: The certificate signed by "$1.{rsa,pem}" +# ARGS: CA_NAME CHILD_KEY_NAME SUBJECT +_make_child_pair() { + local ca_name="$1" # Base filename without extension. + local child_key_name="$2" + local subj="$3" + + mkdir -p "${ca_name}/${ca_name}.children" + pushd "${ca_name}/${ca_name}.children" >/dev/null || return 1 + openssl req -new -nodes -newkey rsa:2048 -sha256 \ + -keyout "${child_key_name}.rsa" -out "${child_key_name}.csr" \ + -subj "${subj}" + openssl x509 -req -sha256 -CA "../${ca_name}.pem" -CAkey "../${ca_name}.rsa" \ + -CAcreateserial -in "${child_key_name}.csr" \ + -out "${child_key_name}.pem" -days 3650 + popd >/dev/null +} + +# Makes a PK (Platform Key) keypair. +# Generated files are +# pk/pk.rsa: The private key +# pk/pk.pem: The self-signed cert in PEM format +# ARGS: VERSION +make_pk_keypair() { + local version="$1" + _make_self_signed_pair pk \ + "$(_get_subj "UEFI Platform Key" "${version}")" +} + +# Makes a KEK (Key Exchange Key) keypair. +# Generated files are +# kek/kek.rsa: The private key +# kek/kek.pem: The self-signed cert in PEM format +# ARGS: VERSION +make_kek_keypair() { + local version="$1" + _make_self_signed_pair kek \ + "$(_get_subj "UEFI Key Exchange Key" "${version}")" +} + +# Makes a DB keypair. +# Generated files are +# db/db.rsa: The private key +# db/db.pem: The self-signed cert in PEM format +# ARGS: VERSION +make_db_keypair() { + local version="$1" + _make_self_signed_pair db \ + "$(_get_subj "UEFI DB Key" "${version}")" +} + +# Makes a DB child keypair (a keypair signed by the db key). +# Generated files are +# db/db.children/db_child.rsa: The private key +# db/db.children/db_child.csr: The Certificate Signing Request +# db/db.children/db_child.pem: The certificate signed by "db/db.{rsa,pem}" +# ARGS: DB_KEY_VERSION CHILD_KEY_VERSION +make_db_child_keypair() { + local db_key_version="$1" + local child_key_version="$2" + _make_child_pair db db_child \ + "$(_get_subj "UEFI DB Child Key" \ + "${db_key_version}.${child_key_version}")" +} + +# Makes a backup of a self-signed keypair. +# ARGS: KEY_NAME VERSION +_backup_self_signed_pair() { + local key_name="$1" + local version="$2" + pushd "${key_name}" >/dev/null || return 1 + mv --no-clobber "${key_name}".{rsa,"v${version}.rsa"} + mv --no-clobber "${key_name}".{pem,"v${version}.pem"} + popd >/dev/null +} + +# Makes a backup of a self-signed keypair and its child keys. +# ARGS: KEY_NAME VERSION +_backup_self_signed_pair_and_children() { + local key_name="$1" + local version="$2" + _backup_self_signed_pair "${key_name}" "${version}" + pushd "${key_name}" >/dev/null || return 1 + mv --no-clobber "${key_name}".{children,"v${version}.children"} + popd >/dev/null +} + +# Makes a backup of a child keypair signed by a CA. +# ARGS: CA_NAME CHILD_KEY_NAME CHILD_KEY_VERSION +_backup_child_pair() { + local ca_name="$1" + local child_key_name="$2" + local child_key_version="$3" + pushd "${ca_name}/${ca_name}.children" >/dev/null || return 1 + mv --no-clobber "${child_key_name}".{rsa,"v${child_key_version}.rsa"} + mv --no-clobber "${child_key_name}".{csr,"v${child_key_version}.csr"} + mv --no-clobber "${child_key_name}".{pem,"v${child_key_version}.pem"} + popd >/dev/null +} + +# Makes a backup of the PK (Platform Key) keypair. +# Backup format: pk.v.{rsa,pem} +# ARGS: PK_KEY_VERSION +backup_pk_keypair() { + local pk_key_version="$1" + _backup_self_signed_pair pk "${pk_key_version}" +} + +# Makes a backup of the KEK (Key Exchange Key) keypair. +# Backup format: kek.v.{rsa,pem} +# ARGS: KEK_KEY_VERSION +backup_kek_keypair() { + local kek_key_version="$1" + _backup_self_signed_pair kek "${kek_key_version}" +} + +# Makes a backup of the DB keypair and its children. +# Backup format: +# for db keypair: db.v.{rsa,pem} +# for child keypair: db.v.childern/child*.{rsa,csr,pem} +# ARGS: DB_KEY_VERSION +backup_db_keypair_and_children() { + local db_key_version="$1" + _backup_self_signed_pair_and_children db "${db_key_version}" +} + +# Makes a backup of the DB child keypair. +# Backup format: db.children/child.v.{rsa,csr,pem} +# ARGS: DB_CHILD_KEY_VERSION +backup_db_child_keypair() { + local db_child_key_version="$1" + _backup_child_pair db db_child "${db_child_key_version}" +} + +# Writes new key version file with the updated key versions. +# Args: PK_KEY_VERSION KEK_KEY_VERSION DB_KEY_VERSION DB_CHILD_KEY_VERSION +write_updated_uefi_version_file() { + local pk_key_version="$1" + local kek_key_version="$2" + local db_key_version="$3" + local db_child_key_version="$4" + + cat > "${UEFI_VERSION_FILE}" < +increment_uefi_version() { + local key_dir="$1" + local UEFI_VERSION_FILE="${key_dir}/${UEFI_VERSION_FILE}" + local old_version=$(get_uefi_version "$2") + local new_version=$(( old_version + 1 )) + + echo "${new_version}" +} diff --git a/scripts/newbitmaps/README b/scripts/newbitmaps/README new file mode 100644 index 0000000..390afda --- /dev/null +++ b/scripts/newbitmaps/README @@ -0,0 +1,2 @@ +Firmware bitmaps genereation is now moved to ~/trunk/src/platform/bmpblk. + diff --git a/tests/cgpt_fuzzer.c b/tests/cgpt_fuzzer.c new file mode 100644 index 0000000..d440ee8 --- /dev/null +++ b/tests/cgpt_fuzzer.c @@ -0,0 +1,86 @@ +// Copyright 2019 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include +#include + +#include "cgptlib.h" +#include "gpt.h" + +struct MockDisk { + size_t sector_shift; + const uint8_t* data; + size_t size; +}; + +// GPT disk parameters provided by the fuzzer test case. See GptData type +// definition for details. +struct GptDataParams { + uint32_t sector_shift; + uint32_t flags; + uint64_t streaming_drive_sectors; + uint64_t gpt_drive_sectors; +} __attribute__((packed)); + +static struct MockDisk mock_disk; + +vb2_error_t VbExDiskRead(VbExDiskHandle_t h, uint64_t lba_start, + uint64_t lba_count, void *buffer) +{ + size_t lba_size = mock_disk.size >> mock_disk.sector_shift; + if (lba_start > lba_size || lba_size - lba_start < lba_count) { + return VB2_ERROR_UNKNOWN; + } + + size_t start = lba_start << mock_disk.sector_shift; + size_t size = lba_count << mock_disk.sector_shift; + + memcpy(buffer, &mock_disk.data[start], size); + return VB2_SUCCESS; +} + +int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size); + +int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + struct GptDataParams params; + if (size < sizeof(params)) { + return 0; + } + memcpy(¶ms, data, sizeof(params)); + + // Enforce a valid sector size. The sector size must accommodate the GPT + // header (the code assumes this) and large values don't make sense + // either (both in terms of actual hardware parameters and ability for + // the fuzzer to deal with effectively). + if (params.sector_shift < 9) { + params.sector_shift = 9; // 512 byte sectors min. + } + if (params.sector_shift > 12) { + params.sector_shift = 12; // 4K sectors max. + } + + mock_disk.sector_shift = params.sector_shift; + mock_disk.data = data + sizeof(params); + mock_disk.size = size - sizeof(params); + + GptData gpt; + memset(&gpt, 0, sizeof(gpt)); + gpt.sector_bytes = 1ULL << params.sector_shift; + gpt.streaming_drive_sectors = params.streaming_drive_sectors; + gpt.gpt_drive_sectors = params.gpt_drive_sectors; + gpt.flags = params.flags; + + if (0 == AllocAndReadGptData(0, &gpt)) { + int result = GptInit(&gpt); + while (GPT_SUCCESS == result) { + uint64_t part_start, part_size; + result = GptNextKernelEntry(&gpt, &part_start, + &part_size); + } + } + + WriteAndFreeGptData(0, &gpt); + + return 0; +} diff --git a/tests/cgptlib_test.c b/tests/cgptlib_test.c new file mode 100644 index 0000000..6fd7c32 --- /dev/null +++ b/tests/cgptlib_test.c @@ -0,0 +1,1661 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include + +#include "../cgpt/cgpt.h" +#include "cgptlib_internal.h" +#include "cgptlib_test.h" +#include "crc32.h" +#include "crc32_test.h" +#include "gpt.h" +#include "test_common.h" + +/* + * Testing partition layout (sector_bytes=512) + * + * LBA Size Usage + * --------------------------------------------------------- + * 0 1 PMBR + * 1 1 primary partition header + * 2 32 primary partition entries (128B * 128) + * 34 100 kernel A (index: 0) + * 134 100 root A (index: 1) + * 234 100 root B (index: 2) + * 334 100 kernel B (index: 3) + * 434 32 secondary partition entries + * 466 1 secondary partition header + * 467 + */ +#define KERNEL_A 0 +#define KERNEL_B 1 +#define ROOTFS_A 2 +#define ROOTFS_B 3 +#define KERNEL_X 2 /* Overload ROOTFS_A, for some GetNext tests */ +#define KERNEL_Y 3 /* Overload ROOTFS_B, for some GetNext tests */ + +#define DEFAULT_SECTOR_SIZE 512 +#define MAX_SECTOR_SIZE 4096 +#define DEFAULT_DRIVE_SECTORS 467 +#define TOTAL_ENTRIES_SIZE GPT_ENTRIES_ALLOC_SIZE /* 16384 */ +#define PARTITION_ENTRIES_SIZE TOTAL_ENTRIES_SIZE /* 16384 */ + +static const Guid guid_zero = {{{0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 0}}}}; +static const Guid guid_kernel = GPT_ENT_TYPE_CHROMEOS_KERNEL; +static const Guid guid_rootfs = GPT_ENT_TYPE_CHROMEOS_ROOTFS; + +// cgpt_common.c requires these be defined if linked in. +const char *progname = "CGPT-TEST"; +const char *command = "TEST"; + +/* + * Copy a random-for-this-program-only Guid into the dest. The num parameter + * completely determines the Guid. + */ +static void SetGuid(void *dest, uint32_t num) +{ + Guid g = {{{num,0xd450,0x44bc,0xa6,0x93, + {0xb8,0xac,0x75,0x5f,0xcd,0x48}}}}; + memcpy(dest, &g, sizeof(Guid)); +} + +/* + * Given a GptData pointer, first re-calculate entries CRC32 value, then reset + * header CRC32 value to 0, and calculate header CRC32 value. Both primary and + * secondary are updated. + */ +static void RefreshCrc32(GptData *gpt) +{ + GptHeader *header, *header2; + GptEntry *entries, *entries2; + + header = (GptHeader *)gpt->primary_header; + entries = (GptEntry *)gpt->primary_entries; + header2 = (GptHeader *)gpt->secondary_header; + entries2 = (GptEntry *)gpt->secondary_entries; + + header->entries_crc32 = + Crc32((uint8_t *)entries, + header->number_of_entries * header->size_of_entry); + header->header_crc32 = 0; + header->header_crc32 = Crc32((uint8_t *)header, header->size); + header2->entries_crc32 = + Crc32((uint8_t *)entries2, + header2->number_of_entries * header2->size_of_entry); + header2->header_crc32 = 0; + header2->header_crc32 = Crc32((uint8_t *)header2, header2->size); +} + +static void ZeroHeaders(GptData *gpt) +{ + memset(gpt->primary_header, 0, MAX_SECTOR_SIZE); + memset(gpt->secondary_header, 0, MAX_SECTOR_SIZE); +} + +static void ZeroEntries(GptData *gpt) +{ + memset(gpt->primary_entries, 0, PARTITION_ENTRIES_SIZE); + memset(gpt->secondary_entries, 0, PARTITION_ENTRIES_SIZE); +} + +static void ZeroHeadersEntries(GptData *gpt) +{ + ZeroHeaders(gpt); + ZeroEntries(gpt); +} + +/* + * Return a pointer to a static GptData instance (no free is required). + * All fields are zero except 4 pointers linking to header and entries. + * All content of headers and entries are zero. + */ +static GptData *GetEmptyGptData(void) +{ + static GptData gpt; + static uint8_t primary_header[MAX_SECTOR_SIZE]; + static uint8_t primary_entries[PARTITION_ENTRIES_SIZE]; + static uint8_t secondary_header[MAX_SECTOR_SIZE]; + static uint8_t secondary_entries[PARTITION_ENTRIES_SIZE]; + + memset(&gpt, 0, sizeof(gpt)); + gpt.primary_header = primary_header; + gpt.primary_entries = primary_entries; + gpt.secondary_header = secondary_header; + gpt.secondary_entries = secondary_entries; + ZeroHeadersEntries(&gpt); + + /* Initialize GptData internal states. */ + gpt.current_kernel = CGPT_KERNEL_ENTRY_NOT_FOUND; + + return &gpt; +} + +/* + * Fill in most of fields and creates the layout described in the top of this + * file. Before calling this function, primary/secondary header/entries must + * have been pointed to the buffer, say, a gpt returned from GetEmptyGptData(). + * This function returns a good (valid) copy of GPT layout described in top of + * this file. + */ +static void BuildTestGptData(GptData *gpt) +{ + GptHeader *header, *header2; + GptEntry *entries, *entries2; + Guid chromeos_kernel = GPT_ENT_TYPE_CHROMEOS_KERNEL; + Guid chromeos_rootfs = GPT_ENT_TYPE_CHROMEOS_ROOTFS; + + gpt->sector_bytes = DEFAULT_SECTOR_SIZE; + gpt->streaming_drive_sectors = + gpt->gpt_drive_sectors = DEFAULT_DRIVE_SECTORS; + gpt->current_kernel = CGPT_KERNEL_ENTRY_NOT_FOUND; + gpt->valid_headers = MASK_BOTH; + gpt->valid_entries = MASK_BOTH; + gpt->modified = 0; + + /* Build primary */ + header = (GptHeader *)gpt->primary_header; + entries = (GptEntry *)gpt->primary_entries; + memcpy(header->signature, GPT_HEADER_SIGNATURE, + GPT_HEADER_SIGNATURE_SIZE); + header->revision = GPT_HEADER_REVISION; + header->size = sizeof(GptHeader); + header->reserved_zero = 0; + header->my_lba = 1; + header->alternate_lba = DEFAULT_DRIVE_SECTORS - 1; + header->first_usable_lba = 34; + header->last_usable_lba = DEFAULT_DRIVE_SECTORS - 1 - 32 - 1; /* 433 */ + header->entries_lba = 2; + /* 512B / 128B * 32sectors = 128 entries */ + header->number_of_entries = 128; + header->size_of_entry = 128; /* bytes */ + memcpy(&entries[0].type, &chromeos_kernel, sizeof(chromeos_kernel)); + SetGuid(&entries[0].unique, 0); + entries[0].starting_lba = 34; + entries[0].ending_lba = 133; + memcpy(&entries[1].type, &chromeos_rootfs, sizeof(chromeos_rootfs)); + SetGuid(&entries[1].unique, 1); + entries[1].starting_lba = 134; + entries[1].ending_lba = 232; + memcpy(&entries[2].type, &chromeos_rootfs, sizeof(chromeos_rootfs)); + SetGuid(&entries[2].unique, 2); + entries[2].starting_lba = 234; + entries[2].ending_lba = 331; + memcpy(&entries[3].type, &chromeos_kernel, sizeof(chromeos_kernel)); + SetGuid(&entries[3].unique, 3); + entries[3].starting_lba = 334; + entries[3].ending_lba = 430; + + /* Build secondary */ + header2 = (GptHeader *)gpt->secondary_header; + entries2 = (GptEntry *)gpt->secondary_entries; + memcpy(header2, header, sizeof(GptHeader)); + memcpy(entries2, entries, PARTITION_ENTRIES_SIZE); + header2->my_lba = DEFAULT_DRIVE_SECTORS - 1; /* 466 */ + header2->alternate_lba = 1; + header2->entries_lba = DEFAULT_DRIVE_SECTORS - 1 - 32; /* 434 */ + + RefreshCrc32(gpt); +} + +/* + * Test if the structures are the expected size; if this fails, struct packing + * is not working properly. + */ +static int StructSizeTest(void) +{ + + EXPECT(GUID_EXPECTED_SIZE == sizeof(Guid)); + EXPECT(GPTHEADER_EXPECTED_SIZE == sizeof(GptHeader)); + EXPECT(GPTENTRY_EXPECTED_SIZE == sizeof(GptEntry)); + return TEST_OK; +} + + +/* Test if the default structure returned by BuildTestGptData() is good. */ +static int TestBuildTestGptData(void) +{ + GptData *gpt; + + gpt = GetEmptyGptData(); + BuildTestGptData(gpt); + EXPECT(GPT_SUCCESS == GptInit(gpt)); + gpt->sector_bytes = 0; + EXPECT(GPT_ERROR_INVALID_SECTOR_SIZE == GptInit(gpt)); + return TEST_OK; +} + +/* + * Test if wrong sector_bytes or drive_sectors is detected by GptInit(). + * Currently we only support 512 bytes per sector. In the future, we may + * support other sizes. A too small drive_sectors should be rejected by + * GptInit(). + */ +static int ParameterTests(void) +{ + GptData *gpt; + struct { + uint32_t sector_bytes; + uint64_t drive_sectors; + int expected_retval; + } cases[] = { + {512, DEFAULT_DRIVE_SECTORS, GPT_SUCCESS}, + {520, DEFAULT_DRIVE_SECTORS, GPT_ERROR_INVALID_SECTOR_SIZE}, + {123, DEFAULT_DRIVE_SECTORS, GPT_ERROR_INVALID_SECTOR_SIZE}, + {4097, DEFAULT_DRIVE_SECTORS, GPT_ERROR_INVALID_SECTOR_SIZE}, + {256, DEFAULT_DRIVE_SECTORS, GPT_ERROR_INVALID_SECTOR_SIZE}, + {512, 0, GPT_ERROR_INVALID_SECTOR_NUMBER}, + {512, 10, GPT_ERROR_INVALID_SECTOR_NUMBER}, + {512, GPT_PMBR_SECTORS + GPT_HEADER_SECTORS * 2 + + TOTAL_ENTRIES_SIZE / DEFAULT_SECTOR_SIZE * 2, GPT_SUCCESS}, + {4096, DEFAULT_DRIVE_SECTORS, GPT_SUCCESS}, + {2048, DEFAULT_DRIVE_SECTORS, GPT_SUCCESS}, + {8192, DEFAULT_DRIVE_SECTORS, GPT_SUCCESS}, + }; + int i; + + gpt = GetEmptyGptData(); + for (i = 0; i < ARRAY_SIZE(cases); ++i) { + BuildTestGptData(gpt); + gpt->sector_bytes = cases[i].sector_bytes; + gpt->streaming_drive_sectors = + gpt->gpt_drive_sectors = cases[i].drive_sectors; + EXPECT(cases[i].expected_retval == CheckParameters(gpt)); + } + + return TEST_OK; +} + +/* Test if header CRC in two copies are calculated. */ +static int HeaderCrcTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptHeader *h1 = (GptHeader *)gpt->primary_header; + + BuildTestGptData(gpt); + EXPECT(HeaderCrc(h1) == h1->header_crc32); + + /* CRC covers first byte of header */ + BuildTestGptData(gpt); + gpt->primary_header[0] ^= 0xa5; + EXPECT(HeaderCrc(h1) != h1->header_crc32); + + /* CRC covers last byte of header */ + BuildTestGptData(gpt); + gpt->primary_header[h1->size - 1] ^= 0x5a; + EXPECT(HeaderCrc(h1) != h1->header_crc32); + + /* CRC only covers header */ + BuildTestGptData(gpt); + gpt->primary_header[h1->size] ^= 0x5a; + EXPECT(HeaderCrc(h1) == h1->header_crc32); + + return TEST_OK; +} + +/* Test if header-same comparison works. */ +static int HeaderSameTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptHeader *h1 = (GptHeader *)gpt->primary_header; + GptHeader *h2 = (GptHeader *)gpt->secondary_header; + GptHeader h3; + + EXPECT(0 == HeaderFieldsSame(h1, h2)); + + memcpy(&h3, h2, sizeof(h3)); + h3.signature[0] ^= 0xba; + EXPECT(1 == HeaderFieldsSame(h1, &h3)); + + memcpy(&h3, h2, sizeof(h3)); + h3.revision++; + EXPECT(1 == HeaderFieldsSame(h1, &h3)); + + memcpy(&h3, h2, sizeof(h3)); + h3.size++; + EXPECT(1 == HeaderFieldsSame(h1, &h3)); + + memcpy(&h3, h2, sizeof(h3)); + h3.reserved_zero++; + EXPECT(1 == HeaderFieldsSame(h1, &h3)); + + memcpy(&h3, h2, sizeof(h3)); + h3.first_usable_lba++; + EXPECT(1 == HeaderFieldsSame(h1, &h3)); + + memcpy(&h3, h2, sizeof(h3)); + h3.last_usable_lba++; + EXPECT(1 == HeaderFieldsSame(h1, &h3)); + + memcpy(&h3, h2, sizeof(h3)); + h3.disk_uuid.u.raw[0] ^= 0xba; + EXPECT(1 == HeaderFieldsSame(h1, &h3)); + + memcpy(&h3, h2, sizeof(h3)); + h3.number_of_entries++; + EXPECT(1 == HeaderFieldsSame(h1, &h3)); + + memcpy(&h3, h2, sizeof(h3)); + h3.size_of_entry++; + EXPECT(1 == HeaderFieldsSame(h1, &h3)); + + memcpy(&h3, h2, sizeof(h3)); + h3.entries_crc32++; + EXPECT(1 == HeaderFieldsSame(h1, &h3)); + + return TEST_OK; +} + +/* Test if signature ("EFI PART") is checked. */ +static int SignatureTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptHeader *h1 = (GptHeader *)gpt->primary_header; + GptHeader *h2 = (GptHeader *)gpt->secondary_header; + int i; + + EXPECT(1 == CheckHeader(NULL, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + + for (i = 0; i < 8; ++i) { + BuildTestGptData(gpt); + h1->signature[i] ^= 0xff; + h2->signature[i] ^= 0xff; + RefreshCrc32(gpt); + EXPECT(1 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + EXPECT(1 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + } + + return TEST_OK; +} + +/* + * The revision we currently support is GPT_HEADER_REVISION. If the revision + * in header is not that, we expect the header is invalid. + */ +static int RevisionTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptHeader *h1 = (GptHeader *)gpt->primary_header; + GptHeader *h2 = (GptHeader *)gpt->secondary_header; + int i; + + struct { + uint32_t value_to_test; + int expect_rv; + } cases[] = { + {0x01000000, 1}, + {0x00010000, 0}, /* GPT_HEADER_REVISION */ + {0x00000100, 1}, + {0x00000001, 1}, + {0x23010456, 1}, + }; + + for (i = 0; i < ARRAY_SIZE(cases); ++i) { + BuildTestGptData(gpt); + h1->revision = cases[i].value_to_test; + h2->revision = cases[i].value_to_test; + RefreshCrc32(gpt); + + EXPECT(CheckHeader(h1, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes) == + cases[i].expect_rv); + EXPECT(CheckHeader(h2, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, + gpt->sector_bytes) == cases[i].expect_rv); + } + return TEST_OK; +} + +static int SizeTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptHeader *h1 = (GptHeader *)gpt->primary_header; + GptHeader *h2 = (GptHeader *)gpt->secondary_header; + int i; + + struct { + uint32_t value_to_test; + int expect_rv; + } cases[] = { + {91, 1}, + {92, 0}, + {93, 0}, + {511, 0}, + {512, 0}, + {513, 1}, + }; + + for (i = 0; i < ARRAY_SIZE(cases); ++i) { + BuildTestGptData(gpt); + h1->size = cases[i].value_to_test; + h2->size = cases[i].value_to_test; + RefreshCrc32(gpt); + + EXPECT(CheckHeader(h1, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes) == + cases[i].expect_rv); + EXPECT(CheckHeader(h2, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes) == + cases[i].expect_rv); + } + return TEST_OK; +} + +/* Test if CRC is checked. */ +static int CrcFieldTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptHeader *h1 = (GptHeader *)gpt->primary_header; + GptHeader *h2 = (GptHeader *)gpt->secondary_header; + + BuildTestGptData(gpt); + /* Modify a field that the header verification doesn't care about */ + h1->entries_crc32++; + h2->entries_crc32++; + EXPECT(1 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + EXPECT(1 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + /* Refresh the CRC; should pass now */ + RefreshCrc32(gpt); + EXPECT(0 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + EXPECT(0 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + + return TEST_OK; +} + +/* Test if reserved fields are checked. We'll try non-zero values to test. */ +static int ReservedFieldsTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptHeader *h1 = (GptHeader *)gpt->primary_header; + GptHeader *h2 = (GptHeader *)gpt->secondary_header; + + BuildTestGptData(gpt); + h1->reserved_zero ^= 0x12345678; /* whatever random */ + h2->reserved_zero ^= 0x12345678; /* whatever random */ + RefreshCrc32(gpt); + EXPECT(1 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + EXPECT(1 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + +#ifdef PADDING_CHECKED + /* TODO: padding check is currently disabled */ + BuildTestGptData(gpt); + h1->padding[12] ^= 0x34; /* whatever random */ + h2->padding[56] ^= 0x78; /* whatever random */ + RefreshCrc32(gpt); + EXPECT(1 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + EXPECT(1 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); +#endif + + return TEST_OK; +} + +/* + * Technically, any size which is 2^N where N > 6 should work, but our + * library only supports one size. + */ +static int SizeOfPartitionEntryTest(void) { + GptData *gpt = GetEmptyGptData(); + GptHeader *h1 = (GptHeader *)gpt->primary_header; + GptHeader *h2 = (GptHeader *)gpt->secondary_header; + int i; + + struct { + uint32_t value_to_test; + int expect_rv; + } cases[] = { + {127, 1}, + {128, 0}, + {129, 1}, + {256, 1}, + {512, 1}, + }; + + /* Check size of entryes */ + for (i = 0; i < ARRAY_SIZE(cases); ++i) { + BuildTestGptData(gpt); + h1->size_of_entry = cases[i].value_to_test; + h2->size_of_entry = cases[i].value_to_test; + h1->number_of_entries = TOTAL_ENTRIES_SIZE / + cases[i].value_to_test; + h2->number_of_entries = TOTAL_ENTRIES_SIZE / + cases[i].value_to_test; + RefreshCrc32(gpt); + + EXPECT(CheckHeader(h1, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes) == + cases[i].expect_rv); + EXPECT(CheckHeader(h2, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes) == + cases[i].expect_rv); + } + + return TEST_OK; +} + +/* + * Technically, any size which is 2^N where N > 6 should work, but our library + * only supports one size. + */ +static int NumberOfPartitionEntriesTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptHeader *h1 = (GptHeader *)gpt->primary_header; + GptHeader *h2 = (GptHeader *)gpt->secondary_header; + + BuildTestGptData(gpt); + h1->number_of_entries--; + h2->number_of_entries /= 2; + /* Because we halved h2 entries, its entries_lba is going to change. */ + h2->entries_lba = h2->my_lba - CalculateEntriesSectors(h2, gpt->sector_bytes); + RefreshCrc32(gpt); + EXPECT(1 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + EXPECT(1 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + /* But it's okay to have less if the GPT structs are stored elsewhere. */ + EXPECT(0 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, GPT_FLAG_EXTERNAL, gpt->sector_bytes)); + EXPECT(0 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, GPT_FLAG_EXTERNAL, gpt->sector_bytes)); + + return TEST_OK; +} + + +/* Test if myLBA field is checked (1 for primary, last for secondary). */ +static int MyLbaTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptHeader *h1 = (GptHeader *)gpt->primary_header; + GptHeader *h2 = (GptHeader *)gpt->secondary_header; + + /* myLBA depends on primary vs secondary flag */ + BuildTestGptData(gpt); + EXPECT(1 == CheckHeader(h1, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + EXPECT(1 == CheckHeader(h2, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + + BuildTestGptData(gpt); + h1->my_lba--; + h2->my_lba--; + RefreshCrc32(gpt); + EXPECT(1 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + EXPECT(1 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + + BuildTestGptData(gpt); + h1->my_lba = 2; + h2->my_lba--; + RefreshCrc32(gpt); + EXPECT(1 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + EXPECT(1 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + + /* We should ignore the alternate_lba field entirely */ + BuildTestGptData(gpt); + h1->alternate_lba++; + h2->alternate_lba++; + RefreshCrc32(gpt); + EXPECT(0 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + EXPECT(0 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + + BuildTestGptData(gpt); + h1->alternate_lba--; + h2->alternate_lba--; + RefreshCrc32(gpt); + EXPECT(0 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + EXPECT(0 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + + BuildTestGptData(gpt); + h1->entries_lba++; + h2->entries_lba++; + RefreshCrc32(gpt); + /* + * We support a padding between primary GPT header and its entries. So + * this still passes. + */ + EXPECT(0 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + /* + * But the secondary table should fail because it would overlap the + * header, which is now lying after its entry array. + */ + EXPECT(1 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + + BuildTestGptData(gpt); + h1->entries_lba--; + h2->entries_lba--; + RefreshCrc32(gpt); + EXPECT(1 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + EXPECT(1 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + + return TEST_OK; +} + +/* Test if FirstUsableLBA and LastUsableLBA are checked. + * FirstUsableLBA must be after the end of the primary GPT table array. + * LastUsableLBA must be before the start of the secondary GPT table array. + * FirstUsableLBA <= LastUsableLBA. + * Also see CheckHeaderOffDevice() test. */ +static int FirstUsableLbaAndLastUsableLbaTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptHeader *h1 = (GptHeader *)gpt->primary_header; + GptHeader *h2 = (GptHeader *)gpt->secondary_header; + int i; + + struct { + uint64_t primary_entries_lba; + uint64_t primary_first_usable_lba; + uint64_t primary_last_usable_lba; + uint64_t secondary_first_usable_lba; + uint64_t secondary_last_usable_lba; + uint64_t secondary_entries_lba; + int primary_rv; + int secondary_rv; + } cases[] = { + {2, 34, 433, 34, 433, 434, 0, 0}, + {2, 34, 432, 34, 430, 434, 0, 0}, + {2, 33, 433, 33, 433, 434, 1, 1}, + {2, 34, 434, 34, 433, 434, 1, 0}, + {2, 34, 433, 34, 434, 434, 0, 1}, + {2, 35, 433, 35, 433, 434, 0, 0}, + {2, 433, 433, 433, 433, 434, 0, 0}, + {2, 434, 433, 434, 434, 434, 1, 1}, + {2, 433, 34, 34, 433, 434, 1, 0}, + {2, 34, 433, 433, 34, 434, 0, 1}, + }; + + for (i = 0; i < ARRAY_SIZE(cases); ++i) { + BuildTestGptData(gpt); + h1->entries_lba = cases[i].primary_entries_lba; + h1->first_usable_lba = cases[i].primary_first_usable_lba; + h1->last_usable_lba = cases[i].primary_last_usable_lba; + h2->entries_lba = cases[i].secondary_entries_lba; + h2->first_usable_lba = cases[i].secondary_first_usable_lba; + h2->last_usable_lba = cases[i].secondary_last_usable_lba; + RefreshCrc32(gpt); + + EXPECT(CheckHeader(h1, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes) == + cases[i].primary_rv); + EXPECT(CheckHeader(h2, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes) == + cases[i].secondary_rv); + } + + return TEST_OK; +} + +/* + * Test if PartitionEntryArrayCRC32 is checked. PartitionEntryArrayCRC32 must + * be calculated over SizeOfPartitionEntry * NumberOfPartitionEntries bytes. + */ +static int EntriesCrcTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptHeader *h1 = (GptHeader *)gpt->primary_header; + GptEntry *e1 = (GptEntry *)(gpt->primary_entries); + GptEntry *e2 = (GptEntry *)(gpt->secondary_entries); + + /* Modify first byte of primary entries, and expect the CRC is wrong. */ + BuildTestGptData(gpt); + EXPECT(0 == CheckEntries(e1, h1)); + EXPECT(0 == CheckEntries(e2, h1)); + gpt->primary_entries[0] ^= 0xa5; /* just XOR a non-zero value */ + gpt->secondary_entries[TOTAL_ENTRIES_SIZE-1] ^= 0x5a; + EXPECT(GPT_ERROR_CRC_CORRUPTED == CheckEntries(e1, h1)); + EXPECT(GPT_ERROR_CRC_CORRUPTED == CheckEntries(e2, h1)); + + return TEST_OK; +} + +/* + * Test if partition geometry is checked. + * All active (non-zero PartitionTypeGUID) partition entries should have: + * entry.StartingLBA >= header.FirstUsableLBA + * entry.EndingLBA <= header.LastUsableLBA + * entry.StartingLBA <= entry.EndingLBA + */ +static int ValidEntryTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptHeader *h1 = (GptHeader *)gpt->primary_header; + GptEntry *e1 = (GptEntry *)(gpt->primary_entries); + + /* error case: entry.StartingLBA < header.FirstUsableLBA */ + BuildTestGptData(gpt); + e1[0].starting_lba = h1->first_usable_lba - 1; + RefreshCrc32(gpt); + EXPECT(GPT_ERROR_OUT_OF_REGION == CheckEntries(e1, h1)); + + /* error case: entry.EndingLBA > header.LastUsableLBA */ + BuildTestGptData(gpt); + e1[2].ending_lba = h1->last_usable_lba + 1; + RefreshCrc32(gpt); + EXPECT(GPT_ERROR_OUT_OF_REGION == CheckEntries(e1, h1)); + + /* error case: entry.StartingLBA > entry.EndingLBA */ + BuildTestGptData(gpt); + e1[3].starting_lba = e1[3].ending_lba + 1; + RefreshCrc32(gpt); + EXPECT(GPT_ERROR_OUT_OF_REGION == CheckEntries(e1, h1)); + + /* case: non active entry should be ignored. */ + BuildTestGptData(gpt); + memset(&e1[1].type, 0, sizeof(e1[1].type)); + e1[1].starting_lba = e1[1].ending_lba + 1; + RefreshCrc32(gpt); + EXPECT(0 == CheckEntries(e1, h1)); + + return TEST_OK; +} + +/* Test if overlapped partition tables can be detected. */ +static int OverlappedPartitionTest(void) { + GptData *gpt = GetEmptyGptData(); + GptHeader *h = (GptHeader *)gpt->primary_header; + GptEntry *e = (GptEntry *)gpt->primary_entries; + int i, j; + + struct { + int overlapped; + struct { + int active; + uint64_t starting_lba; + uint64_t ending_lba; + } entries[16]; /* enough for testing. */ + } cases[] = { + {GPT_SUCCESS, {{0, 100, 199}}}, + {GPT_SUCCESS, {{1, 100, 199}}}, + {GPT_SUCCESS, {{1, 100, 150}, {1, 200, 250}, {1, 300, 350}}}, + {GPT_ERROR_START_LBA_OVERLAP, + {{1, 200, 299}, {1, 100, 199}, {1, 100, 100}}}, + {GPT_ERROR_END_LBA_OVERLAP, + {{1, 200, 299}, {1, 100, 199}, {1, 299, 299}}}, + {GPT_SUCCESS, {{1, 300, 399}, {1, 200, 299}, {1, 100, 199}}}, + {GPT_ERROR_END_LBA_OVERLAP, + {{1, 100, 199}, {1, 199, 299}, {1, 299, 399}}}, + {GPT_ERROR_START_LBA_OVERLAP, + {{1, 100, 199}, {1, 200, 299}, {1, 75, 399}}}, + {GPT_ERROR_START_LBA_OVERLAP, + {{1, 100, 199}, {1, 75, 250}, {1, 200, 299}}}, + {GPT_ERROR_END_LBA_OVERLAP, + {{1, 75, 150}, {1, 100, 199}, {1, 200, 299}}}, + {GPT_ERROR_START_LBA_OVERLAP, + {{1, 200, 299}, {1, 100, 199}, {1, 300, 399}, {1, 100, 399}}}, + {GPT_SUCCESS, + {{1, 200, 299}, {1, 100, 199}, {1, 300, 399}, {0, 100, 399}}}, + {GPT_ERROR_START_LBA_OVERLAP, + {{1, 200, 300}, {1, 100, 200}, {1, 100, 400}, {1, 300, 400}}}, + {GPT_ERROR_START_LBA_OVERLAP, + {{0, 200, 300}, {1, 100, 200}, {1, 100, 400}, {1, 300, 400}}}, + {GPT_SUCCESS, + {{1, 200, 300}, {1, 100, 199}, {0, 100, 400}, {0, 300, 400}}}, + {GPT_ERROR_END_LBA_OVERLAP, + {{1, 200, 299}, {1, 100, 199}, {1, 199, 199}}}, + {GPT_SUCCESS, {{1, 200, 299}, {0, 100, 199}, {1, 199, 199}}}, + {GPT_SUCCESS, {{1, 200, 299}, {1, 100, 199}, {0, 199, 199}}}, + {GPT_ERROR_START_LBA_OVERLAP, + {{1, 199, 199}, {1, 200, 200}, {1, 201, 201}, {1, 202, 202}, + {1, 203, 203}, {1, 204, 204}, {1, 205, 205}, {1, 206, 206}, + {1, 207, 207}, {1, 208, 208}, {1, 199, 199}}}, + {GPT_SUCCESS, + {{1, 199, 199}, {1, 200, 200}, {1, 201, 201}, {1, 202, 202}, + {1, 203, 203}, {1, 204, 204}, {1, 205, 205}, {1, 206, 206}, + {1, 207, 207}, {1, 208, 208}, {0, 199, 199}}}, + }; + + for (i = 0; i < ARRAY_SIZE(cases); ++i) { + BuildTestGptData(gpt); + ZeroEntries(gpt); + for(j = 0; j < ARRAY_SIZE(cases[0].entries); ++j) { + if (!cases[i].entries[j].starting_lba) + break; + + if (cases[i].entries[j].active) { + memcpy(&e[j].type, &guid_kernel, sizeof(Guid)); + } + SetGuid(&e[j].unique, j); + e[j].starting_lba = cases[i].entries[j].starting_lba; + e[j].ending_lba = cases[i].entries[j].ending_lba; + } + RefreshCrc32(gpt); + + EXPECT(cases[i].overlapped == CheckEntries(e, h)); + } + return TEST_OK; +} + +/* Test both validity checking and repair. */ +static int ValidityCheckTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptHeader *h1 = (GptHeader *)gpt->primary_header; + GptHeader *h2 = (GptHeader *)gpt->secondary_header; + GptEntry *e1 = (GptEntry *)gpt->primary_entries; + uint8_t *tempptr; + + /* Unmodified test data is completely valid. */ + BuildTestGptData(gpt); + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_BOTH == gpt->valid_headers); + EXPECT(MASK_BOTH == gpt->valid_entries); + EXPECT(MASK_NONE == gpt->ignored); + /* Repair doesn't damage it */ + GptRepair(gpt); + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_BOTH == gpt->valid_headers); + EXPECT(MASK_BOTH == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + EXPECT(0 == gpt->modified); + + /* Invalid sector size should fail */ + BuildTestGptData(gpt); + gpt->sector_bytes = 1023; + EXPECT(GPT_ERROR_INVALID_SECTOR_SIZE == GptValidityCheck(gpt)); + + /* Modify headers */ + BuildTestGptData(gpt); + gpt->primary_header[0]++; + gpt->secondary_header[0]++; + EXPECT(GPT_ERROR_INVALID_HEADERS == GptValidityCheck(gpt)); + EXPECT(0 == gpt->valid_headers); + EXPECT(0 == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + /* Repair can't fix completely busted headers */ + GptRepair(gpt); + EXPECT(GPT_ERROR_INVALID_HEADERS == GptValidityCheck(gpt)); + EXPECT(0 == gpt->valid_headers); + EXPECT(0 == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + EXPECT(0 == gpt->modified); + + BuildTestGptData(gpt); + gpt->primary_header[0]++; + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_SECONDARY == gpt->valid_headers); + EXPECT(MASK_SECONDARY == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + GptRepair(gpt); + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_BOTH == gpt->valid_headers); + EXPECT(MASK_BOTH == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + EXPECT((GPT_MODIFIED_HEADER1 | GPT_MODIFIED_ENTRIES1) == gpt->modified); + + BuildTestGptData(gpt); + gpt->secondary_header[0]++; + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_PRIMARY == gpt->valid_headers); + EXPECT(MASK_PRIMARY == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + GptRepair(gpt); + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_BOTH == gpt->valid_headers); + EXPECT(MASK_BOTH == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + EXPECT((GPT_MODIFIED_HEADER2 | GPT_MODIFIED_ENTRIES2) == gpt->modified); + + /* + * Modify header1 and update its CRC. Since header2 is now different + * than header1, it'll be the one considered invalid. + */ + BuildTestGptData(gpt); + h1->size++; + RefreshCrc32(gpt); + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_PRIMARY == gpt->valid_headers); + EXPECT(MASK_BOTH == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + GptRepair(gpt); + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_BOTH == gpt->valid_headers); + EXPECT(MASK_BOTH == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + EXPECT(GPT_MODIFIED_HEADER2 == gpt->modified); + + /* Modify entries */ + BuildTestGptData(gpt); + gpt->primary_entries[0]++; + gpt->secondary_entries[0]++; + EXPECT(GPT_ERROR_INVALID_ENTRIES == GptValidityCheck(gpt)); + EXPECT(MASK_BOTH == gpt->valid_headers); + EXPECT(MASK_NONE == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + /* Repair can't fix both copies of entries being bad, either. */ + GptRepair(gpt); + EXPECT(GPT_ERROR_INVALID_ENTRIES == GptValidityCheck(gpt)); + EXPECT(MASK_BOTH == gpt->valid_headers); + EXPECT(MASK_NONE == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + EXPECT(0 == gpt->modified); + + BuildTestGptData(gpt); + gpt->primary_entries[0]++; + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_BOTH == gpt->valid_headers); + EXPECT(MASK_SECONDARY == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + GptRepair(gpt); + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_BOTH == gpt->valid_headers); + EXPECT(MASK_BOTH == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + EXPECT(GPT_MODIFIED_ENTRIES1 == gpt->modified); + + BuildTestGptData(gpt); + gpt->secondary_entries[0]++; + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_BOTH == gpt->valid_headers); + EXPECT(MASK_PRIMARY == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + GptRepair(gpt); + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_BOTH == gpt->valid_headers); + EXPECT(MASK_BOTH == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + EXPECT(GPT_MODIFIED_ENTRIES2 == gpt->modified); + + /* + * Modify entries and recompute CRCs, then make both primary and + * secondary entry pointers use the secondary data. The primary + * header will have the wrong entries CRC, so we should fall back + * to the secondary header. + */ + BuildTestGptData(gpt); + e1->starting_lba++; + RefreshCrc32(gpt); + tempptr = gpt->primary_entries; + gpt->primary_entries = gpt->secondary_entries; + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_SECONDARY == gpt->valid_headers); + EXPECT(MASK_BOTH == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + gpt->primary_entries = tempptr; + + /* Modify both header and entries */ + BuildTestGptData(gpt); + gpt->primary_header[0]++; + gpt->primary_entries[0]++; + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_SECONDARY == gpt->valid_headers); + EXPECT(MASK_SECONDARY == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + GptRepair(gpt); + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_BOTH == gpt->valid_headers); + EXPECT(MASK_BOTH == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + EXPECT((GPT_MODIFIED_HEADER1 | GPT_MODIFIED_ENTRIES1) == gpt->modified); + + BuildTestGptData(gpt); + gpt->secondary_header[0]++; + gpt->secondary_entries[0]++; + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_PRIMARY == gpt->valid_headers); + EXPECT(MASK_PRIMARY == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + GptRepair(gpt); + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_BOTH == gpt->valid_headers); + EXPECT(MASK_BOTH == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + EXPECT((GPT_MODIFIED_HEADER2 | GPT_MODIFIED_ENTRIES2) == gpt->modified); + + /* + * Test mismatched pairs (h1+e1 valid, h2+e2 valid but different. This + * simulates a partial update of the drive. + */ + BuildTestGptData(gpt); + gpt->secondary_entries[0]++; + RefreshCrc32(gpt); + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_PRIMARY == gpt->valid_headers); + EXPECT(MASK_PRIMARY == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + GptRepair(gpt); + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_BOTH == gpt->valid_headers); + EXPECT(MASK_BOTH == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + EXPECT((GPT_MODIFIED_HEADER2 | GPT_MODIFIED_ENTRIES2) == gpt->modified); + + /* Test unloaded entry array. */ + BuildTestGptData(gpt); + gpt->primary_entries = NULL; + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_SECONDARY == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + gpt = GetEmptyGptData(); + BuildTestGptData(gpt); + gpt->secondary_entries = NULL; + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_PRIMARY == gpt->valid_entries); + EXPECT(0 == gpt->ignored); + gpt = GetEmptyGptData(); + + /* Test unloaded header. */ + BuildTestGptData(gpt); + gpt->primary_header = NULL; + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_SECONDARY == gpt->valid_headers); + EXPECT(0 == gpt->ignored); + gpt = GetEmptyGptData(); + BuildTestGptData(gpt); + gpt->secondary_header = NULL; + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_PRIMARY == gpt->valid_headers); + EXPECT(0 == gpt->ignored); + gpt = GetEmptyGptData(); + + /* Test correct recognition of IGNOREME in primary GPT. */ + BuildTestGptData(gpt); + memset(gpt->primary_entries, 0, PARTITION_ENTRIES_SIZE); + memset(gpt->primary_header, 0, sizeof(GptHeader)); + memcpy(h1->signature, GPT_HEADER_SIGNATURE_IGNORED, + GPT_HEADER_SIGNATURE_SIZE); + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_BOTH == gpt->valid_headers); + EXPECT(MASK_BOTH == gpt->valid_entries); + EXPECT(MASK_PRIMARY == gpt->ignored); + EXPECT(0 == gpt->modified); + + /* Test correct recognition of IGNOREME in secondary GPT. */ + BuildTestGptData(gpt); + memset(gpt->secondary_entries, 0, PARTITION_ENTRIES_SIZE); + memset(gpt->secondary_header, 0, sizeof(GptHeader)); + memcpy(h2->signature, GPT_HEADER_SIGNATURE_IGNORED, + GPT_HEADER_SIGNATURE_SIZE); + EXPECT(GPT_SUCCESS == GptValidityCheck(gpt)); + EXPECT(MASK_BOTH == gpt->valid_headers); + EXPECT(MASK_BOTH == gpt->valid_entries); + EXPECT(MASK_SECONDARY == gpt->ignored); + EXPECT(0 == gpt->modified); + + /* Test that two IGNOREME GPTs are invalid. */ + ZeroHeadersEntries(gpt); + memcpy(h1->signature, GPT_HEADER_SIGNATURE_IGNORED, + GPT_HEADER_SIGNATURE_SIZE); + memcpy(h2->signature, GPT_HEADER_SIGNATURE_IGNORED, + GPT_HEADER_SIGNATURE_SIZE); + EXPECT(GPT_ERROR_INVALID_HEADERS == GptValidityCheck(gpt)); + EXPECT(0 == gpt->valid_headers); + EXPECT(0 == gpt->valid_entries); + EXPECT(MASK_BOTH == gpt->ignored); + EXPECT(0 == gpt->modified); + + /* Test that one IGNOREME GPT and one corrupted one are invalid. */ + BuildTestGptData(gpt); + memset(gpt->primary_entries, 0, PARTITION_ENTRIES_SIZE); + memset(gpt->primary_header, 0, sizeof(GptHeader)); + memcpy(h1->signature, GPT_HEADER_SIGNATURE_IGNORED, + GPT_HEADER_SIGNATURE_SIZE); + gpt->secondary_entries[0]++; + EXPECT(GPT_ERROR_INVALID_ENTRIES == GptValidityCheck(gpt)); + EXPECT(MASK_SECONDARY == gpt->valid_headers); + EXPECT(0 == gpt->valid_entries); + EXPECT(MASK_PRIMARY == gpt->ignored); + EXPECT(0 == gpt->modified); + + return TEST_OK; +} + +static int EntryAttributeGetSetTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptEntry *e = (GptEntry *)(gpt->primary_entries); + + e->attrs.whole = 0x0000000000000000ULL; + SetEntryRequired(e, 1); + EXPECT(0x0000000000000001ULL == e->attrs.whole); + EXPECT(1 == GetEntryRequired(e)); + e->attrs.whole = 0xFFFFFFFFFFFFFFFFULL; + SetEntryRequired(e, 0); + EXPECT(0xFFFFFFFFFFFFFFFEULL == e->attrs.whole); + EXPECT(0 == GetEntryRequired(e)); + + e->attrs.whole = 0x0000000000000000ULL; + SetEntryLegacyBoot(e, 1); + EXPECT(0x0000000000000004ULL == e->attrs.whole); + EXPECT(1 == GetEntryLegacyBoot(e)); + e->attrs.whole = 0xFFFFFFFFFFFFFFFFULL; + SetEntryLegacyBoot(e, 0); + EXPECT(0xFFFFFFFFFFFFFFFBULL == e->attrs.whole); + EXPECT(0 == GetEntryLegacyBoot(e)); + + e->attrs.whole = 0x0000000000000000ULL; + SetEntrySuccessful(e, 1); + EXPECT(0x0100000000000000ULL == e->attrs.whole); + EXPECT(1 == GetEntrySuccessful(e)); + e->attrs.whole = 0xFFFFFFFFFFFFFFFFULL; + SetEntrySuccessful(e, 0); + EXPECT(0xFEFFFFFFFFFFFFFFULL == e->attrs.whole); + EXPECT(0 == GetEntrySuccessful(e)); + + e->attrs.whole = 0x0000000000000000ULL; + SetEntryTries(e, 15); + EXPECT(15 == GetEntryTries(e)); + EXPECT(0x00F0000000000000ULL == e->attrs.whole); + e->attrs.whole = 0xFFFFFFFFFFFFFFFFULL; + SetEntryTries(e, 0); + EXPECT(0xFF0FFFFFFFFFFFFFULL == e->attrs.whole); + EXPECT(0 == GetEntryTries(e)); + + e->attrs.whole = 0x0000000000000000ULL; + SetEntryPriority(e, 15); + EXPECT(0x000F000000000000ULL == e->attrs.whole); + EXPECT(15 == GetEntryPriority(e)); + e->attrs.whole = 0xFFFFFFFFFFFFFFFFULL; + SetEntryPriority(e, 0); + EXPECT(0xFFF0FFFFFFFFFFFFULL == e->attrs.whole); + EXPECT(0 == GetEntryPriority(e)); + + e->attrs.whole = 0xFFFFFFFFFFFFFFFFULL; + EXPECT(1 == GetEntryRequired(e)); + EXPECT(1 == GetEntryLegacyBoot(e)); + EXPECT(1 == GetEntrySuccessful(e)); + EXPECT(15 == GetEntryPriority(e)); + EXPECT(15 == GetEntryTries(e)); + + e->attrs.whole = 0x0123000000000004ULL; + EXPECT(0 == GetEntryRequired(e)); + EXPECT(1 == GetEntryLegacyBoot(e)); + EXPECT(1 == GetEntrySuccessful(e)); + EXPECT(2 == GetEntryTries(e)); + EXPECT(3 == GetEntryPriority(e)); + + return TEST_OK; +} + +static int EntryTypeTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptEntry *e = (GptEntry *)(gpt->primary_entries); + + memcpy(&e->type, &guid_zero, sizeof(Guid)); + EXPECT(1 == IsUnusedEntry(e)); + EXPECT(0 == IsKernelEntry(e)); + + memcpy(&e->type, &guid_kernel, sizeof(Guid)); + EXPECT(0 == IsUnusedEntry(e)); + EXPECT(1 == IsKernelEntry(e)); + + memcpy(&e->type, &guid_rootfs, sizeof(Guid)); + EXPECT(0 == IsUnusedEntry(e)); + EXPECT(0 == IsKernelEntry(e)); + + return TEST_OK; +} + +/* Make an entry unused by clearing its type. */ +static void FreeEntry(GptEntry *e) +{ + memset(&e->type, 0, sizeof(Guid)); +} + +/* Set up an entry. */ +static void FillEntry(GptEntry *e, int is_kernel, + int priority, int successful, int tries) +{ + memcpy(&e->type, (is_kernel ? &guid_kernel : &guid_zero), sizeof(Guid)); + SetEntryPriority(e, priority); + SetEntrySuccessful(e, successful); + SetEntryTries(e, tries); +} + +/* + * Invalidate all kernel entries and expect GptNextKernelEntry() cannot find + * any usable kernel entry. + */ +static int NoValidKernelEntryTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptEntry *e1 = (GptEntry *)(gpt->primary_entries); + + BuildTestGptData(gpt); + SetEntryPriority(e1 + KERNEL_A, 0); + FreeEntry(e1 + KERNEL_B); + RefreshCrc32(gpt); + EXPECT(GPT_ERROR_NO_VALID_KERNEL == + GptNextKernelEntry(gpt, NULL, NULL)); + + return TEST_OK; +} + +static int GetNextNormalTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptEntry *e1 = (GptEntry *)(gpt->primary_entries); + uint64_t start, size; + + /* Normal case - both kernels successful */ + BuildTestGptData(gpt); + FillEntry(e1 + KERNEL_A, 1, 2, 1, 0); + FillEntry(e1 + KERNEL_B, 1, 2, 1, 0); + RefreshCrc32(gpt); + GptInit(gpt); + + EXPECT(GPT_SUCCESS == GptNextKernelEntry(gpt, &start, &size)); + EXPECT(KERNEL_A == gpt->current_kernel); + EXPECT(34 == start); + EXPECT(100 == size); + + EXPECT(GPT_SUCCESS == GptNextKernelEntry(gpt, &start, &size)); + EXPECT(KERNEL_B == gpt->current_kernel); + EXPECT(134 == start); + EXPECT(99 == size); + + EXPECT(GPT_ERROR_NO_VALID_KERNEL == + GptNextKernelEntry(gpt, &start, &size)); + EXPECT(-1 == gpt->current_kernel); + + /* Call as many times as you want; you won't get another kernel... */ + EXPECT(GPT_ERROR_NO_VALID_KERNEL == + GptNextKernelEntry(gpt, &start, &size)); + EXPECT(-1 == gpt->current_kernel); + + return TEST_OK; +} + +static int GetNextPrioTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptEntry *e1 = (GptEntry *)(gpt->primary_entries); + uint64_t start, size; + + /* Priority 3, 4, 0, 4 - should boot order B, Y, A */ + BuildTestGptData(gpt); + FillEntry(e1 + KERNEL_A, 1, 3, 1, 0); + FillEntry(e1 + KERNEL_B, 1, 4, 1, 0); + FillEntry(e1 + KERNEL_X, 1, 0, 1, 0); + FillEntry(e1 + KERNEL_Y, 1, 4, 1, 0); + RefreshCrc32(gpt); + GptInit(gpt); + + EXPECT(GPT_SUCCESS == GptNextKernelEntry(gpt, &start, &size)); + EXPECT(KERNEL_B == gpt->current_kernel); + EXPECT(GPT_SUCCESS == GptNextKernelEntry(gpt, &start, &size)); + EXPECT(KERNEL_Y == gpt->current_kernel); + EXPECT(GPT_SUCCESS == GptNextKernelEntry(gpt, &start, &size)); + EXPECT(KERNEL_A == gpt->current_kernel); + EXPECT(GPT_ERROR_NO_VALID_KERNEL == + GptNextKernelEntry(gpt, &start, &size)); + + return TEST_OK; +} + +static int GetNextTriesTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptEntry *e1 = (GptEntry *)(gpt->primary_entries); + uint64_t start, size; + + /* Tries=nonzero is attempted just like success, but tries=0 isn't */ + BuildTestGptData(gpt); + FillEntry(e1 + KERNEL_A, 1, 2, 1, 0); + FillEntry(e1 + KERNEL_B, 1, 3, 0, 0); + FillEntry(e1 + KERNEL_X, 1, 4, 0, 1); + FillEntry(e1 + KERNEL_Y, 1, 0, 0, 5); + RefreshCrc32(gpt); + GptInit(gpt); + + EXPECT(GPT_SUCCESS == GptNextKernelEntry(gpt, &start, &size)); + EXPECT(KERNEL_X == gpt->current_kernel); + EXPECT(GPT_SUCCESS == GptNextKernelEntry(gpt, &start, &size)); + EXPECT(KERNEL_A == gpt->current_kernel); + EXPECT(GPT_ERROR_NO_VALID_KERNEL == + GptNextKernelEntry(gpt, &start, &size)); + + return TEST_OK; +} + +static int GptUpdateTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptEntry *e = (GptEntry *)(gpt->primary_entries); + GptEntry *e2 = (GptEntry *)(gpt->secondary_entries); + uint64_t start, size; + + /* Tries=nonzero is attempted just like success, but tries=0 isn't */ + BuildTestGptData(gpt); + FillEntry(e + KERNEL_A, 1, 4, 1, 0); + FillEntry(e + KERNEL_B, 1, 3, 0, 2); + FillEntry(e + KERNEL_X, 1, 2, 0, 2); + RefreshCrc32(gpt); + GptInit(gpt); + gpt->modified = 0; /* Nothing modified yet */ + + /* Successful kernel */ + EXPECT(GPT_SUCCESS == GptNextKernelEntry(gpt, &start, &size)); + EXPECT(KERNEL_A == gpt->current_kernel); + EXPECT(1 == GetEntrySuccessful(e + KERNEL_A)); + EXPECT(4 == GetEntryPriority(e + KERNEL_A)); + EXPECT(0 == GetEntryTries(e + KERNEL_A)); + EXPECT(1 == GetEntrySuccessful(e2 + KERNEL_A)); + EXPECT(4 == GetEntryPriority(e2 + KERNEL_A)); + EXPECT(0 == GetEntryTries(e2 + KERNEL_A)); + /* Trying successful kernel changes nothing */ + EXPECT(GPT_SUCCESS == GptUpdateKernelEntry(gpt, GPT_UPDATE_ENTRY_TRY)); + EXPECT(1 == GetEntrySuccessful(e + KERNEL_A)); + EXPECT(4 == GetEntryPriority(e + KERNEL_A)); + EXPECT(0 == GetEntryTries(e + KERNEL_A)); + EXPECT(0 == gpt->modified); + /* Marking it bad also does not update it. */ + EXPECT(GPT_SUCCESS == GptUpdateKernelEntry(gpt, GPT_UPDATE_ENTRY_BAD)); + EXPECT(1 == GetEntrySuccessful(e + KERNEL_A)); + EXPECT(4 == GetEntryPriority(e + KERNEL_A)); + EXPECT(0 == GetEntryTries(e + KERNEL_A)); + EXPECT(0 == gpt->modified); + + /* Kernel with tries */ + EXPECT(GPT_SUCCESS == GptNextKernelEntry(gpt, &start, &size)); + EXPECT(KERNEL_B == gpt->current_kernel); + EXPECT(0 == GetEntrySuccessful(e + KERNEL_B)); + EXPECT(3 == GetEntryPriority(e + KERNEL_B)); + EXPECT(2 == GetEntryTries(e + KERNEL_B)); + /* Marking it bad clears it */ + EXPECT(GPT_SUCCESS == GptUpdateKernelEntry(gpt, GPT_UPDATE_ENTRY_BAD)); + EXPECT(0 == GetEntrySuccessful(e + KERNEL_B)); + EXPECT(0 == GetEntryPriority(e + KERNEL_B)); + EXPECT(0 == GetEntryTries(e + KERNEL_B)); + /* Which affects both copies of the partition entries */ + EXPECT(0 == GetEntrySuccessful(e2 + KERNEL_B)); + EXPECT(0 == GetEntryPriority(e2 + KERNEL_B)); + EXPECT(0 == GetEntryTries(e2 + KERNEL_B)); + /* And that's caused the GPT to need updating */ + EXPECT(0x0F == gpt->modified); + + /* Another kernel with tries */ + EXPECT(GPT_SUCCESS == GptNextKernelEntry(gpt, &start, &size)); + EXPECT(KERNEL_X == gpt->current_kernel); + EXPECT(0 == GetEntrySuccessful(e + KERNEL_X)); + EXPECT(2 == GetEntryPriority(e + KERNEL_X)); + EXPECT(2 == GetEntryTries(e + KERNEL_X)); + /* Trying it uses up a try */ + EXPECT(GPT_SUCCESS == GptUpdateKernelEntry(gpt, GPT_UPDATE_ENTRY_TRY)); + EXPECT(0 == GetEntrySuccessful(e + KERNEL_X)); + EXPECT(2 == GetEntryPriority(e + KERNEL_X)); + EXPECT(1 == GetEntryTries(e + KERNEL_X)); + EXPECT(0 == GetEntrySuccessful(e2 + KERNEL_X)); + EXPECT(2 == GetEntryPriority(e2 + KERNEL_X)); + EXPECT(1 == GetEntryTries(e2 + KERNEL_X)); + /* Trying it again marks it inactive */ + EXPECT(GPT_SUCCESS == GptUpdateKernelEntry(gpt, GPT_UPDATE_ENTRY_TRY)); + EXPECT(0 == GetEntrySuccessful(e + KERNEL_X)); + EXPECT(0 == GetEntryPriority(e + KERNEL_X)); + EXPECT(0 == GetEntryTries(e + KERNEL_X)); + + /* Can't update if entry isn't a kernel, or there isn't an entry */ + memcpy(&e[KERNEL_X].type, &guid_rootfs, sizeof(guid_rootfs)); + EXPECT(GPT_ERROR_INVALID_UPDATE_TYPE == + GptUpdateKernelEntry(gpt, GPT_UPDATE_ENTRY_BAD)); + gpt->current_kernel = CGPT_KERNEL_ENTRY_NOT_FOUND; + EXPECT(GPT_ERROR_INVALID_UPDATE_TYPE == + GptUpdateKernelEntry(gpt, GPT_UPDATE_ENTRY_BAD)); + + + return TEST_OK; +} + +/* + * Give an invalid kernel type, and expect GptUpdateKernelEntry() returns + * GPT_ERROR_INVALID_UPDATE_TYPE. + */ +static int UpdateInvalidKernelTypeTest(void) +{ + GptData *gpt = GetEmptyGptData(); + + BuildTestGptData(gpt); + /* anything, but not CGPT_KERNEL_ENTRY_NOT_FOUND */ + gpt->current_kernel = 0; + /* any invalid update_type value */ + EXPECT(GPT_ERROR_INVALID_UPDATE_TYPE == + GptUpdateKernelEntry(gpt, 99)); + + return TEST_OK; +} + +/* Test duplicate UniqueGuids can be detected. */ +static int DuplicateUniqueGuidTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptHeader *h = (GptHeader *)gpt->primary_header; + GptEntry *e = (GptEntry *)gpt->primary_entries; + int i, j; + + struct { + int duplicate; + struct { + uint64_t starting_lba; + uint64_t ending_lba; + uint32_t type_guid; + uint32_t unique_guid; + } entries[16]; /* enough for testing. */ + } cases[] = { + {GPT_SUCCESS, {{100, 109, 1, 1}, + {110, 119, 2, 2}, + {120, 129, 3, 3}, + {130, 139, 4, 4}, + }}, + {GPT_SUCCESS, {{100, 109, 1, 1}, + {110, 119, 1, 2}, + {120, 129, 2, 3}, + {130, 139, 2, 4}, + }}, + {GPT_ERROR_DUP_GUID, {{100, 109, 1, 1}, + {110, 119, 2, 2}, + {120, 129, 3, 1}, + {130, 139, 4, 4}, + }}, + {GPT_ERROR_DUP_GUID, {{100, 109, 1, 1}, + {110, 119, 1, 2}, + {120, 129, 2, 3}, + {130, 139, 2, 2}, + }}, + }; + + for (i = 0; i < ARRAY_SIZE(cases); ++i) { + BuildTestGptData(gpt); + ZeroEntries(gpt); + for(j = 0; j < ARRAY_SIZE(cases[0].entries); ++j) { + if (!cases[i].entries[j].starting_lba) + break; + + e[j].starting_lba = cases[i].entries[j].starting_lba; + e[j].ending_lba = cases[i].entries[j].ending_lba; + SetGuid(&e[j].type, cases[i].entries[j].type_guid); + SetGuid(&e[j].unique, cases[i].entries[j].unique_guid); + } + RefreshCrc32(gpt); + + EXPECT(cases[i].duplicate == CheckEntries(e, h)); + } + + return TEST_OK; +} + +/* Test getting the current kernel GUID */ +static int GetKernelGuidTest(void) +{ + GptData *gpt = GetEmptyGptData(); + GptEntry *e = (GptEntry *)gpt->primary_entries; + Guid g; + + BuildTestGptData(gpt); + gpt->current_kernel = 0; + GetCurrentKernelUniqueGuid(gpt, &g); + EXPECT(!memcmp(&g, &e[0].unique, sizeof(Guid))); + gpt->current_kernel = 1; + GetCurrentKernelUniqueGuid(gpt, &g); + EXPECT(!memcmp(&g, &e[1].unique, sizeof(Guid))); + + return TEST_OK; +} + +/* Test getting GPT error text strings */ +static int ErrorTextTest(void) +{ + int i; + + /* Known errors are not unknown */ + for (i = 0; i < GPT_ERROR_COUNT; i++) { + EXPECT(GptErrorText(i)); + EXPECT(strcmp(GptErrorText(i), "Unknown")); + } + + /* But other error values are */ + EXPECT(!strcmp(GptErrorText(GPT_ERROR_COUNT), "Unknown")); + + return TEST_OK; +} + +static int CheckHeaderOffDevice(void) +{ + GptData* gpt = GetEmptyGptData(); + BuildTestGptData(gpt); + + GptHeader* primary_header = (GptHeader*)gpt->primary_header; + primary_header->first_usable_lba = 0; + RefreshCrc32(gpt); + // GPT is stored on the same device so first usable lba should not + // start at 0. + EXPECT(1 == CheckHeader(primary_header, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + // But off device, it is okay to accept this GPT header. + EXPECT(0 == CheckHeader(primary_header, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, GPT_FLAG_EXTERNAL, gpt->sector_bytes)); + + BuildTestGptData(gpt); + primary_header->number_of_entries = 100; + RefreshCrc32(gpt); + // Normally, number of entries is 128. So this should fail. + EXPECT(1 == CheckHeader(primary_header, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + // But off device, it is okay. + EXPECT(0 == CheckHeader(primary_header, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, GPT_FLAG_EXTERNAL, gpt->sector_bytes)); + + primary_header->number_of_entries = MIN_NUMBER_OF_ENTRIES - 1; + RefreshCrc32(gpt); + // However, too few entries is not good. + EXPECT(1 == CheckHeader(primary_header, 0, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, GPT_FLAG_EXTERNAL, gpt->sector_bytes)); + + // Repeat for secondary header. + BuildTestGptData(gpt); + GptHeader* secondary_header = (GptHeader*)gpt->secondary_header; + secondary_header->first_usable_lba = 0; + RefreshCrc32(gpt); + EXPECT(1 == CheckHeader(secondary_header, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + EXPECT(0 == CheckHeader(secondary_header, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, GPT_FLAG_EXTERNAL, gpt->sector_bytes)); + + BuildTestGptData(gpt); + secondary_header->number_of_entries = 100; + /* Because we change number of entries, we need to also update entrie_lba. */ + secondary_header->entries_lba = secondary_header->my_lba - + CalculateEntriesSectors(secondary_header, gpt->sector_bytes); + RefreshCrc32(gpt); + EXPECT(1 == CheckHeader(secondary_header, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, 0, gpt->sector_bytes)); + EXPECT(0 == CheckHeader(secondary_header, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, GPT_FLAG_EXTERNAL, gpt->sector_bytes)); + + secondary_header->number_of_entries = MIN_NUMBER_OF_ENTRIES - 1; + RefreshCrc32(gpt); + EXPECT(1 == CheckHeader(secondary_header, 1, gpt->streaming_drive_sectors, + gpt->gpt_drive_sectors, GPT_FLAG_EXTERNAL, gpt->sector_bytes)); + + return TEST_OK; +} + +int main(int argc, char *argv[]) +{ + int i; + int error_count = 0; + struct { + const char *name; + test_func fp; + int retval; + } test_cases[] = { + { TEST_CASE(StructSizeTest), }, + { TEST_CASE(TestBuildTestGptData), }, + { TEST_CASE(ParameterTests), }, + { TEST_CASE(HeaderCrcTest), }, + { TEST_CASE(HeaderSameTest), }, + { TEST_CASE(SignatureTest), }, + { TEST_CASE(RevisionTest), }, + { TEST_CASE(SizeTest), }, + { TEST_CASE(CrcFieldTest), }, + { TEST_CASE(ReservedFieldsTest), }, + { TEST_CASE(SizeOfPartitionEntryTest), }, + { TEST_CASE(NumberOfPartitionEntriesTest), }, + { TEST_CASE(MyLbaTest), }, + { TEST_CASE(FirstUsableLbaAndLastUsableLbaTest), }, + { TEST_CASE(EntriesCrcTest), }, + { TEST_CASE(ValidEntryTest), }, + { TEST_CASE(OverlappedPartitionTest), }, + { TEST_CASE(ValidityCheckTest), }, + { TEST_CASE(NoValidKernelEntryTest), }, + { TEST_CASE(EntryAttributeGetSetTest), }, + { TEST_CASE(EntryTypeTest), }, + { TEST_CASE(GetNextNormalTest), }, + { TEST_CASE(GetNextPrioTest), }, + { TEST_CASE(GetNextTriesTest), }, + { TEST_CASE(GptUpdateTest), }, + { TEST_CASE(UpdateInvalidKernelTypeTest), }, + { TEST_CASE(DuplicateUniqueGuidTest), }, + { TEST_CASE(TestCrc32TestVectors), }, + { TEST_CASE(GetKernelGuidTest), }, + { TEST_CASE(ErrorTextTest), }, + { TEST_CASE(CheckHeaderOffDevice), }, + }; + + for (i = 0; i < sizeof(test_cases)/sizeof(test_cases[0]); ++i) { + printf("Running %s() ...\n", test_cases[i].name); + test_cases[i].retval = test_cases[i].fp(); + if (test_cases[i].retval) { + printf(COL_RED "[ERROR]\n\n" COL_STOP); + ++error_count; + } else { + printf(COL_GREEN "[PASS]\n\n" COL_STOP); + } + } + + if (error_count) { + printf("\n------------------------------------------------\n"); + printf(COL_RED "The following %d test cases are failed:\n" + COL_STOP, error_count); + for (i = 0; i < sizeof(test_cases)/sizeof(test_cases[0]); ++i) { + if (test_cases[i].retval) + printf(" %s()\n", test_cases[i].name); + } + } + + return error_count ? 1 : 0; +} diff --git a/tests/cgptlib_test.h b/tests/cgptlib_test.h new file mode 100644 index 0000000..e78c25a --- /dev/null +++ b/tests/cgptlib_test.h @@ -0,0 +1,31 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_CGPTLIB_TEST_H_ +#define VBOOT_REFERENCE_CGPTLIB_TEST_H_ + +#include +#include "2sysincludes.h" + +enum { + TEST_FAIL = -1, + TEST_OK = 0, +}; + +#define TEST_CASE(func) #func, func +typedef int (*test_func)(void); + +#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0])) + +#define EXPECT(expr) do { \ + if (!(expr)) { \ + printf(COL_RED " fail " COL_STOP \ + "in expression %s in %s() line %d\n", \ + #expr, __FUNCTION__, __LINE__); \ + return TEST_FAIL; \ + } \ +} while (0) + +#endif /* VBOOT_REFERENCE_CGPTLIB_TEST_H_ */ diff --git a/tests/chromeos_config_tests.c b/tests/chromeos_config_tests.c new file mode 100644 index 0000000..2408d8c --- /dev/null +++ b/tests/chromeos_config_tests.c @@ -0,0 +1,158 @@ +/* Copyright 2020 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include + +#include "2common.h" +#include "2return_codes.h" +#include "chromeos_config.h" +#include "host_misc.h" +#include "test_common.h" + +static struct { + const char *path; + const char *data; +} fakefs[] = { + {"/run/chromeos-config/v1/name", "bleh_model"}, + {"/run/chromeos-config/v1/brand-code", "ZZCR"}, + {"/run/chromeos-config/v1/identity/sku-id", "7"}, + {"/run/chromeos-config/v1/firmware/image-name", "bloop"}, + {"/run/chromeos-config/v1/auto-night-light", "true"}, + {"/run/chromeos-config/v1/hardware-properties/is-lid-convertible", + "false"}, +}; + +vb2_error_t vb2_read_file(const char *filepath, uint8_t **data_ptr, + uint32_t *size_ptr) +{ + *data_ptr = NULL; + *size_ptr = 0; + + for (size_t i = 0; i < ARRAY_SIZE(fakefs); i++) { + if (!strcmp(fakefs[i].path, filepath)) { + *size_ptr = strlen(fakefs[i].data); + *data_ptr = malloc(*size_ptr); + + if (!*data_ptr) + return VB2_ERROR_READ_FILE_ALLOC; + + memcpy(*data_ptr, fakefs[i].data, *size_ptr); + return VB2_SUCCESS; + } + } + + return VB2_ERROR_READ_FILE_OPEN; +} + +static void test_get_string(void) +{ + char *val_out; + + TEST_EQ(chromeos_config_get_string("/firmware", "image-name", &val_out), + VB2_SUCCESS, "Reading a string is successful"); + TEST_STR_EQ(val_out, "bloop", "The string is the correct value"); + free(val_out); +} + +static void test_get_boolean_true(void) +{ + bool val_out; + + TEST_EQ(chromeos_config_get_boolean("/", "auto-night-light", &val_out), + VB2_SUCCESS, "Reading a true boolean is successful"); + TEST_EQ(val_out, true, "The resulting boolean is true"); +} + +static void test_get_boolean_false(void) +{ + bool val_out; + + TEST_EQ(chromeos_config_get_boolean("/hardware-properties", + "is-lid-convertible", &val_out), + VB2_SUCCESS, "Reading a false boolean is successful"); + TEST_EQ(val_out, false, "The resulting boolean is false"); +} + +static void test_get_integer(void) +{ + int val_out; + + TEST_EQ(chromeos_config_get_integer("/identity", "sku-id", &val_out), + VB2_SUCCESS, "Reading an integer is successful"); + TEST_EQ(val_out, 7, "The resulting integer is correct"); +} + +static void test_get_no_exist(void) +{ + char *val_out; + + TEST_NEQ( + chromeos_config_get_string("/this/does", "not-exist", &val_out), + VB2_SUCCESS, "Reading non-existent property fails"); + free(val_out); +} + +static void test_get_bad_path(void) +{ + char *val_out; + + TEST_NEQ(chromeos_config_get_string("name", "name", &val_out), + VB2_SUCCESS, "Reading bad path fails"); + free(val_out); +} + +static void test_get_bad_path2(void) +{ + char *val_out; + + TEST_NEQ(chromeos_config_get_string("//name", "name", &val_out), + VB2_SUCCESS, "Reading bad path fails"); + free(val_out); +} + +static void test_get_bad_property(void) +{ + char *val_out; + + TEST_NEQ(chromeos_config_get_string("/firmware", "/image-name", + &val_out), + VB2_SUCCESS, "Reading bad property fails"); + free(val_out); +} + +static void test_get_not_boolean(void) +{ + bool val_out; + + TEST_NEQ(chromeos_config_get_boolean("/identity", "sku-id", &val_out), + VB2_SUCCESS, "Reading integer as boolean fails"); +} + +static void test_get_not_integer(void) +{ + int val_out; + + TEST_NEQ(chromeos_config_get_integer("/", "brand-code", &val_out), + VB2_SUCCESS, "Reading string as integer fails"); +} + +int main(int argc, char *argv[]) +{ + test_get_string(); + test_get_boolean_true(); + test_get_boolean_false(); + test_get_integer(); + test_get_no_exist(); + test_get_bad_path(); + test_get_bad_path2(); + test_get_bad_property(); + test_get_not_boolean(); + test_get_not_integer(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/common.sh b/tests/common.sh new file mode 100644 index 0000000..e69692b --- /dev/null +++ b/tests/common.sh @@ -0,0 +1,71 @@ +#!/bin/bash + +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Determine script directory. +SCRIPT_DIR="$(dirname $(realpath "${BASH_SOURCE[0]}"))" +ROOT_DIR="$(dirname "${SCRIPT_DIR}")" +SRCDIR="${SRCDIR:-${ROOT_DIR}}" +BUILD="${BUILD:-${ROOT_DIR}/build}" +BUILD_RUN="${BUILD_RUN:-${BUILD}}" +SRC_RUN="${SRC_RUN:-${SRCDIR}}" +BUILD_DIR="${BUILD}" +BIN_DIR="${BUILD_DIR}/install_for_test/usr/bin" +FUTILITY="${BIN_DIR}/futility" +TEST_DIR="${BUILD_DIR}/tests" +TESTKEY_DIR="${SCRIPT_DIR}/testkeys" +TESTCASE_DIR="${SCRIPT_DIR}/testcases" +TESTKEY_SCRATCH_DIR="${TEST_DIR}/testkeys" + +if [ ! -d ${TESTKEY_SCRATCH_DIR} ]; then + mkdir -p ${TESTKEY_SCRATCH_DIR} +fi + +# Color output encodings. +COL_RED='\E[31;1m' +COL_GREEN='\E[32;1m' +COL_YELLOW='\E[33;1m' +COL_BLUE='\E[34;1m' +COL_STOP='\E[0;m' + +hash_algos=( sha1 sha256 sha512 ) +key_lengths=( 1024 2048 4096 8192 2048_exp3 3072_exp3 ) + +function happy { + echo -e "${COL_GREEN}$*${COL_STOP}" 1>&2 +} + +# args: [nested level [message]] +function warning { + echo -e "${COL_YELLOW}WARNING: $*${COL_STOP}" 1>&2 +} + +# args: [nested level [message]] +function error { + local lev=${1:-} + case "${1:-}" in + [0-9]*) + lev=$1 + shift + ;; + *) lev=0 + ;; + esac + local x=$(caller $lev) + local cline=${x%% *} + local cfunc=${x#* } + cfunc=${cfunc##*/} + local args="$*" + local spacer=${args:+: } + echo -e "${COL_RED}ERROR at ${cfunc}, line ${cline}${spacer}${args}" \ + "${COL_STOP}" 1>&2 + exit 1 +} + +function check_test_keys { + [ -d ${TESTKEY_DIR} ] || \ + error 1 "You must run gen_test_keys.sh to generate test keys first." +} + diff --git a/tests/crc32_test.c b/tests/crc32_test.c new file mode 100644 index 0000000..1d1d8cd --- /dev/null +++ b/tests/crc32_test.c @@ -0,0 +1,47 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "cgptlib_test.h" +#include "crc32.h" +#include "crc32_test.h" +#include "test_common.h" + +#define MAX_VECTOR_LEN 256 + +int TestCrc32TestVectors(void) { + struct { + uint8_t vector[MAX_VECTOR_LEN]; + int len; + uint32_t crc32; + } cases[] = { + {{0x00}, 1, 0xD202EF8D}, + {{0x00, 0x00, 0x00, 0x00}, 4, 0x2144DF1C}, + {{0x01, 0x01, 0x01, 0x01}, 4, 0xF626D399}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x28,0x86,0x4d,0x7f,0x99}, 48, 0x923D6EFD}, + {{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x00,0x00,0x00,0x28,0xc5,0x5e,0x45,0x7a}, 48, 0x49A04D82}, + {{0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a, + 0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14, + 0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e, + 0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28, + 0x00,0x00,0x00,0x28,0xbf,0x67,0x1e,0xd0}, 48, 0x688B3BFA}, + }; + int i; + + for (i = 0; i < ARRAY_SIZE(cases); ++i) { + uint32_t crc32; + + crc32 = Crc32(cases[i].vector, cases[i].len); + EXPECT(crc32 == cases[i].crc32); + } + return TEST_OK; +} diff --git a/tests/crc32_test.h b/tests/crc32_test.h new file mode 100644 index 0000000..2098707 --- /dev/null +++ b/tests/crc32_test.h @@ -0,0 +1,11 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_CRC32_TEST_H_ +#define VBOOT_REFERENCE_CRC32_TEST_H_ + +int TestCrc32TestVectors(void); + +#endif /* VBOOT_REFERENCE_CRC32_TEST_H_ */ diff --git a/tests/devkeys-acc/key.versions b/tests/devkeys-acc/key.versions new file mode 100644 index 0000000..7b8d194 --- /dev/null +++ b/tests/devkeys-acc/key.versions @@ -0,0 +1,5 @@ +name=devkeys-acc-premp +firmware_key_version=1 +firmware_version=1 +kernel_key_version=1 +kernel_version=1 diff --git a/tests/devkeys-acc/key_hadoken.vbprik2 b/tests/devkeys-acc/key_hadoken.vbprik2 new file mode 100644 index 0000000..ebe81d6 Binary files /dev/null and b/tests/devkeys-acc/key_hadoken.vbprik2 differ diff --git a/tests/devkeys-acc/key_hadoken.vbpubk2 b/tests/devkeys-acc/key_hadoken.vbpubk2 new file mode 100644 index 0000000..5304756 Binary files /dev/null and b/tests/devkeys-acc/key_hadoken.vbpubk2 differ diff --git a/tests/devkeys-acc/key_zinger.pem b/tests/devkeys-acc/key_zinger.pem new file mode 100644 index 0000000..2199a47 --- /dev/null +++ b/tests/devkeys-acc/key_zinger.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEA7K6enHYIpVKR0/J973NpdL5cgRMh+KqRvRASe0//adnH4bRY +Wp0mXhl4tgQ/30264KmyKWPxEj+Pl6wqYTh+plwEqco2IO7MX9O2YgYMbZiAPby4 +r5fSrjTJYvzQKCrcSagW1HAlbQv5QmpZcDcLR8Z0t3PhdKFWfaAy2JW3mlQxoTqt +ovhrn1TH1bIRJape4/mU+/+AOQ5zAzkaMJeo0v5L6naVbuwjCJUrAK6BdP8/x3A7 +6GhstZ5QlkLKH/uNBnR80YMs3AlOygDSddRthOm7WMG7YkivsszwsWgl/aHXoFVE +EQfl7aPpoAO9bvydyf+6DGUUJJPZpOnJeOPquwIDAQABAoIBAHWCNOmFiMFb/171 +dCUgbekyYgcLksA9H2J4ylRC4ZKSN7UNrxg+EcCCcPYdogCiPPgyCGyYXCYtPIOX +TOs7+1VpNj9+T+WF6h5hpJmCW0VGg9UjD6bOgCFRv/LPhiGLNhezxrHuhAZh/X1G +A+W8znLySxySAgu/1otEsDnsC14pHoI0aFLQ+djE14uEbqnV1WZyXX2BL7rOU3Fb +fAL4bau0LkqJ2WR0zh9wMpkXb7yC7F3mDoZy7QIZLoW+lkpwYM/a+zVOBTeE+Ml0 +GAKwi59X6gAlmqBV+vRw+YbKnxfFd5QhpZhbJ6LOIL7wlNo1dr+o8wkN/rG54oBA +W8kHfAECgYEA/HwXZIXp7M4bchfB/zi8lnhd2MQ/s5rZz1EhBDdcl7nj/r2p934e +uRBxnn+5eErKu/6kwEf/pgvwtlkOX+rMCpSLS24rYCj6wFl/f0+3ovDqIppARLyp +2Rvyl6z4uO4bsAdOnVEl8BnmJi01dKHFYiaemPjv81KjSdJr3N4FnbsCgYEA7/o0 +TqSLWddK3JuOVfKfBGra2cEVN6KERkrkyxG6NEQHu9ItgCqxCdLj+jN9xTQxI/b5 +nayTvPIrey+NqoKtai3XSxj3svnBNtpFnO0dQsw9lXBx/UuwBuTOj+eHL/z/v2KS +WlKL/2D8CDxFo67wMhP0A56E8b3nZui0HeivlwECgYEAvNgrvvoSXxZBnPJ8HWLY +W0soFkuiwblelBvAMCEgVjOpfg1qJTzlydGsyboKhRibzkTGATNY2V8w6ZJul/tM +JdW44fBC7Sd5dYj7PcPoPC0pUjxBOahK+aJXrm6nkdo2R1EP0cayM4WLiJ5jzxp4 +QdNU6GG5RytWCo8iMg618KUCgYEA4itHfQ7rHsMflQcugKZnZDxpAm1NV9/dFnqj +YxfUDEpJl6SgqXiS3hVaM4av9FoaLjEoVIg/vQXoIPNSau86DSYjEG35lT558P6K +OTnoJ/ph2CPf6r+YqQaf/1RQPtQNHQ0Drgi6VPfM0N4tK/VF/4x6n6aY2VUHcB/F +EaMpSgECgYEA291EHQ7JxnXAG7GkT+b9g7klHZPjl6yB21rSXdphb27AY9K8U7l3 +3A3T4eubhPjXn6W9JXLHYwubShkmA8kFXXzZlvuXKlraP/0lh3DAB+xEASUGHOS+ +S/U4X23nMkj7EktYqPcwMM6BOFbhOy2W+v9JoJSayPhuYJEOdjOGNWU= +-----END RSA PRIVATE KEY----- diff --git a/tests/devkeys-pkc/dev_firmware.keyblock b/tests/devkeys-pkc/dev_firmware.keyblock new file mode 100644 index 0000000..d0411ac Binary files /dev/null and b/tests/devkeys-pkc/dev_firmware.keyblock differ diff --git a/tests/devkeys-pkc/dev_firmware_data_key.vbprivk b/tests/devkeys-pkc/dev_firmware_data_key.vbprivk new file mode 100644 index 0000000..1ef7dbd Binary files /dev/null and b/tests/devkeys-pkc/dev_firmware_data_key.vbprivk differ diff --git a/tests/devkeys-pkc/dev_firmware_data_key.vbpubk b/tests/devkeys-pkc/dev_firmware_data_key.vbpubk new file mode 100644 index 0000000..7bd1716 Binary files /dev/null and b/tests/devkeys-pkc/dev_firmware_data_key.vbpubk differ diff --git a/tests/devkeys-pkc/ec.keyblock b/tests/devkeys-pkc/ec.keyblock new file mode 100644 index 0000000..6b088f3 Binary files /dev/null and b/tests/devkeys-pkc/ec.keyblock differ diff --git a/tests/devkeys-pkc/ec_data_key.vbprivk b/tests/devkeys-pkc/ec_data_key.vbprivk new file mode 100644 index 0000000..9f194ce Binary files /dev/null and b/tests/devkeys-pkc/ec_data_key.vbprivk differ diff --git a/tests/devkeys-pkc/ec_data_key.vbpubk b/tests/devkeys-pkc/ec_data_key.vbpubk new file mode 100644 index 0000000..5804dfd Binary files /dev/null and b/tests/devkeys-pkc/ec_data_key.vbpubk differ diff --git a/tests/devkeys-pkc/ec_root_key.vbprivk b/tests/devkeys-pkc/ec_root_key.vbprivk new file mode 100644 index 0000000..4914472 Binary files /dev/null and b/tests/devkeys-pkc/ec_root_key.vbprivk differ diff --git a/tests/devkeys-pkc/ec_root_key.vbpubk b/tests/devkeys-pkc/ec_root_key.vbpubk new file mode 100644 index 0000000..76c26f9 Binary files /dev/null and b/tests/devkeys-pkc/ec_root_key.vbpubk differ diff --git a/tests/devkeys-pkc/firmware.keyblock b/tests/devkeys-pkc/firmware.keyblock new file mode 100644 index 0000000..1e2273e Binary files /dev/null and b/tests/devkeys-pkc/firmware.keyblock differ diff --git a/tests/devkeys-pkc/firmware_bmpfv.bin b/tests/devkeys-pkc/firmware_bmpfv.bin new file mode 100644 index 0000000..3e9af97 Binary files /dev/null and b/tests/devkeys-pkc/firmware_bmpfv.bin differ diff --git a/tests/devkeys-pkc/firmware_data_key.vbprivk b/tests/devkeys-pkc/firmware_data_key.vbprivk new file mode 100644 index 0000000..49e5751 Binary files /dev/null and b/tests/devkeys-pkc/firmware_data_key.vbprivk differ diff --git a/tests/devkeys-pkc/firmware_data_key.vbpubk b/tests/devkeys-pkc/firmware_data_key.vbpubk new file mode 100644 index 0000000..804d566 Binary files /dev/null and b/tests/devkeys-pkc/firmware_data_key.vbpubk differ diff --git a/tests/devkeys-pkc/installer_kernel.keyblock b/tests/devkeys-pkc/installer_kernel.keyblock new file mode 100644 index 0000000..cfa3bd1 Binary files /dev/null and b/tests/devkeys-pkc/installer_kernel.keyblock differ diff --git a/tests/devkeys-pkc/installer_kernel_data_key.vbprivk b/tests/devkeys-pkc/installer_kernel_data_key.vbprivk new file mode 100644 index 0000000..0379595 Binary files /dev/null and b/tests/devkeys-pkc/installer_kernel_data_key.vbprivk differ diff --git a/tests/devkeys-pkc/installer_kernel_data_key.vbpubk b/tests/devkeys-pkc/installer_kernel_data_key.vbpubk new file mode 100644 index 0000000..3e9e67c Binary files /dev/null and b/tests/devkeys-pkc/installer_kernel_data_key.vbpubk differ diff --git a/tests/devkeys-pkc/kernel.keyblock b/tests/devkeys-pkc/kernel.keyblock new file mode 100644 index 0000000..9740be4 Binary files /dev/null and b/tests/devkeys-pkc/kernel.keyblock differ diff --git a/tests/devkeys-pkc/kernel_data_key.vbprivk b/tests/devkeys-pkc/kernel_data_key.vbprivk new file mode 100644 index 0000000..8d392fb Binary files /dev/null and b/tests/devkeys-pkc/kernel_data_key.vbprivk differ diff --git a/tests/devkeys-pkc/kernel_data_key.vbpubk b/tests/devkeys-pkc/kernel_data_key.vbpubk new file mode 100644 index 0000000..80910b7 Binary files /dev/null and b/tests/devkeys-pkc/kernel_data_key.vbpubk differ diff --git a/tests/devkeys-pkc/kernel_subkey.vbprivk b/tests/devkeys-pkc/kernel_subkey.vbprivk new file mode 100644 index 0000000..195b1bf Binary files /dev/null and b/tests/devkeys-pkc/kernel_subkey.vbprivk differ diff --git a/tests/devkeys-pkc/kernel_subkey.vbpubk b/tests/devkeys-pkc/kernel_subkey.vbpubk new file mode 100644 index 0000000..a24a036 Binary files /dev/null and b/tests/devkeys-pkc/kernel_subkey.vbpubk differ diff --git a/tests/devkeys-pkc/key.versions b/tests/devkeys-pkc/key.versions new file mode 100644 index 0000000..7b08cb6 --- /dev/null +++ b/tests/devkeys-pkc/key.versions @@ -0,0 +1,5 @@ +name=devkeys-pkc-premp +firmware_key_version=1 +firmware_version=1 +kernel_key_version=1 +kernel_version=1 diff --git a/tests/devkeys-pkc/nv_pkc.pem b/tests/devkeys-pkc/nv_pkc.pem new file mode 100644 index 0000000..cbafc03 --- /dev/null +++ b/tests/devkeys-pkc/nv_pkc.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAs3Lf87UkomlfVHdw/FEz+owzgO+ZFu6/72qT+jSu7aEDZeZj +l2cgTQOnHjlmBYj6KoqwXQmY6ZWPNBT7xDqzGdvimCVRC3OGRee2uD+Itu/Qwo1F +FOb7v+l3v6lODGqDJ06aIxLicEiqK55dk5z+7dP8yyJ3pRhwiDPE4tNtlLOWgmJ/ +hENyqBHbMMzg67Qwb+aa89wfq2FRrvGOpfmrKlhqtikDnwJALBfkr7hsZGZOszHC +ii2L5T3eCaI/me2/VIGlQSjGxmaDkiG/aIZVTuIX/LuOyi4sLXJ9cIFQ7Ty/0PAk +6Ia6VyEGETQt6+JeLETX4Zc+XCnfbE/Flhs5PwIDAQABAoIBAQCMcmM/Xc4PY0Ne +W6FNicyR0vtYda4u2avVGWg50tP6XiPHtDrMO8V3IV3B9RCZUmzhsOx51NIeN5T+ +IVIvcfXNTmCZzdMRkFhODB3hNLCu5SFRs7mWs3Xj7TlxA3R3mUGPGSDgRJ5/XQ/6 +1ZbNunl38IuQ/SgBShCBOWtmUC4ay+ctm1CzBZ/7AYlauOxdoKiU2nzlwpMrX9+C +vaVKRQVYbE7EYJsWKOx6vRPU5Kjoq6StlSW4caG0ReRu9tO+xL7kZnqp1BWl3KHw +OfzLy1CmwDkV3bKFclRWWPR97nN7F95SUFIJ3bOVjU/K2TKuLtMYPPVdG4CBBeB5 +eK2Qae7ZAoGBAOprwiAvcRNWJ2W5JoCkh0L6AHXx2z+S1Bbt0laz4NyqyfPX2SMl +DJRxm/IoYRfwZf7fussI1bG7g4UP8HjfrlAzSEWVgPNMSWftOFzkv4QNr2ySjk0/ +nZRsd+zj2kxhc8ukDhiORkyEEg5gtsEUqbtdZHOiqtkNbKOPD6EGKeP7AoGBAMP3 +q5NUh9pJ2RGSkdKutloXNe0HPI6sjsCX3HHWAaFyqBtXWvRU3fIaMUpGQcPaqDCt +LhzVoNlPXdeQ7vTkBPtiYQBcs0NPI+58pnD5fgR00yTX/5ZIGKbX0NnpZ3spsQAQ +FQTXGy80+JyGMmJCDf32VGC96I9Ey5w49U23kXiNAoGAGEtiqwM/rMlY++ncW6ix +e/d85LxUBJqq8FVlXyb1PulUVLkh/8pvK1M63jXhGiIH8Aovyar4upq8XqXwPhaw +cg9ehhegbZaSZProxHfQgVcJvy7RIKBfLGqxYxOaJCBVZ91wuIrGLlfhpyvOxOPn +U0uyhWluW2BQygKhlAaXgNECgYAKDAif5RWR+3dFj14qjwqKU+ZP4K8aIX6wIRkM +PQyYWmiD/laLcE5wuycLx85XXD6DQF283LcCbS9CfgvCQm5+9OxEOHx4VvZgo8Nk +x2XOlK6+lNRlwAyDgU0T3wOPLPQGLMznEqAyK2UToU2z++77tkVdMF9b+Qr3V3Q8 +J80tgQKBgQCW2OHHUfnfRMns/d1sp/QNMag19flOT+IjvZXI5ZMy9yojlpcTSdSq +NzaahUZKtEankjMlXw2RHMYrXjtAJgwXlV4rMWxkaqUrVqq99v6M1QNx/SHjnVB+ +SYQ8PZHp0mPk/opRPydP/U5WKDcP10KRuSNRSQmvacD5gzs3B6Jhqg== +-----END RSA PRIVATE KEY----- diff --git a/tests/devkeys-pkc/recovery_kernel.keyblock b/tests/devkeys-pkc/recovery_kernel.keyblock new file mode 100644 index 0000000..ad16e39 Binary files /dev/null and b/tests/devkeys-pkc/recovery_kernel.keyblock differ diff --git a/tests/devkeys-pkc/recovery_kernel_data_key.vbprivk b/tests/devkeys-pkc/recovery_kernel_data_key.vbprivk new file mode 100644 index 0000000..0379595 Binary files /dev/null and b/tests/devkeys-pkc/recovery_kernel_data_key.vbprivk differ diff --git a/tests/devkeys-pkc/recovery_kernel_data_key.vbpubk b/tests/devkeys-pkc/recovery_kernel_data_key.vbpubk new file mode 100644 index 0000000..3e9e67c Binary files /dev/null and b/tests/devkeys-pkc/recovery_kernel_data_key.vbpubk differ diff --git a/tests/devkeys-pkc/recovery_key.vbprivk b/tests/devkeys-pkc/recovery_key.vbprivk new file mode 100644 index 0000000..6c7ab36 Binary files /dev/null and b/tests/devkeys-pkc/recovery_key.vbprivk differ diff --git a/tests/devkeys-pkc/recovery_key.vbpubk b/tests/devkeys-pkc/recovery_key.vbpubk new file mode 100644 index 0000000..86d2471 Binary files /dev/null and b/tests/devkeys-pkc/recovery_key.vbpubk differ diff --git a/tests/devkeys-pkc/root_key.vbprivk b/tests/devkeys-pkc/root_key.vbprivk new file mode 100644 index 0000000..74c47dd Binary files /dev/null and b/tests/devkeys-pkc/root_key.vbprivk differ diff --git a/tests/devkeys-pkc/root_key.vbpubk b/tests/devkeys-pkc/root_key.vbpubk new file mode 100644 index 0000000..dfca9d0 Binary files /dev/null and b/tests/devkeys-pkc/root_key.vbpubk differ diff --git a/tests/devkeys/android/media.pk8 b/tests/devkeys/android/media.pk8 new file mode 100644 index 0000000..53fb253 Binary files /dev/null and b/tests/devkeys/android/media.pk8 differ diff --git a/tests/devkeys/android/media.x509.pem b/tests/devkeys/android/media.x509.pem new file mode 100644 index 0000000..d3ec5be --- /dev/null +++ b/tests/devkeys/android/media.x509.pem @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIID/TCCAuWgAwIBAgIJAMi4UJBVFupsMA0GCSqGSIb3DQEBBQUAMIGUMQswCQYD +VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4g +VmlldzEQMA4GA1UECgwHQW5kcm9pZDEQMA4GA1UECwwHQW5kcm9pZDEQMA4GA1UE +AwwHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAe +Fw0xNjA2MjkyMTUxNDVaFw00MzExMTUyMTUxNDVaMIGUMQswCQYDVQQGEwJVUzET +MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G +A1UECgwHQW5kcm9pZDEQMA4GA1UECwwHQW5kcm9pZDEQMA4GA1UEAwwHQW5kcm9p +ZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANRmZX0ek4H/HTuYfuS4WPvMBBtRRXSmysX1 +I/EIAXPVkMswIWmvw/3nBXnjmZDLrg/XG0pOQbUGSJ7RI4d27jHblX/3RQNwpmEx +r8RPLcnBosM/KYaE+9lmSGl/XfbR0b8nreWOeJVBkGMDrrC5O4f7FSrORJBs2JI8 +ZZjiRFcnstdcPHwKBnHjNCRkhC72MvHMUXmndxMBnT18RWk8KrF/de9PotqPmZOZ +fMJrebuCw0G/j0nwciqd3tpO0oANAGtWbzJ9xk53DlYRj4qu74rnQjAtyD0a73dO +U1QRnan28Duk+lKIaIUzqqrcx9uEKYp4N2figpDWKaL9QUnVSW8CAwEAAaNQME4w +HQYDVR0OBBYEFN99GqWFkNea+rCFvb4x45xBmMhIMB8GA1UdIwQYMBaAFN99GqWF +kNea+rCFvb4x45xBmMhIMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB +AFluihpLMwTAcv6l3jJZomf/a8fjEn3Ghx54B3g5n8xeDD0h2OxDOdrDc63Bg14Q +s+ANOXsqNRkZse3ze97lX6qGzXmTfuUwXdlCzgnNA970/WG8EqOgI4yQJ+7a5bu5 +jE7WHaGRuZg5r3XiX+/A8Amo8w1vPsSTCHIiMeCShC9I6L/yF+o4bg7X/mnrVvzt +QLkpYhbxZ68sLlnessfj9zigHpyUtY6HzAvYbRKN4y/2RvkMwRHBHaxZyu1g8LeY +A5c/EfktgF7ORsBrxZeKejOu+8nFzlf8TQAr0zVCHaaP1FLtA2qeLDQsGeYaKBTE +1Ol/AEBSc6LFhA3Inj6xHoI= +-----END CERTIFICATE----- diff --git a/tests/devkeys/android/networkstack.pk8 b/tests/devkeys/android/networkstack.pk8 new file mode 100644 index 0000000..890d9d3 Binary files /dev/null and b/tests/devkeys/android/networkstack.pk8 differ diff --git a/tests/devkeys/android/networkstack.x509.pem b/tests/devkeys/android/networkstack.x509.pem new file mode 100644 index 0000000..042c4e3 --- /dev/null +++ b/tests/devkeys/android/networkstack.x509.pem @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIIDxzCCAq+gAwIBAgIUcfGSt74kh+tpBdU4k71ijVm1/0cwDQYJKoZIhvcNAQEL +BQAwdDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM +DU1vdW50YWluIFZpZXcxFDASBgNVBAoMC0dvb2dsZSBJbmMuMRAwDgYDVQQLDAdB +bmRyb2lkMRAwDgYDVQQDDAdBbmRyb2lkMB4XDTIxMDQwNTIzMDk1NloXDTQ4MDgy +MTIzMDk1NlowdDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAU +BgNVBAcMDU1vdW50YWluIFZpZXcxFDASBgNVBAoMC0dvb2dsZSBJbmMuMRAwDgYD +VQQLDAdBbmRyb2lkMRAwDgYDVQQDDAdBbmRyb2lkMIIBIDANBgkqhkiG9w0BAQEF +AAOCAQ0AMIIBCAKCAQEA0KHW5P5+dCq7OkVkGRmG0eYskcbgRK3DvTY7QPXCdnOm +Fmq08S2l23mN1C+3+XMon0/Gh3DRr+lVLX3GZPoHX3e2ZTt8tu0Ee3k8T8VopfG9 +OpPlSzfazgI8sKtLe3wJ3RDalTlNd8Ne2YNRMY8RIkIwbySzUqkTixVk57NgMXpj +tWmP19DOZPxXsGUa5m0qSS5/demnYAIoD+mg0Wd+xG2Y1ErT9O/j2l92ekm8+JKy +jJ0W47el/mqO392JgNAEvcI9NbrnTaNi5Zq2PKhBhK0ohXOMyHUodUSmtBTWtW8n +U+FK70ese+OzWQbjRryrmGYWB9ybc7YZ/FhH4US+rwIBA6NTMFEwHQYDVR0OBBYE +FMGqz0YmVUA8iWBwLCMdoTFsidIiMB8GA1UdIwQYMBaAFMGqz0YmVUA8iWBwLCMd +oTFsidIiMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAKygSG3r +7SHEb/nox88Pu31lxERrsjmNCtxJJMFlbf8sq1nWx59lmTLOW5sFKyWGH1Mf8f8O +nXiZ6V+5obyAt05MJOBiSIGKBk21ds9r2ACCuFpJ+MAS3SNN7HlSfNvzRbGV3+gb +V6FOH+2ndbqN3dkXUDctWXjNiq5QQlFFI4fIvvwiul45HZvDRrNRuexT1jzOlLVF +Qe45E5QbJYVPMUe37kCVm1Ty3N+e/s2n1NsSHoD5BK+kvb+BPL3pK4dK62HzcdVp +TB1EZFtrL8+aun1qhlEYNKlR/TNQdIPwZWH6ZmT7bF2GCfJcxshgWmajN/cW1rdc +OEUdUtGkI9lgNiI= +-----END CERTIFICATE----- diff --git a/tests/devkeys/android/platform.pk8 b/tests/devkeys/android/platform.pk8 new file mode 100644 index 0000000..7b615ec Binary files /dev/null and b/tests/devkeys/android/platform.pk8 differ diff --git a/tests/devkeys/android/platform.x509.pem b/tests/devkeys/android/platform.x509.pem new file mode 100644 index 0000000..8b422ac --- /dev/null +++ b/tests/devkeys/android/platform.x509.pem @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIID/TCCAuWgAwIBAgIJAKsh6Cqx4cjwMA0GCSqGSIb3DQEBBQUAMIGUMQswCQYD +VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4g +VmlldzEQMA4GA1UECgwHQW5kcm9pZDEQMA4GA1UECwwHQW5kcm9pZDEQMA4GA1UE +AwwHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAe +Fw0xNjA2MjkyMTUxNDBaFw00MzExMTUyMTUxNDBaMIGUMQswCQYDVQQGEwJVUzET +MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G +A1UECgwHQW5kcm9pZDEQMA4GA1UECwwHQW5kcm9pZDEQMA4GA1UEAwwHQW5kcm9p +ZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBALK5wH9wQ7BxBeE7lKNn3xnerYzZcBwyAscQ +nr+SWz4wmIUaNLZ7d2BwpzNaa84P2hiC7F3dbJDumjvgBlsNI5ALIUZcBqYkngG8 +UJhzpPw1CmvruGCsVUwaMWSx0Fh2f9o2SKuQPbGcBcdTha0tkmypONVuuZ1PeDlE +tiSHT3b/PDMqbCGhuunLUaPCOYyBoB/qC6oR1+aInrz860U5IVfubSj4hzAOrysm +EymSwsXkbMOG1gmZZiVjDn1pyIRC7Dy2u70JWaL92nRtRfeVaFwk0KRDXi+PYm+k +eQ0gOTcmbGwTh/FO4Wqc0sG78qoALB8Or+WuRTvZKsp6NRF1Kw8CAwEAAaNQME4w +HQYDVR0OBBYEFKYVE2bBhv9LZ136ipflr1O3RlVWMB8GA1UdIwQYMBaAFKYVE2bB +hv9LZ136ipflr1O3RlVWMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB +AAK7tIOyglsBLWHhl/Kc1ZjHUTvhrI3n+pz4aCtViynaHJs5O5qW3hYCLwetxBJf +92SoRNIUc1va7vLkc5fk7k5FpW+kjz1XtLasGE9KsqN6Y2I5Y88w6f6ZS5Yj/DZp +jvVAJkyCu4Un/6Qygw8DzbRGoKqlUR4x7lrqM8ZU4LkeTkxZnwX95ygth3YyXtG/ +ozbJSCx0iiJQX/uH/bXtngp5LbhFcmQj/rUxvLchRQxGPONvvpiB+6mqkN2hDLMN +KFBc2z9vu5s477bz9sz1+uPZVOnwc8u3q6VF0dowFReXtzKViciYst/zktcGzz04 +z3jF4S6UhxYQ93pmqvI0pKI= +-----END CERTIFICATE----- diff --git a/tests/devkeys/android/releasekey.pk8 b/tests/devkeys/android/releasekey.pk8 new file mode 100644 index 0000000..502b5d9 Binary files /dev/null and b/tests/devkeys/android/releasekey.pk8 differ diff --git a/tests/devkeys/android/releasekey.x509.pem b/tests/devkeys/android/releasekey.x509.pem new file mode 100644 index 0000000..e375026 --- /dev/null +++ b/tests/devkeys/android/releasekey.x509.pem @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIID/TCCAuWgAwIBAgIJAOP6XMUWw6ovMA0GCSqGSIb3DQEBBQUAMIGUMQswCQYD +VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4g +VmlldzEQMA4GA1UECgwHQW5kcm9pZDEQMA4GA1UECwwHQW5kcm9pZDEQMA4GA1UE +AwwHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAe +Fw0xNjA2MjkyMTUyMTBaFw00MzExMTUyMTUyMTBaMIGUMQswCQYDVQQGEwJVUzET +MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G +A1UECgwHQW5kcm9pZDEQMA4GA1UECwwHQW5kcm9pZDEQMA4GA1UEAwwHQW5kcm9p +ZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBALZPiJrLQcYJItjj8KpR879BDpoSEXy5Ptik +TVVVXN8KoEpXWtRPwYSIG110lIY+U/VugOGz085m3VtC5mlobALvZDYz8L61XvIi ++ZYsWjoJBstBhQCr//P2uYWIJRElV1wKppJwqsS/gBc1Qmk6UZAPCABs4lF/8W1E +p31vQpsRsi9d7kS3PFqoriI3ECYqlQ/7y2zXpulY+IlYLdan+FusunGuVEX4RO8X +T6t/ICtV4kfvIok+WcAVrJS4ry0CWgVxEBzgkHnpuNxYsrP+VELQgvyiDrz2ZN6N +Sdqteso6vF+LBgfnZbE28SVnXLEIq9qokAO/+vsMLS3cC0MMAQsCAwEAAaNQME4w +HQYDVR0OBBYEFDygTzrIA3e5rGFzdiO2wvSc19psMB8GA1UdIwQYMBaAFDygTzrI +A3e5rGFzdiO2wvSc19psMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB +AKa7SCivs+mdPcCPlB9IcBjAU6VrZx2L1hup/g1ciE0TiKW0T43rlA/F/14OBIuD +W9767ynezlc84edcStDrczFK6fXFivnUL5I9OWt2SqgrWJvA8340mdPpu01Ot+AH +95LshV+ObC7ZBgIzdkcvpeFn9Z0MhUHGBWubdj+9FLrKNJZylZjX6YaRlHpjzALf +xyDs2gkwOpEXkoEOhSsXgCX5A1nrFaM3WAjAiJa/Mbq+FfrvY/9IlVKaHrGaohQz +NkucJC+Y147gmvVEENbUsJzV1LKJMWurEpdETMvAKlqlaLuQEbpM2d78u0uNnTEC +6JbScH21uNVRu8UMNFh3HFs= +-----END CERTIFICATE----- diff --git a/tests/devkeys/android/shared.pk8 b/tests/devkeys/android/shared.pk8 new file mode 100644 index 0000000..9403f0f Binary files /dev/null and b/tests/devkeys/android/shared.pk8 differ diff --git a/tests/devkeys/android/shared.x509.pem b/tests/devkeys/android/shared.x509.pem new file mode 100644 index 0000000..63bc602 --- /dev/null +++ b/tests/devkeys/android/shared.x509.pem @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIID/TCCAuWgAwIBAgIJAMAHZkxZ4orXMA0GCSqGSIb3DQEBBQUAMIGUMQswCQYD +VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4g +VmlldzEQMA4GA1UECgwHQW5kcm9pZDEQMA4GA1UECwwHQW5kcm9pZDEQMA4GA1UE +AwwHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAe +Fw0xNjA2MjkyMTUxNTBaFw00MzExMTUyMTUxNTBaMIGUMQswCQYDVQQGEwJVUzET +MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G +A1UECgwHQW5kcm9pZDEQMA4GA1UECwwHQW5kcm9pZDEQMA4GA1UEAwwHQW5kcm9p +ZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBALr6JlzAZ7FZi/tOUMJTkh9Q7JuKXqqMqrNR +d2Y3/O4WFVVH/cLhLcbaRXzLTDnc1+X6U/hGxqEsxMw/ibzMez5Wcjpw1iUtjlAv +xFS21Fl/plasmpZicCeGr7zrN0rWBAQFDqAGWLter/NTFwPJ//gxQWLumCs5RAx9 +KUH0c7SKKwyxj5iHeu9M/af26w0ZBNDaWMjASaOKL9Zf4mPxL6BT5n57WcYgRr/w +DGzfQXJRFS1gkhmBLlBpK1Iqn+Em6QgtKvcLRIpxgIEHvYfQ9Wp+qJfzObbF571J +UJvgebql21zESNURDM0MuME+8o5jFwCko9xp0bGBU47SHF9uKbUCAwEAAaNQME4w +HQYDVR0OBBYEFGbO0kw1I8ALeMIbYEGg70I+iW/kMB8GA1UdIwQYMBaAFGbO0kw1 +I8ALeMIbYEGg70I+iW/kMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB +AI4Q7dUgKjAPHEyUXsrWaQRalN86O01QorUNnGfXeNN+9YJbGUTB7Of0PUTFoU0o +Fgw+yHcq1WbZeAH87TnQ6iICcDzcI2vUTxOT7Ag+TM1ZaxU56zhW+YFW8m4swq6C +NQIRxqmPMObdnaWZcRbp3jl4o3xADGVCmylfnpwRWbCE1fvEIWI3oLtDHT1S+UDt +Z0KVj93r3iauOt9CEkTJGKIy9bmaDXq8fEiS41gk0fYHZv2KA0YuxfldROqa18Mb +E0WZMBvIuhmC5cdiNrfZ6bGJmc2ydkehZfYO5XKk/3gIxw7OCBK72t7N7jAQ5LGc +fvx96vPRpY9nEAvElBEvv8o= +-----END CERTIFICATE----- diff --git a/tests/devkeys/arv_platform.vbprivk b/tests/devkeys/arv_platform.vbprivk new file mode 100644 index 0000000..e0bc670 Binary files /dev/null and b/tests/devkeys/arv_platform.vbprivk differ diff --git a/tests/devkeys/arv_platform.vbpubk b/tests/devkeys/arv_platform.vbpubk new file mode 100644 index 0000000..2ac3bde Binary files /dev/null and b/tests/devkeys/arv_platform.vbpubk differ diff --git a/tests/devkeys/arv_root.vbprivk b/tests/devkeys/arv_root.vbprivk new file mode 100644 index 0000000..7747717 Binary files /dev/null and b/tests/devkeys/arv_root.vbprivk differ diff --git a/tests/devkeys/arv_root.vbpubk b/tests/devkeys/arv_root.vbpubk new file mode 100644 index 0000000..aebe2a4 Binary files /dev/null and b/tests/devkeys/arv_root.vbpubk differ diff --git a/tests/devkeys/cr50.pem b/tests/devkeys/cr50.pem new file mode 100644 index 0000000..ea16e60 --- /dev/null +++ b/tests/devkeys/cr50.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEogIBAAKCAQEAp/kh8/NGr1GUMA6c0tq9cRhVMaMwhYCF6mkpeW/D+1k3lL5q +pkjqDcYBZG4xbhdCgEH9ppPYKzwKBVieWuqf7uymLBlCLmaPA6P4J+IwhS001WoD +0kACEhnbL4xeP21fwuz9/u6ucoM8kJsFV/gacADmuOKTrU89Kyj2J5iLWVQPMMAM +BOk+3BNamWwnCRk+CvcT+EQHtzcFkK2avm4HUQNSzhL407NbvsHwUjv7N6wtjeu5 +VLaTLTHxk9Z5savcn2jgxWASn4M59dpD7KSTYi4LsY8NPUWswz0E2a0vk8rfthtA +amTkU4MT9ohVYq2JTCj5DC3DV/0Z7xiZ+ZsYPQIBAwKCAQBv+2v394R04Q11XxM3 +PH5LZY4hF3WuVa6cRhumSoKnkM+4fvHEMJwJLquYSXZJZNcAK/5vDTrHfVwDkGmR +8b/0ncQdZiwe7woCbVAalssDc3iORq021Va2u+d1CD7U85Usnf6p9HRMV321vK46 +pWb1Ve8l7GJziijHcKQaZbI7jEq4JKyk9lL7seEWjf2zHyiLnh8wxQK7Ebizrqw9 +EIH3tmC6JKvbGJPizQ6tz1O0bVwiaHmZObouRxBTE8fL2zuSmJunqsYK4xqWfRsb ++RcSDndzBTW89qZr7i3h22g8jUsMiPBqV9/l9w1dOxnWwAtQSHfebcCA2u3OxUGM +9dpTAoGBANhm0GYySwuCJc8lJpsBUl2tbuw7pzRdDe8BuqGv2aaEHx7arwFat1AA +ZHVlQquWaKxwCuyFY/QlGq4uTNHhkBgygnFeEvtZ0KaKSVBBXY0Fbhq+N6rsX7FQ +eRb4sz7We/aFR2K1V52dHaetOjMBfLhX1e7dZRwX8xnSSKuQeB6DAoGBAMa1uKLb +LLbgYrnScI97GCOMGvjzdU9BjoGBbPay+53ZUqLcLPWwVy3qKeToQlISn3bqRBZp +fAfCrKro6/weUusRAYXrzO41XeuJ1UsBUWPBqj3Gz5G1dAHQ3qkOMNRievieBnUV +iXbdctg9dXufEL/75lZhJAZ+wZtmqAwVsjI/AoGBAJBEiu7MMgesGTTDbxIA4ZPI +9J19GiLos/Sr0cEf5m8Cv2nnH1Y8ejVVmE5Dgce5mx2gB0hY7U1uEcl0MzaWYBAh +rEuUDKeRNcRcMOArk7NY9BHUJRydlSDgULn7IinkUqRY2kHOOmkTaRpzfCIA/dA6 +jp8+Q2gP92aMMHJgUBRXAoGBAIR5JcHncySVlyaMSwpSEBeyvKX3o4ortFZWSKR3 +Umk7jGySyKPK5MlGxpia1uFhv6ScLWRGUq/XHcdF8qgUN0dgq66dM0l46UexONyr +i5fWcX6EimEjoqvglHC0II2W/KW+rvi5Bk8+TJAo+P0UtdVSmY7rbVmp1meZxV1j +zCF/AoGAcm2nAn275kfGZjXkTCYTZ6IXJgxcc4vXhv573UfNIJnC0Sg9rsgFiXHc +nuQwFh5pTm4hU7uEknc/IobFLdCqM9mqujuYmboj0pmbRfOsjV9hqcmuo1OrSbJa +gozzsNqU2I6srVW5SlCwWu1c4rBlBZvcdUtBRRb2b6bnhe29ykg= +-----END RSA PRIVATE KEY----- diff --git a/tests/devkeys/ec.keyblock b/tests/devkeys/ec.keyblock new file mode 100644 index 0000000..d934291 Binary files /dev/null and b/tests/devkeys/ec.keyblock differ diff --git a/tests/devkeys/ec_data_key.vbprivk b/tests/devkeys/ec_data_key.vbprivk new file mode 100644 index 0000000..9f194ce Binary files /dev/null and b/tests/devkeys/ec_data_key.vbprivk differ diff --git a/tests/devkeys/ec_data_key.vbpubk b/tests/devkeys/ec_data_key.vbpubk new file mode 100644 index 0000000..5804dfd Binary files /dev/null and b/tests/devkeys/ec_data_key.vbpubk differ diff --git a/tests/devkeys/ec_root_key.vbprivk b/tests/devkeys/ec_root_key.vbprivk new file mode 100644 index 0000000..4914472 Binary files /dev/null and b/tests/devkeys/ec_root_key.vbprivk differ diff --git a/tests/devkeys/ec_root_key.vbpubk b/tests/devkeys/ec_root_key.vbpubk new file mode 100644 index 0000000..76c26f9 Binary files /dev/null and b/tests/devkeys/ec_root_key.vbpubk differ diff --git a/tests/devkeys/firmware.keyblock b/tests/devkeys/firmware.keyblock new file mode 100644 index 0000000..e3653f8 Binary files /dev/null and b/tests/devkeys/firmware.keyblock differ diff --git a/tests/devkeys/firmware_bmpfv.bin b/tests/devkeys/firmware_bmpfv.bin new file mode 100644 index 0000000..3e9af97 Binary files /dev/null and b/tests/devkeys/firmware_bmpfv.bin differ diff --git a/tests/devkeys/firmware_data_key.vbprivk b/tests/devkeys/firmware_data_key.vbprivk new file mode 100644 index 0000000..49e5751 Binary files /dev/null and b/tests/devkeys/firmware_data_key.vbprivk differ diff --git a/tests/devkeys/firmware_data_key.vbpubk b/tests/devkeys/firmware_data_key.vbpubk new file mode 100644 index 0000000..804d566 Binary files /dev/null and b/tests/devkeys/firmware_data_key.vbpubk differ diff --git a/tests/devkeys/installer_kernel.keyblock b/tests/devkeys/installer_kernel.keyblock new file mode 100644 index 0000000..282e1d6 Binary files /dev/null and b/tests/devkeys/installer_kernel.keyblock differ diff --git a/tests/devkeys/installer_kernel_data_key.vbprivk b/tests/devkeys/installer_kernel_data_key.vbprivk new file mode 100644 index 0000000..0379595 Binary files /dev/null and b/tests/devkeys/installer_kernel_data_key.vbprivk differ diff --git a/tests/devkeys/installer_kernel_data_key.vbpubk b/tests/devkeys/installer_kernel_data_key.vbpubk new file mode 100644 index 0000000..3e9e67c Binary files /dev/null and b/tests/devkeys/installer_kernel_data_key.vbpubk differ diff --git a/tests/devkeys/kernel.keyblock b/tests/devkeys/kernel.keyblock new file mode 100644 index 0000000..6bb7213 Binary files /dev/null and b/tests/devkeys/kernel.keyblock differ diff --git a/tests/devkeys/kernel_data_key.vbprivk b/tests/devkeys/kernel_data_key.vbprivk new file mode 100644 index 0000000..8d392fb Binary files /dev/null and b/tests/devkeys/kernel_data_key.vbprivk differ diff --git a/tests/devkeys/kernel_data_key.vbpubk b/tests/devkeys/kernel_data_key.vbpubk new file mode 100644 index 0000000..80910b7 Binary files /dev/null and b/tests/devkeys/kernel_data_key.vbpubk differ diff --git a/tests/devkeys/kernel_subkey.vbprivk b/tests/devkeys/kernel_subkey.vbprivk new file mode 100644 index 0000000..195b1bf Binary files /dev/null and b/tests/devkeys/kernel_subkey.vbprivk differ diff --git a/tests/devkeys/kernel_subkey.vbpubk b/tests/devkeys/kernel_subkey.vbpubk new file mode 100644 index 0000000..a24a036 Binary files /dev/null and b/tests/devkeys/kernel_subkey.vbpubk differ diff --git a/tests/devkeys/key.versions b/tests/devkeys/key.versions new file mode 100644 index 0000000..6270b88 --- /dev/null +++ b/tests/devkeys/key.versions @@ -0,0 +1,5 @@ +name=devkeys-premp +firmware_key_version=1 +firmware_version=1 +kernel_key_version=1 +kernel_version=1 diff --git a/tests/devkeys/key_ec_efs.vbprik2 b/tests/devkeys/key_ec_efs.vbprik2 new file mode 100644 index 0000000..063394a Binary files /dev/null and b/tests/devkeys/key_ec_efs.vbprik2 differ diff --git a/tests/devkeys/key_ec_efs.vbpubk2 b/tests/devkeys/key_ec_efs.vbpubk2 new file mode 100644 index 0000000..8bceb34 Binary files /dev/null and b/tests/devkeys/key_ec_efs.vbpubk2 differ diff --git a/tests/devkeys/minios_kernel.keyblock b/tests/devkeys/minios_kernel.keyblock new file mode 100644 index 0000000..3675690 Binary files /dev/null and b/tests/devkeys/minios_kernel.keyblock differ diff --git a/tests/devkeys/minios_kernel_data_key.vbprivk b/tests/devkeys/minios_kernel_data_key.vbprivk new file mode 100644 index 0000000..da3a15b Binary files /dev/null and b/tests/devkeys/minios_kernel_data_key.vbprivk differ diff --git a/tests/devkeys/minios_kernel_data_key.vbpubk b/tests/devkeys/minios_kernel_data_key.vbpubk new file mode 100644 index 0000000..34ff93b Binary files /dev/null and b/tests/devkeys/minios_kernel_data_key.vbpubk differ diff --git a/tests/devkeys/recovery_kernel.keyblock b/tests/devkeys/recovery_kernel.keyblock new file mode 100644 index 0000000..c1c8eff Binary files /dev/null and b/tests/devkeys/recovery_kernel.keyblock differ diff --git a/tests/devkeys/recovery_kernel_data_key.vbprivk b/tests/devkeys/recovery_kernel_data_key.vbprivk new file mode 100644 index 0000000..0379595 Binary files /dev/null and b/tests/devkeys/recovery_kernel_data_key.vbprivk differ diff --git a/tests/devkeys/recovery_kernel_data_key.vbpubk b/tests/devkeys/recovery_kernel_data_key.vbpubk new file mode 100644 index 0000000..3e9e67c Binary files /dev/null and b/tests/devkeys/recovery_kernel_data_key.vbpubk differ diff --git a/tests/devkeys/recovery_key.vbprivk b/tests/devkeys/recovery_key.vbprivk new file mode 100644 index 0000000..6c7ab36 Binary files /dev/null and b/tests/devkeys/recovery_key.vbprivk differ diff --git a/tests/devkeys/recovery_key.vbpubk b/tests/devkeys/recovery_key.vbpubk new file mode 100644 index 0000000..86d2471 Binary files /dev/null and b/tests/devkeys/recovery_key.vbpubk differ diff --git a/tests/devkeys/root_key.vbprivk b/tests/devkeys/root_key.vbprivk new file mode 100644 index 0000000..74c47dd Binary files /dev/null and b/tests/devkeys/root_key.vbprivk differ diff --git a/tests/devkeys/root_key.vbpubk b/tests/devkeys/root_key.vbpubk new file mode 100644 index 0000000..dfca9d0 Binary files /dev/null and b/tests/devkeys/root_key.vbpubk differ diff --git a/tests/devkeys/uefi/db/db.children/.srl b/tests/devkeys/uefi/db/db.children/.srl new file mode 100644 index 0000000..831551b --- /dev/null +++ b/tests/devkeys/uefi/db/db.children/.srl @@ -0,0 +1 @@ +AEECCF182C203305 diff --git a/tests/devkeys/uefi/db/db.children/db_child.csr b/tests/devkeys/uefi/db/db.children/db_child.csr new file mode 100644 index 0000000..4def9c4 --- /dev/null +++ b/tests/devkeys/uefi/db/db.children/db_child.csr @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIC1DCCAbwCAQAwgY4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlh +MRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKDAtHb29nbGUgTExDLjEU +MBIGA1UECwwLQ2hyb21pdW0gT1MxJjAkBgNVBAMMHWxha2l0dSBVRUZJIERCIENo +aWxkIEtleSB2MS4xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuyrK +i4XJtjEa4TcUAuW3aj6KL3UBGo8YkTBI9zU4HO+LGdcBU8dN/+xE5MmIaELnX0YS +JvfuZLO1NUeGj+mbR79lLM1K0EDNCsbxysNe61cuBSsDNbI8hrCVEKjnyzhcfZLj +tnf7n527IxIWJH5y4pLUvt47PGoyGr8VACG2/kCRVskKLUZyc+fgXKVFd4skKLlu +FwT0HoSH3Xb/4ZnW15jrrZ2NMnwZgNCcFA1YkCfcL0iicPwlEGluc9uDvqd7sYnt +esPxxDwCdY4iwr/8s5pk0xlz1uIEEXw5D03iKkUkfG7gWR0auE4kkuMMNkI/1LIO +69D+YpZZEMINKcR8TwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAHZ5Oy7hkl1p +b+mgI/+WD/tYAtKIB9v2MfO6kgYZ2wJMNmIJieIipuS7KKmePfUDlnLdvq0yGnpP +d4sNy+DYhjXS0ywluSrZTiaiJ9B3gecYbxyHUsTMG4IeJby48G52tdxJ5BNnb/Qh +Hs0+m7xfNz9B2mifJl/e2jOSp7LgRHfSF8PQeSdRQSj/2/pXSmbL/tLZ7ZaajKLM +KyX32mSD+XyqIcDluVdwiG8CKDQnL4068RfW1hMyub4uqtP0WqEmDFWdBu4h4OXz +OwJnuTOkt2MEthT9vlwtSFr+gArMMEmH+rJwISc5einvLf4JELD/VlhHfQFxRhDW +M5xO7XgGCY4= +-----END CERTIFICATE REQUEST----- diff --git a/tests/devkeys/uefi/db/db.children/db_child.pem b/tests/devkeys/uefi/db/db.children/db_child.pem new file mode 100644 index 0000000..6cf5cd7 --- /dev/null +++ b/tests/devkeys/uefi/db/db.children/db_child.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDlDCCAnwCCQCu7M8YLCAzBTANBgkqhkiG9w0BAQsFADCBhjELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +FDASBgNVBAoMC0dvb2dsZSBMTEMuMRQwEgYDVQQLDAtDaHJvbWl1bSBPUzEeMBwG +A1UEAwwVbGFraXR1IFVFRkkgREIgS2V5IHYxMCAXDTE4MDQxMDEyNTEyN1oYDzIy +MTgwMjIxMTI1MTI3WjCBjjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3Ju +aWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxFDASBgNVBAoMC0dvb2dsZSBMTEMu +MRQwEgYDVQQLDAtDaHJvbWl1bSBPUzEmMCQGA1UEAwwdbGFraXR1IFVFRkkgREIg +Q2hpbGQgS2V5IHYxLjEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7 +KsqLhcm2MRrhNxQC5bdqPoovdQEajxiRMEj3NTgc74sZ1wFTx03/7ETkyYhoQudf +RhIm9+5ks7U1R4aP6ZtHv2UszUrQQM0KxvHKw17rVy4FKwM1sjyGsJUQqOfLOFx9 +kuO2d/ufnbsjEhYkfnLiktS+3js8ajIavxUAIbb+QJFWyQotRnJz5+BcpUV3iyQo +uW4XBPQehIfddv/hmdbXmOutnY0yfBmA0JwUDViQJ9wvSKJw/CUQaW5z24O+p3ux +ie16w/HEPAJ1jiLCv/yzmmTTGXPW4gQRfDkPTeIqRSR8buBZHRq4TiSS4ww2Qj/U +sg7r0P5illkQwg0pxHxPAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAHe5m31WaBVW +v/EdEi1XL27VIRF0tVAHtKWS6KyJImMXIri6ro+LvrgiGNc9QKHSOi6BQclnLC9p +1tKhBOvWTfsKaVCy3T4hfL5JDuhcBRNaCoeJH6sJE0P8ZAomRNytQX6TdLa7z+L/ +MV+3U5h5r4RCS1sM4KJCoDWSk3jAZK1hJ6NYY85TSgd6FLNcZInIB3vaLF+Fnz6J +xDgZXl5OIzqfD6gp0o2lC/YAX28F6C6V57r6yUM4nJus4Ah1vnMLDl6xlB1qTOG7 +bl2cgf+sxyjyRQRx+2WljXDbhhQZQMMHbi5iQKmwI5/puIwGwduAk01T+fHHD6CI +C0qJ/AJk/dw= +-----END CERTIFICATE----- diff --git a/tests/devkeys/uefi/db/db.children/db_child.rsa b/tests/devkeys/uefi/db/db.children/db_child.rsa new file mode 100644 index 0000000..7f64b5b --- /dev/null +++ b/tests/devkeys/uefi/db/db.children/db_child.rsa @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC7KsqLhcm2MRrh +NxQC5bdqPoovdQEajxiRMEj3NTgc74sZ1wFTx03/7ETkyYhoQudfRhIm9+5ks7U1 +R4aP6ZtHv2UszUrQQM0KxvHKw17rVy4FKwM1sjyGsJUQqOfLOFx9kuO2d/ufnbsj +EhYkfnLiktS+3js8ajIavxUAIbb+QJFWyQotRnJz5+BcpUV3iyQouW4XBPQehIfd +dv/hmdbXmOutnY0yfBmA0JwUDViQJ9wvSKJw/CUQaW5z24O+p3uxie16w/HEPAJ1 +jiLCv/yzmmTTGXPW4gQRfDkPTeIqRSR8buBZHRq4TiSS4ww2Qj/Usg7r0P5illkQ +wg0pxHxPAgMBAAECggEAM8wm26/93879KmDMx/R86wk9wt51nL0HRn7/YnK3AcMF +UvReqKnamz3u3wYrGveRApvowCITNolJV+JgiglTcOq1/E0gLDwSwq3GEqA475Zj +5Qg/Tifyei/6QO8Nnv8NEa+KF2BjIYxMUutZd2YLM0sBV4U3DYQyM5a4IB40f24z +Qir2sfKGluB2RlmQLWM3BgvVHveA1ZWydEU673NXWG5q2SaksOm3O0wS+ddxLQ0+ ++7j35/0sdJbie9qVT81xAtwglJeS9TfzgNobnLLzB+1UbHrUbQhgdwrnZtT5L7Ik +zqVuf0Awa6FHbHbkJOSpqD87UUkmDYBcfCkWfcizoQKBgQDyTfN0oDw7xtNmsHoa +9P+ZrHLR1BTOSszo+Cy05r5NVuDG9CHXrtms/gRalJUYqZfL60DOSdMISN2QUPUu +qN+rJhaGE2bIoKg2lslqcVaiWglsqFNYDmCmuElp8TQO3u5AsfvxzfZNH8OkaO71 +EnMVEe4LDXXd1hqiSVOHcfbF/wKBgQDFvwZhhmq8sLwoKYna0YpALnaHGzI1MmCv +54n2OZ9FE9dVTLUsLvt42Nn4uSam2NK2jXTXrqlWy2xR869PgRlJsBAHkXrzAvzQ +eXGeob65FxD/7tMjR7XrzZkUHUqBzNaF1OP5pGvmUDw0gyBU6MURMz9/WgJTghMm +23PZORBpsQKBgHn/P3XX+5vJRsUsU75g3pScHA+DrZoUVUlzMuc+SlCcTn49ixCS +S6zrFHwa1VregLw+TZnP174TGeNAr8H3au48Nhj5icW4Bhm+H9lFCW6i0J3xvkzW +qFko7mW1+RUHr4PJWWXs4ncAaDvOTYn86Q6RwX21IEQ6OZy+OJ04hxw3AoGAIz4I +RRlPrJFS91Vv3C+8E/Qz66BNMm3oDXGWhOuAFy+SEQG6yEUXTFJZhpp46QN7ik1r +pYTbaTyX8YMcm27GsvtN4AttfiHqLL14Im1xMEuMHBDUUFVXds8NmSgfP0LieLeY +acWD9WgXUsSL3pYdiRM5HdlM0NU91I8H9o7U/gECgYAYmvBCOMvRNzyKV1bzXv0t +YdaCWmF5s0pAaYyPTNDgXMlUPVwLLP3/JwdVe733X8J0KmppY9le24voKwfnpEnr +xmAZG8yXCqBarvqX+/tPip3aQ5qAAmVk3VC8GOX7WIvYdWx/8mJetoCkYVSDY6q+ +6XltHMnJKXo4IRi4LmW9PA== +-----END PRIVATE KEY----- diff --git a/tests/devkeys/uefi/db/db.pem b/tests/devkeys/uefi/db/db.pem new file mode 100644 index 0000000..1bf3200 --- /dev/null +++ b/tests/devkeys/uefi/db/db.pem @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIJAOwYo5fTA9BIMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD +VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4g +VmlldzEUMBIGA1UECgwLR29vZ2xlIExMQy4xFDASBgNVBAsMC0Nocm9taXVtIE9T +MR4wHAYDVQQDDBVsYWtpdHUgVUVGSSBEQiBLZXkgdjEwIBcNMTgwNDEwMTI1MTI3 +WhgPMjIxODAyMjExMjUxMjdaMIGGMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2Fs +aWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEUMBIGA1UECgwLR29vZ2xl +IExMQy4xFDASBgNVBAsMC0Nocm9taXVtIE9TMR4wHAYDVQQDDBVsYWtpdHUgVUVG +SSBEQiBLZXkgdjEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCfMcTP +a9xASIdKLemYcuHqhVXBg7fK5ySxwzZPJLoLHRu0Zur+IUJfJVrvajfgkjOzyYkO +g7xoOSG4icA2gMXmyQkyMNQdU3BKNDXpG2BlVdOmQgwxP3xLo6Nj8n6UdSt9mKtb +bTtgtmnYl7HF30uM5oc74bFwVMcfsssTEfsRCk/zYqYdBa3R9hoteXW6g/mZPH21 +PE50XZA3q88B3aajo5YMVVnQWjiEPp2CG8lqW/UQrUC9Upm5wjR91m5s4V4T24Bx +56+ZR8qG0+QiscCaQaiIF0xQFEhQJpdm6f0wjLbmDazCgGLU+RjvC/esLeAbgZ2I +OJ0GRbT9ml1l2rnRAgMBAAGjUzBRMB0GA1UdDgQWBBRedD8XEgd6A0gB6pTNcRAM +Lup/NjAfBgNVHSMEGDAWgBRedD8XEgd6A0gB6pTNcRAMLup/NjAPBgNVHRMBAf8E +BTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCJCJMUwUuuk+Eh0VGpTodsmlqsJF4V +QQybTcNPoHEHZMTpo6+4yBB5e4hqMwHqh1GGLY2kk2skKrsS3JzwS/q24lUZNKjN +j7izcDvbvWQ/3fnw10xLd74To3fR+/fcEwVdLnBUPObXI3Zo3HuhC6Xu4atiAf3+ +yqAw5eJ13YBMr0xLLIw04aAVW77NphI8tSilbQFH8rErjtqUn/5ixRuGz6Obdnvd +qm8Y26b8F++8Xb4drMqOUQK72Md1FtcYIbViw5HJ13W/GhFRcQM0Y7GeIWrdu51i +senPG8+Phx9w6saBDyTfmoECi7NQOH9Me0DIlHHyv9Qt1ucWpm4e4QVs +-----END CERTIFICATE----- diff --git a/tests/devkeys/uefi/kek/kek.pem b/tests/devkeys/uefi/kek/kek.pem new file mode 100644 index 0000000..b4ad3d8 --- /dev/null +++ b/tests/devkeys/uefi/kek/kek.pem @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIID+jCCAuKgAwIBAgIJALtwz4UZ85HjMA0GCSqGSIb3DQEBCwUAMIGQMQswCQYD +VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4g +VmlldzEUMBIGA1UECgwLR29vZ2xlIExMQy4xFDASBgNVBAsMC0Nocm9taXVtIE9T +MSgwJgYDVQQDDB9sYWtpdHUgVUVGSSBLZXkgRXhjaGFuZ2UgS2V5IHYxMCAXDTE4 +MDQxMDEyNTEyNloYDzIyMTgwMjIxMTI1MTI2WjCBkDELMAkGA1UEBhMCVVMxEzAR +BgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxFDASBgNV +BAoMC0dvb2dsZSBMTEMuMRQwEgYDVQQLDAtDaHJvbWl1bSBPUzEoMCYGA1UEAwwf +bGFraXR1IFVFRkkgS2V5IEV4Y2hhbmdlIEtleSB2MTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAJUzo+ngXE7adr3jM9WMLTy0jQYfZPeTWUMAbL8ykpAi +DK7TSNXnldeEYq4KD+r6BHOKjOy9lknfCDYvWVH+lgnKKAvCG+T2brqHyH9YbDjE +0cXg3p81014bFlNHYNDUf2dFW1SwXbXUWKAA+RsE/2eBfwHf1KIi13j3sN8Qvqmf +8WhR/WxasbsmRwXrIdtr7tRbgQuEgJdbcCIVEC54WLu6BuWF9yWVJBZ7iNIy1ZAU +gQMvnqf3uFOWoYpQ/CbblSR6n3L3rYwPzT/cJ0HjNaXxKfl83D5liLiJZ8MFzRDD +sOWZup5XgCsV1kSYjLY2lccpTvf9EUbiniEQ04mQaQMCAwEAAaNTMFEwHQYDVR0O +BBYEFEBKHZs+UeJAHr/nVlHIGEFc2a6mMB8GA1UdIwQYMBaAFEBKHZs+UeJAHr/n +VlHIGEFc2a6mMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAADo +J1Coo3fu9w0JWx+8OQKMgXLELQnakyaLHOVuZOZtPEUmyC+986oGuUfuYXMksI45 +y9hgyAUl+lHoMoqXeWE40XLCVcDOVqm8Z/E4ktYhec8qPL0XwDeRswDcnmnQ/q9w +sgzLYw0Vw4XEDwjZqnk+1pq9/i1w90rGUWeszpIOEMEKvAxnMyPz+tj6EXYRn1C0 +NmeoDymps2RRqz5gVtkPBTZ3YBfC6d0P2ID+O96Ynm2mpqxqU23UhA1ZLsyZO/PJ +vNQqpf0Z/s8Jc7M9z4gwZkDHUMQN5a4k6YEV0hU0i61TnFUtbC1jaFmNKhnXwAEy +54/PbPwp/Tco1OPviac= +-----END CERTIFICATE----- diff --git a/tests/devkeys/uefi/pk/pk.pem b/tests/devkeys/uefi/pk/pk.pem new file mode 100644 index 0000000..5ba635d --- /dev/null +++ b/tests/devkeys/uefi/pk/pk.pem @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIID8jCCAtqgAwIBAgIJAOH6BWjsyxqKMA0GCSqGSIb3DQEBCwUAMIGMMQswCQYD +VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4g +VmlldzEUMBIGA1UECgwLR29vZ2xlIExMQy4xFDASBgNVBAsMC0Nocm9taXVtIE9T +MSQwIgYDVQQDDBtsYWtpdHUgVUVGSSBQbGF0Zm9ybSBLZXkgdjEwIBcNMTgwNDEw +MTI1MTI2WhgPMjIxODAyMjExMjUxMjZaMIGMMQswCQYDVQQGEwJVUzETMBEGA1UE +CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEUMBIGA1UECgwL +R29vZ2xlIExMQy4xFDASBgNVBAsMC0Nocm9taXVtIE9TMSQwIgYDVQQDDBtsYWtp +dHUgVUVGSSBQbGF0Zm9ybSBLZXkgdjEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDFXgkTQcjxf0Bekk2fvfRIGENhcQsNCVBu3L41SCZwcyrUVjRarzWk +e+WUnXFFa4fS+z+HoscM0ioKTzc2J6WtsWIU1JgU48H74U6jIfsrn03+qZ02SVxr +Q9+bajdM+e+Euv2UjVhU+BXnwqWWMjJfwsXBxs6/noYvMreDdFoUk1D4CnNJ2Feo +9Vi0GnGbi4zlFhsILHja8fKU0uxIa7rwxUKdNMbmJ2nFCtQEllzZG1Ec7lg/JA+X +EplFP6crWuUEIJxUoyBGH+fRNuvKjnljRYwktP7sVt5JiU3AUGYwMrq2poZS3ts3 +hKj+1xqoc9Fi7z+80RpiDWV6ZQB6gesFAgMBAAGjUzBRMB0GA1UdDgQWBBRigqC7 +Gu0Bntwf023uNkRFlsZBXjAfBgNVHSMEGDAWgBRigqC7Gu0Bntwf023uNkRFlsZB +XjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAVFMhrW1EsAHu0 ++0RvZHO9YODWPGD8tTQtB3JWJ1O9ETlTWnNgLboJlCesd1r5oBOXjt+HqWBbFoa/ +YvTo3HbIZawYWra+ia2MBIfHoqQUVx8M3CaLt8OnCepFyZPbD16qivU3KRtw7yz5 +pQr42RVDyk4rG6i/q9QO0+gnhon4ZezCqkJni5gm6vZN4a+ST2ntk4MqoKexHJTg +EUwsiBy9kxCnZ1jW2VXvA1WrF8M/++7TsG5jeFI1heILdLiaDFjn4bqWBV/MUaGM +a6Mo5QLL/VoIl/IGXw8Z3f4Rjy0ssFtGnnpF2zP6T1qbl+mTMRnxyywFdZaxkQtg +ViVbKP10 +-----END CERTIFICATE----- diff --git a/tests/devkeys/uefi/uefi_key.versions b/tests/devkeys/uefi/uefi_key.versions new file mode 100644 index 0000000..d7f51a7 --- /dev/null +++ b/tests/devkeys/uefi/uefi_key.versions @@ -0,0 +1,4 @@ +pk_key_version=1 +kek_key_version=1 +db_key_version=1 +db_child_key_version=1 diff --git a/tests/external_rsa_signer.sh b/tests/external_rsa_signer.sh new file mode 100755 index 0000000..0724b87 --- /dev/null +++ b/tests/external_rsa_signer.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +if [ $# -ne 1 ]; then + echo "Usage: $0 " + echo "Reads data to sign from stdin, encrypted data is output to stdout" + exit 1 +fi + +openssl rsautl -sign -inkey $1 diff --git a/tests/futility/binary_editor.c b/tests/futility/binary_editor.c new file mode 100644 index 0000000..f5d6a66 --- /dev/null +++ b/tests/futility/binary_editor.c @@ -0,0 +1,38 @@ +/* Copyright 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * This is a very simple binary editor, used to create corrupted structs for + * testing. It copies stdin to stdout, replacing bytes beginning at the given + * offset with the specified 8-bit values. + * + * There is NO conversion checking of the arguments. + */ + +#include +#include +#include + +int main(int argc, char *argv[]) +{ + uint32_t offset, curpos, curarg; + int c; + + if (argc < 3) { + fprintf(stderr, "Need two or more args: OFFSET VAL [VAL...]\n"); + return 1; + } + + offset = (uint32_t)strtoul(argv[1], 0, 0); + curarg = 2; + for ( curpos = 0; (c = fgetc(stdin)) != EOF; curpos++) { + + if (curpos == offset && curarg < argc) { + c = (uint8_t)strtoul(argv[curarg++], 0, 0); + offset++; + } + + fputc(c, stdout); + } + return 0; +} diff --git a/tests/futility/data/EC_RW.bin b/tests/futility/data/EC_RW.bin new file mode 100644 index 0000000..4f5a46a Binary files /dev/null and b/tests/futility/data/EC_RW.bin differ diff --git a/tests/futility/data/README b/tests/futility/data/README new file mode 100644 index 0000000..6723f3d --- /dev/null +++ b/tests/futility/data/README @@ -0,0 +1,6 @@ +These are officially signed BIOS images from existing Chromebooks. + + bios_mario_mp.bin uses old names for the FMAP areas + bios_zgb_mp.bin RW firmware A and B are different + bios_link_mp.bin uses the RO_NORMAL flag to skip RW firmware validation + bios_peppy_mp.bin doesn't do any of those things diff --git a/tests/futility/data/bios_link_mp.bin b/tests/futility/data/bios_link_mp.bin new file mode 100644 index 0000000..f724fd3 Binary files /dev/null and b/tests/futility/data/bios_link_mp.bin differ diff --git a/tests/futility/data/bios_mario_mp.bin b/tests/futility/data/bios_mario_mp.bin new file mode 100644 index 0000000..8a6e8c5 --- /dev/null +++ b/tests/futility/data/bios_mario_mp.bin @@ -0,0 +1,8001 @@ +$LOGÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÉàÆ!С5 Éí!öPáØp£ЊkãöÚÌVŠ—@ +V Ù]Ê\Y =‚˄6•î¾ +˜笠l E÷ “yýïÕó §Fb°#Špð앿—¹Ávma(Qi¹´¶÷iÌátßWšßȼÀPͳâ…2u’Á¾¶z—kåą@R'ó‹fL¥ê³øÞÌ+ä´ F +;Þ/nSγ>ðï“N0ˆ"oŠ\W÷ґd ÷Š™‰@FM؀Nóåd~5óê¾âÑ:\éÇM~å0VC!입~ՕXËöïÞí0í=`~‚ã-KkÐoìƒó’@¦ä‡˜Ý¾ü¾ï¯!–¿šË¬Îy\¥ø›¾D]¶Ó£ÜÊÑrP:çHÈ Ó”êj>@rÁÛ#¦ÞÔ–è"ZÃV‘uE—I›¯]? r¾øŸ@•Sè¨Ý«șºý˜|×-†À/o$Œ‚õ"A`:Ó<<öÞh ½’šÜAGztÕ”'6‹¤|ÙՊ¹Zќ|£pÑ;|Ôº ÔI}(^´>4c|\' FFMº.Gké›:hŸyHú©”÷j=y÷Y}ŒžÑ-+-‹ÐŒ„‘º°µIâGZ[9ŸæocOé¦áë\üÛÍóŸaÿ¯%Þ< ̅…draÞck×þ\ÜÒÿF1/ÆÕtb¦X gþÃ(4¸»/'ýO|™BmÖb‹?.­À£=ÄMæþoE]àšæ×µàóýɎ۝íæÞ+ٗã"ÐRÂmIÀcÿ1ŸÉqèQñOØzs®îi{Q']£R¢^ô8i¡C1³<óC:'½àÅ'Ç=ú!˜ +Ðì;ÿmmM0 ŠÐœ†Eþ~)øå€—ªC_P禦Û2Þ?{|T«*#ž +›öe×E£ÄÊh[yŒŸG4DÒ¤vÞLæ)Ÿ!ï‰6äþ Žíþ'ÔÛÒë;“[4`F€-}úáöï!ŒÌÓzál܉¸bˆ¯È h-ôpv.=:‹3–qxŸéûmߙsy)7Qû…]4:ûƒ®ïçF¦sæDº+ÂôC/¤ÎÉ0nΖsÛeó¤ÐËT1*M_¯~ãWÜÑçÑM”¾±Ð‡ßýF…=Ö¨>ûœoI ¸®›Ö¤òþ—v‚@¥qç‹Yõ£v±³y¢¸Û ýÉ/ê t80ø>‡¦µSꜭ½Í›Væ_Ð!uN@fWUpø4¨GzxPÄi&ȶ°iìœnf[¨!²‚â×ülE w®œ@,á9wc•Y0Œ²BÂ ©Wñg·¤PÝm›]‘½Òbï\HQ·i +þR9$ƒ"û ÉIšôËÁHPÚ÷1G·ˏßBï뇉Õ#°-MPW¡¶Á«}š¼ 채Eù:p爨h~iΆHo·¡ðÁpÃ-o8—ñ>JÄŸn„V|€²XÌñv²ôàj6º—=6$VX¼Bõ;݁•*‹ˆxºU9?P‡)A¢Æ§ç ‘Ÿ0ÓS½ Mþ 0õ'$y¹ô•-Uµ,°±îS<ÒËííÁ êÕìÖQÏ-¬Šïªá-Š¡ÍµäŒáRVÁ#vÇ,J …‰XÜÂØæøÿ¢Oۋow ¤7ßx›Æ¼î¢þèUàÕ@ÜãÁSf[aȝ·hí™÷C köÛ¯w÷ +ƒÏ™šµotÜ!{²L®<$‘‡˜›†–òùÁ*,òÚÍà*{t `x»;݄¿"­µxµåôç÷p€…«a¹Øh|¡íy~?Ø<Êk’g +ý¢yÚ>å×ř”ƒ xúÃ!pºpy¨U½+2øtž®¼ ×BÌ!ӓ5ö²’¾&aÛSÛ1Fûò†§;,ix…Áðeß.Ôõ¼åÃØêÁ)òŽàÆk”9øÕkÄtÞÄ%Q;!÷#§{ê*e—$güÎwƒÀë†wø[ŽK}²xg ^' øËæø#©•}ÇØí›n˜¹÷&ñLÖQ¡€b«ÆÞ3RÒ­ü}çëãíf„f@ìO1‘h§‚v ‹èyب-Qa€ÿkLåµ¹öö(ÿKµ°Ó¶÷KR¿îu†péF-ãÞ D"lëºÙ¶ZេRb{w\Ë%}?§L‡lŒ†Ÿ20YÊøwH|² wnÃI¡àFÙFÕP¬Äè.gI¦{À(© +wҁ>]i¥46d¦³ªNš´Çʾ' ³c§Ó;S€±Ô2@[bÐ;ÃJ +Ú E + JîL=_†ÀŸÈ¤–úª9ï"°˜ñ¾dž +Öj‡:×Ä*øpß{èUÅù"z©÷¶±£%u=àŒ.q +`4Ûxˆ—¯îòa»DXŠ1áÚziV Ãák†_ÿcšõ¨Ó-´×¾¦²J‹é{ÑK«Ø’iãò Ú\Ý仌z7ÍeÒ4»Q]ÍcÕåΜ¥hV /u”$Œîl3ã§WLN­aÎßȋ޲Ìñæ¸ÎëÁ4îOÍnDŒ/ÍcGù\ŠÜWì …%«)Ê#ž‰žé/ïk‰`R›Sjòúa«ÝÊ÷ ¿bYµšÁˆ‘ámµYk+ïbįÓóO6BudÐ÷¤m ß M¢€buq> +ñ³.Kß Ï6ôC*ù ÁYýcŽEáSãÌÌl>­ÝÍàîHθãèIGgÄ/€åí„g3CVÒ¨À)[6ÅÙºKá},|½4õ*‡¤ùá„ÅÏø5å“N R&íÔP|´ÒeêcûÚø}G$~…æÇüòkx„s!¶ZÂÂ2¸Ë¯y?·M`æp½Ò?ßR¼àqãb>Rž‹' ¥ìš ú55ÃE$"ãD"nTŠ 0²î}àë®ä”×vºÒÝ^®á½ÖYnÄ4ƦÃñ ÃøÂ­sã÷jTµn!Ó墭*J7³™ _¿èA¦4—-ä4ôñ‹Ž!¢NB=>AS° ¼t¤0ë燇£Kšî®”xވŽ8=ƆŒþø<ӕI;tÞZžÊ3õE—Y¨ïqX +NJ¶9ºüçó«žBçr˜'Ç+é²Ì¼"ØÁ1Â~Wð€=Ÿ€p­¶¬ÈÀXÌFáýôgÆÑVÓÀšÞ²Z˜Œx<5¢Ï ƒè}ȁ¨:ÃÂРáŽöj–W 0U4ÿ9$Î儧I78íåÞÚ$ßÏL@X©…'ÊÛ·L2ÙUj¶uœïÁ®!’Þs~dx5>ÿÉ"Øù5cgß]-k +¦.“J¦ ͈È‘NU‰®ZDK ß<+¸EÎ8ptvL| ­ÑÙ~{÷„Rò>U~XۙpMgïŒZK1%è!ƒLfiÈh¯G[JÁKÍtÁöbYi„?$ ÆD’e¬ÓLFÁr2ÒnY(TJ)(GFcӈ6pèß¼ñÊ ¯¼g•L$ÍO¾І¬&êw(ª¨øó°,¦æð6(Y%lV2õô°;„K)Û3[ÞXW$ÿ±L² +SVµ_Þ{€ñ~õPÕQà{cDhL¦€d'dSôÒræcX)՞‘.ÓùÐàÿlÒøçgâx갂Yd6mÖ§ÄÒØJb‰Ñ¸HÒ¼n«yµ\®±=–³2¼: Z•šÃdcy°¿¾Gî’+tiŽdMa«½(¯á¿rMÏñK©qðÈSfA/+ ¬Âò÷¬KPSý–vªM8]=Ç-Z¤IÈ”«¯d8ƒÎXEg#–ˆ}¨ÖÎoáåÕNÆû¶GX*í;GÍPÂ9,i(wÆÿ“ÌDÇùN=WpŒ ×M—ªE·Iõ CöD±¤WæutTZ•Uóþ.êÓüÿª-4Ì2úþÒ¯Jk%£ÈŠÜ ×Z7î!D(qö”> ¬øC–š”¸Qb$C1¡!-¬6æãÄ÷ ¾Bå¸7&5“›raڑÃ5֔©Ò'*¦†";þ°Qñ¸ÌÕ š0nëœO¦C{Ð6¾D-/€ÎUÛÜe•$Wmßï”ËódÀ›p ¨¦®e(<æŒ +H™f0?ÃÁn¼E£V +•×gUóÅ3­?ï¥Vfb3%jà·Öæ…ñÚùÛu£±͖r¦Òx㞚=w÷AaðæòÇ‚Á‚1vÍf·í%± âÜۙl+ÿšZÄpµ›¬¼Ò¦¯;õ I#ü³‡^Õ,Æ»üá§P9ÀñGtÜJâ-Æ!1¢Ž\ããÞ%ǃÿ%)lN/'텩îuïJ m•KÈ÷ï%Ï0£¡%Ò½Ã×$f ÿªï¶Lþd7"_%ä{]+׆®üDØ)ú;~ËÌ÷ÕÊ7„–1¯ÎQÁœl©T1†#° ·z½nÔ¿:/*#ñHʉuceä{þ‹… Óqÿ׏"XBØìþ<±_êw\$ôÏ"%IZeËlL]Àwò˜eÉ ¬H|ž%TŠ~úÑï,1å¡_Wm2Á±µÊð±^ºv7²é–÷È`4JàœÂN|´ ¯µC©î9ËÔ¦È?ºÖŒTz¢VЁ—´e«­Ôâ:85 +'-Oöúª&­Í4K|UúЬ +8¹ʟԃ²YGžág~¹³u#éР°ÆÅ²Úñn¶¯çZTWWȄŸTºqV.eÁK®noê¦._GKÓ4=@fÑ+ó1ž–í c‡šomûiT†s¬Ðq÷G”í? ðOæ¢Ú®µNbº¦I÷Ý|PŽ‚x¢\Ï~‹€ aôó/<µâ£iç}¬¤¶ú½*m¢Õ» ”ÑYíBFÄëœçGà ¸$ßn*É_í +!®›#1·ECg ׯâw°§ÏÄÄl‚߲œÇ”ÜÁ>cd[Mîs‡Ñ9»ž? ã"öÊ mª­¼pm×µ>}w ê,Ƌ`rS/þ.;x’¤òK³/¢Vâáüðd7©;/èý’¹<Ò6e=6ãŸll^^5že:™Ýÿõóìùýˆ O¢ÍÓ +¹®OJdC†Œqěè# Zjj¸Ÿ³v¦‰7eíÁúÿh®rÑ,c`Åþ–ûѼ·Ì<sJk¼O©óI¾9|^Àìån.#ŦÂ<Í hý¸o'‚ À_êE¢¡Z{(™/÷9¬°¡ »I°±Çÿ”Tð[¿Wãù¾À­.#MÏ´@¡ïÇ %ʲXë}С°  Ê,©ê+·•3ü ¾gà³ð#9rcܗ²K¼R}/6ïÆ=‚˄6•î¾ +˜笠l E÷ “yýïÕó §Fb°#Špð앿—¹Ávma(Qi¹´¶÷iÌátßWšßȼÀPͳâ…2u’Á¾¶z—kåą@R'ó‹fL¥ê³øÞÌ+ä´ F +;Þ/nSγ>ðï“N0ˆ"oŠ\W÷ґd ÷Š™‰@FM؀Nóåd~5óê¾âÑ:\éÇM~å0VC!입~ՕXËöïÞí0í=`~‚ã-KkÐoìƒó’@¦ä‡˜Ý¾ü¾ï¯!–¿šË¬Îy\¥ø›¾D]¶Ó£ÜÊÑrP:çHÈ Ó”êj>@rÃSA™;á¥ú#h®þÃ}æÕvydi½ïŠ"Þµòí ËL\É<3®¢˜$úñ ¿Ÿ#;pD?xv±Ìòï ù;ù AÎjN1ÒFã¯`Õ¢tˆ®’úDãhÒV‘ؗÏ6ómOÅE’ eÀ²lø£¬:=ÇOeÇ­wW8Pˆ’ «œPG¦›ôl¾ï4s¸ãX½9ûgc ¥cÂfîá¤IZíäú@؝á¿0BÑLâÄTê†àŒî!Á/šs¸™GoêÂOh´ZrüBt<u5Á·À¹³¬çì‰^„þ¤,aä"Oû3¦¦S´P-4þÿ¼yqgw GÛÅÖŌMþUö¹hfs{D­1ÞÝߖ4ŽÝø‘àâëx-ÇžkÄ iJkʒûzûHQöUáÌŸ@_O%Õܐp¦Æ©5.ÚPËq‘‡ wäžøÀ¿"ÁŸé2ð~:ˆÈÉKºb ï°öQ§nl3Œüñk–Ñ~Õ&}„.•ÉðÚÌeîªÐY*ò²5ÀKÇ*ôþ{ë:[FüÎÐ K]VX&¼ìj…8Ÿ¡{÷£s‚á>,{¹zÌCX +‹dہEŽ‘h€Òæãþ:Y6ΏçëLö×SÞ-â×<)¦CO°Í¨ó5eÒ;ÕY‘©f¬8¾w­k¡Ð™Fßxâ‰g3,þh¶Œ©Ÿ ïåOÚ,iô@@m¸ëàܶ–ø^lR\óÞ¤*Àƙí²!Ù*Éú¢$ǹZ)SâΟ½¿GÈËݗ;Z¥ªJ:1n¡Ì¶ä˜eåÀÛúë`:„ˆïek|á,Tx‹¸pU-8 <çž@¶ØTÌñ#2üdlaËC¬¡ã)¥«©2;؍Í%¶í°´¼²Ä\hø5>€”gN‘uÝÇbkgøÈ¶%¬1!°7ó]\¶oÞ;’9C¼I]1÷/ŽvÕã[éWw“¡Åå C²YÒ34Y |8і_ÄQ/¯|tñ#¢m ãË(k áá(“ î”ß¹H;j£çrr¥íxÒ +?9êaUøÈ§|n´³,5óù[·vÏ뗑‹+“«“hèñn:ü„Î!šÐ6¾ó¨é4H$#òqØóBøÞs¯~xÊk2ò ®ÃÒ!vÜHþšA‘K¤#×CΟoJzϨMi·¶%>žòSfQ†X3/×bÇXeªTsÛÍ_×ÏÚÞT1ªøà²îý„/µœ¤ŸÎx%P]ò.AMKτV}ò6?®{YµÝ:ґ¬äÞÛµ”iáÁT +Šë=wM„¸@aÎËr…t½b1eh¾7!©Šoô &%m£*çÈ¢a³‡)œí•ëÝu­<}c7ýM,½âð¤¡!¥Š«”¹זåæÎ”6ÈLEÃúÀ¥›þéöQÂ1¦ÆÈáÁ'×B'Ÿ3Þ3 °€’üVÍ©6ÞÍJ·q%è`ÐO=‹#¾.S4pCS%ëщ"K5Œ¡`îÜX”î3 _á¥ÃEã’QX+ÛÙ3ßn¨~­¨`Ήš-„âµnfø¯Ú,@¥•êúHûo¤0ÇÄ×êW•ÒÆ,¶½ôŠ6§CèReL±ñ††8Eîp â'•êjõ¦a¥—$„JÏû»,5α.OÇû$`É>4¢à”Ú n ñ€¿€ØØ ~ÿÁkºl•,‰è¥êLX3‡¤¡è휢ˆꈐ™Á‰ðºÅTIÑ!o O<>šP±üý[^4]HÑ®êOG¦Â>d ¦²+…²¿§pÁ»0'¾žî©R½ü¯(¤-Š-ÖÀouîðÚѱ+ÓõcDiäÚ롲УêÞw@•» €VEd +èFrq ‡ïØÑæ ð©°¤JÞ]gñÈØQ&…Xtw#Œ=2¶øÊ/¥ô\JÑ¥líë­Æ.^“c[2‡P‰.‹¤C+[S‡Â(û;э¡²ÒLËÜEK¥A­í/ú¡ŠÑݘj°Xk †ž—)0¢€z.Å 1L²pqÃÊ%¤¿áS‰ý‘^5± Ó10ǰáÜcT¸.N“€9´÷5§?²lœPgÉހS¨r‘·ÑI¶B ÍøþNc3Îcfm@•¼éø,ÿ˙8¬ ¯ßmU晣²›ž|8C¬õQIiÛMúRÈ.VAäã¢u ¨2ÅaƒØÉzKð»갔\õœ R\áÇ´¼Äro*ò€‡»KNîµ{>1ëT¹lË€õ_ʘ×8%6+lÁXp@®hA“y@jø@§ï§,rÇq\÷Æc斛$^q;~éZî·½eðՑ!dª•àd˜€w iÙÀ‘'¸öøUªÑ|,‡°“¼CLþ)Rñ#vnbœêßBö춍*µX] .¼›ð£²±{2q_)žJ×¿-åyèakï +’[XaNêübÎrŸŽíYÓdaEñô@Á`/ +ÃëdìQ²ÕŠ áq´ýϙ¸Š+¨‘µ£«ÓÎÞ¸¬šËÝûSº˜âInlúu˜þÑüçœÒ ßqtt$›µ}°ð߷Ē®kîd¥¡Ëj[ œíDvrz Òö>Ð:ððfÄVáJìšÿ†¾`áJ¡ëï3_'}²«¬לÉzäf…Ñ¡LÎ;/1°,÷W½dX4²Mz‘ð·"ªœ¶nƞ©øbO¤dcÒ,m•ß·dú‹#Gÿ®ëÝkÑÉ9ˇªùÆm1‘Ý}]¿±ËÉ£;(z£æe…1»/6i[µP“ðÈOD‘ÜßѼøŸÝ‚È•“¨ôPb¨8øÎÕfûTƒ»æ2¸¯â–÷ÜUÏ(_1wå @›Ø:ªCéî]½wԍH­!"bMP(güb]¾z ƒ/3ˆÆØPhhKì•c¾|¶SQ5JÊwP¨Ú\w£ÜV…ƒ""<—Ÿ|õ‡ +ЏŸæ£çÌhßӐ”ò\œ=#xž“-šÅ'.€.6šey=n;ƺ¯_d¼s™$qNüÓúáVŸì œ§ïSƒäÍIô§?1ËSºö{¯å‰À-ž¤?)r¤m[oz¿rr ‡Y|`Œ–WýÔ>þï#äzïRÃå=ÒP:í½ÐÃÍítzQ:ÌXü½7²$3õgùG•&^è!V?•¡¿.Åð® S#3`5·¢\Ú°èª5ÎyïlÆäÔ¬iL_†k7£¡×åÞbcÝowY¤âºa˨=^jåÒÆòÞs4 ³Å8@ÆúŠ¿-=B73ÚÙrõ[é9È©ÖØÂô»!K|ÕŬäʹî½ß ©ç‚ð90EA|pºCqY”•!ã‚åY±/X!\"ötßúևƒxþ˜ ´ºu /뇚~…!D\ÞÿÏD¼ù9Óa¹Fš±š¬Ò„âªR^OógO-ô="Š¢ñ#ë=oKÑ1 +•dzW5}ûE>¸?á¶5ToÒ^ðƒ0 IõÐ"mù> T"¬ÍŽ-¾ÚÀ<‘ôwŸW3]rÔ°«·v‘&EöÿRM–ZétB•ª>»Žau·Nv%cZ|„ëmœ{ë(ÓÐáirTÓìë,í°Ë,æ‡Ìà kŽŸŠO žhZþ¡³¢ „íAwf[G¤b»1L\v êWÇv†½ÆœÕÿñRf JïfõzlXóJoÍÕȋkHíH^ÆÇ.S2l”'*ÆÖöY3ž/nŽ×Ïüuzꀼs©Ä"úSªÍ<öþhåÔvj#kÂacëž„;C†î2ù„x:t¿£­}R‰§ ´¾žóšiû½"m,è_»?Ûòoeùk ¿ªŸ‰9/j¦ä[ÃðUžu Qp$ÙÇÓÑc½„ÏhYÿ»wKC°¸d…ÅÚí¶f*ÞUSƒÁ»fU͐¨ºpoŒÌ߀~³;À¸à˽ùÚ7Pziî(&3ÈODdOž"©¿ {ºñ¼_˜àë›:*(À'?mz÷åÞ ¬ÙRn™»Äچ/£TØ¿&œ½ÞõnS~¨˜”ˆž?îýàSŠ<ŒÀ<³H!{ã29ÇL­Hzçß­‰†!T²l¾ÀÄÎ&ÆûF„¢ ñø)P]ï»p€‹()ª1¾SJ£L4͝ ‚ÅJÄË¢‰f„Èv$Ã*AÐRÙ°|uˆû‡¹ËªÅŠ!’•8*ý}:.N~³K•&4R¹õ™¦f€tEžõ"x’P¥hKDIð”Ötòví$27Lˆ»Cú"!ٗ;™Œ !&ßÿÄíº7ÄßüŠ-Ž ²›{bæ%ÕIb4ÍÁóz¬ÛB¿1z¶2Žÿë ˜ù„°¤%¢MÙó©R =ŠçArÁÎ3ñðBEMøò„ؾ>c¡åæÅÕÊ/ÎUJ؊ŸlÙýOo ¦òÒ%à‡·á‹§6 ‡¹œ#egY‘T]uqWPĔ/kS»8ûYÓ[@Iù>±Lƒ©Å,Íӌ°ìeAgYމð×öþ$5ž N"ôú3X däë:yþ{Q}݀Jˀ¢S–Ø¢N›âå‰w‡9厃µþù5C»¥uM²×Íg~Éú|›+Çö‘/0 2ox +э¨…tò.2G¯ø°ûk^»Å?†€²3&S±?)sb7½u­Ì¼3Õþ;9ãy;[eÜ!"MøK~Uß&£ “Ë/vnž¿ €*ŒU0½çë²Æx,K |vU>áÜèÂ>õtfHølAý¨½’±–K´LŠwÛawÇ}© ØVB7(ò5â5Aí¡¼N‘óš3)ae¿²b㨳pԎŒ_@ˆ>{[(Hï˜Y óýqôrÞy @õ†Sرg⿔ݥŠUYF׺nîOý?ê?k¡ã÷Ÿ¨âB¸+Z0Rc}ª\¿È8w$;F³Xæù¬ün,õÕ=g1ºJ€ Åã.KXb› »b¼û‹rߒC\¤œ>kË×fÚû•7Wýî‘Æ¥|ÒVÔìŠîOæX^–S ”ù¬êZªH½·CS 'wÈVü°r\•'§&+õ”Ý>r –UMlnµ]ªÞ¤bwY£¯ SœÏ'Qc‘SËYU"«“4Y$®JÈÖÂÏ5/ñaðЋ;…‰M[š?Ùæ Ü:#àú„d8c·ÑQÚ¤ ÿ»×¹Õ=á(³ 5j©,QP™ðžÿ|I5|"o’ŸX•!`Ìî+ù›.>~„9V=¡Ö9XNI‚ßßèçVëÓÕ ¶¬Ðúüd5½y%=׿u½àI7ϒþ̯ Ø'Zé2¯7я¤Áû¨#øUù¿ÈZzfÊL۝àzµk“k —¾ Á¥zÐ[•PÕ¶î¹dô€8¾Kµ˜r0ÊÁPCÀ +Z¶ÙÔswIñ¯á˜ +Â_ݓ@r1vJ“§¸c©Ot[=>¹²ºn\G{yÎk˜èÝðH ꣫ø> ŸµÓVãG×,E¥îsejðÜ5­Rç,„güÙÀòP*®`whE[çrZÁ82×ÔÝ"îÍÀ–òr†ºƒdB€–—ä›>i\ð2˜H)bß +6+ÊdóK•Ö-(äy¦jœj§1ƒ˜‘‘³Õw@™gÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$BVDT$$$Mario.03.60.1120.0038G5.0Mario$CCB.03.60.1120ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$BME$@$@$ÿÿÿÿÿÿÿÿ$_MSC_VER=Üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$DMIÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVPD RW test string #01VPD RW test string #02VPD RW test string #03ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿCHROMEOS¸ xH@x €KÓ:¶aw´•Úhü“ùS˜¥˜ŒuåÁĂÕú;ñ ÏÐý½ò³g(‹¦Z‹L’òòTLÙ&š¦]YG÷ÿL'gL Õ_Ï:Nެ„¹02¥`ي‰;óż٪aÄÔ“j™bUÊç|ÇÙ¨™"È+餳FÌçÖÕïåÊù7N»¤‡¬ˆË¤lQIê¡ù\Æô¸¾®R7unÙ_LU–†æa;7õûX4gŒ ȵÙ€ ÕAÅ¿6¥aÒÈ ×Ùà­[·@" krM­ L¸ +KYg°·¬ÛÕë{ÝØç’ɵH©^è99C#Ò =¯'Û쀛{æ¨ñòn/ƒë!ÂaÅ«ÛÎ싍a6KˉFšÎâ|üÛ«Á‚w.eä•V=³¼“ ¥ †{!»´ˆ@~Ìöއˆ¶õIw"µj6vZóò@ŽpÆx¤m°`–$Á˜ŽÜ/g0Tª + >ÿºþH Ææ©ž®X™ (}pSòPüÇú»¡rK¤®¶°4Ù4cj°YÚb.x›Æ¿v%6 8ô­Î‡¿hO¾È`áº\ÅÎ8!å!B¦?Q¬#èà\e.âoI;-| ?À­§’o ßyŸ…Ä¢±èü+nŸ°sCŒ¥ýÕIt»ºÖ`틨pµà•Ô<åDKBûÉeÙ[Gýȧ½v2™A;^ú …­cxD2›5n¶ÓÍWͼLÖȽëŽBJ +|("V­õcO0!ó7aÁ/ù?×D° "-1ØI2»Ñ«¿iW^õêò‰žâ·3ÞŽ©áÛhúWe`ð#g=XÃå.Ãb9bAzLWs16BòÒëeÊáÆ$ªѾHúR ¬?~‚ø›OîMDeÁ á  n>ƒ÷_ ‹ ör‘ˆQvJåݕΰQ8ÕKŒ£’´{õ+TÙÍ6„÷P«ìuÎû +[Ê^õ7—NÒSþÆ¥-6¾±ëб°üï‘Æãš>t‘k8”L m\üzÜ€”L¶Æç×sÖ|,ãÑ/|¿ý_Å֌àf}‘æše.çÍ¥O +w‹(¨­Ò1õ'>º!}Ñ^ôA³ã>Ïðõ&ú—fó“›fr¹óF³Ìî(R:¹^ë~[g¸”ÆçkÉ3NI—.É#¥}óµ9c 'iHO’róÄ0dÖº©É5BPbQ·{Ï[S +DBíyükäe-¿ã²Æ¦œ@s”0æô|²û–çxK²ÖÕ%]¾†Ï?šj²\}Ài0"¨÷ö™<·ãž¹a8ˆ¨šù ¶7Ö>)¯ÌÔúó@̟Bí$.¦çx/¦á^Žv½5ºâUÿ➠ðªó1^Ëx"Ð÷y³`è’÷RÁ¨ ËðñAmxùô1¹é¾Ã·Á‚ÛS +aÛìJH˂ö!¸’þ•ØY ºB=&ÿJ¹°÷¹Pµ ®”§²z9ʉ/Ð!'°E¥wQç›tÀÀ÷þšøO”-ꇦ/Öt™19%Vj_jÌUö•B‡œP>К‹Öâ³t·‹Mn¬Hه »¹ê#zXOftyúã“Á‰ I؊^È5Ò4¯Å-² :Ž8.%gÏGàùø, +ÊÖgV®1]n:¡FñX/·s“¥´Þ!ÕX–Aœ\ðy?š—9ï ß-‡ëôdk·Z)-Þ «SÑ@7xì:/‚%œ1w5ZDã/½' iÊü+›¸q,ó€ŽJ’±úF°VîÞz«ÈÝv•Ïñ\´›üw§ÖÀ¾¦‹TƒÄ lå¾mà8«ÈìÅÀ}ÝBP2,äHún´ß˜u…PÍèC´Øu“ ¦Ï‡ Žÿ2i(YID_5pýrÙëoDÍÅWF!b±'ÜœE›˜@9òM;ýÊëšÍ˜g^~ 1hF7PDA9E¥=¬yªè,RÙÇr ™žšlD}¹jŸÐÙWŒœá$R¼¨Çò3)'+ågMü“Èø#ˆð„\^Æ~³2“¨ƒ/¢Ñç »©T©Š8Ø1JL5Wå$Çq7A»oGp:19Œ‘Aeâ®n3p˜k?¢6,åO¬Ã±GðÖÈHCÀÛӋ²¾9•vEÃ#¯aÂrö²:Äfܜ»:ò™û $ùê±@y¦£M8—³¥ Ê5ùlEQrc %» ñ°wDKRÄÉpÈÌm S]rJ‰PkW w*M… ¹Ëh\0o*安¨mÞBulìMÎᨯ >»FP¾ÅaË!™.¿@méùV %q f#ŸMaÑv®¹ö’œJ"¢[$µí«Ë¿(çÛ±›á¨ÞBLf oß•¿ᅚ4QúïRÓ •k y$Bšêç¦÷îå|ۉ³ãۚÑ;”ý6ÌÔd—)+Xèԛ†’·T7È£Îæfö@+óyØ­¸Ìʸf(ãbà”¢“}$içþìD9KqtOêYàê7ªhD«øwÜ˲¸÷Á[›ÏhÞ9#@ OÓáã2î=R|8è†o¸Ä9‹?ƎQèÈÑÎôV€Ôéôš¥v­¹¾‡œ£¸Ì¤j™vázZÀöH çi©ú5!é½kî‚yŸ™°¢ýÔ¾¢{zá;u6u•÷ЖHàbç8 `F´²®n‡>]‹0Z2ojUÂ"vˆMr?޽Zy×R,X`‹Kµ–YÓÚ©×6yjט¿å^0'ÜÄ#0œ¦•hÕž¶@ÀX‚æ–©©½öÊàXrQGý(õ„±³™ ®ëE!\Lïîf ¸D—FÙU<ÔpSŽoå9¨²ùëérãÿmό¼¤)Ö¯*’Í/Ói†©Ã© +Æþ4Q>…Ã]`ÚóösØ.äYêŠîHu½N'‚l¯ ê±5)C/X»™±§A˜Ç'ã¶@õÚX+ØP¢vûLÒUþ²£F’e=ÉÇ{Ÿú[ìï!ùtY˜DØH“=ËB]&B’qr ëkyƒUQä¯ùmoÁvK~‡C dÅ&¾*ú–®S,µ"Z1ØU€ÁXì\«C×~Ì1W¦}]ÜÔc·Ô}h$)r"ûÔœ+ž«5¾òkÒÙ¿õþ@®UÐd» +V}{ ñ×¶¢®$=i™²“)‰÷(ÈnÖ—ö¯Çm`ù·Å˜¼+á*݀ú56ë9¶GòôØñÉ£ {b«„äÌÅzF€R +)N2NqªV—¿ÛŒ´ ñŽÓ{Æ7ÖT¼ï£÷Ã~[ÄÂMë³µ¥U\ß + ̰ǘîyW`;´¬„ç}¡Ÿ;{öxóÉ&n+5ªÂ@*¶ˆ¯„@æù½¾[+J º]1‡ï‘Ë ?s¨_.åu…(dkz½È–NC…äaʕ­\ Gnöy¾c5¡n3Ý/J>F^ȶÒ!fžˆõït ¸ìªï6†r]ÓCïN4.4¶LN¨¥Q6,.Èڐº…Ó…’ØqvÌ¡³vm[êh8h¬»¾ rÞ¶ oëF:¸r@\Œä ¾éÌõíô­Ä†íOÌrè­DöˆÏyøn=üY`:¸‚ êSq¢¤ëm;à ÉB–  ¸=¯’ð? ¯\¥búê‹( s ø¼½ŠÊȅNú*Óxh§q!?©î)¼{[Ý 4*Júý vM€"]' Ї÷#›õ"´/—‹í蒢»»½ÛŒÙ ßcö/‡O#4¡ÿrïqÀªÍ®M¬áçl•áw} A¯›!l™>ôÈÚ åÆT¶Üû•/p€>8·ƒïá†]¡ sx˜00|_Á“hX³°&ç¿ÑüøÚvƒÿ2àG“øú^²Ÿ½ïïI𠚏ʒPšûç~„2^bŸù†õµ÷õYå È`ü£kïùáôùLÆk&’Z¶Ìèk_UŸ ü…sUÉ&Êý§þüác äzc¸ñ¿xa÷Œ}Á˜Qô% |j/@ú??ä$>ðÕUµs*Lw)ž¼ËÝM^÷¹¯Ú5ƒÅï†â¤’GÅÝ¢÷¯§"pÇÞÈñéN ?túr~åßÓw0Z¡|6ØFboîEr:š:ÐiþèmԊ7&>Í<¨† 篌×UVº©ýã¡ìMôŒÙãm™öÕ{ $Œsñ¸8Ôê‡1삽Cß< öLû8r1Žë:Gnۣħ®ùûFž.N”n^xyš-,àùùLù¿3³æ!ˍ >s£ç›gΌ|òÌù˜<æûóFæÞD€ÇüoΒPì'Óm$;VhŽ»ò4/Íñ¿BIPÀ­ÕTš£‹þáÁ:{ôœîΞúó.g!¨¦^nÏß݈OLÅ Áœ£ó_„{¼öފIVTá…9PkƒH8Jî65O¦sÍë+ +‹©ô‡ê!Ž Š\@èmàöƾzD4‹ßN4}Ч¼åýÖK÷÷ÌHhm;[_£ +tqñśõ¡Z²#E¿#Þ|?ÌTQÇg©ù²$V$î]º%þè{]|AÉ#|VˆÁõX(ExS£íuˆùõe~ÕêBŠ_„Šºe6q§R£'›©"¨ÃSQ¸ìJñNÍâþ7Ž_Ñqxû\ëÎuãËfñ ›Ç¼"uÍãªç^5ºæñ’fðí›Æ/× Æo³EÖ ÌÑrý‚¢ºÛ +$M¬C÷OV[C¾÷‚žÞX¨3Ed4_–¤¨¾`¨¿pÑuaxC EÂ0ãñÁ§?\ý¢-ê¿a¢öû yë"zÕU«Z.N×íyhµæ«nÊ +ô@Mëã_;P òâ•EÔ|ôË÷Oœ÷yvèåÓ=²‡ÙÖ»­ÓV¨ýڐS…O0h¸£â>,ÑìhަÉʐk³±Œ{ö%‰væƒ]œ˜§Þý¹-mö꾉½ãd‡~H poËKÀ­6eïÆ«—k0¡hLg$vӜºÕw”sY¹£ Sù +Šrh8¸T÷SUËI£1Ó¤4ZéØ˜³É-1=.’®ÎØÀÁ܈\æ?ð<9tð;”×I5úĄ2ù‡Î̺¯ž„ÂÑ矋ɞ2gã˜öʺ5[LXh£_›2Bà€jÏKcÍÌÉFzÁg™“gåÔU‰×Ÿ՚.N˜=³ys1^.ˆiCKlãÍ´ý0ƒ'lÊcÑS»ƒ.“Àôý@âÓB“o»I(ÿ”³Cs +ByëÓú×p¥Ìyú„äV§"¹EïÃê~Ú\˨íÉðò拮v£}¹æƒ[Oî-ƒ“Ì)¬ö"ü¯Ÿxcâ¨ÄüâŒMÀõˆÂ'@¶§Ý€Ùðú¢Q¦êËÉGÏÌÅ‘S#Ô'SÙÄTú4QÑ£1ó‡Å_R†íÂgvÅ #¦Þ‚tŲo´{È¡þŒHšÔwB—PRåÞ)ç^£1䒗sۘ¤^Œª-8¯@Æw‘d7wÖìŸ'`cÝYU+J¢¼õ £q8ʨ.Ƌ  +µD¥¦®7•”ÔMÐI(ڏw~>zNßLšù¶H¼LHÌ}Ð…/»Ó1‹œL4u5萚óüS>ʧöἇ#· iµø 䜾 ªÓùæÑú#EêR°ŸU´rYg*Aëž-RkSOc'T?¡]½1ïŽ=)$«c1‚µóÄÝ÷êöFžÏ½[¢Ñgü131Œ~øhMjÎ ~–?¼‰¹$XOø—æ"ìŒèßžtẳ¢Âh츣óî@5Zñ@<ÕÈž®;lÆ0+fûo£ÌšxÎÕº˜á•ë–ùzúÚÿMµ|–‚÷µ‚ߪ=O¸E]}+µ“X¥ßæsYÓ/Hð‹Z4ؗ)÷L +4û"hÜ2YßÚ­‚I(ãA¯Ðv„rwB{¨¾fíB³pBŽÁÇ>dX8C?\ ú—Ò_7áôŒ~ÊE_rïìE|‚cM1¶rÑyî[²gôÁ¡;£ w´ùÊtmXz CÝ72þ ó.±‘¶¿jeèa#&+zÒä±Î@9æj +¾ýðøÂ'ÒE„ƒÂÖ6¥ìsGGQ—&l¦·ۘ»#n֋™s<Ö‘J´@æI¥Â]VšGà \Ð…b8ÀR1œšEy¢ó%Ýx|QGÛ+ ‡Hέ<ÿ6F‰ÃPÓ»ÇҒ§Ò}ZðIü9 b®ãKǖ!ä CUHW»RÆqL™Å5w𗌫DüÍýÄzzRÑÀ'ޚxZ%IҍºõvÒejüÁL®a”ÊׅÀÒ, •Oç£ÞµÉÇñ³ ô€[V[}±oÀ­ìwvŒ +ÐÖ ¼ë‚µÈõŒ‘ºø¾h¯«NûPHîAûôÏðÃîòYò`ìGÖx[a,7é4Ý hü61nlE[3ˆuYbt?#¶÷ÄÉÖú@CÎ\ñLðËÔ=#UHÕw†uï¤É àò£­•w`¥ b¸úõèÆ. ÏÂ÷@`é Aw‰,ññR&  +vÆÖIT˜Ä]8&ª˜5»K§V|fu'U[ò:l>ì6}âg͆ÓçÙÚzôl­€È‰‡H.·Úôòã«Æ‡V;ò†ÚAñ™zÉd¥Û£CöÇ֋/C¶åå UmƯ&p8‘¯Ä²É¼ð +÷¤tžùݙó*{\Å?Î>r•ÆcÛаô»ÄcÇ:‘eS¾U¹›Ú²¡NVÜ×ûNAÃôÛj„€#{!š¸ÐØ£»FýBÜâ{ÚÊ2Ñ^Z2" .Ü[¬»\8úVB*Û£Må]Q¯ÅoO÷.|ýeGes̹ ËPü ážg0$Ð\:¶s½š5> ޏps¯YV½É÷¨ê|P§oÉ3™ƒš{›û$Ü´›¿º7¬øÞ—ÍÜ]³OPÜnßS*À…2²è}Ô¨?u;•\(y˜òê71 Ù+™MŒ€jxüô7 I²¬ +YÀ¥~· óó³Ðçá =·¼0‚¦um¸x˜ÅzØS¡ x3ºy€ùyœpc¥nší‰ì{½ÃÖ} +Øó?Bi¦ƒ¸[“óWՉUTÙ-ÖÛAáÔåá{#=±VPŞ3­WìgXmuy?§@/ó‹þÌv?¸‡‡Ž†:)M|¡ã{NKªä¾qîÜQ1l¡þÔ©Øq~7ª/ }J¯@P<Ôc¨ë¼±„OÞ¾LüØ¿+@û.¾5·ù5¦?’X觪q—\µ—¨ÖŠ·`×ø.ìÉ!xÚ`¤‰‡úq=RR›Ö³4½ÕOš'eY!С¿`h¨z­@|Ë+ßËerEó›Ú¯JŸ·4[VËd§²5±¦ödëg“~ÐX‰àJ­r®“ªŒ¶MJ­3:1á½NÿZœ×UYÕ¸ï'²‘ýƒOd'Uõ£ÝCÑjô[´1æMiÕV\‘$/W€ÛHŽ1‘ƒofTO4`{2µŸÆ/i0Uã zÄâó_-JcéˆCkrh¨·tÐwŠáÔ<ߙäJfÒm@VGà„Ù—°=2_è‹®ç٘öF?¹"Žu–œ]i/M†A,ÒØò~ZÜuڍ8-Tüwôс M3XUKë"Xßp©¶^~-ݽF,ˆ‡ß§;Õqó,¬0ùl¬á|¾›Ú½ SõIÅæ6[¼‹–Á¥¹ îu’È÷d†8¿zJÝyÇsÛ¦W£˜cM*Åö' ^‚{ :¶äO«éN½æzÉÊãÈåéaŸ‘B{SûÀsQyrî¼UÇ!€ÚëÅÍ´³¯u¸™6¬´ú†Ĝ¡ÕKá;)ï@¶‰ÕOD6º·Þ˜Èi§upƘ+ßê-QNÈê¦9tCü㡐¢ð‹ô`yže¨žga‡òDó>Ànqx†¶+|¦kgd։õ\KW*pŽVˆJ¶–D^d³ª¦®«êªlJ¸î…ó­HY÷zÑË(5´œ2T¾¥<( +¡ƒà¤®6;{X‡èhgB{ϵE=¼—S]iDTƒŽImèœDé0Œ…«8ŠõmҎ0  (õ]EæK«4™ð४g‘À–;"¡‹Ìn«ˆ‡è£ËÄ><£»WíP†z#§ s¬}Øûw-<kB±d2êöÃfLÇļLúôÛí …û#.èÌPu@zö̕Â'† @O]P³†”ƒéƒåCÆÃˆ‡=Nñ׋§-Ľ3Û +3ºÃA³ xαc†9ÚšEsYGõÖ¸6ÌÃðî5œu5­ÕO²­Îšåڏ=2 ëLrIDÉ%Y7@ÓU=@ k;yG ˜&yE¹=x'tZÀ?®X‡ºŒxo%˜'ÜIú„†xÄÒc(…Q +'ÔìMd† N€O]Q>ª‚ûi‰ïˆÍòï#yÂE2•Ê£ÓêTÏÜÎ&~ü›„-Yä¡äHùó~@Չme³·öb‰ŠÓ_ŒsW´0+T>Èûˆlé8‚–¸ˆTf_³ +Bñzµ5çÐ>zF|øið0óÞD^‹oCcyû*ë‡O¦G¶(“‹¯¤(¤ÿTpA~< Mž4C†Ë>õ +|r'hÄNÀmÜÕݲ(¹!Yµ)€i±vÂ#³Íã5ÉI‹à +~´-tCchË´Gٟeö ºþVGQÓ&)?Ù£àµ(Ž·0¬øÝŒI(ùsUo•ÉÃՓ'qºNSª–JKCÄ>Ð1óì™Èl-ÙLL&²kÌ2cì1SÝ n˜E c‰·úÀûâÜ%¼ñÜj3ÂáâÜàîNDw£1™¡ˆ3çé ·°7*c&±‰éÑîÚ´þ¶»ú?Mͬøg†]°}=6<¤V™x`„ 3ñjl>çªÓá§Jn +²ðû0}ÎJÝ1Oˆo,cUnE©$‹‹ïÌ)`¾XýöY>£%ùj›2ß*~zŒÿ&T$‹µÂ#ô²&ÒE×Z£· »ÿ••c¾ØºùÉ1ßÌ¡@KúÆçÈÕòe ßÖ.¼ ñ|ƒAÙóü¡ î•ã#»͌ÇßÇjŽœpÕæ ßցÚÙ#¥)‡6Bè<ð¿{7’¨w€QLwi±GjÃn,/$2rƒ°Z:: /úEë’ví¤»"à€ BL”®c ÏÿÓ·´ - iÐÑ{µ¹;ù’~ÏÏÿ’{ŸG[óÿОφÂ2O"Mo&·¿÷&½—‰¯¿Ó‚kuóؚþؓZü¬šÿ؏ò¬‘ÿaÇ"?ݝ’?á|¬‘ûm«¸-Ñïvÿñ$ AåÖQ ?dÆÿ€¡æï:ay2%VÅ^©F:Xz*‡),â-´²®TªÙ*Ý;ªQgiÅ­xœ[d–ýÿ0Œ`G`Aï_pëc,ë6Pü€#W(âá!^,&¥ºNDÛ)Ò`HÝæßñ mšb¨¡ÄëJ ¬7}že¿ ìðÝ%oâõ¼âlB´µÌço—j €æÿIHñéJ <Ä ë$HÁ²\N½‡9Xpv.ªF)VV-³u¾Éމêg‹tç5ïGÁñkÛ%Úè°aôoM=ŒO4fôoÃÅîre×°ic7®êÐ/{1蝎+è’è$×qGZb?6ÈS¢Þ#ÔkJŠÔØQâÚæð¡s~ÈTtOY³#Oϱ^ƒzŠ€£L÷v¬?y›°ž1uB'§fŠž¿}ÎàìTê &¾I0êÈ}ƒ®U2gâÔ< +Ä-ÙóÆî­CÂܙúl^§u&ý›‰]œr¡ÑûY³8kZ '6ʜuJÉoÇS¾Vþ˜‡ÕœA‹B?1ЍHQPŸÁ½¨{"Ô?vô-óièí„wuáõ¤åèj1´r†žî¤ãœèZ¯§™Lÿ:g¶ˆ~2g÷+Èíy²$1‹š>ñfžÝÖ] h•¨½(:Rù™úwÞY#*—f©¥1þNr•tw%–mÈQޏÕ¢NC\*g%%¿0øÈþ!™CÕѳ ¤oÚ!ŒPi¥˜,fz‰Šó·ˆßª6l`ɘáS§Ø*ÂTמիî)«ê +0)^=¯qboSâ”ñ—¨È 1ï°ÀÑ?qj 6¡c)-F`Ù {ª¯g´O¼ª­V 8;zèpl½J¸ æj vrj-¬ÂÙXgÚÇr?œ3Ù³ƒõu°(Â3í#ßÏ?{±êŠmnÝPY†[Pćès|>2öO˜;€Íø7•ˆ,ŠÇSsàF{Ç^Ã|¬sª®è™\q[W%’…öK™ÃÔû¸c+¨Y*ü„¿»îµ’~ ÅÕLp³kOY!ŸÚ¬G´ûÉ8­;Á2¼mYb· Æs±ø<–[è E¬ƒr™¢Á—Ó¨ž”QdïüÔu²‹Fð4q&¯ÚšI9•žÀ­ÙæPîHºö?˜íÊ5@¯´*rꙒŠÑXʦÀÔÑwGU™B&.&È(™Dß¡8ޅ5U£ª’{͍çéêäèõöv՗¥µIÕTRű[Ä9áûÀ$8!Á¸S¥ÃÓ@ÊÈÆ˜ù$€˜öIßýô=§hÜ=ÉFáéšþáêe6Ñr×Î×êÝ+ [BÌ[Ôð<–HT„0­<‰Ë£×‰Â\@"~2IFrZ 7…9xœøÝì_2^Hl{Ö£òé‡#¯vh¼fËqQìZ‹ÇqoûM›Œ¶ ’f]ǂë]üeÌߏ­1ûAq£Õ,_“­VZ¶g7/-¯Iñ\{„ŒU\Žã€ŽØ½ìÑáS†]€ ð›äÝp9[syféœ~/#ý#8Šæã=úc·ÅÏ2Ù[¸/dÈì‹:Ë (÷¯ ¡U˜xg¦odŒ2LÕÎY·\L¸Ày([üp.ùӓ’·Îkˆà­©®ŸEŸ1I.¢Ý£ÄÍJŸÇFA®ŒúÛßê#ÒýãïŽöÒJÈ}ìJ¯‰[é¢òåÕx:ÄߕR’PonUëM¶\ÐöŸ‡rÖ'ôPÔznUzMÒI_± +æÌpú{ ù¿S¹[D HCìҚMP™+­W"ù£Ø€ùk£_{ì™á¯ó¤e~&¸r•¥oEç2Ï!(¹ ÔiØ·Êg3*Œ7 +A…Ø\‡pZð¦~׆^pX·¾–ÔþXµÓ¨ùü°Èvôj¾é[Ó^]öo½%,œ?/'¦“‡Ô5á¢)Ñ3,ó|MyèõÚFqçh¾V‹/ »ªøfsw–¦yMßtÃ_®vŽ€ký xKq¿HmT®ZÞôÕ[{U +G<#BÑÑPø¹û²KuεY7363÷a&,Ýü¸L”e +díê<°](ƒÕž~}ŒY[\F>t¤ÿå—äeeîµ]㙚Š.z쑵³ W­~g9·ˆáóK$­ TJôE¼¼¦"äîÉ@‹Šcϔÿõ˜\\.óJ’RäS\17®tL ðÅ2¶ ÍߤŒ˜%dÄ®&}rÓC;bÁOðGݙ{ïöv÷iþ5¯½çwìÜÓ3>.´6³˜1 Ø;;Ã`+}<Š6Ƭ”wØ,¾g½Ì•¼7KZkýw÷ƒ÷Žd‡p¿¬ ’—†¡ø07Ê1‚óCÚ?Ff3¶©ŸÛ3³Äqûââ¥M56ïârýక±ªxŠá« 'säPÉäW+8k©©ÕÊ|ÐÝf¥ßƒ?ùha„cïUìc8cËG›3œqã8+6×·‹ý,}ð²9q’ìðc†5p÷;[{—‹Íî +Œ.YÖDL÷Ís1ÿëNÙ6~Iß ±ä@⏼ Ÿ¿BëíŒK g«ñí'Þ»Uô-KdlK†éŒvȘ,¯ö^B?9E}âTM—þ\G± o~¸Óa®1 É8…ÑPÕ­˜âcÅKNDJ2ã6QÀkŒËð-î «`œ_,ãäbƒ"‡ê6#]ëôô`D`æúÇW*e„Öûh,[H w옕þì¦t  @s¦7ûBQ/¡¨æ£!±˜’8ÁDfõYŒêMl©:2OÜknËÆUµ™WK‹R>bèŒEz°P‡ê.5q—›ó´¥ÊȜëvŽHð‰âõ) w^)±xÞX—·y4[ø˜+”mȓdØXÐ÷è¹I×ԌïìÂx¤ážc-¥u‹b?~¸æî¨^#²,Ékó[AñIà ,}‰þ<á$›Áp&ºg£ÐKç@|{DF§pÆoŒuX`vumåÕr$W5çQ“)•Ö: È<¬çOÞ[9‹õ"Û¹uR-7Å·v¯}Ýê½\[yÅi~–é€)D„²ä@²££ úI–±Ø±µLŽ%ßÜ!ïˆì¸áX·xml©ÀÚbQ±FߖÍãÌ+À¶í3Cà꣮6Úϳ­5CM““ü¤ÒŒ(ؐ~E´Ñ…§1®†<)Ó.Þ#˜T[Z_u3Фœ‚¸¥'ª­7=Lõg>£e'©^*Þ—miEÌ?M´.Ïlµà=^«/궎ཆ~ yµ²¸Þز!>´kK²c¥ÎK–ÉÂìý×UCÔR ììUÇ&* /Ɯ"©ÐvÜkJɺ˜~»dmÊc~9ÙsËǙqët â?HÔAø4sð/+Xæ?¬ÂØàÅ£R …qՓ‚gšÞÔ`pX‚Ïõ²™°ìǦk”Mš3.g¥$Š¡âôÏìaueіK(($Ãт@õ²O½™D籍Ð[— ÿþH߈2%8åԁ¶EÞÙ£Óò‰ûÛ$sZ—¤ñ +{¶ÅY±ÜšZ…”Iœš=rã"®*Š<ò@çO>xÌS"ï±ð&c?j<ÉìëůªOfž¬ðÌbœ¢ûވ¢ ¢³lŒ‡X\%½ËªžÌ<(G—]×ûé”ý©;-Ò„ť͊½tg‘¡‘*|²òÃÖûáüò$z­…4ù2NùÕNÀxT¢\ÿf •Ò,ä0¨ÌòCyê¤-BÆ*u0dòC•øNÞ1Ųä`©Kª»ðÉÿ)È"…‹­‘]áÖJqéYš ùä‚Õ ÇmÖ3ßs+“2þ•ÊÎ(¾fuþHt£*=`<{°BÄ[ ÷©°£çå_¢Ð>¦IQ㒣(ôZ4GD8ÍVú¢`Jr<Ùª­¦fãÕ_¯Ÿ)®áfRÑ’È“Žöž¶FVÞVϵØ^Ú‹Âx &Òæ,yIÒ'J¹ÆãñŽ©‹é¨ûó££PA٘ÅA;L³˜•_ªŸ˜LãÓÏÆhJ+YÙ#W‘&;b2E¹OF»ñs<[Y²8fCÞxÏRVü*[¥lûC„ЭÐè³Í¤Ù{RV/ð¡ìɬlJÛ¢jr,€Ã”_0MŸÚg¾É¢ó[g:b #jc÷K§UbíCÝúÊdW²ß‹À¸ãL‰_9΍eþý/ )~ Å#˜Úӑ€õz(`ƒÀ0nŒHä@kÌôã7àNÙî¬ÑmÛg:“æ)euK"=ÔW,y¥Ó#žáYs1†µ¯g”–¢òÒy&Wð¶)Œâ¡ú ¶µù‚žê¡á ÇMᗚLõ¤{}:Lä{ɃÅàåð žÄÎddãd;d<–{êlñ ’q àã +A­[obc×WŒéØöŸ_[ìyèf]0'žLÅ%PmÎâ/i‰[î:zq®ðx +OYçV®†ŒeèÈqƒV1iÑx.Í' aëP ì“Õw¸bÈGáêñ cƒ!ÀñâfäÑ£Úgˆ®ÈTsu1ñA§—î£Iq2ùõž®{“H„œYâã{øåÆ÷fÿ€üŒåà »ž\¶莪ðkÎýߣÚJïðó"ŠSþܗÔ6^d©•LŸ²ôF{‹xßi‚^ô¦®·f!P‚°ۗ˜S>£Û lW»]ç(‡'#¨\–‹“Š´QÖÐh9D›Uõ ‡X _ö„üˆÄ܈ïsì2b˜ýÉ ž<°D}^LS*Ú³–‡@âàþiEüBõsGÛòóEz,k_ôÒ@€èB©ó‰Ä~ 1CÈ4ÔC;󋓥ðFÜfÓZ?’$ÙµèwpûLÃõ‘®½úfT˜ôÙdˆ>=GœmOÙ¢ÚòɎÔ|æ±% ÀÁ(óàÉ 2§9é«>§½â+Z}p¾ðA^]Ñìzò˜‘à(Wûas®¡CÃ^]×H ämËd–oìÁœ0ËË'“üÓf·Â?îV\¦–¥øWäo‘Èè¹Ë™l Zà(_g’VOú²×/´§øÌ¬–üя.àX§( ¸w®€ÐÐe«’.–ÆŸ‘ýv$®‘[¸¨líâ–VóGù° =8Þ°‰ö妼÷›D%“Æõה²¨ Mºóÿ¬GõÒÁÙ "Wµ8Yu‘tÀϒÍ»éÆ­G–f8^ϖ €Ë&DÀêâ8nšiH´ˆ‰8P–XOüÁ„ôÙü£ªt2û1F;ç* +¯ë°!‰Ás׆×1 +ðÔÌtªB*1}Tº&8aBï`Þü§·¥,ƒ$ÃȪù€©g4.ETÿQnú¨¨á؋ðO5„8M‰PèA}¤4Qšt´—,KØy]y!!aa¯9TûÔZýùʤ%嶓8¢Ø^‹æYmôøí†Z҉æÛHÓº|îqƖEð.€Ëog·MæÚŸŽgœøPæ†oãøj+…߯£VµæŸÏŸÈû®­…ž£°ò/h¼ó!g]ð™l T›•¢ZÀ­Ÿq¯-2xàğ (ÜY͋({YöÛt9„ëÙódøÚ!Ø >ž-Oç '¯cóxǟ«÷Hèš ¨0Ou³é‰µ^(ýû¼ÍüâP¸×‰üDxR(6’×ç6Æg>#±7Lэ?Ӂ>ú/)Ã1ÚÚ9Ýrù}*%¾ÅÛjÁ + nñǦ_µ RgTËÑÍ dy+‡®[¿f›>y›õàrI¯•|銖‰EÕµ¿¦YHFæß«FÇÒ.€MnÆxQÄòç<âaåÐÙNÿdªyaYȃPt±;±„MžÕ7–ƒpàЫñQ3øXðÍؕ[@õOÇãŽАi÷Q'Ý\Ú­¸ø˜!–J…lP{¢9÷‰›­Ò!£ãŸ‹ßéäm‚Âu¼q ‡Ý¤¥“y·˜Q€Öï—ͲÐbÜUGsÉ–CQ±û¡e¾Ûclõ´ý« ÅxC·]æÞàóáHUÛ6«¤ECÈ 6mWúR»³<ôÉ6•-<§Bµâ¥¨ž{o߯PʉyàÀãTÞY¿ÏEŽgo[À :jÿ*)Rˆÿe³Ž ï®°IÿPfv&yeOËZAã!rìXœû„f}Ô8ùEœ ƒÜüqa†äúï}«Fa?«¶©:äiÊÙÕ Ö£²,9˜@ÊrŒc2Ü…üe¸h„4.½÷bQ·ˆW²W´ÛAՋˆ‹Ó¢BN7}ˆ½…¥K4âY1 ܃‰@Òr…Ɖçͤ“‹€Kv‚œÖüZÕþËj@O8ՋÁY§ë7K¬#³Dæœ;T›UöLx.©&ó…†$r}WÈÆ90̉ÎC½D´ão °kxŒveæž;Ⓔ> +žÑ"S‹·òÓm¼/-Zûî슟a~1íÔ`ôý›th¦ÑˆxªÍŸt+y@됢ÓÍACÿfAE”û-­(4XÒgüÇFBãPIÄښ ƒ…q)ý1XãCþ™†CäZ¾Ô˜¨£\ê9ôåϲ3Á÷m]ùŽ}Tn~w¦#l OÔåÑðQyáç­ 9éf.„rbL¹œ°üãzBÖQð%A¡û R˜)ð@Œ‘–ü%ax|iRæE]ÆÃUwãûÜ2‹ë—ýÿk r>·‡ìn=?…ЊÏûrûUK„ `DÍřõÝ‚hÌñ¥˜cb°e|Ôk5ˆýÙ@6ñ³]ŽnÁ­J2.Û7(´„Sd6gìs%˜\AAøÿ $£!žµ·ýA ¾—á|´BÑ®¶õǞP}ø$!±#EÅ­¹ˆ{àCŽÜÛTßÐj‡öóï[q^A ¶æ[×·ª@…®¼«m2 +šˆæïiۂһ}ºíö·Še¸)¯áŽ]}"Ux±¹?ó̓Ê¡tįçj9…WX‘6iÎ ,ÞW‹(ׇò2Á‡½Ùè|$’Ùz˜dþ_Dò¹þ6«Ô!Qé?¿ì”xm®Á+Ûÿ1l鑸¡ÀïÖ8®XI*id‡ÑYë„P¼9,_¼¢2Ì®ªV¡*0]o$¢úî!fâ=®·YÚGqÀQ]`â«i‹}61ˆdøù6Ŕ=5VÌzdŸ¸3¿?ˆÁþˆëØO¢ÞS‚÷]pÐ¥U™Ÿ”>Âtʹø9{Aǘ+žÏI†2+;¶öþÉ G_=r^Tj2ôq »æ@¸mqd“™½67veX¶6Š÷—Öâ).&Û}{å¼â@ª6Øö¼Éµ_†Cwöb“‰( $WÓDòÂŒ+Š1oQÔˉ7A¥6s!³õw¦¯Êñ®ü˜ù a|Ñ֎vî0e¢hv Î1°l?úC_^¾Ôˆ‹zR܏«B^ªS2Ô +€p¬¶»FªQwCÉlë|ÒÊ_¦ÑEj1.>¤÷[·ÑE~Ԇgÿw¥cmâ˜%ɖCÑulz/¹Ï»0ˆ†Ô˒¹*1l¡]`ìr)¥Q}b ‘R}Ú<ÿið]÷ÛòݐÇA)VTÅí{èÝóÔb¥[°À‰¡É›7ŒŽ›ˆC +uÄ®Õh)C‚^l®m¸}©–Ö;Õ ©[Xø¾‰úÎCþö Ԕ +T> +ÏuyŒ'1µ[²¥³t¦T0U®.2ÔÈ)vÇÙòD’âô PIKÊGÚOòuä©É÷½oKmµþ5›²u +Þ렁5è‡5øjK5én¦þ#éι ˆ4ώs[uD"ê<Øæ•~rÛCëŸÉC(FÕ~,rDîØ9I ˆ0‰Ò¼‚‹Q޽(WřŒ¶ús[ºF¾+Äj荷KT‹¨–öåŒ;m3Q2ЀÂÍ&éP°Y¡0²CÑ-µbêΈ>%n"5wí ·¹a²-ÇëÜÆc#{ Þ24DOxZgÑéç}î£!¸bƒ1c†-™ 鉬¤tz~ìFŸ”f‚lŽlÙPK‘vÅC"ë#ßÏât­@d³Ð#¹áÌ1n]¯ˆC¬6¦ƒæÀ9›~jE͵Ÿu]F${^5Þ7,QNH¢€^¤µÉ\7ˆC§õ¾!ÿðË3urܦ%Ѩµ“åun@äþÜ#ï!xÙÕçý反ÈgÇÉû Âz5!4< ýßíŔpït N/ØK¢$©ßdˆ_ å6]EèÓ½ÕåpÒ(nJ™ÆrjÈUµ‹ù3Ì<îóŽ-Ü}żP½Twv6ñö‡}óDˆœrVè7¹È3c{–þÇBôҀèÈ­FŒŠkͲ•ìS¥»ÜO½Ÿðé1ñW%´œ՞ÝÅܰ{0ý„:Óú¨¥K^ÅÁ𰹊6N­(?EY[¸–‘ŒÊŠ;ô#çg¹œ+ÂÛ5§í¢ÓßX4 †5x8ÏNA¬‘¥¡µf@—»T)!Ù +÷w¸t/‡ç^;aÈ‘Ä#O€žÙLº-›R¸òÿ,‚t’~°]‚É·Qn!ù˜¢Ó/ 2÷¹A®Šõ§‹¡»ÐÛe©!ۋç ¢R9‹¾KvD¨`Ÿõ‚«OûËvrŒ¼¼‘=QYŸÊ82ù8dò\qYøf%U #Q8bG +Ñ ýg$7ëå£@"ޛ˜ƒ Ptíïð MØñÄ]Ëú¾é61»ïõ;iÅÐû1‹ngyê]/T/3')‡××Âȟ¡8. +¨­¢<¡IvN ó=KOÀÿÔ<˜Ë˜(>Ì™¼.H:…ÿ ÃÀÔ[‹ý_=eѨ#(ǓTÓ u¤Óºäj1 80¥nÆ/‘áGÈäËÈìäv¥×(6ïƒ/V^K³2¯ìÛÛñ†Ö¢2‰'îw"аä,ö”Óê/ð{MB¼–ê…~ºÍÂuÜFgØfJßõÄ\_<¡Aói8Cƒ_ٚ»ŒÌÏ-ióæÕWU½äÿgr!õñ1“q{°;¸6í{’† S$ÿ>ªLJ÷GÌf +—(>ÚÉÓ“~+ š(?]M3ÔÕ~ñ¿ÈÛSð9RƒÊ‰8>¥ËUûHp7ù£zG?M6" d„»‘ûMã8bÓ£úЧ<b.nº0š܇y3Ï]þ Jà¨íëQ=.…ò“J€Ëæ\Ÿúeï£ÿVÙ;–1 þ§'}èa¥?;z {ƒö÷Ãà$LÓ$¾fhøÌÓÍlôÐ{{•íæÄ‘ñüR ¿+Óvã¿¢½EedûvYíw—b↏sðĈ/xÖܑݷlѼÿØMÆ_¯' ë„[;·É]Ñғ£ýÅíó^ ß^NhyþxóÙJþTv_5 p¡eHU¢OÞ¤(ů‚<×tmê’}Ø}µÜ”.‘HÀõ‹~ü(rÝ'ªC—½àu>e!Co¿E""Y¯[Ô5a®ÇÆmVÐUko£Ê°S/éžÁÌûFÕdƝ›Vy"&›ÛX¹ÌîãAÕ£]ùïX]Áôõå¹Û +eɄÑþW„œmz Ìyl òÅ? 2Pb2"e03ó ZFØÌì"©c© Y<ˆïý°ûþà½ÿÙ·ÍÿL%nÿùŠÿ:ò~H÷Ó"6$U—*\e²ÔÂsõÝCzŽÀp3”x‚®æ_\0ˆSÐî¹÷A’œrŒ³í˪ê‡êÒ{~Ô(ϰ^8Ž»¼(«,ž(jž>P‚~V>ÿ;+8XØÆ‡½êûR»Ê¡¯œÅì†@°<õ»›Â!ã0n†Y¢îZT0e±©PÁÐãZ¥:®£ޅwø×ª WîOC”ÖŹøª¯(“¬K#j¹ÓX´’§®°þ§ý·‘Êÿ³¨Àðe¶–º{ˆ Þ² ½Tæ!}s•ùŠʝwÅ"¢¾‚4£-p|©n›â¶YP­ñD¯~pz.iæM̰C]Mù–°mäm®“ÚÒ×8Ïvô.»m$ÛúEFX™œ$×}µpOÜÐãlý»´’œÊY6«ÜÏ}QïüxwÔKX[ù á§ ¤ý%~ّ9—ãH¨·)Eò¸nAa½cYÛ(þ²›EO5:«þ²<\Aä]“÷uó¨žt4¶Â^ }PZËtÞn)ìaRKhÆV€&gpšÝ§ÊàÐaµ!àv“h‹nËY3¦¥ÐÍ+ÞG¾WNÔ>¾Å“ç4Ïûº7ôÙhÃÄg¤â£êÑ¿ µ¬´©ÄÁç`| +!oN¼¡O»„WÚκ¤cðä Îg·ô<½}È$þ4]Ø@åzCÔì†8|'FíšèeáñšAžåM·j-7èôÌ¾yÇ­È·íÅ2-ñ—òœG _Dƒ6ÙùžÜ¬ +*µ®¡®ªèM3x-ò•ë>\èî4oK{¡{*çûzðóÛöØxÀ§ñŽ´·¤ÈŸ„XuÆ'̶6Ê2Ãq0ŠŸ]ô3ýú­~Äú§ƒvwÌ´:¡b᧏Õj1…wP=ךŒg>[gz$ß@GÓW?ۛìԕç×DŒ>aÍ̲F;7…ŽžL‘™ïíÆ”¬ôxcax±q³B*ðÿÌJ³j¸Ér¢Dvñµ`†0 +â}Õ§òdeè&¶ñê!ØÕÜI¹KGÿì¢ñíááuY\@Ð ¶6‰­»zÚ~ÑFp„üGÐaU&ó{O¾±ð M5«]Ǒ2øùx`®™µ>$oØŸ%Úo> /¼h6AÜm)ý¨°.sò¤‰Þ#çy¦þ!Gy¦°C^(à ö¹4"#÷t¶š6 ^}e®ÜÅEÝ¢XyKÙ_§òJۛJ¡ýƒó}‚éD«íF<&|èø4Tª´î3ç¿­@ò œT}džýdCÎn‰°%©žn[jÿBHì¶«ò Ä«±@èmUxݰ$äZÌøò¨¥%I}û…”ÂR 9z9È?{ "'z§\™ßdãI2g•ê/›ˆfÓÕéó7†‰ LmŘÝÄë„Á¯+éäTyh›jà /§E1^›;3VnLÚp;ë¶þÚ·"'¾,$mÊkrÊ7ÁF©«í: ÞŽÏøèšZè”χÁ8¯*¡âà香?ë8 Œ³ÙtDà3!´å¬‹Ü”Ò&²šIE;qÔ%!dRˆÓý‚¾–œ¡wæ¾KR'JT_'ÅÎ!µh«6i7–0>S;€–‘±½8̈́2BßÿT”¼EB,¶¿88Æè¶«ÿq¹ÏR/›­A…+®áÔ¶™àÍe¸ۑϹŒÛƒD®=C¤’‚òD8Î }¡‹ÆÉ«B智OñBç§K†0Šow@âžH>< ø¹¨ŽW h…šƒÍÀê7ËAØM +µÚv”#ŠÊG&giU•³IüŠx`¾ëfKsCäõËè¨ÃÏ>IòÇGÂ?ç—MªÉ…Ÿ­N3wé°u%pz¸:ôtñ»QAÞÌG n’¾—²‡¬Ìfۏ®þ,ˆÄ ?ód++<äi( ãR‡ˆ*_ +Š^Å9‹s8˜PaI‡š¨FF³äUŸíϝ[<&ÓÖýÂþ·ÝçrkuÂÅ>JXÊÀJ1˜»õ¢’L¼2':n¢!còU0 `hGt¾l›l‡üó×Ù½­$®ÆÄÁ«Í?sM…¿?–íýþ-g®raˆˆTHCóÄ£/åa؟øs¯YQÃÁ›gˆÇô›öÿ&›â4ý…Ÿy\^m‡AbÈaòÜU™À +ìÍp÷¨wÝÍÀêL¶r\Ëβ$Ò[LäEÝõ¬†, ;œ~3áÃÀ“yî@ 3iEH^õíuèôWq$ eß½ï{ŠkÍÜ$ù] |Q•Ô7re_·ÉCq€§hی‰ »Sõ£!ˆÒF‘ ÿLUÉ!§õ|Â?­¢žÛ-Ÿô?œ0=E§œ'æ&“¼(tX’ôˆ¢ä0î2N84Ñ®~>Êzhm}Lš @c#%Y§Àü“o88«›5k›©‡‘‹³øL¢™mY¦m-nß1\ÿ¶ÏýÈ#˜Œ(ÚÁ‰'QÓ(¾R·óºÔ’¢g½¡ZKxg–ºLxp™)üÏ8mAfùk#Û =ÐÁ¹÷/‡žÈ¡vÁŽ.ûâÍyÊý÷_D|Ëûì³¢ZÍn[áåic!c |"ØÉêOádˆ¯\ßüHâìúÛ`ÿn¬¶H=F¯â֌½ 3ë.éWÛ9Ä£A’¼¡Í¥“1Á±Ýue§>p \Ü0¾¿½>…Ã_ú²ÃÜÞW¡Cåô†Y°{ËÕ6sjÍén Ëyƒõ@sÅZytb-oø•y3‹,_dâfCÌþÑx䞜AD´(zäŸ}FBid ¸¿üéô‡Õ̖ÿºBs¶N» ö´}-8:†©&¾`ÿ“1Ö ‚ŽýaMCÂi‘võÁo-žgð_y?¾øw̗™|¹²ô¸‡À¼œÙF»ƒÏ}ìÝöÓÃomýÛÅ4ŽŒ4±ñÜQh|@Ô+É8Q~àw}6«j:Ì9•äóþ³œ7ÄòÕ¶³ã›Ï=¶ÐmYâûjÿe´~0†±“÷ˆ³Ké!6«­'žõ7&wŸsQ ÙqöAåÀ9tPЮþä¹´†)5¾S6¨—ui›"ÛÇ®u ì„‹o"«6՝ðu›Ú™àU—'΂¨yùw^7óI*y‘øëÃãQMj½×è7Ãép ÁýeôH-2bÁ5QÊ +VN£5™]Nõ+Ú+„Ȧ·ºØÅ6^r;ª÷ïö!÷vŠJÝë3ÕQÉ`$ˆ+@æ;¨—¼ô@ûËÃî‚üæ‘ƒJ(ûðãJvÅõùÂKPb§U}~ÅuB"¬AøK‡Âl~cB¦;“Á_+e¾1ƒ×qägt%Hˆ˜$•ÛQ½Ùu¨›˜ ¾aL¶èú¿˜CãnHxŽùêۃûÁŸÃñ +‰Û2 ÁæA zª4^Ư*‰,Wøoô…¼8E·ÿ—vôKn +×U–¼1cÁé›h?Œ˜î`uZ®hí[mâª\ ÕuEÑG@鞬È߸q |@¾Mn±8;xn™(Ù÷¾z¿–$H1#ŸË½Ù +_-^˜œ—ÛŸ]͋è¾0õ‚GB;ý”>/=}#Ø_×ÿ[îÞèWçç|„a_jP"¶ž¨Ëjžp¾Mßfâ¢@?®j£~„y e„=rìA+—µ²7qܜš<~øéù>ˆNßnŽÖÝ uûx .+-Y},ÜŽ#vï-µ „ºEÂ..w²!QE@ùúâÍÈ'½EßMÄüüÀÂ/ã \< uYo»™$LçGs䦿uUfl'I¼,Á_2/U5¬[@Ü8”êÊLGÖZ?Î|~uE«ZŸ!5ò¼•^|X»ä R¥Ô™lÁx™ôrìJ±“UNKS<ËfB©ÒL¨. 2ó¨ +¦·\ Я1oe¥2eã\¿ÎƒD5F@)œ€ø8Úi¾*pÌí“ZK†yPÈ_Z·iƒ¡ÈG¥D¯iÃpTÇD34Æ@iQiOméno×srâÐtj,EÖïÀ&ñq!Q.úÀø…¹ ÷ F ¿`z-5ÏIû0`¿µzPm‰§±+ŒòÏQèØ´ÁЌŠþ0ýŸ{ڂºIÖ¿ìGA, F=êÊtÒq©è[WKÒÆG˜ŽPN +œ6±2ŸFŸkõ0$ï§MǛU‚¹lß´‰FÖ1Ø!û«qƒ‰Þ]pËZÎÊËòt vr«>Ý Ö2žLÐyØÍ$‹«Cþ˜—˜§W-¢}Aw“zމtv»î!´0åÏø +2ÑáuW8Í&ù2?d…wý‚¨ìÏ1ÿr\”Ùy…Ô ¹••’.¸kPë¦/´»˜ºÔl]”ÚÎæždá*ŸÉÉ#Ü¥†Gˆÿeå]Õø`%ß¼cûa‰Š¹bŠ]IxÁ‹p±š "¥&¹äêk|¨ÿ-3IÑ\ᘚö^7ÐãìFíŸ ~®¸y{cò8Àœ=DµKQfìzE\AÚÎvuû{Qö/YHX½ŽÂؽf(£D/–ßÔ xÂ8aU¦e!¡—{^èMm“…¬þXtIçƒüÿ6a’ ‘÷m`|})ö0Î$Ëàå±9d6Âå‡]3òÔ­3ÓkÞ¥ÎI -€)LiâmXQ½ù’‰NlYNxzB,0ՈOK!9"¼§¡<0“~œ¶Ka;›qïî /Stt½°ô½ét­ªõÑß;Ln¼‡I%옖!ž‹oΗNOžÍ#í¦éÑür#ɽsÞ=¤ÇÏÚmˆ"윒;B†nNEîyρ»2³?``ý +Ì˺ѝOÙGûª(?èù,Ø+pöH¡ýL?˜m>%·Õ“ÿ|m=—4€ºMÐa2r®áø_ԞØ`ß;Ýa%A·X;|ç‡Ü½$|úaèÿޱŒþƒ%ÈΘ`£-¥x.àótÞÂXr‹´˜èŒÙ +9œ“aú”°¶ۙå(¼óSÓqG%cãš~RP,㏣/–+Ží§ “#iâLå¿ç„Œÿ–_÷“õp GìCÇ=m±„îuÃøüŒ(xwµW1Ð-Ö¡r˜• ¡r8±?ïÆŸåëÿлR…¦O­Å{­ÊgËsc8}½kâ‹-ú¾Cÿ¶/°¦(˜QêEd‰@fèþ¼HöäPR@~>,¶DÁíÜ¥<ˆé/›š²‘¤ÏRR]Kƒ+Ÿ—<Æ1ƒþ•û“‡üC_°ÀÔè@ŸªÆ#w¿¥rÁpx8¢®?èwÒ¢{ ¤±…IpO³Å“à ðáIü‘ò|q—¦ߚAؽ£ü¶¯'Çc…¶ÅlÖ¦wRàq@Ïê˜àÆqˆD0my»ÒãÞ¬È^±$£8J<Ú?Æ(ÎÍ5ÓfhÎQÉïNïjàüû„E?ˆɺZò§) +É8[pcT[:0J¬ \ÛÄC(ê`fÂøQãL·b¢œÓ­é™çœ(HÀÍ0‹·¥ˆ©- +[âŽDnùb:MŸjôe4  z’OÄ#aށ‚¹–‘Ò>TNš’m9è‰öu;zµ¯¾V«9Ÿí»;Øj8¸ÛÒâ‰2%ʒ9±v ÄØ~Ê@¿/¾ÄOþ6$æ¢Ì¹.vcÃ-ö <‚}¢`» ¤8"#9¹©¡Œ¶"înO‚º¼ƒ~3ႍ³ˆ1Z$§Šð;;éœì¦ÊE»ýÛÜ!“МÕùóÁX +<²J“==HÛc›f©œ ˆè&’,\>W@åEôéÁ––J »%g±MªûfCºÍ“jDŽ©üÜyb •W34»ë0©OÆÀ®t ñްZ~ò_鿊'L +Ù¢Hýؕ‚6V·÷ÃûqA†Ž„[­œ@ÑáwÁwpãß-šœ½%(‚W°Ÿ*Ž™r»˜ÈØÓwãPÛóY$ʸ{ø½aT˜Çº M-ÄGº«D’IêÕÕÇnT^‘·£A…Y°eÜzh‰l©&,Ï÷îêa‰a[þ‘ÜD~êC¸K,4„ BZ7'ã”ÖìzO¹8(©0ì½²–Èz¬f(ÈÐØ·L=²šë]k·iªïUA¦Ae\„Z”QºŠÍ 5z9vŠYFTÏßÿ¿~÷P»õSÞW;[»÷w¿o7yÍðwÆß yÍðw›Íç7›àÍþ o9¾ÿ÷ËÞs…95²Hä²6¨-áY‘ /ܱÞ~)ýTRïf&n¸P¨á ·3‰”¿»Ì=½²”+_[œË¤b³)@ã"‘€ÎÚámQklMwÂÃÒ5›8“C,ø÷x@nª.eaãòÎðãý]Âg|Ô§¯·IțÎÌw€%”ÀEm¹(=^#ÊÐÛ¬¼Én ð¡V¯’öºfÝeBÛXNåƒHM„ì{$Ç |²S§sÔÑOañëôR×öΓ^†–¿ªl ѹï?ÍzRíÇ8PŒSã‡X&îÅk†V J@(¦¸¤ª‚ÆH;k\Qò™3(ETœ™›U#o†dûÔX_ÂÑÜÈÈs¿ ciä†{—癤³×[òðݹ Yâ®îºìŸO±zxHøŸ>ÅÌÅ`ƒÐXPåm%‰Yi-ã9<죍« v6Ø73?ȉ½Ž õÃÅ̱Gõā +¬r…C)lõ DáXÙ +©l©9ulD+=Á׈'ø¦ùN~÷ó1ñžçº¢ +ó¡‚=¶’ðõr øÉ‘„]˜×¬Ž×Ûc„zÿŒ@˜Æhԍƒ;õ–м?le™~q,%’aJ,Œèx~ +xQ1CØ8„Ci}A멦$bep[X½/Œš©—{;ëò¼4×{™·9é3ÔX́<À –ýp +B¹i®VfKˆÂS ›È!‰R¡R ¡µÄmd7 n¨I1Cø1!„²8Rn:ðß&„êß ú€K.y`ŸPóøfìr«h è`l;ð¼ 3¸t +Lâ褸(ôá¤/C¼fÉ“Ànod=ÿÅ +Êo•-•†ù”†Úi}„Ѹ›tä#(jBΔ»°ùðöTÞ ©´=0»åcš©•LÙ«.ò$sƒ‹Þ‰®M ÔKÖM¾᢮{ )ùUmp{ð Xïâô¯Ë‹¢¡TJÑñÃlH揪€=¿Ãp)aCÒÛ¢žï²ÿN +èãüŽ›š‘¾žKï)|{ĶH?gzžÄV +¥¶„=ˆÚ*.Äð+c=×F&.ßӊR!|ùvÒ×ôáíy³ª! ˆdA4Z%sÇÆ‘Ü)m’V0Z?ÞgãËo(–šœßþ%rä :þò#Þ¤=Î25D·;¢!»AG´ëò£löا¸:ÝÞ4N«<2HáÄ#fµÌŽL2rzÁïiTBžë‰ÙÑv+$µC3x™fÀŠ›ù‚/ñõ¡u[ö;ò¤y…ŸŸQO0«®0¶îÞ¿Õ7EÁ¹'™(dÚÍäëîµ?pߔyyyâjŽì—}'—}oñ,§Ç՗Æ>Në|^(Ëb¡ÉmάL.„yI%) + —lFÏ»øóÂW̛×Çç:ãö,ËóOÂc§„&U¢^B.mcv1ØüŽ>p@H˜æ(?~Á á¡A¶öq +¦Hx?´ ‰P›«¼84!m„éجjr³ƒOdƒôh`–¼ÓËËð*…·…Ò‰þ™ïDx??¨ +¼¤-HZ9Áíå}êtrÒƒå §ÔÈY#[ï¨=ːʗE_,¨æ³cÃÂzæž=þýãÍòáCCìBä÷_P.Òw¡¾”p§Ü µ*ŒÍ<¨œÙ«o„ùÅA{Ÿò•A.±ÞÛÂ×áÂj_ëpä!ïþAMº±’É?•!wÁBk¿„%·heo¸c|'|”ev‚óÝãgÂç„ßµ  +Ä hÇrB´g™ýÒ6¨½ÞþÞ]ÍØ†þHñS“û‡$wl„÷}å Ž8* ´Ïãà…~ÆÁLü¬:\©^*\sW—žìeÙ»M6üõïÜt6‡G®/ºü@š÷Bb¥X{ÇëÜãĚސaÓ/~òçu‡^LøßÖ™”£<_7IÖÀ¶°9°øjš™8¬h{1[ú+eRÚÒgYŠèZLïjcXƒÇ¥Ê“I¨BDZáíž?7•ÀQåKI÷]©º*Rð],ÍÑe†rPî¦Û+GCÅ!Z—öº¶ìI³Çùº¡è9ù}PÈ23c.àð®=yÓ¦·Ãêšø6ü§ó|(0ëñ‰~äß$¾Úž ü} É¥âoÊPÖ}¿)K^¿)øÝÈRt|Ú>åÉ#Ú 1ù6«fÍÒVÛ{¯[ö©7ìŠÅ:BLZ”žM¡¥©·!Ó:n„µýjb(GçÈî£ïýîKݚ嬵0ß ¨;̞çšï¥¬/f6I-â6u#gÔÉmÝ¿X(y­LCŸ˜¡ÐÖ»Ä7¶€kÒ·¶LÖX8Dh9\€ôsßHºçì£ ¾Wp’[rtÄù÷C²› +™ +’ q3¶Þ8í[ ³Ýx1<Ùni«]ëɉ–ÅI¨”ì—ãVfÕ rÉ +æ.F\jÊ#Ö0¨Æ«š@e´ß* +ê‚?N²ÍŠóHVw ÊEv´”Ά qÁèìÖêo`_v±|¥"ñ ½7[éN‰²Zô$Åuì”LÛ &PÇY‚GÔÌ÷ØEW¾O1õíTú)ô—{?Ê`óêϔÁÂ N0TÕý?÷6ò@ÎèÞMïÞ¸›ªT8­úcS|»a$´Go=Û^[3Ü4>ÓÑiî3JÏqÚ,_s Ô޶õ£X=SP%,ÿ%gzi’ðhÝ(•·Ä*ýº‚{6ڗÅþx¨F¤/‰Ó“ÍöuÀ Î&è„m/®[ȧQôþïE¶LÅC.ÇàzÕjë¯Qg¸ÓÇ·®RŽK–L9âŒú,ó¹QêýPœ+,bÂÑԘ#4ÖH'i<ï7Ëmº6A­ sÙ+ºŸü±ÏúpÁF±çIð'.¸íl§Ý@:.ÉoüìH!WFÒwª=C­ë!úM^ •K˜¡C'tvˆ7^J?˜3¸kQPÞÖÝz•UÿI†íîyC™µCÁ\´ d;…¦ Äù ®R#=?†¾æ‘|nòÅ­1-Y†ÿ£DèóXWW ~á¯jzÑEÐÔØ˜‰[v¶´‹Ìj¦MCmð»Þæ, +ªÌ©0Êleøº›ñX6á2‘¡£ÆÎ=»¤En§#~LÔ1ýîFAõ¾É̓ ‹ã±_kîÈÎáë~cE+»†ñjô¼Ã2ò3¡fl›$‘Mº'¶p®bž1Cץɖ9,…ã|Ø_‰`,oÔ%¾­ˆÍJˆv"¯üò´¨•M5JªšjüŽ*æì’¨…Ù0ô9&…€W!=yðL…t£hÀò—?ÛJëöØ ¿)y×ýµ^™0Œþ]z{žÅ`•¡=. ÞTf拓‘<¾Ýs4³ .‰h,ÅuhÊÌ[Ãt7ô×XVÃÔÇ)о xšÌ[å,L $©§}Cau«šsв—6#*0@þ‡{:B‚¸Híçò`ØE½÷5@¿z°ÆÓ xÝ È »/ÜRž4“:BµWDMj.ฏX˜æ@NgwÉÊ8 '§ÓmXÒã0¶Nš·‘h1pšÀíæº__‘¿b†àz"§WX›ƒ--æÓÈssžc†G +W£—õÇYž~žP˜¦Â¤[4ˆ4ôLo$÷3»#n{zі¿‡›<(*Š,xj·qåø=™t7ƒÃË4”ï&þîaM/¡ÛµPw"ʪàÎy²E·'_IÊLo‹[$êçnÉ{¬Ü,œ"¶Ða¯Á^ꃍTš¾D4!fÕãWLÉ:ÝñN6­ÓX¦Š +I§=¿3n3C—ºj ™R"{³‡“ҝ9ï+˜†•Ãçê‹ëN‡7HOE9¤,QŸ ÍU*jkTíUÊ©k *©ª©UcÎÿTV¯EãßpyÓlNÞ{¥=Rb¸Ù!· ï}øù ܽ2˜!CL^VŽ<·âÀà3©{|9ÁR9Ù£Ãüd…u5’>ꄳÖÃì‡dÑ©F-î õHy!Í9d¸UÂäп2_º¡43qÛÚ¨>¶Ù?÷; DCš97œÑ3ñ¼þ`NŸ!¸aL„š˜vƊF r•Ð;H)z縁=ÃUçÊ@€íZ¡— Åh¼º¢÷¸‚Á±ãFƘ÷‚ .«8›(qÛvš¼6¦"–ŠA=x µÀ#”ƪsZƒìíAÖn³p2ëIXÑ;Ü;ƒ WJÖ<Ÿ•‹…iuWÕ@,èl[-ÐÙ6Ž` {WV(™Œ¢fÐÌ[Öª=½r¡•M¸ ÕÑ´Nq»H ò•¢p|D|£T²™CÀ«U–NPðÀÚºÐõÖÑo'ãW›WCÀãµ`vÀj¬§m‚´6í¸­J* “ î鿏ئÔ=i¤,‘ÕŠ…­%sµnÐÔǪ:–˜ø'GRÁmçÐÐ¥²NO90¦z¹ ¾dDFд}Úth£S›þO5÷#¿aµxôà[ºQfOtëk½”‚ tÿ¯\<Û$&-ÂÚTLa_)uŸÑG½2ÝàUŠ}CŒð4CíÛIDí¯'܆Ô6ºâ¸oIrbM·¼z`ƒ<GÎ Èìd1ÿœ:Zørm¶Ù"¶š½'µb÷-DáäS1o±2°‡X¤ífÃyÿr"“mÔÁ¯Ø:?Bè0y…’OefÑrÁŒëÝ‚d:ÇW“;á圙ÊyøkwЭ9éU…›£²`*ô£ºó4Yf±Òù¬ÓXìoA›Ëe;zìwnÕµsÛåc³™f³ÑØöÙA2Pÿ¥ß×ö¹lÃjßîw±îsy¬§j×-šîBîwôæ?ȧ]ôóƒLdl&ø%&Ab̂‘ŸM¨Èœ¬!‘3fD⠌‰ W>˜W·)í®àuoæ+^" Åt…y‹üäžoæDÈ«ûÍ0ܬ†‹¼Ù9÷°Ó޽ᙠˆ…2ÄU>š*ȩ̑X…†E&‰0Û(YøFb“iJ8È3#á ŒÊ­22s¥23Òš8Ëý•ìç¼ëÀA€kfQ¾Q¾Lø û§²~ú[Æ*23x²Þ*Ê%ÔDü;5sf®MdvV$ÈéËñ‘؈ƒ#½Ë~ŠÕe”S¨’þøQüc <ÑsYb̪³NbÌD1‹",ÈÝæÞ.Öÿe~u>­™³c«Ýqk]÷ROýuú©_þÚ§ýï»éö• +úœH†mv7Äߗ}¶KßC}rÿùÆAIŠÝ±øÁøÉ–£ªýãß ÿoﰜçµ³%ÅüT÷Œ=Å!î¨7þþÌ ¥R)G„‘èíðvQ³ïigк!/yÎùßõ °qô/wI¿ %è%þªñƒ^:íÿС_Õ㒤<>/T¤ÅT +gÔ3»¥xßð"ª0ÜpŸðoæAøŸ§Ô³Q6&ø§ã"«’¾Rvµß…k\@­k‡iՙèÖ±øYÄÀýçÛáfhâ{X+¸Œ~pà÷7ô‡¿¾Ý¾€Çúl³RY’{ô×}œ˜®Ì çDf°Ì +h“ àŠÏ¾.xˆ;ÇQ¸qTmZ^d¤ÜR¡[¯dW¡d­Ô4ü+8I²K¸ ª;ËÝÏ;îi +¿ð³î©ßޔ‹é¶…J{êIÎ_ŒœÇÌ㲜1Ev”Ãè[½Ñyé{¢s¥ ';.àœçr¤æÍ¡9Ç®'=—hN}OTNrxbsóËß痿M*N||™9æ$‰Îß­'7©HY[ÕKžJ\œñ™9ÑN“œfDœê1„çG6Wz‚ÅéÉÍ["Ê|Q9ñ;Çø’s´Ä™ýaeü™bùBsŸ8¡®'=qf?û‰Î°±>›ö›Róð:’ÍýQ9°™í?‚Xí¦»õ˜"ÈòóãàËÇ/5}9ʗŸ¼Öô…”åç䗝ÁyÑô¥ ñçkNb¸X|с'4´#c ÿýÊô€=÷ÓõgÇv8·´Ÿ¥»o¨OÏéô™ýKÞû+×=•ëÿÔ½oõ/yèõ|ú›¥Íu÷2ÉÿñK4»N¿!ÎJøÓ(Yõ¥¬ýëÂ$ß|wòDüÂóuN~Ñy­/=qyª€ûÿóûXWyy«½ç{ÏöÀÐ +Ÿ þô¸/ ÏHX].z;Þ}ÆS+™ÿÿ瘧ž?=Þ³ª¼m»gW΃®™ã¹Ïg¬ô—­ï]é¹ðzn|Ž\ÉöJÿ±Ý}ܧ럿wÉÇ*© +z~ Yd%%&´£ü¼ôw¼ÿÁo1?Ûå¯;öE¸_Ž[À¶+xßЭz¿ùYΣúÏÿý-è3¥Ïö¹úÒî—4¾)9åó¾íÿ‹¼Ïÿ;Ó&ÿ»¿ÿ2ÿÿÿþÿÅΚöՅ¶¨$šè¿¥zÿ>ã㠜’díšð…ç {#âDÓ³ÐädŸ‘ò%«.7æç´äþÿªñÅô/ŸÚOv{2ùÃþueo¤üæ¾—ðsۖ7Ñþ{R¹ô¿ƒžÈ®tu_ÑÎëgþz¯ìçÓg>û9é?³žoû9çöìòGü>žØ¥ÏŸ/™þˆ¾­ýá9†»«ê­ò ~yyÒþ²ù‡éIÍaYôž1|Áÿá-ßÿ ¯å¶%»ÿcý<+çŠÞ—3À@ÁB­>~Ó÷é7°þGZf ×VÍ<£ç÷ó/{üµ8]aÖs^J´?^£®æý ¾iLæûõ]7ìq·äù¨™ 5¦”ðd6 67™í<ÞÃìÎ2“m+K ¤W»ñ3L|Y­§x¡­,œ„_âbüŒ³ìÃþŸtÇþžf¿aâßû.5F}GÓtÆ~J#g\¿ «þ÷“ÕÓú>:ʛÛâÙÕPpÿd¥>CÎõ:¾Wè÷w_)Ëç_XÇ|ÙáŸôØîÛ¾™Ñ4’ýò|(ÆÞŸ Y­é™R×Âë6>o¹¥Íýì=ŽÙéâøSÊìoÓ[m(º¬·4ÿ+‚š_ o¾§ô|$h÷جï_úu‹Oo߅Îa¯ìxWWæ÷w7;ÿΆg:wφýóŒtí¼]#äðŽòx ®¯ò ¬dó-!ò^‡‘æùÿ +l¦Ó›Pã5äü̑Áà*q~7ú>./-þO;»ÌMãiõ™lWϚî¬s{oK%ì³øæiefpª½†½vGeíÇöÛ3¶|;a«ôœù˜6Þ\œšÊY†ú?cA9³ÂÜyù? †û3ÃÆ~¨ ·Hw‰ÑäîoEÿ‡ÜöP=vgyàʦÛå¨ÓáôË&5Ý×îu Ó`¼¾ëEèV¯¿Ów݆«k5Ÿ¿rä{y=²ì¿‡ç þ¼ÿ3ìûoOþ¸ýÞf¢ýeC½‡ªË™ª3g™ø|5ßA•Û‰{ôž/ÆÈån»ýzÉ_©þ q›>ßsïþdþĖ+!ÔmÿTΏj¶‡‰+”é0»]î/˶—¤Ïã³Ñ¦möm°íǎªwçí;&¦Ã}Ýþjo7{ó{[©6¯Ùutð1õž†ó¦U§?Ñ÷4²¦3[o­õö=4¾k{²øIGÿÓQºÂúýx¦|™&}-ï}þ¦7ÚÙ®Åxÿ-›ÒÍ<ê;̶>oeÔàÑïß©=¿²œYpvW¶Ê0ÅúSùýŽ„·îÏd0Z ¡ÿ”ÿ]îUõOÞ[Ó´Ò¬æxur_?]ùÚ^Cü‹ÞÿFöOú½þ÷K•óâúÿ•ŽÁæïk©‡”1÷Ͼ}óïŸ|ûçß>ù÷Ͼ}óïŸ|ûçß>ù÷Ͼ}óïŸ|ûçß>ù÷Ͼ}óïŸ|ûçß>ù÷Ͼ}óïŸ|ûçß>ù÷Ͼ}÷ÿ~Ó`&pvº¤uJ©ÕÓ¬§Ž§§]O'O-N}<Ý<í;:yêyúz*zJzZ}->šŸQOUOYNêžÆžÊžÒžÖ{z{Šs*T+¨YQQPº¢N¢Z ú‰º‰Ú†uÕµ:-Fš£QQUQYPê¢Æ¢Ê¢Ò¢Ö¡‹z‹Šƒ5jµsúº]^£WU«¬ÕºÕØêìµvš»]Z:»}]ƬʕU*êVTÇTÇÔ®©“©ÓTê*jªk*]TØÔÙT™¬U¬W¬Y¬ŽÖGë)5”ºÍ³K¬ “!†eCcçæRùš?3KæYy–žd·œIçRùÊôë4òzym;=<öž—O£ÓÕië4öš{]9š…ZˆýDÞ¢‹Q¦ÔXê-õ 53ڙýM¦“SK©Ôjjµ5š—Z›M–¦[T~ª{U?ªÿо‰0Ëû(Œí̚3µ3,`äåødÔ'[ÀÅìì¡£uÝÒöZçùhù£.8Œ¿ÜµçØÿî–ÄZõßþµ¯]žÃa‹´†_ùÖ½{VO\ÿõZõôLjU©ÿ²×¯ŒÀ’_³ÀÝL©k×¢T)ÿ‚ />‚ׯ>'¦›¦œ¼ú ^¸Ö#±"åç}–OãŒÊðR™ÿÊIkÿêËò×ÿö¬e‘JÅ)íëäöoT^U®£{…-ˆƒû!¹F–fG¸¨¤®÷à²ÛU&vžE×ú“¨ðŠîž`!úÿª˜0¡¯ƒSãÏ_êÐÞZòg¡Ø.= râ+wç¨öÁBËÍ õXBƒÇf¹ƒ™hCÐþ òŠF4p¡£ŒºtxÀŠ—fb~– õ4ð ·î¬QÿÍfၵ{ƒ¬ÙÆ49|ÚÌÞ<íˆGí&dXrÑÇSmìíN–ŒdxBn%å‰Às>9İˍ×Â's.˜çÇ †%ÛðÛL¸›XÒe~ã9贙éÉ49ÖY¢pÏk=J3ùèr 0Os¨ÖÁL›W»`ç&¬Ú¿Td=aJϙÎM3N5;EüZ±¡WU{“uâÖmd˜*>CÖmnÑÆal‰µ|³ÐöM«Û‡¬ÑG.BÄÚ¶0G·®NÒÎÕ¢†+š8a")íËÍïÚJfãšÁ £©mì9ú‡Ú»6‡H|έR''9&(òÀRGpzÓjëŽBÅ £K<Ĭ‰ÈmÏo¶O!b…xCnJOwx(XåöyÌ ‚™¬ è)fõÑ`rfýæETí3ë‚iUÎ0‘igÅh¿Ùk„8B”O„ò9}“[øœMHW1s+‰¸ScÕÆÀћ›}é vÜ´`ã´O^ ¥ÇOŸŒÖÿ!ŸëûO¸U‡VÂqqµy)ÁT#ŠÐå03;F ëÍ}´$» Œ «ˆt(ØàêˆBUk¼üµ6ä'Ù¢&Ýã0˜–½¸M!¡aü†sišJaÛ`#šá®$AÙÆ»¨€ò‚‹®M«LÅπF«gæ.Y Ë2¡Ð›wm« +À¦Ä”[G«E90 d³ †`’þ-(à²PìTyöÍï¢Àªz^$…œ ,QÝ£IqPMs;XÁMOC~*9Gè6¯ÙæŠ€Èn޳ø€ÑAéóTÐ(³àl{;8Ä7Brfì<¡ ;¾œ¬ˆÁå~À8  Ø/äPÄåȁ‡{ -â<žÇ!amò4܊ã;´Ù¦0á§¹AZî5¡Íùp ¢ÍØå##Ú®†vˆ§· E1ÛçöÌQè„.øn†‡/¾F YÚ½óEÖ¾ODȆÿ5¶ !2*ˆz†ðHÛrÄ XHp¨†*Ý®Xâ;˜(´Îü"|ó ﻐ KîhcçGπ70¦sI °¦«¤zU@]0nù“–àØvÁPÂ(ÔÁ—ù<´!hfZ-j¶|f©qS¯ì4ŒR!‘ŒØÀŽ^üµ®âÑêy`#¸‚”ÓȯçŒ9ÌâØ[° jÂ*sàà•‚ çr˜eµúH”[IQˊñ VbÀ¹±s{[0sW{Æ·÷Ɖ 0—†B0 +ü•¨¬h†Ë¯ ÆÑ»ËõK°h€Ž‹vÖB™îߚ!G×ÈîíÅCRHÝ~‘p4h¾vïç;P +ퟎCšï19€C¼ŒØ¹É¹­ù#ōӶPïª{nœ Rn‹Gª#tKµc¬Äʎ +_=pNñUæwŠî$å©>Dà×-K²#[ü{ïÈ1‚þ h8Æ3†Ú‡ª*#׌gN?€+ïÀ²sߌ#l~^4ø« ¿ÑÎ=NkL£‚¸Šß_àW‡Ÿi ùÛB)Ítkp`§n¦ÚCJe¶Ì +Evx"œ=deyOloÄì`ç°·`æ_æýšÔzAS½£‰…À§R5V¹–Î +ô§æ¼xÀÝ{y\@—÷'ßùywoNc¼“F ¨V¡(è‰uäÌþ(÷(:m€oI€ˆuAŠÉŸ&`c­ü]Y)€‚rÐû€àXGœ¾HX-ñ‰¯çÍȁbß>À–uØ +µ¹–eïès4ðä?Ÿ¾r‡l*˜Hz³2«¸ÐNqÅ+:™J¹•­*˜p•ä™T0anÖw…m)sü¨3zXÓd†ìí²il@ ”j¨o}uì`ul»ýmªºÞÅcã—~­µTN• Yí9¯¹÷šA«’xÂQ‚ÙêÃ7¨4±UÄn¿, ÝyÉÍ×÷P{ë+~Š`‹И}¡!Ô[‹ r :¨·‚æÌÊ¥öTkûZBò@dHíUc +‰PöëòKgÎü+fÓ¢j péüî +Jg5õ™8éY8˪q—qCÔ£6E—äj.;ILòë²ü ³7@~Ô6Š d֏™ GpÉG!¼¶@‡e2 å2mM!»ԔüÊ– ®L3PÌËà­Z×…™+Óúˆ{ËOë†ú¯óCiúßYu •uÀÌɔĨŽÚéuAÍu‚¦wÇ!§@ôhÊÔå ÕÚqʱÏknŒJr7͉¿{ùASÛãW¢æ Ô$ý¿+ÿ‘3uÏÖ -¤ÒEŒ×[¢h­YÝ9å7ñò¿çˆîÒÜØŽæ€îáñ‰&'Qð¡’4%9…ìÂLXª9š@ûœÌ©øÅS.$ƀÜ==ç£3.ÜoÂq—rË.;Ni¡S‚6¼¬2¹1‡òz¿¢()´ün¿•M ….×iI·¹uÃQ .äûx(PK pÅNÝÙµpµÂìƒß4oZ h¼Ð˜j¢ƒÅŸ‚Ƶڦ+EV‹4x„iñ¢€ÙKf³ÖàJ6Çò–L§:÷” +7Z&Y”ütþ‚4' +}v‡Äx½a ýÿYs/ú˜ÿÞ`ß!ÔåËõÓ¬”ã@ËÒUiÃÒ$jT«öNO¬dæX+™¶–U,3CäpÔü=´Äðx Û ÛE”•2°0QZ +ÆhæÐ©ÖIÄĪùVD9 â£ÈtÛ €%2d(½1ՓaåSlE„Æ}0²Z8ÅQ¯=øhµ»;½´Ä˜xR¡7&çóä7g·®=Æ>ußq “ fÝèŸ`«Ÿ)Ù¿ùCÔµêF€ÿ«£"H®Q[285ƒØA‘À±´¨ŸÙ ‹P>l÷¥H&ã&ó‚ì6¯Dq ŠFœ~E£ÔdÉÜ=ÒI@ 0 ¾n—‡ÿ;ä´oAñLÁ(p¯þã5tš8 ž!£8V~öÀœŸº—²P3³ÿvvÔã{ˆ&³ î Ú᛺㜿mœW¶˜f€]´ÆT0áÅ#â•t’Ÿ_Ôs5r©>ÁÆy˜»ŒõÙ1ŸHû m\âÖ§lF +ÎCq3ÖØ6`s™sš/² ÿÉX0º.ãF’3l;ÂV%òkð‰ó·pöÞè›<ò%MJ*8¡V/ç‹üØCêØhvK@éÄÕý….zÚ–´4bh7E’!öåÑQZ‚¤Ô.&$ÅÓê’tWènC‰ƒˆ; üõ«d(¬¢^7¸7¿„®C!å¡[¡:Ô­dç0™c9 /j·6kpJq¶±ã²¯SAF…m`Ô¥Od÷!õ +™#ø +Í&G¯âÐAšíEqëÑ Š6­‚ÜÛ–J>C×ۚßHF¥«gùQó›¡ï‡\ÌÊ5Z¤Þýªk¨¾9(¼<-±:£ J3£`ލoR¬A‹”±P*ÿ\Pz–ÒBreÞF(æ¸ÏK0'ˆ7E K(Ó(Q™öFƒ¬¦˜Ul‰úž¶L@¶4m ’Ú45Ä?%(­þ-_:Žf²Cá<—ߌõ ¨ÑÝoð7¿Ù}€Ÿ{Ïôz2?šèÛÐD¯`µ«#% WzñÄâ‘S€ycÜç1‡b¿ãk‘(a)®[¤ù͗÷‚gùs|€¥ÚŒ…ôƒNß vŽÕ*¹*-ÛÉ[HEº ìKšîë—x£q†Íê@> {÷¬Im?Ýïs½Ìîf‚â*%D´Ê£B“Y†fp3 Jj”…ZHEUFŒqÊZjjÀYEU•eJ••jŠj™õú†*ZšŠ•;ÿÿÞç@Oâ½¾÷ß~·ï½ó}óÝß¾Ýàn𷁼-óx;ÀÞðwÍß7x;æó7™¿€[ÍÞNùçÜ-óx›ÊßÁ]—½ÙÛ²Û?eÉþö\‰ìæx‡½'z=ÆcÄùœáTöpù*t›i³¹í,E%QÉ %±‹Ë›ˆCtñ%|Ct$®Å +W¬›€q?£C—Ý›”„Œ,ÖL ­ñÂød0ê?p¼÷ æÛÆÃOÛá°\*®Æ0ٕ|™s_€ š:(ç/Ä®pqkœå™6ìoÄE›2ñÁ‹JÇ̵‡9†na µìOTüÚçê'áfŸ’9ñËàQ;gÁÒ$‰€Gs“|·9Ä^”G°:Áíî|MfŒ±n3s–4äß,ö‡>Dåü膷QoÛj°ql16¯c‡ +ž¼Ù0¢a¢9³/ƒkSY›Þ—š95Ö#GÀ¢ææÛ Û¡p*–wŠ÷´²ÑrÄÈDo9¯ “{Bh÷£#÷×{Ñ·A ½¾1ãÁVŽ´YO7}­|ÍÇU&^U‡Ðµ8œHêË1V9qTïßu˜štÃox¤Å ä>~tm«;œ©k¼©3¼©ÁHåÚàå‰Äښぼ´|–$¡×Ê/{EB«Ë”Ë74y!L§÷å3ˆùÞüHKt›T7š)túi3ɱÿ› }×Q¥Ýeø~×E Qhmvip:ówXZzÔ¦‹Â;sbùI¯üaNÆE›5|?PIîÛ)?Hu”³Øœ:…Ûƒbåí|‰íÄ&´m)Œ,´þâL$“Äà³âúšÒæÏ êŠ< 9½Ód3ú><ã¾Þ£#ôª-†É8D‹¬áÇÀÔ6¶¦OÇ·ÈA¸ÈvŒÜ(Œs€(ùí…̓NroV8RïÚߺ™IÎ ˜=ìó¥³s—…f:äk6(h|"ëeâ¾q3ùr†4[¡>© Gírh‰‡íj L5iûZ‹~Ï&Ÿ¸1ò.dä{Sõñ}a¦‹Ï±N(xA=ˆæTq ϸKŠÊ#ŒÍî/ÕfßN…f&ÃÎ!ÃT9¨Ú*ùÂÑđIñkáÑ^ñ³GÇx•Óù÷Â&ñ«œI?Ò|hÍÍÈý´‡SŸºÏ\'矙¢óôó¯¨Ç8’_Á4¬\,ɸ–žXÚR-ùûC,:jü*͈BoÔ~Χè¬]-Îk=<§ê•uŠ<¼V'êU¢ç+W +L1pqmpII½8£l.ûW»‰9~‰dßk-ð¿P7„>-e­ðC¡VHc\ã䲅9»U‚‰ÅоâÎ<'‘ÎFÖÈZ¼£)C—ßÉtG§á˜áqvªŽŸïæµz +Æ´;x~ò‚l¿Z­8Oq˜¤!âb„– ¤@~o@{–_O×"¤dš=Cäs6û +=S +®ãqà¿i>yίଛXÅÃQú“´?TÅÎzóãû)”ÎzòEW¥ +¸R@þã~p¥nvj½Ÿ8m«ÐÌ|1̇ŜÌmñ|ÜDþø‰È×Oˆm~îµECíÇn-þínæïl·W2“>öþ™ë´PñÑ8Œ<Û֊´ƒ Ç¡9àV¥Ÿò&ÐV`šÑ²£ætV¢UÁx¹-ÑËéÒËíPdÛµHä7Uw]Š ¾”Ýõ$«)·›ë'uu_4]03á~m¯Ô>wwÁVQê~¤jè“ãzä[EK˹Oòî'²f͌Zær‡.là ¹³I Ò,n0ò b¤n°ë¢Z¶‘bÀ†²R2b¥1k$Ù{ øîÝs6L%"d¢¢˜¶¸^=seÍȋ?æmW0”bÙ³Sðý¡ÝãlïFA³).òS ìn2ñHHÉ/”Ž–|¾4ð’9: Eíc¢™²_"Œx¾<ñ’P (î¢Ä—H¶jyѵÔJ,œñœRåîÁrQìÐ<¤RæHXRD†(Z’hï!Âãs ù]Ëeø™6"dHÄ#÷ÖQ£%횯jÁŒ¢àó¯Ó½r󘻰vQgJvíYÈ®‹b†“òK"sÍ3@¹ |ƒqR’,dè^E“A¤ãÙ6š2hºEyߐþ=ˆñîבî#ÇG5‘š™EÉì×:ù5"%ä$£ãÐØÔ‚2]ÍÞ«EŽ6½”S%ã»Ù½ŒS)F²‚Øœ[u0ë£ãÏÖÒéMc’+õ1ìî×m#p¼ƒF’Œ2íÑÚ%,8ª†Ò)bº˜x™Ï8^J8Z?A€É{È*‰rëy¯jÛòÃDZe(Ñ« &l)“fˆm½ÔÉ,œæ²=LŒ1ÿ–Á㖴ü3f+ÚÅÇ+àaÅ/zæQÉIu—Ÿ¿@aÚ.ŒD2Šì£_üµnœ +¢ a¯„@ì 9ë9WJ6Ñ ’0ǦÚê¬PòF&܊²00ʈÀ¶¿sÇTÿ¢ª7wTÁ»û¼¬aîªu·‚ˆx؇& äˆ,ž0ˆ)r ¡»" ‰Ã‘uS²ÜUÄj®êâ;ê²/°Ø/¤¿wUîÜTýnÿ¬ÞQ¦?Ñû†zCî=»dÆ¡ÃÁ½$‹ª†Æ?«JšCô¶áq·u· Ä‚|EwtãÝ´%Ý5f’è|ؤºKBK¡Â—0’èx¼’i.‡1ԗCƳ…¸‹Ç†|¸‹ÇõmƒJ/ü¤—L?­ÚK–5è’\ÁýP$ºq¯.’êõ’èi?’êGô±%Õ!ô’êÇõiÕ$?„8©.H×ݤ¹C_\’醽K–5õ .`מItã^a%Ô yT—4kœ’êF¼:Kªði.¬k¾$»Âи'Z˜$‰ã^Í%Êû´—L5Ý$¹c_P’ïƒ^a%ßF¼zK˜5áÒ]8׃Iu\ԗT5í Ò' /IsF½’K©úè?ã·}8÷{ªê]ߐ•<Šîéøy„WwäiJÁÝî_q’y!’y7p{â Ç»ƒÑ]k¸=ðîàôWwU –Šïˆ®b+ŠéÑ^Ù©=B+Ú"¹¨¯fŠêQ_„Šê‘^ÅÞQ^‰Õ¢½ ++¼"¾¢ +îDû”/(4^Ph¼ Óú`ƒÓ˜ ôÁ¦<°ƒË<°ƒË<°Öya¬òÃYèÁðWrŸÜGæ~`Gæ~`Gæ~`Gæu5^™Ýê¼´W˜‚w²yAztWw´z„W•Kdôcø+¹ƒî éÀ¾œ éÀ¾œ5^†è;ç’ç’ç’ç“u˜Šë]—Ñ^Þå讲 *\kšïrôWçÀÝÍ¿s øÉù $ä€|’ò@>MØ}ñù)HÞ5ìàn珹޼åü ”ò€~PÊù@?(åuîø îdz`¦z`¦z`¦z`¦ ƒËù`,å€|°–òÀ>XËù`0æ|À˜ó>`Ìù€0æ}8Ӏ}8Ӏ}8Ӏ}8Ӏ}8Ӏ}@Ô}@Ô}@Ô}@Ô}@Ô|Кó@>hÍù 4æ€|Кõ Rõ Rõ Rõ Rõ Rõ@Tõ@Tõ@Tõ@Tõ@Tõ`Võ`Võ`Võ`Võ`Vô8p.g¯('¯('¯('¯('¯('¯('¯öP)O^UÕj¾¥îg¯ù $ä€|’ò@>HÉù%õã^¶âzñ¯MwÌÿs=xÊù@?(åü ”ò€~Pi}0Ó}0Ó}0Ó}0Ó}0Ó|°–òÀ>XËù`,å€|°–ó>`Ìù€0æ|À˜ó>`Ӏ}8Ӏ}8Ӏ}8Ӏ}8Ӏ}8Ô}@Ô}@Ô}@Ô}@Ô}@Íù 4æ€|Кó@>hÍù Rõ Rõ Rõ Rõ Rõ Tõ@Tõ@Tõ@Tõ@Tõ@Võ`Võ`Võ`Võ`Võ`xûÀÞ>ð÷€¼}àïxûÀÐèØ\ðz¸Ƽô +\é®…å¢¼Ä +\ã^N.ô:•ð)p¡Ô¯¸à?C©_wÕ/¹à/y $ä€<’ò@HÊy@(å< ”ò€PÊz`¦z`¦z`¦z`¦z`–òÀXËy`,å€<°–÷À¾=ðï€|{àßø÷À¾€=ôï }{èß@ú÷о€<À˜ó`Ìy€0æ<À§zp§zp§zp§zp§z€¨z€¨z€¨z€¨z€ªz ªz ªz ªz ªz°«z°«z°«z°«z°šó@hÍy 4æ€<Кõ Rõ Rõ Rõ Rõ=@}çn¾ò¶ÿ•ëa›ïˆ×øEá[ŸàNE†§GîUÝnþŽ_y[§áî,ÉÂ%{1_ö­Çï+aÿðÖÓ÷•ªý²%ràÝ\×ÿö+w,ãóoœoOúú7Âô€yLÄݤú«­øûã›Àß½4æùgÛçÞf ›vЬÛ÷8vmûØvmòËY·™9›|äyÂhf›ÄɝÁ ¾?ìÁù‡P8>p|àøÁð ƒàÀ.€\¸>qœ~¸m¿{&Žq¾¹¡«ïÎQT:¨×TXÔYÔZT[TR²¦¦¤ê™:™z™Úš +š—U656U6u6•6Õ&ºXêÔ;£Iº—u:êÕ §N¬]Y:³uhêÙѵK*¡j¡êŽª“ª—ªª ª¡ªuUcUeUgUiUmTmZʸZ¸z³ªäêåêçjè*èjÝUØÕÙUÙÕÚUÛU›X²²²°êÉ:ÉzÉÑÑa.«,k,«,ë-+-« ­Y[ [Zull½límm kªÛÛ*Û:ÛJÛjÓk–WB×C×]']/];]A]C\êºÆºÊºÎºÒºÚ¸Úõ•ðµðõçWÉ×Ë×Î×ÐWÐ׺¯±¯²¯³¯´¯¶¯6Áe„-„=Övö¶6¬,l,¬,ì-,-¬aÚÍ2mÊ(Z(z#¨¤è¥è§h¨(¨hQXÑYQYÑZQ[QF²ŽŽŒê9:9z9Ú: +:7Tv4vTvtv”vÔfÒ,¤…¤‡¤:’N’^’v’‚’†‘Õ%%•%%¥%µ!´«)aiaéN¥“¥—¥¥ ¥¡¥uKcKeKgKiKmJm2ÊhZhzc©¤é¥é§i¨)¨iSXÓYSYÓZS[SN²žžœêy:yzyÚz +zwTö4öTötö”öÔæÔ,¨…¨‡¨:¢N¢^¢v¢‚¢„ý‚lj,¿ÿ°Où6 Z…ŸýûñOØ”~Á$T `žyúñÿ<›ýy?Ǒ0FT‰¢#ˆÊÿ“ìI²£Iב™"dVdDï#Ñûû*ݼMn“E¡Áå[ì½Å yæmfak¸wþŽ#?VËÉËSJ¼ùÜYüóüþ†ûŠc?ûg"eÿMwULj Œ5ŒKA¼^8ÆÇücq‡üDcÏøí/bÆöG£Ž(ÿŽÕôÿŽÛiëÝ6Äkk# +A³~ƒL‡®'Gf ”žŒxa3ÎB²×qzªZ4/q{<ÄNuGçâìqŠÌ¼ÉBÅã…ΤƒÄ­o¨žC+ñÆÑ‘‹+ö³@ʟ×+Ý% Õ¡•åÿ~V;è…Pgîí+iÂ/gæzæo"÷í“B…û¬6ÌOñ9˜²‹Än&4œo ˜¬:Ûý»wô:(™S›™ºA)3Òی·¾þT {¿@,ù7fȜ L—Àü»²rD[+y²ýãG¥7ÉÝncët¶+ñ}àÏIü’ÒÍv9GšøD®ï1—äC{ºjˆ¿+ µÅV‡Í‡ÿ¾úë˜yÿ*G|F\ù~s'ÿ‹~–£ACÒüf¢loÕ8%_+<ÑBÚò-¦ÿt½ó6‚r½§4ýêßÿÕ/½þ%ïž<Àµ$Rù 圽ðoédÿú—¾q:ùä÷Ò^üÀ¥¿5qÍýeï“V~h¤ÿÔ~ÿ„½âõQ7oÈs¹îß¿8<ù/’ß{4ÿ2ö'AxM•³äÏ4ýÿ§ì­Ð²­oìxø»€*9%ç°} „@š¡ö1¬Î4ç±ø¨·8ÖN=…ÜkUÎs¶ç9xìhì>lVüc½ª™ûkyȶ.d cÆðøgʝ‚‚û“à¿õ‚ð¨Á}X ¾¹pG/Û½3 Ú#³ò³ó­38÷ÌVîêÕ`¢¼3¸®»üm"Çç Z>E­c» “˜žî„î^9_6ïîÌü‹Ù|ìαã¥`µ±o¨×#1T©ùÉñ¼] %ùrÿjö,‰ÖwƒnM?›ƒ"os†Pvž¹H9”¸3œ?äžY3sM¦A“0øIqøW½^ò€âÙí°Ctð,O%ƒŽ9Î>•Ñg½(£=%ïH: +Æ÷bJì.òo8ÍÇÀsŽ#‹cœåoBjçwÝ$4Ï"ÉÂaûÙb±ÜÒY +Əۮ5sÞÑ{ä°ì}èxæMÓœ¬}hXΪYpÝ®ÂOÀ +‡M?îïh¹ðX~©”þúô'X0ç9Ïu¾ðý{½ø’öÿ¥Ú;'ÄX&²fÓ$àŸ ?QèOÙHµ²Z²H!ޖÞÞТ~EfröžÓ¶éw4Jû~o»N6äÈÑ»åâ}¶oh8ÍÞ~g¤^ ‹xñXØÏHtL+ÏÀô><ʁٷJ?„áþ fð@yäÆnéíöɇkǎä\Á¶f(A¹$ÝH5é@ñ™ÑA¸” Ý Ò.LH¨¿ç8óO…'zH¹2H8ÁQñã- ô¦Õ(Î`ü¢þ8‘çFò-™oÑÝÙ·KÿZô‹vnÚ`M\¸¶ ½½óó<Œ7ÃyFÍc’á԰⢠!ÍBͽ6Ï(ðð Å#C‡‹×yA÷“‡?pd¶þÍòqr;ïàæ3ÿ¥¨ûÿ£O7-oûZy±ywñiæÿ^#? ãû¸ŒÎxÿoŸIZ\F‚´¸Œþåæâ3‹ÓüÖq4Nþ'ïhïÕB¯!>û=h?çÄæ@è(^áùµv©k«-ÖG¶ù¬»¥x[™k,Þ{鍪ˆO—ŸyñüÕ©ãÚí+;”ÊÚ\«Ñ™ó4‚Õ·…Æïxs³Ì4³¼ +JŸ1×À¸ŸC¸ù6Ù~Óh¿sÏÖò³•P Šîr ¤ˆÐdšRÓ}Ò3Xý—ŸV»ßëmÿýÃö*:¾ Ì,IDÏÏ¡^,ÍF•û4¿A5a_ !×ûñ'E§«¡'3‚ð"kû\eg}Ûp¡bÔlµ“V¿ÂÚîù6|wÌ®‹5á¤KêŒ®Õþ«ç‹ƋSî`[N}|–g¶Ÿcó_n6Ú-SÞc°Á÷Yì ?c~µ½Þý˜µ}­fÿœÚ<1 ‘Öv/8šs‰ê¼Ì–û³ç§Åðis¸ÿŸŽÈ¥Xª¥_°ûæ²C°ŸVS:糪s5³æSNõޱ_bcb}\Ýß͌ÑöÿǖÑZo¯Ñä´Ázk·T´~ŽZ'ÝqcIo¢=6k}çåtíþ Ž7²Ì®[éKÕSZe¯?â×Ì¿³o©}ÚûÝ&ƒÊÅùŒ=O™•ºŸ¶¢ËÁ†‘Ÿ/yQå=ù Ö{ýýû¯ÚB¯ÓÏ{½þ•³Bºq8¾Ÿ#ym”ÏO+™ûf&Âq¾}V±v…†ªY1;ŒLкV´}.‡›´ÛÃn=øÍߖÐ͞­ãÈ×õkuFzYnÝï•Êh£V·waŒyîÖy“wð††Ãa<ŸÙ×d!úÿmn±ŽYý¢ž…»;h}’ë»ècÛt4U“¿°åô45Û]=^…ÎúÑ_f«{«Âˊžès +Ðòl³1ÄùäTf¼֑^5¶Å±4]W¿abÅÚÓä‘k#À{Šsœz`ב„Å’LGvÇÐÓaS³òÕÔßüÇí¯ ’¾·»þÛMí³Ñô7»ëU8>QDෝäÕµ©_¡{UOºËW½²†ÀléøøfüÌ¿ÍÀˆLO³ÌãúÒóc]—{CÕl«œÊ¦)ÞÆY +oS—µçdŸtËêŽì[GFÍ«L]¤ÏÈ×µééVìáôì»FEÐMG3♔دô:4¶X§¢ñ%•ÙKÓÐæö´¹¬#â忖™â3¹³šÃjXy½ÎßPa%Ë/®Ôås”^ì$N—®š‡ø;¶?9fA÷~u,ÄÞú7iîñô:Ã6yLîv?öcxüÉl„Ï# b~¬ŸoKK¶òâj;\-®ßQ¢NO·ïñi9r뵝²› oS¶é¨'Yák¼ålèuúŒ_ÖØ•“ –ï=O+ñú™W“õ襺La +•ÕÀPϼø õ:=å\†ÝûjoiûB¾¿ÌtҞ‡ ”ÍÀåX)&ñËà76|fP3X-–÷ëã*'Ií|\WÝ(ÅÒÕô˜\ÜÅQ^1G[íòw«µ¥ú+µžaY4ðßk¯¦·aUìè!6ºÎNQYW›F«MâºáWaä#h¨ò9 U/˜¬¿N؝žÑ~Ž/Ê×ô:¬ÆÉãèx&gĕ®Ðñrl§ s¼¥•³É:kWϯð»&{ +_zÕëa´³z'èó¾žã@vßÂùiꥡ²j1YHþ³ã!޽­÷ÉÖ½de_ ôHöû[Þ7t¿UEë âÛ}%ë[ö|±[œjï7›ïú‘Ÿ}+²«¿ð­_xL|ßzs)˚­˜}L×y¸k½f¿aªñ¸þÇ d«éiä1þ¯ŒJß9÷i%o/,úg'Ñ>é<'}EqÜý’˜‹'cè\àJzÂá ñmè톧ŋø_á1—´Ñ~7K+’£c®€’Õq6 …ì»ÓI­ß[›Â¯¡ËÔþÊ\—³/%½§°Ðt±3ÝâÿWl²SKßûïÄíoIöWQëñWÌûj^ÇöDí¹>–;âÍMá_“zýî°õüý¢ÿýªù:>;¦ü]NËeènâxqºEºÎ~ûmÚ¿Wy‘§z_ÓÜá<}sM^§3¤Êj³Zå†kØò°Õñ¾~Îo'zï ~çãv€{~Såïq\ælRêâá§us~ùVÂðB­ÇµÀ§Ó|c"u×?ܵiã¿ê¯PÐÖv|Ž#_må#.Mü›Ûç×Âk˜g¸¶]¬ÂÏ_±7ò»ÞoËËò=:ftpPí¹Š—_Ó&þ_qEØZ^ùt±U+ðTÝw[²¿˜Ûúv)­†ã÷—kk·;,qgQ«úøXÿ…¬”u6GâÁÛ4c–Àó{Þ2ß×ÏEÓºÙhã±Ü½¨W[… ì¾ù½ÊyÀ&OŒÒùïtӇyš“oƒÐð0¼ý-ý#6 bü¿ÙœÎëöTÊ0^L³'µð^4v\h½7»$ˬØlö0$õgª³5¬Ó(ÇÎëëñ¥Aӝòö›=ó ^_‚g V'µ_º°öw/h2‰pI°²Ù¹fZѕFçÀælú½6Ò^¿]9³îÚøýŽsµõø½ôK=Ý×[…¯Þ¯°ËÍùP‹¾X4ÝÕUô«ÞH´ñΕèsü5trúïh>þ/ˍÀd7=ÛLž™Ú¿j¿Òöwñº}ÿßôEúþF¯ª'ˆ÷/¬Ë×cZìÕý”:²!—àÉwà…Þ2ÈwŒ°ã0§xËYÿ­–#Úíe5<¿#ákGÛR˽{—ÿ>ßXAòM‘’Yöh}¶‘vß[û0>Û¬ÚZˆNÛw +ûÆméþþÛ¾‰æ>*øA²¯kÃH#&gÿº²ëJ¸êfoV^TÏýõeúò­+øõeá»·µÛúßçۇƒG·û{pÿ¥ŠÉ¡aƒ?S@q'x$!b’‡9Œ,ç/í„÷šÓ¡Ð‡÷ö‘ÏÎ/ŒÜpt\±»2Na°¼aôœNn&ý@ÎФ:OeFÞìW…Šyç ×-L*XüÄ^z^+o¨wgÙ&蕊pµÂ +ÒÇÓB’ADždã„îÕ!;Ō1Ô$¬Ú}³H4P/¦6ûÄ]Sç±Xl0ú\w4›æîAÁÚ}ˆ8g<´\vŶ“+[òlº´ÿߊ—l'eæÕ‘ñ\š6~’7á@xbPé_uÒ¾ÍßÄï»°wÒ¤ÊÆøn^YO¸¬[åÁŸŠŸHêãœ{ŒÅfÖ½Û¥Np™ 1¿ê9iÿÚރ¿¹¸íÑé®;t~*º?Ómÿêl9‡gþ±ãó'Zp̌¤ÛE¯´Ìtk/%#ÿ®óâðTן-ï|F(ŒHû‹½ñòäåO—GÁ!‰§§2|¾}ðåÝ‘_yȯÝåT-²Ám®Á~éwô3sŽûlù<ÿ%ÏýÕtœõèùÑí³Š­§ÿ]'+‚¸«rÞ?ß.|uÿüåϚ½ ?ž½ºLTú²×óðhýÿU]&.ÛªT~ÿ„¹â¥lyPHxXü¨/Ö®“ 'ƒFaø?ðUÒhè­j?ÊÖ¤îý#Ó·AR!é+!‰z‡ßZuÏC°eÇçô/„]ØÚÙÎZ¾ZbëäÁ&Í `f~ ùLöðbє»¨ß¸$R©‹¯ÞÝñ>ÁÕÇ:„)a`3È`(RÀvÃÀ ʼ5cU÷ +‚«Tn^ût{bÀdǀ‘¨%U!Ž×%Žòâ~:}dã ¬: +èPUj +äTä{AXôúM²h+X‚²¨+ŸAYt”AY„ō]EŠA͒qã§PWtXñÓÉcµ(`(àuíh7 Ô+ȋî–'nEó æŠý"³¸ÚÔ`¬J;倁lʚ~rÿÝ_÷„üoó÷V Ó:i€Í¬ӗžòªü7Qͺåz3óÄoóÜè:ޭ󒧤*¤o½0õÅc#FxPNu|ç\ؑSÿúq䢧tgE î]æêtæ!%ø(;~¢óžVÐV xˆŽޏÃ%q ð8„™B²ï&sZ|Fòˆ­@Åæ9eÏ\FýïO9nƒÍû&K'£.…› "ïà ÌýBÇôFæå;v§î-B“Qp斻vºl­ß9¯:-zkò+[{è¾®Ø ©¥~qEŠQB%”f ¡0Qæ&ò(oÓ¼5»°´´ )EÖ^²wÚáѳ8vw#HTFŽÞ †ܛ9XÀ‡8³{Ó¡ifL¬¸×ñëwÈ­:zéè ç=kPµ 7(9ôb³þ¾é +s¸±‚ñ9Äëq»ùɑdΑve¡Ivèî»Öh÷òsªIÛ‡ZŽÌ‘÷ãÀ–“üœöˆ±ðZNs 'ùÙìBFéÄñ° Äsß +™Ÿ†³h½1n؍‰y¡Rã¥d–ãxóçåyDOc˜_F÷”ìF¯ ¼ÚŸ2å¥éJjR*Ìú2ú.ú¶Eá>?y«¸Ö¼ÿã7‘Bópq³Ù¹¢&ÙÏã½!5‡™üvØh Ü&„B§êùÑw™ŸbòmÌòÞGQ?BZÂðLҞ˜¼sN “Ç£&*p9cƒ3ǦÜÏY9“cNYäV¢âø7º(n™ãËQ˔ƒ×FµàÞs…«8é§;ÌXÝQ%«6£–·‚6´ŠÓd¡Ý«@ ˛”bçZ>IÎüV!çbè‡v}ꋥìöz¨Ÿ%›“‡`ظ)83ÿmM¾"ð{‹Ç-λS.lÓ’‹ßf¡+ÉK½þ„€ÒcÏGc²ƒòsoâñûßÒµ­Ç±øqxñÃÙGäý#dcr¢ÇQUÏc£_ï-I²¤„¬ð¥úNö=ô6½£å¸«½ÙÜ/è5d,ÜY³Æ”xyXÀ൅²cŠõ#\Ã,fãŒ;f9ǵ¦)t9w©É1øu–¤Îsޱ¬«Cù—ÝÊ9ɛqgõøv½#À2„ô £v“–/Þo†åïoŒ§þóf·Ö­îmz,n^ÝÝ$,™án›ñ[¦µ‡ÀãÏç ´ª‡8vî§v§”<HYïI¢GÉóÏÀ¬Þ’’(Ìkðô*)ëÇ¡å L?dæn0=+؟6¾O†9&°è?Ùb²ñL.í£YvÙ2.„Þ“˜ctÅC—|œx‘Oò“9Ï[¦Æ?¼<•Í&sصz[¦ÚŽË:œ`]^б +J^$Ľð¢y3áŰøÉ·¡x¡âÏ"7Ó<ëX–dl–{/»¾°ìc™RØCÞ¦ÞÄð¥OïOÓÔD-﵍+_ûœÌÎLÂ'2„É&:¢ "¤Hîa2'0™ «€$Dgd ’ É8ãÑUPA@T@!V@RE +€`Tä ¯PG>ÿÿï¹ÌɐÔS«Ú¯mm}íjì.ÆÝ—µuvWVûZºÕØÛv~ü¿€—qvÞÞݍ»[¾»Ë.­²Ë$‘®,ßÉ_“Æ 7ôI}]æ•ÏAâŒàûAÅíîõóևã¢)µ.5ÇÄ]2n©™‚2ÿ¿×1x` +#Ê0rø´­ˆÓ!‰„8é›0c±OÞØehIé6–æ5b4Ûišë%:âl)vš[¢VªùY üšpd'¢åJ”¯|”‡œ¥_×káÕ\iLŸôì¶à¯;›ß|­pSÞïíCߕ¤”lš–p]ö¤­Ž“’¸OæáRã'@)m¾ê¨èbÇY;ª¹i‰† ºP,uSœ˜6>øK÷E„¼W$¢ë(Kíb8µ‡„K÷\ÈKìb8՗)\ב—@@±µÏ…À5^¯z™£û#HEO-«6fê¨pY¥>SP‹K“šÌXs]Ň4ûë/ +Ü£Lݳ·Œï QóÄÚ0žÉ S)™9;&¶¡ƒ7Œ|ÝlM¤‘‡8GPïeG¨qAÜl ŽÜ‰iûä|p<;÷òt +bP”èEHÆC}ØÁ~–UƒÚõ‚H1uðqJ¦í Í.Yš/æWU7¶26ú©»bù²«ï—¤ûϳ¤ÏäôŸÚöôãš)Ò2S i­)â¼%šå¬0ð!ŠÞàFšYÄå©bãS“±ð¥¶UÐ-Zð¦ýt¼42« ·$9·Ö>_r!ݦΆѾ½Èáï{ˆ<ã¹AÏ»^²j+{ô*ÔVáf‡û<5lšqP¿…“NU[&Ÿðgþû&ŸçGZHz]½<Ц“=˜4ch õ´µŠyÁ¯ûNT CN jìÅ,¼»z^2¿'šœWšoKa˜dàal'ë’6Šfév*Î6ÿUS”ui— ÷ èÜæ÷“<•èÃùZêè:{ÈÚæ¶èÑZ„Ÿ|ª4AïÐã¢ÎFˆ.(©ã Ê”&{â¦êÐí=â:9KZU;µÉHÕ£C¸o³p J4õ¹Õ%™LèQÞyæYÊ9çë,øZîtöiËA8gùEæp-’–’¶"èó$ÈϕOå.•Ì@âþ¸8y+C®ˆAB¾ºHèêÒyÕ¼(2Mj˜¾R$gø%œc: L”í´vQ7ô£ž‡Q®¥½=£¼ŸJƎò¸Uޤu i]ÐÈQÞ×FíG{<º=5 ˆàQJ¦¹…+”ä Êêì ”új5Äé'µnäj'2!ÂPë:{QC»Gëâ«ð2qû2qáÆÞÇÛBqn:c§ºÄudlRÚ)Cº'BՆ¸0väcª Ù_ÎJ‡zFÒ¬l-¶uA¹#DŽO|2`6.º-…í|íœsþB¬2„u`šä}treH+ÛIå£M 8P¡,Å£Îûí¡(¥ƒ;vj·ùÎNÜ|N°Çwᘝ Ò[ކ>,è9«4à ÇeíK‚Ï¿}¤ó­+\ù*[;å.`þrîrm­bªZ©è®]÷>³¸,ÿñÜ­­Hsþµ'Oüª{18'«û£ßc^sä×Ç®å§L|Ôêoˆ¼ãž¯}ǰü¸ð©ß~ϯüxþ ¾ö~ ÿ/ÕrÔ>W?„ ¸ƒøôºÿƖý^|+Ãû?­Asý8þm5cƒÐ°åófÀ,ó’­86zÃmëY 1MáÕÛ¯ÙTööæÞ‘m¿òs/ñþ{†ÅáΈˆ>"!tDBøˆ†DD=™›ÁÒm¬cPÚÛ­p¸Œ[íªÜ^&hv­­P6½¤î ÛXցµhƒkSÙɧûR2äڑ—Ãá¦ì¸²mf»y¾_dôók·Í/×­ +÷íù´9× l9ÓVès¡­ð㇑æü– ƒ’I‚ãžÃaÿÁ‰‡>(Ÿñp縌‡>:'Ÿ>Íϟœ‹çÏÌFsçðbnÄߓþ.ìMýØö‘7£Ïнi‹½z&ÿ®&üŸñ}q7ýq5ðä×'ü^šørkãI®Oø¼i5ñ§¶‰î¶EwGù}ÑçÆwDßødߓþ/Ã&ÿÃ&¾€šäÿ‹Ð_@Mzbk“þ.˜šôÇÜ¢v§æb¶§ÃÅíOoµ&ÿxMù?â÷„ß‡\Ò*u¶.qñãÞëÛ°[í™>ÃþY³ÔD…oöëN¨cz<í$‘ö¹ß<égn:¾¦û~•¹I_¯-‰ùj—µ +¯/{ä/ Ñ߅ñüÚɟc_¨å¨~V?²´æÿ×ËÃ/™Åtnöú8ûçæsÞ®wͨáÉ‚ý—+—ú¿Õ_ì²Of"$Þ4ěň•öIþ¹»ã˜Ù¤e M|Û'§4±ßº.ÿ ©­ÂŽáNN¿>ró oÞ°9m@f¶ä³ü~ýp»!þï÷Ê2ç—(ttqÑ!ÇA؛áqpÒb|0„â¸èPãŸðañgˆ@øD>!ƒâÐà|DÄP|FÃ0ø‹‡¯”§«Èþ'äc‚¹ƒÜü)ûþÎËfvë.¿¢îâ7\~ÍMÅÕÖk!мV{­>,–'§òº<&ÖWÒñ.}¯}9¬ïXê°8†FSÓÜ/ä\wþŽÕäùû]'AãºÐ~ùËþ–e¶¯öR¯ú¥<,óGì`a¬­¥5¾Uç-ïÛä/~[YAÕbl¬´÷Û%½ø½¥×ÜÇ¡´Ë`uu˜Õ”W¾JyG“ÆÝ?…ÌûC¼ÇZë‹$Æ5~9s|eÍ¡—6¦\Ÿí49é?Ú='Ù?Ú4zwŸí çøzŸAqËñ¿†½Æ¦Cåâ?v§§Ì'¦Èjð~ä6g^—ýuqQÑþ„eò‡aóçùÎÏ®òå¿eғWèÍÞs=m>‚/éÙq¸ e>_†r^õÝdu‘¼oS¢ë8Îîx[…u¾SG”ÙLÝ#s¾þOäì¿]¶ÕÖ»Õã½oÔG¾òçü<Vs&ãʒ{‹´víöëŠéœÌä;Õ ·læ×‹­ÔQg©½þ§Óº ›b}o}Õ`»Ì­ËsôÝx.ûÎÕîßi’¬Öcgd*»GÖlÿÿàæöÁàÇêg­'Îý\@~¦xûàk~êþ@¯·àèh[hd42ÚSEþ†þàqÍo§aŽí†Ã—6v0o¥!0É5{Bk†Ô㬭½7¼{þŠ'q3¨ý–~þÑú»u¬8èÿ²Ã¤ÿ½ž>¢ ¶ipýêÙÿKX¡•Œ]§†…˜Ù»›½æ5@^a;NþÉZBD:Û9@S4—äJ§û€K;èJ‚]‡|^Žä~)í6¥éWk†Älב§QyxfƒÃ{CTe]q{` {¿ ÍÄ*×tžÙn2‘n`{ŸÑU9;5Ù¤™Ùö!#T´SÁ švn*¼ñ™>\wìBó;&Ïn4ºE´’©eË @Y¶ëêFâs³Å¥I4ÈWnk¸dÈY_Å¥þw¤7)ۃ tvœÛ'iãíŽÓ®p˜P¹Švßg¼nŽ£†’:? “iR¼µäh¤vÐ:M¼Í"öôµNi0 €ÖÙé;V$ê K~ý…¥Ø %ÛZ9 ˆ¼K2´¹nEl‹Oh¦þ/䄀ÿ>¿O¡vž$u6н}»OÙ'^úeëߌ{õ/z–bG”EKŠÕ¨Ð:ó°¸–ôHÒv«ÛÑä;'_̍5Vôަ ;5ú=Õ¼†ØŠ†î0»}­—kl·D'cþ//‚ævĘÚ×ÕyB½žh¯*/@Wš +†¾[Ív<íì>S͊ +-oö~ǝïû^u5ç]±þO;ѱü^w)ôÿD-ÛûžÏaö¼ûìyùˆ/­çý>?üžïôíyÔ9¯;ç!üžw¿Cñyߏý½®‰êIÝݧ„däFæ–l?¸L2`,àD©nû;6ù© °R‡y‘'Yē±i`’¤È/aî“ gsIÚÚ\ÑÎC‘ã“‚o ƒ¬i‚åv.*q¼oÓÅò¼MÜ!ø=­Néw.(Êr‚m՚æë¬î^8`À"EëÔÕñlA·ëA{æRëÌe@e¿e&lYM†Ãa2æ|r¢M›® „i¶Îž: FM|+·Áˆ–`—àÈ6ߍ¾aOQ>?Þ8¤ûa#ö„"뤟N¨1ßÑU£”Ë›ï$?s¸²à þ‘?úRÛ¤jàJ´F°ŸK€@{Â$/uøÅµ “¯Ã­­PRYuµ¶à,º[Z5®ëks¤õˆÐÃk$Gׯ‰[[Å(Fmnûˆ¨þ՗mº¼C2 ©ÜÉ"sLìâOð†à/}l6­çˆ_øB¹ÛêK_A€]՛Ò.jÍ‚%¡$Çn’{\W@·×,¶Gþkd9kYþ#ÿÛZϜ?ó­gž=jÖy³Ö­gíÏå\ÿ±`Ûæ,ˆn×ÿß6¦ý¢ãš_¡#¹Kÿ&¨lÿ k zñé®·ÌßՉkÛt]7ÿ¨âî߅ösGN;3îÕ¥o²¾ËÏâØ·¨„;‰¡„û'ßû÷?Yã°»³Ù:Âë%9zë%9zíæëóëíþä7¥7Ê6ÿTl_Uºqþ˜i\'øPé Üõ  +>à;® ¸i[h?º€ 2íÜÜn=y¸?Ç +³› +³ýô`5Ö(Ûڙ#\Lñ„‡¿ŠÈq1™æM Am:2ÒëZ=±_¨Zêh#0ŒÆÕ.à"s# tIQ×Ò@Ê NJȡæúhgxË=8Lo–š×!“d[rOÀ 9¡_Š&¼ 5Bµ‘®>ñ¯UŒ ½Ê4ƒ‰¡Þ:FϨ‹wC®d¨'ºÕê¢"ªht Š´®«ô–5–bѵ‹d8V¬a{Z]ŠØR¸q[%dNÑ¡íx> ù錾ôÐE™Õ²<’w¬@?+ŽU|ùCBÄ£:È  ,=Ëb ÕÀÂsˁ\¹&i'J¼:Ç8y%ǙsI~B7¨VÕ$ånëà&Þíksb:Š€w«˜3×àCÇ:BtUNí€ôiz%}JYq²Á€w¸™d M0êzŒÇe­ *‚ÀgT9ÓÉn6öTh{PE²q|£dßvk&ûÆ¿PËà„b¥á€¤FÎÉÅù"’µÚ Þd¦’_±R0»Û™7¹@Þ¿²€ê>àN˜(€Å‹ 'úSE²ÑTNû)·¿XPŠž®{Òr›vñ¢%–ÕÎhÜSõ.$¥“µ秃—6Ó|jÏwéÞcKcõ£ÉH†¿ÏPGÔWå_/ å“ÈÕ¡¸'_¸ª’¶\Ó%^JUʼ¶6r¬=( <؝՗@¤]û‰ª¦ôq? ³Asà·ï!„5±Ö².¸Øn˜‘Ê‘ÐÅ^èÌ¿O”t3÷†åˆÝÚárÄ(KÜ48â”AЍ6Ê4^b£[§(D D|ŠšèG/¨ ŽÀO¾[i¡ò0?ý1ázZVn^у氤ç¸eüôGw‡’Ðo?Ì`[uz@ò€×€R ×`ƒ{ê‰Â`o¯nìàá«T¿+‡€êŒŒ HzA@*Ÿ² {–#W=|L̏³<ÐmyðitóM¦Ø$¾^à°ÚZH"Š6Ѐ¨›l¨4WAªnÈ!‡°ßpß}°˜(æ¸gr¤—Ž/‚ì+÷yaI»á›i0Õp¯>=ÓåèBhRI«ûßᶛ•Q¡u7åuÌZûb£¬!АX9bº!Ä Yü'ØÃ`ٙ4«ŽTüy)í¤žÐ×¾+‚(t‡ Ö¶l@˶Ú +—bC0rÃXÂ֑sçGÃ.UÑÆJáDÝKÑe(¹©¨ÐM;x€£Oî2Ž2l¼y[c¼zP½j8»ÎöÇyþ"ï8åȍû;ç õ‰´ˆã`íeWjïW¤Šñƒ‡‡Œq{k ŒŸuÈ0•ÀÇ0Â÷µ@õJ2Ë[r$@rØ¥¡ŽWQ´ki/CÜO-•$UÔ0uŒ²G¾Ò—“Æÿ¡ö —ó>Á²ø~ –¿|Ü-/úþß®øëXØØfŸ7Û ¸Ó›îÊIý”töQíY,SöQôÿî—Ü-w€›_Íh'ôe0Ÿl2ÐgI/hM2ÙsN:Ë}Ážëd¯d2JzîËÈÐ ”û+IÇçL`=‘ÿüÁòóaFO_y¾7éƒåìþôÙbý½Y(ýý1{Ÿ7Mø`ùz{™55EMßæ5_t”z|ã›W>ûæÉGÅ×÷^±ãƒù‡ßóÁòæàmÍ÷ÍÁòÀ¢W+Wïò’Þ斦ë³p5Öî)jV)}Ö°o×Ü#ï(7yõô½-I€Ÿ½+•1ØóŽÐ®žaǯ]Â7‡º–­M;ׯt®ikýØû áZÁ)¬ÒT3 &äe¿RíÐ Ž{#„¢Ä璩<ç˜!R[ØPgòL› ›Ö+%Mƒ—’l@—Òž/ðß×q§=ì´»´â¾8 š4ÖrD×Y¨X éÚ)#>¨$D¦êè1>ø&ࣔý¸Cá¦¬­ÿÆF1Ù°Aò5{]9ð0éhGÃÖ!’›{yeEG:‘ÜOc ‚ë#ªÝAÎE)àە°@^yÊq;aIkÁ2›`#°q“lt¬ˆ»õ 9êp’ ÷, ¢—¨Ez·EØ«£Îě­ë²x®•ÄôrŸA@ß9ÖÔÕܞ䤣AÈ=ÐFˆ+öè1ǞE•¥w3¨)rŒ(ù?êÕÓ +ãÏaíú8­ÁFu&hK‚‡Êq³¢]¢ ’v`‰1ÚØ3bžÔ GÒPDÆKà ‡‹„u_ܰ}2›BN‹q<äÙr#×È©yW·$òŸ +HÉΓ¶ê°EÀg䎨ÇÜÁ ÛVéÕïê1|pïáXSçk§J–ÂM, ·ÃÓ頇 8z §’–ÊCѦC‹§ N3š¦_ž6b¥ó¨0¶äte8*aÅ#?kæéÕàánŠèÜ0@—Ï7»Õo`kìç”Ø(¼1Ðoé“À ÒRzò\À¦ñ(â8 +›á&¯N>Ιÿ25]ÃE|yÓ¨*¶‡GéØ=ÓRe‹¹ÎK·¼l½#ÎG)¶<»6HäÁ8,S,Š9O<²b3„õYNÀIº$7„äiòՋÕñÿ†HDTö ÈOnk²K1T ”€)¤UŠ(^¼Í b‘)ŸéN!àÓ«‚£,ÄN¸QÒ{’o±€Øfò§ªØe[^b-3ªuou¡N´ÿþ¥ô‚jy’tŒ*uu5Í&dv(å;á·øó½8$²Ôl¤ÔÖp¢˜À¤¢¨Ê•˜©Û‘‹Éqà +ž –»ôO9\v³I÷ „ï$YÉâ!a™Ô„в8KŽˑÉûÛÛiÄþЍ&OŒd¾²À».^šèËÔ¥^Nf®^’Nr„œàåç3ßV/uúòö¾N^Ìã]$ÈçÕ~&¨îãm‹ËeÙ¦UÏz\1Ø8nü¹x çÒÈå(•Ëê¬rùãCí3«Q/º_·/ªŸt:+e갆&ÂÚ臚#&ñÀ1Ö}(O +K^|*bá ¾.^ÔñƒÙlBÙ{Kñ J^¼E)ÍÉ8Å3墵ú |q»’ďæPBîKԝIîn€©Ù¬tù‚r& ~5ßhÏ4¯òþwà‹Xèõ§i¹Ê=ëÇÔ9b0©ñ¨­p)éy5ꛅsˆ y7]PúÃ=.á¡qQe:€æ=pÀZëºËûka»fÁKQß1lŠˆFíÙ”J£ÝêDO¡CÞ§=bŒŸÝ­ýO(=©Ôªú?9c4ÒӞ\ µWW{–d¯ƒu¬•fp— àU +½lð´…Áî:¢3 4|=ËH+Ïw¥§ö›ù¬àÎÈéu[“UpžéÔi$œ&܌/”{쫁8óËàü³ +,_6ää\<ê¾cN÷(:ƃ¸À/Fˆkriv#EóK¯&–ðçÍ·©©,5…H[œî…få43Z“Í\°È &Ûeˆ2O_Xl1„6ºâ»Ë‰÷· ¼<è÷ʊ-Ðdݲ'ÞàQ|W^/)ç*ÌL8Œ‹Q‚Ï¥Íé§zQÊJÓ©†—*N ±+‘P¢érÑ _@v1yÔp€„üžö’0²°9Bð7`îY?¾}ìiZ±LµfµI—ÌBF<¡3 +ÿD.bFkƐ +ýFP¹"¹«_ Ze1ꃟŒ÷¾eŒ–ÎäµUfò€RºãÊ .5˜‚¡hlõH­€üÄ@¬½òà?6°& |ô~ξöÇ_øc–'B°‚úR譄´jã…ÍsÌl;ø<»§ÔºMs9þW–×CcR +}Z¾`O£•ôÕ ƒãÔ©Z¬>õyø\ïÎT%¤˜[Ë(ç//kܼ¼ÙŸùmëÊ $$÷ZO¬ùëé¶ÄfÌ\bÕï|ZÅr1)7DŽÛ°j‘&„æ&‚ ;+!<ÅIά˜Õ%ú²ØäC¯rw“ASUò%í¼V4K¿x¡æM 1Ʌc¯@¯”ÈØ8>!NEüÚ!/ü›ÓWNH)ïßÇTÑ+­°Ì톘¢Ø¤S`ZXçFP' #÷é[q ébŸX›²ïqþ`‰óªDE §pzt’Ç +—OsìRN·…$ɀ +ÌV’q’¾`úš§^HJÉ·=]¿#Ë.ÝÁvë•Û³7Ð\…+`ªÒ§à`’úÐ Ê'³ÀÖIgãéÏa +;†æ•òxº3Õ̝…2$(\ŽQ·K€2 ûº3ßâøÍv9¢Ì—{ޔ4*À%&O(¢R2pö擯Ž}ЁÊMúß{£}-ʞâ4ý¦Œñº7Þ~Çæ²²¸¯€;Ž ÊàDØ54%~­T=ÄlÑóÂá1ÏÜ& ÀOšÇ‹ËGóV; ãV)ßFÀZSCâó(‡<Õ?\ÿ³Ï ŸÁ?súrpb } P‰q¼ E¬bÇlý6x–,Töå‹Aœt]_Ÿ#F¦&×`1-fmäB ÚßyЋjÔNø\I‚ŒTkWið]pê@CG+à–Ñ# $sž–pÔ' ¾´)Ïa¬7vº?Ó%ßµ(­¤ö\õ(%6àœŠaM®vø{}tõ¦T.Õ^à\Ôõ2¥”’ªO7D¬^*ô J^N¤) +9>Ô¢‹ÍÉ3酸fÇ8®äµ©]Xdµì´G¾¸˜*‹oÀ•€äÐ^âWÆíª›!ø·rº&¿*ü0[ÍØƒx|e;™S(X[e'$„Hٚ¶h!'¦Åþw¶‡†€vÚ¡g©µª3£¶õ¾Yújð…ðY+_Èñ·lᆠŠÜ9Æ +WàYbÓö +S…|R“ݧŕ œÄ"îHCÙÇ<ðx mÝIeÁê _" ¯÷ÐáV>êÚÒVêÖ{ÙÂ=íÏ4l߈¯{áÌê´SaL µ|@hâ–MLÞ*" +a,ar» 6«Ùˆ ¼N~ ‚eäKz9çAQÕθ ø2.(8èOA‡Hå9æÎZüS~µð_Ûh¶‰'½²mÒ¤ð¯ÙØçe£®¢Û/'’`6p¶\C~BLôh¸¥óz4RZûC*nCva¿ˆq„‚Ço¨º§4#Žw/r*|-£‘ÊçÍ@jQ¨­ = æ¶Q§ \ž|ºÓ‚‘#²VÙ4ßSy q:q݃ñ­¨KxJå7„r—LˆB»¢A)KAÅ`aŸqn«qw«3Žóœ¡IÚòA!í×ìÁ¡CˆëٮٍüµÜk!R|„•.³AÖtO]Y)Äv\XšÖޅ>s[5êa¯Fs"‹(ušޖ­ØrÞ9»ÞècӎÐEÍz0q²v[òóÖá*Ÿ«¥YÖÀ>eâˆóY<0¶o0ðDôêgÂ8½}ic~†FzðÝÇrѝ¸GQòqÊðÝøÑ[ËᤗŒ_ '% à6sÊ9>(oG$ n!™Œ¡'®Ke½R£Šb+У]½£š<ž¹jüBÈ —ë¼f]pìûù}Åõõôpê´8Öò«÷†m…žf‘‡^«<?"LË<„ âæ‹õµ¡Ì•RL`çsƒ¤H¹ÏQ ýbÌж^Ôê´§«ÂmTòFS±‚ˆhºÆ“²·Ì̓$$:A˜°B ¬5ž`¬† +ça˜Èd ¤A1ˆ +¬3@IY“§DU[T[ëço­¶Òžñ Ь€’@h ‰P_+ÜpR£ Ÿÿ~ýÿ½îB‘®µ·}¿}~÷xÄÞý»¼}ào x{ÁÙ6¶É$rE½Í‰5Où Þ«˜È«uk¦]˜„GóiDÎÓ þÉŒ‚Á|€"|®çáÿÁ⒞,xŽ·FìrÐ*p‚Î'Ý~D˺ÙÞ-tn1#^)ׅ¦ºx·³Õ‡+"YŽ/ÿ‘DA²H³„ÓIuìÜÑúd»Å¾_àLV áÄ­v#¾óg#x)TˆÔ®Ä}/8X ýXH±צeŽ (ãÂóf~rb¿æË¡*yå9Cِɕkœ‘apõ7Í<Àúdgÿ¢ µÄ×k˜³µÊ’kˆøĆ]˓æž_ñl³þ1 +Vø È®Ózç™ÍöƒiÏ»PK;þfè‘ᯗÿ,Â;pèò÷£@¿hpµ’7ezsâFӺǿ„9 oHåú›ª'1Ù±RðҀjÈþ;2ӈRW7o;ÿ>Þýôöä#߈…+W æ†@•DSu8øF¶;«uPh®)¨¬¦:<ÞX”b§ší—'XaœrÇZ­Ì¢‚_Ü< uW›nÒCW›pÒïC›˜ ±;̳¹0t¨³¹Au.ðî̝Wå>Ð úGßúýå~ßö÷ s݈hd˜S€bô:žRÞÈQüg‡Qǟâíhû©²ŠÕOˆíR74W¶ÕíåèžÍÑC–K•d•]»š¯ˆ>FÇMí( béOj†¯ð»Q92¶[Já e½M,‘8?9Y~ ùYxȸväRï,*ì4¼¢ 1–\u+^Ë­ç†B¤®W®`·â¬ï„tÛuñ EY$ÔðSb–­ ‡eBœ. †}lâç@C¥OÞülÐ jPkÃ¬q=ÞûµTû-¾¤'Îêו{¶‹HÕYpÒ_G6i%"&å£J6È֎†ÓQ×èUHäÐe8‹»Hä2AÖ);…Ü|=øì„tÀ77MOC°GYùEgc’ÊZÀL'ÌÞ7?ô> ©_¤—Ìó‰ÄØ5Õ´â\HMq1IáftRÀ³)»Úv…™ÂæÌÆ:cf1À11‰È`0$_ÿ ?j4–ÌÊC’,†Êʍ—ŒààM°$…’Î5Џ‚ÖB ¦lŸ@Rgö +”ç‘¥ +^ö½‚c‘’ÅïÞGΛÚé<¦^wXš +ïb\5…To–ÐÓÔ¹45úükFŠâ;CCEÇø чª»0æù…,öŒÐ¥ýr¢D±-…ÔTŠåÝÂåîƒk ‘Úwm—`è€Mg4cÞYáÝÍÃü†á¬üކ;­Ks1?g·-– +)«Ã‚0 «Î'Dš— ÞT〻ëXÝAÛo+2ø"Ø´*a°Af~x‡n³ÊÍz/¾e¿9„ýÐ y9]ÖcÊ@lê••á²]ˆí±88£òJXºƒ®AuAæH£,Úø}8„ Û¯ØtÖ/pÁ‘¤ý*¦åm”)¤¢á¨ +Â˜Š#¦ÄÙùjlMO‘%ƒwc¢Š 3h þG.ÄÚ~Ȇ¿t⚤ºÉ€ºÁ½9',¹ ‡s‘“¯M9›Üÿ^y¯3÷p1ΘD¹Ð‘ä§²´ÀH±è]þ¢ óî.˜ÿ–Víøè\¬?öuVVýþ:vVßøèÛ+`1w­ØBìCi†âÂA·‘ïáÀ}.öHo¤QZBëÃE1øìPž-(!Za°æDŒÜhÞî¶Ê‡Se$5ÈÔ qˆ]|—œ SíÚ÷ðàb€ÑªH؆rµO‰m/T{ +·3fìKn'+ƒ½Á‹‚”hä>x.Ÿþ0V‚˜ž1Ûrzé®ýÌÏB!òLýÅ*³x}PÃ"zŸ¡¿_sœwý›]qð,›gÈØìŸ»ö3]1¿çêk ½£˜J0R‘d;|YÞ·2Œˆßë4‚÷ŽY,ÑeÙÉV×_ȆSdq€Rô)m¼v‡#¶4ln/b·Æ§óʍr{ð×&Û ÌH­ñ\EITäuËj­ø –þ(Ѝ—­{Úð66 ¨.=q¢!å\}ï…¬f~°{Ï^2ý-y´þSê`¦(ˆxe a”1óÊÄâTiŃ敏[½þ  è=¿±L§Èû©Î|ɐÁMX)xW’CBÅrüû~‰ÄÛ!ÙÞñ:ê@C=܂Ià‰phâ33˜R¦ü|*š§ˆe7*"µSáNA z9ê1¡¥ +˜•”[£$Fä>Š¥’×r¡Ñ‚œœ^ º YòÎósøt'¡Eò•U› +òîÖ÷苸 Öïaá±™÷îø9™ŸD&Æ¢áZŁ9Ao’†H¦íjÑÛ"o[JWx¶ƒ©.„:âÊ0SW6Þ‹-ª“݆âsRwÖ%«Uºê)-\J¦yB õËNÑ3åMÜsáÜ6·['BËn%:EÛ¾¬‘ ¥FÆùÜÇ HWLÍL] Iï¦}´6Q”_Gò -‡´ZÀ6Ö¨Q]îöZɵÄI£=ž"¸ïyÓW€˜Æü¦Ó |ðµWXOï†PÊezÐÐ|®;1®B5¼b™ ¦¹JO¨ë† +[ò“–‡êzÀ;-¸Ài™_5³ü7HfpCGpÑñ¦KŽ˜ñ lMr>´&Ǖ*¦d\¡`1 tJL›â +¥¾®”eãéÀ«ÊhPaÖшσ¥ÛŸ=Lt|áEtë¿Ò”kñ‰ÇÁÿúRJ´¦Ê1 +¾Ž;-,•$´ã֒•ËY;Œ‚è}iæí2) )t7¥X®À[•nÁncYÐ ³:§~ÝèA¦(ÙH mT ¹»YìÙ;­.|„Û\=Ÿø^¶øÕõ ¯0ݑ%¢«JN× Š[…@Tøü^ ¸Ñ_N^TbÜ*˜0Ä*F`ŒÔÎmö I?ðîrAÝ%ñ§Ó¦ç +<ªj!îwEܤ¦Íj 7÷¬$ C煖¡ß4ˆŸã>Á ö.U0+±Ã¤*ĎïqÇð™um|{àUÿ“Áqíó×c1ĺÄãÁÜyƒ|þX‹6üI5« IlÞòµ8Ôø†l¡À®¬ðZô«fžH'dJ ¹8|`µC];oÄö LûA”¿: q k#¸ÝÖ.V i+ÒvZþ ÓcŽvnµ9°b§@¤f)Êѯ1x"Öd?vÀrÃ÷k­¬v+ï”q®Ñ„&VFÇÚKÒnºy¤µ@8žå§Ñ”x°dM|±ÇðOÇ ¹ëèd)²W$iO¾yý’5ocÐÆÊ•f¬©ÞØD•ÐÔcZÛ9ýøcûí²¦nº dyÃ}öÚÕݰrÂòŽïe +a8½m™½hîBBø#÷Ùñ\ð·ØtBÃé„YÔ SïÏ`Ó"”Ξ‘a*5Zr«¹I"̵qF[î0˜ØQoÿ€=6ܹtº2×þçèœxÆÿ£bêû£b×Ml8…3ëÄ=À°Í/ Žb ư©'çJ¬Ø(ìU ugUñª¼3+Þç°µÏp¹³F8’U|b#w%è¸%×ïÏ Â†^‰TÅâJzÅÔ*8VJ?kWR¥°©ã͛øª¥°™#…õj±R©N‚¸ƒ%ï1ç0xD©}CÂy_ò$8­JXO]ÝP;‡yþŸ.¨´ï_í置ꥬÍúpcëzoFÆÏ܏­qóè‚ {°nҐZßÑ3f=q‡ÑMÄÑ ;?&^%\bDÉ2™â‡2+ŽHöîTëðçDZÓ膞a½ç®&/O´/¯DÂAsç>$©­WJçYu ºƒá2ÑÍSõ:e7ԈØV_{ZH¯r4ôÍ¿{ø— ª–ôGsT½‹˜žìBœÍoLY‘ê–ëg ú{]Ö&¤Ë“{çµÝÔ±ºnê]8¸¤ øïf âßÛ¢oÔ:N±q³8Æ-áÆ)ÀÛ{ñIº½7LtšÔÊ{éz¥º +‚öfY1 U›  +ÀNPj7¬+ +Aé³.aâ¦,×·»Ôà4˨,/Ò7Ó÷zñRc¤#(‚WvD–äàřëMÓ>9zv8«öƒà‘¿7üÒb¸îE¬®+Ì[zD4h .#M(ã^ƒJl¾õA$b°/ni”µ_3Yc¨ÀÉê-ÔK±Ô/Ì%èàï%n€ÕŽâéµ3f9 w—²7wp-UÛè«ÅÅ@þ'¬Û«yàô)Z=½ÌL ¶@@„‘ƒ;F Ê5¾IO}æEôÂ|ÀWð¸ð¢¯2Q¿žVe{ß‚¹l=Ý*ýÑð²dUv8oUJ\…ù5 Íl# UªMv éீ¤¸£@ÅÕþ¼^—õŤlR‘ŒC7ˆ¬Ùœ6’ÂÁ5uO0“C¹µMû5Ãý´Q‡Æ‡9&-ä,-Ò›îêF;ê~¥ÍØÏ:~TQï‹ôÇOd"ÙóŒåqèzZÿV{Älxã…`ŽÚZJÆ2B +áÍ®¾ôT\ç’b‹ÕÅú* “§!g' Ô­ãýöRê½þ¨þ™CÔØt‚’+{\.“³®_ЛÞ3éC.h °ûîÒD’}éƒW®êÎXÅpYÁÂà8!Þì/? Á)&ÉíŒöuWMûÓJ[‡øË=ǍfÒºUï\[è¶[sñŽðˬÒ2%zS݃tyéì||,UÜ8Ö³ø–\•¸½!ڕ¶PºPr¬p7=ÈIQäôÄIÿcÂÀ»Տ27´x€2“º±º×mV·Â{¯îÍ/L$J%Ûb\׍ǮҨóEC˾á°ÓxЩÎ1ùM‹@†‘ÔÐn–éGÓNýò» œ1á¨âC_Ô¥+± _æõ²tGÅO,ž«*db‚¬éî41¶õ;Õ¾ÈÉtÃÄyå$òÑ:C‰²,𠭝?Äÿª­4ÔÚsUk-å‘õß"qj/×<¯ù ú›HqC/­^­?{%ÈúZ’o³ìˆSKVg·Îš2ÈÎ3¿‡îÜæÀ|úé¿?ácÁ@Ïxâ»(%l¾‡cÊ=ݏ$–7ôëµ\÷õÕV©óÚª_…•ŠÉÅfrÿ y©¢þeÈqâÌ¡ZƒK‘¬¯é-ÛÎg(ü«SôlhW.ô„õâÏÊÿ`ó½q±èÌÆVîG•Š!6ßr½r}¥®2P‘^'l·Î#PfЈÄiØÑ ÜîǕŠ¢!®•~æ×þ%ùx’Þ`.Q…®8 ë€%‚_ñANëk +åux*A"ñÛ5ß.©K«®— +åpµt“OÎép·,aL}! ޾ÒáúhU*—´ªPÓ7â—_#¼[ðôcK´#׎]ÏH|rÐ(U¿ž"…ˆA5Œ¥Q×­à.¾«y;¼…Ñ‚ÎimÖø„aqãøE¼)#Ž ²¹?¯Tôú[0 +Ö .¿%à3eåïj®Wá^Q±Ú¦ïy +nNj¢º³ÏLJ*“6‰óø³6/¢)/Óa¢HЮ¿wŸ0Á­úêé®J ¾¡’6#$åUhu]‹Ì'Ñ  3µènrÂÝû¤lvB9O€ÿ_܃øÑxF-ßfㅷn¿_5HýM·«Ê¾óPvÖ;ŽªnÈo[è/›~è.õЦ Å•«Zùû½œçpsMôH¸$ ;ß#¢ƒä8cx=hfa2†—ù©|ñÕ|)¸{]ÚÏ?7æ–Yåvb{»¬ÞãØÿS¬¹­{VíÕXñ¤@Z"õ§ûêÄ¥ïŸÕzµóª‡…WEιµugþ—Ë×ߌÉ_S+xc©7OÛýÝ;–z¥Ý/_5¨ Ò*ãè£ä"g[´…¡iîq +f[‘³T5 i”õ†‡Q®Ç4«4Ð-¾î{•‚|€Ûà Ò«N&¸Ü +Û(z~^æ?bP£½g™‘cßî.P’ÄÜY¸klÃŒèG¯¤mYd#™ìÖñ5³‹MÈ, +Ø(gé;ƒØÃSqZô%báõ¤äMüįt;ÓK6ò¾4GMWOÀcN£½B˜~"÷ä{j¯ŽV(bYA\¨8Üpø‚šÝ*3OõÖ╘Æa”o²7÷“¨Ã(÷dÝ*6ïáùrn#x|ú´’'Ãaì¦aÝÍû $ˆ?³¡âu¯Â€ÔND¶fõó&nj{u«Ÿ4ʇa](þ,ÜðÖÌ|8­Aþ¢‚8xÒ+ +¢[Ê÷ .‘ö,X/¾õ#€è;³ÏuÉњ/y®°§õËï_ŸxõG®Ú½wIoiJNM×rÜ¨Ôßrð¬ D N&ìݵV÷©²úP3Þ>ÍáÇN(Ëc>FÆÞ +ñ ÷ó‹“2èµ;葿·éOy£SÞAŸÐcÖ'”ä GwLR`šJ{ ؝ë:Šg¹ïPi¬Da@“À»a…árŸC½«ÏÑ´…Õ›årÕ~ŸÂ;©ç¥ òu_®€ýÞ2U{ôV<{]X;¸¸Î[#I(ðqë{´±sǑbœ +`34IV.%¹Íèç!Mã9fƫ㌱ðE„Äg»AŒDØ~¹\CÁ\fôރ¯&_ ]ÿh…!ƒ=-3olЃlIí€trFÃnõYŠtƒ÷»³ïôåèø12Qi¥è[ ŒºÑ¤Ï¿ -cUl~üC~â™Àf˜Á~ò䣨=SøœÖβـòÇ4t¯þá^‚p9¹Ìô‘¼Gy3¼†(®?9v]`œ}/ÃÜ[Š"Ç'X¿á¯t¸º^®mJù +/ã»ä?œè·ù)” +f‹ÁÛRÔò$ˆ ű(î ³æ'(?ÚÞ°O³3¢ƒ+®'ž€°\ðHÌû¶3„^£cŝ¡á*ŸÐ$ã§$UÞûpA郥ƒGvF³T2H )‰äD?^vîØµvE^u„kG¡‰!Ê1åg"²z ôˆê ñàW쯿’ >2×$ºJ ø9ðS•¶W¶M99œd$ùïBÈ·µ¶¨>dà”-N¼¼°>f¼Ÿ3¾‘ jx*“`¹QD×>~ï†gÔ#Nâe¼!}MȔn²yf_S ß j¸ù–¸™¦U9N/] êÇ¡áŠn"eËd#†ía4âA9Áõf)œô7’˜°qt/ÖË¡]® мcº]fŒçՌ¹ö›þŽ}éL}Ž}¢çä¹÷9™û\ûy–!à·’çׯnD‚3†î\ï¦';¶ª;òK·é;v\ïÝބD:à½Õ.çßTD(?¤D6l`Œj8íª™¾ôᲜ´J¨×•ÎŽè©gI›–Kª):ÙÁϐsµLÒ—ƒtŠš šÏ¼@ù +²®±5$ÕÓS’Ò›Ðßϖ"”µq×µs–n<‡’_SÇ-(e› ìõR=0B·»ZisjŸ!÷ …ç1“GÛ ¶Çµ¼7<ˆ]@YCgAø2W|0]¾'Ì7—ÛF2.úñš…Læà̳.ëH3ö+ÙÕý5¨vKpÑ\º+%´Q*’eyÑFRˆ[þˆöºbøi©D¹Õ´î‰Y¸>#¢ëȶå-àŸøÃþ¹o˜m‚rº»&ÇÓ&n÷yžpyÛ¥¼±ÒH9T¹ UMø;¶WÆJ’M,‡ÚeSï(wØ$zHK ßÃ.ÖBw¸lR _.@<¤ùê ¶Ç.ke¹­„áûkhዴ,µÝƒ «8™¥…°Ä×kqÝ “ŒRçF7 ªwhÃa×®¨ƒ|”OyŸH9eZ5i¶YåwtÔ »5œ×aÛW¶M·Ðq!ýÏ Åá_ W—-äx·)­9`@Ôl)[½ þ¢hW^ûf#tC¿o„‚–ü$yK}t@_‹@R•ËÕœG0XBÊ?ÐÁ-@~_Z×îú>‘áŽüôzñ .҉¿Ð%d¯H.!ÂÍ ÖÄ;î1c7úýüDº?àOÝgÜᄆçøçÇ΅š~fžf89™¹›5ù—fy˜æ$ngª¿3‡yc™Å‚îTx~;€PοKl],ṟª±2 CÜ Wxà6Î¯Õþ6|x#p†úüÍ<Ç¡ÌÕñÔAë‰D¼Êè¹?PÐ`ÎôÏ- ¾Ù(s)Y¬>Žª æ®´FüFÆòEîêóŽv„×l7ó¾@z_[Uç +Hqì¯qéHò˙es’2VÒÊà_GÞ Ô| hÒ¸oó0E8 +þd³Û¸ š•ÂðHD8¶—݆ˆh/K›•Œ–7ÇàrÏ¥bÏG +‡U×ð‚uÁeFŽás^°!nÏ-‹Ý˜„.Vàð…< Á·Æ§¸b|ÉJêó“È¥‚KYÂqEø'¡¸õ% + <˜ K{‰„ÕÅÍN™”=Ÿ'¹‚CqGGRã¿ßUïŸ|¸ßÄs^Úrnö4—pn÷`nàà4 à4Žn[¿ˆÃwñ¹ 7u]ãV —4êÌ?y¾Eɟ~h·¶[ãHÛՄV!`‡ç¢™Áù»ŒXê3qùÝF6=çQMï¨ÅG—Ô>)¨ÄÇk¨zª’êòoMíAׯÉiÍ‚ š‚àÛ-pi¨«Àf@ÙVYC»›“¦-+\z|òýϱÇ­§y­ØBêÃ|2`㟉LJ þT¡ +ëøEl?Ã~'ƒðá“ÊʞÁÄÆožn׈/ùMhµ¼5°˜S€ë éuÂé`f&҃é +K8n3ðe”AÁ›4PgÛ°qz& ³ñ|Pv¹Ž8Ã|?ú¬™¿ü›v?ãÏàیJé‘l'?e  Å|_Ããžzì£ÕÂ7ƒƒ7âØøYYÃñÑð#ǽñZ. oÇj. r=†vÜ¥“UÒ¡þÌ HëÅ7Qo÷!ïÀ]x¦^ú^Ü&SÎÊkž‹^|oßÅ°ÒØ*[×¢K#!ËÕèD au´}?”nŒ-}&bý^’½íù +,:¹Ã¯ö{öô´y‹ó˜HÇß ‘ö܁£žëß`„(óØS¦’+s–bh Y¼©ËÖ´9À34Ôöd{}¼“dl0íR³÷œ¿Êl†n^ @·î'ž oñ@Sw +v‘ŽÀ sCH?*CØ/³6UK¹AX&Ì¡¡w®Í_Mj©dl^öm`ÅoٍºÃ\ë Á{<à'W”ü† ÂcßQÚ/‘aQX”\Wƒ4ùÆ f06œBÝï*%q )ûnýN9í 5¼`4$¦x º64Ý6/¯–|í­“Êl!!©N <’ß0/9ȧ•5™wM ‚d¿·n²6;a¼û`9ìøÉöû‡A—‰ªÞl)±«B8iǽ›Ö{Ù3éø#;mٖÓî_ž#\‰¬ÏÏü9n'S‘Á’·ž‘Íڙì9cUGÀ4ð¦jr¤‚üP8ÊeF­½öï(øé+>ûî¸ sõÂ~Ù`äõæ ù}uÊEþùÀy +ÝÀaß`W*&åD›•‹uðM»ƒ‚c-Ї™ÁÉ YÈgþ9xï§3¹`՘y«¾ÖÇřâ~~¡µgñ74N³RÂÌÐú±HÞEÈÙæè³ÁÊ{xË¥-J¼Â:õ"uç-µ ?"Æ·?å» 52½¢ã—RX°Ükܱø!Rï,DœúÓB¥Žv_µA~eºÃ©È«¡fÞ"r’éÔ±P3Õ9&€»<&¾yސ#ÚYÚÈX±ŸŸ”“l@òr‹Õ™,PÏ͓—´ž÷O« }ÍhHïìJ½àeÑüBR\…'fFÕR” Öñ‚­º¨Nxäö.= ®PÅïý•ð⑈–½éFÁ!ðx'²Ò¥{6þ\ ×Ý}”úl´î·y5íÔ¢ø²ß“&V [WÁ¿=…>“ÊZJ+±ì4/‘qH@QÖO(6WVLlØB7k |6l§Ù98XÏô_n)æ‡5¯WŽgc˲‹ GÀ›Öò{EìÅkà"{©× ‘0ÐGçÚI4û1ÿIø{øpžØ_›´)rŠÅ§ÿÁ¥œ/qy™vvH+´XÔcPhµÙÍÖ2ޣބíKÿèÿ¹P‡õÏGäÚ ÿeC2Hˆ>^ÝåÏ·xr× ,'Z +„|^®ƒS.ý£È›ŒWÛçå>Ï?}þ¾ÿ£Sþˆõ²{~ß$»Û¯†Sb±W8<͖IŽèŒÆó2?”äzfI’=3ýˆô¹pAìU¼wá0¯ð[ªdQ鹄zŒ»$zèÐ#ô{1•9r=`ôC‘HPÍO²Âš÷—XSXŸâÁg $l¤öWé0ä„wkh†‚Ñ$$Z$Õ¸‘êªl–½–Wy‚ìîpK¾l*ù·Š·ÀVÍè–ýM|´}0v¶AkȤ‡ÆM\ÃF©«LåmÇ$ Ÿ˜0ßwzøZi›Ú4ohñ᱁ ýÿgəmrm“U6áeÿìgBŽäà¥þšœUél¤´§µÝ»jg~øeÛ1*¶ÎÑáeiø¾Éª¡Ä=™Ô¥–ŸY.·sœ‡ò %Eùfü~ýlhùý¨2i)À¦â•Y€VÀ°[¿¼XTAþÅöóm)4·—O¢i¿ò!v€ØÉŒ/4¹¤úIudö`‘.NGšü‰þiéÞi{á̄3›†jxhU&¥Zy³A!·2 +\zùSáx~èvS!lŽŸ”y~+Zü’˜t$òèŸÝvH͛wWq" i½ü÷7ÇíS‹wÍmÓà]fô‡Gq!r‹ÓH +ã«Ä Ò˜­[¡'~K ËªÒÏôÚ Ÿ7ÿï›?……c[TGÃCBŽhIgßãÇMW­‡.<ÌmaÞq`ÖµFÅ5¶Pã£boÑIæ^ìÛ3DŽXÎUÉ«ñ‰ƒ˜|ZU[¤Œ¸lbØSiÏí„ +²kI†£›rüp^'ïÿ‘À_þùº¼”hrÏ*嘿´Ñ¢à‚ÿö6Ÿaõìm>«•ÿṿîÎÐþä?åœ!ùßAó„=Þ=ýçyéÎ`ÛÜhhêðBÆG›ǛÁ#Z#‹V¨ÞÖ[ÃtŸˆµ¯æׯô̼Ÿ[€Ù°  Ïî‚#M¾X<_К·ÌhU–¿X½ǀÐ$ŽÔð%"kÆÎ!»^ö±¤åÿLÌÉ&Hó@b§kÀ â;+d0+œ“˜Np2**•”jÔ̤‘³'Æ:Û¶ö¶Û·nÖîÓ»^ÚÖÝkVrI&@TA@mF¨„Ï¿¿þç3 ]Öíožwðw|ó¾yßÁÞúï¡.ú9ï¢ÞÌ ¬¶Y$n:ܛA ›ƒvð/aÌ­³Ý`ÙI©-TÝhðLmGÙwm %ž3pZJ9Ž˜Òÿ[Ý6hà·p p[µî›3‰ô¿ø/úK0¼–a\jƒÀ @½Õ• Àˆa÷ W©é´0žÿ?á-èÉìd‘¿/Ý48D€ÅœEO>‹ X°ºò䆶‘àðeòú"¿±G€ :*CõfI$oûº‹(bJÿ³4`r‹€y¢·ÿýĈl{ßÿĈþĈyNá·þñ"•ŒÎŠ@‰Ð&n1½Ãh\ÉO‡À™“zò'ˆ¥º7„æÔé³Î¡á,œás--Jç æú¢w$ÿ——e>awÝí­$‰\!~ÛÏ-*f[ôTÞltkÎæ.ûm]ë‹4 &W‹Ôük( ¨’ àŠî_,Jª^ر¤>Í´¤.BÉ«Måè/2«>Ø%_þ7¸¨@—B¡£›ÔcDã3¬iÎ1]kFôõ¯5[”Ä ™ÀOæ×À5C•&&náÒÏ· +%RyWy‰TúâMäФ %íôÉb]W¾º¯J§µ)çŒWjÃ\¬Y,cÝ{\òŠúŸ'IAàf‚3 cKÁӚÃW²Xuè=Рäîf¹'Üx7Çæÿë‘i'%wï,d=6‰ZÆ×‡º%×{k)ü!ó!øôRfY0 FM»%úrOÏf—ê²M™ÀYÅi3#"ٜ¥V¨·æÝ¬ûw\ A;zr²XëÏ·1ö„Ç8»hsžòY©y/^ø\Öõ¯Y²RꏴG ƒø$¢ù%Ì.‰@îNíj&[¹”`ìrHA1_šùF G$)’5Z1‰xÇ[ñUé!B”:ùiþà{@A튨œ\Ε‡4-جÈ0úß R±œµ‡ÜèX‚¯U2n +˜¤¶}%]:º)XãÚTO4,‚A VDñû˜7°¯…º‚,)~— •ÇÚ9o¥)N‰¢O,ÕUéXR4íoÐrÂCh€°VÙ‡µP†t…ˆ"Äû¹.¹ª6ãÒÒÉúb^(1¥!¯±VBçдÏM«"ÞµõÀ[öÖëHµ­¨3œ¸ØaïÛÀ·ƒf0aH¹ù;³“qi±e šR”œ$¨tï'uÌ)ƒPšï¯%•ÿùŽÌ­`'¯zyì¹nMŒ²6ÇNÈJQÌØˆÆS 'Ù/ fO’È>©ë8çw€°™á‚ÂgÑ­pÛ,G Žà<«öXø ¥_hHEÖã?Õօ6ù•-Ж ¨'ô.ðéâîa¼£-jX± s£û* J õˆ+-\¼)öGµ2‚X|¿AB¼².PG¿æP¤ŸêeVìfH?@Ãp¡^©Ë¬âáeF·Ðpvžfñ4Ù]2>‘B°ä\VÄ®y”,1‰™JÂØ¡¡xªüð~A"W¹|^AçùµY@L¨(µbÖSË߯Èvò<‰i€OW={±µŽ­Ëï2FV’å™n)8öaâ4é1ÌÝhœÛ(Ó¯ Gž%Å +šUýñڝ¢¸)ÓD±Ï•‘ûڈK”(‹½G…¬–p¤[Áel‘¥ã¸¼µ¤¸å± — MΩ÷)V–¨R" ó%šY#çôLà‡Wõyå XÛxWō³NGvì$ëÞ!e^ èÆõ¥/¥÷ËI5^ M¾…ê³iñ!DÇ÷§SKþBݐŸ•ó/¼°±Åß2V¥¿à±egŒW™¾\´ŸÚ¬,ôX`tÿY¢p‹C’»úd\¾É÷ þͤ }Ÿ‹`©‚*ÙÆŠè &Õ 6ДŒ¬yœ T·¾dþng@ìÑÆzÄ3xÅ3¦©hÚË^Z^cqy³3Ï]çH‘*_É<•Ö9GõÁW°“)^ÂÇm—?ça|(âaš…ÁÀñ´wÀó–/*陋Ó%x+“ñ­ ²> +S›• 7”J~ì)HÄ¿a /3Ðw‰hp"Ñ]-ÍÑ+žY,ÉÆbư̂n†2ÜߍyXÌ_Ó>·ÉŒÅüΖõùšÞº8Ì_ÊG”…£å[×ê¹t›¤µ[62ÇØµ ¡à‰\°Ku’Eªºo„°.òW:X_‡ãás£…·„Ï Í煃ÜÜFï!â,H»Á’óM­þöÿ-êÀÜ¿YŒlŒlòݜrQ{€ì¿ÑQè5ƒa±âžvU|¢¸VàòÏjïÿ¢§}õçÿEJ¼ž +¯yŠíxª¸æ*¿aXкöÄ«78´nÀ“÷wôp'ÇàF¹}k <ì[2 χÀ}ÇÏàntãnQ±õhØøÚs©à[ žÿ֑Ëì*aA£çéXàdÜeü¡”cË/Q¤–Zv™Q¿3%*}Eë¾e¨i6ß´Vi$Õý‹GÉ㙆:©ƒ¿œ_ n&J2.9Ó™v´Ý±v4â㨦ùгêÓx®¡fÏúîՍo§ÓIÓ»}8ûQÙšÖï'Ðk+îÏî“D> +¦ÈÑ¢€X´=ت÷^Ƒ ;Z]vjÒf~—ÜŽhí-¼øWÒðLØ"w¾~Npñ‘"¨G,á<_œ£ #—n*›ÎŒ ºk„.'ƒM±ÖK—‚NÆÙCȨ£r+Ìzèx>ˑ·CڒƋ㨠FûC¡ÅB÷$õÕ{³Uîɏҍ·Ì éY‹Dm þûkpRù%î¤6ªòڐŠIGKÿcŸØõ Ùà•Nð‘5” +NG¥! +¸¹BÄrÿ°¦úYöÉ*ùb ðK–U¬ûˆ•õæpóà~ôhÐ%_ì#F…*ý¡R«lŒ¼óK«õW“ðAe}Ei^09©´TJéâFœN cü€úòòjÖɾ¼„⸺p .rŒÿiOõøkt-Ënfb‘à6c§%šÔÄÄÈC¡—¯¸†õgíñ+ªw7U$ãj sGæȨ¥àc+ pZîÉØ*â/>þ¤p„¬ü&°;ö0¥ÁX'x06ŠÕ–Ìž©ð€£1³’TG€éª±ù&QÙ_¬+¹pt¼|#8@¦„„iýf-[£b,ªÒýU‡"‘•mvà¼?ORaQR[Öc?~Fá»%Æ!ȇ3šÊ0¸(;•S4p½D5ªòw V~Ã\•x5L²Ë|ä]”7âB%A]‚eP¼ ,ŃîcUU±ÝßZ5 ¥_à²Lþ6CYÁŒó«Ý¨¨•i<‡ŠB1V;àk‰¯Àwoˆ Ñb_0—ŽKŽá÷À²U?OEoj ³à(…Œ‚í +k‘QDå*ôÁ3ð Dí–påâܟtñnÙ+ k&sœ®>2—Ùh +¼Œ]>ÈP¥ö?9Eg|Ú&¼ + †]¢Î5¬?0w(DA^¿d(*€¶ Q㨂9âïá¤HÌ.l¢UcwEòx GTQ±ù§E@f?Š­Y-¼æb¡ûù„”¨å¡w¬ô„ý…“»ÃµÒʵ¨E(aG) |ɉin”Ø©)|0¤µa<.ÒþŒ?Lˆ•‚0oÙB$rF݁¶tß°­u(‰Ž®Õ>ãgݟžâܳë`qøòÑ« +ø˜6(þ¢š<¨-Ñ_#WÓ2£ÝV~2 +³ºþÏÇ%V±ü‚›‹{»Æ€"î€xžÂJ ë„쯁F‡-"åi âîae¸yßÚÌޟ÷Q¦ìuØ훶1hÐ +Ìw»ÀIë½^ÐûTËÁê½dÈïÐÏRX¬>µHç6pïªF43 ‘7e§¤t~)ˆß•R‚°Å6NB&”òCc±¿¡‰„¾l±ØëYc»˜€\Á+èð\¾hX§âÑt×4v¯JuŸ[lZ œcÞŠ6;è6Ò´ïùWÔ;ü b#3»úî–ÁëßK¡ßLqnJ6,·¦è+ÁжÊà[³À° ~´7ÓIjûèß(‰^Ez‡`ZüÖ×öµÎÉjìïÍèYWù|gfÙnŒÒûÌcijNBÆÜ>ÙFñ˜” x²úÜ`#£‡Wº?à„ûcÎ 3o±xjBëXógÊEl:Ÿ¯žd6%èßCOޒ¦¼sáMZæaæ‘ßÉ=àÊÐo “„ïaõÄ>ý-NA±®0{ÃÿîY¾^ñ·Î&•_^?KSpwv·¢GÜìj1øØôñ&ÃÔ¯«p<,À±ùÉÑÞ<#®O¥¬JÌÀ¹2òŒ6·¥Xòðu$۔XРšCª%Œ¬ÑZê”PаÝÖýµ(F!óèëÖbÂBJr‰ZÕ´­èâc~¡*²ãnaKÄì%®ê ô§«^Ö1VŽòÒF41œù1P‚83hsúj睄ïçÔÚ<›˜BUÐòäø$àÚ6¹_‡¹ùP³¡ÉôùO¬Ržʼn(I˜ïÛÇ&¡‘ˆæ”gº;#$šåÂ=ñ1¿dr’äòìp/­G¡Ÿ +dÖĊw ÑËGMÿ`ûO¨Ô#Â@ÿî˜èä2q×yK–¤A•6‹Øx&Ñ;N&ÀQ!!ûž:o¹°»ùÓ}¤«Ï}{Ae&,ãÚ%tžà© aŸrTÌæ×±Þ–šÚÇÓ}Ž ̈àû÷”y™‹ââQཻrZ ¯j(Hˆ˜üä'MÞÕçòB87Òŀ[30Y©ìü6ˆ2ñf䧏iÂvûĤ›M÷ŘPÞچøå¯J›îö¯;©‘yµ"ÖâT‹Ÿ~œNlˆs)ž îðÄ▬Ø*¾úge)ƒôX÷£PQ0-üŠÛÿ"ì˨^ çÆìIŠÿgÌM&BZ¬ö*É•îë‡F9E<¼.N+fUå‚XÚö&ùKUq¬1€‹Y£[MžÅBíÓ;·ÊMˆ—é¾þ+ñ‡"orÈÔw¥ª£—¼-hQ\ûN¡x¼&?DÉ~aАq9M’òF qŖòSQ½ R'–v<,/ ylNÈÅú.ÿ¢·BÍæ >¤—ßÃíœ-‘ª@š?gڏùG‘†êâ*&-¨UQ[ô12ÒÙê= žZZXÎtє–uº*Hmý†¶UE51‚#…ŽAÛg¼„w}÷ŠÛûýª²­bë9Œm}օÀ%`_p|ʯ9ÚP¶9mµ<³ю~bkûmÓÓ|"^]qô\ÈWá "|›j~µfè8ï«î 6¨YÌwÅÌ»§(/Ž9ŽvÇý )wN™dµcËC¹,blªeQ…µî†XxTõp00ŽÉ‹¾z1Ÿ•Pý¡F¨+†`®€Ÿb… ùè`­n¨{o?Ê¢6Pò󟬉\^ñEÉ·n…¾Ôj…a"ŠrXŒ?œ“7XŠYlH¿·³U +‹…ŒáÓkÌÃ7•B-¾,#÷kv­Ÿ:8ÍŽRžG +ä«mõ¦~aüBɩڬô# ÌíÞB3—K>´ÐoÕ}”yEÝApè§`Ú £ZöäL‡l´iÉjK5Ÿk’û¶m*‘ºÉ~àŒz知7yüY–vW„¬bÀ“i»‡TÇ× `ݱ§1«ç4½saN¡ÚcÁ3ù8‰®…£‚e¨R{Ç=—ÇÖ9òÆЦ~驂¨Ç‚qÐ_k´eŒC‘tA\åÐ~Aq)I­bçFwŠ>óýÌøtpA‚«”ñ†õˆKrë·ã&!pß[µ<8Q«1qæ$aÑ¢ºOÌ÷ˆ w—ßRŸu£g›ÕÊãlq…^+t¬(À‡LO…úVR&öÖ¿¢ÑPSgÞ1…"5fF *týÒê¨Ð4Ç«:Šw›†9AÏá31ÓZ&1æm/pN•.ÆÇU´ýjÓe\Û²þó,¸}Amù¨æÈÛÈkó#VÉãÓdÇÎ-¤óÐÛ£À¿õ‡/HÑOEB܆SýXÎd§|»ñU}}ÎûâS•M}ƒ7L¹ÄÝJí $Nù° +ùؑ²é[çø†ƒ4ù±"‘öc:~ÜÏfUòÆ~鐰’ÑÃt§á¥k½—êÙ]Ñý“$[5‚YÓ¡õ¢©A×s×j9‘˜Û¤¬.sKâ;!Û³ +³X¼•7°–§&ûàäñ +›Úƒü¾ýÑhK–ƒSˆ·îÕ¹÷zôµ9 ”µ5Ý&×>£¦´/… Ì¿·Y Ä`î}7 +‰³X²4í3ÒY´bÚÏ>)魃m¯Ogßv2v|Gg½í¾›…å +ïÃnS7eÇ>ÊY¤m¼3Ös¾äíµPÛ¥Øvšà1ÏíµŠ1li<é¨äÊXåÞvGhìÍú?Ô»ìkžx/ìa<͝š´ÑÏÁ¡õƒ£èfB7Ý >‡Ö$oÌ}h¬Ó~ñMyR|(úÏP!Z‚ôêé¸CÉ&Wâ‚Írÿäv2^(CËÑ»ì[°ò»6è;lQù& ֡韘¡}K‰á£‡‚_.ó ì݉£‡Ú¡Ò½iàvM<ѧHÓÀı¤ ¥Àý.£m%Æcg·:6ÿåß·Ñ[Óp_÷Gg¤ÿׇ“ÂK_õ×g2“Ÿþ=™ìI׎ÌâìÏjNâ;Nâ;Nâ„î€ÛƒÆ=ñç+í æ<*ь€Ñ‚˜Ù?(ȨxTd5”›³ UCN ݛ=Ä>¾½íçJõ¢“ +?òæÿ8eÕ³øÿ.ψ•³ý—g¿ÊÙûN†ÎGƒÏUu렊GÒÝûÜ4ß™ðü¼~V϶èlçÝØ -¼ÂÉî€(ª±º"‰â$ÞˆÌ iìrø<„p±¿£Eé¸T(³£kœBÂÉç%}›0ünìĪl0U‡4ÖÔ(à}:Kütg¿xd5÷ä ¡¬/Qe, ¼Á)cÕ +(“G‰mŒÈ% /›bâUDсéºsæÉfh,R4çpŒ“SՄ¤^ÆE‰PÌ<)*„4쁭HÙüxe…n¼kS±Á²ïCSwZåûæ·DԛŽwìwœÂ·àÅØ²½Zîø!þ4®UïdQ“bþÔ\¹ƒª7ñ†Ùì~~úž“ý"ßÚ¥Ÿÿµ/›Å©:Zš÷† åm;ÁY=}󩻐ɧçêFkR’Ì*nÔùÏÛÏ£jœK™M­ +ÐACm“KRÙ3m5Ê´›Eî- ó"ZËð-¥”3ŸJEË-¤mÓäŸe³é×û K¡¥È¼‹WΠäÝgæ.vÚïŒ1ÉHº×K Ÿ+‡ÑºW©^Ë`@R2­AúžËîOÕC/ㅠծ¦žÏëNJìŠA._Mç}ó{€‹M<—‘NEÌxû€dà FÆ3\‹éµ †5ö éª¦—é¶’¿Ï°:áàw¾É[-Ç:¾HŠéLù/"½‘Õš2ðs-XÕ.`½ä‚ɧþp¬¥»ÖȐ²àVb³‹còSò0’ÚiÍ?«cÓ;b«ñ(@3ӋƒòebG Dz ©"Î.ƒ”σ’Oœg|ÐFXeÛÃ>¼ÖUí*ó´pcòt® òõœ{ôñaz|Õl8оh  teÆ +,+ª'!sN73œZ¯W‚âÍH®qk/Ê aʇé®ì‘ãÑ^4ç)|õ/Ò@Ü¢¿ÄÊßñØ«òÍ|?kã~óÃ}!¤0ŽÆrN¨–¬ýà¨î_Œi› ?ª¨ÛÞÚ'"Ò4ý‡6Avõ±€…{šfŒ3ou\^êÀŠØÓ ¯ž£í¥v¦ ²NÈÝøDK4_©þäbÿ-Œ¥ËÕ÷ +¦2™lõä³Î8m¡îã%lÿX <ÖL£¼…E9äMè—Nd\ž"sJS6ÎöÚ‡†.Úë”Ê:åR޹;3žÒO\»I]rK;»4ÌF+Y´Ðá9ÿ0°Úè,\ +®D–µàÄè*£›‹Ë„äXŸ?öЬéKÿeòXMÝP{}"=†‚ \Å ég¢Îx"¤m b<ܳƒ_m¯%`L£ÌÂUàÌ×ōìŠY‹ï[‹ã0^âóU]ô½ôòlé8jƗÓåÏÝdµ<|}eœÿvJ¼ä ð€&{­ü•Цºü8.ÿe.À’µW©Ë“àÇÖ~?6~7Û÷jý2b¢LÀ}}l~Æ=€”jnàݎc6ìO­ƒ#^üG# “-« ëÀe\”ñͯJ•úþ¸úÂZúu…5¶«|N[ÑF2ÄN å!_G:ÊÐ:„°ÍO¸¬à_¨c̑k-¯<”@¨ÀñH´¦î„’(Œ·F”ʲ7¿‡<{‘}éŠpPœ<½âðo¾ö „ša³`Qîæ¡-LüñûP/¶é6«H´Ro\6 +‡ïÜ³k‰€Œ% ®hý00?l@N^­ãûó%Œô^2~Ë¢F†òg¤ŸWþL„ž‰ÂLÚ fÕFÜDÞöä?›µƒYrEbnôPÂp/Óäkê,Tšë•‘j´N[ô¬ÚòѾ~ñ[;ÁKSNÙihIôâ(ÂnJ{ÁS˜hH›¹Z')Ýg]@7ל€l{´ÍŸ€nþ‚¸‰›Š^ùzËÚKÓ¸Ÿ¯MǪ~-?¤¿á:Eðvô—´íþö‹Çúiž‹Hì™é-ÎËý÷{ŸíéÙqšN­3kS2ó{¾e7sO5»ôzïë»ê¥m›uûýr†à&Ü6Ä +è/­n™¸aá(k¤´ÿ\—={ž©8´îÿýGÿœLÔîÓp¹ôŽìiçÏ2tZyóèÐ&âØ E§ ¡5+2òU3ÿ—1ü~+Á6XÙÌ + 䠋Ú ±nZÁ^w›xX¨Ý8Þ'lYmþÕ¦í™XS©e×§¥öûu1~Ì=ú~‹¦ŠÊû=;FRyÚ6À¶ŒX?†ê©ï\çÇu2%ÍՉȍhmr÷NÊRœo,fÏø]Œñÿ*žÜCÛsüÚ¸è¤YÆF0ڏ!¡‰|­FWˤÝGøÛ`à}Hïÿ,_ϱâǨ¼Ýú\wþn)Ú;ŽÿÎão‚ŸÊùlu¼æ’zÞÀ,‡GJȳ±œ|‚Ìlýw“§W”€*ÉÑg_}ՀS½ªµ«¦g.â²/1.z‚Ïö†Ôx]ä,ø¤ˆ§Ç| Í:ˆØè߸«ÝÈ šEü/4%CÆÔ%­Ê÷³k,ื 2çš4òÞ«YsN–¥F͏û>جË]¼­'¥ºðœN[ºë@’óÓ£+5%±)šúSµ™sÍAu4šöi/g:¥%™­¤\ý–÷.¿T½ÌÍ%Í&¹G Àpžÿy@0ªTéaú ¹ Ò¹x0ò†ðÞ†¼x%tvf„ñѲï'å§ PòÝOŸéxE@}¿¡¸ÆŽ1öi¯s6½œÏ'jwždhëÜÌ&oTjš>=%É嫵À6–;‰LÛ¶N“`™­±Îœ¡Áì‰å8·_]:½œÕ&Ðí ›ˆ½Ëxä¨i‚Þž61Âx;co7ÁIsÜ'Qá.˜Â6‘ž7KN/]"‡eûœS¹à:< ±CÅ2;/îýH¯… •ƒ`^¬Óë\B +Fs6ؤ–%dWÇNEª·‰iû;Äxí˜E;ßø¾ïPË<"!+µú +án6s{¹›bÍ4©÷ +u,&èxM©—xóOù¯ÿ=6y^‹—÷—}ÃÛ°­i(dÝ7ÀKÈCÚ_‰0Çr@¼÷ 䆪‘_“oøvëïæ Á!n&ãÔb?±"Bü „Îü^D¸~›hW¾Ã×ò3™7€Ö·Û ܼ6’†6s\¤o¥­<É8³÷~cDœ÷¾ã˜mâü ûs{ += Gö‚‰¡»×†ŽÂh´«°éýsÜ5Šp§G€ŠšÊ¶!©áÚ°Œhˆ«ëH¶DMl›Ø×áÀ>z P¬ìNk£±Œž÷eOx}X³tò¢)ÐWJ];ìäýÈÖ†jRÊVgoøOtdXò ªR:)8§aCý~E± ü?ûH?½ ¤ +àOV + ½åŠñq}2‚wfQæa}ìÉäªDŌÈ<㣠ò§%V¤ çê8çê9çêKóõ&9ú“,ê-ü±ÞÉH³ö O'è(L¶eb‘iÑ`EÕ^êaeîg•^ÍÄrAiˆnkû‡áz×JínUÑäoû17¾2$oWŸ#|̙òùHÞ¢$oU©êO"¦:öFõeHÞ¡Ú 1†)ùǑ¼»4QˆÜYLØ×½É#Ãwv#k$H$¹.v<‹,z Ç@†:¦Xþ˜c¡CXòaމ yXñ¡Ž xöXð᎕ k2ÇÖ!ÛaF=w½8‰iò|ÿX¤É¾XÐC£&ùZ+ô@³E lm˜cÍ’1˜úŒbymQYä¼6ÌÑ[ëQš‚hE»Vs‹çy'‹ùͺ|_Íætx¼4lz«Î§~×ó›3ÅúVZv]aå9¯ÛBa`¾Ž‚÷ƒ$¿Ê²ù•û­ xp&¶ÉÄ!0ë/—Äs9+³¾&ÂBv\tì¹Eá — 7€ó0åÀiE‰pw¯ì¶oæ¶OðWD.FþËÖ´FËpÄ£šû=ge¯‚LÒ»úýä)Á¼²fºÊÕþ +8Ş7õCgIJ÷ó\]’WW˜ðc\%iy«é`tüê?µEØe"õz‚PÜEè ap؇7®ÛKyèWý¬Ksö¹%8&—µv­rÔ칊›_çºcÈ"BÑú—%ÏÝöš‡C4E »Á\8¡_ -øq਒‡ž<#+cË:i»@Y7¸ˆ¤ ¯dJۄWuáâŽâiƒ®t^â7ê8:ÍC¨nì7AõâwmÞJ'Âç;Ö Âuf%¯4¬ñÖÇ<‡Ä¼YL«"5ÄÙÇÇ5¶Çq¸;‡ûª¢Y…&6¦•«(m¨Ëè‡gmæ‰k¡çüÓZÚr6öÛO‡õË©À" ~”tŽÐ3 ê¹ïÅæØ o03nÙÄ>¶ø10\*K—ìA»m¥·˜EôRÛÚ}yCñvQImeøW¥6»ÊžӐ¶O˜<Üp1Ÿzëá·t£»[{{GmŸã·I&[¬ñÂZ¬è +Y§ +Y¦`K7¨¾¯„î¢p¯G8NN+¶£È¶Lúœ 4ô=ú?YåŸÁÑúÙÛ;æÖìÝv¿¬~Á5Òf…Ñ­Òkl¬C¯ +4²I°©r¡OVEñchyûv¥Ú‡ŸúK”«l«råÖĸÛÂa›âõ±œ,5³¤»ium¼ÃjÞ4/y+µÏ´ÿÉ£ÂÎCjYm¤´!(ÿõˆé„ø(í¸åðàÿ|õ—Ñwºíõ+Xö¤²öS‹Ã±“v™!u{1‚èË{-ì}Bi¤?—£ÅtVnÏ¸—‚./Š}œ,B~2}“º»Þ`ŠÌýMÇà¿]S4?=kÓ« +¨ yæh]tO9Þø¾üþ'ú_1Ù$­´úFõaNæüo¹|TÉݒÃñîŒ/ƒ½¯ûªÒ]’øé3_ÖÛG[֏i¾wFëanîŽ'hzÛG}7™i,ÿwÓm|Ÿ§§ðV~¾;Fžël½£ô?#®ëÂbÞ[\£«â ~É?óm"¤|žWÝúœÿ’]3&灙EÒúÃñ±ÊL·»? )q{z½iüE<Æ/Ù»—w;mu²OxHž´KÊuáyŸÆQrÛj4~ߍí&ÁÙóÜãyõ¡Ýܪ,O6uØÂÛÍ¢y}Jöä‰óêAçùàf–Ü·jÌü ¡õ3I–怿r£cfoCfïnÿ_$häÀ’“B:pîØû,rTÖoòú&=!ó²ydpž°i¼4¾ô>µ&‚ZàÅ|xdؚ$ß®8’?ÙDºãÈënÃó‘Wh§Ftmßå,ÏIÈíàpû0ö»iÏviÉ\›yȺÿû2§?2õ§”¢ëÃ~½·™iÅÌ¢©Z9àã֏ ÚÄVòz!"¹TT@ÑË£' ¦ +ŸÐht:DÛ·=mæî´ä†zpÝw«oŸùd7üYä8:QëQ8¼ú;CüàӏÆß<{º‘½È‰e®€A_±ò‡˜Õò‡6¤â¼¼Øx_­ ß$ +zùL·û|±Î ؔ²ÜçsF†³5’³ÍiΙuJiMnôÙ@œú@îÑ ‹_öPiç ߨFI|ð‚½`ÓÈ£§Ý{~†º±ýø†8Q)´‚ä•ÞB=ì “Ÿ8sŠ®vŽ·¿¥+SgŠN=™ËIDùÓü®aìOi–>ßÐ*AêÎ`Þ5³Lg© ;6©gN$þHY-z±¿L´TàΊÏÚ\Îj‹ÖŠ]•Sç©ög½}ÈeáÑÑ£¥%üÖ§û¬-R¨Ÿ:(¶zvîĦ¾8Se ‡yûÁµêZ’Éër‡’Dø Œã[µÊ[çàZ”4s8ý+ÿ‰µTGx)[ó‹…JrgáCG5ÇUœ)؋\$Ç«ë‘u¢‘5'4ü¦IW-?¼<|BµçÕû\c›<àÚMr”ôäÃr’ºµKúöù°þ„lrbšk`э¹P ,RmΉ[­†º_àՕ#ùŒv習ÇÊóL=¨ËÔ{Ʀ n Þå»ò·•à‡õÇan‚óͪÎ<˜oçrôc=“T¿,š¯`?ô +ƒõ'vëÆ­7†ó¿¯>PI0)Žƒ¼ÞÍ((Míë…ÙõÇq»µ^œÐšk‰ÔXD<ª)ùyÉ Áw Ð5ýî¡å>rÛµë°ûK?™ð_Gj~ò\4GÆë¾¶çÑõþ‡Y¤û˜îéÎ÷Ñè;7ÉÈþû ‹ãÏå~]…7°ò§û_؏éò9't´0«½‹ÚœõSç®ì«s•Õ6v–/]Õç^ÕöNë*k_=y†ºcÖ×ZÔ¾­kqKiTú¶­ßd÷AsÕ …Sêðägjl³¯Ü×ûwïƒoSýü¡KÙ¨£¦Êå:|­=ÔpÚP»öÐND‚Uw1ËóÌJ¯7ÀKAÛÅ)&G£•·ŽVܲ¼}Š•zÞÑJ½’¾-{Zþú¹'‡~ӗ –ϧ…¯K]ɧ…‡0uÜc×Ç>ö×"ç]YÁ©þ»¸ZñÈnIü¸2‡,Ü/ïÞÿÌÙvR3kޚz¾5§/þÒµòåno~ëêäYŽ›&i©èqX~–}Ý= ¾8@ןÄbnuðêgÐOt¸–Ùë×[=zëgÏÏPb›g¯]lõ뭟‡žŸ mž½u³×¯‡MžÇ÷"{žžŒ‹èdâb9Ø´EK¹þǽØyé(ÈüßmFáìLTC€ñ»ü®ú'º¶Ûñ!¿ŽýþÐæ?ûçÿübÿôP?ý!ÿÿéÏïú¬{?¿âÈö2Øö3ù—Dzøö3ùœ1ìþgó?¿ßŽ>ö\žW#LŸüŽ<£øX¶ô¡üZz8‡"Å?ÊAäö–Cß)'ðÜ%õ–Y÷áč0;8—è"=µœßÍӗVe'Ç~=5ŽñéÍØÍôSv/ÓfCYÓîJ1[¨ýœm„fn.–*yÄ|J#÷ñvSÊËòdxá­_õþæ#Ñ1A|DÉdIïœìÚAükFúå—ìõÎ/QȽTH"õ@?sê[f~êomnÿÃ[ÊtKDßnQ-A"H›îÜÑ7ÙD»-¥·_(‹Þ¢Û¯ºyä 0=«;9Ë¢h4æ¨%‘5±•É7A¸½!×K}#o㓍D›‰”?Zï¤kž-ôP5ט,ᭈ6ÿm­’sZ÷ò(sMaíKܔZ$ƒïa›Š[çUóº[GþÒc°ûëz.ØËZp_ÝBN òò— rY«îå7¿Z÷î ­{ó›¹A7rh–Ô)[ÊÇ¢Wk%ö2y+imSVtS’SW¦T빌o‡3êáɟ%8™’ÝÝEO\э¥º–êín¥›ï,yD^¶*}Ýl'Î!ӌÚNíR~)›jòä¼Ð“Š9ǃ÷QŽp@þrš؏4âWÑ¢ÿQ>‹ý÷H)Ĭ÷ýßá†ÿ +7ø(;õÖO“!s1DœWÊtç½¥ÃgUÈ[=m®º¯À¸{ù+p|㼐ŽîDwüIŸ9cË\f¸Êùñ3ø3üð™÷hšq~A!8—Ș³ ÜÅDb&'åC†ôè—ÝJX:ÍÉÒµX;¥Ä¿#£÷‹hïܲ¾3”¶ŸýÕÄßù]âÞ÷ÿò=#MæQ/±…Gó¦Ü¬mÞgij«\{úµÊF¢R‚iŽ/ˆM£¼´+·7"‰º +&Üs¨¿q&·Üí½óg3a1›—*™’Ý+Ý@[˜òn&ÒÜ[r*Ç ‡V"Aæ"Q1E+a)=ËNŠþìËÞ-å¿Ä·ÙÎà{ÝÝÀ÷‹qŒÛò/áÙɺmÛ97:¹$}×aí\N·,ír‹ôü+_ÿp!ÆgXp"ß>r¢8§œ×*íԁÞ\_í@x‚²îîBÍÇryãÈã~ÛÌýwŒxwOÒøÒM@³hk÷-‰g˜l%œO¢D­½Ç¢öó©Eî£$‹Ý/n2(;I͗І^2çˆçû¿²áK¿§€L´ð)Ӈ ç¯*5åët5Êý°ûÉܳôÔ¿’äoÒrW#._É;ñí¤Q}³¹[þf¹ÜKFÏzžYÜYbá¿¢]ËsÂå±rý¹|AþRw§„¹rÝEw,‡\XëIa('Q„Ïñ9íõþÞû³ý+w7ÎRûpþòÈ3rÞ/3ýNYÌýúÕâ`M_¹O·ë¤¾?ut_óo_ná²¾N™WÉýû/îQ=Ë*õökK>ïӝÚz–rêÜzãê1]©)aØ# ÿ£\‹/"©êE}Q-ÒF‹…÷°_µóü¼Ÿ}ò"*ñŸc¹ùF“ÿtŸAä]'ɾdøù.~—ält¸ÏIgñº¯•«ù¸þ4Ö_áù¿að>´—§E­Àö2Xî“VÒՇpäÊ¼‚ÖëÞ߃,§·¿pà@»ú¶1-­ÚÞC" ³QS‡4°î·îòˆ,[¶–+Äí«:kY)ìw…'û^·¢ñõÎ!!‹ßãåÒmwR½¯¦wÒÆý.›öïž>_ÓµÝÊì½$æ×þ³ƒ+I¸ò·r¾$’³¹Ìøîc5Ãpxr@÷7¯úÜçƒæÊêð©×‘ò{ÿ¾ëmrzoÓèµ³‘ßçk¦>oÛËêuÖV÷ßGE…íօŸ4½b¤ý\öÅ뫟À^ºåýzêî77Š×ˆSŸŽëT—wÕ®ùzêwûÅë©ßÙ/]NýºõÔï¥ñÆ^ºº…Š-Ùx•!ÞLÊõԀ>ß/]Ht'ˆ½uvESª\|ñ*öÄx¥ë«îä¯!?Å.7殨¿®^¼L&z¢ÿ˜k7ß§;«^-N}ºµþµò).¿·Zµ§ÙȔIàvSÎu±ž÷_Õi;xûßÉí}÷‹‡PØH«´¤B©0·F®ãbÉ2𻍍&¸ØÂÍØ®¤\_VC—u#‡(’C—’—اÝHÆ"UÃdîûì{1#hqq¯ÜZ¿q‡û’ˆøhÒ#â#JŽÕÇmÆø[?¡žÈjrYß¡Ã~¯Mü6y¿Ùã½û½?‰ÏazâÓwTÚ{Ù7¬6¸¥y×Zú"ف%磌¬X~À‹û˜ê“ó`½oþØü à˜‰"£@:ð;€%ëáé@ê@ï–åÆȁρÔہôÍ _‰;w`vàxàpˆ¹=¸ˆé'ajö$d¼ Rw>Áê,Ó;XXÎ2)C›®º˜‘ԁÝ”©L>è“Èȉe‹+@ê'Œ•Ý—Ú×ñ@ïÀñúò¦¹mQ.üp øSxù4 s^},^th8å†d÷ uu@K àë€÷€{Ð;; ;`;;Ð;ùd”–Ž|‚H:P”åoÕö€‹€Q¯·0*b.>°çÎÈðdH¸À /&M’£l~@QW&ºöƒí +ó‡Û*—íñ¥¯Üéõÿ¶'ذ—kJ®× ¿ìz·¥ØÏÚî 5ëO¶²>Øu´sÖí˜Ñ|}²)v~v*Þ»]²Y4ô +ìÝsǵ¯š¸Oöëí„kN»EÂ´¡ˆ{%v{/šxWÚçÚ5_”þWëÍ…®§²_v¯؟jf¦j`ÞuN»Ø èO[´V {ö ]ÏnË;£ÛíÎÿ$®—g³ÙӠͣP½oÿ1ṃ)í»·s#Zoú{3›(ª’»B:Óp×54çÙBÖªŽoû‘—hë^JögÙ7õ +†µæÕ¼cá®aºigž=Õgÿ÷ûØ4a¬i—Rz©g»TÖ¼¹ì£[xjTÉ.ÓUÝÎîœDš³h­/»F]ÀÉK +hOŽxàyöqîÎ~ìÁOhӓj;Ù É$?ƒ>ÌEÙ÷#w•1å:i€¹TuJí¿×:+yʅ: §¾ñÍAÕï@­uÀÿÍéîYïO¹ ¯>Üõ=»•ÓŠôêc^{´!)žÄ䯩©}n·eÚ5å@ô÷UQ­SË\tû«9GæT+Ó²:fם—µ‡`Ç~T ²…Ý3û®›÷åËV§B}¬;¾\+¿_wcB}®;ãíWênlã'v™RÛjÒ7*tÙFì½·— «"láX³‹ÖµaíQ±íOºy­8>˜ \®õEü+—Ûµ}·mÿz¸Ë̖ì<3R›Rª‡ó1—šÉƒ á²_ÃtٞÜU¤j@rÇ#©½F îä•2£>êv´ç-û¶¼ó~í]ñO5Ù©6 y÷cvgB6Þ;598S­-›S‚—'ªIת†ÿ–¦up›péË Û.èFÁP ¾à½ÝÍþ)àËL˜o+˖Êgý¾ý r‚ßr.îç¹ nvùS³¶¾äç w†ö_¾]Ë]Ëæm• µ«D¹om«w>¥2¿¢f×à;á¿)¸5}îló]Å¿ÛIëx§| Jf<»æôðjÕ#{ ‚Åÿë{\yÕ¾•I+mÙ÷œ6Ý¦W£8zžö¦ˆø;lgNu©°¹ÙÒ©zÙª¹µÇ õ5yã»Ì«^¾ð¯ñZnìû»UðÚ¿áMü͚5@×܋yW¦lì !IµÚ»»Í€7Ž +¬çnךˆVn æ6ᗁמk„wŒ@ÿèÀÃâéSœz“¤ë³ï5ËŒæ¤æ^v}¶JØk“5ò§†mü¸–“‘p½¡Âñ§Ö󄥻T×IJó—'åá êUÒܷäN¦¥4ÍHÍsUi_êlËyxGkMë]oaï×dÿ2­¼–,:}»OØlµÕåÛU{»a®±.Ú«½Û ºÂÝïW[vÜ8ÿÄ"}^ ސP:}1H Vž+L>•¦HÖ΀2ÖÕ^ö}¦êX©qñMh­¶ýï^ç¯ßF½¸ƒ„)„ä×-šPGÝ"¹ÊJÕSã[@‘‡àXr‡:ý‘È}Üºô÷µÐ?e:i²Æ…V¾4d÷P*3^¯ŸØ@ð†åáû¼"Ëz½€eäŗ4ímßøIúc¡KÕrÔ·ÎçÔ*Á“ðëåBšø…­Û~ÝJÛ¨ +hÂÿêãý’uð/?M=WsëÅxBÔÜòI,^Àøln¹$aòUünyý½ÿ©ÏrˆM·^ùÓwécéĈ¿å÷l‰}J¹aµiÄW[D¬‡­:íÞ[‹”:ÚBæw'oAuÌï ‚ªü:Ê!_>·Âžö*‹)ý­9k¯änÓà¡û3•þKnó‰•|Y©œûµµvZÃcåZbÝîېþTªá®¼5k»˜¢ÿÁ‹®Æ[LÛ_e›J~T­êàE2Š²Î¼>s¾xc°G u÷Ÿ=ãÛâƒG­R±⤜¸óÊ +џ†3v®NÛ&®1¥¹$’›µÛ¶%¾@Ü¥Ï?9ÛZš® »?"U'xÕ[ÞÂñ%b-Aؒÿ…m`×{ÿþdØ¿`¾¾sKÇèùeâÉ ø r1(GbJ +)^èϊÔ-„a€åÀڒ r»_Q风ø ÀÄj±Jl…âÀÇ!ØâöÞÏQx>Hòöw¡®rŠ‚AÍí€÷àwàc¤C¾Ä~Ё$8ê\ꁖ/FPHjÉ&D: 1Ž‹3ý0; “?> Äð R‹µäÀö tÊ.†EÎüI¾ ww`|òΑx }p1—¤"QEÐ݁,c’X8÷¢éùôY団ҁ¨šQv;:=°ô^å€|;`; >€2òáËX·«ó€ÛËL!À<ùEÜï“"WÀÔ°ªàÞ̤è¶$6öhâ p 0QfpS|A”—©Qwò³·Ñ;¡ì¿˜¼Šy(ޟ zJðn‹¤¼]j­Q©2Ø-”[à(‚ñŽØò-«±QõÜëb§-Fšcñš)åo*‰¥¿h«µSۀ®ÿ KAÑvÌé£d¨+ýp½dr`µìZ06ŸvõUq²hÀŠj3eíC{» nê6ñPO‚®dö;aƒ¶;aƒ¶;aƒ¶;aƒ¶;aƒ¶;aƒ¿û0wެ2%},Á½2ŒÕÂ#h©¼0nß8*JË֜|®Tt˜-+úVݐ÷ƒÍ¿\%Å^´ÔNõ¢C¯”îóI^°Ã[ 5ÿ©†¾ßÜëþí@÷ Kã\öœ¢`_ó'âE–q)ðU±‘HA+Ã"D¸ÅšOw }X¤¦ªÜh h¨Âõ£{6àe#EÄ q l#KŸ%æùàeã“òþgW”OÓê$„?Jee#{ 7pÒE@øb&YTà üˆtÀìðÀÎ9B3@u I kɒ^íª¸IYß¹¸I÷G©`é(ƒIØÐàÔž’e>TR ˜Pœz€ԕOœÄ,&«2I„ fZ¬iaˆp4Às<¾¿ÿ¸§©…Ø÷Ê1†]ÿt®¿ÿŒ®¿üŒ]߀â@ä@æÀ÷v w`}1èDÐlºTmÀ\;0 øP6{>p>¨©‘"ð:ÿüʌEì”b,–@. & âYånTçî{ZOÓzο͝›:ÿ6uþlëüØ^݅íØ^݅íØ^݅íØ^݅íØ^݅íØ^݅íÙ×ù³¯óaxv‡ä—‡î}ÂðúAwõõÿû8˜‘IX”¦xÒZ†”I=ìÀ’£¸ŠJ™9¢Hýà±U>Lœì ¼hµÔ i T#L’P.ü &ì2RuzÔ¤T\¿G†X(üœŽ~AˁîÀí@ñËÃËȇL€ˆuÊTTt®¿ÿ2Xr-&•Ú2_CܺY/Œã.‰`n§¯ûª¦ä߁ˆ•B'ÔρÖ%0‡çáã+°”΁À,`ŠD®À,6:À~Y)øg·W`w©äxx~ü—4´Á/ÎW`–]‚Quü`pq`z/Ø üà;Åvq’èC°=ذ9y¹é+àq@jفӁ,ÒC»pIú6dH¸°ÔÊS󎰖ú€< `¢®‘hĄSÝ%áþËÙÜæ·¸,}ZÂñl/Âñl/Âñl/Âñl/Âñl/Âñl/Âñl/Âñl/Âñl/Âñl/ÂñweâÙçÃÙçÃÿÃχ֪ä<‘þߦæyðöaxöaxöaxöaxöaxöaxöaxöaxöaxöaxöaxÿò/dw“®òúæ{iöaxöaxöaxöaxöaxöaxöaxöaxöaxöaxÿl¼~›Ü/Úrü59“ïÉ0¦Ä¡pÀv8n㒡+|€>¹(KØðËÛðï#ӎmKÛWæ÷€vÒ ÇG8 6 v x pÎP‡€u`w`e䐌ÐhróÇòb ·&èOhWEð¤D°$оtàvà~À©T#,BZd|í¸,„K/…$8 3Àqe𶬠+°|¸¥{m{::Hx¿º«YÉ»¯àðÀíKp\‹×̉—W†§"òzÐ%ð—Ï|8QVp +î÷ÀWfßP® uã¬/Âñ¬/Âñ¬/Âñ¬/Âñ¬/Âñ¬/Âñ¬/Âñ¬/Âñ¬/Âñ¬/Âñ·…ã{¯p¼n—‘ƒ‰{°$„„KéAñ)–røpùqŸ‰?v vàw…q"“‰ÎËäÀéâÏý¢Ü ¼`¦hX< ù^xԕ¡>ˆ¨ *{žp݁ï@î@ÅG¡„µ8@递éßސB1€j€ìùJÁÇ%ô×DÃKÀ÷å|»V9š’¼¾Hþ͚¹·ÕÞ%ç—V9“”, à: 6àx`\ʋ£Àæ€éëÀí•ío}P1Á·ø|ñ¯$¼Júñ–ËÂ÷Ð<ñ®Öß+@‘x™5{[ÙÕ`æ’Á˵Àu@v`wàI>ïÊK¡@;;1ÓD€À%œ€s@t@u`vªÁɱS!§¼Nt ( +xùÓsÀ((«<¾u(—ÍŽ;s㮗¶ŠÁ›6Gy‹ ʰ¼« ʰ¼« ʰ¼« ʰ¼« ʰ¼« ʰ¼« ʰ¼« ʰ¼« ʰ¼« ʰ¼« Êݗ•G¶·>ß+úïîão½__Õ|ÎÃÖÅ`Mt г4Qcãÿ„ˆˆ­/±NïáÜ@ýéî(~þ ýÇޔ~åïµ·c÷l?xãÇÁkøxøO|<|¡FŠÝ!'¿Bh7¼ž²pìïÎií+žûŸ'ÝÙ¿ÿmû_ÊÈýZõÕõ;­¯ˆÈÒó}ú¿º§êؼòœÚ󁺖Òóz² :²Z¼ˆ.¬ƒ¿—Z߃VAÿ떷Ð՝˜Ö±a£•¯×­b±Å/9¿©ÇVAÿ^k®VA¿ÍA‡È_ɈNÚßû/êå~ê`ÅãÍÇiÍøiþ«„·(ÞB\oa|›×¬„·2ó³r~v‚õ°—_c pÑöPŸ÷Мüô'>ºž¼ÙÝý9ÿM”«”‹šúy¢ç1÷¶ø>÷o·U‰ÿ^¯ ñ8þNSYãø} ×ÛÖuú œ…þ&ÈËðñ6÷îѵÿy–fVVfY„Ú AjÀ²Rò˜Ð4hhJ%f@šLE—ŒÝšFš­H•EQ¥$" Fž´ lýÿû÷že|ÝûïwÞ{×\û‡Üìù×:띏;o»®uν¯Ýï?ˆÓï¾ÖÉe–ïd…oš”V!ý +~Æ+[T¢±ŠÉõ9 a?©ø‘»Û“ÔULAÑìʯ⸽AI´å!KTaj …ºd³‡þ² ZmbŠæ€EM_ÚMNÏèĚ¢j|åËâÇQ\-oËà«4¿—‡7ñX½ÚŸªFC{U-l«®M[„(JâU¯ˆ¤Î'c$Þé’¡• œõ'gkZе‡qÍBZȯ$¶‡Ä† ™@>JÔÕ¡ëPLA’\/ðþˆ*ÔS¡N ŠÖCè„R¬Å&B,$EYà ä%(«ƒ†‡û#hÊ´ñ”™AôDÛHDńØS°a6&ñ-ð¢,YE†„xa0͍i›ZYň€¡åÃQ”¢¬ 5J*ÉßDŒ´{g¶ò¯ÿ&o;è”V‘BZdžò”M„–]…ˆt²}ì[E¼‹ÁI›E„ÜUÌ«¡I›…„”¥E]JL”XUÒ®Å]ÊM]x1¢&x[í©E^aëaá§qᆏ©DMP+ÊԊ’ À{5¸ 4J&Ñᆁ)DÜ<0Ð5(’¾U¼XuñáØ +¸ À<; WaØG†äUÈXnCÃRSȰÔÕíÐދhnñø;{£=ˀßkð6ÓïÖS•%äY'Û,Ø÷¤®÷‹óWØÑñ´@„vOrš7h¦™Ú)¥yKtvÊË»ª°¡ºç1îǕúam¶ +¥3.ÐÞSho}ózԑU"—S\ùiû,­–ÿ»E3îÐÀ×¼B¹eâæ\/{I{‰u3®ÐÀ×àóó|w{‡­…“æ®`"þ[“³§á¢ºsq®.)]É.æÛ×ho±ÿÙ©ÝÞ6_¦ûóù¯œºk„Õ=jßy»`»>+„ý<%Í}í[¸øÅÜnà-€îB®û˜­{V„=­’ƒ?¼Òã(«>>”Îж¡íê$cÑÇ+ÕÔ-àÉñð_;Bá_»’¨°÷°ì`5‘ u͸;[»O¦£íëEg³]?Š÷ŸÖÖ<¸®žƒa©µ_ñ¼hýóAøÌmzo™ÿѧÓUÚcåz™µ=)$·¹/µÿ’÷ãÁ´úl½Ï¹¿ÅϨ³½ð—ä娰òý†ˆnMg iƒýŸŒÑx¬JüV×÷SÄÿýSšÿÿEìþëoÿ ÛC‰ÏýÎ!¸‡Ä¯QNüúƏ¾Mw·®Øõ1¹ˆë֒·ä‹®ýÖ_½¡ÃVÐãC½uì·-ÔJ·½fÓm‹âxà!/š/Ž–2€»ÞÎg„Ë©»ûVA·ä˜À¿i»üœdÔC¥­.ßUùYûÜwó-õ­UЧŸ×hq©ë•NÏvâ¢/›LSY’üŸ¯yhüï;äçïH˜ºÆ>»¿hq]´8èÚxm>6‡[C‰îµµŒ …n®½ð¾o²ëÀÄ+ޞ¨–Ú¿²©3j«úð“L»4v˜ÒƒÚuØêø}Ñ9tÓ°/ÿÓïï3Gmçy”w™³'Tgyɝ秙÷ý4ßêwlÌZ±ÿ¯ +þÛ­¯ñ²šoJᶁîm5˜íº2‘¿k'ÓÍX»œêX΍Ö쳀Ûĉü~–Ë\ŸoP§‹§Ç8pTø\ärEåå<]UrÚíJÁMÙêe/ûú/ä_5~:µ/¸Éã³~|oïޞ‚¾âVú0p07e"tŒg\òª¾‡ ŠÎʼ_:/Ùó;(n¯ÔH¯¼Zzžý»mèÜoî‘ÒO|ùéZG¯?w؄£·.ÄuŸgÓóú=ۙºÝ»ôl×Bº·üýÿ¡;\ÆPqwþ=õ‘Ӎ½Áëuœ)õn$žÆMªÐ’1*K¢šm׸—ñÑÄå­µ…™ .éN2bíkƒàiÕôâòôˆ8nt1֗u;¿Ç/cßðöݞ/ÚñE&nÎy³3oó”£K¸mú«ÑÍÿœª|–z×vÊ$úá1ڄˆ׎ÿ“ÉãqŽTnðQ)XßX× œÛ °ÌxÒh0œeI¾ŒŒû¹Á¬÷d匉Œ”õu”õ1¯ö¾“Š'›¤‚YEéÂã$¯œ»þþè´®Ó®ï+D¯mրèk(îÙN73kéñóù¹.æFóêèåm÷¨ÌáA'‹éCÚÑ>~ŠP¼b–7}óÑ)ú—\º;÷Þ­ªÎàà–[DæšzË¿Èa7±yg6Ú(9O·³Œå·ùú¿Dt÷Gãø£¨$wێ„åví½ùâ“ï­Š±Ná —s_'ßàox¿bn¿ÙCø­¹¿s»²Šƒš‘úçN²–±¡UŽÕÝòYDûŒ6K6–}¿³°dÛª³ï +nüv-™×ÍRŠŠ¢MC‚ÅS2בÄá1¾^N> ?—¸ÂWûmy<¬E†Š¦•ۚà ›é8~PL~[­)çóÓËio2Üï;K#‹7iÏçý:®fˍ3Fó€ðõ¯¾ |¯3„áýÝF½ýâ÷q’/¤ìže…ºCö€CqÅæÑ+š§Åõ¾n¶?qO¥Êü™©lëI½Ærl àøqô9k-ǯÀk3 ¿$/Éee+_¶Ìæ–UÂãÚñ$µ8mó²,–÷·eЙù'è7ælz6¥;ήFg®³x`{Úý¦Isv«(Õ¹km×Þ.-ôÑxöÈjÖ¤z.²·›“ëï¿ã͇€›]¥¡Ô§–ç~œ~œM“­H–Ї›¢{ëÑx<ÛÞ¦C*¿¥cåW%¢°öiOÛóÌHå³Ü÷k ’2$¡—!S\!* +Ã-Œ›#¼Æù¹¬²xÇÙøJæg®ÝúЧè`—¢ùfw¨nxË6?oå®bè/ÙúLÆVï’æo:xnF /Yê¡U˼áîxû^®z~Iû¸Ë~îåáâq#fx\‡}V÷÷m7Ψî4-S_C•ñá:¸..?¢élÍÁïdà1œf«C«vËZnRÉwÛ-*i«Y;U­ÂpåT^w)Þns§*uù㕪yÞr<ƒ•ž¿ät_–r§ ;ê‰ôGEèαþé\ï?5'ÿ2å¥õggÎó ;Î\ï9¼ãÎóӝçŸ;Îïÿ¹ÔÏ4”Ã\ÃOÏóþ%0ù¥­,0¨0ï?èÒSÏÚÍÕyÿF’˜|vF—f-_;Ïú4”ì â’÷"Ñó¼ÿ£IN<ê+?Ïú4”Î*ùÑg0öc¨•ùÎ4‹ø…iûè/êÓiw£bßµÐk—ë› ¢55=XǑV·ö„_3¨ÍÚȍ +Š`@y¤Æó–[VƒGZC v¶A=F*DÞ]Í\Wb¡B‚•ÅziZÎOªÎO¡ZкË( à ØY,Q€oȝD Èö—ÒY”Íb¤Z àîr—Af%@‹ù6å"ÁÒ-­ÊTýȀtm:Ç^ÚÈaê›1|å¼F$Æ÷n5MÓKS’+␭VxŒžçTVza§õ}y9CýQ›Õ8„¥¤Ì݉f8Üf]Œ¤oË6Ffå+Éæåè1t“›i„vÏá~¤úÂe²6cfƒwž\V7Ôz8ü{dRŠzmIÁìIºÂ‚Ù¯XB)w óIè8èˆý§ÆM¿Ú ٜ×ÕyCjù‚¯ÉB¹b£PÀº§ðÖRÚ ûdg +ÂÚ#婵éˌ#s¥n·s5]"vö"^R ˆîºŠ¶]Íå ..eDXÏy¹…uðlOC ìßݺ«nAákµ@+52%µ¢â½>a°£Š°8„TÎ# ¤é›å†¶?™ûS5<~ÏœPùØõ2Ág¹f¢1N‹Éª›=huôò[+–np‡àá¯Íƒ„¨Œ1«ÚËã2^ô!¤( ³UÐ][Âx„͈QzC—<·<ÝV0–­ï[IŽ(ó0äÊ~¬aäÉ2á²E aüÂa*¡>±¢í pÝRUD¡Þ`O F‡ö½zu¯?δrҞO쨌œ¹q UõÕ·ŠNãáߕ¾3ó îßf˜¢šá½lژ 3þ(p§>*íÄXØßP¦Ý´R¥‡H¾q©Z¯T7qœ²g(ÝÚA°ï%Ö5ŒÐôy4HQ®Y¶±kØÂpó‡ØaíeÊTñ|1M„SúÄ S›/ôµ¨ÑìÈ+½»Fpðm›Jl½$öËàÃΞMž â ß¶‹¸à\oMY CäCåPÙþ%Xt„(¬Æp 9¬s;S.˜¢-QÛÂË7íEVÓ`Õ‡Ï„]ŸgžàÊÈKT€öK61Œàfºås-žhˆŒ8×Á:½ôœÒ9.ä²Âœæz¯m!>…»;̖^¹-5«q =Ûl]Xñ§TÀ£žŽdXíØã‰b3Â1‡ŽSb¨s{éÀX zŸÀ ǒ¢Ä=ý¢ô‡®ÅÑ^3FB?·e›hŽàÍÃ%M¾PòÍöÒBÙÉømx½pr¾·9í<£5jééÿÏrs~7ªº~\.°Ê€`*+ø©w ZƒÅ䖖€ÚA™¨hób•£R”dÂj:#9e 9ls^éÈ BÃwÃDF ïúC‡íóP© åðdÈ©ÞåìÑwÿ^‹Þ(>ò[¨Z fƒäŠñúŽ¾E»±ÜômûlõpŒ›Ìš3ØêcM#4{OÆÒ!cR¦?6ìEïæ6fKʝ91ñ†ø«cÇϓ¾m8Ìlµ0¤Çۜ&8r ¾ÆÞño±·œR¸ÜÐ,Þ$ÕC,‘ƒNã +'&†è³5TN {Ll؅Æ0yI]݁þ x%gÚ4…4* ±1§ <žxjS’’ò ¡Qíæy⑰åñ,ö{ ’ëÜ)ü))½„§ÚžLV\¥NË{óÑےõƒÚÄÿvP“A³#Ë#T Nïgå’ûcl1Àt¸b=¤cýXèy£o!†8€Pw,È{i&ÈRЬ t 7· +=¬ÕhâP@ž†ÞvõmdðSŽàPZ^í·­v{Ì +“QPҝX³|ÏՔÙñƲGÆ2¸÷W²Aê¾r¤PŒàB)ÙNê}Ç 2ò¿Ì‰¨ÚyS´4 òtQ­?»+/p¸ZO¸j"üÕàÐÌàÉÊLCB·#÷³¹«$,–1ÿ’”îw<€,쿘hŽþ…´©÷y0)åÐ,¹µC'Vb´JØ¢—,X‰YM¿¯˜L¾¥,5+ ñ#J_aHº3Âl <™ ˆ«{Óً$‘0ÿslZ™í +É$Œ§’•ï‹Áo66wÜøe:¹Ñ ُ’I ¹¾• ü¬Á.A»œ¥Þt Ð3RZƒc¾r´P«Ҋeýò@FßñÒ0Êp¿ô¡á? lV¿÷z†ÞŠô±(ÞùÐàá, \Ø1#}†Û6ÂܧËDþéÆ-(Æô@²6B–ÌMm‡l~ߙŸb’%þäÊXÃOƒt¾6L‡RæTËڏy~¶ˆhƒÊwFBïf\…¤b9PÔRO ¥Bÿ¦eâ‚*ñDDÈ ðùF7´趧މ„3’öÃm¯µ9Tº#V(ŒVÓq{QÙÎèŽÛ£'#¢;^Œc”ËjC^…Ÿdâя¹îmòÚ䀵óŽp [jÍ5*êÃFÿ†äS‰šXNP,´CljnE-®_ p4žŠÇKtsßÕPø+¬Ž]ÍX"n{6—Ua™Ís#¢5ý_„'B +Æqoñ3„¬ðÞÆŸ*ö¿PbÍOá=섎©tãùÍލJ#‰ä«1ØFñBdüÚ$%ì¬o¨(M~ $ö0,ä#¸jˆŠðÎ,ÆÐ;°#‰8ÐDÑӚ-ô’ô ò ½Ë`Ù1¾ 5Üq’‹U÷R›Òف±ÿFõR£ÌÐÏ-¼¯î Z𿺅k `֗ú-B>…qþÙ|XG¢Ô¹¦aŽ!UC@Paêøê¹aÀÌÙ"ú¡jøÂ´*šˆ¸ßX¬H*©A  hy +ސбShÙi2s°ÎD&ë^AÀµÏûOƒ”“B“^%é¼^Æõ¶Í¿Ÿ¿±¼Ô‚,€^d,PRÚ ‘¼,mŽôغ£n&$QÄþah;€™À‘•éæ1j"ÀÏ~y„wr#`Ý.ç\Q£(ŒmÛ@1Ò]S|3j¹¹„¢ÞÁ1hN“„Œà a;]ͼUh«š¡xËۛyjÛËUÒ$0µÜÐÚêæÞ zd'x1¢VÅɲ™e1LÖ-)¾ÓS%°o;<Á²šã|UÔZìþ¿Ò‰r0°\Ö*êA›Ì‰k‰2 A#7W,ؒIϊ¹Ê4 ã Ü¿p8K-Ã½ (§Ç—e­Æ7†ýá¸h«x·1² ïÏØlvÕ² N*ic m5-[.çÿ†4Ö5à5qàd2Áb88bš]¨×xàP„Í‚À““Eh³2¤ RjݼËŒdÑnÕ ¼ +½9„“o¥ 2r™¬^e‘y˜à9ö‰³ªÜÿ‹Ø¡J7çªmºÞbݝÜû2„䈬åðß*¬ßoOöƒ2Äé 1æÁ:æCT¾EЭ½ƒÂ±Ö|JW2–Ú–ø” + +ĵâÌÁ%ÞɒnçN96ñÎçÇ·ˆä18óO/ê½Ü1H¬nÏ=¶L¸’ã8t•96,¶âZþ§a5®vXf‘RO°cJ¢Žo€¯æPŒñEyô+ÔvŽƒWR‚ñHÎJ»³’–¼Fé‚2hÿûÊÃéÛþŸt¥ 6Ògû<“cpÑv…}î‘ã?ûqÀÐeòæ:èMÑ_É\;?A͏•’äk ¥¦ºùÓpfLÂ¬øI6F+täf…â2$9÷Ïl ª$8ëÔYwýÍ4¦‡ÌZÿÝ$6˜Zܘ¸¯N„c6Pæü3ï–?1”²çß.N"Xè>“œ4Ý[?;iÀ¾Å;l Ew8zÒuêÍÝëGÇc[ӏêÿ•Ñ|=d¡ZQŽ}¯~¨6u0`ÔçA°ƒ*³Çë)t€΀€zÂƸ%Î4î"¬nµš"«IÆÎÓ ¸Ù~‘¤›;4áà@æêeA LlÈå“ùó¤ê˜LuÓÁ>»(σlN1±Ì=†¸7a`‚Š_†u °¹®æªE:¤_7°[.Hp¶PeôÕ²åCÍ@ÔUA*ÈnïIì•Z aø"—°È:Q­}7wãdÊ*¤8S¢"¦Ù~ì™q@Š<`XõÇð¥§-,Ð 2t»‹&¾q¨|z3c¼l͢ꤘ–Ð!ËwJ)¤ÕìAÅ ûJåo\lòÄOÎ>_ðèf‹˜ì(9”Í8³>ëóãáČ=`##$ã‘5M@ò¡ÏZ; þȓº g—êI€K]˜¡ tbÎÛ $è@¾:½M@²-GŒcžþ¸[Fm?p‰9“ô†¯"?š©Åø¸Ù¿N%!s®?u˜gEcÏzxÍœ(©R Ù8ØßÙ¢€@õDÑgž¯ =igž`ºÞnª:¬5èz`úòpÆ1 ~­³kƒoÜ 6ǝTI( Z +CÎ=¾Þp•4€M|¹<ò„cêw/8qŠ,ëPÛ2Ž Û[áiÁ¯§s ÊP˾(ൠtÐÝñ„AdEºk\׬Ø;éaë©q›¼úÈbZ é(Å«QÁB>Ð`¯R7Ç^:ÝßݙJD‹îõFSÀÏ>|†"=¾l¢†òœqz8a¾™ Bçòí„ź ´ØT¾ÔÊ\bõâ2ÌÓ(æÂ2ÐzO -ƒðÔzc˜µDqH6 + ayNÐ,›À© /´´W!ÿ7*’úygb-Æ·“Ü$Ù/1Íy‹çë;š@Ï[1ÅØ}.Ø©3̇Ò/öQXA`a[ÉqS?(ò.±É×üÕU #õf‡²/|<˜aFÉúóC0»&ސ1£è€FVÇçžœüy`^FߒòœkQÿ¥ 虝ŸÊqÿ˜qdᎃ}â„QÁ°å¼à£U3WJ˜nÐá]azy„u®x•Ö[‰^ú0ŸbRB©œBX°J»1n K¦&ç6Í@TëŠþ —£óýýÞS41¤·NÌí§T„Ý¤Š„mðá‘ÏýX«û›áž JèÇ͊P쪙?7Ø2sþw…nß|‡ðXaªóÿ£a:˜cU(/ò¶¢L…™Ç)}ሽpʼnŒÂescçÑ:Üߑ(ÑJ É[8ÊQ´P¼=" +üó‘K¬Ä7?Âq›ª›¼~Z:k)ÎO%¯—w€†Ã¤ûá’èkA<ãdÂÉ*iÝÒ²NãÁ¿™}D¬Šy;úuzYS6-/喾'”XצUmá«û°ëÓ0ŽQt+xÇjdD©—×7nBþãºßÄ[‰Ýÿi„+¶óƧй嵗ó& ˜BàÏ÷·I"t¦VI—Æ*ëo V e‚È`fÑìU¡BÜ6æH‡Dè…qöæîº°¬Ç¤GÑÀÕOµa“!Nà@⯦v›‚w*Ý"æb±Ú>Ä)EJáHR+g²áÕ³’9˜Žr„ÙÞ\ó¨Y™ˆÊû‹!¥ §(îóNŸÜ҈TFl†où–½•ùBý­Y²Þ¿2ä :~qòêæ²52@nàìŠY‹àwzÔÛËk3Døÿ›¬(ùB +|ØNúû>™˜Z¦ì汃“`¤x¯fŽ”+U¤ 1žÃ„àÚÂ4Ï@aU(Ö‘§ë¼­¾–b@ï¾[ÜÆ|ё•üÎ݋BÚïۖ¢Þ°Å7hQ›oð ÝlC4ÌÇHRæ;HK13Xz¾â¹éc\ß̇´.Ä{¹gÞ)ÌýU͉BÊg±Lƒªr³ý%'í‡özJDDô”‰ô”é‹Îäɉu|á7 HÎÄ:»Ó)õëýïŒÖÛYE*š]¨á‡›XÅ=¯Y±úKÒ$p*ÅVhFÃê}ܶ^öøUr»èw%€ìS?ÑI–-™5žæ¡¼28ãêôÁAäϛ4oyʜ/ñ§W‚ ü?¿²<¨N߂<ԋF†øªv"Ú(4F;è†ò֍‚¤Vd»ú©ˆnå2gðÎ —14Â^`½chéß0Å\!F:Fæ'ê×¢™“#çc«àÅiàà©z9̅Z?”WÑep ‘.Ðb™">BØÜ:8·Jä¨àVêY`mä-ÞHʤù"È ãÖ»\†ŸþP§­«¼2ySÆÊ®?XÓv, °×|•eŽ¿ 9|@«ëxьY°j.*h†‘Ç4Øÿƀ2p›Ç­£„ÊUðž×à÷¾a>üÁºØÒ•ÍEùhìÿ5y@B1ª²ƒB$¶ü¡G±óyóoŒ«Ìî<i:uøzÈpä×É8Šl~*¬¾¯ î~z§wà6×j«GæÇTäà2ŒÜ€2´5ü1å×,ϐ‹-P¹î+Ò-®º¾r™( µªdfxf;Ué@¾DÛ`¨ÂQ¸ã]"MŸMÒ†ô~6¡ü¤é©ÂÊMpaÕ7A ?VÊùiÜ»?ÙÃø:€º‹¿ÑÅ8 +}t臥 B Ñh:sÁµÁ©NˆP¥Ñ‘©û5¨à^]ØÑÀèqEqˆ$À÷tïQ¾rk#þß«ñ[@T +¸âŒ +ò·®Fm2ñYQ´¿ ¢ØZ(ÀÁ\bðþ´úÊȪ–AË0ÖŸ”ÈӀ)hÀy¯h”§Uë +çP4™µŒ`éZ9¡$³r{àc®Kdõtk 䱀ó>1{òœ„rœ ŠB6{¨9¼áø-°·=7bAYµF¥ÎÜEÈô-ɵâÃÐè†!9 x3F/éÔ0͏Í]ÚPÑaÈݎuµ9C6ͯꍎš§…ˆjþ©^β»è¡‘@Ú2ň ¢é>m¨ùL;tóDELšOÒ1ÆXâP`´=ÈZþsF7_´Ý“Èhgá€øXXJIÝÂwªeÛg5KèT+B}YÍRà³:Dõ¯‡ ©j õ£Èfcv¤BC:RûJ¹Ä“HæÓo@à7‘ëˆTÅøï§ƒÄ‡YõW­ãnZˆ×A“<Ϧ ‚uųáÁpǝ¿k Õ<Á>èzŒòÐUD%™™pQÁ®Šª‹)–³‰(Qe›Ëc ²ˆNh]@­¥¾ +7mFFÎÜÌê^C0[}cwôU)òÀMkðCŸ?ñ1Õú;À¿d—9&˜(ð¼ai8N#íbëÇ¥#)uÈ}N6ŃpöŠ5U#Bœ}b¯Ê*/¢ÁÊ!Þ¬¥ú`ÈF‹@B/ýê "Êwh"qx–y˜z®NOØF2ƒÖjˆ8ñà‚Ñ#‰ñµ¾ßHÚv6'¾$qÉ3©:%ãg$Hâ&añ™#Vqô¾ÎBÂ5ŽþtDb·ƒ¥ïS9{"Iz½ï‰R”HY6œÒõÏüåâUˍ8‘$H—›‰/9³Ù{ÏÌފ:õú™‘¤ˆg¡˜ +ÁÐ9ì>DA‡Í“?J3Æ g)ã(@ÉïIÈÆÍ˜BÖL¸®0nIUÏN²eŽÐ5Q2wÿw§È‰v™¬³ DI¥,ðŒ¿´iŸÖ~/߈ä_¸AkÁé¹zÆOcMǁ<º{UyO¿8°‘Ÿ÷:M.`<ºœzì’ÒÊ&)Ł–ñ¤Uõà=:í=±±ý(xɛñˆ]¾íNÏ÷ٙ33$“'Ё Ä`@XI’A\É2Iô&@€@¢ +£(h ’d€V@fLs¶UVŠµ×ªÛKkjª°*ÈE$!ÖªŠXÓáÄ´Q@ ÿû÷ïÿ}™$‘Q(m{{yÎï{Íñ7›Íñ·ð÷œß |çŸ¼æù;è_}ï 9>­–É,–´ñž¶ +v¬µÊÌSBg7—ê÷´ŠžÄ‚Â.[±$²¬å½<ȉ¹OàdùgŠf©VÂ7™Ç*¤4ƒMïÍ»õüîÐ8ìçÜ?Ç©I¿6ÓÈ´ðµZ®ÓÊßµA:±új4ü3ÚZò³>YÅûˆ%÷†¥Áßalg¥Í$µØé$óÀSa©Ør•*¤ŒE}’´~—Š’>}‚¶ó'M›“³ž˜Ϩñ|Øíz@[Qè&6’’,”tó¶D7—b•Šç`œn͐\áÜUÆÍÎNÝØûÞ nÒZ…¦‚h|­ c˜‡ZõFJ½Ìsë¸w†ò¾ÀLÉtÐÓÏÁTgìÜzÿ`––¼`ÿ1BҒ¸”â$Ø'ñŠç,è&, m 6{>ÖzY•,Hlâ©ZîÀÑOÑö€¡ßr ¯PPLm©ñ‰pNÐ<ØPfë¤E0ÜÔÅj›l[B,l!o´ +waM7+äEË9„›ªÊÂ6u¯Š¯¦c2o¢ú[G£êð«Û;ždD$ ›w•Šlí´@c…ºyÛf“ÆÃ@°ãƒ ,­¼¬©±ä-ÔcÁɸx`ßêT’-H篞ÒòARõ“ι,idRÍي¹7ðÀß+郗õ焴B_Ê 1Yý?bTÞVÜ6z°K“ªù®ÌSÏ(Z’˜Ýh/æƒÈ¹+Á'n ܍‘'›ÙÒp:Ìí¢šOù”\î?¬ +;×a‰8¨ 6–u!×úqª*¹®âQU Xhnzã{樂!Ls€Žê*3®ÒÚw—ƒ[\i˜¿»ÊB:ÆXÍ'~I%ÿëUÀ¹I~ ¨³Þþqìþ ÜþÑ?G¥O\mFâ«zõ´6Íw&¢ŠC°:—Xe.M4!|¿ƒ—¥¢Ðê Õ`,/%ödÀ ¹°]¤á¿Në…«¯ŠµX¨á<ŽfeZH§ÇMBb¾õœìè/kñ¹àâtYr"òíRÍ¿$å‹äb¹'ݗƒWQçb‰vÚy¸®!òámPêTJRëÈÅr˜ìE¡´±©ÅGŸ©§§E¡ÜÿÛS^lç •%O?Öó»% ÅFoŒ}y×)¯"t#Fõ×&òÚ`)«8}áõg\°VH§¼T"È[¯Û-ªOqò :¯¡ál»Á°³ª£ÄǒköhF©<*ʓdù‚XÇ7%ñ´0*”­•R_áËX[jV”W¸ÏdSÙ}'g š˜L­@C2W†ûy² ‘ìOt¿Ï›Br²Êp¾æ÷‡p5Ò \¤Â¨dqÐÉ=ÈÓÑ»dŽ®i‘±âM‡ +f,U68óýØÎȍ hñö»”xzHð´ç;•O_oÊ;Ѭ£¡4³9b'ŠO8MÝÔÿp P™·–`Dw„©³¦Ï§™§µQ YzpZ£§£µjK5ôÙÆ{5Ì:ò?iþ¬:ªö)Ÿç Ïk\j¼hâK á$VªÄöøp\©Iñ{³DßÍZE1ûVðʨ¾OCX¡0¾VžKx\’B¢Î|Zp^›ùhøí(FÕû÷üë +4kv ÞQTÇ6G]¿é©:™¹*àXLÓo6uö‹ªì›nøMªëãø˜¸ç=CjŽKW1„º>á)=îv£• I\Ú_yIãɍ#ÐXûüËzØ.L4ûn"–pÙW›GœDá)Õåm +¦Üi·>¿ùE5—å¹â)Ëwhmî@G-ÜGÇh§ì¹3Š­«°k/Ès´F¶Éª5¶>/“‹ZæÖõ‹„FsáÓïC”' ¦ÀþÛ'´ìAÕ}qâ×Qþ<ã¿ÆÙ<ö€ÐiòàùР—¢¦ ††-…ùü©éݑ¤¥>p圢,î±EûW¶Nÿ µ}M²wÝEHÈZ®KþIï€jãØDþ‘l3òûbƒÏu9ïd¯R!hü´êJörN‰YŸì2¤¿·ÉKR´ÐN‰|-ôÆvŒ*Ouø^AÕ0 ,º÷žFœGpŸÞ¦#2-‹6¼åH ‰é}¢œ>•¥&¿ý³/‹é:çßÛ0S ®«ïg©ûÑ1¹´´é 0%3$ý÷ ˜É)°„]†Á›ƒò©½Ê©}ŽmWî¸úůӂ»hàrb m,F¦Ul_þ›a·Â³a“Ê«•³úrEC5š6Låwû­ßdƒ™Ï@µ)ní¢:2Gà„,´ðè|iLjÆ0ygZþ¬d4¦ë’ßWõò:µ8 ,³ä0‰ú‚ÄOÚύ‡èÓõº\ÏètފúðÁñ_…ï:Þß$+n••¬m;¶”«hµÍ +' šó΢^ùز_z:²‚ù,ˆnÈS[SkwšFá…3Ÿ ˜R×8ÐØwOá)²€IÄÔzvÜáÆˆí?¾~kú€»n \ÞÈ!KcR<£6K®Ýº¢è±vöÉîLÖ>ñþJ"„ž“ÃpÑÓQe—+w?}è ¢áO_Ÿ-J¡>¦Fޏ:ÐJ¥ü"-`Kç(Ž f»Ö rþª‰HM¸wª:ÝJ¾'U©:ëÄgD¨[.3ú¿pBô‡éÝWÕ +…½›Ò$_a-wèȅß8IIäÆE¥%¬'zÑpO`nfÂO‡>mîå³ÍÂÉÐÁUC„2æ}êr²…UÃ@°k¤*?iþDBÄÏÁKS…áFȖsI{ÔO…©ú@ç0†Þk°ï6á­P.<ë² ÕóXð´×ä ‹¿ +ÑÔPÛ,=ÇЁ—pN/<®%9³hã}y)¿~[uN©1íhûdžaÿX•¦¯Û©=›‡¾hÄ04­ ¨F!­Î”öµcœ€E²kFÚ¯Û3Å 2/Â[‘ØäGùç~ž¥6]7‚²/Àdj´ØMÕÙÄÒÏ¥04ÓîfA5@ë +¸rɵ^èûTžsé"ÄV€“§áßôÜÄP†é( Ù~Ò·ÿjköÊ¿þ ìg$8\›ðÔhh³BIñŸdTïqä¾G¦^z›à噙yço› +vôür‰Ê‰ƒmóf ’4Ø¥Mö2=UTÌr‰SîLZŠ˜r¾II™ßzMk‰‹@¹—wÁ9—˜o(Ò9´±©˜SŒâƧVmcídëÍC”òaâ"µ±0K{&¦`(SÝ÷*qRÝžT½hÒãçÌû^.=KÝü׬ ÂÖ럿T.'‘ÂÓ§ÇI‚´õø +`(óÓ¿p_¿wçLZ,µãa*wSÑõŠÖ+(è/ü㗵p§{BÕ[ +?7®%µ duIÓ\…¨]¤UQž‘V8yNÀÄ_<%Âý'\ +h\'ªîÏKC\4§^¦„§ÐÁ»qÜ|MLÊõ ì€ü[„&ào—62üß\­$ꄫôw_è,ÿiŽ+Õ9¥âñ¹ñ¼Ä¸Ç—ò“´:yˆ¡¨Ø¿¾ +.þOrzkV¶µêÎ]§  R5µ2`³úÑ­ïäÂû­âñÍ fÈÖía™‚ø;UÃV‰qþi;9î?ª¦MyN£»Æœ®Ôع&Ù]03?›…øo‹€T™kð§ýRqð·Vi ±“é…KÐ.wõàæÍ¦,‘Ól‚ÈfNäþbÔj ?ï%ōƞ™hƒEÁ‰nħŠoØ)Íç𻘠i-¸Ü«MMBã´d;«uÈÍ j€¼]ªSV€¾4º•Ê3‡®Â‚ŸC‰Z +Ù¨_çâÏK Rÿ<¿zO!2É4ÐbB­ìN±kPswmcR‚‘]w@Dí\¯ +”S©4¤Ý¤ò«R -`úÑÖ¾¨bø +¬ +¤ +¹>û’u±XuèKös0âxÁÐDϚ"¶xf–\~‰p ûd›ã#Ú& 4 ³Í{rƏ͏é,6WOáӜ07r3¨Ö säsٕ„é9Úp™Óp~*sðšm–…Ä­{Oaš, ÖãÍõì eDgzàüUbž¯À.søTÖ%­ÃZåœ+Á.'Î1Â,û¶í,¸Ñs³êÜ[òsôËG€Ä­ÂòÁÑ֐b'E>¬þgƒáÌ9üH¹ b§íù‡ºû}€>ïÒgßJÛÔvÍho|`2÷Á 6S ß”'åŒõ¡WÿC—4‡.¶£aóŠŸÄ94ñLíÀ}µ‹ÌÛ]×ϟ¤[r“|1 ÄϏ%Ö +}[v2épUrø(#@ÁF|AzøaB8r}òq‚MM)è¤ïÛÑøqɳýØÂ±ÿ_:’©×ã,A*ÐcXµh\‘kÿ °t WGfËÕ%g·ð±…Y.%Bd FÉ*k3mgh+Ñ}&0º +-RAfRp +Ø,Ó±ÐaqÕ˜,õÉÁɂÚ]˜BHrl³|ry`ßÇ&̕ žL*«Ç' +\raÅûƞ ˜R}€äÁSOoÇ&dÞ¸ra¼ûqɅ:·œ9?¼ |ìraQ©žX Üð@"© _Óºaʅ›®°Y Õ3£“Ë€;˜TEö#“Ì490&Гƒ“ õäÀ¥RÉO"a r`BzÉᐠW­Û¾ÂÁœ\—…grr#×S¨"cb'…ògÒ„9É…w©)Ùÿ€Û©ñú¼˜ºýŸj] ü/³# +jÍèÃ?´õÆ0ž’JÐ{ÏH§Cï'†¾ãõ‚Yßãt叞çt8ôŎ¹=®äqût„*UäQe†]l˜1)ÎÏôÝ\ýÞn®j,Ì{±³qI°Ü¿£á¹×WÊ*âcª+(^0kv™ñzÀè }å§°ûË&ªÛï$I‡Á<‚©âcÛ³ýÓ£e´þALt»3l¦sÀ½ð9!dÝéB¬‘î1j´°h0d~4ö¼*{V_ÕÍÄ6ôv³¡,üӇöIK/îM°4ŸPþzŒºEbp¤´ÿ"ú ¨ EßB7‰Û^J{èt T|ò´”‡Ø®ÿ<-kýf¶¶UYPP-8 ‘ï¶üãÜú¥N +ñèç浤䐿6y³<Ðr² +›rñÐR|µ &ÉÃ{¬¨çÂou¥X‡¸NMOâ,AU…¤Fa|˜R…šà"iõíÈeN¼ AC¸S—)!ùGCO'úÿúc°“·ch‚µ¥Þa¡¿¶ ++AhÞ!¶Ô”.üƉ¥-7®c:×ßùƒ7—L *Tg¥Ä•Žºý9º¡=]èx…/åu)ð¯íGàûbQoò'ËÅ/ì >‘¨›? +–Ħ®Ñ4¤¬Ië£ÙÛáÔ)Àãù[†û÷tr†–ËîEÄ¡ ·¹òšVîŸTÅù«=Ån…áUÅfPÿt‰@q#1å…:­3³ÄJyîEöÐމiňߌó‡éŸän¡[³‚‹èK‚êÔL®ákùsJtˆ’0þÆÕÓr6¹x‹Šø),‰úÚÓFˬP› +K,‚Õ^Æq¾P©E&<,â&T÷W«Í í÷ƒˆ À;wëÞT[%oc5â¯Å4Z×^¬}ó­W|ћô{ârc»  ,‚°I¯¼³‰üCiŒð$Hé̊ ú›øV6~˜ûËà òŽ÷jñàpƒü¸¸Iİ1“+q*‰·oVÖ®…ªpMÿ»tø7béåŸm±šˆµy±ªèY§ù.Кk­ Ö!`[S¥ŠìÔ{âå,ÉÀ£˜Pܟ'˜S&¿%2;cΙAE—`7x¢1×jSóò3eLíó´ÔÍ ƒ†Íç{yêh“`Èg\öýÀ“ 5²_Y@:àX P%o*©Y`¹áÊ£¬Ö¹ ¯Ö5al±zäìõ¯¬'0${ŒXž„Ø%“¬6 ƔíÒ¼þ{¹ËcþèlÄ\,vaµU Ñ"z]Uˆ¦®Ö_bIÌEîuit£°¡˜£wžÌ§ ˜R̔1ÔåeÐ@5é*^£`Ç#Raç¹rR΃ÊÐi4BÚþ¾Úԗ{cZYüKB. êåÊ-ä©Fb-£Z¸•+µ‰.Û Å†Là3iê 3Žb…-ÙόΨTsZ½½3>uz5µæÇnÖ9ÏßxØ¢CbЯ¤¢oE–j㶯Iî9mêâæmëb?(o(æ]Êf6,V>…\E¹ÜʊÄëëRa?ßïì¢6ïjeúÅÈA¶!’È¥y¿%¼—°%gì@ 8Ü'ú{%@ÞñæR ·ªw«Á]whXX[Zd›TrÑso›Ë˜ƒ|ޜ°7Íú˜,yø®¬+ ³ iûX!ö~cpl Qo¨õšÒ+†Â¨™Ÿeè‘Bg?°:Œõoàéy ¼)\ +slQ +*CÅ~CxMrÄPI­ÉšèÖÄi›ÌW¹hÕoï¨åÝ©>Sªô¥@&p°Ûé–>|6L§ß'$vñìœZþ¼‹x¹X>0!â–Lº×­+ ìÓgžòïéìÜÊ:å-Ð`ÀÑ àr™9uʎrÓKÊ2vËKÊ\ +h§Vœ§VK_Cº´åº²\ùs«&,ÅBÝK1½2ôuÉÂØ#®âBØmjã,d×>hÚ_rå§:¹Û$žÞ'%Çê6n®ñøª9Oé¸[Pübc½ÅGkFMaFåE~))^ؖG±ÊÇÿ<´E¨MÞÌŌ¡Öchæ£nFî)%ÛˆŸÈáë²Ô[ԞáðfØ)º«´Û˱VsI8y½mW³Nh/úÁµ“Õ=:ÇîQFµÆœ/‘Úu´kþ†Õÿ# 6Ñ´Û§ ¶ãï[ùôu3ÑÁýjŒÉEÉóѶ]¸£vÌwž´hš¾;¼Ÿj­Ñë„Ŷ†ôU0%vÌóª6Ü|}2:`7-jÓiŠ÷Äó "ú5»`QåÛ¿Û£Ÿçè¸{)=3Q¯­í£<#S"T*[œXÌ¡óH*$Â×Z¢™F·¿­ìÝ Ò-Ð×â8:¡²©º7sðÔnæ™7w¢ˆ™GWS[Úº ¤ÔP§zÊ1¥Ìã0Ä©íÓ¿Ê$šO?õ³ §NÏøð§gü¼Ñg®'Ãí¢Ãà-վȩa Áî ±ßõ„4°ƒÌt‡H™‰þòШƒ Ìy½q˜ ùßÌGPlö†¨åÝOÅ5âÇm¦³…° ’B‚Û7Ž,Û×E¥Ùõ6Ì,10™ &õMniÐ *0ÙµÖÌe䯅;2«àêmXÛÞa·œme3Q½ÅEäÝZ1U‚Ì;6|³6Sýb7¼§F=⣞Ãُß{œŠ3’G7 OÖlPÇ»Yx/ìm‘ Ô\Ï$; }†Xl·ù5¨æÂ#¦ñ¹¤jD3B¹kC†#c A…àŒ&­Ø²Ää{©t^³ª\¾ªŒ{˜ÿÉàÊ?ø>„⺠Ÿº9Ž«mMiL‘Vy³U~ÚÅYèªûEû9eiläm©lýbyøª#ƄœB:¶ ¿k`÷»4*3 ›î+’&måŠ`pÄusŒ’£èìö»Éç+&²¿‚)Ï^ ß7å—~û¨¢?7Å.pjÉFì‡(¹‹2‹ÉôEÉÇ4gê˜GˆÆ #ÅëŊöïTžœµœ!l΀ìlìSˆfÚ ±²~.y:y·³€ü"”µ´3‘sÙȐgÊs­b4AÀš07’ñÎV"ï¦8–±áàÕ`üð"$ޝQߟo=œ|fä&õðp#þfYH‡¨%rð:?ò{a6Er‡É&<8ë]Jº×»­tdÁ¿¥¨ò`ä 0{`³%Ceðlì%§ÝÍ^ ËÂ`À³‘“$t?š®‡gCœ0X:¨eò`”ÑÂqnÁÝjW".öI´L}€\FvÜÁЀ\ªõLÑT9¿Ì íñSû»±T|æbß‹ðªÅ¨Áí™ÿɃ}õV^¶& ºµÿ”N…¯‰ûÅdÎq-  „Á+^¨š‘£¼® +Ç«‚Ä xþ@²LjùUmµ~!Z!¬†Ê/Fþ†@Ú!§ˆÅÚ¸>»ØÜ±Õf!ö|Y¿'®Åy€«õÒĽ2fÁhSàÞÔzîv÷j¤?à7³"ÞÑzp³“8wt›×˜KÈX1Ø_'LÒ +Ûg…ƒÎU‚@ í{ŒJÀ÷ºþ‹qJñª·¯üië©ô?g˜^ÔÉu¨)–jYåŠÜ³¡ýÒâ‰à2‡÷Süyêé8g‹õRÖ{ýÚhiˆßPùÝEƒ`(MÝÆÕÊqÝÆè„n/ÑÊ@ë» +q¡Þ÷€0 E_@º¹e:´QÀŒB‚Ônk Á(Õ£O¢†9=AÖ²sRbñqåÖîƒmû7ÔÁC¬¬+Ƭ.»|i«÷̊îQdB‰@~ŽÙûBn6Ž×× ^¸ý²bQQˆŸÂ<Œýž˜¢§s +7v  Ê\Å?P%}©8Ø7>Œ¶>Ï£»…د¥ ì4ŸŒ¾<î¸jí\}à^QgäÂò}7&~‚Ö­¦hÿðXóÔø³ÀJ½8çVœ° C—ºq‹’«*W”1Wë1ãÌïè¬áz Ÿ“dö\ ZO÷*k½­X)ŠýÈä8Ž$úp«"« ÿUÍ᭍Á²j«™ð„ZFh;’–á½s#è¬L@ô§=¯šnד~û gÜgÑgµ¸gÁT¥Š ‚x°×È[t,ÍÎ8­ «Ÿ/mQÀXÞª73$¢Ïåڝ¯¾ _R«^£€Õ·^{$=ƒUº7¬°ì)ՙ›ªYMv‡,9¼w¸è GŽ£­þAͲæ8»ÎW³ð†i^Ï÷x€Ó[lEµ¹i¾¨´ÝëTžÁՓ ¦ÇLÄF(Ùho$ÓQúQ)þwØßþ8ÑoÆÕîj7ìª9KBÚqÕоö4´+•t,ö9>ÂʶÔT7É W‚Ÿ4ž øœ¾7±—ñ½ƒ9{HÚ_v‚ËÄÈÅ5•Äñ¤M¿íeùÎbS!ÄK>!<™bã¿®‚4È q¹7=¬­™ 0A!ëèËuô [ïîP ‹auP‚êЁҞj7íAÈ86Mj®Iê˜úøX~H6! ;¥óöº¯$®«Î+ªÜc·Õc“櫪҃ªä‡UÀy¯Ù@®«V­ÌlÏê*‘É=‘ž—b¿KՃч“ãà)z²8ïŠß4·…pÛ_؋‘̀랧3¤ë‡`ìúLj˜PÕ!}âA{‹¤ö,ÐÑ{sœà [¶ãG§^7.BÅÜ,`v4÷Í ¥‚n…~“ ¨N1ÍZ–|/òZ¶šø…ªÕ³Åaè­[;ù`h?.ßAñp¿vƒO€¶ÜýøQuêøDøóž²aÔè^4)ëH;–‚ô¬O¨:wÓoMg­ªö °'߀Å66y°¯N"=uSê ¨“¨› +˜(m€Úù7§lòοä„m€ÝÕ^ª9,¯m/´¦ˆ;[‰ °%E­®×n1µÉx¹)FߨÝQ·]¹£nîïжOøNO÷?ü“õøOêƒýå¾^§ ÿpœ]­ÿ„ÿ`¶öŽþ!mï} ¨DÏÞÈ*3÷’ê'BÕiû*l)´fÔt §5ª#ŽÎÁ\u¦`¤tŸdÌÊ։q·Ævf’ÇnNÙùêkç¬Ü^HBâ¯ó$ªÏ©& !Ê©“›ñ@gØÁŠð:§—¶0±CJÈß–öDpKbTIØkÑÔq³mSàÎY7™¯9×ó܁pi •Þ@ô<„ ö«-®I'Ÿ)¤/di}ȪFÖ +®JbÄÏ݈áltš_ÔjE~œé¿h¨ßŽBԒǷ÷*7ëªlÜ£V©Œóû!ëN›ßêôØzq…, ™K${7ÈG<ÁõŠ9éÆH÷³¬÷o¸£}´7ÛC}Çî8ßrû7܉¾äM÷*o¹Q³':صIý•7ªŽxÚ;»6ÇÂRE¼`íŒðÿ÷[@Qìo“±dUٝ‰¶qóéåÜDŸíç—r¸ ºÛ›$ùöc.ʛ²ÿU_‹æÿÑc×Û÷ØÃKQã­~ÿ2…©1ÿQ#šžŠJ×<‡ô'«w)~Ù.Y²AF0S[3cÄ Ýt‰û½ÈGÿU/ùڔs¦<{ã$/’‘h_=+Í¢©„nÛ_†¯‡$¾çÿTÂ7(ˆ&Xþ$ГCüÒò~礘£ùú­zÔÊ,è +qKÍðJ"%æýÏôL-b˜öîÀ˜ÚíÓݳƒÄ@p©ÇÎñýòÔKÛgLðê0~Šf»¶*ðSNkþp3û³ö­ñLílúDî(â˜>ã ×¼`û¹p;]³¹LrqCQ†)®$JP¼öL¹üò‚çs°aº`˜¦å0HE¬À!] Ý2ìদ>za¿Q®ÞJ B¯È(PÊ፣áP‹’ÿ€’C'ß4?ó1&}öf}ø„/~ß}R†?p™zúI›Ýõ)X|ýýŠ¿ø¦Q»hŸô:Ú°Cˆ€škáÀeÊÅ Nb¤ÌäæÐÿS•ôJ&:Ž>÷àÞàDÿ³éD,S$½ñ Õí Ô£D/K/$™%태=¼Sú%œÐƒ3‘ÛÉolšïH_¨¯(_¥#¦ÚAL°êKà}ƒo.å2côJ/Gïû7Á4Ýæ`Êπ½ÈÜg¹×|öŸüÓI=4ýܾüÑ'јê~øŽP:ï(er‡ûp¼ÑþܟïÈ9@[Ų€˜rí|I>†ã¼qöù[Œ|ÕÆ>nãý×ùˌ~â㹸ÇÎÜcç®1ß­þ¡êeÉ?¸Ç]q q޾ã…Æ;ŒvWð·ð×ð÷ñìî1ân1Ѹǀ÷ë÷l‡¼ðÛÃ=œ@ôP‘zú‚Ã'«f8bôõ†OG8bóõ†O6ˆá‹ËÔÏóïycÄoàn ïÆóî1÷&=ÏéÔ#´–¾(úýÍU®?¤>*ŸÔŸÇõTñô•1æEGÔ %—¢—§ÔR“ ¤¿òaŽP‘Ώ’-çm’(¼$··QÎyß·B¨™Çó‘I`yY¿Ýä‡&ý¤[Òö©ÑÉt}ù^ »` £dulRôøƒÿ³?üIÿâÿv?üYÿÔN weH?_`ºçÆIî¼þëõ×ïý~÷–xs3¿Ð×Q¢¦ÙKÆú¸Þàå+îðr•÷–š<¡§)o|‰³ŒT3çêŽRÎó')ds(iÇÉ9ëF-Ž]ãˆßÚX‰!ÕÕށzµÈN&Ü¢Ä=¹ÇÒ)¸ÂmxL¦¿ ¬â}"šnó­úçŸ9F?ÞÂðè:=iN–ŸÂ™· m7ê›Gú§ÑæÓ`,áƒÈ‡—©å#¬¢ aÃ2VNµ‘— 5Ø©'Úî¡F*aàKə‡(ÚpÖa£‡ÉsÇCȖiõ²Õ +ʆ¶b¡YTÖâÉ4Ïh,9˜9y¨µ¹&ˆáÛA’¸i 66¡ÃžB)’›ÙÅ@Øú6JîºÏ¿xÖf£•Ã[OO÷•)ºët(,WD‚ÕpôpMn’‰­ïE( D~š‡u/SCéàè}Dûï 0Ðû +lWێTL7!‰ gæÍBb}®lçèì½oÕâßo]þoèø6^Ïç4Î~ùLçÿ¿ÛÿïÅÜùÝÈné¹ñø;Ÿ$K ðë.þ¿ƒ™ðd)4Û ×¿ª‡ñ¦³ìޚsÍú8™Læ>Q·qÀâÖõ3O?%¾ðå6ÔßÛÈ®î|ºçÈêÕáŸÿ ¶7säpw>C‡ÿŸ"c¹ò,?öò';Ÿ%“ÑtÞðëùžüæªCÌõ2žlΛÊ}óïµ¼|3Qw‹éó=Meϒ¡ÖgœtÙÏCÝKËY®øþm¶“'säÄw>3³ïý¯Î³² ÖþÆ­ÄOË ±®g×ÿ¢—¡â<ò§uú Ôå÷_®¿]~ºýuúëõ×ë¯×_®¿]~ºýuúëõ×ë¯×_®¿]~ºýuúëõ×ë¯×_®¿]~ºýuúëõ×ïÿþIÛ?˜Xú\íb|Q €µ‚'U֛ï€#Ж±=㲜V'»bJJÄöŒBÖIXƒï;Չ‡j±do¿MˆMŠÄÿSµ˜V'æ1 Y…b~;µ˜V'à± Y…bo…¬Â±7LBÚ5X>A×oºV!k$¬O8Ä-g‰öÌBÖqXŸÞ¹Äo¼‹÷ԚÄçØ‚·Û¬Niˆ'=Áò6†û“7ÝìßxP÷íã}õû¾›îúYøßws}ƛîˆ+‹ºÄ×1B¬O–À<$PÛþo¾œ7ý€+˜³oû!eæßö2 ¿ì¡Ž›ØË$6ÿ›ïþÀa·ý€+Úoû¶ŸV +÷ç†ÿ°vÐmÿ7Þ7ý€, oûWo†ßö(U ¿ìՈ ¿ìÚômÿå®þÀ=ZR°Dê¾$7ý€z±·ý€z±¡·ý€ÀÄ%ëォIÙþï{÷zICèƒÐ QY¶yõ–‡«Ù`׿î§czID—„Åm# !ªÄS§Ì´ò«[ª•*%ª +ß*µG²E@E %V«Kï£*Ñj€ÿÿ¿ÿßß}ÞöI¹k¯®nܯ¸ÀÜÜÞ¸;ÀÜÍÌÞðw3s=¹ìÜÍüßÀ ÌÜçï3xÛ¹¿€âoàkO^¶½m–: uŽ ½[@—ò·õ‚þVçÂþVñ½œ€Kù[úá½_öþc$Зð,Âþ<Ž ÷ƒ¸Œ%üx¨/àB(…üx`(/ï\¸KøaþBþðuÁD¿•¾P/ïœpKøzGþð:d¿¼·!/ï§°KûÀ×^þð9îS÷žÞP/ïžÀKûÀç¬þðuƄ¿¼zA/Køó½p_Þ<À—÷Ï(%ýàsÈ xñ‚_Þ<@—÷Ï%ýàsÀ vï‚_݇;À—÷aÎè%ýØs¸ ví‚_ݎ¼—÷aÎÈ%ýØs° _Ö û°çXþì9Õ¿»u”Èä_@÷aΐ%üxH/îÝKøðː_ÊßB÷c×rä¿»r%üØÀ¿uÿ…ü=Pv[Ñ/îÇ_DKù[Ïü­ôA+yð¿»»§%ü­ôa+} _ÊßJñ*»…ü­ôÁ+z¿‰N/ånÀ/ãÞ¡!P:¿•¾ /êÀx—ñ?{…üB¿i‘ü­õ!+v!+z@¿•¾¨/êºKù[û¡+}X_ÊßÞ úë´%ü­ÿH_Ô†/åo­ úÇ®%ýAëÃò_Êß`ò·÷ÂþVû¿¨(!/%ü­ÿ”/åo² øzýþVû@¿‡°/åoð…ü=+z€¿•¿Äò·Ûüy‡¨/åo· ù[Õü­þ0¿%Aü­÷æ û ]#Ɇ ù[î‚þèv2„¿•¾ð/ãÏVÁ+ÔðöLü­÷Át'¿ò_ÏßÛ¿€Œò·ù‚þVü ¿•¿ /Ë%ýÐiMI¥P û‘ëÀr_Êݘ_ǹFÂþVüP¿•¿/â}Z ùš?_܂p¨Kù[Øü­ù+{¿€3‚÷#׭俕¿Î÷#׳俹&@—ò·´ ù[òÂþVö¡rha/åoÌ ù[óBþVü࿕»P¿•½°_Êߞò·· ù[ôþVý¿•¿H/åoÓ ù¶g俛§ÎKù[õBþVý`¿ŽÙ/åopò·úBþVÿ¬/æËè’þ%•€¿ÍHñ%¯…üýMˆKù[öBþVý ¿Šòþb +P—ñä§`¿•¿p/åoöü4€¿•¿x/à=݅ü­îÂþ:ë@¿•½è_ÊÞø/åo~ñ×fü­ðþVø!>±K¾_¨•Ä«ßJWïf³’Šþo ɋ¦V./ŠãgR€¢µÙU¹u¹e¨–Ê-“Z(µryJ(µs±jÜeh×W¾ }Yš„¿Sj_ø…ÿ¶/û0—‡C'­êõÿª]W2¸”[vñÊe\kህ“&ñêÍD„¬Õ²òîàW‹¶/ÒÔ¿û1'3Â;æ#x?5xÍ⸍Ê?ʸ‚Àñ2ÿëËþYÓ¦ýH(þú½Ì”Pd¼(Dŗ&s ½z÷Ã÷͏è*|Sc©÷Â@]u^æú꣠÷…ñ‘ ÿ¯/þÌ¿ö£+{ÊEx¸ˆüø²»ñv¥ÿ¶¤Ç•Óª ›4OU@ö’’‘}$BÿÚõT]UäHýUï3–æ)¤[˜[,·2·4¶]nmlÂìn2å~—_eqÁ]79úÀÊ®ÅÔW¥ø1A7ë<ؒY¯×¿$ÎоK\0Ã>˜óò[‚¹DVP_˜Ù¯Æ†I0°2ùè–س´GâÖ%Ù 3‹õ-?f–ÒÓ}i¿´¢9keoOdξۓàÄ»C‹´W‹²$­í“”mWÃÚ.¯ãÙÚ+ôí 1m”‹´++B+x¨N¾ÓÉ´UÍúÓʧ+X+¬ŸLÃ=N¿Ik¤‰¤Ùâ¢i-´ŒÓ#ٔÚzk+‡´Ý7¬:ðÍn2Vš¿â©î²Ouëk_Ê©¹¦×¦Hé¡ô÷ÞíÇ¿­ÅÊÓ11­|Veu³R´ßΫ™oÑ;xBÊ¡p¦¯×¹%º›5ì!’3¦ïÞ¸¦ÒZÓi"Si-©‹;i6eñª¾ /Æ^ُsÀ®-© +ýA­¼Mˋni‰.40¯’Á…wÍC’ñ!(‹ aW¥‡a˜.”·7B^Jè2ƒÖ³†%S¨»1ðJýûÿʒü(IjÒf\µËKæÑmb‚ +anl{] ¾•yn€Ïê£U̲ ի͹ÜÝúȽ;’úßìÒÜn­5Ž:w6¨²yL­.´"؉”-‰‰œ§“¯ä#k;îÅW9ØIÊàׇM'¬‹¹éïIȞ÷rä¿as’jç£ÌÊJ»~楕\і/˜Á®Æk…‹ºý¸»ª–ë˜_U´ÒU´ÙbÖº“/˜æòÜÇ3IiûùQýÛEe-“´¢?pƒY+§D‰´7 C¤v´5äև +W™´Wê/eêÍ/|³´2h'¾šVvG´‘¬°rBĊ­W}ÉÄ=hiI´GìÖ°v"5D˜X®Ÿ…›¹º[¨@¶¨ÕVꫵZ-V—U×j»=V§USÜh;€Ë.bWiôZ}.Ÿ®Óöz}NŸY§ïôàOòäOø~î£þÂ,Þf„’DH¤î^ ¾ƒ¼’Ë^œo1—¯‰¹/½_¹¨Àñ’òÝ×ëÿølCüt‘º@¯×>óýOä% 힀”3èÂWûۉp#ó{4÷}Ÿ ”3ÅüÃb·æë´6pþ1èÓpß*Ÿ€æ“oø¬6¿´Cݹˆ m[cô«$2 "NEç]&J'1!d9ÈÀñö0•Õ#¨ážiÌi(ÄÎp?—r=1›ec¡ÊócÛ(•(+±çè|º®)‘@àÞ2^«vÏvl¿%Vì{câÞ0żjó‘dÊÔÓË$5³ˆ‚òÙøâF“À\ß,̐ (£Ô¬]Ýýú' ž¥§ €àõQæ¦gšiÚ^/f»”̝s98ÂkO•Œ&´òHZh’‚±¢Kü€Œ˜ê:&–Ùøv%‡"ú¬)Û8 +Ðkׇ-€Ž2ÌwZL¹@2!¡ŸÚܙ1®91aê,W¾Úº‹à1äÁ0´[ú( +–áîxs(éĦQçÊGúäHz ²ðƙ §€Nó¶_¼Ú-ÿ±O>5[¶í~-Oñ%¸þCß§Bo5ú™ÜÙ½‰(÷€-㯧–w$þ·+¿ø÷+á<®’þ{•ÿò)Ð룏¥ü[¿ä)Ðí¿ú7µëR7³ë¿°okã>Q½_z7¤oSÒüCz¾çr}rpzçŸæèw›q÷¼-¸õÐq/ÔN +Ýå8nÅ ¡õ³UiÃÊzƒ)ó˜—þÿǔó¼<§xi_÷P5°ªIÈ?yÅ:@·@«EÑÒErJe ‡"‚¯‰–‡Ê¶Áõ¨öÖžÒ#¸64_!‚Çç9ŠT0”ÝêDÙòí`‘‚,Ö ¢æ€]3ºÀûàtÖWw˜.j]Õɯ_®„¼<ü&î‚ìnÐM»Í*儒óù)Ð띶zâOÞò9KϜê“X`COp…š·§Lñ3å ðë݊ÀÞÁKŸ‰è‹w¥»§&mCÎeV»àøù.@¾öñò*=ñò.ãm'ͅ«t@Wë²&cÙw,‚Æíxy@ƒP Á:‘ûè0óo Ãé_…e4 º‚lð•ŒL¡@K)3$k€ãŠön/IÃP™AbА&Ô$™#ð€=ïmÎY´§D0 ½{¯ãˆÕ"-A♧M›gÃC>ÔÁü²ºox¾5‡¯W{^¿€é](%yá½h`í[ SæäÉN³¡˜h4³\́X„”RYÐñAo”Cã¸åOî}ºÎ>¬Æ + +•fØ$Ψ+A͇“¤§hMƒ·@¤€÷Eœ}SâÁœçê ««çßЩÀlß0òaìgüö _¤Ó#8 Ïgçgk€n€LêÈæ¬U‰Ÿ<çrtˆ;ktß)”à%Ÿ|%€7íÈK$ÌóÎ7<Áà.R}¿6fݽctÔ¯\™ìËêÇéø–çàsžO&ŸÀ=¡¤‚§@_kÅñ`Ïæ_TÄA£•?{¯y€¥Í|Úó‘á7„ªVçNvNŸìk¨4~JvGAPô6eKê5MÉ×qüÎB7––W#½ŽF("M¸ñЙë¯h`õÏ2öX̸dÕðÃLõX †ØÊºƒ?¶AP]o#ÃÇR+ßcgWžÆÍVtlq¯šÈKcë$µ}k·_iñÏIÔòô¶1fº–pgíje¨„î-’ÓòužÅÄô]ƒGAÚсj£Ûø{%uvAʑ´ Æ´ã@ •;šĺq¤m¦ðž¢›WA =¯Kl¡Žrª:fE§`O-5Y—¡±Yô„² if1bKVœé=Ž›©–Y´Çp¬tì]œB:pP‚WÝûeù?apÑ>Ú1õû˞ÔW'1Ætø¡ãª3ÏAãìörµ[ m$§ªé±|uõÖٚ DÁô0Ûõú&nÐT6Ž Z#à®NšmpC)EO4æ#p1d½êoŽDÁ`’8º=ڂõK#I<”mû-‚s ->ÌK)¼í!­0z­GÕL³(Œª3=Ʋ ›·×†í ¬f>9à ;‹ô{<[zÁgºpæ®[táÒo¨sýß? ¤Ku@áÕ^d¬»ªË×tn\Õäkº7JËAC(sn²æ9ð‡6C€î¸HbEý~ó@ùE{HÙ®å =6ìPö%͹†IÔsãáGœ³®Æ:Š&ˆ £è%ÔÙ÷N`ÎDg‹9‹hm‹8ÔA‘5Öþ!ó›Û÷æÀ7[j Ââ[FèæK5¾µ’ô?µ._ ÛÝ·OXèC#I‹Xiï™p\ÁñNò £ÛT¤Ùۖ©?t +3$õ[êÏ®»q“Z +ÐÍnu ¥0[E²ovJ¤:hÛ³*ßTÙâ¢?ï\ÐèwUX +ìcàt¼­ñê}˅—Ñ|a@~ÒéøÐ¾Ý¡Þg¢—l_´·¢™aË« ã2É¿·AË? Á‚bÃ:[}»Gç.‰šVÆg¼TÁì‚~øâÚøsπ¶d@7§ÚNåTš¬n…øC:­ÎÕÆ›8¸ÜIÒá£õ[OYÑ$Þâ¼íÕlßΞÕo§rAp`"·Eù£^Òõ ¡´ÿ·S}=á¿¶/Ö²U;éó˜+ÀxØ¥´‚Có¬aÎÍ.¿@µ"ÉÒU«}jA—*Õ¹ÐÄ´9ÎЦ€Y_`ÀÎÁ[ û— ÐáìΠÝE†7ƒ­½·Âw#Ë–8„ˆ°[;’SíOÿÓPÈ®{KÏsï«2gA¢" ýÌÇÒh‡Җ mD´D‡W9¶ƒ«žÜø)ÿ"p¤ƒ.à"yù÷Õ:±;C–[Ͼ¬å ¤ÿß7˜ùOÝ˜Ò †¦‘@%ãYp|ÿŸ}S­:̌¸Q£‘MúºmtºàÓ#â Ï Õç8¨ÀÍï ÄÖÛÅH3ÃK,×cý×§ÿt¶S7xèÛ0ƒ.ÞÃ>Õx…òrїٻà@…mìZe$N p¶Ž0¤ŸÃBGn„ì¯=}YɃ:VÂÕU(aR8æÚâ™>?êÞLqLRžÂŒëê›( ×;ëØ6+êAo·Úl!¥ç°‹øqþ¤•pØbL@tôÈG¸ð¾§0<´Ð»ŽUûRηíÅpÌZ„NÕñѨ.$„S¼+>±ž@`­o ”uÐ kýÙ.¡.‘ž·üù/áo`â1†&šÔ‹½ÍçÓ<‰ë!­@Ac¨=·3™Ú€qc`Wʀ_Hm.I¡sñ©p†ýô¯=›-¾#ìUØ£§?´OìՏ–ŒF–7+"6PgFßSՋ6[|Wc0þº¿Iu;$p$úC^ï¨z씉C‹/VƒŒ&å»§L÷i…÷Äf؁-åBǍ]K1ÀK•¨@kæ-?4}(ïqµ ´ +¤¼ nãðæ—,®çà€ï½ŒêY³‚‰»U:Ç8”-G¿Ý-0äÀf'ԉqV€è$)žX™ÖIƞÊw¨ÎµßbaEõÙ¶Èüqáb_„€KJaf—hޝ'ú0Kžb“†L1=äV™˜Îïk.-0Ê,Ã÷Ú7/¬:^q0)Q…¯©½²ù.º-œv3ŸþF݇“.ÿÑ8üä9û'ýƒ¯˜‡/Žšÿýâÿ?—uuºŒ:Ý¬‡/ü“Z=ɱVëÚyg5Ï˂‰ÚoüI·ŒÅÿÜ«‹íJEÿÙÍMw×l§¢³–c寥šå®Š+=ç³öÌ¢iß\`KÀå#û4­©£>B†~ї¾¸À€©áû[‰5]ÞM•ÿÜCÑïí>BSqæ÷zê•õtÜŸ§{ÍÖØÎ{qzÊÆ öú?#%ÌýˆW’æ¼>‡—äû›想ï':ÿ#¢í»;ÈãoøŒ ¿Ÿ»GÿamëȃL`Ÿƒ'Zé›ù_?ëu/>®§ªèùXÏÍ»ô³Oü)§ÎÖkâèè4ù¯P:{ÉzaÖZS«äe=l4S½Î帯mGYÎùmÅûѕÆë8ïO¯ú´[ÏG]§[O¨é{g ¿¬Ô¹ßv +:û”õäê~Î⇿Þôuž†§’QÕæ‰*I»šÿ N=`{0¶ß0Î8÷ÏïúÿõèõÉ#öÓ?/MžØçïQ׿{ûÇþ¸$Gø$tÔbßíèýùü¦ã ´írÓæðñÁ¾ðDTÚB¯¥*h#vO5Áù>[¿8«ß¿Kx¶(+¯‡Ìɵ@|d»<ëW’»R$g¢‚õGËØ¢^—J–˜ø¯y5Óøs“øˆ+²d§¸Ð7|‰|HezTGì + L¥ӎ3Ee›8ý ãФPÑËe^Àbô¼åè2®WŸò.c럞öß ë"˜#e^º¿fŸ®–ì¾—ø:)cĺDô^òˆè Ë«Ðt‘CH†¸…hKϛëYÊ.ö–MñÆÈº´ä^ÛøäUz¶pÔy¢o±˜0eÁ¾&;)ñt)è Ãée àäP2°: öú Óñwcõ¢?ó¹:#¡68˜Ùدގ\|S<"ÐÙ)‘Ò +ÝëÈ&×9ò.Ž€S ôôhcË·J~*%Æ üÆ(?+•¿µsÐ ¶)vxGͦbm {ôhËÏþØ:µ–èo÷lÄ¿ ˆ>Òÿ¸ÇËß®ð>ýю•¶2ˆŒ™cÐ|øE¿ÉfÊ&Á{1ý«,å½ÂÔ#åð.̗™Ü±å|tÌF<ÖµÈÆsÜ<ÖyéXÃ8ÇO~éJ!Ð[ Jt‡Žß;Ì÷ґâÈYâbÇãň5Vϓ%u ̓¿í‹k¢G hbŸ2RkhíE Š@ðe&„ yÄ«ï CçíS¸Kà‹0dʑ9:‡ŒÀϽVg”kL¦Á@¾‹ˆ‡ÂA8šbÄ+UÓYÙ¿º,A=g“ÿ°¶^=W{cŠíëcÄڳМNGdŒ»E4ˆƒTÐ(‘ª{;èý3ÿ €jU¨ŸZØ-l?å²"áÜ<»‹|9%½¨·¼‹{˜ojƋtfQOŠ-Î3áÞzÞh%RÝ`óhêq“½‹kÃÖñg-¼`»Vtu¡a_ÂïÖc6Y$µXéôI|õ'3—SšF'z>”Þ´‰‹d—ŽV覦“4»ƒi–âøÐ†{c͑»:bê,šv߯m¬”$7?»m 0:`JL¶ž›†@Z‘¡¥ÛÏ} xó×ÈÌdÆDpûß$1”›&}ôu‡9çƒr_y´Â©Ñ‚Có}ñÅm4ëÌ%òGÑ֟Œ0€é¢BÉ=OJ¡“„¼çÝDS½œ%çÏBJœ@û÷éð[||æc0‰‹‰»’åþTÖ6Ð'üŠªáJ?4úÕû¡å]›Ç+ÞÊàÖ3°Y…ÏM|V½`+ +ìñìJ±d̞?¯*}ªÛ½¦*%9;Ί®M$WïÆÐÀó®½4!­-¡³ª¿˜ÐºCoôuû_W|ò Ā¢y«4œè¡«±dP +|‚õýàÛaó’ŠDþŽû dîáґ ðÛ±¯g¬@Mx~6¾¾[H5õ:Ù¦.1eÏÛ:Žtû?ÜÇÇÿà4_ðϑ:¶u ¡ŠE‹Sf'lfÅT¡ÐM@é`ާv—Å¥¸Ä”…L€çßvÕFÃF˜ëãII 3O}û‡sváÝ Rx¶( £Ÿ¸ÇÈúðI5¯gÓQ _ÈÙ°å¶Ê&,€ ЧâU€¡Z<Ø¿ñ'o´Åÿ j– Ó£ݺ»æõK ÊgkŽÕp¡¾ÅE'¬‡aç:£oŒìÏh‘¦nßQÕΤHˆ<äÔi˜‰XÌæHêD~»dAœ9 ìý”‘‰Ó>Cˆ `ÓÑH–:n‚†ü·Qùy[k.Û:×ó†Cò£kûӈ /ù.8ÃIîí†çÅ̸Áwwq€r[;¯y=¢.ßöû£ï(ãÀîM‰µIÈ«¾Nð½åts¼ø—¹ ÆGËFŒ8À¹Hþó+rÖÓî±ùìçiŠoø}ÝO)ÃaëÒÄõݍ78ç +0ýêy;ü# ÿÛ;ûÿÿªyÎÎp9ë.»Êå?÷G¦žô•>Ò½l†ƒ«ÂöߥëóÿBò*>ò*ÇçŒGùÿ¾ïŸûçþÿ¿õý#boí8GAŠÐ75¼%|½6vIýVÆóšÀü]ÿ9åÜl›'røñ“]Ìw§ W©OøÉ®ãÔ=Ÿý:|ø»Ôªù©_–Mw§ñ/¨ð+|KïîèÙxÿ™JUƒÄšß2ŒŸK3û¤×|"~šM¿í“]Ó&y '\Ðô0͋¾Bâ#RNñÅl1_y_õœUák½G;­´z@†·ëPMû,e’î!ùpg¥‡¨äk(×ñ6z_Í +içõÕÏBÅ$œìO(?^ÊÚV–ø{äW99p¿,åìb:͌/pTyÞ_ȶpgæ|üj{ÍՔWС:¯áÞî%‹#KÀœ´]GGÖÜÝm_¸Žv{ÇÒí®Å¦»’öŽ>ŏ-[ëÑZîKÑ7èÿBßT¬Z:ùÃçßM« ËŒØÌڊpg dWC"}áÌ_ýïwî6;ò¼ròêcô\†Žøƒß6’?vqª˜^LÛÁŸè|duÒªÄx€æ¾±Žµã5Åñ~•·!õ‹DÊh3wõËßÞ΁/ïvöd]VÇ%lÎáFèLýk±3§Ý)†O $g±6‘ÁÇ.š)l晙Eʱ»”Ù‚ò¹f[¹N¤:ëÌÂnåNÏ ‹—$Ýʕ4&}ÌýîKår⛹R\NW'mÜ¡3¥EËÛU7/b¹'ègÒjågPÏ<‹–Å»•k4hrHDp»?AïÊ©ˆ%ùîzž²°Aã@”¨2c0£>iŽòJ ÍH°ªB•ƒ›tö^{‘ÑõõjŽ2ƒ€§¼lɜþæ§Ø>œ5*Õ8–ØòÏeÙóÐü +c‚§²½}£Õçùêzž¥¯›|_øÈêl‹”º±¾Ó!È ðÜèŸ^¿€†»îÑ¥+ÿfgÙöfd’9HŽÌ7M@R€©Ÿ$3 ŠŽ«¨ @5ˆš=LdÌîjïjïuÝÛUÝ[_;ÚõÜ×zŽïvX(@7uU‚*ý UTP€ ?þýûÿßffLÈ„Eo[W»ç{ç{oñoÛÀ¾yožw{âÞâß@w‰x·…oñ/"ð­ôÞðíôÓÃÝ¥¶ÛdŽ)K$2DÐX)Ãd¸Á´ö@G;ÔÒ$B\¬<”oL ’%ùßï ø5BÍø”1Œ¤Oû{HbÍÿè"ñ5¨ó¡¢Åc/š2CˆNôÄ Q×â"xc[÷J€¾Ñåȋ8Y‰"äfõ:DñWøHva7V&_*ìHÞ²©º_Ål?ØæßÛ³ÿ˛ —;‘úL‡À ÖþÀãÀí֞ÐUßÑê!`æ‚ΨW¡ ±ì’x‡©%¨ ×ü3󽬠(=^9ÔA\°#²½#l²xn &9a0Ænp{Úyô2CŒr†´#™zÒ0ºm5?„%+5L.^…˽Ã0¹rpÌ.[GâQÝi Ø(„Åû—t)z°>„Ÿ·ÐŠ­”Á)cl:He0€må…Í'žúz”$.`?7ñÃ:%ôOùGP3̝!âÒ!õ-w£-— €Z4Fm-bf؏éÓfB/1iX¼N_Óü]ô¥÷ýñûÛ0w=HGù“f0fÅEÝÏñ¨¦¶žÅ kƒËJ õ¦ë¤q?C¹I’•úàÈYCÁWÂÂä”ff´èYB—ÉaÁ¾×¢0éä²®¸³x‡MØM:åâïÁ²uAä4넖p ˆêÍ‚‚Š8º€ÿ„†¥‡ÊzOâB&ò,)`yÁXâ iA*íAÆƒw$穸D»ˆ‚Ðû|Š!*÷óé§ŒGÒà™à‹ÊÒ?ˆTÒì•ÅwDÐúãdMž6gî“gøI²–á³M‰³pن&Ìù6^Á²6ÒõLZ<„±ÏÇú;Õç+-̖-å/,ZY\Ztvn¼Z~ÑyÛBƒgÿ æŸi\‰Tï²D¢Û•ú¼CÞþ#mo·{îòڋ.¿FYS.fB=ÎÐ&óƼÃlB7µÂ,Foâ4#˃d"±Í“¼6:¼ åZ¼0½@V½dˆUrzÞ €»Ã§ÜoŠÆïŽH°=R°EwÖ@ñ(·ÁÐH¦£³Ä Ÿ˜~â@Ïà[xeÑ֓³à'g tjý²l A͸ô|ZRmÚêW:XjåID3ù^°±J²ÍˆÀG|F"{ÔњPøžÊä‰Û%T÷Õøáæí­ë„kɈ¡cÙe#  NŸ§qºGó>*î"O÷*­‹ b“ø”¤gˆ°ã®îýßÁKÀðεõ쉥û¤]¾+¯{µ«8 ’¸®Ër†ÄòGÊ,–ÃÄHþ0gw•ø¡hz'ƒ?íìßô¿9‚ü‡aù×ÙGly<„:þBß9®î2ºâÐ¥öûØßg#ÒQȉoÿRßô8÷ýßG÷ÑýôÌw‰©CË·Qs|¡éK_=]§P’ù[&-묶б»vwµÕéç†WO;¿¸£»õ{ý˶÷nÑá+©2“IøåsðšÞÿÁÚ<(^§úæ@|"§íÐäJçíÏ1÷»˜ããL€àíö- t^K¶ì.Û°äL€öŒ ovœL%`˜Vcy^¥Š·äŽO Îwð #nu h³"¨:ãWG¬;‰\* +X§vqqÈÙ¥Íîbz7¸ÜA'â^,aÈ}ÓÈ¡¼d&Ќ=‡Ðþ¶Mͺ?U‰RáÌvô­\?œqˆäÐ!֓€ èy®=‡Ìü/¢<×÷àšãþ‡Ž§xpTŒ‚kgj·ÛšÙãAq+cÿxycì ©ÿ>‹fu£\qûŠ‚”B ŸJJ±ïTqüÝ$ ÅøÂŽ6æéûÕªW¼œ×¨°ˆî·Å°vt‡íÜÙù§À—c-ÈО5–HÎ-8‚Ë®=ÜìBS² QD{ÆÌùÆÑI͵_–¸Ùƒ-t?†ü þOêÇU÷KNª% …Rd—î)Ùv½r½¡¼£ØAŽö'hm):j ¸rS&=è¯X±3[Å3ZË7 Ê+a±ÆbÇøPkºë¤òãø‘â9õ¼DòÑ[þ”òÛdûpæÅÿµl_~Sbÿú¡¾÷ñf¿þ2d'ïs/Ã]p—‡¨|’ä9ãÈ< ô¤B9¨ÿûÞ>ç;Üèx³˜«SwWèE,× +kõpnéùÈÃ÷¦APÿÓ1nÕzËfKîû§ÓTt^šTÿ삧½ˆ}ë—|„휃}¡ó{_Ô,?suœŽæá³ ÖÔÿ¿x¥§‹€:Ès:]×spêÞôù=êkþØø?l‡ì‚§……`H'ñÔ¼v[!¯FROy5Eèg¥?¢E_‚RqÝ7W¼ü?A±Ð_9î0>4=}]럨ÿõžQ°ÙÛÅv×K>lôÑÂT½•^ï*Q…VÇñrì[ᙬ¶šãµ~÷MŸüêtóú‹áÆo?šþ½Ü²ùŠM=‡ÎBÈÃ\ÁUwS÷yМ#2=³r—í˜ò ?9ÓQ«’`ù¡>0ä,m¿…‘Å ;oOƒ½eîQ|?&}•µ?îóίt‚]ù-™‚¨õ»{D·ÛŒ”æØødö×}Ò6Ád§,2SÚÀ)B[zK²wÕâ‰* “¸Ä$h 6_QÞÌý‘ +…³¯bԋ@g§!`ë&³ã óÉvB¦ø}æi ,^Tp³ÐžûZ~>\…ʆ5ña•—™f§.nŸý%gŠmŒ^¬Ê}¸dŸÙä¤Xï÷ªŠP %à —ûWl†I¥˜m³ohë3`é§ybæ‰kw4`´~Ad¦g^êxD*¦©¤ö;ãD 6± +MnŸÛ: °"… A3§°i¡J¯„†ŽlC™€ØØ*LîÜ0)PR[¹¤ PðÍ¢Z9Ep%·&d¶F‚È{oV².£nG¦¿¿¢¤ãŸë‰ÎŒ&¦‰Œ”.:-Õ{1tY àªèáM”WY +ÂïE¸áÆ>¯ƒ(2õ1Q +y´‹¬Šêü%@ŸD$MR2Ïå¸.rb¥Bú.nï)—gd” +%¦ÞHXhv™ôʑÿšHmñù¦úºiGè¥AỦ + æ¥vP¥ÚjöiçÄÑ©m+Pr‡é]Õ³£N hI¦ž+WŸ +h¦Éª².)ÈsÿèØyÇØ·³`u¿Ñ°>~.ÀߎÁjqˆm"ìÓV-N$5yð¯­5BÕ7rÕîì‰á?Çsw€ŽŸŒÏ#±¾hä.îØÿ¾Äîœý‘Ïìüg7û‚ñ†¢<¢% ¦ôõ¿wþé—u-ÝMwWH9 n…ECX¬{\‹ìš,¶õ9+¿üØÙgo'œþã’þؕ{"êgòÿÿ-•©|—ϯùå0yc‘Q¶¬¹«á'1C´?ïGá9—ÉÃýÞx›…ˆ1g°YvL[Ôñ7 Càö’¾æO»‰W”;PîºGýYÌm +Âa0“²rD®‘ `„ÍWIC=ú­ÆêÅb¡þ5ç#§øh*íC«º~‚0è¹2ßÄ··KO²û2_Œñ2`#Ó4û±Yˆ¦ˆÍ=쒖EûŽ@%÷ˆ*¡]¥}Cl4­ËWxßrlt +•i»ôâ‚SÀ乐±âÑ ™.]XÈÐ!@,˜Ú%¸=™J"6šL_¢ÚQbÊ÷ÁÚ'nlϦæ Êà„% Ѳ}f˜ô:öçÁüBáéôÁ<¼mƒWD_@äp‰…‘5ë +†£ëDŠætkóÓýÊxrÅ%CÌÙý˜¢"v †T7Õ¯O®^ Ï4Ԝqð÷¬¡Éé¹Á$M…F; + ½oY.yͲT¨ªRµ®í;A¡00Ww~IQ¿-¬Y­‰âÈ.ðj ֏%Œ\ŸŒ)ÍÐ(òLžÁ͜‹}^݄\*ôVÂCÂ¥©çݶË;èbä9‘M²MF¹«˜v´Œèx9|ƒp‘ïW7Õ°}·ïø3I¦D•>ÈI ؇gbYZcXVùr$¬ÂAocñCfÁ]ù ›Ä ¤@®Âê7{&Ï„ˆlÙL>â."xÙ»BlíØ]Cfõ¤Ù¨au ›ÿ6g]CfëI³œa"7¡a7õD†Íå —a"7>Âî7j$ˆÊfm…Ü6lB~6ú s ›ì‘‡ ›®F$6oï£7S¡œ´K&<‚1!³ztJ7Ô£6æ¯ïCfïèÝÃfùdU†ÍŒ8žµÈ« ›ØSð ’ Š-OÒ9‹)ѳ^ThބhlÝy6(nPÙ½ªøÙ¿ÀXŸv„HlßÝ_7œ_s ›ýÅêÃfóËäCfêG Nà—þÈlÛäAad:©nþ‚Gr‚ÅŠÀ‰TÌhû ¤AbGå Y/ˆy>©ömgöð9¨ö÷Œ³‚´—¹žÔ Ü1]è2$YÂÞð˜V§¤%Ý4¦'@AÅý¼—£‡`Þ¹lcdÈÙ.‘ýƒýzt°ðo L‹œþª˜7ì.ù +[?„»þE-ŸàAñ…©?nÀöqRïÀ×ÞÖrx™•œšÞL}óC©þ*ì 5xóÀjâýþBá!R=0uÈ?pjCŸä'®ÿÓ"cÿâçpúîWTÿ—} +‹Ê°Êaw¿D)åþ=ÿH??Í3B²düJq«i“Ž\Jr:F-Û_Ö[J_îýÁé×v¸‘£ù +ÂïÉrHãärçÜNÿo¹]î¿gòû•ÎÿóÜ®HòÜY +Û¤~°F”¦‹ÜÃݘŒÂÞl‰&{y¿sÛl&÷;IÂÉö“œ‡†<¼éÊÜïì÷+¤€6C9Z×.îÃæ°}_¥{pùá†oìG³˜“ú»ˆñ?1/…ð%]›¯T +ÆV,h]³O§”VˆŒ3Î_äZL~Kø¡*¨]8ËQ@UèÇí֗Û¶”¾Á)F‡„ê üŠÑL"‘à‘ÖÑM9k•mj9So t(  +ý“ˆ(êï^áSoÎGÆ´·¡õª,v WÍF±g.0Ô88wۄêƒÇƒoÝõ°ÊmÞÛß]òfü•e÷‚€Ãìšð²xa÷Œ“ß/L•„&.+2k÷Ö+Új|A þú¥®µ‰¯Iõ……¢ì| E‰XZ/]°K•×цIs0nzQ*Õ¼l—:\9±Òë¼ÄØÀãddR]±>y¡ì ‘‘>3s50ßX®yÊÍá,“ä—ã%4S å¬I|)DžéÊèßúá²Ó€,´ï­ÈÚÿêUaRiªçã•ãÐs@ãšÓ_žð<— +=Þ„³,C+ß´j.þZ°hé–!4W†’Íʟz¶‹æ7³ôÁãöÅ¿ÒáR?ñ^56üj·8ÉDšcü|d­S$ oᘠ+¹¥æß¬£M[1/©~|å==>þÔñ¶â+ FÀXÂéà›Hö;ûR4|ÇÜ]&fÅ'ÚõÛ µ”K¬(—X¸¬`“M\žþÔ7^[—6ëð{rS&–ûXnXaƒ$Ø(†¸ø#ëÖ%%Å‚é3r° Ò3bhGÁœæv/µ‹¬kÌÎ^ErU™ÙöE@Ø2ƒ/÷ðcr…‘ +(jÈ£3lMgæ­”%‚ÑVP£#(M7.¦ÿâøo$’ÅøîÑIîEx¾!K„46%2䕂ýìx‰}u˜¹x´óëj³UÀ\4ÍñÑýgÉ.Æ-ªÊã%4|òzQåYÝÝ*û捻Ý*4<[Ý+ + 'O¥eo°ûÔ<u»7ÍҎïuÙp:Æùu“5ÁE«aòÓIo¨y.ÂuÇ1{$ÏIq¢'R¤5Sê$Ö‚º|ýŽÂȁtú!–µ£9úÁ“NÄ(#`n·ñ¾WVQ°O¼ŠúÊ4SîCâÆ²z|>,«(ÐOí‡Åeá X88‘++Ž+oéÌrFÊÍ=m¢}œ¨ +K×/öu”|’m@Óm ÄèüÍ>xß6ÚhH§F#*bÍγx½öÆÃt¹Ä÷«²÷¯Ã6ó\r¶. ùSõªu¬íJxÑO3íq)*6hüëÖ¸MAî» ½ï©Á]ed²ðë¼\Q¾Ú¶R"\m,D>¶ùIöCÖX¬ñ›,yiTfŽwûD»}Ëm™n ::ÜÕØ3Æ×™7ۇ»'¯¶éõöÄ7;¼™€l{êfßO°O¨¶– +äòåòmz|ù|§ ±Oœ/—Ò‚É>l¾M`³Ol «E3l$JzùCm♷-™Nˆ(u'-l{¿ ދq¿6%fùÃfí´Ï|·²Vp—› +nfŸX,µ,Ý鍤»tüíùX‘­‡fVEF• áDYp½ë¶ÄGGª6VûE,†ìT²S¯=’`Þ%6aõ:×_‰ &ܱShDäÍ´¦Ñ2àŸ{߈sØ}®°MËR¬^ÙÞZ +ÑôðP.}€ø¢\ÂŽ@8¹fmÒA£.mÍÁüh8¹öãÒ+ÅÈR@\®<\îLÒn-!r ­•–Th›þ½b|2{&ÜØd~Ã|§ :ðˆX‘È¢í¡³O+Þ§¹ñøíËo¿ŸŽØ,KŽÙÞötÃ÷³dh}ö¹{À͖â'¯6LǁÇAý²\­šë:΁ÆçÔ &#½¶‘{»ZXt«>Kì®gòñ%Û6åH?ÍßZŠêB“'âòl6D +›¹oæ=’~b¢(˜,C°ßN"-Ó Nâ~qæXÜHañT+žsÆøb1T(;•oMB…¾²ƒXò|§ÂUyr~ȶ* [YpƒæïŠÉT ûŸÐÆ1fH†¶?þ"æ'Äõâóìúà¶únêOAÌÆe拕~dÜ+xþ¸ü¹ˆ('µ/–& +)ÙË žíòهƒFžà¾Xh<Ðñ¶Çc ô‰Ï³lt®˜Ì7»&°{»ò”å¬N‰Ùµ2ÉFŒÎÍäQg?ÝEBG_ùOd?mô)7…|™µ‡ØÞ†°¶á>³NþHMý82I̎º§ã¨v`n½_“ØW—M¢`Lâré‰* o¢nÁ®}4ûmèöpÛŸg½Áî6Möô{8m<ž›z<‡¸mô“w½‰ØH( +;{‡aG °‰é˜Ÿª í¸ d؛FSÕoaòUÌïOÉV{íòT\“†×Åä± :ê€î¼À.RCÞÌC¦qµãuë¿Ê.6Ää·¥Óo ^ Î՚.£úNn»ÆSG¿ñöVFØ~0!øl‰áOøC|~’Ó~9e‰þ>25=©ŽÇ=¬—Äõg„’ŽõgÔI'%tõgΓfýœ‡«>`š<–wOVsDÙ¬gtõgÂ"_Ü3ºz³òI³¯gtõg¬&ϰÎC՟tÎ;՞AœG«7ŋbÈz³êYݽY³)ÿg(ÎíêÌúϾõglˊõf}G«?Q”G«>ý”7«>Â#@”€¥Z8¬zcÎ2ˆõgÚ@pÀÖ²†õgõÙr¬Ä3ñ^¬Ê”ÅêÎpJ8ÆJ½YßFNRGxV¢ ’ÔÿYF¾o„P†”àJíXFz³ñ˜‘1?b£Õ«V˜±8 "=YÙ±Žõg×±¹z³îªõgÛ±õg׎@rÇùä„üÜn:ìF‰à`ƒ@ÈÅò­x^4¨A©3î˜ ðÃZéß"¶¡”ÆÅÇA±²õÌÞ~-‹1mS×o„s?^/¥²`õ¾3Ï[ÐËCöƒµÕÛÃ:íáa»; ±f•:ÒÇA £|Â94z»{ôÄ|ªö?Çzû„·ˆeHÔ#§aî¶×êÄّãÔv¤J»­Ü×VÖñ짔Ÿ°‹Ý!är>J|gþ×"‰?þ¬FÁÖÈO¢ЭžùÄb­ž÷»¥‘d‹üg¹¼ +<‡¹½ÒsaVl?ë{›ÿpÃ;ê_R¿üo­ù%þëëùË<¸)8®}_cq ôÈûŽ„ù˜øÖql³ËÒ£Н»îQÛP>Û·}´MfíÃþRÛÁœVÓWãL(Í ÙCd0ö\W2tvꜷ;‘&ÓT”  ”ÿÉ1Yü!<Bچ!W^ôAVÿÀEd˵ë&sH,š069üA<>IcLK2 ®~ý†r«&)¥LbdÎctäBÿ‘öoÅ&ÁrdÕZ°Åi—³VÃ;À–¿ï$”üoäÅç"Á•y÷Ú±ë?è}“þ§×?…÷èŸàþïúÓAü°šüÊ̠ƣJIWc}jÓb߇<²Û̞ã õu=ðÉ*òïŽ+ð®¢{û„ÂPŸÿü°Ó÷³ß3ð›yï˜ÀòóE§íæ¹Â`–­ÚMÃýÞ? „޶÷t¯î>ရ€ +˟÷yŸåO°6çýü±©ò ûò÷wšÀ¤_Õ[æWN•2?ßø‘¨{ÊHCæ3}~hvPH©òPÐõ•]¨:¸Ù»ù#؎ئÔL-Ւ,oáë_ʞ‹ÀbH%BxšÄI=üç›ûÃ},‘ÛNˆÝ Yt+Ä"R>µÔ¹ç,‚©mC2Óˬ¹—†U“†x¾û礓³&ˆÀ/½öœ…äת„RæVýÕ9Bgs[2¨œ¬dû°Öò=XûT +ÅYà^[çÍêǘAK+‘ç'n}Xâ¸ÃÎNüN0ýú;Œ?žD­'«¿]8ÃìI³£¿Hq‡‚Mûõӌ?dM˜õӌ>Œ›_®œaþ±6Bœºq‡Æ“fÎrCŒ;kôwàœˆãÀ±oޜãèÎ]¸Ãçç’½œåی>rsàq‡¦œâ¸ÃÍNCq‡¨œˆã€œ†ã½›ˆâççM•4KÅcÛÊn#Œ?18N0øÈn0ö3|‡p_ïîœaü¹µ\aíæ…Å×q6«Œ>JlXyÙ°pŽéƒ0§ëÞ&%i²±VNj3Œ>8›4sj8Ãêfâ8õ,OO5Æ’n;Œ<+íˌ8@ÜÎã;7!Æxrïø¯¿Í ;ìo âwÇpì>KfýæûÈ÷£‚§½Y}ÿjý¶3 =÷ކQü¥.âs÷Ú¨-²?–^[¹²=I!>Ü  +—Û©I?AmÍ&Ü«G¬ö¡†@nòSQ‹ùåx’õPü@’Èn,N PÃ;ƖÃkÇ¸s•R€ÈðR®>7û·²|æÒ‹æäïæ¾t²Ë¹Ÿ™ìªÉlßrørEã +?);ٍ’Ûcr&6Žˆœ|ŒÐŽLDÂËhXZG:|h/êa.ŽþÕRs×ÑÔ_"IýµvØÄA(5T +àÔlÙ·=<І‹y‚‰Jào…c¹‚vc9ùN̍’Æû@{[ChBÐ̓fWü +¨FáρÇï¸Ö+‡Ìë¯dˆþjvÚh®Žýš¾ ÇZZŸ¹{"ÿY[+û‚eäY&zhw +Ûeso+©½¨ŒÀBå½ÔˆÑ÷Ë«Šô‚ìMÑT j4ӑ+ÓúdK߄hø¸ºO>4)襋ðNyT±X^XPž¤'ÈãÙg¾s^22À6k[^Ι@³LÎZoKÁ j’S\‚ÎÝ(Ù;w#~ -[%eõBÍ]_¼² + ø‰ìOðj¨¾ýæÆ†H‰ƒ‡<4§éÿ†ãÊ»œs§àk„Å>´Õ/½ 8¤Ç8Åa/O<Ñ=˜ÁK†TÎþG‘à +IBž¼$`LB´7ø\¥p“Ò™ü‚î©x0‹×w÷0:€Ã“ÇÇ/6)A¨Up˜ÊOc-¢ÜYާs@rg{h‘œˆÏUflo˜ˆÜÙ_ `ýkM^NþPTnð&ÛK"¯€,ãpÿ_ +U!àÁ‡hãÃ+-ø¹MòL¥ž07嫹“v4׉¡ù•‚͗¯flzxKyßø#Ϛ(õ‚§~Yu ,¶¶#w¾¯€˜¦5oŒ„,‘k0z9Iø9ëáæƒSy/´:uÜ%,‰×†€ý€'Fâ§Â—+#Íúö2 Ù +‘±Oå~\¬Û‡OŸ8Çñ«áLUyí3[.¡Y!* K9C—¸+$1JR°ñGÜ}_BÓT“G 5Y0¼­#ýƒMS¡¥ԌÀÌߍ U~¤ ¢Ùåà&·¦Xó+¾ðØNL(ÑÎIý A󤨟³¤";»Òe°‚c^6G®~‘±ƒíQ–݉^T9k¡‹Ã;›}|[<ϊzâÊÉúGþ°H_Hi<4‹§þ5=ü³MGl3 §9É@Ð[Ñ@úÍ`düЙCjëø/(Ùß4oÔÃg“n‚…Iè7+ЋÝÃrÓҖç½%Â4b°Z‚ŽÚzÐÿb—èŸ\©ßº«ð ˜mWÁÂé¹§|ºX=»¶Õ{É'w°¦y0¡Û>µÕ^½”/Öè(nJΑûA±‡o\è)½ÿXè)PO¿Jƒõ;¾u½T'[/WÁ¤v_¡æ@Írл\”žµ!*ÅÆÎÔP2¬Ã84ÕØä`JVÓ¤"ľ‘͘™ê¦~sü§U~‚à²I´Úíjbzm”l«àfšv „‰*wcCŸ˜¥ +¾U¦£óÃ,磌àfw|æZjG +Հ“ád;µá••ǁCòA6N?ØÒOô6ÆíŸÐÛB½›kú.\9ì·±Wf–úÇË’ÅØ¼Ý™¿nÄú’VôŠ6º ØUyÂ~²ƒYJæÀLo¬ ¼2@ðzbÇf +#€6m@߂•š>Ûà,žêwô͛‘‹õߟ"`¸ƒª½jå4PÜK¼Ý³šµ«Þgjö3o$ÚjÁiÏCÉ·}хš1ºŒð;ªVÒ;j’ÕϘfLùÀX|ùê,ãçÁ²gýûÚY²Á¹†n‹MU*øRPà2åpr£Š_pÇwc,]#̳=ìä7Ð·µë•ÜÄ®M˜nbÄû˜ç­¡Læ0tõ´Ý*ÂæÛŃM]è8,6æ/@ÝÎÄÜ Òl¦ò’â¡Ìc”¦$<{B²±Ÿb4 2M]˜tèCpmÃ%ßµ=‹leEåkç;ì ®æÜ\›` šjjxd)ʉš\N.¥KÒÆ=y®v¶×MqF|¹ìÏ/Ts • ¤ ³OIW­7n{PŽ­D¥6ª ˆµeA«ûâÔº;Pÿ»Z±jB;W°Þ7¥ñÚ¶ Ô%eî½í_¼ BYýëØGj”7j(ã½{íIW SÖæQÚ¯`Ô$Áf½œv ·‘\¦¯’ŽÔÌ1j(cí|œv AøíE {¯”ŽÕӃP–`úùXí\Ð5 Oۯ䣵 ڊ^Ò;VèÚÑj4të_-«T Cc¬E}ê;P*&ãfëD9PÍF *˜v»qj—ŽÕÌPñ>²&© jÓa_3«Ï6éK•ûÜF ïÿ˜ÍFïé_|ŽÎÐ (æ¾j;=@3â܄Аj&c®pSÈp}¯ìz%PØsƒž÷’ÁBïè”Fld‚Ç.H÷"ûûfÖHi”K_îû'«e ¹Ó¥ü Šq¡ë§œõ†4þ†`(6hµ¥h_¼»šÖ>í€Iï}Óâ¹½? Õ  ÛúÖÁœhx¾õAJm_”¨–zƒÚ +5’G« KŸÐ҂ôޔàј#ù߯$q~3CJ­Åá˜àt cÁ ›K¾HYnÙÙ6 ж'›UýÍʫӧ­wHÔƒªS–Ñ¢V`uí¯ _<¶üigÕ*Ut/’6„Œ"2¬@-D'†CUÔ¢þ)7ïT˜¶˜néÓÿU(S§\4ý†‡!¦CÔuAì•~yʅ˜ÂaËøô‡«´hÓV½'ACÌÂ8ÜSr6Y¹x G ¨<–B‘·Ô[;F¸<ïµË^aC$àœ…3dp€þò*¿hœ¡éS5é:p¥xðël¨ã_ócg7ƒOE[„mÆô*ÿ¸äÿæ}? rüc“ÿaŠ8@H¬Ϭ 7¤¿•ïý'”Âª†r‚WÏ/Gæóõ5ZF´UUU5Qdde•NQ*›#âIMO߇áý¬Œ%óK9xÿHÕ@+UYqjüT“ùô+¨ªá‡WNøåô**èÕg´Ìpê~Xú®UH‹Ðæ*´jkyOO›ªkMSR×+ŸÌTT*{ÎßÐÕgæâX­€£;ŒÝFn+BŒüþ€,éÔÐ5ÈTi49Ñ>u.ês55¶‹)¨é©TùŒ¨ïC’÷K§©ªw›Í,J¢«7˜Íi ¨9ûóµ.ÕùRíç³ù¶µ/œíK\þcC¡6+÷ÊfôZˆ“Þt„HýM´áÈ!“èê^h3JðšÏfæs¹pííE‰Q0wSPðÙÆáöD½ MUSÍ ´žxí­M8g:—•FÍJív~ÍæCNÜfÂÅzâ” iP6]ñ·Ìf”Ý^W=ösk9ý‰æ‡CR®ÃÝ’ékK˜ªÌg͹•*J’¤ØÄM¯©bÅÕÅ)üÕÞð¬Güp,v@+ÿ%WÝPSú11±=MºÉÊnmdæ'²qn-b¡¾úfI3&d$€A ‘`„RC ¹™’¢°h·Â–­”µf ŒY'™“ç/­vÕ¶ú¶—jñjßZ§ª´-k  ¤PUkô¸€€>ýû÷ÿß}™$È@€@öí®ûyo7×o7œÝèï7Ý ç7w›Ðßt÷¡»Ïo¹¼Þ†õ7§½=æ÷=Ü÷_{›Î^ç·©îžÿZp­¶ë¤¨uú†Tëöêuû݇b°šÎ/ßšwt»®ðN ÝZ oÏOOÐȧ©Û+ ˆÄ(øaÑÿaÿ]Q©À})¿õ¦ÿîØ*ŽÈäQÛHÔøõ~þèþ>óó]ßþ)Íw¶ºÜ§Êöq~Wäè,z½ŸÍçâÈQ¾ÃûŽ`öž*Î.ö—'~©çQÏÙà¬s†{ùïà—»¾Fü¼ì£±‡Yxüe+ÿ3w›ðF‘/ŠÀh®!ÆmZŽ.#¿ùŽ*ø³?ù¨î?éRßýÃT·u\ʾ +Š{ƒT·î9•j8¤…w*V½¥4¾qª[ó¹•-ûƒT·î.*[òe0òÈqç„*ä;lj_ïá]ŽB5.»¸2‰Ho¹´/KA¹Í¨‡«ÓÕX°±e½Œ¤Fv•|2Ê'6±e´‘=÷âÌGwö–X}¿”K钓›2hÿMãM«“#KP}Ò0 )Î+& +ïnì¨ÈP«/ô)0Q¤5Ñxg'’ß(Ù#¤³Õ'¤6TûÁeZ/<žO§¤¡º k&+bEt.”ZwOTFoF1M,æ—íªá’*e©cîu.a]KX†½qš/"[gi½”›þ¿µ‰d~ÎYê-)Æt)¨&%ìÜI‚¡r¡óÚLSñiHí´ “Û-ä ^'žG¹ Öž®ç¹Ú.8æ m]„‹_½Z3ð‹Z¯ó Ã\æ?[†Ø¹ô+ä8p±³ËLëŽKȤ-IÒ±¬´0»$ãij&“ÑÌ¡1¥Ï‡‚Ç‹¿òšeª +ýÕ›þ +‚¿Š-ÿÃ-G•7Æý™¾7þ9¿ñz×Eu×R§ÒxUÏð®N1zŽé×,!e*4GŒSp£ö>;Íàë-]âç¶>—Éîµ?ҕ«ÅD:X2—¼ýK·ÓQ”R‰+ø;—„“N“ÿ´I^"HÕ£¼—/¹xDÕJE_UÊ5fãdÚíØÆ*þíÉî^ AÅÜ©ŠwÔ¥ÛÓê_‹‘ +åýÙ™˜G®Az¾Yßs¾ Œe…£#_zZU¥6¸#óܢᛔ]ƒuï -må¢EIÏ"í<[†Të]°ÔÏ9â:䷒HUê¸Í¢œ$ÓP{Id»Á\ pȒ°È擶_Ü>ŒOûž=ä@m§µ"ròÒËAÍÀqWB!©RËë„uP¾õ¤>õ³L‡´.è|éC7}mƒÐkÐÀBZŒT¢äŠÏù±Õ̏·PÆfFPȽ #—¡qp³eU.×yW>=šZY5YS)yqóÊHÊ&´zŽ; ô,æ×G§&QÓÓñº%- áý|š©7•y%-·#än \ýúA"Ðl1íVAcíKPR€h4ÒGbFÎ÷m+^óÑ2 ï”x_ÐIt'ÙA¾UÀã{”tÒñ“§¾­tÞænwºcßy‰ÿW>òÞ·÷šÓé!O֚ôÀMAh‹Ý|îl, ¿fñ=]·…’„æj>: ´²W¢â0’ú¹Ð,rhe×Ô§ëñéúlÄËð†£¡] ¤gÔ(ãᐽ64cKÔr ˆ—®6Ç«t_[®¥Ïîå^A¶a\ÇF¹,±œb5©t)ø±:Gà ,jA%™ÜŒ¡·D³g2_ˆdƒJ}uäՆf$Î8õ‚D¶çð‡p™è‘ôSÐ/nj:Æž(¼®¢ém½ÞK%‰ÝF: Ü4²|K>Ék:a^,7ŽBé=<Ï,ÜÌý™Ì±”õ6Ý­7Ñ3pGOpà÷˜"oÉîe[»?µÆŒ¤ä¬¹‰K¿Zˊ.¼³-‰ºÄÍaž38ŽD·5Ðw³†Ø!e‰K¶• D+;á“Œ ¸Ç Óµ”£¦ Oy‹!¥JYO¶¯d*œH$«î%GÙLLßTLíS e=ÒzÕ㠚IXÀÞú *þ` §X±û³LAj‰y”‡!×xgaõ‡hCÑNYMfžÊ/RÍ:¹¥ëkÌ×Nz6p}<Ä(½²Õ+Ç?—à­éËÅh[‡=˜D‹BíÃ0 yö‰?H!½€Yî»8x°Iáz¤ýŽgz2Hâ"jÐ ©µ+ÕõÝZáíu¯&ʛġŽeó7ôÀDiðhYV¤ÉUp‹ve + ÷8¨Kg>9ñ))|­&q„{îuL¯Ï‰•Ó+•æÿ!%È´ûÖ—9'jX–&L7=4r¤Dɒݰ3Ô±‹ùDZܥµ |vªR[e”¤¾|5),9(îb”—ôUR’òäKÚ¢ëòcÔ5$¥%ë#b$'.ÊÁŽ u).IU).5ےѤl¾bõ ûêß4YÙ¡=öÊRS˜ó¡·‹U)*ЙE¼¥ef6hûƒD 9‘ŒI”v zª%¢Ñz5ÛG*D¤ "+BÓqúÓ0zÅ8YèPþ˜#³ÜÈùmëó=ªmë{YqÎc¦èï‘Å΀ýg ¸ëèùÇL1s¶umñÓ}¯æµJ@&L$¨Ožn*“¹ƒ¹›à(ޗ¸^–­Áˆ|( ©)R÷{„ŽY2CÅ2¶HÊ~ù&CùšÓxeÁ╠”Â:Ñ2ï ͨ­0,:¿XH‚•\ª_Â?6àëG‰úpríÜlô/%FÎöõCSKÔœóGnÿÿ!º³¿â¡ ÿBO¿Ñ4{ÿ} F²Lf‚ D˜ÏDªR m5'û*b?ô”C÷¨r’ˆwè~´¢‡ŽíJ!Ø¡(‡\„D¢íHA<ÉD8/ë%þ‰T|]©dšö)D?Æ?š”CÁ=d¢¹aÇJ!þYö©D<ûؔCë*Qs8'õrçè(C3þûöـ˒ûָܲ¬Áþ-ã²â¿Î$Rè{¯)C0”늢©Å7e"«å²Ú¿Ø”_þªŽ¬m¿¶‡Žøú²Ÿ[+Žúî~w™áý‰ªÞjPÍ¡X⨪ñhc¿ç¡`ԑÿbRÏF¿Í¡ÊÔÝ~láÇWëÊ©+¿ œ„†¾)Ó]ÂaظÕàN²ûø2_³û1?̯p£œs¬÷»9r<ác!³ÿ˳qýÊ0^\Ç.Î_–£Šæ—ÎÃÿñ¢ªëB²û˜!GWŸ˜äÅU‚¥ÛIϒIÏÜ(Ád¸£ïqÛ£‹š&øµø§^á>úó˜¹VšÎ=@ånfˆt­²Y£©¨K™Áž¿ø)ä‰äo`ôÓ`õRÊQâ!º!†Dý¹é†DPhªxÒ³N¡W>žËäÖÙsYæáÈ+¬Ÿâ0 +PV‚Ï5I}QPÄå/˜7;2¡•[˜¨õ<̪ÍËÌ,ëbKFÖ%„¹Q/PjâüR)(-=ZôúûøÔ‰îͅ°ð5ÿñóoË͒7›2%Jƒ-}pe.×õ\ÐȬI?ŽCäs«Z< ¦4îõÆòœN›…Ôjw.jBÑÆšmsZy³HhàV‚ö/ëãݰ\>Ÿê„;f|&.àŸxó%¥FÙ QÀHi›}È-{ FþțÌa¶¡áž3,éiï ³›1ֆ–f –†õo®í{S:@Š‚3XpÅÁ=ˆŽÖ²ô~•i¨cꀉˆõ‚ÒÀ¦žšÉÎÍÓ*5ôðáh䨸M( xÇ`?Ö3CW0V2B¼u8Ób:D»;ÐÙtֈY¾ ˆØ×¢ì÷Jç'>‡»úkJK¨úŽ!oT–¾îr£ß’Õ¹¶­g%²~È;™É~§¨êΌF][öt™¸Þƒ{Í>nÉÎ9=ûTñ¶oãSÆÙ“Fz^r‡¦œ#ƒýÎúcƒÐ½~Øàüß“}½-¾¼ÚGý[Ï鎵!Í|8Ó ê›/4œ£07½d0÷âPˆk7ìàô»µUcµ WZƗý³d\ Æùk£¾`¥B t¸c ¸m—×+"%³FÎf$ðH¬ò5©Æš4óÕ!æúîgÕCûp ²X{ÎØB…†Ï?Á†cøJ„5¿EÊô—a 7¯¬žÓ¸IæïÏz$x<Ç熴ʼGVP¢úæ@ðލÝ|C#4ez´‚ÂÕ|6Ä­­ _&è¬2ÉãdZ}9ùÃoÉE|ÚˆqãZmÒ¥¸kXøAŽP#<'˜´ ÅëÊ]e˜YŸ òQ›'¤Fõ¥à A©¨NH„lªW Jûw¦õîÈ#á6RÏ Ï…„ ú´Ÿ=ã :~&V⒩ϧïòyxFû†½Ø.0¥Ç÷éQŠÎ?®s‰Ñ¾ŽÞãO<‡­bzÇ"sìpYڂIžáLÈ*:š'Mò ‘+é»ecTú™`¨8½ë¸æ¯èßæ]ÀÄTu²¸j«`Œ ób‰-ô¢ºâ05Ãî µ¦5Mi0®´}7ðk +•µ„cÔa¹´ž‡——ëd%ܱ®ü#§´miý¾–ŒÕ¯k݉e@ß×|Íì ªŽÎVè ¾®Ö¤dIÇ$p˜~˜ÜüàFç¿Üü»Ò²ýÅzZî Zg,uš7S2Ì,ÂV‡©ç$ÆEHÝIõ#u+Á¡›–H,”ù(ÝIûˆÝGÿª7S8ÓSÕ¸ÆíP-džþ©­0©UMý´Ì‚iåÏ'ºÿ€Î±wÀ[wLAO2ÇÕS&qYÁuJVU…2¨6‡1̱MA¸v ŠÀ(éiÉÆ´ÛCÌ`íµç’q^&lËŸ Cp)Ëñ­§¸ <°Ef£¸.oUÛO3¶G΢rÞv]ô€Z ìhàɲŽ Ÿ,´yB‘ëuB@ÙÁÉÅǺo·}1ì¾2Xx¸EÏ»à+ãTÛ!tÛµ¦ô=ÒÄFëVw¸O¤S0T¿¹Xêí-&8}eje¸L{“%™Ý*ú•Ææ†1Ѭ'©¡—ÊKðª0Ûÿ2ÁM4©’!è߬K½1mYò†xå#É#—=ë ÀsoהáǕç˜r¸>å‰öì(òÉÙYB+L§3ëV4Ò¥|‘†VêV4d FD +&_~–òàáÓZo¾?ºTØ"¶€“”ûYnãZ—M¼³ h“³Y²õA3Vô¢Üó,dòX9´å4¾³aä»÷@Âèóˆ­%¹±7PF3lÌ3ò`Z‰ARiX>"TcÁfy²LÎÄ,ܛ$d;fíÀXëMÍsã®ú€–V½Õîͬ »ÇHß æH 8w${ŒÆ F¸˜Ô¸B\÷&vÉjvt?ê"Áß=ƒCuiMîGåáøÓêq֋X‹¦\§sv´n:×¢|žé^‰ë‹6°r6•£U,́½_¶æSïø¥JÍ$9»¿o†Ù›ó×ôÕ1Å«Y•¢Ž¼C^²MZR$ÛîeX&³}‰ 4ㅸÌ{rbÜÇÑÍ ]$Ê%ߗ߉µf·ß)"«ßQÆYÖ'ìp mQřqøÚ“Ï çMòŠ”(ïäÌQ{¨ }Â!ÕaÓ²6(Ð@샜N‘y4-ª€:nž¡|´KÛ¦]'¶Y$93òdÞEÇÁSû« ô»[ÁŸd®†Uƒ[¥³Ú­¡¤‹CÃÐÜ(š6ãC}8zV[»¡’- *6qd–ðDÐÑÊèeêènš†§- G$k(æÖWDÏÙÛpP3ùyüñ›v¶.:˜»xæOF2ÇZŸ-[ƒf{’ZËn1´UMáYÇÓK‚ׯ¡÷ÒûR®ôºz¬W¥7c¶W¥7Wî=0|=þ¢ögNö€H¹B£.–eyº]΃‚T7Ksˆ¤RfîŠ{íïnєV̋+»¡Ê•@³Xƒfæa¨t€McÜÒNœ¢¥c££Ü’T¶ŸÏ텳wâCRŸ~fÝqõ\–·õ3¬áaá¹ÝæåHÙkdažôP«3@²¾ì 2÷{r„‚˜âqܛCf^l™Ÿ5#m&gÛµÿ4™Ÿ #k&gûmë&gór¤Ì긻ºXë11¨ÇÙ+e;X;—õ+;ÚŬí+)´ó Z"ÄU-³êÌ{qV$¯±&>犱F´ðKŒ(A¥x†w¥õ-ô‰÷sè.Íu-ûoIJ¾¡3Á²µ˜úä˜úþ9´M¡3ˆjÒ¿Ç%ŸŸŽADš^Ñ SþJt_dÒ*¦IÙV•§ S,g†ÒÝ ShKoN*¦XÎѧ S,e N*¦XÌCN*¦XËÃKt%M¥µ:/bÎ"¦Y·°ÎÝ SisN‹èY’¦Òæþ6|Êt_ÄgqN‹€yU Sgì­N‹ôñaKa±ñ0w¶jQ5iѐ̩Ñ~™šÔ較>]:. +f­:/ºÀāìÖBTÉ?Ôú¢ï[ühð§Eã +¯ÙǕ›äñåiÍޝ ÝD%N>-:/Ҏ€½YG~ʺюâUÓç iä6ìCA­]>öîiô#­êéÿŸNÚ·ýĽÝk/ýDrÝ#¹ÃlLKÜ:èàŸZu˨ ãê†ÊrØ=C`´Çʂ],6“¬¨ðrPœŽDšÎ4Æúj<ð)¦¿MS÷U’¸E…ÁZÑ¿5<·x©/x"Çþ¢úš=@¢w×ßc¹xŒ'hûÀI¥:Ǎó ¨ùçˆãåIÊÜø‡˜Æ2YËYí'Eqª0 +ê$;/Õ r×*F!˜XÒëT%ò+Póm0SŒ€ít騪l(öð£Òû͂Ãô݀!Ïq«gº†#\v(¿ Ÿ—|"«ãȇo!\/ +¶¼¾)póYx¶ÉG[”ræ@!¤†•’Ѝ´µì¡¢`“T׍§Û?AlÚS·c¾Óûá7Ÿ"‹Ãrû%VP§µíž¢U’z‹“²¥ô7£)b°Z'¡]ÙÓ*$ZÀóÕ± °Ô |hÇÍ_÷,Kís~@u(TêÓÕf§ÀÊ˱6 Xûù$ÍIVCTdì•'ã";ø0u.ˆwLIÐUƒ$c2X¬j{ÿècìÞ²ù RªbchÊǛvÝ¥x*8’Å0ꝒËí›Ç¨Ð֓¯³†«¿ÌCC6Û´i?ÊbU\ýÕk"¤J)ïúåƒö’½||[*2è×Ú7Ýû–ÇwŒS©ûXÎ;c‹Þ!Ælq|iP™Ì¬sïªñpDÿ×*å¶A<ñö?‡%±çÄK·íe¡wõßê²¢“XmÿQ8ëÇq%èd;éÿóe:ݸÃ+㵕µ(Ú±k—íN½uò^¨Zzçç£3\¿æÊ÷Ô\)ð¼EµÈÄßãÊôýüÌu<¯ c ûöQýŽ×ƒ‹–9ªëÊÃÞ,°^#\³ßjžg s]ù+$0}ì1ƒ_ÄkFø¾RÿÊ6=öú•,³æÊüù«‰Z’¯¸©ÁTTà§ý“¼YZôQß dÏðþþÏÀˆQñ(K3âŸÝ¹úf. u–Œ~ë|eæ8”sÿ ìh²ÒŸý¬f?>¹iZ¦QÁ,³ª?÷1˜ðbïá¼ùõܹeœÙ«„wrÝ-=oÿçM͓ÒÊc1ê›>1m„`\Ö°,Á¥rëi­¤§×öÀÒEvˆÍñ1cvt,¬>´õäeô¼%Ç*hþa&j|⇂¾!»{Íà̶‰ÆÏzZ ˆ„ö䠎yõʞP<†HÕ$ +v>;0Û«0’w™¦.³7siŸûGD–™(vp±å'ڝüí±Æ;ô6Ä>Ýj58µ¿™Z_ Š_ɼ§˜n@G77Ã6#÷Ìi”}·Úsñ»\ÿÎÒQx^[<|Wë§ÿc3RìRáUQXŸ›]Ñ9\íùß}´b⅙ÖS¼cŒ7Õö˯A'¸þ?û¦?lV:ÃÿËÕiû¦?}—Ž÷Ì6]¹øÓ=ÑøÞUN$q—‚þQÆ^=oü^¨ö‰%þ *o°Z c€ ¤¦c`ìav¹’½ Ê˜ȨäCÛ¬'¬Ò¥šÁÝ-–¯wž\¢ä¶pëŸb]¢û‚r8Ù;ø3qP1Ûv´ÝQ'ý ·ý€¤…OصÑQIÈæ/$f@èëI8×E”“m˜ë„ç{ÓZ—E»ÚâzïYsˆÄ\:GÑv   –sÐ\„& +1HåÁ@JÖ[•Ô´”Èj_áfŸ`Ä/P`A;×%×å=¿*2T;(#•™Æ¶tŽÐgq?ÂÅZÇó*€ùÐ$ˆ¡LʶމMõŒ;Ô³B_pԄ<½‰Ê˜ö'˜ÃŒ“1š~V¥¥`T+¾šjãúD!Q6ð½‹V¶µ£w.q y€­KÖõNcx +˜o¢¡i†Då,ɸÄÐ#×ú‡}š» ?!f®Sƍrf­>i óRޱT2Ÿ$€Ù4r`¡fõÉóŠú—JLBz$”’\(9Da1¥ÀI‚ÕÁ…‘ÈZ!zj¥¢€ôtáí.3N,Ò¢Ý +7Õ!ü‘rùxª”?~RC¼—R‡Î1½º¥ò ÎqU(wEŒCŠ©Cà „¿‡/XÍQüH¹}©I/>éñbåȬe˗F"¥åm™·T¡üîbåè 15Ïq•(yþj¥‡â*Pàzԋ—¼ÄT¡ìØ-/è0‡X2H!Z#ÕÁè ã0‡/íŒK¿ú,‹—ߋ—î¸Ê”?z²¥æŠ| +…Bʔ9(ÅãL‡Ö +Ðü¹+¡t 늙DÕ2ˆþÕR‡½–3ª¥ÐÄT¡Î,Ï R‡à/¶‹—Ik.Ou”båÈ DD‹—ô@^»Åÿ®¸¯Ë¯â¤}"ûEüõ½ø¼¡~bHöT†£gÿJü©ÿNMÃtl·‰-¡Ò´,íS¿ö*Q|EJ>-“àjA½ÅHñþH¿þÿ¹ÁHâzCЦ¾—Ñ^-p?cÙbâ«¶:ËÄí¸Ç~Ça+×ößþ¨è:ZgùªþÛújú uë?òµz þÔôºcqñ9Æ@¨ OÐÜwbLaÜe¹?Cp,ùGÆf,o¹5xæ à|ßûŠ€=Ú^ۅ ÿ¦$ùO4b®.=’ ¢€iœ7ø’5}˜á&‹ ".>¡¥Ð²›ña>‹p?Å>êzÖA×RžH°òchš Ë◕‰y]b‡Ê¸¼¹ÂòûÃh " bʁbÿØùlË•–.À¼¸‘´+í@¼º\º¶†!ìÕ´0iŗZ6ro/ áB»ã«-aXIÖ3©Å(‚»ƒ‡ÓòË£5€a¯Š‰.ƒ'ÑÑRâfû¡H»GÔ ˆ‘ÑÂmEK¾ç‚Í_Š ­`‚2é¾±ü*)ɇÀh'¾"ô½‘´®ûLûEE’äYõö¸IêH•g§ÜåãbÒ"U¢w)ùŸ²¬ÚLì)q­$3 Ì-@Rt+y¾Œg—”Nil°o¥ý} é‡ÌCýÏ ‹JééK,ô„Æ9êSÔ-Ÿaè©fð nSfð`õó5/¯Éø¦ îήj~.x,û(Ôd?óÓȟÿx37èV/] +5ÕEÐt8m#a*è†ÚJÅçWw}<æñû0™Ñ"%^'llLÊx™«\MYêŸ$Ÿ÷4)9’~4`*z¨œ"^”c—€—B‰ŠYÎí°I:L~\’ù“·q|˜u>Œs*û¡¤SƒÑIt3¦Ž£jCãÏO  í›A±ÎÕ*þ•oö ¯×†àØÊŸVùë‘"%?Ô/×p2n4Nftiçq¹œÆú¬Ï@ý˜aÁÒÙ!Ü_ t0Ô³€>’†¹çOE¿ÒŽï„iœzf]=›&3O=†Ú­³Útöy>q·Ó?Ú¼Gk ­{ГêÁGX–vuRØ4aˆZ ×Ë® ’ì²ík_/k÷ôkZX‚ò^ÞÒÄ-Z2^lMƒ<×0¯fŸ1znKÁí +Ÿ),Åâù• Ûiæ?(³RêX®­<©Ó Ð)bxó»W |»±>WN>–á3`©OËUëšH[ږsTž¶â9éYñ*èâð.û¬æƒíÖµjKÁ:®X­bBÏ<Óza.Œ+ç‰QTBÐGõ‹ŽD[Î2Š•¿@EÌr^Q–w×htMÁãê´}ÒÕºÛ]A0ž «ü¡Ü×kDÒ\×À˞–G‘¨5z½^ˆ)gûôx÷¢<+±ß/ ÉK á¼`œãöFñ§ÓÖÃä—*ø~Õ`ˊðJdÅ´Ë oky7 H­ä²Hõ<SÄØïUòmüÂÉm«@Ì þ1­.ϯKÇu +ô¼$üZî ºa$Ÿ¾[öÓÔ%‘YԄÌ=ˆû„X‡’u¾'Ý†×'Ç(LÜÔÆTŸ²yKXŸo‰Ë«ýµ@WD𚤤&Ä郑9ÿ¸®(ùsb´«Ég÷ ÀLõ<žà‘+þû؞ÿ÷Šù+ÒKx¯·}·­ÀoTÞ½€Žõ$“AÞ¬ˆ“ûõ¡ l]Á ‘u&ÉÕFM´(óo;°ÞwS—²´AP©:×UsZhJáÕGTºïñorì>“ôâÁ-Chÿ'Âf—H¦Ú½GZ–&á_ÇÉ)ùgŽ"Ññd•û +?F¡µl.ž©¯Ò«¨ø¢žJGáVÀ ­ïŒê¦è cc"—cng`ÿ»»‡Å?³»7DþCÚÝôÒ½0£¨ë¨ƒª:¥¨Œ ùc-ý—ó=ÿîâ{ÿÝ©ÖØÐ¥(«ë©r‡•¬5éë˽S­œ—§½6·áë>GQ:íÐê/g@xn•’\én”ME¼Ué¥|Ðó›¨|3ìwFpÏMƒW†|!mˆ[ï½£IÙþúL̆‘˜„2Bd“ $\É  F!Xµm +¬¢¥BŒ•*Õc荐˖žµõ£o½ê[[ºò¶EOB¾}lQ@óK| +*-ú Á¢O¿~ýûÿï¾ÌÌɁ*·o=må¯=íÞ{›Íæï½Í¼÷9»Íéîóz;ÑÞ{œÝæô7©½íïKzÛüßà.ïð4§ß{¥¶ËmÕÄø%½ I2õ¸'—U w-¡â»¼»¾zÇ1Ñŗ}ZØkìpxÛsøí;.É2ÿÀß«±[l_y5õv+&ŸÐ߯±·ßŽE±ÔÞC"ÓO͚W€ªO‚UN%j»,Å?8jÒGu#ÐJʏã¢1UÄú&áÇ¿àB7N„UTuÐ{"nûèýK N’ØË­[rB˜õ1êj甚žDe‰Î O":c}{Ÿw<¹sðfJçàü?ÍsìÎçó..~^‰s^©êZvãR%-oT;8a ðÕë¾ØpšrSCÛ×È몯:êôi ‘ÏÚÙ»."ûY‘ë·§Wv7îN¥m¸µÙ¶UJàY+§µ-ó’O–‰lŸf´M²t—P­¤”4ópchSÊ­u&œý¨U–†õõ´í˜gÅB–7î¿îQMÃ>&)ÎRE%›£-v‰íHž|ž•mf]–î`$¸´ýGiª@ÎxH¯fžÝÁzHöOúÈÈаôûðGˆ÷,ê+5ñªcÐ/n‹ÃVWÖÆ¢³fgxÁû]C gǺö–ÆWTõ¡iù+Ú]Q‡„üDRŸëI“F7~ +¢±ŽˆmQ¢tÁh‡°é½ý÷žšûTüÏLtPájoA¢†Ù>ra]j:ßTO^{¯µ¤H6r؄ì}X<{‹³ô¨–´}£°âà,YÙzhâïÕ$ëUŒ¦+έÙ<ÑdFïS ¦DLOí7ÿx[^mSû…8_?ž/Q903xý¯Ç熻c²:Å7qÔWfoãQ©/'ܔ¡jî,ër·ÄôA9ß +AOï4dª©Z«cö²ÿù·Ð²þÃ|¾_ýmòùÜo‡/íõ2(ËýäºÙ~ ¿É–_ù&oÕ´X³Ëþÿ…—â¸áfñ|\¿Å§ìz£—ø…?¸¨™Éä,Éõ·«ò<úKDµOnˆ¶çe½9‡æ‹r. s®OW¡ÃàK—ð,z”€-+¯Ã å5“çN®(Y§ô¹™“AˆÔÔ·òï…!”­¡h([ e¥ND³w5–Œêq$^-«M&5Lu´7¶Jmà`”ü°S󢟖0#ÔüƃXóob_5òe÷Ì史­¡¾ ;ªÎÐÌíÚÚäd x,ó´úmִƃKÅÚäŽÓµnU5¯°«óøu~ +Ð,œ·\­pRÌ·¸…¥Ý÷”ì*®!.ý†¦I?8<ŸÏ‚á~vì(®Ù<ìæ4¤J¼ˆQ½Ø4]œ²šϚYž - enY_c•Lš0"xS¸µ‡q0E¦·-yN6“*•7ÿalê{Ò~2ã‰›´êÖ:unZ<õтcFÃ¥@`©|5³~ÆqéYR´Öºh–µÕî3Zêùš|NUÇ7‰Ë¸Ø ǨåÜqÃqü®]ÇxŽŸ—q³˸ï#q´åÜqãqï}žUÇz_˸ù¡¸û®]Ǹޝ—qîFãéywKOÝö0jóÜñ¤‰áû×;÷\8w?/dßDšûRr鯨¶M5öZ¹Lù®w)ÊâTÞÓ¿`5R§WˆW‹§îïÈñ~ðôõSdoÖÞ5}í¨òJ}lAy4ût9|ƒö³éSÞËhìrØçžÞ~¾•<>dH%6í~6|¦í~5©íÚüùs D¶O »_ {ݯÇ6ÄYú?ã•þ8 Š@æãïØ'š32>þ–ù;gõ¥½Vlj'’ÖF‚ñIjê]Ÿ]hLÿšì³DþpÇk£ž?aq´¨vûÌO¿Ã—¯ÉbíÿL^§£ž.¸—r‹=EgŒ‡Æ2x¸›»S³³Õ‚zYQzÛªgǕ¯©ZÖѽ¾_|Mˆ_ZÞJËÙ¨¬ÝÉA­Z…u)À¾Ó ©¾Td„ ¾ÜZ#ƁPë×ñAVöùƒÓ¸e÷Í%”¨‰óñ`‹ø Á÷ߖàrèj=û\ë1ñàÑM~Ü®6BòFAíøeÑ©¦ô6#O d—Šu,4jl ¢yÑ)%5ó-乩w¹bÏkÔ¡JxR +ßxo S@£0¾U™ º` ‹c2¢‚·:jZ”Ø„›ÊÍõù<ÈÑê_©SŒ_v]bò%c#Ά9–;L°FË̏²&<þ4ìÑü?m’ˆÊµI 6mLÙ´Û +9W½n•‘‘ &M¼;}gá&Ó&õœîL;è4™0ï©ÔÏäþåS‰É‡~¦öEŒŒ‰ã€›Î‚ˆŒ†Íº˜váÄòB&$â}‰(q4.‘‡…„%÷*‡Q¥koy 7òÄòõãç•èŸl¤˜b™oº¼¤HÊ? +Ñ¢}Ѐ–o-ö³Âá&ȍ:ˆµZÏDžSoÖ³r§ëX¿ñ©{ÖYº§QDÿŸt-v3˜5蒈 AG¶‘]½ñŽ mlƒàف`3Ë¿©l5‚M~&„ø—TϹŒ®I¾ÌÈÆ[ +¯#wW’Ä%U7WÙ$•T½ghÍ*¬:åà}û_¤àõ:(í†öÕßì™u©í·Õ:håT€h°ý®mÀÑViÞóa(;þ½¸a5.ê©ô-dŽ^¦–MpÒáåÕÆäEÈ~zÁ@¼K즥`cþ&E¦ðÁ]AD5²ŸA0THò~oGÂ&ƒAè2K~©1K± ¶€ +‘hvƒ^>õCä>^¬èŸP±¬M˜)ZoòAÑ ûáª]¼jr|!ø¢Éc<8(‰+%5¦å䚥'ã§ÁS¬b5L?º +JWæÏu”6–'lí‹Í5Ï!Ù‚6¨#§©·¬;(P3/cWÌ-{ýHÿ!úšvԆeÔ¸{ÒlBtò— +–_ =²ÆWŽ “ëÃb]5´C(/څ—$ +3‘G _hâÚ!”ûe¿Û+Ï_q[~SÊÏ>w| x`L|áP{£¬N>ùÓRQ?ŸÑqÇÏYY}ïƒP˜·Â“YyÎ42VT ýóàe ‘uÄdÙÞL0á2SOòr+cY]óôá•]gäYèè:–rV ÏRM½g±yí; +œûíˆv':0üîTãÀ¾S₠QhtÁ$ùmzIcWi·ÞäÊ`ïE·dÀýÖºP‡ë?ã{²‡,eZh1¼|—m°C"öìÂù²&ÛoÇÎoò‘á1‹:ÕÓe/Ÿ¬$ßˉTóK–¼ä£*ƒšƒN;|rÑêIfd',Å]Í×S[@¼²Q£»®d5\ü& í[%c™¼Ä¿H¤¬=Z¯7>K$ðŠ`è°÷¦øSï9î°¦dþýl)™?¸öÅuïø"e8¸l½pѹrºµÜnB@+ž#'6ҕJáÔhvÎ8 F¾WnS,¬¿Ž¾ÇƒÌkʆ€ÝGüæYMˆbþoƒË)ȗX€kÝYMM²Xbþ/’e–<ΚFÄõtu݉sç Ó ;«¶Œªp¦˜`eœé—2ÎbӋçí@«ÒWt:´ôÊ`Ë@aÅ]_a|Œ-?xSû%cØ2’±Ñ1’±¤ î/¼£3J-Û© @µ»Y?e#†Š}ž,¸Â,•‘P ‹‹RÛ7†ß!Lzz‚—,æápåË퓱àBýøæGÅd¾ãà:JÍS.°ŠeÖ LºÁIXõx2×â`üurª~4@“öaËOVl÷¹:ƒ¤‘µM† ý–R<ªÑ-—64mTü:¿"‹ ×%ÆWt¥Dÿúò居ë`óÁ#yÉ+bÐÖRi¸HWº(qó}¢×ÑgÌËÓ«C žw«4ïdq¿iµa…ØbãÇ=e?r +Å=±}pÓÊJ‹Â¨¬ì‡Ò-Ù6*,Æ"‘Éûbâ_S60ÁfoŒè¦–îPÏÿÈÂ/:ÓÄb—”ÎWÚõ?Wи;X»¾6…öðËfâÅ­ÔI9 †(µ‹¾h!ڔ9Wc˜xãTWd’ïH®Ê Jºy^ԇyC?”†Ì!ٔ;ÀCՔ8à‡ß6Hky0˜à— â­q£@ÅPÃEÞÙP*.Þ1f·Ø*]þÑINŠ—ªâœès‰šÿ2;Þ»¥9ä÷§c»æáNÄ¿ª^’GL±S눚ĩ¤P{×ùvg]Õt Œ­§Ð$4ìº6PííLÍ\™Öp3Bó3B!¡ì`þqCùÀå ™¡N¬´p0N¬ºn¬© _Yf`Hº²Ê@fêË1ƒ«%Lиr1|€ák΀ Èô¡¡R.—*¹šü©™ ù s3Aóð욅`û©”àÛ])j< +ø{æ|O®,8.ùa\'a¹vŹ™¢pdi¸™¢}3sÜWØ·=Å}[uÌÑ:Ü"¶^ ï³äm'XÌ~Z›å šUºnG»”Ï£õ—“³Sp¼Ïñ`ʉeÇõ‰²n)”h—˜-«Ù,§Š›Ñh…{.§6–d՚1´Î)i.֎’ØLаö/2š²òÛbœ©iªjËrd±˜44Ó ŸÙ‰¦µÁ Ó*Ý]þã†è½´æÓÁô×3„nD®_ÓK¼}Â(²à¨™7´-Õ±§æÜõõ/X€€P=#÷G¨Ø×.É~å#`V)&ëð S çÚ î~×ðsjîµ/º/iŒôϊl6¹†›c¡7Á _ _*ƒ@¶¥•«tiº,øœÌÍ·»R×iºß*fßçÂ>Õhãoñ"GÕ ¢ËÈ=-øy@±ê7ׂlYKݗbïKkDRߨvCðGòô91üÍç +ì҇æ_â’>D5«"£5„ +Ç4#ʙ›Õî0&fõX_Ï¡>„~)¸P緎~Öò8¾ 㪾$`É'¥ËïzÀ¤8=C‚‡¼ÃyÃÞñh¨ àžÁKÂÒÌ~ƒ^«ÿ½ö¸+Ý ³P*¿y‘ÙÕ ª‡¥£žV±ƒÛ,gމ›ïññ©%S“Òޞ+­Hµ~iiUyÒÑ4ŒÝå} +O#7òò>Ð ßϝHÃË˾¢òƒ®Œº]–rÜÊ/Ý—iD rüþA ûjY9÷ù¬™»1+«oqW—3t—@@§—íƒÁ4µÒڍ|¯]Ðs´Ž ³/™ºÎИ¿^ÐZÿ1ø'HðæÜ™ÐnìÎÂÔü͔èÐj13 ÎD΃9AðÅ_¶Ü‡]5əÐo&÷Kø™Ñ™èMHn¦Lpû²Çq΄Ëvƒ)þSÎ#3£?‹…9q¼VPüz £¢NI¢.¹O×Ç$©á˸–»ÞòµÑA–Î_µçýÆR®”{ïbG¼ª"ôP<éË5Ô&·¯¼¥1«C.ƒÙÚ^‹×›H¨Ë¼t]-´2VWêTþq# ›ÀyŸ"Œj·üéÑäXQ×0ùhÒ£:ö1KŠ2ýïAÄS^Ë侇°ÄwëÙÆUG°£€Ô=€}¯ùàV:¬÷,jüù(ýz–A¡ê›Bû`“Ô™EàŠPöºûfâ˜óÿãF1|j +ûå'Îÿ¥‰tnUò"yW*ù:+Ӈû)—?»ÈÏÀ›Kß3‡ÿË6—¾gßM¥ïÃÿùîãç­ÿÐf×ú•·jô‘7jï!™µÿñÍ%þó6¿]ÄÿQ›_”šKúÌÚÿýÓµý& Š¯ß¿ì¯ö\tí©þäí~Sÿ©Úø´\x{²"¯åP¯ý;”í;_/"")ÚÿWþÄí~ÏÚN×þÔ$í|Jèc2Ü.ŗúS³ÈX#êñpDÊ0F#“‚/+'p£&@ÂٚvùÖâþ)ÜZ +wåÿrvy÷eI;<ß]'g›Y_ù'gŸW’žjÿʝž|ÿó'gˆbÜDìÿËNÏý|Úv~ +Aÿ;?Óà.Ó³ÿ€»NÏè0iÙü–í;?ÝJݧgá<ütìÿæÊݧgáðjøéÙû™[´ìü>_;?ò¥.Ó³ðjZÿ;?í¥.Ó³þŽRí;? ŽŸ°”»NÏÀømñÓ³úù;´ìÿ÷¤îÓ³ÿ‡'vŸãdøÉÙøV›ÕÒvº¿ÂNÏÿšÿ ;?}tìÿA„Ÿº¿’UÏY;?ÆHr³ÿ÷'2}v&í9“qÁæ'2|¤æOÀæ'2~òs&¿Æèa Š ±ù”ªÿ¬¹wåRù †—Ž”Bæ±O«¤K(•¥,¾)KSx•ÔIÞ!ƒ*GW™ýRåBLŠ[_D!Ï·¨V>hÎ Z:A§b ½Iÿš˜WýùÜÐ Vz!Àëcr·Á a¹Q³ÿCHŠ'“ó[#ÈFáçÕ»¨ÀýP†P~´|øyëX8`Æ_7Ö`u- †‡8vðMSha.R³¼Vƒ1Ê=!”óò úú%ù [éM:oZ†Ñ#ÿ wMF£9«ƒô* ¡x¬­îÄ4YõW¾±OÙZϝU‹ kö¼uÁO{Z†ŸÝ ?„ÔüA´«±u4Çv:[£ oëÕ*JpʒXZúôZeà)ƒ=m(‡>º%Þµ¾œ~×bz¨šõÆå`”ÿ?ˆa±Ýb¡&€ÈÐTMb•¸eFŽRZ²ÃÈ3ÏÎE:ï::ô9Ïē[’¦wψgX3"¥Ç)çdUé•c(ÆñJž\9/X©ÚÁ ªäUt&UÒWÁÔ,±}ÉRˊTÀÐ5Q­êµˆ¾:Yӈv¨2 + ¡9ƒÉ‹8kb4—Ñ4{3ܘj_Í ˆèF~)Ⱥ`¾©R¢çD4W9¨á‡ìŠ\2£Ðë-(ÉûÅ,´¢‹s +킵Ñ,ôÊA‹Qt'XTô£È¨³Å +÷%C-WÈ§Ü`TaÑ^âaÛĵò§ççâC,tTâÜqJ¯šQ +¯ÎÀvã„bå +Ù +Ü.Ÿß ª¥£ò’º×ÝOü~‘à¸?Ø3?A{«¤¶W·ãÈۈYn—·³]ºåX>Íð+sÇ"i{{9ÑpŷóÁÙÎWŠ6pó×^îÀ¬U¸Üš‚‹=Åіçc»{!øÛ1âÜðvgÝi_f=Õ¾Í{›‡’UìáÝ UTVþõÇc§¸aXloo Hu§ä8?™sÒÞ\Ô ô~Üqð}Ö'Îñlú™Œ6ZÅ£#áå»±4-â[nŠÅ\9äŠ8¥bM,¿¬V*øÛ,`•Š>VÇz8Eb”ì\t"µ[åù;EáñKÝ\ð`á†BpЊÈYqsÅÎwŐø¼+ÿªÿqÅÓí/}¿ìÉû®7ÿÛþ®9ÿτÖ+EÓ"|«¾]r´·ù‹™%Å~Þæ†oý´Æâ&³7W¸îŸx|?Ӆåâq»·¸Qºrù°ÅÏýdܽÄßÿîOå×àϋÈþÞæ?‹wÃCi¯õ•É4oper}ÅÇ{‹Ž`öã‹ú‹Žvü{çDt+¢ãËÔ/Æ.Ž3úã=Fñº èÞÆâ§JÿrÅs޵0ø9ù79KÏßÔ+ÄW®yþŽ5«¾]r·F¾_Ž| |<»ur l~]#öëð$Áé+·‰ÁºEtÝ/ÿ)wüÅ.ߘ¥Û®¥ÛòD®î»·ä%wiAÛ5°X0¸O4û^8(ëÿó“øñ­jõÚ5~$ëÜës¼Z@¦A©‡å±©úÉ6iIæ£Ò“ÆÞR“œ&Ê¼áVá¼L7>=,jA,6ô–qfòûXßÝÁ|¬ÇåZÅ£Ýò)`”È|™‚¦]¤‰|ªØ‹„ÑMð÷U±guwE/$¨ÝÌ(wR¿ucFC£C¿ü~ýÝùM#«…çæ’kM+¯âϜ*T_ ò!Ŗ>VAÝbþG¿ûU'‘Jÿ‡J¤ÿ¨ž‘Á(”h@PøÌ¶Ã†€‘Ž©mòQC”üU;ÿP×îÊ9úôª/Ê­·ú›ÚR½CD¥sRD–¯êTykÒRØÙÄ¥£¥ 5]#‹‘üµBž'¬ëöš?¸ÿB·ý'+ýµ½ÏúD‡úÊ*úÕ ?êT+âó?ÿÓ£ÇÍæ«žê1\ç•~mÜnµ^gËÚ¾Ko{ïw 4¬·ØÒ'š6L‘›G|öÇÄ8ú³ŽÐڄòüã¦qóÇH5ûc¶8úóŽõ¡ä9Çþ«8ìïfhÎ>hãéŽ>HÙ57£8ï>pãèN;£§8îN=™ÇhqÓ8ìÎ>Žúa©.˜Õ%ö§sœwlqõ^qó†Å¥ýYÇllZ'Ôz™S›óÜ|ñÇ՜zs¸8îŽ:XT»Î> ã³8ï=·@m»8û“¦8ögTqû³¶8õ§†qô'¶ò<ãÑvÈÅçÔÚ8Ü}ÉÇðN?†Žà#Î>¬ãêŽ;sdÛvqÐËR=1ÇC-ÜêÎ;ӏ£8úsž8û£Nqܛ.@éN> ãº8ò~1>cA@#þðÊ©¼2€G¯o  Ú·†PӘ†Pí‘ð~"dãž©š†PØÍÃ(yé¸e®n@Cî&á”44­üK¯ÏâWæœÃ( yç0Êúr!@cœˆPç!”>ä2€Æœì2€Çâc¡”>:@cDŸ°?Š3‚ž†PïÓñ +œü2€æ‹ý{?  AîýÐ' Ï7ä ¤¦lOãa`²Êœ„2FÇ#ÆÐÿ1÷¾Kïèì¨{ì~ûW7e¢îPÊÿp}û–ú{RZï'/¥ø|ç;CÁÂ6ç{gӝ­3Í6Ë7€ÌeûL’Ÿuž{zïëö¸¬·ôsžG*Œ­ÿ´;Aûª¶|ZÖŠªýÐõÌAªùŸîgû™þ湟떐ŽNƒ;†ô?oGöêÿÈÎâ•ò•í«Û×¹¯ž¯u^ò¾–¾ž¿9_ž¯Ð×èëêëëkôÕúzýGégr«–¶öË õ††ÃGaWa[a¦°ÓÄgrÞÚÃs`…­…´&w2¹ïg»×]ëÎ÷ß Ú:óæ³ÿÚÊ_ðªø=çÚQï4ç¢1xu$¢²+¦žVðéÆE+köGîïëuØÕ¨Ù!ÿú6GÎL­E}|;Çé£d|‡ø\öÙm/Sÿ‡»×èfMÐs>ã; Â^ܒ·vÙ϶ÊpN€ùâÐþs“îõÁ\_m0̗äÐïb­Ìù±ÿ¾“FÈÿxä®Ìÿ|…ÿތ>èÁ³ŒJ÷’_>Ðع6y¬¨Õ'ó'EZh¤ˆÃÿÚHŒ?ý{\˧¶ŸGYëñ€Î$¹Ðó[,vÖ€»ðBÖIx·Îb¹ŽÂ!¼¦Bþ&_b5Ýæ–œoàT´åsÊ^¹“ºÇ(5²K؜¯pȰSí“lâúB÷|”(4|”-ÄSPÊ?”P¡¶£-Ìà±Ð¹4çþ†xê/:…â*tð}IÎqÝ¿T÷Jø}bu 3 Xô$À”`gàÔݐýšú;‡£SuŸœ 2ÏV†Ð¼:(m¡t vƬÌUԆΠ]L`õüŒþ0>¹Šør7)E4P}ñIë°lÐýõižƒDÌÉ´?…Ð0BøH noè`€mÚø–É«O‹("ÙÛ^< â±peMþ•rUøgv¹ biZQóɲ™ýrÃù¥Mi{‰,+Ié'ðdô)E½{ªönd÷QìœÕrò ž÷1±$öé[v2 ºûïXÒv³32LÄ$;‘ ±V(­€± ×:NÁîEŠƒWÔj)Y «R†b@J8܂ÌÎܺë]«î]®ÈWÞ¥¾¶¥µ°iU$$’‘AjÚUìz"’?¿ßÿïî÷2H@¢ky¶Ûy¾ß{—}Íø7âÞ{›ðnü{Íø7ãÞnïàg¿÷ìßÀ}ø÷ðwï´ðõëd–ÝcmÈm"ݵk{¥üÓAònHn´A3”l–«‹Ç¦]¹ÑŠ:y—WâñyËí˜ÿ¿‰€N½Â§"îÇޗTí{oœ‘~ç(!sĻ喃ëW¶U ¥u²gKáës(ÖØ>·k[#@™<öÚ¼2(‰ âËÔ +QJ†Î<øù)õÌ™i1“zS)•þË4quW¶ô—üÖ×MƒY¹'7,‘¦¼,r¤Ü/‹ü㳞N¿ˆ‘,،-è¨É @çœKGޗâêú–Ž)~2Vg·Û¡h$üX:Z|ä´/°~l-%g3 AzV] A{ñWáä¯ÜºT%aÖÊüÖerÏW#¯äZëë œðdƒƒ´oÜÐ*ú7O»+jþþ'Õ&n ´Š¿‰ò•bh„#±ÒÿÐ-G«"µH('ŠU½¿ SÙ¿Ð"JõDÀ«Þà„l²~8ÝqHݛsseÝ?çɑ“ëyÉ¥Cº #BªÜb!±o©«5–7ê}ó¨Šò-dßCÇgzâ-!ó¼¨:V—­VÌ iA¬¸×¨·Êz£4ތ Qc ×FÉ^—ë7 3^ÝGg5ƒüüì ƒfÉs×Aœy´$âìrÐ;Æ0g ]yQ{ ê\ñp½›Ðâ^g›迯­Ö¾·´ ¼cŒõ½vJ3§ ˜»fÏ`;}rյɛbµmÝ5HŒëƃ~A‹´%“²Â Kr…/ +Íöb²í<þö§õšÔÓZëS;[™Çy¨±8Ù&å:È9c7.ÙÆe«Sµ¹å~›Hžá[üéÛïUïÿd'éî>(OP˜dårvûž%‡Æ!9pÉEåQ ”ð– +<‹§ÃÁ²\Ç&ÑþìEǀþß +}‡*¦Ö¾½£0øÙ§·ëY‰­*Hƒëd¿™‚ Ž&MköDî–õ‰¥øÃKxœ[p%Ø/t½ü=/ú#Âûƶ|—ŽAO»äµ'ǘ«®¸®o•¶M»°Ü—bÛ.h¸ä¯Ó“hGhq üÃzÊnq]¬ê»@ô UÕc&àwlÇ!öç{ߚ:ø|&•Sæõ–®¡í€£À8À}k˜Çh’5 iLE¯£>p TIJæ/ËtïJ‡ùܚV$¾°¥°ª8h°ß4j #HΝ•œRÎà­"Ν±6m‰"ßó'nM²¦áb“tª¥ ö`¬ãœê…å¿„/!bÏ{(‡¿¾2F†ð«lH¡Æù.>±ôû%ÁÄKNŸÚ÷Å´Lçú\Þs ãéûLìâ³þVrQXÝÅYÖ«'µÀ?ħ›V!0ãíô`´*ýÅAtÖ~#&ð8Y×ý*¢ÔX½SYgð Åzö®ÖOY¥nçypú#ÕX¿%ãä‹Bü®û7ÑWÐXνpZpˆv7Ïó JJËYJCUÝ#›$µ6AŸëT)jli·´SgH¦¬5½© ϚÊ͛“m‡øŠà9¡scI£¬€èÚ?I…$t<‡F—Q¨ÙɨÙÙêMU¥±Ê­°_¾4ƒŒ^q0vʜ"]J“jÀ32^æÊåâÔcÈ;ÿ±_¢À2Žàæå°J,¦F¨´/jŠø †Ã̤WWvì2²u[}ˆ_|>†nu|Gބy ++Ä3€Ý€@ …Ñš4}8D‘̯¢çXZÏ1®AІÙ±1všVðBër¼bdåʾâµJw„½:f£kW†ý.ØÇBµ¡_ïÖÙi\Á’R$³½hé²õµ| Ì§YëËŸS˜&½¡’å5cCaE‰5Í3´®àÉ?4‡ÃЂm¡hVŽ™A]ÔTÔäH¢ ã-ë|Ñ/’ù(ðš±'˜å¼s°5xkÀâ=fÞh÷,W°ÝúÖ ¹ú2o _¸·0ŸÃºxZøû§àwÿéÿ¯f·GÙ¯¿‘³\êøMùl׍AL‹Žuž×{_)¿=i9‚éfÌeP ¿ŒvXš¹d©xÂIU*n­©KÂÖR9±Q-?”€>~LÚoGKOXi”î·†×Ö}âÿ—}šÖîéªð¥Éåʋl‡sŒñ ¹ÙØÈ8¢AŠðÃ-‰óç%UFÜ|°Ôè³9óðýw>I‡~é)X{Öð{“žˆž\ +ý,ñ!»ó±Èp:4ìl£wHm,bô>Ñ×þ2tí› Ö._vÇ? öYÀ鱬 ‡=û‹Ü³Â!Œ:¶ ÏŒ_‘Æ*6A}}èå›úH{œy¢ö-+w±g‹ë' Ó{þuÍëÄïƒxÅލ»aƒeNÂõ*ÞÂà=ƒÉ½J¨Ænƒx §ý{‡æá°Äñ³p Ì3› ró6mÓüŋSfªÒÑýãüIžïžxm·…½‰0m4ä!ʶÂnv ²A70Xùaù\cpnºÂ4mÐdO°öLó1ɗcò.8ÒõÏazÓ°oKú §xÇ0öÄ´Ù·õ¬_½YìÈ&¶°oFßEz±û¼¢7ãÁßì׎¼ìe\ޝbçq9ë\Ô'÷.»Tç™59ΩÔ¹§=8¤í<ŠsӚœýSSŸôæEBL7rƒ…RÔÕ±:lÜ(2ìæÃr͛t¯~Ç&lÍ\œÈn79³/ǎü +>îh{m«yü ¾‡4‚j4Õsú]ÒBüèÝ¿mÅ¡ «ûhCà ò½(‹4ö.m¹·ñØÒS?0öÚ½ä ÈÙW ø¶¨a;mSØ&³Úklþ!xBêuõ¸!Ih^¥Öåbúë`‹ËKŠ9Q*¯$ÛXêÉiòK§û—U ¾>;q'>Ñ /­…æÀ$$>Ž#­cÈ¡L“™}a<±³‰ö&ý­†7*ù¶mná Uä6ú€íè›A‰¶>÷"tl˜½€/`´ÕI¥9iӐÛ2ýf©†Ç•&Úé-Mp˜Èîá$I:Þ^#‡oÿFÑÓ¥ÀÔu%þ1ä¿ÓÝ~¹/^ö7‰'s„ru~äú‚­q|MOÉ֍N„Úš‡Ô÷èÔð[¾2W~êcþkb™vße¢#:&9€¤nY`ZíøÓŒ¥”À—Ã~ÚÇÎlQÁ÷†cˆøŸVú)¢pôѶÏò×2sÆÝœæZ“‹n½Bµ¹“BñցŠ"b^RtkX@Œ#æà~ØNm¦„ÄçÅ\dM—òXů¡+µIË«½AK­B¬PìÀå4–¦½W6(­6ýæö¹³Ì\|ŠóéÒÁ“7*öì)¥o?)"ìÜí؝býaäcÃþÄnQ±æžºS¶M€Ùs¶ng÷r»Þ͕} ¸å„¿R·¶MšÂV +c¦·˜8%;_-í•0YÐÕðŸát[[ò+Yì:‡ê» ûBkB6åM7¥ÿ¹Ø*ë~*O²?#÷8Kp…pö ixv²P:qÖ䆐0bÅÇm$l½7ŒJñ­õ‰† + ·è•¹G3i™íƒ&šֱò ‹·Õ±Ï¢&iòƒ¸Ázÿô&lï€0WŒ#™°Aú*Ãé·b/êk‡X¤Bgø®ñH¢'Sü.‹µ7>yhäãuÄ;Ÿü'Ü­Í +ߔÒßT\XL– +Sm OµGà†_¶;_[ ¦*Ð8*ó«ô§!jÝ+˜´c½®è.“ŠxïbÉú֍ËÕõŸšâáóMi»b|²Z å×h‰ ©ÄÑiכ×µwQ ¡ØkËöÉ#›wŸÑNþ@A¬ý"¼4bqÎz͊5güýe1dÿŸÛø¬d ‰ŽxEÜÑ\±ÄÖᡃ’&OC9Þÿb®b¹YúÖ,޼øÒќY5E²´P|ƒg>~aw +EÜ©xs  éà1sv†æ!p[fŠLv¿ÒöKlÝöÞFÙª-ù¸?ªjŒ`vå°«žhrØN-¾˜{ Õ;¹µ†Ûkd@uJìbù`ÊÇ[À’W0»˜Gü!¤A”FOlŶÉÃôÝÂù“to2KKúDºJ/M½/Þ hÄÚó1à[F& ’¾›Ajך€õ®5`FNÚîÿœgáz‘:Óѹù˜É+˜¬WAz&#‹¦Šã)Y¦vÍ ¡!@Y¹9fáž@T›̔G^d²4>“¨÷ö(¯Å[äÕ@yaÃeÇ~ØÜŸ¿ ®˜CqQ Ӆ°Ù…¿·´ÃÚ)‡«&Tž¥°õÁ}õÈF”­Î¸·ó®ÛfW3ÃaVZj +”Û)_&1Uo ·jàŽžH^·CN +¾^ +vÕõgLTÂ]ÏÙ?ã‹9.ß7ã7ÚõæÃŒÖ äêl~9ÄWô ÓޏnRÈ‚Ü÷VÆf€n×ê~ÂkL‘oƒ¨8¨Q\¾WкgçD•Q KžÐ:zy0»L,ÃO™†µœ†?6Ç8Ñ©ògÔöþÀÔݪ,ò€¼ã‚ý-Jæ˜ØX‘°òÐ) ‡”Ô°ò°›8¨(¯Õñ@ SsÇüg¦æÏøâàJ• +;ÆYZ•ìCá΅­©cŸ†è7Ø&á‹ò‘}S±4ñâ~}MÁ1u\ Z U{"ü’Fåk:®¡¦²J'Ñ:ÆkHѦúþpÁAÕÄl/€Vòpàà™Ú"ºQçÆß~àèðoµ‹†´3ìmÖiC£ÛGîÇ¿£»Š‹•"^™we“Šõ‹â ¡œbuônÊI±R!;jÌÜV‹G¶Ñ`“†œº`öè4f¤«Ž²#dû ÌÍËlL“rÓö„ÃOH`9€Œ®Ã#y9*}Ø鍱; +£ôÞ ¬²}Cþžý9¾yÂ)»Ô—b†˜ t4óŒ_Í_ISýðiáøŒU‰ö“ºëÍþµÕ£?(î•S£$¶V +§b触„vÅì\kÄé·p&¢äޑ;“ÅØÛV7,]µNkGBA/iu³‡°2ªS8ƒË‚éÖÿÚ¹~Óκۖ©–j-/·?Ä`Þ¤~‹F,žÛXK@þ‘>s\Çlmï)œ@ÂÆÊ¸.˜²é·²ßŒç°~ãq„ôPÅúÊmä Ùû¨kXÜaŸ}˜?W7˜º¥u87ûñöHd †Ëwí¯³Ÿ]š—EW£ÞGêQîÿúxoݎò7h°W¢±G½º*ß[Ì£bô{ØävÇ÷2F»Û†×½Ë©ß~Ã[á!}â5ßäÛ_ñ©6¿÷…cŒÑ·Á¸mƒoʶo}pÚú1ñ¬Œ¿…bÎaþ+ŸøcþTŽ]¹þ±åÝ,2_Åb1»÷ìF6ioø¬6_ìXv¿‚Äïø<÷ð,-ÿ 0ÈFk‘d¹ñ‡1ò±/ïœEŒoãlÿüg¹CrÜD&oä¾·×û]¶çþªZ Ÿ+ÍïºkÆ©¥ÊuY^_ÚorƒõõLŸˆÿã¿ÿ¢ã¯ü¿¿—÷ÿ¿²½8Båâû~uHêÃe"ש7,=¹^3½O•Õ×0j«u]]Å#- ñ’‡ÿ7QKQ +¢ž£»¨ïê**4µjŠº‹‹J•FΡzÅFKʙj™š™ª™Ê™Ú™ê—µ*ÔÑÔõ59zœÍNn¦–¥–•ÔTéjtÕ>%M]M‰4¨§gR½N⥶‘æ’[I3¤šÒNi't“ÚGºEt”dÍмޒ—HF/îJºÝsDì^ñ˜ÀûŽÚáÛnü¿t‹õ\6›ÁÃÿñ¥6 7¨Á‹sÿah?ÃÿàºÏ‚sçÿ·¶^ޝx/„†!=›“ïp¼ƒÄ.à™üÎqÿN¿È¬­òÑññÃp|‚(/ú‰×ÿ ¾°ñ¤¼ã€ÚA‰d7)~ba‘Õ¾ñ³ãÅ5!R™8SÎ.›~è^Võ¾=ºZ5ó õõÁ!øn§”=<þPDýäqƒÐàDŸ…EÖ#®¸îæYKÐq_~B56EêݨºáK4Åõ“ê·ÂøÃã*ءǸKGÓåÂ’GC PAºÂ.mì@Œ *4Æ +v+y‰5Hz»]ìþ‹º‚î;|;’»Rl 蟓v½ä³… €kw„@°'4ËÉіY.“ +=¾£¡Ôv ¦eòdhïËÑ^˜åähý‹Z:wâ4„ ĸE©‡qíÍ"îvç¥K\ ×Eý´¦Ý‘bœ$ÁÜqŒšT¬#^ù¤”8¨`°FiæC´C‚nÈ…NYÀBìú¸º ô¨ÐÇ ävJm٘¾ 2jå²S LdÅ}JȽç1ŠÂGόŒÿæùîT‹nLG°Û%ô© úÓ䎩Ëóm†¾l‰7±ñœdÙ óútBá{ï0Óê=s—‘ÛrÝnwèpnuËüُpè uÅ覑·áðËÔ]°mšÎõ¹¨ì»&9Ú9ÚD³jýÔ&I¬P`Ùï­ED,2Ö½mhòVȺ&ÞüþF.PØ1ˆÞ=c¥ÐÅìó¸MQ)DGÂG¨Gâ6i‘QƒG;ÀÏ÷°ÁúêRš‹§NÐSÁ›i#`åc°øk°ó}7Ëy ÄUý+¦^7L Ë\0 áДÛèÑ-%Ö¢1;siå~þäîßÖÐg:àí89wȳ«ñ°R†¿¼ÝZÓ²áœèìbFøö]¥ës}õÑ)<Û_àIé¶£Ó Ê ÏL¿A.rÓîA"h¦ù÷%ç0'Fµ–¸?å™Ü¡÷‹!±YyþH4MÓ9ÓÏȁk5ÞLµ8»uÒÍM›~TËW&âöU*ìk߅jû^xðÞ¨m‘²¦cù¦O¾Lµä6PÇD?Ç hwҙjêfPß=øñ–ª>yóYãïGk¡8S3úd¦nþMr`b«ÝA"#?ˆµk,‚é9ÝñŒ »Ö›oD¶·P›ù•å0®Hþ½"˜Ô>v5,/õýC¢ÒŽ.wé ƒ ¤þÖIZšA¾Õ¹`»”sÓù1ÀN!ã²öðþV®Á +|ÉU9û-¸°Ú±L†<¨w 5š#—àÐ÷«v1› +f½¤Ô7sàâ1îXê>ò÷Î$l¡Û'Fó‹#Ô ?{8Öb4ySâ"Cë-ÇÏC8ÐÏٛƒ§›.B×dØ'¿U€Žä‰Ïµ`גMvd;U՜ŠRÊÈDN;›ø=ɵ` Ƙå:ôüLÌYÊ'm—»ñáZÒó²Ô1( AÆùۀ0aÚÏçÂC7ÍÎv(Cóü{õ¾¤&Y€L ÒBóTY§¦¸Ø7-rtës÷¯Ä÷:vàqñyõt‡ô›ÿd‡œ»ÿ[ƒïÈpؑôÆ)æÃ}TZÌêÃAçoƒå…ä²ÒÔl‰Tð n>¼–ÔÔúTDýhìYçã¯v†o/B²é­j¤[ޑŒÝÃ-¤ +ëç᎓ƱºæË+Y·–L—§Ú¡ÛÎl®-->†o2Ö[™F[IY·xÖV^âäë{ÿ^e͂Ï çi Syi+ÑqºÉÌÝ#ÌèH0\dæŽÈ@ïJÿ!.Ù Î •‰ ԗ54á¦ÌÔû©†/aÕµéÃÝÞÒî«[!ÁēÆü]†¦`‚2È{×Où‰hûÂ*.wñÆêâpPJyr#RédwIÃÙ¹L8lì63 ØM_R©šƒ$œýlIIÿ2=?«ƒŒQnV†ªyœæSZÅmX/!¶)¬œ¢©x^NJ3ü_Cîה-ᰛ/‘óÁÀ(‚Ýß8–»ÁâÈ+äžòé †ðTç ZÑ-çhõçfút=ì¢Q‰Á[×'¾É¶[]Á~¸{×G:£ÚfÌQ%ÑúŸÔkocúÀ"‚¡úÈ ^¡óT ë\êe;–×&¶©©Ü>»EYß´†Ã)D–F¶<î4ç|×¹×D *ãåªØç_­•ͲPcdorÉÓÆ–»Øp—*ÞH› ßpzCÿýÌÝÑáÞº‹ÙÙnçÒbŽ× £:Tä5~ÉQ-èhõôº#R?ÏϚà@5@íö£¶h×òžh€i^T] ’Ps袜Ò(¦¾òŠy‚¢žt´QNjQúYëš)•¿XYI¹ðá–{_ì ¸4ž€$÷h$÷`$÷^$ö^Džò_-CFEúáëÀÓ¯Ÿ6)9üÛÌæ$‹³£2Q蒀EhÅ”œ-ÒS6$¦À/$Ö ò1©aËõ¶Z=x«zÖ9Ú#U¹Ü¬}‹„j’/Ù·«w·uoÀ·Ã´Ž@ ñ ïA¦öhbîQ±Ùúe÷dHN¾²EXvü°•7ÑCMœÈÃÏïƒw¿}d¿ŸbqôN¬#<þ{4¤nº‘k©À}­¶I¼T;‡0e–ßOCµJ|¤ÜèFþ“PžôùTjêè=¢p¸.‚;'p]ç°©Ón`L½¶¯¾A¿ ¶woÎZ™°Í@ÆñÍOЊ%#Sƒ¯-OZ^\Ó²ò¨XԌZ€*!‘åUÿlÝ.çrHÐÐâèRfðÅܟ>M ǝ®ƒTÓ¾GsX.e¡¼ÑâȬ¡;£à3bH¿lß¿Ü! ᗔ¢"‡`å¦èžÆÉp }™h‚ï)–Pý óäÄMYà~Hf>ÉÛ  ]ò„sY|]:¶ÄÓ1¹ýðl‘”—s(‚€Ûvå&æAÅ4šeÀ´äFþÃ27‚Y§>ˆììè¨aËè˜ ãT9%n¿Ür/°œ/QÊqx +c«N0µÏtl.’Ôz¯3£ñ–*K‹ÔÒÓ»&úâBñ»óô-»W@xP*²•¤Z j¹pÓ¤F0ɬíS~ê-³Ä}‰Ü§åmSî=;ŽÝ³e/{5|¯`µIM5é=8ïTÅ^ؽi¼´ôá¦%˜¯5*ª´âíŸ-döékABJEÕ¯Ö[!²qþÙ/iÈù³ù9^Bùs›l×^Pl×`Leg1ãð ⡯ DœÕ¤Ò„þ +ëZ‰U?n=8å·%Ül6³Ò3¬…çi©o!}Žêç¤ò֓vá|rb ^ò…mgEà>“-ÌNџ¢iÔ 0jàçÕ·Ro©\6èvDá­±ðèr–t8m”K|é2BZG¯;qL€X< Ì֒Ñ™7`˜0i¶m)Fz¥ôÈn‘̺,ãW,{>âéE4KôDéкp.xJÿÚ¹éšâ{Iècµ‘ ]Ú±º9Åb|¹¥bsà‰3œŒBhˆkç8úQtê´È„8ím‘.Š›M¡Ò9ÃØ@Ø5ݔ“æ}_%Â<ñýAzVtšHúNóIæˆ]¼gIÇÇÒm^p´ž/¶‡yâIÊò\oOÖA^9~¬yÄñ$üǟßâIü8zÈ÷¯ZЭ³Qo]pIXC–Ü=ÓÚoî2šì0×3²+®¬h¿ærÊü#MӀy|y Âü-&‚pìQJ_Ï8#FvW+݁]œ€“‹þàc^y¿ïÓÿÖ5á›Ýh;é?úu¿Ú ‘ kì¤ùcYÀê7ÒÞQ»“þÐ:Œ‹ÿ_õÔbKõÔñ(óì“^>¾.I¯_ãÉGf0}ûnÈ g¨™n¥WÊMGQ [ù‰³ 3žÍ8­òι(8·Ä”Òo¡ï\ç|± +øœecA㬠l„QýãœæÜˆéA0÷˜;2êm\šƒ÷äp'–cñðÍÊ iœ¹ÙeŸI‰±¤N#cÕpú2 2ߑûV5¹ûÞJöéÉ9!òXZÛËc2ÿzîéːNbþ°c+·.þۍ¿6ÁýùnY-k´³{ôu­cã÷²ºîîQ…û†zÝôÏ'KHpîI×;ð_¹m{Ê8lì¡þ=ÕÇËüSY]‹wÖÓYIfÓXԛMg$]4|oÏô­mÿ +ë§ý—`ßÅu-üWU&¬Í¦aG Ÿ·÷¨D[ý«Ÿ…¯Uuhº}ýcËánñ½Âû­k†å×q%&&FÚ¥«ìbYëbù>ö]’ô~‹¦ÞmKýîîêOféw–G’›CHÎûôyQùd]ú©_… `à‡|þ‡y¥ùnWüT=å†êïæq™UÿGêÖÐj¡ÿõó›M%ý¾ý\?üø{ðã³+þ¾ÿ­ó‘/󟇾 Døýã¾NåßÚ1ñü=ü°+äú#“S}ž‹ßð÷þj(1ÿY^ß¼ðû÷„”é2U´²<>þ[3sá÷¡‚?l±;®®18SÎ`ò‰Â¥nÞ…¯ :Í£Å/v)ÃÞ<ºñª‹¼IðëÅXÓð3çY±Á{|¡Ê°¸¥ö”¨$Nå÷KGm4ø ±€÷#¡'ޟvÍ}Ð_v–ïî‚ã?mïUN'lxTñm×Ýë?«€ÎÍ;¤áÁÕ셔̰G}B7Ñ2| «]³“ÎgÐþ¿SÀ&Ó“øŽ|£æIÞ°Ÿº$kÜGûãQ@ <Îü™â!°” ½ÿÿ»G† ©Ê—? ¡çˆ Gbg®~þ‡÷>(Iþi xgQnjžûؤv;‚TçžÂC÷&39àVû$€‘àÐáQ¢qg°A؏VL—Éæ™béx¶™[]8Љ[søÒ½j{c04_ ?”6tW3u5úÜø’çð9ûRÚmªäÈçÚIÄiѦ70Ph”èÚ?t¨ð‡æsèð‡ä#Ÿ³¦rmEۚV¢ìõÜ\օ®¡cnô" ÏTqØ«GtÔÌb¯?§KÃJ+HT¬ÌSAðN“ÈŠ¹º7»ç%üZ¤2T¬ٔüFÎΐqàíBÒ´~#PŒ¹ –»\£\† ™471­€vðiöl‡òá+Ž?×*¯åDl­ñ%léÍú„ªqêžâî(bì¦Ó¡ÅúiÅÛ1òäP¦£=gá2{}‹R‰Ï!U•mk¸à!ôbè)’IH¶à‰Ü&œ]ªÖc…·ã( bÉ;Õ÷ÒÑèOL†ýn “íó§Ù<4i6Jèî÷¯i¶ÐiºÿQ™mYù0Œrr†-{Ø»Ŗ©¥ÿ<7”Zü[tñÜ» T_Ðڌ³n^¤Zøì‰n&W‡?›éPÃ˱|Ô6€g“A,Õ8úQbz›ÿ¶ZÑ>gVh¿C¯/™ÑŽË'×D¬Oóê¶L’ƒ_þ#.¦ +IŠÞBN ‹x˜Û;o…Ø9ÍuÙ¯˜.A•"~·ˆï¯¹o” +TÔN@AnkÁm!ˆž¢R¸ïáà „Æ“RÕr iûܰØ{"–ž›-ôߖFm8Ғô‘¼8_±$w6fȺg"圌›9Lä^##%$oÖô×ë&oÖQ®2ʒkºH”wÄd5£—TŠDẑ¤¡sª½ù¸´¦ó-ú<ëÕ[éÚ!(ʛèæi%è:Ä$¯±¨ßFuÒ?F~†.¯#Oó&]á†ÝiJ`MRLI-]zŽ€Ê1óä‘xrá©›Z';õ1Ûd»›pªE7õ"À›L·ËCVœn“Ç[%܆§F‚倠û£µŒæ>ëš"6õZ¡dý§â“8£cUÃööLÕÄ- ›ÃnwÏþ²n¿¯4å¦Y—„±‡L1¸lYHs)W(XbÓMõ$Û2ÎQ<6¨ Ã~ÕÄ£ÊsåS‹FëhžËÅÖ³‘'ã“}ñº“‚ëüžPæ k„`2ÖW¨i¸RJ›_éqw&MìÃ&_jš.f”zÔ^®bž[‹åâ2‹ÛaPÔ%£–<å”%à,®ÛOŠÔˆMø­¯…÷›]fʼZ®cÀÕUKèƱXe±uz€jgÜ7|ä/òäb 6(¥(£p¥ÔyE/Ĕ];$…ð˜ÉÊy"y[^÷·C,̏"ÖV^DŽÈh¸ò.ÛeNG¢³0ÐîP©«*²”ä8dB*²|#~ù¦¿–o×° jõ‰ ˆú“ŽïG*°þ¼ó)*%µvב„-A—Ü!¸ylû8ã.¶tÆ«ñ»6˜‘$žm’,1&ñn1úýô$²ÿ†E…Ä ({·0eNEÂGµ—‰Ä<ºàƒóô9Þyv>Ÿi#§ÿ³lލÒÞ Üò×ßzƓ³72fd"ÀTTG‹±A ŠçC1s%"TµµŠ,ehŽ`ÅÔXzH’g\õ®­­òmõk§¨ÚAn ‘ "¤°ÀmH ýû÷ÿÿ{™’I «VÛ}»¾Ý÷Û¾Þ'¾÷Û¼ ào~ûx»ÍÝãîý¼=þíîÖÉ%’Hã§qЁlĈzpÀ¹äûó +»`) ‘±¼¸êb½Ž\PD‰ÌèÇáƕTW3üAe°~Üõ8j?_eêÅ}“zú€÷åd8æ$"yižà± ¥Õƒ­Õª¾@Ž˜]÷„nÙÃ#ÀáK‹Pޔ©lÓÑ1ºLx^ Œ{hŠeÇ÷æûjÔÊàî˪?Ô \üžù]V~å‘ ¿ŒL8LäfóûóT§h±ðVf7¾1”b3¨±î<€S8£ôÐ;Ijªˆcž« ‹áNN{6:>øZ{Ïï–q­ÈKùã ÷¾62íÏMQ"H…x¸‰H|_“™s‰€9÷¾"3¥*â2$RÙ‹ÏM§Ht X—šWN…ñ0w ãôˆÓ†¬=k¡éêàG'y21eŸ%lã¸E¿MAÑdû„½Ö3Ð5ѯzP2Œt«˜E§åÀÈíàáEßp/–DíWµÇ–ê%'žªKzŸ—b—`E.ú¶ivÔL½cÄ©ÆÈ8&ïäbBÕoårû¾Ô»ô2vև]š—1/þ*_®Åó”¾{˜¥ÕnårÏJLŽf[À2¨̓õ]%Ú͈ÿ¿‹ ô;ëÄ®a¬ôs³&ԁ±‰?p™ŒµÉ·æHò²‘‘¦9V‰6G”“#ß$D˜¾özp˦x,jH¼FŠ);Ã3iÄ0hàxäö' +}E¤¸Š.ü¸£ðсöãh»jPð€-̈²S-6j•©¥ÎŸÇ-^3BÆG4§(Â㝿ƒ<\Îä SpˆGa±Õ4¾¬±-ºÕ6ä˜â²;MÍÓ°ïM¡Ï-Yãx¦ÆÛV>BäQú™ª‚‚¿bÕc]÷çy6œïv9½9R^ÜÙ4/Ø\í.Œ_“÷”î·ñ†ìžÆ.}ªŒ(Š=ñÐG%÷ßg!»#ÖԚœç’š=9Ï"Q@Ûc¬ÓxgR.Ëî¼û÷>¨u©¨v–Îʬµï A7œyϺvøcaA"–|¸gZù±è5âÀ6{¼šæÔbÈ ñ/†è—P…‘6Qƒä3áb¾£`IO „Ùh)s*$k×»¢f†r~뺗¤£{"üéÀgHd{Ӑ%)ø½ƒÃÇ ƒ õn9"˜äz²ÔŒ4MMõûƨ>‚-lS:ˆcàõ‹s|¦½‡Ô‰ájîŽëtŸ‘ãW¸bK C†{B`=eBҀ"!6ý¹¯0ÖÈÂ6RÇïMhB{CSï55×-ÞĹvB^Mb¬9;l˘iÛ*.^e;hØâ /vh)òžÐ´áF7Á3ÑÂíyÌ,¶n3ëæƒÇ=3ÀúäÁîÒᝃÀ AÍM–12”atFT”#k\÷T,Jmãܔä×ò`âŸ?ș¼FV4EXy¼dBZ ɪ”o9î,! N`v¬O¸k*úï-õ ÷@ØÍË=Ä^£Áz11–”þµèC1Â3õ/| ¤zMrŸº‰ª+¼ÐfçŠ,PD:PÓÇ +㌈(î0-Ò¼îކwn«dVU½ÏuÉU¿Ÿýj·S©ÿ&WôøßÉW†I{2¯Í÷?üU÷Dø"].à$ ›ESó'ŸäÅ~Éß­3ÿ”îèmi5=(j“›œÔá›DÌÔüôÏÿ\¯Ú5_}YW㻏ù*ð.çørÍU/$µï ;\޹5<Ã?Ã. +ähY]†å)S×9SßÛ¥!Fík«þˆæó J8é¾Ù¯?¯Ì̤r’¾Ãæúªóo«–’ñ?6…^n´¤Ë’©‡ÍÈ+Í©76PÈÍÍ<™@ÀòG¥,€iœ»bСyø½¼YjzáöÈ 7O~ijZ'âûJ×N9BQ\õvïþtIŒœMc´¶._Յ5 Ç7¹<¤B#[î +X¤Æ Q¸Y#;S^BLD…»³Zð|r&:˜кç/ôÁا¾wчÉD z örÜ ¨ …žæ¡"ýsþ»dØs#Ìóì9™æGŸ™ãXs'™q?3í[(룇ôéá B ðû­çkèÞ¯è¡|®9&¬ÆR™"%Ú݈u!nççyªéeΐqÆùŠÄwbLÊöîá7žõ†Sêj~ÕÆ? ØÞ—àä„8¨õüÇIpèDɦ`Aq!éä¤`šd:õ½8eî 6ãÒð&Ì@¤¦4¹rÔёA¡ +3ƒù0ŸºÏY|惖9é+¢âžTr/e{—å\ú§švjÁ¯uyQòpZXã|õ ——$ ¾ !ŒRìQŒãÄf aÄþ7U:ñ«¨çDL 1éÈ÷Xu’*(¸pgÛµ»W?R•Ú¾3´¼ Ó÷S¡t¶3öŸ'LüâÏLµU×µ[$›„·'÷×E¿~Ɋ2è¬û‚,ÂIZù̞od·âüQq+7Å} $wÜBVEõɼ¦Eƒæ2“ ^õЁÈ;\—·`ßí…“ë¨ >ʈå0_˜HAöítøž¬>²@øH@å>ïph{ãàžJâÚßr}[ÁՒQò¾õÞWÅ㾺JÞß\D޾’¨Ç½ê•#†’vKܰSœšbÊÃÀ¼bQ~óZȯW‰°ùÜÂ캃U©‹ õ°ÔÍYÃșWXB/÷ärÿn:ÉË(a” óð0´nàbƒ<°‰,õŒïmøy±…׵ō¥CÌL²‹ÿuÆ ŒgâaÂ캔¦ÄO`€&‰%ÂF„,>)‚IPè +Ž`‰òÎÛTñÒ³Ú«uøsÑÕú\ÚLŸúGX²œŒŸä9“â{lhÕ᥁Ä•ƒ·ÕvÇ!ÖÏ®¥7FxÞ=×Gttc!0õ»QLÕ +WAôIüs( +ɺ ‘YR% +@%My…·åì'¬$ÀƒãA9‘k—_Wp¯ Hæ;m§Éþ3z …l̍™qï¾{Œï*^T‹OU4Jú£á'pá"Û U*h{²beïáâ^œ8£å¬mÖµ8;ëGV§”ÆFç8~šzr¿®H'ùùh"4}?1N«?VlÀ’÷â96‰Q.$ ±IŸrFSÑã~U>Á4"ú?)`”ôÝx}x–‚ùê('"˜çìW %öß&ª­KïÖ[Uö —„+—ü¢˜ìñŸ:åð÷üµËö7ö«•Ãú´ÛïùK•Eÿ“tˆ¿Ã6Ϳكtn0{•~LÕýW[KB9–â…ŽT%âúó¼‹ÃæJ0lÑÙµÏé Õ¿¹†Äf_±îq 3U9ˆO€!ПöPŸ™2ß8ÝÄÿ¾D¼?q?ÀB€5°G(ǭĀ{EUR˞²§cžæ°âR—ÞÌpxÀyÏ.ö·Ï쐟ôM?ÞẔeØÃ´¿oÈ£Îø¸¡…,ö¥œ=ûÐ[‹³ôï‘ÌMo³†Q[a”¤HÀÀ—bIk:v2µa—ÂÒÏWu¾=óS± Tã®§c[Š-v1ýמß:áþTG÷.¾‡ÖP+d +~ÈúüƒvŽmxÀÖ,d3‹»\äFòu‰“ëÚ{Â1`¾R'–12E/ì[Ð>²Wؽôҝ´Â°þ¥>y•=‡>¿¦Lî¶ +9j®—¤ì÷ñð4ìh íA’Næ¯eýRxÁš©C8Ç»jº´%éèXöÊ|ç†Fsìr‰ZÒ„•¹°%Ý"wÂK²  ´’Ê¥}];‚•ôiþRâåŒî>¯Dɽ]ñ ~µõyA +ô%•–ÜÂí^¨ÂŽÐø}˜à`è q»°¸„|2À–hÓÃ̎€Æox7äç#WÙ cüIÇÝ!ô'¸Ç3¼NÛ·#=ág«ˆã©Ü/³‘>ˆr`1®`Üü˜p] ±¸–ÌaŠ= Ðêÿ(àCÀ+4>¨½ï «3µ"ô5Πf5À—ØdÆ~µ>k.f¾œq¿ËŠ£åØd½çYQ½F2xÁµ=\ZìQÄB¨n̨®Šr ªû¬+Jvì ÿ N ‡þà] vE3ì#mÓNnȇVÏ=hïÌUlëÞô§´˜'YZmÐІº±M÷2] Æåv0¼Åô¾[íJæ½/ÀF|o53¥fív‹w Ñ£ŽNB°Š ï0m\ˆË=”E +£¢Bƒ0,áÖEÒë3í Vìiç¸`+Èxó«HíX²ÐqR¶³[u<¡I&{¥Aâ[ÝcCቈvà É~h$jÅåÄ ÝÁY‡Ž_•]Ùµ–h½ /GT˜Zï.ÕY̸àc}‚Ai.!#sž¢3µüóæ$­i!HѯàbsòĎuSpÒÆCc7éDÃò¥df«ŁútýO€ÁxLqëª}ÎÀe„Ãûfž!^ ‰ˆÊoØa D’#¥\®Õ×W¯so™ÓU€FH ë®åó.!¥¢ª,n1Š'NY™EéQY9ˆ› n`S[-ç5;Ò§žÞsSº„òü¾eÑʊcÉÞ3Öà!:×pög{ÜçÓ^Y_óóÇ?‘7RžðäzÝ}kaÑ¡cƒSX’[k&ȗKT…#0¹•ž‡Ž%õÒð;ÿ´®ôÉz`…z‹²ùÝGÖî­ÝG!º·usnê=®çœê8G1*=^N£ÂÊ-_öºŽ¯sÉuoéu'Ú;wûÑSÊ/¡ŽñՔ]“¦8K•„láþ[֋½i3m¶â,ùcbyó~+=a F¼xþÆámZ$­éÀ•ð¬æîK&ʼh4äâÝл&`‚n»ÌjÝàx“˜4›Ðô)Êî Ÿuš9á'Æ )æÊ![‡ô©Üí”,p(P¼ÀÎWWtóqPøhfÌs_¨µI¿›Ïн11áÓz›so@:l}¯Mq›)·1 įqSKŒ4Ó7œûaÐ]Ãw½ßYÆg J~œºÏ)ѡԫf¶ò°yÿ,‡äîü"ßNP¤ÛŽ­Pk¥ÞZ9 Ihò•4Í9"›’? Z®HÕ'á| +¹!ãY²z-ŒtÕ/‚OV¯¡¼.tÁ€fddŽœ‡V!ô³«(ró—údïkr¢JۏHŸm˜y[ræm¶Ö¨ øÌÓ[r‡ÆWö[r‡Âgô툏Â}›Msyo¢ò+eÈ9:0ƒ ¸è’&°p ‚)kÛµ\å·îJ©ïH§ì€/[ Z$¦ ¦Yç]üoŽ ²O¢íÃçÒÁd_ +ÃqþkÖ³ŒÊ0–'uUáI&¥Ý° +Ä¢y¯~Õ묜¨éO;ß ª›ÓWÖÞ迾fò$DS+Ã`>l ôÀWÉ* r©¨JÅÀF=æ>¬ )p]TY)ñ `#šL|¯–9{˜/¥J6‹ª°¦$ĜFHè# )`€ÊqóHÜ´°û¢Â–B„{ +`4yVÛz‡”ƒyh灒fêK€9ó ´Q ä…&¨”Ñ‚qèçe±(’3¤¦Ù<¥‚ªÇIj AàQ9×TÛön 9²Hmj²Ã15}3ƒR¡âTÁ2u"D+âòÈ-ˆ9*cé8=R.›pÉZÈÒѝÀpk¥ÀӁ›.ŽàO‡³ÁZ€‚‚YÃþü%¢ Ⱦb5 +ÄER“jÄ'ð+•]e ×‚%Á—%žC,c¢«Ù“›2j·—¼$-ù‹Yc +™³ª‰Ù$Œ?–(wǪ̈j¯ù\¸`˜¿Ü4E,+#˜R…Òãā Õ0ƒ(LCñ¯?Š êlmu”ThãFlùxêÈ1W‡à]†|ªWɑY+ø©L(è,DX±”rÌ]ÎZ_Íì¿Ü½Øè{/äÐÿ½eC¥±Ú湈­ºý Ù%éÚÃÓ8‹œï=l>yÅp<ç£Ïpyðu=ìlQ Ëoƒ÷­ Âή‡=ýq>$Wл¥Ëۅ +xu¦iù™§ÄöĉN~“}õžá}ý&ó°¸ M/x³”F¤Ù LX'+&,õvV“Þ +φÑl­'¼Ÿ ïâs H›X“â6\¹ñ +„ú͐狽vÿö ZnÜË3ìmMORYsM?K|}Yzk=‡b§«‹IÈu%_`º”ñÂ1hªê¶!ж^_Óo‹%ê¯Ù’%†¶Ö(ïÀ|¦ß2¯ŠÛýéŠöЫÚMíÿµ»ùýŠ´®)#3ž©¾éìËïøy¶Ø[¶6“anØßŸaó65ÚØÙ …³cy»C5®ì͍²Þ›°ÿccdö͍×ûd‰Oo~FÆù·’‹;hA+qà\•žËß!X {n† ºÊmë@”5c9ÝÂÛm²\óž´ tÖÁŽpÿښKö»K³hà Úþ҉:dÉY0µ äh@X8!I¼G6¸93Z— V8ö9«"|{P¤Õ¢¿Žó¾Khú†!0÷­B˜ßÿ–\šË×ñÿê²Çb’Ç+”>°>(ä^ +12j×ÍP}rÑ +Mb9¶®™ǬÍi¦ Õ!šÛ¹ gªOiÛªžØ—„Ozé ԗ¸ûôýE/æ)s…¡KàIKìf•#q\5/‹ƒb¥þKë>….xþeV¬Ï…Ïô:U¢Ö÷I• —)®“IŸ 8L®“5q¡ñ2¾ nfÏq úœ|kä +߆ *oY*qÕžþq½_XˆÃ)¤ +î!ÝMz9½š4»¦½¤µn_醈 +F)ø6†G©ù0ÝÝÛxÊ]»¨ˆ%D6¼y½ð[À&©ÑkBЄý!ó9m#élúõW¤}N/î}ÔKu/¯ùøÕ8°SÏ®f{ +ã—[1€"gxHŽ‹c´Á-ˆG!Óåæ",½mƒï<ÿoœ¸§à_ȅœ¾j¬L,GK¸a ‰±bÄÇb1¾ÿh«aBâ\=•7¤U™eÝÃ×à…ǧ¤l=1³ r±êóbá°!“Câ©Õ€u¾ur݆jÞâ¾òMüøgú˃á¿ÙȜZuIÂܓ¬Ånñ–›“wKÿ„Üz¤â˜›nÌð9…i`;H?”c?\®|Z=$a€Çc®<˜„,ûņpq¦ˆÎ^Ç@¬¾ùìÏh¬fց…€Ý²u[Ãx–ÍÒ¡cHŸ,DÖfÌ6òâh•‹ÒãÿŠÄuI>ÉP§®9W ž'†€â2°ùQ"’,縫²l :„îƒPD_³(7KåÃ66b•}IݺF1é=n ‚{Ќ¯%‘jóÈ ðwŠx# ¯ À˜Zos)¿Ø¶‚Å„í˜B à´B,!Žhˆ®™°äÂu(¶m„üþK Ï +ý´ñ?Ðeú§Ë.ŠXQ_±ä¿_$eól½„Æ´M ^Ýù($°m¾øWÌ|EóU¸·_1uú.R–ã¯Ñ|¾Ò ߣüiP>uPêð¤sי›¢sAe _ÜÞl‚ÝMV¸ºŸ2Î$jxýD(YˆÐ¶HÙ*d5ã=°ò=%7ς½Û¿øtJ® Šxíu­-“ÌþK‹7¨1 ê“ìuöÔ¶Dhÿ+°À¿kÑ£ëòu +ҨѣàÄ¥Sw‹!xmlIïb»xÜÛY,ø9¨JÛt&|IF’øÅW®Ô[BƒFŽ==ç²3¶4÷³¬´ý¡rgt½`X˜Øw‘.Láà àgŒÚëÖ æ·DªR€0÷ç¶ègûA€û:âÁFÜeï»Yß”‹ì:$QåØ8GøFRÌòM¥®¹8ùkÃÖÒoº´H£Ä0oáË`öë-÷}-ƒ}zDŠ>õé;ã\×"Ú\…LäJ9yo@NùR5fKh¨ÒtֆZ=÷ØV– 0Ì4@³±Ä1!H̬ôÙÔªÉ#lvÄ¥¨T_N‡ièQ®{ìXàøfË +$ï‡êz듘ä›úb3 èkÜ5c³¹] °ú rÇA ö¦<þåøôj¼dž®¨Ð¶ß;¾IÉ4•ÔãDh×'—¶åG£G^žVەq›ƒ5QËt×äOP3­%K9ØxX2¦ ÅæuFÍ9ë˜€ۇAøt}|¬j0ÐÅ7}µ%½™]™’៌DŒB¡ 'ßꍋÜÊ]-¹ì_—µéØN,³ª ƒ +]Ëçéí¦ +‚n#îS«0U€ßÆ°á·¼ùª³=µæ5æ=0%ø?„d ?H—Aꀇ±Ô‹9ƒgXýœn!Ù Á‘õû±RPvÒ´ŽQX½0U&SC0DSÚ¸“ö¬£ÆÛ´< D¡3—¶å*ŠjÈúmë4i“hS3ƒ†kƒVý30AE‹jô +r2IU¡I§‚T÷ž,¿½Š2è´K½ª;!¢¾·˜‹½ýAdÄ՗Ö5 +ÒìÈmåÖhª®Š25b¶Øß:užMa-;7o0Ký`aÛg9Ÿãì¥Ö"³¬ï¨*V¿éqÇpÐ,°˜0IO c«h<ӄÁṈ&Èø‰â×,û›0]°¥‹0]&.ÝÕ«ãâÁv2ѐªŽ¿£\« +ªqC—3[Û;®+ÏݘDw]£òÜþÆs¦þ GûÖì8y °¿ùHºsuoNƒãtd À¡RÏöM`ÛÌ!'ñ;úIHލb + i€]K“ˤ5ýç®à#¡#'eèLÁ“!àFDæ¶×ZÏû]OEkîî➷D4õQ€õœÙ«î +b<ë'°·1Â\2[ç:6n.[P°0uÐ@pñù!@$÷œ¡„‚Š^ó”´àcò;‚Ù¢¸¾¾Ž'+÷n‚ŠZá¶ñè í¦Æ:%•ÃIiäz_Cai+ÑÉ2Õ2í3<"Ô@T‹l‡6ßíô)ŒÆ·u߯œöŠÚ˜I Íè¹°Œåô\ØF}m·)š4wïZ.l$î>…XIÙRX˜ÛxI˅±Xõ yp“†ªšŽms€#;l€c”Eþ7tý³5ýZ_÷3]ëCÍf¾>ƒšÍ{}5šéôÖkÌè9¬×÷ô +³^ž—éf¿Á *Ÿýûäf±Ð™xGž84ÉǹKv/6,*ŠôôîPÍ|ɳr–¤·"D\z1(ċ{²”"Gªê‰¡"W¾Œ\<§ ¯ÎÐÝÈ;=õÌÔÆTaE-J+þ'K뇱2[D(;ÈDÜyÁ´’Ì™«¥Æ˜Þ:¹Ý&V²¾–$ËJNZ`5é:d0œ«xf0Å£„ªÄÊ„¦œ¡I¾KJ£;mȚE .øªÄ«€T½ä V¼ã˜´ Â=C„3\3ٔ*0“”µdÂp"̜Б˜›@=àDi?(Ì|E-Z+öΗðƒ%Æ9fý Grev5ߔ"IÁ~^€’¸Ö>DDËñ ¨nÁ–Ç2(…˜¸C1µXù*™T˜êkx(ðkO,ö“Ñ|TZíS:¢ôêc"èÝ*,µûsxúw®¨½†²óh$ï×6Šmuƒ4 ²oÄâ+\e…£4º,phú o%7‹¤¯1֔?>kKÐ5±¡´‡¤Ù²®´Aše©ãƒ`TôB_ݰlj¿a[Q+¬5ØÞîéɚ¢ËãÁÎêA3E<¶ô$C؍+Þá̖™ë@þI©ü"py×±rÛLûOa4 Î[E¨ÉožûáŽ5ùøÈ„ö3,f§…w ¯¡£.l+@&›Ëï!U_úUùS1T[¥•é\²¥DTرø./ƒÛØ.J*”'ÃÁΝ6üV~VN¡ÞɟÌ?L®ÂlôÏåRžG™¸A`ShXvy‡Ê®z½Å ü>ÊyÁ饸=¸ÜS#t½Lª,¬¸Åy¿Ê¢ÒːÿµcƒÅµé^©ãº^‡à¥¢\§>w±0h±"Mg‰“ÆÀÚwBªLO,Õ7ˆ.ÙYè‚ï_h.ÖÃýûR'gÁ…l†þ,Õ'Œa7Ò=ü;¾fœ ¦žDJ{,=°±X$ÞËõ«b°SÖ˜èðã5ɦKÂd귈ya‹º«zá{°±g–›ìß ¦N…‚0ú<·-- ØÍ‹ gò[x­Ë À@Å}îƒ]`À°çÝPj szi¯…t«–öòŸXNñnðü2}Ôäƒ “†ÄbP ø;+ ¾‰Wí/›Ü Gd­‹£ì1È=màZö5žÁX‹±…奊ð¹ýhäfs\8,Nåè%DX’¨Bòç½aEéßFRK»k2ñ¶æ+|¾›A!$\¹]†gkô%2&‡cY꧔êÁ +#ÿz? æôMþHû¤´â.°Fê@ßÚt@šµ%9Ç)Û1}ÖrP&1±U7Žº ›I¾ò%Q/§@nßqêš#¯ˆˆ¤JÕò¶È¨ß½82N¶ÍÔû|"“xsÅ:”(g48Ç`¿®¸¼©‘h=Mª³úכgsù‰fïnf2Ø>lÓpE@³¥Þ0OËb ÿL‰qdb÷JÜ}ÕòMßå‡Aܪ‰a ê}†«, ^þ~„‚³ý+B`ë×E Nx:b @v|RíÀ)B÷R +Ù'¼³!ñ‚–µ#m³Œ#©Ý¼ìïu:˜u¼Û<@:J>{oÑ=ÅOq˜½½•iú+`néãÐ2˜hƒ"4oC6Ä¡ÅÍ´‡ ðÖ@Ž«8V”YŸ×òöpŸŒEùà‹_xL‡r<ó2$N»îÉc}3„ï .1Á~á[(<]½™)8É`<Š…µÒÓµòÇð ûüËÛï½³½¾ë.ä=î¿ô½¾ò÷uojzk¯Ë{}ä–êr×_–öût·S/uù/o¿ü^´zÈßûÞ´~4l[֏¸»Úõ£½ÆÿëFA¶ù€ ó_ ÿ¦ëk|3å„6–±ûä9Ë@_„Y_ ﮿ú¾õÀh•o†|´g6øgñÐVøgÓ±³¾ÿS?¢øgIŸ÷ß å{}ãÿÎöû»³þûÛìt“÷ý×·ß°‡Ògè¤(Vö·þ„½­ü”?ÿ{[ے,ãƒ[n ˜Œ5 ¸|&Çá§B¸pc)þ„‘\ӐÉ(ˆÃêîZ²àFUà&Az‹UsçFÚW`® €zK9ÝÛė(‹½D)ÒOØ3S«¿>’"*ůÉoá„þNg‘\ê$HO€éƒƒè ` ažÒ·:DÔ-"Øb•ÇQyvø›ƒ^"bæ¡Ý5[ßö{¹ÒÓ¼ :í\H2L=ÍXàŸ¡Ø äé_0@R2Ÿþ^1÷ħ.x2-éRèœW äBí÷hÒv³33$„ 2 +@ˆH€¢ŒB#$.a2Cè6 +Å ‹XbBª9&H³3Z«jÞÖõ^õíZÛT¢µ™„ÂÕ ŠØã~V‚,Ïÿ¿~ÿÿï¾É$--®ï{¼çyËËÍ»Íß| æó|ñ÷œß|ç7œßC;ão úï [Ov²Û-²6Ø` °‚Ùç†5xàoÎp÷?ÀĐlÛ CPü|z¯üflpr]Êt ›’n@§÷¡s‹*žä{þ '£ëÆ"ÑBö¯›PãmBͬ¸P :¬öèºGI>A Óÿù• ‘ÿê+“æîÿÀ¨Ô å‚ûÿسïÿõ/ÑƱzRÅ;ÿٕ_ã²3¬MÛÿ!‘|«Ë|‡Ðºa5%.¾”»a%`ݕõ}w@qéˆpwê>~݊ +|¸¿û¯»±2Sqª°žÌF[¼òì +ú^ Ëv(¯W!!Ÿ¥ÿc bùC2ÿÓ}5‹ ´Ú.¾LG®¾hn˜]¦qššíÓ³ÞØ*„!©zR¦>œ·œÛz´4 ZÁ›Z°,ÆÙ†hie§ ÒïœîyW*.â[;™^êP€EÛØÝF$. +E%y"å3ȀÑÀ5P +:*®H¶æ îB)gÎ-‘ 4L{Öí¬í‘A)ìûcÕ 0yº™ÓCo6›¬»y»WY6¦ø¸B~¦´óÛu +Üó‚Íà2õnl©§7 Pýç2NoÔ0ë²/Pi„QNWº÷âgcmQZ`Éy0lÜãVÉpi«rfÉiE:‘Ph:¡v6¨4«õ¯ÀÈقˆc ÑgÖ~~•†7½O‘¥X`;·3irq²^'ü†ƒq2Lþ#©5)z1¸¨“öð‡hBªóŠ–B¤ၠӍj…=Ið!àÜÒÁ?À|è#É÷øC„ëì&.r‚l-ë(ª¿0)ШîhXÅÞeéV}4ø ­ +À…>#|bÞNå¿p«‘—û *Uì< +°¤8þÌI”ÃãÚ6 +p¥xðJãÁWl8ÐFòÙЀ޶øÜˆ (@G_j¥N]½…ʎ©4F 4Zsð?2O  ž´¡i$“ÞìœÆÏh˜0r]†qª]Á#@;‰& +â‘`Í5—Ñ^ ‹—F‹»Â3ÈUäØ(¤&„ϵ™`LH*ï|[Jç#û”þC›‹¦ +Èu?bPõxHu=l¢*ЧêzyEʲ²0$:Ÿ‡(Lǰ‘9Y0'9ôJ‚ˆÛܖþՍWfu&¶Lԉ$R‘àH°øÃ·M’É?Cš+åû¬[‡—ä[SS‹æÖÔ-ü²²ÛOã–VZÉÚË+-ýyb¥ +%N+rJ‚ !J³|!Cüc€›¡Ò¦³­ÈI£ãÉâzã€ÇT˜xÖµÁ´ÛMyÝiæ¬7!\’ÓG&p²¢f7•f`>كM»bV©c„o¸6XW¿re±`³9Tµ€mÙgö c1ípqÇ°2„î$Ž‹©àÍÕdü^d]å©ò{³©ÙÒrÖ ûS—¨ìêh>B†W0YΕé«2¨&Jóp›l¹iSžŸØŸ½Î­*@¬“´çQ*[æ^:¥dœê%‹ø¹Õ^*w$‚‹:µîeМ +áðÈ«ëøE\.y8%¤¹÷ðKIsí`–’ãÌÒ\ìôÕş}ÜÙÛÊgŸ×vîH/£—(F`—ÁæïŸ{I@­ +Qv*Ø-C8|Uº`8Ó͍ôeåˆâ]qÙð+³e¦ C ›<`Zª§STªq&zÒcɐ ƒø…€Ú!C·&š°Š5àкPO8f>á~¶‚ª›fÀֈ6Á­¼N²ÐöGRDâs(2¬æÕjp,a©ÐhАŒË äÖª1|âÝ6iš`Gڙ‡2 ¶0€ü÷L¶wÀe¢ñ¡I%×|qa¡a„—IŠmë|.{L{^å«ï +ZÄêrï¡n)æÚsÿVì[í‹ë⭔sü…ƒ>{F=âf;›Ñ…5èXˆÓN%’i܂T¯›Wt²Ý´ê÷1€PžNÈhú +®½r- ÏX6<ª(SNñ”:1­Ò€G:,ÙMK³û-ߨ¾²+_9ÑîÄárYÓO>;ÞÑÕKßvA·mi¶ò]Šk½ˆm˜„Xí kø1Öæ`w +þÌ$ð£2äI± ˆp×ùý‹ýŒ<³POj7º$4tþb™³Íkc襤…–cbòÌœjíEÎØ'e¢˜ª äI¢=ù`πè;ms`31këc¾C}fc¿[¡s•ÃÆ`êOf;€WÅsî%#ä"$¤Ò 5ØÓÏ—ü5x5´Qú¬Ú²m'F\4ž/«IVrµøc¥;D>ºë†@êBE––-âc¬ãeº·|öú6¬åH]üï»É!l’ýèîw≲õ‚Q¡ÇƒŸÑ£|}4Þ¦÷΢í%÷noGÙX]üÎáÅ´íó¿@©˜›W|,Žü|fâ‹è·3í¤”¬þÌðP Ìfd¥N¾ÒžàåÞ£ôKIÉJä'c3¡êjºkOF©4Cb‘þ’ŸÔYfØ2L¼œ 篔ˆJŸw:´Æ‡±P €… ðëgÇU)C×j—.Që ÓÇçšè´žgåˆ5a¥%4ĹE&ŸL8y!£èåTrÏ~-²…®vÈYMÖT¸X‚1ן²1JV®Lî"³3¡ÖC‚ÑÕ{ºÌ +Ž;îkÔ1¢oçñ,“Ë)—ÉR•èlûè2 +Éö±‹:VmýŠ|ÿFvà8CŸBr  X¶Q¤Á•Ëu9­2‹Q"4‡¾bH>&n»´Æ(êÎëAJ¿´Ÿ÷ea?]“ÞóZ”Ò¯«P¦”¥n¡àªúK[iÔ¬“;c‡ï2 Žû!ŽÚ­Žõ®œ¿^•M~˜”p”Äÿ ¹×‹Ãµá¢„Ã![Ú%¹°lt¾!,V¾&µh³Óh8a{•¸'ª í  R$ +L\í’7È¢`çdq/o€Lþ.[kGϰ9hGø3bh% Ü_Bˆ³"à¤þ:£@ryaØè Ͳ)@û¢h¿f§£‹ˆk5î¿JÒ¯11>ÿ6R0¢*¸"AÄOz#:ÏWe³§P7YgS (Þ9TLßëÜ8撨Q@ìH7[$Œ-@¦Ò·¾^¨ß‰?Š×ù€s؎ȹ9ԎÒË€×D…åÈ¢…ÿ¬tì»žÂä4–ÁËXÑds!ŽÏ…bxíhõ +¡›ëÁ 7>ìg`†…ÎaÞ°CicÌfR2Áà"ðBDzu_ƒ2ª—ÐaTQD7¯$‰JD|E™œw:ø¦žƒ½`(•À\3ü‚<;0 +|À¶ +°*5`^²Û‘íEÙÁ¯ E©£´diÑv lñ´>ô€q{HEdÖTuˆsÌx; /x]|@â`”oFȋ¹:+HtéõÖ¦¶/TQŸkÄ5˜ùD#Vø*vxgàq÷Ðî ,šoØ ¨ˆ€e¦P gùâO6 +wzÁ9U‘B4ü»BQ´ï¡—ï:“ül)P<ƒ†ÕŒîAPÑ"£$FxÈG`­°´¶ +Ïö@ƽSˆÂÏLã"‡Ÿ8<ã½g4HÑpðš^5@t/ë4o`çƒîóL« #Ùísꁍ¾Ç^§”h7 +I@ç—Yq‰815Ñp~ cìw“žU¢O”Ü,ÕÝâÀHκzO3›ÓnPvJªŽE5CyÐ8­¨ÍYÖ©@ªL‰ªOÉÒÐb¤äˆ4³‰´«æ³Î ìšBu÷n-¦Z³iY¶‹¾—Ý“JË!qøwCX'4}TyãòƒhŸ›z'R¶ôx#›¹Í;¸¤­ªóÈ`çם³›ÙáÀ • õ•— +-(Ðñ{æºqߑ:NM E1)ÈMæ†}k:,¦¨@ûˆg‡x3µMªá@x<›€ /c€ÓPàºòRƒ4І#;€6ŠÔYéá1÷\bŸMA“ ’ߨ1êj {5Ü(±©7ˆPk´p­+¾Ò…ŽÐígˆ³¬ï¥Fµb)Z¨Ñ­Grá“>œ' ]j f M4Ï[NiΘ­pľ¡ê"#o_@ïöîm{©1'IàQ£A’ªëE@(Ü€…UUáÇîÝp™}€OÞ.ø¹2èAÎo(f¤€Öˆ¶ ÏpIϜ•›gVJz +U þ>6ú,òå°‘µ!¡•‚Ç×pÓT +Ë:u='Ïæ^ڕ‚£—è ;†¹>s­ìN EQÆ—Lüý<R`æyâ9Sýb¦–ƒÚÎòÀ² ´ã6=jå6!u¥üac@çF“Ú“©G‹Ö”ÿÉLð:ïۗˆã®ÒF§U¼‡pN†Ç,”…$ I?­<ÏŽDN¦5dý<ʸï®ü¹•FÚÁ9Ùôýhð´#•ëIÖ¨w”¦«C‹;:²¹×¾Kƒ:!TðàÀõÇâïöë¿jÀÓ¦¼æ‰Úþôš\½˜J°d9Á?÷c·ns2s xL•ãòެ…€íËÞz«x}'áÒzlՖ ¼ÄvÙ<¹,],aх Í"76Gà^æ-ãð? òõ`«"ýd8h”?s4ÿ™:CÙÿN ³œ÷é–·öu6·Ê#M=Öwã¬à݉ •ôZ5à€—\“L~ô5OSÃRžë§3ϖ©ía`ÎßٜûzsaÜ #À 9DŠÈ{~ÜçùԵس>OâÕ¾uÁ å‰ß]Õɧñ;f¸˜i‚냵Ô/«®sÕ÷ºÕ÷NF%„[VëWvŒӎþU¾ ’Žª>û–øx°ÜM´¶øyt¸Îڎ Íy½ÑG…^yíâ¹'²>.j!“—wŒð3Ea‚ºO«¨w²HóÛ‘=S~· p— £Ø'ðt„muÝábEÏYsY‰}>êöàÜLœ`ñòàR»5K^ +º ")/±õãôúBtt(4}Ë_ÉJù»¦GŅímºJْ ¶Ý¢P3;Ð šâŸÐ7{<Ý9£ªÀ:,þ<{ÿH<£ö|¡­H +9|çªæ‘ÄS™Åа¤ _ã³s’Ãú¹XÕâØŒ&!^¾;°{nÐ˸Áú ssÛKÐáÀÁ|°^,¬½É¤ +b“ö¸d§K€xrÚ\’ ÌTn3_bóHÝ{¨´ê‚º¹Õ×<%5“KDÈsØÁ¸™úà¶ÅñvŸïj¨×ì·tgõÿ]FŒTäT XçiÞ£.KÄkwr2FÛЙ v4ùÍqÃÜæ'½rI=ÑK½žÊµ­ìÚØOQ.NˆŒÝ×ä9(Í@¬ŸDJ5Ⓛ¸5ã°À§šr2 ÉÀ¨m[¦ßB¯JD*"ݛþå€tÝVkÚw^qÝ+¡r˟Žu)#¢UÛvšŠ¶Ñ7“ѐ2àÚP„áæ!\ҁ—À'@.ÁPȵ6)BÝÞfû¹_Q ïöà‰Xª§)ölÄÌ, +™d™ò,ÿ`A}¡Òe¬=™=3Rf.t¼Öݨ`ûææ6Êïr¡²ù«tk?FÄÞ}ïµöšUáÚɚÐåNϧgøâÙx>*€ 䏲§Øæ £³¸y„§X4«†³;=ðùæAŠî?A÷¤Þ Úm9IoáHÃ(ÒÙÀ_ôÉ ͚ Ž€âHB¤#sƒ¸[*Mì´>Ó¨ƒiÛ̐„åæŠaP® +‡Ü‚6*àÙLCۜ€e‰ëT‰áù=ÇÊ[Û¢ffTmetÑT³ º?ÃìÑ6Ôà„âÛ1›KƒJ_û0¼aV]˜ë¤cxé>.AƒŸ–@[-8l$úsR1èØÀå²ó¦í6N”4@û·Éµ $ Q'@« 4ÔdJa&mYÆö:µ$ÛEɒI 4Ôeˆž àì +ºnTï·’Ç ¯B–óýÛQtÁFåKˆCÁÜÜFÓ<þáT>x§~î#ЂR)’e+@¤ûòÔìuÍ圊ŒÕÛ¤ é\M*.¹FbÛLÈìݒu×ÁJùY÷ÐNÓËzڶ²}ëSºÕâ `¸´IÎáGÒâ+¡ø2ZÞ ’|ÒEÙ( ¼·\åU!Wâ nM˜´þÐkJJZ\>¼“ÜÓ}tXpà–Ã܎|„@«ß썸³hC*×Éo\MdðÀå½Ñäk­uí+‚ Y ]) T *‹Yœ¡‰c‹¼ÄQp-õÁ팛Gu +—ãB±WHÑgI$óG›v´‡ÂXfËoÐB3["ï%²êØZ‰ù4¶êÿö»f¬å›?áՊzÓ¿ÚGuëû »Ú}È´H+u®j)‘ž3|{$bž{x ’xö%Ó°n&fK` ¡ÝÃ)G´'7[Н;ãM ²Òjf5ìªÃ×nBY^þôçW×bœ†ð%&ÉÁÔ]K`´ÑV +F ˆUè¦'„ÑO»~X~Š.:6Õ¾Ar½È5OÔHÖÜŠŸ N ~Å­¶npӖm+3, ’u ±¸‡Ïâ‰'>”ࣄC«É9§©ý™¶%έ.Çüò)áy(…Q着^O*8œ„ºÍx%£JfQÌ +BFü_¥4/%«ºÍ睛v*¶8`-ãN4íú´u1.ÛY‚n$£~õ‡ÔmG‹¸š }þZ þZ y-á;#¤–¢„дJQÝڐ¯Áš+ˆ¢2¼dˆ+W݋Œ«(ÞO”aßÏ7Q°¢‚zý0»DÌ܆CZ¢r£ýý ´åÈpü„¿s+˜Í:/»DÁ + ù‰Ò¹Ý#J°LÔò E§_M¦ßO1m6¾-þS$Lö4™—¿{] †À +T?Ø›#Îݟ`¢6(ñ Šk÷s»CPÂsÜx(ï›v[Œ ãÀÇvíØÈ² oü`cÆ{#º9IkÂg‹•jîSJ «ÈUëÝEØváÅñ/oKzïΡ‹»zªG̸Nb÷!«±È¨—h¹}¾ˆ”W 9óg›nà!2®£ÅÎå¢Ò¼B˜f†?u5ñL4ƒ›ù% ha—n‰Y»¨…"j}d÷;›r¸" +‹ £¸y&Mþr;ðdW\6a—¨JzH|ÝÙ!"ù2›×Õ¡Ï@Y×~½ÍíÞø2ÔXº«N6ž|^{ø‘~ k(Ÿy +”š$.ÖÑ:]ڎÉÄò¿ˆâN¥¤þ¤¸%ñò•Tî7ŠÙ‹B2IJáfïŸ:éÔ1^1‘,$,q¾kN¤ò ÜJÙ«6!®8oœP:,⋠+P1Í]^ю£ÂBq¹çÑay]ˆ}ï}¤uýÀ‘šÔ3\ÇÐáà›÷B҂ +OA#[±å߀šr¸Øjáuhq2K 39פ҂¼ˆ»P€%-’ph%­7ìÑ-iˆR± ]xbëèA1.Ù#Š_á±#o*I^—»‚ÉöA-¹ÅuçþÅŒDÜ@©/MFè?2ôâÃx¤’Í^mÝ<4T–eé§ØN—bpœé&}.Ÿ¥À:¡š«ë§iYë/<ôiØîЪ!6Gö"x &ZL¢):¿¹se ÕIûv70hq É)Á +˜38j%8ÌàDtQpN_Vj’à‚]JŠýÄÁpáö¸HS @1>uuÎOêÙE8Pc0I0†yŒJ›XŸ¾Q‡ª’Ù§kñ€ÈÄ8 ãOÐ- ·|OÍD/wWݸ^íyõ¡cuâÖ¢®ÈD úº”óKBÅ,Ω ûÙ]Џq½¶lewço†B*H9<ڍ4ÜR7ñºå$±X#³Z'J~Qne8y'Y¼V AqÐÛNABhò7åDbù¾"¶¤¾/ˆ¼t?«â/oo·ñ,çr;Aúl•ÉW9ŸÇ= ÄG’–ž ±!³&嬏‚0Bà +™ÀøØ øtÉÌ +‘=áÐz·2dU‰#LÅ©¡Ã@OÌLñºp,³ƒL>Å·4MdœÁEX5æW>ª pÚ­o-Œ}U}CDÍöOқ7íŠåM4ãXö™4ÔoÐË!ݵ~b”¹ö6—Íì‘::Dz òáèØ«I£é/ð褂.Þ4Ú%\ùýûÃ&EYÇ,ISà2òâ/Œqq!çÅÁ¤„&~Û΁ëOe>öNX({@ßó +Q)´@Ûrç£Q„\N|q«/òê:%=ÃÔ¶†à¦dÛN¼oH•î“ÄǪ‚üm<ûàÕ:v‚‘â'k´|?4kN¼øq’_m +{íHiBˆ»/³ÈcÑ«ï¼)o€nÏ¢§9½›òÁÈÖuœ€‚̽x4¼Üt©Ï™1ªfKédîM$Ë.éFtDWu(¦‘t43۔ "¾\CS°”#‚'@¢Qrú4Ü?Úé׋/6êÁÓ‹„º?lm«Ø9gBÓWðÝ­«ÙÆ6Ú¾UË*ž«&ÖÕ̇âÀßÁøÉŠ *EЂ¯2Å ôOXq¾î÷¦ý4Õíã4Ab§€ªn ™¹ÖqfÀÞn ¨æÓ/„rè!³¢! k +„•z7ĨIq¦ÅÉB z¹2O{謏ê§^Zz«Bõø`!E𹂠+äüȌˆdrj+Õ»f»e%î‚ùKð…ÝŠ³‰hŽºR ;š$)qvbr(þGEqLaôÖ¦0ú +” .*a9¨Ó"qÁIKÓæ´á°j%I;  ¨lð;ÈÄ&I@I}žàM6§ +†Ï³ <*ÝLš 3Ó¥€u9s +ô!¡W‚ЩQìô²Nӂ|-8aj¿dž«‚pCl¼vj?Leø½BFšoę¯°Ã“›Fü GÀ?±l”çÎóæî‡`—ÈqD”XO2)6âFxZÍïÜÆ‰þjQߋ¸¯~W^Š•`ª®VÍfìv‹x¢¦<Á¥¸ÅÎñ …Å,ͤp¢š¾á6Ó²4Í5n×,])E¡ŸáÖЅÛ¡>æµd¤æ€@Œ?’b(¼’ ÑßOAë÷F÷cQ¦P <ßÃ;›–øöވ¸J‹Âsy7ç‚æîoÏÐï+ÈÕ·lWƔ80;VVÐZ>Ãú³ +~ð;!£Ÿ‘'œWŽvO6ëÜâÂ÷ÃׁUÑàpC å«2 î+66K$à}€ƒ§è\Ý O^Ï+@:{ õسºK>+‘jpðø¹åΓE “nP•÷À×ï½§•7ÿhŸY¾Ûv¼úP(.ÄÎW¯›‡¾müC-3~ÄÖîÖþ;þ4~ó[€[’I䐵ꛀ X±]¨$=ä±MÜÞ°~®º¯2uIÞl 6_ \ñÁÂóÍí^|Ûá«UxTq¯4pN£½óFM ù¦»7­ópqPÁýLÜ1÷ÒÁׂ»1‹ª\QՊ¹r›P džÙ"ÚUù‡ï ŽFUmØÿhã谘ë¹þ‚æLóp4õ-c^tŸa²‰¦AÒ4Zj$%œ\œ#À>ύŸlØ6œ¶sƒ²MÖý剙~½¨VðÁ_jæ_ÓènÌ¥‰ Y Y‹®ç˛͊Pë¡KDÑöQ4|[êŽÖy{C½džÌKyC…F¼¬ÎM˜ì•maQÆe²yÕ¼\‰ d ɸÉtQøÀ*â-å¯Ù'âY+M±:tÂóŒÏ€1>©5q@—C™IÂ`Ÿ=Þ.åL.l*°¼Íðá`áÕáŠÂ’aØ"¦Œ:¹o ãe¾‡ ó—Z‘ÆB¡._|¥pS[gx͜àtä¹-¿…3~ û@ÏcKh²³B>´S …âÂpüXOAń⸰ž‹ ú¶ÎIÇi»ºO)S\ÙòÜYù1ˆ^•¦^¶}µZ™HTÌ +¼aÙÀĦ` +[m-Lĕ;3oHkh$£IT¾x–(+¥ZÖêdŽ*ØÊÖø<ҟ!sõPüžx’“·XÌî1@¹ëwȀX;Þ¯[-®`·Ò1O¥ƒ¾qožo#YÁ¾Ï«†Ñe_T¨OA{GÇ +Š.Ç|ôé&0fÄ9ž™Ã·ç‘=3‡d¶iŒÜò4“Ž^VÅ« 4FëÝÔ1rW¼®Ä$õ{¹#¨Q<»Y³sÓÏJ>™ìĩ¿xi›=Œ +_ þøC}îÇlí™Û†mθèL€ ǹ@ C!»³Ô‚C½Øšv™YµÖôT UécÊ1rR´5<®J¬µ¡ÞA®ø¢ æâm±_x¬[wÅåZÊËK·}°Ÿ}êP¿õŠ·Úçt^2ŽÕóylhôQhž;9 ™µGÙ½Àî¾[zéòJôJÖÈÕWjO‘ ª'îÓBTé›#„ ukP$Á‘ÖÆÐVëØmš7†"œ6ºD­«éCõ´œÓ·˜„½ûÚ4¤Ÿë¹r䐒O¬FÁƒ&,# $–ƒë® +¢¸âဣu@.ÐRãdIwñjï5˜ææc©•“kÍÌÌE29™²B™‚*¢.ˆ+šÜb,\R >þþþÿÿû뻒áÌ{w+{»º»k««{ÅÕÕ]UÕÛæÏx;Žáêïx:«½]ø¿…}øÓ­¶[m‘¶úV¹ñö§˜`wõŽîü«Îõrh.ˆK˜ ÷ h?L¶Ý xÚ÷fe.Gø-ÁYþ{ +@kÚB:Èý‰ Û€öó€káhJÅe$´¨z÷Ä,’áNvÖ«…ÙŽî’z.–y¼–{ú1 ¦ÃŠr͎† ™o¡à–nÜ7ÿÌ\&SI ¦ƒ!•€5-l~á&qb>(»~û.zŒOp7¸H~8 ÙrPs|vÜ ˜]Ä/¿Á¹4€ „$ +æÎf®zk~c8üq%áÕí2,ƒðï%ÞÔ©;¯&òò˜¢ÚpV©‡MܚR} öŠ>ïƒþIjÀ-]Šg!~/pÒ`h—iÒu÷˜Iː>;_ÍÂ*õþÂÊҘyÝI UÀ–òØ{‡Q=Çñéßhšñõ é€U7§¢åêÐY¨ŽmBê¡êÒÐí¡´B“»jí!bv76o‚Ò°†9·ÞH<â‡vmÝ)1ˆTj‰+÷÷B¦q9nj †_3¯/c¡aò5UÞL‡4¯\\"mÞǍÛÞHyvïwÅ\÷›ÁŸäýÙšã1S ¥5ŗ){TnoÄÕ&$+5Æ6uu/[iHðÍ=m‡Q$Ôî0 ˜È5CL< Ø3Mõ̆‹6å·GÖ ª·ÌӃø§Ëا•dS‡Ÿô)AFBÚ@‰ ‘ì` P×)Ò̋A21FFú¾t%;ñî€d€ÔòAÒe½·Œ¬‚u}™˜„'3xãÈ“5ó_§Îï‚>J\¦£C@§c:(àØä6/yÍÂü`j5rã4©G¡ x÷¢LÊzhDi~Û|:¿0ÆgÃ$…`ŸÆ@ô®›L\ -òž+¿UîCoЉAù”—ë"zƒ"í}§8´¡G²"N?Rdåÿ7{5_ˆK8ËÏ~JÛê +кނæ^$éç½â]Gü‘ ýÒ8J5lN¡?ž%Œø + ¬g‚Hè7å;Ôxæs昐·'¿ Ò9LJ ÐItOX¶{Ì"Íüwe[‘gß,úÈUÄ<Á~R~Vãú(ç”ÇtO(¸hðÁˆ 9f†žàns-Ìԓí¼'>µÍÌ¢òþÜÅËœÜ4£Òy~QèWz@•MLÆëÇÙRnÐï¨<ƒ@u«Ê?ÌXpZû1s­>ÜHšP—!ß]¤…¯Ú’¢=‹9Àåá‰u֖ð§×fúªwìmeÜßâô -ږM'AJ¢rŸÈ‡mT‰ ëN-Ä/dz3Iô¬åI`Ê´07B|.i΋d}Tó!wúÒáK­"ðbC‡i W^wqup@ &|”擳PÉ*VnigóËSdíñ”Ðs­ä£çØÒ2&Î:BÓ͋:z…0ՈÔ këŸçV=h‚ðÖd-ÿ6(úO(Ü÷&ÿë ÿ×Ð }™ .#ó÷\GâxÖ¾˜ ­ô j7¦:Cs×2Wg† <÷¸÷·ìî1†vm„¸˜LB·»ª×#¯_âwyݪtxOÀ®;ÛbCc‰jìa’ËÕÔ¼{=E{Îx–±¢m°šuoÚß-ăµw ­çØoŠÍ~ó ÊNï›Z`µÏ<øÒCHB‘£ºj#==¤0­Qy·ßá¹\L›7E}èTý­|uä—Y›áø×0Ð +çØåø»)¼i´øVq ²ÙW«yÁ15ɕzÒ0"xP]V%çóðÓB?I@ uíŽw„ºú;™4äýð£÷RS•ßu1ÇU|‰xɎïvèÛp‘-—j绬ŸÞPÃoÒFw˜Ӌ¥€šØPÃ:&(W õM(.vˆ%å§aìI&˄­Ð{[Ïkc1µ@!š'"Í©1•_t£Â­ÑúÎÆW‰f> 3³î4Tï{I‰ÁQ9&ìßÁ×tW%{ã^DWŒ‰™°éJ3ÕÇ.„!¥­«FÑßt-«Ý<g°dÍNÐ )Ú_ÝsӁ"Š}Ŝí·h©äšI{NÑö͈  £„+¬‡Ûê³?âÃÑñX¢M\kœóÈU-4¤ôþZ¯(YÍmL¿K,pÌ£l!iٙݦÏ~¯:åy)}Hgcç0:ua1‰êI-ò|2x…4qҁßúp5+Ïgʐ’%[W¥RðO[±®˜xÀG=pޚkü•š9Kjëz¼!8%°;ׂG=Aœ1£H !Ýý± Ÿ¬ù :Ѻv[¹Á³µv¾)zÕ©5ôÁ8a“Y>…wVŠsNˆCÏxÈÎލ%šj~»#3Yi•À°Oÿ95wë…Xoo‰8ø‹í“E´¸xCÑ㣁(Ïm‰>¨­¶î nÖ õÙyB1¸Sۈ€Š±eÐîœ)䫽† tÙj;¨¸£ÁÎ;™`É&P’¤â™ÅXì­í³F@ +ÁWrçÔêÔ(œ0ِdÖ ­·8¤9¼ã:¬)ò‰FzÃ:U„5ÎZ+º9Ð"ç8I•¯­Þ‚¾óy(ÏY9&‡vʚˆ¥¹ŒV%9a¾“>$ÛÝM Ÿº%7¥u_%8ð½,5~] áଠ×Ä{’{Àî`þˆÃA¸ ®7G1™42•‰ÓyŽƒdÆàA/ âé@‚[IՑääüÅÕ÷áx‹O• §x ¯$Î3LiJٌ!qÃXë,…z08hÀ¡Ÿ¿‘(9¡DâZ”^ðãã4А®¯?™Ïn$ñ/3>­2!løvÔç_ß-²YÐô€7{rÉã<ì¦ÊÚU[(÷’Ùۏ3;64gmM³<è…¡ÇÁ$+¼•²¡äœ§låò긦n-P*M Ž/Ð=P›‘Dï*þAòÒI¨×Q´yܗ¯!=;#r“€Ùl&Šðm¤±yӈ./棕ç€$gÈÑ´‚¢añ¶Ÿ{¿ã ®@7Ä$Ɠ*#Ñù°qíNF“lµ’{Ãèôv—\óy3Šáîj¦=H-X… }¶ëlê Q8mQ€fúðé w‹ƒa& :ÙðZÔF½^Ä(µ­’+Àűë¡÷Ä*›qIªËªo. 1¯&‰-ÖX–¹«°eQ¨” tâãíq{“>äÄUB—Ä92iìe6qöŸVÂõ¶²ðÙ®çÃç(†§óˆ³&ûÕd÷`>nU6£Hb»Í}@åË_M)+”Åٝ›1ˆ§bHY´…ŸÀ‡RR˜êQð|àfx›/-[¦ {S3<¡7üÕ¶J6_ql՛­1\T²üfzn³óZ‡ó–[Dß¡ñîxÓÁý4;·¯N–ܝ1t5’žð»ìǕ¿IHéOþˆ ÐÉ·À¼u§àŽ}¡ž o¥–؃iÿ›vaq÷îëÏ7þÌÿ×ÿ«?·[?É?ù+?¯ä'†•ª·}ÄŽÑæÃÏûÖŸË©XW™Ë š/ (ø}óHlwÈh™m>Bɳ¥Ìs§H€œ]¾@y€ö‚Ìš~K±”/ióµtwfI‡gWR´T4Tãq¹®ˆ©‚^å\l¯N¬¨Fh‘ $làœ”žúU&tƬw…3W‘!êîíC½4ãCº›Èvßæ‡w˜þ~óa{‰5oì0Õ=(k"3Hð¶Æ«À¨UŠ• Eýñ^|O‰´As_I“²¾ ”f€½m‘} +EÜȩ̀”#Űß3SU%Dĝ&K‰I’ý pö¬Óî;i˜Ø s¹ &pÊ}Þîç'Ñ<·.ž ,“‘?~ƒ#N»ð`Sª ‹OE9MèMêw`ÜÕ6IÐØ³kŽÖ@ŠA:`g¯˜¼tßøe$ý‹SßÊqiýÈñ÷iÛY¼ÀS¶ÜEÃæÅ™OÒÎÊCW vʝý8m1N}áâ|á +ïaȼKšTŸ:>_Í}ª|÷æ mx…àlBô!Ä&—œk<Î'“©À¼Èdñ~G”ÑèF¾h"µØêP´E¢¸¬(P>DDÉÃä¡Rè¼ Šó¦Û™ÜžÐÞ:ˆ~‚kHXž-Ù­ðý­_ô…ûÎ7÷Âù¥¡|‘¡oðÞÈŅøŸøBùÛÍ/í}ÿýBþߋýð¾~óKø/ùBõø'ïD~ %i +}ÄfM£-}Đ 6èH#îĜcH†£X6ft×ÿøD¥ô29ûQÜæ“²ÞàcßuÄäG¼ðŸ’qîÑ84å¯99)P“'J…¢ÎÖetmÒX`mÉ;Μ?{“Âs“ ›8 ¤j<ÄAJ7•%G›=yõOG›faMkjRly5ìM'^(ÃNï€j•:=H˲†o.ÁK±Ö¨BÀʇðU¼M;Ã>ãÇ<×]™‘;qÙ;ßÛ}ˆè¢·mˆVèól^aØ9œ"P6å–áf„žÕwÂɵá?¡—>òÞdh9œ)¤&ñÂ>øa¥®9c„ÿ’‘‹@@„ý«±P<;óx&’ߺb‹oA @'°è#§r¼s{©¨=¤xŒðNµg@ЈŸí’‹Ú“AæäJ„U›° n%[ØÈ¦ü24œòÞň8*Q裃 ¶E‚Cm²B¬:=pézþJ¬FKf¯Û\É c,ø–ÍØçRSۉﻔM ­~C»óËØŒV÷Ô;²lׯËô I7䭃þK¼R>á'Ršti,Ýô¨ÒY;Ë'q² +Eß6:‡™Ä'N¨;“¶z‰¸Ù…ƒý@Àð’mWiþ:wÐLĸú‚Ù²¸K@ɲb´œ˜õ™ [$SiNëÏ8 ³»¶Ç¥ʅcíEɪܣdÝXdۏ1rDÚ<ý 2U. +Ÿæ ÆO¡3¤ ædLãPK‘ò³ŒAéã'?Î]ƺÁ–š}$6ZiÅ.er\Êþdeo>Où|à6ø&p˵xéís\º¹®Yƒ] 2X/'iÿxóª{ü@.?¤•†Ïɸªv|Ëk¦˜aÍcp 9¦7æ 2â?üíËw¼K÷Ë:J£åe üRã¯{ˆË‚üiÙp_Ê.YîÙ0¾uÆÓ8ìg€a3ºålf ºS _gþ’W}t˱>T+ø‹¼f]ëád˜aUÓÞ]=áUÀð´,ÿ%,õÏÕѼÇL ½§’ìGû€§û°%Ìëg2¬s˜çn»,õîã¸kÍÚΝc¯ä±gÚ.U}¢ãd1Þ~þÂýº6óñ*ÇË&ÿ¼ ç>Ýc´º»Q«Álv—>¾Pì¼GßKnUÊü¶^E‰.뿀Çz˓yK¦^Eò÷{ù™j¿¶•÷pž5¿0‹ýÀ}ä°ÚnD¸þô#c‹Ç®»Ä³ùÈc¿û­ã#S_,˜5Ÿ[|ÅTO½ìúOþÄ¸Én¿þ—K¹Þ¨y¹Ðôþ|Èzo¯ý byنþuòë9sGÕҞzk¯öoÚBõúj“:X/±0®oþÿ²1 ¯Ïº›ÿÓúÆ!†ù³v~Ì×s[öyÃ:Q,ßó¦t·I¿üCìûCe~¼ÐCñÂxÄ1Ý îmßèÁïüwßãÐioï°üÞôž„›Ïv4ýþç3KêÑxèý?‚nÛ9¤±¦ƒúýC½dóôã^î*{)õÔzm½M'‡úl—ü?ŸyâäüD±úùŸ·=ìÆ>ÈÑ€ÚøÎ†ÃŒׯp‡œd%Çþk|cäÿz8þ†Ü³ý}}}}}ûç¤C×ýíŸÞÜýæ²U­+ZÖÍV·­N¶¢·©­ÍVÔÖçët•¯kk+{úß³[«­ñ+|ZÝ}m}nηÿ0ztTJüèŽnFQ4¼Uq,Å~Àð V2,ñ—úŽèÅ-ƒìyñ`JŕÃÆ,«ÿØÛRP÷¶N5¼|އ+åL~ ‹ä‹vù†)ÜÇÆ«ß+ûüÔÏĈôà\¥ê?þ\¥õh’®I 8gþ‚å/Qþ%Ê]íGø‘8u3j®Ñý¥Ê\«ži" +úóI|­ÀÃÜ~™”f ?س„®]í9‘;ޟö¤ƒØíöì9'»bå/PmæÿËãÎ>ñ³}L#dÅYÿùj× ¦s´úl"60ói°}ÔΞ™j© PևàÊEŒCmùêe֗½’wh%ÛÇ,œY#Rtô“P®hÌ"®†¹)Bk®Ð×ô#ÐÇÇ.€_n6_Á¶úÒ§ ;yÄÓ[¾&·D[=BÎ͝4âë8ä§2ÆlÍ4âl#6‚GXK^W‡4Ö¦ŒËiÞA†ìþð cîXEkcÆò&Œ´“gk Ž­cy=UDŠt®^I½×ëHLË3[\.è¨m«N¶†T;H_Ë&²rQš—隮¶‚¨Ù>0u`Ï림1lQù4´u6‚z¡XĉŽ#‹ÍþVkt G•.£ÌÒgk“YG{ˆ‘æ Í¢V¯¬)ÆB±Ù'—”ouâã.W‹E4 7žQ‰]¶‰ƒRŒÂ 2!«¤†§_DİçÊEŽåLu{+³‡~»Š"mQžQp=œ…K,8ú¦NõCµxZhC<Ø%Fûçh2Fc–jû!¾èœ^“°S65“9;YáeÌÒù(1°Æ,Ë_öMbu¯æÒÆ'Zìäáåc6lÓoJ¶V޼ÊÚGfÛÅޅwhb.Iæ4“ªêI³œÐ)®ŠAÜx5'xp€ (‘C¯(ègTáhK–¼„»+֊Ã:¥f¯Þ\ÎÙ·ß‚*7b¼ƒÇ YóÎ Ø«ù;% v¥ H÷ “Æ¡6Ù.a7œ[Þғd–†š\”Bo9k545S +±cp–z q)ʒ ßW‚ÕïÇ K²ÕøŸH<%×0($wCK(,áAZÁœ£!;jû…pç®§*$n†8£NÑq̸WÔD²`bÚg¥w¹Õa–':<ØÝhwP€1ÇW†‡YÃYB˜òdåӏ ë‘lŽ1Ü»°Tò¹{îròûgx¸Çpͱx‚‹::RNMŠº4nEþ¢•`Q~=­ŠIÚh“1ü°­Ÿ$ÀõéÍ’}J÷ˆSt҈&Ém% :~4’Ë$£—«Ž\ù¡Mu|ʾLú@ÕVDñ«ï/˜èöziÏoD²a€pì…u0×˂Ÿ[GPíg7î`ÊàáQ\¬l÷.í´Èhȟ©†ã7u5MVlÇjQXg–ÇF'„Q½#Þ_gýk@¶³ÑÅ6æ}€uÛ{ë +¸’"d1ÿüÌnM@@á߅ $_´›·våoönòÜNYfòô€…ò\ÀG¿#|4ëï ò%BÚa’êº6¹b 'fç B Y5'!GXäÊu<$À—¤ß¶ÁΛ+|uGžš@ÃIN~H+:Â[V9pÕÄzoôYÞí”î}à¼B]¡=èè0 ø›žwx£:öãËPÈ@®ëʖõ Óa¡á ÖŸþÎÜïWoöë颲0¡8²LVaô›tMžP|ϵõÌ]•};ðÃ-ËÅxQüÒnKä.ъ<ìÈYÙ »ª(«'}vúDyi +½®Œ¡VÀ²“ZX—ŠXg Òvf~'F} –'¯èîôm÷Á¤Àð¶s-›°&ڗBgk ‹ÑŠ]É |’³±–lƒ¡áÓüôÓzÌö%½fŠyËüçÊ :RZ±<»æ +<$èӚy)EQ‰y •yçc_ïènýúÉä¦Çé;ÿ«tMr›„Þ'çÿ!¤å&—E°ÿž/“¥ßº2þŽídB„µï^¼íÈõ:„—3û™! zÙ 2$ •ãq¢-ïBî¨ òᐣ*f€OÃQñÿV±'RÂ^Ìij³ªÇsùµZdr%J €$„•žGÅnd[o¯LɹÄcÞ_.sÜÍBÇ +m9…L§ñê-:W)¿Â’Ý%)„˜W~cåEåLãN…ûÖ¿hÏpjTYk Š ì°òD7`#,`ÛUÜ@ʰ€~»Õ‹ÁQje[ŸqÚ¼€uft±áËßžn.ÿøjÏKR­¨·qà펗XNB…b $Ž{ Mµ³§8ÁFm²³äxãªÝ/‹»LE8m#Q†×$ÀØe(øð32ºñ-pÝ뺇Ž1Áìk€ÿ›cOvlq 2ïÍSÁëæƒŒ_¬7¢,Èzc$æýµ-à-gåÀ<®MMÚM¤b‹2_šô>{û¦lÐl›—Яz÷üô2Š8÷NÌeȲ«Ðgí»V¨js„LÏ\¦Û(­°{Õ2Ãêm¹²áTQLs`»L6Øñ¬õA¨©)fÛÔÑ2†?ÿˆÀdÓoSC€EBîeî!ùlÓeo=êx8«¦/'˜UÛ¶ÜÁ¬CåmÐñåºÒ¬qk4< # Y¢ô¢÷H7Öî-?¬÷!¤](xWºP~DaÞ6Ž=ÒíîƒÝ,õØ{¤!ÿ¯ç0iüH[Ìèë¡¿WÏ ”=ýr#5:L"º;¾¢£Ž‰6W£ˆKhâϙ£ƒ&]À_áˆÕW61VòßNª*yß`S1â,Dâ¡eÀ÷#×Ù²Í0»nÄMÿvDMþë êÖ"l°¥XGDiºœ2&¾…uPPO.øãY>ß11lL›³‰Èj=ØÓëvð¬ŒP×{Ш¸„Ùdƒ¼6V&Á=šw½Ÿ*t¸]Ž…v\vàO<7ôŸpä´ÿÄÁ”ïëW‚–\N‹‡¬Nwg_œ£Ö.Ö½S­„b❮)ҝ¬ÓårÃrnÎR·…r ^Àh•ëa#­Žy¯[g“ƒ–×£υ]*"˜r´š‡ÆËôø'¬ûUÃýb·ýªã©’ñj¯´ñJsC*± ªb†|µº¬ê°9¨¹y,ÍKPQ ÁæŒ «>±Ž{I«yՑå3$ˈ¬SõHK9F(³¡þÍ_üÚ¿ò +ÿçÿ•Žë•ÿ¾+ÿ׫ÿ* &WþXZL”æ~X¸~ªpIôƒ°šbˆ­Pío¿Sí›1šÕðÌpr˜Ç¡É¼µ\£t“CòÂ;dºòh,80\s›ٍT}Dz6÷>ö<:UgŒRMQ”…'›þµ2;…ŽïáɊ]u„ÐO S€[7éæŒÛµå5HæÎ»t[¼ª +œ6´vðӚ‡™ÀX°ú™Uº ÃÌ ˜-õà"¯<Æ!\ˆ8~½FtPu®ž F½Õa«Æ¥x*j\y{È۞„ËM¾M7Y˜÷ñ†›ÊqìP0ˆÛ¸„å®*Ñ·€ˆ·‡Åo¨n 0ôL^LÙU +4ÜY ²¨(û+l]X•Õˆ¼ïͯ^WÐhª´‘ýV´Åó=7ßXpÓ÷xEç,û¤@J£ý"ïiâ[áZèëŪ1”ßÕVrªÚÙU~BΨ-ßû²ªñMt/#=èO•ìÅÉÉf/©Ù±ÚR¢µS~8žb“ †²‘ð¼ß¤GS¾àHŸ¥wõd`¬¼"þbº^!ىl?ƒž&»VHr}Nüó‰ä+º|H¼ôÃâ•&@{l_]u€¶ÔþÆ-pJ&„OܬǮT#X¥2ðO9^׌E?âŒð€Ín”–Ç "å¤`P×ú§×lM/‹Z •*1µg­fFNÌØc6î_g-Յ5E +F‹{‰0«‰ÏèîLõ3ç¨A@–4nՉ8LY5Ö±O5F3oÕÚÈü+–±³PÿõD?¹"y3ËÌÚaoR5 Aˆ­®}[U-Ý+j géâ´tfئÝ[…˜JñÑvHf2€tÊ}’qðìXyŽ?=„éPçá3L&މ†÷½@ÒYó"ïçH3yó· r†¼/Wg¡ýž€LFb9 n +Ú¸u,TŠc¿`ÖԎ´M7˜ +V¸+ä0›²mfï$΁sr +ui +èNs¼¦ +æSìß©¡]b¯J hßÞ̚®ÍÓ1šFI¿ŊH8¯Ôn´±è½Ù½=î|÷zÛjì.Œn,F© 0J¦! ÕÉ®”°.+ò›[‹jó»º"á£àEGLZØZËÜyo·ì[mFl›ŠîÀX>ßûˆ¿5˜©Wª¶hì=ö&{>9@à•ZCs>~¯6~` +RèÕöÕ¢/Íf9Ù\ŠÁªJXÚ÷Ë5Ѿ,?O84aªŽ£šÜX>1 +¨Rþ /8ïÍdYüŽŽÄr¹•èþ?ʖ­aE †µ¡9pƒ9$£©P‡„ŸžÁD¤ZÄÖŒy*=7:À–@È'ëŸÈa(9\‡³/õmèoDkv¨lwø-øm]ȓRÿCcíàÍšàØV;èPØç&šè±as3T¶=ñªË¤DJ$V6þ4­ŽÒ&Eusfÿ”Û¾Ú1 äsðÖØuR;c¨üz*ÁŸg ü¬¶$n7D¥,R~NEÜgO¬#íw£Äuž¢ÅTµL¢ÖCfOŒ­­Ͻ[êÛ­Ô¯­µ¢TªHD ªŠÖØ*Wá‚1E€³ï÷÷÷ÿì̒LSÆ´Zû›¾åöûÛÎmæïCw¡½s›wœöôý¼Þ¯¹ïtw¹½-üÞ¶÷}ø ½½üÊaÝmÚÛµ§Á æ¯ßSç-§O#§{„#Œ„?|hÎʎ˜,y%æÑµ ÛïdݘY™ø†IðÚ3±´‘BÊTAöLRŸ_/\ùViÅgT¾ÙÄm2ôLlé ÜÆd”/M¼«Ä«¼ ÃñLz׀°IÒ§O+&‹Šæ$xEÛI¦œØµ&Rî¸ä³åm„Éo~jÎ/eÛÿàä£ £fÇÕÀT¾Ì0 |Žéûò¨ûµã€çÊÑls÷êÑ!Q«€2¦F!¾Ö.¶8X³×ÎËÓ¾wíeXí…$Á•ÄlHÑüm "»r˗VÍÿöŠ*2:-ÓïŸíîʌ)nȲöɳß ž›ó\׳w³;±ým)?.´ÔéB\d†¢•:óò‰ëÊ{¦£_ÞTˆ{UðImÒ{‘MX̞LĐ©iŒ€Àñl‰–`¢„Öð +#õvGrSۄ{ +2CÊåø2ÒÊjL‚ï­c¿Œ'Ù±óøÌÎF«»»F> 9|¥C½?ÉÑÓ*ÖZ©ëî +·¸¸q⍓¶µNßý/°>¿o¯ßïý¿—)Ä}9x³­ßӁ`åϹOjå=ú»‚g+¸&›­Ú–´øõ, •ëý‡ž§Eƒé½Zå֗Æhšr é#WJò‘.Â\°Ô慎X4vœi±P‡¶fÅAX–¼¢Çwa0Ç~øl²fÝ¥n±Æ]‹ÁòX§Ä…íW߯aŠåŒz ëíŸä˜a&ã\ŸPÛ­"œPˆ†Âº7SÃDËß*¡pYîköhR=:2ÈÝ ª^š¸‰Rïõ»ñéÚž/ö¬õ>ý‰{¹Oƒ +l¤c8 j½š=Ô 5+xØ­6fµ,=‹—û…w2 »ÓŒ^#’9æÐ\@ßùì­¿ñ2ß:ûå¶Mԋì£t?è?|èuº:týG8^™»”é[¾ÑÎ9°ÃAäÕØ”®Äq»¬náã1xÉ[ÃúO|f¢žBÒâ–qÆíA € åØ˜si?)EÝ³¸d ]Xò9Ú·ÞßÇ- ¡ÀÖeז÷„gi÷(¾™Õa IÞâæû¤BipÕ]mõÝæ<Ò꒗عÚIšëŠ›ÔÚt9Æ}±#D•|¦Gn¬V|ܼ¸·áí]1ÊO—ªh*u1SĬ‡1¡=5Røҗªtý,"È\™ë÷÷øxUÎW-ÿè…r/FB»Ê¸Šè#µä\Õ½ßËԣٟý[rôg+ŸŸ‰gE”œg¤Å!ZÏ£¯÷2íVŞ¿ƒ.ùÔR¾mÐT§æ"™>ÞÚ'f¯LY»Ón*éÒ¢ÑCí©ÉÇ»öb•\“?gv*ÐÏbUmÀځŸ¿Zï®)yåv¹–Ï ¹E<Îão—E˜œªïyLE’që.âcö| _°mò*†­ê@-Ö5Z*!TfÍEöm_ÿ€PEÒ·œVÌ܅ »†ïh¥cXRõøÍ·¨×p +£Æs1æ€sf‡ÚٗDXJÕíšKHKµe¹pÛ¤×DNŽ8­Û¤”²åb0™åƈ²*…-½ÃªX›rbyÓ¸ÜVh£—¼‹%|zʽÃFì8»éK‰ø‡EÊë+ í¾±ÈlPPõ™Eõ›63b>“½Vñ2zË™ˆ}•4[—ýhP‰jf,õ¢¶x©¢³ð—Õ°ð˜YA‰È‚ÌJ¾ï9AJt ÐýTi$ßìüJXÿá{h¾ƒcˆØšbœ³R[¶cFýIúí+~ܐ¶{ýÜÜ#`³ËÚ3ËûšúY +üÄzß=»‡¾—ã f®U²+°¹³Kõ–ØíÉåoP…z¶txYÆ»~ߑë%€]"ȗ%Å:öÊaíÝA‹¿Q&å(ÄýÐûyyòµs`"æ>"|q«nôâuƒG]â·Ó¬VמדÚTØðãlTicëÉ¢%Íôė»jÊ'E£~I“Òõd­Òr¬—=Û¥ÍÉY䣯5®} y5™E~Xås°]ɉüÍ^—Y¯lYÄ"ŠØÏKê¢hš]úõ¾Õg·ÅÄ7º®R>úz·g‡ŒŠÇ„óÎqÙÈ妺ÁJëŠRÊó?º +YblÏ•£¾ªÊ¾«U2§³ý+tæJ_ü•èã¤vFþ%?έû;€*òN,mC6þïâTÇuwzßëž1ü'u÷ŽÔp ¶´:«2Ê?;¹.û…»8û:Í­Ζ¡Ò­qã6½BÞ?ÕwÄâhá}k´Gbz€,|ÿ5Ä™.¨}k¨ð8­:Áõ²”OòkiÛç‡Ö¢QAoÊ7¯¥Ž3üž.ùí]Wl¦òëECDš¤ +e`0þ³” ¨ªE]Ôń$ÖãÈ(Ýx;{ÈJ«êÌL®êê\õþ•ÞÜ|êÃü(´ÚÞèÛ-¡ÿh¶‡á²R–Ñ»•t”â°ÞãôèU•_s²šý{“pº ŽièóL4N-DUÑ.…O¯Æ,ópO<ݼgUºz°4KíŽákDºã¸ð‘¢[óÆ×Ö;ZóÑ/l_s¿;¹.û†‰zTh—§=ûu×{ϲ¹ï[`ªÙ؇RÝV¾ӈ;RÔÍ{™ÛûPó·aÌÎÜ9t·žÁ„>e›Þ½g¦Ìq@+NÖF‰ñü¡¨É1XÕ·lÕ\Ë=4ќÆrße° 5ƒéaPTÝЙ¨ØÔ©µŠ õ¨. ê¦Ib›Ä`ô}ø %e–Ç$d|¶•'²Wr¿ÛŠ |Zxàö·zŽîÖW(]Ýfý‚ÙE[TªâBlä ¦Í³ýëÒ6Äß,‡‘Þtã…*Í:ÂÒÎ+žïHó³hF©Ÿ^~ˆzì ½z%c:­Žü¬pã֍]JÝ\ô2­¬f«ÎP;Ô³náÇ¢°RnÓëîO]Ê)Ö|fŒfOÊG‡·9U¬ÉM;Û©.µÈz¼«éqMÙ¼ÇRä%Ž¥ÈÕö1š<†ÚÕßElo~¢¥ +ܞI’Ò¸¢íá=›wO}ä´?¥ÚÙãA{|¾ÛÉGoM“†«¾Áaßq³6„¹ßŽÊÜí¸¯:ïýTɁÓt ð!ÁǸ¸6„ê¶.¼’VpŸx¡ù*_V嶄ǍS?ÿ@å¿<óâ¼ñõaOÿ%ˆ~'Q:‰×ýàW'Ftx}F§¬Ôçµ5+&ð\TAqMý۟äŠ@®}bRêåÐäª;ƒ›Œ£Ÿ¥]o'K̤Oñÿy×H)øbcY‡Èôo¯ú½žï-Þ{-Ýø¦«€Ç’T¿ã \„—W.êi?ÿ+,úÉ5˛M¢ž gû#øßIþêLR ¿ßHÙç¤ÑH›ÉüT˜#ß´r†0òèå> +FÍÐqE`²q£ÿ΃cWú…ü¨(\Ò6c„ ¨p‚Hfãà¤lúd®¡øtŸêu•w¬î÷ÈJ}u§ËøeÝûž@Jcä­F›p Tƒ|ºTcÔ!¯Ö¬¬É¢8È´Æy` FØërœrÒBuuÉ>Àމ “±<|´©x¼4ƒ÷D„þ¬¨(¢j¡îìm$BeO:傺Sӏ㖠+"`¼1ÅÂ?²à‹ü¼ ´2!2ût¿2¾Ùdõ/m»üÇDoÃø¼è3mðÏ/¬õ‰nð Jž°“~»¹Œ«‚„GÐ.]pÖÔ· æœ*^¢¼¥¯4LYkG˜OtBjéd°ÙŒÜÏKô‹“PÊF’a×ÎÇƯ9åëj–е5gŽhˆñö35L¥hê·~D‰ÎtRq&|c6…œéò)R)BûVáGH€ œù;R«#Å®÷!Z¸ä~jT+ÛxÊ®n~†ÃVÊ©ZÿB5q\˜Ò$Æoò|…›Þpð„6Ô²ozIg›KÿY’-"móVÖxh:&¤‘ñhF“êGÒ!:;ǵKýqäU¥€Ž®«&mNi´Ë€ý_t®‰Ž4!ìJ G˜ ù”æNdîžDÓbŠ“Ýç?P²”_Y‘¦Æ®¼æÄ;×Ʉ=µ÷q…5¡Ž1„¼übÊ Óæ^¹Ü­±‡ËŽW%ì]ÓzTWŽ-üìŒ°°{nƒyøz@%ÅíÁŸ¼ï¥Œ»‹ÔøN˜ËM›ásµH(VZ,Xœ=üÞLn"ÅՍ»TR•üfï?$YՍzÞµuèáÌ?3ôøÈ~gÊ«æzâBpßɼjN‡C+qö¹òü‡å‹ßi gQ‡›³¯}ÖP ªy˜ÜgN•Lƒp„8N¾~ Ç("Šö|5)¤ ºÖˆ°ìdÎÁïï¶\µŒâÑìRd!=æP SW"Gù–ÆErîlvC¾އ Ÿ]t'Ž„+<¶‡5µDž +ÞÖ9ÕÅEFámýÜ\<±çUËïšýüYh•ø èý2µe÷ ¯Ë”ms‹íºÂ‘LSK¹ °ÕèIpi«ž^`³ãÚÓÉbá{t¼ÒWùãCÏ?üŸ ôbTHÏùøWŒe¼9öNäÈw€†‡/À;±ˆhOÀ;*x‡+SAÆäç¾YۍÍuޖùxò*‰!Çùˆà: !Ë9 ˜[P-²lúꗥyj85šë€UdeävtüE4PUwV¹_l¹w¾”?Ù+ѹ2P†œÇ¨ÅÌ}³ê\]¬Sܦ,™Ú]ë©_ݔˆä|í)Hü»©Âş ^9ÞYÁ­§5Òvº(2ù9þ˲ƒEœ}%ÃêYñZy-‹Á•RŒ ­Ÿªyꋤ‘j^šr’º*\r¨À+[Õl1܋’mu€9?ÜY—›iØ(®ôëgàN +—("ڑõü›–Q³»‹:DÜÖÅO.2RAZôŸèºKÕž×8¯ù8ÑÇxŠvŠ:­±û·Ôí-Ú30ígòY­—n¥\»¤ÚüŽ ¨øà#'NŸŽpÝ0¯ ½•?ZåÅ‚ª=.Éh{òÏÄP£!‹[ÙШ7BU|ê>Š×AՔ o×óìâÑÆ*tí3ø„÷$cCÖúe½X}蛧s‡tTô*ì†èÉ^7ÆÆ“6ipE\óÀ'Š­gƒ’„Á§N;¶TnÍš +kE]½]SÃÒ)ƒ‹»hÄizÓðGmsVÍ]ŽÛ[¹…㖐%ƒpž]oܟ¼ñziwsèW`֘¤nɚÒ"6É+ä˜tÁ ? Öõ,"ÿÓ6iàŠõ(ÀoŸX5·¿çÉåA";Á˜æ8Y"§•QhËä¤Â~ëX;ô‘É2FZ¿Ÿ‚ú’ô æFM er×!Εm^UÆYÈ¡ü¾@üú#Ýõùø%7˜~0z2‘E÷%#X“>Ðý“Zâàe؆EÀ…–yô°‹ 8’E´p¢eÉÃYƒç*½*tÙ7 ô‘ðph‹›–m¾8Ù¾KöTÒ(ôi;MÄþTSNnJ+ÈHõ­v&—ç'˜Š•ÖÕÉŸ>ÐìH?¦d|2ßK‘ïd:5‡,‹0œ[ˆå©õ1¦œª«ŽH*Ï ³åÓè+gi¹Æ¨¨Žf튍Ÿd²¸[>êû›çÙ*7!†qãͲ«ÈƆ@ÕâtLûà +îÄjòh‹5uvƞ®ØÕµvÅ\lœ=Ù0qEêׄ ñlåDvf<#Œ±õ^&ãfଠ+.-R–´ôóƙoe²ê¨[‚ò¸( Dµ­õþ—P)ÏÉeíb륌ý²ú €Fí­/^F_Hc£/Ô?ÅÄ4k"|˜ŸpÄäjp̀›1•RÓØ7’‹s2þÂ1Ôa%™Ð®ž8Ý&¤¦ÊøÉqM}Ìã) Hq ªó6 üá¤élÌfVzEÀiË 3„þéËü™´ÛÕ®XÛYA©9b¡ÑVÐ3ìËV[ëځ9æ®5˜*nlۋ£]^™w1Dž5oÚ5oÙå'Lfo}Ä¥¿¥Ï;&˜\ÔÇû*ƒÄgÜlS/s%©.YÜqé¦=w“÷ߐÅÂWÎ̀?ƒ| ?ËY£ô͊$IðA fä!8™—샄ۃ—À¶ÝµPäFÕæ›„£SïñûTÏC5`Ða êû½G­êrÕûÑWW㑖:_Æ`¨[i> §m9y…ß)ªã,á|CF„U°×¯*L db§›o¬´övZ}ô1ïyê÷¼_‚W´WߌC‰ô콫$ö6ÎYþGt66ÔâÃ0Ž_£gö‡ ÅÃèî—Ò`~µš¿â’ÚF9[ æk¦á ˜Ëwø:ê;räã„$§o­·&¹nÿ¨ŸüsϚ–Ï=³Â«lR´;àMw†Lå¼í&»TAŒsžÙlYòj=ȳAL)ÿÞÙ°OuúA™ò Pb¯·Ã²?ù £ÄE_¬ýÁÆoÝAQÍÍ ƒ_ÍüLŽü1ˆ[IÕQÿæÐT`U@…m/¾Gÿ›AQ„Õz¢‚ÿšÈïõÈ|ÿû>ýØ©#M-$£u\ˆó[˜5šc‘Í•sh–Waºò„EûIîB"²lUðʛ€gïç9¿€Ek€ ùúß¿†»¹²ç#”‘ȾPÃ~®xà|Œ+a¬ôÔˆg¥N»ærÆÁý/ã°eµ=ê~K>êÁÂ(æÃtu#÷+—¹NÁòN@V¢ͤ ŠÆ¬˜–Ûk–ê߄K@‰øWTi%ϧ¯ãÚJ·W2érâä÷”D sòúëu£qæ”TôÖº åÿÖCÙӗÓyõ|a-ƒãòõ8B‚H*‚ +]<ÙÛ§.®¼4«©#Å3çŠzŠÝnT ²€ü.ìÈÕM;Scê$Éyr¬¢º”'çÎ ‹w–‡Ïaþ<±ú‚Z¾6ÇOR;.ãnéï®Ø0§Âàøq‹8É].Ԛ6GâÃ­ÜØÓ¡Ž^nyU£‚Ñ­×D ÿ>„µÔ@æ,SÛØïäßWm´¬%”"r~½ð²‘ªâòßÏYó*¿"XÃã 0 +`%Ž xBƒsü°Xx&Â3¨òw\lÙ?Ís#ä`@Zë‰*9v8sÍ]î/%;S]öQµ•îæ-C!@aÁ*4âÖ4]¦ §¬•8£ÙSÁ[S»ØŒõöÒ\‰P‚}J”‰ë®6ü8ôü—=¿«ÿ2T ÝQT¥¬/*óÐ;{ ·”.ÞçåGœhgNÎiµñgQâE—s5üs¨óú‘Eçˆñ…( \tn%.ùWõv ‰óY§\QéibÊ]¸¢·9 —Vë@ï]sOuŸÀTp¦îeÀ\ޏ5`æ%Lž“V|‚å©´ƒ;5/Š¡$VՁځ´bž“R+6zÝIYýÒ³û¥gោVz²³Õ•ž´¬õ¥g╟ŠV}éw}Yùwò +Î̬ìÊÏtV{‚³Í•žè¬ú’³þR³Î•žø¬êÊÌ«RÝ'fVv…g¥+?L¬ôåf¡Yê +τV{â³¶+5 +Ì«äÍ%±Yە¹Yò€¹ƒÝ–³²Ì7¢®aš÷˜nVa¬Æa¬afA]†ÆÔÿÕËróËsËqڌº«!œúÜÙYÿ)Yõ%g¾+<éYþR³«+;B³ìÊÏÓ+=)Y¨Vzr³áž ¬íŠÏ|V~ÑY¨Ææ„»i C dY§ì'ô⢍ŒãÚ}’Þ|ß%ºY^s.Ó +¬Ã¹RÚ)4¶þPl¿èVÙ~šM •¨WfÆÜö]Wk?J™]èò,TwÇ=™¶*íXÝ«sOìzËîøŸhÖõ@ÆÛ1鍻Öi۩ևÐ_=«™)¸•¼¾©ÞN'’ãšæ©”±ó‰ý¬É§ÞÖ>’Ed͹†qu;rƒĵDÉGºQM왰Ű0îöit¥Ê™oJE_YY’Ø Æ>ÛõÇ7‡ã ‘3 Aù»/ˆoš +Æ­ÚÈàÙÈol‹0þÍ¥bÇü§õGýaSv܆9R3F gó¶,§Ý€üTÒ¢Z3[‰šé³_=Ü77·¦õŠ +ÛòhR±TSPSkCy6í?ÊYM—FÜ7±y =6ñåñOßÀ¢_Ç6¶ ‚²b›”~ñ†žeˆÁžŽ`g",Ÿ¯ÿŽa‰(ÑÙ4êà[W”`ÁNÌ<†\)ˆ]ËÇ3[>¤bÝÊÛ¿Ž®üÄÁ V²` 4-¼\²·õ=°Iˆ)˞ñ–ú“0E¥äÔ¿ˆŒ3[Ëå†í ù±Ëu“Ï¿ãÀM1Ùö:–ËÀì áá(î’v¹‚Ðÿù0â{ÜÀ_æ˜ÛE¬+:y—Å{†Gvìˆ^Kz¸dv¢€mu¹¯+€hÅøb€­{Îèó–?x°0ØÿpÑ&îˆÑ;óá–ñdÈ«r•Ò +§øe²3ç«¥ú—ÓÈÏe ÷x·µÙ³hF’½´UÌÅÊéU]Ý èÞ+»û¥XÇ¥ëÅʧ•&°°MOÏw[dAgèQ¦.Þí׊ BRœŒ|Sý!Ž#K‡¶kݾ`ì˜Z&ØnÕηjô¨þò€Q¹FŠ#хüš-ÕVÂâÃùfìl—º&¾„©FíN‰®á[ +¼è*©øSƒMcšúv2¡\…-—©ÂœáÔóMd{çFB@>­ŒidýÓî͋E6Å[,[/,;Á<;„Àõ®|;ÿÇ[›Ãj–ÉFĵU”(zÏlAº¤=cun0経VE!ï8àߑ¬l*¼·«Ž9ã\SÎ88"WRÙ¹Œ•^H㢟ZüPm²‹4Jê`¼0Äè¯bÞË'‘‡m´‰ÏK†¸^ØPDñ’ªìUŒÊÿhµdC¡¥Ï¶[p.›kW'Zf¯mà®ü;wí“Ù¥ Øspû4˜¶0gÊ¡SÓNŸ¢¦Òûsƒ€×YXXW%PØ ›‚—ÌÇ:bbIè—Ã.\¨õ6 +?ò(îO¶q ¨I¢AZ’²Á–ÈÐgÉ~{ñ¤9iÜ´ìJúDœÑ©ì  ꎭŒ}³Ap®œ–òåB†²¿›$Pè2=j½³ 'ÃãPëICJŸ'“D ?伆‰脃Ž^T€§›ö·‚ʆh£ŠK¸â “)wþX¸ïL@ï B`ãºkRî/ÇJ º¢¡á«Ÿê­0Ë-÷ÞÑ¥+ÿ}™™öL„™3‘ ²B 7E6zdHÅ×00 ‹ pAiäOm}±7U„†Ïj©&ä™>™κùß&êUÑ ó³u÷€$Á’@€*Åb B1Mр Ÿÿ¿~ÿûì™$Š  +šémöÔõæúÝގÞ^^ró—ܼ弽 îsÝk}oZôobÝêÛü½Mç~òÞÕåê[Ú·§zרSß}uºÝÖØÚfø¥œ +1ˆd°·Ii¿ +ÁJ=—bçFއè:ሟ\G)3܀/Ò(÷ü,æQËÜtªR! ÄÎJtü̝)¾3UÔ6úžxâ?㫎€P߂®qKÏÀ¡>8l#` ¤ Mø£D‹›Ñµ7òŦð^’x8îF'©Ž…„ðcI^ Á{;åûÚ0„‚™cRñõ%ü$ìVB@‚Á»ïB‰‹›z¿]š½êsž°®Y¡·m"‚d\ÜJýtÚï aÓhæÁYéÝ`«f⍯5ûÓdîö†ë>“»Õ'h;ÕFñóQ—*ˆfï‡ÎEÀrò,'p}鶘èóò!AݾHvŒìÃT/WúLô¨ÒȀ0ô@]ómJ.ð +Š‹¾ ØGY R‹ü•Çgký$æC]S=ðß3x1øÒ”h:•_®l8ߔþ`Ѷâ#z;`ƒ"é‹r{ՁîϝÍÂ—Ф®·ï+Âê¿Îöƒ6’½ø4փ}9œš8ÏüpL'ž Cƒ™Y„(3ÐŽF1 ì/…½ÊÁËÞ­¡6Jðˆåù¿2b┸À ,@mõ‹Î4¯8 .@z&Þàa4@&º1‘áPI¥~7â{2.wZ OÅaç + Â#.2zNôu ~ã×@µ‰s5®ÍàoB •ß`(PðžØüAQû‰Ã o‚C]V]ƒóhÆo×ívN^k‚}ï +R‹Ùîd¶ÓþLäËv“÷±€{ˆ+*SP½ëͱµô†6R›!€È¸ÀÈ´Œ[—–ðYÒóþÚSsü¸H]°›11äÖ=¦kÛÛ_ +Jx$2O f™ôhN=í¢u—³¤ou d;()3Ü£$¹Ç)Hø¢€Ha…—šô‚EeàvìN¼ +Ûљá°~#ÓUKV(æ\ג á2º6s5]ô»ç/rM"<Ôþ]íV&@Å8ó¤3æôÁøRÆã@÷M¿N¬ß³è7Ža—›@h@d ”¤æ³ä`߄ဋ´äðÚž÷¿ ìâ>’w~Þ=XóîŠp¬(pJœ¸}Œà›ðÛó½¢`’ §ŠZQ©"üÖ]%ùIçqzâ$³Êmýx ñÔ +ކ™ç¡”ÇÐôd;] A¥ç§XA¹Ÿ±U©;æƒ4·És±”Pc¬$\'˜ïƒSÐ®æ •"çv”R$¹Ù¥°€€Íbê3l³¨Éá*7CŽhøf=,ßnÁ«ûF‚°“ë!Ò-• êoœhÕø•áB·©8Á˜ÍÎq>2£ñÂ9"Å:ŒÞ[Ÿf.„¤h2B AÀÞÕîbܽ˜œyD® +绩7¬t†Æ˜8J°$¼qy¶¶+öÆweÚEb—zP±Y×ùÏÄ"š';Y@¸fì’£“ v¬2}rPhs>Ïáš»`Zî¦1ÌCõ¶ !ɾ—ÍVÒõå€ÍœY0?y¼í}Þl#ssr7HP^IOHW5è¡{m ñpó|©ÎÕÞ]ÞL¶Í]\œ$° Ð%ÕÐg_jÀކmšýœüN)ø´|¾9sÀrùº4Á‘OC?Ùdª‡VóÔ\EWôïm‚±Éʰ%„æ +¼åXsüߓN¹¾[AÑ#vU~8ÅWpåU§eùJ®ÞøÊ®笪¢yʖbƒ®»ó›óÛìö­Ãà‡t’Ú“yÀ]ô°6R¥Ëvb´kŠx'¿ۥ̡›ÿ‹Öùàõ¼¥|Â6gmº½{·âz÷¾C\ìñØ9A—1üð)Æ_.ÎnÞmWk%u»;85àç¦ Pù¤ÃÒö{p‘vÀŸù@cŽõaE¨`•.l&ô(¬p!¿ïWßÁuY ÀÚâ±¥/«8X +k÷w­¯8„< +Qý5Ç£|(ŠÿóçØåg«¬ãùÊdâQ¢@¿³ÂÎ7ÈÆ®°-%ÎuœGÀ¨áàM~ ˆÞ!Jt…H¢mA‘>È“‘çxÌ„}^ÕpG×M÷åÑދ+Ї£3ùqbæÚ¹À:¸¢­4ž$§+SÁ5IGYÓTS®¨Rß:;˜Š3ƉÂt‚#ú)Ò'ôÏ¢ò„Á¢BtŠ•êúÒ¯ ëy‘ÛsDáNX+Ÿa—ÊØ/4JÎÆ3WÀ%JP‚Ê¥YQÚ»x¯1̈́Àøœ¼AVt:ÃsŸ@¯9–ÖpAÍ^yS\ÏTýÛBkJ(âŧýú¥_9Ãé ØN5öâ ÿTŸ¯xuǎ<ŸØMêऀêÈC§|¿) žÇöÄËò—æÅÑ∠³=ÐcÞC-üãÞòªÝò®Ù1_½Ã¯ÃÍê9µþOö$ór€“~ýQ݆Zï-:'dŠJN›`rîϤGœ4".þïƒár’J6ÀL=­ ÆÔgÏ &yÞ£yDÐäí՝ëj* ñ¶Äkó.óæ@%ÿœÐDÈYæÜMÞê‰mœ R‹çx»^ÏLˆy÷«+–†Ä!øGá½ä2tc%êYËèàMÄò„ 0Aš¼3ïœ]”c¨¶?/}»ÜMêŸzoL0;¦bÏMÙ€="+޷ؘՔ,´ð`õð[󘘳ñ¬ô̧I°51œ{ °Ø†)‰6XÐ"TëïWpˆc ÊK,msGÏø·4|ø:ž)€–:žX5¼Û©å£!J—SË­,ÆÚûK!¶¥ˆÛai^6â(¢žch®é½$ky¹ëЛ™ |ôP¤èúùè±üÞkç™ I×ÏFǁ°öc¶0êy¥ 6)ëݧ`W~bÐB¼õòÓ,6ãm'FÜu£¡·ÌÚ9wБ8™­Ç„vzÍnüÃ!­óV’ƒo›´djÏH #êzFÑ Û¿ƒ×Ï5¼É…eÖ;¨P횹VÀ†ÑXJ‚h"‡{6¼xž;W?7':GytM8Rv†Ê”nÈàgso—Ó›öK­$?;zãZÀ<¶Åå_‡kõRdw?4˜ƒÜ&`ÆL*áÀ‡Ýäë¬(ó߂Ó'~À‰—·ƒA¤$|š£¿îãèËA‡(, cÅÉAFÀô̰̇¢yb+2º8ŒÚ>Üw¬Í‚4SKo„V÷}b0pU’Ê+\§øŸ¹G…ÐÌp\á^Ä;Âèex8Woq‹@ïP_]”íwð6Nôá0,x<.†3ƒ…{Œá»Â¥òíøywo¾¯Zo–Aˆð‰Þ•wâ`€coËQëÖ3•g€îæV‘ÙwÝàpè]¥‰iSdk1µ$wÖÄó6.uP¥S&çN¼ïJœÙ[eޏDxôÜ ½XÇc·GsÈ;Ïðè™è_Ý坋 +Ÿ6ÇN²OȎàf¢…O0Ûvñkw½E‰²×2k èùIemÝÕÙ¯v¹53¦Ì3ß%¼vs¾Â9Š¥ì'ÀoSbìr•Þ»>0µÀ ¸àáÖÓØÕ;*Ÿ>¦²§kSº?¡`CÑvÜ0Ð^Þ§Ìwõ}SåU—ƒA'оÅź×OGá{l^”ÚCÊêƒßr»'·€ˆg¡gà»û&Ê®²M{½uËSâîûb·õ”·°C©ÇärMê<öõÔlYèè€ +³Óbðév‘yw/³šÆýkö‰zsы­ò{Þý÷K‘J±æÔÝEéÚUšFkèÙ¬ \É?zÞCà Ë7ÉmÞüŠM¸¼¥¤­§£þk5˜ì=NË>û¨·ƒ“•û,Ö¬øÅW³ðYè[Ôì[ÔÀoSçõy\§UxI¦ÿ(EÇ}è•kå? +%ZùLÿwôÇçŽè¹åÿ¢@¤–ºþù˜§â5\~ï`®·?¿;¿º„æAÖ=Æ>o–y®Ì!?ázM ^ <àÿ“ Z·çyý"¸Œˆa}Ê>^šŽëÏ|YCz…HÂç¯ñŒ=»Æºÿï¿äõÿYÇ䝩?|$ÛZ G‰÷+¦>Cýónψ½Û +œº¨°Ñþڗ÷ÇÌ54-Añ>á73†m›ùAÞ®~ïâþN‚ÿ4ñî*˼~4¦]D$ïßþòŽoï)9Àýí¯=$œÐAg¥8§çÎö1óç{ùŸ¦“C¢8?ŸRÝ5Ý¿öÒgp²&bí§§òüÿþóà/ç¿ÿÛþ%»Þs¸ú<Þ2—U÷œ Û¡‘åöl|¿î_÷/ûôIÿ—·ð>×ۘѶѺÑÑhþ¦Ž£FŸºŠTí„Å:åü¤S÷žŸÜJ¿–]±š’Þk(eõê—{2Aqï6ï¿6!·DÑ y6œ^ÙI¡ËÉ+Û#³ÿãZúî¡}Smñ™Ðp蒿Ö_»ÙÿY= >sѰø»eq<€ñ'<€ÿÅW/œdê~{|‰?YŒ§,ÐâÒõ{e~dú’=¿Æ¥CÂì^Áçáÿ‡±{:f&àzÐÉÈ%~ 9¨êׇMyn)Ññxáâë‡Ä”ÛL$ 6íê6ƒŒ£ßáqà:+&½×ãV}xîwË:U½‰9Om©C„¸:î@òó‡_bCø”L?!;ê*0ê!‚zÐUš.—ZŸ qIϤ<é2Þ"(âì{]¥j!ÜäGÉî‡Ó0Àõ“s¶²…RµŽâjʃäÓ×§£~ÓJÔâ+úŨð/«âà ՄaÏÁ€b²Ÿñ‚±º­Gï‚fҟï +Úy´q3"ì¿7Ï«ë³%”TmÕõºªHãQ)Þ®›Ñü£Ás¤3ãPNTãíR¢sä'"rÒÒÙ|4jwÕÊ’dªH‚E$—FVÍ)ñ¹«õdœÕîK³Usn’;…ãÙn„!°¢“1¢b :3Í.̄¡=›³.Ê+´[ McÉö6œM]iV3’ަ^}2Ø8aö2qH©rð M*i…³‚½lþèa.µÒ¾Ïƃ)×*Ž÷aIÑ`×Á(þM¾Õ=Ë^‚rWàíÍ­ŠI" “ Þ`Àèú0-Á1LKè|#&¨ÂZ‰úºJÁuë«ÓLL@x`oHJ›æ–—VH¸ ,q)v«–ZâŽbkÆ|¸0lmpÁŠdAÛéTGØâØö«ÏèaÐÁ(ƞˆ}}"µHÚ~)º{B+×d÷Ã;5Üj¤‚àOï˶ö?ž'ªžlˆÝ×&˜bëpðÐsÂW3ÔÙßgí¸€ºOߪ´û®%U¦²òªÓYsUi¬¹ª´ÖCª´ÖªÓYɪ´Ãÿ‡#JSZœzÜ»¶k8Y…ÆÕâq³Ýî¹³ÔsÁríÓgRM‹—Ø0ŠðMTî{µD£–OCøF~+õ¨ù‚æ,4nõcëø\&߆îݚÿêåÃÿ™÷[‘¾÷3ŸÉ`¯ϞaîJ]~ aòsé!Ì,¦B+,¢&~Z•/ßdžµ?“¼›™ÝK·–=JÚõúxUÿîáGòÿ¹Ü¿î_÷/ûõÝ4/š ™ã.{ÁÐx:/ŠAíú ÿýqáÐf¡·¼ä7ô”Lv¬·7ì'›†_ö¡šç.»…µRÞr)dIV³ _a÷Ñ®ìT˜2œ;¨jï¶ejÏÅ—€…Àiyþ®™Ê÷èÂË{ž÷öÀt]‡[JýÁµ©¿gÖ,èÏo•CÏ!=ͧì"2y0ikÆD†ýoݹi\;ö‰1öjøΡß@êRÝÒnÀB¢ãò>/^Å™'¸l« ´ûß ² < „ìw JøSϕß{ÚÅ\„k.‚èÔß"ï½úaã Î‰à›™bäb·yC‹<ÀoG¾Î„Œ%ó½*èw Ùé‘ñгpÖr)£ck´Çãßb¸N±óËõÍ¡i-_ÐáG¼ÖtM`ÓHæM晝•ÍÌhrÌA®@¯˜g¥¯™Æð¨$&ï'Oõhx¥A¾Ìû˜PŒ˜ú.2jŠV~¿=ÔÖ¢б9áÑbL‚øÕüÎNW7ƒI‘z´ZÀõ;Õ=0úe…ä°VÓMågö—˜ès50}sÍ Î²#]Ó<ÖGõy\¥€i‹ÈÃÍ01ÇÁ™Ã’)6•y¬k¾š€Ïµ±_}ý÷Ü\Õ´þìSº~Ô³P¤s+IÑ©½¹¡ÌÑ_/ªI‹ÖA½¶YKC–:]ìp`“£ + #¨PÈ4גÇxÁñeus ‘rô{£_'ž[ Qƒêi/ª]\:–t0³6h&häBήפJn>k]A0öüx±›QSÑltœ¨úZaعS} ô Ðèt¯}ï}€J@ñzNd»ÒМ£ÖAŽ÷¡ ±5—„¨Ý†ÍbØQ‘0·z7ÎærÐÈI„FXšT°…‘çÄ,ÇwÏ{ž0pSa¶Ìþõî၏6©ÒÅE³þrXց»Ò–647zRÆÇú«{cydw¸Ø €îøÔY@Èæ}4$ú ƒ ô·Ý{Ša +°EŽ$Údòy€CĜ^OÁ¹4;̬ ŽH±0L¶¤Ü-ÚJä“¢ã'“ÑIPż¯çd†^,’`7BW­68 +^ÍdŸW•Èޓ…½ Ù0cus½û 6¥ z <#½Qhù½íè7`AªJÕ9´¹¼/1,&"`zr§OXuÈUñlÀuBɂ|ǘ è¤ÃºË7ÂE:qÃjMæ²ß#’“PÅ¥Ù±Jµu\Õvo™J¸ÖësqÝH«‹Ã =úKLԂFÜHÁ ƒ‹µÛ„u?UÙ°ÂWšØ$Xïè‚F{ÊæÁŒÚAA#-æý|û0‚FSËEï+W„1÷fÉ ÈL^2ר]ëüÅÛþœ.e“3§µö:¼­„^ò/û—ýËþÿÇðm]örÔ²Õ2ÝÔ·ðË·‡-¦–-¾–áK_Zó­eZÍµêšæZý6¿U¯r×@×ÖjŒ½þ_ /‹—ÉKüé|Ü»Éw²ÿZ_íËêåëåü™}Ô¿³.» †½á³xzŒ?s‡ïðÿÚÙaƒ_ž‡Á»y.I¾îz!µG2…½Ý_§€Ù{u¡ÿÿfë<(˕7œ¤WüÍÖûþåC¾ÏòËu…ãVÇ·Çæã…NþÇVß"[_ñ§–×üoä–×üqÂØ|w÷KÇÍ fŒê8?fš¥Á ÀewO»…ÏɁá'ÜX>í •]§&ò pØ=Âëgé•'@oýUÓw ”÷$T—BXæ0l}ÖÌÆ V\X*.ü$ªõª‰0Ún öü!=‚²QËË~°ºX˜H#ëé +3Æ§½ÆÓNHfLèú6ÅËڋ+¸âłîÔYh§ëŠÉ" ½m.Ð= w¬ ð:¦d‰¾3¹årV¬ãÊ¡ßt(^ŒƒÙ´­¨û+&„<ý7ô)Ë셔h 6î¦)]x¤?׬¥`JIº'W¶‰Å;À¯wÜÈÝ7ˆÓçJu‹—œ³5‚RD'ZäçN—ßu$4‰ºÉðñ=FpZçXæî0®€øPI÷§þÎUyŒÿ£ðdq²³wïˆâù ╷s€Þ=­<\ö M„Bƒþ£ì—4B€ø•Ñ¡Îmš.xQgýó3ÉàÄT«—«ãŠÃø£«r2 —\¦Y+S®ßã²ìÔ$Ÿ•îól"¯J+æBú)?yšÓI|JOڒ Ä G¯ +e~Yæg2ºV†ö9œVdO±årÜg³H9u­ü°†9U0œñ‘r”]x|‚Œµò}ÈL„ƒÅ àN>Ç4jÿâúCû¡ô…Ã×pI¸¤ŒQSŠœz!G /r²LyÆéH„: [Ö¸Ú4X¶ŸÎØØPe8+8(_8)d½ñ° )PÊ0D„6ã\P¸ð_ àñ¨-ò!+z†E;*¼D­˜%Ú³LhXNM6· %‚üًÀë'ö·,¡¤&fã·D'ì®ö.°d¶o‘ŽC ÃdéÑI[{oR´ÄQöQFÕÇ;ÒÍfb¥hp+ì„PêãÃ"a”‘«ˆŽ–j‚*R‚óX՟ÜÖ3åþ1´VÑR/÷Xbßò)/f0Kp­:Wš¨‡òƒ ¾•õDEPŠZï-9=ä´93aùÑîFk£ÆC¥0A ¼ŸÖµÚM¾£ Xgޝ~Qï÷ßMøˆ¥Ês(”} E¿?FjCý{Ÿ\¬'ÄÛüuïåC”FÏøˆüD×Ûý‚ú<óT¸ùŽ?¡Ãæ>AÐ‹À…Òp-pÐ#ËJå˜ü—#Vú/8å*…2tß,…×eØçbÖÂmõ$îú)'e´rós hB® gÙ\ü: kÞâ®t7<$ô™Øó£VÇ8hċ›}ž6fôÆühC`úÙ¼†­ß.7ØNùø`è\;}þ3úÒÖ0àéÿ¨ÖќÔ[ѱø’Ö1 OñGª‘â¾4ø*7 >´ô·Çã'Ñ ŸÔg·ÈKXÐ9ÑçB3àé6㢹.,´ ñ +BÛ­°ôb)“ZãÓ®HìŸíªNŠN™Ù_GzúUï"¦\´Ä©v1e¢QÛÖ*B¤ èxœØáéø¤ð××ø³/¸D3—Ë B%ܱ¼Ú– + ý&ñ³‰VVh÷½&òq RoϽÄE„“Zq o÷MfÄG¤±î"Až™¾ÛÜD‘­ÈÞÖÁýñIšß:k|é­ßÍn\Öäoåö:>mó™B]ò-%Ç.Öh`IKX(9ä…Wâ,¯Žâ†a}'‡Ñ*'š!%gÄ n\ ,*Wkõв‘©"¥5‡ÁÙIÊ0Í7Ç«H¤¨¬ZÉÒH=_N# +MPgÿôeƒ†7 +Ḡ+@Kw>uøfUºC +ÄÊOR À‡«Úkeeƒ¯…œyXž6qçþã‹O¤°AH^¹Ø?şìUi&Û3®¬.Q%ÿQêÀÏð¥7‘t ë9ê U jØã­yøÑž1Iæ¾À§×¦€ eî@F㈔k3ÈI ÃùLÕçªg3ÑØ=xÎÚG-ý»ßüœ#ÿ=‡ÃÂ?Õ°üÜ#þهé''ý;däþm„2r‚-ðýb'á  Åá“ù˜uø¥‚K×#Å''äh|ùäÿ˅,xëò›¯œI×LÿG‡p +m/žßií¯gá,€Ï‰WJCEî)«í=zA½GŽÞ£ÌœK„£´g¦Èáܵ‚!™åuVJo­¬håu¼ôfO{ßå1PÒTW»Ò%XïHÍaÚæTë#9'é[͞(¿™ÚMÀQ~“ip&À0Í:|ˆÒNÍùµ^Åk#€}³ë”£5+T£5$¬äö ð6zç-_ÔXÕÙ¯]¬›Kr`ÔëzŸA½OŽÞ§Ì0TŒg)Õ@©ó]¥êáY¬¿æPRŒéy¬c—ö\IÆ,Bf~31,…yx9™2²¼hÝõ(Ýî¼»5™ 6Îòàùý¾Ûp.®F©ÆÆf +•Tªø'†©saQÿÁXč8ä`@›Óª{¢ªWqͺ_›HÊk<€²ƒ+ó˜:â2Ëtöä¿8>%°B×xWÄ`ïÓmAë…SU­¼æt]KÿÞ'|þÜíPã½}õG¿„ŒtÕúd$:Ε „ÚîPY‹(é«ÞAµÞïÇÚÇãr,#•ïvÕ÷†xžñSÿ¡:×ãѱ÷Ô,âùs&5ýfzü; +m'îqÈqYo—„GîèF £Ù'ÝÌ3¶k¹ˆm ŠBޚ+‹¾OÏyaß'¼á`Koÿ¢® ½IC„ßÊ!ò_÷!þʓü„#]±âÞÙ$Æýçygyòf8?z<³¼ýÓ\NÚàý­Õó8Æà¤‹ÝË9J›ý›”OÑÙQõ½ˆT¤‹¤‹s‘dû#¸'î•mÄ'È*ChRD lÃì[©±nêà»HM˜²2©€­4ma²š…E%rþŸ9ûTýP‚Y/ŸQ<†|‚®k®;$ -onÒqôÜ|#õ~ _˜€{³õZy7¼9LDd¸Të§ë`w¾¡úÄôî9SqÛ¤Tå ‚T¡ïÒ$ëÆ^¾JØsª[`ýºØsà [`°æÁ0¶À89¥°æÀ5œ"³€ô–C˜ +“u%ê”BÀmú.&È¥ÜætB¸=̽æÒ«xÆ îï™ ßy/~a{ +÷’£*”w)$Õþ¡Gڍ$= #ìp×sx‘éA܉¬žcbÀùÑ?™áQx£>‰ù:qGûbü;‹‚x5îËÖYØÍkjô+[X#ZÛZ²µ¶¹}kmy­ùóù&·°aZÚÄÖö1­¶Kk[lÍòoË5ÿÌ5¿4×û#[óó×V¶Úÿèߢkÿ¤k~™¯öf·êÿµ5¿Ukm´Ukm¹°}Á­îMƒ¦kv†Á÷F·jlvk€Ø>ðÖýhÑ±?! +ä"£J2ÎzôŸ˜‡žbþ…lÕN$3>D¾Qÿßçþ“÷˜—~ÿ‘I¯Ý-øx þBßÍÀoïþžV¶¿&¶½©#HÕ§à7„åápú!Ì ñ–qx û•œž~Ýd.ÏYÇà7øË.¸ ÿ)gçà7õK9E&¿’RIȍíå†^†}@Gƒíh*>r¼¢¯ÚÑÿH!.Ë#ºõ~ﶚÐm¤y¬mÞCö;Oey³­úÊ<¿ëÜG«·ü²ê}Aäµ`ãçË9ûWÏjgÖÛüކ!· +1 }·Ü»éü™YN!a¼ˆVªæ4±Ÿù–ÔÜL-ª½ßÇÈpƒ³Wývéÿùç>ýíº|ùå· BÃ`øŽ¤ýawãj[ãíÓҜܧè8¦å]µÚ +ÙI´Å3ÓGâšì¼b›Ô¿œ$FkÓ ùS`A¢æ¶”1næ]- èÌÑ- çœÁ«n9,+9Õá p7 G†CåV…;Å=½Õ,UÄû©%[v°hæ`Îý Í @i¥`ÏK‹XRJ «³bÖÁºçãÇk7‘ãûñd€*{ჿ« +²yÐËa‡À+š,(!!fÛ¡ÌɶŸˆ N³|ØÃ€î_±£ùphsÒÏîd«æl¡õ•žÚ[=.üdQ›“’c©Óúë­Á^恮 ­Ía÷NÂkL"”×¾5õ¥Ê»‰ßŠmK®SÉ)#*ÐyZàæó‡hǯœ ¶|¡£æÌm:WÇml î뉷‰¦ NŽj ÙµmG‚á3Ҍ'WWóGnDq$ Ú c`#zÿâab˜ÑFB‡ÄºjÜ Öeš¿µü*¬kqî¹’;”Cg¥´g¥ö  Kt½lUoYNk½ ±éšÃîš1È6î ÙÄ‚³±<øò¦Á{€ ÷™ž-mNpUhû†£ídBùÄy ¹Åd¤Ù*FìSttû[¯„Vîä&-Vµ—„ÄzÚa]מÑh ÿè›S «·û§´Yçoh£ÍÿÉ=¢¨;¨Ž’Uc•rû$»Ã7ÈÏZ˜›¥¨É¡ëÙv2N@ým5° mOZÒgiOb#ÉÜIÞx>}S|‰Þ6§ôñI{MÍðY®ø$?QÑé½mOÃÅ.ö\S’–Þ¯pÄ×]Ì H¤à]¸oW¶bÝôäœP®z¦ÑþÀií)ßÀP·¤«Ý·9kJ«!ltâ)YG퉻·WvwÿÄHEkx¨ÁGxÊPqÌ%g2éÍ\äj™—w£Œó“ôz_MÃ̟9uñæí«jÐVÚ/›hµ¤€µd +I!UWÊ +«V°²µ©`'ß¿ßßÿ}™$˜•jžõÝòúßo/7yîžô7zÑßs›Îo9½ èïSݍç7z{ÐÞ¦þ÷¹»ËÚÞ·½Íæô7›ÙÞñOv’]u¶ÆÑy)·âw¬‡q^гPI %ÔÒS»^íMdhM‚(¼z }ôÇC¥$ lÅÎá´juÈ΍CÜ囀 £&áó¡–PœŒ|Ô fʐl?®qxCŸlÊëï%}ËB•øl7[t^/‹À×{Qî%l‘¨\¬4qW1 ”ƾ(ö<Å}Vÿ_wÇ|cE÷¯:'ÿ­küÇk ëº™Þc°“êù×½«þÿî«/ÒtÜçI®ˆòÈ‚óâqùû>÷ԛñù?’øozÊ_W)ãk •½mûèÓ·Ãi½6mK!ÿ×pNê_Ü~Hñ×>ÿòyüš õÂ~ˋ›ºIÓ^”0›õµ»Ã‹™±ûõµ»É²ØQºçq!û]À^‹› Î]÷³Jïžå̈L˜wÈÿaYؤ•¢º·I%ã“VF·²ìMÜ!¬ìðU%ªnáóÅçÖ;°DrÿFr.?´ô8 ¯ä¯W bn¬ôWÂ2£ó¯U8{%&ã×À Œÿ}¿¯î¯åÊ¿x´§B@‚›U´yEd +Æ^¹É'åKDÔÖYQÕ9IÒ¸}z¼®½U알8<6‡Ÿ–¬Xcº™qpÑö •ÞŒE,,<¯Vy¦ÿ µ a ûìál73Ç`÷êè \™nÊÅd0WhfÎlû¹Þ•_%µáˆ+AÂð˜•Þ×uː·‚b li5­ô0*ú@e +|òu÷û÷M@yµ|Ÿˆê è2^LîO­Û +ìG´†¥‚)ZùŸÖ¸ä>Bg„jõm†Bo¨ø!³ãËEjgloä³ãË"¥æ*Éæ+hó¶.ü6®6ŽÜX;H-¥‚Bp‚Ú\$[eÿs¸¨AmÎï_< ëOÂx´É4¡<$è‡9‚ž|܃o*pŸà">O–8L‰Âc ¼]êÎÈûPœ'Rnpñ"lwCt\–¸³ç8À”–œ’%Ã]ô%>0“ûW³¿ î9=¿ö7¿Ø†ûø}´7ßÃúí?Êäü.YŸÛ=.¿êv½§¥ö>Oá·wÝü­'q¾}s‘‹y]âܾ3š ÿY Cžã½T +y¶poÎÌ¿Älëù~kM +“ËíýæOù|Ÿ{ãÃÄ%oÞ_³P?tââO†\ÚüÃGŠŽêÉ×ÛñÝÂMê0púÀ>—Û092fŒÿüiÂÁ¡Ì®ð~ÎãÏVƒÎl­àžs¤Wz­Â£¬5úìÔf@Ÿç‡Cîáø<$ÝëjÒ‡³º$«ŠJa4lÿ ǃǂm­ãË)¥Ž8³O÷` É\¨3°Èޯ˵¥[Ñ¥[¶éU[ѵëófš…{Q*D™mÍ­E轛¾h,W{!sŒnè¬:ž9âÖ¶ÂÍ÷™^ â-`ü«wyw~l{˜?6h_Ëúûäô=˜09ºZ/ÇQ§sEo_”Ý4v¶Çoöˆèü÷8üýºš_¢[ù–Ô€©ØU_p{s¼5^‚š^HÉxÕ-è]M2«~‡vA“Ê’¡íÉ)¥üô_”·x¶ˆ(!³VÁ0M¦Ö¸ë{—5㝶* !=¡¶tpÑîO§09âpÙ@TÆ ;ï&n—(÷÷ ¿}.,l&µ‹úÒÉTE»ÄáÇ+‡h®*Ã]E±Rb®Žå|’eT£ õw®›;À2ÇCbðÊÓè'Jû ¹Bªr‹£4:VR:~µ1]9kÇΰþäÛGh,ÕùÆ^hgýJÂ6³bwùç¬ÛÇ îI„]w>3Å­|“¶yD/äîÆq+ÂØ¶†9?¡8^‹7^¥ÁÖ£ LÝÔØŠýtdL]ꧦÌM¡À1vŸì#ŽêÒe-Aj•u + ›#îEÿµ° /lŸÜ&§W,\Gn‚±Q+yy‘^›l] óï[eœÀÏî±µ¶ÜÊù0nžÑ<„­«µ£í±ã²a+ƒMn¦6=ä•ò­©š#Ýþî7CçºZAݍFՌª‚NX‰wÂb·„>º’St/Œ‚§ò‰ÂEPr{·Ýé®à„Ñ5t‰kÄãŠ0Xã›ËB㑸šw(h¬ÎïFÚºÔ®ñ»@E°ŽŽ–¬4_ôPXl;<K¼§C +á‡RËáÔÝ%*Ãå1^^´YõÚôª©àºi^á¬d +fÐ)“uš5Ô™Uÿ|rÿü é#Ps}{Œ^~7»B ‰ÆÖíþIr=ñJ¾ÇÕTbU ûp‘®/?Qúýv³©WkSu;‘_%[÷âuEbŽsÆyDøbž{hê £:ˆ$Wøö¦‘{u¢1Ó½áøƒã}}J›XH¡b=TË7çê‹mÁõRõ§!s4Åx‚rèXÄð†|h ¨ÁÒºù¸¸3 +¤•6X—Oϊn¥wë€2‚¿x€(“¡ºTÒˆhÕ¬Å"É#?Ù\ÒBÌL« +§Õt¿fk/°¦-yæ EûÜ"–* å£Îæx¿-ÊÀÅWRÁø1¶ÒªÀéS/ ƒ¸9øÕkÕMÃJªzH*´^-ªÿöÎàô²«ÿøêX<ÞßmŸßȅ (Ô+ãóQ.wYWF†n_Ú\/å +L?7m‡<¯U«F'¡ ]ÅÝüåÂÿ¾=ÛúìY¥#4ÔÒØJ½Ÿ^|Ò&M¤~Ú͒”TØgt >~Tµà€ù‚Ì›_éwіd@|õrÈ?[€ >q§ú¥ü‘µV` Ëü¶ Su@í¯æ{úcóï}× +Ì2QýÀ²–‘c)km˜¢TÓlPìqʑ3B<Èg›çµ€Ì§(¼ïÙ_҄%?| QþΣé)¬÷þ€vdâCçd"C©keXdé£LoP9«p¥÷´[‰å4Åe$H–®ä_h½Õ4¡½›ÔIضj$ä0HÃ[§°ÉŽÁ•1nÐPŽ*'¼J÷ Jäl GÒ‚à°Å¾Ñ~J¥4¦®©È xIÉ?2„óAÚ·eëM¾±^ü¦/.?Ž7ïñ¹:¦'6OF»Éã=C»BàZ€ºxŒ—I +Ö 8ëÑÒ¬¹I’ŠÎ“6`Žž$yUº¼PÑåa©ÞNÜY!guÜP3ÒMƒñC8÷M!ô”WT1%»jy\|H-Þé€ +cf ]!™Ó¨[=ÛШ̧|ô,3ǘWæbA59.m˜#ãÙ¼Ÿ½wB\pã-P/¨Jè +˜ÇÁÈ(”Lcó^d3-Ôꂚ¦æ¡vø«NªÞ¨'å“Ó`!—.6ºz"³ a›ðWõwÓüWLdWˆjuiäÂX8ù)XwyµÒÌ,~~r>”3áw&-t$í¹8lÝ0jÛuÛüÔÓ YÆò§h,f¬'Ð RQºš¥Yóæô'üC³,¿Á0˕ÆC ÙÈw¬oPõ$Bñ°ý ws÷¿°níý} ·û÷”Kú/¤Ü“L™r{w=ØP‡²tÿcBIìYýÍ +šLñޞÿ0LF†K#V°s5Gu2©ég…ðZ޾£¸ä®T]b9ªpÁ¥´•R¯g]ø[‹&ysr£ÙQx`†™X³  蔴yŠ×‘d=¤tyP¢'!ú¤ŸòËÞ¹À¬”ÞӃ¥÷ˆbèݸ$͓Fx7(oöPšɚِÀÕ;ZP΢âÍ ™;7:¾#b¦wNH%2 +9 rg&_D¬¼¼0È"Zš>מ“2«*|ÁU•EZ_ü÷–x²aÖîÕ +±nÅ[–ô¡IãìIAȧG\ÌMf´z³¼W•Q÷¿Hkÿ{. +ßþïFè?g£|¬µç£`aíøžÊK{^Ð·Ñ»¡ß4 lÉÖ@0÷,<·4ò‰]VqÔ*=馻ŬÛµUmMx¡ùŽMw¹RWŠ,nx.í¼«v^¸û`Ñ=oÀf`ÃN^ÖåÆûòÀw·Åâ‡n'à`=4´œJî‹_l†J ®Ø÷ጠ+Ì-²,ˊÊøˆ²‡/3[W”YM^r‰|! ÷nÕÞh)´_0×10qª,¥Žvr—Mµ ã. cL:ÌÿM=¤Îßý¸.åïæ¿Ç‚÷È­Á©Ð!1”n‹4âZR(xPžé(`ZRÊ· òùšÜ/"ê'‚9ÉSíl]5ƒÍ–ljIŒÜº ×j.³æ„bÇ÷",¡¦ÐOŽø®K—"ïn/‰×õÎû––ºNî*ïÃX•„uD +¯Շ‰Ì_÷Zì\E[cÐWPO¯ZÀšÄ_’¸^È jÁùEÕ¹u³Zû¨Ýœê3³7ÚÆ¹-WNÌdø“« ¨â —ýî ½ÁîÁ"º°~3 åÈ<üВ(SçÆ¶ôi5×ì$ú_T·ë8Hä"$ó¤åzҝ¡ufÖuÓۚY65͗W&4ýõOÄ všÙ¸4˜âyâÏ<"EÏ= ‰“ùe­€v%8ÃG×aú¼=ùø³!ÎB÷ˆHP“²Þ! UBO_¼eI}ñ0Ƥ?Wzː‹RWò¹K½Y¯ŠHêìNë¤pTßÿóºûŸù›çÏüAwÿvödüO2{Ç@])ücã5‚M'ƒ»f÷IÞ>X?¯¿¯”OÛß×ù­¿×¿¯ë›3¿¯ÿ fwõæO%ÿ°. +Í2Ôé‹mÂL‡dðg|Èw’m2‹!þÄÈwxÝy2í=2GL“¿s'¸‘´ÙÆÖ——M¿ _ûë"ÇwdL÷é†nÐÒïüφ-ý„»/ìEú˱*`“á3]Ýúë‡öȎ頋ޠ·2f°9T§²ò‰Oc—ñó—§ûì6?ò-ߥãûãBqìôl?XÊlïhš¬Wõ [ê¬TCïJþ‰loù%¿Ò%LçMþÙoí2ßݙ±RîÜ^Ê(RÅãFâ .ø¼ WWÇã%Õ¿ûØÇ)“JÐ.Þ\÷æ®5'bšÏÎ'ãC"•¿G#Ãàõþ»ÝðÝY߁Áⶑþî XÍ,Æe¶éHþþ ¢:Bü÷´lï‘ÕèßpßûÞ5 ¢ËÆ>º>ï[«»¢OÁ±€î!ؚ}_Òîãêv—Û.È~‹å%¬,ø`ÆçR$öqØN€™ÐÉZÉ5å}”š& +Õ%²º˜1-š_«V²PKe8²Þý±Ór¢[+Ŗö"›_ ° á³Â%Ͷ%,á›ÔRó◟âÒüÀ¥Û+Y %²Yht ÍC%`Î+Y€/Uœµ™ÙͼÀÍÒ蕋cH­d¹û /±ºÄæ*ýST¯lN¼G Åܜc;ÅÑÆCÚÌï×õ2ö³D‘k"\ -´7Ë”û…ßP Œé¡¿®6$Ë+#4øYhÂtRzۓ4¦Uãc‹c‹l™¸±ñô–¿ +×Ò(€åïÖxØDpA²Ó½%·t€ëö‡¯ + æØÚT¶Õál,¡¡ºJû?ÃOÒÐÕæŸGÉèIVâÝÛ°@ƒ==EýTÔcW~¢(ðºæ¡?×y€E§£ÚíÂÜÍËSZýá¹&ÿÁ†}ZóòbjBCîäëÓ-éG“©CçY» +(h¹j†¾ñ¼jWô\qj^õèÉ#,“Ž6oɎ>o„¿ÿæHŽuP:+e9@ %c &jÐrI1cHIL¿‡÷ÜЋBUЀ¹Ì<·ƒU°¸¾dÚ®¶©ì£A•Ïí›jžÜãeé¿°/ӆ +—ñÁRþå§õêó™vHÊiø`ó¿°¿ÿä߃Îÿ\ÓôêóÆN¯9öZ±G»iþýc~!üú°÷×ÇÎø/ý½P¶5Dâè“qtÒÿâëjÿÚb¥lX²È®â7ñ¸ÒÕ6×ø?«¹s÷kÜü¯Í—å?ƒãè#œxxT­ûËðtÕøØÏËÐð¸å~œöºÂsQØÍ§)ÕòY,Øëéü†¼:#Š…ƒÇ÷?…þðS÷ãŽÊ§“Ó›û†Þo…ýúVû>9§ïÇ{:VâɃ‡¨?c÷ëi[Ú!üZí=§ñs%Éi„CÔKá/Ýo¾†è»–®¸ßA/‘Á¥zYª³ þC´<îñ/ßo0ID.1 óaÁÒRyJU«5® +]"$܄µD-Ç éµD»ê™Dª$ßTÊ¥Qú¥F¯pL–bÿÏ»eéÚèÂ[žpñŽÇå÷J [mß7‹¨–R­¶&ixš|…ceÿC¼x$Yób6Šö6£‘%ü$§mVÑíçùê<¿Y‚ÚöÄ%Åd®{Õ-ÃKSÖÀÀ Ž8-u`íñ܎ºg䥅“¬¹þnÙ0è‹EepiãX5  :%cˆ<µVç›n¥_t‡öHËjíÚÞS܍;˜&¨ž”«yðÐ ª°˜RöÕ¶¼„r¼twY `²êü¨xWÃr=ƒ%¨ê×ò&Éwe9ŠR¬8TÉ(ðÕëŒv7 ál³¤Ï;7˓Ñy]He¥l°?U˜³F¿ÐeãáG.eØñtŸ˜é§„¥^[áB0ºˆ·¹»]ófH<$óóaºOúù^÷üBŸŸ‡Äd$œ5´”ZŽf—vÛÄi]ƒw¨×êà@H6‘fR§!4v_zE—süñJâºÊn07ŒéôIˆUdöÁ -%Wš”’h|א·…È@r¦»+å>Ù>}ÌȲÕk%¢0œï\.Hw¥“*ó`¿Ø9‹Œ£ì +8ƒ<¡_¸ޜ>˜×aVÃ&]֌rbbøY«ë“€æJs8Ѧ˜¹R€1ќºãiáàö R“uE„8 2u:Üi[Ì äw3þ8ÏbPFeþ «cÖÓêŠ +} ì® ´]ÉAHO&ÈÇ[×w…@p]¨‚îkÊ ‘8 á@úÞÿfPFÎI¿^wŒPX³‚#­¹óJ +…«=Kš=¦ž¦³›è º\’HBë;¬Ë:‡Íòø(·„©òKÊ*²¾þ¬}VT|»òé€ë!U•æÐ +hðò™I¹Èƒ¿p[̟s™/…Š9¤\B4 ,:{i’ ºÍêQ‰v{ÔdO©µG…Ì/ˆÓq¢Z†01Ñ.ºÕJ~͈ÊÁ/Y&,“ ŒÞNÌu7ìJUY®6ÉyÝì™zAZÀdv§/0a#O‘™g»J­Sc=5{°Ks:ۋ“pü£SjTøŠå*íáe:7Y­­é«<_ì-P3H¼F±ºéÜᾝ줔·o~{êkši¨YJ¨U²C¢©—"ÏkáÊÉYX›ÔcÍ1L¹…ÑrPäNó^;4qà <‡t„ ? PLð‘áŸu À0ST+ç›D\eÄϑ1 ­aÙy@ˆ€åbÇÈÿìՋNºcý*_E1üÊ_Öq•7Pfr ë)ûنu”Â2¼€þPßD+]/ÂÖ/˜˜áëï%âëíåÿÕ«¿ís=8ã÷ "öeMcœ,Š•o0±äeH”V®”£µ^Š8 cT'8UèJjùÒÒnj8»0B~øÓ Õ:°~MÑÚú ¸k±¥`²øXö^:åzçõµÚÁ|Š’—c +ªFä 0Õ·L’Òéº( ­ƒQI¹s…“h÷—¬ŽV˜,r¢Pýì9ªÍ¶ ±GÍ;kgm嗚©ÎJ8 ²É©V÷ ¿Å}9âÉèÛÞW¯ÃÒïÒf¢´ÍÕmüBg›ŒShÁӊeƒù\ëÁpeåð€?Ûäý/÷/=k8n—“r8‹j/¨œ§ÈwNDsÙz®¬¼$搵Þ<ÒHhã§ÀÇMEHiwÎ''t±õq…þ’GŒúwÿû};ü¬‡ýŸNÿÎOþ§¥mÿ7Ó¿ê#½wÓ¿þ(î3éß²ãáþ:ïÜaÿøãøŽ0ÿ™â8Ãø63û÷ÿ~ãþ,wÆûxî#Œ?è㸎0ÿÏGqaü½ûŒ?‹6)~ãáãiïÜaü=g}ûŒ?€Ÿ¿q‡ð=>·î0ÿ†â8Ãøî÷î0þ®žýÆÃÑ7ß¸Ãøe;÷ʧÄq‡ñÕïÜaü?†ÝóŒ?‡kO¾q‡þݵی?é›]¸ÃÿBÚíÆýók·>ý¤:Q0þ`ŠÇÿL/~ãî ï†xÎ0ÿ~ãø¶W¶/ÆÿQ[‰û|\ü]»þ%+4ìàFS9ñ:|ßKšÎÒÃhþ3èÿñœÿÎ ì[ѶI(î],s†Ùø°YxæâÁg—WýA¸NÆùÏõq‡a™ýt¥ñßY)v¡£s6þN¿43âïjâïjbïwwà?_{½Ç‹¿W‹Åù~NÇÀì<ÿʯk«é:Gršß ŠßIüoëî°í/Œ—FCsÎJ°Ãéã¯àâæ»(çÖ+§~niýoçÊt<.)_~þiñŸ ë¸ÌtzM%/kW#€QßÕøœœƒÀéÌ e™ðßßÅGÎCêëvøoŠÃ~ýþ¼Üâ8¨ùÏg¯µ3ž÷-ü;ï_§)ؙÛwžÿ_×éÊz£;wr€q=}¿×`©‹ÃœÅ­@zɋτþɬy¾C1NVO¡BKƒyÜ/{ÚÑ >ÒˌBß̳[ĵßæåiÚkxõV[´-Òdð¢¼Mîɐ`™SÝ¡<ÏÒw3‘)åéÎÐ×d9n€C“é¯Iùƒ L,W™ ;2VÔvkájÞ$ÝÎ +CTt‡Ù½¤5Q)˜t‚ÅH})¬q Àã|åÉê' Fìláu‚Á~Ui<ÂÜâéýА Àp¥Å2SCOxV³ø"¡å…˜‰C·ýÔ?‘6T<¸¡ÛÄ¡ç¿u֝0({:‡÷Pïs5O¡"Κ_Þ% NRž*ðVpQåÉé*72F•b*|¢…ª>7ò+S]·˜‚<{1kûe¼Á^{d!˜öÊÂh½²ãf¾@gL …É1†(ÅT š­Œû"°WW76kú̇èD¬¿;¾`-› +}ÎÁ»ÙœùQ%½ÙÛ̱ ž +X’NAb¥å"EâN/Ä\ÌH¹‹Â±º›‡è·Þ“tȨ‚=ôüÙ]×'Ê%¹pÕ³¨UDóúúušTGbw„Ê /ì[S†G“h¿¼ k:f Î"F@HUR¤®÷×õKM6[ÞuŸÎ)w tãxK§c2„´}ZX‚ÿlåð(~ÉÒXbjk+‡8 èî½ààìUÕ£œ3ú %çGj)´«ì’Û<É^¬m-kÜI-q{EµîÚëèê¤ÒW•²{€…FÐy”ÖI¤¶ÓKd%'`“…}΅Q­X7½êUÍV\·SJ,Ša5¬ß|83bç{t×/qÊUì-àÎýlz7¶l™)Wm4ÂÁg¹³Ñègên#RK9bãr +5NÐ2ã{E{â.úð× Öf' \èvԓÍ•}Ö4|ÓÑÁҗ€ Πí$bîáÒÏC'©Õ€ñȋ·F§Î÷O‘ëÈ¿S¿?dpôbð~'¶û¤SŽÂ•֝`©U¥K;\E€› (µÔðN!J³ý†VØre€„„ªw¸„»¸nHÏIÅWkÐ\Rƒ?„éºÛJz5¤ðÊâù8ŒÕ¢øs'‡¬ß‡§"ê–Òóí ŸG!tI_ç¼¾y=B£qè²Ó +k»aËr`aê„_(ö‰4£Y´ò/1–#h^~ö›„.n1…ÌA0©±H„¨5"K€ÿçÇ-öóº]ñã‘VŸ¯žôÜ,n½ÜxÆán©ª1ZÞ]|WÂy!€Ïì\/ƒ%âf +Ó¾f +Ž ä.â3|Y'ãûfÞÅfª Xyk{ÔSÔ´¤é£8ð?¤øßBªš…Ì-H϶ŒZÈØ0”UÂU…Ü%¨Q,Nð¾r;„· ú7å*ƒ-êa(½¿±jªOùQjyBT“Ñüânè&’¶‘cÆB8ž|æÉÌ.«­*K>ц¡.‰¬wšªk¾ÈìђÌx'Uªê·¥>¤„^ O¦’8!›5` +$/ìc؀X¿LԈz'9s§‡yŒÂ±àÁ¯+ò F¦X–¯Sù ÔG:í .ŒÎýÂkÁ ô9â%“ú¸ú%ÙË%±ùŠzrz:Åþ6 #)ƒ*óŸÔ/XT8pSaٍ_ïOAD=(:«x«Í·¬vn{Z™ª"¬‹Úá$º¥åžíŠˆAžœÆâX¦*ÄwhyÚ·^c¾˜DÄAÝL{ó˜ù31 ‰²qƒ>û¢êæVlâO^sä8ú÷㦲ìW˜uóè֎¶z0Ñ`–ôÇ-êE?T³rú|éÎRþÉÆ7ð@€Üþ†yö*öøæqüçjœî„§xäT²C“‡€p`Œ"j‘ã³£ó /” “U:eLгLø„õšS¾x'ùèžÆ¤zQþ »Ƙ"—‰Ÿds?·.J&ó^k(¼§´—E8 `RµéËtÄ|ùË-˜}<ñ%7;5þå#•™C/BtLPƒÎsüqÏé?tSÿ}._z1ËÎ]ç07GZ<¥ˆj€œ|ÿP‘‚¬êgX¯éô©P>©t·ÿP JæK"½•f½ÖöÂX½yæŠu®–ºÃÈ9£žölOy¦gµ'=‚UZØâыМôh™ú¡2Œ¤šù˜ãFk2Å<ìäόŽßo>Øž½$.‹â¹B-Áܸhùìjÿ˜úŒÞ6·³bá;6Èð¹eü§+,Yú[)yQÊ/6ž|ÌÙöþmâ·9´|I³tVe<ëžu›ùç^‰ä„IäóÙ8´¡š Q¿ ¾()(*§M75Ω¹®ž{#¹®nõ=Ír(}[4>¯C¨ŠJ5Œ¨“UÿßgIܖÂ,«Q“7³¤ÒèTI[2 0 jbÙ}¼©jâøillց֯ô\²}ê„&Öz¢í«ýYåÅ+b‡J?_2u{„$þöMÙ¦²çMQŦ²÷Tך]F¦t=²«s1ã«I—NøÅY½è•¢³{(ü÷(m‹€.ª~|:ùM¶6É fMòøÔ÷\:˾ˆ_æèXÆ­«òr-¶úÓF8âќ¤:25z26Ù׉ŸÉqhŸ>H#ÂÓN î`h$añĉ|Y±ªÞÉ0XŠÃ¨Í„©ƒ¥å’{7N±ebùû¡uá~-<ãӘ†¸;[áöú39à,ŸÐ”FA³EóÆÎHýV‚ˆ*€o¦…ã_Ûܤ5­ôb¹?§rPý¸Å§¹tX Æ=绉1×"EO è_U“Æ)¬²ŸŒå£O–bçd¿ÐáÆ@Ú¾,‡±ø B©D9ÔV!5k¤ªè'ãÇvmÎ`ÖOe&0«z²a>ô>«°Ö?7ړF3ž³> ® +G¤¾eÛy5žú¹8šÏz)8}uá[×TôLh£+My;Ñ +«s“Æ6{Ë ŽØ·~çûÆÙOîËÚé9¢ñÛCXöw|O ­¼hˆéJt_¬m“ûå:V@";…>֒]RÙIè –ý|Oï$çö®ùÁ­|ñêIpñ~~ëÀQWÃõƒ¢Y>–I¢ŸÑ–¾Ðòùë•R¢¯yT㮪›sFžŽ¸K(^鈻֎eà5 äcC褩õ§ÛÑôþ#FB¯/¬)jK…[ȬáÍù󛶼ŒçN3æœg!y‘I‘ >2Y!ºiÔáÊâ62Á|ë4V4b9»³H+‘§Aê\#ªÒ‚ÂH¹Äkà¦×Ré¢åz{S™‰nS›‰=S¸ADLˆ×©õ.‘¥]Ž#eSêeh +½ÞŸS‡Ü:EŠ­`ócl©û6!ðᖟ» Í©fPšfuñ>~£EV[z5éÊÊå Õóy( Œ™Ö/ùSH^lt„3>¤jPì1Í ­DeߛŒ4ÌDQÎÿèç3öq¿üç3ýg»³àó›2të|Érç,ï:ÒÙ +ß ¦Ÿ€F>Úñm‰ºÎó–:ÒÝs›´¾rò¿Sðn¤µ‘d¿ŽúK§‹%ó綠4Y-­ô—˜‹%ÛßIg®8Žº"â!ZñÞÔøtÎÎøý7 þ¶¥_è ‹RÑÀç…[Ó­œ—#W„.xgB\ðÎðÎ]ƒCµäÑÝ’&Z ªu³¸"™+ޛœø֟ÓAo€†?¨íÎ¾ó¿¼æüo7àÝM߀ËOv²[¶ÒFѵIY¶Q™HåÇDü<ü(Ó´ú'nbûj…ôgjël/)ϑùdƝó¥˜h.</ ‰õ=ø&ÚDÕ÷àžG +ý”ÞÕ©–[*jÎe«p +ô҆*Ê\»é•ò3¥¶nÜS9êâ¦1 ·ö¥V:…Ú²7±œ+P¯žûÖS*i¨ý7ØEYf2…âÚâË-“ î ¬ˆ×SÜÖTÕ %~c¹œàйgL̀ärùî2°Ú~Ýŗ¡fõlql +z¾u½÷ØûÏë°)ìÿºÀ§À§ª`SöL¿å`SâŽÁ™Öü6;6_ IÞ'½`Sú?ö°)ëÿ¾À§¾ ñ¸+ï{)wXá…\?ö9ÕW--—ü¶ß!éZÉW·Ì°Â䦲—Œä¤wª¼/þ6:õþþ%#÷æüÖü¿¯÷Ð]ÿºÁ¥ãX1ò”™ñ¤ÜÕÏ0¼§ãÝüþOÕí·ÙN1±¿ñh4²] Éî±ÿo¹´änìc";¼_ýÁ?ÃßsNú…\ÚrÀ\ßÊ¢lHð ˽ÎâyOž¾.`¶<«¿¿†nF¾ak‡ñ¶ÑE<rŸßûŽTmoyދ~ÆEjj˜X8»¦¯œð±7¾âZe|Ð Ñ!53@ŸÚR­*¬Rítx’÷Šlé 2ãã©öt´ž´ «,Jí«`ÿ˜}¶r®`+BÞs‰€€H€ euc0V?rn¸Kãœ?Á‘€pÿ ¡ã +³xÇïŽÖH‡çOß|þpÄÚuqšs^¹ú)Ãc#?.f9”:þ«lÅüîýÌÃGØu˜UÔüft¨7m}4hõxrÏ!+®Ÿ¼v%U¦3¸:Úé¦×åöŸ#—ÑŽuu¯Y6²¢ófÿå3œî†YKpÄ Š[±elÐ>õ2UºÊ)Îß_Œzkª¶Ð=¹-#;ñ}±âã£ñ,Ó©YxËCԋ+*ÓˋªT®Ü&š!N‚Û´…Ý6H/Þj°ëØ-оöˆ|jJ[º¡¼cf ¦: å½np€œûæžâªs…¢-…¡ ͦH¦„ÐX +¹rm¡žg°³ÇÒ¦låBt‹ž0&üLâÅN¼«sÞTU«-»dx?ìÖöPÊÆ=Ŗ¥,õ붅žŠæ·ÛzéýsÖ{g»?eèxõÿ_ó’ìQìI=tÏ͈Jv±Å‘_QWm«×+lõG–`pjûYG´{W®)-¢sjj|sc.ˑ¤¼F’â',¦§{I½F’ÝšŠÚæhöσ¬2Ë=£Øèon|³Ú;J©'¸íkÐÆK–õ\ÈRHQ1Àtð/h²5_œ:¿ûeЛݾ†XÖ.ҕó"Z¯ ¡³ã6œî¿_¿Sê4¾9¤nÁ¾P•ËݘRsHÝ-¿.ù³Ø¶h뿼¥£Ù‚ÝL¢•$ô°Ÿ˜‰é4«'±uR¥öÖ÷=†MûšüNsæ¶:¸»Äœ'L’—ú et,5Z÷Û³z,‹;k°gå±I®’T8²$$ùÕM^­|¸°èÓ×§t«ž˜€¸š 6§-PYWÐéŊJ°&ÜÎVÐPÔ<ײ…ñ…2{´Ü"¶¡º&+ ¨tŽ"¿uŽóßgÇã4?üP:£óï³ñÀw^²±ÊÑ)m.ÝKY«nRmؖ)â$× 9ž/vRP8ÕV' +žÇŽ õ‰}€Õ„®[R¦SÐ~à°×j;ٗi:µ”LQ ýØ}VYÞ¨]‡¶¥šã¹Ï + ‹„}ðƒ¹ÇvkÄÿ9u5®4ß|òåŽÄ» îÞí7/T.͗o˺ž¶w”Ý¿•z§éë¹ëXf¸Úœè”û ¨‹ìŒÙêOÈï¥W`ìîënï®R²æ[x3“¢¶ÂfQ_A= Q2©´õµzŽÉjp<âp±umF­Ü÷˜'yA©Çr18`õBӄÉÎ0ŠìFÖÊêíÖ/jîWl\'ÿžéàµ}…¦ íŸa¾•ï÷>P3óõLN¼÷>à¦S˜†è"bFà‰qIí±n¸ÝéïçzuÜi£¨‹¯9 ôq0¨Ü‚å*Óg¢[’1ƞ jºöƒ°ë¡µ€½ÑGµJÓ&ÚJ.¤¢N«º‡Híy±Á%?¼ÐÝ#µ²F ß3Üo’¹Îù…ÿé' +"(— +wa® z„º¯8°[H†^^ԓ¾†¿vmpûçåád©ÛN¡¼&\”yØoñôм:-éf.êyÃVhè¯_Aü“®€`ڎÑa°ºnžOkÿj¯gêA/ŒŠ&νãH¸æ". w êÑ +(­,öȤ"pvòõ³Z4æhãX€Ì³L8÷ELu È`¯2á àÎÒ\!„¿`%Q,÷ñíÜ#‚ðó«zãßfׄ§ï×Or„'Î)•S&k½ÂÐà“ÃÎ>橕è²yˆNºâ^&ö—r…„ßú²P”“E»~B_àk4SWë>VcŽôø\`T× ™NXL×Ǫ¹)ê4Ԁ¾±9ÏÞc냠{Y›æ* çNÉÊsWå0”]Ƴüèɽ8ð‡švFc³érÎ8`½–îj®™K†`5aSƒí Ueқä¡7«ö£8ë˜ë×{QœuÌuì=¥œo´úóûõœo¨úí½ÅŸ«Ìúæ–hÞ/‘rW¤þM‚XÐÆÝÍ+Ôº>³_PVer+6èkù¤ýwg¼^¹/è̀‹X.§þºUb1˜­üpòxöx…b Áù< [äŽüQ%…úèncy”sf–¼×LͰ¸s>~íF¾K…¼³€JõÏÞÒ 82ÁݽÇw„Š:^쒢=q³‹¥f߆žuq°8«^ÉÄfq[,5ïŒü)~å0úć3ÎSÍú÷ÆíÅß%mŠA£T]ñžôÆ©D¼M'÷ &Úì²^¿¦yz]`e?DóEPۓíEÅÌq}¨½Ã{ÿj.xÂóóKšQY5õã´þ|dÁך˜_Úµôß6j»Y…¿&lOÖuIOfþ,ºÉìÜ>*†ð6«VöðŸj]6†Y5¬kQÞïcŒÆPãèÌ×FÁ_š^Ks18ÌÔ~—æW†ÝnÂîSÌx]³ªXPÒ¥áñ£àU¶`F¥{TôI䠑wöŒ…i³æµ—-b3¬ÛŒiƒÒ¦iâ ÉDLJF;áBíW(›¿œå±BçMØç棷ÈõÊ øö) ÷d¶¹nވ”ïåï{z&ÜÏ¢4¥rcì}<ԅ÷ÔÅ"†5ÜU¨KtñätkÚþ;éÌÔLŒÍ?Û9¨ˆ2$®ÐIP.Y¦K®8_¥NÒÙýµû†)Ðg@m¡mÂsoXXÛi„ºÜDE,#Ñ?ª-(˜¶.Üx Xßùkز<÷4¶茘EÎ-u,qj³›@ ~n,Z3R¤{f +Fÿu1l] Ìi¿¹–]xXH›mŽ-Ö¦-\smr"™Éovû¢Éә dÕDˆU•Ö%ør°¥CSººô½--Î76,ŠòhWôJüXÞZ[? „zð$¾åOc;£ØÎéM\¯Ç¿QJÔ"œ°•ãle|¨ØÏ-Õ֖çÅaÀßlgÕø¶3ð$¾åVhT’ØÁùüŒªM7¨oYñPxöŸïe ¿ú#P¡ VÝ^÷]Ó\9ºW€¯²»<.¼ 1ï¡%GÊÙ×ÜÈvmXÜ«j¤ö¯iw-½VÖÓÖe³†¤÷ç À÷oe½gl“¾2 ¯Ö¨$èîà’¦AZ „£ùýiAHÓKZ?5úR„ϤC`ziHÏ Põ,Û,6j8f[0ûDð.øbž?ÑËË[¢f¥G.5ªú|kD¤:ÛµE<$ݲúLt1£õ¾Äu닐ŠV‰ø}JÉÖ¥åÁlQY>4ž`°ßì˜cž„}YÖ*»m@Cۚ˜Ô֌4Þa⭄M|æ!} ÍzÇD­hӋC)ùtÌZšÓ¯†òÐ]NKóñ\VïŠ(mVvòÅ̫ҹ´†l:õ  ]6—aÄҗ.ü&mÉñ¡ÊÖ3YV€µŠ­Ì.2Î,Q/x7¼)vP6ü¾;Zh-&Ô{ò1QÒœÓñ>mÉÃÑ:"lDåïMþšì„?ÓOΚóΊUnsœ¯æäãèã¢%¢FZC³!µéÖ7®y¡—ð½Y8]ÌÑê%o@^¢m²‘V”Xȱv‘T–ÕÒW´¢z˜]›-¦L³88 -Ë/v™Ÿô¹¬ŠÉÇØ7ý3 9 /~ í80àXíÜ^“Kq‡KOµDt¯UKSsµüREN™—OŽðÿ$F·ŽŒ)/¶1øí-Û&ÔñCOŒXåüTÿç–c!?ùÊ%åu-µ?ùù-WOóôM~DÿçöãBb´ùÿDhO˜Ó’ŸüÎÓ+¢kû­2¾OØ÷f÷1®ôûx×z}³Oý­Vr ™›ì'7ð™ñ¨&rÜ{¿|ÎEÏnÏþ·v½¿¿gý´ûçO»œK;ÇúŸ‰—çs¿$u»ïŠŸ*ø‹RnABc‘F¡ÊF¡ò.òÿ¶µïh,|…œß~ ñÓäßÀPÔmX8c…¿ù¤HmÂÏûè_æe³þJÎOãÐ|ø[lßw¡ñ¥}ýÆ~Ç®±œÐ¬${'æÞOÈÆóý^ +ýÐÆûÌMÿï¨ãžè:ÚùÞ>¾E ®C-IûÂ)òÉÿîNúr($R½Šÿï¡}ÿå¶bÇÃ(nr>v„Õö{— ²ÿÊ˱ë:¶#¶AäBë÷\¬»ànyn¸ŽÞE‰ÑïØ¥üT韚’í~wñÿ«ðf´Îø:¶Y˽#6Û¬'ÿ°ë݄ÌlŒ_Þ3ÿn{qÿ˜uìWÅÈŸæyXuì0?`­#Χ÷ȱHË#©àӑÔð|ª?'.åòríÕ&¼æ">¦¢u˜¿˜¤£ÙÌÂú H·E]×!ŒrBÕ4DM.‚gÝ*rÛ_gœŸ_› ZïGDU?ѯföºáóÊhƱx)Þ‘æ—´È,ÐÉPÓO¹Õ9DÒju-,{:Mˆÿ“1tQU¨fü:Xž ëi¥½3d (Ó%ì¸ñVîð huh~ƒë¼R3©‚<ëԐj‘WÎ +Μ?pÂTŸNHt1È`G¸§ôámfoªkW31®,.þÿUøæcTò ÇÕC~wè×ÒÜ3©Ðýlù|°„ +ªœ\wm{ٕÍá~ÓÖfX൮ÂÏ$zï»`Á`WîkŸ=ô$ìg¡ðX®ŒWúÐîØ¬þzqç¡Ê™ÁoæÓók£BY[ô°\CN%' +êê™UÁÃT¶'Ö$CA]Viš”WÏKiX*Þ][s4¿sËåþ|Ë + (ݚp:ç´mý'Ws™µ[÷á©D,mhnqÅçî•6{yzú¢±›!ç_¯!:!LÓ|rn<Að‡2­p%¶ßª†ëP•…¤§§&û‡ ´£#|R.njºKÄû/ÈäÁyK®ê¦hQÑs3úzè’íÇÍWsò€Lš±â…ÁÃéxk6Ä"ïÈVXÕI¿m1z€Ch:&5\&÷gñQ¸×÷oÁÛ¸QÖúAŒ€Û…zW€՞4aØX, (zx …ßyϕ`ÃåÖõZíÅdjÅå91f[]¡7ÌŝE,es?##Ã썧ò× Œê09H Àt¹­Úlß@“°Ý-¼K À»0¼wXóg#9s}¯>±ºýŸ’ÓB¬Ì\»‡Šï zºE]ÌÀ»Ò ‚\ à˜pÇ0éð®,B'·›.֚ËMÛdiDUºgéÒè6hºy§ä°H:pœ—ïNÕó–íÓöÏ·ç§/"}Ó` à>Ö\›$­;Ñ;ðâ«ĥ÷ÞˬX ÖB^íÑ,›kW).Å¿”Ûäc7ü«ÍÀñփ+ÖV¼¢ßìs–ÛÒýw_´{HVç•fr|z£M=¬°\.§¼H¼X?ž‡H•ëð.[ð.ü{WÏ%Zº~çw¨I‘ìô3¯+ôXÑÉNt]EMÇÍ®·§¥/šÙ"CJõƒTRÎÍxŽ_^¶+ß,JkGÄbù° “ŒììM˨6hýÿYwçÐ,ÞÎÉFò¼W‚³$……cÏ̇ƒö}Š$պųìüæõJ37ø#*÷ÖmoˆµšØ??ŠÕXWR`ì ™oÝäb»ÈîœÖlX©ݒm”8îþùXфÚ×*ì]£¼Ö|\@ýHüsãðN=òjñ¯\L"톝©1š”ëŸwcIRÉ´I€ö+ҏ@ã€P;v ^\;<%,â“lW’5õ‡]Åbeèíú2I•ýQd¥”¹D v07’gqRÆÌz¦jâ–S12®£ì’gô§­±?©eƒqö0 •ç\ÇW*xì¢R"bD)žÇO$qËÝÛ-…ŽŸ \RmFä²M‚»~čÌ`·ûE+5ìCNû78村~æ‘Æ¹Güò;ïþ§³]Ð_©õ†Iܘý<™Ä©bêó4~¥W®·a‡PmôíT)R³¡N—Ž¢•—t읆óh-¦…ÓO⋥ çÛX.“ÕFï‡ôŸ_ŠÁäå±ax N/jžWIƃoѺM“”Mhö¯»u?+ceuÕ_xàQdïè©û| ^3Ðôñ‹tÌÚ¦ïxטo…mq¿‚þØí<¹ÎÓìwûXøGoҁ¹Á¼fAqð·Ä´‚ñr1-2éìwCf·?c¿Á…{NG¼/J¨~Ü´ÉÖ)Hk†`$¸Û…n|J˓[ü ÷‡Xšp*êš"Ìü 5"U¼}9)¼ìÒ# }5†çQä»7p”á 0£âQÀ\Ç,m"”ä጗¶ xq‚/²Ï OVWf0Èë¨JÇò»1…&áaYǪÑvö¿1ƒGQô4˜¤è£é)Q¤™G‘ô™„i&“/I™´»™Fž\iúKM»cÒÓZ]ÍG4 d"Õù†Ï%ĕ¥_°A–85?Ul|k¨ƒI†¦Wf®\1óó˜4˜U †£¨¤L àò:Ti0hýe Ò`‘úu“Ó¸4˜~º(4€¹4:84Y`<ƒI0Õ,@°rði%ȸ•- ¹mék‡…Nù\¸¥WZf žsPYz2³.L\e€r2 „Åqµ.vׇâ¤&8Ù0y„0=ǁ«¨^‹ï#fn>±ÖMJ~ÓLþGq¤0¡ +—r¢®µÕòণÙ>ëT÷må3õ[‡p{ÑëIDQÞSeÚs9•~éúÐmG˜T,Aíø³“ƒðö>È[[Uë"V Å&m¼l P>^P)R6æ.XJ­ÄoSkç9ëÅÀyU™ õ ¨mu;Á v‡Ÿ6Gõ "ìCxÅå°<áe±å|±«çJ¯>5Óa롳‰úxï>FK&ÌßÀ¯Ë[Ÿ}¼¡/Nç^dO¬âÄ`“€ß z=uBQVݹ6L癣é ɉÍöÑá‰=†a–,ä1eþL§ P£­¢óÓ×ü>á´̘ô뷈ÏÝËSÖh©û +®ÿ‰'ãaÈ?OàÜ:Îڟ°]˜¡j¯5ÉŊ‰ÛÇÉÛÏ<Ÿõ }1ž„iE +î‹ âÉÜ«Úþ‹Ûd~æQûho¹$~æû—GïÜÅwE…UÛ]î۔«i§Üd¨dËÒ+'Cñ2L?ǂbÁóŒ:9³|9ëlށ¡±4†‹›/Ýôýí?iÎyÿž6(ûð£b¿åcñœ2<{é.FN·X#Ùý쾎ӈS±rX\§Â¹Ž×uò>&^÷ä€úÅN. Þ¥uíC¬§üÈŸþ +H?üɤ“iYy‰™¬ßck½ý_¯yíðņ)ìPø;¬®s%ÑXýÎ˧ñ_â&þl ßûþoðtò8՟³}0·&飁" ցäø)Y7=ä« Ê¾>ÄcgqN5·ÅQgڕþì Wÿ¯™þÎ8BS´’þ ˜‹•ÿïÌÿã§qÙ´å|Ïán[9N3ûsñã?±‹½ìsÙö|¬'`”$Çaý˜Ïî;${·‡8Ó40»ï”Åe…f«_²IÿgƒڂNı%V°²Yn64ûœUð{ Ó8"רÊß3*ì)æJ8Áu«¬)îXZl)ðµsÈ# t«RÍcåÕòïCô/ÚjšÒ$qŠIꕳbG7ï{³ág˜©Ï$K;´¡ó¬œO&¢7€¦0Æ2 ‹w©¡/&õ>ô“¾Œ¯¥¾Äåºe™%½”>mšCÄ2‚Ô8QœhÖoñ“åÃþ2ïƒh“ÃeÕ¨Wîën_üây,Fâƒ7K&ÅþÖ8À}uÐù®.[J€§­º¾F£LSµÓ„€øƒlÏnËOoHÇÆN5£¿`ç±lë´>ğš?bO¦ÐéÐ,Ú'½ã^BçÓg¹­G8Ÿô ÐËÈ)äÕï¨l +ü +­¡AoLζ‡Ä“ÍIֆ.¶6Ë8$ÀáUÕ[{†Ì£Ó­Ž=@ØãØÖÑ£Ûv|Xõ=U²³–kÚá´ÏbaÁõ^ÑÏsú.R¢é±®ŒcJcó‰Rn™-Ëe k±P³Ü3 tDI WwôŒÏ¹xÿJšÑ±EwZY÷ÁeÀè’d /Æxû–hìPï§õ]ÉøÑ2óUæHA…,:»så˜AÌ' x걦æ<ɾê½.0«×qI;ò3=Âk¦’|çW&çϰ¼™çþTäñ¯<¯‡&«ûÔÖÞøžÍøR‹v DU5ßÔr>vášÜÑñ{ßÿ©Ìo˜õ³­ûäzœÅ@ìcF; >V4kÑà‘Æ#È=?¾KOÎÑFýòs@ý‚]kNÃ)ñfüòxWNŸßí ¹õZ»þ\Vüðòã,9|½5Ý9Š)Œ[ÎM»=®âÉòDú‹ßº.0ÝÛ7ëCÎ÷nðÆtöx´ý‹{X~¦¾Íœ| WÜ&½Õ’yE¢¨Tބآ<…¼N&¶?¦ ˆÜN‰ ï)¡Žþœ’V½É¶ºiçDž vo`[s|΄Ól—u*š„àýöd³‚‰è¹ëÂáÊUš‘™Ò¬âÕ³ªæ¯+덇ƒz;njì÷Î;*ÛsLkwÎ4•âЫ†©:\²" +"0÷V=ˆ¿%n‡B·A¢ÝôÞ¤Yó²úT{cK½gÏJÅc|„Þ,éâ°Dœ¹˜oa-Ì,e´¹ÆBö˰Oß:ê‹?RãºÂ‘¦£Ô±qÝ˞Ô­"Ϛ@ޔå–Í0-&’—w8@m}lo¤AÇD‘Ì8…lx³j¥i#ÒJ“Hf|¼Ð#‰C-±ÂÁÖ$’Ì„ž^CþDžÀüè.£0ŽÎQs´î¨‹Æ|¶%µÄ`VßñÕÃàML ›P6w5ËîfXbûˆÊ.Êe*[ðæ¶+ŠÐ ðþù‡T`Éc-aøÂ+EqŸp¿YJÅrÝÛGÉÞcÜ à`S“²@ŒkÖ m?8¶NĆü[0 ;µáþC¬XþƒKž œõi1ð^Ñ|ö÷ ¿’À +5œ;i›ðÛT‚ œYYdd‹/(ð¦O# kTÚ«úEÎySrôÍ¥àZTÓ+¶ Xû2‰#)âæõ*Hþ«Ô« = Jn§iJ1 aåÄvO(©&\w·ÔG´¾™?+GaJ'[Ý£W•èýŸvm•¶Óx:®š_ a©ÙXìϨb_ðêSøÄvˆ¿Þd¼•µ#Ÿ |*Ò©Â4¬©æú\E_Ÿ¼üžâëR~™]l´'O5›Zo% mØ×ʒoeDѬa—7!_ .T0YþjÀ?“&.o6LéÚð;òs  ђúù£Q‘ÿˎ+{cî^ÉȑÔ+ oT}Vc«@Ð4a©£Ôõ£ê"œ7ÜÖTXš/¦ò£!\¾—£´=pNä÷nàÊN& +àÊ®$µÃ3qu‘„Kg¯ºæ.“tÎ=ðÉÕO§Å£ë–;W o èÉn£Çû &4oÐã[¤-R£füŒVé$$Ÿ>(×0Åf@%¸Éi·5¼ž’_TáÀ½˜|cƒ‹RÀôº€·£ÏKùBß=/ˆE¼ô¶énŽL +ƒóðcù©ã+×øÅ×nâËYCfÖÓ}–2õ½çڌ Ž +QÜg–†¤| +Èð¤ ?èG û(ý©EŠn4ø„­ / Ôxd%Q‡9Z¤Wš8îo}ã4kÑ%ã“ñk _ÆkpÜZf¶Iȍ–.Ó½†£ÂÑ ýsë›iAJ&’╆q´ÙCs‹¸Ž“*ÇüƒŽØÏòxÑo -£a’æ ÑdïÃt¼wÙ +NqŒ.¥µÅhÇNÀÜ0} ®H¨†Ç527¾Œ: +æjW&ãè·úMŸuxísîl`L­–›‰u-6î´»Á€†ŸVéàCðøeޝ^3µ¤W5¥ý‡H„ãl&Ç55€ÚnC¥ui­bvcj&LÁHÍ̀~0ÍKµˆ&¸a~êaº(ۑÿ”!ÒWWfâchÁÄT£s“ÉäÓ¦ms3ÉÆÛÅÌò8ӀþÖ ¬ŒDï~+dbúÎ,ipÂôqcëm=BrA5e¸'š è³À‚ÄS¯1dAF›HlyG2âÇ:8F¹Ð0ô¤~3­Ÿ>GYðÀ,÷ÞѦãÿn¯·åº’Z·R! HbŒ@’-F Ý7đ¾jFùA¸Ûd ÐLm!µ«ç±¾é$’ô}xn@d±÷0|Ø1·Î$ B@Æ °cäâ(àF007ïß¿ýöý©j@„Û‚sºós§l÷­¶ÏvïzàÙpŸa_zú÷­Íïzà\+€·.áßàb_\ûéðûÛInݬm¦ /Z0w¹‰mA-ªoÙVz¡ r¯ppJåÙÕÆÙ@`ñ²•±Zù狣F Çÿ=F‘:• ÔÂL6B–jµµMìxKÍlõT\t J}ξ*ºz¦.8S{pÔ"t£õž{ã/VôFíòL(%7Äi +1^˜Äê=˜ÖÇn jàÛ«äXÙSqDÒßLŒz¥º¿ú¯šAVWEή ÎTÜýô ǤúTê{'PJú˜ßãæªÔ8vçræ0Ÿ³ú{èù†ÂšÈÅùV~„~1›!Ð*Ž®W›ó ?Ú,¥ï‹&›ebRÿJ›·/E ©PüóPæMø¿™ ý5ª’YQþâ_֊‚VgÛîMi¶ò¯¯M q6¶øzAfʯóúù¨î +ŽæMCd©6•¥LÅ+¥òeG¾É¨lCãB™´ÒûmGò$“a²£·{Ž¿•ϒPp,×ÚQôåGû’Jk¨Ñé,¨éP*d‡dn³KIßM“1´KQkՅH€× S—ÈúCŠ샨‡”ôÆ¨òVÙlWW¬Ç½£¡G‰*†÷_Çw{€¯ãå/j|â¯ãä/püw$Ös¯ÅD×^­Õüs¯~ú¿Ž¶öý_ÇìïW*þ>òõf¯ã†|§ýjþ?mzøUü¿ï”{u·3 ”ÊNã‹ar +ïæáþÏø,ù˜4þ…žºž»à Žy¸;÷íüUаT©g­…g­º³á¡Yð×VyЬó®¬õЬõ×Vyð¬óî¬øxV|=՞¾ž¾êÏa +ÏaugÄB³â.¬ø˜V|M՟ +ϊº³âáYñwV{V{«>2Ÿug²…g²¸üÿçÂ~kã“b²MÕádŸ_ ²O1Ò,“™»¬“[°bV­U•.©æ¯ÑôZú`y_ú¦âžúâžuÅ=Å=t->>âŸÛü,·²4’ÃûFþåMýѱø+ì G½±³sî}’léŸI³–¬už šygëãy¶~å>lEŸãê®³ëüøk.¿ØÅtu?øÈ_Šüe՟ +χ·Òtø²5ßá_-ŸÐ³×B³×]Yñp¬ø»«>2Ÿog©¸øè[ŽºÞùÐ¬ó®¬øØV|mÁhùȄÇÚv«yý¬7?µ;ŸÚ¯‘´,ðØ:ðþý|Ä¡¿ø¨[ÿ¸üGá¡~7ë?F°…£ì.¬óáYçûê +\/ 쮼Oþ­ï¯ø¬ó¾+=oÁg¬´ ü8‹‹=gõÙýÇíOI +ÏOÆþô èµmƏûÿ|T/ñW^3ØÂñžÆêÏY +ÏYñygu³ÿíö_ýZ?ïé¿Çgÿ…ž²)iû¯ÿû[â>+=‡Åg¯ø¬øÈÿþ|?Üsc|H,à «=OscSà´çÿ?ë³á­ìúŸ×g­·ïé¿]ŸýÞåæ÷Ï´d¾£¯wß`²žÒÛ|ŽÅžg¤áDjôÙÙ-f;ñúúÉÕrŽØ÷ÿå ¼d~Ì?±¡È}÷S¢É:ßݾ®ÑÏyø¸2¿·›œÝòû_•¤ñ;¹ìŸÕ¯ù’Ú¬_‰æe¹QûÕ½”÷îÿƒ‹ê/Ñ(ÿí‰ïüïýÿ¦)Ÿ&_>v—k¥±Ò¬ÓKi¥ôٝ5š§Mßi¼5^™7Mc¦“ð¥¼) +o¹<àžŽ vÿµìîÄêśŠœ5wÉÁð(P“Ïþ¢ßðõ~—í¯ñš,±ïÚ[ó„ÿ^ƛ+oÎÚzHœÁ»Oñb¥ìŸ†?yú@ §ÿ©zl)—E"? s,Z0Ä2(ýÖuΆ˜sç&oïÞ?Bzh÷ÿß¼"Áâ€5ùÑJ)`þ2%BwŸÄŒ€|`ԒSbŸ˜¦”Â5:q™D†˜d¿§Œ{ØÄÇdävŒˆc’jjZV5Pïé-T{ÞWT5¿çØF¹·{P=ø›„Ì`å‡Á–SWdSoaD–”Þjdq1‚o+Ik€hE?ö®¢x= @ÞU˜óÚøÓ7¶¿9ë%ü7×{:úŸÊ‚‚¬§®ZðýÐ㈇Ø1 z³Ü + 3s-Ã4sS¸nËU#ä—u1_z»Ó +°ãÉCöZc´,Á,1¾´T–=þí‰@ÿD†táf¸·ü3D½”4šA¥ÔCöȳÍ/!,qGׇ.md{ršEå3¾“æ…c¾&PJw¦î^1ºAO¿LŽV˽© Ñýør’¡ð´ZXtù©ð½4Öûa +°IÌ»<ü“-^9›-^J8%ÔcZÖ»¸ŒC ÃI³T­ÇMMê3P枪¡æ9¦È¿o÷Pê8Ê37Z2n"û{ô &¨ÜíqQƒÿÄPºÚcoË8§¥\q7”„½e¬–¹ä½Ü°õôpšN;çÃÌßÔ± }úÕÔO‡„€8­˜gQ“°ÛJ– Gt܅ùÏQ/ã;« ªKÓ£Ã.Mßʟ3*Ûu+ó$1`.%ø ‰…»› þ(“0Φ=tPÉ8ý †AOÃÕ¶2w}R~@t{èQ°KÅe·oŠŠšQό•þŸ~—¡ zè¸èT+ڞ±sÆ!™ÇÒ7œ;9ÕŲÕ݊*´Î«ž{A ìÖ»¹Åv’àö­Žóðõõ,@¨Þ48÷e v®˜%²PØú5,@­ýÃ¥{ª?ê þ†kêOB$½C›àƒ‘…{‘}TÑÜHæµ5tüP¢ˆ1[GŒAõ+Øv…¡ç8§¿ùÑZX֐]ÊŸ.×4ö9@4ìÂ8|Á•Q?›KCÒ±Ïåm:$­ã!™Ì£6Z¦‹ æ=Пrò£ÑMVZ­nÀ_R w%¯ 01#âÛ(/ûv^€ßÈ]Ò~€“åè Of’«@ôìíÃ3óiԕq?QÖtOÚ.øb*•_QI(…sJ ŸÚ£Àkµ„¶´F3ù$ÞÒØÞäÎEê˜"mX3 þ ¶Øç1–| ²ˆËµ8$,2C¯XpÌÜØb Ð`'Æ!ä@œÖSÀ<$­Ÿ¡ÏZS †ª1÷O֘úðcø .3ÍpÑí C×¹Sì˹wd„çê“Roü (–;šõ{ÿ|ÏËß0¿ÎÉ{öv® x«²‡µü ‹yù¦¾È[Î57‹y4{õŸ(Z“+“>%†Ú¤µd°ÛáÚÄʌ.s@ühà °^KxÀ ‘ü˜r¹rö=ðË2hêIa=ô…tWì¬ D£)˜¢7,Nõˆ#b‰g¦"n¶RBvB˜îKoÉ>ÜSáî1ÞÔSáÿb#Þ\xy¸ñ¸’ã¿”Æ-Ìݽǎÿ†Ǚ©ÇÆ©O ‚Üʋs¶@‡Û<°ÛǨÁ3؎ÏÞ4êŸÊfv\»Ð¨¼¦u\8ýÏÓ¬Z‚“‚‡iñ~œLàü¹÷û³T@¿NAO¸¿NŒÒoÓ¡zžRénP[¥ŠOѝôbÐWZ_a ÿn4€Á ¿…b’„ÏÐ6½³fi°úOÒh¤öfr»QúñÆïl ½¬³£Ó<Ÿ!±†(KÌòÿÏ#‘ík±uÆE„–æ×ÏÏHš7 1è܀°¾çd²obց—ÁЌ`>ع}^ãa’xË(CoøÁfðš9}áU6s­Íg¥DËÈPb€8_#DQo‡.m^AÃ^·5œõ>‹ Í‹C B‚¸dŒ…e†Ô¼qóÙØªøÑ%%¹GpG ÙvM‚5ãà( $Ãü¦îS{—6ÓÐcâÛ¹ ÁIÃT*¾Ø,f²Mdèg¸ÀÕÖJ¬”Y~çcWöËù³:ñX÷âV4ëՄI¸ÇÍ}µ|7áñWd!ÑöH§?¼Î¯ýäÞágdaï"÷½Ìòt9üŸÝòã0-žò%ÿS§´ø­m3'?}‡‹Ú"¯ÿ!çñÿ¿ã á9ïyÁTþ¥3¸ž>ò†ûæ¶ó>ׁãö3Û´0¾ùÝEáeØ¼[ü¶úL#fW!þÞñþ.’¾9ø@+þ„Y,??ïE’äïômÊàOÏ"é+ãº(²_lÉέe¾dæŸËN!ΎÐÐr¶Ó¢›óÑÈŸG!î"ÉrfØßét•ð>^}GßߎV2 Ç«€C9…ÓÌr¼ÈûT”}™¹Œ Â?Aw42B­e=ú4?)¸¢‡Ëzü¶HL°4øõeE0Ð-~ X`æfÿ•@†ÕÅC;¤°wFh°ȌX!XÚ*®žÆ-۝pqH.ç[Î|ÆñNzê·ç—(A&)k¹Q°o–Pd?>-¼ßÌʹ>H9§ÿN™õ ͏avN Á ŽZïBÍuü™³ï‘ïà׈ …½¥=Úæ ŽGYÿyb‘t”Î ó"QjcÜY gíÃ+u™KF<±!¾°îåÆ }V¹dß{‹¦v#V͛3n‡*M³Ïnm$Á2î®Êj¯;ÀŠ ì5œ )@”Úub³2Ä­i>:ð{³ô-ñË̺4$&`V¯â žÒ” %;ÈåÚ$1ܼ§†f€(º ¶m,f!¼0i/+®ñ'ߖÀBê7 +¡uv7ÇQ&äPÅ[pÂÉ °¢G,`v杠{#Ô83&Üõ#EÓ32ç_ ¯®9<Ñøºü3“Í,‹¯øÎM€—\„,-ÄڕøtóJÂëù¤!Véĝyõq¦‡GueÀ€"×xv$Óø#Tƒ[‘éW©-ÌM4Q¶PâÕ<1¥íy¯¢ŒâcSƒ~}8(À>X˜J݊¨zöfç;¶F‚^P?Ì`À=Ù©áÿå³µFbý!Érœ5Q|hðr÷é¦ +Aiÿÿ²×Ô/ðW,dýŠS™Z,è7)¬òðÈY޵!e²Ë}àÌ-}ËÍ ]pCW”ƒ–» q€V퓦äÎí’ï%\¡·l•Áƒ{ÊæÓ€÷6ÀïSBþ× ºò ±O¨n³ƒ¶íç/.¯.^ -¦N¯põvɼ䃡ŠÌCf”=B¤ß\ $žØˆ©ô +¯tÿŽ[EŠ3uՇöµs©ÁþÏu€í™î™‡öºÔ^‹ö¨YðÝá50Áù A7¯m…âŸ@¹c» IÖÀvPþ*Ú­‚íHMNß\¬³ŽÐ´¡gE×Bƒ’ƒáöÎa©ÙTcÇ幯jTàåϽýÅ®Põ4MKÕ<%@,ziz§d‡M/#‘áý¥äs+¢j^©`¯Ëêa›ÍöŒ‰V&mUè Î}¥ý¥è¯ßñӟú05Ñ16R¼ôBF}®ô€üÅ|8èÚVNëÚ«f&Ë~•x ÿ\+Ó}¦Ñévãå)’ZÁ™.˜Y˜„ ö Z¯¦Þsʣ稳È7œgBvõä0tcçž7œ\Ðá!‘K¢0ÍD'Žö>q¼æ Þۃ…8¦®«bŒ¨:`º÷wº¬ÚÂ8uÃñLm’ÔÐtÃz—Âê,òh7ư #œ–eQûä‹­ç/®òìµ]S0VqAìWl×ÐtÏ`ـ-ÉûÑ`Û$ì1a×8ºá‹>tÉuÑ.¿Z/uʟ +|]<âçkÙj±ñ¯0¡;f8°÷s“’¼0.ê„ÇRô@r+åšZK-ư޺ý› ¯·9ÙcWÃ¥·ä·cŸqK|[Î)oˆäuœPØml7^0 Þg˜'°Ø¡Økl ®ÃU×Ü\}é ì·¡°Ø±ØošÐ`ì6¼¶)dú-x£°Ó‘¼ñ_ì4¤!Ÿý » ìö’E÷—Š8¢×ðéyÐø‘³Ø;¬Á¶Ó¥°90ØDµùØjõ)kv=öR–¯h,µzûm«Þ#-VNüï\¨a¸Wöeړ¬$߯ù€3xòrˆý`™ÑX´ü—}Oh<³ñ¸§Ø3+°¡K³¢ =Ûœó8‰ìmÖ3ý; ªhö^Ü㕓úßÙ¿ø›X7ZMüS÷Ž÷Ðô7mSë¸Øœ¦S'°:ÑaKחí9Ü[¡³â"Vüﳏ½~†ÏÿKSÏ»Ä,»æ/k.ó7¥—u·u„¨&†Sƺ /™«”÷Á–e{s[ç!„ö–=˜”MÁ…Ûþj.¢Nu˜wÇúý0>C”Å…úº s+¹§‡ Hz.¸åÿíiðÄ5ˆk ’IÝÍ<>>:¶ü:µ|¯»Ì×­T’˜é9Ú.w¾¸kª +ýzµõ°©÷9?Õ´@óñ:C8ìtÌDW~¯\p,þ‘>¿E|µ´–r{OžÛü×»bCÿøP§é4º}.£JãÂÌøY¯ +Ñ|;)fNy’lÑ?«ßcï•Ü,ƒo¯¼¡Íjð®ÿÁü«çfs ,oy‹¦¾Jcsô×ù¹þ‘Y>øaÙÒ³øZ>_þ­N/IÏ¿ÿ0A/é0¦œM¼/G+‡ôȵðÅÈ?ïðÞçÓnígW4• ßÝÏÓn‘>’„„OIî•ýiN ™–ÿ» +Wà¡õÊäÍýþhâOŽñ´òr$Y.déÜ@Fã‰ûéäI²!|–˜¬óSÝ" Y +´ØÎéÉ?7¹yqýqZ2‚a„ZvYmïz±ÏÊØç5àÉúB‹>Av‘È— ˆ³Œ®>?mŸQQŽÏ—cԊÜᓫ–ñªlû°Ÿ4“ə¶¢MŠ•fŒˆ^â´|£ŠÖþœL= r£AÁŽ§ +n8±ƒÖJœºÍ§•gøÃ¸1ts%"‘6êýЇ»ý™ÀóóFjNÉW!]Mu½²PÁ hV*µ`Û&qŠ9&Œ5èõA¶¨b¿ïärÓ¸ƒ5yÅO]ŽÖCå<³¨‘»Mìì¼íNk¾pò–¤Oòœ`k †fÐrI1èq(ýÓfü)xDÎBÈ Ýõ®«¸QC;ÞBz¨i\ZöGnÉ¿ÀRR“GTœàëT…’ä¼úÛW³rüጆîVØËr•9+IRQi§©& +·j޳Ž_`ÜÛdŸAï$U1Ä+å5´ü•?Q_ÛG·”Ø·˜®² ÍLŸ±k¶zuÖYƒôç²Úä»KSt—iäÝz¼jÆaÐwºãVN»]QWKµm¢£t @Ú"uÓdÿÍö@KYáXÂÉÓRù¦,dԟ%b<ÄH€Ä?óçü†E + +én^×2M:¤Zð„ž45^†Äc€E÷³¯×™Wñ©h±ÛÛñ¹ª(Ä‚S¥þ±7.òv—ÕW#û\e&ßt#€•-tî¶ÉÅDŽ?û#™žÜl| r•©XªóDøžcùdæ­V™^¡ïêðE¹Ý¥¡¼Ìik`®!!¡µüU33±9 ˜ÃŠwϝv# ¤ǕhêÝfœ­ ²‚Œród+ ß;õœ5䄇õiQ³£ +‹8}ˆ’m^æ¹ÇJ·Ê{iÆ>`DýoäZïp$RþƒPº]ëUŠË5| Xlÿ>îû˜•7vÓ\ž5üŽãú±6 +&~¹GæÝßæ¹úK;œ"õ3¡s븿ÙsøƒÁPù¹è½ëŸ;É÷.{x¢K("§0¡y‚¡C?S|OÛ÷R€Gԉ2íw%€Í> +K^DÖôšyc8©¹It|( +5×cË4 rÊôÁ¯‡=.å×áŠÔfŽòš—µÞ7EK-Öãú§ñ)édß:²ո—C¾”“zoE×OHs2<žÑûÆÇWR6k´Ï„z.£[V®ê¡҃éٜ <}ù²}‚o*šÒS-†q-ˇ‘`½ø>^u£í°!IÔxêW6Ÿ(w‰Åˆì÷fxÀj‹/z©fÁà`ÐÆ>ïÑZM¾2õ#šl†øa8†Â8—Œ¶µ®˜2ÕΡëÔ¸–+?>Ÿé²Éd€FœÂ+®v€•‘â˙×j¸;÷Bºè‘ l‡Ê^hCò¿âÁ7l0¦óéÁ^i‚5J÷ô™T½¡ˆ;d=ëGò6ûkÊ÷ÄÔæü™$à5oµKØûµKv½ª^î]¬½nBuj<韄J v´úéº9ˆ-P2["‡áŸuûæ€üÁ;g¿T@Ï0ù¾ßÃ)#ZS®†w—%Ko†MnƅîŒ*¥5[JÓÒ ¦‘§` +ïgáå]…CC¸%Ñ@ê»ö_G°ÚEã5ή@æSÙÕÎØ_lKP4`ୁ·e¬o7ãäAŒ¾ŸüÃÆá-I¾ˆ'>Sà¦T#Cí\ã‹FO͈·8A8„EÊÝÇì‡á܈8 ¥byT«žÁný3îìðoÄÝø/$–0uØ£pßMŠn÷ö̍¹ÐU™|áàø>ÔÊpÝyŒ ç +Aní~À‰_¸2Uá,ÍY&,Ô³Š,H&-|)DÏÅÀ<9ŒHN’“8õ­(dÃYëJéE"mĹ¥\,à¥vqÊÈXIŽ˜ œr@Î.ÁË®œYf~tzGì <²9žÙ4_šRâ^´Ì…õOY.YÈj|àŸìx…¯ž$ñنÛT­àgC~Í'vØv‘æWÅw_Ä4%5ú8‹`y Ïâ;þçïñ_÷>;MQ?lÿ¹úRï>n"Ñÿs±.ã'ˆ¶Üüjkœÿ¹åfŸ¿îzé¥_÷>iûþç}2«þÓöfHôÂÕ¦¾.Ïq2«þçùóEÍ|¹§ïûœuÞÜáÈvÏûžù4üB䉞Í(ÿ¹Þíü™y¬ß8.J;uáL»õÉf•òVOûŸ"]æÞe7ýÏY2«þç銧û’J·$ <ÌýÏǘµÜà;ææÜý´Í£þçëFÀ‘ò&?¨\ûù€ÌEjúcý˜D0Ã×Þñ3Î X6vh ßbØ5i؏‘škýÿcsïø_ô1ÑôÂLtTè¿ÝLÂ›ÿà:¶oÚ½ŸgÒh:+ÿٟ9ýùi;þ?ÇR c|‘çðÿ_ oÀG„T'Ùó®}žýü뚐¶>£»ŽGf2x]ì֞î\e__³—0¨Ê:$9'¨1õ휛 Ï`èßÿ<„toDZHh¨P½ï[!Ùö\'m¶Ð(uX;ÔO+(^üBsÔT¹µfÕµp†dÒ¿ÌáýË쵸o%ÛÃDÚøÀ§Êv¾ÞÒO|‡DÞ/­?K…ç?°ßšÖ‹Ü¸xÊ´þô;k_ž{§åœ¸£»Ì³z¢N{×. !¢ÏuŽá?  /Íùe-ìŽX‚ˆ¨ áv]Н…~ÛþÃ4Šû>Ã6ŽPŠ^×·•¢Î}¢ÙK hùÑz±0ñh½eÛ÷ ½‰£cR/rû+JR“ΆÍÊûÁÐoŽNî5^ҍ¼ÞÓ4/7´Í£×,ҒÛ%sëâûÉñ߇ƒ š[I“õöõGã@ eH +,¸Þ9گˬp/Zlü-Í?­Ì{¡‹bÉaÊ}@†kîàµZðîèmC¸ÇáÁ9¦×MƒŸéU¢3#0¢l‘¾áí™Lê#è—ÖoBúë;ìj7ޝS´ÞrÚlgÓ²€Dۍiú< x ¼NÓzüÊle.~Áfºìp…Ecî­‚›ÀgíZ„¸6±‰ÇUÏØE»ƒÄl©ÀvS=~cwó vá RòëU;µ^¦øQþ´ +<5¥‚þRäÙæ$q"¿°ßè†_[>¥µÎ6 W¬UÚÀÀt5õ[³9úþ’„|yp܇®p¹ûZC¼ë êõQSLcë÷FªŒæ;w#Uõ“ª˜'…ù°w——Ì×MÐ á¥ÔMMىº›î›ÍȟÓL7*%¨½îh¿Å*5ŧZ!ö/@›'!ô…m¸‹¤xÁ*Øl]–ŽdÑýŽ—ró2" .4×̵ZÐ9Ýç\NÙrŠô)³È3‹óQ<ù«7ë´\õñ¨¸'ôY#Qt\8asá©Öw”ӝ(dµÃs‚•ò@þîò$]‰Hò,¶L¹ÛþØ:õCêg¼§²î¶òžËßZ£õ,î#ŒN^}–ª¹?Áá¸LÊ7ˆ0wLJÞ4UûÌøyÍEc©™¹Üþh1á^WÇÄù©L¼[0m¨88¿€ëIˆ_{ Q‚!d¯=Œ÷Pcãg¶ç%V ÐÞå¸kÄeÝm…c´‰ÿ>-¬üÅ}b0͵óiPc’$#+C +è4âƒÝ+»Ë}œÚ Ä5KnxÃYq3r=þ\" rCtù˜ZäÖ¿Ò³Céƒ@ÿ®¨g]JÏà^7c5ŽïH³Óó°6z<¾ÏG˜uJèõÈoºÚ³ öèy +¿”Ÿ;¾wÆ€_ÉmÇÚÐJV ǎX–pÉLÁÂr“‚nÖ:7ÝÆUž 8^F²!¿yÉ [:B6hZ±¡[ÏßÈy1SäJP‚Ö£Õ™ž”A§€fZ1„¦{çÜøãՃö\ìyjû©AÞàscã2¢ž"žJš”w%Á܇ q–8´|#ÀúI->4w±N3À|á“úlfð{{±h#ûÇ]@MSÎ×mU܁ÛýYÔ¸Kyp­x+¼Îðß8UèGwÛ^Urqžéç +¸·ùƒ›™8»uMŒÌà +4]w\H#Ö¦Âe„¤ù9r†±~”ˆÄgswéÈÖÿÝD2Ø`8MĦÄadt>MjµG¥7pa÷à`@$,>¹“,¤›ÇeeÍT™ qà­?ÀéGêR9ù˜¯x-û}ûµi7þûÓÓÒ@H‰ èIÐ!¤¯¤žô„äeiVDK Uð"¡ÊUkJÕR°„&XÝTƒD@"1j,´œV¯„€´bàÿÿß¿}÷Þô÷½!$€H¸ynµ…ãmvÍÜ»t7CnsgeåÜ»rކ¼Ût7Wt/CrstwWtows›t·77c÷OnžÝmÜ)à÷]dºú9[DOôMÜÂÜ©ž àV9.WrÜþãjöíEýð–d¹nÚ¢´~˜=è©Ñ^ŸÏmFYWyMûíc¢¹ §ž(?ïáxKG…ÞصpI£¥Rùݚ$°ûÐhmc€ÆÖ ?l~™fd¯þ ^âàGÓ)îðû å ÆÀLÙPµê­eïQÚžÿÁ&@bkIœŽ=í­‹x5ì-Ðæ‹Ê~è,g]’Ht•ú”k«–¯å@â²XÄW6Bè¡Ñ'=Š÷2è˜räax“È·¼>v"F¶íý{£¬ùºóˆÂê‘͏ñº3P©Q ê¦Ùîž Í‘-‡Ý<7´`¿f]xöŒ”# 3åÑ0é ºó|/T‡p©;™¬n±h'.§Ê+ÞR×Ã=s xßå†\Õtqµ䛙"Ä80+!’Ü\I¥ÀŠ/}‹Y«»ré}KPés£êKœp%©„{'»×—åÅÉë˜rÃ(Üöö”Ÿ"içÊ7]çä]"2›ëî¤ã±ïñi}@üÅN—d6ڈbáüt•²!.þ!/©—ÎYxù'cí[ÉÐ8ÞŗoQY¶ÛÅ7àÓÿÅ.®)_‰&ñh÷dîU¯éƒä›h}ƒ›Th¸6/|mW¿n̗›o׬'ûøî7mˤK 7&±€Ø³)½[¯!æðÇòÑ v„‹;G¹ÓmbnÌEI§ æÖÄ +QHë˜]Ëp"MúÜظ½¨ú,ª™‰ ü!±­úãv´œG¸vÄ gvneZüjAÈ|/„Í{Kñ×°ÒJ˜šUş{´Z}ÇpôN ÏÒæË¥Ø=Qì‘?ãRdZ~nü ¦qÎùíQü +¸nCXcžÕ]çäˆâú±{}ò]ê̦üxÈ2µI9MøÉé=ÂÇ(Z 7!äÐ~Ú£9 ó[TäG2È}µêžCõÿÇ8›4](Ÿ¿ØÈ`].ÑE‡®.—ÁQG°qi™H~ 5,‡Ñnöàíý‡l*¤;K¸¬î…Àzsj Ç·BHü6ÿÎnxϓnî›MÇ9?\ù?ï[{)g/‚šyùm”™ξh%!åÒBRq¢>ø!KÄÍ}?4\y +*{Z¿«3ï{mdã¬óD/¼†ün§Ëš7’X1ÿ/~t¸ì æ= ÎXÍ-)ŸºZ4]펔i½ê»¥!è¬#èžÈ—¬>"̦øŽo`-KŸ$‡"‘io‰œŸû>:öuRP!Ã}QÙõ…ÁGAè·Æ‘1hõDFT1Ü[je {Av¦ýQj-}œõ>ë‰Ã_Á9Pp› gC†qÒ¶K{&—6[Uä­•î7BihJ‹äÔ¹h“•J2Ɩ=ˆ·íÁÆlG©²-ÜõfÉgɽ”7)sw,R”–½äß—²éÜ´NÌÏY†àCk4ÁÌþ{ͼÒÇ·‚Äù'š8öWïÏ8ô4qìªÂ ãóMþšO³ÊO‡Ü™mÆ•렎’Ç“2$ŲîäK_DÞ(¯¼ËÙöK¶–¾'̓ßó‘£ÚNðd°Ïa"©g¦Ïrª%¡Å•z<„×=é0³ÈßG3n¡5ÏzM’x&&Eé7åVŽ&oÉÿô‚wóàžÌ˜—bš°L·r70H'»4¶¼{„XwÅVˆ”èA;w™`›]çê»ÔÈ>p»Ï`îÊAÅû¼èÈ?zî|ƒÞ˼ÅxÉ˼ûgvrÖ»³|«º0Mœƒ°ßùÈuìѲ2ïÎ`Ñ«Øø$ +¿ ñø¸ÚÔòWQ†gd<”–ò]¹œífiõ¦RºÌ3×á)½Œ6_,-ÌX>]–˯ìÕó¬Á«³H3AwúuÄ3¦Qô¶ZöUywtÇ;á]qÖX×E¶D_-§»ö´|ó5ºØux9Õ%æ¬AûÍ£«Ã>i–åùS2,N¼s‹ù°"ý”Çbõ:~A꿐“3ì[v:”“_kyÌø'½:µÆw¿p3ÿ“(uz¾ zøëtõ‡¼ú¹k«iðW›/è|$)McééíU[S±+Ô˜ôoÝq¼óÆZûɼãÚ™ì.MONûÊsT¾Ã×d£ÛbUå5Ö Û¬þoh}cähË÷SZ¢±†Ê© ßÿ³³Üiö|õ&ÏÚSìö­bÇ>´2×g¶äڟnÕ¬_ôWhËnV¸²oY‘Èík1íMiÿàÐ?yÚ֋úè¦|7÷Üðp“¿à8•pÈ´T:•0PuU˜4†+}öF`H»i³3màٓ¾ ÙŸ³ü_4öÂù÷Óü}ÿvÁC©‚RwçŒÀ—s®|]ÿ6mÿ˜š ÿ|ÀCEUØdGø%/ðpµUÌW3í<¢“oüé£üá·üeµžÿ˟ãN9/±/ð0|=þàwà—þÏýl\/ÃÅÿÀpåýw»¿ö0!¿ù؋ådÿ©S¶ùcøÚÇD¼i~:è¦+úñþ¶æÌÀ³y³0.|ö‹Í›ÍI˜/6o57f|ߨ5÷˜?ûµPؐlѾOtܶpãÐðr8{…N§7„·Â_oŠøQ¿ºs—X%uÍÀÑ¿lÊWÞÏLfäÞÌ´åæÓ÷æó]y5ͧ„ê),ÆâÈqɹ½úë ‚ª…ퟂ¾ó,áJ¿ç @o¥iÀç|«Î{ýÐ9ρ«øÏC„úØ_?[ Õý˜_ðBü¿5Q Þ\ËP½w輐¾ O#ê¾¶ÁseóeË?sW í}_"“ë~à…ì9º¹_¥å¿¾Ž4Þ¼/\>[óŠ©!yÕ|‹”›xÿñ•]Þô¯¬ƒC€òJò{¦Lç¥å¾Ð<·ÁÈô8|gWՇ-ïßÀý'íÚÙÃ_À•ûD0Jÿ¯ àŸ¾[æ!*á}/öˆpâÿìBûª¸wë«÷ÃÀ|d-$/;‰õ¾¥Ó×úߌ~ºñ8¿÷yopWíÂõUоr–­œdCA¤…öS›¹ðüH^Ûø!||5D¯ða~¡@Bø¸Èˆ^7Öüú›§Ã ÓÃýÈ^ðü¾û|ã}ÃÕÊ÷½ õt°½»GUÅþ¡@q'ŠÃq¥}úê¦éðq'zû½áø!Wêùnü=_ë*á{ŸÙmãÂú¿¸ï{åþۅú… øüÁ)âòßîÂü¼A¥dØqü·éP&t¹¢Šö÷®_YÝ_ÿt[ ì‰'«þ$¾z%Ñ韥èïìú^?ø/„¯à¿›´=„K>òüéýÏæù—Toƒúy­7iþ˜ÝPç²~lÞq¦ëOs6¿n”ú}K©=ÍÏ<Ù§}i¸—8ߺƒtkÏÎ4НÎ÷ÊÉ/^W÷+û•ýþÙJ?þí5_&`7Îv„–uÂ]Î]<º‰u2ùك´=}”'œ.e +̸L¹Ì§™Q2ûFÜU“´.ÜþÒU4íÎhsº ÓNNsIæ”M>Í)š‚šU4²ilÔdÔkF §³`ɋ6 ‰³`Ç«6 k—®W?£Í³vkºÞÍwTO]Ór·õD«ìª™X)UR«%VÊÏJÏÊÐJ°•¡•¢•9¢Sc©–‚–U,²Yl´d´lµ³ ddß7/œ—ÎËÌK͒Á‹ªÏ¬Ï­ÏÆÁˆÐçè³çµ…DÆvbbbnbrcM1«˜ž˜[ ŒÐFè#ôí˜K;)]S37393¦™ÕÌÏLÏÌÐLÆècô8í ™¥tem6OŸÐÐM”è¸ßø™*wFt!²ù§ã´Èғé瞵×a#ÞÏÀC÷qqÏ}ïÌ½ìº¶õ]•äê,µM¿Ç»uqWeÓôŒî”¯yÿì¨ Ó M‹Íoú×6ûF1Jšʊ­á7?ôóæ·üzn5¿ëàò ìJ5³‹„ÀcP/;õ¨7Ÿ¨Æ4x1ufƒyՕÆàÐOpÐ*1Š=L’ÏH61³Ó ² -›)¤aýa-:UШ› ¾"&kiÜ]›c‡3°i÷p”‹9 +5…¬×׺7?ѳ¢lØäžÍ)™ÈP)#v¿VrNŸ“^¹r³}ùr +cÑä×¼q›%¦ü58ygâÔµ{GⳐ…H£~-¨Ê%á•ͼ©ÞŸ~G“d‹¡ÏïP`¨\yt?] òD›]@…ù$L¬ºç|~6Õ¦6Çß ×€åÐö{ãñ¶¥ÆÄülDõ×ïH‚þ°â¨¬š”ê5{¦¼˜ÈTûRŒ?&Ë “rفêx97,\k¯t–R…¿r$âægX_ŽG&å,¥™nŠÌfbÅQäÜq úŽ8bl…¬ +ÌÆ$S·gŸÔë6LaÄ:ÿŽLaî®UV®Ÿ_rý‹WN,X3÷-]>&äÊÕÓá.L­]?Î+†î#jéŎ{hÚº{¡mòÖ4¾‘ÉÚ¢ÕÓßn5–®ŸÐE9_]4iø6®ŸUqgjéúdõ¶®ŸÀ¸{6®ž°ƒš¸ƒ–¸ƒØÈƒØÐƒ¥wöH0{TŒˆ0y–Ê2 ‹gä Áé-ôä9{yä29ÿ„|õ%óW(˜qw jg8Ì`HѝOŒuÌ&½:£|Šø|cB?kr© 3‹< 3ä®U$y+—Ú 3éڐçmÅ 3å®C9Ӗæ$qSC 3õDÕvvæD~e'é 3™›0añµÛ ¼Ô xuf¿óÛfØ20YëPɂFþ+ 2åÎi,ZÚb ϟ@ÿûP@¿z¬ _onÚbZ?–,u®á2ő¬ôä ¾ŠáL@Ë—³¥ eŠtï"@Ëz¸p{×Ö$ ±i&½1,K^å¯ÎYÓ± eéßX2ÛSž@Ëõx$ ºTú÷^/¼GÒ÷¼"_^¥Ì:ðÈ} +>› +ëV@ËV¨»: @Ë:«D—=l1,p!†@Ëõl§ÉvâËüä ¾ŠØ. +ØbX·nQ7Ķqw[c"\.VSŒ1=ËÕ²¤–Ùlã2ýÊBX©ëYHb§§ä eÊ7”MݾV2úÇÃÈ-ð®O3'¸éŸ8 ¼3灗||ûä »ç—¸µðÈ~I.äs&™‘/9kõÈ6×ü ¸‹]Q.…í‘,Tñ”–*xeR@˯Y?¬–µìÄ ¿OÙ eâ^Ê@ËlÓÔ2áÞød ·§³Èbõ¾Ò×Ä,äA…Æ÷´Hs© ›3Á;RþÎÆB?=ª ¾'´6$ þâÆÌ¿ÚØÐ oõö?\¾âRþ"ÇÁ oÞmMHöûUYoi@¿ÎzB@ßÜZH@×6ýž¦Ò‰~nÒBÿÏ´Ö7Ŏ°tÄr§9kK9t[ç¦$r$:»¦ÙèÄr$¦ãÎÍë„@ßð^œëé}\ãÕI>õOÊKGtÌ=#ÓEc÷EgšÐ_Ë.b`¿9|ÕÙ¶„ ú:ìÚ ÿÕQì7þ›Rþ£ÿÈþ/é oý{=YɳÓ7ôözbþ†ÏL@ßùvl¿5ûD ÿ‘¹ýâÿÖy« oêžiˆýËÍ1ç<Ó7ú‡Ÿl¿ÙPû¤ ü-÷7öü¢ÿö7àøD ÷—zbû{½1sfþ"þ‚ÍP@ßùVoá o‹KlêHïÖjbû½š˜¾šÍûä ÿÔv©¯ëàÊÒìEîÌ«úý3³*þ¿Èv>¿®U“¯Mì}_ìο¯ìο¯uvª o½;T7çŠÊó·fD ñdQz$ ÿ¬œòþि9ðOXž¨¿Ý'©yï1jº2Õ'e ùçÈ?H]ç†óçÓ³qºäl¤šO oí˜T7Ýv­ø_È@ߣqŸ½™ot•Ù7 +Šì3vë2~ ­}Ïܯ¯ò«íÿé_oeýXς¿õÊ?èjÞßñ×VÔìòæ@y¼é¯oŸW/=.ožO>¹oöaKß<üÅÂ5¾q®§£[ç9F·ÎÂf†eß8×QY×NÙ±Z=›œY±YM›Y±X\µß²"\½ ;³`Õ{6 H‹cP`Ó»)]S+7+9*Täéû4ädœ€³Ùéüõy†z‡=EÀ–úÔãë=¶¸uuÊ®Oü爫v¸hŸasK¼y­çO½¢ž··ªì›Î¢ËT¶__ՉëaÏË«õmÿõjè¶^ÿIì¢y8à.?åW.vÿ³’;~åqofkV¿AÆl½ús4Ç=EK+ÙeÕ¾u2>ulãoÓ¦?új¦˜ÿÚM j™;Ã‘j×¦"³j‰rª ¢¦¯ŽpÍfSy‰J›ŒEgt’Ýpêi Wô’žÄë*CRÒÅf— +”\ MiîbÇ+gÜIéY—/V^ÉYrzad2ûݾtéB~pkïâÉ}å„ʤr&%2³œÞž"¼¼a¼e`~ ŠÝH|ÄeˆÿÂÊàøeXÎ+³ÀýºŽÙ|”ÿÁ´Ê³ôµº§l¬Ì,|6…U—ööÌê¤Í߇lªi¶x«T©ð÷DhÓíL‰þá"øO/Í"´Æ†×ó N£Hl cÔ BÚ¾&ðڛh5ë_Xڛu‹Ü{]é3ÊnõZj͓¦M"-ÑàE›Þ³ÃT9¤+„E¬ë¤æn›\æq룁öwtp>ϘGìë •õ!t÷\^ŸJÙO¥KO¥m§Ò¦x¤}1Ù°œlÿ>í§žµ§Ÿ”ÓΉ§‰¹Ÿ›Tóçþ̔w9L¼º©u’ëIrcåñÒòrë¥òòüŒG%,äLÈüJCýFg¼ê²;Kփ?¥æ{Ëö¾ÃåùMꓸDsGÜþ¹ßæó³ílπµî®Ãÿ˜æ8î.ݺïi¿ÇöùÀç8ƒFx×.9¦× 3b·è*›¾L°#çÁû·Æ4i×Tæ î?€¦„c}ΖÝ[½F(Ëüuy¤%ڎ]²ITm0xª +¯ˆÜ‚©x ™uãgÃi¬u)VçC¨ÓdFö`7W —Ö6Fµìmü’Œ¨²ºcoÅ^”·Ëá*++V.-纎¿ËޕþÞëäÇHÍxQ§0ÜÌz.æÓ9uŠ4 ºd‰ºŽð¬•o]“o±%’åƒÉÊÃ%_3¤Ê“m¬ŠÛì™s÷&h¾yŸ ë†#§Úäp’…×B]ÕÙßdkäB=”†çl,ÉPrÒØrÒÀr£^"ÞPB‘YˆmÑyš…ø nÚÅ™òÇñ}‹·ùd·½I´´á §lùÇ­âˆ¶õÊiìRt!Ȏg=҉!$q'æöxGk yd•±5’·Ÿ(Ì;ÝáˆM‘ƒ$°ÄSÔr!ðLúëÂi.wH‘$—ÄŠ_òR.É¥,¥k$)i¤…ĬÑ74•eFH^H¿ÅÞ6a=]Fügpð¹Vo¸kF‹™[P«:Vc䊐®ŽAb›Öui˜±y8Z­º\ϗðÙá£F†l™ÿ°gR²¦_‚Ó1ÂR©N*xYr1 癋"P#í¡“Š¡¸—ãM‹ÐŠå=#ÙU–³3éE^<'.¦ÔE_ÑXdÎÇfÌLø"u °Å¥,˙5¾º#Û/G3¯†ƒ°'®Œn=•fÃ3eÀðñN:¨§%{â8o½uå:i'5Ù4á55âØÚ–Ù1x’,²-“¶¼jEÎì”I$°§¤j$’h«Åà„:B7Ûj CìGO¼I%idÝýRÙR?‹Ý8¬¥æ‘–¡qWŒñcc’¿H˜@È¿£¯‘„ÄI¼ô¨º^X™ ¼]„U}urʊÐR+»úBš½e’àA±?Xj×Q ïI‚®²M±Aú–ÆMÕ7yü¸Lãò‹¨éQ¶üüÓ\ÏÔ=›JŠ´eΉ7©Õ‚30\ßք¾­èœ´]Q0„ ÌìLæ­g.îõ’&Ææ!S‡çÒE–HÆòf}9ø•û{RL§ zôÝyp?æ•D‰GFÔXKWÜ6"ËÖ­U"ôKPgÌ~î óޛ=̉ûl¢KY˜tØ#Øçä#ØçôÌá~ÝüFdõ;Þ-ŠÇڑ¡Ž9B¯—À­L é/H$o®\¸&{eôGîÎ£&V)²?&{'ç¸IEåPþe?iü¬|5”Sip_Ȳv㞒(¥Y ¾#Iìê³òN›}›,ÏþkŽúí]Ðvׯ٫¹îÿÏìÑAz.ù#jÏ<6±Ÿ5¤oUá%¢xð’Óö‹Ê:ì:¿°ÛAvÆ®íg#b9õ‰îÒَ ¨ïÒ¡”<~¾ëþdøsÖ%ü¹ò·6fÑé’ñŠ)õ³ë>ê‰êR•¶}fóâ5Ì"Ú£yñáÌޝU/§@¢žœÒV Þab֕×p³‡m +Ø-Qb·ää$YÇwÚ¦ÒÝ &OýIÔ§’ä|’[=ñÁ³ONٝørîƒÂ Vóê&ì¾p<"¹pð‹ìb¾rÁá}æON&“5­™y«hØŒà‚Øê›ì@™Ô›Ïë‘Gôƒä›I¢J‚¹6gzáBßLÇZ• Ÿžóò’šË‚âRo”ÒEL ³ÍÅ´Öa¶AºuT“fÙȺQAÎÞ»O—Y$\•>؟^m^!^c8¸æ7T Øx N†_ +˜]SÎNÑ¡ÀÒ%.PÜØÏŠž¦Þlz8Çö˅µ{J† iß“ÇÇ_ðò2B©ÎEf‡ØÛbQ«2&¬ +l€Hõè‡ +´dõò¶-Òê:â³e¥ÁƒÈ{hÇ’!h^â³ !¥' Å7…7ځ¹ÉËòÄ)ĬÃON«Åß9h¬"—Ÿ-Ñý\BJôR]<º]#Ä?ý$ê,êy¬ÚTê©Ä“ª´m“ª»Ä³ª¾’iÕZOD™‰ =ÍfjFÒÅãŒ1Kã‰ÜŸè@o×^KŽl«ÏǤÈö¨Á·+„eŽå°p »WhnHG8xZ¤·°$kâkÀ|X#Ú #ÖÈÁòk@²üjÑcX—]¶Ù‡¶¯$‘urÑ+´6N¶©I¶°«rÑGÓã- £‘ïI ‘ïM¶È÷žgOà„&„O^x©ñsäêF_z¾Äõø—ƒ&·1RÐè$1Ý<òÃì_§ÒH}9±,¿‘1,?*œ%dþíú6—ÿÓt+Úδa]睴ÌO1üjº»Ýþ·®J»rÜZ» àcê™è|{£šÉÿ¾ìü>ÆoÀ29°!¯ë@|ðº¯uâæ¤hâ&ÎpZÉ»·£Øg¢ŠI¼WÉ|GNiy¿å‘x±Ã£=ÌüoK嵨¤Ô.,ÏD'˜3Ë&çŒòÉû5„¯,£XÏ⣣³þ˜¹Ü¤S’FÄqÖç!Çv³Ž™s+â£ÅôTy®\‹0zwg¡µÞ@r¦zxÝ¿QoL¯hgŠЙñ?xÀjxvì|g¹3ÙÌú'qkEäÆžð>e›Ž9ÌÌö,0?»€tLk¤ý ¿f ³Ý@o.ç(­Î64Ž@$'ÐþÄ»ԋ[^ö ;°ãÁþ„j›'kÎÎþ7ÿ~ÐW ïlÊCÀl¯GŒ-Þx8âàèRۀú`/–£Ž4â*y/¤ô@T=„Ñ€ŠlÒøÀ#aÔq :@ûàzðImLòظ®qðÙñßFØCšé×à°n>·}+&[­À8ûi‡Zt¸ ð˜Di ø·ƒv\°šfuò€}0-¼ã…˜%8;xÚi0°f ̸Îâ‡q!ÏÔç°£r´`âÌ|x9s¶·pM^À_Àyð`p\Æ °¿­€Ã€â߈Çü­À7p@¿þÁü”hºÑg0 ~=x ¸ø6^òèq×  Ò9Ý ++V€‹¨ac@sb7P…à=ÿ0ž_€—Ý€ù—€á¾òL6žœրÙyáü*Û÷à>0Ä»š w”ú -ÜØDp€^〽ª {™ô´²AœtH ,4³ƒ*OB„ôÀwÀ)ՋFŠBHÀz°„0qž¨óFÔÐóP⊙aÇxJ•êaŤòaìÀzÐÀ±í{`pV+þÜè÷`27 ånô9V\<´ˆ ëžۀ¸D„KTƒ“FÈˀÎëv`;À÷°‚à1à9° ¬tœÏfÃŇà*¯3`17Ðáì)hpv´Š rso8`0€1 90(Õ{^j€¼_Á0¸ v9À„€Ìë@T`ƒs€æ€tÀ*ùÐøSҀ‹¦äð±%à:ψ €®ç‚NÀ\>(pÖŽê@gÀ[°a²ÀdÀu`4@7ïŒ,ʀõ`=ˆ ¸ÐҀë|€Ðúþ|$œ¥èۀë|жô7€\Ïp `1¢ÙEQÊÔÐ_înÐhVMTÈÂD9Nɀˀ΋®€@[0ÁÊXõ~€‹©ùo 1 8˜» [kõƒÍî€lâÀ6€l­¢OˆkÀq`=ˆ°Ö„ÎbEÓC”¸ðä ˊ çˀÎúØ¢()ݰ¸n*ôw‰X…å@h€l¸ÀúëÍýބ?p B¯¥+@cc@Er"À£ƌ±``Î#¸¢ëÉôA˸”B‹Ç'`;ÀÿÈ.+ëb¼›H,.±á¹‡¿Þx7/Å#'™äMˆÍxó=‡d¯ µøßo^¬ÏCÃâáÿß­áÃ>.¯‡ù1¢ÿmOG¹´xVʎ±QHÿlz‡„%Õ¼hv›×àšaTùËð¤|าŽŒV­öüFUgàCK gýŽÛÃKq$Iû°Ç¡3ÔäLñø¿Ü†·C®ßÕ Y<}ôCV|¢ðÖ¿r`ˉ·1ÿ³ߐ‰cðÇr#ÇÊY<_”¼ÛáˆñëÒüšôm8çÅä9¸“|-•DQƒ·22ƒo"y2†÷Îù•¡n¸Ö+\Þ|âá ñù>y,÷3É”ž§¾yDc]·óðkoÅ,pdóOüKôË +0ÏïËï‹GäHs7vÿÙmSbäy ¬s&_«[tzŒêý+]^£È-Yô©ãÌñ5ü9ž1¿gÙjã>öå?¼u>ώ£xŸÝȝL¨¿U/ƒºj: Ï÷8j|S =âÀ±èÏg+%øé‹'Tˆù¿¡û²xñItð¡ÍYì¯UÙâÓøÖ-ç?›ù2!ôRIúšvU8–ôôH¨×(lû gŒžUí•Å<šÔîðܧáÔ§áÕ'áçð¡ã€%ñÛ À<`ۅ{âñwÑð—Ó¯ØË”ë…Fj®‘}ؼ¡îøeEњ~õ/wUx쪝Á d¨2y¼µ„ëTúÎeõË?èTxdœ­1*äïÝQþ™æÞŒ;;Ø}ñÁñ+þʶ?%Ѻ2sDõFüü‰wO@ï$Ûd§îGgÜÅæÏºJÜ eYáôge`\'•Iþ•±-êÿR[n·—~Y¿‹ Ypušú_wû¸]îß§òõŒöN_.fº×ÏLõajx!“üyx/יї ålˆÑÔÛI’L¹ÑVÚÿ—Ýb’TMå^·ÙëqeL½Û É]¹uã¼Å Ôs9Ù"|Ï"Ó¶>©à>Cï}ñ×ù°¤¿d=x£û-MŸ˜ÕӞ ö"Ól":ø²,\=·êͶØóm—Žê yLn#mÈämùÇ#‘¹är:žG#uÈäu\ŽGQUäP2¸ +ón¯õ¤ÛfM¸öd۟fMÔû2m׳&꽙7C¿ÿèïÿVŸeûµÛ_ÄìÄrç×ðô'¿åžùڄ|ùõ¿XYÞGn/.-êò쀍ªu~n€¼Àïl:cÙæë˜v±Žµ Ä÷Ã>Ûù+ÞŠ¯§ æãƒÀݘÅ9œ 3¶ü+>´^p×0^|¢@Jæ½½CzӁ‹ÓÔÃÝëJ¤B¶Ç+gH¹4a6ם“ÂjO­¼®wŸ_«Šn¼Ú®¹ Kžz¢‡˜–ÍHv<Üu•¾üvKݟ¡uzC˗Xv ÿòN2®¢±”§'ƒ)°Nï§bê +jÄñë`šûg‹ÎvЛA>ó$R»·ÛˆßWÐ õKóÉçÛáócá·¨=¡ÛÆÞΨãd[ûãÀ•½«›A1Ÿ×¶2#Waª>4<Ȏ§~|f@ó/Y=*³Ì"Wô»AP{ÔvŠ®³qEÑ,¸££®Š@~‘(ìԼƎèï2ÏÝ‹ÌºÌ +wh¿ÿ‰!uòn„jʼ›c²é\Ç&&yš¿7SË·?3»}ž]òw7Ûp¶Á·‹Ùù|ÎÏ#™·òù›x9›/™¸ƒ™¹òù›˜^šÇžp¹ç+¨'õ@¹4¥”·¡)”†Ñ¤$2GX1ê¼êmR‰ O7 qr`žæ‹Î PóX¥×SõW6P·½z†c ©æBªf\k/>B^h7Œ]pγ !,ûSÖùg&ü;1çEúã³Ü»å)=P¡¶h9Ëv;dóT³Wõ6O2“.ÝÄîT÷k¸bQZÐu¦È׿@=íÒ¥ÈjÒBßcÁíwf=ߜ)|åçëÇ ™ÃÐûÁâLÌÁœ—¡÷ÙrÐõlÐ~Â~ùâü17ÖýPµÂ<æ*y•h¼¬± óꎹ¸> 7Gﯜ>Ÿôb^ñُv§œI›(ûsð¶çÆeã³ÖðãBôç°Ûzւǝ]«ãAVî’`¢§ï8ù9Éã/Ÿu‚™˜R&ÇW^ß Ùó«QÊ9C×ìԕ­£R¹T|â~®žä¦žy5•ºøíçê*pq<ßÕ¶_qüö_qûV_©>ð¾y5ž½˜²Ìî8vg²;3ñ͇ýÈêêý=¼_2Ëlæn\Œ3 wvBÞÛt{Ö;¼?ÐÒRðÕ¸ý„Ïå±fh‘“µè¤-¦ûS†í·>árÆíHÌsì_0¢{AzFÊÍî*‘ø»i:(â Òºc[l¡+ïEäÎÇ©%M[´:ýœ¸«R?GOk;.n:E\ªƒ·§=,©Žr#!²ÖôĖjçـޝ˜Þ*nŽxpN."=š?ž!fÛïG­ -]äýsÖ wŸ +Ã.‘#ê;qG甛‘f¾íø½wN|ïËåÀ¨%G\?—†ãTzTJž’O=¹£\1ª‰‹Ev…tîîôXaRÝÁ6‹±5SZ8÷„—¦ÁË +ʋÁŸ’J©;H'ݪ•»ÈäÔâè-è%Ùo¥ifÂÜÃõ þÜ/ö­áÛÖðîáݎÕ|j¯=Ä\ÿ0_‹R¦i‘ÃÐùŠoõ•¼{8ŠÝˆÀú)1I”rN·=)X›!dÖÇ¡À“öÑhÀ eÞî=êšàQ±ÏEÍ»ó*ÓBúސ¯f«âŸº7%Ï\Txªzn[;Ó¢} hz\ùUVìÖ½(®Í˜î%¼Þ)Fxá¾V3~²i5eÊî]ã€ëÃK6îëÙÊâì¸}·ˆ×v¼Â‚>,¾Ž6ĺF‹q~âÔ4_F?di¯8rFo¤˜F3ÎoF\e½:ØñV×BßÍŽ$nÚõB ·ÏèÈ.ˆâ{;!éùîåq`zš«}w Ÿ½X„=õ½<×2iš· ~Ãg%Ò«Õlt‡Û÷²5«q®ë ÆoêËîOE8Jñåv€iפûÇüÊKˆ •ÌlÓѧJîK5{¿TŽ…C_Ax^Är“Tï BÍ« µQö€ FYöN@cœµæ`tc4ÎEJϟ#ÆHTÒz·kÑþâ®ó–ôæØkî°c²È;6-÷•6æYÊ;E5˜âÁ@ëߋº"èöØ«¯äÑ÷ 2Ïcd’}î*`kÒ­èªý0€×Ý%ê7³±ú±h֚¸«H ‘#‹³ÜÊ&2"ÑUˆ ÿ՚U°/oå=V]äåwòg*ßc6UËžWI%À±›×ùü}ØØ/‰âÌ1¾´z +»mèTzYK61ºëݲ OÉÐ%¤´kÌJ·£»½¹ðϒ¼ž÷ zA\å÷»A9~Ð?twƒ’ý@:ôßê®%ÄÑÿn¥ª‘ýÊ:]O—Dø•:Ÿu/ö:+ö)ù°è…Ôl,Ð`ŠÏ(&Ǘo—åÜeùw9~^§/˺ËòõCå»Z‹zeŒ/H¿f#±ª½1Ž-2, Œ( ¶è£˜=?½W}̔½6E[˜ò¸^€ú÷Ùĸ'M‰G+‡†SVj5ÍjïãøMSP¼µm©—* …|d¡é•”Iø£Õ> —,ÐIÁû·³?·Æút.-ښñ1æµeÀáŒglõ©ù4ÜÌ>™Ö༐ *ѳ°9_êlDW¿ßӓשçA¡F»×6Ù[f¤ ^Úkª.«Í¸wxî“SQ¢õšìÔ ë y4ç§9oOôØ)QᰒÁ­ÂIëü?jÂñDÚõI6bÖ#]¢-MG*ª2uu…àÝE^~귟hp`{Á@­ï `´ j4󙛃{´ÓzÞª8ق=÷x“ÿ÷¸2©y÷ËæoG™‘R؄5äËf¾lMïëMpd¶qzUÙi„ûڇûrpÚüø‹=Ó&]0㝨e›Å˜UǶe·\¾SŠ»¯r!f¬.‡ˆMû^ÈnÜs_¢Ðïn9%â@h·5$¥í"YAãI¢”/ù=NÕÌf¤C›;7'©%©ë +¬{z+±Ó޲ƒ”1²ç‚;5¸ëN΅5¼áˆšÓhÛ.¤‘ÝٟÂï0µí \] çVÝÓt²Êó—G.?[Eî*jÃÌ?‘V¹ßÔ¥´RX36¢f}A¹óS…L(@¶úˆÇ[;ýт-÷Ö¢¸‚4÷çÁ­>)E DËó9„àœgÛg8¯ž_Ø Ñ윺u˜(\ÎÎK½)ú«êOß \Q…®˜^Ñ4.UŒîÃcֈïÎÎC Á1¿ß2}(å¼nNEGvoˆ¬òóh + +J@ìªz¶,¡@é–;=ÓüHerB˜—íÞá©ËȪsEþª¬¸ûD’A¨¨Í^ÎܤEˆI¸hê´ÐÐóá‘Ømèw_8ù¥¡ì•úÁ'ŸÀ¯e9ÙÕMÑøøؘõ‰è Dt°ÎúT££ÍÐþ˜r“¤/Z9fQùÝeÅËÅÔJ»!mȨW®š¢nàK.ðqðŸÏÜcbAEÒàœ‰U¨D{ꘑޟC +ˆPaî/¼Û Õ“=àÀáT&ã³?Øåa™ÝEðG·Ôoýšž·[¡…@ælgóbG¯¨EáÂõ]ˆ Gú÷âk*Ðs þZèãñì#--µçŽ[/îÜäŸ7'ØVR¿R¿é~=Òü}Rü}Rü~m~?6¿œ_ޤRJ‘£ÒõÆ ‰šÕiú÷º âÌÏ_ždHûöãßjµ=¾—°Ý«wN/­ZoÁÆô"õ\ݤ[Ûùê\öØyB@®O`‹rN ñ×ç5$ˆ¬{ˆÌq»yµ Ѐý ±¾ªÕ¾["ç@öìv½ÅÞ¾ùXé®í{V낾5±zπ˜$ºÓÝÀj÷äw&ÐÎÄTz¿^ƒ‘‘ª¿O•/c?oÞé—Vº«<ý™ìM|jjR><ŽÄV¿«b(–JOcۋ\Œg`="PÜd^e/ÁƨÇ~Õ?=±þ}ZÙéC‚ŽM_=Ê~v·@i2ÄÁË86½ÊüžÄÂڛckا܊Œ’2öR7>ôš$I†Çµ™«Ïi™\2N¹obW…í†(gsÍ©Íë½°]엶V©Ÿ ­gÔíñÍel1ڝ·@=é½ñÿÁ›Ãà])âê?´8:)JWµ!c¬’àà%bêžmDÓš²à9óŽ”d½2uá¡W¶ùXËgõé¸ÓN:j³›âÐQ½@ÿöÃÿۏÿp?ýÈÿú‘ÿî‡ÿÕ [ٝ¸ˆùV‡³>ë÷&–P÷$¤{#¢?:„££GŽ}­ëºþÄþÝpºÁýO»‡QîÈ>”û±ó§ô4·Oû4óÌ ·{°ûŸÖ¡8'BGØ¡({¸Ž(½í­I_•Fàœ euDӀs![ꘐםZVËq#+Ú÷Ÿ\pX'ìPœÞˆx´FóסùýçÑ4›×K +çR\®w͟p!W›3à'ÏΖõɧhGÅçL¶9齉³÷ž‘½ÌYsý?ºCÿ_̲ç7Ð轀¾$ß{ ïÅóëfn…~ _>¾ÑO!{ ðEüÁú.MçŒ×ò~E*½3|sEeÖgÃôõÁäϟ‡ÿú=ûàh/ý¯úøz*ƒè}²=¹ +›Þþ9½‹¢÷~Øìô]7ÝK/‚©}hDߒm~yžØ/÷oàߝɹ“ý¬ +ñ6rot`ý8Gá„{à%÷áÐ(G "gtٛóÎϴх§„zÀæ}Ɛ<ó{OQòZP´pÃ÷Á5*Æ@G #Ú +ÊßÚsAτzqYUöä#¾ò_€xFä#ӄzà‰½‡{÷!ðG’´<#ro±4‚;@ŽG¬ö¦i´Ù–YaG˜Ó†v¡¬"o[v~ô#âZ¼ñ¿Y~òÁЏ€úA#ÿë`ê#ãŠÊ®8G¡7à?KszŠ çüP~oO¿ÁVà&0ŽÄ#ï î‚ÀÈã\‡aaÌ#Ü~˜Gï5!p÷AØXG®ö!Ô#ÞMìnÏåjž{ò‚=èGæ„4#óÂ>GÅùG6œ |#ØHyïŒç祄~7<>ï9ðµÿÂ3ÅVBgöaÜ#òÂ:/te„ "oÇ ÿ<#â|p5vV ïB>@G•Õ‡Aá¬#ðufôæÐMÞÚÏ|ÒޅӄLÖôÿkâ½ÊCËä,šúíiÞß÷Â÷AGDf yÞ¶0bQڊÉìË'~l#½÷<œÿˆMÂ?(#݊Éï½üÀ‰žÏ߄wÁ#ô>Gé|@oÑ<÷Œìµá+ìàÂ<¦Åç­ ïuXVP}XG³üpÍþpDÏ0VåÂ6æwCˆGrëB=°G¾ð<Õøu¦Û~HGEøaMÂ=xG¿ð:,î,"g…EîÅeGD#ÀZÊ~XG¯þI˜ÉÚä¶¡Ò^ÔÎFñ ?éãÂ;Џ/øPÂ=—» +®ñ<¿JxGàwáWÞ<÷H܄~`G}ï²›2Ê?}ӆŠXGâys{áAþ8G²øaXË$°‰½ñ9øqY'™ßø›à„ñ…d·¢òÁ¿i „yñY/îÂ&zM9½ˆÚð><°·9DÂ=hG¶üà¦Ø90r3ý¾Ü-L# #Є}ØGpÆõAÜ#Cpî ëMx+\ÐâÂ= Gñ‚3…dçï‚= Gâ„|`Ž6ä90µêª0‰žGuíÍ￀#ïB=°G謯8‚8G°÷A #˛߀°G߄y9á7„|`Ž(ØG±÷â²Kׄ|Š@*ØFXG°öaì#óB= á̈́zÀŽùó{H ßõ¼#ïÂ=Gá~ G¸ü€v‘H:üpv÷Fd;èGòÂ=ðFçt „{ xØîÂóÂ>ìÎÍíCéh„{ ~´Þ¼)ët>6ŒÙúýŒÔYtߊp¦ôÅdŸÄóX²mû>]ŠO™äþúË^7 e³$Hrxë-úgÔ %´* he¬¸ì؝•–ûwª¢¾ jiyÙ“·JpÞìi  6¤M¶G¬t„Q076HjF¨Äýñ“†ö8¹Cجa+ B6beXNwÉïÆrGR%ïýЀw_‚#ÈIf+> óœ~gÐYÐZO.ŠkÙ’ÌJD-õى4iŽQÈ d‰—y {–žTÄ4Å9÷0NÍh¤Ð ¸œÕøÉöþ{_‹ØŸˆr":y¹,Óh-fžîUK5ùžrÍN%š‹-þ2ÉRÕfp¢ÚåÀùU,×ÑÖkáKÈÐÂÍtˆÜ_ǰ]"Ab”¦Dk¨êƁÑɸi¦zCٚ.ž:B+¢_R U"×PLF¿ZÍ\Ê&iÆê¨òUJÙþ€ÿ •´>-bÍѥ䲛þ +^Ɗ‰ÿ%1½Yb¿«ÑJ;Į¶ÃQT³GÚ —¬([x±'#2V©?Hè¥ú¥Šh?½œ™ü©«Û‘º[QÆ­ñ‡Qóˉáiˆ“½7ñtjT¯Ñ¶•,Ót-§>ÚdŠINjlªY¨ïê¬ÓÿúÛØIsOÉa)|d¾'3ƒ»XÏÑNm°©}ўê4ϖg²Äe{yØü*#M+3ô|=L’atêW*ä«Î(s¸¸òNm%5¾V…:êv¹ƒÖlÁ]ÖµfË-=!ÊN±rñP@gԊB†ZÌfÙ®%ñ7ۜ)»¤sjüµ”€Ó>ÀÜ«YV·VÞ®2yÜÙ´‰™ó&2ëþ‚ûѱËÃRZ³z¢Î\/›#Æ«Ú=už9%¼Ðu‡àŽlœÍÐÿбR±¿Mgíº|eœ]?1gLÿN„¡$I§ËªÇ3„³£œ( zKYÌÍ^9«9÷c®´iŠÌ^aÇg´ååêe$qý…œÉZž”æ’nØK0øÀ«Ö,çéÁ^&JÎFXþh۞- ÃZÏ>t³þÊΕÛJͼވ§®åŸ8|3гÄOƒåºC¾åEcêÏ5Ó{·Då,ês(ÞbÏ}— +¥Ÿ-,µŸ*ˆÀeÀ³Å™’³éfä¶+ºaçж”BQ¾¥ #©¦uŽi}ί¥^(æìâûû+$·ñî ¯ï5h3]hVί_X¾zÐ}t|÷é­ïàJc’ÏöyÆ´Ìýý‹›Ê¿Ü¥¢üôÿkF< F’ »єª ¯¶Eoď¦¼Sü4GS­ +µ4®¾œiÉfbIš¸Õ–ŠqÄ3M$žòïS—|hýÉïÇH毴ϡ&0ƒ6‡=äÒÿÝh¯±N€‡/‡ xýÑJåFŒ|uŸìÄ¡iÐސå wû“>zїeSl[IóõÖÅØ|±} ‹6§Þˆˆ?úZG¶ômqÅè-%ôú I}¤¾‚Ò_C¿ÿêZKÓÉñt'ÿ·?óµ4&ñV”êSá +5¾,±ÖÕ¥­íZVމƒŒå‘µÙZ[Ϭ´·âi™w6Œ0圠±u-«²ê¤]h@§W„Œ]Š{ÚuV—$¥%šŸ¢Q´%9TúXÚ~Q ™} %d2dW4¨4¿¡e8ǛX´€6æQÆ: |ÛHÒ~0ž°@+é þôªI¡×îJ4Ó%§ÏÂ}U§ì]yĂ9``Ùuy2êæ¨Ïì]O×ZŠÅÕkV£ê ®$úÔ¿“>ÒÕ%ݜ´€`¹WÅÐZ”ÿZÔ§+¥Ö-å,¤ÆÂÔޘ¡Г Ýå­?T8¯ê­Qeœž¶H’ÆJylÔ7ÁM ßÿzÕ%¹ÇÈÇZ˜(2G ¬ú…væ­UIEK”µS‡@|Žû1(?ørAUûÿ’Õ•…(»#ÙÚ.ß4‹B[¥åh}v(4²Œ©jë6¦•–« õ"qâ …ÌZ¿±kZ¤Ïë­`öiëm°©h®^y>óµ£wì-]l²jê[m’’$¯¾^ZÖ¶ˆ‹cÆ8ƒÕuÃ]hß=ïϬµ™`²{ Yw›®µ™ÿ E¸õ-ËZø­­nm¤ç-køÖÖ8„¦«›Dç²骓¨Õkç­oï³—VÕw×õyXרìZâ¢Gb× PDïh:ƒaúfÍÅjI á­k£,ûI2If9iJ£j:”sð­wØRæ[ˆãŽ6ªS/¹k»gtiˆœæ­çI*ےèæ>JוDƒ²Eö$ïÀ’³f¹µ-tì-sU&¹kŽøõÓ1oÁ%­ê–µìëµôÉó×»u•õÄùÿQkŸ%?Qiý…®‹†Ê:¼Ì}ß6™+\ö]ŽäFHÓH¶Úº×=[¨Þ€±šnæ]½†X’ÿâ׌ +Œ–·ê$÷ÊZ÷¢ÚðÏÛþ ¿ þ’ù²¡·«Ø¾§âÌ´p~g]$[˜µùn 䵩ΰ<õ®ÒýU®»3 EiÙA«FGY£ÝÕ"gr×§‰PâZøÏ¨qïbk%¯Ÿ›4©k÷?Ak÷ý‹_¼£‹SbêIþ7Ä=º€v·—Å_.llm›ôÃ{ëVIñãF(ŽþYÕꖉ(#­èW§%ÚàØ¶A§KB¤£M1$]’¼§J‡Èì4Ä1ÌÑ_^Â÷é&ÐD5ÓKíÀ®=J§´>69çÊ%õ(>!÷šâ ™; Ðٜ­äµìÝõ’Ë›¥Y $ãmǪà|*ÒO„6wŠžÆpÄ»Ñë$Ûìa´–ô‚òé¯ñ­¢á-·~ Éx™ýf2*[yÔ*ØÉª|*%¢pàs8s:¨{Ø$N eôÄíÐõlWQx{; Î?ÃöÞ³ÿž¨y]Uë…÷ïþzÜ.¼Î®×øÓŽ‚ÜÏZܑ¨J¶Ôå[^VUú tº@'[3ŽkOÿ«t8¶¼ªÇh'µ-ÒöÕ<ûqÍÍ8çˆk̝:SÍwJ•+kªsUÛ]Ý]][R¶ÃjWwXu§XuÇWW^u‡WXJ–aµÖ›RÓl¶Ën6Ûm:·øµµÕê}¬’I$vÛ[ï—¯â݌»õ²ê)’»­Åa¦ìÍä–È@.ø˜¬5]ÛúH&ÃXÚ' Ã'€Ø ]³~n«7T×_nÎ&ƒÖÂ2ÂÃÔÿÌñzýµõVí$ý–Ž¥Fƒî*6‰ßÆåªWxÙ%7u¯ÎÒgÿ§‹Cîž,Tx™h‰/Ê[QøØôöϰÉõjX[×b¿û<ÇÄpØVÄjº«Ë]LL‹ï[ß#{x®Èìý|“ÿ}Úã™%êÑAÚœWíž=Û<âãêø|ƒÌ¿¸™ýÇöE‰3øŸßñ%bžŽbžŽbžŽbžŽbžŽbžŽbžŽbžŽbžŽbžŽbžŽbžŽ”ôr|åÞñG;°= bËI¾}5žMÕôSŒ=I„¬¶¤ ðLßk²,µÔ »;Úbzé ¢=}¡="ŸMe§¸€“ÏïÝ Ò±©åüÎÈúȞƒÏí,ïj‰ôؖzVgpÉ閔 î#Ƭ é[Äö•æzY Ý>WCz2Ë•åOŸ·çí ûKÏøV€¥¼žá€žˆ‘Éé´ôoº}wӟJWu€w x O_Ëòo`pö”ïk®@ @K'ªí+4÷x&z">ƒšÏKÑ'°«Ì±å»mÀíHóîŒô{bà õåËFF÷ Ÿõ@ùv`|ð>—¼cËwšÖ°1Àdžª­O0&ñàtÀu wÅjÖ¹ïC;®÷¬y0KXô#Àdöksg{ƒ|`6¶Of9P=ð¿¾OQï rtÑ©ê-îÕïÖ[«¦;ÜûÍÖnë̈́øøÜ5lð9:kb}/ŸÚ¾w¸…íý<{QùÀv¬ïo–Úp3Àq@OVß½Ø,ì ‰“Ù­¼ à í,x ™Î' `»xp' 3àý¼ö© w¹ftv喦PøøÈ¥n>=kVXú Ò½rè„s[ˆÖÒG +ëˆkÝà3½Ï76Ot: =ào:ž$¦[ð@ÚO’\þyޝCÖ>p>ñ r@tÀ{à:†Ox§‘/zð; >k'½SÚmýPð ãáˆ{=ÂDìž;QÛÀŸlÎu@{°:»ƒ!«[upc‚Œká›]Ӂ¬xñßc L œ{[¦Öð€Ú™=ößÞêÝ(h΄:p O›B'¿àN°Ü íYá外8BìÀéïu‰÷=n{ZcÜà³ÜR{í»¼=¬Wžã4'LŸpO•p™ÛŠ|°ñТ‡‰‹¸±ÙzÚِ'Í·>´è ó4"úx,*B|­í¬'Å6›’y9¿s>m¢€à€Òª¹'{Ív l¨YnŒLtùb?š܁ԁß3½æ.€å¤“ÉÐ3Ä]“×ئï-Ñî@Ÿl„0;ð'½}YP'ˆï}¨¨æ‡G‚^êÍ“ä —¢ ŒFÈ8È'Dž×2Ïrè2={ð;; 3¿8¸°:0;<6O‘=0®ì}-oÑÕ>ÞÅÏ·´8Α-älq#¾@ ö÷'z.t H|ÚsuûÉÀëÀù}"{‹¹‘'͐4i@èüà;p> yè(ì xÀsàt`tÀ~qè*ì ðtÃÃg{þmàn`eˁ ŠšWxcŠšë;Ò¾Ø[¥ ^”òv< Àé™ßݘH –ò >< ôjòÇ:ÖÙ^O¾\ð±Úåº`ÕÀˁǁÐtÇÅC RÀîÀÛ:p·ž–V{ñï°wÒÞ4 À öQ=ЏäỐøàtt`{=ðHß]Ÿ-Ô‡}êö“æµX 0ìÁ½1ÅW67Á÷%z>¤Â\ ”OƒP è¨ɪÝ?R³$"µ–€½ÅÇë»÷OEðè^eç6•;ÕðŸ»÷ÆKÈ=CŸáд³·óüǜX ú¹ 4þõv8!Ïßgç6ØLlÂXµêS`/|ÅH<:¸æó²ñøÄ¢gð*øîiö.Sñô°•Í6ùŒâû6ÿ"gě¼K§ç“–ÆrùLüçËɧîX}bû€Þ¯&ÂãËç·t§Grìôo™^\I>å^ZgwÔý\µE/«ë²=K½YÕýãÅLîÙ·s榙K-ÝÅ&1Öu*þ-cÅÑ`‹‚†s5ÌÏ©ÆzìÊg§ëj°¶çúIæ´|Óí?YägÚÑú3õ“)ѧïÒä“õúݒ~éúì0¼,1XP´M“= å™môÏõ”ÕÕïØîûº[û’æµ­ Ë ”¡ìÙuùJ³ÚŠ[#Ëã»Ä¾¯°´MhgÒ·?§N~i;±”}Ï²IØÄ£öïmXîÙݹâXìcËì•ju£®ÌöÙRõö‡ÀêxûÌ/{ÖF0@îA…'˜å^Nã%î]žõy1í!Mwì¯í;ÿ*ÿ‹ž°_Ú:´ôpށ?•„Üßæ˜‰ºªø¦/ªœý_Sñ’~ùùM·÷…õÚT½É¥£“ %DÃÈ?4`eqQJZHŸ“…èÜÑ`³8 =7Ȧ‘ÇÏg”µâ3Òxæ”_ ûí­ ,¼%¬¡JºÖ®×›ùniŸòùäëéh~.*õ‘i\%­bâÞ.ôBLېÿã±\ÿV—Á,Å2û§ZûW1–$„qÌ_&,´½ºP÷_ÜCÀ^üëbå.Ú­ilw‡Io˜:–Ô²ù<«Í³‚…–K¦¦ >n Q‰mQ{ɞSÒÂw%ÏrÎ7“=“$þ³2ýê ùŽª”}½:aôqWî°·ô›Þà/ÎÑ’ðµg5ò)£]?¥~óôiù*¾y¹ï~ç͚. ÓÁˆj´};3’ÙתÃÙM‰r»:òXÃrºªõûÅ{ü·M4uþɹŒÑð©MQyöÇó,FwÙ7'‰Ùr1³~^G͚K_iŸÎ‰™ÔÏÓ=JZ‰‘.ÎĺíE¼Èï;¨ ”yЦ:ªRR¬ŸëZ²“„l+}çoŽÚUÒµ¦KÙ»ŒŽ¦›ÁwÌÏ©K¬™©ëUx ˜8á*iñæ¥Á|GÞ/eÝ»Kôÿÿx U*ûOÂh}ÇAù¦[©sû»Š|ºû™’ú÷w¹Ã2á´_;I`‹ÃLrùE"Ê'›†˜³K×#U²ŸnhõiU»¿_Ö/Î/Ö/Ö/Ö/?ñw~¾*÷ìîý|ç³Ù†*\¨Öj6õ ¬7]»ö&¨É³M™?{/v͵÷ÿ¹«×§cÍ­q«Öüüß3:Ù }5¨÷«“W,þCžSzºM[¬V'À¦¾¾Ï9—Î<˜Ü?šu>Qõ©D¦©ÛjzlìUh:ªé𓩳¡J±ÚëÅÝݟ`ч`è¦Ç½0uÿÁ ]5*c]Î;Õøæ€vÑV¤±”ʺ•¶aßï/7‘}®+Þòþyú§Zf h®ÖUó¼•ÜÓ÷*ù_ÒW1€¾ÙÆÙÜk¨Ç‘®µ”ÏÍq’…Rªeólí_=´ Ï ­JÚdԟNX&¥Eh8è8š~1Z練ŠÎ𕛛 +ÍÒµY„Vw€¾Ö¯1œkKKŒ5†z†+§Sg^‚Ø˜’™wMetÅôÅ7ëàðØóAm¥џMÿºw7—‹†½ÀómÌa«à/ñeò³m)6‡ iª*ō{žbt¸ï0çìa}ã¤êa•[`/Ü=ÒO5Z,ÌãAHk ó©¶CR¾Pÿj—äáN®¢”ýKOßf÷Žáýˆ"´T¹i]v!R–òOíÏ«öJ’ð¶Mݨ¾”ú±X­ZšvÉ¿/#fǵHGz¹*"ªÜM´\=\2ì'o+ +W¬ãܙ“‡èö¥l’úÄaúá“çË2ÂVL‚qÓ|ÆV=8›ûTÓÁl§ƒ †ÄUJdÆEHõžs3ªd?ÈS•€¿•WúŒJ{ ¦þb–b^—0Q·u’d¦ôo¬ùHˆø ò¯;Š“kó¶Vo@ð¹oÅs7¸UÕxŽ ª¹Õ×%þƒës8Ÿ‹’æ÷¶mLMáÀöÁڈʵV n­îçI=5ú² ÕalØöð˜­Hn™ +ÊÌЧ_«»çŒ‹gO\‘:ûó†äy(üîF\ã)ö¸t³ÓÔÊW\PM€¿-?–æ'geÝR5Bu¤éª®©}íÏÚúŸŒ¥O1$ù¼…Ï)wŒ2¸¥ìSY.‚“y3ðþ¡–Ə¦t¶u©’êpû- J™¼k¢ù±ó\ Ž^n£ïÎ/îm Ô]•ö#«JEúøâÃSF¿Ü'”¥¡ŠHj'ŒªQQ«^i®ëÂÊFº4Jáã>Úgy9có8ãõ\Ο¹¹…†…ŒÝU¥*~)˜oøÉÑ-cÄ°n$2°®†Ú³±N¬³–±¶©¶õkKcÏ_å£]tð´-@TâlyìÜóZà°±¢æ±{WSÿ`âøÚûœ_û_[cøüa¤nœ*®Ký½Æ{ÔÌq˜þšm|n.s9ÄØ·«F¬Zý­YšíÀQSµP¦BõXαRµ”íîZÐá¥gR56P)RRÃutOrv 6ÐâŸ/Éb6LÛ¹…žuòÕ°²}ñ4­#w4ö'Ñ­éZm±±4©F¶ÒÚúñ‰ pé(Ž46Kî nqtûˆÞ̦²o°‰ÿÑ)ÿï¹<”¯d`ãh) Zù‰ÞyÿG<™êy×É%ý÷—¹ÖÏÛî¾ Óüj]×÷  +†9©.™—Z#ÖÿY$ÍM¶ºž½$Ǩõ’)­2Ӝ¤:«õX´«Vªs™mÕr'òPRw&o0m±Ô<‹Åtv’A¿& +)­“O—”ÃÔRù˜),¯]U™¥½³pßÇQӁŸï°^/dm»ë”WâQÔ¤Ïgxê_QþE'Ô¥Ùç8Ê9#„òT|Ìæ-ٽφŸQ~ +úJ.4æqõ5zå-à +àSZrzå?¨ÿ+.W`§µilÖՔ-‰¥öìOûë¦Õ©ˆŸù½wëa…m2ގM².){{M‘Œc܁{\>ª0öôÖ²ØóÑ­Ðû$\sÃ/PÄF6H·n™"ݞ¦ºÏO §ÕйíÖóÐWT^rÏ Âd@Ï3Ã/šfHµ}ØH€Ë<3 ¶‘<Ò´ê̟Ekz°5–d‘dÏ]°ç¿€M¨ö¥–¼ÚÖ[uï–[~25e£@  åÒ©åÓ¹ô­Êyuï»|Çj݀Ï|Éî° ãøZ݀ËóIïßB}.asUûó¿b¶,µ¤ ̐É͎å«ËÛXóeNÁŽ< 꿎íÎ'ËI½óœOZ ùpö +è²Ç¨Ø¾Õžl¸ø"U°6›rË[Y"EŸ>ñ̑ö@O %Ý:ߝO ´o€\ž<µ3Ã-[o<ݞj’!ýŠÞ²×P4 O.aõÀO.~ä~`àtß ŽK!¬|€¢ç€íÎà +óë-•xþ6yz uBòöÿ\‚G  ð/€÷À|&H„~oB¬ +žµjžÂsÀu@w@wç‡?Ÿª’!Yîf¬ú =•gp q j™ÜݐµÒ=ÎS`€žaŸ>¥‘Ym8P’Yó@c|èH|Êä2CÇ´‰–­§÷ÀO" +r _²CÃòÏ ¿ds, -ê~ÜÖZÕtYcȬ MÔ+`rÀjÀéë€ì€Ûz%–ø@cÉ ’ä ì €8 9 6Ñ55èܼU:øÕéáÚɅ’žh òp+§®}¿È^å1û.½PîÉ_d~҄¸ü-yYkx5uw”ðËæ€|ɒœ™ìŒÔ ÖwgÌgpe%3ÀõRŒwÉÖ¶H÷Ǧ\ωgp}FHPgŒ¤=¨›;€“çޏHeýÀï@ï€ú€x7¦(•,|QƳõ)Ü[Xk©=]}ˆßø¢gÐEð@\˜¸ÞøÇ¸´µ¾08 8 /€Ÿwò>˜îÿ¶ÔÎàLº¾ž³v¸'p$|ÓÃ2›ðsp:°>@y* ʲ;Y¬»pp!¶L ð€ïÀËÀÓK,µ앒QÀaŒ˜‰r Ö¼rǛ€5¹©‡Q2Ǜ5¯è`tàu@z£ä‡¨«°4ÓAçæ“í>ÞˆH¼Àaāú w o½Pqp.€½–TBJNTƹ(ùÁ°/HΆ^P_:yÆž ÀÑ3¸:°6Yá p2oÝÆ¨©ž–â@Ÿ%…ly5ûcŸSx€:ŒXh|Œ¤ì wVŒÇ­g†k6sì§lûJ7>jrÏc«ç°Fð:°;ãÚv{¡«>,Õ@ë€ÊaDÀÈгځׁµ;°5m”)Ü \P::°'Þýß àp°=¨@Ú ÐÀ÷‡ß(ï×\`ø¬Mځ܁ô€ðÀâ°ÁêÀï@ðÀÓQ…Ü ŠG¼<ø,'ºËøàmhƒXð垔ڄú´OD‹ø–pt;gr4/•?ÿú¸ôhšCDVÖþ³ÙÛn1þ¿º•¸_úðÉNÿ=IÔh‡÷ÉFÝxhíѹcú›±?koÝÓt 4Š4^ÕЬÚ3 ýv’Ø9ƾº4zhðBëÁG¢ˆÇ¹>+€¾”kÕñسñæèêÞª–?†Im´ýÆ™ë’q™CÔ]ñ޳¯Pq?5Hìó˜øTO¢ß/H‚«–;DÊÖQ~d><ÔJ£Fúv[bæ©ÞÆeh™YTJ!ò2Cë푋x}||ÓÔxáYÞ÷õT‡s£™¤P¢YZ0,9ÚYoœòQöÐZ¯~«DU1ýxÿ½CDcuiüämC㵩•c'Góö‚“à#mi¢˜J'Áœ$e™6rY¬èÂò]4Ö¿°ÔÜÙìøÅæ?Öá*|äÌ« G çj¹§„“}ó——xŠ*™sÿï!SÉ#â¿xbÀ§b«­å‡mࢎ[ò~R÷zËyaêÚY[W`/þåÖNÈ>Â_ý9”Åf‘®;bå·¹ü/NizrGÿè?Òå±^§þORI8¾ëÔÅzqéÕ(^ÙÞÉÄ'¹?r÷)%ŽÜ™%Rܘ%×=ÙBÉ­$îIŒïé{¿ç‹?¸õ§Z—­º2^›Šõ¿¡ël#ÏÉ6ÞN 6%›7ÐEzßöEo¯|Œ:7ØìkHÿµKÖ¡ë 6© ©>›Þš,£7?GE‚it:ÄkÑ£¼ÕA¨cÆ'RªZDB©ÛFd> dêþôkõ¨ûc_è"‰YŠƒ:Ävá'Ý3OÆ©Ïô.›¨N–N”?’ÐYZ^áihц +)¦·ôê^äé¢În–ã+Sz­s˜„ïö´ŠpÃæÙ°‰ÿi?å2ÊP½DBkQCyã£öc6õ GÒ ~Ó'šd…Ù³_Šuú|R‘7‰oÂ0÷±ýª­”ïðJg9Ä7 ÷e7Sg,ߒËË'š‚þ¿†cÙÈ678Oø±õHꢋÊGÙFØIÓÁG€ÚaëUbFÀëjs6²Ÿ¦gî­ÁKˆ¢¦WYXþ™~w(Ñ ,öŒLºœ7êW=(“ÍJûS Ç-lbŽï;×x.w«ô ÂViqìe›Õ©6t:p)‚|Ï@·SÄÛêØ ÊÖ¬*(ðùA3à¡¢-Ñè„0÷Li? *à/Aؒ’žÑ™êëغJ¨ép¹>)H½ `”7ºêP/m_Ê^Ą»œD‹SÈÕ0ƒLpÓŸêÛüÕ: ±vöýÏØt4ábkÚ:¡«´šÑ>;²¤§*þ>3h|ªƒc1ˆZQñxgƒ†x1xgƒ¨# #¨#¨#¨#?ÿÒT®ÀŒÅYÿÏxƒY %;´×!ûÜ3k€¾Õ›”ßôís\£øZÎS½ïÑ£F¡›#Ÿs†li¯HŔïëLt_­Ý£ÐFÅ»?ü6joF¶G¦4i¯¦Ñ—æ© vۓ5?éªðí”ÿs/îqNfgӁmQPŒ¸Ê£'-{CiW¬`nZ°¯±AÁz«o=̓Ëi3gƳÃójŸ*Žý› +“h"l͞X.[ ûEG ¿× ×JÎ +§‹V e:{ò2謙ÎÏ¥ÇkÓoP³Î~m* +­ÁÓX%´*P8ˆ6tjýÝÔªŠ¡1þ¶ÇiÂØ‹VøJ\Láè·0%å±s;-qpõ$y,>Zl\~l%Dlçðh¡t™«Ò›²MÆÌ²ÕÿyT؂:p³¾:5HJG÷ízç8˜}ÿb×¶Òsg>›´²ÔÚT¼B³Œ1Õ·)d¯ J/hn×÷ÚÛ՘ î‘܈¿ðPÖs¿ƒk/ý®†l?ÍÃ69û®Š}«ªU}Z·¤ìQòĺºÔ&ãåWd®R«îºgô¨þ2¹‰¾sðÃðKmüR´{ÔdÐo’yçæC›{%ivŠÒ*½íz‹¹©›,ߣý@…sG®Žª^6tôÛKØÓ‰¢Ý>ëE‡·Œ°Ú™`ª8„.Yùer¨InÅ9|²ÑfÙÄfâ–žl6ÔºìXpÙ8.ó /AW,ür(Põ—*lª!8ªÜFrÓªÿӆ)jh*!¥œ;,rР¶´„òu¦\”Óßí*é+soXÌ9Õ"SOÄy•aBaæ„ZÍÒÎc÷”Û€ýèqĆúl¾kgC E¼i!ŒW_tŵûXBt¸›i˜Œ6Güût'ÉU}ÆÃÿmº#mƒ«¯TKUþÛ°Uµ<9++ W+*͵ÄÍ ©S0{kî¥åZÖ îIjMZÛü¤t§U­,þ¡@ Ö8z…Kº­i‡:nEM™é>FÒ"޵÷ m«éˆmO[óæSi?nžbíÓÉ%ªÚhkä ÿñ€»uXTFÓ-\G`ª +&ׇ¯bm‘<ƒ¤·F‡k‹_ôüvdõk&nـ—£sÛO¨c™bÎ|ÐÁÄqP¯Dã9$`€Ñ‰*ýyÁSú\2š‚@Åý<1¿Uû•n1ŽÀÁ·àˆðDÊ:vKtªÙ(Zo›MTº‰º«ª?ԕY(ÈJFI% HKl)RÜLhLAàLR…¸ +ä@¸V…¹T¸¶ã\+r=@½ÖÙdÇt?²=I“켉lß_S{ñ(£ne‰í¥Ì]&­êcš“Ü}ìyÿÙje…–Óó¦>Óιo'w«Ÿ`›Wà(Tcf1³ـ lÀßp$ÝýKÒr¦•æIêŽÖI®i N£1ýw*Šš¤z6.¬J+îÜ¡ÞiN~WՕãÂ±V£}¹ceû±²ýØñ¿ xß†Ù½æŸøeô&SñòÙ£ÂÚÇß9Nµ +‡Fm_­E6³,P…ã:¢ë÷­sï1šäŸÕgí—ùÔeBöªõÙ¹êÞ2ó“^=šÖOhâZÏÇeæýÿÃ=Ëéa¦?eїù5¯)Ñy~tݯÕüè²Q]å.™Í5^ÿߍ]QÇøcž«ÊüíŽbǟßòɖ rº|û¥|&*?öÚ_˱÷›ìümôD ûÁ¹ÿ›Cy/Ó}¡ªë~8ñ¡¬xÐֈ€XÁē¡oõ`r„®µÏ7ØS?hޝ´™]Zo ÓxÍ¢o„ê]y+¨w wd˧뀹é蘘=ïÜð)+®{p=A2ê3+£vàpœÙt^Ô‚gçÆÓÑ×°ÇLXÌß%vDèZýظVE¸xyÇ´€ô#ŸÀ›ãE¯«±ÇáGÿo)Ü㎁Àê@î⹯ÔÚÀ~@×ÀçÀõ`v%Œ­p˜få@›é`®x@vß]ÀÎ}ذo *Ì®¡Æ.³êKb™]Kځï€ñ8s«ªlÀç —a›éïbÃaèØc‹2¹´Ìº?’œt&Rԁ֖2=Øð¬y„®+–w`Mô g×Œ¤ҁì€ö p^GÉ:ýP )2é³:½€îQ†98,HèÌ”œ° ¼9·â=0ÕÀíKüíÀ÷Àw@|08TqXPÁ+˜u…Œvs~œGY¾…!}@à06ž¤m°5Ø¡Ã`q&ø•~™¬%q­ªA“¡+ԁÖíÀå¹vÑræ~FôNG0:ׁã9ÑÚx(¤ ¾F«ó@zžxp_˜p‹dtÖ8h (¤¤´^`f¸Æ ûÓ÷ vRW›â‘¦Hî옸ì¡Ð˜ÐÜè8wAdžʓ.—˜ręt?HX±ÚځÀg†Óƒ†n¼ÈJìÄ>:ã¥فâùñ,x8xì MíëہÖÜK; Û2¶ÆÎ`ì,Àè,Øý`u€y{S|Ÿ¬ˆ'ՁׁîÀø@p½è|¬ÀrÔM¶ÜÍ;¨ÁÜðLœ:ÓÆó p z =h:xÿàuˤðÖö°:`=`„LFځëÀòþÄu¾°³ƒèòÀtº& 6kší¶zRä³>[¡W™I–<²Lb7ÈÐU˜°Vu;þZ-n]¼ý¿ìèa՛ÉÏÉ0þ:¬º¾þՃÑ[p¬ÖÔ¢¿ßt4¦aBh΋öN/6[pôÄ[öŽV/BZ–-Ӟ¡kËêjYf¹ #ém,~Cc<³Ž@‹’[,äÖÙb +tU!F`]>PU͑ùÚpýºHðf¤çõ2†-âßí²ë貒 £g¦Èõ«†]Zt §9ävp‘´_HcrÊM½mt=¯@¬Z^(ÍÓ¦ã_Ôát?¹*:œÿÿ²êÙIX «)ñ¿§ÉÇòÝÒÑo°FÕEš3A=±e`ÖK+TÞ: ¾l± ûüÿ‹&×8ñ6åÒú“¬úŠSý%u +fb_3ú\f´&{ià»ËÛ+eÒ¨e<ی£? ã(ÏÌ8±/æª2> ©—DÊýÎ[-Ñú\:¶\ïõ¸ïCmBï=ôeóÇ~¸íâ7éÂÞt²² Ç(Cðxuâ¯éðêyÿÖìÄù¾ŽÝ3‡À¨Ÿ\ÔwL°%z*2í³új™|›N)ÅÑ9¬;FÃÄà{T²Ý3ÿr +[Úڝ±¨ž`˜6z£#û{a¾Ëà†]ʊ• ýõK×<¦ó–DÑë—ÅEeð¹ü˜X/ýzndëP-¼æ ¤©7zMÔkøûé•òÁ¢¼çóëið²Áºw•Q6Ò÷]+ìý]òßªöÉ ²s9Ö\4AFi{BJSyêŒçËe‚+¦s6ž[O?^7L°¦ÿOÄ»§¿×ûI8¿E•*éæMüíX9)ÎôRÚQî…L°Mi:<ɪɝÙ)MQ‚êUÚ~T·<šŒ°7 E е>‰,¯Õ§_ª: S Yš–Ú¦r+.Ÿ%¢Ußêez¯É"z}¬§¡ûGpâúås…•Û¢œ‹IenkŽûrì6®ù>«¦†Wbó+¯µq 34‘…7l®Ýš9ÆÞ«+·~cZÚê)¢Ì)â[£!«îwÅîÜÎç~Ú"y—Q¯ƒyÚ}ÜÄÊoޛ{´ýï™M»ñ/[…Tªë99‘Ûöä={³ðÙ^ U^$d~×ÄUœ®2^epçΣðÌC6žo«¯¿ÐZ ”ÿû¡Ýûºõ²¬ùåÍïMo`–8¯Oíä®:-ÐƬsX琡Po‹S~îPtXRÅUJU€'¤ŠŽ¬s¥]ý–롲¤3 L¯­ùˆù;™ ëÿkkŤúOçà՛ñ«7ãVoƬߍY¿@ñ :ý܁ãû8§l‚WGÉtù*vQ'¤t&ŒäÛÅèS÷™`Û쬯×;gþ¥kŠ©r¡–ðh¤¿°ÐË b´sΑŒîGWJîaSšH/YûË|öŠá<ä쥯-.ѝ x6JP íÜ:9û—­W~»y~:†»>—HoßìÚÑÞsݱÕUù<²Úê¶UJ<}?y–.žö&znýÑÊ6E²Çêäo®ß!½=ͬIJAT0wØ*TªâdúZ3t ІX’ˆz9ç¹ÉA–½ÙâŒÙ4õTCì îþ.îâ×ÉW4Úºiڋž—å ²ñ/`بäÖþG&ÁÞ´Ûm¿s:xU7Rv• ›)ïŸÌe‡¾D¢5²"/‘²kdF^Ƀ"BðöL—‡²q;ΪÞt8ñ+—_t8-Ò¿YEíoÐà²G':íýš6ËT™_û}ÐæÁÐ/ \â‚&ÖXû~®màðlA³ÿN‡^u¿{r[u7á\ªŽˆ w¢¶¥kþ„l©îçYK(SB©®s®‡Õ{õ¿ŠBõÝ+i¡ÖrÝ·[¶©dHð2³Ø§yz•\$³5™cŽ…3Ñ¢{¶]+Ã<ôjȽ²\ÔZ¨Ëß,ݼtC/–…ügDCöa/”ùð—,« ·NˆÖîë, r´àî( y–I¿Ä|Ï«`Âè–O<Y*ºìl8«F¦´ PúÎû¢w™eK첟 JÇyéVú¢ûÌĂm“ÿ|šÞ +T(e•m7ëÕ?Úq¦ÒK”çЬ*‹ú¶j@Jàœüö‚yIû +w|,¥à¼°Ñ‚¹úú½0WF¯Îÿ`R“¿Øê¸ÿBD*h(˶&v“>¥AU²Ï³X«cËJÃͪ[Té[wV6îöÛ)ÔÉÆr¨l™‰0Ýz³¬¢ ’òÕäÝ»tb:Öðé,•!YiêÝJ±•ÚÚ¥E¢£þœ°ë†MUrЂÀTEê8ujÕH«|G;á¬:Xç^\Ê­ƒ+ybŠ„ + ®þþ‚ÄñE¡éˆdæQ´ŸÎ”}¬§EUáÙ§X>±ñläÔ°ñ9[kë׊•eÐe¢<ۑ&ÒHeÙ¨O2޳©~Ÿi¾Õj²Ñø9-ª”»Î±ká@½ª~äa—–Ô¬g¹aºÙ@}} V“6˜±o_`ó¨žÊ}krúݗnâae­|UÎR¶¾Ú0²×/z­cËƗë²×ùE­ó¬%[nÛ°×:›-jãKx¡7ã:8ì‡å•’ª­>Õ¸ÖÊÆÙ+Ÿ8©CÊv£\ª µ”µ¥VËyÌ"ËuÒ;…‚ÌØQ)£~ÉVÉ4ÔË`Ô]Z¸)E®¥UwÖwî\ø©~K¶ý/À •;/6wÕ,@®€¨5½ ó(:#º°Š}G6RßÊ"ƒ¹N@Ià¿ #9Îhs¨nvʕknPÿ¼‰óïÙ fÍ­ºW~ü‰ê6ه®»:­ ðuõV\êƒö. æÏL¦ÖŸm0ÙÝʦoÆõNÔ]ÕÚP¹‹AÞ\ñuaՒI魎ˆÞZ,ýnE´”é$r©iYò8ÖPO„¤6á²Ùxvì÷$‰[2½Ýþc-•{¦é÷÷w'RËJ¦5E /󿮣3Lk)ØÖS¹R¿+mÊìr’‚_ÿÜ¥~ý=µלµ&¾Œž-þöRɆÍþu*Uö_}–¨’eëŸ8NƒÙ¢zþ¥ª­cÞ#[‘JÑÝg*Y$¾ËNOøÏ¶lúˆ‹~ÃÖí(h&5y?Ìe¤ðV™“sÕìK/•GÁ`ó4ˆogo(¶Õeì•?—ìtÑPöhبv´]‡© '^›îõ?¿y7 ìT€gQع韃_¸]°Þs=ë,óû¼æ|ª_}Îñ+¨Œ7€Ë0¦ä§O‰–^ª¯ŒºgofÎ%Q‰äGºèšiÉÕÝFúo‘¬â)ÜD­Fª¶y$­Ó^¾ïlÔ¹Ä²ïtEËnÇÊ£´PòÄÕ»ñõ7z˜gµ‡cד“³VñŠÕŒðC_¿Ý0[7©jCwûx Q:» YZóAàn˜Ö¢÷¨B_ÀË@Þ£J©=d?¶­æ û:tÍ5 ´ sBÕB‹·Gv·@ßíkSöîVœ°-5^Ùð­9d9ûe¤ÿ•¤™‘èS©ß-;á¼­ònJo(4·™f)â¿.âfW¥Mº¢‹-(3XvÚ¢Nl{„pÀ\Štay'0ÿ“¥wIË,ùe/ûÇÝ0éðÁü[ƒÍ1­QcZ¢ÆµEj‹û«TXQ9ø»™m`½›B#Å]|µNqu¤îå»E-|"‚ÔÅëßø ,ââYÔå-‹jØofµOÀ[Ô å:@¦Ó” ["²? µÊ8NOmC…áZ­³òÖ±xâï×ûV°5k¦¶Tò[JCM®ü­Åy¼Fùk*†WŒò‹ »MæëÅÔHMÅZôí~T寲Ò{ËÛSôÚsÍ9î¾»ÔùÃg—)(–S|c.å!ún‹eé”Õ[¶uj‹±U£>NÏ8Ú*å(%ÁUyÿ 0PVÃâAíZ[<žòK]ÉÐZ²[qº]ßÒRAo쭎ßJ=­–^µ¿e¥ó(iõRŽÿqÒ÷ÂO*Ú]‹[Âz8’.ñwF³PŸ°é†r.¸(~l«uäœÎF¸×-¡rŽqó4gl²” õ±d%¦‰¯þ¼qÿu|XÌþ-¢ñ=|°ï•žêEfeïðZ·ø2ÎX¡FøÑͪé+ºú;O˜)¦ÔB—§œ÷]3ŸôjwF©­ÿ¿’¸égƒ±l>~DŽ„½î·óÅU~ÿGq/â^5ļk‰x×ñ®%ã\KƸ—q/â^5ļk‰À¸—´Ò_.%òdË1LéÁõ€MçT®ÜÞ9<þ rMðK ‘ÓÑtàæÌܼq.(ñ$¸£³™âÜô,UŽœ™dŽ;ÿÇû·Y3¦ÿ7´€ý}ϱ૜òDՃ|?þõÀMì-žÜ ¼eúâüÓ yÐ=Pyàro<<³?†ç‡Ó..$ù6Ãߛsêjµ˜Ö쯴Þì~ô@v`w@}Çû®œ^ܨÇ0Á¾àjóDéÈæèÀëîò¿ˆ9Ï0Åp|b›Íñœ?ž;+é7œ&öSç2³%ù¾Y¦m pÏÒÙþ+ î´ÞÊқÉyS{/ˆŽ&WÂo¤Ó=ˆ¨çñ†Ço®m]x´¼ßËë¥lÐ0Æ v†,›æsO\ßò¦øw¶ÍzӁݙpÿ…ìhÃbL¬ç¨7Å|8‘a€4™Y/\Ã7—$˜a¯íø`l}ýàz€;ðfïK„s}kG›ë}TeE•†›3nè}ýÈ=3§ ì€øpË`}. ÿhñ&táséɕì@îñ¤ÊÅLʸrc´Í-ó6.™TŽ`7ٗ ü:p>h7҈o‚S¾ — ý€Ò¸…ÖcgMÞÞÉ͛Ë݀”>féä 3b›3`ɬØúc²¥šãx3FL©wÚí@ñ<³ w\±¼ßaŽøä™RI¼¶®&T›Çúsy¶°ÃM‘þ£œM™µq@v xR#Õ¾À×âÆßÇã;ÆË–`¹7ȤÑ.ÌÊDzÐ>ÔvÜ˄²ÌÎ8‚e 9À:Ð; è ŒáàxùâÀôÀ{={æ¬ Ûc|:p'Ž$”¸¼xÂkìF¶V‰Ñ ö¬«×÷@}èÈÈlß4‰=æˆî›Xàx9n7¸ÀØÇågÝðÏèGWàx¯d!LFNº7ÂðŸW)¤`¼þ=:׍’lòþ_ƒ=ï-–Ùp¦ožñ¿jÝ4ŸÛýµxÆ·éÿ5Âü¢&Ç]ôYù%Mª>zTDñ.ï`VN"xmRánS·ëg:_¶Jì• )5¢¯Êu¸[.µ”5ï3~¿‚ãjá6®mG½p¦[†X§ni6ŧÉ/ÆÒRÇsÒrƒ1ӗúò0ÏmÜuÚIF`<Ål­)m’†ÓRµŽjO'ß»af—ƒFh'ßÐÏ pãrºüԘªßö“=ù"Iä&Èféӏ©pÞ¶¯Þvš¯%È yp‡$ß(rÙ6δ̜®ñpöö®úá6-|ùñ•mJM.ïëêtç|Ä[T×rk\D´êâ%—aMjX5õö„¶¬’?çA +L½ã§5”D§íÜÀ_ꧬV‰¨;Ÿƒôn}a|²é¸zKŽÙ£´Ï©ç\ZäIJÉuW¡clê4§L%Y+™´0>7ƒW¯-eþw&©qÒßÍåÿˆþ—(å\U@Û©ÿÚåӒCÛ—à¥©Š¾¬—9M tR_(œ…¤â'øJ^ës eË +áe—cï^oaéÒÜ׺‡kyº„·¿t·êÜ0®iÕ5œ)¬Šë¥»feöÈ|TÝód¹µ‘EcÞ¥CR·?üK›¼ +’³h”½Hå Ù$DfuËi 7”v–*-Óü‹‰¥±r4 ²(ìº+Ÿ7÷ Äø7¾úçîÝ'¥jé.)ޖFk¼Z®S¦C4Yíªt_%ÓZtlÖ˦߂”W¬Ô𜲏–eçÉ!· +¿ééÓ  ø¦Q.‘f;Ý Ô£¸gR”5N˜Í'óÝì^ò UUÓ'Á++N֗Dó$Ö4ó®P+䊷ûDo.üôwK©TlÔ.¦ßO0çÖMÝN;Íu ª–è.ªk.§íо«t›bÎ/{*]®÷YqÊOU×)‰×Ty +v ³w¾ N«°~v”’|öûQ†Ã…k©îNyOwâMùî“í(âtcGÔ²¿Á¨Ì¼ÿ%Ó:Û;!U՟ub¸ßZéÌÓGçîgɇ¡ØuØú!ƒ¢ûÌÕïx_’´^Ù4+֓9RÝ6I:Òù4—R¨©#µ— 'ùFD§{¢[Úgïºku!'aŒ:«ªy®åëËìÐ}S‘š©ïè튭Œ$˜6DiŽÉ#ÙZMAz×+o\ڑ#*<3¶3W†Ös):‚;ØEò©«1ü¥×[ݎ×ïm¿ç»¥©·JÕtâ¿R-~Nie<¡ö[ëüGˆ7æw£ ’ï{¨U2Ê£q2¥Z¸mV‰ÿev'*=eØ]þÁ¬»ál_|-ƒó;ŒÅm“£c”¡«×Öp.¼lÝÂÏ,»ˆ•Þ)GÆÜc¢l•.°`]­ŸÔ™ +ºÑaþJ²¤4žŽ—­ã$Õà÷ú÷}ÞùþÅÙ«÷«t÷oǝ Ûu^«m·Bñ—"D*„–‰7Br =%Ú;ûÅå‘Ý…KsÖKoøvòpÖ¿ÕvãÌ%×û½po>™P[×ÇòÒº;Ÿq‡jÕÐ;$vw(¨ÝQyˆŒ¦©W t]@œ”’T®mûd£`Þ鞭ܫΟôôçQš^êë¯Ê]Òå¨Òç¯%ç¼PêÞÛÛ&%ÂJ 'MûÕӃ½'·‰w’Ò\˜\÷H‚Úv’MšIßåÙ)zDp.ôà0Q‹5¹ÝIùpóÊt<òŸË/¯n¡íüØOu¼'QÂ…Þ oÙ.Ìß>œË¹T’ÎÎM蟎¼mÜ— 1 íÄ÷|εà^Ž’ð.Í+?€;=Zð.UC-•f˙ vT¼ ͒Q%‘ÊNq‘AFâÓ¹O}·o¤T»÷J¾j0Çí²w: +_uí’ãýFm÷•Õ/н—@±n}.Áׯg3'˜š**&éA—œ´Öëzhu®þZ£›6W›;Õ´O6¬‡W~¬§µý³—­Ô{¿U>u.èTMŠÓ3zirµàž,¨z¶í*«Á6ÝǺj¤|Zf:æ­f‘ê’&èÒμ’j“>ªðíûìµÉÖ±Ä;†PßèeKÄÕE«$j+.ù'eeBVx +±ìõUš:¤›Wÿnææ%yVÒ\. P×aIVÙ;¼ž–ôã"fÓ^ƒÞm·¼!n]^¿aë ’Ö‡Ø:¯ú«ÐàþîAŒb¶æj,^ÕÐYéM틭“ ³wÐÆÊNÞ¥#-ÜG›wkûô¸eêá3¨9k*A«¾l+ ŸSxes‚^t)Õ|+&†-íñå¥á¯OÞäû2QB¼W£¼~Òõ Ó^a2µ½ènÁ=ìÚÐÒüˆÏz{ôôÄ^¹Òð ÿ¦qK‚wQÛ52Èג«ÞiT©COùeß¶z_z^ÝTÊô§¿yzVüóïÞ8¾€ÍyÌ*¢Ú­´Þ4¾ˆñœéÀê6«43{|äÖ÷Û%zRݺ¢…g]k¨7ªãÌEêõïk[mÿºA„Ó;+–ºëÓ;èÉf– )+Šºë’;‰'MÈëj¸ë²M|Ÿ¼’óI{ÊûÉ'bÓC Ã!BŒe1†B”„2˜£ ÊBjRe(Ã3¤²DI«dÖ;1 þûï¿þûîýÞû¾êêóòóóI5•UgY4%„’ÂiaI©HSÄØÁ±ŠcÜMÁÜ:R˜Á¶Æ1C]ÃÅ ‰ˆ^üÆánFäíÄÜNÐïv¶[#nJüþÿ»uL¹Åè]SKçuzcÌmý…"µÙQFÊè:Kõ™¦SÊS2T{.û'ç®ÓMÁ_vTÐñUJX6SeAº×ñxt‡ìÞ¸ÎUu¦bLÇ(â|ÎÐEÃS‰ y+Ú¸a¿"êØ6Œ8՞¤%+Št”ÄøD½›ûðûvN.ÿ…5|~ĀJÊQq×«f8N·R¥~˱ou»«)úšº¯Ù°w£R·=ê„–ÆR’¥r¹tœ-ÏÞÏ«»ØÁ¹±Ô·}Óì¸oš;ôþl_Òý¹+ÜÚ kã|_ƒ +øßÍ_±k鯍e6¶UŠTD6óIRb*ö]¼‡—hâØÁg³©»·Uçóg¢¾/4½f‰sìýSq5|³kæ×A|òê-kê—WÑl_A®µ–É˼§Jú¿ˆ¾‘‚¼¯‰V+§ê⯣ÓD‡ªœ¾“v‰U 闣¶WŽVô;4{Ë諉R¿zz÷ëa/ŸÅLEÿÆüÎx>0Ý\Œ+æ˜WÍ0¯š~Úù¦sëä/qLÞøJ|Ÿßî^ëçzêù}ú-|Çæ>zµx¼(»•Y*¢m±ríæ9~å±N`žõBººëãh{w4KfSEó§9Lá!SàBxÅp‘óË»>¹¼²p$‹Ï_^¯ko䅱 ‚ò6Åú<ì_V§ÄÉ^®u KÉÈØÅMŸ!ÉÞo1°žWD9 ´qqBúû>c‘ƊƵ¡…`ٖ]^ŠÉLô£ìÜ©=fñ(ìÞ1JémÕA¢Ã˜¹…%]ñJ•–߆º#ÉGIÒ¬ÆÍÖ¾“fì»Z.µôŒ!k4 ¾}Ÿuxså]ʛ+.­yz»ºשÝSu{Y|úñ7ÊWȨ†ôÚ埗º4´¬õôŸq~r^Ö6Ó¬Ûÿý_OW“,üK«çßN_AºQûýËêôà’.K…kð×ÒK#áà³‡钗Q_õªEã/®`Ò5åÕ>.úÿJV¼³\tÛ­[]UspI§,¦äéŠBŒµ»G:ò»W²šÛRQ—ÊÁú²8E//Rò çvÕJ8&Zf8H?+ý.­¯& ëHÆl·ú°c0™þõÁËÃhAÿ@V5#v­—³mIç¯ÔUՃ¦?‘óýÞÏYwÌÃɸW²H?3ìÕ¹ÁßìÔý?·‘yòü+åøWËð¯—á_/¾_…|¿ +ù~òü+åøWËð¯—ý5òüžùzÙµÒÔՐüÁ+|X˜Kæôelª&÷Ÿ^o~ÑæòvיãÚk46l›Fqçñ‡¢{eA؁ì@›Å,N஫—–üfšì€›Þ“¯È4Ö[Cíçî‹}`xÿ69 žšŸÇG‹ÉSg†^Èc(Ѽ z›Ài[?P7G‘kªõ#O67²Íš>3’ށíÀæ=R-–'1êщ…=>Ùæ¶Y¬±ýXµò›Ážè ¼X=qþ°h0&Ǽû.ÓTÞµ¦²†º£9 4às¾´ù`jİKúþµ¶Y±¬Ûb\Þ>ô³`MëäÌÞ²Õú :R_+™|§×– a̾[ÜÇúq³/"›×4ÖTü ¼A¶q¾W6}{nQ˜/Ù²ª›&O5 zb¶U“{kk²ցہã=xÞ°6`MŽ ݱ[*ÍO,!üÌ ¼—´šêaMäÁ¾ü¤[*δÜìÿg쌊¶ÀMíR–¤±0'֕ԶíÊÙPM‰€~|±0ïü'ö´êWRòke1ÔS›ÛðŠr¶S¥9ýn µßÔ¶æJêYl€›Û­ßiPŒL!í‡)™^e¦ä揳6; Kfºxc¸ï³oa°JÆscGÏçö™@7lÌÃæÏ‹òV <ÕPáŒLÞOíJÙEzð=ˆÐy܅¿ɶ¾[Øí€ø&Á*~tp†Ä¿ÆûAÁ¸°ÈX¤×Q+žfsÎ"Ëý‘­”÷ڏÎeó]=޼doBóe‚S~ð:WOBk§ïå:±àyP:?¬|OZÓ]pyø•¨¶L\ØÐ;`9ŠöšÒ%÷öµçÇë \n€Dø(xÜ϶ÿD4¸’Á)þÀ°J>kd¡ÍX O¢ŽâÞåIöƒ3ìÿ±Ñ£(ã¦öÈë²Úø$ûKö ~â:~(ä ½²bíÀî }VkdÑԒú—%ó9°JG˜Ò4Öp” !¼ÃÜ'ñî@ïïÀú¢¶MÓb_ÎÔ^µ%ô!¥ÞH¾”þÇNZº+dñî€ï€ú¯n:éê˜Ø%SéFé÷ZÿÀö {;°&öð£d¯ò€ñľsïñ¾äo¸À„±/·ðM‚S°5ý@äœè-ùciÀށï +ÙuÞèr>yo½Ö`v iÌûE’ùÏô‚S8Â"ÀíïÀÆ%óŸˆKç>D&O´]Q±.ÆKès["¬c/¡Àõ@{[#m¢1/fl‘Ú£ð|¼Ò|¬Àì«¥Øï€ø„¾sˁ怛Ч¾ˆ ˆÏǎÑÙÀ:°:ð;P;’Á)>ôfà@àð=hi#ÿ– Jû :‰C¢˜Ù½ å\›Ç{±Ôœ¾ہðK¥z@?œX%#ÏÌÖ˜º)Ø7ªºÜ¥Øýwfòê¬9§¼ÎÄ °? ··%ò߬bh*O³ù½W“íöÀ{€?êÜï€ïï€ÉêDm’ùo|l™Þ›~‚+Àñä¾[¼àþb=f™|·ï@å¿4@€S«C shJQˆ}ÛÕ ››ø–UMmOOô¾:'ÌÆ,Gÿ—ÁÆÜü‡ø—Ó:b!eBMdÔ$6Ɛ¤›{ô&èqZýÈ)®+èi«#ÚÕ¹Äi¼2´¢åc•æÊ §ž°™¸Û£Ù·×òî{îÌj¡Xv»V&4è|»2Ã*ï^̈ã–^bŸ`A.Z,”þõW’»$•A6êqOP‰•Zj…¡>2(-oµ#ì¶Mw½UíÐÝ›,¶.6ŠPqU¨x«ë´GÚ™¬ÓL°>…’G„èäÎBŽïÐO3žUùôܪ¶NQâM$âuf©.âV¶¡²n˜åºÅ8¿v‡r˜SX"¿ªƒÙ à–×î­};P§ÜÏ@D>·(WwHä/©ôǛNµ÷½i\ś±>ó°òÛ}÷ÐÀ_ë¾ýnúupê•LލéO¸Î`¤mÞzÑÀ¾±N{zZÙ·T셻ÕAii +¿u +tjíÉPWfÕú¯÷=.ŽÝÙjY*äΤñC~Eh)¼vºÂè§ ·B¯âE |ÑÌm}‹©9%ɞN½zDÿ¬oÿ¾û(øÛ£oÄ~ŽÞ¥}cövôÔÂöʇÿ¹·ìáN1ÛÜ}(•”O†Ïº~ŽÓJúìĝ‰ú‘ú;n•óÙÛ~ˆärþžÜ­|²¾rV¾]âîyv}´W^™j¼Ó^U͇ ¦·gXÝÅ?S”w3¥óÞýk’ +†;p–þ›™ÀëË“!¯b_VAù½ú»s;M²CŠ&ß(×í+äºPÒ·Ú š¾;kìڂÐ/-ӇXxÊ8gêI¸Y^wkÈ«U(êF½¹IiC4{lE@÷göpнí‘Á’W#SŠHâcMÄÁOևõé>ÒQûõ¸…NöêDvšïÏ,}2ÌÞ_CÒ×x|º¾¾Õ¨àèÓKocMN˜zÙS$ÖIß”G½ÁK5Bún9§t}â~ )=…ÆÁ%½ñJõwçÕb|ö`’×â>¬¤ûÅ?.o/¦ÓÆ•MY§W[™Ÿ¡àuA ëœûÄ"ÙÔ:¸èÔvØ<3²Q]9åÇ&Ó]åòý‚°$õÉ:˜n‚Ü›ç10žž+ï î§¿ÃdM#ü’“t£‰[Å9x¨Ývn=é`ƒVè¶^趍%GÿʾWŸÔUÒWoOÆlÂCS۔±”VŒèNÝdê\Lѯ¼5-ChŒØ¥<] ߎ&èl/³*V¾=Œ¤U*? +uý cmdΔZŒZ"ý}=Òü~ñzf̛§dðôúø×Ó¹3Í0ò×{¤:Ž+ ÿGÏéÊwêXò{ Lq¿Ñ§)$nÐQØ|ìK »B¾Åô­bœ5xçá…Ü'ÉØ} ~Ëo¥¶D««_OÿBÙì?m}¡qøéºáGŽG ¼]#ø¼ÿÚú¿Fu.„õêý +—ײg/‰ú×Ó±pa•údú–½ùû¼×™f¸äŸö<G>Z é1/쥟7{¥Ý…Ú"{&ð'c »½wwa°m}¯lI!ÚÅ|ŽQ@¯•™…ýÉ<™ì/(Ü篬n˼Šç ¼ü¼ÁEO’üÆý¿Ç~i~Ƴvl+ËïiæóÍ÷%ZùNì”Õo?'3øS_ ©Ûºâú>†ƒ¦nM³ÝMï㠉ã_œCC^ÒêBÉÏ©ÀüÛ2)¹õù*q¹n‹¤Zp:üKó3x]‰åi¸m™¦Ô¬+éXWÒ°¯¥açÿù×Ã,!]£úáØ¿Ã±|î ˆµà—'%ù¿¸, Ì?éî‰>’ ÔÔÅ»ñ~úûDË¥ òVÝ]p®“·6zXòño>í³‹»'™"7am’ÒÝÐk_e̚ü§'©}xèU#Ì'7¶J’zì—onI›T‘š§J›a÷çãØî‘ˆÄR{v ¸lJ—ÝÝßÓN"!E2«sÓèÕiÈRûFKwÒ?3™µ:ÝÝ_>ªž2«aÙ ðBë´õoO’á ù ¾­­+]ëSt›{ <,ÈUÛµ(ì 9¸9Ú<¦ÕZ8)Mj_™ø7þãä¶KëwUº°5}ÎÎLâbFzþZè ß_s£‚zvâ·-nHð-î¿vïQèñnœW­~"Î â«1ïøÜGÙ7I"õPüc)¢›©’TAt« lÜèné(,6Ò÷­¤&)®±"";&ÊOf`¯°ôòlæè”ö9N‘®$œìrD­É&{½‹êôu­ÇÁ2k;cÄ"8ê¥W³lƒÒnϱ|.žÊ¿ùÕ~@¬ÊKµ¹z!ÔÞbª@ÓYKŠüëÝðí¡%úM:;ÎÖsí öf÷~xoTSóóΞó7M¦íü‚;@ªE•Áiû6Sj£ì”î‡Ü­.9_æM/v5Èl«–Е˜¶¥ ¶N'aùSjàÓ¡ÿ‘údNôª™“Ò¶C"œb9ßÎ}ÛpÉPW Þ'‰ž¾1¯›Üvžo|õÖU½‚S•ÖuÚ¨–ïRªze`/”^˜¯uÀ_(Ú6žcDá¿C¿ry¿ê…——Æ4amåñŽ,.¼¾)M=,ŸÚ…:¹Û̹¬Wõ_Ôk–¿Å_Ý« ۱ՊuÄZJ–S¶v•E³´š×¾wxÕ‚U”ÖÔ¦¾^Í’,¦­$<·„î¾á× Ü ÃÓ þéWþW%D¨rpmªöì“"2æÏvoyŒWoçI#YL[ÂxÓå`žÆ…øz̯bàÕæÄQ‡‹ÖÕú¾BS0m7ý;'2 +àUñ· ¦/óü[s”Ñ®ÇCÙm`+{SÝÁ8»9KYTL‚¦”d²»9¿Ì,uVì̚Lºýµ‚¦íê ە•ßж±ÚE5} è¹mK±s&CD¨›Bj6]AŠÑÒx¯Ò?J®&ã9ÌKÔ/Á+åòÛ^±º¾{‚YÈm ˜„›Mú + `'ë]í·È$ûû 8ׅ²ôÎMºUzÛ(/^%t»Ò˟&(æ÷VÙÌ )äÛ\fÖÑâ6Õë‡ðà®YxŠÍkÚtvM½%µÑÔ·¯à/e½"‚ÓÆTb›êÔ`}_ò3ú Ñ9'~S֞°õ\>ÛfË1XF.’ õÚìq¹ÉQR}šŒ>qðOߏ³þZ÷¬óåkœŽ˜E‚`äÄAð0OWƒMWôk‘à ûl¶Ä¨.¯vÛí¡¶Áÿí~žQ×FÕG©ªÖ9…ÿWޏßñ¡§NDæèÁM¬uHWz¦eÙ¡ïýÚó;p]úW,Ï'Š\]©kmu + o‹§ßô/eS­`nŠÌSñÌcèҎºl£d¢ž4LS[¦˜ÕvÛשUÜw%cÙ+€WéBümk™vsmÁ‘ޔݺ\x¤èndåuÚ8)µ)¸ÝIèV⯶+ýiÒÆ¶È#e{Ù¿O'Qøë×µ =ü½Wý+×T–µ¿ÀŒ/1Év†ž—+çÅeÄø±Ÿnz€ýR¸«TÜyåts&¡á^€Ã‰éŸIzòíïÿ\O9Ë¿•œ~ã/?àéRc©=„‹~šóöB±3.„-=¢§ãý¡dÏܚéqޒW1¿›%¿=\l°—tþ’v âY‚w—g“¿ºúÇ;öý×èç"rŒüOp¢‰”Óþï\:9F |»‚xÿëӔ‚¹ +C3°¢­hsY“kñÑýøgî»n¤-ÚxŸ´%W]¢§–®eêi(õe֞áZåq¶% “múxºÔÍ*k:U$ÿRÛü|ís ¸ù–àmÂDÁÙð[€Œ†íF +òÚí/UáÖ6͇¿W{Ϋ®ëy3dò¥ÅI¸jÙSéŒç]7ôK¯¼MÄÔ/þü÷í7#JÏ~ÕjȒ½z×R5½¹w[ñpP+‡[k‡‚‚¿³(8'û¯=e;¯ &ã’¥ÿN. Éي~Íç˜Ên]k»*eâP–÷Ê+Ç¥¼N(å‘@œ‚¡ñˆ\²”œTÁ±iÁå}¨ú¶ªcé`Û9õyyo?a^r¼å…yË +ó—Ç^rñà~Å`î"òó¯­ +6Áµå<†èsfaÐÚ::&Îq³Í™¥$–áN#G³*ûBøÚ=âÊ´Ê ŸPZ«AŸŽJšÔ"ú`^ƒ´¤0 +4FŹVưÒÖ~¥Ÿ²ãn"ö%Â=£l2=º¨Zl™öc‰”º$Ìé·—(eè?vöÎ!6hl›X$†)E±ß"½ñãþë\ÊùyjߤùÏÏY&éK;òÚy…cЫI(ĚV~›!ËOÖä¦~½<Ú-2ª›EyË©]µ• ­0êÊTF]ê˜ôô'ȃÝ3…Œ2›N·¿À,3S:h•ÏÌQ¡ZW©+<ýçï> ¡AZzWª¼]ïÉÒ¬J+úPÆ´ö}Ãf¨pÌÚMK3¯¸›©-÷èë_Iü ¯RËE•~>({ҔI~ÑN‹ýëÕØ6ŽèŠNнy’ÙN­(מ”×ÈKåÐ^£¿ñÒþÇàèºà‰»ŒÖ±ÖįOL«rÿԎë¦Û˜ [v]&šJØîN[D…ô0fo$þ*¾ë ;ì¦è:Ü +:¯îýµÓüèJlý fòƒFOù¯bRArº ùj0ÕñaG̈́™EÚ_֏…ŠÜ°qDÿÄ7[[YúÅôtMƒfn–³²`ÿþi·ùûZŽ÷“¸çâü˜WͰ¯›a_6¾m…|Û +ù¶ól+æØWͰ¯›a_6¾mô×ͽuÝ%ói½Ã÷çI|Ûï›+@fÉ¡³Îæo ŒùvðSl”Eì‹,÷傖~D—ΦÁK?>Oæ,fðRÎl±ü`&ñš»¯oz;Y¸£Õ²ä’¹súšgÜ6þhñ¥‚–?~l½åkå(~ |³zØ6,wë}KM7 û@? [*ÓFòÄóÖìÍ||“MƯθ ½¼íù$y<ÌÔفÚ6vÖ{€;³/®y:ƒäólø'ó5ñíïÀ›ÜvXhÙg),Ñòàkõo@õ€Mî?âÞºÀòäþŠÙ¹±+uê‰}ƒðö wæKsh_\çÀûà=¡/¬rå|{fÍzðÐf½Ç|VëlÇåK"Ú:LàŠð:ÿf7ßÙ£ëv¹Óæ+ ¯‘žF °Í‚k½°È˜çšk0ðÀühÞ"£@é@ê@õőkà{òmí‹"Õ¾ ù¼ãì@ï@›×‚}èÔ ðÅcMT™ý%jôk—¶³ßP°L7ÌÓ[˜pxÌ}^ O@7O@|¿Õµ²oBÊ9^„DxÀÈÐX0¤lpx|ŸÓÚòÅ!OFJÞ¾ v w€zãzµèšjÌ´­Õ÷jKï“b)`4Øó/À@Ùê¬ ál™dZ§x/¢7†3ÁÃùdZÇàäI~Be÷ou£Eñ×ê |vý é—ÒÜϙ×Ùºßl ÿÛÜÙUàu`zð; =À?L8ß%õ®ÇL‡ô†ð`OéPáiƧ•éFÿ’ú÷·+ã§ÎÖØ¿Ç{ÑlßÜ#"Õµ@{b_Zז(ÿve‘jžO§fWÆÏ½cÔ4×ZVëLgôÄØ¤ ˁª5ºÆ“ú¢ku¡ŒäŸÕÞÀ²-C–R3m8q[¬Ïrv;d"¬ÌsdŒRÄÍçÉ~Ôjèý« ;dÚî0²È´/lvŽ:ÅÍ7±m~|FP`~š³LsfŒRË+u¡¾™µ?¢ƒ6ºÐ? ½LÜå$Ë…&Å! ð›V4½H[ϵ+u‘§Ⱥ`=€¢_rËï@íî@ï.þ´òÀv v wy©FñA^#<àtø—á;Ð7ài®FñËë‹‰&Å".\¼`“–"\¸ÀR`Ýp>üÌ UÐÞ2Å!pKòp=]Úm‹mnn=Ù2³ ÷ÿó—νî#ùo‘ûãa?ÿo÷ÑÛÜ?×ø—Éh*srq¹x ×þ3ù³‹ékÅíÎV;Dj/[©Û]ڙݗÜñT3iï5öëh'sÇ©—]ۊ³å.´ór[³c +ϽqžKÇ1ÖþbÊSä®Çó åO~\$³P¡L’ûçWä⏍$ÈvªU~²Üô|‡òÖfùfÌF«ÏjÉqŸËøó]¨ß üÁÈȺ?„ݪû㿗~ ùvË.•5_¯€Ûùnýº•ÆÁ±xt»lrÐðñGÓFk”äñü²#ъ®4^|7ØþIՓDÿª&öçá§åá?,·!ú·1õ:ØÔ0½lûþ­Ÿ}Òûxµy<õ´¶Õ-O_€¢†Ú¶Ý +s^.‡KEöƒÇ·L×tLÙ?~×Ís‚?AÄ›Æ R“Z’„= åzÏ3;®.⠞ƒšGä¯]o"àk)ÑK^DÇñp—‡é‘{Óªáý<<ŠF¦)d—öîEâ)àmg*/µQiØ×]÷]1”¿ñý\²7oÈÌ^(:þkx í„ýU÷¥¡æÿm•Î;õ_à;à~«×¾o@Ÿ¤¼GI¯ÎªsÊîïH˜ªYӞéNø B¦ƒÆ›0V~«¢ýQ»Ìš_ªŸŸ^¦Œ|ÚOTÚÞ}÷êŽïçÛª.šsõF÷J÷¬é¯MˆýM­ÜáOJ7q=ÓrV¬ݓšŸÓ–ÂÜpºbû“ªu_û8Ýa]KJÝLc—fûudŽF~›¡ƒ'šæÊ·ûóü2ÝHü÷éµqµÝ⬳žÜóñ£®Ûÿøùÿëu Mި·BŸ£˜‡“Ÿ¦:r¬ÇLºv¿L q?/Gúôœù?¸Öéórª7ߥ´Q”§‚—íÔQYÛ³jH„¢vEº|ôÈ³=÷£•åÛûMzêlý5]79M쩪‡ùÍÓsTՃýó”Ú*nzšÂ›ÚSDkڏÏϏÊêí÷0?/=MZ>Nv›èbƒ_r_„¼x=Ț>ú¥>c²É GÊ~ úG$Éü¹ÏÁ ¿Ã·B”¿¦Ã -;dün¿nÏswµÖèG)²¾Ys­nVMsrâÍÅjIªñŸ€zSÝŒ™«¹ý KŠÉî\}D×-¾Ì¬LPi÷x7Én¾:VOÿï«-Çß]6’BX{û‡6u<;ä»_}6¸ÂVFy9õã[ïCôîêTí Pt²±ßˆûÖ»n•r1#V1=æ+tê eéÁÁ|žo9ÄÀ­‡L˜³_€ó¾Ûy׋ø~&ÿŠÝß~€F!/¿v)'û÷ýÝý.\²H"€±¨ª¨I!$XI$ EDX A1H*А`„’3UUUÅE\T Á \L@KŒTUûÿÿ÷ï¾úî\¹ ’B6Ç9ÅGZÎêÍìÜí3:·ª·»·Ãµ½âÊïèÏ/ywÁµÞnðw‹}ÝUÕ]Uޝþï“wË¿À9O¾÷i$’Ym±;ó¡ q#©Cj݆+€Þ3kyÐ׿¦or£à*qB§aÞòkh’Õ{•V=¾'÷æ‘Þôn¯þr¬µ¨uøqz®ss²WÜ¡3÷ÀT{•åÍ9î|çê¦Òû‹nžï½Ö]í`®ïÉÖó¥ÿÑ2ªøîj£³Öç58Š|{ƒ×w»zŒ[‹ûßÝÞëûç‚ëœÑ©²`ü½î»¾iÜó™µ[s/ýý۶j}ٝnô£YÂkœÄÕsM°co(ÛpÕ¶6îöyšÎ÷%kO¤·õw¸êÞe;ūˏfÑBš›/ íZÚÜùϦMKî \Pµ¹Ö÷[¸ŠÝY×v¼KˆA[½¿æ•ÒQðÅÔÁOÌÈ»ð(<½ÿYÞÚ®lUì žìŽc2®.<ð +âãΫ½³]lò.õ­õVïl÷5¼’ºÝíwU?ÝÞÖj@éî«u Î!]­}՗ëwÚWª[òâQ˼ÔóB~)¿ˆÏñþ2Á·ð:šÞ?š©Þ&\w´uœðr.u`ÔcÝ÷´®»Ú­²nªDõ”&Ç#VýÆß&çÎv.©!w¶‚¸W©¿ÑÞ͸qB‚W½ä^4?ÝÞ˪kfÍ£“ZàªãÜÈ·«Â7Mss;¸›¾TD­ñ]xÚý¢¾ÇœhýœãF9]»ïŒ§5áUíðÿó箸 +-ò£sÅwB9›ÌGæçn¨ks°éÿó"í®.+Mñoçä·µ[ØÜ{{†—¥ÖÛS‡E£ ®õÃ×~¾õÃs ºéâ¼ï\?ïç¿F«ßÓÞ¸1ÈqxUqÐ"âØ]K´?õȽ½sÿú;ÕmNóÛSJæa—Ž«C½o\ÊÕIÍ֋ZÖÐëo ¸me\<ù–ûÊÏè²Éqqbï½BÝ̍껏=™G1õqÞ£ó;Îõÿ,Pà* LüàïåP¸ïKw? SEýƞ‰ñ@æ{³H©5m^ü=ëÇT÷¥[–…dÛåK†õ{ ±¡uî€7ýwº›ýë÷@?ÌÒØó€êïK·5±©Þ—õV‹ÿáÎiiüֵ竮ë?Sⷜ"\îÓ*]ɹ€ÚîôÀÔèžÍT8•©IsÍÜ\©l6–w]éVçÆÚðUo÷å÷@Þ ¾.ÿÖïK×<ßoØWï8ÅqÏÒëýî'?ôhwþ̌àiø[«¹”c*Žºâ¾«î¬+ñ;¾ûUÀ¯]¿?Õ&L‹¹°Õ6­Q‰— ¿z^Õm\«w¡®¿wµœï—-<®7ô¼EGt¦Ç•È™õ©}DV¦áûâëx]msƒù×}èóUî—Gz5©t²çZ­çz1¸ÑûÁÕû¡þQ¿ÿ×7m?yáûêùÊ“E¾ÚÞróªÚfjù¹êè“3Orï€WÁL3-ìFܶ¼wû»ÐÆ»ÂdkH=ÏzàÜöÖÄÿަõnõ3æÕòQî•ùåxYڏdý2b:¡â•ÜÒÝ÷¡ž-½îÝgzÌÕ÷¡­tÖpHYº÷€^Ÿ½ÖÔ%ÿ¿œ¦Üx¢ElOôü®Î«ÎS®˜› OðýP&³¡ªó”ýVâ²ç›L¹á¦æ©á¨îûÑ·øwŸ.[yWóâ-h³¯Äþþ{ϏþþóãÁü[Êû¥ír†¾ï>¹cY‰øz¥l‚1‹Ð#Ý×÷Ÿlz4CO…%WçÛ7QÞ}ëwŸjžO»™GEóÍ£©VõõIÿ™-Q7+…Ýg€–ÝùÊ«¶ÎÞ +£âÛì(j7ÿáÞ~8ZŽÔQuqÊíºêmz¸ +xyþX3Å·èé]ôݕóÒʚ5˜žù[k›Â·ï<_à·ªï5ï\ËSÀ¯Øµú£¯êTØóX»kcÍbìy¬]5‹±æ±v<Ö.ÇšÅØóX»kcÍbìy¬_ÿ¹¬]`:äÞÈTJ,°c™3jƒ“Šä¬ë¬×N¾l0 7õëè ™sãp+ÍmOè^ÍøÍ™(‹JꔛiÀô ~Vãåü ÏšcÚ¿†87nÒxs‰m±ƒã¦Ûò¯ìzq*—ö9èxÖ¨ êãqj­_NòÕŸ>4èqˆCÐ +á‚€Î.N.K6´Zf0¯`mS +É;à"ȟõ$Ôôb‡q:"^‡lÍsëœÉbsU°¾›Ào ì ì¥ý/ខšÐ@ø¼Ð½8ƒ€ÚjtØ€иU#ÿ`*Ü +á™!*¶g·îܢ…¼DL­"Ò*„&¿±ïŽÍ¤Ë,`~ 02dþx÷dÊÌOøÏË«V)µO`É5‹à!bÌàá É•(º'PK7·ì¹—?‹ˆ‰pâ;ñK·Ä§,"“F(kc[ ù€w+üÀVÈÕ{>ì;¡f.'ƒDAÁuzà¨äSQ¯gßߤ!·Šï;ñP¦í¼̏ʲ$—³ðÃÂørfxƒô¹ocŽžNvH:È…§žzH€øRž{F|)p¹ÑÎjÛ;i„A|­ÆŠ>y†š3ᓙ Ìÿ.×Cˆ¤‹F|A¹æU£;yvÐI|®Î"‘E¾à‡ÉÄÞHJ‘4gj0¤?ÊÙÐÏn[“x õk*nBÕ±H“%Æ I§#‘ç(©5Oáw…á9fÂQ7º_ Tèi/…å:‹áz3áþÆf?äÙ$ánKû"•ÏÀõ“ð‡¯~fHܚlòi-“+B“nI“#ìÙ ™r‡¦‘“.Tùô}ß8Ki8HŠ÷ø`å})õ'« +Àÿ +¢ÓÁÝÐÔøpHNNŒ™˜9tåɗÚQˆ¿¨Äs:xcð¿'Ȉm‡2J≢"E p³btl =c1ԙ40`M‚C¨J¥Ô0°u uÕn¡*—PÀî¢ÌáÔ$£¨úZçö/êRV›®æ‰ˆ—(¯Vä9Wø„%ÃKjî„Øóè ¦F©S"uMÅwDn™º¦J©S$uL"ìi§[ªdê•2gT®èÈ^y”TÝê•7sªa—t†éÛªoJ›ÁÕ0ëºRt%2•J™CªnK±ÆÉ7TÊÕ*eN©ˆ]8Aœ”5¯½ ­­Œ~Y“4Še§¡{Ôù¨üЛ¨OóDo¸Ÿç&l¢›Hp ½ë‚ R›X[üðaÂ'ù‚?Í´-Éþ`ÆOóǘÁpÌO¡¯˜Ÿ `íÊ~u$Àÿ²v$õù$¨†\‰ƒ¸%ýTÔÒe`Ëo˜;—-Î]Jó +PçÝ5ÙÀ;¾ŒârÒ°î 8ÔåòË-òîM÷QÉý"ê$rˆ‘‚{‰A?E_÷_Û÷SÁ=ÙäÇ<‚xÿí‚{¯è‚~¥Äõn`ž Ÿc$ò‚~±ÄõÎ`ž Ÿ£±‚r‚~µÄõî`ž Ÿ¤Z ò'¥ œõñ÷&Ê­¬èv±rÂC“ ÒØ0ƒ¦ï9a.DÂc¬NÉÓ Ú9a" „œ°a;7L'jå„á‹C0Ï$ Œ<}“xQ—lRb‘—Â'JXEÎ0\ªL½£zo¿ôè‹9]ûføÝúk/EÞgå]͟DŽlóÆÇI÷``ðMá&Âx;o„dËÄ<µ¾†47¬k&_€ó$Ò1mÔ[]+çåz0h ¡q ú%?+ãt)2÷ŒI¿×^ñäGï˜(ÍIüË·ö>úš‚ûtÙíûþÇbv,Xݑƒ>oÇûwº`ÎvŠÕ®Æ!ø‚ˆ~DÇÒ¾à“þړþÚëâ_f`қò¦Èé”dtÿI”±ƒPSvóxÀüǰ†dËÏ9& 2e©@£ò²üçÎt3&Z£æ—ñ“/@âäɗ¢m£Š|ë(òF0Þjj±Í.ú\‚*'aÈW¹Ì¨–m" ]‡„¦´g…õê¦ÛÊš×ÁµôÁéÓ«Ô;I—.`Õ¦ùk/Æ iµÕµO_Ì¡½ZÔÎ`Áë×ÿlŽ h4‰¤Ëí5ælšö•Gcì)Im2“ÔöVž§Õ|IA_µ_ƒÛ6ÁÞÌ£Ô~°—‡ÀyxmLá½ÔÖ^òŽ×ßøµz…­øLl¾¶·á;[´0lÍð&»Ú¨»Ú"ïl`øM¶Cnü£ofù×{sÜۊ×fZ™% u°¿¸0x¡› õ +ƒ·,€?(i¼ª¬ÿ/¬»bÈHþN„ØO0+_4%¯9Kg_Ì¥³¯žSáËWäh#¤PF w®Ùzsæ 'ó?'ö+ÔvÍ4¡ŸM„÷BªÅçæaئÁ)Y\ã ‡%¡R4J@'” Ԟe¨òöE§è¢”/ñ zu© °ÖV¦EkC]Z™È€zêÖ¦^=`õëS9 x6­Lå€)CØ­L¦fµ3í{Aí‡Åd •ÐÏs/ËE<$à@6îVÄ/ÕHÛ¯|qgÀ.^Ï60yjû¡u\®äɪ³a½²ßs)Êš›ùìîOú|t->ßñŸäðÃ>$;ö ;÷íüúÜ1¯ì_”Ÿ²Öôý-ðŸ£xØ·¼Ÿïò°Ï'ûò±¯'û(ò¼›Éþß^OöAäÿyŸß?ÔI‹úçúˆþ© nÖ¿MÞ>ö€mѓU=Û¥$ZÏ@6èÿ¦kMþ4n‰oèC¿IgfßÐ ácfq@7¾ Ù¿ XØâ^P Ǽ åя(jò€iW”^ÞP ˼ EåÜ×ï bÁÿmÃ~­úhÍohMÙf¿mÆSK®É¿ Ǘ‘i£a¿ÄÞ$Éë@2ûÒÎýÿ@3†5ý‹ûŠ­;ê¸=ýÊÆÇò€kƒÊ®O(¹¼ êò€kËʯ(¿< IåÒÿ¾€dIŠcû(>È)H³dÉUì£ù%6Q÷{&‚LºSÏ¤þQVe  `ž ðV•‚LŘ(„ÐßUñŠdуîN¾+fÁԇTš×«Rh]`!›ëAwȾ(v½#VÁ”ºÞª¶ƒìzQmÚ3‹K°<£f–ÇdÞ¸%•Qi€‹HlK{›l`Êà{‡DX°˳°ˆ iƒ±¼›ªÆJþ›êë“c_ܺ¬iíѺ3Èa£8Ä»*wf„þ¥DûŠ]³´þ©DøD»GiýZ‰ð©v®ÓúÅá’î§õª'Ã¥Û»Oë”O¹%–vŸ×¨Ÿ—rí?*¢|JYwIæR.­ ÄCåÀñQÙXE©¬„%gi`¬\…d)+;[bô+.$¬í¬€…dI+2ö +Ç´+!‰YÜX+!YJÎÞÁX’—"Ve¬HVD³¹°V1¸Tm'ÿx¯U”gƃ½£~4´oƙ¨]O´955Ø#ˆZs«­3h á –àT& ’­LûÀaw­Lê €”­L¢0J…åÅ RÊWqz’ìúW§Û4¾áƒ’ +³ë&(ugÖPPéöϪýšž‰MšŒÝ0raW¶zƒÔiî,y +Ýø/ÿ^ƒgDyύæí8ë·Ë¤yѵZuٛ®Ù2ŽRáÚ=mr­Ýæ9æ]Võ_UìÆÔ ®ÍuҀK†ê~É2ɀsap±øön̚ÍfP:Ù1Ï^Âøɳ¿äϤÁ<¦•¨´à r¿[uÕ,Ð=ÚQ7ܸoW]HÀa>-‡7vÕp«Ós…úµ1e:öÝÿ‹kÃµµÞ°}8 &S¹È€bCžýRsë@1A‹þ‡Öþǰ<‹z×-ë€&‚l+ööŒÌÃú”Ç â§«“DÞPÒtЦÊtAo<‘ñ§£y“.Œ!ðé ÿ”.gøc©þ †Âé±ýç6ÑАMìò÷œä‡¯•ìäõWþ—ƒølIÓOÿä俌ú!ú¹vÕyØWàÕª±Þ]u¹ó°ŸÅiý®¯±kŽŽêá»ÌOA¿ 䱍¾ZÍ´¹ÚëGã>Ѷ¿V +;¬å¤/Ýç-&¨XŸÝ‰žZÕþA¹!>.¦r‹ö;Ñįím_aaãËÚ¾Âr•;¿—°ÎZ˜†³ô ÉÇ +¿9jb% +óƒ‰*´~볖¦ Üá¬àQþÀ7#èø#çÐ|uÙËS·¢ +ãQûý!¹9Çûë- +Œx½Z#†Ó¿ hW;ÈrÃ=R4>ça!R HZ“c”UÙq®dáùÝh>u *Wo£Õõ­Â^›€´*yMº8 ýnA. Æ4 ²8%KÖ¾¨QZÓøan=Hþå„ç‹ jn)Pk—µ¼¨S{ µ„š“‚ÌΦR3Ò°žŠ·Mé“ù2yÍAó”ºa&â4´IþWPd„"Îa) +ßµ¯‰mÏBh§Ÿ| ~¸Jx&s[µ¶ù‹µšyè7$ + Š%±|&v îM=ÓÀ‘~3ˆ´æNk¦c­¹ãœÊ®v‚ )3É`‰k:KUÉ­X +ÖX‘3ˆõ kmϊ(à™Vƒ'‘&+G­bùù'ŸxrTä ѝÍÀ›˜4ç öŸÏrºŽ’ p¥mH&¬2xÑrÕ°C.’3G4ôÖsYÚSp g4RôÖdþz¸÷Ìý3ÚĚçU†œ²y,Óqˆ°*¯ã|Îkoߟô"x¿=Ǝ Áô xiþx½]ò© Y„ÿR:»a ]ˆþF.±?Õß@–M?Õã@”ú¬£oÂ=e÷Ð_éâpÇ.ŠÊ™?Ëî?Ì&v:.=?‚o½8· +FKx@k GÂ:7Z# }A# +›ýΦÿST|#‚}‰i䠉c<Þ ß‰D¨áh,ۊ»%@ˆ˜¤N&Dג ìÙÔ¢\v-ã§±$¡UÔã…4GáDȒ&đMQ9âDÙÌnßÉA~cwXÅó;<”ˆ¡È=¨é¢“ûPÈ=éÛ,éxs¡AíÔt0(@Ú&€ö( î&€ü(ûC k@‚ reŦƒ¦: æ·8ùHBÀ§<—ÐJM>۞iâéšxÉx BˆB&ëð#Ð­;knxA®é4Þ© ±ÌôSÓï£Ö1±37)¾ 9+nt$M~ëÏ%I)€CF*}.`ƒý®õ!ž<;smLJ[n+¸ãuoZ›òœÖ°„¤Ín"jôóɝ¼Ðd„#v­¹éˆëw• -9#] B7ԓÙ'Ғznâa~¢a«=;\Ѐ³²nâšÊ)ÞÁ¨M¹8eÅüMà̍õ5MÝϾèICL†é,ÿ"i” [Â(ÊÑ´8³òՒ*Ðgw=l&øBy+ù|úRùʞæØÎpڔ؍Á³t•^]”€€+Ò~TÓ­RðZ2ìªBÝ^IÄZ/BÑcBÍìPMwÕ3 ¼ùe@ëM©<Óò¤.ÚÊ$Vb Vx ç­tq$*Ù§^r*´Ô¦_Ž#rÒXúLáJ3íÍøsÈõº8ÈÍÿ“Ýߕ5aR0„Æçì"?—Åœ¹žØ¶Ò #Ô¯¢ÔÓö͛D;µI¸’± 7"=Gf OCð ò/H ñojIqĞ­µùí¾v K½¨puX#™³;kËÚ£!Qǽ¨LýM ÞÄMzûC„î n)PÔTÚrmèõ#&Wp ^ –lq°jíŽ$ ðDRøÄ}ʹæ´::FОÃÙÎt"ZÁv˜Q±þ§¸Ð‡˜sÐÂÓ !ÄÔÖv™øåìސçeXý5çMÛç6¶‰»vkH@`0xa¿ì·[¨6%9Þ¢ïpâ6âN$ät¢I'Up‡U\6DhV´êÒ4+Ñâ¶ÜRrÍp:¶hOÆeí0ˆÀRNjz™ßS„l4"æøä&kÎ}g 2~© µ¨(tÔ:’*3çšqp©¼±‹Á³¹#”ˆßg±rä`©Ü^LÖМ£a›) +ÏU4ÊùØ!4/ò~2heê,Öôÿy_ƒk%ÚSRLvƔ8ƒŽwõö-à¶6$›X0ØGðXö,­à>Áäà‡ÌmJ­­<’o;ƒ‚ùie”Äþ!qgtTpnŒÄ®¤6 ÊP¡ØÂ4ìô „ [a8f):JX˜>DNss[ÂGO4ªrIs()W²Øq Íé·Äçñ†w¦†kš4nwu+I‹‰$A‡N8篈ÊNŠpx"å3´1¢DbgsIªIP®‰u³/8ÍSig|&}sYó _>\5Ÿe>s;`¥×®8×Ó#÷°\£›‰njÁ²åIÀ=ÐÖ/‘O÷êPYY‘™úp©6ä„Ú®¶I:)'öºÑÇ8ç¬Ù®‚6$_„l +o~@çSf`ã¸=v.œA_í=ý3#”ÐüÄtVäsQ1%#f°UFâ˜-qmªB”Dð“kP~4òèÏIg¹ÎŠôkçY„í»àfüÓÅ»²¡_;­_à ORkRg¢ŸgAuÀä(æÞçu»‰ß)€”Û¨üöÂU Œç3~éw™¾-’5üz€ +¶K “þ]'¡,ü4v£;Ûh¤¸ò"É'ÜÉGú]Ù'rEì:(ÃÙÃÁ áL7‡eZ@Vâ%`ÿ¸$®Ü.ÿú áwOü +øƒ…ûÀh³îÔsñ^Ÿú‰¹þŠÅ-¾Åb–ßb|ð- wþ‘[ƒp84åԆÇÝ©<9{Ë=«ô] ãb ]´«_«æ±dìRp$v‚r¨(ï-¹ƒºœÎ$v–æ" M-œŽÜáWˆÜTA·\¬lvC ²8FÞ(ÆJQ^¶âë¢é¢ZYå5՚™ºFVk¢Q<„nìùãä4ЦÀ8t\å;¢´•õn‰Á‡Nò°DÐÚ]¹âå"ÔÓºã;¾›sPV£¸4Ãõ‡ +sý`ýóéVL?4“ i‡·Ÿ®˜uÿ¬N:÷ ?¬ZìÎÇ÷ß—îž<  nŠà!p§ÊÂtñIL¢.<Ξ§ÞAõEs<¸ôK¬5g™^I²®vÄ)ï&†€4½Z[nÆÍàñˆ)³»2÷yÚ·þR‘Ãv°u߇Z0öåjïÛå²î,¾rÐç?Öa¶Ý4?\bœ3Aü¨£â?çpfõP~Kî‚+º@)ËTf»òHÿ˜GïŒG?qÊ“8ÏN’KªÙjÆQ21àǽ /žò(rj ?ª@¸ÄUÜrçáë"UÇ$þõÙä€uv÷Ëõ>ì¯=èÈJù>ì>7ðtûK«ƒ|CMž’[xðu،V¢×™»º^Gå.êâ%ÕÆwè) ÿûŠû¢_ûûž÷ÒÀì8ÈüœWµŽïõ¦®»>”ùô¿ÐmÅ×-K(’ ͟Jz4¿Ç>”übÎãmk±Œt7kZçQxß<ÇãžÔ2ü†Ñ™æ? ¡aàÌ'#˜ÓÐ¥%;„È: ä…èmµ­ÄIYàA]yD—(YíNáM¡c-…Á`䄠¨R9°'·Ï3†ìЅÐz‘h2â;Ïp,ñÂÌJL)Í´{£‹-Hê,XÄE*[Ug8ö¾=‡AÙøUhؽ´Ý‘¦oÎ2 w»zeg¹AžníȽo¶ôç½OÐ7Ì!gg+Ýc¡¹–CsWˆYÛ¡’§©/#:ão@…;Ô û ‹î&:8~Mµç§ñýÞߦå{8Ïý„žý¬³õ®æ¢™4s†2ƒ V/àíï»YùÎV?Ììô·Þ¢Œok m¤ô…nŸõ¸)L÷DA1»P¾S²Ýz4þªCðêð%Ҏؾ¤Ó®Ðò½æ“¼{¥û—xÌïYçPé×®tô+×:ѓН?þa'v!$׀ȳŽÞ—3ÝØêòñõâGýUM÷°èÏp<=†Åf"þó88öG±.ñǬºŸ½á å¯9JK˯«)I÷;œr6+8ëÿC+—Gïyžàz¶±‡$uÔ¼µXs§Ww"´Ðp§¬ìˆð{#¨sÂg7ú9HÏA¦D…ÐN†Es€b¹éhrBI49L°¤vt&˜ÇPçD0Kh2Bøò{ªH0¶è¥c4x­D^ŒáFâÓÆ-$¢»°ɤϐRÖ_˜MÙD»‘Õ Ë’±ÇPL ,ch)'6³³sBitâ!HÞYÕR cs´TYµr‚K2¢[E1]~PƒÜÛ }Œ§k¡à>PÀ¥3Ï*YÿÚ%Ÿ­²Zâ´´°çw­Bkj‹Jêšxš©ª^ IÀ‘©mÝ.…q‡%ÏÊ ôFµÇëâòr”6κ,D`®ÕJ7á1i³qG«1)£|j­2+›íõϤ@sÙK–%˜œ3MˆÓDÆÅ’Ž]¦C©QG.De–dTb4͵Y9¬HÚìM}³‹ì%5þ-. TƒŸÐ¯‚(˜ŒLÔ©ÌXö›‹K¢f¨éÑˊO ¦ábÒ¾\Î\Á‰~L,÷”MŽ #@÷ÄM"{ü/}ʎ>8½\¥õÀUíÞÔ‡¹Ù}Hþ5„WèÖs’—å¾-Æ~Z_x—%‹¢@üѪ?ó™Ã••ˆòê^ÄRÅ`¥ˆ¨ Éa7o*)È^Kebä´jÀxÑÚÚ+å·ïã¢Ý¿.šÎÀù±mÂòo–ŠXMòíQ Ä'W@qƒ=ˆŠXds{Øw;-ÝöPæËÎ"jû!€=­Ò<ùG}eQÒ ”˜„íñEM¨á æÄ¬C„O¼˜ÊP‡> ·,rIÍÌÄ­³!0‡§Ù—zÂJK@s-[‘¹8pî0p _}íb±g$£ò”Œœï‘”9¯4ÉQ%¯,ü¤­[6‘· ÜnÛy\zìBÿWa±t÷(j°„Uš#‡wËñóäbqþåAD –çÊÚ‰F5—B¢È¡¹’èc áxÐۧ㊠+€‚=ȯ-­Œ…Ù_l㏯ýl)Âb>…÷R%(#«ãT6ü‘ìù|ñÅ ÿ”P<ávQ'"Ï:!ÚEoÅAùÎ} ƒö$lÀžBù ¸Js˜Û.A[äDY5g6Ìd™•!)}Õ1¨¤È5žpÂâ‰8z “Tá"Ã% å× + #ª0Q-ÿ›#‹K‘ŠF$í õ¨’¬ÛÍ+Ïš¦ˆwDPs1 é=D(Oš²0À•)‡è]E4¢iþ½Ê½Õk¢:¬âŠ–¾Fãt‡5C瑥ÉKˆx?’ËÀˆ8Xöœ;¯ÚxϹ-ešx¹ê)@œÖ¡ˆPOM04‡³»$áCÅ&Ô^îH8]BnÆQA&ª&~ô«’‚ÚÄ,øT,eÕ3ÄÞž<¾oŠ/«[¢A¾Fôڕ9˜PÙËç×r#ŸSîŽ 9N³Ó6ÔÅӉ)ېEÿiã]^Õí)HÍ)Åá¿31?l#l#_è4ñ¥5Vƒì!¢vHm¼…÷Ӏ’gHíK¤TgŽBAd>Ÿ„>ˆé T¾(’8d * n„†Ì‰*ë¯#:Ë9G Ù±[àXÞAgòÛrT‘@êáÄ{sŒr ¥]¾¬djîÚ¢­Õ èlÀD†–N~ÿ%¦U¹d&Ž¿sÃÐâðFNŠö&ÒuÝGQs pó ÒhlØÎ5ðØ à×û‰¾ÀÍ/ká¯Ù±£8ÁÄM>lÎxoÓKãè=6³›aÐO}«Hí›X½ž2â›Û¦a)E€‚x%ýgaŐÄ/Œ*ý½W³É6û¶ãŒjo9þ!Wÿ)CàBœ¤lâ»èÐHÀòû¸Dùíw]IÄÖÆ L¾âN36P ù阦‰3 +w÷‘}Ù¼„<Œ(ÉÌä¬rçÆNŠïy"@jî’¡ÖY@œ;~; ‰ Íû™.-ÆÓ7ïZT<äâ%tFêß6¶ /Â>Yà€M+ñe{;‘–²,óÛ1%{ïބ"spóG»^VE¹¯rwœüT—¡KâŸ}Ý#q J½çNQ SЋIÜdG|Û¢üÅdF&_¸D—$2Á½{ÝcJWþîLÎɓ2vw$& š@$Y€ê&I dH Y} â å"L¢dpdÆ:(뫵wb¥|*Uj¾ Gk²Bꀫ º¨.ùz1Õ7U€™ûûÿ÷{Ü̒@@GtµõÛëçç¾_{ß>^¾à{ƒyž·ƒo +òo:ß  ɼK˼ôx—è§Ãíl–Û¬½ìOê´ö"¿:¯â‡Â“ +ðöi +´zb )û}C’¡Ô þÙ +ÔN(ZJÚ£ë¸ ;%ËE[½ª6º¾+KÄV̏¬e¥:Á²0–bŠuê4:> ¿î¾÷݈KRç-XܝüÇwðãYj(:øVcY‚ Ƅ‚!‘ç\\ñàÎçfõe“M¢ªVØ¡hå 0tgÏÂ9ìÃ8”‡ü¼É#ñuTïÑÊǸ'LÞQÔð Î.¢Œ`ÅýdSÈ|»ÖfØ*±†Vt«R›j9˜ŠR ‚7äFabñ«¦?EN#æzïjÄÑ ˆ@¨¿Mo³ÙG»ÖdÊ/jÄè'ûñ•ë§A䎯@C‘ÎU[ûçÞÜÅ´ùÞlôÇç[’ æ̃ÑÌÃiV1”O£èÁE¢ªYPRP”@„„:ÈÖ_74VQ©ê‘ܞɜþ/\}Až¢¬n=@nS®ØL”rHïDÁÓ«˜ ¶f¹Oô‡n`OìÙ›b³Oáæˆ¦ÐYç<ÿ•T —™æ. Î2 7QˆÿÉé;rl¬Þõõ=ƒ +JIúW¹((ÞM :U°<²]2Ð] £$WQ혎ZëÌAE‰]yáî7Á«usŸ.¢—Uhµ×¤6åã³LóؼdûÉ1«±°u7³Ýg s*06A•¦íûѝd鎴×úŽ…ö"Qì}O`Ç%G=JñF-6ÛF^)ØîY?Ü&ÆÅXTÃìGhõ7݃&Â!:Éâé²ÙΝIÝÇD@Ô{u5ww”§:­Øáëïp%U³-Ñà‹Öo–°ŽxÙãŒÎ¿ð_α¯'£Nåòš*Ävø#˜Ó< ³„8E˜õ¾hP½±ó âkpEÀ‚ ­$ÉWêäÇÜs¬ù‡È©ðÌ]æ¿]éÛÿA‹©¾zB]¿µ• b›=”©ìÙd¨ú<“Öµ=›9ê>’j‰9ÿ}ö)šz0 ×êyúJ:JCl¢çñæóOGâ“0IßÈSôÕ],ruߝ:ïAۛæÁÙ²ž8Cýƒ*,½Õgv,ë°+†êT)§bD:ÈÖ>šœëp8[ ·«ûç>Ӝ“®ñÖ mAWéHoڞ“@ æÖǔIè÷6øWâ‡Ñß\‚H¥yc`æ×[8ñ‹–:áêïkȳ#Ӽܨü1”-®~3iðÖN…Οi<ª‘åӁ¤j[8Þ,ÏýR;z"Q—<„Bä¥:ê(Æn`:Dù({۝|ãN¸š(ŽáŸ07Ÿ¤;,3˜’•ŽaÊíiÏ©d¬}‡P¬LÙ·7›"H-lCÖ6!I¾ 1ȍ°Š¿ªBVœkYÏ` ñQ5¬ÉŸa™½©Ï0 ½cÓÙèRd0î˜=Ž×Î0ÈíBÇ\‡G­ö)đê÷;:+:Ð’ø•3P G¹²лuU3?‰~¶3„)2pæ“Sít‘i$Þuó› +¦m=ù~i^'ús ŒåÊ!ۏÓzI•êë›áEÎ)±’t©H8Ê©‘TFwäí3çûýˬ¿«£nœ'W®Êbu˰ˆP}ëûóöÔ,\Ns|›²å ގâi•XRÙzÊã5­\õ3Ñ÷ÛlØëÑ6 P$½n%všž§x\«¹8Väñéà4*Û:=õki£ßiU¶•=õ[g½¨ ufÊ]¥ ¬:Qa8k¥ í9ÓX^ ajŃÌÙ¿àœìu`\-ºˆ0bè߈‚Ž@JBüAáÄ}h6Üàû+'_|•*Oºoþùø%èrºÅ^× °8DåBN%*¤ýÎ(='Í·íOhõ}®pá"WI}T¿YÙð <„Çw¢ s…LQð)lÁÔ£«¢üFPæã̔73&xó!ÓZXy˜˜ 7<ȧ´LËÒZF”×âÌ?$ÍÄÃu<Û<Â>Å ðæ6dóby‡Ì:fÄýS๘|ÓKď0çx³QY†ì覃;øI“S0Ôý$B;³$Dl¹>KTl÷ŒKŠl"2hÒnc†×þ&z&¥Ï¯ Jӌwç8òÁ|áÈ#È¯Š¶WÅÈ÷[c³à+t•–wfe L~+Ho´ðnç°2,”ê>S­‹ù©ûÕÜfä–ÅŠ§A¿ñ.ÂٛC®Š\å*Á›¸Ð"NØÑ•sy}QôI :æøsˆv—`lÏ»­”…HIUS9óé%͎ͩãNá®Íg%N@w•œ+¡®WEoØh-Fï{Ú@ủçU°m—£Ó²ùN3ÏÅ;lˆ,ú> ¸”«¯Qx¹rÚRKûl]@G·¾[3ÿû…JqûYÖ)ɁÿPT§ÍÞÿ¨*SÃKuÇÑ@sÕy߈¶ ›•Wnjx¬zЀ¹n©¦Kݧ9jŽ˜Ðà–‡¸ç)Vf?lOžaòµ1àÕºAa,Àý°ŸaŸjÔ )tá2±ð4ë÷,Á}ÃRJÕB~‹ê¼ +zxڛç +ÑZ]¤(\G÷Hmï°ýÒ»¨÷JɁL]èßU x‡Å-2¶Òä±Ñ_Hóa™¼kjUÙ{»[‡gÆ=ÉV;¦O÷)ƒœgRÔ ÄËHò1³ì_µlx8O!À%ÂKæ¸L$­}}“*¢Ù+L‘É×ácǽhå^ "~ Zu÷©,åàø Î.($1,Ù(zSÃ⇟æV‡?³f!£è«^°zÜó–±nM}6dp¥ «àðú,P@G÷S»v?<͜™‰ï÷,ë&aà­Æ „ËGè<#GŒ•£TëÿmÐb”” ¡£Ç„_bM±Hrü·¼89‘äû±»Õ Lÿ‘ŒÔlD9ááø±¿É6Ô…%,&§—ñ£cÀJÝS·ÿ?ÝYV£'^òc Ђ㲝œÅ»Ó&ðöx§OmE1†¦ôÐíÓº ¿‰Ýs¿ ÿŸy¾Ÿƒ`íÌݖq›º ¸î‚ +y³v/ ÁGó,@Ç^íÌ¡”ȱì]fæf¬.tG0 ‚ ÔJ Ði¯S²¦˜5ùÞ°sÓ ˆ{të½·Ll1ՔZÐfGì®ôpæþ däìæ?= ýÓdü‹ÎÃù¬¯ÿÛ⛶¨¹ÿ½\éôÌùþèEãî 'fÖ±-…,ÙÂH®¾á ¾^¢¸Pó…sp}ÛÅw +à(¹ž÷¿¹n=ï xÖ{Ø›äÎþ›Ýx½ì.ox]‚Žx+kӛ—áéÜ®Á씿ü)½ãÍú¡{éø÷¿H^ñ<{ØiÆj^¸÷¼¨½£m{ÿ;ÇÂڇ*àoýbæ)?‡Î3OG"Kr“Ë)ÙÞGD0ÅUÙ¹½ú)ê¶à%æ]B´ ðsy ÞX÷}8L‰¼Ö°ux²N~f¼¶§¼ÕŠÞÛ3G&2Gƒ=&t¬:8 ]ù8sC˜¼š>ž©Cû—sð9ŽŽì\áé™Ñü柆y1“z©¿¥> 4)ë$u¼ЉO½HÓ®!,öCüÚÜBMÜ +Fsð)Û@br0ˆ°iãY;=oþêZä +Ú¯ U´œl¦¾z]P! –˜7†júkíýýû}õµ7I{gdv3íŒÁÔðbæ`'šuÂuÙöi×fZmè寶ô½³°§_ÎGëyN´_E¹Ï‚Ð Éæ×ç`9i2ÿÞMMª­ö^bzè?ÜZïs9%Èo|6³Tl„nÒ¾úТìÍ=݊5_}jV¼º¶©AŸ˜¥§Ž #Xá"-#¡ð\þ•SžnN*s¾Y.·ë˜F¹„ÓAXå¡ÞÍ Cµ¸Iaû¹)¶³—ÖZÍÍ­”á%ÿJòZ­ê0Z¿e+ڛ’ܺUíÿIW/±˜¯¤¡qóØ-Â&€Ásöþ¾{ýq­_q¿‰žõp|á=H™Q\¸:÷­͑sJ\‚§¨§R´QS÷žÿâ6Å;Ô­=ä58§p(÷gÀi~Sb‰´Œœý¤›í¸'è塛I#‘çrñ5Öþ$*î"›öÛñÐ¼ßÆÝt/7d܇<Çênº›è¥…æÀÕ^n¥¼T/7¦!¨ÔŽºÈ^oÅo ͽnt3'tˆ)V³ííмÞe¼T/7à÷«ZÓäÖ±íÂ_Þ;%ñû©.œCíÃÁkÀä&;ð#Æ ¿äC#Èb÷„Øýá,<Ä £h-´KÛlŵRöÛAmÛ/l?z%ð´«ÛW né{`Hôü.ñ{nü[wÊÛ ïV'X(@G«7D­§X-*•´›ÕöÊÚR‹M*¶€ÓMêû¥móÉþ¯¼VÒdZwÊÚ_É6d¯‹ëâÊø¦¾&¯ˆëâ +øv¾³¿ð‰ˆpȿٮÛ!Ð$¡åÂgB+ʗ²_hš-ƒßW´Ž?*ZŸÙäæTõÿø½ Õ)¹0:£ÁdåaÂüô–ÿqÀfÎ#ûâÞʩۂsMvþ´'9ô-QõÇÒL‚}3Waw×¾ ͌^·Ulے^éÃnŒ©ËÌKzé§PÐçg(¶¾áÅêé+ ø0;bÖ +Í^80á5.Kâ@Üy”Ä…Ù.ó¨ÄäãX ò“=ôO(±4Ãʀz;Ä©$yR¬ò¤õ¼©§VTˆC1&¾à‡±ú@ÂiKî°gãQ½÷ƒU—bs_ÍÒx ÆÊÅꤕÁKh>9:X²yt¹à@JȜ-otÅRA ¼4W²Lݙìò:ÕiýT»’ ÌxY¼p0qË\KՁ6Pò]TIt$ñÒ›Ý +Jx +Lú_ˆ¯Ä¥y’V}¤PR¾Ÿ +‰{ ;’_ , 78ÁoH:Z±'fÛL'T޲×k, +g=xµ„õ·X¿Üþh m |°NFJ„K Ǹ(ê[„Â>`Ž( 8.ÌI¬«yýš®¥R3wæùj‘«ó‘òPU~¬Ž*‡Ç=~£LþrR(Íd(yù L^¡™'Òý„‘Ã&òô3„j› ªŽQÖ®)oå“xt·ý™÷{­‡c£ì?Üp #ð&¾æ$¿¯ñч} °ïèçKáÓ®GÔ.•tßÑjsÒéfKßAñª;bVÄOYµ¶"ká…ÀñîÃ¥½OÄnºÆ¥æh+6ÇbH­¤”>¼êÂúëx^^bkä‡ È”.žÌÐèÀ¡«‹QV:fUAÚÊ6ÚÁ@)SIÄ]øÃo%†ºs|¨/µÉhçÏÃÍ¥;yQ[“ºº”N4ŽFk_°Å»Tqƽ2\è¿Å×\wӕ/Ä0GRxu}֑„I—:²ñ¨h­N=|¤%D].$“Á€ãW”T“Ä3£§‡PYKÇÇh‡ÃbÇ&ÛgÉ 5€v*2¸`K©Í%bµÿJ£PÕÝXD¡`YnÝ\Á°WšËa8ò0I$¶àkLk5‰?"ÍÌy­šÐ=×à°¾ìM0’ñH®î9f鍀-S61®`ìßû·–;Ue-hæÿ‰J Š~FÆâLé“ÂÚ‹)A<¹è5ZiE×hPðç)B<¸äZ³…kBþ>×)» +~¶‚²:ö,œÁe&æh‚Åÿ@wS·ªÈ½UçÇáó•}“ó•CŞ؁Õ" ó¬è_ë[¨Ê:Gׂèì»MÓÿ|/e]ÃRiŽ˜dGÚl—’µHç‡Úm\ûtGEo´EK¯bq0t¾æGCÇq*|àN/¯ªëËS¦’ ÆÜ)DÃú%Òuú|mi˚5>çæ 3Ûnåtôìù’Hºj' sïÂE-¥VJ÷U%l+ýv“Éê‘òS¬œÈÜ-%óݞóá•åš÷NâJď(íQµQ‡|`l´~C–gì™êBÐüú`‚Ð?LSXº`¸jZ ŒïsZ‚å¯M3ò%Ñ,†I “.#/ñxòåâ‘q’ïêxä°J”´i#—RŒ'WK¢’ÂÖAL©ÉUFò(V§ÃDô0x +®ž©x|| `ÌI…ÔþÉ{;L±¶”"—½zٝrɇ€[Y:((õÄjæ™làÕoHÆÔw¤´æ´rý¡bPCÊAìk›]k¼±·B֚A˜!sMÜ!Ñ+K*23]GÒñU:Á¤GiCIŒzŠŸ +ös‡Ê›?6óȆŠ +R§Ž¶§€wGà¾ÑÐѝøp¸Ùoͱ؃ ÏdRTÌ=èøŒáôÎBçêkÉ'.Å¿•W$_h­þæ»ùáÀß}P=ÄHŒ v³Ì˜AD}0c{þÎ^$€Ç…V,Îr=û8µ§õ@ö9 PT}³ãwÉmÊÇ!Ý\¬}s;nV9ãy“ÆúÆôÑ#x^;/X¶ ÐA½sDî8šù´·g Dú‹µfÖôpôÁèY…e‡À=üóú;óË>Ik¯ÂXÕJ橀õÙ5Œ`Ezá`÷çµÛér?äFuð¶f·{B°}‡AïÏòÿjڛžÍÓg󙞯0ò^ÿ–ÀKá&¦œK‘¤vˆö›7œÊ<Ìæúî4îñàðú.|@PîՊ XJ_Ÿ¶föÃD½Ÿî +úrLВÎ[Ÿ•Þ9]{Tu?ñf>J²W²½¬m29?¦Wäfu«qùÏÞ¬Âÿ˜¡ý©~ë j…ÛώBìò5 ¶].ÜÛ#‘QýŸï9Ïôóþwzÿ:³¿Ÿ†˜‡îH®Öࣷå~;ܳ1{™}Ø Ó+öâ&oú‹Ÿ$i ÜôV4u‡ù®÷_CuìÐøô~~WÆ¥øý‹‘ÙGs\äW^ûeB³>ÍP_ß+ç¶T++üÊù¶T++àÕóહýUYr[¥nշիçê«ç»WÎBgê,ê„uŽç°Üv3_ÅqoÞÜ[û×ÿÕqoîÜ[ø·ûžÈKsÑÆîk±?àá× ƒ÷â{’ss^jÿÒ(«?Kûù—Ëk<®+Êÿr¿Ü¯÷+ýÊÿó¦UÍ¡÷í¼k‘3˜ÔÓjsڗښ­N—SÞjku:¿÷\9‚èÓk~OoÇù]{sê«ñ#'?,Šݓ.¨„*豞E[ÑõNÐZ‚*Ô8úZ.ZIvÓ¼¿S̊•©NÊP]²SԔ¨Váô½ˆª ÈQ,î{9ù馍ÓÉÞ£IË2’”i%ÚH!¡¶;ÌwíTc[9xÓGÈw4}7GI§“Ǣɣ;ÇÕ`h¤9I€ú€ºÉkãHÆ ~f÷Û¬;ë˜v™zÙøí/r´â9Ä?Âtot’4édyª\ÓV)‹HÏïštòræÊ§&>†9‘ó–ÔdŒ<劂âs—?;9lòTtsÈJOÇ +­¼ùó,ÁÎca¾39q®‘!£»!ùW0ыZ÷IK°©c¡Z’ÓX©eiÅO ˜ð“èed$åãdU—ñ¼9Pû@ãùY”ÿÌQÒ&Õ} +ÙÖQ6ÅVÌ÷ª›T ½Ú0ÚÏ$ÂM¢-Aœ&‘‘m¸"ÚA„œz¶ÃÚéÀWpÞðnÞC؟Ks±>vZ.ÄúQ±?’£¥žB·>áF_ß±!“2¹Ø‘mtgKIIC'9Ìbn]©9©6¨´È5Í1A¢egkñÆ ÒD¬ñMzøÁðeŒYá µm’g}kPk6¨ ìÓ~ƒF…d“M #ÊeÇ}s/܉2Þ"L¼¼I–V$Ëu‡2ÊC™dÊeÅ¡)ÐÇd©FѹèÝ/r.92ÚWLšpÊ.¡~4<:ŽºK‹í÷¾_F¶÷ím2ÑӛiT7¶¼~ª¿w}ï÷ôžNõõUþ ”­¹#œ,c.H埪Áܖ¿¥u2ñ;ŸŒeÆ\òpÇUËÑrßþ31cêyºÝmÕûRžx:ªýJyã¹ß±.Ûø%<ñð6q_>GUËÏ0?ñ9›å|ùW,ª3x~|Žðÿ±8îc.ñO[uþ O>^,¨­å¢{º™É=ëfJ””õ”ýíÑjÊzM: Ÿ]?0àô…5Ží4Wæÿ‰Uæ,Å0“Ä›÷ˆŠ +b.ù¹ÚïåºE«Ó,¡?æU¥M)òÈ­FbŸÑAÓ"kìt˜¾*odnJ;a–ÙS¥º.”( íµd8ýô{g¨Ðh¶Ï1 ꊔKCchÚÇp‰8û4õ[.õÎÎÓy¾sˆõ3‘œ+@Ç ê¬ñÔñ›õ[w8‹7)Îíªì¢·•:½¼J$?¡'‰*énjxЬ½’?Mß×I«ÓzmÖÌËTþQpÉ+IduUÔÌtISù$âˆ\ûfjVY—Ш!j%Þ3:n´é´VóY•0÷+‡1ôæ¶*aהƇgTÖ­‘ÝS𐨫&næ±Ã1Î]*îÌŧçkÁODÄJ^©þE´7'œRy_¥' ë§p3÷¶¸—¸Àüü üpzTåNÅψÆX¨Ïž|ôhÑûSUÞ¾Ÿ +É/¦ž…]4ðÒVÊ2üEÜÉï£èøLw¨7ÙÔîa*gS"Ï$æPßð¡Lˆÿ h Pó‡šÿ +@–yÛ@"²U:)‰¢¦ Í)Ú¦¼`“:œ³V—ü³:(K-Á‰ÔY>¯U*p+Ó”þfI\ÖÇ¥"¦®FÚJæhŽ]ªÍ&‡ƒú(_Ø`ה<©iCj°’îš`§ÀrëVTµ»œ8ö=‡Ó…sR6ÔÈPAZóÒ*åw\û»ŸÏ\E"°‰Ý†?ußbq'ª"<‘Âìü‚¬´¨ÝS¶§è}·e-fþdf$ÌìÒU?›ÍOTùAÝ%š¢¬GÆ#ª—™Á·Â¡ò‰F&zïñ:'hR‰Ï€oáñžK#¤Qê¥4‘ì†[F)VDƒ_ÏÁ³ôçìu¡´­úz¶Ñ~ ì¾ +àR¶Ì?±!÷EÄ1— äÞÉë<4³pVã•I\÷ŸA²|ÌðRó {"¥ÈӀkEö˜³ÆÅ˜R[Ëè)͛AM™Î¥¸œØ´¸Á(ú`ÆNsìÎïÍñK,_ÈkÛm?Í5HܜMüp…5}¢ïhrÀ»ÛÕ¥ÙºŒhœ¸h# ,Ÿª–Eê’ K Þ~K.¸“Ù:©lX»Ëtã< ¿¿4?\ÐùL±dõ–#d󱯓ð;xgÙiìÇÃÒ\gßÛ< +ªãe±.18™÷«KR>­€¢;¢ÝRCê×íR>\{ò³îãâ9—³¸Ç:cöQ­ºŠ÷ޞ>~Ç\ýS¼ µzÛõš½lß¡?t¬—‹ÖØpÊþÅZ‘’7¡‹£øÇüì[lځËÑeS¹Ý¦™²ݝßêxASýèF¹¹©à +ªEâ§|UT9JñUQ$*wª|žì2îlhÉÝ«:9óõ­¯ÄÎ'\UêsíW¹©[¼˜»€AÊÁLô¸Y&vÔÌÜ étUŤ•›'Ú¡•ƒ’êT$IàÇRúm?£Õ¶<ãú•ël ùùŠUúÛk¨#\O¼ßÂ|yðU#Ê¥Ð3q#ÒþŸi۟<À€›…Ö{Þ*>VKlHÈrÑäyšÕú³‘“–È«Ó8NleõuÈ÷‘Ä&k»“ù`èS`uRS÷£Ž” y2Áð½½ÝTˆNP†®9vƒÅG%O&»D˜ÿÇGñù)¯¸þĊזþäŠ×|¶H­rÖɯx~ç›ä¬‘ZþDb‰ÃØtS]±<#õ$V¿ý)¯Äˆ‘ZÑúÒ+[û„Š×²ÿjEk½ZEk*¬xøQ ¥z½§õ¥c§~Uì“`N¶†LQ€ðŽâ,"AÞºxÏ+xåxRò³‰ëÖeIéÏ w“Å¢°y¬â7·4ë·Ø_d ´P•‹õ ÞÃó[AO!^†‘SÀ$|ç·Ä-ŠÿKxG^KqBYõY/-þÉ,ti8èdrŸ÷¯ÿÎÜà ’ЍrÁŽzÖ¬¶§Ž33™„ì“åÌ7Z¶þ>3sØJxøÇ[ÏÖ ~ëiò+ŸcòFº¬yy`Nbä;-¬BÑ¹ä Ÿs ÙÍÙT1u Ó!HX÷ߛý™Û¬ÞÞ¢NÜðWû•G«û(õðüCO™.è¯ö +ûå¾X¿°t÷:Ó[ÞàY{¸·ß7êŒÐû6y¶]ÔtæAòÙÇÜ~F¾gàÀPöŸh­OþŽE³ÄäYñEl¾‹Cÿñ[/Z¡/N¨‹²ûKlíý{qþã³Wºÿϐ禾*F×ïŸèíÇà¹ÏëΑìéÉßw!ÏKÑéÝj¾|ŽAž2Øœ8ُ>G!Ì~=¸Ð*c§ô»·þ5rWZ¯Ÿ*ъÌ~zÙדï8çË!<‡î¯ö; °SDE•Q/×PsaÀ»@ªCåyš©t²ÿ(Yõ¥Óá’ðêé"­”vCŒá-5@ÆÌä4)ðíÙT*(÷²7…ÿ“Rȝ@šY3ȵìЍAKÉáôJÜåhŠ'H Pjä‡Ýäڝˆ„ÃWS}‰½/‡ºãõò>il=‰Ðty£[ìèíå҈[ýҙ}ñr»4[¢ÍÃäA¥ØE®… ·¿õäy¬7e]ÂíI½7$ÒO}rméiE™ÍºZ|êùH•¶®_ÍD›&ì›oi×Kb $žrғÜóÓJ!Ì÷õù%È_ª¢_»E4iÒ,™ý½6xüq¾™#¡æu¸9–On8ãd2Á0;)5S×CßýRl|¼š÷&â&ƒyº'Õ$Ýî$œēV$‚j¹f’9’µ¶œ¬òÊØs‹\zøõºPÙ^ìarXªæœMàÉ©´`¬¤œS·>u<ׅ¤‚uÞ¢™9S¼Ð·‹¶퇝‹ úÉâ+7#¢Z;XWZ¨íêг@úõû^Iv±5JàØTŒ¯ ÖÁý +;4çääüØ©ñQS:F’Ô»|å_¦JÒèÚ-º0…¾¾û´i;?ٙ™’a$“0„Àd +6¦_H`}&Ì&E‚ +†Ô¬ Eޞ†`‚ƒ`À¬ÌùúÑ|ݾ¶ÛUo­µmµim$Šd‘£Z…l¢¶ü\_TkRTC?¿ÿ¿}™$’"¢­|úßzï½íç½¾ÝÞoCw›Î{›½ æózûÐÛÐÞo=üÝþoCzÎog‚;ÚÞwþ¥ö²Û¶ÖKÆ ŽËt·£¿<…:ùû—5>ZØîXª$Íó`4Ϙƒ܉Ú;Éý†$êÕ»,ã™ñ´Á𻛚Â>Ñ¿,~Z8j×·LðOµ>{ùµ÷ùÉ@ˆÛ7§‡÷Uò ¸œÏÈ^w4PkŠÇ¶/h# øB¯= åЎ¬ Ù+Óß³1'sÑZ–¹Ÿ<ÍX?ÈXGpÞÎ +'jH䫒S݆pÞÏñ-7Æ@yCtžÝNŠRÇ_?¾ßãÅ)£D%Z—õ¶ªsÌB[nu·Õ‰™«|k¥¬i "^{*ØŸàS7Æ[nInt÷#·g[‰u‘÷i<©²d+·ÉZ^¹ÂÆ­Œ:Ž ’À«­ ýכûôÍýߛûpo풰#,էŸ~Ž·Rg© ³~Ë¡ãE/Ú"C !™¨ç­7ke9Ðu•ñÍÚÇFqõÏÆÇ£獼Á( M¡þ*ä2œ“j(^øŒäKèᬽ×IùoOÝפ>E5|"gGbÍSÇÉ ÝàWÓÐ^ü֟1‰µo“t|×XÜz>9-%qÊÛ^>OÍuó  zújø³h¢RÐ!µÈ=;Ú+ ¿'º‚8EKN1ó…ô‡ƒéCXI«›ÊÇIÌ²XšY1øÝ÷D…;ã_ÈX2 ~¥&Ûû8i0>ãØõ·?'؁÷>œ˜×±–¼­4ìµâQ#äu°&fŽ@õu!8ÿ²”#Å3~{Å)øˆœ÷ÉÕW Á½D0Âu }÷ƒ{…ðғã÷³œ—ç$.[Ȕ5˜c çK-éôO˜薖Àµ½èè¤ýzîZÿQY)!@$_Ÿ¸},iE¬Ê#çîIN•ô'ßVƒç&¼‚ß@´ò`FÂLdi*þ ¾ô¤c6—øÎú äIƒ5ý0f¾Š4ý9ýOV½7Ù-] +Æaev4´7œ¼†Õ&FÀiQ ×ÞCqËCUùaç»evÂ~kêÂ>¶²¬W;ÌAZÇ6NxP¿ýÉrhoü[ÂIaxn´ýqůé7³àwã“*‰ø{*‰w9ã}bN~§˜¥ÅV×Òd :õª¸Æw*4í"ðš3ŠòŽ*L®U®Ì¦3T=¶ûñ–Œñxb+£¸e¼Ov¯|x›U~Áâú"ñ9uuc¡»V¤¿éŠ—*éAë“`эMÒ©„ì´P‹ÈM)¢s*¾•>kvkb„÷hÍ__4ñ2¼’ËxOAùR½¤ï¡¼ä;‰Ãx$_Ÿ:cg­ÜBÚIØá”Ì ½ v§‘¿Àåck9zuagmkøgYó¸Skw«m_VîAg˞9gˉ0Ù+'­‰ ¤ØÒ°…h!Ù + +Éÿ.xI—òÀÊÑáªÇÜÝo?Y¾·ÞƒÏÔçÉþë‡Éõ£éê…üö>™²Ÿ ktÝýhgAÔòÇ;œì˨ÚÖêp‘ûÚۇé}kÃdø‹9GÆ|ÏÃ†Ó x<^Mð6«/m# ­ÙíS˜mcä}8îÃméGÈC>=¬d\š?À¶5wß7Ø´tŒhY[p¶?vR¶æ$©±m‘±nDÍÃG@´qàC³ÞîÜæÔiïM¢k&ïcíÉ`ƒöoÝOÜN‡´˜úÆÚ×yü€‡¯tM®ü¡È£Ïâò\SI?F±é"žXëöEoy>p5¨ÁGÊêŠX¤ ÙÜ½ ««X4E.† 4&VqûÚËóz Fˆ캣Š}!ïØ´æ~P¾ÒuE1D|] — qxïN<±Ë–¾¬_uB‘;Ê0aC¿u¿…›ðº;IÁMÍm1 íSßlJW&Çv$ö5ö­ìÛ 7.ù9Ï!\pÆøEg:¢CÕþ@ñÀQçÀa›% Ç÷]k…úsþšó?ô¿¯?Çâ>OÍҟ?ô§ÏþžFìö“JYÿôz| ÿu\i}œÿíŸåH#1Ò½?«ŸúSçþ—ýYþ>:c°Sa&ú9⇴}cÂä+sԛ +dÕÚu%™—P LJrçS!ï1e‡Ãk»€Pùà 0õßÉWfÃpyïE¯oI´ØÃ¬¶Þ«©/­IÞà,Ál¾=¶6?±GÅGºÓÀYeÄåz›ù‚í9ŸzGŒ¸å”˜4!LðWe­~p‰¡Z,µY¡6ž„¸f™]0Ô¦Çé|J™éÖ"þ¨AÂïk÷ì2áhËУÁ%j¬Õ^ДÓ4R<]MZâÐÂ~s•:ÂLjõœÏy£Auà OFKjqÍúËß°Ôè/͸ Ó-/IÔ*qW«1t=³UaËÞi0I`ØW´{ȍ%¬„–ÀRWïžy-lŒ¬¾³ÌóŽ]þv( 6FÀdüÉÅ&=؜¹¡pæ—Z£QÎt‹€TÎG &u½C·IŠ?ßÊØ”ÝÞ¶ˆë0÷æ>u%ê$ѹÃǼ×cÙ÷ºÏd=᫋™æ´r%͎*;˜8ÛK(FÎû £#_WÖ+•<­#/£!é›#å ¥;ÙÀoÏ!¥-v2RÁù; ¤dfêËÀ‡œ–6!ßhc{¦±°åüÝõ&{ Âwê{ëÄó÷òÜ_´áyÿñ°uýïÓ°uÞþ݃¯A=þ]ƒ¯Ý`cöØkæ>Î{ùØøØL÷Ó·» Ÿ‡;{°™ý)Òìùq†G¶ƒ¶½ØLûƒ¬3^´ðM6•°™è'VÂgÑÎÉØLçðÞÎÂgI;°™ù3~æÂg=êì&{ÌGùÓ4ÿýÿ?1ǒ~W‘ñÄàl´D´X‡¶$tv +óz4tÕ.È}› h$]z•®·„ ý–ÔŸsïöÿE{°½üoïØ^õš+݅î£û¶¿±­Wì|Êߥcä±H¶ð셿ól+cñ@{ýÛ +ß·ùö»:ßoa[‘ªòØÃBg +.ŽÂÁ_‰Z¶ÆF(ÂÙlb17Ê×Hºþò×Sí‘¥ô“²c+§ŠV3îsÈ;%ƒÇ¡b´z°ŸÕ›Q¦%äF–¾%¬ºãƒ×(àÑÊ®¦ZdÑ´/·ÞÇîf?ªS¹ì‘Ðíç.âØÜ4îVéßµž4¬w1é7¯"nS9óÂĬÍ?R†Ý +¶$Ko´Î,¾étÛ$›IØm)£a`›JT¡´äÄ‘›[¦UJ4yLâ‹%*6Þ¨Kü ^?`ÏKÓ8[þþ¾Ãþx¿°[7õ23¥[ëÿ¿­ØÍPšpân•ùœ‚ÿ¡G¼%}˜;Ÿn±~³¢äkw™L1_±=Ž½?JÆ.Irm±×4—ÛÆiÅñèvç(ðº¦ÞÁz£õ°[D`¼Ï+ä¿f â$™ÚÚNíP‰ÿËdA€l)‹ãÀ¡Û·³,¼•ää·+8͂ìb²FLvžÞø~¶ð½½ä„³²¾¾u¼•þÍäQ‚åyX.îSû0^Q,l¿Wý_W»CÍ‹ßŽtÞ5jâyà9å¤Ëkž"²¾¥Èô¿òñð + ¸TÍM• )\(‰qÚ³ƒ§N•ÙKFðàSž&ø÷ÂÚXÄìÙ¥‘°ŠD´Ù^m)„KFI›¯›§â“ûßk‚ڽʐ=ùìE<Ũàݶ-ŽPçÍÙZG“þÂ>ÈQ­U{ –Ùh™{tVÍ?¸3¤°óÜ ß¤\.ðn Ú SœÊ§÷Î-R[LÄø7ð 2¢HzÉAíÂftTnAüd‡ŠäÚ²aPìM†w´ê4ڂ\–É„]ç Ù[r“{;{¦–³rGDŽâ¦æ^äB@͜4Çrƒ-9®·Þ»@y¬Š–Â:AEÙ°^ÀÚjÏn4žΈöð,xÍ+ü¿Ye»›ÄŸò†3ähÖýJƒwí¸ƒHÞÍÎw:6øòZý®tyÑóUè)_Vî•þK‹Üø“eqh. –þF÷êחµE®(аw¥ Ž´'¸û¸–Ò ݓ^ÒoqS“ß^Ã.ô\wq8ƒàŸú帉eû²ùºIT:Œ „O¨Aï±¥U¼Ò©éÓKQÏä‚÷Á–ßÜl®AƒŸˆåÈüÖd}äG2ãwÎ +§ñP{ö£b•,®MqP äìšùX_jZ—po*Ý9&w݆x|Ã_W +'™Æ"l~khUiÇD<œõBf;C·¬ ,ÌñšŒ×áN_×E°#N¬¼ˆ³b8ùÛLj üHšˆûó­ÇOɯyœ9]ˆï`kå“Qø½¼®Ù •>ša-~Îètº_.‹0ÆÉ¯èpy¬Çµ/eìf0¼øŽt@::ñ́D€ ÷^Oà§tàê¨Â¹©òÄÈÓ»õŠ|N• í×I½«£¶7ŸîmI‰±ç¾Ú#Þ”ÝÆÍß\|VÁe»`¿ï^È3yëw ||&Ž}7³Èô#Ó9ä™z;VËz;ºÅ½“7_íô"Zkûv÷QwHfÆö(¯‹aé;…Fl&å6¸êC†Â#PÏÉÒ²w1lM äs‡â;˜²kõÛ­3áÈîÎߎ^ˆŠãÿßlÿöŸÓÁ}aï +ðDýÖkìÆm4™¼ÇÕÚúаÚЩõ0U?~ΩP\}«!?¤Ö†ÿ²Y_`œÓFYIVY9nHõ?ý’×¹Oöì0ÙI¦nÑÓÿ *à ¢ž5Îu†Ž¸¼?íâø2Œ1&¬1æŒ1Fl +Z£öEªŸú«\‡ž%Î?‚ysZglŃn›Ø—^هýráÿ¸¯TàÞ,?[§ìíŸÿá×>QòE½¾Šûmÿþ•zÿú™½Q/¯÷id¨ç1CR²Óxj,vC˜£ÈàÓ³²§Ö¨FýïZ‰nnÅ0÷¬;V?-Ó+ò¿÷sÌ`KjþÈÕëÔ"‹þh>¥h;v§ZË݃õ‹AÿºYø–Ðl¾ºæw7ó’ø½ÿÒí²W;v_êKx2^UŽá¾‘¯uUòúýž¿èè~^֋ƒ!Îàíh8;\?þöô½Ïe´ð¼ö?¯eÝø–oæ‡ìšË+âÖ¿t= $ó…*çr€‚u{´RTqG«ÄãçDÈô¢qŒÞ£éȲloÊb—ɸ@ á´G왟¦ß’XªçÚ +¨?"‚ìo–F+¬?_‹j«d|ð@ʝ‚žV(•((x¶2p½0b(ûø>…¥ÚI™Ë~¼Ã2&\äK$Çh+‘5šÿö¦‘yôÃÿ9äÌ|©`ˆK­‡ùüî{ zû7TÕ§M[¯ìûOáí~?øþk< Ͼ¤ìh¼÷Y)›•]š²x7üòÂø£h·ÇËÎ}„ûöSìçåyfÆÆXÆh.5“¹–R–=áes ¼ÐýE:NÞDÐü.š·E¤ê:.¿³¹ÞowÞ/¿ºü?!l—vWñ~5ìØ,ìò0$Éb1{¢Çcýæb³8ÕyŒ¶o +ã‡s9uøZ´OPlQÑoøwƒ€>nïj %à§oíÐ)Ëä +ñÜaü)Ü SïÝ"ÿ K;#IË +ÙzÄ °yÑ)›Iê/úRþÆúÿ’Ê`ßÙ__Ýú—öwø}ù¦ê|û¹¶}lŸEþ@žvE>‚‹ýr/økʃ^¥t_è9¬ ÿG¿Ó['ýKûëý†Ñäµþ»Ô³¾¿ëð3ý}ύ{/e콗²ö^ËÙ{/e콗²ö^ËÙ{/e콗²ö^ËÙ{/e콗²ö^ËÙ{/e콗²ö^ËÙ{/e콗²ö^ËÙ{/e콗²ö^ËÙ{/e콗²ö^ËÙ{/e콗²ö^ËÙ{/e콿mƒÇb'ö’ŸÒ%íDþ•ÿùÿ,©Äࢯu¯î¢÷J÷N;º^ïCÝÖ}lÿÖÔ}oâú×?_~CÅÌêü—yKÞVw™þò»¼Ôñ}Åäë_;¼»@ñ, æ°ÂÀñƒºÿþ*¯,sSד]0ù¾ïáFÂøY¯•äBÑð´ßVº6BUÜî5…Ûa)ßó®³=ÿöÚ~M3m­ ÿõ‹‹‡`Šfößä£tö£nè=Ö*7þú/öP»FâáýÚ1p"göÿý¡¸¾Ðÿ½tÿýš.LÃû…DŒöNJŸ2»å%=¿Pl擹xŸÝ*·ú'/«°›áÈé³µßâNÊ`Z·³¸,I}Šá½›Jwº]ÄÐ;5ljaôŒYTÃÏ1”¤‹S ûdŠô`â.“5à¿Tq 5e›«­9„÷Ùýó©°<áïË K9˜4ÿfá:O9x›êö{§‰Û?·Ýú{øÀ· áë)yÊÎw¡ƒ6Zl6¼ì‹Œ,{÷_UZ¡yx„]P]~·ó…<ñjþ*Óè½Õ">±òPV²ò£`”ÓÏIàzìG$–o‰†À È£™PŒçŠo¼ë築fÿLïj×êbO7{â/ªÈñÍ~$´ìúxêgyù€áɖ&c‚R†½ÿùiãÿùŒL™ÛÚg»ÃàM +¬z݈ëϛd +€éœïWÇpLþøM†fÔk™“ëê.[ß`ófxý¦zÏz[Y<õ\P¬#è¬M:8[‰ÔéœU{CÕ£½,íëƒF5Žž¾vóœ–a bShz1ŽdøÆº{“Œr“§Æ"oܬF1;ÍÏkú1Æ9ՌɈ“?*îÜßÏ'Ïd+³1[•{&'©Ñ`o‰óˆž;·êäÏE7xÇ0&’óÇ"ÆM©Ì»”jp‰(-f‚ÞÓ°<ÔHñ=à§ØøD­ J…K[Ž[‰Î•¨üB xÏ^8J^ŒZ“¶ +fîÀõ;ï$̳§jÞÏqj¨­¶$YèÇü/q 'ð4äÐ÷1P¿Î‹ži¢Bvƒ +}V ¥'?†ç䊗ïaß +ßQÎB˜€–³¾Á¿`À.É«WÇIÀO]v¿jU¡§s"ã!šN'zNÚT™èZIöžAÑMÑ&[–Â¼)í`Tð§€z\í_JS‡‹«h<Å –òàýˆ)ðZâ˜Q¸ z7räßL(ý棘±(˜ÈàXÓ0'?¼#جáë“ MÀ‘æÜ‘Ÿá™.ͽfdé+ÌÂÓ,ž*á7dýÖçMN“{9h S>eÖd`µ~Ä`j–t҃Æj…zcF*Ÿ|³øræñ¼!î_–ßM‘®¬£a‡€¼3Ûz³P™O[¸œ nâû€¡Ô²hŠÉŠ'ùUx"¢[Ç.7z£Æ,NFan½ å?á9¾ÁšgäT°‘Óªl†y¶çfH·^Ÿ–ydÁ:©…{ÓÝ~ÑŠm>,Ú:5Ý¿ÄWy• +€Ág@†á:©ÂRèĩéÿ ²uSª×ž Ӟ ‡ ÅìÍ¿%´Í# éÄ~ª`p;k÷ý¢—YÉ¢¹¼‘‰”Mb_»ÁzŒOt¨~[p·ŒÖÒłÕÌâôÂ+¬Ì{EGÛÙ°: p`­ÚåäùÄÚ!ê)Ï2?‡û{.ý8/A¦O|®™ ÄÝîÍ¥=´t¶ìèžU¾ïØsöÑÂÁ_£°ë™G…<8ÒÌMY@ÄDÒíÄʽŸ\Ì]Á'šu÷«Ää ?1Röl Ð{°.\;ˆèÔï³6zêÊöúüTMs˜ÍnEH@ [üͅokæÛXóK¢íËül Nvr9I"#âù¥5lȒðî´I,ÃvÄü° SÄÃÔPx?"Je£Áx–U¥.f%CZ–0±öy³üxkñp£]þ4ŠñÖ[24Lõý½K8½åyÐ}Ø·³ª–™VÕ)ùÌ'+gÌöïm´ü´‡Q©ÍœºÃ7ì¼¢¬ §„·³Èí¯a…“@z3ñä=hûdeHdä=-²bl«Û$Ê=’Ll56¤e òÐ,b›E©3ˆñӋ'”Åu&n‹w§ó#dà$Ïn/°:ÒËi¨_&lÖI«ðÿ¢À«Æ«gá¥d [̰gH.®kÕ7k;ßhEIÿq šÜk-†¾ +¢f9¶pzćÿÑŸÒ"ƒˆê0Pníé~G"m•ý ‘Ú«µ”£´x£Î’¶‚t܍NFÔ`NéfLúæ€ò›¨–Óã¬2²ðy» ¬Äòç£Ñ>òŠ‚$Å*µåUf|_ø­5¬à×"ÕÙ õä=\Ñᚭõ…C†ÌÌÑ!Ï ó¯O˼ˆÝúm]¥%•˜{ +Y(±¥¨c°­µn·5꽚c9 ÝY+ 9õ›oÙeǗۗmÎ_“õl¬ I׋ª2·„[±\oœ9¼ÆŠ‚¥jÄ*·x¶¿ Å#cMÈCi"ýN“™b Ò˹׵¿ ÂZ>1°¦¯¦Ummæ‹ÇÆ,‹½4@”l9bª1ÞÂx±ôØy½›_ãš:%¯;òè%“™£#t÷ $ŸƒN¦zz<73ÁÔ’§?À› ò¬F·J°å™BÊe›BÉ@±ÔË87aá­¨Þñ_ÉÆCÃáÕaï2KÄW0HšÓloå=Z*¯'ÅNù<޾†}ÔN™L†OÎù?6­?-喒tÞšJm˜Rμ1Ø€Ùæäk>§+1O +Zž#Êsö «g¶~êÖ½S¥‹ øx¢<æÒå=¼S­ä0ñ *=Üm'[¶úîØæÛfµŠu “ª”âÜ¿gøß§mCpIp2vZ†¡‘P¾’I~ºÁØSiÖQ¾ÇJ5põŸå«Oo†à¸;:¡ë…< +Ðô«uÒÅZ³ÞŠ7¿‰PÊ ‹é˜ú&‹qjÓÛr÷ܼ¡¢Ziik‹$ô3x+洐mQôä_ˆv­û*"7¨8``¡½êTp™/¹ +‘ IXëƒãË„V¢ÕÄÛÍ4„’1IM‘í +|m}„$};—ê[T ¾–#6^DŽK[š„â¯KU+h*G„g´œÉ7Úx”œ[¨-(÷1‰O̞y_="xû'Ií‚¥.ý× u¨v‹àc 3® `”³yCÓ5ÃLŠÇҜë*›Ù›Ág‡.…ŒÒ÷Kj=4ÃfÿQêgïÝ\éñ¯È¿zڄ¡þ UӍ ·Tàøµn­«øy8¶ð!±O¬½^o›*ÃóŸÐlUEj”ÝþfŸ§¿¼Û$zÕå6U`閟&oõ¬ó²y#Џ².މ-™w ‘vìW¿™‘Öã• ðØ]$ïg‚þSEÏ⠖êëå]·³7v`×0¯”UÒ¯ÍÆT½ñ´ ó³ +åýZîBiSµ*@õøéx3Tíìßв ²|ë…g½ÅöÍp”+„â­…Á7ô2Ð#íÁ2>ñ °¦—p"ÓÒM¹>Ó1ÓZŒËôm‡aÏó"z²og¾-ŠK¡Lu:€–VÕlª¤è´{ê4rF°SÏ6”x›ÆÒћ¥³Øû”¬¥ßG· +ê Öò˜lµ½go÷Δ ¨.AN@ç>cÆ 'Qƒxµœà˜ç„)à¿QȤufÐo8›ü4²Gx +I'ÀÍ¥=¸ƒ‡J ©êvL‰|–p­Ðª çy†”Jpõ™U„×%^ÇÛɟ×Â;ÌȤ¨plä üð‡ôÄRÉ®“»ãùܶÂH^ wžvÎð'$u´¯ϾҺ¡ %vF”pC’D>A,€ë{êT"¬qñ°jÇa§éqÕãL ~s{œ«µ[‚•bƒŸÿ•ò«Vþ½K뿟0ÒY¥xK,çÿ¼ÿW¹÷)¿Öÿ5 —øë¤ù›êA/M}H%ÑHvÞ-H%èo—0ÉÍàïòKþVœ©ýÄýt‚_kyH%Χ'ýiý¶À¤ý/úi¾kúé¿ÿ81Ï=Çý¥ÿÏú*yü‚PǓB +í?K-_XÐÿ+.ûlyÃÞjQ„Ѱ¸œÊðšՄhòØaùù¿9ÅÔÕÌÄT]ÉÿaÌ@%àÎ"åšäÆýiÉõ2ã»Ü£õêy°Z=ÿZäßöÉC¹ô‹äàûÔë3¿9.wŠ+åIûT:xßMÔÅ­Û>ú/kâ]8oäàÎÿ¨” àýn¸%˜Ï‚~kNÿùp ëe?øN묵콿ôh¸ÆÂnr&Sw ¨<ÿi¼«[aýäʹ¯™ùÿ%O•Kåpþ÷mÕâ{M_‘C*ïЫawäUò¶x¼Õ-a%ü~rxdÛ[WÿÕ·¿ÊØ8ûp<êQMþô_ԋÜÃôsÿ¯uâ¿9Ëý»É搋Üù¯w‚ºá¹PRšÿÙØ8Ý́ækþãõ·ªU1Qÿû;ÁŠÿ×t{`øù™òVùϔ¨Tõï0|²Cñr­J«§ª9gRz÷’ûoP/«úþõ¿.œR>rCDž.¹ñoŸ›É)L÷P~ ÈùŸô(3þÈsÊú‰ã«W NA¤&ªèʪÕ7(œýºÅ½Ú¤µ©Ïkñ*Vàe“9²Ç1X`S˜7j÷åÀ/¿»S'„ðüÍëóYRg¥©,,ðjJ”"¯0˜G$XT&,鬐æ7ècìéèÄyœÂHË&e;Š´U΢•3SsušZ¾2sáîŸFBbÝ  ù˜ÌWédŽfä´µØ|þﻒ:R§>õ»Ålw1ÇÒ÷¤~ž;à<.ُÅû2QjN®Ž”R_°5Øy‚#ܘßilêÖwû˾t Áàûô!õöN«å{òÉ>™&öu5)ª2º!ÒçÍÒ÷°Ÿš ^®E^üðgCY!àQÄÍ0Ì±o® qÖFíO›‘ƒãl¢TÎR±ƒ:/™vuQ¯Ò¨"ß]Ð…  ºü&úᲬ• ×VcßÈØàµ³a9ó.¡sÏәª4/hFø`±“ÙЭTŽï§3Mìþ `Ë! f0ËÈêä›'å·?ÁÌñNŸ‰<~<¦; }ñ¼ù”ãÀÛUDÜaéâÃ'÷—ãþœ²´C"Xô´Nvq^\VùVûÓ¬¡Ô;±»”oØeI9ÇGµáágáZþ$:¬²¸Òl¾UK:瑀¥ìyН§v5l,›XuóáK·åOPÎ+‡q*‚ &{aÃedõ‰ø'Pö°‰Õ*«è§þA3•6RíÙçz¾›L¯Eï‡Ù5鯔>|'S‹¤ó]maR?4y>†€?pö9µ&2¡Zïv(¤n|üôԘplèÏÕ­œ‘ºDx0±/A½€uµƒŸ4r¬Ý§3C…Á;¨÷1©lnÙG6{õ5&ö0VM²OÓèrÝxĐæêYf“çZ,õåÁQø£ïG S%‰[DðÇRåxðIcwcüá_¥%HgŸì® ¾ú}C6^UºÒ? kóˆ)¨ x­!nʜŽW|0ƒæšYt”PMý„õ?Ì>g kÜø§îÂP`Æ¡‘žµñÏ_ºN´S¤¬ŒaèÿßÙv~»-˜sãäï;6 +ÎöìptõÙíÖê4Uš¾oòuœ!±Ø³¶µ»˜HP‚Añ$i¢ô›E“üë²RéC´ÅAaü¿Tì–†Œ=ÿg\t"ÃÅ:Ë·ê@¬|žF‰ó¯2LýN®ì¸æ”J¼]Z™¬“å: +_a¦\ú³Ò\bY: ô±{>…í“!ó¯i ZªÚʝЏš3ëÿ2M)@Þ7ÆÃP¾±ß Œø¦dØú¸V÷¼Èî+ŸìíÒØíOÒ e™'€f~ +€¿QÏÉ"¦E^oÕ,ú†êAË¿NÞ¢—¤pÈ|U/b6¨¥˜7ŠM[?­;QA†ñŒ´¯S蝣Ãi>–”jyŸæ| °fìj¬ª 5uZ~ ŽÒžpà¸N –}ɱ“—`~ Ò7ØçƕxËÅðj¬6Õþ‚^å—F(ú/—Œ—íŽòè ÙÆ¯]o´òòaߟÑàÙtcæ|ìòâJ!øæh}NõWÊ÷þ*8vˆ]¿òè"3iˆÍaÁ@j½y[ï“l馰Wýb:Þ¬ùç°3ü҄?*’ƒ’Uw Apï¾ +;Oø2Á|ß\zM“ðÕ×d=~âó$ó˄ ;<±:ß9Tú™i>Žø}sØz\·¶Š ý¦)Çè¤+*Ñ"´DPK[ö=ŠBèQú,R¹I×äë4ìu.ÓIÛ¤²ÚyµO[Ýüâá?1×;žC³yM¿S<ێõG“!Hù¿£ñº¸ÓâFęp•“!ä|ú>äÚBjo8}ÏYøÔ×t…&Ó¸Xî„h¤Ã®c€j׿”èûj\^¸ºP‚ãÅ»½6¨«‰ͺBžëNé%:¤V:êNÓÔ¯|žGm›ö]šÛO˜û©­H­’5ŽmÈy]ûx7¦ˆ7à!O ä’ù¸ô’L€@b$h$Ka![ŸF}"E¢ ÕôÒ¾Ud<- +FȾɘ}­·ZÑkm9| -6Hµk "KTZÛE\¼U ÿýû÷ÿßf}“0Ȫë-å»¶ô.òï=ÐÝކï9íêîïBô7›ÒÞoKz›ÓÞ¶ó›ÑÞ¾ÿ·¿½Ïwwøiðû´–É$²O*[ƒCì"³ÍsHGéuâ¡hs°<ÅKsÁyò ØÏµºW<©O/€ŽD@՟@̃S‡ØóŠ”ú`Uo–oÃÎü‰µÜ¨?HZ7Ï*4fè¬G}B©Ów O«Ž™`Uµ¢ìˆj9¼ÑÐF; a;¡ʂีsp©põ8(xúJp‹?‡އþß|‚œd)ô7;ç—Ô¬.‘Ï6–H·­öÅ0åå? Œ_EŸ‡Ž»)p<ïì)p5j·Öðv@‰=„FºçPÿzÍRú^hŠH½Ÿɽ̜¼ó°D}éHˆðtKgàq/A>ŸÇOôn]Š õ®(k1Ý:ä,Hª06!ä´£ cYŽž®ý©`¡cÀÌüØ£ÚqÁî™ô!‘šnûÐ#áãJ¥ÿä£MÈÑÏâÞhéг•ýª^ÿuRÇpŠhÂ¥=É©A×§G}®gGò×¼ÁRî+šÔRïjué#K¹®j•/$p̞¹(Vð º]ž~d41 +–ÞºHÉÕ̒O±^e›Ì¾¯'‘°Ã\/§r2hÍ֘êw9æ t‡+û/éÜÒÓãó÷ÐðÑh}¡`º‡ü-ë-’-žÐñ2à³95ïP±uÅKÄBļ,ºF‰ Èy<ùê(X:7AµÝÿ>d€ÏÕXiÔ_!;O¥˜…Mòð®íÙ¥κÛg¸ph]¦Êø‹ýªT¼,ôúXm¶I6üÛæYcó÷ÌîWb5øÜ:Ø&Q»c÷à˾¦\‹ÖNiU†Å…E/¥[ÀƒóR” 5u»·÷&aæ ÇÍIˆøNÍ¡˜¾—u\ÒQÈsÓ"ʛ…½,Ô%±` ·]ë½¾½ùkÝWÑÊ<”¯£•xӑ®È=nQ¥~D?98nx;ôÎQ4{ó„3÷ûXb3 vkôÊñãõhy~ÀtbÃäüq,]Ò5:ÇO½'t¼€±\Ð͛uGA\à&š€¤CæpC4ẝ À͇“7Æh&À°ü£.+¶@½˜Rn­°x,1Ìr£á:• ‘Ó³¦} O`¼`Ñ!ì ÝKý€B“uOû/A‚¨-µÆ„&›cÆÙR‘FÂy¯ð{!#›~mQñZ3J±ãÛ%Ù^»­ëд¸²ÈÏ:{ý!%@:/œ ,”Ò¬i=I#bÈýMYÒFfµMT *O2>Fl9~Bç£aÆeREºêÄ_w ¹aX„á¤hoé»[o¡6wÕ¾ñ…cÓóØW0gò¶|œNÜd›`XA×£I‰õìÇí;c“Ii1sûØ•d~ŒÊ"ùË <›àññ—Vn·ž2ãˆ~ª@L s5–ð Q“VJ ¹å… +=7>9ɬ¹vJG.÷¹}/€UµTªõûéƒsHœ5NI¼¢åq8Œž°ÚάÉÖÒ_êdší«³;m­Î4‡h •;4{3@Y%EM„áâ ñѦ¡Ñº¯=>½ƒ§ûc=;L®¾;êØŽ…‚í „Y'VÐè:êçù¦ƒA¨ýŸ 4^?s‡;ç´ÞÝBjÙ  hx‘êÕ<ºum]Ô}¤ìF…‹2hçòóHò2rGá>0r7ŒCýŠŽÍ~ß%;I~2\¼t¼ñ’Ó®ã™:tÉÓQ%) +wJK -0)¸étd—‚2[xés䗃2\ätµÄ–àÉs·iiåð†D¾oÂgçóÐß)yº¢ŠÞü?( í»4w)ՃG µ“Ô'‘U£6â}fA3F2:Gw7"Ñ:¶gA#èÊ$¨°Åå[:O¡—"Bù.ŽÌq&O0 G:yF¨ÈϧW|? úeÇp)ÕÏGìª)×Qp´ÝØ«­¬å¢ìºf;–1¾ÊŽXdt «Ù{H$‚ÚŸ!qEM:¶ÇAà,Ù¬a«Ëʟ´¤‹´ŸSÌ ¸W¹`,ñ:Ûl£têä‘Ö1TlÀ¯Ÿ¤$úž†«½™e/ïiû_)«ú®*^£Nô|U½Fù\U½¡ÐqUZ¿ÀÅ()§! e…»8Ž^kйPíÈé8’æ è7iu$–ÜÉr‘ÒùâKþŎ—8Isæe&O–;(ØÊf‡fANû"áê3Eñ¡zŒÝ‡Ï¡\óéþO|ÝÒ¼ »Ë[pîÿ“ìs‚·•þZ®N?E>„ !Î}ÙS4ë'¹g'šv“ÉeŽÀõ€q0éÛ¹Zƒƒ_Sʏ¦ŽõўßvUœ|—T}ŸÐ«“¯˜“@·×Â3”XF]Àõt4…™v…mÚ_¢IrfKk.ؒÅò1Òõ—5¸-é%ÇlAKëI.|’:]Q%j!—óä—ÍØìDKæa€w³Ñ!·¢üA-˜FÁ“‡†ÙwXmvæê£ªÞTRïsÿ%>–þ̛Xt}mãñ!BâÓ2^é÷NÀ5)oi_—© þ…$¡kÝ=ŸŸ•`î—Ñ­×òç–ÃÊ%‹fübþá„`* Š>œ–5Pž„Æ;âî¬gâ£3‰3î³×© ‰›j„ÝS¯O"Í =ĤgVr5ô†QÖú0òL7ZFÓ:?‘Üï’NªÓÑrM¾µ«—ÎÒÏàâs½½Blºó©Å9ÒU¿Žõåé?èÒöã=Èù‰Å‡4N©€ABg^-ΧZC<ÿ€’ûj +¬ômF£æ7[5Øcˆ÷ë´Ú¢ß æ¹ 1Û¤s¾©¯üԇBþòš¶ò;´»RKdO»Kx‡tŸø ½X=~N%ø§èIv@)/6ImŠ ”T·D—*Nï»K¡$°…¼^'PþZT’æB@xKâPõõ…3‚#>ßV´†˜û¡™þ/_4eßçH’S«› SÅao|‰À¡»f¿_|¢¶°£ +Ãâ-ÂfÞEð§ïF‘¡7ɰ»‘0ã\h§âAµ¯àǎÄàǎípcÇŸ§“zŠ’o=j`Փؒæ"ÄÄn'4f‰?€ÌS·<8HqõIq8M]wÅ;*díM-Å/¦h“ñO3×)?œ:áÉ.-@t¼ìX=#‹+üS*¯iB¡°›™ß7G"C@£ôùGþL)£Ç"ËÊÆTNV,k/½ÂªÅœ˜€»\*±-*4È£_ÎG\V§[ÕzÈJR¡Â«ûE .:t–V‹kî'zÃGX2á[¦1;iÎ+/Ui®Ñ…¹B/[ýnqn·9û÷…'Eënǜ)†§hèÍ•.n2J"4Ñ29¸ûªâö:‡þX=™ J¡{[„+ý>0è% -ù ‡qó–†{=õؽõ«²…ËÕ .Rd$®ÎØÜÝÎä” {;¦ÿ ð°AáàÔ°D#/Q“r"43,ê„mr²Ó©'RÅgÜÜ^mJt×Ë t’²à}­ô(TÈYô㪬ã£8™kê6Y™xΧª×©_®e» 7YLLj팽D;P2úúÿi}hh£‚ipk?¶Z¬´$!ÓiȘÛ|¬¹^Ór+÷eËæÄÞY2ìyråÝ['IÓ{¶5Š™…Á+/BJ:âP’ÚÆ ŸS¹«˜ÀŽ0€Ð» 'º >¼Ê&~aÿñœt2cãóÓ£ÿ¨rMÎ rˎùøúßXý$>ä¯RZš³‘?0$>-V¾+§¢_Ph½Ó˰ð`j½P¯BÉ<³C ÷žª¬×8\ §.eWY0PØ´Ü%²yi#ðž’ Ú¶LÌð0ÅÅáZ õÔé2a6:_Ô%Ç4dðm©•Ä™ƒ:c…«+}ÏTÞ3´kèëÑÜMÞ$ÿ‡žZÑÖ;çcóӁ2ÁžõZ],V;¯ÇïÇôCEþ:AS±BÓå°V•²¡ÿPVGX–e…—^çá«í©£êËËóÆ^X}„ïCü›=È4;˜ +Ít¨LÛäÙD+„á£\˜Fã#(‚ÐzN›‡2ª4}(‘•j“ôbÇ yëMÉsKG䌿jî:Lv©˜)ÝȧüxcuäÈû·$¶Ç¤$Š—ßàU’gɞmeVH¼¤t¾»¬‹®Lî.Œ’犐 âÄ´äµ)ùˆþ÷‚/-/L¾oê´“}Ц*M:ÂBdd)áeI ¡§N„䐛 +øt,A!I™ +xèWïPM❨÷öRTÉ,òØv}`H=ZÃGF¸2Û"•Öœ‚ýµ…úe…¹–²iUŽ:â2¢™~|¥SйÂKøå5ÅT¼¥JèiÅCœg…šL2È¡x¡é|‘7 €&qÐÐßÈC-¾ýHZ3©Þ å¿&Yð²Êhòû9õ2@u…¼¬~Œî…3.ôå/lp¥è‰-Ð7|t¾¤’Ò ‚ñÒé‰. —ó¤—TSx®Òå‰/0d»üN'ÓA]Žî"E–¤ž.3·í…™f·MO$X3I¥ýB(>ˆâË3%¬ 2‹%ž”}…;ù ÐÕÚÈd&õcIJ¡M7/]"bS½aa…‰W,‹“ šó(mȱHœíAn®ןS±. Kµ; +Ÿ£ÿ7þó%Lœ,8r€BT E¢”ãÑ;îߋ°ÕV‘-n=I”˜GY2«¯4"ò £*íÄu“j¤u^ MÞ£;F ‘z$MŒ“ê|sÔfKãH=²õ¨”¸÷“ÒÙ­=.ÃFh…ˆÜÏîbÄ#HŠ`7Ó쓕rš,Òê· ¢ÉÛü’A8ß"Ü1`q™»$žõ¬™P–}àYïTИ߂“Ÿ›Þh° +N¡‡È)"èaÒÌò…YªÒßS´<î9"ïV¯Q“/‹c҂ÊFšÆ´Èx±8 KX èÄ´È¢Z‹Dxú™ù[GÔã˞¢zWg¡âì•'üô9à2ü¹Ù?vyhsnãsJÓԏ›N¬ÜR\Îö¯…OlG~±¡ÛÿÓ P‰XR*ŽÉzjÁݕ.OøÝεä”v¥Ü¨1wºz „l8Îí|‚Lä‘Oç~Cp«ð{œwÚþÉzáÑ-07Þq™OøbN™°·Ÿ»RÜÈRànÔºxÊZË Òúæ¶·á+?ZÌwa4o¤øž’x%1®qk,’nöt‰sXÔrß1˜5 MăҌHåkûXCDIQ'„$|$ùš¢6§Þ©áÓ¤4i ÔOkv<ÐM§í­_þÚÐ:ýyëA®è?ÍÓabrnÒcÙHIhæÒž?ÍýÌT\Ò6Ú\÷4üµdQ°ˆkš&«MØWzà3Ý›’ň}ÞB̳œ‘\—î«íнïįa_˜þ*úq_ñcãû6ñqñÿªßàÇÇñ HßõD]”çÕn®£CýFêê4?nÞ îóì›ÿv£‰ü†ÿ¯QÄÿq¶ÉÃ6àÿó•öœÜB¾Ó;½+í&ݟÉ"DØf¥MûØÌî9o!ËÈg{²$sø±“¿í>¶>ZÜ1§YšþoŸ”]7Ò!¸–¶”ÎÅ"Bqêù31œ‘u,‰\ùm_Òþæ¿þ óo3 ?ÀVi´|¦Úîj æT»Í,'9·åë—à®`hÏ÷xu뀲K®\ÖqzæÒ‹—IM¯ú÷(ÕréSòÁ–‡LNfW®™À¯]5}^ºlß6æWžäNÏ®]|Arëø ÜêõØC!ó“K×aL·¡–\»–-mwzn'“\»‡„\»FGŸèAãóš»]½GÛúÌ:¬©¤ðWÆ$µ3œ—„{ Î:½„e|Õ꽌ezšôSQ1!^Ê2½­ê½œe}꽤ez„*?Þc$+ÚÆW©nîõ³²í£+Ú^«ä£+Ô ç&TRòñ•ó×¼}Êûíê¾b2½•ë'̝F¾0òaê9é +ù¨Ü}½ëæã+ù»Þ¾ÆWàÔÌ÷ŒŸ~Œ¯p ó Þ+ïñ•êa?!_?^¦^öÌ^+ð•êö;ÛÅ~2¿‡ÌÈ>ËÑÁdëû©Ÿg5èý°³ÔÖÆ>xùÉ +ö•íoUìc+ІeÅ{(ÊöW½~Î2½AI¢ÎÑHW´Œ¯–½WµŒ¯˜Œòøêöѕó7ªù(Êù«Õ|œez?ÔW;þïEÛô^7VÏ¢úóÕ‡x: =G%zÍk:ƒãHW±‰Ök+ÔO8êù(f²¿Â¼ãì¢cAu•ûüD…{8 Åãø™ +ö‘²¿IА¯kx¯Ö^+ÛD‡ e|®.B½ÄF£‹ÑçWÇ+°váQ­«ïñÕìo1¿3yé +öK7ÚِNñ^Î$8ë+öÙ +ö‘#CY^ ·=ÇWµ‰šÊûÅ{h˜×^/GÏÈWÉD€MeM€¯“‰EÖWîïò‘ CY_Òàd+å¢BÍ÷Šð„¾sÜW¹ ¯˜‰&ÍeWx¯™‚å+õ¼Ü…|ä?ß>[ûèd+ÃB#4~â¾ã¤gËùìG؂÷º™îçJΏdkG²5}n³…ßæSÉ}\ûϯ%WˆÅǑ_-ÿ©‡èþnꯩú>%¾£Ñu_ù£ö|¿_øû<¡âÊdü_´ïiýU\x_ÿ•WXåÿ–ÅüÿßÏýËâpÐ)]/…sá]xT>cÃ{áÚøp<9íRZ­«SªÝê›jèõyÍ^—WrWvے(ú6cL÷Mk¦¦žïRïtî§½Ý÷­´ôz|æŸK§¹ÓÝiè{ìÇ|÷¾µï wÓڄµ F§Q»Ô6ïèûüç¥ïî{û®þ‡ÀÌx| _=à¥àè<Oƒ»ð[jhõ9ÍOöTþV'òá¥M€'òþöÿyþ/£Èêü-ìb¾Ö#ÕÎ=²ë§ ¤Y¾ý_ jÏ÷ŠZþÿw…ù¿+ú1½ž—Çîm*õ|Ðì_ï2ž°ýüßñ3Y=3_ÿá9¥ïüD@ÇTsz'͟÷îÙÁafa‰×³Ÿ÷ðŠZ~lâÀ7›kze=g!qu,ØìÚècádzÀÅ —u9°d¦º §9tFcŸœVâ“T‚[òq‡±µËÃôåª}¸PªS°Ö ‹§ö€?^§ô†të_œßö€3gÀA1VN['NÂ¥ÿç•‘ à:v56_sR:dð ²tõàh7½‹‰ñû³t÷ZãJ9b¢ÅÀfË]8W Nâ’׎ÃRë/!Ãq;ýk€Ð­ &-8 –\Nã”ß™’7ã3ÖñÓ}Ã~:\ߎ£µ7ã5ôÄ~«ÃMâlK·Ò‰{øÂ+ùmñ€î7‰7È!ê{9׍uw±9»Y¼*Š×œ»MՑ1ôæç¬“ìTÏ2…ÉËÒÿMž–mR!¹Ú‰Š„£'J2h]å^jqIW– õtúuüD;4YË!:d8€³sÄCFEŒ8d º˜íKŸ!±pùq3}™õR¾½mT† U}øá›aÓ<h‹ ^&ÁH'eÞ8 +%û"Џƒ~»‚ýë²±qÞa+„©Þ”?P³RÀ¶44‰†Q` ®æKZKw—ì|£É+"?´Ø3ÇÎ,ánAğè«´–õ×ô|®¬äÇîâÄ\e5Pnp?s( ÝÉÓ»7'r’‰ÎßíàïPÿxÀK›+9ÍÓå*Ý,„àÚÿ"/¹ '­pCÀuãóeÔ]**¯×* +«òø §®XqÒÃkÂõÍc»3é™V€ªzù3e¬Ÿ%ìÎbH™$¨‹œ¬Lv˜G¯Ô&DÝD²t)nž7ï[å¨5°-ø œ×þeðX¢û×_³ ~°èàôtBë*BÎà iÀÏ! V¢Ú >KyᬻºmÓ(ùMbÇ®©8H}Ó}AôÉêN¬´‚ì3½Dl©Å ßQg¥:ODÁG¤–Š‘¦O‡Ó ïzÔ¬öç=Y…Œuä-Ws¿ágF-!êöE« Db݉ìPi0¦cÐÚ¹!.DŸú ²S•ÝÇoÍy¾¾yà ߗ÷i>¬\3RÈ}¦v=èÕ[¶ú×a!Á i¿xâ¼ðÆi¸l°Œ)‡MŠÀ.®_²؋é‘þúŒ¾ʦ/§M.£X–f¸ B× MPcpLBvQš“¦^v'p\éëê—뺈ÍƀŒ6è:UïxãO¸Ãb~ûå44Góe›Y…=Ÿ"tµ¿Ìhïrö¥Úl1E­L°,@ ÓÁsu§#²ò&_'ÐÞ;+ÀC–쯱®ÏX ]½îŠ#I¹BÇ&¾ DVøæ“ÎCµ9c |Ä?B¾puùGAÚ@¶¢àTRñóý&I6XR|x껁õiíÉÈ0gÞÅ£ûš`ӛP¼G[ŽÆÄÅ[ª<Œ¶.;«—†ö0,a2;äÓ½°'y³K¤rðN\ȊuYÕm=³/ZêC1ÙØªeZ„ö’k¥Ê»i4¸q4.Èï‹tKx‘ $ðâím«K<ñZÆúÜ;uðÊkh-ˆ”Ñ^^дª?8-…ãŒØ9Ññtnï†f¨­emk‰…çø·¸÷®%fàõ®ÇŠÞhŽŽU͐-6…ŒÙPÞ‰%ÀHo#rré÷å¯è4eç˜W!LÃvnè×ä+ô4to8o™â=·yÀS«z•,VIk_b$i5õÓb«|êÎBŽÆK©dlÏ;c¸ H×·ô™dXɵ|'™Ø;€ 0}(•ä§Û'T›t;`']Äûàå«+ë (H€´š®@¬ØÛä2 £±•¦ó0ØÓR[Öù›êÑt£—¥Ú›éPóa˜ù†îwoûÈ ªÀçg:ÄqÚ%Õß'Êl6*÷ÒÕúP³ [ f^íŽ3õ_A©õ¸ˆHA/j;îنöƒ<”Fԅµ<è¼RՃaô!Ò ûžO?$Kí£Cú¹ÎÓиÍ:O?Çtg! ;ä>s÷ÏÎYFç"i,ìyðÜZí¹ù£ýC‚°@A¿{“ç\èt_r¡Y×Äè>#báí ù„čÐ< è§qz Nüí]ôœ<{i,7/~Tbç'äç°èíqjõIØ?»ˆÁáp—¸hg°'›ºq.ˆ4D< Àed†µ€FTDó 2õwíÀú*Ÿëwᖌ’c­dAR^R’3¹‚YNš|ù¬Üv0à6ӝ:ü5ËÉÊ[—’aÑ[Á&n{Q5|y[PØ.È,íKb¢,E2$b!ð$çÈÁ.s9¨ˆÞzU›ÏJ³yþ÷ Ý©û•”ýϾ§îÖS¬Ëgôß½•;¡L÷ÜoµÌHžÂ.[u¼qik˜´P§ Œ½7æuØç¥¥ovÓÂqÛîgX$]MLÈHê7,"X5ôÒQaX‡êÀÂö +Ò<5£}/NÑ9Ä[V=RåÂ.­2p_­*’=?É#¾$9 ‘ôXá"Hí)jÈðòŽdÑ"RÝ!¤ÌÝEèŸ#ã-ÃÑMÏ Xbn +(IÕ5S¯D¨J؝ZñÕEBî›.àyíe.ʹ›—Û ½D®mCJ¾û¯gŒEele{,˜á'0®4†4³Ä,8È<“* ¸ö8ÈòD-:Rù†#L ZiVDDò= o<É#ióÃICÇÔ8Òi ç¥MÁm”F±îä¥d¦¹D:j.+º^)ºÆÓGs¶ÒÛ@ÚÌהLã{(9aí@û‡™ËÀRõ\g¸ÀWØ­(ˆÂv¤ :Fƒ`È'–‡ïë]ËåCIäñaB(ëO¡ãƒLÙ®&¡Ùž3iÿw+N—€ì»îœôΧÐ\ès1{HãÆZVpÁp ¾9å*‘3‡Ø²\ÂaÄY„¦¢¡ÎÅÂDÑ ),cø©³i±qgX¨u×f¾3«4+ÔÔÉ •¥|éÏ,'Z2a5®-FXHLstø¦ÏØÛï릐2û²?ÀSÂßuÜA'0ûÃ{¦«-¬²_ [V#Km]¿3¼×ëËbÓßÛÔ¿·¬uŽ’ F¶`î°T½Wq2I²,‘Kå¼n–pbRý,þU€ÔІfmÿéó̲÷‹§ÌÔßÿ%Óæqž·eýÕ%•í©+ñ!¬>ª +ÃÿaÈVÄJ¶š 2ЗµYµ#”ôlÊϘ£|#rx#p0#OÑ&s¾Ç#°S &{5äÕþñ—ð .ðŽ=Oç:™¡¿©ã*ŸÅü‘ÝîÓ­nÿ¾ÌpÀ=6*(êÙ=J꘺)ÆH8µjxåŠô‡Àï£ö+° ó‹®Ç{'à.Yþ_¥÷8Ä‘O;1‹½¦Û>fMҜ…×mçMŸî¿( mO¾”õÿçûÇ$dŸ|s2þwÃò…Tûô‡!RÐc>Ìþ9¨BS¨]ïŠíÞXŒõ*oýÛ©ó燗‡ñŽŸ&â?­Ú^2/֋ÞݜýxÞqêƒÿWG®ßõm.< +¿ÿ•rÿè*|æ§A©{©Òêyc¦³æò£ü†±‡¼4cµà}Ô¯uâa÷ ü®²­ æò¶þÕÍÖ5uÖó"¯_Êî²ÜŽ£™â òŒÿ•WÓÊ*žIE®…_Þ7ÿä*Ÿ~‡U°ýÂß6çÿ]¤GÓsðÉP/þUs㐪}úôÚ=ÃD´çÎmóþý`^±¹]³~`à‰«â%…ż戳>»š/ˆßåÀéܟ÷î蚟lv+Ó÷ïœì>Xú¶‡Þ{åüŸëbc_Õ~)M™æ±au3†iOVZí·ÿþڱՑ¾Qïú$!çÄö|—{ÜPè;šÀÿκÁ9\0öWğÎyX£áÓÝG§¹Å¨j©¡’ƒ„qî@³²´xö»‰õ +hF–ètéæ* +!*P°g$ =~{îqåxÊHó,^8Ð}Ә3ÛÇje@Ýªò…¤®`÷’áNû¹n¡6¦$óð >ŒWgŽ`Ж• ³Æß‹HÓñ +kDnât°ɺObDN$‚xŒ!±á—ëâUÖÈc˜òM’ˆ,ôx•ü©|´‰È[Š•Ákl¾X–l—$ÒÏZ^‡TØÏRL°¢ö¡”àªTYxppàV›œ¥˜*D׎3ùù‘qÀ‡z'¬á2~v{|D= ÈÁáùns°Ð¸£\óbm‡YÚøç³àûƒ–¹~"ˆØ» =ó(¡>t`•÷¨‡RZ#û󤞁®2Ø5éñ6ý½c¬s)𿮍ÞL°y2o®>eçÈE…Â4›,ö*¡Œó³Ù¤›.޲ý™(¼E‡š'[½ƒ*tçO^/`ú㈝ hqí¸§Ñ f yUTŸžº›å¡goP›/ëqÌ]YÇ7—® Êés}K¶x3ߜò}di6ùæðvá®oÆãuúÝ}1=v\’}4»+‹ëKØR®y¢BÓ"É'ùQ×ÙLؗ9a}³~ú`®|9aq™gójÝPðd?Tîwr-ÃÈ)ë±3¡ÙŽº¯ÎõLnÂÚ`ô$œqkŖ†h',ßÞ폮•…ÅT¸€ÚT>ŒØçÑ ÐȋbÐȅL#¸åÈk¯BÓ'í…’åêxO÷P·Óސ]¬óN=Ÿg–sGñ¿gGs8®U¼KpL58úÅ$äd±Ëî—ߤoKýW:Xç8kŠ8eu}—c¡Ì*h‚&Ãììpq©`âєm×ß{F““ý™™™’’}B0ŒI`°02}̓1>ÀÈ1@¨‰j¹©b#C2) ¤¬"̟?6Ý]ëzÛ¶ß.Öè·nڋà +ÖØDAEUQvîC`Ž– +¦¿ÿßßffHUmí¶îÛ|ß7Ç«¾¯yÝço¡ÞyÛÞw©Þ…ö{ð½üï_¿{ð7©áÞÖËd¶Hê…Í÷Í +Ç!y‚Èaa]8¨…2鯑ˆ$œfQ âd-6:Ád9.lžÄÊDª›—:¹¨¯Œ©gŒ7âüh·%FT’5ÜòÌôT j¦hT#=™É °F±æÀbI,¥Sœ° Zkb²ˆ"3a$O[ Ã¯*U¯M‡/âW=qÊ +ï‘Î_\Ô)g[”µ{×êúeÎy5fG¯ïԃÎß¡ÃÊ«/5év•hý2O–_k€‹S‰.É}mqÕ“âïYeÎj +¶‘Ñ€ù¡ú")óîØ’“qþ„:᤟J‚üŠØ%§ðˆÛe%JÁAÝàÚá¥JÁ]DÜH"CJC,¦¢EX‚t(¿[Ò¸Úe¥ëÊ¸Ñ ¤ÁM®îmòºûªÌT¨µ¢T`ž»CëÅçRÕí]ýú{WùfNðû]m¶å“-‹/ ݤË{W™fŒµ®ðöª6A/+ ´­`l|Ácíچû¦‹»Æ¦’/¸ÒHgŸ‡ÏëË}ýzdsÙù ZúNÊɇ»ù©Ó=ùÝ3²±rgLعc +fÇFÆ\ʝ2 À!™±:gd“äÞ* ŠNŽÜ>}žŠÿjÒ`Î{´yö‹86[¼¨¶‹å®o*ï•ó²ƒòÁ¼úõ¨3°,¸»Á¸ýÍ8knôáÉÈÖ'RÛ»Þāî ûŠìŠ‚ ßn„¾ÃšS0o²„t úÉEÁ|´j ÒMÜêZ{20Ü©è=m•Üüõ•ÝŽÊî† m•ÝrÊïewIr@Ÿ$_)ÏBó¨ý[hݶuól¤_’ýl(b¹|/†‹2.0ßÓ̊ˆ!q¸´¦øX†ß Àø/œ/‘F/ñ9¾ÏFsÓ$·Nf™ò¾Dvaþ‰"ꍀÌk(”¦Þ+ÖìàOU\Wgq‹Œj4áö}B=Eè‰jøB젋?%,”±àt:e‘D2£¤'oÙ*½U.ҘºÁ€â޲Á:Ð-Ó19«Êe ?‡Óœc¡ÆSÁ?æ%¼•D¥âª(rþ“ʪ@ä7£âG…ˆ( ­V4(¯okèáÆ.Ú.Öß-þÍ`­¦nôµRÓC¦D÷µú¶õv­ÀvÏÏ45TÏw·ȪC¿ÂxDq¦ì$á…UÈFàvX6¹½ú–Y +*8ä)¹a`8Cp±pG!J»*ªFvß?¤—.A`BN˜ºcô§¯—™Êªò’\¸¨ªíg˜éöÐ¥ªÜeرƒ|´¿ðmˆ†ÁÀ¾kÆ·àÛZc,ëƒpROdÉ:Uè{cÓ|\zc‚Dò{ºãœM»(:½ƒ„ϧòWƒ«fx:¨ïO®(:½\AÕõJgLAa'¾3ðìZ¨ FÒE·JÑSï—ÌÁ¢ÌÃJ1´&°8h_íFÄóO{Äz@yV— •ƒFXýjÆ'âÊcҏ¸–C_øðaï7Ê1§! Ù$Ƀe× Ë¿xñ'Ðð¢O÷X"OμIþ•'¿}á 1]R6Õp¾Ú¼â^ïO¶©«Íµw%¶¡M½›mG³tín¨ˆÎ|nbƒÕÇSkÝ£ h—ºjB²ì5ŠYµã|Ô¤;6×§¤9i-ÒSÇ1WïO"Wï×KZ›6´çe•kfG»7ÑemÁc,#“6ÔYR{ûQ®¼!/å¯-Ñü!텐¯9Ø ü“kLÅæÕìrt<ò“F_ã¬òw‚íˆL?€¢ã¦‡¬`„Ùìµ ´ @ç¦2$ºƒà©·ÂÜ Ñzú8ú/y¸žD˽é 1kÛYpZš7Éù°`ÀÑù\=SÇ +0uv¡@Z,òùÁ6ŠÔì¬ ~BÔ\JÝc.inîûc@™-kÐðb|ÒO3× ˆ•z췌an.í°HàԘyi€¸¤iÿ»"ñ*-œ²á:J[„é.»wIÔ¹]Ò]> Šé/O ØwFŒ2°G æ‚<îZõüNvá(츈u-;¶q;‘#®$Õc©lo·Ó/´áørÙÄT¾Â€òÔ˛í¥ö_¡ËHáË ¾ßàáËý6Ӈ£}Ÿ,}—>²‰4MíðŠª´ßnô}¦¥L¢zåö¾ŸJ™DÜïFÕÉѼèѹUßY(Õ`ü=²ïÃð—~±™3–œžÆñù?xŸ’ïÏɆ}4c4Z,ÐúhÆ#âûbϦŒbT—Ù©ôьLFôöT:’%Îøæ*BðvÕús©¶,ºõáS²U§œ ³}õÐa„›wSBo·©t5ìÙ#?=:/†ã{ dP÷€ó,•à\:œpê!¿nc?W_pëwÎ->Ыz@ðs?Ú#àž ÖW›©N99ÚG²^úÀDµð!×Лö‰Huµƒ©äh8_F¶Ô1ƒ¿€òd楨1]ìYwØ«&â`.f/ŠÓæ©ß ”¼©ùHðmoÊÈðØv¬„ÄþðühIäd·¾%WåQçï +âMsÇÌ]£È²Ø7žLWñò“ø’¿ºæ2<8³½Q¹Y +ëõ®XŸô7¯¯#)áêïùõ_‡•ñõG&^o®ŸÊpx"ο—~ù2ðú4þ‰Š®º92ÞNZ?ƒ‘«íoªGæ¹3oç'Àëܙx}Ã{÷qy÷qÃ'ðÌÄþB˟ÅÏãß|­³×#Ä¿’€ë_Æܙxº—X^[®99äØcãü\L×ÁŸïV»”|rÒL='ÊÁ^z?¹0²RþIUõ’|3ø7£)—æÿƒ/Qü|gðeñ¿÷eùé> +gè£øÅÂóóñ¹—^>w–£æ‹+ţƜÞCW”’âÐ*ç¿ôqú²uødñŸõdÜ#ğ¼{åàZI “¯á-ìkø± Õð½ g?€ö7¾õȂ-‰sÑü`g½…Ž¥¨ÒŒçôÿbãüóy9÷ãÌÞÑã¿Ï1Æÿ–c˜çAÞz?¦¦:âñ긟PÏ×#ÁK3¤úI)÷«aá'¤6H¤Ý×¥’Ý"›¯ºE,î„ê¡8¾=Ï»D+Nµñþ2)müº1íPxukãúÄcõ“Òb\¦ÆE.ÿÕOHA‘r©n¿´Œß¿ÈA}rU‚3 tS9ôÈÇÍ"•G_\Œýº- +ÚHAñõÿš½¤ÇèPÁÇ$"tSÃþZ- 5Ž:ÞFÞ¢š·lÀåØî¾?O÷&oqëÒtq98õéxµÆ÷O‡ŽPˆüœzôÄ^Ǔm!n{ØõèÄçœzô¿ßYÉǯ-Õ¤á7ô¨Å¯±ÿ°ò/§ÿðˆf㓨ú1öˆÇâÑKÇ*â5ö1{_kùÞ>‚=6¦é…ñœrq}5z}Þߞí~ê½çmì÷A€;TIÎ.OäwÅûå<¥}÷5ßOìù_f_å°bÜô®¶=…™K¾›ôµ¹jΗ2÷ ÈyíxòãYÔSb©I¦ÿiÜÅà#æóö×áôo‰gÏ¢˜-ýò±úT ?oBŠa·ãÍ萄M><ß‹|A}âÛâ¯î¯<zeÞ7ùfüA¬£Féšü;ٓr¶þ¼œå ßðäè(>þAB$°ä”"[IB&°÷Ê?ˆÃÑò0ìŸOKý–‘¦ÿ5rwçK°a~¥¨=½0‘ ÷ ŸëÙH%æ©ãF°TÊ#F=vg:u®öÉ<¸õô2<&íXT˜¡¡^íh_ÿےPxn&=¥æ>lÑ Î0¿G¨ýå~þ”4=þÒæÙŒÃ ë\žh¿‡3b›ñðám”âÍ·»üdï]™ùÿsg¸õû¯,¡ãj̳ æuoÛö?G)¨èvôß;u‘¦d\kò&&é{yFm8dùõ&[ÿêhWúUï?éšÿ¥§Ãµ4|9¤[®ý·?ýÿ)ô}ÏèÜOÂðû(ëÿÖþw}}W;µ·ÜjærŸÿ¦]¿ø¶né3/u¨SQÔu:‹E¡·x°=΢!¨…D>Þ`nÁÀü)Ûw;çsÜÄ!öýv"ëºSºÎ÷]IÂø…°7cbÓö‹OÒáþÁ×ìþFžkïÓ^M}þæ?Ç÷<~îï+ü¨CÂ{_­,ꊱ…ÛJÎD×ß1¼ul¸Ýþ:¿ÿ+Üûä&|gî,±hzÿú¯sóéŸOìSÿu#VI""„‘G‘øS 8©dÝ×dn]|YñÙA%nfǐ­ÌÿpÙ;ɰ~qX ÍډøwŠ_Ìêï›æ]‘˜€o¡NÀ‡C&Íövˆ?¬4[A#l[ÂöRÕ²QižpY¬ŽX¶X—£|¯‘^Ϧy]„áʖÍ=ô’Ÿ:ªÖ‡"{;ÆÊɨ$6ƒù ³X×ïWÀf +õ +>½‡è°)‹+ÝÞóÿy ñÉtQÝÝFØ­!†¨`äԗì!8ZÁgm xR5ù¤Lt‚U)‰`„XçH¥–‘FÑ_´‚K®Íö·"¡Ÿ|ËÁh‚1B®!£³ñÔW|‹-…gÖ©2™ +6Ge°f%V¦o<ÅÎ2‰sŽ“““à5ü•Rk—›"+~¤”!žÎ©|Z+Y5õ£ÖaC®ou$gäžG0½qäRs«U š†úFН\îÙ[¶&žÓâȠ䬯þ‘uª·9Ĕï‹3xm¾m‹o›V›|×¾k¸û|ûl$íó€Ïómò°mò.A]#cÉ=ŅZe8–XãӀBÓ]}äÐVZk×W~<}tùŸd›_†.1E´´bÚDþÌiìÌÏØ2‰ò±¨,,(û„Éq>I|ÞûƱ m@‹­O[”* +\,5c'Ѷ'  õ°½Aq¶×•È¸En¢$r:‚º©=!ԅ­¦-\ªö©îÔ¯j§IS¸)'O_¥åÄݸ–·ò{2.ã¯ê©áQ˜ÑÞgoC}«Ž”HXÀ_KÄTrY¦j-¬õc`8÷/=î›üÐp^ZWÆyiÍ +4î¤ç'nä?ºþ…E¾½‡,`?s¼ز^Ex!en +°—R‰o¶û`Ѻ™ìõsà‹èÞZVdÚZmզΠÚî´W°Ä°oÚôG:1nýÉwø’·5Ÿ!²†As¹!lcë+Y¢u±ÏÞLÈÎè\/“˜î›^{Ý?ÌZ”ò²2çWiD>Äo޳‡šøø“üÁ««%H˜[)ÉbÏ󮯗(D︊!¹®3•?Øóœâ*)·Ë«4՚2Ë}º-ËL‡+®ÀB)A‰ +äíÏ&â%Рp>¹¬ï_5âÙØÇ²n%``ÚщUq* ö',=d = á`NGùK¿¤<,ŽqŸÍ¤BâÊ´3KOÁÔLbÂÝp¯yzG˜el5#ڛ¨<Á …›+è£j3º]¤Ê»‰6ŸLM@ÌÇyªY3ŸŠ­ìÚv»„F½ük·™D e_š$ɲ¢Ë¹-ˆèÄ껽Ǔƒ^­Öý Ò>^Æ!ôßì‰-=Ög úYÊ©¸3©jž`zUìm^`s•SP½X¢-^¨êà—&<“Ì ÀÊÚ&‡+yU|˜š>l§lÝD\âŠÑÔxFf~^{’Ë®ÆbIŒ‚ÚÛerS&ˆ´å]0’QÂþk‹goó…5·~¯žTœQX¦%ò×´ÄÆ •±…Òãtéæ?24 4ØÇ†¢éù¶Œƒ8F%vÏv-Ù,2´mDg­q¿>Çù‰3Ÿ­\ÅêÕ̟¹lm«Ɵ~¯¢¢ÖÕ›v–­ó@ÄöPœ>W¢EÊ,r¯¤Vì¼Ú#ZœK¬·“ïÙõMÜ3Í·§+…ôñnŠŒ÷`îÒß'ŠÐýÀIr ' )¹õNH‚ ËÏ1¯“» +ú¸ä‡’ýÏ;.•™Qšò!¨ù¿QzH6]¸2ûí?¶ƒ5,_8ƒò,tͦß+±‚‘·~”±·c¥rÚn >„¬û]̺ðAÞÙøÌ|½+Ó·®Ê,ÿ +wíd#ú˜™ŒR%;± +Âß¿sYw&›:‰£°šíÜŽjåàáý°‰GŠAœð´ÑâãÛðz֓ØÂö_C\=ÑÝ®_ü3ñg‰Tr;M¶†Z=q°M¸-”œ~åŒ-ќ„Ùü> ÐSçëˆÌE ±GÉøÅÄï²P­ZÒVàËD1Rþdäu€ü:10ë&E¿—ê "{›ö§ÎóD7[T|ìÆgky‡hìٞÒº~·W8ù^\€&„Wü·K•ÿwó19l¥Rúã +{%òÙYàH¾šÁu¢lM•Ï~Vlîn«<—gž%·Ã¥n pÕGïa[ú-ó­ZՕ'«â5^“Õ7Ôf-+,qRš¶Év\ÉíiÐ £rʸìÄgéiíXJa#çã†%ÅdÚ]—ªÉ=R±²óí¤X u§¥xáókíQ´´ ]aq rkvŽ,ûØt…§¨Ï/žF]ª¬›PÑŽmDî´?ZçLVÃsç~ÎøúaӖ‚µ›%o7–áhgÁ !Ž]W‹ýZöCÝn bÌn´§†FiAԛQáÄûg[­#Œ2ÇzqÃö~·rgƒTfý1q™žðï˜EŸWmĵm¯Ñf¦Uº€˜39‹.ض¹¤˜+Sn׋<ÜrNÞs°›3˝»§)Ìüøg[£”™š2c=~ vð°¢ÔÀ£.ð…:‚µ”ò”¯ð§ß3Ú.ɎâØ¤ù¶(ub +üöm¯òS¯iß·¦•¨eºc? ځL•—|z<ÔìRØÎq}>QÂ5¾Ú|ÎÀâoÈÓɵŽßU} JÁÖ×ùؒÔü¢Ýº{¸Ø Íõ#UHs#”Z»0»‚M€Ä‡îˊq®×šâ¢-¾½€¤:»}c(+ϱr 6äÎ].ƨ‘¥]ϱ ™Æø…mß¼bb{84ۃe;èŒê½ð¥\´¸V(›ãAu8¢~„/[û¦hBqŽT }ôM8ô·pš)AvE‰,EW:&(SÒ Ú/ùͳÝßB) ²<'Éø·œßHöO,Ìfz荟7À ×WlñnŒnh²ðe =7ý ›ØdrÊ´ x¶šíâÚ ë×4ð±ð+O=$_óåuÕ¸¹\ýˆ¿ÖX8W×Ìöð!¹{‚,ñ¢vro³¸tÜÐAšzæ‚»Û]Á±ÑBF rö×Ð{S¸ƒF +ï.$£=™·É‹}ø–ŸË)që¶Qypgúùq½S9R˜oV>FuËѧ¦ï°šòµsº›ÛW£5­WÅ £Î+æÅZZffÛU]«D«Yì威ó¹²à_áE­64R¸tÌ¢½|¶°t^ß-ôˎ.¾6%F~ꊪ ûÞ®Õâ[À’(Ƀ—bfvЄîVˆ‹ ›å ³ê…فvÏnmà͏þG¤9Ù¤zhœä›£zöóŒQºß¦Û?å%)_í?WÒKNGsÀ®îǯa6–œ#Ÿ|[¥gÏ* ãH¯\ò¹¡È€«`~RÒ¬¹4Á+–˜9èüºÜ®¥B¤t¨ZŸ¢hÛÏϓˆ"„!¢ÏŸÃ꣕% ïô•Á—ÈΛCholÓ»_ž=—[HØcÙ>ÜDä›bmªÍãÄçZ¿ú7Êù`'ïZþ#YβËí7A³(µpºkêpJ+a¿b‚ÃOªÆ¬AAþn¿áÎ?£1øªÓtòdha=ZÏ΃ˆ|(]¼)Ӗr䏸ë–ÁñÖTÍ2*á+üZUWÓç(ßYD®Ëå"z¢ŒÏ¬Îã3ŠáŽÛ w O›((ñÜ/Š~ DÏiZ¶¯ !+<„¦·†’Qν0JÚB1À/ÁzÒb‹#¯;˜TWgµu)‚á9Y}†LÊʽJn3”_¢¤Bâ9gUMýîYkóɓÀµ£[)DïYxØèi¤mÒ;ã%ðœtŸ£Zå1Ð_¡ý€ß·B¿×ñv-‡m4…‘øQ[ué—yǦ†äω,NDÐ2M%gٕÔÉéAè‡ÿ1þ.QúüÁöy’ùM®•Mè}#ÌK'<{ ~½œsx–¯Øf ¦vAë'²¼Ž¨ç~£»"ä>¯š +ÙxåoèñjÏ^æìýQÏ`/úÙt¬÷E¥óD·mk²€]+´ý„Ú¼írŒùÒꉸQÎeD»"9y^Ã94hgӕCH·;œeGV.Âꣳ=³VÅhxœ?B\WJTdÛë(³åÔaɬÿ5D +H@uTzBλ|UŠ:ݔװԚL™¡+¦A¶•Z‚ã™3Î"‹<ÅA »°°Áëšgj6Õ;(7Ѷ¸­`Àâ4ӊ'í%g‚}ïX_Ëp²&Ö݁áýòȀ<3Çiœ·ZV}÷ž3ýp¯›å=­ñ£€»RE´Ó¤paÛ2§ƒæÒVº6°§ý©Y’¿{˜±_ +‹I8fFö!^Ø:X!Ñì ïì2X©ƒš/«‚]J!ô>ÕÆK܍q’÷cõ ºßn7ðÊì1ðë0OÜõhÝ1™üâ(£¯ æ:ó -93>W>æ³ £Èuâƒ9ô‰^L õæsQì…ÚŒû•Л]Zž½.Ë\w imóSŽÅpÞG_ç9\Tz+Æ} È}ìYx՘uJnÜ«^½º:Pek0‘ÈæýÉ´j™ø†„ö~CYaÑpšŠ¯ÜÔO|-@䮋4f¢„q&§ +\%0 üá­iœ7s¦KVØnŠÍfºâK¾»¬“¹¤'=(£,2Q÷?ýû’Üoþ Égû7%øx»’Â~ݔîé~ÉgøÛ’ÌpšŽæ—öµ7óµ\hOÔtêJÛ q­žì‰àø 8A¢áÉ­#(Çgú,Äë¥ÂZ‹tmçk¡oxd &ŽSj@ŠnŠÜ¯'®°óLùÍt,säØõ´§¶ê©ì… +œ+@¿¬õ[5³+«ƒI w¨4 ËVuSPwULBR¦sXÊ ñ-UcBz~Að ¾ÈŠLò~Ôh·èð…ôl_3öß3ó¬S"¿ýAÙ¼öPî—׋eNÖè§Ò¶Š‰H}º‹dŰ!KTÄPGÖ¬J‚@­ÓÛBõRÕՎ)6ô/Û½¥_Ãê$ø±g­—`ÊZ}-^Jygó”Jë¡ßOD޳¸âŽœá „ŽÒepK@LkO×1YýóȯŇWã.Þ|T_Ɗ›ÆKU0/]¬ÃáÚ¥®uS´…pÒ(.Á›‰Z6ìRS“Ò ÈëàôŠ¡£ÇZk >VËÝeX.pðYg˜Ú%ÉOG”3,’Þ¡í¤¤ùÍúù•RzŠŽG U:ˆáŠÝQÞpÅ~ +91H +6¨¨^§.·ûý¢1ôi Ëø‹÷b¢ü'ӗ”nêVe8Ærz„I+?N ‰|飿£:V9æpQÇ;ý~)И»¸Æ ŸÆ®6Ä$뛧µ‘Õ9à:ؾ³¼ 6G“jh€ó•ômMW•Š©¼$ŒøäµY6"¸ÅZ‰CÞ:ïՕTÔ-Ëõ°¼Ý èµü¯9ÔES”‰•/Ñ¢”ÓRÁ˺±×ò— ›>êÓ©b/å£5 +²»ŒwyvA¬¨³êæÝ¶Vò)ø!ö¦~½)p߂é›|Ÿ£ +U½m¤9GÇÄò™ù¢ +½ù_Íÿa=]µíŒM¶ãGŠs±* 6;Ù,sõmÞ«„­gº¨acÎM(¯£®Å6ð±h&N,ŠùÕº3®ù|èE:·×Ìü7Ðæ[Žûۅø_éÖ|û žÆAÂ%•]ˆF%oÃ&aŠ9í¯Dü8<°‘3ãæeÅØg°œ8‰äCЮoGDRӍÆîý^\Q…TâÝîíW/^û4\i9‰—ëgæÄƒ ?ÂüVïµF{ìíŽqo‡qÝó1Ýêg±AkEÝ¿VèôÐ5ø´úHÇL` +µëEû¬ÎJ·'¢ä gÈqq;’ê:µ¡Ÿ^]€L‘v Å¨á$•aâH(ް|ªñ@s¢e‰5ÍQÊ"÷ö§Ü?_b¢Úµ_뀛ٝYZ·V¥j݆hj +­v4%iä^7bDg´ièóm؟Ž~´¨ª¦¿\¤zZFD °Yôkƒ5AÅ)Ýh¤uO©ÒjcÂgæÑ¿ÓhÝÉ&U¶~uj¾© ÔLè1È)اËAÇi‹fT|¶W4¦ˆ=ކ÷¯¦Z¦v¿^fúq46ÁŸ‹‚x㨣z«Ö*C¬Ÿ‹6o½ð p.ÍK65Ý`cí&M›¹&<6ÌýµàyÐûÞ¢)~œ­Û÷óÄ%—ºÕH»ßfS|´÷+˜¿@TÄÙ ½QmsÓ{¾÷XÎS» «I½9väðú´þ1hŽxnˁ]7_ÑޞÜ;ïXŸ“)â´p9×0E¿m1K¿Å½#ΐV¨‰ø°[÷äPîrïXA—€ñΕëSÿÝ¥ü¿ŒT$/=-[ÊÕËb½íOäƒ~RÈkrk?¦gtu]O!É­ÚSo#`D}=N ,¨IÑC¯*frÌS 7êÿ;Lñe«üéøx/×AÂ|6É€sa W؈/48uE½=x㘃08J¸nâüï‘+ÝW"Ö욭˜‹‚ ?èvS4Ù_Al’²+¼•âÎÛ#ÛHšÒ^¯pMe5úœ¢ývì›å}À½n›Aà ­¬l‰"1¡SÈ4 +°ó` j¯HØÙM$!%rù¤‚øgý‡®‘”m³^¸'iwî +Ïpõ_õáæD^â³\"`ÒÍÂÖ{EóÍûۄºÂ›¢ìBˆÁ®!]^Âm¬<&Ýd¨Mƒò™Ô'Ôð`Ë*êd»›éù0uÒ/o\N×p…ðæ,úAR×µª××V¹Ñ)a},šÝUj+GËW愑˜’æªqu¸ÔÍÝqZ#¥ŸËæâs á’Õߔ<,™ÑIøžî‰sê/Ÿƒ¶t9kw£\lþr}HyS“†sõjÔ­NâÊcP@±e®Gc¿ÀE¨:@dšÖÌO¼{K>mnW§ggºuy…”=1tsÄïۛ.lE?€•'¤~Ç6ޜZÍUZçÑà…!wˆP—[‡j¶’¢/…¬)ù,H½ßoƒ¦ý 6ÓA¯0}›îž4)Ù=FàØ8ŠD29UFBFåOˆxÞ«[¹eVÅæ 8uîþ>‹É¿”sÆ3 ù:qГKW, Wõ;}(ö§Ú ® ¬úŠh1®|Q]$;O\{8À‚³Æ=;láö6o‰Ù¨ÏË(6Z¯¦õ?5.Ë·bz¾ZÔΟ3Vý=Ì!J<ž>Êñ¤íMß³ôÔbªÜ4£’³Ê60[ +Ìb.ò;’‚‡¿}°×޶ÓüG® ¹0‡c…œB&/ğ§éX: 3¡ Ú÷µ'/û92d2dæ# @#.,U‹fLˆÌ“09‰˜ ‘¨¨îR«jÌDL’“3­Qµ«zUwvÛ|­½"­½@EKZ›®»˜f耐PÏ¿¿þûœÉVªë»çwožw¾wÎúïàïéïèßC]ôyßAÝ áÚÉ$–Håooÿ;ü–Áº•`lüK¶3ü/™ÏÙ1Ü<ú³€«ÇË×’΋5> Ä/ó§S¿:Œ¬¶V|ë"KUÓX'3}Q’uZ‚æ¤ zô#sÍF¯U #›¹5(S*#FâÞ;±ao¦AΩ,MD?té4…­t5óþ³Ø9´ 6IžÕ)Š_ä|(ˆÎ¾ååE>âïª>«m–ÖŠGÜE] H“ëפ> +¶‹­œ•îød«ÕçyÓîë†=҇³\ìµKÅÍ+۝¸)vÇpéŠÔ¦ÈÁòÛx;~c†5VÜϺ«aG'Z+Ñq¸Åð¾Dþéu騚 ë_â­¸n{Hm~›FML’‰–ê¿q™»$Ù¤‹í ÃHdVÊ_‚v +ˆ8-¦|ö-v”Ê$p读çiõܳ^Œ^ý…z¶ÔœÖ"®v•G;J‡#aR7Ð ¤xÔ ÇD¦z‰©rð,C”=ܬf1z,ûvz6èYèÛ²³·ÖÎ@^ b°ÿ¹!JõÓá–(m¦Å½">Tf¸ð&R]´¾Ô¾êO‚5;?/’sê[åX˜d nq‡×ÃC¤ì¤á2ÖÜQÛ¾8“²Ëød\Ì ”ÔdG¡ñ:ESž`Åﲑ¤»¡Æ ­°CˆÐŸU_ـ$¦Ä¥gïÃ3“VÔ H³xÅçnœyˆUQÜ©WÛ¡ ø†oBW-Œ³™QñàTîóþHÔ#Lé†$ù"Ü^™Œ2Ïc¸Fá—ŬÛxé ÜÛpj¥Ê¬a亡œ,1/Ëãî1ÉÏfy”÷ˆ³ðn ͌S®àÍgö0ì¼&,:ó)׫ ;Ï)œ½xü•-ˆ£ê‚¿mSbEÜ€¿cc%“ÿë¢d¼Zø1‚ÔQ#èÜ@a´±·gÆ5ójˆ¾çÌ¢äŠÕ婚áª59ª~*¨¾7*wݺ¦NÏ(]­Jk=›ê¦ÆEërs9UÀEÞǍ Þy¹Ï0t"·†ïÜ +‹‘ljÀ”,';W ØVãUUjäüKSôâçÜX0iQ[tíw0àƒ:>ì6‚Î2’¢Û´ûËSë>ÉqÍR0— ó·hax¯•`a q=ÝG¥fÛØQCä[ŠoMõ§vë Èãzei^ñÄÂ*’êaçIÞ䀘?$oÊE’ ó>Å†õ˜PN%~–SdiE;r8Š„hª›†ùuÆóuÕ|dRþÑÂüJ¯òNÔû=+M6^–Gçٝe«Qoz¾_®Y‹n$étÜ{Š Þ9Õ´ìÌÝãvΰÈ9Ö…R-³S7<Ì7xHŸÔ,ßô(Æ¿Ø ‰¹·Lã’|£Ks°g‡@·½'×y²UèÎÏ5®Õ$¤lí¿˜]¥äÐ>gï3„mÍ4wDWšé´Jlcp•|ÛJ(î•S;£’ÖgÑp¢ë÷3ܱ +‚Ç <žn"cƒ‡>Aۇi7÷y€"½9ö6Ò©» g“Ív}µt~¬0u7Å;z %ÍC9®è±½øÜ[{7t[_¦»Â.OD%Z»û + ‰ +滺²¹Pì,a¼•¶ÈXäïÏâۜ tZ³Ð*O,X‡Û]¤‹‘¸jôátgÇ EA/b†RSÞ£¶Eٕ¸žIš˜„'žëÞbh“‹ú v5µì,†V´ƒéøv…ÀXÄXÍãˆoÂà¶ÎGý}Á!bÞäÀkÉaH ¢’õòÑ=”:„…Á 'M‰¸ŸVp²ä—€2ó ¿ L±Åk¥‹f¢ßŠÄ0>䅮L{¬)ùR)ÑÇÄ"ÞÜ\GâtÄmhdq8ÍOÄ×ΧЭî¦]uW:ƒË„Ùwé}7@<êLî¨Ñ`÷¶‡‹ \áÏŞÞ&A™Æxr½É½Vµ‡58¶Þ` ¦1àN•‚흔“¯×85›é¯¨h±Š˜(UôEº»|’nx¥›tƒ¥bì¾zó*ø¶*xù[›]”†þéÎ+B þ½»FMì¬q¢µ‘;Yá¹% »1TÒBx|ñ…?h}ô>î1èGÀ§AѼè°<·ÍQ²~u½i Uٓ¾™#z2eW¦"Gð‡·ìS +ãëÏcÕß_̅žækÍvj’fì' § Ž·e.\¯Ñ5îW™Í4&šŠÉžX¿ö4\Ùñ…>š{ÿXŸºÛù…³ÿë›ïüçm7ú‹Èÿ¼àOÿ†U‡IëÌ8֞êaÆ´÷ù՗Œgsßc38ÎÚíã=ÔTh¯}:Ÿfí]û|´¸ÚŸ-/—Áx;Í÷gå¥ÿí óiÖ¤ÓW”@)‡ÏÿÛBüò¾Z_ð_Ôzï-/ø/BŸ·C?ëRÿM ó™øÝrM=¤þƒA‚†äÌ¥£ÿóàbãfFé¿:M)‘ÿùÁL:T82?ÿ÷ðs_sä¤GÌÏþ¤ˆöÆæúܙâgå³°£ŒãÚò¦kÆÛ&wÿ‹ÕX€Å²'n [gä„s„#<îÀÂ~zAY¶èrZ†Ï‚9m»^`º±ó¼PþPÖùLÁàêŽÈxžBE°kfÿ1¼è3N0§Û:r{ ]Í e0/0™úãV|ÝdȳÚù™tswÒ¹ö[€¬-pýp$Aë0¥}k×̺³]) +JP‹òL‹™P¦w¦âÀq‘]7šG:ì ŒÏ;EÕ·V™…‚°‡óŒyŠöØK":¥Û®Tºç}eì†H‡?#YÒMÉû<ËS +Qìj`<ÝÄà(ªz¬ebv¸š´ízçMu6¹û²ó¢Àªê ¶ªÁ}WÜVD¾§k‘‰^ëò‡UÆV¨Ö`„:ú¯·¬ˆùEš§kŒ«8vž«’Iê§R†õ?Ó¶å¶ãJž'r JJ9 6˜ÊØSDG;›÷'ÿg³Î‡³2¹Ñ=•ËÖà¿)=j(ÌõìÐüOYÇԤӕÍ~rT;7ïԓy¬å½f¿Stùvܾw‘©º|¾g;HŽu “¯¹¼ìº9ÔFçb9¼èç979O‰«õœŠÍÚy­\éDZß_gÝ9´ÄåÐ +ýX¹º€ØØ)Ο 7‘¬|xb=^uËË~í»Õë§[çé,¶àçvpãbJ4 9ÁAÙ¶¯[¢ÐÖ$Ì |où\ÀՆ ­_üàj[>Ë*uEò ç‚9)P¦‰û$ Í]ºzsDìv•®ÂVߟ­¾ªÚ¹ÉS°âÎ5+($7Àì ö£:n÷EWAlnÈù» zð{=õígäHÇÒ÷lwÁÆÏ7,Ç7• w[îNÁòlÁzîûFãwAWÄ%~ʖ +Üx õÔ¢¼”޵?aJYÝî4¿¸áfK®†þ6mÈþSÏùþ0#v¶ƒ¸¢ÆDà/»Ëµ]7NËò‘‹Ka¥a›m reO–[»÷³ym„ üfýÅŽó­`ßEZ“…zJž•ˆ°· Õ¿³ã¤zgÁ~ƒkÄýOk±ÌAԐÿŽ‘²D&fòKsàÿ1p“+ ×S*ï6m¼ÕF`&@'gÚË=¸ÎÄ͖ÿj”0"iU°Äo‘ƒäm…–E&$ÐçŒý¼›ø—“¼æ%&ˆ¿µÔÀ‰n/ƒš³˜óê¨ËÄ¡7SµÛæ‘ï#¢êÜCzµ°°ëœ"TN˶ Wö!/þ \ð¡7‚Ÿ¡ÀЏ]¯0öÒvˆÎzÜJ²i£ ñØùçC€oŒêaÆÇ3ö§{ ¤­{M$õT.¢ÜQ§¦üàã`ÙðØ·tôÃYŲCˆ½zCDxjOK㜠×OKïœm²vC¡‹q<—†5Úªâ읒¥ÊnsѫŸŸ‰Û…íìz]Wz9èKz20Ý Ú0:üüðr‚ÙCvbù¼ÌZ> Ã„º‹Áj/ xÌLƒ l›zóH7‡tæ¾Ñõ÷.BßB¢sQ|èÕ0 ‹p{Úv» t`÷PWuXX0Dc¼cÝk§ كAÇãS,Z ‰³Otý l² Ôk´Ž”.×V™ÈbP‡Î”ÖÃcõË>%€·§]iŸ77"Þº¯ºrw#©@ ½õnþ½vCÝ$ˆoÅÛ꣌íÂvC@ò¡g +õ†Šµ½v|*'ƹ,Iã#œý¼":5Xg…õã<¹ÒºšF×ߗ,oJùkp‹ù‘H%à¨_p-CY6ø¥èð33ʇŽòp€î»"çbï"æ%ôþâW¾ÒĹ(7\^ŽŠVÍ=+YMv]CRðYÅ; j#¢<¨·Wxö¢Üçc|ñ]| ˆOý^æÀ$y©þ=ùÑ[¨_ZdÅ`Š%‹…G˼õrÙÕL¼áÝû–Ì{¬Æb٠Dzñ ˜Òòَ) Æs˜Óf³ÂÔÒ,¼™˜ç|FYçÜñ>FxȤɘr'f³õ¡Ù.Pƒ< kû°ð؉Ê xWˆi6ç ­‰Éhü4?ȉ¬˜¦†5F†?1†Œúɛ-ì] Ô×A¹ŒÔŸ·ðÿ‰pFYTfB:-°L²‘Êø÷rbmînÀg@`u¸ÉÔ$Òh"˜ ëŠßæ@S„²ù:ŽSv4°O`ÔØÅù7®@8îÅ2zf„Šƒ^JŸ¤O¼¿qÇôž”khÌ[ŠTì¯eʽ§enS9_~Ø(·Õzx·äì÷×l¿T¨öœ#J½ã²ôßë*8ÎÄæº@ì¨À^^ÆY™þJyÑZƒ½’é +“Û\Ð$eôÉ!†°} Bwy‹Bv¼8mM5L3ça~°a]?Ìíòń·‰Îg]j.~‡¶˜ÚùD…˜0ӝšjŠ'Q«Ñ1Õ>r/÷ÖZݘâ¾k®†,ssÀL¦‘ÈÜ© 2ƒ­FW§»ŽâÀ&Âʸ9Eu”ÅRéÉØS¤{s¶$F~Ä» ¥éî£ÀÓ³7òžç4}ÙÃûFDºétœpU¹ìülûNyçG2Þo2M‡åVï'Vè4ér•^Xæ)á¢ñ¼2U¤ûÞò:0¨,ޅã͈þc…zMÛßÿy{­ü¹cÅ!¬nO‹ï|¬“3™),ê%%ì<— "¿Àùº$òJZzú8vß7ÂÄ#blC~–I§O û]ĝ©/^œ7^ò®>Ð]7H#¨õW÷]G1'ÑÔk(ϙ_yæ©Ã©Ô*P •PÉZó%\DóÔZð]VVxï{å>§P£×([ô¯~“Boà-a\ÁÅ i<]8†Û ›yZr¢ÚÌõBŒ×[ÈAÈîu†ó½çˆ ñ¦åû#Ä?.´ýúD¦yÇ6?ÀªÆÍ"ó+9ÎT§kÁ?|%¯:šGŒìF“À2‰4©Ê¢ï±Ñûfä N×Ö!G€rÏWÜãù@0pÑÙ}GàJè1ç]² |kͯ½øØZärJdm‹cC§Y9ZÎuêthf ×»ò5Ýÿ^ÜhYA[ªˆ x·ï7+9‰á§Û¿¥N×"Fϵ᧡|i?vÃC¯Ÿ;¦VùÐã‚~ύ+Œe(±ÀÃß7›[Mñxnfðið_Ô¶’7܆tXÿƒ”Ý U¼f" +øíU±ßOôh¦<8ØÞiÊNø$6òŽ‘cÞ¹ŒûïÓµäÈý½Hy.0>‡Ý@r î±áV\w´\¸ò³8ìbÚß½Iƒý#W‘Õu)4ù zËöTÑrY£t{•Å‘”7ËN1ѯéâuÐØR9Éu‰1áir [.òsc½Ž¿þô¨$ <ß§Þ#áàºÎ™¥¨¿q<Ÿ«>hÉÆ…K4G/mß´Xwn¾âvC3x-„ƒºOMF»09 šy_kDî‰;:’ˆ'[M òÝÍàx!xót®è=õ×Jö/%hÁá£Aâ=›Dê Æê5&`Òª‡…ó{þô7¢Ò%-0â`-›Cûé4JP ª38”VͲ#î¤jNß½ c2i,oú›:‹õÜcÑo·†HŽè[Š[7CŠï’»N֐¤û1XVFÖ×nø¤Âá µì ¯GA{|M‚ +t_‘”æÊövtö›å7ˆh~ÒhYAmŽ‚À¡WNÌ´Iñü.â¾_",>>ŽŠ¶¥ÂvÖ"^þ6~ø§Í¢¸Â›ÿLëŽ=ySÐöºR¨Jƒ¦=£®k9É£êÁ­c!Ã)4zT˜8Ó.GLI<íY$ÆÉ5˜’:=t8Ι«›Ó|ú”|ëÍóèþúG¨ ™ JëOqBÓÄҞ‹¤ç,czñÙ4þ§2+ÙPáÆ%i$k×_D%ìgiƁ€½Çö §‰àÒé%HÎMîòÜÐOÿƋê¿ÞVr^ +½‚$«óH!Á½aR ,iå#JÙQ㸖ÌaVõ՟ÅVʼnP°{Çù/8¿£2›æ‘‚«·B\Wí%cN©ëªŽ©¶Î +˜«ù?R¯áW:eT‘Õ|ɓ›J,,7CVMÌ®•;[ +xiX:÷Ôð¦7”Õ;[yº¡üQ’­dW“þëìjTyüFów9gFŠš£DK2ã57ËdÎ×AyÀWîÂ[ÜQæí;,±X¢Hçë¹ì0îk!hM@×¶"g‰åâªU¤€°eBÛ¯/=yZØnñC»ªá¹Ð@[t¨Ò& +ttÊ"îêVü–¦Qwƒ¤ŸÒ†‘aNzGמª<À¥‹­FxU#ÑéÒ/ 4l›Ÿy³½RY«Ü¨ìmù'X‰¼¨!ư AÞ"•}²½ã4©GÏK/];.l4~ +¦D÷NÝÒhC—QfÕ¤— Qlu+'—0Ê®(",'-l×2ü2yùÁ½ÕpžzªôpÓýY3‹ƒ[ßeœ³à-IaZþŒÃ™É^%`‰Še·j±êäªKhõP2€Â|³ã™ ŸÚvz†‡©U¹n¶‹0Ýt rÛ¯=ÓrÛ«ž˜í՜8¡± 9pá3阑]åî™×<Ë:¹[èÖ<‡l³i¡hâv|vŒÁbŸ +Ì=ڔ˜6 EŸç>Þåªe¢|[=$1£ôˆ¾ &Ç0Z<™¥®€óӝӪøzÞÌmðS­Ï›‹*ô²——Ë +¨Ä¯Ðj.ò0"û¢Ö5öc¤Å¿fØøì¹H„Ñ£#½¢Öù,ðªüÏSÈ÷:S¹Ô»A¯[¥I>! :P6læ8ª™ H SÁ€Æ©'rXÃO¶zÂ/ޝb±”;¬ÀØ_ð`{½D—¬D˜§²Íóñü4x}&¤I3d¬æÞÇÚ *øñ¾“ßûƒPÑü²¹× †¯{i—öђÎ7õô~ŒŽôžN¤ß`jÅåÜbü§¡æóF]#QÒ$78A5·Ø7:D~¤ô•Jú;iGæEÁwRŒ +¹ÆêЦ²L¡àۍEÛ­®ôPcÖ(¦[­4KËÇR³á¶KÍ¿iEºÆê;qndzz3íý}*ŽÛl í³îŸÞ#êW<¯r|]!J‹º€êÅl樯…¢Oï~³á;Y0‡Ëâpóñæwx8þ€øLž&‘J‡GßÞ©¶ßZRt 䔎‹û~7öGããK—ú’æØ¤švg.S`ÛÙ7øþ©ÿ´´«oë÷@n ³lå¡t_ßÿ‰¸uÑþØì#×Î(¼pTZ6ûFãÕÞâsªN¶AluߤKîÐ#¼â=•gÀ< ŸÑÈ>ÍÁé̐•=ié#D®<µü9ã_ö'úÖÜN×>ÐæZ”ýG­"L7Ö5ÿ@V{țÐes½!?™hÜ oÒ±UÈ»¿æŒ£ÄçM?DwÿŒ“&¦>}QbÀ÷¸÷pañkýTV_o~òLøþƖ ëìæM0}+Ï^ra©¢žÿÍ(, ¼Mšö>éšÞ¡˜Ò?¯ß>+W7QІv…Œ·b|<¢·°a¼àåPj˜Ý_ Œ*5+Ÿ —êG" õ`‘rµÍ¹ˆç¢3ülŠLì…Êš™)³ê +âD)‡öp–¶{Œ‹{­Ç2¹`ÂFÖzµ[Çqhf3hÜÉÓ + (҉^êD¯x({§-À@8_ŸÞ Õ¸¶ÉÚãkrоäµbžs@AmÁ +lùYã$@xYðOQµ4gÀS’OI›>à›xáÝÁ±Pd³0Ú»ò¤jÒû1'8} -}Y)\ 0¢ a»Rœù,8¹Úv©Ù žjïÿ¾ÈQOé‹ç´/š»YË4‘‚ÁHÁä4Fþlä_ÏwÖJNÏÛ>ßX{I"øJ!ˆ1©&ˆdÚ,êI« ­Š@§ªÕœñös0 ÔmçOà˜£YKWw+b)ì™`Zœ}Ëða”øö&ç~,ʳqk쒙ÀesY­H¾«Ý-a`™dއôá÷÷'ªÇ§BQõ⎳|ý™üéwf”Àiós£JëÃI9 Ò Ê?ÏÔïèiÌ0dW|땱ªÐîš›˜Žß5÷_¨üd2‘æEŒRëöì4eH93j@o Á„xbìM„nYÏxþ|­APcú‘J[Ÿ œÏÒ`½Õ bÌ —mÅѤÁètפH} iÞÚ2§ž¹ÿ¯Â Áï CªÃ]G&f˜Èff†e°#O›Ÿ´Î£jPMÎhY9ñN•…i +£¢4b¤”¯ ÛrCÀhz4˜Ð÷ÀzŸ?Ø8s7Ýh{àèѬў~€ˆÓ’¾ãMý"J_)£65©‡¬!ø¼3ʃ›·-o]}/Fà!%n&~ð{—ѐcMïúëæ=Xq’®Ñ{v6±)'¾ÆF,3évÐV*jò +§"êêPÏ×h¹ â`®f¡÷ýÀü/CŽQç% ÓÈByéÄü€ô‡ ãÁªª6xÙvx4ŠX0xþˆÙ€ßV÷˜g PdïžÌ7îêS²èJ½¤¸ ÷‘k.šOã`òð$|ÚEoc¹#ˏTk¤mÈ/–ݽóðd„¶œ{ç;>”´á“³ßrNvè¼Ã—W&Òmå/˜ypf2‹×-Ú«o#ïr%Ë+¸å§kv“¯äŸç{ÿ¤hÁwÔÁMøÆÅšÃ#S f‹"3Ĝó'v1‚cJÞ× ¸zFK)#ɗlà-»3ûÈô$sŽ^p$z‘9ì¹jП ß?;ÀåÌB¼íÐêìþ£’°ÍÅʷЗË-o,v9ñJ|˜Ko̪=ô8ÙZ9X8¯)àÜ}¢«I4ï@F¶Ä¡êá­;Óí¼‚»­¡…t¬±|Ü/§Œêyö’úæä²ËØA[ÝWîë]Dž ì¦ÉùÙv÷k–YcRæTß;©‰£aH% ¶@Ŀ•?@“8cMցl z'¹Ñ¢¡sOôž(bÁ×DóâT݈9»Ô%««”‹±–z-´ŽÞfø¦¤ï84šIý@Ð ®âˆ}üq÷FJþ®CBlÞ|SãXâ¯WNF•@çWÁ¶40dë}úv£û‡noä0ÀÿàÿsÏ-¾OU‰ƒÏ08ž`/Æ]ñÏÒ$ÜÚ€اªÉš™ùäíbN¾ZA’)ãOCy¾OU»Â[Ú2qüø± -ꗀŠÅԔ»l> áê =€†w޶Z"‡óžyJq nëåÆ.˜î‰ú“«EVl]e4Œ­9Nœ©9e*T@¤[†‘=^`8tUt•+K,Cz6k6Ñ\qªN×xFªûçÜ•ïñ’>šÀ­®Q¯8~·­®y&Ÿ†{\œƒlÓææéA½~]E·Æ™€pö±;Zê°n5«ìSµÆö²ÀÚ0îJÍoxIHÁý’¼Bñ PäSŒ^á»°uœ¤‚³Œfy#Ðͱ Ä£j³=3´>&VWIZå^®µ²¸ +Ùäì‡LVr÷Zß9 ­ŸW#[{Î8­¿g3U¿Z#gÉÚöUc"Yýˆ¢Éív#I9[A÷ i_º™ÞøÈ-#àÊþrZü:JþÅ"ëkzÅèpldWÍ¿'tÍ®ƒÁ (®.J°wôV§k*µí%nÇ!6‰¹vy‡˜^ ¼·ÍôÄ +TûL®ßÜ"¸zofþôªó¦þä•qæ4:5V¬]µ ãù®£ñŒÃ9[]ú1^ +‹]á.§$ғÁ9‡É½‚´`-¾€Îøüwև0ð`Åð¶Û¹.ØH'ð·ÈÀªF£tFÐ&tù~Á!‚è ˜ó(&¨>2î@fpól­7›\Ñðo£0ãyqœÏ§kéHÇCÚÍj½‰“0r“’=Ô}ñFMl•~÷ö•û±Ù¿¾‘§, +•40lpëà8Ôí*’ö@ôY@¦þ£§b{NmÖ/’Ï If—§ŽL¬™¬ž¼ƒtœ\³Ð|~†ñ ¿J¿ï#«€iÛ[À—l0§Ê¸ Ø¥kbTÅØ>^ò¤`>Fu!áiiK(ZÕÌ!џ鏝 +ÏY Ëi`E¸ðéÈ k¡-*Ü7Ñø7ÚSº—zWû |Ôs!º'`7ÇjF!ÜF”®zÌ{ªh—pjâ¯(´¦XpiՓ´êàܬO¢Ñ³<—¢–ž? ƒŸ•{°æyó}<жn¯´]ì³=r½“å¶Ï–ö†,ôhG¿y諁‚ó›¿Ã~³ìϤ½š’ö„§ÖO‰¹79‡O&Ä:S»©vÇï2HP¾øÇ¿sÁ[~K˜Ìܪ6£{-e2½>>¥1â îs5yº°VØCC—*^àåç%vfàʪž}šùÌÕô‘KâeŸLšÂ±Æ? +‡/#Ë~s¶yVpÇr©q:PuêúcØ Á‹c$iNƒ*J±ƒÄ$çñøpµ©:ÞJdÉő­Çí 醍G¾f•™&•V –”L|Ð2õÍ"´íŠåŒàiX¶9F^ìeKàæ5‹ó<ÐÖ.“€2ÑÖÎXƒ!“½€m2=WÈÛXÿŒïåŸçŽÛ×(· =VÚÛØ¼tà-ÆOL4þð÷æÔìùÆ^ÔnS²Æ¥/‡TÇÃõ‘誦*ùÏÁбð+Y-Få\¤]ôꯞ7ñOº#=¼AЍ§Qw¦ù?4^Ù¤¬ë¢$X¡SòƆ¸ž¿«!4vkýB¢= 7úN,ê~ê|â2Œ_E48÷œ:¡:n=lÌÖ?؞ÆkëL¦܊ãr$÷gGíÕ%0‚}ÌÀ¤‰×ÜÌ2§ùfçÃÛvn³ ö£Ï, +¿15pïU%ÁÁ(7ÆÙÖ&Kb>$·×$¶.³•È3(Ÿ +ŽCÝ÷9 °ß<¸ÌÕJä9àƒ2ø¼tžœhëzéûLF+4¾œÚb2à}˜ Ò ¨4þèÈ"¿6M²wås›|ÚLb¶µ0nnX÷õ³edPÊvš- +T ÙۜFâüGGÕñ}$Ö~ÜÌn~k´[°ÀمљÒúüÚS,T7÷L,Òaaês|§çÂÍe·ÌÛ/ÏÑ]2ßášBU¼-Ľƒ›ägˆä(t'Ç4T ”·äáqÀöþ¢´Š á;VÝþhö=2´~:r®Põ¿³ÇÍ0Í$Œ݇Zšÿ6X2ñw¯{¬i9)Ó&I$’€À X, +ˆ@s&b9„öCØ$‚ " +1ÐqŒ€d¢Ü¶d¬™—5mçªí޻Ͷ÷VÝ{–îÛ"T€ ­EZ¾ÃF•€ +³ï÷ÿß¾ÌɶÛÝ»{ówó¾~€ûà÷ÀêÝ­’IdrG¦$Ç?0†ŽWÕtÖ «ê£2ÞK–Ã+Äo( „NìgÚà~ó·dGãɗN=ÞU§UÌ=2IÀêMôß҇Ôw„ú>yå¢w’tu€|]ú‰ÿ3ñô¡êWüïÔ°âÉÍ.¦C¦$l–„çln4MÉæU´ßÉíc ½]ú + ©&Ç Á„M4hré~”CÎÓb÷Ö4`õ¶x¢‹[tŒW%d¬'.0L‹Ûmlæ@^$a ØÁ³ðtÉ03å®Ùº˜_Â9ðš<Å»’¹Î¹ÎØ ž(QöiςiÜòž¶u³•U“éx¦hwŘzqÑÃ"3u0¹„ ^É]T ºÐg +í*Q´d + nÁïX¥Öðg»„š¨1ÁNûJ^žu8μa»¤ÃöØäíy2dl‹‰Üf遼ßQ6ÛYõK¯ûIVw͘y +®¸`óÜ-ì\sy‡Ø‹ÜÆ^PLhækE²TU7‰eåi¶û`0l܁TÈ8uÞuöå;†z¨ÉøÐ‚j©ù“žm4üÍٜø¿'gæ +gÿz”Â½dë˜? ×°,£;ßñ4v< +ÃgµÂ Çìí„lAªzCˆ¶×mÈ<CÛ¨ö×dbڔXÛ9gl–¢4ÙRц%C§Gk åd¡ïNý¦8|ˆÙ(Q¯±*4˓¿Á̬Ót½²”UèS@h¯_f* ìb ⢪c+؃v1ß%{Èó×ÞZ.]­I\,b¶„m·…G 'O*΂P»„èeùY–뇎N8™jäÐyM:O1Ï´ˆÌ\Ûâ?b?fæ“nœs¢ à( +¥ð‚Y´‰„Nã•G[&‡Z‘ëV³¤{ª +sDå›hU¹•(„)x‚…/t¿÷E<)gOÃ$ˆTD$Ì]¼ÃB¼ŠÔäè E Øí³õ¯ÛÌÌ>Ã)[3—ZmØévJKëgrîÙqÂRËb °(Žíöå[v;³±¡{ö1 I9e±D/’AåIùˆ„,ÐÀØÍ•}È1 QQÜ#0¨ÓòÌÉN—„D0·8⨣FÉÚø3¤s +jeò3q¡‡Ó½À†XÐÃÄ#Íù“çZ2ôÐÃþš"kÝ/ßñÎÃá†L«úó*ð µB°«3‚W»šHžPe<£O= +höä§7P¿•4‘ôªðGW*¦Šµy •­xPœ¤'&ð˜€ïgÝ¥lɛ#¿›€í”Ýá&`*±;—rO~jKîê˜Ú}Ûîá]ÄÅ .eB¾Q§e­ŸJJÏ@|SGvÈH†ÏkiL+’‚«‘´VØÒÇÒ±Ó»†j2Bqj¶Ñq )=…n»¹9òÌb/¬›8žWQœg4°É=|Hì’+ÿúOžæ6>áÕI¡Y;£‹œw¥ZÛ~ÞKûSnIÌ7WÎí.„yÎ_µÅ-ˊ̓˜«itÈC…¬vÛtŸ‡2B­ÊÔJÒm–Â*ÛlùÈgè*·¶yE¢‹KéÜEë#ý;r5Òyr´hBú|¨ÐZòÊõÆt8|83™W¹˜3´rÇD¯†˜zkuã-€6c¶\7/Ú^t•®x¿tÄûºM©žÈÛjú|TÜôBÜɨeXÌ»r +5Gx»2pr·p˜¡•o +©Ì +¾ëÝAÚ®—¾ƒuMò0g¤%8%ÊôB™©£3ÌO¥]긁„c›îJ:ïAޏº‘£´Û5º¨ +ƒ2õBØ*<">=ÄYt|E¹¯ãÿb9„z <Öû°sÎr¤ÞJC¦„Õ;\æIŠ VáHyŒBàÏ{j3™MòÿgŒ{TXªàÝNç‚Ø˜@§º°ªsCîð|KLóNaærƒ§†øI½>TÆËÞñþ¸%þ<’;®ºïbëû‚þ[ç«fǃéq•*ìñ\@}­ƒÜâ#*‡Põžá³ÿ$…WÜ0ªø^à +¬pÏÿª–]~×$ŒÁ7ÀUFT¯+ez*–^$fët%.þõͼÑ)³Ÿévñ”ÎOÿæEvËt½Ç^…=ݔÿXp·ßF»øÀ;xᅦç€t|PãDÕ'‰}‰ynMˆbÿk‰X?»¤Û|ïi[+±têÄóÂ÷BTîUn1~¶.Z<ší ÇÓ@ÓÏ] SJ“û{üà½Ä¾Ã/N¢£A}‰éÀÚÀ™ùØLøÑ g«f‹|x ð›à ãìäô).“©&×IÚ͌Hiã«vá°+OÉÚÒ5º0/Aó@AUó5 Ýù㕁µâD’=7ÿ[Õ!þêÊSsÏ*ëÑÅrܑ³F•Jöޝ¸ö —¶”™rùÁ§ì­”™#d¨“ôÉúöDx¡ìhy'èõ˜tP¿±Θ±íÙ&›D†mÒI3§ üÁ¥=ÓºÍÔ=\› ­8â¬á)E¡;²Œcä-ú°©M΁Í6Õl#škµ§Ì-0ÞkÎ+c@̰œÝB4´ZÔš/§ýå5íçP£Å££&+ñu Üx^nî®Ã"“ÓD!ÆRÒ­Gí<êŸA“csu&dpÆì@ÇÃ]¶A.hXc~ÿÕaõ—ï¼ë>—ÞËÆ>]§ÿy”†}ð²Ü1?ÇÐhJ.㡵{ÄÑÔg5iBžÐHsQÙï|åàJ®Œ4$°hBX(7‘ݽw¼ÃãXcÜìœ ¿E‹IŠCÐ&-tx:Áž˜ D0ÄùÏQ†'ÌÍÿþ­Ç\†+èÃ7[ц Œx}òþÛ$¤¢ Çà2Õæ‡ ËXÈ̵ÓóɚD(;Ï`b@HQß@ÙÈeåÕ¤)œ^ ¢°¹J@ð2çs@°Ú%c¨-ò6íê„Î{­ö¦T©Çnæ}H}ÚEtÓ]œÁàcQ•Øn_«ô‹تV:Ð¤Š´¹á§ gÁÃȵrM—|0Ö&°°7!aPRݝCǨÈìkîý)(¼%apOâ‚õµG}Õ +ËJ–R”NZd'Sµº?–EC¶\1ojxñ–T&~€½‘ê/Ôd„¸Žºo!b×z(ç×ÀíMA Sv½Öܪٯ(±«ëÊtçšLàU*=cÓ)ÙXUA¹ÖüB|À˜¢AÜ=)ÇìTqÆ@{a(;?¬VäÈˉ½àTÑÔõ× …=±)|=ÜuB¾4©Á±éh¡Ø.z‰Ã|…$30&$3Ëük{dŠNZŒ”Ãåи%ID+‚|ª=žvȑ³r$™Ë™×±Ì>¹ÇÈB_`ñ·f®ÚÓË­”;¡§<}Eø™':éc,Hw=­Œ;žÎˑ-xu¢Kœ3i*¤gAør’£)Ï.µŠÈÜOó+±ñÒxC W~¶­–¶k3¿ùI/Ô|ÅèÔP²°3ôg¾aèô3DHçÍJ-Y{Œ´ÎÓ”Ô«ÖÔõ¼’w'­³jjºÃøG(ÒÄsLÐïZÊêð‚‘zڝMTÁ»G©©uPÜ¢…ýÃsô|æ¾õ^Ò<×û‰TI`œÁh0=‡?.})ie(3iŠ6 =2,U½‚TÛɝOÔjåB¥ï§†&"'3ðè \áÍÓ32ϊÉì)Sú's°w¢K;;š‘%›“ÏȜ#ÐæŠÅ¸©£Â'Ábãæº!4"a=Žÿí¿„þivóÊô¡‰ÿi/õò(_ÔÀmßð˜ÀmßDÎ%_+ò í~ ñ—òQ§ŒÜçÑtÍãCÝÐ¥¦Þöx4íÜcv¶Ò§WZQhd`eß Á6,_™fy¢?;͝’)± qÕ¯û°»p£KV‹îÁï"°ÇîÔðã©Ñ•Öãv±åu²²%uÂä"íÆÔþº­ŸcƒJƒƒ™žWEJ%*#éݱr,âЋ‘€dÌ4K¤ÿ´9[LÄ®ccÊæ+W2¯µ‘)a˜íXHjFyNÖ4®fz‰Kù\“&åq§dJã§‹Û1u®„®6è áAÞL?$P¿viÀ|Èøc°üôK½ËîÅFš<âv½À¬´ÑÖ'kdw„¡|¾â݁’¾z4®^I’%rõ{Ò¹vH2!õ‘ï1çNW/ë¦Qú’ökÍp¦û¥¦·FÞ»ïq‰]·EžÅX|ôi]°zbØÝÏçˆ2ü<¤£|R˜)ÝDðŠ¥ÞWbkÖÃwíÙN§PZ„ý%(ò…% ?[”¼~ß0®äˍ <^T˜Ô¦ø_a ©‰n’®»1l¦2û)xîÍZLÍpÃ&? P‡õç²à[¨ðq>žaòÚR iWÆ!–M )xö“?\öÞ²ˆ#öAP†Q3æ§ò ÐúG±d“ ٶР_‰&~ 6µH6qà ¦”Ü?,ôZg´aHéÉ܉*ºÓƒYn^É[‡šØï€âfuo¨0¯hˀø\¤‰–ã<÷35½¹ûy9×ÜUQ`ŠN²/”€9´ß.έҋ¦:ã)KQp+%ò Òú"À<=çÆBð‹®;^t<1 ´æ£Ê\’";ëRP3Óùu±ƦxÜùªTUƒ0[œ†èRbÅHp ©]øô+\ùäÈí¸ Múw>©!Ï¿õÎG” +÷p»ÿ@w•,‘Ú_;;i ÎÙTi>ó8’"cö6|N–M¸µï%2 õŸ:1ʒŒR¡á\Êk8Ãj®,F—ÑÍ´OýqòIIF²k‹ø7¥} uõ‰1¦ÙþUL-ƒâ¡ÅÍV_:…‹¶]»]±\IYãoÛ«Ã1¡Ì-âøÍú “Ãëٍõië9 øo!*d&ñÍöpxhh‰#ÝÿàfŒXæsi­½QªKLªB G/¯\œOÎ¥¼£“8Y̜Oús4|Ùf ¾SÕ*uÀ±ad48Ü2¸¸w'§a€\óÖÛõ“vËeR'6§œ½mÃ}Æz×äaûÞÉëVîV•bÆÂì‡;IŒÁgÍÃRbN5ºŸ#ô@Tg:gÂw:šÁ*œÈÒÂ'ò޻Ȗ§æøx¦ýÆjÚ´‹»¡Îpª’(j>xP›c0{+!MI~ °ð¦®KÈgŸ¬E3@Uè9§Ù*Ñä,°Ù>Œ1¦ÿ±—tºöqçûé%4ˆ„³ˆMÍÿÁXxÊkÎÜ,4tz¥¥T¶Ñê¢Ì–N×ñh#f9¾¼R“Q¦?:d ôÁ¾³|§,C7À°Àò—;†!ak°xç˜>¯ íÇ{ÕÄ·í&ØWDÍDEýŸL¼ÍlêÑ^m†^;ØùÚ¡Và%ÚdžoæAP|¹ä/S*ÞÝ6¥Š²Ný€3Íx˜Ëp¿å:d|cªÞ®)ÁPNû¿M§™öUI#ó-.¯W͝Jñª…GGö F2Fšø {d¨«²IÀâý +|\Ô`ÈÝS/¦*ÀUÞª)‹4î<§<c¶×Éý£âÎ1Xz‹á¤Bkáˆ\ÉÜS´ù‚[_©,T\#ã€2=vYX´ú‘CpÃ4™^4a^UBRU  ÂܯᐝVƒ\·KEöàËIó;¤÷Ät6žüíL=$¢FQ¸C×IvýOû†H DÞ~KÃ6Ƥ—#ˆí°Ïîrû9_•Örìär³Çå|¨å~m§AŸõ®£³ûŽGôgýNЙþÌÊ'ót­m:Q»p­T$“3\$<Tfç_ó¥ŸQ=kÛΪ)‡SISà@w‚7k±ÎÇ-“B:Ì6ø<”œV=L’L°Œ¦ø;>”XçÍðï1ó²¿âÙÇbÑ·b‘+v¿‡³%ӋPžE€ëÍ.Ìõ©Jãç5-Œû¸]õ ¸^îŠá +çÏK¿šui·ƒ +íIXXGÜÎZzŒÄÿ-?¯)D0v¥XYc7"Ë;ÁhhðÚ$û÷ÅìÃ¥%ÍÇ~Ô´]æùdn„¹®áLÍ;•%é]¶Ø-‡2%&HŠ  Kk¾}t]õMŽø{õ©3JõͺG7 Rw/&rCÝR‰Svb‘>{$ÿôØvªÌ Ñܯ<†Q}Hd5§=l)¹|ÂÒábþà¶ h;Þ7º=qý…@g„Y6~ݹ0:Ægó®óQbÑUÌD*“ƒÀ2¦]Tý-’N n¬o¬­¥ À…ÚüRZˆ„€?P•§;¨Aífñ8e/¯^pÿ~&L¾Ü’:kžÙ?í³IÆÀ€ `! +? %–ú @IkR{QÓ.À)Ð µC›–`ú>Î|ª×ò†»‚ +Á‹–ÈCI€Ù€ º§éyè7~%àÆRè\ðٙƹf}E@³rfJf§,”õгÜ#ÚhÏG/#_‹Çè%±ÝB2Ð;ˆûs†Ì¿çñÄ©ÉÚðËFö;‡ŸQ&Øv@2‘ø^¹eê"!’,Ä+8’E¥)âôæt˝Ž†ß ÃýI[–Z”¿ÛǗu?5˜åe€ý¿@@gþÊ6f-”꩘Va•LÀÉØ"½lµTEˆ;iNQ|1ËVÚs±ëb˜ J萢ÑÖÕ£í!ÚØ²ŽYž ¼€ÏϓРüÄÁ#·ÿh ËÆ9>'ãŒù«³Aå¿ÌA”£ÛÇ j”RtG§ù XîY3ã~_Ðo3:âµò• &E[ä÷É7苠/°òS5ç-Htàogg0î“`U%`¾¡óêµê“€™q32êµ­ŸZ‘ãh¯º·«ÆŽB€„vY²L ¤Y”a¤|Ñ*ì”h.ˆÄ!Dæ²vË` ŠÁVÎҌKùކd¥÷ßxi>IHßTW¿hšÌÞ© ²@1دÅj'ûœX;3͆çf1Nîü•ߌ(äÓS0,ù¢fÙÑ~ù,LJ‡ÐQh«ÜÞÓåæÖÁ"ÀK‘Ç2Y«iÝ¡Cë4òKJݸÓÉEƀ\â$wöØÄÇñ?ÀX¯4¿Ûüå`ëÞÚkeaUµõuš–¶£Ãh¨©&Þ¾··½qRV#zĞ׶4NM+ÌÛviý‘ïZÞY?´/س|ZpôíoŽ=€#o|¯œyXG2ŠÃÎ3Nåܙ "E¢X y.ú~õÆ\?‘ QLµÄöŠX™Vˆ˜]!ës¸j³ ÷G{¤ŽØ*2:–ªvG:Ñ+ÌL~Š!å*+Ì¢'Pž9ľPŽ{m:(¬ÛÃ;5 +n¶VÌÿ°ß ×8)3pùQÃ÷ڗPS%Øá¶?\Ü>͎ï,~ît¤QÖÒٟVÙºnÁ¢Üc `¤Þhiïzß ªÇ7ÃÙÌ·Æ­+ë²Õá^µ°ªY7ª6øŸLÎzª§ªRrÞ2ÙzÌê£D÷.@,á€xVˆØPS€ÛûOñ&à{*Šš|:ªÆiG=¹‰BóñùE,O:;+bìµÂô6LSV~¹LƒX´Üú¥€™­§¬¬Œ &ßåâ}áF^,Áø #Õ‚•gàv,LǼ…Ü˱M¥¶|¥)ù󾈼zÀ§½\ƒg`.êŠÜ´õÜ´Á¥»œË¼†=#H‹3¡Ԍ5ü<>ÿA˜%?ÞHn¡ÿ~ÖIo}XS’†]Ëùœ‘ŽNwÍlúåaø +«iÙÉ>Nç?ÍNæ¯ä_Æü@—-þòEŸë‰~ã>€<¡1ÿ–JKÒ¡=£JÑ(ö¸Ð„6Y\A—3ícÈS•æøT¶Ý­¥rÿ¿d’w^²!Re±‘—+“4nÞ£ç`#þ²-šB,&ÎÕ}ªÇý}M¹ôx†d5Kl¯¡•2ðõx²)cp[ẅü 7lÿ ¹IØâý廙xª@¬Ðœ1ˆZK»¤Û»myg×þ>pÁÇÁ`p\Ûàuû–WB[¶ÛUëÝíÍg凵% +HÇd0 ¿¤bK-zŸq«.ü_ŗ0yPÜʶÛ'!Åp»w0xðܲ£ÀëîƒP¼Rºwº´ƒ÷ÀìЋÕ\ ßn¥ûكDgijܗfçΞ-+­ìd×ëP“]~£$Óá&Úþ¢a}&Q‰’ΐ$ك³ G´Å}õ‡œÚNjLË7Å0/à•l…ÅRÚº]Kl~ðÈáô+¾{ ۟c0?SÜ<hf—æ +Î-ÔC"_JZ†uPKø ÞIþ,m?éŸPÂۂÅ!#ê¡"Ñ~ ²,` ýŠ,*ýéڋÆùI‰Ã‘Ÿl”ä|èjȹ0vŒ×í}š4¤à*‰póA}–N°»š×‘[1¦(º8ÖMÅù¿/;#+˜½íAý:´é>ÿˆ9c]”kԅ’?l|Æ£E+_ƒ¾Ñ3ó@hƒ(‰¡Xp»Ul’õS¦ÁÄÁ'bÄ»oØS‘ì°Â‹L¼k]Z­éH¿l˜nn€?`v Þ/·ÎrWÞûnÀ7 Z||sÿå¶K‡9©É¥%ˊV ˜ùé8·ç—×§Ï_ðp‹¢öˆ4ó,½GöÊùXTÎÀ††jZޝÍ¡Q­óDx2 +zõmÆ7Fƒ‚aáÍò¯3nÂÆSƒLE>=€`ö|!Kòø‡ÿ䇔voš€mKñô1h œö½çe®ØÔHìaÎ4_üø…lÆ7ý-ÿ]jYñÜoj)òd%ƒÖ1Šýôh…ß:fgÍߌý…™ øwâ_²~&(/ÛP ‹Þ*×+â([Lo†ˆÌ޶ýÍÜóÂ1<Äî…UÑë¬l¨ËP¡Œ_³\A©D—´ó@E¶*O¢7¹Ó< é³±yy?EȤŊo¿3?ØèÆ%׊ N¸ç䬌ç(ó'<<‰ç-+MâBGœ­F8œal2'¥Æ4!$P?˜/i¬‹‘,þ«c·íöµØ-›¾Úý‹á¤õ-P5Da‘@CØrßnÕÆp牏ÚYýÙRNÔ«ÍQUô#L÷%ƒ6w +úQÏ‚‹™"ÁÏî2:Øg¯È!AÞÚA§ŠÊ˜¡ôão\ƛmþæA$hG„æð1#ùðW äY؃©§Ø7ý”¾Dëì,Ìç/„Ï?°…©ÓÒ_ÈTôDâ?ÌÞSü]qõ#ùð•è©ç¯¯Þ±¦[Jàó¬—²n{nªÅ|mÀp\@=¦VÞ·$ößXh;lÚZ°]_ZoÚÿ¦ñŽDì8èŒÉA‹yþ[zZ è¥&Š€$îsTG5˜´ç¼^6õ•äk1;{ ŸW“2°³NjÒåÿ â)ì æ+›—œÛSë +§\8‹YÝåÿÃIÄï¹@¸å‹Fƒ@±•0—=tÜGÎ70¨L÷ï¿ ßdF!~ÞìÚNÙݒX P¨*´ +µV «e[DúUÛ½U7U¸î°ÒJUDÕ%«eøû*¢«‘QE¨ ²¹pƒ­U” +QDPú(Р?ÿ¿¿},¨W<Û¼÷½Î÷›žç¹ï¯Ôºé$’Xܰuù;foœüôˆž¿¾á˜FL¨xÄf7“"N«ÔYû–J+=í۝Bm™Œñs[²Šùgý%ÛÿB{Ìג•Ùg3•òو±S¼q‘Ñ–ò³¯‰Û2¡D†0a•Œû¹‰$:·!rBÝÂA´gIy/Ñ ‹â¯cm]ŸÊ o¨=4ļ Ú&…d¢ÝŒT¢cvõš´ ä ~ +.{VBµEò_)P5ÒÍ›BÅq3YRùR-jüæ`¤öýÜßÎgŠ’ªº§‚Î ^½Ï0÷Y¹µK²ÌÞ4ƒ¯zç@ßx ‘§c4’ÖúÃôMÉ`úŀˆs¤9,­õŒ€ûñ’aë+Ç`í÷°t §jyíé@.Y™–TŸ}5ÏkGÃ5,¹}çÂ+ÕÄÕÑ /Þ¡sôÒHЭ„'$f´`Ft֘@)Öpà)  )c òÝÀñ²é¯™Îü tú»®‰“å±³ŒÔZ{à(ÚéÓFǾc.ü Gg‹DÊúÌéU]VÁ|]‹BõLíÍ?$¶\Ç/˜¡8ºÚ aïô×Þ|‘÷DЈum&¨·3ub{€¹羚4݂íŽÔ|,—æ2äûwþ3ì>[ž“BsÜf^1´×˜n…_…{,°~®Å¡äæKýd²dWvLÈ/¤_à=³b zÜ´vÅ0Ÿ’t•<ˆ¶1Aå™%.eeV…¡ÄS´bpo‘ñÚÃy©&ØÑÝ`™2_1”(ô<Ǭ?o£,mQdì]±ô‹÷ÙB~ìj~T¿’ýÀfkOw:1o  ¼£êfm±|S‰ÐÓu>—'£ä¬ôƒˆõgۙã«@%êÅ= ê½8ÿG}§áђ¯2uWîq?Û`"iÔKÀ–(¥M &/Tcù*:VÌkäôì:v:¸9;—¶¦ß9˜î›ÚúDé¿UóKQiçµÂ,çF‹â+΅~{Ò9!ç?sוKŽ-ÕNÙ±»Xš%Öì½Xšcý ™+aɧãŒfð¾ˆ'ñ¿âïƒÑníC¿üŸ¿ ½ÿŸ¿ºàÏߤÝpÃËü\`;ªù›æ¥:Yrôgªsn¼¡bV”—G͜? +T×_öÕ#lgØ{üHâ~åO(ß{:4÷V0rÁûw^Ã*¯ˆð)aŠÓÛëàùÞÎ^(; +¼NˆZÑõ3Î õBºS}L´ t×Á½\$¶mè—]_êQ.(ûÛù ~Ébîp%™1¸¢0èimK›KÉÙù\®M_ؒs<]ïON¡­Y(Ú2ÌüæA_€‡ü´kª U·àv „˜Ûwœ„Ä;—Ë~ÙRÙùÀë Ý„.èÈKâBhKÌĽ<ù–Ó$B[1½ÀÍþY= : "ºb|lVeÊ@®Ü%­EΕ·ãºí» ¯ È­|7éŒÆÖ¾[¸÷¢¬¢[ˆK՘ ’7ó˜ºÖ¼ +Ÿöj8í®h|E{k˜uSq.,3 ù°–(ï‹{¶éA½ÇîÒ^ã‹ÁÚâ*ÍÉEzÂyx4Srä(@ºZ“òþ>Hm«þTîŸÜD÷2‰°?qê"·¨-åđ1¿.B²§øUi‹†K¨5ÜÞ­˜ÄrÔîÿíÓløŒÀB®òñë•C/^˜øÞ#ï]ùñû(N/ˆ>?â>~ÌøëGøûAÆìøú£ÎÃççR¯Ž9sãï§v>7£ŽHøê€©qóG۟ÔqìOÑýYñÔŸH|œqÖô~ÙñáB?*|wÑó䏌uüWñé¼£ŽœøÄ×¥>9àƒî^xt«ã |v#Hèþ˜øÿÜq͟| æÃǪZ¸AÉ¥·Þ™Hqö{h1$5ꇅ¹qösÉ;?ÆÅEwÅu` *KÙÿº€H–æoB?=z½2-ÿ“)ö…&Æ/k€Éö ó]ê_™óq;3Š~ÉÅLîú¾ž]ÿ.[àǗ‚Ûï•Ð0=ç™^ÝG•IW¨ž© öè‹xe¸G’%ª/ÒTF½ tÇ}Òü¯h7Ñcn¾ŸËMìè²Y©ÔûhP¾ʕðç«Áuu*G(5Ò¿uìÚÕ+ücx]9Åßqώa™Ó8h~Uç@æÛæžóô@Ã?_»§ŒÑ9ú–bÍlQ]¼^¹Jn¡›ûý7PÝÿ2ßùjn¢öþV›¨æÝiº†ˆq§6`µªj¥ynó½zïË Æe¬â>vù–ÓhàÎÿ5¾×) +™[¢!ÚV¼²JkòÚÇßð©Vü·tE¾Æ¹Éìµá”ƒù—u3Ù;Àéºòq¤Ò8™e¾hn -Ó|Öò-cîß]BÓb(tyòÇñcMÏ"`´>CÁ׬lþôw$÷;§ü­MȲ.4·ÑAƼmf½ãú•Ì‚a$»RòiŒ¡®tÓH7Kph ìg5¯÷HÏÂá)cNÖ¿å]Ôßv7tI{$n‰]cÕnHdí+ Ô¬áˆÒ`únñÀ +Ÿ8-#Ê —$–'Ш³¤Oo‰®%jöx7êÓV +„³‰xõÀþr¿¦&D‰Î@F$Q+ïí"ȯ‹¾á»‡›ÑºæÌ ½¡uRàNNùZá³¹ ÚñÈcå% ,N­Ÿ0ee-ŒF¨áNæ]ê¿ Pv=]A麩wöoUԌ-S…'ן•ƒA…›ŽOª‰&ÀÙ èëÛæz=Ɖ97  ˜ÁÜ~3…xB7á]T)pO,ˆ@º´›¥û<ù`$KùTH.16éäâAôòމÝàë† Þ î7ٌh¤Zþ:æ¿r•ºI>T{ýÝ­{?p‚4€´>¡œ*nr<ºŽki#ÞNUà9µÂ RÈ¤·«c%>€Á­£ ª ·ŸÊþøµÉÜVœ‡óX\!ã¶ Ϙµ÷Et2¯ˆ]ØM–âitQtG¸Ð° +šF»#©Âþۊ×wíò¬Æ+ü¯UŸÃ¾WUB®Ššrò2hŠõ¬"ÐʖbÜîÐ4*ÜlÀ«¬8ù_íÝÎë_òÆ'Žs¢ÅË)5Za§¹ù(¸—%Ø ´!£à¼}ˆWi'ªûܝÅHÓ¶!n‚èÊA;©2OÏàKsM܇É]°3–‹èp“íóR%ٔ‚Ýmùz¬qSø¿—5ü±W…zCøî¥ñ̤L±ˆ_¶?›u76EbbôãÈÙRñ­àd»b&/[vëÜêËzv»–˜½ +Ä­COº­‚—Qc»ò€&¦ëÖ.Ù»{  âg²_2_öeEiSàº0)D•°S·ÂHÅì¥G»’R5_7v +M-YˆQûTÑõŒ˜îe§'ÓÅOZ—„7…À;,B!{x÷£ß"vâ2ŸÍ{f%ÖHŠøUåÐysiIï©c³B_ìΈ‹BKfÍ}?Ž}ÜysPБ$-ntÍF×͒'Y0(«åLϦøKô~$X¯@É©§ÚFŝs0ÃoÂî( +uôLŒ>’rµ©l‘¶x‘Q‰X\Q8”×2ÂH–½îh¬Äm·õô„!@L1ó>QŽ[ý`öÀ× r˜å€dޞÎ6<±¸¶˜l/èáC£NûÄ>oQ!Ÿ¥á½=%¬pñhõxxòÛùt)åЬ.*DG)™0Úö3ÌA¨?òø5®ß  +ØTšø„rTq†˜œ£¹  ép( ãû&GmRï8ÉoGû¥É.$ÿg˜MÐ-vî >ùi)e×¾ö +ìßW€¦•†¡Á²G*M‘{H˜ÀÎþßsÿ¬ïÍM¸;?î坷ÇÓHΔÔ4r”v…ùjoANoKÔZ½ aôÄ1^×ÿLU¾?˜Ž¯QåáݾQ`óÉaÀê*r$±ŠÇ˜:7öñ€¸x(1 iÆçÓ¢b²¤çQ0ÜKù—%C&螹àq¾†%Ô@Vgu[”)­ó¹ÝËzŒ±Øckn)ï +óü8e”–ÅpŠng;|gëNPȖSeƜuí†JüŒCS_8™Lf|­vµåŸ3ƒ4þÔn«Ço\  Ö@å ™Rñ,… ='œÐ9¥9ۋðRÑJK'›|×$ó(|Ñn X•úâ0!ÏmU= +žÁŠâíé?Ä»Jœt¿¥ÀYl(EÝ4–ee¸„[«ÒÏЍɹH¯ŒÁ'ÂàÐ<@—Ÿª²Š”ö½õÀ}±ÄG:± ­p+IÊ% z/Ë.l›ÓϘ§¦¢â´L†!Ü'ç=î-íº+ƒ(Ø)uY$,tNª¶‘°OΧÊò²È–W:þøL½¹¸ö1ä2´Ë±ãÒZÚÊI2ºyp^«¦+C†@°‡es6`¦‹\ë^·êu¢Œj'Ãj£5%ÌÀÿ+ ˆ*/ÀÔO’_ä»Üíã‰'ÑÛ>N{ž +‘krèf5Ô{'EGTsÙͽiÀ4S֟cÓwŠ„¥©žÊ{,QC:ãfÑxUGd­¥52g±š¯zÓã$: ÿú-Põ±¨ ½šàDícPáJ¤; +˜´j(GVÁìׯ½ãñúÚ|kïá%e&œkAê©¢EãÚÒSŠla„Ó›L]e­ Ëý˜I¡TŸ˜ÖV(dxéûfÒԽීÄːéù÷-kEÉ¢ýÄ&"¤nH¹79V(k“/ÓÂäºUí.•5Ò®ÿð¦ÌFSI¾Þ¦Ù‘>LC*>G°tƒ…ÿ†¤oá[ÀªÌ€éoÑ_0^~=±Ú)cd7æKö(Rw*ñêFjŒs<›óNRÀ–O'Ì.ÈmA;¡oQ\D ÆØð–~s1/²¾[ófõ +±á-úw“ê[1½¹SZÖ©íˆe–Ùnñˆëz¶§})åþ3𛞯„ÁG~Ía„'ïÃù0IöÔMHŒ™,R°¥X¡ä+fTç~Þ£XXU^-wåtnuFmÎÁ‡$ÿCµúÒ½ŽH¿¾o´‹Ø•aÏ®{JxþŸ÷(ÍÂ;ª‹€xüŒ«€s­DÂhtέ˜"גe~—­ ;ØÇ5šÙ„cn2Þ7•ƒGò¾èÂÆ¡hs¬£Q.œF‚!QÜÕç«coeàqçÙà–Ò®(sZ'»20£°ò,½Ô™ +§01]ÎÅoQϘT©Ò>ìë~$‰r“R'D=‚X[øêŸòˆ~öáًë®d O•eħ†ï“ÒB Ä«¹‹Ùú(=ë9÷z*Šçíhœ\bH“³û€¨ùéÀ–m‹`XÅÒTL…î}Ãß_ÝcáÁ´+íNU¨7q‚_êTdRdohíDº|qµ'´Í¤Zo"s.–U#üÕ8iŽ`ˆ³n²DJdXó8 sÝÕY '),,\¶˜€Iî­-f ô²X܍30HßÊb‹ÿb‹Å´ÅÖùùÝcùuð [Ãæ"]¨œt ÇJÁ3¢Þjï5ÜÍ}Ká½´ ZvfD§Âé4NLB7\‰¯~\‹8öË +à‹É߸•…r`vÃým¿$XýœùÍ`íÁ@MB(¦\ü”œú5ÖRL¦‘9PH).DÓkg‹ |ËäM½U bi…ù+É'ÏähÔ2ŽðK\õ]â$o)‡xJAÛ44Òjuµ(ÚT6µLPÚ·S±)¸¬«ZuĦ٠­½ã5ó¾ìòçAàL º“Q‹¥L‹âÿZƒ@ü +Mi”[ Á¢¿”ÓF™£àÙ¯‘Hº5ü?Çî[ €d¿wìeÌLC¡‚ëâBbid0[% íY›+±Ûm 1DN,ÄÑ:•ëxKßàÆ›½ªÎsDêW¸A1¡-•©Yò¤Õf,7BÉûã5þŒ|jùä)ÛٌI9©ÔÄDŽrb"kçj‰}ƟX› "Pïµ¶à˜m$¡‘[¢aÛæ¬Fé(þ] ï¥ <¶MÎ{ PV»L)D<·8ÄåÅÚ%ØNÆóMRL"þ} »û‚'»¹#÷Íäí£zöà!™À å™Û˜!ÑZçxyዤå³ÄD‘gxE)/IŔ—sêqe%×c£UÖÐÛJEð”ö™¾,ö€&®ÁN6‘‹©S‹:¬¯Cñ_-Mh^ôï_B¥¦} 7>D ÆnÐè%ðwç¹ÅòÍ»íý·† †Ê^-‚—"ø®§~W§Û.(×Xꔩ¨æˆŒFGì¸"Ú£{Û 2µÉÿÝü?Ö |Îì|ç¹V‘®êg«·åþñ¸•¦Jt¿hÿÉÞcf(Ĉ‰û1Iû'³"öîs¡ Œnä(®;ɕ¼u2¤&»ø›_¿‡ GÙÛDïÉÚRF{A¿<«‘øàÁømñ:÷s“Þ&ùÉôèàðGFùÄõš ˜#4ADÜÒ•F³œ!–~x÷Ûkß—Øê¤‹ô"÷ êëb‚Å(ä3 ++þXIú[©ÏÁг +fßf!L²¦ž‘€sߢ_ž„OVۙߞEbž«òpÑÉêa$¼GüŒ?OÑé ÷°„‘ó<î„Q3”Öh +]“5=3¡èi?Є-ß®AÓJåkad#u2ˆcÄçtzÐ_×Jg÷¡ãuT“6ÉL&\ûÔTf"«Zíñ²ŒÚwØú`3¢ÕMíµ§J}åVƒ¨ÎE/[þa3.oÈ’)Oz€Ft,é³Âޞæ| 6ü:»øÃk²-¹¿‡¬-™N<—ßC€¼s½oO.1 l­‹ªxÒV…Á@Ñ<Qåóiñ;Âì #“vµ.õó޶~’ìÏf«VõшlƒÁ^ÐðÐÄÏ#ú vóûs¾îÑo4ïPÐ!÷â^2¸§l\ɧ­ 'm‡Ðǹ$ÌZ}½¸w;æ,Ž£y;òžÔxï'w.'uíéû3;†«ÚáÙ$h670l"æŠLìÉÞœ0’\ƒ•uý¹õ²iDíšäá¡0Ã}ë<­û>3¼”ß߂*ƒ¬d;Í*zÞð}ÐÒ¸ÁPH3؛A§tʺÆõɑ [×®wmü‡1ò¦e¶/.qI ŽS^¼‰úހ°—nQÇ£kñ®ûÐ=قz˜éÍýŸ´Ÿæ^ëê—MFý—,ˆØ±^kJ:h6hŠ?ä7èHQZü×i§­ýzçËH‘5žXƒ«5\¾;¼Fo¤]âqãáýD]²oàŽÚ7º–Y Ë~L³!“ŽË=<Ùg‘–ä2Ê*²eæY†Y¦þ̳¢šy ¿MJ7KÚèö–h„G8†3Îe‹¨—1–=ÙDýÔRdɊWŸ"ñ(IB«4Ö Çͱ ÏÖV|=…œ|>¸Ôٝ½sS|q­á0Q@ˆwŸ8ª(Í<ªÜüÁÏ*µãÿÝßôê«vbôý[‡ÎțÓìϧã×ٖG’ŒW—Ž޼”:9Âd6³³<2"h‡à{ùnrþJŽkÝ)CiTèŸÞӇeõ»Ë|h­îYpT¶«³9Ã&ÒHò.U­wïTN9ª§¾IßÚ{öC8”ÖYœ•-üŠÚjÜS|͌kÕ®I€I= ”3]å°°o]Šw8ù–·,ÂìþÒÝe²—î½yFN$R»\íiý}§ \^ÍœHÐ?ݺV¶%æ‰Ô+·UÅ-H*´xdG¢IâøDB§XÀøèžB“êŠÁB{þzX/t×'|®ñ …Yoá*[ðÈ1µ ¬"5ûõÄ([ÎS®áä¨Âð5„á¾–ê×É{ãÄ !!Ë0ROkÒoà Äâ˜Göò½–Ä•¦œgúTæß8m‘û@ªôúíʵê÷R0γ4í5¤»ó;¦ó}¿{‰¦Zï÷»\ïè»x/†Á½e溛_KM[oo™ù^–%Q¥æ(7 9¼ÀßûD[èAËw»‚š^$ËçäyPF÷CÕ–$áHz㾙"<¨–¡VõBçYâškK6?¬eÿqãÆxBƒÅ$^ZȦLaôß|aôüŒ?È~RF†hÞgä.‹ª_Âú u nÏ)Ɍ(ÜÙôÊÁkÜϱ1‚ÜüÅ«æßîŒï:‘x§ÝӇÛàf§Å¥N£vkpû.9Wí`Ú5tQÆIý½D:Úºs 4‰œ;í²ϙ5š'tˆ l¿;lqFµŠàÈx[n<\ĸ˜ÉÝVìtÎ1Q.cí=Hn¿­ºBÔÃîÿO‡×²ÿ(—ªèN.. ²7§УÆ<²S„û¥‹6šM»VÒâ8)F‘äîá½?´[¨‚бNåò»ÁƒkrU(j6ÅþßÙ¯`^T"•4FßÔ9—@ù;Uq¢z¿Ýè”õxÏD„)q€ÜÔ%’(Œ¢½V¾!y¨‘.TpfT+`Ù=‹¢µî¸óŠ×ÍU¶(9ù&2†­Õ¢qmVÔdè©RKwUÜLwb¤!T_'aaȘªlÄÁÏI¸Ã÷Fæü.\ì†ÜŠbÛÏd~,׀²b¼±Ë¸¤)m¹ ^~XJ‹KH”,ÈÈg,„.‘¬!OîZ(¶:Öx«i9zÇs“:„AïóùDð]w”;ÞþA„ÖÀ˜ãÉùÊ»§î'åÅåU˜Ý Ž'|š ”q;²“áŸç'ùÇzíIMÿ’~g8ýYÒz_¹z]SüFV9@hÇÕnX“ãÝÚ1'ÁOå®VQ¤õʉ<`r€wnòvÍÓw›UéK’T2IÃRž—VLǍ֑̙úv€š‹¬I+…JŸ +b)ì¤NŠªé° +' ÷ètœdªºÙtAèŒQoËR +eñ„ïŠ9èîBØJ¢q'Ý4ZmJýÞÔðüÄåë¤xóÍ_xihóÓí6–ÓÓùñ8“«¦%"ë 6Þ§_ÙÕR2᯷´+è{ÄáÏ[¸)¾COðåžßÌigŒï«ð Ñõ¤£À?M$ѽ@-W÷näºvg¾n³¹ÇÒXDœ!êËtñ=#¥¨f×ôüCuB˜,Éí·p7:Á[çõ¥æ”¡mo— «T&":QV‚ä6eº­l 3& ;O¹Fiþûi Àdzý‹zsÚ­‹HP'-š%?¥âˆ–2ì¥ (L1#^ +q9Ææ° ¹â +âqðZցÙ(Úâ>zæp^ã%Ï)vmê:Á”®8Êà¦ÇuטýE—qq=T=¬Ça :–¾på=˜F"\o™”Îý‘Ìë…[e‰×Ò$³É#öÌkѼL*7Åõ¥£Ul¹  –v¿»Ë67jѵ_½-¢6Á_?úI£ û£ÔÁ*°Ûõ–#çÉйÜ7§ËíìG„ù8”êš"†™‡ñÄ;¥aI÷š·—¨® ý—wEµ´f±Žžm¨²-K¿J"rYUâÛÈÙ(Sò QôoN7\³‡-»!&ߘ.×8ì^—t%Ó&®T•¦üqð)ú»8±jšøR'LKŠðâ¶èu–fæRKn’CŒ}ãTâ7ÙípÁ⠑˜òӈàx†*´'Ê¥Œ;¦çUUçÚÊˑ÷øMIM ©Ñdóo…ZxÛ¡ˆNFí\±Š>]±u›ŒDkçOÄ¿'qÙºŠÞ ¦v%åT䫹ʯ¨¶íùqä›öÔ}\¸¶´÷¼ 9­CËëy›älŒ€r{ÀýUì.JVO*¶ã}ЌSÊ­pÿ÷nˆŒz ŸaÂÏg)ïl ·²(ûZöûÖñTƒ%køŠ â¦AbþüõÎôtúœ=UΛ|.%{ëÐ8ymh(Îݙ ¹ïÎ$±/Iè;e7&i'5ÒýŒDb…] 8› ‡r¸ï yoÅÿföe•—*–|Ôö¥^HúNÛk¨Ÿµ¡ðS†ÆGÀ6‹´ +¾Õš¼÷PþAT‡O}÷®ÝIí\UÞæ–£lq¥u©2”³ûS¸O6²jx×òšëòsæ«IDÇ^i{äÈ£!â:Ýðógø#1?d—D{ÊnAn>¸Ñ¬¤h5…?*#²Ûßß²înþWõ+ïé¥W‰ñ¦ž!Jñ)åûTŒM†‹ÐߞFú< BÈhրµ!}û3äúÿvZÛ©¿þÝêQÞþہ¿nE1Æ¢%™ÅHà]ˆ§/:Õ|(Ns8”q:ᜰ~åÛ«)Uô)UdA›ymèðxïDJßOÞ Ý*â§Í"ºíc²Ö +ð¿HÛûûÈþ?€¯,~;È.ÅÂK§&Y¬$%/;Ó퉮wx Ð3 q¦{` (_؃¼5Í>ÕR]—]hem;ZÄê+ãè3-ØÔàavúQóf„ ò­½ŽìûÍSÞ‹/À('ØÓ]B t@ê +xÂV̕?þ°–"g8xÌûªG¨ýÚ]šé*úôyWfõ: ­ä—yEîÎßÿÝìÑÒsÙ¤$µ$pþÝØƒLÙÅNC˜S00Î4æí=įÒQ1f5gô›mðÒÌò{RïۛÆû¨ñwóIÕ¡†´'ª µÍ¡hR¹½Øs…."ZA’ݧTèÇ`Ñ¿jŠ +hž.þ;~ÍI°5œU@¼‹^†úê÷±Òn 6Q„›ŠÀÿÚM©Û,s"MóýR/aºŽ‘\Uv…y ·þ¥,ÈÅã:œŒÂEw ŠÿV•Y”Bâ«1Y@:Ú#uVšNåÁ‰ˆnFˆ‚ eÀe©9}q2ãe¹aÛ1¹¸¸“[ќw…*1ºA X«NßS¹bY¿r†Óû¦r*hÒoG­ÕŸm3ç2¹Û²¥íî*{ø\æöG­4/ËãílÓQÀ¿º5°îTç¬Éü㱊0bDŽmT›‰«‡wÜF«Rw‚3¢Ë§æU[͉v>~zÿ?ç%B(ef‡'ds&UÏú—ö¾5a9½4@¦JöüY.NSqý' +ŽþQûÛc#›&ÄiÒƒ«b-«Œ±]`è“b<·`è1Áݐˆ²î\8ªÓ&±I$Œ¦?öXÌÁ»wܽ±;ψá–Wîÿ™Y­ôûƒ¡PLxV%<¼ý¨ñփßrÇWØ' ÏW1‹ÜüD]Áj‚&([S´Óì p¿‡Ÿj Âˋmií*†A +I^céù(÷˜!Z£NØð€ÿ·`gºV+åõ–Y@ƒRÀC ö*x± ÂÂ϶y Éy‡ë‡B‡n?VôYf7›èGc+ÍtŠ¿,q¢}*±²¥™jß\ÛÛ~vÏ\¬ªoÈ띡 UÇr¡ ü;uQ¶²‡6zV™¶Có +˜Ï­~Z],ÍôÿM«—1mëã—q¦ì“8Å÷ ˆ] Çmd +ë;¬iWEhJ(Ë×IÕõÍõ’ÿ쉷žäz6ê_r췂vyLM3k𔀐Šõøâo¥¢aŠiŠÅö1Vw‚OBe6ÂÕc§¯ØŽ×Œµ Ó®±-ÓÓÿ²ÜÃÃ[{wêãzñÛ'6½ÚÈyYHû4÷ +,f[nfÓcw“—*%¨¢Q™%+ÅC¼ȝÿ¹TÊ×ؙ£Ñ0¢o8)‡]>dûùMŸâ©ÌÐz®Ö‰¨¶ì{ùdšÛ}ï¸SŒÛqþtZÀÂwÿí€w4ëځÄÉc¢hDÃðDÎ´b\þÍ )“µ&o +W©íE”eËw܂ͻ¿z%߂rßA÷iõ›iùêÖ0ãºË;†¿‰¦7­M±íðA(gYl$}³QýâÉͦµø¹ñ“ Àë_”8Øx6BgæYÍ%$ G/¦ò0?; t†ßµ ¿Y´ dˆY§ÿL¾S¢}?FØë»g•œaC çQè*æ3ÛC8ë):°råýxï³ÄØîK\®þԨʂ®á4´ås×Z¼Œ¢Î°³Y5•7³FØ=mCš¤H¤”Ÿüs¯ýð—vF¢ÅH5_¼Òƒ…4}F(ó¨z }‹1Ò;ÓÙ»‹ÌœÇСŠpýȦæE0"¯ž@?ˆDaÌ{ü¸{Ç$‹¿A)v÷ ñÒxNGq°#°j²…—iqS…”L,.Ùª~–g +÷?—iyºm öJğýôv…gØÚ&7!ÅOjUrmŸ#>M³ˆû’Ãs¦RU¾Ï±r¦òZp^ÃKÑÏàïq>c[·/ðta‡o1 +¬µÒ+Ôí +_ǐðþ4÷üNZʘö2¤ÉÿûŒ„ !Òøù‹¦(ƒþŠÏF5F¢MŒk“ÙHƸÅza#ž¯_›õ‚×¾L&°À²aŸò…¬e þG·F&¢üreÕç'³æ&á&ÀI9=ì.¶ðtf•<¸‘VŽ’ú5#‡°°w…#Š¢µ¢ºÙvâ})júIÕ#@ƒ*»¢7Τs´o•ÙLžJL½sÒe˲1½ +¯ ^¬úŽüêÇZŒ8!ÖBœî̗õA·Ø‚'d Z,Í{Šâd„3¤·æ÷­C —ítqÆWt,¿dT?8bvVέS6-òñÔððgX0áˆÀ¬Zž$´ +¬Ï ±=ç¯Ø“¡/fÞ`¯þÏPèO iw•X¾Ke‹õ ìºGÕÕS¯NJwªJãj¿Žw3¬¦Ã›ÃNú +¥b0Ž_BüŽ]àdùՀq+'gzÓQƒ†ù´`:rÚŸlȬ2“N;ø¿TxñR¢•Vå.ӕµxŽ=­†RíFëo”¹„„]g=•Ûk€râò'üõ1=4´øï½¬œ$9;s×Zwùˆa¸£tL%rœ‡zÓۏLoÁ¹ +¼ º|Y‰TüÇNËØ®àº°§g—Ó« ¶Ú-çþ¼ÉÊå¡XE•?ø¶a»Œ,u ¥“ù9;XÁº!¬#$àÇhعæƒä–¾ŸÀ9n‰ñr”%¦sOt­á:ö¤ŸÁúcÒø¹qÄ?ÖNÀ]¶¿áØ É;w7`.’€ø‚ðkPÏ,¾×™#ò3H–ð$ñ ÉHXÝʦÉm•@E{ VùÔL¦F;Eïìõá¢÷çÿ„«ó+>!ÛÁ·rò³èüQÐÐÚÅAði‚s“1]“ÐE»½‡MÇ|Å7ól¦¥`k8Êò +”f-ùԊ +î BD-<¶ºÊ‡kšCÀPé¾u=Ô4Éý˜Ð™A¢l°gé”l„!kîmãÎG»І¡)uáWhÖ?¡9~Ä"ƒLŸ‘ËÊÍø€Žò³Š ëæØš@ðܔm3ã=u³Éz‘n«C3¿8´Uˆ“íó(qÅCbTCþo¶&´]·$­ÒlÍÊ$¿|¾«>Þe.²ùâºbÁ„±¸©a +dñ*öd÷¢ôý¢Ž8'Ò{ïÞõ…”ÝRM5{´À†µ™ä:‰Sü°†n@ÊÓOÁ)oú\¤ ÕL‰{ 4ŠbÏí¨9ë§¿î?Ý^¬õ\­þ’6Å¡o• ¤¤ß=­² >ԕþLÚ×2Å ;rþîr4M~ñ#7õkNV4ûœî°ÅØj­r³‘ù3Š+_Àõ¬à ‘xà˜!'‹ BO¬e#•ö€~¦ÓÚ8¶>ªuY/:ã@µÕhG6ÊÏu܃¹ ÓÙ@?Cí¡ÿ¾©”sâ}ҀŽ—Þål ‰Wîä§WäØ~ +.¡P6 QY?éw'ý:& ICkØëy°4¢výŒ«Ñ Ŭ²§Ð8 +Wmo2—TFíõˆ&‚r`ȀËπÀ -^UêšCû 4\u‡£ûÀbý 1#ê‹ýn°MpÔü±L(÷¯H7Ó̦çkÓPÀßÅØ`¬ ?&\¶zÁ™QÂÖÿ¯µT8<ے…_ËÓj-&9É»Ìâª*j3vFëë):µü\ç>ç{œ8›â-£œUÆ'ŸÛ&á­á&Wö`ó'CÉå)C2ʰÖþ†D2ܰ±?»\NK☦…Ÿ°è-‹Ž ÔTP¾šî‡»¢Î‘A>!ðWvgãCÈÚ}ÁQ+wÉì²íßENò¥³e¥dĜSÑ7öÉIÍ]Äԗ`ÂícjÎ:@ŇÌu©s`ƒf5&@õܦãÁÛ¥ÜÓ„ì¬æÈi`NûW!ÂÆ(ñ† +Ía :XõDTv Üj°;2»éq’îÈHéwÒÐ̓XU·Qä8Ð;ºÒ²w6gZ×Uðÿ¡&‘w­4æÞ´×/Q2hVr¹f/¹ÁŸ6YŠ©ŒÕGIH?˰ä|ˆ!ƒTÞlx)_ä)ç:RŽñ·„f‹£éÎÍoj8Wç Õ͍?DäŸy·A?¯…Çœ„qgS®ßTZ¬t 9 k$'áԟkËú¡)þސûtzå)AkåïOÅKå@K¡èMÂaj¦‹_ٗ˜ñcF‹±K<^ÂØ­ûó|öxÃÍÇgˆ§>9¤¸‹cí¨À‚`Àә-+7 RŽ¡X·éƌ̤è%КÑjS{Uܵ:’€â…ˆŒ r÷H<F;yx˜ì?ÊÉHÒó0òö+èYà!M2¯‘^ÇÄ%Fdaô“P…Ñ|ÞÝ©®4¯O¨ÈjC|ö •C¸Ô*–¢ƒã÷ê +Â[¿Pö÷Ôª’éՖzÀò“4{Ñê®SGt¡v4 u«aåûµŽØý•¤äéE ûݹïÜêNØ÷Ô §?˜ïtI}!üûàOêŸÏ‡\1a¬þac×ÌÏë?þl‡Ÿ—c¿?Ÿd ñÇóöA?\7cçH?4ïç\>nOç㏟N“|î‡óò‡·m?œø7Û%“z/Ÿ ñOçé€þ¬؟ϵ=qüë‡ÏN>¼yþÁüï@ŸÏ?Ÿòù£ùÄӀ8,þsÔŸÏø˜þmGÏ<Èóñ§óžžþ}ù¬Ÿ<|ú£ùþ1íΟ͸ùÍފ +†…= Á…}9yàƒ 1åø0>iÂ'ð듪ëNÍٓÓW%¸ã^õàØÔ™>4ÜLœXÆkú&N°'¹?Á¦Æï2yÐNxñÌ×Ü?vdóUÉë•ûÀOٙ<'¹§Ï>É×AסèLŸ<ûٓì9ãc3[ˆA÷'­O{C'òÁ;d¢qçÅ鈞¬Ÿpœ­z {íLŸ úc'| ôfOŠó†OmÿèdôŸ§J?Ҁ!üÉïœò¨¡¬˜Aù#'—òÆOãdü}2µú<“Þ‡¦¨éPéËJ¶Ä£ó‡çØi£¦ÿ€öÃ'õtÊÓ<ºAçý])æ4É §Çþù“åÁ?E!_ý³'Ç{©“ö€ßõ̞݌Ÿ§’dîA<ԄPd÷I¾»Ù¶dí´ÊÖã¼ cጟ‹¥V™D`µ§;£'±ç‚VÍu@Ç»>œµJ›‚yc'óÁ=©,o?Íx6‚{ZT|î̞˜Û²àŸRdà‡)I £àßôo)’ø~̍2›ÙwïÎA§þ’IZûÇ;{¶’Ë\&Í*“4c5€r¶`)BWÙ¤¿×°Ô´ç²Gcû•9Üh…ÖŠÄ.îðr1U + ×ó ïa~tåé‡dj$|áðÿߜ­A“É·v%E»°3Ï%¯FÇm3Ä(ÈkôQûhìqÊa0Ô€ä偬1©t§æôg)Yd$Y]7—Çþ€¸ ˆZ©ôi}ഄÏö +mWú¯d7ŸÙ,°Ä:gDrˆYÊ/}º * øÖŸµëF›ë28I˖¿Öî¬Âj–oÜA õ±Œ‡Jœa äh‹îA=…%{ɼ0ìYS­e’é@åüÞ%ý®‚±å芳ٯ_ô.£Dª”ËûbA˜B¢©¾› ƒ,Z‰ýz#Á©HôPK2݋èSô‚AGhþ‘WìKw‡dU 7éCK­šË‚„ÉÿæË‚¸ÉÅUœc>ҖgÓ2tä1¥Ö¡ÅW”Çn*xrÁê7\aÜ{„¥®ù7°m³tŸî'ÆÇöBn-¦·•“|yj)ceH9s@æÿÃB]…ðZ/«1ÝGyRðW@¿=‡úņûz)jMYWÀ+1Óc¬<(¶wwílÄ(²!R¼ƒ„ge©j }^…»Ï¸×ꀝ¸Â»×ÿa¯KÔ\ð5ýRÅG¸¾qÈÿ‹* +…›ºÎDO£”›¿¾Ë‹µu3Õ`þ?®É5­’Ëþ¶¿º´íÍ‚Bð¾…b,̨6bÇsµ²I½UT¼ˆ/£u½ËbhÝpFdÑ*h>œÔ»Úä®öni:‰ódþï—Hš+¾­™:¯ù3£…½¥ƒfwY½A®þÕ´TÌi`à™½ué +]”c·YGíŽü{ƒi¬²üé9¢‹? éj'æ_B÷ˆ^åà‹©‡5Vmà|oEª ð- ¿ËZ\ðn¿±qŸÊÏ­£`DªŒÿ³.ÝwM¥r¿}ÛéâØýuðälø8o.qŸ:ßäf–¨á–³GppßÜÙ Óæá[ÈM!ñÆ*7ò¶+AžŠ>5tÁcrõ 9ãÖP_ÔÑÔÿîhóµ‘à ¨sºÏøe}ÕaÙ)3|´h_^g¾VŸo_ú;ì7pŽ +±ƒ:MjåS0x`¹“º q@X>ŸA7ëKŸ&ªã8A3èsÑ4“|x­\ï×·¾…†Å>…„¤ èý:܅œ|­#Š +-ÑVIÊ»Ëñ٘–5¦ù×g.œè‘Moß©šQL´(¨ó.æp7íKûZ>Vcìih§ñò«?ï^ÂÚ9WXòÏáàÉÙÅÍ󄺼X닑ŸGÁœ_Àl]N¸Pª¢Q9¸¶žGCt ÈµÆÆºwOìyŸkÅɽçi +àUèõ{±œÏ$\؋YòƒWýó1B¶pœÁ3‹µæeç…Ÿþʓf‹QºNë(2Îê݉FŒ‘•‚„Ó –œ^ùðxZ) 2tî¶ÕxôQ È®ØÀ¨KM |Ê?&®¦ÏúÊJ.Ã#ºI¹ø®ô'6˜UþÀ˜zÙ½i­bÆðùóÇ\Çö(Ql4þ´,(Žy™ö +MýÝԋ%~ü½fçeƒÛèMk3âZ‡%“'5aû2²ÖðòìÜgæ:ÎØ¨FâãóyÛ …›E³l²RtpéÒ¸‚QV¸Çø[GӚv+Joj”z.Õ^ºJ1 i)Gж ò4hÑo.3íþjR¨ÈðéO¶¿>¿™amE„m|¾¦íßdö +5YåwÔÀzÍß»OÿկƽAwº¸B<,æÀíYî^•ê‚ύ¡M$³@Eƒ¾¦NPí÷Ñ|;A¸ÀP@hc÷„“9A\‘ƒŸ¿t8…¦ô¹ÑYŠó,+ý¨~öf!ÀG׃êfÒ¼f0z–’i"Éû'óЇ&y»º¨q½›:8[ÊX-ÖrPq¿µKdÍ䈍#7Î- +žQ8r9ÐAÝi]Ó¨ þ¿ÿ/oÒ_ŒÛ-Æ­M"B·Ðq¶ ¼Æ& /0ȁiç(ý—M$ºŒl90`'þŸ”`\#\a9ËàzBy9ôÛuìfH‚H&Žš©’£Õë}®G›qe\“ÄÍ `¾T|bõ5_ø˜dQ½¡lO _юå3Z¯EOž ôŽřûôgL‚d´S,ŠÜ‚/püFòódufðêW¯"V·k#» ²;³)7mKÅèOý$àwn:´îèAÝÛóŽî„ߐÎïcАwg= wL“vؽ9Öä\ݎûŽç@îåtüÓ¹Ð;—éÎ{þÈîrÁ܇gîނsuU¸T9ÏDÏJü‰‚@_±$@\µ5 »ç &¡v¦€µÂBÏ ÅÊMÙuë €wʾOî;ˆ‹´sŽépw9Â;°ÖGu‘Ý­ô ݵ¯p3ºµ$ðwY¾ã»£w•9Í;º0w~£;¾>Aݸó䨴›¶Õó¶Ò;ž¤‚âìÅ·í;¿]üüã»ñºhÎèGv9ƒ¹c¸Oöàb_â®8F©IÙ~£ÏºëaSÍÓþ”Ÿ~5/óÝv¬¼òµÞˆVÎùp0ûÉ3žp,‹üÜÑÂøUZ\è'† ŒsþÃ8wl{ĪÒôgõþߗ!±F/dmzó‚zý^⨁^Œ´”ɏSé”Gax-{çZÈÀâiÄOpEÏ(u«Ö°ðN>ÌZ–H)Dò (—Q©·Éž)È,ž1S1!Z]zöÂV¡Gö/‡_¯ÊÈuG+çßE‚w®ë_—Î*#;³`ÙId¢pm|äÙ(w× C:¥»Š‘@lvSÅaiB©³v5͐êP<û'pÞïW8ý_ Ï.ŒçXûዧpAf¯ +Á}А +¥w¥šÛ˜hËÈOHâŸB¡Æ¤䬶¶s‡mᇚp—…šlb ‰—Ëý6óÂR÷°è +>;›kg^t’F²Îé0VÅÑyˆí/£&çÿâ<‡ÜJG\3»µŒÈx²ÐƒëÅß$zíVX¤/(q¤ Ý—Xh8|²ò‚•¦¶•ÛA®›á­ÇäÒ:†ûŠ/Ö½zî-¾ ì;ñdtó|làá%ËJ ß³+Ëc¡ü¿ÐCT¿5å;Ç.2“økyÎdT0A(ÓC¢3’7¨‰Ô7|™ÔÓl϶¾=Ðcvý~4,p‘T¥ƒOgZ'ˆZ‘ÃÎL©¬–À• ©Ø¸©ÉJÚÑWù×3qSÚÚØ+Pè-ÄÚÚ [8©¢?³‡]ô†šÓ$kˌy´!‡p,ÀV :RiT.x#3§§<ã§š1Èsk{ûj?·ö”lÐ/£5Û,$ßêSƒCªvµ¦žc_þ5UAJ[ñ(+éùî.lSg aüR +7Ä1×½jŎüý©ñí¨‚+*×Þû¸8-|°*¿ÍÒúh(Ñ:=DX1—«zAâ§öœhh@.<{SR 5!ƒ=xLRýÅe•,ݠɹ“!~9՝n2v‘ƒê,–‚ßê͖¸ÈZk§1ófᅉdD…ÿ›擱4rj§ñèGßÊB–AÜ<‡Íý>þV?ÉÍÿužJÇÞácàÏb3jXíÕ,weþc‹¯/±c†¥c¸-?ñc»NŽBÇ_¿þ±Ðš}«îÕóV9cXùü¬îNMiÇs«Nk"Sê-°.æJۇ°gÌ+ÖíNê)ì$íiĦ›»ò®IÛX°Œ¡>°“‚Ú#s)ñžd”’\Ôˆ_âTˆYšÎú¨¦ ëПÐòWT…ޕº‡ÎPbOݬ܄ý´ÿ úžä»«QӇO9qõëÞâ’ËĹ¡à-a4ᰊ‡¨hƒ½O·ºF¶|Î:ܓˆPòŒþöÐ¥„.À‡Þa)~Ìa'ÜÿWæ2>ö ó—Õ0¾ô,çʓÇà.s ÅÛr–ç™ã ï—hêa¥œ50 +U‰Å,üoÚC¢—-<,±]W+Í W!‡Ï™}¬>òüõ<ä7(`#yºE‚€†$¤î´W†g+¢ƒ|YrÊíÄ ÷¾lÊ$¡T{ùzÝhÆ#C༰åÖˆxaCkz0Ž›†`)ýü_Â,j!ubÓ#تþžÅÀW‡GwfÁ .Û=‚¦SªÜìWÄ»î»àx_€Î/áS‰gçGqB&Laåó[Çî( Ô_.ÇÏ{ Ue„Ѽñ>÷ìî”aUdMюÿ?!m„*Ûí +~ëÎÅNƒR8QùP9ßMš-I½øË@ÃO!䀟PÐ'›=\µ{åÚ¥¾Fz€žºÿ¯Ã¢°¢pÞTzÆtˆûhQ£¼P…ÿôÖûå + Ý@TrÉa\g{xä"îz_€;fæÂœ·þ¡ê4d/¤ÒN:^fÈõ± …þâ;†[ ŽÍ¥ÂvûùBôe1î?+>3½?Àð$@߃N±õÞü›Œû·#SRS7{ nñÏK0¤ís\ÚRÃ_'øX‰~²Ɗ (ýû™ÔÄTúYÊý#á#7±Ûè¼0¢¨0£úòr£BžbÛѪ —¤QØ9ø7v  ®¯ïŒÌMcyc ð^™ÚæÉñUQCeÀp5$ÇDvŠÝí ѐÓ#?יLÅJ\/n¡?9üÀ*~ +·X*å` J'$¸þ«—†>S{’ÿ\»¯(´0-ÞŸòNÌsðӒìP “cH.¿YY6ùè!]àUýy™"ºoBç¿rÈþòu@ü˜lÿo6*F›E»?i~þ‚ȧŽd¸å/cÕɖzáKè±ä˜hyDZ†Îêñ‡uøíh1'•ã•gBâ'¯ö!܋1Èt¦]ˆ0ˆ&ÞÆ½÷#´þB]ý½P]qDšÔÑ ãèn +ÁŠG\N†pò¹ó¯„üÔö›Å˜X;•‹t[ٔcÎษžãñËHB‚–0v“ÒW#ªžïoóæF©ޓ!åü‚±­WòÏìËÈ<°³@xÕfO+š0ç*>ΗÊ8ƒòEíéöô©2ÈM|¶$oþÿløkTjí NkÖ¨ˆWÁÔ7Œ™¬ …~{­AŤНô^䃑my‚|C[Ly”ì“ “*…oÍ|:{LûY‘íYè/Ûè])7ɵª/í3"¡HÔþÐší³ ¹‰¹”ÞÝö`P>ߞKäyjÀ$'Î06%i¨Oo§rÍóN è7/O0w‘m1hCô/˜¥}ᾸüéÉzþŠà,Y-òÕT¶K°pú=»¤¢áŠþAÝLWt%/ߘc'ÉÚöù‰(áµÍÑ{:K™ÎÂu¹„䉡•liTÑ6£Í"mG–15Z=—8X¢<únø/SòÃØÕ4(‚aUëɤ}nâ«8Xí]wÜö¶ï¹ÍæóÜÝé^–ô7zÒކïð#{[ÝÚ}÷{[d’Ùq«ßT£žAÍÑÇsÞ( Ww{ˆƒ§y%à^mÏhÇjtÁ0ÔëØ¢×kt›Üä÷eÍiIp-¨­4ôÒO@ß¼#¦g•N¿¡«å¤fÅhá‘<Œõ]öL¤/¸¢¼eV}Ä;l< HÈÂ3]‰ãÖ`‡?93@}º® tn7€løþ†Ë÷aV¨Û?–ûŒ_Í­yÅ/i¡Žï%jÝ÷³7)ç/xVh°¿×î†ñ7Œbzõ·‚Øì*[kQ3uN-X¬¥Ë Ê«õ;ކDLÅå0 ;X¢.]sØ¢½7 +v½Â©TZPÐäA£:śO¿+ÒINÈß5xœ¶7\•1ë§¶=›èn%z…¶4®í´Ü;V̶:[š"*rVÓw\ïçÝÊ/ …±{û'r•éÅ-ÊZ;W}‹fVzVçg¥·øq‡Ô_.“šòEy˜‘ýÀûŒn‘2ÿá¯häjŸ*ÏMaÃs ;i?¶sËÕØ&P K÷՞ã#D¨¥êîR{ÙZIMÄþóljUc +q}æ¬óŸvçûXêáÎ}¨3séöÚÃìÔxÂϸ§>×F§^ZòIë»þò²JW¸^âkš^T¾‡Ëðž]†­%²ü4ÙÀ>y/`’þ2³@߃)•SúЁžz²7Ž_Ó#ÉT‘*Ñ;žÌ<ŽS[¢4q¥”üš#Ü`ú¨j@yÒ-œ*jÎ+…0ïµGd…æúÐêŽÉ éQªWÏõoK1oRQb|-Xî±þ„5Õ£%òžJٟÒù£õ匠퀥üÕy`8É=Œn:õ¼©éûƜc6€TM›œ_ÓäÕ«9æ÷½?gl6‰–ß[4OÏ©ˆÑ?¦#Dûú˜­a'ïÛ¡+ÉÐRH%êõ1­Ö¦#Õæu)D¾m=XÅ©~“«XûÌGˆÞ¢± L4ã·3¦Oê†P˜q"CV³¤c±'tŽ0#ÙÆ~çHyö}eÚ æ¹7Ê_À›Ý4]1Gç¡í§®ä•4ët¤†$$ ü”FãÝ Š£~åöà© ¾åeýÁP“œ¾Ù8cë‰Êd]4 \‚EþFѧŠÚ‹—òYcMGׁù݄gzùBmò%çÔ B„úŵér-J¬™‰Ú»p‘Aâuº ˜‚‹¤£€ëÜð‡ 1‘Æ´®×\šçÊzì…ƒ³B?/¨EÖ/w¢s<˹¿à ʕ=t&‰Ót*ÌÐ]€q{ÏÇ#9²Ö†îîøÝ­ “œá[øÔœÇ>§¯b¿=Påö;0GǨÒF#ƒ2×/¸cå !Lƒù$ž®g(z¹óS”»î+9Ç·<ܕ¾Löë‚zöøV”|ò5ÔIµ±n¿z\J•í¡™c¶­ßv•ôÊî÷µM×ÙVÑÊ ”´Ó}l@–¹µt֋ Íܳuûkm‘çëƒ08ò×¶ïä˜ôõÜg¡Êd¯jÿ˜»Ú`cÂá°ÚóçJ>v™{v=“Ã6ÚmQg“€EEþrÃUcÔQ ìÍ}q%Yyb{¼ù\é‹wmO ÷ÂébS/D:Ñd°+˜Y!4¾:0Ð÷«í…è“Zt(i¦ ý_ Q=€Å0Ùü–³ül!Ô ÌOökp!“:}´m6\Ü ]H‡[pL,ñ há(Lq”tÔeÚUã›?ð‡R hV‡D)Ý)–’"“ˆu’eàãÖhã%¾@鍟r º†ïð±¨\™ù ®8› @_£ÎOL#ØHáý'ÍXŸ£‡ +ìсðj©óˆïx$R,Ð]˜„ùÒjR)c "4àQvCH¥~¿á;.#ð¢àsùƒßæ‘sq˵?¯Ÿ8ņá´-ºžºg+™Õ/jU–jkraDbŠü•ߪú%Í$~AìȗòôëIþ_Ä E%»ßQðLÅCFäØhs‘Ù7‘æp³¾(7֜¯«¼‘·ÿFg¥×oã¢2"”"¥”‰Qçp#i·ï`÷†o•1¦3§[ȺñŸ£Ù•3òðŸü'ôøß/ T‹ƒ|@4Ëòïy êþÜt)eü¢~€NŽm߂¿¯,é©IÊ 'ˆò¡©R‚nÒ'²¡ÏÑ;ž4:ýʼ°°hi¨8ȇ/ÁӇ/¥½ì‡ÓQÆLãä ÝÙ'ÑӖsçïó+‚Xbšp +GTÀjU €®ý¤`Oó×­èM=ûÊFä`0y~nS¢šmóJ¬ž¿Ç]ç«q•ö3C½ñË螾–•Õ‚á,"žék”ÐN'™ l‚äÌ0¼œÀaâ¾+øÎ&ámŽžµhÌH)?D@—5«j#øf†µ?9Їê—+å»+$üLqmxøM™Yfčb-ìuAYŒeÖÑ%xU¬áq™ÕܵèÓ´”æ¢dš•Ìʼnž{j ¬£NñIòˆDÆ$ÿÓãÝ®aV¯"í]šb–à9 ´“Nº®6{b-ÊóÌÁ¦´"bêáç X]gÚÚõš~yÚÛǘG,½úɱ}/‰ªžI¹cï”ÞÄ"ŽVó>Ž—h9§ f&jièr/ãe›²ØèúÒqåwéCK¬5jÔt S™© ú˜Ïqݖĕ +.™=võªmlš¿lÄ 4!ÊGC’¬™»ûäj²ÿl¢ô¬;£g€3jߓž¨N\ˆð‰TXŒfIÐ +Kä ç^ ùkhdȚI÷y:ÚH2@Y€ÐdÞ]üÓ»¤†™J¨>Óav)>± æ­·MºF–†¨¶Êªwr€#; +¨>Ú²Ö:¦¢Ð3w:T¥k®“,wBhIe‡GÐë¹­g5 òñŽ4„sLÁ›nš¥ƒ('²²ÐÍҔ†ÅXć 3¾ÅÔî!òs!ÉÍbîðٖæ¬1—4X]ÛÎJñ|ûȬµmž0rû±ƒ}rú§widõO›Ë³—Ø]ÜKCÆ@ç•Y"PÍNñ‡µZz¥`ó©Ò2Šɇ£Z¯zت×¼Òu<ï—Z< D7A-ão ØA—æÕ8ehTfÇKq8¹¥Cz”76 ºÇüšÒÓÂ+9Þ¿j<ÃMåm”=Ñá ž.­Z™°»Á áD¸ &ò‡ÿü$“؈%)üË&WÙZÿÿ?w¹ýú\jYþ5m§àIÌ;’¬¥ÎØyÅd$¼ÐvÍöªŒ¡Âá…ÍlʐªÇäVDµGy:Ñv¢W~–‰Ó|4ԑ¿ZÐÒ;¾¹_ñ´­göyÍWL-rJâãÉëæS×þ¸çùþjxu?9T­C‚f̦œž\!QàTo>P÷3WÇ¿(«yò ÇÕ½öM'žzü†š»š ¡óDÚì„{ò)«¡;j{²/w,‡BîইÝÁ·éwp^¡÷pÔߋjXÓ ¯‚©L1<7ƒ5.È{4p²ò> ‚ü1@bu–­/iÝ5iØR Ùz•rÑn@¤õþavü KJ®Þ§]¸îŽ¢ƒŒæ¾ Ësã™îg/¸€SzrûKÆHµ‡l²YƒGfügíIó~íCwÜÆÝß6ªµà΂qG•­á˜]]9eÌwۊ鿀UKò ²•TQµøL½Ÿð +P: ‹ù,O\Ô·é.µè+ô»iCr¾ V_¤Gm)ísBEºø.Wò›é½J E7|N¸!]ÜãX{Ïd{EéÌ¥×J–¸<ݱƥ>Ð ý/Wsï®=ÊvEƒ@©-]¡;oǹYh6­è³  |e¶«‘n¿pދ9¹IçÄ ›,è ºÀ¹9†nÆ  #J}œÜÚ@?XP“ÄzQºtø՚8jÙþN%Žn¿a]*Z<Ý!¡ƒv³¹ì}‚—ÿÛtҋ2Íçj[F2AåN0'°¹K1J‚t“]õñEþÁæ'.(íÁš÷ÊäîôhvøéWÓˆ\ᶚdÚÚ9|´DK8»p:ë(8µ™uÙ¸WÃo[màðà7¸žü!–;d È*ËÇÍï/H—Œ‚\„ÿZϾTÜÛÑYÐÎäê賛ܕ&ôJ:{ÍWù´¥îÜôKú䊇ø¶vØâõC@Çü¥§àÉ$£~%¬ މDÝ R‡žo@ ñõ‡Ü‡ôÄHS)«Ç7Þq×íEf“Ù¾œaW*ÇzŽ|NÆ|Mßö‘ÙnÀV¯£µ4VqJy÷ÓæÎ·¥)µ(Í_g UåR¬üQMÏ+¦4x’=®›¥Oe¯Áß¡4L›+¹ª)П΃çžÝé÷•tƒLÕ¤ûÈõ¼[­ÿµ÷…‘„åö5PÓ^•î’Z•Ž“B²4êN5aÔµ>jٝÏ*e|øÎíÓdÔf<ñÛm’e±w¤‹„ å߇\AíÖà>®hÔ­GÜ!èö§I ¨Ô°9§Ÿ»`Ü×ÐÒD֎¶gŸ„bÔ®zĪÙ0”ò¤¶]2Ú;£+NŸÙ"}„/m›èÙðEM>VW6¨"-œëê’Éò±¬QR<Ã:jˀï$òŸVÒÝ)ÐÇj¦‹r§ë6ˆguóºRNá¯ièC_"B¯”q’²¿9 ç:Ù Rœ{éú ±ˆðÈù©Å¼÷“áLþ9\讹\3ªDâú¤“NþVuÚä­KØù±¬˜?°"rǂOˆ"Aœ61Ýúå3ø${*­*ð‚ôý|Ï ù¡M­„¡u2DD±ò¢[iÿýjJ×e—I b§¦^a£@¨Àý,öaßóæ hþk? +b?Ñ»îü…ÜùÅñŠmúâõ¾î+OÛҐU'–`”,¹%ÉM< +£¡±%æg˜TËé=΍Sßø{K~ŠRÄ8>aÞèÏ£†i%W¹qZ¬<7/ÜØPQig§Á>¦a•¬‰q‡£ºÐ‡ì«éâkÝeÔ"a6¢Å´ÑY0¢†Ìi +¢¿:§m{?§¿ö`ËÓÞoížý¹ ç[êp#í¡ ¾?¦ò#üÏ"1O1åÓñ^tؤN®%GE¿Ô­¸ð>öé´à¶ÝüŶݳîöeÃîë@J"å½.„ƒXOóì̼۟͂|2Xdk\¾ç€Ø~všbí³Š)< `µ*Å©~ì¯÷ÿ +,Ÿ°Ý_QxqnTìyÖ°›Âًٝ•íܒ¥ž,ºLR\ÎG>“ü•…Ý ¼©ò'¤É’é ž¿È¬*ù‰?«X»YFÆøàŸ©)S?ÉÆÓ?ÌáÂè  ÄyÁ‰¢ð–w`L ´bu,:+¬Gò Û€ݮÆ1õÝiº?Ë.‚~0ºìôÛ ',¹îäÀ¡®þ7ô6~Í¡£+Ÿ´!#Ü­!¢Çà͞í€zJ“y!ڌînô¿‚%z +KeÊr²Åã3ÔK +FðÍvç!`m ÚsÊ4擖Àô—ä'‰k¾@¶ÕV²Ò+Úuû$¶¾ÛÔϓ’„£Ç3xÔ¬jM,8vV)ê Ph3‹Å'¥N¿È"?w`‰á;ÙQZzÂ6xÍXf`¿•lэ‰Û+R7@ÔäPäq¸áôò1¶¤á3ž 2+SÝ[GtjK5¥c„µ;„T-ˆÛ9í +EÊ)•G‘ Ð-ñÁh}›†6‚}]¬(Íqz¼âÂs¸ÖqÏ6Ҏî#Ö×î>B$˜—bf€ƒq<¾tmᏬL×?Ï3+ð0‰ëûütãÝY,½g“ct4þ­€»bfœ[/ƒm•©5Dzk¶„7«Ò)û?e©óñÀSà¿B„S §¯ÿÏ»ÞÛPˆÃÌÓsR×¼©|”sx§ÔƓ7µ:¾GՒJ줩›A¤? +1˜Ý,X…¼x=µ¶š{÷‘€Þ8&琮j!C3ä x¸ã@¡þ8~Föz ö˔h¯ãŠ ÷Xñ:þr:ë˜a{ۙtÓ×IàK·ŽšuÃç83œ7ùe˂æ_ZaÃ%+1n²~P˜±Î ìŸ+- éqãqLÿ5…nË ñ¨"”çÖ1àMg¨À(ÝBÔNbgúÆ1Ø£¤,ÇÓY•ÿCpG&Ð**ô0qCxgBg +»<½Ãã=±p·øþ½^ +9Ê'Õ¢?S£ÉðÓS×mHà %ª<¼­d(zџš¿ÇϋÁ…{üyY] ÐGV +K_Çɵ„© I…"òôá^/$ÿ%•S"mi¦´ûåúÁS¯ÄtJïÚΩØZ-…yÑQ|¥QóXp¨8ցrhBäǒCæÕˆ¥û•j^£ºriHI\ñ~êHqU+âœP‰ëòÛH(‘M—’§—åþìB°â\dëãÐ7_¸˜)ƺ45Xâ±çS®^€p À ·S®åœ¬‡Ó©Ìö­N½Ú)ÇëP4 œ~X*@ݬ Zd€.ùÌiéI¤®epvrá{ƒO0@p?xT +g¼áo¤Ñóð!–úëV÷9fãӗÔ5ä Tá¯i;ÈcYœ +z–xC ]Im‰8: @±¦q=âI[”ë¢7>Ÿe'UDçÔ«% +Q¤ÄWt®0ÛèKՄ2¤1ãúóG¬ àCM3žhÓ.Hœ[t›ý +‚r)1¬›XNwÚ•?݅f„é[uövZxd;مV…õ"A;Æ!ö•„¼Ì³çE*ٌ» è5 ÷ªaϙ@šÉFÆÚgÙ<Âû¡X£YD>ôíN æ}T4k€ÝôyÐ(o +¼|‡mËÑÈtP 7é àÞ­If賁ÞÍ£‹çäÉEsç_w¾[×þÃË©T¬—9§©–•Rδ½T X'!¤¸@´èú˜ó$LžÌ´„#G°)ŽR½âJc#Bg»–ww$¨8uE‘–yÜÒ×qžL°¦øó36sNæ™ÈJvn=î6QŸXó<ÚN¸ÚKúÆÍá[}öÝK2®eåÖÃýe°¯,ðö)·ãh„{¸Gµá­¶ÀA\ 4ÆT­µ‹\¾*KqìÉ­•°V‘zª“X}‘ÿܔ+`˜RÂ÷ÀӖœBofV»?ÄPsߜ”ED$û÷˜FϓSË"¢÷»! +–6y[piwv©áFû oÎ¥ì5Õ2Ÿ!Éh†b ‚æuHèzÒQœÃ»ývÁßZÎþîIœ©§Ú¼š}©g—w­)YË»Žgzv¿ÏŒÉ­ÁNk*›aÓ Hˆµ.ý»àpAö^YÝ"‘hpú3Þ ¼4Õ˹ì;Z©Dë¸eÝF¿Ð95ŒE»Ñ,ž»A…tÔ[ÛUv<‹ìr’mNCÓb)èVVÙ7*oøÂp Ùw؛”doBÑÞ§Ò#?4ŸÏƵ8µ Em¸è>É@‰=+ ¯*¹Y㟺Dˆ¶îß!í®ŸQ ´)¹åiöWMQ{¨£;4§×”õÙ CÆ +—do5_‡ÚWá‰Wà¹_‡À@ßµÝÜ֚ë¯*¤®N¿Ð%>†€‚PWŒ–Uóù<@ӉÙiC‰”Õá»߄8UØ©Æâ¦htÀu9+ýS9ò"½?Aµ¥\€w)‡åБ'ÈZá¿Tg#W˽Óí$Ë`s¤,Öé%:÷’n¨æ]%S¶6‹ EêžÍà²[AbŽÿYnˆ§ÍpšQú°5¨Ñ.)å÷FÒ©ÍèkZ>#É&lÅ}ðnƒZ¸‡!µYôÚ¶çڝÇkWDî͸Átåõ™ a¢›«4áy ×T̗4OYê"šzü„ÛxV.WíÜ2Þh¿SG¾Ä°è%öÃübÍJ@ÛæÑ?.Æ á4ãý¼›Fw6°Òm ´'¬± $³Ç›)?ˆi;•Z°0•¯kì¢& +ZÆÓ +>#TTCA"3mqãsáàˆ¥Ä"¯±p‹Oi²â¢È‘ç8/Xz&£žîÕ¯–©«Ø#×ö=ô ûnN~wD‡ÅÏ H¬éýÌñäoJyÇñDœ– €Ê1–ÉätþÂÀ7¬@֕\í‰À®ÿ*HÏ $<—EPΝР£yÉìSZ|+˱£Ñɂ½£îSgú F¯}ö¯z-^ò¨A^üÓ]Ê9)cç„"gõŸ‚zü¹Pd(QÒ7¤T–²N©Ïj;hrW£lxEv2#‹Ç&abÛèŽþïò#cȋó•l¯r´w4S§Ðö +zy§Ú‡Wž(îvf!DV›ŸzOÈrâw‚WTŠuÙBøG+{M폞éÉ|8 +#l± 8dëåJ÷Úaë|)I‡‘ÔÏ}áôkC—Šè$åc°¨ŽWI9oò*å«9*²rY)Êr$8Èÿ2ˆr5J–ŽÝÜ㦀ãœôœ—ý]Å»’ßËf‘tû² ց 3]’<Ÿ“ Ûc•øze^¯”:!¿ã啲3&}ÿÞµ(*Ô°²døLÿÁúíUýU 3‡5µ Y!¤×+­ŸÜy;S*G¥¶Ï? «w6¢©ž¨vHP¨ÛÄ3þ½4¤@©%ȏ}þ?*Æ yþ:Ë&y°¡A¬ ¾lR¯Ùl«(x @Qj•ÝÕé¢OÊÙÁGËY³‡q€ÖÇ·_½nÊËE¹h÷}þ~P*1ó=NZzÍgáæ*ҋíÄæ"µZÕêŠp9ƒ3L˜.îô¯wÔ{$ëò1Á,Ý`´™¥{S=ˆ¥£‚-/MړւèËÐÚ9èq7BôS€Ê‹‚Ý5OJ8ï*†ÊŸ‹Ç!Ñ£%:33i y a:ýñáè,ÈÆk\(;·Kþ.t^vî¹ÕXšôô|»Wmµ']ڑTjÇ̗2ƒ·4—Í §Bi2¯ü¤ k£ö­Æ‹•u`º^íÿ¨£éþ¢(ý×Áü"›íÿÆ(ýoÿ8£úї1Gö½Þ¤Qó?«÷ÅŸ3«qŒ ?ñŠ=—'ÿ±GÎòm¢æòbEUÉ(£¼‘{ëš(ÕÑ¥Tß@øÊ[ù„ë¼5]º‘_„ytÕH;Ăׅ RàdãzPÎþ®]´3«ÇÊQí;}›Æ·Ù«¾ÏÆ^H;gÊOܵ„´â'ÒRÃÞýïŸSÊAµ­b¾ål³Ë {oÔùë>è$ß@);†Œ…qÔvT:Ö4Úº=¹4U9՛Ó÷Tïwðg±NüC§ÍA%Ÿff.ƒðÐë‘G~3rSÏ,‰-Mžì }Å玥ÄqÍ;ÓÉq¨¦{ÐQ¯wèú©uu\›}Wü£ú÷‡ôG÷»á«ßJ,yw1ýÎçncûËêG÷²ÎÝGôºâD8Jü?¥Xþߺqýöý®¤s|/ßÚOŠ,|x‘ýÔç?ƾUŠœ>9£Ý’ÚP)ÝUô_ì9 ŒDɾVͲÿ]»³Ï†ƒôˆë^bGY^ xy\{hãÙñâGkÇ[ä5£è»™Ï»ç»^.¬BÛ3SÈǾ¹õ¬‹[Ñy*3<“h®és §Uÿã §ÿ³wþžýÿܬïüȑުqÑH#¯¸ÿ‚u‹ü€*Pck*Nõ›/¬Ø[ð¾?ât7î¿Ø³èý«ùJÃ=ÑX×fEbÖ4åj•‹ZBáukq8|• +ZD»³>±é|gÍñWû¹Ðý_Ú©coASoÌÌ7M~ݳæË㝉³Ÿ šýöh9_é!j•ÕÜÕáó«s«»|¼"n^ªâ˜Çs‚…-¿ºÃFöësrXRƒR»Š%ðû9¨ ½÷†$^ÿÍÄÁâ§:—MJï’1JÈZÅb§çÓôŠËæA+͊|‹u ég`ÿ'nVÈ­_É¥5ÜI%4m<Ñ´óZ.š›–v8÷„¦ò—Øãô”VnrE)ÌD²SšÓ¨³ÍçaÖUJT'Nºý"•û(•ûE9Ƚ𦬦6õRÕ”"DÞ±‡"²—*”®#¬†ltÿށ ýB´‡0¹)€ÆÓ\’cûFhç+.rÉLå¯)Lâ%R™ÞªV¯ãY§·6<ý\ì†æä›ñ-Ü.ï‡UW”úÃ2¹C2´íÊÒ˜æø‰¡Ëù¼%sé͑;®½Üfƒ¶žè@‚5Rê̳B¾•¹Ío¤øeÃúÃpùCpôggÿ­B^]ßÍ·“ñÞR›ÕÜ?iåқÖÜiþlíåҜ3­ÎÖç ës›ÔÅò+iòÉ^MÇï;Ô³p‰^î×vn`ÿ:]ëÄ@²@ ù8j©·tW<î´¹pË44ôÂ^éÛæ†ŸÕÓÎÉ%;Ü&”é¸\é¸\îRùțáLÙ^¶Ëf†ŸóÿwH·Ô+ë¤ã’“ûRPÍ«¯Q•ÿtCËÞ ÆäÍÆä’™ÑEŠQÃîŠåš¯nYڏ⒘]†¹ÎÔ| hZìR|‹¿ ++5Y÷ȯ[ý‹’½o‘K¹’]o"ù›²™Ø^ª¥ê%©ï8˜®§¬Xê«X+êòÉKkn5üŠû¢Rš¸š>¬Vþ¥ê ZЁ¸íƒ]Ê`%ð¾X«ŒÝžõqsl·sB,Ïg4g³š3ÙÍjÕåjÈ÷pW³Ë>ä¹d¯F‹ýë[Gßò‘ìžßröê¦_T°G‰°Í'Ýó“qðWæÍ·ÌrÁÙÍÁ,•Ê_áÈF%!>ÃéDå0XýKÂRæq9s8˜, k¦#ҘËSÈ¥1”<Ñ«¦îéMå§ &ñ)µ×¤¡°ðj“.éOb0)O.¾%o5OQ2ú§gï¦vyç²X̪YåÕ¸+üÎ@R+­v]ýs¿CB×Xß5¾i†ÿ:ȍÄü_¢’s'›Èþ?³Ñ¡ë“¾,¬{›O±î=ŒOaÓw2¼-Ç'¾U’áçû ïöÚíù›?Eóöy‹t¹6¸L9ù0i¦E*`+„ª§kÕ_¸övбà;ÁvHQ²ý†qÒ1‡<(\s~õ«ÒJœß½² Àx–Ü(Ãü Æo®-a~æ‚c~›÷΍ü(é}*3bʖ`Oa·ó~‚+§`ž4’ ”¶QŸ4ß½uÙ$°¦ý~ÿ<ÆFýñ ûê]‚`¾ÇrnfoЮ@ÿ¨ß¸ijіhÏGù äÄÍNÚªîm¿˜ß»ô`R3ÍF$½ã‘Ü*3?Ï4‰W÷VŒ +K|ã~î ûíö<΃+'ûMÂþ9.É,Y`‚v®Ã礋$^9)ókUÃw¶îRÓ­“)­¾9 ø»…¸îVÁ‰´ùŠFŸ°º|á{LþâËÀÿ‡V%¯rŒYîî°»Û>?:i#„ý;KUŽßmѦ»†¾ð±q×C‡ƒ Y6ªP'¹F74„nV~ÚÆÅŸ¶eì Ûéé"bº*¯\ý_O2ð˜x)aöë.ü\èÕÈ£¯ø`ÇGo™ll\û„0mÿ{b@ÒS i=¾ÿ&´óàÁVñëܯ­_љÃݾ¯´F¿¹ô.$ºãèÀóÇí-™Ãê¹o؟Fþ“wÎÿÓ1Säö‹†Fý¸˜‹{Ÿoÿ÷e¯ÕÛr±393H¢‹ZÝlGáćq޲yÍ2\<¸ŸqƄž.Ù¤ÜäÉǎ.Úü\L~U\ ¸¹p£ƒMSôÆå]êË{>wü²àìÉo«ó&_hH[™(<ÿ×.߯.ܒ0@­U|„êK™ŸWÚ!s¯þ¸”Üâº;ü7žñý\G§^ßðà9²Áø¿¼‰™Z²Ðçbbûûaÿ…9Ô.XŸal¸e¿»)Å—&cêà3gRXi;ÅÁ`+lp_îÌ©6ëÕ¼¶\8•W=?ºY|rUÁ¸n®ÛžÝeï÷©‰‚¦\QN{¤`ÐãÒÁb>ë/¸Ùޞg¦¿Ng °ó‹‹æ ]Æ ƒªÈ®é—¼F+Ùqrâъ¾C½%ýs·æ*ã|fk"`/ÛÿÿøœýÁÌÐß{bª>,¡ {îêÒr¿É$“Ò’DHžÅ¢X҃ä +Y@g€„ÿèzIAµD Àòª¢0"¡`4“Ç‹h¼Ínc¥\qµKU\U m+" +ƒEPH6ÅjY,j‘L¸'¿}û÷ïïÿ½þzzH•\+Îne¼ÝÞsy+ÐÞgGyÍޞôw›¼Î–ãÓÞsy»ÞΆüoC~wàz™ÕÜø õ;×ÚÉ%²Û}0¡Gïû6¨ÍŽþrj§~=ÛM[Yá§FNG}ÇO;•¬í}›¯øó +¹¶]îØ²g†Ø¼{4ovÆÍеò"Çgh¸£däãÄñŸó¦ç¸z®ñöÌAAû›2ÍE’É;ùjŽüÙÀÒ@.ËÁÙ6“ç§K5;‰J_Ëû,˜éܟÅiä˜MòA@¸ËÄ®/åî5/»ÒW&4[ÜЫ»<Ë4ï'nÂs¿S7éÈý\²ò¨ôzÛÁNy½; +ŠM„ÍØs0ô‡ yÁ=eu¾ɒ¨3ðU1Oñìш¼`$V6‘yó6§0è{oфlmàf.ޒ1Þų€vÁb‰ú'T‡ZŒvÇT„Jþ%ôHÄ ÇU^eãz-eB·ÞeÔ£yÓÿzŒwHÇñ£eïя …f´ŒoÍ &j eè9‰–÷ŒÙ¦®„ 2mèÍÆþÕ¡jŒ™¤ÌzkLáÕ̵5/ÓãdÅx‡kS#a ØÿÂF;c» ”Õâ¢P[Ê|JÓâÕ3tÀqoþÚ¦v°TàÃóªsjuEÓTî˜OùµJ=ÎJœxÓUGû¿½ë½ªË ¸Tö…ž9©X`¬ªƒŸUԆ1Ù#‡”j¤æî ž¤ O²§= +“¡Ðq•'Gža,ú0•,r“Ô™%gá¥#Ùùû„;>•Z¾záG)©ZC?æ0—oØG×Ïí +\ÙÒUR2¿Y‘Ø•møµmò&³”]ÑÝøêÜÃg«XØUdñQÀÛLqýIÆ §=ë°Úk¯¾A ½eÍ\ܔiÓ1§N RÁ&Í´ðjë†Á²=>ÜC +uKë®TëË:uäÁ-~¸æ"Zt—¥3âåKr§&ÖR‹ˆ:¼0ÔéÂ¥:-çXé?íЀeWމмt_ú«ÇðjËÔ^jËO(×÷ª˜­ýî~xÕN:•Nÿµß…X¦íN¹ÿêzbV?‰Xþ%cø•ÿʱú©¾Ã¬kq¿^Ôi°¨Ë1aV? ‚”ÊJ};†­¿XUÁOÑlïßÎß6Ç ý[áÊÃS튫ÚÝr/zÆ+ªƒþ!kÖiNÞÙçøÔ"SXÿâ ºû /бþfӝþ3õ@·,Ìa!lˀU­ +Ö¨ùq ¶~]lYzmŸA€®QpùB¡’1§C¦:ÎáéžéÖ{ƒ2Ö4«=á@Ê.•â1Í1èQˆ +… Z´bêWÞ£š1Ý#d+YÇ"Xэš1µ¯ýôbՈY`8V^àц»“1§CãšÖèycF®=äÀâpä@À‰Ñш›o˜Œwfµ»SrýøÐ‰çF•­ÒÞ(…l«ÛÀÝ8¶q¹5âG#AÏnÜpÜxæŸç8U‡íàxìu]'#õUíàa(ÉLé«ÇoJ†¤T'®4±or|Z³à ÏNðˆ'"o–ä8݊ƒ;yqP`Þ8Ӗ÷+׬΍ Ԟ;wŽô PÂP‡É'µJEkJyET¡8P›H'},"É(³…šœ6ð>žw¡èóù׎<7캿¾¥Ü$åƒÕ +wFÉ9í¿%J8iÌS$ý=³Ÿæ‚w×ýÖ3xáO_v)ÊÍNMžQùLYJó8ô®šFUÂVRœ¥QRoˇ=/Òp\ s +SÊ …¤:² œ¦rQ|úÐSÄ® Ë{'÷“ßÈNdº›©§»o/*{,èޝ íàxޅ%ñs*ɿʧ+њ³S«ÏIp¢°O÷ÚT%góºn~ˆ“¾æ +"cï¬ôî(u\dó¹’yÚÂYp†£Oþ©Çkš¥D¬’s‹ûÇʆ.yǁOWôa(†^N†—ªêE9z%•Í +€ú¤jŽ”æeë)Bîàžµ¥Ÿõ&žº–TÆ¥¶ÂdÒÁt✉ԣhõ'2GµF²y:1N/SœW¬VíAÆû¤Wõp|ÚÚÌT3®Ië•N¤zÇõkˆW‚"Yµ¾²=­ËE)éi% “‚…k~ð§ÿ®†Lam©eÁgY°Q°T0 ¶T‹Yj¥Dµ*™ý-ËD©²Ó% °¥ª™¿ŠýzW’sÅáÄR¤¾Ë¯ 9ììtJ”{.zµ}r*k瘂¢e’P ܑÝÒuK¢•§b +”7Ö¦ 4žmàÍr54ACs¼†r5Å÷XÚ~ÊyÏS±-¼NEÏü94?áÒõ팹xIJ“Èà¶Þ‹-­F?Ç+{aFh\÷{ì—.Œs(Ä=õvµ†]É¹‚à<} Q˜h Ê)ôb 7•5yoÖÉ\$õFW9ƒSÂïßF;ôcԒ—§ÊšqÁl·zW—-æWíšqü£W—éjIÄ{fÉ¥(™s§ñ·5_Äézât½q9ÝÒõâ Á9Ø)žsHám‹-a _ž–ëKÅAŸ +xùêE‹ZiàÏAÓҀ þ½ƒóuêL£­+• íHŽAënì£|ç7rd^µŽ˜‚Ž-u#„¯¦¹ilâGϱP_Ÿ‰ÓÄéâqñâqñâqñâqñÿgÔ¢°ÞÕM½Þתj’ÿMx„ý=TÖwÀâ/7½ÂªšÎðž=TÜC|ÅT[ñ’@¢PÕUUÔà³U7ã Ôÿ…TÐh¾àá8±Øâ9°"=Ú1ïQˆð¬xqáàÕAߨöӁ(Fðю>AÚ1ß#ÐøòïM xÀÜǼF>’1âVPMn` k;´c,Ô»2Ð[˜1åϳ1Ì·¸F?tÒ²[¼2òk>ÌÄ/ž~MHӹɮ€Òø•SbUM‰U7þ5Sgn6驊9¸(¬Q:1$‰^¼uÒ(þ>Í/t†é ?g³U††âÒB ÏKt‡&rªsÑ ƒF3zr®®PÜkz†ã÷Hr¿e¼X¤<:ÂwÊ«LûZgâUi‰U¦%V˜•ZbUi‰U¦'fãÿžU¿q#ñUi .Pø M°‡²'†êV²Àùüc½F V×F4&>-òç҆ø>'À3/ËJ‹F4'ҀӣÔcüUä:O¼üCªúød +OÅsð`>.ûðaÙÒöÇVWÅ1ñ§»F< UuF=J1Ó£1Æðòÿý:1Õ£ñÖîIÀ fÙøÃRoïNjMýìюµ÷èÇÒ5‡ñ‹SK8>×öè³ ŸÙÈݪ1F%V•XûU„•ƒ‡­ÏiR¨Ý?‹¦!-§¥Kb°ºa°Ì¥Q¢8ãû’Žznúa©pޏ£5m³Ó‚–oT¥™õtÀ ¥št©jž—õj®ÝœŸþ<ë*[ƒR‡iBÉÜ©n_aR!O¦/·Í½/ÿ Ð2¦ß5)«¤¾þuœŽÂ¥ýk9è¨z¬ÏÙ甥å°S“Êg'›{|£ö(ANhðéç©Qø8QRôڕpSþ‡Î¥þ*"S[è1ö<ú£1ëùúœétÂ{ +>†§;7F + ?Œé°}w£Õ†ƒ¸Õ”¥¸¹nß[6ˆ +sÇû9¯±Ïÿó¥ø)CÂÓ~ö“¼-<áô­a›å:^‡N +mÑVžêéUU%púS°Ñ‡ +—hYé?C&˒]&ނò4 §Ž/I:¥.û“ š:áÕΧUøyôÇPêëRÇÒ7ýªÖT*®8û2OwE՞8Ù*6T4_ä(AŚ5¶ð(¼V<*5i÷tjÊ‚˜ÁQ¸mÿ]Pc‚œ-ʍlÑ»iãC +tYañÇÆú×$¤§w=vDÇ©¼‘T;ùÞ!+ᒈ;S2±¦4ˆÒJYüœT¯j¢F;3Ïí,ܹ³ÒJºrfùË—|7-©¾rFËäç}6&l;ñ¸mÊ3•8ŸÊ·7–'¯Íñ¸¹°×& U³ÃpðÏ(¯ûÎäíâê5¾§K¢íòz«÷óê/ýç3ö¡žL\3É«†yAq[üOÑ?DýôOÑ?Dýð ú}~û_Ç6n² kÕprÐÍè˜W€è +þ–×óúÚÏÃݼîyŽWG±Ž’u±ÇÈNbÚ­ÀåšÞ]ÿ©…Ë`=wÿ-óÿĎö#Ò ÈcMûŽÎ|æƒýå;|[ûŕ¾}1­n@õÏjcöº×#ó²äY[‚?p@ƒ«Sÿñŕ¸9à2۟ÿÇVò‡ mïWQ.&}7i^&Þù{”~ô½JQnù m76õëÚ †«(ø÷/ðŒzõ‰ÇÌì;¸v6ö2!Pғ@d²”ÐäáåGc,ô_nĤ®YQtàW¦ »…«yÌY•ôyþ°êæHÃIÁ°ó7[íיa`N •s ¤…7·ó@²¯aí5àÐWúþ¿»îÙYmöö#•¢Z•E èàÈ=‡ 1o+ —ež#„69S, ÒÇØMœƒçѦºæ/ BŽ9h2:?‡A,º²¨œé¹²eô%•²/ÕH̬“WZ ‘?¥~“9VÓ u:·™—2›p¯Á 3@—Á±Íš–­åé©æÚ«ð2ó0t}‚MV7{Y 0hÃî\odQß«M½Ç¢-š½+Çð䚽>žŽÀ&~ÃF±.Zô;ª&]Qvª™vD²ÎJ6mUbÕêÉÁªoO‡º)Éñ–¾ ÎoR{ښ¬ÄL¬=&ù8(ÓÌ4ÂJëõîõë| g<ëL—íæõP­f-‡íÇA}:K™†˜=uÌ[D\¬Œ®z§?IH{ptf.’e¬yiNÄ/93fPÃ-é~Ǒ£'ðéz_è˜Ê§LŒG›,4ªF¦¤cöÜdG3¥ûJZ`‰‘£ÈÝÎýjHÿL¼•ý!èø,RhÜnê묵w:YwØl7gß_(»gcaÓÕG÷ÿï¤}¿u3Ý^[ºÒðüúÈT7Éyš æïwŽ»Þñ>_Aô·P42–’‹p<éKچÿ{ÁÊáæ?i.´ÎJü²ÄäUǼÂH~á~?)ò.ñœ<ªïýK,L füK,NGYbaÄ!2ºãÿøõÄñ“äÌÌy$ù§Çg&[yìäÖä ñùE˜òÍ?¿Åm-¹@+‚VÁj¿ÀµV ™]V(-zèÈȉ §ÙNÖùöÙJ5ôôOjøŠy· E£˜Â$GG;-0EËçÉ,·éŠ#ˆ#ñC½G„ª‘¶uašuá²6å+Ø WÔwî«vpEÓ…'oò>>*ü§€ïض3¦œ¡!üd·šþŠ,jL¤wÿˆm}fŒ=™WÕ+_ ‰©IO‘{2,’“é.ހÅ(е;IøÁg1üð8t5þô¤V8HñH• ҟ|×ÕD[ÇV¦ÁU•Jêd#:nƒ¾Ïäß4PÌÉú’'nQ=$EAÞHÄòBƒbNÞÀ-Ïø{¤yµqz¤ÁN9åq–r$<'C ¾mò$9A&󘀣a}º´óHõM¡XFy‡¥÷Í.€ºÕP\‚3«MÐcnŁ™u¨ÚSãÞÏŸüjälÈG<ÚÓ«ÏP"~uÜgä]ϧMç£ü•ìûS°µF—ñNÄ9|ó͘|ɐ~¨œ'ÍH ²I9õ „—¯·bJyƗRbÄoR¯p–S°·*OäÅJg2>ü€ËX•ObAfv·p ©‚ Ä +§+#,»ûòækåv‚€{ëÕìä’E“wø¥F‰„"÷Ù_rXZèrÏC:°]è¯ÆNc8Yt參”¾§(ÑRdKµuN‘Šc}ê&Ê¡äÍ®HÙN•ñ§ÀTä/ ¿ÅÀ·”=h^E8r3¶ Ç€à‚£‡ÐŽ`±¿ÊÚú]Ò? eqºÙÀÜXÛ©ûlXPÌ;„zÃôi#|6.íݧ|{ôûÆG1ÅnÐã³)+ºý€pjÙ+»K‚¨q&g9¥ßu‹> +ï»1[‡oêÈ ¿à°c>ñß(=ö2‘evßÂöÇjoÀS$@^¯Á*`kBv²ÈÕ{…›(ûÂì4<Âý—@–ŒŠ>G3 +»6ƒbpxú,@‚%ðÔ~ÏRÖX×lÏ©¿>˜ ³µ¦k,/¶?(¤™rª!þ«ÇØ 3,;]°Äw4Bc`0ëxÑ6ƒ@°,âfj{=3V€%ú–æ8¸D ‡ƒV!ÆF_òq˜^‚WƒxûjõÖÇ6³×[ë[}; +Ü5z6äà4Q¨ø€`–á|ÎSpõÎÖ£’v6²"¹lŸH½Ôm*? +\•Ó)F—N¢2¾6Ô½­%µýû¯ÀyÚ½“wµ’B%@ÛúãíÍ‡öõ¼aÞØ¯½ØCð³ öîßÔžم¡mЍ’Õ(ç€Z¯óHÑ5ªøé‹R¾FTý|L6tçfO¢báä?;w¡i+ÂÃÒâk­Bü=šÃSïѪš# Éí_¤§öþáê)e|iPäû‘Éþ$0£%|nMìêÉÔ¹Ž™{㞺ÊéÏâ¦ù‚ÉKáˆý՘ +É-“×>v‡*nžIöÒ$ã´iù‡¯„PI=°®¼*Û0zþ¬½G´ýç +§ÀŽ™õñvØ`ŒxVƒ®ÓPn/äÔs¡Fl°º%Te~WÆ¿ƒŽ2ë¨í‚ÉB!Êí¯J.ËÀüÜÿËÜїºƒæ¿Ü»jÍýdÃïä(˜}üU¿‡ÿbHËg‹n±‘](‘">~ãÛñ§æ”z¼è8£A¼3¯X>ÅU^À?úŠõŸý‘ªhkØÓ2½3–?ÿþº,׫ý!ÒûŽsŠÅüügЙšÌb3Yœ%Våó8\?c¤˜æ§)‹¡¥óu,vÿqÉ [ÒbˇчÿÒ³ýÿ v-{M|¶½¶½¾¾c^ã_˜´òƎb²ž‹ ¾YQ¬·×÷|̯ä¢ËP÷}«òø½OeÝHNxœšÜã“ý\±øËî79ÉÿŠòǬ}!‡~º/÷V·äþJÖíù?‘ycó­JÒ5äV·ï̇×+® çòôܕ륊M+¥¹Õ¯9}*Ûó—ß‚µ¿Í9œ?ÿý+ËU¸Þök.ÿšåLŽ˜”%ö ˸´´È4!S݅Q5¤L'm&wKra_Õ½¥ý¥ÈɬœÍ\›3]âŒæø­õ]ZNÍèˆi=؎§e·Ú_¢2YûÌBØÅStù’ЛÇÔFmu£gS6”Ë0lûL3Bßꅛ=0!“Ò1»‹Báw¬Š3r€±ÔR†@ÄÛ°xcRs†,£e=@W2˜9DÞÞçhÔ6Ì`‘ž—Š¦”  ž Èèžz}œ™Çž ÒñBñ[ùf|ňïHÄÏ$Ál\€ßn“U[Éu6æ7ڂʘg¤Õn€‚†D«î `>äùhØ) ÊÛz_½ˆ^E½Y ÈÂ¸à˜¯Ð½bû¢&(A#RÂ6ðp†4ý#Â^iJŒ´U¨å¤E~F°W„m<_—\®ÌîЋAoïµ2´‚!±"ªg¾a§mªŒx oÁvI™ԈUA‚U;÷GÆNGnüèNZ4¤ÿïÑHY`À¸“Å<u:耺ÑO… +«¸2½Ù˜«!3þòà—Ô8QYËýíŠT)͉6ä:ðb„гÌ*셇Ñõ/Œ[º}E•N5wØ/>øVG 45IeÁhF¤8=$ÊùCyˆ sám›;›åÈÙ®»²—)4§½š5ÞcM!°šùË㌗/õdŒ6›²¿\Žwµãù?FHöß oã÷¦< Øó²ú‡©¾Ìl¾ :²—ÂÑlûa܃- Ž´»úŸÀ’Ö´ Vþ%­a”˜Id¹²3U¯È:ðJê~šmÚè]+@µŸp¼Û„sNarP¯H´R ò“N"Bõ+ù:2àÔZoȒ5¹ø$y/•"³/ÛȨ™XÂâëÛ` 7Ïä@[íDp í؞V¬Ä¬¶XsŸCq"<‘ð|i‘1- Ó:@øÇö%f,؋Ž"•"žLжzŠt’?Šp"”S—Î È i¦YؗõZ1[µQnÖ¹eòó.Iõ}¥— RYÕNÆNx¢.ÓÃ5ÿèòôÀ“É£„òblŒüBM³ïÞÑ´ëà¶J Ëâo[#jHÎC|f…·Q ށ¤)…N×E(þ#QáöìKDO]Q¢>ú·$¿—´”þZ´°¸Ü›:˜wÍG&ÍÍZl=åHgJ¬·u-ŠV[UïU[b۔V‰V)ÇQ+#RY:²/x%}!äŽtr˜»0´:³¹ ¬îa’‘Û 7ë/ÚG•ÚQÈm¯Ð3èëdùXጠó)¸ëA¾•¯èf¬Ì·^°,¾·4#ˆ¢_v%›Q¶º žÌ Þ²GàRÀØ·Ó³~£>“ ÔÂR¤oÄ\Èy잴z&.$ÕF–O„¦N–'ç&‘,J™3°Ù1l›dßö‘̸•y^Ðá¾^Óîb§÷¤­:¨¸gè«»ÂxO̒&vÓÂUU§Z5ضèÛÅiœX¸Ÿ~Õ  +íèÌù\-p?«¥Ópy§v[ „TSÇÖ³£º^[–Õ‘è­v®!Ã1-ê[z‰0³¤1¡{>‘)—}4ëÀÒÛ_¥|Yæ ñ@. lƒ¯” º+Ö0œib¾<VL]nj*Âz)ºPlâÞ§4ˆMºÓ{Ð*#Ä&Ï_ïýºõ’Žï!GüìV;¥&üz‡{˜Óà[æaezd)ÌÕÞQz0àÀeôØÕ©ò«á¶ )ßm]VÅd&cdj1.àlÆÆp£)­‚衟†Åm+cd¦cpq¶n\ÊomÛéÆŽÀî?-¹ ·Ç+ÕÚÆ!Шð ‘üD³ººékmŒ!øÒ¾;éÆ0w|CO<ø<óŒðyÆ÷ àKu'C‘Ê!tZ5c,¿ Sòò~®Øè +Õ÷/Š¢8ßÃûD~°¥,u}ÙϲÙe ÑYŽí–›r,#¶÷«øT NÊæXé÷ĎàžÍ¸ØN°#†ù#†öl5X՚âÚ Î£•€“Y·@ÕfØ»âŠ?Š|¢lpÜX8î"¥£Iïaßd£”ï B_ŽhKðþñÐM _õ§xô;&½U}ùÿú¤ð¡ÿT÷ÚfŸµŸ®2,û§ÿùR°¿ý4­ïRo‰ü2_+#‚öÿ-Ïó÷†áέðüü¯£èr_Ó.~çïó®~ðø]ðȖ_e¢§™±ê÷ÙÜýûîs\Û#âr´É\ÖG ËýŽº‹Y§þYû²wðÚ.Â[Õeÿ¹ûÄ뭙è'«Ó×yZï8×¾Æß¹˜î\w3=ÌçsûG ¾DהCÅ>)gy«œë6ú9ïäï|M=;Öìµ¶òž&inqš½áÛë:Œ/+œÍßLºËNE.pñ?»‡ošù8vô™ŸîëÿÓ÷Ñ.PÿL¿#‡nQ:ß(^{u¾Sá%¤v…Ô°W4WRÑÅáہÀ×tDYõÝÁ÷õŽ@ĝ²ó?ëáÛÜV[‚áJ…æ s.î‰hF·m˜FR5ΞÙ 0"¦£Ö>‡ÛèY¬luãÄ+jºàg†o§èD‚tK†o¹¹á›ÎBᛅJü¸QޑßX>o ç.‡Öp¾xËâË炘“]áüØÎo¥ˆ6!îèjÜ»Ñ~_Ík—;îÃèÜpà€~í²÷A¿Dêæ´;¬%®h +`ýrYª,Íjþ©ŸÆ"-^0ìGw®&¾?.d&ü‚W¿wp+¾|VŸ’¬xJãê÷ÐOa¢ ÃÖo’%všÎßi…£ñĜ·Ã²ƒ4Ûá!ª´ÄÿÆî§}áîيtŒÅ0㷌S::QOýŠeǚ«n¶(§G{È¿1Å£ýQL Å1^ÒÍÄS'ǐâÞ>û$ ãþ¹põŒ +íÝ콈´k{êHíÞó£sËY‡N$Ìh¦2¡_ʙQ¤˜¸}yX(0]Ï¿OB»íi’ »•ÑsYêJ¬CÇÞè»»-èÞÇ*`„ËrÀõ°äÐF{œG9êM¨Ú¿*®=·ì(/oÖ“×}\J÷Ó^–eϐ²³¯¤ªæž?« ãڎ”â,u§¤õ Žçb(ÞZˆyŽÐIxBÖw·¨UšÅ@^”-ˆy‘•tû¤XBj3ºï½ªø½­cÌ&~ª¹ ™©ùb×ÙYˆS©uWQ~tçHµDu_—Ú7IËuVÛæZ9 ӃâÑ&äÙA½8ˆl…œäwìÀ±w¿y¾sÁÑøj +²î„…~³`ŒyˑxÅ2) Io´«µ]ö ­È_H{hç5 ;¥bb›>ÈãîM6H,•Õ÷ewÕ{êÎîŒÒùà0]àeÎþî_@;Åu«9o2 eKlÂóF +¦lª†âÔêOªH3ˆ+› +H 8=zY%ã6”]–Ò¢>‚i¯—O}vKç.ä æ’I]+÷,òiݾɑr/Ë9m+ªÍ'€Î<" i"]2ôE±íŒ`fÜÜ;n,™Ë‚Šk^>ŽÍχVՉÚP-qƒRx!Í`±óâ(âe´ûJŒ^*¸jwíö۟¢è\Áï\ÝۚúojÚ/ÁŠkd¾â›Î ³Ä2c÷\ ÆÃ™x¸ßõaqºUÿRáúay~xyuǏ±Ö®Ì›¸Kª]Ü;S á€ÿtOeù†ù·âœñ—·-[žRˆ/Q|v:¤‰qÌ)r.‹aËÒ÷1¬s4e¨!?‰/zbWVøï&©]”ÿ5üö()b±[…À({¦åauuÍ(_«ª²c}Ïlì½X·t«!„îk«±í¿X„ö€z]É5tœ•µ–BÆ4."Ö1¿æŠeïDüÆm¨ï4}°>å¢4wi<7ûÞɤ°)ŒJ#‚-‰DŸºüö-z,‚7@UãEw‹iï^ô1ëV%ß *;«\\ŸVy‚<l%°½¹;~àÞÓgžK‰™ž'C]_Jæ]jb…Ý|ùßL:ÍèÌ + »A¶´Ýý¨ ³À ËÍk—F‘6ŸˆO‹÷|ÈڛußwÅ×_Y䦹Ù^Óô n;51+ÚW¬Ìtp\wq4Y¾Ï§cfFÔ4}:ÒiÓA"€«giQQ y/š—œÕÙID(¸oaàCŠ::©«cÕÕWðÜ]=÷ g²`Ê1ϩэÙï¬\ˆ.YÁcW‚… ‚ñ¤,[e˪új.b¹Ë73Òýü8c6—ñ:CIbš'ÈoÜH?Ñ×ü蔯@¤’ '¾“Ð é9á3Ï^‡³ÿ±hò&È÷ÚØÔðÿȦ8É èi§=.Æ4Ksš·m–Åy9ºÜî/ƒóuF ‘!r]ð"µ‡Årú|°oµ²2äxX—w.ç]°§8I@ƒàu¸1¾wB jÑÏ֙#'ŠÂú.ëZmã +ᨠæ–)róqôK|~Yu^ö"uŠÀëIúj¥¶ßDൔz =ñ¿O.7jÒQÿf¢ÄëÙ) ÍÅëT+ÿ'Zµû5ÖZ \¿œj\òÅ¿Y”u{‹Á¢ öZ.êåi^fÍYIPŽO¡ìÓvÎA¸0#ò½ž ðeõq'¥-´=Ç|Ñࡸ4À ÇìF«Å³¨&õͰ¦Ù0Aæl“u +|â¸Ê]¿DÚMˆð(ðç)b›Àíp‹úÃ!…D¢ûÜ2ҊiUê ÿÙߥÖ)³¿?¬S¸Ž«¯‚¨ûw±›,n gN éû…ᇾóêPCYؙ~‰`àѬ´ gßX'«QÅuçm .̫Ƃ«â†¯ÞÎ;Z÷[?éÐ:É?ý£§ó­D}×üi¼‚YžkЫßQk”µ‰—S„TxES³Ïe̹ùAcã5vÍ× XÐ{>V<©Ð$!6ÐîsAÆ^üÕæ8N¨j&‹ü` àˆ{ñ¥©âtr"oå֙JåQ6"{Nj +¹^þÒ²žXYêy^âüILÝ6½°¶²;»×½'úƼO˜æF4ͶD;È$ >¯mü[ò‰›‡–ÛʲÛW7+ñ¶æI¶mŹ=æVŹh-ËgªmËeGí'À·×·7C7-þv夊û ¹Þ_I¹iWnvçZžÜ¸ƒÞAÞK3ðHϕÓÿ6Ðç/Úf5L—©Î_a†.rîܾ¨:gúÕ"/Kœí&•ÎwÅÃ-ÎtzÞEĒjí s“Îäç?ç/4öö½çÇóÞ}!Ïy÷C”8øօz¤ý”ùŧÎM‚û'YÎÞ!?þ$" +‚ð»ïqå +F|Íè‘wé¬òqZöo*õYç´£×/ÈOuß3¨üœvã +y…áòÀ‡Ê%x;ÀŒéF7 ›ŸeF¼fŽhWK›WãÄ_ ˆ„dò¾›••˲ypG5®Y@É|‹K9)åØ;<¹£Ëš9©²æ‹äY•éÓҎH¹_Íiðc`٦ưŸ³åÍ0SàõÐÓV&è›N¢jaê&œäò–³_9ÑôÊõá£ë2.6ª£ÚÇòGꌝL¯Qo¢1\ÅÑê'z1‰t”ª=ǜ=¢©8ûDZ3xö«žE ‹¨ö‡gw +ºUgԒÅ=Ïë Òwbz=à‚Ô1¬ŸoÁ씥fm–𻔝 €祇í_Ô7:Î<¡L¶:YúÐ@TIw@\omßÙZ™}Z<€!á魓(¯ +Ýë·>às;Ù@bix%ø,³Ù¸åõø\Ÿ0õcÂIç’i’WöÆØ×Fÿ¬;p§ú°/èÑTÏ@xݫ˒{Ÿ3¹[‘ Ѐ iҞ5:0ͧ}po@òKuK^ÕË>­M +Ë›¾xã³¼ æ¦êú ZO²Ý[T÷V*Õ Ä6Š›‚Ýf±=ÖzºÏ^õþՊ +óe-Š՗µ>‡Œ³Û+Œ ½9iß»4Mt³vˆ©]3ÓzÙóT)ý†l›ªölÓ €E £'oíà`Æò¬SÎgá„5ùB"<è±ßYhýtŠÙÞ~4"î•gT¾„ê“ÁÕ*¤3¥]Sëª9:¥üô± =­A73£Ý,`mø÷ßÛ?ӋuR«uqO—87[8ÖõÛtÜs!#u$ºXK¾ºAL¢ߺ7 4 dC[Ä +|ù‰˜KžŠ0 r Aß©³ W1TÓݲ]S2žìýªê‹BŒA#Ú +¶èöUÍô-I eWì§ýøÁE<áÖÏ iÖÏõ?Ž»k޳»Å4sª±Ñˑ¸BÛݱúâ®ej o×훖î>P,‹:]¨J/ð”eïZvL’‰ÒÅ3Q픀¢º ÷¦^¬sÉ£¡Ê:ó{jrŠ ­„½tR°Tº ª‹¶€<¨«žGô@:¼OR8ȉOà¨Ð‰ #…Å,õ%Ìó=ÉL R–{¡P +€;á}¤*é¡}5% +î +åùìqH™–EŽŸdI¬h–O#Ã4-{·ýóC6X]±ï¥Ú®W@%ãTùëWK‰}$!BÿB‹¶¾ ×/Lƒß¢,tm…ÀA(¶&®ßÈԞ“«rœû ËÒâÀ¬Ý”,à(ÜPô‘ŠYµ¤±Å8Æß7TMŸÅ뛘i©Ûr<‚OlN °$ñòލÀÉ¡Ò%¨af=¥:ð® {Á‹eCdHÔó+ÞМ^ö[¸L0Ž­ð_îXè)™ƒ¦¾,Áݛװw+& Ë —¶³ +恩³3¯Ã³:ÄØïs®Ìç°uû3 +n¿Ögžõ «½ïÜݜþœÛ9épuÛ9 ~ØŠl(uŸßaMìÙ¡±S?Á”ÝþiEÒ7¯ÁBa$Ä0i:@*ù ›»€86M‚Ö±ØßI"à†Ô›À¾@ƒ.Àx‡q}+éɱ§&²Îxq Èà…É;2؜j{öD$THÖ*—-@æîM"I[ ”Mâü§xþµ‹Ûñh<3â~Rý§2’ ¢ö¨%}ÖR߂œx:ÓS}˰齘0Q×Ìq©ü€‡Ñ'bpD—-ð@{¥"Hæ|9e¦j2Ã|È.TãP*U‚%Hb¤SPǘœÙºö0<Çy€ tôÏÎ3š$“Ù^ö¬Sô&cµ„Ì{×õþà™ŒšŒÅ ?“ñü*P¥T K¡áÈÒ;󩯟óÄíٗÎTVÕ>W'ñx¡VßùnO5å ±ˆfîû{¾ˆ6À‡·ÍwIwl%> ‘ºp'¯U@ïã ôSÆâ]䣧fA?uåæ\<íÕ}2ïÍŁë™9ÿêA©xwêÃpԑ„š]î‰äë¡\3f4ÿ©ô£%›׎¢Äãoj¾ ‡¡Îu<ÑÿQXÍA –ÿÜ÷´6€é +ÿ÷΍Ø}ü‹a툫›j¸‚€Wó\h|¯0<_î+¾0Šêpß@ËàwÁôƒÄN¯,ëÙDÚ¯rwÙüFºýo_=† áì”\Qµ-аqkÍöêI$Ôo/C°¯%Ðì* °j3žK4¿5}Òâ[¹„§®ÿOh:IÖ(Ï7çwÔ¹hÍ Açn1Ù7°ðù`Áª(óBê)4™uš³ÓlÐK¨ÎãóKôä7KµªçŽSã5miŠ˜Š£.–0è‘Ø~Œœ{ÖG¾Ëôl…!Íãú3uuÊQoݳ?~¯g°ÅÊÎé Ín®N‡Q/(u#ءϴŽnia ]ŽP¿Äû{>˜ÑFé>Ô +Tc +Êÿ^§)ß`D^äÚ9”­>¬AêçôFúeàåçáØzƒJP?j‹­Y¤hHÝû8®ØŸ‰›=)ñlwßæª4ß|ZoÛ©(ÄßȈ„­íXŠA‚cK>MÎØÜ£z±“¾/ p›ó2OŠò뾤0-oQÓ¶BîM y ÆE4PéC!·ä6l>£D!Í­'Ѥ™›ûO’¿M} 冚ØÃA¬¥úÚ¥á‡#rQj!ŽHx 1‡½¨± ’c‹Ž¯¡Þ(§W2 +fyÌþ8å³0ö ÓÌÌï*fw²Ìöг;•£Oñś3àÑòþØYÆÓ3Õ)™úD‹D· «füá¹ATù|)†êú|?lcÚ¼­½‘²ÿ¼¤64ÀØ¢8"hîÁj`Dx/&ÌhM0V–À¾®ö­åEbˆƒhK¶f췂¬ƒÅ©‰ý÷µ¼doÄ Eõ« †?¤´Fì·)>òìS›óoûQ{SÁV@jPx 1ü¤}’Ùݕ]Õ9ádeƒŸõ5Ü úÚh¢N<“{ÚLgc–Ð쀇Ìk·æ»­¡Ï„ËHÄþÈå´:ÞE˜½LrÝQ—²ÓNÒîG…F¿G–Žb”0Cu]ü°RŠžú =ûhÄû%à0ãڎ±æ8Qyjƒ¹yuѹÆ×nl"|ƒ‹3ûd£[ÆòYƀ‡Fì5hèÔ4{ƒ‰VOz1!ó¡)nÚÎÕU°:rðsvèOÞԉc¶—ÏDá?A)g ¼ìN¼ìM(^¡Óš¹m=‘Ìe¤ã¤V5Ä("𝁴Å҈Óu©ñ”ätDôǍ†ü/È8+Ó¿\DÃX/éœr»0«»G©òÉ.5rÒvºP$ VœÐ0{rίÌÒ¼i†a{–´=&½ÑED†KR*/Beg› ”tP£dCÌ!ž™ +6'/¸ò1¶R¥k©]ã$wRìó^é•BŒÑèõ „ýÌfՓœpÝ8o?2±˜ +µÀp®ÞCIζfìœQÂbu¢:$8|U“£¬d5dèÔá'FàOD +óp™,I™P½…ã†@V¨$l&́z ôؔ]Q²‘GFÀíI^t­€"l8ލ¼k#fn ÖO›z½àއ¿»ÕþY€~…}Ú¢s@@÷‚ïÀ뒊Ñî6ÓÈÈ ¦;œF^ÉGg¿å-ڙ Dv²Aá젏áU‹#àaMG= £³0Ö’×R¨W¸+Éxˆ€¢÷ÞېGâtR4%Æ{ “¤"s#Ÿr³¢¢4¶PÂi‘ï6oô òía†Ue›ÐÂG/ÿ¦ø‚a­ê»³b¤œg¨¡vŽl¤ÞûšY;†Ø„ô°ï-Üj€µ„õÍønx>îU85.,7aM(ˆÀ +:9¶ËÖIièdxègHd‹ì)+1÷"íÑ;)û_2ôžt °èÈ$h³Ólûëì €^:&ZBî\‚<1іzn*n†znKêAuCp]ñ7Hi»ânÐ$ß °{Ť¨·ïZJÎíŽFû¤„$c9ÙÎð*ñG<·â’ŠñÃmêú%6”P-QMÍÜÛ؄»qdƒ²¢:zQª +e@äQªFÐð ±þÌ5`#ïÄþUŽá¸³’w¶\ù«Ù'š¢3Ԗ-(ªyQk¥Þç%÷ÛB ®†I7OäiUG_È싡œÉ))¤þÚu)}©$jA2 Ðy¦Quèî™ÑFXqî<Ñ «Y«q¼Áf†KʌU¸#Ü«¡¤¬ñö*¥eABfEÑ++éÌúŠèMÅD‹g*‚ÁŒ‹jZ·ÄwUpç>ù—³Ì•ìo3s“?ùn­ Ý<êU‡-ƒx†-½y…œ»G? VBØ+ˑ¡Sñ™;•ã’ª&ñÉ—p3²iò +~PPþ0^LhìÀª‰]ït~˜.ÛܕÓ_…‚~”q7exý“n'ƒL+Èd%²"²<ÒIJšû—qàM½hŒœãooƒ®tÿ!6þNq„۝Ë?¨;;”ðŒü.ˆaë±s‡Ìj݁ïþ†×ÃtÍ˜g™à –&‚áhæ~†ÑüœØw_8ï×<¸…Í‘p(¬Ý¤Ë‡~4þÓ/òÖʯØHi¯ß¨h1#à@àבöSàŸØ#úSâh‚Ôà<Š9,6ŒZW^“•ÖèzXó‚ký—EË׸&“ <NJ·'²w;™ûÂ{âY 2s÷(Éͳ{TFÀAÒÕVaQ¦ªÚA¥ObõvôôÊ%ìCÿl5¶«3;|‚{“›Ob›cᶎœ'²Ä·x-m҆܁R ‘±?µ)<Údà×Ìϔo”I&]Å"~M;À]Ó)å¯&Q“›9(…é´s‡ÃjÎs°ð.£Í’eüDŠzb¾ çì3çÁÕÁ“›«v „0áƒ87¥µžª²Üð­<ž©æ}€åÎæ}†˜¯ÅÍÕÜA´t +»3Ħ8‡Ñ0êN{ª +Œ9?ˆ¸ÿ.Ü*6¯ +3%ΉcE÷õ< Ü ¯|&µ‹È0 .+äŽÿ›tàjŒæ1ጇý‡;icæ›@Ö=âôƒ§©X/Œz'MIg~ CÜéÏ£¸Î(˜mèA撎v3ý:Еòò؀G(OX\6ys+óÓlO˜ôïÆ]]¶ÀHWlj÷G~¥à¡Ž ·÷EG”µm–æˆ8À[žÛq7ndð/ËøtˆÈÿ£¶ÉºÑtcꞏçžOÄóÛwÖÀÛµZ|ࣟ6vÒJ|$,ZÉ©>ΏW†‘.@ˆu å^µèç¼wÉå’çzÏ4/šI‡€ž°´g™ÞhLiñÁ^¸&L;7™'›Ûᩳc¸l=<ÃËp¨H˜[è›à^¹À¨ÖTÚ[Œ¢;Äg˓Rˆ¯ûkÀgx&ÙÀ¼‚¿tE[Ceûk'Ž]Ìma&HÒ¿!#O§Çž ;–2"U1I'®uñÐå!øÆ7}1ã€,¦ƒPoÞîy¡†”Ù"N°6Ä!¸1ކ¬6Ó ·ÎBc=犓ޛV§çH,ørRa¹Lñ¬7ÿ;ÿǧ¿üƧ¿VÂKˬz?:¥>ª.WQì\1ùÕӄbØýÅ GŸKYMÓù‘¸ï¸ÖÀƒHñ€oË×\g¹ò—iùõ#QãU¢|´ãRc1m/nÄð(Ð$}è+ëè\n~üeò¡›utòmW†C҅è+¢ÛÈ2 }H,gú„ñ« ~ŠÒT’¢%é XµôPA'uT@½Â8.ü²¯BO~ØAÉ0 3«Â«Ÿë$G ïgï +°§fý¬“ð§œØ)û‚wÝ3ñr9äî±÷m6¹÷m8ºœç‹Öaö*Ì-ãE¯ ®úøÑÏz·H°¡«†rÅ1J=<ò¡žŒâz¡¨ ˜IW÷%ÐI˜ÑÊŎɞÿÑý¿óÌ¡”.±fAçzó̺7÷cP0ŒU•&mèƒÜT[_†ÏMÉRq%¡,á±gP9@Óòam¢ºŒÏ<qRÇgU•`4x9CÿŠ’0՘`%ªàT +qUÜErâg•róZËk։ŸÖ D-‚/yp%‡Ïq+҉Ñ0T×»ÿ{_òô–|w9¯Î“_Ò¯ò!¾Æ¾ŠÕ¯uÎkúrkõ„6ü`_ÿѯ‹µkó7V¿Ù/¢ÆkýgØ×èî6|W9¯ðI¯½¯Å,ךŸG]Çÿ:}Çÿǟù]€ÿô|³õçþWgN֒[Ü®²¤–ùàõ‡Âiþ´’ØøES*Hï´ú)%¼ÒÙN§ÑI-ä–Êx¬ú’Ûø»ëEi~™¢´‚=é§ÿ)uh‡ûðØ;5ª´€ùÙú"YRŶØZZìÞÈAÂÙYlwö]癟ÙQû¥H ©ä¾¶Ï?µÐs‡ÈmªžŽ”{ŠÿPQ½Ç/Bìõ(­‰úó¿å¨îáy0sæj-–_Ž7›Ýw›:êCG¸îð=†9r”<:×LϘ ÃÇ`|ÿÄoÙÚüÿÕåÝVþ†gp·®¸vöWSd*9»L8Ýc»ˆ]:; ¥÷Ðhín›ÿ:ëqØÝd®‘£ç >Y”Ûùî¿=¥Õ#²º¢üë­Gh Ýÿ–“‹›~Ÿï¶]=ÆØŸ»-3µß?CRíwönnÕ·ÿÅ^4žÜ:è‰ÖS•ã…L?vT¡u(de‹û{Ã'\e߯ë Ä®¹uIÖºÃfùƔŸf@Û/ôÄ,çþvÊÌ9Pñ¶7^¬A­[EÝ,ï0ÕÜSqÁuÕ<}×ñBqš„•~ÞÅu¿·±|~‹–øþféù”§qòKµýó®Ä¿.•/5*eýÊc«éPúA}×Üÿ¬ž0Ú_¬ka—éÌ6‘Ú\ÌdFîŸÌkKÖlû¨6sÿÏù}§ïü?°)ÿ5âÕ·æ³ë×ý´§þÿ±ý僳ÿa†ÕþHÃižhÃhþ¿ræÕò¦Dð ûš1ôC¾s|Gò©*~¨Â¿«6nçùºÝG{f2\zyhÿÜÿÙÏûv_ÿï“ÞQgñ}Ô§‰²ºòq+úÝ<Ö _a¶ï7±2”v?Øseò¦»cóx§/<Ù}i²øß©Ÿ—6_˜6‡ê>¬¾lÙ~€ÂÞ#ôåñ&ÄÖI/“7ô ÈØ|½¦}i‡Éby¸^ǧïN‡5ëêcç>¬{«YŠúqôŸV>jÓú©ºû*o?;ýޗo¸÷°üX‹Ö“‡Ýýì§íã=ÿ+ƾât{>ëÉÀAÄò.‘“]—ãò1¸ŸOÞî{=.#Îðr¸> }Å ï‹"ÉxÍç³xG½âáù:òc쩾ôo¸ …Pv¢?+ýs_Ó¨qîiq·zë¼n?à÷6™ŒgsÿZp>ÿ·È¥ØSÕuÞD_"ÃÇ¿HÙY"ÿ·•ÿÛýöÿúÆÛ•9îÓD×E!¢?E-¢—»÷¡Ñ4òÚùu>d2³Ì­óhÙhÚhÚèãtgèåtrÚ?G Ñètm(ÚÑÆÑ¶£oGG!F}­b9GKG®£ÚQÈiÒJ„|ƓC¤¤Òiô›M&ëIS¤]Hʑ¥$} HZIa³””!"|:MˆHÝ=&¢“iIº¤¬¤­¤i¥k¥o¥ÒÊée´¿ö)ågeRa?QëÇb“ã?Ùþ$MºC/‚][“Ásiûz›I‚ÿýfßp!röVmñ¸/ö§íêp?íàîO%p5fßpúiû~ ÖjRCšygÕ§íÃ݆xT‡Ð›÷kOۀÖ[©Àæ•à9ôý¼¶§ïü©ûwÛãëä¢É18|. 1‡Š5fÊ( ¬*úÎe>a:úy_Œj|'о•.ڔ]îúj$„ÑVÁ18RXŽj4xgÓ,s7ҙç¶5OóSÀk¨Î³{ÃßwՉ謓aA"{0Š•‹Æd “΃ø‚6X¤S1a‘låÃSÔÝhýß@Óx6¸Ž#Z¨º^A¿¶ýií)õŁP¸RK’‰¦T'¬ ßXÁ²¤¶y—(!±ü¦ðQ¼z{gþ²Ì6ð¼±ÂBa@>nѕcاx ”<–0T­áJ]<¥whL4 +]‚¼§…€ÜÇNê¢iÛð‰ÕŽÂ +”üf•æÜÞÖ€Úwµ‡£”­Ba=ÃãBðov’ýtz9K*¸³A c·ãŜŸ©P‡›å6Òê j +ñ[Î"¿5ðÓbàoæ‡Á&Àé'3 ˆ¬§¾.Us"UäÈä^cÃ³7Ë ÕŠÎ9)–°KYs†–²£âqÂP8æU€Kð–€Þ.À«‰j&£Péü»8èðO(€ÍŒ“š]Pb†sÜq€¹ž>yTÿµÍ”"'»Ú"5ÙF¢9² *óêx+Y+ fUMö¤í‰¼ ‹…{#5Î +š{×·pY«Ü1¥ßNƒrD†lM ÝƒJ«xI€ÌÅ'±Q—5Zò%¿ÀÞx=ƒ*¯o褲èwÚq¦}Ž!¨½»’>)ždUʒn'w1*À1ÈÈD–P5¦6Þ>?éªa“sÊÅ4’K¶é†›¨€ ¢P+ÝRôƒŽ¬K¿€„7ê¨Ì nj±¸P(a'j>£­­le؂JµÙØÁFü±hAG¢íøkBjã¶DððIœ|Ê3—!D_žMÌ +—ÐØSÍpÑñû}áÔ[p] šò0޳Ó`ŽÏëg}Ô!¶agCÅИ(5t¾H¼)7G˜’`ÍÇ6Bð â|%D£[$ÑpùZ.(  u/>ˆ8±®ä}¢j‘H¸¢ñFl@þr¥>+`‚–{rœxë/V¶Œ°L¢$ãŠz¶^ ”ž¦ç *)ŸöK—ZP1è㖩%Âzušææ%ÆÇ7î½+XçöW« +Ç>ïãú""\”FûЮHžbÊô@]×÷•¸ÍÓ¬AéU + êWA| ]Ø +q y+…m©éò þƒPŸÿ§)ž²Ê™kñ„Ÿ€ÎMÕ½›º?œ—X)Ö1·‚i#.”XLOÉi¹+Z],‡Ö ÿÀe 1ÜÞK1A)0£:#~|ÔBÕv¼,(n¸E×Ù`û@ƒm2>Ü F*yzV¿d`x‰`~£ËGª¢Gz]|9üOx:ôËþÆÚ¾C€LX\iL[‚=ûZ =‰°Ö²2ƒà¥#4HZºÂõ±º^aSr}æIî_yTf*ÄþëÅp»Ì-:äsOÊúŠ ÿcÅ mîTçT(.Kfó¤DàEÏ­Ñ: ґھ|[Ho†¤wõ&Èi¦þìÊt§ýÀ¿S]8ŸŸ R¨rXôuÈîm®ƒeñK.fTm3nŽ!ƒƒ™=léÆZ!ãÿd$Ù)(§0,úCKò–ðÙð LÐYC|Fm¹¾ÎçCêr#ö¸Ÿš%7ÏЙ!fhrÌVàhr̃UžÇ- ñ–šßßLCÍìtzéWáM®Xš¯D´³(_gn}ܸSެ‹+!jÀ§Ü/ÖPS˜1F®Á2Q;ߛ +ŽQ…X ­¡ ¢© †ß$îêÂøôÿþ¡6¡' pÑ ƒ¦X@žTÐÊ õ+"¢ã$†Š8¯j¼Fƒ©IºŽé¶˜íHl“‰ûïû ­S¤˜C„ǽc‡À¢…h!uò 7'[ÏÁIÀÿÂВ“ÿ׿4‰šjì;š`=4¸J,¿ð¼5ʶ44×°•-fo«zyÜR"—éöÏó[JædNv†kØ32L±g4µÌ‡]ó)†ßàT‘“Yڊ‘ Î&¼/vçm=$=/É:O˜Œ6¼(q(`V×{#*-–p“ÅæËBCFÇd#Ioû6CÐ`ÿNtY0‡ës"ÂJ’ˆ‚"3ëccÁI€;dÄ2 .Å5hU (¬vÑð>* ,< BÀŒŸÌÔK&z£9_Ô\…à(.ÀM7/-G¢Û<·˜M‡A@¨~¯oÌ v¢q%MNß §öD1jå~rÁ1ê>`á!€©EH +¾my·šžêÐrëo9<ÝÏ{öӓš  > špálzxê!ïè@âü°`ÕûVòªúÝb©Ç²ùV`iäb—@ô¾XFáp¥WöÕkœpšõ\uöuÎ>£×5`ü+?-}”ß³º£ÿ¹ÿ¬Ý¥ÑY9ÆçôIÝþš¹N~çôIÝÿbÙNFçГ»”¦m/ú =|W÷‹=zêÝÎésþu»\gÓ[¹”¡ҌVP‡ªŒVP‡èFö¸‹ÿ}‰Û,?ÿ·gì©^ÊN3e'ûËx\æI¾ì¯úX Ó +ýÝâW]ò}¢ë¾?³]wê2K®ëò «ˆ)ÉHàâ4ê:"’ý·Š³¿¶ü©9U4þØ÷‰õm¹¬ØM¢w+6J‰¡[D^\¬ñD¸Î„-×½Ö6œïf‡”ˆcNâ p8ŶÛ\´Q;º4»a²OLœ™¼ã‚x>Q‰á^;E¾S¸9C_¸šQ;ñ­'õ6œfŠ'|=OQegqgeeÔjpÚ(Ã/S+©õw¢‰Üî¿  ҉ÜÐK ¢|Ìå¿¢ƒ«ŽÑDïͰOٖ£ÍNü-M¥¥Å­Å¡BE¿ÉËÁ“÷Ækþ'|ÓÚr‰Þÿ…………ÀÞïXe«šOÙ³?*µ&z™LŽ&6W¾ßJÓýë&JûPefr±@Lúî¹Ê'~?í1n(ïñàn3-¤MNì@ öèw¯a–ÒÒ¥£l幕ORá§·¥_P¹Éõn¿Ãh¢wæÚ'è ªÎr„°PÄj¦NüV¦ÜÒ;Ó1£æ2†”Î¥“ ÖõëÙÄë‹E½Ã—2˜¤D忦ú_jeYDï™M¡£¿öNüÛñ"íHëE¾°êª)ÉifÔÖð±Š'x“=E¹@#@s~*?¾C¥}08MNð—]1Dïêq0÷Ãö9Dî¾³¿´¢w_+”4Âù_¦-•(d̮ɝ:õse~S©œ‚•t5ª4™gó8źë¥å¬Æ(÷‹éŒQ;›L >%¦1DîZs›Lb‰Þý‚ŒÏaDï‡×L6Š'|£E±»ºô©Å´Â‰ß‚b§Ñ‚Õ]:Ìu¼÷µûê┎`ÀË¢.ƁæÒIzÿí¬,©#5#QËÚ°IÑ_¯S©²^قŽ÷FUÒ\± ûv¢+"AxbÀ'ªÈSßiÉæ„éµ½ ×à2¥|î˳ìû>Ëç.QÇ/¯ivUô4”©ÙûMý£ }»0”úÃ…Ÿ ùgk°oßa‡·ºþ?ã/òïwsËJÓ]£[æ*¥Žýœ}ŠË–SxäT¶æ‘ô¬<þ +e ‚iSer’eíÎ)He “Nðå&()Aõ¿߆?{8•K吴†Øï—ØÙc\þÚÌ+Pf ÷í(Cm¡K [IøšþQ©´¤{©Þö]¥‹ÀšËeø‹NðRéx+éÔgýI™_Ý`¨#@Û0ëж1Y3;`On=PFYNeÜ›ù̾õÇe܊–1v/†2x™WÒ7¢ÉaŠŒœ;®FÄòNk»4/ga±zô|CBùÌ¿xÏüæ_ðg—xn2± 5->1ýPÊc²ïNëã²ýóºøì¾;[&8Ml˜ù“;þ €m†ÐËäžÊƯŸÊ<Çeü€xì¾YÝ|v]ñàÎ;/˜Nrm*gÑÌú–ïw¼R¾ …(m%ù§ƒ8û>qàÎ;/á<ÇeüG€xì¿Œî µkѳ&|ðnÜUëєzœÐýà+/ï÷†Ó”Úi ¦ì ùçÕ¼´šËè1µÿŠÊ¿‚;r“y¬¾’õLãl5þE荁ŠËÂj¸üþ~ç¿ß˜™ÿG#bi€‚å€f.Ã_ š#f²úlÂù¬¸+Õ㍱[ê2ëÍØkü¬ºóYx‹ïcêqY2ô{¡ŠËÅ:TßÒtLUôêO·_ê³&svýi±m™ãþ†f.k/¯6-²Ëì2ëÍe›YeöfRûrÍ0á’Er۱ݕ–•’äîg`»*.\áá¹rösøå¿û¹yÄp?üùyÄs<ãŸûøðoø‘Å㋖¯í¬»k>Ú×¶¸í®»kÃqâãŽûßöünÝáá×qIÜ{¾þç}DxßQ øçúV÷îÏwUu?ÃèüÍoÙû]®G³¨ÈÁâæãoóçÿÕÙ¾ø®cÿå…xð~î{ßã¡öyü‘ÇùüþRå‹)ïqÐã¥2]eOÇCÝe}Þ:'Pð(ß³oËð(ï¶j\×UĶÍ*âŸ+Ž‡Í¯ pWö£~|î9ÿš?I¨nêgÿ—ÉãqÏóxçvŠuø“ìöXäl ö_/•Çì‘Âçu–_‰%¾ËÏeX(q(PtøÄj¾9@ιÈã¼Ø~û¼«ß|ëûa7ð”žQ¯¨l͐T\ ;¨Ú·C ½ñ9i²gCws'ÿ_Vé{XñWá׎›³ÕYVx˜.¹ÛBÓn[ô¶ÑÚhZœ¢‰¡‹IÃJàéĘP«À¢7œÛj٘MÝP.ª&’Â#òx³8ê E‡[¸?…*g³|•›Ž¥a yŒDïb,nñÛÓ +4µŒ¿Aî.÷ȗ­·óÑ»ñ A.4"YÕé‹*«5(»‘ÙRåÅE=ŠNÍy‚-\$ëo^"Ð'¿Ô»öÿÇòè ×UUG· oØ´¥snÝ¡ï4„Þ=aäÛf ;moèE?kD‹º7‰v £Xü×$ŒzPìÄëÍá*ù•øï!á‰>÷Zàýp¬ÉÿGŠF»šÐÙDx£L”il½q¥¨é=ŒÔ[ꠕÇüQ׏þô]Ô<Çëw€Ž£,»øÁw©HY_:½ÃC¨tEP=÷xŸ.[8Õ¥©Ñw¾'|6~ÌVióÛs[Ո´9jø}±"õ§yú.ö{êŸÀ·däé!B-7’ÙђÃPÝÃÿqoù_m¼ ›gsÛ›Þ¯bOìRÈ%x†Ñ³^ðè#Kó…çë§|¶ÔcÁŠïSwí#m𠛀´fMÏ\¡íqZÄå +%ê½Ú”¥äðfN |_ Ló8D¸;o_䔙›Dã\ÝRý,Ip\Ss m2˜ë3RÚQÄXò—Õ\\4¶“øÃ2äppÚ;žU†Â%ıÂ9A¼¸£åÙÈÜÅ:/¢ï7ô]ç¬Bö£Kð¶§¾·^j.çu!o€‰•æ¿cá/y8>4/̝ó‰þ]üú_¡’J^eé/L¡“‡ÉMښáböá ±+©E‚Ÿ¡’n{EóH ×ïžk[Ø´Í»¢ïwfFÜ®é±Ñ¸\É +RÞtٚa;+ šáû¼@Ȋ‡¹·æè»Éú.ó0Tôa]jDÛQTù‹Ý~Gb| uHƗ]j Z]u™¼.¼±tˆ:ˆnTÔU:2Zšì«v0™Cá#µ?ªåE,©ëK iYYH¹lœ»8›´ô[ùYb£«$~3¹¬­šún¤n$SPç‡ÀcÃkuòXšnÄÛésë­TÄñ Qçf![˜!0軑Ñoœ/Å/^®‹6Á: tÍEà”(ȐV1ì®(ýsNºÕ-¿¢‰:±2Œ^\)~QˆžO~Ŷ)ŽÚ ~yQÀu ƒibhâ¢ý»ðW µú(M-@. A<]ÖB¶¥(lß7u™ûŒÛ7Íùz•Áî|pè/¡yt¹lt.»ã™Wöôå´ÐÇúæFÇÄȪ£¶1ôGË౏ݟÿtÉ‚¢ŒcëOŸªÆ?ù—çÇóŽôðºù+!ܺ ¨»Å9ãd·ªY3ž”>¼j(èÝb~ʱøÜ|™Ý2¬|̽Óc²¯þ7à^ù¯§œœ¥ÌË®È–cˆgŒèÁç×IC: å~Ö|´QŠQu8#g¶r*Ï×Ö3Åuڎ+¯Zß÷–yîAIgþ”–ÃÿR’ÍÞEž*.ßÞ),ðš)"t^ñIg¼k)mý%%Ÿéë ïcKˋ65‹/ÍJ_xAV!¨Eîš|³«˜ÑÕÌÛÍÆð'SpTceú©ö|Cgµ²–k]½Œ.·u/|É=–å“_Óß+Ó„ê ')|8’ø)Ëôðd ¾¯£P ‹«÷<>yÉ)úf.VŒ¿¼ÒåB=ªé܆9žù拘ß$½ÊRü´v 8é ™­žc¸ò4ªóü”g¼c¾ +‚Þy¢Þy¢Þ{ÿ|[Yô¯]U¼wúœîì [ÉÔoùG ßAãàßú%ô:9Üi›ýIý§ÿ"œþÊîNj¾ÙZ…JþMsÚñ¸³Ë(òØâüÍÓçòGéóóŠ<ùÝ9^o•n†V²‡ßê9`£ïV‡ØMWA0ù‹' È®¦gíÇïîñ{ü®§û:‹Ü÷¾¼¨ìqLÿȹGÇIguþ¾,=æç¡nó»”å睞tóîéèÞm´ô<Üöeç…+6óíJèn3´Ï6ùÝÏ:«Ï¡Ò<Úʬyåç–y¾ÏIyâg´¯?›OZó½Ó×<ïôõï?ŸLóÊÓô¯7z{ž{NóÀÏ|gŸs=Ó<¿•bóu*ÉæòWNóíÊêw’µ;é]KÏ#;Õ<òsº—ž.w«y÷ó¶o<|î©çÞÎüw›üïÈyægmos·?ÃëÞm3½ÓÎo¦Ú¼uÑ}ǜæ³ró+£ú9­¯ÍRt݆k¢è¶Y®ižË©_ÄHýÒãír¸ÃºÊûœZ¾«×ü^&ç¸òò¿?ÎBáDð»ì÷K«Ý{Ÿ9O±¨öÿ“èK뻹Þ÷ÿ»æ‡œ®ŒwN¼ŽÃäÅìcø79 kÈÚ +ŽÂGd·–P¿ÐÃɹˍ‹slØäÅÕc™Ôå`‹ÌFøa¥â’úG«ô3eÂtd º¬¤—Ò8ÀÕe—ðͅŽaê/àŠí$N¬x‘¯…Æby±eøñ/(nk•q Om륅æ“EÂ—Þ @»ÛÊ6_=ð¼ÛÊL–¥|¦l|R¯¼”¯7tló†üâÇ.ï&Zƒâ·É8Ú´ÉòrG~öHûllš«8<6Nß$Y"¯ ªˆ2¿Es‰'y~±»-K¦k¾q܅ê©%Ã{z–n_§wù[Ðan·žÂÜ:CµN×$y‰ÀR ¯gÅ^Ù» vß756Ç2òÂhZ“-Òþ¢W½6ˆ†A]nY•s.9E՗eý/Ì@m6Ø~[w0p8VAumÐÝwæñ¦L->{`w!мêy®EÇ{v2V̧Ÿî1&$šÌ|Z¸äÛ¹¹·h&ø®}XÒý4»ÖØ1’tîÝÄI}P'H Ä¥¥ìßâšþ‹± Ùܙ[ SÈnðI)Sœz/%¤Ëé´*ûHŠZî=BPÖ·È_i2G!LzÙ¤îÝš¯9ºÈÄJLc\­Y‰|®-®…Ýžü4NS¡TÀSîñ’¸¡E§…ïˤ;Ú­¿éšõép—hµýQ¼ƒñÓY96ÏG†‹Z-~fxöŠP–Æý}"^=ÁDh‹÷…úéh·ÖÿÑÃÛt»û¾ p‚‡:ºú-…ِÚK|•ß àÌVT[ S1obsÞ3 =1˜oÒ»àºaˆv:¨›0D#èW»R÷j^Ã2Bzç/RÎ6 N˜ Küx4ÑÈD,š-í¼ôBqõ™À]Dz=aœs\Þ7L¹ê÷L[Û»oô Î粊¡v ðJ]Sˆ·Ëd“¼}ƒ’I¾ALC! +i<~¶þñºòVt»êþ©+¿ÈM’¸4[ +ãvƒêW~yä­J-‚fbßDç¼¶Mz5Û¿<òRªè]Øy)ø…§3S\`O½…› e†ùØ×Ý*òTUøéú+öd«{o”_’ ͯÏï%„eŸ'5\W*ék§{¢×ÑÕö·¶ÎeÃTÏd4/6“eF~‰©Q×ÿÂTx}¨¶€ ø±”äT»Ö½*ӗ„•ß Á±à!ní9|D®ÿ",cºN_ +¿IÕ´cÛ žÝ¹Êðm§âú_{ü»JÞÿÔe"ƒ|.øŸ´@…°>§5nÌ­ª~—µG£^©ì¸uæÐüKPû9xÝ0?q@Ò°Þ.Ø óDlšªpL·‚øüÉwíw¸\^H$UÞ¥Ia…nøµ§‰¢â[ô14\+|ä@@G3¢Ø>Žf%1MqÇ¥A=íQ­?£ZYÉæá)“p—"n‚×uèDåMðʋSÎN¨tt?«T<õÜòÑ‹«ÇrԚM‘x Ý|žíϹ&ì7ýc·šLñtYø“b›B“•óð™k&:8®q¾ÿô¹ÙÅæ‡,ª­äPØuR¾ª³À — +ý½³°•V_k-kƒwÔúñ,´—p\8SÁd®-òikýUµû«jјiz.îé{¸Ré/£m³dâB½OçfÍÓ9Ä­Â&XçE.ßS'1TÐs‘|‚xîØµ?õè=V^⺟û—!ì] ’éó/¯_CðõŸ&=ö«7úË6¤!î«Ìšþ)µ×U£©~\y~ÃIGí^/VC_ið´üä… +š»z&Vº>ŠÅݵɉLõ¿Ã7D”ܸ2\è³Ýgҗ!Ãí²—Õ¹+ÆçØÛŸ1m½øcü6ÜáP„25™ÈÎG:³‘âQL*9Y0æªñ¥äWJó¤ît a›]Þbî¡Çп䘡^z€êñl«zYRê Gw džo{­wË ,©Cca*,µÄék´"·±ßý½£kduÚ[í¾A-ŽäÍ*Ñw˜ Q'ê7" O[ÇoÏn>³klßŸ†•ꔌ±7¶ç.üÿÐf/‰ê[sŒh,{Ò,Þà<$—"‘#7%—Ï㸷Vî>³«n8“ãà ̊BÉÆBMA‡Ùi„²r`üÄÀ.dßPa´œÙ0²]±¾Ù*‡zèØdùCÃß´ì0LË]F-€1Y án›ƒEvØ×ºŠñs¿ ;Û%ëåܳF{¹µ¡þõx,ìÐó‹^t•‡œK#!ƆdÊAtg tÀ°{ ¯D¡î/¨ôU¹j¨žw¨å¿¬k¹Å„X„™¿Ý (Š[Ð ªÝ>ѶªçÉÌ*׈!#pà[T»¬!–ë"he¯ÿ|2|`ó††aÜzh“ûda’•ìQñdbúò´ªmjÇo¤#êøwbdZèÒØ¤‰S(Õ;§:­ƾ‹g„Ͱhc_AãGЫ]ìѯX{‰âœóÓÅ;ÄSk—hÅ*2JMËÛàð=ä#sz +·;Wø‘·a˜›Ò¾ÿ8ܜ F…oÏ©¢ó1RÊäÒs±=¥lý|LLá4@’\J_‘mS£Ä2=ÌüÙ»‹‘Âm©/êñeeï âßÞöŒ(ঘ&ÛÓdx3ØÁ®Ÿ7~ӉEüåxܕn³äš[ÌdÓ+˜¥¦Lì`¿,KÚfdõOš«Õûâq•ÿÍKÞäýçœ£Ðžë'ˆ«É‹ë º¼W_iQ=èÙKžù&úg<1lƒÉÄ-©¼TJŸ§=OT°”þ.ÔÅ zåP½‰Š¥.ü*?‚I•Ò€¦†’ö4……l¥ô;bÃv§X²nՓXìn{„Öp½ªÊ´ª­À¦>»}s‡úŸ¸7p‹ÛäÝ$Ù¶Ås'Ýj©_â6g.¤«‘û7,jLýÍux˜î9n[¦\¶ã(*¦Lå…kq¿ÝA£9Î!m[¥îþ{Bw'é3nÆïþrgÍLP7ûAä¥{ðEÞÐFÝAp»¥HQF åš&½ÉsޑãS;¦dûùåV/ܓ)nÝ»]Y nT¬ÄJOš]¥º‡HÝwsÁæAµížewØÊîËSH¦ê¤ÞIØØ8(.:v¥ÛPYÝü™H&ÞQVt7ƒeñ·ë}b݅Xö3÷Gw™Ìòš»<v¦èÊüÉ2ç7HW”“›˜œ^ +¼6øð(2m´«/¿¦g&@1|ž§€yÃÀ<ãj÷8l‡®Dý;eC]ú×âÿÐÑgÈ·÷úD˜Ûßé}ÃoÛÒ ú֍}cFŽ>­ƒGýÉ—òOő&$g|Ÿ)ü®Ú¾nÛ¦äv¬¾OmÓ¡C3%ÏííÍ|\U'ýŸZÜÞ×Fù¤ùaþ¾Šœðøê€¿ò°,ï=_KÊʎÌÞ”þv<ïoþIõv<¾‡ÎñM:dç瑠¹mþN%_Ïõ´.yëùÿÑû à£Õ!Æã ‡46~½sÍqd-¦N"º¯ñuRzËHæ¸à¥ª$„"k–hɝ5ÙýV“¸ÑÂã Rž¥o8Ã;vÎ7A-ᛅlX)†„ÃBfÆ&ˆÊÉ¥F5)4 DjS´>F3àÐø4> ŽÐýÏÃCðÐü4?4á+•EJ˜äÐ*qQK¥Œ’)iS«F=ZqъœHh¬´DÑU(rQX´GE"iF(a8ÚdU%R= +Džc k5¡Î{Ð +PÀÀ)€)À3àT‹¥„Œm,%‘V6šJ1‡RŠÉÔiˆJ'X©a‚lhˆÔC}€üjdKVØè¨¬•€F$t–F¶¥*´V«¨¨Fª¥ iV… •²IÊÓBˆŒI1¡¢TV£%R’²X0äc1XïI +®J:H¤¢¨ÁNµbñ*j«[L³¨UqÞ£ +B²Q"<”dB“VŒ„¡&Œˆ€ˆ ÔB’êB«*ê2R*QÒ¤"Ž•U‰ÊˆRØþ°°RZ”ú5ÕJÇ ®ªZ*ôµ…6REhË'«¨Ž:Ø. èN …•­UÒµj×:Ò¬@Q2É(¨B+V«PŽ–°:µÈ­ÍÌ +„U®-ˆ€!€&͵ +Eé*€#GV¨°` RÕ Àà`”è(ààÀèÕV-Z¢%&e5ue$нPžGÀb”|¤¤UõAhÓRRüœ’uJid£¥|ö•--)€øø;P”¨¤µB5êÖU¢X‘ +MxÒF°´7Å^€R€>~LNR:ô´dV”ðð +` +pµ¥)T €€SS€=I!¤3´†vÎÒÙìbêPÀÀ)€)ÀÆ¥ ´¡¶”6҆ÚPÚ@{APÀÀ)€)À–ˆÊҀ>~LNö ¢µ(ààÀàd´ €€SS€=†3°ÀÀ)€)À• ÄÛ$6É ²ClÚ@z©h±Jøø08Ճîøø08Õ¤Ù¶@mdÙ´L(ààÀàKV2}ã‡Þ8}ã‡Þ8}È +*ô”ðð +`¨}ìì€>~LN@N èŽUs–¨FE”ŽŒJøiŒi(ìŠ(”,‰T¤¬ +« €õè(ààÀàð§¢IRiZؤ►”Å®uly0ÖR+V“‹]"™€ÄéhñJz+ +–*0« +›ù1ŠE©*ãh®ŠÄu «‹ŒéSÔÝÆŠj ŠƒhU©FvQj FJ„jdÔ=€@}µðŽ"Õ(à{UPîBeKÿJì€øø0;¸R4±Ñ„4` ¼4e ,T%F„î,"š(ª¤@“[PU‡*YXQ€ Aø« jgºbӀgÀ4 +Ã,Å8ë# ¨|R¶T—^P€øø08|@ÝIIb5KV½v@¥EGÐހð÷D +h7Dx.È9ø.ì.£¥3lšöçFď:ôc¦U¦ØuÎÆ Ãlƒ¨I”h"BM Ï)U"­ ¨‘êÖmAÖ>61ŸC>} Àņlþ :pÊ,)K>ƒ\SŒÚi*6®®JChE:Í«£UŒrD©ª*[# µË>uBõ +T(_!Bý +d(iСϡC B†:(RB†0СM +ˆPÔ!GLY½c{[;+Z:»]WSÙæ¿ƒ©C[eAD<,uS§C¨Õõ^¢×QÕüË*ZΧµêì.ªêd-‹¤OÅ .ªêKNb(ààÀàð  •éHñG*V$xØdÔ:ɓbÅ6M¨;¦Ö왰‹þ• "™'Vî|؀ʘn±kÄÙîPmR¬Hm‡¹ÿ ’Ðâ¬Ù û ª•këË3ž èì5ݱR~¥W¡ŸÐÈTªû@Y«è=>‰ËlƒhjÄÙ ë ¨µv2K9FÕ†»4lDãjµÔ’¬§Âoñ²äÛdÝ#@‰CSbL!­d:ÈH9;2hA°×Cž ÂÅîõÐOSíÔ*@Û¡Ï/²%¡ýŽYð²X´ÆÅŸ„êX´æÅÈÐdGµ‚8urF2¨"šÅJ–i)Ð7u¡ +,.òcÂÁX4JS͉JÞf#ì„ÌGî ˆo òVmóM-Ñ,ˆ ÁÐlú¹~7FèP,ƒ ¶tDRÔ)s“X’¦œÞϜ™å ýuGAѯ•Éc4’ÛµB,KM¢M®¨h•G1c\•SmšYõrŠ>¸xYÎZŠ°â½‰^­+lvӘÎ`¦l¼ôXÞŠï‹î|}&I¶Îÿa²íéóÓÌeQ•‡c‰P¥×õ3ŒËgðFö­´ùç dUc”²&¾»Oûሰlh.¹.µÚUKD|‡jƒ¨/lKX +8Ä«ÜBÝ êvq'æ:B5¨¬5¶xV¹Åd%(r2S9óžWܧ•ñ:§gæd/܇•÷-åÊy_“ þv~fIÓ§Èy_òÞZnSËLN€Õ놎7ÿ}ñ9¤æý„î+Z›KQi¶Û}æNºµˆß='0’JÒN–p­ÖÙ’ZN½O¥s*ç9´ˆQêÙÑ7_I+ä[¢`£4ààc‡ + £€ä€_+áh’¶x(‚x ÅðÎðÞß¿ýöa'unêO·«¢Ø$ p^|TO/–‡åïÉ{O¿z7rkwï{Lß¿ ¦þ +8T«òÏ(Žój`á•sÙô­Ù¥b©¶Í9ùdÜFsé3(Ðbfù†1Ÿº`úZÔ9˜Ð#¾.öè¶ÜþLÓچáF·kê({¿–Müšü­à#/€ŒÇ™ùÛ¨êòضñ†wÝok¶À3J›Æ'ïÜN£Vzl‘x–ÏQ\ׯç4"­¯µR +ÒG©à/â[nÌÒ;ʺàîåBƒu$ŸLÏÞ¥kdw8Y„éü¶qe¡Aû)?5•åì®òöWy{+ó¯e<½c¼½c¼½có¯Xy{/¼½—Þ^ËüëÙo/fw—³;Ëٟ{2ÖρBmi*Û¥M¨“~X‹+oŸM£ïû^ĘðŠ1 ›­ëqØ¥ZÙæÄÆõˆøíÅca69{ö88ìrÓc™¿cSŽe¯Ùçf WÏ·f­u]úƒzçs;?òE$S€ ‡Ð sMoŒÞÕÁñ8¹i9KšÜÖd«„)G Ȋ€˜8_ÍK8N¤)‡ ã2¶æÔCˆW6¤¤‡(ÂC`-!ËÌHs†®Þ©ÐÞôeØ8Uw”<º8#ñ bøagÅð¾Ê>1ü5ðÛ6,žû÷r¡«l×És\xa•·djØ*`Ù©ºæè¯5J3ì×Ét×ïk˜}³ í»!è/µ«{]bA8— ’%Üѳ½“dôî½q|š-UšL]~YÑVr_;{«®;cø$:5‹¥Ú„{•<…>¢kõ€;™{× `3@A½$Цò>‹û±ïzëIâQ…8 ù­ÏYÕ~s|Ø ®×’ï‹{¤tÛ±¾ÉÉûhT`X¾ ¹h!÷¯zåøüÆ_šÙÜ̗UWÀWr@Ø $¼—Éy˜IzXˆ—Ê:ÖÊÎøiUeî*Œ³¹XÕ&ÉÀeúƒÃpg:CÎäîmýqáÃs¤<âIÜã ;ü?¸¸­l÷õõ¬NΘƒZÑá@7(ÊZÙËn¥|G2­léCÜ$b¯©<-äpxf®Zð}?OÊSs;sÙ«èmí»à#?›ç‡Jã—ê׋óÞp\µ³;ÍŠZÉXò …_ŽÍ&õ•WYºLŸ#Î'€¿CZ›JªÕ=iQIû£Î@o8Ð=¤€{M„Úl=iЛÓa6›Ó`öšO¤ä¦Ó0Û`@F’RrBN’ü¹ÔëPUZ©Î•yîžÜyí°kÏXû±ê*®¥:ôc²e£ÄP¤7‰µYRHq ¥xHª&æ<.R‹öœœCãÐÃEf! œh¸† +\¬Cdl¼CB X††q»ä€5 ñY¥[UUuk5¨Szx#uN=hP#çÅ.ÞÙvÈCtMы_§ÒþýޟP‘e#ÖÚ ¥?Õö —«í~§«ìû>M{½¯w§Ñ$y›·[=;¿gÕýOëºfݘù°#ê±zѾE¿ã¥Œ%k59½ÁçY“\ÙkÏPíM —7°´ +kÜw“~äOùmííà)Ȏ\xÿ‰´l±ïŸ\몛*ú3¬·g%À%×V8DSÀœnνۈ¿ZÙ¥tÛ8¶Ú2v·_ôÑ»'Etš[Ž÷þàpî˂·.]>„7á.à¸}`gS LÈCÜÀ‡¤ù¾f¡ñ0œíéštŠ1f³^™ä¬½ÛôÔ>Á6ìÏ˚ ¬·dpßx m ¶Š‡E­Ÿvš,O¼æU[l¤î·5«_FÝ:ÔÈï‹j=½FéÜuqTZ/cõ½²8·óÁ˜­¬—ü0ßå@*Ñ<0 ¨¶ªÿ$¿éåòt¿Ç­ìÍíy¿Çýáɀ®8Ö*zy#ᖂ#Ÿ^ç¿pŒµ­+߸e[­S×-ÚP¯ë„S€¨½%‹íáDAüÐ:m‹Á>×ÊìaðʑÖ¡ )Þ7fû÷t–Œ)p ๵”’á{+ÅmΝX–¶)Nç·ÚFíZë҆‚M/ŠW«&”@¯VUDԑXH¬$YiZE˜‘f$\ô‹ž‘t.€éO¬8O1¥N{QÏ¡'3O9oæ/½”Ó©÷ùÇ%'»šBÄÃúý/t#æ&¤”Køâ~8…WŠ.?éß`õQý´~úcå7õ–‡pÔBmùÑ0öß{†ŽÑíûœ&¶kðpšítï £´[~t^YÍ{œ&¶kðpší xM(ê¼®YÍ{œ&¶kðpšíÖß ¢eœÖ^/jPÜ4$§àü›Ÿ •z^M¶l6«¼a…ÿ|Oãl3&¥g)w‘|/íƒ {pY“cX±¬‹…$Ü?ÊÌÄ\&?p¤õºŒÌEÂbn <¡ÿ;:(¸h½paõÎŠ./\PþYEÁ—î¨I –Qpe7 o(¡¤8m>áË}CþØM!ûÇ1EÀûm4‡§ÜIo¨¾Hm!Ä‹ŒÄ¨–æ¤8­>âÌ}Gï*ÒQJ./(üÒ´‡§Üi¨îd´‡R.9ï(ýÏC=÷=õ‰§¡Çžóžòìzyï¸ùï¨ã-=<÷œ}”¸Yèqç¾ãè>£þu§¡Çžó ò÷Ë=<÷Ü}Ô}¨“ÐãÏyǒõÇøKA=Üy/ÜÉ‚qJmë-YUk$?ãú ýç¥n ÒœË‹OÙ$A¬̼üëuìY#´ãßG}L̨üE"míŸF¿OꍨªVӚD“ïû¤ù?”™p“œH뤙 a(Î"p”iëï+º‘åwR<¯#ÊùÒ9ÝԎwm"‚|¾íŸ—»gÚecÂ3eGYèFCFH}þ0ù;¡”†ÌøCGÂ$ˆ›/+ǕŽãÊܸò·.9Øî9ɸ¬ó‡„¿-ílÏÊ/4xéŸÙå$Á˾:²àJ%Œ¦Ò¸#ä.ÒÉÀ¾”7ð/BBc§„x`„òGŽ¢Û{xÉPx‘q¢"QÉWa'Iòpw»_§‚>ŽB[Ä~Žù/% òАGÞÔs%CqÞðY{[?âp¡:ûÏË éflI€kƒ¥™ï€d¯NÄÕODáC"„r˜,X•ÚïÙ¥ 4ðr€¢ˆ¢’lÌ@6Â9W`2SÔj¢§ ç6hÄ5Ãâ™Ë{Å3šžôKÁrmæ]ÚS–_2ÛTÛ'Y%…+ÏPl¼DøòM Á)3z„û`bÓ±çëbB8K›J8[K‰#–@}Óg6Ñ}þ ãßW“m» —í롲(¸î_førÿ=˟fæÔ.µÃl\ràEÚÙ¤‰ÛÎB8ŸØœ™Ü.Lä93»ÎLî&wÒäÎyÉg}Ƀºä³Â䲇%žó’Ï’ÏÒä²ó’Öû’¦ë’× ’Ò–»ÎK\K_K’ÓÎLý÷'#uɟÂäÏC“?¼äÏàrgý.L÷œšîL-×&‡ “AMó“CÉ¡ô¹4rhï¹0÷\š<.M94{ÎM&ÒäÑyÉ¥¾ä«ºäÒári!É¥Þrip94¾—&•­,¶ýìar`*\ÎtSÖãVãÝ%Ò´J:ðQ^Á6_d”W÷I÷H,ãôõ,?JìÅcô´4VHD„XÔKhHR*ÕŒ©U¢>H{.ÅñíI]#× Ë±’޶ˆu¥qkðþAå@zXÃØ8qžàÆëoð‡ü¨¨K[>kUfáÖ²øxÆƶ1çS‘D½ruÈ\Ê%¾Kä,Z%í´rÿR1Eù¬‹YÃÅMY遯z«ÔA)Y‘ò\Âô¿|Ÿ.¬Kã«6*%þÔ!T«[4wÓéRÁJWŽeù…!l—ºîõæ ò“†nGg⥿ 7LòPÙ{Ppk)ÔusgÃÈ|?.¡u¦¢lÉòǘö).æSJäBFù"ÇA@9)²PNJJI!¾µ³<Õé½V›ò¦%ÍÉ7íÑ(ý(ð‰á"¿ž2+ò ä"±ý$vÌ$ÄW¢MWæÌEn‘ÔW€˜_ï÷‘_ÆOü„ù_Þ'ÞEÀ?«mǯï“•O•BÀæ(‰çáЯÏÅÇQ-:%ÌO˜ø£æ@³iB³N®†é·Å4z%Ò>Š¥×%rFQùǚn.ù£Ë|>7"8!^œþ% jOn¿áÿ±W°ù˜l¤Î ±Øf¡‰ÿL÷ø€¡±É{ÃËâ=¡ +Ë®Gañòþ¨ìãá“5h£K[Ù Än×^”€a4¤‚ûIèQ¥"Ÿ;N¤Hÿé™f¢´Ú¢ÜbR…BmfÕ"Ô¯eI՛h¤(âC”ÍO³@£ ZšÚsÐH÷ z³í•¹Ú£¤6Ö°Y­SjFlê–tÛ5Ԝy|íNn}C群éVÕ©9‹jÎi›qC§PЌ±N:8çuAÝS“nͱAÁfűAÁ°.6Ő (VP¡ËLŒÿJ²{ó`Ó§56È#\'ë¡?X'ë0›MZÇJòv+Ñ· ô1›¨ÍvÕ=©©«\r s©áS5m¨Ë3¼ñÒàs‡LP튚ÔësGKú­šök–ÌéÖ¨{t´í«5­JDzÒԟYJGµ¨vRÈé‡!‘Vgì= F®Þ­µY±d1´O:}µ‹7N¢Z“Úl¤ˆ9±eàáC‰B‰'Z²{jŠ +iðªúYìO£ÚJ|¤²MåO8/Óôý?ªÿG*ãýÏa=Â:8\ƒAì4Ù¶;Ž8rµµ¥•óÍÆ^Šˆ±‹˜úmÑÑnëöÈJß°Ê7\ú’yòfׂ÷* 3v¼P)ôõóäèyŠw‹:ËV æI5uÿ–{~ŠmðŠåÓkÜ@й[·^ØÝuù'¼ùo*K½k]sœšG Ã†çŽÎ6ҘámŽiŒÿ Ô¹ô5Cè5ÍüÉ-¿>„’v™M5%ƒ{¨++x¯aZÔgP6تÉê<÷®hjŽAéUn¬Û“}6¹é­;PªÖi™ÄФ£dŠ˜-¢Î²})bÌ|Õbóý¯ì~¯µì-n•ZD‹S¤9BkӅϯ5¥mx"Øv²nEà©)Q¡ +mx ã…¸á.Úæ,Báv³‰‘¢elj·Ró9p4Î] 6Ô4ߗË:)µB·:qëÓi#‹:óaŒâby©``<Ääbbp¯²¾^•ÛêÿûY0—Ó„Œ ¸K­:ÚáKvõÓC;èWx²a&zB‡d$š„v'fúeIá8°Y )bð\_Á£û½sç3º×Þهž½%Ã̘ÂÞŠí·ræÖMä3·.;Ƚp¸_=a¢³ÙþČ øˆo=™Ù_sâè-ðáè-Ñä#â™õgªîgÜø½PkÕ–êÅèm(ç«Ð܉VS¬á‰\ºvjN<¤…qÕÑÌg.:õH÷Jx´|ÓñŕÞwxgpò„z'ÇɂC}lÈ&úÂo",\ÓR29ÕR2è|5ec°ñQaañ¸É°±ŽÃÇE†[ãf¦Ã/‡‹ ÇÆï“a™ŽÃߒ×࿔ÛÏv¢3Â3î3ê‚[j™.»øñ(³N­zš„»µÆut”ªäZº–u,jTš>!>R‘Zá}¯tC‰ÕfÖrè§k%ÁÇ7„Kû,ø¯ônz:s±y¥ ÁO‘gn5Üæ¢QûÄRø0æŒÉG™ ²ílùÕu9ïpÊa~ÿˆè£æA‰©õsˆz é ¾"R€ÔHÛÈ ¹«½ŽÊ&’> ”µ±Ïnuˆþض‰Ï±=µWå[®Þ±^ڌuaµÙ €ÞI0”‘wJrJZRP7Q?¹%1)(;‰,¯þ$‡X +””=Ĕ_ý¤ªÇfËò{’9ҙ¨ðµuè¨!4•"•4ڔRi©6us×uäH©³ÕãØ¦Ô¨ÕÛ9šõÁêÞa3‡[ØZõOE­•ëú Ê{¢5V݊º§Þp3C”vרäÿäáäÿä‘vrSÉÿÓÈ“ÿ7!NOTÞç'ªww“ÔÏw“ÔÑ6¼¬ü…0òw£aäïfbäïGÅÉÞâ= °á鹍Ø\Æ8\Ãй„ÂäÔÛ …ÃËxs'…ÌpÂæ?D.Ü…Ì÷as]Ø]7~fa…ÑñBî&(]è]‡*ȅÒ÷at¼pº[кZarjnZat± ¥ˆ]/†Ký¹žä.k» ¦÷atíø] .âb…ѱBìÇ¡v ‘ ¦nÂé˜átÇ¡tÄÂäÔÜÄÂé‚Lºg .™ú!s]È]7» §was;𻉆FÅ ³1Bèö¶|¡Øò¿¥×»ÎQªÒyÊ9\L‚ZÙ­üÍ³5üGlÛsY¥Â£ ½Švc7=›'ˆ4ì¨Ø ™­ú5™P‘j̘œ²“S ª\NR›6$Š% +KLg¨J\š³kêÀ<åô«Žª¹1ýœ»tlÕ"µçsè.—Ï蟞ø8Jôõ$ (ÕY¯©ÊÊHQUà£P©6‹ƒ­±h¼8:×Ñvv5ñVۀª}[ÂÈ:ÒGW¾€ÍðÛ-ö „æÖPDY1CslVúBRR”ê„0)QåÀJ†Og—Óñí·f¬].ž»Î†»În»ÎVº\whf_÷zKZ›HT”ÆP¥Â +xGÓe +@R ´,ž€³þßHÞ¦´Ï.Iëõõ³åŠÿ_[AìkhLüšÚ:"¿ôkyräõ¸S`TîwÁx2£€6câHUÍR€‡\´›ô]ô²wð" !¹mé(cü@#guƒZQCä¼ÀJH%$()Ùü[þ﯆ eù§%:`ä\0rR`ä\Pr.(9Šˆ9ë¢J=b +Ĉ8+pV ä¤ÁÍ.ÜUrV(9!ª(“Ñ’TøsAn'Â'¹¾dڐ‰Úð$d:£¯5 dž <ŽÏLP2‰Š&¹¥ÙÞ ‡òžŠF€ˆ¦ñ4Å4LT@R­lэ^ÛR^Ìï8fvó;Nt‘ljGO–ïâz¯Úª£RP •há;¥ 9D€GxeOÄõAþ”IH!IŸx B4XD•µætï Ž}rú© `®!븗®V×â`<­¥Så=å;EGôbD”˜ )ß)8ç<ƒ]8ü€ˆ )úY§p€òŸ€ò±ÀyBŸmŸ`֟€ù‰Ö¹¿úë\Þk›Å­sxµ®oµÍöõ®;ÿfµÂÈþµÀ?ŸZæÿõ­qò’šÕ K#W¿ +õð¹ÛK +x]í¡ž2àw êyÿ¥ÿu'Ç{]D9¿6©+Õ°énÂeÒØ´·[–ëbÒÝoí×Q …6_—]DE¨”¿®¢.ú›ºêMýuXNÏëªe1iþºÈ'%Þ-àÊ,IN‘¨ð$;¥Æ{^45™~p¨ðk¼pð¹i…pñB¸x¡\?.ÛM¶WsoÞ׈ü(J)pzW¨ô¯ë[:‹zbü¤© }V@Ä¥`‡`‚—Õ¶Œúɍå“Ö²_™ns5 ‚?}ÝW1Œ¹³ãƒy† qý#tWÎ=Š©]ãüŸ‹\ƒ¼nè¹®=/m:ÖK®|·NóÙ&FÖËBËÝp%¢ƒ‰À—¿ ¥ï6rÿï ¦Ã:–fê–aÔªbRÌíÂi¸M3ye3¼²ÏÝYg)‘‰eŸÛYgöÖYûË,ÿì“5¡ +KúÃgÒµl¼²\ë#â„lwAҒæ}&0ƒ/30ƒŸ„ ópƒ¢pG8dz¥›cžX=5ý*üå zŒo/xy›Ãç?7x}#à7)yªÖC•~¶&)5…‰xi}±¦vÆÏ퍡Û›Ûö |Ÿ,ø^Ÿ¦;¬{[Y¥]îd`ûçò³5º¦—WN‹OœŸGêÈQhÓÕh¤GŸVlò‘‰F­ +Å'~M*[©=RfFK)蝕E¹íŽIHŒµ«Ptº¹µ'WeRI=¥¹PÕ ôèՉ"×^—!·Nm%GÅŒMYö$6z4£jŠU¢ŠG«ŒHj®£R ¥]« z#â|Ù¹ ÏÕ²r&:0j(–(˜(Ïh +9¢ ×=šç³ž‰b‰‚ŒñF€£š(=žh³Íy¢Ï4Yæ‹<Ñgš,çœr͐&¢X¢`£†C‰ôGµÞÀõqn &ã'™|kt|;.Ƹ‘„àÇ "-Ç¥šÒpϹó„ú`"ü¶øê3†ÜÖ¹ƒc¬ ~UsíæGr¾·Ù v"Ÿ,4ö#ŸÅ°<]-¨}æXé"“lŠâQ¤ÓgD®péHºã¡:zLÐCí˜ +¤”P9RäMÆä×çG6˜åvo ¯Óà)ۙ¡¹wJ õ÷7h䍮¯ + —rôôWtù_¸WbÞº:^ƒBvíqÐ8àjªÇ”õ‹Q¡oã:µë¥"l#‚± ©]ÓY»ÊE_@Ä÷F†)ë +ž†Po#µ9G|aÑ/û~×Hùs7D„Ìõ…µ€4ZøÇÅ~¹é ð* A<½ ð›AqρZçž}›ãÂ2L‘êé˜N¨ø°³©MŸ²^aS÷½…Oÿÿïÿ†Z!(û´i¸ÿßnîêZ’Ô}©!M€kk@@„Ä@BߒԖì5#@DØF“L &Òƒm#QK^¹$z9\prI;»£œÊ〚o¤HØ0#m„‘£†7©¡‘²7 †ÿýû÷ÿ·u¡ŽJútî¼ó-ë™%¹|6w\½‘Ë3:»à½à·2åÉà¹lñ»ã¾+—Ãsß}—2ùoš{»Ã|·É|×Ù)õš[fÚÆž$fr™J ?[‘g§þ¢/´eeÜËÅç}YÊÊu».ƒ»‘ɎQ •ÙNw=ŸS—øBÁ û¾Laé—Ô7e.šÊ–5µ“ÿØÉ þu”ã&ëfÛ¬ö˜!O?þû)Çú9ïÞP²ý”§³e8ÁM…Âë`³Õ¸^oùïÜ´‰ZËfR/íe÷«Ï~Á¨`ÜÉ=aúþû?¿í§ŽÉ y1xÂÞí¦B+‰l¾2Äy]ñ›WPÈ=wâ—2*hïˆã Þ*]µe©¢Õ•ð95ý-sKÃNñ=âmY7OPV.íf±§-Ÿ’ó°Bɫלl |˜”¬n²Ú& êÉ?Zª¼ $¿ú¥.a­Uúwxv¢T)uF³`iRW†#Þ¤ûDªÏ;Œ¸€¡¨\GN:é^Lb…)]=EÄþCÐô‚܃ƒ(*» ÙÌG—n¬ìo[v´§9W¿Ó¾|ú*Ì/7ÍN(" :“3µ%…š•XÚÆ#±÷±‡gâ+v[3Õ%)¼q.ÏF:Ñ ½3pÖ¬öeˆ[†Wš I P±ƒ0žE¸Z›T‹¶~úåÒ±Çë1†SãþŒá[‘[$9fcpVØWaÓ åk:é+˜„ Œh¾Î¶‰mÄM¢KU\+7Hd3½*¶3XVŠ®n:Z©„Ï49Ž, ‚uV…¤Ò¤.µ\ÝúÕ¯w³dŽ»ëo…FÕiØÐ á[:ìê°3^Õ³J’SÂ9&i1ãƒ4?*„½;ª “võJ“¬ØqÚIúC·€À½z¾ B<Øaol’-:*† :' [Ø!ã¦EëÁ ¡¼÷êm ³Ô7D¾XÝéqW Á˜Ê›£[›c6F0Ý,ƒÞ،Õ'•7#æ|vwGÇØñb‚gô&Ân}¾Ÿg¿`ÎdÙæà͌ußcX*úCãÈý;ÉÏ* ÊѨMQit'òƒ¸cSñóÀ%ì“°Åܼ²„ˆkˍËn›â…Q$YAì!q: 3¬u6w= +û„o‹ó‡²•ð¹¦|˜då㠑™lòwÒÀgÀùØåÆ#< +úóp=$Ý«o€M‡ ’<é“Ξûp³½¼'oáÍ®¼$y_G>Ջr2»­‘½â–òQïÙ)^LÞcî§!3Û=ïîNBg6¸süIFee Ðà}²¿+N¾ږ(‹nI2~–pƒøµ`¯INmd{UÅˍu°‘™U °6ˆV’rB".t½»ï96>k¨ù©áØy¨[rjØçÌFÆMmƒuAŒû3É}V´-|µ… @P Áõ-n–¨{çò_>í×ùéÌ ¾j÷ì‡ëeÆÈú]¥^˪ &,+Â/Zðÿ|z +X{¦‡{èGˆÉ±B çªø=14]Ä:69êˆp(•õó]Q»ê¼z—=8½¹˜›3B”ïkº„_¶Ï¤iIü†ëÀϙísM#Qèšh®Rºi¢R›:X ß{ ¹`€™`W”¢AzŽ…ÄõU¼š°6F##ßkhü[b[]£‰ù] ‘‰w©>ʯVò7Ê«êœÁµwöœdÈb~Ñ è¼âGI„ã;'º;Ò|Ð-ÞÝïɼ?=IBz6%~ÇAl˜=ðoЂL!Ñ×ÐgtF„zÙ¦OdãÀÁ‚­õ‰AGt f>×\ôc60ˆò‰AHY„¤Å4_¦²ùC`r0‡{øD;^…[Š#;Â/‡’*IA$!îfDÁ‰ÉV ãòÁ•$Ÿ$ݏ¤nŒLѺ1W&èÅß Ñï3FèÆU¦e(ØÔžozÞNÏ6ѾÃû1#'+Nh:þ š³PØä€óc¹7½,X¤‡hg_K‹ø€¿©“Ü÷pl¬H˜ΜDÊy~_¦!íØêÎ@äVV§Ë‹:êˆlðYÚ¦ÑãqcÁý÷Äïy¬ÿoaxú‡ýöÂ-õlˆ¯· @`-$âkäE´9#腖óƒÇx ÿhÝ |“t{Þ!º2{t6¥7DöÔÝáAöS]=]£`oõ¦ÿ€Ê‘ <œX9þÕÜÄó¾¬,*µVE+§f©k§bl +á-[`RÖw &ÖwlSu5÷4&H†ìì5¤î!M¤ëJ;IÖ´³· ¶Y“«ZNªÇ¥_XÄ-MÝlîqïk$®SO™~‡Ã‚ã£üœ‰ÉËóÐT£áŒ)™_VÙi»¿bª¾®|pëGxpûÜz­¸™IÞÆ¸¹ÎªNíU!rù*«—È뗀œ³Ê½ êèÁÝdTð\؎ î ƒðY#®Ñ%¾ðÔ‡j:ðI’Ýý,ÝvW“Jr¹,¥›0g5³½‰ úU,å-Rvm±û—iÅô^.–¥c©Ý8‡¥?M6+ÚÐefi¶–ãK ö±U|adâ¦ì¬Àb•Sèg0æ¬C5zq{›ÏÙ|LJwqbê*Òª³Â(äåzŽÓŠ àgÀfiÑÞÄØå·ÑR»d7üý÷6m_JîIX$¬ié F%õՂf_éŠ?Tpa’åv&xèÍdgŽÕÏSä„£%ªPH‘¹1=IÅB$Í†Ìø,ì>ðg,"TdLvíÍÖ½PÒJÌlL°¸–fÓ6›'¿GT”7IÝÄÛ¾YÉO1jV|%éYÜ+ ÅÕpïGÎ UÁE+/![½³%/fñ¿J§/¶øHÊÀÐ)ÅùM©¢ËTŸ.òmÁ><í(6{6 Œ²iÅz¨´»%c@á]“lÏ£á½Bv(V$I™) ¾ëÝèAIx4.’öÔlÙ$^¶\üé‹ÍhòûÞˑŸsÅUääŽvª™Àdóhl@f™CöO= r;'Ÿ‘¬ê9ùÎbRªô¯HÖe ¯Üg¼? j1.ø6ódmÛÞfwÿé>¢Ø}“g‘}Y³zHDNìüºµ®dfqºu«\ÆÌã\-ˆs2޹šØ$Qi)ރ-ئ69{€=¾64<Æ[³UQåcE)>TêCj«Â€NXÛ¿$—Ä1-M ¶˜Ø#¨Ú‚ÚÀw䛚¸GviIwù ÕÝù2*g™Ê 𳉠YkŽ´d"o¶l«r`4A:·ՋBnVtøÒ4Ãvƒ‚¦–¹fd m)k¥}î4BT¨4'Ûïl©Y×GäŠ PFì‹0æÂ¸•,‚#0ٍ@äC:ýÀU©_õÂýtIˆq>{äñÓ1Dgi`ç®6÷¶à¢Á§EZ(‰­Ê¨HW~ >h5֊‘Û&„Uqh¡pá,J¹ý™æ³oœwpjîÝ!ÝÐB»¸îÞm2oC£ÜÚÙð+ÝÝ/މ>ï¸ÝôÛHàñ‡|ü½áÉY§»ý6ifë,œ_ C\“Ç4f‰ñ)Y£Üî^NHR³U¹¸‘¥›wAЯ¥Iß 0ô³j¨:Á±¸öŠ#mR ñH4{gT$³ù1¼ ŒLh V°[efë¤-¶,#EÆu¸6u¹õö`1wu©ö_ïÏ E <„+~–h•lG(ëžBeŸK€ÊT wq P ]Ôa¨-ì܊]¸‘ý‹+¢.Ñ`°!åã‰!óì(ØðÛ ç’ÆØuª!#d—½¯<U¨ó›kpç;z¡óªÞ×G÷V"õ°¿`ƒ&ú½Ôʬª±ºî÷¬ëÃÉ@QF‡sjÙËÀ·E¦ñdϾr`h¥; ‹~MšÁl6®½$nÆÕVÁ´ÆåNF…œsJ É×1ÉUu«9]‰²›¬óÕÙ%]3 h±h‚¹çJ´ €q)Uõ¢Ð0¾™°Æ©‘ÛE`NDf<+mzÏ Z9 †ÇªÒD¥Z,âՈ¸Zls`­Äo±·Ý»EÝȄíÛW{W·¾A-@,÷'bÙ߉޾öÆì`„w %< +Ùä*²‘ i×Ù±Es g¿ lòŠÙ´´Rµ+Y•ÌÛÔ­&VF׬Ύ@tÞ¶@2ÄyŒ±²¹ È,Ù j†@…ë6¯~?¤|ƒeÉÙ!c¥A¼sU>3½Ä¦Ú¶*«!9Œ‚ɨ­T”§¤Ê¾ÕÞáŠ!¹’U­˜ƒ íØ€÷¯ŒG\³v+ê¶ðªÉBJÀGjC3”½3®n®EZaVç¿g5X=eÎÇ~øìå…i%¹hëjµïƒ‹‚xüíTbÓeÜøYÕ¼L :·‰gVñ)² ›ûí'ã+·ÆÄžÀ­ëñÃ`Vý{æ·ÿ£mŸû|Ÿö0F?Ø6ÙùŒ?²m³ãÇ$Áréáÿ9¶Ïö¯¤9ý:ô5C_~r~ ßíË×à Y‡-tÐ=4̤ÀšS]ðφZNÁ4‘1S,Wi¬PšòïQÉ¡ KxbºÆWe4P½â`ÏSö[V ´ÉÁ +ÿ-Ý"ƒ™Q ¿[´Â̪jÄRMÁ¼ƒs³¨EŸñ°­3›&®³¬  ­hïˆmD„cÔ¢àÀBН#Õ ™ã%­‘P딓 0©›"/¤~Œ,a4x†zQz޹¾`‰ãëìÄ}œÝ4A^AW]gl£r4+êåÃÙ °ô~a!{ õ¤¯Ý[Y’68¯ØàXf<ÆéoaGaÁŸn˜*ÏÓèÀØên@Øêva‡g¿î€¬ß@RþÎ~“ì›<9ûth8Fèê÷¦èÐÖ£EÜ¢›¾7E?h•¤ÒÓS›5 ‚:˜²ªÜ<ð,e¤[Y—¾Òæ`¿”Âeó¢@¡ñƒk`Û<šbš°€ðR}–¹OTuç¿~~l‘ÄÙ +YAƒçªçÊoQ<ùÖ%aڊ+töÄ™+Á•Mû¼Éœò§,¹úñëBõUö‡²Û҉Xk"²^[*üÅ»²€-z‘±Õ}/Šƒ ±7\) ElTZ2·[hËËBѕ†–¬¸D¸2Ô«_¶ýâ¶-@'u̸³]3§4e¥Ph Ñ‹äûëڜÖ2(6㌰ª ‚ε”©uh‹ª˜;Ë%ª-fU¸=OhŒ7û6ËöÈ ‡".ÔD§´3âϟ…8) ·žy“zm¼½)NUV^ÌP÷ÁÃÑD>+F'`ÀÖo  ýÀоîS•jYIv`P*æülzK&ÙÃuc”Z]:h9x}zÍ6c›ÝUðî…ÐÔÂ@¼dË랄R!—AB?ŠŽ ³x% @‚˜ñtaj“½d½#͈œd„OT#ˆ¯’+G×o·®Êš™uÉE~3 o„”‚a-ý á0–÷?Ìa-ûì$# oÅÿ¹„·éÿ„·U„ÿ„·ùX?é0–ù\øL%¼ `ÇW +é‡mŒ×‡b½ÜÕzµ ¾ã2Ɓ—¥gA~m1º©òNb$;&!ð: ⁃Ûá"§Qõ æ<=%ò–_»g¬c$WöCZº@A—&§È9N,«qR¦RêsDá8{%­ß~õ˜ú‚¼ú‚‹lïh޹ªá²®) Ý`+}`yž³êÛ +ò͐Ü,àá»ÜP‹ÇùçvÓf“bfÝİNfÙþ¸³pP#à H…ZÅ+/aÏR³(®AYºû¿M\mF†_…Ãjnw{ÚY°@«úÁ±º~÷<ò™ôÛΙƒÌ¯Gî /ZT¥×1qŒ7U勞«ÉÁëñœ¡þ¾,ˆ—œ y÷‹¶Îö©}iqõd©ø µÙ@7¥1uǕì1Ž0ÉJnÜ1uåĸ½|$Š =×µu³[qᛥMÆå°¥û5·¦ÆWqfn•è0“÷×û䦦2—7ÔÄ BóìDX9FņÔÄ`GOÁÔ¥“Y‹:Ÿ,af‰J@@j]Ú=íP$¬î0 >ã¤_Åjý&;ÀP¹HÜ;îÏw‰Uô"×Jy¡¼¸ ³nꎦœR½ÁÐ~Èåò¸> =ÙÜõ(ëÞ]÷7\#P•d&Ihåp&U5¨ +ÓÑ¥Š‡öV;j1YЊí†)L( d؝»¡ŠU +(à"⥊¸Q@y-ÄwzX¬…Èß1PТ´á&ÚNÆVT"€â«´±[ ++[ñŠˆ…÷ØHZ TL(­˜E}ŠŠ…¾ŽÜ@#-ŠèQAl:í܌T\( Jîvâ ¤lo¢3ÉÛä†)Q@I%m،RøQ@³üíâ*2WöÂ(>-ÌÉ2œP(÷Q3nM,c¡E±ÅæÝ4߈¢€Ü /ƒeêŠ+Ь¼èÅ^ ÅD+n Ð4±½Â‡ùÁ–ic! +©ýÆ8Yé¬ـƔ~Ž7H¬BÐ°Æg²\=@Õ¹B²$ÄÛöm§ôf®ˆØP‘*€zn€&‰À|ú­ïÿ*ޛTÞ·¦å¾ßýwyÚŸuy‡DM¨\ŠËe}"lìPé0»„õ²3¶Íf £0ôL΃ fÞ4Q×_ÍÝ%C±ôm8¾8‚%Ï8¨Bcƒ*þàÿ RXå£6!¬Çž‹®Éô!øW{‡·î`j¬}ë”ÅóÜò«zT•Z5UçHé}ÛU®&€³ûÎÀ!x¼èøç®# IžXEIV̳ PƒEÙfÓîQº!F“À´’ Lp³¬¹r®•˜{jýÁ|6Î3›ù²¿GÐ +šÞÃ*”ðÃҎUÄrý|ˊà ؑ6‡ƒjp\Š„³çvMpù@—-rïôr" m‚(HI\ñv£v_°üb¦3QAiwxxþ÷̺RǸ üVôÚk|…hX8£¶Ò8\süÂ·ÚÆ>™Î‡BÃFâ§?MÕßÍo+ª¿™¢©¦4S —4´´•,()éØeôTPêªqùšœûŠF”Yý ššH0ìé44—Q ߎÐ0Ðéªò|µ4î)ó´úu54õ ýÛzéፖ㚞åc¥ÔÓÔ¸¤£A- M%˜ÙƒD8óôîᒣÑR0§ráùz#§a¢¢¨¨Ï4i>Z“GQOM£$ ʖw;I£Ñ›-©³ã „Ÿ9Næ™='ÏRQçè˜gsÔTÝQãØ ûf·O¡riÆqÉôD|yªzš—5È\£— )éBs§sRi©þ‘ÇGá ZLèeÛ:M&;IiÝÞ 4ô>›1ûÂð™ôiÞõæ‘Ñ4x¸ì fxØt#hÿeÜWÐB5GÎ@sü+€~IrFќ‘´g%н!%Äæ­Þ¾S +Kù«h\P'½ë˜·(ùŒõ??ˆãGu®5 gd¡ |œ®¹JØH:q‰ÅÈYg¡{B%ëŒ =‘†B)d-ºOåú3éÍøUÀ¯p£+5¹ ]IºÂW÷>zs~ füAæüûfÿŠœßF 5u´>%"ƒç:”0#;ª<î­ Ç£þ|Þ¸Òºy¿…>oÉ Î«òÌéþøÉÍ÷‚ÍðØýÙ¿ñ½Ý'üoúi>ýOߍº·H Òù¨ùÁ)6ð°È2¿û›O¿›âJo‰ý3|AMñò›ã–€ŠŽ4ϚèTu†B¶;úþ³~¨ó|´`R,jFw5Š•='øÒ~ÀôŸÈž“øÓÒ~¿ñìŽþo^ +­æXfpÚ|&pÚ|&pãC!3«Bò3:ÏñÌüɽ›ÑBYÈfùMòg›Øo‘þ™¼h_–= ò§ß¿}ûï§ß½ôoþo‹)¼¨_ÃoÁžoè¿×7ߢÃbûñ¦ðÜ<+_WƒRmÅ!'$¨Ú·‰6âê͵üA¶¿-‹èäKbú‹ßù&õÁ«ûñ¦r›â‡wðÚ<¦øƒÍëFoÿÏ̛âƒIéџ}4Ï|ÀÞ:¡Ú_5Ыü“=Üß3|q¦ðß¾4Ó}Š“olÇT<¶ÏO¯òÐþo‰ +‡ã3”Þ:‘ð‹éãÕ¦†÷óxÒ~[¨ƒÂoþª5õ~íú¿vŒý_»F~¯Ý£?Wîџ«÷hÏNoÁoà›øZO’þ¬ßæRs„*O×àŠ“ù9"¤ý•ÿù©?Õóé?–Â'õX¤ÿrÃÛ¤ÿWÄ®ˆ>ú9ž¤vÿm}Uùf{¹¿ôÓ_«çÓ_ åÓ_¬GýY¿Ï¦¿XõÓ_ú|]éÍøxÀÜ?mX÷}@nÿxAöMI¨W\†û"©€Úg×áËpýSopü:ò›×ŒÞײʩA‰¦ý¼Ê¡Ü5ŠV„y¦ÿ#ù¦ôJoDfü1¦þã2Ÿ®CåN…'ñ(vxÅfÎu¨v/Í7CøsLþnaB!¦vó…æßÖûÅFÞ\<¥þæýòƒIü¡©? ¼3]LñR‚˜*Oòx?noܞoÀņïøMërʽ~ª‘Ò>KT/ÿ£Áá'7Ɔ¯ð!»É¦ü¦†…égø%Cµ>·Þ+Bþiÿãʖ¯ó]óÍñ¤üP¢i½‰¦{ôҔ:3LøYrð'Ìa•þIŸ™7¯)½yó~ð„„éxKäñå´þ7îM÷¨°Ò}èÚ¿_‚PmÙâ×š¡ð¯^'£T4sûóUsÿrýíé=pÓ^¸ÒýlrƒM±vqªMŠjã=Êk÷Ié=v¥RàG-§ÍWþ=Hú<ÿæÑÿ>oŽ-§ã±zô:ùÀؼÛOäKÆ¿|5 ÷ÃgxjïfÈu¬?žoçîœH·[.¬|PùÉ?Í7ó7ù³%¸|üÁQŸÁ«ü“?2oænµ¡n´ÚO¿‡;³Â{s}ß +E»e‚½ß +w»áUV7ÜF6Û){Ÿ¯á%-˜òüË?ÀešÿCTðîí„]ß I»jRÛ*ÙòU¿ m[¹i“Ô0ØX¾û=Çà¼CS1þ¿ß¯÷ÿÙÀ×~ƒm +ý4ãÚVпyò¤w•”³ß±”äj»üîWu«°‡djâ.^úʃ}ïø|ŸªÅü~c7úVÖ.þÎιŸà{ÚèOñÝhÖ{L>Ç]PÿíŸïeíõÞÊ ÿL î¡?_=©À`œœâ uýõ).Áqäõ߄ËgݵMìeøÝ絙âgzV™l.=¿:c‡§ª‚qå`}‘%’±¯Û– D=Z$8Ð8”+ÝÀX¤!>µœ¾,æÞ‘¸p±Akk<ñ»<ù{”¬5(h_ŒT\þ…£ëDM+ kþëc ù“'k4$Ÿ$÷ÏØ|“,I"±#†»ça#Z¡úJ&wo“N­y„»¦éBߺÇC£©ùÁ«–e–™¦V„ÈRÐ cõ§EÛ r"Ö)ŽÔ†€úv‘ÃÀCÖ^Sï§ìZÙºø Ion –Á¥(pjTp$-0-®4ÆáÄ«ÉՉÍÛ(sÈÃôçԛ jv‡qX0.*:ÁO÷+;x{¦o F)òX'}Ù$MívÇÌRª6-þÙÔ+yÙ¼;¶fNl,”ž­þf¨™— ‘.Ø +ä$l~ä[a·Û5{d/…‘íáÞÀÁ»ª;7 Âä;ÛMY¿íc¡bÜ»ÊsXÌÃ܇¶ÀIaÜÖ0­éèÚrُª,aC~{Úúv $‚ƒ¥¶f,@Iäրúe·Øï÷‘óðÐYâv‘dð­NpI=êzùOF:ÎöÉézò]²<íh.Ò¥Þîm¥gˆ=-ºîaŸþ*È=7ÏWËck.W· 4¶ Øñ–‡"öðWs§ó³4Ïþ¬P3Ý+ûÌP3úŠÿ•Š}Š¿ÎÌýÿÝUÊ`Œþ_ò3?}ò«¦(=ñ•]1AïvGÔÜÊ@±AïlªéŠ~|Äo ]“¨UÎbƒØ§ùî±AïRªâzìP{êrØ ÷¸Sø™Ÿ¿ÈSülP{õ-}ÛV6î“øšh¨OÚf +Ÿ©]~ešT àñ’òé`Á;xöV©„ +Œ'À ñÚLø™§#ºSzÀ”/AMÓ:Ç·¨çC¬<=L(p6ô>¤8š¼5JsЭìüF£ ·§Æ€âµèq5sjU©Ðr•B’Fj9Ðñ°»zfšþ;Q·]Fµ ß÷<Áìø(GK¨tìùUߟïÆ‹ÿ–_åÿãËGuå̏”›1Wâ"€ñlûì¾S`ÚkºÕv{­æÞB‡åuìµQH\éâ¹ÞOüfÓl¥5[ŽÎ+ÿ¦ŽœÃå‘þ¤>Ú>ªq_¨ÑÓ½Oɟìù5ÅVûÄ@ëç§ïò´XEÆñ"}&¸ ,Ë(’“좣§æA9fgMà†"·àMAÅ?ùso:ö•Ú[ +Zí/|oÿªÊ·J cí³7þÀßû÷æÿÙþÐßö¯~:Â0¢]–€«™;î“ΠoCmCÌ¢³“9‹^ºDIN³Ð5~°~ò$äœÜêt²£—å0Ó±¨°:x“êc`ÐoX‡`­ækf»l§ü1aË¢öLÐL“¡ØN.ºžM©^…ÙÖM_æJøE ËtáÃ5y?&•ª¦u4™ÒH}€ÆN‚Àh#J¡¨ðKç[¯t%ÆÙ%á ñ[¢¼”YïûªÆè–7jîøÆâ]¦§«“pLìgÌìù²ÉÊðÄ7}ÇW¿ »¼>úˆ°ç`\ ·Kë±ny܀Qýò:­ˆÆÀòÛ@(0i/i©o&ã†Ú_4ɺÍó /[g{›ˆ”ã‘EKÚ9áÜC´vݐ…–ü٠܍¿°ÅíѲF³é ÿÏ7"¢ ØZÁÐðyšÏ€{¦BÕÞÜæºÖ ˜’^éôeÂÀ^GöÊ =“ ^+ÒÇl€ÌX6ÝÖ)h«Î¥g/M|ÒN4y> +iôôôxç)»8]öÀ¹GL4`˜\1ÏsK_"‰ °ÊÚ@áO[3&ØA D@RG™·Ð%l~FÎôìOù„–̝’Y±p£”Ýu$+©‡±ßCÀޓAÉm‡Žu5õ÷ß2-ÿ¢'ÿïxž„(¦±þ÷¢Ÿ'ú½ü½ü²þ†ÿìú)àµAmº"¶|VݱMx3L®ÚH•ù´—ð1÷Otaςþ/xûD´ÎÅ-0ޓs‚ut—œUQ +j…¨¾?SH³Q¹ãti±C½'äÏÇy-U3k¢·O-]“!ô@ƒÕ I«á¿ï¦ÿ¿þþƒÔo.×ü²h¼ÔojƒˆDr¯Ô_0€Ô0~#@àPznû¿ëuIßÅ1Kˆ¥wº‹%S4ê˜)sž!hQÛt$=–õ v,-P™JzlæÆóÒ¸‹øâPE*ì`ÿy±dÈc÷†p»l©kE·ß{F“³ýŸffI’I†d$˜(,k$Á\ə,ÈL´FÖ¶UY  ¨†` +ÁÈ,ÌøÄUª¶µµj´+V¶Ä £ RHPH ZÁE~¨ XF3ïß¿ý÷ْjÑßo·u¼öï7zÑÞsݼçº[Ò½-é^_os{{ÑÞs;Ðޟ»{½ênÞ§·øiÞö¶Ûm¶ÈÓM ê¢h0’ÉÙ@JA¹—M}ü,4F†ÅR{VnâA¨ö³uð:XÊc6Q ~c’Æ™’ï´nE=(ï҄ðе#:z å&[ùÔ]- ëìÛ€ 9ŠybÊ})Þ­?{©N‘`%¶¢5¾ˆØ $:Xµ‹¦µyV3ïˆc¢ªH+µìên©dý1 “v–îlRÉøf)äüiYU¶˜UVÛ©,£ãM”xÔrŽÃL&dÓ<":í.‰ÂaáßïKh³‹´Á€…þ¦÷ +•ü&ÄÚm¦ºÈîQÁœD€&WÔ ¼÷(çQ`š'Â8i ‚ndH“ ŧ×B A‹B'7QÅ j€Àan$3ã‰Y"±Ó]æVã‰=Ê9ÿÀÖbV-Xéüã@èºdšEíc*¹ËñÕs—ôqÃÑ<[‘SÇÈfî•5-£¥žéTì˜ö„›r‚®rïµ.*òâ0©’}a€~båRÃw›¡Ìpet3Ôȓl28hÿ–f»«ºˆçÏ).4§»F—J—ŠHhaeha‚8Á‡GQ,ŸÕ[â¾U,Wó’íCÆrÞlù<´]eL›¥…°Â¥–RÊgÖA’Wa N `â׆‡¨k¥½ä¶%á퉰MJTr}æóÍL˵Å@@uk¾Ò©t0Ž þR‹ô:Gó fëÅê]ëŠ)Åÿ‚ø[ZZ=ýN ê4H|ŅÀÅÔ¼¡‘yïÎ[§î:}šd©à¥<7á‘>¾ì®æ‰Ù9§”€:5*€Ó¶aòîâ öl€FŠ)›—»ó^>&Ò¦Ïr‰ÈnàÈ+¿Gì +ùv…>á=- èÑÓ£«õj?OÚ[d~]’§Š£NÊâTº4¦=uRà1ìÜW Æ‡Qœ¬YƒX¥Õ–~á±¢~WàRŒ—æ_¸É's}>Bs[É·0ûRjæù‹ÊÄê¦Ðˆue(²9ú7Ó8HØç9d£D–Æ.¥íŠ¡'? +µÙþ|ÿ bi—½Xµ­iN>±kFgƟíSÍQ®þý-䢕Þvå{f {Bvj +tlFöêe ‰Ñ/§@Ùü&”,'©(ÎÌÂbn“'Uð‰8%-¹û#D“T²·CÎnýcTvöî„]ׄò”Zפtþ@l±±n¡b¸Z6žÚÆö²e”G89¦Óíw“¬t{©ÓÑúsê£lL1íD`b–žNð<'G÷b¤ÝÏÃô3°*…Eä\¥ñ,Š¯Œ],ÄÊ΄$Ô×ޝc9ªd +0£Ô»ßžJr ˆ"É:¥f„ÜNññ8@Q¡¶%(ɗ섁¬9¾c§i·o$?_a%¨FêixÇy2¸%ɧØghªsÍ̀_ܰ¸£«ìÞéâçOã,:šŒ{¢ (°ÿpr•Ã{ܐ])å‰F\޼z•`Ž}¯Fv‰× LB¸æŸžÑI¥j™1÷Ìr˜¾öÐaÓ=ÈÃ2š ò7s¾ƒÇà÷$PÓn! Î2¤nÑ›sã‚nFe|)˵‚ÈS’¢Æ¿Aîݸ_ +¥íÏÕϵ©¼J¹´šjñR€W>BÃèþ;°Žfœc²½ìÊóžàŸM„/æW—ÓjÞݪÛÜÎi[+•[VݙQ݂ŽLæá=³5R.Z¸Çdꇸ•®{ä؞‰v9ônj··ÄnÃÕårr×!©Ià‘RèJZÝ i®†ˆ8÷„ÖFdKýFtÝÅxö‚¤aý!7àHX]AÄ`( áÕØ^§Æt'ëO`’£ÈrBO“„ ¾”ÞWi“Ü/.Œ&ÏsTf#«Æ-Z:Ô­¹‘î•ý7# |µÌ— [wGZËC’Ȑ,–à`ÁÇç¡Ð1(½ÿ eo=wŽå3Tº~ »¹§N'ö1]3Ýe‰G„H¿úB@Û}WO­!e‘Ökj b•2ŽìþØ»^]÷äˆpÈ]¬Ð +;økìdö®Ÿvl„pæÏ2M> åÀ,·­¹©6¶gºö^ä”>¶˜gc„ÊÇ1î†È+ü6ç¬¸Ō½oÄ´~|˜‹fÈ.W¾—:.‡s.сðTw|wÊÀ8p¯˜QÉ9GçÉ4€ôÂdT2NȎiV¥Z;Ÿ\À[$0Þ¨#-©‘bí¶åãêlÚë²¥ßý¬[±VHՏ wí®Ë&*y·$ +ª¹ àâ¡Y¤Ç¯ëÞz?-Ïp$HǵDÙ°†´D·ê:ì$¢2ñA㸴îñ·¹-½”òAǶŽêÁºƒZ)W`]V6¿ +ˆ¶'~‚|Rê‡~•Œô©Àª°ç™‚©Â™#„ogµÕæðˆ­uÏ/éâÞÜäñoV V&-äHTL²H)Á[²Ù«öúbã痰ÆßìŽÝ¢Ö"ÆsŠƒ<9‚|ôiL†R2äD8/a·“Hbø”Rx›ÏQîšÝNéÚÄMsïóF-Õ`žÁhOÝJü(ñ¼oà) ú40Ôü1ŸÌ ³°Ÿ¬q¾1ì&D"àŠuy¤Ìà´‡ +EJ—Ï&0hæÃ#ä’ kFʾ ÙìÿXF}ºd±h­Æ +Þ¼K&õ«C9ùE»‘2žÑ$þN “Î-~&[ÐòÛg¾~IŸ>±ñ˜­$åõX)ÌHtÊ!Á–†AqȘˆr…ùáoM~HBc.ñ¤Èí°‡#‰½üŠYJÃRŽ ΢0l1+©® ÂGÚÐpú6®ò#X É­Üë!^éqßD[&³2ßK™˜Tòr—3„Tó¦ BU§ÏÀ©’¿ºdO¾-&܈ÿ÷cÍÓ*ÉÙ%±¢uˋӣò M¹7äôèÑÕāó@úœn‰zÖjtì`ê +;—t~}ž¹ +¼㹜ÄNõ Ÿê=õ{“Ç(Ø·Þºî`.€•·øÊÚ§BUÃôMhᵁ“ãϗOqÜ­O¦äŽ\aÍvY9\HëÑU•‰=ŸJ< \-Uó$ùÏ®I’ǼǧH¦£¸+p87-j²ß<ˆ®0 7‚P4޼ä»îµ)ö ªu{¬D­ T¡Ÿ׋&÷ Lõøm§³…)R¸/Z:À‰1HøìÐàØ¦}“ÁÓ×ó¹ÇZ…ˆy|27‹.sܱ&CéÜ먨` ±ØlèÍÝR®’²²{„Úí“h(Ró%Ÿ é‘…æhÁ˜øäwp3$枭n÷8ʗ€Q Þ¡± +tŸ }‚û¿’ϘÐÎuߦØFi‰\•_Ò0g£ÎÔ¼¡ƒAUªy"ÿœGÿ(Ö©äÛªÁd6øoì~Á¨5¯?X¸F~Bžî?a}}—d&±uØÖeƒ4i¯.:ÁYpdvo½liOzŒ€±…Q€Ïžwë…^»Á]õì…?cG’ÉÆòÊ©Ä/"¿VOà*§Lf–†¿]à‘[P,²óá£õ=;CÒ¦²FÒBOëñÿÈ wÿÀ̅àc?Ó=@øÈLN;„Ä÷$Òkßl™ K;ð¡1=’ïބÄ̙Çÿ‚Ç¿¤}4ýíEPöÇFÞEú¸§ä6xo23z›gÖÿŅKäÐN1ç|‚Ï,L-d æþlý%©óx^w•¼}áEo,¶Ö6;þIœ€×,ƒóËjÒRqõÁã”b(¸ÃÅlyán[é*óCÅ|xu¬Yñ/q&|KüI„^`íL¿ÿÌ3ÆóeÆL=vðñ(“ж»UqïṖñÙ ¿nÄ`þX>׎SÆ{«ÜIáØ[&/¸­T›»H*»<”¶ÐèäݝO3Êãä!4?dÓñÿÃÍñ‘ýþÿ½ëßÏÖPaðSýߓø¾îŠk·þž*üXoÞö|ާ³Øbt_s¤–õü~ó{+§é×í»µ‡·e÷:¾ç5éæyÿ¨òŸMQ=ùsúŠÖÊNÿòëôüÔç_´’ó=’ñgÿÊÂи¨Iÿ÷ÀñqYG —ÿO2ú~ÿßëð¢ªt€X8ni¶`¹¯Zg7ápºgŸ+i%æ±-aö™øÖÛVZ^W³Þ«fá]4‡óK$ðà[¿ÜЧéd?½OÈ$U?ÒF,“Æs$­Øû6ñÆó€>?g|#P[sm÷ñ6RìÞNӈˆª~êl´7ßö¥’y¨ÒETñ°ÑU>ÉjHªžÙŠÔc"ZÌ£ÒÞa[ÒÌ­{wn%ÞºNuŽ²ÄêÛÕW¯s!RÝõ–Ôÿ‚{J(÷`å·W#ávßcb"¦¿5H»_X*·@—VDÉCß©QbÇXF[¢¡æÑ¶Ë3KšÆwг1ZëxAÆj v9K©Úñ®¡^qEn˜ØÏ•º[1[Ú'ØÉI<‚+yؙ¼Ö¨ŠÞ_Ž{Πô%Æf›hhŽj¼ÑØU›eéôƒYÜÂÐŗœúŠé)<0›ŒN™Û(ŠßṮ+š+÷œÉ6Ù¦Áf I(ìL‘©˜ÑP!æK—.º6òP+—HXgÜ& +`sa–‹Ó³ÙøË‰]{ȇ\–n –½LÝñÉ0@ïäcÓþ,bí’0þc oú‡g‚Ü\än¨ÂÝPšeÝjyÀ ft/֑i„mrJíÖ*¼¶õømË}Á§È¦oTmÊôùîý8r7­œâ؈–;7j‰U¶†Bz]Á‰t’7ˆ{Å¢aë}4°d¤½y°Z|þ׸TŸ>x¨ð/ àˆçàÑX†­a EáÁDn?¢+i¸„t°æž,.=ìØ|¢»·v¢Ì6íËÚ7G2‡@­òp³áQ2$¡íë¬HC‚ÐçafNáwe$¶Xö€ÊZiÚmÛï•iC[o>ý¡Š@x"F=ª´‘#}=åìïìDŒ|díwӓ +hìÕÿr$c‘Xš$Ü+ý¨‘ÕV“÷•þÔHÇ¥RÉëUóµÞuZ|îd\5‡Ï³Wÿ„ív¨À>&gېãáºU$DO~ˆƒ—7瑲úQ_ŸýqœK“3†oñQ\V)ً%…Ø*¸dâz{—%8—ÿµ8O¤ˆiîÆI®ý*îb!§id˜žo·QÖßj£¹(ƒý”ÀUKÙzZz^·¡ÖµoîЫöpÛ9/©}fs÷¯?N‹½éúÅ9]û°Ó£OŠÿ’ Çÿ°î§cøw߆ÈON/mŸH5JºÉg>¯²´oåø™ï³ƒ1)N²5·z«/ÓÊb¾û,Gâ¯ÿÎN´Þ—º¢ ¿èFÎëÿ—¸/-âð½Ó#b5¼Î=vß+¾ÓLŸæb"ÿ„o¾_¸ Ò6ËÌË!5ÿ³^â’óã7ßõ#gó¶×Ÿ—lHIЀ:S¡Š—ñáÁ³u„%¤CH7‰¶™±Ž{­6ªkÜñÖ¤ §WoRàµïÒ tׂ€Eö«J8T0Ê=ï–Ú¶›Ž{„rƒ.¦iYHšÓÎ2\¤ÛÀ¹µÕæñI¿:d ï×YBeE¯7ÅXò(·K¾ŠÓ-|ºLÉ™´ bµª&:C-}^¡6•*9!ïFf÷›ÚÉ\öŒÃ ® MžìpŠyjÖà"”†Ä˜ e—{}Xÿ.öî Ÿ7öOJ´âqs1€ûÀôãæz—pzPՈkOo0Å¿yìûó%ê†ÆC]{4Œ8=&2*•$3£sHgI„ñ"€Ïr}dL¦e©/Zû‡I5“˜»Óe_ŠÕ02Ì¥¾(°ïz!ô& 7º€H©·hD7'štm`&'^Ë;f‡QtC¶6~ ¸15El «/3I4ñ”ÃÞôx€×j•˜ô©!»Sî2q‚Íðö6üCîñL±¬( vêPïVdf-/Û.GŒ6‘8Ÿ‚ጠ£d0£Å'ºmÚ ˆMfýGZ¶A˜˜,ã¼1죚Îëöº4ÛŽŸêBÀ‚Ùÿ¼rp€ø0VŸ|Ç=¯6nœÔiNNúžM–Ÿ"ÜH©˜+٘7f1cÒ6¥ø.&Ó¶¨H]nŒˆˆtd4žDѪ}51À"sŒ.i6§ÿ±†Ù ìHæqŸB”•‘ B³Ö Bh}Ê&Ä¡à窉©ý]‡ŸþÏt¾ZAT·Y*ª[¥”U-‡“U,uÅRi_ŽÕòB«ZK†ŸÈ7ޔßœßt¿Cm´æñô=ÆÇãՙòÛÅECña渰ñ_ý›Sþó›œtºKjƒú¾D7r,ŽìÀÕj56œ7yÈÆšÚ¼‡Õñ³q­¸‹ÕYnù\÷š&²Ÿ¿ƒßÿ2ªMju¾þüÿó÷Yæ ÁîÛåàÿP.¼ÌLK¯øØ˜–æ¦ÏRo¿ÛÔ×^n¦ºÿ•„ÿæá'£_û.y›,VfÓt‘“cÙ|˜Ï…X h>H X…ðRÖ3*&Û4ú_²äÄ I¢bkÔ¾Ã4qŽjï5l9U,R9W +¶!Ô ­7°Ø…‘y ‰©ïY†úŒô˜‡C´l G¶/VåÉÐ.æÃ_À°Ãl3é9@'ùºY âé^Ü1XV ݦ# ´)Uƒiu¥¡ðV–%‘‘0‘Ü$ÿúu‘O73†ÜÚ£&^u´ÝcÖ-¦s'=Ž¥Ì®»:?Òy-ÇFO"¥ì5b‡Ú«‰2ElEFü£‰UUëÏÚÈA4 VÂÐô˧ѩÑ26=…1){'Õ2¨X¦É´Ž;uVépC[›P*õ­¡ä5ܵ¡“:ü6µ…#è—[0{ï›QŒû-xÜÿ‹²‡Cm596MÐx!ÁªiÄÒp-´ô½Á–Þ¼8+œ:ähe“c_ÂC×ڀ†ÑQËø|´q[d̆WãÚÃ+òêþ8e}Ÿ¾¢?±Q ð†ÁXqmò)û¶s¹ ¾CٝÉmò è­¾Cü'~ÆÞÑ«ÿso|ús¿¹·È|¸0=‚åL¹ª&»tò£ü¸¬e×þ¶Þw§‰Åï›ñxÿƒâµq7ÿçïÝ@ +ÿÆm˜jN—ÓõóŸ£1áê>Þ&›ºö2ÇT\25¶¾=U–Š?“Áÿö²0F ‹¢/ACÿ÷»¾ ¹I|—ùŸ¹|—Çÿzù/þMÕOó ÃßR»™Â’7=/'‚>Ö  ·S qòµøq!Ǥ_Ìbh˜d ¡¾ÿww}6˜a‡0À´•^©-Å»ˆÁiÙéÆö4ÔUzãÌomeù1,¶J4ĊՖÆ{†:K1Úð6hSEª°^-&èFœå0´å´ °Ê úJ­êñi!‹Äýš§p­Ùq6’¾3Ö¼æÉ¤æÀµ»Æó±Ñíé*½eèOBw·¤s!¹æQça#e‹I#ðI_t¬¹kk._üÍ)smÍÌÚì@|iíO†MÒ ç NföÒxŠ(UP6âµ#à3fU€^Oçì*¡›*Ê 9 ™ž-$åm7Ðsxåµ?Aé­’r2·+@.‹aº!ܯ›îzꅨ` +€álùõÈÝYßb~TÛ@ڊæw?`'ZrÙÎ ³c¤\ðY%\¬dí:4Þ0²àyø,§èʜâ"j੪fÖ¦á)OïâÜXðe€™’îAÇn*u½rå©ÿ “¨%aáªQW¥îi&×j,WgÿIw ï ÷£uš²ò¯ º¡é ™@sGì?´›ö}a¢-P^ŽOÙìÍWf{Ýõ÷4" § ¡ßñA$y}Dn¯ä(ˆ§V˜0. ƒî-æïŒ–ãp•ã›¶¼y¯TbëšMŠ·ï¢žù²áÏ}fÇ-.úÎ7³€¹—z«h}A¡Á/$gƒjÂT·ÞÝø-7`&ÊÁiK‡Ó;‡­}&νŽ’¶“…²ê)€ˆâd + +’Cc`²’÷²Óö£„ÀÀô1\KuD°“0ôÂñ̍Ûûv·m€#@e֗ cI{Ø£v¢—ѹÿÄ7ۓwAæ ¸¡èÍ÷ùÍ÷s7sþ–5FÉ¥öø±“œ^è¼cÿâp¼Õ¦ÁAƒ§ÁA´ü)°H}œG'Ž“Zf“‹á÷ü<‚þ†‰Þ‚‡§yïwlzÉØÖÕ+•YhyP·}҃=rJ?ë?œ-¾Ú]Ì|wÍ oÑÿêßÑשùamü‘,;c}òø¯ô¿4-¿ˆ4-®Û䅷ĵƒ¹ƒÝ*UÁ„蜂µ^stª¥í•^ÕÁ­nS¯øÉw&J‡®E^æ5ͅÁ¼-X*Bח0i€ÀbWÿ æ5Ô ~m„ŠT´cõMuîPbZj HÌ£TŸŽÆöAæ¦B¶|J¡¬*y—¾:|•ƒ‡Vš}&pÒÆ,k)e†];•lea$¯¶‰V†fÍO\O²/Xë d\ Ÿ&éåõ„Å–c XŸwd@ Šv §Ê¨¨½b—ŠËŸÂ{´%#¿Ðž¢F®f(To ÖÕÀoXé?ÝÎúÅ;1ú¥;1þwÃُˆÛþE*—…WÈb©Ì‹ùdÂɆHþ´¿ƒôZ~ç¹î»®ï»û?g¼ï;Þ÷¸GôV”qÿ†Ý»ÇmÿÐ0VÿI}wè¼ –Ïìþ^ƒMS¹Ûú—}äÕ{‘­‘Þ·e‚åm¿ñ·þœŸ­ÇëňüÃí¡Ã”í¾f.͇ƒüaopFǏ nŹ7çs!oqñ<̇êV|¬ ïXf÷¬æxQôfÜ/F·™áGøF‡Gü.59V¬›¶wV­SzµRàÁU«QQííél×Ú¶îS %Xuƒ‘ãqrÇF´<#ŠC“è74 K¤Ö#ٚ[ßfœ¾µ¬\9WL–ù]1m²™›…r’!à»%vˆKލÙUrÛç®ß8ã¸/ +“NªÖ¡Ù•s®3SÊÃü-Eà:]øjmkûªmkð91úr[î8åQÝWŽ^”Ýìzs}÷æûöÒÿ[ªêÁ¥bO°Â@eõy5}ü½þ“SawýR:Ò¢Hé¶Vé?ŽÒõL¿>1k¬M§üw‡>“1ÒîòOþ7ëîôwÜ侎5¶6üªÉ·*Gv²ãÒ-¿û«~Òð§uï÷zsáê„­ýO7ü½9ðm€µÊ>ñò¥ãðã#hMÏ©iñ²ä}a'w$¾ù{M ·mÍWs\Æm†@Ûïû}9ðd—¸6Oͤ?N+méϤj–ÃÆÏ½—¤| +2ôÍR;¼ñcQoÇø>÷mèÝY ¼É®SÓ‰è^eû+hsçÎbó“ ÁÂ÷¼óìºÕOyҘz8àK †˜yA+÷a«3bJ–!/11ОǺÔ(•Îv÷¤ý lÓKoF-H,I8éèÅøL\ß!†&¶1Þ4博}j›u©ôÈ{ñµÈ~dvhN3Ø*¼G8É M÷Ú»Ášˆ5¶P„œ ‡î æ#õÝ$¸ê¼šÈ:TX°éQ^"«ß2Õ¶\lnGB¬³ŠîÖóýxÍ|˜éÜ&2ì5Üq‘mö­Ê‡ÃnEh¢ûÀQ+v£8l +á´¶ÀªËÆr¾t`£'QȗÏë¹×ÆèFìO•ØÎ7÷ÚrñŽÃƋ +CcmrË?ŸnÏgæË‘_­|ô£‡Ž(=‘Ó°6 ϱŸ>®†k¥¾/{$æeâõïcÛRüd0&§U×nJV²;>æü-îѽ/¾¿( ¹A´o7î·bæp(:ô3Ö*¦¬œî%ùX‘µóæøð1É Ú2*Av–“í fï”k8Ërû‘õ`?~ì<«+ùOǂGp¯eHæiø%Á¿T(A7½ú.O–ô x) ¢ÑV՞ÿnB ¢6‘ÿi»5ÒFØ&.®¿úɦN5Ëørb½'ⳟLJn I¤`zX‰Ù`bѾ–¼Âtoœc¤]c,2¨2´®ƒË»¸,=y`Këû’dÄEJFç­Î +«?ö‘¢©Õ•IÎqY cºŽs”ìL»Â]¶^›éBiTY„Â41—ì… ø½ H¼3Z:ŀšfjÎIë¦/eÔø1ÕÈé%ƒì;>•Žâ¢N|ýlíÔ%ûû›Õc{Jâ[¼‘§Â…$ ²DlÇ:p°,ûì V¢NÇnH×ZÚõ\D¹Î¶(7ÙB0>=Eòòä& @BG÷Лzn6‹n1w"&ô|TD­7èyJxT¶¦®JŒæþ`‘ Zm{É&ð*oŠñ +ÑÑêÎ8Uˆ*6ÕčSi݅RÆ©[È×Dž»£’£9½-—uÀsNXNlš$S”ÞûˆfZ³¾Ë§Fíöf¬NCQF̬œkïˆf¹æ!v2@Lhhg4@6lÂag¨µ]øbXø°pøûÈÔ´f6è`.%Ù_[ÞݔQtúäÜF2ãÚÅmŽF_S¡ ¤@݄Õ;'®wv2Î,G;µŒÝÐZZ·ÛBÜÃZfJ³£‡víÈC‡ +‘” L×gj! + ë]í +…UÇÖ¥ +rƒ7Öáò 륔À èg:”kh‹”›ÊR,ôP. à±ÑðïU³u¬\ÙXÆ+xµµ-r»ƀêp!%Ysíu}Œ‹­BxÍÔ©¨Wž‡·fP“¨=Ôo=¸V†nº%‰XkN>)øÙ")îà^Óø2"S+"o†g,eh +Ñ5–ƒo +Ïü‹_ GQBé»§AhÚ ,s\ƘOÔ°(Ñb)ë¼ ¨r6@dÒH_Y¥NÏU¯y6¶)®(ú. nÖ˞ßÛkXñsW ^Ü 7ß6›F’mÀ­›Œ}-nQ7>Ý0L8³6ì¯|d|šŒh)¸ÞÞ¼Mí†5Õb®¯ªÈ㝄/f“ÌxŸc9S߯~ùf0ˆK4 œIü™Qƒ![Âºõ+݊íÀgUt0Àihï/ýKt׏£†’#ßGIHœçÀJ±¥øù>:Ý:‰îjjó`³š/÷E4¡u½(8< ·ÃP{ »©®É{Î|Ë{Ûݵô7²¦e›E®‚ö°K”+ò²jð­PÙ´A,Oö â­Ò¥Þ$ªIFÃÆø@U?Ě!ɜW~ò7S1'4Cú&%Wò¥ÅŽ |Oä÷d‚ÓðÒƒiµÆ¡>e #‰YÉɦÆWðèoL}^‹ÌÌI/JQ>+:Ævþð÷™(’ô}éøÆ—>K!* W¯ÁK?¾†NF„¡ð±·û_ÊM|¶‹.ãZú6».0&Îò2 +Ö%ÁNG¯bBڍœ¤Mñ@·SðøBÃä¾ÄÄ·ë¦*ëƒo’‹x›f<yøÁîn÷Ãéd?òõ m·ÏytK€]ãà6ã—àiÐ+°‘Có¶ ‘V²Eöi[|À>¾–Z5ö€7^q턃žŸ®~álØ6SS¸_X5AÛ¦5 ä5ÆÉŽÝPt„®·úx%^ÄÔò{'ƒaÄ÷¶×X–Éävk °à3£ÓY> +ö¯–Éû¸kŒd,Åz:ú¤öH%}™¡½Œ.çN ãâ#‹,Í?Q|É!½Q;êä‰1çv C€J™q ½Bƒyöjf£É ^…%—$žà# Kªä,÷áÉtã!!@K\…Ę‚E˜°¨üaLÄ­ì½PR~€bWšt+XÓs`Ôpà!‹{Eiåþá¦{õrýùT`@G*4ß6øÕ>êæÖ;VÔ¾ÁÈi8÷L€{õ!â¥Rk‚¢ŒYc~•H ;]/­½F§K®ÿ$ šù¢‡çFYv‹,B`F“É©z°%ˆ“ÌB~«\X‘j×;’­— ¡¼)Ô\”`Q0v\ümgfc¢£ÙŒ0¶8©­‡kx…r4°[Bj¯Ž*ã*¨xyUà©P¥ovq-ì²VF<,W wĬŒdK"‰+ << âÔ®C‡ï¥ƒ‰d_R²(!o~ö'gûìϳ$É$‡Ù! D µ$Đ$>&@û0#PQRùl¢Ò´¡0AE°r 2|e[WÚµ­BÓÖ¡UÑJø"µY€ATb2Ô´ArTZ?ÿ¿¿¿ÿþû$ŒDOZ­|ßo·ÜÝß{—žæîõ÷Þç7yÏw7¡î{{~æô7ýéïk{[ø¿€;ÔßÀÛOu¶Ûn²Fä20‰H==jšjg¶«¾ Ž1„Y³™;|‹¯è5Ô·ã|ö;¨)T áh@n~«N$˜Ü/LpŒSN¸~%ÞîqX«5œ +L°pÜr¿Êi‰¸½/ã“n8¶ƒ÷Ñ«”¥¤z¬]V¡?úJ_ƒEUküÅ)¤À‡gš%ì¬ +k¼)f3çº}¾c5¤­„ŠÏӒoš†ÊGé¯  ³7þײL¸ôÆD£ ¼ÿÎôÂâzOÖÄ´ÓxÛ&lܵÕ8ÚMa¯ÜeœÍñ©Í}-ËÂu¥…žþ†\"Èþ,©óõ.>DßÉ*̶I¥·½¯…å·Œ£Wo•.Ùð»(ã×¥Q{ØÒ%šš?²I/»*sÿ¢Ù +SUüÏ•ÝáZ͖Jhʄ·½Ê²\^S›é#ô‡ÛSÊôñxì[¶GÚâ÷BÎŒ[ÔUͽÀL¡›¬)O„ÎðÅËÖã!3– öZš +Ùvmº“[uh¶5žb69ê›|κƈ¹AÓñd~ÁÓñn-Ri~ŠgÞc$H[!4±r¡â™ù¹Ip†å”rÈðÆå–c]tôGC"(ß<%Œ6®Nt€úÀß’jœôޖ.¹ß¤á¤GËÙ@dL˜«9"nûª¬Æ¹ÂÐ=·¹/ ŸAFFÓ K×êFÜd)޼*D +ÜʱîŒíù/n&\P-V‘:‚½¸É‰Æ¡À˜)”lƒ/=h»[Œè°$°•XØ­ÆJônÄ´7øùkGw9-À>F~Ô+HÙ챑M˜K%þLq»¦ÚõŒð²ßª» Çi/TÙf—³h#¢ú‡aŸ®acëak|”ÒºÒ°wžÀƒ‡CßjâöV9ž8@ºc€Ê>ÍPpLܨRšé#üV̟Ò_¶iôP\†h=Ô%nB{Iy q«qV ü°W¯UG{pûÕ§QåÞœß¶ˆÕVþ&âÔ¾.6ýú¥#QŸ$¾º@8îø;âb¼þÕ³wSҖ=Ÿ†‹™°W¹b|(`îªØ1Pe¬AU£kGí– ÅßU0+z–T8‡|+g *öz”ö0ØG-ÜðÒt DñœfAœfðÎ3wá‡ÙšžMŒ$ÜÓ1ÅÈ©æ8Rx¥7·AxðdYRòˆà0D(/–f½3xZ˜Ü¥-‡ê§„Y! +Uï]äñÚÕÒ{ÚÃ{ĕík{Ùù¥Éú̑F•°ú@HädØáfß9v5Á®ˆÍÏÌMÏåc­&ÒI 5m¸¡ٝÃ-î¥#}â$#}ƒ\ñí;æßúv×R7Ûé"oÔ<‡üäo´¤˜‘©û Û#}í¤XÂhä?l÷ß³„ÈH~Ùïþ[,é7¾GûÒo|î–:ÿùSÀƒXÿÞ¦=øÿÎÎ$~•©å޾ÝÇø7ÛÏà–žß8äKO4›%+þÊԟþP…øcë^ä„/‡¦eÔùDâÝOüQ5ðÉxs¶ ?ðÂÂiËQ Vt_ !~€ûtßËeœ1ë<ÔDHj¬zЛíçÉ·¯|àø0‚s*‰¿Á—Ô\ }.•4üÿ»5ÀÂm«kHÂn»'¨Íjœ•kÊåCÄa5 ]Êñ¹ªr­è3RæüM±Gä®j”ÀXÖâ‚Þ”,n_Ÿ÷aDkM[ÿ-ỷW‡²mæ43äá!,©Ì ;0Œï¤1ïX]°Êå¿@ï:­<žˆÌˆØ|Å[¹¼utòU5¯ä*3ó|óGí@ª/Lb(ñ^gÑÃbZÊ·ñ[Õ-Á ¬Áç|dï™Á¬:ô¾î|ꩅ5×dÅ×OëXÅ×Kë÷غØ$ÂÔfo£ˆvÃV‚P í‰zHìÆùõgã+IiáN¾Ua~t=FUo‹Ÿ$ԞDW9d`¨À1Ìãi–4% SÀ.­Xºö±´Ôº^ò­×8ÄùatÞ¿»uTg„­#öՆyÖðªkiÀ\v%éyê5·.hk]Puø4°…ùâ?‹ <ðfµaRÐÓ¯¶]ªìj‡9„btó_îX m;€-¡rlw€²SYŠÕÞL4£í¾–akYÒñ«y¢3È^zx[‰×p ð>·1n1,„on£VŽ¢e»1Ö$Pz3qš +èԇͪÎFÉwvÓ":˜¶½Œ[lÒØ8ôUɸó 厙7žÕ=´Ø5H!;0›¯tä“0ø''vÎ ÜJV€ÆÙ9ªê<êL×*?Öb£F?òW;>ڊƒóÙH¼GbÞAÕxMb¸ØñаÛ4J­ü'<“õŽøD¸ÇMr›‡1?8³o^†y@vq¨x!:ÅÕû}CÅþXCÙw¼+ØC\p&‘NQp®Cëe1ЛsF¾Ì„è·Cr¹v,y#6'ž„Ø…ÉÖìÖ9‡xu¯ä{‡þAÎ`a½ëˆ DÔ¡†œõ¿:4(˜û&z‹"\pô;å*q%¿7k~4XãD(‚è5 +©XmNS³ˆÜ—6=‘Àq°gÒ[Ýq:Ø#W_)©üÂqG—±&FY“©êš›U§}”²‹Pñ:ِ°ÔK'¶µ»¼×óв4V^¼l©è"•)¦Šš›ÀÖppi%…'ƒxžÐW'äì'bôw+8P®ïƒ³ùǰ¤ûÃlÃ0ˆ§ ÐT¥“ÖÂÉ[cÙ$i²s N‡F‡B ²&ÑhM¥I€ |Ã-øm<®[J†}ë¨:®rKŒFoh8ž‹¯}Cê)ÙR ´ðÛ2GA§€(ŒP4‹"‘mۜôd†Ó +j(í@F¶_n ´ëclêÐW˜Ž_¡&áUùÀá_›¯%öÔ⠏ÍõB„ '¸6á5ÁZjÏ»G³¾Q¶ڊ»Ô%ã¶vBݽȔ†  å5Ç- KüÇ; èUCÞ2š·|/V÷…ƒíýÍꡀ­ ¾b©Õv–fÀy¦èߙÇrZÑÁó™®®²óx¥Àô¾}¦éâþq®¨Ùîà¢Ré:åIärõ8¯™:yÓÁ‡])N‘³á7 +ÂìEv€‘z‹÷Ð{C5<ø%1úð)“»@-*+Øc—m"²~‹È-§çcRrH·¨Ë(}ÝñðOdÜ +]ÞÎìèêÛ]-Ž÷¢-ŽÏ³ð͏“ˆñ3mºÉh‰ºVˆÚښ0VŽù¨ð΁!pÞ5g ê2q2 r¾> š÷w„´+ÝP!E5:×¢ ´“Ö¾_ZnNT´“­{;ç,¿ê|Ò¯77Ó>_xöwrª÷‡ÉûG$ôá¹¥õ»H—ón«Ô7{nfª<7b Æº“\gj±¼`ßfÓ{Èð¾sÈæ•] Wþ +4ÌÚ~¶ µ{M‹FuP17cÁQ·õ:ú޲6“÷gÖȇ¯ÙSñ€kω¾íØ-´Í°~ÍÁÈ~š— +ӃÂ0n +ƒ-`FöՎçÌà,v›£Y£„#u˜ÎbƒŠK-õ3Œ·òôLÀˆËäøÀÌÃûtuÄ>› Ý{Æ´ç¡`¹Ðý=!Ë?`ÏìÜ _ʇ/$lìì5jÛJ‹@:I™Ìá—]CÞ«Ua¢ÓXZÛL¿¶Gq ¢ëÐÆ‡}óp +N)䕈È^GbÔAìJø€Ê- fŽ`g‹µûô.Mˆ­!V^§«û +Â¥nø(4 ¤NÐ[LªòvØ’cý¸d5P¡-ÞfsQP8M§Þƒzj„®Às0EÿV.IÊÐ+©GTÿ(µïN¼zÀ×;-Gìöq“xQž¯³7yꈨðŠý¼‡½=bõ¸òžÂ˜žßE‹ŒSWS-g‡ò…KJt֒±ua †Y—ˆç5Uê~×+È.5r f_Á…V/+W±«ÖÔn|›’6 +ÕÖ»O[ci7¤¤N…m£ut@ðîö)Ôl\Uù5ùa_;Oæö›´¿EÀU Wo! ¶Ïž_#ZàÞkU¡ÄLkÂ>è(tÙCw5ÍôL‡] >QÊàþ†-?:±)XÐâ¶Í&J;~-wºÛÜ3Gî@=V/†ýØÜ?sA}‡çáÁ[caø Æ6¯!;æÒµ×‚æƒâxn¨õL†èRóÐE=ç/sðÚË~ºÌ¦€l¼¬ìE*{æ§°áˆàˆ¦„&¿Exuñä¯-•áì#ȋéºá×Gà`Î/å’ö+F©ÆÀ›¨yÖMä=úfì_‡6‡¶ÇBÁjÁƒº÷rÀƒ ¡ú©Š÷ü͈ouÒ½ÞV°G7xä<øÅp©zðñrŋÐ:âDnƒ;kM3fX@ ,|&} ìüSsmä;DÁy/†ð!î›ρ±{:*`—(ù;°›5ßÜý¥ø¦ìïЌٯ° k~Ò,Xqõz7!ŀÕú¡bċ +ò¨mE–n`“‰-Å"·¦°kVbnBub¹™Æ¼¨´zqWIGZxŸ¾³4•ƒÁ²ñÏØ*v‚aÄj*Q¡ Á˜Hˆ/#_6&èOúi}œ l+TÚEä]kÚ°ž¯ÈsŸt¥¼ÂïéՒèÎòâubÂÁ­ðUÛî:ÄBZæ³Ð-hÊ_Þ/@åêúJ¡ùò¶¿|X4ËäížEØ=¡¶Íx•±™Néü’ºÊ‡‘uãh‚Ä‘õ. ˜ÈÑUóõÖL7ö~0Ø^-ña±³¨"=®<å;-z>oI`ó‘.'û†üք÷ÀIün[ø¹›Üoèݨ¥Æ‚Ù}Ÿq˜6#È{æ¦ÛѺ¤)©®xžÁì)=îÈÑcÙÑåH(q‰·kBl‘;Ž…/BÚ> ãá¡Á-žÐþŒÖ펁±uϓó·ëňXÅÁL'¼Ù·‡°Vò>©l¿×ª[.F©,˜ø£Mž?Ê~UŠt>XۃE8?ã™Ülù»|à¾Ü1Òè<Ê¿4Tã]¡»_Ör}ú–Ö|XºËÑû·éSúH‡Ëtšë£5Vzâ ° 碈 ]DLJ~¡„74ŽØP0řósQà P®3ôށ®˜’š)ĵ”E1î +†Ù3[‹nqÂ:9zí)üu¬xåfËïvÚi‰Êr-óµÙ wÚsxÐFBiúX9$ Ä¡QÒ¡~Xn~aã‘Ø ¿¼ ¥¾¬˜fÂÛ˾²7Ä{‹ó ùÒõˆmÕ¾~ü@S!ì*0§’\µôë ž•™ÎÓÿ~F¿”ëN 3g6˜ro¢õö z!®E©£Óù”܎óº ÝÞP=?ÙT˜¿¨l[û¹s颽žh ä©7FA¶_^t{I*ȯŒ»Þ +·`gjáíMŠË3‘%Ím.Æ/x‚ öD=¥ê +·¦-/°U¾Ú«ºoÚ^ØbgØ8œÂy€=_œ½±¨jøÀ®l|tž€¶¤p¼#û–'É]+^žOI„ vn7aÄmL®h¶æUMd ñ ‘/)y¸ú;ѐ§·=ùDÚç1ÂüL'@®ÃýÍ6.Û5éA»ïIWÁSX±¶el{ŠëGAÇÇ1i#"Å¥Ú=À£b²ÌÛf@ÄÂ#áWˆ8ûר8ûÓ—Ø8ûèp܇0MÀHp܆ÿ`ãdNÅüÎFÓ ÍZF“8=]~4ÆA ¯7ÀC8<ÄÛ´lŽÍ õõtÆÊDÊ,‡J½FÍU«â¹µ!—.R†aUs­X–¤þŽÁM©ôÚ®üp¥|r_Ótk;ƒôÂGû¡d=eH(·p@ªúñóyT!£;ëöÅãûÇ,Ëä ý1OâÍB"7Xù6¸á¿5qåÇÀ€ƒ +ÓÍrîP虿t  Ìé1xç°©¯ö·Öw‚ 6üÖCy}&®ƒwÀŽAÚiÊUN hÌóM)ك¶t˜]û0ÌÛÑÌmIØ«‡’ +ëjSÏ Öÿ!b«­0D¯€<òawâÚ r)òúj•;"‹}S“ÉHÑ&¥|`d¬‰nàr™ý$î°œŽRcÒeuétǤ:Êߒ2b‚ÔnJTÐϏՔpexi8R¤þI¬\©S{+…*e› `yJ)•; M|4SJh­…¼ vLcÀì˜ÇÎëTÐïCì{‡uÌ)Rx¸5õA¢ÿ MKžš×;„õj,.Ä) njp®]ۍ۟hî…Å;•Sò€¥PùY®§t™E:†,&Ĩòj¾5™êpgöµ,²´2¯ùÁÌ +Ъؖa£ùÕjü ú‰ä¾Ó*¹°q¼ˆõW”¦¤Ãå%í)\…íSPØ¿¾V$UÇqÔ»ùSd +Jžù×Lï´°Ì§¿‚òæÙ ÷ 8<"õÛ|ñ)~û +®e*8íHôЧ½‹QWºîÉ1aì3LàÌÓãíí´©2Aü^¤¬GŸ>â]ìÞõ"­eâdœ]ÎV‘ä’e›PÔì¾ÑtÛɝ9âžëV´ýSÙË6-yÅWÖìì՜ÖÕ;œÜ±u¡6»b×Þ1uÛÝ1kAý,]q&Àý6-h„/W,¹Ñ«¿|#7q¢8ƒDo÷#Êü#ËÜh-õ*͛袿ç( ‡¿ž7çxþr£?9f“û±¿[§ãàu3‘µ¾×v“ûÁ]w#9ÕÅ{¹È‚MÈM©få|<¶Ó›£n|¦¬ÙÝ{ÅxS—:÷7c +\öݎřüºÃH‰Æ›Œ$YÁ€0£à8ÃqøCi§4îXÚ&ãp-û5÷°Ë¼_‚lè9‹4¾Ú&½›Óà2ãÔ<,ÖðÆìü¯Ь¯v÷sûñ DVŒM¼ê/mú˼hÆ3Þy +QÍhM,S \=»€âä}ÀK +‚£Å «5@ŒZAÔópOÿe±ÄG¯½Aù¢!¢n “;c€²¤c`¥^eq”î\²ÐLÛøÁˆ~HØgnˆäð“)%ú +Øz¸ƒ@áÇÙ^¼¤‰ã™€®’¤Gµ5^ê÷f† Wºš¢I‹9· ÙÏ&Ìt;³8.ý 8ʼnyý‹;g®_bß§÷U L÷s²Eí¾Èc·¸úŸãÉÍw §$ó?¡¾Ãè &`cI&ó§ &y™TP».ÅéQvâ +‰Dw‡aÏ])âtQ'ܨ0r,°Ÿ’jøñ“R,]ÑzâÈ=„ë¹.¢J| +”ó„Á0óÈu+º­=Q6Ùoé.üÔgæú¶EÌM{®¨Iæº$Àð=f&ú·÷pýuOäíð³ +Ÿ¶¦Ø)kMðÏ Ô¾#AúüåÜ fÉä-gC·Õ¨1Ùkí4PaߪH5ï-]Qܳ˜ éÐ_‚ÏOβ5Ÿ‚Åu:¦Â¥7$ùp ûh´Ìú ¤Å¦wj‹B@ QOg gÙF³ƒCòÓ'Í×$Ïò+Ï ¡ØvÎè5UÚ$b@ýQ®ó.êµRc: t 6(02¦Dáy´>âë[¡Ú‹†˜`]˜q¾ÍkÔì<†z e©p9‹’  +*§F“S¤&€ ! AçãÏÂÉ]’¥*/I‡ú®ÿ¥€M4 € õ·–pùz„GÑè¡>öÔT›ÌŬ›>ÿRP½÷!áÇNQ9P·»Ÿþ"ي﹂b302\ +*,ÇۓgÁ(RKiÖÍàãbŠ:âÑûCÃÙA&TضåjŒ~p܁¸‹jUã¸)×|sÀ%¸å{ë4n¨VÒˆ‡™„®òˆ’qÐgÊ@¸…̐QO.µ½}ãý96eI ‘þD—ì•&OŒ;:՟“f‘Gg¤¸í.%¾F*5á:/操ëÊ4.{þ~0 DõçÚ«Y3z™³?[šŒ{ŐI6…ãt +|ÖCäYpknj8‡êAè­¡·¨'þŠÌ)î2ŠÉ wÞ[åGŸJ,Æ@¯,…NÙ‘g¤G¥˜ŸX(Ɛi!ÍqØižÜ?ioK=҈åvJŸ%ïh£Sì’(ÔßøÛ$Nçd‚Þá³ÃCãäne]3Î¥ëvH6t¨“—Â>7Ó1woiøÿ®>7ô½èøßÞ%Z׳ÿ¤|o"Ì{Âù#ãsŒá=oÉIœ'!þõT÷çÈr#}ñ7µ3Ã*¥g1!ǎuý¹óŽuý ˆç^‰/تžìœ1ëçÓ÷£{7º9שqûãgfþ»ïfþ»Þ£‹ãÜ~õ_èÇÿBŽ/ÿ¢§Îź6÷A‹|øð…!ËOÓûÁˆE\,„NŒi›€!å8î(ªíí²#ހÍF¾íƒæx¥GE¼•ÿ™W)ÂW‹LÝ.g‰hÛD‚Î`Môn‚†åsO¯\«HµÊµm\ªcG̾aOã=Lw„¨Á…Ì|Ì|Ž~;ÿª²Îbê=ÿÿZ3Ïuý“Iy[–ɱñãÝóÃï·t·ÏÀ«!Áœý‘æðª#rÑÉKu7t¥°ÒÉK{BÚƒHç¹*±‘w»¥|êe’¾deR¾aœ€×ó(븍~»Ò\¯±îׇ4-þLvÌFÁx#ü4ÊWýÈÔcLï ^23)^0ה¯ %’`hۈԋ咼´½ûãR/ßR7ÿ|þjQ)ª˜”×SzJk#Ê%4mši.‘_PÙFùT®æ×;¾©K£kà«PÿØÜ ÖÙ,»¥²÷ñG¾Ð‰ø§^Íú3¯jù¿æâ>/×çoÊG¦Ò ×Ú-C©§.\¶;ƒã[î\¹J)¿îb›öoû—1Ràþäëb~i<£Z!üÐ%PÖͦ8+æŒ4IXµíZeóŒ †á¶8*›reùÆæˆ= µw2×94¿&Èí©ƒ a/ùSþôs÷?¼¤ÿ&>ß»žÁé4J<î2Þ6ãSÕtô¿*­wº f÷Qóû©¿~ê>ÃÃIÞê6žâºW•v9‹Õ7âÉ¹Ñøüæ“|ïíiÿëè3ݝÒÄ_þ +¶ßøášQáw<ø:ŽäXðKàþ*ÏÅýt:͈󽻧ar¿zÿëÉCȾíËpxSÏð:Ãéޑ.& Iɏ7ôø?ôËfBlº›JÝM)µÓe9Ìîi^Ußßûvrýܟ†›[©Î6·Tz}6·Tz7=çÿœ¤gšI+>a€®_ýMÁSï?ɕ¿àÜÏñ íûŒÑiýžkäeoý(Pa÷å6 é_ü1í|åð™fPßëkí™`÷NJúŽãá ¿à’2ÝÑ=ü·uð²·ÿ>}•Ô÷òÇ¿Øe2Ú}xýÍF‚Z^+ñIƒcM4PQv$¾?»ÞYh—½r*Q|¯l :Ê\¡#erü†Þ‰€ïë èI‰nj©¬Ñ~‘õs÷“Ñ~Ôxy•ñ£Ž†0ç`ƒ§€„Ra€ÈPôÝ¢‰Ó¨ri óÃñ†ŸyŽ{,ðí=в’š»'ÝFÅì@n‹Ð“ݹ½xi¨iySOw¡½M–Ù“²³änVXœå aŠ/q¨%¯jÙ)ÝhX•õÐt_€”øM8Ш:ÀTÜÁÁìïvôˆ´—xöªúBÅ[ßs¥+paÉÝq˜Ÿÿ”Eè`ØeMæiób¹¤«Û¼_‚ÆÜ#Qø»þoABóI6þl(9šËû*Õù€ èl³j5’4÷ešá«ˆó§IWùÁ¸àeg«$‰'ÒZ³Â(-|˜À‰4[òµ»=ƒÞìFúìڏ¢û£ïF¨îBîj ðUϖohp’{µ8w{¡{UÞö‚ÄŽ- ÔYè= œhš®ô:‰²'ç%Fª£W‹”XÃÏñ]¢ s]¢L-’®Ñ¨¶ú»DŽ1q#X~Þ4Ó0+‹çŸœE,¢_Îw¦—‰Ú•;'‰£r_°r‹J¢Ü…I¸#%S§–x;pG÷bCŽÁ¾N'Vj…·Qà‹¦‚°á^Mr‡hØ +·H/~çí2¸ •B׀à{bB6µ ^Z¸‚tÐVqÓf6Yyâˆæ<Úw8Ê2>ŸÍÛù¾E 7ï‡&ƒ\ŒôSï´ýˆ.]˜(ñÆ#å0EÒd$áÄl4BdIöùAº —ó5]”ÖdäâmäF¨lrâ ɳêeeؤ9tAm"¶‹"£ERÁ2³Y4Y²ÌjÕ¼ƒûަs°¹˜OÐA”)鄐ùêK—Y]—cFCOÙÓȘiÇ3‹ÿêÅd˶NÂ>þ%×˖¡‚ðíoµ§AÜ9…Üp£1È«æß ¤r¨ð´Xžƒæº”Ì‚mÒ¡R=Çf[òûaè5Ÿå;®ý§„0\{10œm:ݺýÁs¸ Za·Hyïš_s ×oyóÂ`)í» ‘Áû»ù£³'ˆ¹Ò(õúI¢»…úÞ:êG“»þ°¯Hh€ø!jg{yfÑ.žêµX*+ïï1£òµ<#±õS + “Õ^”Ön¿i£Ä͒¿½„ÒÈÑüÀ±þUýÛAŸ›ÁRѼš¦QرJ¡¿êÍ \O§¼Ôgo Óʔú†Éü}`UŠ #äSºTSp¶füÈJ¼¼QmÑy\ÙDþĶ>Ö] aʤ¿ÇõK°Ôc19²Æ¶Ù¡ó¦ #…)àæn%Ý/¯˜¢¾@¹¾we|À•ó's|úå|—+ææùüE|‹Ø ó»ú±—¥ÀÈÄ.½Õ´¥“ëd’¶–Th´Zª-P˜úÒ +ÎÒ@줁DEU<ƒ@ZÒA¢¶°v÷#åÕóÅÑ\3}—}Žæ.¹Æ‚ [j–‚Z˜¾T0Ly›.8‹‚%oïïÿÿÝïd .9Ç}ÌÞoÁžù÷îÚÝm¶ëlŽ&¾÷d'4͙À*\ï ’c—$cUk¿{Uódl}¼´šÇ°b|ۉ©ðè™0†`²Qék ýV,‘}yU¬7¬9Oh/úfa6xÍM×o€,'r•F°jӝ¦¨ê£~p€ßâÎlÎÝû䂲§?¤î^h gÖ(´ªƒ—̉Ԭîÿ?§uª)ìÄ;§TA½ÊçkÁ¤+]aÚìÎ׿;UH9Ô')vÅΘí_q +×JvºsÂt¦¥â€DAEf2r¼r˜\å[‘s¸­b!㺗eá"1ŒýÙ^9៖µ¢~˜_d¬L¾A&*"÷Ã'Åû¨Ãt±6áε5öölkäæTbm½Q¿qŠã>©ŒR»rñÆÓ€FßڙîÍUlE¶¥,Æ„½¢Úà~¤õ¼§eoTQk +÷2¾O±Ù¼¼þ9ô.ӄmAÈ 7±Ý_êÓLü[oz¨œ +'f«½pV}ûÐV}Û5š6ƒT„Žy6¡B4ѨËzcŸ*ޞ¼´Wó¼ÝsO6K7qCÃì!Z>¬º°Y‘–q<4µ3øŸÑ`aâMM0Ó½©TÙó(ÒóÄ܊§¿wÃyNG#jÇåš&R£$SXÚ_¾¬fßÊ ¬©ù^áƒ'î×½*ál>¶Ð'‹³õýUo¯Üßò’|Ï^ŸÌMÌlÂyìÒzíÈõ¥øÔá‡Ý=AòÝÅ&öL»#ï>‘ +§Ê“üŒž#R¿%³ï¶¬4«€ÚFm‘FƒžÞ3Ç M<ýɀû&“&˜à÷¨3ÌR4ù€Aه¦×’s×ìzºòëi÷_­ˆëc• ®Á‘íû̑ØZCoì‰!Ž×}C½¸/Œ“\]g®Hâ8Vǎ:àe³s@Šސ(RpVcªyϛ˜-ÚÙ,¸.„Jo¼5úØ‘ýQkChæÃYý+,€’“‚Ñט8±ó pYÏZ™ÐI“¤Ù[,Ò¡F¹G I0GF ÌXM*xƒI«½&ªøÒVÛí"D!}ky2²¤?[œƒ%r£„i1扐1“ÐcÏ7V=ËuV›ƒpWHóYö;–üŸ-’—¢2¾ãé ?a¨06»°Ð”O¥²P +uµÕT)Iù­Î‰íeP«k¿ TˆïÄ»×]o‘YåèFÌõÁË'ÑÿÓ$Îý‡V=b-µÝ³}®ýÂÑúzUÈ¥ EÒ†Ôþ¹ 1éΞÐÖ©/§G˙]é&Q6ÚÁ‡µ+à¯Á}dI;‚8d&rÙEãËñõóÉ\D^(ѯˆÚÝ7¿Õ6tb}ïà›cQ÷´Aw:>Ý :ᄑ\‹…O¼„¶º”ÚœÖè˳Öùºöš„·&£uƒcffiJzýÒ[E£å¨ÂÂMÐcDñk4B‚îØîMìëÎe6P`áܒ4èîEÎé*W߬?!ÁÃÍÆ6ƒ ß)ÁˆfWvbnýe¹X÷0A 6¤†¿ë¥ñ¨ÿXYƯ¼3ùkòЖÇKbóß\)äÇÀQ²2vcˆô^‘5kdSM=¼#5ß|MÒ²r ªcû‹ð›bæ˜[ÇùÞ3¶öBnt%þ2Úü:ŠÞbv¿Ã"SG ‚WƒÉÛ5ö£mþڗÞüͰÚèšÚ×ÀԁüZq\:ÎuÚ$¬¹&?²²º‰Ô}9¥B#^)j +F—EÊܲ½y¿@¦–•Ξ +û­«â\êDŒ‹Ðè„/¿è$‚ó äÀ>»²B›ÅÝí&æH¾Èç”î¡3:Ñ<#rr‹hå¼óNS¼hÑ`b„ïã¡#œ¼ç,›È¿rŸ X#ÆjÚõ©âý•X3©9Ÿl¦ÙNˆÐê0ÑëˈŠ7ÞG¾Å×o¢_Âu“X5ûäµ3䜹~Ž4ì÷Q-wî7âô¦å|_cìa5oKƒ. ÿ¤˜Ó³Á¨ ©•þ #Égé^X5uFMðÙɸB¸ +;ﰕ޳u智¶•Ÿ*³D×ye%øÇñžxAð[×O‘ –wŽEå¬©Ðђ Òˇé\i +‡šéYʯá̦áPT8싃fnˆîŠ=eFDÿsSìœS +f}‚çÝ>wê|Wÿžx3èOÀ"H3çÚEÀXmÜHÍ…TÇøŒ¯ä°ÔåÒRuQpÍÂuqèI©×ík—˜g\D Éç÷×mï+\yûÞV¸ÐÞòµÆø7¨¯é½IÖ/i½Jì@•ú(‰êo(‰ÛÒëÈÀ²À¶§.˜¿0‘Ó”£±6s8¦ÅÖJ”ŠzÝûc¸xì-?)¾Šl3ƒºP  n”@ÜkÞe7Zñuš¢<+›§zC¼*˜#wÂï`vàW8Ðã­_ŸIPã±òΉ<Ô-5GËÁ~"‹‚*žÙÅaë¼<¤Ù7ûDÛ¸M¿°›yÂÐr4U>ȑ[/¹c EnŽ +‹KI–žÃƒ#ܧ#ºNWºM¼êmýÄÛϖg|yžæfNº™iî1iebžËgш^vùK+ àåM¶!̍Œ„"Ëúæ%¯É8(æá¾äöҝ°1µ4ÑïˊmRnñhï©a½:R}´@!ÄÖ? ó5tOÙ +ÿº`’ÃÙ~Ú^*–'ù*¿tˆ£É ¼[šm,vÛa<*óg'S ¥R±æ4ï2üüóL Ø?&¿6 !~JÑÎ~lဪvu“ìyµåyI)¯FUX3¥×Öm¢óÑøØ =`ýn?v5 •8öåf·),Ü¿¥oÿÖ@e……{nD¤·ñ͒³îGÌù~4 o +ÿ´÷°žß;üŠA™Ì£›Þš¢ýĨkâDE¯#z§PתਿYÅQz¾D…˜¬gʤ[ÕQ@²âC[¶• n’8¡6«¢Ýb/µtWš‚Áêj¸±»¡„¢Ç‘·#\èʐjj¸1ºØ1ñ3PcöΦ”ÛPå-æšn˜ƒ¶Ø64‹©ÅUe>Bn¥Ý­&´©¹]N +Ên—S„²›ØÛØ4ÿü +5cÿ*8tþÜ{âdU².Z0t¶ÈÎAÀÕðâÏÁoóÁ{¿wà^”á!pË´sd.Fp›˜€¼ì¤Q=Ûé²°[õ”[ÕºE¦Ÿª„öÞ.P9†/FB® AçFKC¾8mî‡ ~’ó]•’áôô¶è×|ý¸×Œý½ h¦‘‡1¢·¥¢¹š4nN¡FEíÑ´A´>Îý‚9øÕJ m‚öv4![.ehµ_f^šôÏmáÓî¹ZIŸãûôJ1´$hsf‘9³>A£ÚªP¤Mš§JÚf +fø´³²ÿþsFÈFȲG~òV5N[ s`¯k-:sÀëÅ:‡“ÿª\@ˆ2º‚ü|w $$†x½¤åhñÞá¤ã:b­h}£TK¹qú/µ–ÆmD¤ Ò×ÍÛ4ߍ ‡ò’R/"Hü«ó£6ÍÌÓ+ÅA0­×ã Ì_Ôö­IìD“>üq|&$s`„bф§º\›àɍQOnú×äp¢Ù´}YÍÑ8uDŽ>â¦mTö°V†é´l ¨+@¤fGä“Ò·F-ÒÁ¸€ð»ô™wÛ#pM´Eéú²r8PLA;  +¯äâÉ:Óõi(۞ê›Rº”̰šÈ¦àó2× ‘7,Fe¢¢º«~2¯ok¿R­ÃTZ'1"ùڒÓ!£FŒÜъ)WãMdʸû<î?’™M¨šþT ÑWÅ +É+äUɟkk»qG°ÓФ£ àß*¶eÒóÒ¶@»t/iS“t<Ùӊ¯– Òb5o2ê3 fD–œ +@^IÑ+îèàR¶O‹ nuúÙ7W9ù´Ñª“|Ÿ*±Î#å§Û?•n“¥žf“F~J«,ŸÓõŠ?_Ù´TÙ͝ë¹>À´þ²jhܼ™³gWX e‰ˆ¢k6‹¥VLÿKû§A¥ýÝdzú9¸³Àó7Î"ÉÈ`}Íe Ө؟§ G ö€Û1AZ³Šªê┸|èÃÿÃ¥[íÙ[L„ÝÆGÃàÀÛêÄj5±8)Y=tؓ¶…#øC¢!k ‰¢m?xçF¶·7:lBôgª +ÎÓ~ù‡OÌÑôkMgÙÇT<õÔ3UÜð:»qg©ÃÒÆÁ§ G¤âÍØŒR bŒ«/+p›ÚåvGÒ>úvଇŠªþöµˆëY.cÕü³Qn](o×°\&˜¾ž•œ—‡‹r­©“u80VU9SŠÿøM•Y¢)Cßáh¹ÊŒ­¹.¯.ÇúÙ^^TÔjþŖJù ²P§ò0›€ì3—ì”,4•x܉ ïK/ÂAwìf34œ’UíNrbJ¼`?¢…„µ #ç.ϰ’°YB¥z;c²Oéjl5Š5¥Çêí"öZ½´iÅ,>¹¸½e‡n3—ù ÜUl8ӑ¨ÑtqÒ0 Ì®lxÀ£8E­8rO÷OÏo’I¾Ãð±Ù5wÏäÕ6JýÌnÖ½9ÃG…Áò'pcç }–„¨à£·°& }s×LKJ±]ÂçVT¡޾+/L™¿6ÂXÀ>£ÌK<.ºbù©a:¬±© £Ü1‹Ð0B/'øÃЙBЇæ;ÿòÎ .Úòð²_xn“tL`^Öq•óì³×Ë3=j)Á84±j±†šE±¾ñ3…ÚÆ˜7=QdU]TgÅmé£j8Nç8ÒYeoyï“rœ×µÚÃb(üCÍ +;î ¥åsTÙÁVxA´ÝÊ»ƒ!±?¶ÅÖòûbï+€6KŽ&“¹‚w®ÎD„î"æÃ"\Íí¹®¢A˜œP½eâ‘pô‘[1܆A„?\R-¤{ǔӨGçõ[#öÑEí„©ÖP%—ÊWB{îÆê +JJËS¶ˆ§?bT­Š#Ü,bÞ'í‰kûDR{Äû ’m—ÿînhš|Šg*éXۏxG ½$Pð’°HÉÜ6âsv’¸fýd¢Ð6øBOnþy¶‡§ýÂÆû»><@Iv~dpÀÝ­æŠ2¤$“•´;¥,¾iTÐѽš-&5Ú0o¶VŒ‚R{ˆ‹ç6OÍ$š’`Äü9m†šÑю¸©éC ÷<.µ™ë˜o+cõ_;šÜ·¡*Gó£˜Ñ0Љ€êMbæâÑÒ^£¬XïÏÀ"Cñ¤¥}[e:¬±»½f#’²ØoÒÃïü½KI-£KÛÁ^2”æ/¸ûŒµÖòX†>¹=4…ý«#ÐïßFˆ¶Sª,ҋ׏¹ä¹äo0é<³Ð©{c€åñ¬hL§P dëer `°™.GÖZX¨ö­æ¿Mð| ŸÚªó°•1¯Æ¾¾*8h)6CŸN°‰1ò9UéJ¹¸€;¨§¼Á¾ÈmcNì +”SoxÞ"ÔæÕß÷ëg¨ŸÈÏP-’l¶Jql”ëégd…óDÅr Ò!/ËO¯° q) +õ’±[¯ö“×Þ©'­OZÜ3”µw܌¬™ùåt{h ?¶Qy¤§‘í_ÈÏáhñ؀Òay¤]çQÀVµÔ^ÎÛ¸ØÅ8o¸ý!¿ÅÆÐ¸™Xñ +ïÀÈßLsK´Çö½£x=[â}eÆ}̾`†zè`­’µFÆû±ò2>ý÷ˆÝ »?¨zQe6*Tls¬G=Ù,ºuŒóð«'Å@‰0ÜY6 âû*¤?Ãè!=Ý×$^öè½Ù#Û9þ@¬~6»æ²»xt¤cozðŠ‚çudÜ ]sùq\dh#8FZ\ÊÓÈcŒØÝá”O ^½V¶øØ¸†PmÒöx%‰ETƒG×÷ª¬¡aô/²QpÌ$Eñ'¸%.ÈOÖFsµY7öºš¥WOõÏiö©ï0Âæhå9qÔN'¾T§m I÷øk,¾˜ å¢YÏè¦zT( Ú~ôË<ˆý`øv¦O¥Òe¥ V£Î/[åBY¥÷ސiŽô 쎟4Ñ/ÏrLƚU¸.©@újv:¥ ‹è£«ç`}B¬R¥êz¤hÓÔ4AlŸÐi‡='k+&™`L ‚K•r˜\œçzÏvé¯ ¸çV} +Ç´žæ7Ë ïÏtÂÀ&;Pžÿ®•“’PՋ¤¦(ÈÑü +ñþb›MªŒEFãMÍ&W_ÂÓÙ*ؤ¾(wôCL»«ä·8án×ÐWѺ $>?_èYˉo(rd9€Zõæ÷}Bå[? W¡–-h•ªØÜyåHÄa‘®yE!ƒ“ŠÇCä›ß““áϽrÜܒ«å«RÁ7Ea0Q¯dÖM•&ՐHdº01ªÁÂÛÓÏ4R±@úf?_Z]ðž?“.F8h›{òÜ)ZbW¬ñá 2_%͆ïkL¿vE!gx^jC·’*WS¡„ôObu°‡x×¥4ÏK…k].:O«JÆ:UŽK|»J΋­óR:1MyÔ hymðI¢ßÒÅe‚¢€P#ÒÄß­×âS¢)Ñ”­U-lj¶2»J¤Ÿ~RM¨mr¬tYÞbWƒ‰Mís/™/((¶K¡ITùÁg•=&ÐÊݾ:McЍRö[µtÁ¸ba]P®~=2'$”ù^qA7K™Q[(â8>T¦ØëwUýEz9w¿]õ;NÙzç ª­)Ü«L.Fä3ԇ_¿ÞÒ~ößfhѼ¥ªÍ’M³ˆåŒÚ6±[Þ!sî¥zl<”ËÅ·=TFß|É>u[5Ÿí„æJ—ܰZº¢­‚·0“/` )!˜Cö[„ýfUÖ=:5Èú øÞzæåȌå[H qP$À?Ÿø9²Ê&x‹ÀÑï2(ÞÀ»þ”Û4^Ø]n7ØM¼MðËV¼ëQS +§”¿â==rõJ!°è!¯«ëró¬óUΣè jI=0o!á}>‹~Á„h¢\HLx9[Ìðú©B’7šeQ­2±ïŒ’®ûvhXg?Æd•yáw›‹täÉ"N°äwnÀ“ÜŽÂM€?† ±T÷~´g(ûé¢õ„ýû2Kñ +8#[£F]9֥޵Àû†Æ²§’£ƒ,y‰fœ—çÁx„ïœüY“) êˆ1s; ”¶J+—‹ U‚¹.>¹†÷{ªÅ:F¯·§¦>4•9¹¨´Ò-,Ð+Ρ‹Óå[ý¾ÌÊ­}à3ýz½)Éìáæ')øåêG.¾÷è¾)iþîT ÌÒ]‘:~£gàÐXÚaUÙ|1"q¿nH2ãœ:­pM&µã2Gèæ:}·>>ù™N¤3P@jŠ >lz8Ï£ƒˆkpÕØƒIňÁ›¶. _Ïz]¶Õ«3î.…”g/ ÷76Ǟâ5—–“çª7Íjº%VªÃÞs_mތ.dF&σÜ5ö§Á¿1”k‚ïi¡äü¬awM³„X„qæL÷†–ÝÈIï³:┠Ø)溒äAª’»Ãɰ ¬”c UÅp}ÍØìT¤âßä˜&ñ¦ï %¥”C™CÏÐMôÊހîÖ¹u8/mv–wüÐìü͒éq"e"g)åÌÃad +Î]Àèäfߥù«±T³r0Ÿ+ñò9ÏÖ_ì!ù0{2ô»Y<Ÿƒß+ń¾þ$ø‘°¼;fѨ¸vÎ/æó®±±ñ´sïÏønxºnwr>ä{qwbCw~–@z¾Ì¿WÁÊê3(ÜHø!ð-óf¢‰ÙB¥ë䜿ZúE{gëÿ ØkúŸ[Ä̹R8"l9ϟ h‹M¯]Qð†—N¿ô¬{ê1çŠÙ9{ë ô܅fö}x:DÁ!Ð\£òÅ\´Á£diæ%,TsÐ?bȎ :ɄÄ,3S³f`aLÊäߦ4uËA—s¿ÉA€!LrroÁ@*Ñû ·ÿv!ºá„Ië{øz=ä™Eµ]êõøjèí îÒa“ª¢Þ©lÕ%’rðؗIw!Wð šÙK"a"^:h s¹ßÎܾÕݙ;EåhõYhõô¤PdÑdQ£êl K„¦rôoðш¿vŒ7¿Ä:zH‹cý¨e•Ú¹Ù"ÁËéû8a”ô‘ýÀ¿‘ÔŽ¯ Y…ÖoÍ mþ°Ú÷Öå©!ÎtÝ-Q¬Á˜ñÐ,³órÔ|Ä{ÿ…-wwJSzº¤ºý‰Ü3 Xø£ré3‹zŒ3.šEÚg*SátpÜ_)Ca뎳mªI€Œ)­°¤¢Bòf9Ìau5œXÜÄ*—Q§áT¾™à4òsãÁ@(cåîî»áGòý;òìC8×ÕJ3ו’ã±U½¥“ûlTŒ˜¢eÜz9‚Y@›Šïí© ŠŠ‰õ#†µz¥7!Óò‚ӏõŒÏ¾ÔàQ«´jY’7]1HM +÷Þ¾iQÀõs=(‘s¸&ª ôÐr‰õøBZþꍑ.„ÒéÕþÔîŽJú­~¾#Å|_Ykr²gû‡lýlG|ø7Ūê‘mUÕ,ŽÊë!ý×Gÿ xzM2˅νóT-"(ý”÷ÊkdÕ{.\ÛHf$b?×¥”Ìç¡øFã!½÷@o„kGޅ–!-¸­ÝdÈ͜–øGDˆ pß +´!®öž/mwÃ[€¯ˆŸßÖió/À'Änì÷0c½tîώîÏèwàºýÌã¾e6A޵p€bZ©éë1åæQ Úíª´á‚ t4pj[»ð òr8æThh£i¢T׸¥F#Y9+±¦uï75±æ5äª?diíˆu¿|J•g"ÓØWÏ·®}§Bè#IªºU½Íäé1P‚L˜ašR1?f7ñ¼çX]{ôW:¦›y8XçE }¿ öÂ74xµ¯É° rZa«×FÛ _üÿ`Ӄ.-‹s*·Û»³PðÈ+7„÷Ù‹ÍØj•Á[y>¨Î›ÚfíD`0×ü=s«%'ԑ5xÝI²Û*/|àÇ+°që vVöÈÆï£'r¢°Ë0Úâƒá×*f ÕRâ5ì8mý&m.YOPVò/Z¤¤v^õ&Îp|ˆ‰_›×¾¶VLP¤Àâ«'7Á¿ÇGâžúóz]‘˜EXc4ˆ2€lû$uuž t»ð J›[©ÊU†mÞ·ÂIP2“æAž²[Wµ|"b“©.+¸0ö=GÔ}›bë^æۍ5cû/+Ï÷ÅäoÆÁeì†2Q“ò|EŽ-å]ülB–JMÔjñ¸žø4Òӗ~)êÖ×Óð]7ñB»AžÛW Òuù¶ÄË ˆØˆ~¥hï##š¥Åiפ\ +eƒ6š€ ­žÜÅÂÁ!cC ê0yˆ[u¹aÿÁÉøð—#·dúÿŠÊ€¥Ä“Ñ;Q +(àCÓ+÷B©rÝAðPÔÉ'>þÈûÝ] ÕˆRgìr·Ù¸Fú𻑲ˆ/m‘rôQr®ïÊé‰;§yÜCÖ_F¦…'ãlÅg¹uÿ=Û®øý ºÿþ»°sÄ$»2Nn›Áh-þM°¿·µ 7 %£±Î[dSnŒYÒ>ù½>Þ­ä`·˜èTýš?-!=sHtØR®?·~¥³¿SlÎE,VE…>ÄñÖŸ jre± 0Ȁ6\Ÿ1øR„^t„£ àz_vqw8b¹ÿyÈ‘~øøqEÿÐ#¤ G:îs•È¿›ŒäÏ&¬ÔTp׎~O?æ(îÇfåY9S„­$ÛÀÅ&G×öDPÆt”¹Š2ô~Ùø‰:rSꕎQ¨UzBƒ¼Ñ&âla/Z·›uÕ ²§RÕw +d¾ýLtRCù ©\yjoWªüÞ-ÇÝä_O¥ŒùÚqÄ ¥eòbº*æŸÛ[Äç^ÜË¥,·ŽÈá®[©§ ÑèC÷~CšŠ"`S6\ž^ ª„žQdÇ"ÈL°Z©ÀÞÒÁ˜é>Î`ÜD©øŒí7ÍÔÚ¼öЩj$HÚæ Ÿëäâ²,nÂó6÷%o:;غ¶1@ÀÈ±ÛæðË/)rDZGìl:½.6-ýF–tWÁ_v!t­ÚØ{H¾Ð1ˆ-#ÛE¶Ä»Æ4‘ü´y^‡“•ý³ºÑ°¤ó£Ã̲ø-"è´pñõ>ˆÐSHuF±N8E·Û‰mVFí¬Af¼bj”XµžÀïn|sk»h‘îKjÀ« þù .ïl)dÞnۚ¢³}YC9ÊïîÃï𔰙¥*ˆ-YOãþØ7ÿ²ŸÄl‰n'¨cq5¥¸ŸtkS[‰øØvÇNQX ò.WS[—,FÏ7FÖåþ‹xÝpó.¤Ä–oÞ=¢©ÔK)rp]'O~ՖMV‰8Á9¯íݙoYk€äík=jÁlë󉨎 ?ýö˜´)íØ£©f áiëM“ùŽá­v‡û•Ã'˜ ¡rm~Æ?ž|¿M=¨ú¾~‹ÒôÑZ¨Ç¦Œj¸JÉËO‡1Sœ9ƒÍ՟/¹Ò³»sôהc˜2©JHY—Iõ³r`åpWuaǛ ;Ë7¹ÓœÍTÎë&¯,á¯'‘ýœ˜^ÛÚÁZiwV;úZÎæ³‰»å¶ößúBàÕUˆ†•ñRïn§ÑGí?QÈ×SçÀ‘©t¿}ç>ˆð¥j¿u/ô)ëqÀÏJ«¤&üon"ç ÉÉyé—pdæ}vþÉyáFÄÖOzV¤å'š7÷wÝsÆ iÈt ¯0eàù¨>“xÎÉθ`çyÉ¿q2œ&àæ¡ ÂK­Ú6÷lAìb@[ühqª-6ÃçQ²PS¤YNº!€¶£šE¤í’˜5$)Ad§2ó±ÖD ¤aŽF½A¹\KEÐ!?"9ó“tÁ¢Ï\›<0ë<¥",ø¶£&*W‚§Þ¦®¼Ñ]v r·X´¢‚^+¨´^ÝwœãÂ~T9¤ë “b–ì5éx'Øâf±npÔ¤_ŒOð\—õé…èÑÞ55÷ š4xtš¨žT+„òÏß[~3Ps¹“pï!$ÌWê4}b¿¬yæäþÎqˆ^ÈæÑ?ÈLŒâùV Ÿ¬Û +&ž›M+4⋲ý2Àb[Æ%íb)Jݰ  ê„k±hÅYéc‰!ŒCs0¨9>b¶’yöÂ?øPó͓*n4+¬{—ߜžkZËH­ÕYÑ"ÑMY)Áà%t”y?p¥ü.M†åy{L+IŠ#™ž +?e +aWGÿu+²4î VF´³|á0‰í·ïÇ:bC§Ær©y³Q3³öéšb}UÞ·õM3E g7‚» é>!:ށ¹®…—6WËGéΝæô Øîb²Ç I‰ôä~õÄÔYÕv%1.vÈpšÁ–3/&#KšËêþuŠ'µ©xǽ7w3ޚtÅZ«¿ÛxçñŸ6¢Rež½¦*/¥Ìíê® nïO?IÀ¨Ú×?’׊ b‹X§ +l7-ŸéúÛ–.´”yäÊÃùK¦4’û«v8k­t«¸»ÿný–Z´²ƒ‰˜vkjŽ4· Z‡5‘ËTsÈ"d®ÉÌJsÏã%ӊ4š/xš¡–lȸ›EÿQBljœiŒbJ*Ÿ‘N1é )Ìׁ+C ûªã£è`)óø¶2Aûü?..ý +„óú[÷<”¤Ô>jÿUHÒYyÄ9um1ûZô‹ S㍵ðC0*ǟs¦Å“=xî’¹WsE‹¿îCG×íE)âÅÿé˜Å“»aŒo錩¥ÌütúÐú£¦!VýÊÇ$ÊÍc„H¥Ž!~¹À^4‰‘ÆßȦíʘ¶*Š ̆ê̖†ª„x#]ÙÞ¥¡ÛORГ>šjc!~èD¬ÎÐT³à¥,9ùÍ1Ÿj%XľStÓÍ Òî71l“5šOgaÑsÛöà:ß?[¯È1v[BL:ôÍÓúæ ü¹ªUXƒñÓ¥kÕ}®ô˜Ï(偒ȂŒ¶%é9~@gßԀ|ΪÿhqoÈcdñ÷ø0¾¾åìØög$žob¶þΚ§d<û°‚¢ñÍ@äA1ò–zÞ2ѕìêf3Jž¿isŸ61ì–ÌCÿ7£ûbHùüï[·še¯äÎtTòþšœß¹èï鏼4µ>ºXh¨“_0Ù?dO‹kÇ~Q|ÀŽðÚAwû[~Yçß4¸ÏbM i_Ò3r¢Õ +-ö« ²ùmP‚å4\¼„¦ñ&dšùŒ7CÍÒ>¨ÙŽõ°RbÚ´¾B`7Ò&™l€²DÇ&cç6ÐV%T­e£efx×îm[Kc3˜‹‡ †ýG?8ÅÄ-ßu)'ûÕUU%U'ª„!$@ƒÉÚðÔeRTBŒUÌF¬mnхP®#l„ƒ*ªŠíní]W5o-KÜDÕ‹«  –$Ae‹–[tT@d÷ïß¿ÿ÷ªI$‚6·ºÞóww›ÍæmïKz[¼æszY»ÒÎo[:ÐÎæö3¡¿·à†÷÷द÷»[m·XÛoø„þÊX +›ýŒH́Žbþ'¿ÜÀaêÉùÑïB³f«¿ÇSdBpK¥P`Յύ_¿GGP¹SuK.,øÑ—6ùĂOAkGnz‘„jÍH”nA¡ƒì4+¬¢FI)ë4ˆ7‚ƒ™Ã“üMJ§ ºçp«áXý(éèƒRØ+OÉØ1ù~ê@ÞÕ†ÝóD„ óV«¼3!¼KPKsÒ:‹©€¬?Üc‚x@çlô†v3jý—@ߏ† ºuŠÂ¯Ô݂á@»†ºðyªšCuÿ +Áâvà嶬+V[4¸¦Q>ga@ª8.Ø:ƒ\bÓÄCnö(( ДõªÏµyBђŒ@úÛðìo ÞŸ c7¤ÛhOLõ‰ÔhME­Íž¨žBPý 7ù³ÂµùJÄßkƒ§–7EQ$(;4¢gï|ý‰Å ĎÅG؝Ü/Ò >oA֘ˆ‹k/„ŸOi¹×ô÷ïÍÒ𬇌 !Kºë^þ®Œ`C\àï³þøÐs §õv5)UEØ$ìa¦Í³:§µI ¿P/|=-]› „&‹*wa8šVS_šÛ[Õæãzkµ– îÐ&¦ äX öòhŸ`™$7àó»ÀGE• &H©Rç~Ð~ÌÇ7nÆl« /ܺQtãxär,tDŸ^ÐA[[ƒ;Ó%Ž,éHŒØ~3£ +h؁Z0aV+ñeö j"-.뀆y¥2FàÂë@NxÝØ0 Üâ{ÄlÌt揰5‘R´õpb<¨5+*kEÈèªib#4ª­DzR¾úŒßqòCº â0à +ñy°šxÊ"¸%Í=he€>CùDyØ:‡X-s©þ9â&o¡Ã€g(¾þ¾H¸¡þ9nÎÍïS1?ÍçZZY2á+’wÂÑʜpå«ÐtõáàÌð°þüÁ<Ø»ºBÓ\n DmÀ(Žì_¯£·¸ÍkÍ¿qF³ŸiΧi[Ï´Ò'i]δÕìIÚϼC‡ãa‹¼{‡î°xáf˜¯ ‚³ö±ÊÚÝ㠐€¼ OÝk³øG3ûŒù6 +뙿ЍÁ{q–æ \όAw‚F˜éƒì,\cB±E–­²håvà~>t:ðgG…©êÙ¾È 3ßtŽ›vôß0Âüĺv¯Ðx&ÈàdJ.ÌÈ]ɗي¡¹ûxU^ˆê²…b!uvCp­öü>/‚¦JÑ3ôÝü>(zDx–5‘=ï(W`%5´Â`”Z,hTvÄȆøûDõ<÷¬ ðzçÅö”wÿ\Ùt;iµXy>•©K1¥“:gv«AõúÞñe%¯cˆ]ó†å'îd*Vª|0lºƒ*´ÿ¬÷Ø ‚éñà½Ðò¯£AãÆZ„_WÒ[[»d2Õ-€âì[u°ýª{ÿvÃ&>V’²\Rë9 Û±×܀Ì4ÂÕÌþCÞ~ÙÆ©¨\f‚P¸eÌý2ÍZW ߸uãøb¡÷ï;Áö‡{‰Å603ï\€Øbým¦GÆ /fM zE3X8oٔKEQ¾Ûôzv(é1ë•~¶àÅOìt¿˜€}þq²ÖžÃ‚Pe¼K)p“(:G"`4°Rý_#SþL¸8†ïªÌ8¨ôÚâßp2½÷×|1~¡–5ü__ñê +”T™Ï×L¯bŸ}}W?£þ_¯4Ý{©âØÅZ®Z +@ã‘Ü›ª—Ú)ÕZW¡pYU›â-UçUÉ֞ÔL•‰¸rñrÏÄ9 +ÓÚPÜ|å2x¿b̳ÄQm¬^Ð2˜ª¾Ýgß]#ógØ<3MÖ|Sh[wK‚.Õâ:<%¬@Ê2–´ÁÃb­þ(·eC|4œ¹;¬åLÄ  `»÷6Ú¦OAdtŒ?LݔUt¶@CiÐnÝCE L*¯[̞mÜ`Ba±îمdW¹s?µ|ô sgzÕ¯£Ï½CÈz@&uêMz˾¬¢z¤=Ú5RÀxR¸‡‘\gbŸõm€»¢¥ct]¡zö’%óÇdß k9dŠº3'Sì9'­ëÚÐÍÛfZçs9¾u¥Ó†üiïÁ§u%LŸïT>¯¸ò|ª{úx¤7ØJ³E°ü¡pNÔ|¢ŸÀåt9u0izö™žÛÐ4w¼Š¯v§gmÜ,օGn=©°k’ÄîŒR… äÉþ²Ú&)µ×‰Æ\p7pÿãß]PvNûÆpÿćPTß{ÐrZT”ú íTß®¬‡ÄÇÛj®ÙäÙ©€ÎÍñà>F D›ÕªßnoЁ¿Bû¦UìO0·ÊmïyMËïâóMÝ,´{Ò‚¸@ì¯)t«]Þ«(—kÒÇ{/¥¨'»5‚3M»ÄùÞÇ%ºÀF ì±÷·¬(¡nlµn¡Y:u øÅÔ³5” žJ”mfÑÏe³ +³‰÷™§l^Ÿ¥›Ö)-÷)¹)CðNãØEHã8½^Â#AR·2¡4hÊÝë$uœÀ#-*_8&‹²H4'ٓô+9"¢K #Í;ËÚO쮲!hͱ²¹ã†Xu–X€_¬ÀÚ¡äÉõ@oe"°ï}¬rtl3Ì"ô(W ¨U‰ ">܅ +©ukÇ7md‘©Ã¬‹Ujĝ£8Ù»ƒTBˆ]l 8Z¼€ç½Z„Zõ`A”¾èÓÓC•>ªJ2œ¸Ñ“Ó(A>ýMÌgKºµªbށ<Ãöà„³cI¡Ñ8¦å0}€;ÊìHƖ†û-¹´1[eݛAû.†‹ZÙuFNáceц8(`G/ss2h¶ÊB€ Utã!2 +SU¤ƒwK¾'3á!}HÿlÐ‚Ü +ò6YªŽ«Räö>‘©é‚K²Å꿨Lã§ÁpO@óšéxN†C=™ vÞq†Ù⨢ó*›‡(h:skª?qžL¡†áîÈ1§˜¨`&êԍ־^n'Ö­'¾ +2*Ô[|ënޗê= +¯Ñ3ãîÅRÃåÀýB|±çÕŽF\¤¥áŽ4éXÚʃ¿hoˆ¸œ†tŽ*wOºR•ÎX$SêÍÔf€Å óÜWð±y£Òãë׾Ȏ֐…#ik”yì\Wº¼´<ø±2£Æ-íP>»—p¼c pþÔ|X‰xáàUÅKu¡ÙS{J"Õ~Ê¥ÔR>\^6äËóGkzfÈòˆ ô&V´"E;Rg†x¡IÉ ò…‹$>$ ²cˆ ”ï$ëÞߪ}Ù þ:+/ 0‡†ÎÛ]>¼QûӘT™A<Œ=!Íþ•ˆ´ê¢P˜ƒI²lô{7½¨VT¤J‡âMDI˜ÎdD¡p¨8€OÖÂE¼º]a žfûóSÏØ$ƒ­ö±C£º^¹­AÙ}pî¯¾w·¨S0x {D`ÌíaЎcaO vd¦11¥B% JtÌad‚QяS¤ [A b•uNÂýN“Z/ ¸W…(H™7¼h‚¤±^õˆåŠ÷ÓÉåjÞßRl@5ƒ®Yxb$öÔdN†mSÄÜ3½¤Ÿî¹Ã9ö_ÿ_û± ç6Ï[DŸã1848 +µ?5k©þã”3 ·ç6a?©leÀÄ©YÔ¶ÅRv0Œqzy¼Ø dÔeÆØKEï”0HÏ41ê •Ϳ +?ö:½˜±¡ÿýG²òw¯Þ=—ÿËfcüåé;?¤½#í–½#¤gÿyZ Ç3PyN͚ƒÊxÖvΰ6ý_é=Á˸bžŽþ£/¥&ëݐ~G<€«íȀ«~D_Öcv@Uý¯ì *Ü$š`Á%¨˜%Áþ²ðßûcAg,iF•f±î'®|ʛÐCá{«B"(SÏ ‹×#ÍëPð@m”½âë5ðA"ºj–O%zŒt3<÷,z´rƒT³^ƒg²ÙL®N‹èBèè\LI"7N†ýҐ¯ñ·åÜ'F>yuNÉ ’(]:¬8ŽñÚ*µ‰v×$ƒ]½Áv×jÁÎÿ2A/¿œij…÷Ê+€üôžôHõ-:Aéqè3ÕÆ}0°+VgÞóYœ0>Ü ûuÄÏ0ø¯Ù! +?¨yþâ0u.ýíÃ<ۊ«h…övô ª«ö²A ©6ýý ی0ZËú9‹t>ûžO÷:Í ŒZ®¡²WZ)Ýqè#«½|®¦Vtï$É '¬’Î/BK.¹ )Õ¨ ›eÅÛÉ!·2 ·ú$ۇó'e1̹ ¼Ë Sè¹Ú§1—*„¶rQ l¼šÓ·Ô%“Ú¼GÛ`?£Q‹*ïJ³âYäÝÿϕ­šôô{A#NÛë0×n§î1+?Á!€Y~»‰Yøgœëd%SµÛÂÉ´ÚY0®¶Áw¹CÿTQŠîb¤¯ÿ&¹cÜÊÔ>å܎ÏîKä~óñâýnG$çüþH·îÔ÷Ý»¦ÔuûŒ'‘òäÿmT¤>•’ä1è¸Ò]üÔ×ó£UMéRÉUm/Õ¾u›÷¾Ç_åÿ?oÐ\ÑîG|·#½‘ߝÈðšäïwº9 îô÷(2ê/ÁîG‡·%ø¿÷^ÿâ?Ǽ ]痞^yyå痞^yyå痞^yyå痞^yyå痞^yyå痞^yyå痞^yyçöùµc¶ÓíY'ÿfŸþôŸý¢øäÿñéÿÑÛiÒ£ÌQ‹÷ÿ°±*šü,Hv1½Â¦ªV9ô4þ Ú.½z]ÍìÀÇÏ]ÁŒ»ÿuè-ðî­ƒhÆ]ÚQmUçM‚œÍÖÀa•TÞﱸPNÇÕõéun¡'p{cR¥Ž /ÒAwNV<Òn@ãF “vŸ§Œ>˜‰úyé¯OìÇ ×›!F_çÌíy3@B3$Í,¾/ªÌu9c€Ø@ñe„вAÏ©üÇɅÛ'>¡ïç >kå úF¹½¦ÕûZæë4õÍÖ§ÿ]§²ŒNÇø 1 óЬ>;‹|í„ÃãáZa‘™¬G[˜GXíºÄqiûX£Š²BLK«½dVJ‹äè'`l6R©ú±fµÈ<ÒÄy¥Ý¼ÒÖ<Òî^il!{¨ÌîÓÀlÀîøˆ'ˆÞTnìÞ~Èï'ЁÓMÁOil4»žcÊGkέçXó¯yšyáÆæs3øÈù/3/3;T4ú};Î¥?琢#ùñeò™HǞΩæaæUå̲v™ËJµ¶²Yö/ +[ªnjcõó—è …öaâ+$Ë «Ö<«™Aà:¾’ˆUD ªs=åMDO@ƒ¡¸¡»$>Ç‘‘LâŒàå`žzÚØ·v¾ÈŠ$>  Ȇۚ_]Ì/Ç,$MOz´gOÝ-F •ȬjÖgöÊNV"…ƒ˜[#:ÜÏ^žˆõéìdàæé֟_§Ee8`V@ä6—°sœ1‚3)íCN§œRÕéȜ—ò¼¯7ÊÚù^÷•iå^õ=¦§¹Ôêu5z˜šž&§ÿ\îPˆ¾Fâ.*ükG|™z:ôªðÔ~%WŒãy}nïë!ɝúß)>Ò6ÑRü®*_vOì1_ÿ@Æí•NMndÿÚnësýæî¸AŸÞä1ì›¶úMÝpuɺÌ!&ƒúÏꓘâþ._ßÑÏúlI¤ñ‰ý¦î»Chdß¿ààÍ÷J™nçä".#çðõ$¡åúz\rÉa‚Ã[¬ò…ÔÜÄU’ªŠ²Cù'Y!ú«•’&ACU¦iE’cÆj$ìÔX³—ÙKÛ¬íƒ¢„„똓SX´2ÈúÅ: \‘Í9=j·œ²Cfðª Òٙ¤A®ánvd÷Ï9…K(E™Û ¬)ß©$²ŸAmN„{ aPågJĪ倘-CéÁX.¸ä„4X9.@Ï.­ˆ¸Q"B¢XóB[0 ­ª‹a¯GXû /Œô"s[ö¬ëÁ-õ™›$Æ ŽRÖÈã×è¯æ§f +—-iÑ\ UIø;qYú‰©,ٟGÐ¥+c¹%«Z ^úƒÀ!þCQTŒ\OvlÞ¯q°iMÝ" =îg >>îgA>Þ Ùõ |%aRÇqžà’Ç|@àă¦@Wìåx7· l,| «䆤ÝÌÒìm’¯Ês?¶•i¿lffì$˜üØ;h¡ñÃÄQЦ_6hk`(‰hˆžÊ\âm‰ÐqТdçdh_TVJ” 3ãsMtk +Aq7)<±óZnåGÌÁh2W$ŠR}׋ŒOæšÒøÍ%^ºS¶Cu´«+þx"‰™i#çሸ¶Ó…D¼ ¨Ï~ £58\ n„Ϗ‹ƒPƒMÜň»¸eA{h‹»Ú IÆ"#»–(C5Âa˜Á¨ý‹Ã^-x۞&ˆ¯u^*â;­'²÷Øzëþ›ŽjM/0]ÂQh + +Ë´j–õ݌©âã^¶Å>f+жÅ.}>¨x½¦ä`¸ ða¤¸à!¦îˆ,¬0õèSô4GÜOÑñÂΈ¸ |1ƒE,AŒål©¬+@ÛϗŠŒçýȦA‚­%FÊᤩÀÌ/%úø‡KÆ=¬ÑQ-azlx¤Rf[E†x»_ƒÃ™*á¸€ß ®I‹ [Þ%­bƒÍjÄôو~þµ!'ýÂJVQ¯$´b*òh pp†RÚÀF/@ + J9=¤èFX1Åt²«ZWMéåC«ÒØ·pÐIH×%}sîkV¼®ëÛÆ]µî-Û&mþ¹,Ç퓫XWl«ÆTr±nÙp»p!t×$ۖk¶^­‰]³/2£™=ÜCÒixyЇ»ËJ€4»ˆ6¶¼²|X—Ø€]V͘A“jÌ ËDîÎ=?Ç)>‹ìÓØÄœ]˜lEbÌ=!±‹@ô†Ä61á鏆&9-b(_!äv =ì듼\@ËØƒë;±-Ã[²[Ánt¹Lü˜.°Dľz½ý`2©¡k Ê顸Êõ˜™¡ ®§ØÃéùL"P\“*™[y«aÔ¦S÷'£©Ç•ˆÛ&ö¥ 6‚P¿=Hîo—Ä¥+ƒ¿ÛP=ÅßçÈÃë·(š4/õï Rgà˜â-Tiwyã֓£r}ÊØDŜvK&‹®.X°¶¡+à™ ÷ìM·©º)d=Tu›)Œ•vs)î÷…"ߝC“¿ç†B˜8x™7Ó euƒ Áãôó%ğ”2¡ËßRº¡ï“BËXÆ´(K +"Á‰÷yDõ©!XKÈL‹ÎWv N;‡æË‹_zìƒÓÙVï—ÜI…g<ÔWµÝê?z^n0Ð<†b1AmIŒ»i£Ø«7«–åÛ`_Ѳ)x.1ÄA»ÏµÂɜRв¯è-OúɃ@Óuk˜¦OŠìl˜È ß^€¡…ÌhLµ jZ0Q€óP{d-áôÃ$ªÖ®÷m-ܵª /0}AØà-Š ®Dº²û…-#y÷<åîÓwˆ%eÈL7Rʗ¯>$µ½g&aBòùF›ã(ߐÎVjäÊM¤CyŸä.²‹R4‡}þÕýw‰ã'´•$ÇÿHp5â«Q‘E¨~%¨%ù/á ;ß=j$æÄöfŠ0çÅj$Òj$̊ÔI︆Eÿq^ÏH#Æ%iµ£rŠ¸ÇpÏeÚÛ¬/,÷í}µ‚,<Õɪ±ÌÊÀªã#` T-‚¨3;BÀq:çp¸´@Ü´˜;Õô𜠢…ÍO.oᗠuÀбc%½9*¿½}µ™dñS2[Ö©Qh½b>¬þ’túq¯Bé×ÙFW’ÒKÿuž¥˜Âà¯nó<÷KwãŒl£Ù2–ÜhúïO'Øöñ€€Wm…œs7¸}¶Ã+®û”••ßsQɌ{ˆÈ +_¡)†|Öz’=õêz‘“e­ù½²šVåŽ>æFæâýON×ñ!²§Ê*ÚvP„ˆ+y%M#5òÛ㣃’$Ü¢ûìHÚ ‰°%ët3§,¤K˜`–TŽáHDH•ý‘¸ºâŠ@dÝÔ1=G> ©J¢Qq1½ê0~¬™ ²Bâv‘ÛL„{ŽÁÈ/ÇÚú3›?ɔ¾?Êɋá‹ø¥`Ær‹„´Ùò™Y0N?åg¨QÀÀyE~’gaÂÛ?aݗ´`üï‡nIÊѬº%A·B…æèò H%ç|žT:V(‚ *°î7ӛws^9šqw•A9Ç6œE”ò º΁·ÒbwÛþq5œmŠ ,\ Pù‘¨!7ÅF¤U“ü[nkZfJFœžõoWMæF?|÷cïšY}2×¢]ºƒ¸ó#:ˆu>Ø\£pô§¸h´š#H[mí5¤9]Ê1}+ÅGµA).F-¸ô1üÞÑöå=VÆçÑîžÍ µ| ½x}3–ä€ÿbîo^nÑ©l ŸÞŠ.àJoäcMâö Bž¶Íͼ å}ÁºÍ;KlÑí®nZû‹‡'upÆ\\8Ž ®…AÅGO`ù2 ï;ÑÎ{áœ8 ‹ãŸï„?˜óƒ×¤7èFÊf¹ªSöT»™ÍšB:«J¬м0ˆëٔÜÙ¾“Ö‚yjôʉm><÷Ä-àÚRþyÎ8^ó´Z>;Ü ‰ÿx‚qjB‚ÂŒM'ÀyfêÂ÷“Ù‰w)þ-.ܱ³¸r@Ì¡æÔçª}NP~íN% iEM̐mþŒ»KK#,YïÃúǧÖ/Ø÷FNYR:4&oÆ6´¡þQÅޟ4^ªP`ìÕXL»ÏÊ&(è֑›Aä5(K+#&yÊmƒc ÚQRӓ´uԈ#¤ÎQ(ÒwB5:u±cÝڏ~^¤s ºŽ§ÂöþDjC¿cW®WÞÊŒ¼N„_±%—ž `ˆ/HXv'ô¤V6ð*±LOé +RTëú]4.mBü:YžÕ–•|j¨ÁäaúæÝ“ìD ¾Î>1î½ìÕXxª¾ºwÈ4Qqº½rÅ7WÔ¬VQïñwWÌ´ÿžêî–[YþýÕÓÜßõ¢³2íùe¯0”Šñl Í-yف¼ÒחÂ^ôö_o¹W#˜1"òÙ`§çܟ”È“ñSýŸrˆ b;k¹?˜b4U]TƦªÁvû.Áiì€+¼¶¡f[.ÀEØ×W_ô,ÔÙr==Z”ÁçvÀX“ÜjMÿ–²ãžüÄæÌ[´äвöžšj•÷ê¸å½9·ó–ñ\TG¸œ\6μªÊ/àäv™ëàaÐöˆ÷-¯ÖÀâîíH["܈Ä] bm‘Sº2æñ.}Ó§éõEi7OÓ³OEþí“´³=JÁÌ.Œ;¢x‘Ѷɫ‰üà ^„œqO™d2Nyñ'‡ôW2ÞnR,dyFwxJ Ej JÈ=¦-,—†f"‚øÀs:ð€|ö"LŽÆ£¨Óó5r`oÐù +öºV-ÿð[+ýû/ìy噩l¯óž‘/þ),¯àcv’ÊýXßëIez–6äöT(ßþ¤²¾\oý’Y^²7œ’Êÿ +³»ûêÌï¾4Àîÿ­içæ#b­<þSÞ´óõýž|HËu§Ÿœøÿø´óò±Ÿ½içâc?ÁiçìØáiç÷l?„kwîŒkç_o?Üç;8¼œÎc±¥Ïö]¯Û™PÍwtiÉ]”?ÁäAçÌî#Ú¾->öO@¯·iû^žå3#‹Ráߐ˜ËÊ¡1;(„ÂËÝ»Ráª'ÍÝCþL{/9$¬? øŸÔô·ÿ3d£©&3Jô7Εêü›$ñ=ù&6ªÂÞ­µAfˆ,̜šÚÄ/ö‡–gñQ y¼Fät«7Vs°zF€å5îà ¤Ã~В¼´¥ô}`ác‹µú,§-/ªP;m¤Ô¢Â“óÙÖåÚRF…Qьzdqµ#›-vȉö LÝ'ØnÏÙà†]vtKƒLãÖåºm•. Êlž‚SKpb÷벃¥ç<Ûä5]…õ) /i=â-*E£ qÛfÄ»'‰ta¼C Ã&òÙ>À˜¼wz$ñYlc6~[mÓs,¯}8‡Ô3µŠ%£ƒzß â–U5„M£¨oųÞÃþò"¾M@Dœ†ä%õ$aC,„EÔtš"ý:L{êLQdø‰ã_R|&œFäWðÁY»ÚÙ·7DØ1#y?×Ñ'"F'4jé¶ueâNG&à(s²œî9Ô=“:ÙNJV]*ðø842±¥W!dAYÜæUiZ£y‚5«Î:‡S+à «õ éê½4¾j™Ó7͍ýd×£„3àGZ><ñD¾F,ufƒ¨]Ù¸õ¨#VUb/ÜÅÚdåñ`ÔÞÕůà WQ2NŸÞÊïÄÇ¿Ú8?$(—SiykÌ#ŠŠŸ‘ΩάÙÁ½4i#Ó®­s]Gûä5)a <îq»¥;¹š%§È­ßŽ>þh™¸:äÅڋ|*\ð¸ÎÇ\™H9ï¢ÔÛvz’b `û7Gµ8¾ð?ÜÒcn®IDDš +d¢OéÜъ™é,3ÉÕܼ-ä°·OçÜìEKI,-Ô\ìIÒXNN~ç^*M’Âjyۚ!Raԕ„Ä´Ë}"/^,½íË\mÐò¨Èœ¥Ì¨©?p +@²áúÔ$_·¹ë±¨ü`ˆÐ‚"ž¹Ñƒd/56÷3À z£FãÖ <¡f¿ÜÈ\Ìzè®–© 8 •AŸ@jùÀU F­p}—D†ƒ’Ó•k×\¼¿Ö&2úxr !|Sˆž¦@¢(Wâƒ{¨W* ôð¿ú|ž?óád«–®êԀG`áÔÑ-cŖ:æd}Ë.9 ûb'QSè˜B +‹«ÈZüÁãoõ›«ÚVVëi JpòëKŠ£Vÿi€”®±¦ÜaF½Œ­Óš|Zê;Åê×MµbŒBàûOÉk|¯RIºž’š|ZsêiÖª$9õv:Tñeț,…ö+UY¨Ä0èå†:EZ6ެésˆÞ,ÜjЬÑ灜áQ>§ŠØÄÆEéŒÇAÈF<‰“H]ÂÙÃaÔXI‚œˆYW©eҙ5l¼¶Þ?Ò´fÁÇ0xngÖÇ¡O÷Ý1Nª·C!q`9@§á۞‰|焚´~6g^¼lD^ºÆ7NJx@¨Ï~ë>>rˆM.£‹ VØ!žåª™;*™XºuÀ=N£}ÄêC,sáBúmal¥ìÒrwe äºó¡‹SÉxOÂxVшB„ñ²ß€iäÅ}w*CՊYâË v…dWÇþ¢.*%+RÜèö׀ë.¤ÍYeÝ"®EK\rÊÎz%ù{ úˆØ$bF²-2ÞVcý3¡Þ.o­ƒTâaøqöŽâZàùÊ¿„›B#qFKÓûrm³ûA7¶þŸµ$t$Éfd@BÃnE6e/™®à&*|qõÖÄ>@±Tù#í‡ùTÂ/®·¶Ø–ÄÄw‹k{Õ³Àŝ¤Î×M˜µ?PYƉ¿Öl°ù81:'©ÐeEqBUóô;ýqßÕU­¸#COŽ‘©Íô–íÇ­#ZÑ53~܋¸+$š|[žFªoÏ!Y܏+¶%Xºòm‘¸Ù19©5ýにµ6ó.]Ê.ñQwÑ–º0‚yÝG‘>úCáFpc +p`éýôÎÞã®Îê97¹CXç T!JZ¡ù9räx®be‡öBÿÌ¶êЈ‚™â±ñy‰ ÉÊ0ș«ø£?C¸E՗Š6¥+Vëòì o†eZàꕣÏÂy°§!<ذp¹‰XƒãŠW¸$m“ćÞla¼Øca"= ¦E`Ø``ÍÁôVo.Îùã¦ʑA°¬Á… uÎ@0>¦²‹"Ü5 +‰¸H­ðºBëɟR$”{¼¶¼ +Ô^ ç¿Geª”ZÀZ$®c;I]jÌNTmHb„]D¹7£ø.Šªäž024àMŽScЬýó=äGU†ˆuŠ+£ãù¡nÇåpªUVõ­·›±¸¹åWèñc´b[7V\V.4ø&-¥cØïõAûýèú%®xHãhñ¥ŒÛÇ¢3^bÝ@S¨0@!}¾ðu b‰Nø•ö +ÁJÅɀaéáµ1éï–ñòz±bÊ"òÝ+R|*]æÁ}!r<\f€Œu¥š™1Ó7΍ ¼É‡šâáæž÷o ÷ -փlfºV”w ”¢Dæ‚t^”þÐ]!´lª)ÚŏÖC©cØ *›?&³Á-h„ ®Ðψ' +Lît$Lõ´]LuÜ⼤¢HðE²~ú7Ï òêÚõå!1×9n1ë\…r LÞCO¨̶Ó#ªTñ)—øÖåÍÕ-bX:/—æ^Ãx{U!<=ü`bߦ]°Fmnµ;Ñ­Ò/ë+P +\obžø(•Õ‰ÀÜÇ +’^¼ØP¢<ü€Vç¢EÀ!€*Ö¹¬@åQR·öü±q€Ê&ݚ××îÃhÐAâ÷yØékQ Õîû¼îݜ­÷DI»äÁŠu Éþ‘pÐ%|QéÞ ¾ô¤(æG˜E¤vÑ:OWd™ÑÍǑ…e¿0G¤„™°”ªhلâÕ•ÒA»rù01€ Í¿é~-Çèa *dØnz¯D'5ªêÒuÃæ°þÈm±yFA/Š&]Gè¡ÙçêÞ3êÕõDž]èô »ôU¤ŸEZÝ"µŠ"ý9tWåÁÂe$¼5ºš“ˆ9,’ìWè=§ZøÚ°‚‘¼Ãn¯ª¿¬ ƒº¬``ûÆ¢¯1g'#«æmšõZþø+ŠÆn¯¬½¶Yêûyì åw$®ù¶«Œ†ZTÒ°ÿcT\]y…”˜' ´àkK:‹oíä#v![žŽ7¬¹èe-Pj‚îVpjì–ûL‘Wn¶7àÜwË=0g-Rúu£™ñ´Ê-¨+I«çցò<û%´%iÑ¢¯¨ŠµD_-÷QdVdڗ—³Ÿ@„Cê0Lùõµf¡6¨«ŽçIº¿“ (Ì8°ÿ†1âá̜î•íQu«M¦ÛT +Tô`Þµb _ >ûRÙ"!'Їˆ¿\’#>¶5ח³ô<½š}dbþ!épx¿Â;mB0ý!ňÜ{¢Ãã¸E—0S­,;PÒì 8.A’»ƒWuÙ¦ÑvWcäÁQ3óñüG¼SËH`Š•ÉFóÜn¼~©p¤Ô¬Ñ@W‹%b:\u}=Ãp&X°°pRY·Dê¬<)Ð3$!Ä`åGKYò‚ÏšY˜ÒLÌK €g…v?/&pdM¥O]˜Ú b jۂ„‰pûôBcÅfˆû% ڊú6á1Ku£8b%ñî„JGž=ä{!3Ž%VBñïZ£¥Š/F ¶²_å”Õ§f@hÙŸè›l}ؚ¿0`Tmêü PëWFÕ)Aƒ[€&]« +]i{Ö¡0Å'VwÍãi¿Ê"wË[BhO}]æàäi‚"ªâlÕè…VµU²ˆ«ÝgQÕàXöêïìfîZɦȵ. ­—“[ a”_ç·õÁ˜þ«1«è +³‚oܵ^W½ë'ýY nÿ˜¡(ÏÉóù¡ý‰«cîrs˜ÀˆÇ DQ3ò‰Ÿô?´DL°"3ù‚#>""gô‰ŸD|ïòˆ½·Ø&h‰þïú™Ÿþˆ™ŸŒDŒ¸îfÌD–¬åòŚ¿TXy]¨ü$:}Ĕ"´³>N 3 Å6 é¸X•€×¯+\È5ê?CZ5¯¬<©ÞÈ¢ÓÁ΀ƒ­n ù lF·CXn,>4ûn½ +G˜H¨ÊòÓ¡GZ8£»Œý–QÜK)ßpÑN¥á–:èÝ·¡_Ew<.%“o7çÑ’P“n×ÏPTøÄۛçǧH½V./Aõ^íú:¿Wm+›Ž£žcEL¨é5åsÓƒôj×ä£VZ·êàdEGiNø'äSC–ÛA¾ +e@¸fYxÐÔ¥F‡ãâ­ãWñdª1o ‹r±×Žb¯XZ1Âì¦NZd©ÙÎÍHgÏHgϖÎìúðF)Ù͆%w¼#þ"ÿm=äᬼm¶ƒ« KH„»!„±Ñ­¬«G¾Š{Úm­ +îÈd¢,l?K—‚ÆY+CùŒªŸ¡íIôÍ­Ðwíw­&_Oùꐮµ»Ú ó"ZàŽ€û›×d?Kß­þãl+áèÇà‹ƒmö8À̈´ïaü>qî£`.¨¿5‹֗b‘«Ê ĶۃWæä?«ÃGÁè·´õí}•~%¢G½9½„çÞH’‘í¡<4èËÍÑr7G3}¢cōÐÚ5ô-ÉtM‡§1c)¼£ŽG»ØÿDèËw«º~]c”+ª¢¸(°,Tñ5]š!^ƒð“u+kÏ­Œ ' ¸Cá¼Ã9•åà ’å¾âµÌQ‘^Ó¸[óÇ·Äô›÷ý>ÿ·ïU¿Š¶{òÄí¸~Ê·…ÎN°€Û†?B‰„8CùøAõÈ7Œj +;ƒYxe ÆÂ‡ê£ +„|ÄËóÆ&‘£qlg8|'[óQ{tOgÓ°S,+6ŸZ9glu¤H¥ª¼‹£Á­F‘£j‘UŬ²äÕd rÏæ—ä’……}ë2Õøâ-Ô ¯î~µ6_Æç’ùaßR òÒÉa_¿ÑHe/͖U¥£Óy»› +ýT°³U6Ýà6Ž,ÊÓ•·sh˜ öəjè¨~'!„ßATæj®´¤pÅfQ¼žŒUŸIÎ#Œ?. ±ðÒ=ŒŽƒ´¼õ¨JÈ}N–Q),_]ýûìaŸ±œDo·(åq¥-X¬ Cµc y„«}~hDãaXWÜi˜>dÐù˜²Fu€€8ôN`5ër¿ä TñšX]qžnçU²5¶ïµ2ô„?ûÈ%5Ûxÿñ):Õ }:Ý{}P@ …᫳uê‘p7ÆýÆhIrÇš?à&wß´LãÿðLßL÷_ö*¼8~Š"^{­Q²ÂFæ¤T—l¼¹"„¡ê¹«ï_SubÆ ÓoÌd¦h~—žg/Ÿä`&ɍpꟄb³Uo%ß°ýp˜ÐЃ?Gêƒ$é ¡–Êœ?‚7©aQìðÇqäúq9Àc[q0¼§!ÜE2TÛuªd‘9Ï=¾)íÇ«ª4n3‚î’ç ÛÝÄÖæ*ÈdɎãèü±Âߛ"K…˜8{|Ç '^Vk—6“Òٖ¸F'×I–$î/;2Zãs•ô•åp™iâò²ÌˆÏýey“]@NùžšGDž ‘~f?ꕼ#,²¼½šmnö~_™.‰óŠË‡åõ5†í™aÌÆá +Ø•™Zg-·Ž¡,ÚÁÈqc,“%å…lÇÂÝòFÎô‹\ª±k”qÜìûɛç‡G¡½xÑ½ëÆ´#oÿJŽ´”]n:ð®ëËáö¬[/†<ËZugÉ4…Þ5S’mžÈ×q7‘ì,;ÌûF i™F†Û®Pð_oÒ#ç·§L;‰ ã+7€ë”€¼£BxÞ@L‰Ð>S çX „1FäBy¹;6ÌisÕ-'ÌÍ´_á\–/ ²M®M’³:‘· I:¶·ºˆ†dva›‘l"V"r¥kVwæs5³ú2ð»Ã_Ö¥"&ÖMƒ»„Aoáø–þli#•°I`éMÉ÷)N>ˆJO¤–°©û‰v‹ìM*ÇV){[ŽÑmi,tËéÏ|оÈéK•ˆBZÅWÙ[ðu+±Î¯4ûX pÞՋw,ò.L\ü{’-|H¨—ØYâÂiO +_ïK@)~4³¢—®››]6á÷f#yÎÎ ¥ÎÖEìå´Åà`\\¼´¦…,¥Å.bH +^ÂyЎ'±qócžlC@ z[¦Ã•“$ø@¬Ù&l¤œU$孜ƒƒ +³Á^x¶_ބFqYa8?sÀPÖìä+p¼ë( +°‡ 였«rݤ…a {…V{ø¿þÂoˆw~º/_8>ž£y’·ó·Ð!(?£øó«P’Ò$¬T»™gôLù5‚é£Z%Ï:ťԏGòMT]’“þÖÀu<·ÛÚÚ´Ö"þýí5;aGº—7Z¢+écs™`:Æ¥œ¢"ZD]YnK×ó’yÑUØý9í“äó£±QvÌ6w}ÍG ÝÚº§ñO}Lƹ:îܔp”ÍêuçVo tçugôN +,,:ÚªÄ"î&×ïÖ¼q€ª'Žá¶~†Ä$ê(”Ÿâéñ} ú¤'Ø2Ǹ[Ï%‹ÁÔ93C—n:†‹,% e’¡ìVæŨPë}(Q?}JTåo^Ezñ_5%PQŠ9‰¤@|1£pf_Oî÷ÎGH°ÿÿ:¬ï—U`è!Ž®ªÃök¾¼×ˬúó_úÖgÄ<“¬Õ±¬IÚýd–&’§˜Ö +è$kzÆ5€è1¬?åÕäüñ~xÝ&y–“!»vÜTü$ºÜ’–¸†(M±Ð7Ä3OЁqò²ÄqŠíq“ 'ݟm 1$Í š)ÍÛz¡1b69&öØÀèK9UÜ6Ýk£áיŽluÝ@WPZŸî±*(¬fàZ¸è‹7¾7¦NBÚÍíb„„óO!—˜9Æö`í€aý+"0™,`<‘‡[tŠ£à"ùËn™U{¶í_épäz¸r%¡2òdŒëØÝW¬A3º~íé©Ë +ÕÕ§¾&PäZ¾€«Ž¸È¨QV%ÙÔ÷ؙî”ñgÔOBêúŒ ’:!BþŠe&ÍÕíùúëžÅ>Ûã‚ç³`µæz°0þ!8_Ê8Uõ2œ®gò©ktdxG¸–6Û¯_¨»H§áŽÍÓô¸°¶•›˜øD­®«<–¢âH¸ëâê1+ݙäáÄçÓS“=vÞD²Hñ¸¢»8ÂÜmHØÜit8ºÇq1ÜÅþ£tfçzØÿO³Nï„l‡„ï “××TD»ž&7>D5\f7Câ1E qC$…#ÏØ"Ö¦ìZôŒ-`ÒeT»™5nbÃ. ð²;ÓúŒ)$0¾Ü‚¦fI‰N„¬H!Ž(bŠ¡ðŠ„ÓÛÚf(‰Eô]RB]±ú É &ôgÙk J ²õ—É/s¿¶^æq” J¾Ãµ’®`™Ù¬Ԋ z£î'>ˆ±•Iðz=r¥ÝÃåôürõ +³ÖxWCä€í@î‹8ýrÐp[+AÛ¸û3¾31 ‡»ÝΫ€|yì"åP!Ÿ ÒuCoFóÆHüO(û?…&fÏt¶ß¢ywEžYßú‹µdêÏ 7ןbvÈ[7™:¹ò¬T ¨;ʓ{\í´ÐØ»Yö].ÁÅGÈ]FˆÀ¸Ë"=|D΀£j'q!¼6Á ­s» ®l p!ºöȧB$N‰îù0!ËϙÎ Æà‚z3 +vCp>}ãp|òÔ±Dš•:$ÎF IïðŠŸ£Å\È»R1))„ÉÚÕ bÈ ÆQzVj¨¬<·Üêo$ˆëq°ðtñÞÅÉzúÁõ07áÂuÏA¸DB—öÁ +—ЦÖ5dh&Ü´þSS*áɖu¹e¸éj#RæÒ’6a,øµŽ¡Ò´jŋmÉ¡ûr[íÉ?Ôt­Nwßt¥„Ϲ5uò¢ÔfXø×æØø Wpec†Ü?êZ¿ö$ë¾WÏ"™SIŸXۂæ¶(#›_åÙÖ]ää)–Jع†‚R±9…½Ì¤Û-&L l¥aLndSÇv[„.±N1#Ýj»ÆInƒÒw‹T€VV¢¤÷ ~Hò¸©Mõm…à>_Oîã®×…w™ r¡]ZAGh}u\D›‚zÐM¥wÞ»¨OV*zßÉÒÃ÷H8[“â +ßHõ$à7h˜Àn$çXÀpUCC«‡÷˜À!mãï +£Úm»þR-𑷏hÃBrÌ`#­æm¹_ÃcOn\ìÆ¯å&Ú½~ô¸ yŒ{’ÐG{~Õ´¤½þûœä’K-¶@ +$)XBÄH” Ue±)-«@PäWsÉyÀsuW”ˆ%Á]Îêæº”Ls s1Ú鵺¥§Ðà&=t32”­>‡+J R[!'ßÿrJæn?·÷{æî÷Î÷|ó¾yÞÿ.ú ï ú~ïòïzÉ$qÚæÚÕ:SL¯£ Öà4¸UY¥2Êð'•à*dKÀTA²åÃRd誦”^3ÄøÕ:¼ 1ýQ/¼}‰WNK™p]Τ„µÅùýÒ<à¼WÉǐû ô=oXó“Gøç·â½X/°8 +šô—ÊÃ÷R3Uä8Wg©$—­à®çIKI\îJðV¡œJ‚‰Mài0óµÒü”L¿¨^^÷ðà9ºõ)§½¯X +Oá¾d=q•KGޘ¦8ùè9žÞp Î¥içt·´¢\Iٹā71y+òàH—,òYSI<–{78bþ¼R  íÏq8 ‚‰”äöç99_­l@!E1´à©¡³õ"¬"˦-:=Ýn¥´\Y5qT[ò€ƒÝo%%V×kûûH€—ϧÀK:id9ÓÙP(q ¦½¨%ºSP 3ÂÙ’(Œ,“‘ Æ0ÿAîˆG— 74ÿ}1‚zæ,Fî¡ô#¡é½øG[’;1ãÿXꀯ ªL¥e(‘Ò0ƒEܟÔÐÑwÈáÀç§·9ÙÃàÚ+ÌÁÏÎJ˜*qA Xàüé|hßý6ex˜p¯ €ƒøüí›»ïИ%Yžþ4a©‘* HUþõh!"·5qôW)霉”ùê +8Š~ ‚Åþ5öû™¡7É´Ã zkµJ¯Êڗç™–ñ%¶¢Ÿ²Ôt=MS&Þ³F¿|¡51Õ¯>Á Dzl{ý6ŽwýҐƒ=uZ3—)…`­°½Fð|ŒáùKËÎÞØ ¶zDöòusCõG—È=Íßçfh_¹Å>Î×ЖŸ‚ˆ`.]ãX8îyõqÞ"}N¥}WdþÕaì½éB>׎{û¦CÅ PûìúÊ,qá¿Ìþ!.¢,ÇWwÂ/Q2Û·§ÚèÙª)­teò.ðwä5Uéõš5г lšØ„ÖhæƒÒ y §¬DŽ›UÆd4oA…ÊÏÏmÎ+ÿg¿øJÆc]ßϳ+w¼®1,ïܐkÔ4ú5؅äoæ0%֗¤~ðè Ž¶~Ë ÷ÙTÃàìBK„üvçü|o«K.ì¸AeìHhÒ,=âóé;€IDðõNVŒ%yÍš9³b‘¨R¸>bÃËâ莃Óý†§Ø:*&eð*y•ðhÀ³òòú-֟gÍÆÊç€Ýæu™!> À8cšˇ%óR5š–efÀ¬ËÔ¬V|¶‡‡ÐO˜¯ ÿ©Y, +ʪJþÑaú`ëh±`Pñ+K o2ĕ› YÛێY#DŠMH_Ö¬¿G˜ßé +zç{qÑj}^ø¯$°ˆò€Gü4¡cÓBa¡ÏtKoÀÏ[…]pš­8v–J´~ámšO—MXµbÌðQ»Ð1á§¿†×·ΑfƒßLã—Ù&‹3åøçØ_ÞØS©á‘×°>Ãp§#ÇS6F¹Í~WìŒÁ½?!ÐÎC|¿î,ö†7ÑRpû–ÏÂáÍÿ(›Ž9î9 +«£&[ƒ¸àžã’@[î~¢¨¹AÓ³Á³Žs{®ÃŸÚoAj]üJÄ¢÷):Xòû…RiÈ{˗<ï¥éæwŒúðxoyx•Cû’pò_0àøPÚÿ•ŸBd–ß ?§È¤O•Aö)š5L‚S ñS">Ü †{sÁ¸æµç +٘ÑüDšñäç¤fs“„ÑÜNpÈyi¨‡Ïn88BEŠŸ +CՏñ”óò“ß¶£_­ƒžHÍl ŽRE®¶ÙÖND†ýlÌïS(‰Tsó¢½Ff"’ïí[kRó Žý=ؓ Nod<~”ª¥pyÇì‚☔÷ßÝSx”¯°h°»$;"òÓÝxÆÉ1çøõœô†?,”ÊŸd€S⏠˳ý£iF1óm~Ž›«Ôsú¨êNë·WxþX…Çk«„%2:§Uó3VÌëØ“CÇVCXBŽ<_ƒ”žýÉ©JtµaËáËkX½fZ!©÷2{Šë÷aÜW³_­/q_*^ó¼máyB Õø¿o[¬ž™bëíëuuZÖÞ‘ã¡«ðÐm÷¼„_6ªûÕHk~ãm^³îx¾?‹TƒíZCéâ•ì>dÍÆ\ì6¾JÜø4-ÊËú~ +ŇԠ˲XõÀ"ŽÄ„ÉqÉ?ßu ïž_rØkÛÚmöh–F|;/¾Ê‡ٙˆµ=\$×Ude|þ:ùЦ2Î[UM/ÉGÝ?ß @œø6ÇԒ^¢šzCf è> ÓûKÓÎáW½*U]Àyùðø8ÕڗÎs•vª»ó +ïPZMPKt«ðê܆vKµÖhˆOÊ¢]³ú sÞ!5÷X¢õèfëûå ©ˆ)é.¯NuÑï6ØOô‡¾ø?òtq·> ’­TÀ@ÏÞlê([ûVOù—¤¥ïz±p-z…ÓˆR¦¯m(–’vÞ¯Z|äƒÍ=´_Œ{k¤2öÆ~ä€ü3ð©¾ývg­¾mì¸5áo ­s²NNÁT ß­ýւ½(“%¸‰EÎ{Ñ 7ÊŸ¨ +LB N”ÈÿŒÿý88³>‰ iýê4†x Ϥ%ûûä%/S2BAÂÕò¦•ÛX?P¬r›t6£ÚñOÿGzŠ®ÂÑúpØwÞwö]ÇqÛ«Ê{Z†Á›PššÞS¦;©1˜.öç÷åSV¸¾­xnû?c#û2¡TYÛÌAN ¨¾sÛYâB‡Ó‘ÃtËt;Ù• +Cù*[øO[:ÃÝ­¨1a]¢rpbÞ&ҔªÍ§—¢PàtR’ƒBÌXøú·!‘ £-ë\~Ñ^Ü^©‡€°;‘µB8.rr¨^y™U†C}}\’vT»Ô3ËÙ!„“¸«œMòâàÝíhC£^Ø­(féí(pâ69f¼¹¿a—%Òòðá²Û©Yu\ü)c°U­‘˜ ަ¤ª9Œ*¼ö"ó”…n ÕñÑBǺÚÐÀ$öt8‚:?Ηçøåf_¢‘è7fNJL3íUg0<̇ÍåÌ Š“d¥ŠªEڗ·óø{$løADÉ\ÏÛ¡úQÂ<^·< ¸„ƒN=Ö²·#L‰áТ¨ï;žÎJlf|©h=¨%ÄÔjWʑô¿ÆGŸëÈù¢Hùo²G4k‹„ùÉÂqQ¶êá9 G|ÏÖø{)¹¥0ø8Mø_ësqÄs•„Òø™.†_ùòéeöY}¦_úrëšjV >ś9U½U›¶j¬ÝËfôf"³76ƒö®®.oÔk‚¢du¯Ø¢ÔڒË|¼9ŠJt!ªë(H&¹!chµ‚ºû&*»æ&םEÅM]÷9\Æ2'Á‰õ9Áï ïÏðoӋ–飡ìäW<\‡±cõŽ}‡Óާà—pA¨[Ì ÁPèY{ö¬¿7Ñòaþüéä¼ÑHBYKÍôŠQeúbɸ7fàìˆ ;yœ›‰¾åÆ#<ãCáöýÓ׆ŒIæ7 Kï§àD¯ˆœ%×á…QõV²m—çÜy5—ÖLÊf§¼q—Rhy ~ÍɈ.xÎ&/³1Ec!3ôò¹µªð,ëßÊ[ F`Œ~ԔïÜ`ç#Ö0÷1H^—=ɯkŗ¿‡óGÁZ±•`J öŠDPéˆBc'þ¼q÷]YZ—áCþØéŽ~ýì’ôV×/(™ìÈ>Òß1ὁ˜Y[£þ¬¸ìj¨Ùð&Ñ(¸Ú”h8²Ý³ˆ¦vÏÝ3ûÍ÷;çEF²y¼µçDþUkUkc•€ÁŠ©](ýâ¥XI¹©xÇd²N`»Ë|k0•È÷*…çjªVúÀ»gUš@£UPᒧ¹(¬M%‰û'¾¸zËÔ÷ׄÓÍFÜ; u"aíú‰¥Zûh³ iBe¥ µ¶”'F˜"®ÖªBŸàW ø{!J6 N9ÉHϙy$G +‰/ÁB˜Lhåa'D).`R°§5LÕ( *4…ëC†¿|Ð}¨8Uö¹É/´ÅÂ>ŸïL¸öb(À­aJ=}Ivg€õ\š¸ä¸ã\—Ön18/`Lƒ0Æ_î0ìÊÐ%¼ì©mćgºÐàgW½“Šá;Åà•ÁèÐûR Ø%ÒÀL;N}×è{‡ºßD;@7o¤Ø ¸Hþû!LàÛpèŠM†ü|„¶±v7Ô@Ús“!eƒ‚2ꖀ8²Kk” ñ;"õ6,éòåšîÍ+m•]•‡ò%rHY)Î;ݟeVʽ<♶U¦$ß³#¸îúiœJhý5–j…¡Pÿ–w¼³).aÏveÊt‡^ÎýYM¸eQÐâÛ³•E Ùà™ ·­°÷ZqB”«I<_ý.K$?´]ƒkõIJa5”"• !éû­Mà÷Á…È1¯0Ò©n Ë|êb¾z\-êüê ?²‹²¡sK¿M\[Ã5Üõ>Ô©iT:‡¾¿p«5Ó¹÷¾¿rY[H®ã@õ[‘+=$¥(ÂQL‹‡’+KdÛL,ε6ÍI×ÜCµ[œ/·çUÓ©F9 jì*Q@ÚæJÏR‘ +dÖËîÚ2­¤>®sb뛋†w«ð$°ÁÊÖíΨ1]'ÒÙß,ƒ Õzhê¾ÇÊ(€lC­žbYð-¼·­Èû‚½?ýÇä‡4a.—MÕ ¸'8êÍÄçJ“ ®ý–ÃâÙ3˜?ÈR†âMµ\Qyï¹ðýqRÁè?´lÝ'>’ ‰§ÓBZ®8¼×ÊT©Ù´þýgñ MjTð›ÀzbQ„wƒ wéîçD«w:5X±{¹ÒIÏ}}7ØpeU&A5…hü^¢‡ yôÔì· jL‡Ìîúl¶)ƒõ>ž±[óJß·xgØ*hÀ"ñ¬0‚ÿ€•³‰Lû ü…µQö +ÎÆwÒ=ºõYG—ôÃèý;jVŒ·]më%Ø82ä*ø44],öb:ÌfÀîóÌxÏÇý@€4âËo4Ò¹%§Yn—;BMÇ%º^v„AóÏP`! ˆ@s ÈrpFÌ1ˆGD.&ѧwGIJJ‰?rÐ’¿^×SSOMQওœcï¸AEQ3É»”{Åá³3dI6€¨›Á…é3òVÞÈË)#8Çî[2Ø|‚*®Û÷8ö[W‰û™Æ[€Œ±â~æu–ÃûÉœä™l? ¥+?s–e°õA¶H8…ò•ß¹™‡BV’‚ò{zZó½³ìŠ`N/­±• \L>ÏËË@Š—2%—8ä¹kö~^_gàO¿s¥}¥.€´F:eùˆµ¡Ž´ÖPæÁ†Œ¿s¦};kC¥ +öŸcY8äÒ¿´iaÚ +8äè®/êo¸ ™ñ¦LxÆ'œ¹RCJ±\œR£?iCžþ8¡ÎfV(sAƒŠTu㕊Rþn®)Kíh$┾փìÅ)}­þ&¹8¥/û¦žõñ|_;›ÕşíVåÅÕÅñÓuDa8J2Ø~uw/cì6Qc¤§SÛû˜‡U :<^ÿí:iàâÓT0qxLôœ^ü±wÌþ.ùü±wJY·D®-á.-ÃæGú±nù*£¬vQae«ƒ¤lDû%‡c÷c÷c÷c÷c÷c÷c÷c÷c÷c÷c÷c÷c÷c÷c÷ÿu»ŸÕè²m²ýÇq›ígòÙnݲ¾lïÈ= ~­ñ~$¶y3Âý»7tÎÛh»êM³Î2óÔ=ø²óý¶[3Ûe³/Ì"‡Iß§8­5C¨¶ÀH;áÔZ³P©¯®8ÖØ›íöM=öù$¿îê+fp.áGlΚ‘Ç¶Ìá0¶fäH›\Ø 8èûÜß5d{Iþ0ò}3Üæwóxá* E¡ªE8E5mx…h¥ó¢HÓ÷5ÌUš™”ʬ–D§xù?î©(ì‡Ù«’¼ ¶ã Up¢=bÙÎÎ6ËO}½lÿâøOÇÿ7Üö°.ÕkñŠfçU|»Ô¨3ÞyK 0§³kYyíÖé./¯áwÖÓlŸãÅÀژe®p`”ת&p×­sVm¡ÅXæÜú‚ÂÃè¬sÊUžÖ¬’ÀÕ@ŽÏçUæ‚bYŸPU°ìË®ÎŐxf«¯çXç@ŽH¤WP6C”Ö$M«›]6¨X³aÿLÄ?A`þ5‘a¤²i|h}å–&wΰX/§Úρ1–ÇV²zŒëäÒG´V³,ÝŽ‚ìH·SKªä½5CŸ Hm‚ìP¡ä‰Ay^ÑêanÞCbD!³XéXƒpõ¤±" Ë*ÜPw——bGIل›âEÐ …ã– ¶<“’Ï^?Œun,S÷;6ø±CÖ7=ú8ëâF–2ØûÇ%4F"،ő`§m7ôçä +>Gd&œûȱI¾(QlLØ©û7I#ڃùѡ8ç¹A“š$%ÜÒ#5|IՂ+ÃRÄK§œâº¡å*ë<åÚ9GSۋѿ·9üCž2óóg`Z®|.ß +>„¹F¦DáÕfñKÃhq&Ìü?·-}ʃ +mï¶4¼óìÜ»C¨Æ7±¦ç⁕vÛc}ʦ6××%bå›h¸•ÞJÎùW4Hä‚&ÎHZCö`Z.û¢Kp·8Ánq“¶Ø×Pè%Wb¬Yä?AQ”­\X†²?ˆ :5A:`7ÌGhlX8 Ux_óz²·Z+ÇW:ÉÜ{œz'ǗxX’7cîØÃûF¹Í#=$?gMV‹Ë+T¥”› ¨ä&‡Tl[e©7õ4ÒYˆ¶_Þp1?O´Ž°–Se±÷J¬¬]–ÆôÆéy‡6G¨p-m1 |7rݚ8•]Ù«R%Ew…Ф¨µlÝ%’›ùú2T(u¦@MM[v:3½r9’ØÎRC[‰yò8âD[†ìÌd´?4ÀŽL#ŒV Í+%h9©fq"H’V!V÷ªtLV×ó†n’Cä绕ß/I“ü©ŠŽ¹è*Òõ µ£VšÛÄ;Ñˆ³Ýf¨&Ȃ@—f¬å,«–Ear¡\h :|ö& QñŒ«‘H¯žƒèIJz¹´ÄqäioÒS¼TDLÕÈçŒÉáô”î*ätM× ŐV‡Ì+Y&ëäHS¬£-=®—Ÿ]n¤—·¥nþ$„<-1Âw¢ÑglŠÈ-q¦0HbkíQX¼~¢W›éÛM”r©™¨“q é“Dñ·:·S]jë½Û­vVëC\¶ëC_Ñ0y‹]*8.µeм­{^&ÛTA5;äÙ dþ¨’¹_›ß!•HŒ¢0]꒼ú¤¸øv-Ö>çq;ëq +€wzW(™?šŽ?mIï˜mÝ<íîÝñÐñR7lÌTœU*¢DyQMO tˆxðÚ Ñ ×ƒË —ŽASç8¸Þ-Ÿ5bWFE¤w»dG±ÍŠ¢7Ž8Ê}ºÑ\Ð@·¹ Ù[¦î’ÀFÝù顈¹ÕγíÙÀ·£qÁY½õ¼Jkžž¡1ú.bí"Fä;BoIò¿¿ +_ƒ¹œ»­Rænßïæð#YJÐ;7re{j©zãŠÐè|A3¾¬nô[LGŠ%Í\YVP·¬¡š¬¡ž´¡eYB+l[bÉZPö¿‚Ò‡³þͧÊ>8¶~Åe §Ç|24ÊÖPå'™ÓÉÆ²3¿`âùĊ䮼šóÈËÞm1°«òBÚñkًkǯŠkeG/ÁDßq/Žtö*Œö)®u{«$0Ž$8¾è{Ə˜;É*b78ºöŒml™6²Ž6pü8Á^„ݻŒ«ù#|žÔ”þ *8é窙@¢$XJ¬­WêÞ ¼râ¿%£H9BҚwPnàÑ1u·yà§\iaF©é@ý–vë,”Xvõ/Ö$ðÔíj—W›"s©Iï¶%ƒïEï֊»(£¡Ê-8KJïöZP¹ /îk(sÄY¶àI£Àg$i±¹µ@CýòÏ,ì'¹¶Öˇ]„¼ÐÀµ¼¾¼®2òºEâb3]d+’0_þ×SKì[ò+Aþ 9ûªé¡?ê`’ö_Ž+X’+ªOïÑ{²øé#…-ÅíÑYõ#сo„ÏNñ8°é3Mßَk(Æ#Ž!ˆ3Û`ep+‡ñ n¥ÞÜy|Ða4Š*0!…G9škÄ{„Èÿ@† €Ó%!†(rµjR×âŠ×_„wejµï®è Ü ©P¢iFZmK¨ÀƒžÇ +g**,æd¦Ê̐ÙYœ`‘[¸Å%«&kù~ËSR§¢”fh°‡T%6 FÂxüâAnØ~¶ðõr…E¥n(S«,¸@!°Ò¹˜cnDՉ ^•Þ’C²÷C˜c„އ&ô­¦ú®ESéÀ‚¿®ušÂ=ŨL¾9_sz‰¹K"3·E›™”VBÇ)’rŐ³ +6J7Ÿ®Z¾Ä9·FX!Ó3öJK$´/Ν.Uœá*„ˆavˇéÙ7K=ˆ0Åè6ûxµ)â·b¿G?ê1ö:úëYÓß°Ð[Šý ‹S«Œºú.#<ˆwÈ:!&?„”Pv‰1$7T?î1b'`Ï"®Ñ /“Üï.:éÜꇨÞDOOG`´Tn>‡öÌøäSUqôÓx)Ѻ¼O/Ñ:ëY™:ïÊ?¢BuÛ¡ó §ô”M>Ðù2t?–CÁýù íˆ|¡ð¤ېûG`ØWéWj‡_!ãYÀ¨>,ºv=—>{§¤5€‘› f>*¦{„¹1TÅ!þ-âd->³tm¾¬ å`&ˆom×ÃqÒO§¿Â%ªŠ7â#×uR÷:§>ÊÒHÞß§_ñÈ~@úq룏5#¢§RÕp{üój¸1hF¥ð"hnNú¢²¹Y³o‰•ÚÁ˜k§Â<|ád\ê¡}¯ŽCðG“±Ä=Ôqì£Â莶8þ(ãb™FÛ÷÷XòRU¦Bd) .uJsʝ(è $‰¯8….Q¢¶gm…³·]نy¿[®:¼U®/¶¿¹Ðñ? k%úK Â\töœš´ÄÍæq41»^J–öjL;¥¡¦” iR?Ÿ=RÕFJµñ09u#ùáÑtBä^×6º­ºlòØÞ# elÅáKÝ6¹mºlñL×Ô%ŠfI¥‚™bif¦PšRRt®ùâ»æÊï>M4 +eJúܚd)7sc¾h=/Áç‚Ó²&ÝcÃfå ó_Í¿ó «Î%ÎàòDWýÀP>h°×8h<'Á¸f&¼H°ãO´σq†#EÎÇù~ °›ß/4¾Ná’Ù"¶u¶¡)ý;wŠÅCvï†øÒ_ l!Ël:PsÛ¾\Ý,9EÒd̏ç ´ÂsÍæŠ¡7nšRÜãÔÁ*b'6«¸¦Sö{NçŒ`ûÕãÖ‚SL݇¤óôÉo£¶Ãò£äÝ/ˆ×@áªØÏø#TµyP˜¨ç’Ï|øò[>Àá*©”£Pr¯‡‹‰°Ž¿¦ ¦øQ¡H‡÷l4#>Ê9ÀAƒ˜èÎ<¶\[Ÿe¸q¼Œújb¼¬'îbS@³¦,¥/uG¨°›Â§->±kûU—M0,T®Ô]ö¬wB.>‰ ^~378aÍ»™ F{´\!ò›R"âHáà…knkwLÐXšçq;κÜExCšpvîjéNwY'!ºÈ|™ ܇e;ÞN×δ½ çCÒXG7oن?ìIËkÇx<˜xŸ¢sÄ`(‹ßx¹ˆ)žL†ÖÄч¥5àåÄ&=üÔø™¦{öóâç'Ûõ?vÙs§cÛXØ÷"oh¼Uÿ'Ò?Ì +Oľ†7'"°ŽÇT<_·L®@ÖGG”ƒ5Æ©½„¶ùvDI_ ÆK)Ì„`ÿ,…=Üu8f‰M§v?´CÖE¨¦8ÿwQݏï6¨ë£gCuå@ÁúDØáòN]k8özˆãҐ»\t7²!t†1öÛ¨¶;Œ„÷øì­ê6IÔ@‡C"i ~oQ9 ’H^rD!˜'Ë`sXøl¤Â$ éëìe‚„`ñ䒮/àg²B C dG”Ð|Äc! šRyÓ®ÆêEES›äE_~¦Ü~"\J m†{"C4Ã÷#ÃâGÞ¢.Ri'ìxPÉe +è€8—æV(~”qÔ ö€–„„pý‘>¸¿À€Ó$(Y1@Äe~„d&"nÄõ'ál¡ê£ÃðcŽ«êsîÉFaé#àV4œÑt蒚 d%£"ߏ€K4ú×õÉB^4ñÐÿå~ñóD'ÅÄ%‡}þÔÉÅ ~¦Mݧ÷ñ‘ÆV·“ÝdÊ oºgäM¸º$%C¤ÛŽ !–:Á^H\êüÝ¿™3Ý#ÏÍ¡dþ¬m€Ù»q0\Ü[tÇ­ïW–Ðcú"£P©M7N)!¦ÝPžßwLÙl¨( `²š,- ­†üD»òðgd§”½%>ëŽLÄ—-}Ϋg¤ÉG#¢D›zj<úÞ+r"²sdށÇÎRüß!ú-™ Jv¡Ù.7\u‚Àð:w&“$ëEq~âȍûN«Ž Mø' qþù‚¥± õ(Fm;¦ö-ö­êÛµÈúk£ºJ=E(ø¾óüµóÎàüÐ=_,S÷Ðp,ù†ü|¸>¨…ãT!6”eºön o§î~;†y¹×¯'¤aêu4Ôõ x÷«nà[Ý}„B&ÿz²¸ËÇûÓwm‡„2ªZîa ÂÖÃ?晻0qÄû軝iÝÿ5mÙjã‹ËàUKÉÙo”Â1°þ1>ç]’²ß^'€ÿztëY„¯ r*ùvâ²…ÿœæ?æ›Öðø ’F:œëR56~ÈÇáÈN”Ž¿ +ḳyï}=O™:e•ºä¹fYrÍbš@±÷0À>2Q›0̗x|lÃdº‡y¦û‡1ߺ$êIN ¡(A%X6— *u¦hÑêS¤%JreV"îNºsUgˆR'äKT‚Ãù(í8ÿç…¦w_•2“§Ì§ƒÀyÞïÏß"Às>íÅðq— ȅî2Xì–%9•ŠÑ\QÉǺsæ À‚@y½Qñäeð͛øš•½ÜìNßK²·N’¾‡C\ÂñÐpZ?'¸Šé‹Èêqò$'IxëCwºIÙÜJøþ•´ÝGƤÅå +ϖhx6G"XqýßrâûºFô’~šš¼ :u0Ú靶㫯¡äì{Í»Êpٝi4Ô»óžß8©´‡—ÔóìíñA‘ ©K)Ô뭝Õ!‘•p«¶HGûäÿÞÓߤ$/ñ #7ýI¤WB2¸ÕÖÑÀ ©Ï‚7‡Áßø<:áT‘KÂİüþqïú„ËA䎟ÿôxúyKH>¬¼´"S0x{T´za)”<>½c•“SÃëÛ +ÑéðÇàJKGã‰Io²Q.Ýq·éךexéÿ)¬IN0à²Úp,}Œ•…wÇÞγ±ö69! iÁ÷ÃS»Ò?A»¬¥6'ZWˆ›v+,L 6Ý/‹Ù HBm– ϯNrɓä"¿HD=•n¸S 7Þlfðtø[Áñ7s±o,8;v=L¸c ÍE#wh»j) +–¼^œKi·²sF?Ë.Þ}6—)“ŽHõP›ÀiÈ;Œ¥òf!YP½;íêH±`a$*A<ó!iC¥ë'ýô>Äó¸s²rÍö42yÔ1„Ò•S" ›6†Ê2Á´¤tHBMÝ*æÒÔƺM ;±u­Õ}MBb÷»cgòç\åÖ|Ùe·9vÎ%¾l³ü¼½Î^bk/3ïvÄTï{÷X’–úÙ÷œæg30ˆYy‚ÚÔÇY֑u”F«fÀ(0 +¼-îÛm¡Î-´«Âͤs j·»µ»å´kZ~oc´l‚Òƒ„ +«U³7jI¿²â¨¥ç>ÿ}̪­ïÿÿ~wÞ÷á{ð»ïžùïÈ÷è‡Ôl’I%±¾ÖCþ¹y._éåúl¾gA˜ë´7}t×/£o×1iÖÖOòF¹Ú#g’W‰NÛ/B¶z™rÛ±S-íºxÕ°ãjK±¶¡õ¯âSàCϕÞ"4£S¬´ªòÓû•zÙ~ÆYI9u¦XQ›Ût¼v>PµHTñ+÷'R@ÁLõ…é­‡ ©Ó­‡5§f¶^üv¾=®Ü?Þ•ЛæÖ'Ï6dºpi>•“|êÄïG$Y7ô>¶–pê7GY<(f£ò’5‰ßÖi0+< ´˜GE%"è_ÚÒ´£umJÈ_z¾2ñj°ÍLšØqŠä>Ô6‡À[W/Q[‘º¬Óý& ÍóaXŽ`ý¸»åKgÔïM”@N}÷öN® ˆçWüçøQ3s}«] é÷xx€gP·*åCÑÍì}q@e1´øÚÄþ“(Óx¿â¬Òs–Oø¼xVœ¤VùPw®óB¿=ýÍÊÍ%ígôGYÖi/ D‡­~ÀžÄBAPÁ=íÃSëi~²nø²(›Ç4XE±brw1ðF‹¨õ Éú!±fÓ7í8{·%ˆ‹UØ5³xސû´;}ôN†bd°Cád–J¶ Aáu™9F´^«8{¸OIE;cðÂ͐l+Tb£"]þló%tŶ~ŠuàöD{#ÓÑ´™;NY°æÛÍß[…ê!‘d­ˆgY«é™‰\,IA˜CĕۖÚiT•32ñ´9ŽÂÕ]<…«`3x?樫P”T4o ;œ}7ô†Å»´yaÅd"—s¦§¸V#aäˆt¸/VH<4F#ì¿Xù„XfjmQ¼ è+”ÀÉYPí™>›¾™ò”“–¼™Ï©!3 -BóÊ?¤AwƒzÀµº´lØ$êÛ¶œš-£U#g,Èw*B†$Ì<ŽSKóUÜÓ @ˆ,xÙi8·øú'IО£`ëŽ-PÿIcD¨wŒÃRÌ‚¿âÿ?‚ +ÿÐ.ˆ^T1̕s‹é»ãՏAžno›Tƒé¾kàêÌÁÇý¡n†á½Oó.}ïæÂBŽ'CŒ…©Í<Þÿ +Â#}MžVo›Rz» y¾i”±% °•øNqâù¤öø&Bò åÂՐ]2 +cÕԌ•ê5¿RVÚ,Æ}PO%öA?ÎX'ùðƒ‡µ4’Ùzðå2,7‰¼ þ‡«“êäo‘­#U$ña^ݔHWå +zÐФ°Cy}7„rŒŠ‡(¼vûX©úõȤ©ëƒ± j¤êÀ,VZÀçÉß-‡¼ݲŠ`@bL3g«"¤š±Îæ-.ÙÜqÏfd×úK!e«a óº×häQôF&]‚v~úÊøB“ˆ(~­µp扡r˜‰º×8˜´,‚nHI••maŸÜþ!ýå†nTPÞU:›%ÖZˆD)Õ¾¡Àj>P“«µ1èW uãàU5ë9¨[Ì_/ïb2ŒFoÒEϵ´€n×q‡šMSÅ$=ÖfH¤cƒ¸ïxç=½8Ý%(„ÉÎd¨ç'­We[j…ξ֍ïû%ˆi“BËX˱›æêT²Íÿ­Q©Ñò†ò3ƒaj¨fýª¤‚üçOÜv‘w£{†åµxø|ìß®ÒÅ ø½ÈÀb¡‰?µû¬Õ~µkŠÌîÌ]æ9BIӝÙsøÂåtE<+•é$Ø»#7KU¼qÊ4‰sï`Ðáâ@$›™óO$ëÓóËC€Úž÷v~ ƒ‡úô÷–m 5…P8Ê”Þú4T&®ï¼E VãD­ÿÌÅÉlxw8i"2>!gûÎ^‚Î4œ™b’%»š<´¾ŽÚJªÌ=½¤ž j’¥¶bæþȞNÿ¦°Z§…fîÙíx‚ÑÒÚAú,]žbÓe¯!bLm¤íF€â¢)•ü#Mã`FkHÉN¨`¬Šù0ãɋ6£™§e ¬=oÁ.ûùóz­oÀ2¢hsÆòÌ^H»¥t‹ÇX­g¥ù×gbÔ»§ƒÎ8l(̼ýWJ3 ‘`BA¦Úl«H¶j´2wO­”êf7·ÖË+%Ù_[J«]¹õZlf7[s.û[ƒÕknK fH9òØÅÈ~âë\]id±ÛØ:ÍzûCœ­Z(‡j¤cØÕájɧå?âKˆj1ádsÝbæéÌœëºû[¦·y!äqëvòn=QúWõR|¶mȯ.¹!$ºà&íéÐØ1õq/æ/‹Q™k¼˜“PÞäùÿ¨iÕ>/òÿ£L8µuWÜcÈzé TqÑqYzv¥b~Š¢eŸ/1‹—s¡ùH[¢dÖÕßJª‰l+¶^4¨òꍆþÉn 5æqW¥—Ë™xQæW–*;c#ꗔ*?dÈû㊏>dzÉôÿ%h(@ æ.bUä×ÀF‚'),…)kqÍ*Þ"qx•Nx´Ñ‰ØXD…³ÞÌz¼©è>n©ÀLÆnfø-T›·Â!ˆ¸D/wƒàv•;_™’wxNa΁ m«–ÿžVÙ}ìÅ¥üÉMO-Ÿ;¾_ÿ¸z*Hƒ@3LŒö yvtÄÏ@?O@CèÆ-ƒ¨*Ó.Om .¢$ÐعI7aŏé ÷:^)äË»>¡fjÄú4Wþì_ÿ +1ŸÜÉD_wtÈ^CÏt¶¤ö©.㈤°î9IÜzšÜÉYþ”9È÷ ýQº÷ò♏°ŽÍ1˜»Jˆlñ ˜­,uî[òÃ9GÝËß úšW¤á//B¨È±$(®éŐᄺ}i¡-–8ùL‹ýá8„©‘q\!踁¼ˆƒüáö80`@ +@½qkÎâ¸:ØÚm”åIM²ãH¸¯s꒞³"úk%,4ŒdWÙgÆ"Õi«ÿ Äö{Ù¤¦"{>‹—éiR¸Ïð_ÍãÌ ÉÀьBü1 Fbž8Såz)Ä5I7-ÑN[$bÒèi„…E¼ÞeãØ+ŸÎ¬EH?Í¢ÙèÂåNÙ`gS,âeÙÎ[S1«(Ø_*$ÁŒªA㕏óȑʸÛ,Þn£97(«bÛljBÜ$úsØb$ü•¿Ò›u¡Ý´HùÅ£¶x·`Û¢[¯ H=ŸÒ \–v!¤V–å¡AX ;!H×]\‡èÀ˜öâNò- 0fW¸D|³nۣˑ%Â<ÉÆ¿G:Á5¥÷Ǝp«®tå´sÜGfT/oðՍH-ÑY¿.Dâ¦è +m±“TÐÅ6Ðə9كê$j=´]ÂÇòºüÂÔB<-!ÔµÚHÓ3þDƒ¾F¿™"ÁX*w)ú7ȋާVv¿kš0J<Àäéß÷2‚Ÿ»ñEÅcä6@ÿcçLÇÈ +|ϊ5ˆØÓ¾îO*š‚F"æºã¯èKTNéÜðáß±› ¡£«ã±ÐmĞØÑ¼ï ®ã†ãhïaƒw’}uw_±×Má¼D3›èì1:ñXŰÝ}½xýˆI1UŒ—N¶ Ç?âÂ(ŸØ7ï¸ +v%úã°í6ö|Ž=v3Mĕ 4q{žì¥:,!“콪«Lî"¦tá‰}õXľ_ÞÁüÞ"½õ·#%±xãÑ ³×óŸq\!íM}Õ5|¡Ú7yLýƒŒòcmFš¿G÷‰•O;,íSŠ™ßچ°kŠúA µ›é'HÇ µN¬ÞÇ{»-—›½½ür|ͼ8îQnHM Ü!º½‘s8b£‰ö‰¡¬-{pÖ í .†ëCÈÐòt<í þ†…”ÔlԄԜÖBk'5•š—šÌ͍qá¸ÖçMƵøÍƳ6n5Œù¸Õûq«fMÆ«.n5L©¸ÔòfãRȍFLÜjãO7s!ãM7U>€´}ÍCƒûë~¶ç_¶"'1}¯äYµ'?Œ…øˆÏPtùžÑ’±¢0Ú®9~¿íI,[Ž^8H_Ùü°ßWîë Œ¶‘–{Ñò7zÁ¸„Ķpõ]Þ\¥@`šÃmèÿØÞ ˜m­øâ¸|Ÿö¬ø—1Å湏]5–N¿~dTëýã ˹+Åϛ1 ”ot™Ó­ÙY ©mˆ7HbbÒ¶èÄÌp„×h#¥´mN­ÞÂÇÐ$1î=l÷6EÏæ—ãmô%U”¥·Ñ4¢¬îŽ܆5:k‰£}os.üiļšØ5ÕXÑNy1W–9xÁS@¨H=ƒ–G›"t=ÚÈ®['ûAã À-ì˜ÑPҘV0 òщG•K@@Q¢(åš +(×Oª ˜É¢xæÌ&WVK<–R„ ~­=žþDfºCV<öYò%CïHZðõIìþ «8¨~)â³Å5û ÓVYaiÈiñUøº¤ü„L¿‘“Uõ1ò¸ªþ ±Ìþ›‚„6ß[-Š®øXæƒecûÒ!ä}l|¾*¿z,sC’§ø$B£ŽÛKñ ÑH©þ)šè°±²ÂÖ<¢£±Å|É"ž—a‚îIÅ}5|‘)Ÿ·nMÁ¸8d +h˜PÚcaC‡Hã֎œµãFáÞÿ*îjVä8ã­qo„Ã,ùYëÔö»ôÍ p,cƒ¢üõ–þ}ŸûþÁºw ×çháe?wÑ£ÅÄs¨ß1ië´ìáS·ŒìÔjº7tÅ­ƒ%õþç®BX7 vbìq¶.ì3AÉÇdí¬sAï㝸:ëÑ8Žm.ïF8Ü]çIՌÌZ1º’Q]ÆBò½‚Ù=`à<üsëõ˜Œª@4¨X¸++ÇÇ,Ãm9ûb‰:\ŒƒÅý¯¾LÃ.:ñ·zQÃã1/P>Q¦/ŸòÁ?ÛWž¨ú±wçŽT¨„±°t u‹kÃ9Ž°Ž ¬u‡>?x4¿ÚïKk¼j¶øû}õ—ïýûéñïúm¾uü»C–¼1ºˎ?‘åì^_À2In„T‘Q•ýߗ´<¶¢ª?×8Ć ´¿€™ºÈÓÿ8‰¤gy<ŽTµ÷/‘Ê[vyQG4umÛ,P}1l5ær9Wí(„- +fÆD͋Ej¤n´S¹Ðn>g>šG3*”Å¥Èȇ.³¦-"³šQSöÏ0@‚ÆÑc§,ÁiþPp¨`òÙ#‹nf¥ÒjGˆïâC£Õ=ü&Æ~ ‰²±8ŠTý÷Lݤë—÷“ ZÂ>rõ?>†u¡‰„bÑ’•ËAÌa™ŽK¦ÜÌ1A¹åö‚KbÞúªcž±x7NÈ/ +¶Ó:K¥q‚LyÌ0¿D`µ»·÷ ³˜öËxX¹'.ôßvO>Ïè8)ÿd+½4´w#MCxCÈ=‘­\‡Öð‡ Lÿä²8ýºÂ9­ßÉDîÚÌo_e=½ñöÐíVã4Ñèjðˆ}IeÁÈô ·°0æ×Ün²Œ5¤…•¬ª{Z¶.Ž©¿ÝJÉñRï̒ËV]ïÿ¶ë>A½ÿrƒ½çÏÚÁÃupˆÿòG„Î7—SèáÌZkí Æ½‡º•¯²E%q؉:–7V˜‰º!,§˜ÚÖï6»¦X¨d1PÝT#˜@°yc¬Û‰aµµÝcIeÜÄ`µ%”"…¥#œÅ¦ßÅ'/AWƒä‘[ø²9&¹&Y#²LWH×ø5çם^Äŧ#›ºö»k8ÒK¾g£Â¼¸7°çËtMFÝ“Ü Déd=~[¡ØÃSE2“/¸R׎«4G=æJºÎ¡S•××RÕÓ5Ê"YD9Y7Ü幋]Þfþ…cEv ´`ï± ¤º!ÁŸÎ–IQU¾IÎyN–Ï 8õV‹‘ òsÏFAÃ4ƒ0{˜òEãæ‰±®Ÿ2Ú –Oè:¬š8xûþX{äýŒltF4|·@Gͽ&]Ô`‹ $‹U}!ƒ©O/_{ =œ©0ƒüÏ Ÿ’iun‹!ó(ù Üüw„c =~Yˆ°xMßÝÜnt¤-éÆіŠl+ÔœKEd‡{Q'OK¾8Š N€ˆ¡™9]2C¢0ŒˆO†lô¤ˆÉˆ¡=Vrº'°¬ŒA;$EvCÏhäiP2•ž”mh¤k~ûýt†ê \ïå!vÌD`pXS32µT¯JvøÊ(Y€7„^Cs—d!‹ˆ‹üôo± +J.;b—HN)ÌZoäˆ<2±¾Hx&*4¤Šï–¹NµÌ¢¤ÁíÓtX‘eùôYk}2ï!ÂVÁo›$‚n6×xE™XTßür?þp:˜i#1½×ڇ$˜VlÌ•JòÞ¡ªr›¡ =gQ©Êaˆù!û;ßML~ \=ƒ¦=¼ ~rØk(ÊêÙr6WÓbæÌñÕ.×)ê,¹*R¬•2¶ BSÉ(`Ô[;c ð÷;:ènӏ7l\»œŸ«ÏCÕw^’½ÎäÁ¥„NÒ¤`îYCÕÏЍ}ɼh°?ýDÔç ¨•oGÁúWÉâ4YtZ-¬3Gi#.#BiÊ 1á˜,_½ÚҎ/ŠvbÐp–Q*–©ö1ûù*#bó‘-Èy‹ë3±>[ù!+ñà$­ôN‰Ú™ôÝПx½‹‘(G+Ô:¾-ŒêãFŠták·Jk׍ÅÚ{´¥¿«a+q@™¿ó>'¸7É`+1þ§`žèC'¡ïxiÄþ[8c\•3|X¿Oueª¼î>ˆä:4Þl`‹ó–¶]݄0ïˆð³â`ËæèlÞÕÂ>‹ïÌ-šÌ­Š³ IY¾èåQt¶S »1³0 cÖÃÜà…Þñõ¸¹ßš4‰rb‚iÍ- _YÙwò@+Ùܱ+œü’c*8ô0>±u7¸»˜‡¨ÖV–Áä iÊÙãËf L6£ÎX!µo< Ú9¡©h]AƒdagqCdb‡‰Ü¸ñr‘CcˆCŸpla¯þc…óô\´ʒ0¶¢üą{Ù48p“;6§9ЉíKa²S8ã[ë=WãfáÂ×.Èӏ¸E±ßÜ<²:!U¥³nt/(®ï‰ˆ×,tÅYsˆþ‹ìiTÎtƒßZ/¸=õ™H2ïâ½¶Q§Dy•ì臼6m¨u ˜‹€\߯ŒD#ŗQ€¬4ÀsG³6ø‘þ¼e²öcòZ•L„álÆ¡*>¹!»QXE®…‘ØžÀÅ -Ž .~úÛøYon×yïÜ[p« ¨ÔpVÃÿE…ÐlžÃê C§Ý&÷’xuǦ?èõ{ϨJäU\[æÉî à·1r·©îF›½©¾/³\™Èwö¹ù+o³áï½ÊjžÆål:ÅZ—𼘠a÷ +“:pCµ*†²vTD8„¤ T_©¼/ÈV4ò²S%³fKPÚ]î{ÉöX‹û½ÅхÜ@…Ú@…”a(ø÷×V8IGÀMØdËHtó£ÿõƒNÝ>´w©… Á&dR©+܀”üòrõþ¥×ØKønr¢K«óÁr{œ¹%ó™¯Zê«ð§W›ˆ.{áH®U43í^ÛÊ/ƈ½)ö/FD^ƯÆ+åFa\ŒúIÕàˆ¹áǍâšQLüpº/Ão…Sßñkm\)ޘ]Ýç8µ/%ëü¿a Þs‰¨Ò?½—A/òö dý„»öåWö³Ÿü¨´’á1K1ð±—uä$¸†¥S7¸XÕÙËç +ÖWæR"Èá¸îïà + •K×Ö{ ÑÀ°oπ±>9hå¹ ßèÚZ(Þ¯¬b®¿š]öŽñv¯ DY‰ÊñÀIQg¨Ø +¥¡|¶²e¬áe‹h4Ër Öú¤ò Ç +â Ù oJUŒáfÅiP\‹® ’â3-J€|,ˆÌ¢TüÝsÑP‡ÿWh碡ȶdâ 0 šßE‘«„?Zöý¤¨‰„vîô5 뻩¬d¨¸ÑJö™ÔVh±µ Såa†dïpXV4[/aiàCoÀ#ýwü_X‚[Ýð7B-š-ëƒ1*aç9÷®4xÃú‚«GM˜’/…’˜íû‰–º¦p¸E޵1‡n´7:xî…žnÚª>µßúąé±xð¾Cy["ˆö½ñöçp·!ͧ!¹ñ·•ŠÊTVSã¡l„[Fh(ÔH±vcíƒ?őŠi6ƃYh]y…Éž£PÖ²LßVR†þ3.842üì¾èe¶úᗤXeè2úá—îņYnŒ2ÚÿÚÍa÷×®‚”®6ž6$ʏˆ÷€Ò²©,¡‰5?Pó€;6UY2Î-À±t않Ôëq¡°eQYÛãa~øŒÆg}03&îu3<¯®„ÝýÃî<¶º¬/ý÷°P«ÝáÇ?µäŒõQ&òvfàñ¸B¦è¾žâ}Ä ÐŠú‚~ÐüLª5Å}Úü[ɧ-0ÿôúrª5ÑA÷toÏ,Q+éÌ>+é• +D*º’¾ƒâöü+PÄ}Ç.ÐA@´­+ëþg‹ë†/¨ú!J˜öß@–ihº¯_|Õ3mxŽ +1¦ù4Ögc©hU$W`|Æ+±áŠm’¨Œé°.ŸzüĞXÄ\‘ø²uÕt^Ï4ó=ƒòiø-ÏÄ{à®ðvèBGuñdÛé;þ^Î`½ƒð Þ,™zçb½dG°Þڋhq^Ã|¼Š¿<Þhl"ÉmaßÿÉkØ8aüŽ„'Â"tlžù†ÉçséÙš^Š„ßÈ0èiÎÿ@‹Ð•¨uØ4¤ySBŠt.ƒÊÖPGgÚÃÓܚï¤9ɽ·•„ÜÄk`«?2„ýCþÕ°¥i0ï’t­Ïâº:âº)ÒÌ|&ñÓk÷«ŒT×ÇÅTH¼'KJݶfñ¶H³ü·«þ¼×“tX_§ÊÔ¯¼x0`±?€0MÜæ#«g N4·+¿áRP¼¨—ìiRDüÎÔÝvú_9c[ÛsÖÀ©ük`Gê4s‹B²@—Üd/(j%ß *º?-†š>½-wm9hz“/·ùŽS¹Ð—#ëTßï(ž²PѼ Q¡ jŠò"ޱvc»[P·o•:él ¼7u°~Ùà’,´çØÅOôNȶr|ª/ý²ßÚ§Ì¢€jˆ®§_[>ù}kðwâÑ@À€YÙÖ :5ßÀ«`’,¦*¯‹`@éÈoüý_Wñ´OÙäb€ÞSŸ±”»õ4‰¶¾N’ށF[^cŠé¸mò ¼Ä^«å跉¶½¥ÌçÑÐÞ´Hüöá»#A]EWÜ0œªïۇ¥õ«ìØ +[‡•õ¬>`3ÂGÝ·Óõ«Ô°„|RÜ4ßZ½ÜÃàFáÙâ,;I»—£è³¡ åâu@°G«Šã¼*´qÆ>Q+ÑÉå©%a]¥þQJów?ðאé5×$Nª9š¨÷I4ŸïXL;T{YjŸê´ ™;Ɛ 3ãä3hŠ2›ì—çÒ2ÒÅ ±7ò˜Ì+…9±…%$ù §.º²ëý‹¯Æ]o‹¬2ë?H?A~ʾ]ue×û_ŒºßQô‹k?§ô}"Ï.¿·ÒBËEÔ·x÷^|]iuî„ùjÿ¾®çÍCµ€hAÅ;s!¥ôO,=«ß’CÑ-ÈîïέøCúêÞ·áíÃè’TH'—÷ïøž>Þ;›^9å¡W™¶¤M·¶§çˆ?îI;X'a1wûË^4`‘®MlΫËã?¿T»ÕÐí˜ÅŒpL¹W“"uO¬éÿ†õ¶|&Ÿð¸þãŸì’@|À'ëþ$ôÕ¿˜¹×¸B ë§l-ìùNŽñe¡Æîì[üë>· s¬O}j£¬Y>öBÈìÅØyÇQpDa0S°j 돷a°:Å©Z´å°ª?úÊØÆ¯­:Ç0VºÂ×Lì"µÑVzÁ¶x‡amî[²ÿ’ÿÀeÝlp€x›™ÑʝbÌ­^Ôë +áèN±8®ÄÉÖ2¡“: S ±~fÂØmp.¿Rtµ)a냗ø„3•\•G¯æàØ2§> ÀãŸo,$}y`Ø/I,sîö(ï— Ž<_ÊÆ †`>™éo"ÄûnGÜ+¡º+j¨{ÙÊÉvJ¤!~´Ç-Àû… +Écãhƒi b‹íÞk`$ßNjõ8/äûò?oà»Á%¸ür3%¹Ãƒõïu8&Pׁ®+ÏKü]àÙåIa¨ç#CÄƒÎØàÐØßÿ;L=£vI\Ý’YBl^ E°u–ñ#m‹!,ɱ€¶ùoۑàò9EÛú ÇyÈå]þˆÛb.Öx|A_ÏmØ`¾â>¶;¹¹VQ°Yƒ•FûÜÉÀ]žÇõ@]mØØÑÀžÜdûÑ/•?z%ò¦[½wc¯cÜx9Ò xyìlG¡ c¯ {60ˆï×Páã¹kɟ'PÑænëP…ü˜=Ùz6´¬…S®¬+C¿c'm-¥S³ÚgÔË» +/®_`NRóˆMBVM›lÄ·âÁƒ†'Ÿ¥æ’¿ø_Ä·hµÂÑ>‚w1h1_ ÚÑRà¯èDK1~åç !싡â0~X¸Â>*óÝù,?=àQXù‹MŸ~MŸ€Hv›/‰WqzEhiÚ²¼ßä 0¢¡x炞ÀÙ«Göɽ´ŽMï'.b³]¢ËVÚTk´YÄÃ蒭ál­o»ru·EÛ-ZÚ謎ðGy½»Qäœޖ«$PÇuYdÞó +¹š~Ð\ùAC£ÃYS"¿CÔ­áDĈû)¿¼—'o/]w·MÿÅ˨¢Èkí ·'¯âl¶¾è»]kÀHAŽö柎¼_WêÈv݈û¿3å®܁Ÿp¿ôD2+ôéS{m—Mâ}â{ï—-· Kû)wtÖrD|äF ÅS×4{”÷#ӌ,¹Ë‰*Í÷¬³ܕeÐÍ+‘ˆJ²ãú$«+c"üsÝo\®)*á– Ø`†©ˆ„°Æéa%†ûºbÑÌİۋvGk»´×ôº×uïnÐ=·’ƒcK–„W ¾ð¢ lCmaŸØ}²®"åõúc‚ùœ,"4F"VÔí\Ñl9GÞ)/O’¼¾@zHxõ°ôzj§Z¶šžØ}2šhV$…f@öŠËÐ*ˆ{Bڐ;Ó¡yäXæ3…°-ÿG…bAÈ9ÞÑP„étý»c±25ãÎtû5t>^š5:„ƒ=áFõÊùâ´¬N¿^˜w£€¿wêÈ$"®H0c²[²R>ûwÙ*ËÔ"菴b´jø¼¸^ê"f¤…Âc…wb‚òañ™Pá‚棥›\-¬˜.ç¨F¶à*<$\점H°a"ÁD‹, H°!"ÀuÙÒf$W©² ƒ–í}£jxºˆï·.äÙpfŽiDŠß- æ=³PÅóp#Þ3ŽËA†=GF‚’ +´m½¢&mî †ŸÝÄ¡ +fÊÝψäœ$5·Ô"ãÑ,pg#*¤æ{1ó9U#&z¥çYwK¼^vè8õÎÀÉ9³å£Á§Ò$ƒ "Z‡WÈ r @³“ÒxÜW$â¼?žœ'èÃ9]PpZ™ëSìzù±‹ÝS-3 3ù¦¦(ÓÖ%Œ8F‰éÓ ‹sŒF_ÌZS>š?í#Së’!Ý!¢=fzHáqÙSìîÌ6â§Ùüä ã†"×ýQï…Xj‡¡§È¾\»VÃóˆkU)3؉sóöC,ôbþøÃ!ÿ³|hm҄BF¬ýð +Î4“ÓF+Ö6Áø÷ÀíÞãÁ–ý\xNR:¼õãÃ|«PÔðs¤:©;èO‰ŠJ &û•Pw}fCÁHj!fFAù¸ËQ¿økƒÃáMσÈjäsœJ£ßÀ¼½Oóu‚Ué©Õ ½¾nø´ _ˆ¸*^0©+’½ŠÆ=x8Tì7!ÊùI!@e¾w¹ûåž¿ç#ºzû²ìqë#ŽÍúæªõA’úä;ƒÃåÇ®ùY@Þï⒢áӌaþ±‡ ßûcL1‡r1göoñ IaÄS­œ§|ßvc•kÆjÿš +ôgʃÐ]¹b ‘%#?Y9PyÔõ…aÐõœ É1(r©¿$VüŸYÀ2”ŽŠ„õë8–è”ÖŽ+âÇWGù ý[YX­©\Ç(¯Ü‘Å~C¡‡÷l,þŸ”,ùr³ÜxÙöV¨8~ÐÉsÁ#Å^ ^ ¢ ôgRD3Ê"äÕ5R«o]óHþ¡™%$~¬R?‘òQñôHþ#T‹¤&©¨ù]î²ýµ …Ýö±¤ôâ{ÜÎæfL̙€€É +C¢âU(@ ` @ÈBI ,Šé0FŠaÜ mhu1¥†aJ*Ö­dX´ZÛ`±Y°Â`äJ€ª‹m´"!þ=„D!&I!™ïÿ{ÜÉ ‚ yvÞ;·yÍ¿o9öý»¼ÞoÞnø;Ï?|ÝüBÚzË$’["ÝFc‰bJÙl¤NÙ_N*¼²ª¨± ‰}@'«Žž®1“6pšk*ÐÖé“ìw»Ó—]A›Qì'׏"]´ï­jK4sR±t³Jœ˜T‚"¤ƒ~®û°!ìW­še_4̨êÝ]|kPÄáæÈ5¨`d#ò3ÜÓ1Γ@û–¶¹kô‚•)˨ M¸¤|YK¼·”tkCʲ/¶â8ŸAC¹‡/ØÉ†Kº‘ÅÓ*`D'¦®ƒâXÓWæg†ÓðSœnÆgK³oà,¡t°5Çi–Xqltý.Í®”¬=ßfÖsçìÚÌnÍ©ôAÉ:ï4Ìkj8ˆcٜû-? +ó†­#Ýö?ëٛÎ}]ºÌðfìéB±ö yÑìÎú´ÕÔçÎ&™FìÏØêț…ëÙ„ÿŸf Î +ùàԐÉá%Ù'Ùª}ªUÀgŸh­GŽ5Ö9¤æ“£ Øcú¤CøL¾4–-Æë,l»ƒ +5q”šÅbß£ªY‹vÀBgEÞ{ñ7¥©ä8š[ËC\}±Uƒa(.…hµF‘W’“&¶³CaIkhèƒa"ö‚&mÀÈYzâyhx׬<´V‚Á40‰`ŒÃ—o ²óz_ú:î©f•‹'^¼ºŠ‚z \[;L´2ºU²k§¢¥ÈìÕÁ[P¬º6*ÎÙyE×å«8À—!Çk©Zì•çë0äcè¬d°ŠBÀ.Á%Óà;H2ç$À2‡:X ÞïÞ§~›Úøhƒ;É¢“’Û¤G"VBMÙõ8´•†`°|¥{é +~Õt™¯Gz¹™ÌãÒ¸—²[%o{ Š¿@겈DëäžzÑ÷®î¡Z5ǙÖUáɓÄî^?ÅU03K¸Ø÷› +–Ûék•VH‘7œŒ<:÷oL^wjø´²E8ŽñrAãwË²cÝ=›3h}f|´™ö´.¯¦´yÎŽ#¥¹{H¯ËD‹M jwAñÁN­áýê&¨ÁfóËWs@ØWØÒTÓû sG°¤×¶fOô ¿‡‰"ò!ÂÝ °&kÒLJ¸(qµébÂr¼Áh¤4PVϏ–p”†/ܾìچĘ8W¹ åët•ãÂiæñ,®>¾cvÈwQ¦kžè~`¹t¯ôt7s|À\½D°¡Œ>$¤CkΆ8+ýeäp)¦Æòí¢ÑØ\ÐÓÀÎ8¬¥¾‡™ë^§®8®9xfôvo7ç î‡zŸ#q¬RrA”~OqÜ‘$š ÁIÀòaçÃψNfð×ҁ +¸¼Uvœ{Z6Úù*-j$WÉjò\ˆ_Ú¾ë«/¤Ü*9éíiV7ËX[ e(xù—ž'AyÓ5}.Uåj¢Ï¼úRЀy +ÀrïX Å·wìLwìKà…ÖžB_§^„Lšt+uœ¸-€ +â4üÈBá‘x?Q0W:ªà +柃tY>—Wª@ì_‡Ý÷ZjêFÉ&?¸áZAevŬÁÀf¤ä>܁ißù}Ù Åý¨+P<’aåW;Õ‹\ïîÒ>Àè·¼[óM· ÷QϽ}ÏÆ©_®—^òàý2ÂÌí,K˅ÅBZ6°Ï.$4Ãàf¡, ˌP®"Qï.:r¡^D•ÖG>¸;þêÂä>HCÝACîƒot±ñçn]ÇßtØZàæûƒ€G@4 ËqJßv2¹1)™¸P?aüÃðWa÷n€}¨F¯t–Ëx£î7/†âzý0è]¬…-ÅI]‡*ކúçÃnü7ÖÁhm̸âߣÎîÖÚ´sÅÿûÀBEÀBÿšP÷ú—º†§ÄÔÓjvZ“´ÚµšZÿ'WÞêðίíjð^ö®S÷jâ?ë$:ý=óÛÓÊZið֚|RíFO#¨qšÔvÜÝF—ÃÔDù]ïÿV£ƒÍÔ{\ÝG·ÍÔp¹º›¨ø7㷐$+á,¥ o†%¾(ë|š«w +íûcíÇ®¿ÆÂ*0Oãa FƒçkgÓ+Y‘œcúÁ+ÿyÔk¨hÊ©ýƵÛlrĶG!´óWˆi$éÉ+·ª:x2›c%iß …fá<)'«zj’Y±åårÚÃÍÆweÙXB7ÂI­/¦IvfU¢¢¬fÉd*ÁU¸þ»ª;Ê÷»·;àü ì¼ÃR±¦‘®xp§ÊÀ29>´0ç:¿¦àYí|Ò×Ýéõ„:ë—ÝÂ]FYµÛMô*aÚÀº!ž˜×‹$¶x9uˆŽ´V£„áµ×Ñ­ +a]rûÀaZlSá^¢\n•ܐmÈéxoÜÁ[²"ÁÎ"$–…s”GÆÕ>ŸA6ú1ÛT4L]°Ì6{"B3ˆ]&VVqùËÙ!ú:4?QÀ6 ‘—!^ÖV¶õíÑÂ\k6ÑTAa‚Vµ8?>Ê_6ƒ)›)zä՜V˜Iv’!`¼z)RA}rl%+B[qœ,[½o̳™¬«ce*þ_&„xyô–™ã`lée3Ó/[òlË£å³O²Î!Ø[Ž‹‹1Pr…,tZŽ`èµ³ ïìNDž´4Œ9À]XT¸BH‡}½ «/†C/¥w„@Qºà»‘ÚDA_Ê6³óˆ¦Æûs/(ë//†ÔM-c"/ún>W[¢ +ØÈX‘± ¥¡t÷Ù¬K-0-Ÿ©È”}¹ÛåD®¯’5(]»«¸7Üy('ãÍøÚ +ÂÂ.Tè…ÐÄP°ˆæy7î¨<´/Jõ©r§Ä Ñ#1ܵæ6 1æ0¤Zî=1æ(¤`ƒ7)ýùa¿sEc”9͇@ˆ—t/¦Ör +ì[sR +”–›]DçâË_ßpšÚþ(r,fÈǜÕÄ3¼·bQaÆÙ¼r$6åÏgN’s<&óŸrFâPæ½¼$ð †÷J}h ¯~kVI;×:Öö[òނߓ 8KñeÐJ¹ º`¤ýN¤M4ÖÚܪ£ÊnñÍ›M[âÈ2ÕiÃãí´c‘•A``CX?,¤•Že_Å‰è­ wÇ7ì琥2_Æ¢[ñ’øJ%Á/åQ.É|uôá‹!ua›R»Ã¶¥•m_•ÄQ³ÝE$nò¿¨4™‹#ùˆm¡³ò€˜~BFl…ˆfµ2_›îH…UŒ=¼uÕ¨=¡“P{?" öuefJ"R5™$R¬ÉdÒ_Y’”I]fJ@nϽã[—žúÖ¼C%ÜÛrò?O…G› ö3÷=þÿ„~¿@÷©%ìúQÞՐ÷ÜɁFÔÉO9“BZg<0P1€#–9'Üǖr 11¹ÖÏ]U›ôþ‘n1ú&#@ó|ù16ï%Ñ}Ñ$ëIޖ¢—¸\Ã|vÚÆöéjM²9ö0ò +¬~;k}²ZÛ"G&۞å=Áö©f‹¸}Ú_DQ¾ÁËîÒPÄäÿ°û´Á<¹Éj1o»<}ošŽ¥êEwۙ»^*e}ko–…<Íҙõ{î³”jÑdÌ:0CnHÁ ¼‚r&m²0Cmi‚dŸràG¨ã‚ÈðÍβró‚ZcD¤Ùöfüçð:¾ê GDµ Î|é¥÷¢ýxÕ½ã±ÅX›UblQTqD£qpÑ@’ +Œø‹Ääá@Ÿ¦!¡zÚÉn)¸À•ó…†Óຠ„†ŠÓឃÝÔª·ü5­žæeQâd˜nÛ=w‡ô£ÜxZ¶k¡@ªU +v‡ÿTÊÞ\!¬ÆgöHoV|ݛˆ¿~p2ÕXÇó6eþ™ìe³{ºU5yìýqaªtp Õý«€àÄ b8V7ò¬a•fe¿Ðµî¤Cg0θÐ0lòx•__è&ÍßLߢò¸7Ÿ['<˜«Šë—¤¢7%Љî î&õhKgÚÁ[֜l¤lcZ\ZrèËBùŸjŽDª5z;:q0¡³ 3˜Â„8äòf f•ìGµû/îÝuÕpì¹1‹’.k³ÊZ¤öÿ’5†“&>¼a¡ ×@`x-&=d)„[և¥Ca¿·¦º­H–ïé́KPç×Q'‚Ò(¸ Eý'YVÇAj¹’†Ã™ zºVÖ\ƒÈF³@Qª·ŒÊ &nÛqµGǶlûa ¼rbMÖRßs.DøÄ”";[‚(|t&Äu³1…2â^¾ƒr-^å§öŠˆµ;X8)¿høn§Êñ6>¸ù¯Ñ„D3fÖϧ]5#èñÚ³Éû’óŒÑ0e³;A.]âw/¡<ã§µuËò„ ë˜¼3E'F¹Í < +q +$ì|V)„\öŒTψoÙ5"íNî8‰Û +»ÐŠ®ôØÞv¶Ñ‹ÏpV»Ú؂ƒ|, qáˆ.¼X#VØ¿CK%ã}±ðÔO瘻3Q€º“eµb›&,R«Ç1Q†d`³Û­ŽŒÝ‚Ý20n|XÂ;¯¬TH¡ÌTØ¥uy61Œ[Æ1ns ?è€]Û?~†Èzhø¬iö±+ù\ŸfgY²’r6:Üpa_¯X¾Ì~qËâ¨õÅóhŒÛŽævrg(dƒÛŒÎef&¯`c.Á5—f?B€|1˜u¶?E­õ!KuŒµ{5@W?-1¿á¬* µÛh²çÖpõ—)óm™ûM™”؉|YÃÐÒlç˜)ØIü=^,øÃ\@õù°zg¡4º+ÐíºOCˆf¶½zå †9˜ÎÞ½åG¡£`¤7w‘^€ýWÕ©sèwqž†—û½òç½ ?õz÷IÄî¡lW™)xó‘…_mϑ>Â,‰Åâȓ¡²—¯ÒTы7;zý:•§W1[E~ƒúŬPc +‚D+."¿Þ²3ýÅG˜@êî´4qÂs<ѱ‰‡…íøë"½º‹Ø¨a{;ÿõ%EëÄx‡s™ÙŒá’m]ϛϋߪ+ÁLB8A@>{N kx¯ôÆx5?Õà÷W)»"Ñn£²Güݗ:N¨Þ»¾ü©'²¹ÌÁ’RÞ;½tWw¯ŠîÇæ.δ&£;/ÅÙl?¼œ¼|œ¼Oêøõ— ¾3ã>7ÿø“’ÿžNOï_Žè©2ÙI‡²rÝ©'/b,œ¿lWè>俱›…úo£?MüW‡Àay]¡é)G1_ÿ¤ÎH²g ~;oûIU¸Ž“ ~žŸ ">¹¼1bëXÅ0×8™æúAòü§D>_3ô‡ËÆF4tFxˆé`Àë›Ã6XÄjºe"”uÑIÀ›LÓ»Y G Ãø&©_݌‰Ë&Ö`!ìõ˜ÙÕ¢ÐҎ0cÐh&iª0{@^Ì$Í=40' +ÊRœ¡«ªà©>ñÚð,ìÑb˜^?Vž³?± .'zã$Ä=Äõ=¿_®O^@ÏÿÔ=Ä"ëÿö% <¨ŽÚܸ›^nH:êÄðÇ÷}ãM¢àê&I•ôλíD–¢&>TG…ôP†bHÖ=2‘¨á)t¹“‹ÿV´pE¶µ Fî«5­.URœëf"!sÞWÊ5OdVlC…Íæži°ŽvÛ0@a«k¬Â20³6ÊnqµE˜vÖB׈û„Ú£ä ¬¯ãù%| \ ý ÷Š©P4.1M'l¹1©Z +ÜxèÈPš›úV& Œ`Ð+žQ0ÐÌ+£û+J†‡R¬6¼ÚL@÷Fi( 5¦p{CràQÉǺr\7º7X-G\6¢~¼Z™qmsCÇõšQ¶mDYµfÔw˜Èì¡Ýäû#ӂ󮸒A;šNÕ@–œxÚÜç 6=8ÌÖi7NR£ªƒ@ٝP>xm@œà¢‰¬þ¬ãY³/d®ëë¥õ”M§:႒ ˜A*’Àáé`‡¸Œ=o$ ºššÖ¨äGߚür9фý0{ƒr»f/Ðev J[ž±Ynhµj«V6G»ÿ?x¼+b§'ƒæy%Ïd²$a½{Ød öЍä0-™XX†»éXýB‹°ñ³7¹(­ ©dT®MíÌ[L–†‘1¼*aÞRб”%Ý ç@éxF«7Ð:ց¨âô;ïIK™7¹ôè¡{øÌ‘h9 è`#:”Á6S$“ç7Ɔeô¬y ñ¯ˆ1$Ób²ð;Ùý„’SÎ\œØ­rq´?¥Ž¿È±Ó²PAL¥;âîX¦YÄìÂjëþ³¨¢ a`h머ͳ.zÅ7ÆiîÄû+Ñxãƒâ'쒍?f£‘˜›tÇ-˜PAJT&btêJõÞŒÌU,ʂ êR¡fû›ÑÐÂɄC +ÿ8‚èw¼ñ×>Y ˜¹„_³˜ÂÓþ" ¯™|?-|áèԎ§GÝì–B(‚èhm0‚èf: ‚ÜʟŸiB˜"–”,¡.Ív¦¢ÓéXù_4®iKic†ÒžiAÝ®”•¼Wv ¨ +˜‚¢™ŒPÉ$YPˆ‚£V¤“6 cpùôD"Îp‚¢ò 1â`ðS•*ÉÐ"Üu*C8:-è ½æ£d¶÷¬'-ùG«ð–_¥ºõ|SnºÀø2üüC ù~¿4*²üò(.;ñ¦jۀصG¦²R¨™r5M +dàzvÁáÜgÝNÞZ,溞6+&¥¢»  …,µcÞZ+²DµQªü'^<}.z| ØÔýK¨çúAò峁õ­€—õÔ.š( \ïxØOÇrOæ +ù-C}n!卉#¼Oœ@ûßÿaîJîK7uäIÑ%™Š tìc) ‚eŒ qÙæ nÙý“@¶Ë2K·¾›@¿G %aëÛ]ˆø°÷¡×ږ¾¿[˜ÓW©80¶·t„cÆrÑßÞ +íyíÂù ­·º¤õH€Ú06&2»óÚÙþB}V¶z_vð@iÚ^@¶©V·#–4šµ¬ókp·(ۘ Šå}Î}ªµÅ`Áß`!ý©Nl^–Uà€W@´DÁÜ{€Ý½à€H)ýHIu‚µÏZôV°f‹4­G¸ÖñD¡„õ7¡çZ"±Ö޳áZs¢!Åñ^›â¼÷ÅyužxñÕ 8¶þÿÂ{™Vÿó+ñÏûÞ:ʏèñãýÍ¿Ó`:jl±ù²ý4BmÀæé,9!‰ù¨^Àx2,>Kz +‹ÿå{<>ZÞٍ#ãõ›¡Ÿ½#é¥EC“¢-ÁȘé-ÎÎb)Hxž£äŠ6PN Y!Ûûꄨ"od£NR/Mcߛœ*(üUë<-„žÙӍ-iò›]Óñӊ²Z$Z~†æiC¥‡ãK¹ôûËqcp9ª*ü´Åxjsœ¸7`¡0÷Å*”îjãp.WÎ\jôóÂ~0ú„$Ó­6‹C±šPª']Uí<ÞÔÄ}WërªWï*Ö7’ÿVûãŸ%ÕG$ª«nUaUC—;|âì7WðÞC*N£ÒY?„Mè-%ŽÛ•c½åS'Ö%NG<ÉŽÃ%™2/ˆÁ¨½–¨êŒEºƒ–ÁäË£ +E¡ßå"žDù¡*Cu•)ú.ÙæºfPÃd˜~&_•c™å|ê_7šê<$¡ƒ›7K%Ž•cÔò§§ÃÁæÑÑD)%¶;$Å$$Vޜ¡ï×%„íTbq_<Þý—óa¼{0‰úô¾¯­ówzºP”ם![Y¦ïÐÌÞOþbòýBîZ×åŒI­*ØçkˤAT,Í?„—VLŠaúBVŽ_"ïŒ9ƒô4cd§#J Q!њ²Òƒ1g”A7ÍÆ™Ñ§ÜhA€ˆ41ð¹GØñù;‰Ñ|Î'¸ +; àÙ}N'ÔäéÄÍqÓ£­Ç"©]EÃü¼tn—!”~ËçdJå±!»H1ö_Ú6rv)³ü›+¹j†¾Ë w½Âý4‰z2 ×%!Ð¥ôÔÕè“ödDŸ¹Oæ$ý [!©¤Ž˜”¿HJŽÿ¸”Wƒì$£Á’žŠðè¤ËJ,xҊ'=äéFéQà ˆ¥+cQÃ4L¼Z8²ŠQÅ3У‹ôÑÅðKŠäõïâ‰c&®Ä±™K±,dψXÓEÄäÎuׇWó8™U(°‡¦x¬ÙÅﳙ”V›(ଥXå‚ۉêÆCq¹¥=½…ÅE¦÷È>¿Âݞ‰HЧ{ˆ9×®%I¹¯Ëê·ÞLº×ˆšŠ7Lå•ïnš·„Ä? JH'ŸIhì +•vRRè:öIƦ¸#d7½åÔû8*ρõ×´ë{ËDZGÎâ+X=®é_U»Ó;o JÉÞã¯ó Äö8éˆñ)4ÚO9ÎNgÒ ÿïãP'.Ÿü‰½¿Øœ;ü91Í÷às¹øÏøÎ¾¹«Ý +¦T$½ŸdÇRìú¥©*TsîsÔF⠒žï­äsnðÁöøÂ¨î¿Æ4œ!¦Ìv?nèl£óaiÝåâݸ´XNïhí/‘»»Ô‚tåÿ }Î×÷׍lÂ/Zh¬úcãOþ7‘ˆNƒxî ²ýo4àãóNs‚;® _Âjabõ„ø9n³”®¸yé0¯ƒÁ}pöwǂínÚD”³¸ëk nD=⻾¬u~„³L£Jo`:φ·hÅ:wMð4€óõÒ z…K'hRÄò³sI_4>$ÁGd¼hj•ˆ/‚-˜ËÈS®Ï·S°eÉQö£A9RQ)d•¤¥šŽ½ƒóã,i5£F–!`´?ò²Qïý÷_YÍ ò ½¢³9c;0©÷Ý*1Ìa ol½ü–DÄ ’: µ>QÈó~¾¡VÿâÆèÏC-K£>© tÇ:À=° 4{ñ/':V“©ž·¹-C²RÜ]°+¶°6n¬ß_ôÑô×/sW2܀ÕKX\ÓӚöÜ"i˜ªè È錴H3G‘y[Á*…U.Ô B´¾xÝô"Ïxg„aœ}ëÜTd‰+ì¿®=…sÙë§¼­ý‚¯v׃K€É“¿LÂȻܓ'ïߞúxû>û”‰*SÕOr‚ÀK’ôYäËG“RA|¡êÕJ\¸’ î,p›DYäHŒ*³¼ õþNƒÙ…rX «8`2B²C¨¹µZ]ë¶a±ÅXZ(åRZ‹\‰5P†êéT¼Du} ؎™½k2Dx½²7]²yg0L¸ÆIác ÓÆM„2Æ&&&xAgAîC*ÅÏ(7ÐÝ-zç–´8ärd"^bmÞ¤ý·)]œ`aҁûgJìóãÔ"-rDäÀ „7Yg®cÑâœÿt©ƒ–Aª†ë°zå j!ºl]Ài!ºjõË0ÐÃu$õÏ0(á–W.mB|Íí°fÌÞ ´8”†ë­ç1’Ê-:¥ŸXËA÷f+K€‘‡qÃï~°ÙK@Øo ûÝm…¤Ç“-È{ {?åJÎGªq¥T]~u«=bµXLî”ò뿗Zŧ+íðî4«K­ë\½Œwáêœl—_å.¸æ £—a4{ׁ.¶,£Ì‘uŠxöqÑÕøGe×ï\_›9þJ± +£º¨Ž-Z/êT¨S4ÂDÎÚ´?6C̚;;ÓúŒšÕwjÃóh¯>÷ƒŒŒ.õZôÓvdd°w²¸C39·ìÖ(ʳ, ÷v¶[=­¾Õ¡}ô39ŠŸÐm?Gö{Ñý~ŽÿÑ쪖‡ØëZÚ­l9 +¨u×2S³Óå”…¯,—¾²ydÌ&ÊeŸ' `gÎð†,º»¿#©b½eÓAzeɄº ý+ÔÝ,Ó½ÒÁ‘N©ëv2ÜW°Zu€à´Žp¾„Ú'äýe[àE‘˜$D$дB•S+ªñ_O2KL,¨‚¢KE +G‹5Nûâð|—›¥þG‚»À’žm*ž?W­nH-áŽroS¿4•»2g°à ²·À'á6=Ý_.š„]YÎóƒÞ"ZîD®¬15KP˜ªDЧö~‹¹aßÈ!‰G¡+j|ƒ¹;Y¥\‘Ï·Jìvª¥XPm’¸I_ïX8Pî]iQUe¼ÓÝL4$°/ü0ñ)à\…Ó¦ÿv|¯-’ñ¦ÕÇCѧÞÈû;î.]aÀ®©û€Ö\Џ9tPcá»gtÖçObžæ[Š ‹PUU)nbóñbpÅ~{pÝÈcÉDZKç‹!uûŽË*Zi·.C dIî3!û• ŸFéj Óª©i;YQ’Ù _ˆnús¶EhR\*à‡Ô— ¬:¸«Ã°U¦YVH䱡÷•i—.àB7o«ÑºÌ È&nt̂Jà´×tÀòåÕ w÷QÇÜU"’ð[pZJZÜ•õ9°7/Gá˜Fæañû!XÿD‰-ôNIW¢¨±SKDÊv7àÔ0‡ë†{É`ýÛ[x-Ú8‚ÝœŒñçù1^ÞDƒˆôPÕ.Ïڝn•ß÷þ¦ØåÃp«É óÈ äËqu­ä=Ë2¥nк–R·f,»4½äµ´R#ÂË62}Ýd~ÙɾåšOT#ÂSŒ~,Àgy°  x@㑕dT”»ÑýŒ%g*»«WTqk\êê•%Ôí" ¾Uqgd©,)bÏ/žB¶üùU øFé[¥CðxpÃìK£2•KLÅGËøHG²RÔ…¥mÐÜ? 0÷cüúhaU G}ì‘iW’ Ä[»YBÓá «ê‘=TûrÊEÚX×Õòðݱ‚„TÎ¥Ÿ¥ÔKÄvÆYùRéàž‚X)s”MâÁ?ò¥s3s +sTY}²;Q’ßNgÃØ_f™–²mŽÒ2vµ¶;6±òÃÃ[¾5S$¤[=г*£Bҏ&üV>ânŒÈeÿÆbõË gü ÛîÜ×3Ú~?BÂã,â¢÷uÆY¶#æã€;·yÁ'ñXk7\cõ›¯U§¾WïTªã0£¡¹4GníKF‘\˜tö°'ò¶CÛ¡•`ÆÔµª[R¨<‘¢áQeÓ9?ŒýÏf•m;^a7ÄJ´{à I͞åO•~‹WÄÆ/Zø³­Zúx–a‘!w ?ñt­¥olZQ¥Ö ydÓ¢Ï$Dm[ÜÄvYG\ߞŸ*Ñå£à´ÎÜ´–âÑçà8 ÈIUH†æÖ©5²ñî˜Õ<{šeR†Ã†KP¢8p52ˆK¾ën¿÷î÷wwujÕ»© ! FïA£M`hÁ BÆÀ4Hi$&C ‚nô5 ьs͸ØÇ„ã„múE` b C`Ûޒ Ž0ê4£6&·ÿïýîê@ ¸ä’I/§½mà\õÌöe¹–å÷Éo¸ƒs.[Å·s=ǹmâ\ËÁ¼›ðó¯À;È¿.c§{ÖI$“[$ŽªˆÚ¯yÏóž:÷È~!uœwVZ"£|CP=ÎÕmÁïàrõ†xß@Ü}$­‘£îF5ªÉª¥$5ó)žÂ ö‘FìÚÂÒÆ¹µ[ T‡0/ØÃ9µ†¥V‡š5=lø!‚Efދî +q­Uä\ PÍ¦û>­ 9n^œæÒ´…+Q(³¨¢6‚yá$dcHz®Ð0kØÞi¡‹ïi e„õô‹÷“mäxHyÞ9 Z»Ó„“MžWé™&fxßM4õW$Ž#:‡â~³MEAù{¸D`K3*ˆ®‘ 'ÔG½U!]¨O¨Ä›•-YïâO*ÐÂþ-üy5Kž„¯Ø-Z»:†mú,é%‰[ŠÙƒJO·C–þšæGQ/|¦lJ"Ýö¥ï@Ïß!ª½«çÞïøÌÝéîƒ`âۺܛZŸš‡¢ÍÖå5m˚‡œÎ´òÙ֪桮)=c:ß š‡„Ï–†­œóÆ(Xø҇£ƒVè(6qŠ+Ó;7C&'(âršÚ>L‡”ÿ$Å ‰Qf2¦^S¬é³©©’Bhe`>1ø4S¦lnés1 &lÜ®jaoâil†XGeë.Š T#‘§kÆÝŠüv‰„ ¬H H1Úºå«Ý®µCã¼ÈW ±žÎ6òÏó '>ßVNm]Ê ³L)r;¤õä_ÈqÐü^0ß?cvd›‹%fHl˜I’‰5Ó° ªÓF$®W;#ۆJh’ {7)ü‘yq'øXëÛ4l͖°&²ϛª÷d׈é hòƒPž%ˆâùÈw~5Vî¯VõßaU¾CË|é-Í0;¯CÓ +«J­É úïÚél¼ B_íÚGî6’Ça]Lµ×¶œ’®(ÜX›mº’µ¦LBò^õ0iâҏÊå‹8TË>-Èá© +ÊÍHp=]X çäóÌõ|BŸäi»žØ>õü2ü=¼<›ÄÞ[Ím.áˏیŽܔó́%Y¯çR®B#¡ñ)ÄÙk³FCTCUn>ñµ\â):jTñIø¸¼Éú’-‚úcmžlëX!§ØUX–ÄP§“nápдËdӓþ¢™]n%êz­ÒÔìP×÷èÀEÁ±ï¶,˜ØOQ)§Ë=¾µíص*‰p0i`eæ× C£*ìTó AuŸ9;ÇrÜp`-Õ£uúW êÒu~Ÿ  ]J{û@pIÃ¥9;A±¼@Fì5šENhùÁGˆÆíb|ó‰J1ÀÀG\µ#Kq/2`·_ÒàÃ}™é¬Ò¥ªðCuâùÜcu®KÍݙî·JméqÇÒ²ñ¥Äȹ¯8p(’ó¸Gºã[,÷Äjî/ßÚ5×rvœÝ^¯V4µ #K6»Üª/•o“š4p%Àh9Ï jhƒò{Ȥ“ù<ð¶ó˼%¤(gá¶«BÖ‰\­2mªßñõFú®QàŸàZã±Î­”¸è5õ÷¡HçhOrÛªÈÙßꡀ.òáðu L Š·ÚÆÂ;X îÀ®Àav°^h¡ ¶°&r'™®£jýøàÏh»6§ØÙa6®ßQê²l5=±¤rÛZ:žÖÚFºu“ZÎ¥Q9+V!Äü +:¬ŸKÆÙ}©há©&:ço†°µ*ú¢¥]ªÂ'Ϩ˜UFþc¤ôrø\¸3ƒ權m@QüS  - Q¹Ñ0MMÞ €Õþ=ÑXœ(Â:P«õJ‰)W¨¿¸*˜èuƒŠûSìj½×khõS ¨Ýè–ÎZóü¬¡RÖʾd˽ðÔ°êÊ}^©ý¹‹2²7jËÔá~_햔®›íYé*Ökã÷O^µÃ+ aîõªÖtŠ\öì %pU¬Ì]HNmÙ®ü›îÚ§)m@þrØjr»7£yXú>¾òSmÀáø›osÖô+ô›¶ëÓ¯àpÏ¡R‡“ߪCîjušÕ‘Kµžk¥ÊPîníöY§£ƒkµ˜žT×tǔpm¹†¦¸zOɐûæ1CÇ:½MXG¥j=X@À¿4,aF‚Ìfï†ÚÆ%T2’ñ Ö¥…¶ø¸Ík>¶Ú€ù溑 µªXêvÌP©©=›ÿO˜qþÄ8’²^´9k€¦¾ž4!´¯ªâK±Ç-ÿ“¦R8jýü³®ˆâ °ßõÎJú³çÙ)C^r•õdxÜT‹ÔëùPìˆO×_ïÝög%äS‰Hý¾Cj Ó!ÑL{7[~‰Ã˜E 3,ãvºÅfE.B{ÃÔØê¸:¤Ói?"¶õ&øùj® jÞFZ©äzþFZ é¨i¼CÚÖj×|ÝDmËÔ³b„ë$}ý¸ü;5zЦhC²-”ëؘ[æB´Ô}þÊ2÷xX¡›Ô ƒ£. +Ñ2cqäÉç1¬5›–›§½< ç£fë +­Åꍞ“êš\1£fî];ZÃzöµžËFµš½µ:©u-uö­ëýfƒv’‹äZ~qÃ5Ú¢?w }EÜÂ%áG,^>oÛ4ÊЬÅçY*gqu!Òr&kYÅÚ +¢k]hxÞ;ަàýü¤Oö£ ۃþl÷ȟøãP!Ç[Ÿûðù%?²ïº³OÓ@s  9è 'ÇëéՌ²µ#æ³=º +ì$z½Õ›’N"&…Ü«]æ¸Î¢.V/ ä:h±"zovË¡lyp‡4™·í¹íâîj”ѵÔ~ ùž/=##Ú»ÄF ìE [ԗFÕÞJ-3Ç{º í©¡5#ÀCŽ›$ïw©àê¬FavCFH,/dq­I¯s°k½.ögkSˆŒ"ÙÅ֑NÔb¢/ÔZ…GÌËñ˜÷~èÞ}›©—$KYRô>. Q5¤œ›ÝقGG”Ú{EM}[Íg¹á$Ôí‹ïŒz’½ÎõêFÑ«ë%¯§£_2f×QHi%œb‡¡¦¬ãC—ÊÁ÷áÙqîñö܋¸Ò#‹¡TtZôa»àiµüBG=(ˆkø¤&X~²CP¦mvjorÍþ?ÔM¼ûF¹é Ø »Eˆ’,*úª ʃiçpó@ú}íܶpn論NéJ6يZgrœh}Ul&vòQÉÈ»Œƒ°…òo‡tƒxF¯ô±Jà` {=êŠõ/aÈÈy.×¹-h¹¥#Iõªu)돨ÞáŠ!)ì‰LÑ#þ%7âRŠ`J}ñ)Žb‡‚%=Á),Å +)ø„¦Þ½à_Q`³öNå.€ïE + ù1 Û¡qÆêtŒñ +LP—‚Àt PÁA]±C¯€Ã„>!h´¬í±Jƽ²rFo Q¾jø |Á¯ˆn+菖¾>¯Ü)Àú¿ÄRDkÞ§®÷¸$|¶(zn‹a|)ŽÜ1CÌuUBŽx»‹ÞæLÌújä¯ô·{A©;’IÊIÝÃÓD1CFê…öÎç€åŠŽ’i4ЛMpÑzŽ^¬b†EÒ/X)±BaÖ¸`’X+ë­àŽ2бA£¥þ“°ìºpQ¬rHZ@¾'ÌâÌR5Ï&×ë·&Ž ÔñðF€T_W@HñÎÑÛá¢#ìHÜbr…¯Gß¿º¨•ä´!‘ó{]]‹Z¬TÑôrçUHð™¦ÊÆhµ[á¿¶CN®Z£ƒ*NmS òâ´4t/Ub¥ (ÖnðXTÖÁL‡¬>7+¾ø=ººé áz[ƒêì8…<±~ï†I ši¾ÜòíOnü"×OÓ8T÷ÐF·µ„r4ß3Ä5#Ö]¨÷6¯ÆÑì5Âà¤=lô‡%báV# ¿Ï\Þó$xºIõôɶL×!ògÎøo}±ÓúF\gɸ6o❝[…šº#aòayÔ³Îs«`¥”R…ò4ŒŸ?{È7#Ñïù[þ ÒpEÁ™?„j›-ÿg#\ܐÂz~™?ÇÀë¾u"ۏH +Ôªãzߑ .¦yŠúJõ=ÜAŒºT(LOÖïö?"OV¿Cm=–´Ac¤3ÁÒêVÇä”r×o»f /žÞãˆn㒟žš>Á`Ðù{áùٍ~néwU]ìÆ–¨×q U©ÊõeªÒ® Õ=Í| W«hñ0m:HXÐ!•ŸC´žAEñºÏÚ!vŒC_sé ¦•´-/ÿ®ûIäû' + i¨‹dhË]Kä ¹ê}p®â'Ô.¹„û-—åÆ_íü5Xd0Ò±[ôÊ#èV§æ¼C”>ÄÓW}ª±=„Û=‚w Èb³¨cIªÔV§-UçÛs,ö +ÜÑ aՅM‡aáØxöv»f½ìtî߅^ö.woe^õ„îßã¯z²wn¢ÁêyݽÊÁ [únàöìf>,WT;wâµ!—~U}‚*ý¯1Ս´-u2—{ᥠÊuùN‹gmšÕfV֜æÕ])¶övÿ$Èù쯶¥6,“ĵ.‚Vv<«*>m‡[ J»5†Ýæ_µì _öý±Þ“Apã‹\R#Ýññ€ÄIʎSÆpM\nr ì92‘íÅ([’2 $w²à[Ó(¥ŒëZ¿ãÝ·#úØ·U"þG×$Ì7cô–˜¼dÆFš C?,êÁƒ§ïœr6o߽⠧>¥Øk¦4ÜòÁ¿©c¯Á§ +–>póˆ©cæ›Ö¥¢ùEfGÝi-ß ¬"XD½f¼, E‰ìù…¢ƒú#_ŽÕ¬›Ù‚½© †ZÐSìgº¿„oK_ñîȬÖ}ÝÜõÂN÷çnÌvæŸC­b¥ »ôjÄUþŸm2Z Ąq=³àñ3Ѱ¯-Ô¢ªx‰èՄþ)s'«Ii‹›—qSè˜ä[ãcÜ*T>TÃÕeåeö@®|¨pZ°£·Õ.ޏ _òXUvUïŸ_øHù‚¬ë5…Лյ:õ‡*!€@v^¿xW£D‰Å_óúW Ïki”.°Ãl³²8Ü|Ъ‚9v#ç„ôun4xAB´Ä(!•2òÄq7CÆ&Iã[ºúyFxÜzŽÏv/)¦!ÝRX>uÈ¢¹U¬ïÄ÷Á.tõtÈà2!â…BÖóL[¢®ÏV§=Ü^°ÑÒ2ÉO!vÿ’ö­hú;&0  lÈã9W0z8?d¬{ íyë'`FN|ÄæPŽeMšCÝ[&1Ñ1~ÙvòÎ2òd‚‚gæÉ¦_QÁM&}G14š…õ„â ¤.ù<š¥õ•mZúŒ"™7+ê©“Ò¯¨øɺ_Q”U'P¾£ÙU'¦_Qæ«Ø÷ÇÔÌÚ½‹iw“X$ãJO«ïG@Ñc´zE“°QSÜ%€¶™b&XæEÇ4@ŽÊHe4…NaæéæZÁN,#}H’ãG312Kö¢—Ÿ¾LºoBb«o‹WùCcµ­0ý¨·²Þ…>zØüª£ò‰{(cï "è ÕÁÚ¤‹©ÊlìwCÑ3ï}N; C—Ãyþ +,Xª™žY áye¼iòµ¦P>ί^‰ú +¬~“ƒ–ÃËÔ5‰Ø†v’Fº´Œ_¦¥1ø÷œ‰ƒšþci‘WŽŽµ^áîñ‰àÁԍ€}wxÒI»¯õÉÎy$õJébÄŒÀ2FLѰj¨t¯ÒF"ñ~Ç|ò«ã…Fú©žAîô|½”pù‚î¬ +ã'5)V[bíÉ^E/ÇpÁ˜à×»‚J•ÓӜÿ+)Îöý±„2çù]h‰[Ã`Cë"—ìˆ§=Zet½Y‹Œòü´²áea¨k”ÒܵYB6<ÿ,ônòURìÍ­—oò Ì'¼î›Ð{‹ÐnE¾èâé}tô½IFx\šÁ¿Í¢Lp‰* …À°u\¬WfîÝÉűԮ©oÎÈíÐg…&¯?(Tf4}UŒ[ÕJï} Ü´Å÷IQh¶»ÀßÜ6⫑QnÉÞ%_}º"˜[Gò[Ä+”dVÍ¥µE¯1‚ñZÿ :£µ·o. wqxC6¢–íÔs-’°©N6Ødۇ<¾ôÓXò¦±erÖ%‘œÉÕ¢w+ˆCfÔÒޒ„#‹ÏÏ"ÓK¾UÂÃìZ|ï<â$«Jâ­0ƒI¦€ŽñíinŸƒˆVêg‡åð"26·u™¾¤‡„‚þd¬æQ!S„‘á°NdŠÍHûö +f "Aõ8"I=ϦT®Ñ ’ eù"T†‘Bý-˜A‹—@.|UgnßΡõ¢Ë8X©ÿÚ,š¥pSÒµ,Y/ÿ¢,˜TÔ«FS/®ú¥ïŠõŠaI¶³ª˜O¯V™/‡²‚϶H‹>›ÎÚ5×söœÑÆãÉë…3ÕèÁ€_杣/ü'hòS¡dš•Z+Èøýb¾Kt:éÜô×EŸØº^Ó¡Mó.›Û?κSÿÓÑLƒó~UÒv͛‘½”*‡‘Ž2¿jzl +ý ïèW¾¿ðW ù¨]~fǞøÑ½h°Ãž!¥ÓZ! Ýú"•ð…Ã]ýŽã.jùŸ+ ÷þ"Äv8q„ÕJàHg}1ó`|£ŒGé,é)n‡Èð*¿‘Ïyé·Ëô¦’}½Ê8{ñ‚8LA ¿€„üA À'k¿KÀ·3°2Eábüàd¿Oè€Ø}Êã`›õä7~§Ì É´dÇDˆïž_SŒ[ 8ú? -Äû®"÷}ØÍ“½Ù%ÑC„h64O}žó‘ÂW©Õ-jþîïU]o(5Z?SvEè!þVõIæFü:ŸŠâÿ4õÇÁþSËe«ó ²¶hf xŒ¿cm‹˜§ý¼Å(ÊÌ„àØªE#\À§Ò<ôÓś6#”Ìck(]äÁÆ(÷dÐwœKŠ>¯Ô-ê‡.‰8¶ž´½€#ÈpÚ¯Òûu†Ýƒ«Ù …Ý’ib¾­›Ø‰:H¡¾ëƒ'ÿE“Ãç-ÙÛ¼ˆ «LB¬™éùŽ!¨üÇ¡œŠÔèQZ,Çç…;ªâ9Ýà,ˆ(`l«#;°R2JשZ ëÔÏ^"ôz¯ÛØ)`Sø‚ŸÄ þ*õ1aàW¸d.–(©éAa+ÌRÌ™p2G»À´Èÿƾñ\|÷*õÁG£ —Għ¥èéî_‚ZèY#©å'Íä L?h"ý’*·Žx…œyvkOÁ››P7Üf푾äÛtlTö𓵪¸aqlÁ• Ñx«êÞ7­7‘õ§ž} ¥&‹ò³ëf«0Icë/O»;ý¹ £`°ýÇ´žq‘ûŠôã}ö>Ø!4™äÙo¦õ‚Èә +kze¾{êžR‚ »A¾©Å(6 +ˆo©IJ2× õ.)AlÚ7ß…¾©Fûå íEïšBƒ—…ß}x{÷ÓÙʎ`³¯Ó®0%ø¿ãQ ù.^Þö£Ÿ ìõ=—"YùYÄË«IW +P‰Ç‰FΦì-h úˆß¯¹©ÉݛÐ »l‚Us:­2ã1\^„ùìêj7F 81Ça*D¯€mr¿ûFèÃä^:ø#. «‚Lýýuº„óf VbTT&Õ¥6ø6q"l?W1 ¡ûŠå‚¶Ä·Ø¹Ÿ]vÙ"AÜVĹv“ÀH¡°Âû¨ßz”Ê6þ ̋IKÀ +ኯ}¡W›þ•zF½#v*¥ù”ñ}Ä9€*¤*~»üL»¦ÊÊi²ë~uÀ`€†„«‡†+ƒïÞÐh_RhG†LG†Œ¨+–ÙŒV=дW/Qr²¹ui-•‰ÕìQbLDÍ#²²a.S±Ž°L^Mä''hÈÎ%†#™wV’Yû¹!Ež„J¯~3_'R-;QÆOY+„ô‘&K}CÈC‡e†,įÎUØ¡ ÌÜo"‡Ó;3:¦ÂiÚu ¦3ªhñ0šk®!íÚõÁjWFÓÔÏQ0˜jj£»’æb<ÆÝ’rør¹Iòô(ž0Õkgr ÔÚ»ÇïFÜʕʾ¸âÜÉ»ûæá5›Wj*fMU=?•ò=}Êpb†D*ۖšÞí°HkzCÓ[QL!ælaï-þñAßÚ!MÁ 2'ÿ ñõ©ϔÓ5*2‚Ù¢sB€8¶“éª)¾òϏ–n=úYáïÒ<ª±­ð9Ú­×#ºAãòÞ%¨/,ŠÂ߯ÿÃG¯ÿËŸ²á×Nê쳸¯墅7l*·Þ“ÿšàörÆ¥^w¾yÊñ ¬ñº~,TÅp ŒŽÞ f7 â÷ûÂÜâ{º­ñg¶rïr•„IÚZ­sÄLnÿ–5åbÏ[›ûuD>-n#­é!è?ò­x&ýBÉýù/þöÄá¿ ž‚„óà!£áj½ê®mVïÒrZ*—~ί¼æ£Gм(v s¹}‚Þàww.d#–!À (z…Ì©wÿ¿ôœž>k7)(ºµc±xŒo[O´p7iÜûסÛ?”Y'܌Pߊ¿ëü:ìo6-žkÂߏÔϬ`âKŠð‡ýû!÷î[°»üÆØêhý/çÉöÿçý‡‘Êä²+ÿNë§#Ûãq¦0;†–ùáÿfOë¯ñÜÁ°Z´¿2öàÒ–w¯¦2ÿOïþÊÍ|úocÓûÿðýò¶ßó[î( #d¿êÛd¸Ïýeäæ?Ò¯4¿,d¦68ÕJK›WÝÓ|—P¸Ÿ÷ªh³¦˜‰|³y¥ñªccM†…Z—Ã}‘éV·ýõ¥û¯½µc×£xKðÀµl؟àÀ` xp"Û‚ Þd|hS?N0Šö¼ïËÐ4·4º˜?ό ·q µ8H&•L ƒ» ýpèú[¼ +ˆõ!õC°SyRBÁ*Ê*b¨4AƒVÍY ta% {„!ô0‹,! Ú¯½‚iü·*µ’Ð҆ù C@­rµÝêç˂x/>É½Ó ƒvÀÝ<ì=Î!ÍÌÄLD(ˆƒinSW(‹\¦‰ÈÄÄĄI½ÜTüTlPEâ/µ‹Š‹³{{ž.ç s ™¹ÈÌ|bøÀŒ7;Þ5„hF…ÓêÝ.·G×@ÉÝtW[µÕõÔ!£¡£–G>ŽOäÆnYŒ³ƒșÙ\„wÏGbNNpi÷y›º›¸]Í£¼b¯ +¯x75×v]r¾¸:ã~¤g²<#Íî/=¥æò“iã­f à zìoOß¾½é¥á¡4 +¿Gא‡_tÚù¡¾G__ ï/¹+íÒúÓiïÓ×èËð_Ì5—j™¨57?œ¿ÅßÂþn]¶!±­±½Î€]€#Öæä1²Â+}»ìŒœ‰™k”À†/ý†°!ÂÝk½àïx0¥}ƒ·1;õÆX¼aC"A@‚ìÏ* [ÃàPˆ“¥ °>àkh)âËx®Ÿ ÀêÉX2AD:˜¼Ä:,³—ØSŒbC&aÝA] 01X…‹D/̬¹kk–!å…þÆÿbyHÄ}ƒúgšú»áÓao‘î¶_ràŸ–Ëéq¯§÷êý£Ò}&ÛÆÒhôoøOÞr_èé-­­´2L„–„¼ä´2Ba¡`‰†„ ³Œ×o$A\Öü$ÏÄb“ﺜ@7½µÞïDªzut™äsr>y@ +ËIfÙ|Õ>k/l:Å?ö”!F-½ Îb¹ÒSˆÜ$â*ô@0  áˆfŠl:I"­â‘$½ORâ—§ÞØçc…³ìQUÑÌKX Y(²m¹¤SÊVŠðD­ôám_©Œ"ßNP«S¤ý£AÓü  ,nÑuº>½‰@ÁÂïå$ž|¥íHäòT‚¥Ȁ/?B¶ÎƆ“> šlÒ²r‚»äŒ.Ä@éIÈ)ª æÞ‹€ZüZD B¢ÂҀ4ª{{>yUòÁà6жl:ó €½b7ûjD@ ÒV¤P-ّùTxŠÁµ¡%º€bÚö.@/r­³° }L +&,5p {ì0Wd´¬®ºe‡•m—­••®€ctÇü¦>\ÿÊcš s°¥×I·s¾HÆ9=3ð˜êì`¶Wƒ14‚¼ÙŠp*ë „’WV¼Ø‰5sÅK0Á˜ž]†lÅS + Y‹aîô`¼Û–5„Á±mÎÁ˜¢hìيò'V HåæÄöÇLs¡W5fá—8œ3 +é"‰8fN'Õ÷ÑFÀœ3G‡n¯]Q8w…"½¤@f؇rq8gÿ,@gX‡tq8?¶í®Q-„P¿ê·ä1Ýa«ÓuÄ<¸ÒŠã-@)P©{:ˆÅ¦+GCt&š`'N`(5@+!¢£ULç)N˜Ïå©*ùÎäî×=™;ÜÒwma–HÅ`®0˜¿^šjïší» °G¦#­Õx,¼Mcø… +óç•À[ÀÿýIöäO°0Sù\{}/k¤ê'Úr|Yü­»?rDþá!‘Ÿ‡‰³×¿ ”UÌÔöéøVd —ÿj|Yü©†’³üU>ЉýËð¹õ[÷&!…>¸ˆ&òà·üj=LZl›HlÆÐýZ?˜F@°ª:ã'  Ž+„Y +¶ró ‚Ž¡Bô"UIa;,žSÕ<nŸú—»ÜTVŸì>CÇ+…‰hº2ý t|–/qXr ïdA†"¯x{Ù8•ïÕIÞZªêrø–—Õ°÷›ÜK û•êûu;„S +Ê>å}m wgtk#r¹ß2’Ã[¬`ýB¸UÐñ1‘ÇG´¿H݃+þ•êÿƒÃß°.Ç +—EG.‡ŠŒŽ‰‹ŒºGukX+Xµs7%ÿ»UE"ÿçB/#ßÁúî£ÿñ¾h?õÿ_Óúî£ÿþÔÿþtýH'9¯‚ÏÒÞ¬pÁý~chF~­ P#”ra (?Yú“ÿ²­Ÿ,õd·‡üK"Ãÿ¬ŸëGÿ÷'Ëñ‘þ³è‹ÿ÷'ÚF0$wÈ¿ÑÁgøøeߒWûtúØ1ÿ*þÀ²›GŸÛ§Ú>П^Tÿì‘ý½Ù€k…ÿøÈ¿ü,¤ÿåj@ä§xü0ý_×þg÷ÓÿÓòFü‰õÖñ–·‹ü¯Ncø‘K@_åzяœÄdNo‹ÇLNbæ'NGõ6¬¹}Hà–öW-‘–Êâ1˜ù~ÐíXE†]u·(Bra¦`0’á&[J^¼vã9Ûætò=h—t™š\µ6fˆé±ù™ +‘ ³ã·¤¢;ã7—ÌÒö' +tˆÓ°²8ŽÀ6¿È`ïò ›a:BC±m„ìp ¡–bf%ñøÖø¼b>GF>hìN.nZnncˆÆOœ;ÐxÅâ1yŒL2Ïé¿t¤V[ û¥‘K _‹~æÎ–¤¤:hoÞNxvŠ™¥Ï— _N®L¬»VP +‡SqVÇ%:”𐋠Z1ŠC(…1Rˆ¥ +'™OŒOÙJ›æuax`ɖ÷+ÿ©à¯”+Ñ£qˆ—žJKërm?¬]äèJªH©*¦­d>¶%k%–y]iKôÜBŠqîÄùÒý|ýùËb +ÿ¶êJŽ¥ùëÇô-S›&<¤üÅÆ±3º‚÷ ² +óÊ«Ÿ,ˆ'ÌÅQá îkðÔkc¤Ÿ*Ú«½©AO¡c»ð´~Ý2OvX°àê4ø+ñLÎD×»¼]„xpôN—;µ‘°469 +æý"}Ž¡;7IÌu + ¸ž…k|}GV·¿'Ô}k~Ù>šV·Â'ÓZÖðIõ % ûŠ•sè[7é »'ßX®v0~À^=«~ÚûVøFÚ·ÀNÕ½ÿ™jÞ Vý¢ì!Y +†8ÒµæX2§m×ô\‰E'¦ÂOпN›´ÒÃŽ‘¥…­÷Î¥úä_…÷SUN„ûpiµÙ”O¾³—HSji¶ƒÐ@|=ÃP¥‡q ïœtÞ¹¿Ê$ïOm1]¾è ¥OÊDmRÜ´ +à$ŽïÊØš(3íû>¶*·MÜ­ô0TçÖÔß-„•©°ùP®ØàJ ñÊàaƒ½‡d¤f’³/=M¦Ò¦\2óކM¥4Ÿ—žÓvÚzúil!‰'qéerºˆêÿQ¬ðËFI¥ƒ{íü|îe'ąðò¾uGó97¾d…fÂä`+\»„Q›å¦ƒzŸ€Ç…9d•Ù‹i¬¤mþü¤êpRTÅ/PSæS‚”×3o–"ûÜ)ÓñàE sÕd·ÝèªÆÅ:Aæ±/”'%Di~1kx’W­™_¤ª«‚÷ÃÀÌÕ³Qý/÷5gê’±ìµ ùá%Úýâpùí{XÓ÷_F7UõՓ!0¢yÉ÷IbìfKæb­qõÑ÷¸Ýl-M Þ³ €¦Ô½*C…ª±HøÄ ðsn²¤-¥‡Ò»(6f#+LöžU +Ì ™“ +×Yj¼Iª‰SÔñN©Uvô Èw -H(:qMS9S]üEÿÓÅÐâ5Ú¹t€zÅ#—{g+ÂãJ­/ƒ‹0ïxÒ¼/ŽT5e"ÏzXpûhV-¿çÄc—ÑRÒSPIk™jCL;RúÅfÃÍÉ¡e©òÌ¥Y‰ÚÊ%h-®š6ƒ¡^[©,½¯@|²  `é|N:Pãȝfë‚—´°Õœ9¨¹éú«OV¼a‚±Žíc'ïsÇ!HG —Í:43eW¼”ÝJoªŠù`!MDƒÑ¯ÒùÎøª¬ùUC§/X³¦ÌòK÷ â$Œ›ßóÇp¬ñĄ:ݑ…9JD|Öxî®97úÚ°*|`†õC­"PÏß9èŸÙ,‰Š?@|‹¾è SÄÏÒ 2đ†ŠN'†v'!N®n7átugÂI+ˆÙ &lúÒµ`…g¶—1юâ|üzX²JàDŽ{2J‚£ºÄ!L<"/‹ÁuÝZãJ"’¦)N6caþ/Äl;֖]6¥§; ÖtAÄ’G…øåƒ§6‰£„c=•9AÚÍ¡ú–üÍ +.§3Âí’HïP*.JÅ=bq¯Â_%W#ôlCƒ›!$¡9YR]€~úUZõŒ(¶¤`ódš"Pÿ!<,[ð“AØ5AoÄ]hRO ß;=tXàÒz/4sh¯‹ùyá HñÃòfƒûgB›·üg9üÊ+£Š¡W'HÀx$n¥Ön˜Å•¾Io¶¨®‚ü·XØâª•Ĭžp_fEBŒGUB&ä=QLÃԆÜÔRnê,:}ÞÛ©o`¶©oÜ~('œAèÙ5¦ü*ó + ®Gq݇ñýmGÎ|¾Ÿ¡ên}OƒÔ¸õúºßW²”ó¿ðwÄÙÚm<­¬em­n6ºÎûcaטïPïñV>#òüمޮe¯Ý˜öæ1™¯*W{0ÛQåd•ŸÉÆPj;3ÖYo'2†½ÿ—÷2gÉ1 ·üqQÝ@è8IêNòý·Ì—oVÑNËðcqsù‡ø¥%ÕôsçiÝ2KOyµºÜÿµ¬*<)]Hr;øsºC³æiÝ1Úôí[—kÓbً&+>nÿ³¬F;?ˆÓ¢Æˆ8^֐çfA°– =VIvÈÅK8¬{ÇÍ"xQ÷øöÈÌÇä=ÓË»µ5b|;~xç_M|1'Äb¹æ²¹¾2UŒ Ÿ\„àÉ{ßÈÇãÈ7Tãòò3}is?gs§E5.|Ô-7öLJ·êÕ°·+©ÕÕۅ×Ѫ²0“©£ƒg¡Fd’‘f[¬`pKƒfqÁÃ8rŊXÁáЎqY”§ƒg D{9—Xô®¡# –qÎ ôô8Ù£Q;eÈP6Ÿ%Öñl÷²¥lådJfQ* ·¥‘Æ3-£Ûir#cš—½éÓÎ:j:ÒR‰Œ¸·Ð ¾­½Ó¯ž úÔcƒî±K§|&?R\v!ø3a²0ŒÊÁ­‹ÑA–7T–ròŽj\¹™…Ô"ِ*©ó8‰µ¬ö}÷ö\ÔtÄpü¶©"c ÜèXŽû®ª}5ýx„Ò0=É×2„’‹Q’ù]ñþüõú+®¯ÄùÚ|ôî*\Ç2¶‹¨h6ÇBµ·ººö“øÖDrhUD‰ƒùq žd ÀÙ/V¸<ӕcÿ`hu³‹1«y[¤¶E.„$î7” L}-"|½ùaðçuU!ƒêOÓÏÅe{Å•åfž1Ö!£qÖu‡ÇÈ™€ù#AÂ8q·´f]ûãq ê\DG@—S—üÐf];pþì¢&'ñ¬H?Ô½ûҸǨq ,È?8Î%oe[°ßC¥=?ɾ¸‚|õ‘HFß²çÑÑ U!ÄSšŽÃ²´ž€á®®ò½íwæSé'잤õ›(ÇQø/ ,Š*Ë«ëîòޔ(áÏójóG ò–Ô@X”+™åÖ¡\ã.±mcÆQ‘î¼&_$Ü6lQ3iôÑR©fžBDý›‡Y;ë3†YÇ"ԐëÐj[©b}ö .\M*|õ,â*c¤i³ò!Ó«Ž$ÒÔâ‡êÉ"ǂ’@êMSCôvÉ,—?2œZ…¶*Ê¥lÆ- +e¾|cþ!‘a³+ßăš:D°Œ×.ˆô^`ä{KÜ&\ø±èÌOäf©àÅáÔ *bIM,³7’SƇޟ$”ûK3ëM¨ZiµùJ$¦§áåË«â(B! b’ÕfÝðŠYĒh1ábÁà© &Ý®X€Jæe‘2:ð±JÞRœÀÚÍg¸Œ +Ñÿè²ÔTdZB“,®â|xO¨ ×uéÜ…–®9ÌØQ娔Àß}l@Çɐp¹L°}ÀÇK\€]wÁÔÉ¿¼cD®ù\vYVqbۏ“ +³ˆ²°}“ H<<£Ï ôÛb£þA`ë`U¯¹Ý‚há‚f!K4—F8ÂOz] v6ÄâƒíçˆÀ~œí½Õ=Ò¤—pŸbð7¬"Š…æ\€q>9G: Íãªûô)ƒÁ“Ï”¸@qnbU +—u‡Hà‚);ìEtÉv¿R†°ˆtÇÃÍ ô*O‡öZԎÙN1ÞlèKçbu$—È~ÞÚWU«f`qxmñ¡Ã•«È†[*˜Ed<|¢Å4<ºÃ=ÃuåX¤`o›:7ƒ·.&`Q"°ÄdA¾mÊàš«’YÂ÷ïËŧ CçpÃt.[T͎ŘCiap‡ótèTÄskT7 ¬œUŸÉ“‰3RH:De~±?¨q”º„dk˂ÿ÷D¦¬qB¨“ûAé6‹Mž^+!©ËSˆ2ÛÎ<9ò-"ã!¼½ X¾½±ºå‡¤ƒ¾Ë*ñÚαT²ÂC5ª«Ž‹Q¡c¡z¦K»Q0f”œ*4ºu¯ºæ¸K¥¯·é2ës —>•.kåMq5¯·¹eËOŒƒÜ€¹n–Js“»|‰®ø¥¼“$—qqÜí`S4t*`%–/ñå—Xe—Ûe˜s²Ìz¹hÏ˗†³ß«*Ó0"ЖÿŽKvÆÙ¾$²yëV~Y<–í!•4F¥Þ7MAÖJ ¸p±›ÔFïhUa½|?¯euÀ~T2y1 Ï&Æ :Ôd„yڌŠ¡Äî!PD&EÀÍmL—çÉ”8´SЊÏ7%4ùð/·¹tbß°+êæò5㊰†ˆ·1•åB}ZߎٺödœG²@‡FWÃ,‰Àȶ#L^agçµfՐ8ú³S€óHH–Ž$²ôrõmJk +ùù… c.Ìëçã®Äá0ˆð•bNÉÃÜ> ˆ½ä<¤ùiÀ=9¤ºF‰;ßá —£¤¢¦‹7¯+#»—©pë,zr©á>¼^—Fx‘HzhœÜõ\Å‘…oWm.OOB¹Kðõó¡ös®)x?SPôr•]Ù'9ãâÒFAGñÅ%KÁ‚Ô)û©hUÆF-‹Ô¬@%²_uä—UiRÌ7y8š”s ¼™¥±k(°±fÚhÂs[«÷¬C‚{œWóš $*['¢i4сÍÞ[(Új]ð.ͶaêKhùV#ú5|;»d•DÖ¢{ƒ(~çy%4Ò½|‘½‘ è]ÃïCŸÇ-ÿˆsLäø‚Z~:Φ¬³ýŸ£±}z·Ð긵뻘Jrٖ±ÁêH¢tbì~ÈØn²U/!­æ<)hdÉÔ ÍOšN+¢Ò‘ÑrõŽ U/yBGAŽŽÞjrZ­‘ì ?ÚÞIN|'§¼’=&ئwg´ÝGÙIU¯=(üQi9x8|§/íÃåj}òýô• HùÑì8^K‹FŸ|>={¾Äx/úßéÝR¨j^»¶r<ú㏮՘Ù?A}é^¯AÿFIã5l]ڟe"'‘õ§7ðî »¼¡²eü¹ÇX"¨J½÷•ú KÔw䱀…*ÎØbŸà’C”©?ÄB]Q`!o’sŠ>²€¥ÎZëØŸYê˜QÎW‘sâ± a­‰dæ´zþ9¡ÐÜ(–B.‘ŤG{·5އD±^Íä]Û¶¦ZõVÕØÒX²;ޘì‰$°©óEÙx¬úìŠÂªZÇV¶²Ñºl HôÛ!Ê(ŒvÈežÊh-¢¢S-Mn#wš|fq.—îè]/WE»I1ÐDÙÐòÏ«’̚aÚʍ4)àÙëÝLð+¬ªÆµœ'øˆSë™ï q™¼;Sw†_-h’õ#ÈÔVäÙÙº¿ÃszÖ+jfÄN.?¼,hˆ*8¶W6ÑC¦V×2_áÌÄ®Ìë2’°>_z²nT§,«ªq=ê×4s -½ã–#£П«õT'O+=@ßGâjO³ˆsã| ”k–ራɂé#ÔDÂ}ƒÞdK„üñÈ´¸è7¬„ÿ2ë霸g9ÊÊ©ÌW)NdšXr(÷õ'Õ6¥‡>&‰*ªu~)%ª¨PIk±ÁåÉ© Î$?dZÙߤ`HòFPÛÿ®§NE؁`9ã=ß(ÛóÓÇ œg§ã.=?=|ÛáÕ=逡™™áòB–ŽÉ‰SpƇ!­­ÕºíSÏ_Ô92mò}š6–‚œ úVöÖáWƒuO~€ç}•àœÀk!Ö4 ˜ð*%_¢@^ŽMËtúW πD$ûa2/eÛ-Ò»G+=ÏFjˆˆ¿®蝷&ä+¦œ'rìŒõ£¨Ðƒ{ÌjLþx[ÕNÝ+­R|W“ÄܜpbñšÐø—´õûòÓæ’w=y¢ÐzÔæŽw„Üѯø;ò £Î—"R%&Å/BW“m©ÛÐÆ%ÒI‰8“³&<ĘLÌ©oEH€«½eÉFkrD•@Àš,\AÉHŽ€âj/B‚ÕE·¹mS€©’rÍßd¹û7Vd¹04•_| ñΚ öPŽ?{ðÀý9²- +í6<6 öaQ¥[·‡¹ŽE‰9$ ÈÄãHE\˜Êá7áöò +åÃɘ¢/Ò¦Z]ñ¤†\ôÀac·v—7MÀ6˜3‹#Vk»ž\Q:ü²Ä€ßµy 6'†„Žéäá!F9=”àäJ@–ö0m—³.á?½^ãQ¶©#”¦S\ÉO@î?…ã×7ÆcÈƖÂÔ¢Nð©ÉÌxcfàÂzåÒÚGI Á_µ9'Zzâ‘φ>EÊàðdjóApÕ;{"¨H—ѱ—`– e Éóz!… æ7[3›{û¯çv­{ûKMÕQÊ÷áôaÌ[AÑH$‰—àiïÕ;Ä­–Ùl¿fsR­—ø§=X>6tG©aN•Î…:» +u~ë|ìvì~ëN|ë\îrC;œ‘Îç$¼¼ä: üÍjôW×Å׍Àµ5ä>DZƒÀâò‡±á<ð,ŸØìv.°·Å¥ºøé·Â©I¬ÒU™.ÅädÚ¢^ë‰Ðõ±JƇ–O ûJ ázØœíáoi†ì»è +u|–º7Ò¡sÖ"X±‹ÑÆo½ù—̰õËwjÆ ®¾‘PõUÆp» žüKµ4Àôª`Y)@¥õ;«Ö[ÏìŠððˈ­úDÄIԆح`øÈ»Ãðȃuyõ«Z‹W‹-Vq±ÑòÍiDEÕ/K{毲Œ*…¤ü#ã)ÔT©ó]ôXœº|×ʒ.2IüǦƠ=Ê@wpm¼ºæÜ^³ rè/·èr®o `f_rë0J9Ó×v«©î¿Ê=Š3ƒÃ¡F0KàB1^yaCnÜX›¾Ã |ŸæÿÓÀßÉï“ûuuq"ZŽZ”v€;–Ü={QÕYèÞr2dŠ$í;‘¥~¾Å×n¦—ÄuyP%šÊf-”ӝÑÅü©Š‘E +Òëµ +Ò/&=²l>FOv“Ì{¥ÞÎÌè\E1?häî^IÞ U7×#®šO÷'ÖÑ,ޞëè4±íÿy[øÝóìaU‰+ØÊˆ1”ÔœÙMxë@‰l~Ӟ—GÀÛ>xÔ2^“ˆCãß֌’ÖVNoœð·z ™Ñè¯xc“Ø!ô·ì7Û@öpªÜ¶i`Ã:Ic:ó,‡ôôF8Ò1Ë»Ìq'ÿÌ×¼4)|K…ßÔ2¢_mk¦Cíɺ—Bâî/<вC“ãÂF3~Q ÂK!•Ôa¬îÞ ‹KMJ§+ivÚðô½ðZVBŒjª{±Ðû3ó§:ûg»Ê^~wVcª“ÒõNIïçTdä\<›$W#¡>…hçèÓã¾ëœÊí.›GÝ3ÙyÌ)ÑÉAá±G¿=ނ^7Ës‘Dº2tTa'ًªúÇìô,iÜ:$‡Ù]ì!Ô'ƒ~«2|žš+ ü“0°*b.䚂Þ̛¯.‹§ö#Ré²~QϺÇ6ODcdýf¯ Å㮋’3SÚ÷® +’FžE4%ç Ý±G<îå{ë“8‰RØ Ù—ªF2%˜àF⠋¬XÎ/0VjÇE†nd”±oV،rp`È¢ue©MCӇݡ£ñ (1rq5KÔÓHèlUHláhÖЗÌ7óâ~v²¡iŠŠ¿á!ÁYD¶wùkH»’ƒü±AÁ$(mË`TXDê®Ñø‘kw¿|Ô=LRÚÁÀHá°¡H¯n†\­!gç–Y[Ê¡ÝS€²ŒT²‹O( Ž Ć?™ImD1ôÈ2‚ÅdîYt²À² ²È<ŐUY¸²õɔÄætñ!Î(:%u+ ñ(IÆw4Ÿ3r]î°ð›nÖ6Þ¾_o™k—ó¬â÷ËÅãŠsGo-/èdµZm¦ +*Xˆ?çHD–¢†* fœrèÆ«täðj«µÐ«¶¾  ùÜà•n‡VaMйúUhzšÃ)¢Èlà"mÜÁjl!çv+›à×TßðfèOŸÎ Sl¾³ Û¡uôÝöÊ<oÜ­ï¢ÍPTØvÝÛ6 `[4°\íö=ýɪTàÏÀuŸ"¢ë:ŠØ]YkÖ¡=¥„­÷DzBBï¯T©¿"I:–—KÀJҁ.Ýè´¯ˆ:'ã¨E€ë_¾¬ê}g¤p*PŸÛ)°gìÝH©M?Íu~{Î$âk¶•Ö;µ_Y Û¡sÈYÉΩ®…dqG¨slêçM”oƒÑLõŽ$óHÝɨÞüg©{äA1YWvÒ7\pÿN’W]€ûØÍéC¢0Pь ²E²֑–šŠ•N{¸qvՙûHÇ,Ã~u\Y[ƆŸÂ×uг x¸”<ÚZ`‘Ç9™àÖxG©œ d!ˆÓ+0¶~«ÅNR£¨qLºñ¯ÕL«|hÄùkõ1ìSՓÉA‡ Û¡†¯€œ9áïCr¹.AjæT ÑÕkžût*È©|õ㜅d<á~EnÖøŠžÏqHH²"›E Ó,ª*/Õ7XÃL(!Âڇ§¢ÈwÞ爏e.Sû³ .û6ÙèLè_#l¦kk|LìC•åD)QÔ¾‰ÚÍÇ@óq$ ?g®Ê­ ­hȗ«mYÑ$‚U]Yi´¾è}…¾¾QÙµ§ouûIª_ (;ύèß§ÞjÈűÃkF(¿‚‡%€êµSš44Á;¤NÜ1e¥ÝPé i~óÂýÔº=—ʝwÁFŒ1¦¹Ä–Pb +åÓ¶AÎÛÝòøOŠ™UÔTÁ¶/xu޹¦ð.F‘úŠrqéø¥‰¬VZÚ&nŸ>.¸t°¶¸ +$߅œ7}VA»}àM>[D° D>é•mIóH´fÍU~ÆH[sP©[*í¤ ’׎„áOQrÜæ‡Þ)Hx±¯‘Œîša×dµ³¤ç%m”˜$•*¿¢m¨Þ‰e‰È)ïö|ñÃDEpôw.¾˜”È1Mðè%vsph ×eh#‘…k@¿]1`i†6Áq†"ÀÐíBHm_P­RÀb‰Ð­aZÄ8&“è%„‘Ùç7ÁiûÐvʌxa8„ýõِzGh²–-àÃ|Ê éð[G³S‰‡“1æ… ÃÇ*û¡}Ñ¢ˆX©¸"º4súhŸŽÃÍzôܓX™4Í6çHpßKˉ?¨Ñç×ÒrpêM²ÃHó“=3®6™1ìÍê^úÍèk䯣ÛWQÏ]7‰R×¾{}dßHÞÉé_C¥Ki;»9µ¤ª—µpïATå…Ü׬ç`Rd$¡ªDHB,5Ãù|ß6,ƒÁ¡Ul^/µ/Î$º%AKìT‹ÕIkK¢¥ÜKôœˆ×S@»Ç’  eàèµm+ɘŽ­@ǍCO²ÒýņݥFâ%¶ý£¥ÔÌGPŠ5f øà¿i`™V·2ê1eu®WïhCæhµ¹2ÉÃ݈qšEŽ‹1KϞJºWZní–'¡ÓÍ©ÌF)z—A†ù.J¶%nvܲ;‰¿†ÄãoËL«ø\?…û¾íé'o•†6TU­ñ*bʔØ+wwâx*½k­^¡N^5% Hò½?Nb`f’œ}yb[KÂ5,Räõ¯`uý,C ôï‘ápŸ^'ÃVbÄÙKÄúso… Ò¯è]ý"|ZËg¬q k3ÙBs#^mÛ ðôá9bN՞»æOºÂÔ)ÊNÿ Çl¡'l§7Óï«åæá½ëè騔»Áî +2Ãñ–¤*›¿ß>E.–#$ï¬ÉNµv˜¥Š|Z!lYW³Du(q +®©^AUó`èùW5ÍÌövg)oO ~Ú[ÂåpçY–of»`u6¦ßNi½¿Æœ&'m?°:­xOD¿vëªnÀÍ+¯›U¬©‡¦)®í˜‘•B3k˨VÅA|s»B8€¯îD}# åî,øµùË¿¹œ#âÃ{Þçqï'IM鯑èìDù¥»o<³¶#³à +D ý…) +ïٞ"¯ÊˆÇQQÒ)Ù¬êC);H-¶d–l$ùNÙ â™ù&à›gD¼9nËswɃÍÓ÷F)ÍW`ø$|ß^‘Gã¢ãêsuDàº7–5–nX_\uÙQ’¯À-¬î~FN^Ӛm9°ªj„i?.–îx—$§×F4ÑM¢ia&XáÜë-[æq”[ú&qàpºfXÕ¦1UÀøÆÐ{[{Ó_ÿ÷”°áÓ=¯ÒƒÕõ0(£ž^$7²˜s7I˜.sH„Ct«Çg?ÖõE/[k­>±¿Íﱿ‰Öc¼¤ šÙmJ_eRçúŒ13Ýù&ZïÅ0¶Îü¦6øÌKj¬‡ëRú鯋vlú1m›Ç‰néxÆk"ˆ— CuËÞ½ t/íH‰Põ£ãdƒ×ª´ï*¥Uúÿšªƒïeà¬?3‘2>nHqŽ]{‚n06‘.ƒîÿö!ä/ ¤c¦1ÀFÆ- wÒKyñÀÁnú8\ +׉o|ïÉq[òÐ?ߦX†–€…d!Vº^":V8œÂ¬tAö„¦ï"éz¬6\ñ錗Ûüõ7\H—HSQQÄèÍx¡²åÓŒ¾hpö!ùHòš‘ ãëÛ²ÚÃvÅÐêÙtEO¤Dé1à÷XwÅ9Éϔk¦ 6®;V°¬óåNXú㗪d+0öy‰tá%‚:l Ç,/ù´ãx8—lºýc¦\|C»ýdA+)ô×ôN¦€½ÿ)–)Oia,aOú1•k¸0áª_‰? zrùÁêy"YRЭÕï-Å.PtK*Ô¢ôN«UҗtbÖ>ˆjjqø– +`jl™•{í»µ]í¶X¯mk¢0­eN>5,ç8užz:ƒ[ꯠôõæMsþÅ×aN5EL[ËD,G¶<c‹ÊVEj‡}wŠ\Ü>¹t<¸È·˜#¥¶FÑMôˆ.ÝòAÊcPâ¾Á¸}hÜjÝhÚÆaQ“FUñëkA0é[.J¿EJÖP,u +ËËX•b%ÄÙeFZ¯4¦v«×ÊÕ{£Çd ÚcÖÐU–¶‹ØÁf_SZ©Bwž择áåwSÂàC‡¸x¡ôˆ‚ÏKÂÚZOÙ©nç«t:šÑÐWÊ@ªa9ÎÁ 3™½mPúÓj³¦þˆã÷Wúe¹ØéÖÏì©^yÚ]4j|»Œr‚6Ä¢Ò„Hªƒ÷Ltñ; ˜€°æß9Ê¡Á[°Ã§0‘f·áhÒ,̐\´ÒËÞe|I“-]ˆ:çnˀ:ïîÔ?*îø«õ§R&”Æ þSÄèW~«"5Y^Z]Ñ{•ºà– ‰:#F!J°Ðü+BV2-Cì.wsÙï2a;}VÉmQó0B¡crI‡D>q)P=ރN>)¦ŸìàéÕicRÔ\²ìýÖž!äýH‡ó~‰Ò¢k1áكëNyäd}{ñ²]˜Ìm.OÝmŒÀ%;EÊC®õ˵K¢'nØÀøþK‹“imĪS­YÔ)ï—Ed¼«ONM6åöø×]­ïFå2é"f—GØÖÙ±*³¬Ä¨ªÒ$W7¿›‹>µkrÅf=7§÷Öè”4^^JìÔºI%ÛIÄ +mHtã\ɐôÜ£‘f5ˆÏƒ¢“J!{'[Të!É ëq­Ö'ü÷º•o¯¡üFÍ1 b(tA±ú¨ºbòD3f¥Ûûî C=-ƒG  }•t†¯~iþ׃G@RÀ“‹×-´‹l £Y‹" †÷ßÝbJ[þç9Îfじ¨«!0•LäèºÄ¤ÌÊ34Ø ¤DÍ\iVW38ÚKÁ&CœÝ·wwwn÷{V·¶ÝÛRwEYEnŽa‚ŠÀ4é$¨`Áøx! Ÿ¿ÿ¹Ì­«n÷ß{½ûß}ßá÷ñ{ø}÷¾÷ùoêx{[$ŽJä ¥I‹oò +JÀaß$¹u£ $½žÜÕ¥ìªAÆÙRÿq07Þ8‰™Ai~Aoky£ÉœÎp +°Â}³ +LYo‘³ËaIàfk¼J ˜0‡ùʝ¾Â™íšûéUpMGã@àó{5¿q\×xþ“n¹j–RD]S”³DîQŽCÓ¾•Fm}ôoðœæRªkïúԊ}ôpËBxNr)Õ5Þ~…2Ç«ÌÄ&e/úh~æöIZ"À:X|JPrŹÁźá,öÄ´¾j‚ù‹ujrXA-­µ-’¯gLt«®™Ô-7÷"֝ª€BêãŠ7C(.‰…áB«Á–úIÚ·§)¨Z%8È%0?ˆMR‹Ö(ͺùßb1Ì\á{e‹Tr:“(/ÐX¼S ÍÀ_þ´ l«ª½ùÕXVdÌٜ,ñŠx Hà‡"êZÊ@F†T]ÉcŠÌ36°ŸŽŒ‚èEïX¹¦‘ƒœ‘œÕ˜8¼B 0²yd ŽV¬Šcá'ábÀ¿™¢ª,k˜‚ÙLaª=úšfm××Q<‹þ¦A‚ •SÈÄ_8ïñK&ˆRÅ« h?˜跀 3´‹í^I© &Š1 §J'Ä¥6Ü/Ào³€.QVö§)”]¼gH\b½¢u[q)à MtZ+T«íRªUºTƒíÉ)%ð£ /€µ ’øÛu°àyðù§§L•Df÷åÔtl u`iüÑú•J X¦?¢Üš”-Lô¥2r\0ý2¯ËEäµ1’[ÒÔ8:ÃVo¢äľp­ŸÙð$!«êå+`ŸœÖ?%²ªèÌ'HŽ»‰Ï6×}ĵß:VP¡‘Ð Ü՛¾–ê¼Íñ‚1ROÕº‚í_ÆèK'WéCut1bÞ¿·ñøpp"Ô9¶¦;§B^3è®®»œ’·’0oIBføÁo áÈ/ìø‚)ðßK{ÆXuq¼e"O`ƒïhù…p1¢H’ßÁBýdPŠ„ ½Óì»ø¤ëH ~+éa~`çϼ¯²úÔlKï¸ü#eY¾@FÎÆÏoÙ.­Ü . .À‹Bì°ƒ °" B›6ƒÃ tµ¯&ÅeZúùZݘTPÀàüo!ÎNªáÄ@‚Zú¯5µø +(v +X¸€ùi]Wbb5®uÂüoÔ4U¯‰ +7Ü÷M$0ðß[úÔ¶âõß{Rÿîˆm©KRylÎnZōÆªUTÈ{†IRۥǷIÝ¿í›2MPŽý'ö<ÂîW§$8Fd¾TÊæqLxþvã„dA‰à'¥© ˜WOŸõ°¹« z¹X0|G Ç8ÐÂ@ C#ŸÀðÊÆDêsûJ•²«ìP½ hŒR7³ƒˆ)£90³xƒVl6ÈÁ)>Ií•wpõ>TnÍN·´ùV¿º¶×µ}£¼kÍP~[;›n¡w£2Y@Ÿ#OÿÓ䤠/¡³’©;)]væAì>ïÍb}ØÓÖÌöþ©BÓZ·Û +nÙÁ´H™§k0~nPjVõ…ÛÞª4ËÊ>P- .}äÏv|£dÞ w‡/˜æÕõiÎb‘_O~ë‡ÿ’‰waÇÄéŸ\ìãPÁ\ +ÖÆÆ¥âDNÒÄù7ê.«è/(ù~½y  …º® ^†ÓvÐî2‡÷ ¦!C b…އ<7È[˪µyÅ«^-½“}JO½´ÄÈ]Xuýüöùìû¶ùÓä£S\݀à7w`Ñ:rºè_©ÜƒÁå,·¿´,ìÛ˜Û*8—òÃ8Éb¶XN»eUÝ¥õD,aX̤Ô^¾jžwW*Ö>!&³³p…!0kŸÎë%[õ–®\‡íô€oÕ¯¨øXë%N˜Ó©S¸}¦ð÷K‘‚S²û|8cñɆ5¾$6'¿„#‡”Í×*¿òåpµå[~C©Ó¦=05ñå¦õ—¸²>a´›áˆÌ3T«ÂŽà0(íÓƒÞ ¼'ÈIQÿŸ’»˜ü¢AÙ¹,oÇL¹íİcŠÚÊ4Œ½ä}™Úø/iɳµ  °äÅOv„8¡9¨|ß0h-Ûõ¦;jÀNHÏâ>á!XXÛüÀHeÝHd\™!’•ZÐοBž‘~÷ìÎHiûñAÉß% a®ÛºF‚ß´1  µbí +Œ»ò—f¤-­èþHŠõHŠËüE_‰¢UØWÎ×Å6Ž ý +Ém_‹8R‘ˆßêÇ„¡Jd¥A@6«D +^š.X‚˜¦öT€ ܝ@ÄT5ä(&Գث<;IhͶª>ùÊ÷½E¨„Dæöê3T»èþô6ہí xØ•³ÂÕ᷊ûhøÛÝ# §ÉU›.,c yMñ¢ß¾p¹ogL¸ßQSZ79X?oÆîË¡fÜÑyuŠû0I;. S‹Ò•^}’ný'(‹Ö”(],&øÆ±îZ*9CUGÙoŠŸ _%|Àa×ZD]Õ6œmk.+ªP"‡)ÏÞk?äB}À搬(ÐQ +N?Q“†’œ>Ì,wɃähßákN¿W*¯ÖJ¨È\[ÿ,0AûS„Ç-¶`/ŒEA‚ÏoÂ*ÓzTš|Ô©-ó4DßÃ*‹â¥ÐŠû .ÇFRe$R%Z"PéA kÈpáG §A +ãZ§ž--“Žïîè@îu¡ìœgIê3sÝuæk*k¢”[ù¯™–6R¯Ü; þÆà(0Ç®Õ.¬ï…à ”ÃG„0D[È(1Jây«@ƒV,š§£2v¿>fÑ +Ũ†X5Æ#ì¾Ø¼?CÐ5cÜ©Þ}½ÈÐîvpIàD!øØ Ú5Ÿ›ˆEª0’œÓ¸9U†¹žãð¿—~(þPbâ?=è´ÔÄ3^6‹œX¸X!뱉mõ.Xñ‚‹ºõæßbAñ'{ ÊvҘª.X[B(¹/î¢Ä EBêQùx°‹,ó¾9ôaÉü`ƒèÓ;ÔpLšŽéñ $ h~5åvþµ­t¡M¤Ïw_{·±Båýò»›Ðëbt¸ŸBÙ8„´úÍ[ºöö.›P”Ø_†è4Yb_JƱΝhâB‰,Ɇa çê ó-ú€K™Q€uÇábýWíò¡ š8+܁ֻ†‚Ø`Îr¬ñ-7ÐÙ¦!º•Fè<xáb(q¼Ô¢Šý¼ht÷ȊûŒ`»œ ÚcDwЦ°re§èó`dUuv»ÖsÚ,qŠ^¯­±(>~#ý¶åø¿µÚÍrHSW:’-Žyú¡5x7&úô!DS|r™!nT³†WŽÚ Ií +pÁB‘°¸ãëˆP(”D PåÇܼndfØ u‹÷\_K@9Kü×ÍÚÿ6e!Ù`ϝ¾ËJÌ±ÖÎqÿS÷à * I'˜È'2¥òÐçZ¥“ƒ’X¥œ/Iá1O³èâ‚(Ë‘Ò³”Ջ-Êq—}`'/I,’ÊŒ=3¦ºWÃÏ| [ûkÿeo EQ€‚âÝšt#ºç^¸…ý}ØÁw¶¤:uÓ¨¸B¯ðt톤„nÔ$òTÞÜK„R9úI˜D֖|/&éc!~¿÷I +ŒÀÌPØ)ýBÅÒÏ +ô|âýŸ8ɯ8ßßç?ÌèTps3L’§£ð|áX‹€SrSXÁpŠî +•tÌ*wBïÍq/`×éó‡ÛÌ{3·çM|þÕ´Ñw…â"ñƸƒ¼× EøE‡˜²ò’-Ë õuÉËʟG$b]uh°‹ÏÔLœBŒSv°e*ðe$Vìè1‚0ÚðscF£ ¼$«Ò¦$ô€Ä”Á&W†Ë¸ðÉk…ò˜/æ_ó ±v8Ö¹ì¯~É­QÐB²)ÒøÃè'm™\§Hô1 Á}óeÔ`>™›/~¡ÂÐ|I–Ëx‰cb˜ãŽ^l¾mСŒƒ)6BÛ\ßÀa’ž=‹3Ó§ AV 3$¸W¥‹Û|.daûã%ÅýJ™±…nÈ2¸ÕE©Ðë°ïâd‰„aßÔËà7 Õ<Ց‡ |ýaƒbÜ ª.CÀ’‚×8wFKIº +4Émø[ÊÎ&0¡ô>ÆÍå·í<`¢-@œ>„(¦Œ¶žYvjÐhXÄE?×Ñj>ƒ‡¨,†ºÕàhi¦¸è%øÆÖ0l™Â6ԟ(ú¤-v,28,&²+xž½òd¥–·„PZ³æ +²·'(CFЭ¢c›D¶È¶Ê6ì›E¶ìÛF6˶í›ví»–Ù–Ú”oâæ¡OÍÞQö¾{>Ê ÜÐ?PàÂzp]WáIá‹ó”G#ۗ.LªgJöñãG&ªµ,\WéUG:•¸²ö±ÕÞóD© C &!D‰'ÄÊ¢@öu~—ô+„êÜh®-¸Hê”àìøF#ƒç2–Iö±þD8^keWuÇ5IÌ7äp{'0CpÇóud}¬åž¥¸aŽp¸·€é^…»ÅK–ŸÄñ7“••———ò<#W«Õù~_—¬Ök<Ï3Ìó|ß7Îó¼ãÏ?[­ÖùþŸèz†»]®×ëõ› †Ãc±Øú>£²Ùl¶{=žÓi´~V½¹rn â¹7*Ýª »Ô鐂ùaϙÆwXßÝé´©ÙBö[Ž÷_Žèl_ÑÄ·ÿŠDkÅ +Dk‹¤ŽÌy&„ «°ê’¿p¨i5=øáP(Ú­ž7OfxSNӛE=´=° ºƒ¸At_ϒ¿i3œ‡À +2ºEëáf:Š“ÀhWÍEQzûG9*/Õ´xç´_´8r‹u´PÚ/ã´>XúÃåck”%¤h:â‚ˍiæ]è Â'ҝ§ˆuSx>Òìàá¯] qüeC(Zô?™ëôhüݧÂ*ïÝOrœ¢èú{>#åŠ$WAšð¥¦îvúŸ­(X¿bö{¸Í°Q‹5x±$ÑdŠEñH/¯¸¨8”cnC=¼Yl‹qx`ì•Djãû +>HnOäú`{ҕ §*¨@ Žô—¨¸Q5€t¹DÁ ÜøŽÌ¡;v>¶r©'|ƌ6iSŠ¢Ò¦>HA‹TÀ¤ÏÕ¼Ð7ìÛäO¢\Årç0¨ßď‹½pZ<& 0gÁ j(фIôηbž\çc%&.ê¸ íÁE>ƒ6ê‚^Xj¿Kâw1T•}¼µÈ‚:ïÑýÿÿ–Ãè‘Ü|}xÊðFíòÓx,âæòoærSÒ9&ÁAøtp^VªWòÈä£6ÙåúcÎŠ:±¾2„«Ê}ÝU¥å8ax[fyï¢Eë=ÛÈ1_oQ{n‚áfMCƒŠ<ådÑ¥Ixí€xõ¨Eðñ(:˜Ae1~äÙùHGˆè4ÇC̹ +"#^ä(Ê©­+˜Äú¢‹3?՚–N¶öÊ÷ªm! Bóï&M„…iV(óŽ)«ñe9êù*J½?#¦Dj&8Äé¯l/nñµŽKЧP§ò µ9†1Xü x\̄És2³>´Ïä™þ³$alýn±HàγÜۏéHà¯g¹z8ö6Ìø/*ëèéÐ6嫸ÃÓvÛ}ĚnÅÎ,†65b +¹è¹{×­Wy½’§›L/xÛOd0qSÝ+OÒP¶¥§Z-áddéÒ Ÿ‘†¦‘ȤÑôaT,Æõ@œC\åú¤èB«DN±°=0¿¿‚.ÁM5<Œ1e)¢XœÚ»œ´”`)$ì˜.¥z‘k n9ÿJ¥5øŽ$cÁv\Ä_/s¤Uæ4 +ÊËNRkïuÒ­_Œññ s^-÷@mx´(.®A‚Ò†¯mœ²ÿn7ã™ÒÍwùT©8•Û¯ŠN÷D~ð ÑmÇðÁ_‡¶ÑJdƀ§6ßE¢I€k|P=¶Åe`c /'˜H²µ¼B‹½zJmd֌Š´ñqƒNð§v†¹_›¬½êÞØ ‰Sïý9A2崘l¨×ËEñÎ v¡œC +½z4>_T0nù໾SçuV•VÖÁš×tdyJ” Ø_Ìz¸F:¶cØË<“ +ý1Òtt@‡\0Ú1xþLCªÌâÓüÉr§lÐŽ‘™ÏpLȽÒA«–;-8­;[Û¾+± îšçñèäYîz% õW >éòx#¯à/Ï\·»O%òªaÛšâu KËðtâ{Ñ!Í¥wD=Z üS–ÊŽŒÁXÝ´r§#Éé ðHsu»'UŒ«‡)?«£0+žQ:šÓ(î]¿FabN/Û[Ø9Beõœ¡kú"ô«~“”/åÊúNP£ú+zïž*Ez•A0aR¹š.­`‘°.>Á„~vN¾s‚jLg|ǎRón¢žG?K+¦9o 6^»Þ`†1'‚ü\¶ðÊAŠe÷¶©ePàø´;­Éш±¾VKÙG?ÞhOP¼ÍCCU¢úHüÔ¿Úó Øè#òV{Ö]£[eߖ8©%fZ†nÏå–~µT¯-aƒÎŒÀ`ú°²‚ äÌ7b6žÆ”/¿1wó8²HvŽax±ÅHeœ±âæ +ìܛÅȕEê”òHRïÐîØ× Ô^ HzíîS¤bý y퓨wÈêgÆ®‹)Z¢áZUŠRŒ(¼RÇŠlµH‰fϜ¿~&»€§(óu‡ñU§1®ÆBýþâàKŽ·L¼†r¤©øMYÁ@*°A Î<[•Ü2²ªkàZmëºúô&Ö©q-hâ!̒V‰Bn}ÈSJ–WprX/ªcïÜ4ÃpÊ?ås›/AÎeðN™™KŽq‘õ!QÃ2häªTÇ%R•ÅU²h¿„ncêžâÐÅ©%©óб¸JÁ󫀒•;> m]Œÿ°ØèõúЋÝxG^YHÆRy]AÕjDµÂV#J<õºQÏÍ®LiÆÓG(DÖF¨åŸ/D>@é#᫁5·$ò;§÷ýµ‡^ÆøaC'Z8d ¦q²ó8Ä«ÅRÜʵc¡ee«³Oõ¶:Óh@RM“ò%OÌr[þ"B~å”Ö\8 ¦uöœÓkW;à2Tð†²î6ùݙ©ó“wihjQ£ƒ/ãä¦íƉ’v”çŸR¡¸ä·íUQâÕU×M/´le¦áTÇúazÀ˜O“†ÈPFY© ÕT.LàQzî*»¡)ŸR>¦JÈ1/¸¯ÁSGtÛ ¶ä†eR¥Z—ɎÁÕtu[ƒo’x6ÇzžTnÝbÚ®¾®Å©kܝ{[{\σÉ6äŒÆùÙâØpç0‚Òs\àÎõ ÝyÇF^ۆn7JËçá<#Ç'Z“»Ë$ê.ÿ‚u41imݝ«Ç0ÒR‰Ó©}1,mÙ¸/¹ˆ[“½%ã†b¡ÉCèj«d0ÖÈEVÈ.%i£YíÆÝ°‰! ljªÂ©êw@Ó#º|m w¶x<lwOˆ>›Ôù͸­Šî9èôŠKÑ4mN ýJ‹s²K’é·2²òQÖÀÎÆû§VCwàÀË;¿áWWwîæ/³&õÃÅèõ³k3jÐÅiZWOLOªŸ0iQ¹‡ÃFõùpÈÓëÈÌAÑoz”÷1j³²ô¿kÏUYUY*À\îØ¯Ôx·ÂGJmÉ·Ð6/[…ó>¦à½Ý‰Þ-ݔ՘v'Af#Ï#ÃN‘;¤ïƒÊ‘Ø +hîžéQ6ù1ŸÜbÄ||å;?úGs³o©ŸR ~ uN¡;ª%Åñ9†ÜQÌ +“vÙPg?HóÀóhÁÆSv0uT³Š‚r¨Â¬zõ·~êu!ãr\UÀÀþ8†æ!œ£AöF¿ºÜi1ÂZå>»¬mc˜4ݍ+Pká!v@f˜úÔ$ùÀ—zVmÒ}[½Ù¸)ó<$:ÀΠ*ÿ÷s~Ö z§i×ýÎk> 3a§ºíóœî¼Á‹o÷p·¥@tþ7°ßÝØÀ†+‰Hš•}ÝË»GÜÿvïü1¼º¢¾«e"xm¢fÐEGHbÛî;xdp ¦`чs™nm¦Þ¢ÓŽW¹ýàrPЮ£„lÔXbœÊåÚE*¢ãS\ñQÁº!bÊ|›Ç›©#ÍÓ“™ºltwLcZE{“*ìÈ$xKÓ½áœSœp¼RÒÁœ·2,R%ÎSH­KÛeûéWÎ[—ïÎSX¦Ïz©ý€Ávº8Õi¾Í†I¯®¿E͍¥ÐM”L,:bx’ܘr3´¬ ÐÓÕ×§rô}s€uŸNä}ÂÕÎè(—ðë›sD¹€jcŒÀ¼øÛhóo~€”þˆçK.ùVEŽE]ç‹–&Œ“º|é8 ÀòÄçÛN"àˆf<|OM¤` +ný€Q‘Òõª¾7Õ(u†¾]=SÿKÀݬóêíç­KW_øK¿ªæÕ…¤x»xŸKð'LÀÝÊïù'†bÒÁ;Ÿ <—™Œé¼Û„éØò<—’I(•@aÕ§¹áV+ÛêªìSý͎élͤq/êÉ»–T8Oŀ dÀ!ÆpÆa¥èØ¢O}i.ÑBÒÇ´9¹¤p3\@ ¯H› +šà6€‚‚ñ"sè½7âøë(à*°þ˜¡E½ÃuKh8zÿåSŠÅTØ ¹»Ò½zÆ?Ö°|WïªÿDJÉR끋¯ÂÂ3mÇÎ͔¡ÀuÙÓԛr4" ñÌk½,žów9Nþ)*]ÜåÆö(nÁq9qß;nÁí{Íänitå9Qq¹¬¼åÅw- w< ‡5;N Â혧},±s—蠌ªrã@O¯V˜¡|žàa€H%â:j‚D¿¾K›+ôéÓ×>)Ý"Oc+ýçÇpž¸bàá£57ž:u~ìëòœ¯7Ć‚)Î\룅ùùolÓäùS_ +ê#JömÕÆ†áàWâ§#R]öùd]ª•‰Ú-¹þxÃà‡ˆ¿Iâ'Öx»{֜§/Â@RþVbè6VÃCæhfùýUkƒüNùgùTÃ@ò7ï¸xQSš¢ÌƒrÂPѼ½1{7¼C¶ù´´œŸI"Çø¢ç‰Ìю åIf á8^1HӘŽ9³7ú®íÍbýåV9r±ü¹ö?—žÔdžðà ÷¯”äÉcªÚñï¼7ç][6îò¨’^[°«´à>Œ‚Q +ª¾1{»C ¿J¢²•ã˜i.t² ³‚C¶ÀU¦ì¨êËM¹O¹?„ÛOl¥? +PšÃ£­“¿·á06Bg“&é)œ„»êLðá¨A´ucêlöwÕ:fE÷2Mc– È÷­á5,ø9]aÕv4ۖǪú_.–¿5s#Ÿ¤4ëîJCLæùE¯ê»UWÝkbéʬ,êÍ Ii ëMJøO.”¾¦±Èÿ‡£0Vœp9Ý%+G¹V¢Ö!æMwÂÆ”o.5:zG&5~zG 1"Ÿ/;>g}>l¬ü©>ÃñOã=YöžÜü7w?ŽêÏäOÄÂ¥‘‰K%–K'à$þ@ד4l…ž¥oç'_êå}RxXî;ÀñÇ߆ó†Ð¨êäî£R«ùÏõƒ‹¤ü)QI®ÊŠ-€~8#çÒ`¿Î1-;Ö8BÒ +#RzUDÀYcA¨wƒìÄĬ­1Ŋ ”Òwñ»Ä­R¯rUþE qËñP¶ÝKÄÞ U² T»fžÙL‰ôÇ#ÓgyNЁ.ºfoâñ?OÁ*xösތ<ö¢âx õEìrC U¨w»Ô!tó‰LY¡õj\ÿó-ÉI|HØ3Ñê¿,EÛòZ•üüÆ=൵#Qd¹"ȧ·+P…ݦª¤øÝƞ"ZKÓG©“lìL#;æ·±²©I¶gÁ㓎\œnÉÇä%ª5檚¯É®¡ëŒíaR©=K’—P1Åãñ²OYÈK +UàajÄç)àwèy_v 0ÿՐ𐐉g N{v‘åòÈM0dŋJ䨘Œ–=»ØL£O>Þ?ÆhWÛd&¥âeƬbÙ  ²ee2Ñú=|öϯd&ˆ‡Ú‡Ü !5/ÿ›!5¢¢Œ&‘œÊéÈ«^ëþb”SÃø’¶‘ŸMši7U7Â ß~·;®åáÇú\ÎW¦Vi¤_þì„ј]Ì]SÒ|&l,„Í”ÚÚPmCJŒ¦Î™ð}È“Sp,„ÓàҀ|ótÁ¤ÿ¤ÙO©•²SdÒ`:ëj|“š+þÒ,,„:ºŸ‚«ªOÙd&¶þßñöÑ"|4–ÖIJKi3Ò¶“ÅX_eš=×2›jRÚK‡-¤±ì‡þ,„Öޚßé²P4 d&ƒŸÑ›^ªÿd®“sƒïíeåÈ«ÀÒLþ“Æ*Ù ¹4– 4®’°òý²Qm?՚›WIOÀwüK!57LùÐùó¹¯I[ ÔK •é@²Jé)} G@²Hp,„Ô~&’’<§Êé9ßó-¤£¬ÚÚJÀ²SkY ®ŒÎ­k!56¾l¦€ßMš¤ùˆi8ÉÿBjšNBv,„ÔOÝd&ùÃI^RÊü#E[<ÞÞ<Žʀâíû{'Ø1÷CKÍíÕGÓ,ãõë'ÏYÃÆ£“î½¢¿dC…’šWî£í_¥«›†ÚÕmJÚÔT>¨¨æ +¹½g'\Ï·U“×´Ww[IÆÒ©ŠWî&oUΛ‰VÉ%]|Å-¤ãÁWÜ«ê^WG”¾'0/­ÙÂ,Õácð‹,ð‹+çÿ’¯^ù. +e!œG[I¯¬Ðàh[I]|%t¤"+ jñÕQTúGñåCî×È£dP<)!0¤ãÚÚM‘ÀÒFÎà +UÓUÖáÿìi*}}‹¤—ô $¼ i(IAï«I/ ëÀÒP)]$ã i'YØÒO*ûIVnƒ ñt•Rû@×ÒT)]$ò:úIÝ@ÒPÂ’—4’ö¤šºIæ@ÒTÒ’Z4“Jëé&x®’s$ã»â.ð4”¼ŠÄaýö.’f]$Ô/±t–bìYĀã¹[ùšßÝ{8€äy‚Ýûh’–ÿ½ûìøÌÀ0Ã%Q§k"XµÊ‰T–ª€$@vjË]§˜`¥ºjã Á˜Ík35-7*Väb — iD¸Í6Ü]½lQe e Ïý÷ï¾Ì®o<ïyÎwø{çïüqïõwð3¿…/½¥¶ÙXä{ûO§H*"¢foé“w¡E'é¹Sóù²AÞG›èC§:n ¥¦Ãô¿*)p¤—Qðøtd‰P°ƒ–{9þ®èL2Tf%˜ú^?¹M«Î£¯+Íú¢ŸÚ4Q8âì¿È¢x?L"ÃÏRPž—ð×pÒä4Q4 ŠQ—SDù±‘DW‚ŠÓ"TiJ–§±]¦Ô0lØc†÷¦ey(œ— +G B¢R$LR X~(•œÁD¬¦³| ˆ£r†C!~Œ@ER¬†ë4x=­×Ï®ŸákV&Š `EMޑêRš^…¦EÒ)GY¦R¹Ò© ?¿TÉ&LË.Œé¢…aé3di&n × ‰XÓEK&™$T£’dRô•*ŒEˆ–£"¥$R‰zš*PK­êH›Tš•E6Õyº3"¤>ú½EESÖ¦èò”AjSø¥-äI¢£é4Tz'Ú2;c/²ö½í̛ÑT´š(Ê íH¨Ù(.ué"ƒýfRÍ»bPh Š4Z¢ŠOjÿ")H«ú(0SDÿ«ȨœIî%ED¢H¥ÑE‰nAÏGbê‘ZÏ xžŽy÷¢Jy´‘P²#"±u-_M¦œ}Ã8Ÿ}*KÊ&4Ígèä¨ÑE+H’DýÑP8Hs‘q{ÉJˆ Ñ«)OŒ?4Sýßޜˆ‘aÎTIb$BMEû)9áC0K)i(„À–o*dSÝQ_¢›\¨§°.Ӝ‘éšH§£`’R„ñ¯{‚dSÊP·è§ŒNÎP!g‚ŠtüS¹ÑßæèÒîPdS°t÷5ƣ«®2)Òò‘X§-Ò>E7ÌûØ0ŒŠŸ,S•ÙߢœŒ¨žž7pµhÇdSŠhÒE8ˆ“ËUÀ ¸gÿDS~"æ ÕW+ѕåxJÅÏ»*ŸY}ݽýûZùåÏZÈfórúJ}÷  ½}ޛ;7ÍCb¾Í±bû»i¢ƒÕ‚ZJmQ'z]™ïòY™'ÍIÈD€2Љ'ۘ6;ZmÃÚ~ûKKÛKO‹äKpÑß½óSpÊMSE|öû»vvbM‰‹Ð]]Ê{„"‚à£ø‘'}:³sÚ(¨)1i¿0vÆujÜb)LâhÍÚ7½k¯zJnߥ»Á«î'M@ffa;øDñÏå^ÃxÀDw¦¿Š’A0üÓE} +*QE6ï…E!=ôîLŠm²µŸúvݢʼn¢¥‰$T¯á"¢Jýè™›ÿì†?]-ÿôW玆4Zà¢|ß ¸( qé¢}/F$P7¾DÿÎ +(zh AÁE‹äPôôÑC„• Ǩ¡çÁ+ºh¡«|Šþš(ðQAǂŠ\OÚࢀò(%ðQD ‚‰ú¼PôÑ@>ù½4P>¾E ŸM6ï‘D“ÓE äPôÑ@ǂŠ3È£ý qrœÜ Aàcò*|‚)ߪ$SsTŠò’ F5ìCåR|ȱ4wc=!!=bœà+¦"ރDPÙb¶"±Eq\“Š¡Þ5¦ü±áèdXMúQ¢øÜ^/ê+oBäáÿj96‰"Í;¡^•Å>hß%F $Ye;Á IâA~€:ÈÀ:—ãkÓ#.3 ñ¼@(í´Ï‚GD\Ï͆/ƒÂZ¿\@ åO°Æš+ô¬ höØõ£.?öSRÀ(Œ˜Ào„ `l!‚0Æ +ü† |0r.pLa‚ÁHÙ÷£ +>U.ë0c~0ÂC ¤0Ò# ”aÃXHWaì!‡ðÆ!H\÷¢á1Á™ò+W…þãߌXûg¾õèÆÅöïÃÓñÛcŒ!ްÆ<ÿ‘ž¢à™'Ná ‡†22##É&2AFIАLd¢Œ— ˜É˜c&¦2ziUªDeôWpàŒ©ú ­€2Çä2Óç¢à ºXoÆ`z‹|m0¯Æc¯zy‘or–žQ™ÞŒÐP_ ԘÍi7[Ñ>¹1›ÞéøC9`"Þ9ótº†3ÆÏXc>7©¿ø£?½X(®âz4#4"zcC&4:YòŒöôh¤›½ù£Q9èÑèîöX"T$4šOïþÌJ&¢B€$‹rD÷“f’-DŽ˜Ónލ8õÉ·ü~ôj¡üHj$sïw{Ô]‹jt¸¾Ï oà¢Û™®Þ\a«Þ`,W)$5œõŠNa!€5¶×R²lÀ_ò5Ú—awL•2¢zŠâ'£a½?Ô9€6;Ñ; ŠÝôóù[ô[C>E­.Ùéu}4[:°Úxcj¥§ÉEa°a¶^´’+zð‘l£G…ŸÁ‡¦7ѹ pï"7;ếÂè}ž݅µðÝÅý:I÷ý7`æ˜% êˆÞÂz‹SÑ` òˆß]1¾ÓE–ذߞQÀÿ¢*}ÏLpT»ß¿Án˜á(·Hp¼פ8rC:½qy†3Mº#<½Ï¤8ª.z‹ÖÀdÍß6^¯¾vÌIŽ>ûñr^ªC‘r=úc’=—‹Ón˜å/º_ÔôÇ-K§éŽ+„9‰µ÷£™¦æðÕèæÉnç‘nÈ,ÎÑñèç¸CŸ¾ï}ÿSÓ þ˜è©qûÔX¥‹t“nü!Ó:c§":}}ûã̋ï!~ˆ·™ž·ð§ß¬‹w£¬"‹‹Çía޹€‹iü×ðÇaÏûŽË‚;>+ªpÑ]G†Šû¼4WðÿÀî?Üw\W¸á¢¾_ôï w×ȱiýÃ ò,[pË¿¯ÈxœWýþCÆá†<ŽòxcÊà"À¿ 3øh¯GÃE~/ä<þ, ÿAèß"ÄçòŸ> õo‘_Ûú_Óíz{?û˜Ù 幼߸ïôôBgôÚZí¿!ð“ ì_æñ’½èù%èùHÁޘù†5!4 >zcèa¤˜úh¨˜ú»÷ 'ᰤȵA£L>,÷„‚Œ*·xb/$ä<ù0ÇæüÇçÀ«¦?fýߘýÿˆþOЇõDcîù-:=„VÿH÷ýÇüZÜèvçÆ7QÖ·C(Ýt›xLãxY¦ðþ#xÍ#xß9¾Cvß©ù[Ç\·vÝãm" .{VÎëmjÙ윶¼ë9Ím®´qç| GÖ6£Åð+8ç5 +܏}í'N5'| †þpj*µO´DÕ>ánm^àDÕù²qu+aRáˆzàÕu{ÂùÙûŒ}6VŒ)¨KL-“˜(¬–eaÄÌ­;d {ã>¥C¿ŠŠÍýÞúEâö¾˜Þ™o”…,F¥%Ô À¾…¢u»E³R6V'[”[S‘²á:öíu¶­mu–´áüÑâ­+çàPª²‹£¬[¾Y,9Ô¾ÕMKë@¯mës›ÓN¡«,ÒM) O©B–Qk•ªDeg#FJ՞€öÛ:´üIòxý=[ñ9»gV¥ë6c‹Öê0Y/šå@Õ Vqßïýh+AN:‹:^ÓÊBsœ@§±Çn?£Ï Jll¬9±²²Ð@­ûÀšPí=JëÛ-îµãHñï8ÏÂ;Ùî‹0¢µ&{~_[ž…ED?2¡þë/ʎ·•€·¨î9“MyMwîþ6—«4ˆj9'Å5D^G1Ý{^72œ6 yØÚŽ• H%ù¶¶õ¥»M÷aUôÕsj wۉ=ŦᣥÌñÁñ&O€’ñÔé`¤^ZÜÙÊbáW¼ööÕ.Z¯¥@'qX:þX{4þZÇK)Òž¼oÔ²‘æ_E—ˈ þ&_VãV¶ [,{Ÿªvªnª‚«Ìª¥ªö*¶U_VÞ«U¼ª`~–8Þʦ:sݹP۞Ö/Ë#ÑO§¦B8è=ÞSõDàa9 œ½ LèOg£ÅžRÈ7Óàåÿ<¢ZI6”rÀí/kP‚ò°Ô辶@2pµ +é&Û¨˜¬ApÔû9ð£»2qa3K‹š<4ëâéÉf/ ±Î ìEÚ²së™ÍÄÞâ_q¯Ü€ÁF–¾Î¹:í%¸ɳˆr_º…[HZŸ×ñå͕ûtGX¬¯p®ª:µYÞ×µ\¬ê¶‘ èî‡)P¦è;|mmŸÃ¦-·8pÏØój*έª FªÿQZmDœGÖÞ¿ŽüY€g½õÍÇ%®Y‰;jƒ¤”‰ú„÷_ËØñj”ò%»Ë»#¨|K»*vz».®‡¿-R°oÚ¯#Ÿ·hÕ+3nVå㨳R4h•ük +ËT­’B Cò9݌—ÅCqQ>¬­áê ˆþcq •Õ œŽõ·"pºõ*Ñ?xþ¼*AúrîË"Íï[¹¹A‚!ÎZýz®ÓB„ǸpZé +Žà•B\Í¶ï![L­–k¦‰mñÂɵ®²Pøý³-% i؋¹LYìЏk”™—·Sû÷åvG~T˲ +¦ /U×ËàùӕKv+Gäè§üŽ¡fJ҇E¹‰6û›¸jM¼u ӄßcíì³áÃîX*glÁ[>{æL÷œš'„èŸV9á3Æ@oYâ‘ö«Yª^™S¢ýªøé»È‚wWåÝ¥Wnò§Éïó Èǵƒ‘åܖDPA´¤G;ßf´™"¶ÕYs½ú6ðy+ZX†¨ZRáàk=;T#ÿbªQþ|Ínl{etŸƒÅNRB–ع§áê+‹òé¤ÀVûœq‹I¡+@óÈÑå¹Iö%G«2[ö¢â³~+IñŒ«UVmq*Üâÿh°Pí .Ô~#ÆÖá]U–Õ=l0ۈ½·—¾ø-]mWµòùÿÒ¥@gáçB³ÍHñXC3íX Ê‚'bÁý”ºN¾¤æ ´eIæ…Î2¤ãOÂ-HýІp-/_Ù©'aO‘âµs´ÝY(˜åJÔ(ÁêI¶âM]6sŸ +6Y»²\©^ЌÖWŒû»(¶›²©\?†Õ®ò9]}¹íHþ2mh p„0êût2‹ ,¶™:ý®Ð™B7£i#ËKÒÁœ²‹÷ËB>·R 1å `{xh•„h´¤œÜ}–qiRg"E6L²ÀË.ÕÚGå»t”`$Ä˖DO9®íVÑÄižÁÉPC³°ŒxóÜ'þ¨Ÿý™?õÿ±•–™­Ö8pÿsðuٓÀð0Êw² nQ®¦ÃIóròÅô CÐ$ðvSwj5LŽªÜbÙIÜ}æ“ø½à9ó/å3æ®eÐJäÊ6ç1_3A;Äx„Îæ3–(\qÜËíÏt¢_nqfÏ/yÑá¦KGköϟ’ÙM†›qõ>ÀcÇ1꫘¦<›»<·Qfm¥<}¸®ì+4D ŸvÊÑHöÒ0­Õ‹ŠÒs>Ú3H„W§Ihpø[ßzx÷ €:­e|x ´zµ+®Î GPóýªíJ ÕsöuÞâ }ªèqá˜|Q‡ÂØûJ‹MJÛú{«5k©™ILŸ n+{«E¾öªÈ$µûK¡ú˜I’RÛ¯‘D¥BçâáÛ\ÍÝÔØQlt»ðáô„Ír‚l +® ÿ4eÛàNŠ1;R?EÜÎݤz3ž\fÄ}ߤÇÝ ¨~ö5±3ÁcÆÙñ«Ø£¢–óõÕ¾Ñ1‰h—>¤ífâµÀS<3ÁÐ; +„gR®ˆòdg* Ðú Ë®6_pf +?p~… +E˜t°Ä¾Às‡Bøh_å½Ãe¸×Ֆµ¤Õ¸Æ¥ÝgÍZã$VÄâ Ëârú +‚»ið8s3ڑœû\‹ïƒŠõé¾îìmI¡¤û½o»»$ßwv67Øü}ôé_}1,Gò¶€(·+h^úÈñî÷tìÕÔGç´ã´¶»”HÞw_3DÒªœ†òô$r굤#±Ý^‘ïu"WÿÏkd¹/Üï/ZxW¾¿‚†Ö¡ûþ|­R‘õšòÀ?Sϕ“¼™!s$Ǭ'Ûð{¿áBʌ€Ù†È¸æMø|ï@%^³ÏQµl_œcõ ì +ñ… œWЇ\Wˆ?‡¬ñ±QĚ\&Ãçÿ>ûtÀý,F£Œª  óW¼×f¬:r˜¼k§ïÀ ¥#ú·,s`«fŽÀ{í[–ç5æÐåj"‡ÊÖ´ãÑ4½•ns>©°¾7Ï }!ý­¦N¼x¯=ÒàËÛùõqRµ4Ccè7(KîLONäZt”Pö#æÓ&N£(—Tú“¤{OB¡Fé@¦+>UÃÅkóäû„½"QU/ÞÓÛfs9Îó'!Gb'*ÜõŽdÜÔ9>˪²ÎÙNYh,¼+.Û9݅éC¡•*51dÀ­Ÿ“Ø„Æ/ßXÏXøv&¿×:e³h»©œÌÀ„®d*èY\¤+HD!{è]/¹ = +b‡ÒTz©õíbÃ/WÚØÃŸ^Ú%}4DŠöÙãÈÃ/c1Håzöʋ3+%%&SDflsåæþÿ‘ÊÙ?KÅcV~_¨í>Üe¡« Zx²_8|š^Ùë˜ÍVC +GŽi£qjªé 9d’ò’4›è/‰ekz‹…I¾P[•ùe2v:UKòÑy{"˜,»^œ±—Ï1™RÒáSN‰ÚNù§EùŸz?cÅb¾ó·AºçUuüNëèžY¾1 Q¸ÙmݎŒ¬ùŠ×N —ŠN`Z©·Iºûucë½)ÆPëiëSðý_ੌèJ€¡Ó"Öóz–i:‡]’5XškŠç›l|÷QiIœ²Û_=e¿‚[X:GÐg6þ©c"”vÞqbFûƒž´–WÌŏ©þÑÂLò6–Çޙ ;³óÀ®tYs¬6ÞÀM™³>_Ôżw"§jð +Ëç±Ô;®ö†$ÇÝ?یÝxB¼¸µItªçPEÖ±ufûóšYÈu~“vßw¼Ýã¬þû>–ó‘iœ´˜obIÿÄu潕ûòËgÿ:ã*öþá²Ñx1ˆßø·°ÃÈH‘ãó0Ð0ڈièlt3hoß ×ÃzÌá»hoZ³Ðñf.qÉy¬g}ÄƏ"!øêYuà???ܰs/ãþj‡í(¤ß.K¶Nk­ì‡RþÍErµª’Ë…€¿‡ÇyÛ¿R•6=ŒÀý5 áØÀ8ýGá€cŸe´*Í?ˆöc· ¶‚A@5E1fŸ‚ì{KI÷Á< $6ФSž• +cÚƒøZ7¸Ö+y¢=’â[}>e=׏ œŒ³ŠCÇ/7Ÿœ +É<9óJ§Qҍ'„zXX§7PWí/ò-Ùè]wLl ê†<µ³GÆÎ~rZf¶ûv,/ò€ž©ì»äA¯ì¿j–Oó³n±t–jî9a$=‚¶k#òÙ¥Ú^º?-ßÂéz¤¤ë‚•RÒ®1Çxÿ6ÉvZђÂÌ9–šTu )T6V`:gPì'¹CèzОã{j‰>±§PÅÔÎn?BÅqÎÇÂP?TøößÍ>mxàòÉÓ¬üÐõ +é9Kr1JÙÀ÷;8ø?'^!Ïê‡æ?…u5·. ¡i9˜¶('¥ÍBLGËgœ? + T›Åœý¦‚l +—ŽIåãÊú gL)±üÜúƒ¬TÎ kš|4Xãö?¹[Œ±ãºVMå*;»ãqÎ4ÜsŠ7­/·>:ñaÊQ4hÕVÜ: 8íy^µ%’ïU¯ )WPÅ'@ÊûÜ]± .•ОîÑ­¥AÜ+p”Þ6T!Q‹oÃö:‰½S¨P¡CwiÃñՏX©Òù*Ÿ9$³Á19ž«8A¢w +ÙfãÛA²ß +€ Sα5“WI¼€¸þÀ3Ù¹Ï/®,Égè-«N{¦æëÖyŒf†=`ùÂÁê| +PÞ¬þ°ý þ ëÏëÏJüÏA~goØ~XðÏÆtQñõйÄ1Ø£€Åš'4}K7úÏvÑÂÁ`¤s@×qhâCj¦³{hã ¼“,©w#Ç<%¥ÚÛ8üªe %Ád{[§ú†J™%5ђ#·I3,í,Æ`ˆ½TG¶AyNk„fo‘¤ÎI§#›ˆxêÁÒµ9áå/Gó?¬]'æxÐQª–Pãâ?3%ùš±VOSšRé”=ô +‹b”¹–3î÷)I7 "'MO&.eB|TÍAÒ[Áöh +‚ +±H®îk§wf%ç ÇBFŸ…‘ËËèu¬ºœžcÁ PóÂfîë<îëU¯ÿ͟Í}ËÏ|Ãèq9-s¿éüy3.#[Èޔú¾¤³ŒqQ{Q³U)qШ8 ̔ >LLµà¸ë‹¦(\Ÿ|”;<\£[–6¶ô +X–Ò‘€S£ž->[N˜¬ ™4Ëè<«P!}¥PÐäsÙHlæ6KN°úÕíhÀ±„ ‡ŒèüR€&Á¾(*JgÔc4ۀÖÃb8mŽÊBV0,UāX~ëÂ@3’¬"Jw¾¸å#Yˆæ›Ã?-Þßúanþ§@°›¼š7CoŠÔ؏Ûõ07Z3zÑw¶MÞ[x“u}¦ÝF)Bò|+Ç'NêR|JÜdŽH%nk t x OùÇCûüÉP6\U'zKó/ÚH ñhÍxÄ~ñ¨ýÅGÒ÷ýE㐫–ÀÕ$ÂÁðâ“3F…if‚a.I¢æ1ïùՈ”MF°ûIg$E?%øà—ýµ:}8慨Õó‘™úX?³ê‘š­s¬!™Ë0È3ÿ½]Mã“σÔ塀<,cëļrÁ€X‘[QrÁ€TA㕋\h}ã•ˁ‰è^9 ÷&¬¥pá:ì¤a5íê.T('Α»ìòhüóŽ¤Þº‚¼s'&ÎwQs''I½Èà·ÃžãÝ`ø×¦éô`„ß²±š–É—–! V³Æ·ÉáGD'\Ûöÿ$šžÏÞu\}7~ZúÙ1g4[J®¡¡IáœÚÿcŸ +éôüøXõy¨9œðè¯WÝ©Q ­Ÿyù½Ñ3N÷eÅqcïofsԖyP€9Ä(ª ÐÈ+wI·fVî$Ä–i?µài#ÔèÛp4J0k黸Vßs%šPZPò]1X¸¶+€Œ-ŠàŠTñÊÝÇù]ú½ ž'eӋ۹ó´£\púMëÖݖp“-Lµ%[,½´ÀԜŶû>ÉlªöݹûY  ›Ë;Y°<š>¦)wÀO8õE™¤KÍÌ;5C×¼f~Üð&ÈZ›ž/Üéɰ±TÄ´¨é…ï`Õ)"5Ú}agï-º—9ø=n‡ým³/1R¨qý,û-1!û©PóX´¬Ë³XV,ߕh&cƒãß©‚qÑeÆV¦}·D¤±ºÆjNÎPC8ò|B°uÝðƒý¯F:‡É׏ávÍHýwlΓn¸r@FÁã§ãrYik{ˆ!þ÷lòÎ:³Çï< +Ô,GàÖÜ~Gá%nÎx­#%£ëûÂÕ㏏q&Ìáœx'މá5.Òâ ݈M=½I¦=šÀ¬ëÎ{kAúŒÊZ!¡;Ú͕N”Ƕ‚~p²ÅƒŒYÃÊfÙÝ\:áæõ–ýþÏumI^‚ÿg¼¶«“è(:Jõký™[jìõ°æèé9Gޚ}aåÉ(Ì¡’±@ã©èµM^øQ;Cî|>‰ .¹Õ# „‚ß"»?l8 +1öǸPYÉÝCnE%‘øõ^Ë|ñ—k»È„¹´măøyðu<ø+>ƶ-böËc`­y GÍ)””¸¼ ®“º:G–ûAú®Hy"uû;b@&›Ê“‡ÕL2免£É¢Ä,Vϼ­ÉÀã¢­ù G¼¢^Ó´ë`]Э­ò ÅäDâ£*ë]'FÎ9{U± )8Ú;JcQyÆ$¿5ùó¿¨Ò÷b´~ÇpGvÖè-‡GDůŸ¶b¿õ)Ï[v°g [äÛ7øŽzŠ·È¶å¥5´¶Ã—¢ +[^$jPK +Mÿí PŠMìük‡ä„RÙå+U_7³ÀüNÜ=·A·´ùïÒo"i>¾júnÒRÚõV€À¥V頇¦þU·kGEü«E6_È)Äj“4b&L¯MÇîpÝ4'C@Áþ@§/x/ +LÑ9ŒõD¸ÿ†›#Í]€ÐmiÛ-ÇÖú؜…)lÚÂÒÿî¼9™Ý³kíb×,»çÀqÙ¡’úOß/¥ZxZ·G‹“»^Z[Ûĸé]ñWÒÅċçuT¢®;ÌËEËi{¡ÇU©X3‹áª;);8Nì‘Å4Y²“¼Fñ’kÍ +WÃæ$-^úºL;‚qm¶¤[mC…Å„ xÚÆóbfKi¸$› ¨Ü·/ïsmº&Böh.«ÀŽj}'àqmë÷K˜"ƒ3îäD¢€‘ +P\¡lôQ(©<¶—1Œáh—òÞkZ—1ŽùȔn¥éK˜‹ý”H2ǺɯÂÙ8ü-’ ¬ÛŽƒW˜ÆµSK˜k(s®Ì™bè# « ßëw1ÛڍnÚ »Áª¢n¢k!¯“bd9<4¹wÊ5ï}z‚rþn˜ø=Ïs‹g+›°ã+ £Ó@3ŒÍ…¦h`l Ç7–nb,È‘µÍÓD“IǓIêóp6%Wô's‡j&W ëC³æ ³î'©ãi-àÉ«E:Þ`qÅÿßOņ˜žãÈ#¸ãMXÁH«÷ /ïoûÎUò• J¸¾¿m“Ξ~rÜ· ?ñ Ïc7?3%Þ¨¡‚³ÌDÓÙæ"ŠªñÙ4®`×½8š[÷΃žØ5]ÂûŸ}¿·io5¯Ûª9š’kùJ‰óiÛ7E ÜÅ@Þ®Íðpü‚nƝÎ4›k¹ë%!;îìÚO¿ÖI<¤¥´òI$¥´/`J#Y²ªêZHHÝe]ØÙs˜nˆ.3u$h—R½$ñ»c8íÛg·gw96ݺ¹Ùµ3²‘3AA*vª†<½2` VÚ_¿ÿ>ýžKe*/ûòîÜöÛÐoA½·±†ö&þ¡þþíÛKo}ø{7=%â#þq¯®ñº˜™»›¦>fÖ®¶*—åè¥Õ³÷š(§Û—«ž«¥ÿSE)úLjÐõïeÒõ±2À1ýζþ%žßó,0jçöú,º—„Q40TG‡'Ÿ CóÕåïÂyë!”± ø<ìKô¢@ +/Zÿ¢•©PùH™ÊiP£çVÙ\Ï+ó}œnš-yÅ«ËÁôø{;“{(˹õSu±9Œò?+ƼŒ‹ Ëî9Ú2†M9¾2»y>†yç·§¸¾ÓO¢.Ÿ¶‰÷žáÁŸSC>‰bM1ôT^EÚÆyov›;Ï>ÆùV†à›R:{ žZ|—‡ukµ¢Mÿ¢"Õ+EL*fì^c³kÊ~?)Æ ý=¿èZÕöWq4,ØÚø•ºhªðµ/ޔHMj"%O-*{Û+çéê#íû•î>û';Øûž:òŸg¹½±ó+ÎZ<ö¬úï/åË͔„×êt2³VdU[’ïèm=…Üñ¨DøTWîSÉç¿éiu÷ò¹(ޒˆÆ×ô4÷^º#qÚ"rföžÛsñe(Ø©±Ê¬U$£Ý:Âyꊊ0ØOyhÎÞ\R­/êû{9[”7¡»ñbíÖÖ^$©ü)k•8µâúù}WK…³ÞXæa(‰|ø^|#WƒFŸVˆ~u–”äÎÊ")èš ]„»6²ËêÑxË »Ëõ~ ãwÁ¢<$g˜Ž†žÛëMõÝ,«]s+¸ÙwrŽE|½Õ=·s(ùٔNÖð|컏/~ ö_ˆ“uÜMÅ.®,ßÈðìêø1ÀúŽDõŸõú Yò©èÚ_œÐQ?ÍSmÿ ¢z êÒét]è®4[UM¯<Ü¢7ÖË}yc‡>Ö¶q´ÅMŽŸ5‡a­þ“ÌÕ7ÖºžäŽ´y† GRÍZ]ÍÔ¼ÂSïu_Ì7·\_0þ¯Cq¸“¶\y}{MõíŽ5>Ï¶Å¾ÓæP|ïFuüJ’¼»¤o«ð.¸š#àWÑjÚÉñœ¨ÙO¾©×DGŒEãíúJ{ˆ·¼´UÈOŽc³Y]DAÍëâ{Ou㘼±ŒsZ燢­ÝÍ}F.ÀÓï7VÕxmÖb>?ªæ~µæ/êEíß?–æW!RÊóƒs/1Ž •Í1ÜÜñ|Ǫ¹ËâŸéåÔ¶ßtÔæjró«ÓÊ º9KéßW§§´éiUáߺ­ÍÊe*´‘PòΑÃ;›ÉaîJç+ÙFÏWëg%[MûŒÌ[ãÜQZzJ´¼Hª…M稟Èi}+‰dh“ÓOŸq_Š_ +㋑¶×ò6«s×r1ŽâЄ÷õἊ0ŠãßXéiâ[Þj:œô_«?©Ïâfã/äûßç±øÚNF'ªÔty貌¯SŸÃÒMÖüiuªlsö|„ZNÚ:ÙÝF¶në- ßó¹¼Kj›÷¨ÄÎËÂéMª,ŸW7h·›êYâg£¼Kµ&NŠŽÕ¦ÊíU¿ZnS}®SҗÁ>&ó|•ÇßÞo½ó&æÏØYXâO·GŒÇñ[åÕo^[DPBöVôoy>šÿVÞ¾Ã=]½}ÑbªsüMÑ}¥¿t^³÷âB¡íÿãsü¹©w¥°—oŽæÛýü…ÈQ¢O¹í§Ø‚l›{cð¢ŽLÖ?å,kV—Ѷ¯•gÈ_.Ú½Õ2ÿ¦Û‡ø|Kjûüjû÷¶Ü\µ²¶û¼Ï/êßz¹~?ß[R­ ¤övٛÀefþÔ°fjž*¦OèæM7—6dØò1êy¸ˆåŸs^žß[¡ÙJòõ1mujQÓ´¢r" Šõ‘‚%3(4£ù´d²ô~òö7zóÖR•Ui¾L¾Í݉ßóZðô üö{:ÿƒWëÚ××?ck÷xäí­xº!öÖ¼MÇ+ ˧Oív_*Âzš }šš˜t¢cë3ò‰®˜§\nþÏa¼ŽJ”¥=Å´ö8Îç.m18ùU\³g¿Ðì<ˆøáý{ÙC|TG…ÑÖUȏ äêD}ŽñÒµ˜]þDò9ïkN=ØxrŠQX´p¿i)s¾²í¸³¾·ÄˆR½=Üò ]cƒµ•¢-"&•±ºËIE7ýýŸÿ¿Åë;Jß;{=šñ'–Saaµ÷–:ê¾^×ÙY`òßnŠ®˜ÑeùŒYG D¥ÃÓ.u5zJ"ŒŽz.ÕVØïbÓ4ºî^÷äf­(£Z¿y<ˆátþeþÉ+“ê:ù¸¦r2§Pß±åê÷R£R-ÜSÜO\ñ*4š®>ƒu¬Èû9Ì+¾Aˆ²-ÿ‰àêå Xµ¼L䤡&Ê1޳gö<í]–LØË&Ó +­ªóiûîŠÂ¾4¯Œ"\lr±¤òý»ÜD|EG¯°VHæ¶ãÉáp¥&)‘y ÉH>ï-»§¸ïð¢^î*Òì%4•olø]ÎÓ¢»ž€ÿò½ì4Q«ëË̈Þ'‹‰üȵ}—Љt,ÕÞìü/;+Îob€½ä¿Bû܍üG¬Oc^¬ÉòÀ\ÔØ kÑõ²À½Äñ´½/PHfÀ÷NVÎýï5’³“Üú\ÏJ±M}¼¢ zmïëvñå<œ¤Þoèyý¯Âò£µïâÊn½œò[>£§·z—q…³ñ¬¦ÅwtZ9ŠË›KxWº®º¯rUõõã>¿²´{;+ÏV×ù`¯kåK`®·Go‰sadxÙÍ\\¯¯qÜV”«úWžœôf .8þy9ïGð¡ò*uór$¼ù<Ü£ç{[^­×QPC}EíìøèöâË}ctùª{O‡—z$¾ÞW!Gže+E[=åá½l§ˆR‹«Œý*Ñ`qœ| þ?¶äfÏܶ>“WµöSt¹||JnÁ7GÓãàhâI>½4Ý=6>Šo—©ÇÀޝããàr³|¿"µlÞTù¼Mß"з‘Seú‘Ô9ú-9™ÈyÜ.YHÆ]N‡Ê˺ &Á½Qþ õ\KHŸ²Ýo+}i7~ûKOï +ú­ý¤QafU ñ¥ò"|u0±¯¹x˜= LÝþ/Gg7W˜•¡¥œí=¤òkÞÄë®ö³ëkçÏqc¿s(–›Š®¿Ó÷ñ$_"QÕÝÎ{ïõ”µ_ötOõOõðh³úô\ÞæU +gåqµºiq +Ôjéaæéíõt¬·XºÛŒ{Ìޖ/ÖQʼnÇaG¶ÙÞç +Ëu…­¶½Ç¾›ŸµŽ—ŸÅ¾¹Éæåۛ눽/´\VÒÃgáÓ»ÝaÜÍÿü~«u‰k¹¾¹Òäñó|mãós¹§y‹±³Èéy[Íô]÷ƒîM…ÿáˆÁxåÝŹÏúcåìåäåòôŽò§}>”¥®ƕ:æ>l¤×®ÆŠ³Aþw[Q6Ê7ž»ít>»ìO ½g¼½ùRÑ¥ÿ9ý£Xµ_u*ÕãÄFts7˜ý6nÿóé^Tñyûڞt{ýéeÐØøµ*Òo¯ã4Pǖ™µÛMßY¥¯áÚ:š¬œK¬}n±ùØ|„P¶žß"§…O¢ð¯7ß7ŸÃÍÍñí±,¦Â[œ [M%̐j#Ó®luOoÝÞbû»›ü_qqOmÜÕÀ´û~L¤ÚçU‘O# Ûyoçlií%WpO‰åFåÚy{‘u+ý,ÚK@tYÚs¼”FPF)ær§ßKæÑvªì©þ9Š7~êû\Ô{RÙ +‰fÀêÊU}ÖÞ /Ù§¼Ê½vmoípåsÿQw‰±¢¦âU9Ý.¬M»UÝì<‰uñ=¬ÙzÓYµ½å2n±óÚ´¢©ÀýŒ;ZœÊ%î*Ûý»³6Å8vu; ;W±¦åœž­°‹‡+R­ÌpkÙ%Ó.…drºÞ²x—3òhž}£(Ò¥÷/â! mž8˧¢ã,ŒÝz½Hgþ=,ÉÝy›qn·ÜJ'£e!8“ÇèÄÜ3¥óÄztv+ÿÿÆår{8`ãO\ nšy ~‹%òÏà6˜5c +àÓÁð0u[½e<ÞóƒDqKÏBãžk.…Ç12§£r(¸ëg¨IööyÞ,µ—ߢIgüzYtžÞñ§y2xõL¥½ž}œ7sϳ‡ÁËð^·¯”aOO½¯=ôå8T»ùâo?ö©Qp'œˆŽD¨üÑf•ç}ÚþLYý[.ÝÏEBIâ„óxt÷cǯBçx•üïSFɞâD>£ƒ(·ãP§*§ÃsÍ3þƒWæs=õn£*µ×¼J4­÷ýBêýOá¡u~“ÿ(]_þv_÷BêüÊ3í³(\Ïüy”.g«<æ {Lª3ü Ê3õÓйŸÚÏÙ8ïJ…Ìüÿâ¡s>Ÿ‡Bæyå½_ïP¹žŸŸBæ~¯ý¨\Ïíþí ™þ?ýP¹žR¢G‘)ÍǔS[O1çÑpy¯ÿTÔ?E»WÊŸnùì]ú<~jë¤Îf®¦úw_—m=;où«hŸf>,H#ñ(]g÷¥uŸ‰÷øÓ8ïÄûy^?Ƽ}|£sß5sÒ[O>ð}õ¯¡àÿ†7ãó#~ÿ‡U¤üË_ñ¥rÒ¡zŸûÁLA_:xßî…ø_·Ó|>Ãâfº.Çwé¾/iaÁýÞ4mãõ;‹ßÛê纋éþ¿îs}ÿååP·ÿ‡è–J…Áç♐~5ÔMÿ¯eAÚ¾$]­ÿϨàÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿCHROMEOS¸ xH@x €KÓ:¶aw´•Úhü“ùS˜¥˜ŒuåÁĂÕú;ñ ÏÐý½ò³g(‹¦Z‹L’òòTLÙ&š¦]YG÷ÿL'gL Õ_Ï:Nެ„¹02¥`ي‰;óż٪aÄÔ“j™bUÊç|ÇÙ¨™"È+餳FÌçÖÕïåÊù7N»¤‡¬ˆË¤lQIê¡ù\Æô¸¾®R7unÙ_LU–†æa;7õûX4gŒ ȵÙ€ ÕAÅ¿6¥aÒÈ ×Ùà­[·@" krM­ L¸ +KYg°·¬ÛÕë{ÝØç’ɵH©^è99C#Ò =¯'Û쀛{æ¨ñòn/ƒë!ÂaÅ«ÛÎ싍a6KˉFšÎâ|üÛ«Á‚w.eä•V=³¼“ ¥ †{!»´ˆ@~Ìöއˆ¶õIw"µj6vZóò@ŽpÆx¤m°`–$Á˜ŽÜ/g0Tª + >ÿºþH Ææ©ž®X™ (}pSòPüÇú»¡rK¤®¶°4Ù4cj°YÚb.x›Æ¿v%6 8ô­Î‡¿hO¾È`áº\ÅÎ8!å!B¦?Q¬#èà\e.âoI;-| ?À­§’o ßyŸ…Ä¢±èü+nŸ°sCŒ¥ýÕIt»ºÖ`틨pµà•Ô<åDKBûÉeÙ[Gýȧ½v2™A;^ú …­cxD2›5n¶ÓÍWͼLÖȽëŽBJ +|("V­õcO0!ó7aÁ/ù?×D° "-1ØI2»Ñ«¿iW^õêò‰žâ·3ÞŽ©áÛhúWe`ð#g=XÃå.Ãb9bAzLWs16BòÒëeÊáÆ$ªѾHúR ¬?~‚ø›OîMDeÁ á  n>ƒ÷_ ‹ ör‘ˆQvJåݕΰQ8ÕKŒ£’´{õ+TÙÍ6„÷P«ìuÎû +[Ê^õ7—NÒSþÆ¥-6¾±ëб°üï‘Æãš>t‘k8”L m\üzÜ€”L¶Æç×sÖ|,ãÑ/|¿ý_Å֌àf}‘æše.çÍ¥O +w‹(¨­Ò1õ'>º!}Ñ^ôA³ã>Ïðõ&ú—fó“›fr¹óF³Ìî(R:¹^ë~[g¸”ÆçkÉ3NI—.É#¥}óµ9c 'iHO’róÄ0dÖº©É5BPbQ·{Ï[S +DBíyükäe-¿ã²Æ¦œ@s”0æô|²û–çxK²ÖÕ%]¾†Ï?šj²\}Ài0"¨÷ö™<·ãž¹a8ˆ¨šù ¶7Ö>)¯ÌÔúó@̟Bí$.¦çx/¦á^Žv½5ºâUÿ➠ðªó1^Ëx"Ð÷y³`è’÷RÁ¨ ËðñAmxùô1¹é¾Ã·Á‚ÛS +aÛìJH˂ö!¸’þ•ØY ºB=&ÿJ¹°÷¹Pµ ®”§²z9ʉ/Ð!'°E¥wQç›tÀÀ÷þšøO”-ꇦ/Öt™19%Vj_jÌUö•B‡œP>К‹Öâ³t·‹Mn¬Hه »¹ê#zXOftyúã“Á‰ I؊^È5Ò4¯Å-² :Ž8.%gÏGàùø, +ÊÖgV®1]n:¡FñX/·s“¥´Þ!ÕX–Aœ\ðy?š—9ï ß-‡ëôdk·Z)-Þ «SÑ@7xì:/‚%œ1w5ZDã/½' iÊü+›¸q,ó€ŽJ’±úF°VîÞz«ÈÝv•Ïñ\´›üw§ÖÀ¾¦‹TƒÄ lå¾mà8«ÈìÅÀ}ÝBP2,äHún´ß˜u…PÍèC´Øu“ ¦Ï‡ Žÿ2i(YID_5pýrÙëoDÍÅWF!b±'ÜœE›˜@9òM;ýÊëšÍ˜g^~ 1hF7PDA9E¥=¬yªè,RÙÇr ™žšlD}¹jŸÐÙWŒœá$R¼¨Çò3)'+ågMü“Èø#ˆð„\^Æ~³2“¨ƒ/¢Ñç »©T©Š8Ø1JL5Wå$Çq7A»oGp:19Œ‘Aeâ®n3p˜k?¢6,åO¬Ã±GðÖÈHCÀÛӋ²¾9•vEÃ#¯aÂrö²:Äfܜ»:ò™û $ùê±@y¦£M8—³¥ Ê5ùlEQrc %» ñ°wDKRÄÉpÈÌm S]rJ‰PkW w*M… ¹Ëh\0o*安¨mÞBulìMÎᨯ >»FP¾ÅaË!™.¿@méùV %q f#ŸMaÑv®¹ö’œJ"¢[$µí«Ë¿(çÛ±›á¨ÞBLf oß•¿ᅚ4QúïRÓ •k y$Bšêç¦÷îå|ۉ³ãۚÑ;”ý6ÌÔd—)+Xèԛ†’·T7È£Îæfö@+óyØ­¸Ìʸf(ãbà”¢“}$içþìD9KqtOêYàê7ªhD«øwÜ˲¸÷Á[›ÏhÞ9#@ OÓáã2î=R|8è†o¸Ä9‹?ƎQèÈÑÎôV€Ôéôš¥v­¹¾‡œ£¸Ì¤j™vázZÀöH çi©ú5!é½kî‚yŸ™°¢ýÔ¾¢{zá;u6u•÷ЖHàbç8 `F´²®n‡>]‹0Z2ojUÂ"vˆMr?޽Zy×R,X`‹Kµ–YÓÚ©×6yjט¿å^0'ÜÄ#0œ¦•hÕž¶@ÀX‚æ–©©½öÊàXrQGý(õ„±³™ ®ëE!\Lïîf ¸D—FÙU<ÔpSŽoå9¨²ùëérãÿmό¼¤)Ö¯*’Í/Ói†©Ã© +Æþ4Q>…Ã]`ÚóösØ.äYêŠîHu½N'‚l¯ ê±5)C/X»™±§A˜Ç'ã¶@õÚX+ØP¢vûLÒUþ²£F’e=ÉÇ{Ÿú[ìï!ùtY˜DØH“=ËB]&B’qr ëkyƒUQä¯ùmoÁvK~‡C dÅ&¾*ú–®S,µ"Z1ØU€ÁXì\«C×~Ì1W¦}]ÜÔc·Ô}h$)r"ûÔœ+ž«5¾òkÒÙ¿õþ@®UÐd» +V}{ ñ×¶¢®$=i™²“)‰÷(ÈnÖ—ö¯Çm`ù·Å˜¼+á*݀ú56ë9¶GòôØñÉ£ {b«„äÌÅzF€R +)N2NqªV—¿ÛŒ´ ñŽÓ{Æ7ÖT¼ï£÷Ã~[ÄÂMë³µ¥U\ß + ̰ǘîyW`;´¬„ç}¡Ÿ;{öxóÉ&n+5ªÂ@*¶ˆ¯„@æù½¾[+J º]1‡ï‘Ë ?s¨_.åu…(dkz½È–NC…äaʕ­\ Gnöy¾c5¡n3Ý/J>F^ȶÒ!fžˆõït ¸ìªï6†r]ÓCïN4.4¶LN¨¥Q6,.Èڐº…Ó…’ØqvÌ¡³vm[êh8h¬»¾ rÞ¶ oëF:¸r@\Œä ¾éÌõíô­Ä†íOÌrè­DöˆÏyøn=üY`:¸‚ êSq¢¤ëm;à ÉB–  ¸=¯’ð? ¯\¥búê‹( s ø¼½ŠÊȅNú*Óxh§q!?©î)¼{[Ý 4*Júý vM€"]' Ї÷#›õ"´/—‹í蒢»»½ÛŒÙ ßcö/‡O#4¡ÿrïqÀªÍ®M¬áçl•áw} A¯›!l™>ôÈÚ åÆT¶Üû•/p€>8·ƒïá†]¡ sx˜00|_Á“hX³°&ç¿ÑüøÚvƒÿ2àG“øú^²Ÿ½ïïI𠚏ʒPšûç~„2^bŸù†õµ÷õYå È`ü£kïùáôùLÆk&’Z¶Ìèk_UŸ ü…sUÉ&Êý§þüác äzc¸ñ¿xa÷Œ}Á˜Qô% |j/@ú??ä$>ðÕUµs*Lw)ž¼ËÝM^÷¹¯Ú5ƒÅï†â¤’GÅÝ¢÷¯§"pÇÞÈñéN ?túr~åßÓw0Z¡|6ØFboîEr:š:ÐiþèmԊ7&>Í<¨† 篌×UVº©ýã¡ìMôŒÙãm™öÕ{ $Œsñ¸8Ôê‡1삽Cß< öLû8r1Žë:Gnۣħ®ùûFž.N”n^xyš-,àùùLù¿3³æ!ˍ >s£ç›gΌ|òÌù˜<æûóFæÞD€ÇüoΒPì'Óm$;VhŽ»ò4/Íñ¿BIPÀ­ÕTš£‹þáÁ:{ôœîΞúó.g!¨¦^nÏß݈OLÅ Áœ£ó_„{¼öފIVTá…9PkƒH8Jî65O¦sÍë+ +‹©ô‡ê!Ž Š\@èmàöƾzD4‹ßN4}Ч¼åýÖK÷÷ÌHhm;[_£ +tqñśõ¡Z²#E¿#Þ|?ÌTQÇg©ù²$V$î]º%þè{]|AÉ#|VˆÁõX(ExS£íuˆùõe~ÕêBŠ_„Šºe6q§R£'›©"¨ÃSQ¸ìJñNÍâþ7Ž_Ñqxû\ëÎuãËfñ ›Ç¼"uÍãªç^5ºæñ’fðí›Æ/× Æo³EÖ ÌÑrý‚¢ºÛ +$M¬C÷OV[C¾÷‚žÞX¨3Ed4_–¤¨¾`¨¿pÑuaxC EÂ0ãñÁ§?\ý¢-ê¿a¢öû yë"zÕU«Z.N×íyhµæ«nÊ +ô@Mëã_;P òâ•EÔ|ôË÷Oœ÷yvèåÓ=²‡ÙÖ»­ÓV¨ýڐS…O0h¸£â>,ÑìhަÉʐk³±Œ{ö%‰væƒ]œ˜§Þý¹-mö꾉½ãd‡~H poËKÀ­6eïÆ«—k0¡hLg$vӜºÕw”sY¹£ Sù +Šrh8¸T÷SUËI£1Ó¤4ZéØ˜³É-1=.’®ÎØÀÁ܈\æ?ð<9tð;”×I5úĄ2ù‡Î̺¯ž„ÂÑ矋ɞ2gã˜öʺ5[LXh£_›2Bà€jÏKcÍÌÉFzÁg™“gåÔU‰×Ÿ՚.N˜=³ys1^.ˆiCKlãÍ´ý0ƒ'lÊcÑS»ƒ.“Àôý@âÓB“o»I(ÿ”³Cs +ByëÓú×p¥Ìyú„äV§"¹EïÃê~Ú\˨íÉðò拮v£}¹æƒ[Oî-ƒ“Ì)¬ö"ü¯Ÿxcâ¨ÄüâŒMÀõˆÂ'@¶§Ý€Ùðú¢Q¦êËÉGÏÌÅ‘S#Ô'SÙÄTú4QÑ£1ó‡Å_R†íÂgvÅ #¦Þ‚tŲo´{È¡þŒHšÔwB—PRåÞ)ç^£1䒗sۘ¤^Œª-8¯@Æw‘d7wÖìŸ'`cÝYU+J¢¼õ £q8ʨ.Ƌ  +µD¥¦®7•”ÔMÐI(ڏw~>zNßLšù¶H¼LHÌ}Ð…/»Ó1‹œL4u5萚óüS>ʧöἇ#· iµø 䜾 ªÓùæÑú#EêR°ŸU´rYg*Aëž-RkSOc'T?¡]½1ïŽ=)$«c1‚µóÄÝ÷êöFžÏ½[¢Ñgü131Œ~øhMjÎ ~–?¼‰¹$XOø—æ"ìŒèßžtẳ¢Âh츣óî@5Zñ@<ÕÈž®;lÆ0+fûo£ÌšxÎÕº˜á•ë–ùzúÚÿMµ|–‚÷µ‚ߪ=O¸E]}+µ“X¥ßæsYÓ/Hð‹Z4ؗ)÷L +4û"hÜ2YßÚ­‚I(ãA¯Ðv„rwB{¨¾fíB³pBŽÁÇ>dX8C?\ ú—Ò_7áôŒ~ÊE_rïìE|‚cM1¶rÑyî[²gôÁ¡;£ w´ùÊtmXz CÝ72þ ó.±‘¶¿jeèa#&+zÒä±Î@9æj +¾ýðøÂ'ÒE„ƒÂÖ6¥ìsGGQ—&l¦·ۘ»#n֋™s<Ö‘J´@æI¥Â]VšGà \Ð…b8ÀR1œšEy¢ó%Ýx|QGÛ+ ‡Hέ<ÿ6F‰ÃPÓ»ÇҒ§Ò}ZðIü9 b®ãKǖ!ä CUHW»RÆqL™Å5w𗌫DüÍýÄzzRÑÀ'ޚxZ%IҍºõvÒejüÁL®a”ÊׅÀÒ, •Oç£ÞµÉÇñ³ ô€[V[}±oÀ­ìwvŒ +ÐÖ ¼ë‚µÈõŒ‘ºø¾h¯«NûPHîAûôÏðÃîòYò`ìGÖx[a,7é4Ý hü61nlE[3ˆuYbt?#¶÷ÄÉÖú@CÎ\ñLðËÔ=#UHÕw†uï¤É àò£­•w`¥ b¸úõèÆ. ÏÂ÷@`é Aw‰,ññR&  +vÆÖIT˜Ä]8&ª˜5»K§V|fu'U[ò:l>ì6}âg͆ÓçÙÚzôl­€È‰‡H.·Úôòã«Æ‡V;ò†ÚAñ™zÉd¥Û£CöÇ֋/C¶åå UmƯ&p8‘¯Ä²É¼ð +÷¤tžùݙó*{\Å?Î>r•ÆcÛаô»ÄcÇ:‘eS¾U¹›Ú²¡NVÜ×ûNAÃôÛj„€#{!š¸ÐØ£»FýBÜâ{ÚÊ2Ñ^Z2" .Ü[¬»\8úVB*Û£Må]Q¯ÅoO÷.|ýeGes̹ ËPü ážg0$Ð\:¶s½š5> ޏps¯YV½É÷¨ê|P§oÉ3™ƒš{›û$Ü´›¿º7¬øÞ—ÍÜ]³OPÜnßS*À…2²è}Ô¨?u;•\(y˜òê71 Ù+™MŒ€jxüô7 I²¬ +YÀ¥~· óó³Ðçá =·¼0‚¦um¸x˜ÅzØS¡ x3ºy€ùyœpc¥nší‰ì{½ÃÖ} +Øó?Bi¦ƒ¸[“óWՉUTÙ-ÖÛAáÔåá{#=±VPŞ3­WìgXmuy?§@/ó‹þÌv?¸‡‡Ž†:)M|¡ã{NKªä¾qîÜQ1l¡þÔ©Øq~7ª/ }J¯@P<Ôc¨ë¼±„OÞ¾LüØ¿+@û.¾5·ù5¦?’X觪q—\µ—¨ÖŠ·`×ø.ìÉ!xÚ`¤‰‡úq=RR›Ö³4½ÕOš'eY!С¿`h¨z­@|Ë+ßËerEó›Ú¯JŸ·4[VËd§²5±¦ödëg“~ÐX‰àJ­r®“ªŒ¶MJ­3:1á½NÿZœ×UYÕ¸ï'²‘ýƒOd'Uõ£ÝCÑjô[´1æMiÕV\‘$/W€ÛHŽ1‘ƒofTO4`{2µŸÆ/i0Uã zÄâó_-JcéˆCkrh¨·tÐwŠáÔ<ߙäJfÒm@VGà„Ù—°=2_è‹®ç٘öF?¹"Žu–œ]i/M†A,ÒØò~ZÜuڍ8-Tüwôс M3XUKë"Xßp©¶^~-ݽF,ˆ‡ß§;Õqó,¬0ùl¬á|¾›Ú½ SõIÅæ6[¼‹–Á¥¹ îu’È÷d†8¿zJÝyÇsÛ¦W£˜cM*Åö' ^‚{ :¶äO«éN½æzÉÊãÈåéaŸ‘B{SûÀsQyrî¼UÇ!€ÚëÅÍ´³¯u¸™6¬´ú†Ĝ¡ÕKá;)ï@¶‰ÕOD6º·Þ˜Èi§upƘ+ßê-QNÈê¦9tCü㡐¢ð‹ô`yže¨žga‡òDó>Ànqx†¶+|¦kgd։õ\KW*pŽVˆJ¶–D^d³ª¦®«êªlJ¸î…ó­HY÷zÑË(5´œ2T¾¥<( +¡ƒà¤®6;{X‡èhgB{ϵE=¼—S]iDTƒŽImèœDé0Œ…«8ŠõmҎ0  (õ]EæK«4™ð४g‘À–;"¡‹Ìn«ˆ‡è£ËÄ><£»WíP†z#§ s¬}Øûw-<kB±d2êöÃfLÇļLúôÛí …û#.èÌPu@zö̕Â'† @O]P³†”ƒéƒåCÆÃˆ‡=Nñ׋§-Ľ3Û +3ºÃA³ xαc†9ÚšEsYGõÖ¸6ÌÃðî5œu5­ÕO²­Îšåڏ=2 ëLrIDÉ%Y7@ÓU=@ k;yG ˜&yE¹=x'tZÀ?®X‡ºŒxo%˜'ÜIú„†xÄÒc(…Q +'ÔìMd† N€O]Q>ª‚ûi‰ïˆÍòï#yÂE2•Ê£ÓêTÏÜÎ&~ü›„-Yä¡äHùó~@Չme³·öb‰ŠÓ_ŒsW´0+T>Èûˆlé8‚–¸ˆTf_³ +Bñzµ5çÐ>zF|øið0óÞD^‹oCcyû*ë‡O¦G¶(“‹¯¤(¤ÿTpA~< Mž4C†Ë>õ +|r'hÄNÀmÜÕݲ(¹!Yµ)€i±vÂ#³Íã5ÉI‹à +~´-tCchË´Gٟeö ºþVGQÓ&)?Ù£àµ(Ž·0¬øÝŒI(ùsUo•ÉÃՓ'qºNSª–JKCÄ>Ð1óì™Èl-ÙLL&²kÌ2cì1SÝ n˜E c‰·úÀûâÜ%¼ñÜj3ÂáâÜàîNDw£1™¡ˆ3çé ·°7*c&±‰éÑîÚ´þ¶»ú?Mͬøg†]°}=6<¤V™x`„ 3ñjl>çªÓá§Jn +²ðû0}ÎJÝ1Oˆo,cUnE©$‹‹ïÌ)`¾XýöY>£%ùj›2ß*~zŒÿ&T$‹µÂ#ô²&ÒE×Z£· »ÿ••c¾ØºùÉ1ßÌ¡@KúÆçÈÕòe ßÖ.¼ ñ|ƒAÙóü¡ î•ã#»͌ÇßÇjŽœpÕæ ßցÚÙ#¥)‡6Bè<ð¿{7’¨w€QLwi±GjÃn,/$2rƒ°Z:: /úEë’ví¤»"à€ BL”®c ÏÿÓ·´ - iÐÑ{µ¹;ù’~ÏÏÿ’{ŸG[óÿОφÂ2O"Mo&·¿÷&½—‰¯¿Ó‚kuóؚþؓZü¬šÿ؏ò¬‘ÿaÇ"?ݝ’?á|¬‘ûm«¸-Ñïvÿñ$ AåÖQ ?dÆÿ€¡æï:ay2%VÅ^©F:Xz*‡),â-´²®TªÙ*Ý;ªQgiÅ­xœ[d–ýÿ0Œ`G`Aï_pëc,ë6Pü€#W(âá!^,&¥ºNDÛ)Ò`HÝæßñ mšb¨¡ÄëJ ¬7}že¿ ìðÝ%oâõ¼âlB´µÌço—j €æÿIHñéJ <Ä ë$HÁ²\N½‡9Xpv.ªF)VV-³u¾Éމêg‹tç5ïGÁñkÛ%Úè°aôoM=ŒO4fôoÃÅîre×°ic7®êÐ/{1蝎+è’è$×qGZb?6ÈS¢Þ#ÔkJŠÔØQâÚæð¡s~ÈTtOY³#Oϱ^ƒzŠ€£L÷v¬?y›°ž1uB'§fŠž¿}ÎàìTê &¾I0êÈ}ƒ®U2gâÔ< +Ä-ÙóÆî­CÂܙúl^§u&ý›‰]œr¡ÑûY³8kZ '6ʜuJÉoÇS¾Vþ˜‡ÕœA‹B?1ЍHQPŸÁ½¨{"Ô?vô-óièí„wuáõ¤åèj1´r†žî¤ãœèZ¯§™Lÿ:g¶ˆ~2g÷+Èíy²$1‹š>ñfžÝÖ] h•¨½(:Rù™úwÞY#*—f©¥1þNr•tw%–mÈQޏÕ¢NC\*g%%¿0øÈþ!™CÕѳ ¤oÚ!ŒPi¥˜,fz‰Šó·ˆßª6l`ɘáS§Ø*ÂTמիî)«ê +0)^=¯qboSâ”ñ—¨È 1ï°ÀÑ?qj 6¡c)-F`Ù {ª¯g´O¼ª­V 8;zèpl½J¸ æj vrj-¬ÂÙXgÚÇr?œ3Ù³ƒõu°(Â3í#ßÏ?{±êŠmnÝPY†[Pćès|>2öO˜;€Íø7•ˆ,ŠÇSsàF{Ç^Ã|¬sª®è™\q[W%’…öK™ÃÔû¸c+¨Y*ü„¿»îµ’~ ÅÕLp³kOY!ŸÚ¬G´ûÉ8­;Á2¼mYb· Æs±ø<–[è E¬ƒr™¢Á—Ó¨ž”QdïüÔu²‹Fð4q&¯ÚšI9•žÀ­ÙæPîHºö?˜íÊ5@¯´*rꙒŠÑXʦÀÔÑwGU™B&.&È(™Dß¡8ޅ5U£ª’{͍çéêäèõöv՗¥µIÕTRű[Ä9áûÀ$8!Á¸S¥ÃÓ@ÊÈÆ˜ù$€˜öIßýô=§hÜ=ÉFáéšþáêe6Ñr×Î×êÝ+ [BÌ[Ôð<–HT„0­<‰Ë£×‰Â\@"~2IFrZ 7…9xœøÝì_2^Hl{Ö£òé‡#¯vh¼fËqQìZ‹ÇqoûM›Œ¶ ’f]ǂë]üeÌߏ­1ûAq£Õ,_“­VZ¶g7/-¯Iñ\{„ŒU\Žã€ŽØ½ìÑáS†]€ ð›äÝp9[syféœ~/#ý#8Šæã=úc·ÅÏ2Ù[¸/dÈì‹:Ë (÷¯ ¡U˜xg¦odŒ2LÕÎY·\L¸Ày([üp.ùӓ’·Îkˆà­©®ŸEŸ1I.¢Ý£ÄÍJŸÇFA®ŒúÛßê#ÒýãïŽöÒJÈ}ìJ¯‰[é¢òåÕx:ÄߕR’PonUëM¶\ÐöŸ‡rÖ'ôPÔznUzMÒI_± +æÌpú{ ù¿S¹[D HCìҚMP™+­W"ù£Ø€ùk£_{ì™á¯ó¤e~&¸r•¥oEç2Ï!(¹ ÔiØ·Êg3*Œ7 +A…Ø\‡pZð¦~׆^pX·¾–ÔþXµÓ¨ùü°Èvôj¾é[Ó^]öo½%,œ?/'¦“‡Ô5á¢)Ñ3,ó|MyèõÚFqçh¾V‹/ »ªøfsw–¦yMßtÃ_®vŽ€ký xKq¿HmT®ZÞôÕ[{U +G<#BÑÑPø¹û²KuεY7363÷a&,Ýü¸L”e +díê<°](ƒÕž~}ŒY[\F>t¤ÿå—äeeîµ]㙚Š.z쑵³ W­~g9·ˆáóK$­ TJôE¼¼¦"äîÉ@‹Šcϔÿõ˜\\.óJ’RäS\17®tL ðÅ2¶ ÍߤŒ˜%dÄ®&}rÓC;bÁOðGݙ{ïöv÷iþ5¯½çwìÜÓ3>.´6³˜1 Ø;;Ã`+}<Š6Ƭ”wØ,¾g½Ì•¼7KZkýw÷ƒ÷Žd‡p¿¬ ’—†¡ø07Ê1‚óCÚ?Ff3¶©ŸÛ3³Äqûââ¥M56ïârýక±ªxŠá« 'säPÉäW+8k©©ÕÊ|ÐÝf¥ßƒ?ùha„cïUìc8cËG›3œqã8+6×·‹ý,}ð²9q’ìðc†5p÷;[{—‹Íî +Œ.YÖDL÷Ís1ÿëNÙ6~Iß ±ä@⏼ Ÿ¿BëíŒK g«ñí'Þ»Uô-KdlK†éŒvȘ,¯ö^B?9E}âTM—þ\G± o~¸Óa®1 É8…ÑPÕ­˜âcÅKNDJ2ã6QÀkŒËð-î «`œ_,ãäbƒ"‡ê6#]ëôô`D`æúÇW*e„Öûh,[H w옕þì¦t  @s¦7ûBQ/¡¨æ£!±˜’8ÁDfõYŒêMl©:2OÜknËÆUµ™WK‹R>bèŒEz°P‡ê.5q—›ó´¥ÊȜëvŽHð‰âõ) w^)±xÞX—·y4[ø˜+”mȓdØXÐ÷è¹I×ԌïìÂx¤ážc-¥u‹b?~¸æî¨^#²,Ékó[AñIà ,}‰þ<á$›Áp&ºg£ÐKç@|{DF§pÆoŒuX`vumåÕr$W5çQ“)•Ö: È<¬çOÞ[9‹õ"Û¹uR-7Å·v¯}Ýê½\[yÅi~–é€)D„²ä@²££ úI–±Ø±µLŽ%ßÜ!ïˆì¸áX·xml©ÀÚbQ±FߖÍãÌ+À¶í3Cà꣮6Úϳ­5CM““ü¤ÒŒ(ؐ~E´Ñ…§1®†<)Ó.Þ#˜T[Z_u3Фœ‚¸¥'ª­7=Lõg>£e'©^*Þ—miEÌ?M´.Ïlµà=^«/궎ཆ~ yµ²¸Þز!>´kK²c¥ÎK–ÉÂìý×UCÔR ììUÇ&* /Ɯ"©ÐvÜkJɺ˜~»dmÊc~9ÙsËǙqët â?HÔAø4sð/+Xæ?¬ÂØàÅ£R …qՓ‚gšÞÔ`pX‚Ïõ²™°ìǦk”Mš3.g¥$Š¡âôÏìaueіK(($Ãт@õ²O½™D籍Ð[— ÿþH߈2%8åԁ¶EÞÙ£Óò‰ûÛ$sZ—¤ñ +{¶ÅY±ÜšZ…”Iœš=rã"®*Š<ò@çO>xÌS"ï±ð&c?j<ÉìëůªOfž¬ðÌbœ¢ûވ¢ ¢³lŒ‡X\%½ËªžÌ<(G—]×ûé”ý©;-Ò„ť͊½tg‘¡‘*|²òÃÖûáüò$z­…4ù2NùÕNÀxT¢\ÿf •Ò,ä0¨ÌòCyê¤-BÆ*u0dòC•øNÞ1Ųä`©Kª»ðÉÿ)È"…‹­‘]áÖJqéYš ùä‚Õ ÇmÖ3ßs+“2þ•ÊÎ(¾fuþHt£*=`<{°BÄ[ ÷©°£çå_¢Ð>¦IQ㒣(ôZ4GD8ÍVú¢`Jr<Ùª­¦fãÕ_¯Ÿ)®áfRÑ’È“Žöž¶FVÞVϵØ^Ú‹Âx &Òæ,yIÒ'J¹ÆãñŽ©‹é¨ûó££PA٘ÅA;L³˜•_ªŸ˜LãÓÏÆhJ+YÙ#W‘&;b2E¹OF»ñs<[Y²8fCÞxÏRVü*[¥lûC„ЭÐè³Í¤Ù{RV/ð¡ìɬlJÛ¢jr,€Ã”_0MŸÚg¾É¢ó[g:b #jc÷K§UbíCÝúÊdW²ß‹À¸ãL‰_9΍eþý/ )~ Å#˜Úӑ€õz(`ƒÀ0nŒHä@kÌôã7àNÙî¬ÑmÛg:“æ)euK"=ÔW,y¥Ó#žáYs1†µ¯g”–¢òÒy&Wð¶)Œâ¡ú ¶µù‚žê¡á ÇMᗚLõ¤{}:Lä{ɃÅàåð žÄÎddãd;d<–{êlñ ’q àã +A­[obc×WŒéØöŸ_[ìyèf]0'žLÅ%PmÎâ/i‰[î:zq®ðx +OYçV®†ŒeèÈqƒV1iÑx.Í' aëP ì“Õw¸bÈGáêñ cƒ!ÀñâfäÑ£Úgˆ®ÈTsu1ñA§—î£Iq2ùõž®{“H„œYâã{øåÆ÷fÿ€üŒåà »ž\¶莪ðkÎýߣÚJïðó"ŠSþܗÔ6^d©•LŸ²ôF{‹xßi‚^ô¦®·f!P‚°ۗ˜S>£Û lW»]ç(‡'#¨\–‹“Š´QÖÐh9D›Uõ ‡X _ö„üˆÄ܈ïsì2b˜ýÉ ž<°D}^LS*Ú³–‡@âàþiEüBõsGÛòóEz,k_ôÒ@€èB©ó‰Ä~ 1CÈ4ÔC;󋓥ðFÜfÓZ?’$ÙµèwpûLÃõ‘®½úfT˜ôÙdˆ>=GœmOÙ¢ÚòɎÔ|æ±% ÀÁ(óàÉ 2§9é«>§½â+Z}p¾ðA^]Ñìzò˜‘à(Wûas®¡CÃ^]×H ämËd–oìÁœ0ËË'“üÓf·Â?îV\¦–¥øWäo‘Èè¹Ë™l Zà(_g’VOú²×/´§øÌ¬–üя.àX§( ¸w®€ÐÐe«’.–ÆŸ‘ýv$®‘[¸¨líâ–VóGù° =8Þ°‰ö妼÷›D%“Æõה²¨ Mºóÿ¬GõÒÁÙ "Wµ8Yu‘tÀϒÍ»éÆ­G–f8^ϖ €Ë&DÀêâ8nšiH´ˆ‰8P–XOüÁ„ôÙü£ªt2û1F;ç* +¯ë°!‰Ás׆×1 +ðÔÌtªB*1}Tº&8aBï`Þü§·¥,ƒ$ÃȪù€©g4.ETÿQnú¨¨á؋ðO5„8M‰PèA}¤4Qšt´—,KØy]y!!aa¯9TûÔZýùʤ%嶓8¢Ø^‹æYmôøí†Z҉æÛHÓº|îqƖEð.€Ëog·MæÚŸŽgœøPæ†oãøj+…߯£VµæŸÏŸÈû®­…ž£°ò/h¼ó!g]ð™l T›•¢ZÀ­Ÿq¯-2xàğ (ÜY͋({YöÛt9„ëÙódøÚ!Ø >ž-Oç '¯cóxǟ«÷Hèš ¨0Ou³é‰µ^(ýû¼ÍüâP¸×‰üDxR(6’×ç6Æg>#±7Lэ?Ӂ>ú/)Ã1ÚÚ9Ýrù}*%¾ÅÛjÁ + nñǦ_µ RgTËÑÍ dy+‡®[¿f›>y›õàrI¯•|銖‰EÕµ¿¦YHFæß«FÇÒ.€MnÆxQÄòç<âaåÐÙNÿdªyaYȃPt±;±„MžÕ7–ƒpàЫñQ3øXðÍؕ[@õOÇãŽАi÷Q'Ý\Ú­¸ø˜!–J…lP{¢9÷‰›­Ò!£ãŸ‹ßéäm‚Âu¼q ‡Ý¤¥“y·˜Q€Öï—ͲÐbÜUGsÉ–CQ±û¡e¾Ûclõ´ý« ÅxC·]æÞàóáHUÛ6«¤ECÈ 6mWúR»³<ôÉ6•-<§Bµâ¥¨ž{o߯PʉyàÀãTÞY¿ÏEŽgo[À :jÿ*)Rˆÿe³Ž ï®°IÿPfv&yeOËZAã!rìXœû„f}Ô8ùEœ ƒÜüqa†äúï}«Fa?«¶©:äiÊÙÕ Ö£²,9˜@ÊrŒc2Ü…üe¸h„4.½÷bQ·ˆW²W´ÛAՋˆ‹Ó¢BN7}ˆ½…¥K4âY1 ܃‰@Òr…Ɖçͤ“‹€Kv‚œÖüZÕþËj@O8ՋÁY§ë7K¬#³Dæœ;T›UöLx.©&ó…†$r}WÈÆ90̉ÎC½D´ão °kxŒveæž;Ⓔ> +žÑ"S‹·òÓm¼/-Zûî슟a~1íÔ`ôý›th¦ÑˆxªÍŸt+y@됢ÓÍACÿfAE”û-­(4XÒgüÇFBãPIÄښ ƒ…q)ý1XãCþ™†CäZ¾Ô˜¨£\ê9ôåϲ3Á÷m]ùŽ}Tn~w¦#l OÔåÑðQyáç­ 9éf.„rbL¹œ°üãzBÖQð%A¡û R˜)ð@Œ‘–ü%ax|iRæE]ÆÃUwãûÜ2‹ë—ýÿk r>·‡ìn=?…ЊÏûrûUK„ `DÍřõÝ‚hÌñ¥˜cb°e|Ôk5ˆýÙ@6ñ³]ŽnÁ­J2.Û7(´„Sd6gìs%˜\AAøÿ $£!žµ·ýA ¾—á|´BÑ®¶õǞP}ø$!±#EÅ­¹ˆ{àCŽÜÛTßÐj‡öóï[q^A ¶æ[×·ª@…®¼«m2 +šˆæïiۂһ}ºíö·Še¸)¯áŽ]}"Ux±¹?ó̓Ê¡tįçj9…WX‘6iÎ ,ÞW‹(ׇò2Á‡½Ùè|$’Ùz˜dþ_Dò¹þ6«Ô!Qé?¿ì”xm®Á+Ûÿ1l鑸¡ÀïÖ8®XI*id‡ÑYë„P¼9,_¼¢2Ì®ªV¡*0]o$¢úî!fâ=®·YÚGqÀQ]`â«i‹}61ˆdøù6Ŕ=5VÌzdŸ¸3¿?ˆÁþˆëØO¢ÞS‚÷]pÐ¥U™Ÿ”>Âtʹø9{Aǘ+žÏI†2+;¶öþÉ G_=r^Tj2ôq »æ@¸mqd“™½67veX¶6Š÷—Öâ).&Û}{å¼â@ª6Øö¼Éµ_†Cwöb“‰( $WÓDòÂŒ+Š1oQÔˉ7A¥6s!³õw¦¯Êñ®ü˜ù a|Ñ֎vî0e¢hv Î1°l?úC_^¾Ôˆ‹zR܏«B^ªS2Ô +€p¬¶»FªQwCÉlë|ÒÊ_¦ÑEj1.>¤÷[·ÑE~Ԇgÿw¥cmâ˜%ɖCÑulz/¹Ï»0ˆ†Ô˒¹*1l¡]`ìr)¥Q}b ‘R}Ú<ÿið]÷ÛòݐÇA)VTÅí{èÝóÔb¥[°À‰¡É›7ŒŽ›ˆC +uÄ®Õh)C‚^l®m¸}©–Ö;Õ ©[Xø¾‰úÎCþö Ԕ +T> +ÏuyŒ'1µ[²¥³t¦T0U®.2ÔÈ)vÇÙòD’âô PIKÊGÚOòuä©É÷½oKmµþ5›²u +Þ렁5è‡5øjK5én¦þ#éι ˆ4ώs[uD"ê<Øæ•~rÛCëŸÉC(FÕ~,rDîØ9I ˆ0‰Ò¼‚‹Q޽(WřŒ¶ús[ºF¾+Äj荷KT‹¨–öåŒ;m3Q2ЀÂÍ&éP°Y¡0²CÑ-µbêΈ>%n"5wí ·¹a²-ÇëÜÆc#{ Þ24DOxZgÑéç}î£!¸bƒ1c†-™ 鉬¤tz~ìFŸ”f‚lŽlÙPK‘vÅC"ë#ßÏât­@d³Ð#¹áÌ1n]¯ˆC¬6¦ƒæÀ9›~jE͵Ÿu]F${^5Þ7,QNH¢€^¤µÉ\7ˆC§õ¾!ÿðË3urܦ%Ѩµ“åun@äþÜ#ï!xÙÕçý反ÈgÇÉû Âz5!4< ýßíŔpït N/ØK¢$©ßdˆ_ å6]EèÓ½ÕåpÒ(nJ™ÆrjÈUµ‹ù3Ì<îóŽ-Ü}żP½Twv6ñö‡}óDˆœrVè7¹È3c{–þÇBôҀèÈ­FŒŠkͲ•ìS¥»ÜO½Ÿðé1ñW%´œ՞ÝÅܰ{0ý„:Óú¨¥K^ÅÁ𰹊6N­(?EY[¸–‘ŒÊŠ;ô#çg¹œ+ÂÛ5§í¢ÓßX4 †5x8ÏNA¬‘¥¡µf@—»T)!Ù +÷w¸t/‡ç^;aÈ‘Ä#O€žÙLº-›R¸òÿ,‚t’~°]‚É·Qn!ù˜¢Ó/ 2÷¹A®Šõ§‹¡»ÐÛe©!ۋç ¢R9‹¾KvD¨`Ÿõ‚«OûËvrŒ¼¼‘=QYŸÊ82ù8dò\qYøf%U #Q8bG +Ñ ýg$7ëå£@"ޛ˜ƒ Ptíïð MØñÄ]Ëú¾é61»ïõ;iÅÐû1‹ngyê]/T/3')‡××Âȟ¡8. +¨­¢<¡IvN ó=KOÀÿÔ<˜Ë˜(>Ì™¼.H:…ÿ ÃÀÔ[‹ý_=eѨ#(ǓTÓ u¤Óºäj1 80¥nÆ/‘áGÈäËÈìäv¥×(6ïƒ/V^K³2¯ìÛÛñ†Ö¢2‰'îw"аä,ö”Óê/ð{MB¼–ê…~ºÍÂuÜFgØfJßõÄ\_<¡Aói8Cƒ_ٚ»ŒÌÏ-ióæÕWU½äÿgr!õñ1“q{°;¸6í{’† S$ÿ>ªLJ÷GÌf +—(>ÚÉÓ“~+ š(?]M3ÔÕ~ñ¿ÈÛSð9RƒÊ‰8>¥ËUûHp7ù£zG?M6" d„»‘ûMã8bÓ£úЧ<b.nº0š܇y3Ï]þ Jà¨íëQ=.…ò“J€Ëæ\Ÿúeï£ÿVÙ;–1 þ§'}èa¥?;z {ƒö÷Ãà$LÓ$¾fhøÌÓÍlôÐ{{•íæÄ‘ñüR ¿+Óvã¿¢½EedûvYíw—b↏sðĈ/xÖܑݷlѼÿØMÆ_¯' ë„[;·É]Ñғ£ýÅíó^ ß^NhyþxóÙJþTv_5 p¡eHU¢OÞ¤(ů‚<×tmê’}Ø}µÜ”.‘HÀõ‹~ü(rÝ'ªC—½àu>e!Co¿E""Y¯[Ô5a®ÇÆmVÐUko£Ê°S/éžÁÌûFÕdƝ›Vy"&›ÛX¹ÌîãAÕ£]ùïX]Áôõå¹Û +eɄÑþW„œmz Ìyl òÅ? 2Pb2"e03ó ZFØÌì"©c© Y<ˆïý°ûþà½ÿÙ·ÍÿL%nÿùŠÿ:ò~H÷Ó"6$U—*\e²ÔÂsõÝCzŽÀp3”x‚®æ_\0ˆSÐî¹÷A’œrŒ³í˪ê‡êÒ{~Ô(ϰ^8Ž»¼(«,ž(jž>P‚~V>ÿ;+8XØÆ‡½êûR»Ê¡¯œÅì†@°<õ»›Â!ã0n†Y¢îZT0e±©PÁÐãZ¥:®£ޅwø×ª WîOC”ÖŹøª¯(“¬K#j¹ÓX´’§®°þ§ý·‘Êÿ³¨Àðe¶–º{ˆ Þ² ½Tæ!}s•ùŠʝwÅ"¢¾‚4£-p|©n›â¶YP­ñD¯~pz.iæM̰C]Mù–°mäm®“ÚÒ×8Ïvô.»m$ÛúEFX™œ$×}µpOÜÐãlý»´’œÊY6«ÜÏ}QïüxwÔKX[ù á§ ¤ý%~ّ9—ãH¨·)Eò¸nAa½cYÛ(þ²›EO5:«þ²<\Aä]“÷uó¨žt4¶Â^ }PZËtÞn)ìaRKhÆV€&gpšÝ§ÊàÐaµ!àv“h‹nËY3¦¥ÐÍ+ÞG¾WNÔ>¾Å“ç4Ïûº7ôÙhÃÄg¤â£êÑ¿ µ¬´©ÄÁç`| +!oN¼¡O»„WÚκ¤cðä Îg·ô<½}È$þ4]Ø@åzCÔì†8|'FíšèeáñšAžåM·j-7èôÌ¾yÇ­È·íÅ2-ñ—òœG _Dƒ6ÙùžÜ¬ +*µ®¡®ªèM3x-ò•ë>\èî4oK{¡{*çûzðóÛöØxÀ§ñŽ´·¤ÈŸ„XuÆ'̶6Ê2Ãq0ŠŸ]ô3ýú­~Äú§ƒvwÌ´:¡b᧏Õj1…wP=ךŒg>[gz$ß@GÓW?ۛìԕç×DŒ>aÍ̲F;7…ŽžL‘™ïíÆ”¬ôxcax±q³B*ðÿÌJ³j¸Ér¢Dvñµ`†0 +â}Õ§òdeè&¶ñê!ØÕÜI¹KGÿì¢ñíááuY\@Ð ¶6‰­»zÚ~ÑFp„üGÐaU&ó{O¾±ð M5«]Ǒ2øùx`®™µ>$oØŸ%Úo> /¼h6AÜm)ý¨°.sò¤‰Þ#çy¦þ!Gy¦°C^(à ö¹4"#÷t¶š6 ^}e®ÜÅEÝ¢XyKÙ_§òJۛJ¡ýƒó}‚éD«íF<&|èø4Tª´î3ç¿­@ò œT}džýdCÎn‰°%©žn[jÿBHì¶«ò Ä«±@èmUxݰ$äZÌøò¨¥%I}û…”ÂR 9z9È?{ "'z§\™ßdãI2g•ê/›ˆfÓÕéó7†‰ LmŘÝÄë„Á¯+éäTyh›jà /§E1^›;3VnLÚp;ë¶þÚ·"'¾,$mÊkrÊ7ÁF©«í: ÞŽÏøèšZè”χÁ8¯*¡âà香?ë8 Œ³ÙtDà3!´å¬‹Ü”Ò&²šIE;qÔ%!dRˆÓý‚¾–œ¡wæ¾KR'JT_'ÅÎ!µh«6i7–0>S;€–‘±½8̈́2BßÿT”¼EB,¶¿88Æè¶«ÿq¹ÏR/›­A…+®áÔ¶™àÍe¸ۑϹŒÛƒD®=C¤’‚òD8Î }¡‹ÆÉ«B智OñBç§K†0Šow@âžH>< ø¹¨ŽW h…šƒÍÀê7ËAØM +µÚv”#ŠÊG&giU•³IüŠx`¾ëfKsCäõËè¨ÃÏ>IòÇGÂ?ç—MªÉ…Ÿ­N3wé°u%pz¸:ôtñ»QAÞÌG n’¾—²‡¬Ìfۏ®þ,ˆÄ ?ód++<äi( ãR‡ˆ*_ +Š^Å9‹s8˜PaI‡š¨FF³äUŸíϝ[<&ÓÖýÂþ·ÝçrkuÂÅ>JXÊÀJ1˜»õ¢’L¼2':n¢!còU0 `hGt¾l›l‡üó×Ù½­$®ÆÄÁ«Í?sM…¿?–íýþ-g®raˆˆTHCóÄ£/åa؟øs¯YQÃÁ›gˆÇô›öÿ&›â4ý…Ÿy\^m‡AbÈaòÜU™À +ìÍp÷¨wÝÍÀêL¶r\Ëβ$Ò[LäEÝõ¬†, ;œ~3áÃÀ“yî@ 3iEH^õíuèôWq$ eß½ï{ŠkÍÜ$ù] |Q•Ô7re_·ÉCq€§hی‰ »Sõ£!ˆÒF‘ ÿLUÉ!§õ|Â?­¢žÛ-Ÿô?œ0=E§œ'æ&“¼(tX’ôˆ¢ä0î2N84Ñ®~>Êzhm}Lš @c#%Y§Àü“o88«›5k›©‡‘‹³øL¢™mY¦m-nß1\ÿ¶ÏýÈ#˜Œ(ÚÁ‰'QÓ(¾R·óºÔ’¢g½¡ZKxg–ºLxp™)üÏ8mAfùk#Û =ÐÁ¹÷/‡žÈ¡vÁŽ.ûâÍyÊý÷_D|Ëûì³¢ZÍn[áåic!c |"ØÉêOádˆ¯\ßüHâìúÛ`ÿn¬¶H=F¯â֌½ 3ë.éWÛ9Ä£A’¼¡Í¥“1Á±Ýue§>p \Ü0¾¿½>…Ã_ú²ÃÜÞW¡Cåô†Y°{ËÕ6sjÍén Ëyƒõ@sÅZytb-oø•y3‹,_dâfCÌþÑx䞜AD´(zäŸ}FBid ¸¿üéô‡Õ̖ÿºBs¶N» ö´}-8:†©&¾`ÿ“1Ö ‚ŽýaMCÂi‘võÁo-žgð_y?¾øw̗™|¹²ô¸‡À¼œÙF»ƒÏ}ìÝöÓÃomýÛÅ4ŽŒ4±ñÜQh|@Ô+É8Q~àw}6«j:Ì9•äóþ³œ7ÄòÕ¶³ã›Ï=¶ÐmYâûjÿe´~0†±“÷ˆ³Ké!6«­'žõ7&wŸsQ ÙqöAåÀ9tPЮþä¹´†)5¾S6¨—ui›"ÛÇ®u ì„‹o"«6՝ðu›Ú™àU—'΂¨yùw^7óI*y‘øëÃãQMj½×è7Ãép ÁýeôH-2bÁ5QÊ +VN£5™]Nõ+Ú+„Ȧ·ºØÅ6^r;ª÷ïö!÷vŠJÝë3ÕQÉ`$ˆ+@æ;¨—¼ô@ûËÃî‚üæ‘ƒJ(ûðãJvÅõùÂKPb§U}~ÅuB"¬AøK‡Âl~cB¦;“Á_+e¾1ƒ×qägt%Hˆ˜$•ÛQ½Ùu¨›˜ ¾aL¶èú¿˜CãnHxŽùêۃûÁŸÃñ +‰Û2 ÁæA zª4^Ư*‰,Wøoô…¼8E·ÿ—vôKn +×U–¼1cÁé›h?Œ˜î`uZ®hí[mâª\ ÕuEÑG@鞬È߸q |@¾Mn±8;xn™(Ù÷¾z¿–$H1#ŸË½Ù +_-^˜œ—ÛŸ]͋è¾0õ‚GB;ý”>/=}#Ø_×ÿ[îÞèWçç|„a_jP"¶ž¨Ëjžp¾Mßfâ¢@?®j£~„y e„=rìA+—µ²7qܜš<~øéù>ˆNßnŽÖÝ uûx .+-Y},ÜŽ#vï-µ „ºEÂ..w²!QE@ùúâÍÈ'½EßMÄüüÀÂ/ã \< uYo»™$LçGs䦿uUfl'I¼,Á_2/U5¬[@Ü8”êÊLGÖZ?Î|~uE«ZŸ!5ò¼•^|X»ä R¥Ô™lÁx™ôrìJ±“UNKS<ËfB©ÒL¨. 2ó¨ +¦·\ Я1oe¥2eã\¿ÎƒD5F@)œ€ø8Úi¾*pÌí“ZK†yPÈ_Z·iƒ¡ÈG¥D¯iÃpTÇD34Æ@iQiOméno×srâÐtj,EÖïÀ&ñq!Q.úÀø…¹ ÷ F ¿`z-5ÏIû0`¿µzPm‰§±+ŒòÏQèØ´ÁЌŠþ0ýŸ{ڂºIÖ¿ìGA, F=êÊtÒq©è[WKÒÆG˜ŽPN +œ6±2ŸFŸkõ0$ï§MǛU‚¹lß´‰FÖ1Ø!û«qƒ‰Þ]pËZÎÊËòt vr«>Ý Ö2žLÐyØÍ$‹«Cþ˜—˜§W-¢}Aw“zމtv»î!´0åÏø +2ÑáuW8Í&ù2?d…wý‚¨ìÏ1ÿr\”Ùy…Ô ¹••’.¸kPë¦/´»˜ºÔl]”ÚÎæždá*ŸÉÉ#Ü¥†Gˆÿeå]Õø`%ß¼cûa‰Š¹bŠ]IxÁ‹p±š "¥&¹äêk|¨ÿ-3IÑ\ᘚö^7ÐãìFíŸ ~®¸y{cò8Àœ=DµKQfìzE\AÚÎvuû{Qö/YHX½ŽÂؽf(£D/–ßÔ xÂ8aU¦e!¡—{^èMm“…¬þXtIçƒüÿ6a’ ‘÷m`|})ö0Î$Ëàå±9d6Âå‡]3òÔ­3ÓkÞ¥ÎI -€)LiâmXQ½ù’‰NlYNxzB,0ՈOK!9"¼§¡<0“~œ¶Ka;›qïî /Stt½°ô½ét­ªõÑß;Ln¼‡I%옖!ž‹oΗNOžÍ#í¦éÑür#ɽsÞ=¤ÇÏÚmˆ"윒;B†nNEîyρ»2³?``ý +Ì˺ѝOÙGûª(?èù,Ø+pöH¡ýL?˜m>%·Õ“ÿ|m=—4€ºMÐa2r®áø_ԞØ`ß;Ýa%A·X;|ç‡Ü½$|úaèÿޱŒþƒ%ÈΘ`£-¥x.àótÞÂXr‹´˜èŒÙ +9œ“aú”°¶ۙå(¼óSÓqG%cãš~RP,㏣/–+Ží§ “#iâLå¿ç„Œÿ–_÷“õp GìCÇ=m±„îuÃøüŒ(xwµW1Ð-Ö¡r˜• ¡r8±?ïÆŸåëÿлR…¦O­Å{­ÊgËsc8}½kâ‹-ú¾Cÿ¶/°¦(˜QêEd‰@fèþ¼HöäPR@~>,¶DÁíÜ¥<ˆé/›š²‘¤ÏRR]Kƒ+Ÿ—<Æ1ƒþ•û“‡üC_°ÀÔè@ŸªÆ#w¿¥rÁpx8¢®?èwÒ¢{ ¤±…IpO³Å“à ðáIü‘ò|q—¦ߚAؽ£ü¶¯'Çc…¶ÅlÖ¦wRàq@Ïê˜àÆqˆD0my»ÒãÞ¬È^±$£8J<Ú?Æ(ÎÍ5ÓfhÎQÉïNïjàüû„E?ˆɺZò§) +É8[pcT[:0J¬ \ÛÄC(ê`fÂøQãL·b¢œÓ­é™çœ(HÀÍ0‹·¥ˆ©- +[âŽDnùb:MŸjôe4  z’OÄ#aށ‚¹–‘Ò>TNš’m9è‰öu;zµ¯¾V«9Ÿí»;Øj8¸ÛÒâ‰2%ʒ9±v ÄØ~Ê@¿/¾ÄOþ6$æ¢Ì¹.vcÃ-ö <‚}¢`» ¤8"#9¹©¡Œ¶"înO‚º¼ƒ~3ႍ³ˆ1Z$§Šð;;éœì¦ÊE»ýÛÜ!“МÕùóÁX +<²J“==HÛc›f©œ ˆè&’,\>W@åEôéÁ––J »%g±MªûfCºÍ“jDŽ©üÜyb •W34»ë0©OÆÀ®t ñްZ~ò_鿊'L +Ù¢Hýؕ‚6V·÷ÃûqA†Ž„[­œ@ÑáwÁwpãß-šœ½%(‚W°Ÿ*Ž™r»˜ÈØÓwãPÛóY$ʸ{ø½aT˜Çº M-ÄGº«D’IêÕÕÇnT^‘·£A…Y°eÜzh‰l©&,Ï÷îêa‰a[þ‘ÜD~êC¸K,4„ BZ7'ã”ÖìzO¹8(©0ì½²–Èz¬f(ÈÐØ·L=²šë]k·iªïUA¦Ae\„Z”QºŠÍ 5z9vŠYFTÏßÿ¿~÷P»õSÞW;[»÷w¿o7yÍðwÆß yÍðw›Íç7›àÍþ o9¾ÿ÷ËÞs…95²Hä²6¨-áY‘ /ܱÞ~)ýTRïf&n¸P¨á ·3‰”¿»Ì=½²”+_[œË¤b³)@ã"‘€ÎÚámQklMwÂÃÒ5›8“C,ø÷x@nª.eaãòÎðãý]Âg|Ô§¯·IțÎÌw€%”ÀEm¹(=^#ÊÐÛ¬¼Én ð¡V¯’öºfÝeBÛXNåƒHM„ì{$Ç |²S§sÔÑOañëôR×öΓ^†–¿ªl ѹï?ÍzRíÇ8PŒSã‡X&îÅk†V J@(¦¸¤ª‚ÆH;k\Qò™3(ETœ™›U#o†dûÔX_ÂÑÜÈÈs¿ ciä†{—癤³×[òðݹ Yâ®îºìŸO±zxHøŸ>ÅÌÅ`ƒÐXPåm%‰Yi-ã9<죍« v6Ø73?ȉ½Ž õÃÅ̱Gõā +¬r…C)lõ DáXÙ +©l©9ulD+=Á׈'ø¦ùN~÷ó1ñžçº¢ +ó¡‚=¶’ðõr øÉ‘„]˜×¬Ž×Ûc„zÿŒ@˜Æhԍƒ;õ–м?le™~q,%’aJ,Œèx~ +xQ1CØ8„Ci}A멦$bep[X½/Œš©—{;ëò¼4×{™·9é3ÔX́<À –ýp +B¹i®VfKˆÂS ›È!‰R¡R ¡µÄmd7 n¨I1Cø1!„²8Rn:ðß&„êß ú€K.y`ŸPóøfìr«h è`l;ð¼ 3¸t +Lâ褸(ôá¤/C¼fÉ“Ànod=ÿÅ +Êo•-•†ù”†Úi}„Ѹ›tä#(jBΔ»°ùðöTÞ ©´=0»åcš©•LÙ«.ò$sƒ‹Þ‰®M ÔKÖM¾᢮{ )ùUmp{ð Xïâô¯Ë‹¢¡TJÑñÃlH揪€=¿Ãp)aCÒÛ¢žï²ÿN +èãüŽ›š‘¾žKï)|{ĶH?gzžÄV +¥¶„=ˆÚ*.Äð+c=×F&.ßӊR!|ùvÒ×ôáíy³ª! ˆdA4Z%sÇÆ‘Ü)m’V0Z?ÞgãËo(–šœßþ%rä :þò#Þ¤=Î25D·;¢!»AG´ëò£löا¸:ÝÞ4N«<2HáÄ#fµÌŽL2rzÁïiTBžë‰ÙÑv+$µC3x™fÀŠ›ù‚/ñõ¡u[ö;ò¤y…ŸŸQO0«®0¶îÞ¿Õ7EÁ¹'™(dÚÍäëîµ?pߔyyyâjŽì—}'—}oñ,§Ç՗Æ>Në|^(Ëb¡ÉmάL.„yI%) + —lFÏ»øóÂW̛×Çç:ãö,ËóOÂc§„&U¢^B.mcv1ØüŽ>p@H˜æ(?~Á á¡A¶öq +¦Hx?´ ‰P›«¼84!m„éجjr³ƒOdƒôh`–¼ÓËËð*…·…Ò‰þ™ïDx??¨ +¼¤-HZ9Áíå}êtrÒƒå §ÔÈY#[ï¨=ːʗE_,¨æ³cÃÂzæž=þýãÍòáCCìBä÷_P.Òw¡¾”p§Ü µ*ŒÍ<¨œÙ«o„ùÅA{Ÿò•A.±ÞÛÂ×áÂj_ëpä!ïþAMº±’É?•!wÁBk¿„%·heo¸c|'|”ev‚óÝãgÂç„ßµ  +Ä hÇrB´g™ýÒ6¨½ÞþÞ]ÍØ†þHñS“û‡$wl„÷}å Ž8* ´Ïãà…~ÆÁLü¬:\©^*\sW—žìeÙ»M6üõïÜt6‡G®/ºü@š÷Bb¥X{ÇëÜãĚސaÓ/~òçu‡^LøßÖ™”£<_7IÖÀ¶°9°øjš™8¬h{1[ú+eRÚÒgYŠèZLïjcXƒÇ¥Ê“I¨BDZáíž?7•ÀQåKI÷]©º*Rð],ÍÑe†rPî¦Û+GCÅ!Z—öº¶ìI³Çùº¡è9ù}PÈ23c.àð®=yÓ¦·Ãêšø6ü§ó|(0ëñ‰~äß$¾Úž ü} É¥âoÊPÖ}¿)K^¿)øÝÈRt|Ú>åÉ#Ú 1ù6«fÍÒVÛ{¯[ö©7ìŠÅ:BLZ”žM¡¥©·!Ó:n„µýjb(GçÈî£ïýîKݚ嬵0ß ¨;̞çšï¥¬/f6I-â6u#gÔÉmÝ¿X(y­LCŸ˜¡ÐÖ»Ä7¶€kÒ·¶LÖX8Dh9\€ôsßHºçì£ ¾Wp’[rtÄù÷C²› +™ +’ q3¶Þ8í[ ³Ýx1<Ùni«]ëɉ–ÅI¨”ì—ãVfÕ rÉ +æ.F\jÊ#Ö0¨Æ«š@e´ß* +ê‚?N²ÍŠóHVw ÊEv´”Ά qÁèìÖêo`_v±|¥"ñ ½7[éN‰²Zô$Åuì”LÛ &PÇY‚GÔÌ÷ØEW¾O1õíTú)ô—{?Ê`óêϔÁÂ N0TÕý?÷6ò@ÎèÞMïÞ¸›ªT8­úcS|»a$´Go=Û^[3Ü4>ÓÑiî3JÏqÚ,_s Ô޶õ£X=SP%,ÿ%gzi’ðhÝ(•·Ä*ýº‚{6ڗÅþx¨F¤/‰Ó“ÍöuÀ Î&è„m/®[ȧQôþïE¶LÅC.ÇàzÕjë¯Qg¸ÓÇ·®RŽK–L9âŒú,ó¹QêýPœ+,bÂÑԘ#4ÖH'i<ï7Ëmº6A­ sÙ+ºŸü±ÏúpÁF±çIð'.¸íl§Ý@:.ÉoüìH!WFÒwª=C­ë!úM^ •K˜¡C'tvˆ7^J?˜3¸kQPÞÖÝz•UÿI†íîyC™µCÁ\´ d;…¦ Äù ®R#=?†¾æ‘|nòÅ­1-Y†ÿ£DèóXWW ~á¯jzÑEÐÔØ˜‰[v¶´‹Ìj¦MCmð»Þæ, +ªÌ©0Êleøº›ñX6á2‘¡£ÆÎ=»¤En§#~LÔ1ýîFAõ¾É̓ ‹ã±_kîÈÎáë~cE+»†ñjô¼Ã2ò3¡fl›$‘Mº'¶p®bž1Cץɖ9,…ã|Ø_‰`,oÔ%¾­ˆÍJˆv"¯üò´¨•M5JªšjüŽ*æì’¨…Ù0ô9&…€W!=yðL…t£hÀò—?ÛJëöØ ¿)y×ýµ^™0Œþ]z{žÅ`•¡=. ÞTf拓‘<¾Ýs4³ .‰h,ÅuhÊÌ[Ãt7ô×XVÃÔÇ)о xšÌ[å,L $©§}Cau«šsв—6#*0@þ‡{:B‚¸Híçò`ØE½÷5@¿z°ÆÓ xÝ È »/ÜRž4“:BµWDMj.ฏX˜æ@NgwÉÊ8 '§ÓmXÒã0¶Nš·‘h1pšÀíæº__‘¿b†àz"§WX›ƒ--æÓÈssžc†G +W£—õÇYž~žP˜¦Â¤[4ˆ4ôLo$÷3»#n{zі¿‡›<(*Š,xj·qåø=™t7ƒÃË4”ï&þîaM/¡ÛµPw"ʪàÎy²E·'_IÊLo‹[$êçnÉ{¬Ü,œ"¶Ða¯Á^ꃍTš¾D4!fÕãWLÉ:ÝñN6­ÓX¦Š +I§=¿3n3C—ºj ™R"{³‡“ҝ9ï+˜†•Ãçê‹ëN‡7HOE9¤,QŸ ÍU*jkTíUÊ©k *©ª©UcÎÿTV¯EãßpyÓlNÞ{¥=Rb¸Ù!· ï}øù ܽ2˜!CL^VŽ<·âÀà3©{|9ÁR9Ù£Ãüd…u5’>ꄳÖÃì‡dÑ©F-î õHy!Í9d¸UÂäп2_º¡43qÛÚ¨>¶Ù?÷; DCš97œÑ3ñ¼þ`NŸ!¸aL„š˜vƊF r•Ð;H)z縁=ÃUçÊ@€íZ¡— Åh¼º¢÷¸‚Á±ãFƘ÷‚ .«8›(qÛvš¼6¦"–ŠA=x µÀ#”ƪsZƒìíAÖn³p2ëIXÑ;Ü;ƒ WJÖ<Ÿ•‹…iuWÕ@,èl[-ÐÙ6Ž` {WV(™Œ¢fÐÌ[Öª=½r¡•M¸ ÕÑ´Nq»H ò•¢p|D|£T²™CÀ«U–NPðÀÚºÐõÖÑo'ãW›WCÀãµ`vÀj¬§m‚´6í¸­J* “ î鿏ئÔ=i¤,‘ÕŠ…­%sµnÐÔǪ:–˜ø'GRÁmçÐÐ¥²NO90¦z¹ ¾dDFд}Úth£S›þO5÷#¿aµxôà[ºQfOtëk½”‚ tÿ¯\<Û$&-ÂÚTLa_)uŸÑG½2ÝàUŠ}CŒð4CíÛIDí¯'܆Ô6ºâ¸oIrbM·¼z`ƒ<GÎ Èìd1ÿœ:Zørm¶Ù"¶š½'µb÷-DáäS1o±2°‡X¤ífÃyÿr"“mÔÁ¯Ø:?Bè0y…’OefÑrÁŒëÝ‚d:ÇW“;á圙ÊyøkwЭ9éU…›£²`*ô£ºó4Yf±Òù¬ÓXìoA›Ëe;zìwnÕµsÛåc³™f³ÑØöÙA2Pÿ¥ß×ö¹lÃjßîw±îsy¬§j×-šîBîwôæ?ȧ]ôóƒLdl&ø%&Ab̂‘ŸM¨Èœ¬!‘3fD⠌‰ W>˜W·)í®àuoæ+^" Åt…y‹üäžoæDÈ«ûÍ0ܬ†‹¼Ù9÷°Ó޽ᙠˆ…2ÄU>š*ȩ̑X…†E&‰0Û(YøFb“iJ8È3#á ŒÊ­22s¥23Òš8Ëý•ìç¼ëÀA€kfQ¾Q¾Lø û§²~ú[Æ*23x²Þ*Ê%ÔDü;5sf®MdvV$ÈéËñ‘؈ƒ#½Ë~ŠÕe”S¨’þøQüc <ÑsYb̪³NbÌD1‹",ÈÝæÞ.Öÿe~u>­™³c«Ýqk]÷ROýuú©_þÚ§ýï»éö• +úœH†mv7Äߗ}¶KßC}rÿùÆAIŠÝ±øÁøÉ–£ªýãß ÿoﰜçµ³%ÅüT÷Œ=Å!î¨7þþÌ ¥R)G„‘èíðvQ³ïigк!/yÎùßõ °qô/wI¿ %è%þªñƒ^:íÿС_Õ㒤<>/T¤ÅT +gÔ3»¥xßð"ª0ÜpŸðoæAøŸ§Ô³Q6&ø§ã"«’¾Rvµß…k\@­k‡iՙèÖ±øYÄÀýçÛáfhâ{X+¸Œ~pà÷7ô‡¿¾Ý¾€Çúl³RY’{ô×}œ˜®Ì çDf°Ì +h“ àŠÏ¾.xˆ;ÇQ¸qTmZ^d¤ÜR¡[¯dW¡d­Ô4ü+8I²K¸ ª;ËÝÏ;îi +¿ð³î©ßޔ‹é¶…J{êIÎ_ŒœÇÌ㲜1Ev”Ãè[½Ñyé{¢s¥ ';.àœçr¤æÍ¡9Ç®'=—hN}OTNrxbsóËß痿M*N||™9æ$‰Îß­'7©HY[ÕKžJ\œñ™9ÑN“œfDœê1„çG6Wz‚ÅéÉÍ["Ê|Q9ñ;Çø’s´Ä™ýaeü™bùBsŸ8¡®'=qf?û‰Î°±>›ö›Róð:’ÍýQ9°™í?‚Xí¦»õ˜"ÈòóãàËÇ/5}9ʗŸ¼Öô…”åç䗝ÁyÑô¥ ñçkNb¸X|с'4´#c ÿýÊô€=÷ÓõgÇv8·´Ÿ¥»o¨OÏéô™ýKÞû+×=•ëÿÔ½oõ/yèõ|ú›¥Íu÷2ÉÿñK4»N¿!ÎJøÓ(Yõ¥¬ýëÂ$ß|wòDüÂóuN~Ñy­/=qyª€ûÿóûXWyy«½ç{ÏöÀÐ +Ÿ þô¸/ ÏHX].z;Þ}ÆS+™ÿÿ瘧ž?=Þ³ª¼m»gW΃®™ã¹Ïg¬ô—­ï]é¹ðzn|Ž\ÉöJÿ±Ý}ܧ럿wÉÇ*© +z~ Yd%%&´£ü¼ôw¼ÿÁo1?Ûå¯;öE¸_Ž[À¶+xßЭz¿ùYΣúÏÿý-è3¥Ïö¹úÒî—4¾)9åó¾íÿ‹¼Ïÿ;Ó&ÿ»¿ÿ2ÿÿÿþÿÅΚöՅ¶¨$šè¿¥zÿ>ã㠜’díšð…ç {#âDÓ³ÐädŸ‘ò%«.7æç´äþÿªñÅô/ŸÚOv{2ùÃþueo¤üæ¾—ðsۖ7Ñþ{R¹ô¿ƒžÈ®tu_ÑÎëgþz¯ìçÓg>û9é?³žoû9çöìòGü>žØ¥ÏŸ/™þˆ¾­ýá9†»«ê­ò ~yyÒþ²ù‡éIÍaYôž1|Áÿá-ßÿ ¯å¶%»ÿcý<+çŠÞ—3À@ÁB­>~Ó÷é7°þGZf ×VÍ<£ç÷ó/{üµ8]aÖs^J´?^£®æý ¾iLæûõ]7ìq·äù¨™ 5¦”ðd6 67™í<ÞÃìÎ2“m+K ¤W»ñ3L|Y­§x¡­,œ„_âbüŒ³ìÃþŸtÇþžf¿aâßû.5F}GÓtÆ~J#g\¿ «þ÷“ÕÓú>:ʛÛâÙÕPpÿd¥>CÎõ:¾Wè÷w_)Ëç_XÇ|ÙáŸôØîÛ¾™Ñ4’ýò|(ÆÞŸ Y­é™R×Âë6>o¹¥Íýì=ŽÙéâøSÊìoÓ[m(º¬·4ÿ+‚š_ o¾§ô|$h÷جï_úu‹Oo߅Îa¯ìxWWæ÷w7;ÿΆg:wφýóŒtí¼]#äðŽòx ®¯ò ¬dó-!ò^‡‘æùÿ +l¦Ó›Pã5äü̑Áà*q~7ú>./-þO;»ÌMãiõ™lWϚî¬s{oK%ì³øæiefpª½†½vGeíÇöÛ3¶|;a«ôœù˜6Þ\œšÊY†ú?cA9³ÂÜyù? †û3ÃÆ~¨ ·Hw‰ÑäîoEÿ‡ÜöP=vgyàʦÛå¨ÓáôË&5Ý×îu Ó`¼¾ëEèV¯¿Ów݆«k5Ÿ¿rä{y=²ì¿‡ç þ¼ÿ3ìûoOþ¸ýÞf¢ýeC½‡ªË™ª3g™ø|5ßA•Û‰{ôž/ÆÈån»ýzÉ_©þ q›>ßsïþdþĖ+!ÔmÿTΏj¶‡‰+”é0»]î/˶—¤Ïã³Ñ¦möm°íǎªwçí;&¦Ã}Ýþjo7{ó{[©6¯Ùutð1õž†ó¦U§?Ñ÷4²¦3[o­õö=4¾k{²øIGÿÓQºÂúýx¦|™&}-ï}þ¦7ÚÙ®Åxÿ-›ÒÍ<ê;̶>oeÔàÑïß©=¿²œYpvW¶Ê0ÅúSùýŽ„·îÏd0Z ¡ÿ”ÿ]îUõOÞ[Ó´Ò¬æxur_?]ùÚ^Cü‹ÞÿFöOú½þ÷K•óâúÿ•ŽÁæïk©‡”1÷Ͼ}óïŸ|ûçß>ù÷Ͼ}óïŸ|ûçß>ù÷Ͼ}óïŸ|ûçß>ù÷Ͼ}óïŸ|ûçß>ù÷Ͼ}óïŸ|ûçß>ù÷Ͼ}÷ÿ~Ó`&pvº¤uJ©ÕÓ¬§Ž§§]O'O-N}<Ý<í;:yêyúz*zJzZ}->šŸQOUOYNêžÆžÊžÒžÖ{z{Šs*T+¨YQQPº¢N¢Z ú‰º‰Ú†uÕµ:-Fš£QQUQYPê¢Æ¢Ê¢Ò¢Ö¡‹z‹Šƒ5jµsúº]^£WU«¬ÕºÕØêìµvš»]Z:»}]ƬʕU*êVTÇTÇÔ®©“©ÓTê*jªk*]TØÔÙT™¬U¬W¬Y¬ŽÖGë)5”ºÍ³K¬ “!†eCcçæRùš?3KæYy–žd·œIçRùÊôë4òzym;=<öž—O£ÓÕië4öš{]9š…ZˆýDÞ¢‹Q¦ÔXê-õ 53ڙýM¦“SK©Ôjjµ5š—Z›M–¦[T~ª{U?ªÿо‰0Ëû(Œí̚3µ3,`äåødÔ'[ÀÅìì¡£uÝÒöZçùhù£.8Œ¿ÜµçØÿî–ÄZõßþµ¯]žÃa‹´†_ùÖ½{VO\ÿõZõôLjU©ÿ²×¯ŒÀ’_³ÀÝL©k×¢T)ÿ‚ />‚ׯ>'¦›¦œ¼ú ^¸Ö#±"åç}–OãŒÊðR™ÿÊIkÿêËò×ÿö¬e‘JÅ)íëäöoT^U®£{…-ˆƒû!¹F–fG¸¨¤®÷à²ÛU&vžE×ú“¨ðŠîž`!úÿª˜0¡¯ƒSãÏ_êÐÞZòg¡Ø.= râ+wç¨öÁBËÍ õXBƒÇf¹ƒ™hCÐþ òŠF4p¡£ŒºtxÀŠ—fb~– õ4ð ·î¬QÿÍfၵ{ƒ¬ÙÆ49|ÚÌÞ<íˆGí&dXrÑÇSmìíN–ŒdxBn%å‰Às>9İˍ×Â's.˜çÇ †%ÛðÛL¸›XÒe~ã9贙éÉ49ÖY¢pÏk=J3ùèr 0Os¨ÖÁL›W»`ç&¬Ú¿Td=aJϙÎM3N5;EüZ±¡WU{“uâÖmd˜*>CÖmnÑÆal‰µ|³ÐöM«Û‡¬ÑG.BÄÚ¶0G·®NÒÎÕ¢†+š8a")íËÍïÚJfãšÁ £©mì9ú‡Ú»6‡H|έR''9&(òÀRGpzÓjëŽBÅ £K<Ĭ‰ÈmÏo¶O!b…xCnJOwx(XåöyÌ ‚™¬ è)fõÑ`rfýæETí3ë‚iUÎ0‘igÅh¿Ùk„8B”O„ò9}“[øœMHW1s+‰¸ScÕÆÀћ›}é vÜ´`ã´O^ ¥ÇOŸŒÖÿ!ŸëûO¸U‡VÂqqµy)ÁT#ŠÐå03;F ëÍ}´$» Œ «ˆt(ØàêˆBUk¼üµ6ä'Ù¢&Ýã0˜–½¸M!¡aü†sišJaÛ`#šá®$AÙÆ»¨€ò‚‹®M«LÅπF«gæ.Y Ë2¡Ð›wm« +À¦Ä”[G«E90 d³ †`’þ-(à²PìTyöÍï¢Àªz^$…œ ,QÝ£IqPMs;XÁMOC~*9Gè6¯ÙæŠ€Èn޳ø€ÑAéóTÐ(³àl{;8Ä7Brfì<¡ ;¾œ¬ˆÁå~À8  Ø/äPÄåȁ‡{ -â<žÇ!amò4܊ã;´Ù¦0á§¹AZî5¡Íùp ¢ÍØå##Ú®†vˆ§· E1ÛçöÌQè„.øn†‡/¾F YÚ½óEÖ¾ODȆÿ5¶ !2*ˆz†ðHÛrÄ XHp¨†*Ý®Xâ;˜(´Îü"|ó ﻐ KîhcçGπ70¦sI °¦«¤zU@]0nù“–àØvÁPÂ(ÔÁ—ù<´!hfZ-j¶|f©qS¯ì4ŒR!‘ŒØÀŽ^üµ®âÑêy`#¸‚”ÓȯçŒ9ÌâØ[° jÂ*sàà•‚ çr˜eµúH”[IQˊñ VbÀ¹±s{[0sW{Æ·÷Ɖ 0—†B0 +ü•¨¬h†Ë¯ ÆÑ»ËõK°h€Ž‹vÖB™îߚ!G×ÈîíÅCRHÝ~‘p4h¾vïç;P +ퟎCšï19€C¼ŒØ¹É¹­ù#ōӶPïª{nœ Rn‹Gª#tKµc¬Äʎ +_=pNñUæwŠî$å©>Dà×-K²#[ü{ïÈ1‚þ h8Æ3†Ú‡ª*#׌gN?€+ïÀ²sߌ#l~^4ø« ¿ÑÎ=NkL£‚¸Šß_àW‡Ÿi ùÛB)Ítkp`§n¦ÚCJe¶Ì +Evx"œ=deyOloÄì`ç°·`æ_æýšÔzAS½£‰…À§R5V¹–Î +ô§æ¼xÀÝ{y\@—÷'ßùywoNc¼“F ¨V¡(è‰uäÌþ(÷(:m€oI€ˆuAŠÉŸ&`c­ü]Y)€‚rÐû€àXGœ¾HX-ñ‰¯çÍȁbß>À–uØ +µ¹–eïès4ðä?Ÿ¾r‡l*˜Hz³2«¸ÐNqÅ+:™J¹•­*˜p•ä™T0anÖw…m)sü¨3zXÓd†ìí²il@ ”j¨o}uì`ul»ýmªºÞÅcã—~­µTN• Yí9¯¹÷šA«’xÂQ‚ÙêÃ7¨4±UÄn¿, ÝyÉÍ×÷P{ë+~Š`‹И}¡!Ô[‹ r :¨·‚æÌÊ¥öTkûZBò@dHíUc +‰PöëòKgÎü+fÓ¢j péüî +Jg5õ™8éY8˪q—qCÔ£6E—äj.;ILòë²ü ³7@~Ô6Š d֏™ GpÉG!¼¶@‡e2 å2mM!»ԔüÊ– ®L3PÌËà­Z×…™+Óúˆ{ËOë†ú¯óCiúßYu •uÀÌɔĨŽÚéuAÍu‚¦wÇ!§@ôhÊÔå ÕÚqʱÏknŒJr7͉¿{ùASÛãW¢æ Ô$ý¿+ÿ‘3uÏÖ -¤ÒEŒ×[¢h­YÝ9å7ñò¿çˆîÒÜØŽæ€îáñ‰&'Qð¡’4%9…ìÂLXª9š@ûœÌ©øÅS.$ƀÜ==ç£3.ÜoÂq—rË.;Ni¡S‚6¼¬2¹1‡òz¿¢()´ün¿•M ….×iI·¹uÃQ .äûx(PK pÅNÝÙµpµÂìƒß4oZ h¼Ð˜j¢ƒÅŸ‚Ƶڦ+EV‹4x„iñ¢€ÙKf³ÖàJ6Çò–L§:÷” +7Z&Y”ütþ‚4' +}v‡Äx½a ýÿYs/ú˜ÿÞ`ß!ÔåËõÓ¬”ã@ËÒUiÃÒ$jT«öNO¬dæX+™¶–U,3CäpÔü=´Äðx Û ÛE”•2°0QZ +ÆhæÐ©ÖIÄĪùVD9 â£ÈtÛ €%2d(½1ՓaåSlE„Æ}0²Z8ÅQ¯=øhµ»;½´Ä˜xR¡7&çóä7g·®=Æ>ußq “ fÝèŸ`«Ÿ)Ù¿ùCÔµêF€ÿ«£"H®Q[285ƒØA‘À±´¨ŸÙ ‹P>l÷¥H&ã&ó‚ì6¯Dq ŠFœ~E£ÔdÉÜ=ÒI@ 0 ¾n—‡ÿ;ä´oAñLÁ(p¯þã5tš8 ž!£8V~öÀœŸº—²P3³ÿvvÔã{ˆ&³ î Ú᛺㜿mœW¶˜f€]´ÆT0áÅ#â•t’Ÿ_Ôs5r©>ÁÆy˜»ŒõÙ1ŸHû m\âÖ§lF +ÎCq3ÖØ6`s™sš/² ÿÉX0º.ãF’3l;ÂV%òkð‰ó·pöÞè›<ò%MJ*8¡V/ç‹üØCêØhvK@éÄÕý….zÚ–´4bh7E’!öåÑQZ‚¤Ô.&$ÅÓê’tWènC‰ƒˆ; üõ«d(¬¢^7¸7¿„®C!å¡[¡:Ô­dç0™c9 /j·6kpJq¶±ã²¯SAF…m`Ô¥Od÷!õ +™#ø +Í&G¯âÐAšíEqëÑ Š6­‚ÜÛ–J>C×ۚßHF¥«gùQó›¡ï‡\ÌÊ5Z¤Þýªk¨¾9(¼<-±:£ J3£`ލoR¬A‹”±P*ÿ\Pz–ÒBreÞF(æ¸ÏK0'ˆ7E K(Ó(Q™öFƒ¬¦˜Ul‰úž¶L@¶4m ’Ú45Ä?%(­þ-_:Žf²Cá<—ߌõ ¨ÑÝoð7¿Ù}€Ÿ{Ïôz2?šèÛÐD¯`µ«#% WzñÄâ‘S€ycÜç1‡b¿ãk‘(a)®[¤ù͗÷‚gùs|€¥ÚŒ…ôƒNß vŽÕ*¹*-ÛÉ[HEº ìKšîë—x£q†Íê@> {÷¬Im?Ýïs½Ìîf‚â*%D´Ê£B“Y†fp3 Jj”…ZHEUFŒqÊZjjÀYEU•eJ••jŠj™õú†*ZšŠ•;ÿÿÞç@Oâ½¾÷ß~·ï½ó}óÝß¾Ýàn𷁼-óx;ÀÞðwÍß7x;æó7™¿€[ÍÞNùçÜ-óx›ÊßÁ]—½ÙÛ²Û?eÉþö\‰ìæx‡½'z=ÆcÄùœáTöpù*t›i³¹í,E%QÉ %±‹Ë›ˆCtñ%|Ct$®Å +W¬›€q?£C—Ý›”„Œ,ÖL ­ñÂød0ê?p¼÷ æÛÆÃOÛá°\*®Æ0ٕ|™s_€ š:(ç/Ä®pqkœå™6ìoÄE›2ñÁ‹JÇ̵‡9†na µìOTüÚçê'áfŸ’9ñËàQ;gÁÒ$‰€Gs“|·9Ä^”G°:Áíî|MfŒ±n3s–4äß,ö‡>Dåü膷QoÛj°ql16¯c‡ +ž¼Ù0¢a¢9³/ƒkSY›Þ—š95Ö#GÀ¢ææÛ Û¡p*–wŠ÷´²ÑrÄÈDo9¯ “{Bh÷£#÷×{Ñ·A ½¾1ãÁVŽ´YO7}­|ÍÇU&^U‡Ðµ8œHêË1V9qTïßu˜štÃox¤Å ä>~tm«;œ©k¼©3¼©ÁHåÚàå‰Äښぼ´|–$¡×Ê/{EB«Ë”Ë74y!L§÷å3ˆùÞüHKt›T7š)túi3ɱÿ› }×Q¥Ýeø~×E Qhmvip:ówXZzÔ¦‹Â;sbùI¯üaNÆE›5|?PIîÛ)?Hu”³Øœ:…Ûƒbåí|‰íÄ&´m)Œ,´þâL$“Äà³âúšÒæÏ êŠ< 9½Ód3ú><ã¾Þ£#ôª-†É8D‹¬áÇÀÔ6¶¦OÇ·ÈA¸ÈvŒÜ(Œs€(ùí…̓NroV8RïÚߺ™IÎ ˜=ìó¥³s—…f:äk6(h|"ëeâ¾q3ùr†4[¡>© Gírh‰‡íj L5iûZ‹~Ï&Ÿ¸1ò.dä{Sõñ}a¦‹Ï±N(xA=ˆæTq ϸKŠÊ#ŒÍî/ÕfßN…f&ÃÎ!ÃT9¨Ú*ùÂÑđIñkáÑ^ñ³GÇx•Óù÷Â&ñ«œI?Ò|hÍÍÈý´‡SŸºÏ\'矙¢óôó¯¨Ç8’_Á4¬\,ɸ–žXÚR-ùûC,:jü*͈BoÔ~Χè¬]-Îk=<§ê•uŠ<¼V'êU¢ç+W +L1pqmpII½8£l.ûW»‰9~‰dßk-ð¿P7„>-e­ðC¡VHc\ã䲅9»U‚‰ÅоâÎ<'‘ÎFÖÈZ¼£)C—ßÉtG§á˜áqvªŽŸïæµz +Æ´;x~ò‚l¿Z­8Oq˜¤!âb„– ¤@~o@{–_O×"¤dš=Cäs6û +=S +®ãqà¿i>yίଛXÅÃQú“´?TÅÎzóãû)”ÎzòEW¥ +¸R@þã~p¥nvj½Ÿ8m«ÐÌ|1̇ŜÌmñ|ÜDþø‰È×Oˆm~îµECíÇn-þínæïl·W2“>öþ™ë´PñÑ8Œ<Û֊´ƒ Ç¡9àV¥Ÿò&ÐV`šÑ²£ætV¢UÁx¹-ÑËéÒËíPdÛµHä7Uw]Š ¾”Ýõ$«)·›ë'uu_4]03á~m¯Ô>wwÁVQê~¤jè“ãzä[EK˹Oòî'²f͌Zær‡.là ¹³I Ò,n0ò b¤n°ë¢Z¶‘bÀ†²R2b¥1k$Ù{ øîÝs6L%"d¢¢˜¶¸^=seÍȋ?æmW0”bÙ³Sðý¡ÝãlïFA³).òS ìn2ñHHÉ/”Ž–|¾4ð’9: Eíc¢™²_"Œx¾<ñ’P (î¢Ä—H¶jyѵÔJ,œñœRåîÁrQìÐ<¤RæHXRD†(Z’hï!Âãs ù]Ëeø™6"dHÄ#÷ÖQ£%횯jÁŒ¢àó¯Ó½r󘻰vQgJvíYÈ®‹b†“òK"sÍ3@¹ |ƒqR’,dè^E“A¤ãÙ6š2hºEyߐþ=ˆñîבî#ÇG5‘š™EÉì×:ù5"%ä$£ãÐØÔ‚2]ÍÞ«EŽ6½”S%ã»Ù½ŒS)F²‚Øœ[u0ë£ãÏÖÒéMc’+õ1ìî×m#p¼ƒF’Œ2íÑÚ%,8ª†Ò)bº˜x™Ï8^J8Z?A€É{È*‰rëy¯jÛòÃDZe(Ñ« &l)“fˆm½ÔÉ,œæ²=LŒ1ÿ–Á㖴ü3f+ÚÅÇ+àaÅ/zæQÉIu—Ÿ¿@aÚ.ŒD2Šì£_üµnœ +¢ a¯„@ì 9ë9WJ6Ñ ’0ǦÚê¬PòF&܊²00ʈÀ¶¿sÇTÿ¢ª7wTÁ»û¼¬aîªu·‚ˆx؇& äˆ,ž0ˆ)r ¡»" ‰Ã‘uS²ÜUÄj®êâ;ê²/°Ø/¤¿wUîÜTýnÿ¬ÞQ¦?Ñû†zCî=»dÆ¡ÃÁ½$‹ª†Æ?«JšCô¶áq·u· Ä‚|EwtãÝ´%Ý5f’è|ؤºKBK¡Â—0’èx¼’i.‡1ԗCƳ…¸‹Ç†|¸‹ÇõmƒJ/ü¤—L?­ÚK–5è’\ÁýP$ºq¯.’êõ’èi?’êGô±%Õ!ô’êÇõiÕ$?„8©.H×ݤ¹C_\’醽K–5õ .`מItã^a%Ô yT—4kœ’êF¼:Kªði.¬k¾$»Âи'Z˜$‰ã^Í%Êû´—L5Ý$¹c_P’ïƒ^a%ßF¼zK˜5áÒ]8׃Iu\ԗT5í Ò' /IsF½’K©úè?ã·}8÷{ªê]ߐ•<Šîéøy„WwäiJÁÝî_q’y!’y7p{â Ç»ƒÑ]k¸=ðîàôWwU –Šïˆ®b+ŠéÑ^Ù©=B+Ú"¹¨¯fŠêQ_„Šê‘^ÅÞQ^‰Õ¢½ ++¼"¾¢ +îDû”/(4^Ph¼ Óú`ƒÓ˜ ôÁ¦<°ƒË<°ƒË<°Öya¬òÃYèÁðWrŸÜGæ~`Gæ~`Gæ~`Gæu5^™Ýê¼´W˜‚w²yAztWw´z„W•Kdôcø+¹ƒî éÀ¾œ éÀ¾œ5^†è;ç’ç’ç’ç“u˜Šë]—Ñ^Þå讲 *\kšïrôWçÀÝÍ¿s øÉù $ä€|’ò@>MØ}ñù)HÞ5ìàn珹޼åü ”ò€~PÊù@?(åuîø îdz`¦z`¦z`¦z`¦ ƒËù`,å€|°–òÀ>XËù`0æ|À˜ó>`Ìù€0æ}8Ӏ}8Ӏ}8Ӏ}8Ӏ}8Ӏ}@Ô}@Ô}@Ô}@Ô}@Ô|Кó@>hÍù 4æ€|Кõ Rõ Rõ Rõ Rõ Rõ@Tõ@Tõ@Tõ@Tõ@Tõ`Võ`Võ`Võ`Võ`Vô8p.g¯('¯('¯('¯('¯('¯('¯öP)O^UÕj¾¥îg¯ù $ä€|’ò@>HÉù%õã^¶âzñ¯MwÌÿs=xÊù@?(åü ”ò€~Pi}0Ó}0Ó}0Ó}0Ó}0Ó|°–òÀ>XËù`,å€|°–ó>`Ìù€0æ|À˜ó>`Ӏ}8Ӏ}8Ӏ}8Ӏ}8Ӏ}8Ô}@Ô}@Ô}@Ô}@Ô}@Íù 4æ€|Кó@>hÍù Rõ Rõ Rõ Rõ Rõ Tõ@Tõ@Tõ@Tõ@Tõ@Võ`Võ`Võ`Võ`Võ`xûÀÞ>ð÷€¼}àïxûÀÐèØ\ðz¸Ƽô +\é®…å¢¼Ä +\ã^N.ô:•ð)p¡Ô¯¸à?C©_wÕ/¹à/y $ä€<’ò@HÊy@(å< ”ò€PÊz`¦z`¦z`¦z`¦z`–òÀXËy`,å€<°–÷À¾=ðï€|{àßø÷À¾€=ôï }{èß@ú÷о€<À˜ó`Ìy€0æ<À§zp§zp§zp§zp§z€¨z€¨z€¨z€¨z€ªz ªz ªz ªz ªz°«z°«z°«z°«z°šó@hÍy 4æ€<Кõ Rõ Rõ Rõ Rõ=@}çn¾ò¶ÿ•ëa›ïˆ×øEá[ŸàNE†§GîUÝnþŽ_y[§áî,ÉÂ%{1_ö­Çï+aÿðÖÓ÷•ªý²%ràÝ\×ÿö+w,ãóoœoOúú7Âô€yLÄݤú«­øûã›Àß½4æùgÛçÞf ›vЬÛ÷8vmûØvmòËY·™9›|äyÂhf›ÄɝÁ ¾?ìÁù‡P8>p|àøÁð ƒàÀ.€\¸>qœ~¸m¿{&Žq¾¹¡«ïÎQT:¨×TXÔYÔZT[TR²¦¦¤ê™:™z™Úš +š—U656U6u6•6Õ&ºXêÔ;£Iº—u:êÕ §N¬]Y:³uhêÙѵK*¡j¡êŽª“ª—ªª ª¡ªuUcUeUgUiUmTmZʸZ¸z³ªäêåêçjè*èjÝUØÕÙUÙÕÚUÛU›X²²²°êÉ:ÉzÉÑÑa.«,k,«,ë-+-« ­Y[ [Zull½límm kªÛÛ*Û:ÛJÛjÓk–WB×C×]']/];]A]C\êºÆºÊºÎºÒºÚ¸Úõ•ðµðõçWÉ×Ë×Î×ÐWÐ׺¯±¯²¯³¯´¯¶¯6Áe„-„=Övö¶6¬,l,¬,ì-,-¬aÚÍ2mÊ(Z(z#¨¤è¥è§h¨(¨hQXÑYQYÑZQ[QF²ŽŽŒê9:9z9Ú: +:7Tv4vTvtv”vÔfÒ,¤…¤‡¤:’N’^’v’‚’†‘Õ%%•%%¥%µ!´«)aiaéN¥“¥—¥¥ ¥¡¥uKcKeKgKiKmJm2ÊhZhzc©¤é¥é§i¨)¨iSXÓYSYÓZS[SN²žžœêy:yzyÚz +zwTö4öTötö”öÔæÔ,¨…¨‡¨:¢N¢^¢v¢‚¢„ý‚lj,¿ÿ°Où6 Z…ŸýûñOØ”~Á$T `žyúñÿ<›ýy?Ǒ0FT‰¢#ˆÊÿ“ìI²£Iב™"dVdDï#Ñûû*ݼMn“E¡Áå[ì½Å yæmfak¸wþŽ#?VËÉËSJ¼ùÜYüóüþ†ûŠc?ûg"eÿMwULj Œ5ŒKA¼^8ÆÇücq‡üDcÏøí/bÆöG£Ž(ÿŽÕôÿŽÛiëÝ6Äkk# +A³~ƒL‡®'Gf ”žŒxa3ÎB²×qzªZ4/q{<ÄNuGçâìqŠÌ¼ÉBÅã…ΤƒÄ­o¨žC+ñÆÑ‘‹+ö³@ʟ×+Ý% Õ¡•åÿ~V;è…Pgîí+iÂ/gæzæo"÷í“B…û¬6ÌOñ9˜²‹Än&4œo ˜¬:Ûý»wô:(™S›™ºA)3Òی·¾þT {¿@,ù7fȜ L—Àü»²rD[+y²ýãG¥7ÉÝncët¶+ñ}àÏIü’ÒÍv9GšøD®ï1—äC{ºjˆ¿+ µÅV‡Í‡ÿ¾úë˜yÿ*G|F\ù~s'ÿ‹~–£ACÒüf¢loÕ8%_+<ÑBÚò-¦ÿt½ó6‚r½§4ýêßÿÕ/½þ%ïž<Àµ$Rù 圽ðoédÿú—¾q:ùä÷Ò^üÀ¥¿5qÍýeï“V~h¤ÿÔ~ÿ„½âõQ7oÈs¹îß¿8<ù/’ß{4ÿ2ö'AxM•³äÏ4ýÿ§ì­Ð²­oìxø»€*9%ç°} „@š¡ö1¬Î4ç±ø¨·8ÖN=…ÜkUÎs¶ç9xìhì>lVüc½ª™ûkyȶ.d cÆðøgʝ‚‚û“à¿õ‚ð¨Á}X ¾¹pG/Û½3 Ú#³ò³ó­38÷ÌVîêÕ`¢¼3¸®»üm"Çç Z>E­c» “˜žî„î^9_6ïîÌü‹Ù|ìαã¥`µ±o¨×#1T©ùÉñ¼] %ùrÿjö,‰ÖwƒnM?›ƒ"os†Pvž¹H9”¸3œ?äžY3sM¦A“0øIqøW½^ò€âÙí°Ctð,O%ƒŽ9Î>•Ñg½(£=%ïH: +Æ÷bJì.òo8ÍÇÀsŽ#‹cœåoBjçwÝ$4Ï"ÉÂaûÙb±ÜÒY +Əۮ5sÞÑ{ä°ì}èxæMÓœ¬}hXΪYpÝ®ÂOÀ +‡M?îïh¹ðX~©”þúô'X0ç9Ïu¾ðý{½ø’öÿ¥Ú;'ÄX&²fÓ$àŸ ?QèOÙHµ²Z²H!ޖÞÞТ~EfröžÓ¶éw4Jû~o»N6äÈÑ»åâ}¶oh8ÍÞ~g¤^ ‹xñXØÏHtL+ÏÀô><ʁٷJ?„áþ fð@yäÆnéíöɇkǎä\Á¶f(A¹$ÝH5é@ñ™ÑA¸” Ý Ò.LH¨¿ç8óO…'zH¹2H8ÁQñã- ô¦Õ(Î`ü¢þ8‘çFò-™oÑÝÙ·KÿZô‹vnÚ`M\¸¶ ½½óó<Œ7ÃyFÍc’á԰⢠!ÍBͽ6Ï(ðð Å#C‡‹×yA÷“‡?pd¶þÍòqr;ïàæ3ÿ¥¨ûÿ£O7-oûZy±ywñiæÿ^#? ãû¸ŒÎxÿoŸIZ\F‚´¸Œþåæâ3‹ÓüÖq4Nþ'ïhïÕB¯!>û=h?çÄæ@è(^áùµv©k«-ÖG¶ù¬»¥x[™k,Þ{鍪ˆO—ŸyñüÕ©ãÚí+;”ÊÚ\«Ñ™ó4‚Õ·…Æïxs³Ì4³¼ +JŸ1×À¸ŸC¸ù6Ù~Óh¿sÏÖò³•P Šîr ¤ˆÐdšRÓ}Ò3Xý—ŸV»ßëmÿýÃö*:¾ Ì,IDÏÏ¡^,ÍF•û4¿A5a_ !×ûñ'E§«¡'3‚ð"kû\eg}Ûp¡bÔlµ“V¿ÂÚîù6|wÌ®‹5á¤KêŒ®Õþ«ç‹ƋSî`[N}|–g¶Ÿcó_n6Ú-SÞc°Á÷Yì ?c~µ½Þý˜µ}­fÿœÚ<1 ‘Öv/8šs‰ê¼Ì–û³ç§Åðis¸ÿŸŽÈ¥Xª¥_°ûæ²C°ŸVS:糪s5³æSNõޱ_bcb}\Ýß͌ÑöÿǖÑZo¯Ñä´Ázk·T´~ŽZ'ÝqcIo¢=6k}çåtíþ Ž7²Ì®[éKÕSZe¯?â×Ì¿³o©}ÚûÝ&ƒÊÅùŒ=O™•ºŸ¶¢ËÁ†‘Ÿ/yQå=ù Ö{ýýû¯ÚB¯ÓÏ{½þ•³Bºq8¾Ÿ#ym”ÏO+™ûf&Âq¾}V±v…†ªY1;ŒLкV´}.‡›´ÛÃn=øÍߖÐ͞­ãÈ×õkuFzYnÝï•Êh£V·waŒyîÖy“wð††Ãa<ŸÙ×d!úÿmn±ŽYý¢ž…»;h}’ë»ècÛt4U“¿°åô45Û]=^…ÎúÑ_f«{«Âˊžès +Ðòl³1ÄùäTf¼֑^5¶Å±4]W¿abÅÚÓä‘k#À{Šsœz`ב„Å’LGvÇÐÓaS³òÕÔßüÇí¯ ’¾·»þÛMí³Ñô7»ëU8>QDෝäÕµ©_¡{UOºËW½²†ÀléøøfüÌ¿ÍÀˆLO³ÌãúÒóc]—{CÕl«œÊ¦)ÞÆY +oS—µçdŸtËêŽì[GFÍ«L]¤ÏÈ×µééVìáôì»FEÐMG3♔دô:4¶X§¢ñ%•ÙKÓÐæö´¹¬#â忖™â3¹³šÃjXy½ÎßPa%Ë/®Ôås”^ì$N—®š‡ø;¶?9fA÷~u,ÄÞú7iîñô:Ã6yLîv?öcxüÉl„Ï# b~¬ŸoKK¶òâj;\-®ßQ¢NO·ïñi9r뵝²› oS¶é¨'Yák¼ålèuúŒ_ÖØ•“ –ï=O+ñú™W“õ襺La +•ÕÀPϼø õ:=å\†ÝûjoiûB¾¿ÌtҞ‡ ”ÍÀåX)&ñËà76|fP3X-–÷ëã*'Ií|\WÝ(ÅÒÕô˜\ÜÅQ^1G[íòw«µ¥ú+µžaY4ðßk¯¦·aUìè!6ºÎNQYW›F«MâºáWaä#h¨ò9 U/˜¬¿N؝žÑ~Ž/Ê×ô:¬ÆÉãèx&gĕ®Ðñrl§ s¼¥•³É:kWϯð»&{ +_zÕëa´³z'èó¾žã@vßÂùiꥡ²j1YHþ³ã!޽­÷ÉÖ½de_ ôHöû[Þ7t¿UEë âÛ}%ë[ö|±[œjï7›ïú‘Ÿ}+²«¿ð­_xL|ßzs)˚­˜}L×y¸k½f¿aªñ¸þÇ d«éiä1þ¯ŒJß9÷i%o/,úg'Ñ>é<'}EqÜý’˜‹'cè\àJzÂá ñmè톧ŋø_á1—´Ñ~7K+’£c®€’Õq6 …ì»ÓI­ß[›Â¯¡ËÔþÊ\—³/%½§°Ðt±3ÝâÿWl²SKßûïÄíoIöWQëñWÌûj^ÇöDí¹>–;âÍMá_“zýî°õüý¢ÿýªù:>;¦ü]NËeènâxqºEºÎ~ûmÚ¿Wy‘§z_ÓÜá<}sM^§3¤Êj³Zå†kØò°Õñ¾~Îo'zï ~çãv€{~Såïq\ælRêâá§us~ùVÂðB­ÇµÀ§Ó|c"u×?ܵiã¿ê¯PÐÖv|Ž#_må#.Mü›Ûç×Âk˜g¸¶]¬ÂÏ_±7ò»ÞoËËò=:ftpPí¹Š—_Ó&þ_qEØZ^ùt±U+ðTÝw[²¿˜Ûúv)­†ã÷—kk·;,qgQ«úøXÿ…¬”u6GâÁÛ4c–Àó{Þ2ß×ÏEÓºÙhã±Ü½¨W[… ì¾ù½ÊyÀ&OŒÒùïtӇyš“oƒÐð0¼ý-ý#6 bü¿ÙœÎëöTÊ0^L³'µð^4v\h½7»$ˬØlö0$õgª³5¬Ó(ÇÎëëñ¥Aӝòö›=ó ^_‚g V'µ_º°öw/h2‰pI°²Ù¹fZѕFçÀælú½6Ò^¿]9³îÚøýŽsµõø½ôK=Ý×[…¯Þ¯°ËÍùP‹¾X4ÝÕUô«ÞH´ñΕèsü5trúïh>þ/ˍÀd7=ÛLž™Ú¿j¿Òöwñº}ÿßôEúþF¯ª'ˆ÷/¬Ë×cZìÕý”:²!—àÉwà…Þ2ÈwŒ°ã0§xËYÿ­–#Úíe5<¿#ákGÛR˽{—ÿ>ßXAòM‘’Yöh}¶‘vß[û0>Û¬ÚZˆNÛw +ûÆméþþÛ¾‰æ>*øA²¯kÃH#&gÿº²ëJ¸êfoV^TÏýõeúò­+øõeá»·µÛúßçۇƒG·û{pÿ¥ŠÉ¡aƒ?S@q'x$!b’‡9Œ,ç/í„÷šÓ¡Ð‡÷ö‘ÏÎ/ŒÜpt\±»2Na°¼aôœNn&ý@ÎФ:OeFÞìW…Šyç ×-L*XüÄ^z^+o¨wgÙ&蕊pµÂ +ÒÇÓB’ADždã„îÕ!;Ō1Ô$¬Ú}³H4P/¦6ûÄ]Sç±Xl0ú\w4›æîAÁÚ}ˆ8g<´\vŶ“+[òlº´ÿߊ—l'eæÕ‘ñ\š6~’7á@xbPé_uÒ¾ÍßÄï»°wÒ¤ÊÆøn^YO¸¬[åÁŸŠŸHêãœ{ŒÅfÖ½Û¥Np™ 1¿ê9iÿÚރ¿¹¸íÑé®;t~*º?Ómÿêl9‡gþ±ãó'Zp̌¤ÛE¯´Ìtk/%#ÿ®óâðTן-ï|F(ŒHû‹½ñòäåO—GÁ!‰§§2|¾}ðåÝ‘_yȯÝåT-²Ám®Á~éwô3sŽûlù<ÿ%ÏýÕtœõèùÑí³Š­§ÿ]'+‚¸«rÞ?ß.|uÿüåϚ½ ?ž½ºLTú²×óðhýÿU]&.ÛªT~ÿ„¹â¥lyPHxXü¨/Ö®“ 'ƒFaø?ðUÒhè­j?ÊÖ¤îý#Ó·AR!é+!‰z‡ßZuÏC°eÇçô/„]ØÚÙÎZ¾ZbëäÁ&Í `f~ ùLöðbє»¨ß¸$R©‹¯ÞÝñ>ÁÕÇ:„)a`3È`(RÀvÃÀ ʼ5cU÷ +‚«Tn^ût{bÀdǀ‘¨%U!Ž×%Žòâ~:}dã ¬: +èPUj +äTä{AXôúM²h+X‚²¨+ŸAYt”AY„ō]EŠA͒qã§PWtXñÓÉcµ(`(àuíh7 Ô+ȋî–'nEó æŠý"³¸ÚÔ`¬J;倁lʚ~rÿÝ_÷„üoó÷V Ó:i€Í¬ӗžòªü7Qͺåz3óÄoóÜè:ޭ󒧤*¤o½0õÅc#FxPNu|ç\ؑSÿúq䢧tgE î]æêtæ!%ø(;~¢óžVÐV xˆŽޏÃ%q ð8„™B²ï&sZ|Fòˆ­@Åæ9eÏ\FýïO9nƒÍû&K'£.…› "ïà ÌýBÇôFæå;v§î-B“Qp斻vºl­ß9¯:-zkò+[{è¾®Ø ©¥~qEŠQB%”f ¡0Qæ&ò(oÓ¼5»°´´ )EÖ^²wÚáѳ8vw#HTFŽÞ †ܛ9XÀ‡8³{Ó¡ifL¬¸×ñëwÈ­:zéè ç=kPµ 7(9ôb³þ¾é +s¸±‚ñ9Äëq»ùɑdΑve¡Ivèî»Öh÷òsªIÛ‡ZŽÌ‘÷ãÀ–“üœöˆ±ðZNs 'ùÙìBFéÄñ° Äsß +™Ÿ†³h½1n؍‰y¡Rã¥d–ãxóçåyDOc˜_F÷”ìF¯ ¼ÚŸ2å¥éJjR*Ìú2ú.ú¶Eá>?y«¸Ö¼ÿã7‘Bópq³Ù¹¢&ÙÏã½!5‡™üvØh Ü&„B§êùÑw™ŸbòmÌòÞGQ?BZÂðLҞ˜¼sN “Ç£&*p9cƒ3ǦÜÏY9“cNYäV¢âø7º(n™ãËQ˔ƒ×FµàÞs…«8é§;ÌXÝQ%«6£–·‚6´ŠÓd¡Ý«@ ˛”bçZ>IÎüV!çbè‡v}ꋥìöz¨Ÿ%›“‡`ظ)83ÿmM¾"ð{‹Ç-λS.lÓ’‹ßf¡+ÉK½þ„€ÒcÏGc²ƒòsoâñûßÒµ­Ç±øqxñÃÙGäý#dcr¢ÇQUÏc£_ï-I²¤„¬ð¥úNö=ô6½£å¸«½ÙÜ/è5d,ÜY³Æ”xyXÀ൅²cŠõ#\Ã,fãŒ;f9ǵ¦)t9w©É1øu–¤Îsޱ¬«Cù—ÝÊ9ɛqgõøv½#À2„ô £v“–/Þo†åïoŒ§þóf·Ö­îmz,n^ÝÝ$,™án›ñ[¦µ‡ÀãÏç ´ª‡8vî§v§”<HYïI¢GÉóÏÀ¬Þ’’(Ìkðô*)ëÇ¡å L?dæn0=+؟6¾O†9&°è?Ùb²ñL.í£YvÙ2.„Þ“˜ctÅC—|œx‘Oò“9Ï[¦Æ?¼<•Í&sصz[¦ÚŽË:œ`]^б +J^$Ľð¢y3áŰøÉ·¡x¡âÏ"7Ó<ëX–dl–{/»¾°ìc™RØCÞ¦ÞÄð¥OïOÓÔD-﵍+_ûœÌÎLÂ'2„É&:¢ "¤Hîa2'0™ «€$Dgd ’ É8ãÑUPA@T@!V@RE +€`Tä ¯PG>ÿÿï¹ÌɐÔS«Ú¯mm}íjì.ÆÝ—µuvWVûZºÕØÛv~ü¿€—qvÞÞݍ»[¾»Ë.­²Ë$‘®,ßÉ_“Æ 7ôI}]æ•ÏAâŒàûAÅíîõóևã¢)µ.5ÇÄ]2n©™‚2ÿ¿×1x` +#Ê0rø´­ˆÓ!‰„8é›0c±OÞØehIé6–æ5b4Ûišë%:âl)vš[¢VªùY üšpd'¢åJ”¯|”‡œ¥_×káÕ\iLŸôì¶à¯;›ß|­pSÞïíCߕ¤”lš–p]ö¤­Ž“’¸OæáRã'@)m¾ê¨èbÇY;ª¹i‰† ºP,uSœ˜6>øK÷E„¼W$¢ë(Kíb8µ‡„K÷\ÈKìb8՗)\ב—@@±µÏ…À5^¯z™£û#HEO-«6fê¨pY¥>SP‹K“šÌXs]Ň4ûë/ +Ü£Lݳ·Œï QóÄÚ0žÉ S)™9;&¶¡ƒ7Œ|ÝlM¤‘‡8GPïeG¨qAÜl ŽÜ‰iûä|p<;÷òt +bP”èEHÆC}ØÁ~–UƒÚõ‚H1uðqJ¦í Í.Yš/æWU7¶26ú©»bù²«ï—¤ûϳ¤ÏäôŸÚöôãš)Ò2S i­)â¼%šå¬0ð!ŠÞàFšYÄå©bãS“±ð¥¶UÐ-Zð¦ýt¼42« ·$9·Ö>_r!ݦΆѾ½Èáï{ˆ<ã¹AÏ»^²j+{ô*ÔVáf‡û<5lšqP¿…“NU[&Ÿðgþû&ŸçGZHz]½<Ц“=˜4ch õ´µŠyÁ¯ûNT CN jìÅ,¼»z^2¿'šœWšoKa˜dàal'ë’6Šfév*Î6ÿUS”ui— ÷ èÜæ÷“<•èÃùZêè:{ÈÚæ¶èÑZ„Ÿ|ª4AïÐã¢ÎFˆ.(©ã Ê”&{â¦êÐí=â:9KZU;µÉHÕ£C¸o³p J4õ¹Õ%™LèQÞyæYÊ9çë,øZîtöiËA8gùEæp-’–’¶"èó$ÈϕOå.•Ì@âþ¸8y+C®ˆAB¾ºHèêÒyÕ¼(2Mj˜¾R$gø%œc: L”í´vQ7ô£ž‡Q®¥½=£¼ŸJƎò¸Uޤu i]ÐÈQÞ×FíG{<º=5 ˆàQJ¦¹…+”ä Êêì ”új5Äé'µnäj'2!ÂPë:{QC»Gëâ«ð2qû2qáÆÞÇÛBqn:c§ºÄudlRÚ)Cº'BՆ¸0väcª Ù_ÎJ‡zFÒ¬l-¶uA¹#DŽO|2`6.º-…í|íœsþB¬2„u`šä}treH+ÛIå£M 8P¡,Å£Îûí¡(¥ƒ;vj·ùÎNÜ|N°Çwᘝ Ò[ކ>,è9«4à ÇeíK‚Ï¿}¤ó­+\ù*[;å.`þrîrm­bªZ©è®]÷>³¸,ÿñÜ­­Hsþµ'Oüª{18'«û£ßc^sä×Ç®å§L|Ôêoˆ¼ãž¯}ǰü¸ð©ß~ϯüxþ ¾ö~ ÿ/ÕrÔ>W?„ ¸ƒøôºÿƖý^|+Ãû?­Asý8þm5cƒÐ°åófÀ,ó’­86zÃmëY 1MáÕÛ¯ÙTööæÞ‘m¿òs/ñþ{†ÅáΈˆ>"!tDBøˆ†DD=™›ÁÒm¬cPÚÛ­p¸Œ[íªÜ^&hv­­P6½¤î ÛXցµhƒkSÙɧûR2äڑ—Ãá¦ì¸²mf»y¾_dôók·Í/×­ +÷íù´9× l9ÓVès¡­ð㇑æü– ƒ’I‚ãžÃaÿÁ‰‡>(Ÿñp縌‡>:'Ÿ>Íϟœ‹çÏÌFsçðbnÄߓþ.ìMýØö‘7£Ïнi‹½z&ÿ®&üŸñ}q7ýq5ðä×'ü^šørkãI®Oø¼i5ñ§¶‰î¶EwGù}ÑçÆwDßødߓþ/Ã&ÿÃ&¾€šäÿ‹Ð_@Mzbk“þ.˜šôÇÜ¢v§æb¶§ÃÅíOoµ&ÿxMù?â÷„ß‡\Ò*u¶.qñãÞëÛ°[í™>ÃþY³ÔD…oöëN¨cz<í$‘ö¹ß<égn:¾¦û~•¹I_¯-‰ùj—µ +¯/{ä/ Ñ߅ñüÚɟc_¨å¨~V?²´æÿ×ËÃ/™Åtnöú8ûçæsÞ®wͨáÉ‚ý—+—ú¿Õ_ì²Of"$Þ4ěň•öIþ¹»ã˜Ù¤e M|Û'§4±ßº.ÿ ©­ÂŽáNN¿>ró oÞ°9m@f¶ä³ü~ýp»!þï÷Ê2ç—(ttqÑ!ÇA؛áqpÒb|0„â¸èPãŸðañgˆ@øD>!ƒâÐà|DÄP|FÃ0ø‹‡¯”§«Èþ'äc‚¹ƒÜü)ûþÎËfvë.¿¢îâ7\~ÍMÅÕÖk!мV{­>,–'§òº<&ÖWÒñ.}¯}9¬ïXê°8†FSÓÜ/ä\wþŽÕäùû]'AãºÐ~ùËþ–e¶¯öR¯ú¥<,óGì`a¬­¥5¾Uç-ïÛä/~[YAÕbl¬´÷Û%½ø½¥×ÜÇ¡´Ë`uu˜Õ”W¾JyG“ÆÝ?…ÌûC¼ÇZë‹$Æ5~9s|eÍ¡—6¦\Ÿí49é?Ú='Ù?Ú4zwŸí çøzŸAqËñ¿†½Æ¦Cåâ?v§§Ì'¦Èjð~ä6g^—ýuqQÑþ„eò‡aóçùÎÏ®òå¿eғWèÍÞs=m>‚/éÙq¸ e>_†r^õÝdu‘¼oS¢ë8Îîx[…u¾SG”ÙLÝ#s¾þOäì¿]¶ÕÖ»Õã½oÔG¾òçü<Vs&ãʒ{‹´víöëŠéœÌä;Õ ·læ×‹­ÔQg©½þ§Óº ›b}o}Õ`»Ì­ËsôÝx.ûÎÕîßi’¬Öcgd*»GÖlÿÿàæöÁàÇêg­'Îý\@~¦xûàk~êþ@¯·àèh[hd42ÚSEþ†þàqÍo§aŽí†Ã—6v0o¥!0É5{Bk†Ô㬭½7¼{þŠ'q3¨ý–~þÑú»u¬8èÿ²Ã¤ÿ½ž>¢ ¶ipýêÙÿKX¡•Œ]§†…˜Ù»›½æ5@^a;NþÉZBD:Û9@S4—äJ§û€K;èJ‚]‡|^Žä~)í6¥éWk†Älב§QyxfƒÃ{CTe]q{` {¿ ÍÄ*×tžÙn2‘n`{ŸÑU9;5Ù¤™Ùö!#T´SÁ švn*¼ñ™>\wìBó;&Ïn4ºE´’©eË @Y¶ëêFâs³Å¥I4ÈWnk¸dÈY_Å¥þw¤7)ۃ tvœÛ'iãíŽÓ®p˜P¹Švßg¼nŽ£†’:? “iR¼µäh¤vÐ:M¼Í"öôµNi0 €ÖÙé;V$ê K~ý…¥Ø %ÛZ9 ˆ¼K2´¹nEl‹Oh¦þ/䄀ÿ>¿O¡vž$u6н}»OÙ'^úeëߌ{õ/z–bG”EKŠÕ¨Ð:ó°¸–ôHÒv«ÛÑä;'_̍5Vôަ ;5ú=Õ¼†ØŠ†î0»}­—kl·D'cþ//‚ævĘÚ×ÕyB½žh¯*/@Wš +†¾[Ív<íì>S͊ +-oö~ǝïû^u5ç]±þO;ѱü^w)ôÿD-ÛûžÏaö¼ûìyùˆ/­çý>?üžïôíyÔ9¯;ç!üžw¿Cñyߏý½®‰êIÝݧ„däFæ–l?¸L2`,àD©nû;6ù© °R‡y‘'Yē±i`’¤È/aî“ gsIÚÚ\ÑÎC‘ã“‚o ƒ¬i‚åv.*q¼oÓÅò¼MÜ!ø=­Néw.(Êr‚m՚æë¬î^8`À"EëÔÕñlA·ëA{æRëÌe@e¿e&lYM†Ãa2æ|r¢M›® „i¶Îž: FM|+·Áˆ–`—àÈ6ߍ¾aOQ>?Þ8¤ûa#ö„"뤟N¨1ßÑU£”Ë›ï$?s¸²à þ‘?úRÛ¤jàJ´F°ŸK€@{Â$/uøÅµ “¯Ã­­PRYuµ¶à,º[Z5®ëks¤õˆÐÃk$Gׯ‰[[Å(Fmnûˆ¨þ՗mº¼C2 ©ÜÉ"sLìâOð†à/}l6­çˆ_øB¹ÛêK_A€]՛Ò.jÍ‚%¡$Çn’{\W@·×,¶Gþkd9kYþ#ÿÛZϜ?ó­gž=jÖy³Ö­gíÏå\ÿ±`Ûæ,ˆn×ÿß6¦ý¢ãš_¡#¹Kÿ&¨lÿ k zñé®·ÌßՉkÛt]7ÿ¨âî߅ösGN;3îÕ¥o²¾ËÏâØ·¨„;‰¡„û'ßû÷?Yã°»³Ù:Âë%9zë%9zíæëóëíþä7¥7Ê6ÿTl_Uºqþ˜i\'øPé Üõ  +>à;® ¸i[h?º€ 2íÜÜn=y¸?Ç +³› +³ýô`5Ö(Ûڙ#\Lñ„‡¿ŠÈq1™æM Am:2ÒëZ=±_¨Zêh#0ŒÆÕ.à"s# tIQ×Ò@Ê NJȡæúhgxË=8Lo–š×!“d[rOÀ 9¡_Š&¼ 5Bµ‘®>ñ¯UŒ ½Ê4ƒ‰¡Þ:FϨ‹wC®d¨'ºÕê¢"ªht Š´®«ô–5–bѵ‹d8V¬a{Z]ŠØR¸q[%dNÑ¡íx> ù錾ôÐE™Õ²<’w¬@?+ŽU|ùCBÄ£:È  ,=Ëb ÕÀÂsˁ\¹&i'J¼:Ç8y%ǙsI~B7¨VÕ$ånëà&Þíksb:Š€w«˜3×àCÇ:BtUNí€ôiz%}JYq²Á€w¸™d M0êzŒÇe­ *‚ÀgT9ÓÉn6öTh{PE²q|£dßvk&ûÆ¿PËà„b¥á€¤FÎÉÅù"’µÚ Þd¦’_±R0»Û™7¹@Þ¿²€ê>àN˜(€Å‹ 'úSE²ÑTNû)·¿XPŠž®{Òr›vñ¢%–ÕÎhÜSõ.$¥“µ秃—6Ó|jÏwéÞcKcõ£ÉH†¿ÏPGÔWå_/ å“ÈÕ¡¸'_¸ª’¶\Ó%^JUʼ¶6r¬=( <؝՗@¤]û‰ª¦ôq? ³Asà·ï!„5±Ö².¸Øn˜‘Ê‘ÐÅ^èÌ¿O”t3÷†åˆÝÚárÄ(KÜ48â”AЍ6Ê4^b£[§(D D|ŠšèG/¨ ŽÀO¾[i¡ò0?ý1ázZVn^у氤ç¸eüôGw‡’Ðo?Ì`[uz@ò€×€R ×`ƒ{ê‰Â`o¯nìàá«T¿+‡€êŒŒ HzA@*Ÿ² {–#W=|L̏³<ÐmyðitóM¦Ø$¾^à°ÚZH"Š6Ѐ¨›l¨4WAªnÈ!‡°ßpß}°˜(æ¸gr¤—Ž/‚ì+÷yaI»á›i0Õp¯>=ÓåèBhRI«ûßᶛ•Q¡u7åuÌZûb£¬!АX9bº!Ä Yü'ØÃ`ٙ4«ŽTüy)í¤žÐ×¾+‚(t‡ Ö¶l@˶Ú +—bC0rÃXÂ֑sçGÃ.UÑÆJáDÝKÑe(¹©¨ÐM;x€£Oî2Ž2l¼y[c¼zP½j8»ÎöÇyþ"ï8åȍû;ç õ‰´ˆã`íeWjïW¤Šñƒ‡‡Œq{k ŒŸuÈ0•ÀÇ0Â÷µ@õJ2Ë[r$@rØ¥¡ŽWQ´ki/CÜO-•$UÔ0uŒ²G¾Ò—“Æÿ¡ö —ó>Á²ø~ –¿|Ü-/úþß®øëXØØfŸ7Û ¸Ó›îÊIý”töQíY,SöQôÿî—Ü-w€›_Íh'ôe0Ÿl2ÐgI/hM2ÙsN:Ë}Ážëd¯d2JzîËÈÐ ”û+IÇçL`=‘ÿüÁòóaFO_y¾7éƒåìþôÙbý½Y(ýý1{Ÿ7Mø`ùz{™55EMßæ5_t”z|ã›W>ûæÉGÅ×÷^±ãƒù‡ßóÁòæàmÍ÷ÍÁòÀ¢W+Wïò’Þ斦ë³p5Öî)jV)}Ö°o×Ü#ï(7yõô½-I€Ÿ½+•1ØóŽÐ®žaǯ]Â7‡º–­M;ׯt®ikýØû áZÁ)¬ÒT3 &äe¿RíÐ Ž{#„¢Ä璩<ç˜!R[ØPgòL› ›Ö+%Mƒ—’l@—Òž/ðß×q§=ì´»´â¾8 š4ÖrD×Y¨X éÚ)#>¨$D¦êè1>ø&ࣔý¸Cá¦¬­ÿÆF1Ù°Aò5{]9ð0éhGÃÖ!’›{yeEG:‘ÜOc ‚ë#ªÝAÎE)àە°@^yÊq;aIkÁ2›`#°q“lt¬ˆ»õ 9êp’ ÷, ¢—¨Ez·EØ«£Îě­ë²x®•ÄôrŸA@ß9ÖÔÕܞ䤣AÈ=ÐFˆ+öè1ǞE•¥w3¨)rŒ(ù?êÕÓ +ãÏaíú8­ÁFu&hK‚‡Êq³¢]¢ ’v`‰1ÚØ3bžÔ GÒPDÆKà ‡‹„u_ܰ}2›BN‹q<äÙr#×È©yW·$òŸ +HÉΓ¶ê°EÀg䎨ÇÜÁ ÛVéÕïê1|pïáXSçk§J–ÂM, ·ÃÓ頇 8z §’–ÊCѦC‹§ N3š¦_ž6b¥ó¨0¶äte8*aÅ#?kæéÕàánŠèÜ0@—Ï7»Õo`kìç”Ø(¼1Ðoé“À ÒRzò\À¦ñ(â8 +›á&¯N>Ιÿ25]ÃE|yÓ¨*¶‡GéØ=ÓRe‹¹ÎK·¼l½#ÎG)¶<»6HäÁ8,S,Š9O<²b3„õYNÀIº$7„äiòՋÕñÿ†HDTö ÈOnk²K1T ”€)¤UŠ(^¼Í b‘)ŸéN!àÓ«‚£,ÄN¸QÒ{’o±€Øfò§ªØe[^b-3ªuou¡N´ÿþ¥ô‚jy’tŒ*uu5Í&dv(å;á·øó½8$²Ôl¤ÔÖp¢˜À¤¢¨Ê•˜©Û‘‹Éqà +ž –»ôO9\v³I÷ „ï$YÉâ!a™Ô„в8KŽˑÉûÛÛiÄþЍ&OŒd¾²À».^šèËÔ¥^Nf®^’Nr„œàåç3ßV/uúòö¾N^Ìã]$ÈçÕ~&¨îãm‹ËeÙ¦UÏz\1Ø8nü¹x çÒÈå(•Ëê¬rùãCí3«Q/º_·/ªŸt:+e갆&ÂÚ臚#&ñÀ1Ö}(O +K^|*bá ¾.^ÔñƒÙlBÙ{Kñ J^¼E)ÍÉ8Å3墵ú |q»’ďæPBîKԝIîn€©Ù¬tù‚r& ~5ßhÏ4¯òþwà‹Xèõ§i¹Ê=ëÇÔ9b0©ñ¨­p)éy5ꛅsˆ y7]PúÃ=.á¡qQe:€æ=pÀZëºËûka»fÁKQß1lŠˆFíÙ”J£ÝêDO¡CÞ§=bŒŸÝ­ýO(=©Ôªú?9c4ÒӞ\ µWW{–d¯ƒu¬•fp— àU +½lð´…Áî:¢3 4|=ËH+Ïw¥§ö›ù¬àÎÈéu[“UpžéÔi$œ&܌/”{쫁8óËàü³ +,_6ää\<ê¾cN÷(:ƃ¸À/Fˆkriv#EóK¯&–ðçÍ·©©,5…H[œî…få43Z“Í\°È &Ûeˆ2O_Xl1„6ºâ»Ë‰÷· ¼<è÷ʊ-Ðdݲ'ÞàQ|W^/)ç*ÌL8Œ‹Q‚Ï¥Íé§zQÊJÓ©†—*N ±+‘P¢érÑ _@v1yÔp€„üžö’0²°9Bð7`îY?¾}ìiZ±LµfµI—ÌBF<¡3 +ÿD.bFkƐ +ýFP¹"¹«_ Ze1ꃟŒ÷¾eŒ–ÎäµUfò€RºãÊ .5˜‚¡hlõH­€üÄ@¬½òà?6°& |ô~ξöÇ_øc–'B°‚úR譄´jã…ÍsÌl;ø<»§ÔºMs9þW–×CcR +}Z¾`O£•ôÕ ƒãÔ©Z¬>õyø\ïÎT%¤˜[Ë(ç//kܼ¼ÙŸùmëÊ $$÷ZO¬ùëé¶ÄfÌ\bÕï|ZÅr1)7DŽÛ°j‘&„æ&‚ ;+!<ÅIά˜Õ%ú²ØäC¯rw“ASUò%í¼V4K¿x¡æM 1Ʌc¯@¯”ÈØ8>!NEüÚ!/ü›ÓWNH)ïßÇTÑ+­°Ì톘¢Ø¤S`ZXçFP' #÷é[q ébŸX›²ïqþ`‰óªDE §pzt’Ç +—OsìRN·…$ɀ +ÌV’q’¾`úš§^HJÉ·=]¿#Ë.ÝÁvë•Û³7Ð\…+`ªÒ§à`’úÐ Ê'³ÀÖIgãéÏa +;†æ•òxº3Õ̝…2$(\ŽQ·K€2 ûº3ßâøÍv9¢Ì—{ޔ4*À%&O(¢R2pö擯Ž}ЁÊMúß{£}-ʞâ4ý¦Œñº7Þ~Çæ²²¸¯€;Ž ÊàDØ54%~­T=ÄlÑóÂá1ÏÜ& ÀOšÇ‹ËGóV; ãV)ßFÀZSCâó(‡<Õ?\ÿ³Ï ŸÁ?súrpb } P‰q¼ E¬bÇlý6x–,Töå‹Aœt]_Ÿ#F¦&×`1-fmäB ÚßyЋjÔNø\I‚ŒTkWið]pê@CG+à–Ñ# $sž–pÔ' ¾´)Ïa¬7vº?Ó%ßµ(­¤ö\õ(%6àœŠaM®vø{}tõ¦T.Õ^à\Ôõ2¥”’ªO7D¬^*ô J^N¤) +9>Ô¢‹ÍÉ3酸fÇ8®äµ©]Xdµì´G¾¸˜*‹oÀ•€äÐ^âWÆíª›!ø·rº&¿*ü0[ÍØƒx|e;™S(X[e'$„Hٚ¶h!'¦Åþw¶‡†€vÚ¡g©µª3£¶õ¾Yújð…ðY+_Èñ·lᆠŠÜ9Æ +WàYbÓö +S…|R“ݧŕ œÄ"îHCÙÇ<ðx mÝIeÁê _" ¯÷ÐáV>êÚÒVêÖ{ÙÂ=íÏ4l߈¯{áÌê´SaL µ|@hâ–MLÞ*" +a,ar» 6«Ùˆ ¼N~ ‚eäKz9çAQÕθ ø2.(8èOA‡Hå9æÎZüS~µð_Ûh¶‰'½²mÒ¤ð¯ÙØçe£®¢Û/'’`6p¶\C~BLôh¸¥óz4RZûC*nCva¿ˆq„‚Ço¨º§4#Žw/r*|-£‘ÊçÍ@jQ¨­ = æ¶Q§ \ž|ºÓ‚‘#²VÙ4ßSy q:q݃ñ­¨KxJå7„r—LˆB»¢A)KAÅ`aŸqn«qw«3Žóœ¡IÚòA!í×ìÁ¡CˆëٮٍüµÜk!R|„•.³AÖtO]Y)Äv\XšÖޅ>s[5êa¯Fs"‹(ušޖ­ØrÞ9»ÞècӎÐEÍz0q²v[òóÖá*Ÿ«¥YÖÀ>eâˆóY<0¶o0ðDôêgÂ8½}ic~†FzðÝÇrѝ¸GQòqÊðÝøÑ[ËᤗŒ_ '% à6sÊ9>(oG$ n!™Œ¡'®Ke½R£Šb+У]½£š<ž¹jüBÈ —ë¼f]pìûù}Åõõôpê´8Öò«÷†m…žf‘‡^«<?"LË<„ âæ‹õµ¡Ì•RL`çsƒ¤H¹ÏQ ýbÌж^Ôê´§«ÂmTòFS±‚ˆhºÆ“²·Ì̓$$:A˜°B ¬5ž`¬† +ça˜Èd ¤A1ˆ +¬3@IY“§DU[T[ëço­¶Òžñ Ь€’@h ‰P_+ÜpR£ Ÿÿ~ýÿ½îB‘®µ·}¿}~÷xÄÞý»¼}ào x{ÁÙ6¶É$rE½Í‰5Où Þ«˜È«uk¦]˜„GóiDÎÓ þÉŒ‚Á|€"|®çáÿÁ⒞,xŽ·FìrÐ*p‚Î'Ý~D˺ÙÞ-tn1#^)ׅ¦ºx·³Õ‡+"YŽ/ÿ‘DA²H³„ÓIuìÜÑúd»Å¾_àLV áÄ­v#¾óg#x)TˆÔ®Ä}/8X ýXH±צeŽ (ãÂóf~rb¿æË¡*yå9Cِɕkœ‘apõ7Í<Àúdgÿ¢ µÄ×k˜³µÊ’kˆøĆ]˓æž_ñl³þ1 +Vø È®Ózç™ÍöƒiÏ»PK;þfè‘ᯗÿ,Â;pèò÷£@¿hpµ’7ezsâFӺǿ„9 oHåú›ª'1Ù±RðҀjÈþ;2ӈRW7o;ÿ>Þýôöä#߈…+W æ†@•DSu8øF¶;«uPh®)¨¬¦:<ÞX”b§ší—'XaœrÇZ­Ì¢‚_Ü< uW›nÒCW›pÒïC›˜ ±;̳¹0t¨³¹Au.ðî̝Wå>Ð úGßúýå~ßö÷ s݈hd˜S€bô:žRÞÈQüg‡Qǟâíhû©²ŠÕOˆíR74W¶ÕíåèžÍÑC–K•d•]»š¯ˆ>FÇMí( béOj†¯ð»Q92¶[Já e½M,‘8?9Y~ ùYxȸväRï,*ì4¼¢ 1–\u+^Ë­ç†B¤®W®`·â¬ï„tÛuñ EY$ÔðSb–­ ‡eBœ. †}lâç@C¥OÞülÐ jPkÃ¬q=ÞûµTû-¾¤'Îêו{¶‹HÕYpÒ_G6i%"&å£J6È֎†ÓQ×èUHäÐe8‹»Hä2AÖ);…Ü|=øì„tÀ77MOC°GYùEgc’ÊZÀL'ÌÞ7?ô> ©_¤—Ìó‰ÄØ5Õ´â\HMq1IáftRÀ³)»Úv…™ÂæÌÆ:cf1À11‰È`0$_ÿ ?j4–ÌÊC’,†Êʍ—ŒààM°$…’Î5Џ‚ÖB ¦lŸ@Rgö +”ç‘¥ +^ö½‚c‘’ÅïÞGΛÚé<¦^wXš +ïb\5…To–ÐÓÔ¹45úükFŠâ;CCEÇø чª»0æù…,öŒÐ¥ýr¢D±-…ÔTŠåÝÂåîƒk ‘Úwm—`è€Mg4cÞYáÝÍÃü†á¬üކ;­Ks1?g·-– +)«Ã‚0 «Î'Dš— ÞT〻ëXÝAÛo+2ø"Ø´*a°Af~x‡n³ÊÍz/¾e¿9„ýÐ y9]ÖcÊ@lê••á²]ˆí±88£òJXºƒ®AuAæH£,Úø}8„ Û¯ØtÖ/pÁ‘¤ý*¦åm”)¤¢á¨ +Â˜Š#¦ÄÙùjlMO‘%ƒwc¢Š 3h þG.ÄÚ~Ȇ¿t⚤ºÉ€ºÁ½9',¹ ‡s‘“¯M9›Üÿ^y¯3÷p1ΘD¹Ð‘ä§²´ÀH±è]þ¢ óî.˜ÿ–Víøè\¬?öuVVýþ:vVßøèÛ+`1w­ØBìCi†âÂA·‘ïáÀ}.öHo¤QZBëÃE1øìPž-(!Za°æDŒÜhÞî¶Ê‡Se$5ÈÔ qˆ]|—œ SíÚ÷ðàb€ÑªH؆rµO‰m/T{ +·3fìKn'+ƒ½Á‹‚”hä>x.Ÿþ0V‚˜ž1Ûrzé®ýÌÏB!òLýÅ*³x}PÃ"zŸ¡¿_sœwý›]qð,›gÈØìŸ»ö3]1¿çêk ½£˜J0R‘d;|YÞ·2Œˆßë4‚÷ŽY,ÑeÙÉV×_ȆSdq€Rô)m¼v‡#¶4ln/b·Æ§óʍr{ð×&Û ÌH­ñ\EITäuËj­ø –þ(Ѝ—­{Úð66 ¨.=q¢!å\}ï…¬f~°{Ï^2ý-y´þSê`¦(ˆxe a”1óÊÄâTiŃ敏[½þ  è=¿±L§Èû©Î|ɐÁMX)xW’CBÅrüû~‰ÄÛ!ÙÞñ:ê@C=܂Ià‰phâ33˜R¦ü|*š§ˆe7*"µSáNA z9ê1¡¥ +˜•”[£$Fä>Š¥’×r¡Ñ‚œœ^ º YòÎósøt'¡Eò•U› +òîÖ÷苸 Öïaá±™÷îø9™ŸD&Æ¢áZŁ9Ao’†H¦íjÑÛ"o[JWx¶ƒ©.„:âÊ0SW6Þ‹-ª“݆âsRwÖ%«Uºê)-\J¦yB õËNÑ3åMÜsáÜ6·['BËn%:EÛ¾¬‘ ¥FÆùÜÇ HWLÍL] Iï¦}´6Q”_Gò -‡´ZÀ6Ö¨Q]îöZɵÄI£=ž"¸ïyÓW€˜Æü¦Ó |ðµWXOï†PÊezÐÐ|®;1®B5¼b™ ¦¹JO¨ë† +[ò“–‡êzÀ;-¸Ài™_5³ü7HfpCGpÑñ¦KŽ˜ñ lMr>´&Ǖ*¦d\¡`1 tJL›â +¥¾®”eãéÀ«ÊhPaÖшσ¥ÛŸ=Lt|áEtë¿Ò”kñ‰ÇÁÿúRJ´¦Ê1 +¾Ž;-,•$´ã֒•ËY;Œ‚è}iæí2) )t7¥X®À[•nÁncYÐ ³:§~ÝèA¦(ÙH mT ¹»YìÙ;­.|„Û\=Ÿø^¶øÕõ ¯0ݑ%¢«JN× Š[…@Tøü^ ¸Ñ_N^TbÜ*˜0Ä*F`ŒÔÎmö I?ðîrAÝ%ñ§Ó¦ç +<ªj!îwEܤ¦Íj 7÷¬$ C煖¡ß4ˆŸã>Á ö.U0+±Ã¤*ĎïqÇð™um|{àUÿ“Áqíó×c1ĺÄãÁÜyƒ|þX‹6üI5« IlÞòµ8Ôø†l¡À®¬ðZô«fžH'dJ ¹8|`µC];oÄö LûA”¿: q k#¸ÝÖ.V i+ÒvZþ ÓcŽvnµ9°b§@¤f)Êѯ1x"Öd?vÀrÃ÷k­¬v+ï”q®Ñ„&VFÇÚKÒnºy¤µ@8žå§Ñ”x°dM|±ÇðOÇ ¹ëèd)²W$iO¾yý’5ocÐÆÊ•f¬©ÞØD•ÐÔcZÛ9ýøcûí²¦nº dyÃ}öÚÕݰrÂòŽïe +a8½m™½hîBBø#÷Ùñ\ð·ØtBÃé„YÔ SïÏ`Ó"”Ξ‘a*5Zr«¹I"̵qF[î0˜ØQoÿ€=6ܹtº2×þçèœxÆÿ£bêû£b×Ml8…3ëÄ=À°Í/ Žb ư©'çJ¬Ø(ìU ugUñª¼3+Þç°µÏp¹³F8’U|b#w%è¸%×ïÏ Â†^‰TÅâJzÅÔ*8VJ?kWR¥°©ã͛øª¥°™#…õj±R©N‚¸ƒ%ï1ç0xD©}CÂy_ò$8­JXO]ÝP;‡yþŸ.¨´ï_í置ꥬÍúpcëzoFÆÏ܏­qóè‚ {°nҐZßÑ3f=q‡ÑMÄÑ ;?&^%\bDÉ2™â‡2+ŽHöîTëðçDZÓ膞a½ç®&/O´/¯DÂAsç>$©­WJçYu ºƒá2ÑÍSõ:e7ԈØV_{ZH¯r4ôÍ¿{ø— ª–ôGsT½‹˜žìBœÍoLY‘ê–ëg ú{]Ö&¤Ë“{çµÝÔ±ºnê]8¸¤ øïf âßÛ¢oÔ:N±q³8Æ-áÆ)ÀÛ{ñIº½7LtšÔÊ{éz¥º +‚öfY1 U›  +ÀNPj7¬+ +Aé³.aâ¦,×·»Ôà4˨,/Ò7Ó÷zñRc¤#(‚WvD–äàřëMÓ>9zv8«öƒà‘¿7üÒb¸îE¬®+Ì[zD4h .#M(ã^ƒJl¾õA$b°/ni”µ_3Yc¨ÀÉê-ÔK±Ô/Ì%èàï%n€ÕŽâéµ3f9 w—²7wp-UÛè«ÅÅ@þ'¬Û«yàô)Z=½ÌL ¶@@„‘ƒ;F Ê5¾IO}æEôÂ|ÀWð¸ð¢¯2Q¿žVe{ß‚¹l=Ý*ýÑð²dUv8oUJ\…ù5 Íl# UªMv éீ¤¸£@ÅÕþ¼^—õŤlR‘ŒC7ˆ¬Ùœ6’ÂÁ5uO0“C¹µMû5Ãý´Q‡Æ‡9&-ä,-Ò›îêF;ê~¥ÍØÏ:~TQï‹ôÇOd"ÙóŒåqèzZÿV{Älxã…`ŽÚZJÆ2B +áÍ®¾ôT\ç’b‹ÕÅú* “§!g' Ô­ãýöRê½þ¨þ™CÔØt‚’+{\.“³®_ЛÞ3éC.h °ûîÒD’}éƒW®êÎXÅpYÁÂà8!Þì/? Á)&ÉíŒöuWMûÓJ[‡øË=ǍfÒºUï\[è¶[sñŽðˬÒ2%zS݃tyéì||,UÜ8Ö³ø–\•¸½!ڕ¶PºPr¬p7=ÈIQäôÄIÿcÂÀ»Տ27´x€2“º±º×mV·Â{¯îÍ/L$J%Ûb\׍ǮҨóEC˾á°ÓxЩÎ1ùM‹@†‘ÔÐn–éGÓNýò» œ1á¨âC_Ô¥+± _æõ²tGÅO,ž«*db‚¬éî41¶õ;Õ¾ÈÉtÃÄyå$òÑ:C‰²,𠭝?Äÿª­4ÔÚsUk-å‘õß"qj/×<¯ù ú›HqC/­^­?{%ÈúZ’o³ìˆSKVg·Îš2ÈÎ3¿‡îÜæÀ|úé¿?ácÁ@Ïxâ»(%l¾‡cÊ=ݏ$–7ôëµ\÷õÕV©óÚª_…•ŠÉÅfrÿ y©¢þeÈqâÌ¡ZƒK‘¬¯é-ÛÎg(ü«SôlhW.ô„õâÏÊÿ`ó½q±èÌÆVîG•Š!6ßr½r}¥®2P‘^'l·Î#PfЈÄiØÑ ÜîǕŠ¢!®•~æ×þ%ùx’Þ`.Q…®8 ë€%‚_ñANëk +åux*A"ñÛ5ß.©K«®— +åpµt“OÎép·,aL}! ޾ÒáúhU*—´ªPÓ7â—_#¼[ðôcK´#׎]ÏH|rÐ(U¿ž"…ˆA5Œ¥Q×­à.¾«y;¼…Ñ‚ÎimÖø„aqãøE¼)#Ž ²¹?¯Tôú[0 +Ö .¿%à3eåïj®Wá^Q±Ú¦ïy +nNj¢º³ÏLJ*“6‰óø³6/¢)/Óa¢HЮ¿wŸ0Á­úêé®J ¾¡’6#$åUhu]‹Ì'Ñ  3µènrÂÝû¤lvB9O€ÿ_܃øÑxF-ßfㅷn¿_5HýM·«Ê¾óPvÖ;ŽªnÈo[è/›~è.õЦ Å•«Zùû½œçpsMôH¸$ ;ß#¢ƒä8cx=hfa2†—ù©|ñÕ|)¸{]ÚÏ?7æ–Yåvb{»¬ÞãØÿS¬¹­{VíÕXñ¤@Z"õ§ûêÄ¥ïŸÕzµóª‡…WEιµugþ—Ë×ߌÉ_S+xc©7OÛýÝ;–z¥Ý/_5¨ Ò*ãè£ä"g[´…¡iîq +f[‘³T5 i”õ†‡Q®Ç4«4Ð-¾î{•‚|€Ûà Ò«N&¸Ü +Û(z~^æ?bP£½g™‘cßî.P’ÄÜY¸klÃŒèG¯¤mYd#™ìÖñ5³‹MÈ, +Ø(gé;ƒØÃSqZô%báõ¤äMüįt;ÓK6ò¾4GMWOÀcN£½B˜~"÷ä{j¯ŽV(bYA\¨8Üpø‚šÝ*3OõÖ╘Æa”o²7÷“¨Ã(÷dÝ*6ïáùrn#x|ú´’'Ãaì¦aÝÍû $ˆ?³¡âu¯Â€ÔND¶fõó&nj{u«Ÿ4ʇa](þ,ÜðÖÌ|8­Aþ¢‚8xÒ+ +¢[Ê÷ .‘ö,X/¾õ#€è;³ÏuÉњ/y®°§õËï_ŸxõG®Ú½wIoiJNM×rÜ¨Ôßrð¬ D N&ìݵV÷©²úP3Þ>ÍáÇN(Ëc>FÆÞ +ñ ÷ó‹“2èµ;葿·éOy£SÞAŸÐcÖ'”ä GwLR`šJ{ ؝ë:Šg¹ïPi¬Da@“À»a…árŸC½«ÏÑ´…Õ›årÕ~ŸÂ;©ç¥ òu_®€ýÞ2U{ôV<{]X;¸¸Î[#I(ðqë{´±sǑbœ +`34IV.%¹Íèç!Mã9fƫ㌱ðE„Äg»AŒDØ~¹\CÁ\fôރ¯&_ ]ÿh…!ƒ=-3olЃlIí€trFÃnõYŠtƒ÷»³ïôåèø12Qi¥è[ ŒºÑ¤Ï¿ -cUl~üC~â™Àf˜Á~ò䣨=SøœÖβـòÇ4t¯þá^‚p9¹Ìô‘¼Gy3¼†(®?9v]`œ}/ÃÜ[Š"Ç'X¿á¯t¸º^®mJù +/ã»ä?œè·ù)” +f‹ÁÛRÔò$ˆ ű(î ³æ'(?ÚÞ°O³3¢ƒ+®'ž€°\ðHÌû¶3„^£cŝ¡á*ŸÐ$ã§$UÞûpA郥ƒGvF³T2H )‰äD?^vîØµvE^u„kG¡‰!Ê1åg"²z ôˆê ñàW쯿’ >2×$ºJ ø9ðS•¶W¶M99œd$ùïBÈ·µ¶¨>dà”-N¼¼°>f¼Ÿ3¾‘ jx*“`¹QD×>~ï†gÔ#Nâe¼!}MȔn²yf_S ß j¸ù–¸™¦U9N/] êÇ¡áŠn"eËd#†ía4âA9Áõf)œô7’˜°qt/ÖË¡]® мcº]fŒçՌ¹ö›þŽ}éL}Ž}¢çä¹÷9™û\ûy–!à·’çׯnD‚3†î\ï¦';¶ª;òK·é;v\ïÝބD:à½Õ.çßTD(?¤D6l`Œj8íª™¾ôᲜ´J¨×•ÎŽè©gI›–Kª):ÙÁϐsµLÒ—ƒtŠš šÏ¼@ù +²®±5$ÕÓS’Ò›Ðßϖ"”µq×µs–n<‡’_SÇ-(e› ìõR=0B·»ZisjŸ!÷ …ç1“GÛ ¶Çµ¼7<ˆ]@YCgAø2W|0]¾'Ì7—ÛF2.úñš…Læà̳.ëH3ö+ÙÕý5¨vKpÑ\º+%´Q*’eyÑFRˆ[þˆöºbøi©D¹Õ´î‰Y¸>#¢ëȶå-àŸøÃþ¹o˜m‚rº»&ÇÓ&n÷yžpyÛ¥¼±ÒH9T¹ UMø;¶WÆJ’M,‡ÚeSï(wØ$zHK ßÃ.ÖBw¸lR _.@<¤ùê ¶Ç.ke¹­„áûkhዴ,µÝƒ «8™¥…°Ä×kqÝ “ŒRçF7 ªwhÃa×®¨ƒ|”OyŸH9eZ5i¶YåwtÔ »5œ×aÛW¶M·Ðq!ýÏ Åá_ W—-äx·)­9`@Ôl)[½ þ¢hW^ûf#tC¿o„‚–ü$yK}t@_‹@R•ËÕœG0XBÊ?ÐÁ-@~_Z×îú>‘áŽüôzñ .҉¿Ð%d¯H.!ÂÍ ÖÄ;î1c7úýüDº?àOÝgÜᄆçøçÇ΅š~fžf89™¹›5ù—fy˜æ$ngª¿3‡yc™Å‚îTx~;€PοKl],ṟª±2 CÜ Wxà6Î¯Õþ6|x#p†úüÍ<Ç¡ÌÕñÔAë‰D¼Êè¹?PÐ`ÎôÏ- ¾Ù(s)Y¬>Žª æ®´FüFÆòEîêóŽv„×l7ó¾@z_[Uç +Hqì¯qéHò˙es’2VÒÊà_GÞ Ô| hÒ¸oó0E8 +þd³Û¸ š•ÂðHD8¶—݆ˆh/K›•Œ–7ÇàrÏ¥bÏG +‡U×ð‚uÁeFŽás^°!nÏ-‹Ý˜„.Vàð…< Á·Æ§¸b|ÉJêó“È¥‚KYÂqEø'¡¸õ% + <˜ K{‰„ÕÅÍN™”=Ÿ'¹‚CqGGRã¿ßUïŸ|¸ßÄs^Úrnö4—pn÷`nàà4 à4Žn[¿ˆÃwñ¹ 7u]ãV —4êÌ?y¾Eɟ~h·¶[ãHÛՄV!`‡ç¢™Áù»ŒXê3qùÝF6=çQMï¨ÅG—Ô>)¨ÄÇk¨zª’êòoMíAׯÉiÍ‚ š‚àÛ-pi¨«Àf@ÙVYC»›“¦-+\z|òýϱÇ­§y­ØBêÃ|2`㟉LJ þT¡ +ëøEl?Ã~'ƒðá“ÊʞÁÄÆožn׈/ùMhµ¼5°˜S€ë éuÂé`f&҃é +K8n3ðe”AÁ›4PgÛ°qz& ³ñ|Pv¹Ž8Ã|?ú¬™¿ü›v?ãÏàیJé‘l'?e  Å|_Ããžzì£ÕÂ7ƒƒ7âØøYYÃñÑð#ǽñZ. oÇj. r=†vÜ¥“UÒ¡þÌ HëÅ7Qo÷!ïÀ]x¦^ú^Ü&SÎÊkž‹^|oßÅ°ÒØ*[×¢K#!ËÕèD au´}?”nŒ-}&bý^’½íù +,:¹Ã¯ö{öô´y‹ó˜HÇß ‘ö܁£žëß`„(óØS¦’+s–bh Y¼©ËÖ´9À34Ôöd{}¼“dl0íR³÷œ¿Êl†n^ @·î'ž oñ@Sw +v‘ŽÀ sCH?*CØ/³6UK¹AX&Ì¡¡w®Í_Mj©dl^öm`ÅoٍºÃ\ë Á{<à'W”ü† ÂcßQÚ/‘aQX”\Wƒ4ùÆ f06œBÝï*%q )ûnýN9í 5¼`4$¦x º64Ý6/¯–|í­“Êl!!©N <’ß0/9ȧ•5™wM ‚d¿·n²6;a¼û`9ìøÉöû‡A—‰ªÞl)±«B8iǽ›Ö{Ù3éø#;mٖÓî_ž#\‰¬ÏÏü9n'S‘Á’·ž‘Íڙì9cUGÀ4ð¦jr¤‚üP8ÊeF­½öï(øé+>ûî¸ sõÂ~Ù`äõæ ù}uÊEþùÀy +ÝÀaß`W*&åD›•‹uðM»ƒ‚c-Ї™ÁÉ YÈgþ9xï§3¹`՘y«¾ÖÇřâ~~¡µgñ74N³RÂÌÐú±HÞEÈÙæè³ÁÊ{xË¥-J¼Â:õ"uç-µ ?"Æ·?å» 52½¢ã—RX°Ükܱø!Rï,DœúÓB¥Žv_µA~eºÃ©È«¡fÞ"r’éÔ±P3Õ9&€»<&¾yސ#ÚYÚÈX±ŸŸ”“l@òr‹Õ™,PÏ͓—´ž÷O« }ÍhHïìJ½àeÑüBR\…'fFÕR” Öñ‚­º¨Nxäö.= ®PÅïý•ð⑈–½éFÁ!ðx'²Ò¥{6þ\ ×Ý}”úl´î·y5íÔ¢ø²ß“&V [WÁ¿=…>“ÊZJ+±ì4/‘qH@QÖO(6WVLlØB7k |6l§Ù98XÏô_n)æ‡5¯WŽgc˲‹ GÀ›Öò{EìÅkà"{©× ‘0ÐGçÚI4û1ÿIø{øpžØ_›´)rŠÅ§ÿÁ¥œ/qy™vvH+´XÔcPhµÙÍÖ2ޣބíKÿèÿ¹P‡õÏGäÚ ÿeC2Hˆ>^ÝåÏ·xr× ,'Z +„|^®ƒS.ý£È›ŒWÛçå>Ï?}þ¾ÿ£Sþˆõ²{~ß$»Û¯†Sb±W8<͖IŽèŒÆó2?”äzfI’=3ýˆô¹pAìU¼wá0¯ð[ªdQ鹄zŒ»$zèÐ#ô{1•9r=`ôC‘HPÍO²Âš÷—XSXŸâÁg $l¤öWé0ä„wkh†‚Ñ$$Z$Õ¸‘êªl–½–Wy‚ìîpK¾l*ù·Š·ÀVÍè–ýM|´}0v¶AkȤ‡ÆM\ÃF©«LåmÇ$ Ÿ˜0ßwzøZi›Ú4ohñ᱁ ýÿgəmrm“U6áeÿìgBŽäà¥þšœUél¤´§µÝ»jg~øeÛ1*¶ÎÑáeiø¾Éª¡Ä=™Ô¥–ŸY.·sœ‡ò %Eùfü~ýlhùý¨2i)À¦â•Y€VÀ°[¿¼XTAþÅöóm)4·—O¢i¿ò!v€ØÉŒ/4¹¤úIudö`‘.NGšü‰þiéÞi{á̄3›†jxhU&¥Zy³A!·2 +\zùSáx~èvS!lŽŸ”y~+Zü’˜t$òèŸÝvH͛wWq" i½ü÷7ÇíS‹wÍmÓà]fô‡Gq!r‹ÓH +ã«Ä Ò˜­[¡'~K ËªÒÏôÚ Ÿ7ÿï›?……c[TGÃCBŽhIgßãÇMW­‡.<ÌmaÞq`ÖµFÅ5¶Pã£boÑIæ^ìÛ3DŽXÎUÉ«ñ‰ƒ˜|ZU[¤Œ¸lbØSiÏí„ +²kI†£›rüp^'ïÿ‘À_þùº¼”hrÏ*嘿´Ñ¢à‚ÿö6Ÿaõìm>«•ÿṿîÎÐþä?åœ!ùßAó„=Þ=ýçyéÎ`ÛÜhhêðBÆG›ǛÁ#Z#‹V¨ÞÖ[ÃtŸˆµ¯æׯô̼Ÿ[€Ù°  Ïî‚#M¾X<_К·ÌhU–¿X½ǀÐ$ŽÔð%"kÆÎ!»^ö±¤åÿLÌÉ&Hó@b§kÀ â;+d0+œ“˜Np2**•”jÔ̤‘³'Æ:Û¶ö¶Û·nÖîÓ»^ÚÖÝkVrI&@TA@mF¨„Ï¿¿þç3 ]Öíožwðw|ó¾yßÁÞúï¡.ú9ï¢ÞÌ ¬¶Y$n:ܛA ›ƒvð/aÌ­³Ý`ÙI©-TÝhðLmGÙwm %ž3pZJ9Ž˜Òÿ[Ý6hà·p p[µî›3‰ô¿ø/úK0¼–a\jƒÀ @½Õ• Àˆa÷ W©é´0žÿ?á-èÉìd‘¿/Ý48D€ÅœEO>‹ X°ºò䆶‘àðeòú"¿±G€ :*CõfI$oûº‹(bJÿ³4`r‹€y¢·ÿýĈl{ßÿĈþĈyNá·þñ"•ŒÎŠ@‰Ð&n1½Ãh\ÉO‡À™“zò'ˆ¥º7„æÔé³Î¡á,œás--Jç æú¢w$ÿ——e>awÝí­$‰\!~ÛÏ-*f[ôTÞltkÎæ.ûm]ë‹4 &W‹Ôük( ¨’ àŠî_,Jª^ر¤>Í´¤.BÉ«Måè/2«>Ø%_þ7¸¨@—B¡£›ÔcDã3¬iÎ1]kFôõ¯5[”Ä ™ÀOæ×À5C•&&náÒÏ· +%RyWy‰TúâMäФ %íôÉb]W¾º¯J§µ)çŒWjÃ\¬Y,cÝ{\òŠúŸ'IAàf‚3 cKÁӚÃW²Xuè=Рäîf¹'Üx7Çæÿë‘i'%wï,d=6‰ZÆ×‡º%×{k)ü!ó!øôRfY0 FM»%úrOÏf—ê²M™ÀYÅi3#"ٜ¥V¨·æÝ¬ûw\ A;zr²XëÏ·1ö„Ç8»hsžòY©y/^ø\Öõ¯Y²RꏴG ƒø$¢ù%Ì.‰@îNíj&[¹”`ìrHA1_šùF G$)’5Z1‰xÇ[ñUé!B”:ùiþà{@A튨œ\Ε‡4-جÈ0úß R±œµ‡ÜèX‚¯U2n +˜¤¶}%]:º)XãÚTO4,‚A VDñû˜7°¯…º‚,)~— •ÇÚ9o¥)N‰¢O,ÕUéXR4íoÐrÂCh€°VÙ‡µP†t…ˆ"Äû¹.¹ª6ãÒÒÉúb^(1¥!¯±VBçдÏM«"ÞµõÀ[öÖëHµ­¨3œ¸ØaïÛÀ·ƒf0aH¹ù;³“qi±e šR”œ$¨tï'uÌ)ƒPšï¯%•ÿùŽÌ­`'¯zyì¹nMŒ²6ÇNÈJQÌØˆÆS 'Ù/ fO’È>©ë8çw€°™á‚ÂgÑ­pÛ,G Žà<«öXø ¥_hHEÖã?Õօ6ù•-Ж ¨'ô.ðéâîa¼£-jX± s£û* J õˆ+-\¼)öGµ2‚X|¿AB¼².PG¿æP¤ŸêeVìfH?@Ãp¡^©Ë¬âáeF·Ðpvžfñ4Ù]2>‘B°ä\VÄ®y”,1‰™JÂØ¡¡xªüð~A"W¹|^AçùµY@L¨(µbÖSË߯Èvò<‰i€OW={±µŽ­Ëï2FV’å™n)8öaâ4é1ÌÝhœÛ(Ó¯ Gž%Å +šUýñڝ¢¸)ÓD±Ï•‘ûڈK”(‹½G…¬–p¤[Áel‘¥ã¸¼µ¤¸å± — MΩ÷)V–¨R" ó%šY#çôLà‡Wõyå XÛxWō³NGvì$ëÞ!e^ èÆõ¥/¥÷ËI5^ M¾…ê³iñ!DÇ÷§SKþBݐŸ•ó/¼°±Åß2V¥¿à±egŒW™¾\´ŸÚ¬,ôX`tÿY¢p‹C’»úd\¾É÷ þͤ }Ÿ‹`©‚*ÙÆŠè &Õ 6ДŒ¬yœ T·¾dþng@ìÑÆzÄ3xÅ3¦©hÚË^Z^cqy³3Ï]çH‘*_É<•Ö9GõÁW°“)^ÂÇm—?ça|(âaš…ÁÀñ´wÀó–/*陋Ó%x+“ñ­ ²> +S›• 7”J~ì)HÄ¿a /3Ðw‰hp"Ñ]-ÍÑ+žY,ÉÆbư̂n†2ÜߍyXÌ_Ó>·ÉŒÅüΖõùšÞº8Ì_ÊG”…£å[×ê¹t›¤µ[62ÇØµ ¡à‰\°Ku’Eªºo„°.òW:X_‡ãás£…·„Ï Í煃ÜÜFï!â,H»Á’óM­þöÿ-êÀÜ¿YŒlŒlòݜrQ{€ì¿ÑQè5ƒa±âžvU|¢¸VàòÏjïÿ¢§}õçÿEJ¼ž +¯yŠíxª¸æ*¿aXкöÄ«78´nÀ“÷wôp'ÇàF¹}k <ì[2 χÀ}ÇÏàntãnQ±õhØøÚs©à[ žÿ֑Ëì*aA£çéXàdÜeü¡”cË/Q¤–Zv™Q¿3%*}Eë¾e¨i6ß´Vi$Õý‹GÉ㙆:©ƒ¿œ_ n&J2.9Ó™v´Ý±v4â㨦ùгêÓx®¡fÏúîՍo§ÓIÓ»}8ûQÙšÖï'Ðk+îÏî“D> +¦ÈÑ¢€X´=ت÷^Ƒ ;Z]vjÒf~—ÜŽhí-¼øWÒðLØ"w¾~Npñ‘"¨G,á<_œ£ #—n*›ÎŒ ºk„.'ƒM±ÖK—‚NÆÙCȨ£r+Ìzèx>ˑ·CڒƋ㨠FûC¡ÅB÷$õÕ{³Uîɏҍ·Ì éY‹Dm þûkpRù%î¤6ªòڐŠIGKÿcŸØõ Ùà•Nð‘5” +NG¥! +¸¹BÄrÿ°¦úYöÉ*ùb ðK–U¬ûˆ•õæpóà~ôhÐ%_ì#F…*ý¡R«lŒ¼óK«õW“ðAe}Ei^09©´TJéâFœN cü€úòòjÖɾ¼„⸺p .rŒÿiOõøkt-Ënfb‘à6c§%šÔÄÄÈC¡—¯¸†õgíñ+ªw7U$ãj sGæȨ¥àc+ pZîÉØ*â/>þ¤p„¬ü&°;ö0¥ÁX'x06ŠÕ–Ìž©ð€£1³’TG€éª±ù&QÙ_¬+¹pt¼|#8@¦„„iýf-[£b,ªÒýU‡"‘•mvà¼?ORaQR[Öc?~Fá»%Æ!ȇ3šÊ0¸(;•S4p½D5ªòw V~Ã\•x5L²Ë|ä]”7âB%A]‚eP¼ ,ŃîcUU±ÝßZ5 ¥_à²Lþ6CYÁŒó«Ý¨¨•i<‡ŠB1V;àk‰¯Àwoˆ Ñb_0—ŽKŽá÷À²U?OEoj ³à(…Œ‚í +k‘QDå*ôÁ3ð Dí–påâܟtñnÙ+ k&sœ®>2—Ùh +¼Œ]>ÈP¥ö?9Eg|Ú&¼ + †]¢Î5¬?0w(DA^¿d(*€¶ Q㨂9âïá¤HÌ.l¢UcwEòx GTQ±ù§E@f?Š­Y-¼æb¡ûù„”¨å¡w¬ô„ý…“»ÃµÒʵ¨E(aG) |ɉin”Ø©)|0¤µa<.ÒþŒ?Lˆ•‚0oÙB$rF݁¶tß°­u(‰Ž®Õ>ãgݟžâܳë`qøòÑ« +ø˜6(þ¢š<¨-Ñ_#WÓ2£ÝV~2 +³ºþÏÇ%V±ü‚›‹{»Æ€"î€xžÂJ ë„쯁F‡-"åi âîae¸yßÚÌޟ÷Q¦ìuØ훶1hÐ +Ìw»ÀIë½^ÐûTËÁê½dÈïÐÏRX¬>µHç6pïªF43 ‘7e§¤t~)ˆß•R‚°Å6NB&”òCc±¿¡‰„¾l±ØëYc»˜€\Á+èð\¾hX§âÑt×4v¯JuŸ[lZ œcÞŠ6;è6Ò´ïùWÔ;ü b#3»úî–ÁëßK¡ßLqnJ6,·¦è+ÁжÊà[³À° ~´7ÓIjûèß(‰^Ez‡`ZüÖ×öµÎÉjìïÍèYWù|gfÙnŒÒûÌcijNBÆÜ>ÙFñ˜” x²úÜ`#£‡Wº?à„ûcÎ 3o±xjBëXógÊEl:Ÿ¯žd6%èßCOޒ¦¼sáMZæaæ‘ßÉ=àÊÐo “„ïaõÄ>ý-NA±®0{ÃÿîY¾^ñ·Î&•_^?KSpwv·¢GÜìj1øØôñ&ÃÔ¯«p<,À±ùÉÑÞ<#®O¥¬JÌÀ¹2òŒ6·¥Xòðu$۔XРšCª%Œ¬ÑZê”PаÝÖýµ(F!óèëÖbÂBJr‰ZÕ´­èâc~¡*²ãnaKÄì%®ê ô§«^Ö1VŽòÒF41œù1P‚83hsúj睄ïçÔÚ<›˜BUÐòäø$àÚ6¹_‡¹ùP³¡ÉôùO¬Ržʼn(I˜ïÛÇ&¡‘ˆæ”gº;#$šåÂ=ñ1¿dr’äòìp/­G¡Ÿ +dÖĊw ÑËGMÿ`ûO¨Ô#Â@ÿî˜èä2q×yK–¤A•6‹Øx&Ñ;N&ÀQ!!ûž:o¹°»ùÓ}¤«Ï}{Ae&,ãÚ%tžà© aŸrTÌæ×±Þ–šÚÇÓ}Ž ̈àû÷”y™‹ââQཻrZ ¯j(Hˆ˜üä'MÞÕçòB87Òŀ[30Y©ìü6ˆ2ñf䧏iÂvûĤ›M÷ŘPÞچøå¯J›îö¯;©‘yµ"ÖâT‹Ÿ~œNlˆs)ž îðÄ▬Ø*¾úge)ƒôX÷£PQ0-üŠÛÿ"ì˨^ çÆìIŠÿgÌM&BZ¬ö*É•îë‡F9E<¼.N+fUå‚XÚö&ùKUq¬1€‹Y£[MžÅBíÓ;·ÊMˆ—é¾þ+ñ‡"orÈÔw¥ª£—¼-hQ\ûN¡x¼&?DÉ~aАq9M’òF qŖòSQ½ R'–v<,/ ylNÈÅú.ÿ¢·BÍæ >¤—ßÃíœ-‘ª@š?gڏùG‘†êâ*&-¨UQ[ô12ÒÙê= žZZXÎtє–uº*Hmý†¶UE51‚#…ŽAÛg¼„w}÷ŠÛûýª²­bë9Œm}օÀ%`_p|ʯ9ÚP¶9mµ<³ю~bkûmÓÓ|"^]qô\ÈWá "|›j~µfè8ï«î 6¨YÌwÅÌ»§(/Ž9ŽvÇý )wN™dµcËC¹,blªeQ…µî†XxTõp00ŽÉ‹¾z1Ÿ•Pý¡F¨+†`®€Ÿb… ùè`­n¨{o?Ê¢6Pò󟬉\^ñEÉ·n…¾Ôj…a"ŠrXŒ?œ“7XŠYlH¿·³U +‹…ŒáÓkÌÃ7•B-¾,#÷kv­Ÿ:8ÍŽRžG +ä«mõ¦~aüBɩڬô# ÌíÞB3—K>´ÐoÕ}”yEÝApè§`Ú £ZöäL‡l´iÉjK5Ÿk’û¶m*‘ºÉ~àŒz知7yüY–vW„¬bÀ“i»‡TÇ× `ݱ§1«ç4½saN¡ÚcÁ3ù8‰®…£‚e¨R{Ç=—ÇÖ9òÆЦ~驂¨Ç‚qÐ_k´eŒC‘tA\åÐ~Aq)I­bçFwŠ>óýÌøtpA‚«”ñ†õˆKrë·ã&!pß[µ<8Q«1qæ$aÑ¢ºOÌ÷ˆ w—ßRŸu£g›ÕÊãlq…^+t¬(À‡LO…úVR&öÖ¿¢ÑPSgÞ1…"5fF *týÒê¨Ð4Ç«:Šw›†9AÏá31ÓZ&1æm/pN•.ÆÇU´ýjÓe\Û²þó,¸}Amù¨æÈÛÈkó#VÉãÓdÇÎ-¤óÐÛ£À¿õ‡/HÑOEB܆SýXÎd§|»ñU}}ÎûâS•M}ƒ7L¹ÄÝJí $Nù° +ùؑ²é[çø†ƒ4ù±"‘öc:~ÜÏfUòÆ~鐰’ÑÃt§á¥k½—êÙ]Ñý“$[5‚YÓ¡õ¢©A×s×j9‘˜Û¤¬.sKâ;!Û³ +³X¼•7°–§&ûàäñ +›Úƒü¾ýÑhK–ƒSˆ·îÕ¹÷zôµ9 ”µ5Ý&×>£¦´/… Ì¿·Y Ä`î}7 +‰³X²4í3ÒY´bÚÏ>)魃m¯Ogßv2v|Gg½í¾›…å +ïÃnS7eÇ>ÊY¤m¼3Ös¾äíµPÛ¥Øvšà1ÏíµŠ1li<é¨äÊXåÞvGhìÍú?Ô»ìkžx/ìa<͝š´ÑÏÁ¡õƒ£èfB7Ý >‡Ö$oÌ}h¬Ó~ñMyR|(úÏP!Z‚ôêé¸CÉ&Wâ‚Írÿäv2^(CËÑ»ì[°ò»6è;lQù& ֡韘¡}K‰á£‡‚_.ó ì݉£‡Ú¡Ò½iàvM<ѧHÓÀı¤ ¥Àý.£m%Æcg·:6ÿåß·Ñ[Óp_÷Gg¤ÿׇ“ÂK_õ×g2“Ÿþ=™ìI׎ÌâìÏjNâ;Nâ;Nâ„î€ÛƒÆ=ñç+í æ<*ь€Ñ‚˜Ù?(ȨxTd5”›³ UCN ݛ=Ä>¾½íçJõ¢“ +?òæÿ8eÕ³øÿ.ψ•³ý—g¿ÊÙûN†ÎGƒÏUu렊GÒÝûÜ4ß™ðü¼~V϶èlçÝØ -¼ÂÉî€(ª±º"‰â$ÞˆÌ iìrø<„p±¿£Eé¸T(³£kœBÂÉç%}›0ünìĪl0U‡4ÖÔ(à}:Kütg¿xd5÷ä ¡¬/Qe, ¼Á)cÕ +(“G‰mŒÈ% /›bâUDсéºsæÉfh,R4çpŒ“SՄ¤^ÆE‰PÌ<)*„4쁭HÙüxe…n¼kS±Á²ïCSwZåûæ·DԛŽwìwœÂ·àÅØ²½Zîø!þ4®UïdQ“bþÔ\¹ƒª7ñ†Ùì~~úž“ý"ßÚ¥Ÿÿµ/›Å©:Zš÷† åm;ÁY=}󩻐ɧçêFkR’Ì*nÔùÏÛÏ£jœK™M­ +ÐACm“KRÙ3m5Ê´›Eî- ó"ZËð-¥”3ŸJEË-¤mÓäŸe³é×û K¡¥È¼‹WΠäÝgæ.vÚïŒ1ÉHº×K Ÿ+‡ÑºW©^Ë`@R2­AúžËîOÕC/ㅠծ¦žÏëNJìŠA._Mç}ó{€‹M<—‘NEÌxû€dà FÆ3\‹éµ †5ö éª¦—é¶’¿Ï°:áàw¾É[-Ç:¾HŠéLù/"½‘Õš2ðs-XÕ.`½ä‚ɧþp¬¥»ÖȐ²àVb³‹còSò0’ÚiÍ?«cÓ;b«ñ(@3ӋƒòebG Dz ©"Î.ƒ”σ’Oœg|ÐFXeÛÃ>¼ÖUí*ó´pcòt® òõœ{ôñaz|Õl8оh  teÆ +,+ª'!sN73œZ¯W‚âÍH®qk/Ê aʇé®ì‘ãÑ^4ç)|õ/Ò@Ü¢¿ÄÊßñØ«òÍ|?kã~óÃ}!¤0ŽÆrN¨–¬ýà¨î_Œi› ?ª¨ÛÞÚ'"Ò4ý‡6Avõ±€…{šfŒ3ou\^êÀŠØÓ ¯ž£í¥v¦ ²NÈÝøDK4_©þäbÿ-Œ¥ËÕ÷ +¦2™lõä³Î8m¡îã%lÿX <ÖL£¼…E9äMè—Nd\ž"sJS6ÎöÚ‡†.Úë”Ê:åR޹;3žÒO\»I]rK;»4ÌF+Y´Ðá9ÿ0°Úè,\ +®D–µàÄè*£›‹Ë„äXŸ?öЬéKÿeòXMÝP{}"=†‚ \Å ég¢Îx"¤m b<ܳƒ_m¯%`L£ÌÂUàÌ×ōìŠY‹ï[‹ã0^âóU]ô½ôòlé8jƗÓåÏÝdµ<|}eœÿvJ¼ä ð€&{­ü•Цºü8.ÿe.À’µW©Ë“àÇÖ~?6~7Û÷jý2b¢LÀ}}l~Æ=€”jnàݎc6ìO­ƒ#^üG# “-« ëÀe\”ñͯJ•úþ¸úÂZúu…5¶«|N[ÑF2ÄN å!_G:ÊÐ:„°ÍO¸¬à_¨c̑k-¯<”@¨ÀñH´¦î„’(Œ·F”ʲ7¿‡<{‘}éŠpPœ<½âðo¾ö „ša³`Qîæ¡-LüñûP/¶é6«H´Ro\6 +‡ïÜ³k‰€Œ% ®hý00?l@N^­ãûó%Œô^2~Ë¢F†òg¤ŸWþL„ž‰ÂLÚ fÕFÜDÞöä?›µƒYrEbnôPÂp/Óäkê,Tšë•‘j´N[ô¬ÚòѾ~ñ[;ÁKSNÙihIôâ(ÂnJ{ÁS˜hH›¹Z')Ýg]@7ל€l{´ÍŸ€nþ‚¸‰›Š^ùzËÚKÓ¸Ÿ¯MǪ~-?¤¿á:Eðvô—´íþö‹Çúiž‹Hì™é-ÎËý÷{ŸíéÙqšN­3kS2ó{¾e7sO5»ôzïë»ê¥m›uûýr†à&Ü6Ä +è/­n™¸aá(k¤´ÿ\—={ž©8´îÿýGÿœLÔîÓp¹ôŽìiçÏ2tZyóèÐ&âØ E§ ¡5+2òU3ÿ—1ü~+Á6XÙÌ + 䠋Ú ±nZÁ^w›xX¨Ý8Þ'lYmþÕ¦í™XS©e×§¥öûu1~Ì=ú~‹¦ŠÊû=;FRyÚ6À¶ŒX?†ê©ï\çÇu2%ÍՉȍhmr÷NÊRœo,fÏø]Œñÿ*žÜCÛsüÚ¸è¤YÆF0ڏ!¡‰|­FWˤÝGøÛ`à}Hïÿ,_ϱâǨ¼Ýú\wþn)Ú;ŽÿÎão‚ŸÊùlu¼æ’zÞÀ,‡GJȳ±œ|‚Ìlýw“§W”€*ÉÑg_}ՀS½ªµ«¦g.â²/1.z‚Ïö†Ôx]ä,ø¤ˆ§Ç| Í:ˆØè߸«ÝÈ šEü/4%CÆÔ%­Ê÷³k,ื 2çš4òÞ«YsN–¥F͏û>جË]¼­'¥ºðœN[ºë@’óÓ£+5%±)šúSµ™sÍAu4šöi/g:¥%™­¤\ý–÷.¿T½ÌÍ%Í&¹G Àpžÿy@0ªTéaú ¹ Ò¹x0ò†ðÞ†¼x%tvf„ñѲï'å§ PòÝOŸéxE@}¿¡¸ÆŽ1öi¯s6½œÏ'jwždhëÜÌ&oTjš>=%É嫵À6–;‰LÛ¶N“`™­±Îœ¡Áì‰å8·_]:½œÕ&Ðí ›ˆ½Ëxä¨i‚Þž61Âx;co7ÁIsÜ'Qá.˜Â6‘ž7KN/]"‡eûœS¹à:< ±CÅ2;/îýH¯… •ƒ`^¬Óë\B +Fs6ؤ–%dWÇNEª·‰iû;Äxí˜E;ßø¾ïPË<"!+µú +án6s{¹›bÍ4©÷ +u,&èxM©—xóOù¯ÿ=6y^‹—÷—}ÃÛ°­i(dÝ7ÀKÈCÚ_‰0Çr@¼÷ 䆪‘_“oøvëïæ Á!n&ãÔb?±"Bü „Îü^D¸~›hW¾Ã×ò3™7€Ö·Û ܼ6’†6s\¤o¥­<É8³÷~cDœ÷¾ã˜mâü ûs{ += Gö‚‰¡»×†ŽÂh´«°éýsÜ5Šp§G€ŠšÊ¶!©áÚ°Œhˆ«ëH¶DMl›Ø×áÀ>z P¬ìNk£±Œž÷eOx}X³tò¢)ÐWJ];ìäýÈÖ†jRÊVgoøOtdXò ªR:)8§aCý~E± ü?ûH?½ ¤ +àOV + ½åŠñq}2‚wfQæa}ìÉäªDŌÈ<㣠ò§%V¤ çê8çê9çêKóõ&9ú“,ê-ü±ÞÉH³ö O'è(L¶eb‘iÑ`EÕ^êaeîg•^ÍÄrAiˆnkû‡áz×JínUÑäoû17¾2$oWŸ#|̙òùHÞ¢$oU©êO"¦:öFõeHÞ¡Ú 1†)ùǑ¼»4QˆÜYLØ×½É#Ãwv#k$H$¹.v<‹,z Ç@†:¦Xþ˜c¡CXòaމ yXñ¡Ž xöXð᎕ k2ÇÖ!ÛaF=w½8‰iò|ÿX¤É¾XÐC£&ùZ+ô@³E lm˜cÍ’1˜úŒbymQYä¼6ÌÑ[ëQš‚hE»Vs‹çy'‹ùͺ|_Íætx¼4lz«Î§~×ó›3ÅúVZv]aå9¯ÛBa`¾Ž‚÷ƒ$¿Ê²ù•û­ xp&¶ÉÄ!0ë/—Äs9+³¾&ÂBv\tì¹Eá — 7€ó0åÀiE‰pw¯ì¶oæ¶OðWD.FþËÖ´FËpÄ£šû=ge¯‚LÒ»úýä)Á¼²fºÊÕþ +8Ş7õCgIJ÷ó\]’WW˜ðc\%iy«é`tüê?µEØe"õz‚PÜEè ap؇7®ÛKyèWý¬Ksö¹%8&—µv­rÔ칊›_çºcÈ"BÑú—%ÏÝöš‡C4E »Á\8¡_ -øq਒‡ž<#+cË:i»@Y7¸ˆ¤ ¯dJۄWuáâŽâiƒ®t^â7ê8:ÍC¨nì7AõâwmÞJ'Âç;Ö Âuf%¯4¬ñÖÇ<‡Ä¼YL«"5ÄÙÇÇ5¶Çq¸;‡ûª¢Y…&6¦•«(m¨Ëè‡gmæ‰k¡çüÓZÚr6öÛO‡õË©À" ~”tŽÐ3 ê¹ïÅæØ o03nÙÄ>¶ø10\*K—ìA»m¥·˜EôRÛÚ}yCñvQImeøW¥6»ÊžӐ¶O˜<Üp1Ÿzëá·t£»[{{GmŸã·I&[¬ñÂZ¬è +Y§ +Y¦`K7¨¾¯„î¢p¯G8NN+¶£È¶Lúœ 4ô=ú?YåŸÁÑúÙÛ;æÖìÝv¿¬~Á5Òf…Ñ­Òkl¬C¯ +4²I°©r¡OVEñchyûv¥Ú‡ŸúK”«l«råÖĸÛÂa›âõ±œ,5³¤»ium¼ÃjÞ4/y+µÏ´ÿÉ£ÂÎCjYm¤´!(ÿõˆé„ø(í¸åðàÿ|õ—Ñwºíõ+Xö¤²öS‹Ã±“v™!u{1‚èË{-ì}Bi¤?—£ÅtVnÏ¸—‚./Š}œ,B~2}“º»Þ`ŠÌýMÇà¿]S4?=kÓ« +¨ yæh]tO9Þø¾üþ'ú_1Ù$­´úFõaNæüo¹|TÉݒÃñîŒ/ƒ½¯ûªÒ]’øé3_ÖÛG[֏i¾wFëanîŽ'hzÛG}7™i,ÿwÓm|Ÿ§§ðV~¾;Fžël½£ô?#®ëÂbÞ[\£«â ~É?óm"¤|žWÝúœÿ’]3&灙EÒúÃñ±ÊL·»? )q{z½iüE<Æ/Ù»—w;mu²OxHž´KÊuáyŸÆQrÛj4~ߍí&ÁÙóÜãyõ¡Ýܪ,O6uØÂÛÍ¢y}Jöä‰óêAçùàf–Ü·jÌü ¡õ3I–怿r£cfoCfïnÿ_$häÀ’“B:pîØû,rTÖoòú&=!ó²ydpž°i¼4¾ô>µ&‚ZàÅ|xdؚ$ß®8’?ÙDºãÈënÃó‘Wh§Ftmßå,ÏIÈíàpû0ö»iÏviÉ\›yȺÿû2§?2õ§”¢ëÃ~½·™iÅÌ¢©Z9àã֏ ÚÄVòz!"¹TT@ÑË£' ¦ +ŸÐht:DÛ·=mæî´ä†zpÝw«oŸùd7üYä8:QëQ8¼ú;CüàӏÆß<{º‘½È‰e®€A_±ò‡˜Õò‡6¤â¼¼Øx_­ ß$ +zùL·û|±Î ؔ²ÜçsF†³5’³ÍiΙuJiMnôÙ@œú@îÑ ‹_öPiç ߨFI|ð‚½`ÓÈ£§Ý{~†º±ýø†8Q)´‚ä•ÞB=ì “Ÿ8sŠ®vŽ·¿¥+SgŠN=™ËIDùÓü®aìOi–>ßÐ*AêÎ`Þ5³Lg© ;6©gN$þHY-z±¿L´TàΊÏÚ\Îj‹ÖŠ]•Sç©ög½}ÈeáÑÑ£¥%üÖ§û¬-R¨Ÿ:(¶zvîĦ¾8Se ‡yûÁµêZ’Éër‡’Dø Œã[µÊ[çàZ”4s8ý+ÿ‰µTGx)[ó‹…JrgáCG5ÇUœ)؋\$Ç«ë‘u¢‘5'4ü¦IW-?¼<|BµçÕû\c›<àÚMr”ôäÃr’ºµKúöù°þ„lrbšk`э¹P ,RmΉ[­†º_àՕ#ùŒv習ÇÊóL=¨ËÔ{Ʀ n Þå»ò·•à‡õÇan‚óͪÎ<˜oçrôc=“T¿,š¯`?ô +ƒõ'vëÆ­7†ó¿¯>PI0)Žƒ¼ÞÍ((Míë…ÙõÇq»µ^œÐšk‰ÔXD<ª)ùyÉ Áw Ð5ýî¡å>rÛµë°ûK?™ð_Gj~ò\4GÆë¾¶çÑõþ‡Y¤û˜îéÎ÷Ñè;7ÉÈþû ‹ãÏå~]…7°ò§û_؏éò9't´0«½‹ÚœõSç®ì«s•Õ6v–/]Õç^ÕöNë*k_=y†ºcÖ×ZÔ¾­kqKiTú¶­ßd÷AsÕ …Sêðägjl³¯Ü×ûwïƒoSýü¡KÙ¨£¦Êå:|­=ÔpÚP»öÐND‚Uw1ËóÌJ¯7ÀKAÛÅ)&G£•·ŽVܲ¼}Š•zÞÑJ½’¾-{Zþú¹'‡~ӗ –ϧ…¯K]ɧ…‡0uÜc×Ç>ö×"ç]YÁ©þ»¸ZñÈnIü¸2‡,Ü/ïÞÿÌÙvR3kޚz¾5§/þÒµòåno~ëêäYŽ›&i©èqX~–}Ý= ¾8@ןÄbnuðêgÐOt¸–Ùë×[=zëgÏÏPb›g¯]lõ뭟‡žŸ mž½u³×¯‡MžÇ÷"{žžŒ‹èdâb9Ø´EK¹þǽØyé(ÈüßmFáìLTC€ñ»ü®ú'º¶Ûñ!¿ŽýþÐæ?ûçÿübÿôP?ý!ÿÿéÏïú¬{?¿âÈö2Øö3ù—Dzøö3ùœ1ìþgó?¿ßŽ>ö\žW#LŸüŽ<£øX¶ô¡üZz8‡"Å?ÊAäö–Cß)'ðÜ%õ–Y÷áč0;8—è"=µœßÍӗVe'Ç~=5ŽñéÍØÍôSv/ÓfCYÓîJ1[¨ýœm„fn.–*yÄ|J#÷ñvSÊËòdxá­_õþæ#Ñ1A|DÉdIïœìÚAükFúå—ìõÎ/QȽTH"õ@?sê[f~êomnÿÃ[ÊtKDßnQ-A"H›îÜÑ7ÙD»-¥·_(‹Þ¢Û¯ºyä 0=«;9Ë¢h4æ¨%‘5±•É7A¸½!×K}#o㓍D›‰”?Zï¤kž-ôP5ט,ᭈ6ÿm­’sZ÷ò(sMaíKܔZ$ƒïa›Š[çUóº[GþÒc°ûëz.ØËZp_ÝBN òò— rY«îå7¿Z÷î ­{ó›¹A7rh–Ô)[ÊÇ¢Wk%ö2y+imSVtS’SW¦T빌o‡3êáɟ%8™’ÝÝEO\э¥º–êín¥›ï,yD^¶*}Ýl'Î!ӌÚNíR~)›jòä¼Ð“Š9ǃ÷QŽp@þrš؏4âWÑ¢ÿQ>‹ý÷H)Ĭ÷ýßá†ÿ +7ø(;õÖO“!s1DœWÊtç½¥ÃgUÈ[=m®º¯À¸{ù+p|㼐ŽîDwüIŸ9cË\f¸Êùñ3ø3üð™÷hšq~A!8—Ș³ ÜÅDb&'åC†ôè—ÝJX:ÍÉÒµX;¥Ä¿#£÷‹hïܲ¾3”¶ŸýÕÄßù]âÞ÷ÿò=#MæQ/±…Gó¦Ü¬mÞgij«\{úµÊF¢R‚iŽ/ˆM£¼´+·7"‰º +&Üs¨¿q&·Üí½óg3a1›—*™’Ý+Ý@[˜òn&ÒÜ[r*Ç ‡V"Aæ"Q1E+a)=ËNŠþìËÞ-å¿Ä·ÙÎà{ÝÝÀ÷‹qŒÛò/áÙɺmÛ97:¹$}×aí\N·,ír‹ôü+_ÿp!ÆgXp"ß>r¢8§œ×*íԁÞ\_í@x‚²îîBÍÇryãÈã~ÛÌýwŒxwOÒøÒM@³hk÷-‰g˜l%œO¢D­½Ç¢öó©Eî£$‹Ý/n2(;I͗І^2çˆçû¿²áK¿§€L´ð)Ӈ ç¯*5åët5Êý°ûÉܳôÔ¿’äoÒrW#._É;ñí¤Q}³¹[þf¹ÜKFÏzžYÜYbá¿¢]ËsÂå±rý¹|AþRw§„¹rÝEw,‡\XëIa('Q„Ïñ9íõþÞû³ý+w7ÎRûpþòÈ3rÞ/3ýNYÌýúÕâ`M_¹O·ë¤¾?ut_óo_ná²¾N™WÉýû/îQ=Ë*õökK>ïӝÚz–rêÜzãê1]©)aØ# ÿ£\‹/"©êE}Q-ÒF‹…÷°_µóü¼Ÿ}ò"*ñŸc¹ùF“ÿtŸAä]'ɾdøù.~—ält¸ÏIgñº¯•«ù¸þ4Ö_áù¿að>´—§E­Àö2Xî“VÒՇpäÊ¼‚ÖëÞ߃,§·¿pà@»ú¶1-­ÚÞC" ³QS‡4°î·îòˆ,[¶–+Äí«:kY)ìw…'û^·¢ñõÎ!!‹ßãåÒmwR½¯¦wÒÆý.›öïž>_ÓµÝÊì½$æ×þ³ƒ+I¸ò·r¾$’³¹Ìøîc5Ãpxr@÷7¯úÜçƒæÊêð©×‘ò{ÿ¾ëmrzoÓèµ³‘ßçk¦>oÛËêuÖV÷ßGE…íօŸ4½b¤ý\öÅ뫟À^ºåýzêî77Š×ˆSŸŽëT—wÕ®ùzêwûÅë©ßÙ/]NýºõÔï¥ñÆ^ºº…Š-Ùx•!ÞLÊõԀ>ß/]Ht'ˆ½uvESª\|ñ*öÄx¥ë«îä¯!?Å.7殨¿®^¼L&z¢ÿ˜k7ß§;«^-N}ºµþµò).¿·Zµ§ÙȔIàvSÎu±ž÷_Õi;xûßÉí}÷‹‡PØH«´¤B©0·F®ãbÉ2𻍍&¸ØÂÍØ®¤\_VC—u#‡(’C—’—اÝHÆ"UÃdîûì{1#hqq¯ÜZ¿q‡û’ˆøhÒ#â#JŽÕÇmÆø[?¡žÈjrYß¡Ã~¯Mü6y¿Ùã½û½?‰ÏazâÓwTÚ{Ù7¬6¸¥y×Zú"ف%磌¬X~À‹û˜ê“ó`½oþØü à˜‰"£@:ð;€%ëáé@ê@ï–åÆȁρÔہôÍ _‰;w`vàxàpˆ¹=¸ˆé'ajö$d¼ Rw>Áê,Ó;XXÎ2)C›®º˜‘ԁÝ”©L>è“Èȉe‹+@ê'Œ•Ý—Ú×ñ@ïÀñúò¦¹mQ.üp øSxù4 s^},^th8å†d÷ uu@K àë€÷€{Ð;; ;`;;Ð;ùd”–Ž|‚H:P”åoÕö€‹€Q¯·0*b.>°çÎÈðdH¸À /&M’£l~@QW&ºöƒí +ó‡Û*—íñ¥¯Üéõÿ¶'ذ—kJ®× ¿ìz·¥ØÏÚî 5ëO¶²>Øu´sÖí˜Ñ|}²)v~v*Þ»]²Y4ô +ìÝsǵ¯š¸Oöëí„kN»EÂ´¡ˆ{%v{/šxWÚçÚ5_”þWëÍ…®§²_v¯؟jf¦j`ÞuN»Ø èO[´V {ö ]ÏnË;£ÛíÎÿ$®—g³ÙӠͣP½oÿ1ṃ)í»·s#Zoú{3›(ª’»B:Óp×54çÙBÖªŽoû‘—hë^JögÙ7õ +†µæÕ¼cá®aºigž=Õgÿ÷ûØ4a¬i—Rz©g»TÖ¼¹ì£[xjTÉ.ÓUÝÎîœDš³h­/»F]ÀÉK +hOŽxàyöqîÎ~ìÁOhӓj;Ù É$?ƒ>ÌEÙ÷#w•1å:i€¹TuJí¿×:+yʅ: §¾ñÍAÕï@­uÀÿÍéîYïO¹ ¯>Üõ=»•ÓŠôêc^{´!)žÄ䯩©}n·eÚ5å@ô÷UQ­SË\tû«9GæT+Ó²:fם—µ‡`Ç~T ²…Ý3û®›÷åËV§B}¬;¾\+¿_wcB}®;ãíWênlã'v™RÛjÒ7*tÙFì½·— «"láX³‹ÖµaíQ±íOºy­8>˜ \®õEü+—Ûµ}·mÿz¸Ë̖ì<3R›Rª‡ó1—šÉƒ á²_ÃtٞÜU¤j@rÇ#©½F îä•2£>êv´ç-û¶¼ó~í]ñO5Ù©6 y÷cvgB6Þ;598S­-›S‚—'ªIת†ÿ–¦up›péË Û.èFÁP ¾à½ÝÍþ)àËL˜o+˖Êgý¾ý r‚ßr.îç¹ nvùS³¶¾äç w†ö_¾]Ë]Ëæm• µ«D¹om«w>¥2¿¢f×à;á¿)¸5}îló]Å¿ÛIëx§| Jf<»æôðjÕ#{ ‚Åÿë{\yÕ¾•I+mÙ÷œ6Ý¦W£8zžö¦ˆø;lgNu©°¹ÙÒ©zÙª¹µÇ õ5yã»Ì«^¾ð¯ñZnìû»UðÚ¿áMü͚5@×܋yW¦lì !IµÚ»»Í€7Ž +¬çnךˆVn æ6ᗁמk„wŒ@ÿèÀÃâéSœz“¤ë³ï5ËŒæ¤æ^v}¶JØk“5ò§†mü¸–“‘p½¡Âñ§Ö󄥻T×IJó—'åá êUÒܷäN¦¥4ÍHÍsUi_êlËyxGkMë]oaï×dÿ2­¼–,:}»OØlµÕåÛU{»a®±.Ú«½Û ºÂÝïW[vÜ8ÿÄ"}^ ސP:}1H Vž+L>•¦HÖ΀2ÖÕ^ö}¦êX©qñMh­¶ýï^ç¯ßF½¸ƒ„)„ä×-šPGÝ"¹ÊJÕSã[@‘‡àXr‡:ý‘È}Üºô÷µÐ?e:i²Æ…V¾4d÷P*3^¯ŸØ@ð†åáû¼"Ëz½€eäŗ4ímßøIúc¡KÕrÔ·ÎçÔ*Á“ðëåBšø…­Û~ÝJÛ¨ +hÂÿêãý’uð/?M=WsëÅxBÔÜòI,^Àøln¹$aòUünyý½ÿ©ÏrˆM·^ùÓwécéĈ¿å÷l‰}J¹aµiÄW[D¬‡­:íÞ[‹”:ÚBæw'oAuÌï ‚ªü:Ê!_>·Âžö*‹)ý­9k¯änÓà¡û3•þKnó‰•|Y©œûµµvZÃcåZbÝîېþTªá®¼5k»˜¢ÿÁ‹®Æ[LÛ_e›J~T­êàE2Š²Î¼>s¾xc°G u÷Ÿ=ãÛâƒG­R±⤜¸óÊ +џ†3v®NÛ&®1¥¹$’›µÛ¶%¾@Ü¥Ï?9ÛZš® »?"U'xÕ[ÞÂñ%b-Aؒÿ…m`×{ÿþdØ¿`¾¾sKÇèùeâÉ ø r1(GbJ +)^èϊÔ-„a€åÀڒ r»_Q风ø ÀÄj±Jl…âÀÇ!ØâöÞÏQx>Hòöw¡®rŠ‚AÍí€÷àwàc¤C¾Ä~Ё$8ê\ꁖ/FPHjÉ&D: 1Ž‹3ý0; “?> Äð R‹µäÀö tÊ.†EÎüI¾ ww`|òΑx }p1—¤"QEÐ݁,c’X8÷¢éùôY団ҁ¨šQv;:=°ô^å€|;`; >€2òáËX·«ó€ÛËL!À<ùEÜï“"WÀÔ°ªàÞ̤è¶$6öhâ p 0QfpS|A”—©Qwò³·Ñ;¡ì¿˜¼Šy(ޟ zJðn‹¤¼]j­Q©2Ø-”[à(‚ñŽØò-«±QõÜëb§-Fšcñš)åo*‰¥¿h«µSۀ®ÿ KAÑvÌé£d¨+ýp½dr`µìZ06ŸvõUq²hÀŠj3eíC{» nê6ñPO‚®dö;aƒ¶;aƒ¶;aƒ¶;aƒ¶;aƒ¶;aƒ¿û0wެ2%},Á½2ŒÕÂ#h©¼0nß8*JË֜|®Tt˜-+úVݐ÷ƒÍ¿\%Å^´ÔNõ¢C¯”îóI^°Ã[ 5ÿ©†¾ßÜëþí@÷ Kã\öœ¢`_ó'âE–q)ðU±‘HA+Ã"D¸ÅšOw }X¤¦ªÜh h¨Âõ£{6àe#EÄ q l#KŸ%æùàeã“òþgW”OÓê$„?Jee#{ 7pÒE@øb&YTà üˆtÀìðÀÎ9B3@u I kɒ^íª¸IYß¹¸I÷G©`é(ƒIØÐàÔž’e>TR ˜Pœz€ԕOœÄ,&«2I„ fZ¬iaˆp4Às<¾¿ÿ¸§©…Ø÷Ê1†]ÿt®¿ÿŒ®¿üŒ]߀â@ä@æÀ÷v w`}1èDÐlºTmÀ\;0 øP6{>p>¨©‘"ð:ÿüʌEì”b,–@. & âYånTçî{ZOÓzο͝›:ÿ6uþlëüØ^݅íØ^݅íØ^݅íØ^݅íØ^݅íØ^݅íÙ×ù³¯óaxv‡ä—‡î}ÂðúAwõõÿû8˜‘IX”¦xÒZ†”I=ìÀ’£¸ŠJ™9¢Hýà±U>Lœì ¼hµÔ i T#L’P.ü &ì2RuzÔ¤T\¿G†X(üœŽ~AˁîÀí@ñËÃËȇL€ˆuÊTTt®¿ÿ2Xr-&•Ú2_CܺY/Œã.‰`n§¯ûª¦ä߁ˆ•B'ÔρÖ%0‡çáã+°”΁À,`ŠD®À,6:À~Y)øg·W`w©äxx~ü—4´Á/ÎW`–]‚Quü`pq`z/Ø üà;Åvq’èC°=ذ9y¹é+àq@jفӁ,ÒC»pIú6dH¸°ÔÊS󎰖ú€< `¢®‘hĄSÝ%áþËÙÜæ·¸,}ZÂñl/Âñl/Âñl/Âñl/Âñl/Âñl/Âñl/Âñl/Âñl/Âñl/ÂñweâÙçÃÙçÃÿÃχ֪ä<‘þߦæyðöaxöaxöaxöaxöaxöaxöaxöaxöaxöaxöaxÿò/dw“®òúæ{iöaxöaxöaxöaxöaxöaxöaxöaxöaxöaxÿl¼~›Ü/Úrü59“ïÉ0¦Ä¡pÀv8n㒡+|€>¹(KØðËÛðï#ӎmKÛWæ÷€vÒ ÇG8 6 v x pÎP‡€u`w`e䐌ÐhróÇòb ·&èOhWEð¤D°$оtàvà~À©T#,BZd|í¸,„K/…$8 3Àqe𶬠+°|¸¥{m{::Hx¿º«YÉ»¯àðÀíKp\‹×̉—W†§"òzÐ%ð—Ï|8QVp +î÷ÀWfßP® uã¬/Âñ¬/Âñ¬/Âñ¬/Âñ¬/Âñ¬/Âñ¬/Âñ¬/Âñ¬/Âñ¬/Âñ·…ã{¯p¼n—‘ƒ‰{°$„„KéAñ)–røpùqŸ‰?v vàw…q"“‰ÎËäÀéâÏý¢Ü ¼`¦hX< ù^xԕ¡>ˆ¨ *{žp݁ï@î@ÅG¡„µ8@递éßސB1€j€ìùJÁÇ%ô×DÃKÀ÷å|»V9š’¼¾Hþ͚¹·ÕÞ%ç—V9“”, à: 6àx`\ʋ£Àæ€éëÀí•ío}P1Á·ø|ñ¯$¼Júñ–ËÂ÷Ð<ñ®Öß+@‘x™5{[ÙÕ`æ’Á˵Àu@v`wàI>ïÊK¡@;;1ÓD€À%œ€s@t@u`vªÁɱS!§¼Nt ( +xùÓsÀ((«<¾u(—ÍŽ;s㮗¶ŠÁ›6Gy‹ ʰ¼« ʰ¼« ʰ¼« ʰ¼« ʰ¼« ʰ¼« ʰ¼« ʰ¼« ʰ¼« ʰ¼« Êݗ•G¶·>ß+úïîão½__Õ|ÎÃÖÅ`Mt г4Qcãÿ„ˆˆ­/±NïáÜ@ýéî(~þ ýÇޔ~åïµ·c÷l?xãÇÁkøxøO|<|¡FŠÝ!'¿Bh7¼ž²pìïÎií+žûŸ'ÝÙ¿ÿmû_ÊÈýZõÕõ;­¯ˆÈÒó}ú¿º§êؼòœÚ󁺖Òóz² :²Z¼ˆ.¬ƒ¿—Z߃VAÿ떷Ð՝˜Ö±a£•¯×­b±Å/9¿©ÇVAÿ^k®VA¿ÍA‡È_ɈNÚßû/êå~ê`ÅãÍÇiÍøiþ«„·(ÞB\oa|›×¬„·2ó³r~v‚õ°—_c pÑöPŸ÷Мüô'>ºž¼ÙÝý9ÿM”«”‹šúy¢ç1÷¶ø>÷o·U‰ÿ^¯ ñ8þNSYãø} ×ÛÖuú œ…þ&ÈËðñ6÷îѵÿy–fVVfY„Ú AjÀ²Rò˜Ð4hhJ%f@šLE—ŒÝšFš­H•EQ¥$" Fž´ lýÿû÷že|ÝûïwÞ{×\û‡Üìù×:띏;o»®uν¯Ýï?ˆÓï¾ÖÉe–ïd…oš”V!ý +~Æ+[T¢±ŠÉõ9 a?©ø‘»Û“ÔULAÑìʯ⸽AI´å!KTaj …ºd³‡þ² ZmbŠæ€EM_ÚMNÏèĚ¢j|åËâÇQ\-oËà«4¿—‡7ñX½ÚŸªFC{U-l«®M[„(JâU¯ˆ¤Î'c$Þé’¡• œõ'gkZе‡qÍBZȯ$¶‡Ä† ™@>JÔÕ¡ëPLA’\/ðþˆ*ÔS¡N ŠÖCè„R¬Å&B,$EYà ä%(«ƒ†‡û#hÊ´ñ”™AôDÛHDńØS°a6&ñ-ð¢,YE†„xa0͍i›ZYň€¡åÃQ”¢¬ 5J*ÉßDŒ´{g¶ò¯ÿ&o;è”V‘BZdžò”M„–]…ˆt²}ì[E¼‹ÁI›E„ÜUÌ«¡I›…„”¥E]JL”XUÒ®Å]ÊM]x1¢&x[í©E^aëaá§qᆏ©DMP+ÊԊ’ À{5¸ 4J&Ñᆁ)DÜ<0Ð5(’¾U¼XuñáØ +¸ À<; WaØG†äUÈXnCÃRSȰÔÕíÐދhnñø;{£=ˀßkð6ÓïÖS•%äY'Û,Ø÷¤®÷‹óWØÑñ´@„vOrš7h¦™Ú)¥yKtvÊË»ª°¡ºç1îǕúam¶ +¥3.ÐÞSho}ózԑU"—S\ùiû,­–ÿ»E3îÐÀ×¼B¹eâæ\/{I{‰u3®ÐÀ×àóó|w{‡­…“æ®`"þ[“³§á¢ºsq®.)]É.æÛ×ho±ÿÙ©ÝÞ6_¦ûóù¯œºk„Õ=jßy»`»>+„ý<%Í}í[¸øÅÜnà-€îB®û˜­{V„=­’ƒ?¼Òã(«>>”Îж¡íê$cÑÇ+ÕÔ-àÉñð_;Bá_»’¨°÷°ì`5‘ u͸;[»O¦£íëEg³]?Š÷ŸÖÖ<¸®žƒa©µ_ñ¼hýóAøÌmzo™ÿѧÓUÚcåz™µ=)$·¹/µÿ’÷ãÁ´úl½Ï¹¿ÅϨ³½ð—ä娰òý†ˆnMg iƒýŸŒÑx¬JüV×÷SÄÿýSšÿÿEìþëoÿ ÛC‰ÏýÎ!¸‡Ä¯QNüúƏ¾Mw·®Øõ1¹ˆë֒·ä‹®ýÖ_½¡ÃVÐãC½uì·-ÔJ·½fÓm‹âxà!/š/Ž–2€»ÞÎg„Ë©»ûVA·ä˜À¿i»üœdÔC¥­.ßUùYûÜwó-õ­UЧŸ×hq©ë•NÏvâ¢/›LSY’üŸ¯yhüï;äçïH˜ºÆ>»¿hq]´8èÚxm>6‡[C‰îµµŒ …n®½ð¾o²ëÀÄ+ޞ¨–Ú¿²©3j«úð“L»4v˜ÒƒÚuØêø}Ñ9tÓ°/ÿÓïï3Gmçy”w™³'Tgyɝ秙÷ý4ßêwlÌZ±ÿ¯ +þÛ­¯ñ²šoJᶁîm5˜íº2‘¿k'ÓÍX»œêX΍Ö쳀Ûĉü~–Ë\ŸoP§‹§Ç8pTø\ärEåå<]UrÚíJÁMÙêe/ûú/ä_5~:µ/¸Éã³~|oïޞ‚¾âVú0p07e"tŒg\òª¾‡ ŠÎʼ_:/Ùó;(n¯ÔH¯¼Zzžý»mèÜoî‘ÒO|ùéZG¯?w؄£·.ÄuŸgÓóú=ۙºÝ»ôl×Bº·üýÿ¡;\ÆPqwþ=õ‘Ӎ½Áëuœ)õn$žÆMªÐ’1*K¢šm׸—ñÑÄå­µ…™ .éN2bíkƒàiÕôâòôˆ8nt1֗u;¿Ç/cßðöݞ/ÚñE&nÎy³3oó”£K¸mú«ÑÍÿœª|–z×vÊ$úá1ڄˆ׎ÿ“ÉãqŽTnðQ)XßX× œÛ °ÌxÒh0œeI¾ŒŒû¹Á¬÷d匉Œ”õu”õ1¯ö¾“Š'›¤‚YEéÂã$¯œ»þþè´®Ó®ï+D¯mրèk(îÙN73kéñóù¹.æFóêèåm÷¨ÌáA'‹éCÚÑ>~ŠP¼b–7}óÑ)ú—\º;÷Þ­ªÎàà–[DæšzË¿Èa7±yg6Ú(9O·³Œå·ùú¿Dt÷Gãø£¨$wێ„åví½ùâ“ï­Š±Ná —s_'ßàox¿bn¿ÙCø­¹¿s»²Šƒš‘úçN²–±¡UŽÕÝòYDûŒ6K6–}¿³°dÛª³ï +nüv-™×ÍRŠŠ¢MC‚ÅS2בÄá1¾^N> ?—¸ÂWûmy<¬E†Š¦•ۚà ›é8~PL~[­)çóÓËio2Üï;K#‹7iÏçý:®fˍ3Fó€ðõ¯¾ |¯3„áýÝF½ýâ÷q’/¤ìže…ºCö€CqÅæÑ+š§Åõ¾n¶?qO¥Êü™©lëI½Ærl àøqô9k-ǯÀk3 ¿$/Éee+_¶Ìæ–UÂãÚñ$µ8mó²,–÷·eЙù'è7ælz6¥;ήFg®³x`{Úý¦Isv«(Õ¹km×Þ.-ôÑxöÈjÖ¤z.²·›“ëï¿ã͇€›]¥¡Ô§–ç~œ~œM“­H–Ї›¢{ëÑx<ÛÞ¦C*¿¥cåW%¢°öiOÛóÌHå³Ü÷k ’2$¡—!S\!* +Ã-Œ›#¼Æù¹¬²xÇÙøJæg®ÝúЧè`—¢ùfw¨nxË6?oå®bè/ÙúLÆVï’æo:xnF /Yê¡U˼áîxû^®z~Iû¸Ë~îåáâq#fx\‡}V÷÷m7Ψî4-S_C•ñá:¸..?¢élÍÁïdà1œf«C«vËZnRÉwÛ-*i«Y;U­ÂpåT^w)Þns§*uù㕪yÞr<ƒ•ž¿ät_–r§ ;ê‰ôGEèαþé\ï?5'ÿ2å¥õggÎó ;Î\ï9¼ãÎóӝçŸ;Îïÿ¹ÔÏ4”Ã\ÃOÏóþ%0ù¥­,0¨0ï?èÒSÏÚÍÕyÿF’˜|vF—f-_;Ïú4”ì â’÷"Ñó¼ÿ£IN<ê+?Ïú4”Î*ùÑg0öc¨•ùÎ4‹ø…iûè/êÓiw£bßµÐk—ë› ¢55=XǑV·ö„_3¨ÍÚȍ +Š`@y¤Æó–[VƒGZC v¶A=F*DÞ]Í\Wb¡B‚•ÅziZÎOªÎO¡ZкË( à ØY,Q€oȝD Èö—ÒY”Íb¤Z àîr—Af%@‹ù6å"ÁÒ-­ÊTýȀtm:Ç^ÚÈaê›1|å¼F$Æ÷n5MÓKS’+␭VxŒžçTVza§õ}y9CýQ›Õ8„¥¤Ì݉f8Üf]Œ¤oË6Ffå+Éæåè1t“›i„vÏá~¤úÂe²6cfƒwž\V7Ôz8ü{dRŠzmIÁìIºÂ‚Ù¯XB)w óIè8èˆý§ÆM¿Ú ٜ×ÕyCjù‚¯ÉB¹b£PÀº§ðÖRÚ ûdg +ÂÚ#婵éˌ#s¥n·s5]"vö"^R ˆîºŠ¶]Íå ..eDXÏy¹…uðlOC ìßݺ«nAákµ@+52%µ¢â½>a°£Š°8„TÎ# ¤é›å†¶?™ûS5<~ÏœPùØõ2Ág¹f¢1N‹Éª›=huôò[+–np‡àá¯Íƒ„¨Œ1«ÚËã2^ô!¤( ³UÐ][Âx„͈QzC—<·<ÝV0–­ï[IŽ(ó0äÊ~¬aäÉ2á²E aüÂa*¡>±¢í pÝRUD¡Þ`O F‡ö½zu¯?δrҞO쨌œ¹q UõÕ·ŠNãáߕ¾3ó îßf˜¢šá½lژ 3þ(p§>*íÄXØßP¦Ý´R¥‡H¾q©Z¯T7qœ²g(ÝÚA°ï%Ö5ŒÐôy4HQ®Y¶±kØÂpó‡ØaíeÊTñ|1M„SúÄ S›/ôµ¨ÑìÈ+½»Fpðm›Jl½$öËàÃΞMž â ß¶‹¸à\oMY CäCåPÙþ%Xt„(¬Æp 9¬s;S.˜¢-QÛÂË7íEVÓ`Õ‡Ï„]ŸgžàÊÈKT€öK61Œàfºås-žhˆŒ8×Á:½ôœÒ9.ä²Âœæz¯m!>…»;̖^¹-5«q =Ûl]Xñ§TÀ£žŽdXíØã‰b3Â1‡ŽSb¨s{éÀX zŸÀ ǒ¢Ä=ý¢ô‡®ÅÑ^3FB?·e›hŽàÍÃ%M¾PòÍöÒBÙÉømx½pr¾·9í<£5jééÿÏrs~7ªº~\.°Ê€`*+ø©w ZƒÅ䖖€ÚA™¨hób•£R”dÂj:#9e 9ls^éÈ BÃwÃDF ïúC‡íóP© åðdÈ©ÞåìÑwÿ^‹Þ(>ò[¨Z fƒäŠñúŽ¾E»±ÜômûlõpŒ›Ìš3ØêcM#4{OÆÒ!cR¦?6ìEïæ6fKʝ91ñ†ø«cÇϓ¾m8Ìlµ0¤Çۜ&8r ¾ÆÞño±·œR¸ÜÐ,Þ$ÕC,‘ƒNã +'&†è³5TN {Ll؅Æ0yI]݁þ x%gÚ4…4* ±1§ <žxjS’’ò ¡Qíæy⑰åñ,ö{ ’ëÜ)ü))½„§ÚžLV\¥NË{óÑےõƒÚÄÿvP“A³#Ë#T Nïgå’ûcl1Àt¸b=¤cýXèy£o!†8€Pw,È{i&ÈRЬ t 7· +=¬ÕhâP@ž†ÞvõmdðSŽàPZ^í·­v{Ì +“QPҝX³|ÏՔÙñƲGÆ2¸÷W²Aê¾r¤PŒàB)ÙNê}Ç 2ò¿Ì‰¨ÚyS´4 òtQ­?»+/p¸ZO¸j"üÕàÐÌàÉÊLCB·#÷³¹«$,–1ÿ’”îw<€,쿘hŽþ…´©÷y0)åÐ,¹µC'Vb´JØ¢—,X‰YM¿¯˜L¾¥,5+ ñ#J_aHº3Âl <™ ˆ«{Óً$‘0ÿslZ™í +É$Œ§’•ï‹Áo66wÜøe:¹Ñ ُ’I ¹¾• ü¬Á.A»œ¥Þt Ð3RZƒc¾r´P«Ҋeýò@FßñÒ0Êp¿ô¡á? lV¿÷z†ÞŠô±(ÞùÐàá, \Ø1#}†Û6ÂܧËDþéÆ-(Æô@²6B–ÌMm‡l~ߙŸb’%þäÊXÃOƒt¾6L‡RæTËڏy~¶ˆhƒÊwFBïf\…¤b9PÔRO ¥Bÿ¦eâ‚*ñDDÈ ðùF7´趧މ„3’öÃm¯µ9Tº#V(ŒVÓq{QÙÎèŽÛ£'#¢;^Œc”ËjC^…Ÿdâя¹îmòÚ䀵óŽp [jÍ5*êÃFÿ†äS‰šXNP,´CljnE-®_ p4žŠÇKtsßÕPø+¬Ž]ÍX"n{6—Ua™Ís#¢5ý_„'B +Æqoñ3„¬ðÞÆŸ*ö¿PbÍOá=섎©tãùÍލJ#‰ä«1ØFñBdüÚ$%ì¬o¨(M~ $ö0,ä#¸jˆŠðÎ,ÆÐ;°#‰8ÐDÑӚ-ô’ô ò ½Ë`Ù1¾ 5Üq’‹U÷R›Òف±ÿFõR£ÌÐÏ-¼¯î Z𿺅k `֗ú-B>…qþÙ|XG¢Ô¹¦aŽ!UC@Paêøê¹aÀÌÙ"ú¡jøÂ´*šˆ¸ßX¬H*©A  hy +ސбShÙi2s°ÎD&ë^AÀµÏûOƒ”“B“^%é¼^Æõ¶Í¿Ÿ¿±¼Ô‚,€^d,PRÚ ‘¼,mŽôغ£n&$QÄþah;€™À‘•éæ1j"ÀÏ~y„wr#`Ý.ç\Q£(ŒmÛ@1Ò]S|3j¹¹„¢ÞÁ1hN“„Œà a;]ͼUh«š¡xËۛyjÛËUÒ$0µÜÐÚêæÞ zd'x1¢VÅɲ™e1LÖ-)¾ÓS%°o;<Á²šã|UÔZìþ¿Ò‰r0°\Ö*êA›Ì‰k‰2 A#7W,ؒIϊ¹Ê4 ã Ü¿p8K-Ã½ (§Ç—e­Æ7†ýá¸h«x·1² ïÏØlvÕ² N*ic m5-[.çÿ†4Ö5à5qàd2Áb88bš]¨×xàP„Í‚À““Eh³2¤ RjݼËŒdÑnÕ ¼ +½9„“o¥ 2r™¬^e‘y˜à9ö‰³ªÜÿ‹Ø¡J7çªmºÞbݝÜû2„䈬åðß*¬ßoOöƒ2Äé 1æÁ:æCT¾EЭ½ƒÂ±Ö|JW2–Ú–ø” + +ĵâÌÁ%ÞɒnçN96ñÎçÇ·ˆä18óO/ê½Ü1H¬nÏ=¶L¸’ã8t•96,¶âZþ§a5®vXf‘RO°cJ¢Žo€¯æPŒñEyô+ÔvŽƒWR‚ñHÎJ»³’–¼Fé‚2hÿûÊÃéÛþŸt¥ 6Ògû<“cpÑv…}î‘ã?ûqÀÐeòæ:èMÑ_É\;?A͏•’äk ¥¦ºùÓpfLÂ¬øI6F+täf…â2$9÷Ïl ª$8ëÔYwýÍ4¦‡ÌZÿÝ$6˜Zܘ¸¯N„c6Pæü3ï–?1”²çß.N"Xè>“œ4Ý[?;iÀ¾Å;l Ew8zÒuêÍÝëGÇc[ӏêÿ•Ñ|=d¡ZQŽ}¯~¨6u0`ÔçA°ƒ*³Çë)t€΀€zÂƸ%Î4î"¬nµš"«IÆÎÓ ¸Ù~‘¤›;4áà@æêeA LlÈå“ùó¤ê˜LuÓÁ>»(σlN1±Ì=†¸7a`‚Š_†u °¹®æªE:¤_7°[.Hp¶PeôÕ²åCÍ@ÔUA*ÈnïIì•Z aø"—°È:Q­}7wãdÊ*¤8S¢"¦Ù~ì™q@Š<`XõÇð¥§-,Ð 2t»‹&¾q¨|z3c¼l͢ꤘ–Ð!ËwJ)¤ÕìAÅ ûJåo\lòÄOÎ>_ðèf‹˜ì(9”Í8³>ëóãáČ=`##$ã‘5M@ò¡ÏZ; þȓº g—êI€K]˜¡ tbÎÛ $è@¾:½M@²-GŒcžþ¸[Fm?p‰9“ô†¯"?š©Åø¸Ù¿N%!s®?u˜gEcÏzxÍœ(©R Ù8ØßÙ¢€@õDÑgž¯ =igž`ºÞnª:¬5èz`úòpÆ1 ~­³kƒoÜ 6ǝTI( Z +CÎ=¾Þp•4€M|¹<ò„cêw/8qŠ,ëPÛ2Ž Û[áiÁ¯§s ÊP˾(ൠtÐÝñ„AdEºk\׬Ø;éaë©q›¼úÈbZ é(Å«QÁB>Ð`¯R7Ç^:ÝßݙJD‹îõFSÀÏ>|†"=¾l¢†òœqz8a¾™ Bçòí„ź ´ØT¾ÔÊ\bõâ2ÌÓ(æÂ2ÐzO -ƒðÔzc˜µDqH6 + ayNÐ,›À© /´´W!ÿ7*’úygb-Æ·“Ü$Ù/1Íy‹çë;š@Ï[1ÅØ}.Ø©3̇Ò/öQXA`a[ÉqS?(ò.±É×üÕU #õf‡²/|<˜aFÉúóC0»&ސ1£è€FVÇçžœüy`^FߒòœkQÿ¥ 虝ŸÊqÿ˜qdᎃ}â„QÁ°å¼à£U3WJ˜nÐá]azy„u®x•Ö[‰^ú0ŸbRB©œBX°J»1n K¦&ç6Í@TëŠþ —£óýýÞS41¤·NÌí§T„Ý¤Š„mðá‘ÏýX«û›áž JèÇ͊P쪙?7Ø2sþw…nß|‡ðXaªóÿ£a:˜cU(/ò¶¢L…™Ç)}ሽpʼnŒÂescçÑ:Üߑ(ÑJ É[8ÊQ´P¼=" +üó‘K¬Ä7?Âq›ª›¼~Z:k)ÎO%¯—w€†Ã¤ûá’èkA<ãdÂÉ*iÝÒ²NãÁ¿™}D¬Šy;úuzYS6-/喾'”XצUmá«û°ëÓ0ŽQt+xÇjdD©—×7nBþãºßÄ[‰Ýÿi„+¶óƧй嵗ó& ˜BàÏ÷·I"t¦VI—Æ*ëo V e‚È`fÑìU¡BÜ6æH‡Dè…qöæîº°¬Ç¤GÑÀÕOµa“!Nà@⯦v›‚w*Ý"æb±Ú>Ä)EJáHR+g²áÕ³’9˜Žr„ÙÞ\ó¨Y™ˆÊû‹!¥ §(îóNŸÜ҈TFl†où–½•ùBý­Y²Þ¿2ä :~qòêæ²52@nàìŠY‹àwzÔÛËk3Døÿ›¬(ùB +|ØNúû>™˜Z¦ì汃“`¤x¯fŽ”+U¤ 1žÃ„àÚÂ4Ï@aU(Ö‘§ë¼­¾–b@ï¾[ÜÆ|ё•üÎ݋BÚïۖ¢Þ°Å7hQ›oð ÝlC4ÌÇHRæ;HK13Xz¾â¹éc\ß̇´.Ä{¹gÞ)ÌýU͉BÊg±Lƒªr³ý%'í‡özJDDô”‰ô”é‹Îäɉu|á7 HÎÄ:»Ó)õëýïŒÖÛYE*š]¨á‡›XÅ=¯Y±úKÒ$p*ÅVhFÃê}ܶ^öøUr»èw%€ìS?ÑI–-™5žæ¡¼28ãêôÁAäϛ4oyʜ/ñ§W‚ ü?¿²<¨N߂<ԋF†øªv"Ú(4F;è†ò֍‚¤Vd»ú©ˆnå2gðÎ —14Â^`½chéß0Å\!F:Fæ'ê×¢™“#çc«àÅiàà©z9̅Z?”WÑep ‘.Ðb™">BØÜ:8·Jä¨àVêY`mä-ÞHʤù"È ãÖ»\†ŸþP§­«¼2ySÆÊ®?XÓv, °×|•eŽ¿ 9|@«ëxьY°j.*h†‘Ç4Øÿƀ2p›Ç­£„ÊUðž×à÷¾a>üÁºØÒ•ÍEùhìÿ5y@B1ª²ƒB$¶ü¡G±óyóoŒ«Ìî<i:uøzÈpä×É8Šl~*¬¾¯ î~z§wà6×j«GæÇTäà2ŒÜ€2´5ü1å×,ϐ‹-P¹î+Ò-®º¾r™( µªdfxf;Ué@¾DÛ`¨ÂQ¸ã]"MŸMÒ†ô~6¡ü¤é©ÂÊMpaÕ7A ?VÊùiÜ»?ÙÃø:€º‹¿ÑÅ8 +}t臥 B Ñh:sÁµÁ©NˆP¥Ñ‘©û5¨à^]ØÑÀèqEqˆ$À÷tïQ¾rk#þß«ñ[@T +¸âŒ +ò·®Fm2ñYQ´¿ ¢ØZ(ÀÁ\bðþ´úÊȪ–AË0ÖŸ”ÈӀ)hÀy¯h”§Uë +çP4™µŒ`éZ9¡$³r{àc®Kdõtk 䱀ó>1{òœ„rœ ŠB6{¨9¼áø-°·=7bAYµF¥ÎÜEÈô-ɵâÃÐè†!9 x3F/éÔ0͏Í]ÚPÑaÈݎuµ9C6ͯꍎš§…ˆjþ©^β»è¡‘@Ú2ň ¢é>m¨ùL;tóDELšOÒ1ÆXâP`´=ÈZþsF7_´Ý“Èhgá€øXXJIÝÂwªeÛg5KèT+B}YÍRà³:Dõ¯‡ ©j õ£Èfcv¤BC:RûJ¹Ä“HæÓo@à7‘ëˆTÅøï§ƒÄ‡YõW­ãnZˆ×A“<Ϧ ‚uųáÁpǝ¿k Õ<Á>èzŒòÐUD%™™pQÁ®Šª‹)–³‰(Qe›Ëc ²ˆNh]@­¥¾ +7mFFÎÜÌê^C0[}cwôU)òÀMkðCŸ?ñ1Õú;À¿d—9&˜(ð¼ai8N#íbëÇ¥#)uÈ}N6ŃpöŠ5U#Bœ}b¯Ê*/¢ÁÊ!Þ¬¥ú`ÈF‹@B/ýê "Êwh"qx–y˜z®NOØF2ƒÖjˆ8ñà‚Ñ#‰ñµ¾ßHÚv6'¾$qÉ3©:%ãg$Hâ&añ™#Vqô¾ÎBÂ5ŽþtDb·ƒ¥ïS9{"Iz½ï‰R”HY6œÒõÏüåâUˍ8‘$H—›‰/9³Ù{ÏÌފ:õú™‘¤ˆg¡˜ +ÁÐ9ì>DA‡Í“?J3Æ g)ã(@ÉïIÈÆÍ˜BÖL¸®0nIUÏN²eŽÐ5Q2wÿw§È‰v™¬³ DI¥,ðŒ¿´iŸÖ~/߈ä_¸AkÁé¹zÆOcMǁ<º{UyO¿8°‘Ÿ÷:M.`<ºœzì’ÒÊ&)Ł–ñ¤Uõà=:í=±±ý(xɛñˆ]¾íNÏ÷ٙ33$“'Ё Ä`@XI’A\É2Iô&@€@¢ +£(h ’d€V@fLs¶UVŠµ×ªÛKkjª°*ÈE$!ÖªŠXÓáÄ´Q@ ÿû÷ïÿ}™$‘Q(m{{yÎï{Íñ7›Íñ·ð÷œß |çŸ¼æù;è_}ï 9>­–É,–´ñž¶ +v¬µÊÌSBg7—ê÷´ŠžÄ‚Â.[±$²¬å½<ȉ¹OàdùgŠf©VÂ7™Ç*¤4ƒMïÍ»õüîÐ8ìçÜ?Ç©I¿6ÓÈ´ðµZ®ÓÊßµA:±új4ü3ÚZò³>YÅûˆ%÷†¥Áßalg¥Í$µØé$óÀSa©Ør•*¤ŒE}’´~—Š’>}‚¶ó'M›“³ž˜Ϩñ|Øíz@[Qè&6’’,”tó¶D7—b•Šç`œn͐\áÜUÆÍÎNÝØûÞ nÒZ…¦‚h|­ c˜‡ZõFJ½Ìsë¸w†ò¾ÀLÉtÐÓÏÁTgìÜzÿ`––¼`ÿ1BҒ¸”â$Ø'ñŠç,è&, m 6{>ÖzY•,Hlâ©ZîÀÑOÑö€¡ßr ¯PPLm©ñ‰pNÐ<ØPfë¤E0ÜÔÅj›l[B,l!o´ +waM7+äEË9„›ªÊÂ6u¯Š¯¦c2o¢ú[G£êð«Û;ždD$ ›w•Šlí´@c…ºyÛf“ÆÃ@°ãƒ ,­¼¬©±ä-ÔcÁɸx`ßêT’-H篞ÒòARõ“ι,idRÍي¹7ðÀß+郗õ焴B_Ê 1Yý?bTÞVÜ6z°K“ªù®ÌSÏ(Z’˜Ýh/æƒÈ¹+Á'n ܍‘'›ÙÒp:Ìí¢šOù”\î?¬ +;×a‰8¨ 6–u!×úqª*¹®âQU Xhnzã{樂!Ls€Žê*3®ÒÚw—ƒ[\i˜¿»ÊB:ÆXÍ'~I%ÿëUÀ¹I~ ¨³Þþqìþ ÜþÑ?G¥O\mFâ«zõ´6Íw&¢ŠC°:—Xe.M4!|¿ƒ—¥¢Ðê Õ`,/%ödÀ ¹°]¤á¿Në…«¯ŠµX¨á<ŽfeZH§ÇMBb¾õœìè/kñ¹àâtYr"òíRÍ¿$å‹äb¹'ݗƒWQçb‰vÚy¸®!òámPêTJRëÈÅr˜ìE¡´±©ÅGŸ©§§E¡ÜÿÛS^lç •%O?Öó»% ÅFoŒ}y×)¯"t#Fõ×&òÚ`)«8}áõg\°VH§¼T"È[¯Û-ªOqò :¯¡ál»Á°³ª£ÄǒköhF©<*ʓdù‚XÇ7%ñ´0*”­•R_áËX[jV”W¸ÏdSÙ}'g š˜L­@C2W†ûy² ‘ìOt¿Ï›Br²Êp¾æ÷‡p5Ò \¤Â¨dqÐÉ=ÈÓÑ»dŽ®i‘±âM‡ +f,U68óýØÎȍ hñö»”xzHð´ç;•O_oÊ;Ѭ£¡4³9b'ŠO8MÝÔÿp P™·–`Dw„©³¦Ï§™§µQ YzpZ£§£µjK5ôÙÆ{5Ì:ò?iþ¬:ªö)Ÿç Ïk\j¼hâK á$VªÄöøp\©Iñ{³DßÍZE1ûVðʨ¾OCX¡0¾VžKx\’B¢Î|Zp^›ùhøí(FÕû÷üë +4kv ÞQTÇ6G]¿é©:™¹*àXLÓo6uö‹ªì›nøMªëãø˜¸ç=CjŽKW1„º>á)=îv£• I\Ú_yIãɍ#ÐXûüËzØ.L4ûn"–pÙW›GœDá)Õåm +¦Üi·>¿ùE5—å¹â)Ëwhmî@G-ÜGÇh§ì¹3Š­«°k/Ès´F¶Éª5¶>/“‹ZæÖõ‹„FsáÓïC”' ¦ÀþÛ'´ìAÕ}qâ×Qþ<ã¿ÆÙ<ö€ÐiòàùР—¢¦ ††-…ùü©éݑ¤¥>p圢,î±EûW¶Nÿ µ}M²wÝEHÈZ®KþIï€jãØDþ‘l3òûbƒÏu9ïd¯R!hü´êJörN‰YŸì2¤¿·ÉKR´ÐN‰|-ôÆvŒ*Ouø^AÕ0 ,º÷žFœGpŸÞ¦#2-‹6¼åH ‰é}¢œ>•¥&¿ý³/‹é:çßÛ0S ®«ïg©ûÑ1¹´´é 0%3$ý÷ ˜É)°„]†Á›ƒò©½Ê©}ŽmWî¸úůӂ»hàrb m,F¦Ul_þ›a·Â³a“Ê«•³úrEC5š6Låwû­ßdƒ™Ï@µ)ní¢:2Gà„,´ðè|iLjÆ0ygZþ¬d4¦ë’ßWõò:µ8 ,³ä0‰ú‚ÄOÚύ‡èÓõº\ÏètފúðÁñ_…ï:Þß$+n••¬m;¶”«hµÍ +' šó΢^ùز_z:²‚ù,ˆnÈS[SkwšFá…3Ÿ ˜R×8ÐØwOá)²€IÄÔzvÜáÆˆí?¾~kú€»n \ÞÈ!KcR<£6K®Ýº¢è±vöÉîLÖ>ñþJ"„ž“ÃpÑÓQe—+w?}è ¢áO_Ÿ-J¡>¦Fޏ:ÐJ¥ü"-`Kç(Ž f»Ö rþª‰HM¸wª:ÝJ¾'U©:ëÄgD¨[.3ú¿pBô‡éÝWÕ +…½›Ò$_a-wèȅß8IIäÆE¥%¬'zÑpO`nfÂO‡>mîå³ÍÂÉÐÁUC„2æ}êr²…UÃ@°k¤*?iþDBÄÏÁKS…áFȖsI{ÔO…©ú@ç0†Þk°ï6á­P.<ë² ÕóXð´×ä ‹¿ +ÑÔPÛ,=ÇЁ—pN/<®%9³hã}y)¿~[uN©1íhûdžaÿX•¦¯Û©=›‡¾hÄ04­ ¨F!­Î”öµcœ€E²kFÚ¯Û3Å 2/Â[‘ØäGùç~ž¥6]7‚²/Àdj´ØMÕÙÄÒÏ¥04ÓîfA5@ë +¸rɵ^èûTžsé"ÄV€“§áßôÜÄP†é( Ù~Ò·ÿjköÊ¿þ ìg$8\›ðÔhh³BIñŸdTïqä¾G¦^z›à噙yço› +vôür‰Ê‰ƒmóf ’4Ø¥Mö2=UTÌr‰SîLZŠ˜r¾II™ßzMk‰‹@¹—wÁ9—˜o(Ò9´±©˜SŒâƧVmcídëÍC”òaâ"µ±0K{&¦`(SÝ÷*qRÝžT½hÒãçÌû^.=KÝü׬ ÂÖ럿T.'‘ÂÓ§ÇI‚´õø +`(óÓ¿p_¿wçLZ,µãa*wSÑõŠÖ+(è/ü㗵p§{BÕ[ +?7®%µ duIÓ\…¨]¤UQž‘V8yNÀÄ_<%Âý'\ +h\'ªîÏKC\4§^¦„§ÐÁ»qÜ|MLÊõ ì€ü[„&ào—62üß\­$ꄫôw_è,ÿiŽ+Õ9¥âñ¹ñ¼Ä¸Ç—ò“´:yˆ¡¨Ø¿¾ +.þOrzkV¶µêÎ]§  R5µ2`³úÑ­ïäÂû­âñÍ fÈÖía™‚ø;UÃV‰qþi;9î?ª¦MyN£»Æœ®Ôع&Ù]03?›…øo‹€T™kð§ýRqð·Vi ±“é…KÐ.wõàæÍ¦,‘Ól‚ÈfNäþbÔj ?ï%ōƞ™hƒEÁ‰nħŠoØ)Íç𻘠i-¸Ü«MMBã´d;«uÈÍ j€¼]ªSV€¾4º•Ê3‡®Â‚ŸC‰Z +Ù¨_çâÏK Rÿ<¿zO!2É4ÐbB­ìN±kPswmcR‚‘]w@Dí\¯ +”S©4¤Ý¤ò«R -`úÑÖ¾¨bø +¬ +¤ +¹>û’u±XuèKös0âxÁÐDϚ"¶xf–\~‰p ûd›ã#Ú& 4 ³Í{rƏ͏é,6WOáӜ07r3¨Ö säsٕ„é9Úp™Óp~*sðšm–…Ä­{Oaš, ÖãÍõì eDgzàüUbž¯À.søTÖ%­ÃZåœ+Á.'Î1Â,û¶í,¸Ñs³êÜ[òsôËG€Ä­ÂòÁÑ֐b'E>¬þgƒáÌ9üH¹ b§íù‡ºû}€>ïÒgßJÛÔvÍho|`2÷Á 6S ß”'åŒõ¡WÿC—4‡.¶£aóŠŸÄ94ñLíÀ}µ‹ÌÛ]×ϟ¤[r“|1 ÄϏ%Ö +}[v2épUrø(#@ÁF|AzøaB8r}òq‚MM)è¤ïÛÑøqɳýØÂ±ÿ_:’©×ã,A*ÐcXµh\‘kÿ °t WGfËÕ%g·ð±…Y.%Bd FÉ*k3mgh+Ñ}&0º +-RAfRp +Ø,Ó±ÐaqÕ˜,õÉÁɂÚ]˜BHrl³|ry`ßÇ&̕ žL*«Ç' +\raÅûƞ ˜R}€äÁSOoÇ&dÞ¸ra¼ûqɅ:·œ9?¼ |ìraQ©žX Üð@"© _Óºaʅ›®°Y Õ3£“Ë€;˜TEö#“Ì490&Гƒ“ õäÀ¥RÉO"a r`BzÉᐠW­Û¾ÂÁœ\—…grr#×S¨"cb'…ògÒ„9É…w©)Ùÿ€Û©ñú¼˜ºýŸj] ü/³# +jÍèÃ?´õÆ0ž’JÐ{ÏH§Cï'†¾ãõ‚Yßãt叞çt8ôŎ¹=®äqût„*UäQe†]l˜1)ÎÏôÝ\ýÞn®j,Ì{±³qI°Ü¿£á¹×WÊ*âcª+(^0kv™ñzÀè }å§°ûË&ªÛï$I‡Á<‚©âcÛ³ýÓ£e´þALt»3l¦sÀ½ð9!dÝéB¬‘î1j´°h0d~4ö¼*{V_ÕÍÄ6ôv³¡,üӇöIK/îM°4ŸPþzŒºEbp¤´ÿ"ú ¨ EßB7‰Û^J{èt T|ò´”‡Ø®ÿ<-kýf¶¶UYPP-8 ‘ï¶üãÜú¥N +ñèç浤䐿6y³<Ðr² +›rñÐR|µ &ÉÃ{¬¨çÂou¥X‡¸NMOâ,AU…¤Fa|˜R…šà"iõíÈeN¼ AC¸S—)!ùGCO'úÿúc°“·ch‚µ¥Þa¡¿¶ ++AhÞ!¶Ô”.üƉ¥-7®c:×ßùƒ7—L *Tg¥Ä•Žºý9º¡=]èx…/åu)ð¯íGàûbQoò'ËÅ/ì >‘¨›? +–Ħ®Ñ4¤¬Ië£ÙÛáÔ)Àãù[†û÷tr†–ËîEÄ¡ ·¹òšVîŸTÅù«=Ån…áUÅfPÿt‰@q#1å…:­3³ÄJyîEöÐމiňߌó‡éŸän¡[³‚‹èK‚êÔL®ákùsJtˆ’0þÆÕÓr6¹x‹Šø),‰úÚÓFˬP› +K,‚Õ^Æq¾P©E&<,â&T÷W«Í í÷ƒˆ À;wëÞT[%oc5â¯Å4Z×^¬}ó­W|ћô{ârc»  ,‚°I¯¼³‰üCiŒð$Hé̊ ú›øV6~˜ûËà òŽ÷jñàpƒü¸¸Iİ1“+q*‰·oVÖ®…ªpMÿ»tø7béåŸm±šˆµy±ªèY§ù.Кk­ Ö!`[S¥ŠìÔ{âå,ÉÀ£˜Pܟ'˜S&¿%2;cΙAE—`7x¢1×jSóò3eLíó´ÔÍ ƒ†Íç{yêh“`Èg\öýÀ“ 5²_Y@:àX P%o*©Y`¹áÊ£¬Ö¹ ¯Ö5al±zäìõ¯¬'0${ŒXž„Ø%“¬6 ƔíÒ¼þ{¹ËcþèlÄ\,vaµU Ñ"z]Uˆ¦®Ö_bIÌEîuit£°¡˜£wžÌ§ ˜R̔1ÔåeÐ@5é*^£`Ç#Raç¹rR΃ÊÐi4BÚþ¾Úԗ{cZYüKB. êåÊ-ä©Fb-£Z¸•+µ‰.Û Å†Là3iê 3Žb…-ÙόΨTsZ½½3>uz5µæÇnÖ9ÏßxØ¢CbЯ¤¢oE–j㶯Iî9mêâæmëb?(o(æ]Êf6,V>…\E¹ÜʊÄëëRa?ßïì¢6ïjeúÅÈA¶!’È¥y¿%¼—°%gì@ 8Ü'ú{%@ÞñæR ·ªw«Á]whXX[Zd›TrÑso›Ë˜ƒ|ޜ°7Íú˜,yø®¬+ ³ iûX!ö~cpl Qo¨õšÒ+†Â¨™Ÿeè‘Bg?°:Œõoàéy ¼)\ +slQ +*CÅ~CxMrÄPI­ÉšèÖÄi›ÌW¹hÕoï¨åÝ©>Sªô¥@&p°Ûé–>|6L§ß'$vñìœZþ¼‹x¹X>0!â–Lº×­+ ìÓgžòïéìÜÊ:å-Ð`ÀÑ àr™9uʎrÓKÊ2vËKÊ\ +h§Vœ§VK_Cº´åº²\ùs«&,ÅBÝK1½2ôuÉÂØ#®âBØmjã,d×>hÚ_rå§:¹Û$žÞ'%Çê6n®ñøª9Oé¸[Pübc½ÅGkFMaFåE~))^ؖG±ÊÇÿ<´E¨MÞÌŌ¡Öchæ£nFî)%ÛˆŸÈáë²Ô[ԞáðfØ)º«´Û˱VsI8y½mW³Nh/úÁµ“Õ=:ÇîQFµÆœ/‘Úu´kþ†Õÿ# 6Ñ´Û§ ¶ãï[ùôu3ÑÁýjŒÉEÉóѶ]¸£vÌwž´hš¾;¼Ÿj­Ñë„Ŷ†ôU0%vÌóª6Ü|}2:`7-jÓiŠ÷Äó "ú5»`QåÛ¿Û£Ÿçè¸{)=3Q¯­í£<#S"T*[œXÌ¡óH*$Â×Z¢™F·¿­ìÝ Ò-Ð×â8:¡²©º7sðÔnæ™7w¢ˆ™GWS[Úº ¤ÔP§zÊ1¥Ìã0Ä©íÓ¿Ê$šO?õ³ §NÏøð§gü¼Ñg®'Ãí¢Ãà-վȩa Áî ±ßõ„4°ƒÌt‡H™‰þòШƒ Ìy½q˜ ùßÌGPlö†¨åÝOÅ5âÇm¦³…° ’B‚Û7Ž,Û×E¥Ùõ6Ì,10™ &õMniÐ *0ÙµÖÌe䯅;2«àêmXÛÞa·œme3Q½ÅEäÝZ1U‚Ì;6|³6Sýb7¼§F=⣞Ãُß{œŠ3’G7 OÖlPÇ»Yx/ìm‘ Ô\Ï$; }†Xl·ù5¨æÂ#¦ñ¹¤jD3B¹kC†#c A…àŒ&­Ø²Ää{©t^³ª\¾ªŒ{˜ÿÉàÊ?ø>„⺠Ÿº9Ž«mMiL‘Vy³U~ÚÅYèªûEû9eiläm©lýbyøª#ƄœB:¶ ¿k`÷»4*3 ›î+’&måŠ`pÄusŒ’£èìö»Éç+&²¿‚)Ï^ ß7å—~û¨¢?7Å.pjÉFì‡(¹‹2‹ÉôEÉÇ4gê˜GˆÆ #ÅëŊöïTžœµœ!l΀ìlìSˆfÚ ±²~.y:y·³€ü"”µ´3‘sÙȐgÊs­b4AÀš07’ñÎV"ï¦8–±áàÕ`üð"$ޝQߟo=œ|fä&õðp#þfYH‡¨%rð:?ò{a6Er‡É&<8ë]Jº×»­tdÁ¿¥¨ò`ä 0{`³%Ceðlì%§ÝÍ^ ËÂ`À³‘“$t?š®‡gCœ0X:¨eò`”ÑÂqnÁÝjW".öI´L}€\FvÜÁЀ\ªõLÑT9¿Ì íñSû»±T|æbß‹ðªÅ¨Áí™ÿɃ}õV^¶& ºµÿ”N…¯‰ûÅdÎq-  „Á+^¨š‘£¼® +Ç«‚Ä xþ@²LjùUmµ~!Z!¬†Ê/Fþ†@Ú!§ˆÅÚ¸>»ØÜ±Õf!ö|Y¿'®Åy€«õÒĽ2fÁhSàÞÔzîv÷j¤?à7³"ÞÑzp³“8wt›×˜KÈX1Ø_'LÒ +Ûg…ƒÎU‚@ í{ŒJÀ÷ºþ‹qJñª·¯üië©ô?g˜^ÔÉu¨)–jYåŠÜ³¡ýÒâ‰à2‡÷Süyêé8g‹õRÖ{ýÚhiˆßPùÝEƒ`(MÝÆÕÊqÝÆè„n/ÑÊ@ë» +q¡Þ÷€0 E_@º¹e:´QÀŒB‚Ônk Á(Õ£O¢†9=AÖ²sRbñqåÖîƒmû7ÔÁC¬¬+Ƭ.»|i«÷̊îQdB‰@~ŽÙûBn6Ž×× ^¸ý²bQQˆŸÂ<Œýž˜¢§s +7v  Ê\Å?P%}©8Ø7>Œ¶>Ï£»…د¥ ì4ŸŒ¾<î¸jí\}à^QgäÂò}7&~‚Ö­¦hÿðXóÔø³ÀJ½8çVœ° C—ºq‹’«*W”1Wë1ãÌïè¬áz Ÿ“dö\ ZO÷*k½­X)ŠýÈä8Ž$úp«"« ÿUÍ᭍Á²j«™ð„ZFh;’–á½s#è¬L@ô§=¯šnד~û gÜgÑgµ¸gÁT¥Š ‚x°×È[t,ÍÎ8­ «Ÿ/mQÀXÞª73$¢Ïåڝ¯¾ _R«^£€Õ·^{$=ƒUº7¬°ì)ՙ›ªYMv‡,9¼w¸è GŽ£­þAͲæ8»ÎW³ð†i^Ï÷x€Ó[lEµ¹i¾¨´ÝëTžÁՓ ¦ÇLÄF(Ùho$ÓQúQ)þwØßþ8ÑoÆÕîj7ìª9KBÚqÕоö4´+•t,ö9>ÂʶÔT7É W‚Ÿ4ž øœ¾7±—ñ½ƒ9{HÚ_v‚ËÄÈÅ5•Äñ¤M¿íeùÎbS!ÄK>!<™bã¿®‚4È q¹7=¬­™ 0A!ëèËuô [ïîP ‹auP‚êЁҞj7íAÈ86Mj®Iê˜úøX~H6! ;¥óöº¯$®«Î+ªÜc·Õc“櫪҃ªä‡UÀy¯Ù@®«V­ÌlÏê*‘É=‘ž—b¿KՃч“ãà)z²8ïŠß4·…pÛ_؋‘̀랧3¤ë‡`ìúLj˜PÕ!}âA{‹¤ö,ÐÑ{sœà [¶ãG§^7.BÅÜ,`v4÷Í ¥‚n…~“ ¨N1ÍZ–|/òZ¶šø…ªÕ³Åaè­[;ù`h?.ßAñp¿vƒO€¶ÜýøQuêøDøóž²aÔè^4)ëH;–‚ô¬O¨:wÓoMg­ªö °'߀Å66y°¯N"=uSê ¨“¨› +˜(m€Úù7§lòοä„m€ÝÕ^ª9,¯m/´¦ˆ;[‰ °%E­®×n1µÉx¹)FߨÝQ·]¹£nîïжOøNO÷?ü“õøOêƒýå¾^§ ÿpœ]­ÿ„ÿ`¶öŽþ!mï} ¨DÏÞÈ*3÷’ê'BÕiû*l)´fÔt §5ª#ŽÎÁ\u¦`¤tŸdÌÊ։q·Ævf’ÇnNÙùêkç¬Ü^HBâ¯ó$ªÏ©& !Ê©“›ñ@gØÁŠð:§—¶0±CJÈß–öDpKbTIØkÑÔq³mSàÎY7™¯9×ó܁pi •Þ@ô<„ ö«-®I'Ÿ)¤/di}ȪFÖ +®JbÄÏ݈áltš_ÔjE~œé¿h¨ßŽBԒǷ÷*7ëªlÜ£V©Œóû!ëN›ßêôØzq…, ™K${7ÈG<ÁõŠ9éÆH÷³¬÷o¸£}´7ÛC}Çî8ßrû7܉¾äM÷*o¹Q³':صIý•7ªŽxÚ;»6ÇÂRE¼`íŒðÿ÷[@Qìo“±dUٝ‰¶qóéåÜDŸíç—r¸ ºÛ›$ùöc.ʛ²ÿU_‹æÿÑc×Û÷ØÃKQã­~ÿ2…©1ÿQ#šžŠJ×<‡ô'«w)~Ù.Y²AF0S[3cÄ Ýt‰û½ÈGÿU/ùڔs¦<{ã$/’‘h_=+Í¢©„nÛ_†¯‡$¾çÿTÂ7(ˆ&Xþ$ГCüÒò~礘£ùú­zÔÊ,è +qKÍðJ"%æýÏôL-b˜öîÀ˜ÚíÓݳƒÄ@p©ÇÎñýòÔKÛgLðê0~Šf»¶*ðSNkþp3û³ö­ñLílúDî(â˜>ã ×¼`û¹p;]³¹LrqCQ†)®$JP¼öL¹üò‚çs°aº`˜¦å0HE¬À!] Ý2ìদ>za¿Q®ÞJ B¯È(PÊ፣áP‹’ÿ€’C'ß4?ó1&}öf}ø„/~ß}R†?p™zúI›Ýõ)X|ýýŠ¿ø¦Q»hŸô:Ú°Cˆ€škáÀeÊÅ Nb¤ÌäæÐÿS•ôJ&:Ž>÷àÞàDÿ³éD,S$½ñ Õí Ô£D/K/$™%태=¼Sú%œÐƒ3‘ÛÉolšïH_¨¯(_¥#¦ÚAL°êKà}ƒo.å2côJ/Gïû7Á4Ýæ`Êπ½ÈÜg¹×|öŸüÓI=4ýܾüÑ'јê~øŽP:ï(er‡ûp¼ÑþܟïÈ9@[Ų€˜rí|I>†ã¼qöù[Œ|ÕÆ>nãý×ùˌ~â㹸ÇÎÜcç®1ß­þ¡êeÉ?¸Ç]q q޾ã…Æ;ŒvWð·ð×ð÷ñìî1ân1Ѹǀ÷ë÷l‡¼ðÛÃ=œ@ôP‘zú‚Ã'«f8bôõ†OG8bóõ†O6ˆá‹ËÔÏóïycÄoàn ïÆóî1÷&=ÏéÔ#´–¾(úýÍU®?¤>*ŸÔŸÇõTñô•1æEGÔ %—¢—§ÔR“ ¤¿òaŽP‘Ώ’-çm’(¼$··QÎyß·B¨™Çó‘I`yY¿Ýä‡&ý¤[Òö©ÑÉt}ù^ »` £dulRôøƒÿ³?üIÿâÿv?üYÿÔN weH?_`ºçÆIî¼þëõ×ïý~÷–xs3¿Ð×Q¢¦ÙKÆú¸Þàå+îðr•÷–š<¡§)o|‰³ŒT3çêŽRÎó')ds(iÇÉ9ëF-Ž]ãˆßÚX‰!ÕÕށzµÈN&Ü¢Ä=¹ÇÒ)¸ÂmxL¦¿ ¬â}"šnó­úçŸ9F?ÞÂðè:=iN–ŸÂ™· m7ê›Gú§ÑæÓ`,áƒÈ‡—©å#¬¢ aÃ2VNµ‘— 5Ø©'Úî¡F*aàKə‡(ÚpÖa£‡ÉsÇCȖiõ²Õ +ʆ¶b¡YTÖâÉ4Ïh,9˜9y¨µ¹&ˆáÛA’¸i 66¡ÃžB)’›ÙÅ@Øú6JîºÏ¿xÖf£•Ã[OO÷•)ºët(,WD‚ÕpôpMn’‰­ïE( D~š‡u/SCéàè}Dûï 0Ðû +lWێTL7!‰ gæÍBb}®lçèì½oÕâßo]þoèø6^Ïç4Î~ùLçÿ¿ÛÿïÅÜùÝÈné¹ñø;Ÿ$K ðë.þ¿ƒ™ðd)4Û ×¿ª‡ñ¦³ìޚsÍú8™Læ>Q·qÀâÖõ3O?%¾ðå6ÔßÛÈ®î|ºçÈêÕáŸÿ ¶7säpw>C‡ÿŸ"c¹ò,?öò';Ÿ%“ÑtÞðëùžüæªCÌõ2žlΛÊ}óïµ¼|3Qw‹éó=Meϒ¡ÖgœtÙÏCÝKËY®øþm¶“'säÄw>3³ïý¯Î³² ÖþÆ­ÄOË ±®g×ÿ¢—¡â<ò§uú Ôå÷_®¿]~ºýuúëõ×ë¯×_®¿]~ºýuúëõ×ë¯×_®¿]~ºýuúëõ×ë¯×_®¿]~ºýuúëõ×ïÿþIÛ?˜Xú\íb|Q €µ‚'U֛ï€#Ж±=㲜V'»bJJÄöŒBÖIXƒï;Չ‡j±do¿MˆMŠÄÿSµ˜V'æ1 Y…b~;µ˜V'à± Y…bo…¬Â±7LBÚ5X>A×oºV!k$¬O8Ä-g‰öÌBÖqXŸÞ¹Äo¼‹÷ԚÄçØ‚·Û¬Niˆ'=Áò6†û“7ÝìßxP÷íã}õû¾›îúYøßws}ƛîˆ+‹ºÄ×1B¬O–À<$PÛþo¾œ7ý€+˜³oû!eæßö2 ¿ì¡Ž›ØË$6ÿ›ïþÀa·ý€+Úoû¶ŸV +÷ç†ÿ°vÐmÿ7Þ7ý€, oûWo†ßö(U ¿ìՈ ¿ìÚômÿå®þÀ=ZR°Dê¾$7ý€z±·ý€z±¡·ý€ÀÄ%ëォIÙþï{÷zICèƒÐ QY¶yõ–‡«Ù`׿î§czID—„Åm# !ªÄS§Ì´ò«[ª•*%ª +ß*µG²E@E %V«Kï£*Ñj€ÿÿ¿ÿßß}ÞöI¹k¯®nܯ¸ÀÜÜÞ¸;ÀÜÍÌÞðw3s=¹ìÜÍüßÀ ÌÜçï3xÛ¹¿€âoàkO^¶½m–: uŽ ½[@—ò·õ‚þVçÂþVñ½œ€Kù[úá½_öþc$Зð,Âþ<Ž ÷ƒ¸Œ%üx¨/àB(…üx`(/ï\¸KøaþBþðuÁD¿•¾P/ïœpKøzGþð:d¿¼·!/ï§°KûÀ×^þð9îS÷žÞP/ïžÀKûÀç¬þðuƄ¿¼zA/Køó½p_Þ<À—÷Ï(%ýàsÈ xñ‚_Þ<@—÷Ï%ýàsÀ vï‚_݇;À—÷aÎè%ýØs¸ ví‚_ݎ¼—÷aÎÈ%ýØs° _Ö û°çXþì9Õ¿»u”Èä_@÷aΐ%üxH/îÝKøðː_ÊßB÷c×rä¿»r%üØÀ¿uÿ…ü=Pv[Ñ/îÇ_DKù[Ïü­ôA+yð¿»»§%ü­ôa+} _ÊßJñ*»…ü­ôÁ+z¿‰N/ånÀ/ãÞ¡!P:¿•¾ /êÀx—ñ?{…üB¿i‘ü­õ!+v!+z@¿•¾¨/êºKù[û¡+}X_ÊßÞ úë´%ü­ÿH_Ô†/åo­ úÇ®%ýAëÃò_Êß`ò·÷ÂþVû¿¨(!/%ü­ÿ”/åo² øzýþVû@¿‡°/åoð…ü=+z€¿•¿Äò·Ûüy‡¨/åo· ù[Õü­þ0¿%Aü­÷æ û ]#Ɇ ù[î‚þèv2„¿•¾ð/ãÏVÁ+ÔðöLü­÷Át'¿ò_ÏßÛ¿€Œò·ù‚þVü ¿•¿ /Ë%ýÐiMI¥P û‘ëÀr_Êݘ_ǹFÂþVüP¿•¿/â}Z ùš?_܂p¨Kù[Øü­ù+{¿€3‚÷#׭俕¿Î÷#׳俹&@—ò·´ ù[òÂþVö¡rha/åoÌ ù[óBþVü࿕»P¿•½°_Êߞò·· ù[ôþVý¿•¿H/åoÓ ù¶g俛§ÎKù[õBþVý`¿ŽÙ/åopò·úBþVÿ¬/æËè’þ%•€¿ÍHñ%¯…üýMˆKù[öBþVý ¿Šòþb +P—ñä§`¿•¿p/åoöü4€¿•¿x/à=݅ü­îÂþ:ë@¿•½è_ÊÞø/åo~ñ×fü­ðþVø!>±K¾_¨•Ä«ßJWïf³’Šþo ɋ¦V./ŠãgR€¢µÙU¹u¹e¨–Ê-“Z(µryJ(µs±jÜeh×W¾ }Yš„¿Sj_ø…ÿ¶/û0—‡C'­êõÿª]W2¸”[vñÊe\kህ“&ñêÍD„¬Õ²òîàW‹¶/ÒÔ¿û1'3Â;æ#x?5xÍ⸍Ê?ʸ‚Àñ2ÿëËþYÓ¦ýH(þú½Ì”Pd¼(Dŗ&s ½z÷Ã÷͏è*|Sc©÷Â@]u^æú꣠÷…ñ‘ ÿ¯/þÌ¿ö£+{ÊEx¸ˆüø²»ñv¥ÿ¶¤Ç•Óª ›4OU@ö’’‘}$BÿÚõT]UäHýUï3–æ)¤[˜[,·2·4¶]nmlÂìn2å~—_eqÁ]79úÀÊ®ÅÔW¥ø1A7ë<ؒY¯×¿$ÎоK\0Ã>˜óò[‚¹DVP_˜Ù¯Æ†I0°2ùè–س´GâÖ%Ù 3‹õ-?f–ÒÓ}i¿´¢9keoOdξۓàÄ»C‹´W‹²$­í“”mWÃÚ.¯ãÙÚ+ôí 1m”‹´++B+x¨N¾ÓÉ´UÍúÓʧ+X+¬ŸLÃ=N¿Ik¤‰¤Ùâ¢i-´ŒÓ#ٔÚzk+‡´Ý7¬:ðÍn2Vš¿â©î²Ouëk_Ê©¹¦×¦Hé¡ô÷ÞíÇ¿­ÅÊÓ11­|Veu³R´ßΫ™oÑ;xBÊ¡p¦¯×¹%º›5ì!’3¦ïÞ¸¦ÒZÓi"Si-©‹;i6eñª¾ /Æ^ُsÀ®-© +ýA­¼Mˋni‰.40¯’Á…wÍC’ñ!(‹ aW¥‡a˜.”·7B^Jè2ƒÖ³†%S¨»1ðJýûÿʒü(IjÒf\µËKæÑmb‚ +anl{] ¾•yn€Ïê£U̲ ի͹ÜÝúȽ;’úßìÒÜn­5Ž:w6¨²yL­.´"؉”-‰‰œ§“¯ä#k;îÅW9ØIÊàׇM'¬‹¹éïIȞ÷rä¿as’jç£ÌÊJ»~楕\і/˜Á®Æk…‹ºý¸»ª–ë˜_U´ÒU´ÙbÖº“/˜æòÜÇ3IiûùQýÛEe-“´¢?pƒY+§D‰´7 C¤v´5äև +W™´Wê/eêÍ/|³´2h'¾šVvG´‘¬°rBĊ­W}ÉÄ=hiI´GìÖ°v"5D˜X®Ÿ…›¹º[¨@¶¨ÕVꫵZ-V—U×j»=V§USÜh;€Ë.bWiôZ}.Ÿ®Óöz}NŸY§ïôàOòäOø~î£þÂ,Þf„’DH¤î^ ¾ƒ¼’Ë^œo1—¯‰¹/½_¹¨Àñ’òÝ×ëÿølCüt‘º@¯×>óýOä% 힀”3èÂWûۉp#ó{4÷}Ÿ ”3ÅüÃb·æë´6pþ1èÓpß*Ÿ€æ“oø¬6¿´Cݹˆ m[cô«$2 "NEç]&J'1!d9ÈÀñö0•Õ#¨ážiÌi(ÄÎp?—r=1›ec¡ÊócÛ(•(+±çè|º®)‘@àÞ2^«vÏvl¿%Vì{câÞ0żjó‘dÊÔÓË$5³ˆ‚òÙøâF“À\ß,̐ (£Ô¬]Ýýú' ž¥§ €àõQæ¦gšiÚ^/f»”̝s98ÂkO•Œ&´òHZh’‚±¢Kü€Œ˜ê:&–Ùøv%‡"ú¬)Û8 +Ðkׇ-€Ž2ÌwZL¹@2!¡ŸÚܙ1®91aê,W¾Úº‹à1äÁ0´[ú( +–áîxs(éĦQçÊGúäHz ²ðƙ §€Nó¶_¼Ú-ÿ±O>5[¶í~-Oñ%¸þCß§Bo5ú™ÜÙ½‰(÷€-㯧–w$þ·+¿ø÷+á<®’þ{•ÿò)Ð룏¥ü[¿ä)Ðí¿ú7µëR7³ë¿°okã>Q½_z7¤oSÒüCz¾çr}rpzçŸæèw›q÷¼-¸õÐq/ÔN +Ýå8nÅ ¡õ³UiÃÊzƒ)ó˜—þÿǔó¼<§xi_÷P5°ªIÈ?yÅ:@·@«EÑÒErJe ‡"‚¯‰–‡Ê¶Áõ¨öÖžÒ#¸64_!‚Çç9ŠT0”ÝêDÙòí`‘‚,Ö ¢æ€]3ºÀûàtÖWw˜.j]Õɯ_®„¼<ü&î‚ìnÐM»Í*儒óù)Ð띶zâOÞò9KϜê“X`COp…š·§Lñ3å ðë݊ÀÞÁKŸ‰è‹w¥»§&mCÎeV»àøù.@¾öñò*=ñò.ãm'ͅ«t@Wë²&cÙw,‚Æíxy@ƒP Á:‘ûè0óo Ãé_…e4 º‚lð•ŒL¡@K)3$k€ãŠön/IÃP™AbА&Ô$™#ð€=ïmÎY´§D0 ½{¯ãˆÕ"-A♧M›gÃC>ÔÁü²ºox¾5‡¯W{^¿€é](%yá½h`í[ SæäÉN³¡˜h4³\́X„”RYÐñAo”Cã¸åOî}ºÎ>¬Æ + +•fØ$Ψ+A͇“¤§hMƒ·@¤€÷Eœ}SâÁœçê ««çßЩÀlß0òaìgüö _¤Ó#8 Ïgçgk€n€LêÈæ¬U‰Ÿ<çrtˆ;ktß)”à%Ÿ|%€7íÈK$ÌóÎ7<Áà.R}¿6fݽctÔ¯\™ìËêÇéø–çàsžO&ŸÀ=¡¤‚§@_kÅñ`Ïæ_TÄA£•?{¯y€¥Í|Úó‘á7„ªVçNvNŸìk¨4~JvGAPô6eKê5MÉ×qüÎB7––W#½ŽF("M¸ñЙë¯h`õÏ2öX̸dÕðÃLõX †ØÊºƒ?¶AP]o#ÃÇR+ßcgWžÆÍVtlq¯šÈKcë$µ}k·_iñÏIÔòô¶1fº–pgíje¨„î-’ÓòužÅÄô]ƒGAÚсj£Ûø{%uvAʑ´ Æ´ã@ •;šĺq¤m¦ðž¢›WA =¯Kl¡Žrª:fE§`O-5Y—¡±Yô„² if1bKVœé=Ž›©–Y´Çp¬tì]œB:pP‚WÝûeù?apÑ>Ú1õû˞ÔW'1Ætø¡ãª3ÏAãìörµ[ m$§ªé±|uõÖٚ DÁô0Ûõú&nÐT6Ž Z#à®NšmpC)EO4æ#p1d½êoŽDÁ`’8º=ڂõK#I<”mû-‚s ->ÌK)¼í!­0z­GÕL³(Œª3=Ʋ ›·×†í ¬f>9à ;‹ô{<[zÁgºpæ®[táÒo¨sýß? ¤Ku@áÕ^d¬»ªË×tn\Õäkº7JËAC(sn²æ9ð‡6C€î¸HbEý~ó@ùE{HÙ®å =6ìPö%͹†IÔsãáGœ³®Æ:Š&ˆ £è%ÔÙ÷N`ÎDg‹9‹hm‹8ÔA‘5Öþ!ó›Û÷æÀ7[j Ââ[FèæK5¾µ’ô?µ._ ÛÝ·OXèC#I‹Xiï™p\ÁñNò £ÛT¤Ùۖ©?t +3$õ[êÏ®»q“Z +ÐÍnu ¥0[E²ovJ¤:hÛ³*ßTÙâ¢?ï\ÐèwUX +ìcàt¼­ñê}˅—Ñ|a@~ÒéøÐ¾Ý¡Þg¢—l_´·¢™aË« ã2É¿·AË? Á‚bÃ:[}»Gç.‰šVÆg¼TÁì‚~øâÚøsπ¶d@7§ÚNåTš¬n…øC:­ÎÕÆ›8¸ÜIÒá£õ[OYÑ$Þâ¼íÕlßΞÕo§rAp`"·Eù£^Òõ ¡´ÿ·S}=á¿¶/Ö²U;éó˜+ÀxØ¥´‚Có¬aÎÍ.¿@µ"ÉÒU«}jA—*Õ¹ÐÄ´9ÎЦ€Y_`ÀÎÁ[ û— ÐáìΠÝE†7ƒ­½·Âw#Ë–8„ˆ°[;’SíOÿÓPÈ®{KÏsï«2gA¢" ýÌÇÒh‡Җ mD´D‡W9¶ƒ«žÜø)ÿ"p¤ƒ.à"yù÷Õ:±;C–[Ͼ¬å ¤ÿß7˜ùOÝ˜Ò †¦‘@%ãYp|ÿŸ}S­:̌¸Q£‘MúºmtºàÓ#â Ï Õç8¨ÀÍï ÄÖÛÅH3ÃK,×cý×§ÿt¶S7xèÛ0ƒ.ÞÃ>Õx…òrїٻà@…mìZe$N p¶Ž0¤ŸÃBGn„ì¯=}YɃ:VÂÕU(aR8æÚâ™>?êÞLqLRžÂŒëê›( ×;ëØ6+êAo·Úl!¥ç°‹øqþ¤•pØbL@tôÈG¸ð¾§0<´Ð»ŽUûRηíÅpÌZ„NÕñѨ.$„S¼+>±ž@`­o ”uÐ kýÙ.¡.‘ž·üù/áo`â1†&šÔ‹½ÍçÓ<‰ë!­@Ac¨=·3™Ú€qc`Wʀ_Hm.I¡sñ©p†ýô¯=›-¾#ìUØ£§?´OìՏ–ŒF–7+"6PgFßSՋ6[|Wc0þº¿Iu;$p$úC^ï¨z씉C‹/VƒŒ&å»§L÷i…÷Äf؁-åBǍ]K1ÀK•¨@kæ-?4}(ïqµ ´ +¤¼ nãðæ—,®çà€ï½ŒêY³‚‰»U:Ç8”-G¿Ý-0äÀf'ԉqV€è$)žX™ÖIƞÊw¨ÎµßbaEõÙ¶Èüqáb_„€KJaf—hޝ'ú0Kžb“†L1=äV™˜Îïk.-0Ê,Ã÷Ú7/¬:^q0)Q…¯©½²ù.º-œv3ŸþF݇“.ÿÑ8üä9û'ýƒ¯˜‡/Žšÿýâÿ?—uuºŒ:Ý¬‡/ü“Z=ɱVëÚyg5Ï˂‰ÚoüI·ŒÅÿÜ«‹íJEÿÙÍMw×l§¢³–c寥šå®Š+=ç³öÌ¢iß\`KÀå#û4­©£>B†~ї¾¸À€©áû[‰5]ÞM•ÿÜCÑïí>BSqæ÷zê•õtÜŸ§{ÍÖØÎ{qzÊÆ öú?#%ÌýˆW’æ¼>‡—äû›想ï':ÿ#¢í»;ÈãoøŒ ¿Ÿ»GÿamëȃL`Ÿƒ'Zé›ù_?ëu/>®§ªèùXÏÍ»ô³Oü)§ÎÖkâèè4ù¯P:{ÉzaÖZS«äe=l4S½Î帯mGYÎùmÅûѕÆë8ïO¯ú´[ÏG]§[O¨é{g ¿¬Ô¹ßv +:û”õäê~Î⇿Þôuž†§’QÕæ‰*I»šÿ N=`{0¶ß0Î8÷ÏïúÿõèõÉ#öÓ?/MžØçïQ׿{ûÇþ¸$Gø$tÔbßíèýùü¦ã ´írÓæðñÁ¾ðDTÚB¯¥*h#vO5Áù>[¿8«ß¿Kx¶(+¯‡Ìɵ@|d»<ëW’»R$g¢‚õGËØ¢^—J–˜ø¯y5Óøs“øˆ+²d§¸Ð7|‰|HezTGì + L¥ӎ3Ee›8ý ãФPÑËe^Àbô¼åè2®WŸò.c럞öß ë"˜#e^º¿fŸ®–ì¾—ø:)cĺDô^òˆè Ë«Ðt‘CH†¸…hKϛëYÊ.ö–MñÆÈº´ä^ÛøäUz¶pÔy¢o±˜0eÁ¾&;)ñt)è Ãée àäP2°: öú Óñwcõ¢?ó¹:#¡68˜Ùدގ\|S<"ÐÙ)‘Ò +ÝëÈ&×9ò.Ž€S ôôhcË·J~*%Æ üÆ(?+•¿µsÐ ¶)vxGͦbm {ôhËÏþØ:µ–èo÷lÄ¿ ˆ>Òÿ¸ÇËß®ð>ýю•¶2ˆŒ™cÐ|øE¿ÉfÊ&Á{1ý«,å½ÂÔ#åð.̗™Ü±å|tÌF<ÖµÈÆsÜ<ÖyéXÃ8ÇO~éJ!Ð[ Jt‡Žß;Ì÷ґâÈYâbÇãň5Vϓ%u ̓¿í‹k¢G hbŸ2RkhíE Š@ðe&„ yÄ«ï CçíS¸Kà‹0dʑ9:‡ŒÀϽVg”kL¦Á@¾‹ˆ‡ÂA8šbÄ+UÓYÙ¿º,A=g“ÿ°¶^=W{cŠíëcÄڳМNGdŒ»E4ˆƒTÐ(‘ª{;èý3ÿ €jU¨ŸZØ-l?å²"áÜ<»‹|9%½¨·¼‹{˜ojƋtfQOŠ-Î3áÞzÞh%RÝ`óhêq“½‹kÃÖñg-¼`»Vtu¡a_ÂïÖc6Y$µXéôI|õ'3—SšF'z>”Þ´‰‹d—ŽV覦“4»ƒi–âøÐ†{c͑»:bê,šv߯m¬”$7?»m 0:`JL¶ž›†@Z‘¡¥ÛÏ} xó×ÈÌdÆDpûß$1”›&}ôu‡9çƒr_y´Â©Ñ‚Có}ñÅm4ëÌ%òGÑ֟Œ0€é¢BÉ=OJ¡“„¼çÝDS½œ%çÏBJœ@û÷éð[||æc0‰‹‰»’åþTÖ6Ð'üŠªáJ?4úÕû¡å]›Ç+ÞÊàÖ3°Y…ÏM|V½`+ +ìñìJ±d̞?¯*}ªÛ½¦*%9;Ί®M$WïÆÐÀó®½4!­-¡³ª¿˜ÐºCoôuû_W|ò Ā¢y«4œè¡«±dP +|‚õýàÛaó’ŠDþŽû dîáґ ðÛ±¯g¬@Mx~6¾¾[H5õ:Ù¦.1eÏÛ:Žtû?ÜÇÇÿà4_ðϑ:¶u ¡ŠE‹Sf'lfÅT¡ÐM@é`ާv—Å¥¸Ä”…L€çßvÕFÃF˜ëãII 3O}û‡sváÝ Rx¶( £Ÿ¸ÇÈúðI5¯gÓQ _ÈÙ°å¶Ê&,€ ЧâU€¡Z<Ø¿ñ'o´Åÿ j– Ó£ݺ»æõK ÊgkŽÕp¡¾ÅE'¬‡aç:£oŒìÏh‘¦nßQÕΤHˆ<äÔi˜‰XÌæHêD~»dAœ9 ìý”‘‰Ó>Cˆ `ÓÑH–:n‚†ü·Qùy[k.Û:×ó†Cò£kûӈ /ù.8ÃIîí†çÅ̸Áwwq€r[;¯y=¢.ßöû£ï(ãÀîM‰µIÈ«¾Nð½åts¼ø—¹ ÆGËFŒ8À¹Hþó+rÖÓî±ùìçiŠoø}ÝO)ÃaëÒÄõݍ78ç +0ýêy;ü# ÿÛ;ûÿÿªyÎÎp9ë.»Êå?÷G¦žô•>Ò½l†ƒ«ÂöߥëóÿBò*>ò*ÇçŒGùÿ¾ïŸûçþÿ¿õý#boí8GAŠÐ75¼%|½6vIýVÆóšÀü]ÿ9åÜl›'røñ“]Ìw§ W©OøÉ®ãÔ=Ÿý:|ø»Ôªù©_–Mw§ñ/¨ð+|KïîèÙxÿ™JUƒÄšß2ŒŸK3û¤×|"~šM¿í“]Ó&y '\Ðô0͋¾Bâ#RNñÅl1_y_õœUák½G;­´z@†·ëPMû,e’î!ùpg¥‡¨äk(×ñ6z_Í +içõÕÏBÅ$œìO(?^ÊÚV–ø{äW99p¿,åìb:͌/pTyÞ_ȶpgæ|üj{ÍՔWС:¯áÞî%‹#KÀœ´]GGÖÜÝm_¸Žv{ÇÒí®Å¦»’öŽ>ŏ-[ëÑZîKÑ7èÿBßT¬Z:ùÃçßM« ËŒØÌڊpg dWC"}áÌ_ýïwî6;ò¼ròêcô\†Žøƒß6’?vqª˜^LÛÁŸè|duÒªÄx€æ¾±Žµã5Åñ~•·!õ‹DÊh3wõËßÞ΁/ïvöd]VÇ%lÎáFèLýk±3§Ý)†O $g±6‘ÁÇ.š)l晙Eʱ»”Ù‚ò¹f[¹N¤:ëÌÂnåNÏ ‹—$Ýʕ4&}ÌýîKår⛹R\NW'mÜ¡3¥EËÛU7/b¹'ègÒjågPÏ<‹–Å»•k4hrHDp»?AïÊ©ˆ%ùîzž²°Aã@”¨2c0£>iŽòJ ÍH°ªB•ƒ›tö^{‘ÑõõjŽ2ƒ€§¼lɜþæ§Ø>œ5*Õ8–ØòÏeÙóÐü +c‚§²½}£Õçùêzž¥¯›|_øÈêl‹”º±¾Ó!È ðÜèŸ^¿€†»îÑ¥+ÿfgÙöfd’9HŽÌ7M@R€©Ÿ$3 ŠŽ«¨ @5ˆš=LdÌîjïjïuÝÛUÝ[_;ÚõÜ×zŽïvX(@7uU‚*ý UTP€ ?þýûÿßffLÈ„Eo[W»ç{ç{oñoÛÀ¾yožw{âÞâß@w‰x·…oñ/"ð­ôÞðíôÓÃÝ¥¶ÛdŽ)K$2DÐX)Ãd¸Á´ö@G;ÔÒ$B\¬<”oL ’%ùßï ø5BÍø”1Œ¤Oû{HbÍÿè"ñ5¨ó¡¢Åc/š2CˆNôÄ Q×â"xc[÷J€¾Ñåȋ8Y‰"äfõ:DñWøHva7V&_*ìHÞ²©º_Ål?ØæßÛ³ÿ˛ —;‘úL‡À ÖþÀãÀí֞ÐUßÑê!`æ‚ΨW¡ ±ì’x‡©%¨ ×ü3󽬠(=^9ÔA\°#²½#l²xn &9a0Ænp{Úyô2CŒr†´#™zÒ0ºm5?„%+5L.^…˽Ã0¹rpÌ.[GâQÝi Ø(„Åû—t)z°>„Ÿ·ÐŠ­”Á)cl:He0€må…Í'žúz”$.`?7ñÃ:%ôOùGP3̝!âÒ!õ-w£-— €Z4Fm-bf؏éÓfB/1iX¼N_Óü]ô¥÷ýñûÛ0w=HGù“f0fÅEÝÏñ¨¦¶žÅ kƒËJ õ¦ë¤q?C¹I’•úàÈYCÁWÂÂä”ff´èYB—ÉaÁ¾×¢0éä²®¸³x‡MØM:åâïÁ²uAä4넖p ˆêÍ‚‚Š8º€ÿ„†¥‡ÊzOâB&ò,)`yÁXâ iA*íAÆƒw$穸D»ˆ‚Ðû|Š!*÷óé§ŒGÒà™à‹ÊÒ?ˆTÒì•ÅwDÐúãdMž6gî“gøI²–á³M‰³pن&Ìù6^Á²6ÒõLZ<„±ÏÇú;Õç+-̖-å/,ZY\Ztvn¼Z~ÑyÛBƒgÿ æŸi\‰Tï²D¢Û•ú¼CÞþ#mo·{îòڋ.¿FYS.fB=ÎÐ&óƼÃlB7µÂ,Foâ4#˃d"±Í“¼6:¼ åZ¼0½@V½dˆUrzÞ €»Ã§ÜoŠÆïŽH°=R°EwÖ@ñ(·ÁÐH¦£³Ä Ÿ˜~â@Ïà[xeÑ֓³à'g tjý²l A͸ô|ZRmÚêW:XjåID3ù^°±J²ÍˆÀG|F"{ÔњPøžÊä‰Û%T÷Õøáæí­ë„kɈ¡cÙe#  NŸ§qºGó>*î"O÷*­‹ b“ø”¤gˆ°ã®îýßÁKÀðεõ쉥û¤]¾+¯{µ«8 ’¸®Ër†ÄòGÊ,–ÃÄHþ0gw•ø¡hz'ƒ?íìßô¿9‚ü‡aù×ÙGly<„:þBß9®î2ºâÐ¥öûØßg#ÒQȉoÿRßô8÷ýßG÷ÑýôÌw‰©CË·Qs|¡éK_=]§P’ù[&-묶б»vwµÕéç†WO;¿¸£»õ{ý˶÷nÑá+©2“IøåsðšÞÿÁÚ<(^§úæ@|"§íÐäJçíÏ1÷»˜ããL€àíö- t^K¶ì.Û°äL€öŒ ovœL%`˜Vcy^¥Š·äŽO Îwð #nu h³"¨:ãWG¬;‰\* +X§vqqÈÙ¥Íîbz7¸ÜA'â^,aÈ}ÓÈ¡¼d&Ќ=‡Ðþ¶Mͺ?U‰RáÌvô­\?œqˆäÐ!֓€ èy®=‡Ìü/¢<×÷àšãþ‡Ž§xpTŒ‚kgj·ÛšÙãAq+cÿxycì ©ÿ>‹fu£\qûŠ‚”B ŸJJ±ïTqüÝ$ ÅøÂŽ6æéûÕªW¼œ×¨°ˆî·Å°vt‡íÜÙù§À—c-ÈО5–HÎ-8‚Ë®=ÜìBS² QD{ÆÌùÆÑI͵_–¸Ùƒ-t?†ü þOêÇU÷KNª% …Rd—î)Ùv½r½¡¼£ØAŽö'hm):j ¸rS&=è¯X±3[Å3ZË7 Ê+a±ÆbÇøPkºë¤òãø‘â9õ¼DòÑ[þ”òÛdûpæÅÿµl_~Sbÿú¡¾÷ñf¿þ2d'ïs/Ã]p—‡¨|’ä9ãÈ< ô¤B9¨ÿûÞ>ç;Üèx³˜«SwWèE,× +kõpnéùÈÃ÷¦APÿÓ1nÕzËfKîû§ÓTt^šTÿ삧½ˆ}ë—|„휃}¡ó{_Ô,?suœŽæá³ ÖÔÿ¿x¥§‹€:Ès:]×spêÞôù=êkþØø?l‡ì‚§……`H'ñÔ¼v[!¯FROy5Eèg¥?¢E_‚RqÝ7W¼ü?A±Ð_9î0>4=}]럨ÿõžQ°ÙÛÅv×K>lôÑÂT½•^ï*Q…VÇñrì[ᙬ¶šãµ~÷MŸüêtóú‹áÆo?šþ½Ü²ùŠM=‡ÎBÈÃ\ÁUwS÷yМ#2=³r—í˜ò ?9ÓQ«’`ù¡>0ä,m¿…‘Å ;oOƒ½eîQ|?&}•µ?îóίt‚]ù-™‚¨õ»{D·ÛŒ”æØødö×}Ò6Ád§,2SÚÀ)B[zK²wÕâ‰* “¸Ä$h 6_QÞÌý‘ +…³¯bԋ@g§!`ë&³ã óÉvB¦ø}æi ,^Tp³ÐžûZ~>\…ʆ5ña•—™f§.nŸý%gŠmŒ^¬Ê}¸dŸÙä¤Xï÷ªŠP %à —ûWl†I¥˜m³ohë3`é§ybæ‰kw4`´~Ad¦g^êxD*¦©¤ö;ãD 6± +MnŸÛ: °"… A3§°i¡J¯„†ŽlC™€ØØ*LîÜ0)PR[¹¤ PðÍ¢Z9Ep%·&d¶F‚È{oV².£nG¦¿¿¢¤ãŸë‰ÎŒ&¦‰Œ”.:-Õ{1tY àªèáM”WY +ÂïE¸áÆ>¯ƒ(2õ1Q +y´‹¬Šêü%@ŸD$MR2Ïå¸.rb¥Bú.nï)—gd” +%¦ÞHXhv™ôʑÿšHmñù¦úºiGè¥AỦ + æ¥vP¥ÚjöiçÄÑ©m+Pr‡é]Õ³£N hI¦ž+WŸ +h¦Éª².)ÈsÿèØyÇØ·³`u¿Ñ°>~.ÀߎÁjqˆm"ìÓV-N$5yð¯­5BÕ7rÕîì‰á?Çsw€ŽŸŒÏ#±¾hä.îØÿ¾Äîœý‘Ïìüg7û‚ñ†¢<¢% ¦ôõ¿wþé—u-ÝMwWH9 n…ECX¬{\‹ìš,¶õ9+¿üØÙgo'œþã’þؕ{"êgòÿÿ-•©|—ϯùå0yc‘Q¶¬¹«á'1C´?ïGá9—ÉÃýÞx›…ˆ1g°YvL[Ôñ7 Càö’¾æO»‰W”;PîºGýYÌm +Âa0“²rD®‘ `„ÍWIC=ú­ÆêÅb¡þ5ç#§øh*íC«º~‚0è¹2ßÄ··KO²û2_Œñ2`#Ó4û±Yˆ¦ˆÍ=쒖EûŽ@%÷ˆ*¡]¥}Cl4­ËWxßrlt +•i»ôâ‚SÀ乐±âÑ ™.]XÈÐ!@,˜Ú%¸=™J"6šL_¢ÚQbÊ÷ÁÚ'nlϦæ Êà„% Ѳ}f˜ô:öçÁüBáéôÁ<¼mƒWD_@äp‰…‘5ë +†£ëDŠætkóÓýÊxrÅ%CÌÙý˜¢"v †T7Õ¯O®^ Ï4Ԝqð÷¬¡Éé¹Á$M…F; + ½oY.yͲT¨ªRµ®í;A¡00Ww~IQ¿-¬Y­‰âÈ.ðj ֏%Œ\ŸŒ)ÍÐ(òLžÁ͜‹}^݄\*ôVÂCÂ¥©çݶË;èbä9‘M²MF¹«˜v´Œèx9|ƒp‘ïW7Õ°}·ïø3I¦D•>ÈI ؇gbYZcXVùr$¬ÂAocñCfÁ]ù ›Ä ¤@®Âê7{&Ï„ˆlÙL>â."xÙ»BlíØ]Cfõ¤Ù¨au ›ÿ6g]CfëI³œa"7¡a7õD†Íå —a"7>Âî7j$ˆÊfm…Ü6lB~6ú s ›ì‘‡ ›®F$6oï£7S¡œ´K&<‚1!³ztJ7Ô£6æ¯ïCfïèÝÃfùdU†ÍŒ8žµÈ« ›ØSð ’ Š-OÒ9‹)ѳ^ThބhlÝy6(nPÙ½ªøÙ¿ÀXŸv„HlßÝ_7œ_s ›ýÅêÃfóËäCfêG Nà—þÈlÛäAad:©nþ‚Gr‚ÅŠÀ‰TÌhû ¤AbGå Y/ˆy>©ömgöð9¨ö÷Œ³‚´—¹žÔ Ü1]è2$YÂÞð˜V§¤%Ý4¦'@AÅý¼—£‡`Þ¹lcdÈÙ.‘ýƒýzt°ðo L‹œþª˜7ì.ù +[?„»þE-ŸàAñ…©?nÀöqRïÀ×ÞÖrx™•œšÞL}óC©þ*ì 5xóÀjâýþBá!R=0uÈ?pjCŸä'®ÿÓ"cÿâçpúîWTÿ—} +‹Ê°Êaw¿D)åþ=ÿH??Í3B²düJq«i“Ž\Jr:F-Û_Ö[J_îýÁé×v¸‘£ù +ÂïÉrHãärçÜNÿo¹]î¿gòû•ÎÿóÜ®HòÜY +Û¤~°F”¦‹ÜÃݘŒÂÞl‰&{y¿sÛl&÷;IÂÉö“œ‡†<¼éÊÜïì÷+¤€6C9Z×.îÃæ°}_¥{pùá†oìG³˜“ú»ˆñ?1/…ð%]›¯T +ÆV,h]³O§”VˆŒ3Î_äZL~Kø¡*¨]8ËQ@UèÇí֗Û¶”¾Á)F‡„ê üŠÑL"‘à‘ÖÑM9k•mj9So t(  +ý“ˆ(êï^áSoÎGÆ´·¡õª,v WÍF±g.0Ô88wۄêƒÇƒoÝõ°ÊmÞÛß]òfü•e÷‚€Ãìšð²xa÷Œ“ß/L•„&.+2k÷Ö+Új|A þú¥®µ‰¯Iõ……¢ì| E‰XZ/]°K•×цIs0nzQ*Õ¼l—:\9±Òë¼ÄØÀãddR]±>y¡ì ‘‘>3s50ßX®yÊÍá,“ä—ã%4S å¬I|)DžéÊèßúá²Ó€,´ï­ÈÚÿêUaRiªçã•ãÐs@ãšÓ_žð<— +=Þ„³,C+ß´j.þZ°hé–!4W†’Íʟz¶‹æ7³ôÁãöÅ¿ÒáR?ñ^56üj·8ÉDšcü|d­S$ oᘠ+¹¥æß¬£M[1/©~|å==>þÔñ¶â+ FÀXÂéà›Hö;ûR4|ÇÜ]&fÅ'ÚõÛ µ”K¬(—X¸¬`“M\žþÔ7^[—6ëð{rS&–ûXnXaƒ$Ø(†¸ø#ëÖ%%Å‚é3r° Ò3bhGÁœæv/µ‹¬kÌÎ^ErU™ÙöE@Ø2ƒ/÷ðcr…‘ +(jÈ£3lMgæ­”%‚ÑVP£#(M7.¦ÿâøo$’ÅøîÑIîEx¾!K„46%2䕂ýìx‰}u˜¹x´óëj³UÀ\4ÍñÑýgÉ.Æ-ªÊã%4|òzQåYÝÝ*û捻Ý*4<[Ý+ + 'O¥eo°ûÔ<u»7ÍҎïuÙp:Æùu“5ÁE«aòÓIo¨y.ÂuÇ1{$ÏIq¢'R¤5Sê$Ö‚º|ýŽÂȁtú!–µ£9úÁ“NÄ(#`n·ñ¾WVQ°O¼ŠúÊ4SîCâÆ²z|>,«(ÐOí‡Åeá X88‘++Ž+oéÌrFÊÍ=m¢}œ¨ +K×/öu”|’m@Óm ÄèüÍ>xß6ÚhH§F#*bÍγx½öÆÃt¹Ä÷«²÷¯Ã6ó\r¶. ùSõªu¬íJxÑO3íq)*6hüëÖ¸MAî» ½ï©Á]ed²ðë¼\Q¾Ú¶R"\m,D>¶ùIöCÖX¬ñ›,yiTfŽwûD»}Ëm™n ::ÜÕØ3Æ×™7ۇ»'¯¶éõöÄ7;¼™€l{êfßO°O¨¶– +äòåòmz|ù|§ ±Oœ/—Ò‚É>l¾M`³Ol «E3l$JzùCm♷-™Nˆ(u'-l{¿ ދq¿6%fùÃfí´Ï|·²Vp—› +nfŸX,µ,Ý鍤»tüíùX‘­‡fVEF• áDYp½ë¶ÄGGª6VûE,†ìT²S¯=’`Þ%6aõ:×_‰ &ܱShDäÍ´¦Ñ2àŸ{߈sØ}®°MËR¬^ÙÞZ +ÑôðP.}€ø¢\ÂŽ@8¹fmÒA£.mÍÁüh8¹öãÒ+ÅÈR@\®<\îLÒn-!r ­•–Th›þ½b|2{&ÜØd~Ã|§ :ðˆX‘È¢í¡³O+Þ§¹ñøíËo¿ŸŽØ,KŽÙÞötÃ÷³dh}ö¹{À͖â'¯6LǁÇAý²\­šë:΁ÆçÔ &#½¶‘{»ZXt«>Kì®gòñ%Û6åH?ÍßZŠêB“'âòl6D +›¹oæ=’~b¢(˜,C°ßN"-Ó Nâ~qæXÜHañT+žsÆøb1T(;•oMB…¾²ƒXò|§ÂUyr~ȶ* [YpƒæïŠÉT ûŸÐÆ1fH†¶?þ"æ'Äõâóìúà¶únêOAÌÆe拕~dÜ+xþ¸ü¹ˆ('µ/–& +)ÙË žíòهƒFžà¾Xh<Ðñ¶Çc ô‰Ï³lt®˜Ì7»&°{»ò”å¬N‰Ùµ2ÉFŒÎÍäQg?ÝEBG_ùOd?mô)7…|™µ‡ØÞ†°¶á>³NþHMý82I̎º§ã¨v`n½_“ØW—M¢`Lâré‰* o¢nÁ®}4ûmèöpÛŸg½Áî6Möô{8m<ž›z<‡¸mô“w½‰ØH( +;{‡aG °‰é˜Ÿª í¸ d؛FSÕoaòUÌïOÉV{íòT\“†×Åä± :ê€î¼À.RCÞÌC¦qµãuë¿Ê.6Ää·¥Óo ^ Î՚.£úNn»ÆSG¿ñöVFØ~0!øl‰áOøC|~’Ó~9e‰þ>25=©ŽÇ=¬—Äõg„’ŽõgÔI'%tõgΓfýœ‡«>`š<–wOVsDÙ¬gtõgÂ"_Ü3ºz³òI³¯gtõg¬&ϰÎC՟tÎ;՞AœG«7ŋbÈz³êYݽY³)ÿg(ÎíêÌúϾõglˊõf}G«?Q”G«>ý”7«>Â#@”€¥Z8¬zcÎ2ˆõgÚ@pÀÖ²†õgõÙr¬Ä3ñ^¬Ê”ÅêÎpJ8ÆJ½YßFNRGxV¢ ’ÔÿYF¾o„P†”àJíXFz³ñ˜‘1?b£Õ«V˜±8 "=YÙ±Žõg×±¹z³îªõgÛ±õg׎@rÇùä„üÜn:ìF‰à`ƒ@ÈÅò­x^4¨A©3î˜ ðÃZéß"¶¡”ÆÅÇA±²õÌÞ~-‹1mS×o„s?^/¥²`õ¾3Ï[ÐËCöƒµÕÛÃ:íáa»; ±f•:ÒÇA £|Â94z»{ôÄ|ªö?Çzû„·ˆeHÔ#§aî¶×êÄّãÔv¤J»­Ü×VÖñ짔Ÿ°‹Ý!är>J|gþ×"‰?þ¬FÁÖÈO¢ЭžùÄb­ž÷»¥‘d‹üg¹¼ +<‡¹½ÒsaVl?ë{›ÿpÃ;ê_R¿üo­ù%þëëùË<¸)8®}_cq ôÈûŽ„ù˜øÖql³ËÒ£Н»îQÛP>Û·}´MfíÃþRÛÁœVÓWãL(Í ÙCd0ö\W2tvꜷ;‘&ÓT”  ”ÿÉ1Yü!<Bچ!W^ôAVÿÀEd˵ë&sH,š069üA<>IcLK2 ®~ý†r«&)¥LbdÎctäBÿ‘öoÅ&ÁrdÕZ°Åi—³VÃ;À–¿ï$”üoäÅç"Á•y÷Ú±ë?è}“þ§×?…÷èŸàþïúÓAü°šüÊ̠ƣJIWc}jÓb߇<²Û̞ã õu=ðÉ*òïŽ+ð®¢{û„ÂPŸÿü°Ó÷³ß3ð›yï˜ÀòóE§íæ¹Â`–­ÚMÃýÞ? „޶÷t¯î>ရ€ +˟÷yŸåO°6çýü±©ò ûò÷wšÀ¤_Õ[æWN•2?ßø‘¨{ÊHCæ3}~hvPH©òPÐõ•]¨:¸Ù»ù#؎ئÔL-Ւ,oáë_ʞ‹ÀbH%BxšÄI=üç›ûÃ},‘ÛNˆÝ Yt+Ä"R>µÔ¹ç,‚©mC2Óˬ¹—†U“†x¾û礓³&ˆÀ/½öœ…äת„RæVýÕ9Bgs[2¨œ¬dû°Öò=XûT +ÅYà^[çÍêǘAK+‘ç'n}Xâ¸ÃÎNüN0ýú;Œ?žD­'«¿]8ÃìI³£¿Hq‡‚Mûõӌ?dM˜õӌ>Œ›_®œaþ±6Bœºq‡Æ“fÎrCŒ;kôwàœˆãÀ±oޜãèÎ]¸Ãçç’½œåی>rsàq‡¦œâ¸ÃÍNCq‡¨œˆã€œ†ã½›ˆâççM•4KÅcÛÊn#Œ?18N0øÈn0ö3|‡p_ïîœaü¹µ\aíæ…Å×q6«Œ>JlXyÙ°pŽéƒ0§ëÞ&%i²±VNj3Œ>8›4sj8Ãêfâ8õ,OO5Æ’n;Œ<+íˌ8@ÜÎã;7!Æxrïø¯¿Í ;ìo âwÇpì>KfýæûÈ÷£‚§½Y}ÿjý¶3 =÷ކQü¥.âs÷Ú¨-²?–^[¹²=I!>Ü  +—Û©I?AmÍ&Ü«G¬ö¡†@nòSQ‹ùåx’õPü@’Èn,N PÃ;ƖÃkÇ¸s•R€ÈðR®>7û·²|æÒ‹æäïæ¾t²Ë¹Ÿ™ìªÉlßrørEã +?);ٍ’Ûcr&6Žˆœ|ŒÐŽLDÂËhXZG:|h/êa.ŽþÕRs×ÑÔ_"IýµvØÄA(5T +àÔlÙ·=<І‹y‚‰Jào…c¹‚vc9ùN̍’Æû@{[ChBÐ̓fWü +¨FáρÇï¸Ö+‡Ìë¯dˆþjvÚh®Žýš¾ ÇZZŸ¹{"ÿY[+û‚eäY&zhw +Ûeso+©½¨ŒÀBå½ÔˆÑ÷Ë«Šô‚ìMÑT j4ӑ+ÓúdK߄hø¸ºO>4)襋ðNyT±X^XPž¤'ÈãÙg¾s^22À6k[^Ι@³LÎZoKÁ j’S\‚ÎÝ(Ù;w#~ -[%eõBÍ]_¼² + ø‰ìOðj¨¾ýæÆ†H‰ƒ‡<4§éÿ†ãÊ»œs§àk„Å>´Õ/½ 8¤Ç8Åa/O<Ñ=˜ÁK†TÎþG‘à +IBž¼$`LB´7ø\¥p“Ò™ü‚î©x0‹×w÷0:€Ã“ÇÇ/6)A¨Up˜ÊOc-¢ÜYާs@rg{h‘œˆÏUflo˜ˆÜÙ_ `ýkM^NþPTnð&ÛK"¯€,ãpÿ_ +U!àÁ‡hãÃ+-ø¹MòL¥ž07嫹“v4׉¡ù•‚͗¯flzxKyßø#Ϛ(õ‚§~Yu ,¶¶#w¾¯€˜¦5oŒ„,‘k0z9Iø9ëáæƒSy/´:uÜ%,‰×†€ý€'Fâ§Â—+#Íúö2 Ù +‘±Oå~\¬Û‡OŸ8Çñ«áLUyí3[.¡Y!* K9C—¸+$1JR°ñGÜ}_BÓT“G 5Y0¼­#ýƒMS¡¥ԌÀÌߍ U~¤ ¢Ùåà&·¦Xó+¾ðØNL(ÑÎIý A󤨟³¤";»Òe°‚c^6G®~‘±ƒíQ–݉^T9k¡‹Ã;›}|[<ϊzâÊÉúGþ°H_Hi<4‹§þ5=ü³MGl3 §9É@Ð[Ñ@úÍ`düЙCjëø/(Ùß4oÔÃg“n‚…Iè7+ЋÝÃrÓҖç½%Â4b°Z‚ŽÚzÐÿb—èŸ\©ßº«ð ˜mWÁÂé¹§|ºX=»¶Õ{É'w°¦y0¡Û>µÕ^½”/Öè(nJΑûA±‡o\è)½ÿXè)PO¿Jƒõ;¾u½T'[/WÁ¤v_¡æ@Írл\”žµ!*ÅÆÎÔP2¬Ã84ÕØä`JVÓ¤"ľ‘͘™ê¦~sü§U~‚à²I´Úíjbzm”l«àfšv „‰*wcCŸ˜¥ +¾U¦£óÃ,磌àfw|æZjG +Հ“ád;µá••ǁCòA6N?ØÒOô6ÆíŸÐÛB½›kú.\9ì·±Wf–úÇË’ÅØ¼Ý™¿nÄú’VôŠ6º ØUyÂ~²ƒYJæÀLo¬ ¼2@ðzbÇf +#€6m@߂•š>Ûà,žêwô͛‘‹õߟ"`¸ƒª½jå4PÜK¼Ý³šµ«Þgjö3o$ÚjÁiÏCÉ·}хš1ºŒð;ªVÒ;j’ÕϘfLùÀX|ùê,ãçÁ²gýûÚY²Á¹†n‹MU*øRPà2åpr£Š_pÇwc,]#̳=ìä7Ð·µë•ÜÄ®M˜nbÄû˜ç­¡Læ0tõ´Ý*ÂæÛŃM]è8,6æ/@ÝÎÄÜ Òl¦ò’â¡Ìc”¦$<{B²±Ÿb4 2M]˜tèCpmÃ%ßµ=‹leEåkç;ì ®æÜ\›` šjjxd)ʉš\N.¥KÒÆ=y®v¶×MqF|¹ìÏ/Ts • ¤ ³OIW­7n{PŽ­D¥6ª ˆµeA«ûâÔº;Pÿ»Z±jB;W°Þ7¥ñÚ¶ Ô%eî½í_¼ BYýëØGj”7j(ã½{íIW SÖæQÚ¯`Ô$Áf½œv ·‘\¦¯’ŽÔÌ1j(cí|œv AøíE {¯”ŽÕӃP–`úùXí\Ð5 Oۯ䣵 ڊ^Ò;VèÚÑj4të_-«T Cc¬E}ê;P*&ãfëD9PÍF *˜v»qj—ŽÕÌPñ>²&© jÓa_3«Ï6éK•ûÜF ïÿ˜ÍFïé_|ŽÎÐ (æ¾j;=@3â܄Аj&c®pSÈp}¯ìz%PØsƒž÷’ÁBïè”Fld‚Ç.H÷"ûûfÖHi”K_îû'«e ¹Ó¥ü Šq¡ë§œõ†4þ†`(6hµ¥h_¼»šÖ>í€Iï}Óâ¹½? Õ  ÛúÖÁœhx¾õAJm_”¨–zƒÚ +5’G« KŸÐ҂ôޔàј#ù߯$q~3CJ­Åá˜àt cÁ ›K¾HYnÙÙ6 ж'›UýÍʫӧ­wHÔƒªS–Ñ¢V`uí¯ _<¶üigÕ*Ut/’6„Œ"2¬@-D'†CUÔ¢þ)7ïT˜¶˜néÓÿU(S§\4ý†‡!¦CÔuAì•~yʅ˜ÂaËøô‡«´hÓV½'ACÌÂ8ÜSr6Y¹x G ¨<–B‘·Ô[;F¸<ïµË^aC$àœ…3dp€þò*¿hœ¡éS5é:p¥xðël¨ã_ócg7ƒOE[„mÆô*ÿ¸äÿæ}? rüc“ÿaŠ8@H¬Ϭ 7¤¿•ïý'”Âª†r‚WÏ/Gæóõ5ZF´UUU5Qdde•NQ*›#âIMO߇áý¬Œ%óK9xÿHÕ@+UYqjüT“ùô+¨ªá‡WNøåô**èÕg´Ìpê~Xú®UH‹Ðæ*´jkyOO›ªkMSR×+ŸÌTT*{ÎßÐÕgæâX­€£;ŒÝFn+BŒüþ€,éÔÐ5ÈTi49Ñ>u.ês55¶‹)¨é©TùŒ¨ïC’÷K§©ªw›Í,J¢«7˜Íi ¨9ûóµ.ÕùRíç³ù¶µ/œíK\þcC¡6+÷ÊfôZˆ“Þt„HýM´áÈ!“èê^h3JðšÏfæs¹pííE‰Q0wSPðÙÆáöD½ MUSÍ ´žxí­M8g:—•FÍJív~ÍæCNÜfÂÅzâ” iP6]ñ·Ìf”Ý^W=ösk9ý‰æ‡CR®ÃÝ’ékK˜ªÌg͹•*J’¤ØÄM¯©bÅÕÅ)üÕÞð¬Güp,v@+ÿ%WÝPSú11±=MºÉÊnmdæ'²qn-b¡¾úfI3&d$€A ‘`„RC ¹™’¢°h·Â–­”µf ŒY'™“ç/­vÕ¶ú¶—jñjßZ§ª´-k  ¤PUkô¸€€>ýû÷ÿß}™$È@€@öí®ûyo7×o7œÝèï7Ý ç7w›Ðßt÷¡»Ïo¹¼Þ†õ7§½=æ÷=Ü÷_{›Î^ç·©îžÿZp­¶ë¤¨uú†Tëöêuû݇b°šÎ/ßšwt»®ðN ÝZ oÏOOÐȧ©Û+ ˆÄ(øaÑÿaÿ]Q©À})¿õ¦ÿîØ*ŽÈäQÛHÔøõ~þèþ>óó]ßþ)Íw¶ºÜ§Êöq~Wäè,z½ŸÍçâÈQ¾ÃûŽ`öž*Î.ö—'~©çQÏÙà¬s†{ùïà—»¾Fü¼ì£±‡Yxüe+ÿ3w›ðF‘/ŠÀh®!ÆmZŽ.#¿ùŽ*ø³?ù¨î?éRßýÃT·u\ʾ +Š{ƒT·î9•j8¤…w*V½¥4¾qª[ó¹•-ûƒT·î.*[òe0òÈqç„*ä;lj_ïá]ŽB5.»¸2‰Ho¹´/KA¹Í¨‡«ÓÕX°±e½Œ¤Fv•|2Ê'6±e´‘=÷âÌGwö–X}¿”K钓›2hÿMãM«“#KP}Ò0 )Î+& +ïnì¨ÈP«/ô)0Q¤5Ñxg'’ß(Ù#¤³Õ'¤6TûÁeZ/<žO§¤¡º k&+bEt.”ZwOTFoF1M,æ—íªá’*e©cîu.a]KX†½qš/"[gi½”›þ¿µ‰d~ÎYê-)Æt)¨&%ìÜI‚¡r¡óÚLSñiHí´ “Û-ä ^'žG¹ Öž®ç¹Ú.8æ m]„‹_½Z3ð‹Z¯ó Ã\æ?[†Ø¹ô+ä8p±³ËLëŽKȤ-IÒ±¬´0»$ãij&“ÑÌ¡1¥Ï‡‚Ç‹¿òšeª +ýÕ›þ +‚¿Š-ÿÃ-G•7Æý™¾7þ9¿ñz×Eu×R§ÒxUÏð®N1zŽé×,!e*4GŒSp£ö>;Íàë-]âç¶>—Éîµ?ҕ«ÅD:X2—¼ýK·ÓQ”R‰+ø;—„“N“ÿ´I^"HÕ£¼—/¹xDÕJE_UÊ5fãdÚíØÆ*þíÉî^ AÅÜ©ŠwÔ¥ÛÓê_‹‘ +åýÙ™˜G®Az¾Yßs¾ Œe…£#_zZU¥6¸#óܢᛔ]ƒuï -må¢EIÏ"í<[†Të]°ÔÏ9â:䷒HUê¸Í¢œ$ÓP{Id»Á\ pȒ°È擶_Ü>ŒOûž=ä@m§µ"ròÒËAÍÀqWB!©RËë„uP¾õ¤>õ³L‡´.è|éC7}mƒÐkÐÀBZŒT¢äŠÏù±Õ̏·PÆfFPȽ #—¡qp³eU.×yW>=šZY5YS)yqóÊHÊ&´zŽ; ô,æ×G§&QÓÓñº%- áý|š©7•y%-·#än \ýúA"Ðl1íVAcíKPR€h4ÒGbFÎ÷m+^óÑ2 ï”x_ÐIt'ÙA¾UÀã{”tÒñ“§¾­tÞænwºcßy‰ÿW>òÞ·÷šÓé!O֚ôÀMAh‹Ý|îl, ¿fñ=]·…’„æj>: ´²W¢â0’ú¹Ð,rhe×Ô§ëñéúlÄËð†£¡] ¤gÔ(ãᐽ64cKÔr ˆ—®6Ç«t_[®¥Ïîå^A¶a\ÇF¹,±œb5©t)ø±:Gà ,jA%™ÜŒ¡·D³g2_ˆdƒJ}uäՆf$Î8õ‚D¶çð‡p™è‘ôSÐ/nj:Æž(¼®¢ém½ÞK%‰ÝF: Ü4²|K>Ék:a^,7ŽBé=<Ï,ÜÌý™Ì±”õ6Ý­7Ñ3pGOpà÷˜"oÉîe[»?µÆŒ¤ä¬¹‰K¿Zˊ.¼³-‰ºÄÍaž38ŽD·5Ðw³†Ø!e‰K¶• D+;á“Œ ¸Ç Óµ”£¦ Oy‹!¥JYO¶¯d*œH$«î%GÙLLßTLíS e=ÒzÕ㠚IXÀÞú *þ` §X±û³LAj‰y”‡!×xgaõ‡hCÑNYMfžÊ/RÍ:¹¥ëkÌ×Nz6p}<Ä(½²Õ+Ç?—à­éËÅh[‡=˜D‹BíÃ0 yö‰?H!½€Yî»8x°Iáz¤ýŽgz2Hâ"jÐ ©µ+ÕõÝZáíu¯&ʛġŽeó7ôÀDiðhYV¤ÉUp‹ve + ÷8¨Kg>9ñ))|­&q„{îuL¯Ï‰•Ó+•æÿ!%È´ûÖ—9'jX–&L7=4r¤Dɒݰ3Ô±‹ùDZܥµ |vªR[e”¤¾|5),9(îb”—ôUR’òäKÚ¢ëòcÔ5$¥%ë#b$'.ÊÁŽ u).IU).5ےѤl¾bõ ûêß4YÙ¡=öÊRS˜ó¡·‹U)*ЙE¼¥ef6hûƒD 9‘ŒI”v zª%¢Ñz5ÛG*D¤ "+BÓqúÓ0zÅ8YèPþ˜#³ÜÈùmëó=ªmë{YqÎc¦èï‘Å΀ýg ¸ëèùÇL1s¶umñÓ}¯æµJ@&L$¨Ožn*“¹ƒ¹›à(ޗ¸^–­Áˆ|( ©)R÷{„ŽY2CÅ2¶HÊ~ù&CùšÓxeÁ╠”Â:Ñ2ï ͨ­0,:¿XH‚•\ª_Â?6àëG‰úpríÜlô/%FÎöõCSKÔœóGnÿÿ!º³¿â¡ ÿBO¿Ñ4{ÿ} F²Lf‚ D˜ÏDªR m5'û*b?ô”C÷¨r’ˆwè~´¢‡ŽíJ!Ø¡(‡\„D¢íHA<ÉD8/ë%þ‰T|]©dšö)D?Æ?š”CÁ=d¢¹aÇJ!þYö©D<ûؔCë*Qs8'õrçè(C3þûöـ˒ûָܲ¬Áþ-ã²â¿Î$Rè{¯)C0”늢©Å7e"«å²Ú¿Ø”_þªŽ¬m¿¶‡Žøú²Ÿ[+Žúî~w™áý‰ªÞjPÍ¡X⨪ñhc¿ç¡`ԑÿbRÏF¿Í¡ÊÔÝ~láÇWëÊ©+¿ œ„†¾)Ó]ÂaظÕàN²ûø2_³û1?̯p£œs¬÷»9r<ác!³ÿ˳qýÊ0^\Ç.Î_–£Šæ—ÎÃÿñ¢ªëB²û˜!GWŸ˜äÅU‚¥ÛIϒIÏÜ(Ád¸£ïqÛ£‹š&øµø§^á>úó˜¹VšÎ=@ånfˆt­²Y£©¨K™Áž¿ø)ä‰äo`ôÓ`õRÊQâ!º!†Dý¹é†DPhªxÒ³N¡W>žËäÖÙsYæáÈ+¬Ÿâ0 +PV‚Ï5I}QPÄå/˜7;2¡•[˜¨õ<̪ÍËÌ,ëbKFÖ%„¹Q/PjâüR)(-=ZôúûøÔ‰îͅ°ð5ÿñóoË͒7›2%Jƒ-}pe.×õ\ÐȬI?ŽCäs«Z< ¦4îõÆòœN›…Ôjw.jBÑÆšmsZy³HhàV‚ö/ëãݰ\>Ÿê„;f|&.àŸxó%¥FÙ QÀHi›}È-{ FþțÌa¶¡áž3,éiï ³›1ֆ–f –†õo®í{S:@Š‚3XpÅÁ=ˆŽÖ²ô~•i¨cꀉˆõ‚ÒÀ¦žšÉÎÍÓ*5ôðáh䨸M( xÇ`?Ö3CW0V2B¼u8Ób:D»;ÐÙtֈY¾ ˆØ×¢ì÷Jç'>‡»úkJK¨úŽ!oT–¾îr£ß’Õ¹¶­g%²~È;™É~§¨êΌF][öt™¸Þƒ{Í>nÉÎ9=ûTñ¶oãSÆÙ“Fz^r‡¦œ#ƒýÎúcƒÐ½~Øàüß“}½-¾¼ÚGý[Ï鎵!Í|8Ó ê›/4œ£07½d0÷âPˆk7ìàô»µUcµ WZƗý³d\ Æùk£¾`¥B t¸c ¸m—×+"%³FÎf$ðH¬ò5©Æš4óÕ!æúîgÕCûp ²X{ÎØB…†Ï?Á†cøJ„5¿EÊô—a 7¯¬žÓ¸IæïÏz$x<Ç熴ʼGVP¢úæ@ðލÝ|C#4ez´‚ÂÕ|6Ä­­ _&è¬2ÉãdZ}9ùÃoÉE|ÚˆqãZmÒ¥¸kXøAŽP#<'˜´ ÅëÊ]e˜YŸ òQ›'¤Fõ¥à A©¨NH„lªW Jûw¦õîÈ#á6RÏ Ï…„ ú´Ÿ=ã :~&V⒩ϧïòyxFû†½Ø.0¥Ç÷éQŠÎ?®s‰Ñ¾ŽÞãO<‡­bzÇ"sìpYڂIžáLÈ*:š'Mò ‘+é»ecTú™`¨8½ë¸æ¯èßæ]ÀÄTu²¸j«`Œ ób‰-ô¢ºâ05Ãî µ¦5Mi0®´}7ðk +•µ„cÔa¹´ž‡——ëd%ܱ®ü#§´miý¾–ŒÕ¯k݉e@ß×|Íì ªŽÎVè ¾®Ö¤dIÇ$p˜~˜ÜüàFç¿Üü»Ò²ýÅzZî Zg,uš7S2Ì,ÂV‡©ç$ÆEHÝIõ#u+Á¡›–H,”ù(ÝIûˆÝGÿª7S8ÓSÕ¸ÆíP-džþ©­0©UMý´Ì‚iåÏ'ºÿ€Î±wÀ[wLAO2ÇÕS&qYÁuJVU…2¨6‡1̱MA¸v ŠÀ(éiÉÆ´ÛCÌ`íµç’q^&lËŸ Cp)Ëñ­§¸ <°Ef£¸.oUÛO3¶G΢rÞv]ô€Z ìhàɲŽ Ÿ,´yB‘ëuB@ÙÁÉÅǺo·}1ì¾2Xx¸EÏ»à+ãTÛ!tÛµ¦ô=ÒÄFëVw¸O¤S0T¿¹Xêí-&8}eje¸L{“%™Ý*ú•Ææ†1Ѭ'©¡—ÊKðª0Ûÿ2ÁM4©’!è߬K½1mYò†xå#É#—=ë ÀsoהáǕç˜r¸>å‰öì(òÉÙYB+L§3ëV4Ò¥|‘†VêV4d FD +&_~–òàáÓZo¾?ºTØ"¶€“”ûYnãZ—M¼³ h“³Y²õA3Vô¢Üó,dòX9´å4¾³aä»÷@Âèóˆ­%¹±7PF3lÌ3ò`Z‰ARiX>"TcÁfy²LÎÄ,ܛ$d;fíÀXëMÍsã®ú€–V½Õîͬ »ÇHß æH 8w${ŒÆ F¸˜Ô¸B\÷&vÉjvt?ê"Áß=ƒCuiMîGåáøÓêq֋X‹¦\§sv´n:×¢|žé^‰ë‹6°r6•£U,́½_¶æSïø¥JÍ$9»¿o†Ù›ó×ôÕ1Å«Y•¢Ž¼C^²MZR$ÛîeX&³}‰ 4ㅸÌ{rbÜÇÑÍ ]$Ê%ߗ߉µf·ß)"«ßQÆYÖ'ìp mQřqøÚ“Ï çMòŠ”(ïäÌQ{¨ }Â!ÕaÓ²6(Ð@샜N‘y4-ª€:nž¡|´KÛ¦]'¶Y$93òdÞEÇÁSû« ô»[ÁŸd®†Uƒ[¥³Ú­¡¤‹CÃÐÜ(š6ãC}8zV[»¡’- *6qd–ðDÐÑÊèeêènš†§- G$k(æÖWDÏÙÛpP3ùyüñ›v¶.:˜»xæOF2ÇZŸ-[ƒf{’ZËn1´UMáYÇÓK‚ׯ¡÷ÒûR®ôºz¬W¥7c¶W¥7Wî=0|=þ¢ögNö€H¹B£.–eyº]΃‚T7Ksˆ¤RfîŠ{íïnєV̋+»¡Ê•@³Xƒfæa¨t€McÜÒNœ¢¥c££Ü’T¶ŸÏ텳wâCRŸ~fÝqõ\–·õ3¬áaá¹ÝæåHÙkdažôP«3@²¾ì 2÷{r„‚˜âqܛCf^l™Ÿ5#m&gÛµÿ4™Ÿ #k&gûmë&gór¤Ì긻ºXë11¨ÇÙ+e;X;—õ+;ÚŬí+)´ó Z"ÄU-³êÌ{qV$¯±&>犱F´ðKŒ(A¥x†w¥õ-ô‰÷sè.Íu-ûoIJ¾¡3Á²µ˜úä˜úþ9´M¡3ˆjÒ¿Ç%ŸŸŽADš^Ñ SþJt_dÒ*¦IÙV•§ S,g†ÒÝ ShKoN*¦XÎѧ S,e N*¦XÌCN*¦XËÃKt%M¥µ:/bÎ"¦Y·°ÎÝ SisN‹èY’¦Òæþ6|Êt_ÄgqN‹€yU Sgì­N‹ôñaKa±ñ0w¶jQ5iѐ̩Ñ~™šÔ較>]:. +f­:/ºÀāìÖBTÉ?Ôú¢ï[ühð§Eã +¯ÙǕ›äñåiÍޝ ÝD%N>-:/Ҏ€½YG~ʺюâUÓç iä6ìCA­]>öîiô#­êéÿŸNÚ·ýĽÝk/ýDrÝ#¹ÃlLKÜ:èàŸZu˨ ãê†ÊrØ=C`´Çʂ],6“¬¨ðrPœŽDšÎ4Æúj<ð)¦¿MS÷U’¸E…ÁZÑ¿5<·x©/x"Çþ¢úš=@¢w×ßc¹xŒ'hûÀI¥:Ǎó ¨ùçˆãåIÊÜø‡˜Æ2YËYí'Eqª0 +ê$;/Õ r×*F!˜XÒëT%ò+Póm0SŒ€ít騪l(öð£Òû͂Ãô݀!Ïq«gº†#\v(¿ Ÿ—|"«ãȇo!\/ +¶¼¾)póYx¶ÉG[”ræ@!¤†•’Ѝ´µì¡¢`“T׍§Û?AlÚS·c¾Óûá7Ÿ"‹Ãrû%VP§µíž¢U’z‹“²¥ô7£)b°Z'¡]ÙÓ*$ZÀóÕ± °Ô |hÇÍ_÷,Kís~@u(TêÓÕf§ÀÊ˱6 Xûù$ÍIVCTdì•'ã";ø0u.ˆwLIÐUƒ$c2X¬j{ÿècìÞ²ù RªbchÊǛvÝ¥x*8’Å0ꝒËí›Ç¨Ð֓¯³†«¿ÌCC6Û´i?ÊbU\ýÕk"¤J)ïúåƒö’½||[*2è×Ú7Ýû–ÇwŒS©ûXÎ;c‹Þ!Ælq|iP™Ì¬sïªñpDÿ×*å¶A<ñö?‡%±çÄK·íe¡wõßê²¢“XmÿQ8ëÇq%èd;éÿóe:ݸÃ+㵕µ(Ú±k—íN½uò^¨Zzçç£3\¿æÊ÷Ô\)ð¼EµÈÄßãÊôýüÌu<¯ c ûöQýŽ×ƒ‹–9ªëÊÃÞ,°^#\³ßjžg s]ù+$0}ì1ƒ_ÄkFø¾RÿÊ6=öú•,³æÊüù«‰Z’¯¸©ÁTTà§ý“¼YZôQß dÏðþþÏÀˆQñ(K3âŸÝ¹úf. u–Œ~ë|eæ8”sÿ ìh²ÒŸý¬f?>¹iZ¦QÁ,³ª?÷1˜ðbïá¼ùõܹeœÙ«„wrÝ-=oÿçM͓ÒÊc1ê›>1m„`\Ö°,Á¥rëi­¤§×öÀÒEvˆÍñ1cvt,¬>´õäeô¼%Ç*hþa&j|⇂¾!»{Íà̶‰ÆÏzZ ˆ„ö䠎yõʞP<†HÕ$ +v>;0Û«0’w™¦.³7siŸûGD–™(vp±å'ڝüí±Æ;ô6Ä>Ýj58µ¿™Z_ Š_ɼ§˜n@G77Ã6#÷Ìi”}·Úsñ»\ÿÎÒQx^[<|Wë§ÿc3RìRáUQXŸ›]Ñ9\íùß}´b⅙ÖS¼cŒ7Õö˯A'¸þ?û¦?lV:ÃÿËÕiû¦?}—Ž÷Ì6]¹øÓ=ÑøÞUN$q—‚þQÆ^=oü^¨ö‰%þ *o°Z c€ ¤¦c`ìav¹’½ Ê˜ȨäCÛ¬'¬Ò¥šÁÝ-–¯wž\¢ä¶pëŸb]¢û‚r8Ù;ø3qP1Ûv´ÝQ'ý ·ý€¤…OصÑQIÈæ/$f@èëI8×E”“m˜ë„ç{ÓZ—E»ÚâzïYsˆÄ\:GÑv   –sÐ\„& +1HåÁ@JÖ[•Ô´”Èj_áfŸ`Ä/P`A;×%×å=¿*2T;(#•™Æ¶tŽÐgq?ÂÅZÇó*€ùÐ$ˆ¡LʶމMõŒ;Ô³B_pԄ<½‰Ê˜ö'˜ÃŒ“1š~V¥¥`T+¾šjãúD!Q6ð½‹V¶µ£w.q y€­KÖõNcx +˜o¢¡i†Då,ɸÄÐ#×ú‡}š» ?!f®Sƍrf­>i óRޱT2Ÿ$€Ù4r`¡fõÉóŠú—JLBz$”’\(9Da1¥ÀI‚ÕÁ…‘ÈZ!zj¥¢€ôtáí.3N,Ò¢Ý +7Õ!ü‘rùxª”?~RC¼—R‡Î1½º¥ò ÎqU(wEŒCŠ©Cà „¿‡/XÍQüH¹}©I/>éñbåȬe˗F"¥åm™·T¡üîbåè 15Ïq•(yþj¥‡â*Pàzԋ—¼ÄT¡ìØ-/è0‡X2H!Z#ÕÁè ã0‡/íŒK¿ú,‹—ߋ—î¸Ê”?z²¥æŠ| +…Bʔ9(ÅãL‡Ö +Ðü¹+¡t 늙DÕ2ˆþÕR‡½–3ª¥ÐÄT¡Î,Ï R‡à/¶‹—Ik.Ou”båÈ DD‹—ô@^»Åÿ®¸¯Ë¯â¤}"ûEüõ½ø¼¡~bHöT†£gÿJü©ÿNMÃtl·‰-¡Ò´,íS¿ö*Q|EJ>-“àjA½ÅHñþH¿þÿ¹ÁHâzCЦ¾—Ñ^-p?cÙbâ«¶:ËÄí¸Ç~Ça+×ößþ¨è:ZgùªþÛújú uë?òµz þÔôºcqñ9Æ@¨ OÐÜwbLaÜe¹?Cp,ùGÆf,o¹5xæ à|ßûŠ€=Ú^ۅ ÿ¦$ùO4b®.=’ ¢€iœ7ø’5}˜á&‹ ".>¡¥Ð²›ña>‹p?Å>êzÖA×RžH°òchš Ë◕‰y]b‡Ê¸¼¹ÂòûÃh " bʁbÿØùlË•–.À¼¸‘´+í@¼º\º¶†!ìÕ´0iŗZ6ro/ áB»ã«-aXIÖ3©Å(‚»ƒ‡ÓòË£5€a¯Š‰.ƒ'ÑÑRâfû¡H»GÔ ˆ‘ÑÂmEK¾ç‚Í_Š ­`‚2é¾±ü*)ɇÀh'¾"ô½‘´®ûLûEE’äYõö¸IêH•g§ÜåãbÒ"U¢w)ùŸ²¬ÚLì)q­$3 Ì-@Rt+y¾Œg—”Nil°o¥ý} é‡ÌCýÏ ‹JééK,ô„Æ9êSÔ-Ÿaè©fð nSfð`õó5/¯Éø¦ îήj~.x,û(Ôd?óÓȟÿx37èV/] +5ÕEÐt8m#a*è†ÚJÅçWw}<æñû0™Ñ"%^'llLÊx™«\MYêŸ$Ÿ÷4)9’~4`*z¨œ"^”c—€—B‰ŠYÎí°I:L~\’ù“·q|˜u>Œs*û¡¤SƒÑIt3¦Ž£jCãÏO  í›A±ÎÕ*þ•oö ¯×†àØÊŸVùë‘"%?Ô/×p2n4Nftiçq¹œÆú¬Ï@ý˜aÁÒÙ!Ü_ t0Ô³€>’†¹çOE¿ÒŽï„iœzf]=›&3O=†Ú­³Útöy>q·Ó?Ú¼Gk ­{ГêÁGX–vuRØ4aˆZ ×Ë® ’ì²ík_/k÷ôkZX‚ò^ÞÒÄ-Z2^lMƒ<×0¯fŸ1znKÁí +Ÿ),Åâù• Ûiæ?(³RêX®­<©Ó Ð)bxó»W |»±>WN>–á3`©OËUëšH[ږsTž¶â9éYñ*èâð.û¬æƒíÖµjKÁ:®X­bBÏ<Óza.Œ+ç‰QTBÐGõ‹ŽD[Î2Š•¿@EÌr^Q–w×htMÁãê´}ÒÕºÛ]A0ž «ü¡Ü×kDÒ\×À˞–G‘¨5z½^ˆ)gûôx÷¢<+±ß/ ÉK á¼`œãöFñ§ÓÖÃä—*ø~Õ`ˊðJdÅ´Ë oky7 H­ä²Hõ<SÄØïUòmüÂÉm«@Ì þ1­.ϯKÇu +ô¼$üZî ºa$Ÿ¾[öÓÔ%‘YԄÌ=ˆû„X‡’u¾'Ý†×'Ç(LÜÔÆTŸ²yKXŸo‰Ë«ýµ@WD𚤤&Ä郑9ÿ¸®(ùsb´«Ég÷ ÀLõ<žà‘+þû؞ÿ÷Šù+ÒKx¯·}·­ÀoTÞ½€Žõ$“AÞ¬ˆ“ûõ¡ l]Á ‘u&ÉÕFM´(óo;°ÞwS—²´AP©:×UsZhJáÕGTºïñorì>“ôâÁ-Chÿ'Âf—H¦Ú½GZ–&á_ÇÉ)ùgŽ"Ññd•û +?F¡µl.ž©¯Ò«¨ø¢žJGáVÀ ­ïŒê¦è cc"—cng`ÿ»»‡Å?³»7DþCÚÝôÒ½0£¨ë¨ƒª:¥¨Œ ùc-ý—ó=ÿîâ{ÿÝ©ÖØÐ¥(«ë©r‡•¬5éë˽S­œ—§½6·áë>GQ:íÐê/g@xn•’\én”ME¼Ué¥|Ðó›¨|3ìwFpÏMƒW†|!mˆ[ï½£IÙþúL̆‘˜„2Bd“ $\É  F!Xµm +¬¢¥BŒ•*Õc荐˖žµõ£o½ê[[ºò¶EOB¾}lQ@óK| +*-ú Á¢O¿~ýûÿï¾ÌÌɁ*·o=må¯=íÞ{›Íæï½Í¼÷9»Íéîóz;ÑÞ{œÝæô7©½íïKzÛüßà.ïð4§ß{¥¶ËmÕÄø%½ I2õ¸'—U w-¡â»¼»¾zÇ1Ñŗ}ZØkìpxÛsøí;.É2ÿÀß«±[l_y5õv+&ŸÐ߯±·ßŽE±ÔÞC"ÓO͚W€ªO‚UN%j»,Å?8jÒGu#ÐJʏã¢1UÄú&áÇ¿àB7N„UTuÐ{"nûèýK N’ØË­[rB˜õ1êj甚žDe‰Î O":c}{Ÿw<¹sðfJçàü?ÍsìÎçó..~^‰s^©êZvãR%-oT;8a ðÕë¾ØpšrSCÛ×È몯:êôi ‘ÏÚÙ»."ûY‘ë·§Wv7îN¥m¸µÙ¶UJàY+§µ-ó’O–‰lŸf´M²t—P­¤”4ópchSÊ­u&œý¨U–†õõ´í˜gÅB–7î¿îQMÃ>&)ÎRE%›£-v‰íHž|ž•mf]–î`$¸´ýGiª@ÎxH¯fžÝÁzHöOúÈÈаôûðGˆ÷,ê+5ñªcÐ/n‹ÃVWÖÆ¢³fgxÁû]C gǺö–ÆWTõ¡iù+Ú]Q‡„üDRŸëI“F7~ +¢±ŽˆmQ¢tÁh‡°é½ý÷žšûTüÏLtPájoA¢†Ù>ra]j:ßTO^{¯µ¤H6r؄ì}X<{‹³ô¨–´}£°âà,YÙzhâïÕ$ëUŒ¦+έÙ<ÑdFïS ¦DLOí7ÿx[^mSû…8_?ž/Q903xý¯Ç熻c²:Å7qÔWfoãQ©/'ܔ¡jî,ër·ÄôA9ß +AOï4dª©Z«cö²ÿù·Ð²þÃ|¾_ýmòùÜo‡/íõ2(ËýäºÙ~ ¿É–_ù&oÕ´X³Ëþÿ…—â¸áfñ|\¿Å§ìz£—ø…?¸¨™Éä,Éõ·«ò<úKDµOnˆ¶çe½9‡æ‹r. s®OW¡ÃàK—ð,z”€-+¯Ã å5“çN®(Y§ô¹™“AˆÔÔ·òï…!”­¡h([ e¥ND³w5–Œêq$^-«M&5Lu´7¶Jmà`”ü°S󢟖0#ÔüƃXóob_5òe÷Ì史­¡¾ ;ªÎÐÌíÚÚäd x,ó´úmִƃKÅÚäŽÓµnU5¯°«óøu~ +Ð,œ·\­pRÌ·¸…¥Ý÷”ì*®!.ý†¦I?8<ŸÏ‚á~vì(®Ù<ìæ4¤J¼ˆQ½Ø4]œ²šϚYž - enY_c•Lš0"xS¸µ‡q0E¦·-yN6“*•7ÿalê{Ò~2ã‰›´êÖ:unZ<õтcFÃ¥@`©|5³~ÆqéYR´Öºh–µÕî3Zêùš|NUÇ7‰Ë¸Ø ǨåÜqÃqü®]ÇxŽŸ—q³˸ï#q´åÜqãqï}žUÇz_˸ù¡¸û®]Ǹޝ—qîFãéywKOÝö0jóÜñ¤‰áû×;÷\8w?/dßDšûRr鯨¶M5öZ¹Lù®w)ÊâTÞÓ¿`5R§WˆW‹§îïÈñ~ðôõSdoÖÞ5}í¨òJ}lAy4ût9|ƒö³éSÞËhìrØçžÞ~¾•<>dH%6í~6|¦í~5©íÚüùs D¶O »_ {ݯÇ6ÄYú?ã•þ8 Š@æãïØ'š32>þ–ù;gõ¥½Vlj'’ÖF‚ñIjê]Ÿ]hLÿšì³DþpÇk£ž?aq´¨vûÌO¿Ã—¯ÉbíÿL^§£ž.¸—r‹=EgŒ‡Æ2x¸›»S³³Õ‚zYQzÛªgǕ¯©ZÖѽ¾_|Mˆ_ZÞJËÙ¨¬ÝÉA­Z…u)À¾Ó ©¾Td„ ¾ÜZ#ƁPë×ñAVöùƒÓ¸e÷Í%”¨‰óñ`‹ø Á÷ߖàrèj=û\ë1ñàÑM~Ü®6BòFAíøeÑ©¦ô6#O d—Šu,4jl ¢yÑ)%5ó-乩w¹bÏkÔ¡JxR +ßxo S@£0¾U™ º` ‹c2¢‚·:jZ”Ø„›ÊÍõù<ÈÑê_©SŒ_v]bò%c#Ά9–;L°FË̏²&<þ4ìÑü?m’ˆÊµI 6mLÙ´Û +9W½n•‘‘ &M¼;}gá&Ó&õœîL;è4™0ï©ÔÏäþåS‰É‡~¦öEŒŒ‰ã€›Î‚ˆŒ†Íº˜váÄòB&$â}‰(q4.‘‡…„%÷*‡Q¥koy 7òÄòõãç•èŸl¤˜b™oº¼¤HÊ? +Ñ¢}Ѐ–o-ö³Âá&ȍ:ˆµZÏDžSoÖ³r§ëX¿ñ©{ÖYº§QDÿŸt-v3˜5蒈 AG¶‘]½ñŽ mlƒàف`3Ë¿©l5‚M~&„ø—TϹŒ®I¾ÌÈÆ[ +¯#wW’Ä%U7WÙ$•T½ghÍ*¬:åà}û_¤àõ:(í†öÕßì™u©í·Õ:håT€h°ý®mÀÑViÞóa(;þ½¸a5.ê©ô-dŽ^¦–MpÒáåÕÆäEÈ~zÁ@¼K즥`cþ&E¦ðÁ]AD5²ŸA0THò~oGÂ&ƒAè2K~©1K± ¶€ +‘hvƒ^>õCä>^¬èŸP±¬M˜)ZoòAÑ ûáª]¼jr|!ø¢Éc<8(‰+%5¦å䚥'ã§ÁS¬b5L?º +JWæÏu”6–'lí‹Í5Ï!Ù‚6¨#§©·¬;(P3/cWÌ-{ýHÿ!úšvԆeÔ¸{ÒlBtò— +–_ =²ÆWŽ “ëÃb]5´C(/څ—$ +3‘G _hâÚ!”ûe¿Û+Ï_q[~SÊÏ>w| x`L|áP{£¬N>ùÓRQ?ŸÑqÇÏYY}ïƒP˜·Â“YyÎ42VT ýóàe ‘uÄdÙÞL0á2SOòr+cY]óôá•]gäYèè:–rV ÏRM½g±yí; +œûíˆv':0üîTãÀ¾S₠QhtÁ$ùmzIcWi·ÞäÊ`ïE·dÀýÖºP‡ë?ã{²‡,eZh1¼|—m°C"öìÂù²&ÛoÇÎoò‘á1‹:ÕÓe/Ÿ¬$ßˉTóK–¼ä£*ƒšƒN;|rÑêIfd',Å]Í×S[@¼²Q£»®d5\ü& í[%c™¼Ä¿H¤¬=Z¯7>K$ðŠ`è°÷¦øSï9î°¦dþýl)™?¸öÅuïø"e8¸l½pѹrºµÜnB@+ž#'6ҕJáÔhvÎ8 F¾WnS,¬¿Ž¾ÇƒÌkʆ€ÝGüæYMˆbþoƒË)ȗX€kÝYMM²Xbþ/’e–<ΚFÄõtu݉sç Ó ;«¶Œªp¦˜`eœé—2ÎbӋçí@«ÒWt:´ôÊ`Ë@aÅ]_a|Œ-?xSû%cØ2’±Ñ1’±¤ î/¼£3J-Û© @µ»Y?e#†Š}ž,¸Â,•‘P ‹‹RÛ7†ß!Lzz‚—,æápåË퓱àBýøæGÅd¾ãà:JÍS.°ŠeÖ LºÁIXõx2×â`üurª~4@“öaËOVl÷¹:ƒ¤‘µM† ý–R<ªÑ-—64mTü:¿"‹ ×%ÆWt¥Dÿúò居ë`óÁ#yÉ+bÐÖRi¸HWº(qó}¢×ÑgÌËÓ«C žw«4ïdq¿iµa…ØbãÇ=e?r +Å=±}pÓÊJ‹Â¨¬ì‡Ò-Ù6*,Æ"‘Éûbâ_S60ÁfoŒè¦–îPÏÿÈÂ/:ÓÄb—”ÎWÚõ?Wи;X»¾6…öðËfâÅ­ÔI9 †(µ‹¾h!ڔ9Wc˜xãTWd’ïH®Ê Jºy^ԇyC?”†Ì!ٔ;ÀCՔ8à‡ß6Hky0˜à— â­q£@ÅPÃEÞÙP*.Þ1f·Ø*]þÑINŠ—ªâœès‰šÿ2;Þ»¥9ä÷§c»æáNÄ¿ª^’GL±S눚ĩ¤P{×ùvg]Õt Œ­§Ð$4ìº6PííLÍ\™Öp3Bó3B!¡ì`þqCùÀå ™¡N¬´p0N¬ºn¬© _Yf`Hº²Ê@fêË1ƒ«%Lиr1|€ák΀ Èô¡¡R.—*¹šü©™ ù s3Aóð욅`û©”àÛ])j< +ø{æ|O®,8.ùa\'a¹vŹ™¢pdi¸™¢}3sÜWØ·=Å}[uÌÑ:Ü"¶^ ï³äm'XÌ~Z›å šUºnG»”Ï£õ—“³Sp¼Ïñ`ʉeÇõ‰²n)”h—˜-«Ù,§Š›Ñh…{.§6–d՚1´Î)i.֎’ØLаö/2š²òÛbœ©iªjËrd±˜44Ó ŸÙ‰¦µÁ Ó*Ý]þã†è½´æÓÁô×3„nD®_ÓK¼}Â(²à¨™7´-Õ±§æÜõõ/X€€P=#÷G¨Ø×.É~å#`V)&ëð S çÚ î~×ðsjîµ/º/iŒôϊl6¹†›c¡7Á _ _*ƒ@¶¥•«tiº,øœÌÍ·»R×iºß*fßçÂ>Õhãoñ"GÕ ¢ËÈ=-øy@±ê7ׂlYKݗbïKkDRߨvCðGòô91üÍç +ì҇æ_â’>D5«"£5„ +Ç4#ʙ›Õî0&fõX_Ï¡>„~)¸P緎~Öò8¾ 㪾$`É'¥ËïzÀ¤8=C‚‡¼ÃyÃÞñh¨ àžÁKÂÒÌ~ƒ^«ÿ½ö¸+Ý ³P*¿y‘ÙÕ ª‡¥£žV±ƒÛ,gމ›ïññ©%S“Òޞ+­Hµ~iiUyÒÑ4ŒÝå} +O#7òò>Ð ßϝHÃË˾¢òƒ®Œº]–rÜÊ/Ý—iD rüþA ûjY9÷ù¬™»1+«oqW—3t—@@§—íƒÁ4µÒڍ|¯]Ðs´Ž ³/™ºÎИ¿^ÐZÿ1ø'HðæÜ™ÐnìÎÂÔü͔èÐj13 ÎD΃9AðÅ_¶Ü‡]5əÐo&÷Kø™Ñ™èMHn¦Lpû²Çq΄Ëvƒ)þSÎ#3£?‹…9q¼VPüz £¢NI¢.¹O×Ç$©á˸–»ÞòµÑA–Î_µçýÆR®”{ïbG¼ª"ôP<éË5Ô&·¯¼¥1«C.ƒÙÚ^‹×›H¨Ë¼t]-´2VWêTþq# ›ÀyŸ"Œj·üéÑäXQ×0ùhÒ£:ö1KŠ2ýïAÄS^Ë侇°ÄwëÙÆUG°£€Ô=€}¯ùàV:¬÷,jüù(ýz–A¡ê›Bû`“Ô™EàŠPöºûfâ˜óÿãF1|j +ûå'Îÿ¥‰tnUò"yW*ù:+Ӈû)—?»ÈÏÀ›Kß3‡ÿË6—¾gßM¥ïÃÿùîãç­ÿÐf×ú•·jô‘7jï!™µÿñÍ%þó6¿]ÄÿQ›_”šKúÌÚÿýÓµý& Š¯ß¿ì¯ö\tí©þäí~Sÿ©Úø´\x{²"¯åP¯ý;”í;_/"")ÚÿWþÄí~ÏÚN×þÔ$í|Jèc2Ü.ŗúS³ÈX#êñpDÊ0F#“‚/+'p£&@ÂٚvùÖâþ)ÜZ +wåÿrvy÷eI;<ß]'g›Y_ù'gŸW’žjÿʝž|ÿó'gˆbÜDìÿËNÏý|Úv~ +Aÿ;?Óà.Ó³ÿ€»NÏè0iÙü–í;?ÝJݧgá<ütìÿæÊݧgáðjøéÙû™[´ìü>_;?ò¥.Ó³ðjZÿ;?í¥.Ó³þŽRí;? ŽŸ°”»NÏÀømñÓ³úù;´ìÿ÷¤îÓ³ÿ‡'vŸãdøÉÙøV›ÕÒvº¿ÂNÏÿšÿ ;?}tìÿA„Ÿº¿’UÏY;?ÆHr³ÿ÷'2}v&í9“qÁæ'2|¤æOÀæ'2~òs&¿Æèa Š ±ù”ªÿ¬¹wåRù †—Ž”Bæ±O«¤K(•¥,¾)KSx•ÔIÞ!ƒ*GW™ýRåBLŠ[_D!Ï·¨V>hÎ Z:A§b ½Iÿš˜WýùÜÐ Vz!Àëcr·Á a¹Q³ÿCHŠ'“ó[#ÈFáçÕ»¨ÀýP†P~´|øyëX8`Æ_7Ö`u- †‡8vðMSha.R³¼Vƒ1Ê=!”óò úú%ù [éM:oZ†Ñ#ÿ wMF£9«ƒô* ¡x¬­îÄ4YõW¾±OÙZϝU‹ kö¼uÁO{Z†ŸÝ ?„ÔüA´«±u4Çv:[£ oëÕ*JpʒXZúôZeà)ƒ=m(‡>º%Þµ¾œ~×bz¨šõÆå`”ÿ?ˆa±Ýb¡&€ÈÐTMb•¸eFŽRZ²ÃÈ3ÏÎE:ï::ô9Ïē[’¦wψgX3"¥Ç)çdUé•c(ÆñJž\9/X©ÚÁ ªäUt&UÒWÁÔ,±}ÉRˊTÀÐ5Q­êµˆ¾:Yӈv¨2 + ¡9ƒÉ‹8kb4—Ñ4{3ܘj_Í ˆèF~)Ⱥ`¾©R¢çD4W9¨á‡ìŠ\2£Ðë-(ÉûÅ,´¢‹s +킵Ñ,ôÊA‹Qt'XTô£È¨³Å +÷%C-WÈ§Ü`TaÑ^âaÛĵò§ççâC,tTâÜqJ¯šQ +¯ÎÀvã„bå +Ù +Ü.Ÿß ª¥£ò’º×ÝOü~‘à¸?Ø3?A{«¤¶W·ãÈۈYn—·³]ºåX>Íð+sÇ"i{{9ÑpŷóÁÙÎWŠ6pó×^îÀ¬U¸Üš‚‹=Åіçc»{!øÛ1âÜðvgÝi_f=Õ¾Í{›‡’UìáÝ UTVþõÇc§¸aXloo Hu§ä8?™sÒÞ\Ô ô~Üqð}Ö'Îñlú™Œ6ZÅ£#áå»±4-â[nŠÅ\9äŠ8¥bM,¿¬V*øÛ,`•Š>VÇz8Eb”ì\t"µ[åù;EáñKÝ\ð`á†BpЊÈYqsÅÎwŐø¼+ÿªÿqÅÓí/}¿ìÉû®7ÿÛþ®9ÿτÖ+EÓ"|«¾]r´·ù‹™%Å~Þæ†oý´Æâ&³7W¸îŸx|?Ӆåâq»·¸Qºrù°ÅÏýdܽÄßÿîOå×àϋÈþÞæ?‹wÃCi¯õ•É4oper}ÅÇ{‹Ž`öã‹ú‹Žvü{çDt+¢ãËÔ/Æ.Ž3úã=Fñº èÞÆâ§JÿrÅs޵0ø9ù79KÏßÔ+ÄW®yþŽ5«¾]r·F¾_Ž| |<»ur l~]#öëð$Áé+·‰ÁºEtÝ/ÿ)wüÅ.ߘ¥Û®¥ÛòD®î»·ä%wiAÛ5°X0¸O4û^8(ëÿó“øñ­jõÚ5~$ëÜës¼Z@¦A©‡å±©úÉ6iIæ£Ò“ÆÞR“œ&Ê¼áVá¼L7>=,jA,6ô–qfòûXßÝÁ|¬ÇåZÅ£Ýò)`”È|™‚¦]¤‰|ªØ‹„ÑMð÷U±guwE/$¨ÝÌ(wR¿ucFC£C¿ü~ýÝùM#«…çæ’kM+¯âϜ*T_ ò!Ŗ>VAÝbþG¿ûU'‘Jÿ‡J¤ÿ¨ž‘Á(”h@PøÌ¶Ã†€‘Ž©mòQC”üU;ÿP×îÊ9úôª/Ê­·ú›ÚR½CD¥sRD–¯êTykÒRØÙÄ¥£¥ 5]#‹‘üµBž'¬ëöš?¸ÿB·ý'+ýµ½ÏúD‡úÊ*úÕ ?êT+âó?ÿÓ£ÇÍæ«žê1\ç•~mÜnµ^gËÚ¾Ko{ïw 4¬·ØÒ'š6L‘›G|öÇÄ8ú³ŽÐڄòüã¦qóÇH5ûc¶8úóŽõ¡ä9Çþ«8ìïfhÎ>hãéŽ>HÙ57£8ï>pãèN;£§8îN=™ÇhqÓ8ìÎ>Žúa©.˜Õ%ö§sœwlqõ^qó†Å¥ýYÇllZ'Ôz™S›óÜ|ñÇ՜zs¸8îŽ:XT»Î> ã³8ï=·@m»8û“¦8ögTqû³¶8õ§†qô'¶ò<ãÑvÈÅçÔÚ8Ü}ÉÇðN?†Žà#Î>¬ãêŽ;sdÛvqÐËR=1ÇC-ÜêÎ;ӏ£8úsž8û£Nqܛ.@éN> ãº8ò~1>cA@#þðÊ©¼2€G¯o  Ú·†PӘ†Pí‘ð~"dãž©š†PØÍÃ(yé¸e®n@Cî&á”44­üK¯ÏâWæœÃ( yç0Êúr!@cœˆPç!”>ä2€Æœì2€Çâc¡”>:@cDŸ°?Š3‚ž†PïÓñ +œü2€æ‹ý{?  AîýÐ' Ï7ä ¤¦lOãa`²Êœ„2FÇ#ÆÐÿ1÷¾Kïèì¨{ì~ûW7e¢îPÊÿp}û–ú{RZï'/¥ø|ç;CÁÂ6ç{gӝ­3Í6Ë7€ÌeûL’Ÿuž{zïëö¸¬·ôsžG*Œ­ÿ´;Aûª¶|ZÖŠªýÐõÌAªùŸîgû™þ湟떐ŽNƒ;†ô?oGöêÿÈÎâ•ò•í«Û×¹¯ž¯u^ò¾–¾ž¿9_ž¯Ð×èëêëëkôÕúzýGégr«–¶öË õ††ÃGaWa[a¦°ÓÄgrÞÚÃs`…­…´&w2¹ïg»×]ëÎ÷ß Ú:óæ³ÿÚÊ_ðªø=çÚQï4ç¢1xu$¢²+¦žVðéÆE+köGîïëuØÕ¨Ù!ÿú6GÎL­E}|;Çé£d|‡ø\öÙm/Sÿ‡»×èfMÐs>ã; Â^ܒ·vÙ϶ÊpN€ùâÐþs“îõÁ\_m0̗äÐïb­Ìù±ÿ¾“FÈÿxä®Ìÿ|…ÿތ>èÁ³ŒJ÷’_>Ðع6y¬¨Õ'ó'EZh¤ˆÃÿÚHŒ?ý{\˧¶ŸGYëñ€Î$¹Ðó[,vÖ€»ðBÖIx·Îb¹ŽÂ!¼¦Bþ&_b5Ýæ–œoàT´åsÊ^¹“ºÇ(5²K؜¯pȰSí“lâúB÷|”(4|”-ÄSPÊ?”P¡¶£-Ìà±Ð¹4çþ†xê/:…â*tð}IÎqÝ¿T÷Jø}bu 3 Xô$À”`gàÔݐýšú;‡£SuŸœ 2ÏV†Ð¼:(m¡t vƬÌUԆΠ]L`õüŒþ0>¹Šør7)E4P}ñIë°lÐýõižƒDÌÉ´?…Ð0BøH noè`€mÚø–É«O‹("ÙÛ^< â±peMþ•rUøgv¹ biZQóɲ™ýrÃù¥Mi{‰,+Ié'ðdô)E½{ªönd÷QìœÕrò ž÷1±$öé[v2 ºûïXÒv³32LÄ$;‘ ±V(­€± ×:NÁîEŠƒWÔj)Y «R†b@J8܂ÌÎܺë]«î]®ÈWÞ¥¾¶¥µ°iU$$’‘AjÚUìz"’?¿ßÿïî÷2H@¢ky¶Ûy¾ß{—}Íø7âÞ{›ðnü{Íø7ãÞnïàg¿÷ìßÀ}ø÷ðwï´ðõëd–ÝcmÈm"ݵk{¥üÓAònHn´A3”l–«‹Ç¦]¹ÑŠ:y—WâñyËí˜ÿ¿‰€N½Â§"îÇޗTí{oœ‘~ç(!sĻ喃ëW¶U ¥u²gKáës(ÖØ>·k[#@™<öÚ¼2(‰ âËÔ +QJ†Î<øù)õÌ™i1“zS)•þË4quW¶ô—üÖ×MƒY¹'7,‘¦¼,r¤Ü/‹ü㳞N¿ˆ‘,،-è¨É @çœKGޗâêú–Ž)~2Vg·Û¡h$üX:Z|ä´/°~l-%g3 AzV] A{ñWáä¯ÜºT%aÖÊüÖerÏW#¯äZëë œðdƒƒ´oÜÐ*ú7O»+jþþ'Õ&n ´Š¿‰ò•bh„#±ÒÿÐ-G«"µH('ŠU½¿ SÙ¿Ð"JõDÀ«Þà„l²~8ÝqHݛsseÝ?çɑ“ëyÉ¥Cº #BªÜb!±o©«5–7ê}ó¨Šò-dßCÇgzâ-!ó¼¨:V—­VÌ iA¬¸×¨·Êz£4ތ Qc ×FÉ^—ë7 3^ÝGg5ƒüüì ƒfÉs×Aœy´$âìrÐ;Æ0g ]yQ{ ê\ñp½›Ðâ^g›迯­Ö¾·´ ¼cŒõ½vJ3§ ˜»fÏ`;}rյɛbµmÝ5HŒëƃ~A‹´%“²Â Kr…/ +Íöb²í<þö§õšÔÓZëS;[™Çy¨±8Ù&å:È9c7.ÙÆe«Sµ¹å~›Hžá[üéÛïUïÿd'éî>(OP˜dårvûž%‡Æ!9pÉEåQ ”ð– +<‹§ÃÁ²\Ç&ÑþìEǀþß +}‡*¦Ö¾½£0øÙ§·ëY‰­*Hƒëd¿™‚ Ž&MköDî–õ‰¥øÃKxœ[p%Ø/t½ü=/ú#Âûƶ|—ŽAO»äµ'ǘ«®¸®o•¶M»°Ü—bÛ.h¸ä¯Ó“hGhq üÃzÊnq]¬ê»@ô UÕc&àwlÇ!öç{ߚ:ø|&•Sæõ–®¡í€£À8À}k˜Çh’5 iLE¯£>p TIJæ/ËtïJ‡ùܚV$¾°¥°ª8h°ß4j #HΝ•œRÎà­"Ν±6m‰"ßó'nM²¦áb“tª¥ ö`¬ãœê…å¿„/!bÏ{(‡¿¾2F†ð«lH¡Æù.>±ôû%ÁÄKNŸÚ÷Å´Lçú\Þs ãéûLìâ³þVrQXÝÅYÖ«'µÀ?ħ›V!0ãíô`´*ýÅAtÖ~#&ð8Y×ý*¢ÔX½SYgð Åzö®ÖOY¥nçypú#ÕX¿%ãä‹Bü®û7ÑWÐXνpZpˆv7Ïó JJËYJCUÝ#›$µ6AŸëT)jli·´SgH¦¬5½© ϚÊ͛“m‡øŠà9¡scI£¬€èÚ?I…$t<‡F—Q¨ÙɨÙÙêMU¥±Ê­°_¾4ƒŒ^q0vʜ"]J“jÀ32^æÊåâÔcÈ;ÿ±_¢À2Žàæå°J,¦F¨´/jŠø †Ã̤WWvì2²u[}ˆ_|>†nu|Gބy ++Ä3€Ý€@ …Ñš4}8D‘̯¢çXZÏ1®AІÙ±1všVðBër¼bdåʾâµJw„½:f£kW†ý.ØÇBµ¡_ïÖÙi\Á’R$³½hé²õµ| Ì§YëËŸS˜&½¡’å5cCaE‰5Í3´®àÉ?4‡ÃЂm¡hVŽ™A]ÔTÔäH¢ ã-ë|Ñ/’ù(ðš±'˜å¼s°5xkÀâ=fÞh÷,W°ÝúÖ ¹ú2o _¸·0ŸÃºxZøû§àwÿéÿ¯f·GÙ¯¿‘³\êøMùl׍AL‹Žuž×{_)¿=i9‚éfÌeP ¿ŒvXš¹d©xÂIU*n­©KÂÖR9±Q-?”€>~LÚoGKOXi”î·†×Ö}âÿ—}šÖîéªð¥Éåʋl‡sŒñ ¹ÙØÈ8¢AŠðÃ-‰óç%UFÜ|°Ôè³9óðýw>I‡~é)X{Öð{“žˆž\ +ý,ñ!»ó±Èp:4ìl£wHm,bô>Ñ×þ2tí› Ö._vÇ? öYÀ鱬 ‡=û‹Ü³Â!Œ:¶ ÏŒ_‘Æ*6A}}èå›úH{œy¢ö-+w±g‹ë' Ó{þuÍëÄïƒxÅލ»aƒeNÂõ*ÞÂà=ƒÉ½J¨Ænƒx §ý{‡æá°Äñ³p Ì3› ró6mÓüŋSfªÒÑýãüIžïžxm·…½‰0m4ä!ʶÂnv ²A70Xùaù\cpnºÂ4mÐdO°öLó1ɗcò.8ÒõÏazÓ°oKú §xÇ0öÄ´Ù·õ¬_½YìÈ&¶°oFßEz±û¼¢7ãÁßì׎¼ìe\ޝbçq9ë\Ô'÷.»Tç™59ΩÔ¹§=8¤í<ŠsӚœýSSŸôæEBL7rƒ…RÔÕ±:lÜ(2ìæÃr͛t¯~Ç&lÍ\œÈn79³/ǎü +>îh{m«yü ¾‡4‚j4Õsú]ÒBüèÝ¿mÅ¡ «ûhCà ò½(‹4ö.m¹·ñØÒS?0öÚ½ä ÈÙW ø¶¨a;mSØ&³Úklþ!xBêuõ¸!Ih^¥Öåbúë`‹ËKŠ9Q*¯$ÛXêÉiòK§û—U ¾>;q'>Ñ /­…æÀ$$>Ž#­cÈ¡L“™}a<±³‰ö&ý­†7*ù¶mná Uä6ú€íè›A‰¶>÷"tl˜½€/`´ÕI¥9iӐÛ2ýf©†Ç•&Úé-Mp˜Èîá$I:Þ^#‡oÿFÑÓ¥ÀÔu%þ1ä¿ÓÝ~¹/^ö7‰'s„ru~äú‚­q|MOÉ֍N„Úš‡Ô÷èÔð[¾2W~êcþkb™vße¢#:&9€¤nY`ZíøÓŒ¥”À—Ã~ÚÇÎlQÁ÷†cˆøŸVú)¢pôѶÏò×2sÆÝœæZ“‹n½Bµ¹“BñցŠ"b^RtkX@Œ#æà~ØNm¦„ÄçÅ\dM—òXů¡+µIË«½AK­B¬PìÀå4–¦½W6(­6ýæö¹³Ì\|ŠóéÒÁ“7*öì)¥o?)"ìÜí؝býaäcÃþÄnQ±æžºS¶M€Ùs¶ng÷r»Þ͕} ¸å„¿R·¶MšÂV +c¦·˜8%;_-í•0YÐÕðŸát[[ò+Yì:‡ê» ûBkB6åM7¥ÿ¹Ø*ë~*O²?#÷8Kp…pö ixv²P:qÖ䆐0bÅÇm$l½7ŒJñ­õ‰† + ·è•¹G3i™íƒ&šֱò ‹·Õ±Ï¢&iòƒ¸Ázÿô&lï€0WŒ#™°Aú*Ãé·b/êk‡X¤Bgø®ñH¢'Sü.‹µ7>yhäãuÄ;Ÿü'Ü­Í +ߔÒßT\XL– +Sm OµGà†_¶;_[ ¦*Ð8*ó«ô§!jÝ+˜´c½®è.“ŠxïbÉú֍ËÕõŸšâáóMi»b|²Z å×h‰ ©ÄÑiכ×µwQ ¡ØkËöÉ#›wŸÑNþ@A¬ý"¼4bqÎz͊5güýe1dÿŸÛø¬d ‰ŽxEÜÑ\±ÄÖᡃ’&OC9Þÿb®b¹YúÖ,޼øÒќY5E²´P|ƒg>~aw +EÜ©xs  éà1sv†æ!p[fŠLv¿ÒöKlÝöÞFÙª-ù¸?ªjŒ`vå°«žhrØN-¾˜{ Õ;¹µ†Ûkd@uJìbù`ÊÇ[À’W0»˜Gü!¤A”FOlŶÉÃôÝÂù“to2KKúDºJ/M½/Þ hÄÚó1à[F& ’¾›Ajך€õ®5`FNÚîÿœgáz‘:Óѹù˜É+˜¬WAz&#‹¦Šã)Y¦vÍ ¡!@Y¹9fáž@T›̔G^d²4>“¨÷ö(¯Å[äÕ@yaÃeÇ~ØÜŸ¿ ®˜CqQ Ӆ°Ù…¿·´ÃÚ)‡«&Tž¥°õÁ}õÈF”­Î¸·ó®ÛfW3ÃaVZj +”Û)_&1Uo ·jàŽžH^·CN +¾^ +vÕõgLTÂ]ÏÙ?ã‹9.ß7ã7ÚõæÃŒÖ äêl~9ÄWô ÓޏnRÈ‚Ü÷VÆf€n×ê~ÂkL‘oƒ¨8¨Q\¾WкgçD•Q KžÐ:zy0»L,ÃO™†µœ†?6Ç8Ñ©ògÔöþÀÔݪ,ò€¼ã‚ý-Jæ˜ØX‘°òÐ) ‡”Ô°ò°›8¨(¯Õñ@ SsÇüg¦æÏøâàJ• +;ÆYZ•ìCá΅­©cŸ†è7Ø&á‹ò‘}S±4ñâ~}MÁ1u\ Z U{"ü’Fåk:®¡¦²J'Ñ:ÆkHѦúþpÁAÕÄl/€Vòpàà™Ú"ºQçÆß~àèðoµ‹†´3ìmÖiC£ÛGîÇ¿£»Š‹•"^™we“Šõ‹â ¡œbuônÊI±R!;jÌÜV‹G¶Ñ`“†œº`öè4f¤«Ž²#dû ÌÍËlL“rÓö„ÃOH`9€Œ®Ã#y9*}Ø鍱; +£ôÞ ¬²}Cþžý9¾yÂ)»Ô—b†˜ t4óŒ_Í_ISýðiáøŒU‰ö“ºëÍþµÕ£?(î•S£$¶V +§b触„vÅì\kÄé·p&¢äޑ;“ÅØÛV7,]µNkGBA/iu³‡°2ªS8ƒË‚éÖÿÚ¹~Óκۖ©–j-/·?Ä`Þ¤~‹F,žÛXK@þ‘>s\Çlmï)œ@ÂÆÊ¸.˜²é·²ßŒç°~ãq„ôPÅúÊmä Ùû¨kXÜaŸ}˜?W7˜º¥u87ûñöHd †Ëwí¯³Ÿ]š—EW£ÞGêQîÿúxoݎò7h°W¢±G½º*ß[Ì£bô{ØävÇ÷2F»Û†×½Ë©ß~Ã[á!}â5ßäÛ_ñ©6¿÷…cŒÑ·Á¸mƒoʶo}pÚú1ñ¬Œ¿…bÎaþ+ŸøcþTŽ]¹þ±åÝ,2_Åb1»÷ìF6ioø¬6_ìXv¿‚Äïø<÷ð,-ÿ 0ÈFk‘d¹ñ‡1ò±/ïœEŒoãlÿüg¹CrÜD&oä¾·×û]¶çþªZ Ÿ+ÍïºkÆ©¥ÊuY^_ÚorƒõõLŸˆÿã¿ÿ¢ã¯ü¿¿—÷ÿ¿²½8Båâû~uHêÃe"ש7,=¹^3½O•Õ×0j«u]]Å#- ñ’‡ÿ7QKQ +¢ž£»¨ïê**4µjŠº‹‹J•FΡzÅFKʙj™š™ª™Ê™Ú™ê—µ*ÔÑÔõ59zœÍNn¦–¥–•ÔTéjtÕ>%M]M‰4¨§gR½N⥶‘æ’[I3¤šÒNi't“ÚGºEt”dÍмޒ—HF/îJºÝsDì^ñ˜ÀûŽÚáÛnü¿t‹õ\6›ÁÃÿñ¥6 7¨Á‹sÿah?ÃÿàºÏ‚sçÿ·¶^ޝx/„†!=›“ïp¼ƒÄ.à™üÎqÿN¿È¬­òÑññÃp|‚(/ú‰×ÿ ¾°ñ¤¼ã€ÚA‰d7)~ba‘Õ¾ñ³ãÅ5!R™8SÎ.›~è^Võ¾=ºZ5ó õõÁ!øn§”=<þPDýäqƒÐàDŸ…EÖ#®¸îæYKÐq_~B56EêݨºáK4Åõ“ê·ÂøÃã*ءǸKGÓåÂ’GC PAºÂ.mì@Œ *4Æ +v+y‰5Hz»]ìþ‹º‚î;|;’»Rl 蟓v½ä³… €kw„@°'4ËÉіY.“ +=¾£¡Ôv ¦eòdhïËÑ^˜åähý‹Z:wâ4„ ĸE©‡qíÍ"îvç¥K\ ×Eý´¦Ý‘bœ$ÁÜqŒšT¬#^ù¤”8¨`°FiæC´C‚nÈ…NYÀBìú¸º ô¨ÐÇ ävJm٘¾ 2jå²S LdÅ}JȽç1ŠÂGόŒÿæùîT‹nLG°Û%ô© úÓ䎩Ëóm†¾l‰7±ñœdÙ óútBá{ï0Óê=s—‘ÛrÝnwèpnuËüُpè uÅ覑·áðËÔ]°mšÎõ¹¨ì»&9Ú9ÚD³jýÔ&I¬P`Ùï­ED,2Ö½mhòVȺ&ÞüþF.PØ1ˆÞ=c¥ÐÅìó¸MQ)DGÂG¨Gâ6i‘QƒG;ÀÏ÷°ÁúêRš‹§NÐSÁ›i#`åc°øk°ó}7Ëy ÄUý+¦^7L Ë\0 áДÛèÑ-%Ö¢1;siå~þäîßÖÐg:àí89wȳ«ñ°R†¿¼ÝZÓ²áœèìbFøö]¥ës}õÑ)<Û_àIé¶£Ó Ê ÏL¿A.rÓîA"h¦ù÷%ç0'Fµ–¸?å™Ü¡÷‹!±YyþH4MÓ9ÓÏȁk5ÞLµ8»uÒÍM›~TËW&âöU*ìk߅jû^xðÞ¨m‘²¦cù¦O¾Lµä6PÇD?Ç hwҙjêfPß=øñ–ª>yóYãïGk¡8S3úd¦nþMr`b«ÝA"#?ˆµk,‚é9ÝñŒ »Ö›oD¶·P›ù•å0®Hþ½"˜Ô>v5,/õýC¢ÒŽ.wé ƒ ¤þÖIZšA¾Õ¹`»”sÓù1ÀN!ã²öðþV®Á +|ÉU9û-¸°Ú±L†<¨w 5š#—àÐ÷«v1› +f½¤Ô7sàâ1îXê>ò÷Î$l¡Û'Fó‹#Ô ?{8Öb4ySâ"Cë-ÇÏC8ÐÏٛƒ§›.B×dØ'¿U€Žä‰Ïµ`גMvd;U՜ŠRÊÈDN;›ø=ɵ` Ƙå:ôüLÌYÊ'm—»ñáZÒó²Ô1( AÆùۀ0aÚÏçÂC7ÍÎv(Cóü{õ¾¤&Y€L ÒBóTY§¦¸Ø7-rtës÷¯Ä÷:vàqñyõt‡ô›ÿd‡œ»ÿ[ƒïÈpؑôÆ)æÃ}TZÌêÃAçoƒå…ä²ÒÔl‰Tð n>¼–ÔÔúTDýhìYçã¯v†o/B²é­j¤[ޑŒÝÃ-¤ +ëç᎓ƱºæË+Y·–L—§Ú¡ÛÎl®-->†o2Ö[™F[IY·xÖV^âäë{ÿ^e͂Ï çi Syi+ÑqºÉÌÝ#ÌèH0\dæŽÈ@ïJÿ!.Ù Î •‰ ԗ54á¦ÌÔû©†/aÕµéÃÝÞÒî«[!ÁēÆü]†¦`‚2È{×Où‰hûÂ*.wñÆêâpPJyr#RédwIÃÙ¹L8lì63 ØM_R©šƒ$œýlIIÿ2=?«ƒŒQnV†ªyœæSZÅmX/!¶)¬œ¢©x^NJ3ü_Cîה-ᰛ/‘óÁÀ(‚Ýß8–»ÁâÈ+äžòé †ðTç ZÑ-çhõçfút=ì¢Q‰Á[×'¾É¶[]Á~¸{×G:£ÚfÌQ%ÑúŸÔkocúÀ"‚¡úÈ ^¡óT ë\êe;–×&¶©©Ü>»EYß´†Ã)D–F¶<î4ç|×¹×D *ãåªØç_­•ͲPcdorÉÓÆ–»Øp—*ÞH› ßpzCÿýÌÝÑáÞº‹ÙÙnçÒbŽ× £:Tä5~ÉQ-èhõôº#R?ÏϚà@5@íö£¶h×òžh€i^T] ’Ps袜Ò(¦¾òŠy‚¢žt´QNjQúYëš)•¿XYI¹ðá–{_ì ¸4ž€$÷h$÷`$÷^$ö^Džò_-CFEúáëÀÓ¯Ÿ6)9üÛÌæ$‹³£2Q蒀EhÅ”œ-ÒS6$¦À/$Ö ò1©aËõ¶Z=x«zÖ9Ú#U¹Ü¬}‹„j’/Ù·«w·uoÀ·Ã´Ž@ ñ ïA¦öhbîQ±Ùúe÷dHN¾²EXvü°•7ÑCMœÈÃÏïƒw¿}d¿ŸbqôN¬#<þ{4¤nº‘k©À}­¶I¼T;‡0e–ßOCµJ|¤ÜèFþ“PžôùTjêè=¢p¸.‚;'p]ç°©Ón`L½¶¯¾A¿ ¶woÎZ™°Í@ÆñÍOЊ%#Sƒ¯-OZ^\Ó²ò¨XԌZ€*!‘åUÿlÝ.çrHÐÐâèRfðÅܟ>M ǝ®ƒTÓ¾GsX.e¡¼ÑâȬ¡;£à3bH¿lß¿Ü! ᗔ¢"‡`å¦èžÆÉp }™h‚ï)–Pý óäÄMYà~Hf>ÉÛ  ]ò„sY|]:¶ÄÓ1¹ýðl‘”—s(‚€Ûvå&æAÅ4šeÀ´äFþÃ27‚Y§>ˆììè¨aËè˜ ãT9%n¿Ür/°œ/QÊqx +c«N0µÏtl.’Ôz¯3£ñ–*K‹ÔÒÓ»&úâBñ»óô-»W@xP*²•¤Z j¹pÓ¤F0ɬíS~ê-³Ä}‰Ü§åmSî=;ŽÝ³e/{5|¯`µIM5é=8ïTÅ^ؽi¼´ôá¦%˜¯5*ª´âíŸ-döékABJEÕ¯Ö[!²qþÙ/iÈù³ù9^Bùs›l×^Pl×`Leg1ãð ⡯ DœÕ¤Ò„þ +ëZ‰U?n=8å·%Ül6³Ò3¬…çi©o!}Žêç¤ò֓vá|rb ^ò…mgEà>“-ÌNџ¢iÔ 0jàçÕ·Ro©\6èvDá­±ðèr–t8m”K|é2BZG¯;qL€X< Ì֒Ñ™7`˜0i¶m)Fz¥ôÈn‘̺,ãW,{>âéE4KôDéкp.xJÿÚ¹éšâ{Iècµ‘ ]Ú±º9Åb|¹¥bsà‰3œŒBhˆkç8úQtê´È„8ím‘.Š›M¡Ò9ÃØ@Ø5ݔ“æ}_%Â<ñýAzVtšHúNóIæˆ]¼gIÇÇÒm^p´ž/¶‡yâIÊò\oOÖA^9~¬yÄñ$üǟßâIü8zÈ÷¯ZЭ³Qo]pIXC–Ü=ÓÚoî2šì0×3²+®¬h¿ærÊü#MӀy|y Âü-&‚pìQJ_Ï8#FvW+݁]œ€“‹þàc^y¿ïÓÿÖ5á›Ýh;é?úu¿Ú ‘ kì¤ùcYÀê7ÒÞQ»“þÐ:Œ‹ÿ_õÔbKõÔñ(óì“^>¾.I¯_ãÉGf0}ûnÈ g¨™n¥WÊMGQ [ù‰³ 3žÍ8­òι(8·Ä”Òo¡ï\ç|± +øœecA㬠l„QýãœæÜˆéA0÷˜;2êm\šƒ÷äp'–cñðÍÊ iœ¹ÙeŸI‰±¤N#cÕpú2 2ߑûV5¹ûÞJöéÉ9!òXZÛËc2ÿzîéːNbþ°c+·.þۍ¿6ÁýùnY-k´³{ôu­cã÷²ºîîQ…û†zÝôÏ'KHpîI×;ð_¹m{Ê8lì¡þ=ÕÇËüSY]‹wÖÓYIfÓXԛMg$]4|oÏô­mÿ +ë§ý—`ßÅu-üWU&¬Í¦aG Ÿ·÷¨D[ý«Ÿ…¯Uuhº}ýcËánñ½Âû­k†å×q%&&FÚ¥«ìbYëbù>ö]’ô~‹¦ÞmKýîîêOféw–G’›CHÎûôyQùd]ú©_… `à‡|þ‡y¥ùnWüT=å†êïæq™UÿGêÖÐj¡ÿõó›M%ý¾ý\?üø{ðã³+þ¾ÿ­ó‘/󟇾 Døýã¾NåßÚ1ñü=ü°+äú#“S}ž‹ßð÷þj(1ÿY^ß¼ðû÷„”é2U´²<>þ[3sá÷¡‚?l±;®®18SÎ`ò‰Â¥nÞ…¯ :Í£Å/v)ÃÞ<ºñª‹¼IðëÅXÓð3çY±Á{|¡Ê°¸¥ö”¨$Nå÷KGm4ø ±€÷#¡'ޟvÍ}Ð_v–ïî‚ã?mïUN'lxTñm×Ýë?«€ÎÍ;¤áÁÕ셔̰G}B7Ñ2| «]³“ÎgÐþ¿SÀ&Ó“øŽ|£æIÞ°Ÿº$kÜGûãQ@ <Îü™â!°” ½ÿÿ»G† ©Ê—? ¡çˆ Gbg®~þ‡÷>(Iþi xgQnjžûؤv;‚TçžÂC÷&39àVû$€‘àÐáQ¢qg°A؏VL—Éæ™béx¶™[]8Љ[søÒ½j{c04_ ?”6tW3u5úÜø’çð9ûRÚmªäÈçÚIÄiѦ70Ph”èÚ?t¨ð‡æsèð‡ä#Ÿ³¦rmEۚV¢ìõÜ\օ®¡cnô" ÏTqØ«GtÔÌb¯?§KÃJ+HT¬ÌSAðN“ÈŠ¹º7»ç%üZ¤2T¬ٔüFÎΐqàíBÒ´~#PŒ¹ –»\£\† ™471­€vðiöl‡òá+Ž?×*¯åDl­ñ%léÍú„ªqêžâî(bì¦Ó¡ÅúiÅÛ1òäP¦£=gá2{}‹R‰Ï!U•mk¸à!ôbè)’IH¶à‰Ü&œ]ªÖc…·ã( bÉ;Õ÷ÒÑèOL†ýn “íó§Ù<4i6Jèî÷¯i¶ÐiºÿQ™mYù0Œrr†-{Ø»Ŗ©¥ÿ<7”Zü[tñÜ» T_Ðڌ³n^¤Zøì‰n&W‡?›éPÃ˱|Ô6€g“A,Õ8úQbz›ÿ¶ZÑ>gVh¿C¯/™ÑŽË'×D¬Oóê¶L’ƒ_þ#.¦ +IŠÞBN ‹x˜Û;o…Ø9ÍuÙ¯˜.A•"~·ˆï¯¹o” +TÔN@AnkÁm!ˆž¢R¸ïáà „Æ“RÕr iûܰØ{"–ž›-ôߖFm8Ғô‘¼8_±$w6fȺg"圌›9Lä^##%$oÖô×ë&oÖQ®2ʒkºH”wÄd5£—TŠDẑ¤¡sª½ù¸´¦ó-ú<ëÕ[éÚ!(ʛèæi%è:Ä$¯±¨ßFuÒ?F~†.¯#Oó&]á†ÝiJ`MRLI-]zŽ€Ê1óä‘xrá©›Z';õ1Ûd»›pªE7õ"À›L·ËCVœn“Ç[%܆§F‚倠û£µŒæ>ëš"6õZ¡dý§â“8£cUÃööLÕÄ- ›ÃnwÏþ²n¿¯4å¦Y—„±‡L1¸lYHs)W(XbÓMõ$Û2ÎQ<6¨ Ã~ÕÄ£ÊsåS‹FëhžËÅÖ³‘'ã“}ñº“‚ëüžPæ k„`2ÖW¨i¸RJ›_éqw&MìÃ&_jš.f”zÔ^®bž[‹åâ2‹ÛaPÔ%£–<å”%à,®ÛOŠÔˆMø­¯…÷›]fʼZ®cÀÕUKèƱXe±uz€jgÜ7|ä/òäb 6(¥(£p¥ÔyE/Ĕ];$…ð˜ÉÊy"y[^÷·C,̏"ÖV^DŽÈh¸ò.ÛeNG¢³0ÐîP©«*²”ä8dB*²|#~ù¦¿–o×° jõ‰ ˆú“ŽïG*°þ¼ó)*%µvב„-A—Ü!¸ylû8ã.¶tÆ«ñ»6˜‘$žm’,1&ñn1úýô$²ÿ†E…Ä ({·0eNEÂGµ—‰Ä<ºàƒóô9Þyv>Ÿi#§ÿ³lލÒÞ Üò×ßzƓ³72fd"ÀTTG‹±A ŠçC1s%"TµµŠ,ehŽ`ÅÔXzH’g\õ®­­òmõk§¨ÚAn ‘ "¤°ÀmH ýû÷ÿÿ{™’I «VÛ}»¾Ý÷Û¾Þ'¾÷Û¼ ào~ûx»ÍÝãîý¼=þíîÖÉ%’Hã§qЁlĈzpÀ¹äûó +»`) ‘±¼¸êb½Ž\PD‰ÌèÇáƕTW3üAe°~Üõ8j?_eêÅ}“zú€÷åd8æ$"yižà± ¥Õƒ­Õª¾@Ž˜]÷„nÙÃ#ÀáK‹Pޔ©lÓÑ1ºLx^ Œ{hŠeÇ÷æûjÔÊàî˪?Ô \üžù]V~å‘ ¿ŒL8LäfóûóT§h±ðVf7¾1”b3¨±î<€S8£ôÐ;Ijªˆcž« ‹áNN{6:>øZ{Ïï–q­ÈKùã ÷¾62íÏMQ"H…x¸‰H|_“™s‰€9÷¾"3¥*â2$RÙ‹ÏM§Ht X—šWN…ñ0w ãôˆÓ†¬=k¡éêàG'y21eŸ%lã¸E¿MAÑdû„½Ö3Ð5ѯzP2Œt«˜E§åÀÈíàáEßp/–DíWµÇ–ê%'žªKzŸ—b—`E.ú¶ivÔL½cÄ©ÆÈ8&ïäbBÕoårû¾Ô»ô2vև]š—1/þ*_®Åó”¾{˜¥ÕnårÏJLŽf[À2¨̓õ]%Ú͈ÿ¿‹ ô;ëÄ®a¬ôs³&ԁ±‰?p™ŒµÉ·æHò²‘‘¦9V‰6G”“#ß$D˜¾özp˦x,jH¼FŠ);Ã3iÄ0hàxäö' +}E¤¸Š.ü¸£ðсöãh»jPð€-̈²S-6j•©¥ÎŸÇ-^3BÆG4§(Â㝿ƒ<\Îä SpˆGa±Õ4¾¬±-ºÕ6ä˜â²;MÍÓ°ïM¡Ï-Yãx¦ÆÛV>BäQú™ª‚‚¿bÕc]÷çy6œïv9½9R^ÜÙ4/Ø\í.Œ_“÷”î·ñ†ìžÆ.}ªŒ(Š=ñÐG%÷ßg!»#ÖԚœç’š=9Ï"Q@Ûc¬ÓxgR.Ëî¼û÷>¨u©¨v–Îʬµï A7œyϺvøcaA"–|¸gZù±è5âÀ6{¼šæÔbÈ ñ/†è—P…‘6Qƒä3áb¾£`IO „Ùh)s*$k×»¢f†r~뺗¤£{"üéÀgHd{Ӑ%)ø½ƒÃÇ ƒ õn9"˜äz²ÔŒ4MMõûƨ>‚-lS:ˆcàõ‹s|¦½‡Ô‰ájîŽëtŸ‘ãW¸bK C†{B`=eBҀ"!6ý¹¯0ÖÈÂ6RÇïMhB{CSï55×-ÞĹvB^Mb¬9;l˘iÛ*.^e;hØâ /vh)òžÐ´áF7Á3ÑÂíyÌ,¶n3ëæƒÇ=3ÀúäÁîÒᝃÀ AÍM–12”atFT”#k\÷T,Jmãܔä×ò`âŸ?ș¼FV4EXy¼dBZ ɪ”o9î,! N`v¬O¸k*úï-õ ÷@ØÍË=Ä^£Áz11–”þµèC1Â3õ/| ¤zMrŸº‰ª+¼ÐfçŠ,PD:PÓÇ +㌈(î0-Ò¼îކwn«dVU½ÏuÉU¿Ÿýj·S©ÿ&WôøßÉW†I{2¯Í÷?üU÷Dø"].à$ ›ESó'ŸäÅ~Éß­3ÿ”îèmi5=(j“›œÔá›DÌÔüôÏÿ\¯Ú5_}YW㻏ù*ð.çørÍU/$µï ;\޹5<Ã?Ã. +ähY]†å)S×9SßÛ¥!Fík«þˆæó J8é¾Ù¯?¯Ì̤r’¾Ãæúªóo«–’ñ?6…^n´¤Ë’©‡ÍÈ+Í©76PÈÍÍ<™@ÀòG¥,€iœ»bСyø½¼YjzáöÈ 7O~ijZ'âûJ×N9BQ\õvïþtIŒœMc´¶._Յ5 Ç7¹<¤B#[î +X¤Æ Q¸Y#;S^BLD…»³Zð|r&:˜кç/ôÁا¾wчÉD z örÜ ¨ …žæ¡"ýsþ»dØs#Ìóì9™æGŸ™ãXs'™q?3í[(룇ôéá B ðû­çkèÞ¯è¡|®9&¬ÆR™"%Ú݈u!nççyªéeΐqÆùŠÄwbLÊöîá7žõ†Sêj~ÕÆ? ØÞ—àä„8¨õüÇIpèDɦ`Aq!éä¤`šd:õ½8eî 6ãÒð&Ì@¤¦4¹rÔёA¡ +3ƒù0ŸºÏY|惖9é+¢âžTr/e{—å\ú§švjÁ¯uyQòpZXã|õ ——$ ¾ !ŒRìQŒãÄf aÄþ7U:ñ«¨çDL 1éÈ÷Xu’*(¸pgÛµ»W?R•Ú¾3´¼ Ó÷S¡t¶3öŸ'LüâÏLµU×µ[$›„·'÷×E¿~Ɋ2è¬û‚,ÂIZù̞od·âüQq+7Å} $wÜBVEõɼ¦Eƒæ2“ ^õЁÈ;\—·`ßí…“ë¨ >ʈå0_˜HAöítøž¬>²@øH@å>ïph{ãàžJâÚßr}[ÁՒQò¾õÞWÅ㾺JÞß\D޾’¨Ç½ê•#†’vKܰSœšbÊÃÀ¼bQ~óZȯW‰°ùÜÂ캃U©‹ õ°ÔÍYÃșWXB/÷ärÿn:ÉË(a” óð0´nàbƒ<°‰,õŒïmøy±…׵ō¥CÌL²‹ÿuÆ ŒgâaÂ캔¦ÄO`€&‰%ÂF„,>)‚IPè +Ž`‰òÎÛTñÒ³Ú«uøsÑÕú\ÚLŸúGX²œŒŸä9“â{lhÕ᥁Ä•ƒ·ÕvÇ!ÖÏ®¥7FxÞ=×Gttc!0õ»QLÕ +WAôIüs( +ɺ ‘YR% +@%My…·åì'¬$ÀƒãA9‘k—_Wp¯ Hæ;m§Éþ3z …l̍™qï¾{Œï*^T‹OU4Jú£á'pá"Û U*h{²beïáâ^œ8£å¬mÖµ8;ëGV§”ÆFç8~šzr¿®H'ùùh"4}?1N«?VlÀ’÷â96‰Q.$ ±IŸrFSÑã~U>Á4"ú?)`”ôÝx}x–‚ùê('"˜çìW %öß&ª­KïÖ[Uö —„+—ü¢˜ìñŸ:åð÷üµËö7ö«•Ãú´ÛïùK•Eÿ“tˆ¿Ã6Ϳكtn0{•~LÕýW[KB9–â…ŽT%âúó¼‹ÃæJ0lÑÙµÏé Õ¿¹†Äf_±îq 3U9ˆO€!ПöPŸ™2ß8ÝÄÿ¾D¼?q?ÀB€5°G(ǭĀ{EUR˞²§cžæ°âR—ÞÌpxÀyÏ.ö·Ï쐟ôM?ÞẔeØÃ´¿oÈ£Îø¸¡…,ö¥œ=ûÐ[‹³ôï‘ÌMo³†Q[a”¤HÀÀ—bIk:v2µa—ÂÒÏWu¾=óS± Tã®§c[Š-v1ýמß:áþTG÷.¾‡ÖP+d +~ÈúüƒvŽmxÀÖ,d3‹»\äFòu‰“ëÚ{Â1`¾R'–12E/ì[Ð>²Wؽôҝ´Â°þ¥>y•=‡>¿¦Lî¶ +9j®—¤ì÷ñð4ìh íA’Næ¯eýRxÁš©C8Ç»jº´%éèXöÊ|ç†Fsìr‰ZÒ„•¹°%Ý"wÂK²  ´’Ê¥}];‚•ôiþRâåŒî>¯Dɽ]ñ ~µõyA +ô%•–ÜÂí^¨ÂŽÐø}˜à`è q»°¸„|2À–hÓÃ̎€Æox7äç#WÙ cüIÇÝ!ô'¸Ç3¼NÛ·#=ág«ˆã©Ü/³‘>ˆr`1®`Üü˜p] ±¸–ÌaŠ= Ðêÿ(àCÀ+4>¨½ï «3µ"ô5Πf5À—ØdÆ~µ>k.f¾œq¿ËŠ£åØd½çYQ½F2xÁµ=\ZìQÄB¨n̨®Šr ªû¬+Jvì ÿ N ‡þà] vE3ì#mÓNnȇVÏ=hïÌUlëÞô§´˜'YZmÐІº±M÷2] Æåv0¼Åô¾[íJæ½/ÀF|o53¥fív‹w Ñ£ŽNB°Š ï0m\ˆË=”E +£¢Bƒ0,áÖEÒë3í Vìiç¸`+Èxó«HíX²ÐqR¶³[u<¡I&{¥Aâ[ÝcCቈvà É~h$jÅåÄ ÝÁY‡Ž_•]Ùµ–h½ /GT˜Zï.ÕY̸àc}‚Ai.!#sž¢3µüóæ$­i!HѯàbsòĎuSpÒÆCc7éDÃò¥df«ŁútýO€ÁxLqëª}ÎÀe„Ãûfž!^ ‰ˆÊoØa D’#¥\®Õ×W¯so™ÓU€FH ë®åó.!¥¢ª,n1Š'NY™EéQY9ˆ› n`S[-ç5;Ò§žÞsSº„òü¾eÑʊcÉÞ3Öà!:×pög{ÜçÓ^Y_óóÇ?‘7RžðäzÝ}kaÑ¡cƒSX’[k&ȗKT…#0¹•ž‡Ž%õÒð;ÿ´®ôÉz`…z‹²ùÝGÖî­ÝG!º·usnê=®çœê8G1*=^N£ÂÊ-_öºŽ¯sÉuoéu'Ú;wûÑSÊ/¡ŽñՔ]“¦8K•„láþ[֋½i3m¶â,ùcbyó~+=a F¼xþÆámZ$­éÀ•ð¬æîK&ʼh4äâÝл&`‚n»ÌjÝàx“˜4›Ðô)Êî Ÿuš9á'Æ )æÊ![‡ô©Üí”,p(P¼ÀÎWWtóqPøhfÌs_¨µI¿›Ïн11áÓz›so@:l}¯Mq›)·1 įqSKŒ4Ó7œûaÐ]Ãw½ßYÆg J~œºÏ)ѡԫf¶ò°yÿ,‡äîü"ßNP¤ÛŽ­Pk¥ÞZ9 Ihò•4Í9"›’? Z®HÕ'á| +¹!ãY²z-ŒtÕ/‚OV¯¡¼.tÁ€fddŽœ‡V!ô³«(ró—údïkr¢JۏHŸm˜y[ræm¶Ö¨ øÌÓ[r‡ÆWö[r‡Âgô툏Â}›Msyo¢ò+eÈ9:0ƒ ¸è’&°p ‚)kÛµ\å·îJ©ïH§ì€/[ Z$¦ ¦Yç]üoŽ ²O¢íÃçÒÁd_ +ÃqþkÖ³ŒÊ0–'uUáI&¥Ý° +Ä¢y¯~Õ묜¨éO;ß ª›ÓWÖÞ迾fò$DS+Ã`>l ôÀWÉ* r©¨JÅÀF=æ>¬ )p]TY)ñ `#šL|¯–9{˜/¥J6‹ª°¦$ĜFHè# )`€ÊqóHÜ´°û¢Â–B„{ +`4yVÛz‡”ƒyh灒fêK€9ó ´Q ä…&¨”Ñ‚qèçe±(’3¤¦Ù<¥‚ªÇIj AàQ9×TÛön 9²Hmj²Ã15}3ƒR¡âTÁ2u"D+âòÈ-ˆ9*cé8=R.›pÉZÈÒѝÀpk¥ÀӁ›.ŽàO‡³ÁZ€‚‚YÃþü%¢ Ⱦb5 +ÄER“jÄ'ð+•]e ×‚%Á—%žC,c¢«Ù“›2j·—¼$-ù‹Yc +™³ª‰Ù$Œ?–(wǪ̈j¯ù\¸`˜¿Ü4E,+#˜R…Òãā Õ0ƒ(LCñ¯?Š êlmu”ThãFlùxêÈ1W‡à]†|ªWɑY+ø©L(è,DX±”rÌ]ÎZ_Íì¿Ü½Øè{/äÐÿ½eC¥±Ú湈­ºý Ù%éÚÃÓ8‹œï=l>yÅp<ç£Ïpyðu=ìlQ Ëoƒ÷­ Âή‡=ýq>$Wл¥Ëۅ +xu¦iù™§ÄöĉN~“}õžá}ý&ó°¸ M/x³”F¤Ù LX'+&,õvV“Þ +φÑl­'¼Ÿ ïâs H›X“â6\¹ñ +„ú͐狽vÿö ZnÜË3ìmMORYsM?K|}Yzk=‡b§«‹IÈu%_`º”ñÂ1hªê¶!ж^_Óo‹%ê¯Ù’%†¶Ö(ïÀ|¦ß2¯ŠÛýéŠöЫÚMíÿµ»ùýŠ´®)#3ž©¾éìËïøy¶Ø[¶6“anØßŸaó65ÚØÙ …³cy»C5®ì͍²Þ›°ÿccdö͍×ûd‰Oo~FÆù·’‹;hA+qà\•žËß!X {n† ºÊmë@”5c9ÝÂÛm²\óž´ tÖÁŽpÿښKö»K³hà Úþ҉:dÉY0µ äh@X8!I¼G6¸93Z— V8ö9«"|{P¤Õ¢¿Žó¾Khú†!0÷­B˜ßÿ–\šË×ñÿê²Çb’Ç+”>°>(ä^ +12j×ÍP}rÑ +Mb9¶®™ǬÍi¦ Õ!šÛ¹ gªOiÛªžØ—„Ozé ԗ¸ûôýE/æ)s…¡KàIKìf•#q\5/‹ƒb¥þKë>….xþeV¬Ï…Ïô:U¢Ö÷I• —)®“IŸ 8L®“5q¡ñ2¾ nfÏq úœ|kä +߆ *oY*qÕžþq½_XˆÃ)¤ +î!ÝMz9½š4»¦½¤µn_醈 +F)ø6†G©ù0ÝÝÛxÊ]»¨ˆ%D6¼y½ð[À&©ÑkBЄý!ó9m#élúõW¤}N/î}ÔKu/¯ùøÕ8°SÏ®f{ +ã—[1€"gxHŽ‹c´Á-ˆG!Óåæ",½mƒï<ÿoœ¸§à_ȅœ¾j¬L,GK¸a ‰±bÄÇb1¾ÿh«aBâ\=•7¤U™eÝÃ×à…ǧ¤l=1³ r±êóbá°!“Câ©Õ€u¾ur݆jÞâ¾òMüøgú˃á¿ÙȜZuIÂܓ¬Ånñ–›“wKÿ„Üz¤â˜›nÌð9…i`;H?”c?\®|Z=$a€Çc®<˜„,ûņpq¦ˆÎ^Ç@¬¾ùìÏh¬fց…€Ý²u[Ãx–ÍÒ¡cHŸ,DÖfÌ6òâh•‹ÒãÿŠÄuI>ÉP§®9W ž'†€â2°ùQ"’,縫²l :„îƒPD_³(7KåÃ66b•}IݺF1é=n ‚{Ќ¯%‘jóÈ ðwŠx# ¯ À˜Zos)¿Ø¶‚Å„í˜B à´B,!Žhˆ®™°äÂu(¶m„üþK Ï +ý´ñ?Ðeú§Ë.ŠXQ_±ä¿_$eól½„Æ´M ^Ýù($°m¾øWÌ|EóU¸·_1uú.R–ã¯Ñ|¾Ò ߣüiP>uPêð¤sי›¢sAe _ÜÞl‚ÝMV¸ºŸ2Î$jxýD(YˆÐ¶HÙ*d5ã=°ò=%7ς½Û¿øtJ® Šxíu­-“ÌþK‹7¨1 ê“ìuöÔ¶Dhÿ+°À¿kÑ£ëòu +ҨѣàÄ¥Sw‹!xmlIïb»xÜÛY,ø9¨JÛt&|IF’øÅW®Ô[BƒFŽ==ç²3¶4÷³¬´ý¡rgt½`X˜Øw‘.Láà àgŒÚëÖ æ·DªR€0÷ç¶ègûA€û:âÁFÜeï»Yß”‹ì:$QåØ8GøFRÌòM¥®¹8ùkÃÖÒoº´H£Ä0oáË`öë-÷}-ƒ}zDŠ>õé;ã\×"Ú\…LäJ9yo@NùR5fKh¨ÒtֆZ=÷ØV– 0Ì4@³±Ä1!H̬ôÙÔªÉ#lvÄ¥¨T_N‡ièQ®{ìXàøfË +$ï‡êz듘ä›úb3 èkÜ5c³¹] °ú rÇA ö¦<þåøôj¼dž®¨Ð¶ß;¾IÉ4•ÔãDh×'—¶åG£G^žVەq›ƒ5QËt×äOP3­%K9ØxX2¦ ÅæuFÍ9ë˜€ۇAøt}|¬j0ÐÅ7}µ%½™]™’៌DŒB¡ 'ßꍋÜÊ]-¹ì_—µéØN,³ª ƒ +]Ëçéí¦ +‚n#îS«0U€ßÆ°á·¼ùª³=µæ5æ=0%ø?„d ?H—Aꀇ±Ô‹9ƒgXýœn!Ù Á‘õû±RPvÒ´ŽQX½0U&SC0DSÚ¸“ö¬£ÆÛ´< D¡3—¶å*ŠjÈúmë4i“hS3ƒ†kƒVý30AE‹jô +r2IU¡I§‚T÷ž,¿½Š2è´K½ª;!¢¾·˜‹½ýAdÄ՗Ö5 +ÒìÈmåÖhª®Š25b¶Øß:užMa-;7o0Ký`aÛg9Ÿãì¥Ö"³¬ï¨*V¿éqÇpÐ,°˜0IO c«h<ӄÁṈ&Èø‰â×,û›0]°¥‹0]&.ÝÕ«ãâÁv2ѐªŽ¿£\« +ªqC—3[Û;®+ÏݘDw]£òÜþÆs¦þ GûÖì8y °¿ùHºsuoNƒãtd À¡RÏöM`ÛÌ!'ñ;úIHލb + i€]K“ˤ5ýç®à#¡#'eèLÁ“!àFDæ¶×ZÏû]OEkîî➷D4õQ€õœÙ«î +b<ë'°·1Â\2[ç:6n.[P°0uÐ@pñù!@$÷œ¡„‚Š^ó”´àcò;‚Ù¢¸¾¾Ž'+÷n‚ŠZá¶ñè í¦Æ:%•ÃIiäz_Cai+ÑÉ2Õ2í3<"Ô@T‹l‡6ßíô)ŒÆ·u߯œöŠÚ˜I Íè¹°Œåô\ØF}m·)š4wïZ.l$î>…XIÙRX˜ÛxI˅±Xõ yp“†ªšŽms€#;l€c”Eþ7tý³5ýZ_÷3]ëCÍf¾>ƒšÍ{}5šéôÖkÌè9¬×÷ô +³^ž—éf¿Á *Ÿýûäf±Ð™xGž84ÉǹKv/6,*ŠôôîPÍ|ɳr–¤·"D\z1(ċ{²”"Gªê‰¡"W¾Œ\<§ ¯ÎÐÝÈ;=õÌÔÆTaE-J+þ'K뇱2[D(;ÈDÜyÁ´’Ì™«¥Æ˜Þ:¹Ý&V²¾–$ËJNZ`5é:d0œ«xf0Å£„ªÄÊ„¦œ¡I¾KJ£;mȚE .øªÄ«€T½ä V¼ã˜´ Â=C„3\3ٔ*0“”µdÂp"̜Б˜›@=àDi?(Ì|E-Z+öΗðƒ%Æ9fý Grev5ߔ"IÁ~^€’¸Ö>DDËñ ¨nÁ–Ç2(…˜¸C1µXù*™T˜êkx(ðkO,ö“Ñ|TZíS:¢ôêc"èÝ*,µûsxúw®¨½†²óh$ï×6Šmuƒ4 ²oÄâ+\e…£4º,phú o%7‹¤¯1֔?>kKÐ5±¡´‡¤Ù²®´Aše©ãƒ`TôB_ݰlj¿a[Q+¬5ØÞîéɚ¢ËãÁÎêA3E<¶ô$C؍+Þá̖™ë@þI©ü"py×±rÛLûOa4 Î[E¨ÉožûáŽ5ùøÈ„ö3,f§…w ¯¡£.l+@&›Ëï!U_úUùS1T[¥•é\²¥DTرø./ƒÛØ.J*”'ÃÁΝ6üV~VN¡ÞɟÌ?L®ÂlôÏåRžG™¸A`ShXvy‡Ê®z½Å ü>ÊyÁ饸=¸ÜS#t½Lª,¬¸Åy¿Ê¢ÒːÿµcƒÅµé^©ãº^‡à¥¢\§>w±0h±"Mg‰“ÆÀÚwBªLO,Õ7ˆ.ÙYè‚ï_h.ÖÃýûR'gÁ…l†þ,Õ'Œa7Ò=ü;¾fœ ¦žDJ{,=°±X$ÞËõ«b°SÖ˜èðã5ɦKÂd귈ya‹º«zá{°±g–›ìß ¦N…‚0ú<·-- ØÍ‹ gò[x­Ë À@Å}îƒ]`À°çÝPj szi¯…t«–öòŸXNñnðü2}Ôäƒ “†ÄbP ø;+ ¾‰Wí/›Ü Gd­‹£ì1È=màZö5žÁX‹±…奊ð¹ýhäfs\8,Nåè%DX’¨Bòç½aEéßFRK»k2ñ¶æ+|¾›A!$\¹]†gkô%2&‡cY꧔êÁ +#ÿz? æôMþHû¤´â.°Fê@ßÚt@šµ%9Ç)Û1}ÖrP&1±U7Žº ›I¾ò%Q/§@nßqêš#¯ˆˆ¤JÕò¶È¨ß½82N¶ÍÔû|"“xsÅ:”(g48Ç`¿®¸¼©‘h=Mª³úכgsù‰fïnf2Ø>lÓpE@³¥Þ0OËb ÿL‰qdb÷JÜ}ÕòMßå‡Aܪ‰a ê}†«, ^þ~„‚³ý+B`ë×E Nx:b @v|RíÀ)B÷R +Ù'¼³!ñ‚–µ#m³Œ#©Ý¼ìïu:˜u¼Û<@:J>{oÑ=ÅOq˜½½•iú+`néãÐ2˜hƒ"4oC6Ä¡ÅÍ´‡ ðÖ@Ž«8V”YŸ×òöpŸŒEùà‹_xL‡r<ó2$N»îÉc}3„ï .1Á~á[(<]½™)8É`<Š…µÒÓµòÇð ûüËÛï½³½¾ë.ä=î¿ô½¾ò÷uojzk¯Ë{}ä–êr×_–öût·S/uù/o¿ü^´zÈßûÞ´~4l[֏¸»Úõ£½ÆÿëFA¶ù€ ó_ ÿ¦ëk|3å„6–±ûä9Ë@_„Y_ ﮿ú¾õÀh•o†|´g6øgñÐVøgÓ±³¾ÿS?¢øgIŸ÷ß å{}ãÿÎöû»³þûÛìt“÷ý×·ß°‡Ògè¤(Vö·þ„½­ü”?ÿ{[ے,ãƒ[n ˜Œ5 ¸|&Çá§B¸pc)þ„‘\ӐÉ(ˆÃêîZ²àFUà&Az‹UsçFÚW`® €zK9ÝÛė(‹½D)ÒOØ3S«¿>’"*ůÉoá„þNg‘\ê$HO€éƒƒè ` ažÒ·:DÔ-"Øb•ÇQyvø›ƒ^"bæ¡Ý5[ßö{¹ÒÓ¼ :í\H2L=ÍXàŸ¡Ø äé_0@R2Ÿþ^1÷ħ.x2-éRèœW äBí÷hÒv³33$„ 2 +@ˆH€¢ŒB#$.a2Cè6 +Å ‹XbBª9&H³3Z«jÞÖõ^õíZÛT¢µ™„ÂÕ ŠØã~V‚,Ïÿ¿~ÿÿï¾É$--®ï{¼çyËËÍ»Íß| æó|ñ÷œß|ç7œßC;ão úï [Ov²Û-²6Ø` °‚Ùç†5xàoÎp÷?ÀĐlÛ CPü|z¯üflpr]Êt ›’n@§÷¡s‹*žä{þ '£ëÆ"ÑBö¯›PãmBͬ¸P :¬öèºGI>A Óÿù• ‘ÿê+“æîÿÀ¨Ô å‚ûÿسïÿõ/ÑƱzRÅ;ÿٕ_ã²3¬MÛÿ!‘|«Ë|‡Ðºa5%.¾”»a%`ݕõ}w@qéˆpwê>~݊ +|¸¿û¯»±2Sqª°žÌF[¼òì +ú^ Ëv(¯W!!Ÿ¥ÿc bùC2ÿÓ}5‹ ´Ú.¾LG®¾hn˜]¦qššíÓ³ÞØ*„!©zR¦>œ·œÛz´4 ZÁ›Z°,ÆÙ†hie§ ÒïœîyW*.â[;™^êP€EÛØÝF$. +E%y"å3ȀÑÀ5P +:*®H¶æ îB)gÎ-‘ 4L{Öí¬í‘A)ìûcÕ 0yº™ÓCo6›¬»y»WY6¦ø¸B~¦´óÛu +Üó‚Íà2õnl©§7 Pýç2NoÔ0ë²/Pi„QNWº÷âgcmQZ`Éy0lÜãVÉpi«rfÉiE:‘Ph:¡v6¨4«õ¯ÀÈقˆc ÑgÖ~~•†7½O‘¥X`;·3irq²^'ü†ƒq2Lþ#©5)z1¸¨“öð‡hBªóŠ–B¤ၠӍj…=Ið!àÜÒÁ?À|è#É÷øC„ëì&.r‚l-ë(ª¿0)ШîhXÅÞeéV}4ø ­ +À…>#|bÞNå¿p«‘—û *Uì< +°¤8þÌI”ÃãÚ6 +p¥xðJãÁWl8ÐFòÙЀ޶øÜˆ (@G_j¥N]½…ʎ©4F 4Zsð?2O  ž´¡i$“ÞìœÆÏh˜0r]†qª]Á#@;‰& +â‘`Í5—Ñ^ ‹—F‹»Â3ÈUäØ(¤&„ϵ™`LH*ï|[Jç#û”þC›‹¦ +Èu?bPõxHu=l¢*ЧêzyEʲ²0$:Ÿ‡(Lǰ‘9Y0'9ôJ‚ˆÛܖþՍWfu&¶Lԉ$R‘àH°øÃ·M’É?Cš+åû¬[‡—ä[SS‹æÖÔ-ü²²ÛOã–VZÉÚË+-ýyb¥ +%N+rJ‚ !J³|!Cüc€›¡Ò¦³­ÈI£ãÉâzã€ÇT˜xÖµÁ´ÛMyÝiæ¬7!\’ÓG&p²¢f7•f`>كM»bV©c„o¸6XW¿re±`³9Tµ€mÙgö c1ípqÇ°2„î$Ž‹©àÍÕdü^d]å©ò{³©ÙÒrÖ ûS—¨ìêh>B†W0YΕé«2¨&Jóp›l¹iSžŸØŸ½Î­*@¬“´çQ*[æ^:¥dœê%‹ø¹Õ^*w$‚‹:µîeМ +áðÈ«ëøE\.y8%¤¹÷ðKIsí`–’ãÌÒ\ìôÕş}ÜÙÛÊgŸ×vîH/£—(F`—ÁæïŸ{I@­ +Qv*Ø-C8|Uº`8Ó͍ôeåˆâ]qÙð+³e¦ C ›<`Zª§STªq&zÒcɐ ƒø…€Ú!C·&š°Š5àкPO8f>á~¶‚ª›fÀֈ6Á­¼N²ÐöGRDâs(2¬æÕjp,a©ÐhАŒË äÖª1|âÝ6iš`Gڙ‡2 ¶0€ü÷L¶wÀe¢ñ¡I%×|qa¡a„—IŠmë|.{L{^å«ï +ZÄêrï¡n)æÚsÿVì[í‹ë⭔sü…ƒ>{F=âf;›Ñ…5èXˆÓN%’i܂T¯›Wt²Ý´ê÷1€PžNÈhú +®½r- ÏX6<ª(SNñ”:1­Ò€G:,ÙMK³û-ߨ¾²+_9ÑîÄárYÓO>;ÞÑÕKßvA·mi¶ò]Šk½ˆm˜„Xí kø1Öæ`w +þÌ$ð£2äI± ˆp×ùý‹ýŒ<³POj7º$4tþb™³Íkc襤…–cbòÌœjíEÎØ'e¢˜ª äI¢=ù`πè;ms`31këc¾C}fc¿[¡s•ÃÆ`êOf;€WÅsî%#ä"$¤Ò 5ØÓÏ—ü5x5´Qú¬Ú²m'F\4ž/«IVrµøc¥;D>ºë†@êBE––-âc¬ãeº·|öú6¬åH]üï»É!l’ýèîw≲õ‚Q¡ÇƒŸÑ£|}4Þ¦÷΢í%÷noGÙX]üÎáÅ´íó¿@©˜›W|,Žü|fâ‹è·3í¤”¬þÌðP Ìfd¥N¾ÒžàåÞ£ôKIÉJä'c3¡êjºkOF©4Cb‘þ’ŸÔYfØ2L¼œ 篔ˆJŸw:´Æ‡±P €… ðëgÇU)C×j—.Që ÓÇçšè´žgåˆ5a¥%4ĹE&ŸL8y!£èåTrÏ~-²…®vÈYMÖT¸X‚1ן²1JV®Lî"³3¡ÖC‚ÑÕ{ºÌ +Ž;îkÔ1¢oçñ,“Ë)—ÉR•èlûè2 +Éö±‹:VmýŠ|ÿFvà8CŸBr  X¶Q¤Á•Ëu9­2‹Q"4‡¾bH>&n»´Æ(êÎëAJ¿´Ÿ÷ea?]“ÞóZ”Ò¯«P¦”¥n¡àªúK[iÔ¬“;c‡ï2 Žû!ŽÚ­Žõ®œ¿^•M~˜”p”Äÿ ¹×‹Ãµá¢„Ã![Ú%¹°lt¾!,V¾&µh³Óh8a{•¸'ª í  R$ +L\í’7È¢`çdq/o€Lþ.[kGϰ9hGø3bh% Ü_Bˆ³"à¤þ:£@ryaØè Ͳ)@û¢h¿f§£‹ˆk5î¿JÒ¯11>ÿ6R0¢*¸"AÄOz#:ÏWe³§P7YgS (Þ9TLßëÜ8撨Q@ìH7[$Œ-@¦Ò·¾^¨ß‰?Š×ù€s؎ȹ9ԎÒË€×D…åÈ¢…ÿ¬tì»žÂä4–ÁËXÑds!ŽÏ…bxíhõ +¡›ëÁ 7>ìg`†…ÎaÞ°CicÌfR2Áà"ðBDzu_ƒ2ª—ÐaTQD7¯$‰JD|E™œw:ø¦žƒ½`(•À\3ü‚<;0 +|À¶ +°*5`^²Û‘íEÙÁ¯ E©£´diÑv lñ´>ô€q{HEdÖTuˆsÌx; /x]|@â`”oFȋ¹:+HtéõÖ¦¶/TQŸkÄ5˜ùD#Vø*vxgàq÷Ðî ,šoØ ¨ˆ€e¦P gùâO6 +wzÁ9U‘B4ü»BQ´ï¡—ï:“ül)P<ƒ†ÕŒîAPÑ"£$FxÈG`­°´¶ +Ïö@ƽSˆÂÏLã"‡Ÿ8<ã½g4HÑpðš^5@t/ë4o`çƒîóL« #Ùísꁍ¾Ç^§”h7 +I@ç—Yq‰815Ñp~ cìw“žU¢O”Ü,ÕÝâÀHκzO3›ÓnPvJªŽE5CyÐ8­¨ÍYÖ©@ªL‰ªOÉÒÐb¤äˆ4³‰´«æ³Î ìšBu÷n-¦Z³iY¶‹¾—Ý“JË!qøwCX'4}TyãòƒhŸ›z'R¶ôx#›¹Í;¸¤­ªóÈ`çם³›ÙáÀ • õ•— +-(Ðñ{æºqߑ:NM E1)ÈMæ†}k:,¦¨@ûˆg‡x3µMªá@x<›€ /c€ÓPàºòRƒ4І#;€6ŠÔYéá1÷\bŸMA“ ’ߨ1êj {5Ü(±©7ˆPk´p­+¾Ò…ŽÐígˆ³¬ï¥Fµb)Z¨Ñ­Grá“>œ' ]j f M4Ï[NiΘ­pľ¡ê"#o_@ïöîm{©1'IàQ£A’ªëE@(Ü€…UUáÇîÝp™}€OÞ.ø¹2èAÎo(f¤€Öˆ¶ ÏpIϜ•›gVJz +U þ>6ú,òå°‘µ!¡•‚Ç×pÓT +Ë:u='Ïæ^ڕ‚£—è ;†¹>s­ìN EQÆ—Lüý<R`æyâ9Sýb¦–ƒÚÎòÀ² ´ã6=jå6!u¥üac@çF“Ú“©G‹Ö”ÿÉLð:ïۗˆã®ÒF§U¼‡pN†Ç,”…$ I?­<ÏŽDN¦5dý<ʸï®ü¹•FÚÁ9Ùôýhð´#•ëIÖ¨w”¦«C‹;:²¹×¾Kƒ:!TðàÀõÇâïöë¿jÀÓ¦¼æ‰Úþôš\½˜J°d9Á?÷c·ns2s xL•ãòެ…€íËÞz«x}'áÒzlՖ ¼ÄvÙ<¹,],aх Í"76Gà^æ-ãð? òõ`«"ýd8h”?s4ÿ™:CÙÿN ³œ÷é–·öu6·Ê#M=Öwã¬à݉ •ôZ5à€—\“L~ô5OSÃRžë§3ϖ©ía`ÎßٜûzsaÜ #À 9DŠÈ{~ÜçùԵس>OâÕ¾uÁ å‰ß]Õɧñ;f¸˜i‚냵Ô/«®sÕ÷ºÕ÷NF%„[VëWvŒӎþU¾ ’Žª>û–øx°ÜM´¶øyt¸Îڎ Íy½ÑG…^yíâ¹'²>.j!“—wŒð3Ea‚ºO«¨w²HóÛ‘=S~· p— £Ø'ðt„muÝábEÏYsY‰}>êöàÜLœ`ñòàR»5K^ +º ")/±õãôúBtt(4}Ë_ÉJù»¦GŅímºJْ ¶Ý¢P3;Ð šâŸÐ7{<Ý9£ªÀ:,þ<{ÿH<£ö|¡­H +9|çªæ‘ÄS™Åа¤ _ã³s’Ãú¹XÕâØŒ&!^¾;°{nÐ˸Áú ssÛKÐáÀÁ|°^,¬½É¤ +b“ö¸d§K€xrÚ\’ ÌTn3_bóHÝ{¨´ê‚º¹Õ×<%5“KDÈsØÁ¸™úà¶ÅñvŸïj¨×ì·tgõÿ]FŒTäT XçiÞ£.KÄkwr2FÛЙ v4ùÍqÃÜæ'½rI=ÑK½žÊµ­ìÚØOQ.NˆŒÝ×ä9(Í@¬ŸDJ5Ⓛ¸5ã°À§šr2 ÉÀ¨m[¦ßB¯JD*"ݛþå€tÝVkÚw^qÝ+¡r˟Žu)#¢UÛvšŠ¶Ñ7“ѐ2àÚP„áæ!\ҁ—À'@.ÁPȵ6)BÝÞfû¹_Q ïöà‰Xª§)ölÄÌ, +™d™ò,ÿ`A}¡Òe¬=™=3Rf.t¼Öݨ`ûææ6Êïr¡²ù«tk?FÄÞ}ïµöšUáÚɚÐåNϧgøâÙx>*€ 䏲§Øæ £³¸y„§X4«†³;=ðùæAŠî?A÷¤Þ Úm9IoáHÃ(ÒÙÀ_ôÉ ͚ Ž€âHB¤#sƒ¸[*Mì´>Ó¨ƒiÛ̐„åæŠaP® +‡Ü‚6*àÙLCۜ€e‰ëT‰áù=ÇÊ[Û¢ffTmetÑT³ º?ÃìÑ6Ôà„âÛ1›KƒJ_û0¼aV]˜ë¤cxé>.AƒŸ–@[-8l$úsR1èØÀå²ó¦í6N”4@û·Éµ $ Q'@« 4ÔdJa&mYÆö:µ$ÛEɒI 4Ôeˆž àì +ºnTï·’Ç ¯B–óýÛQtÁFåKˆCÁÜÜFÓ<þáT>x§~î#ЂR)’e+@¤ûòÔìuÍ圊ŒÕÛ¤ é\M*.¹FbÛLÈìݒu×ÁJùY÷ÐNÓËzڶ²}ëSºÕâ `¸´IÎáGÒâ+¡ø2ZÞ ’|ÒEÙ( ¼·\åU!Wâ nM˜´þÐkJJZ\>¼“ÜÓ}tXpà–Ã܎|„@«ß썸³hC*×Éo\MdðÀå½Ñäk­uí+‚ Y ]) T *‹Yœ¡‰c‹¼ÄQp-õÁ팛Gu +—ãB±WHÑgI$óG›v´‡ÂXfËoÐB3["ï%²êØZ‰ù4¶êÿö»f¬å›?áՊzÓ¿ÚGuëû »Ú}È´H+u®j)‘ž3|{$bž{x ’xö%Ó°n&fK` ¡ÝÃ)G´'7[Н;ãM ²Òjf5ìªÃ×nBY^þôçW×bœ†ð%&ÉÁÔ]K`´ÑV +F ˆUè¦'„ÑO»~X~Š.:6Õ¾Ar½È5OÔHÖÜŠŸ N ~Å­¶npӖm+3, ’u ±¸‡Ïâ‰'>”ࣄC«É9§©ý™¶%έ.Çüò)áy(…Q着^O*8œ„ºÍx%£JfQÌ +BFü_¥4/%«ºÍ睛v*¶8`-ãN4íú´u1.ÛY‚n$£~õ‡ÔmG‹¸š }þZ þZ y-á;#¤–¢„дJQÝڐ¯Áš+ˆ¢2¼dˆ+W݋Œ«(ÞO”aßÏ7Q°¢‚zý0»DÌ܆CZ¢r£ýý ´åÈpü„¿s+˜Í:/»DÁ + ù‰Ò¹Ý#J°LÔò E§_M¦ßO1m6¾-þS$Lö4™—¿{] †À +T?Ø›#Îݟ`¢6(ñ Šk÷s»CPÂsÜx(ï›v[Œ ãÀÇvíØÈ² oü`cÆ{#º9IkÂg‹•jîSJ «ÈUëÝEØváÅñ/oKzïΡ‹»zªG̸Nb÷!«±È¨—h¹}¾ˆ”W 9óg›nà!2®£ÅÎå¢Ò¼B˜f†?u5ñL4ƒ›ù% ha—n‰Y»¨…"j}d÷;›r¸" +‹ £¸y&Mþr;ðdW\6a—¨JzH|ÝÙ!"ù2›×Õ¡Ï@Y×~½ÍíÞø2ÔXº«N6ž|^{ø‘~ k(Ÿy +”š$.ÖÑ:]ڎÉÄò¿ˆâN¥¤þ¤¸%ñò•Tî7ŠÙ‹B2IJáfïŸ:éÔ1^1‘,$,q¾kN¤ò ÜJÙ«6!®8oœP:,⋠+P1Í]^ю£ÂBq¹çÑay]ˆ}ï}¤uýÀ‘šÔ3\ÇÐáà›÷B҂ +OA#[±å߀šr¸Øjáuhq2K 39פ҂¼ˆ»P€%-’ph%­7ìÑ-iˆR± ]xbëèA1.Ù#Š_á±#o*I^—»‚ÉöA-¹ÅuçþÅŒDÜ@©/MFè?2ôâÃx¤’Í^mÝ<4T–eé§ØN—bpœé&}.Ÿ¥À:¡š«ë§iYë/<ôiØîЪ!6Gö"x &ZL¢):¿¹se ÕIûv70hq É)Á +˜38j%8ÌàDtQpN_Vj’à‚]JŠýÄÁpáö¸HS @1>uuÎOêÙE8Pc0I0†yŒJ›XŸ¾Q‡ª’Ù§kñ€ÈÄ8 ãOÐ- ·|OÍD/wWݸ^íyõ¡cuâÖ¢®ÈD úº”óKBÅ,Ω ûÙ]Џq½¶lewço†B*H9<ڍ4ÜR7ñºå$±X#³Z'J~Qne8y'Y¼V AqÐÛNABhò7åDbù¾"¶¤¾/ˆ¼t?«â/oo·ñ,çr;Aúl•ÉW9ŸÇ= ÄG’–ž ±!³&嬏‚0Bà +™ÀøØ øtÉÌ +‘=áÐz·2dU‰#LÅ©¡Ã@OÌLñºp,³ƒL>Å·4MdœÁEX5æW>ª pÚ­o-Œ}U}CDÍöOқ7íŠåM4ãXö™4ÔoÐË!ݵ~b”¹ö6—Íì‘::Dz òáèØ«I£é/ð褂.Þ4Ú%\ùýûÃ&EYÇ,ISà2òâ/Œqq!çÅÁ¤„&~Û΁ëOe>öNX({@ßó +Q)´@Ûrç£Q„\N|q«/òê:%=ÃÔ¶†à¦dÛN¼oH•î“ÄǪ‚üm<ûàÕ:v‚‘â'k´|?4kN¼øq’_m +{íHiBˆ»/³ÈcÑ«ï¼)o€nÏ¢§9½›òÁÈÖuœ€‚̽x4¼Üt©Ï™1ªfKédîM$Ë.éFtDWu(¦‘t43۔ "¾\CS°”#‚'@¢Qrú4Ü?Úé׋/6êÁÓ‹„º?lm«Ø9gBÓWðÝ­«ÙÆ6Ú¾UË*ž«&ÖÕ̇âÀßÁøÉŠ *EЂ¯2Å ôOXq¾î÷¦ý4Õíã4Ab§€ªn ™¹ÖqfÀÞn ¨æÓ/„rè!³¢! k +„•z7ĨIq¦ÅÉB z¹2O{謏ê§^Zz«Bõø`!E𹂠+äüȌˆdrj+Õ»f»e%î‚ùKð…ÝŠ³‰hŽºR ;š$)qvbr(þGEqLaôÖ¦0ú +” .*a9¨Ó"qÁIKÓæ´á°j%I;  ¨lð;ÈÄ&I@I}žàM6§ +†Ï³ <*ÝLš 3Ó¥€u9s +ô!¡W‚ЩQìô²Nӂ|-8aj¿dž«‚pCl¼vj?Leø½BFšoę¯°Ã“›Fü GÀ?±l”çÎóæî‡`—ÈqD”XO2)6âFxZÍïÜÆ‰þjQߋ¸¯~W^Š•`ª®VÍfìv‹x¢¦<Á¥¸ÅÎñ …Å,ͤp¢š¾á6Ó²4Í5n×,])E¡ŸáÖЅÛ¡>æµd¤æ€@Œ?’b(¼’ ÑßOAë÷F÷cQ¦P <ßÃ;›–øöވ¸J‹Âsy7ç‚æîoÏÐï+ÈÕ·lWƔ80;VVÐZ>Ãú³ +~ð;!£Ÿ‘'œWŽvO6ëÜâÂ÷ÃׁUÑàpC å«2 î+66K$à}€ƒ§è\Ý O^Ï+@:{ õسºK>+‘jpðø¹åΓE “nP•÷À×ï½§•7ÿhŸY¾Ûv¼úP(.ÄÎW¯›‡¾müC-3~ÄÖîÖþ;þ4~ó[€[’I䐵ꛀ X±]¨$=ä±MÜÞ°~®º¯2uIÞl 6_ \ñÁÂóÍí^|Ûá«UxTq¯4pN£½óFM ù¦»7­ópqPÁýLÜ1÷ÒÁׂ»1‹ª\QՊ¹r›P džÙ"ÚUù‡ï ŽFUmØÿhã谘ë¹þ‚æLóp4õ-c^tŸa²‰¦AÒ4Zj$%œ\œ#À>ύŸlØ6œ¶sƒ²MÖý剙~½¨VðÁ_jæ_ÓènÌ¥‰ Y Y‹®ç˛͊Pë¡KDÑöQ4|[êŽÖy{C½džÌKyC…F¼¬ÎM˜ì•maQÆe²yÕ¼\‰ d ɸÉtQøÀ*â-å¯Ù'âY+M±:tÂóŒÏ€1>©5q@—C™IÂ`Ÿ=Þ.åL.l*°¼Íðá`áÕáŠÂ’aØ"¦Œ:¹o ãe¾‡ ó—Z‘ÆB¡._|¥pS[gx͜àtä¹-¿…3~ û@ÏcKh²³B>´S …âÂpüXOAń⸰ž‹ ú¶ÎIÇi»ºO)S\ÙòÜYù1ˆ^•¦^¶}µZ™HTÌ +¼aÙÀĦ` +[m-Lĕ;3oHkh$£IT¾x–(+¥ZÖêdŽ*ØÊÖø<ҟ!sõPüžx’“·XÌî1@¹ëwȀX;Þ¯[-®`·Ò1O¥ƒ¾qožo#YÁ¾Ï«†Ñe_T¨OA{GÇ +Š.Ç|ôé&0fÄ9ž™Ã·ç‘=3‡d¶iŒÜò4“Ž^VÅ« 4FëÝÔ1rW¼®Ä$õ{¹#¨Q<»Y³sÓÏJ>™ìĩ¿xi›=Œ +_ þøC}îÇlí™Û†mθèL€ ǹ@ C!»³Ô‚C½Øšv™YµÖôT UécÊ1rR´5<®J¬µ¡ÞA®ø¢ æâm±_x¬[wÅåZÊËK·}°Ÿ}êP¿õŠ·Úçt^2ŽÕóylhôQhž;9 ™µGÙ½Àî¾[zéòJôJÖÈÕWjO‘ ª'îÓBTé›#„ ukP$Á‘ÖÆÐVëØmš7†"œ6ºD­«éCõ´œÓ·˜„½ûÚ4¤Ÿë¹r䐒O¬FÁƒ&,# $–ƒë® +¢¸âဣu@.ÐRãdIwñjï5˜ææc©•“kÍÌÌE29™²B™‚*¢.ˆ+šÜb,\R >þþþÿÿû뻒áÌ{w+{»º»k««{ÅÕÕ]UÕÛæÏx;Žáêïx:«½]ø¿…}øÓ­¶[m‘¶úV¹ñö§˜`wõŽîü«Îõrh.ˆK˜ ÷ h?L¶Ý xÚ÷fe.Gø-ÁYþ{ +@kÚB:Èý‰ Û€öó€káhJÅe$´¨z÷Ä,’áNvÖ«…ÙŽî’z.–y¼–{ú1 ¦ÃŠr͎† ™o¡à–nÜ7ÿÌ\&SI ¦ƒ!•€5-l~á&qb>(»~û.zŒOp7¸H~8 ÙrPs|vÜ ˜]Ä/¿Á¹4€ „$ +æÎf®zk~c8üq%áÕí2,ƒðï%ÞÔ©;¯&òò˜¢ÚpV©‡MܚR} öŠ>ïƒþIjÀ-]Šg!~/pÒ`h—iÒu÷˜Iː>;_ÍÂ*õþÂÊҘyÝI UÀ–òØ{‡Q=Çñéßhšñõ é€U7§¢åêÐY¨ŽmBê¡êÒÐí¡´B“»jí!bv76o‚Ò°†9·ÞH<â‡vmÝ)1ˆTj‰+÷÷B¦q9nj †_3¯/c¡aò5UÞL‡4¯\\"mÞǍÛÞHyvïwÅ\÷›ÁŸäýÙšã1S ¥5ŗ){TnoÄÕ&$+5Æ6uu/[iHðÍ=m‡Q$Ôî0 ˜È5CL< Ø3Mõ̆‹6å·GÖ ª·ÌӃø§Ëا•dS‡Ÿô)AFBÚ@‰ ‘ì` P×)Ò̋A21FFú¾t%;ñî€d€ÔòAÒe½·Œ¬‚u}™˜„'3xãÈ“5ó_§Îï‚>J\¦£C@§c:(àØä6/yÍÂü`j5rã4©G¡ x÷¢LÊzhDi~Û|:¿0ÆgÃ$…`ŸÆ@ô®›L\ -òž+¿UîCoЉAù”—ë"zƒ"í}§8´¡G²"N?Rdåÿ7{5_ˆK8ËÏ~JÛê +кނæ^$éç½â]Gü‘ ýÒ8J5lN¡?ž%Œø + ¬g‚Hè7å;Ôxæs昐·'¿ Ò9LJ ÐItOX¶{Ì"Íüwe[‘gß,úÈUÄ<Á~R~Vãú(ç”ÇtO(¸hðÁˆ 9f†žàns-Ìԓí¼'>µÍÌ¢òþÜÅËœÜ4£Òy~QèWz@•MLÆëÇÙRnÐï¨<ƒ@u«Ê?ÌXpZû1s­>ÜHšP—!ß]¤…¯Ú’¢=‹9Àåá‰u֖ð§×fúªwìmeÜßâô -ږM'AJ¢rŸÈ‡mT‰ ëN-Ä/dz3Iô¬åI`Ê´07B|.i΋d}Tó!wúÒáK­"ðbC‡i W^wqup@ &|”擳PÉ*VnigóËSdíñ”Ðs­ä£çØÒ2&Î:BÓ͋:z…0ՈÔ këŸçV=h‚ðÖd-ÿ6(úO(Ü÷&ÿë ÿ×Ð }™ .#ó÷\GâxÖ¾˜ ­ô j7¦:Cs×2Wg† <÷¸÷·ìî1†vm„¸˜LB·»ª×#¯_âwyݪtxOÀ®;ÛbCc‰jìa’ËÕÔ¼{=E{Îx–±¢m°šuoÚß-ăµw ­çØoŠÍ~ó ÊNï›Z`µÏ<øÒCHB‘£ºj#==¤0­Qy·ßá¹\L›7E}èTý­|uä—Y›áø×0Ð +çØåø»)¼i´øVq ²ÙW«yÁ15ɕzÒ0"xP]V%çóðÓB?I@ uíŽw„ºú;™4äýð£÷RS•ßu1ÇU|‰xɎïvèÛp‘-—j绬ŸÞPÃoÒFw˜Ӌ¥€šØPÃ:&(W õM(.vˆ%å§aìI&˄­Ð{[Ïkc1µ@!š'"Í©1•_t£Â­ÑúÎÆW‰f> 3³î4Tï{I‰ÁQ9&ìßÁ×tW%{ã^DWŒ‰™°éJ3ÕÇ.„!¥­«FÑßt-«Ý<g°dÍNÐ )Ú_ÝsӁ"Š}Ŝí·h©äšI{NÑö͈  £„+¬‡Ûê³?âÃÑñX¢M\kœóÈU-4¤ôþZ¯(YÍmL¿K,pÌ£l!iٙݦÏ~¯:åy)}Hgcç0:ua1‰êI-ò|2x…4qҁßúp5+Ïgʐ’%[W¥RðO[±®˜xÀG=pޚkü•š9Kjëz¼!8%°;ׂG=Aœ1£H !Ýý± Ÿ¬ù :Ѻv[¹Á³µv¾)zÕ©5ôÁ8a“Y>…wVŠsNˆCÏxÈÎލ%šj~»#3Yi•À°Oÿ95wë…Xoo‰8ø‹í“E´¸xCÑ㣁(Ïm‰>¨­¶î nÖ õÙyB1¸Sۈ€Š±eÐîœ)䫽† tÙj;¨¸£ÁÎ;™`É&P’¤â™ÅXì­í³F@ +ÁWrçÔêÔ(œ0ِdÖ ­·8¤9¼ã:¬)ò‰FzÃ:U„5ÎZ+º9Ð"ç8I•¯­Þ‚¾óy(ÏY9&‡vʚˆ¥¹ŒV%9a¾“>$ÛÝM Ÿº%7¥u_%8ð½,5~] áଠ×Ä{’{Àî`þˆÃA¸ ®7G1™42•‰ÓyŽƒdÆàA/ âé@‚[IՑääüÅÕ÷áx‹O• §x ¯$Î3LiJٌ!qÃXë,…z08hÀ¡Ÿ¿‘(9¡DâZ”^ðãã4А®¯?™Ïn$ñ/3>­2!løvÔç_ß-²YÐô€7{rÉã<ì¦ÊÚU[(÷’Ùۏ3;64gmM³<è…¡ÇÁ$+¼•²¡äœ§låò긦n-P*M Ž/Ð=P›‘Dï*þAòÒI¨×Q´yܗ¯!=;#r“€Ùl&Šðm¤±yӈ./棕ç€$gÈÑ´‚¢añ¶Ÿ{¿ã ®@7Ä$Ɠ*#Ñù°qíNF“lµ’{Ãèôv—\óy3Šáîj¦=H-X… }¶ëlê Q8mQ€fúðé w‹ƒa& :ÙðZÔF½^Ä(µ­’+Àűë¡÷Ä*›qIªËªo. 1¯&‰-ÖX–¹«°eQ¨” tâãíq{“>äÄUB—Ä92iìe6qöŸVÂõ¶²ðÙ®çÃç(†§óˆ³&ûÕd÷`>nU6£Hb»Í}@åË_M)+”Åٝ›1ˆ§bHY´…ŸÀ‡RR˜êQð|àfx›/-[¦ {S3<¡7üÕ¶J6_ql՛­1\T²üfzn³óZ‡ó–[Dß¡ñîxÓÁý4;·¯N–ܝ1t5’žð»ìǕ¿IHéOþˆ ÐÉ·À¼u§àŽ}¡ž o¥–؃iÿ›vaq÷îëÏ7þÌÿ×ÿ«?·[?É?ù+?¯ä'†•ª·}ÄŽÑæÃÏûÖŸË©XW™Ë š/ (ø}óHlwÈh™m>Bɳ¥Ìs§H€œ]¾@y€ö‚Ìš~K±”/ióµtwfI‡gWR´T4Tãq¹®ˆ©‚^å\l¯N¬¨Fh‘ $làœ”žúU&tƬw…3W‘!êîíC½4ãCº›Èvßæ‡w˜þ~óa{‰5oì0Õ=(k"3Hð¶Æ«À¨UŠ• Eýñ^|O‰´As_I“²¾ ”f€½m‘} +EÜȩ̀”#Űß3SU%Dĝ&K‰I’ý pö¬Óî;i˜Ø s¹ &pÊ}Þîç'Ñ<·.ž ,“‘?~ƒ#N»ð`Sª ‹OE9MèMêw`ÜÕ6IÐØ³kŽÖ@ŠA:`g¯˜¼tßøe$ý‹SßÊqiýÈñ÷iÛY¼ÀS¶ÜEÃæÅ™OÒÎÊCW vʝý8m1N}áâ|á +ïaȼKšTŸ:>_Í}ª|÷æ mx…àlBô!Ä&—œk<Î'“©À¼Èdñ~G”ÑèF¾h"µØêP´E¢¸¬(P>DDÉÃä¡Rè¼ Šó¦Û™ÜžÐÞ:ˆ~‚kHXž-Ù­ðý­_ô…ûÎ7÷Âù¥¡|‘¡oðÞÈŅøŸøBùÛÍ/í}ÿýBþߋýð¾~óKø/ùBõø'ïD~ %i +}ÄfM£-}Đ 6èH#îĜcH†£X6ft×ÿøD¥ô29ûQÜæ“²ÞàcßuÄäG¼ðŸ’qîÑ84å¯99)P“'J…¢ÎÖetmÒX`mÉ;Μ?{“Âs“ ›8 ¤j<ÄAJ7•%G›=yõOG›faMkjRly5ìM'^(ÃNï€j•:=H˲†o.ÁK±Ö¨BÀʇðU¼M;Ã>ãÇ<×]™‘;qÙ;ßÛ}ˆè¢·mˆVèól^aØ9œ"P6å–áf„žÕwÂɵá?¡—>òÞdh9œ)¤&ñÂ>øa¥®9c„ÿ’‘‹@@„ý«±P<;óx&’ߺb‹oA @'°è#§r¼s{©¨=¤xŒðNµg@ЈŸí’‹Ú“AæäJ„U›° n%[ØÈ¦ü24œòÞň8*Q裃 ¶E‚Cm²B¬:=pézþJ¬FKf¯Û\É c,ø–ÍØçRSۉﻔM ­~C»óËØŒV÷Ô;²lׯËô I7䭃þK¼R>á'Ršti,Ýô¨ÒY;Ë'q² +Eß6:‡™Ä'N¨;“¶z‰¸Ù…ƒý@Àð’mWiþ:wÐLĸú‚Ù²¸K@ɲb´œ˜õ™ [$SiNëÏ8 ³»¶Ç¥ʅcíEɪܣdÝXdۏ1rDÚ<ý 2U. +Ÿæ ÆO¡3¤ ædLãPK‘ò³ŒAéã'?Î]ƺÁ–š}$6ZiÅ.er\Êþdeo>Où|à6ø&p˵xéís\º¹®Yƒ] 2X/'iÿxóª{ü@.?¤•†Ïɸªv|Ëk¦˜aÍcp 9¦7æ 2â?üíËw¼K÷Ë:J£åe üRã¯{ˆË‚üiÙp_Ê.YîÙ0¾uÆÓ8ìg€a3ºålf ºS _gþ’W}t˱>T+ø‹¼f]ëád˜aUÓÞ]=áUÀð´,ÿ%,õÏÕѼÇL ½§’ìGû€§û°%Ìëg2¬s˜çn»,õîã¸kÍÚΝc¯ä±gÚ.U}¢ãd1Þ~þÂýº6óñ*ÇË&ÿ¼ ç>Ýc´º»Q«Álv—>¾Pì¼GßKnUÊü¶^E‰.뿀Çz˓yK¦^Eò÷{ù™j¿¶•÷pž5¿0‹ýÀ}ä°ÚnD¸þô#c‹Ç®»Ä³ùÈc¿û­ã#S_,˜5Ÿ[|ÅTO½ìúOþÄ¸Én¿þ—K¹Þ¨y¹Ðôþ|Èzo¯ý byنþuòë9sGÕҞzk¯öoÚBõúj“:X/±0®oþÿ²1 ¯Ïº›ÿÓúÆ!†ù³v~Ì×s[öyÃ:Q,ßó¦t·I¿üCìûCe~¼ÐCñÂxÄ1Ý îmßèÁïüwßãÐioï°üÞôž„›Ïv4ýþç3KêÑxèý?‚nÛ9¤±¦ƒúýC½dóôã^î*{)õÔzm½M'‡úl—ü?ŸyâäüD±úùŸ·=ìÆ>ÈÑ€ÚøÎ†ÃŒׯp‡œd%Çþk|cäÿz8þ†Ü³ý}}}}}ûç¤C×ýíŸÞÜýæ²U­+ZÖÍV·­N¶¢·©­ÍVÔÖçët•¯kk+{úß³[«­ñ+|ZÝ}m}nηÿ0ztTJüèŽnFQ4¼Uq,Å~Àð V2,ñ—úŽèÅ-ƒìyñ`JŕÃÆ,«ÿØÛRP÷¶N5¼|އ+åL~ ‹ä‹vù†)ÜÇÆ«ß+ûüÔÏĈôà\¥ê?þ\¥õh’®I 8gþ‚å/Qþ%Ê]íGø‘8u3j®Ñý¥Ê\«ži" +úóI|­ÀÃÜ~™”f ?س„®]í9‘;ޟö¤ƒØíöì9'»bå/PmæÿËãÎ>ñ³}L#dÅYÿùj× ¦s´úl"60ói°}ÔΞ™j© PևàÊEŒCmùêe֗½’wh%ÛÇ,œY#Rtô“P®hÌ"®†¹)Bk®Ð×ô#ÐÇÇ.€_n6_Á¶úÒ§ ;yÄÓ[¾&·D[=BÎ͝4âë8ä§2ÆlÍ4âl#6‚GXK^W‡4Ö¦ŒËiÞA†ìþð cîXEkcÆò&Œ´“gk Ž­cy=UDŠt®^I½×ëHLË3[\.è¨m«N¶†T;H_Ë&²rQš—隮¶‚¨Ù>0u`Ï림1lQù4´u6‚z¡XĉŽ#‹ÍþVkt G•.£ÌÒgk“YG{ˆ‘æ Í¢V¯¬)ÆB±Ù'—”ouâã.W‹E4 7žQ‰]¶‰ƒRŒÂ 2!«¤†§_DİçÊEŽåLu{+³‡~»Š"mQžQp=œ…K,8ú¦NõCµxZhC<Ø%Fûçh2Fc–jû!¾èœ^“°S65“9;YáeÌÒù(1°Æ,Ë_öMbu¯æÒÆ'Zìäáåc6lÓoJ¶V޼ÊÚGfÛÅޅwhb.Iæ4“ªêI³œÐ)®ŠAÜx5'xp€ (‘C¯(ègTáhK–¼„»+֊Ã:¥f¯Þ\ÎÙ·ß‚*7b¼ƒÇ YóÎ Ø«ù;% v¥ H÷ “Æ¡6Ù.a7œ[Þғd–†š\”Bo9k545S +±cp–z q)ʒ ßW‚ÕïÇ K²ÕøŸH<%×0($wCK(,áAZÁœ£!;jû…pç®§*$n†8£NÑq̸WÔD²`bÚg¥w¹Õa–':<ØÝhwP€1ÇW†‡YÃYB˜òdåӏ ë‘lŽ1Ü»°Tò¹{îròûgx¸Çpͱx‚‹::RNMŠº4nEþ¢•`Q~=­ŠIÚh“1ü°­Ÿ$ÀõéÍ’}J÷ˆSt҈&Ém% :~4’Ë$£—«Ž\ù¡Mu|ʾLú@ÕVDñ«ï/˜èöziÏoD²a€pì…u0×˂Ÿ[GPíg7î`ÊàáQ\¬l÷.í´Èhȟ©†ã7u5MVlÇjQXg–ÇF'„Q½#Þ_gýk@¶³ÑÅ6æ}€uÛ{ë +¸’"d1ÿüÌnM@@á߅ $_´›·våoönòÜNYfòô€…ò\ÀG¿#|4ëï ò%BÚa’êº6¹b 'fç B Y5'!GXäÊu<$À—¤ß¶ÁΛ+|uGžš@ÃIN~H+:Â[V9pÕÄzoôYÞí”î}à¼B]¡=èè0 ø›žwx£:öãËPÈ@®ëʖõ Óa¡á ÖŸþÎÜïWoöë颲0¡8²LVaô›tMžP|ϵõÌ]•};ðÃ-ËÅxQüÒnKä.ъ<ìÈYÙ »ª(«'}vúDyi +½®Œ¡VÀ²“ZX—ŠXg Òvf~'F} –'¯èîôm÷Á¤Àð¶s-›°&ڗBgk ‹ÑŠ]É |’³±–lƒ¡áÓüôÓzÌö%½fŠyËüçÊ :RZ±<»æ +<$èӚy)EQ‰y •yçc_ïènýúÉä¦Çé;ÿ«tMr›„Þ'çÿ!¤å&—E°ÿž/“¥ßº2þŽídB„µï^¼íÈõ:„—3û™! zÙ 2$ •ãq¢-ïBî¨ òᐣ*f€OÃQñÿV±'RÂ^Ìij³ªÇsùµZdr%J €$„•žGÅnd[o¯LɹÄcÞ_.sÜÍBÇ +m9…L§ñê-:W)¿Â’Ý%)„˜W~cåEåLãN…ûÖ¿hÏpjTYk Š ì°òD7`#,`ÛUÜ@ʰ€~»Õ‹ÁQje[ŸqÚ¼€uft±áËßžn.ÿøjÏKR­¨·qà펗XNB…b $Ž{ Mµ³§8ÁFm²³äxãªÝ/‹»LE8m#Q†×$ÀØe(øð32ºñ-pÝ뺇Ž1Áìk€ÿ›cOvlq 2ïÍSÁëæƒŒ_¬7¢,Èzc$æýµ-à-gåÀ<®MMÚM¤b‹2_šô>{û¦lÐl›—Яz÷üô2Š8÷NÌeȲ«Ðgí»V¨js„LÏ\¦Û(­°{Õ2Ãêm¹²áTQLs`»L6Øñ¬õA¨©)fÛÔÑ2†?ÿˆÀdÓoSC€EBîeî!ùlÓeo=êx8«¦/'˜UÛ¶ÜÁ¬CåmÐñåºÒ¬qk4< # Y¢ô¢÷H7Öî-?¬÷!¤](xWºP~DaÞ6Ž=ÒíîƒÝ,õØ{¤!ÿ¯ç0iüH[Ìèë¡¿WÏ ”=ýr#5:L"º;¾¢£Ž‰6W£ˆKhâϙ£ƒ&]À_áˆÕW61VòßNª*yß`S1â,Dâ¡eÀ÷#×Ù²Í0»nÄMÿvDMþë êÖ"l°¥XGDiºœ2&¾…uPPO.øãY>ß11lL›³‰Èj=ØÓëvð¬ŒP×{Ш¸„Ùdƒ¼6V&Á=šw½Ÿ*t¸]Ž…v\vàO<7ôŸpä´ÿÄÁ”ïëW‚–\N‹‡¬Nwg_œ£Ö.Ö½S­„b❮)ҝ¬ÓårÃrnÎR·…r ^Àh•ëa#­Žy¯[g“ƒ–×£υ]*"˜r´š‡ÆËôø'¬ûUÃýb·ýªã©’ñj¯´ñJsC*± ªb†|µº¬ê°9¨¹y,ÍKPQ ÁæŒ «>±Ž{I«yՑå3$ˈ¬SõHK9F(³¡þÍ_üÚ¿ò +ÿçÿ•Žë•ÿ¾+ÿ׫ÿ* &WþXZL”æ~X¸~ªpIôƒ°šbˆ­Pío¿Sí›1šÕðÌpr˜Ç¡É¼µ\£t“CòÂ;dºòh,80\s›ٍT}Dz6÷>ö<:UgŒRMQ”…'›þµ2;…ŽïáɊ]u„ÐO S€[7éæŒÛµå5HæÎ»t[¼ª +œ6´vðӚ‡™ÀX°ú™Uº ÃÌ ˜-õà"¯<Æ!\ˆ8~½FtPu®ž F½Õa«Æ¥x*j\y{È۞„ËM¾M7Y˜÷ñ†›ÊqìP0ˆÛ¸„å®*Ñ·€ˆ·‡Åo¨n 0ôL^LÙU +4ÜY ²¨(û+l]X•Õˆ¼ïͯ^WÐhª´‘ýV´Åó=7ßXpÓ÷xEç,û¤@J£ý"ïiâ[áZèëŪ1”ßÕVrªÚÙU~BΨ-ßû²ªñMt/#=èO•ìÅÉÉf/©Ù±ÚR¢µS~8žb“ †²‘ð¼ß¤GS¾àHŸ¥wõd`¬¼"þbº^!ىl?ƒž&»VHr}Nüó‰ä+º|H¼ôÃâ•&@{l_]u€¶ÔþÆ-pJ&„OܬǮT#X¥2ðO9^׌E?âŒð€Ín”–Ç "å¤`P×ú§×lM/‹Z •*1µg­fFNÌØc6î_g-Յ5E +F‹{‰0«‰ÏèîLõ3ç¨A@–4nՉ8LY5Ö±O5F3oÕÚÈü+–±³PÿõD?¹"y3ËÌÚaoR5 Aˆ­®}[U-Ý+j géâ´tfئÝ[…˜JñÑvHf2€tÊ}’qðìXyŽ?=„éPçá3L&މ†÷½@ÒYó"ïçH3yó· r†¼/Wg¡ýž€LFb9 n +Ú¸u,TŠc¿`ÖԎ´M7˜ +V¸+ä0›²mfï$΁sr +ui +èNs¼¦ +æSìß©¡]b¯J hßÞ̚®ÍÓ1šFI¿ŊH8¯Ôn´±è½Ù½=î|÷zÛjì.Œn,F© 0J¦! ÕÉ®”°.+ò›[‹jó»º"á£àEGLZØZËÜyo·ì[mFl›ŠîÀX>ßûˆ¿5˜©Wª¶hì=ö&{>9@à•ZCs>~¯6~` +RèÕöÕ¢/Íf9Ù\ŠÁªJXÚ÷Ë5Ѿ,?O84aªŽ£šÜX>1 +¨Rþ /8ïÍdYüŽŽÄr¹•èþ?ʖ­aE †µ¡9pƒ9$£©P‡„ŸžÁD¤ZÄÖŒy*=7:À–@È'ëŸÈa(9\‡³/õmèoDkv¨lwø-øm]ȓRÿCcíàÍšàØV;èPØç&šè±as3T¶=ñªË¤DJ$V6þ4­ŽÒ&Eusfÿ”Û¾Ú1 äsðÖØuR;c¨üz*ÁŸg ü¬¶$n7D¥,R~NEÜgO¬#íw£Äuž¢ÅTµL¢ÖCfOŒ­­Ͻ[êÛ­Ô¯­µ¢TªHD ªŠÖØ*Wá‚1E€³ï÷÷÷ÿì̒LSÆ´Zû›¾åöûÛÎmæïCw¡½s›wœöôý¼Þ¯¹ïtw¹½-üÞ¶÷}ø ½½üÊaÝmÚÛµ§Á æ¯ßSç-§O#§{„#Œ„?|hÎʎ˜,y%æÑµ ÛïdݘY™ø†IðÚ3±´‘BÊTAöLRŸ_/\ùViÅgT¾ÙÄm2ôLlé ÜÆd”/M¼«Ä«¼ ÃñLz׀°IÒ§O+&‹Šæ$xEÛI¦œØµ&Rî¸ä³åm„Éo~jÎ/eÛÿàä£ £fÇÕÀT¾Ì0 |Žéûò¨ûµã€çÊÑls÷êÑ!Q«€2¦F!¾Ö.¶8X³×ÎËÓ¾wíeXí…$Á•ÄlHÑüm "»r˗VÍÿöŠ*2:-ÓïŸíîʌ)nȲöɳß ž›ó\׳w³;±ým)?.´ÔéB\d†¢•:óò‰ëÊ{¦£_ÞTˆ{UðImÒ{‘MX̞LĐ©iŒ€Àñl‰–`¢„Öð +#õvGrSۄ{ +2CÊåø2ÒÊjL‚ï­c¿Œ'Ù±óøÌÎF«»»F> 9|¥C½?ÉÑÓ*ÖZ©ëî +·¸¸q⍓¶µNßý/°>¿o¯ßïý¿—)Ä}9x³­ßӁ`åϹOjå=ú»‚g+¸&›­Ú–´øõ, •ëý‡ž§Eƒé½Zå֗Æhšr é#WJò‘.Â\°Ô慎X4vœi±P‡¶fÅAX–¼¢Çwa0Ç~øl²fÝ¥n±Æ]‹ÁòX§Ä…íW߯aŠåŒz ëíŸä˜a&ã\ŸPÛ­"œPˆ†Âº7SÃDËß*¡pYîköhR=:2ÈÝ ª^š¸‰Rïõ»ñéÚž/ö¬õ>ý‰{¹Oƒ +l¤c8 j½š=Ô 5+xØ­6fµ,=‹—û…w2 »ÓŒ^#’9æÐ\@ßùì­¿ñ2ß:ûå¶Mԋì£t?è?|èuº:týG8^™»”é[¾ÑÎ9°ÃAäÕØ”®Äq»¬náã1xÉ[ÃúO|f¢žBÒâ–qÆíA € åØ˜si?)EÝ³¸d ]Xò9Ú·ÞßÇ- ¡ÀÖeז÷„gi÷(¾™Õa IÞâæû¤BipÕ]mõÝæ<Ò꒗عÚIšëŠ›ÔÚt9Æ}±#D•|¦Gn¬V|ܼ¸·áí]1ÊO—ªh*u1SĬ‡1¡=5Røҗªtý,"È\™ë÷÷øxUÎW-ÿè…r/FB»Ê¸Šè#µä\Õ½ßËԣٟý[rôg+ŸŸ‰gE”œg¤Å!ZÏ£¯÷2íVŞ¿ƒ.ùÔR¾mÐT§æ"™>ÞÚ'f¯LY»Ón*éÒ¢ÑCí©ÉÇ»öb•\“?gv*ÐÏbUmÀځŸ¿Zï®)yåv¹–Ï ¹E<Îão—E˜œªïyLE’që.âcö| _°mò*†­ê@-Ö5Z*!TfÍEöm_ÿ€PEÒ·œVÌ܅ »†ïh¥cXRõøÍ·¨×p +£Æs1æ€sf‡ÚٗDXJÕíšKHKµe¹pÛ¤×DNŽ8­Û¤”²åb0™åƈ²*…-½ÃªX›rbyÓ¸ÜVh£—¼‹%|zʽÃFì8»éK‰ø‡EÊë+ í¾±ÈlPPõ™Eõ›63b>“½Vñ2zË™ˆ}•4[—ýhP‰jf,õ¢¶x©¢³ð—Õ°ð˜YA‰È‚ÌJ¾ï9AJt ÐýTi$ßìüJXÿá{h¾ƒcˆØšbœ³R[¶cFýIúí+~ܐ¶{ýÜÜ#`³ËÚ3ËûšúY +üÄzß=»‡¾—ã f®U²+°¹³Kõ–ØíÉåoP…z¶txYÆ»~ߑë%€]"ȗ%Å:öÊaíÝA‹¿Q&å(ÄýÐûyyòµs`"æ>"|q«nôâuƒG]â·Ó¬VמדÚTØðãlTicëÉ¢%Íôė»jÊ'E£~I“Òõd­Òr¬—=Û¥ÍÉY䣯5®} y5™E~Xås°]ɉüÍ^—Y¯lYÄ"ŠØÏKê¢hš]úõ¾Õg·ÅÄ7º®R>úz·g‡ŒŠÇ„óÎqÙÈ妺ÁJëŠRÊó?º +YblÏ•£¾ªÊ¾«U2§³ý+tæJ_ü•èã¤vFþ%?έû;€*òN,mC6þïâTÇuwzßëž1ü'u÷ŽÔp ¶´:«2Ê?;¹.û…»8û:Í­Ζ¡Ò­qã6½BÞ?ÕwÄâhá}k´Gbz€,|ÿ5Ä™.¨}k¨ð8­:Áõ²”OòkiÛç‡Ö¢QAoÊ7¯¥Ž3üž.ùí]Wl¦òëECDš¤ +e`0þ³” ¨ªE]Ôń$ÖãÈ(Ýx;{ÈJ«êÌL®êê\õþ•ÞÜ|êÃü(´ÚÞèÛ-¡ÿh¶‡á²R–Ñ»•t”â°ÞãôèU•_s²šý{“pº ŽièóL4N-DUÑ.…O¯Æ,ópO<ݼgUºz°4KíŽákDºã¸ð‘¢[óÆ×Ö;ZóÑ/l_s¿;¹.û†‰zTh—§=ûu×{ϲ¹ï[`ªÙ؇RÝV¾ӈ;RÔÍ{™ÛûPó·aÌÎÜ9t·žÁ„>e›Þ½g¦Ìq@+NÖF‰ñü¡¨É1XÕ·lÕ\Ë=4ќÆrße° 5ƒéaPTÝЙ¨ØÔ©µŠ õ¨. ê¦Ib›Ä`ô}ø %e–Ç$d|¶•'²Wr¿ÛŠ |Zxàö·zŽîÖW(]Ýfý‚ÙE[TªâBlä ¦Í³ýëÒ6Äß,‡‘Þtã…*Í:ÂÒÎ+žïHó³hF©Ÿ^~ˆzì ½z%c:­Žü¬pã֍]JÝ\ô2­¬f«ÎP;Ô³náÇ¢°RnÓëîO]Ê)Ö|fŒfOÊG‡·9U¬ÉM;Û©.µÈz¼«éqMÙ¼ÇRä%Ž¥ÈÕö1š<†ÚÕßElo~¢¥ +ܞI’Ò¸¢íá=›wO}ä´?¥ÚÙãA{|¾ÛÉGoM“†«¾Áaßq³6„¹ßŽÊÜí¸¯:ïýTɁÓt ð!ÁǸ¸6„ê¶.¼’VpŸx¡ù*_V嶄ǍS?ÿ@å¿<óâ¼ñõaOÿ%ˆ~'Q:‰×ýàW'Ftx}F§¬Ôçµ5+&ð\TAqMý۟äŠ@®}bRêåÐäª;ƒ›Œ£Ÿ¥]o'K̤Oñÿy×H)øbcY‡Èôo¯ú½žï-Þ{-Ýø¦«€Ç’T¿ã \„—W.êi?ÿ+,úÉ5˛M¢ž gû#øßIþêLR ¿ßHÙç¤ÑH›ÉüT˜#ß´r†0òèå> +FÍÐqE`²q£ÿ΃cWú…ü¨(\Ò6c„ ¨p‚Hfãà¤lúd®¡øtŸêu•w¬î÷ÈJ}u§ËøeÝûž@Jcä­F›p Tƒ|ºTcÔ!¯Ö¬¬É¢8È´Æy` FØërœrÒBuuÉ>Àމ “±<|´©x¼4ƒ÷D„þ¬¨(¢j¡îìm$BeO:傺Sӏ㖠+"`¼1ÅÂ?²à‹ü¼ ´2!2ût¿2¾Ùdõ/m»üÇDoÃø¼è3mðÏ/¬õ‰nð Jž°“~»¹Œ«‚„GÐ.]pÖÔ· æœ*^¢¼¥¯4LYkG˜OtBjéd°ÙŒÜÏKô‹“PÊF’a×ÎÇƯ9åëj–е5gŽhˆñö35L¥hê·~D‰ÎtRq&|c6…œéò)R)BûVáGH€ œù;R«#Å®÷!Z¸ä~jT+ÛxÊ®n~†ÃVÊ©ZÿB5q\˜Ò$Æoò|…›Þpð„6Ô²ozIg›KÿY’-"móVÖxh:&¤‘ñhF“êGÒ!:;ǵKýqäU¥€Ž®«&mNi´Ë€ý_t®‰Ž4!ìJ G˜ ù”æNdîžDÓbŠ“Ýç?P²”_Y‘¦Æ®¼æÄ;×Ʉ=µ÷q…5¡Ž1„¼übÊ Óæ^¹Ü­±‡ËŽW%ì]ÓzTWŽ-üìŒ°°{nƒyøz@%ÅíÁŸ¼ï¥Œ»‹ÔøN˜ËM›ásµH(VZ,Xœ=üÞLn"ÅՍ»TR•üfï?$YՍzÞµuèáÌ?3ôøÈ~gÊ«æzâBpßɼjN‡C+qö¹òü‡å‹ßi gQ‡›³¯}ÖP ªy˜ÜgN•Lƒp„8N¾~ Ç("Šö|5)¤ ºÖˆ°ìdÎÁïï¶\µŒâÑìRd!=æP SW"Gù–ÆErîlvC¾އ Ÿ]t'Ž„+<¶‡5µDž +ÞÖ9ÕÅEFámýÜ\<±çUËïšýüYh•ø èý2µe÷ ¯Ë”ms‹íºÂ‘LSK¹ °ÕèIpi«ž^`³ãÚÓÉbá{t¼ÒWùãCÏ?üŸ ôbTHÏùøWŒe¼9öNäÈw€†‡/À;±ˆhOÀ;*x‡+SAÆäç¾YۍÍuޖùxò*‰!Çùˆà: !Ë9 ˜[P-²lúꗥyj85šë€UdeävtüE4PUwV¹_l¹w¾”?Ù+ѹ2P†œÇ¨ÅÌ}³ê\]¬Sܦ,™Ú]ë©_ݔˆä|í)Hü»©Âş ^9ÞYÁ­§5Òvº(2ù9þ˲ƒEœ}%ÃêYñZy-‹Á•RŒ ­Ÿªyꋤ‘j^šr’º*\r¨À+[Õl1܋’mu€9?ÜY—›iØ(®ôëgàN +—("ڑõü›–Q³»‹:DÜÖÅO.2RAZôŸèºKÕž×8¯ù8ÑÇxŠvŠ:­±û·Ôí-Ú30ígòY­—n¥\»¤ÚüŽ ¨øà#'NŸŽpÝ0¯ ½•?ZåÅ‚ª=.Éh{òÏÄP£!‹[ÙШ7BU|ê>Š×AՔ o×óìâÑÆ*tí3ø„÷$cCÖúe½X}蛧s‡tTô*ì†èÉ^7ÆÆ“6ipE\óÀ'Š­gƒ’„Á§N;¶TnÍš +kE]½]SÃÒ)ƒ‹»hÄizÓðGmsVÍ]ŽÛ[¹…㖐%ƒpž]oܟ¼ñziwsèW`֘¤nɚÒ"6É+ä˜tÁ ? Öõ,"ÿÓ6iàŠõ(ÀoŸX5·¿çÉåA";Á˜æ8Y"§•QhËä¤Â~ëX;ô‘É2FZ¿Ÿ‚ú’ô æFM er×!Εm^UÆYÈ¡ü¾@üú#Ýõùø%7˜~0z2‘E÷%#X“>Ðý“Zâàe؆EÀ…–yô°‹ 8’E´p¢eÉÃYƒç*½*tÙ7 ô‘ðph‹›–m¾8Ù¾KöTÒ(ôi;MÄþTSNnJ+ÈHõ­v&—ç'˜Š•ÖÕÉŸ>ÐìH?¦d|2ßK‘ïd:5‡,‹0œ[ˆå©õ1¦œª«ŽH*Ï ³åÓè+gi¹Æ¨¨Žf튍Ÿd²¸[>êû›çÙ*7!†qãͲ«ÈƆ@ÕâtLûà +îÄjòh‹5uvƞ®ØÕµvÅ\lœ=Ù0qEêׄ ñlåDvf<#Œ±õ^&ãfଠ+.-R–´ôóƙoe²ê¨[‚ò¸( Dµ­õþ—P)ÏÉeíb륌ý²ú €Fí­/^F_Hc£/Ô?ÅÄ4k"|˜ŸpÄäjp̀›1•RÓØ7’‹s2þÂ1Ôa%™Ð®ž8Ý&¤¦ÊøÉqM}Ìã) Hq ªó6 üá¤élÌfVzEÀiË 3„þéËü™´ÛÕ®XÛYA©9b¡ÑVÐ3ìËV[ëځ9æ®5˜*nlۋ£]^™w1Dž5oÚ5oÙå'Lfo}Ä¥¿¥Ï;&˜\ÔÇû*ƒÄgÜlS/s%©.YÜqé¦=w“÷ߐÅÂWÎ̀?ƒ| ?ËY£ô͊$IðA fä!8™—샄ۃ—À¶ÝµPäFÕæ›„£SïñûTÏC5`Ða êû½G­êrÕûÑWW㑖:_Æ`¨[i> §m9y…ß)ªã,á|CF„U°×¯*L db§›o¬´övZ}ô1ïyê÷¼_‚W´WߌC‰ô콫$ö6ÎYþGt66ÔâÃ0Ž_£gö‡ ÅÃèî—Ò`~µš¿â’ÚF9[ æk¦á ˜Ëwø:ê;räã„$§o­·&¹nÿ¨ŸüsϚ–Ï=³Â«lR´;àMw†Lå¼í&»TAŒsžÙlYòj=ȳAL)ÿÞÙ°OuúA™ò Pb¯·Ã²?ù £ÄE_¬ýÁÆoÝAQÍÍ ƒ_ÍüLŽü1ˆ[IÕQÿæÐT`U@…m/¾Gÿ›AQ„Õz¢‚ÿšÈïõÈ|ÿû>ýØ©#M-$£u\ˆó[˜5šc‘Í•sh–Waºò„EûIîB"²lUðʛ€gïç9¿€Ek€ ùúß¿†»¹²ç#”‘ȾPÃ~®xà|Œ+a¬ôÔˆg¥N»ærÆÁý/ã°eµ=ê~K>êÁÂ(æÃtu#÷+—¹NÁòN@V¢ͤ ŠÆ¬˜–Ûk–ê߄K@‰øWTi%ϧ¯ãÚJ·W2érâä÷”D sòúëu£qæ”TôÖº åÿÖCÙӗÓyõ|a-ƒãòõ8B‚H*‚ +]<ÙÛ§.®¼4«©#Å3çŠzŠÝnT ²€ü.ìÈÕM;Scê$Éyr¬¢º”'çÎ ‹w–‡Ïaþ<±ú‚Z¾6ÇOR;.ãnéï®Ø0§Âàøq‹8É].Ԛ6GâÃ­ÜØÓ¡Ž^nyU£‚Ñ­×D ÿ>„µÔ@æ,SÛØïäßWm´¬%”"r~½ð²‘ªâòßÏYó*¿"XÃã 0 +`%Ž xBƒsü°Xx&Â3¨òw\lÙ?Ís#ä`@Zë‰*9v8sÍ]î/%;S]öQµ•îæ-C!@aÁ*4âÖ4]¦ §¬•8£ÙSÁ[S»ØŒõöÒ\‰P‚}J”‰ë®6ü8ôü—=¿«ÿ2T ÝQT¥¬/*óÐ;{ ·”.ÞçåGœhgNÎiµñgQâE—s5üs¨óú‘Eçˆñ…( \tn%.ùWõv ‰óY§\QéibÊ]¸¢·9 —Vë@ï]sOuŸÀTp¦îeÀ\ޏ5`æ%Lž“V|‚å©´ƒ;5/Š¡$VՁځ´bž“R+6zÝIYýÒ³û¥gោVz²³Õ•ž´¬õ¥g╟ŠV}éw}Yùwò +Î̬ìÊÏtV{‚³Í•žè¬ú’³þR³Î•žø¬êÊÌ«RÝ'fVv…g¥+?L¬ôåf¡Yê +τV{â³¶+5 +Ì«äÍ%±Yە¹Yò€¹ƒÝ–³²Ì7¢®aš÷˜nVa¬Æa¬afA]†ÆÔÿÕËróËsËqڌº«!œúÜÙYÿ)Yõ%g¾+<éYþR³«+;B³ìÊÏÓ+=)Y¨Vzr³áž ¬íŠÏ|V~ÑY¨Ææ„»i C dY§ì'ô⢍ŒãÚ}’Þ|ß%ºY^s.Ó +¬Ã¹RÚ)4¶þPl¿èVÙ~šM •¨WfÆÜö]Wk?J™]èò,TwÇ=™¶*íXÝ«sOìzËîøŸhÖõ@ÆÛ1鍻Öi۩ևÐ_=«™)¸•¼¾©ÞN'’ãšæ©”±ó‰ý¬É§ÞÖ>’Ed͹†qu;rƒĵDÉGºQM왰Ű0îöit¥Ê™oJE_YY’Ø Æ>ÛõÇ7‡ã ‘3 Aù»/ˆoš +Æ­ÚÈàÙÈol‹0þÍ¥bÇü§õGýaSv܆9R3F gó¶,§Ý€üTÒ¢Z3[‰šé³_=Ü77·¦õŠ +ÛòhR±TSPSkCy6í?ÊYM—FÜ7±y =6ñåñOßÀ¢_Ç6¶ ‚²b›”~ñ†žeˆÁžŽ`g",Ÿ¯ÿŽa‰(ÑÙ4êà[W”`ÁNÌ<†\)ˆ]ËÇ3[>¤bÝÊÛ¿Ž®üÄÁ V²` 4-¼\²·õ=°Iˆ)˞ñ–ú“0E¥äÔ¿ˆŒ3[Ëå†í ù±Ëu“Ï¿ãÀM1Ùö:–ËÀì áá(î’v¹‚Ðÿù0â{ÜÀ_æ˜ÛE¬+:y—Å{†Gvìˆ^Kz¸dv¢€mu¹¯+€hÅøb€­{Îèó–?x°0ØÿpÑ&îˆÑ;óá–ñdÈ«r•Ò +§øe²3ç«¥ú—ÓÈÏe ÷x·µÙ³hF’½´UÌÅÊéU]Ý èÞ+»û¥XÇ¥ëÅʧ•&°°MOÏw[dAgèQ¦.Þí׊ BRœŒ|Sý!Ž#K‡¶kݾ`ì˜Z&ØnÕηjô¨þò€Q¹FŠ#хüš-ÕVÂâÃùfìl—º&¾„©FíN‰®á[ +¼è*©øSƒMcšúv2¡\…-—©ÂœáÔóMd{çFB@>­ŒidýÓî͋E6Å[,[/,;Á<;„Àõ®|;ÿÇ[›Ãj–ÉFĵU”(zÏlAº¤=cun0経VE!ï8àߑ¬l*¼·«Ž9ã\SÎ88"WRÙ¹Œ•^H㢟ZüPm²‹4Jê`¼0Äè¯bÞË'‘‡m´‰ÏK†¸^ØPDñ’ªìUŒÊÿhµdC¡¥Ï¶[p.›kW'Zf¯mà®ü;wí“Ù¥ Øspû4˜¶0gÊ¡SÓNŸ¢¦Òûsƒ€×YXXW%PØ ›‚—ÌÇ:bbIè—Ã.\¨õ6 +?ò(îO¶q ¨I¢AZ’²Á–ÈÐgÉ~{ñ¤9iÜ´ìJúDœÑ©ì  ꎭŒ}³Ap®œ–òåB†²¿›$Pè2=j½³ 'ÃãPëICJŸ'“D ?伆‰脃Ž^T€§›ö·‚ʆh£ŠK¸â “)wþX¸ïL@ï B`ãºkRî/ÇJ º¢¡á«Ÿê­0Ë-÷ÞÑ¥+ÿ}™™öL„™3‘ ²B 7E6zdHÅ×00 ‹ pAiäOm}±7U„†Ïj©&ä™>™κùß&êUÑ ó³u÷€$Á’@€*Åb B1Mр Ÿÿ¿~ÿûì™$Š  +šémöÔõæúÝގÞ^^ró—ܼ弽 îsÝk}oZôobÝêÛü½Mç~òÞÕåê[Ú·§zרSß}uºÝÖØÚfø¥œ +1ˆd°·Ii¿ +ÁJ=—bçFއè:ሟ\G)3܀/Ò(÷ü,æQËÜtªR! ÄÎJtü̝)¾3UÔ6úžxâ?㫎€P߂®qKÏÀ¡>8l#` ¤ Mø£D‹›Ñµ7òŦð^’x8îF'©Ž…„ðcI^ Á{;åûÚ0„‚™cRñõ%ü$ìVB@‚Á»ïB‰‹›z¿]š½êsž°®Y¡·m"‚d\ÜJýtÚï aÓhæÁYéÝ`«f⍯5ûÓdîö†ë>“»Õ'h;ÕFñóQ—*ˆfï‡ÎEÀrò,'p}鶘èóò!AݾHvŒìÃT/WúLô¨ÒȀ0ô@]ómJ.ð +Š‹¾ ØGY R‹ü•Çgký$æC]S=ðß3x1øÒ”h:•_®l8ߔþ`Ѷâ#z;`ƒ"é‹r{ՁîϝÍÂ—Ф®·ï+Âê¿Îöƒ6’½ø4փ}9œš8ÏüpL'ž Cƒ™Y„(3ÐŽF1 ì/…½ÊÁËÞ­¡6Jðˆåù¿2b┸À ,@mõ‹Î4¯8 .@z&Þàa4@&º1‘áPI¥~7â{2.wZ OÅaç + Â#.2zNôu ~ã×@µ‰s5®ÍàoB •ß`(PðžØüAQû‰Ã o‚C]V]ƒóhÆo×ívN^k‚}ï +R‹Ùîd¶ÓþLäËv“÷±€{ˆ+*SP½ëͱµô†6R›!€È¸ÀÈ´Œ[—–ðYÒóþÚSsü¸H]°›11äÖ=¦kÛÛ_ +Jx$2O f™ôhN=í¢u—³¤ou d;()3Ü£$¹Ç)Hø¢€Ha…—šô‚EeàvìN¼ +Ûљá°~#ÓUKV(æ\ג á2º6s5]ô»ç/rM"<Ôþ]íV&@Å8ó¤3æôÁøRÆã@÷M¿N¬ß³è7Ža—›@h@d ”¤æ³ä`߄ဋ´äðÚž÷¿ ìâ>’w~Þ=XóîŠp¬(pJœ¸}Œà›ðÛó½¢`’ §ŠZQ©"üÖ]%ùIçqzâ$³Êmýx ñÔ +ކ™ç¡”ÇÐôd;] A¥ç§XA¹Ÿ±U©;æƒ4·És±”Pc¬$\'˜ïƒSÐ®æ •"çv”R$¹Ù¥°€€Íbê3l³¨Éá*7CŽhøf=,ßnÁ«ûF‚°“ë!Ò-• êoœhÕø•áB·©8Á˜ÍÎq>2£ñÂ9"Å:ŒÞ[Ÿf.„¤h2B AÀÞÕîbܽ˜œyD® +绩7¬t†Æ˜8J°$¼qy¶¶+öÆweÚEb—zP±Y×ùÏÄ"š';Y@¸fì’£“ v¬2}rPhs>Ïáš»`Zî¦1ÌCõ¶ !ɾ—ÍVÒõå€ÍœY0?y¼í}Þl#ssr7HP^IOHW5è¡{m ñpó|©ÎÕÞ]ÞL¶Í]\œ$° Ð%ÕÐg_jÀކmšýœüN)ø´|¾9sÀrùº4Á‘OC?Ùdª‡VóÔ\EWôïm‚±Éʰ%„æ +¼åXsüߓN¹¾[AÑ#vU~8ÅWpåU§eùJ®ÞøÊ®笪¢yʖbƒ®»ó›óÛìö­Ãà‡t’Ú“yÀ]ô°6R¥Ëvb´kŠx'¿ۥ̡›ÿ‹Öùàõ¼¥|Â6gmº½{·âz÷¾C\ìñØ9A—1üð)Æ_.ÎnÞmWk%u»;85àç¦ Pù¤ÃÒö{p‘vÀŸù@cŽõaE¨`•.l&ô(¬p!¿ïWßÁuY ÀÚâ±¥/«8X +k÷w­¯8„< +Qý5Ç£|(ŠÿóçØåg«¬ãùÊdâQ¢@¿³ÂÎ7ÈÆ®°-%ÎuœGÀ¨áàM~ ˆÞ!Jt…H¢mA‘>È“‘çxÌ„}^ÕpG×M÷åÑދ+Ї£3ùqbæÚ¹À:¸¢­4ž$§+SÁ5IGYÓTS®¨Rß:;˜Š3ƉÂt‚#ú)Ò'ôÏ¢ò„Á¢BtŠ•êúÒ¯ ëy‘ÛsDáNX+Ÿa—ÊØ/4JÎÆ3WÀ%JP‚Ê¥YQÚ»x¯1̈́Àøœ¼AVt:ÃsŸ@¯9–ÖpAÍ^yS\ÏTýÛBkJ(âŧýú¥_9Ãé ØN5öâ ÿTŸ¯xuǎ<ŸØMêऀêÈC§|¿) žÇöÄËò—æÅÑ∠³=ÐcÞC-üãÞòªÝò®Ù1_½Ã¯ÃÍê9µþOö$ór€“~ýQ݆Zï-:'dŠJN›`rîϤGœ4".þïƒár’J6ÀL=­ ÆÔgÏ &yÞ£yDÐäí՝ëj* ñ¶Äkó.óæ@%ÿœÐDÈYæÜMÞê‰mœ R‹çx»^ÏLˆy÷«+–†Ä!øGá½ä2tc%êYËèàMÄò„ 0Aš¼3ïœ]”c¨¶?/}»ÜMêŸzoL0;¦bÏMÙ€="+޷ؘՔ,´ð`õð[󘘳ñ¬ô̧I°51œ{ °Ø†)‰6XÐ"TëïWpˆc ÊK,msGÏø·4|ø:ž)€–:žX5¼Û©å£!J—SË­,ÆÚûK!¶¥ˆÛai^6â(¢žch®é½$ky¹ëЛ™ |ôP¤èúùè±üÞkç™ I×ÏFǁ°öc¶0êy¥ 6)ëݧ`W~bÐB¼õòÓ,6ãm'FÜu£¡·ÌÚ9wБ8™­Ç„vzÍnüÃ!­óV’ƒo›´djÏH #êzFÑ Û¿ƒ×Ï5¼É…eÖ;¨P횹VÀ†ÑXJ‚h"‡{6¼xž;W?7':GytM8Rv†Ê”nÈàgso—Ó›öK­$?;zãZÀ<¶Åå_‡kõRdw?4˜ƒÜ&`ÆL*áÀ‡Ýäë¬(ó߂Ó'~À‰—·ƒA¤$|š£¿îãèËA‡(, cÅÉAFÀô̰̇¢yb+2º8ŒÚ>Üw¬Í‚4SKo„V÷}b0pU’Ê+\§øŸ¹G…ÐÌp\á^Ä;Âèex8Woq‹@ïP_]”íwð6Nôá0,x<.†3ƒ…{Œá»Â¥òíøywo¾¯Zo–Aˆð‰Þ•wâ`€coËQëÖ3•g€îæV‘ÙwÝàpè]¥‰iSdk1µ$wÖÄó6.uP¥S&çN¼ïJœÙ[eޏDxôÜ ½XÇc·GsÈ;Ïðè™è_Ý坋 +Ÿ6ÇN²OȎàf¢…O0Ûvñkw½E‰²×2k èùIemÝÕÙ¯v¹53¦Ì3ß%¼vs¾Â9Š¥ì'ÀoSbìr•Þ»>0µÀ ¸àáÖÓØÕ;*Ÿ>¦²§kSº?¡`CÑvÜ0Ð^Þ§Ìwõ}SåU—ƒA'оÅź×OGá{l^”ÚCÊêƒßr»'·€ˆg¡gà»û&Ê®²M{½uËSâîûb·õ”·°C©ÇärMê<öõÔlYèè€ +³Óbðév‘yw/³šÆýkö‰zsы­ò{Þý÷K‘J±æÔÝEéÚUšFkèÙ¬ \É?zÞCà Ë7ÉmÞüŠM¸¼¥¤­§£þk5˜ì=NË>û¨·ƒ“•û,Ö¬øÅW³ðYè[Ôì[ÔÀoSçõy\§UxI¦ÿ(EÇ}è•kå? +%ZùLÿwôÇçŽè¹åÿ¢@¤–ºþù˜§â5\~ï`®·?¿;¿º„æAÖ=Æ>o–y®Ì!?ázM ^ <àÿ“ Z·çyý"¸Œˆa}Ê>^šŽëÏ|YCz…HÂç¯ñŒ=»Æºÿï¿äõÿYÇ䝩?|$ÛZ G‰÷+¦>Cýónψ½Û +œº¨°Ñþڗ÷ÇÌ54-Añ>á73†m›ùAÞ®~ïâþN‚ÿ4ñî*˼~4¦]D$ïßþòŽoï)9Àýí¯=$œÐAg¥8§çÎö1óç{ùŸ¦“C¢8?ŸRÝ5Ý¿öÒgp²&bí§§òüÿþóà/ç¿ÿÛþ%»Þs¸ú<Þ2—U÷œ Û¡‘åöl|¿î_÷/ûôIÿ—·ð>×ۘѶѺÑÑhþ¦Ž£FŸºŠTí„Å:åü¤S÷žŸÜJ¿–]±š’Þk(eõê—{2Aqï6ï¿6!·DÑ y6œ^ÙI¡ËÉ+Û#³ÿãZúî¡}Smñ™Ðp蒿Ö_»ÙÿY= >sѰø»eq<€ñ'<€ÿÅW/œdê~{|‰?YŒ§,ÐâÒõ{e~dú’=¿Æ¥CÂì^Áçáÿ‡±{:f&àzÐÉÈ%~ 9¨êׇMyn)Ññxáâë‡Ä”ÛL$ 6íê6ƒŒ£ßáqà:+&½×ãV}xîwË:U½‰9Om©C„¸:î@òó‡_bCø”L?!;ê*0ê!‚zÐUš.—ZŸ qIϤ<é2Þ"(âì{]¥j!ÜäGÉî‡Ó0Àõ“s¶²…RµŽâjʃäÓ×§£~ÓJÔâ+úŨð/«âà ՄaÏÁ€b²Ÿñ‚±º­Gï‚fҟï +Úy´q3"ì¿7Ï«ë³%”TmÕõºªHãQ)Þ®›Ñü£Ás¤3ãPNTãíR¢sä'"rÒÒÙ|4jwÕÊ’dªH‚E$—FVÍ)ñ¹«õdœÕîK³Usn’;…ãÙn„!°¢“1¢b :3Í.̄¡=›³.Ê+´[ McÉö6œM]iV3’ަ^}2Ø8aö2qH©rð M*i…³‚½lþèa.µÒ¾Ïƃ)×*Ž÷aIÑ`×Á(þM¾Õ=Ë^‚rWàíÍ­ŠI" “ Þ`Àèú0-Á1LKè|#&¨ÂZ‰úºJÁuë«ÓLL@x`oHJ›æ–—VH¸ ,q)v«–ZâŽbkÆ|¸0lmpÁŠdAÛéTGØâØö«ÏèaÐÁ(ƞˆ}}"µHÚ~)º{B+×d÷Ã;5Üj¤‚àOï˶ö?ž'ªžlˆÝ×&˜bëpðÐsÂW3ÔÙßgí¸€ºOߪ´û®%U¦²òªÓYsUi¬¹ª´ÖCª´ÖªÓYɪ´Ãÿ‡#JSZœzÜ»¶k8Y…ÆÕâq³Ýî¹³ÔsÁríÓgRM‹—Ø0ŠðMTî{µD£–OCøF~+õ¨ù‚æ,4nõcëø\&߆îݚÿêåÃÿ™÷[‘¾÷3ŸÉ`¯ϞaîJ]~ aòsé!Ì,¦B+,¢&~Z•/ßdžµ?“¼›™ÝK·–=JÚõúxUÿîáGòÿ¹Ü¿î_÷/ûõÝ4/š ™ã.{ÁÐx:/ŠAíú ÿýqáÐf¡·¼ä7ô”Lv¬·7ì'›†_ö¡šç.»…µRÞr)dIV³ _a÷Ñ®ìT˜2œ;¨jï¶ejÏÅ—€…Àiyþ®™Ê÷èÂË{ž÷öÀt]‡[JýÁµ©¿gÖ,èÏo•CÏ!=ͧì"2y0ikÆD†ýoݹi\;ö‰1öjøΡß@êRÝÒnÀB¢ãò>/^Å™'¸l« ´ûß ² < „ìw JøSϕß{ÚÅ\„k.‚èÔß"ï½úaã Î‰à›™bäb·yC‹<ÀoG¾Î„Œ%ó½*èw Ùé‘ñгpÖr)£ck´Çãßb¸N±óËõÍ¡i-_ÐáG¼ÖtM`ÓHæM晝•ÍÌhrÌA®@¯˜g¥¯™Æð¨$&ï'Oõhx¥A¾Ìû˜PŒ˜ú.2jŠV~¿=ÔÖ¢б9áÑbL‚øÕüÎNW7ƒI‘z´ZÀõ;Õ=0úe…ä°VÓMågö—˜ès50}sÍ Î²#]Ó<ÖGõy\¥€i‹ÈÃÍ01ÇÁ™Ã’)6•y¬k¾š€Ïµ±_}ý÷Ü\Õ´þìSº~Ô³P¤s+IÑ©½¹¡ÌÑ_/ªI‹ÖA½¶YKC–:]ìp`“£ + #¨PÈ4גÇxÁñeus ‘rô{£_'ž[ Qƒêi/ª]\:–t0³6h&häBήפJn>k]A0öüx±›QSÑltœ¨úZaعS} ô Ðèt¯}ï}€J@ñzNd»ÒМ£ÖAŽ÷¡ ±5—„¨Ý†ÍbØQ‘0·z7ÎærÐÈI„FXšT°…‘çÄ,ÇwÏ{ž0pSa¶Ìþõî၏6©ÒÅE³þrXց»Ò–647zRÆÇú«{cydw¸Ø €îøÔY@Èæ}4$ú ƒ ô·Ý{Ša +°EŽ$Údòy€CĜ^OÁ¹4;̬ ŽH±0L¶¤Ü-ÚJä“¢ã'“ÑIPż¯çd†^,’`7BW­68 +^ÍdŸW•Èޓ…½ Ù0cus½û 6¥ z <#½Qhù½íè7`AªJÕ9´¹¼/1,&"`zr§OXuÈUñlÀuBɂ|ǘ è¤ÃºË7ÂE:qÃjMæ²ß#’“PÅ¥Ù±Jµu\Õvo™J¸ÖësqÝH«‹Ã =úKLԂFÜHÁ ƒ‹µÛ„u?UÙ°ÂWšØ$Xïè‚F{ÊæÁŒÚAA#-æý|û0‚FSËEï+W„1÷fÉ ÈL^2ר]ëüÅÛþœ.e“3§µö:¼­„^ò/û—ýËþÿÇðm]örÔ²Õ2ÝÔ·ðË·‡-¦–-¾–áK_Zó­eZÍµêšæZý6¿U¯r×@×ÖjŒ½þ_ /‹—ÉKüé|Ü»Éw²ÿZ_íËêåëåü™}Ô¿³.» †½á³xzŒ?s‡ïðÿÚÙaƒ_ž‡Á»y.I¾îz!µG2…½Ý_§€Ù{u¡ÿÿfë<(˕7œ¤WüÍÖûþåC¾ÏòËu…ãVÇ·Çæã…NþÇVß"[_ñ§–×üoä–×üqÂØ|w÷KÇÍ fŒê8?fš¥Á ÀewO»…ÏɁá'ÜX>í •]§&ò pØ=Âëgé•'@oýUÓw ”÷$T—BXæ0l}ÖÌÆ V\X*.ü$ªõª‰0Ún öü!=‚²QËË~°ºX˜H#ëé +3Æ§½ÆÓNHfLèú6ÅËڋ+¸âłîÔYh§ëŠÉ" ½m.Ð= w¬ ð:¦d‰¾3¹årV¬ãÊ¡ßt(^ŒƒÙ´­¨û+&„<ý7ô)Ë셔h 6î¦)]x¤?׬¥`JIº'W¶‰Å;À¯wÜÈÝ7ˆÓçJu‹—œ³5‚RD'ZäçN—ßu$4‰ºÉðñ=FpZçXæî0®€øPI÷§þÎUyŒÿ£ðdq²³wïˆâù ╷s€Þ=­<\ö M„Bƒþ£ì—4B€ø•Ñ¡Îmš.xQgýó3ÉàÄT«—«ãŠÃø£«r2 —\¦Y+S®ßã²ìÔ$Ÿ•îól"¯J+æBú)?yšÓI|JOڒ Ä G¯ +e~Yæg2ºV†ö9œVdO±årÜg³H9u­ü°†9U0œñ‘r”]x|‚Œµò}ÈL„ƒÅ àN>Ç4jÿâúCû¡ô…Ã×pI¸¤ŒQSŠœz!G /r²LyÆéH„: [Ö¸Ú4X¶ŸÎØØPe8+8(_8)d½ñ° )PÊ0D„6ã\P¸ð_ àñ¨-ò!+z†E;*¼D­˜%Ú³LhXNM6· %‚üًÀë'ö·,¡¤&fã·D'ì®ö.°d¶o‘ŽC ÃdéÑI[{oR´ÄQöQFÕÇ;ÒÍfb¥hp+ì„PêãÃ"a”‘«ˆŽ–j‚*R‚óX՟ÜÖ3åþ1´VÑR/÷Xbßò)/f0Kp­:Wš¨‡òƒ ¾•õDEPŠZï-9=ä´93aùÑîFk£ÆC¥0A ¼ŸÖµÚM¾£ Xgޝ~Qï÷ßMøˆ¥Ês(”} E¿?FjCý{Ÿ\¬'ÄÛüuïåC”FÏøˆüD×Ûý‚ú<óT¸ùŽ?¡Ãæ>AÐ‹À…Òp-pÐ#ËJå˜ü—#Vú/8å*…2tß,…×eØçbÖÂmõ$îú)'e´rós hB® gÙ\ü: kÞâ®t7<$ô™Øó£VÇ8hċ›}ž6fôÆühC`úÙ¼†­ß.7ØNùø`è\;}þ3úÒÖ0àéÿ¨ÖќÔ[ѱø’Ö1 OñGª‘â¾4ø*7 >´ô·Çã'Ñ ŸÔg·ÈKXÐ9ÑçB3àé6㢹.,´ ñ +BÛ­°ôb)“ZãÓ®HìŸíªNŠN™Ù_GzúUï"¦\´Ä©v1e¢QÛÖ*B¤ èxœØáéø¤ð××ø³/¸D3—Ë B%ܱ¼Ú– + ý&ñ³‰VVh÷½&òq RoϽÄE„“Zq o÷MfÄG¤±î"Až™¾ÛÜD‘­ÈÞÖÁýñIšß:k|é­ßÍn\Öäoåö:>mó™B]ò-%Ç.Öh`IKX(9ä…Wâ,¯Žâ†a}'‡Ñ*'š!%gÄ n\ ,*Wkõв‘©"¥5‡ÁÙIÊ0Í7Ç«H¤¨¬ZÉÒH=_N# +MPgÿôeƒ†7 +Ḡ+@Kw>uøfUºC +ÄÊOR À‡«Úkeeƒ¯…œyXž6qçþã‹O¤°AH^¹Ø?şìUi&Û3®¬.Q%ÿQêÀÏð¥7‘t ë9ê U jØã­yøÑž1Iæ¾À§×¦€ eî@F㈔k3ÈI ÃùLÕçªg3ÑØ=xÎÚG-ý»ßüœ#ÿ=‡ÃÂ?Õ°üÜ#þهé''ý;däþm„2r‚-ðýb'á  Åá“ù˜uø¥‚K×#Å''äh|ùäÿ˅,xëò›¯œI×LÿG‡p +m/žßií¯gá,€Ï‰WJCEî)«í=zA½GŽÞ£ÌœK„£´g¦Èáܵ‚!™åuVJo­¬håu¼ôfO{ßå1PÒTW»Ò%XïHÍaÚæTë#9'é[͞(¿™ÚMÀQ~“ip&À0Í:|ˆÒNÍùµ^Åk#€}³ë”£5+T£5$¬äö ð6zç-_ÔXÕÙ¯]¬›Kr`ÔëzŸA½OŽÞ§Ì0TŒg)Õ@©ó]¥êáY¬¿æPRŒéy¬c—ö\IÆ,Bf~31,…yx9™2²¼hÝõ(Ýî¼»5™ 6Îòàùý¾Ûp.®F©ÆÆf +•Tªø'†©saQÿÁXč8ä`@›Óª{¢ªWqͺ_›HÊk<€²ƒ+ó˜:â2Ëtöä¿8>%°B×xWÄ`ïÓmAë…SU­¼æt]KÿÞ'|þÜíPã½}õG¿„ŒtÕúd$:Ε „ÚîPY‹(é«ÞAµÞïÇÚÇãr,#•ïvÕ÷†xžñSÿ¡:×ãѱ÷Ô,âùs&5ýfzü; +m'îqÈqYo—„GîèF £Ù'ÝÌ3¶k¹ˆm ŠBޚ+‹¾OÏyaß'¼á`Koÿ¢® ½IC„ßÊ!ò_÷!þʓü„#]±âÞÙ$Æýçygyòf8?z<³¼ýÓ\NÚàý­Õó8Æà¤‹ÝË9J›ý›”OÑÙQõ½ˆT¤‹¤‹s‘dû#¸'î•mÄ'È*ChRD lÃì[©±nêà»HM˜²2©€­4ma²š…E%rþŸ9ûTýP‚Y/ŸQ<†|‚®k®;$ -onÒqôÜ|#õ~ _˜€{³õZy7¼9LDd¸Të§ë`w¾¡úÄôî9SqÛ¤Tå ‚T¡ïÒ$ëÆ^¾JØsª[`ýºØsà [`°æÁ0¶À89¥°æÀ5œ"³€ô–C˜ +“u%ê”BÀmú.&È¥ÜætB¸=̽æÒ«xÆ îï™ ßy/~a{ +÷’£*”w)$Õþ¡Gڍ$= #ìp×sx‘éA܉¬žcbÀùÑ?™áQx£>‰ù:qGûbü;‹‚x5îËÖYØÍkjô+[X#ZÛZ²µ¶¹}kmy­ùóù&·°aZÚÄÖö1­¶Kk[lÍòoË5ÿÌ5¿4×û#[óó×V¶Úÿèߢkÿ¤k~™¯öf·êÿµ5¿Ukm´Ukm¹°}Á­îMƒ¦kv†Á÷F·jlvk€Ø>ðÖýhÑ±?! +ä"£J2ÎzôŸ˜‡žbþ…lÕN$3>D¾Qÿßçþ“÷˜—~ÿ‘I¯Ý-øx þBßÍÀoïþžV¶¿&¶½©#HÕ§à7„åápú!Ì ñ–qx û•œž~Ýd.ÏYÇà7øË.¸ ÿ)gçà7õK9E&¿’RIȍíå†^†}@Gƒíh*>r¼¢¯ÚÑÿH!.Ë#ºõ~ﶚÐm¤y¬mÞCö;Oey³­úÊ<¿ëÜG«·ü²ê}Aäµ`ãçË9ûWÏjgÖÛüކ!· +1 }·Ü»éü™YN!a¼ˆVªæ4±Ÿù–ÔÜL-ª½ßÇÈpƒ³Wývéÿùç>ýíº|ùå· BÃ`øŽ¤ýawãj[ãíÓҜܧè8¦å]µÚ +ÙI´Å3ÓGâšì¼b›Ô¿œ$FkÓ ùS`A¢æ¶”1næ]- èÌÑ- çœÁ«n9,+9Õá p7 G†CåV…;Å=½Õ,UÄû©%[v°hæ`Îý Í @i¥`ÏK‹XRJ «³bÖÁºçãÇk7‘ãûñd€*{ჿ« +²yÐËa‡À+š,(!!fÛ¡ÌɶŸˆ N³|ØÃ€î_±£ùphsÒÏîd«æl¡õ•žÚ[=.üdQ›“’c©Óúë­Á^恮 ­Ía÷NÂkL"”×¾5õ¥Ê»‰ßŠmK®SÉ)#*ÐyZàæó‡hǯœ ¶|¡£æÌm:WÇml î뉷‰¦ NŽj ÙµmG‚á3Ҍ'WWóGnDq$ Ú c`#zÿâab˜ÑFB‡ÄºjÜ Öeš¿µü*¬kqî¹’;”Cg¥´g¥ö  Kt½lUoYNk½ ±éšÃîš1È6î ÙÄ‚³±<øò¦Á{€ ÷™ž-mNpUhû†£ídBùÄy ¹Åd¤Ù*FìSttû[¯„Vîä&-Vµ—„ÄzÚa]מÑh ÿè›S «·û§´Yçoh£ÍÿÉ=¢¨;¨Ž’Uc•rû$»Ã7ÈÏZ˜›¥¨É¡ëÙv2N@ým5° mOZÒgiOb#ÉÜIÞx>}S|‰Þ6§ôñI{MÍðY®ø$?QÑé½mOÃÅ.ö\S’–Þ¯pÄ×]Ì H¤à]¸oW¶bÝôäœP®z¦ÑþÀií)ßÀP·¤«Ý·9kJ«!ltâ)YG퉻·WvwÿÄHEkx¨ÁGxÊPqÌ%g2éÍ\äj™—w£Œó“ôz_MÃ̟9uñæí«jÐVÚ/›hµ¤€µd +I!UWÊ +«V°²µ©`'ß¿ßßÿ}™$˜•jžõÝòúßo/7yîžô7zÑßs›Îo9½ èïSݍç7z{ÐÞ¦þ÷¹»ËÚÞ·½Íæô7›ÙÞñOv’]u¶ÆÑy)·âw¬‡q^гPI %ÔÒS»^íMdhM‚(¼z }ôÇC¥$ lÅÎá´juÈ΍CÜ囀 £&áó¡–PœŒ|Ô fʐl?®qxCŸlÊëï%}ËB•øl7[t^/‹À×{Qî%l‘¨\¬4qW1 ”ƾ(ö<Å}Vÿ_wÇ|cE÷¯:'ÿ­küÇk ëº™Þc°“êù×½«þÿî«/ÒtÜçI®ˆòÈ‚óâqùû>÷ԛñù?’øozÊ_W)ãk •½mûèÓ·Ãi½6mK!ÿ×pNê_Ü~Hñ×>ÿòyüš õÂ~ˋ›ºIÓ^”0›õµ»Ã‹™±ûõµ»É²ØQºçq!û]À^‹› Î]÷³Jïžå̈L˜wÈÿaYؤ•¢º·I%ã“VF·²ìMÜ!¬ìðU%ªnáóÅçÖ;°DrÿFr.?´ô8 ¯ä¯W bn¬ôWÂ2£ó¯U8{%&ã×À Œÿ}¿¯î¯åÊ¿x´§B@‚›U´yEd +Æ^¹É'åKDÔÖYQÕ9IÒ¸}z¼®½U알8<6‡Ÿ–¬Xcº™qpÑö •ÞŒE,,<¯Vy¦ÿ µ a ûìál73Ç`÷êè \™nÊÅd0WhfÎlû¹Þ•_%µáˆ+AÂð˜•Þ×uː·‚b li5­ô0*ú@e +|òu÷û÷M@yµ|Ÿˆê è2^LîO­Û +ìG´†¥‚)ZùŸÖ¸ä>Bg„jõm†Bo¨ø!³ãËEjgloä³ãË"¥æ*Éæ+hó¶.ü6®6ŽÜX;H-¥‚Bp‚Ú\$[eÿs¸¨AmÎï_< ëOÂx´É4¡<$è‡9‚ž|܃o*pŸà">O–8L‰Âc ¼]êÎÈûPœ'Rnpñ"lwCt\–¸³ç8À”–œ’%Ã]ô%>0“ûW³¿ î9=¿ö7¿Ø†ûø}´7ßÃúí?Êäü.YŸÛ=.¿êv½§¥ö>Oá·wÝü­'q¾}s‘‹y]âܾ3š ÿY Cžã½T +y¶poÎÌ¿Älëù~kM +“ËíýæOù|Ÿ{ãÃÄ%oÞ_³P?tââO†\ÚüÃGŠŽêÉ×ÛñÝÂMê0púÀ>—Û092fŒÿüiÂÁ¡Ì®ð~ÎãÏVƒÎl­àžs¤Wz­Â£¬5úìÔf@Ÿç‡Cîáø<$ÝëjÒ‡³º$«ŠJa4lÿ ǃǂm­ãË)¥Ž8³O÷` É\¨3°Èޯ˵¥[Ñ¥[¶éU[ѵëófš…{Q*D™mÍ­E轛¾h,W{!sŒnè¬:ž9âÖ¶ÂÍ÷™^ â-`ü«wyw~l{˜?6h_Ëúûäô=˜09ºZ/ÇQ§sEo_”Ý4v¶Çoöˆèü÷8üýºš_¢[ù–Ô€©ØU_p{s¼5^‚š^HÉxÕ-è]M2«~‡vA“Ê’¡íÉ)¥üô_”·x¶ˆ(!³VÁ0M¦Ö¸ë{—5㝶* !=¡¶tpÑîO§09âpÙ@TÆ ;ï&n—(÷÷ ¿}.,l&µ‹úÒÉTE»ÄáÇ+‡h®*Ã]E±Rb®Žå|’eT£ õw®›;À2ÇCbðÊÓè'Jû ¹Bªr‹£4:VR:~µ1]9kÇΰþäÛGh,ÕùÆ^hgýJÂ6³bwùç¬ÛÇ îI„]w>3Å­|“¶yD/äîÆq+ÂØ¶†9?¡8^‹7^¥ÁÖ£ LÝÔØŠýtdL]ꧦÌM¡À1vŸì#ŽêÒe-Aj•u + ›#îEÿµ° /lŸÜ&§W,\Gn‚±Q+yy‘^›l] óï[eœÀÏî±µ¶ÜÊù0nžÑ<„­«µ£í±ã²a+ƒMn¦6=ä•ò­©š#Ýþî7CçºZAݍFՌª‚NX‰wÂb·„>º’St/Œ‚§ò‰ÂEPr{·Ýé®à„Ñ5t‰kÄãŠ0Xã›ËB㑸šw(h¬ÎïFÚºÔ®ñ»@E°ŽŽ–¬4_ôPXl;<K¼§C +á‡RËáÔÝ%*Ãå1^^´YõÚôª©àºi^á¬d +fÐ)“uš5Ô™Uÿ|rÿü é#Ps}{Œ^~7»B ‰ÆÖíþIr=ñJ¾ÇÕTbU ûp‘®/?Qúýv³©WkSu;‘_%[÷âuEbŽsÆyDøbž{hê £:ˆ$Wøö¦‘{u¢1Ó½áøƒã}}J›XH¡b=TË7çê‹mÁõRõ§!s4Åx‚rèXÄð†|h ¨ÁÒºù¸¸3 +¤•6X—Oϊn¥wë€2‚¿x€(“¡ºTÒˆhÕ¬Å"É#?Ù\ÒBÌL« +§Õt¿fk/°¦-yæ EûÜ"–* å£Îæx¿-ÊÀÅWRÁø1¶ÒªÀéS/ ƒ¸9øÕkÕMÃJªzH*´^-ªÿöÎàô²«ÿøêX<ÞßmŸßȅ (Ô+ãóQ.wYWF†n_Ú\/å +L?7m‡<¯U«F'¡ ]ÅÝüåÂÿ¾=ÛúìY¥#4ÔÒØJ½Ÿ^|Ò&M¤~Ú͒”TØgt >~Tµà€ù‚Ì›_éwіd@|õrÈ?[€ >q§ú¥ü‘µV` Ëü¶ Su@í¯æ{úcóï}× +Ì2QýÀ²–‘c)km˜¢TÓlPìqʑ3B<Èg›çµ€Ì§(¼ïÙ_҄%?| QþΣé)¬÷þ€vdâCçd"C©keXdé£LoP9«p¥÷´[‰å4Åe$H–®ä_h½Õ4¡½›ÔIضj$ä0HÃ[§°ÉŽÁ•1nÐPŽ*'¼J÷ Jäl GÒ‚à°Å¾Ñ~J¥4¦®©È xIÉ?2„óAÚ·eëM¾±^ü¦/.?Ž7ïñ¹:¦'6OF»Éã=C»BàZ€ºxŒ—I +Ö 8ëÑÒ¬¹I’ŠÎ“6`Žž$yUº¼PÑåa©ÞNÜY!guÜP3ÒMƒñC8÷M!ô”WT1%»jy\|H-Þé€ +cf ]!™Ó¨[=ÛШ̧|ô,3ǘWæbA59.m˜#ãÙ¼Ÿ½wB\pã-P/¨Jè +˜ÇÁÈ(”Lcó^d3-Ôꂚ¦æ¡vø«NªÞ¨'å“Ó`!—.6ºz"³ a›ðWõwÓüWLdWˆjuiäÂX8ù)XwyµÒÌ,~~r>”3áw&-t$í¹8lÝ0jÛuÛüÔÓ YÆò§h,f¬'Ð RQºš¥Yóæô'üC³,¿Á0˕ÆC ÙÈw¬oPõ$Bñ°ý ws÷¿°níý} ·û÷”Kú/¤Ü“L™r{w=ØP‡²tÿcBIìYýÍ +šLñޞÿ0LF†K#V°s5Gu2©ég…ðZ޾£¸ä®T]b9ªpÁ¥´•R¯g]ø[‹&ysr£ÙQx`†™X³  蔴yŠ×‘d=¤tyP¢'!ú¤ŸòËÞ¹À¬”ÞӃ¥÷ˆbèݸ$͓Fx7(oöPšɚِÀÕ;ZP΢âÍ ™;7:¾#b¦wNH%2 +9 rg&_D¬¼¼0È"Zš>מ“2«*|ÁU•EZ_ü÷–x²aÖîÕ +±nÅ[–ô¡IãìIAȧG\ÌMf´z³¼W•Q÷¿Hkÿ{. +ßþïFè?g£|¬µç£`aíøžÊK{^Ð·Ñ»¡ß4 lÉÖ@0÷,<·4ò‰]VqÔ*=馻ŬÛµUmMx¡ùŽMw¹RWŠ,nx.í¼«v^¸û`Ñ=oÀf`ÃN^ÖåÆûòÀw·Åâ‡n'à`=4´œJî‹_l†J ®Ø÷ጠ+Ì-²,ˊÊøˆ²‡/3[W”YM^r‰|! ÷nÕÞh)´_0×10qª,¥Žvr—Mµ ã. cL:ÌÿM=¤Îßý¸.åïæ¿Ç‚÷È­Á©Ð!1”n‹4âZR(xPžé(`ZRÊ· òùšÜ/"ê'‚9ÉSíl]5ƒÍ–ljIŒÜº ×j.³æ„bÇ÷",¡¦ÐOŽø®K—"ïn/‰×õÎû––ºNî*ïÃX•„uD +¯Շ‰Ì_÷Zì\E[cÐWPO¯ZÀšÄ_’¸^È jÁùEÕ¹u³Zû¨Ýœê3³7ÚÆ¹-WNÌdø“« ¨â —ýî ½ÁîÁ"º°~3 åÈ<üВ(SçÆ¶ôi5×ì$ú_T·ë8Hä"$ó¤åzҝ¡ufÖuÓۚY65͗W&4ýõOÄ všÙ¸4˜âyâÏ<"EÏ= ‰“ùe­€v%8ÃG×aú¼=ùø³!ÎB÷ˆHP“²Þ! UBO_¼eI}ñ0Ƥ?Wzː‹RWò¹K½Y¯ŠHêìNë¤pTßÿóºûŸù›çÏüAwÿvödüO2{Ç@])ücã5‚M'ƒ»f÷IÞ>X?¯¿¯”OÛß×ù­¿×¿¯ë›3¿¯ÿ fwõæO%ÿ°. +Í2Ôé‹mÂL‡dðg|Èw’m2‹!þÄÈwxÝy2í=2GL“¿s'¸‘´ÙÆÖ——M¿ _ûë"ÇwdL÷é†nÐÒïüφ-ý„»/ìEú˱*`“á3]Ýúë‡öȎ頋ޠ·2f°9T§²ò‰Oc—ñó—§ûì6?ò-ߥãûãBqìôl?XÊlïhš¬Wõ [ê¬TCïJþ‰loù%¿Ò%LçMþÙoí2ßݙ±RîÜ^Ê(RÅãFâ .ø¼ WWÇã%Õ¿ûØÇ)“JÐ.Þ\÷æ®5'bšÏÎ'ãC"•¿G#Ãàõþ»ÝðÝY߁Áⶑþî XÍ,Æe¶éHþþ ¢:Bü÷´lï‘ÕèßpßûÞ5 ¢ËÆ>º>ï[«»¢OÁ±€î!ؚ}_Òîãêv—Û.È~‹å%¬,ø`ÆçR$öqØN€™ÐÉZÉ5å}”š& +Õ%²º˜1-š_«V²PKe8²Þý±Ór¢[+Ŗö"›_ ° á³Â%Ͷ%,á›ÔRó◟âÒüÀ¥Û+Y %²Yht ÍC%`Î+Y€/Uœµ™ÙͼÀÍÒ蕋cH­d¹û /±ºÄæ*ýST¯lN¼G Åܜc;ÅÑÆCÚÌï×õ2ö³D‘k"\ -´7Ë”û…ßP Œé¡¿®6$Ë+#4øYhÂtRzۓ4¦Uãc‹c‹l™¸±ñô–¿ +×Ò(€åïÖxØDpA²Ó½%·t€ëö‡¯ + æØÚT¶Õál,¡¡ºJû?ÃOÒÐÕæŸGÉèIVâÝÛ°@ƒ==EýTÔcW~¢(ðºæ¡?×y€E§£ÚíÂÜÍËSZýá¹&ÿÁ†}ZóòbjBCîäëÓ-éG“©CçY» +(h¹j†¾ñ¼jWô\qj^õèÉ#,“Ž6oɎ>o„¿ÿæHŽuP:+e9@ %c &jÐrI1cHIL¿‡÷ÜЋBUЀ¹Ì<·ƒU°¸¾dÚ®¶©ì£A•Ïí›jžÜãeé¿°/ӆ +—ñÁRþå§õêó™vHÊiø`ó¿°¿ÿä߃Îÿ\ÓôêóÆN¯9öZ±G»iþýc~!üú°÷×ÇÎø/ý½P¶5Dâè“qtÒÿâëjÿÚb¥lX²È®â7ñ¸ÒÕ6×ø?«¹s÷kÜü¯Í—å?ƒãè#œxxT­ûËðtÕøØÏËÐð¸å~œöºÂsQØÍ§)ÕòY,Øëéü†¼:#Š…ƒÇ÷?…þðS÷ãŽÊ§“Ó›û†Þo…ýúVû>9§ïÇ{:VâɃ‡¨?c÷ëi[Ú!üZí=§ñs%Éi„CÔKá/Ýo¾†è»–®¸ßA/‘Á¥zYª³ þC´<îñ/ßo0ID.1 óaÁÒRyJU«5® +]"$܄µD-Ç éµD»ê™Dª$ßTÊ¥Qú¥F¯pL–bÿÏ»eéÚèÂ[žpñŽÇå÷J [mß7‹¨–R­¶&ixš|…ceÿC¼x$Yób6Šö6£‘%ü$§mVÑíçùê<¿Y‚ÚöÄ%Åd®{Õ-ÃKSÖÀÀ Ž8-u`íñ܎ºg䥅“¬¹þnÙ0è‹EepiãX5  :%cˆ<µVç›n¥_t‡öHËjíÚÞS܍;˜&¨ž”«yðÐ ª°˜RöÕ¶¼„r¼twY `²êü¨xWÃr=ƒ%¨ê×ò&Éwe9ŠR¬8TÉ(ðÕëŒv7 ál³¤Ï;7˓Ñy]He¥l°?U˜³F¿ÐeãáG.eØñtŸ˜é§„¥^[áB0ºˆ·¹»]ófH<$óóaºOúù^÷üBŸŸ‡Äd$œ5´”ZŽf—vÛÄi]ƒw¨×êà@H6‘fR§!4v_zE—süñJâºÊn07ŒéôIˆUdöÁ -%Wš”’h|א·…È@r¦»+å>Ù>}ÌȲÕk%¢0œï\.Hw¥“*ó`¿Ø9‹Œ£ì +8ƒ<¡_¸ޜ>˜×aVÃ&]֌rbbøY«ë“€æJs8Ѧ˜¹R€1ќºãiáàö R“uE„8 2u:Üi[Ì äw3þ8ÏbPFeþ «cÖÓêŠ +} ì® ´]ÉAHO&ÈÇ[×w…@p]¨‚îkÊ ‘8 á@úÞÿfPFÎI¿^wŒPX³‚#­¹óJ +…«=Kš=¦ž¦³›è º\’HBë;¬Ë:‡Íòø(·„©òKÊ*²¾þ¬}VT|»òé€ë!U•æÐ +hðò™I¹Èƒ¿p[̟s™/…Š9¤\B4 ,:{i’ ºÍêQ‰v{ÔdO©µG…Ì/ˆÓq¢Z†01Ñ.ºÕJ~͈ÊÁ/Y&,“ ŒÞNÌu7ìJUY®6ÉyÝì™zAZÀdv§/0a#O‘™g»J­Sc=5{°Ks:ۋ“pü£SjTøŠå*íáe:7Y­­é«<_ì-P3H¼F±ºéÜᾝ줔·o~{êkši¨YJ¨U²C¢©—"ÏkáÊÉYX›ÔcÍ1L¹…ÑrPäNó^;4qà <‡t„ ? PLð‘áŸu À0ST+ç›D\eÄϑ1 ­aÙy@ˆ€åbÇÈÿìՋNºcý*_E1üÊ_Öq•7Pfr ë)ûنu”Â2¼€þPßD+]/ÂÖ/˜˜áëï%âëíåÿÕ«¿ís=8ã÷ "öeMcœ,Š•o0±äeH”V®”£µ^Š8 cT'8UèJjùÒÒnj8»0B~øÓ Õ:°~MÑÚú ¸k±¥`²øXö^:åzçõµÚÁ|Š’—c +ªFä 0Õ·L’Òéº( ­ƒQI¹s…“h÷—¬ŽV˜,r¢Pýì9ªÍ¶ ±GÍ;kgm嗚©ÎJ8 ²É©V÷ ¿Å}9âÉèÛÞW¯ÃÒïÒf¢´ÍÕmüBg›ŒShÁӊeƒù\ëÁpeåð€?Ûäý/÷/=k8n—“r8‹j/¨œ§ÈwNDsÙz®¬¼$搵Þ<ÒHhã§ÀÇMEHiwÎ''t±õq…þ’GŒúwÿû};ü¬‡ýŸNÿÎOþ§¥mÿ7Ó¿ê#½wÓ¿þ(î3éß²ãáþ:ïÜaÿøãøŽ0ÿ™â8Ãø63û÷ÿ~ãþ,wÆûxî#Œ?è㸎0ÿÏGqaü½ûŒ?‹6)~ãáãiïÜaü=g}ûŒ?€Ÿ¿q‡ð=>·î0ÿ†â8Ãøî÷î0þ®žýÆÃÑ7ß¸Ãøe;÷ʧÄq‡ñÕïÜaü?†ÝóŒ?‡kO¾q‡þݵی?é›]¸ÃÿBÚíÆýók·>ý¤:Q0þ`ŠÇÿL/~ãî ï†xÎ0ÿ~ãø¶W¶/ÆÿQ[‰û|\ü]»þ%+4ìàFS9ñ:|ßKšÎÒÃhþ3èÿñœÿÎ ì[ѶI(î],s†Ùø°YxæâÁg—WýA¸NÆùÏõq‡a™ýt¥ñßY)v¡£s6þN¿43âïjâïjbïwwà?_{½Ç‹¿W‹Åù~NÇÀì<ÿʯk«é:Gršß ŠßIüoëî°í/Œ—FCsÎJ°Ãéã¯àâæ»(çÖ+§~niýoçÊt<.)_~þiñŸ ë¸ÌtzM%/kW#€QßÕøœœƒÀéÌ e™ðßßÅGÎCêëvøoŠÃ~ýþ¼Üâ8¨ùÏg¯µ3ž÷-ü;ï_§)ؙÛwžÿ_×éÊz£;wr€q=}¿×`©‹ÃœÅ­@zɋτþɬy¾C1NVO¡BKƒyÜ/{ÚÑ >ÒˌBß̳[ĵßæåiÚkxõV[´-Òdð¢¼Mîɐ`™SÝ¡<ÏÒw3‘)åéÎÐ×d9n€C“é¯Iùƒ L,W™ ;2VÔvkájÞ$ÝÎ +CTt‡Ù½¤5Q)˜t‚ÅH})¬q Àã|åÉê' Fìláu‚Á~Ui<ÂÜâéýА Àp¥Å2SCOxV³ø"¡å…˜‰C·ýÔ?‘6T<¸¡ÛÄ¡ç¿u֝0({:‡÷Pïs5O¡"Κ_Þ% NRž*ðVpQåÉé*72F•b*|¢…ª>7ò+S]·˜‚<{1kûe¼Á^{d!˜öÊÂh½²ãf¾@gL …É1†(ÅT š­Œû"°WW76kú̇èD¬¿;¾`-› +}ÎÁ»ÙœùQ%½ÙÛ̱ ž +X’NAb¥å"EâN/Ä\ÌH¹‹Â±º›‡è·Þ“tȨ‚=ôüÙ]×'Ê%¹pÕ³¨UDóúúušTGbw„Ê /ì[S†G“h¿¼ k:f Î"F@HUR¤®÷×õKM6[ÞuŸÎ)w tãxK§c2„´}ZX‚ÿlåð(~ÉÒXbjk+‡8 èî½ààìUÕ£œ3ú %çGj)´«ì’Û<É^¬m-kÜI-q{EµîÚëèê¤ÒW•²{€…FÐy”ÖI¤¶ÓKd%'`“…}΅Q­X7½êUÍV\·SJ,Ša5¬ß|83bç{t×/qÊUì-àÎýlz7¶l™)Wm4ÂÁg¹³Ñègên#RK9bãr +5NÐ2ã{E{â.úð× Öf' \èvԓÍ•}Ö4|ÓÑÁҗ€ Πí$bîáÒÏC'©Õ€ñȋ·F§Î÷O‘ëÈ¿S¿?dpôbð~'¶û¤SŽÂ•֝`©U¥K;\E€› (µÔðN!J³ý†VØre€„„ªw¸„»¸nHÏIÅWkÐ\Rƒ?„éºÛJz5¤ðÊâù8ŒÕ¢øs'‡¬ß‡§"ê–Òóí ŸG!tI_ç¼¾y=B£qè²Ó +k»aËr`aê„_(ö‰4£Y´ò/1–#h^~ö›„.n1…ÌA0©±H„¨5"K€ÿçÇ-öóº]ñã‘VŸ¯žôÜ,n½ÜxÆán©ª1ZÞ]|WÂy!€Ïì\/ƒ%âf +Ó¾f +Ž ä.â3|Y'ãûfÞÅfª Xyk{ÔSÔ´¤é£8ð?¤øßBªš…Ì-H϶ŒZÈØ0”UÂU…Ü%¨Q,Nð¾r;„· ú7å*ƒ-êa(½¿±jªOùQjyBT“Ñüânè&’¶‘cÆB8ž|æÉÌ.«­*K>ц¡.‰¬wšªk¾ÈìђÌx'Uªê·¥>¤„^ O¦’8!›5` +$/ìc؀X¿LԈz'9s§‡yŒÂ±àÁ¯+ò F¦X–¯Sù ÔG:í .ŒÎýÂkÁ ô9â%“ú¸ú%ÙË%±ùŠzrz:Åþ6 #)ƒ*óŸÔ/XT8pSaٍ_ïOAD=(:«x«Í·¬vn{Z™ª"¬‹Úá$º¥åžíŠˆAžœÆâX¦*ÄwhyÚ·^c¾˜DÄAÝL{ó˜ù31 ‰²qƒ>û¢êæVlâO^sä8ú÷㦲ìW˜uóè֎¶z0Ñ`–ôÇ-êE?T³rú|éÎRþÉÆ7ð@€Üþ†yö*öøæqüçjœî„§xäT²C“‡€p`Œ"j‘ã³£ó /” “U:eLгLø„õšS¾x'ùèžÆ¤zQþ »Ƙ"—‰Ÿds?·.J&ó^k(¼§´—E8 `RµéËtÄ|ùË-˜}<ñ%7;5þå#•™C/BtLPƒÎsüqÏé?tSÿ}._z1ËÎ]ç07GZ<¥ˆj€œ|ÿP‘‚¬êgX¯éô©P>©t·ÿP JæK"½•f½ÖöÂX½yæŠu®–ºÃÈ9£žölOy¦gµ'=‚UZØâыМôh™ú¡2Œ¤šù˜ãFk2Å<ìäόŽßo>Øž½$.‹â¹B-Áܸhùìjÿ˜úŒÞ6·³bá;6Èð¹eü§+,Yú[)yQÊ/6ž|ÌÙöþmâ·9´|I³tVe<ëžu›ùç^‰ä„IäóÙ8´¡š Q¿ ¾()(*§M75Ω¹®ž{#¹®nõ=Ír(}[4>¯C¨ŠJ5Œ¨“UÿßgIܖÂ,«Q“7³¤ÒèTI[2 0 jbÙ}¼©jâøillց֯ô\²}ê„&Öz¢í«ýYåÅ+b‡J?_2u{„$þöMÙ¦²çMQŦ²÷Tך]F¦t=²«s1ã«I—NøÅY½è•¢³{(ü÷(m‹€.ª~|:ùM¶6É fMòøÔ÷\:˾ˆ_æèXÆ­«òr-¶úÓF8âќ¤:25z26Ù׉ŸÉqhŸ>H#ÂÓN î`h$añĉ|Y±ªÞÉ0XŠÃ¨Í„©ƒ¥å’{7N±ebùû¡uá~-<ãӘ†¸;[áöú39à,ŸÐ”FA³EóÆÎHýV‚ˆ*€o¦…ã_Ûܤ5­ôb¹?§rPý¸Å§¹tX Æ=绉1×"EO è_U“Æ)¬²ŸŒå£O–bçd¿ÐáÆ@Ú¾,‡±ø B©D9ÔV!5k¤ªè'ãÇvmÎ`ÖOe&0«z²a>ô>«°Ö?7ړF3ž³> ® +G¤¾eÛy5žú¹8šÏz)8}uá[×TôLh£+My;Ñ +«s“Æ6{Ë ŽØ·~çûÆÙOîËÚé9¢ñÛCXöw|O ­¼hˆéJt_¬m“ûå:V@";…>֒]RÙIè –ý|Oï$çö®ùÁ­|ñêIpñ~~ëÀQWÃõƒ¢Y>–I¢ŸÑ–¾Ðòùë•R¢¯yT㮪›sFžŽ¸K(^鈻֎eà5 äcC褩õ§ÛÑôþ#FB¯/¬)jK…[ȬáÍù󛶼ŒçN3æœg!y‘I‘ >2Y!ºiÔáÊâ62Á|ë4V4b9»³H+‘§Aê\#ªÒ‚ÂH¹Äkà¦×Ré¢åz{S™‰nS›‰=S¸ADLˆ×©õ.‘¥]Ž#eSêeh +½ÞŸS‡Ü:EŠ­`ócl©û6!ðᖟ» Í©fPšfuñ>~£EV[z5éÊÊå Õóy( Œ™Ö/ùSH^lt„3>¤jPì1Í ­DeߛŒ4ÌDQÎÿèç3öq¿üç3ýg»³àó›2të|Érç,ï:ÒÙ +ß ¦Ÿ€F>Úñm‰ºÎó–:ÒÝs›´¾rò¿Sðn¤µ‘d¿ŽúK§‹%ó綠4Y-­ô—˜‹%ÛßIg®8Žº"â!ZñÞÔøtÎÎøý7 þ¶¥_è ‹RÑÀç…[Ó­œ—#W„.xgB\ðÎðÎ]ƒCµäÑÝ’&Z ªu³¸"™+ޛœø֟ÓAo€†?¨íÎ¾ó¿¼æüo7àÝM߀ËOv²[¶ÒFѵIY¶Q™HåÇDü<ü(Ó´ú'nbûj…ôgjël/)ϑùdƝó¥˜h.</ ‰õ=ø&ÚDÕ÷àžG +ý”ÞÕ©–[*jÎe«p +ô҆*Ê\»é•ò3¥¶nÜS9êâ¦1 ·ö¥V:…Ú²7±œ+P¯žûÖS*i¨ý7ØEYf2…âÚâË-“ î ¬ˆ×SÜÖTÕ %~c¹œàйgL̀ärùî2°Ú~Ýŗ¡fõlql +z¾u½÷ØûÏë°)ìÿºÀ§À§ª`SöL¿å`SâŽÁ™Öü6;6_ IÞ'½`Sú?ö°)ëÿ¾À§¾ ñ¸+ï{)wXá…\?ö9ÕW--—ü¶ß!éZÉW·Ì°Â䦲—Œä¤wª¼/þ6:õþþ%#÷æüÖü¿¯÷Ð]ÿºÁ¥ãX1ò”™ñ¤ÜÕÏ0¼§ãÝüþOÕí·ÙN1±¿ñh4²] Éî±ÿo¹´änìc";¼_ýÁ?ÃßsNú…\ÚrÀ\ßÊ¢lHð ˽ÎâyOž¾.`¶<«¿¿†nF¾ak‡ñ¶ÑE<rŸßûŽTmoyދ~ÆEjj˜X8»¦¯œð±7¾âZe|Ð Ñ!53@ŸÚR­*¬Rítx’÷Šlé 2ãã©öt´ž´ «,Jí«`ÿ˜}¶r®`+BÞs‰€€H€ euc0V?rn¸Kãœ?Á‘€pÿ ¡ã +³xÇïŽÖH‡çOß|þpÄÚuqšs^¹ú)Ãc#?.f9”:þ«lÅüîýÌÃGØu˜UÔüft¨7m}4hõxrÏ!+®Ÿ¼v%U¦3¸:Úé¦×åöŸ#—ÑŽuu¯Y6²¢ófÿå3œî†YKpÄ Š[±elÐ>õ2UºÊ)Îß_Œzkª¶Ð=¹-#;ñ}±âã£ñ,Ó©YxËCԋ+*ÓˋªT®Ü&š!N‚Û´…Ý6H/Þj°ëØ-оöˆ|jJ[º¡¼cf ¦: å½np€œûæžâªs…¢-…¡ ͦH¦„ÐX +¹rm¡žg°³ÇÒ¦låBt‹ž0&üLâÅN¼«sÞTU«-»dx?ìÖöPÊÆ=Ŗ¥,õ붅žŠæ·ÛzéýsÖ{g»?eèxõÿ_ó’ìQìI=tÏ͈Jv±Å‘_QWm«×+lõG–`pjûYG´{W®)-¢sjj|sc.ˑ¤¼F’â',¦§{I½F’ÝšŠÚæhöσ¬2Ë=£Øèon|³Ú;J©'¸íkÐÆK–õ\ÈRHQ1Àtð/h²5_œ:¿ûeЛݾ†XÖ.ҕó"Z¯ ¡³ã6œî¿_¿Sê4¾9¤nÁ¾P•ËݘRsHÝ-¿.ù³Ø¶h뿼¥£Ù‚ÝL¢•$ô°Ÿ˜‰é4«'±uR¥öÖ÷=†MûšüNsæ¶:¸»Äœ'L’—ú et,5Z÷Û³z,‹;k°gå±I®’T8²$$ùÕM^­|¸°èÓ×§t«ž˜€¸š 6§-PYWÐéŊJ°&ÜÎVÐPÔ<ײ…ñ…2{´Ü"¶¡º&+ ¨tŽ"¿uŽóßgÇã4?üP:£óï³ñÀw^²±ÊÑ)m.ÝKY«nRmؖ)â$× 9ž/vRP8ÕV' +žÇŽ õ‰}€Õ„®[R¦SÐ~à°×j;ٗi:µ”LQ ýØ}VYÞ¨]‡¶¥šã¹Ï + ‹„}ðƒ¹ÇvkÄÿ9u5®4ß|òåŽÄ» îÞí7/T.͗o˺ž¶w”Ý¿•z§éë¹ëXf¸Úœè”û ¨‹ìŒÙêOÈï¥W`ìîënï®R²æ[x3“¢¶ÂfQ_A= Q2©´õµzŽÉjp<âp±umF­Ü÷˜'yA©Çr18`õBӄÉÎ0ŠìFÖÊêíÖ/jîWl\'ÿžéàµ}…¦ íŸa¾•ï÷>P3óõLN¼÷>à¦S˜†è"bFà‰qIí±n¸ÝéïçzuÜi£¨‹¯9 ôq0¨Ü‚å*Óg¢[’1ƞ jºöƒ°ë¡µ€½ÑGµJÓ&ÚJ.¤¢N«º‡Híy±Á%?¼ÐÝ#µ²F ß3Üo’¹Îù…ÿé' +"(— +wa® z„º¯8°[H†^^ԓ¾†¿vmpûçåád©ÛN¡¼&\”yØoñôм:-éf.êyÃVhè¯_Aü“®€`ڎÑa°ºnžOkÿj¯gêA/ŒŠ&νãH¸æ". w êÑ +(­,öȤ"pvòõ³Z4æhãX€Ì³L8÷ELu È`¯2á àÎÒ\!„¿`%Q,÷ñíÜ#‚ðó«zãßfׄ§ï×Or„'Î)•S&k½ÂÐà“ÃÎ>橕è²yˆNºâ^&ö—r…„ßú²P”“E»~B_àk4SWë>VcŽôø\`T× ™NXL×Ǫ¹)ê4Ԁ¾±9ÏÞc냠{Y›æ* çNÉÊsWå0”]Ƴüèɽ8ð‡švFc³érÎ8`½–îj®™K†`5aSƒí Ueқä¡7«ö£8ë˜ë×{QœuÌuì=¥œo´úóûõœo¨úí½ÅŸ«Ìúæ–hÞ/‘rW¤þM‚XÐÆÝÍ+Ôº>³_PVer+6èkù¤ýwg¼^¹/è̀‹X.§þºUb1˜­üpòxöx…b Áù< [äŽüQ%…úèncy”sf–¼×LͰ¸s>~íF¾K…¼³€JõÏÞÒ 82ÁݽÇw„Š:^쒢=q³‹¥f߆žuq°8«^ÉÄfq[,5ïŒü)~å0úć3ÎSÍú÷ÆíÅß%mŠA£T]ñžôÆ©D¼M'÷ &Úì²^¿¦yz]`e?DóEPۓíEÅÌq}¨½Ã{ÿj.xÂóóKšQY5õã´þ|dÁך˜_Úµôß6j»Y…¿&lOÖuIOfþ,ºÉìÜ>*†ð6«VöðŸj]6†Y5¬kQÞïcŒÆPãèÌ×FÁ_š^Ks18ÌÔ~—æW†ÝnÂîSÌx]³ªXPÒ¥áñ£àU¶`F¥{TôI䠑wöŒ…i³æµ—-b3¬ÛŒiƒÒ¦iâ ÉDLJF;áBíW(›¿œå±BçMØç棷ÈõÊ øö) ÷d¶¹nވ”ïåï{z&ÜÏ¢4¥rcì}<ԅ÷ÔÅ"†5ÜU¨KtñätkÚþ;éÌÔLŒÍ?Û9¨ˆ2$®ÐIP.Y¦K®8_¥NÒÙýµû†)Ðg@m¡mÂsoXXÛi„ºÜDE,#Ñ?ª-(˜¶.Üx Xßùkز<÷4¶茘EÎ-u,qj³›@ ~n,Z3R¤{f +Fÿu1l] Ìi¿¹–]xXH›mŽ-Ö¦-\smr"™Éovû¢Éә dÕDˆU•Ö%ør°¥CSººô½--Î76,ŠòhWôJüXÞZ[? „zð$¾åOc;£ØÎéM\¯Ç¿QJÔ"œ°•ãle|¨ØÏ-Õ֖çÅaÀßlgÕø¶3ð$¾åVhT’ØÁùüŒªM7¨oYñPxöŸïe ¿ú#P¡ VÝ^÷]Ó\9ºW€¯²»<.¼ 1ï¡%GÊÙ×ÜÈvmXÜ«j¤ö¯iw-½VÖÓÖe³†¤÷ç À÷oe½gl“¾2 ¯Ö¨$èîà’¦AZ „£ùýiAHÓKZ?5úR„ϤC`ziHÏ Põ,Û,6j8f[0ûDð.øbž?ÑËË[¢f¥G.5ªú|kD¤:ÛµE<$ݲúLt1£õ¾Äu닐ŠV‰ø}JÉÖ¥åÁlQY>4ž`°ßì˜cž„}YÖ*»m@Cۚ˜Ô֌4Þa⭄M|æ!} ÍzÇD­hӋC)ùtÌZšÓ¯†òÐ]NKóñ\VïŠ(mVvòÅ̫ҹ´†l:õ  ]6—aÄҗ.ü&mÉñ¡ÊÖ3YV€µŠ­Ì.2Î,Q/x7¼)vP6ü¾;Zh-&Ô{ò1QÒœÓñ>mÉÃÑ:"lDåïMþšì„?ÓOΚóΊUnsœ¯æäãèã¢%¢FZC³!µéÖ7®y¡—ð½Y8]ÌÑê%o@^¢m²‘V”Xȱv‘T–ÕÒW´¢z˜]›-¦L³88 -Ë/v™Ÿô¹¬ŠÉÇØ7ý3 9 /~ í80àXíÜ^“Kq‡KOµDt¯UKSsµüREN™—OŽðÿ$F·ŽŒ)/¶1øí-Û&ÔñCOŒXåüTÿç–c!?ùÊ%åu-µ?ùù-WOóôM~DÿçöãBb´ùÿDhO˜Ó’ŸüÎÓ+¢kû­2¾OØ÷f÷1®ôûx×z}³Oý­Vr ™›ì'7ð™ñ¨&rÜ{¿|ÎEÏnÏþ·v½¿¿gý´ûçO»œK;ÇúŸ‰—çs¿$u»ïŠŸ*ø‹RnABc‘F¡ÊF¡ò.òÿ¶µïh,|…œß~ ñÓäßÀPÔmX8c…¿ù¤HmÂÏûè_æe³þJÎOãÐ|ø[lßw¡ñ¥}ýÆ~Ç®±œÐ¬${'æÞOÈÆóý^ +ýÐÆûÌMÿï¨ãžè:ÚùÞ>¾E ®C-IûÂ)òÉÿîNúr($R½Šÿï¡}ÿå¶bÇÃ(nr>v„Õö{— ²ÿÊ˱ë:¶#¶AäBë÷\¬»ànyn¸ŽÞE‰ÑïØ¥üT韚’í~wñÿ«ðf´Îø:¶Y˽#6Û¬'ÿ°ë݄ÌlŒ_Þ3ÿn{qÿ˜uìWÅÈŸæyXuì0?`­#Χ÷ȱHË#©àӑÔð|ª?'.åòríÕ&¼æ">¦¢u˜¿˜¤£ÙÌÂú H·E]×!ŒrBÕ4DM.‚gÝ*rÛ_gœŸ_› ZïGDU?ѯföºáóÊhƱx)Þ‘æ—´È,ÐÉPÓO¹Õ9DÒju-,{:Mˆÿ“1tQU¨fü:Xž ëi¥½3d (Ó%ì¸ñVîð huh~ƒë¼R3©‚<ëԐj‘WÎ +Μ?pÂTŸNHt1È`G¸§ôámfoªkW31®,.þÿUøæcTò ÇÕC~wè×ÒÜ3©Ðýlù|°„ +ªœ\wm{ٕÍá~ÓÖfX൮ÂÏ$zï»`Á`WîkŸ=ô$ìg¡ðX®ŒWúÐîØ¬þzqç¡Ê™ÁoæÓók£BY[ô°\CN%' +êê™UÁÃT¶'Ö$CA]Viš”WÏKiX*Þ][s4¿sËåþ|Ë + (ݚp:ç´mý'Ws™µ[÷á©D,mhnqÅçî•6{yzú¢±›!ç_¯!:!LÓ|rn<Að‡2­p%¶ßª†ëP•…¤§§&û‡ ´£#|R.njºKÄû/ÈäÁyK®ê¦hQÑs3úzè’íÇÍWsò€Lš±â…ÁÃéxk6Ä"ïÈVXÕI¿m1z€Ch:&5\&÷gñQ¸×÷oÁÛ¸QÖúAŒ€Û…zW€՞4aØX, (zx …ßyϕ`ÃåÖõZíÅdjÅå91f[]¡7ÌŝE,es?##Ã썧ò× Œê09H Àt¹­Úlß@“°Ý-¼K À»0¼wXóg#9s}¯>±ºýŸ’ÓB¬Ì\»‡Šï zºE]ÌÀ»Ò ‚\ à˜pÇ0éð®,B'·›.֚ËMÛdiDUºgéÒè6hºy§ä°H:pœ—ïNÕó–íÓöÏ·ç§/"}Ó` à>Ö\›$­;Ñ;ðâ«ĥ÷ÞˬX ÖB^íÑ,›kW).Å¿”Ûäc7ü«ÍÀñփ+ÖV¼¢ßìs–ÛÒýw_´{HVç•fr|z£M=¬°\.§¼H¼X?ž‡H•ëð.[ð.ü{WÏ%Zº~çw¨I‘ìô3¯+ôXÑÉNt]EMÇÍ®·§¥/šÙ"CJõƒTRÎÍxŽ_^¶+ß,JkGÄbù° “ŒììM˨6hýÿYwçÐ,ÞÎÉFò¼W‚³$……cÏ̇ƒö}Š$պųìüæõJ37ø#*÷ÖmoˆµšØ??ŠÕXWR`ì ™oÝäb»ÈîœÖlX©ݒm”8îþùXфÚ×*ì]£¼Ö|\@ýHüsãðN=òjñ¯\L"톝©1š”ëŸwcIRÉ´I€ö+ҏ@ã€P;v ^\;<%,â“lW’5õ‡]Åbeèíú2I•ýQd¥”¹D v07’gqRÆÌz¦jâ–S12®£ì’gô§­±?©eƒqö0 •ç\ÇW*xì¢R"bD)žÇO$qËÝÛ-…ŽŸ \RmFä²M‚»~čÌ`·ûE+5ìCNû78村~æ‘Æ¹Güò;ïþ§³]Ð_©õ†Iܘý<™Ä©bêó4~¥W®·a‡PmôíT)R³¡N—Ž¢•—t읆óh-¦…ÓO⋥ çÛX.“ÕFï‡ôŸ_ŠÁäå±ax N/jžWIƃoѺM“”Mhö¯»u?+ceuÕ_xàQdïè©û| ^3Ðôñ‹tÌÚ¦ïxטo…mq¿‚þØí<¹ÎÓìwûXøGoҁ¹Á¼fAqð·Ä´‚ñr1-2éìwCf·?c¿Á…{NG¼/J¨~Ü´ÉÖ)Hk†`$¸Û…n|J˓[ü ÷‡Xšp*êš"Ìü 5"U¼}9)¼ìÒ# }5†çQä»7p”á 0£âQÀ\Ç,m"”ä጗¶ xq‚/²Ï OVWf0Èë¨JÇò»1…&áaYǪÑvö¿1ƒGQô4˜¤è£é)Q¤™G‘ô™„i&“/I™´»™Fž\iúKM»cÒÓZ]ÍG4 d"Õù†Ï%ĕ¥_°A–85?Ul|k¨ƒI†¦Wf®\1óó˜4˜U †£¨¤L àò:Ti0hýe Ò`‘úu“Ó¸4˜~º(4€¹4:84Y`<ƒI0Õ,@°rði%ȸ•- ¹mék‡…Nù\¸¥WZf žsPYz2³.L\e€r2 „Åqµ.vׇâ¤&8Ù0y„0=ǁ«¨^‹ï#fn>±ÖMJ~ÓLþGq¤0¡ +—r¢®µÕòণÙ>ëT÷må3õ[‡p{ÑëIDQÞSeÚs9•~éúÐmG˜T,Aíø³“ƒðö>È[[Uë"V Å&m¼l P>^P)R6æ.XJ­ÄoSkç9ëÅÀyU™ õ ¨mu;Á v‡Ÿ6Gõ "ìCxÅå°<áe±å|±«çJ¯>5Óa롳‰úxï>FK&ÌßÀ¯Ë[Ÿ}¼¡/Nç^dO¬âÄ`“€ß z=uBQVݹ6L癣é ɉÍöÑá‰=†a–,ä1eþL§ P£­¢óÓ×ü>á´̘ô뷈ÏÝËSÖh©û +®ÿ‰'ãaÈ?OàÜ:Îڟ°]˜¡j¯5ÉŊ‰ÛÇÉÛÏ<Ÿõ }1ž„iE +î‹ âÉÜ«Úþ‹Ûd~æQûho¹$~æû—GïÜÅwE…UÛ]î۔«i§Üd¨dËÒ+'Cñ2L?ǂbÁóŒ:9³|9ëlށ¡±4†‹›/Ýôýí?iÎyÿž6(ûð£b¿åcñœ2<{é.FN·X#Ùý쾎ӈS±rX\§Â¹Ž×uò>&^÷ä€úÅN. Þ¥uíC¬§üÈŸþ +H?üɤ“iYy‰™¬ßck½ý_¯yíðņ)ìPø;¬®s%ÑXýÎ˧ñ_â&þl ßûþoðtò8՟³}0·&飁" ցäø)Y7=ä« Ê¾>ÄcgqN5·ÅQgڕþì Wÿ¯™þÎ8BS´’þ ˜‹•ÿïÌÿã§qÙ´å|Ïán[9N3ûsñã?±‹½ìsÙö|¬'`”$Çaý˜Ïî;${·‡8Ó40»ï”Åe…f«_²IÿgƒڂNı%V°²Yn64ûœUð{ Ó8"רÊß3*ì)æJ8Áu«¬)îXZl)ðµsÈ# t«RÍcåÕòïCô/ÚjšÒ$qŠIꕳbG7ï{³ág˜©Ï$K;´¡ó¬œO&¢7€¦0Æ2 ‹w©¡/&õ>ô“¾Œ¯¥¾Äåºe™%½”>mšCÄ2‚Ô8QœhÖoñ“åÃþ2ïƒh“ÃeÕ¨Wîën_üây,Fâƒ7K&ÅþÖ8À}uÐù®.[J€§­º¾F£LSµÓ„€øƒlÏnËOoHÇÆN5£¿`ç±lë´>ğš?bO¦ÐéÐ,Ú'½ã^BçÓg¹­G8Ÿô ÐËÈ)äÕï¨l +ü +­¡AoLζ‡Ä“ÍIֆ.¶6Ë8$ÀáUÕ[{†Ì£Ó­Ž=@ØãØÖÑ£Ûv|Xõ=U²³–kÚá´ÏbaÁõ^ÑÏsú.R¢é±®ŒcJcó‰Rn™-Ëe k±P³Ü3 tDI WwôŒÏ¹xÿJšÑ±EwZY÷ÁeÀè’d /Æxû–hìPï§õ]ÉøÑ2óUæHA…,:»så˜AÌ' x걦æ<ɾê½.0«×qI;ò3=Âk¦’|çW&çϰ¼™çþTäñ¯<¯‡&«ûÔÖÞøžÍøR‹v DU5ßÔr>vášÜÑñ{ßÿ©Ìo˜õ³­ûäzœÅ@ìcF; >V4kÑà‘Æ#È=?¾KOÎÑFýòs@ý‚]kNÃ)ñfüòxWNŸßí ¹õZ»þ\Vüðòã,9|½5Ý9Š)Œ[ÎM»=®âÉòDú‹ßº.0ÝÛ7ëCÎ÷nðÆtöx´ý‹{X~¦¾Íœ| WÜ&½Õ’yE¢¨Tބآ<…¼N&¶?¦ ˆÜN‰ ï)¡Žþœ’V½É¶ºiçDž vo`[s|΄Ól—u*š„àýöd³‚‰è¹ëÂáÊUš‘™Ò¬âÕ³ªæ¯+덇ƒz;njì÷Î;*ÛsLkwÎ4•âЫ†©:\²" +"0÷V=ˆ¿%n‡B·A¢ÝôÞ¤Yó²úT{cK½gÏJÅc|„Þ,éâ°Dœ¹˜oa-Ì,e´¹ÆBö˰Oß:ê‹?RãºÂ‘¦£Ô±qÝ˞Ô­"Ϛ@ޔå–Í0-&’—w8@m}lo¤AÇD‘Ì8…lx³j¥i#ÒJ“Hf|¼Ð#‰C-±ÂÁÖ$’Ì„ž^CþDžÀüè.£0ŽÎQs´î¨‹Æ|¶%µÄ`VßñÕÃàML ›P6w5ËîfXbûˆÊ.Êe*[ðæ¶+ŠÐ ðþù‡T`Éc-aøÂ+EqŸp¿YJÅrÝÛGÉÞcÜ à`S“²@ŒkÖ m?8¶NĆü[0 ;µáþC¬XþƒKž œõi1ð^Ñ|ö÷ ¿’À +5œ;i›ðÛT‚ œYYdd‹/(ð¦O# kTÚ«úEÎySrôÍ¥àZTÓ+¶ Xû2‰#)âæõ*Hþ«Ô« = Jn§iJ1 aåÄvO(©&\w·ÔG´¾™?+GaJ'[Ý£W•èýŸvm•¶Óx:®š_ a©ÙXìϨb_ðêSøÄvˆ¿Þd¼•µ#Ÿ |*Ò©Â4¬©æú\E_Ÿ¼üžâëR~™]l´'O5›Zo% mØ×ʒoeDѬa—7!_ .T0YþjÀ?“&.o6LéÚð;òs  ђúù£Q‘ÿˎ+{cî^ÉȑÔ+ oT}Vc«@Ð4a©£Ôõ£ê"œ7ÜÖTXš/¦ò£!\¾—£´=pNä÷nàÊN& +àÊ®$µÃ3qu‘„Kg¯ºæ.“tÎ=ðÉÕO§Å£ë–;W o èÉn£Çû &4oÐã[¤-R£füŒVé$$Ÿ>(×0Åf@%¸Éi·5¼ž’_TáÀ½˜|cƒ‹RÀôº€·£ÏKùBß=/ˆE¼ô¶énŽL +ƒóðcù©ã+×øÅ×nâËYCfÖÓ}–2õ½çڌ Ž +QÜg–†¤| +Èð¤ ?èG û(ý©EŠn4ø„­ / Ôxd%Q‡9Z¤Wš8îo}ã4kÑ%ã“ñk _ÆkpÜZf¶Iȍ–.Ó½†£ÂÑ ýsë›iAJ&’╆q´ÙCs‹¸Ž“*ÇüƒŽØÏòxÑo -£a’æ ÑdïÃt¼wÙ +NqŒ.¥µÅhÇNÀÜ0} ®H¨†Ç527¾Œ: +æjW&ãè·úMŸuxísîl`L­–›‰u-6î´»Á€†ŸVéàCðøeޝ^3µ¤W5¥ý‡H„ãl&Ç55€ÚnC¥ui­bvcj&LÁHÍ̀~0ÍKµˆ&¸a~êaº(ۑÿ”!ÒWWfâchÁÄT£s“ÉäÓ¦ms3ÉÆÛÅÌò8ӀþÖ ¬ŒDï~+dbúÎ,ipÂôqcëm=BrA5e¸'š è³À‚ÄS¯1dAF›HlyG2âÇ:8F¹Ð0ô¤~3­Ÿ>GYðÀ,÷ÞѦãÿn¯·åº’Z·R! HbŒ@’-F Ý7đ¾jFùA¸Ûd ÐLm!µ«ç±¾é$’ô}xn@d±÷0|Ø1·Î$ B@Æ °cäâ(àF007ïß¿ýöý©j@„Û‚sºós§l÷­¶ÏvïzàÙpŸa_zú÷­Íïzà\+€·.áßàb_\ûéðûÛInݬm¦ /Z0w¹‰mA-ªoÙVz¡ r¯ppJåÙÕÆÙ@`ñ²•±Zù狣F Çÿ=F‘:• ÔÂL6B–jµµMìxKÍlõT\t J}ξ*ºz¦.8S{pÔ"t£õž{ã/VôFíòL(%7Äi +1^˜Äê=˜ÖÇn jàÛ«äXÙSqDÒßLŒz¥º¿ú¯šAVWEή ÎTÜýô ǤúTê{'PJú˜ßãæªÔ8vçræ0Ÿ³ú{èù†ÂšÈÅùV~„~1›!Ð*Ž®W›ó ?Ú,¥ï‹&›ebRÿJ›·/E ©PüóPæMø¿™ ý5ª’YQþâ_֊‚VgÛîMi¶ò¯¯M q6¶øzAfʯóúù¨î +ŽæMCd©6•¥LÅ+¥òeG¾É¨lCãB™´ÒûmGò$“a²£·{Ž¿•ϒPp,×ÚQôåGû’Jk¨Ñé,¨éP*d‡dn³KIßM“1´KQkՅH€× S—ÈúCŠ샨‡”ôÆ¨òVÙlWW¬Ç½£¡G‰*†÷_Çw{€¯ãå/j|â¯ãä/püw$Ös¯ÅD×^­Õüs¯~ú¿Ž¶öý_ÇìïW*þ>òõf¯ã†|§ýjþ?mzøUü¿ï”{u·3 ”ÊNã‹ar +ïæáþÏø,ù˜4þ…žºž»à Žy¸;÷íüUаT©g­…g­º³á¡Yð×VyЬó®¬õЬõ×Vyð¬óî¬øxV|=՞¾ž¾êÏa +ÏaugÄB³â.¬ø˜V|M՟ +ϊº³âáYñwV{V{«>2Ÿug²…g²¸üÿçÂ~kã“b²MÕádŸ_ ²O1Ò,“™»¬“[°bV­U•.©æ¯ÑôZú`y_ú¦âžúâžuÅ=Å=t->>âŸÛü,·²4’ÃûFþåMýѱø+ì G½±³sî}’léŸI³–¬už šygëãy¶~å>lEŸãê®³ëüøk.¿ØÅtu?øÈ_Šüe՟ +χ·Òtø²5ßá_-ŸÐ³×B³×]Yñp¬ø»«>2Ÿog©¸øè[ŽºÞùÐ¬ó®¬øØV|mÁhùȄÇÚv«yý¬7?µ;ŸÚ¯‘´,ðØ:ðþý|Ä¡¿ø¨[ÿ¸üGá¡~7ë?F°…£ì.¬óáYçûê +\/ 쮼Oþ­ï¯ø¬ó¾+=oÁg¬´ ü8‹‹=gõÙýÇíOI +ÏOÆþô èµmƏûÿ|T/ñW^3ØÂñžÆêÏY +ÏYñygu³ÿíö_ýZ?ïé¿Çgÿ…ž²)iû¯ÿû[â>+=‡Åg¯ø¬øÈÿþ|?Üsc|H,à «=OscSà´çÿ?ë³á­ìúŸ×g­·ïé¿]ŸýÞåæ÷Ï´d¾£¯wß`²žÒÛ|ŽÅžg¤áDjôÙÙ-f;ñúúÉÕrŽØ÷ÿå ¼d~Ì?±¡È}÷S¢É:ßݾ®ÑÏyø¸2¿·›œÝòû_•¤ñ;¹ìŸÕ¯ù’Ú¬_‰æe¹QûÕ½”÷îÿƒ‹ê/Ñ(ÿí‰ïüïýÿ¦)Ÿ&_>v—k¥±Ò¬ÓKi¥ôٝ5š§Mßi¼5^™7Mc¦“ð¥¼) +o¹<àžŽ vÿµìîÄêśŠœ5wÉÁð(P“Ïþ¢ßðõ~—í¯ñš,±ïÚ[ó„ÿ^ƛ+oÎÚzHœÁ»Oñb¥ìŸ†?yú@ §ÿ©zl)—E"? s,Z0Ä2(ýÖuΆ˜sç&oïÞ?Bzh÷ÿß¼"Áâ€5ùÑJ)`þ2%BwŸÄŒ€|`ԒSbŸ˜¦”Â5:q™D†˜d¿§Œ{ØÄÇdävŒˆc’jjZV5Pïé-T{ÞWT5¿çØF¹·{P=ø›„Ì`å‡Á–SWdSoaD–”Þjdq1‚o+Ik€hE?ö®¢x= @ÞU˜óÚøÓ7¶¿9ë%ü7×{:úŸÊ‚‚¬§®ZðýÐ㈇Ø1 z³Ü + 3s-Ã4sS¸nËU#ä—u1_z»Ó +°ãÉCöZc´,Á,1¾´T–=þí‰@ÿD†táf¸·ü3D½”4šA¥ÔCöȳÍ/!,qGׇ.md{ršEå3¾“æ…c¾&PJw¦î^1ºAO¿LŽV˽© Ñýør’¡ð´ZXtù©ð½4Öûa +°IÌ»<ü“-^9›-^J8%ÔcZÖ»¸ŒC ÃI³T­ÇMMê3P枪¡æ9¦È¿o÷Pê8Ê37Z2n"û{ô &¨ÜíqQƒÿÄPºÚcoË8§¥\q7”„½e¬–¹ä½Ü°õôpšN;çÃÌßÔ± }úÕÔO‡„€8­˜gQ“°ÛJ– Gt܅ùÏQ/ã;« ªKÓ£Ã.Mßʟ3*Ûu+ó$1`.%ø ‰…»› þ(“0Φ=tPÉ8ý †AOÃÕ¶2w}R~@t{èQ°KÅe·oŠŠšQό•þŸ~—¡ zè¸èT+ڞ±sÆ!™ÇÒ7œ;9ÕŲÕ݊*´Î«ž{A ìÖ»¹Åv’àö­Žóðõõ,@¨Þ48÷e v®˜%²PØú5,@­ýÃ¥{ª?ê þ†kêOB$½C›àƒ‘…{‘}TÑÜHæµ5tüP¢ˆ1[GŒAõ+Øv…¡ç8§¿ùÑZX֐]ÊŸ.×4ö9@4ìÂ8|Á•Q?›KCÒ±Ïåm:$­ã!™Ì£6Z¦‹ æ=Пrò£ÑMVZ­nÀ_R w%¯ 01#âÛ(/ûv^€ßÈ]Ò~€“åè Of’«@ôìíÃ3óiԕq?QÖtOÚ.øb*•_QI(…sJ ŸÚ£Àkµ„¶´F3ù$ÞÒØÞäÎEê˜"mX3 þ ¶Øç1–| ²ˆËµ8$,2C¯XpÌÜØb Ð`'Æ!ä@œÖSÀ<$­Ÿ¡ÏZS †ª1÷O֘úðcø .3ÍpÑí C×¹Sì˹wd„çê“Roü (–;šõ{ÿ|ÏËß0¿ÎÉ{öv® x«²‡µü ‹yù¦¾È[Î57‹y4{õŸ(Z“+“>%†Ú¤µd°ÛáÚÄʌ.s@ühà °^KxÀ ‘ü˜r¹rö=ðË2hêIa=ô…tWì¬ D£)˜¢7,Nõˆ#b‰g¦"n¶RBvB˜îKoÉ>ÜSáî1ÞÔSáÿb#Þ\xy¸ñ¸’ã¿”Æ-Ìݽǎÿ†Ǚ©ÇÆ©O ‚Üʋs¶@‡Û<°ÛǨÁ3؎ÏÞ4êŸÊfv\»Ð¨¼¦u\8ýÏÓ¬Z‚“‚‡iñ~œLàü¹÷û³T@¿NAO¸¿NŒÒoÓ¡zžRénP[¥ŠOѝôbÐWZ_a ÿn4€Á ¿…b’„ÏÐ6½³fi°úOÒh¤öfr»QúñÆïl ½¬³£Ó<Ÿ!±†(KÌòÿÏ#‘ík±uÆE„–æ×ÏÏHš7 1è܀°¾çd²obց—ÁЌ`>ع}^ãa’xË(CoøÁfðš9}áU6s­Íg¥DËÈPb€8_#DQo‡.m^AÃ^·5œõ>‹ Í‹C B‚¸dŒ…e†Ô¼qóÙØªøÑ%%¹GpG ÙvM‚5ãà( $Ãü¦îS{—6ÓÐcâÛ¹ ÁIÃT*¾Ø,f²Mdèg¸ÀÕÖJ¬”Y~çcWöËù³:ñX÷âV4ëՄI¸ÇÍ}µ|7áñWd!ÑöH§?¼Î¯ýäÞágdaï"÷½Ìòt9üŸÝòã0-žò%ÿS§´ø­m3'?}‡‹Ú"¯ÿ!çñÿ¿ã á9ïyÁTþ¥3¸ž>ò†ûæ¶ó>ׁãö3Û´0¾ùÝEáeØ¼[ü¶úL#fW!þÞñþ.’¾9ø@+þ„Y,??ïE’äïômÊàOÏ"é+ãº(²_lÉέe¾dæŸËN!ΎÐÐr¶Ó¢›óÑÈŸG!î"ÉrfØßét•ð>^}GßߎV2 Ç«€C9…ÓÌr¼ÈûT”}™¹Œ Â?Aw42B­e=ú4?)¸¢‡Ëzü¶HL°4øõeE0Ð-~ X`æfÿ•@†ÕÅC;¤°wFh°ȌX!XÚ*®žÆ-۝pqH.ç[Î|ÆñNzê·ç—(A&)k¹Q°o–Pd?>-¼ßÌʹ>H9§ÿN™õ ͏avN Á ŽZïBÍuü™³ï‘ïà׈ …½¥=Úæ ŽGYÿyb‘t”Î ó"QjcÜY gíÃ+u™KF<±!¾°îåÆ }V¹dß{‹¦v#V͛3n‡*M³Ïnm$Á2î®Êj¯;ÀŠ ì5œ )@”Úub³2Ä­i>:ð{³ô-ñË̺4$&`V¯â žÒ” %;ÈåÚ$1ܼ§†f€(º ¶m,f!¼0i/+®ñ'ߖÀBê7 +¡uv7ÇQ&äPÅ[pÂÉ °¢G,`v杠{#Ô83&Üõ#EÓ32ç_ ¯®9<Ñøºü3“Í,‹¯øÎM€—\„,-ÄڕøtóJÂëù¤!Véĝyõq¦‡GueÀ€"×xv$Óø#Tƒ[‘éW©-ÌM4Q¶PâÕ<1¥íy¯¢ŒâcSƒ~}8(À>X˜J݊¨zöfç;¶F‚^P?Ì`À=Ù©áÿå³µFbý!Érœ5Q|hðr÷é¦ +Aiÿÿ²×Ô/ðW,dýŠS™Z,è7)¬òðÈY޵!e²Ë}àÌ-}ËÍ ]pCW”ƒ–» q€V퓦äÎí’ï%\¡·l•Áƒ{ÊæÓ€÷6ÀïSBþ× ºò ±O¨n³ƒ¶íç/.¯.^ -¦N¯põvɼ䃡ŠÌCf”=B¤ß\ $žØˆ©ô +¯tÿŽ[EŠ3uՇöµs©ÁþÏu€í™î™‡öºÔ^‹ö¨YðÝá50Áù A7¯m…âŸ@¹c» IÖÀvPþ*Ú­‚íHMNß\¬³ŽÐ´¡gE×Bƒ’ƒáöÎa©ÙTcÇ幯jTàåϽýÅ®Põ4MKÕ<%@,ziz§d‡M/#‘áý¥äs+¢j^©`¯Ëêa›ÍöŒ‰V&mUè Î}¥ý¥è¯ßñӟú05Ñ16R¼ôBF}®ô€üÅ|8èÚVNëÚ«f&Ë~•x ÿ\+Ó}¦Ñévãå)’ZÁ™.˜Y˜„ ö Z¯¦Þsʣ稳È7œgBvõä0tcçž7œ\Ðá!‘K¢0ÍD'Žö>q¼æ Þۃ…8¦®«bŒ¨:`º÷wº¬ÚÂ8uÃñLm’ÔÐtÃz—Âê,òh7ư #œ–eQûä‹­ç/®òìµ]S0VqAìWl×ÐtÏ`ـ-ÉûÑ`Û$ì1a×8ºá‹>tÉuÑ.¿Z/uʟ +|]<âçkÙj±ñ¯0¡;f8°÷s“’¼0.ê„ÇRô@r+åšZK-ư޺ý› ¯·9ÙcWÃ¥·ä·cŸqK|[Î)oˆäuœPØml7^0 Þg˜'°Ø¡Økl ®ÃU×Ü\}é ì·¡°Ø±ØošÐ`ì6¼¶)dú-x£°Ó‘¼ñ_ì4¤!Ÿý » ìö’E÷—Š8¢×ðéyÐø‘³Ø;¬Á¶Ó¥°90ØDµùØjõ)kv=öR–¯h,µzûm«Þ#-VNüï\¨a¸Wöeړ¬$߯ù€3xòrˆý`™ÑX´ü—}Oh<³ñ¸§Ø3+°¡K³¢ =Ûœó8‰ìmÖ3ý; ªhö^Ü㕓úßÙ¿ø›X7ZMüS÷Ž÷Ðô7mSë¸Øœ¦S'°:ÑaKחí9Ü[¡³â"Vüﳏ½~†ÏÿKSÏ»Ä,»æ/k.ó7¥—u·u„¨&†Sƺ /™«”÷Á–e{s[ç!„ö–=˜”MÁ…Ûþj.¢Nu˜wÇúý0>C”Å…úº s+¹§‡ Hz.¸åÿíiðÄ5ˆk ’IÝÍ<>>:¶ü:µ|¯»Ì×­T’˜é9Ú.w¾¸kª +ýzµõ°©÷9?Õ´@óñ:C8ìtÌDW~¯\p,þ‘>¿E|µ´–r{OžÛü×»bCÿøP§é4º}.£JãÂÌøY¯ +Ñ|;)fNy’lÑ?«ßcï•Ü,ƒo¯¼¡Íjð®ÿÁü«çfs ,oy‹¦¾Jcsô×ù¹þ‘Y>øaÙÒ³øZ>_þ­N/IÏ¿ÿ0A/é0¦œM¼/G+‡ôȵðÅÈ?ïðÞçÓnígW4• ßÝÏÓn‘>’„„OIî•ýiN ™–ÿ» +Wà¡õÊäÍýþhâOŽñ´òr$Y.déÜ@Fã‰ûéäI²!|–˜¬óSÝ" Y +´ØÎéÉ?7¹yqýqZ2‚a„ZvYmïz±ÏÊØç5àÉúB‹>Av‘È— ˆ³Œ®>?mŸQQŽÏ—cԊÜᓫ–ñªlû°Ÿ4“ə¶¢MŠ•fŒˆ^â´|£ŠÖþœL= r£AÁŽ§ +n8±ƒÖJœºÍ§•gøÃ¸1ts%"‘6êýЇ»ý™ÀóóFjNÉW!]Mu½²PÁ hV*µ`Û&qŠ9&Œ5èõA¶¨b¿ïärÓ¸ƒ5yÅO]ŽÖCå<³¨‘»Mìì¼íNk¾pò–¤Oòœ`k †fÐrI1èq(ýÓfü)xDÎBÈ Ýõ®«¸QC;ÞBz¨i\ZöGnÉ¿ÀRR“GTœàëT…’ä¼úÛW³rüጆîVØËr•9+IRQi§©& +·j޳Ž_`ÜÛdŸAï$U1Ä+å5´ü•?Q_ÛG·”Ø·˜®² ÍLŸ±k¶zuÖYƒôç²Úä»KSt—iäÝz¼jÆaÐwºãVN»]QWKµm¢£t @Ú"uÓdÿÍö@KYáXÂÉÓRù¦,dԟ%b<ÄH€Ä?óçü†E + +én^×2M:¤Zð„ž45^†Äc€E÷³¯×™Wñ©h±ÛÛñ¹ª(Ä‚S¥þ±7.òv—ÕW#û\e&ßt#€•-tî¶ÉÅDŽ?û#™žÜl| r•©XªóDøžcùdæ­V™^¡ïêðE¹Ý¥¡¼Ìik`®!!¡µüU33±9 ˜ÃŠwϝv# ¤ǕhêÝfœ­ ²‚Œród+ ß;õœ5䄇õiQ³£ +‹8}ˆ’m^æ¹ÇJ·Ê{iÆ>`DýoäZïp$RþƒPº]ëUŠË5| Xlÿ>îû˜•7vÓ\ž5üŽãú±6 +&~¹GæÝßæ¹úK;œ"õ3¡s븿ÙsøƒÁPù¹è½ëŸ;É÷.{x¢K("§0¡y‚¡C?S|OÛ÷R€Gԉ2íw%€Í> +K^DÖôšyc8©¹It|( +5×cË4 rÊôÁ¯‡=.å×áŠÔfŽòš—µÞ7EK-Öãú§ñ)édß:²ո—C¾”“zoE×OHs2<žÑûÆÇWR6k´Ï„z.£[V®ê¡҃éٜ <}ù²}‚o*šÒS-†q-ˇ‘`½ø>^u£í°!IÔxêW6Ÿ(w‰Åˆì÷fxÀj‹/z©fÁà`ÐÆ>ïÑZM¾2õ#šl†øa8†Â8—Œ¶µ®˜2ÕΡëÔ¸–+?>Ÿé²Éd€FœÂ+®v€•‘â˙×j¸;÷Bºè‘ l‡Ê^hCò¿âÁ7l0¦óéÁ^i‚5J÷ô™T½¡ˆ;d=ëGò6ûkÊ÷ÄÔæü™$à5oµKØûµKv½ª^î]¬½nBuj<韄J v´úéº9ˆ-P2["‡áŸuûæ€üÁ;g¿T@Ï0ù¾ßÃ)#ZS®†w—%Ko†MnƅîŒ*¥5[JÓÒ ¦‘§` +ïgáå]…CC¸%Ñ@ê»ö_G°ÚEã5ή@æSÙÕÎØ_lKP4`ୁ·e¬o7ãäAŒ¾ŸüÃÆá-I¾ˆ'>Sà¦T#Cí\ã‹FO͈·8A8„EÊÝÇì‡á܈8 ¥byT«žÁný3îìðoÄÝø/$–0uØ£pßMŠn÷ö̍¹ÐU™|áàø>ÔÊpÝyŒ ç +Aní~À‰_¸2Uá,ÍY&,Ô³Š,H&-|)DÏÅÀ<9ŒHN’“8õ­(dÃYëJéE"mĹ¥\,à¥vqÊÈXIŽ˜ œr@Î.ÁË®œYf~tzGì <²9žÙ4_šRâ^´Ì…õOY.YÈj|àŸìx…¯ž$ñنÛT­àgC~Í'vØv‘æWÅw_Ä4%5ú8‹`y Ïâ;þçïñ_÷>;MQ?lÿ¹úRï>n"Ñÿs±.ã'ˆ¶Üüjkœÿ¹åfŸ¿îzé¥_÷>iûþç}2«þÓöfHôÂÕ¦¾.Ïq2«þçùóEÍ|¹§ïûœuÞÜáÈvÏûžù4üB䉞Í(ÿ¹Þíü™y¬ß8.J;uáL»õÉf•òVOûŸ"]æÞe7ýÏY2«þç銧û’J·$ <ÌýÏǘµÜà;ææÜý´Í£þçëFÀ‘ò&?¨\ûù€ÌEjúcý˜D0Ã×Þñ3Î X6vh ßbØ5i؏‘škýÿcsïø_ô1ÑôÂLtTè¿ÝLÂ›ÿà:¶oÚ½ŸgÒh:+ÿٟ9ýùi;þ?ÇR c|‘çðÿ_ oÀG„T'Ùó®}žýü뚐¶>£»ŽGf2x]ì֞î\e__³—0¨Ê:$9'¨1õ휛 Ï`èßÿ<„toDZHh¨P½ï[!Ùö\'m¶Ð(uX;ÔO+(^üBsÔT¹µfÕµp†dÒ¿ÌáýË쵸o%ÛÃDÚøÀ§Êv¾ÞÒO|‡DÞ/­?K…ç?°ßšÖ‹Ü¸xÊ´þô;k_ž{§åœ¸£»Ì³z¢N{×. !¢ÏuŽá?  /Íùe-ìŽX‚ˆ¨ áv]Н…~ÛþÃ4Šû>Ã6ŽPŠ^×·•¢Î}¢ÙK hùÑz±0ñh½eÛ÷ ½‰£cR/rû+JR“ΆÍÊûÁÐoŽNî5^ҍ¼ÞÓ4/7´Í£×,ҒÛ%sëâûÉñ߇ƒ š[I“õöõGã@ eH +,¸Þ9گˬp/Zlü-Í?­Ì{¡‹bÉaÊ}@†kîàµZðîèmC¸ÇáÁ9¦×MƒŸéU¢3#0¢l‘¾áí™Lê#è—ÖoBúë;ìj7ޝS´ÞrÚlgÓ²€Dۍiú< x ¼NÓzüÊle.~Áfºìp…Ecî­‚›ÀgíZ„¸6±‰ÇUÏØE»ƒÄl©ÀvS=~cwó vá RòëU;µ^¦øQþ´ +<5¥‚þRäÙæ$q"¿°ßè†_[>¥µÎ6 W¬UÚÀÀt5õ[³9úþ’„|yp܇®p¹ûZC¼ë êõQSLcë÷FªŒæ;w#Uõ“ª˜'…ù°w——Ì×MÐ á¥ÔMMىº›î›ÍȟÓL7*%¨½îh¿Å*5ŧZ!ö/@›'!ô…m¸‹¤xÁ*Øl]–ŽdÑýŽ—ró2" .4×̵ZÐ9Ýç\NÙrŠô)³È3‹óQ<ù«7ë´\õñ¨¸'ôY#Qt\8asá©Öw”ӝ(dµÃs‚•ò@þîò$]‰Hò,¶L¹ÛþØ:õCêg¼§²î¶òžËßZ£õ,î#ŒN^}–ª¹?Áá¸LÊ7ˆ0wLJÞ4UûÌøyÍEc©™¹Üþh1á^WÇÄù©L¼[0m¨88¿€ëIˆ_{ Q‚!d¯=Œ÷Pcãg¶ç%V ÐÞå¸kÄeÝm…c´‰ÿ>-¬üÅ}b0͵óiPc’$#+C +è4âƒÝ+»Ë}œÚ Ä5KnxÃYq3r=þ\" rCtù˜ZäÖ¿Ò³Céƒ@ÿ®¨g]JÏà^7c5ŽïH³Óó°6z<¾ÏG˜uJèõÈoºÚ³ öèy +¿”Ÿ;¾wÆ€_ÉmÇÚÐJV ǎX–pÉLÁÂr“‚nÖ:7ÝÆUž 8^F²!¿yÉ [:B6hZ±¡[ÏßÈy1SäJP‚Ö£Õ™ž”A§€fZ1„¦{çÜøãՃö\ìyjû©AÞàscã2¢ž"žJš”w%Á܇ q–8´|#ÀúI->4w±N3À|á“úlfð{{±h#ûÇ]@MSÎ×mU܁ÛýYÔ¸Kyp­x+¼Îðß8UèGwÛ^Urqžéç +¸·ùƒ›™8»uMŒÌà +4]w\H#Ö¦Âe„¤ù9r†±~”ˆÄgswéÈÖÿÝD2Ø`8MĦÄadt>MjµG¥7pa÷à`@$,>¹“,¤›ÇeeÍT™ qà­?ÀéGêR9ù˜¯x-û}ûµi7þûÓÓÒ@H‰ èIÐ!¤¯¤žô„äeiVDK Uð"¡ÊUkJÕR°„&XÝTƒD@"1j,´œV¯„€´bàÿÿß¿}÷Þô÷½!$€H¸ynµ…ãmvÍÜ»t7CnsgeåÜ»rކ¼Ût7Wt/CrstwWtows›t·77c÷OnžÝmÜ)à÷]dºú9[DOôMÜÂÜ©ž àV9.WrÜþãjöíEýð–d¹nÚ¢´~˜=è©Ñ^ŸÏmFYWyMûíc¢¹ §ž(?ïáxKG…ÞصpI£¥Rùݚ$°ûÐhmc€ÆÖ ?l~™fd¯þ ^âàGÓ)îðû å ÆÀLÙPµê­eïQÚžÿÁ&@bkIœŽ=í­‹x5ì-Ðæ‹Ê~è,g]’Ht•ú”k«–¯å@â²XÄW6Bè¡Ñ'=Š÷2è˜räax“È·¼>v"F¶íý{£¬ùºóˆÂê‘͏ñº3P©Q ê¦Ùîž Í‘-‡Ý<7´`¿f]xöŒ”# 3åÑ0é ºó|/T‡p©;™¬n±h'.§Ê+ÞR×Ã=s xßå†\Õtqµ䛙"Ä80+!’Ü\I¥ÀŠ/}‹Y«»ré}KPés£êKœp%©„{'»×—åÅÉë˜rÃ(Üöö”Ÿ"içÊ7]çä]"2›ëî¤ã±ïñi}@üÅN—d6ڈbáüt•²!.þ!/©—ÎYxù'cí[ÉÐ8ÞŗoQY¶ÛÅ7àÓÿÅ.®)_‰&ñh÷dîU¯éƒä›h}ƒ›Th¸6/|mW¿n̗›o׬'ûøî7mˤK 7&±€Ø³)½[¯!æðÇòÑ v„‹;G¹ÓmbnÌEI§ æÖÄ +QHë˜]Ëp"MúÜظ½¨ú,ª™‰ ü!±­úãv´œG¸vÄ gvneZüjAÈ|/„Í{Kñ×°ÒJ˜šUş{´Z}ÇpôN ÏÒæË¥Ø=Qì‘?ãRdZ~nü ¦qÎùíQü +¸nCXcžÕ]çäˆâú±{}ò]ê̦üxÈ2µI9MøÉé=ÂÇ(Z 7!äÐ~Ú£9 ó[TäG2È}µêžCõÿÇ8›4](Ÿ¿ØÈ`].ÑE‡®.—ÁQG°qi™H~ 5,‡Ñnöàíý‡l*¤;K¸¬î…Àzsj Ç·BHü6ÿÎnxϓnî›MÇ9?\ù?ï[{)g/‚šyùm”™ξh%!åÒBRq¢>ø!KÄÍ}?4\y +*{Z¿«3ï{mdã¬óD/¼†ün§Ëš7’X1ÿ/~t¸ì æ= ÎXÍ-)ŸºZ4]펔i½ê»¥!è¬#èžÈ—¬>"̦øŽo`-KŸ$‡"‘io‰œŸû>:öuRP!Ã}QÙõ…ÁGAè·Æ‘1hõDFT1Ü[je {Av¦ýQj-}œõ>ë‰Ã_Á9Pp› gC†qÒ¶K{&—6[Uä­•î7BihJ‹äÔ¹h“•J2Ɩ=ˆ·íÁÆlG©²-ÜõfÉgɽ”7)sw,R”–½äß—²éÜ´NÌÏY†àCk4ÁÌþ{ͼÒÇ·‚Äù'š8öWïÏ8ô4qìªÂ ãóMþšO³ÊO‡Ü™mÆ•렎’Ç“2$ŲîäK_DÞ(¯¼ËÙöK¶–¾'̓ßó‘£ÚNðd°Ïa"©g¦Ïrª%¡Å•z<„×=é0³ÈßG3n¡5ÏzM’x&&Eé7åVŽ&oÉÿô‚wóàžÌ˜—bš°L·r70H'»4¶¼{„XwÅVˆ”èA;w™`›]çê»ÔÈ>p»Ï`îÊAÅû¼èÈ?zî|ƒÞ˼ÅxÉ˼ûgvrÖ»³|«º0Mœƒ°ßùÈuìѲ2ïÎ`Ñ«Øø$ +¿ ñø¸ÚÔòWQ†gd<”–ò]¹œífiõ¦RºÌ3×á)½Œ6_,-ÌX>]–˯ìÕó¬Á«³H3AwúuÄ3¦Qô¶ZöUywtÇ;á]qÖX×E¶D_-§»ö´|ó5ºØux9Õ%æ¬AûÍ£«Ã>i–åùS2,N¼s‹ù°"ý”Çbõ:~A꿐“3ì[v:”“_kyÌø'½:µÆw¿p3ÿ“(uz¾ zøëtõ‡¼ú¹k«iðW›/è|$)McééíU[S±+Ô˜ôoÝq¼óÆZûɼãÚ™ì.MONûÊsT¾Ã×d£ÛbUå5Ö Û¬þoh}cähË÷SZ¢±†Ê© ßÿ³³Üiö|õ&ÏÚSìö­bÇ>´2×g¶äڟnÕ¬_ôWhËnV¸²oY‘Èík1íMiÿàÐ?yÚ֋úè¦|7÷Üðp“¿à8•pÈ´T:•0PuU˜4†+}öF`H»i³3màٓ¾ ÙŸ³ü_4öÂù÷Óü}ÿvÁC©‚RwçŒÀ—s®|]ÿ6mÿ˜š ÿ|ÀCEUØdGø%/ðpµUÌW3í<¢“oüé£üá·üeµžÿ˟ãN9/±/ð0|=þàwà—þÏýl\/ÃÅÿÀpåýw»¿ö0!¿ù؋ådÿ©S¶ùcøÚÇD¼i~:è¦+úñþ¶æÌÀ³y³0.|ö‹Í›ÍI˜/6o57f|ߨ5÷˜?ûµPؐlѾOtܶpãÐðr8{…N§7„·Â_oŠøQ¿ºs—X%uÍÀÑ¿lÊWÞÏLfäÞÌ´åæÓ÷æó]y5ͧ„ê),ÆâÈqɹ½úë ‚ª…ퟂ¾ó,áJ¿ç @o¥iÀç|«Î{ýÐ9ρ«øÏC„úØ_?[ Õý˜_ðBü¿5Q Þ\ËP½w輐¾ O#ê¾¶ÁseóeË?sW í}_"“ë~à…ì9º¹_¥å¿¾Ž4Þ¼/\>[óŠ©!yÕ|‹”›xÿñ•]Þô¯¬ƒC€òJò{¦Lç¥å¾Ð<·ÁÈô8|gWՇ-ïßÀý'íÚÙÃ_À•ûD0Jÿ¯ àŸ¾[æ!*á}/öˆpâÿìBûª¸wë«÷ÃÀ|d-$/;‰õ¾¥Ó×úߌ~ºñ8¿÷yopWíÂõUоr–­œdCA¤…öS›¹ðüH^Ûø!||5D¯ða~¡@Bø¸Èˆ^7Öüú›§Ã ÓÃýÈ^ðü¾û|ã}ÃÕÊ÷½ õt°½»GUÅþ¡@q'ŠÃq¥}úê¦éðq'zû½áø!Wêùnü=_ë*á{ŸÙmãÂú¿¸ï{åþۅú… øüÁ)âòßîÂü¼A¥dØqü·éP&t¹¢Šö÷®_YÝ_ÿt[ ì‰'«þ$¾z%Ñ韥èïìú^?ø/„¯à¿›´=„K>òüéýÏæù—Toƒúy­7iþ˜ÝPç²~lÞq¦ëOs6¿n”ú}K©=ÍÏ<Ù§}i¸—8ߺƒtkÏÎ4НÎ÷ÊÉ/^W÷+û•ýþÙJ?þí5_&`7Îv„–uÂ]Î]<º‰u2ùك´=}”'œ.e +̸L¹Ì§™Q2ûFÜU“´.ÜþÒU4íÎhsº ÓNNsIæ”M>Í)š‚šU4²ilÔdÔkF §³`ɋ6 ‰³`Ç«6 k—®W?£Í³vkºÞÍwTO]Ór·õD«ìª™X)UR«%VÊÏJÏÊÐJ°•¡•¢•9¢Sc©–‚–U,²Yl´d´lµ³ ddß7/œ—ÎËÌK͒Á‹ªÏ¬Ï­ÏÆÁˆÐçè³çµ…DÆvbbbnbrcM1«˜ž˜[ ŒÐFè#ôí˜K;)]S37393¦™ÕÌÏLÏÌÐLÆècô8í ™¥tem6OŸÐÐM”è¸ßø™*wFt!²ù§ã´Èғé瞵×a#ÞÏÀC÷qqÏ}ïÌ½ìº¶õ]•äê,µM¿Ç»uqWeÓôŒî”¯yÿì¨ Ó M‹Íoú×6ûF1Jšʊ­á7?ôóæ·üzn5¿ëàò ìJ5³‹„ÀcP/;õ¨7Ÿ¨Æ4x1ufƒyՕÆàÐOpÐ*1Š=L’ÏH61³Ó ² -›)¤aýa-:UШ› ¾"&kiÜ]›c‡3°i÷p”‹9 +5…¬×׺7?ѳ¢lØäžÍ)™ÈP)#v¿VrNŸ“^¹r³}ùr +cÑä×¼q›%¦ü58ygâÔµ{GⳐ…H£~-¨Ê%á•ͼ©ÞŸ~G“d‹¡ÏïP`¨\yt?] òD›]@…ù$L¬ºç|~6Õ¦6Çß ×€åÐö{ãñ¶¥ÆÄülDõ×ïH‚þ°â¨¬š”ê5{¦¼˜ÈTûRŒ?&Ë “rفêx97,\k¯t–R…¿r$âægX_ŽG&å,¥™nŠÌfbÅQäÜq úŽ8bl…¬ +ÌÆ$S·gŸÔë6LaÄ:ÿŽLaî®UV®Ÿ_rý‹WN,X3÷-]>&äÊÕÓá.L­]?Î+†î#jéŎ{hÚº{¡mòÖ4¾‘ÉÚ¢ÕÓßn5–®ŸÐE9_]4iø6®ŸUqgjéúdõ¶®ŸÀ¸{6®ž°ƒš¸ƒ–¸ƒØÈƒØÐƒ¥wöH0{TŒˆ0y–Ê2 ‹gä Áé-ôä9{yä29ÿ„|õ%óW(˜qw jg8Ì`HѝOŒuÌ&½:£|Šø|cB?kr© 3‹< 3ä®U$y+—Ú 3éڐçmÅ 3å®C9Ӗæ$qSC 3õDÕvvæD~e'é 3™›0añµÛ ¼Ô xuf¿óÛfØ20YëPɂFþ+ 2åÎi,ZÚb ϟ@ÿûP@¿z¬ _onÚbZ?–,u®á2ő¬ôä ¾ŠáL@Ë—³¥ eŠtï"@Ëz¸p{×Ö$ ±i&½1,K^å¯ÎYÓ± eéßX2ÛSž@Ëõx$ ºTú÷^/¼GÒ÷¼"_^¥Ì:ðÈ} +>› +ëV@ËV¨»: @Ë:«D—=l1,p!†@Ëõl§ÉvâËüä ¾ŠØ. +ØbX·nQ7Ķqw[c"\.VSŒ1=ËÕ²¤–Ùlã2ýÊBX©ëYHb§§ä eÊ7”MݾV2úÇÃÈ-ð®O3'¸éŸ8 ¼3灗||ûä »ç—¸µðÈ~I.äs&™‘/9kõÈ6×ü ¸‹]Q.…í‘,Tñ”–*xeR@˯Y?¬–µìÄ ¿OÙ eâ^Ê@ËlÓÔ2áÞød ·§³Èbõ¾Ò×Ä,äA…Æ÷´Hs© ›3Á;RþÎÆB?=ª ¾'´6$ þâÆÌ¿ÚØÐ oõö?\¾âRþ"ÇÁ oÞmMHöûUYoi@¿ÎzB@ßÜZH@×6ýž¦Ò‰~nÒBÿÏ´Ö7Ŏ°tÄr§9kK9t[ç¦$r$:»¦ÙèÄr$¦ãÎÍë„@ßð^œëé}\ãÕI>õOÊKGtÌ=#ÓEc÷EgšÐ_Ë.b`¿9|ÕÙ¶„ ú:ìÚ ÿÕQì7þ›Rþ£ÿÈþ/é oý{=YɳÓ7ôözbþ†ÏL@ßùvl¿5ûD ÿ‘¹ýâÿÖy« oêžiˆýËÍ1ç<Ó7ú‡Ÿl¿ÙPû¤ ü-÷7öü¢ÿö7àøD ÷—zbû{½1sfþ"þ‚ÍP@ßùVoá o‹KlêHïÖjbû½š˜¾šÍûä ÿÔv©¯ëàÊÒìEîÌ«úý3³*þ¿Èv>¿®U“¯Mì}_ìο¯ìο¯uvª o½;T7çŠÊó·fD ñdQz$ ÿ¬œòþि9ðOXž¨¿Ý'©yï1jº2Õ'e ùçÈ?H]ç†óçÓ³qºäl¤šO oí˜T7Ýv­ø_È@ߣqŸ½™ot•Ù7 +Šì3vë2~ ­}Ïܯ¯ò«íÿé_oeýXς¿õÊ?èjÞßñ×VÔìòæ@y¼é¯oŸW/=.ožO>¹oöaKß<üÅÂ5¾q®§£[ç9F·ÎÂf†eß8×QY×NÙ±Z=›œY±YM›Y±X\µß²"\½ ;³`Õ{6 H‹cP`Ó»)]S+7+9*Täéû4ädœ€³Ùéüõy†z‡=EÀ–úÔãë=¶¸uuÊ®Oü爫v¸hŸasK¼y­çO½¢ž··ªì›Î¢ËT¶__ՉëaÏË«õmÿõjè¶^ÿIì¢y8à.?åW.vÿ³’;~åqofkV¿AÆl½ús4Ç=EK+ÙeÕ¾u2>ulãoÓ¦?új¦˜ÿÚM j™;Ã‘j×¦"³j‰rª ¢¦¯ŽpÍfSy‰J›ŒEgt’Ýpêi Wô’žÄë*CRÒÅf— +”\ MiîbÇ+gÜIéY—/V^ÉYrzad2ûݾtéB~pkïâÉ}å„ʤr&%2³œÞž"¼¼a¼e`~ ŠÝH|ÄeˆÿÂÊàøeXÎ+³ÀýºŽÙ|”ÿÁ´Ê³ôµº§l¬Ì,|6…U—ööÌê¤Í߇lªi¶x«T©ð÷DhÓíL‰þá"øO/Í"´Æ†×ó N£Hl cÔ BÚ¾&ðڛh5ë_Xڛu‹Ü{]é3ÊnõZj͓¦M"-ÑàE›Þ³ÃT9¤+„E¬ë¤æn›\æq룁öwtp>ϘGìë •õ!t÷\^ŸJÙO¥KO¥m§Ò¦x¤}1Ù°œlÿ>í§žµ§Ÿ”ÓΉ§‰¹Ÿ›Tóçþ̔w9L¼º©u’ëIrcåñÒòrë¥òòüŒG%,äLÈüJCýFg¼ê²;Kփ?¥æ{Ëö¾ÃåùMꓸDsGÜþ¹ßæó³ílπµî®Ãÿ˜æ8î.ݺïi¿ÇöùÀç8ƒFx×.9¦× 3b·è*›¾L°#çÁû·Æ4i×Tæ î?€¦„c}ΖÝ[½F(Ëüuy¤%ڎ]²ITm0xª +¯ˆÜ‚©x ™uãgÃi¬u)VçC¨ÓdFö`7W —Ö6Fµìmü’Œ¨²ºcoÅ^”·Ëá*++V.-纎¿ËޕþÞëäÇHÍxQ§0ÜÌz.æÓ9uŠ4 ºd‰ºŽð¬•o]“o±%’åƒÉÊÃ%_3¤Ê“m¬ŠÛì™s÷&h¾yŸ ë†#§Úäp’…×B]ÕÙßdkäB=”†çl,ÉPrÒØrÒÀr£^"ÞPB‘YˆmÑyš…ø nÚÅ™òÇñ}‹·ùd·½I´´á §lùÇ­âˆ¶õÊiìRt!Ȏg=҉!$q'æöxGk yd•±5’·Ÿ(Ì;ÝáˆM‘ƒ$°ÄSÔr!ðLúëÂi.wH‘$—ÄŠ_òR.É¥,¥k$)i¤…ĬÑ74•eFH^H¿ÅÞ6a=]Fügpð¹Vo¸kF‹™[P«:Vc䊐®ŽAb›Öui˜±y8Z­º\ϗðÙá£F†l™ÿ°gR²¦_‚Ó1ÂR©N*xYr1 癋"P#í¡“Š¡¸—ãM‹ÐŠå=#ÙU–³3éE^<'.¦ÔE_ÑXdÎÇfÌLø"u °Å¥,˙5¾º#Û/G3¯†ƒ°'®Œn=•fÃ3eÀðñN:¨§%{â8o½uå:i'5Ù4á55âØÚ–Ù1x’,²-“¶¼jEÎì”I$°§¤j$’h«Åà„:B7Ûj CìGO¼I%idÝýRÙR?‹Ý8¬¥æ‘–¡qWŒñcc’¿H˜@È¿£¯‘„ÄI¼ô¨º^X™ ¼]„U}urʊÐR+»úBš½e’àA±?Xj×Q ïI‚®²M±Aú–ÆMÕ7yü¸Lãò‹¨éQ¶üüÓ\ÏÔ=›JŠ´eΉ7©Õ‚30\ßք¾­èœ´]Q0„ ÌìLæ­g.îõ’&Ææ!S‡çÒE–HÆòf}9ø•û{RL§ zôÝyp?æ•D‰GFÔXKWÜ6"ËÖ­U"ôKPgÌ~î óޛ=̉ûl¢KY˜tØ#Øçä#ØçôÌá~ÝüFdõ;Þ-ŠÇڑ¡Ž9B¯—À­L é/H$o®\¸&{eôGîÎ£&V)²?&{'ç¸IEåPþe?iü¬|5”Sip_Ȳv㞒(¥Y ¾#Iìê³òN›}›,ÏþkŽúí]Ðvׯ٫¹îÿÏìÑAz.ù#jÏ<6±Ÿ5¤oUá%¢xð’Óö‹Ê:ì:¿°ÛAvÆ®íg#b9õ‰îÒَ ¨ïÒ¡”<~¾ëþdøsÖ%ü¹ò·6fÑé’ñŠ)õ³ë>ê‰êR•¶}fóâ5Ì"Ú£yñáÌޝU/§@¢žœÒV Þab֕×p³‡m +Ø-Qb·ää$YÇwÚ¦ÒÝ &OýIÔ§’ä|’[=ñÁ³ONٝørîƒÂ Vóê&ì¾p<"¹pð‹ìb¾rÁá}æON&“5­™y«hØŒà‚Øê›ì@™Ô›Ïë‘Gôƒä›I¢J‚¹6gzáBßLÇZ• Ÿžóò’šË‚âRo”ÒEL ³ÍÅ´Öa¶AºuT“fÙȺQAÎÞ»O—Y$\•>؟^m^!^c8¸æ7T Øx N†_ +˜]SÎNÑ¡ÀÒ%.PÜØÏŠž¦Þlz8Çö˅µ{J† iß“ÇÇ_ðò2B©ÎEf‡ØÛbQ«2&¬ +l€Hõè‡ +´dõò¶-Òê:â³e¥ÁƒÈ{hÇ’!h^â³ !¥' Å7…7ځ¹ÉËòÄ)ĬÃON«Åß9h¬"—Ÿ-Ñý\BJôR]<º]#Ä?ý$ê,êy¬ÚTê©Ä“ª´m“ª»Ä³ª¾’iÕZOD™‰ =ÍfjFÒÅãŒ1Kã‰ÜŸè@o×^KŽl«ÏǤÈö¨Á·+„eŽå°p »WhnHG8xZ¤·°$kâkÀ|X#Ú #ÖÈÁòk@²üjÑcX—]¶Ù‡¶¯$‘urÑ+´6N¶©I¶°«rÑGÓã- £‘ïI ‘ïM¶È÷žgOà„&„O^x©ñsäêF_z¾Äõø—ƒ&·1RÐè$1Ý<òÃì_§ÒH}9±,¿‘1,?*œ%dþíú6—ÿÓt+Úδa]睴ÌO1üjº»Ýþ·®J»rÜZ» àcê™è|{£šÉÿ¾ìü>ÆoÀ29°!¯ë@|ðº¯uâæ¤hâ&ÎpZÉ»·£Øg¢ŠI¼WÉ|GNiy¿å‘x±Ã£=ÌüoK嵨¤Ô.,ÏD'˜3Ë&çŒòÉû5„¯,£XÏ⣣³þ˜¹Ü¤S’FÄqÖç!Çv³Ž™s+â£ÅôTy®\‹0zwg¡µÞ@r¦zxÝ¿QoL¯hgŠЙñ?xÀjxvì|g¹3ÙÌú'qkEäÆžð>e›Ž9ÌÌö,0?»€tLk¤ý ¿f ³Ý@o.ç(­Î64Ž@$'ÐþÄ»ԋ[^ö ;°ãÁþ„j›'kÎÎþ7ÿ~ÐW ïlÊCÀl¯GŒ-Þx8âàèRۀú`/–£Ž4â*y/¤ô@T=„Ñ€ŠlÒøÀ#aÔq :@ûàzðImLòظ®qðÙñßFØCšé×à°n>·}+&[­À8ûi‡Zt¸ ð˜Di ø·ƒv\°šfuò€}0-¼ã…˜%8;xÚi0°f ̸Îâ‡q!ÏÔç°£r´`âÌ|x9s¶·pM^À_Àyð`p\Æ °¿­€Ã€â߈Çü­À7p@¿þÁü”hºÑg0 ~=x ¸ø6^òèq×  Ò9Ý ++V€‹¨ac@sb7P…à=ÿ0ž_€—Ý€ù—€á¾òL6žœրÙyáü*Û÷à>0Ä»š w”ú -ÜØDp€^〽ª {™ô´²AœtH ,4³ƒ*OB„ôÀwÀ)ՋFŠBHÀz°„0qž¨óFÔÐóP⊙aÇxJ•êaŤòaìÀzÐÀ±í{`pV+þÜè÷`27 ånô9V\<´ˆ ëžۀ¸D„KTƒ“FÈˀÎëv`;À÷°‚à1à9° ¬tœÏfÃŇà*¯3`17Ðáì)hpv´Š rso8`0€1 90(Õ{^j€¼_Á0¸ v9À„€Ìë@T`ƒs€æ€tÀ*ùÐøSҀ‹¦äð±%à:ψ €®ç‚NÀ\>(pÖŽê@gÀ[°a²ÀdÀu`4@7ïŒ,ʀõ`=ˆ ¸ÐҀë|€Ðúþ|$œ¥èۀë|жô7€\Ïp `1¢ÙEQÊÔÐ_înÐhVMTÈÂD9Nɀˀ΋®€@[0ÁÊXõ~€‹©ùo 1 8˜» [kõƒÍî€lâÀ6€l­¢OˆkÀq`=ˆ°Ö„ÎbEÓC”¸ðä ˊ çˀÎúØ¢()ݰ¸n*ôw‰X…å@h€l¸ÀúëÍýބ?p B¯¥+@cc@Er"À£ƌ±``Î#¸¢ëÉôA˸”B‹Ç'`;ÀÿÈ.+ëb¼›H,.±á¹‡¿Þx7/Å#'™äMˆÍxó=‡d¯ µøßo^¬ÏCÃâáÿß­áÃ>.¯‡ù1¢ÿmOG¹´xVʎ±QHÿlz‡„%Õ¼hv›×àšaTùËð¤|าŽŒV­öüFUgàCK gýŽÛÃKq$Iû°Ç¡3ÔäLñø¿Ü†·C®ßÕ Y<}ôCV|¢ðÖ¿r`ˉ·1ÿ³ߐ‰cðÇr#ÇÊY<_”¼ÛáˆñëÒüšôm8çÅä9¸“|-•DQƒ·22ƒo"y2†÷Îù•¡n¸Ö+\Þ|âá ñù>y,÷3É”ž§¾yDc]·óðkoÅ,pdóOüKôË +0ÏïËï‹GäHs7vÿÙmSbäy ¬s&_«[tzŒêý+]^£È-Yô©ãÌñ5ü9ž1¿gÙjã>öå?¼u>ώ£xŸÝȝL¨¿U/ƒºj: Ï÷8j|S =âÀ±èÏg+%øé‹'Tˆù¿¡û²xñItð¡ÍYì¯UÙâÓøÖ-ç?›ù2!ôRIúšvU8–ôôH¨×(lû gŒžUí•Å<šÔîðܧáÔ§áÕ'áçð¡ã€%ñÛ À<`ۅ{âñwÑð—Ó¯ØË”ë…Fj®‘}ؼ¡îøeEњ~õ/wUx쪝Á d¨2y¼µ„ëTúÎeõË?èTxdœ­1*äïÝQþ™æÞŒ;;Ø}ñÁñ+þʶ?%Ѻ2sDõFüü‰wO@ï$Ûd§îGgÜÅæÏºJÜ eYáôge`\'•Iþ•±-êÿR[n·—~Y¿‹ Ypušú_wû¸]îß§òõŒöN_.fº×ÏLõajx!“üyx/יї ålˆÑÔÛI’L¹ÑVÚÿ—Ýb’TMå^·ÙëqeL½Û É]¹uã¼Å Ôs9Ù"|Ï"Ó¶>©à>Cï}ñ×ù°¤¿d=x£û-MŸ˜ÕӞ ö"Ól":ø²,\=·êͶØóm—Žê yLn#mÈämùÇ#‘¹är:žG#uÈäu\ŽGQUäP2¸ +ón¯õ¤ÛfM¸öd۟fMÔû2m׳&꽙7C¿ÿèïÿVŸeûµÛ_ÄìÄrç×ðô'¿åžùڄ|ùõ¿XYÞGn/.-êò쀍ªu~n€¼Àïl:cÙæë˜v±Žµ Ä÷Ã>Ûù+ÞŠ¯§ æãƒÀݘÅ9œ 3¶ü+>´^p×0^|¢@Jæ½½CzӁ‹ÓÔÃÝëJ¤B¶Ç+gH¹4a6ם“ÂjO­¼®wŸ_«Šn¼Ú®¹ Kžz¢‡˜–ÍHv<Üu•¾üvKݟ¡uzC˗Xv ÿòN2®¢±”§'ƒ)°Nï§bê +jÄñë`šûg‹ÎvЛA>ó$R»·ÛˆßWÐ õKóÉçÛáócá·¨=¡ÛÆÞΨãd[ûãÀ•½«›A1Ÿ×¶2#Waª>4<Ȏ§~|f@ó/Y=*³Ì"Wô»AP{ÔvŠ®³qEÑ,¸££®Š@~‘(ìԼƎèï2ÏÝ‹ÌºÌ +wh¿ÿ‰!uòn„jʼ›c²é\Ç&&yš¿7SË·?3»}ž]òw7Ûp¶Á·‹Ùù|ÎÏ#™·òù›x9›/™¸ƒ™¹òù›˜^šÇžp¹ç+¨'õ@¹4¥”·¡)”†Ñ¤$2GX1ê¼êmR‰ O7 qr`žæ‹Î PóX¥×SõW6P·½z†c ©æBªf\k/>B^h7Œ]pγ !,ûSÖùg&ü;1çEúã³Ü»å)=P¡¶h9Ëv;dóT³Wõ6O2“.ÝÄîT÷k¸bQZÐu¦È׿@=íÒ¥ÈjÒBßcÁíwf=ߜ)|åçëÇ ™ÃÐûÁâLÌÁœ—¡÷ÙrÐõlÐ~Â~ùâü17ÖýPµÂ<æ*y•h¼¬± óꎹ¸> 7Gﯜ>Ÿôb^ñُv§œI›(ûsð¶çÆeã³ÖðãBôç°Ûzւǝ]«ãAVî’`¢§ï8ù9Éã/Ÿu‚™˜R&ÇW^ß Ùó«QÊ9C×ìԕ­£R¹T|â~®žä¦žy5•ºøíçê*pq<ßÕ¶_qüö_qûV_©>ð¾y5ž½˜²Ìî8vg²;3ñ͇ýÈêêý=¼_2Ëlæn\Œ3 wvBÞÛt{Ö;¼?ÐÒRðÕ¸ý„Ïå±fh‘“µè¤-¦ûS†í·>árÆíHÌsì_0¢{AzFÊÍî*‘ø»i:(â Òºc[l¡+ïEäÎÇ©%M[´:ýœ¸«R?GOk;.n:E\ªƒ·§=,©Žr#!²ÖôĖjçـޝ˜Þ*nŽxpN."=š?ž!fÛïG­ -]äýsÖ wŸ +Ã.‘#ê;qG甛‘f¾íø½wN|ïËåÀ¨%G\?—†ãTzTJž’O=¹£\1ª‰‹Ev…tîîôXaRÝÁ6‹±5SZ8÷„—¦ÁË +ʋÁŸ’J©;H'ݪ•»ÈäÔâè-è%Ùo¥ifÂÜÃõ þÜ/ö­áÛÖðîáݎÕ|j¯=Ä\ÿ0_‹R¦i‘ÃÐùŠoõ•¼{8ŠÝˆÀú)1I”rN·=)X›!dÖÇ¡À“öÑhÀ eÞî=êšàQ±ÏEÍ»ó*ÓBúސ¯f«âŸº7%Ï\Txªzn[;Ó¢} hz\ùUVìÖ½(®Í˜î%¼Þ)Fxá¾V3~²i5eÊî]ã€ëÃK6îëÙÊâì¸}·ˆ×v¼Â‚>,¾Ž6ĺF‹q~âÔ4_F?di¯8rFo¤˜F3ÎoF\e½:ØñV×BßÍŽ$nÚõB ·ÏèÈ.ˆâ{;!éùîåq`zš«}w Ÿ½X„=õ½<×2iš· ~Ãg%Ò«Õlt‡Û÷²5«q®ë ÆoêËîOE8Jñåv€iפûÇüÊKˆ •ÌlÓѧJîK5{¿TŽ…C_Ax^Är“Tï BÍ« µQö€ FYöN@cœµæ`tc4ÎEJϟ#ÆHTÒz·kÑþâ®ó–ôæØkî°c²È;6-÷•6æYÊ;E5˜âÁ@ëߋº"èöØ«¯äÑ÷ 2Ïcd’}î*`kÒ­èªý0€×Ý%ê7³±ú±h֚¸«H ‘#‹³ÜÊ&2"ÑUˆ ÿ՚U°/oå=V]äåwòg*ßc6UËžWI%À±›×ùü}ØØ/‰âÌ1¾´z +»mèTzYK61ºëݲ OÉÐ%¤´kÌJ·£»½¹ðϒ¼ž÷ zA\å÷»A9~Ð?twƒ’ý@:ôßê®%ÄÑÿn¥ª‘ýÊ:]O—Dø•:Ÿu/ö:+ö)ù°è…Ôl,Ð`ŠÏ(&Ǘo—åÜeùw9~^§/˺ËòõCå»Z‹zeŒ/H¿f#±ª½1Ž-2, Œ( ¶è£˜=?½W}̔½6E[˜ò¸^€ú÷Ùĸ'M‰G+‡†SVj5ÍjïãøMSP¼µm©—* …|d¡é•”Iø£Õ> —,ÐIÁû·³?·Æút.-ښñ1æµeÀáŒglõ©ù4ÜÌ>™Ö༐ *ѳ°9_êlDW¿ßӓשçA¡F»×6Ù[f¤ ^Úkª.«Í¸wxî“SQ¢õšìÔ ë y4ç§9oOôØ)QᰒÁ­ÂIëü?jÂñDÚõI6bÖ#]¢-MG*ª2uu…àÝE^~귟hp`{Á@­ï `´ j4󙛃{´ÓzÞª8ق=÷x“ÿ÷¸2©y÷ËæoG™‘R؄5äËf¾lMïëMpd¶qzUÙi„ûڇûrpÚüø‹=Ó&]0㝨e›Å˜UǶe·\¾SŠ»¯r!f¬.‡ˆMû^ÈnÜs_¢Ðïn9%â@h·5$¥í"YAãI¢”/ù=NÕÌf¤C›;7'©%©ë +¬{z+±Ó޲ƒ”1²ç‚;5¸ëN΅5¼áˆšÓhÛ.¤‘ÝٟÂï0µí \] çVÝÓt²Êó—G.?[Eî*jÃÌ?‘V¹ßÔ¥´RX36¢f}A¹óS…L(@¶úˆÇ[;ýт-÷Ö¢¸‚4÷çÁ­>)E DËó9„àœgÛg8¯ž_Ø Ñ윺u˜(\ÎÎK½)ú«êOß \Q…®˜^Ñ4.UŒîÃcֈïÎÎC Á1¿ß2}(å¼nNEGvoˆ¬òóh + +J@ìªz¶,¡@é–;=ÓüHerB˜—íÞá©ËȪsEþª¬¸ûD’A¨¨Í^ÎܤEˆI¸hê´ÐÐóá‘Ømèw_8ù¥¡ì•úÁ'ŸÀ¯e9ÙÕMÑøøؘõ‰è Dt°ÎúT££ÍÐþ˜r“¤/Z9fQùÝeÅËÅÔJ»!mȨW®š¢nàK.ðqðŸÏÜcbAEÒàœ‰U¨D{ꘑޟC +ˆPaî/¼Û Õ“=àÀáT&ã³?Øåa™ÝEðG·Ôoýšž·[¡…@ælgóbG¯¨EáÂõ]ˆ Gú÷âk*Ðs þZèãñì#--µçŽ[/îÜäŸ7'ØVR¿R¿é~=Òü}Rü}Rü~m~?6¿œ_ޤRJ‘£ÒõÆ ‰šÕiú÷º âÌÏ_ždHûöãßjµ=¾—°Ý«wN/­ZoÁÆô"õ\ݤ[Ûùê\öØyB@®O`‹rN ñ×ç5$ˆ¬{ˆÌq»yµ Ѐý ±¾ªÕ¾["ç@öìv½ÅÞ¾ùXé®í{V낾5±zπ˜$ºÓÝÀj÷äw&ÐÎÄTz¿^ƒ‘‘ª¿O•/c?oÞé—Vº«<ý™ìM|jjR><ŽÄV¿«b(–JOcۋ\Œg`="PÜd^e/ÁƨÇ~Õ?=±þ}ZÙéC‚ŽM_=Ê~v·@i2ÄÁË86½ÊüžÄÂڛckا܊Œ’2öR7>ôš$I†Çµ™«Ïi™\2N¹obW…í†(gsÍ©Íë½°]엶V©Ÿ ­gÔíñÍel1ڝ·@=é½ñÿÁ›Ãà])âê?´8:)JWµ!c¬’àà%bêžmDÓš²à9óŽ”d½2uá¡W¶ùXËgõé¸ÓN:j³›âÐQ½@ÿöÃÿۏÿp?ýÈÿú‘ÿî‡ÿÕ [ٝ¸ˆùV‡³>ë÷&–P÷$¤{#¢?:„££GŽ}­ëºþÄþÝpºÁýO»‡QîÈ>”û±ó§ô4·Oû4óÌ ·{°ûŸÖ¡8'BGØ¡({¸Ž(½í­I_•Fàœ euDӀs![ꘐםZVËq#+Ú÷Ÿ\pX'ìPœÞˆx´FóסùýçÑ4›×K +çR\®w͟p!W›3à'ÏΖõɧhGÅçL¶9齉³÷ž‘½ÌYsý?ºCÿ_̲ç7Ð轀¾$ß{ ïÅóëfn…~ _>¾ÑO!{ ðEüÁú.MçŒ×ò~E*½3|sEeÖgÃôõÁäϟ‡ÿú=ûàh/ý¯úøz*ƒè}²=¹ +›Þþ9½‹¢÷~Øìô]7ÝK/‚©}hDߒm~yžØ/÷oàߝɹ“ý¬ +ñ6rot`ý8Gá„{à%÷áÐ(G "gtٛóÎϴх§„zÀæ}Ɛ<ó{OQòZP´pÃ÷Á5*Æ@G #Ú +ÊßÚsAτzqYUöä#¾ò_€xFä#ӄzà‰½‡{÷!ðG’´<#ro±4‚;@ŽG¬ö¦i´Ù–YaG˜Ó†v¡¬"o[v~ô#âZ¼ñ¿Y~òÁЏ€úA#ÿë`ê#ãŠÊ®8G¡7à?KszŠ çüP~oO¿ÁVà&0ŽÄ#ï î‚ÀÈã\‡aaÌ#Ü~˜Gï5!p÷AØXG®ö!Ô#ÞMìnÏåjž{ò‚=èGæ„4#óÂ>GÅùG6œ |#ØHyïŒç祄~7<>ï9ðµÿÂ3ÅVBgöaÜ#òÂ:/te„ "oÇ ÿ<#â|p5vV ïB>@G•Õ‡Aá¬#ðufôæÐMÞÚÏ|ÒޅӄLÖôÿkâ½ÊCËä,šúíiÞß÷Â÷AGDf yÞ¶0bQڊÉìË'~l#½÷<œÿˆMÂ?(#݊Éï½üÀ‰žÏ߄wÁ#ô>Gé|@oÑ<÷Œìµá+ìàÂ<¦Åç­ ïuXVP}XG³üpÍþpDÏ0VåÂ6æwCˆGrëB=°G¾ð<Õøu¦Û~HGEøaMÂ=xG¿ð:,î,"g…EîÅeGD#ÀZÊ~XG¯þI˜ÉÚä¶¡Ò^ÔÎFñ ?éãÂ;Џ/øPÂ=—» +®ñ<¿JxGàwáWÞ<÷H܄~`G}ï²›2Ê?}ӆŠXGâys{áAþ8G²øaXË$°‰½ñ9øqY'™ßø›à„ñ…d·¢òÁ¿i „yñY/îÂ&zM9½ˆÚð><°·9DÂ=hG¶üà¦Ø90r3ý¾Ü-L# #Є}ØGpÆõAÜ#Cpî ëMx+\ÐâÂ= Gñ‚3…dçï‚= Gâ„|`Ž6ä90µêª0‰žGuíÍ￀#ïB=°G謯8‚8G°÷A #˛߀°G߄y9á7„|`Ž(ØG±÷â²Kׄ|Š@*ØFXG°öaì#óB= á̈́zÀŽùó{H ßõ¼#ïÂ=Gá~ G¸ü€v‘H:üpv÷Fd;èGòÂ=ðFçt „{ xØîÂóÂ>ìÎÍíCéh„{ ~´Þ¼)ët>6ŒÙúýŒÔYtߊp¦ôÅdŸÄóX²mû>]ŠO™äþúË^7 e³$Hrxë-úgÔ %´* he¬¸ì؝•–ûwª¢¾ jiyÙ“·JpÞìi  6¤M¶G¬t„Q076HjF¨Äýñ“†ö8¹Cجa+ B6beXNwÉïÆrGR%ïýЀw_‚#ÈIf+> óœ~gÐYÐZO.ŠkÙ’ÌJD-õى4iŽQÈ d‰—y {–žTÄ4Å9÷0NÍh¤Ð ¸œÕøÉöþ{_‹ØŸˆr":y¹,Óh-fžîUK5ùžrÍN%š‹-þ2ÉRÕfp¢ÚåÀùU,×ÑÖkáKÈÐÂÍtˆÜ_ǰ]"Ab”¦Dk¨êƁÑɸi¦zCٚ.ž:B+¢_R U"×PLF¿ZÍ\Ê&iÆê¨òUJÙþ€ÿ •´>-bÍѥ䲛þ +^Ɗ‰ÿ%1½Yb¿«ÑJ;Į¶ÃQT³GÚ —¬([x±'#2V©?Hè¥ú¥Šh?½œ™ü©«Û‘º[QÆ­ñ‡Qóˉáiˆ“½7ñtjT¯Ñ¶•,Ót-§>ÚdŠINjlªY¨ïê¬ÓÿúÛØIsOÉa)|d¾'3ƒ»XÏÑNm°©}ўê4ϖg²Äe{yØü*#M+3ô|=L’atêW*ä«Î(s¸¸òNm%5¾V…:êv¹ƒÖlÁ]ÖµfË-=!ÊN±rñP@gԊB†ZÌfÙ®%ñ7ۜ)»¤sjüµ”€Ó>ÀÜ«YV·VÞ®2yÜÙ´‰™ó&2ëþ‚ûѱËÃRZ³z¢Î\/›#Æ«Ú=už9%¼Ðu‡àŽlœÍÐÿбR±¿Mgíº|eœ]?1gLÿN„¡$I§ËªÇ3„³£œ( zKYÌÍ^9«9÷c®´iŠÌ^aÇg´ååêe$qý…œÉZž”æ’nØK0øÀ«Ö,çéÁ^&JÎFXþh۞- ÃZÏ>t³þÊΕÛJͼވ§®åŸ8|3гÄOƒåºC¾åEcêÏ5Ó{·Då,ês(ÞbÏ}— +¥Ÿ-,µŸ*ˆÀeÀ³Å™’³éfä¶+ºaçж”BQ¾¥ #©¦uŽi}ί¥^(æìâûû+$·ñî ¯ï5h3]hVί_X¾zÐ}t|÷é­ïàJc’ÏöyÆ´Ìýý‹›Ê¿Ü¥¢üôÿkF< F’ »єª ¯¶Eoď¦¼Sü4GS­ +µ4®¾œiÉfbIš¸Õ–ŠqÄ3M$žòïS—|hýÉïÇH毴ϡ&0ƒ6‡=äÒÿÝh¯±N€‡/‡ xýÑJåFŒ|uŸìÄ¡iÐސå wû“>zїeSl[IóõÖÅØ|±} ‹6§Þˆˆ?úZG¶ômqÅè-%ôú I}¤¾‚Ò_C¿ÿêZKÓÉñt'ÿ·?óµ4&ñV”êSá +5¾,±ÖÕ¥­íZVމƒŒå‘µÙZ[Ϭ´·âi™w6Œ0圠±u-«²ê¤]h@§W„Œ]Š{ÚuV—$¥%šŸ¢Q´%9TúXÚ~Q ™} %d2dW4¨4¿¡e8ǛX´€6æQÆ: |ÛHÒ~0ž°@+é þôªI¡×îJ4Ó%§ÏÂ}U§ì]yĂ9``Ùuy2êæ¨Ïì]O×ZŠÅÕkV£ê ®$úÔ¿“>ÒÕ%ݜ´€`¹WÅÐZ”ÿZÔ§+¥Ö-å,¤ÆÂÔޘ¡Г Ýå­?T8¯ê­Qeœž¶H’ÆJylÔ7ÁM ßÿzÕ%¹ÇÈÇZ˜(2G ¬ú…væ­UIEK”µS‡@|Žû1(?ørAUûÿ’Õ•…(»#ÙÚ.ß4‹B[¥åh}v(4²Œ©jë6¦•–« õ"qâ …ÌZ¿±kZ¤Ïë­`öiëm°©h®^y>óµ£wì-]l²jê[m’’$¯¾^ZÖ¶ˆ‹cÆ8ƒÕuÃ]hß=ïϬµ™`²{ Yw›®µ™ÿ E¸õ-ËZø­­nm¤ç-køÖÖ8„¦«›Dç²骓¨Õkç­oï³—VÕw×õyXרìZâ¢Gb× PDïh:ƒaúfÍÅjI á­k£,ûI2If9iJ£j:”sð­wØRæ[ˆãŽ6ªS/¹k»gtiˆœæ­çI*ےèæ>JוDƒ²Eö$ïÀ’³f¹µ-tì-sU&¹kŽøõÓ1oÁ%­ê–µìëµôÉó×»u•õÄùÿQkŸ%?Qiý…®‹†Ê:¼Ì}ß6™+\ö]ŽäFHÓH¶Úº×=[¨Þ€±šnæ]½†X’ÿâ׌ +Œ–·ê$÷ÊZ÷¢ÚðÏÛþ ¿ þ’ù²¡·«Ø¾§âÌ´p~g]$[˜µùn 䵩ΰ<õ®ÒýU®»3 EiÙA«FGY£ÝÕ"gr×§‰PâZøÏ¨qïbk%¯Ÿ›4©k÷?Ak÷ý‹_¼£‹SbêIþ7Ä=º€v·—Å_.llm›ôÃ{ëVIñãF(ŽþYÕꖉ(#­èW§%ÚàØ¶A§KB¤£M1$]’¼§J‡Èì4Ä1ÌÑ_^Â÷é&ÐD5ÓKíÀ®=J§´>69çÊ%õ(>!÷šâ ™; Ðٜ­äµìÝõ’Ë›¥Y $ãmǪà|*ÒO„6wŠžÆpÄ»Ñë$Ûìa´–ô‚òé¯ñ­¢á-·~ Éx™ýf2*[yÔ*ØÉª|*%¢pàs8s:¨{Ø$N eôÄíÐõlWQx{; Î?ÃöÞ³ÿž¨y]Uë…÷ïþzÜ.¼Î®×øÓŽ‚ÜÏZܑ¨J¶Ôå[^VUú tº@'[3ŽkOÿ«t8¶¼ªÇh'µ-ÒöÕ<ûqÍÍ8çˆk̝:SÍwJ•+kªsUÛ]Ý]][R¶ÃjWwXu§XuÇWW^u‡WXJ–aµÖ›RÓl¶Ën6Ûm:·øµµÕê}¬’I$vÛ[ï—¯â݌»õ²ê)’»­Åa¦ìÍä–È@.ø˜¬5]ÛúH&ÃXÚ' Ã'€Ø ]³~n«7T×_nÎ&ƒÖÂ2ÂÃÔÿÌñzýµõVí$ý–Ž¥Fƒî*6‰ßÆåªWxÙ%7u¯ÎÒgÿ§‹Cîž,Tx™h‰/Ê[QøØôöϰÉõjX[×b¿û<ÇÄpØVÄjº«Ë]LL‹ï[ß#{x®Èìý|“ÿ}Úã™%êÑAÚœWíž=Û<âãêø|ƒÌ¿¸™ýÇöE‰3øŸßñ%bžŽbžŽbžŽbžŽbžŽbžŽbžŽbžŽbžŽbžŽbžŽbžŽ”ôr|åÞñG;°= bËI¾}5žMÕôSŒ=I„¬¶¤ ðLßk²,µÔ »;Úbzé ¢=}¡="ŸMe§¸€“ÏïÝ Ò±©åüÎÈúȞƒÏí,ïj‰ôؖzVgpÉ閔 î#Ƭ é[Äö•æzY Ý>WCz2Ë•åOŸ·çí ûKÏøV€¥¼žá€žˆ‘Éé´ôoº}wӟJWu€w x O_Ëòo`pö”ïk®@ @K'ªí+4÷x&z">ƒšÏKÑ'°«Ì±å»mÀíHóîŒô{bà õåËFF÷ Ÿõ@ùv`|ð>—¼cËwšÖ°1Àdžª­O0&ñàtÀu wÅjÖ¹ïC;®÷¬y0KXô#Àdöksg{ƒ|`6¶Of9P=ð¿¾OQï rtÑ©ê-îÕïÖ[«¦;ÜûÍÖnë̈́øøÜ5lð9:kb}/ŸÚ¾w¸…íý<{QùÀv¬ïo–Úp3Àq@OVß½Ø,ì ‰“Ù­¼ à í,x ™Î' `»xp' 3àý¼ö© w¹ftv喦PøøÈ¥n>=kVXú Ò½rè„s[ˆÖÒG +ëˆkÝà3½Ï76Ot: =ào:ž$¦[ð@ÚO’\þyޝCÖ>p>ñ r@tÀ{à:†Ox§‘/zð; >k'½SÚmýPð ãáˆ{=ÂDìž;QÛÀŸlÎu@{°:»ƒ!«[upc‚Œká›]Ӂ¬xñßc L œ{[¦Öð€Ú™=ößÞêÝ(h΄:p O›B'¿àN°Ü íYá外8BìÀéïu‰÷=n{ZcÜà³ÜR{í»¼=¬Wžã4'LŸpO•p™ÛŠ|°ñТ‡‰‹¸±ÙzÚِ'Í·>´è ó4"úx,*B|­í¬'Å6›’y9¿s>m¢€à€Òª¹'{Ív l¨YnŒLtùb?š܁ԁß3½æ.€å¤“ÉÐ3Ä]“×ئï-Ñî@Ÿl„0;ð'½}YP'ˆï}¨¨æ‡G‚^êÍ“ä —¢ ŒFÈ8È'Dž×2Ïrè2={ð;; 3¿8¸°:0;<6O‘=0®ì}-oÑÕ>ÞÅÏ·´8Α-älq#¾@ ö÷'z.t H|ÚsuûÉÀëÀù}"{‹¹‘'͐4i@èüà;p> yè(ì xÀsàt`tÀ~qè*ì ðtÃÃg{þmàn`eˁ ŠšWxcŠšë;Ò¾Ø[¥ ^”òv< Àé™ßݘH –ò >< ôjòÇ:ÖÙ^O¾\ð±Úåº`ÕÀˁǁÐtÇÅC RÀîÀÛ:p·ž–V{ñï°wÒÞ4 À öQ=ЏäỐøàtt`{=ðHß]Ÿ-Ô‡}êö“æµX 0ìÁ½1ÅW67Á÷%z>¤Â\ ”OƒP è¨ɪÝ?R³$"µ–€½ÅÇë»÷OEðè^eç6•;ÕðŸ»÷ÆKÈ=CŸáд³·óüǜX ú¹ 4þõv8!Ïßgç6ØLlÂXµêS`/|ÅH<:¸æó²ñøÄ¢gð*øîiö.Sñô°•Í6ùŒâû6ÿ"gě¼K§ç“–ÆrùLüçËɧîX}bû€Þ¯&ÂãËç·t§Grìôo™^\I>å^ZgwÔý\µE/«ë²=K½YÕýãÅLîÙ·s榙K-ÝÅ&1Öu*þ-cÅÑ`‹‚†s5ÌÏ©ÆzìÊg§ëj°¶çúIæ´|Óí?YägÚÑú3õ“)ѧïÒä“õúݒ~éúì0¼,1XP´M“= å™môÏõ”ÕÕïØîûº[û’æµ­ Ë ”¡ìÙuùJ³ÚŠ[#Ëã»Ä¾¯°´MhgÒ·?§N~i;±”}Ï²IØÄ£öïmXîÙݹâXìcËì•ju£®ÌöÙRõö‡ÀêxûÌ/{ÖF0@îA…'˜å^Nã%î]žõy1í!Mwì¯í;ÿ*ÿ‹ž°_Ú:´ôpށ?•„Üßæ˜‰ºªø¦/ªœý_Sñ’~ùùM·÷…õÚT½É¥£“ %DÃÈ?4`eqQJZHŸ“…èÜÑ`³8 =7Ȧ‘ÇÏg”µâ3Òxæ”_ ûí­ ,¼%¬¡JºÖ®×›ùniŸòùäëéh~.*õ‘i\%­bâÞ.ôBLېÿã±\ÿV—Á,Å2û§ZûW1–$„qÌ_&,´½ºP÷_ÜCÀ^üëbå.Ú­ilw‡Io˜:–Ô²ù<«Í³‚…–K¦¦ >n Q‰mQ{ɞSÒÂw%ÏrÎ7“=“$þ³2ýê ùŽª”}½:aôqWî°·ô›Þà/ÎÑ’ðµg5ò)£]?¥~óôiù*¾y¹ï~ç͚. ÓÁˆj´};3’ÙתÃÙM‰r»:òXÃrºªõûÅ{ü·M4uþɹŒÑð©MQyöÇó,FwÙ7'‰Ùr1³~^G͚K_iŸÎ‰™ÔÏÓ=JZ‰‘.ÎĺíE¼Èï;¨ ”yЦ:ªRR¬ŸëZ²“„l+}çoŽÚUÒµ¦KÙ»ŒŽ¦›ÁwÌÏ©K¬™©ëUx ˜8á*iñæ¥Á|GÞ/eÝ»Kôÿÿx U*ûOÂh}ÇAù¦[©sû»Š|ºû™’ú÷w¹Ã2á´_;I`‹ÃLrùE"Ê'›†˜³K×#U²ŸnhõiU»¿_Ö/Î/Ö/Ö/Ö/?ñw~¾*÷ìîý|ç³Ù†*\¨Öj6õ ¬7]»ö&¨É³M™?{/v͵÷ÿ¹«×§cÍ­q«Öüüß3:Ù }5¨÷«“W,þCžSzºM[¬V'À¦¾¾Ï9—Î<˜Ü?šu>Qõ©D¦©ÛjzlìUh:ªé𓩳¡J±ÚëÅÝݟ`ч`è¦Ç½0uÿÁ ]5*c]Î;Õøæ€vÑV¤±”ʺ•¶aßï/7‘}®+Þòþyú§Zf h®ÖUó¼•ÜÓ÷*ù_ÒW1€¾ÙÆÙÜk¨Ç‘®µ”ÏÍq’…Rªeólí_=´ Ï ­JÚdԟNX&¥Eh8è8š~1Z練ŠÎ𕛛 +ÍÒµY„Vw€¾Ö¯1œkKKŒ5†z†+§Sg^‚Ø˜’™wMetÅôÅ7ëàðØóAm¥џMÿºw7—‹†½ÀómÌa«à/ñeò³m)6‡ iª*ō{žbt¸ï0çìa}ã¤êa•[`/Ü=ÒO5Z,ÌãAHk ó©¶CR¾Pÿj—äáN®¢”ýKOßf÷Žáýˆ"´T¹i]v!R–òOíÏ«öJ’ð¶Mݨ¾”ú±X­ZšvÉ¿/#fǵHGz¹*"ªÜM´\=\2ì'o+ +W¬ãܙ“‡èö¥l’úÄaúá“çË2ÂVL‚qÓ|ÆV=8›ûTÓÁl§ƒ †ÄUJdÆEHõžs3ªd?ÈS•€¿•WúŒJ{ ¦þb–b^—0Q·u’d¦ôo¬ùHˆø ò¯;Š“kó¶Vo@ð¹oÅs7¸UÕxŽ ª¹Õ×%þƒës8Ÿ‹’æ÷¶mLMáÀöÁڈʵV n­îçI=5ú² ÕalØöð˜­Hn™ +ÊÌЧ_«»çŒ‹gO\‘:ûó†äy(üîF\ã)ö¸t³ÓÔÊW\PM€¿-?–æ'geÝR5Bu¤éª®©}íÏÚúŸŒ¥O1$ù¼…Ï)wŒ2¸¥ìSY.‚“y3ðþ¡–Ə¦t¶u©’êpû- J™¼k¢ù±ó\ Ž^n£ïÎ/îm Ô]•ö#«JEúøâÃSF¿Ü'”¥¡ŠHj'ŒªQQ«^i®ëÂÊFº4Jáã>Úgy9có8ãõ\Ο¹¹…†…ŒÝU¥*~)˜oøÉÑ-cÄ°n$2°®†Ú³±N¬³–±¶©¶õkKcÏ_å£]tð´-@TâlyìÜóZà°±¢æ±{WSÿ`âøÚûœ_û_[cøüa¤nœ*®Ký½Æ{ÔÌq˜þšm|n.s9ÄØ·«F¬Zý­YšíÀQSµP¦BõXαRµ”íîZÐá¥gR56P)RRÃutOrv 6ÐâŸ/Éb6LÛ¹…žuòÕ°²}ñ4­#w4ö'Ñ­éZm±±4©F¶ÒÚúñ‰ pé(Ž46Kî nqtûˆÞ̦²o°‰ÿÑ)ÿï¹<”¯d`ãh) Zù‰ÞyÿG<™êy×É%ý÷—¹ÖÏÛî¾ Óüj]×÷  +†9©.™—Z#ÖÿY$ÍM¶ºž½$Ǩõ’)­2Ӝ¤:«õX´«Vªs™mÕr'òPRw&o0m±Ô<‹Åtv’A¿& +)­“O—”ÃÔRù˜),¯]U™¥½³pßÇQӁŸï°^/dm»ë”WâQÔ¤Ïgxê_QþE'Ô¥Ùç8Ê9#„òT|Ìæ-ٽφŸQ~ +úJ.4æqõ5zå-à +àSZrzå?¨ÿ+.W`§µilÖՔ-‰¥öìOûë¦Õ©ˆŸù½wëa…m2ގM².){{M‘Œc܁{\>ª0öôÖ²ØóÑ­Ðû$\sÃ/PÄF6H·n™"ݞ¦ºÏO §ÕйíÖóÐWT^rÏ Âd@Ï3Ã/šfHµ}ØH€Ë<3 ¶‘<Ò´ê̟Ekz°5–d‘dÏ]°ç¿€M¨ö¥–¼ÚÖ[uï–[~25e£@  åÒ©åÓ¹ô­Êyuï»|Çj݀Ï|Éî° ãøZ݀ËóIïßB}.asUûó¿b¶,µ¤ ̐É͎å«ËÛXóeNÁŽ< 꿎íÎ'ËI½óœOZ ùpö +è²Ç¨Ø¾Õžl¸ø"U°6›rË[Y"EŸ>ñ̑ö@O %Ý:ߝO ´o€\ž<µ3Ã-[o<ݞj’!ýŠÞ²×P4 O.aõÀO.~ä~`àtß ŽK!¬|€¢ç€íÎà +óë-•xþ6yz uBòöÿ\‚G  ð/€÷À|&H„~oB¬ +žµjžÂsÀu@w@wç‡?Ÿª’!Yîf¬ú =•gp q j™ÜݐµÒ=ÎS`€žaŸ>¥‘Ym8P’Yó@c|èH|Êä2CÇ´‰–­§÷ÀO" +r _²CÃòÏ ¿ds, -ê~ÜÖZÕtYcȬ MÔ+`rÀjÀéë€ì€Ûz%–ø@cÉ ’ä ì €8 9 6Ñ55èܼU:øÕéáÚɅ’žh òp+§®}¿È^å1û.½PîÉ_d~҄¸ü-yYkx5uw”ðËæ€|ɒœ™ìŒÔ ÖwgÌgpe%3ÀõRŒwÉÖ¶H÷Ǧ\ωgp}FHPgŒ¤=¨›;€“çޏHeýÀï@ï€ú€x7¦(•,|QƳõ)Ü[Xk©=]}ˆßø¢gÐEð@\˜¸ÞøÇ¸´µ¾08 8 /€Ÿwò>˜îÿ¶ÔÎàLº¾ž³v¸'p$|ÓÃ2›ðsp:°>@y* ʲ;Y¬»pp!¶L ð€ïÀËÀÓK,µ앒QÀaŒ˜‰r Ö¼rǛ€5¹©‡Q2Ǜ5¯è`tàu@z£ä‡¨«°4ÓAçæ“í>ÞˆH¼Àaāú w o½Pqp.€½–TBJNTƹ(ùÁ°/HΆ^P_:yÆž ÀÑ3¸:°6Yá p2oÝÆ¨©ž–â@Ÿ%…ly5ûcŸSx€:ŒXh|Œ¤ì wVŒÇ­g†k6sì§lûJ7>jrÏc«ç°Fð:°;ãÚv{¡«>,Õ@ë€ÊaDÀÈгځׁµ;°5m”)Ü \P::°'Þýß àp°=¨@Ú ÐÀ÷‡ß(ï×\`ø¬Mځ܁ô€ðÀâ°ÁêÀï@ðÀÓQ…Ü ŠG¼<ø,'ºËøàmhƒXð垔ڄú´OD‹ø–pt;gr4/•?ÿú¸ôhšCDVÖþ³ÙÛn1þ¿º•¸_úðÉNÿ=IÔh‡÷ÉFÝxhíѹcú›±?koÝÓt 4Š4^ÕЬÚ3 ýv’Ø9ƾº4zhðBëÁG¢ˆÇ¹>+€¾”kÕñسñæèêÞª–?†Im´ýÆ™ë’q™CÔ]ñ޳¯Pq?5Hìó˜øTO¢ß/H‚«–;DÊÖQ~d><ÔJ£Fúv[bæ©ÞÆeh™YTJ!ò2Cë푋x}||ÓÔxáYÞ÷õT‡s£™¤P¢YZ0,9ÚYoœòQöÐZ¯~«DU1ýxÿ½CDcuiüämC㵩•c'Góö‚“à#mi¢˜J'Áœ$e™6rY¬èÂò]4Ö¿°ÔÜÙìøÅæ?Öá*|äÌ« G çj¹§„“}ó——xŠ*™sÿï!SÉ#â¿xbÀ§b«­å‡mࢎ[ò~R÷zËyaêÚY[W`/þåÖNÈ>Â_ý9”Åf‘®;bå·¹ü/NizrGÿè?Òå±^§þORI8¾ëÔÅzqéÕ(^ÙÞÉÄ'¹?r÷)%ŽÜ™%Rܘ%×=ÙBÉ­$îIŒïé{¿ç‹?¸õ§Z—­º2^›Šõ¿¡ël#ÏÉ6ÞN 6%›7ÐEzßöEo¯|Œ:7ØìkHÿµKÖ¡ë 6© ©>›Þš,£7?GE‚it:ÄkÑ£¼ÕA¨cÆ'RªZDB©ÛFd> dêþôkõ¨ûc_è"‰YŠƒ:Ävá'Ý3OÆ©Ïô.›¨N–N”?’ÐYZ^áihц +)¦·ôê^äé¢În–ã+Sz­s˜„ïö´ŠpÃæÙ°‰ÿi?å2ÊP½DBkQCyã£öc6õ GÒ ~Ó'šd…Ù³_Šuú|R‘7‰oÂ0÷±ýª­”ïðJg9Ä7 ÷e7Sg,ߒËË'š‚þ¿†cÙÈ678Oø±õHꢋÊGÙFØIÓÁG€ÚaëUbFÀëjs6²Ÿ¦gî­ÁKˆ¢¦WYXþ™~w(Ñ ,öŒLºœ7êW=(“ÍJûS Ç-lbŽï;×x.w«ô ÂViqìe›Õ©6t:p)‚|Ï@·SÄÛêØ ÊÖ¬*(ðùA3à¡¢-Ñè„0÷Li? *à/Aؒ’žÑ™êëغJ¨ép¹>)H½ `”7ºêP/m_Ê^Ą»œD‹SÈÕ0ƒLpÓŸêÛüÕ: ±vöýÏØt4ábkÚ:¡«´šÑ>;²¤§*þ>3h|ªƒc1ˆZQñxgƒ†x1xgƒ¨# #¨#¨#¨#?ÿÒT®ÀŒÅYÿÏxƒY %;´×!ûÜ3k€¾Õ›”ßôís\£øZÎS½ïÑ£F¡›#Ÿs†li¯HŔïëLt_­Ý£ÐFÅ»?ü6joF¶G¦4i¯¦Ñ—æ© vۓ5?éªðí”ÿs/îqNfgӁmQPŒ¸Ê£'-{CiW¬`nZ°¯±AÁz«o=̓Ëi3gƳÃójŸ*Žý› +“h"l͞X.[ ûEG ¿× ×JÎ +§‹V e:{ò2謙ÎÏ¥ÇkÓoP³Î~m* +­ÁÓX%´*P8ˆ6tjýÝÔªŠ¡1þ¶ÇiÂØ‹VøJ\Láè·0%å±s;-qpõ$y,>Zl\~l%Dlçðh¡t™«Ò›²MÆÌ²ÕÿyT؂:p³¾:5HJG÷ízç8˜}ÿb×¶Òsg>›´²ÔÚT¼B³Œ1Õ·)d¯ J/hn×÷ÚÛ՘ î‘܈¿ðPÖs¿ƒk/ý®†l?ÍÃ69û®Š}«ªU}Z·¤ìQòĺºÔ&ãåWd®R«îºgô¨þ2¹‰¾sðÃðKmüR´{ÔdÐo’yçæC›{%ivŠÒ*½íz‹¹©›,ߣý@…sG®Žª^6tôÛKØÓ‰¢Ý>ëE‡·Œ°Ú™`ª8„.Yùer¨InÅ9|²ÑfÙÄfâ–žl6ÔºìXpÙ8.ó /AW,ür(Põ—*lª!8ªÜFrÓªÿӆ)jh*!¥œ;,rР¶´„òu¦\”Óßí*é+soXÌ9Õ"SOÄy•aBaæ„ZÍÒÎc÷”Û€ýèqĆúl¾kgC E¼i!ŒW_tŵûXBt¸›i˜Œ6Güût'ÉU}ÆÃÿmº#mƒ«¯TKUþÛ°Uµ<9++ W+*͵ÄÍ ©S0{kî¥åZÖ îIjMZÛü¤t§U­,þ¡@ Ö8z…Kº­i‡:nEM™é>FÒ"޵÷ m«éˆmO[óæSi?nžbíÓÉ%ªÚhkä ÿñ€»uXTFÓ-\G`ª +&ׇ¯bm‘<ƒ¤·F‡k‹_ôüvdõk&nـ—£sÛO¨c™bÎ|ÐÁÄqP¯Dã9$`€Ñ‰*ýyÁSú\2š‚@Åý<1¿Uû•n1ŽÀÁ·àˆðDÊ:vKtªÙ(Zo›MTº‰º«ª?ԕY(ÈJFI% HKl)RÜLhLAàLR…¸ +ä@¸V…¹T¸¶ã\+r=@½ÖÙdÇt?²=I“켉lß_S{ñ(£ne‰í¥Ì]&­êcš“Ü}ìyÿÙje…–Óó¦>Óιo'w«Ÿ`›Wà(Tcf1³ـ lÀßp$ÝýKÒr¦•æIêŽÖI®i N£1ýw*Šš¤z6.¬J+îÜ¡ÞiN~WՕãÂ±V£}¹ceû±²ýØñ¿ xß†Ù½æŸøeô&SñòÙ£ÂÚÇß9Nµ +‡Fm_­E6³,P…ã:¢ë÷­sï1šäŸÕgí—ùÔeBöªõÙ¹êÞ2ó“^=šÖOhâZÏÇeæýÿÃ=Ëéa¦?eїù5¯)Ñy~tݯÕüè²Q]å.™Í5^ÿߍ]QÇøcž«ÊüíŽbǟßòɖ rº|û¥|&*?öÚ_˱÷›ìümôD ûÁ¹ÿ›Cy/Ó}¡ªë~8ñ¡¬xÐֈ€XÁē¡oõ`r„®µÏ7ØS?hޝ´™]Zo ÓxÍ¢o„ê]y+¨w wd˧뀹é蘘=ïÜð)+®{p=A2ê3+£vàpœÙt^Ô‚gçÆÓÑ×°ÇLXÌß%vDèZýظVE¸xyÇ´€ô#ŸÀ›ãE¯«±ÇáGÿo)Ü㎁Àê@î⹯ÔÚÀ~@×ÀçÀõ`v%Œ­p˜få@›é`®x@vß]ÀÎ}ذo *Ì®¡Æ.³êKb™]Kځï€ñ8s«ªlÀç —a›éïbÃaèØc‹2¹´Ìº?’œt&Rԁ֖2=Øð¬y„®+–w`Mô g×Œ¤ҁì€ö p^GÉ:ýP )2é³:½€îQ†98,HèÌ”œ° ¼9·â=0ÕÀíKüíÀ÷Àw@|08TqXPÁ+˜u…Œvs~œGY¾…!}@à06ž¤m°5Ø¡Ã`q&ø•~™¬%q­ªA“¡+ԁÖíÀå¹vÑræ~FôNG0:ׁã9ÑÚx(¤ ¾F«ó@zžxp_˜p‹dtÖ8h (¤¤´^`f¸Æ ûÓ÷ vRW›â‘¦Hî옸ì¡Ð˜ÐÜè8wAdžʓ.—˜ręt?HX±ÚځÀg†Óƒ†n¼ÈJìÄ>:ã¥فâùñ,x8xì MíëہÖÜK; Û2¶ÆÎ`ì,Àè,Øý`u€y{S|Ÿ¬ˆ'ՁׁîÀø@p½è|¬ÀrÔM¶ÜÍ;¨ÁÜðLœ:ÓÆó p z =h:xÿàuˤðÖö°:`=`„LFځëÀòþÄu¾°³ƒèòÀtº& 6kší¶zRä³>[¡W™I–<²Lb7ÈÐU˜°Vu;þZ-n]¼ý¿ìèa՛ÉÏÉ0þ:¬º¾þՃÑ[p¬ÖÔ¢¿ßt4¦aBh΋öN/6[pôÄ[öŽV/BZ–-Ӟ¡kËêjYf¹ #ém,~Cc<³Ž@‹’[,äÖÙb +tU!F`]>PU͑ùÚpýºHðf¤çõ2†-âßí²ë貒 £g¦Èõ«†]Zt §9ävp‘´_HcrÊM½mt=¯@¬Z^(ÍÓ¦ã_Ôát?¹*:œÿÿ²êÙIX «)ñ¿§ÉÇòÝÒÑo°FÕEš3A=±e`ÖK+TÞ: ¾l± ûüÿ‹&×8ñ6åÒú“¬úŠSý%u +fb_3ú\f´&{ià»ËÛ+eÒ¨e<ی£? ã(ÏÌ8±/æª2> ©—DÊýÎ[-Ñú\:¶\ïõ¸ïCmBï=ôeóÇ~¸íâ7éÂÞt²² Ç(Cðxuâ¯éðêyÿÖìÄù¾ŽÝ3‡À¨Ÿ\ÔwL°%z*2í³új™|›N)ÅÑ9¬;FÃÄà{T²Ý3ÿr +[Úڝ±¨ž`˜6z£#û{a¾Ëà†]ʊ• ýõK×<¦ó–DÑë—ÅEeð¹ü˜X/ýzndëP-¼æ ¤©7zMÔkøûé•òÁ¢¼çóëið²Áºw•Q6Ò÷]+ìý]òßªöÉ ²s9Ö\4AFi{BJSyêŒçËe‚+¦s6ž[O?^7L°¦ÿOÄ»§¿×ûI8¿E•*éæMüíX9)ÎôRÚQî…L°Mi:<ɪɝÙ)MQ‚êUÚ~T·<šŒ°7 E е>‰,¯Õ§_ª: S Yš–Ú¦r+.Ÿ%¢Ußêez¯É"z}¬§¡ûGpâúås…•Û¢œ‹IenkŽûrì6®ù>«¦†Wbó+¯µq 34‘…7l®Ýš9ÆÞ«+·~cZÚê)¢Ì)â[£!«îwÅîÜÎç~Ú"y—Q¯ƒyÚ}ÜÄÊoޛ{´ýï™M»ñ/[…Tªë99‘Ûöä={³ðÙ^ U^$d~×ÄUœ®2^epçΣðÌC6žo«¯¿ÐZ ”ÿû¡Ýûºõ²¬ùåÍïMo`–8¯Oíä®:-ÐƬsX琡Po‹S~îPtXRÅUJU€'¤ŠŽ¬s¥]ý–롲¤3 L¯­ùˆù;™ ëÿkkŤúOçà՛ñ«7ãVoƬߍY¿@ñ :ý܁ãû8§l‚WGÉtù*vQ'¤t&ŒäÛÅèS÷™`Û쬯×;gþ¥kŠ©r¡–ðh¤¿°ÐË b´sΑŒîGWJîaSšH/YûË|öŠá<ä쥯-.ѝ x6JP íÜ:9û—­W~»y~:†»>—HoßìÚÑÞsݱÕUù<²Úê¶UJ<}?y–.žö&znýÑÊ6E²Çêäo®ß!½=ͬIJAT0wØ*TªâdúZ3t ІX’ˆz9ç¹ÉA–½ÙâŒÙ4õTCì îþ.îâ×ÉW4Úºiڋž—å ²ñ/`بäÖþG&ÁÞ´Ûm¿s:xU7Rv• ›)ïŸÌe‡¾D¢5²"/‘²kdF^Ƀ"BðöL—‡²q;ΪÞt8ñ+—_t8-Ò¿YEíoÐà²G':íýš6ËT™_û}ÐæÁÐ/ \â‚&ÖXû~®màðlA³ÿN‡^u¿{r[u7á\ªŽˆ w¢¶¥kþ„l©îçYK(SB©®s®‡Õ{õ¿ŠBõÝ+i¡ÖrÝ·[¶©dHð2³Ø§yz•\$³5™cŽ…3Ñ¢{¶]+Ã<ôjȽ²\ÔZ¨Ëß,ݼtC/–…ügDCöa/”ùð—,« ·NˆÖîë, r´àî( y–I¿Ä|Ï«`Âè–O<Y*ºìl8«F¦´ PúÎû¢w™eK첟 JÇyéVú¢ûÌĂm“ÿ|šÞ +T(e•m7ëÕ?Úq¦ÒK”çЬ*‹ú¶j@Jàœüö‚yIû +w|,¥à¼°Ñ‚¹úú½0WF¯Îÿ`R“¿Øê¸ÿBD*h(˶&v“>¥AU²Ï³X«cËJÃͪ[Té[wV6îöÛ)ÔÉÆr¨l™‰0Ýz³¬¢ ’òÕäÝ»tb:Öðé,•!YiêÝJ±•ÚÚ¥E¢£þœ°ë†MUrЂÀTEê8ujÕH«|G;á¬:Xç^\Ê­ƒ+ybŠ„ + ®þþ‚ÄñE¡éˆdæQ´ŸÎ”}¬§EUáÙ§X>±ñläÔ°ñ9[kë׊•eÐe¢<ۑ&ÒHeÙ¨O2޳©~Ÿi¾Õj²Ñø9-ª”»Î±ká@½ª~äa—–Ô¬g¹aºÙ@}} V“6˜±o_`ó¨žÊ}krúݗnâae­|UÎR¶¾Ú0²×/z­cËƗë²×ùE­ó¬%[nÛ°×:›-jãKx¡7ã:8ì‡å•’ª­>Õ¸ÖÊÆÙ+Ÿ8©CÊv£\ª µ”µ¥VËyÌ"ËuÒ;…‚ÌØQ)£~ÉVÉ4ÔË`Ô]Z¸)E®¥UwÖwî\ø©~K¶ý/À •;/6wÕ,@®€¨5½ ó(:#º°Š}G6RßÊ"ƒ¹N@Ià¿ #9Îhs¨nvʕknPÿ¼‰óïÙ fÍ­ºW~ü‰ê6ه®»:­ ðuõV\êƒö. æÏL¦ÖŸm0ÙÝʦoÆõNÔ]ÕÚP¹‹AÞ\ñuaՒI魎ˆÞZ,ýnE´”é$r©iYò8ÖPO„¤6á²Ùxvì÷$‰[2½Ýþc-•{¦é÷÷w'RËJ¦5E /󿮣3Lk)ØÖS¹R¿+mÊìr’‚_ÿÜ¥~ý=µלµ&¾Œž-þöRɆÍþu*Uö_}–¨’eëŸ8NƒÙ¢zþ¥ª­cÞ#[‘JÑÝg*Y$¾ËNOøÏ¶lúˆ‹~ÃÖí(h&5y?Ìe¤ðV™“sÕìK/•GÁ`ó4ˆogo(¶Õeì•?—ìtÑPöhبv´]‡© '^›îõ?¿y7 ìT€gQع韃_¸]°Þs=ë,óû¼æ|ª_}Îñ+¨Œ7€Ë0¦ä§O‰–^ª¯ŒºgofÎ%Q‰äGºèšiÉÕÝFúo‘¬â)ÜD­Fª¶y$­Ó^¾ïlÔ¹Ä²ïtEËnÇÊ£´PòÄÕ»ñõ7z˜gµ‡cד“³VñŠÕŒðC_¿Ý0[7©jCwûx Q:» YZóAàn˜Ö¢÷¨B_ÀË@Þ£J©=d?¶­æ û:tÍ5 ´ sBÕB‹·Gv·@ßíkSöîVœ°-5^Ùð­9d9ûe¤ÿ•¤™‘èS©ß-;á¼­ònJo(4·™f)â¿.âfW¥Mº¢‹-(3XvÚ¢Nl{„pÀ\Štay'0ÿ“¥wIË,ùe/ûÇÝ0éðÁü[ƒÍ1­QcZ¢ÆµEj‹û«TXQ9ø»™m`½›B#Å]|µNqu¤îå»E-|"‚ÔÅëßø ,ââYÔå-‹jØofµOÀ[Ô å:@¦Ó” ["²? µÊ8NOmC…áZ­³òÖ±xâï×ûV°5k¦¶Tò[JCM®ü­Åy¼Fùk*†WŒò‹ »MæëÅÔHMÅZôí~T寲Ò{ËÛSôÚsÍ9î¾»ÔùÃg—)(–S|c.å!ún‹eé”Õ[¶uj‹±U£>NÏ8Ú*å(%ÁUyÿ 0PVÃâAíZ[<žòK]ÉÐZ²[qº]ßÒRAo쭎ßJ=­–^µ¿e¥ó(iõRŽÿqÒ÷ÂO*Ú]‹[Âz8’.ñwF³PŸ°é†r.¸(~l«uäœÎF¸×-¡rŽqó4gl²” õ±d%¦‰¯þ¼qÿu|XÌþ-¢ñ=|°ï•žêEfeïðZ·ø2ÎX¡FøÑͪé+ºú;O˜)¦ÔB—§œ÷]3ŸôjwF©­ÿ¿’¸égƒ±l>~DŽ„½î·óÅU~ÿGq/â^5ļk‰x×ñ®%ã\KƸ—q/â^5ļk‰À¸—´Ò_.%òdË1LéÁõ€MçT®ÜÞ9<þ rMðK ‘ÓÑtàæÌܼq.(ñ$¸£³™âÜô,UŽœ™dŽ;ÿÇû·Y3¦ÿ7´€ý}ϱ૜òDՃ|?þõÀMì-žÜ ¼eúâüÓ yÐ=Pyàro<<³?†ç‡Ó..$ù6Ãߛsêjµ˜Ö쯴Þì~ô@v`w@}Çû®œ^ܨÇ0Á¾àjóDéÈæèÀëîò¿ˆ9Ï0Åp|b›Íñœ?ž;+é7œ&öSç2³%ù¾Y¦m pÏÒÙþ+ î´ÞÊқÉyS{/ˆŽ&WÂo¤Ó=ˆ¨çñ†Ço®m]x´¼ßËë¥lÐ0Æ v†,›æsO\ßò¦øw¶ÍzӁݙpÿ…ìhÃbL¬ç¨7Å|8‘a€4™Y/\Ã7—$˜a¯íø`l}ýàz€;ðfïK„s}kG›ë}TeE•†›3nè}ýÈ=3§ ì€øpË`}. ÿhñ&táséɕì@îñ¤ÊÅLʸrc´Í-ó6.™TŽ`7ٗ ü:p>h7҈o‚S¾ — ý€Ò¸…ÖcgMÞÞÉ͛Ë݀”>féä 3b›3`ɬØúc²¥šãx3FL©wÚí@ñ<³ w\±¼ßaŽøä™RI¼¶®&T›Çúsy¶°ÃM‘þ£œM™µq@v xR#Õ¾À×âÆßÇã;ÆË–`¹7ȤÑ.ÌÊDzÐ>ÔvÜ˄²ÌÎ8‚e 9À:Ð; è ŒáàxùâÀôÀ{={æ¬ Ûc|:p'Ž$”¸¼xÂkìF¶V‰Ñ ö¬«×÷@}èÈÈlß4‰=æˆî›Xàx9n7¸ÀØÇågÝðÏèGWàx¯d!LFNº7ÂðŸW)¤`¼þ=:׍’lòþ_ƒ=ï-–Ùp¦ožñ¿jÝ4ŸÛýµxÆ·éÿ5Âü¢&Ç]ôYù%Mª>zTDñ.ï`VN"xmRánS·ëg:_¶Jì• )5¢¯Êu¸[.µ”5ï3~¿‚ãjá6®mG½p¦[†X§ni6ŧÉ/ÆÒRÇsÒrƒ1ӗúò0ÏmÜuÚIF`<Ål­)m’†ÓRµŽjO'ß»af—ƒFh'ßÐÏ pãrºüԘªßö“=ù"Iä&Èféӏ©pÞ¶¯Þvš¯%È yp‡$ß(rÙ6δ̜®ñpöö®úá6-|ùñ•mJM.ïëêtç|Ä[T×rk\D´êâ%—aMjX5õö„¶¬’?çA +L½ã§5”D§íÜÀ_ꧬV‰¨;Ÿƒôn}a|²é¸zKŽÙ£´Ï©ç\ZäIJÉuW¡clê4§L%Y+™´0>7ƒW¯-eþw&©qÒßÍåÿˆþ—(å\U@Û©ÿÚåӒCÛ—à¥©Š¾¬—9M tR_(œ…¤â'øJ^ës eË +áe—cï^oaéÒÜ׺‡kyº„·¿t·êÜ0®iÕ5œ)¬Šë¥»feöÈ|TÝód¹µ‘EcÞ¥CR·?üK›¼ +’³h”½Hå Ù$DfuËi 7”v–*-Óü‹‰¥±r4 ²(ìº+Ÿ7÷ Äø7¾úçîÝ'¥jé.)ޖFk¼Z®S¦C4Yíªt_%ÓZtlÖ˦߂”W¬Ô𜲏–eçÉ!· +¿ééÓ  ø¦Q.‘f;Ý Ô£¸gR”5N˜Í'óÝì^ò UUÓ'Á++N֗Dó$Ö4ó®P+䊷ûDo.üôwK©TlÔ.¦ßO0çÖMÝN;Íu ª–è.ªk.§íо«t›bÎ/{*]®÷YqÊOU×)‰×Ty +v ³w¾ N«°~v”’|öûQ†Ã…k©îNyOwâMùî“í(âtcGÔ²¿Á¨Ì¼ÿ%Ó:Û;!U՟ub¸ßZéÌÓGçîgɇ¡ØuØú!ƒ¢ûÌÕïx_’´^Ù4+֓9RÝ6I:Òù4—R¨©#µ— 'ùFD§{¢[Úgïºku!'aŒ:«ªy®åëËìÐ}S‘š©ïè튭Œ$˜6DiŽÉ#ÙZMAz×+o\ڑ#*<3¶3W†Ös):‚;ØEò©«1ü¥×[ݎ×ïm¿ç»¥©·JÕtâ¿R-~Nie<¡ö[ëüGˆ7æw£ ’ï{¨U2Ê£q2¥Z¸mV‰ÿev'*=eØ]þÁ¬»ál_|-ƒó;ŒÅm“£c”¡«×Öp.¼lÝÂÏ,»ˆ•Þ)GÆÜc¢l•.°`]­ŸÔ™ +ºÑaþJ²¤4žŽ—­ã$Õà÷ú÷}ÞùþÅÙ«÷«t÷oǝ Ûu^«m·Bñ—"D*„–‰7Br =%Ú;ûÅå‘Ý…KsÖKoøvòpÖ¿ÕvãÌ%×û½po>™P[×ÇòÒº;Ÿq‡jÕÐ;$vw(¨ÝQyˆŒ¦©W t]@œ”’T®mûd£`Þ鞭ܫΟôôçQš^êë¯Ê]Òå¨Òç¯%ç¼PêÞÛÛ&%ÂJ 'MûÕӃ½'·‰w’Ò\˜\÷H‚Úv’MšIßåÙ)zDp.ôà0Q‹5¹ÝIùpóÊt<òŸË/¯n¡íüØOu¼'QÂ…Þ oÙ.Ìß>œË¹T’ÎÎM蟎¼mÜ— 1 íÄ÷|εà^Ž’ð.Í+?€;=Zð.UC-•f˙ vT¼ ͒Q%‘ÊNq‘AFâÓ¹O}·o¤T»÷J¾j0Çí²w: +_uí’ãýFm÷•Õ/н—@±n}.Áׯg3'˜š**&éA—œ´Öëzhu®þZ£›6W›;Õ´O6¬‡W~¬§µý³—­Ô{¿U>u.èTMŠÓ3zirµàž,¨z¶í*«Á6ÝǺj¤|Zf:æ­f‘ê’&èÒμ’j“>ªðíûìµÉÖ±Ä;†PßèeKÄÕE«$j+.ù'eeBVx +±ìõUš:¤›Wÿnææ%yVÒ\. P×aIVÙ;¼ž–ôã"fÓ^ƒÞm·¼!n]^¿aë ’Ö‡Ø:¯ú«ÐàþîAŒb¶æj,^ÕÐYéM틭“ ³wÐÆÊNÞ¥#-ÜG›wkûô¸eêá3¨9k*A«¾l+ ŸSxes‚^t)Õ|+&†-íñå¥á¯OÞäû2QB¼W£¼~Òõ Ó^a2µ½ènÁ=ìÚÐÒüˆÏz{ôôÄ^¹Òð ÿ¦qK‚wQÛ52Èג«ÞiT©COùeß¶z_z^ÝTÊô§¿yzVüóïÞ8¾€ÍyÌ*¢Ú­´Þ4¾ˆñœéÀê6«43{|äÖ÷Û%zRݺ¢…g]k¨7ªãÌEêõïk[mÿºA„Ó;+–ºëÓ;èÉf– )+Šºë’;‰'MÈëj¸ë²M|Ÿ¼’óI{ÊûÉ'bÓC Ã!BŒe1†B”„2˜£ ÊBjRe(Ã3¤²DI«dÖ;1 þûï¿þûîýÞû¾êêóòóóI5•UgY4%„’ÂiaI©HSÄØÁ±ŠcÜMÁÜ:R˜Á¶Æ1C]ÃÅ ‰ˆ^üÆánFäíÄÜNÐïv¶[#nJüþÿ»uL¹Åè]SKçuzcÌmý…"µÙQFÊè:Kõ™¦SÊS2T{.û'ç®ÓMÁ_vTÐñUJX6SeAº×ñxt‡ìÞ¸ÎUu¦bLÇ(â|ÎÐEÃS‰ y+Ú¸a¿"êØ6Œ8՞¤%+Št”ÄøD½›ûðûvN.ÿ…5|~ĀJÊQq×«f8N·R¥~˱ou»«)úšº¯Ù°w£R·=ê„–ÆR’¥r¹tœ-ÏÞÏ«»ØÁ¹±Ô·}Óì¸oš;ôþl_Òý¹+ÜÚ kã|_ƒ +øßÍ_±k鯍e6¶UŠTD6óIRb*ö]¼‡—hâØÁg³©»·Uçóg¢¾/4½f‰sìýSq5|³kæ×A|òê-kê—WÑl_A®µ–É˼§Jú¿ˆ¾‘‚¼¯‰V+§ê⯣ÓD‡ªœ¾“v‰U 闣¶WŽVô;4{Ë諉R¿zz÷ëa/ŸÅLEÿÆüÎx>0Ý\Œ+æ˜WÍ0¯š~Úù¦sëä/qLÞøJ|Ÿßî^ëçzêù}ú-|Çæ>zµx¼(»•Y*¢m±ríæ9~å±N`žõBººëãh{w4KfSEó§9Lá!SàBxÅp‘óË»>¹¼²p$‹Ï_^¯ko䅱 ‚ò6Åú<ì_V§ÄÉ^®u KÉÈØÅMŸ!ÉÞo1°žWD9 ´qqBúû>c‘ƊƵ¡…`ٖ]^ŠÉLô£ìÜ©=fñ(ìÞ1JémÕA¢Ã˜¹…%]ñJ•–߆º#ÉGIÒ¬ÆÍÖ¾“fì»Z.µôŒ!k4 ¾}Ÿuxså]ʛ+.­yz»ºשÝSu{Y|úñ7ÊWȨ†ôÚ埗º4´¬õôŸq~r^Ö6Ó¬Ûÿý_OW“,üK«çßN_AºQûýËêôà’.K…kð×ÒK#áà³‡钗Q_õªEã/®`Ò5åÕ>.úÿJV¼³\tÛ­[]UspI§,¦äéŠBŒµ»G:ò»W²šÛRQ—ÊÁú²8E//Rò çvÕJ8&Zf8H?+ý.­¯& ëHÆl·ú°c0™þõÁËÃhAÿ@V5#v­—³mIç¯ÔUՃ¦?‘óýÞÏYwÌÃɸW²H?3ìÕ¹ÁßìÔý?·‘yòü+åøWËð¯—á_/¾_…|¿ +ù~òü+åøWËð¯—ý5òüžùzÙµÒÔՐüÁ+|X˜Kæôelª&÷Ÿ^o~ÑæòvיãÚk46l›Fqçñ‡¢{eA؁ì@›Å,N஫—–üfšì€›Þ“¯È4Ö[Cíçî‹}`xÿ69 žšŸÇG‹ÉSg†^Èc(Ѽ z›Ài[?P7G‘kªõ#O67²Íš>3’ށíÀæ=R-–'1êщ…=>Ùæ¶Y¬±ýXµò›Ážè ¼X=qþ°h0&Ǽû.ÓTÞµ¦²†º£9 4às¾´ù`jİKúþµ¶Y±¬Ûb\Þ>ô³`MëäÌÞ²Õú :R_+™|§×– a̾[ÜÇúq³/"›×4ÖTü ¼A¶q¾W6}{nQ˜/Ù²ª›&O5 zb¶U“{kk²ցہã=xÞ°6`MŽ ݱ[*ÍO,!üÌ ¼—´šêaMäÁ¾ü¤[*δÜìÿg쌊¶ÀMíR–¤±0'֕ԶíÊÙPM‰€~|±0ïü'ö´êWRòke1ÔS›ÛðŠr¶S¥9ýn µßÔ¶æJêYl€›Û­ßiPŒL!í‡)™^e¦ä揳6; Kfºxc¸ï³oa°JÆscGÏçö™@7lÌÃæÏ‹òV <ÕPáŒLÞOíJÙEzð=ˆÐy܅¿ɶ¾[Øí€ø&Á*~tp†Ä¿ÆûAÁ¸°ÈX¤×Q+žfsÎ"Ëý‘­”÷ڏÎeó]=޼doBóe‚S~ð:WOBk§ïå:±àyP:?¬|OZÓ]pyø•¨¶L\ØÐ;`9ŠöšÒ%÷öµçÇë \n€Dø(xÜ϶ÿD4¸’Á)þÀ°J>kd¡ÍX O¢ŽâÞåIöƒ3ìÿ±Ñ£(ã¦öÈë²Úø$ûKö ~â:~(ä ½²bíÀî }VkdÑԒú—%ó9°JG˜Ò4Öp” !¼ÃÜ'ñî@ïïÀú¢¶MÓb_ÎÔ^µ%ô!¥ÞH¾”þÇNZº+dñî€ï€ú¯n:éê˜Ø%SéFé÷ZÿÀö {;°&öð£d¯ò€ñľsïñ¾äo¸À„±/·ðM‚S°5ý@äœè-ùciÀށï +ÙuÞèr>yo½Ö`v iÌûE’ùÏô‚S8Â"ÀíïÀÆ%óŸˆKç>D&O´]Q±.ÆKès["¬c/¡Àõ@{[#m¢1/fl‘Ú£ð|¼Ò|¬Àì«¥Øï€ø„¾sˁ怛Ч¾ˆ ˆÏǎÑÙÀ:°:ð;P;’Á)>ôfà@àð=hi#ÿ– Jû :‰C¢˜Ù½ å\›Ç{±Ôœ¾ہðK¥z@?œX%#ÏÌÖ˜º)Ø7ªºÜ¥Øýwfòê¬9§¼ÎÄ °? ··%ò߬bh*O³ù½W“íöÀ{€?êÜï€ïï€ÉêDm’ùo|l™Þ›~‚+Àñä¾[¼àþb=f™|·ï@å¿4@€S«C shJQˆ}ÛÕ ››ø–UMmOOô¾:'ÌÆ,Gÿ—ÁÆÜü‡ø—Ó:b!eBMdÔ$6Ɛ¤›{ô&èqZýÈ)®+èi«#ÚÕ¹Äi¼2´¢åc•æÊ §ž°™¸Û£Ù·×òî{îÌj¡Xv»V&4è|»2Ã*ï^̈ã–^bŸ`A.Z,”þõW’»$•A6êqOP‰•Zj…¡>2(-oµ#ì¶Mw½UíÐÝ›,¶.6ŠPqU¨x«ë´GÚ™¬ÓL°>…’G„èäÎBŽïÐO3žUùôܪ¶NQâM$âuf©.âV¶¡²n˜åºÅ8¿v‡r˜SX"¿ªƒÙ à–×î­};P§ÜÏ@D>·(WwHä/©ôǛNµ÷½i\ś±>ó°òÛ}÷ÐÀ_ë¾ýnúupê•LލéO¸Î`¤mÞzÑÀ¾±N{zZÙ·T셻ÕAii +¿u +tjíÉPWfÕú¯÷=.ŽÝÙjY*äΤñC~Eh)¼vºÂè§ ·B¯âE |ÑÌm}‹©9%ɞN½zDÿ¬oÿ¾û(øÛ£oÄ~ŽÞ¥}cövôÔÂöʇÿ¹·ìáN1ÛÜ}(•”O†Ïº~ŽÓJúìĝ‰ú‘ú;n•óÙÛ~ˆärþžÜ­|²¾rV¾]âîyv}´W^™j¼Ó^U͇ ¦·gXÝÅ?S”w3¥óÞýk’ +†;p–þ›™ÀëË“!¯b_VAù½ú»s;M²CŠ&ß(×í+äºPÒ·Ú š¾;kìڂÐ/-ӇXxÊ8gêI¸Y^wkÈ«U(êF½¹IiC4{lE@÷göpнí‘Á’W#SŠHâcMÄÁOևõé>ÒQûõ¸…NöêDvšïÏ,}2ÌÞ_CÒ×x|º¾¾Õ¨àèÓKocMN˜zÙS$ÖIß”G½ÁK5Bún9§t}â~ )=…ÆÁ%½ñJõwçÕb|ö`’×â>¬¤ûÅ?.o/¦ÓÆ•MY§W[™Ÿ¡àuA ëœûÄ"ÙÔ:¸èÔvØ<3²Q]9åÇ&Ó]åòý‚°$õÉ:˜n‚Ü›ç10žž+ï î§¿ÃdM#ü’“t£‰[Å9x¨Ývn=é`ƒVè¶^趍%GÿʾWŸÔUÒWoOÆlÂCS۔±”VŒèNÝdê\Lѯ¼5-ChŒØ¥<] ߎ&èl/³*V¾=Œ¤U*? +uý cmdΔZŒZ"ý}=Òü~ñzf̛§dðôúø×Ó¹3Í0ò×{¤:Ž+ ÿGÏéÊwêXò{ Lq¿Ñ§)$nÐQØ|ìK »B¾Åô­bœ5xçá…Ü'ÉØ} ~Ëo¥¶D««_OÿBÙì?m}¡qøéºáGŽG ¼]#ø¼ÿÚú¿Fu.„õêý +—ײg/‰ú×Ó±pa•údú–½ùû¼×™f¸äŸö<G>Z é1/쥟7{¥Ý…Ú"{&ð'c »½wwa°m}¯lI!ÚÅ|ŽQ@¯•™…ýÉ<™ì/(Ü篬n˼Šç ¼ü¼ÁEO’üÆý¿Ç~i~Ƴvl+ËïiæóÍ÷%ZùNì”Õo?'3øS_ ©Ûºâú>†ƒ¦nM³ÝMï㠉ã_œCC^ÒêBÉÏ©ÀüÛ2)¹õù*q¹n‹¤Zp:üKó3x]‰åi¸m™¦Ô¬+éXWÒ°¯¥açÿù×Ã,!]£úáØ¿Ã±|î ˆµà—'%ù¿¸, Ì?éî‰>’ ÔÔÅ»ñ~úûDË¥ òVÝ]p®“·6zXòño>í³‹»'™"7am’ÒÝÐk_e̚ü§'©}xèU#Ì'7¶J’zì—onI›T‘š§J›a÷çãØî‘ˆÄR{v ¸lJ—ÝÝßÓN"!E2«sÓèÕiÈRûFKwÒ?3™µ:ÝÝ_>ªž2«aÙ ðBë´õoO’á ù ¾­­+]ëSt›{ <,ÈUÛµ(ì 9¸9Ú<¦ÕZ8)Mj_™ø7þãä¶KëwUº°5}ÎÎLâbFzþZè ß_s£‚zvâ·-nHð-î¿vïQèñnœW­~"Î â«1ïøÜGÙ7I"õPüc)¢›©’TAt« lÜèné(,6Ò÷­¤&)®±"";&ÊOf`¯°ôòlæè”ö9N‘®$œìrD­É&{½‹êôu­ÇÁ2k;cÄ"8ê¥W³lƒÒnϱ|.žÊ¿ùÕ~@¬ÊKµ¹z!ÔÞbª@ÓYKŠüëÝðí¡%úM:;ÎÖsí öf÷~xoTSóóΞó7M¦íü‚;@ªE•Áiû6Sj£ì”î‡Ü­.9_æM/v5Èl«–Е˜¶¥ ¶N'aùSjàÓ¡ÿ‘údNôª™“Ò¶C"œb9ßÎ}ÛpÉPW Þ'‰ž¾1¯›Üvžo|õÖU½‚S•ÖuÚ¨–ïRªze`/”^˜¯uÀ_(Ú6žcDá¿C¿ry¿ê…——Æ4amåñŽ,.¼¾)M=,ŸÚ…:¹Û̹¬Wõ_Ôk–¿Å_Ý« ۱ՊuÄZJ–S¶v•E³´š×¾wxÕ‚U”ÖÔ¦¾^Í’,¦­$<·„î¾á× Ü ÃÓ þéWþW%D¨rpmªöì“"2æÏvoyŒWoçI#YL[ÂxÓå`žÆ…øz̯bàÕæÄQ‡‹ÖÕú¾BS0m7ý;'2 +àUñ· ¦/óü[s”Ñ®ÇCÙm`+{SÝÁ8»9KYTL‚¦”d²»9¿Ì,uVì̚Lºýµ‚¦íê ە•ßж±ÚE5} è¹mK±s&CD¨›Bj6]AŠÑÒx¯Ò?J®&ã9ÌKÔ/Á+åòÛ^±º¾{‚YÈm ˜„›Mú + `'ë]í·È$ûû 8ׅ²ôÎMºUzÛ(/^%t»Ò˟&(æ÷VÙÌ )äÛ\fÖÑâ6Õë‡ðà®YxŠÍkÚtvM½%µÑÔ·¯à/e½"‚ÓÆTb›êÔ`}_ò3ú Ñ9'~S֞°õ\>ÛfË1XF.’ õÚìq¹ÉQR}šŒ>qðOߏ³þZ÷¬óåkœŽ˜E‚`äÄAð0OWƒMWôk‘à ûl¶Ä¨.¯vÛí¡¶Áÿí~žQ×FÕG©ªÖ9…ÿWޏßñ¡§NDæèÁM¬uHWz¦eÙ¡ïýÚó;p]úW,Ï'Š\]©kmu + o‹§ßô/eS­`nŠÌSñÌcèҎºl£d¢ž4LS[¦˜ÕvÛשUÜw%cÙ+€WéBümk™vsmÁ‘ޔݺ\x¤èndåuÚ8)µ)¸ÝIèV⯶+ýiÒÆ¶È#e{Ù¿O'Qøë×µ =ü½Wý+×T–µ¿ÀŒ/1Év†ž—+çÅeÄø±Ÿnz€ýR¸«TÜyåts&¡á^€Ã‰éŸIzòíïÿ\O9Ë¿•œ~ã/?àéRc©=„‹~šóöB±3.„-=¢§ãý¡dÏܚéqޒW1¿›%¿=\l°—tþ’v âY‚w—g“¿ºúÇ;öý×èç"rŒüOp¢‰”Óþï\:9F |»‚xÿëӔ‚¹ +C3°¢­hsY“kñÑýøgî»n¤-ÚxŸ´%W]¢§–®eêi(õe֞áZåq¶% “múxºÔÍ*k:U$ÿRÛü|ís ¸ù–àmÂDÁÙð[€Œ†íF +òÚí/UáÖ6͇¿W{Ϋ®ëy3dò¥ÅI¸jÙSéŒç]7ôK¯¼MÄÔ/þü÷í7#JÏ~ÕjȒ½z×R5½¹w[ñpP+‡[k‡‚‚¿³(8'û¯=e;¯ &ã’¥ÿN. Éي~Íç˜Ên]k»*eâP–÷Ê+Ç¥¼N(å‘@œ‚¡ñˆ\²”œTÁ±iÁå}¨ú¶ªcé`Û9õyyo?a^r¼å…yË +ó—Ç^rñà~Å`î"òó¯­ +6Áµå<†èsfaÐÚ::&Îq³Í™¥$–áN#G³*ûBøÚ=âÊ´Ê ŸPZ«AŸŽJšÔ"ú`^ƒ´¤0 +4FŹVưÒÖ~¥Ÿ²ãn"ö%Â=£l2=º¨Zl™öc‰”º$Ìé·—(eè?vöÎ!6hl›X$†)E±ß"½ñãþë\ÊùyjߤùÏÏY&éK;òÚy…cЫI(ĚV~›!ËOÖä¦~½<Ú-2ª›EyË©]µ• ­0êÊTF]ê˜ôô'ȃÝ3…Œ2›N·¿À,3S:h•ÏÌQ¡ZW©+<ýçï> ¡AZzWª¼]ïÉÒ¬J+úPÆ´ö}Ãf¨pÌÚMK3¯¸›©-÷èë_Iü ¯RËE•~>({ҔI~ÑN‹ýëÕØ6ŽèŠNнy’ÙN­(מ”×ÈKåÐ^£¿ñÒþÇàèºà‰»ŒÖ±ÖįOL«rÿԎë¦Û˜ [v]&šJØîN[D…ô0fo$þ*¾ë ;ì¦è:Ü +:¯îýµÓüèJlý fòƒFOù¯bRArº ùj0ÕñaG̈́™EÚ_֏…ŠÜ°qDÿÄ7[[YúÅôtMƒfn–³²`ÿþi·ùûZŽ÷“¸çâü˜WͰ¯›a_6¾m…|Û +ù¶ól+æØWͰ¯›a_6¾mô×ͽuÝ%ói½Ã÷çI|Ûï›+@fÉ¡³Îæo ŒùvðSl”Eì‹,÷傖~D—ΦÁK?>Oæ,fðRÎl±ü`&ñš»¯oz;Y¸£Õ²ä’¹súšgÜ6þhñ¥‚–?~l½åkå(~ |³zØ6,wë}KM7 û@? [*ÓFòÄóÖìÍ||“MƯθ ½¼íù$y<ÌÔفÚ6vÖ{€;³/®y:ƒäólø'ó5ñíïÀ›ÜvXhÙg),Ñòàkõo@õ€Mî?âÞºÀòäþŠÙ¹±+uê‰}ƒðö wæKsh_\çÀûà=¡/¬rå|{fÍzðÐf½Ç|VëlÇåK"Ú:LàŠð:ÿf7ßÙ£ëv¹Óæ+ ¯‘žF °Í‚k½°È˜çšk0ðÀühÞ"£@é@ê@õőkà{òmí‹"Õ¾ ù¼ãì@ï@›×‚}èÔ ðÅcMT™ý%jôk—¶³ßP°L7ÌÓ[˜pxÌ}^ O@7O@|¿Õµ²oBÊ9^„DxÀÈÐX0¤lpx|ŸÓÚòÅ!OFJÞ¾ v w€zãzµèšjÌ´­Õ÷jKï“b)`4Øó/À@Ùê¬ ál™dZ§x/¢7†3ÁÃùdZÇàäI~Be÷ou£Eñ×ê |vý é—ÒÜϙ×Ùºßl ÿÛÜÙUàu`zð; =À?L8ß%õ®ÇL‡ô†ð`OéPáiƧ•éFÿ’ú÷·+ã§ÎÖØ¿Ç{ÑlßÜ#"Õµ@{b_Zז(ÿve‘jžO§fWÆÏ½cÔ4×ZVëLgôÄØ¤ ˁª5ºÆ“ú¢ku¡ŒäŸÕÞÀ²-C–R3m8q[¬Ïrv;d"¬ÌsdŒRÄÍçÉ~Ôjèý« ;dÚî0²È´/lvŽ:ÅÍ7±m~|FP`~š³LsfŒRË+u¡¾™µ?¢ƒ6ºÐ? ½LÜå$Ë…&Å! ð›V4½H[ϵ+u‘§Ⱥ`=€¢_rËï@íî@ï.þ´òÀv v wy©FñA^#<àtø—á;Ð7ài®FñËë‹‰&Å".\¼`“–"\¸ÀR`Ýp>üÌ UÐÞ2Å!pKòp=]Úm‹mnn=Ù2³ ÷ÿó—νî#ùo‘ûãa?ÿo÷ÑÛÜ?×ø—Éh*srq¹x ×þ3ù³‹ékÅíÎV;Dj/[©Û]ڙݗÜñT3iï5öëh'sÇ©—]ۊ³å.´ór[³c +ϽqžKÇ1ÖþbÊSä®Çó åO~\$³P¡L’ûçWä⏍$ÈvªU~²Üô|‡òÖfùfÌF«ÏjÉqŸËøó]¨ß üÁÈȺ?„ݪû㿗~ ùvË.•5_¯€Ûùnýº•ÆÁ±xt»lrÐðñGÓFk”äñü²#ъ®4^|7ØþIՓDÿª&öçá§åá?,·!ú·1õ:ØÔ0½lûþ­Ÿ}Òûxµy<õ´¶Õ-O_€¢†Ú¶Ý +s^.‡KEöƒÇ·L×tLÙ?~×Ís‚?AÄ›Æ R“Z’„= åzÏ3;®.⠞ƒšGä¯]o"àk)ÑK^DÇñp—‡é‘{Óªáý<<ŠF¦)d—öîEâ)àmg*/µQiØ×]÷]1”¿ñý\²7oÈÌ^(:þkx í„ýU÷¥¡æÿm•Î;õ_à;à~«×¾o@Ÿ¤¼GI¯ÎªsÊîïH˜ªYӞéNø B¦ƒÆ›0V~«¢ýQ»Ìš_ªŸŸ^¦Œ|ÚOTÚÞ}÷êŽïçÛª.šsõF÷J÷¬é¯MˆýM­ÜáOJ7q=ÓrV¬ݓšŸÓ–ÂÜpºbû“ªu_û8Ýa]KJÝLc—fûudŽF~›¡ƒ'šæÊ·ûóü2ÝHü÷éµqµÝ⬳žÜóñ£®Ûÿøùÿëu Mި·BŸ£˜‡“Ÿ¦:r¬ÇLºv¿L q?/Gúôœù?¸Öéórª7ߥ´Q”§‚—íÔQYÛ³jH„¢vEº|ôÈ³=÷£•åÛûMzêlý5]79M쩪‡ùÍÓsTՃýó”Ú*nzšÂ›ÚSDkڏÏϏÊêí÷0?/=MZ>Nv›èbƒ_r_„¼x=Ț>ú¥>c²É GÊ~ úG$Éü¹ÏÁ ¿Ã·B”¿¦Ã -;dün¿nÏswµÖèG)²¾Ys­nVMsrâÍÅjIªñŸ€zSÝŒ™«¹ý KŠÉî\}D×-¾Ì¬LPi÷x7Én¾:VOÿï«-Çß]6’BX{û‡6u<;ä»_}6¸ÂVFy9õã[ïCôîêTí Pt²±ßˆûÖ»n•r1#V1=æ+tê eéÁÁ|žo9ÄÀ­‡L˜³_€ó¾Ûy׋ø~&ÿŠÝß~€F!/¿v)'û÷ýÝý.\²H"€±¨ª¨I!$XI$ EDX A1H*А`„’3UUUÅE\T Á \L@KŒTUûÿÿ÷ï¾úî\¹ ’B6Ç9ÅGZÎêÍìÜí3:·ª·»·Ãµ½âÊïèÏ/ywÁµÞnðw‹}ÝUÕ]Uޝþï“wË¿À9O¾÷i$’Ym±;ó¡ q#©Cj݆+€Þ3kyÐ׿¦or£à*qB§aÞòkh’Õ{•V=¾'÷æ‘Þôn¯þr¬µ¨uøqz®ss²WÜ¡3÷ÀT{•åÍ9î|çê¦Òû‹nžï½Ö]í`®ïÉÖó¥ÿÑ2ªøîj£³Öç58Š|{ƒ×w»zŒ[‹ûßÝÞëûç‚ëœÑ©²`ü½î»¾iÜó™µ[s/ýý۶j}ٝnô£YÂkœÄÕsM°co(ÛpÕ¶6îöyšÎ÷%kO¤·õw¸êÞe;ūˏfÑBš›/ íZÚÜùϦMKî \Pµ¹Ö÷[¸ŠÝY×v¼KˆA[½¿æ•ÒQðÅÔÁOÌÈ»ð(<½ÿYÞÚ®lUì žìŽc2®.<ð +âãΫ½³]lò.õ­õVïl÷5¼’ºÝíwU?ÝÞÖj@éî«u Î!]­}՗ëwÚWª[òâQ˼ÔóB~)¿ˆÏñþ2Á·ð:šÞ?š©Þ&\w´uœðr.u`ÔcÝ÷´®»Ú­²nªDõ”&Ç#VýÆß&çÎv.©!w¶‚¸W©¿ÑÞ͸qB‚W½ä^4?ÝÞ˪kfÍ£“ZàªãÜÈ·«Â7Mss;¸›¾TD­ñ]xÚý¢¾ÇœhýœãF9]»ïŒ§5áUíðÿó箸 +-ò£sÅwB9›ÌGæçn¨ks°éÿó"í®.+Mñoçä·µ[ØÜ{{†—¥ÖÛS‡E£ ®õÃ×~¾õÃs ºéâ¼ï\?ïç¿F«ßÓÞ¸1ÈqxUqÐ"âØ]K´?õȽ½sÿú;ÕmNóÛSJæa—Ž«C½o\ÊÕIÍ֋ZÖÐëo ¸me\<ù–ûÊÏè²Éqqbï½BÝ̍껏=™G1õqÞ£ó;Îõÿ,Pà* LüàïåP¸ïKw? SEýƞ‰ñ@æ{³H©5m^ü=ëÇT÷¥[–…dÛåK†õ{ ±¡uî€7ýwº›ýë÷@?ÌÒØó€êïK·5±©Þ—õV‹ÿáÎiiüֵ竮ë?Sⷜ"\îÓ*]ɹ€ÚîôÀÔèžÍT8•©IsÍÜ\©l6–w]éVçÆÚðUo÷å÷@Þ ¾.ÿÖïK×<ßoØWï8ÅqÏÒëýî'?ôhwþ̌àiø[«¹”c*Žºâ¾«î¬+ñ;¾ûUÀ¯]¿?Õ&L‹¹°Õ6­Q‰— ¿z^Õm\«w¡®¿wµœï—-<®7ô¼EGt¦Ç•È™õ©}DV¦áûâëx]msƒù×}èóUî—Gz5©t²çZ­çz1¸ÑûÁÕû¡þQ¿ÿ×7m?yáûêùÊ“E¾ÚÞróªÚfjù¹êè“3Orï€WÁL3-ìFܶ¼wû»ÐÆ»ÂdkH=ÏzàÜöÖÄÿަõnõ3æÕòQî•ùåxYڏdý2b:¡â•ÜÒÝ÷¡ž-½îÝgzÌÕ÷¡­tÖpHYº÷€^Ÿ½ÖÔ%ÿ¿œ¦Üx¢ElOôü®Î«ÎS®˜› OðýP&³¡ªó”ýVâ²ç›L¹á¦æ©á¨îûÑ·øwŸ.[yWóâ-h³¯Äþþ{ϏþþóãÁü[Êû¥ír†¾ï>¹cY‰øz¥l‚1‹Ð#Ý×÷Ÿlz4CO…%WçÛ7QÞ}ëwŸjžO»™GEóÍ£©VõõIÿ™-Q7+…Ýg€–ÝùÊ«¶ÎÞ +£âÛì(j7ÿáÞ~8ZŽÔQuqÊíºêmz¸ +xyþX3Å·èé]ôݕóÒʚ5˜žù[k›Â·ï<_à·ªï5ï\ËSÀ¯Øµú£¯êTØóX»kcÍbìy¬]5‹±æ±v<Ö.ÇšÅØóX»kcÍbìy¬_ÿ¹¬]`:äÞÈTJ,°c™3jƒ“Šä¬ë¬×N¾l0 7õëè ™sãp+ÍmOè^ÍøÍ™(‹JꔛiÀô ~Vãåü ÏšcÚ¿†87nÒxs‰m±ƒã¦Ûò¯ìzq*—ö9èxÖ¨ êãqj­_NòÕŸ>4èqˆCÐ +á‚€Î.N.K6´Zf0¯`mS +É;à"ȟõ$Ôôb‡q:"^‡lÍsëœÉbsU°¾›Ào ì ì¥ý/ខšÐ@ø¼Ð½8ƒ€ÚjtØ€иU#ÿ`*Ü +á™!*¶g·îܢ…¼DL­"Ò*„&¿±ïŽÍ¤Ë,`~ 02dþx÷dÊÌOøÏË«V)µO`É5‹à!bÌàá É•(º'PK7·ì¹—?‹ˆ‰pâ;ñK·Ä§,"“F(kc[ ù€w+üÀVÈÕ{>ì;¡f.'ƒDAÁuzà¨äSQ¯gßߤ!·Šï;ñP¦í¼̏ʲ$—³ðÃÂørfxƒô¹ocŽžNvH:È…§žzH€øRž{F|)p¹ÑÎjÛ;i„A|­ÆŠ>y†š3ᓙ Ìÿ.×Cˆ¤‹F|A¹æU£;yvÐI|®Î"‘E¾à‡ÉÄÞHJ‘4gj0¤?ÊÙÐÏn[“x õk*nBÕ±H“%Æ I§#‘ç(©5Oáw…á9fÂQ7º_ Tèi/…å:‹áz3áþÆf?äÙ$ánKû"•ÏÀõ“ð‡¯~fHܚlòi-“+B“nI“#ìÙ ™r‡¦‘“.Tùô}ß8Ki8HŠ÷ø`å})õ'« +Àÿ +¢ÓÁÝÐÔøpHNNŒ™˜9tåɗÚQˆ¿¨Äs:xcð¿'Ȉm‡2J≢"E p³btl =c1ԙ40`M‚C¨J¥Ô0°u uÕn¡*—PÀî¢ÌáÔ$£¨úZçö/êRV›®æ‰ˆ—(¯Vä9Wø„%ÃKjî„Øóè ¦F©S"uMÅwDn™º¦J©S$uL"ìi§[ªdê•2gT®èÈ^y”TÝê•7sªa—t†éÛªoJ›ÁÕ0ëºRt%2•J™CªnK±ÆÉ7TÊÕ*eN©ˆ]8Aœ”5¯½ ­­Œ~Y“4Še§¡{Ôù¨üЛ¨OóDo¸Ÿç&l¢›Hp ½ë‚ R›X[üðaÂ'ù‚?Í´-Éþ`ÆOóǘÁpÌO¡¯˜Ÿ `íÊ~u$Àÿ²v$õù$¨†\‰ƒ¸%ýTÔÒe`Ëo˜;—-Î]Jó +PçÝ5ÙÀ;¾ŒârÒ°î 8ÔåòË-òîM÷QÉý"ê$rˆ‘‚{‰A?E_÷_Û÷SÁ=ÙäÇ<‚xÿí‚{¯è‚~¥Äõn`ž Ÿc$ò‚~±ÄõÎ`ž Ÿ£±‚r‚~µÄõî`ž Ÿ¤Z ò'¥ œõñ÷&Ê­¬èv±rÂC“ ÒØ0ƒ¦ï9a.DÂc¬NÉÓ Ú9a" „œ°a;7L'jå„á‹C0Ï$ Œ<}“xQ—lRb‘—Â'JXEÎ0\ªL½£zo¿ôè‹9]ûføÝúk/EÞgå]͟DŽlóÆÇI÷``ðMá&Âx;o„dËÄ<µ¾†47¬k&_€ó$Ò1mÔ[]+çåz0h ¡q ú%?+ãt)2÷ŒI¿×^ñäGï˜(ÍIüË·ö>úš‚ûtÙíûþÇbv,Xݑƒ>oÇûwº`ÎvŠÕ®Æ!ø‚ˆ~DÇÒ¾à“þړþÚëâ_f`қò¦Èé”dtÿI”±ƒPSvóxÀüǰ†dËÏ9& 2e©@£ò²üçÎt3&Z£æ—ñ“/@âäɗ¢m£Š|ë(òF0Þjj±Í.ú\‚*'aÈW¹Ì¨–m" ]‡„¦´g…õê¦ÛÊš×ÁµôÁéÓ«Ô;I—.`Õ¦ùk/Æ iµÕµO_Ì¡½ZÔÎ`Áë×ÿlŽ h4‰¤Ëí5ælšö•Gcì)Im2“ÔöVž§Õ|IA_µ_ƒÛ6ÁÞÌ£Ô~°—‡ÀyxmLá½ÔÖ^òŽ×ßøµz…­øLl¾¶·á;[´0lÍð&»Ú¨»Ú"ïl`øM¶Cnü£ofù×{sÜۊ×fZ™% u°¿¸0x¡› õ +ƒ·,€?(i¼ª¬ÿ/¬»bÈHþN„ØO0+_4%¯9Kg_Ì¥³¯žSáËWäh#¤PF w®Ùzsæ 'ó?'ö+ÔvÍ4¡ŸM„÷BªÅçæaئÁ)Y\ã ‡%¡R4J@'” Ԟe¨òöE§è¢”/ñ zu© °ÖV¦EkC]Z™È€zêÖ¦^=`õëS9 x6­Lå€)CØ­L¦fµ3í{Aí‡Åd •ÐÏs/ËE<$à@6îVÄ/ÕHÛ¯|qgÀ.^Ï60yjû¡u\®äɪ³a½²ßs)Êš›ùìîOú|t->ßñŸäðÃ>$;ö ;÷íüúÜ1¯ì_”Ÿ²Öôý-ðŸ£xØ·¼Ÿïò°Ï'ûò±¯'û(ò¼›Éþß^OöAäÿyŸß?ÔI‹úçúˆþ© nÖ¿MÞ>ö€mѓU=Û¥$ZÏ@6èÿ¦kMþ4n‰oèC¿IgfßÐ ácfq@7¾ Ù¿ XØâ^P Ǽ åя(jò€iW”^ÞP ˼ EåÜ×ï bÁÿmÃ~­úhÍohMÙf¿mÆSK®É¿ Ǘ‘i£a¿ÄÞ$Éë@2ûÒÎýÿ@3†5ý‹ûŠ­;ê¸=ýÊÆÇò€kƒÊ®O(¹¼ êò€kËʯ(¿< IåÒÿ¾€dIŠcû(>È)H³dÉUì£ù%6Q÷{&‚LºSÏ¤þQVe  `ž ðV•‚LŘ(„ÐßUñŠdуîN¾+fÁԇTš×«Rh]`!›ëAwȾ(v½#VÁ”ºÞª¶ƒìzQmÚ3‹K°<£f–ÇdÞ¸%•Qi€‹HlK{›l`Êà{‡DX°˳°ˆ iƒ±¼›ªÆJþ›êë“c_ܺ¬iíѺ3Èa£8Ä»*wf„þ¥DûŠ]³´þ©DøD»GiýZ‰ð©v®ÓúÅá’î§õª'Ã¥Û»Oë”O¹%–vŸ×¨Ÿ—rí?*¢|JYwIæR.­ ÄCåÀñQÙXE©¬„%gi`¬\…d)+;[bô+.$¬í¬€…dI+2ö +Ç´+!‰YÜX+!YJÎÞÁX’—"Ve¬HVD³¹°V1¸Tm'ÿx¯U”gƃ½£~4´oƙ¨]O´955Ø#ˆZs«­3h á –àT& ’­LûÀaw­Lê €”­L¢0J…åÅ RÊWqz’ìúW§Û4¾áƒ’ +³ë&(ugÖPPéöϪýšž‰MšŒÝ0raW¶zƒÔiî,y +Ýø/ÿ^ƒgDyύæí8ë·Ë¤yѵZuٛ®Ù2ŽRáÚ=mr­Ýæ9æ]Võ_UìÆÔ ®ÍuҀK†ê~É2ɀsap±øön̚ÍfP:Ù1Ï^Âøɳ¿äϤÁ<¦•¨´à r¿[uÕ,Ð=ÚQ7ܸoW]HÀa>-‡7vÕp«Ós…úµ1e:öÝÿ‹kÃµµÞ°}8 &S¹È€bCžýRsë@1A‹þ‡Öþǰ<‹z×-ë€&‚l+ööŒÌÃú”Ç â§«“DÞPÒtЦÊtAo<‘ñ§£y“.Œ!ðé ÿ”.gøc©þ †Âé±ýç6ÑАMìò÷œä‡¯•ìäõWþ—ƒølIÓOÿä俌ú!ú¹vÕyØWàÕª±Þ]u¹ó°ŸÅiý®¯±kŽŽêá»ÌOA¿ 䱍¾ZÍ´¹ÚëGã>Ѷ¿V +;¬å¤/Ýç-&¨XŸÝ‰žZÕþA¹!>.¦r‹ö;Ñįím_aaãËÚ¾Âr•;¿—°ÎZ˜†³ô ÉÇ +¿9jb% +óƒ‰*´~볖¦ Üá¬àQþÀ7#èø#çÐ|uÙËS·¢ +ãQûý!¹9Çûë- +Œx½Z#†Ó¿ hW;ÈrÃ=R4>ça!R HZ“c”UÙq®dáùÝh>u *Wo£Õõ­Â^›€´*yMº8 ýnA. Æ4 ²8%KÖ¾¨QZÓøan=Hþå„ç‹ jn)Pk—µ¼¨S{ µ„š“‚ÌΦR3Ò°žŠ·Mé“ù2yÍAó”ºa&â4´IþWPd„"Îa) +ßµ¯‰mÏBh§Ÿ| ~¸Jx&s[µ¶ù‹µšyè7$ + Š%±|&v îM=ÓÀ‘~3ˆ´æNk¦c­¹ãœÊ®v‚ )3É`‰k:KUÉ­X +ÖX‘3ˆõ kmϊ(à™Vƒ'‘&+G­bùù'ŸxrTä ѝÍÀ›˜4ç öŸÏrºŽ’ p¥mH&¬2xÑrÕ°C.’3G4ôÖsYÚSp g4RôÖdþz¸÷Ìý3ÚĚçU†œ²y,Óqˆ°*¯ã|Îkoߟô"x¿=Ǝ Áô xiþx½]ò© Y„ÿR:»a ]ˆþF.±?Õß@–M?Õã@”ú¬£oÂ=e÷Ð_éâpÇ.ŠÊ™?Ëî?Ì&v:.=?‚o½8· +FKx@k GÂ:7Z# }A# +›ýΦÿST|#‚}‰i䠉c<Þ ß‰D¨áh,ۊ»%@ˆ˜¤N&Dג ìÙÔ¢\v-ã§±$¡UÔã…4GáDȒ&đMQ9âDÙÌnßÉA~cwXÅó;<”ˆ¡È=¨é¢“ûPÈ=éÛ,éxs¡AíÔt0(@Ú&€ö( î&€ü(ûC k@‚ reŦƒ¦: æ·8ùHBÀ§<—ÐJM>۞iâéšxÉx BˆB&ëð#Ð­;knxA®é4Þ© ±ÌôSÓï£Ö1±37)¾ 9+nt$M~ëÏ%I)€CF*}.`ƒý®õ!ž<;smLJ[n+¸ãuoZ›òœÖ°„¤Ín"jôóɝ¼Ðd„#v­¹éˆëw• -9#] B7ԓÙ'Ғznâa~¢a«=;\Ѐ³²nâšÊ)ÞÁ¨M¹8eÅüMà̍õ5MÝϾèICL†é,ÿ"i” [Â(ÊÑ´8³òՒ*Ðgw=l&øBy+ù|úRùʞæØÎpڔ؍Á³t•^]”€€+Ò~TÓ­RðZ2ìªBÝ^IÄZ/BÑcBÍìPMwÕ3 ¼ùe@ëM©<Óò¤.ÚÊ$Vb Vx ç­tq$*Ù§^r*´Ô¦_Ž#rÒXúLáJ3íÍøsÈõº8ÈÍÿ“Ýߕ5aR0„Æçì"?—Åœ¹žØ¶Ò #Ô¯¢ÔÓö͛D;µI¸’± 7"=Gf OCð ò/H ñojIqĞ­µùí¾v K½¨puX#™³;kËÚ£!Qǽ¨LýM ÞÄMzûC„î n)PÔTÚrmèõ#&Wp ^ –lq°jíŽ$ ðDRøÄ}ʹæ´::FОÃÙÎt"ZÁv˜Q±þ§¸Ð‡˜sÐÂÓ !ÄÔÖv™øåìސçeXý5çMÛç6¶‰»vkH@`0xa¿ì·[¨6%9Þ¢ïpâ6âN$ät¢I'Up‡U\6DhV´êÒ4+Ñâ¶ÜRrÍp:¶hOÆeí0ˆÀRNjz™ßS„l4"æøä&kÎ}g 2~© µ¨(tÔ:’*3çšqp©¼±‹Á³¹#”ˆßg±rä`©Ü^LÖМ£a›) +ÏU4ÊùØ!4/ò~2heê,Öôÿy_ƒk%ÚSRLvƔ8ƒŽwõö-à¶6$›X0ØGðXö,­à>Áäà‡ÌmJ­­<’o;ƒ‚ùie”Äþ!qgtTpnŒÄ®¤6 ÊP¡ØÂ4ìô „ [a8f):JX˜>DNss[ÂGO4ªrIs()W²Øq Íé·Äçñ†w¦†kš4nwu+I‹‰$A‡N8篈ÊNŠpx"å3´1¢DbgsIªIP®‰u³/8ÍSig|&}sYó _>\5Ÿe>s;`¥×®8×Ó#÷°\£›‰njÁ²åIÀ=ÐÖ/‘O÷êPYY‘™úp©6ä„Ú®¶I:)'öºÑÇ8ç¬Ù®‚6$_„l +o~@çSf`ã¸=v.œA_í=ý3#”ÐüÄtVäsQ1%#f°UFâ˜-qmªB”Dð“kP~4òèÏIg¹ÎŠôkçY„í»àfüÓÅ»²¡_;­_à ORkRg¢ŸgAuÀä(æÞçu»‰ß)€”Û¨üöÂU Œç3~éw™¾-’5üz€ +¶K “þ]'¡,ü4v£;Ûh¤¸ò"É'ÜÉGú]Ù'rEì:(ÃÙÃÁ áL7‡eZ@Vâ%`ÿ¸$®Ü.ÿú áwOü +øƒ…ûÀh³îÔsñ^Ÿú‰¹þŠÅ-¾Åb–ßb|ð- wþ‘[ƒp84åԆÇÝ©<9{Ë=«ô] ãb ]´«_«æ±dìRp$v‚r¨(ï-¹ƒºœÎ$v–æ" M-œŽÜáWˆÜTA·\¬lvC ²8FÞ(ÆJQ^¶âë¢é¢ZYå5՚™ºFVk¢Q<„nìùãä4ЦÀ8t\å;¢´•õn‰Á‡Nò°DÐÚ]¹âå"ÔÓºã;¾›sPV£¸4Ãõ‡ +sý`ýóéVL?4“ i‡·Ÿ®˜uÿ¬N:÷ ?¬ZìÎÇ÷ß—îž<  nŠà!p§ÊÂtñIL¢.<Ξ§ÞAõEs<¸ôK¬5g™^I²®vÄ)ï&†€4½Z[nÆÍàñˆ)³»2÷yÚ·þR‘Ãv°u߇Z0öåjïÛå²î,¾rÐç?Öa¶Ý4?\bœ3Aü¨£â?çpfõP~Kî‚+º@)ËTf»òHÿ˜GïŒG?qÊ“8ÏN’KªÙjÆQ21àǽ /žò(rj ?ª@¸ÄUÜrçáë"UÇ$þõÙä€uv÷Ëõ>ì¯=èÈJù>ì>7ðtûK«ƒ|CMž’[xðu،V¢×™»º^Gå.êâ%ÕÆwè) ÿûŠû¢_ûûž÷ÒÀì8ÈüœWµŽïõ¦®»>”ùô¿ÐmÅ×-K(’ ͟Jz4¿Ç>”übÎãmk±Œt7kZçQxß<ÇãžÔ2ü†Ñ™æ? ¡aàÌ'#˜ÓÐ¥%;„È: ä…èmµ­ÄIYàA]yD—(YíNáM¡c-…Á`䄠¨R9°'·Ï3†ìЅÐz‘h2â;Ïp,ñÂÌJL)Í´{£‹-Hê,XÄE*[Ug8ö¾=‡AÙøUhؽ´Ý‘¦oÎ2 w»zeg¹AžníȽo¶ôç½OÐ7Ì!gg+Ýc¡¹–CsWˆYÛ¡’§©/#:ão@…;Ô û ‹î&:8~Mµç§ñýÞߦå{8Ïý„žý¬³õ®æ¢™4s†2ƒ V/àíï»YùÎV?Ììô·Þ¢Œok m¤ô…nŸõ¸)L÷DA1»P¾S²Ýz4þªCðêð%Ҏؾ¤Ó®Ðò½æ“¼{¥û—xÌïYçPé×®tô+×:ѓН?þa'v!$׀ȳŽÞ—3ÝØêòñõâGýUM÷°èÏp<=†Åf"þó88öG±.ñǬºŸ½á å¯9JK˯«)I÷;œr6+8ëÿC+—Gïyžàz¶±‡$uÔ¼µXs§Ww"´Ðp§¬ìˆð{#¨sÂg7ú9HÏA¦D…ÐN†Es€b¹éhrBI49L°¤vt&˜ÇPçD0Kh2Bøò{ªH0¶è¥c4x­D^ŒáFâÓÆ-$¢»°ɤϐRÖ_˜MÙD»‘Õ Ë’±ÇPL ,ch)'6³³sBitâ!HÞYÕR cs´TYµr‚K2¢[E1]~PƒÜÛ }Œ§k¡à>PÀ¥3Ï*YÿÚ%Ÿ­²Zâ´´°çw­Bkj‹Jêšxš©ª^ IÀ‘©mÝ.…q‡%ÏÊ ôFµÇëâòr”6κ,D`®ÕJ7á1i³qG«1)£|j­2+›íõϤ@sÙK–%˜œ3MˆÓDÆÅ’Ž]¦C©QG.De–dTb4͵Y9¬HÚìM}³‹ì%5þ-. TƒŸÐ¯‚(˜ŒLÔ©ÌXö›‹K¢f¨éÑˊO ¦ábÒ¾\Î\Á‰~L,÷”MŽ #@÷ÄM"{ü/}ʎ>8½\¥õÀUíÞÔ‡¹Ù}Hþ5„WèÖs’—å¾-Æ~Z_x—%‹¢@üѪ?ó™Ã••ˆòê^ÄRÅ`¥ˆ¨ Éa7o*)È^Kebä´jÀxÑÚÚ+å·ïã¢Ý¿.šÎÀù±mÂòo–ŠXMòíQ Ä'W@qƒ=ˆŠXds{Øw;-ÝöPæËÎ"jû!€=­Ò<ùG}eQÒ ”˜„íñEM¨á æÄ¬C„O¼˜ÊP‡> ·,rIÍÌÄ­³!0‡§Ù—zÂJK@s-[‘¹8pî0p _}íb±g$£ò”Œœï‘”9¯4ÉQ%¯,ü¤­[6‘· ÜnÛy\zìBÿWa±t÷(j°„Uš#‡wËñóäbqþåAD –çÊÚ‰F5—B¢È¡¹’èc áxÐۧ㊠+€‚=ȯ-­Œ…Ù_l㏯ýl)Âb>…÷R%(#«ãT6ü‘ìù|ñÅ ÿ”P<ávQ'"Ï:!ÚEoÅAùÎ} ƒö$lÀžBù ¸Js˜Û.A[äDY5g6Ìd™•!)}Õ1¨¤È5žpÂâ‰8z “Tá"Ã% å× + #ª0Q-ÿ›#‹K‘ŠF$í õ¨’¬ÛÍ+Ïš¦ˆwDPs1 é=D(Oš²0À•)‡è]E4¢iþ½Ê½Õk¢:¬âŠ–¾Fãt‡5C瑥ÉKˆx?’ËÀˆ8Xöœ;¯ÚxϹ-ešx¹ê)@œÖ¡ˆPOM04‡³»$áCÅ&Ô^îH8]BnÆQA&ª&~ô«’‚ÚÄ,øT,eÕ3ÄÞž<¾oŠ/«[¢A¾Fôڕ9˜PÙËç×r#ŸSîŽ 9N³Ó6ÔÅӉ)ېEÿiã]^Õí)HÍ)Åá¿31?l#l#_è4ñ¥5Vƒì!¢vHm¼…÷Ӏ’gHíK¤TgŽBAd>Ÿ„>ˆé T¾(’8d * n„†Ì‰*ë¯#:Ë9G Ù±[àXÞAgòÛrT‘@êáÄ{sŒr ¥]¾¬djîÚ¢­Õ èlÀD†–N~ÿ%¦U¹d&Ž¿sÃÐâðFNŠö&ÒuÝGQs pó ÒhlØÎ5ðØ à×û‰¾ÀÍ/ká¯Ù±£8ÁÄM>lÎxoÓKãè=6³›aÐO}«Hí›X½ž2â›Û¦a)E€‚x%ýgaŐÄ/Œ*ý½W³É6û¶ãŒjo9þ!Wÿ)CàBœ¤lâ»èÐHÀòû¸Dùíw]IÄÖÆ L¾âN36P ù阦‰3 +w÷‘}Ù¼„<Œ(ÉÌä¬rçÆNŠïy"@jî’¡ÖY@œ;~; ‰ Íû™.-ÆÓ7ïZT<äâ%tFêß6¶ /Â>Yà€M+ñe{;‘–²,óÛ1%{ïބ"spóG»^VE¹¯rwœüT—¡KâŸ}Ý#q J½çNQ SЋIÜdG|Û¢üÅdF&_¸D—$2Á½{ÝcJWþîLÎɓ2vw$& š@$Y€ê&I dH Y} â å"L¢dpdÆ:(뫵wb¥|*Uj¾ Gk²Bꀫ º¨.ùz1Õ7U€™ûûÿ÷{Ü̒@@GtµõÛëçç¾_{ß>^¾à{ƒyž·ƒo +òo:ß  ɼK˼ôx—è§Ãíl–Û¬½ìOê´ö"¿:¯â‡Â“ +ðöi +´zb )û}C’¡Ô þÙ +ÔN(ZJÚ£ë¸ ;%ËE[½ª6º¾+KÄV̏¬e¥:Á²0–bŠuê4:> ¿î¾÷݈KRç-XܝüÇwðãYj(:øVcY‚ Ƅ‚!‘ç\\ñàÎçfõe“M¢ªVØ¡hå 0tgÏÂ9ìÃ8”‡ü¼É#ñuTïÑÊǸ'LÞQÔð Î.¢Œ`ÅýdSÈ|»ÖfØ*±†Vt«R›j9˜ŠR ‚7äFabñ«¦?EN#æzïjÄÑ ˆ@¨¿Mo³ÙG»ÖdÊ/jÄè'ûñ•ë§A䎯@C‘ÎU[ûçÞÜÅ´ùÞlôÇç[’ æ̃ÑÌÃiV1”O£èÁE¢ªYPRP”@„„:ÈÖ_74VQ©ê‘ܞɜþ/\}Až¢¬n=@nS®ØL”rHïDÁÓ«˜ ¶f¹Oô‡n`OìÙ›b³Oáæˆ¦ÐYç<ÿ•T —™æ. Î2 7QˆÿÉé;rl¬Þõõ=ƒ +JIúW¹((ÞM :U°<²]2Ð] £$WQ혎ZëÌAE‰]yáî7Á«usŸ.¢—Uhµ×¤6åã³LóؼdûÉ1«±°u7³Ýg s*06A•¦íûѝd鎴×úŽ…ö"Qì}O`Ç%G=JñF-6ÛF^)ØîY?Ü&ÆÅXTÃìGhõ7݃&Â!:Éâé²ÙΝIÝÇD@Ô{u5ww”§:­Øáëïp%U³-Ñà‹Öo–°ŽxÙãŒÎ¿ð_α¯'£Nåòš*Ävø#˜Ó< ³„8E˜õ¾hP½±ó âkpEÀ‚ ­$ÉWêäÇÜs¬ù‡È©ðÌ]æ¿]éÛÿA‹©¾zB]¿µ• b›=”©ìÙd¨ú<“Öµ=›9ê>’j‰9ÿ}ö)šz0 ×êyúJ:JCl¢çñæóOGâ“0IßÈSôÕ],ruߝ:ïAۛæÁÙ²ž8Cýƒ*,½Õgv,ë°+†êT)§bD:ÈÖ>šœëp8[ ·«ûç>Ӝ“®ñÖ mAWéHoڞ“@ æÖǔIè÷6øWâ‡Ñß\‚H¥yc`æ×[8ñ‹–:áêïkȳ#Ӽܨü1”-®~3iðÖN…Οi<ª‘åӁ¤j[8Þ,ÏýR;z"Q—<„Bä¥:ê(Æn`:Dù({۝|ãN¸š(ŽáŸ07Ÿ¤;,3˜’•ŽaÊíiÏ©d¬}‡P¬LÙ·7›"H-lCÖ6!I¾ 1ȍ°Š¿ªBVœkYÏ` ñQ5¬ÉŸa™½©Ï0 ½cÓÙèRd0î˜=Ž×Î0ÈíBÇ\‡G­ö)đê÷;:+:Ð’ø•3P G¹²лuU3?‰~¶3„)2pæ“Sít‘i$Þuó› +¦m=ù~i^'ús ŒåÊ!ۏÓzI•êë›áEÎ)±’t©H8Ê©‘TFwäí3çûýˬ¿«£nœ'W®Êbu˰ˆP}ëûóöÔ,\Ns|›²å ގâi•XRÙzÊã5­\õ3Ñ÷ÛlØëÑ6 P$½n%všž§x\«¹8Väñéà4*Û:=õki£ßiU¶•=õ[g½¨ ufÊ]¥ ¬:Qa8k¥ í9ÓX^ ajŃÌÙ¿àœìu`\-ºˆ0bè߈‚Ž@JBüAáÄ}h6Üàû+'_|•*Oºoþùø%èrºÅ^× °8DåBN%*¤ýÎ(='Í·íOhõ}®pá"WI}T¿YÙð <„Çw¢ s…LQð)lÁÔ£«¢üFPæã̔73&xó!ÓZXy˜˜ 7<ȧ´LËÒZF”×âÌ?$ÍÄÃu<Û<Â>Å ðæ6dóby‡Ì:fÄýS๘|ÓKď0çx³QY†ì覃;øI“S0Ôý$B;³$Dl¹>KTl÷ŒKŠl"2hÒnc†×þ&z&¥Ï¯ Jӌwç8òÁ|áÈ#È¯Š¶WÅÈ÷[c³à+t•–wfe L~+Ho´ðnç°2,”ê>S­‹ù©ûÕÜfä–ÅŠ§A¿ñ.ÂٛC®Š\å*Á›¸Ð"NØÑ•sy}QôI :æøsˆv—`lÏ»­”…HIUS9óé%͎ͩãNá®Íg%N@w•œ+¡®WEoØh-Fï{Ú@ủçU°m—£Ó²ùN3ÏÅ;lˆ,ú> ¸”«¯Qx¹rÚRKûl]@G·¾[3ÿû…JqûYÖ)ɁÿPT§ÍÞÿ¨*SÃKuÇÑ@sÕy߈¶ ›•Wnjx¬zЀ¹n©¦Kݧ9jŽ˜Ðà–‡¸ç)Vf?lOžaòµ1àÕºAa,Àý°ŸaŸjÔ )tá2±ð4ë÷,Á}ÃRJÕB~‹ê¼ +zxڛç +ÑZ]¤(\G÷Hmï°ýÒ»¨÷JɁL]èßU x‡Å-2¶Òä±Ñ_Hóa™¼kjUÙ{»[‡gÆ=ÉV;¦O÷)ƒœgRÔ ÄËHò1³ì_µlx8O!À%ÂKæ¸L$­}}“*¢Ù+L‘É×ácǽhå^ "~ Zu÷©,åàø Î.($1,Ù(zSÃ⇟æV‡?³f!£è«^°zÜó–±nM}6dp¥ «àðú,P@G÷S»v?<͜™‰ï÷,ë&aà­Æ „ËGè<#GŒ•£TëÿmÐb”” ¡£Ç„_bM±Hrü·¼89‘äû±»Õ Lÿ‘ŒÔlD9ááø±¿É6Ô…%,&§—ñ£cÀJÝS·ÿ?ÝYV£'^òc Ђ㲝œÅ»Ó&ðöx§OmE1†¦ôÐíÓº ¿‰Ýs¿ ÿŸy¾Ÿƒ`íÌݖq›º ¸î‚ +y³v/ ÁGó,@Ç^íÌ¡”ȱì]fæf¬.tG0 ‚ ÔJ Ði¯S²¦˜5ùÞ°sÓ ˆ{të½·Ll1ՔZÐfGì®ôpæþ däìæ?= ýÓdü‹ÎÃù¬¯ÿÛ⛶¨¹ÿ½\éôÌùþèEãî 'fÖ±-…,ÙÂH®¾á ¾^¢¸Pó…sp}ÛÅw +à(¹ž÷¿¹n=ï xÖ{Ø›äÎþ›Ýx½ì.ox]‚Žx+kӛ—áéÜ®Á씿ü)½ãÍú¡{éø÷¿H^ñ<{ØiÆj^¸÷¼¨½£m{ÿ;ÇÂڇ*àoýbæ)?‡Î3OG"Kr“Ë)ÙÞGD0ÅUÙ¹½ú)ê¶à%æ]B´ ðsy ÞX÷}8L‰¼Ö°ux²N~f¼¶§¼ÕŠÞÛ3G&2Gƒ=&t¬:8 ]ù8sC˜¼š>ž©Cû—sð9ŽŽì\áé™Ñü柆y1“z©¿¥> 4)ë$u¼ЉO½HÓ®!,öCüÚÜBMÜ +Fsð)Û@br0ˆ°iãY;=oþêZä +Ú¯ U´œl¦¾z]P! –˜7†júkíýýû}õµ7I{gdv3íŒÁÔðbæ`'šuÂuÙöi×fZmè寶ô½³°§_ÎGëyN´_E¹Ï‚Ð Éæ×ç`9i2ÿÞMMª­ö^bzè?ÜZïs9%Èo|6³Tl„nÒ¾úТìÍ=݊5_}jV¼º¶©AŸ˜¥§Ž #Xá"-#¡ð\þ•SžnN*s¾Y.·ë˜F¹„ÓAXå¡ÞÍ Cµ¸Iaû¹)¶³—ÖZÍÍ­”á%ÿJòZ­ê0Z¿e+ڛ’ܺUíÿIW/±˜¯¤¡qóØ-Â&€Ásöþ¾{ýq­_q¿‰žõp|á=H™Q\¸:÷­͑sJ\‚§¨§R´QS÷žÿâ6Å;Ô­=ä58§p(÷gÀi~Sb‰´Œœý¤›í¸'è塛I#‘çrñ5Öþ$*î"›öÛñÐ¼ßÆÝt/7d܇<Çênº›è¥…æÀÕ^n¥¼T/7¦!¨ÔŽºÈ^oÅo ͽnt3'tˆ)V³ííмÞe¼T/7à÷«ZÓäÖ±íÂ_Þ;%ñû©.œCíÃÁkÀä&;ð#Æ ¿äC#Èb÷„Øýá,<Ä £h-´KÛlŵRöÛAmÛ/l?z%ð´«ÛW né{`Hôü.ñ{nü[wÊÛ ïV'X(@G«7D­§X-*•´›ÕöÊÚR‹M*¶€ÓMêû¥móÉþ¯¼VÒdZwÊÚ_É6d¯‹ëâÊø¦¾&¯ˆëâ +øv¾³¿ð‰ˆpȿٮÛ!Ð$¡åÂgB+ʗ²_hš-ƒßW´Ž?*ZŸÙäæTõÿø½ Õ)¹0:£ÁdåaÂüô–ÿqÀfÎ#ûâÞʩۂsMvþ´'9ô-QõÇÒL‚}3Waw×¾ ͌^·Ulے^éÃnŒ©ËÌKzé§PÐçg(¶¾áÅêé+ ø0;bÖ +Í^80á5.Kâ@Üy”Ä…Ù.ó¨ÄäãX ò“=ôO(±4Ãʀz;Ä©$yR¬ò¤õ¼©§VTˆC1&¾à‡±ú@ÂiKî°gãQ½÷ƒU—bs_ÍÒx ÆÊÅꤕÁKh>9:X²yt¹à@JȜ-otÅRA ¼4W²Lݙìò:ÕiýT»’ ÌxY¼p0qË\KՁ6Pò]TIt$ñÒ›Ý +Jx +Lú_ˆ¯Ä¥y’V}¤PR¾Ÿ +‰{ ;’_ , 78ÁoH:Z±'fÛL'T޲×k, +g=xµ„õ·X¿Üþh m |°NFJ„K Ǹ(ê[„Â>`Ž( 8.ÌI¬«yýš®¥R3wæùj‘«ó‘òPU~¬Ž*‡Ç=~£LþrR(Íd(yù L^¡™'Òý„‘Ã&òô3„j› ªŽQÖ®)oå“xt·ý™÷{­‡c£ì?Üp #ð&¾æ$¿¯ñч} °ïèçKáÓ®GÔ.•tßÑjsÒéfKßAñª;bVÄOYµ¶"ká…ÀñîÃ¥½OÄnºÆ¥æh+6ÇbH­¤”>¼êÂúëx^^bkä‡ È”.žÌÐèÀ¡«‹QV:fUAÚÊ6ÚÁ@)SIÄ]øÃo%†ºs|¨/µÉhçÏÃÍ¥;yQ[“ºº”N4ŽFk_°Å»Tqƽ2\è¿Å×\wӕ/Ä0GRxu}֑„I—:²ñ¨h­N=|¤%D].$“Á€ãW”T“Ä3£§‡PYKÇÇh‡ÃbÇ&ÛgÉ 5€v*2¸`K©Í%bµÿJ£PÕÝXD¡`YnÝ\Á°WšËa8ò0I$¶àkLk5‰?"ÍÌy­šÐ=×à°¾ìM0’ñH®î9f鍀-S61®`ìßû·–;Ue-hæÿ‰J Š~FÆâLé“ÂÚ‹)A<¹è5ZiE×hPðç)B<¸äZ³…kBþ>×)» +~¶‚²:ö,œÁe&æh‚Åÿ@wS·ªÈ½UçÇáó•}“ó•CŞ؁Õ" ó¬è_ë[¨Ê:Gׂèì»MÓÿ|/e]ÃRiŽ˜dGÚl—’µHç‡Úm\ûtGEo´EK¯bq0t¾æGCÇq*|àN/¯ªëËS¦’ ÆÜ)DÃú%Òuú|mi˚5>çæ 3Ûnåtôìù’Hºj' sïÂE-¥VJ÷U%l+ýv“Éê‘òS¬œÈÜ-%óݞóá•åš÷NâJď(íQµQ‡|`l´~C–gì™êBÐüú`‚Ð?LSXº`¸jZ ŒïsZ‚å¯M3ò%Ñ,†I “.#/ñxòåâ‘q’ïêxä°J”´i#—RŒ'WK¢’ÂÖAL©ÉUFò(V§ÃDô0x +®ž©x|| `ÌI…ÔþÉ{;L±¶”"—½zٝrɇ€[Y:((õÄjæ™làÕoHÆÔw¤´æ´rý¡bPCÊAìk›]k¼±·B֚A˜!sMÜ!Ñ+K*23]GÒñU:Á¤GiCIŒzŠŸ +ös‡Ê›?6óȆŠ +R§Ž¶§€wGà¾ÑÐѝøp¸Ùoͱ؃ ÏdRTÌ=èøŒáôÎBçêkÉ'.Å¿•W$_h­þæ»ùáÀß}P=ÄHŒ v³Ì˜AD}0c{þÎ^$€Ç…V,Îr=û8µ§õ@ö9 PT}³ãwÉmÊÇ!Ý\¬}s;nV9ãy“ÆúÆôÑ#x^;/X¶ ÐA½sDî8šù´·g Dú‹µfÖôpôÁèY…e‡À=üóú;óË>Ik¯ÂXÕJ橀õÙ5Œ`Ezá`÷çµÛér?äFuð¶f·{B°}‡AïÏòÿjڛžÍÓg󙞯0ò^ÿ–ÀKá&¦œK‘¤vˆö›7œÊ<Ìæúî4îñàðú.|@PîՊ XJ_Ÿ¶föÃD½Ÿî +úrLВÎ[Ÿ•Þ9]{Tu?ñf>J²W²½¬m29?¦Wäfu«qùÏÞ¬Âÿ˜¡ý©~ë j…ÛώBìò5 ¶].ÜÛ#‘QýŸï9Ïôóþwzÿ:³¿Ÿ†˜‡îH®Öࣷå~;ܳ1{™}Ø Ó+öâ&oú‹Ÿ$i ÜôV4u‡ù®÷_CuìÐøô~~WÆ¥øý‹‘ÙGs\äW^ûeB³>ÍP_ß+ç¶T++üÊù¶T++àÕóહýUYr[¥nշիçê«ç»WÎBgê,ê„uŽç°Üv3_ÅqoÞÜ[û×ÿÕqoîÜ[ø·ûžÈKsÑÆîk±?àá× ƒ÷â{’ss^jÿÒ(«?Kûù—Ëk<®+Êÿr¿Ü¯÷+ýÊÿó¦UÍ¡÷í¼k‘3˜ÔÓjsڗښ­N—SÞjku:¿÷\9‚èÓk~OoÇù]{sê«ñ#'?,Šݓ.¨„*豞E[ÑõNÐZ‚*Ô8úZ.ZIvÓ¼¿S̊•©NÊP]²SԔ¨Váô½ˆª ÈQ,î{9ù馍ÓÉÞ£IË2’”i%ÚH!¡¶;ÌwíTc[9xÓGÈw4}7GI§“Ǣɣ;ÇÕ`h¤9I€ú€ºÉkãHÆ ~f÷Û¬;ë˜v™zÙøí/r´â9Ä?Âtot’4édyª\ÓV)‹HÏïštòræÊ§&>†9‘ó–ÔdŒ<劂âs—?;9lòTtsÈJOÇ +­¼ùó,ÁÎca¾39q®‘!£»!ùW0ыZ÷IK°©c¡Z’ÓX©eiÅO ˜ð“èed$åãdU—ñ¼9Pû@ãùY”ÿÌQÒ&Õ} +ÙÖQ6ÅVÌ÷ª›T ½Ú0ÚÏ$ÂM¢-Aœ&‘‘m¸"ÚA„œz¶ÃÚéÀWpÞðnÞC؟Ks±>vZ.ÄúQ±?’£¥žB·>áF_ß±!“2¹Ø‘mtgKIIC'9Ìbn]©9©6¨´È5Í1A¢egkñÆ ÒD¬ñMzøÁðeŒYá µm’g}kPk6¨ ìÓ~ƒF…d“M #ÊeÇ}s/܉2Þ"L¼¼I–V$Ëu‡2ÊC™dÊeÅ¡)ÐÇd©FѹèÝ/r.92ÚWLšpÊ.¡~4<:ŽºK‹í÷¾_F¶÷ím2ÑӛiT7¶¼~ª¿w}ï÷ôžNõõUþ ”­¹#œ,c.H埪Áܖ¿¥u2ñ;ŸŒeÆ\òpÇUËÑrßþ31cêyºÝmÕûRžx:ªýJyã¹ß±.Ûø%<ñð6q_>GUËÏ0?ñ9›å|ùW,ª3x~|Žðÿ±8îc.ñO[uþ O>^,¨­å¢{º™É=ëfJ””õ”ýíÑjÊzM: Ÿ]?0àô…5Ží4Wæÿ‰Uæ,Å0“Ä›÷ˆŠ +b.ù¹ÚïåºE«Ó,¡?æU¥M)òÈ­FbŸÑAÓ"kìt˜¾*odnJ;a–ÙS¥º.”( íµd8ýô{g¨Ðh¶Ï1 ꊔKCchÚÇp‰8û4õ[.õÎÎÓy¾sˆõ3‘œ+@Ç ê¬ñÔñ›õ[w8‹7)Îíªì¢·•:½¼J$?¡'‰*énjxЬ½’?Mß×I«ÓzmÖÌËTþQpÉ+IduUÔÌtISù$âˆ\ûfjVY—Ш!j%Þ3:n´é´VóY•0÷+‡1ôæ¶*aהƇgTÖ­‘ÝS𐨫&næ±Ã1Î]*îÌŧçkÁODÄJ^©þE´7'œRy_¥' ë§p3÷¶¸—¸Àüü üpzTåNÅψÆX¨Ïž|ôhÑûSUÞ¾Ÿ +É/¦ž…]4ðÒVÊ2üEÜÉï£èøLw¨7ÙÔîa*gS"Ï$æPßð¡Lˆÿ h Pó‡šÿ +@–yÛ@"²U:)‰¢¦ Í)Ú¦¼`“:œ³V—ü³:(K-Á‰ÔY>¯U*p+Ó”þfI\ÖÇ¥"¦®FÚJæhŽ]ªÍ&‡ƒú(_Ø`ה<©iCj°’îš`§ÀrëVTµ»œ8ö=‡Ó…sR6ÔÈPAZóÒ*åw\û»ŸÏ\E"°‰Ý†?ußbq'ª"<‘Âìü‚¬´¨ÝS¶§è}·e-fþdf$ÌìÒU?›ÍOTùAÝ%š¢¬GÆ#ª—™Á·Â¡ò‰F&zïñ:'hR‰Ï€oáñžK#¤Qê¥4‘ì†[F)VDƒ_ÏÁ³ôçìu¡´­úz¶Ñ~ ì¾ +àR¶Ì?±!÷EÄ1— äÞÉë<4³pVã•I\÷ŸA²|ÌðRó {"¥ÈӀkEö˜³ÆÅ˜R[Ëè)͛AM™Î¥¸œØ´¸Á(ú`ÆNsìÎïÍñK,_ÈkÛm?Í5HܜMüp…5}¢ïhrÀ»ÛÕ¥ÙºŒhœ¸h# ,Ÿª–Eê’ K Þ~K.¸“Ù:©lX»Ëtã< ¿¿4?\ÐùL±dõ–#d󱯓ð;xgÙiìÇÃÒ\gßÛ< +ªãe±.18™÷«KR>­€¢;¢ÝRCê×íR>\{ò³îãâ9—³¸Ç:cöQ­ºŠ÷ޞ>~Ç\ýS¼ µzÛõš½lß¡?t¬—‹ÖØpÊþÅZ‘’7¡‹£øÇüì[lځËÑeS¹Ý¦™²ݝßêxASýèF¹¹©à +ªEâ§|UT9JñUQ$*wª|žì2îlhÉÝ«:9óõ­¯ÄÎ'\UêsíW¹©[¼˜»€AÊÁLô¸Y&vÔÌÜ étUŤ•›'Ú¡•ƒ’êT$IàÇRúm?£Õ¶<ãú•ël ùùŠUúÛk¨#\O¼ßÂ|yðU#Ê¥Ð3q#ÒþŸi۟<À€›…Ö{Þ*>VKlHÈrÑäyšÕú³‘“–È«Ó8NleõuÈ÷‘Ä&k»“ù`èS`uRS÷£Ž” y2Áð½½ÝTˆNP†®9vƒÅG%O&»D˜ÿÇGñù)¯¸þĊזþäŠ×|¶H­rÖɯx~ç›ä¬‘ZþDb‰ÃØtS]±<#õ$V¿ý)¯Äˆ‘ZÑúÒ+[û„Š×²ÿjEk½ZEk*¬xøQ ¥z½§õ¥c§~Uì“`N¶†LQ€ðŽâ,"AÞºxÏ+xåxRò³‰ëÖeIéÏ w“Å¢°y¬â7·4ë·Ø_d ´P•‹õ ÞÃó[AO!^†‘SÀ$|ç·Ä-ŠÿKxG^KqBYõY/-þÉ,ti8èdrŸ÷¯ÿÎÜà ’ЍrÁŽzÖ¬¶§Ž33™„ì“åÌ7Z¶þ>3sØJxøÇ[ÏÖ ~ëiò+ŸcòFº¬yy`Nbä;-¬BÑ¹ä Ÿs ÙÍÙT1u Ó!HX÷ߛý™Û¬ÞÞ¢NÜðWû•G«û(õðüCO™.è¯ö +ûå¾X¿°t÷:Ó[ÞàY{¸·ß7êŒÐû6y¶]ÔtæAòÙÇÜ~F¾gàÀPöŸh­OþŽE³ÄäYñEl¾‹Cÿñ[/Z¡/N¨‹²ûKlíý{qþã³Wºÿϐ禾*F×ïŸèíÇà¹ÏëΑìéÉßw!ÏKÑéÝj¾|ŽAž2Øœ8ُ>G!Ì~=¸Ð*c§ô»·þ5rWZ¯Ÿ*ъÌ~zÙדï8çË!<‡î¯ö; °SDE•Q/×PsaÀ»@ªCåyš©t²ÿ(Yõ¥Óá’ðêé"­”vCŒá-5@ÆÌä4)ðíÙT*(÷²7…ÿ“Rȝ@šY3ȵìЍAKÉáôJÜåhŠ'H Pjä‡Ýäڝˆ„ÃWS}‰½/‡ºãõò>il=‰Ðty£[ìèíå҈[ýҙ}ñr»4[¢ÍÃäA¥ØE®… ·¿õäy¬7e]ÂíI½7$ÒO}rméiE™ÍºZ|êùH•¶®_ÍD›&ì›oi×Kb $žrғÜóÓJ!Ì÷õù%È_ª¢_»E4iÒ,™ý½6xüq¾™#¡æu¸9–On8ãd2Á0;)5S×CßýRl|¼š÷&â&ƒyº'Õ$Ýî$œēV$‚j¹f’9’µ¶œ¬òÊØs‹\zøõºPÙ^ìarXªæœMàÉ©´`¬¤œS·>u<ׅ¤‚uÞ¢™9S¼Ð·‹¶퇝‹ úÉâ+7#¢Z;XWZ¨íêг@úõû^Iv±5JàØTŒ¯ ÖÁý +;4çääüØ©ñQS:F’Ô»|å_¦JÒèÚ-º0…¾¾û´i;?ٙ™’a$“0„Àd +6¦_H`}&Ì&E‚ +†Ô¬ Eޞ†`‚ƒ`À¬ÌùúÑ|ݾ¶ÛUo­µmµim$Šd‘£Z…l¢¶ü\_TkRTC?¿ÿ¿}™$’"¢­|úßzï½íç½¾ÝÞoCw›Î{›½ æózûÐÛÐÞo=üÝþoCzÎog‚;ÚÞwþ¥ö²Û¶ÖKÆ ŽËt·£¿<…:ùû—5>ZØîXª$Íó`4Ϙƒ܉Ú;Éý†$êÕ»,ã™ñ´Á𻛚Â>Ñ¿,~Z8j×·LðOµ>{ùµ÷ùÉ@ˆÛ7§‡÷Uò ¸œÏÈ^w4PkŠÇ¶/h# øB¯= åЎ¬ Ù+Óß³1'sÑZ–¹Ÿ<ÍX?ÈXGpÞÎ +'jH䫒S݆pÞÏñ-7Æ@yCtžÝNŠRÇ_?¾ßãÅ)£D%Z—õ¶ªsÌB[nu·Õ‰™«|k¥¬i "^{*ØŸàS7Æ[nInt÷#·g[‰u‘÷i<©²d+·ÉZ^¹ÂÆ­Œ:Ž ’À«­ ýכûôÍýߛûpo풰#,էŸ~Ž·Rg© ³~Ë¡ãE/Ú"C !™¨ç­7ke9Ðu•ñÍÚÇFqõÏÆÇ£獼Á( M¡þ*ä2œ“j(^øŒäKèᬽ×IùoOÝפ>E5|"gGbÍSÇÉ ÝàWÓÐ^ü֟1‰µo“t|×XÜz>9-%qÊÛ^>OÍuó  zújø³h¢RÐ!µÈ=;Ú+ ¿'º‚8EKN1ó…ô‡ƒéCXI«›ÊÇIÌ²XšY1øÝ÷D…;ã_ÈX2 ~¥&Ûû8i0>ãØõ·?'؁÷>œ˜×±–¼­4ìµâQ#äu°&fŽ@õu!8ÿ²”#Å3~{Å)øˆœ÷ÉÕW Á½D0Âu }÷ƒ{…ðғã÷³œ—ç$.[Ȕ5˜c çK-éôO˜薖Àµ½èè¤ýzîZÿQY)!@$_Ÿ¸},iE¬Ê#çîIN•ô'ßVƒç&¼‚ß@´ò`FÂLdi*þ ¾ô¤c6—øÎú äIƒ5ý0f¾Š4ý9ýOV½7Ù-] +Æaev4´7œ¼†Õ&FÀiQ ×ÞCqËCUùaç»evÂ~kêÂ>¶²¬W;ÌAZÇ6NxP¿ýÉrhoü[ÂIaxn´ýqůé7³àwã“*‰ø{*‰w9ã}bN~§˜¥ÅV×Òd :õª¸Æw*4í"ðš3ŠòŽ*L®U®Ì¦3T=¶ûñ–Œñxb+£¸e¼Ov¯|x›U~Áâú"ñ9uuc¡»V¤¿éŠ—*éAë“`эMÒ©„ì´P‹ÈM)¢s*¾•>kvkb„÷hÍ__4ñ2¼’ËxOAùR½¤ï¡¼ä;‰Ãx$_Ÿ:cg­ÜBÚIØá”Ì ½ v§‘¿Àåck9zuagmkøgYó¸Skw«m_VîAg˞9gˉ0Ù+'­‰ ¤ØÒ°…h!Ù + +Éÿ.xI—òÀÊÑáªÇÜÝo?Y¾·ÞƒÏÔçÉþë‡Éõ£éê…üö>™²Ÿ ktÝýhgAÔòÇ;œì˨ÚÖêp‘ûÚۇé}kÃdø‹9GÆ|ÏÃ†Ó x<^Mð6«/m# ­ÙíS˜mcä}8îÃméGÈC>=¬d\š?À¶5wß7Ø´tŒhY[p¶?vR¶æ$©±m‘±nDÍÃG@´qàC³ÞîÜæÔiïM¢k&ïcíÉ`ƒöoÝOÜN‡´˜úÆÚ×yü€‡¯tM®ü¡È£Ïâò\SI?F±é"žXëöEoy>p5¨ÁGÊêŠX¤ ÙÜ½ ««X4E.† 4&VqûÚËóz Fˆ캣Š}!ïØ´æ~P¾ÒuE1D|] — qxïN<±Ë–¾¬_uB‘;Ê0aC¿u¿…›ðº;IÁMÍm1 íSßlJW&Çv$ö5ö­ìÛ 7.ù9Ï!\pÆøEg:¢CÕþ@ñÀQçÀa›% Ç÷]k…úsþšó?ô¿¯?Çâ>OÍҟ?ô§ÏþžFìö“JYÿôz| ÿu\i}œÿíŸåH#1Ò½?«ŸúSçþ—ýYþ>:c°Sa&ú9⇴}cÂä+sԛ +dÕÚu%™—P LJrçS!ï1e‡Ãk»€Pùà 0õßÉWfÃpyïE¯oI´ØÃ¬¶Þ«©/­IÞà,Ál¾=¶6?±GÅGºÓÀYeÄåz›ù‚í9ŸzGŒ¸å”˜4!LðWe­~p‰¡Z,µY¡6ž„¸f™]0Ô¦Çé|J™éÖ"þ¨AÂïk÷ì2áhËУÁ%j¬Õ^ДÓ4R<]MZâÐÂ~s•:ÂLjõœÏy£Auà OFKjqÍúËß°Ôè/͸ Ó-/IÔ*qW«1t=³UaËÞi0I`ØW´{ȍ%¬„–ÀRWïžy-lŒ¬¾³ÌóŽ]þv( 6FÀdüÉÅ&=؜¹¡pæ—Z£QÎt‹€TÎG &u½C·IŠ?ßÊØ”ÝÞ¶ˆë0÷æ>u%ê$ѹÃǼ×cÙ÷ºÏd=᫋™æ´r%͎*;˜8ÛK(FÎû £#_WÖ+•<­#/£!é›#å ¥;ÙÀoÏ!¥-v2RÁù; ¤dfêËÀ‡œ–6!ßhc{¦±°åüÝõ&{ Âwê{ëÄó÷òÜ_´áyÿñ°uýïÓ°uÞþ݃¯A=þ]ƒ¯Ý`cöØkæ>Î{ùØøØL÷Ó·» Ÿ‡;{°™ý)Òìùq†G¶ƒ¶½ØLûƒ¬3^´ðM6•°™è'VÂgÑÎÉØLçðÞÎÂgI;°™ù3~æÂg=êì&{ÌGùÓ4ÿýÿ?1ǒ~W‘ñÄàl´D´X‡¶$tv +óz4tÕ.È}› h$]z•®·„ ý–ÔŸsïöÿE{°½üoïØ^õš+݅î£û¶¿±­Wì|Êߥcä±H¶ð셿ól+cñ@{ýÛ +ß·ùö»:ßoa[‘ªòØÃBg +.ŽÂÁ_‰Z¶ÆF(ÂÙlb17Ê×Hºþò×Sí‘¥ô“²c+§ŠV3îsÈ;%ƒÇ¡b´z°ŸÕ›Q¦%äF–¾%¬ºãƒ×(àÑÊ®¦ZdÑ´/·ÞÇîf?ªS¹ì‘Ðíç.âØÜ4îVéßµž4¬w1é7¯"nS9óÂĬÍ?R†Ý +¶$Ko´Î,¾étÛ$›IØm)£a`›JT¡´äÄ‘›[¦UJ4yLâ‹%*6Þ¨Kü ^?`ÏKÓ8[þþ¾Ãþx¿°[7õ23¥[ëÿ¿­ØÍPšpân•ùœ‚ÿ¡G¼%}˜;Ÿn±~³¢äkw™L1_±=Ž½?JÆ.Irm±×4—ÛÆiÅñèvç(ðº¦ÞÁz£õ°[D`¼Ï+ä¿f â$™ÚÚNíP‰ÿËdA€l)‹ãÀ¡Û·³,¼•ää·+8͂ìb²FLvžÞø~¶ð½½ä„³²¾¾u¼•þÍäQ‚åyX.îSû0^Q,l¿Wý_W»CÍ‹ßŽtÞ5jâyà9å¤Ëkž"²¾¥Èô¿òñð + ¸TÍM• )\(‰qÚ³ƒ§N•ÙKFðàSž&ø÷ÂÚXÄìÙ¥‘°ŠD´Ù^m)„KFI›¯›§â“ûßk‚ڽʐ=ùìE<Ũàݶ-ŽPçÍÙZG“þÂ>ÈQ­U{ –Ùh™{tVÍ?¸3¤°óÜ ß¤\.ðn Ú SœÊ§÷Î-R[LÄø7ð 2¢HzÉAíÂftTnAüd‡ŠäÚ²aPìM†w´ê4ڂ\–É„]ç Ù[r“{;{¦–³rGDŽâ¦æ^äB@͜4Çrƒ-9®·Þ»@y¬Š–Â:AEÙ°^ÀÚjÏn4žΈöð,xÍ+ü¿Ye»›ÄŸò†3ähÖýJƒwí¸ƒHÞÍÎw:6øòZý®tyÑóUè)_Vî•þK‹Üø“eqh. –þF÷êחµE®(аw¥ Ž´'¸û¸–Ò ݓ^ÒoqS“ß^Ã.ô\wq8ƒàŸú帉eû²ùºIT:Œ „O¨Aï±¥U¼Ò©éÓKQÏä‚÷Á–ßÜl®AƒŸˆåÈüÖd}äG2ãwÎ +§ñP{ö£b•,®MqP äìšùX_jZ—po*Ý9&w݆x|Ã_W +'™Æ"l~khUiÇD<œõBf;C·¬ ,ÌñšŒ×áN_×E°#N¬¼ˆ³b8ùÛLj üHšˆûó­ÇOɯyœ9]ˆï`kå“Qø½¼®Ù •>ša-~Îètº_.‹0ÆÉ¯èpy¬Çµ/eìf0¼øŽt@::ñ́D€ ÷^Oà§tàê¨Â¹©òÄÈÓ»õŠ|N• í×I½«£¶7ŸîmI‰±ç¾Ú#Þ”ÝÆÍß\|VÁe»`¿ï^È3yëw ||&Ž}7³Èô#Ó9ä™z;VËz;ºÅ½“7_íô"Zkûv÷QwHfÆö(¯‹aé;…Fl&å6¸êC†Â#PÏÉÒ²w1lM äs‡â;˜²kõÛ­3áÈîÎߎ^ˆŠãÿßlÿöŸÓÁ}aï +ðDýÖkìÆm4™¼ÇÕÚúаÚЩõ0U?~ΩP\}«!?¤Ö†ÿ²Y_`œÓFYIVY9nHõ?ý’×¹Oöì0ÙI¦nÑÓÿ *à ¢ž5Îu†Ž¸¼?íâø2Œ1&¬1æŒ1Fl +Z£öEªŸú«\‡ž%Î?‚ysZglŃn›Ø—^هýráÿ¸¯TàÞ,?[§ìíŸÿá×>QòE½¾Šûmÿþ•zÿú™½Q/¯÷id¨ç1CR²Óxj,vC˜£ÈàÓ³²§Ö¨FýïZ‰nnÅ0÷¬;V?-Ó+ò¿÷sÌ`KjþÈÕëÔ"‹þh>¥h;v§ZË݃õ‹AÿºYø–Ðl¾ºæw7ó’ø½ÿÒí²W;v_êKx2^UŽá¾‘¯uUòúýž¿èè~^֋ƒ!Îàíh8;\?þöô½Ïe´ð¼ö?¯eÝø–oæ‡ìšË+âÖ¿t= $ó…*çr€‚u{´RTqG«ÄãçDÈô¢qŒÞ£éȲloÊb—ɸ@ á´G왟¦ß’XªçÚ +¨?"‚ìo–F+¬?_‹j«d|ð@ʝ‚žV(•((x¶2p½0b(ûø>…¥ÚI™Ë~¼Ã2&\äK$Çh+‘5šÿö¦‘yôÃÿ9äÌ|©`ˆK­‡ùüî{ zû7TÕ§M[¯ìûOáí~?øþk< Ͼ¤ìh¼÷Y)›•]š²x7üòÂø£h·ÇËÎ}„ûöSìçåyfÆÆXÆh.5“¹–R–=áes ¼ÐýE:NÞDÐü.š·E¤ê:.¿³¹ÞowÞ/¿ºü?!l—vWñ~5ìØ,ìò0$Éb1{¢Çcýæb³8ÕyŒ¶o +ã‡s9uøZ´OPlQÑoøwƒ€>nïj %à§oíÐ)Ëä +ñÜaü)Ü SïÝ"ÿ K;#IË +ÙzÄ °yÑ)›Iê/úRþÆúÿ’Ê`ßÙ__Ýú—öwø}ù¦ê|û¹¶}lŸEþ@žvE>‚‹ýr/økʃ^¥t_è9¬ ÿG¿Ó['ýKûëý†Ñäµþ»Ô³¾¿ëð3ý}ύ{/e콗²ö^ËÙ{/e콗²ö^ËÙ{/e콗²ö^ËÙ{/e콗²ö^ËÙ{/e콗²ö^ËÙ{/e콗²ö^ËÙ{/e콗²ö^ËÙ{/e콗²ö^ËÙ{/e콗²ö^ËÙ{/e콿mƒÇb'ö’ŸÒ%íDþ•ÿùÿ,©Äࢯu¯î¢÷J÷N;º^ïCÝÖ}lÿÖÔ}oâú×?_~CÅÌêü—yKÞVw™þò»¼Ôñ}Åäë_;¼»@ñ, æ°ÂÀñƒºÿþ*¯,sSד]0ù¾ïáFÂøY¯•äBÑð´ßVº6BUÜî5…Ûa)ßó®³=ÿöÚ~M3m­ ÿõ‹‹‡`Šfößä£tö£nè=Ö*7þú/öP»FâáýÚ1p"göÿý¡¸¾Ðÿ½tÿýš.LÃû…DŒöNJŸ2»å%=¿Pl擹xŸÝ*·ú'/«°›áÈé³µßâNÊ`Z·³¸,I}Šá½›Jwº]ÄÐ;5ljaôŒYTÃÏ1”¤‹S ûdŠô`â.“5à¿Tq 5e›«­9„÷Ùýó©°<áïË K9˜4ÿfá:O9x›êö{§‰Û?·Ýú{øÀ· áë)yÊÎw¡ƒ6Zl6¼ì‹Œ,{÷_UZ¡yx„]P]~·ó…<ñjþ*Óè½Õ">±òPV²ò£`”ÓÏIàzìG$–o‰†À È£™PŒçŠo¼ë築fÿLïj×êbO7{â/ªÈñÍ~$´ìúxêgyù€áɖ&c‚R†½ÿùiãÿùŒL™ÛÚg»ÃàM +¬z݈ëϛd +€éœïWÇpLþøM†fÔk™“ëê.[ß`ófxý¦zÏz[Y<õ\P¬#è¬M:8[‰ÔéœU{CÕ£½,íëƒF5Žž¾vóœ–a bShz1ŽdøÆº{“Œr“§Æ"oܬF1;ÍÏkú1Æ9ՌɈ“?*îÜßÏ'Ïd+³1[•{&'©Ñ`o‰óˆž;·êäÏE7xÇ0&’óÇ"ÆM©Ì»”jp‰(-f‚ÞÓ°<ÔHñ=à§ØøD­ J…K[Ž[‰Î•¨üB xÏ^8J^ŒZ“¶ +fîÀõ;ï$̳§jÞÏqj¨­¶$YèÇü/q 'ð4äÐ÷1P¿Î‹ži¢Bvƒ +}V ¥'?†ç䊗ïaß +ßQÎB˜€–³¾Á¿`À.É«WÇIÀO]v¿jU¡§s"ã!šN'zNÚT™èZIöžAÑMÑ&[–Â¼)í`Tð§€z\í_JS‡‹«h<Å –òàýˆ)ðZâ˜Q¸ z7räßL(ý棘±(˜ÈàXÓ0'?¼#جáë“ MÀ‘æÜ‘Ÿá™.ͽfdé+ÌÂÓ,ž*á7dýÖçMN“{9h S>eÖd`µ~Ä`j–t҃Æj…zcF*Ÿ|³øræñ¼!î_–ßM‘®¬£a‡€¼3Ûz³P™O[¸œ nâû€¡Ô²hŠÉŠ'ùUx"¢[Ç.7z£Æ,NFan½ å?á9¾ÁšgäT°‘Óªl†y¶çfH·^Ÿ–ydÁ:©…{ÓÝ~ÑŠm>,Ú:5Ý¿ÄWy• +€Ág@†á:©ÂRèĩéÿ ²uSª×ž Ӟ ‡ ÅìÍ¿%´Í# éÄ~ª`p;k÷ý¢—YÉ¢¹¼‘‰”Mb_»ÁzŒOt¨~[p·ŒÖÒłÕÌâôÂ+¬Ì{EGÛÙ°: p`­ÚåäùÄÚ!ê)Ï2?‡û{.ý8/A¦O|®™ ÄÝîÍ¥=´t¶ìèžU¾ïØsöÑÂÁ_£°ë™G…<8ÒÌMY@ÄDÒíÄʽŸ\Ì]Á'šu÷«Ää ?1Röl Ð{°.\;ˆèÔï³6zêÊöúüTMs˜ÍnEH@ [üͅokæÛXóK¢íËül Nvr9I"#âù¥5lȒðî´I,ÃvÄü° SÄÃÔPx?"Je£Áx–U¥.f%CZ–0±öy³üxkñp£]þ4ŠñÖ[24Lõý½K8½åyÐ}Ø·³ª–™VÕ)ùÌ'+gÌöïm´ü´‡Q©ÍœºÃ7ì¼¢¬ §„·³Èí¯a…“@z3ñä=hûdeHdä=-²bl«Û$Ê=’Ll56¤e òÐ,b›E©3ˆñӋ'”Åu&n‹w§ó#dà$Ïn/°:ÒËi¨_&lÖI«ðÿ¢À«Æ«gá¥d [̰gH.®kÕ7k;ßhEIÿq šÜk-†¾ +¢f9¶pzćÿÑŸÒ"ƒˆê0Pníé~G"m•ý ‘Ú«µ”£´x£Î’¶‚t܍NFÔ`NéfLúæ€ò›¨–Óã¬2²ðy» ¬Äòç£Ñ>òŠ‚$Å*µåUf|_ø­5¬à×"ÕÙ õä=\Ñᚭõ…C†ÌÌÑ!Ï ó¯O˼ˆÝúm]¥%•˜{ +Y(±¥¨c°­µn·5꽚c9 ÝY+ 9õ›oÙeǗۗmÎ_“õl¬ I׋ª2·„[±\oœ9¼ÆŠ‚¥jÄ*·x¶¿ Å#cMÈCi"ýN“™b Ò˹׵¿ ÂZ>1°¦¯¦Ummæ‹ÇÆ,‹½4@”l9bª1ÞÂx±ôØy½›_ãš:%¯;òè%“™£#t÷ $ŸƒN¦zz<73ÁÔ’§?À› ò¬F·J°å™BÊe›BÉ@±ÔË87aá­¨Þñ_ÉÆCÃáÕaï2KÄW0HšÓloå=Z*¯'ÅNù<޾†}ÔN™L†OÎù?6­?-喒tÞšJm˜Rμ1Ø€Ùæäk>§+1O +Zž#Êsö «g¶~êÖ½S¥‹ øx¢<æÒå=¼S­ä0ñ *=Üm'[¶úîØæÛfµŠu “ª”âÜ¿gøß§mCpIp2vZ†¡‘P¾’I~ºÁØSiÖQ¾ÇJ5põŸå«Oo†à¸;:¡ë…< +Ðô«uÒÅZ³ÞŠ7¿‰PÊ ‹é˜ú&‹qjÓÛr÷ܼ¡¢Ziik‹$ô3x+洐mQôä_ˆv­û*"7¨8``¡½êTp™/¹ +‘ IXëƒãË„V¢ÕÄÛÍ4„’1IM‘í +|m}„$};—ê[T ¾–#6^DŽK[š„â¯KU+h*G„g´œÉ7Úx”œ[¨-(÷1‰O̞y_="xû'Ií‚¥.ý× u¨v‹àc 3® `”³yCÓ5ÃLŠÇҜë*›Ù›Ág‡.…ŒÒ÷Kj=4ÃfÿQêgïÝ\éñ¯È¿zڄ¡þ UӍ ·Tàøµn­«øy8¶ð!±O¬½^o›*ÃóŸÐlUEj”ÝþfŸ§¿¼Û$zÕå6U`閟&oõ¬ó²y#Џ².މ-™w ‘vìW¿™‘Öã• ðØ]$ïg‚þSEÏ⠖êëå]·³7v`×0¯”UÒ¯ÍÆT½ñ´ ó³ +åýZîBiSµ*@õøéx3Tíìßв ²|ë…g½ÅöÍp”+„â­…Á7ô2Ð#íÁ2>ñ °¦—p"ÓÒM¹>Ó1ÓZŒËôm‡aÏó"z²og¾-ŠK¡Lu:€–VÕlª¤è´{ê4rF°SÏ6”x›ÆÒћ¥³Øû”¬¥ßG· +ê Öò˜lµ½go÷Δ ¨.AN@ç>cÆ 'Qƒxµœà˜ç„)à¿QȤufÐo8›ü4²Gx +I'ÀÍ¥=¸ƒ‡J ©êvL‰|–p­Ðª çy†”Jpõ™U„×%^ÇÛɟ×Â;ÌȤ¨plä üð‡ôÄRÉ®“»ãùܶÂH^ wžvÎð'$u´¯ϾҺ¡ %vF”pC’D>A,€ë{êT"¬qñ°jÇa§éqÕãL ~s{œ«µ[‚•bƒŸÿ•ò«Vþ½K뿟0ÒY¥xK,çÿ¼ÿW¹÷)¿Öÿ5 —øë¤ù›êA/M}H%ÑHvÞ-H%èo—0ÉÍàïòKþVœ©ýÄýt‚_kyH%Χ'ýiý¶À¤ý/úi¾kúé¿ÿ81Ï=Çý¥ÿÏú*yü‚PǓB +í?K-_XÐÿ+.ûlyÃÞjQ„Ѱ¸œÊðšՄhòØaùù¿9ÅÔÕÌÄT]ÉÿaÌ@%àÎ"åšäÆýiÉõ2ã»Ü£õêy°Z=ÿZäßöÉC¹ô‹äàûÔë3¿9.wŠ+åIûT:xßMÔÅ­Û>ú/kâ]8oäàÎÿ¨” àýn¸%˜Ï‚~kNÿùp ëe?øN묵콿ôh¸ÆÂnr&Sw ¨<ÿi¼«[aýäʹ¯™ùÿ%O•Kåpþ÷mÕâ{M_‘C*ïЫawäUò¶x¼Õ-a%ü~rxdÛ[WÿÕ·¿ÊØ8ûp<êQMþô_ԋÜÃôsÿ¯uâ¿9Ëý»É搋Üù¯w‚ºá¹PRšÿÙØ8Ý́ækþãõ·ªU1Qÿû;ÁŠÿ×t{`øù™òVùϔ¨Tõï0|²Cñr­J«§ª9gRz÷’ûoP/«úþõ¿.œR>rCDž.¹ñoŸ›É)L÷P~ ÈùŸô(3þÈsÊú‰ã«W NA¤&ªèʪÕ7(œýºÅ½Ú¤µ©Ïkñ*Vàe“9²Ç1X`S˜7j÷åÀ/¿»S'„ðüÍëóYRg¥©,,ðjJ”"¯0˜G$XT&,鬐æ7ècìéèÄyœÂHË&e;Š´U΢•3SsušZ¾2sáîŸFBbÝ  ù˜ÌWédŽfä´µØ|þﻒ:R§>õ»Ålw1ÇÒ÷¤~ž;à<.ُÅû2QjN®Ž”R_°5Øy‚#ܘßilêÖwû˾t Áàûô!õöN«å{òÉ>™&öu5)ª2º!ÒçÍÒ÷°Ÿš ^®E^üðgCY!àQÄÍ0Ì±o® qÖFíO›‘ƒãl¢TÎR±ƒ:/™vuQ¯Ò¨"ß]Ð…  ºü&úᲬ• ×VcßÈØàµ³a9ó.¡sÏәª4/hFø`±“ÙЭTŽï§3Mìþ `Ë! f0ËÈêä›'å·?ÁÌñNŸ‰<~<¦; }ñ¼ù”ãÀÛUDÜaéâÃ'÷—ãþœ²´C"Xô´Nvq^\VùVûÓ¬¡Ô;±»”oØeI9ÇGµáágáZþ$:¬²¸Òl¾UK:瑀¥ìyН§v5l,›XuóáK·åOPÎ+‡q*‚ &{aÃedõ‰ø'Pö°‰Õ*«è§þA3•6RíÙçz¾›L¯Eï‡Ù5鯔>|'S‹¤ó]maR?4y>†€?pö9µ&2¡Zïv(¤n|üôԘplèÏÕ­œ‘ºDx0±/A½€uµƒŸ4r¬Ý§3C…Á;¨÷1©lnÙG6{õ5&ö0VM²OÓèrÝxĐæêYf“çZ,õåÁQø£ïG S%‰[DðÇRåxðIcwcüá_¥%HgŸì® ¾ú}C6^UºÒ? kóˆ)¨ x­!nʜŽW|0ƒæšYt”PMý„õ?Ì>g kÜø§îÂP`Æ¡‘žµñÏ_ºN´S¤¬ŒaèÿßÙv~»-˜sãäï;6 +ÎöìptõÙíÖê4Uš¾oòuœ!±Ø³¶µ»˜HP‚Añ$i¢ô›E“üë²RéC´ÅAaü¿Tì–†Œ=ÿg\t"ÃÅ:Ë·ê@¬|žF‰ó¯2LýN®ì¸æ”J¼]Z™¬“å: +_a¦\ú³Ò\bY: ô±{>…í“!ó¯i ZªÚʝЏš3ëÿ2M)@Þ7ÆÃP¾±ß Œø¦dØú¸V÷¼Èî+ŸìíÒØíOÒ e™'€f~ +€¿QÏÉ"¦E^oÕ,ú†êAË¿NÞ¢—¤pÈ|U/b6¨¥˜7ŠM[?­;QA†ñŒ´¯S蝣Ãi>–”jyŸæ| °fìj¬ª 5uZ~ ŽÒžpà¸N –}ɱ“—`~ Ò7ØçƕxËÅðj¬6Õþ‚^å—F(ú/—Œ—íŽòè ÙÆ¯]o´òòaߟÑàÙtcæ|ìòâJ!øæh}NõWÊ÷þ*8vˆ]¿òè"3iˆÍaÁ@j½y[ï“l馰Wýb:Þ¬ùç°3ü҄?*’ƒ’Uw Apï¾ +;Oø2Á|ß\zM“ðÕ×d=~âó$ó˄ ;<±:ß9Tú™i>Žø}sØz\·¶Š ý¦)Çè¤+*Ñ"´DPK[ö=ŠBèQú,R¹I×äë4ìu.ÓIÛ¤²ÚyµO[Ýüâá?1×;žC³yM¿S<ێõG“!Hù¿£ñº¸ÓâFęp•“!ä|ú>äÚBjo8}ÏYøÔ×t…&Ó¸Xî„h¤Ã®c€j׿”èûj\^¸ºP‚ãÅ»½6¨«‰ͺBžëNé%:¤V:êNÓÔ¯|žGm›ö]šÛO˜û©­H­’5ŽmÈy]ûx7¦ˆ7à!O ä’ù¸ô’L€@b$h$Ka![ŸF}"E¢ ÕôÒ¾Ud<- +FȾɘ}­·ZÑkm9| -6Hµk "KTZÛE\¼U ÿýû÷ÿßf}“0Ȫë-å»¶ô.òï=ÐÝކï9íêîïBô7›ÒÞoKz›ÓÞ¶ó›ÑÞ¾ÿ·¿½Ïwwøiðû´–É$²O*[ƒCì"³ÍsHGéuâ¡hs°<ÅKsÁyò ØÏµºW<©O/€ŽD@՟@̃S‡ØóŠ”ú`Uo–oÃÎü‰µÜ¨?HZ7Ï*4fè¬G}B©Ów O«Ž™`Uµ¢ìˆj9¼ÑÐF; a;¡ʂีsp©põ8(xúJp‹?‡އþß|‚œd)ô7;ç—Ô¬.‘Ï6–H·­öÅ0åå? Œ_EŸ‡Ž»)p<ïì)p5j·Öðv@‰=„FºçPÿzÍRú^hŠH½Ÿɽ̜¼ó°D}éHˆðtKgàq/A>ŸÇOôn]Š õ®(k1Ý:ä,Hª06!ä´£ cYŽž®ý©`¡cÀÌüØ£ÚqÁî™ô!‘šnûÐ#áãJ¥ÿä£MÈÑÏâÞhéг•ýª^ÿuRÇpŠhÂ¥=É©A×§G}®gGò×¼ÁRî+šÔRïjué#K¹®j•/$p̞¹(Vð º]ž~d41 +–ÞºHÉÕ̒O±^e›Ì¾¯'‘°Ã\/§r2hÍ֘êw9æ t‡+û/éÜÒÓãó÷ÐðÑh}¡`º‡ü-ë-’-žÐñ2à³95ïP±uÅKÄBļ,ºF‰ Èy<ùê(X:7AµÝÿ>d€ÏÕXiÔ_!;O¥˜…Mòð®íÙ¥κÛg¸ph]¦Êø‹ýªT¼,ôúXm¶I6üÛæYcó÷ÌîWb5øÜ:Ø&Q»c÷à˾¦\‹ÖNiU†Å…E/¥[ÀƒóR” 5u»·÷&aæ ÇÍIˆøNÍ¡˜¾—u\ÒQÈsÓ"ʛ…½,Ô%±` ·]ë½¾½ùkÝWÑÊ<”¯£•xӑ®È=nQ¥~D?98nx;ôÎQ4{ó„3÷ûXb3 vkôÊñãõhy~ÀtbÃäüq,]Ò5:ÇO½'t¼€±\Ð͛uGA\à&š€¤CæpC4ẝ À͇“7Æh&À°ü£.+¶@½˜Rn­°x,1Ìr£á:• ‘Ó³¦} O`¼`Ñ!ì ÝKý€B“uOû/A‚¨-µÆ„&›cÆÙR‘FÂy¯ð{!#›~mQñZ3J±ãÛ%Ù^»­ëд¸²ÈÏ:{ý!%@:/œ ,”Ò¬i=I#bÈýMYÒFfµMT *O2>Fl9~Bç£aÆeREºêÄ_w ¹aX„á¤hoé»[o¡6wÕ¾ñ…cÓóØW0gò¶|œNÜd›`XA×£I‰õìÇí;c“Ii1sûØ•d~ŒÊ"ùË <›àññ—Vn·ž2ãˆ~ª@L s5–ð Q“VJ ¹å… +=7>9ɬ¹vJG.÷¹}/€UµTªõûéƒsHœ5NI¼¢åq8Œž°ÚάÉÖÒ_êdší«³;m­Î4‡h •;4{3@Y%EM„áâ ñѦ¡Ñº¯=>½ƒ§ûc=;L®¾;êØŽ…‚í „Y'VÐè:êçù¦ƒA¨ýŸ 4^?s‡;ç´ÞÝBjÙ  hx‘êÕ<ºum]Ô}¤ìF…‹2hçòóHò2rGá>0r7ŒCýŠŽÍ~ß%;I~2\¼t¼ñ’Ó®ã™:tÉÓQ%) +wJK -0)¸étd—‚2[xés䗃2\ätµÄ–àÉs·iiåð†D¾oÂgçóÐß)yº¢ŠÞü?( í»4w)ՃG µ“Ô'‘U£6â}fA3F2:Gw7"Ñ:¶gA#èÊ$¨°Åå[:O¡—"Bù.ŽÌq&O0 G:yF¨ÈϧW|? úeÇp)ÕÏGìª)×Qp´ÝØ«­¬å¢ìºf;–1¾ÊŽXdt «Ù{H$‚ÚŸ!qEM:¶ÇAà,Ù¬a«Ëʟ´¤‹´ŸSÌ ¸W¹`,ñ:Ûl£têä‘Ö1TlÀ¯Ÿ¤$úž†«½™e/ïiû_)«ú®*^£Nô|U½Fù\U½¡ÐqUZ¿ÀÅ()§! e…»8Ž^kйPíÈé8’æ è7iu$–ÜÉr‘ÒùâKþŎ—8Isæe&O–;(ØÊf‡fANû"áê3Eñ¡zŒÝ‡Ï¡\óéþO|ÝÒ¼ »Ë[pîÿ“ìs‚·•þZ®N?E>„ !Î}ÙS4ë'¹g'šv“ÉeŽÀõ€q0éÛ¹Zƒƒ_Sʏ¦ŽõўßvUœ|—T}ŸÐ«“¯˜“@·×Â3”XF]Àõt4…™v…mÚ_¢IrfKk.ؒÅò1Òõ—5¸-é%ÇlAKëI.|’:]Q%j!—óä—ÍØìDKæa€w³Ñ!·¢üA-˜FÁ“‡†ÙwXmvæê£ªÞTRïsÿ%>–þ̛Xt}mãñ!BâÓ2^é÷NÀ5)oi_—© þ…$¡kÝ=ŸŸ•`î—Ñ­×òç–ÃÊ%‹fübþá„`* Š>œ–5Pž„Æ;âî¬gâ£3‰3î³×© ‰›j„ÝS¯O"Í =ĤgVr5ô†QÖú0òL7ZFÓ:?‘Üï’NªÓÑrM¾µ«—ÎÒÏàâs½½Blºó©Å9ÒU¿Žõåé?èÒöã=Èù‰Å‡4N©€ABg^-ΧZC<ÿ€’ûj +¬ômF£æ7[5Øcˆ÷ë´Ú¢ß æ¹ 1Û¤s¾©¯üԇBþòš¶ò;´»RKdO»Kx‡tŸø ½X=~N%ø§èIv@)/6ImŠ ”T·D—*Nï»K¡$°…¼^'PþZT’æB@xKâPõõ…3‚#>ßV´†˜û¡™þ/_4eßçH’S«› SÅao|‰À¡»f¿_|¢¶°£ +Ãâ-ÂfÞEð§ïF‘¡7ɰ»‘0ã\h§âAµ¯àǎÄàǎípcÇŸ§“zŠ’o=j`Փؒæ"ÄÄn'4f‰?€ÌS·<8HqõIq8M]wÅ;*díM-Å/¦h“ñO3×)?œ:áÉ.-@t¼ìX=#‹+üS*¯iB¡°›™ß7G"C@£ôùGþL)£Ç"ËÊÆTNV,k/½ÂªÅœ˜€»\*±-*4È£_ÎG\V§[ÕzÈJR¡Â«ûE .:t–V‹kî'zÃGX2á[¦1;iÎ+/Ui®Ñ…¹B/[ýnqn·9û÷…'Eënǜ)†§hèÍ•.n2J"4Ñ29¸ûªâö:‡þX=™ J¡{[„+ý>0è% -ù ‡qó–†{=õؽõ«²…ËÕ .Rd$®ÎØÜÝÎä” {;¦ÿ ð°AáàÔ°D#/Q“r"43,ê„mr²Ó©'RÅgÜÜ^mJt×Ë t’²à}­ô(TÈYô㪬ã£8™kê6Y™xΧª×©_®e» 7YLLj팽D;P2úúÿi}hh£‚ipk?¶Z¬´$!ÓiȘÛ|¬¹^Ór+÷eËæÄÞY2ìyråÝ['IÓ{¶5Š™…Á+/BJ:âP’ÚÆ ŸS¹«˜ÀŽ0€Ð» 'º >¼Ê&~aÿñœt2cãóÓ£ÿ¨rMÎ rˎùøúßXý$>ä¯RZš³‘?0$>-V¾+§¢_Ph½Ó˰ð`j½P¯BÉ<³C ÷žª¬×8\ §.eWY0PØ´Ü%²yi#ðž’ Ú¶LÌð0ÅÅáZ õÔé2a6:_Ô%Ç4dðm©•Ä™ƒ:c…«+}ÏTÞ3´kèëÑÜMÞ$ÿ‡žZÑÖ;çcóӁ2ÁžõZ],V;¯ÇïÇôCEþ:AS±BÓå°V•²¡ÿPVGX–e…—^çá«í©£êËËóÆ^X}„ïCü›=È4;˜ +Ít¨LÛäÙD+„á£\˜Fã#(‚ÐzN›‡2ª4}(‘•j“ôbÇ yëMÉsKG䌿jî:Lv©˜)ÝȧüxcuäÈû·$¶Ç¤$Š—ßàU’gɞmeVH¼¤t¾»¬‹®Lî.Œ’犐 âÄ´äµ)ùˆþ÷‚/-/L¾oê´“}Ц*M:ÂBdd)áeI ¡§N„䐛 +øt,A!I™ +xèWïPM❨÷öRTÉ,òØv}`H=ZÃGF¸2Û"•Öœ‚ýµ…úe…¹–²iUŽ:â2¢™~|¥SйÂKøå5ÅT¼¥JèiÅCœg…šL2È¡x¡é|‘7 €&qÐÐßÈC-¾ýHZ3©Þ å¿&Yð²Êhòû9õ2@u…¼¬~Œî…3.ôå/lp¥è‰-Ð7|t¾¤’Ò ‚ñÒé‰. —ó¤—TSx®Òå‰/0d»üN'ÓA]Žî"E–¤ž.3·í…™f·MO$X3I¥ýB(>ˆâË3%¬ 2‹%ž”}…;ù ÐÕÚÈd&õcIJ¡M7/]"bS½aa…‰W,‹“ šó(mȱHœíAn®ןS±. Kµ; +Ÿ£ÿ7þó%Lœ,8r€BT E¢”ãÑ;îߋ°ÕV‘-n=I”˜GY2«¯4"ò £*íÄu“j¤u^ MÞ£;F ‘z$MŒ“ê|sÔfKãH=²õ¨”¸÷“ÒÙ­=.ÃFh…ˆÜÏîbÄ#HŠ`7Ó쓕rš,Òê· ¢ÉÛü’A8ß"Ü1`q™»$žõ¬™P–}àYïTИ߂“Ÿ›Þh° +N¡‡È)"èaÒÌò…YªÒßS´<î9"ïV¯Q“/‹c҂ÊFšÆ´Èx±8 KX èÄ´È¢Z‹Dxú™ù[GÔã˞¢zWg¡âì•'üô9à2ü¹Ù?vyhsnãsJÓԏ›N¬ÜR\Îö¯…OlG~±¡ÛÿÓ P‰XR*ŽÉzjÁݕ.OøÝεä”v¥Ü¨1wºz „l8Îí|‚Lä‘Oç~Cp«ð{œwÚþÉzáÑ-07Þq™OøbN™°·Ÿ»RÜÈRànÔºxÊZË Òúæ¶·á+?ZÌwa4o¤øž’x%1®qk,’nöt‰sXÔrß1˜5 MăҌHåkûXCDIQ'„$|$ùš¢6§Þ©áÓ¤4i ÔOkv<ÐM§í­_þÚÐ:ýyëA®è?ÍÓabrnÒcÙHIhæÒž?ÍýÌT\Ò6Ú\÷4üµdQ°ˆkš&«MØWzà3Ý›’ň}ÞB̳œ‘\—î«íнïįa_˜þ*úq_ñcãû6ñqñÿªßàÇÇñ HßõD]”çÕn®£CýFêê4?nÞ îóì›ÿv£‰ü†ÿ¯QÄÿq¶ÉÃ6àÿó•öœÜB¾Ó;½+í&ݟÉ"DØf¥MûØÌî9o!ËÈg{²$sø±“¿í>¶>ZÜ1§YšþoŸ”]7Ò!¸–¶”ÎÅ"Bqêù31œ‘u,‰\ùm_Òþæ¿þ óo3 ?ÀVi´|¦Úîj æT»Í,'9·åë—à®`hÏ÷xu뀲K®\ÖqzæÒ‹—IM¯ú÷(ÕréSòÁ–‡LNfW®™À¯]5}^ºlß6æWžäNÏ®]|Arëø ÜêõØC!ó“K×aL·¡–\»–-mwzn'“\»‡„\»FGŸèAãóš»]½GÛúÌ:¬©¤ðWÆ$µ3œ—„{ Î:½„e|Õ꽌ezšôSQ1!^Ê2½­ê½œe}꽤ez„*?Þc$+ÚÆW©nîõ³²í£+Ú^«ä£+Ô ç&TRòñ•ó×¼}Êûíê¾b2½•ë'̝F¾0òaê9é +ù¨Ü}½ëæã+ù»Þ¾ÆWàÔÌ÷ŒŸ~Œ¯p ó Þ+ïñ•êa?!_?^¦^öÌ^+ð•êö;ÛÅ~2¿‡ÌÈ>ËÑÁdëû©Ÿg5èý°³ÔÖÆ>xùÉ +ö•íoUìc+ІeÅ{(ÊöW½~Î2½AI¢ÎÑHW´Œ¯–½WµŒ¯˜Œòøêöѕó7ªù(Êù«Õ|œez?ÔW;þïEÛô^7VÏ¢úóÕ‡x: =G%zÍk:ƒãHW±‰Ök+ÔO8êù(f²¿Â¼ãì¢cAu•ûüD…{8 Åãø™ +ö‘²¿IА¯kx¯Ö^+ÛD‡ e|®.B½ÄF£‹ÑçWÇ+°váQ­«ïñÕìo1¿3yé +öK7ÚِNñ^Î$8ë+öÙ +ö‘#CY^ ·=ÇWµ‰šÊûÅ{h˜×^/GÏÈWÉD€MeM€¯“‰EÖWîïò‘ CY_Òàd+å¢BÍ÷Šð„¾sÜW¹ ¯˜‰&ÍeWx¯™‚å+õ¼Ü…|ä?ß>[ûèd+ÃB#4~â¾ã¤gËùìG؂÷º™îçJΏdkG²5}n³…ßæSÉ}\ûϯ%WˆÅǑ_-ÿ©‡èþnꯩú>%¾£Ñu_ù£ö|¿_øû<¡âÊdü_´ïiýU\x_ÿ•WXåÿ–ÅüÿßÏýËâpÐ)]/…sá]xT>cÃ{áÚøp<9íRZ­«SªÝê›jèõyÍ^—WrWvے(ú6cL÷Mk¦¦žïRïtî§½Ý÷­´ôz|æŸK§¹ÓÝiè{ìÇ|÷¾µï wÓڄµ F§Q»Ô6ïèûüç¥ïî{û®þ‡ÀÌx| _=à¥àè<Oƒ»ð[jhõ9ÍOöTþV'òá¥M€'òþöÿyþ/£Èêü-ìb¾Ö#ÕÎ=²ë§ ¤Y¾ý_ jÏ÷ŠZþÿw…ù¿+ú1½ž—Çîm*õ|Ðì_ï2ž°ýüßñ3Y=3_ÿá9¥ïüD@ÇTsz'͟÷îÙÁafa‰×³Ÿ÷ðŠZ~lâÀ7›kze=g!qu,ØìÚècádzÀÅ —u9°d¦º §9tFcŸœVâ“T‚[òq‡±µËÃôåª}¸PªS°Ö ‹§ö€?^§ô†të_œßö€3gÀA1VN['NÂ¥ÿç•‘ à:v56_sR:dð ²tõàh7½‹‰ñû³t÷ZãJ9b¢ÅÀfË]8W Nâ’׎ÃRë/!Ãq;ýk€Ð­ &-8 –\Nã”ß™’7ã3ÖñÓ}Ã~:\ߎ£µ7ã5ôÄ~«ÃMâlK·Ò‰{øÂ+ùmñ€î7‰7È!ê{9׍uw±9»Y¼*Š×œ»MՑ1ôæç¬“ìTÏ2…ÉËÒÿMž–mR!¹Ú‰Š„£'J2h]å^jqIW– õtúuüD;4YË!:d8€³sÄCFEŒ8d º˜íKŸ!±pùq3}™õR¾½mT† U}øá›aÓ<h‹ ^&ÁH'eÞ8 +%û"Џƒ~»‚ýë²±qÞa+„©Þ”?P³RÀ¶44‰†Q` ®æKZKw—ì|£É+"?´Ø3ÇÎ,ánAğè«´–õ×ô|®¬äÇîâÄ\e5Pnp?s( ÝÉÓ»7'r’‰ÎßíàïPÿxÀK›+9ÍÓå*Ý,„àÚÿ"/¹ '­pCÀuãóeÔ]**¯×* +«òø §®XqÒÃkÂõÍc»3é™V€ªzù3e¬Ÿ%ìÎbH™$¨‹œ¬Lv˜G¯Ô&DÝD²t)nž7ï[å¨5°-ø œ×þeðX¢û×_³ ~°èàôtBë*BÎà iÀÏ! V¢Ú >KyᬻºmÓ(ùMbÇ®©8H}Ó}AôÉêN¬´‚ì3½Dl©Å ßQg¥:ODÁG¤–Š‘¦O‡Ó ïzÔ¬öç=Y…Œuä-Ws¿ágF-!êöE« Db݉ìPi0¦cÐÚ¹!.DŸú ²S•ÝÇoÍy¾¾yà ߗ÷i>¬\3RÈ}¦v=èÕ[¶ú×a!Á i¿xâ¼ðÆi¸l°Œ)‡MŠÀ.®_²؋é‘þúŒ¾ʦ/§M.£X–f¸ B× MPcpLBvQš“¦^v'p\éëê—뺈ÍƀŒ6è:UïxãO¸Ãb~ûå44Góe›Y…=Ÿ"tµ¿Ìhïrö¥Úl1E­L°,@ ÓÁsu§#²ò&_'ÐÞ;+ÀC–쯱®ÏX ]½îŠ#I¹BÇ&¾ DVøæ“ÎCµ9c |Ä?B¾puùGAÚ@¶¢àTRñóý&I6XR|x껁õiíÉÈ0gÞÅ£ûš`ӛP¼G[ŽÆÄÅ[ª<Œ¶.;«—†ö0,a2;äÓ½°'y³K¤rðN\ȊuYÕm=³/ZêC1ÙØªeZ„ö’k¥Ê»i4¸q4.Èï‹tKx‘ $ðâím«K<ñZÆúÜ;uðÊkh-ˆ”Ñ^^дª?8-…ãŒØ9Ññtnï†f¨­emk‰…çø·¸÷®%fàõ®ÇŠÞhŽŽU͐-6…ŒÙPÞ‰%ÀHo#rré÷å¯è4eç˜W!LÃvnè×ä+ô4to8o™â=·yÀS«z•,VIk_b$i5õÓb«|êÎBŽÆK©dlÏ;c¸ H×·ô™dXɵ|'™Ø;€ 0}(•ä§Û'T›t;`']Äûàå«+ë (H€´š®@¬ØÛä2 £±•¦ó0ØÓR[Öù›êÑt£—¥Ú›éPóa˜ù†îwoûÈ ªÀçg:ÄqÚ%Õß'Êl6*÷ÒÕúP³ [ f^íŽ3õ_A©õ¸ˆHA/j;îنöƒ<”Fԅµ<è¼RՃaô!Ò ûžO?$Kí£Cú¹ÎÓиÍ:O?Çtg! ;ä>s÷ÏÎYFç"i,ìyðÜZí¹ù£ýC‚°@A¿{“ç\èt_r¡Y×Äè>#báí ù„čÐ< è§qz Nüí]ôœ<{i,7/~Tbç'äç°èíqjõIØ?»ˆÁáp—¸hg°'›ºq.ˆ4D< Àed†µ€FTDó 2õwíÀú*Ÿëwᖌ’c­dAR^R’3¹‚YNš|ù¬Üv0à6ӝ:ü5ËÉÊ[—’aÑ[Á&n{Q5|y[PØ.È,íKb¢,E2$b!ð$çÈÁ.s9¨ˆÞzU›ÏJ³yþ÷ Ý©û•”ýϾ§îÖS¬Ëgôß½•;¡L÷ÜoµÌHžÂ.[u¼qik˜´P§ Œ½7æuØç¥¥ovÓÂqÛîgX$]MLÈHê7,"X5ôÒQaX‡êÀÂö +Ò<5£}/NÑ9Ä[V=RåÂ.­2p_­*’=?É#¾$9 ‘ôXá"Hí)jÈðòŽdÑ"RÝ!¤ÌÝEèŸ#ã-ÃÑMÏ Xbn +(IÕ5S¯D¨J؝ZñÕEBî›.àyíe.ʹ›—Û ½D®mCJ¾û¯gŒEele{,˜á'0®4†4³Ä,8È<“* ¸ö8ÈòD-:Rù†#L ZiVDDò= o<É#ióÃICÇÔ8Òi ç¥MÁm”F±îä¥d¦¹D:j.+º^)ºÆÓGs¶ÒÛ@ÚÌהLã{(9aí@û‡™ËÀRõ\g¸ÀWØ­(ˆÂv¤ :Fƒ`È'–‡ïë]ËåCIäñaB(ëO¡ãƒLÙ®&¡Ùž3iÿw+N—€ì»îœôΧÐ\ès1{HãÆZVpÁp ¾9å*‘3‡Ø²\ÂaÄY„¦¢¡ÎÅÂDÑ ),cø©³i±qgX¨u×f¾3«4+ÔÔÉ •¥|éÏ,'Z2a5®-FXHLstø¦ÏØÛï릐2û²?ÀSÂßuÜA'0ûÃ{¦«-¬²_ [V#Km]¿3¼×ëËbÓßÛÔ¿·¬uŽ’ F¶`î°T½Wq2I²,‘Kå¼n–pbRý,þU€ÔІfmÿéó̲÷‹§ÌÔßÿ%Óæqž·eýÕ%•í©+ñ!¬>ª +ÃÿaÈVÄJ¶š 2ЗµYµ#”ôlÊϘ£|#rx#p0#OÑ&s¾Ç#°S &{5äÕþñ—ð .ðŽ=Oç:™¡¿©ã*ŸÅü‘ÝîÓ­nÿ¾ÌpÀ=6*(êÙ=J꘺)ÆH8µjxåŠô‡Àï£ö+° ó‹®Ç{'à.Yþ_¥÷8Ä‘O;1‹½¦Û>fMҜ…×mçMŸî¿( mO¾”õÿçûÇ$dŸ|s2þwÃò…Tûô‡!RÐc>Ìþ9¨BS¨]ïŠíÞXŒõ*oýÛ©ó燗‡ñŽŸ&â?­Ú^2/֋ÞݜýxÞqêƒÿWG®ßõm.< +¿ÿ•rÿè*|æ§A©{©Òêyc¦³æò£ü†±‡¼4cµà}Ô¯uâa÷ ü®²­ æò¶þÕÍÖ5uÖó"¯_Êî²ÜŽ£™â òŒÿ•WÓÊ*žIE®…_Þ7ÿä*Ÿ~‡U°ýÂß6çÿ]¤GÓsðÉP/þUs㐪}úôÚ=ÃD´çÎmóþý`^±¹]³~`à‰«â%…ż戳>»š/ˆßåÀéܟ÷î蚟lv+Ó÷ïœì>Xú¶‡Þ{åüŸëbc_Õ~)M™æ±au3†iOVZí·ÿþڱՑ¾Qïú$!çÄö|—{ÜPè;šÀÿκÁ9\0öWğÎyX£áÓÝG§¹Å¨j©¡’ƒ„qî@³²´xö»‰õ +hF–ètéæ* +!*P°g$ =~{îqåxÊHó,^8Ð}Ә3ÛÇje@Ýªò…¤®`÷’áNû¹n¡6¦$óð >ŒWgŽ`Ж• ³Æß‹HÓñ +kDnât°ɺObDN$‚xŒ!±á—ëâUÖÈc˜òM’ˆ,ôx•ü©|´‰È[Š•Ákl¾X–l—$ÒÏZ^‡TØÏRL°¢ö¡”àªTYxppàV›œ¥˜*D׎3ùù‘qÀ‡z'¬á2~v{|D= ÈÁáùns°Ð¸£\óbm‡YÚøç³àûƒ–¹~"ˆØ» =ó(¡>t`•÷¨‡RZ#û󤞁®2Ø5éñ6ý½c¬s)𿮍ÞL°y2o®>eçÈE…Â4›,ö*¡Œó³Ù¤›.޲ý™(¼E‡š'[½ƒ*tçO^/`ú㈝ hqí¸§Ñ f yUTŸžº›å¡goP›/ëqÌ]YÇ7—® Êés}K¶x3ߜò}di6ùæðvá®oÆãuúÝ}1=v\’}4»+‹ëKØR®y¢BÓ"É'ùQ×ÙLؗ9a}³~ú`®|9aq™gójÝPðd?Tîwr-ÃÈ)ë±3¡ÙŽº¯ÎõLnÂÚ`ô$œqkŖ†h',ßÞ폮•…ÅT¸€ÚT>ŒØçÑ ÐȋbÐȅL#¸åÈk¯BÓ'í…’åêxO÷P·Óސ]¬óN=Ÿg–sGñ¿gGs8®U¼KpL58úÅ$äd±Ëî—ߤoKýW:Xç8kŠ8eu}—c¡Ì*h‚&Ãììpq©`âєm×ß{F““ý™™™’’}B0ŒI`°02}̓1>ÀÈ1@¨‰j¹©b#C2) ¤¬"̟?6Ý]ëzÛ¶ß.Öè·nڋà +ÖØDAEUQvîC`Ž– +¦¿ÿßßffHUmí¶îÛ|ß7Ç«¾¯yÝço¡ÞyÛÞw©Þ…ö{ð½üï_¿{ð7©áÞÖËd¶Hê…Í÷Í +Ç!y‚Èaa]8¨…2鯑ˆ$œfQ âd-6:Ád9.lžÄÊDª›—:¹¨¯Œ©gŒ7âüh·%FT’5ÜòÌôT j¦hT#=™É °F±æÀbI,¥Sœ° Zkb²ˆ"3a$O[ Ã¯*U¯M‡/âW=qÊ +ï‘Î_\Ô)g[”µ{×êúeÎy5fG¯ïԃÎß¡ÃÊ«/5év•hý2O–_k€‹S‰.É}mqÕ“âïYeÎj +¶‘Ñ€ù¡ú")óîØ’“qþ„:᤟J‚üŠØ%§ðˆÛe%JÁAÝàÚá¥JÁ]DÜH"CJC,¦¢EX‚t(¿[Ò¸Úe¥ëÊ¸Ñ ¤ÁM®îmòºûªÌT¨µ¢T`ž»CëÅçRÕí]ýú{WùfNðû]m¶å“-‹/ ݤË{W™fŒµ®ðöª6A/+ ´­`l|Ácíچû¦‹»Æ¦’/¸ÒHgŸ‡ÏëË}ýzdsÙù ZúNÊɇ»ù©Ó=ùÝ3²±rgLعc +fÇFÆ\ʝ2 À!™±:gd“äÞ* ŠNŽÜ>}žŠÿjÒ`Î{´yö‹86[¼¨¶‹å®o*ï•ó²ƒòÁ¼úõ¨3°,¸»Á¸ýÍ8knôáÉÈÖ'RÛ»Þāî ûŠìŠ‚ ßn„¾ÃšS0o²„t úÉEÁ|´j ÒMÜêZ{20Ü©è=m•Üüõ•ÝŽÊî† m•ÝrÊïewIr@Ÿ$_)ÏBó¨ý[hݶuól¤_’ýl(b¹|/†‹2.0ßÓ̊ˆ!q¸´¦øX†ß Àø/œ/‘F/ñ9¾ÏFsÓ$·Nf™ò¾Dvaþ‰"ꍀÌk(”¦Þ+ÖìàOU\Wgq‹Œj4áö}B=Eè‰jøB젋?%,”±àt:e‘D2£¤'oÙ*½U.ҘºÁ€â޲Á:Ð-Ó19«Êe ?‡Óœc¡ÆSÁ?æ%¼•D¥âª(rþ“ʪ@ä7£âG…ˆ( ­V4(¯okèáÆ.Ú.Öß-þÍ`­¦nôµRÓC¦D÷µú¶õv­ÀvÏÏ45TÏw·ȪC¿ÂxDq¦ì$á…UÈFàvX6¹½ú–Y +*8ä)¹a`8Cp±pG!J»*ªFvß?¤—.A`BN˜ºcô§¯—™Êªò’\¸¨ªíg˜éöÐ¥ªÜeرƒ|´¿ðmˆ†ÁÀ¾kÆ·àÛZc,ëƒpROdÉ:Uè{cÓ|\zc‚Dò{ºãœM»(:½ƒ„ϧòWƒ«fx:¨ïO®(:½\AÕõJgLAa'¾3ðìZ¨ FÒE·JÑSï—ÌÁ¢ÌÃJ1´&°8h_íFÄóO{Äz@yV— •ƒFXýjÆ'âÊcҏ¸–C_øðaï7Ê1§! Ù$Ƀe× Ë¿xñ'Ðð¢O÷X"OμIþ•'¿}á 1]R6Õp¾Ú¼â^ïO¶©«Íµw%¶¡M½›mG³tín¨ˆÎ|nbƒÕÇSkÝ£ h—ºjB²ì5ŠYµã|Ô¤;6×§¤9i-ÒSÇ1WïO"Wï×KZ›6´çe•kfG»7ÑemÁc,#“6ÔYR{ûQ®¼!/å¯-Ñü!텐¯9Ø ü“kLÅæÕìrt<ò“F_ã¬òw‚íˆL?€¢ã¦‡¬`„Ùìµ ´ @ç¦2$ºƒà©·ÂÜ Ñzú8ú/y¸žD˽é 1kÛYpZš7Éù°`ÀÑù\=SÇ +0uv¡@Z,òùÁ6ŠÔì¬ ~BÔ\JÝc.inîûc@™-kÐðb|ÒO3× ˆ•z췌an.í°HàԘyi€¸¤iÿ»"ñ*-œ²á:J[„é.»wIÔ¹]Ò]> Šé/O ØwFŒ2°G æ‚<îZõüNvá(츈u-;¶q;‘#®$Õc©lo·Ó/´áørÙÄT¾Â€òÔ˛í¥ö_¡ËHáË ¾ßàáËý6Ӈ£}Ÿ,}—>²‰4MíðŠª´ßnô}¦¥L¢zåö¾ŸJ™DÜïFÕÉѼèѹUßY(Õ`ü=²ïÃð—~±™3–œžÆñù?xŸ’ïÏɆ}4c4Z,ÐúhÆ#âûbϦŒbT—Ù©ôьLFôöT:’%Îøæ*BðvÕús©¶,ºõáS²U§œ ³}õÐa„›wSBo·©t5ìÙ#?=:/†ã{ dP÷€ó,•à\:œpê!¿nc?W_pëwÎ->Ыz@ðs?Ú#àž ÖW›©N99ÚG²^úÀDµð!×Лö‰Huµƒ©äh8_F¶Ô1ƒ¿€òd楨1]ìYwØ«&â`.f/ŠÓæ©ß ”¼©ùHðmoÊÈðØv¬„ÄþðühIäd·¾%WåQçï +âMsÇÌ]£È²Ø7žLWñò“ø’¿ºæ2<8³½Q¹Y +ëõ®XŸô7¯¯#)áêïùõ_‡•ñõG&^o®ŸÊpx"ο—~ù2ðú4þ‰Š®º92ÞNZ?ƒ‘«íoªGæ¹3oç'Àëܙx}Ã{÷qy÷qÃ'ðÌÄþB˟ÅÏãß|­³×#Ä¿’€ë_Æܙxº—X^[®99äØcãü\L×ÁŸïV»”|rÒL='ÊÁ^z?¹0²RþIUõ’|3ø7£)—æÿƒ/Qü|gðeñ¿÷eùé> +gè£øÅÂóóñ¹—^>w–£æ‹+ţƜÞCW”’âÐ*ç¿ôqú²uødñŸõdÜ#ğ¼{åàZI “¯á-ìkø± Õð½ g?€ö7¾õȂ-‰sÑü`g½…Ž¥¨ÒŒçôÿbãüóy9÷ãÌÞÑã¿Ï1Æÿ–c˜çAÞz?¦¦:âñ긟PÏ×#ÁK3¤úI)÷«aá'¤6H¤Ý×¥’Ý"›¯ºE,î„ê¡8¾=Ï»D+Nµñþ2)müº1íPxukãúÄcõ“Òb\¦ÆE.ÿÕOHA‘r©n¿´Œß¿ÈA}rU‚3 tS9ôÈÇÍ"•G_\Œýº- +ÚHAñõÿš½¤ÇèPÁÇ$"tSÃþZ- 5Ž:ÞFÞ¢š·lÀåØî¾?O÷&oqëÒtq98õéxµÆ÷O‡ŽPˆüœzôÄ^Ǔm!n{ØõèÄçœzô¿ßYÉǯ-Õ¤á7ô¨Å¯±ÿ°ò/§ÿðˆf㓨ú1öˆÇâÑKÇ*â5ö1{_kùÞ>‚=6¦é…ñœrq}5z}Þߞí~ê½çmì÷A€;TIÎ.OäwÅûå<¥}÷5ßOìù_f_å°bÜô®¶=…™K¾›ôµ¹jΗ2÷ ÈyíxòãYÔSb©I¦ÿiÜÅà#æóö×áôo‰gÏ¢˜-ýò±úT ?oBŠa·ãÍ萄M><ß‹|A}âÛâ¯î¯<zeÞ7ùfüA¬£Féšü;ٓr¶þ¼œå ßðäè(>þAB$°ä”"[IB&°÷Ê?ˆÃÑò0ìŸOKý–‘¦ÿ5rwçK°a~¥¨=½0‘ ÷ ŸëÙH%æ©ãF°TÊ#F=vg:u®öÉ<¸õô2<&íXT˜¡¡^íh_ÿےPxn&=¥æ>lÑ Î0¿G¨ýå~þ”4=þÒæÙŒÃ ë\žh¿‡3b›ñðám”âÍ·»üdï]™ùÿsg¸õû¯,¡ãj̳ æuoÛö?G)¨èvôß;u‘¦d\kò&&é{yFm8dùõ&[ÿêhWúUï?éšÿ¥§Ãµ4|9¤[®ý·?ýÿ)ô}ÏèÜOÂðû(ëÿÖþw}}W;µ·ÜjærŸÿ¦]¿ø¶né3/u¨SQÔu:‹E¡·x°=΢!¨…D>Þ`nÁÀü)Ûw;çsÜÄ!öýv"ëºSºÎ÷]IÂø…°7cbÓö‹OÒáþÁ×ìþFžkïÓ^M}þæ?Ç÷<~îï+ü¨CÂ{_­,ꊱ…ÛJÎD×ß1¼ul¸Ýþ:¿ÿ+Üûä&|gî,±hzÿú¯sóéŸOìSÿu#VI""„‘G‘øS 8©dÝ×dn]|YñÙA%nfǐ­ÌÿpÙ;ɰ~qX ÍډøwŠ_Ìêï›æ]‘˜€o¡NÀ‡C&Íövˆ?¬4[A#l[ÂöRÕ²QižpY¬ŽX¶X—£|¯‘^Ϧy]„áʖÍ=ô’Ÿ:ªÖ‡"{;ÆÊɨ$6ƒù ³X×ïWÀf +õ +>½‡è°)‹+ÝÞóÿy ñÉtQÝÝFØ­!†¨`äԗì!8ZÁgm xR5ù¤Lt‚U)‰`„XçH¥–‘FÑ_´‚K®Íö·"¡Ÿ|ËÁh‚1B®!£³ñÔW|‹-…gÖ©2™ +6Ge°f%V¦o<ÅÎ2‰sŽ“““à5ü•Rk—›"+~¤”!žÎ©|Z+Y5õ£ÖaC®ou$gäžG0½qäRs«U š†úFН\îÙ[¶&žÓâȠ䬯þ‘uª·9Ĕï‹3xm¾m‹o›V›|×¾k¸û|ûl$íó€Ïómò°mò.A]#cÉ=ŅZe8–XãӀBÓ]}äÐVZk×W~<}tùŸd›_†.1E´´bÚDþÌiìÌÏØ2‰ò±¨,,(û„Éq>I|ÞûƱ m@‹­O[”* +\,5c'Ѷ'  õ°½Aq¶×•È¸En¢$r:‚º©=!ԅ­¦-\ªö©îÔ¯j§IS¸)'O_¥åÄݸ–·ò{2.ã¯ê©áQ˜ÑÞgoC}«Ž”HXÀ_KÄTrY¦j-¬õc`8÷/=î›üÐp^ZWÆyiÍ +4î¤ç'nä?ºþ…E¾½‡,`?s¼ز^Ex!en +°—R‰o¶û`Ѻ™ìõsà‹èÞZVdÚZmզΠÚî´W°Ä°oÚôG:1nýÉwø’·5Ÿ!²†As¹!lcë+Y¢u±ÏÞLÈÎè\/“˜î›^{Ý?ÌZ”ò²2çWiD>Äo޳‡šøø“üÁ««%H˜[)ÉbÏ󮯗(D︊!¹®3•?Øóœâ*)·Ë«4՚2Ë}º-ËL‡+®ÀB)A‰ +äíÏ&â%Рp>¹¬ï_5âÙØÇ²n%``ÚщUq* ö',=d = á`NGùK¿¤<,ŽqŸÍ¤BâÊ´3KOÁÔLbÂÝp¯yzG˜el5#ڛ¨<Á …›+è£j3º]¤Ê»‰6ŸLM@ÌÇyªY3ŸŠ­ìÚv»„F½ük·™D e_š$ɲ¢Ë¹-ˆèÄ껽Ǔƒ^­Öý Ò>^Æ!ôßì‰-=Ög úYÊ©¸3©jž`zUìm^`s•SP½X¢-^¨êà—&<“Ì ÀÊÚ&‡+yU|˜š>l§lÝD\âŠÑÔxFf~^{’Ë®ÆbIŒ‚ÚÛerS&ˆ´å]0’QÂþk‹goó…5·~¯žTœQX¦%ò×´ÄÆ •±…Òãtéæ?24 4ØÇ†¢éù¶Œƒ8F%vÏv-Ù,2´mDg­q¿>Çù‰3Ÿ­\ÅêÕ̟¹lm«Ɵ~¯¢¢ÖÕ›v–­ó@ÄöPœ>W¢EÊ,r¯¤Vì¼Ú#ZœK¬·“ïÙõMÜ3Í·§+…ôñnŠŒ÷`îÒß'ŠÐýÀIr ' )¹õNH‚ ËÏ1¯“» +ú¸ä‡’ýÏ;.•™Qšò!¨ù¿QzH6]¸2ûí?¶ƒ5,_8ƒò,tͦß+±‚‘·~”±·c¥rÚn >„¬û]̺ðAÞÙøÌ|½+Ó·®Ê,ÿ +wíd#ú˜™ŒR%;± +Âß¿sYw&›:‰£°šíÜŽjåàáý°‰GŠAœð´ÑâãÛðz֓ØÂö_C\=ÑÝ®_ü3ñg‰Tr;M¶†Z=q°M¸-”œ~åŒ-ќ„Ùü> ÐSçëˆÌE ±GÉøÅÄï²P­ZÒVàËD1Rþdäu€ü:10ë&E¿—ê "{›ö§ÎóD7[T|ìÆgky‡hìٞÒº~·W8ù^\€&„Wü·K•ÿwó19l¥Rúã +{%òÙYàH¾šÁu¢lM•Ï~Vlîn«<—gž%·Ã¥n pÕGïa[ú-ó­ZՕ'«â5^“Õ7Ôf-+,qRš¶Év\ÉíiÐ £rʸìÄgéiíXJa#çã†%ÅdÚ]—ªÉ=R±²óí¤X u§¥xáókíQ´´ ]aq rkvŽ,ûØt…§¨Ï/žF]ª¬›PÑŽmDî´?ZçLVÃsç~ÎøúaӖ‚µ›%o7–áhgÁ !Ž]W‹ýZöCÝn bÌn´§†FiAԛQáÄûg[­#Œ2ÇzqÃö~·rgƒTfý1q™žðï˜EŸWmĵm¯Ñf¦Uº€˜39‹.ض¹¤˜+Sn׋<ÜrNÞs°›3˝»§)Ìüøg[£”™š2c=~ vð°¢ÔÀ£.ð…:‚µ”ò”¯ð§ß3Ú.ɎâØ¤ù¶(ub +üöm¯òS¯iß·¦•¨eºc? ځL•—|z<ÔìRØÎq}>QÂ5¾Ú|ÎÀâoÈÓɵŽßU} JÁÖ×ùؒÔü¢Ýº{¸Ø Íõ#UHs#”Z»0»‚M€Ä‡îˊq®×šâ¢-¾½€¤:»}c(+ϱr 6äÎ].ƨ‘¥]ϱ ™Æø…mß¼bb{84ۃe;èŒê½ð¥\´¸V(›ãAu8¢~„/[û¦hBqŽT }ôM8ô·pš)AvE‰,EW:&(SÒ Ú/ùͳÝßB) ²<'Éø·œßHöO,Ìfz荟7À ×WlñnŒnh²ðe =7ý ›ØdrÊ´ x¶šíâÚ ë×4ð±ð+O=$_óåuÕ¸¹\ýˆ¿ÖX8W×Ìöð!¹{‚,ñ¢vro³¸tÜÐAšzæ‚»Û]Á±ÑBF rö×Ð{S¸ƒF +ï.$£=™·É‹}ø–ŸË)që¶Qypgúùq½S9R˜oV>FuËѧ¦ï°šòµsº›ÛW£5­WÅ £Î+æÅZZffÛU]«D«Yì威ó¹²à_áE­64R¸tÌ¢½|¶°t^ß-ôˎ.¾6%F~ꊪ ûÞ®Õâ[À’(Ƀ—bfvЄîVˆ‹ ›å ³ê…فvÏnmà͏þG¤9Ù¤zhœä›£zöóŒQºß¦Û?å%)_í?WÒKNGsÀ®îǯa6–œ#Ÿ|[¥gÏ* ãH¯\ò¹¡È€«`~RÒ¬¹4Á+–˜9èüºÜ®¥B¤t¨ZŸ¢hÛÏϓˆ"„!¢ÏŸÃ꣕% ïô•Á—ÈΛCholÓ»_ž=—[HØcÙ>ÜDä›bmªÍãÄçZ¿ú7Êù`'ïZþ#YβËí7A³(µpºkêpJ+a¿b‚ÃOªÆ¬AAþn¿áÎ?£1øªÓtòdha=ZÏ΃ˆ|(]¼)Ӗr䏸ë–ÁñÖTÍ2*á+üZUWÓç(ßYD®Ëå"z¢ŒÏ¬Îã3ŠáŽÛ w O›((ñÜ/Š~ DÏiZ¶¯ !+<„¦·†’Qν0JÚB1À/ÁzÒb‹#¯;˜TWgµu)‚á9Y}†LÊʽJn3”_¢¤Bâ9gUMýîYkóɓÀµ£[)DïYxØèi¤mÒ;ã%ðœtŸ£Zå1Ð_¡ý€ß·B¿×ñv-‡m4…‘øQ[ué—yǦ†äω,NDÐ2M%gٕÔÉéAè‡ÿ1þ.QúüÁöy’ùM®•Mè}#ÌK'<{ ~½œsx–¯Øf ¦vAë'²¼Ž¨ç~£»"ä>¯š +ÙxåoèñjÏ^æìýQÏ`/úÙt¬÷E¥óD·mk²€]+´ý„Ú¼írŒùÒꉸQÎeD»"9y^Ã94hgӕCH·;œeGV.Âꣳ=³VÅhxœ?B\WJTdÛë(³åÔaɬÿ5D +H@uTzBλ|UŠ:ݔװԚL™¡+¦A¶•Z‚ã™3Î"‹<ÅA »°°Áëšgj6Õ;(7Ѷ¸­`Àâ4ӊ'í%g‚}ïX_Ëp²&Ö݁áýòȀ<3Çiœ·ZV}÷ž3ýp¯›å=­ñ£€»RE´Ó¤paÛ2§ƒæÒVº6°§ý©Y’¿{˜±_ +‹I8fFö!^Ø:X!Ñì ïì2X©ƒš/«‚]J!ô>ÕÆK܍q’÷cõ ºßn7ðÊì1ðë0OÜõhÝ1™üâ(£¯ æ:ó -93>W>æ³ £Èuâƒ9ô‰^L õæsQì…ÚŒû•Л]Zž½.Ë\w imóSŽÅpÞG_ç9\Tz+Æ} È}ìYx՘uJnÜ«^½º:Pek0‘ÈæýÉ´j™ø†„ö~CYaÑpšŠ¯ÜÔO|-@䮋4f¢„q&§ +\%0 üá­iœ7s¦KVØnŠÍfºâK¾»¬“¹¤'=(£,2Q÷?ýû’Üoþ Égû7%øx»’Â~ݔîé~ÉgøÛ’ÌpšŽæ—öµ7óµ\hOÔtêJÛ q­žì‰àø 8A¢áÉ­#(Çgú,Äë¥ÂZ‹tmçk¡oxd &ŽSj@ŠnŠÜ¯'®°óLùÍt,säØõ´§¶ê©ì… +œ+@¿¬õ[5³+«ƒI w¨4 ËVuSPwULBR¦sXÊ ñ-UcBz~Að ¾ÈŠLò~Ôh·èð…ôl_3öß3ó¬S"¿ýAÙ¼öPî—׋eNÖè§Ò¶Š‰H}º‹dŰ!KTÄPGÖ¬J‚@­ÓÛBõRÕՎ)6ô/Û½¥_Ãê$ø±g­—`ÊZ}-^Jygó”Jë¡ßOD޳¸âŽœá „ŽÒepK@LkO×1YýóȯŇWã.Þ|T_Ɗ›ÆKU0/]¬ÃáÚ¥®uS´…pÒ(.Á›‰Z6ìRS“Ò ÈëàôŠ¡£ÇZk >VËÝeX.pðYg˜Ú%ÉOG”3,’Þ¡í¤¤ùÍúù•RzŠŽG U:ˆáŠÝQÞpÅ~ +91H +6¨¨^§.·ûý¢1ôi Ëø‹÷b¢ü'ӗ”nêVe8Ærz„I+?N ‰|飿£:V9æpQÇ;ý~)И»¸Æ ŸÆ®6Ä$뛧µ‘Õ9à:ؾ³¼ 6G“jh€ó•ômMW•Š©¼$ŒøäµY6"¸ÅZ‰CÞ:ïՕTÔ-Ëõ°¼Ý èµü¯9ÔES”‰•/Ñ¢”ÓRÁ˺±×ò— ›>êÓ©b/å£5 +²»ŒwyvA¬¨³êæÝ¶Vò)ø!ö¦~½)p߂é›|Ÿ£ +U½m¤9GÇÄò™ù¢ +½ù_Íÿa=]µíŒM¶ãGŠs±* 6;Ù,sõmÞ«„­gº¨acÎM(¯£®Å6ð±h&N,ŠùÕº3®ù|èE:·×Ìü7Ðæ[Žûۅø_éÖ|û žÆAÂ%•]ˆF%oÃ&aŠ9í¯Dü8<°‘3ãæeÅØg°œ8‰äCЮoGDRӍÆîý^\Q…TâÝîíW/^û4\i9‰—ëgæÄƒ ?ÂüVïµF{ìíŽqo‡qÝó1Ýêg±AkEÝ¿VèôÐ5ø´úHÇL` +µëEû¬ÎJ·'¢ä gÈqq;’ê:µ¡Ÿ^]€L‘v Å¨á$•aâH(ް|ªñ@s¢e‰5ÍQÊ"÷ö§Ü?_b¢Úµ_뀛ٝYZ·V¥j݆hj +­v4%iä^7bDg´ièóm؟Ž~´¨ª¦¿\¤zZFD °Yôkƒ5AÅ)Ýh¤uO©ÒjcÂgæÑ¿ÓhÝÉ&U¶~uj¾© ÔLè1È)اËAÇi‹fT|¶W4¦ˆ=ކ÷¯¦Z¦v¿^fúq46ÁŸ‹‚x㨣z«Ö*C¬Ÿ‹6o½ð p.ÍK65Ý`cí&M›¹&<6ÌýµàyÐûÞ¢)~œ­Û÷óÄ%—ºÕH»ßfS|´÷+˜¿@TÄÙ ½QmsÓ{¾÷XÎS» «I½9väðú´þ1hŽxnˁ]7_ÑޞÜ;ïXŸ“)â´p9×0E¿m1K¿Å½#ΐV¨‰ø°[÷äPîrïXA—€ñΕëSÿÝ¥ü¿ŒT$/=-[ÊÕËb½íOäƒ~RÈkrk?¦gtu]O!É­ÚSo#`D}=N ,¨IÑC¯*frÌS 7êÿ;Lñe«üéøx/×AÂ|6É€sa W؈/48uE½=x㘃08J¸nâüï‘+ÝW"Ö욭˜‹‚ ?èvS4Ù_Al’²+¼•âÎÛ#ÛHšÒ^¯pMe5úœ¢ývì›å}À½n›Aà ­¬l‰"1¡SÈ4 +°ó` j¯HØÙM$!%rù¤‚øgý‡®‘”m³^¸'iwî +Ïpõ_õáæD^â³\"`ÒÍÂÖ{EóÍûۄºÂ›¢ìBˆÁ®!]^Âm¬<&Ýd¨Mƒò™Ô'Ôð`Ë*êd»›éù0uÒ/o\N×p…ðæ,úAR×µª××V¹Ñ)a},šÝUj+GËW愑˜’æªqu¸ÔÍÝqZ#¥ŸËæâs á’Õߔ<,™ÑIøžî‰sê/Ÿƒ¶t9kw£\lþr}HyS“†sõjÔ­NâÊcP@±e®Gc¿ÀE¨:@dšÖÌO¼{K>mnW§ggºuy…”=1tsÄïۛ.lE?€•'¤~Ç6ޜZÍUZçÑà…!wˆP—[‡j¶’¢/…¬)ù,H½ßoƒ¦ý 6ÓA¯0}›îž4)Ù=FàØ8ŠD29UFBFåOˆxÞ«[¹eVÅæ 8uîþ>‹É¿”sÆ3 ù:qГKW, Wõ;}(ö§Ú ® ¬úŠh1®|Q]$;O\{8À‚³Æ=;láö6o‰Ù¨ÏË(6Z¯¦õ?5.Ë·bz¾ZÔΟ3Vý=Ì!J<ž>Êñ¤íMß³ôÔbªÜ4£’³Ê60[ +Ìb.ò;’‚‡¿}°×޶ÓüG® ¹0‡c…œB&/ğ§éX: 3¡ Ú÷µ'/û92d2dæ# @#.,U‹fLˆÌ“09‰˜ ‘¨¨îR«jÌDL’“3­Qµ«zUwvÛ|­½"­½@EKZ›®»˜f耐PÏ¿¿þûœÉVªë»çwožw¾wÎúïàïéïèßC]ôyßAÝ áÚÉ$–Håooÿ;ü–Áº•`lüK¶3ü/™ÏÙ1Ü<ú³€«ÇË×’΋5> Ä/ó§S¿:Œ¬¶V|ë"KUÓX'3}Q’uZ‚æ¤ zô#sÍF¯U #›¹5(S*#FâÞ;±ao¦AΩ,MD?té4…­t5óþ³Ø9´ 6IžÕ)Š_ä|(ˆÎ¾ååE>âïª>«m–ÖŠGÜE] H“ëפ> +¶‹­œ•îød«ÕçyÓîë†=҇³\ìµKÅÍ+۝¸)vÇpéŠÔ¦ÈÁòÛx;~c†5VÜϺ«aG'Z+Ñq¸Åð¾Dþéu騚 ë_â­¸n{Hm~›FML’‰–ê¿q™»$Ù¤‹í ÃHdVÊ_‚v +ˆ8-¦|ö-v”Ê$p读çiõܳ^Œ^ý…z¶ÔœÖ"®v•G;J‡#aR7Ð ¤xÔ ÇD¦z‰©rð,C”=ܬf1z,ûvz6èYèÛ²³·ÖÎ@^ b°ÿ¹!JõÓá–(m¦Å½">Tf¸ð&R]´¾Ô¾êO‚5;?/’sê[åX˜d nq‡×ÃC¤ì¤á2ÖÜQÛ¾8“²Ëød\Ì ”ÔdG¡ñ:ESž`Åﲑ¤»¡Æ ­°CˆÐŸU_ـ$¦Ä¥gïÃ3“VÔ H³xÅçnœyˆUQÜ©WÛ¡ ø†oBW-Œ³™QñàTîóþHÔ#Lé†$ù"Ü^™Œ2Ïc¸Fá—ŬÛxé ÜÛpj¥Ê¬a亡œ,1/Ëãî1ÉÏfy”÷ˆ³ðn ͌S®àÍgö0ì¼&,:ó)׫ ;Ï)œ½xü•-ˆ£ê‚¿mSbEÜ€¿cc%“ÿë¢d¼Zø1‚ÔQ#èÜ@a´±·gÆ5ójˆ¾çÌ¢äŠÕ婚áª59ª~*¨¾7*wݺ¦NÏ(]­Jk=›ê¦ÆEërs9UÀEÞǍ Þy¹Ï0t"·†ïÜ +‹‘ljÀ”,';W ØVãUUjäüKSôâçÜX0iQ[tíw0àƒ:>ì6‚Î2’¢Û´ûËSë>ÉqÍR0— ó·hax¯•`a q=ÝG¥fÛØQCä[ŠoMõ§vë Èãzei^ñÄÂ*’êaçIÞ䀘?$oÊE’ ó>Å†õ˜PN%~–SdiE;r8Š„hª›†ùuÆóuÕ|dRþÑÂüJ¯òNÔû=+M6^–Gçٝe«Qoz¾_®Y‹n$étÜ{Š Þ9Õ´ìÌÝãvΰÈ9Ö…R-³S7<Ì7xHŸÔ,ßô(Æ¿Ø ‰¹·Lã’|£Ks°g‡@·½'×y²UèÎÏ5®Õ$¤lí¿˜]¥äÐ>gï3„mÍ4wDWšé´Jlcp•|ÛJ(î•S;£’ÖgÑp¢ë÷3ܱ +‚Ç <žn"cƒ‡>Aۇi7÷y€"½9ö6Ò©» g“Ív}µt~¬0u7Å;z %ÍC9®è±½øÜ[{7t[_¦»Â.OD%Z»û + ‰ +滺²¹Pì,a¼•¶ÈXäïÏâۜ tZ³Ð*O,X‡Û]¤‹‘¸jôátgÇ EA/b†RSÞ£¶Eٕ¸žIš˜„'žëÞbh“‹ú v5µì,†V´ƒéøv…ÀXÄXÍãˆoÂà¶ÎGý}Á!bÞäÀkÉaH ¢’õòÑ=”:„…Á 'M‰¸ŸVp²ä—€2ó ¿ L±Åk¥‹f¢ßŠÄ0>䅮L{¬)ùR)ÑÇÄ"ÞÜ\GâtÄmhdq8ÍOÄ×ΧЭî¦]uW:ƒË„Ùwé}7@<êLî¨Ñ`÷¶‡‹ \áÏŞÞ&A™Æxr½É½Vµ‡58¶Þ` ¦1àN•‚흔“¯×85›é¯¨h±Š˜(UôEº»|’nx¥›tƒ¥bì¾zó*ø¶*xù[›]”†þéÎ+B þ½»FMì¬q¢µ‘;Yá¹% »1TÒBx|ñ…?h}ô>î1èGÀ§AѼè°<·ÍQ²~u½i Uٓ¾™#z2eW¦"Gð‡·ìS +ãëÏcÕß_̅žækÍvj’fì' § Ž·e.\¯Ñ5îW™Í4&šŠÉžX¿ö4\Ùñ…>š{ÿXŸºÛù…³ÿë›ïüçm7ú‹Èÿ¼àOÿ†U‡IëÌ8֞êaÆ´÷ù՗Œgsßc38ÎÚíã=ÔTh¯}:Ÿfí]û|´¸ÚŸ-/—Áx;Í÷gå¥ÿí óiÖ¤ÓW”@)‡ÏÿÛBüò¾Z_ð_Ôzï-/ø/BŸ·C?ëRÿM ó™øÝrM=¤þƒA‚†äÌ¥£ÿóàbãfFé¿:M)‘ÿùÁL:T82?ÿ÷ðs_sä¤GÌÏþ¤ˆöÆæúܙâgå³°£ŒãÚò¦kÆÛ&wÿ‹ÕX€Å²'n [gä„s„#<îÀÂ~zAY¶èrZ†Ï‚9m»^`º±ó¼PþPÖùLÁàêŽÈxžBE°kfÿ1¼è3N0§Û:r{ ]Í e0/0™úãV|ÝdȳÚù™tswÒ¹ö[€¬-pýp$Aë0¥}k×̺³]) +JP‹òL‹™P¦w¦âÀq‘]7šG:ì ŒÏ;EÕ·V™…‚°‡óŒyŠöØK":¥Û®Tºç}eì†H‡?#YÒMÉû<ËS +Qìj`<ÝÄà(ªz¬ebv¸š´ízçMu6¹û²ó¢Àªê ¶ªÁ}WÜVD¾§k‘‰^ëò‡UÆV¨Ö`„:ú¯·¬ˆùEš§kŒ«8vž«’Iê§R†õ?Ó¶å¶ãJž'r JJ9 6˜ÊØSDG;›÷'ÿg³Î‡³2¹Ñ=•ËÖà¿)=j(ÌõìÐüOYÇԤӕÍ~rT;7ïԓy¬å½f¿Stùvܾw‘©º|¾g;HŽu “¯¹¼ìº9ÔFçb9¼èç979O‰«õœŠÍÚy­\éDZß_gÝ9´ÄåÐ +ýX¹º€ØØ)Ο 7‘¬|xb=^uËË~í»Õë§[çé,¶àçvpãbJ4 9ÁAÙ¶¯[¢ÐÖ$Ì |où\ÀՆ ­_üàj[>Ë*uEò ç‚9)P¦‰û$ Í]ºzsDìv•®ÂVߟ­¾ªÚ¹ÉS°âÎ5+($7Àì ö£:n÷EWAlnÈù» zð{=õígäHÇÒ÷lwÁÆÏ7,Ç7• w[îNÁòlÁzîûFãwAWÄ%~ʖ +Üx õÔ¢¼”޵?aJYÝî4¿¸áfK®†þ6mÈþSÏùþ0#v¶ƒ¸¢ÆDà/»Ëµ]7NËò‘‹Ka¥a›m reO–[»÷³ym„ üfýÅŽó­`ßEZ“…zJž•ˆ°· Õ¿³ã¤zgÁ~ƒkÄýOk±ÌAԐÿŽ‘²D&fòKsàÿ1p“+ ×S*ï6m¼ÕF`&@'gÚË=¸ÎÄ͖ÿj”0"iU°Äo‘ƒäm…–E&$ÐçŒý¼›ø—“¼æ%&ˆ¿µÔÀ‰n/ƒš³˜óê¨ËÄ¡7SµÛæ‘ï#¢êÜCzµ°°ëœ"TN˶ Wö!/þ \ð¡7‚Ÿ¡ÀЏ]¯0öÒvˆÎzÜJ²i£ ñØùçC€oŒêaÆÇ3ö§{ ¤­{M$õT.¢ÜQ§¦üàã`ÙðØ·tôÃYŲCˆ½zCDxjOK㜠×OKïœm²vC¡‹q<—†5Úªâ읒¥ÊnsѫŸŸ‰Û…íìz]Wz9èKz20Ý Ú0:üüðr‚ÙCvbù¼ÌZ> Ã„º‹Áj/ xÌLƒ l›zóH7‡tæ¾Ñõ÷.BßB¢sQ|èÕ0 ‹p{Úv» t`÷PWuXX0Dc¼cÝk§ كAÇãS,Z ‰³Otý l² Ôk´Ž”.×V™ÈbP‡Î”ÖÃcõË>%€·§]iŸ77"Þº¯ºrw#©@ ½õnþ½vCÝ$ˆoÅÛ꣌íÂvC@ò¡g +õ†Šµ½v|*'ƹ,Iã#œý¼":5Xg…õã<¹ÒºšF×ߗ,oJùkp‹ù‘H%à¨_p-CY6ø¥èð33ʇŽòp€î»"çbï"æ%ôþâW¾ÒĹ(7\^ŽŠVÍ=+YMv]CRðYÅ; j#¢<¨·Wxö¢Üçc|ñ]| ˆOý^æÀ$y©þ=ùÑ[¨_ZdÅ`Š%‹…G˼õrÙÕL¼áÝû–Ì{¬Æb٠Dzñ ˜Òòَ) Æs˜Óf³ÂÔÒ,¼™˜ç|FYçÜñ>FxȤɘr'f³õ¡Ù.Pƒ< kû°ð؉Ê xWˆi6ç ­‰Éhü4?ȉ¬˜¦†5F†?1†Œúɛ-ì] Ô×A¹ŒÔŸ·ðÿ‰pFYTfB:-°L²‘Êø÷rbmînÀg@`u¸ÉÔ$Òh"˜ ëŠßæ@S„²ù:ŽSv4°O`ÔØÅù7®@8îÅ2zf„Šƒ^JŸ¤O¼¿qÇôž”khÌ[ŠTì¯eʽ§enS9_~Ø(·Õzx·äì÷×l¿T¨öœ#J½ã²ôßë*8ÎÄæº@ì¨À^^ÆY™þJyÑZƒ½’é +“Û\Ð$eôÉ!†°} Bwy‹Bv¼8mM5L3ça~°a]?Ìíòń·‰Îg]j.~‡¶˜ÚùD…˜0ӝšjŠ'Q«Ñ1Õ>r/÷ÖZݘâ¾k®†,ssÀL¦‘ÈÜ© 2ƒ­FW§»ŽâÀ&Âʸ9Eu”ÅRéÉØS¤{s¶$F~Ä» ¥éî£ÀÓ³7òžç4}ÙÃûFDºétœpU¹ìülûNyçG2Þo2M‡åVï'Vè4ér•^Xæ)á¢ñ¼2U¤ûÞò:0¨,ޅã͈þc…zMÛßÿy{­ü¹cÅ!¬nO‹ï|¬“3™),ê%%ì<— "¿Àùº$òJZzú8vß7ÂÄ#blC~–I§O û]ĝ©/^œ7^ò®>Ð]7H#¨õW÷]G1'ÑÔk(ϙ_yæ©Ã©Ô*P •PÉZó%\DóÔZð]VVxï{å>§P£×([ô¯~“Boà-a\ÁÅ i<]8†Û ›yZr¢ÚÌõBŒ×[ÈAÈîu†ó½çˆ ñ¦åû#Ä?.´ýúD¦yÇ6?ÀªÆÍ"ó+9ÎT§kÁ?|%¯:šGŒìF“À2‰4©Ê¢ï±Ñûfä N×Ö!G€rÏWÜãù@0pÑÙ}GàJè1ç]² |kͯ½øØZärJdm‹cC§Y9ZÎuêthf ×»ò5Ýÿ^ÜhYA[ªˆ x·ï7+9‰á§Û¿¥N×"Fϵ᧡|i?vÃC¯Ÿ;¦VùÐã‚~ύ+Œe(±ÀÃß7›[Mñxnfðið_Ô¶’7܆tXÿƒ”Ý U¼f" +øíU±ßOôh¦<8ØÞiÊNø$6òŽ‘cÞ¹ŒûïÓµäÈý½Hy.0>‡Ý@r î±áV\w´\¸ò³8ìbÚß½Iƒý#W‘Õu)4ù zËöTÑrY£t{•Å‘”7ËN1ѯéâuÐØR9Éu‰1áir [.òsc½Ž¿þô¨$ <ß§Þ#áàºÎ™¥¨¿q<Ÿ«>hÉÆ…K4G/mß´Xwn¾âvC3x-„ƒºOMF»09 šy_kDî‰;:’ˆ'[M òÝÍàx!xót®è=õ×Jö/%hÁá£Aâ=›Dê Æê5&`Òª‡…ó{þô7¢Ò%-0â`-›Cûé4JP ª38”VͲ#î¤jNß½ c2i,oú›:‹õÜcÑo·†HŽè[Š[7CŠï’»N֐¤û1XVFÖ×nø¤Âá µì ¯GA{|M‚ +t_‘”æÊövtö›å7ˆh~ÒhYAmŽ‚À¡WNÌ´Iñü.â¾_",>>ŽŠ¶¥ÂvÖ"^þ6~ø§Í¢¸Â›ÿLëŽ=ySÐöºR¨Jƒ¦=£®k9É£êÁ­c!Ã)4zT˜8Ó.GLI<íY$ÆÉ5˜’:=t8Ι«›Ó|ú”|ëÍóèþúG¨ ™ JëOqBÓÄҞ‹¤ç,czñÙ4þ§2+ÙPáÆ%i$k×_D%ìgiƁ€½Çö §‰àÒé%HÎMîòÜÐOÿƋê¿ÞVr^ +½‚$«óH!Á½aR ,iå#JÙQ㸖ÌaVõ՟ÅVʼnP°{Çù/8¿£2›æ‘‚«·B\Wí%cN©ëªŽ©¶Î +˜«ù?R¯áW:eT‘Õ|ɓ›J,,7CVMÌ®•;[ +xiX:÷Ôð¦7”Õ;[yº¡üQ’­dW“þëìjTyüFów9gFŠš£DK2ã57ËdÎ×AyÀWîÂ[ÜQæí;,±X¢Hçë¹ì0îk!hM@×¶"g‰åâªU¤€°eBÛ¯/=yZØnñC»ªá¹Ð@[t¨Ò& +ttÊ"îêVü–¦Qwƒ¤ŸÒ†‘aNzGמª<À¥‹­FxU#ÑéÒ/ 4l›Ÿy³½RY«Ü¨ìmù'X‰¼¨!ư AÞ"•}²½ã4©GÏK/];.l4~ +¦D÷NÝÒhC—QfÕ¤— Qlu+'—0Ê®(",'-l×2ü2yùÁ½ÕpžzªôpÓýY3‹ƒ[ßeœ³à-IaZþŒÃ™É^%`‰Še·j±êäªKhõP2€Â|³ã™ ŸÚvz†‡©U¹n¶‹0Ýt rÛ¯=ÓrÛ«ž˜í՜8¡± 9pá3阑]åî™×<Ë:¹[èÖ<‡l³i¡hâv|vŒÁbŸ +Ì=ڔ˜6 EŸç>Þåªe¢|[=$1£ôˆ¾ &Ç0Z<™¥®€óӝӪøzÞÌmðS­Ï›‹*ô²——Ë +¨Ä¯Ðj.ò0"û¢Ö5öc¤Å¿fØøì¹H„Ñ£#½¢Öù,ðªüÏSÈ÷:S¹Ô»A¯[¥I>! :P6læ8ª™ H SÁ€Æ©'rXÃO¶zÂ/ޝb±”;¬ÀØ_ð`{½D—¬D˜§²Íóñü4x}&¤I3d¬æÞÇÚ *øñ¾“ßûƒPÑü²¹× †¯{i—öђÎ7õô~ŒŽôžN¤ß`jÅåÜbü§¡æóF]#QÒ$78A5·Ø7:D~¤ô•Jú;iGæEÁwRŒ +¹ÆêЦ²L¡àۍEÛ­®ôPcÖ(¦[­4KËÇR³á¶KÍ¿iEºÆê;qndzz3íý}*ŽÛl í³îŸÞ#êW<¯r|]!J‹º€êÅl樯…¢Oï~³á;Y0‡Ëâpóñæwx8þ€øLž&‘J‡GßÞ©¶ßZRt 䔎‹û~7öGããK—ú’æØ¤švg.S`ÛÙ7øþ©ÿ´´«oë÷@n ³lå¡t_ßÿ‰¸uÑþØì#×Î(¼pTZ6ûFãÕÞâsªN¶AluߤKîÐ#¼â=•gÀ< ŸÑÈ>ÍÁé̐•=ié#D®<µü9ã_ö'úÖÜN×>ÐæZ”ýG­"L7Ö5ÿ@V{țÐes½!?™hÜ oÒ±UÈ»¿æŒ£ÄçM?DwÿŒ“&¦>}QbÀ÷¸÷pañkýTV_o~òLøþƖ ëìæM0}+Ï^ra©¢žÿÍ(, ¼Mšö>éšÞ¡˜Ò?¯ß>+W7QІv…Œ·b|<¢·°a¼àåPj˜Ý_ Œ*5+Ÿ —êG" õ`‘rµÍ¹ˆç¢3ülŠLì…Êš™)³ê +âD)‡öp–¶{Œ‹{­Ç2¹`ÂFÖzµ[Çqhf3hÜÉÓ + (҉^êD¯x({§-À@8_ŸÞ Õ¸¶ÉÚãkrоäµbžs@AmÁ +lùYã$@xYðOQµ4gÀS’OI›>à›xáÝÁ±Pd³0Ú»ò¤jÒû1'8} -}Y)\ 0¢ a»Rœù,8¹Úv©Ù žjïÿ¾ÈQOé‹ç´/š»YË4‘‚ÁHÁä4Fþlä_ÏwÖJNÏÛ>ßX{I"øJ!ˆ1©&ˆdÚ,êI« ­Š@§ªÕœñös0 ÔmçOà˜£YKWw+b)ì™`Zœ}Ëða”øö&ç~,ʳqk쒙ÀesY­H¾«Ý-a`™dއôá÷÷'ªÇ§BQõ⎳|ý™üéwf”Àiós£JëÃI9 Ò Ê?ÏÔïèiÌ0dW|땱ªÐîš›˜Žß5÷_¨üd2‘æEŒRëöì4eH93j@o Á„xbìM„nYÏxþ|­APcú‘J[Ÿ œÏÒ`½Õ bÌ —mÅѤÁètפH} iÞÚ2§ž¹ÿ¯Â Áï CªÃ]G&f˜Èff†e°#O›Ÿ´Î£jPMÎhY9ñN•…i +£¢4b¤”¯ ÛrCÀhz4˜Ð÷ÀzŸ?Ø8s7Ýh{àèѬў~€ˆÓ’¾ãMý"J_)£65©‡¬!ø¼3ʃ›·-o]}/Fà!%n&~ð{—ѐcMïúëæ=Xq’®Ñ{v6±)'¾ÆF,3évÐV*jò +§"êêPÏ×h¹ â`®f¡÷ýÀü/CŽQç% ÓÈByéÄü€ô‡ ãÁªª6xÙvx4ŠX0xþˆÙ€ßV÷˜g PdïžÌ7îêS²èJ½¤¸ ÷‘k.šOã`òð$|ÚEoc¹#ˏTk¤mÈ/–ݽóðd„¶œ{ç;>”´á“³ßrNvè¼Ã—W&Òmå/˜ypf2‹×-Ú«o#ïr%Ë+¸å§kv“¯äŸç{ÿ¤hÁwÔÁMøÆÅšÃ#S f‹"3Ĝó'v1‚cJÞ× ¸zFK)#ɗlà-»3ûÈô$sŽ^p$z‘9ì¹jП ß?;ÀåÌB¼íÐêìþ£’°ÍÅʷЗË-o,v9ñJ|˜Ko̪=ô8ÙZ9X8¯)àÜ}¢«I4ï@F¶Ä¡êá­;Óí¼‚»­¡…t¬±|Ü/§Œêyö’úæä²ËØA[ÝWîë]Dž ì¦ÉùÙv÷k–YcRæTß;©‰£aH% ¶@Ŀ•?@“8cMցl z'¹Ñ¢¡sOôž(bÁ×DóâT݈9»Ô%««”‹±–z-´ŽÞfø¦¤ï84šIý@Ð ®âˆ}üq÷FJþ®CBlÞ|SãXâ¯WNF•@çWÁ¶40dë}úv£û‡noä0ÀÿàÿsÏ-¾OU‰ƒÏ08ž`/Æ]ñÏÒ$ÜÚ€اªÉš™ùäíbN¾ZA’)ãOCy¾OU»Â[Ú2qüø± -ꗀŠÅԔ»l> áê =€†w޶Z"‡óžyJq nëåÆ.˜î‰ú“«EVl]e4Œ­9Nœ©9e*T@¤[†‘=^`8tUt•+K,Cz6k6Ñ\qªN×xFªûçÜ•ïñ’>šÀ­®Q¯8~·­®y&Ÿ†{\œƒlÓææéA½~]E·Æ™€pö±;Zê°n5«ìSµÆö²ÀÚ0îJÍoxIHÁý’¼Bñ PäSŒ^á»°uœ¤‚³Œfy#Ðͱ Ä£j³=3´>&VWIZå^®µ²¸ +Ùäì‡LVr÷Zß9 ­ŸW#[{Î8­¿g3U¿Z#gÉÚöUc"Yýˆ¢Éív#I9[A÷ i_º™ÞøÈ-#àÊþrZü:JþÅ"ëkzÅèpldWÍ¿'tÍ®ƒÁ (®.J°wôV§k*µí%nÇ!6‰¹vy‡˜^ ¼·ÍôÄ +TûL®ßÜ"¸zofþôªó¦þä•qæ4:5V¬]µ ãù®£ñŒÃ9[]ú1^ +‹]á.§$ғÁ9‡É½‚´`-¾€Îøüwև0ð`Åð¶Û¹.ØH'ð·ÈÀªF£tFÐ&tù~Á!‚è ˜ó(&¨>2î@fpól­7›\Ñðo£0ãyqœÏ§kéHÇCÚÍj½‰“0r“’=Ô}ñFMl•~÷ö•û±Ù¿¾‘§, +•40lpëà8Ôí*’ö@ôY@¦þ£§b{NmÖ/’Ï If—§ŽL¬™¬ž¼ƒtœ\³Ð|~†ñ ¿J¿ï#«€iÛ[À—l0§Ê¸ Ø¥kbTÅØ>^ò¤`>Fu!áiiK(ZÕÌ!џ鏝 +ÏY Ëi`E¸ðéÈ k¡-*Ü7Ñø7ÚSº—zWû |Ôs!º'`7ÇjF!ÜF”®zÌ{ªh—pjâ¯(´¦XpiՓ´êàܬO¢Ñ³<—¢–ž? ƒŸ•{°æyó}<жn¯´]ì³=r½“å¶Ï–ö†,ôhG¿y諁‚ó›¿Ã~³ìϤ½š’ö„§ÖO‰¹79‡O&Ä:S»©vÇï2HP¾øÇ¿sÁ[~K˜Ìܪ6£{-e2½>>¥1â îs5yº°VØCC—*^àåç%vfàʪž}šùÌÕô‘KâeŸLšÂ±Æ? +‡/#Ë~s¶yVpÇr©q:PuêúcØ Á‹c$iNƒ*J±ƒÄ$çñøpµ©:ÞJdÉő­Çí 醍G¾f•™&•V –”L|Ð2õÍ"´íŠåŒàiX¶9F^ìeKàæ5‹ó<ÐÖ.“€2ÑÖÎXƒ!“½€m2=WÈÛXÿŒïåŸçŽÛ×(· =VÚÛØ¼tà-ÆOL4þð÷æÔìùÆ^ÔnS²Æ¥/‡TÇÃõ‘誦*ùÏÁбð+Y-Få\¤]ôꯞ7ñOº#=¼AЍ§Qw¦ù?4^Ù¤¬ë¢$X¡SòƆ¸ž¿«!4vkýB¢= 7úN,ê~ê|â2Œ_E48÷œ:¡:n=lÌÖ?؞ÆkëL¦܊ãr$÷gGíÕ%0‚}ÌÀ¤‰×ÜÌ2§ùfçÃÛvn³ ö£Ï, +¿15pïU%ÁÁ(7ÆÙÖ&Kb>$·×$¶.³•È3(Ÿ +ŽCÝ÷9 °ß<¸ÌÕJä9àƒ2ø¼tžœhëzéûLF+4¾œÚb2à}˜ Ò ¨4þèÈ"¿6M²wås›|ÚLb¶µ0nnX÷õ³edPÊvš- +T ÙۜFâüGGÕñ}$Ö~ÜÌn~k´[°ÀمљÒúüÚS,T7÷L,Òaaês|§çÂÍe·ÌÛ/ÏÑ]2ßášBU¼-Ľƒ›ägˆä(t'Ç4T ”·äáqÀöþ¢´Š á;VÝþhö=2´~:r®Põ¿³ÇÍ0Í$Œ݇Zšÿ6X2ñw¯{¬i9)Ó&I$’€À X, +ˆ@s&b9„öCØ$‚ " +1ÐqŒ€d¢Ü¶d¬™—5mçªí޻Ͷ÷VÝ{–îÛ"T€ ­EZ¾ÃF•€ +³ï÷ÿß¾ÌɶÛÝ»{ówó¾~€ûà÷ÀêÝ­’IdrG¦$Ç?0†ŽWÕtÖ «ê£2ÞK–Ã+Äo( „NìgÚà~ó·dGãɗN=ÞU§UÌ=2IÀêMôß҇Ôw„ú>yå¢w’tu€|]ú‰ÿ3ñô¡êWüïÔ°âÉÍ.¦C¦$l–„çln4MÉæU´ßÉíc ½]ú + ©&Ç Á„M4hré~”CÎÓb÷Ö4`õ¶x¢‹[tŒW%d¬'.0L‹Ûmlæ@^$a ØÁ³ðtÉ03å®Ùº˜_Â9ðš<Å»’¹Î¹ÎØ ž(QöiςiÜòž¶u³•U“éx¦hwŘzqÑÃ"3u0¹„ ^É]T ºÐg +í*Q´d + nÁïX¥Öðg»„š¨1ÁNûJ^žu8μa»¤ÃöØäíy2dl‹‰Üf遼ßQ6ÛYõK¯ûIVw͘y +®¸`óÜ-ì\sy‡Ø‹ÜÆ^PLhækE²TU7‰eåi¶û`0l܁TÈ8uÞuöå;†z¨ÉøÐ‚j©ù“žm4üÍٜø¿'gæ +gÿz”Â½dë˜? ×°,£;ßñ4v< +ÃgµÂ Çìí„lAªzCˆ¶×mÈ<CÛ¨ö×dbڔXÛ9gl–¢4ÙRц%C§Gk åd¡ïNý¦8|ˆÙ(Q¯±*4˓¿Á̬Ót½²”UèS@h¯_f* ìb ⢪c+؃v1ß%{Èó×ÞZ.]­I\,b¶„m·…G 'O*΂P»„èeùY–뇎N8™jäÐyM:O1Ï´ˆÌ\Ûâ?b?fæ“nœs¢ à( +¥ð‚Y´‰„Nã•G[&‡Z‘ëV³¤{ª +sDå›hU¹•(„)x‚…/t¿÷E<)gOÃ$ˆTD$Ì]¼ÃB¼ŠÔäè E Øí³õ¯ÛÌÌ>Ã)[3—ZmØévJKëgrîÙqÂRËb °(Žíöå[v;³±¡{ö1 I9e±D/’AåIùˆ„,ÐÀØÍ•}È1 QQÜ#0¨ÓòÌÉN—„D0·8⨣FÉÚø3¤s +jeò3q¡‡Ó½À†XÐÃÄ#Íù“çZ2ôÐÃþš"kÝ/ßñÎÃá†L«úó*ð µB°«3‚W»šHžPe<£O= +höä§7P¿•4‘ôªðGW*¦Šµy •­xPœ¤'&ð˜€ïgÝ¥lɛ#¿›€í”Ýá&`*±;—rO~jKîê˜Ú}Ûîá]ÄÅ .eB¾Q§e­ŸJJÏ@|SGvÈH†ÏkiL+’‚«‘´VØÒÇÒ±Ó»†j2Bqj¶Ñq )=…n»¹9òÌb/¬›8žWQœg4°É=|Hì’+ÿúOžæ6>áÕI¡Y;£‹œw¥ZÛ~ÞKûSnIÌ7WÎí.„yÎ_µÅ-ˊ̓˜«itÈC…¬vÛtŸ‡2B­ÊÔJÒm–Â*ÛlùÈgè*·¶yE¢‹KéÜEë#ý;r5Òyr´hBú|¨ÐZòÊõÆt8|83™W¹˜3´rÇD¯†˜zkuã-€6c¶\7/Ú^t•®x¿tÄûºM©žÈÛjú|TÜôBÜɨeXÌ»r +5Gx»2pr·p˜¡•o +©Ì +¾ëÝAÚ®—¾ƒuMò0g¤%8%ÊôB™©£3ÌO¥]긁„c›îJ:ïAޏº‘£´Û5º¨ +ƒ2õBØ*<">=ÄYt|E¹¯ãÿb9„z <Öû°sÎr¤ÞJC¦„Õ;\æIŠ VáHyŒBàÏ{j3™MòÿgŒ{TXªàÝNç‚Ø˜@§º°ªsCîð|KLóNaærƒ§†øI½>TÆËÞñþ¸%þ<’;®ºïbëû‚þ[ç«fǃéq•*ìñ\@}­ƒÜâ#*‡Põžá³ÿ$…WÜ0ªø^à +¬pÏÿª–]~×$ŒÁ7ÀUFT¯+ez*–^$fët%.þõͼÑ)³Ÿévñ”ÎOÿæEvËt½Ç^…=ݔÿXp·ßF»øÀ;xᅦç€t|PãDÕ'‰}‰ynMˆbÿk‰X?»¤Û|ïi[+±têÄóÂ÷BTîUn1~¶.Z<ší ÇÓ@ÓÏ] SJ“û{üà½Ä¾Ã/N¢£A}‰éÀÚÀ™ùØLøÑ g«f‹|x ð›à ãìäô).“©&×IÚ͌Hiã«vá°+OÉÚÒ5º0/Aó@AUó5 Ýù㕁µâD’=7ÿ[Õ!þêÊSsÏ*ëÑÅrܑ³F•Jöޝ¸ö —¶”™rùÁ§ì­”™#d¨“ôÉúöDx¡ìhy'èõ˜tP¿±Θ±íÙ&›D†mÒI3§ üÁ¥=ÓºÍÔ=\› ­8â¬á)E¡;²Œcä-ú°©M΁Í6Õl#škµ§Ì-0ÞkÎ+c@̰œÝB4´ZÔš/§ýå5íçP£Å££&+ñu Üx^nî®Ã"“ÓD!ÆRÒ­Gí<êŸA“csu&dpÆì@ÇÃ]¶A.hXc~ÿÕaõ—ï¼ë>—ÞËÆ>]§ÿy”†}ð²Ü1?ÇÐhJ.㡵{ÄÑÔg5iBžÐHsQÙï|åàJ®Œ4$°hBX(7‘ݽw¼ÃãXcÜìœ ¿E‹IŠCÐ&-tx:Áž˜ D0ÄùÏQ†'ÌÍÿþ­Ç\†+èÃ7[ц Œx}òþÛ$¤¢ Çà2Õæ‡ ËXÈ̵ÓóɚD(;Ï`b@HQß@ÙÈeåÕ¤)œ^ ¢°¹J@ð2çs@°Ú%c¨-ò6íê„Î{­ö¦T©Çnæ}H}ÚEtÓ]œÁàcQ•Øn_«ô‹تV:Ð¤Š´¹á§ gÁÃȵrM—|0Ö&°°7!aPRݝCǨÈìkîý)(¼%apOâ‚õµG}Õ +ËJ–R”NZd'Sµº?–EC¶\1ojxñ–T&~€½‘ê/Ôd„¸Žºo!b×z(ç×ÀíMA Sv½Öܪٯ(±«ëÊtçšLàU*=cÓ)ÙXUA¹ÖüB|À˜¢AÜ=)ÇìTqÆ@{a(;?¬VäÈˉ½àTÑÔõ× …=±)|=ÜuB¾4©Á±éh¡Ø.z‰Ã|…$30&$3Ëük{dŠNZŒ”Ãåи%ID+‚|ª=žvȑ³r$™Ë™×±Ì>¹ÇÈB_`ñ·f®ÚÓË­”;¡§<}Eø™':éc,Hw=­Œ;žÎˑ-xu¢Kœ3i*¤gAør’£)Ï.µŠÈÜOó+±ñÒxC W~¶­–¶k3¿ùI/Ô|ÅèÔP²°3ôg¾aèô3DHçÍJ-Y{Œ´ÎÓ”Ô«ÖÔõ¼’w'­³jjºÃøG(ÒÄsLÐïZÊêð‚‘zڝMTÁ»G©©uPÜ¢…ýÃsô|æ¾õ^Ò<×û‰TI`œÁh0=‡?.})ie(3iŠ6 =2,U½‚TÛɝOÔjåB¥ï§†&"'3ðè \áÍÓ32ϊÉì)Sú's°w¢K;;š‘%›“ÏȜ#ÐæŠÅ¸©£Â'Ábãæº!4"a=Žÿí¿„þivóÊô¡‰ÿi/õò(_ÔÀmßð˜ÀmßDÎ%_+ò í~ ñ—òQ§ŒÜçÑtÍãCÝÐ¥¦Þöx4íÜcv¶Ò§WZQhd`eß Á6,_™fy¢?;͝’)± qÕ¯û°»p£KV‹îÁï"°ÇîÔðã©Ñ•Öãv±åu²²%uÂä"íÆÔþº­ŸcƒJƒƒ™žWEJ%*#éݱr,âЋ‘€dÌ4K¤ÿ´9[LÄ®ccÊæ+W2¯µ‘)a˜íXHjFyNÖ4®fz‰Kù\“&åq§dJã§‹Û1u®„®6è áAÞL?$P¿viÀ|Èøc°üôK½ËîÅFš<âv½À¬´ÑÖ'kdw„¡|¾â݁’¾z4®^I’%rõ{Ò¹vH2!õ‘ï1çNW/ë¦Qú’ökÍp¦û¥¦·FÞ»ïq‰]·EžÅX|ôi]°zbØÝÏçˆ2ü<¤£|R˜)ÝDðŠ¥ÞWbkÖÃwíÙN§PZ„ý%(ò…% ?[”¼~ß0®äˍ <^T˜Ô¦ø_a ©‰n’®»1l¦2û)xîÍZLÍpÃ&? P‡õç²à[¨ðq>žaòÚR iWÆ!–M )xö“?\öÞ²ˆ#öAP†Q3æ§ò ÐúG±d“ ٶР_‰&~ 6µH6qà ¦”Ü?,ôZg´aHéÉ܉*ºÓƒYn^É[‡šØï€âfuo¨0¯hˀø\¤‰–ã<÷35½¹ûy9×ÜUQ`ŠN²/”€9´ß.έҋ¦:ã)KQp+%ò Òú"À<=çÆBð‹®;^t<1 ´æ£Ê\’";ëRP3Óùu±ƦxÜùªTUƒ0[œ†èRbÅHp ©]øô+\ùäÈí¸ Múw>©!Ï¿õÎG” +÷p»ÿ@w•,‘Ú_;;i ÎÙTi>ó8’"cö6|N–M¸µï%2 õŸ:1ʒŒR¡á\Êk8Ãj®,F—ÑÍ´OýqòIIF²k‹ø7¥} uõ‰1¦ÙþUL-ƒâ¡ÅÍV_:…‹¶]»]±\IYãoÛ«Ã1¡Ì-âøÍú “Ãëٍõië9 øo!*d&ñÍöpxhh‰#ÝÿàfŒXæsi­½QªKLªB G/¯\œOÎ¥¼£“8Y̜Oús4|Ùf ¾SÕ*uÀ±ad48Ü2¸¸w'§a€\óÖÛõ“vËeR'6§œ½mÃ}Æz×äaûÞÉëVîV•bÆÂì‡;IŒÁgÍÃRbN5ºŸ#ô@Tg:gÂw:šÁ*œÈÒÂ'ò޻Ȗ§æøx¦ýÆjÚ´‹»¡Îpª’(j>xP›c0{+!MI~ °ð¦®KÈgŸ¬E3@Uè9§Ù*Ñä,°Ù>Œ1¦ÿ±—tºöqçûé%4ˆ„³ˆMÍÿÁXxÊkÎÜ,4tz¥¥T¶Ñê¢Ì–N×ñh#f9¾¼R“Q¦?:d ôÁ¾³|§,C7À°Àò—;†!ak°xç˜>¯ íÇ{ÕÄ·í&ØWDÍDEýŸL¼ÍlêÑ^m†^;ØùÚ¡Và%ÚdžoæAP|¹ä/S*ÞÝ6¥Š²Ný€3Íx˜Ëp¿å:d|cªÞ®)ÁPNû¿M§™öUI#ó-.¯W͝Jñª…GGö F2Fšø {d¨«²IÀâý +|\Ô`ÈÝS/¦*ÀUÞª)‹4î<§<c¶×Éý£âÎ1Xz‹á¤Bkáˆ\ÉÜS´ù‚[_©,T\#ã€2=vYX´ú‘CpÃ4™^4a^UBRU  ÂܯᐝVƒ\·KEöàËIó;¤÷Ät6žüíL=$¢FQ¸C×IvýOû†H DÞ~KÃ6Ƥ—#ˆí°Ïîrû9_•Örìär³Çå|¨å~m§AŸõ®£³ûŽGôgýNЙþÌÊ'ót­m:Q»p­T$“3\$<Tfç_ó¥ŸQ=kÛΪ)‡SISà@w‚7k±ÎÇ-“B:Ì6ø<”œV=L’L°Œ¦ø;>”XçÍðï1ó²¿âÙÇbÑ·b‘+v¿‡³%ӋPžE€ëÍ.Ìõ©Jãç5-Œû¸]õ ¸^îŠá +çÏK¿šui·ƒ +íIXXGÜÎZzŒÄÿ-?¯)D0v¥XYc7"Ë;ÁhhðÚ$û÷ÅìÃ¥%ÍÇ~Ô´]æùdn„¹®áLÍ;•%é]¶Ø-‡2%&HŠ  Kk¾}t]õMŽø{õ©3JõͺG7 Rw/&rCÝR‰Svb‘>{$ÿôØvªÌ Ñܯ<†Q}Hd5§=l)¹|ÂÒábþà¶ h;Þ7º=qý…@g„Y6~ݹ0:Ægó®óQbÑUÌD*“ƒÀ2¦]Tý-’N n¬o¬­¥ À…ÚüRZˆ„€?P•§;¨Aífñ8e/¯^pÿ~&L¾Ü’:kžÙ?í³IÆÀ€ `! +? %–ú @IkR{QÓ.À)Ð µC›–`ú>Î|ª×ò†»‚ +Á‹–ÈCI€Ù€ º§éyè7~%àÆRè\ðٙƹf}E@³rfJf§,”õгÜ#ÚhÏG/#_‹Çè%±ÝB2Ð;ˆûs†Ì¿çñÄ©ÉÚðËFö;‡ŸQ&Øv@2‘ø^¹eê"!’,Ä+8’E¥)âôæt˝Ž†ß ÃýI[–Z”¿ÛǗu?5˜åe€ý¿@@gþÊ6f-”꩘Va•LÀÉØ"½lµTEˆ;iNQ|1ËVÚs±ëb˜ J萢ÑÖÕ£í!ÚØ²ŽYž ¼€ÏϓРüÄÁ#·ÿh ËÆ9>'ãŒù«³Aå¿ÌA”£ÛÇ j”RtG§ù XîY3ã~_Ðo3:âµò• &E[ä÷É7苠/°òS5ç-Htàogg0î“`U%`¾¡óêµê“€™q32êµ­ŸZ‘ãh¯º·«ÆŽB€„vY²L ¤Y”a¤|Ñ*ì”h.ˆÄ!Dæ²vË` ŠÁVÎҌKùކd¥÷ßxi>IHßTW¿hšÌÞ© ²@1دÅj'ûœX;3͆çf1Nîü•ߌ(äÓS0,ù¢fÙÑ~ù,LJ‡ÐQh«ÜÞÓåæÖÁ"ÀK‘Ç2Y«iÝ¡Cë4òKJݸÓÉEƀ\â$wöØÄÇñ?ÀX¯4¿Ûüå`ëÞÚkeaUµõuš–¶£Ãh¨©&Þ¾··½qRV#zĞ׶4NM+ÌÛviý‘ïZÞY?´/س|ZpôíoŽ=€#o|¯œyXG2ŠÃÎ3Nåܙ "E¢X y.ú~õÆ\?‘ QLµÄöŠX™Vˆ˜]!ës¸j³ ÷G{¤ŽØ*2:–ªvG:Ñ+ÌL~Š!å*+Ì¢'Pž9ľPŽ{m:(¬ÛÃ;5 +n¶VÌÿ°ß ×8)3pùQÃ÷ڗPS%Øá¶?\Ü>͎ï,~ît¤QÖÒٟVÙºnÁ¢Üc `¤Þhiïzß ªÇ7ÃÙÌ·Æ­+ë²Õá^µ°ªY7ª6øŸLÎzª§ªRrÞ2ÙzÌê£D÷.@,á€xVˆØPS€ÛûOñ&à{*Šš|:ªÆiG=¹‰BóñùE,O:;+bìµÂô6LSV~¹LƒX´Üú¥€™­§¬¬Œ &ßåâ}áF^,Áø #Õ‚•gàv,LǼ…Ü˱M¥¶|¥)ù󾈼zÀ§½\ƒg`.êŠÜ´õÜ´Á¥»œË¼†=#H‹3¡Ԍ5ü<>ÿA˜%?ÞHn¡ÿ~ÖIo}XS’†]Ëùœ‘ŽNwÍlúåaø +«iÙÉ>Nç?ÍNæ¯ä_Æü@—-þòEŸë‰~ã>€<¡1ÿ–JKÒ¡=£JÑ(ö¸Ð„6Y\A—3ícÈS•æøT¶Ý­¥rÿ¿d’w^²!Re±‘—+“4nÞ£ç`#þ²-šB,&ÎÕ}ªÇý}M¹ôx†d5Kl¯¡•2ðõx²)cp[ẅü 7lÿ ¹IØâý廙xª@¬Ðœ1ˆZK»¤Û»myg×þ>pÁÇÁ`p\Ûàuû–WB[¶ÛUëÝíÍg凵% +HÇd0 ¿¤bK-zŸq«.ü_ŗ0yPÜʶÛ'!Åp»w0xðܲ£ÀëîƒP¼Rºwº´ƒ÷ÀìЋÕ\ ßn¥ûكDgijܗfçΞ-+­ìd×ëP“]~£$Óá&Úþ¢a}&Q‰’ΐ$ك³ G´Å}õ‡œÚNjLË7Å0/à•l…ÅRÚº]Kl~ðÈáô+¾{ ۟c0?SÜ<hf—æ +Î-ÔC"_JZ†uPKø ÞIþ,m?éŸPÂۂÅ!#ê¡"Ñ~ ²,` ýŠ,*ýéڋÆùI‰Ã‘Ÿl”ä|èjȹ0vŒ×í}š4¤à*‰póA}–N°»š×‘[1¦(º8ÖMÅù¿/;#+˜½íAý:´é>ÿˆ9c]”kԅ’?l|Æ£E+_ƒ¾Ñ3ó@hƒ(‰¡Xp»Ul’õS¦ÁÄÁ'bÄ»oØS‘ì°Â‹L¼k]Z­éH¿l˜nn€?`v Þ/·ÎrWÞûnÀ7 Z||sÿå¶K‡9©É¥%ˊV ˜ùé8·ç—×§Ï_ðp‹¢öˆ4ó,½GöÊùXTÎÀ††jZޝÍ¡Q­óDx2 +zõmÆ7Fƒ‚aáÍò¯3nÂÆSƒLE>=€`ö|!Kòø‡ÿ䇔voš€mKñô1h œö½çe®ØÔHìaÎ4_üø…lÆ7ý-ÿ]jYñÜoj)òd%ƒÖ1Šýôh…ß:fgÍߌý…™ øwâ_²~&(/ÛP ‹Þ*×+â([Lo†ˆÌ޶ýÍÜóÂ1<Äî…UÑë¬l¨ËP¡Œ_³\A©D—´ó@E¶*O¢7¹Ó< é³±yy?EȤŊo¿3?ØèÆ%׊ N¸ç䬌ç(ó'<<‰ç-+MâBGœ­F8œal2'¥Æ4!$P?˜/i¬‹‘,þ«c·íöµØ-›¾Úý‹á¤õ-P5Da‘@CØrßnÕÆp牏ÚYýÙRNÔ«ÍQUô#L÷%ƒ6w +úQÏ‚‹™"ÁÏî2:Øg¯È!AÞÚA§ŠÊ˜¡ôão\ƛmþæA$hG„æð1#ùðW äY؃©§Ø7ý”¾Dëì,Ìç/„Ï?°…©ÓÒ_ÈTôDâ?ÌÞSü]qõ#ùð•è©ç¯¯Þ±¦[Jàó¬—²n{nªÅ|mÀp\@=¦VÞ·$ößXh;lÚZ°]_ZoÚÿ¦ñŽDì8èŒÉA‹yþ[zZ è¥&Š€$îsTG5˜´ç¼^6õ•äk1;{ ŸW“2°³NjÒåÿ â)ì æ+›—œÛSë +§\8‹YÝåÿÃIÄï¹@¸å‹Fƒ@±•0—=tÜGÎ70¨L÷ï¿ ßdF!~ÞìÚNÙݒX P¨*´ +µV «e[DúUÛ½U7U¸î°ÒJUDÕ%«eøû*¢«‘QE¨ ²¹pƒ­U” +QDPú(Р?ÿ¿¿},¨W<Û¼÷½Î÷›žç¹ï¯Ôºé$’Xܰuù;foœüôˆž¿¾á˜FL¨xÄf7“"N«ÔYû–J+=í۝Bm™Œñs[²Šùgý%ÛÿB{Ìג•Ùg3•òو±S¼q‘Ñ–ò³¯‰Û2¡D†0a•Œû¹‰$:·!rBÝÂA´gIy/Ñ ‹â¯cm]ŸÊ o¨=4ļ Ú&…d¢ÝŒT¢cvõš´ ä ~ +.{VBµEò_)P5ÒÍ›BÅq3YRùR-jüæ`¤öýÜßÎgŠ’ªº§‚Î ^½Ï0÷Y¹µK²ÌÞ4ƒ¯zç@ßx ‘§c4’ÖúÃôMÉ`úŀˆs¤9,­õŒ€ûñ’aë+Ç`í÷°t §jyíé@.Y™–TŸ}5ÏkGÃ5,¹}çÂ+ÕÄÕÑ /Þ¡sôÒHЭ„'$f´`Ft֘@)Öpà)  )c òÝÀñ²é¯™Îü tú»®‰“å±³ŒÔZ{à(ÚéÓFǾc.ü Gg‹DÊúÌéU]VÁ|]‹BõLíÍ?$¶\Ç/˜¡8ºÚ aïô×Þ|‘÷DЈum&¨·3ub{€¹羚4݂íŽÔ|,—æ2äûwþ3ì>[ž“BsÜf^1´×˜n…_…{,°~®Å¡äæKýd²dWvLÈ/¤_à=³b zÜ´vÅ0Ÿ’t•<ˆ¶1Aå™%.eeV…¡ÄS´bpo‘ñÚÃy©&ØÑÝ`™2_1”(ô<Ǭ?o£,mQdì]±ô‹÷ÙB~ìj~T¿’ýÀfkOw:1o  ¼£êfm±|S‰ÐÓu>—'£ä¬ôƒˆõgۙã«@%êÅ= ê½8ÿG}§áђ¯2uWîq?Û`"iÔKÀ–(¥M &/Tcù*:VÌkäôì:v:¸9;—¶¦ß9˜î›ÚúDé¿UóKQiçµÂ,çF‹â+΅~{Ò9!ç?sוKŽ-ÕNÙ±»Xš%Öì½Xšcý ™+aɧãŒfð¾ˆ'ñ¿âïƒÑníC¿üŸ¿ ½ÿŸ¿ºàÏߤÝpÃËü\`;ªù›æ¥:Yrôgªsn¼¡bV”—G͜? +T×_öÕ#lgØ{üHâ~åO(ß{:4÷V0rÁûw^Ã*¯ˆð)aŠÓÛëàùÞÎ^(; +¼NˆZÑõ3Î õBºS}L´ t×Á½\$¶mè—]_êQ.(ûÛù ~Ébîp%™1¸¢0èimK›KÉÙù\®M_ؒs<]ïON¡­Y(Ú2ÌüæA_€‡ü´kª U·àv „˜Ûwœ„Ä;—Ë~ÙRÙùÀë Ý„.èÈKâBhKÌĽ<ù–Ó$B[1½ÀÍþY= : "ºb|lVeÊ@®Ü%­EΕ·ãºí» ¯ È­|7éŒÆÖ¾[¸÷¢¬¢[ˆK՘ ’7ó˜ºÖ¼ +Ÿöj8í®h|E{k˜uSq.,3 ù°–(ï‹{¶éA½ÇîÒ^ã‹ÁÚâ*ÍÉEzÂyx4Srä(@ºZ“òþ>Hm«þTîŸÜD÷2‰°?qê"·¨-åđ1¿.B²§øUi‹†K¨5ÜÞ­˜ÄrÔîÿíÓløŒÀB®òñë•C/^˜øÞ#ï]ùñû(N/ˆ>?â>~ÌøëGøûAÆìøú£ÎÃççR¯Ž9sãï§v>7£ŽHøê€©qóG۟ÔqìOÑýYñÔŸH|œqÖô~ÙñáB?*|wÑó䏌uüWñé¼£ŽœøÄ×¥>9àƒî^xt«ã |v#Hèþ˜øÿÜq͟| æÃǪZ¸AÉ¥·Þ™Hqö{h1$5ꇅ¹qösÉ;?ÆÅEwÅu` *KÙÿº€H–æoB?=z½2-ÿ“)ö…&Æ/k€Éö ó]ê_™óq;3Š~ÉÅLîú¾ž]ÿ.[àǗ‚Ûï•Ð0=ç™^ÝG•IW¨ž© öè‹xe¸G’%ª/ÒTF½ tÇ}Òü¯h7Ñcn¾ŸËMìè²Y©ÔûhP¾ʕðç«Áuu*G(5Ò¿uìÚÕ+ücx]9Åßqώa™Ó8h~Uç@æÛæžóô@Ã?_»§ŒÑ9ú–bÍlQ]¼^¹Jn¡›ûý7PÝÿ2ßùjn¢öþV›¨æÝiº†ˆq§6`µªj¥ynó½zïË Æe¬â>vù–ÓhàÎÿ5¾×) +™[¢!ÚV¼²JkòÚÇßð©Vü·tE¾Æ¹Éìµá”ƒù—u3Ù;Àéºòq¤Ò8™e¾hn -Ó|Öò-cîß]BÓb(tyòÇñcMÏ"`´>CÁ׬lþôw$÷;§ü­MȲ.4·ÑAƼmf½ãú•Ì‚a$»RòiŒ¡®tÓH7Kph ìg5¯÷HÏÂá)cNÖ¿å]Ôßv7tI{$n‰]cÕnHdí+ Ô¬áˆÒ`únñÀ +Ÿ8-#Ê —$–'Ш³¤Oo‰®%jöx7êÓV +„³‰xõÀþr¿¦&D‰Î@F$Q+ïí"ȯ‹¾á»‡›ÑºæÌ ½¡uRàNNùZá³¹ ÚñÈcå% ,N­Ÿ0ee-ŒF¨áNæ]ê¿ Pv=]A麩wöoUԌ-S…'ן•ƒA…›ŽOª‰&ÀÙ èëÛæz=Ɖ97  ˜ÁÜ~3…xB7á]T)pO,ˆ@º´›¥û<ù`$KùTH.16éäâAôòމÝàë† Þ î7ٌh¤Zþ:æ¿r•ºI>T{ýÝ­{?p‚4€´>¡œ*nr<ºŽki#ÞNUà9µÂ RÈ¤·«c%>€Á­£ ª ·ŸÊþøµÉÜVœ‡óX\!ã¶ Ϙµ÷Et2¯ˆ]ØM–âitQtG¸Ð° +šF»#©Âþۊ×wíò¬Æ+ü¯UŸÃ¾WUB®Ššrò2hŠõ¬"ÐʖbÜîÐ4*ÜlÀ«¬8ù_íÝÎë_òÆ'Žs¢ÅË)5Za§¹ù(¸—%Ø ´!£à¼}ˆWi'ªûܝÅHÓ¶!n‚èÊA;©2OÏàKsM܇É]°3–‹èp“íóR%ٔ‚Ýmùz¬qSø¿—5ü±W…zCøî¥ñ̤L±ˆ_¶?›u76EbbôãÈÙRñ­àd»b&/[vëÜêËzv»–˜½ +Ä­COº­‚—Qc»ò€&¦ëÖ.Ù»{  âg²_2_öeEiSàº0)D•°S·ÂHÅì¥G»’R5_7v +M-YˆQûTÑõŒ˜îe§'ÓÅOZ—„7…À;,B!{x÷£ß"vâ2ŸÍ{f%ÖHŠøUåÐysiIï©c³B_ìΈ‹BKfÍ}?Ž}ÜysPБ$-ntÍF×͒'Y0(«åLϦøKô~$X¯@É©§ÚFŝs0ÃoÂî( +uôLŒ>’rµ©l‘¶x‘Q‰X\Q8”×2ÂH–½îh¬Äm·õô„!@L1ó>QŽ[ý`öÀ× r˜å€dޞÎ6<±¸¶˜l/èáC£NûÄ>oQ!Ÿ¥á½=%¬pñhõxxòÛùt)åЬ.*DG)™0Úö3ÌA¨?òø5®ß  +ØTšø„rTq†˜œ£¹  ép( ãû&GmRï8ÉoGû¥É.$ÿg˜MÐ-vî >ùi)e×¾ö +ìßW€¦•†¡Á²G*M‘{H˜ÀÎþßsÿ¬ïÍM¸;?î坷ÇÓHΔÔ4r”v…ùjoANoKÔZ½ aôÄ1^×ÿLU¾?˜Ž¯QåáݾQ`óÉaÀê*r$±ŠÇ˜:7öñ€¸x(1 iÆçÓ¢b²¤çQ0ÜKù—%C&螹àq¾†%Ô@Vgu[”)­ó¹ÝËzŒ±Øckn)ï +óü8e”–ÅpŠng;|gëNPȖSeƜuí†JüŒCS_8™Lf|­vµåŸ3ƒ4þÔn«Ço\  Ö@å ™Rñ,… ='œÐ9¥9ۋðRÑJK'›|×$ó(|Ñn X•úâ0!ÏmU= +žÁŠâíé?Ä»Jœt¿¥ÀYl(EÝ4–ee¸„[«ÒÏЍɹH¯ŒÁ'ÂàÐ<@—Ÿª²Š”ö½õÀ}±ÄG:± ­p+IÊ% z/Ë.l›ÓϘ§¦¢â´L†!Ü'ç=î-íº+ƒ(Ø)uY$,tNª¶‘°OΧÊò²È–W:þøL½¹¸ö1ä2´Ë±ãÒZÚÊI2ºyp^«¦+C†@°‡es6`¦‹\ë^·êu¢Œj'Ãj£5%ÌÀÿ+ ˆ*/ÀÔO’_ä»Üíã‰'ÑÛ>N{ž +‘krèf5Ô{'EGTsÙͽiÀ4S֟cÓwŠ„¥©žÊ{,QC:ãfÑxUGd­¥52g±š¯zÓã$: ÿú-Põ±¨ ½šàDícPáJ¤; +˜´j(GVÁìׯ½ãñúÚ|kïá%e&œkAê©¢EãÚÒSŠla„Ó›L]e­ Ëý˜I¡TŸ˜ÖV(dxéûfÒԽීÄːéù÷-kEÉ¢ýÄ&"¤nH¹79V(k“/ÓÂäºUí.•5Ò®ÿð¦ÌFSI¾Þ¦Ù‘>LC*>G°tƒ…ÿ†¤oá[ÀªÌ€éoÑ_0^~=±Ú)cd7æKö(Rw*ñêFjŒs<›óNRÀ–O'Ì.ÈmA;¡oQ\D ÆØð–~s1/²¾[ófõ +±á-úw“ê[1½¹SZÖ©íˆe–Ùnñˆëz¶§})åþ3𛞯„ÁG~Ía„'ïÃù0IöÔMHŒ™,R°¥X¡ä+fTç~Þ£XXU^-wåtnuFmÎÁ‡$ÿCµúÒ½ŽH¿¾o´‹Ø•aÏ®{JxþŸ÷(ÍÂ;ª‹€xüŒ«€s­DÂhtέ˜"גe~—­ ;ØÇ5šÙ„cn2Þ7•ƒGò¾èÂÆ¡hs¬£Q.œF‚!QÜÕç«coeàqçÙà–Ò®(sZ'»20£°ò,½Ô™ +§01]ÎÅoQϘT©Ò>ìë~$‰r“R'D=‚X[øêŸòˆ~öáًë®d O•eħ†ï“ÒB Ä«¹‹Ùú(=ë9÷z*Šçíhœ\bH“³û€¨ùéÀ–m‹`XÅÒTL…î}Ãß_ÝcáÁ´+íNU¨7q‚_êTdRdohíDº|qµ'´Í¤Zo"s.–U#üÕ8iŽ`ˆ³n²DJdXó8 sÝÕY '),,\¶˜€Iî­-f ô²X܍30HßÊb‹ÿb‹Å´ÅÖùùÝcùuð [Ãæ"]¨œt ÇJÁ3¢Þjï5ÜÍ}Ká½´ ZvfD§Âé4NLB7\‰¯~\‹8öË +à‹É߸•…r`vÃým¿$XýœùÍ`íÁ@MB(¦\ü”œú5ÖRL¦‘9PH).DÓkg‹ |ËäM½U bi…ù+É'ÏähÔ2ŽðK\õ]â$o)‡xJAÛ44Òjuµ(ÚT6µLPÚ·S±)¸¬«ZuĦ٠­½ã5ó¾ìòçAàL º“Q‹¥L‹âÿZƒ@ü +Mi”[ Á¢¿”ÓF™£àÙ¯‘Hº5ü?Çî[ €d¿wìeÌLC¡‚ëâBbid0[% íY›+±Ûm 1DN,ÄÑ:•ëxKßàÆ›½ªÎsDêW¸A1¡-•©Yò¤Õf,7BÉûã5þŒ|jùä)ÛٌI9©ÔÄDŽrb"kçj‰}ƟX› "Pïµ¶à˜m$¡‘[¢aÛæ¬Fé(þ] ï¥ <¶MÎ{ PV»L)D<·8ÄåÅÚ%ØNÆóMRL"þ} »û‚'»¹#÷Íäí£zöà!™À å™Û˜!ÑZçxyዤå³ÄD‘gxE)/IŔ—sêqe%×c£UÖÐÛJEð”ö™¾,ö€&®ÁN6‘‹©S‹:¬¯Cñ_-Mh^ôï_B¥¦} 7>D ÆnÐè%ðwç¹ÅòÍ»íý·† †Ê^-‚—"ø®§~W§Û.(×Xꔩ¨æˆŒFGì¸"Ú£{Û 2µÉÿÝü?Ö |Îì|ç¹V‘®êg«·åþñ¸•¦Jt¿hÿÉÞcf(Ĉ‰û1Iû'³"öîs¡ Œnä(®;ɕ¼u2¤&»ø›_¿‡ GÙÛDïÉÚRF{A¿<«‘øàÁømñ:÷s“Þ&ùÉôèàðGFùÄõš ˜#4ADÜÒ•F³œ!–~x÷Ûkß—Øê¤‹ô"÷ êëb‚Å(ä3 ++þXIú[©ÏÁг +fßf!L²¦ž‘€sߢ_ž„OVۙߞEbž«òpÑÉêa$¼GüŒ?OÑé ÷°„‘ó<î„Q3”Öh +]“5=3¡èi?Є-ß®AÓJåkad#u2ˆcÄçtzÐ_×Jg÷¡ãuT“6ÉL&\ûÔTf"«Zíñ²ŒÚwØú`3¢ÕMíµ§J}åVƒ¨ÎE/[þa3.oÈ’)Oz€Ft,é³Âޞæ| 6ü:»øÃk²-¹¿‡¬-™N<—ßC€¼s½oO.1 l­‹ªxÒV…Á@Ñ<Qåóiñ;Âì #“vµ.õó޶~’ìÏf«VõшlƒÁ^ÐðÐÄÏ#ú vóûs¾îÑo4ïPÐ!÷â^2¸§l\ɧ­ 'm‡Ðǹ$ÌZ}½¸w;æ,Ž£y;òžÔxï'w.'uíéû3;†«ÚáÙ$h670l"æŠLìÉÞœ0’\ƒ•uý¹õ²iDíšäá¡0Ã}ë<­û>3¼”ß߂*ƒ¬d;Í*zÞð}ÐÒ¸ÁPH3؛A§tʺÆõɑ [×®wmü‡1ò¦e¶/.qI ŽS^¼‰úހ°—nQÇ£kñ®ûÐ=قz˜éÍýŸ´Ÿæ^ëê—MFý—,ˆØ±^kJ:h6hŠ?ä7èHQZü×i§­ýzçËH‘5žXƒ«5\¾;¼Fo¤]âqãáýD]²oàŽÚ7º–Y Ë~L³!“ŽË=<Ùg‘–ä2Ê*²eæY†Y¦þ̳¢šy ¿MJ7KÚèö–h„G8†3Îe‹¨—1–=ÙDýÔRdɊWŸ"ñ(IB«4Ö Çͱ ÏÖV|=…œ|>¸Ôٝ½sS|q­á0Q@ˆwŸ8ª(Í<ªÜüÁÏ*µãÿÝßôê«vbôý[‡ÎțÓìϧã×ٖG’ŒW—Ž޼”:9Âd6³³<2"h‡à{ùnrþJŽkÝ)CiTèŸÞӇeõ»Ë|h­îYpT¶«³9Ã&ÒHò.U­wïTN9ª§¾IßÚ{öC8”ÖYœ•-üŠÚjÜS|͌kÕ®I€I= ”3]å°°o]Šw8ù–·,ÂìþÒÝe²—î½yFN$R»\íiý}§ \^ÍœHÐ?ݺV¶%æ‰Ô+·UÅ-H*´xdG¢IâøDB§XÀøèžB“êŠÁB{þzX/t×'|®ñ …Yoá*[ðÈ1µ ¬"5ûõÄ([ÎS®áä¨Âð5„á¾–ê×É{ãÄ !!Ë0ROkÒoà Äâ˜Göò½–Ä•¦œgúTæß8m‘û@ªôúíʵê÷R0γ4í5¤»ó;¦ó}¿{‰¦Zï÷»\ïè»x/†Á½e溛_KM[oo™ù^–%Q¥æ(7 9¼ÀßûD[èAËw»‚š^$ËçäyPF÷CÕ–$áHz㾙"<¨–¡VõBçYâškK6?¬eÿqãÆxBƒÅ$^ZȦLaôß|aôüŒ?È~RF†hÞgä.‹ª_Âú u nÏ)Ɍ(ÜÙôÊÁkÜϱ1‚ÜüÅ«æßîŒï:‘x§ÝӇÛàf§Å¥N£vkpû.9Wí`Ú5tQÆIý½D:Úºs 4‰œ;í²ϙ5š'tˆ l¿;lqFµŠàÈx[n<\ĸ˜ÉÝVìtÎ1Q.cí=Hn¿­ºBÔÃîÿO‡×²ÿ(—ªèN.. ²7§УÆ<²S„û¥‹6šM»VÒâ8)F‘äîá½?´[¨‚бNåò»ÁƒkrU(j6ÅþßÙ¯`^T"•4FßÔ9—@ù;Uq¢z¿Ýè”õxÏD„)q€ÜÔ%’(Œ¢½V¾!y¨‘.TpfT+`Ù=‹¢µî¸óŠ×ÍU¶(9ù&2†­Õ¢qmVÔdè©RKwUÜLwb¤!T_'aaȘªlÄÁÏI¸Ã÷Fæü.\ì†ÜŠbÛÏd~,׀²b¼±Ë¸¤)m¹ ^~XJ‹KH”,ÈÈg,„.‘¬!OîZ(¶:Öx«i9zÇs“:„AïóùDð]w”;ÞþA„ÖÀ˜ãÉùÊ»§î'åÅåU˜Ý Ž'|š ”q;²“áŸç'ùÇzíIMÿ’~g8ýYÒz_¹z]SüFV9@hÇÕnX“ãÝÚ1'ÁOå®VQ¤õʉ<`r€wnòvÍÓw›UéK’T2IÃRž—VLǍ֑̙úv€š‹¬I+…JŸ +b)ì¤NŠªé° +' ÷ètœdªºÙtAèŒQoËR +eñ„ïŠ9èîBØJ¢q'Ý4ZmJýÞÔðüÄåë¤xóÍ_xihóÓí6–ÓÓùñ8“«¦%"ë 6Þ§_ÙÕR2᯷´+è{ÄáÏ[¸)¾COðåžßÌigŒï«ð Ñõ¤£À?M$ѽ@-W÷näºvg¾n³¹ÇÒXDœ!êËtñ=#¥¨f×ôüCuB˜,Éí·p7:Á[çõ¥æ”¡mo— «T&":QV‚ä6eº­l 3& ;O¹Fiþûi Àdzý‹zsÚ­‹HP'-š%?¥âˆ–2ì¥ (L1#^ +q9Ææ° ¹â +âqðZցÙ(Úâ>zæp^ã%Ï)vmê:Á”®8Êà¦ÇuטýE—qq=T=¬Ça :–¾på=˜F"\o™”Îý‘Ìë…[e‰×Ò$³É#öÌkѼL*7Åõ¥£Ul¹  –v¿»Ë67jѵ_½-¢6Á_?úI£ û£ÔÁ*°Ûõ–#çÉйÜ7§ËíìG„ù8”êš"†™‡ñÄ;¥aI÷š·—¨® ý—wEµ´f±Žžm¨²-K¿J"rYUâÛÈÙ(Sò QôoN7\³‡-»!&ߘ.×8ì^—t%Ó&®T•¦üqð)ú»8±jšøR'LKŠðâ¶èu–fæRKn’CŒ}ãTâ7ÙípÁ⠑˜òӈàx†*´'Ê¥Œ;¦çUUçÚÊˑ÷øMIM ©Ñdóo…ZxÛ¡ˆNFí\±Š>]±u›ŒDkçOÄ¿'qÙºŠÞ ¦v%åT䫹ʯ¨¶íùqä›öÔ}\¸¶´÷¼ 9­CËëy›älŒ€r{ÀýUì.JVO*¶ã}ЌSÊ­pÿ÷nˆŒz ŸaÂÏg)ïl ·²(ûZöûÖñTƒ%køŠ â¦AbþüõÎôtúœ=UΛ|.%{ëÐ8ymh(Îݙ ¹ïÎ$±/Iè;e7&i'5ÒýŒDb…] 8› ‡r¸ï yoÅÿföe•—*–|Ôö¥^HúNÛk¨Ÿµ¡ðS†ÆGÀ6‹´ +¾Õš¼÷PþAT‡O}÷®ÝIí\UÞæ–£lq¥u©2”³ûS¸O6²jx×òšëòsæ«IDÇ^i{äÈ£!â:Ýðógø#1?d—D{ÊnAn>¸Ñ¬¤h5…?*#²Ûßß²înþWõ+ïé¥W‰ñ¦ž!Jñ)åûTŒM†‹ÐߞFú< BÈhրµ!}û3äúÿvZÛ©¿þÝêQÞþہ¿nE1Æ¢%™ÅHà]ˆ§/:Õ|(Ns8”q:ᜰ~åÛ«)Uô)UdA›ymèðxïDJßOÞ Ý*â§Í"ºíc²Ö +ð¿HÛûûÈþ?€¯,~;È.ÅÂK§&Y¬$%/;Ó퉮wx Ð3 q¦{` (_؃¼5Í>ÕR]—]hem;ZÄê+ãè3-ØÔàavúQóf„ ò­½ŽìûÍSÞ‹/À('ØÓ]B t@ê +xÂV̕?þ°–"g8xÌûªG¨ýÚ]šé*úôyWfõ: ­ä—yEîÎßÿÝìÑÒsÙ¤$µ$pþÝØƒLÙÅNC˜S00Î4æí=įÒQ1f5gô›mðÒÌò{RïۛÆû¨ñwóIÕ¡†´'ª µÍ¡hR¹½Øs…."ZA’ݧTèÇ`Ñ¿jŠ +hž.þ;~ÍI°5œU@¼‹^†úê÷±Òn 6Q„›ŠÀÿÚM©Û,s"MóýR/aºŽ‘\Uv…y ·þ¥,ÈÅã:œŒÂEw ŠÿV•Y”Bâ«1Y@:Ú#uVšNåÁ‰ˆnFˆ‚ eÀe©9}q2ãe¹aÛ1¹¸¸“[ќw…*1ºA X«NßS¹bY¿r†Óû¦r*hÒoG­ÕŸm3ç2¹Û²¥íî*{ø\æöG­4/ËãílÓQÀ¿º5°îTç¬Éü㱊0bDŽmT›‰«‡wÜF«Rw‚3¢Ë§æU[͉v>~zÿ?ç%B(ef‡'ds&UÏú—ö¾5a9½4@¦JöüY.NSqý' +ŽþQûÛc#›&ÄiÒƒ«b-«Œ±]`è“b<·`è1Áݐˆ²î\8ªÓ&±I$Œ¦?öXÌÁ»wܽ±;ψá–Wîÿ™Y­ôûƒ¡PLxV%<¼ý¨ñփßrÇWØ' ÏW1‹ÜüD]Áj‚&([S´Óì p¿‡Ÿj Âˋmií*†A +I^céù(÷˜!Z£NØð€ÿ·`gºV+åõ–Y@ƒRÀC ö*x± ÂÂ϶y Éy‡ë‡B‡n?VôYf7›èGc+ÍtŠ¿,q¢}*±²¥™jß\ÛÛ~vÏ\¬ªoÈ띡 UÇr¡ ü;uQ¶²‡6zV™¶Có +˜Ï­~Z],ÍôÿM«—1mëã—q¦ì“8Å÷ ˆ] Çmd +ë;¬iWEhJ(Ë×IÕõÍõ’ÿ쉷žäz6ê_r췂vyLM3k𔀐Šõøâo¥¢aŠiŠÅö1Vw‚OBe6ÂÕc§¯ØŽ×Œµ Ó®±-ÓÓÿ²ÜÃÃ[{wêãzñÛ'6½ÚÈyYHû4÷ +,f[nfÓcw“—*%¨¢Q™%+ÅC¼ȝÿ¹TÊ×ؙ£Ñ0¢o8)‡]>dûùMŸâ©ÌÐz®Ö‰¨¶ì{ùdšÛ}ï¸SŒÛqþtZÀÂwÿí€w4ëځÄÉc¢hDÃðDÎ´b\þÍ )“µ&o +W©íE”eËw܂ͻ¿z%߂rßA÷iõ›iùêÖ0ãºË;†¿‰¦7­M±íðA(gYl$}³QýâÉͦµø¹ñ“ Àë_”8Øx6BgæYÍ%$ G/¦ò0?; t†ßµ ¿Y´ dˆY§ÿL¾S¢}?FØë»g•œaC çQè*æ3ÛC8ë):°råýxï³ÄØîK\®þԨʂ®á4´ås×Z¼Œ¢Î°³Y5•7³FØ=mCš¤H¤”Ÿüs¯ýð—vF¢ÅH5_¼Òƒ…4}F(ó¨z }‹1Ò;ÓÙ»‹ÌœÇСŠpýȦæE0"¯ž@?ˆDaÌ{ü¸{Ç$‹¿A)v÷ ñÒxNGq°#°j²…—iqS…”L,.Ùª~–g +÷?—iyºm öJğýôv…gØÚ&7!ÅOjUrmŸ#>M³ˆû’Ãs¦RU¾Ï±r¦òZp^ÃKÑÏàïq>c[·/ðta‡o1 +¬µÒ+Ôí +_ǐðþ4÷üNZʘö2¤ÉÿûŒ„ !Òøù‹¦(ƒþŠÏF5F¢MŒk“ÙHƸÅza#ž¯_›õ‚×¾L&°À²aŸò…¬e þG·F&¢üreÕç'³æ&á&ÀI9=ì.¶ðtf•<¸‘VŽ’ú5#‡°°w…#Š¢µ¢ºÙvâ})júIÕ#@ƒ*»¢7Τs´o•ÙLžJL½sÒe˲1½ +¯ ^¬úŽüêÇZŒ8!ÖBœî̗õA·Ø‚'d Z,Í{Šâd„3¤·æ÷­C —ítqÆWt,¿dT?8bvVέS6-òñÔððgX0áˆÀ¬Zž$´ +¬Ï ±=ç¯Ø“¡/fÞ`¯þÏPèO iw•X¾Ke‹õ ìºGÕÕS¯NJwªJãj¿Žw3¬¦Ã›ÃNú +¥b0Ž_BüŽ]àdùՀq+'gzÓQƒ†ù´`:rÚŸlȬ2“N;ø¿TxñR¢•Vå.ӕµxŽ=­†RíFëo”¹„„]g=•Ûk€râò'üõ1=4´øï½¬œ$9;s×Zwùˆa¸£tL%rœ‡zÓۏLoÁ¹ +¼ º|Y‰TüÇNËØ®àº°§g—Ó« ¶Ú-çþ¼ÉÊå¡XE•?ø¶a»Œ,u ¥“ù9;XÁº!¬#$àÇhعæƒä–¾ŸÀ9n‰ñr”%¦sOt­á:ö¤ŸÁúcÒø¹qÄ?ÖNÀ]¶¿áØ É;w7`.’€ø‚ðkPÏ,¾×™#ò3H–ð$ñ ÉHXÝʦÉm•@E{ VùÔL¦F;Eïìõá¢÷çÿ„«ó+>!ÛÁ·rò³èüQÐÐÚÅAði‚s“1]“ÐE»½‡MÇ|Å7ól¦¥`k8Êò +”f-ùԊ +î BD-<¶ºÊ‡kšCÀPé¾u=Ô4Éý˜Ð™A¢l°gé”l„!kîmãÎG»І¡)uáWhÖ?¡9~Ä"ƒLŸ‘ËÊÍø€Žò³Š ëæØš@ðܔm3ã=u³Éz‘n«C3¿8´Uˆ“íó(qÅCbTCþo¶&´]·$­ÒlÍÊ$¿|¾«>Þe.²ùâºbÁ„±¸©a +dñ*öd÷¢ôý¢Ž8'Ò{ïÞõ…”ÝRM5{´À†µ™ä:‰Sü°†n@ÊÓOÁ)oú\¤ ÕL‰{ 4ŠbÏí¨9ë§¿î?Ý^¬õ\­þ’6Å¡o• ¤¤ß=­² >ԕþLÚ×2Å ;rþîr4M~ñ#7õkNV4ûœî°ÅØj­r³‘ù3Š+_Àõ¬à ‘xà˜!'‹ BO¬e#•ö€~¦ÓÚ8¶>ªuY/:ã@µÕhG6ÊÏu܃¹ ÓÙ@?Cí¡ÿ¾©”sâ}ҀŽ—Þål ‰Wîä§WäØ~ +.¡P6 QY?éw'ý:& ICkØëy°4¢výŒ«Ñ Ŭ²§Ð8 +Wmo2—TFíõˆ&‚r`ȀËπÀ -^UêšCû 4\u‡£ûÀbý 1#ê‹ýn°MpÔü±L(÷¯H7Ó̦çkÓPÀßÅØ`¬ ?&\¶zÁ™QÂÖÿ¯µT8<ے…_ËÓj-&9É»Ìâª*j3vFëë):µü\ç>ç{œ8›â-£œUÆ'ŸÛ&á­á&Wö`ó'CÉå)C2ʰÖþ†D2ܰ±?»\NK☦…Ÿ°è-‹Ž ÔTP¾šî‡»¢Î‘A>!ðWvgãCÈÚ}ÁQ+wÉì²íßENò¥³e¥dĜSÑ7öÉIÍ]Äԗ`ÂícjÎ:@ŇÌu©s`ƒf5&@õܦãÁÛ¥ÜÓ„ì¬æÈi`NûW!ÂÆ(ñ† +Ía :XõDTv Üj°;2»éq’îÈHéwÒÐ̓XU·Qä8Ð;ºÒ²w6gZ×Uðÿ¡&‘w­4æÞ´×/Q2hVr¹f/¹ÁŸ6YŠ©ŒÕGIH?˰ä|ˆ!ƒTÞlx)_ä)ç:RŽñ·„f‹£éÎÍoj8Wç Õ͍?DäŸy·A?¯…Çœ„qgS®ßTZ¬t 9 k$'áԟkËú¡)þސûtzå)AkåïOÅKå@K¡èMÂaj¦‹_ٗ˜ñcF‹±K<^ÂØ­ûó|öxÃÍÇgˆ§>9¤¸‹cí¨À‚`Àә-+7 RŽ¡X·éƌ̤è%КÑjS{Uܵ:’€â…ˆŒ r÷H<F;yx˜ì?ÊÉHÒó0òö+èYà!M2¯‘^ÇÄ%Fdaô“P…Ñ|ÞÝ©®4¯O¨ÈjC|ö •C¸Ô*–¢ƒã÷ê +Â[¿Pö÷Ôª’éՖzÀò“4{Ñê®SGt¡v4 u«aåûµŽØý•¤äéE ûݹïÜêNØ÷Ô §?˜ïtI}!üûàOêŸÏ‡\1a¬þac×ÌÏë?þl‡Ÿ—c¿?Ÿd ñÇóöA?\7cçH?4ïç\>nOç㏟N“|î‡óò‡·m?œø7Û%“z/Ÿ ñOçé€þ¬؟ϵ=qüë‡ÏN>¼yþÁüï@ŸÏ?Ÿòù£ùÄӀ8,þsÔŸÏø˜þmGÏ<Èóñ§óžžþ}ù¬Ÿ<|ú£ùþ1íΟ͸ùÍފ +†…= Á…}9yàƒ 1åø0>iÂ'ð듪ëNÍٓÓW%¸ã^õàØÔ™>4ÜLœXÆkú&N°'¹?Á¦Æï2yÐNxñÌ×Ü?vdóUÉë•ûÀOٙ<'¹§Ï>É×AסèLŸ<ûٓì9ãc3[ˆA÷'­O{C'òÁ;d¢qçÅ鈞¬Ÿpœ­z {íLŸ úc'| ôfOŠó†OmÿèdôŸ§J?Ҁ!üÉïœò¨¡¬˜Aù#'—òÆOãdü}2µú<“Þ‡¦¨éPéËJ¶Ä£ó‡çØi£¦ÿ€öÃ'õtÊÓ<ºAçý])æ4É §Çþù“åÁ?E!_ý³'Ç{©“ö€ßõ̞݌Ÿ§’dîA<ԄPd÷I¾»Ù¶dí´ÊÖã¼ cጟ‹¥V™D`µ§;£'±ç‚VÍu@Ç»>œµJ›‚yc'óÁ=©,o?Íx6‚{ZT|î̞˜Û²àŸRdà‡)I £àßôo)’ø~̍2›ÙwïÎA§þ’IZûÇ;{¶’Ë\&Í*“4c5€r¶`)BWÙ¤¿×°Ô´ç²Gcû•9Üh…ÖŠÄ.îðr1U + ×ó ïa~tåé‡dj$|áðÿߜ­A“É·v%E»°3Ï%¯FÇm3Ä(ÈkôQûhìqÊa0Ô€ä偬1©t§æôg)Yd$Y]7—Çþ€¸ ˆZ©ôi}ഄÏö +mWú¯d7ŸÙ,°Ä:gDrˆYÊ/}º * øÖŸµëF›ë28I˖¿Öî¬Âj–oÜA õ±Œ‡Jœa äh‹îA=…%{ɼ0ìYS­e’é@åüÞ%ý®‚±å芳ٯ_ô.£Dª”ËûbA˜B¢©¾› ƒ,Z‰ýz#Á©HôPK2݋èSô‚AGhþ‘WìKw‡dU 7éCK­šË‚„ÉÿæË‚¸ÉÅUœc>ҖgÓ2tä1¥Ö¡ÅW”Çn*xrÁê7\aÜ{„¥®ù7°m³tŸî'ÆÇöBn-¦·•“|yj)ceH9s@æÿÃB]…ðZ/«1ÝGyRðW@¿=‡úņûz)jMYWÀ+1Óc¬<(¶wwílÄ(²!R¼ƒ„ge©j }^…»Ï¸×ꀝ¸Â»×ÿa¯KÔ\ð5ýRÅG¸¾qÈÿ‹* +…›ºÎDO£”›¿¾Ë‹µu3Õ`þ?®É5­’Ëþ¶¿º´íÍ‚Bð¾…b,̨6bÇsµ²I½UT¼ˆ/£u½ËbhÝpFdÑ*h>œÔ»Úä®öni:‰ódþï—Hš+¾­™:¯ù3£…½¥ƒfwY½A®þÕ´TÌi`à™½ué +]”c·YGíŽü{ƒi¬²üé9¢‹? éj'æ_B÷ˆ^åà‹©‡5Vmà|oEª ð- ¿ËZ\ðn¿±qŸÊÏ­£`DªŒÿ³.ÝwM¥r¿}ÛéâØýuðälø8o.qŸ:ßäf–¨á–³GppßÜÙ Óæá[ÈM!ñÆ*7ò¶+AžŠ>5tÁcrõ 9ãÖP_ÔÑÔÿîhóµ‘à ¨sºÏøe}ÕaÙ)3|´h_^g¾VŸo_ú;ì7pŽ +±ƒ:MjåS0x`¹“º q@X>ŸA7ëKŸ&ªã8A3èsÑ4“|x­\ï×·¾…†Å>…„¤ èý:܅œ|­#Š +-ÑVIÊ»Ëñ٘–5¦ù×g.œè‘Moß©šQL´(¨ó.æp7íKûZ>Vcìih§ñò«?ï^ÂÚ9WXòÏáàÉÙÅÍ󄺼X닑ŸGÁœ_Àl]N¸Pª¢Q9¸¶žGCt ÈµÆÆºwOìyŸkÅɽçi +àUèõ{±œÏ$\؋YòƒWýó1B¶pœÁ3‹µæeç…Ÿþʓf‹QºNë(2Îê݉FŒ‘•‚„Ó –œ^ùðxZ) 2tî¶ÕxôQ È®ØÀ¨KM |Ê?&®¦ÏúÊJ.Ã#ºI¹ø®ô'6˜UþÀ˜zÙ½i­bÆðùóÇ\Çö(Ql4þ´,(Žy™ö +MýÝԋ%~ü½fçeƒÛèMk3âZ‡%“'5aû2²ÖðòìÜgæ:ÎØ¨FâãóyÛ …›E³l²RtpéÒ¸‚QV¸Çø[GӚv+Joj”z.Õ^ºJ1 i)Gж ò4hÑo.3íþjR¨ÈðéO¶¿>¿™amE„m|¾¦íßdö +5YåwÔÀzÍß»OÿկƽAwº¸B<,æÀíYî^•ê‚ύ¡M$³@Eƒ¾¦NPí÷Ñ|;A¸ÀP@hc÷„“9A\‘ƒŸ¿t8…¦ô¹ÑYŠó,+ý¨~öf!ÀG׃êfÒ¼f0z–’i"Éû'óЇ&y»º¨q½›:8[ÊX-ÖrPq¿µKdÍ䈍#7Î- +žQ8r9ÐAÝi]Ó¨ þ¿ÿ/oÒ_ŒÛ-Æ­M"B·Ðq¶ ¼Æ& /0ȁiç(ý—M$ºŒl90`'þŸ”`\#\a9ËàzBy9ôÛuìfH‚H&Žš©’£Õë}®G›qe\“ÄÍ `¾T|bõ5_ø˜dQ½¡lO _юå3Z¯EOž ôŽřûôgL‚d´S,ŠÜ‚/püFòódufðêW¯"V·k#» ²;³)7mKÅèOý$àwn:´îèAÝÛóŽî„ߐÎïcАwg= wL“vؽ9Öä\ݎûŽç@îåtüÓ¹Ð;—éÎ{þÈîrÁ܇gîނsuU¸T9ÏDÏJü‰‚@_±$@\µ5 »ç &¡v¦€µÂBÏ ÅÊMÙuë €wʾOî;ˆ‹´sŽépw9Â;°ÖGu‘Ý­ô ݵ¯p3ºµ$ðwY¾ã»£w•9Í;º0w~£;¾>Aݸó䨴›¶Õó¶Ò;ž¤‚âìÅ·í;¿]üüã»ñºhÎèGv9ƒ¹c¸Oöàb_â®8F©IÙ~£ÏºëaSÍÓþ”Ÿ~5/óÝv¬¼òµÞˆVÎùp0ûÉ3žp,‹üÜÑÂøUZ\è'† ŒsþÃ8wl{ĪÒôgõþߗ!±F/dmzó‚zý^⨁^Œ´”ɏSé”Gax-{çZÈÀâiÄOpEÏ(u«Ö°ðN>ÌZ–H)Dò (—Q©·Éž)È,ž1S1!Z]zöÂV¡Gö/‡_¯ÊÈuG+çßE‚w®ë_—Î*#;³`ÙId¢pm|äÙ(w× C:¥»Š‘@lvSÅaiB©³v5͐êP<û'pÞïW8ý_ Ï.ŒçXûዧpAf¯ +Á}А +¥w¥šÛ˜hËÈOHâŸB¡Æ¤䬶¶s‡mᇚp—…šlb ‰—Ëý6óÂR÷°è +>;›kg^t’F²Îé0VÅÑyˆí/£&çÿâ<‡ÜJG\3»µŒÈx²ÐƒëÅß$zíVX¤/(q¤ Ý—Xh8|²ò‚•¦¶•ÛA®›á­ÇäÒ:†ûŠ/Ö½zî-¾ ì;ñdtó|làá%ËJ ß³+Ëc¡ü¿ÐCT¿5å;Ç.2“økyÎdT0A(ÓC¢3’7¨‰Ô7|™ÔÓl϶¾=Ðcvý~4,p‘T¥ƒOgZ'ˆZ‘ÃÎL©¬–À• ©Ø¸©ÉJÚÑWù×3qSÚÚØ+Pè-ÄÚÚ [8©¢?³‡]ô†šÓ$kˌy´!‡p,ÀV :RiT.x#3§§<ã§š1Èsk{ûj?·ö”lÐ/£5Û,$ßêSƒCªvµ¦žc_þ5UAJ[ñ(+éùî.lSg aüR +7Ä1×½jŎüý©ñí¨‚+*×Þû¸8-|°*¿ÍÒúh(Ñ:=DX1—«zAâ§öœhh@.<{SR 5!ƒ=xLRýÅe•,ݠɹ“!~9՝n2v‘ƒê,–‚ßê͖¸ÈZk§1ófᅉdD…ÿ›擱4rj§ñèGßÊB–AÜ<‡Íý>þV?ÉÍÿužJÇÞácàÏb3jXíÕ,weþc‹¯/±c†¥c¸-?ñc»NŽBÇ_¿þ±Ðš}«îÕóV9cXùü¬îNMiÇs«Nk"Sê-°.æJۇ°gÌ+ÖíNê)ì$íiĦ›»ò®IÛX°Œ¡>°“‚Ú#s)ñžd”’\Ôˆ_âTˆYšÎú¨¦ ëПÐòWT…ޕº‡ÎPbOݬ܄ý´ÿ úžä»«QӇO9qõëÞâ’ËĹ¡à-a4ᰊ‡¨hƒ½O·ºF¶|Î:ܓˆPòŒþöÐ¥„.À‡Þa)~Ìa'ÜÿWæ2>ö ó—Õ0¾ô,çʓÇà.s ÅÛr–ç™ã ï—hêa¥œ50 +U‰Å,üoÚC¢—-<,±]W+Í W!‡Ï™}¬>òüõ<ä7(`#yºE‚€†$¤î´W†g+¢ƒ|YrÊíÄ ÷¾lÊ$¡T{ùzÝhÆ#C༰åÖˆxaCkz0Ž›†`)ýü_Â,j!ubÓ#تþžÅÀW‡GwfÁ .Û=‚¦SªÜìWÄ»î»àx_€Î/áS‰gçGqB&Laåó[Çî( Ô_.ÇÏ{ Ue„Ѽñ>÷ìî”aUdMюÿ?!m„*Ûí +~ëÎÅNƒR8QùP9ßMš-I½øË@ÃO!䀟PÐ'›=\µ{åÚ¥¾Fz€žºÿ¯Ã¢°¢pÞTzÆtˆûhQ£¼P…ÿôÖûå + Ý@TrÉa\g{xä"îz_€;fæÂœ·þ¡ê4d/¤ÒN:^fÈõ± …þâ;†[ ŽÍ¥ÂvûùBôe1î?+>3½?Àð$@߃N±õÞü›Œû·#SRS7{ nñÏK0¤ís\ÚRÃ_'øX‰~²Ɗ (ýû™ÔÄTúYÊý#á#7±Ûè¼0¢¨0£úòr£BžbÛѪ —¤QØ9ø7v  ®¯ïŒÌMcyc ð^™ÚæÉñUQCeÀp5$ÇDvŠÝí ѐÓ#?יLÅJ\/n¡?9üÀ*~ +·X*å` J'$¸þ«—†>S{’ÿ\»¯(´0-ÞŸòNÌsðӒìP “cH.¿YY6ùè!]àUýy™"ºoBç¿rÈþòu@ü˜lÿo6*F›E»?i~þ‚ȧŽd¸å/cÕɖzáKè±ä˜hyDZ†Îêñ‡uøíh1'•ã•gBâ'¯ö!܋1Èt¦]ˆ0ˆ&ÞÆ½÷#´þB]ý½P]qDšÔÑ ãèn +ÁŠG\N†pò¹ó¯„üÔö›Å˜X;•‹t[ٔcÎษžãñËHB‚–0v“ÒW#ªžïoóæF©ޓ!åü‚±­WòÏìËÈ<°³@xÕfO+š0ç*>ΗÊ8ƒòEíéöô©2ÈM|¶$oþÿløkTjí NkÖ¨ˆWÁÔ7Œ™¬ …~{­AŤНô^䃑my‚|C[Ly”ì“ “*…oÍ|:{LûY‘íYè/Ûè])7ɵª/í3"¡HÔþÐší³ ¹‰¹”ÞÝö`P>ߞKäyjÀ$'Î06%i¨Oo§rÍóN è7/O0w‘m1hCô/˜¥}ᾸüéÉzþŠà,Y-òÕT¶K°pú=»¤¢áŠþAÝLWt%/ߘc'ÉÚöù‰(áµÍÑ{:K™ÎÂu¹„䉡•liTÑ6£Í"mG–15Z=—8X¢<únø/SòÃØÕ4(‚aUëɤ}nâ«8Xí]wÜö¶ï¹ÍæóÜÝé^–ô7zÒކïð#{[ÝÚ}÷{[d’Ùq«ßT£žAÍÑÇsÞ( Ww{ˆƒ§y%à^mÏhÇjtÁ0ÔëØ¢×kt›Üä÷eÍiIp-¨­4ôÒO@ß¼#¦g•N¿¡«å¤fÅhá‘<Œõ]öL¤/¸¢¼eV}Ä;l< HÈÂ3]‰ãÖ`‡?93@}º® tn7€løþ†Ë÷aV¨Û?–ûŒ_Í­yÅ/i¡Žï%jÝ÷³7)ç/xVh°¿×î†ñ7Œbzõ·‚Øì*[kQ3uN-X¬¥Ë Ê«õ;ކDLÅå0 ;X¢.]sØ¢½7 +v½Â©TZPÐäA£:śO¿+ÒINÈß5xœ¶7\•1ë§¶=›èn%z…¶4®í´Ü;V̶:[š"*rVÓw\ïçÝÊ/ …±{û'r•éÅ-ÊZ;W}‹fVzVçg¥·øq‡Ô_.“šòEy˜‘ýÀûŒn‘2ÿá¯häjŸ*ÏMaÃs ;i?¶sËÕØ&P K÷՞ã#D¨¥êîR{ÙZIMÄþóljUc +q}æ¬óŸvçûXêáÎ}¨3séöÚÃìÔxÂϸ§>×F§^ZòIë»þò²JW¸^âkš^T¾‡Ëðž]†­%²ü4ÙÀ>y/`’þ2³@߃)•SúЁžz²7Ž_Ó#ÉT‘*Ñ;žÌ<ŽS[¢4q¥”üš#Ü`ú¨j@yÒ-œ*jÎ+…0ïµGd…æúÐêŽÉ éQªWÏõoK1oRQb|-Xî±þ„5Õ£%òžJٟÒù£õ匠퀥üÕy`8É=Œn:õ¼©éûƜc6€TM›œ_ÓäÕ«9æ÷½?gl6‰–ß[4OÏ©ˆÑ?¦#Dûú˜­a'ïÛ¡+ÉÐRH%êõ1­Ö¦#Õæu)D¾m=XÅ©~“«XûÌGˆÞ¢± L4ã·3¦Oê†P˜q"CV³¤c±'tŽ0#ÙÆ~çHyö}eÚ æ¹7Ê_À›Ý4]1Gç¡í§®ä•4ët¤†$$ ü”FãÝ Š£~åöà© ¾åeýÁP“œ¾Ù8cë‰Êd]4 \‚EþFѧŠÚ‹—òYcMGׁù݄gzùBmò%çÔ B„úŵér-J¬™‰Ú»p‘Aâuº ˜‚‹¤£€ëÜð‡ 1‘Æ´®×\šçÊzì…ƒ³B?/¨EÖ/w¢s<˹¿à ʕ=t&‰Ót*ÌÐ]€q{ÏÇ#9²Ö†îîøÝ­ “œá[øÔœÇ>§¯b¿=Påö;0GǨÒF#ƒ2×/¸cå !Lƒù$ž®g(z¹óS”»î+9Ç·<ܕ¾Löë‚zöøV”|ò5ÔIµ±n¿z\J•í¡™c¶­ßv•ôÊî÷µM×ÙVÑÊ ”´Ó}l@–¹µt֋ Íܳuûkm‘çëƒ08ò×¶ïä˜ôõÜg¡Êd¯jÿ˜»Ú`cÂá°ÚóçJ>v™{v=“Ã6ÚmQg“€EEþrÃUcÔQ ìÍ}q%Yyb{¼ù\é‹wmO ÷ÂébS/D:Ñd°+˜Y!4¾:0Ð÷«í…è“Zt(i¦ ý_ Q=€Å0Ùü–³ül!Ô ÌOökp!“:}´m6\Ü ]H‡[pL,ñ há(Lq”tÔeÚUã›?ð‡R hV‡D)Ý)–’"“ˆu’eàãÖhã%¾@鍟r º†ïð±¨\™ù ®8› @_£ÎOL#ØHáý'ÍXŸ£‡ +ìсðj©óˆïx$R,Ð]˜„ùÒjR)c "4àQvCH¥~¿á;.#ð¢àsùƒßæ‘sq˵?¯Ÿ8ņá´-ºžºg+™Õ/jU–jkraDbŠü•ߪú%Í$~AìȗòôëIþ_Ä E%»ßQðLÅCFäØhs‘Ù7‘æp³¾(7֜¯«¼‘·ÿFg¥×oã¢2"”"¥”‰Qçp#i·ï`÷†o•1¦3§[ȺñŸ£Ù•3òðŸü'ôøß/ T‹ƒ|@4Ëòïy êþÜt)eü¢~€NŽm߂¿¯,é©IÊ 'ˆò¡©R‚nÒ'²¡ÏÑ;ž4:ýʼ°°hi¨8ȇ/ÁӇ/¥½ì‡ÓQÆLãä ÝÙ'ÑӖsçïó+‚Xbšp +GTÀjU €®ý¤`Oó×­èM=ûÊFä`0y~nS¢šmóJ¬ž¿Ç]ç«q•ö3C½ñË螾–•Õ‚á,"žék”ÐN'™ l‚äÌ0¼œÀaâ¾+øÎ&ámŽžµhÌH)?D@—5«j#øf†µ?9Їê—+å»+$üLqmxøM™Yfčb-ìuAYŒeÖÑ%xU¬áq™ÕܵèÓ´”æ¢dš•Ìʼnž{j ¬£NñIòˆDÆ$ÿÓãÝ®aV¯"í]šb–à9 ´“Nº®6{b-ÊóÌÁ¦´"bêáç X]gÚÚõš~yÚÛǘG,½úɱ}/‰ªžI¹cï”ÞÄ"ŽVó>Ž—h9§ f&jièr/ãe›²ØèúÒqåwéCK¬5jÔt S™© ú˜Ïqݖĕ +.™=võªmlš¿lÄ 4!ÊGC’¬™»ûäj²ÿl¢ô¬;£g€3jߓž¨N\ˆð‰TXŒfIÐ +Kä ç^ ùkhdȚI÷y:ÚH2@Y€ÐdÞ]üÓ»¤†™J¨>Óav)>± æ­·MºF–†¨¶Êªwr€#; +¨>Ú²Ö:¦¢Ð3w:T¥k®“,wBhIe‡GÐë¹­g5 òñŽ4„sLÁ›nš¥ƒ('²²ÐÍҔ†ÅXć 3¾ÅÔî!òs!ÉÍbîðٖæ¬1—4X]ÛÎJñ|ûȬµmž0rû±ƒ}rú§widõO›Ë³—Ø]ÜKCÆ@ç•Y"PÍNñ‡µZz¥`ó©Ò2Šɇ£Z¯zت×¼Òu<ï—Z< D7A-ão ØA—æÕ8ehTfÇKq8¹¥Cz”76 ºÇüšÒÓÂ+9Þ¿j<ÃMåm”=Ñá ž.­Z™°»Á áD¸ &ò‡ÿü$“؈%)üË&WÙZÿÿ?w¹ýú\jYþ5m§àIÌ;’¬¥ÎØyÅd$¼ÐvÍöªŒ¡Âá…ÍlʐªÇäVDµGy:Ñv¢W~–‰Ó|4ԑ¿ZÐÒ;¾¹_ñ´­göyÍWL-rJâãÉëæS×þ¸çùþjxu?9T­C‚f̦œž\!QàTo>P÷3WÇ¿(«yò ÇÕ½öM'žzü†š»š ¡óDÚì„{ò)«¡;j{²/w,‡BîইÝÁ·éwp^¡÷pÔߋjXÓ ¯‚©L1<7ƒ5.È{4p²ò> ‚ü1@bu–­/iÝ5iØR Ùz•rÑn@¤õþavü KJ®Þ§]¸îŽ¢ƒŒæ¾ Ësã™îg/¸€SzrûKÆHµ‡l²YƒGfügíIó~íCwÜÆÝß6ªµà΂qG•­á˜]]9eÌwۊ鿀UKò ²•TQµøL½Ÿð +P: ‹ù,O\Ô·é.µè+ô»iCr¾ V_¤Gm)ísBEºø.Wò›é½J E7|N¸!]ÜãX{Ïd{EéÌ¥×J–¸<ݱƥ>Ð ý/Wsï®=ÊvEƒ@©-]¡;oǹYh6­è³  |e¶«‘n¿pދ9¹IçÄ ›,è ºÀ¹9†nÆ  #J}œÜÚ@?XP“ÄzQºtø՚8jÙþN%Žn¿a]*Z<Ý!¡ƒv³¹ì}‚—ÿÛtҋ2Íçj[F2AåN0'°¹K1J‚t“]õñEþÁæ'.(íÁš÷ÊäîôhvøéWÓˆ\ᶚdÚÚ9|´DK8»p:ë(8µ™uÙ¸WÃo[màðà7¸žü!–;d È*ËÇÍï/H—Œ‚\„ÿZϾTÜÛÑYÐÎäê賛ܕ&ôJ:{ÍWù´¥îÜôKú䊇ø¶vØâõC@Çü¥§àÉ$£~%¬ މDÝ R‡žo@ ñõ‡Ü‡ôÄHS)«Ç7Þq×íEf“Ù¾œaW*ÇzŽ|NÆ|Mßö‘ÙnÀV¯£µ4VqJy÷ÓæÎ·¥)µ(Í_g UåR¬üQMÏ+¦4x’=®›¥Oe¯Áß¡4L›+¹ª)П΃çžÝé÷•tƒLÕ¤ûÈõ¼[­ÿµ÷…‘„åö5PÓ^•î’Z•Ž“B²4êN5aÔµ>jٝÏ*e|øÎíÓdÔf<ñÛm’e±w¤‹„ å߇\AíÖà>®hÔ­GÜ!èö§I ¨Ô°9§Ÿ»`Ü×ÐÒD֎¶gŸ„bÔ®zĪÙ0”ò¤¶]2Ú;£+NŸÙ"}„/m›èÙðEM>VW6¨"-œëê’Éò±¬QR<Ã:jˀï$òŸVÒÝ)ÐÇj¦‹r§ë6ˆguóºRNá¯ièC_"B¯”q’²¿9 ç:Ù Rœ{éú ±ˆðÈù©Å¼÷“áLþ9\讹\3ªDâú¤“NþVuÚä­KØù±¬˜?°"rǂOˆ"Aœ61Ýúå3ø${*­*ð‚ôý|Ï ù¡M­„¡u2DD±ò¢[iÿýjJ×e—I b§¦^a£@¨Àý,öaßóæ hþk? +b?Ñ»îü…ÜùÅñŠmúâõ¾î+OÛҐU'–`”,¹%ÉM< +£¡±%æg˜TËé=΍Sßø{K~ŠRÄ8>aÞèÏ£†i%W¹qZ¬<7/ÜØPQig§Á>¦a•¬‰q‡£ºÐ‡ì«éâkÝeÔ"a6¢Å´ÑY0¢†Ìi +¢¿:§m{?§¿ö`ËÓÞoížý¹ ç[êp#í¡ ¾?¦ò#üÏ"1O1åÓñ^tؤN®%GE¿Ô­¸ð>öé´à¶ÝüŶݳîöeÃîë@J"å½.„ƒXOóì̼۟͂|2Xdk\¾ç€Ø~všbí³Š)< `µ*Å©~ì¯÷ÿ +,Ÿ°Ý_QxqnTìyÖ°›Âًٝ•íܒ¥ž,ºLR\ÎG>“ü•…Ý ¼©ò'¤É’é ž¿È¬*ù‰?«X»YFÆøàŸ©)S?ÉÆÓ?ÌáÂè  ÄyÁ‰¢ð–w`L ´bu,:+¬Gò Û€ݮÆ1õÝiº?Ë.‚~0ºìôÛ ',¹îäÀ¡®þ7ô6~Í¡£+Ÿ´!#Ü­!¢Çà͞í€zJ“y!ڌînô¿‚%z +KeÊr²Åã3ÔK +FðÍvç!`m ÚsÊ4擖Àô—ä'‰k¾@¶ÕV²Ò+Úuû$¶¾ÛÔϓ’„£Ç3xÔ¬jM,8vV)ê Ph3‹Å'¥N¿È"?w`‰á;ÙQZzÂ6xÍXf`¿•lэ‰Û+R7@ÔäPäq¸áôò1¶¤á3ž 2+SÝ[GtjK5¥c„µ;„T-ˆÛ9í +EÊ)•G‘ Ð-ñÁh}›†6‚}]¬(Íqz¼âÂs¸ÖqÏ6Ҏî#Ö×î>B$˜—bf€ƒq<¾tmᏬL×?Ï3+ð0‰ëûütãÝY,½g“ct4þ­€»bfœ[/ƒm•©5Dzk¶„7«Ò)û?e©óñÀSà¿B„S §¯ÿÏ»ÞÛPˆÃÌÓsR×¼©|”sx§ÔƓ7µ:¾GՒJ줩›A¤? +1˜Ý,X…¼x=µ¶š{÷‘€Þ8&琮j!C3ä x¸ã@¡þ8~Föz ö˔h¯ãŠ ÷Xñ:þr:ë˜a{ۙtÓ×IàK·ŽšuÃç83œ7ùe˂æ_ZaÃ%+1n²~P˜±Î ìŸ+- éqãqLÿ5…nË ñ¨"”çÖ1àMg¨À(ÝBÔNbgúÆ1Ø£¤,ÇÓY•ÿCpG&Ð**ô0qCxgBg +»<½Ãã=±p·øþ½^ +9Ê'Õ¢?S£ÉðÓS×mHà %ª<¼­d(zџš¿ÇϋÁ…{üyY] ÐGV +K_Çɵ„© I…"òôá^/$ÿ%•S"mi¦´ûåúÁS¯ÄtJïÚΩØZ-…yÑQ|¥QóXp¨8ցrhBäǒCæÕˆ¥û•j^£ºriHI\ñ~êHqU+âœP‰ëòÛH(‘M—’§—åþìB°â\dëãÐ7_¸˜)ƺ45Xâ±çS®^€p À ·S®åœ¬‡Ó©Ìö­N½Ú)ÇëP4 œ~X*@ݬ Zd€.ùÌiéI¤®epvrá{ƒO0@p?xT +g¼áo¤Ñóð!–úëV÷9fãӗÔ5ä Tá¯i;ÈcYœ +z–xC ]Im‰8: @±¦q=âI[”ë¢7>Ÿe'UDçÔ«% +Q¤ÄWt®0ÛèKՄ2¤1ãúóG¬ àCM3žhÓ.Hœ[t›ý +‚r)1¬›XNwÚ•?݅f„é[uövZxd;مV…õ"A;Æ!ö•„¼Ì³çE*ٌ» è5 ÷ªaϙ@šÉFÆÚgÙ<Âû¡X£YD>ôíN æ}T4k€ÝôyÐ(o +¼|‡mËÑÈtP 7é àÞ­If賁ÞÍ£‹çäÉEsç_w¾[×þÃË©T¬—9§©–•Rδ½T X'!¤¸@´èú˜ó$LžÌ´„#G°)ŽR½âJc#Bg»–ww$¨8uE‘–yÜÒ×qžL°¦øó36sNæ™ÈJvn=î6QŸXó<ÚN¸ÚKúÆÍá[}öÝK2®eåÖÃýe°¯,ðö)·ãh„{¸Gµá­¶ÀA\ 4ÆT­µ‹\¾*KqìÉ­•°V‘zª“X}‘ÿܔ+`˜RÂ÷ÀӖœBofV»?ÄPsߜ”ED$û÷˜FϓSË"¢÷»! +–6y[piwv©áFû oÎ¥ì5Õ2Ÿ!Éh†b ‚æuHèzÒQœÃ»ývÁßZÎþîIœ©§Ú¼š}©g—w­)YË»Žgzv¿ÏŒÉ­ÁNk*›aÓ Hˆµ.ý»àpAö^YÝ"‘hpú3Þ ¼4Õ˹ì;Z©Dë¸eÝF¿Ð95ŒE»Ñ,ž»A…tÔ[ÛUv<‹ìr’mNCÓb)èVVÙ7*oøÂp Ùw؛”doBÑÞ§Ò#?4ŸÏƵ8µ Em¸è>É@‰=+ ¯*¹Y㟺Dˆ¶îß!í®ŸQ ´)¹åiöWMQ{¨£;4§×”õÙ CÆ +—do5_‡ÚWá‰Wà¹_‡À@ßµÝÜ֚ë¯*¤®N¿Ð%>†€‚PWŒ–Uóù<@ӉÙiC‰”Õá»߄8UØ©Æâ¦htÀu9+ýS9ò"½?Aµ¥\€w)‡åБ'ÈZá¿Tg#W˽Óí$Ë`s¤,Öé%:÷’n¨æ]%S¶6‹ EêžÍà²[AbŽÿYnˆ§ÍpšQú°5¨Ñ.)å÷FÒ©ÍèkZ>#É&lÅ}ðnƒZ¸‡!µYôÚ¶çڝÇkWDî͸Átåõ™ a¢›«4áy ×T̗4OYê"šzü„ÛxV.WíÜ2Þh¿SG¾Ä°è%öÃübÍJ@ÛæÑ?.Æ á4ãý¼›Fw6°Òm ´'¬± $³Ç›)?ˆi;•Z°0•¯kì¢& +ZÆÓ +>#TTCA"3mqãsáàˆ¥Ä"¯±p‹Oi²â¢È‘ç8/Xz&£žîÕ¯–©«Ø#×ö=ô ûnN~wD‡ÅÏ H¬éýÌñäoJyÇñDœ– €Ê1–ÉätþÂÀ7¬@֕\í‰À®ÿ*HÏ $<—EPΝР£yÉìSZ|+˱£Ñɂ½£îSgú F¯}ö¯z-^ò¨A^üÓ]Ê9)cç„"gõŸ‚zü¹Pd(QÒ7¤T–²N©Ïj;hrW£lxEv2#‹Ç&abÛèŽþïò#cȋó•l¯r´w4S§Ðö +zy§Ú‡Wž(îvf!DV›ŸzOÈrâw‚WTŠuÙBøG+{M폞éÉ|8 +#l± 8dëåJ÷Úaë|)I‡‘ÔÏ}áôkC—Šè$åc°¨ŽWI9oò*å«9*²rY)Êr$8Èÿ2ˆr5J–ŽÝÜ㦀ãœôœ—ý]Å»’ßËf‘tû² ց 3]’<Ÿ“ Ûc•øze^¯”:!¿ã啲3&}ÿÞµ(*Ô°²døLÿÁúíUýU 3‡5µ Y!¤×+­ŸÜy;S*G¥¶Ï? «w6¢©ž¨vHP¨ÛÄ3þ½4¤@©%ȏ}þ?*Æ yþ:Ë&y°¡A¬ ¾lR¯Ùl«(x @Qj•ÝÕé¢OÊÙÁGËY³‡q€ÖÇ·_½nÊËE¹h÷}þ~P*1ó=NZzÍgáæ*ҋíÄæ"µZÕêŠp9ƒ3L˜.îô¯wÔ{$ëò1Á,Ý`´™¥{S=ˆ¥£‚-/MړւèËÐÚ9èq7BôS€Ê‹‚Ý5OJ8ï*†ÊŸ‹Ç!Ñ£%:33i y a:ýñáè,ÈÆk\(;·Kþ.t^vî¹ÕXšôô|»Wmµ']ڑTjÇ̗2ƒ·4—Í §Bi2¯ü¤ k£ö­Æ‹•u`º^íÿ¨£éþ¢(ý×Áü"›íÿÆ(ýoÿ8£úї1Gö½Þ¤Qó?«÷ÅŸ3«qŒ ?ñŠ=—'ÿ±GÎòm¢æòbEUÉ(£¼‘{ëš(ÕÑ¥Tß@øÊ[ù„ë¼5]º‘_„ytÕH;Ăׅ RàdãzPÎþ®]´3«ÇÊQí;}›Æ·Ù«¾ÏÆ^H;gÊOܵ„´â'ÒRÃÞýïŸSÊAµ­b¾ål³Ë {oÔùë>è$ß@);†Œ…qÔvT:Ö4Úº=¹4U9՛Ó÷Tïwðg±NüC§ÍA%Ÿff.ƒðÐë‘G~3rSÏ,‰-Mžì }Å玥ÄqÍ;ÓÉq¨¦{ÐQ¯wèú©uu\›}Wü£ú÷‡ôG÷»á«ßJ,yw1ýÎçncûËêG÷²ÎÝGôºâD8Jü?¥Xþߺqýöý®¤s|/ßÚOŠ,|x‘ýÔç?ƾUŠœ>9£Ý’ÚP)ÝUô_ì9 ŒDɾVͲÿ]»³Ï†ƒôˆë^bGY^ xy\{hãÙñâGkÇ[ä5£è»™Ï»ç»^.¬BÛ3SÈǾ¹õ¬‹[Ñy*3<“h®és §Uÿã §ÿ³wþžýÿܬïüȑުqÑH#¯¸ÿ‚u‹ü€*Pck*Nõ›/¬Ø[ð¾?ât7î¿Ø³èý«ùJÃ=ÑX×fEbÖ4åj•‹ZBáukq8|• +ZD»³>±é|gÍñWû¹Ðý_Ú©coASoÌÌ7M~ݳæË㝉³Ÿ šýöh9_é!j•ÕÜÕáó«s«»|¼"n^ªâ˜Çs‚…-¿ºÃFöësrXRƒR»Š%ðû9¨ ½÷†$^ÿÍÄÁâ§:—MJï’1JÈZÅb§çÓôŠËæA+͊|‹u ég`ÿ'nVÈ­_É¥5ÜI%4m<Ñ´óZ.š›–v8÷„¦ò—Øãô”VnrE)ÌD²SšÓ¨³ÍçaÖUJT'Nºý"•û(•ûE9Ƚ𦬦6õRÕ”"DÞ±‡"²—*”®#¬†ltÿށ ýB´‡0¹)€ÆÓ\’cûFhç+.rÉLå¯)Lâ%R™ÞªV¯ãY§·6<ý\ì†æä›ñ-Ü.ï‡UW”úÃ2¹C2´íÊÒ˜æø‰¡Ëù¼%sé͑;®½Üfƒ¶žè@‚5Rê̳B¾•¹Ío¤øeÃúÃpùCpôggÿ­B^]ßÍ·“ñÞR›ÕÜ?iåқÖÜiþlíåҜ3­ÎÖç ës›ÔÅò+iòÉ^MÇï;Ô³p‰^î×vn`ÿ:]ëÄ@²@ ù8j©·tW<î´¹pË44ôÂ^éÛæ†ŸÕÓÎÉ%;Ü&”é¸\é¸\îRùțáLÙ^¶Ëf†ŸóÿwH·Ô+ë¤ã’“ûRPÍ«¯Q•ÿtCËÞ ÆäÍÆä’™ÑEŠQÃîŠåš¯nYڏ⒘]†¹ÎÔ| hZìR|‹¿ ++5Y÷ȯ[ý‹’½o‘K¹’]o"ù›²™Ø^ª¥ê%©ï8˜®§¬Xê«X+êòÉKkn5üŠû¢Rš¸š>¬Vþ¥ê ZЁ¸íƒ]Ê`%ð¾X«ŒÝžõqsl·sB,Ïg4g³š3ÙÍjÕåjÈ÷pW³Ë>ä¹d¯F‹ýë[Gßò‘ìžßröê¦_T°G‰°Í'Ýó“qðWæÍ·ÌrÁÙÍÁ,•Ê_áÈF%!>ÃéDå0XýKÂRæq9s8˜, k¦#ҘËSÈ¥1”<Ñ«¦îéMå§ &ñ)µ×¤¡°ðj“.éOb0)O.¾%o5OQ2ú§gï¦vyç²X̪YåÕ¸+üÎ@R+­v]ýs¿CB×Xß5¾i†ÿ:ȍÄü_¢’s'›Èþ?³Ñ¡ë“¾,¬{›O±î=ŒOaÓw2¼-Ç'¾U’áçû ïöÚíù›?Eóöy‹t¹6¸L9ù0i¦E*`+„ª§kÕ_¸övбà;ÁvHQ²ý†qÒ1‡<(\s~õ«ÒJœß½² Àx–Ü(Ãü Æo®-a~æ‚c~›÷΍ü(é}*3bʖ`Oa·ó~‚+§`ž4’ ”¶QŸ4ß½uÙ$°¦ý~ÿ<ÆFýñ ûê]‚`¾ÇrnfoЮ@ÿ¨ß¸ijіhÏGù äÄÍNÚªîm¿˜ß»ô`R3ÍF$½ã‘Ü*3?Ï4‰W÷VŒ +K|ã~î ûíö<΃+'ûMÂþ9.É,Y`‚v®Ã礋$^9)ókUÃw¶îRÓ­“)­¾9 ø»…¸îVÁ‰´ùŠFŸ°º|á{LþâËÀÿ‡V%¯rŒYîî°»Û>?:i#„ý;KUŽßmѦ»†¾ð±q×C‡ƒ Y6ªP'¹F74„nV~ÚÆÅŸ¶eì Ûéé"bº*¯\ý_O2ð˜x)aöë.ü\èÕÈ£¯ø`ÇGo™ll\û„0mÿ{b@ÒS i=¾ÿ&´óàÁVñëܯ­_љÃݾ¯´F¿¹ô.$ºãèÀóÇí-™Ãê¹o؟Fþ“wÎÿÓ1Säö‹†Fý¸˜‹{Ÿoÿ÷e¯ÕÛr±393H¢‹ZÝlGáćq޲yÍ2\<¸ŸqƄž.Ù¤ÜäÉǎ.Úü\L~U\ ¸¹p£ƒMSôÆå]êË{>wü²àìÉo«ó&_hH[™(<ÿ×.߯.ܒ0@­U|„êK™ŸWÚ!s¯þ¸”Üâº;ü7žñý\G§^ßðà9²Áø¿¼‰™Z²Ðçbbûûaÿ…9Ô.XŸal¸e¿»)Å—&cêà3gRXi;ÅÁ`+lp_îÌ©6ëÕ¼¶\8•W=?ºY|rUÁ¸n®ÛžÝeï÷©‰‚¦\QN{¤`ÐãÒÁb>ë/¸Ùޞg¦¿Ng °ó‹‹æ ]Æ ƒªÈ®é—¼F+Ùqrâъ¾C½%ýs·æ*ã|fk"`/ÛÿÿøœýÁÌÐß{bª>,¡ {îêÒr¿É$“Ò’DHžÅ¢X҃ä +Y@g€„ÿèzIAµD Àòª¢0"¡`4“Ç‹h¼Ínc¥\qµKU\U m+" +ƒEPH6ÅjY,j‘L¸'¿}û÷ïïÿ½þzzH•\+Îne¼ÝÞsy+ÐÞgGyÍޞôw›¼Î–ãÓÞsy»ÞΆüoC~wàz™ÕÜø õ;×ÚÉ%²Û}0¡Gïû6¨ÍŽþrj§~=ÛM[Yá§FNG}ÇO;•¬í}›¯øó +¹¶]îØ²g†Ø¼{4ovÆÍеò"Çgh¸£däãÄñŸó¦ç¸z®ñöÌAAû›2ÍE’É;ùjŽüÙÀÒ@.ËÁÙ6“ç§K5;‰J_Ëû,˜éܟÅiä˜MòA@¸ËÄ®/åî5/»ÒW&4[ÜЫ»<Ë4ï'nÂs¿S7éÈý\²ò¨ôzÛÁNy½; +ŠM„ÍØs0ô‡ yÁ=eu¾ɒ¨3ðU1Oñìш¼`$V6‘yó6§0è{oфlmàf.ޒ1Þų€vÁb‰ú'T‡ZŒvÇT„Jþ%ôHÄ ÇU^eãz-eB·ÞeÔ£yÓÿzŒwHÇñ£eïя …f´ŒoÍ &j eè9‰–÷ŒÙ¦®„ 2mèÍÆþÕ¡jŒ™¤ÌzkLáÕ̵5/ÓãdÅx‡kS#a ØÿÂF;c» ”Õâ¢P[Ê|JÓâÕ3tÀqoþÚ¦v°TàÃóªsjuEÓTî˜OùµJ=ÎJœxÓUGû¿½ë½ªË ¸Tö…ž9©X`¬ªƒŸUԆ1Ù#‡”j¤æî ž¤ O²§= +“¡Ðq•'Gža,ú0•,r“Ô™%gá¥#Ùùû„;>•Z¾záG)©ZC?æ0—oØG×Ïí +\ÙÒUR2¿Y‘Ø•møµmò&³”]ÑÝøêÜÃg«XØUdñQÀÛLqýIÆ §=ë°Úk¯¾A ½eÍ\ܔiÓ1§N RÁ&Í´ðjë†Á²=>ÜC +uKë®TëË:uäÁ-~¸æ"Zt—¥3âåKr§&ÖR‹ˆ:¼0ÔéÂ¥:-çXé?íЀeWމмt_ú«ÇðjËÔ^jËO(×÷ª˜­ýî~xÕN:•Nÿµß…X¦íN¹ÿêzbV?‰Xþ%cø•ÿʱú©¾Ã¬kq¿^Ôi°¨Ë1aV? ‚”ÊJ};†­¿XUÁOÑlïßÎß6Ç ý[áÊÃS튫ÚÝr/zÆ+ªƒþ!kÖiNÞÙçøÔ"SXÿâ ºû /бþfӝþ3õ@·,Ìa!lˀU­ +Ö¨ùq ¶~]lYzmŸA€®QpùB¡’1§C¦:ÎáéžéÖ{ƒ2Ö4«=á@Ê.•â1Í1èQˆ +… Z´bêWÞ£š1Ý#d+YÇ"Xэš1µ¯ýôbՈY`8V^àц»“1§CãšÖèycF®=äÀâpä@À‰Ñш›o˜Œwfµ»SrýøÐ‰çF•­ÒÞ(…l«ÛÀÝ8¶q¹5âG#AÏnÜpÜxæŸç8U‡íàxìu]'#õUíàa(ÉLé«ÇoJ†¤T'®4±or|Z³à ÏNðˆ'"o–ä8݊ƒ;yqP`Þ8Ӗ÷+׬΍ Ԟ;wŽô PÂP‡É'µJEkJyET¡8P›H'},"É(³…šœ6ð>žw¡èóù׎<7캿¾¥Ü$åƒÕ +wFÉ9í¿%J8iÌS$ý=³Ÿæ‚w×ýÖ3xáO_v)ÊÍNMžQùLYJó8ô®šFUÂVRœ¥QRoˇ=/Òp\ s +SÊ …¤:² œ¦rQ|úÐSÄ® Ë{'÷“ßÈNdº›©§»o/*{,èޝ íàxޅ%ñs*ɿʧ+њ³S«ÏIp¢°O÷ÚT%góºn~ˆ“¾æ +"cï¬ôî(u\dó¹’yÚÂYp†£Oþ©Çkš¥D¬’s‹ûÇʆ.yǁOWôa(†^N†—ªêE9z%•Í +€ú¤jŽ”æeë)Bîàžµ¥Ÿõ&žº–TÆ¥¶ÂdÒÁt✉ԣhõ'2GµF²y:1N/SœW¬VíAÆû¤Wõp|ÚÚÌT3®Ië•N¤zÇõkˆW‚"Yµ¾²=­ËE)éi% “‚…k~ð§ÿ®†Lam©eÁgY°Q°T0 ¶T‹Yj¥Dµ*™ý-ËD©²Ó% °¥ª™¿ŠýzW’sÅáÄR¤¾Ë¯ 9ììtJ”{.zµ}r*k瘂¢e’P ܑÝÒuK¢•§b +”7Ö¦ 4žmàÍr54ACs¼†r5Å÷XÚ~ÊyÏS±-¼NEÏü94?áÒõ팹xIJ“Èà¶Þ‹-­F?Ç+{aFh\÷{ì—.Œs(Ä=õvµ†]É¹‚à<} Q˜h Ê)ôb 7•5yoÖÉ\$õFW9ƒSÂïßF;ôcԒ—§ÊšqÁl·zW—-æWíšqü£W—éjIÄ{fÉ¥(™s§ñ·5_Äézât½q9ÝÒõâ Á9Ø)žsHám‹-a _ž–ëKÅAŸ +xùêE‹ZiàÏAÓҀ þ½ƒóuêL£­+• íHŽAënì£|ç7rd^µŽ˜‚Ž-u#„¯¦¹ilâGϱP_Ÿ‰ÓÄéâqñâqñâqñâqñÿgÔ¢°ÞÕM½Þתj’ÿMx„ý=TÖwÀâ/7½ÂªšÎðž=TÜC|ÅT[ñ’@¢PÕUUÔà³U7ã Ôÿ…TÐh¾àá8±Øâ9°"=Ú1ïQˆð¬xqáàÕAߨöӁ(Fðю>AÚ1ß#ÐøòïM xÀÜǼF>’1âVPMn` k;´c,Ô»2Ð[˜1åϳ1Ì·¸F?tÒ²[¼2òk>ÌÄ/ž~MHӹɮ€Òø•SbUM‰U7þ5Sgn6驊9¸(¬Q:1$‰^¼uÒ(þ>Í/t†é ?g³U††âÒB ÏKt‡&rªsÑ ƒF3zr®®PÜkz†ã÷Hr¿e¼X¤<:ÂwÊ«LûZgâUi‰U¦%V˜•ZbUi‰U¦'fãÿžU¿q#ñUi .Pø M°‡²'†êV²Àùüc½F V×F4&>-òç҆ø>'À3/ËJ‹F4'ҀӣÔcüUä:O¼üCªúød +OÅsð`>.ûðaÙÒöÇVWÅ1ñ§»F< UuF=J1Ó£1Æðòÿý:1Õ£ñÖîIÀ fÙøÃRoïNjMýìюµ÷èÇÒ5‡ñ‹SK8>×öè³ ŸÙÈݪ1F%V•XûU„•ƒ‡­ÏiR¨Ý?‹¦!-§¥Kb°ºa°Ì¥Q¢8ãû’Žznúa©pޏ£5m³Ó‚–oT¥™õtÀ ¥št©jž—õj®ÝœŸþ<ë*[ƒR‡iBÉÜ©n_aR!O¦/·Í½/ÿ Ð2¦ß5)«¤¾þuœŽÂ¥ýk9è¨z¬ÏÙ甥å°S“Êg'›{|£ö(ANhðéç©Qø8QRôڕpSþ‡Î¥þ*"S[è1ö<ú£1ëùúœétÂ{ +>†§;7F + ?Œé°}w£Õ†ƒ¸Õ”¥¸¹nß[6ˆ +sÇû9¯±Ïÿó¥ø)CÂÓ~ö“¼-<áô­a›å:^‡N +mÑVžêéUU%púS°Ñ‡ +—hYé?C&˒]&ނò4 §Ž/I:¥.û“ š:áÕΧUøyôÇPêëRÇÒ7ýªÖT*®8û2OwE՞8Ù*6T4_ä(AŚ5¶ð(¼V<*5i÷tjÊ‚˜ÁQ¸mÿ]Pc‚œ-ʍlÑ»iãC +tYañÇÆú×$¤§w=vDÇ©¼‘T;ùÞ!+ᒈ;S2±¦4ˆÒJYüœT¯j¢F;3Ïí,ܹ³ÒJºrfùË—|7-©¾rFËäç}6&l;ñ¸mÊ3•8ŸÊ·7–'¯Íñ¸¹°×& U³ÃpðÏ(¯ûÎäíâê5¾§K¢íòz«÷óê/ýç3ö¡žL\3É«†yAq[üOÑ?DýôOÑ?Dýð ú}~û_Ç6n² kÕprÐÍè˜W€è +þ–×óúÚÏÃݼîyŽWG±Ž’u±ÇÈNbÚ­ÀåšÞ]ÿ©…Ë`=wÿ-óÿĎö#Ò ÈcMûŽÎ|æƒýå;|[ûŕ¾}1­n@õÏjcöº×#ó²äY[‚?p@ƒ«Sÿñŕ¸9à2۟ÿÇVò‡ mïWQ.&}7i^&Þù{”~ô½JQnù m76õëÚ †«(ø÷/ðŒzõ‰ÇÌì;¸v6ö2!Pғ@d²”ÐäáåGc,ô_nĤ®YQtàW¦ »…«yÌY•ôyþ°êæHÃIÁ°ó7[íיa`N •s ¤…7·ó@²¯aí5àÐWúþ¿»îÙYmöö#•¢Z•E èàÈ=‡ 1o+ —ež#„69S, ÒÇØMœƒçѦºæ/ BŽ9h2:?‡A,º²¨œé¹²eô%•²/ÕH̬“WZ ‘?¥~“9VÓ u:·™—2›p¯Á 3@—Á±Íš–­åé©æÚ«ð2ó0t}‚MV7{Y 0hÃî\odQß«M½Ç¢-š½+Çð䚽>žŽÀ&~ÃF±.Zô;ª&]Qvª™vD²ÎJ6mUbÕêÉÁªoO‡º)Éñ–¾ ÎoR{ښ¬ÄL¬=&ù8(ÓÌ4ÂJëõîõë| g<ëL—íæõP­f-‡íÇA}:K™†˜=uÌ[D\¬Œ®z§?IH{ptf.’e¬yiNÄ/93fPÃ-é~Ǒ£'ðéz_è˜Ê§LŒG›,4ªF¦¤cöÜdG3¥ûJZ`‰‘£ÈÝÎýjHÿL¼•ý!èø,RhÜnê묵w:YwØl7gß_(»gcaÓÕG÷ÿï¤}¿u3Ý^[ºÒðüúÈT7Éyš æïwŽ»Þñ>_Aô·P42–’‹p<éKچÿ{ÁÊáæ?i.´ÎJü²ÄäUǼÂH~á~?)ò.ñœ<ªïýK,L füK,NGYbaÄ!2ºãÿøõÄñ“äÌÌy$ù§Çg&[yìäÖä ñùE˜òÍ?¿Åm-¹@+‚VÁj¿ÀµV ™]V(-zèÈȉ §ÙNÖùöÙJ5ôôOjøŠy· E£˜Â$GG;-0EËçÉ,·éŠ#ˆ#ñC½G„ª‘¶uašuá²6å+Ø WÔwî«vpEÓ…'oò>>*ü§€ïض3¦œ¡!üd·šþŠ,jL¤wÿˆm}fŒ=™WÕ+_ ‰©IO‘{2,’“é.ހÅ(е;IøÁg1üð8t5þô¤V8HñH• ҟ|×ÕD[ÇV¦ÁU•Jêd#:nƒ¾Ïäß4PÌÉú’'nQ=$EAÞHÄòBƒbNÞÀ-Ïø{¤yµqz¤ÁN9åq–r$<'C ¾mò$9A&󘀣a}º´óHõM¡XFy‡¥÷Í.€ºÕP\‚3«MÐcnŁ™u¨ÚSãÞÏŸüjälÈG<ÚÓ«ÏP"~uÜgä]ϧMç£ü•ìûS°µF—ñNÄ9|ó͘|ɐ~¨œ'ÍH ²I9õ „—¯·bJyƗRbÄoR¯p–S°·*OäÅJg2>ü€ËX•ObAfv·p ©‚ Ä +§+#,»ûòækåv‚€{ëÕìä’E“wø¥F‰„"÷Ù_rXZèrÏC:°]è¯ÆNc8Yt參”¾§(ÑRdKµuN‘Šc}ê&Ê¡äÍ®HÙN•ñ§ÀTä/ ¿ÅÀ·”=h^E8r3¶ Ç€à‚£‡ÐŽ`±¿ÊÚú]Ò? eqºÙÀÜXÛ©ûlXPÌ;„zÃôi#|6.íݧ|{ôûÆG1ÅnÐã³)+ºý€pjÙ+»K‚¨q&g9¥ßu‹> +ï»1[‡oêÈ ¿à°c>ñß(=ö2‘evßÂöÇjoÀS$@^¯Á*`kBv²ÈÕ{…›(ûÂì4<Âý—@–ŒŠ>G3 +»6ƒbpxú,@‚%ðÔ~ÏRÖX×lÏ©¿>˜ ³µ¦k,/¶?(¤™rª!þ«ÇØ 3,;]°Äw4Bc`0ëxÑ6ƒ@°,âfj{=3V€%ú–æ8¸D ‡ƒV!ÆF_òq˜^‚WƒxûjõÖÇ6³×[ë[}; +Ü5z6äà4Q¨ø€`–á|ÎSpõÎÖ£’v6²"¹lŸH½Ôm*? +\•Ó)F—N¢2¾6Ô½­%µýû¯ÀyÚ½“wµ’B%@ÛúãíÍ‡öõ¼aÞØ¯½ØCð³ öîßÔžم¡mЍ’Õ(ç€Z¯óHÑ5ªøé‹R¾FTý|L6tçfO¢báä?;w¡i+ÂÃÒâk­Bü=šÃSïѪš# Éí_¤§öþáê)e|iPäû‘Éþ$0£%|nMìêÉÔ¹Ž™{㞺ÊéÏâ¦ù‚ÉKáˆý՘ +É-“×>v‡*nžIöÒ$ã´iù‡¯„PI=°®¼*Û0zþ¬½G´ýç +§ÀŽ™õñvØ`ŒxVƒ®ÓPn/äÔs¡Fl°º%Te~WÆ¿ƒŽ2ë¨í‚ÉB!Êí¯J.ËÀüÜÿËÜїºƒæ¿Ü»jÍýdÃïä(˜}üU¿‡ÿbHËg‹n±‘](‘">~ãÛñ§æ”z¼è8£A¼3¯X>ÅU^À?úŠõŸý‘ªhkØÓ2½3–?ÿþº,׫ý!ÒûŽsŠÅüügЙšÌb3Yœ%Våó8\?c¤˜æ§)‹¡¥óu,vÿqÉ [ÒbˇчÿÒ³ýÿ v-{M|¶½¶½¾¾c^ã_˜´òƎb²ž‹ ¾YQ¬·×÷|̯ä¢ËP÷}«òø½OeÝHNxœšÜã“ý\±øËî79ÉÿŠòǬ}!‡~º/÷V·äþJÖíù?‘ycó­JÒ5äV·ï̇×+® çòôܕ륊M+¥¹Õ¯9}*Ûó—ß‚µ¿Í9œ?ÿý+ËU¸Þök.ÿšåLŽ˜”%ö ˸´´È4!S݅Q5¤L'm&wKra_Õ½¥ý¥ÈɬœÍ\›3]âŒæø­õ]ZNÍèˆi=؎§e·Ú_¢2YûÌBØÅStù’ЛÇÔFmu£gS6”Ë0lûL3Bßꅛ=0!“Ò1»‹Báw¬Š3r€±ÔR†@ÄÛ°xcRs†,£e=@W2˜9DÞÞçhÔ6Ì`‘ž—Š¦”  ž Èèžz}œ™Çž ÒñBñ[ùf|ňïHÄÏ$Ál\€ßn“U[Éu6æ7ڂʘg¤Õn€‚†D«î `>äùhØ) ÊÛz_½ˆ^E½Y ÈÂ¸à˜¯Ð½bû¢&(A#RÂ6ðp†4ý#Â^iJŒ´U¨å¤E~F°W„m<_—\®ÌîЋAoïµ2´‚!±"ªg¾a§mªŒx oÁvI™ԈUA‚U;÷GÆNGnüèNZ4¤ÿïÑHY`À¸“Å<u:耺ÑO… +«¸2½Ù˜«!3þòà—Ô8QYËýíŠT)͉6ä:ðb„гÌ*셇Ñõ/Œ[º}E•N5wØ/>øVG 45IeÁhF¤8=$ÊùCyˆ sám›;›åÈÙ®»²—)4§½š5ÞcM!°šùË㌗/õdŒ6›²¿\Žwµãù?FHöß oã÷¦< Øó²ú‡©¾Ìl¾ :²—ÂÑlûa܃- Ž´»úŸÀ’Ö´ Vþ%­a”˜Id¹²3U¯È:ðJê~šmÚè]+@µŸp¼Û„sNarP¯H´R ò“N"Bõ+ù:2àÔZoȒ5¹ø$y/•"³/ÛȨ™XÂâëÛ` 7Ïä@[íDp í؞V¬Ä¬¶XsŸCq"<‘ð|i‘1- Ó:@øÇö%f,؋Ž"•"žLжzŠt’?Šp"”S—Î È i¦YؗõZ1[µQnÖ¹eòó.Iõ}¥— RYÕNÆNx¢.ÓÃ5ÿèòôÀ“É£„òblŒüBM³ïÞÑ´ëà¶J Ëâo[#jHÎC|f…·Q ށ¤)…N×E(þ#QáöìKDO]Q¢>ú·$¿—´”þZ´°¸Ü›:˜wÍG&ÍÍZl=åHgJ¬·u-ŠV[UïU[b۔V‰V)ÇQ+#RY:²/x%}!äŽtr˜»0´:³¹ ¬îa’‘Û 7ë/ÚG•ÚQÈm¯Ð3èëdùXጠó)¸ëA¾•¯èf¬Ì·^°,¾·4#ˆ¢_v%›Q¶º žÌ Þ²GàRÀØ·Ó³~£>“ ÔÂR¤oÄ\Èy잴z&.$ÕF–O„¦N–'ç&‘,J™3°Ù1l›dßö‘̸•y^Ðá¾^Óîb§÷¤­:¨¸gè«»ÂxO̒&vÓÂUU§Z5ضèÛÅiœX¸Ÿ~Õ  +íèÌù\-p?«¥Ópy§v[ „TSÇÖ³£º^[–Õ‘è­v®!Ã1-ê[z‰0³¤1¡{>‘)—}4ëÀÒÛ_¥|Yæ ñ@. lƒ¯” º+Ö0œib¾<VL]nj*Âz)ºPlâÞ§4ˆMºÓ{Ð*#Ä&Ï_ïýºõ’Žï!GüìV;¥&üz‡{˜Óà[æaezd)ÌÕÞQz0àÀeôØÕ©ò«á¶ )ßm]VÅd&cdj1.àlÆÆp£)­‚衟†Åm+cd¦cpq¶n\ÊomÛéÆŽÀî?-¹ ·Ç+ÕÚÆ!Шð ‘üD³ººékmŒ!øÒ¾;éÆ0w|CO<ø<óŒðyÆ÷ àKu'C‘Ê!tZ5c,¿ Sòò~®Øè +Õ÷/Š¢8ßÃûD~°¥,u}ÙϲÙe ÑYŽí–›r,#¶÷«øT NÊæXé÷ĎàžÍ¸ØN°#†ù#†öl5X՚âÚ Î£•€“Y·@ÕfØ»âŠ?Š|¢lpÜX8î"¥£Iïaßd£”ï B_ŽhKðþñÐM _õ§xô;&½U}ùÿú¤ð¡ÿT÷ÚfŸµŸ®2,û§ÿùR°¿ý4­ïRo‰ü2_+#‚öÿ-Ïó÷†áέðüü¯£èr_Ó.~çïó®~ðø]ðȖ_e¢§™±ê÷ÙÜýûîs\Û#âr´É\ÖG ËýŽº‹Y§þYû²wðÚ.Â[Õeÿ¹ûÄ뭙è'«Ó×yZï8×¾Æß¹˜î\w3=ÌçsûG ¾DהCÅ>)gy«œë6ú9ïäï|M=;Öìµ¶òž&inqš½áÛë:Œ/+œÍßLºËNE.pñ?»‡ošù8vô™ŸîëÿÓ÷Ñ.PÿL¿#‡nQ:ß(^{u¾Sá%¤v…Ô°W4WRÑÅáہÀ×tDYõÝÁ÷õŽ@ĝ²ó?ëáÛÜV[‚áJ…æ s.î‰hF·m˜FR5ΞÙ 0"¦£Ö>‡ÛèY¬luãÄ+jºàg†o§èD‚tK†o¹¹á›ÎBᛅJü¸QޑßX>o ç.‡Öp¾xËâË炘“]áüØÎo¥ˆ6!îèjÜ»Ñ~_Ík—;îÃèÜpà€~í²÷A¿Dêæ´;¬%®h +`ýrYª,Íjþ©ŸÆ"-^0ìGw®&¾?.d&ü‚W¿wp+¾|VŸ’¬xJãê÷ÐOa¢ ÃÖo’%všÎßi…£ñĜ·Ã²ƒ4Ûá!ª´ÄÿÆî§}áîيtŒÅ0㷌S::QOýŠeǚ«n¶(§G{È¿1Å£ýQL Å1^ÒÍÄS'ǐâÞ>û$ ãþ¹põŒ +íÝ콈´k{êHíÞó£sËY‡N$Ìh¦2¡_ʙQ¤˜¸}yX(0]Ï¿OB»íi’ »•ÑsYêJ¬CÇÞè»»-èÞÇ*`„ËrÀõ°äÐF{œG9êM¨Ú¿*®=·ì(/oÖ“×}\J÷Ó^–eϐ²³¯¤ªæž?« ãڎ”â,u§¤õ Žçb(ÞZˆyŽÐIxBÖw·¨UšÅ@^”-ˆy‘•tû¤XBj3ºï½ªø½­cÌ&~ª¹ ™©ùb×ÙYˆS©uWQ~tçHµDu_—Ú7IËuVÛæZ9 ӃâÑ&äÙA½8ˆl…œäwìÀ±w¿y¾sÁÑøj +²î„…~³`ŒyˑxÅ2) Io´«µ]ö ­È_H{hç5 ;¥bb›>ÈãîM6H,•Õ÷ewÕ{êÎîŒÒùà0]àeÎþî_@;Åu«9o2 eKlÂóF +¦lª†âÔêOªH3ˆ+› +H 8=zY%ã6”]–Ò¢>‚i¯—O}vKç.ä æ’I]+÷,òiݾɑr/Ë9m+ªÍ'€Î<" i"]2ôE±íŒ`fÜÜ;n,™Ë‚Šk^>ŽÍχVՉÚP-qƒRx!Í`±óâ(âe´ûJŒ^*¸jwíö۟¢è\Áï\ÝۚúojÚ/ÁŠkd¾â›Î ³Ä2c÷\ ÆÃ™x¸ßõaqºUÿRáúay~xyuǏ±Ö®Ì›¸Kª]Ü;S á€ÿtOeù†ù·âœñ—·-[žRˆ/Q|v:¤‰qÌ)r.‹aËÒ÷1¬s4e¨!?‰/zbWVøï&©]”ÿ5üö()b±[…À({¦åauuÍ(_«ª²c}Ïlì½X·t«!„îk«±í¿X„ö€z]É5tœ•µ–BÆ4."Ö1¿æŠeïDüÆm¨ï4}°>å¢4wi<7ûÞɤ°)ŒJ#‚-‰DŸºüö-z,‚7@UãEw‹iï^ô1ëV%ß *;«\\ŸVy‚<l%°½¹;~àÞÓgžK‰™ž'C]_Jæ]jb…Ý|ùßL:ÍèÌ + »A¶´Ýý¨ ³À ËÍk—F‘6ŸˆO‹÷|ÈڛußwÅ×_Y䦹Ù^Óô n;51+ÚW¬Ìtp\wq4Y¾Ï§cfFÔ4}:ÒiÓA"€«giQQ y/š—œÕÙID(¸oaàCŠ::©«cÕÕWðÜ]=÷ g²`Ê1ϩэÙï¬\ˆ.YÁcW‚… ‚ñ¤,[e˪új.b¹Ë73Òýü8c6—ñ:CIbš'ÈoÜH?Ñ×ü蔯@¤’ '¾“Ð é9á3Ï^‡³ÿ±hò&È÷ÚØÔðÿȦ8É èi§=.Æ4Ksš·m–Åy9ºÜî/ƒóuF ‘!r]ð"µ‡Årú|°oµ²2äxX—w.ç]°§8I@ƒàu¸1¾wB jÑÏ֙#'ŠÂú.ëZmã +ᨠæ–)róqôK|~Yu^ö"uŠÀëIúj¥¶ßDൔz =ñ¿O.7jÒQÿf¢ÄëÙ) ÍÅëT+ÿ'Zµû5ÖZ \¿œj\òÅ¿Y”u{‹Á¢ öZ.êåi^fÍYIPŽO¡ìÓvÎA¸0#ò½ž ðeõq'¥-´=Ç|Ñࡸ4À ÇìF«Å³¨&õͰ¦Ù0Aæl“u +|â¸Ê]¿DÚMˆð(ðç)b›Àíp‹úÃ!…D¢ûÜ2ҊiUê ÿÙߥÖ)³¿?¬S¸Ž«¯‚¨ûw±›,n gN éû…ᇾóêPCYؙ~‰`àѬ´ gßX'«QÅuçm .̫Ƃ«â†¯ÞÎ;Z÷[?éÐ:É?ý£§ó­D}×üi¼‚YžkЫßQk”µ‰—S„TxES³Ïe̹ùAcã5vÍ× XÐ{>V<©Ð$!6ÐîsAÆ^üÕæ8N¨j&‹ü` àˆ{ñ¥©âtr"oå֙JåQ6"{Nj +¹^þÒ²žXYêy^âüILÝ6½°¶²;»×½'úƼO˜æF4ͶD;È$ >¯mü[ò‰›‡–ÛʲÛW7+ñ¶æI¶mŹ=æVŹh-ËgªmËeGí'À·×·7C7-þv夊û ¹Þ_I¹iWnvçZžÜ¸ƒÞAÞK3ðHϕÓÿ6Ðç/Úf5L—©Î_a†.rîܾ¨:gúÕ"/Kœí&•ÎwÅÃ-ÎtzÞEĒjí s“Îäç?ç/4öö½çÇóÞ}!Ïy÷C”8øօz¤ý”ùŧÎM‚û'YÎÞ!?þ$" +‚ð»ïqå +F|Íè‘wé¬òqZöo*õYç´£×/ÈOuß3¨üœvã +y…áòÀ‡Ê%x;ÀŒéF7 ›ŸeF¼fŽhWK›WãÄ_ ˆ„dò¾›••˲ypG5®Y@É|‹K9)åØ;<¹£Ëš9©²æ‹äY•éÓҎH¹_Íiðc`٦ưŸ³åÍ0SàõÐÓV&è›N¢jaê&œäò–³_9ÑôÊõá£ë2.6ª£ÚÇòGꌝL¯Qo¢1\ÅÑê'z1‰t”ª=ǜ=¢©8ûDZ3xö«žE ‹¨ö‡gw +ºUgԒÅ=Ïë Òwbz=à‚Ô1¬ŸoÁ씥fm–𻔝 €祇í_Ô7:Î<¡L¶:YúÐ@TIw@\omßÙZ™}Z<€!á魓(¯ +Ýë·>às;Ù@bix%ø,³Ù¸åõø\Ÿ0õcÂIç’i’WöÆØ×Fÿ¬;p§ú°/èÑTÏ@xݫ˒{Ÿ3¹[‘ Ѐ iҞ5:0ͧ}po@òKuK^ÕË>­M +Ë›¾xã³¼ æ¦êú ZO²Ý[T÷V*Õ Ä6Š›‚Ýf±=ÖzºÏ^õþՊ +óe-Š՗µ>‡Œ³Û+Œ ½9iß»4Mt³vˆ©]3ÓzÙóT)ý†l›ªölÓ €E £'oíà`Æò¬SÎgá„5ùB"<è±ßYhýtŠÙÞ~4"î•gT¾„ê“ÁÕ*¤3¥]Sëª9:¥üô± =­A73£Ý,`mø÷ßÛ?ӋuR«uqO—87[8ÖõÛtÜs!#u$ºXK¾ºAL¢ߺ7 4 dC[Ä +|ù‰˜KžŠ0 r Aß©³ W1TÓݲ]S2žìýªê‹BŒA#Ú +¶èöUÍô-I eWì§ýøÁE<áÖÏ iÖÏõ?Ž»k޳»Å4sª±Ñˑ¸BÛݱúâ®ej o×훖î>P,‹:]¨J/ð”eïZvL’‰ÒÅ3Q픀¢º ÷¦^¬sÉ£¡Ê:ó{jrŠ ­„½tR°Tº ª‹¶€<¨«žGô@:¼OR8ȉOà¨Ð‰ #…Å,õ%Ìó=ÉL R–{¡P +€;á}¤*é¡}5% +î +åùìqH™–EŽŸdI¬h–O#Ã4-{·ýóC6X]±ï¥Ú®W@%ãTùëWK‰}$!BÿB‹¶¾ ×/Lƒß¢,tm…ÀA(¶&®ßÈԞ“«rœû ËÒâÀ¬Ý”,à(ÜPô‘ŠYµ¤±Å8Æß7TMŸÅ뛘i©Ûr<‚OlN °$ñòލÀÉ¡Ò%¨af=¥:ð® {Á‹eCdHÔó+ÞМ^ö[¸L0Ž­ð_îXè)™ƒ¦¾,Áݛװw+& Ë —¶³ +恩³3¯Ã³:ÄØïs®Ìç°uû3 +n¿Ögžõ «½ïÜݜþœÛ9épuÛ9 ~ØŠl(uŸßaMìÙ¡±S?Á”ÝþiEÒ7¯ÁBa$Ä0i:@*ù ›»€86M‚Ö±ØßI"à†Ô›À¾@ƒ.Àx‡q}+éɱ§&²Îxq Èà…É;2؜j{öD$THÖ*—-@æîM"I[ ”Mâü§xþµ‹Ûñh<3â~Rý§2’ ¢ö¨%}ÖR߂œx:ÓS}˰齘0Q×Ìq©ü€‡Ñ'bpD—-ð@{¥"Hæ|9e¦j2Ã|È.TãP*U‚%Hb¤SPǘœÙºö0<Çy€ tôÏÎ3š$“Ù^ö¬Sô&cµ„Ì{×õþà™ŒšŒÅ ?“ñü*P¥T K¡áÈÒ;󩯟óÄíٗÎTVÕ>W'ñx¡VßùnO5å ±ˆfîû{¾ˆ6À‡·ÍwIwl%> ‘ºp'¯U@ïã ôSÆâ]䣧fA?uåæ\<íÕ}2ïÍŁë™9ÿêA©xwêÃpԑ„š]î‰äë¡\3f4ÿ©ô£%›׎¢Äãoj¾ ‡¡Îu<ÑÿQXÍA –ÿÜ÷´6€é +ÿ÷΍Ø}ü‹a툫›j¸‚€Wó\h|¯0<_î+¾0Šêpß@ËàwÁôƒÄN¯,ëÙDÚ¯rwÙüFºýo_=† áì”\Qµ-аqkÍöêI$Ôo/C°¯%Ðì* °j3žK4¿5}Òâ[¹„§®ÿOh:IÖ(Ï7çwÔ¹hÍ Açn1Ù7°ðù`Áª(óBê)4™uš³ÓlÐK¨ÎãóKôä7KµªçŽSã5miŠ˜Š£.–0è‘Ø~Œœ{ÖG¾Ëôl…!Íãú3uuÊQoݳ?~¯g°ÅÊÎé Ín®N‡Q/(u#ءϴŽnia ]ŽP¿Äû{>˜ÑFé>Ô +Tc +Êÿ^§)ß`D^äÚ9”­>¬AêçôFúeàåçáØzƒJP?j‹­Y¤hHÝû8®ØŸ‰›=)ñlwßæª4ß|ZoÛ©(ÄßȈ„­íXŠA‚cK>MÎØÜ£z±“¾/ p›ó2OŠò뾤0-oQÓ¶BîM y ÆE4PéC!·ä6l>£D!Í­'Ѥ™›ûO’¿M} 冚ØÃA¬¥úÚ¥á‡#rQj!ŽHx 1‡½¨± ’c‹Ž¯¡Þ(§W2 +fyÌþ8å³0ö ÓÌÌï*fw²Ìöг;•£Oñś3àÑòþØYÆÓ3Õ)™úD‹D· «füá¹ATù|)†êú|?lcÚ¼­½‘²ÿ¼¤64ÀØ¢8"hîÁj`Dx/&ÌhM0V–À¾®ö­åEbˆƒhK¶f췂¬ƒÅ©‰ý÷µ¼doÄ Eõ« †?¤´Fì·)>òìS›óoûQ{SÁV@jPx 1ü¤}’Ùݕ]Õ9ádeƒŸõ5Ü úÚh¢N<“{ÚLgc–Ð쀇Ìk·æ»­¡Ï„ËHÄþÈå´:ÞE˜½LrÝQ—²ÓNÒîG…F¿G–Žb”0Cu]ü°RŠžú =ûhÄû%à0ãڎ±æ8Qyjƒ¹yuѹÆ×nl"|ƒ‹3ûd£[ÆòYƀ‡Fì5hèÔ4{ƒ‰VOz1!ó¡)nÚÎÕU°:rðsvèOÞԉc¶—ÏDá?A)g ¼ìN¼ìM(^¡Óš¹m=‘Ìe¤ã¤V5Ä("𝁴Å҈Óu©ñ”ätDôǍ†ü/È8+Ó¿\DÃX/éœr»0«»G©òÉ.5rÒvºP$ VœÐ0{rίÌÒ¼i†a{–´=&½ÑED†KR*/Beg› ”tP£dCÌ!ž™ +6'/¸ò1¶R¥k©]ã$wRìó^é•BŒÑèõ „ýÌfՓœpÝ8o?2±˜ +µÀp®ÞCIζfìœQÂbu¢:$8|U“£¬d5dèÔá'FàOD +óp™,I™P½…ã†@V¨$l&́z ôؔ]Q²‘GFÀíI^t­€"l8ލ¼k#fn ÖO›z½àއ¿»ÕþY€~…}Ú¢s@@÷‚ïÀ뒊Ñî6ÓÈÈ ¦;œF^ÉGg¿å-ڙ Dv²Aá젏áU‹#àaMG= £³0Ö’×R¨W¸+Éxˆ€¢÷ÞېGâtR4%Æ{ “¤"s#Ÿr³¢¢4¶PÂi‘ï6oô òía†Ue›ÐÂG/ÿ¦ø‚a­ê»³b¤œg¨¡vŽl¤ÞûšY;†Ø„ô°ï-Üj€µ„õÍønx>îU85.,7aM(ˆÀ +:9¶ËÖIièdxègHd‹ì)+1÷"íÑ;)û_2ôžt °èÈ$h³Ólûëì €^:&ZBî\‚<1іzn*n†znKêAuCp]ñ7Hi»ânÐ$ß °{Ť¨·ïZJÎíŽFû¤„$c9ÙÎð*ñG<·â’ŠñÃmêú%6”P-QMÍÜÛ؄»qdƒ²¢:zQª +e@äQªFÐð ±þÌ5`#ïÄþUŽá¸³’w¶\ù«Ù'š¢3Ԗ-(ªyQk¥Þç%÷ÛB ®†I7OäiUG_È싡œÉ))¤þÚu)}©$jA2 Ðy¦Quèî™ÑFXqî<Ñ «Y«q¼Áf†KʌU¸#Ü«¡¤¬ñö*¥eABfEÑ++éÌúŠèMÅD‹g*‚ÁŒ‹jZ·ÄwUpç>ù—³Ì•ìo3s“?ùn­ Ý<êU‡-ƒx†-½y…œ»G? VBØ+ˑ¡Sñ™;•ã’ª&ñÉ—p3²iò +~PPþ0^LhìÀª‰]ït~˜.ÛܕÓ_…‚~”q7exý“n'ƒL+Èd%²"²<ÒIJšû—qàM½hŒœãooƒ®tÿ!6þNq„۝Ë?¨;;”ðŒü.ˆaë±s‡Ìj݁ïþ†×ÃtÍ˜g™à –&‚áhæ~†ÑüœØw_8ï×<¸…Í‘p(¬Ý¤Ë‡~4þÓ/òÖʯØHi¯ß¨h1#à@àבöSàŸØ#úSâh‚Ôà<Š9,6ŒZW^“•ÖèzXó‚ký—EË׸&“ <NJ·'²w;™ûÂ{âY 2s÷(Éͳ{TFÀAÒÕVaQ¦ªÚA¥ObõvôôÊ%ìCÿl5¶«3;|‚{“›Ob›cᶎœ'²Ä·x-m҆܁R ‘±?µ)<Údà×Ìϔo”I&]Å"~M;À]Ó)å¯&Q“›9(…é´s‡ÃjÎs°ð.£Í’eüDŠzb¾ çì3çÁÕÁ“›«v „0áƒ87¥µžª²Üð­<ž©æ}€åÎæ}†˜¯ÅÍÕÜA´t +»3Ħ8‡Ñ0êN{ª +Œ9?ˆ¸ÿ.Ü*6¯ +3%ΉcE÷õ< Ü ¯|&µ‹È0 .+äŽÿ›tàjŒæ1ጇý‡;icæ›@Ö=âôƒ§©X/Œz'MIg~ CÜéÏ£¸Î(˜mèA撎v3ý:Еòò؀G(OX\6ys+óÓlO˜ôïÆ]]¶ÀHWlj÷G~¥à¡Ž ·÷EG”µm–æˆ8À[žÛq7ndð/ËøtˆÈÿ£¶ÉºÑtcꞏçžOÄóÛwÖÀÛµZ|ࣟ6vÒJ|$,ZÉ©>ΏW†‘.@ˆu å^µèç¼wÉå’çzÏ4/šI‡€ž°´g™ÞhLiñÁ^¸&L;7™'›Ûᩳc¸l=<ÃËp¨H˜[è›à^¹À¨ÖTÚ[Œ¢;Äg˓Rˆ¯ûkÀgx&ÙÀ¼‚¿tE[Ceûk'Ž]Ìma&HÒ¿!#O§Çž ;–2"U1I'®uñÐå!øÆ7}1ã€,¦ƒPoÞîy¡†”Ù"N°6Ä!¸1ކ¬6Ó ·ÎBc=犓ޛV§çH,ørRa¹Lñ¬7ÿ;ÿǧ¿üƧ¿VÂKˬz?:¥>ª.WQì\1ùÕӄbØýÅ GŸKYMÓù‘¸ï¸ÖÀƒHñ€oË×\g¹ò—iùõ#QãU¢|´ãRc1m/nÄð(Ð$}è+ëè\n~üeò¡›utòmW†C҅è+¢ÛÈ2 }H,gú„ñ« ~ŠÒT’¢%é XµôPA'uT@½Â8.ü²¯BO~ØAÉ0 3«Â«Ÿë$G ïgï +°§fý¬“ð§œØ)û‚wÝ3ñr9äî±÷m6¹÷m8ºœç‹Öaö*Ì-ãE¯ ®úøÑÏz·H°¡«†rÅ1J=<ò¡žŒâz¡¨ ˜IW÷%ÐI˜ÑÊŎɞÿÑý¿óÌ¡”.±fAçzó̺7÷cP0ŒU•&mèƒÜT[_†ÏMÉRq%¡,á±gP9@Óòam¢ºŒÏ<qRÇgU•`4x9CÿŠ’0՘`%ªàT +qUÜErâg•róZËk։ŸÖ D-‚/yp%‡Ïq+҉Ñ0T×»ÿ{_òô–|w9¯Î“_Ò¯ò!¾Æ¾ŠÕ¯uÎkúrkõ„6ü`_ÿѯ‹µkó7V¿Ù/¢ÆkýgØ×èî6|W9¯ðI¯½¯Å,ךŸG]Çÿ:}Çÿǟù]€ÿô|³õçþWgN֒[Ü®²¤–ùàõ‡Âiþ´’ØøES*Hï´ú)%¼ÒÙN§ÑI-ä–Êx¬ú’Ûø»ëEi~™¢´‚=é§ÿ)uh‡ûðØ;5ª´€ùÙú"YRŶØZZìÞÈAÂÙYlwö]癟ÙQû¥H ©ä¾¶Ï?µÐs‡ÈmªžŽ”{ŠÿPQ½Ç/Bìõ(­‰úó¿å¨îáy0sæj-–_Ž7›Ýw›:êCG¸îð=†9r”<:×LϘ ÃÇ`|ÿÄoÙÚüÿÕåÝVþ†gp·®¸vöWSd*9»L8Ýc»ˆ]:; ¥÷Ðhín›ÿ:ëqØÝd®‘£ç >Y”Ûùî¿=¥Õ#²º¢üë­Gh Ýÿ–“‹›~Ÿï¶]=ÆØŸ»-3µß?CRíwönnÕ·ÿÅ^4žÜ:è‰ÖS•ã…L?vT¡u(de‹û{Ã'\e߯ë Ä®¹uIÖºÃfùƔŸf@Û/ôÄ,çþvÊÌ9Pñ¶7^¬A­[EÝ,ï0ÕÜSqÁuÕ<}×ñBqš„•~ÞÅu¿·±|~‹–øþféù”§qòKµýó®Ä¿.•/5*eýÊc«éPúA}×Üÿ¬ž0Ú_¬ka—éÌ6‘Ú\ÌdFîŸÌkKÖlû¨6sÿÏù}§ïü?°)ÿ5âÕ·æ³ë×ý´§þÿ±ý僳ÿa†ÕþHÃižhÃhþ¿ræÕò¦Dð ûš1ôC¾s|Gò©*~¨Â¿«6nçùºÝG{f2\zyhÿÜÿÙÏûv_ÿï“ÞQgñ}Ô§‰²ºòq+úÝ<Ö _a¶ï7±2”v?Øseò¦»cóx§/<Ù}i²øß©Ÿ—6_˜6‡ê>¬¾lÙ~€ÂÞ#ôåñ&ÄÖI/“7ô ÈØ|½¦}i‡Éby¸^ǧïN‡5ëêcç>¬{«YŠúqôŸV>jÓú©ºû*o?;ýޗo¸÷°üX‹Ö“‡Ýýì§íã=ÿ+ƾât{>ëÉÀAÄò.‘“]—ãò1¸ŸOÞî{=.#Îðr¸> }Å ï‹"ÉxÍç³xG½âáù:òc쩾ôo¸ …Pv¢?+ýs_Ó¨qîiq·zë¼n?à÷6™ŒgsÿZp>ÿ·È¥ØSÕuÞD_"ÃÇ¿HÙY"ÿ·•ÿÛýöÿúÆÛ•9îÓD×E!¢?E-¢—»÷¡Ñ4òÚùu>d2³Ì­óhÙhÚhÚèãtgèåtrÚ?G Ñètm(ÚÑÆÑ¶£oGG!F}­b9GKG®£ÚQÈiÒJ„|ƓC¤¤Òiô›M&ëIS¤]Hʑ¥$} HZIa³””!"|:MˆHÝ=&¢“iIº¤¬¤­¤i¥k¥o¥ÒÊée´¿ö)ågeRa?QëÇb“ã?Ùþ$MºC/‚][“Ásiûz›I‚ÿýfßp!röVmñ¸/ö§íêp?íàîO%p5fßpúiû~ ÖjRCšygÕ§íÃ݆xT‡Ð›÷kOۀÖ[©Àæ•à9ôý¼¶§ïü©ûwÛãëä¢É18|. 1‡Š5fÊ( ¬*úÎe>a:úy_Œj|'о•.ڔ]îúj$„ÑVÁ18RXŽj4xgÓ,s7ҙç¶5OóSÀk¨Î³{ÃßwՉ謓aA"{0Š•‹Æd “΃ø‚6X¤S1a‘låÃSÔÝhýß@Óx6¸Ž#Z¨º^A¿¶ýií)õŁP¸RK’‰¦T'¬ ßXÁ²¤¶y—(!±ü¦ðQ¼z{gþ²Ì6ð¼±ÂBa@>nѕcاx ”<–0T­áJ]<¥whL4 +]‚¼§…€ÜÇNê¢iÛð‰ÕŽÂ +”üf•æÜÞÖ€Úwµ‡£”­Ba=ÃãBðov’ýtz9K*¸³A c·ãŜŸ©P‡›å6Òê j +ñ[Î"¿5ðÓbàoæ‡Á&Àé'3 ˆ¬§¾.Us"UäÈä^cÃ³7Ë ÕŠÎ9)–°KYs†–²£âqÂP8æU€Kð–€Þ.À«‰j&£Péü»8èðO(€ÍŒ“š]Pb†sÜq€¹ž>yTÿµÍ”"'»Ú"5ÙF¢9² *óêx+Y+ fUMö¤í‰¼ ‹…{#5Î +š{×·pY«Ü1¥ßNƒrD†lM ÝƒJ«xI€ÌÅ'±Q—5Zò%¿ÀÞx=ƒ*¯o褲èwÚq¦}Ž!¨½»’>)ždUʒn'w1*À1ÈÈD–P5¦6Þ>?éªa“sÊÅ4’K¶é†›¨€ ¢P+ÝRôƒŽ¬K¿€„7ê¨Ì nj±¸P(a'j>£­­le؂JµÙØÁFü±hAG¢íøkBjã¶DððIœ|Ê3—!D_žMÌ +—ÐØSÍpÑñû}áÔ[p] šò0޳Ó`ŽÏëg}Ô!¶agCÅИ(5t¾H¼)7G˜’`ÍÇ6Bð â|%D£[$ÑpùZ.(  u/>ˆ8±®ä}¢j‘H¸¢ñFl@þr¥>+`‚–{rœxë/V¶Œ°L¢$ãŠz¶^ ”ž¦ç *)ŸöK—ZP1è㖩%Âzušææ%ÆÇ7î½+XçöW« +Ç>ïãú""\”FûЮHžbÊô@]×÷•¸ÍÓ¬AéU + êWA| ]Ø +q y+…m©éò þƒPŸÿ§)ž²Ê™kñ„Ÿ€ÎMÕ½›º?œ—X)Ö1·‚i#.”XLOÉi¹+Z],‡Ö ÿÀe 1ÜÞK1A)0£:#~|ÔBÕv¼,(n¸E×Ù`û@ƒm2>Ü F*yzV¿d`x‰`~£ËGª¢Gz]|9üOx:ôËþÆÚ¾C€LX\iL[‚=ûZ =‰°Ö²2ƒà¥#4HZºÂõ±º^aSr}æIî_yTf*ÄþëÅp»Ì-:äsOÊúŠ ÿcÅ mîTçT(.Kfó¤DàEÏ­Ñ: ґھ|[Ho†¤wõ&Èi¦þìÊt§ýÀ¿S]8ŸŸ R¨rXôuÈîm®ƒeñK.fTm3nŽ!ƒƒ™=léÆZ!ãÿd$Ù)(§0,úCKò–ðÙð LÐYC|Fm¹¾ÎçCêr#ö¸Ÿš%7ÏЙ!fhrÌVàhr̃UžÇ- ñ–šßßLCÍìtzéWáM®Xš¯D´³(_gn}ܸSެ‹+!jÀ§Ü/ÖPS˜1F®Á2Q;ߛ +ŽQ…X ­¡ ¢© †ß$îêÂøôÿþ¡6¡' pÑ ƒ¦X@žTÐÊ õ+"¢ã$†Š8¯j¼Fƒ©IºŽé¶˜íHl“‰ûïû ­S¤˜C„ǽc‡À¢…h!uò 7'[ÏÁIÀÿÂВ“ÿ׿4‰šjì;š`=4¸J,¿ð¼5ʶ44×°•-fo«zyÜR"—éöÏó[JædNv†kØ32L±g4µÌ‡]ó)†ßàT‘“Yڊ‘ Î&¼/vçm=$=/É:O˜Œ6¼(q(`V×{#*-–p“ÅæËBCFÇd#Ioû6CÐ`ÿNtY0‡ës"ÂJ’ˆ‚"3ëccÁI€;dÄ2 .Å5hU (¬vÑð>* ,< BÀŒŸÌÔK&z£9_Ô\…à(.ÀM7/-G¢Û<·˜M‡A@¨~¯oÌ v¢q%MNß §öD1jå~rÁ1ê>`á!€©EH +¾my·šžêÐrëo9<ÝÏ{öӓš  > špálzxê!ïè@âü°`ÕûVòªúÝb©Ç²ùV`iäb—@ô¾XFáp¥WöÕkœpšõ\uöuÎ>£×5`ü+?-}”ß³º£ÿ¹ÿ¬Ý¥ÑY9ÆçôIÝþš¹N~çôIÝÿbÙNFçГ»”¦m/ú =|W÷‹=zêÝÎésþu»\gÓ[¹”¡ҌVP‡ªŒVP‡èFö¸‹ÿ}‰Û,?ÿ·gì©^ÊN3e'ûËx\æI¾ì¯úX Ó +ýÝâW]ò}¢ë¾?³]wê2K®ëò «ˆ)ÉHàâ4ê:"’ý·Š³¿¶ü©9U4þØ÷‰õm¹¬ØM¢w+6J‰¡[D^\¬ñD¸Î„-×½Ö6œïf‡”ˆcNâ p8ŶÛ\´Q;º4»a²OLœ™¼ã‚x>Q‰á^;E¾S¸9C_¸šQ;ñ­'õ6œfŠ'|=OQegqgeeÔjpÚ(Ã/S+©õw¢‰Üî¿  ҉ÜÐK ¢|Ìå¿¢ƒ«ŽÑDïͰOٖ£ÍNü-M¥¥Å­Å¡BE¿ÉËÁ“÷Ækþ'|ÓÚr‰Þÿ…………ÀÞïXe«šOÙ³?*µ&z™LŽ&6W¾ßJÓýë&JûPefr±@Lúî¹Ê'~?í1n(ïñàn3-¤MNì@ öèw¯a–ÒÒ¥£l幕ORá§·¥_P¹Éõn¿Ãh¢wæÚ'è ªÎr„°PÄj¦NüV¦ÜÒ;Ó1£æ2†”Î¥“ ÖõëÙÄë‹E½Ã—2˜¤D忦ú_jeYDï™M¡£¿öNüÛñ"íHëE¾°êª)ÉifÔÖð±Š'x“=E¹@#@s~*?¾C¥}08MNð—]1Dïêq0÷Ãö9Dî¾³¿´¢w_+”4Âù_¦-•(d̮ɝ:õse~S©œ‚•t5ª4™gó8źë¥å¬Æ(÷‹éŒQ;›L >%¦1DîZs›Lb‰Þý‚ŒÏaDï‡×L6Š'|£E±»ºô©Å´Â‰ß‚b§Ñ‚Õ]:Ìu¼÷µûê┎`ÀË¢.ƁæÒIzÿí¬,©#5#QËÚ°IÑ_¯S©²^قŽ÷FUÒ\± ûv¢+"AxbÀ'ªÈSßiÉæ„éµ½ ×à2¥|î˳ìû>Ëç.QÇ/¯ivUô4”©ÙûMý£ }»0”úÃ…Ÿ ùgk°oßa‡·ºþ?ã/òïwsËJÓ]£[æ*¥Žýœ}ŠË–SxäT¶æ‘ô¬<þ +e ‚iSer’eíÎ)He “Nðå&()Aõ¿߆?{8•K吴†Øï—ØÙc\þÚÌ+Pf ÷í(Cm¡K [IøšþQ©´¤{©Þö]¥‹ÀšËeø‹NðRéx+éÔgýI™_Ý`¨#@Û0ëж1Y3;`On=PFYNeÜ›ù̾õÇe܊–1v/†2x™WÒ7¢ÉaŠŒœ;®FÄòNk»4/ga±zô|CBùÌ¿xÏüæ_ðg—xn2± 5->1ýPÊc²ïNëã²ýóºøì¾;[&8Ml˜ù“;þ €m†ÐËäžÊƯŸÊ<Çeü€xì¾YÝ|v]ñàÎ;/˜Nrm*gÑÌú–ïw¼R¾ …(m%ù§ƒ8û>qàÎ;/á<ÇeüG€xì¿Œî µkѳ&|ðnÜUëєzœÐýà+/ï÷†Ó”Úi ¦ì ùçÕ¼´šËè1µÿŠÊ¿‚;r“y¬¾’õLãl5þE荁ŠËÂj¸üþ~ç¿ß˜™ÿG#bi€‚å€f.Ã_ š#f²úlÂù¬¸+Õ㍱[ê2ëÍØkü¬ºóYx‹ïcêqY2ô{¡ŠËÅ:TßÒtLUôêO·_ê³&svýi±m™ãþ†f.k/¯6-²Ëì2ëÍe›YeöfRûrÍ0á’Er۱ݕ–•’äîg`»*.\áá¹rösøå¿û¹yÄp?üùyÄs<ãŸûøðoø‘Å㋖¯í¬»k>Ú×¶¸í®»kÃqâãŽûßöünÝáá×qIÜ{¾þç}DxßQ øçúV÷îÏwUu?ÃèüÍoÙû]®G³¨ÈÁâæãoóçÿÕÙ¾ø®cÿå…xð~î{ßã¡öyü‘ÇùüþRå‹)ïqÐã¥2]eOÇCÝe}Þ:'Pð(ß³oËð(ï¶j\×UĶÍ*âŸ+Ž‡Í¯ pWö£~|î9ÿš?I¨nêgÿ—ÉãqÏóxçvŠuø“ìöXäl ö_/•Çì‘Âçu–_‰%¾ËÏeX(q(PtøÄj¾9@ιÈã¼Ø~û¼«ß|ëûa7ð”žQ¯¨l͐T\ ;¨Ú·C ½ñ9i²gCws'ÿ_Vé{XñWá׎›³ÕYVx˜.¹ÛBÓn[ô¶ÑÚhZœ¢‰¡‹IÃJàéĘP«À¢7œÛj٘MÝP.ª&’Â#òx³8ê E‡[¸?…*g³|•›Ž¥a yŒDïb,nñÛÓ +4µŒ¿Aî.÷ȗ­·óÑ»ñ A.4"YÕé‹*«5(»‘ÙRåÅE=ŠNÍy‚-\$ëo^"Ð'¿Ô»öÿÇòè ×UUG· oØ´¥snÝ¡ï4„Þ=aäÛf ;moèE?kD‹º7‰v £Xü×$ŒzPìÄëÍá*ù•øï!á‰>÷Zàýp¬ÉÿGŠF»šÐÙDx£L”il½q¥¨é=ŒÔ[ꠕÇüQ׏þô]Ô<Çëw€Ž£,»øÁw©HY_:½ÃC¨tEP=÷xŸ.[8Õ¥©Ñw¾'|6~ÌVióÛs[Ո´9jø}±"õ§yú.ö{êŸÀ·däé!B-7’ÙђÃPÝÃÿqoù_m¼ ›gsÛ›Þ¯bOìRÈ%x†Ñ³^ðè#Kó…çë§|¶ÔcÁŠïSwí#m𠛀´fMÏ\¡íqZÄå +%ê½Ú”¥äðfN |_ Ló8D¸;o_䔙›Dã\ÝRý,Ip\Ss m2˜ë3RÚQÄXò—Õ\\4¶“øÃ2äppÚ;žU†Â%ıÂ9A¼¸£åÙÈÜÅ:/¢ï7ô]ç¬Bö£Kð¶§¾·^j.çu!o€‰•æ¿cá/y8>4/̝ó‰þ]üú_¡’J^eé/L¡“‡ÉMښáböá ±+©E‚Ÿ¡’n{EóH ×ïžk[Ø´Í»¢ïwfFÜ®é±Ñ¸\É +RÞtٚa;+ šáû¼@Ȋ‡¹·æè»Éú.ó0Tôa]jDÛQTù‹Ý~Gb| uHƗ]j Z]u™¼.¼±tˆ:ˆnTÔU:2Zšì«v0™Cá#µ?ªåE,©ëK iYYH¹lœ»8›´ô[ùYb£«$~3¹¬­šún¤n$SPç‡ÀcÃkuòXšnÄÛésë­TÄñ Qçf![˜!0軑Ñoœ/Å/^®‹6Á: tÍEà”(ȐV1ì®(ýsNºÕ-¿¢‰:±2Œ^\)~QˆžO~Ŷ)ŽÚ ~yQÀu ƒibhâ¢ý»ðW µú(M-@. A<]ÖB¶¥(lß7u™ûŒÛ7Íùz•Áî|pè/¡yt¹lt.»ã™Wöôå´ÐÇúæFÇÄȪ£¶1ôGË౏ݟÿtÉ‚¢ŒcëOŸªÆ?ù—çÇóŽôðºù+!ܺ ¨»Å9ãd·ªY3ž”>¼j(èÝb~ʱøÜ|™Ý2¬|̽Óc²¯þ7à^ù¯§œœ¥ÌË®È–cˆgŒèÁç×IC: å~Ö|´QŠQu8#g¶r*Ï×Ö3Åuڎ+¯Zß÷–yîAIgþ”–ÃÿR’ÍÞEž*.ßÞ),ðš)"t^ñIg¼k)mý%%Ÿéë ïcKˋ65‹/ÍJ_xAV!¨Eîš|³«˜ÑÕÌÛÍÆð'SpTceú©ö|Cgµ²–k]½Œ.·u/|É=–å“_Óß+Ó„ê ')|8’ø)Ëôðd ¾¯£P ‹«÷<>yÉ)úf.VŒ¿¼ÒåB=ªé܆9žù拘ß$½ÊRü´v 8é ™­žc¸ò4ªóü”g¼c¾ +‚Þy¢Þy¢Þ{ÿ|[Yô¯]U¼wúœîì [ÉÔoùG ßAãàßú%ô:9Üi›ýIý§ÿ"œþÊîNj¾ÙZ…JþMsÚñ¸³Ë(òØâüÍÓçòGéóóŠ<ùÝ9^o•n†V²‡ßê9`£ïV‡ØMWA0ù‹' È®¦gíÇïîñ{ü®§û:‹Ü÷¾¼¨ìqLÿȹGÇIguþ¾,=æç¡nó»”å睞tóîéèÞm´ô<Üöeç…+6óíJèn3´Ï6ùÝÏ:«Ï¡Ò<Úʬyåç–y¾ÏIyâg´¯?›OZó½Ó×<ïôõï?ŸLóÊÓô¯7z{ž{NóÀÏ|gŸs=Ó<¿•bóu*ÉæòWNóíÊêw’µ;é]KÏ#;Õ<òsº—ž.w«y÷ó¶o<|î©çÞÎüw›üïÈyægmos·?ÃëÞm3½ÓÎo¦Ú¼uÑ}ǜæ³ró+£ú9­¯ÍRt݆k¢è¶Y®ižË©_ÄHýÒãír¸ÃºÊûœZ¾«×ü^&ç¸òò¿?ÎBáDð»ì÷K«Ý{Ÿ9O±¨öÿ“èK뻹Þ÷ÿ»æ‡œ®ŒwN¼ŽÃäÅìcø79 kÈÚ +ŽÂGd·–P¿ÐÃɹˍ‹slØäÅÕc™Ôå`‹ÌFøa¥â’úG«ô3eÂtd º¬¤—Ò8ÀÕe—ðͅŽaê/àŠí$N¬x‘¯…Æby±eøñ/(nk•q Om륅æ“EÂ—Þ @»ÛÊ6_=ð¼ÛÊL–¥|¦l|R¯¼”¯7tló†üâÇ.ï&Zƒâ·É8Ú´ÉòrG~öHûllš«8<6Nß$Y"¯ ªˆ2¿Es‰'y~±»-K¦k¾q܅ê©%Ã{z–n_§wù[Ðan·žÂÜ:CµN×$y‰ÀR ¯gÅ^Ù» vß756Ç2òÂhZ“-Òþ¢W½6ˆ†A]nY•s.9E՗eý/Ì@m6Ø~[w0p8VAumÐÝwæñ¦L->{`w!мêy®EÇ{v2V̧Ÿî1&$šÌ|Z¸äÛ¹¹·h&ø®}XÒý4»ÖØ1’tîÝÄI}P'H Ä¥¥ìßâšþ‹± Ùܙ[ SÈnðI)Sœz/%¤Ëé´*ûHŠZî=BPÖ·È_i2G!LzÙ¤îÝš¯9ºÈÄJLc\­Y‰|®-®…Ýžü4NS¡TÀSîñ’¸¡E§…ïˤ;Ú­¿éšõép—hµýQ¼ƒñÓY96ÏG†‹Z-~fxöŠP–Æý}"^=ÁDh‹÷…úéh·ÖÿÑÃÛt»û¾ p‚‡:ºú-…ِÚK|•ß àÌVT[ S1obsÞ3 =1˜oÒ»àºaˆv:¨›0D#èW»R÷j^Ã2Bzç/RÎ6 N˜ Küx4ÑÈD,š-í¼ôBqõ™À]Dz=aœs\Þ7L¹ê÷L[Û»oô Î粊¡v ðJ]Sˆ·Ëd“¼}ƒ’I¾ALC! +i<~¶þñºòVt»êþ©+¿ÈM’¸4[ +ãvƒêW~yä­J-‚fbßDç¼¶Mz5Û¿<òRªè]Øy)ø…§3S\`O½…› e†ùØ×Ý*òTUøéú+öd«{o”_’ ͯÏï%„eŸ'5\W*ék§{¢×ÑÕö·¶ÎeÃTÏd4/6“eF~‰©Q×ÿÂTx}¨¶€ ø±”äT»Ö½*ӗ„•ß Á±à!ní9|D®ÿ",cºN_ +¿IÕ´cÛ žÝ¹Êðm§âú_{ü»JÞÿÔe"ƒ|.øŸ´@…°>§5nÌ­ª~—µG£^©ì¸uæÐüKPû9xÝ0?q@Ò°Þ.Ø óDlšªpL·‚øüÉwíw¸\^H$UÞ¥Ia…nøµ§‰¢â[ô14\+|ä@@G3¢Ø>Žf%1MqÇ¥A=íQ­?£ZYÉæá)“p—"n‚×uèDåMðʋSÎN¨tt?«T<õÜòÑ‹«ÇrԚM‘x Ý|žíϹ&ì7ýc·šLñtYø“b›B“•óð™k&:8®q¾ÿô¹ÙÅæ‡,ª­äPØuR¾ª³À — +ý½³°•V_k-kƒwÔúñ,´—p\8SÁd®-òikýUµû«jјiz.îé{¸Ré/£m³dâB½OçfÍÓ9Ä­Â&XçE.ßS'1TÐs‘|‚xîØµ?õè=V^⺟û—!ì] ’éó/¯_CðõŸ&=ö«7úË6¤!î«Ìšþ)µ×U£©~\y~ÃIGí^/VC_ið´üä… +š»z&Vº>ŠÅݵɉLõ¿Ã7D”ܸ2\è³Ýgҗ!Ãí²—Õ¹+ÆçØÛŸ1m½øcü6ÜáP„25™ÈÎG:³‘âQL*9Y0æªñ¥äWJó¤ît a›]Þbî¡Çп䘡^z€êñl«zYRê Gw džo{­wË ,©Cca*,µÄék´"·±ßý½£kduÚ[í¾A-ŽäÍ*Ñw˜ Q'ê7" O[ÇoÏn>³klßŸ†•ꔌ±7¶ç.üÿÐf/‰ê[sŒh,{Ò,Þà<$—"‘#7%—Ï㸷Vî>³«n8“ãà ̊BÉÆBMA‡Ùi„²r`üÄÀ.dßPa´œÙ0²]±¾Ù*‡zèØdùCÃß´ì0LË]F-€1Y án›ƒEvØ×ºŠñs¿ ;Û%ëåܳF{¹µ¡þõx,ìÐó‹^t•‡œK#!ƆdÊAtg tÀ°{ ¯D¡î/¨ôU¹j¨žw¨å¿¬k¹Å„X„™¿Ý (Š[Ð ªÝ>ѶªçÉÌ*׈!#pà[T»¬!–ë"he¯ÿ|2|`ó††aÜzh“ûda’•ìQñdbúò´ªmjÇo¤#êøwbdZèÒØ¤‰S(Õ;§:­ƾ‹g„Ͱhc_AãGЫ]ìѯX{‰âœóÓÅ;ÄSk—hÅ*2JMËÛàð=ä#sz +·;Wø‘·a˜›Ò¾ÿ8ܜ F…oÏ©¢ó1RÊäÒs±=¥lý|LLá4@’\J_‘mS£Ä2=ÌüÙ»‹‘Âm©/êñeeï âßÞöŒ(ঘ&ÛÓdx3ØÁ®Ÿ7~ӉEüåxܕn³äš[ÌdÓ+˜¥¦Lì`¿,KÚfdõOš«Õûâq•ÿÍKÞäýçœ£Ðžë'ˆ«É‹ë º¼W_iQ=èÙKžù&úg<1lƒÉÄ-©¼TJŸ§=OT°”þ.ÔÅ zåP½‰Š¥.ü*?‚I•Ò€¦†’ö4……l¥ô;bÃv§X²nՓXìn{„Öp½ªÊ´ª­À¦>»}s‡úŸ¸7p‹ÛäÝ$Ù¶Ås'Ýj©_â6g.¤«‘û7,jLýÍux˜î9n[¦\¶ã(*¦Lå…kq¿ÝA£9Î!m[¥îþ{Bw'é3nÆïþrgÍLP7ûAä¥{ðEÞÐFÝAp»¥HQF åš&½ÉsޑãS;¦dûùåV/ܓ)nÝ»]Y nT¬ÄJOš]¥º‡HÝwsÁæAµížewØÊîËSH¦ê¤ÞIØØ8(.:v¥ÛPYÝü™H&ÞQVt7ƒeñ·ë}b݅Xö3÷Gw™Ìòš»<v¦èÊüÉ2ç7HW”“›˜œ^ +¼6øð(2m´«/¿¦g&@1|ž§€yÃÀ<ãj÷8l‡®Dý;eC]ú×âÿÐÑgÈ·÷úD˜Ûßé}ÃoÛÒ ú֍}cFŽ>­ƒGýÉ—òOő&$g|Ÿ)ü®Ú¾nÛ¦äv¬¾OmÓ¡C3%ÏííÍ|\U'ýŸZÜÞ×Fù¤ùaþ¾Šœðøê€¿ò°,ï=_KÊʎÌÞ”þv<ïoþIõv<¾‡ÎñM:dç瑠¹mþN%_Ïõ´.yëùÿÑû à£Õ!Æã ‡46~½sÍqd-¦N"º¯ñuRzËHæ¸à¥ª$„"k–hɝ5ÙýV“¸ÑÂã Rž¥o8Ã;vÎ7A-ᛅlX)†„ÃBfÆ&ˆÊÉ¥F5)4 DjS´>F3àÐø4> ŽÐýÏÃCðÐü4?4á+•EJ˜äÐ*qQK¥Œ’)iS«F=ZqъœHh¬´DÑU(rQX´GE"iF(a8ÚdU%R= +Džc k5¡Î{Ð +PÀÀ)€)À3àT‹¥„Œm,%‘V6šJ1‡RŠÉÔiˆJ'X©a‚lhˆÔC}€üjdKVØè¨¬•€F$t–F¶¥*´V«¨¨Fª¥ iV… •²IÊÓBˆŒI1¡¢TV£%R’²X0äc1XïI +®J:H¤¢¨ÁNµbñ*j«[L³¨UqÞ£ +B²Q"<”dB“VŒ„¡&Œˆ€ˆ ÔB’êB«*ê2R*QÒ¤"Ž•U‰ÊˆRØþ°°RZ”ú5ÕJÇ ®ªZ*ôµ…6REhË'«¨Ž:Ø. èN …•­UÒµj×:Ò¬@Q2É(¨B+V«PŽ–°:µÈ­ÍÌ +„U®-ˆ€!€&͵ +Eé*€#GV¨°` RÕ Àà`”è(ààÀèÕV-Z¢%&e5ue$нPžGÀb”|¤¤UõAhÓRRüœ’uJid£¥|ö•--)€øø;P”¨¤µB5êÖU¢X‘ +MxÒF°´7Å^€R€>~LNR:ô´dV”ðð +` +pµ¥)T €€SS€=I!¤3´†vÎÒÙìbêPÀÀ)€)ÀÆ¥ ´¡¶”6҆ÚPÚ@{APÀÀ)€)À–ˆÊҀ>~LNö ¢µ(ààÀàd´ €€SS€=†3°ÀÀ)€)À• ÄÛ$6É ²ClÚ@z©h±Jøø08Ճîøø08Õ¤Ù¶@mdÙ´L(ààÀàKV2}ã‡Þ8}ã‡Þ8}È +*ô”ðð +`¨}ìì€>~LN@N èŽUs–¨FE”ŽŒJøiŒi(ìŠ(”,‰T¤¬ +« €õè(ààÀàð§¢IRiZؤ►”Å®uly0ÖR+V“‹]"™€ÄéhñJz+ +–*0« +›ù1ŠE©*ãh®ŠÄu «‹ŒéSÔÝÆŠj ŠƒhU©FvQj FJ„jdÔ=€@}µðŽ"Õ(à{UPîBeKÿJì€øø0;¸R4±Ñ„4` ¼4e ,T%F„î,"š(ª¤@“[PU‡*YXQ€ Aø« jgºbӀgÀ4 +Ã,Å8ë# ¨|R¶T—^P€øø08|@ÝIIb5KV½v@¥EGÐހð÷D +h7Dx.È9ø.ì.£¥3lšöçFď:ôc¦U¦ØuÎÆ Ãlƒ¨I”h"BM Ï)U"­ ¨‘êÖmAÖ>61ŸC>} Àņlþ :pÊ,)K>ƒ\SŒÚi*6®®JChE:Í«£UŒrD©ª*[# µË>uBõ +T(_!Bý +d(iСϡC B†:(RB†0СM +ˆPÔ!GLY½c{[;+Z:»]WSÙæ¿ƒ©C[eAD<,uS§C¨Õõ^¢×QÕüË*ZΧµêì.ªêd-‹¤OÅ .ªêKNb(ààÀàð  •éHñG*V$xØdÔ:ɓbÅ6M¨;¦Ö왰‹þ• "™'Vî|؀ʘn±kÄÙîPmR¬Hm‡¹ÿ ’Ðâ¬Ù û ª•këË3ž èì5ݱR~¥W¡ŸÐÈTªû@Y«è=>‰ËlƒhjÄÙ ë ¨µv2K9FÕ†»4lDãjµÔ’¬§Âoñ²äÛdÝ#@‰CSbL!­d:ÈH9;2hA°×Cž ÂÅîõÐOSíÔ*@Û¡Ï/²%¡ýŽYð²X´ÆÅŸ„êX´æÅÈÐdGµ‚8urF2¨"šÅJ–i)Ð7u¡ +,.òcÂÁX4JS͉JÞf#ì„ÌGî ˆo òVmóM-Ñ,ˆ ÁÐlú¹~7FèP,ƒ ¶tDRÔ)s“X’¦œÞϜ™å ýuGAѯ•Éc4’ÛµB,KM¢M®¨h•G1c\•SmšYõrŠ>¸xYÎZŠ°â½‰^­+lvӘÎ`¦l¼ôXÞŠï‹î|}&I¶Îÿa²íéóÓÌeQ•‡c‰P¥×õ3ŒËgðFö­´ùç dUc”²&¾»Oûሰlh.¹.µÚUKD|‡jƒ¨/lKX +8Ä«ÜBÝ êvq'æ:B5¨¬5¶xV¹Åd%(r2S9óžWܧ•ñ:§gæd/܇•÷-åÊy_“ þv~fIÓ§Èy_òÞZnSËLN€Õ놎7ÿ}ñ9¤æý„î+Z›KQi¶Û}æNºµˆß='0’JÒN–p­ÖÙ’ZN½O¥s*ç9´ˆQêÙÑ7_I+ä[¢`£4ààc‡ + £€ä€_+áh’¶x(‚x ÅðÎðÞß¿ýöa'unêO·«¢Ø$ p^|TO/–‡åïÉ{O¿z7rkwï{Lß¿ ¦þ +8T«òÏ(Žój`á•sÙô­Ù¥b©¶Í9ùdÜFsé3(Ðbfù†1Ÿº`úZÔ9˜Ð#¾.öè¶ÜþLÓچáF·kê({¿–Müšü­à#/€ŒÇ™ùÛ¨êòضñ†wÝok¶À3J›Æ'ïÜN£Vzl‘x–ÏQ\ׯç4"­¯µR +ÒG©à/â[nÌÒ;ʺàîåBƒu$ŸLÏÞ¥kdw8Y„éü¶qe¡Aû)?5•åì®òöWy{+ó¯e<½c¼½c¼½có¯Xy{/¼½—Þ^ËüëÙo/fw—³;Ëٟ{2ÖρBmi*Û¥M¨“~X‹+oŸM£ïû^ĘðŠ1 ›­ëqØ¥ZÙæÄÆõˆøíÅca69{ö88ìrÓc™¿cSŽe¯Ùçf WÏ·f­u]úƒzçs;?òE$S€ ‡Ð sMoŒÞÕÁñ8¹i9KšÜÖd«„)G Ȋ€˜8_ÍK8N¤)‡ ã2¶æÔCˆW6¤¤‡(ÂC`-!ËÌHs†®Þ©ÐÞôeØ8Uw”<º8#ñ bøagÅð¾Ê>1ü5ðÛ6,žû÷r¡«l×És\xa•·djØ*`Ù©ºæè¯5J3ì×Ét×ïk˜}³ í»!è/µ«{]bA8— ’%Üѳ½“dôî½q|š-UšL]~YÑVr_;{«®;cø$:5‹¥Ú„{•<…>¢kõ€;™{× `3@A½$Цò>‹û±ïzëIâQ…8 ù­ÏYÕ~s|Ø ®×’ï‹{¤tÛ±¾ÉÉûhT`X¾ ¹h!÷¯zåøüÆ_šÙÜ̗UWÀWr@Ø $¼—Éy˜IzXˆ—Ê:ÖÊÎøiUeî*Œ³¹XÕ&ÉÀeúƒÃpg:CÎäîmýqáÃs¤<âIÜã ;ü?¸¸­l÷õõ¬NΘƒZÑá@7(ÊZÙËn¥|G2­léCÜ$b¯©<-äpxf®Zð}?OÊSs;sÙ«èmí»à#?›ç‡Jã—ê׋óÞp\µ³;ÍŠZÉXò …_ŽÍ&õ•WYºLŸ#Î'€¿CZ›JªÕ=iQIû£Î@o8Ð=¤€{M„Úl=iЛÓa6›Ó`öšO¤ä¦Ó0Û`@F’RrBN’ü¹ÔëPUZ©Î•yîžÜyí°kÏXû±ê*®¥:ôc²e£ÄP¤7‰µYRHq ¥xHª&æ<.R‹öœœCãÐÃEf! œh¸† +\¬Cdl¼CB X††q»ä€5 ñY¥[UUuk5¨Szx#uN=hP#çÅ.ÞÙvÈCtMы_§ÒþýޟP‘e#ÖÚ ¥?Õö —«í~§«ìû>M{½¯w§Ñ$y›·[=;¿gÕýOëºfݘù°#ê±zѾE¿ã¥Œ%k59½ÁçY“\ÙkÏPíM —7°´ +kÜw“~äOùmííà)Ȏ\xÿ‰´l±ïŸ\몛*ú3¬·g%À%×V8DSÀœnνۈ¿ZÙ¥tÛ8¶Ú2v·_ôÑ»'Etš[Ž÷þàpî˂·.]>„7á.à¸}`gS LÈCÜÀ‡¤ù¾f¡ñ0œíéštŠ1f³^™ä¬½ÛôÔ>Á6ìÏ˚ ¬·dpßx m ¶Š‡E­Ÿvš,O¼æU[l¤î·5«_FÝ:ÔÈï‹j=½FéÜuqTZ/cõ½²8·óÁ˜­¬—ü0ßå@*Ñ<0 ¨¶ªÿ$¿éåòt¿Ç­ìÍíy¿Çýáɀ®8Ö*zy#ᖂ#Ÿ^ç¿pŒµ­+߸e[­S×-ÚP¯ë„S€¨½%‹íáDAüÐ:m‹Á>×ÊìaðʑÖ¡ )Þ7fû÷t–Œ)p ๵”’á{+ÅmΝX–¶)Nç·ÚFíZë҆‚M/ŠW«&”@¯VUDԑXH¬$YiZE˜‘f$\ô‹ž‘t.€éO¬8O1¥N{QÏ¡'3O9oæ/½”Ó©÷ùÇ%'»šBÄÃúý/t#æ&¤”Køâ~8…WŠ.?éß`õQý´~úcå7õ–‡pÔBmùÑ0öß{†ŽÑíûœ&¶kðpšítï £´[~t^YÍ{œ&¶kðpší xM(ê¼®YÍ{œ&¶kðpšíÖß ¢eœÖ^/jPÜ4$§àü›Ÿ •z^M¶l6«¼a…ÿ|Oãl3&¥g)w‘|/íƒ {pY“cX±¬‹…$Ü?ÊÌÄ\&?p¤õºŒÌEÂbn <¡ÿ;:(¸h½paõÎŠ./\PþYEÁ—î¨I –Qpe7 o(¡¤8m>áË}CþØM!ûÇ1EÀûm4‡§ÜIo¨¾Hm!Ä‹ŒÄ¨–æ¤8­>âÌ}Gï*ÒQJ./(üÒ´‡§Üi¨îd´‡R.9ï(ýÏC=÷=õ‰§¡Çžóžòìzyï¸ùï¨ã-=<÷œ}”¸Yèqç¾ãè>£þu§¡Çžó ò÷Ë=<÷Ü}Ô}¨“ÐãÏyǒõÇøKA=Üy/ÜÉ‚qJmë-YUk$?ãú ýç¥n ÒœË‹OÙ$A¬̼üëuìY#´ãßG}L̨üE"míŸF¿OꍨªVӚD“ïû¤ù?”™p“œH뤙 a(Î"p”iëï+º‘åwR<¯#ÊùÒ9ÝԎwm"‚|¾íŸ—»gÚecÂ3eGYèFCFH}þ0ù;¡”†ÌøCGÂ$ˆ›/+ǕŽãÊܸò·.9Øî9ɸ¬ó‡„¿-ílÏÊ/4xéŸÙå$Á˾:²àJ%Œ¦Ò¸#ä.ÒÉÀ¾”7ð/BBc§„x`„òGŽ¢Û{xÉPx‘q¢"QÉWa'Iòpw»_§‚>ŽB[Ä~Žù/% òАGÞÔs%CqÞðY{[?âp¡:ûÏË éflI€kƒ¥™ï€d¯NÄÕODáC"„r˜,X•ÚïÙ¥ 4ðr€¢ˆ¢’lÌ@6Â9W`2SÔj¢§ ç6hÄ5Ãâ™Ë{Å3šžôKÁrmæ]ÚS–_2ÛTÛ'Y%…+ÏPl¼DøòM Á)3z„û`bÓ±çëbB8K›J8[K‰#–@}Óg6Ñ}þ ãßW“m» —í롲(¸î_førÿ=˟fæÔ.µÃl\ràEÚÙ¤‰ÛÎB8ŸØœ™Ü.Lä93»ÎLî&wÒäÎyÉg}Ƀºä³Â䲇%žó’Ï’ÏÒä²ó’Öû’¦ë’× ’Ò–»ÎK\K_K’ÓÎLý÷'#uɟÂäÏC“?¼äÏàrgý.L÷œšîL-×&‡ “AMó“CÉ¡ô¹4rhï¹0÷\š<.M94{ÎM&ÒäÑyÉ¥¾ä«ºäÒári!É¥Þrip94¾—&•­,¶ýìar`*\ÎtSÖãVãÝ%Ò´J:ðQ^Á6_d”W÷I÷H,ãôõ,?JìÅcô´4VHD„XÔKhHR*ÕŒ©U¢>H{.ÅñíI]#× Ë±’޶ˆu¥qkðþAå@zXÃØ8qžàÆëoð‡ü¨¨K[>kUfáÖ²øxÆƶ1çS‘D½ruÈ\Ê%¾Kä,Z%í´rÿR1Eù¬‹YÃÅMY遯z«ÔA)Y‘ò\Âô¿|Ÿ.¬Kã«6*%þÔ!T«[4wÓéRÁJWŽeù…!l—ºîõæ ò“†nGg⥿ 7LòPÙ{Ppk)ÔusgÃÈ|?.¡u¦¢lÉòǘö).æSJäBFù"ÇA@9)²PNJJI!¾µ³<Õé½V›ò¦%ÍÉ7íÑ(ý(ð‰á"¿ž2+ò ä"±ý$vÌ$ÄW¢MWæÌEn‘ÔW€˜_ï÷‘_ÆOü„ù_Þ'ÞEÀ?«mǯï“•O•BÀæ(‰çáЯÏÅÇQ-:%ÌO˜ø£æ@³iB³N®†é·Å4z%Ò>Š¥×%rFQùǚn.ù£Ë|>7"8!^œþ% jOn¿áÿ±W°ù˜l¤Î ±Øf¡‰ÿL÷ø€¡±É{ÃËâ=¡ +Ë®Gañòþ¨ìãá“5h£K[Ù Än×^”€a4¤‚ûIèQ¥"Ÿ;N¤Hÿé™f¢´Ú¢ÜbR…BmfÕ"Ô¯eI՛h¤(âC”ÍO³@£ ZšÚsÐH÷ z³í•¹Ú£¤6Ö°Y­SjFlê–tÛ5Ԝy|íNn}C群éVÕ©9‹jÎi›qC§PЌ±N:8çuAÝS“nͱAÁfűAÁ°.6Ő (VP¡ËLŒÿJ²{ó`Ó§56È#\'ë¡?X'ë0›MZÇJòv+Ñ· ô1›¨ÍvÕ=©©«\r s©áS5m¨Ë3¼ñÒàs‡LP튚ÔësGKú­šök–ÌéÖ¨{t´í«5­JDzÒԟYJGµ¨vRÈé‡!‘Vgì= F®Þ­µY±d1´O:}µ‹7N¢Z“Úl¤ˆ9±eàáC‰B‰'Z²{jŠ +iðªúYìO£ÚJ|¤²MåO8/Óôý?ªÿG*ãýÏa=Â:8\ƒAì4Ù¶;Ž8rµµ¥•óÍÆ^Šˆ±‹˜úmÑÑnëöÈJß°Ê7\ú’yòfׂ÷* 3v¼P)ôõóäèyŠw‹:ËV æI5uÿ–{~ŠmðŠåÓkÜ@й[·^ØÝuù'¼ùo*K½k]sœšG Ã†çŽÎ6ҘámŽiŒÿ Ô¹ô5Cè5ÍüÉ-¿>„’v™M5%ƒ{¨++x¯aZÔgP6تÉê<÷®hjŽAéUn¬Û“}6¹é­;PªÖi™ÄФ£dŠ˜-¢Î²})bÌ|Õbóý¯ì~¯µì-n•ZD‹S¤9BkӅϯ5¥mx"Øv²nEà©)Q¡ +mx ã…¸á.Úæ,Báv³‰‘¢elj·Ró9p4Î] 6Ô4ߗË:)µB·:qëÓi#‹:óaŒâby©``<Ääbbp¯²¾^•ÛêÿûY0—Ó„Œ ¸K­:ÚáKvõÓC;èWx²a&zB‡d$š„v'fúeIá8°Y )bð\_Á£û½sç3º×Þهž½%Ã̘ÂÞŠí·ræÖMä3·.;Ƚp¸_=a¢³ÙþČ øˆo=™Ù_sâè-ðáè-Ñä#â™õgªîgÜø½PkÕ–êÅèm(ç«Ð܉VS¬á‰\ºvjN<¤…qÕÑÌg.:õH÷Jx´|ÓñŕÞwxgpò„z'ÇɂC}lÈ&úÂo",\ÓR29ÕR2è|5ec°ñQaañ¸É°±ŽÃÇE†[ãf¦Ã/‡‹ ÇÆï“a™ŽÃߒ×࿔ÛÏv¢3Â3î3ê‚[j™.»øñ(³N­zš„»µÆut”ªäZº–u,jTš>!>R‘Zá}¯tC‰ÕfÖrè§k%ÁÇ7„Kû,ø¯ônz:s±y¥ ÁO‘gn5Üæ¢QûÄRø0æŒÉG™ ²ílùÕu9ïpÊa~ÿˆè£æA‰©õsˆz é ¾"R€ÔHÛÈ ¹«½ŽÊ&’> ”µ±Ïnuˆþض‰Ï±=µWå[®Þ±^ڌuaµÙ €ÞI0”‘wJrJZRP7Q?¹%1)(;‰,¯þ$‡X +””=Ĕ_ý¤ªÇfËò{’9ҙ¨ðµuè¨!4•"•4ڔRi©6us×uäH©³ÕãØ¦Ô¨ÕÛ9šõÁêÞa3‡[ØZõOE­•ëú Ê{¢5V݊º§Þp3C”vרäÿäáäÿä‘vrSÉÿÓÈ“ÿ7!NOTÞç'ªww“ÔÏw“ÔÑ6¼¬ü…0òw£aäïfbäïGÅÉÞâ= °á鹍Ø\Æ8\Ãй„ÂäÔÛ …ÃËxs'…ÌpÂæ?D.Ü…Ì÷as]Ø]7~fa…ÑñBî&(]è]‡*ȅÒ÷at¼pº[кZarjnZat± ¥ˆ]/†Ký¹žä.k» ¦÷atíø] .âb…ѱBìÇ¡v ‘ ¦nÂé˜átÇ¡tÄÂäÔÜÄÂé‚Lºg .™ú!s]È]7» §was;𻉆FÅ ³1Bèö¶|¡Øò¿¥×»ÎQªÒyÊ9\L‚ZÙ­üÍ³5üGlÛsY¥Â£ ½Švc7=›'ˆ4ì¨Ø ™­ú5™P‘j̘œ²“S ª\NR›6$Š% +KLg¨J\š³kêÀ<åô«Žª¹1ýœ»tlÕ"µçsè.—Ï蟞ø8Jôõ$ (ÕY¯©ÊÊHQUà£P©6‹ƒ­±h¼8:×Ñvv5ñVۀª}[ÂÈ:ÒGW¾€ÍðÛ-ö „æÖPDY1CslVúBRR”ê„0)QåÀJ†Og—Óñí·f¬].ž»Î†»În»ÎVº\whf_÷zKZ›HT”ÆP¥Â +xGÓe +@R ´,ž€³þßHÞ¦´Ï.Iëõõ³åŠÿ_[AìkhLüšÚ:"¿ôkyräõ¸S`TîwÁx2£€6câHUÍR€‡\´›ô]ô²wð" !¹mé(cü@#guƒZQCä¼ÀJH%$()Ùü[þ﯆ eù§%:`ä\0rR`ä\Pr.(9Šˆ9ë¢J=b +Ĉ8+pV ä¤ÁÍ.ÜUrV(9!ª(“Ñ’TøsAn'Â'¹¾dڐ‰Úð$d:£¯5 dž <ŽÏLP2‰Š&¹¥ÙÞ ‡òžŠF€ˆ¦ñ4Å4LT@R­lэ^ÛR^Ìï8fvó;Nt‘ljGO–ïâz¯Úª£RP •há;¥ 9D€GxeOÄõAþ”IH!IŸx B4XD•µætï Ž}rú© `®!븗®V×â`<­¥Så=å;EGôbD”˜ )ß)8ç<ƒ]8ü€ˆ )úY§p€òŸ€ò±ÀyBŸmŸ`֟€ù‰Ö¹¿úë\Þk›Å­sxµ®oµÍöõ®;ÿfµÂÈþµÀ?ŸZæÿõ­qò’šÕ K#W¿ +õð¹ÛK +x]í¡ž2àw êyÿ¥ÿu'Ç{]D9¿6©+Õ°énÂeÒØ´·[–ëbÒÝoí×Q …6_—]DE¨”¿®¢.ú›ºêMýuXNÏëªe1iþºÈ'%Þ-àÊ,IN‘¨ð$;¥Æ{^45™~p¨ðk¼pð¹i…pñB¸x¡\?.ÛM¶WsoÞ׈ü(J)pzW¨ô¯ë[:‹zbü¤© }V@Ä¥`‡`‚—Õ¶Œúɍå“Ö²_™ns5 ‚?}ÝW1Œ¹³ãƒy† qý#tWÎ=Š©]ãüŸ‹\ƒ¼nè¹®=/m:ÖK®|·NóÙ&FÖËBËÝp%¢ƒ‰À—¿ ¥ï6rÿï ¦Ã:–fê–aÔªbRÌíÂi¸M3ye3¼²ÏÝYg)‘‰eŸÛYgöÖYûË,ÿì“5¡ +KúÃgÒµl¼²\ë#â„lwAҒæ}&0ƒ/30ƒŸ„ ópƒ¢pG8dz¥›cžX=5ý*üå zŒo/xy›Ãç?7x}#à7)yªÖC•~¶&)5…‰xi}±¦vÆÏ퍡Û›Ûö |Ÿ,ø^Ÿ¦;¬{[Y¥]îd`ûçò³5º¦—WN‹OœŸGêÈQhÓÕh¤GŸVlò‘‰F­ +Å'~M*[©=RfFK)蝕E¹íŽIHŒµ«Ptº¹µ'WeRI=¥¹PÕ ôèՉ"×^—!·Nm%GÅŒMYö$6z4£jŠU¢ŠG«ŒHj®£R ¥]« z#â|Ù¹ ÏÕ²r&:0j(–(˜(Ïh +9¢ ×=šç³ž‰b‰‚ŒñF€£š(=žh³Íy¢Ï4Yæ‹<Ñgš,çœr͐&¢X¢`£†C‰ôGµÞÀõqn &ã'™|kt|;.Ƹ‘„àÇ "-Ç¥šÒpϹó„ú`"ü¶øê3†ÜÖ¹ƒc¬ ~UsíæGr¾·Ù v"Ÿ,4ö#ŸÅ°<]-¨}æXé"“lŠâQ¤ÓgD®péHºã¡:zLÐCí˜ +¤”P9RäMÆä×çG6˜åvo ¯Óà)ۙ¡¹wJ õ÷7h䍮¯ + —rôôWtù_¸WbÞº:^ƒBvíqÐ8àjªÇ”õ‹Q¡oã:µë¥"l#‚± ©]ÓY»ÊE_@Ä÷F†)ë +ž†Po#µ9G|aÑ/û~×Hùs7D„Ìõ…µ€4ZøÇÅ~¹é ð* A<½ ð›AqρZçž}›ãÂ2L‘êé˜N¨ø°³©MŸ²^aS÷½…Oÿÿïÿ†Z!(û´i¸ÿßnîêZ’Ô}©!M€kk@@„Ä@BߒԖì5#@DØF“L &Òƒm#QK^¹$z9\prI;»£œÊ〚o¤HØ0#m„‘£†7©¡‘²7 †ÿýû÷ÿ·u¡ŽJútî¼ó-ë™%¹|6w\½‘Ë3:»à½à·2åÉà¹lñ»ã¾+—Ãsß}—2ùoš{»Ã|·É|×Ù)õš[fÚÆž$fr™J ?[‘g§þ¢/´eeÜËÅç}YÊÊu».ƒ»‘ɎQ •ÙNw=ŸS—øBÁ û¾Laé—Ô7e.šÊ–5µ“ÿØÉ þu”ã&ëfÛ¬ö˜!O?þû)Çú9ïÞP²ý”§³e8ÁM…Âë`³Õ¸^oùïÜ´‰ZËfR/íe÷«Ï~Á¨`ÜÉ=aúþû?¿í§ŽÉ y1xÂÞí¦B+‰l¾2Äy]ñ›WPÈ=wâ—2*hïˆã Þ*]µe©¢Õ•ð95ý-sKÃNñ=âmY7OPV.íf±§-Ÿ’ó°Bɫלl |˜”¬n²Ú& êÉ?Zª¼ $¿ú¥.a­Uúwxv¢T)uF³`iRW†#Þ¤ûDªÏ;Œ¸€¡¨\GN:é^Lb…)]=EÄþCÐô‚܃ƒ(*» ÙÌG—n¬ìo[v´§9W¿Ó¾|ú*Ì/7ÍN(" :“3µ%…š•XÚÆ#±÷±‡gâ+v[3Õ%)¼q.ÏF:Ñ ½3pÖ¬öeˆ[†Wš I P±ƒ0žE¸Z›T‹¶~úåÒ±Çë1†SãþŒá[‘[$9fcpVØWaÓ åk:é+˜„ Œh¾Î¶‰mÄM¢KU\+7Hd3½*¶3XVŠ®n:Z©„Ï49Ž, ‚uV…¤Ò¤.µ\ÝúÕ¯w³dŽ»ëo…FÕiØÐ á[:ìê°3^Õ³J’SÂ9&i1ãƒ4?*„½;ª “võJ“¬ØqÚIúC·€À½z¾ B<Øaol’-:*† :' [Ø!ã¦EëÁ ¡¼÷êm ³Ô7D¾XÝéqW Á˜Ê›£[›c6F0Ý,ƒÞ،Õ'•7#æ|vwGÇØñb‚gô&Ân}¾Ÿg¿`ÎdÙæà͌ußcX*úCãÈý;ÉÏ* ÊѨMQit'òƒ¸cSñóÀ%ì“°Åܼ²„ˆkˍËn›â…Q$YAì!q: 3¬u6w= +û„o‹ó‡²•ð¹¦|˜då㠑™lòwÒÀgÀùØåÆ#< +úóp=$Ý«o€M‡ ’<é“Ξûp³½¼'oáÍ®¼$y_G>Ջr2»­‘½â–òQïÙ)^LÞcî§!3Û=ïîNBg6¸süIFee Ðà}²¿+N¾ږ(‹nI2~–pƒøµ`¯INmd{UÅˍu°‘™U °6ˆV’rB".t½»ï96>k¨ù©áØy¨[rjØçÌFÆMmƒuAŒû3É}V´-|µ… @P Áõ-n–¨{çò_>í×ùéÌ ¾j÷ì‡ëeÆÈú]¥^˪ &,+Â/Zðÿ|z +X{¦‡{èGˆÉ±B çªø=14]Ä:69êˆp(•õó]Q»ê¼z—=8½¹˜›3B”ïkº„_¶Ï¤iIü†ëÀϙísM#Qèšh®Rºi¢R›:X ß{ ¹`€™`W”¢AzŽ…ÄõU¼š°6F##ßkhü[b[]£‰ù] ‘‰w©>ʯVò7Ê«êœÁµwöœdÈb~Ñ è¼âGI„ã;'º;Ò|Ð-ÞÝïɼ?=IBz6%~ÇAl˜=ðoЂL!Ñ×ÐgtF„zÙ¦OdãÀÁ‚­õ‰AGt f>×\ôc60ˆò‰AHY„¤Å4_¦²ùC`r0‡{øD;^…[Š#;Â/‡’*IA$!îfDÁ‰ÉV ãòÁ•$Ÿ$ݏ¤nŒLѺ1W&èÅß Ñï3FèÆU¦e(ØÔžozÞNÏ6ѾÃû1#'+Nh:þ š³PØä€óc¹7½,X¤‡hg_K‹ø€¿©“Ü÷pl¬H˜ΜDÊy~_¦!íØêÎ@äVV§Ë‹:êˆlðYÚ¦ÑãqcÁý÷Äïy¬ÿoaxú‡ýöÂ-õlˆ¯· @`-$âkäE´9#腖óƒÇx ÿhÝ |“t{Þ!º2{t6¥7DöÔÝáAöS]=]£`oõ¦ÿ€Ê‘ <œX9þÕÜÄó¾¬,*µVE+§f©k§bl +á-[`RÖw &ÖwlSu5÷4&H†ìì5¤î!M¤ëJ;IÖ´³· ¶Y“«ZNªÇ¥_XÄ-MÝlîqïk$®SO™~‡Ã‚ã£üœ‰ÉËóÐT£áŒ)™_VÙi»¿bª¾®|pëGxpûÜz­¸™IÞÆ¸¹ÎªNíU!rù*«—È뗀œ³Ê½ êèÁÝdTð\؎ î ƒðY#®Ñ%¾ðÔ‡j:ðI’Ýý,ÝvW“Jr¹,¥›0g5³½‰ úU,å-Rvm±û—iÅô^.–¥c©Ý8‡¥?M6+ÚÐefi¶–ãK ö±U|adâ¦ì¬Àb•Sèg0æ¬C5zq{›ÏÙ|LJwqbê*Òª³Â(äåzŽÓŠ àgÀfiÑÞÄØå·ÑR»d7üý÷6m_JîIX$¬ié F%õՂf_éŠ?Tpa’åv&xèÍdgŽÕÏSä„£%ªPH‘¹1=IÅB$Í†Ìø,ì>ðg,"TdLvíÍÖ½PÒJÌlL°¸–fÓ6›'¿GT”7IÝÄÛ¾YÉO1jV|%éYÜ+ ÅÕpïGÎ UÁE+/![½³%/fñ¿J§/¶øHÊÀÐ)ÅùM©¢ËTŸ.òmÁ><í(6{6 Œ²iÅz¨´»%c@á]“lÏ£á½Bv(V$I™) ¾ëÝèAIx4.’öÔlÙ$^¶\üé‹ÍhòûÞˑŸsÅUääŽvª™Àdóhl@f™CöO= r;'Ÿ‘¬ê9ùÎbRªô¯HÖe ¯Üg¼? j1.ø6ódmÛÞfwÿé>¢Ø}“g‘}Y³zHDNìüºµ®dfqºu«\ÆÌã\-ˆs2޹šØ$Qi)ރ-ئ69{€=¾64<Æ[³UQåcE)>TêCj«Â€NXÛ¿$—Ä1-M ¶˜Ø#¨Ú‚ÚÀw䛚¸GviIwù ÕÝù2*g™Ê 𳉠YkŽ´d"o¶l«r`4A:·ՋBnVtøÒ4Ãvƒ‚¦–¹fd m)k¥}î4BT¨4'Ûïl©Y×GäŠ PFì‹0æÂ¸•,‚#0ٍ@äC:ýÀU©_õÂýtIˆq>{äñÓ1Dgi`ç®6÷¶à¢Á§EZ(‰­Ê¨HW~ >h5֊‘Û&„Uqh¡pá,J¹ý™æ³oœwpjîÝ!ÝÐB»¸îÞm2oC£ÜÚÙð+ÝÝ/މ>ï¸ÝôÛHàñ‡|ü½áÉY§»ý6ifë,œ_ C\“Ç4f‰ñ)Y£Üî^NHR³U¹¸‘¥›wAЯ¥Iß 0ô³j¨:Á±¸öŠ#mR ñH4{gT$³ù1¼ ŒLh V°[efë¤-¶,#EÆu¸6u¹õö`1wu©ö_ïÏ E <„+~–h•lG(ëžBeŸK€ÊT wq P ]Ôa¨-ì܊]¸‘ý‹+¢.Ñ`°!åã‰!óì(ØðÛ ç’ÆØuª!#d—½¯<U¨ó›kpç;z¡óªÞ×G÷V"õ°¿`ƒ&ú½Ôʬª±ºî÷¬ëÃÉ@QF‡sjÙËÀ·E¦ñdϾr`h¥; ‹~MšÁl6®½$nÆÕVÁ´ÆåNF…œsJ É×1ÉUu«9]‰²›¬óÕÙ%]3 h±h‚¹çJ´ €q)Uõ¢Ð0¾™°Æ©‘ÛE`NDf<+mzÏ Z9 †ÇªÒD¥Z,âՈ¸Zls`­Äo±·Ý»EÝȄíÛW{W·¾A-@,÷'bÙ߉޾öÆì`„w %< +Ùä*²‘ i×Ù±Es g¿ lòŠÙ´´Rµ+Y•ÌÛÔ­&VF׬Ύ@tÞ¶@2ÄyŒ±²¹ È,Ù j†@…ë6¯~?¤|ƒeÉÙ!c¥A¼sU>3½Ä¦Ú¶*«!9Œ‚ɨ­T”§¤Ê¾ÕÞáŠ!¹’U­˜ƒ íØ€÷¯ŒG\³v+ê¶ðªÉBJÀGjC3”½3®n®EZaVç¿g5X=eÎÇ~øìå…i%¹hëjµïƒ‹‚xüíTbÓeÜøYÕ¼L :·‰gVñ)² ›ûí'ã+·ÆÄžÀ­ëñÃ`Vý{æ·ÿ£mŸû|Ÿö0F?Ø6ÙùŒ?²m³ãÇ$Áréáÿ9¶Ïö¯¤9ý:ô5C_~r~ ßíË×à Y‡-tÐ=4̤ÀšS]ðφZNÁ4‘1S,Wi¬PšòïQÉ¡ KxbºÆWe4P½â`ÏSö[V ´ÉÁ +ÿ-Ý"ƒ™Q ¿[´Â̪jÄRMÁ¼ƒs³¨EŸñ°­3›&®³¬  ­hïˆmD„cÔ¢àÀBН#Õ ™ã%­‘P딓 0©›"/¤~Œ,a4x†zQz޹¾`‰ãëìÄ}œÝ4A^AW]gl£r4+êåÃÙ °ô~a!{ õ¤¯Ý[Y’68¯ØàXf<ÆéoaGaÁŸn˜*ÏÓèÀØên@Øêva‡g¿î€¬ß@RþÎ~“ì›<9ûth8Fèê÷¦èÐÖ£EÜ¢›¾7E?h•¤ÒÓS›5 ‚:˜²ªÜ<ð,e¤[Y—¾Òæ`¿”Âeó¢@¡ñƒk`Û<šbš°€ðR}–¹OTuç¿~~l‘ÄÙ +YAƒçªçÊoQ<ùÖ%aڊ+töÄ™+Á•Mû¼Éœò§,¹úñëBõUö‡²Û҉Xk"²^[*üÅ»²€-z‘±Õ}/Šƒ ±7\) ElTZ2·[hËËBѕ†–¬¸D¸2Ô«_¶ýâ¶-@'u̸³]3§4e¥Ph Ñ‹äûëڜÖ2(6㌰ª ‚ε”©uh‹ª˜;Ë%ª-fU¸=OhŒ7û6ËöÈ ‡".ÔD§´3âϟ…8) ·žy“zm¼½)NUV^ÌP÷ÁÃÑD>+F'`ÀÖo  ýÀоîS•jYIv`P*æülzK&ÙÃuc”Z]:h9x}zÍ6c›ÝUðî…ÐÔÂ@¼dË랄R!—AB?ŠŽ ³x% @‚˜ñtaj“½d½#͈œd„OT#ˆ¯’+G×o·®Êš™uÉE~3 o„”‚a-ý á0–÷?Ìa-ûì$# oÅÿ¹„·éÿ„·U„ÿ„·ùX?é0–ù\øL%¼ `ÇW +é‡mŒ×‡b½ÜÕzµ ¾ã2Ɓ—¥gA~m1º©òNb$;&!ð: ⁃Ûá"§Qõ æ<=%ò–_»g¬c$WöCZº@A—&§È9N,«qR¦RêsDá8{%­ß~õ˜ú‚¼ú‚‹lïh޹ªá²®) Ý`+}`yž³êÛ +ò͐Ü,àá»ÜP‹ÇùçvÓf“bfÝİNfÙþ¸³pP#à H…ZÅ+/aÏR³(®AYºû¿M\mF†_…Ãjnw{ÚY°@«úÁ±º~÷<ò™ôÛΙƒÌ¯Gî /ZT¥×1qŒ7U勞«ÉÁëñœ¡þ¾,ˆ—œ y÷‹¶Îö©}iqõd©ø µÙ@7¥1uǕì1Ž0ÉJnÜ1uåĸ½|$Š =×µu³[qᛥMÆå°¥û5·¦ÆWqfn•è0“÷×û䦦2—7ÔÄ BóìDX9FņÔÄ`GOÁÔ¥“Y‹:Ÿ,af‰J@@j]Ú=íP$¬î0 >ã¤_Åjý&;ÀP¹HÜ;îÏw‰Uô"×Jy¡¼¸ ³nꎦœR½ÁÐ~Èåò¸> =ÙÜõ(ëÞ]÷7\#P•d&Ihåp&U5¨ +ÓÑ¥Š‡öV;j1YЊí†)L( d؝»¡ŠU +(à"⥊¸Q@y-ÄwzX¬…Èß1PТ´á&ÚNÆVT"€â«´±[ ++[ñŠˆ…÷ØHZ TL(­˜E}ŠŠ…¾ŽÜ@#-ŠèQAl:í܌T\( Jîvâ ¤lo¢3ÉÛä†)Q@I%m،RøQ@³üíâ*2WöÂ(>-ÌÉ2œP(÷Q3nM,c¡E±ÅæÝ4߈¢€Ü /ƒeêŠ+Ь¼èÅ^ ÅD+n Ð4±½Â‡ùÁ–ic! +©ýÆ8Yé¬ـƔ~Ž7H¬BÐ°Æg²\=@Õ¹B²$ÄÛöm§ôf®ˆØP‘*€zn€&‰À|ú­ïÿ*ޛTÞ·¦å¾ßýwyÚŸuy‡DM¨\ŠËe}"lìPé0»„õ²3¶Íf £0ôL΃ fÞ4Q×_ÍÝ%C±ôm8¾8‚%Ï8¨Bcƒ*þàÿ RXå£6!¬Çž‹®Éô!øW{‡·î`j¬}ë”ÅóÜò«zT•Z5UçHé}ÛU®&€³ûÎÀ!x¼èøç®# IžXEIV̳ PƒEÙfÓîQº!F“À´’ Lp³¬¹r®•˜{jýÁ|6Î3›ù²¿GÐ +šÞÃ*”ðÃҎUÄrý|ˊà ؑ6‡ƒjp\Š„³çvMpù@—-rïôr" m‚(HI\ñv£v_°üb¦3QAiwxxþ÷̺RǸ üVôÚk|…hX8£¶Ò8\süÂ·ÚÆ>™Î‡BÃFâ§?MÕßÍo+ª¿™¢©¦4S —4´´•,()éØeôTPêªqùšœûŠF”Yý ššH0ìé44—Q ߎÐ0Ðéªò|µ4î)ó´úu54õ ýÛzéፖ㚞åc¥ÔÓÔ¸¤£A- M%˜ÙƒD8óôîᒣÑR0§ráùz#§a¢¢¨¨Ï4i>Z“GQOM£$ ʖw;I£Ñ›-©³ã „Ÿ9Næ™='ÏRQçè˜gsÔTÝQãØ ûf·O¡riÆqÉôD|yªzš—5È\£— )éBs§sRi©þ‘ÇGá ZLèeÛ:M&;IiÝÞ 4ô>›1ûÂð™ôiÞõæ‘Ñ4x¸ì fxØt#hÿeÜWÐB5GÎ@sü+€~IrFќ‘´g%н!%Äæ­Þ¾S +Kù«h\P'½ë˜·(ùŒõ??ˆãGu®5 gd¡ |œ®¹JØH:q‰ÅÈYg¡{B%ëŒ =‘†B)d-ºOåú3éÍøUÀ¯p£+5¹ ]IºÂW÷>zs~ füAæüûfÿŠœßF 5u´>%"ƒç:”0#;ª<î­ Ç£þ|Þ¸Òºy¿…>oÉ Î«òÌéþøÉÍ÷‚ÍðØýÙ¿ñ½Ý'üoúi>ýOߍº·H Òù¨ùÁ)6ð°È2¿û›O¿›âJo‰ý3|AMñò›ã–€ŠŽ4ϚèTu†B¶;úþ³~¨ó|´`R,jFw5Š•='øÒ~ÀôŸÈž“øÓÒ~¿ñìŽþo^ +­æXfpÚ|&pÚ|&pãC!3«Bò3:ÏñÌüɽ›ÑBYÈfùMòg›Øo‘þ™¼h_–= ò§ß¿}ûï§ß½ôoþo‹)¼¨_ÃoÁžoè¿×7ߢÃbûñ¦ðÜ<+_WƒRmÅ!'$¨Ú·‰6âê͵üA¶¿-‹èäKbú‹ßù&õÁ«ûñ¦r›â‡wðÚ<¦øƒÍëFoÿÏ̛âƒIéџ}4Ï|ÀÞ:¡Ú_5Ыü“=Üß3|q¦ðß¾4Ó}Š“olÇT<¶ÏO¯òÐþo‰ +‡ã3”Þ:‘ð‹éãÕ¦†÷óxÒ~[¨ƒÂoþª5õ~íú¿vŒý_»F~¯Ý£?Wîџ«÷hÏNoÁoà›øZO’þ¬ßæRs„*O×àŠ“ù9"¤ý•ÿù©?Õóé?–Â'õX¤ÿrÃÛ¤ÿWÄ®ˆ>ú9ž¤vÿm}Uùf{¹¿ôÓ_«çÓ_ åÓ_¬GýY¿Ï¦¿XõÓ_ú|]éÍøxÀÜ?mX÷}@nÿxAöMI¨W\†û"©€Úg×áËpýSopü:ò›×ŒÞײʩA‰¦ý¼Ê¡Ü5ŠV„y¦ÿ#ù¦ôJoDfü1¦þã2Ÿ®CåN…'ñ(vxÅfÎu¨v/Í7CøsLþnaB!¦vó…æßÖûÅFÞ\<¥þæýòƒIü¡©? ¼3]LñR‚˜*Oòx?noܞoÀņïøMërʽ~ª‘Ò>KT/ÿ£Áá'7Ɔ¯ð!»É¦ü¦†…égø%Cµ>·Þ+Bþiÿãʖ¯ó]óÍñ¤üP¢i½‰¦{ôҔ:3LøYrð'Ìa•þIŸ™7¯)½yó~ð„„éxKäñå´þ7îM÷¨°Ò}èÚ¿_‚PmÙâ×š¡ð¯^'£T4sûóUsÿrýíé=pÓ^¸ÒýlrƒM±vqªMŠjã=Êk÷Ié=v¥RàG-§ÍWþ=Hú<ÿæÑÿ>oŽ-§ã±zô:ùÀؼÛOäKÆ¿|5 ÷ÃgxjïfÈu¬?žoçîœH·[.¬|PùÉ?Í7ó7ù³%¸|üÁQŸÁ«ü“?2oænµ¡n´ÚO¿‡;³Â{s}ß +E»e‚½ß +w»áUV7ÜF6Û){Ÿ¯á%-˜òüË?ÀešÿCTðîí„]ß I»jRÛ*ÙòU¿ m[¹i“Ô0ØX¾û=Çà¼CS1þ¿ß¯÷ÿÙÀ×~ƒm +ý4ãÚVпyò¤w•”³ß±”äj»üîWu«°‡djâ.^úʃ}ïø|ŸªÅü~c7úVÖ.þÎιŸà{ÚèOñÝhÖ{L>Ç]PÿíŸïeíõÞÊ ÿL î¡?_=©À`œœâ uýõ).Áqäõ߄ËgݵMìeøÝ絙âgzV™l.=¿:c‡§ª‚qå`}‘%’±¯Û– D=Z$8Ð8”+ÝÀX¤!>µœ¾,æÞ‘¸p±Akk<ñ»<ù{”¬5(h_ŒT\þ…£ëDM+ kþëc ù“'k4$Ÿ$÷ÏØ|“,I"±#†»ça#Z¡úJ&wo“N­y„»¦éBߺÇC£©ùÁ«–e–™¦V„ÈRÐ cõ§EÛ r"Ö)ŽÔ†€úv‘ÃÀCÖ^Sï§ìZÙºø Ion –Á¥(pjTp$-0-®4ÆáÄ«ÉՉÍÛ(sÈÃôçԛ jv‡qX0.*:ÁO÷+;x{¦o F)òX'}Ù$MívÇÌRª6-þÙÔ+yÙ¼;¶fNl,”ž­þf¨™— ‘.Ø +ä$l~ä[a·Û5{d/…‘íáÞÀÁ»ª;7 Âä;ÛMY¿íc¡bÜ»ÊsXÌÃ܇¶ÀIaÜÖ0­éèÚrُª,aC~{Úúv $‚ƒ¥¶f,@Iäրúe·Øï÷‘óðÐYâv‘dð­NpI=êzùOF:ÎöÉézò]²<íh.Ò¥Þîm¥gˆ=-ºîaŸþ*È=7ÏWËck.W· 4¶ Øñ–‡"öðWs§ó³4Ïþ¬P3Ý+ûÌP3úŠÿ•Š}Š¿ÎÌýÿÝUÊ`Œþ_ò3?}ò«¦(=ñ•]1AïvGÔÜÊ@±AïlªéŠ~|Äo ]“¨UÎbƒØ§ùî±AïRªâzìP{êrØ ÷¸Sø™Ÿ¿ÈSülP{õ-}ÛV6î“øšh¨OÚf +Ÿ©]~ešT àñ’òé`Á;xöV©„ +Œ'À ñÚLø™§#ºSzÀ”/AMÓ:Ç·¨çC¬<=L(p6ô>¤8š¼5JsЭìüF£ ·§Æ€âµèq5sjU©Ðr•B’Fj9Ðñ°»zfšþ;Q·]Fµ ß÷<Áìø(GK¨tìùUߟïÆ‹ÿ–_åÿãËGuå̏”›1Wâ"€ñlûì¾S`ÚkºÕv{­æÞB‡åuìµQH\éâ¹ÞOüfÓl¥5[ŽÎ+ÿ¦ŽœÃå‘þ¤>Ú>ªq_¨ÑÓ½Oɟìù5ÅVûÄ@ëç§ïò´XEÆñ"}&¸ ,Ë(’“좣§æA9fgMà†"·àMAÅ?ùso:ö•Ú[ +Zí/|oÿªÊ·J cí³7þÀßû÷æÿÙþÐßö¯~:Â0¢]–€«™;î“ΠoCmCÌ¢³“9‹^ºDIN³Ð5~°~ò$äœÜêt²£—å0Ó±¨°:x“êc`ÐoX‡`­ækf»l§ü1aË¢öLÐL“¡ØN.ºžM©^…ÙÖM_æJøE ËtáÃ5y?&•ª¦u4™ÒH}€ÆN‚Àh#J¡¨ðKç[¯t%ÆÙ%á ñ[¢¼”YïûªÆè–7jîøÆâ]¦§«“pLìgÌìù²ÉÊðÄ7}ÇW¿ »¼>úˆ°ç`\ ·Kë±ny܀Qýò:­ˆÆÀòÛ@(0i/i©o&ã†Ú_4ɺÍó /[g{›ˆ”ã‘EKÚ9áÜC´vݐ…–ü٠܍¿°ÅíѲF³é ÿÏ7"¢ ØZÁÐðyšÏ€{¦BÕÞÜæºÖ ˜’^éôeÂÀ^GöÊ =“ ^+ÒÇl€ÌX6ÝÖ)h«Î¥g/M|ÒN4y> +iôôôxç)»8]öÀ¹GL4`˜\1ÏsK_"‰ °ÊÚ@áO[3&ØA D@RG™·Ð%l~FÎôìOù„–̝’Y±p£”Ýu$+©‡±ßCÀޓAÉm‡Žu5õ÷ß2-ÿ¢'ÿïxž„(¦±þ÷¢Ÿ'ú½ü½ü²þ†ÿìú)àµAmº"¶|VݱMx3L®ÚH•ù´—ð1÷Otaςþ/xûD´ÎÅ-0ޓs‚ut—œUQ +j…¨¾?SH³Q¹ãti±C½'äÏÇy-U3k¢·O-]“!ô@ƒÕ I«á¿ï¦ÿ¿þþƒÔo.×ü²h¼ÔojƒˆDr¯Ô_0€Ô0~#@àPznû¿ëuIßÅ1Kˆ¥wº‹%S4ê˜)sž!hQÛt$=–õ v,-P™JzlæÆóÒ¸‹øâPE*ì`ÿy±dÈc÷†p»l©kE·ß{F“³ýŸffI’I†d$˜(,k$Á\ə,ÈL´FÖ¶UY  ¨†` +ÁÈ,ÌøÄUª¶µµj´+V¶Ä £ RHPH ZÁE~¨ XF3ïß¿ý÷ْjÑßo·u¼öï7zÑÞsݼçº[Ò½-é^_os{{ÑÞs;Ðޟ»{½ênÞ§·øiÞö¶Ûm¶ÈÓM ê¢h0’ÉÙ@JA¹—M}ü,4F†ÅR{VnâA¨ö³uð:XÊc6Q ~c’Æ™’ï´nE=(ï҄ðе#:z å&[ùÔ]- ëìÛ€ 9ŠybÊ})Þ­?{©N‘`%¶¢5¾ˆØ $:Xµ‹¦µyV3ïˆc¢ªH+µìên©dý1 “v–îlRÉøf)äüiYU¶˜UVÛ©,£ãM”xÔrŽÃL&dÓ<":í.‰ÂaáßïKh³‹´Á€…þ¦÷ +•ü&ÄÚm¦ºÈîQÁœD€&WÔ ¼÷(çQ`š'Â8i ‚ndH“ ŧ×B A‹B'7QÅ j€Àan$3ã‰Y"±Ó]æVã‰=Ê9ÿÀÖbV-Xéüã@èºdšEíc*¹ËñÕs—ôqÃÑ<[‘SÇÈfî•5-£¥žéTì˜ö„›r‚®rïµ.*òâ0©’}a€~båRÃw›¡Ìpet3Ôȓl28hÿ–f»«ºˆçÏ).4§»F—J—ŠHhaeha‚8Á‡GQ,ŸÕ[â¾U,Wó’íCÆrÞlù<´]eL›¥…°Â¥–RÊgÖA’Wa N `â׆‡¨k¥½ä¶%á퉰MJTr}æóÍL˵Å@@uk¾Ò©t0Ž þR‹ô:Gó fëÅê]ëŠ)Åÿ‚ø[ZZ=ýN ê4H|ŅÀÅÔ¼¡‘yïÎ[§î:}šd©à¥<7á‘>¾ì®æ‰Ù9§”€:5*€Ó¶aòîâ öl€FŠ)›—»ó^>&Ò¦Ïr‰ÈnàÈ+¿Gì +ùv…>á=- èÑÓ£«õj?OÚ[d~]’§Š£NÊâTº4¦=uRà1ìÜW Æ‡Qœ¬YƒX¥Õ–~á±¢~WàRŒ—æ_¸É's}>Bs[É·0ûRjæù‹ÊÄê¦Ðˆue(²9ú7Ó8HØç9d£D–Æ.¥íŠ¡'? +µÙþ|ÿ bi—½Xµ­iN>±kFgƟíSÍQ®þý-䢕Þvå{f {Bvj +tlFöêe ‰Ñ/§@Ùü&”,'©(ÎÌÂbn“'Uð‰8%-¹û#D“T²·CÎnýcTvöî„]ׄò”Zפtþ@l±±n¡b¸Z6žÚÆö²e”G89¦Óíw“¬t{©ÓÑúsê£lL1íD`b–žNð<'G÷b¤ÝÏÃô3°*…Eä\¥ñ,Š¯Œ],ÄÊ΄$Ô×ޝc9ªd +0£Ô»ßžJr ˆ"É:¥f„ÜNññ8@Q¡¶%(ɗ섁¬9¾c§i·o$?_a%¨FêixÇy2¸%ɧØghªsÍ̀_ܰ¸£«ìÞéâçOã,:šŒ{¢ (°ÿpr•Ã{ܐ])å‰F\޼z•`Ž}¯Fv‰× LB¸æŸžÑI¥j™1÷Ìr˜¾öÐaÓ=ÈÃ2š ò7s¾ƒÇà÷$PÓn! Î2¤nÑ›sã‚nFe|)˵‚ÈS’¢Æ¿Aîݸ_ +¥íÏÕϵ©¼J¹´šjñR€W>BÃèþ;°Žfœc²½ìÊóžàŸM„/æW—ÓjÞݪÛÜÎi[+•[VݙQ݂ŽLæá=³5R.Z¸Çdꇸ•®{ä؞‰v9ônj··ÄnÃÕårr×!©Ià‘RèJZÝ i®†ˆ8÷„ÖFdKýFtÝÅxö‚¤aý!7àHX]AÄ`( áÕØ^§Æt'ëO`’£ÈrBO“„ ¾”ÞWi“Ü/.Œ&ÏsTf#«Æ-Z:Ô­¹‘î•ý7# |µÌ— [wGZËC’Ȑ,–à`ÁÇç¡Ð1(½ÿ eo=wŽå3Tº~ »¹§N'ö1]3Ýe‰G„H¿úB@Û}WO­!e‘Ökj b•2ŽìþØ»^]÷äˆpÈ]¬Ð +;økìdö®Ÿvl„pæÏ2M> åÀ,·­¹©6¶gºö^ä”>¶˜gc„ÊÇ1î†È+ü6ç¬¸Ō½oÄ´~|˜‹fÈ.W¾—:.‡s.сðTw|wÊÀ8p¯˜QÉ9GçÉ4€ôÂdT2NȎiV¥Z;Ÿ\À[$0Þ¨#-©‘bí¶åãêlÚë²¥ßý¬[±VHՏ wí®Ë&*y·$ +ª¹ àâ¡Y¤Ç¯ëÞz?-Ïp$HǵDÙ°†´D·ê:ì$¢2ñA㸴îñ·¹-½”òAǶŽêÁºƒZ)W`]V6¿ +ˆ¶'~‚|Rê‡~•Œô©Àª°ç™‚©Â™#„ogµÕæðˆ­uÏ/éâÞÜäñoV V&-äHTL²H)Á[²Ù«öúbã痰ÆßìŽÝ¢Ö"ÆsŠƒ<9‚|ôiL†R2äD8/a·“Hbø”Rx›ÏQîšÝNéÚÄMsïóF-Õ`žÁhOÝJü(ñ¼oà) ú40Ôü1ŸÌ ³°Ÿ¬q¾1ì&D"àŠuy¤Ìà´‡ +EJ—Ï&0hæÃ#ä’ kFʾ ÙìÿXF}ºd±h­Æ +Þ¼K&õ«C9ùE»‘2žÑ$þN “Î-~&[ÐòÛg¾~IŸ>±ñ˜­$åõX)ÌHtÊ!Á–†AqȘˆr…ùáoM~HBc.ñ¤Èí°‡#‰½üŠYJÃRŽ ΢0l1+©® ÂGÚÐpú6®ò#X É­Üë!^éqßD[&³2ßK™˜Tòr—3„Tó¦ BU§ÏÀ©’¿ºdO¾-&܈ÿ÷cÍÓ*ÉÙ%±¢uˋӣò M¹7äôèÑÕāó@úœn‰zÖjtì`ê +;—t~}ž¹ +¼㹜ÄNõ Ÿê=õ{“Ç(Ø·Þºî`.€•·øÊÚ§BUÃôMhᵁ“ãϗOqÜ­O¦äŽ\aÍvY9\HëÑU•‰=ŸJ< \-Uó$ùÏ®I’ǼǧH¦£¸+p87-j²ß<ˆ®0 7‚P4޼ä»îµ)ö ªu{¬D­ T¡Ÿ׋&÷ Lõøm§³…)R¸/Z:À‰1HøìÐàØ¦}“ÁÓ×ó¹ÇZ…ˆy|27‹.sܱ&CéÜ먨` ±ØlèÍÝR®’²²{„Úí“h(Ró%Ÿ é‘…æhÁ˜øäwp3$枭n÷8ʗ€Q Þ¡± +tŸ }‚û¿’ϘÐÎuߦØFi‰\•_Ò0g£ÎÔ¼¡ƒAUªy"ÿœGÿ(Ö©äÛªÁd6øoì~Á¨5¯?X¸F~Bžî?a}}—d&±uØÖeƒ4i¯.:ÁYpdvo½liOzŒ€±…Q€Ïžwë…^»Á]õì…?cG’ÉÆòÊ©Ä/"¿VOà*§Lf–†¿]à‘[P,²óá£õ=;CÒ¦²FÒBOëñÿÈ wÿÀ̅àc?Ó=@øÈLN;„Ä÷$Òkßl™ K;ð¡1=’ïބÄ̙Çÿ‚Ç¿¤}4ýíEPöÇFÞEú¸§ä6xo23z›gÖÿŅKäÐN1ç|‚Ï,L-d æþlý%©óx^w•¼}áEo,¶Ö6;þIœ€×,ƒóËjÒRqõÁã”b(¸ÃÅlyán[é*óCÅ|xu¬Yñ/q&|KüI„^`íL¿ÿÌ3ÆóeÆL=vðñ(“ж»UqïṖñÙ ¿nÄ`þX>׎SÆ{«ÜIáØ[&/¸­T›»H*»<”¶ÐèäݝO3Êãä!4?dÓñÿÃÍñ‘ýþÿ½ëßÏÖPaðSýߓø¾îŠk·þž*üXoÞö|ާ³Øbt_s¤–õü~ó{+§é×í»µ‡·e÷:¾ç5éæyÿ¨òŸMQ=ùsúŠÖÊNÿòëôüÔç_´’ó=’ñgÿÊÂи¨Iÿ÷ÀñqYG —ÿO2ú~ÿßëð¢ªt€X8ni¶`¹¯Zg7ápºgŸ+i%æ±-aö™øÖÛVZ^W³Þ«fá]4‡óK$ðà[¿ÜЧéd?½OÈ$U?ÒF,“Æs$­Øû6ñÆó€>?g|#P[sm÷ñ6RìÞNӈˆª~êl´7ßö¥’y¨ÒETñ°ÑU>ÉjHªžÙŠÔc"ZÌ£ÒÞa[ÒÌ­{wn%ÞºNuŽ²ÄêÛÕW¯s!RÝõ–Ôÿ‚{J(÷`å·W#ávßcb"¦¿5H»_X*·@—VDÉCß©QbÇXF[¢¡æÑ¶Ë3KšÆwг1ZëxAÆj v9K©Úñ®¡^qEn˜ØÏ•º[1[Ú'ØÉI<‚+yؙ¼Ö¨ŠÞ_Ž{Πô%Æf›hhŽj¼ÑØU›eéôƒYÜÂÐŗœúŠé)<0›ŒN™Û(ŠßṮ+š+÷œÉ6Ù¦Áf I(ìL‘©˜ÑP!æK—.º6òP+—HXgÜ& +`sa–‹Ó³ÙøË‰]{ȇ\–n –½LÝñÉ0@ïäcÓþ,bí’0þc oú‡g‚Ü\än¨ÂÝPšeÝjyÀ ft/֑i„mrJíÖ*¼¶õømË}Á§È¦oTmÊôùîý8r7­œâ؈–;7j‰U¶†Bz]Á‰t’7ˆ{Å¢aë}4°d¤½y°Z|þ׸TŸ>x¨ð/ àˆçàÑX†­a EáÁDn?¢+i¸„t°æž,.=ìØ|¢»·v¢Ì6íËÚ7G2‡@­òp³áQ2$¡íë¬HC‚ÐçafNáwe$¶Xö€ÊZiÚmÛï•iC[o>ý¡Š@x"F=ª´‘#}=åìïìDŒ|díwӓ +hìÕÿr$c‘Xš$Ü+ý¨‘ÕV“÷•þÔHÇ¥RÉëUóµÞuZ|îd\5‡Ï³Wÿ„ív¨À>&gېãáºU$DO~ˆƒ—7瑲úQ_ŸýqœK“3†oñQ\V)ً%…Ø*¸dâz{—%8—ÿµ8O¤ˆiîÆI®ý*îb!§id˜žo·QÖßj£¹(ƒý”ÀUKÙzZz^·¡ÖµoîЫöpÛ9/©}fs÷¯?N‹½éúÅ9]û°Ó£OŠÿ’ Çÿ°î§cøw߆ÈON/mŸH5JºÉg>¯²´oåø™ï³ƒ1)N²5·z«/ÓÊb¾û,Gâ¯ÿÎN´Þ—º¢ ¿èFÎëÿ—¸/-âð½Ó#b5¼Î=vß+¾ÓLŸæb"ÿ„o¾_¸ Ò6ËÌË!5ÿ³^â’óã7ßõ#gó¶×Ÿ—lHIЀ:S¡Š—ñáÁ³u„%¤CH7‰¶™±Ž{­6ªkÜñÖ¤ §WoRàµïÒ tׂ€Eö«J8T0Ê=ï–Ú¶›Ž{„rƒ.¦iYHšÓÎ2\¤ÛÀ¹µÕæñI¿:d ï×YBeE¯7ÅXò(·K¾ŠÓ-|ºLÉ™´ bµª&:C-}^¡6•*9!ïFf÷›ÚÉ\öŒÃ ® MžìpŠyjÖà"”†Ä˜ e—{}Xÿ.öî Ÿ7öOJ´âqs1€ûÀôãæz—pzPՈkOo0Å¿yìûó%ê†ÆC]{4Œ8=&2*•$3£sHgI„ñ"€Ïr}dL¦e©/Zû‡I5“˜»Óe_ŠÕ02Ì¥¾(°ïz!ô& 7º€H©·hD7'štm`&'^Ë;f‡QtC¶6~ ¸15El «/3I4ñ”ÃÞôx€×j•˜ô©!»Sî2q‚Íðö6üCîñL±¬( vêPïVdf-/Û.GŒ6‘8Ÿ‚ጠ£d0£Å'ºmÚ ˆMfýGZ¶A˜˜,ã¼1죚Îëöº4ÛŽŸêBÀ‚Ùÿ¼rp€ø0VŸ|Ç=¯6nœÔiNNúžM–Ÿ"ÜH©˜+٘7f1cÒ6¥ø.&Ó¶¨H]nŒˆˆtd4žDѪ}51À"sŒ.i6§ÿ±†Ù ìHæqŸB”•‘ B³Ö Bh}Ê&Ä¡à窉©ý]‡ŸþÏt¾ZAT·Y*ª[¥”U-‡“U,uÅRi_ŽÕòB«ZK†ŸÈ7ޔßœßt¿Cm´æñô=ÆÇãՙòÛÅECña渰ñ_ý›Sþó›œtºKjƒú¾D7r,ŽìÀÕj56œ7yÈÆšÚ¼‡Õñ³q­¸‹ÕYnù\÷š&²Ÿ¿ƒßÿ2ªMju¾þüÿó÷Yæ ÁîÛåàÿP.¼ÌLK¯øØ˜–æ¦ÏRo¿ÛÔ×^n¦ºÿ•„ÿæá'£_û.y›,VfÓt‘“cÙ|˜Ï…X h>H X…ðRÖ3*&Û4ú_²äÄ I¢bkÔ¾Ã4qŽjï5l9U,R9W +¶!Ô ­7°Ø…‘y ‰©ïY†úŒô˜‡C´l G¶/VåÉÐ.æÃ_À°Ãl3é9@'ùºY âé^Ü1XV ݦ# ´)Uƒiu¥¡ðV–%‘‘0‘Ü$ÿúu‘O73†ÜÚ£&^u´ÝcÖ-¦s'=Ž¥Ì®»:?Òy-ÇFO"¥ì5b‡Ú«‰2ElEFü£‰UUëÏÚÈA4 VÂÐô˧ѩÑ26=…1){'Õ2¨X¦É´Ž;uVépC[›P*õ­¡ä5ܵ¡“:ü6µ…#è—[0{ï›QŒû-xÜÿ‹²‡Cm596MÐx!ÁªiÄÒp-´ô½Á–Þ¼8+œ:ähe“c_ÂC×ڀ†ÑQËø|´q[d̆WãÚÃ+òêþ8e}Ÿ¾¢?±Q ð†ÁXqmò)û¶s¹ ¾CٝÉmò è­¾Cü'~ÆÞÑ«ÿso|ús¿¹·È|¸0=‚åL¹ª&»tò£ü¸¬e×þ¶Þw§‰Åï›ñxÿƒâµq7ÿçïÝ@ +ÿÆm˜jN—ÓõóŸ£1áê>Þ&›ºö2ÇT\25¶¾=U–Š?“Áÿö²0F ‹¢/ACÿ÷»¾ ¹I|—ùŸ¹|—Çÿzù/þMÕOó ÃßR»™Â’7=/'‚>Ö  ·S qòµøq!Ǥ_Ìbh˜d ¡¾ÿww}6˜a‡0À´•^©-Å»ˆÁiÙéÆö4ÔUzãÌomeù1,¶J4ĊՖÆ{†:K1Úð6hSEª°^-&èFœå0´å´ °Ê úJ­êñi!‹Äýš§p­Ùq6’¾3Ö¼æÉ¤æÀµ»Æó±Ñíé*½eèOBw·¤s!¹æQça#e‹I#ðI_t¬¹kk._üÍ)smÍÌÚì@|iíO†MÒ ç NföÒxŠ(UP6âµ#à3fU€^Oçì*¡›*Ê 9 ™ž-$åm7Ðsxåµ?Aé­’r2·+@.‹aº!ܯ›îzꅨ` +€álùõÈÝYßb~TÛ@ڊæw?`'ZrÙÎ ³c¤\ðY%\¬dí:4Þ0²àyø,§èʜâ"j੪fÖ¦á)OïâÜXðe€™’îAÇn*u½rå©ÿ “¨%aáªQW¥îi&×j,WgÿIw ï ÷£uš²ò¯ º¡é ™@sGì?´›ö}a¢-P^ŽOÙìÍWf{Ýõ÷4" § ¡ßñA$y}Dn¯ä(ˆ§V˜0. ƒî-æïŒ–ãp•ã›¶¼y¯TbëšMŠ·ï¢žù²áÏ}fÇ-.úÎ7³€¹—z«h}A¡Á/$gƒjÂT·ÞÝø-7`&ÊÁiK‡Ó;‡­}&νŽ’¶“…²ê)€ˆâd + +’Cc`²’÷²Óö£„ÀÀô1\KuD°“0ôÂñ̍Ûûv·m€#@e֗ cI{Ø£v¢—ѹÿÄ7ۓwAæ ¸¡èÍ÷ùÍ÷s7sþ–5FÉ¥öø±“œ^è¼cÿâp¼Õ¦ÁAƒ§ÁA´ü)°H}œG'Ž“Zf“‹á÷ü<‚þ†‰Þ‚‡§yïwlzÉØÖÕ+•YhyP·}҃=rJ?ë?œ-¾Ú]Ì|wÍ oÑÿêßÑשùamü‘,;c}òø¯ô¿4-¿ˆ4-®Û䅷ĵƒ¹ƒÝ*UÁ„蜂µ^stª¥í•^ÕÁ­nS¯øÉw&J‡®E^æ5ͅÁ¼-X*Bח0i€ÀbWÿ æ5Ô ~m„ŠT´cõMuîPbZj HÌ£TŸŽÆöAæ¦B¶|J¡¬*y—¾:|•ƒ‡Vš}&pÒÆ,k)e†];•lea$¯¶‰V†fÍO\O²/Xë d\ Ÿ&éåõ„Å–c XŸwd@ Šv §Ê¨¨½b—ŠËŸÂ{´%#¿Ðž¢F®f(To ÖÕÀoXé?ÝÎúÅ;1ú¥;1þwÃُˆÛþE*—…WÈb©Ì‹ùdÂɆHþ´¿ƒôZ~ç¹î»®ï»û?g¼ï;Þ÷¸GôV”qÿ†Ý»ÇmÿÐ0VÿI}wè¼ –Ïìþ^ƒMS¹Ûú—}äÕ{‘­‘Þ·e‚åm¿ñ·þœŸ­ÇëňüÃí¡Ã”í¾f.͇ƒüaopFǏ nŹ7çs!oqñ<̇êV|¬ ïXf÷¬æxQôfÜ/F·™áGøF‡Gü.59V¬›¶wV­SzµRàÁU«QQííél×Ú¶îS %Xuƒ‘ãqrÇF´<#ŠC“è74 K¤Ö#ٚ[ßfœ¾µ¬\9WL–ù]1m²™›…r’!à»%vˆKލÙUrÛç®ß8ã¸/ +“NªÖ¡Ù•s®3SÊÃü-Eà:]øjmkûªmkð91úr[î8åQÝWŽ^”Ýìzs}÷æûöÒÿ[ªêÁ¥bO°Â@eõy5}ü½þ“SawýR:Ò¢Hé¶Vé?ŽÒõL¿>1k¬M§üw‡>“1ÒîòOþ7ëîôwÜ侎5¶6üªÉ·*Gv²ãÒ-¿û«~Òð§uï÷zsáê„­ýO7ü½9ðm€µÊ>ñò¥ãðã#hMÏ©iñ²ä}a'w$¾ù{M ·mÍWs\Æm†@Ûïû}9ðd—¸6Oͤ?N+méϤj–ÃÆÏ½—¤| +2ôÍR;¼ñcQoÇø>÷mèÝY ¼É®SÓ‰è^eû+hsçÎbó“ ÁÂ÷¼óìºÕOyҘz8àK †˜yA+÷a«3bJ–!/11ОǺÔ(•Îv÷¤ý lÓKoF-H,I8éèÅøL\ß!†&¶1Þ4博}j›u©ôÈ{ñµÈ~dvhN3Ø*¼G8É M÷Ú»Ášˆ5¶P„œ ‡î æ#õÝ$¸ê¼šÈ:TX°éQ^"«ß2Õ¶\lnGB¬³ŠîÖóýxÍ|˜éÜ&2ì5Üq‘mö­Ê‡ÃnEh¢ûÀQ+v£8l +á´¶ÀªËÆr¾t`£'QȗÏë¹×ÆèFìO•ØÎ7÷ÚrñŽÃƋ +CcmrË?ŸnÏgæË‘_­|ô£‡Ž(=‘Ó°6 ϱŸ>®†k¥¾/{$æeâõïcÛRüd0&§U×nJV²;>æü-îѽ/¾¿( ¹A´o7î·bæp(:ô3Ö*¦¬œî%ùX‘µóæøð1É Ú2*Av–“í fï”k8Ërû‘õ`?~ì<«+ùOǂGp¯eHæiø%Á¿T(A7½ú.O–ô x) ¢ÑV՞ÿnB ¢6‘ÿi»5ÒFØ&.®¿úɦN5Ëørb½'ⳟLJn I¤`zX‰Ù`bѾ–¼Âtoœc¤]c,2¨2´®ƒË»¸,=y`Këû’dÄEJFç­Î +«?ö‘¢©Õ•IÎqY cºŽs”ìL»Â]¶^›éBiTY„Â41—ì… ø½ H¼3Z:ŀšfjÎIë¦/eÔø1ÕÈé%ƒì;>•Žâ¢N|ýlíÔ%ûû›Õc{Jâ[¼‘§Â…$ ²DlÇ:p°,ûì V¢NÇnH×ZÚõ\D¹Î¶(7ÙB0>=Eòòä& @BG÷Лzn6‹n1w"&ô|TD­7èyJxT¶¦®JŒæþ`‘ Zm{É&ð*oŠñ +ÑÑêÎ8Uˆ*6ÕčSi݅RÆ©[È×Dž»£’£9½-—uÀsNXNlš$S”ÞûˆfZ³¾Ë§Fíöf¬NCQF̬œkïˆf¹æ!v2@Lhhg4@6lÂag¨µ]øbXø°pøûÈÔ´f6è`.%Ù_[ÞݔQtúäÜF2ãÚÅmŽF_S¡ ¤@݄Õ;'®wv2Î,G;µŒÝÐZZ·ÛBÜÃZfJ³£‡víÈC‡ +‘” L×gj! + ë]í +…UÇÖ¥ +rƒ7Öáò 륔À èg:”kh‹”›ÊR,ôP. à±ÑðïU³u¬\ÙXÆ+xµµ-r»ƀêp!%Ysíu}Œ‹­BxÍÔ©¨Wž‡·fP“¨=Ôo=¸V†nº%‰XkN>)øÙ")îà^Óø2"S+"o†g,eh +Ñ5–ƒo +Ïü‹_ GQBé»§AhÚ ,s\ƘOÔ°(Ñb)ë¼ ¨r6@dÒH_Y¥NÏU¯y6¶)®(ú. nÖ˞ßÛkXñsW ^Ü 7ß6›F’mÀ­›Œ}-nQ7>Ý0L8³6ì¯|d|šŒh)¸ÞÞ¼Mí†5Õb®¯ªÈ㝄/f“ÌxŸc9S߯~ùf0ˆK4 œIü™Qƒ![Âºõ+݊íÀgUt0Àihï/ýKt׏£†’#ßGIHœçÀJ±¥øù>:Ý:‰îjjó`³š/÷E4¡u½(8< ·ÃP{ »©®É{Î|Ë{Ûݵô7²¦e›E®‚ö°K”+ò²jð­PÙ´A,Oö â­Ò¥Þ$ªIFÃÆø@U?Ě!ɜW~ò7S1'4Cú&%Wò¥ÅŽ |Oä÷d‚ÓðÒƒiµÆ¡>e #‰YÉɦÆWðèoL}^‹ÌÌI/JQ>+:Ævþð÷™(’ô}éøÆ—>K!* W¯ÁK?¾†NF„¡ð±·û_ÊM|¶‹.ãZú6».0&Îò2 +Ö%ÁNG¯bBڍœ¤Mñ@·SðøBÃä¾ÄÄ·ë¦*ëƒo’‹x›f<yøÁîn÷Ãéd?òõ m·ÏytK€]ãà6ã—àiÐ+°‘Có¶ ‘V²Eöi[|À>¾–Z5ö€7^q턃žŸ®~álØ6SS¸_X5AÛ¦5 ä5ÆÉŽÝPt„®·úx%^ÄÔò{'ƒaÄ÷¶×X–Éävk °à3£ÓY> +ö¯–Éû¸kŒd,Åz:ú¤öH%}™¡½Œ.çN ãâ#‹,Í?Q|É!½Q;êä‰1çv C€J™q ½Bƒyöjf£É ^…%—$žà# Kªä,÷áÉtã!!@K\…Ę‚E˜°¨üaLÄ­ì½PR~€bWšt+XÓs`Ôpà!‹{Eiåþá¦{õrýùT`@G*4ß6øÕ>êæÖ;VÔ¾ÁÈi8÷L€{õ!â¥Rk‚¢ŒYc~•H ;]/­½F§K®ÿ$ šù¢‡çFYv‹,B`F“É©z°%ˆ“ÌB~«\X‘j×;’­— ¡¼)Ô\”`Q0v\ümgfc¢£ÙŒ0¶8©­‡kx…r4°[Bj¯Ž*ã*¨xyUà©P¥ovq-ì²VF<,W wĬŒdK"‰+ << âÔ®C‡ï¥ƒ‰d_R²(!o~ö'gûìϳ$É$‡Ù! D µ$Đ$>&@û0#PQRùl¢Ò´¡0AE°r 2|e[WÚµ­BÓÖ¡UÑJø"µY€ATb2Ô´ArTZ?ÿ¿¿¿ÿþû$ŒDOZ­|ßo·ÜÝß{—žæîõ÷Þç7yÏw7¡î{{~æô7ýéïk{[ø¿€;ÔßÀÛOu¶Ûn²Fä20‰H==jšjg¶«¾ Ž1„Y³™;|‹¯è5Ô·ã|ö;¨)T áh@n~«N$˜Ü/LpŒSN¸~%ÞîqX«5œ +L°pÜr¿Êi‰¸½/ã“n8¶ƒ÷Ñ«”¥¤z¬]V¡?úJ_ƒEUküÅ)¤À‡gš%ì¬ +k¼)f3çº}¾c5¤­„ŠÏӒoš†ÊGé¯  ³7þײL¸ôÆD£ ¼ÿÎôÂâzOÖÄ´ÓxÛ&lܵÕ8ÚMa¯ÜeœÍñ©Í}-ËÂu¥…žþ†\"Èþ,©óõ.>DßÉ*̶I¥·½¯…å·Œ£Wo•.Ùð»(ã×¥Q{ØÒ%šš?²I/»*sÿ¢Ù +SUüÏ•ÝáZ͖Jhʄ·½Ê²\^S›é#ô‡ÛSÊôñxì[¶GÚâ÷BÎŒ[ÔUͽÀL¡›¬)O„ÎðÅËÖã!3– öZš +Ùvmº“[uh¶5žb69ê›|κƈ¹AÓñd~ÁÓñn-Ri~ŠgÞc$H[!4±r¡â™ù¹Ip†å”rÈðÆå–c]tôGC"(ß<%Œ6®Nt€úÀß’jœôޖ.¹ß¤á¤GËÙ@dL˜«9"nûª¬Æ¹ÂÐ=·¹/ ŸAFFÓ K×êFÜd)޼*D +ÜʱîŒíù/n&\P-V‘:‚½¸É‰Æ¡À˜)”lƒ/=h»[Œè°$°•XØ­ÆJônÄ´7øùkGw9-À>F~Ô+HÙ챑M˜K%þLq»¦ÚõŒð²ßª» Çi/TÙf—³h#¢ú‡aŸ®acëak|”ÒºÒ°wžÀƒ‡CßjâöV9ž8@ºc€Ê>ÍPpLܨRšé#üV̟Ò_¶iôP\†h=Ô%nB{Iy q«qV ü°W¯UG{pûÕ§QåÞœß¶ˆÕVþ&âÔ¾.6ýú¥#QŸ$¾º@8îø;âb¼þÕ³wSҖ=Ÿ†‹™°W¹b|(`îªØ1Pe¬AU£kGí– ÅßU0+z–T8‡|+g *öz”ö0ØG-ÜðÒt DñœfAœfðÎ3wá‡ÙšžMŒ$ÜÓ1ÅÈ©æ8Rx¥7·AxðdYRòˆà0D(/–f½3xZ˜Ü¥-‡ê§„Y! +Uï]äñÚÕÒ{ÚÃ{ĕík{Ùù¥Éú̑F•°ú@HädØáfß9v5Á®ˆÍÏÌMÏåc­&ÒI 5m¸¡ٝÃ-î¥#}â$#}ƒ\ñí;æßúv×R7Ûé"oÔ<‡üäo´¤˜‘©û Û#}í¤XÂhä?l÷ß³„ÈH~Ùïþ[,é7¾GûÒo|î–:ÿùSÀƒXÿÞ¦=øÿÎÎ$~•©å޾ÝÇø7ÛÏà–žß8äKO4›%+þÊԟþP…øcë^ä„/‡¦eÔùDâÝOüQ5ðÉxs¶ ?ðÂÂiËQ Vt_ !~€ûtßËeœ1ë<ÔDHj¬zЛíçÉ·¯|àø0‚s*‰¿Á—Ô\ }.•4üÿ»5ÀÂm«kHÂn»'¨Íjœ•kÊåCÄa5 ]Êñ¹ªr­è3RæüM±Gä®j”ÀXÖâ‚Þ”,n_Ÿ÷aDkM[ÿ-ỷW‡²mæ43äá!,©Ì ;0Œï¤1ïX]°Êå¿@ï:­<žˆÌˆØ|Å[¹¼utòU5¯ä*3ó|óGí@ª/Lb(ñ^gÑÃbZÊ·ñ[Õ-Á ¬Áç|dï™Á¬:ô¾î|ꩅ5×dÅ×OëXÅ×Kë÷غØ$ÂÔfo£ˆvÃV‚P í‰zHìÆùõgã+IiáN¾Ua~t=FUo‹Ÿ$ԞDW9d`¨À1Ìãi–4% SÀ.­Xºö±´Ôº^ò­×8ÄùatÞ¿»uTg„­#öՆyÖðªkiÀ\v%éyê5·.hk]Puø4°…ùâ?‹ <ðfµaRÐÓ¯¶]ªìj‡9„btó_îX m;€-¡rlw€²SYŠÕÞL4£í¾–akYÒñ«y¢3È^zx[‰×p ð>·1n1,„on£VŽ¢e»1Ö$Pz3qš +èԇͪÎFÉwvÓ":˜¶½Œ[lÒØ8ôUɸó 厙7žÕ=´Ø5H!;0›¯tä“0ø''vÎ ÜJV€ÆÙ9ªê<êL×*?Öb£F?òW;>ڊƒóÙH¼GbÞAÕxMb¸ØñаÛ4J­ü'<“õŽøD¸ÇMr›‡1?8³o^†y@vq¨x!:ÅÕû}CÅþXCÙw¼+ØC\p&‘NQp®Cëe1ЛsF¾Ì„è·Cr¹v,y#6'ž„Ø…ÉÖìÖ9‡xu¯ä{‡þAÎ`a½ëˆ DÔ¡†œõ¿:4(˜û&z‹"\pô;å*q%¿7k~4XãD(‚è5 +©XmNS³ˆÜ—6=‘Àq°gÒ[Ýq:Ø#W_)©üÂqG—±&FY“©êš›U§}”²‹Pñ:ِ°ÔK'¶µ»¼×óв4V^¼l©è"•)¦Šš›ÀÖppi%…'ƒxžÐW'äì'bôw+8P®ïƒ³ùǰ¤ûÃlÃ0ˆ§ ÐT¥“ÖÂÉ[cÙ$i²s N‡F‡B ²&ÑhM¥I€ |Ã-øm<®[J†}ë¨:®rKŒFoh8ž‹¯}Cê)ÙR ´ðÛ2GA§€(ŒP4‹"‘mۜôd†Ó +j(í@F¶_n ´ëclêÐW˜Ž_¡&áUùÀá_›¯%öÔ⠏ÍõB„ '¸6á5ÁZjÏ»G³¾Q¶ڊ»Ô%ã¶vBݽȔ†  å5Ç- KüÇ; èUCÞ2š·|/V÷…ƒíýÍꡀ­ ¾b©Õv–fÀy¦èߙÇrZÑÁó™®®²óx¥Àô¾}¦éâþq®¨Ùîà¢Ré:åIärõ8¯™:yÓÁ‡])N‘³á7 +ÂìEv€‘z‹÷Ð{C5<ø%1úð)“»@-*+Øc—m"²~‹È-§çcRrH·¨Ë(}ÝñðOdÜ +]ÞÎìèêÛ]-Ž÷¢-ŽÏ³ð͏“ˆñ3mºÉh‰ºVˆÚښ0VŽù¨ð΁!pÞ5g ê2q2 r¾> š÷w„´+ÝP!E5:×¢ ´“Ö¾_ZnNT´“­{;ç,¿ê|Ò¯77Ó>_xöwrª÷‡ÉûG$ôá¹¥õ»H—ón«Ô7{nfª<7b Æº“\gj±¼`ßfÓ{Èð¾sÈæ•] Wþ +4ÌÚ~¶ µ{M‹FuP17cÁQ·õ:ú޲6“÷gÖȇ¯ÙSñ€kω¾íØ-´Í°~ÍÁÈ~š— +ӃÂ0n +ƒ-`FöՎçÌà,v›£Y£„#u˜ÎbƒŠK-õ3Œ·òôLÀˆËäøÀÌÃûtuÄ>› Ý{Æ´ç¡`¹Ðý=!Ë?`ÏìÜ _ʇ/$lìì5jÛJ‹@:I™Ìá—]CÞ«Ua¢ÓXZÛL¿¶Gq ¢ëÐÆ‡}óp +N)䕈È^GbÔAìJø€Ê- fŽ`g‹µûô.Mˆ­!V^§«û +Â¥nø(4 ¤NÐ[LªòvØ’cý¸d5P¡-ÞfsQP8M§Þƒzj„®Às0EÿV.IÊÐ+©GTÿ(µïN¼zÀ×;-Gìöq“xQž¯³7yꈨðŠý¼‡½=bõ¸òžÂ˜žßE‹ŒSWS-g‡ò…KJt֒±ua †Y—ˆç5Uê~×+È.5r f_Á…V/+W±«ÖÔn|›’6 +ÕÖ»O[ci7¤¤N…m£ut@ðîö)Ôl\Uù5ùa_;Oæö›´¿EÀU Wo! ¶Ïž_#ZàÞkU¡ÄLkÂ>è(tÙCw5ÍôL‡] >QÊàþ†-?:±)XÐâ¶Í&J;~-wºÛÜ3Gî@=V/†ýØÜ?sA}‡çáÁ[caø Æ6¯!;æÒµ×‚æƒâxn¨õL†èRóÐE=ç/sðÚË~ºÌ¦€l¼¬ìE*{æ§°áˆàˆ¦„&¿Exuñä¯-•áì#ȋéºá×Gà`Î/å’ö+F©ÆÀ›¨yÖMä=úfì_‡6‡¶ÇBÁjÁƒº÷rÀƒ ¡ú©Š÷ü͈ouÒ½ÞV°G7xä<øÅp©zðñrŋÐ:âDnƒ;kM3fX@ ,|&} ìüSsmä;DÁy/†ð!î›ρ±{:*`—(ù;°›5ßÜý¥ø¦ìïЌٯ° k~Ò,Xqõz7!ŀÕú¡bċ +ò¨mE–n`“‰-Å"·¦°kVbnBub¹™Æ¼¨´zqWIGZxŸ¾³4•ƒÁ²ñÏØ*v‚aÄj*Q¡ Á˜Hˆ/#_6&èOúi}œ l+TÚEä]kÚ°ž¯ÈsŸt¥¼ÂïéՒèÎòâubÂÁ­ðUÛî:ÄBZæ³Ð-hÊ_Þ/@åêúJ¡ùò¶¿|X4ËäížEØ=¡¶Íx•±™Néü’ºÊ‡‘uãh‚Ä‘õ. ˜ÈÑUóõÖL7ö~0Ø^-ña±³¨"=®<å;-z>oI`ó‘.'û†üք÷ÀIün[ø¹›Üoèݨ¥Æ‚Ù}Ÿq˜6#È{æ¦ÛѺ¤)©®xžÁì)=îÈÑcÙÑåH(q‰·kBl‘;Ž…/BÚ> ãá¡Á-žÐþŒÖ펁±uϓó·ëňXÅÁL'¼Ù·‡°Vò>©l¿×ª[.F©,˜ø£Mž?Ê~UŠt>XۃE8?ã™Ülù»|à¾Ü1Òè<Ê¿4Tã]¡»_Ör}ú–Ö|XºËÑû·éSúH‡Ëtšë£5Vzâ ° 碈 ]DLJ~¡„74ŽØP0řósQà P®3ôށ®˜’š)ĵ”E1î +†Ù3[‹nqÂ:9zí)üu¬xåfËïvÚi‰Êr-óµÙ wÚsxÐFBiúX9$ Ä¡QÒ¡~Xn~aã‘Ø ¿¼ ¥¾¬˜fÂÛ˾²7Ä{‹ó ùÒõˆmÕ¾~ü@S!ì*0§’\µôë ž•™ÎÓÿ~F¿”ëN 3g6˜ro¢õö z!®E©£Óù”܎óº ÝÞP=?ÙT˜¿¨l[û¹s颽žh ä©7FA¶_^t{I*ȯŒ»Þ +·`gjáíMŠË3‘%Ím.Æ/x‚ öD=¥ê +·¦-/°U¾Ú«ºoÚ^ØbgØ8œÂy€=_œ½±¨jøÀ®l|tž€¶¤p¼#û–'É]+^žOI„ vn7aÄmL®h¶æUMd ñ ‘/)y¸ú;ѐ§·=ùDÚç1ÂüL'@®ÃýÍ6.Û5éA»ïIWÁSX±¶el{ŠëGAÇÇ1i#"Å¥Ú=À£b²ÌÛf@ÄÂ#áWˆ8ûר8ûÓ—Ø8ûèp܇0MÀHp܆ÿ`ãdNÅüÎFÓ ÍZF“8=]~4ÆA ¯7ÀC8<ÄÛ´lŽÍ õõtÆÊDÊ,‡J½FÍU«â¹µ!—.R†aUs­X–¤þŽÁM©ôÚ®üp¥|r_Ótk;ƒôÂGû¡d=eH(·p@ªúñóyT!£;ëöÅãûÇ,Ëä ý1OâÍB"7Xù6¸á¿5qåÇÀ€ƒ +ÓÍrîP虿t  Ìé1xç°©¯ö·Öw‚ 6üÖCy}&®ƒwÀŽAÚiÊUN hÌóM)ك¶t˜]û0ÌÛÑÌmIØ«‡’ +ëjSÏ Öÿ!b«­0D¯€<òawâÚ r)òúj•;"‹}S“ÉHÑ&¥|`d¬‰nàr™ý$î°œŽRcÒeuétǤ:Êߒ2b‚ÔnJTÐϏՔpexi8R¤þI¬\©S{+…*e› `yJ)•; M|4SJh­…¼ vLcÀì˜ÇÎëTÐïCì{‡uÌ)Rx¸5õA¢ÿ MKžš×;„õj,.Ä) njp®]ۍ۟hî…Å;•Sò€¥PùY®§t™E:†,&Ĩòj¾5™êpgöµ,²´2¯ùÁÌ +Ъؖa£ùÕjü ú‰ä¾Ó*¹°q¼ˆõW”¦¤Ãå%í)\…íSPØ¿¾V$UÇqÔ»ùSd +Jžù×Lï´°Ì§¿‚òæÙ ÷ 8<"õÛ|ñ)~û +®e*8íHôЧ½‹QWºîÉ1aì3LàÌÓãíí´©2Aü^¤¬GŸ>â]ìÞõ"­eâdœ]ÎV‘ä’e›PÔì¾ÑtÛɝ9âžëV´ýSÙË6-yÅWÖìì՜ÖÕ;œÜ±u¡6»b×Þ1uÛÝ1kAý,]q&Àý6-h„/W,¹Ñ«¿|#7q¢8ƒDo÷#Êü#ËÜh-õ*͛袿ç( ‡¿ž7çxþr£?9f“û±¿[§ãàu3‘µ¾×v“ûÁ]w#9ÕÅ{¹È‚MÈM©få|<¶Ó›£n|¦¬ÙÝ{ÅxS—:÷7c +\öݎřüºÃH‰Æ›Œ$YÁ€0£à8ÃqøCi§4îXÚ&ãp-û5÷°Ë¼_‚lè9‹4¾Ú&½›Óà2ãÔ<,ÖðÆìü¯Ь¯v÷sûñ DVŒM¼ê/mú˼hÆ3Þy +QÍhM,S \=»€âä}ÀK +‚£Å «5@ŒZAÔópOÿe±ÄG¯½Aù¢!¢n “;c€²¤c`¥^eq”î\²ÐLÛøÁˆ~HØgnˆäð“)%ú +Øz¸ƒ@áÇÙ^¼¤‰ã™€®’¤Gµ5^ê÷f† Wºš¢I‹9· ÙÏ&Ìt;³8.ý 8ʼnyý‹;g®_bß§÷U L÷s²Eí¾Èc·¸úŸãÉÍw §$ó?¡¾Ãè &`cI&ó§ &y™TP».ÅéQvâ +‰Dw‡aÏ])âtQ'ܨ0r,°Ÿ’jøñ“R,]ÑzâÈ=„ë¹.¢J| +”ó„Á0óÈu+º­=Q6Ùoé.üÔgæú¶EÌM{®¨Iæº$Àð=f&ú·÷pýuOäíð³ +Ÿ¶¦Ø)kMðÏ Ô¾#AúüåÜ fÉä-gC·Õ¨1Ùkí4PaߪH5ï-]Qܳ˜ éÐ_‚ÏOβ5Ÿ‚Åu:¦Â¥7$ùp ûh´Ìú ¤Å¦wj‹B@ QOg gÙF³ƒCòÓ'Í×$Ïò+Ï ¡ØvÎè5UÚ$b@ýQ®ó.êµRc: t 6(02¦Dáy´>âë[¡Ú‹†˜`]˜q¾ÍkÔì<†z e©p9‹’  +*§F“S¤&€ ! AçãÏÂÉ]’¥*/I‡ú®ÿ¥€M4 € õ·–pùz„GÑè¡>öÔT›ÌŬ›>ÿRP½÷!áÇNQ9P·»Ÿþ"ي﹂b302\ +*,ÇۓgÁ(RKiÖÍàãbŠ:âÑûCÃÙA&TضåjŒ~p܁¸‹jUã¸)×|sÀ%¸å{ë4n¨VÒˆ‡™„®òˆ’qÐgÊ@¸…̐QO.µ½}ãý96eI ‘þD—ì•&OŒ;:՟“f‘Gg¤¸í.%¾F*5á:/操ëÊ4.{þ~0 DõçÚ«Y3z™³?[šŒ{ŐI6…ãt +|ÖCäYpknj8‡êAè­¡·¨'þŠÌ)î2ŠÉ wÞ[åGŸJ,Æ@¯,…NÙ‘g¤G¥˜ŸX(Ɛi!ÍqØižÜ?ioK=҈åvJŸ%ïh£Sì’(ÔßøÛ$Nçd‚Þá³ÃCãäne]3Î¥ëvH6t¨“—Â>7Ó1woiøÿ®>7ô½èøßÞ%Z׳ÿ¤|o"Ì{Âù#ãsŒá=oÉIœ'!þõT÷çÈr#}ñ7µ3Ã*¥g1!ǎuý¹óŽuý ˆç^‰/تžìœ1ëçÓ÷£{7º9שqûãgfþ»ïfþ»Þ£‹ãÜ~õ_èÇÿBŽ/ÿ¢§Îź6÷A‹|øð…!ËOÓûÁˆE\,„NŒi›€!å8î(ªíí²#ހÍF¾íƒæx¥GE¼•ÿ™W)ÂW‹LÝ.g‰hÛD‚Î`Môn‚†åsO¯\«HµÊµm\ªcG̾aOã=Lw„¨Á…Ì|Ì|Ž~;ÿª²Îbê=ÿÿZ3Ïuý“Iy[–ɱñãÝóÃï·t·ÏÀ«!Áœý‘æðª#rÑÉKu7t¥°ÒÉK{BÚƒHç¹*±‘w»¥|êe’¾deR¾aœ€×ó(븍~»Ò\¯±îׇ4-þLvÌFÁx#ü4ÊWýÈÔcLï ^23)^0ה¯ %’`hۈԋ咼´½ûãR/ßR7ÿ|þjQ)ª˜”×SzJk#Ê%4mši.‘_PÙFùT®æ×;¾©K£kà«PÿØÜ ÖÙ,»¥²÷ñG¾Ð‰ø§^Íú3¯jù¿æâ>/×çoÊG¦Ò ×Ú-C©§.\¶;ƒã[î\¹J)¿îb›öoû—1Ràþäëb~i<£Z!üÐ%PÖͦ8+æŒ4IXµíZeóŒ †á¶8*›reùÆæˆ= µw2×94¿&Èí©ƒ a/ùSþôs÷?¼¤ÿ&>ß»žÁé4J<î2Þ6ãSÕtô¿*­wº f÷Qóû©¿~ê>ÃÃIÞê6žâºW•v9‹Õ7âÉ¹Ñøüæ“|ïíiÿëè3ݝÒÄ_þ +¶ßøášQáw<ø:ŽäXðKàþ*ÏÅýt:͈󽻧ar¿zÿëÉCȾíËpxSÏð:Ãéޑ.& Iɏ7ôø?ôËfBlº›JÝM)µÓe9Ìîi^Ußßûvrýܟ†›[©Î6·Tz}6·Tz7=çÿœ¤gšI+>a€®_ýMÁSï?ɕ¿àÜÏñ íûŒÑiýžkäeoý(Pa÷å6 é_ü1í|åð™fPßëkí™`÷NJúŽãá ¿à’2ÝÑ=ü·uð²·ÿ>}•Ô÷òÇ¿Øe2Ú}xýÍF‚Z^+ñIƒcM4PQv$¾?»ÞYh—½r*Q|¯l :Ê\¡#erü†Þ‰€ïë èI‰nj©¬Ñ~‘õs÷“Ñ~Ôxy•ñ£Ž†0ç`ƒ§€„Ra€ÈPôÝ¢‰Ó¨ri óÃñ†ŸyŽ{,ðí=в’š»'ÝFÅì@n‹Ð“ݹ½xi¨iySOw¡½M–Ù“²³änVXœå aŠ/q¨%¯jÙ)ÝhX•õÐt_€”øM8Ш:ÀTÜÁÁìïvôˆ´—xöªúBÅ[ßs¥+paÉÝq˜Ÿÿ”Eè`ØeMæiób¹¤«Û¼_‚ÆÜ#Qø»þoABóI6þl(9šËû*Õù€ èl³j5’4÷ešá«ˆó§IWùÁ¸àeg«$‰'ÒZ³Â(-|˜À‰4[òµ»=ƒÞìFúìڏ¢û£ïF¨îBîj ðUϖohp’{µ8w{¡{UÞö‚ÄŽ- ÔYè= œhš®ô:‰²'ç%Fª£W‹”XÃÏñ]¢ s]¢L-’®Ñ¨¶ú»DŽ1q#X~Þ4Ó0+‹çŸœE,¢_Îw¦—‰Ú•;'‰£r_°r‹J¢Ü…I¸#%S§–x;pG÷bCŽÁ¾N'Vj…·Qà‹¦‚°á^Mr‡hØ +·H/~çí2¸ •B׀à{bB6µ ^Z¸‚tÐVqÓf6Yyâˆæ<Úw8Ê2>ŸÍÛù¾E 7ï‡&ƒ\ŒôSï´ýˆ.]˜(ñÆ#å0EÒd$áÄl4BdIöùAº —ó5]”ÖdäâmäF¨lrâ ɳêeeؤ9tAm"¶‹"£ERÁ2³Y4Y²ÌjÕ¼ƒûަs°¹˜OÐA”)鄐ùêK—Y]—cFCOÙÓȘiÇ3‹ÿêÅd˶NÂ>þ%×˖¡‚ðíoµ§AÜ9…Üp£1È«æß ¤r¨ð´Xžƒæº”Ì‚mÒ¡R=Çf[òûaè5Ÿå;®ý§„0\{10œm:ݺýÁs¸ Za·Hyïš_s ×oyóÂ`)í» ‘Áû»ù£³'ˆ¹Ò(õúI¢»…úÞ:êG“»þ°¯Hh€ø!jg{yfÑ.žêµX*+ïï1£òµ<#±õS + “Õ^”Ön¿i£Ä͒¿½„ÒÈÑüÀ±þUýÛAŸ›ÁRѼš¦QرJ¡¿êÍ \O§¼Ôgo Óʔú†Éü}`UŠ #äSºTSp¶füÈJ¼¼QmÑy\ÙDþĶ>Ö] aʤ¿ÇõK°Ôc19²Æ¶Ù¡ó¦ #…)àæn%Ý/¯˜¢¾@¹¾we|À•ó's|úå|—+ææùüE|‹Ø ó»ú±—¥ÀÈÄ.½Õ´¥“ëd’¶–Th´Zª-P˜úÒ +ÎÒ@줁DEU<ƒ@ZÒA¢¶°v÷#åÕóÅÑ\3}—}Žæ.¹Æ‚ [j–‚Z˜¾T0Ly›.8‹‚%oïïÿÿÝïd .9Ç}ÌÞoÁžù÷îÚÝm¶ëlŽ&¾÷d'4͙À*\ï ’c—$cUk¿{Uódl}¼´šÇ°b|ۉ©ðè™0†`²Qék ýV,‘}yU¬7¬9Oh/úfa6xÍM×o€,'r•F°jӝ¦¨ê£~p€ßâÎlÎÝû䂲§?¤î^h gÖ(´ªƒ—̉Ԭîÿ?§uª)ìÄ;§TA½ÊçkÁ¤+]aÚìÎ׿;UH9Ô')vÅΘí_q +×JvºsÂt¦¥â€DAEf2r¼r˜\å[‘s¸­b!㺗eá"1ŒýÙ^9៖µ¢~˜_d¬L¾A&*"÷Ã'Åû¨Ãt±6áε5öölkäæTbm½Q¿qŠã>©ŒR»rñÆÓ€FßڙîÍUlE¶¥,Æ„½¢Úà~¤õ¼§eoTQk +÷2¾O±Ù¼¼þ9ô.ӄmAÈ 7±Ý_êÓLü[oz¨œ +'f«½pV}ûÐV}Û5š6ƒT„Žy6¡B4ѨËzcŸ*ޞ¼´Wó¼ÝsO6K7qCÃì!Z>¬º°Y‘–q<4µ3øŸÑ`aâMM0Ó½©TÙó(ÒóÄ܊§¿wÃyNG#jÇåš&R£$SXÚ_¾¬fßÊ ¬©ù^áƒ'î×½*ál>¶Ð'‹³õýUo¯Üßò’|Ï^ŸÌMÌlÂyìÒzíÈõ¥øÔá‡Ý=AòÝÅ&öL»#ï>‘ +§Ê“üŒž#R¿%³ï¶¬4«€ÚFm‘FƒžÞ3Ç M<ýɀû&“&˜à÷¨3ÌR4ù€Aه¦×’s×ìzºòëi÷_­ˆëc• ®Á‘íû̑ØZCoì‰!Ž×}C½¸/Œ“\]g®Hâ8Vǎ:àe³s@Šސ(RpVcªyϛ˜-ÚÙ,¸.„Jo¼5úØ‘ýQkChæÃYý+,€’“‚Ñט8±ó pYÏZ™ÐI“¤Ù[,Ò¡F¹G I0GF ÌXM*xƒI«½&ªøÒVÛí"D!}ky2²¤?[œƒ%r£„i1扐1“ÐcÏ7V=ËuV›ƒpWHóYö;–üŸ-’—¢2¾ãé ?a¨06»°Ð”O¥²P +uµÕT)Iù­Î‰íeP«k¿ TˆïÄ»×]o‘YåèFÌõÁË'ÑÿÓ$Îý‡V=b-µÝ³}®ýÂÑúzUÈ¥ EÒ†Ôþ¹ 1éΞÐÖ©/§G˙]é&Q6ÚÁ‡µ+à¯Á}dI;‚8d&rÙEãËñõóÉ\D^(ѯˆÚÝ7¿Õ6tb}ïà›cQ÷´Aw:>Ý :ᄑ\‹…O¼„¶º”ÚœÖè˳Öùºöš„·&£uƒcffiJzýÒ[E£å¨ÂÂMÐcDñk4B‚îØîMìëÎe6P`áܒ4èîEÎé*W߬?!ÁÃÍÆ6ƒ ß)ÁˆfWvbnýe¹X÷0A 6¤†¿ë¥ñ¨ÿXYƯ¼3ùkòЖÇKbóß\)äÇÀQ²2vcˆô^‘5kdSM=¼#5ß|MÒ²r ªcû‹ð›bæ˜[ÇùÞ3¶öBnt%þ2Úü:ŠÞbv¿Ã"SG ‚WƒÉÛ5ö£mþڗÞüͰÚèšÚ×ÀԁüZq\:ÎuÚ$¬¹&?²²º‰Ô}9¥B#^)j +F—EÊܲ½y¿@¦–•Ξ +û­«â\êDŒ‹Ðè„/¿è$‚ó äÀ>»²B›ÅÝí&æH¾Èç”î¡3:Ñ<#rr‹hå¼óNS¼hÑ`b„ïã¡#œ¼ç,›È¿rŸ X#ÆjÚõ©âý•X3©9Ÿl¦ÙNˆÐê0ÑëˈŠ7ÞG¾Å×o¢_Âu“X5ûäµ3䜹~Ž4ì÷Q-wî7âô¦å|_cìa5oKƒ. ÿ¤˜Ó³Á¨ ©•þ #Égé^X5uFMðÙɸB¸ +;ﰕ޳u智¶•Ÿ*³D×ye%øÇñžxAð[×O‘ –wŽEå¬©Ðђ Òˇé\i +‡šéYʯá̦áPT8싃fnˆîŠ=eFDÿsSìœS +f}‚çÝ>wê|Wÿžx3èOÀ"H3çÚEÀXmÜHÍ…TÇøŒ¯ä°ÔåÒRuQpÍÂuqèI©×ík—˜g\D Éç÷×mï+\yûÞV¸ÐÞòµÆø7¨¯é½IÖ/i½Jì@•ú(‰êo(‰ÛÒëÈÀ²À¶§.˜¿0‘Ó”£±6s8¦ÅÖJ”ŠzÝûc¸xì-?)¾Šl3ƒºP  n”@ÜkÞe7Zñuš¢<+›§zC¼*˜#wÂï`vàW8Ðã­_ŸIPã±òΉ<Ô-5GËÁ~"‹‚*žÙÅaë¼<¤Ù7ûDÛ¸M¿°›yÂÐr4U>ȑ[/¹c EnŽ +‹KI–žÃƒ#ܧ#ºNWºM¼êmýÄÛϖg|yžæfNº™iî1iebžËgш^vùK+ àåM¶!̍Œ„"Ëúæ%¯É8(æá¾äöҝ°1µ4ÑïˊmRnñhï©a½:R}´@!ÄÖ? ó5tOÙ +ÿº`’ÃÙ~Ú^*–'ù*¿tˆ£É ¼[šm,vÛa<*óg'S ¥R±æ4ï2üüóL Ø?&¿6 !~JÑÎ~lဪvu“ìyµåyI)¯FUX3¥×Öm¢óÑøØ =`ýn?v5 •8öåf·),Ü¿¥oÿÖ@e……{nD¤·ñ͒³îGÌù~4 o +ÿ´÷°žß;üŠA™Ì£›Þš¢ýĨkâDE¯#z§PתਿYÅQz¾D…˜¬gʤ[ÕQ@²âC[¶• n’8¡6«¢Ýb/µtWš‚Áêj¸±»¡„¢Ç‘·#\èʐjj¸1ºØ1ñ3PcöΦ”ÛPå-æšn˜ƒ¶Ø64‹©ÅUe>Bn¥Ý­&´©¹]N +Ên—S„²›ØÛØ4ÿü +5cÿ*8tþÜ{âdU².Z0t¶ÈÎAÀÕðâÏÁoóÁ{¿wà^”á!pË´sd.Fp›˜€¼ì¤Q=Ûé²°[õ”[ÕºE¦Ÿª„öÞ.P9†/FB® AçFKC¾8mî‡ ~’ó]•’áôô¶è×|ý¸×Œý½ h¦‘‡1¢·¥¢¹š4nN¡FEíÑ´A´>Îý‚9øÕJ m‚öv4![.ehµ_f^šôÏmáÓî¹ZIŸãûôJ1´$hsf‘9³>A£ÚªP¤Mš§JÚf +fø´³²ÿþsFÈFȲG~òV5N[ s`¯k-:sÀëÅ:‡“ÿª\@ˆ2º‚ü|w $$†x½¤åhñÞá¤ã:b­h}£TK¹qú/µ–ÆmD¤ Ò×ÍÛ4ߍ ‡ò’R/"Hü«ó£6ÍÌÓ+ÅA0­×ã Ì_Ôö­IìD“>üq|&$s`„bф§º\›àɍQOnú×äp¢Ù´}YÍÑ8uDŽ>â¦mTö°V†é´l ¨+@¤fGä“Ò·F-ÒÁ¸€ð»ô™wÛ#pM´Eéú²r8PLA;  +¯äâÉ:Óõi(۞ê›Rº”̰šÈ¦àó2× ‘7,Fe¢¢º«~2¯ok¿R­ÃTZ'1"ùڒÓ!£FŒÜъ)WãMdʸû<î?’™M¨šþT ÑWÅ +É+äUɟkk»qG°ÓФ£ àß*¶eÒóÒ¶@»t/iS“t<Ùӊ¯– Òb5o2ê3 fD–œ +@^IÑ+îèàR¶O‹ nuúÙ7W9ù´Ñª“|Ÿ*±Î#å§Û?•n“¥žf“F~J«,ŸÓõŠ?_Ù´TÙ͝ë¹>À´þ²jhܼ™³gWX e‰ˆ¢k6‹¥VLÿKû§A¥ýÝdzú9¸³Àó7Î"ÉÈ`}Íe Ө؟§ G ö€Û1AZ³Šªê┸|èÃÿÃ¥[íÙ[L„ÝÆGÃàÀÛêÄj5±8)Y=tؓ¶…#øC¢!k ‰¢m?xçF¶·7:lBôgª +ÎÓ~ù‡OÌÑôkMgÙÇT<õÔ3UÜð:»qg©ÃÒÆÁ§ G¤âÍØŒR bŒ«/+p›ÚåvGÒ>úvଇŠªþöµˆëY.cÕü³Qn](o×°\&˜¾ž•œ—‡‹r­©“u80VU9SŠÿøM•Y¢)Cßáh¹ÊŒ­¹.¯.ÇúÙ^^TÔjþŖJù ²P§ò0›€ì3—ì”,4•x܉ ïK/ÂAwìf34œ’UíNrbJ¼`?¢…„µ #ç.ϰ’°YB¥z;c²Oéjl5Š5¥Çêí"öZ½´iÅ,>¹¸½e‡n3—ù ÜUl8ӑ¨ÑtqÒ0 Ì®lxÀ£8E­8rO÷OÏo’I¾Ãð±Ù5wÏäÕ6JýÌnÖ½9ÃG…Áò'pcç }–„¨à£·°& }s×LKJ±]ÂçVT¡޾+/L™¿6ÂXÀ>£ÌK<.ºbù©a:¬±© £Ü1‹Ð0B/'øÃЙBЇæ;ÿòÎ .Úòð²_xn“tL`^Öq•óì³×Ë3=j)Á84±j±†šE±¾ñ3…ÚÆ˜7=QdU]TgÅmé£j8Nç8ÒYeoyï“rœ×µÚÃb(üCÍ +;î ¥åsTÙÁVxA´ÝÊ»ƒ!±?¶ÅÖòûbï+€6KŽ&“¹‚w®ÎD„î"æÃ"\Íí¹®¢A˜œP½eâ‘pô‘[1܆A„?\R-¤{ǔӨGçõ[#öÑEí„©ÖP%—ÊWB{îÆê +JJËS¶ˆ§?bT­Š#Ü,bÞ'í‰kûDR{Äû ’m—ÿînhš|Šg*éXۏxG ½$Pð’°HÉÜ6âsv’¸fýd¢Ð6øBOnþy¶‡§ýÂÆû»><@Iv~dpÀÝ­æŠ2¤$“•´;¥,¾iTÐѽš-&5Ú0o¶VŒ‚R{ˆ‹ç6OÍ$š’`Äü9m†šÑю¸©éC ÷<.µ™ë˜o+cõ_;šÜ·¡*Gó£˜Ñ0Љ€êMbæâÑÒ^£¬XïÏÀ"Cñ¤¥}[e:¬±»½f#’²ØoÒÃïü½KI-£KÛÁ^2”æ/¸ûŒµÖòX†>¹=4…ý«#ÐïßFˆ¶Sª,ҋ׏¹ä¹äo0é<³Ð©{c€åñ¬hL§P dëer `°™.GÖZX¨ö­æ¿Mð| ŸÚªó°•1¯Æ¾¾*8h)6CŸN°‰1ò9UéJ¹¸€;¨§¼Á¾ÈmcNì +”SoxÞ"ÔæÕß÷ëg¨ŸÈÏP-’l¶Jql”ëégd…óDÅr Ò!/ËO¯° q) +õ’±[¯ö“×Þ©'­OZÜ3”µw܌¬™ùåt{h ?¶Qy¤§‘í_ÈÏáhñ؀Òay¤]çQÀVµÔ^ÎÛ¸ØÅ8o¸ý!¿ÅÆÐ¸™Xñ +ïÀÈßLsK´Çö½£x=[â}eÆ}̾`†zè`­’µFÆû±ò2>ý÷ˆÝ »?¨zQe6*Tls¬G=Ù,ºuŒóð«'Å@‰0ÜY6 âû*¤?Ãè!=Ý×$^öè½Ù#Û9þ@¬~6»æ²»xt¤cozðŠ‚çudÜ ]sùq\dh#8FZ\ÊÓÈcŒØÝá”O ^½V¶øØ¸†PmÒöx%‰ETƒG×÷ª¬¡aô/²QpÌ$Eñ'¸%.ÈOÖFsµY7öºš¥WOõÏiö©ï0Âæhå9qÔN'¾T§m I÷øk,¾˜ å¢YÏè¦zT( Ú~ôË<ˆý`øv¦O¥Òe¥ V£Î/[åBY¥÷ސiŽô 쎟4Ñ/ÏrLƚU¸.©@újv:¥ ‹è£«ç`}B¬R¥êz¤hÓÔ4AlŸÐi‡='k+&™`L ‚K•r˜\œçzÏvé¯ ¸çV} +Ç´žæ7Ë ïÏtÂÀ&;Pžÿ®•“’PՋ¤¦(ÈÑü +ñþb›MªŒEFãMÍ&W_ÂÓÙ*ؤ¾(wôCL»«ä·8án×ÐWѺ $>?_èYˉo(rd9€Zõæ÷}Bå[? W¡–-h•ªØÜyåHÄa‘®yE!ƒ“ŠÇCä›ß““áϽrÜܒ«å«RÁ7Ea0Q¯dÖM•&ՐHdº01ªÁÂÛÓÏ4R±@úf?_Z]ðž?“.F8h›{òÜ)ZbW¬ñá 2_%͆ïkL¿vE!gx^jC·’*WS¡„ôObu°‡x×¥4ÏK…k].:O«JÆ:UŽK|»J΋­óR:1MyÔ hymðI¢ßÒÅe‚¢€P#ÒÄß­×âS¢)Ñ”­U-lj¶2»J¤Ÿ~RM¨mr¬tYÞbWƒ‰Mís/™/((¶K¡ITùÁg•=&ÐÊݾ:McЍRö[µtÁ¸ba]P®~=2'$”ù^qA7K™Q[(â8>T¦ØëwUýEz9w¿]õ;NÙzç ª­)Ü«L.Fä3ԇ_¿ÞÒ~ößfhѼ¥ªÍ’M³ˆåŒÚ6±[Þ!sî¥zl<”ËÅ·=TFß|É>u[5Ÿí„æJ—ܰZº¢­‚·0“/` )!˜Cö[„ýfUÖ=:5Èú øÞzæåȌå[H qP$À?Ÿø9²Ê&x‹ÀÑï2(ÞÀ»þ”Û4^Ø]n7ØM¼MðËV¼ëQS +§”¿â==rõJ!°è!¯«ëró¬óUΣè jI=0o!á}>‹~Á„h¢\HLx9[Ìðú©B’7šeQ­2±ïŒ’®ûvhXg?Æd•yáw›‹täÉ"N°äwnÀ“ÜŽÂM€?† ±T÷~´g(ûé¢õ„ýû2Kñ +8#[£F]9֥޵Àû†Æ²§’£ƒ,y‰fœ—çÁx„ïœüY“) êˆ1s; ”¶J+—‹ U‚¹.>¹†÷{ªÅ:F¯·§¦>4•9¹¨´Ò-,Ð+Ρ‹Óå[ý¾ÌÊ­}à3ýz½)Éìáæ')øåêG.¾÷è¾)iþîT ÌÒ]‘:~£gàÐXÚaUÙ|1"q¿nH2ãœ:­pM&µã2Gèæ:}·>>ù™N¤3P@jŠ >lz8Ï£ƒˆkpÕØƒIňÁ›¶. _Ïz]¶Õ«3î.…”g/ ÷76Ǟâ5—–“çª7Íjº%VªÃÞs_mތ.dF&σÜ5ö§Á¿1”k‚ïi¡äü¬awM³„X„qæL÷†–ÝÈIï³:┠Ø)溒äAª’»Ãɰ ¬”c UÅp}ÍØìT¤âßä˜&ñ¦ï %¥”C™CÏÐMôÊހîÖ¹u8/mv–wüÐìü͒éq"e"g)åÌÃad +Î]Àèäfߥù«±T³r0Ÿ+ñò9ÏÖ_ì!ù0{2ô»Y<Ÿƒß+ń¾þ$ø‘°¼;fѨ¸vÎ/æó®±±ñ´sïÏønxºnwr>ä{qwbCw~–@z¾Ì¿WÁÊê3(ÜHø!ð-óf¢‰ÙB¥ë䜿ZúE{gëÿ ØkúŸ[Ä̹R8"l9ϟ h‹M¯]Qð†—N¿ô¬{ê1çŠÙ9{ë ô܅fö}x:DÁ!Ð\£òÅ\´Á£diæ%,TsÐ?bȎ :ɄÄ,3S³f`aLÊäߦ4uËA—s¿ÉA€!LrroÁ@*Ñû ·ÿv!ºá„Ië{øz=ä™Eµ]êõøjèí îÒa“ª¢Þ©lÕ%’rðؗIw!Wð šÙK"a"^:h s¹ßÎܾÕݙ;EåhõYhõô¤PdÑdQ£êl K„¦rôoðш¿vŒ7¿Ä:zH‹cý¨e•Ú¹Ù"ÁËéû8a”ô‘ýÀ¿‘ÔŽ¯ Y…ÖoÍ mþ°Ú÷Öå©!ÎtÝ-Q¬Á˜ñÐ,³órÔ|Ä{ÿ…-wwJSzº¤ºý‰Ü3 Xø£ré3‹zŒ3.šEÚg*SátpÜ_)Ca뎳mªI€Œ)­°¤¢Bòf9Ìau5œXÜÄ*—Q§áT¾™à4òsãÁ@(cåîî»áGòý;òìC8×ÕJ3ו’ã±U½¥“ûlTŒ˜¢eÜz9‚Y@›Šïí© ŠŠ‰õ#†µz¥7!Óò‚ӏõŒÏ¾ÔàQ«´jY’7]1HM +÷Þ¾iQÀõs=(‘s¸&ª ôÐr‰õøBZþꍑ.„ÒéÕþÔîŽJú­~¾#Å|_Ykr²gû‡lýlG|ø7Ūê‘mUÕ,ŽÊë!ý×Gÿ xzM2˅νóT-"(ý”÷ÊkdÕ{.\ÛHf$b?×¥”Ìç¡øFã!½÷@o„kGޅ–!-¸­ÝdÈ͜–øGDˆ pß +´!®öž/mwÃ[€¯ˆŸßÖió/À'Änì÷0c½tîώîÏèwàºýÌã¾e6A޵p€bZ©éë1åæQ Úíª´á‚ t4pj[»ð òr8æThh£i¢T׸¥F#Y9+±¦uï75±æ5äª?diíˆu¿|J•g"ÓØWÏ·®}§Bè#IªºU½Íäé1P‚L˜ašR1?f7ñ¼çX]{ôW:¦›y8XçE }¿ öÂ74xµ¯É° rZa«×FÛ _üÿ`Ӄ.-‹s*·Û»³PðÈ+7„÷Ù‹ÍØj•Á[y>¨Î›ÚfíD`0×ü=s«%'ԑ5xÝI²Û*/|àÇ+°që vVöÈÆï£'r¢°Ë0Úâƒá×*f ÕRâ5ì8mý&m.YOPVò/Z¤¤v^õ&Îp|ˆ‰_›×¾¶VLP¤Àâ«'7Á¿ÇGâžúóz]‘˜EXc4ˆ2€lû$uuž t»ð J›[©ÊU†mÞ·ÂIP2“æAž²[Wµ|"b“©.+¸0ö=GÔ}›bë^æۍ5cû/+Ï÷ÅäoÆÁeì†2Q“ò|EŽ-å]ülB–JMÔjñ¸žø4Òӗ~)êÖ×Óð]7ñB»AžÛW Òuù¶ÄË ˆØˆ~¥hï##š¥Åiפ\ +eƒ6š€ ­žÜÅÂÁ!cC ê0yˆ[u¹aÿÁÉøð—#·dúÿŠÊ€¥Ä“Ñ;Q +(àCÓ+÷B©rÝAðPÔÉ'>þÈûÝ] ÕˆRgìr·Ù¸Fú𻑲ˆ/m‘rôQr®ïÊé‰;§yÜCÖ_F¦…'ãlÅg¹uÿ=Û®øý ºÿþ»°sÄ$»2Nn›Áh-þM°¿·µ 7 %£±Î[dSnŒYÒ>ù½>Þ­ä`·˜èTýš?-!=sHtØR®?·~¥³¿SlÎE,VE…>ÄñÖŸ jre± 0Ȁ6\Ÿ1øR„^t„£ àz_vqw8b¹ÿyÈ‘~øøqEÿÐ#¤ G:îs•È¿›ŒäÏ&¬ÔTp׎~O?æ(îÇfåY9S„­$ÛÀÅ&G×öDPÆt”¹Š2ô~Ùø‰:rSꕎQ¨UzBƒ¼Ñ&âla/Z·›uÕ ²§RÕw +d¾ýLtRCù ©\yjoWªüÞ-ÇÝä_O¥ŒùÚqÄ ¥eòbº*æŸÛ[Äç^ÜË¥,·ŽÈá®[©§ ÑèC÷~CšŠ"`S6\ž^ ª„žQdÇ"ÈL°Z©ÀÞÒÁ˜é>Î`ÜD©øŒí7ÍÔÚ¼öЩj$HÚæ Ÿëäâ²,nÂó6÷%o:;غ¶1@ÀÈ±ÛæðË/)rDZGìl:½.6-ýF–tWÁ_v!t­ÚØ{H¾Ð1ˆ-#ÛE¶Ä»Æ4‘ü´y^‡“•ý³ºÑ°¤ó£Ã̲ø-"è´pñõ>ˆÐSHuF±N8E·Û‰mVFí¬Af¼bj”XµžÀïn|sk»h‘îKjÀ« þù .ïl)dÞnۚ¢³}YC9ÊïîÃï𔰙¥*ˆ-YOãþØ7ÿ²ŸÄl‰n'¨cq5¥¸ŸtkS[‰øØvÇNQX ò.WS[—,FÏ7FÖåþ‹xÝpó.¤Ä–oÞ=¢©ÔK)rp]'O~ՖMV‰8Á9¯íݙoYk€äík=jÁlë󉨎 ?ýö˜´)íØ£©f áiëM“ùŽá­v‡û•Ã'˜ ¡rm~Æ?ž|¿M=¨ú¾~‹ÒôÑZ¨Ç¦Œj¸JÉËO‡1Sœ9ƒÍ՟/¹Ò³»sôהc˜2©JHY—Iõ³r`åpWuaǛ ;Ë7¹ÓœÍTÎë&¯,á¯'‘ýœ˜^ÛÚÁZiwV;úZÎæ³‰»å¶ößúBàÕUˆ†•ñRïn§ÑGí?QÈ×SçÀ‘©t¿}ç>ˆð¥j¿u/ô)ëqÀÏJ«¤&üon"ç ÉÉyé—pdæ}vþÉyáFÄÖOzV¤å'š7÷wÝsÆ iÈt ¯0eàù¨>“xÎÉθ`çyÉ¿q2œ&àæ¡ ÂK­Ú6÷lAìb@[ühqª-6ÃçQ²PS¤YNº!€¶£šE¤í’˜5$)Ad§2ó±ÖD ¤aŽF½A¹\KEÐ!?"9ó“tÁ¢Ï\›<0ë<¥",ø¶£&*W‚§Þ¦®¼Ñ]v r·X´¢‚^+¨´^ÝwœãÂ~T9¤ë “b–ì5éx'Øâf±npÔ¤_ŒOð\—õé…èÑÞ55÷ š4xtš¨žT+„òÏß[~3Ps¹“pï!$ÌWê4}b¿¬yæäþÎqˆ^ÈæÑ?ÈLŒâùV Ÿ¬Û +&ž›M+4⋲ý2Àb[Æ%íb)Jݰ  ê„k±hÅYéc‰!ŒCs0¨9>b¶’yöÂ?øPó͓*n4+¬{—ߜžkZËH­ÕYÑ"ÑMY)Áà%t”y?p¥ü.M†åy{L+IŠ#™ž +?e +aWGÿu+²4î VF´³|á0‰í·ïÇ:bC§Ær©y³Q3³öéšb}UÞ·õM3E g7‚» é>!:ށ¹®…—6WËGéΝæô Øîb²Ç I‰ôä~õÄÔYÕv%1.vÈpšÁ–3/&#KšËêþuŠ'µ©xǽ7w3ޚtÅZ«¿ÛxçñŸ6¢Rež½¦*/¥Ìíê® nïO?IÀ¨Ú×?’׊ b‹X§ +l7-ŸéúÛ–.´”yäÊÃùK¦4’û«v8k­t«¸»ÿný–Z´²ƒ‰˜vkjŽ4· Z‡5‘ËTsÈ"d®ÉÌJsÏã%ӊ4š/xš¡–lȸ›EÿQBljœiŒbJ*Ÿ‘N1é )Ìׁ+C ûªã£è`)óø¶2Aûü?..ý +„óú[÷<”¤Ô>jÿUHÒYyÄ9um1ûZô‹ S㍵ðC0*ǟs¦Å“=xî’¹WsE‹¿îCG×íE)âÅÿé˜Å“»aŒo錩¥ÌütúÐú£¦!VýÊÇ$ÊÍc„H¥Ž!~¹À^4‰‘ÆßȦíʘ¶*Š ̆ê̖†ª„x#]ÙÞ¥¡ÛORГ>šjc!~èD¬ÎÐT³à¥,9ùÍ1Ÿj%XľStÓÍ Òî71l“5šOgaÑsÛöà:ß?[¯È1v[BL:ôÍÓúæ ü¹ªUXƒñÓ¥kÕ}®ô˜Ï(偒ȂŒ¶%é9~@gßԀ|ΪÿhqoÈcdñ÷ø0¾¾åìØög$žob¶þΚ§d<û°‚¢ñÍ@äA1ò–zÞ2ѕìêf3Jž¿isŸ61ì–ÌCÿ7£ûbHùüï[·še¯äÎtTòþšœß¹èï鏼4µ>ºXh¨“_0Ù?dO‹kÇ~Q|ÀŽðÚAwû[~Yçß4¸ÏbM i_Ò3r¢Õ +-ö« ²ùmP‚å4\¼„¦ñ&dšùŒ7CÍÒ>¨ÙŽõ°RbÚ´¾B`7Ò&™l€²DÇ&cç6ÐV%T­e£efx×îm[Kc3˜‹‡ †ýG?8ÅÄ-ßu)'ûÕUU%U'ª„!$@ƒÉÚðÔeRTBŒUÌF¬mnхP®#l„ƒ*ªŠíní]W5o-KÜDÕ‹«  –$Ae‹–[tT@d÷ïß¿ÿ÷ªI$‚6·ºÞóww›ÍæmïKz[¼æszY»ÒÎo[:ÐÎæö3¡¿·à†÷÷द÷»[m·XÛoø„þÊX +›ýŒH́Žbþ'¿ÜÀaêÉùÑïB³f«¿ÇSdBpK¥P`Յύ_¿GGP¹SuK.,øÑ—6ùĂOAkGnz‘„jÍH”nA¡ƒì4+¬¢FI)ë4ˆ7‚ƒ™Ã“üMJ§ ºçp«áXý(éèƒRØ+OÉØ1ù~ê@ÞÕ†ÝóD„ óV«¼3!¼KPKsÒ:‹©€¬?Üc‚x@çlô†v3jý—@ߏ† ºuŠÂ¯Ô݂á@»†ºðyªšCuÿ +Áâvà嶬+V[4¸¦Q>ga@ª8.Ø:ƒ\bÓÄCnö(( ДõªÏµyBђŒ@úÛðìo ÞŸ c7¤ÛhOLõ‰ÔhME­Íž¨žBPý 7ù³ÂµùJÄßkƒ§–7EQ$(;4¢gï|ý‰Å ĎÅG؝Ü/Ò >oA֘ˆ‹k/„ŸOi¹×ô÷ïÍÒ𬇌 !Kºë^þ®Œ`C\àï³þøÐs §õv5)UEØ$ìa¦Í³:§µI ¿P/|=-]› „&‹*wa8šVS_šÛ[Õæãzkµ– îÐ&¦ äX öòhŸ`™$7àó»ÀGE• &H©Rç~Ð~ÌÇ7nÆl« /ܺQtãxär,tDŸ^ÐA[[ƒ;Ó%Ž,éHŒØ~3£ +h؁Z0aV+ñeö j"-.뀆y¥2FàÂë@NxÝØ0 Üâ{ÄlÌt揰5‘R´õpb<¨5+*kEÈèªib#4ª­DzR¾úŒßqòCº â0à +ñy°šxÊ"¸%Í=he€>CùDyØ:‡X-s©þ9â&o¡Ã€g(¾þ¾H¸¡þ9nÎÍïS1?ÍçZZY2á+’wÂÑʜpå«ÐtõáàÌð°þüÁ<Ø»ºBÓ\n DmÀ(Žì_¯£·¸ÍkÍ¿qF³ŸiΧi[Ï´Ò'i]δÕìIÚϼC‡ãa‹¼{‡î°xáf˜¯ ‚³ö±ÊÚÝ㠐€¼ OÝk³øG3ûŒù6 +뙿ЍÁ{q–æ \όAw‚F˜éƒì,\cB±E–­²håvà~>t:ðgG…©êÙ¾È 3ßtŽ›vôß0Âüĺv¯Ðx&ÈàdJ.ÌÈ]ɗي¡¹ûxU^ˆê²…b!uvCp­öü>/‚¦JÑ3ôÝü>(zDx–5‘=ï(W`%5´Â`”Z,hTvÄȆøûDõ<÷¬ ðzçÅö”wÿ\Ùt;iµXy>•©K1¥“:gv«AõúÞñe%¯cˆ]ó†å'îd*Vª|0lºƒ*´ÿ¬÷Ø ‚éñà½Ðò¯£AãÆZ„_WÒ[[»d2Õ-€âì[u°ýª{ÿvÃ&>V’²\Rë9 Û±×܀Ì4ÂÕÌþCÞ~ÙÆ©¨\f‚P¸eÌý2ÍZW ߸uãøb¡÷ï;Áö‡{‰Å603ï\€Øbým¦GÆ /fM zE3X8oٔKEQ¾Ûôzv(é1ë•~¶àÅOìt¿˜€}þq²ÖžÃ‚Pe¼K)p“(:G"`4°Rý_#SþL¸8†ïªÌ8¨ôÚâßp2½÷×|1~¡–5ü__ñê +”T™Ï×L¯bŸ}}W?£þ_¯4Ý{©âØÅZ®Z +@ã‘Ü›ª—Ú)ÕZW¡pYU›â-UçUÉ֞ÔL•‰¸rñrÏÄ9 +ÓÚPÜ|å2x¿b̳ÄQm¬^Ð2˜ª¾Ýgß]#ógØ<3MÖ|Sh[wK‚.Õâ:<%¬@Ê2–´ÁÃb­þ(·eC|4œ¹;¬åLÄ  `»÷6Ú¦OAdtŒ?LݔUt¶@CiÐnÝCE L*¯[̞mÜ`Ba±îمdW¹s?µ|ô sgzÕ¯£Ï½CÈz@&uêMz˾¬¢z¤=Ú5RÀxR¸‡‘\gbŸõm€»¢¥ct]¡zö’%óÇdß k9dŠº3'Sì9'­ëÚÐÍÛfZçs9¾u¥Ó†üiïÁ§u%LŸïT>¯¸ò|ª{úx¤7ØJ³E°ü¡pNÔ|¢ŸÀåt9u0izö™žÛÐ4w¼Š¯v§gmÜ,օGn=©°k’ÄîŒR… äÉþ²Ú&)µ×‰Æ\p7pÿãß]PvNûÆpÿćPTß{ÐrZT”ú íTß®¬‡ÄÇÛj®ÙäÙ©€ÎÍñà>F D›ÕªßnoЁ¿Bû¦UìO0·ÊmïyMËïâóMÝ,´{Ò‚¸@ì¯)t«]Þ«(—kÒÇ{/¥¨'»5‚3M»ÄùÞÇ%ºÀF ì±÷·¬(¡nlµn¡Y:u øÅÔ³5” žJ”mfÑÏe³ +³‰÷™§l^Ÿ¥›Ö)-÷)¹)CðNãØEHã8½^Â#AR·2¡4hÊÝë$uœÀ#-*_8&‹²H4'ٓô+9"¢K #Í;ËÚO쮲!hͱ²¹ã†Xu–X€_¬ÀÚ¡äÉõ@oe"°ï}¬rtl3Ì"ô(W ¨U‰ ">܅ +©ukÇ7md‘©Ã¬‹Ujĝ£8Ù»ƒTBˆ]l 8Z¼€ç½Z„Zõ`A”¾èÓÓC•>ªJ2œ¸Ñ“Ó(A>ýMÌgKºµªbށ<Ãöà„³cI¡Ñ8¦å0}€;ÊìHƖ†û-¹´1[eݛAû.†‹ZÙuFNáceц8(`G/ss2h¶ÊB€ Utã!2 +SU¤ƒwK¾'3á!}HÿlÐ‚Ü +ò6YªŽ«Räö>‘©é‚K²Å꿨Lã§ÁpO@óšéxN†C=™ vÞq†Ù⨢ó*›‡(h:skª?qžL¡†áîÈ1§˜¨`&êԍ־^n'Ö­'¾ +2*Ô[|ënޗê= +¯Ñ3ãîÅRÃåÀýB|±çÕŽF\¤¥áŽ4éXÚʃ¿hoˆ¸œ†tŽ*wOºR•ÎX$SêÍÔf€Å óÜWð±y£Òãë׾Ȏ֐…#ik”yì\Wº¼´<ø±2£Æ-íP>»—p¼c pþÔ|X‰xáàUÅKu¡ÙS{J"Õ~Ê¥ÔR>\^6äËóGkzfÈòˆ ô&V´"E;Rg†x¡IÉ ò…‹$>$ ²cˆ ”ï$ëÞߪ}Ù þ:+/ 0‡†ÎÛ]>¼QûӘT™A<Œ=!Íþ•ˆ´ê¢P˜ƒI²lô{7½¨VT¤J‡âMDI˜ÎdD¡p¨8€OÖÂE¼º]a žfûóSÏØ$ƒ­ö±C£º^¹­AÙ}pî¯¾w·¨S0x {D`ÌíaЎcaO vd¦11¥B% JtÌad‚QяS¤ [A b•uNÂýN“Z/ ¸W…(H™7¼h‚¤±^õˆåŠ÷ÓÉåjÞßRl@5ƒ®Yxb$öÔdN†mSÄÜ3½¤Ÿî¹Ã9ö_ÿ_û± ç6Ï[DŸã1848 +µ?5k©þã”3 ·ç6a?©leÀÄ©YÔ¶ÅRv0Œqzy¼Ø dÔeÆØKEï”0HÏ41ê •Ϳ +?ö:½˜±¡ÿýG²òw¯Þ=—ÿËfcüåé;?¤½#í–½#¤gÿyZ Ç3PyN͚ƒÊxÖvΰ6ý_é=Á˸bžŽþ£/¥&ëݐ~G<€«íȀ«~D_Öcv@Uý¯ì *Ü$š`Á%¨˜%Áþ²ðßûcAg,iF•f±î'®|ʛÐCá{«B"(SÏ ‹×#ÍëPð@m”½âë5ðA"ºj–O%zŒt3<÷,z´rƒT³^ƒg²ÙL®N‹èBèè\LI"7N†ýҐ¯ñ·åÜ'F>yuNÉ ’(]:¬8ŽñÚ*µ‰v×$ƒ]½Áv×jÁÎÿ2A/¿œij…÷Ê+€üôžôHõ-:Aéqè3ÕÆ}0°+VgÞóYœ0>Ü ûuÄÏ0ø¯Ù! +?¨yþâ0u.ýíÃ<ۊ«h…övô ª«ö²A ©6ýý ی0ZËú9‹t>ûžO÷:Í ŒZ®¡²WZ)Ýqè#«½|®¦Vtï$É '¬’Î/BK.¹ )Õ¨ ›eÅÛÉ!·2 ·ú$ۇó'e1̹ ¼Ë Sè¹Ú§1—*„¶rQ l¼šÓ·Ô%“Ú¼GÛ`?£Q‹*ïJ³âYäÝÿϕ­šôô{A#NÛë0×n§î1+?Á!€Y~»‰Yøgœëd%SµÛÂÉ´ÚY0®¶Áw¹CÿTQŠîb¤¯ÿ&¹cÜÊÔ>å܎ÏîKä~óñâýnG$çüþH·îÔ÷Ý»¦ÔuûŒ'‘òäÿmT¤>•’ä1è¸Ò]üÔ×ó£UMéRÉUm/Õ¾u›÷¾Ç_åÿ?oÐ\ÑîG|·#½‘ߝÈðšäïwº9 îô÷(2ê/ÁîG‡·%ø¿÷^ÿâ?Ǽ ]痞^yyå痞^yyå痞^yyå痞^yyå痞^yyå痞^yyå痞^yyçöùµc¶ÓíY'ÿfŸþôŸý¢øäÿñéÿÑÛiÒ£ÌQ‹÷ÿ°±*šü,Hv1½Â¦ªV9ô4þ Ú.½z]ÍìÀÇÏ]ÁŒ»ÿuè-ðî­ƒhÆ]ÚQmUçM‚œÍÖÀa•TÞﱸPNÇÕõéun¡'p{cR¥Ž /ÒAwNV<Òn@ãF “vŸ§Œ>˜‰úyé¯OìÇ ×›!F_çÌíy3@B3$Í,¾/ªÌu9c€Ø@ñe„вAÏ©üÇɅÛ'>¡ïç >kå úF¹½¦ÕûZæë4õÍÖ§ÿ]§²ŒNÇø 1 óЬ>;‹|í„ÃãáZa‘™¬G[˜GXíºÄqiûX£Š²BLK«½dVJ‹äè'`l6R©ú±fµÈ<ÒÄy¥Ý¼ÒÖ<Òî^il!{¨ÌîÓÀlÀîøˆ'ˆÞTnìÞ~Èï'ЁÓMÁOil4»žcÊGkέçXó¯yšyáÆæs3øÈù/3/3;T4ú};Î¥?琢#ùñeò™HǞΩæaæUå̲v™ËJµ¶²Yö/ +[ªnjcõó—è …öaâ+$Ë «Ö<«™Aà:¾’ˆUD ªs=åMDO@ƒ¡¸¡»$>Ç‘‘LâŒàå`žzÚØ·v¾ÈŠ$>  Ȇۚ_]Ì/Ç,$MOz´gOÝ-F •ȬjÖgöÊNV"…ƒ˜[#:ÜÏ^žˆõéìdàæé֟_§Ee8`V@ä6—°sœ1‚3)íCN§œRÕéȜ—ò¼¯7ÊÚù^÷•iå^õ=¦§¹Ôêu5z˜šž&§ÿ\îPˆ¾Fâ.*ükG|™z:ôªðÔ~%WŒãy}nïë!ɝúß)>Ò6ÑRü®*_vOì1_ÿ@Æí•NMndÿÚnësýæî¸AŸÞä1ì›¶úMÝpuɺÌ!&ƒúÏꓘâþ._ßÑÏúlI¤ñ‰ý¦î»Chdß¿ààÍ÷J™nçä".#çðõ$¡åúz\rÉa‚Ã[¬ò…ÔÜÄU’ªŠ²Cù'Y!ú«•’&ACU¦iE’cÆj$ìÔX³—ÙKÛ¬íƒ¢„„똓SX´2ÈúÅ: \‘Í9=j·œ²Cfðª Òٙ¤A®ánvd÷Ï9…K(E™Û ¬)ß©$²ŸAmN„{ aPågJĪ倘-CéÁX.¸ä„4X9.@Ï.­ˆ¸Q"B¢XóB[0 ­ª‹a¯GXû /Œô"s[ö¬ëÁ-õ™›$Æ ŽRÖÈã×è¯æ§f +—-iÑ\ UIø;qYú‰©,ٟGÐ¥+c¹%«Z ^úƒÀ!þCQTŒ\OvlÞ¯q°iMÝ" =îg >>îgA>Þ Ùõ |%aRÇqžà’Ç|@àă¦@Wìåx7· l,| «䆤ÝÌÒìm’¯Ês?¶•i¿lffì$˜üØ;h¡ñÃÄQЦ_6hk`(‰hˆžÊ\âm‰ÐqТdçdh_TVJ” 3ãsMtk +Aq7)<±óZnåGÌÁh2W$ŠR}׋ŒOæšÒøÍ%^ºS¶Cu´«+þx"‰™i#çሸ¶Ó…D¼ ¨Ï~ £58\ n„Ϗ‹ƒPƒMÜň»¸eA{h‹»Ú IÆ"#»–(C5Âa˜Á¨ý‹Ã^-x۞&ˆ¯u^*â;­'²÷Øzëþ›ŽjM/0]ÂQh + +Ë´j–õ݌©âã^¶Å>f+жÅ.}>¨x½¦ä`¸ ða¤¸à!¦îˆ,¬0õèSô4GÜOÑñÂΈ¸ |1ƒE,AŒål©¬+@ÛϗŠŒçýȦA‚­%FÊᤩÀÌ/%úø‡KÆ=¬ÑQ-azlx¤Rf[E†x»_ƒÃ™*á¸€ß ®I‹ [Þ%­bƒÍjÄôو~þµ!'ýÂJVQ¯$´b*òh pp†RÚÀF/@ + J9=¤èFX1Åt²«ZWMéåC«ÒØ·pÐIH×%}sîkV¼®ëÛÆ]µî-Û&mþ¹,Ç퓫XWl«ÆTr±nÙp»p!t×$ۖk¶^­‰]³/2£™=ÜCÒixyЇ»ËJ€4»ˆ6¶¼²|X—Ø€]V͘A“jÌ ËDîÎ=?Ç)>‹ìÓØÄœ]˜lEbÌ=!±‹@ô†Ä61á鏆&9-b(_!äv =ì듼\@ËØƒë;±-Ã[²[Ánt¹Lü˜.°Dľz½ý`2©¡k Ê顸Êõ˜™¡ ®§ØÃéùL"P\“*™[y«aÔ¦S÷'£©Ç•ˆÛ&ö¥ 6‚P¿=Hîo—Ä¥+ƒ¿ÛP=ÅßçÈÃë·(š4/õï Rgà˜â-Tiwyã֓£r}ÊØDŜvK&‹®.X°¶¡+à™ ÷ìM·©º)d=Tu›)Œ•vs)î÷…"ߝC“¿ç†B˜8x™7Ó euƒ Áãôó%ğ”2¡ËßRº¡ï“BËXÆ´(K +"Á‰÷yDõ©!XKÈL‹ÎWv N;‡æË‹_zìƒÓÙVï—ÜI…g<ÔWµÝê?z^n0Ð<†b1AmIŒ»i£Ø«7«–åÛ`_Ѳ)x.1ÄA»ÏµÂɜRв¯è-OúɃ@Óuk˜¦OŠìl˜È ß^€¡…ÌhLµ jZ0Q€óP{d-áôÃ$ªÖ®÷m-ܵª /0}AØà-Š ®Dº²û…-#y÷<åîÓwˆ%eÈL7Rʗ¯>$µ½g&aBòùF›ã(ߐÎVjäÊM¤CyŸä.²‹R4‡}þÕýw‰ã'´•$ÇÿHp5â«Q‘E¨~%¨%ù/á ;ß=j$æÄöfŠ0çÅj$Òj$̊ÔI︆Eÿq^ÏH#Æ%iµ£rŠ¸ÇpÏeÚÛ¬/,÷í}µ‚,<Õɪ±ÌÊÀªã#` T-‚¨3;BÀq:çp¸´@Ü´˜;Õô𜠢…ÍO.oᗠuÀбc%½9*¿½}µ™dñS2[Ö©Qh½b>¬þ’túq¯Bé×ÙFW’ÒKÿuž¥˜Âà¯nó<÷KwãŒl£Ù2–ÜhúïO'Øöñ€€Wm…œs7¸}¶Ã+®û”••ßsQɌ{ˆÈ +_¡)†|Öz’=õêz‘“e­ù½²šVåŽ>æFæâýON×ñ!²§Ê*ÚvP„ˆ+y%M#5òÛ㣃’$Ü¢ûìHÚ ‰°%ët3§,¤K˜`–TŽáHDH•ý‘¸ºâŠ@dÝÔ1=G> ©J¢Qq1½ê0~¬™ ²Bâv‘ÛL„{ŽÁÈ/ÇÚú3›?ɔ¾?Êɋá‹ø¥`Ær‹„´Ùò™Y0N?åg¨QÀÀyE~’gaÂÛ?aݗ´`üï‡nIÊѬº%A·B…æèò H%ç|žT:V(‚ *°î7ӛws^9šqw•A9Ç6œE”ò º΁·ÒbwÛþq5œmŠ ,\ Pù‘¨!7ÅF¤U“ü[nkZfJFœžõoWMæF?|÷cïšY}2×¢]ºƒ¸ó#:ˆu>Ø\£pô§¸h´š#H[mí5¤9]Ê1}+ÅGµA).F-¸ô1üÞÑöå=VÆçÑîžÍ µ| ½x}3–ä€ÿbîo^nÑ©l ŸÞŠ.àJoäcMâö Bž¶Íͼ å}ÁºÍ;KlÑí®nZû‹‡'upÆ\\8Ž ®…AÅGO`ù2 ï;ÑÎ{áœ8 ‹ãŸï„?˜óƒ×¤7èFÊf¹ªSöT»™ÍšB:«J¬м0ˆëٔÜÙ¾“Ö‚yjôʉm><÷Ä-àÚRþyÎ8^ó´Z>;Ü ‰ÿx‚qjB‚ÂŒM'ÀyfêÂ÷“Ù‰w)þ-.ܱ³¸r@Ì¡æÔçª}NP~íN% iEM̐mþŒ»KK#,YïÃúǧÖ/Ø÷FNYR:4&oÆ6´¡þQÅޟ4^ªP`ìÕXL»ÏÊ&(è֑›Aä5(K+#&yÊmƒc ÚQRӓ´uԈ#¤ÎQ(ÒwB5:u±cÝڏ~^¤s ºŽ§ÂöþDjC¿cW®WÞÊŒ¼N„_±%—ž `ˆ/HXv'ô¤V6ð*±LOé +RTëú]4.mBü:YžÕ–•|j¨ÁäaúæÝ“ìD ¾Î>1î½ìÕXxª¾ºwÈ4Qqº½rÅ7WÔ¬VQïñwWÌ´ÿžêî–[YþýÕÓÜßõ¢³2íùe¯0”Šñl Í-yف¼ÒחÂ^ôö_o¹W#˜1"òÙ`§çܟ”È“ñSýŸrˆ b;k¹?˜b4U]TƦªÁvû.Áiì€+¼¶¡f[.ÀEØ×W_ô,ÔÙr==Z”ÁçvÀX“ÜjMÿ–²ãžüÄæÌ[´äвöžšj•÷ê¸å½9·ó–ñ\TG¸œ\6μªÊ/àäv™ëàaÐöˆ÷-¯ÖÀâîíH["܈Ä] bm‘Sº2æñ.}Ó§éõEi7OÓ³OEþí“´³=JÁÌ.Œ;¢x‘Ѷɫ‰üà ^„œqO™d2Nyñ'‡ôW2ÞnR,dyFwxJ Ej JÈ=¦-,—†f"‚øÀs:ð€|ö"LŽÆ£¨Óó5r`oÐù +öºV-ÿð[+ýû/ìy噩l¯óž‘/þ),¯àcv’ÊýXßëIez–6äöT(ßþ¤²¾\oý’Y^²7œ’Êÿ +³»ûêÌï¾4Àîÿ­içæ#b­<þSÞ´óõýž|HËu§Ÿœøÿø´óò±Ÿ½içâc?ÁiçìØáiç÷l?„kwîŒkç_o?Üç;8¼œÎc±¥Ïö]¯Û™PÍwtiÉ]”?ÁäAçÌî#Ú¾->öO@¯·iû^žå3#‹Ráߐ˜ËÊ¡1;(„ÂËÝ»Ráª'ÍÝCþL{/9$¬? øŸÔô·ÿ3d£©&3Jô7Εêü›$ñ=ù&6ªÂÞ­µAfˆ,̜šÚÄ/ö‡–gñQ y¼Fät«7Vs°zF€å5îà ¤Ã~В¼´¥ô}`ác‹µú,§-/ªP;m¤Ô¢Â“óÙÖåÚRF…Qьzdqµ#›-vȉö LÝ'ØnÏÙà†]vtKƒLãÖåºm•. Êlž‚SKpb÷벃¥ç<Ûä5]…õ) /i=â-*E£ qÛfÄ»'‰ta¼C Ã&òÙ>À˜¼wz$ñYlc6~[mÓs,¯}8‡Ô3µŠ%£ƒzß â–U5„M£¨oųÞÃþò"¾M@Dœ†ä%õ$aC,„EÔtš"ý:L{êLQdø‰ã_R|&œFäWðÁY»ÚÙ·7DØ1#y?×Ñ'"F'4jé¶ueâNG&à(s²œî9Ô=“:ÙNJV]*ðø842±¥W!dAYÜæUiZ£y‚5«Î:‡S+à «õ éê½4¾j™Ó7͍ýd×£„3àGZ><ñD¾F,ufƒ¨]Ù¸õ¨#VUb/ÜÅÚdåñ`ÔÞÕůà WQ2NŸÞÊïÄÇ¿Ú8?$(—SiykÌ#ŠŠŸ‘ΩάÙÁ½4i#Ó®­s]Gûä5)a <îq»¥;¹š%§È­ßŽ>þh™¸:äÅڋ|*\ð¸ÎÇ\™H9ï¢ÔÛvz’b `û7Gµ8¾ð?ÜÒcn®IDDš +d¢OéÜъ™é,3ÉÕܼ-ä°·OçÜìEKI,-Ô\ìIÒXNN~ç^*M’Âjyۚ!Raԕ„Ä´Ë}"/^,½íË\mÐò¨Èœ¥Ì¨©?p +@²áúÔ$_·¹ë±¨ü`ˆÐ‚"ž¹Ñƒd/56÷3À z£FãÖ <¡f¿ÜÈ\Ìzè®–© 8 •AŸ@jùÀU F­p}—D†ƒ’Ó•k×\¼¿Ö&2úxr !|Sˆž¦@¢(Wâƒ{¨W* ôð¿ú|ž?óád«–®êԀG`áÔÑ-cŖ:æd}Ë.9 ûb'QSè˜B +‹«ÈZüÁãoõ›«ÚVVëi JpòëKŠ£Vÿi€”®±¦ÜaF½Œ­Óš|Zê;Åê×MµbŒBàûOÉk|¯RIºž’š|ZsêiÖª$9õv:Tñeț,…ö+UY¨Ä0èå†:EZ6ެésˆÞ,ÜjЬÑ灜áQ>§ŠØÄÆEéŒÇAÈF<‰“H]ÂÙÃaÔXI‚œˆYW©eҙ5l¼¶Þ?Ò´fÁÇ0xngÖÇ¡O÷Ý1Nª·C!q`9@§á۞‰|焚´~6g^¼lD^ºÆ7NJx@¨Ï~ë>>rˆM.£‹ VØ!žåª™;*™XºuÀ=N£}ÄêC,sáBúmal¥ìÒrwe äºó¡‹SÉxOÂxVшB„ñ²ß€iäÅ}w*CՊYâË v…dWÇþ¢.*%+RÜèö׀ë.¤ÍYeÝ"®EK\rÊÎz%ù{ úˆØ$bF²-2ÞVcý3¡Þ.o­ƒTâaøqöŽâZàùÊ¿„›B#qFKÓûrm³ûA7¶þŸµ$t$Éfd@BÃnE6e/™®à&*|qõÖÄ>@±Tù#í‡ùTÂ/®·¶Ø–ÄÄw‹k{Õ³Àŝ¤Î×M˜µ?PYƉ¿Öl°ù81:'©ÐeEqBUóô;ýqßÕU­¸#COŽ‘©Íô–íÇ­#ZÑ53~܋¸+$š|[žFªoÏ!Y܏+¶%Xºòm‘¸Ù19©5ýにµ6ó.]Ê.ñQwÑ–º0‚yÝG‘>úCáFpc +p`éýôÎÞã®Îê97¹CXç T!JZ¡ù9räx®be‡öBÿÌ¶êЈ‚™â±ñy‰ ÉÊ0ș«ø£?C¸E՗Š6¥+Vëòì o†eZàꕣÏÂy°§!<ذp¹‰XƒãŠW¸$m“ćÞla¼Øca"= ¦E`Ø``ÍÁôVo.Îùã¦ʑA°¬Á… uÎ@0>¦²‹"Ü5 +‰¸H­ðºBëɟR$”{¼¶¼ +Ô^ ç¿Geª”ZÀZ$®c;I]jÌNTmHb„]D¹7£ø.Šªäž024àMŽScЬýó=äGU†ˆuŠ+£ãù¡nÇåpªUVõ­·›±¸¹åWèñc´b[7V\V.4ø&-¥cØïõAûýèú%®xHãhñ¥ŒÛÇ¢3^bÝ@S¨0@!}¾ðu b‰Nø•ö +ÁJÅɀaéáµ1éï–ñòz±bÊ"òÝ+R|*]æÁ}!r<\f€Œu¥š™1Ó7΍ ¼É‡šâáæž÷o ÷ -փlfºV”w ”¢Dæ‚t^”þÐ]!´lª)ÚŏÖC©cØ *›?&³Á-h„ ®Ðψ' +Lît$Lõ´]LuÜ⼤¢HðE²~ú7Ï òêÚõå!1×9n1ë\…r LÞCO¨̶Ó#ªTñ)—øÖåÍÕ-bX:/—æ^Ãx{U!<=ü`bߦ]°Fmnµ;Ñ­Ò/ë+P +\obžø(•Õ‰ÀÜÇ +’^¼ØP¢<ü€Vç¢EÀ!€*Ö¹¬@åQR·öü±q€Ê&ݚ××îÃhÐAâ÷yØékQ Õîû¼îݜ­÷DI»äÁŠu Éþ‘pÐ%|QéÞ ¾ô¤(æG˜E¤vÑ:OWd™ÑÍǑ…e¿0G¤„™°”ªhلâÕ•ÒA»rù01€ Í¿é~-Çèa *dØnz¯D'5ªêÒuÃæ°þÈm±yFA/Š&]Gè¡ÙçêÞ3êÕõDž]èô »ôU¤ŸEZÝ"µŠ"ý9tWåÁÂe$¼5ºš“ˆ9,’ìWè=§ZøÚ°‚‘¼Ãn¯ª¿¬ ƒº¬``ûÆ¢¯1g'#«æmšõZþø+ŠÆn¯¬½¶Yêûyì åw$®ù¶«Œ†ZTÒ°ÿcT\]y…”˜' ´àkK:‹oíä#v![žŽ7¬¹èe-Pj‚îVpjì–ûL‘Wn¶7àÜwË=0g-Rúu£™ñ´Ê-¨+I«çցò<û%´%iÑ¢¯¨ŠµD_-÷QdVdڗ—³Ÿ@„Cê0Lùõµf¡6¨«ŽçIº¿“ (Ì8°ÿ†1âá̜î•íQu«M¦ÛT +Tô`Þµb _ >ûRÙ"!'Їˆ¿\’#>¶5ח³ô<½š}dbþ!épx¿Â;mB0ý!ňÜ{¢Ãã¸E—0S­,;PÒì 8.A’»ƒWuÙ¦ÑvWcäÁQ3óñüG¼SËH`Š•ÉFóÜn¼~©p¤Ô¬Ñ@W‹%b:\u}=Ãp&X°°pRY·Dê¬<)Ð3$!Ä`åGKYò‚ÏšY˜ÒLÌK €g…v?/&pdM¥O]˜Ú b jۂ„‰pûôBcÅfˆû% ڊú6á1Ku£8b%ñî„JGž=ä{!3Ž%VBñïZ£¥Š/F ¶²_å”Õ§f@hÙŸè›l}ؚ¿0`Tmêü PëWFÕ)Aƒ[€&]« +]i{Ö¡0Å'VwÍãi¿Ê"wË[BhO}]æàäi‚"ªâlÕè…VµU²ˆ«ÝgQÕàXöêïìfîZɦȵ. ­—“[ a”_ç·õÁ˜þ«1«è +³‚oܵ^W½ë'ýY nÿ˜¡(ÏÉóù¡ý‰«cîrs˜ÀˆÇ DQ3ò‰Ÿô?´DL°"3ù‚#>""gô‰ŸD|ïòˆ½·Ø&h‰þïú™Ÿþˆ™ŸŒDŒ¸îfÌD–¬åòŚ¿TXy]¨ü$:}Ĕ"´³>N 3 Å6 é¸X•€×¯+\È5ê?CZ5¯¬<©ÞÈ¢ÓÁ΀ƒ­n ù lF·CXn,>4ûn½ +G˜H¨ÊòÓ¡GZ8£»Œý–QÜK)ßpÑN¥á–:èÝ·¡_Ew<.%“o7çÑ’P“n×ÏPTøÄۛçǧH½V./Aõ^íú:¿Wm+›Ž£žcEL¨é5åsÓƒôj×ä£VZ·êàdEGiNø'äSC–ÛA¾ +e@¸fYxÐÔ¥F‡ãâ­ãWñdª1o ‹r±×Žb¯XZ1Âì¦NZd©ÙÎÍHgÏHgϖÎìúðF)Ù͆%w¼#þ"ÿm=äᬼm¶ƒ« KH„»!„±Ñ­¬«G¾Š{Úm­ +îÈd¢,l?K—‚ÆY+CùŒªŸ¡íIôÍ­Ðwíw­&_Oùꐮµ»Ú ó"ZàŽ€û›×d?Kß­þãl+áèÇà‹ƒmö8À̈´ïaü>qî£`.¨¿5‹֗b‘«Ê ĶۃWæä?«ÃGÁè·´õí}•~%¢G½9½„çÞH’‘í¡<4èËÍÑr7G3}¢cōÐÚ5ô-ÉtM‡§1c)¼£ŽG»ØÿDèËw«º~]c”+ª¢¸(°,Tñ5]š!^ƒð“u+kÏ­Œ ' ¸Cá¼Ã9•åà ’å¾âµÌQ‘^Ó¸[óÇ·Äô›÷ý>ÿ·ïU¿Š¶{òÄí¸~Ê·…ÎN°€Û†?B‰„8CùøAõÈ7Œj +;ƒYxe ÆÂ‡ê£ +„|ÄËóÆ&‘£qlg8|'[óQ{tOgÓ°S,+6ŸZ9glu¤H¥ª¼‹£Á­F‘£j‘UŬ²äÕd rÏæ—ä’……}ë2Õøâ-Ô ¯î~µ6_Æç’ùaßR òÒÉa_¿ÑHe/͖U¥£Óy»› +ýT°³U6Ýà6Ž,ÊÓ•·sh˜ öəjè¨~'!„ßATæj®´¤pÅfQ¼žŒUŸIÎ#Œ?. ±ðÒ=ŒŽƒ´¼õ¨JÈ}N–Q),_]ýûìaŸ±œDo·(åq¥-X¬ Cµc y„«}~hDãaXWÜi˜>dÐù˜²Fu€€8ôN`5ër¿ä TñšX]qžnçU²5¶ïµ2ô„?ûÈ%5Ûxÿñ):Õ }:Ý{}P@ …᫳uê‘p7ÆýÆhIrÇš?à&wß´LãÿðLßL÷_ö*¼8~Š"^{­Q²ÂFæ¤T—l¼¹"„¡ê¹«ï_SubÆ ÓoÌd¦h~—žg/Ÿä`&ɍpꟄb³Uo%ß°ýp˜ÐЃ?Gêƒ$é ¡–Êœ?‚7©aQìðÇqäúq9Àc[q0¼§!ÜE2TÛuªd‘9Ï=¾)íÇ«ª4n3‚î’ç ÛÝÄÖæ*ÈdɎãèü±Âߛ"K…˜8{|Ç '^Vk—6“Òٖ¸F'×I–$î/;2Zãs•ô•åp™iâò²ÌˆÏýey“]@NùžšGDž ‘~f?ꕼ#,²¼½šmnö~_™.‰óŠË‡åõ5†í™aÌÆá +Ø•™Zg-·Ž¡,ÚÁÈqc,“%å…lÇÂÝòFÎô‹\ª±k”qÜìûɛç‡G¡½xÑ½ëÆ´#oÿJŽ´”]n:ð®ëËáö¬[/†<ËZugÉ4…Þ5S’mžÈ×q7‘ì,;ÌûF i™F†Û®Pð_oÒ#ç·§L;‰ ã+7€ë”€¼£BxÞ@L‰Ð>S çX „1FäBy¹;6ÌisÕ-'ÌÍ´_á\–/ ²M®M’³:‘· I:¶·ºˆ†dva›‘l"V"r¥kVwæs5³ú2ð»Ã_Ö¥"&ÖMƒ»„Aoáø–þli#•°I`éMÉ÷)N>ˆJO¤–°©û‰v‹ìM*ÇV){[ŽÑmi,tËéÏ|оÈéK•ˆBZÅWÙ[ðu+±Î¯4ûX pÞՋw,ò.L\ü{’-|H¨—ØYâÂiO +_ïK@)~4³¢—®››]6á÷f#yÎÎ ¥ÎÖEìå´Åà`\\¼´¦…,¥Å.bH +^ÂyЎ'±qócžlC@ z[¦Ã•“$ø@¬Ù&l¤œU$孜ƒƒ +³Á^x¶_ބFqYa8?sÀPÖìä+p¼ë( +°‡ 였«rݤ…a {…V{ø¿þÂoˆw~º/_8>ž£y’·ó·Ð!(?£øó«P’Ò$¬T»™gôLù5‚é£Z%Ï:ťԏGòMT]’“þÖÀu<·ÛÚÚ´Ö"þýí5;aGº—7Z¢+écs™`:Æ¥œ¢"ZD]YnK×ó’yÑUØý9í“äó£±QvÌ6w}ÍG ÝÚº§ñO}Lƹ:îܔp”ÍêuçVo tçugôN +,,:ÚªÄ"î&×ïÖ¼q€ª'Žá¶~†Ä$ê(”Ÿâéñ} ú¤'Ø2Ǹ[Ï%‹ÁÔ93C—n:†‹,% e’¡ìVæŨPë}(Q?}JTåo^Ezñ_5%PQŠ9‰¤@|1£pf_Oî÷ÎGH°ÿÿ:¬ï—U`è!Ž®ªÃök¾¼×ˬúó_úÖgÄ<“¬Õ±¬IÚýd–&’§˜Ö +è$kzÆ5€è1¬?åÕäüñ~xÝ&y–“!»vÜTü$ºÜ’–¸†(M±Ð7Ä3OЁqò²ÄqŠíq“ 'ݟm 1$Í š)ÍÛz¡1b69&öØÀèK9UÜ6Ýk£áיŽluÝ@WPZŸî±*(¬fàZ¸è‹7¾7¦NBÚÍíb„„óO!—˜9Æö`í€aý+"0™,`<‘‡[tŠ£à"ùËn™U{¶í_épäz¸r%¡2òdŒëØÝW¬A3º~íé©Ë +ÕÕ§¾&PäZ¾€«Ž¸È¨QV%ÙÔ÷ؙî”ñgÔOBêúŒ ’:!BþŠe&ÍÕíùúëžÅ>Ûã‚ç³`µæz°0þ!8_Ê8Uõ2œ®gò©ktdxG¸–6Û¯_¨»H§áŽÍÓô¸°¶•›˜øD­®«<–¢âH¸ëâê1+ݙäáÄçÓS“=vÞD²Hñ¸¢»8ÂÜmHØÜit8ºÇq1ÜÅþ£tfçzØÿO³Nï„l‡„ï “××TD»ž&7>D5\f7Câ1E qC$…#ÏØ"Ö¦ìZôŒ-`ÒeT»™5nbÃ. ð²;ÓúŒ)$0¾Ü‚¦fI‰N„¬H!Ž(bŠ¡ðŠ„ÓÛÚf(‰Eô]RB]±ú É &ôgÙk J ²õ—É/s¿¶^æq” J¾Ãµ’®`™Ù¬Ԋ z£î'>ˆ±•Iðz=r¥ÝÃåôürõ +³ÖxWCä€í@î‹8ýrÐp[+AÛ¸û3¾31 ‡»ÝΫ€|yì"åP!Ÿ ÒuCoFóÆHüO(û?…&fÏt¶ß¢ywEžYßú‹µdêÏ 7ןbvÈ[7™:¹ò¬T ¨;ʓ{\í´ÐØ»Yö].ÁÅGÈ]FˆÀ¸Ë"=|D΀£j'q!¼6Á ­s» ®l p!ºöȧB$N‰îù0!ËϙÎ Æà‚z3 +vCp>}ãp|òÔ±Dš•:$ÎF IïðŠŸ£Å\È»R1))„ÉÚÕ bÈ ÆQzVj¨¬<·Üêo$ˆëq°ðtñÞÅÉzúÁõ07áÂuÏA¸DB—öÁ +—ЦÖ5dh&Ü´þSS*áɖu¹e¸éj#RæÒ’6a,øµŽ¡Ò´jŋmÉ¡ûr[íÉ?Ôt­Nwßt¥„Ϲ5uò¢ÔfXø×æØø Wpec†Ü?êZ¿ö$ë¾WÏ"™SIŸXۂæ¶(#›_åÙÖ]ää)–Jع†‚R±9…½Ì¤Û-&L l¥aLndSÇv[„.±N1#Ýj»ÆInƒÒw‹T€VV¢¤÷ ~Hò¸©Mõm…à>_Oîã®×…w™ r¡]ZAGh}u\D›‚zÐM¥wÞ»¨OV*zßÉÒÃ÷H8[“â +ßHõ$à7h˜Àn$çXÀpUCC«‡÷˜À!mãï +£Úm»þR-𑷏hÃBrÌ`#­æm¹_ÃcOn\ìÆ¯å&Ú½~ô¸ yŒ{’ÐG{~Õ´¤½þûœä’K-¶@ +$)XBÄH” Ue±)-«@PäWsÉyÀsuW”ˆ%Á]Îêæº”Ls s1Ú鵺¥§Ðà&=t32”­>‡+J R[!'ßÿrJæn?·÷{æî÷Î÷|ó¾yÞÿ.ú ï ú~ïòïzÉ$qÚæÚÕ:SL¯£ Öà4¸UY¥2Êð'•à*dKÀTA²åÃRd誦”^3ÄøÕ:¼ 1ýQ/¼}‰WNK™p]Τ„µÅùýÒ<à¼WÉǐû ô=oXó“Gøç·â½X/°8 +šô—ÊÃ÷R3Uä8Wg©$—­à®çIKI\îJðV¡œJ‚‰Mài0óµÒü”L¿¨^^÷ðà9ºõ)§½¯X +Oá¾d=q•KGޘ¦8ùè9žÞp Î¥içt·´¢\Iٹā71y+òàH—,òYSI<–{78bþ¼R  íÏq8 ‚‰”äöç99_­l@!E1´à©¡³õ"¬"˦-:=Ýn¥´\Y5qT[ò€ƒÝo%%V×kûûH€—ϧÀK:id9ÓÙP(q ¦½¨%ºSP 3ÂÙ’(Œ,“‘ Æ0ÿAîˆG— 74ÿ}1‚zæ,Fî¡ô#¡é½øG[’;1ãÿXꀯ ªL¥e(‘Ò0ƒEܟÔÐÑwÈáÀç§·9ÙÃàÚ+ÌÁÏÎJ˜*qA Xàüé|hßý6ex˜p¯ €ƒøüí›»ïИ%Yžþ4a©‘* HUþõh!"·5qôW)霉”ùê +8Š~ ‚Åþ5öû™¡7É´Ã zkµJ¯Êڗç™–ñ%¶¢Ÿ²Ôt=MS&Þ³F¿|¡51Õ¯>Á Dzl{ý6ŽwýҐƒ=uZ3—)…`­°½Fð|ŒáùKËÎÞØ ¶zDöòusCõG—È=Íßçfh_¹Å>Î×ЖŸ‚ˆ`.]ãX8îyõqÞ"}N¥}WdþÕaì½éB>׎{û¦CÅ PûìúÊ,qá¿Ìþ!.¢,ÇWwÂ/Q2Û·§ÚèÙª)­teò.ðwä5Uéõš5г lšØ„ÖhæƒÒ y §¬DŽ›UÆd4oA…ÊÏÏmÎ+ÿg¿øJÆc]ßϳ+w¼®1,ïܐkÔ4ú5؅äoæ0%֗¤~ðè Ž¶~Ë ÷ÙTÃàìBK„üvçü|o«K.ì¸AeìHhÒ,=âóé;€IDðõNVŒ%yÍš9³b‘¨R¸>bÃËâ莃Óý†§Ø:*&eð*y•ðhÀ³òòú-֟gÍÆÊç€Ýæu™!> À8cšˇ%óR5š–efÀ¬ËÔ¬V|¶‡‡ÐO˜¯ ÿ©Y, +ʪJþÑaú`ëh±`Pñ+K o2ĕ› YÛێY#DŠMH_Ö¬¿G˜ßé +zç{qÑj}^ø¯$°ˆò€Gü4¡cÓBa¡ÏtKoÀÏ[…]pš­8v–J´~ámšO—MXµbÌðQ»Ð1á§¿†×·ΑfƒßLã—Ù&‹3åøçØ_ÞØS©á‘×°>Ãp§#ÇS6F¹Í~WìŒÁ½?!ÐÎC|¿î,ö†7ÑRpû–ÏÂáÍÿ(›Ž9î9 +«£&[ƒ¸àžã’@[î~¢¨¹AÓ³Á³Žs{®ÃŸÚoAj]üJÄ¢÷):Xòû…RiÈ{˗<ï¥éæwŒúðxoyx•Cû’pò_0àøPÚÿ•ŸBd–ß ?§È¤O•Aö)š5L‚S ñS">Ü †{sÁ¸æµç +٘ÑüDšñäç¤fs“„ÑÜNpÈyi¨‡Ïn88BEŠŸ +CՏñ”óò“ß¶£_­ƒžHÍl ŽRE®¶ÙÖND†ýlÌïS(‰Tsó¢½Ff"’ïí[kRó Žý=ؓ Nod<~”ª¥pyÇì‚☔÷ßÝSx”¯°h°»$;"òÓÝxÆÉ1çøõœô†?,”ÊŸd€S⏠˳ý£iF1óm~Ž›«Ôsú¨êNë·WxþX…Çk«„%2:§Uó3VÌëØ“CÇVCXBŽ<_ƒ”žýÉ©JtµaËáËkX½fZ!©÷2{Šë÷aÜW³_­/q_*^ó¼máyB Õø¿o[¬ž™bëíëuuZÖÞ‘ã¡«ðÐm÷¼„_6ªûÕHk~ãm^³îx¾?‹TƒíZCéâ•ì>dÍÆ\ì6¾JÜø4-ÊËú~ +ŇԠ˲XõÀ"ŽÄ„ÉqÉ?ßu ïž_rØkÛÚmöh–F|;/¾Ê‡ٙˆµ=\$×Ude|þ:ùЦ2Î[UM/ÉGÝ?ß @œø6ÇԒ^¢šzCf è> ÓûKÓÎáW½*U]Àyùðø8ÕڗÎs•vª»ó +ïPZMPKt«ðê܆vKµÖhˆOÊ¢]³ú sÞ!5÷X¢õèfëûå ©ˆ)é.¯NuÑï6ØOô‡¾ø?òtq·> ’­TÀ@ÏÞlê([ûVOù—¤¥ïz±p-z…ÓˆR¦¯m(–’vÞ¯Z|äƒÍ=´_Œ{k¤2öÆ~ä€ü3ð©¾ývg­¾mì¸5áo ­s²NNÁT ß­ýւ½(“%¸‰EÎ{Ñ 7ÊŸ¨ +LB N”ÈÿŒÿý88³>‰ iýê4†x Ϥ%ûûä%/S2BAÂÕò¦•ÛX?P¬r›t6£ÚñOÿGzŠ®ÂÑúpØwÞwö]ÇqÛ«Ê{Z†Á›PššÞS¦;©1˜.öç÷åSV¸¾­xnû?c#û2¡TYÛÌAN ¨¾sÛYâB‡Ó‘ÃtËt;Ù• +Cù*[øO[:ÃÝ­¨1a]¢rpbÞ&ҔªÍ§—¢PàtR’ƒBÌXøú·!‘ £-ë\~Ñ^Ü^©‡€°;‘µB8.rr¨^y™U†C}}\’vT»Ô3ËÙ!„“¸«œMòâàÝíhC£^Ø­(féí(pâ69f¼¹¿a—%Òòðá²Û©Yu\ü)c°U­‘˜ ަ¤ª9Œ*¼ö"ó”…n ÕñÑBǺÚÐÀ$öt8‚:?Ηçøåf_¢‘è7fNJL3íUg0<̇ÍåÌ Š“d¥ŠªEڗ·óø{$løADÉ\ÏÛ¡úQÂ<^·< ¸„ƒN=Ö²·#L‰áТ¨ï;žÎJlf|©h=¨%ÄÔjWʑô¿ÆGŸëÈù¢Hùo²G4k‹„ùÉÂqQ¶êá9 G|ÏÖø{)¹¥0ø8Mø_ësqÄs•„Òø™.†_ùòéeöY}¦_úrëšjV >ś9U½U›¶j¬ÝËfôf"³76ƒö®®.oÔk‚¢du¯Ø¢ÔڒË|¼9ŠJt!ªë(H&¹!chµ‚ºû&*»æ&םEÅM]÷9\Æ2'Á‰õ9Áï ïÏðoӋ–飡ìäW<\‡±cõŽ}‡Óާà—pA¨[Ì ÁPèY{ö¬¿7Ñòaþüéä¼ÑHBYKÍôŠQeúbɸ7fàìˆ ;yœ›‰¾åÆ#<ãCáöýÓ׆ŒIæ7 Kï§àD¯ˆœ%×á…QõV²m—çÜy5—ÖLÊf§¼q—Rhy ~ÍɈ.xÎ&/³1Ec!3ôò¹µªð,ëßÊ[ F`Œ~ԔïÜ`ç#Ö0÷1H^—=ɯkŗ¿‡óGÁZ±•`J öŠDPéˆBc'þ¼q÷]YZ—áCþØéŽ~ýì’ôV×/(™ìÈ>Òß1ὁ˜Y[£þ¬¸ìj¨Ùð&Ñ(¸Ú”h8²Ý³ˆ¦vÏÝ3ûÍ÷;çEF²y¼µçDþUkUkc•€ÁŠ©](ýâ¥XI¹©xÇd²N`»Ë|k0•È÷*…çjªVúÀ»gUš@£UPᒧ¹(¬M%‰û'¾¸zËÔ÷ׄÓÍFÜ; u"aíú‰¥Zûh³ iBe¥ µ¶”'F˜"®ÖªBŸàW ø{!J6 N9ÉHϙy$G +‰/ÁB˜Lhåa'D).`R°§5LÕ( *4…ëC†¿|Ð}¨8Uö¹É/´ÅÂ>ŸïL¸öb(À­aJ=}Ivg€õ\š¸ä¸ã\—Ön18/`Lƒ0Æ_î0ìÊÐ%¼ì©mćgºÐàgW½“Šá;Åà•ÁèÐûR Ø%ÒÀL;N}×è{‡ºßD;@7o¤Ø ¸Hþû!LàÛpèŠM†ü|„¶±v7Ô@Ús“!eƒ‚2ꖀ8²Kk” ñ;"õ6,éòåšîÍ+m•]•‡ò%rHY)Î;ݟeVʽ<♶U¦$ß³#¸îúiœJhý5–j…¡Pÿ–w¼³).aÏveÊt‡^ÎýYM¸eQÐâÛ³•E Ùà™ ·­°÷ZqB”«I<_ý.K$?´]ƒkõIJa5”"• !éû­Mà÷Á…È1¯0Ò©n Ë|êb¾z\-êüê ?²‹²¡sK¿M\[Ã5Üõ>Ô©iT:‡¾¿p«5Ó¹÷¾¿rY[H®ã@õ[‘+=$¥(ÂQL‹‡’+KdÛL,ε6ÍI×ÜCµ[œ/·çUÓ©F9 jì*Q@ÚæJÏR‘ +dÖËîÚ2­¤>®sb뛋†w«ð$°ÁÊÖíΨ1]'ÒÙß,ƒ Õzhê¾ÇÊ(€lC­žbYð-¼·­Èû‚½?ýÇä‡4a.—MÕ ¸'8êÍÄçJ“ ®ý–ÃâÙ3˜?ÈR†âMµ\Qyï¹ðýqRÁè?´lÝ'>’ ‰§ÓBZ®8¼×ÊT©Ù´þýgñ MjTð›ÀzbQ„wƒ wéîçD«w:5X±{¹ÒIÏ}}7ØpeU&A5…hü^¢‡ yôÔì· jL‡Ìîúl¶)ƒõ>ž±[óJß·xgØ*hÀ"ñ¬0‚ÿ€•³‰Lû ü…µQö +ÎÆwÒ=ºõYG—ôÃèý;jVŒ·]më%Ø82ä*ø44],öb:ÌfÀîóÌxÏÇý@€4âËo4Ò¹%§Yn—;BMÇ%º^v„AóÏP`! ˆ@s ÈrpFÌ1ˆGD.&ѧwGIJJ‰?rÐ’¿^×SSOMQওœcï¸AEQ3É»”{Åá³3dI6€¨›Á…é3òVÞÈË)#8Çî[2Ø|‚*®Û÷8ö[W‰û™Æ[€Œ±â~æu–ÃûÉœä™l? ¥+?s–e°õA¶H8…ò•ß¹™‡BV’‚ò{zZó½³ìŠ`N/­±• \L>ÏËË@Š—2%—8ä¹kö~^_gàO¿s¥}¥.€´F:eùˆµ¡Ž´ÖPæÁ†Œ¿s¦};kC¥ +öŸcY8äÒ¿´iaÚ +8äè®/êo¸ ™ñ¦LxÆ'œ¹RCJ±\œR£?iCžþ8¡ÎfV(sAƒŠTu㕊Rþn®)Kíh$┾փìÅ)}­þ&¹8¥/û¦žõñ|_;›ÕşíVåÅÕÅñÓuDa8J2Ø~uw/cì6Qc¤§SÛû˜‡U :<^ÿí:iàâÓT0qxLôœ^ü±wÌþ.ùü±wJY·D®-á.-ÃæGú±nù*£¬vQae«ƒ¤lDû%‡c÷c÷c÷c÷c÷c÷c÷c÷c÷c÷c÷c÷c÷c÷c÷ÿu»ŸÕè²m²ýÇq›ígòÙnݲ¾lïÈ= ~­ñ~$¶y3Âý»7tÎÛh»êM³Î2óÔ=ø²óý¶[3Ûe³/Ì"‡Iß§8­5C¨¶ÀH;áÔZ³P©¯®8ÖØ›íöM=öù$¿îê+fp.áGlΚ‘Ç¶Ìá0¶fäH›\Ø 8èûÜß5d{Iþ0ò}3Üæwóxá* E¡ªE8E5mx…h¥ó¢HÓ÷5ÌUš™”ʬ–D§xù?î©(ì‡Ù«’¼ ¶ã Up¢=bÙÎÎ6ËO}½lÿâøOÇÿ7Üö°.ÕkñŠfçU|»Ô¨3ÞyK 0§³kYyíÖé./¯áwÖÓlŸãÅÀژe®p`”ת&p×­sVm¡ÅXæÜú‚ÂÃè¬sÊUžÖ¬’ÀÕ@ŽÏçUæ‚bYŸPU°ìË®ÎŐxf«¯çXç@ŽH¤WP6C”Ö$M«›]6¨X³aÿLÄ?A`þ5‘a¤²i|h}å–&wΰX/§Úρ1–ÇV²zŒëäÒG´V³,ÝŽ‚ìH·SKªä½5CŸ Hm‚ìP¡ä‰Ay^ÑêanÞCbD!³XéXƒpõ¤±" Ë*ÜPw——bGIل›âEÐ …ã– ¶<“’Ï^?Œun,S÷;6ø±CÖ7=ú8ëâF–2ØûÇ%4F"،ő`§m7ôçä +>Gd&œûȱI¾(QlLØ©û7I#ڃùѡ8ç¹A“š$%ÜÒ#5|IՂ+ÃRÄK§œâº¡å*ë<åÚ9GSۋѿ·9üCž2óóg`Z®|.ß +>„¹F¦DáÕfñKÃhq&Ìü?·-}ʃ +mï¶4¼óìÜ»C¨Æ7±¦ç⁕vÛc}ʦ6××%bå›h¸•ÞJÎùW4Hä‚&ÎHZCö`Z.û¢Kp·8Ánq“¶Ø×Pè%Wb¬Yä?AQ”­\X†²?ˆ :5A:`7ÌGhlX8 Ux_óz²·Z+ÇW:ÉÜ{œz'ǗxX’7cîØÃûF¹Í#=$?gMV‹Ë+T¥”› ¨ä&‡Tl[e©7õ4ÒYˆ¶_Þp1?O´Ž°–Se±÷J¬¬]–ÆôÆéy‡6G¨p-m1 |7rݚ8•]Ù«R%Ew…Ф¨µlÝ%’›ùú2T(u¦@MM[v:3½r9’ØÎRC[‰yò8âD[†ìÌd´?4ÀŽL#ŒV Í+%h9©fq"H’V!V÷ªtLV×ó†n’Cä绕ß/I“ü©ŠŽ¹è*Òõ µ£VšÛÄ;Ñˆ³Ýf¨&Ȃ@—f¬å,«–Ear¡\h :|ö& QñŒ«‘H¯žƒèIJz¹´ÄqäioÒS¼TDLÕÈçŒÉáô”î*ätM× ŐV‡Ì+Y&ëäHS¬£-=®—Ÿ]n¤—·¥nþ$„<-1Âw¢ÑglŠÈ-q¦0HbkíQX¼~¢W›éÛM”r©™¨“q é“Dñ·:·S]jë½Û­vVëC\¶ëC_Ñ0y‹]*8.µeм­{^&ÛTA5;äÙ dþ¨’¹_›ß!•HŒ¢0]꒼ú¤¸øv-Ö>çq;ëq +€wzW(™?šŽ?mIï˜mÝ<íîÝñÐñR7lÌTœU*¢DyQMO tˆxðÚ Ñ ×ƒË —ŽASç8¸Þ-Ÿ5bWFE¤w»dG±ÍŠ¢7Ž8Ê}ºÑ\Ð@·¹ Ù[¦î’ÀFÝù顈¹ÕγíÙÀ·£qÁY½õ¼Jkžž¡1ú.bí"Fä;BoIò¿¿ +_ƒ¹œ»­Rænßïæð#YJÐ;7re{j©zãŠÐè|A3¾¬nô[LGŠ%Í\YVP·¬¡š¬¡ž´¡eYB+l[bÉZPö¿‚Ò‡³þͧÊ>8¶~Åe §Ç|24ÊÖPå'™ÓÉÆ²3¿`âùĊ䮼šóÈËÞm1°«òBÚñkًkǯŠkeG/ÁDßq/Žtö*Œö)®u{«$0Ž$8¾è{Ə˜;É*b78ºöŒml™6²Ž6pü8Á^„ݻŒ«ù#|žÔ”þ *8é窙@¢$XJ¬­WêÞ ¼râ¿%£H9BҚwPnàÑ1u·yà§\iaF©é@ý–vë,”Xvõ/Ö$ðÔíj—W›"s©Iï¶%ƒïEï֊»(£¡Ê-8KJïöZP¹ /îk(sÄY¶àI£Àg$i±¹µ@CýòÏ,ì'¹¶Öˇ]„¼ÐÀµ¼¾¼®2òºEâb3]d+’0_þ×SKì[ò+Aþ 9ûªé¡?ê`’ö_Ž+X’+ªOïÑ{²øé#…-ÅíÑYõ#сo„ÏNñ8°é3Mßَk(Æ#Ž!ˆ3Û`ep+‡ñ n¥ÞÜy|Ða4Š*0!…G9škÄ{„Èÿ@† €Ó%!†(rµjR×âŠ×_„wejµï®è Ü ©P¢iFZmK¨ÀƒžÇ +g**,æd¦Ê̐ÙYœ`‘[¸Å%«&kù~ËSR§¢”fh°‡T%6 FÂxüâAnØ~¶ðõr…E¥n(S«,¸@!°Ò¹˜cnDՉ ^•Þ’C²÷C˜c„އ&ô­¦ú®ESéÀ‚¿®ušÂ=ŨL¾9_sz‰¹K"3·E›™”VBÇ)’rŐ³ +6J7Ÿ®Z¾Ä9·FX!Ó3öJK$´/Ν.Uœá*„ˆavˇéÙ7K=ˆ0Åè6ûxµ)â·b¿G?ê1ö:úëYÓß°Ð[Šý ‹S«Œºú.#<ˆwÈ:!&?„”Pv‰1$7T?î1b'`Ï"®Ñ /“Üï.:éÜꇨÞDOOG`´Tn>‡öÌøäSUqôÓx)Ѻ¼O/Ñ:ëY™:ïÊ?¢BuÛ¡ó §ô”M>Ðù2t?–CÁýù íˆ|¡ð¤ېûG`ØWéWj‡_!ãYÀ¨>,ºv=—>{§¤5€‘› f>*¦{„¹1TÅ!þ-âd->³tm¾¬ å`&ˆom×ÃqÒO§¿Â%ªŠ7â#×uR÷:§>ÊÒHÞß§_ñÈ~@úq룏5#¢§RÕp{üój¸1hF¥ð"hnNú¢²¹Y³o‰•ÚÁ˜k§Â<|ád\ê¡}¯ŽCðG“±Ä=Ôqì£Â莶8þ(ãb™FÛ÷÷XòRU¦Bd) .uJsʝ(è $‰¯8….Q¢¶gm…³·]نy¿[®:¼U®/¶¿¹Ðñ? k%úK Â\töœš´ÄÍæq41»^J–öjL;¥¡¦” iR?Ÿ=RÕFJµñ09u#ùáÑtBä^×6º­ºlòØÞ# elÅáKÝ6¹mºlñL×Ô%ŠfI¥‚™bif¦PšRRt®ùâ»æÊï>M4 +eJúܚd)7sc¾h=/Áç‚Ó²&ÝcÃfå ó_Í¿ó «Î%ÎàòDWýÀP>h°×8h<'Á¸f&¼H°ãO´σq†#EÎÇù~ °›ß/4¾Ná’Ù"¶u¶¡)ý;wŠÅCvï†øÒ_ l!Ël:PsÛ¾\Ý,9EÒd̏ç ´ÂsÍæŠ¡7nšRÜãÔÁ*b'6«¸¦Sö{NçŒ`ûÕãÖ‚SL݇¤óôÉo£¶Ãò£äÝ/ˆ×@áªØÏø#TµyP˜¨ç’Ï|øò[>Àá*©”£Pr¯‡‹‰°Ž¿¦ ¦øQ¡H‡÷l4#>Ê9ÀAƒ˜èÎ<¶\[Ÿe¸q¼Œújb¼¬'îbS@³¦,¥/uG¨°›Â§->±kûU—M0,T®Ô]ö¬wB.>‰ ^~378aÍ»™ F{´\!ò›R"âHáà…knkwLÐXšçq;κÜExCšpvîjéNwY'!ºÈ|™ ܇e;ÞN×δ½ çCÒXG7oن?ìIËkÇx<˜xŸ¢sÄ`(‹ßx¹ˆ)žL†ÖÄч¥5àåÄ&=üÔø™¦{öóâç'Ûõ?vÙs§cÛXØ÷"oh¼Uÿ'Ò?Ì +Oľ†7'"°ŽÇT<_·L®@ÖGG”ƒ5Æ©½„¶ùvDI_ ÆK)Ì„`ÿ,…=Üu8f‰M§v?´CÖE¨¦8ÿwQݏï6¨ë£gCuå@ÁúDØáòN]k8özˆãҐ»\t7²!t†1öÛ¨¶;Œ„÷øì­ê6IÔ@‡C"i ~oQ9 ’H^rD!˜'Ë`sXøl¤Â$ éëìe‚„`ñ䒮/àg²B C dG”Ð|Äc! šRyÓ®ÆêEES›äE_~¦Ü~"\J m†{"C4Ã÷#ÃâGÞ¢.Ri'ìxPÉe +è€8—æV(~”qÔ ö€–„„pý‘>¸¿À€Ó$(Y1@Äe~„d&"nÄõ'ál¡ê£ÃðcŽ«êsîÉFaé#àV4œÑt蒚 d%£"ߏ€K4ú×õÉB^4ñÐÿå~ñóD'ÅÄ%‡}þÔÉÅ ~¦Mݧ÷ñ‘ÆV·“ÝdÊ oºgäM¸º$%C¤ÛŽ !–:Á^H\êüÝ¿™3Ý#ÏÍ¡dþ¬m€Ù»q0\Ü[tÇ­ïW–Ðcú"£P©M7N)!¦ÝPžßwLÙl¨( `²š,- ­†üD»òðgd§”½%>ëŽLÄ—-}Ϋg¤ÉG#¢D›zj<úÞ+r"²sdށÇÎRüß!ú-™ Jv¡Ù.7\u‚Àð:w&“$ëEq~âȍûN«Ž Mø' qþù‚¥± õ(Fm;¦ö-ö­êÛµÈúk£ºJ=E(ø¾óüµóÎàüÐ=_,S÷Ðp,ù†ü|¸>¨…ãT!6”eºön o§î~;†y¹×¯'¤aêu4Ôõ x÷«nà[Ý}„B&ÿz²¸ËÇûÓwm‡„2ªZîa ÂÖÃ?晻0qÄû軝iÝÿ5mÙjã‹ËàUKÉÙo”Â1°þ1>ç]’²ß^'€ÿztëY„¯ r*ùvâ²…ÿœæ?æ›Öðø ’F:œëR56~ÈÇáÈN”Ž¿ +ḳyï}=O™:e•ºä¹fYrÍbš@±÷0À>2Q›0̗x|lÃdº‡y¦û‡1ߺ$êIN ¡(A%X6— *u¦hÑêS¤%JreV"îNºsUgˆR'äKT‚Ãù(í8ÿç…¦w_•2“§Ì§ƒÀyÞïÏß"Às>íÅðq— ȅî2Xì–%9•ŠÑ\QÉǺsæ À‚@y½Qñäeð͛øš•½ÜìNßK²·N’¾‡C\ÂñÐpZ?'¸Šé‹Èêqò$'IxëCwºIÙÜJøþ•´ÝGƤÅå +ϖhx6G"XqýßrâûºFô’~šš¼ :u0Ú靶㫯¡äì{Í»Êpٝi4Ô»óžß8©´‡—ÔóìíñA‘ ©K)Ô뭝Õ!‘•p«¶HGûäÿÞÓߤ$/ñ #7ýI¤WB2¸ÕÖÑÀ ©Ï‚7‡Áßø<:áT‘KÂİüþqïú„ËA䎟ÿôxúyKH>¬¼´"S0x{T´za)”<>½c•“SÃëÛ +ÑéðÇàJKGã‰Io²Q.Ýq·éךexéÿ)¬IN0à²Úp,}Œ•…wÇÞγ±ö69! iÁ÷ÃS»Ò?A»¬¥6'ZWˆ›v+,L 6Ý/‹Ù HBm– ϯNrɓä"¿HD=•n¸S 7Þlfðtø[Áñ7s±o,8;v=L¸c ÍE#wh»j) +–¼^œKi·²sF?Ë.Þ}6—)“ŽHõP›ÀiÈ;Œ¥òf!YP½;íêH±`a$*A<ó!iC¥ë'ýô>Äó¸s²rÍö42yÔ1„Ò•S" ›6†Ê2Á´¤tHBMÝ*æÒÔƺM ;±u­Õ}MBb÷»cgòç\åÖ|Ùe·9vÎ%¾l³ü¼½Î^bk/3ïvÄTï{÷X’–úÙ÷œæg30ˆYy‚ÚÔÇY֑u”F«fÀ(0 +¼-îÛm¡Î-´«Âͤs j·»µ»å´kZ~oc´l‚Òƒ„ +«U³7jI¿²â¨¥ç>ÿ}̪­ïÿÿ~wÞ÷á{ð»ïžùïÈ÷è‡Ôl’I%±¾ÖCþ¹y._éåúl¾gA˜ë´7}t×/£o×1iÖÖOòF¹Ú#g’W‰NÛ/B¶z™rÛ±S-íºxÕ°ãjK±¶¡õ¯âSàCϕÞ"4£S¬´ªòÓû•zÙ~ÆYI9u¦XQ›Ût¼v>PµHTñ+÷'R@ÁLõ…é­‡ ©Ó­‡5§f¶^üv¾=®Ü?Þ•ЛæÖ'Ï6dºpi>•“|êÄïG$Y7ô>¶–pê7GY<(f£ò’5‰ßÖi0+< ´˜GE%"è_ÚÒ´£umJÈ_z¾2ñj°ÍLšØqŠä>Ô6‡À[W/Q[‘º¬Óý& ÍóaXŽ`ý¸»åKgÔïM”@N}÷öN® ˆçWüçøQ3s}«] é÷xx€gP·*åCÑÍì}q@e1´øÚÄþ“(Óx¿â¬Òs–Oø¼xVœ¤VùPw®óB¿=ýÍÊÍ%ígôGYÖi/ D‡­~ÀžÄBAPÁ=íÃSëi~²nø²(›Ç4XE±brw1ðF‹¨õ Éú!±fÓ7í8{·%ˆ‹UØ5³xސû´;}ôN†bd°Cád–J¶ Aáu™9F´^«8{¸OIE;cðÂ͐l+Tb£"]þló%tŶ~ŠuàöD{#ÓÑ´™;NY°æÛÍß[…ê!‘d­ˆgY«é™‰\,IA˜CĕۖÚiT•32ñ´9ŽÂÕ]<…«`3x?樫P”T4o ;œ}7ô†Å»´yaÅd"—s¦§¸V#aäˆt¸/VH<4F#ì¿Xù„XfjmQ¼ è+”ÀÉYPí™>›¾™ò”“–¼™Ï©!3 -BóÊ?¤AwƒzÀµº´lØ$êÛ¶œš-£U#g,Èw*B†$Ì<ŽSKóUÜÓ @ˆ,xÙi8·øú'IО£`ëŽ-PÿIcD¨wŒÃRÌ‚¿âÿ?‚ +ÿÐ.ˆ^T1̕s‹é»ãՏAžno›Tƒé¾kàêÌÁÇý¡n†á½Oó.}ïæÂBŽ'CŒ…©Í<Þÿ +Â#}MžVo›Rz» y¾i”±% °•øNqâù¤öø&Bò åÂՐ]2 +cÕԌ•ê5¿RVÚ,Æ}PO%öA?ÎX'ùðƒ‡µ4’Ùzðå2,7‰¼ þ‡«“êäo‘­#U$ña^ݔHWå +zÐФ°Cy}7„rŒŠ‡(¼vûX©úõȤ©ëƒ± j¤êÀ,VZÀçÉß-‡¼ݲŠ`@bL3g«"¤š±Îæ-.ÙÜqÏfd×úK!e«a óº×häQôF&]‚v~úÊøB“ˆ(~­µp扡r˜‰º×8˜´,‚nHI••maŸÜþ!ýå†nTPÞU:›%ÖZˆD)Õ¾¡Àj>P“«µ1èW uãàU5ë9¨[Ì_/ïb2ŒFoÒEϵ´€n×q‡šMSÅ$=ÖfH¤cƒ¸ïxç=½8Ý%(„ÉÎd¨ç'­We[j…ξ֍ïû%ˆi“BËX˱›æêT²Íÿ­Q©Ñò†ò3ƒaj¨fýª¤‚üçOÜv‘w£{†åµxø|ìß®ÒÅ ø½ÈÀb¡‰?µû¬Õ~µkŠÌîÌ]æ9BIӝÙsøÂåtE<+•é$Ø»#7KU¼qÊ4‰sï`Ðáâ@$›™óO$ëÓóËC€Úž÷v~ ƒ‡úô÷–m 5…P8Ê”Þú4T&®ï¼E VãD­ÿÌÅÉlxw8i"2>!gûÎ^‚Î4œ™b’%»š<´¾ŽÚJªÌ=½¤ž j’¥¶bæþȞNÿ¦°Z§…fîÙíx‚ÑÒÚAú,]žbÓe¯!bLm¤íF€â¢)•ü#Mã`FkHÉN¨`¬Šù0ãɋ6£™§e ¬=oÁ.ûùóz­oÀ2¢hsÆòÌ^H»¥t‹ÇX­g¥ù×gbÔ»§ƒÎ8l(̼ýWJ3 ‘`BA¦Úl«H¶j´2wO­”êf7·ÖË+%Ù_[J«]¹õZlf7[s.û[ƒÕknK fH9òØÅÈ~âë\]id±ÛØ:ÍzûCœ­Z(‡j¤cØÕájɧå?âKˆj1ádsÝbæéÌœëºû[¦·y!äqëvòn=QúWõR|¶mȯ.¹!$ºà&íéÐØ1õq/æ/‹Q™k¼˜“PÞäùÿ¨iÕ>/òÿ£L8µuWÜcÈzé TqÑqYzv¥b~Š¢eŸ/1‹—s¡ùH[¢dÖÕßJª‰l+¶^4¨òꍆþÉn 5æqW¥—Ë™xQæW–*;c#ꗔ*?dÈû㊏>dzÉôÿ%h(@ æ.bUä×ÀF‚'),…)kqÍ*Þ"qx•Nx´Ñ‰ØXD…³ÞÌz¼©è>n©ÀLÆnfø-T›·Â!ˆ¸D/wƒàv•;_™’wxNa΁ m«–ÿžVÙ}ìÅ¥üÉMO-Ÿ;¾_ÿ¸z*Hƒ@3LŒö yvtÄÏ@?O@CèÆ-ƒ¨*Ó.Om .¢$ÐعI7aŏé ÷:^)äË»>¡fjÄú4Wþì_ÿ +1ŸÜÉD_wtÈ^CÏt¶¤ö©.㈤°î9IÜzšÜÉYþ”9È÷ ýQº÷ò♏°ŽÍ1˜»Jˆlñ ˜­,uî[òÃ9GÝËß úšW¤á//B¨È±$(®éŐᄺ}i¡-–8ùL‹ýá8„©‘q\!踁¼ˆƒüáö80`@ +@½qkÎâ¸:ØÚm”åIM²ãH¸¯s꒞³"úk%,4ŒdWÙgÆ"Õi«ÿ Äö{Ù¤¦"{>‹—éiR¸Ïð_ÍãÌ ÉÀьBü1 Fbž8Såz)Ä5I7-ÑN[$bÒèi„…E¼ÞeãØ+ŸÎ¬EH?Í¢ÙèÂåNÙ`gS,âeÙÎ[S1«(Ø_*$ÁŒªA㕏óȑʸÛ,Þn£97(«bÛljBÜ$úsØb$ü•¿Ò›u¡Ý´HùÅ£¶x·`Û¢[¯ H=ŸÒ \–v!¤V–å¡AX ;!H×]\‡èÀ˜öâNò- 0fW¸D|³nۣˑ%Â<ÉÆ¿G:Á5¥÷Ǝp«®tå´sÜGfT/oðՍH-ÑY¿.Dâ¦è +m±“TÐÅ6Ðə9كê$j=´]ÂÇòºüÂÔB<-!ÔµÚHÓ3þDƒ¾F¿™"ÁX*w)ú7ȋާVv¿kš0J<Àäéß÷2‚Ÿ»ñEÅcä6@ÿcçLÇÈ +|ϊ5ˆØÓ¾îO*š‚F"æºã¯èKTNéÜðáß±› ¡£«ã±ÐmĞØÑ¼ï ®ã†ãhïaƒw’}uw_±×Má¼D3›èì1:ñXŰÝ}½xýˆI1UŒ—N¶ Ç?âÂ(ŸØ7ï¸ +v%úã°í6ö|Ž=v3Mĕ 4q{žì¥:,!“콪«Lî"¦tá‰}õXľ_ÞÁüÞ"½õ·#%±xãÑ ³×óŸq\!íM}Õ5|¡Ú7yLýƒŒòcmFš¿G÷‰•O;,íSŠ™ßچ°kŠúA µ›é'HÇ µN¬ÞÇ{»-—›½½ür|ͼ8îQnHM Ü!º½‘s8b£‰ö‰¡¬-{pÖ í .†ëCÈÐòt<í þ†…”ÔlԄԜÖBk'5•š—šÌ͍qá¸ÖçMƵøÍƳ6n5Œù¸Õûq«fMÆ«.n5L©¸ÔòfãRȍFLÜjãO7s!ãM7U>€´}ÍCƒûë~¶ç_¶"'1}¯äYµ'?Œ…øˆÏPtùžÑ’±¢0Ú®9~¿íI,[Ž^8H_Ùü°ßWîë Œ¶‘–{Ñò7zÁ¸„Ķpõ]Þ\¥@`šÃmèÿØÞ ˜m­øâ¸|Ÿö¬ø—1Å湏]5–N¿~dTëýã ˹+Åϛ1 ”ot™Ó­ÙY ©mˆ7HbbÒ¶èÄÌp„×h#¥´mN­ÞÂÇÐ$1î=l÷6EÏæ—ãmô%U”¥·Ñ4¢¬îŽ܆5:k‰£}os.üiļšØ5ÕXÑNy1W–9xÁS@¨H=ƒ–G›"t=ÚÈ®['ûAã À-ì˜ÑPҘV0 òщG•K@@Q¢(åš +(×Oª ˜É¢xæÌ&WVK<–R„ ~­=žþDfºCV<öYò%CïHZðõIìþ «8¨~)â³Å5û ÓVYaiÈiñUøº¤ü„L¿‘“Uõ1ò¸ªþ ±Ìþ›‚„6ß[-Š®øXæƒecûÒ!ä}l|¾*¿z,sC’§ø$B£ŽÛKñ ÑH©þ)šè°±²ÂÖ<¢£±Å|É"ž—a‚îIÅ}5|‘)Ÿ·nMÁ¸8d +h˜PÚcaC‡Hã֎œµãFáÞÿ*îjVä8ã­qo„Ã,ùYëÔö»ôÍ p,cƒ¢üõ–þ}ŸûþÁºw ×çháe?wÑ£ÅÄs¨ß1ië´ìáS·ŒìÔjº7tÅ­ƒ%õþç®BX7 vbìq¶.ì3AÉÇdí¬sAï㝸:ëÑ8Žm.ïF8Ü]çIՌÌZ1º’Q]ÆBò½‚Ù=`à<üsëõ˜Œª@4¨X¸++ÇÇ,Ãm9ûb‰:\ŒƒÅý¯¾LÃ.:ñ·zQÃã1/P>Q¦/ŸòÁ?ÛWž¨ú±wçŽT¨„±°t u‹kÃ9Ž°Ž ¬u‡>?x4¿ÚïKk¼j¶øû}õ—ïýûéñïúm¾uü»C–¼1ºˎ?‘åì^_À2In„T‘Q•ýߗ´<¶¢ª?×8Ć ´¿€™ºÈÓÿ8‰¤gy<ŽTµ÷/‘Ê[vyQG4umÛ,P}1l5ær9Wí(„- +fÆD͋Ej¤n´S¹Ðn>g>šG3*”Å¥Èȇ.³¦-"³šQSöÏ0@‚ÆÑc§,ÁiþPp¨`òÙ#‹nf¥ÒjGˆïâC£Õ=ü&Æ~ ‰²±8ŠTý÷Lݤë—÷“ ZÂ>rõ?>†u¡‰„bÑ’•ËAÌa™ŽK¦ÜÌ1A¹åö‚KbÞúªcž±x7NÈ/ +¶Ó:K¥q‚LyÌ0¿D`µ»·÷ ³˜öËxX¹'.ôßvO>Ïè8)ÿd+½4´w#MCxCÈ=‘­\‡Öð‡ Lÿä²8ýºÂ9­ßÉDîÚÌo_e=½ñöÐíVã4Ñèjðˆ}IeÁÈô ·°0æ×Ün²Œ5¤…•¬ª{Z¶.Ž©¿ÝJÉñRï̒ËV]ïÿ¶ë>A½ÿrƒ½çÏÚÁÃupˆÿòG„Î7—SèáÌZkí Æ½‡º•¯²E%q؉:–7V˜‰º!,§˜ÚÖï6»¦X¨d1PÝT#˜@°yc¬Û‰aµµÝcIeÜÄ`µ%”"…¥#œÅ¦ßÅ'/AWƒä‘[ø²9&¹&Y#²LWH×ø5çם^Äŧ#›ºö»k8ÒK¾g£Â¼¸7°çËtMFÝ“Ü Déd=~[¡ØÃSE2“/¸R׎«4G=æJºÎ¡S•××RÕÓ5Ê"YD9Y7Ü幋]Þfþ…cEv ´`ï± ¤º!ÁŸÎ–IQU¾IÎyN–Ï 8õV‹‘ òsÏFAÃ4ƒ0{˜òEãæ‰±®Ÿ2Ú –Oè:¬š8xûþX{äýŒltF4|·@Gͽ&]Ô`‹ $‹U}!ƒ©O/_{ =œ©0ƒüÏ Ÿ’iun‹!ó(ù Üüw„c =~Yˆ°xMßÝÜnt¤-éÆіŠl+ÔœKEd‡{Q'OK¾8Š N€ˆ¡™9]2C¢0ŒˆO†lô¤ˆÉˆ¡=Vrº'°¬ŒA;$EvCÏhäiP2•ž”mh¤k~ûýt†ê \ïå!vÌD`pXS32µT¯JvøÊ(Y€7„^Cs—d!‹ˆ‹üôo± +J.;b—HN)ÌZoäˆ<2±¾Hx&*4¤Šï–¹NµÌ¢¤ÁíÓtX‘eùôYk}2ï!ÂVÁo›$‚n6×xE™XTßür?þp:˜i#1½×ڇ$˜VlÌ•JòÞ¡ªr›¡ =gQ©Êaˆù!û;ßML~ \=ƒ¦=¼ ~rØk(ÊêÙr6WÓbæÌñÕ.×)ê,¹*R¬•2¶ BSÉ(`Ô[;c ð÷;:ènӏ7l\»œŸ«ÏCÕw^’½ÎäÁ¥„NÒ¤`îYCÕÏЍ}ɼh°?ýDÔç ¨•oGÁúWÉâ4YtZ-¬3Gi#.#BiÊ 1á˜,_½ÚҎ/ŠvbÐp–Q*–©ö1ûù*#bó‘-Èy‹ë3±>[ù!+ñà$­ôN‰Ú™ôÝПx½‹‘(G+Ô:¾-ŒêãFŠták·Jk׍ÅÚ{´¥¿«a+q@™¿ó>'¸7É`+1þ§`žèC'¡ïxiÄþ[8c\•3|X¿Oueª¼î>ˆä:4Þl`‹ó–¶]݄0ïˆð³â`ËæèlÞÕÂ>‹ïÌ-šÌ­Š³ IY¾èåQt¶S »1³0 cÖÃÜà…Þñõ¸¹ßš4‰rb‚iÍ- _YÙwò@+Ùܱ+œü’c*8ô0>±u7¸»˜‡¨ÖV–Áä iÊÙãËf L6£ÎX!µo< Ú9¡©h]AƒdagqCdb‡‰Ü¸ñr‘CcˆCŸpla¯þc…óô\´ʒ0¶¢üą{Ù48p“;6§9ЉíKa²S8ã[ë=WãfáÂ×.Èӏ¸E±ßÜ<²:!U¥³nt/(®ï‰ˆ×,tÅYsˆþ‹ìiTÎtƒßZ/¸=õ™H2ïâ½¶Q§Dy•ì臼6m¨u ˜‹€\߯ŒD#ŗQ€¬4ÀsG³6ø‘þ¼e²öcòZ•L„álÆ¡*>¹!»QXE®…‘ØžÀÅ -Ž .~úÛøYon×yïÜ[p« ¨ÔpVÃÿE…ÐlžÃê C§Ý&÷’xuǦ?èõ{ϨJäU\[æÉî à·1r·©îF›½©¾/³\™Èwö¹ù+o³áï½ÊjžÆål:ÅZ—𼘠a÷ +“:pCµ*†²vTD8„¤ T_©¼/ÈV4ò²S%³fKPÚ]î{ÉöX‹û½ÅхÜ@…Ú@…”a(ø÷×V8IGÀMØdËHtó£ÿõƒNÝ>´w©… Á&dR©+܀”üòrõþ¥×ØKønr¢K«óÁr{œ¹%ó™¯Zê«ð§W›ˆ.{áH®U43í^ÛÊ/ƈ½)ö/FD^ƯÆ+åFa\ŒúIÕàˆ¹áǍâšQLüpº/Ão…Sßñkm\)ޘ]Ýç8µ/%ëü¿a Þs‰¨Ò?½—A/òö dý„»öåWö³Ÿü¨´’á1K1ð±—uä$¸†¥S7¸XÕÙËç +ÖWæR"Èá¸îïà + •K×Ö{ ÑÀ°oπ±>9hå¹ ßèÚZ(Þ¯¬b®¿š]öŽñv¯ DY‰ÊñÀIQg¨Ø +¥¡|¶²e¬áe‹h4Ër Öú¤ò Ç +â Ù oJUŒáfÅiP\‹® ’â3-J€|,ˆÌ¢TüÝsÑP‡ÿWh碡ȶdâ 0 šßE‘«„?Zöý¤¨‰„vîô5 뻩¬d¨¸ÑJö™ÔVh±µ Såa†dïpXV4[/aiàCoÀ#ýwü_X‚[Ýð7B-š-ëƒ1*aç9÷®4xÃú‚«GM˜’/…’˜íû‰–º¦p¸E޵1‡n´7:xî…žnÚª>µßúąé±xð¾Cy["ˆö½ñöçp·!ͧ!¹ñ·•ŠÊTVSã¡l„[Fh(ÔH±vcíƒ?őŠi6ƃYh]y…Éž£PÖ²LßVR†þ3.842üì¾èe¶úᗤXeè2úá—îņYnŒ2ÚÿÚÍa÷×®‚”®6ž6$ʏˆ÷€Ò²©,¡‰5?Pó€;6UY2Î-À±t않Ôëq¡°eQYÛãa~øŒÆg}03&îu3<¯®„ÝýÃî<¶º¬/ý÷°P«ÝáÇ?µäŒõQ&òvfàñ¸B¦è¾žâ}Ä ÐŠú‚~ÐüLª5Å}Úü[ɧ-0ÿôúrª5ÑA÷toÏ,Q+éÌ>+é• +D*º’¾ƒâöü+PÄ}Ç.ÐA@´­+ëþg‹ë†/¨ú!J˜öß@–ihº¯_|Õ3mxŽ +1¦ù4Ögc©hU$W`|Æ+±áŠm’¨Œé°.ŸzüĞXÄ\‘ø²uÕt^Ï4ó=ƒòiø-ÏÄ{à®ðvèBGuñdÛé;þ^Î`½ƒð Þ,™zçb½dG°Þڋhq^Ã|¼Š¿<Þhl"ÉmaßÿÉkØ8aüŽ„'Â"tlžù†ÉçséÙš^Š„ßÈ0èiÎÿ@‹Ð•¨uØ4¤ySBŠt.ƒÊÖPGgÚÃÓܚï¤9ɽ·•„ÜÄk`«?2„ýCþÕ°¥i0ï’t­Ïâº:âº)ÒÌ|&ñÓk÷«ŒT×ÇÅTH¼'KJݶfñ¶H³ü·«þ¼×“tX_§ÊÔ¯¼x0`±?€0MÜæ#«g N4·+¿áRP¼¨—ìiRDüÎÔÝvú_9c[ÛsÖÀ©ük`Gê4s‹B²@—Üd/(j%ß *º?-†š>½-wm9hz“/·ùŽS¹Ð—#ëTßï(ž²PѼ Q¡ jŠò"ޱvc»[P·o•:él ¼7u°~Ùà’,´çØÅOôNȶr|ª/ý²ßÚ§Ì¢€jˆ®§_[>ù}kðwâÑ@À€YÙÖ :5ßÀ«`’,¦*¯‹`@éÈoüý_Wñ´OÙäb€ÞSŸ±”»õ4‰¶¾N’ށF[^cŠé¸mò ¼Ä^«å跉¶½¥ÌçÑÐÞ´Hüöá»#A]EWÜ0œªïۇ¥õ«ìØ +[‡•õ¬>`3ÂGÝ·Óõ«Ô°„|RÜ4ßZ½ÜÃàFáÙâ,;I»—£è³¡ åâu@°G«Šã¼*´qÆ>Q+ÑÉå©%a]¥þQJów?ðאé5×$Nª9š¨÷I4ŸïXL;T{YjŸê´ ™;Ɛ 3ãä3hŠ2›ì—çÒ2ÒÅ ±7ò˜Ì+…9±…%$ù §.º²ëý‹¯Æ]o‹¬2ë?H?A~ʾ]ue×û_ŒºßQô‹k?§ô}"Ï.¿·ÒBËEÔ·x÷^|]iuî„ùjÿ¾®çÍCµ€hAÅ;s!¥ôO,=«ß’CÑ-ÈîïέøCúêÞ·áíÃè’TH'—÷ïøž>Þ;›^9å¡W™¶¤M·¶§çˆ?îI;X'a1wûË^4`‘®MlΫËã?¿T»ÕÐí˜ÅŒpL¹W“"uO¬éÿ†õ¶|&Ÿð¸þãŸì’@|À'ëþ$ôÕ¿˜¹×¸B ë§l-ìùNŽñe¡Æîì[üë>· s¬O}j£¬Y>öBÈìÅØyÇQpDa0S°j 돷a°:Å©Z´å°ª?úÊØÆ¯­:Ç0VºÂ×Lì"µÑVzÁ¶x‡amî[²ÿ’ÿÀeÝlp€x›™ÑʝbÌ­^Ôë +áèN±8®ÄÉÖ2¡“: S ±~fÂØmp.¿Rtµ)a냗ø„3•\•G¯æàØ2§> ÀãŸo,$}y`Ø/I,sîö(ï— Ž<_ÊÆ †`>™éo"ÄûnGÜ+¡º+j¨{ÙÊÉvJ¤!~´Ç-Àû… +Écãhƒi b‹íÞk`$ßNjõ8/äûò?oà»Á%¸ür3%¹Ãƒõïu8&Pׁ®+ÏKü]àÙåIa¨ç#CÄƒÎØàÐØßÿ;L=£vI\Ý’YBl^ E°u–ñ#m‹!,ɱ€¶ùoۑàò9EÛú ÇyÈå]þˆÛb.Öx|A_ÏmØ`¾â>¶;¹¹VQ°Yƒ•FûÜÉÀ]žÇõ@]mØØÑÀžÜdûÑ/•?z%ò¦[½wc¯cÜx9Ò xyìlG¡ c¯ {60ˆï×Páã¹kɟ'PÑænëP…ü˜=Ùz6´¬…S®¬+C¿c'm-¥S³ÚgÔË» +/®_`NRóˆMBVM›lÄ·âÁƒ†'Ÿ¥æ’¿ø_Ä·hµÂÑ>‚w1h1_ ÚÑRà¯èDK1~åç !싡â0~X¸Â>*óÝù,?=àQXù‹MŸ~MŸ€Hv›/‰WqzEhiÚ²¼ßä 0¢¡x炞ÀÙ«Göɽ´ŽMï'.b³]¢ËVÚTk´YÄÃ蒭ál­o»ru·EÛ-ZÚ謎ðGy½»Qäœޖ«$PÇuYdÞó +¹š~Ð\ùAC£ÃYS"¿CÔ­áDĈû)¿¼—'o/]w·MÿÅ˨¢Èkí ·'¯âl¶¾è»]kÀHAŽö柎¼_WêÈv݈û¿3å®܁Ÿp¿ôD2+ôéS{m—Mâ}â{ï—-· Kû)wtÖrD|äF ÅS×4{”÷#ӌ,¹Ë‰*Í÷¬³ܕeÐÍ+‘ˆJ²ãú$«+c"üsÝo\®)*á– Ø`†©ˆ„°Æéa%†ûºbÑÌİۋvGk»´×ôº×uïnÐ=·’ƒcK–„W ¾ð¢ lCmaŸØ}²®"åõúc‚ùœ,"4F"VÔí\Ñl9GÞ)/O’¼¾@zHxõ°ôzj§Z¶šžØ}2šhV$…f@öŠËÐ*ˆ{Bڐ;Ó¡yäXæ3…°-ÿG…bAÈ9ÞÑP„étý»c±25ãÎtû5t>^š5:„ƒ=áFõÊùâ´¬N¿^˜w£€¿wêÈ$"®H0c²[²R>ûwÙ*ËÔ"菴b´jø¼¸^ê"f¤…Âc…wb‚òañ™Pá‚棥›\-¬˜.ç¨F¶à*<$\점H°a"ÁD‹, H°!"ÀuÙÒf$W©² ƒ–í}£jxºˆï·.äÙpfŽiDŠß- æ=³PÅóp#Þ3ŽËA†=GF‚’ +´m½¢&mî †ŸÝÄ¡ +fÊÝψäœ$5·Ô"ãÑ,pg#*¤æ{1ó9U#&z¥çYwK¼^vè8õÎÀÉ9³å£Á§Ò$ƒ "Z‡WÈ r @³“ÒxÜW$â¼?žœ'èÃ9]PpZ™ëSìzù±‹ÝS-3 3ù¦¦(ÓÖ%Œ8F‰éÓ ‹sŒF_ÌZS>š?í#Së’!Ý!¢=fzHáqÙSìîÌ6â§Ùüä ã†"×ýQï…Xj‡¡§È¾\»VÃóˆkU)3؉sóöC,ôbþøÃ!ÿ³|hm҄BF¬ýð +Î4“ÓF+Ö6Áø÷ÀíÞãÁ–ý\xNR:¼õãÃ|«PÔðs¤:©;èO‰ŠJ &û•Pw}fCÁHj!fFAù¸ËQ¿økƒÃáMσÈjäsœJ£ßÀ¼½Oóu‚Ué©Õ ½¾nø´ _ˆ¸*^0©+’½ŠÆ=x8Tì7!ÊùI!@e¾w¹ûåž¿ç#ºzû²ìqë#ŽÍúæªõA’úä;ƒÃåÇ®ùY@Þï⒢áӌaþ±‡ ßûcL1‡r1göoñ IaÄS­œ§|ßvc•kÆjÿš +ôgʃÐ]¹b ‘%#?Y9PyÔõ…aÐõœ É1(r©¿$VüŸYÀ2”ŽŠ„õë8–è”ÖŽ+âÇWGù ý[YX­©\Ç(¯Ü‘Å~C¡‡÷l,þŸ”,ùr³ÜxÙöV¨8~ÐÉsÁ#Å^ ^ ¢ ôgRD3Ê"äÕ5R«o]óHþ¡™%$~¬R?‘òQñôHþ#T‹¤&©¨ù]î²ýµ …Ýö±¤ôâ{ÜÎæfL̙€€É +C¢âU(@ ` @ÈBI ,Šé0FŠaÜ mhu1¥†aJ*Ö­dX´ZÛ`±Y°Â`äJ€ª‹m´"!þ=„D!&I!™ïÿ{ÜÉ ‚ yvÞ;·yÍ¿o9öý»¼ÞoÞnø;Ï?|ÝüBÚzË$’["ÝFc‰bJÙl¤NÙ_N*¼²ª¨± ‰}@'«Žž®1“6pšk*ÐÖé“ìw»Ó—]A›Qì'׏"]´ï­jK4sR±t³Jœ˜T‚"¤ƒ~®û°!ìW­še_4̨êÝ]|kPÄáæÈ5¨`d#ò3ÜÓ1Γ@û–¶¹kô‚•)˨ M¸¤|YK¼·”tkCʲ/¶â8ŸAC¹‡/ØÉ†Kº‘ÅÓ*`D'¦®ƒâXÓWæg†ÓðSœnÆgK³oà,¡t°5Çi–Xqltý.Í®”¬=ßfÖsçìÚÌnÍ©ôAÉ:ï4Ìkj8ˆcٜû-? +ó†­#Ýö?ëٛÎ}]ºÌðfìéB±ö yÑìÎú´ÕÔçÎ&™FìÏØêț…ëÙ„ÿŸf Î +ùàԐÉá%Ù'Ùª}ªUÀgŸh­GŽ5Ö9¤æ“£ Øcú¤CøL¾4–-Æë,l»ƒ +5q”šÅbß£ªY‹vÀBgEÞ{ñ7¥©ä8š[ËC\}±Uƒa(.…hµF‘W’“&¶³CaIkhèƒa"ö‚&mÀÈYzâyhx׬<´V‚Á40‰`ŒÃ—o ²óz_ú:î©f•‹'^¼ºŠ‚z \[;L´2ºU²k§¢¥ÈìÕÁ[P¬º6*ÎÙyE×å«8À—!Çk©Zì•çë0äcè¬d°ŠBÀ.Á%Óà;H2ç$À2‡:X ÞïÞ§~›Úøhƒ;É¢“’Û¤G"VBMÙõ8´•†`°|¥{é +~Õt™¯Gz¹™ÌãÒ¸—²[%o{ Š¿@겈DëäžzÑ÷®î¡Z5ǙÖUáɓÄî^?ÅU03K¸Ø÷› +–Ûék•VH‘7œŒ<:÷oL^wjø´²E8ŽñrAãwË²cÝ=›3h}f|´™ö´.¯¦´yÎŽ#¥¹{H¯ËD‹M jwAñÁN­áýê&¨ÁfóËWs@ØWØÒTÓû sG°¤×¶fOô ¿‡‰"ò!ÂÝ °&kÒLJ¸(qµébÂr¼Áh¤4PVϏ–p”†/ܾìچĘ8W¹ åët•ãÂiæñ,®>¾cvÈwQ¦kžè~`¹t¯ôt7s|À\½D°¡Œ>$¤CkΆ8+ýeäp)¦Æòí¢ÑØ\ÐÓÀÎ8¬¥¾‡™ë^§®8®9xfôvo7ç î‡zŸ#q¬RrA”~OqÜ‘$š ÁIÀòaçÃψNfð×ҁ +¸¼Uvœ{Z6Úù*-j$WÉjò\ˆ_Ú¾ë«/¤Ü*9éíiV7ËX[ e(xù—ž'AyÓ5}.Uåj¢Ï¼úRЀy +ÀrïX Å·wìLwìKà…ÖžB_§^„Lšt+uœ¸-€ +â4üÈBá‘x?Q0W:ªà +柃tY>—Wª@ì_‡Ý÷ZjêFÉ&?¸áZAevŬÁÀf¤ä>܁ißù}Ù Åý¨+P<’aåW;Õ‹\ïîÒ>Àè·¼[óM· ÷QϽ}ÏÆ©_®—^òàý2ÂÌí,K˅ÅBZ6°Ï.$4Ãàf¡, ˌP®"Qï.:r¡^D•ÖG>¸;þêÂä>HCÝACîƒot±ñçn]ÇßtØZàæûƒ€G@4 ËqJßv2¹1)™¸P?aüÃðWa÷n€}¨F¯t–Ëx£î7/†âzý0è]¬…-ÅI]‡*ކúçÃnü7ÖÁhm̸âߣÎîÖÚ´sÅÿûÀBEÀBÿšP÷ú—º†§ÄÔÓjvZ“´ÚµšZÿ'WÞêðίíjð^ö®S÷jâ?ë$:ý=óÛÓÊZið֚|RíFO#¨qšÔvÜÝF—ÃÔDù]ïÿV£ƒÍÔ{\ÝG·ÍÔp¹º›¨ø7㷐$+á,¥ o†%¾(ë|š«w +íûcíÇ®¿ÆÂ*0Oãa FƒçkgÓ+Y‘œcúÁ+ÿyÔk¨hÊ©ýƵÛlrĶG!´óWˆi$éÉ+·ª:x2›c%iß …fá<)'«zj’Y±åårÚÃÍÆweÙXB7ÂI­/¦IvfU¢¢¬fÉd*ÁU¸þ»ª;Ê÷»·;àü ì¼ÃR±¦‘®xp§ÊÀ29>´0ç:¿¦àYí|Ò×Ýéõ„:ë—ÝÂ]FYµÛMô*aÚÀº!ž˜×‹$¶x9uˆŽ´V£„áµ×Ñ­ +a]rûÀaZlSá^¢\n•ܐmÈéxoÜÁ[²"ÁÎ"$–…s”GÆÕ>ŸA6ú1ÛT4L]°Ì6{"B3ˆ]&VVqùËÙ!ú:4?QÀ6 ‘—!^ÖV¶õíÑÂ\k6ÑTAa‚Vµ8?>Ê_6ƒ)›)zä՜V˜Iv’!`¼z)RA}rl%+B[qœ,[½o̳™¬«ce*þ_&„xyô–™ã`lée3Ó/[òlË£å³O²Î!Ø[Ž‹‹1Pr…,tZŽ`èµ³ ïìNDž´4Œ9À]XT¸BH‡}½ «/†C/¥w„@Qºà»‘ÚDA_Ê6³óˆ¦Æûs/(ë//†ÔM-c"/ún>W[¢ +ØÈX‘± ¥¡t÷Ù¬K-0-Ÿ©È”}¹ÛåD®¯’5(]»«¸7Üy('ãÍøÚ +ÂÂ.Tè…ÐÄP°ˆæy7î¨<´/Jõ©r§Ä Ñ#1ܵæ6 1æ0¤Zî=1æ(¤`ƒ7)ýùa¿sEc”9͇@ˆ—t/¦Ör +ì[sR +”–›]DçâË_ßpšÚþ(r,fÈǜÕÄ3¼·bQaÆÙ¼r$6åÏgN’s<&óŸrFâPæ½¼$ð †÷J}h ¯~kVI;×:Öö[òނߓ 8KñeÐJ¹ º`¤ýN¤M4ÖÚܪ£ÊnñÍ›M[âÈ2ÕiÃãí´c‘•A``CX?,¤•Že_Å‰è­ wÇ7ì琥2_Æ¢[ñ’øJ%Á/åQ.É|uôá‹!ua›R»Ã¶¥•m_•ÄQ³ÝE$nò¿¨4™‹#ùˆm¡³ò€˜~BFl…ˆfµ2_›îH…UŒ=¼uÕ¨=¡“P{?" öuefJ"R5™$R¬ÉdÒ_Y’”I]fJ@nϽã[—žúÖ¼C%ÜÛrò?O…G› ö3÷=þÿ„~¿@÷©%ìúQÞՐ÷ÜɁFÔÉO9“BZg<0P1€#–9'Üǖr 11¹ÖÏ]U›ôþ‘n1ú&#@ó|ù16ï%Ñ}Ñ$ëIޖ¢—¸\Ã|vÚÆöéjM²9ö0ò +¬~;k}²ZÛ"G&۞å=Áö©f‹¸}Ú_DQ¾ÁËîÒPÄäÿ°û´Á<¹Éj1o»<}ošŽ¥êEwۙ»^*e}ko–…<Íҙõ{î³”jÑdÌ:0CnHÁ ¼‚r&m²0Cmi‚dŸràG¨ã‚ÈðÍβró‚ZcD¤Ùöfüçð:¾ê GDµ Î|é¥÷¢ýxÕ½ã±ÅX›UblQTqD£qpÑ@’ +Œø‹Ääá@Ÿ¦!¡zÚÉn)¸À•ó…†Óຠ„†ŠÓឃÝÔª·ü5­žæeQâd˜nÛ=w‡ô£ÜxZ¶k¡@ªU +v‡ÿTÊÞ\!¬ÆgöHoV|ݛˆ¿~p2ÕXÇó6eþ™ìe³{ºU5yìýqaªtp Õý«€àÄ b8V7ò¬a•fe¿Ðµî¤Cg0θÐ0lòx•__è&ÍßLߢò¸7Ÿ['<˜«Šë—¤¢7%Љî î&õhKgÚÁ[֜l¤lcZ\ZrèËBùŸjŽDª5z;:q0¡³ 3˜Â„8äòf f•ìGµû/îÝuÕpì¹1‹’.k³ÊZ¤öÿ’5†“&>¼a¡ ×@`x-&=d)„[և¥Ca¿·¦º­H–ïé́KPç×Q'‚Ò(¸ Eý'YVÇAj¹’†Ã™ zºVÖ\ƒÈF³@Qª·ŒÊ &nÛqµGǶlûa ¼rbMÖRßs.DøÄ”";[‚(|t&Äu³1…2â^¾ƒr-^å§öŠˆµ;X8)¿høn§Êñ6>¸ù¯Ñ„D3fÖϧ]5#èñÚ³Éû’óŒÑ0e³;A.]âw/¡<ã§µuËò„ ë˜¼3E'F¹Í < +q +$ì|V)„\öŒTψoÙ5"íNî8‰Û +»ÐŠ®ôØÞv¶Ñ‹ÏpV»Ú؂ƒ|, qáˆ.¼X#VØ¿CK%ã}±ðÔO瘻3Q€º“eµb›&,R«Ç1Q†d`³Û­ŽŒÝ‚Ý20n|XÂ;¯¬TH¡ÌTØ¥uy61Œ[Æ1ns ?è€]Û?~†Èzhø¬iö±+ù\ŸfgY²’r6:Üpa_¯X¾Ì~qËâ¨õÅóhŒÛŽævrg(dƒÛŒÎef&¯`c.Á5—f?B€|1˜u¶?E­õ!KuŒµ{5@W?-1¿á¬* µÛh²çÖpõ—)óm™ûM™”؉|YÃÐÒlç˜)ØIü=^,øÃ\@õù°zg¡4º+ÐíºOCˆf¶½zå †9˜ÎÞ½åG¡£`¤7w‘^€ýWÕ©sèwqž†—û½òç½ ?õz÷IÄî¡lW™)xó‘…_mϑ>Â,‰Åâȓ¡²—¯ÒTы7;zý:•§W1[E~ƒúŬPc +‚D+."¿Þ²3ýÅG˜@êî´4qÂs<ѱ‰‡…íøë"½º‹Ø¨a{;ÿõ%EëÄx‡s™ÙŒá’m]ϛϋߪ+ÁLB8A@>{N kx¯ôÆx5?Õà÷W)»"Ñn£²Güݗ:N¨Þ»¾ü©'²¹ÌÁ’RÞ;½tWw¯ŠîÇæ.δ&£;/ÅÙl?¼œ¼|œ¼Oêøõ— ¾3ã>7ÿø“’ÿžNOï_Žè©2ÙI‡²rÝ©'/b,œ¿lWè>俱›…úo£?MüW‡Àay]¡é)G1_ÿ¤ÎH²g ~;oûIU¸Ž“ ~žŸ ">¹¼1bëXÅ0×8™æúAòü§D>_3ô‡ËÆF4tFxˆé`Àë›Ã6XÄjºe"”uÑIÀ›LÓ»Y G Ãø&©_݌‰Ë&Ö`!ìõ˜ÙÕ¢ÐҎ0cÐh&iª0{@^Ì$Í=40' +ÊRœ¡«ªà©>ñÚð,ìÑb˜^?Vž³?± .'zã$Ä=Äõ=¿_®O^@ÏÿÔ=Ä"ëÿö% <¨ŽÚܸ›^nH:êÄðÇ÷}ãM¢àê&I•ôλíD–¢&>TG…ôP†bHÖ=2‘¨á)t¹“‹ÿV´pE¶µ Fî«5­.URœëf"!sÞWÊ5OdVlC…Íæži°ŽvÛ0@a«k¬Â20³6ÊnqµE˜vÖB׈û„Ú£ä ¬¯ãù%| \ ý ÷Š©P4.1M'l¹1©Z +ÜxèÈPš›úV& Œ`Ð+žQ0ÐÌ+£û+J†‡R¬6¼ÚL@÷Fi( 5¦p{CràQÉǺr\7º7X-G\6¢~¼Z™qmsCÇõšQ¶mDYµfÔw˜Èì¡Ýäû#ӂ󮸒A;šNÕ@–œxÚÜç 6=8ÌÖi7NR£ªƒ@ٝP>xm@œà¢‰¬þ¬ãY³/d®ëë¥õ”M§:႒ ˜A*’Àáé`‡¸Œ=o$ ºššÖ¨äGߚür9фý0{ƒr»f/Ðev J[ž±Ynhµj«V6G»ÿ?x¼+b§'ƒæy%Ïd²$a½{Ød öЍä0-™XX†»éXýB‹°ñ³7¹(­ ©dT®MíÌ[L–†‘1¼*aÞRб”%Ý ç@éxF«7Ð:ց¨âô;ïIK™7¹ôè¡{øÌ‘h9 è`#:”Á6S$“ç7Ɔeô¬y ñ¯ˆ1$Ób²ð;Ùý„’SÎ\œØ­rq´?¥Ž¿È±Ó²PAL¥;âîX¦YÄìÂjëþ³¨¢ a`h머ͳ.zÅ7ÆiîÄû+Ñxãƒâ'쒍?f£‘˜›tÇ-˜PAJT&btêJõÞŒÌU,ʂ êR¡fû›ÑÐÂɄC +ÿ8‚èw¼ñ×>Y ˜¹„_³˜ÂÓþ" ¯™|?-|áèԎ§GÝì–B(‚èhm0‚èf: ‚ÜʟŸiB˜"–”,¡.Ív¦¢ÓéXù_4®iKic†ÒžiAÝ®”•¼Wv ¨ +˜‚¢™ŒPÉ$YPˆ‚£V¤“6 cpùôD"Îp‚¢ò 1â`ðS•*ÉÐ"Üu*C8:-è ½æ£d¶÷¬'-ùG«ð–_¥ºõ|SnºÀø2üüC ù~¿4*²üò(.;ñ¦jۀصG¦²R¨™r5M +dàzvÁáÜgÝNÞZ,溞6+&¥¢»  …,µcÞZ+²DµQªü'^<}.z| ØÔýK¨çúAò峁õ­€—õÔ.š( \ïxØOÇrOæ +ù-C}n!卉#¼Oœ@ûßÿaîJîK7uäIÑ%™Š tìc) ‚eŒ qÙæ nÙý“@¶Ë2K·¾›@¿G %aëÛ]ˆø°÷¡×ږ¾¿[˜ÓW©80¶·t„cÆrÑßÞ +íyíÂù ­·º¤õH€Ú06&2»óÚÙþB}V¶z_vð@iÚ^@¶©V·#–4šµ¬ókp·(ۘ Šå}Î}ªµÅ`Áß`!ý©Nl^–Uà€W@´DÁÜ{€Ý½à€H)ýHIu‚µÏZôV°f‹4­G¸ÖñD¡„õ7¡çZ"±Ö޳áZs¢!Åñ^›â¼÷ÅyužxñÕ 8¶þÿÂ{™Vÿó+ñÏûÞ:ʏèñãýÍ¿Ó`:jl±ù²ý4BmÀæé,9!‰ù¨^Àx2,>Kz +‹ÿå{<>ZÞٍ#ãõ›¡Ÿ½#é¥EC“¢-ÁȘé-ÎÎb)Hxž£äŠ6PN Y!Ûûꄨ"od£NR/Mcߛœ*(üUë<-„žÙӍ-iò›]Óñӊ²Z$Z~†æiC¥‡ãK¹ôûËqcp9ª*ü´Åxjsœ¸7`¡0÷Å*”îjãp.WÎ\jôóÂ~0ú„$Ó­6‹C±šPª']Uí<ÞÔÄ}WërªWï*Ö7’ÿVûãŸ%ÕG$ª«nUaUC—;|âì7WðÞC*N£ÒY?„Mè-%ŽÛ•c½åS'Ö%NG<ÉŽÃ%™2/ˆÁ¨½–¨êŒEºƒ–ÁäË£ +E¡ßå"žDù¡*Cu•)ú.ÙæºfPÃd˜~&_•c™å|ê_7šê<$¡ƒ›7K%Ž•cÔò§§ÃÁæÑÑD)%¶;$Å$$Vޜ¡ï×%„íTbq_<Þý—óa¼{0‰úô¾¯­ówzºP”ם![Y¦ïÐÌÞOþbòýBîZ×åŒI­*ØçkˤAT,Í?„—VLŠaúBVŽ_"ïŒ9ƒô4cd§#J Q!њ²Òƒ1g”A7ÍÆ™Ñ§ÜhA€ˆ41ð¹GØñù;‰Ñ|Î'¸ +; àÙ}N'ÔäéÄÍqÓ£­Ç"©]EÃü¼tn—!”~ËçdJå±!»H1ö_Ú6rv)³ü›+¹j†¾Ë w½Âý4‰z2 ×%!Ð¥ôÔÕè“ödDŸ¹Oæ$ý [!©¤Ž˜”¿HJŽÿ¸”Wƒì$£Á’žŠðè¤ËJ,xҊ'=äéFéQà ˆ¥+cQÃ4L¼Z8²ŠQÅ3У‹ôÑÅðKŠäõïâ‰c&®Ä±™K±,dψXÓEÄäÎuׇWó8™U(°‡¦x¬ÙÅﳙ”V›(ଥXå‚ۉêÆCq¹¥=½…ÅE¦÷È>¿Âݞ‰HЧ{ˆ9×®%I¹¯Ëê·ÞLº×ˆšŠ7Lå•ïnš·„Ä? JH'ŸIhì +•vRRè:öIƦ¸#d7½åÔû8*ρõ×´ë{ËDZGÎâ+X=®é_U»Ó;o JÉÞã¯ó Äö8éˆñ)4ÚO9ÎNgÒ ÿïãP'.Ÿü‰½¿Øœ;ü91Í÷às¹øÏøÎ¾¹«Ý +¦T$½ŸdÇRìú¥©*TsîsÔF⠒žï­äsnðÁöøÂ¨î¿Æ4œ!¦Ìv?nèl£óaiÝåâݸ´XNïhí/‘»»Ô‚tåÿ }Î×÷׍lÂ/Zh¬úcãOþ7‘ˆNƒxî ²ýo4àãóNs‚;® _Âjabõ„ø9n³”®¸yé0¯ƒÁ}pöwǂínÚD”³¸ëk nD=⻾¬u~„³L£Jo`:φ·hÅ:wMð4€óõÒ z…K'hRÄò³sI_4>$ÁGd¼hj•ˆ/‚-˜ËÈS®Ï·S°eÉQö£A9RQ)d•¤¥šŽ½ƒóã,i5£F–!`´?ò²Qïý÷_YÍ ò ½¢³9c;0©÷Ý*1Ìa ol½ü–DÄ ’: µ>QÈó~¾¡VÿâÆèÏC-K£>© tÇ:À=° 4{ñ/':V“©ž·¹-C²RÜ]°+¶°6n¬ß_ôÑô×/sW2܀ÕKX\ÓӚöÜ"i˜ªè È錴H3G‘y[Á*…U.Ô B´¾xÝô"Ïxg„aœ}ëÜTd‰+ì¿®=…sÙë§¼­ý‚¯v׃K€É“¿LÂȻܓ'ïߞúxû>û”‰*SÕOr‚ÀK’ôYäËG“RA|¡êÕJ\¸’ î,p›DYäHŒ*³¼ õþNƒÙ…rX «8`2B²C¨¹µZ]ë¶a±ÅXZ(åRZ‹\‰5P†êéT¼Du} ؎™½k2Dx½²7]²yg0L¸ÆIác ÓÆM„2Æ&&&xAgAîC*ÅÏ(7ÐÝ-zç–´8ärd"^bmÞ¤ý·)]œ`aҁûgJìóãÔ"-rDäÀ „7Yg®cÑâœÿt©ƒ–Aª†ë°zå j!ºl]Ài!ºjõË0ÐÃu$õÏ0(á–W.mB|Íí°fÌÞ ´8”†ë­ç1’Ê-:¥ŸXËA÷f+K€‘‡qÃï~°ÙK@Øo ûÝm…¤Ç“-È{ {?åJÎGªq¥T]~u«=bµXLî”ò뿗Zŧ+íðî4«K­ë\½Œwáêœl—_å.¸æ £—a4{ׁ.¶,£Ì‘uŠxöqÑÕøGe×ï\_›9þJ± +£º¨Ž-Z/êT¨S4ÂDÎÚ´?6C̚;;ÓúŒšÕwjÃóh¯>÷ƒŒŒ.õZôÓvdd°w²¸C39·ìÖ(ʳ, ÷v¶[=­¾Õ¡}ô39ŠŸÐm?Gö{Ñý~ŽÿÑ쪖‡ØëZÚ­l9 +¨u×2S³Óå”…¯,—¾²ydÌ&ÊeŸ' `gÎð†,º»¿#©b½eÓAzeɄº ý+ÔÝ,Ó½ÒÁ‘N©ëv2ÜW°Zu€à´Žp¾„Ú'äýe[àE‘˜$D$дB•S+ªñ_O2KL,¨‚¢KE +G‹5Nûâð|—›¥þG‚»À’žm*ž?W­nH-áŽroS¿4•»2g°à ²·À'á6=Ý_.š„]YÎóƒÞ"ZîD®¬15KP˜ªDЧö~‹¹aßÈ!‰G¡+j|ƒ¹;Y¥\‘Ï·Jìvª¥XPm’¸I_ïX8Pî]iQUe¼ÓÝL4$°/ü0ñ)à\…Ó¦ÿv|¯-’ñ¦ÕÇCѧÞÈû;î.]aÀ®©û€Ö\Џ9tPcá»gtÖçObžæ[Š ‹PUU)nbóñbpÅ~{pÝÈcÉDZKç‹!uûŽË*Zi·.C dIî3!û• ŸFéj Óª©i;YQ’Ù _ˆnús¶EhR\*à‡Ô— ¬:¸«Ã°U¦YVH䱡÷•i—.àB7o«ÑºÌ È&nt̂Jà´×tÀòåÕ w÷QÇÜU"’ð[pZJZÜ•õ9°7/Gá˜Fæañû!XÿD‰-ôNIW¢¨±SKDÊv7àÔ0‡ë†{É`ýÛ[x-Ú8‚ÝœŒñçù1^ÞDƒˆôPÕ.Ïڝn•ß÷þ¦ØåÃp«É óÈ äËqu­ä=Ë2¥nк–R·f,»4½äµ´R#ÂË62}Ýd~ÙɾåšOT#ÂSŒ~,Àgy°  x@㑕dT”»ÑýŒ%g*»«WTqk\êê•%Ôí" ¾Uqgd©,)bÏ/žB¶üùU øFé[¥CðxpÃìK£2•KLÅGËøHG²RÔ…¥mÐÜ? 0÷cüúhaU G}ì‘iW’ Ä[»YBÓá «ê‘=TûrÊEÚX×Õòðݱ‚„TÎ¥Ÿ¥ÔKÄvÆYùRéàž‚X)s”MâÁ?ò¥s3s +sTY}²;Q’ßNgÃØ_f™–²mŽÒ2vµ¶;6±òÃÃ[¾5S$¤[=г*£Bҏ&üV>ânŒÈeÿÆbõË gü ÛîÜ×3Ú~?BÂã,â¢÷uÆY¶#æã€;·yÁ'ñXk7\cõ›¯U§¾WïTªã0£¡¹4GníKF‘\˜tö°'ò¶CÛ¡•`ÆÔµª[R¨<‘¢áQeÓ9?ŒýÏf•m;^a7ÄJ´{à I͞åO•~‹WÄÆ/Zø³­Zúx–a‘!w ?ñt­¥olZQ¥Ö ydÓ¢Ï$Dm[ÜÄvYG\ߞŸ*Ñå£à´ÎÜ´–âÑçà8 ÈIUH†æÖ©5²ñî˜Õ<{šeR†Ã†KP¢8p52ˆK¾ën¿÷î÷wwujÕ»© ! FïA£M`hÁ BÆÀ4Hi$&C ‚nô5 ьs͸ØÇ„ã„múE` b C`Ûޒ Ž0ê4£6&·ÿïýîê@ ¸ä’I/§½mà\õÌöe¹–å÷Éo¸ƒs.[Å·s=ǹmâ\ËÁ¼›ðó¯À;È¿.c§{ÖI$“[$ŽªˆÚ¯yÏóž:÷È~!uœwVZ"£|CP=ÎÕmÁïàrõ†xß@Ü}$­‘£îF5ªÉª¥$5ó)žÂ ö‘FìÚÂÒÆ¹µ[ T‡0/ØÃ9µ†¥V‡š5=lø!‚Efދî +q­Uä\ PÍ¦û>­ 9n^œæÒ´…+Q(³¨¢6‚yá$dcHz®Ð0kØÞi¡‹ïi e„õô‹÷“mäxHyÞ9 Z»Ó„“MžWé™&fxßM4õW$Ž#:‡â~³MEAù{¸D`K3*ˆ®‘ 'ÔG½U!]¨O¨Ä›•-YïâO*ÐÂþ-üy5Kž„¯Ø-Z»:†mú,é%‰[ŠÙƒJO·C–þšæGQ/|¦lJ"Ýö¥ï@Ïß!ª½«çÞïøÌÝéîƒ`âۺܛZŸš‡¢ÍÖå5m˚‡œÎ´òÙ֪桮)=c:ß š‡„Ï–†­œóÆ(Xø҇£ƒVè(6qŠ+Ó;7C&'(âršÚ>L‡”ÿ$Å ‰Qf2¦^S¬é³©©’Bhe`>1ø4S¦lnés1 &lÜ®jaoâil†XGeë.Š T#‘§kÆÝŠüv‰„ ¬H H1Úºå«Ý®µCã¼ÈW ±žÎ6òÏó '>ßVNm]Ê ³L)r;¤õä_ÈqÐü^0ß?cvd›‹%fHl˜I’‰5Ó° ªÓF$®W;#ۆJh’ {7)ü‘yq'øXëÛ4l͖°&²ϛª÷d׈é hòƒPž%ˆâùÈw~5Vî¯VõßaU¾CË|é-Í0;¯CÓ +«J­É úïÚél¼ B_íÚGî6’Ça]Lµ×¶œ’®(ÜX›mº’µ¦LBò^õ0iâҏÊå‹8TË>-Èá© +ÊÍHp=]X çäóÌõ|BŸäi»žØ>õü2ü=¼<›ÄÞ[Ím.áˏیŽܔó́%Y¯çR®B#¡ñ)ÄÙk³FCTCUn>ñµ\â):jTñIø¸¼Éú’-‚úcmžlëX!§ØUX–ÄP§“nápдËdӓþ¢™]n%êz­ÒÔìP×÷èÀEÁ±ï¶,˜ØOQ)§Ë=¾µíص*‰p0i`eæ× C£*ìTó AuŸ9;ÇrÜp`-Õ£uúW êÒu~Ÿ  ]J{û@pIÃ¥9;A±¼@Fì5šENhùÁGˆÆíb|ó‰J1ÀÀG\µ#Kq/2`·_ÒàÃ}™é¬Ò¥ªðCuâùÜcu®KÍݙî·JméqÇÒ²ñ¥Äȹ¯8p(’ó¸Gºã[,÷Äjî/ßÚ5×rvœÝ^¯V4µ #K6»Üª/•o“š4p%Àh9Ï jhƒò{Ȥ“ù<ð¶ó˼%¤(gá¶«BÖ‰\­2mªßñõFú®QàŸàZã±Î­”¸è5õ÷¡HçhOrÛªÈÙßꡀ.òáðu L Š·ÚÆÂ;X îÀ®Àav°^h¡ ¶°&r'™®£jýøàÏh»6§ØÙa6®ßQê²l5=±¤rÛZ:žÖÚFºu“ZÎ¥Q9+V!Äü +:¬ŸKÆÙ}©há©&:ço†°µ*ú¢¥]ªÂ'Ϩ˜UFþc¤ôrø\¸3ƒ權m@QüS  - Q¹Ñ0MMÞ €Õþ=ÑXœ(Â:P«õJ‰)W¨¿¸*˜èuƒŠûSìj½×khõS ¨Ýè–ÎZóü¬¡RÖʾd˽ðÔ°êÊ}^©ý¹‹2²7jËÔá~_햔®›íYé*Ökã÷O^µÃ+ aîõªÖtŠ\öì %pU¬Ì]HNmÙ®ü›îÚ§)m@þrØjr»7£yXú>¾òSmÀáø›osÖô+ô›¶ëÓ¯àpÏ¡R‡“ߪCîjušÕ‘Kµžk¥ÊPîníöY§£ƒkµ˜žT×tǔpm¹†¦¸zOɐûæ1CÇ:½MXG¥j=X@À¿4,aF‚Ìfï†ÚÆ%T2’ñ Ö¥…¶ø¸Ík>¶Ú€ù溑 µªXêvÌP©©=›ÿO˜qþÄ8’²^´9k€¦¾ž4!´¯ªâK±Ç-ÿ“¦R8jýü³®ˆâ °ßõÎJú³çÙ)C^r•õdxÜT‹ÔëùPìˆO×_ïÝög%äS‰Hý¾Cj Ó!ÑL{7[~‰Ã˜E 3,ãvºÅfE.B{ÃÔØê¸:¤Ói?"¶õ&øùj® jÞFZ©äzþFZ é¨i¼CÚÖj×|ÝDmËÔ³b„ë$}ý¸ü;5zЦhC²-”ëؘ[æB´Ô}þÊ2÷xX¡›Ô ƒ£. +Ñ2cqäÉç1¬5›–›§½< ç£fë +­Åꍞ“êš\1£fî];ZÃzöµžËFµš½µ:©u-uö­ëýfƒv’‹äZ~qÃ5Ú¢?w }EÜÂ%áG,^>oÛ4ÊЬÅçY*gqu!Òr&kYÅÚ +¢k]hxÞ;ަàýü¤Oö£ ۃþl÷ȟøãP!Ç[Ÿûðù%?²ïº³OÓ@s  9è 'ÇëéՌ²µ#æ³=º +ì$z½Õ›’N"&…Ü«]æ¸Î¢.V/ ä:h±"zovË¡lyp‡4™·í¹íâîj”ѵÔ~ ùž/=##Ú»ÄF ìE [ԗFÕÞJ-3Ç{º í©¡5#ÀCŽ›$ïw©àê¬FavCFH,/dq­I¯s°k½.ögkSˆŒ"ÙÅ֑NÔb¢/ÔZ…GÌËñ˜÷~èÞ}›©—$KYRô>. Q5¤œ›ÝقGG”Ú{EM}[Íg¹á$Ôí‹ïŒz’½ÎõêFÑ«ë%¯§£_2f×QHi%œb‡¡¦¬ãC—ÊÁ÷áÙqîñö܋¸Ò#‹¡TtZôa»àiµüBG=(ˆkø¤&X~²CP¦mvjorÍþ?ÔM¼ûF¹é Ø »Eˆ’,*úª ʃiçpó@ú}íܶpn論NéJ6يZgrœh}Ul&vòQÉÈ»Œƒ°…òo‡tƒxF¯ô±Jà` {=êŠõ/aÈÈy.×¹-h¹¥#Iõªu)돨ÞáŠ!)ì‰LÑ#þ%7âRŠ`J}ñ)Žb‡‚%=Á),Å +)ø„¦Þ½à_Q`³öNå.€ïE + ù1 Û¡qÆêtŒñ +LP—‚Àt PÁA]±C¯€Ã„>!h´¬í±Jƽ²rFo Q¾jø |Á¯ˆn+菖¾>¯Ü)Àú¿ÄRDkÞ§®÷¸$|¶(zn‹a|)ŽÜ1CÌuUBŽx»‹ÞæLÌújä¯ô·{A©;’IÊIÝÃÓD1CFê…öÎç€åŠŽ’i4ЛMpÑzŽ^¬b†EÒ/X)±BaÖ¸`’X+ë­àŽ2бA£¥þ“°ìºpQ¬rHZ@¾'ÌâÌR5Ï&×ë·&Ž ÔñðF€T_W@HñÎÑÛá¢#ìHÜbr…¯Gß¿º¨•ä´!‘ó{]]‹Z¬TÑôrçUHð™¦ÊÆhµ[á¿¶CN®Z£ƒ*NmS òâ´4t/Ub¥ (ÖnðXTÖÁL‡¬>7+¾ø=ººé áz[ƒêì8…<±~ï†I ši¾ÜòíOnü"×OÓ8T÷ÐF·µ„r4ß3Ä5#Ö]¨÷6¯ÆÑì5Âà¤=lô‡%báV# ¿Ï\Þó$xºIõôɶL×!ògÎøo}±ÓúF\gɸ6o❝[…šº#aòayÔ³Îs«`¥”R…ò4ŒŸ?{È7#Ñïù[þ ÒpEÁ™?„j›-ÿg#\ܐÂz~™?ÇÀë¾u"ۏH +Ôªãzߑ .¦yŠúJõ=ÜAŒºT(LOÖïö?"OV¿Cm=–´Ac¤3ÁÒêVÇä”r×o»f /žÞãˆn㒟žš>Á`Ðù{áùٍ~néwU]ìÆ–¨×q U©ÊõeªÒ® Õ=Í| W«hñ0m:HXÐ!•ŸC´žAEñºÏÚ!vŒC_sé ¦•´-/ÿ®ûIäû' + i¨‹dhË]Kä ¹ê}p®â'Ô.¹„û-—åÆ_íü5Xd0Ò±[ôÊ#èV§æ¼C”>ÄÓW}ª±=„Û=‚w Èb³¨cIªÔV§-UçÛs,ö +ÜÑ aՅM‡aáØxöv»f½ìtî߅^ö.woe^õ„îßã¯z²wn¢ÁêyݽÊÁ [únàöìf>,WT;wâµ!—~U}‚*ý¯1Ս´-u2—{ᥠÊuùN‹gmšÕfV֜æÕ])¶övÿ$Èù쯶¥6,“ĵ.‚Vv<«*>m‡[ J»5†Ýæ_µì _öý±Þ“Apã‹\R#Ýññ€ÄIʎSÆpM\nr ì92‘íÅ([’2 $w²à[Ó(¥ŒëZ¿ãÝ·#úØ·U"þG×$Ì7cô–˜¼dÆFš C?,êÁƒ§ïœr6o߽⠧>¥Øk¦4ÜòÁ¿©c¯Á§ +–>póˆ©cæ›Ö¥¢ùEfGÝi-ß ¬"XD½f¼, E‰ìù…¢ƒú#_ŽÕ¬›Ù‚½© †ZÐSìgº¿„oK_ñîȬÖ}ÝÜõÂN÷çnÌvæŸC­b¥ »ôjÄUþŸm2Z Ąq=³àñ3Ѱ¯-Ô¢ªx‰èՄþ)s'«Ii‹›—qSè˜ä[ãcÜ*T>TÃÕeåeö@®|¨pZ°£·Õ.ޏ _òXUvUïŸ_øHù‚¬ë5…Лյ:õ‡*!€@v^¿xW£D‰Å_óúW Ïki”.°Ãl³²8Ü|Ъ‚9v#ç„ôun4xAB´Ä(!•2òÄq7CÆ&Iã[ºúyFxÜzŽÏv/)¦!ÝRX>uÈ¢¹U¬ïÄ÷Á.tõtÈà2!â…BÖóL[¢®ÏV§=Ü^°ÑÒ2ÉO!vÿ’ö­hú;&0  lÈã9W0z8?d¬{ íyë'`FN|ÄæPŽeMšCÝ[&1Ñ1~ÙvòÎ2òd‚‚gæÉ¦_QÁM&}G14š…õ„â ¤.ù<š¥õ•mZúŒ"™7+ê©“Ò¯¨øɺ_Q”U'P¾£ÙU'¦_Qæ«Ø÷ÇÔÌÚ½‹iw“X$ãJO«ïG@Ñc´zE“°QSÜ%€¶™b&XæEÇ4@ŽÊHe4…NaæéæZÁN,#}H’ãG312Kö¢—Ÿ¾LºoBb«o‹WùCcµ­0ý¨·²Þ…>zØüª£ò‰{(cï "è ÕÁÚ¤‹©ÊlìwCÑ3ï}N; C—Ãyþ +,Xª™žY áye¼iòµ¦P>ί^‰ú +¬~“ƒ–ÃËÔ5‰Ø†v’Fº´Œ_¦¥1ø÷œ‰ƒšþci‘WŽŽµ^áîñ‰àÁԍ€}wxÒI»¯õÉÎy$õJébÄŒÀ2FLѰj¨t¯ÒF"ñ~Ç|ò«ã…Fú©žAîô|½”pù‚î¬ +ã'5)V[bíÉ^E/ÇpÁ˜à×»‚J•ÓӜÿ+)Îöý±„2çù]h‰[Ã`Cë"—ìˆ§=Zet½Y‹Œòü´²áea¨k”ÒܵYB6<ÿ,ônòURìÍ­—oò Ì'¼î›Ð{‹ÐnE¾èâé}tô½IFx\šÁ¿Í¢Lp‰* …À°u\¬WfîÝÉűԮ©oÎÈíÐg…&¯?(Tf4}UŒ[ÕJï} Ü´Å÷IQh¶»ÀßÜ6⫑QnÉÞ%_}º"˜[Gò[Ä+”dVÍ¥µE¯1‚ñZÿ :£µ·o. wqxC6¢–íÔs-’°©N6Ødۇ<¾ôÓXò¦±erÖ%‘œÉÕ¢w+ˆCfÔÒޒ„#‹ÏÏ"ÓK¾UÂÃìZ|ï<â$«Jâ­0ƒI¦€ŽñíinŸƒˆVêg‡åð"26·u™¾¤‡„‚þd¬æQ!S„‘á°NdŠÍHûö +f "Aõ8"I=ϦT®Ñ ’ eù"T†‘Bý-˜A‹—@.|UgnßΡõ¢Ë8X©ÿÚ,š¥pSÒµ,Y/ÿ¢,˜TÔ«FS/®ú¥ïŠõŠaI¶³ª˜O¯V™/‡²‚϶H‹>›ÎÚ5×söœÑÆãÉë…3ÕèÁ€_杣/ü'hòS¡dš•Z+Èøýb¾Kt:éÜô×EŸØº^Ó¡Mó.›Û?κSÿÓÑLƒó~UÒv͛‘½”*‡‘Ž2¿jzl +ý ïèW¾¿ðW ù¨]~fǞøÑ½h°Ãž!¥ÓZ! Ýú"•ð…Ã]ýŽã.jùŸ+ ÷þ"Äv8q„ÕJàHg}1ó`|£ŒGé,é)n‡Èð*¿‘Ïyé·Ëô¦’}½Ê8{ñ‚8LA ¿€„üA À'k¿KÀ·3°2Eábüàd¿Oè€Ø}Êã`›õä7~§Ì É´dÇDˆïž_SŒ[ 8ú? -Äû®"÷}ØÍ“½Ù%ÑC„h64O}žó‘ÂW©Õ-jþîïU]o(5Z?SvEè!þVõIæFü:ŸŠâÿ4õÇÁþSËe«ó ²¶hf xŒ¿cm‹˜§ý¼Å(ÊÌ„àØªE#\À§Ò<ôÓś6#”Ìck(]äÁÆ(÷dÐwœKŠ>¯Ô-ê‡.‰8¶ž´½€#ÈpÚ¯Òûu†Ýƒ«Ù …Ý’ib¾­›Ø‰:H¡¾ëƒ'ÿE“Ãç-ÙÛ¼ˆ «LB¬™éùŽ!¨üÇ¡œŠÔèQZ,Çç…;ªâ9Ýà,ˆ(`l«#;°R2JשZ ëÔÏ^"ôz¯ÛØ)`Sø‚ŸÄ þ*õ1aàW¸d.–(©éAa+ÌRÌ™p2G»À´Èÿƾñ\|÷*õÁG£ —Għ¥èéî_‚ZèY#©å'Íä L?h"ý’*·Žx…œyvkOÁ››P7Üf푾äÛtlTö𓵪¸aqlÁ• Ñx«êÞ7­7‘õ§ž} ¥&‹ò³ëf«0Icë/O»;ý¹ £`°ýÇ´žq‘ûŠôã}ö>Ø!4™äÙo¦õ‚Èә +kze¾{êžR‚ »A¾©Å(6 +ˆo©IJ2× õ.)AlÚ7ß…¾©Fûå íEïšBƒ—…ß}x{÷ÓÙʎ`³¯Ó®0%ø¿ãQ ù.^Þö£Ÿ ìõ=—"YùYÄË«IW +P‰Ç‰FΦì-h úˆß¯¹©ÉݛÐ »l‚Us:­2ã1\^„ùìêj7F 81Ça*D¯€mr¿ûFèÃä^:ø#. «‚Lýýuº„óf VbTT&Õ¥6ø6q"l?W1 ¡ûŠå‚¶Ä·Ø¹Ÿ]vÙ"AÜVĹv“ÀH¡°Âû¨ßz”Ê6þ ̋IKÀ +ኯ}¡W›þ•zF½#v*¥ù”ñ}Ä9€*¤*~»üL»¦ÊÊi²ë~uÀ`€†„«‡†+ƒïÞÐh_RhG†LG†Œ¨+–ÙŒV=дW/Qr²¹ui-•‰ÕìQbLDÍ#²²a.S±Ž°L^Mä''hÈÎ%†#™wV’Yû¹!Ež„J¯~3_'R-;QÆOY+„ô‘&K}CÈC‡e†,įÎUØ¡ ÌÜo"‡Ó;3:¦ÂiÚu ¦3ªhñ0šk®!íÚõÁjWFÓÔÏQ0˜jj£»’æb<ÆÝ’rør¹Iòô(ž0Õkgr ÔÚ»ÇïFÜʕʾ¸âÜÉ»ûæá5›Wj*fMU=?•ò=}Êpb†D*ۖšÞí°HkzCÓ[QL!ælaï-þñAßÚ!MÁ 2'ÿ ñõ©ϔÓ5*2‚Ù¢sB€8¶“éª)¾òϏ–n=úYáïÒ<ª±­ð9Ú­×#ºAãòÞ%¨/,ŠÂ߯ÿÃG¯ÿËŸ²á×Nê쳸¯墅7l*·Þ“ÿšàörÆ¥^w¾yÊñ ¬ñº~,TÅp ŒŽÞ f7 â÷ûÂÜâ{º­ñg¶rïr•„IÚZ­sÄLnÿ–5åbÏ[›ûuD>-n#­é!è?ò­x&ýBÉýù/þöÄá¿ ž‚„óà!£áj½ê®mVïÒrZ*—~ί¼æ£Gм(v s¹}‚Þàww.d#–!À (z…Ì©wÿ¿ôœž>k7)(ºµc±xŒo[O´p7iÜûסÛ?”Y'܌Pߊ¿ëü:ìo6-žkÂߏÔϬ`âKŠð‡ýû!÷î[°»üÆØêhý/çÉöÿçý‡‘Êä²+ÿNë§#Ûãq¦0;†–ùáÿfOë¯ñÜÁ°Z´¿2öàÒ–w¯¦2ÿOïþÊÍ|úocÓûÿðýò¶ßó[î( #d¿êÛd¸Ïýeäæ?Ò¯4¿,d¦68ÕJK›WÝÓ|—P¸Ÿ÷ªh³¦˜‰|³y¥ñªccM†…Z—Ã}‘éV·ýõ¥û¯½µc×£xKðÀµl؟àÀ` xp"Û‚ Þd|hS?N0Šö¼ïËÐ4·4º˜?ό ·q µ8H&•L ƒ» ýpèú[¼ +ˆõ!õC°SyRBÁ*Ê*b¨4AƒVÍY ta% {„!ô0‹,! Ú¯½‚iü·*µ’Ð҆ù C@­rµÝêç˂x/>É½Ó ƒvÀÝ<ì=Î!ÍÌÄLD(ˆƒinSW(‹\¦‰ÈÄÄĄI½ÜTüTlPEâ/µ‹Š‹³{{ž.ç s ™¹ÈÌ|bøÀŒ7;Þ5„hF…ÓêÝ.·G×@ÉÝtW[µÕõÔ!£¡£–G>ŽOäÆnYŒ³ƒșÙ\„wÏGbNNpi÷y›º›¸]Í£¼b¯ +¯x75×v]r¾¸:ã~¤g²<#Íî/=¥æò“iã­f à zìoOß¾½é¥á¡4 +¿Gא‡_tÚù¡¾G__ ï/¹+íÒúÓiïÓ×èËð_Ì5—j™¨57?œ¿ÅßÂþn]¶!±­±½Î€]€#Öæä1²Â+}»ìŒœ‰™k”À†/ý†°!ÂÝk½àïx0¥}ƒ·1;õÆX¼aC"A@‚ìÏ* [ÃàPˆ“¥ °>àkh)âËx®Ÿ ÀêÉX2AD:˜¼Ä:,³—ØSŒbC&aÝA] 01X…‹D/̬¹kk–!å…þÆÿbyHÄ}ƒúgšú»áÓao‘î¶_ràŸ–Ëéq¯§÷êý£Ò}&ÛÆÒhôoøOÞr_èé-­­´2L„–„¼ä´2Ba¡`‰†„ ³Œ×o$A\Öü$ÏÄb“ﺜ@7½µÞïDªzut™äsr>y@ +ËIfÙ|Õ>k/l:Å?ö”!F-½ Îb¹ÒSˆÜ$â*ô@0  áˆfŠl:I"­â‘$½ORâ—§ÞØçc…³ìQUÑÌKX Y(²m¹¤SÊVŠðD­ôám_©Œ"ßNP«S¤ý£AÓü  ,nÑuº>½‰@ÁÂïå$ž|¥íHäòT‚¥Ȁ/?B¶ÎƆ“> šlÒ²r‚»äŒ.Ä@éIÈ)ª æÞ‹€ZüZD B¢ÂҀ4ª{{>yUòÁà6жl:ó €½b7ûjD@ ÒV¤P-ّùTxŠÁµ¡%º€bÚö.@/r­³° }L +&,5p {ì0Wd´¬®ºe‡•m—­••®€ctÇü¦>\ÿÊcš s°¥×I·s¾HÆ9=3ð˜êì`¶Wƒ14‚¼ÙŠp*ë „’WV¼Ø‰5sÅK0Á˜ž]†lÅS + Y‹aîô`¼Û–5„Á±mÎÁ˜¢hìيò'V HåæÄöÇLs¡W5fá—8œ3 +é"‰8fN'Õ÷ÑFÀœ3G‡n¯]Q8w…"½¤@f؇rq8gÿ,@gX‡tq8?¶í®Q-„P¿ê·ä1Ýa«ÓuÄ<¸ÒŠã-@)P©{:ˆÅ¦+GCt&š`'N`(5@+!¢£ULç)N˜Ïå©*ùÎäî×=™;ÜÒwma–HÅ`®0˜¿^šjïší» °G¦#­Õx,¼Mcø… +óç•À[ÀÿýIöäO°0Sù\{}/k¤ê'Úr|Yü­»?rDþá!‘Ÿ‡‰³×¿ ”UÌÔöéøVd —ÿj|Yü©†’³üU>ЉýËð¹õ[÷&!…>¸ˆ&òà·üj=LZl›HlÆÐýZ?˜F@°ª:ã'  Ž+„Y +¶ró ‚Ž¡Bô"UIa;,žSÕ<nŸú—»ÜTVŸì>CÇ+…‰hº2ý t|–/qXr ïdA†"¯x{Ù8•ïÕIÞZªêrø–—Õ°÷›ÜK û•êûu;„S +Ê>å}m wgtk#r¹ß2’Ã[¬`ýB¸UÐñ1‘ÇG´¿H݃+þ•êÿƒÃß°.Ç +—EG.‡ŠŒŽ‰‹ŒºGukX+Xµs7%ÿ»UE"ÿçB/#ßÁúî£ÿñ¾h?õÿ_Óúî£ÿþÔÿþtýH'9¯‚ÏÒÞ¬pÁý~chF~­ P#”ra (?Yú“ÿ²­Ÿ,õd·‡üK"Ãÿ¬ŸëGÿ÷'Ëñ‘þ³è‹ÿ÷'ÚF0$wÈ¿ÑÁgøøeߒWûtúØ1ÿ*þÀ²›GŸÛ§Ú>П^Tÿì‘ý½Ù€k…ÿøÈ¿ü,¤ÿåj@ä§xü0ý_×þg÷ÓÿÓòFü‰õÖñ–·‹ü¯Ncø‘K@_åzяœÄdNo‹ÇLNbæ'NGõ6¬¹}Hà–öW-‘–Êâ1˜ù~ÐíXE†]u·(Bra¦`0’á&[J^¼vã9Ûætò=h—t™š\µ6fˆé±ù™ +‘ ³ã·¤¢;ã7—ÌÒö' +tˆÓ°²8ŽÀ6¿È`ïò ›a:BC±m„ìp ¡–bf%ñøÖø¼b>GF>hìN.nZnncˆÆOœ;ÐxÅâ1yŒL2Ïé¿t¤V[ û¥‘K _‹~æÎ–¤¤:hoÞNxvŠ™¥Ï— _N®L¬»VP +‡SqVÇ%:”𐋠Z1ŠC(…1Rˆ¥ +'™OŒOÙJ›æuax`ɖ÷+ÿ©à¯”+Ñ£qˆ—žJKërm?¬]äèJªH©*¦­d>¶%k%–y]iKôÜBŠqîÄùÒý|ýùËb +ÿ¶êJŽ¥ùëÇô-S›&<¤üÅÆ±3º‚÷ ² +óÊ«Ÿ,ˆ'ÌÅQá îkðÔkc¤Ÿ*Ú«½©AO¡c»ð´~Ý2OvX°àê4ø+ñLÎD×»¼]„xpôN—;µ‘°469 +æý"}Ž¡;7IÌu + ¸ž…k|}GV·¿'Ô}k~Ù>šV·Â'ÓZÖðIõ % ûŠ•sè[7é »'ßX®v0~À^=«~ÚûVøFÚ·ÀNÕ½ÿ™jÞ Vý¢ì!Y +†8ÒµæX2§m×ô\‰E'¦ÂOпN›´ÒÃŽ‘¥…­÷Î¥úä_…÷SUN„ûpiµÙ”O¾³—HSji¶ƒÐ@|=ÃP¥‡q ïœtÞ¹¿Ê$ïOm1]¾è ¥OÊDmRÜ´ +à$ŽïÊØš(3íû>¶*·MÜ­ô0TçÖÔß-„•©°ùP®ØàJ ñÊàaƒ½‡d¤f’³/=M¦Ò¦\2óކM¥4Ÿ—žÓvÚzúil!‰'qéerºˆêÿQ¬ðËFI¥ƒ{íü|îe'ąðò¾uGó97¾d…fÂä`+\»„Q›å¦ƒzŸ€Ç…9d•Ù‹i¬¤mþü¤êpRTÅ/PSæS‚”×3o–"ûÜ)ÓñàE sÕd·ÝèªÆÅ:Aæ±/”'%Di~1kx’W­™_¤ª«‚÷ÃÀÌÕ³Qý/÷5gê’±ìµ ùá%Úýâpùí{XÓ÷_F7UõՓ!0¢yÉ÷IbìfKæb­qõÑ÷¸Ýl-M Þ³ €¦Ô½*C…ª±HøÄ ðsn²¤-¥‡Ò»(6f#+LöžU +Ì ™“ +×Yj¼Iª‰SÔñN©Uvô Èw -H(:qMS9S]üEÿÓÅÐâ5Ú¹t€zÅ#—{g+ÂãJ­/ƒ‹0ïxÒ¼/ŽT5e"ÏzXpûhV-¿çÄc—ÑRÒSPIk™jCL;RúÅfÃÍÉ¡e©òÌ¥Y‰ÚÊ%h-®š6ƒ¡^[©,½¯@|²  `é|N:Pãȝfë‚—´°Õœ9¨¹éú«OV¼a‚±Žíc'ïsÇ!HG —Í:43eW¼”ÝJoªŠù`!MDƒÑ¯ÒùÎøª¬ùUC§/X³¦ÌòK÷ â$Œ›ßóÇp¬ñĄ:ݑ…9JD|Öxî®97úÚ°*|`†õC­"PÏß9èŸÙ,‰Š?@|‹¾è SÄÏÒ 2đ†ŠN'†v'!N®n7átugÂI+ˆÙ &lúÒµ`…g¶—1юâ|üzX²JàDŽ{2J‚£ºÄ!L<"/‹ÁuÝZãJ"’¦)N6caþ/Äl;֖]6¥§; ÖtAÄ’G…øåƒ§6‰£„c=•9AÚÍ¡ú–üÍ +.§3Âí’HïP*.JÅ=bq¯Â_%W#ôlCƒ›!$¡9YR]€~úUZõŒ(¶¤`ódš"Pÿ!<,[ð“AØ5AoÄ]hRO ß;=tXàÒz/4sh¯‹ùyá HñÃòfƒûgB›·üg9üÊ+£Š¡W'HÀx$n¥Ön˜Å•¾Io¶¨®‚ü·XØâª•Ĭžp_fEBŒGUB&ä=QLÃԆÜÔRnê,:}ÞÛ©o`¶©oÜ~('œAèÙ5¦ü*ó + ®Gq݇ñýmGÎ|¾Ÿ¡ên}OƒÔ¸õúºßW²”ó¿ðwÄÙÚm<­¬em­n6ºÎûcaטïPïñV>#òüمޮe¯Ý˜öæ1™¯*W{0ÛQåd•ŸÉÆPj;3ÖYo'2†½ÿ—÷2gÉ1 ·üqQÝ@è8IêNòý·Ì—oVÑNËðcqsù‡ø¥%ÕôsçiÝ2KOyµºÜÿµ¬*<)]Hr;øsºC³æiÝ1Úôí[—kÓbً&+>nÿ³¬F;?ˆÓ¢Æˆ8^֐çfA°– =VIvÈÅK8¬{ÇÍ"xQ÷øöÈÌÇä=ÓË»µ5b|;~xç_M|1'Äb¹æ²¹¾2UŒ Ÿ\„àÉ{ßÈÇãÈ7Tãòò3}is?gs§E5.|Ô-7öLJ·êÕ°·+©ÕÕۅ×Ѫ²0“©£ƒg¡Fd’‘f[¬`pKƒfqÁÃ8rŊXÁáЎqY”§ƒg D{9—Xô®¡# –qÎ ôô8Ù£Q;eÈP6Ÿ%Öñl÷²¥lådJfQ* ·¥‘Æ3-£Ûir#cš—½éÓÎ:j:ÒR‰Œ¸·Ð ¾­½Ó¯ž úÔcƒî±K§|&?R\v!ø3a²0ŒÊÁ­‹ÑA–7T–ròŽj\¹™…Ô"ِ*©ó8‰µ¬ö}÷ö\ÔtÄpü¶©"c ÜèXŽû®ª}5ýx„Ò0=É×2„’‹Q’ù]ñþüõú+®¯ÄùÚ|ôî*\Ç2¶‹¨h6ÇBµ·ººö“øÖDrhUD‰ƒùq žd ÀÙ/V¸<ӕcÿ`hu³‹1«y[¤¶E.„$î7” L}-"|½ùaðçuU!ƒêOÓÏÅe{Å•åfž1Ö!£qÖu‡ÇÈ™€ù#AÂ8q·´f]ûãq ê\DG@—S—üÐf];pþì¢&'ñ¬H?Ô½ûҸǨq ,È?8Î%oe[°ßC¥=?ɾ¸‚|õ‘HFß²çÑÑ U!ÄSšŽÃ²´ž€á®®ò½íwæSé'잤õ›(ÇQø/ ,Š*Ë«ëîòޔ(áÏójóG ò–Ô@X”+™åÖ¡\ã.±mcÆQ‘î¼&_$Ü6lQ3iôÑR©fžBDý›‡Y;ë3†YÇ"ԐëÐj[©b}ö .\M*|õ,â*c¤i³ò!Ó«Ž$ÒÔâ‡êÉ"ǂ’@êMSCôvÉ,—?2œZ…¶*Ê¥lÆ- +e¾|cþ!‘a³+ßăš:D°Œ×.ˆô^`ä{KÜ&\ø±èÌOäf©àÅáÔ *bIM,³7’SƇޟ$”ûK3ëM¨ZiµùJ$¦§áåË«â(B! b’ÕfÝðŠYĒh1ábÁà© &Ý®X€Jæe‘2:ð±JÞRœÀÚÍg¸Œ +Ñÿè²ÔTdZB“,®â|xO¨ ×uéÜ…–®9ÌØQ娔Àß}l@Çɐp¹L°}ÀÇK\€]wÁÔÉ¿¼cD®ù\vYVqbۏ“ +³ˆ²°}“ H<<£Ï ôÛb£þA`ë`U¯¹Ý‚há‚f!K4—F8ÂOz] v6ÄâƒíçˆÀ~œí½Õ=Ò¤—pŸbð7¬"Š…æ\€q>9G: Íãªûô)ƒÁ“Ï”¸@qnbU +—u‡Hà‚);ìEtÉv¿R†°ˆtÇÃÍ ô*O‡öZԎÙN1ÞlèKçbu$—È~ÞÚWU«f`qxmñ¡Ã•«È†[*˜Ed<|¢Å4<ºÃ=ÃuåX¤`o›:7ƒ·.&`Q"°ÄdA¾mÊàš«’YÂ÷ïËŧ CçpÃt.[T͎ŘCiap‡ótèTÄskT7 ¬œUŸÉ“‰3RH:De~±?¨q”º„dk˂ÿ÷D¦¬qB¨“ûAé6‹Mž^+!©ËSˆ2ÛÎ<9ò-"ã!¼½ X¾½±ºå‡¤ƒ¾Ë*ñÚαT²ÂC5ª«Ž‹Q¡c¡z¦K»Q0f”œ*4ºu¯ºæ¸K¥¯·é2ës —>•.kåMq5¯·¹eËOŒƒÜ€¹n–Js“»|‰®ø¥¼“$—qqÜí`S4t*`%–/ñå—Xe—Ûe˜s²Ìz¹hÏ˗†³ß«*Ó0"ЖÿŽKvÆÙ¾$²yëV~Y<–í!•4F¥Þ7MAÖJ ¸p±›ÔFïhUa½|?¯euÀ~T2y1 Ï&Æ :Ôd„yڌŠ¡Äî!PD&EÀÍmL—çÉ”8´SЊÏ7%4ùð/·¹tbß°+êæò5㊰†ˆ·1•åB}ZߎٺödœG²@‡FWÃ,‰Àȶ#L^agçµfՐ8ú³S€óHH–Ž$²ôrõmJk +ùù… c.Ìëçã®Äá0ˆð•bNÉÃÜ> ˆ½ä<¤ùiÀ=9¤ºF‰;ßá —£¤¢¦‹7¯+#»—©pë,zr©á>¼^—Fx‘HzhœÜõ\Å‘…oWm.OOB¹Kðõó¡ös®)x?SPôr•]Ù'9ãâÒFAGñÅ%KÁ‚Ô)û©hUÆF-‹Ô¬@%²_uä—UiRÌ7y8š”s ¼™¥±k(°±fÚhÂs[«÷¬C‚{œWóš $*['¢i4сÍÞ[(Új]ð.ͶaêKhùV#ú5|;»d•DÖ¢{ƒ(~çy%4Ò½|‘½‘ è]ÃïCŸÇ-ÿˆsLäø‚Z~:Φ¬³ýŸ£±}z·Ð긵뻘Jrٖ±ÁêH¢tbì~ÈØn²U/!­æ<)hdÉÔ ÍOšN+¢Ò‘ÑrõŽ U/yBGAŽŽÞjrZ­‘ì ?ÚÞIN|'§¼’=&ئwg´ÝGÙIU¯=(üQi9x8|§/íÃåj}òýô• HùÑì8^K‹FŸ|>={¾Äx/úßéÝR¨j^»¶r<ú㏮՘Ù?A}é^¯AÿFIã5l]ڟe"'‘õ§7ðî »¼¡²eü¹ÇX"¨J½÷•ú KÔw䱀…*ÎØbŸà’C”©?ÄB]Q`!o’sŠ>²€¥ÎZëØŸYê˜QÎW‘sâ± a­‰dæ´zþ9¡ÐÜ(–B.‘ŤG{·5އD±^Íä]Û¶¦ZõVÕØÒX²;ޘì‰$°©óEÙx¬úìŠÂªZÇV¶²Ñºl HôÛ!Ê(ŒvÈežÊh-¢¢S-Mn#wš|fq.—îè]/WE»I1ÐDÙÐòÏ«’̚aÚʍ4)àÙëÝLð+¬ªÆµœ'øˆSë™ï q™¼;Sw†_-h’õ#ÈÔVäÙÙº¿ÃszÖ+jfÄN.?¼,hˆ*8¶W6ÑC¦V×2_áÌÄ®Ìë2’°>_z²nT§,«ªq=ê×4s -½ã–#£П«õT'O+=@ßGâjO³ˆsã| ”k–ራɂé#ÔDÂ}ƒÞdK„üñÈ´¸è7¬„ÿ2ë霸g9ÊÊ©ÌW)NdšXr(÷õ'Õ6¥‡>&‰*ªu~)%ª¨PIk±ÁåÉ© Î$?dZÙߤ`HòFPÛÿ®§NE؁`9ã=ß(ÛóÓÇ œg§ã.=?=|ÛáÕ=逡™™áòB–ŽÉ‰SpƇ!­­ÕºíSÏ_Ô92mò}š6–‚œ úVöÖáWƒuO~€ç}•àœÀk!Ö4 ˜ð*%_¢@^ŽMËtúW πD$ûa2/eÛ-Ò»G+=ÏFjˆˆ¿®蝷&ä+¦œ'rìŒõ£¨Ðƒ{ÌjLþx[ÕNÝ+­R|W“ÄܜpbñšÐø—´õûòÓæ’w=y¢ÐzÔæŽw„Üѯø;ò £Î—"R%&Å/BW“m©ÛÐÆ%ÒI‰8“³&<ĘLÌ©oEH€«½eÉFkrD•@Àš,\AÉHŽ€âj/B‚ÕE·¹mS€©’rÍßd¹û7Vd¹04•_| ñΚ öPŽ?{ðÀý9²- +í6<6 öaQ¥[·‡¹ŽE‰9$ ÈÄãHE\˜Êá7áöò +åÃɘ¢/Ò¦Z]ñ¤†\ôÀac·v—7MÀ6˜3‹#Vk»ž\Q:ü²Ä€ßµy 6'†„Žéäá!F9=”àäJ@–ö0m—³.á?½^ãQ¶©#”¦S\ÉO@î?…ã×7ÆcÈƖÂÔ¢Nð©ÉÌxcfàÂzåÒÚGI Á_µ9'Zzâ‘φ>EÊàðdjóApÕ;{"¨H—ѱ—`– e Éóz!… æ7[3›{û¯çv­{ûKMÕQÊ÷áôaÌ[AÑH$‰—àiïÕ;Ä­–Ùl¿fsR­—ø§=X>6tG©aN•Î…:» +u~ë|ìvì~ëN|ë\îrC;œ‘Îç$¼¼ä: üÍjôW×Å׍Àµ5ä>DZƒÀâò‡±á<ð,ŸØìv.°·Å¥ºøé·Â©I¬ÒU™.ÅädÚ¢^ë‰Ðõ±JƇ–O ûJ ázØœíáoi†ì»è +u|–º7Ò¡sÖ"X±‹ÑÆo½ù—̰õËwjÆ ®¾‘PõUÆp» žüKµ4Àôª`Y)@¥õ;«Ö[ÏìŠððˈ­úDÄIԆح`øÈ»Ãðȃuyõ«Z‹W‹-Vq±ÑòÍiDEÕ/K{毲Œ*…¤ü#ã)ÔT©ó]ôXœº|×ʒ.2IüǦƠ=Ê@wpm¼ºæÜ^³ rè/·èr®o `f_rë0J9Ó×v«©î¿Ê=Š3ƒÃ¡F0KàB1^yaCnÜX›¾Ã |ŸæÿÓÀßÉï“ûuuq"ZŽZ”v€;–Ü={QÕYèÞr2dŠ$í;‘¥~¾Å×n¦—ÄuyP%šÊf-”ӝÑÅü©Š‘E +Òëµ +Ò/&=²l>FOv“Ì{¥ÞÎÌè\E1?häî^IÞ U7×#®šO÷'ÖÑ,ޞëè4±íÿy[øÝóìaU‰+ØÊˆ1”ÔœÙMxë@‰l~Ӟ—GÀÛ>xÔ2^“ˆCãß֌’ÖVNoœð·z ™Ñè¯xc“Ø!ô·ì7Û@öpªÜ¶i`Ã:Ic:ó,‡ôôF8Ò1Ë»Ìq'ÿÌ×¼4)|K…ßÔ2¢_mk¦Cíɺ—Bâî/<вC“ãÂF3~Q ÂK!•Ôa¬îÞ ‹KMJ§+ivÚðô½ðZVBŒjª{±Ðû3ó§:ûg»Ê^~wVcª“ÒõNIïçTdä\<›$W#¡>…hçèÓã¾ëœÊí.›GÝ3ÙyÌ)ÑÉAá±G¿=ނ^7Ës‘Dº2tTa'ًªúÇìô,iÜ:$‡Ù]ì!Ô'ƒ~«2|žš+ ü“0°*b.䚂Þ̛¯.‹§ö#Ré²~QϺÇ6ODcdýf¯ Å㮋’3SÚ÷® +’FžE4%ç Ý±G<îå{ë“8‰RØ Ù—ªF2%˜àF⠋¬XÎ/0VjÇE†nd”±oV،rp`È¢ue©MCӇݡ£ñ (1rq5KÔÓHèlUHláhÖЗÌ7óâ~v²¡iŠŠ¿á!ÁYD¶wùkH»’ƒü±AÁ$(mË`TXDê®Ñø‘kw¿|Ô=LRÚÁÀHá°¡H¯n†\­!gç–Y[Ê¡ÝS€²ŒT²‹O( Ž Ć?™ImD1ôÈ2‚ÅdîYt²À² ²È<ŐUY¸²õɔÄætñ!Î(:%u+ ñ(IÆw4Ÿ3r]î°ð›nÖ6Þ¾_o™k—ó¬â÷ËÅãŠsGo-/èdµZm¦ +*Xˆ?çHD–¢†* fœrèÆ«täðj«µÐ«¶¾  ùÜà•n‡VaMйúUhzšÃ)¢Èlà"mÜÁjl!çv+›à×TßðfèOŸÎ Sl¾³ Û¡uôÝöÊ<oÜ­ï¢ÍPTØvÝÛ6 `[4°\íö=ýɪTàÏÀuŸ"¢ë:ŠØ]YkÖ¡=¥„­÷DzBBï¯T©¿"I:–—KÀJҁ.Ýè´¯ˆ:'ã¨E€ë_¾¬ê}g¤p*PŸÛ)°gìÝH©M?Íu~{Î$âk¶•Ö;µ_Y Û¡sÈYÉΩ®…dqG¨slêçM”oƒÑLõŽ$óHÝɨÞüg©{äA1YWvÒ7\pÿN’W]€ûØÍéC¢0Pь ²E²֑–šŠ•N{¸qvՙûHÇ,Ã~u\Y[ƆŸÂ×uг x¸”<ÚZ`‘Ç9™àÖxG©œ d!ˆÓ+0¶~«ÅNR£¨qLºñ¯ÕL«|hÄùkõ1ìSՓÉA‡ Û¡†¯€œ9áïCr¹.AjæT ÑÕkžût*È©|õ㜅d<á~EnÖøŠžÏqHH²"›E Ó,ª*/Õ7XÃL(!Âڇ§¢ÈwÞ爏e.Sû³ .û6ÙèLè_#l¦kk|LìC•åD)QÔ¾‰ÚÍÇ@óq$ ?g®Ê­ ­hȗ«mYÑ$‚U]Yi´¾è}…¾¾QÙµ§ouûIª_ (;ύèß§ÞjÈűÃkF(¿‚‡%€êµSš44Á;¤NÜ1e¥ÝPé i~óÂýÔº=—ʝwÁFŒ1¦¹Ä–Pb +åÓ¶AÎÛÝòøOŠ™UÔTÁ¶/xu޹¦ð.F‘úŠrqéø¥‰¬VZÚ&nŸ>.¸t°¶¸ +$߅œ7}VA»}àM>[D° D>é•mIóH´fÍU~ÆH[sP©[*í¤ ’׎„áOQrÜæ‡Þ)Hx±¯‘Œîša×dµ³¤ç%m”˜$•*¿¢m¨Þ‰e‰È)ïö|ñÃDEpôw.¾˜”È1Mðè%vsph ×eh#‘…k@¿]1`i†6Áq†"ÀÐíBHm_P­RÀb‰Ð­aZÄ8&“è%„‘Ùç7ÁiûÐvʌxa8„ýõِzGh²–-àÃ|Ê éð[G³S‰‡“1æ… ÃÇ*û¡}Ñ¢ˆX©¸"º4súhŸŽÃÍzôܓX™4Í6çHpßKˉ?¨Ñç×ÒrpêM²ÃHó“=3®6™1ìÍê^úÍèk䯣ÛWQÏ]7‰R×¾{}dßHÞÉé_C¥Ki;»9µ¤ª—µpïATå…Ü׬ç`Rd$¡ªDHB,5Ãù|ß6,ƒÁ¡Ul^/µ/Î$º%AKìT‹ÕIkK¢¥ÜKôœˆ×S@»Ç’  eàèµm+ɘŽ­@ǍCO²ÒýņݥFâ%¶ý£¥ÔÌGPŠ5f øà¿i`™V·2ê1eu®WïhCæhµ¹2ÉÃ݈qšEŽ‹1KϞJºWZní–'¡ÓÍ©ÌF)z—A†ù.J¶%nvܲ;‰¿†ÄãoËL«ø\?…û¾íé'o•†6TU­ñ*bʔØ+wwâx*½k­^¡N^5% Hò½?Nb`f’œ}yb[KÂ5,Räõ¯`uý,C ôï‘ápŸ^'ÃVbÄÙKÄúso… Ò¯è]ý"|ZËg¬q k3ÙBs#^mÛ ðôá9bN՞»æOºÂÔ)ÊNÿ Çl¡'l§7Óï«åæá½ëè騔»Áî +2Ãñ–¤*›¿ß>E.–#$ï¬ÉNµv˜¥Š|Z!lYW³Du(q +®©^AUó`èùW5ÍÌövg)oO ~Ú[ÂåpçY–of»`u6¦ßNi½¿Æœ&'m?°:­xOD¿vëªnÀÍ+¯›U¬©‡¦)®í˜‘•B3k˨VÅA|s»B8€¯îD}# åî,øµùË¿¹œ#âÃ{Þçqï'IM鯑èìDù¥»o<³¶#³à +D ý…) +ïٞ"¯ÊˆÇQQÒ)Ù¬êC);H-¶d–l$ùNÙ â™ù&à›gD¼9nËswɃÍÓ÷F)ÍW`ø$|ß^‘Gã¢ãêsuDàº7–5–nX_\uÙQ’¯À-¬î~FN^Ӛm9°ªj„i?.–îx—$§×F4ÑM¢ia&XáÜë-[æq”[ú&qàpºfXÕ¦1UÀøÆÐ{[{Ó_ÿ÷”°áÓ=¯ÒƒÕõ0(£ž^$7²˜s7I˜.sH„Ct«Çg?ÖõE/[k­>±¿Íﱿ‰Öc¼¤ šÙmJ_eRçúŒ13Ýù&ZïÅ0¶Îü¦6øÌKj¬‡ëRú鯋vlú1m›Ç‰néxÆk"ˆ— CuËÞ½ t/íH‰Põ£ãdƒ×ª´ï*¥Uúÿšªƒïeà¬?3‘2>nHqŽ]{‚n06‘.ƒîÿö!ä/ ¤c¦1ÀFÆ- wÒKyñÀÁnú8\ +׉o|ïÉq[òÐ?ߦX†–€…d!Vº^":V8œÂ¬tAö„¦ï"éz¬6\ñ錗Ûüõ7\H—HSQQÄèÍx¡²åÓŒ¾hpö!ùHòš‘ ãëÛ²ÚÃvÅÐêÙtEO¤Dé1à÷XwÅ9Éϔk¦ 6®;V°¬óåNXú㗪d+0öy‰tá%‚:l Ç,/ù´ãx8—lºýc¦\|C»ýdA+)ô×ôN¦€½ÿ)–)Oia,aOú1•k¸0áª_‰? zrùÁêy"YRЭÕï-Å.PtK*Ô¢ôN«UҗtbÖ>ˆjjqø– +`jl™•{í»µ]í¶X¯mk¢0­eN>5,ç8užz:ƒ[ꯠôõæMsþÅ×aN5EL[ËD,G¶<c‹ÊVEj‡}wŠ\Ü>¹t<¸È·˜#¥¶FÑMôˆ.ÝòAÊcPâ¾Á¸}hÜjÝhÚÆaQ“FUñëkA0é[.J¿EJÖP,u +ËËX•b%ÄÙeFZ¯4¦v«×ÊÕ{£Çd ÚcÖÐU–¶‹ØÁf_SZ©Bwž择áåwSÂàC‡¸x¡ôˆ‚ÏKÂÚZOÙ©nç«t:šÑÐWÊ@ªa9ÎÁ 3™½mPúÓj³¦þˆã÷Wúe¹ØéÖÏì©^yÚ]4j|»Œr‚6Ä¢Ò„Hªƒ÷Ltñ; ˜€°æß9Ê¡Á[°Ã§0‘f·áhÒ,̐\´ÒËÞe|I“-]ˆ:çnˀ:ïîÔ?*îø«õ§R&”Æ þSÄèW~«"5Y^Z]Ñ{•ºà– ‰:#F!J°Ðü+BV2-Cì.wsÙï2a;}VÉmQó0B¡crI‡D>q)P=ރN>)¦ŸìàéÕicRÔ\²ìýÖž!äýH‡ó~‰Ò¢k1áكëNyäd}{ñ²]˜Ìm.OÝmŒÀ%;EÊC®õ˵K¢'nØÀøþK‹“imĪS­YÔ)ï—Ed¼«ONM6åöø×]­ïFå2é"f—GØÖÙ±*³¬Ä¨ªÒ$W7¿›‹>µkrÅf=7§÷Öè”4^^JìÔºI%ÛIÄ +mHtã\ɐôÜ£‘f5ˆÏƒ¢“J!{'[Të!É ëq­Ö'ü÷º•o¯¡üFÍ1 b(tA±ú¨ºbòD3f¥Ûûî C=-ƒG  }•t†¯~iþ׃G@RÀ“‹×-´‹l £Y‹" †÷ßÝbJ[þç9Îfじ¨«!0•LäèºÄ¤ÌÊ34Ø ¤DÍ\iVW38ÚKÁ&CœÝ·wwwn÷{V·¶ÝÛRwEYEnŽa‚ŠÀ4é$¨`Áøx! Ÿ¿ÿ¹Ì­«n÷ß{½ûß}ßá÷ñ{ø}÷¾÷ùoêx{[$ŽJä ¥I‹oò +JÀaß$¹u£ $½žÜÕ¥ìªAÆÙRÿq07Þ8‰™Ai~Aoky£ÉœÎp +°Â}³ +LYo‘³ËaIàfk¼J ˜0‡ùʝ¾Â™íšûéUpMGã@àó{5¿q\×xþ“n¹j–RD]S”³DîQŽCÓ¾•Fm}ôoðœæRªkïúԊ}ôpËBxNr)Õ5Þ~…2Ç«ÌÄ&e/úh~æöIZ"À:X|JPrŹÁźá,öÄ´¾j‚ù‹ujrXA-­µ-’¯gLt«®™Ô-7÷"֝ª€BêãŠ7C(.‰…áB«Á–úIÚ·§)¨Z%8È%0?ˆMR‹Ö(ͺùßb1Ì\á{e‹Tr:“(/ÐX¼S ÍÀ_þ´ l«ª½ùÕXVdÌٜ,ñŠx Hà‡"êZÊ@F†T]ÉcŠÌ36°ŸŽŒ‚èEïX¹¦‘ƒœ‘œÕ˜8¼B 0²yd ŽV¬Šcá'ábÀ¿™¢ª,k˜‚ÙLaª=úšfm××Q<‹þ¦A‚ •SÈÄ_8ïñK&ˆRÅ« h?˜跀 3´‹í^I© &Š1 §J'Ä¥6Ü/Ào³€.QVö§)”]¼gH\b½¢u[q)à MtZ+T«íRªUºTƒíÉ)%ð£ /€µ ’øÛu°àyðù§§L•Df÷åÔtl u`iüÑú•J X¦?¢Üš”-Lô¥2r\0ý2¯ËEäµ1’[ÒÔ8:ÃVo¢äľp­ŸÙð$!«êå+`ŸœÖ?%²ªèÌ'HŽ»‰Ï6×}ĵß:VP¡‘Ð Ü՛¾–ê¼Íñ‚1ROÕº‚í_ÆèK'WéCut1bÞ¿·ñøpp"Ô9¶¦;§B^3è®®»œ’·’0oIBføÁo áÈ/ìø‚)ðßK{ÆXuq¼e"O`ƒïhù…p1¢H’ßÁBýdPŠ„ ½Óì»ø¤ëH ~+éa~`çϼ¯²úÔlKï¸ü#eY¾@FÎÆÏoÙ.­Ü . .À‹Bì°ƒ °" B›6ƒÃ tµ¯&ÅeZúùZݘTPÀàüo!ÎNªáÄ@‚Zú¯5µø +(v +X¸€ùi]Wbb5®uÂüoÔ4U¯‰ +7Ü÷M$0ðß[úÔ¶âõß{Rÿîˆm©KRylÎnZōÆªUTÈ{†IRۥǷIÝ¿í›2MPŽý'ö<ÂîW§$8Fd¾TÊæqLxþvã„dA‰à'¥© ˜WOŸõ°¹« z¹X0|G Ç8ÐÂ@ C#ŸÀðÊÆDêsûJ•²«ìP½ hŒR7³ƒˆ)£90³xƒVl6ÈÁ)>Ií•wpõ>TnÍN·´ùV¿º¶×µ}£¼kÍP~[;›n¡w£2Y@Ÿ#OÿÓ䤠/¡³’©;)]væAì>ïÍb}ØÓÖÌöþ©BÓZ·Û +nÙÁ´H™§k0~nPjVõ…ÛÞª4ËÊ>P- .}äÏv|£dÞ w‡/˜æÕõiÎb‘_O~ë‡ÿ’‰waÇÄéŸ\ìãPÁ\ +ÖÆÆ¥âDNÒÄù7ê.«è/(ù~½y  …º® ^†ÓvÐî2‡÷ ¦!C b…އ<7È[˪µyÅ«^-½“}JO½´ÄÈ]Xuýüöùìû¶ùÓä£S\݀à7w`Ñ:rºè_©ÜƒÁå,·¿´,ìÛ˜Û*8—òÃ8Éb¶XN»eUÝ¥õD,aX̤Ô^¾jžwW*Ö>!&³³p…!0kŸÎë%[õ–®\‡íô€oÕ¯¨øXë%N˜Ó©S¸}¦ð÷K‘‚S²û|8cñɆ5¾$6'¿„#‡”Í×*¿òåpµå[~C©Ó¦=05ñå¦õ—¸²>a´›áˆÌ3T«ÂŽà0(íÓƒÞ ¼'ÈIQÿŸ’»˜ü¢AÙ¹,oÇL¹íİcŠÚÊ4Œ½ä}™Úø/iɳµ  °äÅOv„8¡9¨|ß0h-Ûõ¦;jÀNHÏâ>á!XXÛüÀHeÝHd\™!’•ZÐοBž‘~÷ìÎHiûñAÉß% a®ÛºF‚ß´1  µbí +Œ»ò—f¤-­èþHŠõHŠËüE_‰¢UØWÎ×Å6Ž ý +Ém_‹8R‘ˆßêÇ„¡Jd¥A@6«D +^š.X‚˜¦öT€ ܝ@ÄT5ä(&Գث<;IhͶª>ùÊ÷½E¨„Dæöê3T»èþô6ہí xØ•³ÂÕ᷊ûhøÛÝ# §ÉU›.,c yMñ¢ß¾p¹ogL¸ßQSZ79X?oÆîË¡fÜÑyuŠû0I;. S‹Ò•^}’ný'(‹Ö”(],&øÆ±îZ*9CUGÙoŠŸ _%|Àa×ZD]Õ6œmk.+ªP"‡)ÏÞk?äB}À搬(ÐQ +N?Q“†’œ>Ì,wɃähßákN¿W*¯ÖJ¨È\[ÿ,0AûS„Ç-¶`/ŒEA‚ÏoÂ*ÓzTš|Ô©-ó4DßÃ*‹â¥ÐŠû .ÇFRe$R%Z"PéA kÈpáG §A +ãZ§ž--“Žïîè@îu¡ìœgIê3sÝuæk*k¢”[ù¯™–6R¯Ü; þÆà(0Ç®Õ.¬ï…à ”ÃG„0D[È(1Jây«@ƒV,š§£2v¿>fÑ +Ũ†X5Æ#ì¾Ø¼?CÐ5cÜ©Þ}½ÈÐîvpIàD!øØ Ú5Ÿ›ˆEª0’œÓ¸9U†¹žãð¿—~(þPbâ?=è´ÔÄ3^6‹œX¸X!뱉mõ.Xñ‚‹ºõæßbAñ'{ ÊvҘª.X[B(¹/î¢Ä EBêQùx°‹,ó¾9ôaÉü`ƒèÓ;ÔpLšŽéñ $ h~5åvþµ­t¡M¤Ïw_{·±Båýò»›Ðëbt¸ŸBÙ8„´úÍ[ºöö.›P”Ø_†è4Yb_JƱΝhâB‰,Ɇa çê ó-ú€K™Q€uÇábýWíò¡ š8+܁ֻ†‚Ø`Îr¬ñ-7ÐÙ¦!º•Fè<xáb(q¼Ô¢Šý¼ht÷ȊûŒ`»œ ÚcDwЦ°re§èó`dUuv»ÖsÚ,qŠ^¯­±(>~#ý¶åø¿µÚÍrHSW:’-Žyú¡5x7&úô!DS|r™!nT³†WŽÚ Ií +pÁB‘°¸ãëˆP(”D PåÇܼndfØ u‹÷\_K@9Kü×ÍÚÿ6e!Ù`ϝ¾ËJÌ±ÖÎqÿS÷à * I'˜È'2¥òÐçZ¥“ƒ’X¥œ/Iá1O³èâ‚(Ë‘Ò³”Ջ-Êq—}`'/I,’ÊŒ=3¦ºWÃÏ| [ûkÿeo EQ€‚âÝšt#ºç^¸…ý}ØÁw¶¤:uÓ¨¸B¯ðt톤„nÔ$òTÞÜK„R9úI˜D֖|/&éc!~¿÷I +ŒÀÌPØ)ýBÅÒÏ +ô|âýŸ8ɯ8ßßç?ÌèTps3L’§£ð|áX‹€SrSXÁpŠî +•tÌ*wBïÍq/`×éó‡ÛÌ{3·çM|þÕ´Ñw…â"ñƸƒ¼× EøE‡˜²ò’-Ë õuÉËʟG$b]uh°‹ÏÔLœBŒSv°e*ðe$Vìè1‚0ÚðscF£ ¼$«Ò¦$ô€Ä”Á&W†Ë¸ðÉk…ò˜/æ_ó ±v8Ö¹ì¯~É­QÐB²)ÒøÃè'm™\§Hô1 Á}óeÔ`>™›/~¡ÂÐ|I–Ëx‰cb˜ãŽ^l¾mСŒƒ)6BÛ\ßÀa’ž=‹3Ó§ AV 3$¸W¥‹Û|.daûã%ÅýJ™±…nÈ2¸ÕE©Ðë°ïâd‰„aßÔËà7 Õ<Ց‡ |ýaƒbÜ ª.CÀ’‚×8wFKIº +4Émø[ÊÎ&0¡ô>ÆÍå·í<`¢-@œ>„(¦Œ¶žYvjÐhXÄE?×Ñj>ƒ‡¨,†ºÕàhi¦¸è%øÆÖ0l™Â6ԟ(ú¤-v,28,&²+xž½òd¥–·„PZ³æ +²·'(CFЭ¢c›D¶È¶Ê6ì›E¶ìÛF6˶í›ví»–Ù–Ú”oâæ¡OÍÞQö¾{>Ê ÜÐ?PàÂzp]WáIá‹ó”G#ۗ.LªgJöñãG&ªµ,\WéUG:•¸²ö±ÕÞóD© C &!D‰'ÄÊ¢@öu~—ô+„êÜh®-¸Hê”àìøF#ƒç2–Iö±þD8^keWuÇ5IÌ7äp{'0CpÇóud}¬åž¥¸aŽp¸·€é^…»ÅK–ŸÄñ7“••———ò<#W«Õù~_—¬Ök<Ï3Ìó|ß7Îó¼ãÏ?[­ÖùþŸèz†»]®×ëõ› †Ãc±Øú>£²Ùl¶{=žÓi´~V½¹rn â¹7*Ýª »Ô鐂ùaϙÆwXßÝé´©ÙBö[Ž÷_Žèl_ÑÄ·ÿŠDkÅ +Dk‹¤ŽÌy&„ «°ê’¿p¨i5=øáP(Ú­ž7OfxSNӛE=´=° ºƒ¸At_ϒ¿i3œ‡À +2ºEëáf:Š“ÀhWÍEQzûG9*/Õ´xç´_´8r‹u´PÚ/ã´>XúÃåck”%¤h:â‚ˍiæ]è Â'ҝ§ˆuSx>Òìàá¯] qüeC(Zô?™ëôhüݧÂ*ïÝOrœ¢èú{>#åŠ$WAšð¥¦îvúŸ­(X¿bö{¸Í°Q‹5x±$ÑdŠEñH/¯¸¨8”cnC=¼Yl‹qx`ì•Djãû +>HnOäú`{ҕ §*¨@ Žô—¨¸Q5€t¹DÁ ÜøŽÌ¡;v>¶r©'|ƌ6iSŠ¢Ò¦>HA‹TÀ¤ÏÕ¼Ð7ìÛäO¢\Årç0¨ßď‹½pZ<& 0gÁ j(фIôηbž\çc%&.ê¸ íÁE>ƒ6ê‚^Xj¿Kâw1T•}¼µÈ‚:ïÑýÿÿ–Ãè‘Ü|}xÊðFíòÓx,âæòoærSÒ9&ÁAøtp^VªWòÈä£6ÙåúcÎŠ:±¾2„«Ê}ÝU¥å8ax[fyï¢Eë=ÛÈ1_oQ{n‚áfMCƒŠ<ådÑ¥Ixí€xõ¨Eðñ(:˜Ae1~äÙùHGˆè4ÇC̹ +"#^ä(Ê©­+˜Äú¢‹3?՚–N¶öÊ÷ªm! Bóï&M„…iV(óŽ)«ñe9êù*J½?#¦Dj&8Äé¯l/nñµŽKЧP§ò µ9†1Xü x\̄És2³>´Ïä™þ³$alýn±HàγÜۏéHà¯g¹z8ö6Ìø/*ëèéÐ6嫸ÃÓvÛ}ĚnÅÎ,†65b +¹è¹{×­Wy½’§›L/xÛOd0qSÝ+OÒP¶¥§Z-áddéÒ Ÿ‘†¦‘ȤÑôaT,Æõ@œC\åú¤èB«DN±°=0¿¿‚.ÁM5<Œ1e)¢XœÚ»œ´”`)$ì˜.¥z‘k n9ÿJ¥5øŽ$cÁv\Ä_/s¤Uæ4 +ÊËNRkïuÒ­_Œññ s^-÷@mx´(.®A‚Ò†¯mœ²ÿn7ã™ÒÍwùT©8•Û¯ŠN÷D~ð ÑmÇðÁ_‡¶ÑJdƀ§6ßE¢I€k|P=¶Åe`c /'˜H²µ¼B‹½zJmd֌Š´ñqƒNð§v†¹_›¬½êÞØ ‰Sïý9A2崘l¨×ËEñÎ v¡œC +½z4>_T0nù໾SçuV•VÖÁš×tdyJ” Ø_Ìz¸F:¶cØË<“ +ý1Òtt@‡\0Ú1xþLCªÌâÓüÉr§lÐŽ‘™ÏpLȽÒA«–;-8­;[Û¾+± îšçñèäYîz% õW >éòx#¯à/Ï\·»O%òªaÛšâu KËðtâ{Ñ!Í¥wD=Z üS–ÊŽŒÁXÝ´r§#Éé ðHsu»'UŒ«‡)?«£0+žQ:šÓ(î]¿FabN/Û[Ø9Beõœ¡kú"ô«~“”/åÊúNP£ú+zïž*Ez•A0aR¹š.­`‘°.>Á„~vN¾s‚jLg|ǎRón¢žG?K+¦9o 6^»Þ`†1'‚ü\¶ðÊAŠe÷¶©ePàø´;­Éш±¾VKÙG?ÞhOP¼ÍCCU¢úHüÔ¿Úó Øè#òV{Ö]£[eߖ8©%fZ†nÏå–~µT¯-aƒÎŒÀ`ú°²‚ äÌ7b6žÆ”/¿1wó8²HvŽax±ÅHeœ±âæ +ìܛÅȕEê”òHRïÐîØ× Ô^ HzíîS¤bý y퓨wÈêgÆ®‹)Z¢áZUŠRŒ(¼RÇŠlµH‰fϜ¿~&»€§(óu‡ñU§1®ÆBýþâàKŽ·L¼†r¤©øMYÁ@*°A Î<[•Ü2²ªkàZmëºúô&Ö©q-hâ!̒V‰Bn}ÈSJ–WprX/ªcïÜ4ÃpÊ?ås›/AÎeðN™™KŽq‘õ!QÃ2häªTÇ%R•ÅU²h¿„ncêžâÐÅ©%©óб¸JÁ󫀒•;> m]Œÿ°ØèõúЋÝxG^YHÆRy]AÕjDµÂV#J<õºQÏÍ®LiÆÓG(DÖF¨åŸ/D>@é#᫁5·$ò;§÷ýµ‡^ÆøaC'Z8d ¦q²ó8Ä«ÅRÜʵc¡ee«³Oõ¶:Óh@RM“ò%OÌr[þ"B~å”Ö\8 ¦uöœÓkW;à2Tð†²î6ùݙ©ó“wihjQ£ƒ/ãä¦íƉ’v”çŸR¡¸ä·íUQâÕU×M/´le¦áTÇúazÀ˜O“†ÈPFY© ÕT.LàQzî*»¡)ŸR>¦JÈ1/¸¯ÁSGtÛ ¶ä†eR¥Z—ɎÁÕtu[ƒo’x6ÇzžTnÝbÚ®¾®Å©kܝ{[{\σÉ6äŒÆùÙâØpç0‚Òs\àÎõ ÝyÇF^ۆn7JËçá<#Ç'Z“»Ë$ê.ÿ‚u41imݝ«Ç0ÒR‰Ó©}1,mÙ¸/¹ˆ[“½%ã†b¡ÉCèj«d0ÖÈEVÈ.%i£YíÆÝ°‰! ljªÂ©êw@Ó#º|m w¶x<lwOˆ>›Ôù͸­Šî9èôŠKÑ4mN ýJ‹s²K’é·2²òQÖÀÎÆû§VCwàÀË;¿áWWwîæ/³&õÃÅèõ³k3jÐÅiZWOLOªŸ0iQ¹‡ÃFõùpÈÓëÈÌAÑoz”÷1j³²ô¿kÏUYUY*À\îØ¯Ôx·ÂGJmÉ·Ð6/[…ó>¦à½Ý‰Þ-ݔ՘v'Af#Ï#ÃN‘;¤ïƒÊ‘Ø +hîžéQ6ù1ŸÜbÄ||å;?úGs³o©ŸR ~ uN¡;ª%Åñ9†ÜQÌ +“vÙPg?HóÀóhÁÆSv0uT³Š‚r¨Â¬zõ·~êu!ãr\UÀÀþ8†æ!œ£AöF¿ºÜi1ÂZå>»¬mc˜4ݍ+Pká!v@f˜úÔ$ùÀ—zVmÒ}[½Ù¸)ó<$:ÀΠ*ÿ÷s~Ö z§i×ýÎk> 3a§ºíóœî¼Á‹o÷p·¥@tþ7°ßÝØÀ†+‰Hš•}ÝË»GÜÿvïü1¼º¢¾«e"xm¢fÐEGHbÛî;xdp ¦`чs™nm¦Þ¢ÓŽW¹ýàrPЮ£„lÔXbœÊåÚE*¢ãS\ñQÁº!bÊ|›Ç›©#ÍÓ“™ºltwLcZE{“*ìÈ$xKÓ½áœSœp¼RÒÁœ·2,R%ÎSH­KÛeûéWÎ[—ïÎSX¦Ïz©ý€Ávº8Õi¾Í†I¯®¿E͍¥ÐM”L,:bx’ܘr3´¬ ÐÓÕ×§rô}s€uŸNä}ÂÕÎè(—ðë›sD¹€jcŒÀ¼øÛhóo~€”þˆçK.ùVEŽE]ç‹–&Œ“º|é8 ÀòÄçÛN"àˆf<|OM¤` +ný€Q‘Òõª¾7Õ(u†¾]=SÿKÀݬóêíç­KW_øK¿ªæÕ…¤x»xŸKð'LÀÝÊïù'†bÒÁ;Ÿ <—™Œé¼Û„éØò<—’I(•@aÕ§¹áV+ÛêªìSý͎élͤq/êÉ»–T8Oŀ dÀ!ÆpÆa¥èØ¢O}i.ÑBÒÇ´9¹¤p3\@ ¯H› +šà6€‚‚ñ"sè½7âøë(à*°þ˜¡E½ÃuKh8zÿåSŠÅTØ ¹»Ò½zÆ?Ö°|WïªÿDJÉR끋¯ÂÂ3mÇÎ͔¡ÀuÙÓԛr4" ñÌk½,žów9Nþ)*]ÜåÆö(nÁq9qß;nÁí{Íänitå9Qq¹¬¼åÅw- w< ‡5;N Â혧},±s—蠌ªrã@O¯V˜¡|žàa€H%â:j‚D¿¾K›+ôéÓ×>)Ý"Oc+ýçÇpž¸bàá£57ž:u~ìëòœ¯7Ć‚)Î\룅ùùolÓäùS_ +ê#JömÕÆ†áàWâ§#R]öùd]ª•‰Ú-¹þxÃà‡ˆ¿Iâ'Öx»{֜§/Â@RþVbè6VÃCæhfùýUkƒüNùgùTÃ@ò7ï¸xQSš¢ÌƒrÂPѼ½1{7¼C¶ù´´œŸI"Çø¢ç‰Ìю åIf á8^1HӘŽ9³7ú®íÍbýåV9r±ü¹ö?—žÔdžðà ÷¯”äÉcªÚñï¼7ç][6îò¨’^[°«´à>Œ‚Q +ª¾1{»C ¿J¢²•ã˜i.t² ³‚C¶ÀU¦ì¨êËM¹O¹?„ÛOl¥? +PšÃ£­“¿·á06Bg“&é)œ„»êLðá¨A´ucêlöwÕ:fE÷2Mc– È÷­á5,ø9]aÕv4ۖǪú_.–¿5s#Ÿ¤4ëîJCLæùE¯ê»UWÝkbéʬ,êÍ Ii ëMJøO.”¾¦±Èÿ‡£0Vœp9Ý%+G¹V¢Ö!æMwÂÆ”o.5:zG&5~zG 1"Ÿ/;>g}>l¬ü©>ÃñOã=YöžÜü7w?ŽêÏäOÄÂ¥‘‰K%–K'à$þ@ד4l…ž¥oç'_êå}RxXî;ÀñÇ߆ó†Ð¨êäî£R«ùÏõƒ‹¤ü)QI®ÊŠ-€~8#çÒ`¿Î1-;Ö8BÒ +#RzUDÀYcA¨wƒìÄĬ­1Ŋ ”Òwñ»Ä­R¯rUþE qËñP¶ÝKÄÞ U² T»fžÙL‰ôÇ#ÓgyNЁ.ºfoâñ?OÁ*xösތ<ö¢âx õEìrC U¨w»Ô!tó‰LY¡õj\ÿó-ÉI|HØ3Ñê¿,EÛòZ•üüÆ=൵#Qd¹"ȧ·+P…ݦª¤øÝƞ"ZKÓG©“lìL#;æ·±²©I¶gÁ㓎\œnÉÇä%ª5檚¯É®¡ëŒíaR©=K’—P1Åãñ²OYÈK +UàajÄç)àwèy_v 0ÿՐ𐐉g N{v‘åòÈM0dŋJ䨘Œ–=»ØL£O>Þ?ÆhWÛd&¥âeƬbÙ  ²ee2Ñú=|öϯd&ˆ‡Ú‡Ü !5/ÿ›!5¢¢Œ&‘œÊéÈ«^ëþb”SÃø’¶‘ŸMši7U7Â ß~·;®åáÇú\ÎW¦Vi¤_þì„ј]Ì]SÒ|&l,„Í”ÚÚPmCJŒ¦Î™ð}È“Sp,„ÓàҀ|ótÁ¤ÿ¤ÙO©•²SdÒ`:ëj|“š+þÒ,,„:ºŸ‚«ªOÙd&¶þßñöÑ"|4–ÖIJKi3Ò¶“ÅX_eš=×2›jRÚK‡-¤±ì‡þ,„Öޚßé²P4 d&ƒŸÑ›^ªÿd®“sƒïíeåÈ«ÀÒLþ“Æ*Ù ¹4– 4®’°òý²Qm?՚›WIOÀwüK!57LùÐùó¹¯I[ ÔK •é@²Jé)} G@²Hp,„Ô~&’’<§Êé9ßó-¤£¬ÚÚJÀ²SkY ®ŒÎ­k!56¾l¦€ßMš¤ùˆi8ÉÿBjšNBv,„ÔOÝd&ùÃI^RÊü#E[<ÞÞ<Žʀâíû{'Ø1÷CKÍíÕGÓ,ãõë'ÏYÃÆ£“î½¢¿dC…’šWî£í_¥«›†ÚÕmJÚÔT>¨¨æ +¹½g'\Ï·U“×´Ww[IÆÒ©ŠWî&oUΛ‰VÉ%]|Å-¤ãÁWÜ«ê^WG”¾'0/­ÙÂ,Õácð‹,ð‹+çÿ’¯^ù. +e!œG[I¯¬Ðàh[I]|%t¤"+ jñÕQTúGñåCî×È£dP<)!0¤ãÚÚM‘ÀÒFÎà +UÓUÖáÿìi*}}‹¤—ô $¼ i(IAï«I/ ëÀÒP)]$ã i'YØÒO*ûIVnƒ ñt•Rû@×ÒT)]$ò:úIÝ@ÒPÂ’—4’ö¤šºIæ@ÒTÒ’Z4“Jëé&x®’s$ã»â.ð4”¼ŠÄaýö.’f]$Ô/±t–bìYĀã¹[ùšßÝ{8€äy‚Ýûh’–ÿ½ûìøÌÀ0Ã%Q§k"XµÊ‰T–ª€$@vjË]§˜`¥ºjã Á˜Ík35-7*Väb — iD¸Í6Ü]½lQe e Ïý÷ï¾Ì®o<ïyÎwø{çïüqïõwð3¿…/½¥¶ÙXä{ûO§H*"¢foé“w¡E'é¹Sóù²AÞG›èC§:n ¥¦Ãô¿*)p¤—Qðøtd‰P°ƒ–{9þ®èL2Tf%˜ú^?¹M«Î£¯+Íú¢ŸÚ4Q8âì¿È¢x?L"ÃÏRPž—ð×pÒä4Q4 ŠQ—SDù±‘DW‚ŠÓ"TiJ–§±]¦Ô0lØc†÷¦ey(œ— +G B¢R$LR X~(•œÁD¬¦³| ˆ£r†C!~Œ@ER¬†ë4x=­×Ï®ŸákV&Š `EMޑêRš^…¦EÒ)GY¦R¹Ò© ?¿TÉ&LË.Œé¢…aé3di&n × ‰XÓEK&™$T£’dRô•*ŒEˆ–£"¥$R‰zš*PK­êH›Tš•E6Õyº3"¤>ú½EESÖ¦èò”AjSø¥-äI¢£é4Tz'Ú2;c/²ö½í̛ÑT´š(Ê íH¨Ù(.ué"ƒýfRÍ»bPh Š4Z¢ŠOjÿ")H«ú(0SDÿ«ȨœIî%ED¢H¥ÑE‰nAÏGbê‘ZÏ xžŽy÷¢Jy´‘P²#"±u-_M¦œ}Ã8Ÿ}*KÊ&4Ígèä¨ÑE+H’DýÑP8Hs‘q{ÉJˆ Ñ«)OŒ?4Sýßޜˆ‘aÎTIb$BMEû)9áC0K)i(„À–o*dSÝQ_¢›\¨§°.Ӝ‘éšH§£`’R„ñ¯{‚dSÊP·è§ŒNÎP!g‚ŠtüS¹ÑßæèÒîPdS°t÷5ƣ«®2)Òò‘X§-Ò>E7ÌûØ0ŒŠŸ,S•ÙߢœŒ¨žž7pµhÇdSŠhÒE8ˆ“ËUÀ ¸gÿDS~"æ ÕW+ѕåxJÅÏ»*ŸY}ݽýûZùåÏZÈfórúJ}÷  ½}ޛ;7ÍCb¾Í±bû»i¢ƒÕ‚ZJmQ'z]™ïòY™'ÍIÈD€2Љ'ۘ6;ZmÃÚ~ûKKÛKO‹äKpÑß½óSpÊMSE|öû»vvbM‰‹Ð]]Ê{„"‚à£ø‘'}:³sÚ(¨)1i¿0vÆujÜb)LâhÍÚ7½k¯zJnߥ»Á«î'M@ffa;øDñÏå^ÃxÀDw¦¿Š’A0üÓE} +*QE6ï…E!=ôîLŠm²µŸúvݢʼn¢¥‰$T¯á"¢Jýè™›ÿì†?]-ÿôW玆4Zà¢|ß ¸( qé¢}/F$P7¾DÿÎ +(zh AÁE‹äPôôÑC„• Ǩ¡çÁ+ºh¡«|Šþš(ðQAǂŠ\OÚࢀò(%ðQD ‚‰ú¼PôÑ@>ù½4P>¾E ŸM6ï‘D“ÓE äPôÑ@ǂŠ3È£ý qrœÜ Aàcò*|‚)ߪ$SsTŠò’ F5ìCåR|ȱ4wc=!!=bœà+¦"ރDPÙb¶"±Eq\“Š¡Þ5¦ü±áèdXMúQ¢øÜ^/ê+oBäáÿj96‰"Í;¡^•Å>hß%F $Ye;Á IâA~€:ÈÀ:—ãkÓ#.3 ñ¼@(í´Ï‚GD\Ï͆/ƒÂZ¿\@ åO°Æš+ô¬ höØõ£.?öSRÀ(Œ˜Ào„ `l!‚0Æ +ü† |0r.pLa‚ÁHÙ÷£ +>U.ë0c~0ÂC ¤0Ò# ”aÃXHWaì!‡ðÆ!H\÷¢á1Á™ò+W…þãߌXûg¾õèÆÅöïÃÓñÛcŒ!ްÆ<ÿ‘ž¢à™'Ná ‡†22##É&2AFIАLd¢Œ— ˜É˜c&¦2ziUªDeôWpàŒ©ú ­€2Çä2Óç¢à ºXoÆ`z‹|m0¯Æc¯zy‘or–žQ™ÞŒÐP_ ԘÍi7[Ñ>¹1›ÞéøC9`"Þ9ótº†3ÆÏXc>7©¿ø£?½X(®âz4#4"zcC&4:YòŒöôh¤›½ù£Q9èÑèîöX"T$4šOïþÌJ&¢B€$‹rD÷“f’-DŽ˜Ónލ8õÉ·ü~ôj¡üHj$sïw{Ô]‹jt¸¾Ï oà¢Û™®Þ\a«Þ`,W)$5œõŠNa!€5¶×R²lÀ_ò5Ú—awL•2¢zŠâ'£a½?Ô9€6;Ñ; ŠÝôóù[ô[C>E­.Ùéu}4[:°Úxcj¥§ÉEa°a¶^´’+zð‘l£G…ŸÁ‡¦7ѹ pï"7;ếÂè}ž݅µðÝÅý:I÷ý7`æ˜% êˆÞÂz‹SÑ` òˆß]1¾ÓE–ذߞQÀÿ¢*}ÏLpT»ß¿Án˜á(·Hp¼פ8rC:½qy†3Mº#<½Ï¤8ª.z‹ÖÀdÍß6^¯¾vÌIŽ>ûñr^ªC‘r=úc’=—‹Ón˜å/º_ÔôÇ-K§éŽ+„9‰µ÷£™¦æðÕèæÉnç‘nÈ,ÎÑñèç¸CŸ¾ï}ÿSÓ þ˜è©qûÔX¥‹t“nü!Ó:c§":}}ûã̋ï!~ˆ·™ž·ð§ß¬‹w£¬"‹‹Çía޹€‹iü×ðÇaÏûŽË‚;>+ªpÑ]G†Šû¼4WðÿÀî?Üw\W¸á¢¾_ôï w×ȱiýÃ ò,[pË¿¯ÈxœWýþCÆá†<ŽòxcÊà"À¿ 3øh¯GÃE~/ä<þ, ÿAèß"ÄçòŸ> õo‘_Ûú_Óíz{?û˜Ù 幼߸ïôôBgôÚZí¿!ð“ ì_æñ’½èù%èùHÁޘù†5!4 >zcèa¤˜úh¨˜ú»÷ 'ᰤȵA£L>,÷„‚Œ*·xb/$ä<ù0ÇæüÇçÀ«¦?fýߘýÿˆþOЇõDcîù-:=„VÿH÷ýÇüZÜèvçÆ7QÖ·C(Ýt›xLãxY¦ðþ#xÍ#xß9¾Cvß©ù[Ç\·vÝãm" .{VÎëmjÙ윶¼ë9Ím®´qç| GÖ6£Åð+8ç5 +܏}í'N5'| †þpj*µO´DÕ>ánm^àDÕù²qu+aRáˆzàÕu{ÂùÙûŒ}6VŒ)¨KL-“˜(¬–eaÄÌ­;d {ã>¥C¿ŠŠÍýÞúEâö¾˜Þ™o”…,F¥%Ô À¾…¢u»E³R6V'[”[S‘²á:öíu¶­mu–´áüÑâ­+çàPª²‹£¬[¾Y,9Ô¾ÕMKë@¯mës›ÓN¡«,ÒM) O©B–Qk•ªDeg#FJ՞€öÛ:´üIòxý=[ñ9»gV¥ë6c‹Öê0Y/šå@Õ Vqßïýh+AN:‹:^ÓÊBsœ@§±Çn?£Ï Jll¬9±²²Ð@­ûÀšPí=JëÛ-îµãHñï8ÏÂ;Ùî‹0¢µ&{~_[ž…ED?2¡þë/ʎ·•€·¨î9“MyMwîþ6—«4ˆj9'Å5D^G1Ý{^72œ6 yØÚŽ• H%ù¶¶õ¥»M÷aUôÕsj wۉ=ŦᣥÌñÁñ&O€’ñÔé`¤^ZÜÙÊbáW¼ööÕ.Z¯¥@'qX:þX{4þZÇK)Òž¼oÔ²‘æ_E—ˈ þ&_VãV¶ [,{Ÿªvªnª‚«Ìª¥ªö*¶U_VÞ«U¼ª`~–8Þʦ:sݹP۞Ö/Ë#ÑO§¦B8è=ÞSõDàa9 œ½ LèOg£ÅžRÈ7Óàåÿ<¢ZI6”rÀí/kP‚ò°Ô辶@2pµ +é&Û¨˜¬ApÔû9ð£»2qa3K‹š<4ëâéÉf/ ±Î ìEÚ²së™ÍÄÞâ_q¯Ü€ÁF–¾Î¹:í%¸ɳˆr_º…[HZŸ×ñå͕ûtGX¬¯p®ª:µYÞ×µ\¬ê¶‘ èî‡)P¦è;|mmŸÃ¦-·8pÏØój*έª FªÿQZmDœGÖÞ¿ŽüY€g½õÍÇ%®Y‰;jƒ¤”‰ú„÷_ËØñj”ò%»Ë»#¨|K»*vz».®‡¿-R°oÚ¯#Ÿ·hÕ+3nVå㨳R4h•ük +ËT­’B Cò9݌—ÅCqQ>¬­áê ˆþcq •Õ œŽõ·"pºõ*Ñ?xþ¼*AúrîË"Íï[¹¹A‚!ÎZýz®ÓB„ǸpZé +Žà•B\Í¶ï![L­–k¦‰mñÂɵ®²Pøý³-% i؋¹LYìЏk”™—·Sû÷åvG~T˲ +¦ /U×ËàùӕKv+Gäè§üŽ¡fJ҇E¹‰6û›¸jM¼u ӄßcíì³áÃîX*glÁ[>{æL÷œš'„èŸV9á3Æ@oYâ‘ö«Yª^™S¢ýªøé»È‚wWåÝ¥Wnò§Éïó Èǵƒ‘åܖDPA´¤G;ßf´™"¶ÕYs½ú6ðy+ZX†¨ZRáàk=;T#ÿbªQþ|Ínl{etŸƒÅNRB–ع§áê+‹òé¤ÀVûœq‹I¡+@óÈÑå¹Iö%G«2[ö¢â³~+IñŒ«UVmq*Üâÿh°Pí .Ô~#ÆÖá]U–Õ=l0ۈ½·—¾ø-]mWµòùÿÒ¥@gáçB³ÍHñXC3íX Ê‚'bÁý”ºN¾¤æ ´eIæ…Î2¤ãOÂ-HýІp-/_Ù©'aO‘âµs´ÝY(˜åJÔ(ÁêI¶âM]6sŸ +6Y»²\©^ЌÖWŒû»(¶›²©\?†Õ®ò9]}¹íHþ2mh p„0êût2‹ ,¶™:ý®Ð™B7£i#ËKÒÁœ²‹÷ËB>·R 1å `{xh•„h´¤œÜ}–qiRg"E6L²ÀË.ÕÚGå»t”`$Ä˖DO9®íVÑÄižÁÉPC³°ŒxóÜ'þ¨Ÿý™?õÿ±•–™­Ö8pÿsðuٓÀð0Êw² nQ®¦ÃIóròÅô CÐ$ðvSwj5LŽªÜbÙIÜ}æ“ø½à9ó/å3æ®eÐJäÊ6ç1_3A;Äx„Îæ3–(\qÜËíÏt¢_nqfÏ/yÑá¦KGköϟ’ÙM†›qõ>ÀcÇ1꫘¦<›»<·Qfm¥<}¸®ì+4D ŸvÊÑHöÒ0­Õ‹ŠÒs>Ú3H„W§Ihpø[ßzx÷ €:­e|x ´zµ+®Î GPóýªíJ ÕsöuÞâ }ªèqá˜|Q‡ÂØûJ‹MJÛú{«5k©™ILŸ n+{«E¾öªÈ$µûK¡ú˜I’RÛ¯‘D¥BçâáÛ\ÍÝÔØQlt»ðáô„Ír‚l +® ÿ4eÛàNŠ1;R?EÜÎݤz3ž\fÄ}ߤÇÝ ¨~ö5±3ÁcÆÙñ«Ø£¢–óõÕ¾Ñ1‰h—>¤ífâµÀS<3ÁÐ; +„gR®ˆòdg* Ðú Ë®6_pf +?p~… +E˜t°Ä¾Às‡Bøh_å½Ãe¸×Ֆµ¤Õ¸Æ¥ÝgÍZã$VÄâ Ëârú +‚»ið8s3ڑœû\‹ïƒŠõé¾îìmI¡¤û½o»»$ßwv67Øü}ôé_}1,Gò¶€(·+h^úÈñî÷tìÕÔGç´ã´¶»”HÞw_3DÒªœ†òô$r굤#±Ý^‘ïu"WÿÏkd¹/Üï/ZxW¾¿‚†Ö¡ûþ|­R‘õšòÀ?Sϕ“¼™!s$Ǭ'Ûð{¿áBʌ€Ù†È¸æMø|ï@%^³ÏQµl_œcõ ì +ñ… œWЇ\Wˆ?‡¬ñ±QĚ\&Ãçÿ>ûtÀý,F£Œª  óW¼×f¬:r˜¼k§ïÀ ¥#ú·,s`«fŽÀ{í[–ç5æÐåj"‡ÊÖ´ãÑ4½•ns>©°¾7Ï }!ý­¦N¼x¯=ÒàËÛùõqRµ4Ccè7(KîLONäZt”Pö#æÓ&N£(—Tú“¤{OB¡Fé@¦+>UÃÅkóäû„½"QU/ÞÓÛfs9Îó'!Gb'*ÜõŽdÜÔ9>˪²ÎÙNYh,¼+.Û9݅éC¡•*51dÀ­Ÿ“Ø„Æ/ßXÏXøv&¿×:e³h»©œÌÀ„®d*èY\¤+HD!{è]/¹ = +b‡ÒTz©õíbÃ/WÚØÃŸ^Ú%}4DŠöÙãÈÃ/c1Håzöʋ3+%%&SDflsåæþÿ‘ÊÙ?KÅcV~_¨í>Üe¡« Zx²_8|š^Ùë˜ÍVC +GŽi£qjªé 9d’ò’4›è/‰ekz‹…I¾P[•ùe2v:UKòÑy{"˜,»^œ±—Ï1™RÒáSN‰ÚNù§EùŸz?cÅb¾ó·AºçUuüNëèžY¾1 Q¸ÙmݎŒ¬ùŠ×N —ŠN`Z©·Iºûucë½)ÆPëiëSðý_ੌèJ€¡Ó"Öóz–i:‡]’5XškŠç›l|÷QiIœ²Û_=e¿‚[X:GÐg6þ©c"”vÞqbFûƒž´–WÌŏ©þÑÂLò6–Çޙ ;³óÀ®tYs¬6ÞÀM™³>_Ôżw"§jð +Ëç±Ô;®ö†$ÇÝ?یÝxB¼¸µItªçPEÖ±ufûóšYÈu~“vßw¼Ýã¬þû>–ó‘iœ´˜obIÿÄu潕ûòËgÿ:ã*öþá²Ñx1ˆßø·°ÃÈH‘ãó0Ð0ڈièlt3hoß ×ÃzÌá»hoZ³Ðñf.qÉy¬g}ÄƏ"!øêYuà???ܰs/ãþj‡í(¤ß.K¶Nk­ì‡RþÍErµª’Ë…€¿‡ÇyÛ¿R•6=ŒÀý5 áØÀ8ýGá€cŸe´*Í?ˆöc· ¶‚A@5E1fŸ‚ì{KI÷Á< $6ФSž• +cÚƒøZ7¸Ö+y¢=’â[}>e=׏ œŒ³ŠCÇ/7Ÿœ +É<9óJ§Qҍ'„zXX§7PWí/ò-Ùè]wLl ê†<µ³GÆÎ~rZf¶ûv,/ò€ž©ì»äA¯ì¿j–Oó³n±t–jî9a$=‚¶k#òÙ¥Ú^º?-ßÂéz¤¤ë‚•RÒ®1Çxÿ6ÉvZђÂÌ9–šTu )T6V`:gPì'¹CèzОã{j‰>±§PÅÔÎn?BÅqÎÇÂP?TøößÍ>mxàòÉÓ¬üÐõ +é9Kr1JÙÀ÷;8ø?'^!Ïê‡æ?…u5·. ¡i9˜¶('¥ÍBLGËgœ? + T›Åœý¦‚l +—ŽIåãÊú gL)±üÜúƒ¬TÎ kš|4Xãö?¹[Œ±ãºVMå*;»ãqÎ4ÜsŠ7­/·>:ñaÊQ4hÕVÜ: 8íy^µ%’ïU¯ )WPÅ'@ÊûÜ]± .•ОîÑ­¥AÜ+p”Þ6T!Q‹oÃö:‰½S¨P¡CwiÃñՏX©Òù*Ÿ9$³Á19ž«8A¢w +ÙfãÛA²ß +€ Sα5“WI¼€¸þÀ3Ù¹Ï/®,Égè-«N{¦æëÖyŒf†=`ùÂÁê| +PÞ¬þ°ý þ ëÏëÏJüÏA~goØ~XðÏÆtQñõйÄ1Ø£€Åš'4}K7úÏvÑÂÁ`¤s@×qhâCj¦³{hã ¼“,©w#Ç<%¥ÚÛ8üªe %Ád{[§ú†J™%5ђ#·I3,í,Æ`ˆ½TG¶AyNk„fo‘¤ÎI§#›ˆxêÁÒµ9áå/Gó?¬]'æxÐQª–Pãâ?3%ùš±VOSšRé”=ô +‹b”¹–3î÷)I7 "'MO&.eB|TÍAÒ[Áöh +‚ +±H®îk§wf%ç ÇBFŸ…‘ËËèu¬ºœžcÁ PóÂfîë<îëU¯ÿ͟Í}ËÏ|Ãèq9-s¿éüy3.#[Èޔú¾¤³ŒqQ{Q³U)qШ8 ̔ >LLµà¸ë‹¦(\Ÿ|”;<\£[–6¶ô +X–Ò‘€S£ž->[N˜¬ ™4Ëè<«P!}¥PÐäsÙHlæ6KN°úÕíhÀ±„ ‡ŒèüR€&Á¾(*JgÔc4ۀÖÃb8mŽÊBV0,UāX~ëÂ@3’¬"Jw¾¸å#Yˆæ›Ã?-Þßúanþ§@°›¼š7CoŠÔ؏Ûõ07Z3zÑw¶MÞ[x“u}¦ÝF)Bò|+Ç'NêR|JÜdŽH%nk t x OùÇCûüÉP6\U'zKó/ÚH ñhÍxÄ~ñ¨ýÅGÒ÷ýE㐫–ÀÕ$ÂÁðâ“3F…if‚a.I¢æ1ïùՈ”MF°ûIg$E?%øà—ýµ:}8慨Õó‘™úX?³ê‘š­s¬!™Ë0È3ÿ½]Mã“σÔ塀<,cëļrÁ€X‘[QrÁ€TA㕋\h}ã•ˁ‰è^9 ÷&¬¥pá:ì¤a5íê.T('Α»ìòhüóŽ¤Þº‚¼s'&ÎwQs''I½Èà·ÃžãÝ`ø×¦éô`„ß²±š–É—–! V³Æ·ÉáGD'\Ûöÿ$šžÏÞu\}7~ZúÙ1g4[J®¡¡IáœÚÿcŸ +éôüøXõy¨9œðè¯WÝ©Q ­Ÿyù½Ñ3N÷eÅqcïofsԖyP€9Ä(ª ÐÈ+wI·fVî$Ä–i?µài#ÔèÛp4J0k黸Vßs%šPZPò]1X¸¶+€Œ-ŠàŠTñÊÝÇù]ú½ ž'eӋ۹ó´£\púMëÖݖp“-Lµ%[,½´ÀԜŶû>ÉlªöݹûY  ›Ë;Y°<š>¦)wÀO8õE™¤KÍÌ;5C×¼f~Üð&ÈZ›ž/Üéɰ±TÄ´¨é…ï`Õ)"5Ú}agï-º—9ø=n‡ým³/1R¨qý,û-1!û©PóX´¬Ë³XV,ߕh&cƒãß©‚qÑeÆV¦}·D¤±ºÆjNÎPC8ò|B°uÝðƒý¯F:‡É׏ávÍHýwlΓn¸r@FÁã§ãrYik{ˆ!þ÷lòÎ:³Çï< +Ô,GàÖÜ~Gá%nÎx­#%£ëûÂÕ㏏q&Ìáœx'މá5.Òâ ݈M=½I¦=šÀ¬ëÎ{kAúŒÊZ!¡;Ú͕N”Ƕ‚~p²ÅƒŒYÃÊfÙÝ\:áæõ–ýþÏumI^‚ÿg¼¶«“è(:Jõký™[jìõ°æèé9Gޚ}aåÉ(Ì¡’±@ã©èµM^øQ;Cî|>‰ .¹Õ# „‚ß"»?l8 +1öǸPYÉÝCnE%‘øõ^Ë|ñ—k»È„¹´măøyðu<ø+>ƶ-böËc`­y GÍ)””¸¼ ®“º:G–ûAú®Hy"uû;b@&›Ê“‡ÕL2免£É¢Ä,Vϼ­ÉÀã¢­ù G¼¢^Ó´ë`]Э­ò ÅäDâ£*ë]'FÎ9{U± )8Ú;JcQyÆ$¿5ùó¿¨Ò÷b´~ÇpGvÖè-‡GDůŸ¶b¿õ)Ï[v°g [äÛ7øŽzŠ·È¶å¥5´¶Ã—¢ +[^$jPK +Mÿí PŠMìük‡ä„RÙå+U_7³ÀüNÜ=·A·´ùïÒo"i>¾júnÒRÚõV€À¥V頇¦þU·kGEü«E6_È)Äj“4b&L¯MÇîpÝ4'C@Áþ@§/x/ +LÑ9ŒõD¸ÿ†›#Í]€ÐmiÛ-ÇÖú؜…)lÚÂÒÿî¼9™Ý³kíb×,»çÀqÙ¡’úOß/¥ZxZ·G‹“»^Z[Ûĸé]ñWÒÅċçuT¢®;ÌËEËi{¡ÇU©X3‹áª;);8Nì‘Å4Y²“¼Fñ’kÍ +WÃæ$-^úºL;‚qm¶¤[mC…Å„ xÚÆóbfKi¸$› ¨Ü·/ïsmº&Böh.«ÀŽj}'àqmë÷K˜"ƒ3îäD¢€‘ +P\¡lôQ(©<¶—1Œáh—òÞkZ—1ŽùȔn¥éK˜‹ý”H2ǺɯÂÙ8ü-’ ¬ÛŽƒW˜ÆµSK˜k(s®Ì™bè# « ßëw1ÛڍnÚ »Áª¢n¢k!¯“bd9<4¹wÊ5ï}z‚rþn˜ø=Ïs‹g+›°ã+ £Ó@3ŒÍ…¦h`l Ç7–nb,È‘µÍÓD“IǓIêóp6%Wô's‡j&W ëC³æ ³î'©ãi-àÉ«E:Þ`qÅÿßOņ˜žãÈ#¸ãMXÁH«÷ /ïoûÎUò• J¸¾¿m“Ξ~rÜ· ?ñ Ïc7?3%Þ¨¡‚³ÌDÓÙæ"ŠªñÙ4®`×½8š[÷΃žØ5]ÂûŸ}¿·io5¯Ûª9š’kùJ‰óiÛ7E ÜÅ@Þ®Íðpü‚nƝÎ4›k¹ë%!;îìÚO¿ÖI<¤¥´òI$¥´/`J#Y²ªêZHHÝe]ØÙs˜nˆ.3u$h—R½$ñ»c8íÛg·gw96ݺ¹Ùµ3²‘3AA*vª†<½2` VÚ_¿ÿ>ýžKe*/ûòîÜöÛÐoA½·±†ö&þ¡þþíÛKo}ø{7=%â#þq¯®ñº˜™»›¦>fÖ®¶*—åè¥Õ³÷š(§Û—«ž«¥ÿSE)úLjÐõïeÒõ±2À1ýζþ%žßó,0jçöú,º—„Q40TG‡'Ÿ CóÕåïÂyë!”± ø<ìKô¢@ +/Zÿ¢•©PùH™ÊiP£çVÙ\Ï+ó}œnš-yÅ«ËÁôø{;“{(˹õSu±9Œò?+ƼŒ‹ Ëî9Ú2†M9¾2»y>†yç·§¸¾ÓO¢.Ÿ¶‰÷žáÁŸSC>‰bM1ôT^EÚÆyov›;Ï>ÆùV†à›R:{ žZ|—‡ukµ¢Mÿ¢"Õ+EL*fì^c³kÊ~?)Æ ý=¿èZÕöWq4,ØÚø•ºhªðµ/ޔHMj"%O-*{Û+çéê#íû•î>û';Øûž:òŸg¹½±ó+ÎZ<ö¬úï/åË͔„×êt2³VdU[’ïèm=…Üñ¨DøTWîSÉç¿éiu÷ò¹(ޒˆÆ×ô4÷^º#qÚ"rföžÛsñe(Ø©±Ê¬U$£Ý:Âyꊊ0ØOyhÎÞ\R­/êû{9[”7¡»ñbíÖÖ^$©ü)k•8µâúù}WK…³ÞXæa(‰|ø^|#WƒFŸVˆ~u–”äÎÊ")èš ]„»6²ËêÑxË »Ëõ~ ãwÁ¢<$g˜Ž†žÛëMõÝ,«]s+¸ÙwrŽE|½Õ=·s(ùٔNÖð|컏/~ ö_ˆ“uÜMÅ.®,ßÈðìêø1ÀúŽDõŸõú Yò©èÚ_œÐQ?ÍSmÿ ¢z êÒét]è®4[UM¯<Ü¢7ÖË}yc‡>Ö¶q´ÅMŽŸ5‡a­þ“ÌÕ7ÖºžäŽ´y† GRÍZ]ÍÔ¼ÂSïu_Ì7·\_0þ¯Cq¸“¶\y}{MõíŽ5>Ï¶Å¾ÓæP|ïFuüJ’¼»¤o«ð.¸š#àWÑjÚÉñœ¨ÙO¾©×DGŒEãíúJ{ˆ·¼´UÈOŽc³Y]DAÍëâ{Ou㘼±ŒsZ燢­ÝÍ}F.ÀÓï7VÕxmÖb>?ªæ~µæ/êEíß?–æW!RÊóƒs/1Ž •Í1ÜÜñ|Ǫ¹ËâŸéåÔ¶ßtÔæjró«ÓÊ º9KéßW§§´éiUáߺ­ÍÊe*´‘PòΑÃ;›ÉaîJç+ÙFÏWëg%[MûŒÌ[ãÜQZzJ´¼Hª…M稟Èi}+‰dh“ÓOŸq_Š_ +㋑¶×ò6«s×r1ŽâЄ÷õἊ0ŠãßXéiâ[Þj:œô_«?©Ïâfã/äûßç±øÚNF'ªÔty貌¯SŸÃÒMÖüiuªlsö|„ZNÚ:ÙÝF¶në- ßó¹¼Kj›÷¨ÄÎËÂéMª,ŸW7h·›êYâg£¼Kµ&NŠŽÕ¦ÊíU¿ZnS}®SҗÁ>&ó|•ÇßÞo½ó&æÏØYXâO·GŒÇñ[åÕo^[DPBöVôoy>šÿVÞ¾Ã=]½}ÑbªsüMÑ}¥¿t^³÷âB¡íÿãsü¹©w¥°—oŽæÛýü…ÈQ¢O¹í§Ø‚l›{cð¢ŽLÖ?å,kV—Ѷ¯•gÈ_.Ú½Õ2ÿ¦Û‡ø|Kjûüjû÷¶Ü\µ²¶û¼Ï/êßz¹~?ß[R­ ¤övٛÀefþÔ°fjž*¦OèæM7—6dØò1êy¸ˆåŸs^žß[¡ÙJòõ1mujQÓ´¢r" Šõ‘‚%3(4£ù´d²ô~òö7zóÖR•Ui¾L¾Í݉ßóZðô üö{:ÿƒWëÚ××?ck÷xäí­xº!öÖ¼MÇ+ ˧Oív_*Âzš }šš˜t¢cë3ò‰®˜§\nþÏa¼ŽJ”¥=Å´ö8Îç.m18ùU\³g¿Ðì<ˆøáý{ÙC|TG…ÑÖUȏ äêD}ŽñÒµ˜]þDò9ïkN=ØxrŠQX´p¿i)s¾²í¸³¾·ÄˆR½=Üò ]cƒµ•¢-"&•±ºËIE7ýýŸÿ¿Åë;Jß;{=šñ'–Saaµ÷–:ê¾^×ÙY`òßnŠ®˜ÑeùŒYG D¥ÃÓ.u5zJ"ŒŽz.ÕVØïbÓ4ºî^÷äf­(£Z¿y<ˆátþeþÉ+“ê:ù¸¦r2§Pß±åê÷R£R-ÜSÜO\ñ*4š®>ƒu¬Èû9Ì+¾Aˆ²-ÿ‰àêå Xµ¼L䤡&Ê1޳gö<í]–LØË&Ó +­ªóiûîŠÂ¾4¯Œ"\lr±¤òý»ÜD|EG¯°VHæ¶ãÉáp¥&)‘y ÉH>ï-»§¸ïð¢^î*Òì%4•olø]ÎÓ¢»ž€ÿò½ì4Q«ëË̈Þ'‹‰üȵ}—Љt,ÕÞìü/;+Îob€½ä¿Bû܍üG¬Oc^¬ÉòÀ\ÔØ kÑõ²À½Äñ´½/PHfÀ÷NVÎýï5’³“Üú\ÏJ±M}¼¢ zmïëvñå<œ¤Þoèyý¯Âò£µïâÊn½œò[>£§·z—q…³ñ¬¦ÅwtZ9ŠË›KxWº®º¯rUõõã>¿²´{;+ÏV×ù`¯kåK`®·Go‰sadxÙÍ\\¯¯qÜV”«úWžœôf .8þy9ïGð¡ò*uór$¼ù<Ü£ç{[^­×QPC}EíìøèöâË}ctùª{O‡—z$¾ÞW!Gže+E[=åá½l§ˆR‹«Œý*Ñ`qœ| þ?¶äfÏܶ>“WµöSt¹||JnÁ7GÓãàhâI>½4Ý=6>Šo—©ÇÀޝããàr³|¿"µlÞTù¼Mß"з‘Seú‘Ô9ú-9™ÈyÜ.YHÆ]N‡Ê˺ &Á½Qþ õ\KHŸ²Ýo+}i7~ûKOï +ú­ý¤QafU ñ¥ò"|u0±¯¹x˜= LÝþ/Gg7W˜•¡¥œí=¤òkÞÄë®ö³ëkçÏqc¿s(–›Š®¿Ó÷ñ$_"QÕÝÎ{ïõ”µ_ötOõOõðh³úô\ÞæU +gåqµºiq +Ôjéaæéíõt¬·XºÛŒ{Ìޖ/ÖQʼnÇaG¶ÙÞç +Ëu…­¶½Ç¾›ŸµŽ—ŸÅ¾¹Éæåۛ눽/´\VÒÃgáÓ»ÝaÜÍÿü~«u‰k¹¾¹Òäñó|mãós¹§y‹±³Èéy[Íô]÷ƒîM…ÿáˆÁxåÝŹÏúcåìåäåòôŽò§}>”¥®ƕ:æ>l¤×®ÆŠ³Aþw[Q6Ê7ž»ít>»ìO ½g¼½ùRÑ¥ÿ9ý£Xµ_u*ÕãÄFts7˜ý6nÿóé^Tñyûڞt{ýéeÐØøµ*Òo¯ã4Pǖ™µÛMßY¥¯áÚ:š¬œK¬}n±ùØ|„P¶žß"§…O¢ð¯7ß7ŸÃÍÍñí±,¦Â[œ [M%̐j#Ó®luOoÝÞbû»›ü_qqOmÜÕÀ´û~L¤ÚçU‘O# Ûyoçlií%WpO‰åFåÚy{‘u+ý,ÚK@tYÚs¼”FPF)ær§ßKæÑvªì©þ9Š7~êû\Ô{RÙ +‰fÀêÊU}ÖÞ /Ù§¼Ê½vmoípåsÿQw‰±¢¦âU9Ý.¬M»UÝì<‰uñ=¬ÙzÓYµ½å2n±óÚ´¢©ÀýŒ;ZœÊ%î*Ûý»³6Å8vu; ;W±¦åœž­°‹‡+R­ÌpkÙ%Ó.…drºÞ²x—3òhž}£(Ò¥÷/â! mž8˧¢ã,ŒÝz½Hgþ=,ÉÝy›qn·ÜJ'£e!8“ÇèÄÜ3¥óÄztv+ÿÿÆår{8`ãO\ nšy ~‹%òÏà6˜5c +àÓÁð0u[½e<ÞóƒDqKÏBãžk.…Ç12§£r(¸ëg¨IööyÞ,µ—ߢIgüzYtžÞñ§y2xõL¥½ž}œ7sϳ‡ÁËð^·¯”aOO½¯=ôå8T»ùâo?ö©Qp'œˆŽD¨üÑf•ç}ÚþLYý[.ÝÏEBIâ„óxt÷cǯBçx•üïSFɞâD>£ƒ(·ãP§*§ÃsÍ3þƒWæs=õn£*µ×¼J4­÷ýBêýOá¡u~“ÿ(]_þv_÷BêüÊ3í³(\Ïüy”.g«<æ {Lª3ü Ê3õÓйŸÚÏÙ8ïJ…Ìüÿâ¡s>Ÿ‡Bæyå½_ïP¹žŸŸBæ~¯ý¨\Ïíþí ™þ?ýP¹žR¢G‘)ÍǔS[O1çÑpy¯ÿTÔ?E»WÊŸnùì]ú<~jë¤Îf®¦úw_—m=;où«hŸf>,H#ñ(]g÷¥uŸ‰÷øÓ8ïÄûy^?Ƽ}|£sß5sÒ[O>ð}õ¯¡àÿ†7ãó#~ÿ‡U¤üË_ñ¥rÒ¡zŸûÁLA_:xßî…ø_·Ó|>Ãâfº.Çwé¾/iaÁýÞ4mãõ;‹ßÛê纋éþ¿îs}ÿååP·ÿ‡è–J…Áç♐~5ÔMÿ¯eAÚ¾$]­ÿϨàÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+ñÿ–v‹L©…'G[OP_FVHÿŽÿÿH=ú€$VSSÿÿÿÿZþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+ñÿ–v‹L©…'G[OPw›×þÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVPD RO test string #01VPD RO test string #02VPD RO test string #03ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙT“zhJDÎ öؐß_FVHÿŽÿÿH“Lž5ëûò–È@˜€¿#-Á?þq@" ø + @ù @¸…îö±¤ôÀw&L†HÌZ ˆ€b˜¦4E‹‚²8 ˜Iޓ¸@UB4@*ˆKô!A@rE:zv­«u~´Zq[jýmµU£ ‚H@’QJ€¶¾áˆ© &yçîd€¶ý[nýwwwœÝç7wœû›ÎoåßÏ¿«†õýïk$q¶ã´¡tw_Øv=”ìô9¹¤¾¯ÛÜo‘÷²òøš ÖÓ£ÞxÿIB*|–i~Dƒ%@ölÍ+iW}——WØzZ›4ôÔþ>#°Ú'ìe3Î!mã¥kèGIÜO´—ÿ?V¥ÿÿÔt)%ÞøŽ9ô|tºw·Yi”’óÑFhü¹t’ÔK–ˆteë_÷ 3I'ïQU+¯þ7ìð#$”ëoÿh?X®R¡PûãiÚüˁOàézÊ~÷¼W¼I'À.j?( _|ïÀGðºÆlÉz=ˆæÖ×ßÕg”@X7!ƒðB¯¿ç‡Óå3¬šIjÛ3 u­}ýV|7òÍW$›+öŸûó…Œ4_‘éŽãÆýá„Þ1÷aGДbñ¨`lL½èHüÿûÃUVÔ]Ìp©1ܦzó/u4]{Þæ¿hÖ¼v#ˆ’Iv‹Þ¾œHp‰Ã{#Ǥ:€ýÓéÊû—MÜÁj„9ðÛa‰¿¸ Ê<è +hèsA§û¡·R(ܘû4pò¢'ž¾3]UZê§÷އ±7Ò3g¶gÛUì$’1ÏÆàãSªhDz +õ|òƒÙ3ìáÈÆ;¬é»nœF»çíx¹:Q¹yáæh´³ƒçå3æü|ÎϘ‡.4,ùΏžmŸ:1óË3æ`ó›îCÍ›yñ¿:IC°ŸM´íY  +:ïÈп7Æý %C·UPjŽ/û‡ê=ïÐ"pk»:xcë̹œ† N™y»?|v!=3h3rÍ~îóÛz)%YP„zåA¬ á+¸ØÖ>˜iÏ7¬¬*.§Ò¨t†82)q¡´ƒÛùéÒ/}8Ñ÷@žó—ôKX=/ÜKß1 ¡¶£ MFã±+Å;7‹øÞ9EÅãís¯9׏-›Ä6oðˆu×7Ž«xÕþë›ÆI›Ã¶o¿\/A¼>ÍX4K3EËö +Šê4_l(‘6±Ý=YmûÞ +{yb¢t͐Ñ~Z’¢ú=‚¢ýÃEՅáÏÇœtüusôfˆ·ªý†‹ÛìXç¬‰ëUV­j¹;_´<:5å Vך­»(+Ñ7¯|í@@ƒËŠUQóÐsÜ åÚC£—LöÊdKZìj·MZ£÷jAN<Á¢àˆPø³Do±¢:›'*A®ÎÆ1ïØ–%ۚ vr`^žxcöäP´i·Û¨zú&÷’ù 1Á¿-/¶<ٗ¿®]¬x…¡1œÛNpnëUÞQÍfæŒp-Oä*(}É âáSÝMW-&ŒÇNÑk§`nbÏ$´Ä\ôºJ»;c r!ýs˜ÿÀðåÓÀîS]$×èüËæ;2ê¾x: Gž~,;&xɟŽcÛ*èÕm1a¢~lÉ ‚«OoÓõ‹M +M¼ní$£þPNÍ Ì|(!ç¯Lë]—1çê‘ZœŠå¼K©ûis.£·'Ã˚.¹Úöç˜R m?¸h¶O0¦°KÚt‹ð>¾}Ꮘz£óŠ17Ö#ڟvgÃêˆDF›«/%?3NELPœOgPGèÑDHwFŒÇÌ +}J· Ûx0HŽ›zTEÓɾÒ4pqï"‡ú1#ºBkQÝ +]AK”cx¤zŒÇ’J]Ïn`V‘z2¨´â½ÞD=Ýß[²|ueT­*ŠóԀ‚Äã* ».€*Õ–š¸ÞVSP4oA$£j<=Ýøùéü8o}0XRkæÙ"ñ1#1÷@"¾ïLÆ.q0ÑÔ×¢BkÏðILû(~ŸØ †òŽÜ5¦ÔCà07’rø6«LXOç›G荩JÂ}VÑÉeœ©®xµI­M=ŒPþ…vôǾ8ô¤’­ŒÆ +×Ïwß«Ù{>õn‹EŸðÄÌÆ1øâ5 X5«81úXþò&äH‘a?à_˜l‹°z3¢w~yӆêΈ £±þàÏ¹ÕhÄIóW x¸í³À­›í¼ñ³Aÿ̶F@,¨¨·ÿÐ&«çr@ï—Î;‘ªÑgéUî‹?˜I[Ðdýјí§Wã¬È•ª5 <f0ºÁºAøÙ£æQ±x%þ–uCÿœlŠð¼#„5‡¾xÌÛU‡CÏEŸÈ$®²žšVSÛs²œpå,8ǐ7Қñm›Bz '´‘Æ;Îe€ðú2iã;Vêc†W®[åëëký6ÕòZ ÞÖ ~¨õ>áuô®ÔnMb—™ÍgL½#Â-hÓ`\§Ý0(Ó쉣pÉgh`>¶ $ o¿AÚÉÝAî¢ù˜µ +ÍÁ +;Pù‘`á ýpƒê_I|߇Ò0]û)=}Êw¿±ò 4ÆÙËEä¸unɟÓ„îŒtÞÓç)ѵ`Mè1tÜËø/̺ÆDÚý©—¡„Œ˜­ëK’Ç9癨*û÷Ãã +4ŸI XÚ<ñÐÚ4âäދGè «pGŠzÐò÷ê<µè¶áäö§Ñ‡•’b²ý»'¬M´_e 4¢ -ªÅ]°ç„׍à©ÍU±T¨â¿ÌL֒åÀ£¸Áýû¼qmɨH™T‹¹À“bIŠ/-ŒKdìgü·$¦LEã®$j:Òje…¥,ÑùYÛHԁQÔÖºªïÊ¡éâþ Ñ}Ž«–.ZM¯ögÉq(-‘´j$ÚÉ´(ÅKímEå¿ë …&Ã0V_Ø^ê¼PìÚnñØØê¸Mˆ˜A3±f0¿Œ,¼;Ô£‹íÂݤgèÁíã—Þ5õ0ŒïƇy$tiÍ[)oË< Ñ-+7œ#…´åw¦J‡©-æ ^û†Yã¥F¸äqzAÆ)@‹.áR‰æLî[p%¼ëpE¯2ÏÓpú—°qÍiF\™²šÜnbì<»Z.eÌò7ZE*јu&— uZi€5r7BˆãHÆr6iæ‹Ì—uáñEl¬4#:´óüÙ' CNì?JH~ŸIõhÁ'ð@æ€ Š»/Z„v@O- U!^ìK Å0LRf?ÕßÂ\B0Z­ó7÷ééKDCŸziàYh•'J6ëÔ}ÛI•«ó2¹†S+^H°4U?žzÔG'oÆÎƒÒlYmöÅ¿·±ÝÚ0+CX‚ó® +×#Ö2Fëâù¢¾­;íA ;¹LwïÓ?ûÉdkɃ±Xqám„°Ü{¤|Ót£ðØÅ¹° lÎ!Õe‰ÐüŽØwÜ['[é9pCÅ3Ã/PôTa#UÞÖw¾“$/ƒÊ޶U݂–ˆRãë×£¸'? ݃¤-Þ$³ÇÅHHš€)ÛY%R`otàšª`Öí.œqYð=™ÔUoÈñgÁ^ם›;¬üwÁê@,ÀØ£_B:ujZê 2çùR$'ìޚÆƒÌ 2M£ËØOÒ¶1övù‘Ö8Žï”Zz ½•Ëqc˜^_äI(]}¢pyªÁÑh~êB§œUª …·E¡Lô…í´Ï•Âì^šÐÜhZÇ{Pº­²…Sh·ç°qKúIì€ìøé°lû°Ù÷‰Ÿ6OŸgiëѲ´ \B$~ ºßhKÓˎ¯XïÊiÆeë%’—nÛZ,½ +Ø”w”-U·¼˜UÀâF¿Ë&óÀ(FwޑÒxçvgÌ©írwÿ8ùÊWlOBÃÒïêE•NùVæojʅ9[s_ìe9Ómªì†hà CbŽíõs‰ïk(ËEyhȈ€»qn²ípà{éX«n7•uF¿=¼?ܹóõ•5•Ï2ä/-CðTƒ†yœÀ“ApêÙÎöhÔø‚:áÀμ fX÷'Þ£©ñB¿$Ìfdiîoì“rÒnþèÞ³ãz_7qvÍ=Cq»}L« ÊË¡÷R ýÔîUp¡æc˨tÜăd®e62©à[óÐށ&Êv²><)g•úÜ3ÏÎÏCœ[„yü$ô<ÞðT +™Õ¶áâ`ñ„µ€c3Dˆ5á¼Á§ÃC¡7lQ†ñü0;›†Áå3ßx +~ؘQùVpŒu #´InŒZoĬy±T^ͦúQ‚OF/NFõ@½öȽȔÁb¯§n'F ûôâôÁ·`׫×)Ý<È|¼Î·–ûèaN„5àÎéæåæqÁŽ”}ºk¶'±î÷Yô+cÌý ¤VšánOÍ_V%USd·XOm‡PO–…ìŒô<>ÅXr5Cxε\±aµÕäþ¿Î/øc1Øþâ6:è¥4 ðB‡Œií9,p^«’ùÄk»qDŲ‡øGR§aÅøÞ¨¾õ*½@óQŽ£®òÆ?zúu3óbü`®=ì¸VølÖßä֘þIc¢ž©Æ]p>Ôj^£Z*݃_àº7³$…ãhI‚’&kéÄõIJoZÌÐz÷U>h•d‡B†ý¢¡êµó,¯|-•ÉÎ>oj½*~ÜÑm[-’žÈ`ÖÆ›Ù“¬qžLqûAb'€Q*µÊºNª2Ù5*´Ìèv@džõ;ýjpk]UdV㼞ÈNGö =W֏uE¨ÑnÐǙ4§UYrD½^m"8\ÆF ½™P<рYìÊÖ½¤ÁWŒ1ë‹Í|µ)¦ a ­É¢¢ÝÓAÞ+‡Pó~g‘)›IµýZt9‚f^ÀôÉ¢,»ŸfcÙþäŠ9ÖZqu¤½6u³KcÉùkq×j4à¶uSðßÐgF4ÍaU/¬‰c}À¦ØMyø·võ°"~œXïUÆ̲°Ãå²³…òø>ojô%OÕ'˜Ùnò.[”~ä0ñŽ¢¾#¢ùgñӋ–œ˜Ë=J?hC/- (ýxZ7A«$Æí_9Õ¹ŽË>ÀºÉDQu®2ø‡¤ªÎÕÕT)ˆ +@E) ä<¨-áîåVÐv¤,9pÒ(•RpØ-ЗŽ¬›«µ4ÐòPû¸}ÖK#ݒâýèI+uçÌ[n™^Œ>a4¨S؜$yz ì4êۑ>¯¥:ô ™ë'+#—¥†~E íOïÍEå˺ñT†k¯ ^6ÒμYÖâdÚ²Óêp~‡U/„ì§½Ú'U=Øbêßzc!¦ÕÀK`¯¨µE8?#ª˜änuÑóކB‹Àz,Cсæy–¢y†ÉÌû¹ÅàBÚ@­ò™­“Z'Ô9q-\p©Â@ +9Z!*ÚYy’Ϊ˜º¬ª©±*㺠ε!gÜê?G, Ô:ÒpÉRú”ð *†‚’¸Øííb¡ = ìS>Õöò]Mu¤R9%·¢q¤Ã +2¬â+Ô·J8À4d€£Õu™.¬Òg–©žGX슆/1º®"¢/øðVŽí_µ@莜€ αô#cíÜ´ð9­VÅË«Û ™3ñ3ëÓo´&쌻£1AÕëØg2WžP4i=uBÎzR¦”E"õ;Ç^.œ´ôÌClh(Îë Ì1ã:ÄYŽ>æjiÍe×ZàÛ3 SøÖqÖ@Ö·U>Èj·8nh[—j<ôȃ­1ýÉ%$•dÝLTõp1¬íå6`\™åä÷ +àÑkPþ¹` +èf1἖`Ÿq$GêãIŒ¢Eü (œ8#S±4’%:=uDøvªWí¦'¾#7ÈZw¼ç ÊW*ŒwO©S?s8™ûðV6nµg’‡‘#äÍùV$Eµ–Îßي&+M~1Í^ÐÀ­Pû#î!°g¤`ã + +Zâ!Q™~Ì0*A ÅêÔן@ùéóà§ÀÃÏyz-½ ŒEç쨮Y>™Ø¢N.¾¢“ýPIÁøò6xÑW,ûÔ(LQñȝ£;·p WvÈ¢ä…fÔ¦¦ÅÛŽÌh7Œ×%&/€(pEø~ÐµÑ Œ}£.Ñf}”CØ2êCùYGL˜¤ÿfŒ‚Ô¢8lvÜÀJ°kâ?v1$£åÍU¾W'VLHÄjé9NªY).uCû@Çϲg!°·e10šÉ¯0ɏ°ÅLt5ºaŽ&ßèOï‹p–óÇq¨Ì{ ‡ˆssƒ¹9ÜRŒÆf† ϟ¤2>ÞÀܨqŒšÆ'§G»hZÐoúÚïèý76³ážvÁôôØò‘Zeá‚0ÏÅ©°ûœ«O†(¸`*ÈoÃìÁ÷9+tÅ> q¼±ŒIU¹ +¤’,|r/¿0¥‚ùc÷ÙdúŒ—åªlË|ªùê3ü™P’.×@ÐȘWI]jŽÜ`.ïþVUŒRûbëç$Ç2…/ëŸ#Wɔ7Xºð7Äò gÏò†ƒºWŒŽìs60S|Cª:qÃW˜7ZkdŽ”¦Ù  ðkÂýìÜ:J¡ÜnE1ݦŪ? ¸°¼ÉÈRÁhèè.¿é®IÛ¶’v싀v- 2P¹ŒL$|?ÿNÜNÐ4¶¤CEîÖäíÿæIødw??þIî}oÏÿB{>É<‰5¼hšÞÿܚö\r&¾ÿMþ ­×ÍÿbkûbMkñþ²kÿb?ʲGý‡ˆÿvvHÿ…ò²Gì]´F®à·G½ÛÿĐ5”HYD€ý’@Gü‡›¼é…äȕ[z¥pè=a誤³ˆ¶ÒʹR«d«tî©D9§µâqm’[÷üÂ1¼M|e팳¬@ÙCò\£‹„…z²4š–è}9l§I#w›Ä-¶iŠ¢†?­(`|T0$2°Ýöy–ü0C°Ãt•¿‹Öó‰±Ò×3¼]©üR‚›ü %#Ç¥(4ó$C¬‘ SÉq:öåaÁغ©¥YX¶ÍÖû&:'©ž-Ӝ׽ůl”[k¢Á‡Ñ½4ö1ý<ћѿ¹É—^Á¥ŒÞº?«@|½ìÇ¢v8¯¢K “]ÅiˆüØ!N‹xQ­*+SaG‹k›Â…Íú?!QÑ=f̍?>Åz ê*3ÝÚ°ýæl"ÂxÄÕžœ]˜Xf(`nzý÷8[ƒ²uS¨$šù$ ë!ö¹TÈmŸ‹Pð+·gϺµrgé±xrœԛövn$vqʇDCíýfÌá­h4œÛ*qÕ+%¿Nù[úbVq>-PüÇB5!EBö¡ìˆ?PýÛзͧ£¶Ýׇ֓—¡¨ÆÑÈ{ºŽs¡j¾že3üéžÚ!øÉŸÜ¬c#µæÈÆ.hN4ûÄ~šxwYt%¢V¢ô è=KædéßydŒ¨]˜¦”Çù9ÈNUÑܖY´!Gz?TR‰9 p©œ”–üÃã#ø†eWFÌT,I¿h†1A¤–`P±˜}ê&+ÎÞ#~¨Ù±ƒ&c„Nž`P©ÿ S^{V¯¸¦¯¨(À¥xô¼ ʼn½OŠSÆ^£ 4ǾÃDýŪ4,,څŒ¤´aƒd5QžÑ>òªµX0àìë¡Á°Vô*à3™¨5Ùɨ¶³ eaŸkÈüvpÏfÌZ cÔyÖÀ£PÏ´<ýîǨ")µºCuAf}mC AÍðøËÚ=>`î7àÞTz °+Mρï{ ò°uΪ»¢eqÅm\–JÙ.do GSîጮ¡d«òþïºÖIø0;U1Âͬm=d†h@v°Óï$â´Dï ÊñµeŠÜ3ÎÇàòYo -O +² Êf‹f_N¢zQE“¿óQÔfÊ-À<РĚ¿ji$@æV{·d™@¹ ëØþ`·(Õ¼Ò<©È_ªfJ(D=c*›P?Dl ÝTFe˜¸› ¢dQ~„àzÕVŽªIï64Ÿ§«“£ÔÙÛV^–4^Õ'UQKÅoç†7ìWà†CáN— wM+#cäZcÙ'÷Ðö£p÷%‡¤bkû‡©”ÛEË_;_«t¬lM 1lgSÀòY!R´ðJ'.^' ru`‰øÉ%Éh$Þ|åâsãw±|Éy!±ïZŒG˦Ž½Ù¢ñ›-ÅF±j/ÄM¿í6n2šNP׆ˆ§D̳Íñ4ç£×iǝ¢øZ,¾€Bî«á™ÍÞZ™å7}Ó ~¹Ú:¯õþá-Æý!µR¹k{ÓUlyíT(mð GE@[âçîÉ-×:ÕdÜÌØÏ݄˜³wòá0^Q”)“´S¨òÁtH¢Vxyø!ö1emqùғÿ–_‘•—ºÕwŽfiþ(¹ë²FÖÌ5^µøiœæÞ#‡Ìh ,F´|-Q+ÑNòò˜‹“»%B,J(>SÿÖaqp»Í*IK‘MpÄÞ¹Òu0P7ÃÊØ77~’0b`•“¸™õËM íˆ??Áveï¿ÙÛݧøÖ¾÷ž=ß³sLÌøºÐÚÎ`Ä3`ìï ñC;ÛFkÚôϳ¶½®¹åßòÊdÚ:ÉfR'Úv, #¹?s°+tv͂¥i•¼Ï‹‰xbCÃGm-,•*ލvâM”¤³ÕÚÔ?ú ÜéÒs½‰¼Œ® “'ӝ0ù€­ôò(Û²Qß`²ùž÷0nVðÝ-i¯õßÞÞ9’Âþ°.HZ^‡àÀß(Æ Íhý˜ÎÚ¦lÌvÏÇ•4ÔÛ¿ˆIË÷‚ÂVÄB©â+†¬0Ï‘C'‘\¬á¬R¦§W)óCuš—|f ÿæu¡„ñNø´öuýóL¼jt|هž¨Á€”ï{Öa m?Ò\9õÀFeÁõA¾A'<3{ø&á5òf2sOfçV˜4ôüàËõ™#¾ÉoâÏŸÄ>Úsæç£JÏ6?ÊЖ¸xúŒ½W°MŒdá-lÌRqnjà¬Û\RÞ,Cô±÷ÂBÈåýÆH³Á +<ÕÃÜímî^,g7¸*0¹gY3ß5ÌÇÿ­;dÙù'|6Ǒˆf>ð&~ý ¯´1,1ž¯Ç´ŸzíWе-‘±.¦1Ø"`²¿Ùx}üå÷‰Q4J_øqÄ0½úãM†¸Ä'$âECV¶c‰-9(ˌÙG®3/À·¸6­‚q|4³‘Š Š¨Øts¯Óсuƒ›ë\©–[í ±l ß²bWû°~™Ð\€2Θßí Dp¾†£šŒ„TjÆbHã›Õf3¨]5²¤dèÉ<[q®=»/UVÔfe].-Hù‹ b1UêÁB¨¸TÕÆ^oÎҗ+"p ­Ú9#Â'‹Ô¤,NuÝx@¦Åâ7yb^ÝäÑoâ`®QµË2E“acCߢå'_R3¿³ ⓄryŒ¶•Ô-ˆlýøà[˜?¸ +¡xŽÈ³%¯ÍmÅ'€5ü±ö'øñÿ„’oeÀšéžA/ñì ýþ0}ÕaÙÔE·—Uȑ\םFL¦WXè' ò³<[ylæ,kԋnåÕH´ßÝÚ½ô[wªõqmç¥úXs¤¥ˑʎŒ3é&ZÆwbÆÕ28D—pP‡¾#²ã…bÝáµ²§iŠFÅ~[70¯Ø´ÍƒªŽ¸Ø?k>Î´Õ 6LVOò“J0£bAùÓFœÄNºð§L»xŒfaPilai}ÔÏB’pv +┞¨v´Üõ3՜ú”ž¥x«xZ]µ¤ 90ý6л=²×€õz¬¿ªÚ;‚öø5æÖÊáÿ{`Ȅú6Ñ­.Ɏ—8 .[' ³÷]UQJƒ³±W™ü¨4¿pxЧAÙükq­(C&êaú푷)øçeÏ/eǬQÐ7ˆý#QàÐeÌÀ¼­`˜þ°c cƒZH2ÇVN žk{QÁb ?ÖÊfóF™®P6h̹ž”’*‡‹Ó?±…Õ—FY,  “F ÖÉ>öežÆ7An\/ÿù#~ Ȕã—RÙ{fOÊ'ïl‘Íj\^“Ä)îÛfÇqþ6ijþQ&rhõˌ‹ºR¸ª(óÉœ<ùã1L‹¾ÇÀ™Œý¨ðo'³¯¾©=šz³Ã1Šr‹ïz"Š‚ŠÍ²2`ñM÷­·FP±­ƒH͸VH£KœŒ¯õ\ H‡àÄ:^q‘½5úä7úÔŒ +ÁÕN” R_`<èˆ;5oCÀ>VÍnHX‡¨{v„18#¸¬pr>\+=[86¹úÉ[Ÿ>cýãÚAÝ+8£†/óH°Mx\qŒ>v§Ã=†ºGľ”ð×7È<%X;¥½¸‹÷i&¾ ò>ß)ž̔æÜ§!¥âÉ…ÂG†e9s]i† @ä<äîT”Ù:õ~D×tóÂ)(–ç0#~zÙ[y[>×`mz7j/ ‛K˜±å'H*çÆ:¦/¦£ïΎ@f`í2ÎbU|Nª|Va3O?¡(­f?d^D˜íˆÉå=jïÅÌñmdx~Ètá™xàO=I[ð©mþ•³íB·C¢Ï6eíIX¼{‡³&²=±+n‰©È²6Q|Á6ižû&‹Ímœéˆ&4©Ü9.U‹µtGë)‘\FË|j/X:㌠0J$]|ç:5—ûô¼4¥øhƒŽ` kNFÕ衂Áº1#‘¯3ӌ߁;gº³E·mœêLS˜¤Y•Ôn,ˆ÷Q\ñ‹jx­–á3ӈ(†ÂP+Tr‹Ëø±æ—LŒRx;…eÌÆÖ½žRZ‹ËIä™_ÂÚ¦3Їè2Ú׿ +{ª‡†ƒ7†^i3֑íôé3‘ìC&ƒ”GÀ&xO9Y“íòY全Ä.IÄ7ƒŒ)µm¼ ‰]^3§cÚ}}o±ä¡™tÀœNy3•@U·;ˆ½¦%o¸ééÆB»Áà)=gZ¸>1—£!Æ AX<ŧEà»4tœ‡­@<'²OUÞá‹!‡«Ä-Œ ‡lj›“FižB"»!QÍÔÇÅœt_¸~%ÄÈOçÖz¸îM"qg‹ïã—ݘoü:ò3—€2îxñ4]'_º“3i”(ôÂÀ†áœC=…öË$Aôyê<ãj~ȽזLv£ç3ý‰(f GœHY9ÏMYô…=ïZÓë…÷‚ +òîcÔ”ĈÿB¼Û u +òîº@hç#n[$³f á†^Y<ŸàŽ›5¾yÿp²å4µ(ŸÂ¸G Ã|ŽGEÎ\Ëa×Bø<’²Ֆ¹}¥?Æed·æˆÌywÅ9@]ü}t†ƒ-\‘t¶4üë± €}tŠÝÅCgo²·š?̀YéÆõ„O·-5ç¼Ú!,ž7®¼¥•AmןøÅb?¨&–ÈXY¸¥©Âˬ‹¤†|–hýßN0%hÂ<³1Âö|µY2 ¶WñÃtÓJE¤DI€¬²Âæ '¦ÏåP㡗ي1ß9PP]H(æ{ž¼6¸AˆÐW†¦c¥RQ‹ê¥Ñ1à +{÷å=½)dù&EP˜‡ÌK8Ä ¡r*£ÿú‹wÐEEGÄ_‚y¬!ÂlJ‡B í!¢ˆìlЫ¥¤¹b^ÃÊè CÉ yʧޢ×ïÎPý ¹/-´™ÅÂðÔ_2ÈËo§Çl2֔O6Ú@¶˜ýÓçsŽ4²/t[x›=ºo6Ôüs<à¿Â‡43ÃQ\.þ5µ¨w4þ|þGÝul,õ‡”é{Eç™ :ï„Ëcøb¤Ü­Ölûˆyi“Ç$øiFâÎlYDëÚ϶Øû¡Ì'^ϛ'ĆÑÀYð ð)j8i=xë›Æ$”ý_ºG@ÑA‚{­ŸH´ìH½ªðDïÝæoç…ƼOâ ‘A´–¿80ù¶39ñŒiºfŒiøÈƛü ÷ÑyNŽÖÑÎë—Ëè™Q-ð†.ÛV P[wŽ=2ý¨Z“8r¦^Žh[#É\=rÝû4ÙóÈ|߯’M|«àpLT´H.­­ý2ÊB76øZ6>‘thÓv0£ÂŽ p'—8©ç.†Êwøs%SËBÎCüƒ¥‰Ü}‹ü"lö©¼°‡…XÿЉŸÂDŽnh–ĨòÚª~?p¦„ƒOº‰>êà(FÕmÇÄÁ ²T+bƒÝϼLÝn‘ ülXöø/O#l­ãˆ\>è0å%,›Í»üŒ·|¾mžƒಪ;œnL²Ý -öÛg­§íXn+ºï6ð7Ÿ +B®Ùµ]"*@Y³j¿Ò•Ý™ç¦I´©hÀ¬à8â¯-DóÛ~ýz†TKϦòÍþz(ts;zÞèYÓWùQJ”GøC-œpg}u‚Oúƒ3±3Ë*~XêÒ èbÀ<çÜ#3èÆ¡ÇÊ,àlÞç㋠7'×{èÍZ0“ ü}]³ýHé×#NVέ°‘aÌÂS”`+–à(´(wã-Ã@Ä!¡u軍¸¬@2½’½¦Ú¬\D^ +q»ìEì-*Y§ɈnàüJ“„(–4O>m$œ\[´ÔáãÝ[À#iü½Òçr§ßÄŃ MÿÀ;2pöÃ`º2* 4÷[n€vgûÞó9ûåbaØÏÏs2ÁÚ.¸I׍K˜ºFª7"¢Ù1ö«pɺA¤>ފÇ/í~òhwØC–¸  ÛĞ?Þ (n#0Áψïéî0gòmÁ`{_u šsh”cyÙèÂÐYŒ<¹Ü®â$‡MôRAÐú¿J«ÉפÅFÁŸÂ‹µjb‡Uæl¥­ÜԘË‡[ÝS£Eõ$°wkÉ**Š›3;CёcMD´ÚOã¢B*–eŠ•¹9ù—¯ÿô…¾Iv˜/!$xÃîA®R9Úç}(E˜÷ ÌÚ Lã-´"Xm¼ŠãWHÌìŸïJå)ä÷DjûgÝ$ž!lt“ý=а×iøþï;¢Ø=,_éKü€ÜhKQX‚U¦º‰^hpÏä»vžÖ„P±+d_é=7”ºï‹»üzÌ4š";òª•m+Õxã ä“ É¨Ö†‹$^Q@®¬ä- ò»Q~‘Mš paN¹B‡‚mØP`ŽÃ4†Iö·à2Ö¯ðF[T‚yƬ^ +Í?Xº]aš'4àéÚ¤Ú¯²dƒÁuL 7œ,1 è{“ê¾F1ɆdNrê%§xEƒ[Äc³/4ñØÏ•ÑðPØìö‰œ]¿–›máyl:×ßwdTû ñn£¤ìÛ£E6ˆ´CÅVlû¡[Ëú\…žj +û02 +,§ÙkýiA¢Æ“?æ:2‚N&ÔÐl(ó‰OéŠÇðtÌ4 +"Õö¤ÅEçQϧ.}‘ž»jïÌsê£só½1`j~§.‚‹Ï§=haÈïK1px #“eÌå‡çÒ~°ò* Ý”ÁO‚dŒ·á+ ÃãJ—2*î6º«¿Þᐬ_\¿èGøÀ;Xc‘õ¼?cqéü.„Vx·Û‡Ø*ª\%&n,Ï®èƒFg,Ã=ƒ+æ£Y¬GîÊi°'šìpãv jQvÙ¹E ì"›!³?c™,Ââ +Çøa% õ­¿ê ô¿ å¢îu·®<òƒè/Á!‰Èê.-mÌ@Cßp¦æÚ¦þƒT?·Ÿzۊò]·2Þ½½R-uä [h0áTÔG7{NÜ•Ûí×oµ¼S-ÁM rëé«ÅˆÉÿžd˜~U ¦%;QÌ*ºÄ‰°{Nqfò¸ŒX±@v¼?‘ˆ Ö 8ÕîÏCá$–ËÔÀ˜ë'òú'•Ïñµ^¡ +Iýÿd tƒÃmv ^ßù‹gLÀ-x¶±À}rÂISK$>ŠÏ\"…áșbø-å~ep¥Rµ Q„jëy%×q 7íuºÎÐ:;ŽŠëX›HÈ¿’$— j‚J^R>Ò“¯ åNO½ëz[m¯ñ¬Ý“¨V÷] ¯D9¯ÃRY¯Kp-0—ñNuÈLA¦|sšÛª!QæÇ0Ì«ó–Ú\þJB6«ñcr'vÁÊHLA„N•äZŒuéB¾,Ìe·ÓšÝÒ4 ñ^#WDh¸ÂZ¤]D··,aÛiš‰–„i7J…‚͘y…:‰m«VtAñ+q¨£¿he½È{ ‘n?^æ3Øpfñ”h9¢ ê{ÂÓ>O;ïu ðé‹1hÉLMe#£ÐÓ÷b4ü ›4dsfʂ\‹¶*Yþ{¥j%žÏa‹rè½|Baµ40~‘ÌØèð‹R.m¬û¨Bê1#Úñ®ñ¹bˆ:rEõ%®Já¼B?­ñßÿ†Y›«–å0É.E¬Ÿ+¨Cr'ðîáy ÆÎ¯8ï,|nC>>OÙБ©y¡à_îøn,£‡{ bq~Â]%Nû$Bù)²ê/@>èޝ+†‘CrTȎ3“VB¨¬_ɞaçp(¿œqnãè-àú…ꣻ±·´;ïš$Dà㒷A½ÎA›Ü·ö:¦”FEj4dS^m”¯`²-Þâ}ìÿ‡Hqˆ×й(•¤à&¬öî.å€ûهì á֟Õ@…*Zö(6……ÌQ²uh©Aú*ÊÝÄ´ŒfTlQß¡;8µÈ|á^Ù­?mžúÀq d0±«ÁÆzrEd- «2½Ú¡IÈW¸+½Ã¡|?:ñÛCüŽ!xüöÊeÑlڕǗùd¤“õ‚ìMº‹qÌÅ™xLi—½Ê tP¿­<] ކØã-HÜXÏ8e‘Ì]ò[²%Cllÿ¨ˆœZÞ[³–,•åä‰è"ŠÌþQÁ—ÉÃ'’໊ȏÃ1(Ô +¨`ù‰Ã8Pîˆgë9!¿_-ôØÔÄjƒ§o€Zhöǎ"è_Õð?I±Ø¨1ÛN.€·Ùˆt[s;ÏRéz¡y™9L>¾¾Dý ÁpPEhu1å +K²pg™êZ~þ¡äÆXÔÁAö`„Íà)rAÔ({ÿùþ¢Ü_êùë.AF<š¦˜k­&× ËQˆYÁ…+v1| +>G&^G`#µ.¹A·|z²ò]™•fÞߌ6µÁ”I?s¹U‡!g´¦˜¯QxðGƒÚjä·T+õÖn®â3>Ã0’Vÿ¨®"âùå +›IÂ<ø®ÌÕÜffykOŸ6ªº¨•ï'û;‘¯‰Œ›‹ÝÝÀy·kܔ1™'øáõRbWº>c0T¹AöÖN˜ü›ñXLÑAúêi˜¦«÷þFژ÷Ê”TIÁõ+øÖZ¯ÚC¿ÈÒ9úi±k$%܏Úo áÝÔU9à{spýÐy„Ð.ä;ËùžzïñWGo\â‰ét/”šT|_2äÿÓ/}§ú¶ÉܱˆÐ_õ8¹;ïDƒ )ùÛÑÜ—ul·¾"f™%ó3GÆaã s–2ô@šj6è÷ßSڊlÊÒµXïÃÀéoE-”=YlÿeqˆˆýÇæ#÷þ1D·(¨û£è·¬oúô.ðc|ûœøýíØ¨ýÑúò\㉠[£ßã[O{wÒêî2ùöžhËg¦ƒÛܨ¯o6$â]ù^›·ýê++'Û° +Ïk¼»4{Ÿ†$Cù{ĶäŽí»cþçþÂn0Býy=\"ÙÜ ¾Jð·î/ošðfúòsCÏóǞÊWò£²ù©… *B¨…~õ!F-|滣oP”“îÃè}®ä¡t|ŠF¬[÷áC–é=R½ï©ó) +}ú)ÍzÞ¡« v>3j¶‚«[}U‚™HÄögÚ6«&4è DÚ³É0<ØæÚÅȖgp×Ú­ìhÏxBÂ-ÎØS.L&ò¼$ãkÐncË`Ý–)øH ’ƒ” +ü Ÿ˜ZÒ6ÆgaKIÉä@/í‡ß÷ïþÎt>oúa+wÿÌWüì דòG¾™°¹"¬¹Púã-–¦Ÿ®êÔvœ£Äw2úá„Bž‡p8­Ï¸¢ ”ã”eŸn]P'T?V“Ûö¡F}‚ñÄuÝáEYdñCTñò„ò±÷ùØ)[ùÂÆÆ4=ïWڕÞPõ|æ/d2„iç­ÜÞ ÿƒt0¢Íp*Ò¡ƒ-J†‡Õ)ÕuÖô+¿Æ¸õPZ¿rz Ö¶-È ÄmUyDbYUΚŤ•=pŇõ?è8u¼ŽP°÷ýFƒ-´|µÓØ<@^õ“ùè§1Ëè㜨·ÌPŽTë¾)ô¥kƒåKtßE²Èº…oŠ%{ðӃÑsO2ne‚êo̵ƒo#h-tžÖ–¹Æ{·¡uÛkù#þßÒ*2ÄÌá&»í«‚~æ‡gíݤ”æRɵXŽæ{êxGãþ¢ZÀêßÈ_ ý8¸M'é+ö̉̿EE¹J/•ÀCr ëÎÙGõ”Ú*y©Õ_õ‘ââ"쟻¨ÏDó¡¥¶šðkê‚Ö[¦óqO`; +Ò[F0´A3;„Öí>Wƒ ©´›D[vZɝ5.†i^ò=òºv ‘õôî,Ÿ8¹¦ÜhÕѸç¦ËFÎ £='Vý­e¥N&;àQ zuäèE +}Ü"¾ÖuÐõ#‡ ^s=¸¡àëîA Ïñ¤êîÂ+Ò§d0ÑÃá:7l×C/ŒÐâ ÷*h=»T„yh)¿G¤~eóÎ=h¦E¸ßn)‘oˆpÌ¿”â9 +ú$¶ËÿÌöàÝ`P±U­u uWBi›Áh'”¯YòçDq óxz[Ý ÙP÷?Ûׇžß°ˆÃÆ8Œu¥½&Dü"î1>e±¶Q–‰„P„úïÕlkö'Õ<³¾e¡Õ  <~«QŒ+ºî¼Ôc9ð8B؋;Ñ&ú>š¹þÜßf¤¯>¸ò$aóne’1Ù¼,tòdŒÏn0¥g£Ã;À¥‹˜âW‡þbU›UÆK•#·«1€Wî­?“#/@É5·QÆ®âH½ÊZ?ÿeo ªÊâ€m±´MmÛÖÓöŠ3„'â8æƒ +©7›Ú}ðõi­\jî<‰—ÇÈÃÃtÍ©ñ$k~ÀÌù(¦Óyði}ãA²ãiOíEsŸ•$Nñ;Í7ð1 +;Í5€ +ñGgµÉ¡»£ý´Ñ°Zóë-vàøv*.íªÃÊ^Ȁý?*VÜØ"Uì›ìJ%_j1á3çGÁ è¥U§pˆÙ˜Ÿ=ýjÐdâ£ûë$÷ë"stM-LórÛWú@ðÿeµ_^%\lmŠCj«Æè̀á ï"ÖgǕE)*KïÜ(¼¦`)ȃÐð!ÎAûØY;Õ:äÎû'I“<¯Q|ÜC6ž¯O™¼4HJclè¦,Æè&'\&õy_O"£ËDÛP0axÐ=:)ŠôÙٚ³rfÓû€ðøqß]·ô†Õ¹=ña#nS[–P‘¾ +5M_iÐíôvÀ·DÒÐ ŸD¦|> ÅxUM4Éü€YÀležË¢ ™ §-d^à즑5”„ÒHz)ێ¡) "”FŸìô´å ¿5òZ‘:R¢ù>.q «EY³I¼±ò™Ü´éÆl#ùÊø?ú¤¥â*è˜qeµùÁÆ7Eµ_ûÎz‘|Ýj )]p ´Ïk(%Ãþ܎}ÌfÜ%qê$”’!Æqí ^6MZï4ÍÒŠ=:\1„S{ºòAñåÅÍDr¸H›@Ä,ÔnQ¾X*ÂhˆU®Ó´¡VR93;J¬­šOäSÀ{÷[0 +[š'¬îX'EFyòO–:>ÿ<ºmVL,ýh²q›¿Mƒ©+ƒÔ…ÁÔ£§Úˆòð>`š=t}ô½”=fc6Ü}wñdF XÁþ˜û!X$Yç#I@i”ä›yÁÅ\Ù«XÄÝH$<Œ]ŸÂeÌkjÍ4h³ikpÆùˆ*çý¶è.AÄaFÖ I:Ž™EðºÅ¿Ö¤•=í +Ò[Ã<µÒ`ƒÀ;„ÉOæyÀ3j 7ËYÙî† Ï¹|8öE ¶ qpÇß¶kÎWïºú#æ_ßeÖkrß ÿ+Hƒ {Kü áÆOR $Ezæÿâ@'gÖØ3ûue²Aê5´eèYŸYwJ¾ÙÎ% •åm,™Ž Žë«-9ó…æá…õýéô.ÿՔnæò¸u +/¤2̓Þ^¨Á³›VoKpf[̪ž*ÓË£kīɜYbû'2gö‹Ç$ôâÒ%¡C×$ûê2K eÅÿà¿O¤>®d·ýÒ+²uÜiµ£éiÁÐÌ5I5ð³ü˜ñް8dwë +j“LˆÈ{·® yh”ó8è ‡€"ü Éý÷ø¾d¼Ëå͗ }Ä>äæÊ5Ü{ïfﶘ{oîØ)¤ta¥ˆ'Žâ‹@sâ¡^I‹÷»éµ[QÖa̯'Ÿõœá¾'–­µŸŒÞyí¶ƒjÈ·ÛPû-£ñ„5ŒŸ¼@ŚXЏI µ]i<÷©¹3¼ûš‰þˏ².Ë ò†…w÷%Í ì1I­ò™´íD»«H<ÙÞ=s¨O`ô$[yY¶¬ïƒ¨¬ÞÔϬ| ¸y>t@›Ï˺ñ¿šIS̏Ç^ŒjkUî¿@ɸÞK€Në/¢Ai“ ªŽPR²u¬Êêw©^ЙXÔ&E5¼}ÖÀ>)²ó‘Ø­W¿±»´P:VïX©žªŽHû ù$AZ0àÝD¸ýç¢Þ^täï4ŒPÙG߇S¶/¯ÎZƒ:«ëö({ªø9bÂ\>cð›1ܞ +ù[-ñŒ6» ›;¡*D|DÁ$®Úˆî˨µD،Åó +e·GÕüÂrCÄwÏVÜÞ þˆP,Nِ^2kÕQ¢ö5yTIb¿ÀÛ Œ-áÂ-¿ü¸{·¢XëpVº¬´má‹7LÛAüdÇs¨’ÕsGjÛoRàH¶«ª.Š:LõfFýÈKâòku‰ÁÛătÉFϽóÕü±"A‰þ]îÈPªùjôÄä¾ÜúîlX—Eñ‡¬:Øì¡ñyè˜+éÂþ¿úßv÷@²¿?;ä# +ûR´õF[Tó€ýònû7ýsPԅð |#Șc,!ë—b \½­‘»ŽääÑã÷ÄkÿOÉô@2vûtv¶í¯ÛÅqYjËéfàÄpá·yh((µ¨\%Ò.qs½‘ +Š*ÏЗnnA=ê.ún x¯çæZá娪Ë}ÜÉ"g:;Ÿ%73¨2«3a:Háf +ù‘z©­`êØÚáÀ¨ì§VRb>²ÑþpËãóª-\êÐÌù ¯•䨺óâÅß%•.¤Ëf ÄÏ£—bUŒšªrZ™æ[2Ne@pi—@U5¸BàN…xùˆ3x -)“/ +åþt| qª2LäÀñÆÐL…ñS†glšÒ\3ʆBúÕ»L„|ìB=*%{N‚¦:!˜!¦2Lz‹J{oKsx&»›—ƒ£Qb(–°ŸxÖy7‹‰ +‰wևÀì-͸j0MøƒÑi®zOكý«ÒƒlM=‰\g–zFŦ„dP?ñ‡ìûÞÔÒNµø`ê: `j1ïVS >“O@"Úº^–284Är‚pTᵈA”ú4ûX©'}:h~<Ú¬Ëfý¤J6°ÙˆÁÝ[ŒH6òë†ZÖvP>_“¥³•Yðà¦èÐn±”òfƒÎÆi$]ZôļÅ:¹m谚 ¼›ÖôK£µßq  ¹‡.ÀP¡– ª¹Æi0?ɑû$+¿ìGfyû’ä¦ËÌ. m̬¬‘uÃZ‡]1}¥ØŒÅÖ£bì¦Öp@ÿ4ó' TþNIå,2ä¼óvQÞ»“s8&ÄïEç¾7|}D´eòY}a¢Æ&}iláDtbÍ>g(š,L%1µçÐË_6D_y«ø~#ú*{®§çã½Oh·¦¤¥«ûلV Ë_æ‘pÙæã¸",ÞÉ:³DM¹–M­¾Ï Äïx,™º…^9ÖÇ ™ +¯¼Ê#ü3mŒë:î#Sh,Ããl™™ï!ûiÌn̼ì}}ßw‘…^÷a©ÖÇ=ê!=ÊB‚.÷àÑ ¿ñDn¶ «Ø^µ ÐâE‰¹ûȃòGР߬¿øŠ—‘Aòî¯Ã(ýã·Û LUËRêHsÆ […ŒÔY)5Ï'S[ãøýGùišNŠç Äײñ¾‡b7løKõuÃËÛ‘Æáê%ªX‹4cЊ*âÖs³¯Ûز±zÊBÅìvÅë1Ez!|¶ø> [ÆÃø +­3) »Øú÷Bklœ-gòä‚O<çø³ ‘L»kãéH̱†q&_-‰Ë ɶ,:韖¥iž˜‹^õ.rHˆXlJcOjï̐,JsbÊsÃÒa†¬BzY Éå= ᄛôå²[Øۈ×uz›£¥í‡¥ïK¥mW®ŽùØ"cuä:I(`ŒÄ± ô[~tºr||öim7Nˆ÷ã‘Mì žñí&>~ÓlAdä‘Ú3rr/p›Î| ٕ™ûèVf]ÐîŒê~Ê?ÝQAÿGÉfÁ[‡²Eêd üÃiñ-¾¬Ÿûä iì¹ ¼Ònƒ “•wÂþ¤öÃùÞë * ºÀùØ£ç<>åé#çÓGüuˆÜgô.FtÃm+Áw˜ ¦ðÔ]¤ÇDfÈQȔ䘣Ô¥…°¶ÜÏ)E皞›Š9+Óò’gtx%|±\wm8L™Og-ÿ<$gü²ÿ¼Ÿ«…?`Ê9ëmŒ's®ÇäaCýª¹Žnµ ”Ä­ ‘ʼnÿ~0”ÿ/_þ€…Ú”-2}n+Ýh¾S>[›Ãíè+_YoÕòý±}…09DP2+$J7GômâD‡· +‚’ññe²&nå(qäGI|ÜՔ&z’Êê\\ü¹æ1Œð|¯Üœ?â$ +ý€î§D +ýV1½ý+– €‹ÁÅqÿ@¾•Ý%Œ*K‚}ž,ŸO‡ +H8G䏓㌽0ÖüÒÅíàŰø•y>;-¶,ƒfµ3º—ŠTÇ3ŒB!ƒh›ÍޗõfBõ‰%ÂQæÑþ1Fvi®›3Aâ‚;k“˜®áe˧ö1†tĜ¥­ÛµÎtA—~_7 ÃÞì&¶õ1"\Q®þŒb½-aNI1{$f‚yŽb$¾³„˜CžË¢Ä7Q:ˆöHÁ ÿ¨Xæ näöR¥0˹?D‘8ÁÊW¿â‹Z֑amÑörŽOzw{P·çÜ")ü@†MÒו9HPIÂØ£ƒÚ¢ÙрÚUeæÞ"GSË6ߏe»½æoLÏ<äéBFi„]½,hÔEIhRßp +#wËÒlûW£)¥Ԓ~ ñ t Ì´ˆ¦‘ò¢tԔkiÏDO³©Ø#Õ­}òµYÌÿmÙÞÃQÅÆÞ—I‘(ÖTy͋±&ÃöR}ù}ö"ñ±'5eÈ9s´ o°°aäíØM!ÁÍÍM e±sr|ÕäðÁ˜G mœAŠÑ%8u‚nìV¸e ”¤€ +kŠ@¨,dƒ°8µÅŸ)”2„UIʵR6øfAˆ½E…ü-Í W;ò6žLg¹~yšK?u¿!¯Ñ[Åž*îë®Éôû§‡ô‰óì\ÌV1Íõ…VÒX•–’Þ1q1¨‘SÎÆ8Ú°×cmƒs3üˆ›ØððŸ\<\Ë\HªÇ(T2öÏQ`‘$NՍªöʑC—VÄA¢³Üx‚qOŠo”çáï3î{š ¯:#×ûa©/W)¿Œ™EٍzÈí}°†8G¯øÀä fHØ1³¿Ym ÂöÆY—çÂY!—¢ÉN‡‡à§…=ƒˆA6—ÔºšarF&Wµ‹ÒøÉª™q‰g}~W„šïs6ç?&z‹ Cã'˜ß®HW-5ËLÉqJas™1JBÔ*A”6¸ ÃL†á-Õ †($0–G +MÇ^äЀ=B[áŸP eÏ,sãª>c¿ݎYm ‡|¦wNIœe—œ4…èwlÙ Òx Áí쇿ø¡YMàR¥²°ß2ÛM/°š7`ކ„e HYÏàR—v>ʛÁµ6‡¦|¬sU2©›5b¢åÞHŽpq{Ãq5Ê!›‰zÉ¡÷Âü4UÏd?*­®a‹ü^•ùq”C´*‰Z>8m‰ÑõP·øn,(z[`4SÝã¶AéÁ]‘ÓsR7ÃóÉ}å"¯x–Éì÷XS؊ÁT¶Ð‡±EE؃"£^lgºà¨ÄÅÛúqJD/Ÿ.ÚZþœ=¯6uD$Q ˆ&‹D®xøÒ"…-²jÆ Gà{Ìà¼ymåRÓS›ÿĸP.`§Eß^D`€;ԇ¹ÆJ¨–çtD"WhsÈöxœfÛ&=¶)î·wŽªÏ ’¸qÙ­sC“ œž°{ÚcÕ§ºâvt]ŠÉ-PÇ Þ&Y°"¦þ`‹ü}h]Výü©agÇçÔSÌ*ë£Ì- {·¯õMÑðnIæJ6³yJû­OÜ7å^^|š£»%ßIåß[üG‹)ñõeñ“ºßŠ2؅¨r[s« ¡RD JB‚eÛ³îþüÈð•Æó&õñùãθÇ=}Ë2üÓð†éá „D‚(—‹›XÆ]ŒvC%œ…’&9Šß°CxhGm½œB©’OíâT&êï [a:v+œ¬àÓÙ ý%¯4Á²òü +¡má|a?Ó ýâȏçõaWƒ4…© @ƒÇ8=¼¯¸cUC.ŽZP|¡´ú™ $k}õ¹rRè«â¥•ÖlxxCÏ@ÜÃÀG¾ß¼y¡~\(hxuˆ\žã«êÚB¡îô7Ҏûƒ!v²¥@™§•›5mðŸ8¨/sþR¨%Ö;ÛxZü8MKýn„#ýã_È)·V2CÙ"‡ñ ¤.øp(Mwð„¯öí,­÷ o„ïRŒ®Ð^{¼lø\ø›ö£ÔX„ áHVŒó?ºFÕ»ßÛ˹»Ã?Ñé*rpäŽížâ¼¸QáqÇArƒÂ¢ü|¯ØØ"Ã韕‡K•+ÅKŽjáÒâó݌»8Wbi¦ßž½û€.†ÐèõÅ÷_ˆ^èLT«xý`»œx“AûÒ :eïÞP<àî±°ëɟúÂ2”g€áã«ã¦é:ØÏö6ßÍSS'ïf+El¢ŠS»JLó1] Iží kxô³¹bb)#UXö<=³Çæò¸ + ©i>ç´7GB*^ ¥™º<¸ÎJÌÛeh踤+Rþ×V݁6xÿ7T=?/ªFleÜòǯ:tÖø`½S_ߔþoƒcÞ1/ܛßėÛSÀ¿¡94¼MùJÏ·å)kÓ·å?£ù +N›Gܹ$qßûA†?&ÕlÙºZÛouë~Õ&ý‘X§Q¨I‹R“É´4µ6ä:gMÑ¿­LB…àÔ}Ù½Á{³c|µÖ¦áµ 'y£Üä]â´£–ƒ%ãÌÆÉ%¼FΤoí™-»·ë5©ˆsó#Ã÷x†öÐ zVöɚˍ+Ž{éCÀbüýTa·ÊîKnB>ñèv3aS!RD*vÛÇ«a/öbr¯Æ §›-Í5k½y12Ø )5’ürÌâ¤Y!\ÅÀ¨ËŽY@¤zÆåsH ¶›åA]PGéÖY±BÞi +ÑîáyH®Ö’™ÐÁŽ8=‚:ÝMáì îÖ/”¤^4¦ës½)Ñ6P+^€¤‚®½yò‰›a„Êë0HúƒÙžûª÷Éæ"¾½ªŸE3¾’ïgââùLYò˜ Ó¸C#áÉÆ +š¿ bGþòÞD¨Àɽû×uJ‡¿Lc +o—bL$ÐöƒVˆíà‡»kËæ»v€GÀzz-=ÆmYî;5ƒ îabº€ñÖÞ£ôk  +j¥Ÿâ¬ïM2^ ¥âR¶ø…_·POfÛRø¿Ïԅðúry¾Î£8ÙÄ݀ͥõËyê>ŸÀ]è¶Á铸¨eØüZ­]uê,÷ÚxöõÊG‰Þ¬¨!7qÙA—‡‘ÜŒ›Çƒ/„ÝÂIoY.¡RîùÃ~½ ·‚ˆ¯7Þ´Xû1b•—Ãg²Ã©5µ:r›  +’Ò3N\,¡@AèâÒÏ×Ù&!³ '4²D‹pól±.û¢—Ä.õˆô\qR0pBuee=|ž¶îæDêe 8óéž5ÐJ©lþtœÀ«t~ÑéƸ°÷"‹&Si +S@N‹šs0¥,`s‡¼yTL¹„¤»Ì‚±‘ý7_0\Áðê ÂJ7áŠÆ}µ käj·cÝ?K^RÍ«3¬1=@ÒæSÖ{;´êã +Rl²H+3Ð*D_¿ŠF[˜åטí”á¢È‡EÙ-ÿƒž‰*èÚNñP g¨cU¢ýd?I«Ô©s(dîŽÑëÃiGów j*ÚÀ¯Rª¿é0ݽÏ(s6¨x+–l‡n ´Ô؟!‚ÕÊBÄg§ãp×ÜÒ/ƒÎ^Xµ¡&%«0ßôhÝk +à*á/Ü5íC<(º›+nÖ֑yTɨm¾{ÜŁR•B9¥&M¿S~+Ü&C4"ÂtxÙÇ·tˆ­Ôäb¯Éš†?½ÈÈ>·Ù9’a‘b\v+ícÙÜ=oÃÌh¥wpÞ-^—‘øc¦^Jt,͓d’)·DöÎÌBÓÆ(zô¹22Ç#吰 ®”mRçûi]~Ûwå/ zÿ£8«Ó&ŸÐ+¯OsØ,’´"‡¥Á›ÂŠŒÝõR3§—Û®f–aeÑ-˜®­Y‹xnŠþšë +Øz˜å#ÚÔY‹|­‰„•4ã1¨bâcL.µsNqvB²æÄeFèÐï'HPW ²þL·¾æ£(·ïÚa" o¤eûŠSÂ"€2gHVªè‰­EۗëÈ ÌîàY!ØÇ¤ôúbáí +\fVÉÓVò-æ X¼×Këò7ìPÜDTêëpe¥¼È`YîcnsÌxÈàaJôs¸ë3ÏÓÊØT‹f‘ƒž‰äÞæwd­ÏoZ2×ãpóg‚E`eQE @Vî<¿³.‡†ðxyf’äÒÝÂl)¥âô[vªäYURÏ6H¶äñ«é9Iñ+d\íÙ/uœ…“„VÚ 5ø+ÝPqª“WȆ„,Ú¼ré™'[¾)ÆÕºkÑBaI4ç·â¦mÆhr÷MT3ªD@OvpòzS§=åsÒ¸|ýAÑ}iÐæéIè§4…Š3Ṫ¥MMc*ª¹U-a%U5U*¬yßꀊÕè¼{î1úm‰ÛÏt§ªLW$6á½ï¿!»—¦S(i‹ÊÑǖà\Xu3 Ïo€G:*G;4xŒ®¦²GÝP–zØ}‘ì@º5(ŽÁ¾©$9§,— +¸\šæK÷T&†n;{UÖÛ'ã~çp!¨ˆsG&óš&~7ŸÌ£ÀiÓä7 )“°“SØÑHÁ€ÎRºi/\÷'¸bª¼ùH@]«T2ḭ—T^÷AØ6CX1`Û¢°@̇Xêòg|<¢Ó9@o0? nú£§=*°³tvLB¾”w^f‹.Ö:_7›kí¨3™|¯mCíš¶ î;l´vw.Öz; Û*&Jô»ñ=¦_2ڃ¶ûì{Œæo+Ú5Ëæû€»ý9ò)×}<àÓډ¾ IX‡ó ¤_çÓDª2'-dLä‘8ˆ#"hϦíÊ{[¸[ùŠÄãWˆƒ1]!^bÿ9'›ù‘2*þÆ3_Ì7-a¢ï6F}ìôÇ÷¯xE&Bb!L„ðÕO¦Š2*sdV!a‘I¢L6Ê~˜¤ÚRŽ2 ÈÆ¸C#2ËLŒœéLŒÄt†F&Ž2ÿe{9ï:ðF`À™€o€o€>Fþé쟾–ñŠŒŒÞ,·Š²‰u?Í\Ù«“GB–‰2:rüdv" ÈïB2ߢµYeê$€ÿ½˜È4\ÖA³,¬Å“†˜³ bÏ&Ö!Ò»§:\Ç(Տºkú€ýô?÷ÀÿSÿf½‹·¿Ú߬¡Ý? Îl4ïi–@˜±4Aö¢ ® çà™Àͪ]õP¾öü[ÿßø¿Òs¤<ÆÅþpR¼SdŒMÂ}𷼒é@q°†Fµƒ24OøÑ?ãDÿ‘ÀZÅÙ +Gÿ5Æ>áD>ÅÌUŽ‘»|?Жý?ÐgHÅA +£p‚¨Ü‘R1ªì¡BOÁ³zßѪ3£ÇÆÚàl°¢çâ™ßæâW&À¿—Kµ*/Þ×üp¹¢…ጊ »…â'<@œñò±ƒþ]¼5¬%”¥Sðoë‰ Š ç‰ç‰ÇŠ‹‚2,U+‹Jâý õ¬=‘®‚¹)°p&`û\ ¹ ú~!œ<Ú±Ò,@- W@W‰çÐ\N5IÌUSuÞ­P¬£‡1_†YÍþoúÙ/+áÅaú±X de«×jQ7!ˆ‹27y€·‹µ¿Ù_CÏ«flØê÷\ZÁ×}ԓÿ]CþªWÿ¶©ÿ{îú}¥B¾„'!‡Úݍñ7åßm’÷Ðßß\¿Æ¾qBb·lA>0Cþ2Ee¨ê¿x÷è?Æûì'¹Ç­lÉA±=ãOqH{ª ÿ„„‚3)G„£Â +Qá$z;|”lûÚYô.£HKÞs¾wýC,} ÝÒoè z ª¼`׏»ô(WõFøô©ϋÕ)1U™õ îé^7üŸêŒ7'üù~§éõ,ÔM‰¾)øÈªä¯‡­wáZ×+ZáÅZufFúµ¬~q°?yöøYš8žÖÊî#ƒÜ x=Íý!ïï·o 1þ›,ԅ–džý_õßgf-39сÄ,3š$Âx"¤3À/‹ž"ŽñÔnUV—ƒ™)7¨VëÄèDY+u ? +Îl’îêŽò÷sÎûšB¯ü,Ãûªw÷¥"úm¡Ržú’s—Æãg28üˆg Q]¥0ú&Äot^~7rNt´çeۓœîXœÙ´'8õÄç²ìÉÏ©ê‰ÎO N~y{üò÷é¥IϏ”'<̑9Ûõ¤æõ) +z©bsÉ˓ž#²':)ÒsŒÉF4œèæÊïPX½99«dYO‹'>'^XÿNv˜‚s?¬,¿“,_(Nsç#õÄç®,Çâq9Ö'Ó~Âsj^}ÿRY¿ª'6³=˜ðK´×s¾³Y^||bøâÀ忝£'9RóâšÞ²œ¼ü’ó¸/:>”¡> œí`‰ÌW š0$斄ltÿ¢Y^¾ú~ ŒøþÃö“ô·mõ ùã= ޓ?©{ßezç²½ú—­þ¥ï=&¯ŸSt¹®¾æY?þ)f—g‰Èó’¾4Ê}ik?xð‰7ßü‘?0¼Ý@Ÿ´^kKÏ\^j >À¿üþÖÞ^jïyÇ^óÁý°4§è?½. è3ÒKž’÷Ÿo•Ëf¿ãGÿùÁæ)çûª§çOw¬ê¯nÙÕó ë¦xîsÙë=%ë{×zn|›Ÿ#’LL¿¾WýŽëîå?\ýû¾N9UH8ÀSÐð@JË!))5¥åç¤½çø¦ y™þÛ/yß²-Âürܱ[Æø>…kÕÿÊÎuÔÿéoD.x/µÏаސ¯t¹¥ñHáÏ/ðßh¿ü]æùޙ7ýÝÿù—ÿøwÿð?þ.t×¶¬(½µA$×Eý+×ù÷\ä“ ¯lׄ/8[Ù&ž‹%$ü‘-Yq¼î÷=Ÿ'÷ýT‡Ž/¡|þÓúx#³Ù—Îðs«+}'àç0­ô¿ƒžÜ±¾“ðsڕÏã~{"¹ÑÕG;­Ÿú>€¾gú2ú·÷dæþ·È-ùåçKúËæãšÂ³é|RùƒÿÂ[¿þ_ËlKwþÇúxWϽ.f)€‚„5Z}=§ïÒïaüŽ´Í&®­šyGÏïæ^÷ùjp ºÃ¬æ¼•h~½G]Íú|ҙÝ÷êºoØâ5oÉóq2þ&kM)àHl>lw3Úy½‡Ùœe&ÚV—CH¯wáæØø“[NíCZY9,O‡Œò2ϳú}Óúyšý‡‰ìx<ÕýíMÒvú (rü6¬Mü"7ûÞOWOèøë*lo‰gUAÃý’”ù;Ôêø_£Ý\q|¤?/}còwg†Ó`sÛnögFÒKô#Éð`{ z|-f·¦eH{_¬Øù¾çœú/Ø{³ÓÅðf9•Øï¦¶ÚQuY~iþW4¾ß}Oèø(Ñï±yìOéÔj-=¿~C;†¿±àtYlU_›Ý\Üïÿ:¬ñß>÷Î1Ó¶ñ4\Œ“Â;Èeßäv¸\O•c'ši“ð0 <7ÏøS`å6œÚ‡¿'ædŽSŒñx|Ññqx°yòyÝÖfoÃO¬Ëâþ|ßscœÛzY?eŸÇ3K+3…Uì5ë²[(ÿn?µÙ³äyÛ _¤çÌÁ¶òääÖRÌ7Ò{͞ãÏÊx,7Ù®7õ@eúC¼>)sz/ü.㱁ë³[ÈPÍ6ß/@¾Ÿ¦Y1®è¦¿s¨H›å÷:?Bµ}þ›½ëõ[Y­û—#ÛIí—fËá%ÿMFë ëâE3äÉ3éo{è'õ1¾ÖÍv/Çùh4ޖmçQÝåò{.§~“~ýIíü}Œâ˃²Ý®U†3ҟÐlpü%¹v{#‚Ðè…ü¤‡øzïr¯ª~òØ~§Œ³™áUÉ|ýwçiyò/{ýÙ?è^÷ûÝ.[ϋÄü¬v7{]L<졏¾}óïŸ|ûçß>ù÷Ͼ}óïŸ|ûçß>ù÷Ͼ}óïŸ|ûçß>ù÷Ͼ}óïŸ|ûçß>ù÷Ͼ}óïŸ|ûçß>ù÷Ͼ}óï¿ûö˜Ã3ƒµÕ#ªUN®eg V©““y`)#¸=iµuÇ!bÐQ¥žfVDä6ç·Û'±B¼!· %@§»¼,rû<îNÁLÖ +†ô‹³z耰93žó"ªv‚™õÁ4ªçH´³â´_ìµÂ!J'‰Ây¾É­üN&Œ$+˜¹•Å Ü)±êˆã`hÍ;ô…ˆ»nZ0qˆZ'¯Rã„'ÏÆkŠÏƒÀ‰õý +§Ü *ëa8¸Ú¼œàªÅhr‹@˜ޝ£õ悾Ú]ÐFՊDH:lpuD!*µÞ‚Z›rìÑnñ‹˜LS^Ø&Ð°þC9ÄÍ%0í°Íp× ìã]ŠTÀyAE×&Õ¦bç¿# Ύճó,„å™PèM»¶Õȅ`SbJ@­£‰U¢œ˜Ž2y•Ã0ÉŒpY(v*<ûf÷±`U=/’BÎ(îѤ¸¨&¹‚¤`¦Š'¡¿Æ£ôWìÈsE@ d7GYü@h ôù*hYð6=‚”b¡9³v žPÐßNVD`ò¿`Pìò(br„d@ý„–ñHOc°¶ùnEñÈÚlÓpÓÜ ‡Î­wÐæü¸Ñfìr±‘€maWC»DSۅ£˜Œmó‰ûf(ôB|7CC—ß# +,í^ù¢Žk +_'¢äCšÛ™D=aCx$m¹b,$8TC@î×,q +ÌZg¾>y†÷½À¥÷41‚s£ç¿˜S9¤†ØSUÒ=* .˜7 üÉËpl;`¨aj`ˉüžZF´3 ­µ[>3T‡8©×öÆ)ÉFl`G/~Z×qhõ<°ÜAJi·æCóÆæql­Øµa9ð0JÁó¹L2Úý$J-¤¨åÅxÐ+1 + `\؄9½­˜9„+½ã[ûãDƒ˜ KƒC#~JÔV4Ce‰ ÆÑ»ËõK°h€ŽvÖB™îߚ!G‰‘ÝÛЇÝh¤‘ºý*àhÑ}íÞ'Îö€Û?‡5Þ0bs‡w±!s“s[òF#Œ§l¡ßTöÝ87@¤ÝTFè—jÇY‰•&¾zàâª Ì÷ÜH3ËR|‰Á®Z—dF¶ ø&÷¿cü*ÐqŒg µTTG¯ΜWß+dç¾FØü¼hñVA£œzœ"֙F5q¾¿À¯ >Òó¶„SšèÖàÁNÝMµ †”Ê­m™Šì°E;8zÈÊòž<Øß‰ØÁÏ_nÁÌ¿Ì+û%¨ô‚§{G N¤k*­s-œéOÍxñºöò¸€=/îN"¿òòîÞœÇy6ŒP­C QÑ(ëɘ ü QîPtÛޓ-ꃓ>LÀÇ[øº²s;å¡÷À(xCµ`$i®‡,&rãth$éKGqC„µóI­÷„IM▥•LÁ6a]·&åãÁHºÎhX%!pZ>W®˜_É{GËQó]0•ŽG‰Ä|°,Ž9|°[ã_Ϝ Ä;¾},ë°jr9,ËÞ ÐæiáÈ?|åØ +U0õfd=Wq œâ!‹Vu2•s*=ZU0á+É2¨`Âݬ÷ +ÚRçùPfô±¦É ÙÛdÒØ€A(ÕPÞ(ú&ëØÀ +êÙwúÛUu¼5ŠÇÇ.ý[j¨*@³Ús…_r ï4‚'V5$ñ„£³Ô7†oPh7bªˆÝ~]Aºó“›¯î`*÷ÖVü "&$Á ¡0ûBC¨·@ät)Qn3Í™•Kì¨<Ö ÷ ´…äÀȑÚ*"Æ -í×äÖϜ +þ-øVͦ7FÔá!Ò)ùÜ:”Îkë2qÒ²q˜Tã1⇩Fl‹/ÈÔ\v’™õ×eøfn +€>ý¨m+@É­2Žá’ŽCylÊd@'ÊdښCv©)ù”-,-\˜f ¡™—ÁZµ®9 2W§õ÷–Ÿ× õ_æ†Óô!¾²ê*끚“)‰±´5ÒꃛëLëŽCNèѕ¨ 'ËA«³ã•b=žÖÝ”äo›~÷ò‚§·Ç¯ĘIû~>Wÿ",fëŸ;¬[I¥‹®·FÑZ²;ºr-Êoãåϑݥ#¹±ÍÝÃãLN£àÃ$hJs Ù˜°+Tr1…42÷9˜5SñЦ\I¸z{ÏF f]¸ß„ã.0<å–\vœÓB§l?yXercäõDPSiøÝ*š +4]®Ò“or놢 +,]ÉöðP –:ኝ»³ják…Ù¾hÞµ@Ñy¡0ÕE‹?kµMVŠ­hñÓâŲ–Íg¬À”må- ™Nuï( „n´L³)ø"éýhNúíˆñ:Âûþ²æ_õ0;ÿ¼Á¾C©Ë—ë!§Y)Ɓ—¤ªÓ‡¤HÔ©V1윟XḚ́W3m,ªXf‡Èá©ø{i‰àð¶¶‹+*e``¢´ŒÑÍ S¬›‰‰T2¬ˆrAÅǐè-¶JdÉQzc«&Ã"7ʦ؋ `/d´q‹¢7^{ðÑj!vw[i‰0ð¥BnMÏçÈnÏo]{Œ„ë¾ßC&Í»Á>ÁW>R²%ò‡©kԍþWFD‘\:¢¶dp,k°ƒ#ciQ?²a |Ùî1j>MÆ.MçÙ:m^.‰Þ A8ü‹G¨É“¸{¤’€@aA|Ý/þwÉhއ☂Pà1_ü9Æj.ä-4qAu/b ggþèí¨Æ÷MfÜAµÃ7uÇ9~Û:¯m0Ì »iŒ°a;ÊFÅ*é%>¿¨æjåR4:}ƒŒû1v'ë²c@‘÷@ڹŭN،œ†âg­°lÀç2ç4_d6‡’°at]ƌ#$fØw„¬"K‡d×áçnáí½Ñ6yäJ +š”T2qB¬_Ïù°‡Õ°Ñl–Ó‰«û +\ýµ,)hhÄÐn&CíË¢¢µI¨\LI‹§Ô#$è¯ÐÜ6‡vùëV ÈP&9XD¼opþo})\†,CËD·D4t;©ZÉÎe2Æ(r0^ÕnpÖà”ãmcÇe^.<¦‚ÚÁ©JžÉî6Cê2F&!ðšL_Å ƒ5ڊã×£Am[¹Æ*9,”|‡¯·5¾”$J VÎ!ó£ç7Eގ¹™”jµI½óT×Q|rQx x[buF”gFÁ½Þ¥;Xƒ…)b Uþ¸ õ-¤„äÌ<ŒQÍqŸ–`(OnŽ8–Q¦P£3ìYM0ªØ+!õ=l˜lhÚ%´hkˆ~JQZ9üZ¾uÍd‡Âx#/¿ê7AQ£ºßào}²û>÷ž èô„5Ð#· ˆ7^ÁkV*>FJ>:®õã‰Å"§òÇ!¸=ÎgÅÆ×$ PÂS\·J ó›/ïþÏòæ÷ëKµ+ + éF¾ íªUr T[·’¶‹tؗ5Ý×.ñFã /›Õ:€T\n> {÷¬Im?Ýïs½Ìîf‚â*%D´Ê£B“Y†fp3 Jj”…ZHEUFŒqÊZjjÀYEU•eJ••jŠj™õú†*ZšŠ•;ÿÿÞç@Oâ½¾÷ß~·ï½ó}óÝß¾Ýàn𷁼-óx;ÀÞðwÍß7x;æó7™¿€[ÍÞNùçÜ-óx›ÊßÁ]—½ÙÛ²ÛïeȞÎgˆ{Òw£Üf1ðlO™ÎOg’§I°›;žÒÄRUš[¼¹¸„7OWÄ7AJìP’µzɸú49}Ù¹A¨HÂÍaÄÀðÚß/†C :£÷ Ïp¾m¼l4ý±žªìc ™WÁ‰—0uø™£¢ŽrüJç¹ÁY“nÁÆñœDY³/±ä¬q\ËXsœ(fæ›^ÄõOÍ¡Nq.¢~iðù!SŸ¾ ÙÕ±¶|"L(˜w97ËsœEáÙD{¬ÞçÄÖa8ËáS79cNMòÏhsäN_Έkuý¶«Ãjö8pP©ë͓ +&º#›2ø6¹5‘é½éy£“YÝb4| +.a>m°Ýº©gx¯{K-,L„FóšðÉ7´&pZ2?}w½t›Ð‹ã<hëE”ówѺ×ÌÜqReåQq¨} YӉϬ³a³—Ný÷Y‰¡çL6÷ŠLZnIÓççFÚ³¹Ê–»Ê“;ʜŽP]®XœM©®8ËGÉbJ|¢÷´T*¼¹L³sG’Ê~S8ïĄ·AÎðˆù¹µCy R—O¦“<›ù¹¨ð—Ýu]ÖWÿ‡ítPÕ†×h֗¯7u…¡W­AŠh¼#·6/”™ +ÿÆìdY³WÃõží²“ô‡YK=‰Ã x]¸1!^^×ȞÜBkFҘÂËOî!ÂI/©­.lðÞ¨£À³›Ý6C?£ãÎ1çýê2?J¢ØØl“„HºÎq< Ckjdñ\{|„Œ‡h͈Ç8žØ\Ø9Ôç&õc….ý­û©”œâ ƒÞÏ:[79xVc®F³b†‡Á².¶^+ç?ç(cA5ºꐴx×&ˆ˜~ÖªÃVŸµ¨±ìòiûƒ"æAÞAǵ?_Öh¼ûT⇄؎eAWÜû„¸¬¢8ÌÞâýVmôèVaÂl0<âl05Cš¡¢¯œ-lIŸ¾eáŸ4|w‰]?Ÿ|"o¹Ä“ð'ƌѬ܏ÛHu<)û¬ñEÂ~yùš/?O1úŒp‰!UüJÅÂ̛‰i卥"ߟ´1òÁs¦¯Â¬Ø„ æýGìê~ŠÅÒÜæ±ÓÊ~©WX£À[Åb~¥Z.rµp¤Ãw×”›ÓŠ6Âà/µ{¸“—è–AÝö¹ÒØß õxCâÖZß:d†9Î>K(S›µX(œ] î,ãÁòyäml…«Ê2”9p-ü—Dz~Žj¨éþþ`‹W¡0¨ÜkC·‡ï(&ËõªÓ„÷ŠBN&(I`ÀêDæô¹eôýr*FI£Ô>I×3o°£Õ0ªî7 ö“çœêñž +ɵŒ\1å©;CõAÌ\ç¯>?²™Lç¯$UzP«…!Dî7ç +Vçf«Ùó†Ú½ ÇÃ8Àøq¼YÌÆßÍÄO舜qø†×îëTT>ÜvâÐ?îÖînöËus)1#áŸoà‰ž°;EˆÃͽh¡ÛH0œzžjYÿ"mcÇTÈëP­ªô^˜´¯Ôl#¸C«ܙ¹…vÊ ñpƒæ ­*>gIj!E\‹’ݾ,¾ÕM»TŽCuWuØ ÛáYMßQâJ²›y±A°²wWUóEÓ>æÚýCçwwüe§êF®‰>1'®E´T¼°!;”ÿ.â{&lØÅ®g(ræÌ2 ›1”‘]"Æã Ö*Fëº%«i,k%#(Ö*Q³²M—±JŽí×3dÂR&J*)‹k…ã×6\ьˆ°CþfÕs F-›5? ÚÞ6ÎñÄd2‘bï :Æã/ô„Œ’øÙHÑ8égÁkãO #“ ”^Ö:)›%ò(Áç‹ãÏ%²Žê,Aùt‹f§]D¢ÉÏÅ.^ì%ÀýÊE.d……$Hb… 9&ŽðRì.1—:eܱ_‰“b&@ŒB?qÍe2^Ùªö¬Ê!:ý0‹×/9‹» et§n՜Šè¶(i?!t±'1lÑs4ñ˒È1g)"ÆAޅäY4ÊN=“aé £)‹¤WùãØíyâ= H!ƒ)Ñ,Ýê´XøáCkÙE2^0û½›ØÅ2”k!(-‰Å±§Sº><ým.‘dÖ9"¿SÎívÒ7 È4i(Á³.Ý¢RÊ ˆm"–+©‡‰üðã…䣅£ñÔ —±ü€â¨—.±—‘zö­¿,<{R°’fÇóÃþ™|ƒ½ÉG#¤ä4ÆÉ©ûÅHJ2įGlôhÍÖ>>R9ŒŽA«hÒ:™î/_(¼ùn q? +WQüJî¢òR!Ÿ²»ÇݙG!Û(óöó>K&kØ´:s¹Ã®’`~z„žru2öÌZ5íŵd£F,.ü¢x¦RlX;ÅÜáÅ'Qò$ûz\xWécÏØµ’çxЋäG%ăVl<Üù9ù»Ç]cÚ5’ý0çÊIÔz|»Ãõ4†½«CÏ죢ÏÃ2?}#™GÈ1‘ü°í¶îüò÷rMý,GŸ&; ¥gêcâ™6h†ÛÝL—òÉÎk!#ÔÈÃùl9kOÃ6b½¬\qò¾R÷®e”‘Yyûô¢èÄC(®Ê8õÿËVéÀª"øDž³•qWô¡Sa½€‘y# zm®ªÁ±Uï$`rgýÈ«# ¨Œ k÷ãÑû¶Lj<ÒHº¨lcú´©§ñÔ?KnwQ p¸üH'ÄWwN=ÛB]ÓWöi.‡ÍŠK¡Ô¹Ô$º)s .‡‹É&’ès-Itྜ éÀ¾œ éÃUèns¾y!¾y!¾y!¾y7Pyˆ®µÙ}á]î^Šë ’¨ƹ®÷/E~| ÜÛ÷2€|’ò@>HÉù $ä݇ß_™”ã^ÎîxûëÀ~PÊù@?(åü ”ò€~WP~æ@ð¦z`¦z`¦z`¦z`Ø<°–òÀ>XËù`,å€|°–ó>`Ìù€0æ|À˜ó>`Ӏ}8Ӏ}8Ӏ}8Ӏ}8Ӏ}8Ô}@Ô}@Ô}@Ô}@Ô}@Íù 4æ€|Кó@>hÍù Rõ Rõ Rõ Rõ Rõ Tõ@Tõ@Tõ@Tõ@Tõ@Võ`Võ`Võ`Võ`Võ`C‡æzò‚zò‚zò‚zò‚zò‚zò‚zñ¯e”õå]V«êQ^æzð’ò@>HÉù $ä€|’PO^5ën'¯ôÐ7|Ï÷3׀ü ”ò€~PÊù@?(å—Ó}0Ó}0Ó}0Ó}0Ó}0Ëù`,å€|°–òÀ>XËù`0æ|À˜ó>`Ìù€0æ}8Ӏ}8Ӏ}8Ӏ}8Ӏ}8Ӏ}@Ô}@Ô}@Ô}@Ô}@Ô|Кó@>hÍù 4æ€|Кõ Rõ Rõ Rõ Rõ Rõ@Tõ@Tõ@Tõ@Tõ@Tõ`Võ`Võ`Võ`Võ`V÷€¼}àïxûÀÞ>ð÷€¼}…Ïø×¡K€ükÏ@¥À~šè^Z+Ì@¥À~5äàRà?C©_—úJûŽô:•ð7}Rûžð’ò@HÉy $ä€< ”ò€PÊy@(å< ¦z`¦z`¦z`¦z`¦y`,å€<°–òÀXËy`|{àßø÷À¾=ðï€|{èß@ú÷о€=ôï }{èÌy€0æ<À˜ó`Ìzp§zp§zp§zp§zp¨z€¨z€¨z€¨z€¨z ªz ªz ªz ªz «z°«z°«z°«z°«y 4æ€<Кó@hÍy Rõ Rõ Rõ Rõ SÔÞvëï+oþéÛ ^±¾øp_D^¹þäXjt~å]Öïèå÷•º~â̜"W°cÿjÜ~ò¶ÿ m?yZ¯Û"W.ýÕÍ÷ÿb·rÎ8ß6ùÆôÿ¯£|/H”ÌMÚOªºß¾9¼ÍûÓNo–|9¾qaÍæ`Ù·m +Í¿s‡fß½‡fß,µ›y“™·ÎGœ&†i¼L™ÜÐÁ[ãþ̘usƒàÀ.€\¸>p|àøÁð ƒàÁ7ë†Û÷²hçëš°^üåCªuEEE¥EµAµ+*ajaêN©“©—©© ©¡©uScSeSgSiSmRk¥Ž¡]Cº9ԛ©wS®¨PºtêÅՓ«7VŽ­T²ªª¨ê©:©z©Úª +ª§UV5VUVuV•VÕFÕ¬«…«‡«:®N®^®v®‚®†­Õ]]•]]¥]µYµ‹+!k!묓¬—¬ê²Æ²Ê²Î²Ò²Ú°ÚՕ°µ°õ§VÉÖËÖÎÖÐVÐÖº­±­²­³­´­¶­6¹et-t=qÕÒuÒõÓµÔÔ5Ϋ¬k¬«¬ë­+­«¯Y_ _^u||½|í}} {ªûû*û:ûJûjólXBØCØa'a/a;aAaC`êÂÆÂÊÂÎÂÒÂÚÁ \Ó&Ñ,¢…¢‡¢:ŠNŠ^ŠvЂІ‰Õ•¥µ´k(áháèΣ“£—££ £¡£uGcGeGgGiGmFm"ÊHZHzC©$é%é'i()(iRXÒYRYÒZR[RJ²––”êY:YzYÚZ +ZWT¶4¶T¶t¶”¶Ô¦Ó,¦…¦‡¦:šNš^švš‚š†™Õ55•55¥5µ1´ë)áiáéΧ“§—§§ §¡§uOcOeOgOiOmNmBʈZˆzƒª$ê%ê'j(*(OØ&Æ¢Ëÿûÿ“`•¨Q¹ÿß°?ýùGìE@¶ 矯óɿאCüyeHš"8Œ¡ÿù1þđ›! +4y’&E`6DNò=¿²­ÛÄÖçù4ZU¾ËÜP·žaÖfV»‡èâ3õl¼œµ4«ÏÅŸÀ?Ïá¨o¸¦3ÿ¶r&_ôѧpe\x€“Å!ûü¬äLIJøQ§òþwFß‘3ÁÜÿ¦;—DZC…­w..òÐò"9Eþ´iÜ ¸_ÌB•3óƒÿ€ÜtZiÚ/˜\W6$|#° +œ?C­Œ¢à0„‡ôDóèÃXÄ´ÅãŒlÆ7ÄF<ÿŽÒö,odz8âøí_Oøí±Öž½Ól@&¶²0¤7è4Èzá‚tvj A¸Ùàèdž<ä+-wª¥£A¢÷³ÌDçT~~.ǬË̔,^8\êHLóOßú~ÊÝ *Öþǀ€Q ¸£’^{ÒAÔIªcêÌãNqÛŠ‹s€}dãØ]Ƶ\ç;ns—~ÆŽÃæÅ`/Æ0qëÚ©Ÿ¶·œ‹bæ@–1o†|(ü©Ü((/¹> ðÿX/ +ŒՊ ë— Ñ¤rý»Ó0} b;?+?:Ó3|Ånè­V ++Ã;Šë¿ÆÒ,~p•£áZÖ;² 1Y‰îèNåã•ðcnþìÏȽ—Á¾Ìën:V [úr3JŸlŸkÁ¥Ð²_—/ö¯bȑp=gqÈ6äÓù¸2&ñ8ei딃™Kƒ9Ãþ@yå“71$Údy3„—…{Õï()ݐGþÛ7A¯ÄòX8ãœãé]Æ{Ҋ3Ñò^ôƒ ¨Üov$®Âï&óŒÜ|8â8¶9ÎVô&®w}ÒCLò,œ&½–+Í%¬hýºãW=í¾KÁ1އŽdÝ1éÀ +ÇօŒê¥— Úì$ü¬(tÓþàö‹Ÿ‡ê™Oï¯BuƒqÜñ—[ï׻߉/oúQ}£°BqÇcö¯-7ՏÄeäg⫦lõù~·Þ0)ë²ãúeý—ßÂ#QÖ¨Ø÷Œ}ïB g´ÏDžî6ž%¿•À`_Éľó³ýgJ6“!–ØýMK4¾F÷ŸÕLDë²ZèâÎ8ï˜'Âbú>nCo©_¬–ë¦Ûk)X(ñz¶Bήùz™ñ¹_gVÀÞ?߬ø1\F¾|lj±Îj;)v%|?ØoŸºŠoåæ49kï³UWJ[—­ñsÑ»Žã)à.æú¿oëÔ~9¶œë"û‘¤Zj?G«MÙ©kcaóvÓßF__yÏýŒçq-+{_޾©óåâÌÔi_³KôQVðÒ¿tZzºs8/&¿µÆVwÝ· +-FËY1ÈÕkü(Ý®ï“gÇ÷|Êè³^D±°øþ¨Êí_ᚾx±æ´ç×ÉhÖ{iö?5öãm¢Õ=æ; užÀ³ñ69×ë[ÝïًWÚÖoñyͣà ýgbó‰§8ž«ÌÉo»>q‘Z|_—;ùøìŠUŠªQõû¾k$; ñ…e3®{:§3Q{>e4ïXëñF&6'ÕÍÑíüØÍoñ|ymÑх¦úýKL¦»uKGèå¢}׆4–ú#Óf·Ñ>~WNßà˜ã{,Êèõ±î”½U5¦QêñÓþ-p,Ëû6ú—ݯ½Ðaâh<¬_˜ÃÔñY™[©ûj,± iò÷•SߐНg¿ßߺý¤*ý<÷±[џé[4+§‹éò7–ÑÙLôñÒ¹Ÿ¶a¢l'çÕkhXj¡µ‘¸ÄÍ ¥kGÒèØy±[M¼6ãߌÝùm ÙêÞ9܍V·Tg¥–íÞù\¦Š5kwvǞínê+G™7ˆhl6ÉývB¯¡¯öÖëåŸÚ)è[³¶ÇÙ.±ë±þ†=·AƒEY;û_CAÓ]±¥ÓÕè\áï­öj·º¼!|¸©î‡0­&Ë3OžEFkÁ}iã[l[EÕ{ñÆF,]­>I²<¸§9Ǧ yLY$Äwl} 6;?-]MÿÌ~ÚðÉ+ë{¿àí´ÞÛ=C{¾µSƒåN qðùÞM[Z•úµTû¬±ExûÛ(lΑ†oÌËüÜ„Äû<Î?­/1ö5Ùw´=Vʹ̪bàle‘À¦õ9{^vI÷L¾¨îÅ´tlÚ´ÅÚLü{^ž•nÎNË´d]dÔs>,)™MŠÿC£KeŠz/YP}”½=oaKšÀ@â>.[ùiž#;›9¬6¥‡‘ñ{Üíõ\²úíNW9EîÂDéz騃»có–dwçRÌMï£vžïCƔÕN–s¯·{}”©ŽÔs23þ]W”Zƒ_2[N² lƗ’O×çrzÝ!„¼t=LzöÓL6M•½‡ßøW±Ò³‘z죴þ=¾gßùPF&òµP6\èµÞg%¤¾Ó­åòŒ/ðì½É½Íž*+fÓ' ¹ãã¡ 3g”Îçcÿf1wÌ–ÈLò0‘f'êÉöô´»o.&£±•ÂÚíõ$äû~ÿƓ—.»YÛ)°–õ;nš‚u™Þ»ÎY·_¨Åým‰Pi0¹nóÔò¿©•y?^Š[¤ÆÒ¹]\ ûπ¿S£ÞUÈmß±¦¦öŸ´+ëüÇM)èpÙLÜU‚’l;¾sgÆaU5‚Ùo~¾2¢tž×Á…Å}Ҍ]-_I…ÍÁlUàsu¾ß'z»Z_©Ò±ÛYæ“O öºúa{v^΂k¬äå•y´j´Þ+®vB1vŠ#ÑERùŠËôí‰Ùíèâü­CªÌlž>‡‚f|IZí&Êz;ÈÚPi[<“¡öµ|úÿ ²g°¥÷­^¶K7¢p~;éî1Ômü/–žªZð{&£”ë>2ëÚß|kÖFUðŸDoµ½ãwKõQä^°Î'ý·Ò^µ¿g˹Ʈóy¾ÿ¡à@y÷Ò»*»ÿ +Õ÷„ÇÍ÷§2œ¹ªÙ‡ÔÍw›‰»Ökö¯ìp–J¾–žCêñÄ­ñcŸv’VòòϦqA’q½èޓÂwÔWÌ;Ù)ˆ±òv>…Χ¬.æÞŽØj|X¿…þ{Mãt²¹*8ö:è -Wa°Ø^˽4šÝõ¹¼*ú½Oì¥ÈÑ{2òQ[Ú{ KS=Þ/ñ•vË%4½ÿ¾üNÖôŸeu¿|϶¥á|dNۓéc¾,ÔÞù7¯Þá»_ÏÚ/ñ/Ú¯“£ácºoÅÔì¶^†î'‡¤[¬áwï¶Ý«ñ•w™w¥ý=ÎÇ×4Õês:L¦«5 ~Qøa¶½+ _çìæòw®òî~7h·å>^÷ÎgöÅ.®.wW1×èߕl/*Ü{\ +}7ÉÖ0ò']sýËVž;óÆž·7žÌw˜èí¶g{+ôg¯¸gÿÊS›á7’]ß +Þí}›øbêªwXí³oeâúNƒU觐·Ï±¡Üoë89®—r°™9iì>¶÷æ@Ìg2¼Ù;+ñ?°çÛñ"\í¢¸™XÿnºŸ¯WJýý[-’xy=º÷¾²®º[â¡õyV¸}֛Œ¾õ›%¼ñ±ø—²‹Ö÷¹Œ3îªõ ]ggÈèò5öÑÞR2äßɽ¾y |&¹†{‹eÚÌ,õû+½æü¼¿#Ó¦gGžÛ˜©uý0`boå÷]…¥ï—KR¿M×x»+ù‘­¿§ašØa>?yv¶»s²ÁÈ÷wõ¿¯…øZÉGSd~,³F9l?7½ã-ð=|ô];­–Ž;ËÑ` +…xõ¸P‘¾Ëï›Ü¡§œdøÍ/ž÷M8w™¡Èù6ø=[ÏÒßÒ3`Ö/Ëý™Ìî¿eL£eäË8{_ã@÷eƋÓ{²LºÍ†ÏcOYÖz«3ZÈÝ2Œ|T=9×ÿ/i³ß0°Ååø&pð°PEbq;Uû«a÷röƒ(—› -›‘æe­Tn|fÏ«ÑAA“m%ëõӛ>í¯ØØç;__‹ßA”³ÝÝu¸Zýêû ¼ß•»à…ƒMÝQõ_J½ä‹Oé^‡?ÀãWA—/®ðf‰Óïâü¸ÜCsÝ´Éà‰«ö«ý/g§ßýÿD_¯äjú¢xrú̽v5®Í_ÙC«"~ —~]ã,‡xËÞ3 +wŒµŸúÙb=®ÖSSËò>´}µ,»×¹Ðùóà-õ„ÿ DÙ!õŸf‡Ûimõ±ÿ³íºÍ¡å¨„àý·p¡o¼aޟïí»èžc⯄{*ñ–¼4‚2fû«.´«Ž¡Æa7öõeåLÿßV_¯)úÒ¿V^û»pëQí¿­þ}¸x4{pð··úX¬š3õ4w‚B)(s˜ÂÎrþØOy­:qïiüâøÍÇE˳$æë ÆIÄæâoÔ í +C¤øTmáŽÅxQ±8§žprÔ ÌEç¥â¸öú‡v}’n‰X¨ \ ­ ì}4)$xVN8NíR¼XÃÝBJͧÑ+4ƒEúco¼EÕ>{†Ã¥ÇsI±~nä§Øƒ†sËEÇl[i1qÒµ¿ æË¡`[Oýø©qÂv^mYÉ£gé#qΆ%•ñ×]+ìÝüNñ»ñq*L¬o†åå”ûŠÅ¾\ø¡IôލÞ9ǸÌVmkÑýºQ4ç ³þ£–Ÿý­è;û›ŽÝšã·Gâ¡Û£ý6ßþ¦Ãœ(vá¸û?2u§ ÈÊM´ZûLÇF²òR?úï>/MyòÞ÷ÄbˆÄ¸»ß.NTùt|‘:zs'Ëçß]Ñy÷œŠýÞUBÛ,Úìî—Ac78ï¶Ï“Áò\ÿÝWIÏ^‘mÛ8ªÚñUÒr¸+Š·-ãýòçÁà‡XÿÎ\ù«Òùë×ñ«¤ÅO«-?ßõUÒbí±Š õGïøKž*VǕ‡…Ê‚ýjé< ²x4fƒÿ]&ŽŠÖ£÷ü­jNáñ/Ò=;t"’²—¡Ø}õ§\ô;\|:BøEݍ­œå«å¦!¾LòlÑà°fgâ”Ïa?-Kºø‚E*˜ºýíßSì\s¨B™<†…,l<œ ñ+ÃV5QÏp¨*±Fåï·G±F,Lx9‚URírXá?.'ã¡PWÖA\:1: +அV ®INAW´A_¤Ñ«&‚µˆ+*‚¹ô—AYD˜A\XÕÔX¤Ù':uwE<–;R†ÞçP.փz AÒ¼ˆ¾ébvèô_2h¯Ò+1;€­F +Ä£¾XØÌ8©§ç/ýÕùßqOÁöÿ?u`½0C¦˜ ÚÀ]9yï*¯ÃuÛ þW£?~W”Dö9…ôoyNÄa‘Zð»Í©ó.Z^”¡f¥"¬Ï£/¢ï«d^³ã÷š·ûkÏþ0sy)ß7=›š"mœþ;ÒXq9‘ŸÇm†€ÝÂhD*~¯y™ðV/&ÜÏ-äuô%¬/Í)é‹Ç4à™[а[ݝÁ2øþƒVBÍśZÃðFNfãÒ½‰ókäøc’kƒý–+/ÂîÚ8õ—m“"èMáÙ9†7LT9wÉǁùÿ)3œõºlaÓûÃÉ\Òg=‹W¥ºm¨ì³©ÆÕí ¤¡EâLAá»ß +'“>[Œ›zŠ,ò#}3ε‰a¦FÉg²û»áûÆ9‘…-„=êmìO +Tþôý0ýéÇB!o~õ'§ûÞ÷³Ó2I$ö@!! !ˆ` 1Ò¾ñ=‰˜Q-KPAÄV2H ®‘s3Î5µmE­¿6£«Zí« ¦d$((ÂÑL +"Ô ŸÿßßþÌÈHDUE·ëmæÝúïÜæô7£»Íè}Íæô7›Íß¹Íç7¥»Ðß¿·ðz›ÐÞ¦óîæô·›Ôû½½ÂXkd–I$ÐûVr­^®j—žkSë±/¾Å&èÀæ‚nJnΒäa’±Ú”ë •(ºdS5‰싘¼0ˆò–®r­¬¢5(fãŒ1ÄXk±V¯l4ˆ<‚D›ô`Q©°F§páÿ„¨ˆ6¿£¦€j±¿àӁA¤˜ž)7)>!7)r”]³Ž…ÚrÔ0.?ãéi,?<νüà'½äCߞwŒdªQ ;íNÊ6VvùHG˜ëF’ãÀT¶žÇæ ÛgÔEÃAÅ|òm·D*Ô $ø:ûjÓ$K=et!rÓ7"t `ê²±ÜÙ6?d¥öE”¼G$c®%/º‰q’“Ž Kì¾9Kíæ8ԗi\¯#.€±³¢À*—ƒ=RÆ×ÒSÏêVÜÂÛVŽ‹5ÜZÄ[&E׃Ì]vüÅÔH\@­DjRdÝì~!ˆ•p<@}£DöIj˜8i8¦ÑuÐdÍäC»¶*m$œ94jí"ˆõ ¹íö‘FQúãµ}R> äÕü›˜‡Z2¥6©Àv»y/ÁòÊ0{I› ’A‹¯ƒŠV¤Æ1jp0ªhKZÔ®­JQ‚ÉÕ©2,6a>ù|O¼ù?÷ÚßÂ_…ø~câ\ÿš¿Ÿmg`™¨sþ"ÚŸ‹<LJÌG°YÁ8»f))8HçÛzS›T~f¹·åÃGùœËú~ƒ×v}y’²¦Êʝ+*|¬ªéYT%e`¸¡Ë„1d[Đ"ÞnPrùžÎ",5^n€QY]-‘sTye‘Y±VlPetƒEAjŠF\ˆ¤eúþº†áVDZ҇œ«¸zz¸,q÷Ã.P½÷ÊLËçE&eæLÉԘéä~'ä\piãs­Wd39ŸørÒfÈ˓üę©Þ$͙–é ‹—é ñf:C|ÇHo[ +Dò˜Â‘? +klQ¦Ë⍹ÌbˆŸŠ"TDò˜êˆŸÕ¿¯'y?ÌuäïëÉߝ'y?ÌgIߝ5”·tl¤¿toã˜î6ñÝ?À"y?ÌxOð ß㓼Ÿæ_Š4Ï.tÛ­šdûtò=F7=€ÇâYèw/p +//z^Ç!쇞ſßöx•N5õõáÊßîåɾ'ú–ò"·ð»¾çKƒê?æèõšO)÷Îl—ì>½§úoý¡‡ôòË1ËA¦Yh,Kp둫êT¶]­C(²içVçÕ3¡ùÜòÎN×ÐÃ{%g>Û +BNåÎåðFÁ†WM»¶’|ùhhPLcnže‘SúÝ6ï.)9½ükeù‡™lŸqû˜‚fãšÏðí×øûæ÷ˆ#!iuҁ×GG]tzÜ.šLN ƒ‚Â(ºèPëŸñÂ48GC„ˆp¹ °p•áÂð#ÄÀpƒAú‚yÄÞâemÈÌ·¯½W_ßXÈù1æYhÏ¿÷r¶\œÄ Ö ·ôh;E†Ù±¡Íá¿/OÖíç½Áì8¼*¯¸¿Q”ê÷³˜ÏGt/¥Ýd:{§äóvþ]÷ñ6ñýj,‡èpËSÕÁ‘ÆG}[Lgßñ—j²šü¤Æ4§wùq=ï«zšÅýþNw`相ÂÓô½–‡ìlŽÆø>~×½Êjl3°ÄW¾hyG¢ÎôÞöۓ$ۏ:»Š7~:5¸hÖèÑ­Ù£'ö,X™ŸØÁ'2bÆ œ2bH„@Õ¾ôº>G½^žšk;äæ~ޛ à«æh59oNGÂúåñ¥]/3ƒóïM.ÃÝÿÛ1Õy3ÿO¦w©ÕPâ|,–ŸÇ˜åm9Úüg¹½¢É⻮⩟#Wúœ†ø½ózÆii¶Ž:fzOWEíuŸK¢ºd›êsÚ¯KVŽ{ƒäöÞ×îh´IþYØ=Ëëm±¸.Çè¨ãAö1T³ý’—^ÏwQOãTú½Gg†læ…y»¿»Žúýçs€õùX.~󰃹ú÷9Û +¬íÕnj&?¡£™ÿ×GƒN8Udã…£È'Ùyûu=ÿ _ÛðüvC/"kȟò5ãÿ;|0É,iqàrèLÎt¤*¨NÜÑ;ÁÃ.1½8¼úôµH™ÆÒ#ò`qûë•ï´‡ÇGý˜/þøx÷хÃK‡ÚÈß燏GûðñáZ0ñï£?v<Þ»(ò8úÜùøðÐÏò² h]ò>ü*Öx’9óô1œ-Ò¿b#j‘ DÎè,œNd—Ó(`Zp{_åÎ,«öRÕ±ݎ/ã$ZšÀô+1GG»ëj÷³c¦òD ¬^Ý^¸ + xá»Û½îQœa;W ¡"(ҐS6§èÏ*͘Wî–w~)#Šp]z7œö)<Í4Ž× ˆÙžFžåS16ÈnŒ·ý,a÷µ%æâJµÛ+¸F§‘V/ã'¹÷úÓ(¨è3 U#;Û.„ŒýŒ¼5n`Ü *¼ü,";öä¼Îá³Ü®‘q$°3ì9ÄÀ” +È, ¾¤n(³›Wt væ› ™ @Ãáini Eo!¦:7V…ƒusòÕߦ¨X¹ˆv•Žù$j8­QÒþ²zMΙo!ÈÑNn-¼M'ÏIåjŽòàÖÆ»ì“È.i{ü%×6àXK¶î§@¡~¸V¹jÙ®Ô3Müà€þß?VüÝ\Ù<ꅉ|ûx®Äž{è—Ï}’yí¡ðZåödyD`t°ïQ­¼óë ÜJNkQwØ“­ÍÉçîÚ«€GS žšˆ–>´8ClÄ Ãox*>ÞãÕ¶/?Ä Øÿ‹Ëä"¾?Xh8µøO(W¢YæŠò¢ôy ¸kç<רåÿg¡ü6 (µëcò<ïx‡Êó§óÞuºÿ™çzuÿ½çi¹_Ä vþןóW|¯>»úÞ+ñ<ÿ£Éÿ“ÏþȝðÏù^u{Îþt>gïýï;ìò?³ÕÃQ=j¬ÛuzÖ +èÔyBGŸÏßæP+8Ð/?'¦õ:`Û)wÝÁ<ÎXžŠò)«½륛»Ëƨﰹ¨êŠL¬P‘¾t6 ‚ñ¦+àôTÙò?œÊñ3a/À íp;£¹Òù^4å"mÖ‰£Ô×ð‘Gl| O܈%ڍñLÆÊ0¶eµe[²› †Á–×ð0ŠM›nhÔî=lŒ›9ïRV"}p/Á mÂ|Ÿ†Oõ )‚d%?` B-x\“ùЈÇ}þ¹mÜô#Ώ³'þ¬ŸÚ“ÿÐ'ûÌåu±"U§[}“@{ï’W»<ä>àdìúø}σ +K“‡Ý¹²BÚtPwMÃ,@CCîjG׳–‡Ý–㔤­Ý÷xЈNE®+/¢]^$̃ngÇDO*äÑÑ5z‡ß€¾5â·ž¡÷Äs”Ôþƒ«:Û›„:Ûš9K“UEª»5²§[c롍‘ÿÈl‡-ë?°oûoYüS•ë=!°ïYèM‡zÏÚðdÿ¬`ÛøÆD?—AkÿÂ_>æý‰Æ1ÇÇLüÿ6èlþû%!ŠüU8.§Ä´ÍÉvWÞ?™ÿûyQË·åÆ½”fd Ë {¸V­÷Ù|Ÿ~½+(ã8ÕÑß%{ÿT̯Ýnv{‡X:àNE<ë9œó·Ùl»_zôä} ¢Ê6 +GòÀÉ|K·@^?•€i«û°s +ÿp¹óìûpö¸Âé¥iF|öa·n…‚{%¹þÝ4®Ê4·ŠvQ¿²À Q@F±ÞàhVșç /}Ú,u1œ¨Ðs'Fd¸üœz•‡Þ—%(³:€Gš«ŠÌ‰ù8ÈCçÊËÊYÖ@¤XƒÞæVjø±NyLG.GèÊ<:̦öw’áGyF`È3ÃÂÅI(Ouú†‰·¼‡ŽlF¡ð;ÖLö<ñÌ!<)þñpøi|$÷ítc…ƒw¸ 2РaÔ +zŽW¬« *‚ذ֎ôò\½Å…ZÔQpœ^àá7Û­„ß{%0 ،rñuéŸR7 ]X¡É{£W™­Söp1¥MÀCwÛ\( GÎD鈭ΠOö´Ӿ£ØªóֈS‘¤ôU%ÚvbRËk¨´©éú„çgÕº¦0K.:â#Pûdí¤ï•ij.֍ֆhŠl…#œë>ça 6×LãP®ûUa’— }`ŸA« +àçæÄz.‚f‡¦Oe­.Gˆ"è°[#i“‡‘ø#ñäËEŠ`ëÙ'CTZ=5ÖñME×ë-S`OZ/1üÖÑÏs ³µbÚp&TqµŒu¹G½E‡íli{kგõéXƒ„KÔ¤˜| 5Àêša#X–žå!Ñ=‹6ªã)@õGï>¿ŽQêàÅð%,⁃ UYp‘#8\ëùTº#Xš+¸˜9.õ/gãµ?Â]¸tìC#'|[ÚaáeýXcü»Ø÷‡€·Ø`»}Ü t-<ËP°0Ž— Êì`A#F%¬bÎYÄæÆ‘ˆã#á¨P®j~Nù ¶¯(Í"–Ý )PŠo9HuÜ'A­I€KqÌNjRm¯h¥Î5grw“™˜#…µ•ê)l‡õÌG¿˜ŠžØ +?\Aé€BYËLç­k¦òúëHð8Eu¿°}¼·S<Én¦¡‘V–êî:ƒ,¤mÄ<âÊ" ú™˜D±î3Òj®Õlà—1àJBšá-‹–̍>m©dÙn&aì~›• +u§å²ô]iH£Ù,@‘¾¶²‹wÇӈÿRšI&Ðü#¬¤6bV¶â§iû¿f_kSr<ÿËÿ >.××ì~ýcÏ®‚R$ †«ûu>Ö%RþÎ%RþÀ²Ö¦f\uÜÜQ‰¡i™bsɈRóË¿±Z—|1ҍ¯ŠåHísú©Ç +y0vÕ8î4â[çF½*³8Ù8¿’¦þK¥›› +›ýî‹Ë®šKë;–­òó~SC®¸SÎÔKব±²}KÎ +s?SÂ~y$Þ°ÿ2_ˆ¶3ÃCúŒÈxk"ÿÜfCß0ÿ¥PøU7üEŒÏ¿ˆ»÷ü8T×^[Ë´—üõ7Ã;²3’Üùõ7À ʰ-Mü«œÌ‡Ü–p6Ksþç·µwôŠD*òu„ÿôaT:ûHáŚ£ÜLì:yÀ û¬D rŒçÔ) Ʊ†]ZÚPX|éb„…õ“_$jjÄ(ˆ®k °”“¡½XŽguG¸ÅÀ¦„¹ö×>¸k#¡,’1bKˆ—WÉq¨Í! +-“Ó0]-3ª\>‚±H)Ž"J¶‰.ü¤¹$E($MÍo®i'i Ø5~–¼è`~ĈR5zèHœ%ܤ¾{Wròk¡Íh†hŽæD==à¥=9º¨aƕ¸ÂÕw ‰9—‹\St‡cö$c`Y$’÷-M«ÖÏZ÷U”31ކÐ[›A(q—~eK0M"f/HèÒ^1ëTÅâþ¡A5PüË4³ó6}Nžëbi-ª¶¡,J!쬿ò¡”¼ÐÈiûœ³ÉFNnZ£;¹F¦º¬nɐʞµ§5vÄ)V;—.ïjCåî*­ª‡¬t@…j"§U 3á3ÒÓt(¬ ›| »Å!!€úØN®G8hŒ-€µÂèôᣠ2È/ÊtGG§:£ ž¯š@íjp‰\L +§$ö8*rb -B§ ‘®• Iã4kÐÉ µ~Ìh††~\2µëT¥UåRß +¥×kS T8%õ÷r¦vö雦{%Ø£1¶é †fçAÏJKeôKgZҏw” 9’ÛXT#ÕrÖ)fœÃ ‰]@>Ô À(˜…ä5‚.†¹ý‹.Ɔy| +XÒØ1;—º±½jm¾„¡þ‚HQï"hãû¸š8þ蹃aÖ èb¹ÀsÅÏÎÑÇç×,3o­Ír <ës¸¢¿q>=ÄÿWýşþÛ†/ñȆߺ?ä¶S솛 &¥Í¬¸`Ó ¸Ôõs+Òõo¦qµ—ß’‹‡Êòþì,0}5÷ÿÚm8lŒ–!Š·O籟¹¾ÿ}°žöMo?”ýÖÂakǕ•‰ÏŸDÏ+G»ÄçÏ¢fu•ð Žsù´Ú~a #ÐðfcD®E óªl˜p“ӚÔi•4¥U.‚4Lž’4ÙóKjÛ +-a"½JùÌ܊ëF›&± /t($i±B£Ø '¹˜c¶†}%æh»e)}è^%D¥¦LzW“¦6TB•˜ å¥®k—ÚZåûþ“šÎXQT5v¬Ãǔ9% +òɱtcøvõáGí@#¤cŚo9j:ò™†É4š5>´ đ†o˦W!””.Ò}2h81°é{L+!µÖn®Å'›x’íÚO°O.¼ÝˆÒÁ«pÃ"!¤µZU&ø<^:sžälÃD™AfzÖ_LÖÓ¯ +Ùø÷”DÑ|}lÌ36QÄ4xlÁíþ2¬Ðw¥ƒiÍ©B.IéʲƒÍMç*‘Ñ~%¯å&EJm¬åeÌÜLB“_XÚ<+œùÐi"Ó.|Îä@f1'¿Þ0zÜӓvÀ¦´Ã]¨îIÎFÅ5@¢AYéÚÁª³ó“vjÚ h&ŽØ¶œ¯‚lÀ wŠd%•í´6BMʐÜ<;ís¨‘(ð¬C ׎…Í{ñoE-8A(W(~ÐöÈ ¥œÛ½<Ãމ/ïCÁ.‡i›Qý…è_"µ ‘:1tzœ3kÄrbÅ î?BEF +ÅᮐîK@ÃA¤’šÇH<ë8÷9ãw UÿÈð"\ø²Q¼ZȜ _cW²érGIܵ=ów¨y²A³ ÅUE5]ØID'‡Wքÿ‘f•tj#¥&Ž–:uñ åGAöý#¡í‚Öi…^ÁׯX;t<ѦÁpš`·ª:Ò3 ÐDÕŽiL¡Uè–÷wâEâlïSr[ ©nV·fÅ$j8Zw+h[sèâwà¶)sÉH4ÁpˆŸ±n:5 •ЉÉ¥ªj¸žk±iMÂ)v”¯%KÇ6Žöž¯ÃãA‚Ÿ£ïF!ªï9 _›ürDƵs>Z=Å+gŸÓf˜g¡“䢄õv¹šz±NÕt„^é`Ÿ  žAe0¡jÃlÂOT.E?@$eA®ÓOg|Ó +w£¹^ +@X—h÷í+¦ ô©ô<Š•p᭕Â3š'°0`™«Âõ¼õ’ˆêþ¯ ]؏%ë´GK»ÍAÙSbN ™#«ÇL‘/ÓQ.ĉúÂ"c’"Dù$š"Ø.W¥%¨”c‰zºEKþÐb }R—ûÏ~ÐÇç&{æ—ý¨ø1õmÚ&}Z‡íO­Pý»þ4roùÎP~“ò$â1P <&~V"ÆÒ’LA#áÓ$I`84µêÀ„Šh_‰'¦´Öµ¥¬´t'Ê +‹î&疹F!i`„© Úa4ƒÎükY§i¬…ÜòŽGEà„_4:ÍŸDÕÕì?hmO¡à†¨o‚ÝË1MKË`„{‘ "âΣÝQåZµ€Oè2õÍ^ö-Ù6{Ü6{ϾH¼+X@½Gƒ¢¯§7º¢^Ý]ž +ÆÎöDµsªUŸ]9î}˜Öï~ØIvH×ŇQ æL¶˜"ELjHЦ󻭕$c?s¼EôÊ#Q¹p›ÿÔy: †°i‚±p™ûRuwu=¸³UIÚU8GK¯">ÅÃýáî$» $®´äjuÎv¹²ny (kÓ´|›ž3 +›J¹¹| êÚ+Ä™§FHs Ó¤BK6.ƒÛñ¤ÒxÅíuÌpÏ8Îê1±Nª$¸„æÒoØl¼VŠúÍÅz¤Bh©!KŠØ)9ë‘O/²¹£¿'\~ JÊw¨¢8ÞI½{Ejˆ§~N”ÕצŽ+\Òr¬¿º‡äOMåe„@ÊèE¹â±ô:U† žÇÊ\Š•C:€ !+EJâwF¸ ¡å‚„,[ÉÕn¥åÃR¤æ +ÊV$êæ)IÝ K!ðRI +ø*nxë‰á*֏‚ñʹoŽkucH¸$™5‚c×Ő¸U$ï–'`+R‡á¼…štÜòa©e Ù JIùJ¨äšèº:™Uà–þÈ÷qÌç+Ièä{Îô4 ›DjB…Þ:DB{õ'"öˆá¡‡‘M hE¢o÷Ǩó×IÖ¨¡k $Ddº2CçB$¨)ò\ +ÔjgŒ7¡Êba“•Ƚ/®yTG±°Y{¤é®yTHü0#•êêì #QÆ'2 î „¶s€ô¬9ÁË]‡4‹­`ukáLÒCŒ*á#™MYµÂ*V‘ÉHα'U`Ãíþ\š52Á¦”Ê|,®´YTüóVd)_²øYDæý;vCWtQUÌÖcÁ›\³(œÞµ„s”Fb*2¤‹Y`&m€Ë´›Öƒ.£ÂÝ«ŸOQoÒ¨ãÕÇ(­R5;V™­t™&;Í>N²¯Ónj$¯ù­vèaŠâw4Í> ^´ßñ£_ö„L«pÒr¨'õMmV £:ÑÄr‚>ßfñ˜HZD´Ý59ÄæÝä(6_‚‰¤æ½dóH½Ù•pÐïY7Ly€ +¥ª<½ÉIW¥|ºÕ¨è¾Ž™ ¾0G»àžÇÙÌàpÄ ÚU#Q¯Z³É¾ï8E& ºSÜÎ h0{q8‡Ÿ a”!@*±Ã¿²`¦&jþqMO¥àßx‡d" &¹ä\.MŒë 1â0ìsdm3ê8ËJçH5§—ï‰ ¬C +Nõé¼}òîˆöáם‰v®$ÞçÉÎ"7íH’(¾¢o=G½¢$˜ñDž0ûª4íFËcd‘Þ¼,TNº$6ì ÏÔJoÖGº–²Oq$ôuiê “ªkš|&œ’ý#SÝⴃí]\ãþãó5ÍXÐJì:‰®þl46ª?àîªû`RµsV »žÍ> ¾vÀŒ.%çw4ž4ïÝßT5ºgW‘öˆ‘Ô<ÕMVnóŠ›ÊԜû!2ñŸv›¨¥㠀eþž×ØNoˆ ‘Ft;º3$û7ÃIsÃ@Nsh¢¾§o“x‡¸'ÞWß«Ò;gci_ëõ0G7PûkÉp¥ê¬Šßµ •ûlêH2¯ÿtD ð·ZQÔ˜¯‚[õˆ‡M¹[´-28ØJQcIã ãNÿ^¢»¤Å—Ü+W~ªHî[Þ#éMñ(\‡™²+t€T˜WïCáӍûÄdj6É_¶Wþ…ҒvÔ:xÑ̟lŽOk'›¯]y÷ÄîýI½Mî­+õc¤‚ÙáiŸRv/ãF9WlNžkÉEuû^Jºð÷P[‡»‚ÝKöȞ˰ŒÊs[EsT’ÔÔléwˆ¸Úþ—þAªÒ;æ{ÿÀ±n + -9r;•œ‚kc[ˆŠ£¶ú"?ôãsíËH| í&ªïÞkÉ –îÚש<äOáЖà +´[íúèQJøM§5½¾x0w3)9ß#æšáÛ@Ç­¶žç‘g™žW`%yh SåW(^ýooŠ €›»F.{vy”isVÆÎOÍJÎævQžeÏ'éçnd…µ¥[‡mÚ璕çx[lúÃ!á’þö²†m¯©!¿$·} aZâÌ1ÌÔIç=±»|î(œl(SkJøç +;ÀMEw< n},Xj7³⽫´$"à Ä-ëhïIÖju¦¯ÆòNˆ»pÚ¤Bï7œµ&°ÆHèbëè—O¶Äk ¨‡ŒÁbé%à_lZö$†øQ'Þ·V½ºµ“¯2;éHV…u_¤Ë«}ð—‰6N 5“g•¬X°ü!sb\²V•­ö’›ÄudE¡T¡¡BÄ~ƒä2þns˘7Uú4á¼Q´Ák”šmR¼ç=z=Ñt{¤â‘¨Ç I+Ä/0GKbàûÇW×X=úI€#ëÉ6KG›Gãø†äx”[¤=Ã‚M5‹Î}VïeóÌOëÏWO¼nti ꛦýó‡ŠÍÝ)ßuþþý³Öóì¯2ñ¼`§æ°æÑ°ÃF»º’I;J¥®i7?Cç&珝}°9°Ãr‚KšÆ•DJÒ`Û=»Ö˟Ù0 ×/`Õêé**µÈÒçÆÅ_lGã(‰PHìšò¹ôÜï:¹ÏŽÙì¸óÏ{Yžq'•öÑ©à(óõ *H¤.{5 bq®ò2ý± cÞþ\6Vhκ¦—éxðÒJꐢºàC j7†µ>½ÐäMïõtžãujñ¯|9p©‰«b6ï +MÙQÇ'4j4ÝØ‡6N$;ví^Çôdò÷›…¦l/åc†ÓFç0åÝz‰3 ”£¬LïQÂgð1oc¯˜—‹¦S;‰‰uM†„æîÔ>³r“›èý¤P½9¢á¦EÅü‘º¦ÇiK\¬NüjnˆïMÏ«n}{s÷Moü”iò#¬dY…A-‘5ÑXŒH‹xóçÙ’‘ÿãØIëÕÛ£¢ïᆂmD¶ƒD«qV9I«=í®Ì ¯D¤"y„úk#w·»¼QlÄ8Ãdó°,X\ý8(ӅϋžàÝÂ4ü±¹7ëjïÁÙö€S ilŒ$“ÕÌáÕY‚tКP0Õ8wÙÈì>°Ù£Üþaš~»C¿|%ٓ$:Ëâ—ã +]ýÕmJÖ¸º]ùÔw»þʎJ—0:Eº ïHÙïð…ë£»à±øÅŘÑÒ×#Q:"ŒH¡Š{O<Š3‡ªÝsÖæÚi»‹%ÿk‹¿ÈAZ§ð/Ø6Úki½1ƒ! â”Ýb=ÐnhÉûæpѧâ±ÚzÔÔà¿¥²Eµ+äÛ;o¬™ à3`R¼Nî_z¼Õ„’Ù~–Ø%5DºŽ1΁q¤q¢0q0\áÀ°„*ˆs‡•úhÓÿ@£ToºYá1‹ˆñ)õÔx¦¯q‘IMv°sº’/*™ððìs½«ŸÒ‹žA¹ÜÒcª +œÒqýªU|  É|¢9@9p¿ßÕr`Á§}I‹jötà—5(ü҈Ô0!Þ0z¡§5р˜yL[‚:/ ].NLd³b­eœp刡@[R†åÛ¬bp¡‘Îv?zÝY-ˆÞ«A‰ ÔÞqmašõ¹Ä‚¤~ÜáŽlõˆzDê^é ˆ ¡ëޏù‡iÍÖ£Üþ‚¹à‘ÄžWfÕê‹Ùƒç†wI.—nµÖQœÊs~¾s@“ÍQÃ_Žns¬jö_:E2o uí¨óΕ¾Ë†ò¤»GKdëÅ$b‰M’V•O×$ëʯ gTÕò’ÁE·Î¯ >¤œëX¶¥á᣼;6îô•숉IVð BHÏWCߓÃXû QÁ­¦‘Ù‘þ2«oE$›‰:úU¬sÚÛî«r^|L0™ ¥7æØ×áäÓĉ[öFÝò=‰·|&lÛ¹® †MÂÉ! qˆ'âE|Í»™%ÈFãgã&Mec*?Ìc,ǒc,å1–È1‘ºC +´‘+d¯[uáÝ,¢-8ٛVø…qh™)‘2S d¥ +Èâ«ËxÈÝ̼a%L¼t· +ÕÃLÓȓþ,Îa6I’Tdÿ˜^d–(É,‹ãe#HÑő£`F}³O|АFï,råñìeeïǰŽ‘»L_oñq·)KÝó¥ú—96]& ôn—^‹£Ààð¸y+Íï¦ÁMNb/Læz|4ßÒúw-CCÇè}Ðû¡÷Cî‡Ýºt>è}Ðû¡÷Cïüý,a’X³( ëŒëÌPwRëƒô+h÷ëûŠÅéj£Œãi>]¿Z÷ÁÏÃÓûã¿Ã&69¸AÒßՓ ‘Ïû²ca -ÇÛÎÙlžÞU‡îɍåVö ¯Ã호¤nVçþ¼ÿÜ,˜Ü‚ÎÈȀvôî2á‡k¼šx‡sä1úq¹S’±.|£Å`\‡Å®ô¥Xðº=è +Hý»JwÔmK}N—Œm±´·xs£^bMt™8œé3žbOt™öm-‘Àªë.Ϧxsë#ȑD§ÖQO·ç9ÞMFW&é°+òŽ|˜°c1»}Ú4Üû3>’É>€Bˆ±X( ¬HÁ€¹Ì¯ØLƒƒU´°Ì&‘²Oœ¼­^Ûm­më^Õhв &I$€ ¢ þ í„ S?þýûÿÙöI­¯[nó½Þo7»Û½ç7ÀÞs}÷Çßw|íô?¾ƒ·Ðfím¶I#k’•~ƒApXȹ†lpj˜4©@!Å@‹B”›V…о³ºfÝJOi£&ûŸ}JOM¦à´“Í›Ù3þcîñ[9àto&(Rz"¾#î#üü”“èÇ4ï™BéóÀ¾m\èqYŽi¥¡`¡”R—½·C‰|­d’•yÊUÍHŽ+õ!1b¿wìՙƒœòW@GÎc:çÝ1—f£ #E8P•·j-î(_žc#s—àV0¢Þ܍úš†x˜ªôOº½±UJ¼|ˆgÊÏûlº•!…ÇÆ«C¿8Z±Ä4þÊ> kM}þ6g^õ£ˆuŠUM¦æ 5Ý»'sõŽ+9 7‡Í*VîÉ +Œ=§1þ›2%iOñR”EqÕ*æÛ4vµ¸lîævªxÄïÔ×C¬y?É?>è‚ær“¸ ½w|´",ÓÖÛÆ¿}×;iΜ< ²3%}wJTò´ø‡o[xƾÔÇfŸº=‹QİðáaCmÂڍ¤6l8‹“¨Øø§âLtÈõôÏ)M- + +´Z sª]ÿºÎÌ > Å·1:ÄÖ`ŽŠ¼áë@²wûbg•Cº |ҕ3w×knàÛ5£à4pRzȸðÍã¹G\X0¼£s3œ‘RŒ\ïáã Av¦ž°9þVg 6Ò¸Y¯” +H˜z÷é;£¶j}g‰Å.­?•fk(vVßÜ#Ñz~þ± x 9Æ;OX~ªƒÿn'¬…“ðXûfküGoêáà“†K8}4¤ä –•¨pòSb8§f;@xHúüïx(ø]Q¢sºÐSOºj*ÖÙzÈX#Ä­¡EØ Â«Á„®òþð3ë?N"Ø.Ã÷æ°rÈk-R„@”ó;B–Ü4žàaފfrÛnêf5)z!ÇtþÕ`ñً˜HN+ÈIÈfjáá8«Ò?~üðtÖs+ÎÕó^x8Z»—lækéõ3Ÿˆ<ÈÑ·:0à 9hZæ–py±¨º>Ë;TÏ%yËñØ€Û ‚— ‡¯.ä]ÂÃÇ'OüøciUø\ç88YD'd×üx›™[ŸáÅÄ@põ¢¹R”¢ð;qӋl%÷à™˜£…„´ZÅXlÞaìœT5òOzg骆·ÊdœT9ò~0AáÓ8¹w3·¡÷©a¾î]Á„Ì3 p2 êÍærü ØÕ*{OŽU*gyÔÓ¼àÐÆÍ)S€’„ÑJ™*i%ö.pìPé§a‘QÝn`{_0ê•(1X`¹ƒ– ¢15#9>ò+2w½,±_â4¼Vd쑪þ§ýQªÿBÏ1ýY–|oû ùLe¨øìe¨á2ÿ»gwtÿtYâ›™Þîéu,<Ëö5– /Ë’LûV.•ïBÏ¿÷3–sví +ä@Q§zÌÛÞ§ÏÿýRŒ(ãÜÛô òL³,²ß-KÒ©zÅ1êf£[ô1¬®Æý/þÝ¿A£^¥þÆ3ý͎¶…•‡Aú`ʽê¥ÿÿʗÿõiڍK÷ˆh0ç‘ûþYjt*a'®•1Ÿ>Zœ`–çnßÓRý²<(ßù¯•þŒ5ü g£¾{y}ëþ¾>pŒœÕ)@¾÷ŸI5)q£ñf’”¸‘ø´ŽR”pGYå*¦šŽ4u©=.´MA)O‘I£NWÍcõYóíQ˜zøpUŸ°wN£•*¼Ìÿ4áâšs±¼0›iÏÞèœT/i¡þXCéyÇýô*é9¡P"†ÕښvÒ·YnT+±Aî 5¸áš” +tƒ³RØ=Ñ;™èe_I;™÷s—À10pûZre÷µ?`j ÊÖck}e*lՇZê^²ƒØ…Zcè)`VÁg”’Ž)Ûz@êì…½ÁM}ì…}R¦ ]iö·kF…+E4íeAÜÒ£œ§èŠsf‘rÓæÏå‡C§&nå”Lî›È‚κkÊtÂ—ËY¥ê¿Ît»ÖƒoÊ.-’ÿVƒmßõÎSý§sö؝ÏpÄî{oõÌ°$þ;.$³.PË£J’óOô†ˆÿèË?ÎÏÑ]ξ¸b{:½êšŸÿ³ÉzÍW:yÅè¿ÂqûÖQ÷!÷ã[Ö4gqè´gügë7¯Í9}êœãþi@øàÉ3ÿý ŸÐÂé·â\ÌN©Šÿ£ ¦Ý£?ý¾ŒíÒgÿœùZó©ôÜBîvüOòatúá*ÆYJ#÷ü˜º?tû (Ÿ¿¦u?vé2ó‘ûÿƒ ¦ +¯ì8_Å…Ó eÛ¤N +ë›gˆ‡WsQ¸,zCŠŠÇsJ¥‰ÛŽk’mãþŽGöê ¢¨~¡É¤=L½ošÊÜÂfÙ¬¯-³:Šó{‹þ¡ÍFÜÝ7£tº+ˆ1šæÕ£žÀ€ÉÉ/ðšo­<ÌÅИB„·qÑ>ý$¯êChzÚIPSýááíÅ!ç͹²º™íÿ)&P;Ô ïKnEþI«$Ó>¨Ëݺèu|¡ô`:~L›Cà ˏa(s¹7‹a7”ï2ç(¯ÃCdXÏϊ]#LlFï›TlSë&~‚ÁȰû‰ñÃD`¤7|4®ØÌvÌ ó™¨ãkz’DMÌ;™Þ¾Î¢ÒiM^þ?9„5tó4 ÓðS~_4^=ôlQÔ-@b§ ²†7PÔGð53Ïϵ@‡‡¦¸Áûeú¶W@¿ÇqÒ#­í´õݾ?’”œ‚ Ê?Ñx©5‹7$,ùBjRî‡ä’JRؓÈ<KÔÍ%…#?+¬äØÃíe€yBC!vþnàÝ^¾žnñúûÂ%¶6âõ¹X±ò.4œ WŽ8SW¡Ôu +n©w¯œŸ¹¹ó÷4)’bÆԜ5Ttôýªç>DéX”Áó4.v¹ñõ‡mÁ_¾4Cìï(ä•0vÙòzëóhʛ3fÍtK'¢à‹Òîޝ%*“û|…†¬!àÓãä†.+qòbÑ(߀MDW dUïq‚i¿NyqZ«ñÆo’lм1Ò}ÞůñÒgíío××ëþ oTÃD­ˆß 1=CîæÊb>u}ãžÙ?ÞFè^M²?"|}®Ü˜wùÎ9B\’™2¯ƒó5Ú%ÒZÞ²KŠuI߸÷^Ör„—Hú_9“o1Žóþ™)Ih‘hã”Ò‚ ՘Qâ*RzåF~œáycЕçÜuZcôŠ!;­éÀ—o-Á÷½m¤‰Â¨Á6gËð¢kd:á^hð©ßtâyÑý;Ã.Qç֟b&"%oxúîä9‡ã$¿0›éÐNX‘˜"µ|=€%^¾NõHá-˜@Éí@~‘‘Z¾ ´•ÎÙJO$IR뎁î0>Z;‰²ÇüÊ=êù„zØÿ—/cù˾èíÜÊãZ©Kì£;Ž,pd(ÝDa²xRAOþaÈlSs*ÄtNŸãçÅ lþq?œ‰qxØå)‰é€6(ü/Ir :Ëàhõ|>2L—a{5û¿nZ(òF;„A?Ñ©YÑü¤¹BEM-‰ ·É0}f—æ¡íӢʠ__C[:ì÷kh§ K»[2R¹÷ÑkcÒ»ÈAÑ7mn/ðknþF¶ØñPŽdÂi b/WАy€;AN”2b±ƒfò‰­Tó™JJUÚ߫Ʒ¹ +ýxC_˾ÿ·ê‰Ø²²àˆ6VÃzç‡z? uÀ ûÝæø-´@Q'¢½WŠ’Û ' !Îæ¢5·1HA3p_AACúÔށ1^—=ƒ!º‘=&ûz=A®‘IT%;Ȩ/rª§ž>âƒ"žÏÞH“—Mq½Õ¦| ? ü0¸vFîs£Icð ]׀¸šr‡û×7 +£ E ߸£+øô»‰"dٌÚ`3˜!?5¶wâ1…wBÊ¨ÏæE,°Ú §„´…`vÚÜSZtDÆ Û%ÜpþÑïiÉj«Ô¯í,X]pUÄFyd·\ýFœ°&áq'†.þ)Ù"`žóì=1R í@}”™÷%É]ͺ+M/Õb—ŠA…ð¿SyÇ<ÀSÅÃÓL/ ß «8ã2€O*g¸®/²Pº,^É‹¹gUYµ¨1ºö‰0Ô¹©M.‘AŠyÀŒèŒssî. vŸ¦¡µg?ÐÊø-¥Õ(ÿ/’”¿|¾Áþ_ ÀæÙC¾M9pÇ9Y§ë>‹ÄÝqbÓv ÔÖϽ'–eq`jÃtI!gم…œ m¸qﶪ [s›Ä2YÁç!ʑŸ³ü/rCÈF¶Jï'—|½Ò"âÝ«¦Pµ£ ±2چ¢5DÏI2B–¾’·ï%Ź {yG?Å$Èz LÁz’!SÀE–A֒@ŸV›%ÓÚ`MlpŒ/Ú°ÃùçÀ֚»/Ïúy}Ä+ë k¼(ö +"£ô,›ÌZéùbHå‹k›áé lBó·÷ÆDï«»ùaoÖ¤½{çÛ^4JxÚåÆI£ï˜}%ξ¡‚'Û»…×ÂÉqâz$,åœÀÈ4sjùû"…~Ù÷pÖY£îÌ]üD—Ó5}ãj싁ÕHv[mhI§êuC6q=(¨Þ'‡Y¾7Ü͆RÐÞl“Òó!׺Y¤ Ù¸S%Ûo³b—©¾ ²¡ÔÙ [Oж"sÿ’F¨MR Þq9eÉ?¢Û¡“'´D7¤ÍIÙéX8V<2ÖøÖ‚G›ðîûp1Ú`“%ŸWÖ=ï•[}oŽj§µüûguh1N7]“#éÒ_O|FŸhZvkéðHÓû2âôúґ„ÕV›àohrÀÑúþC˜ ¼!އ ÃHU󪛮ìeüû¬ #8ñë-ÎñÔܛ(C)ö1¡È‡ÄcC1.cš´Ûé¿6,¢a%ò™f4ÐRí +Ê\^Î8‰I<Ï !k ú¯7£/qÀO#¡j*ÁŽ # š»êDJiÝ*ÖÓÁŽÕ̗ÞÂé:·—»‰$³ãF!;Ž +CÅÑÄ->“===ò녥wÂÿl¨ð¿ùý8YO_aÁÅö»Áò}ÿ†•ëkÇ{'Qáº*7-j/|:é>¾÷Xû±K`Ãۛðù¿™à¤¹kM!½Ý±%V¹š-UœE”ˆx¬’«náÎäÏÕY=¡ŽŒí÷Øó½šL™ñAGw¿ #ÞéJ¤þühJ´è&k_vGæ?»€Å'z}Ý䣝Cš„ýž K-†õ’6{BɕDŸç>‡P‘·Sƒî¬Mþ´ýðjÔüCê’b£Q@7§8,j5/f®v¶=º‰"4g΁5øÈÝof‡ê‚uk'-7Îç÷&mØ…Ý3XýÅȀJ=Œ·}zhó5\ø}lF?®Ui|;YnÊaþ¢Î۟ÞþîèU±Æ¾ˆòBŸ4,…i‘thnÞq°cê Ý^q½^ÿçãzDq¿dGyÄÿ'ÑÆÂŽ; `8£ü_B'hÐà‡·^ Óoéî¶ðg$÷é.SƒHGY±ì€À¡Lý¤i* ߑÝXñŠ2dÌ4 ä2ÍC~o‰·u‰áŧ½B‹hküÀOÁ°¢y{zjÅö]!Q pԔböèpȅÄxok`.5>à ©±“J©J g-LÀ¾lsYgVð0.=„„\üZҏvusEǽòOøí$øíyÇüvÞ!ÿ&Ni²ò½¹þ=Àk{™M6†·º ov:Þðÿ k{ÐÞûàÖå{#þ'‡[–?Ç¿ løoypÖæ[@:ÜÍs™PK̂ˆ0ÒFJTÙ—’´}iVe +üü«% +9§Úz±ŽVyã·VWcq¯’s;IJ»)Eç–žásì~7áöâXtzÒðévÁøÌ@E5Âh'ñyð vÂ@òóÒèÈ¸“,ƒ'ê{¡ëÖÛBm<åÉî– <ù%êÝɊê^Üç'…TñYþ­ÁC÷åAËw4ؼÞù A;âèûߏ' +«f«úÁ4«Ûá·Ãð}¬!DmØGŒÆlÓ\ +Äe<ǺR®Z9>Ëj0˜ÃY‘¹?(kÖOî¤Ér‘ï«‹ }¸ïˆw³qË:À¸ Ah)2¨Ì‘>8ÃðY„þ‘øH½uGq"F3m*M€âû€"ªð`By_°ì߇²!®ÑĈ¢˜êÑÊUnMҞLËhE½íOÚ¦{÷€‡yÝßÀëÇ>÷ªê”íO·ïrlwXgçO+'qœ®I´á·úüiÊý¹å}9]NDû+¬Qü‡¢÷9oGËê›D™ \ŸxÖöqx~Txxi»@â—ñêÆtÆv?°¸ÎS" Öùô©üÿ¶Ú–ÇsҗïòÐvÞµèŽÐ"±“AÕÅ,½:–$_F'þuÞ¹x"8«$ˆ81þ²Ç=:Öéâ*„-O&p1K´}A溑 ¥òÆÙ£ØC3¢Q­O•îfãïúѱs<]¸uë)îà, ý«!oßà”Ú§£P¯0…3pWÝY?‹ÜºÐ…3}ÿ¸’炌‡ì²¼œR@FR(Š5“Ölp&O«ÈágбV~}¨‰ˆîÜP°¦>Ԍ$¥ïg^ö?ï†&8nzþÁc, Ë!5î%Ñ7°±+ ˜~Aý}⮏/PÐ%–sOÝK ¬z›ªà+*Æ{ŒXnê±›X ïßøôeÈÌÅajÄÌT¶ ^ªG¢aåØS̞aâì :Å$—Zaoهɓ|™@ˆ$ñeÛôÄS ÉÎÚÝXɊ{cɶ»,SVO®-˜ vzðª]žŒâ>Ñ×k•«‹Ð¬íQL—Lª ånËç1¨7)ú`*Ë+Z•BI uÚþåOÉÍ÷ùû¢˜Z"¨“ã@ çæföµæ›Ì,‘L TëŹ.ùp@‡SÆòÉXòÛÄ<믬–«Õƒ n~¢èg_“ø+‘dXl>DÕÐ@|œÕc éý€³×ðšÆ /—D__çu%í‚G>‹.Uç]ýûÅê"¯Ò^Íh úÍLòTÒø%JgÛ^’dyą]Šì’ÐXÏ7m2¯éÞ$ÂÔaq“ø0ÊÝÊÜK³k[Ãa{¡ )à|½ Ɗ:!ùׂý_4݆]5U¡«»Àfa¬E¹,£sm‘#’ÁEdHÀU32,HT¯/#€ÑôGÕÚïËȋÝ€ÐëäX ¤ Ûcd‚ðЏ:‹ÖjèI±ï’q»Å¹“D!³?eÔ¹Iϸêß\þp Ìý€û"°½÷õ)¢|}’H¸d”À¾ ˆ:ċØÝcýÈ/ø§*(Ã~2¹mÀuÁ0! +îÔÞ×~y‡¹åZ\?àhÆÍ©ÿ17Òoô ÌO‹M™K↠̕Ê^Œmüê·Òâ?æa†í(F®P%³Úèý§£?iþŠô\j:ûŒ¢¶˜(©7!é”ð›|¬ œ`z'Þ Š¬i°&yj3¿GDA Gs½ù2Åvë…UËÈp\²à'P"¡ë ž-‘è5Ÿ»tþÚ¢Fh–Ü©¥Ç=X~{óí6C´í ž¸×D݅±x%Î|xðÂbG;§Æ‰,/Y §º’ŽN••j±ÿÔâÁ‹N¾&hZøo uv»–\d—é됌Qg;‘Žî‹<`¹§º’Ž…6§%V劶ÙUäŽß5/^çD/Z†ï(½{÷)JHçèb§"Á¾èò»€äxHÈÜZF-»;ÞÛ0)·™èÀ£Ô˜SÐ:¢GqÏö– ÃþÃû”ßG„ ”¤éÚ¡½SüH÷a]‘<½ &ÇÕ[‹zDÏ«O÷‡o…fwc'Êå–Ñ¡áØè  oɔǘt’”¼Â†ôµqTÔÙtn’÷ F +eÇ7˜Ï§]p{:Ѷ¶7é?Š\zº11wç’R¢=ÿ1ªªÎ¡ÇK^㯯G‡p_)tñ¡äÝBÙÄ"»¤Ch‹im¸7ÉXáv Ɵ/´ý‚fà֓äÌ÷Ÿé$j>øS¦#+e‘°½òë­^Mg‹¿§ŒPÒê.PnÝ»*Rvçe±çñDÝνîJz7dx â˜!‡ý³3ɚú¦j¬Û± øø7~Ê#¨äþþÕ&.d´)}•Òl|ߕ7й O¤ã ¸ª‚{`&®ÕýEÒ œÜ«©|Œ)´ïÄB;šÌsôõÛ@³+Ð’÷6¿²¾= É{Ök¯$½O‰´J-&‰ ÜŸþD¼ð‘©±0[Ô¤êb3¤+'ù‘ÀÐ\ÆrÉýjîáçvˆw– & #`kkRýÎèe|VJRúL?ÒrZòâüýàÈ1´éÇ̗‡º!*wV®Ô$¼ˆ IÇß¶G¢)w´@©çý»2‘BŠ(æñðkWêà€8à‰(ô©ØCƒ¸ô/†p,Š4GûÁý¨Ju sšx4B'™è*Á¼tral Âñ9‘Í/éf>‘ôõ·ž‘s+š+tœ¡4î«'5³I†£x®v;l_/Q_Q´‡Rښ»ûË¥sH%u+ô6É&x¸ͰH¯t­ôŒµ{Ò3ÃÒ$¢Û&Ádý;$˜jˆ ¥lØò,O~‰ÒÂ$,Ϻj×"E·²ðõ©!Wä-Eûs&¿ntèíÉâíÅ4¾6<å‚GpdǸ$ãõÄKe}[ðXzö'ˆÐ¹²âNDO¥·\Ìa ¤ +€Ù¿5g“*¼täQ ]K +äy¢>ž¸]ØÕï<âõÏø7üÍތóªüõgìÃäyâ¬Þ4ׂC((eðV²Ñ¸­n”3þµ?á ^µ¬žNÅz„yDÈv:´‰¨·Eû0ý±xJgjøi©{€[ö=5hé S¯Ã–=Xw>Q]ž C–¸îgN#¹›í(ãÓNj÷LU¶¶ Ý,•s23FP­O !×/mWßãð¶˜Isù½¸ß²gpÄÑ/,žxûƒÏÊd]_ø"øf„‚}ł'í+áT+T?§7Âüüß\ß +¿7JÁSmjÒJëšo@±—¯ùù ã¶ùáÍ?á6á`½Ê]´4FŽÜ6?êûT/ßcê=`òWA?7â3Àçf£­båe[¿<§ÂmC–Sá6Ãåmª=¶­è@(iza ÔZÔYê<3yš r—^¶Õ7kës?¹I”VŠmdñ:Ôޱ5”ìÔªO ­ +Ó@µÛÔ5˜s€˜}|]D%ÅÈâbmÏIý¤:,¥í?o‡$ ïêBÔ¼Ý~ª)$GÛ ^‡ê¡¯Cig²jGOãÍäsˆxÚ2å̟~N“cXDÅO3%ûö¤Ï qß'¥­HŽó‡ˆª8µ‹K!'ʆ˜-íl2ä2‡DEÅîBµŠ b©eç/ò#Ì~AýP^»È#.ދê¼F {BÝN­$` ¼üšù@­|µ±Ì™c)J.W:Ò}ûÚj8ðeAã5 AŒJT`»~7šj€öZ}šv^ÁM_è¶ê8š×ð$ó’E„H,ähWÙ#ó—õhìêYrnaª¹ Ìܛ{jP+€'íÁ‹ò²&Þfˆý1ùÀqf2ÃDj‘e ŸÄý.È/(!髨”‡*M.6JuFqˆ´:ÅÖ¥Ïu@òeN¹ +þD,E`/ž-!e± ¥\ ˆ~@S#®úê‹NsOⷅ  ¿ö,zwVÍ íË7´'ü´|¯­xkÕçÙ27–<4|ºL¢x‡ž‰ã|àB•¹ã6oµá3 Õ¹dw)>¼±jn‹«;GØ<ÁҁÓx +¿1£‘ KóèÍ ~C +OÖj~˜éóáq‹q­öÉ1 `ºU^q9…VÁ/·0 + š@ÊÙ9.ޓÁÄj¶?ÆêTÛٙ½&ÉG_¸ß¨¿€Ö +Qdšäí6)4ÞxšývòTzьA¢}¾À¥‹žFMç¯u$h(Ë´{‡ÒoBß~U}ÁÁv­uVœ=0wô,ÂØöôµo®)ñòÅDYi¹„[Ž›_ümÇBoý|^†Í‹œxVÓ§ÕúÚû¼AŠ7")ø(%Ú#̨S¥Þ ×ª\ÔWºiÎ׎&°ýÀm¯n‰¯4R!üÊ#¤F{xjÀ‘cU#óâÌþwþMyÄ¿äבãç>f¼Ž® +_ͯ#üRÿÃ^Gu‹¥°{Ü\Ë´ Û†ÓÀY÷:këÎOÄ/“àÄ¡.ºó!ý”‰ü«òÓäe¹°[P-‚nï1’ ?»ð3(Óµí•åƍ‚ü Ø/÷ÇA5NÖl,C3¤V•ô;ðmÆõÅU¿õËy¨§âÁ{–dX)™jŸa®‰Ý0$í}AÜ:­@Î ,zùf7¾b’ü‡û‰f$µìØ?ÁÌVŽ{L”ß8±Ly077ýP)õý æû™Å¹N±0Øaטþ €œõÜ`ÚK’+X›ÀðxÎìøÂI£ +È)Åa4Zßd-u‰…°LBW±§øFúàný¦.¹ÞšHȼK\‘${<ˆ±ôя xQ±†×dJͼŒ#ãéV¬7ß"‹)ö0.Àm]–Á©Cd}~uÚ(×|EY›êê {4 ‰oÝmÚëbHªº6rCXp¶Ó>»UD$Ü žw“¬<9ú±éç-#j»·4j¥°†ÜMo +°(š¼XÆÇEÞÀ'“[ >֎¹™½ùȽ®'|‡—©cBŸ~›H·'ʈ½-(âbOkð$Ö¤?†%ÏÁ@Ía•[Š3ë.¶¾E¢Ö#ÑJ$㼸‘ß"ríÅe+oª}³ã½sAG¢d2—èÛð¶tò~’"å¼àÙ±:»ÁN„¶ÀF-ŸmVu:²ÀSðkBo}Jó…Ÿ$¶ímx ­ŽØ=p„ɁX)­j½Æ“V¸²(ÌÚéꊜöﳪ|Î}²E© +½u3zK3Ü Z U…&ª—Xà+å£z€=G%´ʘ³\:µSb·õ……ó†anÛéÆéêN‰E¸…´ +:97°[#u³gÐØáöªÖŒ?‚DOˆßsIŠŽ·Ö@l½ŠÍBÄ, 0ñet¢=Ÿªƒ)Þçn’Á‹Žá<æãçTÔ,\<¯ÔLÆê,OÔH¯Ô,`\9ö0 Á9MA›1ÖNßs\ní䨝o4kEÅo@î¸Ó©„ÖX= ›\ܔ»cÄ GÚ/‘éTxÅ=÷©£ôàø½@QÏh֙(ßLލ‰^âe‚¦öÜæ«frì™#¨Ní£ežê™T–z¾ÐV\5ˆªh­C–zàtð¼ýJ¬ (ö Ð1”¨õEénþ¨E#Tæ.$,Éo6a‘¹FaaouAÉ[ vb$ÿFˆbß~õF›-ä§^æÍþ»qŽü šÚýì;aŽŸF=äM*:z±T ÈÕhCÓQý„iÜ%†$}€¡ùõ}ü"äò\Âùš"JwÚ4Y˜6ch>—È3¨!Z¼¦>ÖÃ/Hÿú&$aSÓ +ꛔo£I¾/èHaº~×B9!æ‰Ú”Þì¢Æ\“Kèl.Ô! ‰Üà?j€]+{R±jv–Ò0-ãuÌ+ØRs攵¾ô‰UÙñ¬Ñé­lÇæ¬¨B,UÔïK2bðR€ÔÅT—ÌÓKOÄÂ<±á'ýÀ®ã+K„*òϺϼEdu¯Ü„•¥Á-‘éð•íÄl"׊Üúr€2—kæ0_VŸ0 ý™å©„Šç}±+ú“šÑ­yAìŠè!3h—?‹3hÖ`ŠQt×hý€P±)òtK̬V²Ù½²øæ\]¢4F÷æ†ßÇã $må“ Û¾mO¢mO¨¢(åOg³gJi˜¸w_¹•:Þb¹‘ÈÉ é‡>ÇyN4*È úU‚”ôÎfX3/wÒQtَ/X̹ÄOàéMӟe™#rWjk·ÚQaӅ7ls[Ɗµ¦Ã×MÜq]Lã¸Ïî rj6u3@Õüq½FÜúäõÔø‚bsWM‚$¾·D±O¹ÔÍ»R)¹8KЭ„bT©ks'÷áÔxÜÞ:ÿ¼sUÂJÀêj‚Pþ·¦Yèׂ ®zßeDÕ뙄Ώ{ôµ¶xöxŸ*£Ð\ÆX:«ÕHʧÂaq_€ÌÍÕ8Áñß]ÇBL®R-Ù¥V*à\);ÓrãEá7ÚÞ7ÖQM;S_íò"¬Ž2³}s{3C&ý°#³g³m=÷­ôÏ®`àÃB °4³nÛêLç;s—ŠnÍA¾ ñ¾á,ÐZ;’¶>‡#/xt$²™^ßëDu4@ZÙ¾3’*rÝH`'KaÃí<®ïXE®;ï«Î4žÎ5eþçŽØ!7‹ ^Ï¿ï)æ.o¬Ã©ÿXûßâB þ?3ßJ¯5-2WÕq±Mß8J¯N›~SµõS–Ç=aÑA-aVŸ9MÇE‘›4¨Npzš,u? «éª~/¦)øuïçóŒúágŽxsQÎBАc JBÿ±{ú«Þ·¯N©‰Ö9RÆ$ð|]=™î#’¨ +•fx„¯ö[€)·P:$´j +0…„×?¶¥r9[ ¨—VìÉCÄÇïcS­ðVû‡Ýh¦_É ë»× ¨P7ÓÚY9MIéQ3<‚©ßˆ‘eV£T*¨Î'• +š×?=‹^Td<ö)| +&T +=æ=À~³Ùo£¬7FgªqÌQ‹‰¿à¸¶ ù£³:ˆúèåièí•öLu½~¤Ý>còéãØéÂéœ.ÞΏâJáô´)ÛÚ;S…h¦BžQ´Çð*}é‰ÛWüB˜ZàËØðãKǔé×H® 5×Éå5§]i! ²5ð¨Ø€ö8-ËDãÔrÔª­ö‰Ä¾.NaÌà#*ürRËÇ]ZùãKU€…$â³ôTDê«þF¿wȚšêýÛU7jüXEÿ7àE" û^-š›SQÖ}#Me=…’·¾±cNûúoصÙӝqohY/¢®±Ñ;<‘OCóxË*YÖX áVsÁ ª, ,óŽwݾ5¹œ%fu´ʼn֘ÖWWw×c´™á4…‚’úÈ¢ªjÎÐ;qF‹ÍkÛù«B°°@ übvc˜‹Oô'Á÷z4ÔݐúðHu/æžúLÍÇÛ͌ˆÖÿZc‡>ÊÜpD „Ð¥ ¨Œº4ª !QÌ 9ÑëQ´ëv§¾¾B +¦VK¡*Hà4­Ö¢Bª#èù‡µ+NÀôTü3™o\TúĶÙê¸+ڎR¯ÂrmM;3ñÜrmY&Ç@önBëA19‹=yx¥Ûžó +ÎÂ֎Hó^bø<óoŸÁ³œ>Ã* +“s‰å¬íÖBj(• Èùñ¬¹ޝl“Ï?ÿìùaå&ن„3SpíMK˜½TÅmÔJÐ=ñäÁ°}Κ.¹ÁóÚ÷Š9pL˜,¢»Ï-‰ ›wcôF‡Ë@õ½TvG6—óÐL šÈõÆ'ˆ%KU"8 ñMˉ‚u§Ï“¬Ž]yî_öµ GØ«äýK±\RØP(Þi¹‘%zȯÅÕCºÏ‹Yk:§Rà$Zɸú¼øÞy.ë@ѽ¼ý‚ðøü¼+^ìºCàpºÞ¬"©¢é%¬ƒ› o¨×»ô«ß; ò4,©Œºžõêâ°Ɠ4¦žÑŒ”}­êå`<¹GôgØÍ—GnÛjð*·Ù­h×*æï/n0áN®[oþ4+ö +nˆ~¼fÚGWža¹Eô¦ôJÇÒG”=ëK>öÑÒ§@ÑÒ±d }îùL±¨¥ŸZW*Ï)ªç(R™üerÊç@6ûó羏tê*Ýá{ö-Úre`vžptæáYéò˜|À7÷çwÁrÇ~\rËT –1Rà,Iô–€*ÒÌî—5_“¼«Íu„ÿþé䁼öã¦ïû{G`«ƒ¦n¯¤Š©¢•xß_Cõ<+<…én +´0^ưäV©9 2ãˆûõâ!Ibpª5՛ëÆÑaTu«jæe“þx>1æâ5ÍBš‹,†ëVÙý¸ß0Åxƒë$’N•ØUbÄÉ]bh75=‚µ3l‡²¿êjmŽàÉËÑpüÖ6Õ`µùeþf*Šï’’BÀ¶S¦È§l+X©»{8õp][¨‘î=ó˜½\µ½(~™b€¾Ø×ìØo©ñ¾Âòxè2.—bDۑíã„õ–ø­@^ÕøWÁϑߒ­DÜPû„‘®ÂãåZî}’ØP-øIJi>Ą·‡`엿Uåá †ƒ.ê2  +Ïqò)Í\+µ×Á ¨°ÝâøìPz!¢± ëÇs/ØÎ¬¿Lì¤MÚÀáGdÁT}õ«èze»N¨põ†õôÝ2s/%¦(°EYW¹Û͂›”t£¦ìÝ7šá?¸)5ƙtÞØþ=FfÿȾ«#PbU6æí¨vý%w*Ü~ßø£Ë¹á¹å²3}á<%FÊוYr·¤Ìðé-ÙÿIløÙ«Å4C‚† 8ˆðÑ|¢ëù¬/Nü…ï¦Vûb«g›XxËÉåÀY”‘÷ý½>Ve“î”ßÔÈSû?@£e€(•V™à*·…Ub¨…TæEíԙËl 2tó>¯ÿ娧²,ô=Q0z§¡€”–u§ÂhÍ´+æà#Ò«Ø:…%<ä^;zü¶\½.ö&u[šÛºSҊÊk:HX½ókžÞړáiŠ_¥½?о#àiæl×w†8örÔwÃN«¤ÍT>C²ÚþÌ%Çä¹û.ônt~(ܸNet2´ì1.¥z ì`à‚÷ÿÅXr£ð%±Êø¹ìŽÚ?8;߇·úçT E í£fyXŸ wfÖ 9Ð'Ó„VHWž“gÿ¼"ûÓ‚y@nÄ´1§b0g.ºJØ/;ÞBOŽ+¡3Œ28|/Aéƒé{3mK3¤jeöaøÄEŒxã–qۚõAOJ”’UT¤À‹”£‹™–Ç1ˆÝŽˆ!Á{³íID ÅÔ+º•U qðö·ª¡ì^ØÐû[oGÄ@ïž%`‹Â@U ù•™¢ ªÌӓæx[(±FÍB–€5%M6í¾ôϨZmŒñõ—u{ªaõ:ýÏ…ñ)3L¡NMdV¿ìksƒ;y2å|ߔÉÈhchâ)9ÁωÓ9è`Î"ÁÅнF +ÛÅ'Bñè@;g>̰çÙ¿û9õâWñsêkÔg>î|?ðçÙEÀùø1œû¬÷âÅ- ùÙ¹Ýìœîñዝ̗o½©aÎî⫘º`¯ÿá¬çܲgcýDCÝ_§QoÂc ò*-.-R©õlͬ + ðóà¢AwFÆ"¶r¯{ý¼&-.û:›[g¦k=G„ƒ#ÚRJ\ÎÕÓR| +»¥f½àIJÆªËm¾¿0´’ú>T`”¨*õ/%²*ÜЕb#‹+x1´#k±⠜UY8ªß…(³2,mIRmpœè+¬ìx £èç]~‚؇ó^ËñÁ‡åÖF)€цàZâvÄ+ñÈGbxÒNj†‡À±óÍ@T˜øšº=û Y¡òò_-=:ÐM¬IûZ{ÒYËZcpG<—yšŒúê«Zê«N¹Àgb{ÕõŽ\‹1¤\ҁwÓ'ηæE~:¶òsd.Èyñˆ@ù"¸öѨ͠rµ\•Fá²y/Üø…ÙqÃÝê-*P•0] Sð8¹*ì¿Yüë$@µ—uY®xGÜÆsúŠÊÑ^ÁúuuˆáÆÓ`ß>´kü¯Þ€Z'Ÿ doDßǼ-‘‚שǛøó¿)¿˜|Ñ¿˜â1ìö0ýþ0Õß 0ÕÙPÃW^ù‹ 4Ãн‡ê 5t0þŒoï_ ŸK5ýHSQÿ‚…™ÆQwi…ã%š%÷¬P0+ +ÐÂ*tª(%71Ên>{Á ²±;ô^kBÕÉ_+ã4­Ù£…Ìx\·ÀAl>ÚçޕÕÞdMª…¢°p‰fó]/ I )†£JÏ ƒŸ‚Ё<™{ËWŠnR¨äÀÃM›÷ É]Wé,ëK'/Õ³HJçÞ@X1hzѸÃc Ä\ d)(ª´i/Åaoñ>Á™ža<ƙ»рĤŽd Âi^ÎÏêüvxÓÀb²ƒ À¬Z)rcϲÆcMÑÙ± þcWàû-XlÝo|'Aø«Ý¦Þw~,_OPy'!Jlj1þ3ñu±bÓÛC?-ßóÄð±ŒÝàîoü‰ÍÍ> ·Mà÷¥>»×S9Ìðl)ùˆ˜¸­Y>ÅßâÔW>êTÉ5-“4 êžàŸŸeNòZ}§åϏPÃÆŸ8$‡êÄàiÀ¨®ž´H·k‚>²©Š4¬­˜T9 Ú¢gVTiµÜKy*©¦†pàX-çÀˆT8¥‘ñ€Ÿ¿Lq¸° 9r»“÷¹4“ä‡ëßöî”Ý8ª‰‡q´0å¼dV®4ô¦`™Àñ`¬Éò箕‘$™NšŸa¥.Á’KāI%q%¯VæN9Mj³<àT 4–îGµž֑â™HýNá:¹´NçŒó9ªÍ8Wjl›ñh$^¹A#Òæ’õûKôÃ$ÑË?©Ü¾¹ý^Ɉ͠ÞsB“Ó‘ŠŒ(k ‹á¼ÖÄ_ ÀÔ9 û×µvÓZ—¯ÙƈÛO Þ陘^Îv_P H±ÜÛÆ„ …“£¡‚€¶º¾ —oäÁ%’9 ìFœÞGf—¯ÙÉÜ(qŠN`î%S…„‘—²‰úÓS®¼&ße“߇éZ, +k–ÂfôÆñTÁ†¥`Ã'Šcoåâ;iÅM¼GþÔIý¥–äì¿Ðþ#Öu¿oò®Úϡؑ+0ÀÄí×܎÷D·`Â?ÌÁÓo½í¥5À3FÁrçë ©b÷¹ƒ8ó’bڜô}jÃOþÁh·wV¯_r[B7d-¤ñ€A’¸·­¤à`dx‹úî«áñ{--•eî¤ +n âê]d,cNB·#ýè[L¯Až£«+šðooµÉ\‡³Vô'f¾/ò4.\0ýëu‘Ä ݋ÿ!ãÛ_ö K‡.®\u嶸tYªr÷\‰%í r\э5çЇM°4!Òùm,b\ ¯Wq_CLԉ©ÂJ¯© $ºÀrWŸxAú¬€”¹NÛd"gZuƒ7`n˜ô‚\œS¥N›E\T÷LÁt[׫S†iTÑ6œsûŠRZÕøUðº¼)a˜ÛhlÁ‹¬-ùû¤ªç¡•šDR3&V\è¥O€áïÂø8IrZdó¡e'ŠNGºPyÙZe– äN:ë·pü¿;¯ÊYó÷‡@—ºÅkû¹¹Ë¹\ÇË%™ÜÍõÜHI'‘»åMßpK$¶ÏvBz¯LM†ªè®e¢6söfõQ)CI_ës<&9ž€s;s4+s2ls)ƒ˜ä4”Þ·3¯c™†d±¾(|?iº[²Ý.ºYSs¦/¿¥({†‡,âÄ[An®=#§7IbngÛé˜m™ùž(s4†ø@¥ë‡Díås\oÁ_¶³º3Žs˜ákÜ¿læ½PÈd)‰g8ÊnMÝÙb¸Â÷tôˆ€‡gkL8”~?ÉMØÓÒa„G *6òi](ó+¬¥xÃ`#9ltª¹8 }cä 3@h*R»/Ò5‡ïÙßáâŠZ¢œEh$cËaÅì26ÃAzDܬL¿|{”):Œ¾¢tÁ,¸S(︫h» !nž>ыãW„/kÅ!ia¿ÅCº +¨tǡ嬩­ovïjÜ ÞÚ Üpj>Í»ÏMßÄâ.ÝÍðiy‘Ñ´¤ |èø–z&û p$œJ$ð¼èÿeGûn°5ÐÑĹèqQ.:ؖí"$ކn%³C‡ˆÏBèT¿kˆazôÄPT*Ø ´à‚ãRàØ«ÅáŋT +õóW™®n7'ç35Ä&=>¾”ýϽàwq¨Ô¾éCÚ¼‡óšÃñþ'”΄=yà3‡8o…|ÂcéO œM)Ä¿—Åb針gz›SJ-o låô¨:È:_Â.–#‰œ5ϼ…8ií%< e“Á“4PeOÜhqyÕô2~-EK†0ß¼…¾ünÿqçý)ßó bç¼âS`©ÂªHƒªÈÓåЊU΃$U™¾åÑ‚X¾ÓÍ`ä¯äfª^˜Ã úäu‰w_¹k93¼G¾J&àW63Ꮰ…†…-ú€²´™ÈK^_]$Uðú<Ô¸¦I0«4þ㥦ôÔÚE÷Œûx։Uᙹ¯ÝG»ÇêÆn^‘hÉã.Äüg+²C-çdÍâšQZÁã‘Cž"é|$={ø™ôàG𫂼ӛ¿ìgTÕ:˜¸(IUµ{…‚Õ7õO¤ů›˜“~«Ü44ÿ%»G¶­-!ˆªȈ—>—,îq]+’Jâ·éƒ +Mßöြº˜ý„ܵÕ]Rp~óéZ¤*n\À¯gRå)CÔ¦Ó\êbêÿrð4œM² $±'ÈÿòÇ"üt‘™øÀl~!À¡þ@"Tߚ8ìïÛúåi]‡D0…ôiñE\ BÅtµ?°Ý¼Sjúí4”9. 4àiã€è2 C¶º…PBª‚Ù¨¾ è+}5è ÙÉ¡ºìY½‚×±3Ld[Ù~DàGr’ÁH&=øiM‹çq_CÖóC­r{þÈ4cZ/þT+Aïž)ýD—`íNÁD*8!¢|æÎ‚2ÊPçnéC›ç+þF­,SÇê_Rù<){9^ªãÈ¸d›½SZCO D͂©C׌}ÞËØ†ŽÖëþIû}Œ ghКɅ68O”›7¬ÁQœö¾3°û"Ưiz^«ü²uÔ°ÊzÀÏQ҇ðY¢èÜÕ8 Ï|U¦*@Ҥ +Á"¯¼a9¶Ñù°ì‰“œ1/)QëB³’øgûäc8®‚8hVãÆÃKwŸ8¬ÀۂË×4,û¨ÜŒè©¹B³rŸm*ÃÓ"³‚’P óé„kiJ","È[A/õ 0ِd†¶¥ð`šÛ°¦!B=9¾=Döhª–XGêìé˚odB”ÖÓ«géª9á¿¶kîʖ68‹÷ä³lRn¨2)-³µ$A3g»4w&áeNžÐfiY*PÈ£ ©_QZ§û¨Ÿ¨@âÁ”ÃsâØ|†)8-7¿=‚»™¤B;Lf ‚–pÒÉè¾yڜh)ÞA¾ò) æ;´KFVΦ/®Í÷$¬=¦l©À·¤@A{*ë´ôÂR%¯‚›f|æL¾Ä»«î3ÎÓë;2Ñ c Uûˬ}’#¯KñôBü4Ô¢ü0©>ñµ#!Z5£¥&ÙjA4ïG”Žû(/•Ùw"ùX:E†Í'él·öû¤Z¸ äË CGSݱ,ex×H…Â4Ò8¯ôÁB§! 'U ¸v@ °j 22IÁMO,H®zܯL:!G=H0.Ðå!~å†BâÏQ§ ®·V›Ê­ÀºÊë s:ÀL©çDhRø_\e$¯î‚ëå£cSÚä¤Bî­Ë\HéË$Xž ‘a3ٔˆ!C¶üׇSYk\Ýð/UÝLwh%Qç«Cïч«CÖ>6ç…”v”l…ú¹B"Ua²#9àêu ÷¦uU»Õ»\¯/µ7^öŒ,±ˆ³9°¼#¬6W¥¤å{ر|œ’Ush&ÑQ҈ñí[íWĀ.ÙAuN†ŒFùˆojÑàiIÒòrJÕˆHш>êS“>iVÌV>ÚïÃóuÖåzâì« ²Ôÿ~È.òqƒ³æMôöŽš)¾z>bZh‚÷¹4-£IÔ  ?—éÕ5 6ö@‹VmÊø$¼ Ð`ò*ð*Å»säÄpY3‹@O¼™¾ó¹0ÍÍþ¡5›Ë¥ÐÑ Èt_p¶D¬Û‘DW˜Ô¡PÂ\’qšE^—ËË@|;sW†jkÕ¥ðÇcêÍÓÖåJs— +ìýÁï:z#ߕ©¯• KD‚ÍõDoTLd[ ¤Ç茥»ˆö½Åž}?:ßpúÜ6‡Ä›оGjü¤t-®xÆcþKG²ÄœÈÐWá”õmK‘d`÷£Ks™~°ÝšØÖHéGèÓ΢›Uy¦Q´])?ÊÑä!ñZ!ҋUùùQ6!€?þ¬@ðćó’,YûGÃ) Çli]åãùDS ùýšøý³ä?êkãÆ¯Á>`CdRâ9\î,È9·ЃX\§G>@úSeZÐÈbGþÚ;L—÷óöÏÇÏÿ—ý<ÿÿ–(_þ—P=¿×B³Û¬5—´ììà¦,ñ]øË§¾P´N.fG¿:éôưº}?æº|äBш*üG`$»ö«atüÞù+§æE…Óóu4ð´#NùeÔz?åh1`ÎY ^Ú×!+Î)è.·VßYàn“h·I†+Hu‚{(E°rͨ®ŸÕ5jódc"zÝݞ6§Ë…_/? +&b\H;SNõÔÍì²íp`*Oø)ÂÈ2fœ)Øõv W¿©À ’ݾö^ë[Ml Ôa¾ ßëì(.Ò¥6‰ÂM¨K_Ý Á¿‹‹h©AY­5>Å«7jã4§U=»IÖÿ0h÷[ÝÁžÛÁºûlŠay¾QLú–ÅäfiÛñ%Eù‚à.&Y\Pùýphðí0$º”ØÎB’¡Ò­é}W†Ž¡ƒ!Ð*õ¿ê¿>m„Ò<æîÍôTGôƒ7iª^^…9K¯=Dw}Ò—^²qsáòºõùzO—4½ïÛ3š˜hP¦¤Ë^$™ Ó“.Tqò(?ê“`À…¥í‚H AgUBà „PZƒ¤ê:œi›6֟‹ á~}”K§/Ç듃nwËmSã/æô p÷£d¹IѤGÚìe:X(à_ÿìô*ªF¶€%£ÐÙ)ÿ¹¡ï6fçm{ë/WJÍ(`X+Ÿý/]AрÅ4±#‡œhxLÜx¢ÿn:p2f¸ž·fþÞǒAíEsø†óIC)Dɍ†’ýkÍ9:T +ænÆ*ïþÉÈM\¥D«é4åõ☴«™½RI˜š/¿Q˜Ù- ¿ü¬­ÿü=ï`L¡i¤×eÉsÌ¢²d²k ÿ„C7Ôs ܧ#ÿë$ßò"¼û|‚ò"¼ósš[n ÔðŠóÆKJòCúGF¼!Éqv-¼n+…l€çq’ׇ‰a·.ÛëÅl/*èäôÜ$ÐÊþƒv—ÐèùÔþïŒV¿Öꤱ§±¨Êâ¨â¾ÕøIíËé`™3L˜A5>¼‰×(®lÂQ°À!\ y\u¥“×-,´úފÿÕf烨}…v߄û f6>dö·85BÒ%®%ئ‡f‡å¶ τ6ëÞÖ4œ¿é“2Hò€Æ¦Ò)ƒbÁ6aÀYÂd'0™ŠAEJE”ª̀ (!fëokµÛ[ví]µî®ÕµÚ¢Ù„„U@R¨­èr Pˆ¡Ÿý÷9’IuݶÖùß;çô»ßC»ç¿ßc¿}ü9ïáofv²Ë$‘¸æ†ý½VޚÉtSôóô%+ƑÕk…‘{ºëˆ]ûùš},"5wÉw^÷åPš5Ë&{ÙoðÕü^bððyQ€m›c¤?‡‚vE‘÷Ï õIs@fk…p"VðîVyþ1K”¦´òS¡”v.ýœ+1ã7H”-èd%ð=gxْ2ߏ#-ç»ÁdUeÿ½nŸ½BnòBn¸tg€:@T?éœl‚ÊžÞž5°%dû[ÑåV…úGëÕ½ë̓@xćâàg/뿋µº¢òøZxí­¸le`te§ÑŠ<ÑPÊ/ñ ñÿ¿ „› "ӘÏu€’ò×{ÿý?À÷_ÿÏð?ÿàvum¿àÿf¹EA÷aµË\vàæX- NQLŽçEýp€;õ`Ìâç@î$²um®Ð¸r†óŸ-Ô•’ÃÕÞg·<îÒë=¸©ÙÞîç>uqÝÇg/¶vít@gÖ£]7ºðŒ]æ|"~,ëH¼íN¦‚®ÂÁ›Ö|#ò´(Ie²±ÉCv”#3¾ ×6u&ù»Yiô†'÷£Ç»¡ü¶[TŸ)cÂÄ[ ݌u‡ hoœG„83–šùñÑ¿’A1Ãå5?räŒÁ½Ç +x·¸áJ”º¹öˆ œp¼l°Ç’ åæÙE47lïnƒ:„;Câ*n÷ºÿ\pρ“„J Ö|6:½¢£‚ÓKn´.ݔÀŒÕ¦ÞF˜!`Jλ×'–uŸs ªq†xx.P¸Ãy'ÿ?rY2²NÌ'vu»ŽÞʂ4~†zB½èÝÔÕsî_ڍӈj­ƒeÕ¼!‘ÙÊ˖VF‹òGù\NKSåcáÎé(# ½×£>áG’Ùj¢†uMP³ºe$D)Ù#f0>ÆU˜lŽ„x+KaPӜKOϹi¤0‰÷.šz@ \åæ®EU0å¬2͋DªhÒþÝæ®HX¨rÒ5,±xL_1,Th…̶ٮ—½ºb׿®ñÝÿÚÓ]rÅ@‡Ñ³ã[xYËÔЧWÝŒ-)L`«§3eyBÏÈ̵zä_´ì'´Ì$dê¡\\lM릋ÆeµÈ¥êÅ$1ª,m£K¼é¾à‘=ǏNn]&«„3+¹ÑüЄ͏åJþ›>¾Ëur+Ú$\gq•ª•ÔM£ç¹“‘æ,ŠQßÞ¹ä"bé5 îïw¾Ý;´¬Î÷ÛæR/TCªÒÌ»t ùêðx[#¹»p†ÑÃ"Ö²»—ýXÐ幙25&‘ÚLo Áw©ÑKA[$)¼à#]êM´Y]ãýöÕþ$´Q 6ړp…LìÉZ;ۄiOv¦·80[™éH¹r`¼5«×HJj|B.“ÜƁÓi¶ç@”Ó鸣Ê=œ?Gnxõ¢—¼‹í¡}§#¤?s( ¢³ô‘Ö† Ë<åÞ«à‹‘¢›HFM¼‡fÚAŽÇ”~§õsÛâØó²¦Àž¥ª2ZÎR*̏M¾ÏÏ-:~îÃ`@2#¿”!–T÷¬’ïë†Ýÿ~¯¬~*Y&Ÿ»?ŠÎø™^–Ž¥ ¾B*ÈlÔ#)ý¡A˜„eò,ÇÞMց h·hÑMý²`½Oa…°Ô fúz÷ýº=uÈÅh¡¹ßFítïü:¸¡‘1g|0t-!cÅΊˆ3¢ˆÌxÿzpå'Q/Á¤´Âoú’ƒ¹ ds¶+ ‹Ksi-Ëò.bœNøÅ2JtT«B"%q"H”€ªªb.ùÊØÛPƒï,…\‡ŽËE.giuáâC&ǖ0jø“"Ba5·®ôŠ éu$<¥5~«rÑ{ëdâˆË“4+=ºÜŒRäl.ðÿþ„ÿëËþÿ¶?êâ*§ýèÄeÈÄÇò#Ä÷´¾î,\é¶s× îøå="x+Ï"ä–À«Þ5ð }“ŽÆžöº x¹âÅGoНAZﴌŸù¨åÙø³xñ_uM[á›V2šºRú$&êœE`§€M…$œûÅyh K>O]é•áÊ#€Øk;ëŠÄ>w»-ê7’DÑ +é"¢iëeÐ0‡EØg4§ˆúϕ×éU>+¸©vcí9ðw·4*;!ñÚ!Ð?ûhã¶^ìxÕslPã„僓hÐÞ¡!å$5ë³ gí{)tkæR<3¶gÃ6W~ýw~ü÷^ÏðãÃ6?üðϕÚÝxgèð‹^g¿}>¶»ðÉ8®AH% („¢²ÉAÄûf7å–+’Ã'¿fQzE‚¹q·r#xß,hÅA‚ß-qz‚ +f’àeîº!lFähÆø£¡{ŽËIJח¹$2ü\ŸÐHe§'ðŒ–x»ø9v®ËšÑo‘~ëÔ¼¼ ¦Xñã]ë»J#2Ýi:Y* »Dg#Áswé<ç‚ÿã¹³I8ËÇ©æÚG—€¿øãÏ?ڌ…­RÚä^]¬*´÷™0©¨èL’ÜñZ:-kì_¹5K“hebÊzCBø?g³"‰ñ®énÍjoX†YñrÑðAÚ¶ÐËź ÔPÝ*ʪv­úDCHý9¦b9ˆk^ú9Ù½MÇ9…;–°ŠéB¦™ž?ÓrXæ°[¼¶6ÍJ÷è%¤½µÝ3ΕíÖfêÏIÔ» ¦+éæ?cÎܹC8h?ª™2Ïe›]híSJŠb~R×p»¡C3ºœÌ»?ðñtò’4Aî§3a†UVa YZ?ü„ó3£˜üêò“D#º<¦'úyéâx­Sq»,xp;B‚½Ú45((ç)cÔ7³ÒãÎÈÖ¡‘® €çق€ vÏ]³n ¡›‘¼Þ±<èð׏Äìô›ÁA:Á¢>òç8×~[[Ø´T–â“h´urÚ9^8˜?#ܯg*^+¶R»ó\èK&  áúù"ˆn`SˆJOšŽiš¬ï µ0ιL=dë&6֐Ôn¤aà±²®^+½v¥-’êó¥Þ /e‘¿k ’/é${¼öðcà4¾ï†¾í†z +(´³°±Õ6þíÐØ‘¹y{½“–I-tÓö³ÒU¹#Ö[·º7£Žç;BO¸¨^Yé:Ïýv-,¬bÅ˙M‘|Ñ烞'ðO…—ð‡Ì‡ãvøË?I›Njdòõ$†-çS4•]È!¤²Éûg@í%»ÃoÞ+¿ÒC¹WMОÆkþ€Ëʳ+ñ)à_>%<9/°M[+x6±Hۋ¡¢~lжâàžTƒc%½V’؇ˆÌ{ï£Ëàµä‘‘M¬r¢_éç&ÀM44ŽÞ÷¶è!wþE½0qü3—n„=녛Ó1ë{ˆDeˆIa]•ØÝÖT +ó_àÞ-2ÎO +˜D[?Éw'„†,ì}!ΏÍ +@0HŠÆ˜?£³&ö—ï}·¢ûW¬÷‰˜£¶ú‘ЭyZöWc±Üë»°³)SË'|Ÿ6EåѰUBù„ ú€ö>p±YVÔæÞú„Vëú<‚EÜVþ!aR¼h‡øls÷åãlªÕ´‘²yÊ®ŒÎ3x¥î2ÏÏç,A½ê1r§vmfvéØ@Ê“„#wW8‰;­Ÿß 4gQp„…ôPð1©ïj¡ft “Åâ|Ž ŽÕ¨[TwJÀ¡A›°Œt‰¥ÔԍMÑ#?=m$îðO>Оw5caC²äM°åCÁR»l„0˜ˆ¥vijo֕½X@EJ’j~"¶6ÙøåÔ'–îÀüÄrå‡ú¤lg +Ž•¾¹†‡šåUÞ K˜»Þ冢ä†N¾µþ”˜üY²Ì; ûGeŽï’xÞц[ …˜N7¤±.R#›<8ր\»PZ9›R¾Ì¡¡Î^'ý”[§%÷_#17]9ôÛË[²˜K¾|ŒP— Œûn mtÅË ™ÿˆô¶H5§- š‹‡“r#.\šgjÄæÕ ºð‡Wðm&ÐìÔ®î +¸[3´iì H²µG÷j!.P¢/u JHÔ)¨Û'©Dµ5 ù€¶Ì©å’x—N­ÃT¸Úù%i†¬t™{ΦÉí(ÏyBÞÙ}xmÊѲÒàz±]94Ú:÷òÿ)…®’u”h•@[>m©7_88®Šä¢Í4—3&ÚAœË]H϶rrbÿ×ÞgEàöö,sO Ò@!WØè°âßÿ&ÈËU›s\jñÊá +•ÿM³B …il +'¬Ìù::^‹Êt­.jL;MAK”m¡üü˃ÎïG+ˆ¶Ä×2ç~½Ë DZÔµÿÓ³pÆ[ çX㟣Åðx”5p—á”ÒpŸ 5҉…-(­ïÈ8SºÚëòoz1UÿN1z¯g'nzu Î6í#%Ndˆ ìÉÝ"‹rñóÏ]Áú%…@ϽœéÊ<ØfH™¥Š`0†²Gþt×ґ3ÌJA¦±G}&Ý7¶RŠkhùÄþÐÛ êšÖë›rA­ Uó÷ÓÈ݌;)¸ðeôr@-×zÎEx6·ÓôÕ <ÐN½@K‚¥ª“ôà.¦^÷L+#£ùOó"‹è©Íp½­±SPè€g´z1Oÿ ÀsC–m׌w`ÉiòW7 ®bš¿Iš‰,~=ã!NÛ¹Ë?kª‡QVjÅMi C ìØ ã@Ûþšè)­>ÃæºkÿÕüÛÚmòYssŸÓ/Žù¦¡’¬ŸÓP¹­SMCÑ?ªÓPô•½6š‡ ÁÑP¿ÂJ?À©¬w„?¤á‘òX« ©`üEdÆþCw„?A–¯XÞEE >ÈîTÓ—«Z}u°›©»utÅèœ#”a.Ą%ë(¿˜°^À!Ph™¥ÕhCªX§+SXæ ¼“ü Ëo*?˜u•Ü@¤å;ÂJ¶׎«)’‡*G[<Â':Û +Osæž7ÜÅ÷Kíªw„S!`áÔY%5¯ðŽyï_î¡àKK’¼ÈQB¶Þ÷;f‚|^ÊíÙ@˯(HLéBDPX-ÍPƒ±ó0ò—l\’žñ‚‘ýûZ=WÃìÛ]èó‡}ãèõ^Ôÿoá£Õ~uëkÐeµy£Õ~B:6~>"_[òP{jkw,gÎòÛ@éËf’XôW’/§ùHî÷#ÈY{ n?OKþ¡Òä_§¥øùé`©+‚À¯ù‹8ñè0¤‹Ûµá#ùà!êäµâ]q¤A2)ÒK‹£•è@öóô]¼lx‚r5X¿ÚޚÙ}vôRûÞ Ïè¥_—Â^{˜¾ïŽ»~bñ8÷Åá¿Â6$lãÍiø ð‹GB¦?B5²¶ZëÆÜŽ^Mn ]öƒmòxt0ùC%š×¾ÆÄ—Œ¾?«LÇ+*^ÊQ£uš¯YŽ\\ƒ3JW{HøÍ©\‚£¥²5(&‡\#ê¿/ãz”e°"ÿÇüÅΊuÙÿO5 ð›ò‘^t í$:¶Ë+Î~ސÜd WÏ0³Óçý¡?íå¹[`k¥+Á ‚‹’Ö/€æÄ<ÜWüL‹ãúø˜ÝŽ)8Ú2E!üÊo g…ºr£ Jw'^UYˆ…ùý(é +W,æ¼;ö:‚謼ò…À•UšIÖÔ¤]ÆeíW,©ˆ€Y2ì~Y4zW¾EC6¶¦£ “î&l‚+þÃR(aKÍ"/}=*ñÜ5ÛEnI&"º‚âºw°Ån ù"u*™¨B&vk‚ðëz¿K³_—¾Uzý¢ +Єñ`ûÄ]җñ£d'>܁›\,Çáî;æ2×öI¶NÉÊypE†óoÎbžÝŠà[„8¼b6s˜ïž§ƒ.öýÆO±ª°¦ ‘=!_â”¿ ã3a, +!cKAŸÊr¨ç\)\‚• ÛYÕxÝÄãÎ_Â[{ê©_³IÃS’†îÿü€ƒVcÔ­4ڟoÌ!œ,«…edJítñ¾ÍlèÊ/‡SMS‹^ÊsÇP"Þ¹âïށ×ÈÔÐ4ì‡ +ðò¢EÕÆQϱùå…>ÀFóÂ&Ԑ^¹”YÜB£¢cß¾ PÕ? ÿ·OˆOá'ýŒ\C>!«Ë–FÉ䣂Ž„Rù7É Ø3±JR2ý¡¿Ì¯ç Ô¿„läi‘°,}ûˆÙ$3°`éÝ%‰Ž ŸU+È­—?}ƸL;¬Â¡xèú¿¾¬ ?ŸÒA%#ʃ"‹( w<Œï·áhK>oÑèšA|¶ à9ᑋÎf¥ý¿‡€"¤Í;ñ7Ò j¯£~'žF¶y&6Ú=x`Ý+N©Bß~1ØépEë9v1¨ø­Ë`šÉéÜ£¾íbH£½|˜Ì`èfÊ^/ë1¬ŒFÍåýÜ:)A©ôEÎËÌ4QfüóÑ‚´Ã¬ œ4ðf…Üäì f:œ +8L ]ÖH‡Vž®D©™w+íPWòƒA‡ÕF,ÎPü¯RYö^ª¨$8ÇĦ8yo¢ÛLË¿¸¿¡ßàËCpÎïô—¬ åü¼ݎ­ËC /ûËÿ ógf´?õ§¡`˜ôÏt×+ð!¹:HP5ë€óË/í¡—,×+€d—IJ¬4‘^éÂkϚKÂì›ßÞ«¸‡ß¶71JM”),áøŒoC«öÁÏ,x@üB[§éì•éÀú?úÌy³âôÇ@Ÿ§¡tEÙ/ÌñfQÉþ搴 ³p<{ñ¯pTБ€õ¢`«w°­¤ ҚÊfÆ´ÂíÏÿÅXï¬}îirWWœ ê»°€P€Ûÿ°£lÇáG2xñ&ÝÔÄ×7 yƒcÌ'G`ðŽ¶˜¿GÄæi-9cz›|mò2³3hÈëI y™5[º"«ý°µÀل‰îfQç¬Í|eÜ;eæçàãäЇ;çòPzi´i¯È ½¯aò=Ë@UÑÂýs%›ÑæÐ&túIΙî[²¥(y70ăBòDø>DÙí‡&Xß(Qö<þÓÁD«'‡qh€$Ùq¡f'0ÌqÔfŸ˜ ³1xÄcp£=¸G¾?¬¤»<“û1èJJ‘¼ÅŠv‹OÈZ­EÂÙ'zTj‘óÿß|¼Òëtl¢ˆ¥è6¤Ú,[Ób›E.´´b(LX-U6ùŸæ£Z¬®•öµ7º×qãt‰o¶åHK >}™Ppíµc·/š6­áþjähŸ¸k`WP¼,Z Dï¶zŽl…L€g]»êÜ Ž üŒ¥]ɘ-V ?M^=ñžÊxñ—Íüº½ý–ü²¼o +øìß³|`8ÛÇÓ,¯nú³XG%«¸Ux·p«h–ƒóF&±à¹#N)åVÙxžôžHÎÝ?ó¹)áôL)$?ˆõ?ø!týV\þBÎ|n˜x˜²þØ:,\e5¹üd 4ߚAዂž]ÿ²B­1‰ ¶¬J!ò(¦¶Ó^2J€W‰ +Vë?ŒØ,woPIQO8#ˆoãÀƒ!b6ç4ÉI}5<ü•­!$ÇÅ­&8¢¹÷\B’G=;$hS àÜ6SÄ¢`D€óɇnôR/.^|’^·äbTîFs/ý7ñrìì䑞!]Ëý¸t 7Š@˳¸<Œ6°>ΟF[ù¸ƒ£•ÌVTéôdFÏè2ÄéNᣗu£™Óèê`M‹5à†ÂV<™8hœ ͅáäåÒõ£r‹»WQsX>8ºgjø«?*Á“xÇúÒj;dã +Ú@Z#i „ Åík4íor—wÈ(óDI—€b÷&£rê•ÌI¨å]RÊÀ·5˪Y6Ì  K:4&Ô$?Å,ü ºðò´+ÃÊP¥× ¤/<ØZÃÁÕ+è Ôu©j ~cSTºÊTÑ)ãZ#*]w¡ŽŸÅFñ ›<åé¾ÁäÎMË}Óh¨zm;O¢›~æ+‚D%'¡ v`ÜQçå +Ѐ’i#utLC'š…²ææ„uÇMù&áÎŽ]øü¹ëÆ`cGC!P©]¤øš#3#ôóI’â 69±p¶ì~8ü)µ[ÀÆAÑ㤠c×,5¶cûh„-cí]´qÒå ÕPó‰«&XÐx½)t‰„^­X\"§Éؼߨ‰÷þ?2Ô+™Ñü|äþF<‰ÙÉ£ùA,}ðtXé+­£íS»(êHt²_ XEJ9Ð:;žÙS’”ÞÐX/‚ìcÁììR”SOÈÅÆŠ#=qç‡íH†;ܱX6’æ4]{d1æV´«È¥ãXÌ,»·=ìúÛèѺºRÔ)çR¾vë½Ç@™{T’1aŒ9úQû#˜³GñdŒ rI oå‘Épvæ;øøMjØÀ{ƒÀl_8<á¸:¸>úšåÄÝ2ØÊ¸žûŠ»ïcŒê–Å¡fö(3ÃlÞC¨Lf-þïÄ%ÃV[Ñë¤$3óF-ŸÉHHƞ¹0¤QRD³Ôõû7øxõÞ9c§ Ú}4»'č§^¿üEsmþõ҄#u\Æ7 µH嗘Ã祲wD:µ ÕH¸×`3ŽÍõ։ðH­§ùD¼/úSüZk€kèøm¨§•^ØqÝçŒô³˜î ¹vŽB@޹‘—cþe¤<]£”ñ,˜ñÑÀ—köïÅS*|"0̺spÚÌ7pÄ[­/Pýá> ÿRB?`„²Jâ^bÏç®ð=¹Ïò£‡PyyÏæE(g¶c`Œù¬W"è)èµB¯Œý۲ϙˆÃùê&õñÞ«nD2^åt r´ÛâÓhM©˜cÃä’Ü! Qñ£jÁ¶LÛ>^hö¼üt ×Iuê½Wc[|G¿†§;·“Ãg+"ÓCpå⻾ºµ“µžÛÖàží?v¾,õ°™Íä9Y + Šíûö, ¥]T–T‚¯'Ÿ¥izÜižK•Ö¡ èØª›*åÑþáñÛ¯U»îk(ºþTÔrë~ÏkCræÙ%ïé —š|J[RO’ªqã‚ôáÕ–f +Ÿþ<õ]¦ƒðÄߝJ¶w@‡âBƒfÅ':òw‰þÛùçóïA5p^e1E èńJß 37¾4ßKЮəáÆütÁðœÈŠ÷¡Ü³„¯íJ<ì«Í€€«5¿dÙƽ‡‘šX…·IÁ· _íq@°óÉ»ådù¼æFªýG°êçHpu‘—¬Õ‚ô۔¡ÆýboXëÏ1 ±AFû<Ÿ¹£Ar'y}Å Ú³éîãÉ^Ç UâÙ)_>:0~Z%+ú‚ ÕÑRC£Ø®6ƒvfqŽ ´ûó'>„6-?´º$^ÑÜ1ëË"æõŽWw÷阇»y9SQ½'?‘©/ ÃȾeú¾Y(JŽ—÷›K‡òɟ“©Ù ò¨dß'_¸c¯&Iç¡Ù!RÿÚ·¤x¼܉hý¡XÎMTw„º·úÏÞ%9\×÷°Ör—8³˜þ¡›cp‰ß6Á +‹h{Jß?ºD4O›)fk뙃±—Cy᨜§†6Ø7L~šV·ü .ތU<—VÞ9G^‘W’®Åuí.‘c\ÈÔïæ¹ÜÒ[|P-³+¦±x +.oiMgbôƒ e~Ý ­Ž‰ï¹/„‘|§•E¿v¹À¯»„SYM&¦²Žøv¥ú!þŽYø_Kà™mé¥P^éø“­™*%!Ë:ê‰Lŵlb?6˞Ç÷§šcäï÷>·Óñ#BÏÙcr¤âdÚ&á¬ËÌk¸‡“¶ÉÙ½¸ŒK­gNё°w9‰‡œvIçMGfwa˜œêÈÅ{Ý\F&¨¬4“™Ê+ó™ÓñªÍj~ˆ‡Ù'øfÆÑ¶ÍáßÑ»áߏ€åx ~r»_¤”ŠÏÍ!%yõ?ôü@‡t 0Y®`u3ÍÎïÖ#•N>ooÖ,Aá¡ð‡|:çח°£ÿ£êcâc±û_©ŽÇënØåH<õVûÄ]ïZý¼ëM~gËõuøìVíŽy Ð-9Õ ÷7¹‡kÚdJÆJܲÈ'Š3D¶`k°Ì`æØÔ£¥†ú{ú~$Ú,èÙïðíwŒ¿Ê՘~s±BU6*Ú{9´t>}%þJ5ž ;T ˆ÷e¬)#3½SÙΝ݇D(¢_5G‰m„˜H—Y`Þ=E‘¨”\ùˆó¤‡  +FšÎ¡"ÀÕµÃooØÉ±‡…%8†áLk"$ۏ °„]Ʋ? èÂ:wB™#º×L`Ür\sÑ1Ûs þà ©J0}ÅáøÊsÜȢՋû1ræ(àyxf½=9¶ËOlV±‡3_ókãXãëC÷I˜NÎÜý[Üýi!64˜ñ»Wu¤Ö=6R\‰V ‚ù¢ýOÓF©m㢋׌U1‡ØÇ®#x«ŠÚöœ Ÿc÷Ã>‘U&‚ùÔ!™”®¤i Û¸lx‰Ê;tÚ³úôËwŠÏœ¤Ñç*TyÊ\Î:Ö¼åÖÇ󒕛óIÁa²õ[­Ò¿Ú ½Y«â§E“%­4pœ„ɰ£çXSFÑo…‰õÀ„ÿ¡/þãøXMÛÍ|¡¿} ÓØY™»‘/å!#½ ¸zÄO¾Û$³íWt¥q ܋§s™”féÍ}xoÚ)fDàH‹ã0B}y(hÄVJþy6t¼UáÉ|Ø£ûYMg'%U]çC€±&«¾Ò)ñÄB‹Œ³ø—½HAÏ­ÅàÉUy¨löHß{áÓqÈ ÄÒq›™‘”5VÌþŒž¤R“æw=Û&9‰·bVÌqèýñ‹½¸FÉА§±ÉXK+ÚWèÅruäˆluE5¶·Þ'-°F޽beL€C’ÑË3›½F]˜ƒL ¤­™©\ŽèOR)5Ü$pƔ,Œ HHHýüÙm… …å)•ãp>t¥sß è,d…  ž[°x¸%‹½§£n$Àfl +Ïo¨ÔÖLÌÕûnƒvò6ÅÝûh<'g÷b΋AŒWŒë³m)…ü¸´%‚rõùÌmp C¢ðÉ%2<ê bïa¢“oùöeFõ³ÖͩͽƒÀì!k»{UlC]îÜPÂn¾HÛZ;r(5§ ü”JW„xPy²ÁŒPÖ²Phe[ÈÖ(Û³qa7&Cœ*s„kõ³È7ùOk¾m&èÿ'Ú\?¢ø°0Ok­žOnŒ·U@´Õלãwb"¹ l\ !«ÒÁ•¤6J]cVLÒ55Hn2Æã’DÁ{62Yó5Ë7õÏÕ¦t¸Z-A ² ´‡«‘þí£µŠ±øóºYrãÐlÅÿ»îþ,ñø¸í/F±¶k%ûo…Ùawëhz¹MþÃ¥þȽvg³5´vn +ÁŶà Ag"±¸¡á;5ºš¿‘LýÇD´,ƒ“ÿú³ÿåV6B]fñò;±ÈLždèY “üf–ofP²÷T¯òyÑéŸýE _ҏ<ïMˆ^{‚VT\Bû÷hÒrÿ¿d̙2I’d’@ QÈ F@E +¹Â9‹$%’‹¥i  XI,™b€èO’ñ§ÚkZé»»®–ÖÝiÆÖÛZـ$ª„ZÒ­¥”»VÕ*¶¢*Oÿÿÿß¿}ö}32@B>¯·×œÝèo=Ëy^è{±íÞ®ó›ÐÞöö·›Îþö·ø½Ÿw÷­½ ê{­'Üõ²I%’×°ëæOÞÕõŸ +Õà^¶”Ââ^â7 ßxÅANòãîßñôÏ:OÁkÁwß¶Ovñ/}_¤ƒu–t`ÜdÎEãõ•µ,ç˜59÷M³ÛŽcUÅ äJíÕÞAáJ¤/™ð5Ò!ð;Å£®—ŠYÍÕ­Û€jÝC6%ˆè‰i!uí¢Ã'VÁî΃˺u´e‘Ïi®¿çøžÓ­¯ïý}Ó®ïSU?)të¼â~!0Eúî3ÙIºëðÇ€žß\ë›æÏÞQf5^Ц¾óŸ|äMÀáìûä–|x‘{UÂã¨Øc\燦ñùÏg>ðõ!Ípç¯.ÀœfÅ Þ5¤¬¹¤gàŒU‚Fð–³wDãê¡v¬©NÖ¬šƒ… î ˈ72O(.UÛ¼ ‚-ç3ƒNî:ƒwA¼xÎy›¼hm„Ùí{¼Õ¯×|¬at§VŽGʞž+^ä×.FQÁ±”V–Ê蜷€J!E2ð%º˜,G L‚?ñ^"·CwñÁÝÈÁ¹ŽõwÀÀ]ä|Un îÚ»WÈUn²7T°–®³ÈHMëµ|Ló6ŒÐxnÕÜѳxÝLŠM)Ÿƒy%æBƒz‡júwq™å}WŠßÃÁ¢Øg»ÈîUà;WóÐnóÊùì÷É1ó•̓˜Ç¨Öºkřw®lŽCîñ£Óy†Ü7¯Š©Þ_^ ýæ½Ë‘ñq°z'TÃåw…s +U¤‹"’X°;wùßnfø;YÞ9û™Œüw +E¾–aTѼUó’ê¡·¿aÑü[pùÆw9÷„©4\»qE¿x©Myc‰&M—=FÁç<8Cui"0Î KûžLç pBi6{÷Š¿œ°»Aø`ú oteçÝ ™ýtãÏÉäêÿ'M‚Ô°ú4âlü{Û¯*úú˜Õؑ:M^éÓ¶P!a·‘„×¼.šn«·#â.}°M•{6xóaWáÉ= >ý&RmÜ¿¨ÏŒ¯šÎãj aäà›°=–!_‚å[§{§““vðo[:×j§2Z瓝@£Ñ™.ÒI =‘kÄӐÝM^õÅÐÍ>àÀ2ûrxšÜFkµ™1³çŸ·M,î¯Øl1ôŠ.8h– J诃Dxè5KáU½í³a­Ú£ó4¿¿¡„ƒzÜL9߃oJAÆÅ ç¢ <t]P>–¿…¾ëÆÊø¨,†m=)K‘Ž×Ѿ܈¦÷ðóîËr0Hþ©Þ"FûtHÞ÷‘#ÓòO#{ÃÈßïE¼Ž/#‹Ø²8Ç^³¿‘Çóû‘ÇãÁàÇ>/#b<Ž:$dqŽ^jý q‘Å×·cVæHÞðdo±)Þ+غØ|MˆHßòuwŸò7½bFøå¤oê}B‘½áäoz™úp‘RŽïW‘½àn³×¹"‘¿Ù ÉæŠ1ûˆív²s>|QƒÞø;[ëâ9᳦FÏéÎdû:Tlþ`ìÔ>Α=xìæÏ³êQ³µœñö}B6uc³Ífù:]¨Ø‡w#Ãy;çøøãµ÷Ìb£Éi7ÎGÔ/äß*Erè(F +z@ÚEnïoB8RKÀº|{ÚY<+? q]v޼aʬʃ·¸A] ý¥•~ñ–¯Ýñ¡ªô‹pØÉñðUwIUûÆHUâQiÜbÂSeÜ€pú+I›º?sD½+’ÿã¬òúò³xyK·Üzs¸çbË l,?êü;çw™ÝDZEù©:7îtcg—i@€ðÈkԇŠë!Â+ÎÛ«¸6Ú±ÈÜoÇ„5—6Ó·mÖ@|ërÖ5Ö³¸Äoª; Þ\nd.‡ÖŒ£ÃujŒ[XË{xN|ëö=<ÖèMå´oΗ.òîï¼Sm˜=X~VúíÇ­êà̒Öéö1«pH폂·ÛÓ0‹[´/Ò+Y.7u¾ªeÕÇê¿olÚ÷´.²D–³áÏí[©&ï-ÃÈn™¨ëY|8K@QÔaÄuÝîÌIÑTbþ4=ËÁƒÝÀõ -ùû.ÕÕ®dOޖ\ر©‚Àë6­­e5¾X°tâé÷‡ŸÕúí,ñcXO…¬v¯qì ẍͯ 8w¸Ž{}u«Ü_kƒaé‚ÉX[u4È6˜]eÞÛå½qà\êïAÏ÷.wìýØÃŠ7 4šÚP™Ãïgœhö²–¬3J{öiFä©Âfèf”cOLܙ§Ú•C4”½½/¶ýó³IB¡ÖåYäÇ͖÷ÅÓá„­¯Êߍ¤q¬–-î5‚DmøÚx¶ük8k~7\šùNx±ÀfÂtßûç¼R¯ÒÁ‚Øoušä2ÛÚE^ñ^êî[ ±UuÅáoÝ;ûS;éjGñÚ¯GËÓAF¹l®øºÑ›¼ŽXBc‘Þ«²üCiÀ¿9´ŒFjô·á9¶A]ð#pQ„+mð!:5úö mX*Dé¸?ŠPºãä$ÓC¦´<9t&®·k¸ÒñSöÉ åîsÙÀÅô8£¨”÷”õ^¿Š.Ý$wn€èª»4Ø»6&³z‰°5ðԄèœ9rj6ç!ˆ»Q¼ €û·°aï·õßÀìmý}< ›_®q­ù…ánîô. ÊçãwÑÂM,ïîNÏk"×Ç;ÈïVwgy .”®}‡rø‚î;؈2@kþ^ê®­UW|I\$†)öڗì…ñ +íZ0mú8<{°ÌtEÂ÷ž«ÇQçÞÌúé±w¸×l“ÕZGí'éÏ9É«WÁ5îc`;ìµ÷ݐ˜*ZbèÐvù®†‚îx£Ñ9‡ïœ<Áð×éù +jïz$n㇏{›ã„¸+áNËŽ˜Ò8˜C.¤Ò] +Î4;ÚÿˆX»„™tøø<û?xÃGž51ׯÇ >@à¾àÙÁÄKê÷ªÑÂÁì|+þòߕ‚ãw¸q—{ñG®;½êYÁ-h*f÷Ö­BOõ3p\|«ŸO¶®—ø[žõ‹4>5-±_¸ï‚,[õxÃØbë8ƒT֟k¶­$n¸m=_»‘º3'‹{¢6”÷‘îý—?\K…ðøîrX°ÌÎ'ÆcÆ÷:®È÷ÂÛD¼7öûò‹\0U¾ôw×Oún|þ糤ľçÍg Ú#WÛÍxÔ0°6’¸˜û¾½м½–L™aKQNƒæFá\‹tî|60 ÚCu<ºúï€iƒFLQ™žvÏÚCŽ”×)\™ÓU‚çh +x“(i¿"éÿZ ­YP¸m_:›22öÀ_Ø´»&[jóFU Rm8mëÈÄB‰S!»¶ü>¸ÕSÔ#»î)½4']_ö‰ +~ˆõÄOŠìA?bm(&ôK(º#i£¨J è)ºSWrz q\ùª¡hèM™ÝBÆëí»ÂÙ%Âíf¾¡¦ÍÕ½I²a¦¡ºùßh \w´À¦äâ3󻸰19ÍZÅÁå@JéÐV´DÈðΆƠŠv-i8¼B¨O;d‡luÅ·¦'CPÝ1{{»Wbl²±üì½'w1𒪶ºK·ºpVq—.xŠÍ> Œ‡Þt¿·ýôˆö¢ºS=7`²ß ˆ2µç׍ÍÕÉ܄vú‚ÝՆöŒ[EÆUt=)þzRpqQ_‚ß4 Íx rËhäá;x—Úô"×Ûûò…ŒÐ:èîtŹzeŠš +‚MqC tàùtääv¡L +클þ¥ =1+õHs<°E¨Ži ºvó‘5Ñí¶`ÌrÀó´ÀÀ_!·¿&`~{s“C¹²}ÜÐ6¼¬'cN +:І…<v‘iùRùKÃّ+#V_l‡¬'ƒ~¶Ì힬pH9:äÓ$uë~vj‡Áʄ‘ö·ïš`qzàXÈ6§×ö¿‹Ëš€Ý4•Þ´ÿ´²éü¨AÕ(óíÔM¯&Si…÷“YŸÕ¬ä)sÖ ñ§Â3klR—oŸ…/ý)D•ÉNãàpýJ8ǎ/ÏIâËG2 ‹~X¥5°1É¢Vý)B.¸!VOOÊDŒƒy4G-u. ¾aóèûKcš"¹ú)qtó’Ô³qrºÄ;úvï +R÷a±¤i¥ô6ã3¡E7•[?S üš 5Ã÷òPô Þjs¶"ïVx4¨8;–$x ¼ø(sh—laÇ5 ÀôȔþ´½Þ¦°7¹e¤_‰9ÇdíÇêÊ|×ëKg^<ô /Œî1Ì\ð]¨ÂeÛØ­v—Œóüœªn¦Lz Póæ©å•í6CyN…¯ÓdêŸÔé•ÖõYx0>oc^Ûeõ8”ŒC|ž«í«âù¾ÇÖÐv™×î·ò¼Ü–»Çè9<ÿ)ÒqçóÿÊレîü9ýoñGç¨ß)Nî³­«Ôi+ëT´®ÓXUÀµ³­R³O[YÖ©¥«®¯­;€‡®°ÔÕ××-¸§µÒW×V)ÖÖÛCÜõ!°ÒW؂‘§«´Ó®¦¯·]paj_ hF ‘–aù×µú\ö~§¸A#z—í—e‰àmÌPãëÊBþ©+‚Ðöín$#ÍÊÛ¶FÜzX½š07×ô±„ÃÇ^Ê&¿Á…®'”UËeÉGÔÄ×§…®Ü'cxz쳋kºW ´5þº +çÒúêD×lfŸÆ†èrÌ1ñýâü„i‹„âb½}ii‰•‹f?™‚(.Vçýë F‰&j*]æ²ýú•/]æ µçó›ý|ºô3Ýe„zuҏNºQóóÔ9¦é×J=:éGåç§èXG§](ôëŸÝ­Ù_wãOsóÑícg$ÙÆc#LÒa¿ö-æžËÏI5ÑöYV³iÈ5?­_4÷¾a>ÌÃÿËôWÿÿÿ¿ÿ¸ÿ›?ÿ˜GáþÿxÇáþÿi#ðÿaˇûöñøsÇáþÃý‡Ã‡ûöïõ㏋=—'•ÈŽŒ#(±1Ö.ýZvð„Ì¡ d!h¸× ˆŠÚ>f'x‚¯ç²9z{uÎóن˜ Ë5˨û:ÿçiÌ"ÀžëútÒ6ÿÓ§5g5ÐÍY®vV!«rMM%wsd×GNÒy”{3GðclšpÄåú՛QéûÄG›CŒ6!”Á¤ïܬ_ÒiÄ¥ýìc'™K¶4½T¥èCî}GÃ÷KßúV96†“¼D†Žÿ Tqp•ïEíµ2Â?–(ûۏÇ*ØÒ».$ä$:ØHo”6+c ø Ž@JgÚ œÁ± “ÆÐ˶„LÄí¡²—3Ž$•äŽöÇ'i6X“/„CÑ«4}-t”Ó8¸ECcíŒ"ó–äLÞ¡µ—1êä£M$ »[(ÝD®zHKž¿ù…øôá ¹Ün.eÒwJîâÒ¹‰LNb~ÜQ_‘n!á,Œ¬¡¥¨dÍ-±A•ƒ•4®ÜŸ/{~êøOnP’G„$êüdVÛ¼úòu3ëû˜G%'Ý´ž¿„zØJqƒ„¡²^å{”4¾Ù ہ+úc8e£2Çu>a¨8¼Á¦.å,œhäéÎw^ñÆÅáàײ/år&Å¿d¿lX0|]F"ä¡Cˆ"Ûñ%/$÷© û‹‘‹ 6>ª|Øú¹±ì²ÈŒYoúßΆÿ,þ‚ý1ã#÷‰4«)eÌØá¯måqJ€úÑçjçni;428æfŽþvDøäþmá™wužO—þKÕâZ ÞÏ;Ïs0žG¤äamŒ'•é?N×ù8I'Ÿ’Ÿn>N gËÂqÙaBo"?Èùðú†Æ²ÇˆÒÛО©Оü¨¯¢øH4ÀKGH”´yqçÂ"oxRÓòe³çD¿õa./Ý-&ëaGÿª¬ð+Ěcme9Xq“æa3m (rb¡Ùr擻D,ÊD8õäC8OC”6-–@Ðã ÈÆûtCžR8&§ÆšQ”ÉŽôü³_5"iª&šeŒ6;‰¼Æofnq6XÀªã„¯û¸Qo“di6Lg›ZmÂGy8³Ij‹”åIgˆflE­”¤÷,ñ+û°ÂÂbßêÂk9NŠÁ LdŸ‘]«“Éžq²y4ÍG±ke̝*YMfÜØéø“Yÿë ÈqY™H.“âê› g,)®à8Iù“ÃÆ ¿à¸Y(íÁG‘·ÈG×<ˆlZ¼$~1Ór}8®Zò¡¯(ga®<#`»Éî%ZwßÇ +MýŸ' +Mü·Ëǹ‘7=ÿ ¾dN|YK5Ï. žXÒޔ7 ÷ôIîx'{ ßèBwðcü£ËO +yn;–3Iµ“,¤‰²”9SeÂòD¯ç­¯è8R´ÛÏȕû2H,¥ÿ7÷µÚÿŒ}x®A[£î¿/½ñå{|±õän¾Å¼øšO‘û}s6ÛWòv˜¡ç«ãuKMï=æül¶¹&ræÁ1}(ô뢅ÏÏNºÁ͊5Ñ{l˜F¼býU’_ú5ö©×B¿xt+üTë¡_nŒ)³B¿Nº +Ò] +uÑiè²Nº :p¤þͽjtzRNUR—f‹¥V:èïmp®ŸN¼„6þÑ-¾Ñèkÿ}:ìâ#Ð×üûEŠìù~ö¯…=¼ëütš]h£—>ÄjÒzïšMÏ<ß¹kÓw]Og®Å|½oÁð# â!‰)»JFDøèâ= +GFŒ,TŽŽ‘ÍDéÿ¸‘d'5ØÍÙċ374‘›¿”çš2QċSJšX6JsÍ/¯¤c5dGZE“VhûGÛRû’ŒìÙ›Vmaµ¦T¥Ããî>.²ÖÔ<Ù>êþã¹ßÞÍùp4ÉÇ­õsßgŸËN~‘ûµ¶(Yn”m€É%ÿv`"~%ö`=¸p>ƒÏÞô€ï½X¨&ód=Â?rÁ$›£0¨ÝïG¹ Ӏì€wà31Æ6pŒKnÄK/˜ _³€"\87`8 磧êÀ_€×Ë_ªXڀì@v`=ÀÐøÀv ;`ür%QóÊà˘™° È@ҀÓéÀv #€¬ß¾%WL&3èvˆ˜€äs€:¼d߀ïÀxà.q âà#æ1z@ø’1è¦Ü€ð@d +¹@@ QŠëw¦EÞ7Ljò9#ºr¸ÆÙ•ËÄnâôè¼!àÝß`̾Էu@—®+Ä ¡^'X5j® Ýy^1FëfèÝâÆñ–);d]Au ]èk",iÛ¦ñ#\LÍCY+9†§´EÕ¦½e…7zûUš*ì¤ÿ)`v$]ÊÒÌOsïÁ;ó|2»LÀB6Æ%á…u¾"Ö¡´¥Ãº²þóË »›Û¼ÝÿS®Õ§­%¦Ø›U™zWþj¾æ§°®à¼q/çºdÚB»pÚ"ëg\J^¦¤®‚µÈƒš÷¹•  'y¯+ÌM±^ lVg|Ô<íû7<,õ£\‚Ûþ¾öt«"êËTèõõ¯ï,5hDžôªÆî¤Ma$RsT6Xtäì'€H®:‚`v%uPŸîДÝ~inö€ù"^oòeu=P¯sxQ1å*g`¹óu(¼G¥ôR³Œ +m°ü%4Å»dk¥‡þ¶S~­+Ôí‰^3Oy´ÀQkJ&6%»2/iödæ:EõˆÝ˜¯…ôÆÏ`EF¹ -C›|ü%NС›bR^éIŠÃnü¦iøîªk¨¯ïÒ±U7ewS–Ê×ߦübíα»wÕßÉÇf‹èØ»n¥bân0é´(Ú{k+ÄI$‹0пit„‡Ô•ð&¸˜ùØ-‚/ú+·ñ™}‰WØV׿ð¥²ó]…têÎ Vˆ‡óTm—œ‰†Ìâ¢Wfõ(¿C®Õi–p~N:yÔaÀoÉNê:r¾×å®­¤³Ï¨ŽSÎVjÉbWʸ68RrÅX > Ԝê!'bˆÿ\Lë"&âÖ*¶7º$06/7ê_Ïâ~ µá“e~™;ÿ±ÐpÒè,^©Ô¿½N°û|§Ù†›Më%áNÖþÄøÞ¼rȽyþ´ØÊ Uû´@•÷þÚWýE彿ÓÐÛâ¯'˜57õ3Éæ™‹µ„ŠÖý +ø°“¼xßÿÏÁ«¤&G[‚Å~3Ö6¹Ò‹}: Çڅ~qµv¡¯*Lô÷óš"àí´-IF¦ÊÿgN‚íëͰ'ª'«ÔÞcôßnÿT¦êõ<6«ð¦þ´ËÔ0ÚþD޼©‹ÎövŒÚe]†ç0%Ú$çbWš¨’n˜žòáCž[„w2lÀ ‹ÅӕBTz²„ê…~g3š²y|¬Dû” Òæiä1? Ù¿í1-7"a{Rd'â+?!® K©§‰eÿ-ÏÇ£Õ£‡%‡o£&bx”Ô,ã6 E¥Ü.ŠÒÄägá®%­1½‹¿L“üضòP±aö¤(~ÅE¦/*-¼c¢ÑwÁA±\êcnƒ—ùƒO£¢Yæ Ñϧ@lѨQ§—7F²£YÑ-³¡ZR©ÞϬ:ê>im¦×[Ó¹Ì#­¹‚d'dâ—™‹¢ÄÓ#œ¤eQԗفÄ_—Bñ¥'×ëIÃìŠeÚÒÞØBûÓ<–.Ñ!y º ˆÍŠ:ÿ…ÑqÇ¢óü%º/K¿t%ÍJÛuú1{þ¦ÿÏ§D‚5eÑâÆ60¹ X–ýˆ•±Á…~“«ö¨ìaN~xz¦g×èè·§™äMɽ‘p6ÙàrHÅä«ù<úò÷ÿӟåPM±ü©+ôÀØóÀâ+òû±B_VŽA˜©ZjéHŒõż)qiJ6±9Å[¶Àæw‹@ªž’h“ßÅo¬p§ÖÂ3bÿµÄív<Ùú ¿\N¿ÉMáq2§‹4ïŸfR¶¦KX¨|úÈ\ÛÊuYܐz¥ûQ_¢S¦F[(ˆÝO´§.ŠJ2ÇôèèT”¨’ÎÄ9àœéH#:Q÷Ÿ-âÛæ#˜F¨ÈŽýN˜Ô ³6ÔL˜©%êÑNþ2vù¥4=§þiäOÉGZ\%ç¤/á`Sžž.¹¨Õ•6 ‹w¨ C².1Û>Dµvh ?LζhRÏĊ½2_5øHœn̍q!kÉu^žŽµ Ôzuú‹RŒ×›%žwâ"™þ°¦»µ$mZÔôõ±']i¯„´°ÕùMÜçîԖ4ϯg Q=:õõ¤¦ÿC»êIw´CÖ”ø'wóº^ +¦—O¢) O'½'!ØR‡Ò,‡ä½Y!ÓɃO{[ÿê{úôqÜ®â.ÑOzÃèÿžVРšz{±ááM¬TðäŠzz² ‚Îߨ. ¡³fZëÓå¯;DQ´‹À¦ŸMúÕFø*ÿjg.¬6¼$Aÿ$ ?:\5ӘOÊÞ1:~Õj‡°ÁTÿ»K1AvCFÑ Wÿ¬½490ÒökT Ÿ§%Ö¢.6‹Tž#6œÆoƒ!® Fß¡‰ð‘ÌŸ‡Pw‡Pw‡Pw‡Pw‡Pw‡Pw‡Pw‡Pw‡Pw‡Pw‡Pw‡PwÿpèubЕä¹uõ¨9¬‰Cj‡Â¨7cœô²õÄÁkÑʎz‚ѐÿ%Bx|Ûö‘*ô„zÕ¨‡kЮó¨¯pêðêÿÒ¡¯]î[þõ =¨ãføL ¾ÆÀ,q³Ù>Ì$³f~ˆzÕ¡Œ%$¤Lž0‘#ß(ô49ØÍé@{0änÔ{}@j½”Ž ˆ@zP!/qňSpf%·=»c™GßÐ&Àÿ¥9Ӆ‡»°0 쁍T8Ÿ3c©ãÏȂ¦݀ùà3mÌn°dâ€É‰Í ـïDâKö ;À=~=@ “ƒ˜ë%zÀ€¸MÖ;™P„8 ˜Ôò¥GÕ)ÌoRTýyP|W—'V($:«¥¨Ñríÿ÷=°Ê%Àç"£ mÿû ´[ÿø¨·ÿEØûdrB{îêŒÝ?ß»]ïn®÷·aP(°€Œ^ Ž…H»Nƒ À‰@„•%€:…u0 È1–a… J +€BHƒù“3]ùóïß¿»BÿÏ<ÿç›çýß^·w‡¼àïÎ>úõ¾·…¼MÞñ·¾Áû¾Åýƒ¿OޚÛl·MÕ Ì#ʄg‚=À‹SÇ9„uN<}PF®â>¼aÂ9àŽà#:ý.nA"ôß?ÿjˆ½ùª"ÅÖÂ"g +6§8c¹Ï…•’휄Gçù£óüÑùþhüÿ4~š4öèÓÛ£On=º4öèÓÛ£On=º4öèÓÛ£On=º??ÍŸæ<:4ðÿ½<>{ûÓÃÆþÔïè|ÿý FÒÖJµ”Õ­„¡ é.˜ˆ‹·èJT²ú¶pB’ù ˆõi¸ö’.€#<Ó4z¾¶TêqÙð#Ù‰¹Æ(/T#uHGÐIô#šíB3á@™´ã¯¡XG„¤ÃË© ¦”фljŽ; +’óóÿð!HG–ø›Š–ÎE]—ªX¬ŠÕ9X(»ô¿?ï +τf‚=‹UDã¬ØF0#©Šcë„{Á1¾€{xF®vYK½_Môþ ŒG‡ÆTŠvçMôôŸ·ááö¢•-©¾‚\ù¾‚Xý1'Ü5°°#Ãè î‚4úiÜ8Dž]XGˆ¤Η8„¯„^‚7°ŒHG@-¦x#è²µÈ$\#ñ~7"’:‘I®¸E8l«^œ\Å CorÓÃýð–<>ª@{Õx´iâѧ‹Fž-x´iâѧ‹Fž-x´iâѧ‹Fž-x´iâѧ‹Fž-x´iâѧ‹Fž-x¿Öž-χ£ùðÿýþ|?nHpó†%S5χ£O¡<¯j…„sa@@½vŠ?¶¯¿„u¡#izï%è#okÄ÷ÕÂ];Nž¸+8ïŒ#ªΏçÛƒEÂ3¡å=¡µ‚bCRÂ8`Ž€#8í„RÔN:Äø‚1¡PG~¡÷Â"Få§©uH"*]¼xÛ␊)'¾„p¦ý¶¼@F4#™¦üñÌӄG½;õaxFP"'Ç{í #@¡ÒöÝîA`´ß¶×…è"PôÂ=á§·p8êØGZš7á©ÆžLR|±Ä¿¶·‹è‚;ЌøGÔ4õîA"áé¿ N4òz ˆ©A:Š€ÙVÀZ C†Ûù½(üñÔiãQ§Fž5xÔiãQ§Fž5xÔiãQ§Fž5xÔiãQ§Fž5xÔiãQ§Fž5xßéOózxÜ×íÑ專‚”"嗞Å'ë„} eWqaÀA…D¥ês±èã5-Äë÷ÚgB. ÃlЎœ#×ÖMùãQ d2¡ ,#ÞÖÔì#±òÂ)j`†τD©¡¨m8ëhG +Úy&èã‘tùPŽô")yvҨ㡂:³tq˚°Öð޽YÙ>¾œ#@ÃS}7G·7†¥„a‚2AЏx"ª¢£Â?G2ׄx†ý­ïèj©7þÿÏþôñ(|ñŸenÕ[ÃOZ,ì!*T<Ÿmn³O©ú4ÃØoauRàuh9ªp&„,Râw¼ulåN&¶PN^ê”Ù¬0ʘç=¯µ¬gY±Íbšs$²I òžÊÕU2kPæ!¹Eù;U¨êáΦ^G±+§WŽTÖIN¯’Rd'D®DÆÇCý¸Úc¬XNT˜áìDÛâ Âɰçq²l&&9x¼|±+¡fÖK1Ìɱ:ªƒRJøZ$8—qÔgDµYŽ£º%©±#,ìöÜuÀ?Õ7±(¬A„§%˜ççD­…Ë.áhl²2}íÈ5ÞEäåU²m:Öu°åM¡d¤å§[NT¤,ª‡[Ž·œª¨Lxm–Ϊíº%ª’ÍQ5Q,ՒÍY,ÇGÝ—G–2·@”³o&Ímä³tKP%˜è¢VÒYށº%RK:±Öp³«ήu ,ê䳬i :Á,Üε›™,Ýz 7Jm¢Z$ʵvÌ·á÷Ú×ýššüöeMã*Ñ& ø¡ããËràw›Õcïúô¾¥5ò؍rýWzVßp¼5iÚ'!6‰ÉOÞ§a íD»F¼³I}UÝ¥/v‰.Žfžß}•‡²ÕàiX>;D™Ñ&•óú/ýLÅ eûApöŒ$_̮識,øcúÚ0‚vˆ»žá珎á7Ý5’–ž÷ÚDzÑsîçãx®)¶/G½ð¹|×kS½sìÍÛ9øŸùjS²²öZ$Ù?÷'8;{ÏÕ÷î>ï†ëË¢´pü;=ÆÝ{íøíÏ5£‰wîYÛÁ=dãï+´Âv ŸûXq}%-ˆý_zw/µÏá'ª;þ‰{)Ý¡Íåkîî`¹‹+ï»Ö¹yìÇkñÅQÖ;Ø ,\N¢¡ñYvj~¦v[%Õ­Ý2új—ÕÌý+ç ăËÝs?lηªý—ûÚvjûK|oZ5Ó§*¦é+ôÀr|N͟ç~I4ÒOšJ8Ü·÷~h‰µÚi*WË,èþÇ7㬾xì­ÿá†+ÿ݅ƒÿñK+³ïuý$ö¶‰Bü%¸·å/y‡‰úŽsò.»Ùâµ]l.FJçžpü㪚úïÖÑ'í´J.w>Ívճɾ>éušè.’¢QS¸gsvìêë¦eׅ½eÖÚ}+á[±R0oÿ/åÈÂpâë–E; &¿ÞâÀ1³ÔôušIþΡlçðÌEÝu˜4ìf9>Õ¢P˰}×UÖoÈûžTº£‡ªnZ%¶‡•C­m¢ sh”*êzÜìì;mQ÷{ðéí»¬ æÝ!ÕüØ»U7oÙ4»³U/0ôžä²gZ¦õ¥ýîé=ÉhïþZÓ¾‹ç<%ìÑyCyè ço8#y®7›¯‡õìÔ™á³#cÂ7w÷·š†š­ÄÆ6|¾LT=£]ÝÖipÚ«6w¨Ý­–êä«=ޅw¥ÎùÝ×îª ŸÛ•l²K~Nƒ ß»tñ:Êb—c÷ž>»ä¾k)=Ó«ÑvúØËÎæ{É7ÏañICTæ68¼4oŸ ëïq¡$.øŽ(dðpv垏ÍZ‰Ç\jߍ¿¿¶ùЈÇáõ|ÞÛ]µþy-Óׯ‹Ü¶ë½Í¢JUö¾ê=ù÷ûNÔ5š+عsÏõoÖînÏhñÒ¯[ëÞr÷žŒã–wƒ¹òn=êçoñi´»ÞbÍw[U,Õ`QMƒ•é*švî©ûs™'|ÂùyxL¾>Ó Vüâñ±u‰êJ~|}þ7¦ßɁëañݍçŸÏà—ÏÜe÷uN†~RýdüþWGÍú¸œ*¯ƒÅØ»øpûînù¿×õ“înKLªî›ººõ†Ý·é×i‚JùÃðAv>ÆcàÏã†J_sÏm𜊻]üŸ;]´öq—"«’Öþ§}¼rj­Ùkɾu»Þ-OWEÜ;¥Åmð;]ðæNîXêºV7M¯_)ÂÃj+Þ(>ö§YŠŠmÑã¶Iê›…¥ºŠ;ÙS¾›3ÁÒ¸FËvv®ÿoÈõXÝ*ÔgùÚ%rý¿wàêäýîÇQL÷;Ÿ›}ìÏx|Û~¶#çZå9Kæ0íçé÷de1ÙýÝW¹Q‡Å,eÇZž¥%E–ªåÄíp¾n{,^å̆rŒì¶É÷ùÊú7¶ nÜ-»]¯ ^Ãì<®PS·WüLS#·Àâ¹»^­þ¥ +§°÷F¶‚ÕzÚïö\]Vû¯–æJ¿÷Yn^ü\‡ {ÇxÑíïZýfáÙ5¦w{£OÑåXo{ßÒ®{ñ°»yh'ª±ˆÁiñÖ+TºÇ՟Uìv_ä| VI?ÌÌUßô3·7œ¡¼äü¦cþc1Z9˜³¿¤Ø¿¬ÉtîÌY=¨½¨/&œ¾pM¥ó‡7žu·þ×}´ÿ.o8syÁÎðo7³y¼ÍÕ w7™Æó£òO—›Ïܨb£¶¸}ôGm¶~w}v[àn¼ç± µ>“ +Õ[•C€QÆßøÇ[°ãæ‡wói) ðÚ]0c‡ós=ϰq:Ô5½Üq|_óÒ8ÞKÞÊÔÇ’²È>è_­Xþg¦cs®ên{¸ÅkðÔ|7ínfá¢è|n{9/­²&…J^;ø;pòоœ¼E'Û×Ëìõu>DÌÎ'QÛÍ¿Ëø&¾‰•œŸ©S¶:Çݲ}y¨˜®ÊSÓÎùâþ ;K5ü63•ö¹I¼µûƒãSC4ÿ¡Øt/0|tø{ …Â9·w_z÷«ÿ«cºÔÕ½^¯yØMón*/ßãp³Ö8ÔWt…«ìaØÝ8ZËÌ4ÝXý5Ù>š~:ÐÝ䇓Å7¹LëjÊ!­U•ùÕýÎþRÏ·Tçkúè.×~>§ãÇ{øŽþgå‰ÇAë£#'3J¦óކRú +(kƷˬóËø£1óU½­ƒ¢2ʄðWAì«n½á½ÿR?02õ¹]ã«N¦Ý ‹ê.õm°ÈÝW1ŒéŒ¾µ5ëHåñÐ÷!’|ô¯nì2WÙÜ2è —ã£þOɟÛó9-7´T¦ë£'zJö'˜2΁ðê†PûUÛ»ÐÊ>硞b2— ©ÚdFS⚝ïÃ*l;zühʼ÷¥ó€2·¹½TX ¯ìû½ñ–6û6âÈ2Ïp÷½2C-}¶ï¸Ë åØÛ†\ë»Ý˾;2×B2÷nmõYy×1˜:÷½‡ü¬\KøÌ_co¥úcúð{f#2{\´f_¹µüŸÆfÖÚ3.3øf¿ +ñš4»ñš}Ïæ«x—½§¯ªü ñ›6ý”'Â3obuÇßnå¹»ë0Íüäï:Xgõ³|¼Œã騳ýœ½ŠíGÜ3ŸãqFtù¡|‡j"3·¬–•ŸßõJø0C÷Ó}šVŠk§¿”l{‡Þæ¾ï?’ +ß;Aê[¯ÿ$•ÞÒ³u­©¥gÿì’Àâ–ZVÛµµq¹UîŠNÅsÎFß÷_g-uI­©£(3éºÍKþ¨® +ã ®T¨^ßþ¯/-ÿ•ñ'C»ÿŬűâNý!\3aÇ:ä +’ËÝrÕåÅ ýÆÒùÿDV=>¢ë¬2 [ÖUÿWÐDz ÞÑɚJÐóþˆ¬ÂێlÍÇ}™m%xu+má)²rÝ{®àŽv¨/2~)°÷¶¢ðS¤TÍ1?XVÒú˜þÜ õß"8âªl͕¾A.ۈïa?ïN’hä|Á~ε4[Ïk³žr6•Ò)µ?9 +¥¸ªŠûZYاObmam;ڒ¢×Ç¥§|$\–ŽÞžê96¢Þ+Ã% bÍÜÂÍÚWÔôÇù¸úÎòHCÖG]¹†1a ÆVáų¼Ö„Pçö”'ìHç×È¦ÓæˆHìó>Ē®¯5š •@a þ=\Nj•¦ ˜3ã÷/¡·î¢.D.èùIPÐ<1ÈmlœÕJ ?¤;ðÇF4ð¨?±í‚#Ô±œÅó°ÇÉB‘!ó~¦‘òjîæ…ïÐ2a$mptÜaHXØ/wœùF­½L`ŒÞ§MZß6@BŒ¬*^#©—ö½x…2¢Nb›·£@dò–)¶>®Ù—(Ã\RÉÑùŒÖôVš¸‹cOqñ.ÏÅ +.°P¦³Pv–wÔ+cè6›ˆû¢{@’b™hBr‚ö”®Ì‰x>2Éi3 A'¢|,#74jÿÌÅ|¶…”óé)k¾{ì"á`¤¿a pQž@¡ýYE:™B¾wwWÌÇjbß3šæc¨Ó˜IއNèªîó¾F¸(&萐 ‰EqÐúW1-ëé”h)«ºï-‚< `~FP +Éá¼¼ÄÊòÈêj ˆ ѳ›ÌӀÆd¤n–cß7pâU—y&+A"–±ú‰Sƛ‹:QG'£/}ª;;2 îýHËqp96d7„c» <ŽYôpd­ÞIŠ"†ÓžŒôJÕª[?fÚSì +ªÊõ…šxðàßF~oldضÈO¹Õnú3;'éJ}p佁+%¼¥Ù' É`ßï@e§!Œ`?VgžkÊ"Aî!«ÇÓ­>ãmÕ?g’VÐT++¨6 ¢.ԂÞN–“éE1¡ wWgJ{&UÌÃíR¸¥%dô4Î{Ë:º;„²8‰Æ:eduX‰dˆg±ß¯j MõQ¨’ÄÔ×f=>b7¡Š278´´N$&Í蛈G¥Ñ6@1ý(š…ØðG¯7¨—€]Ç5Âd\OÀ6{jê„7,ýAS_áøv¡œLë¯sŸl(׋шÛ(ÞÔ[ъpq¨¦ ȐøyãŠsçóð…â·Ï¨’9öŒéóøD 8¡s¿eÅÙ~øNҗ ö ñHñÃ~QKˆ.¥’2Or˜R²Ÿ×JX#?®m —ùčÃ)‚"$‚ì„Ѥ± —ûZ±Ú xé=íÙìü©Æ%¼¼,<u¦öR™@[C[:—…áNHßpf(ÊÄk#Ýkf.%™¸çÓ:¾#%ÚR ¾íì* Ì iW°Æ-lŠë ÉsìÁ Å«!E ЭX¼.6òŸVx²'<Ï|˜Â¾Å¸Öj³$ÅL‘âœxæ“pñˆí¶"•¬ÐdyÆi¼„&ïÕî}Òâ³:•¨Åh)yaúöF}Çt¼°æ•c|!¤H¶t=œ!bâ2y ”ΟåÙ½¹†VPWtNÅ5g(òç-îJŸ9 +>xŠHÑ^3R ½µ ÆÆÜHŸÆ&cíq¡çÕu¥:øá„n³&ÙÇË2 ´0+“§ü›7£Û5.Ž)éè|™äžcqœ 8§Ýî@Óݏ˜F\)p‘gMÀ^ù½öSHc•â㎤ ’E»0›¤ #P8G”ÚG¯^†\ËÊÿ"‰±†°È]¼þоÈIFñ ÕÖ^2·áq:¶šò/‹ñQTÁ´LðecC2;kGëËìLîî …—ØŸüX's¬'n‰â|Gú +«äâÄÒwH¾ÖÕ­ñ‹âWɳ ‚ÑK)¨*˜R)ˆ¡1^~Ó<ô‡nìКDx²ž”Vw·Ö+åR±™€µ¶Dª}k_*¡”ؖ׿xDñ2¤u}ÏÌ|“?{[ëéU ­w#¢ß@‚ãŸ9~û7 DB +¹Mò×â—9PëÔЉK·‹šŠ ˜Ã)µÖ‘IJ€HØøÃÖ÷µ'ª˜È™°3†AJæAô€®~h\ ZsîÚàܗË=\â.RA´¨I œPlªHõºä¿HÏk%¥R}ÅòAŽÒ˜ß#&D™v4g÷õ¤ÞM–lŠCÈüáN|Y‚›Ò™ÔÝLP—º›$;áô GÛµ‚-ñÅÅ®Ì2!Œ‘º$?_­C›%ñ!ö?eªŸ£Ö®Õ"êâl b01él§åõ¤áÇ\MwÎÔI\MuÎf~²¨>/ì“>ç ì}š~²¹¤\ÂmÖ=}–‡ ©o^"Cû>"œ x”QškYÂ=573¢\®¬[ÄQ—‘^ÞÉzޖE0¥÷Á äæ_H{O³o9t¼ Ìó2:Cígñ_ AEZ1ÇÉÙ¾ +[=®úÏÚý¿¾ªŒ\ɝóõr$t­gÎ~܌ 6¤h=&{IžyÌy“IZÎ?²ÈÝÒ<óÃ…‹%w~Wr¨ô´¥ _öudv×¢bN4bY#×9ᾒž‰î:Â;ŦR7T„t»„,ÀÂjÿ'ú5b5ÚWÕR³uÍÍq¢n,?‘/"AµWƦÃВ$¨¥°~H)Ô¾0ØÐêQ±èlù¶t¾Úq>6È|T܄{Y©Ýcêa3Qv›¼Šõ5)"8O5¤-é¬0ëjr¥¹ÎD9”Àízâ×Ì÷&ƒ•0ɯ3^?kêÛfûÏà$n4en‹"Ѩ°mQVÞRÉÍ&9ÜLTË@·™‘‰ùIßÎG°¼èHàjª “$ø±-t½Cße·Â½eǖ¹­H¢™"-° +ó-è°¿zóΦ#X8Ð xËë‚@‰0¡¡^¤IϕI’&7¢q–Õ~â¾»ßòmìÄWØ$H³Ò8ŒŠ&§/¬&ÆÊbñzìz ämvÍGœCêéš×F*ž.Œ_žQPPÊæõ ©rÈá 9ŸÞ¡žʀ¢Zܖg@ü-é,̐{¿ZÝÞ¹o?"¤7°T¹! &qÈÍâ⯋­mÁ6‹yëܝµ·.XúܹoL¸båüñÚêÖÜ.A{„+Ó¼\Q+dR‡Æ\(S4IÃJn£Êk„º=¸×èöÊ+H“„nð =)b“®bê½oXh!¼Éb\Ku^y´n¸QJ±Ø"äçå½™–â^±$†W.‘´*`$ ˼Kkáß²w ÞFiԎh;îö ¥šg"á‚Áð×ÇÙh¨iœ!tÿöqMb%– Ç#,<· ÒïAᑽ$Z&ô_gŒJ@˜ñ.ÿ˜ûx0ƒ†p×;ÑÅxVúr*&®G$c7Dœ<Îþ'EÀœþhqf+ºþÜØ¡Î?¡ç¥{ºÞb‘A͹†eéTØ)›C]\À›á’ +ø"è±:~’¤HÁÕ#Å¡\ÄFQ^íÃ&¥Ôè›ö/ÊD±0SU\Æö¤6öT¤›wW8¥ÛÇè˓od2àü7¨¾ˆødYuWðdˁ0D'· ,M¥s úÛÀY'Šw^Ç<µvœƒÖŠ×³>ÀHx<æiOŽKì¹d}ëzÑ·ž£<•og’¢^d3ı!|ÏþyX”zÿg¦Ÿ)mˆöLÿG‘oòr6ˆ^às½Ï<Ì WÙ¢úZ7!—#ŸbéžËYúûÉg‡Wè3Óåe™{+`’E6†eé\:ñm„“Eob¶ÀÎLsO3‚U–1Ü<ñ¬Y¶â¯k£’ï÷šô%óÛ_™sZˆ”5¹Rìǧ4Aä;gÜ3ú司†J!Ž‚ü&'®èò¦~ÓTÎ¼í§¡~E]† JÙ½1‘_'LO]mŸå'¯Ûî~žæðìù±WßT,{í$(¼ùÁz ˅ ƒÇÀøˆIùL(à4DJØø$PåήÞ¢¬Î™š’¦WÇìh†P\nYR+›;~ÃüٛŸ¨˜¿"xV8×p¨ã¬UÕ²¥¥P™ìª]¯}ŒgèÛ-(fP#?0¥UîαÅ36:‚O¥aªK¹ý¥Ì¹ú×EÌ_Ñ8.ßšÂ$" +¼¬)J‹Ê åU¨È!º:aFá\ ‰¹´ò2e˜¤Jt[Îbi—­“.¡ÕQõã³?P‡¥-Zå<1€çO¼̈́ÛQ=zS伅ô ûUâYT9P»aÙa[äEý Ò¹‚ý›|áoÏÎOoØÐd—Lö–ÌöœY¦·ÁLx}RÒ+ +äɘ\øtP&*l´Å Þòf k2×Xex$UkuB Éq÷´e ¡~v{šÀ¸µ 3Æ~´åm4ÿÓ2'é9Î"$\ð‰ÜBc§ÜŽŸ§¡tÝɼ‰¶–?(z%C¼uPòßk9ø×HÝ]Y©€ÀöåÀÉ@ÎÇઅúÄÎýg?o%L,=ÇܞŒ3½G¦)ãĹ$‹Xd‰ï@ÀdË ow¥ô(¦lɈ{† K;ÛioÏMd!»ÿ!« ¾µïó +&F~bú¡{(ƒ;¬îR×0ü$ÞL{hîŒý .!ºj~±)ôÌwááqŸËùÊQ°£x‚|Y»k%Q`sRƒœ=¬n;¾¶fSÔo-\nÔcŸàª›)ü8šn4ãˆ"*™ ¸zBn7ßLFñw0jKTa0×àÓ`•ö¡F8£È5읊FESàXFxŠíX‚_P¯‘ìR3Bkb(‡‚~v¼Òè띰 ¯ÈG¿‘¦:†¨“…Xº>âK€.o!(j}Æù¹œU´»OÄ!F?Œ»þ(† Û)Ýò‹ºxn¬© ý0 Í[Q’9È•7–˜yq¯Œ;1, ¬Vß\Ix|z]˜™”»â¦4™9~J˜•Šò䉳Qãå}#¥3Éʖš{H†cMÎ.F|‘¿ +¿sõƒñ®xC”.%v1(ªTß47Ÿ˜·]ØÉ¿Åæ&|ÓÖWio/S_LÕ½{å~%¹Ï€µrlΩ‘ \c£NCnOճݼ>H÷ .¿å!÷/‘{î˜Í+ï u_œ^5¦y7ga€b–[VÃËäݽä¹^‚ä>«;ju‘—¾·’dyFäC¿´" ¶B‰0yQTó#%¦[…L¹v*ñ—‹Â*™b!ôDT•…ãòBê¹AD¬¼}ÉÍ]M»îÓ`vê\ü~a4:-ÒiW4Éî3FÐJéL¾ÓÙk¡dídJÂy§Š±†•=,Š®—0z4„>2®Õ!*íF‘Ä·¡J+Må2Pȹ™ K> 09 P÷rïa«¢œ3Æ_Ò×qB“KC¤Ö]êÍéîD\³KÎ$C©ŽÏUï_óÕw¬ÐT²ÿ¦ÑCXòñ*ÅÀØÛ² ®|¦(¥¨¯„ñ¼]c®úÄ=5˜E¼ô •0°þè&i‹ìLJ֚cÜp™³9*…]tVfôÖ NÅH4‰…éÛí1™¸~Qq0<èDI­ÚnXÀAäÍà›'gúô%DK˜Ñä—0ã²Þ|ƒv£°¸."=h7éO+kâÞLJ¶=ɖò–\¨ã{¶uò¥›®@ã2*¤GÐþ~ãB UÈ^b;„ÈP£Œ8 +vgy"¤S…+¯vɸ—g»g–.´?˜óÎ pùÿ#¡"TH{¶RDw „;X{z†v¾Å<‰—¦;¤¿jâ½QÊ¢q±Wß;–ñïèFJ!½×»³i;uRYe)K @*AJ5Z…´€²[({BRÐ* +&À\9¶AÚKBËë2¹s‡*ól¯0î.W*u€¥ " 2àsèÄÈ¢ ÙûÿïßÞû% áW/ïyÏáç;ðß;üóÎü ÷à“´ðl¶Ûd¾KÁÝÉîsÑ÷cS°™2úŽGXÉ´JsÐìÈn½ûŽx7ÖM£–†G?x‘‘âgþ-ËÅ~25A‰Ñ„üÜÀW}Ýg>» Oø}á?Gª¬î¯Þ¹§9pÔzô¦l +±¦EÒúl u Û×x.–vR­ë¶d*ÈÍOã¤[éȓ‘ÇÔÛnßijoÇ#.øÉÿ:9¨î5ĸoã +`_/wü®:ù;h¤ À$:‹Üô“™š=z´³8-¬ ãï1‰â§>xmþØ| ÛJí£ë½°Þ+  L<\̤Ò騕»#I”Þh¡DÜ`tÖp´i(Mä\âÄÄ9Ê)ùÇ÷gjº‘_GƁ‘˜UؒT¥s±o½15ž£ WL¨(k‹Yí}½ &Zþ¨Êì~×D%uÿ‚SÀÊ­vD‡8[g4K›ÌCŽúÓ?¥{¦Iž­î¹Žé½ë4/-3x+(ÄB´ %ð7ì;'˜¹íD“œ® +-TUê? žù[¨¹°~§{B]" +¾,îM›'¤£ÑÐÆ|Òï`ß.C¦_5q“€N©”zë„è +0ƒw£½fµÐèMßýÏ>¥QY1<æó2iqŸÇ4öU±7‚ÚSo±#õýê³䇗¬±ð&¯£$ú2ÒHÙ¢ŠÊÉ + +þ­qoEB,fhÕª›HÄ9ÌíÝ޻3àÎëJ(5*Ü0’¥î_»^‰Ñòu—N‰¢tJ¯DèäèêPƒ¥šy® Þ¬I‘ÎD˜·ÏýËü +ÍpŒ™9Ù?îõÁ{ß½„ÛÖ ™Q@LȋÍ;F¬ÚÍævës_a\nJîÄå¶«Fí„Êh%›¢ô{.If†UxAn¹^ÞÂq;ê4 Ûc)À¦?ÀÛ.`~6”§]Mµhâ?J]~PL1³ ø&ìiTNMÚ¶4naÔðb7 +¾|:‡…lU•‡tõ”„×pNÁ ³¬»&Uƒ…ÃACaÃ3êüкdÁn]ðù±'²ð…³!ÑRé?%ÓZOÞEÊK ‘1Ÿ…“G…R :üòÝ+lßWy¶‹”›¤nònjßl‹!,f +ÇÔ[ +[ª7¹Ø³Ó=€âãú otùè³…Žkë`¥ È#=º]A Ȓ +VlŒ3Ý-¥øÈl—>“oäOsa®{°Ò{{þY^R¯x[óØ‹å §wÎØô-q€>éñ=(™ÎÁ’î=op·=ñý.l]=4y;‘½Õ]ÇNMìñŠ1e ƒ(çJُrô΃ÃßøÖÀàãªõ«ƒrí]ÚÙÀæÙà23$ýíY’O-ßÐVrG%·ø©Ý¢ÚX¤äסKÕ%óN“ºPÏu2Û"åe£Î-ÈÏÌÃÜ_ +¬«¤F +ÂÅ`êÆ—¿­.úðGÆ2~ωºõþM!6ÿJá¨þ¾AH_œ•¨/Åñ=›6¿^­<¢{_fÖÔZ¬½9é]o³+ãQð ËƵå<`¾;ž˜ñ„=ªŠòb`Q–=¼c­â^ªÛîËqí̓À<”ËüL:~] oËnc'°:ë«Ç¨Ûx~ü›»§v3"ß]ñ77vL,®¨åó4”9`H’æ3ãš¬Ü +~äK¢ ·ˆUù!ÿgo¤ôˆÑg¡(”©­bN¢ÝÁóB)³ƒ¯Zui:ƒÀqŸ!EÂ`¶yâïMñ†ʓ§øË‡WÏÔú0_#ô[ÁE`h#Г¼©Z-tLCr·åÔÄ’o«¡œ‚׉%Üæ`œ§4ˆ7uaÇ<ä£Ôss~³Ä¦Ktk~±R±f]­oÚ­8Rx”È +6¬TX„¹ ¬ëϯÑY[E²’C³â#VÀ´‚W®XÇ˜×d͗ •ç×\O‹ð—dÒÁ¦D%ÏG<š_Õvбüg¨8©P72ÊV4'[ÏXäwwÕk>”F®8ßöùåÇ1'ª’S ~„}²Ó^Á>mÉ5¬­ +ÂYm¨E¼½0Ä솒¢ mP¸à‘q*Pìç6s ½,80…pCOyà› ü$Ìо²ÊàÀ.„üÁ6 —[I‰š-ª®Oc°4Ì눜 ™i£lµn™3`{%H¡Ù—íœ~YÕ5ñ«95ƒ¾TÜöp7ćܛeÈYØæWÎôH†V±Ö‹@ö)jÖÁ¯f*¥* * hÉ’ºÞI°=´‘¼p=¢@ÿ8”gú]²¼cAÑ(¡ˆ%Ò»_ç$O9Þ)ÈÎ{í/DHR;) ·ix› ++ýN›x”õ-üÅ5y¤4¸½SP$… n— åÝ$͈ ñ¶nœ—ù!Œ©–•'.ñŽÕ¬J¿aÿšou~Ï/&O5Ö±Ó{-ø“¿là˜½Á¿ÑIQœbe¥Et’Íõ—¤@Á³3c½I/¡EÚê¤-0ÿÎ!e[4šÛZD@Iø«nÍëJ0…¥šCRƒvò31˜z`AOyÒDŽB9Bï=. àê ±J½PQ%¨Íáf8‘ŒbS\¾ eIIŸ+›\±å®YÞ°+­»+Ê(Nø Í“§?€F> ™¿²¦ÒŒÌ“GuP |£>Tñ™ÓêíQr¡aÞ·[pIÖ(ÎÝKúyÓ)ÿ Fóy%MÉÉóbIB?™1/•ˆ•™Ä’H,<`˜óî)\Oe¤©Î}y"rÉró©Ãܦ0ö|ðóŽlJÕ%Eѐÿ9Táéÿ³®eÿžpâR,×Ã҇‡¦XÙ{›aKª3·¤ì’# tEC±ð!$ÊáN„eÁ³;ý©]D¡à—MDÞ·Í>Åöñ:¦lí®O`1ßF7dìslËmºü—2Èn؍V‹Û4ŽèJ%3ä"§ð¦¡îoaüÏk‡…Öó÷>uoO6¹½†Oe·žVè²jNÀ;¢Ùݯ„WyŒ¨§„©&Dš1Œpä¬`8•!ß¾N?Ê«6¹^>«llH º“×1Ȧ™7#L~>@ÞÄÛ3|[¢@Ͱ壓7N“ù"œ´DUE$âqJJ™—lRÞ_AMïµ¶ë‡]~AìP42Tð”ócÿ_ ©2˜Š“2ì°/Ó£'ž¨ë!rÌr¦‹Sר[ìn>­ÑÂZìÊ0rñ–Ùrx¨—"E–."©Åâ(ßÊÙ1Oq_šhMZnC×ôU­ezî³Ò9Ø•Ë w)š82f<·"ïrRɑèìÉa%¨½ƒ-Hçjû+Iìœï$ý3AïsÔÒï¥`l‰2¯¦b^X³¼¼žïY«mü¥PaíìE9ö.ÅJÈe³ûšg63©-Š÷´bšhIØ;lOgï êŽ~Nªê2qm/d2°‚çòn ç`R9Û7­ý&ƒ*iØÒgìgfI­–µ$mšîE™'`Ö´]p ·uRïî´SÞ °ÉgÒ4Uý\‹¸ bÊ÷ål9YkKlõÉÞ ûØnàÑɌ"8QAêåÁw*-Å:Ž ·h³dvs"ÌD´z¹ä[Íópyºrðø…†U(¡âGÝEg`*®šŽåU8¦~Ѝ×ð‰Ðd‘ùjüvü«ÞȼÚGÛ·Íõ -ÌI¹„%¶·ï'Å*և­ª5iœüÄçÖÑßQ³Éh•Rur¡[É"âz›ÚÔðQÍf0ö6¹Z·ñ®„ß|í溤¢ÐíK“»"¹ÚµøðìeˆÛsÑ*ã{ûâ7 +¹f’É ÂӋ©s\îÐ0Jó1çs‘É‹òþ¦Q»Õ3¥9ðÌd޲`Ðû>àn¼Þû?´gW¶[¿œû÷äôx†d=£ ý +m“$£v´srtJÙ$z"ˆ¦cà%¯28M8y¯¿™'…âá%ík0iË5´8CEh±‚£× \«.aw-njõŽr>!– +7[’²î…þlv9m¿•PÚæMÃÛºS?Çu_ÇNlªSt~F$ÐÏg‹‰á¦ïWÚ%±8àâxɼeÊ!¶²­ÄÍ'ʟ­OÚgWõ×Ǜ\h©'´»Œ¶ü üdgþtãΝ|yuí +MÛ§Y’n¡ÀŜ.Í8³§°;ϳaZØrÑy÷¨¤,”ڐ!Ópv™PaØ$è˲k÷ö…4–&ɖ“‰$¥ù‘hsrwßÓÚFšN¸/ðûœÁ¬‡·GIe…ôˆ¿§1ìr¦/€\ð¦e&Ç«Dr¹tÕ?ô@›3Ì/ÒûŸÞ§@m ;R—RÁÝ4²ŠBÊi* ã¤Ûë(dÑouE˜1Tn¹‚7EÓÏîË8R5%×Û‡U2‘b“Ý<¶Âc˜ yÿÌäý26Îf Ö9+Áy·ò†jSD­¬}ˆ“¨JÛGú%³šK}z’¸ê̊w.½2v.”`h~S@˜Ð¨yE'VjHmoöÂ0pé6ý¸áѹéë‚ÊÏ)8`N°b$æÌÖõp«-Ä쑹¿ŠX´Ýä‡dÅb•†\Þ>stÌI±á·§Ù$D~O¤”Fbjf°ok,[m–'.wŠÓÖÌ»o®àsõ=ÄÕÔJíaÚ´°³wºà»°‡5ÃÅ̾èÕñÝ>—4*#S¼¶ØÕò$jl]â·µ>2hž[8Ÿ?ù{ïd‹ð3|5èä%UÛ+ÃZGHÇkhšiÈ£1¦¡üRα\—Ü5ûníQÄX Oþ9©ÉoIò4+!a²uŠã>Ûuß²ïø¼|\ƒéMxô{X¹øßj»|;B~҉/ì¡Qâ:âC-¾‰uk¯¯!:øÛ­ØèÁX>Zƒ#úF_øOéU´ÙF躴ÉÿÁ?LRëámt;å9"iˆ=Ò訫nµ÷Go­MºÜöî%ˆ-І_5Ä5ÛrŒL +ß1£œٗ`àWÝ­sô޲u8)#–½ÖУ! +ü<›ùŽ««4P¿R~©ÆO±7Í.m%!l0\d—kŸøÐŽ +i(>w¬~&Ø´`s«7bgYéŸ0ú§;úTÒA{NØÄö¾ÍÁH›í*•¿|O÷¶’ö¤ÚYH/äÖþ¯€ÏlÈùa+-ËhÎ÷ú]àà!M·Äd‹ ]°cÄM×Yý¥$[lGTsݙ' +QõZ«dÖCšIFC)~AõêûGÅð`¿M¦Æ§€tëc®é¶áe‘¼Ååñu‰ïòÅSÂn³®>\]ù|³¶Úå“GQäUFGl^­Û~¬²] È£½ríÃx{òéŠ"ʀްŸ…/”ú{‘­9;R›“xɽvå4…Ze«‹•›l~Y‚""¡tÕí§rÇSɁúü¶K å[R îÁ§‘Jál…PßQvC\–TK2²Ð*ˆ%¼‹ÿRâxw+ÅQx>¤ Ò<ªïwZef¥4L XÐÔQÌý¶ÕŠüeð r[¾ Þ£ ¢²Ÿôþ­¯Ê÷ŸI}«2îÃv÷šÉ†ž[¶ý•%+Fá›zÙé΀}geO¥m%•$u䯊Û|ÝIÈÍg‘sKÎÆoú‘Ü磐R²piÌt?„²bxTŠûÊ9Öðyˆ”¸?éԋ¨2×óÁéWè$³Ñ2FƒçoODTdrÆVu%ÏÑ#ž¬KÈ|É3«ŒÎõ$©dí÷´ìœTªõ/ ¨¹àŽíMyI#4ay³E:ÃÙ|ÎÌïÀC<Û¤cu{g‚ʃDIUmöDd<²/ò^$GâÕùd¹~ßa +HíoĞ‚kêèåëÕ\þÐmKeZ]£–L ëÆQ.ô‰:ˆöënQNqøTæ‹ ~߆ßMNoVÜéàú-’è0m†ˆŽd +¡*çe9{N+ŒÅÿÞÙ\m:VBáž/ðu§#פ§_i·°uIA @ñÿ¯Ô¥ è6§ae§#^±r†‰\Ëõ¿ümQ!÷¿{“k¼| «õ™\s”qSo´î0´ ÞÆè€lgxQ·óp5w?ؼNI& +¢ã™ÖiˆJ&­ +š„J5EÊȹî=òâZµÏ‚&5I蛣…ïDnþ–·æ èï¯íس›pê¼ ì­2e»ç²@¼+ɕt2ü ò–¥Š™ Û~R´,9nfÖ»ö!ÍÔ­DŒ×†´X§÷D—L}=.mEpžI<¨¯ã©ÎÍì/· XŽ¿@9P–áÛÐÐ;?u±öLnÙC¥waë£QE,‹ídeòcƒý7RÊ=2=Aí1éæ:šiZ›+ 1¨š¬‚ŽJZ}õÄu§<1fîÃÖNU-×üÆô’ÆÐ¤ñ;Ž”Ér#EÕìf¹þž9õòê?Àø_Žwþº”è"ÚDqâÉWö”S¶©†)ƒÄŒk¨) +.âwr™kWVó?ØôhœR¢¡›}_q:+¾]ÿK;o«Ûp\ Ò²¥Yºp§㝴£âðëëgZŸ5ÖE/7'd|rQ’ºb.áM=_@Fx½`†šøD#)è|S³ +ô ¡‘鈚¹N‘Ç äXcFÎÜÙ·Óm¼ôä'ûÊ(èDÿYœÿ9Še–la*JQ. ;óN’ýÞ~ÉñÜèr&_þun4x Õß F،w]a™Í™dWSæî”sÕ¸‚³Rºî{ +Ûðˆ(ÑÔ­(5ò±i•Ž$ݟŸHCìÌúŽ4x6ö#P1r Ÿ^ÙV²_uÐ_•Ò«wӊòSª8©Ý(­~¥#V´ð1w\@ØW–ïŠBlã¦HýíŠÚŽ:H^Žé(€Çêvêc©ãHiGDŽHº5á#Œ.úüÃèõÌtšpµü|Ý+¥šxvÓYóK¯$n$À‹"g]‘ÿz<`é>@GÝiɈcñÞé$O5êz©ÓÐ>ŽZ,Ì¿U¥½­±Ï…–9áw}"œ¨—íÞ§ª£L|êÿ1y=Ø1Q‘¹kÂQ†ïXè— Ý¢]ëԟ×,ÉIs¶é^òû9‘Ÿúiè1:p”ý`Àä¨Léò sóJ”ßÜ靨œ‡/¸qа·ÔCî™<ÃmD÷.c¶…¡¼ l3 ¼6V¤à€D~Is¨õ‰FzÝ`½1nþX®~é\Ö +¿–õtãлÁ¨gOˆöä-7· Äd ²êÿb‚Ó8 ˆ;ØCâž@”úp²‘+- ìûã’’FÝJÑË-ÊõKá +æÛØÇì¦ù×â§7`¯ÁjÄÉӃì‹kÜϏ ùZ.õêK£Výî<ç%É +#Ð1ògŠÒ2³®Ÿ3_o~†½AFNz0—´XåËŠñ\ÁçI+˜@ ³Es@aŠæñ©b¹äÑc}+˜ÈžTð¹ƒÄ>P®w0U‰•Ìu~üôbæ%>¿™\Á[ÍÀ+˜Y*ö%sÏê•ÌK«ysëN¼®bbRW<ÀCdtc`Šõ€“¦+¨£s÷E ƒ@W<Èðýåsyr¹æüVW0\ÖãJæ*4ås +>S W< 3 Êæ÷ßMF\ +<®˜µ¯¤z ’|kØ(JÇH¹Ø1+FZÉ£ƒT6¶P’r´Ið{mýÔò¯‹öü£€¿´)–fސ„ÄÎÔÝÖø¶Ï ýŸà£ôs‹Sï §ó¨Zܹ-°'¯?1\v÷E¿Ÿ¬VïÎݢ۝É[çT'Téa”n·Mº+ŽPà7U±ç ¨zŠÃ!x¢°¡»¢vEîYiMÀø/Ãá9ǵÂFo‡HtP|yNí6âtÁ(™¸d)÷¿ÈSî,Ý1O¸œ8¿ŽOU°¤pM¶ö1ÅE°ø„±ÓLåÁ<¾R/¸C¶ÞN `›$…bCÖ<† ç³^×Üq÷ËÚÉû%75ë‹V?‡8Ïн‹f¤û^ÁSïGSé˜Ë¦ó­sö$‰ôÉ©ۗLUk˜+¼¾ŽM'<<«(é$£öH,ÊŠöº÷VôUàBüÈm]×¶MP*y*o¶—U5^Ûhd®ˆuæÐ}ÃͱðNžX +usîÓ^•¿+ Ëų«•µäЮéAÍü #h^Á/^™?\GžŸ ìºeÝ1¤û8èÞ6¿Ïì‚UIeƒ?+JôéžMUלµ,¾ï0¦ .ýqsõξŸ~sø¨Ý­¥é8Çú¤ÃÓÏ"?Q¿='L!—„Š¡ã8ꫀѕY²yÏ8Žì©"rÿšp³7{@E,UEÇA#m墳vÔYxŃwv)"ñ§þÁô““Ѓ8 Ä«('ªòÁÕΚLŠMp:Fú«{äT·Ìu§w³¡• ’Eµ…3e¼&çк9Mc u*ÌSR§Î¬ÊšãåUR‘¹MÏ4½Í¯S@Ycm@És’PªõFÿ¶×—çãfŠŠ™5ŽÎè¿p‹A£uEŒÞöwñ“ª#Ãs]šOÁÅ{œ`š&;ùæúÐZ(¾k­u%pm±ÎÚz +”ØNhlI ÍnÑ'sî‘b–…{fR¯?¶ð•(Ç닃KšeöÔæ‚‘ÍÖ§WáIễ¼C½ -ø¥q#1Q±Î-sÍ/FJ-õ9–Lˆõï"©é3-ëEzdɰBíhG Lÿ‹¢ ‚=r,þçlÁ[Ï̞íæTÔgM¾­ .{`³Q¦Üª+ü#‡v¶ž49/èӗˆˆqUA¦]Xz¯Û[Co«†‹wަ_qê÷ˆµ%jY‚$$öO^Ÿ0éîn©d)XŸpƒ½~ˆ. íE>kgrgæT¸Jˆ8ìâåÄ4”Ãþý²¸Jäý®µ£(ôÃó7‡IÖá·¸­‘‘˜Ê4ÆáoÝøI­Iä¤*Þ+^¯'UÙ¦’anŸ¨î¯’ÝõÝžqôª?7§ÒHüߊ~'¥ÐYÁð0r* DMÂ,7£[èÌV"›Ú&XU)‚éI# +òiB±¬ã©é `½p¹àH±òÉàGÀq›FmÙ(އrˆ»}\®™ã˜oœ:öêù7jŸ…%°SÃh o4ÌâD*&TOtÚï&¤Þ£Po|ÜèáþeÖ›:  ÎлW½.ÝúëGØx‰ | ô09o¦ r&_8¬ä;—&i‹ ü´ ^D 9—H¼˜m"4grlDRTùw¿jß\µÏdß]ùì½K {)³Kˆ¶1;Ån_8¶±o«³RæŒyj„^ì/=Ý_"+ÿs‰²21̟ø¹lÒô8"©O_ãp†ìÍæä¼‘ÿ­ìU®éË¡P]ˈu¡R9ªA¦¶¨ƒ,£M™n'ð=…ÙöùHXL2(èÕnÇ9͆z®ù݆Õj_öQ#GW¥®góvú·µÂ¹]]!PÍçs*îÁ&I©cÖzÓÕ-õÿçù¦NšSá.z˜ü•Ún* ¶íp!áɎQ>õâ:¿¡·-جIýƍWÉ…\¯HŒ¸÷¹öúaðRêÁ`^ÂÄy~"8/·ÕíÁQ¿iºøš:+bͰ°ôt{ _ëa½láÈ©nM }|sl# ñK­ÑP7Õ÷¿Õ¹H¼e°Âà;òSÅû¨ƒ”¨ƒC&òk+@ßY[«ý҆X‡Ãʂ_©Í¥ðfV#­| 鄘½ÿ6Œ:˜½‚L?áú +Ðõ‡›»À§TúDM<^SPÍç¾´Úÿg¤XEOô< +Ü@¼B§™Ø¢™ž“v gAðÁÜa®¼òÎ7&ԗºS½Ü‹KmÑÜ@°g“)MêÝ^ªhXc&Ú\Ašœæ˜7ŠÄÙèíàÛîR3œ©e42¡ +–¤àZܘ€¶Ç@ã?±•¼’iâß'K‡ZF~ÛBýöý|²4I2‹Ü¡ë­¡ƒ.ú˜¨úöFHšÚNmԖCM'!²Ä¤Cþ'D¦?OÐ&âAa£¦#g#I‚÷Ëi„—ÕYƒ4´8¦L Ô¿ÄÆ?Ó¿üî÷ÿÀ}»ÿË}¯ÊB—ýZ[«zˆÝ[_uaÿî̈́Noº´"-ígؕ³œ¸•³ó'Íu÷ß¿ÆãÈÚNU¾²Ißñ’cg½Ò6¨ëÆÙ<öWµÖ‰[%‚˜$Nߍõ˜Ù1 ^ ò͒!{]ãÛ1·“©ïÉ,û¨ÂPíse¥”\Úʉ+P®5õB|¨wӍø½¹"ðC-\xÎDògF˜6jmˆ(4ѕB†Éã’âÊé(¡cBÀ–`ÖœèXÛ¨‡áí­÷5ÀHÙ¼lä¼Û1¸º¤ï$Oð° @~Hۉ7ÖB*î6" àMèà#oþˆYðCә€X?Â>‚JˆÞf†p{¡c]Kײt§&Ÿå§ðX€õ1 9s€¶2™ +YR£°žƒCyD/€ uÌà·RÀþ+´lw8 ¹@uQ²Ë࿯ƒ‹à×liÑ]9Z=#b*#;~Q`@„Å,4âY¢¼¯ê0*ˆ¤R6wD(/´Ä®þ”U¶œž(ùˆf46piym|bL#ý÷¶Fì®7‡q°6þÆÆ½!Å& 8ýÖ4 r¿± YRŸk¿×Õ0ÖyŠm_|tˆk2¢‹ÔE¦›Fnrñ»}ë¯Â{’X èÄ!ïÿ1‘^ - ÕJ¢=@ˆÁàÀ¯Ä{NqëÂc߅}¿ãG³…íD{wÊ ó‰Ž8÷9Z+füƲoǽ2b›ŽÊç³kT 10qê~8¬’t¸*Ô!»qw¢²ƒ“ª)Ôøv)0å'ÿÉ&gÄ|ð) i˜¼®"5€ök_.³ÇY?"ô}žH»üÆ|<[³»N9ýþ’}ýՀ'b6mw!ß1Ƭo-Рc˜ýÁ77ƒ¸ø(V_Íur£Ö„–’"pÀàÈß>œó¬I+3ë‹ç¢òâó±b`Ñ­Æßt=×2©¼cáàõ1ó+‘¹¥:FDÛ»]ÕûŒÞWÌg0˜«¾¢bù2‹àcÅõ,EêýÇNþrÔö 5=€b:U¬qè!ݲúdýÏWJ+gclÓ­î°£ mð·ç†úCÃw­Pzú,ä݁^9ðøLe‘v•ô8èåGü.«w4¿TûäJ?1a¹«àIÕòŒ kÅcï2'_1héY2úž«Û¢"âQ±]ü;û¥°Kàð½ô«`O£VÑ6É1AÂI”–u=ˆù矧X«g×U¦©"Ì*¶Tíiß#a³GÝïŠMâºßgkˆDm†æ‹?džW‡Hɑç¿ô¤- `µR%¥iâ¦jø†ˆ$Âj­EÎAyÁ-:ó§gáˆÄŒm:s¹ûÛâ¾¥ŒW×±Šß£Båâ²¹ý bµ#â¼1b¸ÚšýôŒb¶&Üʌþ¹[Y;´F©vmk:Qª EÉÎüèÔWJóŒW3·§PÛk—(?•Kžw+ïÒâ`;_¾ŒSs¤WF8qõaîýú°àçŠKÚÙ÷BeßîD¼vãÃì,]ˏGÀñìaBÀ¥ì>œ2[sJÝßý økEÎÞ¢¡6ÈnTõ¸/øá¤íØÕìb¿ãqç$ør}Ûÿ}t­qäCð…ð²í^2¿ :!-ƒŸÂ±ƒ*q“n»žåÎö„[fÛ=Fu¥Çˆ½% ªm2Oì%e;‹wû)YŸs××ÿuUeZþŒs^H¶úW˜ë^Û¾ Ï[½~/ø:Êÿםenu•âpl¾ã¬¯™€ühØörðÿ|6·¹!ñ{öðFg¹„нºgŠÿÔhg¯à»i–4ýèHh1l‰ º`ó[„ÚWswa±wÐ샞ê1ØO§’³M+ä‹Ê‚›zÙ—ú°¯&ôÕ´‡ðH»èwU÷ª¾<“æ®ñ[gò©‹på6&S‰L‰VØ-î]Ü?‚ò^rÒ¡çDæ¡äÇÛLžÿû ¿ì?üÃ/áàÝ; ïNÂúœÿS°¹ú»ü–ÿk.m¾þV\Þþn2´››Œ­&æÿò ØimûGø$`ÏP_bõ÷ÞѤìÿffffd 'ЄD "³ÖSl¨zû ³ö&EÀ€‘J$¾ø-# !ð±$†0rª·Õ[µEj#T­Qª8R(µmb”oâÕ3ÿþÿÿ}öd†b¢£kçÏ6ûxïCzÏsÝ?tw§½_tw¥»ÍÝç7³½ÍüÞ¶ó›ø½MëoàS‡KµvÝmqC¸%¬×¨DíüKZ1à#¨zË –b·ç ÕjLðëó4Å¢ÇÊVRÚeïõœ³ûÂ'y1¿k:}Vý}€ Ÿu§£›ïŸ@–ç£Gx½T ~mŒpPÏ'PSÌ0¦:汃 +=(Ù'}KÊ@n¼ê(ˆG.,Þu4$ ڃÁ8+¼êv<öQ»W—‘V¬ZÝŸtvUq=lPՠ׀?¯;-ujЉÜJ0Oßñd¢7ì o>¿ÓkcæU©¡qÔ9}`}jS]oú… ÚµœÕzþyCR–=N’‹~¦e#•38—Jt˜§EÁG0Q»(ݔs…áG:QΔsåùFð£x|2u†º…X› +ÎýLÉ\ìÙ!íª¦`¸²røP?a®l&OÎÝcՋ>Â3®$rÞÝó]â±<§ÍwêÄٟ ŠyEá[ÛäùðH±²VŸëœÃ¼7ü'0ï‹ÜfËMGbÒ$L«+ƒBkþÁ‚Gˆ6|L ôTLH.e—ñ&r%†ŽæW´Ý2Sæ4²±Ë¼«%:»­OÈkåäK=ûÄ'plEÓ+ð÷·L¯xI–W½Eâىc;¸5Úkšü¿ñ–3|"‚Z8㈆Xí~Id«ã^µÄ⿈‘œ°EÆ6‹ü©‰Ãßá,pç,Í÷a,¶|Yfo¹Ä–X;ª%Š^çǍˆ¾>ôk˺e«]q†ǖ û™e»-§Óü²/ù|û~rÓW-ñ?”Ø…œ±‹Í—·šD±‹ÈÀÂg"YkþSg6º.rÌ.fè|ñóËCØÇÈ@¦%’ß ɲ™g€eu‡)Rêš4¶ßñ¥mn2ÿåc,¼jæÍèW>Q”Ï+üú1¾YåeËòÈ”}\Ü>)³;-$´Å¹ùÖÿåüæÏOûeœÞç3ÿŠZ{ØÉV,µ÷ÝA;±™dŒ¯“9`œ•ÿ{|siƾÆú»g™ý7ɘYË5í•çzeyÂ;D¶ÁÔȖ±»¯4þ9·ƒ, ýá Ÿs-Y÷–WÌuá•ó 6ƒxmYè×ÒÿÕü/žD³qñͰ_?Ÿß‰nÊÆÒÆÈ^ALƒ‘~øÞÏýÒׇƖÈùߍ-Uÿ(ìç_÷ìH€šH‡‡Â&7鎡1Õ¦>É"Ÿ ê)Ik¸eàGï$t±íùØöõíþä{êo—o˜o÷cÛýèöù˜öñ|ꁜƒ^Iݬ{vÑíÛÇ·qÝÌ{wQíå#ÛÝ#ÛÝcÛÊÇ·–o/ÝHöñq~Í8»t}職ºš1g*}$ñ_^‹4b®XìÏõè³F(åÎÌñ?^‹4bmC³¼Ìމ–ÆœÌâ’ÔVýĵR5>óMoř ?½ðÜUå¤ÿ3s3 +?3Lr_³Í>M÷ðÖ1°ßl•åºZ+· žáÇI™dºž‡ÿ*Ÿùdÿ˧þa?÷dÿ̧ýyx“»0^éZÈfÅä°'òIýÿ?Ûf}vû=º›;Y±û‡Í~T›±¼rMØßeˆK-6“w6óé7f{›µ¾Ù6øvZi¹á3›i8×±2ŸôÍDHúë]:‹‘¬L> +.Càã¨F®1«^ëß#UøÕg/¨F©»Æ§ß×>“l¾zÞÇ0èw=¢5¥gò…îî…vî½ù\þý7<®Ø$tÁ¤n»V:êb-ÑÓ:ÙÊ£Çmp š/£í¯"ɳ•ìù$5 ÇgüÇ'fÏêNOžw}bï´Â×±¥ ¥{TÚa‘-sÇfö7£ÃÆññP6œÂ%ª8ìè™:bÍVGÁµ›æC¼£!¦˜Š‡ÓºaWg–б³¨œbÍ¥tk¿œ¯dº®Ó¢d͋<ë&ŒYÿ\\ ´ÏEÀ›NåIuñ½~~5ǰãØÆ¸úצŒ½ôñ}/€Ù¶Ì|6èÙ0ÈHlÿ%CoçÖðñ=ÎKôw_‡é^zŸ¹íú¸-N{tjsÿÃC—ÿ–Ž.CI o„Èh\ä4Çt}t+¿]·å0ýdíVYyÛé.½†#'µ¢Ïâ{ooyËã0s™ßßùù»™Ðbù_K®Ây5Ÿ;IW!‡îÒͱñŸþá•÷!¥sÑÙÿ›H§!¤³ÿ{HÇ!§ƒÎß´Þ§/îíñ:IÞ×ód;l>³·ö½-Nû“æzi˼Íÿ+ôáHiÌáf_ß²ú}ªº6~ëÙòsÜ䆠ŽC³ãõ>/‘í3ÉQêt»?ü¿­tgC•Õy¿·½WO×Áìñ^Eûdë/“úOé?¤þ“úOé?¤þ“úOé?¤þ“úOé?¤þ“úOé?¤þ“úOé?¤þ“úOé?¤þ“úOé?¿ÿù[)od2;KpÍ„·ï2èKÈk»Bre‘ۇ#…8„¶ÑÈá)!-²r8²HKZ9çzõXº(ûç ²|B[ºr8³Kv®GaÚ¹R¬r8³KAr8³KX9hÔ%³®Gq lӑŒB[.äqg–Ê9YÄ#hXæŠ:G!ÿI„¶-ț¶¸Kb‰uфµ”w¢Qފ9á Å"Qý"é ~(îå QÝ\‰¼K„³W!Ä „·Şá/åü/îލ’þà´ò_ÜpøKûÐÇIp Ú!/å(÷‰ÖþàN /î}çñÞx/îß|þQà‚þàN"Á/î߆þàB_Ü`€—÷z%üO»8_ÜbR×ç û€ìþà;„¿¸ÁÁ/î± KùGöþQÐýÀ„¿¸0þQý¿¸†øKù“•B_Àª¨ ø”`¿·Äa/â@š‚þ®_čý¸ã—  ?¨_À¿ï ùG̅ý¸t Xà_ۇT€—öáØä„c› ûpêlþÜ:.Ž~ñ¡n_ۇE`—öãŽ4%ý¸tR n_ļ×ý¸tL n‚_ۇD€—öáÑ%ý¸tD n‚_ۇD—öÂi l_ÛC —öÁÐà%ý°t6 l8ð(F:ËéÂþØ:¿‰aÖ û`èXþØ:¿¶…#1•y€¿¶„/â@ô‚þØ:¿‰r ùGЅý°›òr_Û r%ü €¿‰ð ø{!þع¢_Û>ˆ—ò8ò¢ ùG ûa7æä¿”y࿔}_Ê>/㪻…ü£éBþQçÂþ:œ_Ê;¿‰ù™ ûPéþQôáj9â_Ç~÷ ø ¯dò© ùGfòDòª ûP_ÿI(þø_Ê>¬/åXö¡í´%ü£ë‚þÔ:X¿”€/íC“Ä/í@î”%ý¨¢E<—òý!(ÿ_ÃÛèò´ ø{€þQö¡p`_Ê>Ü/åä ùGÜüKP_Ê>ä/å”/åtñ)A(û°¿‰æ û@y+É; ò½ ø¡(û࿉|¶ ùG߅ü=Ó(ü¿´ïü—óm¿€!òôü£ðÂþQøhÑ/à »…üMG_ى¿—%ü£ÖüOMX_Ê?/å´/ã¾­üè%ý˜5„¿”{¿”~8_Ê=_À/9 û18俔~P_ىÁ/%ý˜2¿”~X_Ê?0/åÐ/ìÁ],%ü£ó‚þQþ¿”~x_Ê=¨_Ê=°_Ê=¸_Ê=À_Ê?@/åê ùGúÂþQú!9©ð%üÝ^r_Ê?L/åä/ã–D ùGº ùGêü£ý¡6_ėñÖVþ +¶ _ÇK_ ùÍR¡/å®òØ ø¢O /æ-+ ˜ìòÚ ø\  /æâ’þl`_Ê=ð_ÄÌ\ü£àü£à…ü ª°¿‰—Ø øm– /çÆ1Âà«ÓÊàTð%,8™©E;YoȉªV&ŒãgZ@Q{{Î=ǽÇ=¤{{Œ{JÇXÚH•“ñ+s™Tð(ž@Î@W©Ú—ü2ÿ¶/õ +eFê%cµl=i…ÊàQ`ϞS¨Ëa †W2w˜Rr'-•–w˜ b´Ú—ý¨éÌðÌ¿ïŚœŽýKþñ;Å/åèïö¥ÿ°/ò¾/¬€×ßî©Þ9ˆ(£‹-ÑöÛn§?È>héPñ Ž£àŽ€2¬mNò\Ɓñ äa—þÀ¿íKÿj=G¿¥S xñðRÿ¶¥æ ÄꨧGF‰ê¨ÒÒÒ«¢†_û^ªŠsª¢xŽ€ïÕQOäyîv•í+Þuï<÷"÷í=É=çÞäՃºÉ0®Î߈¬ۜ÷ «Šr#²°ƒE;ÚÀ8+âÚ¤ó#¨Îò£;ôIˆ–¶üA‰^ȓî[êDˆÈw½ +#ŠÙQ:·uø²Q9.T¼Å’5ƒf0³a°¡$Îа–¨a…}0 l‹Â†¤ ó Ú«ÉI ½aè–`ë-b¿²ücÖ`=+Oß +ÒӃi´¤>µ²Šø4zµ¯vÜ¿~‚^îÑL¬\’l›£hªž'–ªÕ­¢ŸZÑôllO,¡{£ÁÃêvžE¢Œî֞MAEzâÜúx+u; ×EEkƒ‡¢¶Ñ-N‰Ñ6ÑÓêíÝÓô»‘džj°Ò´öfUnôî·»U «]å>¼ælŽžË0ۃíÛûº¬$­<­S†WU9+Oþ…Íj¾™Ç|+ª +{ ƒ2[©òÞª"úÛ*}֟EŸEmNWÛEjX5SÂY¸Á†mÚÃFœ¨ï*O•Á+ ñ\\…p'ظªàö0x.¼v˼´_DYÌ 4ˆ0}÷¤<HðoÇÝ>­¼]ã+n&Z žH0¯’Á…wËY9ñ`5GˆUéaÈfšçÄ%ä¼At¯x´êÚDµ WÁ¯üÉs§ ½zèÅz½ìÆe»Ô¢1D†0ŽtNÞÁbU¾í7ßÓG¹Qœ²( +Õ1ô„­“CÇ~ž'Ḻ Û÷·ÞÚiÙtÌí Rc1¼æCöhDƖ„ÅǺ3ü€d-çƒÙ(ÏZ 9«Ú¶Tî´ñ73„ÜOs]‰fÌ­‡†åC“/ Í RÊ3È·ÉÞՃ–÷½»N?·iT·â<ó k´™E7 â“÷©DŒåƒk:*µd¸ÎNçCLH½¢-—ÎÓ²¥Foè酊hýëÛþMÖÝJ 1֟Kàéaév[].×J “¾£»Öwa–YaG°ÑÚèöº;mÚ=揣@s"u}¯—ÛÿÜ}‹ÍђHŽŠNɔ‚¤W˜ïœÐãœ2ßáœ|MË{Ûív÷Ž3rÞ!ßÿ +E?Æ1Ú ûŸ§kôC6ÿõ †mÿè1ÀË6ìÓÍö|£_ ôŠzï ²ª¹IãøË!}ÀÄWœL8Ñ_ð©ÔˆÂ[c }¯u,ãu¶î¢zQ9„/ghH +óo™¿+Å ¿Úg¥ÄþeÉdX¿´`‚@}´vÇCêóbwPQÕ(Հàíôe]åaDaÞb¯|¶ Ù~ +½ðØÜRj!¨‹ÍE r凉¾­ m !¼¶v1oԏ—&£³ûDÓÁj&Vá#¸lõ(ö˜$ Ǐ®w“fžÏ4» +¬NÍViìsxÈ£’ÏšŠ9,ñh–héAXqÒÿ"æ4Œ„ÒÛA=~ ©xó|(´%±k)E°VÊZï ™^ԛf€– GA´¹  ë“`ºÏ¿L÷^)àyg=×ï øàFR=‰2Š­¾ O å2”Æ·ùŒ€]ÇCÿÏÇ=iè\ë¼Br9eùE¿ôEïÆkvݷřþµÜ>:tfô_¡ûÌ›Ü’‰ô•U}ZèÜÐÍN2ßû·ï‹R¿;}í³3£R¼ƒÎ¸ÓÕõþßÕ¼øx¾ÒÞ^߭찝3W]µûÿŪ~Úô‡üÜÞG·_AjŸ¿ìµOùפ“J»×ÌZ§ÀÇÿ¦¾ lSÓ_>bGLÝEò1IGìï¨è՝÷ý¥ª~?sÎ@Dü€cœt=þ؝ *ԕÏàØ#¼üâ镞¤©=`büï½h«ZJ‡íuëy3(íô<,zʲCK•öŒ°'ÞÒRíJǽl=ÏX%xû”á|!1~æ„8/ ²æ,e.t¤Ñ«=ã!‹ÆüÈ þ.•g“,{•ÃKÈî¡øˆ +ÙÒÓ²¯œá-µJqùn‘èþ#°Y·ÞQŠ (V0†%ê­ÕM°vX <ÈµÙØ:FjX‰1XÒ4RÄKÀ&‘µc¥l5ð²ÎÀ\kó+|%ÕßB@¢r­.|fÌPª¢s듉€­öïÓá{¤,ÕÝ2{’’Šçã‘ZNÁ­Î mœ=ïYÚç׿€ýÁ¯å8šìS6`”_k±M]ë±M’Ò_®0 "…o F:uø£?%ˆàÐwÊÙb¥“Á@+’‘g›»?²Ì¼eÒP…e4@žƒ@€•ŒP$(s7æfⅶ0ªp~½»„úÔ&OàÒR„ÚŒ“#œ„ú÷e@$è@/)Gzü-?¿ØÕŸ±€ý¦Y£"÷PÔH½S­ñ•‰­*譇 ¢™ôPûÚßÄv¹)ÊÏÆTþ˜¹õ´KˆàëžËeI®íŸ¦Ð³yD0“;¡æW•c¹•ÝîR†ïŸ:BÎ7­¢ÁþÀ)îp¹G•´)À 5Îj¹rM6<æÀ +Ûçísxž3ú £Ê¨h 5tçÖ[ΐè°×ĺ AagÛnJ¥vlû}Òrÿƒ¯¢Ðù Ñý­‚ƒüº3MÆWòœ6(2óǸa•³Å@EzÉ¡Þ"Ëoìº#¾¿åüw‚¼·Ô´ðÀ õW†L†ð$–×ܓÎ:.Ԍå(~PÖךo¦[ÏT#û'‚¾Ì› ¯ô×(ú» ÚWjÃX¼t%ÿ# ®½®'~­—XŠ)֤ݿ®!.q)}Á à6R‡0PLKB«m&OÉ„#)8ÊÝ¥‚¿8ÕJËņri˜Ú¶=œEREs…åËÇòçSåÏ®c¿<Ó(¡‡ç·Fˆ¬çn‘Qû €Ú}ɾlþ}>lÓ+€‚¥a”Q©Š*Al< $ì³UÇE#ê(_íW d¬wy¶W–$R2Š+„Á}Üf€µ:ñ‰H½9oË(Ê º™þís|‹g*ÑýÙ蕋eˆ¥SÀÃÏ«…ÃÎVôoìðï¸O@@ýrö¹³*¿ºŠ&j𮪱ô@.AÖ*×XþƒkU-DÖhš·´«}[|,Mˆ ¨øŠäN#Óøe4Ú°â<ÚÊzypR*a½c«T[è˜h%0´“ªgóç¥éé¦À 4æªã&a«œ{>û +ör·%GfõåÂXý„³ ô’À•¦úaqµRÏXLwA¢ÄOÄØ½uÕ諾öJʄP„HhŸq…ü<‘éA%r{tÕYb*sÑE2.5\¥Š4’TUôc8¾N]/¿-E(Š yÐÀCØuAÅÁ„3ñðµ¤?…rrÓ_á ֒¡òh”F b¹|Gðì•Yo¶å,öù:¿–FRx¸ºöXó@؈ioÜÁ!­A<Ö£f¦W‡””EÕÀ¾ßNüè%EoØoÍ.¾6Jƒ+2€ý/v¸$ìšק =èƒûÖM*ÑE)Y÷–<¼|UÑ-í&•™B…µ^J¿<͝f*¿<ѨIr‡ÙߐQ£ÏâÀHb"W÷{‹„×lè #F»44)[áC–^;¶Ç¬¬FƒŒDgµ•øf‘b(‡ú1«[^õ›ùèk`®AÆ%²[€ h.&¿wâ›`1»ðL0ÆovÔW½¼¶…¡õšÍcß±«@¿ö#ô^¸í¢#ø= ù‹–«àBø+‹¾a5'~þ dÆs6Ѭö~å£óރ`Y…¬y[öUƒDt +®—ÔëEL`ºKfƬ”4|ôñufV<ªÖ`áÐþvtz í]Þ¿ ðPyp(Þ×U{VíEÐÑ5 ]7ÝßXpÚ"†ps +£h£ó}äŌ”Ë×*§0º-ùäùìQF_ï7l¯Å +Äq”Û½ÂôG·ä¦Ølæûå &X!—`8_™OqÀoc@F¯ÓÇx¢höhÑA>ÆmK+‹µ¥Ñ~Is%èdu¨­è“A© Ïx +ü|»Ê­0ìvó¯+y—顦‹ÇÌÿ Ɛ^8Š¡»ƒùוZ£¡ÃèÁ-FAE::Ý{èšðÏ÷ßßÐ ñæ¯1A£^c]»ˆ$ÖK$)eþe”;ßF5 ,j^N.Œ Âß±ë¾ +“ª}öØ+åúі3wçCÏJ(r£Ù.Çë1n„þ`>[¯†ŠÍå: ÖW ›y[ˊcßÁÈS0&©$Ò¸ùͯò™?Ÿõw.>SÇ £6ò«VüP0¯CS¼ÁPE÷ßu€¤×œ¾+âFÀE,«&cÚÌæ&7ƒï`j¢ä€¤F86©eÅ÷‡Ô¿¨Y„OÖrqh—ìŠð#ªÁÈT4O½/5 +’Y˚h¿VDh Í>4Ǜd´ø«'BùM7ëU¯ãGÁ'õŒøDü_×âæš¥+½\(/ÛsÞõ¢Ú„ö"[ø‹ˆ£4puµôÓ\4¸ˆº‚dú#dºEÌ&ÐPþ"މá½,ÖUŸ¿°ïº êW³ˆŽÐúœ‰ãP\Ò¾ß.‡zöi™€¯ÎV½bãu cBbìaÕîÃVß(À G|ZÚ0Ï`iå5µá6Œ2ß[‰½¯Â5OÏÁþpûäÂ僟#0 <úl5û;½Ë/_͝؛Ӻ‹Ý4x¾µüÜÓUuø§vÈqú¹3õÜǼ€KJ€n˜^‚p$ߍNhöNk÷È/.Êûãòò¼xér½rÜS^_"rèÌ×M˲¼§¼ccNGšý‰îáC9Íחew/Wwªø'O/Ùäve¿ò/!ò¼¦ëôê5õJ驸pýN?]g=ìÄëë`¿ît¦)ÎG›#«?Ùt8þ_¼³ï(»>ú{ðøýqÙÈß™*c“Êwÿ‰×³Äœ„l¿9E_€æ¶ÿc©oõô˜}.{š}c¿ýïדsCáÎ2ßöӟ/E£Äýš‘À Èë 9éN¯ú%77×úVzs ç¯>ËV™¯îêíú¥pú~OÑü?^“âµiÚ~ +Žß¤îblw >‘Ÿ°jÓúê*›©û{ª?˜¬­ô4œ³V’2Ijé´çÿI8š¾XiØ"Æ&ÝÛÀ+žýóþE¦þܾ½&Úoæ$8á‡6¡vŽž…ßñ-3àÆŽ1ñøváû,¿|d‡­>føÇÎ ç„7Si ¢”É¢4ù?khõ¾ î¯{”¶¿â‰W{,‹¥èyT˜[ _É/•$ËYLŽR(^«ŠÎ-fO¡švÆJÓîqÛè.ž¤xúÎUš´=Îþº„ýwÞ¡E¦gU|¦›×|×÷>k»YäÇ¿ÀK²èÓÀ{QÀ + \âð]ú(hÓ佀­°Sµ¼É²$ic:{¨·L›‹Ü}ÅS§ûǶ£Ä»ä^ÎhÀWꝊv7âàSÀ?²é% È¢ €pìpjãÁýÈßþw‡C²´”[58úãÞОàFÈáqa[¿6 l-ôp˜“ H¥‡Lst‰Q`äV1»°A*‚ =ü_eÎ;â‰ýÀfQÁÖ¤% +¡™3–½††$Ñ@VÂÌ/Àë_D×QXúõ—GÖFŠgÓBÓ­eé‚áýPd‚_®¦Hü~r} +’îÙÓÐ"[®£€=±.1²y¨h +Z+…4µ¸ ‘‘²îÞ®ïhKÓùì£Åü7ì(îµ! ݓæ¾BܰÛÉÁ§r1ÜQa†ÂœÆ\ïüûÇq]Éx˜Ú¿ø1ƒò!Œåóϗï6ò‹¢âïóµ,oÌ0IMïŒ;0[Ñ»K04ÿ>–~‘ +ÕþÊfç·l–ìœÜ;¾Cæ»2^êºÐýçŸE¡Ö«=פ%¿*לvµ26ÓUݹïì†ù÷d¬ˆ-1ÓcÞ*×Bù¯ž·¬Ñ8d³ì\ˆ0'UžF„†°ŒñÅ øª'wW˹ 4ÙuÁÀßY‹¶;Â=z}ל· 8n>—p +Ùb`'ñGÛd¶ÅÃ;p)àµK×]ÉOÁ÷¾°(¬ï'ýß±sÀ °2î~1#l’j—š{іúٖÇl·C3’?ô±í&b¶Mù+´Gà oÌS2\|7Æ£y3ð¸¡HEøÉe4'@Í£A$áf‹ÞŒájQï1÷†IdµÎ„]ë>k\€›hÍR3ÅErN?JßÕ+›äèîÀ²µ¤ºpƒu/¾ÔœbòÝ%¡( èÓxt_ÿÝ[ƒˆ¥3Ÿ*–dÛ"€˜Ú^úDµiބ…¢Ñ‘f.¥ó\\ëë,[Ä Ô;Òç!c¶]ÊU$TÆE=œß¸g2Tˆ1÷ϱù-­DÜRp ‚vs°0 ©¿!ve5³€#Ø_ª§& µË Vñ~€vîßÖ6k¢o=0žÁñk)ŠîaúwH¡€Ù)o!Z cÊ©`CU:-ëÑ»øç9ñèÃcÀb‰O•p´¯+qF ,槏~®øÎÖ߰bg V\e¡Zù¬¿1Þ+ËÚ5ŬlŽ)^UjP‹RñD"\lúC¿s½vÁñfkCQ»¥0“¿‡:^Nï˜Ky©1ðÎ÷®Ï]´Yü ‘»ˆ>’6‚(cEüåòmü§¹Ü sü ´åö}#}/BãøV@È7|×ô›tÓ¸®¨„€Š"†ÍûÁâ/²÷Mn8t>3c|éàÕEäã|•pݘ¸TµÕt奱íÝY#ob÷õEÅ-]úî%¶Ÿj7DCÇME—†qÝ J)Ñ¥Ž1/ áè² ÌÏ© åѝæ™c{yç/ñµ‘ð—¾ é "…;±€ ÒôFÆú„ê8<3ݕã·˻9«ë•;Çc°" *i²*µ\M’±Cà™Œ f¼P°t¾íº=ÖÃô:H‹  e¿ë¹äºK†lÐT0ëm ]UŽâ²òþ6ùFßÁ¼F»mUÙsa  +¤¿y5‚M ̱·2¶Q½§¿ºÚ÷Á_6v&œ‡“'¯5Õ븹X?ƒL2Èwv1œ¬œHÜ +/:qAß»ôd[<͇4x¯2^ ü“ìÔnbïN‹ª>Æ»¡ëÚ (¹þI†6¶žöO³ìQ+–m­cÓð9Ä–…žûÚ4¤Ÿë»úþ»¹$²ìIa ÉD‚ìÔ!oâ\Û$ÄPPTq‰ÈÀw Œ É.Ûquw1s3ys\sÍÜÌșs7.A@0ÍPEQ@_†ñåÆ(@Ÿÿ¿~ÿûï®îK„Œ + Ù݉ÙÙ½¹ÝAÔ½Þ÷nÐwQm?gê>¥êN¬ê÷º“©:ƒ©:£½î÷»©ú£6“¿…<=ÚÝ­¶HâyE„ϾÄány¹vÀ¦[î‹}¦,=ºñڛû’  †CªRs°Ã‡ÓàãðR‰åTåiP:3¸Ðã~®„zââ:‡šä@uꩯ”Kî° ºôxºì1½µÜ]]оÁJ0€y i/²:Îk±_RÚ6’N\‹ÈØ>”zØÍïaïIw»{E.ö>¡â'î4Ò"ÈIŏċR,­?¬X‚lØò"Ãԑ#„†´BJ6‰?ك1†‰RGeUÁæóʼÆÌü„¸1b 'N0çI\Ê06+$Å¢ÿ9áðªµÒZž‘´_hÂ#m?¥ 7ÿ w߸bßYIþÓðNÌŘ3Žw»7pe«á쀲A a GS±:Op¨yQ8Y¢ýö*2àzhÏ| báJW ;»p HeRª1z–#k1p8·wVãÏ@Z µmvˆ,€ôR:BÌqAiˆ‡Q§€Ú#,…óK$Þ0¶îõ:,D&-5ãf_,Mà®9† Z~X‚«\+ªry¾¬£«¬PisÈ(‰ƒ'6 ¸Ë0‹)Ū½rà¡§ÕœÁÐN‹ù ?žiÅ׬é8^Ûa·•T™V CÎ y’ˆÄvK–·ÿ‡•jÆÇ@$ðÎ_|;hÀ8µúú·×$´[}ÝòaŸÆ\ùûŸCR¾£¹ÅÅùÆGµZ2+ HÏ|Üño¢½Doݾ®y „l轱ˈÂÅA¿'èñ3¿a?ú«ÿ‚Æ4ÿUeœöúêîóaÐ}}ëþî{ÎmY®iõjR¢–¡ý鏥Œý½Æb^sœÈ;üK•b‹™f›|þ®Ÿ™¥‘iI=-›Àƒ*2×m¤Þ!©Év4@!¼]”ˆEºYÍ}"4ˆ#¤_ËJúI÷sxszMÝsG²ô¢ÊÈz¹mMèÍÞ g`2ۛV(Nö…ÞÏnƒRbÒûýñ±bÛDqzûæŠè£žt‚Gí2<¨÷ˆo°M»^œEVFSf r5–pjà[ϾۂŒ¾/yì4sØj·nƒª®aü‘1eŒƒÿ†1ª“ð¦¸<ÞL8gœ÷•ü@ÃtX9­Y´D  ÷® v…¦93²tÿplÏ",|ÆödDÀŽÁ£Û'¹AVZñzÎà8þUSH{ +Ô×ʄÏcBέ¹ÙLÛ_2",Ø,â¸,‚ss`²Šà§N!=ÜcUÁeÓó ŠW“;-°Ü`ÕÁ;m;€Ú+W‘Ÿ<Ø&*౩÷‚ü­‚õŒyn<å0Uù¤úâÁkÕÁg“"”vÔ#…Ó—,wÞl"S®{®Ëç3kŒ=è%¬ ¢ ù"V;‚(s±%º)ŽÅ*Þ{O› 2µEÀ ?™¼CÚKn×Íú€Î`1†¥K4ðGœl«tü²\w(áèz®êu2®çúì¾o¶SMº‚ÇÍDúØ,vËh;»% /ø=÷u8lˆÑÓàǕȌ â“pÒ[¿"LˆÉ”ˁ é„O1ü @³Gå#?"°ì2(ý½ŠÂ/Ó"‹&­’juºs ލ“¤ºÒ)sTà½ÌÕ÷™[20c+l—L¦ûdU–œ«3/jôL,ö¶!K´¶¡8ÿDՐÿÄ~ý§ ¾’M  æòÊΓʍ°ªô£ÄB¹û Ø®|@ÎLÂ(›q¨#2Y–õÜôÇ}& ܗ˜tö÷"¹îH¨¾ø’žœˆžÿ·s–TÓÈS´A‰v†¤'™z’=óm´ÂbÚ§¾Nucß'{X÷ÉÉ,{äÛ@b{IH6p½¤ƒÏ{>n@Uþ£5ÓÒC£Âˆ×n0i=¯ ØÐ ¹€@€ßÇ,é˜ÐÀå^AëZþýÿ™´øQcõ>?ýèóMdjgý¾¶ýþ¦"ÝÇBãÃÇ3÷ÊCcǤ…ã¡ ñЁy}_ÖÇT}üÒ]Β ogG’¢2ßþ´"_“ßÉþäÿr¹?ßñ+y¯¹žæÜÍÍú3Úsÿ[—OŽkõÝã7)³]gaÂ$>ýeç·²]>9Ƹ#X¹Vú-ØwPÑà}š%ØàDÃKŸ„5ûï÷CG¹gñÓµùTp²ÐãRçî¸Ä‡~5;^‡]õÑ!ßµ%Øçôý·‘†€æn‹Þ0Np«ûíD°‹4ýNiŽ ®tBêÝ0\i%LåPr6®x˜=w ` £/`Î7c4H*-{â·Ø®è“‹­¤båòãØ­@P2šŠþ't>Ã$îÑ´)î‘ÈÅæ]@—u…˜Í D[ ,‘hėÅúAÈrüFtIðe›Õ:J‚«V\¬ýbÔ°&WvMTy!$‚†C52 µõm“±^pâŽà“à/¾=™ó ~þù ÎSûÑso¦*‹‚!q ý˖6ñœ&¹O«5Hаìxô„<.¾K1ý¦MÌU¨îà°]¬C3ébÌó÷yÔ´Tõ +Pzfôf/…Û¢"²QR•Q  #­"‘Wå•=Ӗ´:K²Ûb<òÉõ“€¢¤ƒŽ³7²Z›­`T” Ñû"˰‹lmI®ƒŽ ÝO, Ï(6ŽQ´9~SF€½w¶Õ©0}­]áÕŒé÷j±RÞyB§Ï¬—ÉRáe§î2aï0ïwVã`±"×,HŸõk¾ˆ¯J»º€Q5뚐¾Azé tá$7ˆ’ûñ؎ˆ<_ï.sPØJl¯=¾t»K㱯ÿ¶=Ž»'õø†¸Þ”ôù+Ñý…£ÁÐFµf±ÖVÆÏ§<Á›œi¹óáø\ù÷^o5,|rÃÈ,ÿÉOxr»äT²ÿØJ{À•'þ¸ç~Èõ,{î=K/ðÞõ9ó‚˜t+|Êÿv¥oŒkß”÷¾âóçn}̟÷ù‰µ~TðÃVrϚ‚–70ŸRJ‚.q-Ò&åmòÆU0nBˆç•9#Nõ ++hbF£ðæäݗ"χ(îyÀ[À<Ìe¡#–òèå¡å±‡W÷ǝuxR‚@Èè”Q}®=#|R^ƧÑ`o`Èܖ‚?‚ZÓåí”å?AyÔå0.µ§3nhýfS&5È­ð>žyÙÞú'*Ýùy•Kqà—"Ê&bÉb{]:žÖ€‡\Mšrj²‚w†Ì2zH0,.ShûBæDЋ?´òþ +mê¯ÿJmm2w+TÌýºÕ3<©™ÿ×.Wà“ ÿ—)¸Jaýíûø -R‘u¸çž; ÿçhqå]ÿöï/Éø95qVŽÌ›š¾@mL<-Ÿõѹ§å£}æìžTÍÌËÖmÝsOÇõý7¬©1/CöIkßDbó½oÄOyá!ý„ĝ¼¯9>Ó|»ÌÜ&b`ÀæOû÷«¸Tôj~îù›‡÷Çô÷Èqɉ9ò~ýÑ%¯J”pd«ÇN¼ç ’ÙÛt{Œ)͔†c@q¨D¾|j¾Sq{Ì­Ø×-Ø–â›?~¾þ9._ýlOC¿ëßïã)Çël%kR¸áµ¯r´ØØçzfævAuœ¯º¯é49ŸÂ§ÿÿR»«)Ïp®~µýb˜Ú|fÏ?ýåÔ¬>æ +{úŸ»¾á9ñïٜš§³ã ó¥äVæj’95Or|ËN1³Ï||óN%”çò ª˜êä%›PBiÞ§e¶Kw³¥—±»I5änòSx*YxT³UÁ@‚ÿxIçF½îp?)OëÞÆ.dA"Q‘ˆÓ¢s2äë¨õ"ðŠÈBy8"ƒÞvŸÎ!6Ÿ£±{¡"Îêoñ’vÎe5&„@žªÁI³‡º$¸…7,ğt€Ï¾ Đ$̙s²» •Ný 찇f±¸¨t» Ȃ þ:”¾%“W"]jl%˜aì»å_Ulúۑí¿âŒã¯Ç§‰Ì æ§ÄƊw‹bç[â͇%Wà;5>3&®zº+¯‹pÁ=NúLiðb±·p,31aXþÙ/àD$¡RU‚Òå -³~â…¹·lU1ν(4+ͬdógù•$ È|ÚãܛÊñµª”þÁî<,W›h•Ýý6ÓxéæE¯[´¡æ¼CÙy?íçS‡… Mbi¢â½8r¡Š–,UT\ӌÿÑ ?¹ÃÐmmÕÿF€úHº€:롒lbè ÛL8§Qñ^œ;ëm(⥭ñ\]\êû°R?vóøXxü£ò§.´vgý÷›}Ùá;ãÈ}þ3ÅÖ¥uL¥u4µu]ëjxýtþO ¿…+á\×Eå]¼ý.9ÌÙÐ÷ìÜà›.³oÂ3eù'<¿Î»®‹üKÇìí_wûd?ÊRÑÆdGÿºMÉÊYûž9KGñ‰ŽãYËí¸¦- 7<…$·îï¤Ü, eËRéHr׉ÒoõΜ1B¸cž/\QF”¼œP’:HFEÜH–>P]،Ņ×XIH« (r_R~Õ¸Ô X«•?ÊÄåÐîv âîù’ÖPáiåZZ%Q¯ ™/fáºΣn!å‘ÀÆ-§z’QžÃãè»õ­¶£¯›koŠóÀ@'íMžè¤Fà °áJ …t[Ðdñ*pYoÕ[=Õ±uOÂ-ŸÞƒ ‰A ï…Uà4õ1––]¬þý¶ˆ +*lz‰Ïq¶ˆ(e„Y[g&¹v¡Õ˜L)6)€!ÕƒÕ ºfçEâÓµs"{ûÀµÛêŸ)ڐÓ+o b ¹ûG„N¸2eÅb—ðDÀu C•4 ªe+«×µ¨GÀD +èmÇ:f)….QˆÔ¶Ñœ…ý†‹X ÿP&2ò¨¬±1A&A©í/GýÚ¦î£3[Þ÷ª  oÚóŠÌ™m'Èêi ½œPtŸØ³‹éø“Òjfμ7d9j–) ×VÊ.Uy8“2W*oM<öo&÷¦;%»J;£0ȉ«Z+ƕ™#{ýѕ˜jiäÄ?ÃGHÁΙ“ý—òoJ§L%ƒâ$Yõâ…ˆu:%~vUä Ä[ϸ²šó}½ŸÃ.+à2¶—ÍN«Ü2¹—²,f­”yq_ªRæ¶Êæ\W`XÎå•̸¯HXǬ®eÅ@±™W2â¼ùc1 £ËŠòl­¥Åe.ÿ?ʱ…› Ê<¸¯—eu.+Ú"Cf=•Ô¸¬(Y~\V5øtyqXl¤¸¯ÂF$¸®+KŠú¨˜„z2ø6b.X>u’â¾Å—õh­.+ yÑ÷¥Åw„n¥ÅwôU—Î ƒFQeÅzrÀ…ªDäeé‘ÇÿçICÛV×ÐB4¸¯ì–0L޸ˊë˜Ä—öřÿ%ÅuLm¥Åy6òâ¾ÑŠ²â¾™Œyq_T>1*ÇôKŠß£ÀPñéá֗ €ë+ArådVª ôw' }@Ë5J@háé”ó3}ŸÝÈåm™TŽ4Ҋò]t{à k êA¡F΢”Áv½<ù.0¥Q‚ xÛ¹ô¼ê̆/&Ó#z]$P5‰ãVɼe2ksåÔɸRñýˈÚßþð6·ÿä '~ëk¢snøºù½®¾aœ.¾/å E[ý2ò¿Dë ~0òø¾ˆ¢'ǵÐ8ìeËR]ÿ7ŸýT*?ýåçþ—µÁé`bÒÓáóát|ŗ&UÇÈþ&ÿ(P}ÅÌâu2éè–Û¦6ËwlvÜg³rêþºÏ ºï'ìíþȔhxéÕÜÆÛÇÜ,- oĘþÞô»ÚÈA}‡#½.cÿéx3Ðcno|nô°§öÒ¥ Í·¢³îa&ûû£ F¯zX°.ü}._¸ñsˆƒ˜ýé`53ÍòmÕi…Ý€x×Z£®èÖ ˆýðñ‰©óµŸSï“з&S› Ô¬„‹Üµ2¡e&rjØâ§Zî> +£¤W"©/ŠLÂÔ 6¬|ß0¼Ø#ù´æ +L3E*©> ZÈê”Èlț(ŠÿmgÈö¢|/]yµ7¯|Eñø_ñ^x†ößçÛg^ä{g‹=XO…öљˆ'YÍ&C¬æŸìÓ±ÈÿeYÍ9f4„Û—Ö—×¼¡¿"ÑW{±=péÿDÄÀÿËI÷£¡J6nªº&;ºö-´~Qùï+“b“øP¶Ì1d×% lņµ,²„&bL$ +ÅâUkøY* 0xÀ}©ã ¬Ž¼ÙȐáz2)0×"»ø{#z2'ÈѸÈ͎dlS-Ý{ +~T†é?IŽ&O²”c&•RLaɤû>ÆN°ðåÉ-Û"҈uNÈæ¼ÿ@î·`¢·Ë¼Ûˆ}â×” +G"Tl6‘6"ÏÍ}dˆ³©E =·7 ký²dÑMRB2+jmJÓm2ô Bïj}­Ö¡9_O‹KNïäŽ&ñ0.\:êíÖ#1c•u?_O0¦B¯“Ö؇sb€feÛ3Øî€ØâXHîJ•tñ¶² a,zUwdšGAMý‰«Eю.”Ar¥ðü—S<ÕÐwóIa{4ÁJÑå]xò®ƒîƒ5Ìï%›áÿZ-(›ÕÑíÿõó|Â@a®’”ß>ëÆ•ÐߟoXSނÍò}Bd 0õ{öuEÈj£Äª4­ˆg§Ö fÝOH¾‡ ¸saëHýsŸ‘¿¤´§™6¼iv¸™4›c<ÌK\Û<$˜kâ@hSkÖM¶š@Gë*_‡-MMM¼Ý66œE[°À:²õâ›äzíæè‡ì^ùõI”¯Iþ±†µÓ +ê¨XWºªd“m4”Ré"mWÎk¹L’[ºãnà ŒѽD2FÉ×°…M¹¶°a$mÖÀ^lÍ l™ÞS\þ¹„&ÃaÃ+£`•Uhú&@Ù2“1÷òcn…FEFŒ\˜ØØŸg s!ûed´5TÇõôÓnêoþ#O"–#ÌzŠO¨ØŒcr0°`ËJÀ[°@k1¯­°! ¥4òüÞV´ØÙ¼9ޝúL1+óxìLžw¡O@;«=¢} c|ι} F;ˆ} e?ÃThZk~”þvr¶Ñ˜°¢ÚMíî·& :n7‹´qZNþ- Žî‚ñÀP7œ0µÞ#†ÏËóÚ:œiÓRP©÷RKˆ¤=ŠÑŽ~G`Ï%ôê˜òԍhëY$x/îÓq¸Ó›ÁXª‰“{zÆ5TH§à‡…Uþ˜xZUQ Ÿr +ª&¿ÕÖa„áÒ:«¿§†¼Ô9Êjº)1@`À¾xõTW„æ@œ9lC+悴þO¡7ŽoC è„nÒX;®õ¿×Bô:‚ÆóPg°6³]`ëÝ0¦ÌBÊÓ/dž¬«•òžçÑ=eAYö¼êłPº¾}‹ï_|ÃUÏ´]vÄ [2#U¡Ñ–ºK »R¾ö+\¦·=5«:ó—ËH©¦ÌŽùk5$Җ˜:»3}æIþÍö½óý’:̇:!c`pM¿ÇÍòØ]jy‹1ñ`k'“/ÝcúBñMV3O /ȬhŸ<^)šÉðÖ`·Ècæð•˜dÂVØl73YÎ'Ö‹¸älÎÌTCs¢Ùï ™X?7½Íè_z/¤l!±6T䨐"ëï¶ú|—dŸ¥¼&YtòÏMR±¨ŠÿW¼Ì1¨ê|¾õFx3w +3Ás矩ÞÓE4aûG­‹¯´ÐÉ8‚­Täóid߬“„ûÞðC”ƒý\$ћ^•S·¹Åâ%—ë ®} ð¢\Ã>\òæÛ¾²ˆ6¹À‡ ®\‡$®×=˜y¾PírUÙ¶´‡û•uTL—j¨‘7ýŠäþ˜z{I¾x=çîÔÜG»‚>Š0؞:|Ð3`>õ6íê÷gÛ·#»þ}»vŒËnٍèòt6¿ïfô|ÎïVƜ Ä"éÖÓ1€Ãè_±K`«¥@3¹åȐ)<°¡¢ûn¼-ñÔ®ø™³õn†©ˆìí´+ÞÉmÔ¯GÝI/wu"Ý<5 3uD,+BÔDÂndötˆóÛç\o¼iý€ûü›dà_°\@úV* Ÿ\­Ï?ÏVùj|qÜ(s¡ç´mArÁøÀ‡âl?B-ð†ðü…æüs+…œ þí¥¯© £ôd~¬¹¹h¬¼ óD*~ V]c ›ñb²ù‚Äømðb²Û–3O!s—dFäêH\Åeù%ŒÐÈ\ÅeéËz}¬V_!m—ÏHDŠËíK6œ—ÖÈ]Ee¯$ ºŠË +3³ßŠËõÚ\EeÿE¢²Ói+/HÑh¬¿fE¬ º‹ƒ¦,TÒ$V_rF«ƒPÑh¬¾•§+/œiu—‹h¬V]èM[š8fŠÅeÞFŽúD/ËßTˆ¥‡Iù%;¡lF«Y6dfÝÙFŠË±!Ã:Eeú âEeýâÌôl¢EeëÛEeèYÛÅe…`fx¬¾õœx¬½úÖÏD{àŸb¦i Dà µò>Ê»ÖA÷ó%J <©aöŒ†À VY}ߢŠ6¦,ÆäWÎ^b4á^á˜s)êÊÌÊÂzïcQd‚+ܤi@Ýnê½ÖšÑf ïƒ(uÚ1S«,ô¤¾Õ•±žÊº‹7ôĎ®«oËÛ¯à•ëySm€ïƒ ô\œ15ÏEßW0´w[WT_Çh ¾€€\bñ4ŽårPs"€J»LŸù°º×“žjaVY¹~nLÎ_zmÀIÕ»‘'ûƒzÿI¸ I—`¶ÚímrI5丙»Iöݸ 'ib,ž…—¥Söâ³£©f{6ŒRòº˜ìûïfi_ø–˜pË?ÓgýLAg(վŏø#_éXñc_ÿÎtÀmń ÷c‰¡G‰”¶Î²Èû§GüL1<[*Ç 5®Üw/ö!Ð9]·h2Æ0焆¦ìnõ¶ÓyfΓ -‡¦®†Ðކϊû'Qh« víÆ½›m*Rb‚£þjOà mqÖx± +u÷’ +rþ"+œ=b¹ÆUÀmà“ÛKw‘\Û A'oßdÔÛUҘù5Ҙi#Ÿƒ¸ò§ÍoŒ¸4qãkÕYCÅcã°U“‡waÞG»ø_»¨äã²þ=6¬ûÏú#lÿ®6OàŽä |ŸïúÛ;s–M¾ŒgY¥DûÇ? µ)³sÀš]g¸šá %õ=†œhŸxêÊÄq®ŠkûcŒåJíæLµýô×Çfækã=Pÿ·*xã9^4q˜$ô{ie¿wqÆ`²ó¾À€Èx$o ¥€±”¼™ÿwt¾ úrß"u¾V]íò¸ìƒååJZß0F€^ÿÁcÝÚ8à\ ûðÐ@+h‚€ÝNð²ò¬6Jû-$}‘ë4Á)‡èj‘gÚ|ì¥&%¢V\‰"›¿„õe?Ü7“TŒÀu×"·¢%¡ \Ó²mÐU'êÞ§“]oN ,f³XÄÐ +¶Óyi…ŸRK…Û—åB)ݓ€óKÄ ©ÝÕ¸ñeÎjÜâ16¾ëµo¾@™€ ¼Çù»Vú´eø²=Å¿jÜb¯g1ðÀ¿÷ëhÿLP4ts×ë˜ýqc:‹ôxúÂÄc/×0/ýÙc07ë˜üéc_®`_úrÆC—¹Å3Ǘÿ7~¶þ)x/ì‹6ú2ñà_ýY{¨üȐä<½Ô þZ_ÿ—¸•—Zÿ¯—‰ÿ€—ZþÊZ$ _¥,D9^.İzùh/üܹ@¿àeց¯–ã@¿‚ôsÿèË+ÿi*0-»9e`_éDÓN£òe‚ªaOØ-•4‚züQÇ˰^V4 þ,±€OåÊÿG-þd³:‰X/ô’ÖÐ/ðï¶ð/îe•˜–ÿ4>1üwßÓ,Kî/¡gÀ‡ùürÞûÆï›¬S¾o´¾ÿ±y#ˆûïK,ù¶~Ö´—ò´ã§¾íÚn¥ŸÕ)¥öæ†ÒOò/·´ÕhÛ=ÐLSÖ,uô²±M& JCú£µ¤†Ž@Ç@Ëê°™ÚÏ[y«CéÞ9Eõ¯Š+⻫ÙʬÆ~L~ áÇäéÜóžNØfúÒoŠ,RIßw|jl͸˜X¬x€09õ"=üvÃÏ»¨Åó6íïîæÓš"3•¢¾D¤#jlð1ʂ‘ +ëŐ™¢zÁ ‹nªk¾8f´I›†ÃhÂ>à TÎd-‰¾¼=°ZjÏ‚V¶sެΖ8ÌÁwq«½’%9£±ÐńoéÔï¥>`IrH©«ƒ0ôûa@ÚèÚ&{bÿ ×­wh×G{Q ‡ÊæÃ?“W5éG%ׂ®J÷meãqçulËbôFú+¨‚y’3† h?I‰÷X~c™*=è½.;G‘ÀvKÆFj÷£aOÓ5yv 0B໓žÍ·Yš¼LA! +‘MÄ€~â(´ Ž ø?¨ØŠ_/å ý%ËXs”žºD¦Æ*‹ÝQ®”hÞ˜- HIŸþÁÖö]ÝF÷V'ӕ¶•älQÙÕ&-Ö y§Ü‰ º Vš¤rxô:9ÑIPSÖ½¢µ ¿ÃåkD´¡Osì3ŒC É#¿»ƒ” ¹‚=·t÷¥¹C§[¿Qž‡ë =pŽ*ê¶¾5è™íVhc$ ßù!Oæ"ûÊ_³z&¢÷§ÒcdÔïå3~i¹LÕޔ8q%`reÊsÀ½Zœ8˜ÆÒ.ìåOÜ0;©ü¾i¶•&Λiz "3ZHÖÚW‚'2é oÆ|؄”Û­b[`yzdOS ú†È:) _ÒÀÛŸºF†ÆÈ6Hã3ÄßQÀ‹>q?³-Q™ý†bV-ûš‹³;»MdV]­Ü´$Þ+|ɟvô!g¾ö7ûíÝÝ[©-Fê@†Àz؇h†$htZƒtz›LÁ·Ä`ØkВin°`7¨ióÙ'N}$¶É#޹é#g£ciÉÑ  ˜6Ûi±¶ ·ò5±€ €~ýûÿï¾ÝKt6ØÖ9g¯uô—°mÄìë××ö õÀ·Ýp{â\«ë›r­¸×2÷®g\K‡p¯ðӀë-¶Ý$m½ÈX  °”•M/7Gú('™²ªÑÄ©Š¼ÐÁ¥âPAëÚAë= ¹k_Õ¬¿c0÷úVa÷@è{{[*™1KËD{iÈ'¶ÊÅ4zb@Y€ƒjÞÀýcÍ<$6’›|éþ 2™Y‡ü ÞöúÞkÎ{0ÿk öäoþD¿ÞyÓû½@EvµîÏd,ÌCÕ:Ô\è +r¿” ]ÉsÏu­ÚúYéGüoW?àR>Ä£ÎC#§n+€Ì޶ ƒŒ `ËK¦ê`±€ñ¸¥€;·:ðc 5Dp±ßdéÿº¬ùªŽûY+…GgXÌïòl¾ˆ¬Ý©(|ÎþòE0‘þÿÊ«òŽ=ïpÿ’%ìÙhG*҂I\°YðI£€D½äg25Žç±ÖˆúÏÇZB¹¼£ßC¾Î&™>q+´JÛàô϶¥‡ÛAbüdÜJ5Ó]]G¶,e2 å"{Æ -ù½­G˜d0ã­ 1ٍ w!Z±áZẼº ª9ã‰ê9†Ä¾Ë£«òäªÛ‹?Ó«Keè‚Q÷°)dä~Áþ×´eT,VÎÚȲªFb— +<¾ì§~µY`—T€ìsÛ0ô–ž¼›ŽãkÍùÆ×›s¹šð•âÁyq-0p͗2ñèaŠ(n¶@Ñ\«ÔgC·Ù³%”˜Û+Kºxó3g<“·]gÏ»O“]dxrcLnLuv¥C“O Qä$ðŸG¬´²aÑb<˜“îª%£ìma5r]T9‚Žp+@ +ŠAŠ>쉢ÙúÁ % ¹åe’<†oå431rȔ¹­è|›É1U$;G«”x+0ËCMÁ$£'2×§ô ´^´y V+¹ØZ[4“Žš$æi̺i¢NDî@m¤pOÒ4}sمvjM®k¬¬`E}‘ŠW) E?¥‘b·€Zhò£¶,V°"¨F)tX¯ªBºKõ‘Ñb©(AÑzÅñb›„WC{fb®A*­³Y+hÀ¬b¤"Å`€³4v²F,PvbÖ1‹ÙP®ƒ½d”X¬E AB«.b€Š@وWXÊ,POÙ‰4½¬g+Ç¡X*É8±@%¿‹QôµҊ yÏΩH±XŠ¢!‡E BÅAŠÉh±^â<¥.Ôk.Pâ@ªÿ"1Hûô¬¹Å‡ț æ²^,= Cà܅‹ÔÂÎ`.rÁŒ ” +êäç@cf‚ùPïÖ¾fGq(˜BÈ7S ®ðFŠI¯ +l>ØJûՇÃöOM¡såIÖø–œÝrÔ;MÈÒëåϟ•Ä +Öï"æÿ…–i´ÿóÎéñ”;–ð@ZmbÓ.´>/½ÀÚïÆD™¯ ~ÒìÈn\õ=SM¨.¶…6ŸvùÒKßú$Ԕߌ(ÂíI°‘b寮 !Ôï¦ô͇ój»¹k­¨÷Þ@zí TF\¥A#õÁ+ÛXÀ2ýð“êÁõWA±2”(ìHØ£jäJLÁ'*0»·.T=w Â¾‰ÏH©²ÒA$Ã}ýÐn°™öýÖÍQÀ—s6Örl¿€×Ê7ÞÅvÕrÏ5¼Ž¿±o÷C+æ1jéÙÜ~KÉ %2òï`͘¹‡$ãßÕÍ££˜B^ÿFîNÿËjT¸;ôÊ\ÿ›øîþJ:ÿ‚š.oû|oüCãy®Œi8ÿ깫~ _ƒô¼S %Ò6×´‚бùQ²Dc0Šç¿ì¶öz­5Ý+Ö>£ÆîõŸÔûÆbV0˜è?ü&+‚uœdR²Rî«ÙxQ4ôú²RðR…·í¥9¾ËÂ`¶X®.ú߅‚³âÐ\[™—Ôžçð{/ÉÛº±ÎÚéü‚b¾‡V÷£ò<õ¶å‹¬(ÓP{vˆw£@¸%œÆ¥XßAœWŸ{÷<úô-aùÚ'd IåÔ+©–bë‚pqXeU´09A:6Ú:Œò´vDÑÔDz g.!ú׍r0.êMˆ²ï·ËlT­áGΎÁ¹ú™ˆì"×¶Âzž÷RµïåGú©î•Ø[¨ œÿ(IJª», JŠ^Wçs@ǂv.‘ÕÝ(`°IW¸¨OÕb Ñ´h…ظŒ*©æÓð%Û½=`=ZM˜9ŽÜ|*ŒR¨L²  ›îÌÍ8Òìú&dª”ŒÄ2ŠÝÖë„!xû™wPA6‚,A<ØlP¤1|”>Á +8X=;à>5€bÍ +›&ÌÖ(X^€•™ ҟeY [‰PìP +Û(=„Ð@¥Zò‚ݽ_ÎYðqEÐ/ÍùþƒƒÀ´xÌV TxˆðU §ÚéDÝ€ V#<Ç‘©‰Ísx9…W¾KªŠìù =np{Ûá‹vòí\­î1I9&‘ø¡|à(Ò0¬™f[y‰›  àfq ]®oŸOg±B´!1Z^„ð¼þw†V:„<àƒLÊâ~¦…æ,…ú ûj҈¨R/ûiqì¦&o­"k9ЏOàô@Ut³d‚áøô`ÿԂ­ƒ aÅAºa؋JÉ:‡á®A‡ÖH“׍¢ZÍ”V“O„æÕ©¯38°X¦áéæ"¶ ´Ñ+þc„§N^‘n<ô +3QòEë†dýëù*fÈр²ztÐâÀ(%ë‘ìs;† ¢&­íÑ+O®èšÖrÛZü +©å2%êr›˜¼Ú$órV5† +Ӆ-’V§.X–L¾|E±-+9Œ®ƒ6²EïJ–W°‰•Õ'•æ¼ò ¹t;ÎþnVÙc‹&Œ›yširRe$7k ^_Ñ`tQ™Ë ‘ŠÖä»a+­š‚W_F•Ö œ¤‡8JëéÉUÂã+ñ¤RO³’ºü¸ø˒XVž(•×(˜•×åc¦‘®jz›´/¶’ºmÆÐè¯Jêo"t4ý¶º­U_MÓöAiâøåàT?S*/Ϧ‡®[aݗF»iԖð‚,µÖ»Ø™V=%Ñ­Ø,†³_Py2 aš[&孖bö"‡[â`hsةڎÁø| '÷¸1õ.Ê£¤p³„âW5ÅN÷[`¦5W©!Cz€äsq4œÍznfº å.ð½sc(ú(&KT¹w{~P2㰊äþ2 ¯èACŠIƒÃ+ d…¨eޔdc?1&+8ð2˜_„TT‘P[/!«…„ 疳կ!Ei0ÊŠQRï¼W*÷W’ñ:¶PPÌÙصwÏ,‹>"Ô°Q[õGTåÁ\˜×vÆ`Î8Ú» ²”\­µs:’ß%jö®ž(€ A¨¢"(3òzè¾®³ô'\Ñ%í2ɗn$aŸé2u’ÛÒ²íÉòÛ6 +©‚Jðr…åYÉ,¢ï¬g·k"ì5¨¡f 3õÅH«¥Ðþðüpä»Ñ֎‘éÁ»—0@°ôº—¬ë¤jšœ~•`?ž–ÿù®ëŽÿh…wý!BÿÄ£o¦¨÷þš6|@›L)¡6baM4Z©?ÚJ#þaI?Ó]ð…$ï—(RNIáOüÁI:õÑ’uK¢$þ\†¥¦ +IÀr×P)'ô +ãòî $ô–r‚’|rÞxROjI?t³–“ö‹m‚’|JÏÚ“ŠóÕüI?*°Oë,æÖ ×$£ÿgô4©ß›E÷å{¸Ä«.'Ë咇#løé)^:ånñ™$Tã¾q’]\¨U|ÒOïûB•ÿðÜxé¶ž,¸¬‡aäüí¾_ö[ýËáwóv𢿟b±Æ}ãXÇÏbÁ¥Bÿÿ¸T†¿Ï±ÊÒÝ~}å ÇZß/L/Æ&O¡A¯ŒÃÛ?¤á{lì±Ö™;v%¿ÝXÖOÿCßÿñ4þȏ0YÇZÔÿÄĸ욇XfŸÙsfŸÀ‡­“2ÿÉü3Oêˆòã¶7ÿâµÆ´°¨ßÿ×4þC[ßr KW?6EØôZ«\a^æT°Ë<Úf©#õƒ•·›ÏàX¡A‡IS8À›Ù‚ £‘»ƒÖL»ƒ×4IA¦‰CÓBF¼•‘)ٓ84WÞ%ð¡¢LÂg£²þÓ4ö\Í]\ÚG'¬¯‚ë•…@$ÙÓZ€ÞsgËxFT mÑ}`~±cž²`¡m'ªÛ!``Œ* —¸Jeӏ&†7d7"s“FoF€úh˜q—•ȏ61îõfQ+R_¹g M„l®B†È³¶¾Ügܟ°€:d¾ÒL‡bY§Ç>•>‰ˆ—=ú9€¶O >m•‹©&»u8ÒS´‘ÑT'ǂ{'ƒ ŸÖ³ îúýƒ¨ Ó ªô#pÀÏëÑÔ×à™<¶d†€¨³@1.‚“ÕóxC.³4ÉT KsÏ}V„¤CC2ºŽ(Ì¢mÙwI?4æìs얃<¯>û°öX*Qôv÷µkÞ¥åôäÁ”éfZÌ>ÀX3d7ÖçØ¼ k90õ5ËI)¹´æBúÑW+1ŀ·à=XKJøå\ÌõE‘ÇzÙ6¿¤«eÝᒐø(ÒbVŵQF§^éÜÀÁUö2ãòˆù&?óa1þø&?éݒ£¥6²¶fŠá~„¦A3 A¤ýÕ"29ÈåíÂEá:UçB`-8Í£ [®NdǙ}ü“ –õ@4†šq™ +¡91Jd*5_!•Wç&«Þ’ïH#ºþA„º®›ºdàO ~ÊqZb×>©Ÿ$wq¼õÖaèÏÊ­Ë—]vŽšðªE¨ç÷FÚ ê§½»£×¸?*µÌË7ky<Éõx+´ôz;ò ÁéÞÈïq+VŽ‚{á˜` sûÌXš +¾ˆë¼Œ^9šj¨„¤y,¯¤nÛËsÔaNÛÆ÷+ÌgЬôþÍ09ßnSJâ¢hü"dà‡FÊ«tJ(rÊ«ja ÔF‡h3þBW]ò”š_´ Zj½Y+¶ +=e!wNd=ÃV·fšb™JiŠÄúñša¯CꅯكÔ=‘n×vö9¶ö½kßî4"§¿^„𠄾ݲªÀ +÷'pG«ã>w +~%ˆN8M#È竁dÓê•%D˜HßW›v‚‹x<´[ íðþ=¹p~ߪƒ“™h;rQEz;ä•>½„&ˆXÇɅ·á¨Ñ T„‘Wgœz¶ðX­nS.ÞE«]÷žî§:Y¨I`镉•i/-Ðz–o ,R¶¾}^~¾}aÎ T°›J†Î8…–BIØG(3iR€VeètI)¢ °Ú:*BˆØgÀqÈ.1ƒ©[¼Õ, À6ú¥“n3M?/l´”Å:öÌ:ó`GðÇä ¨ð´ «[“>Öëûwu0\OU…:[s +Èüè—u‹bš05ÏdfˆØÉ\á!Ö4BìJ¬ûÃM‚Ÿ¹™³\–*NÇJÍtÈäco}Ÿ-åúEóoõáß6öQ/›óo˜‰|Ñö¥°ÏâAõ¥Õľmû£_6ý¼;æßξmú[{æÞø¥óoÛóK0¥ón2§ðy£|Ûíù·V]‹ñ +T¶È¥Kz5¶¶k^˜£6‰ß6û—Í¿Ü,Ï։|Ûù¯›zn5óoÞ©|ÛÀâß6ôÅ|ÛÍ­ý¶÷\’ÞE½ÖÐu•˜…›U‰ÛÝl +V³‹ouØ ôý3ÿ®aïý“ýüi‡ÿïËNƒtš—ξrïi0ÈWþ¢>¤È:äÊó?ìüíX GÛoäé4«âP}ÙvÉÜ»QÉvœG Åߗ,×ñ%Dx³å.Læ”lÎhŒ[JˆuŒþ]¹·GÎgâŸ>Ü«ø«#ñAô¥1ãRт)_ó[ˆ(RoÿùWú²ç>·•ŒÅtÞ+qØaéŁ֩ÿøÁÓódú¿ úÓ`6ؔñ°ûÔbòD•Ѝ³ÊŠF£¾úUXb¾ˆ£ˆŒ¥Ü¨YӃx&RÕqRI2úD˜3ñeÌy«é…U1`Ï;²ÑŸۂùJôʓaÀÝj=¥Y£5ÃøÀ˜2MÜ å<Ò½\ëÓ½]ñè ò‹? `ïf8º4:²{¢JØÌ1¯”KßüÈJ㬜M­éF˜,ÌgT¥Çj„‹Ðqo-ýjïâ“ó§ŒëýR¦ cù!Þ¾l£ñC½|‘Dtœï]ÁF.ä‡zÿ0£‰øÒ~r­[ȓó÷ˆ³õþ±¤üüõ±düψëøå›f8¡Þ¿Ø[ʓó¡ h—=nëâyáÞ¼ç ;×¹¥'çuˆëñ)'çç,‡'¿^6 +Š;éÁé +﬇'çíoC¼ú “óûk9²~}ݸw¯ôÔõÿ0„Þ«ªÔõïdëßKë¨ï^â^{2°}' +Áô}lëÝÊ3æ&ëàbzçg~ˆëðUœó4¿O̎èÉù’•dD“óó•[>¯ùnúu|6¯¨WjKÿ–ào çIý¤¤ÀØÿ¬;ïÿ _‹"§²- +§+îHéz66ÀÊ_ú½¾@w¿žCiI/Æ%þY$øþé ‰Ò`Û4¾Šñ˜½3ßû+ÛVç´û¹ËpÛ?}éËäóŸü²/èN9¤×ì²/óŸÕd_ց’QÿslfÀÁ\ ‘CÍ£‡íúŽmDR~ ¨¾¡¸¬†Ôˆñßþ_ÐÜ9"ôÄQmïÁd_ƒpC€z3øöEû”=ÆÉý ŸÞz Õ×z˜1ª‚à q\ YÆ ®pWp·îË~*a„›(I1.TWÊo ß5( îQЎ(œu¨ÃÊ<¨¬qòé"ÅðËyb¸ÂŽ*¢Å͖/賎.C8«Š/øgGˆQyVƒ‹é–. Z¼&»Î,]E:m_8]ELšŸF.ü”êò iíÓú¹åÌ煲„Xη +•Ùšæ àÛµ–˜c1X•éTw Êáž?Á̾܅f½Éþ°2Äèý4&oïþh4¤B´-ã Tߦ¾[èO'¦^‚×çt*ÐöE¯Úڗµ ^±üƧ ª$ÑNÊ{Ò<žfZDU;gpŽ3æ©×¤G€•®éa™ƒdڜy'P5Ó¸tñ»ûKëÙ`ÿ^žÜý2õx¾h²µ½"yežˆ¬Ó^±BÍìãÇó· \áiÛè®McÛÂ8S/—9âWBG æƒS5fÙo¶«‹Ÿ¼›åÕêÕBqWqÀÌ AVèÛI^¬âTüw´¹Ð¯˜…¾²ðñTý±¢f‘‰›¶‰x Hg”Gû™ ”žÇ¾¥ª:¨‹: d݁EƒEA…R™…SÌLŠC-„㪦yþúąÇî„e2ç8Ñ!Âm],÷†ÁèRC¶rBÌlÓÁT+Ÿ{À$‹Ò— õÏ]·ø°uåp¿]h^7šÓ#Çæ/Žšës·ÌB7ö‹³ýä–˜,`ICqK£¢ßjwŽÌœ» ›"ïA€÷”ÙíR;<¼$"ûÞt½ +ý¯{#›ò–†wšœ– S„±6ËKbiX4Šµì´¸#3xûL£_Ö]@½LqZþµ®H×ÅΡwá‹OҀz…°z¼@v¸K‰E£íUYLG!¨÷ñ91„Á:´s¡f7ÁvXÆùü¬^ ÕÄ,b5R»†Ì´·29˜´|[…Î?DŽ-o°´/¿V½±·vMK¥±X,«°ûu©C!…Ý2òF¢„KÃj7)ºa¦J˜É´¸™ j¼ºŠòKûuŸxý­ì•éé*Ôr7äjy°jÛU…ů +HðrhHDãN}î§¶`ÑZ…eu‹û¦”à!µ5ŸŽ¡;ÿû؝ÿïIJA â}»ù7òÞ¶Á½S·òìw©$‡z±¢¤èê„+ +عƒC&âAƒŠ¼ƒ8R&Þp`­+Ç×rkaW\UÝ ØsÖÎ*úåPǓñ0†Jw FOÉœV!äߒ\:ûÑD´:„¶ÕÙúô/ñ7 +ò8’ÞØ­)V°7†ñ£P¶¸CZË÷ëªú¡ V¤oê@.VýC·iא1ѕÈKè?ðîáñOínÍá_а6·6Ÿ„ øê;å¥I²ïâÇq{/çwÿ»‰ßþí/6À 1zÄ ¯±‘ZM´ÇG[û{Ô¼×ùˆz›Ók~6³æy±Ý¢öt‹Ct­éKt¢j)âfØûõ{CÍî¡ðÏ/º7´5ÅÃ=Mõ>ð÷…í n·†Ûª°a|í¶«æmÝÇtnGGÝöªi¯yÊóŸnØâr™#Koë7)øV²CðnaøpÑîS𬂽¹‡áçîGbÖé#ÃbÐC×¾'ð*¹ïÑυ™yµ ™wÙ/g$’¿|Ѥî$¬ÐqÒáT ã5>Žô/Ž™œåC†ºœÈ€—„¤æDÛø’E–}}¡•Æd¯1=$‚=¹Ð_Àž.¼äDÀž:õOšü<žìlžK“ï/e“ï;nOå›'õ¸¹?ÇÒ]ópnÀ¤ £ïž%ІYx˜–[Ò¢hì‡I Êø3zíuO£õSòªÊí>ƒ-ZܾEû{ØË·žœ•ø;+iÇ9þdb e~¶ÜºȆɦ%¢å1,íÒÄRY4âBñóC B™ROmÀÊã靟i€­ øxŒÒ^þåÑé¼7âkn$¡ì#Óã¢é‡ÌCÏ%$7Ur×¶åë˜!÷¦Cß½lȁNó%¤†/ËCÓ½š~ºlª @ö{´öl?°V޽T;lUDßÀl­kÇþY˜b1[FØ´œ8–†Ty jP‰ÍC‰lèÿ1à(EìÊ3UŒÈlܨչ£)gXô‡,—Hp&‹¤=^Cü}!ívÐü©úÛaéC¤‘”,ÀÍ'ÝE.àX}εÙõä¡ 8™„<}ÄOžä6¨!“‘¨ï—jÎçl—˼MÀÅ*xÈ꼒˜–ˆQ–Ä{šF(ì@*ˆx}2KÇ>^vèxÅÌ/§Ôg2ÿ4<¼ƒ-Ûõt)šéÑõÆòT>%„ºô’“6QW|-ñ {÷´i¸ÿßj[¨Ñ =Ð @€Ô=I$–€0H½Ót ÑêÓiÆÜ`ÛjcCTdM¶õònD–͐“œqô¬“œµÞq"7NŽ"±°Â¹ÀÛqƒckäh›MÆ  _ÿý÷Û»º˜rËÑöK3ºÜ¹rå½Ùzöe¹|våðß ÎÌ·/‚ú/–úïŠþ +ßü¹ +}÷º[l¶ÝcNÆ«1~GJ‘Wò$’þó„DŒ“QË~ö_ÿ¤<¿®´W/þÍ¢¹ÝÚ_ÛørgËýüʙ€ ¿Ê›/÷<ù²ÿK4YásðòüjؗI5ÆËù¤}Ï`rÿ—÷/ù\æÌŸÍÀW‘çÕR%ª;³Ä ·;nL?8mȸ‘ÌVY^}>‡‰2nþèY›YZý‡Êe)ϒ›Tp½ÝNæ^f¬¥©oç´‰TáˆûA›7&'åÍjl׽ŻYƒk`8kiÖìœ_W%ý·ƒ.—æ>/ÊÈ,Rü­ƒ"—æ8mË} ›ûSzµI‚Æ+ªœ_…§äϊм­'år Ô಴úÍ´Ç`‹Ùe +Óå´2}ÏÙ¾ÞñkãꀮžÝrµÂ¢³dÁ52«9(Z^†ÁDúƺpí2tnSVÙüf:”GÙ0D!`Ö§ðö{9h&çÍõméÉÖ8YU™^û³ŽAì¡ð"8b¸¶%qGžÓU™½£ˆÑŠ[ÿÅR‚y4Á½¿ë =ªPä Ó ôÕR5VfDµÑ„`-Ã¥và(™þHÍ¿÷…±œzVTlvM˜¡²m}Y²m~XŠ<[ˎ8n?™qǍǪæ\rqöœËŽô7/2ã^7?™qÞÆãc̸äFãà{·—ðn?#™qóƒq÷üˏύ÷2ãÞ ÇÔs.>*W_»úÁPÚÿ¦çŽ7¼sønxôwÜH—?3dßJŠ»RsH«¨¶UvZµD¹®wˆËb’ÞǏ–ûŸOÞߟ‘âAÝùiê–Èß³¿j)oü±ä”û8“!—‹t9œƒõÖEÒ§¾›h삘ç ßÿ/Jž' +1ä’É^6|½’¼kTJóåÍ©Ù-’½Ë풼skDªðmBJüÌ@ ÙÀæãð£ÑÎâ ¬àQ߀´4Ö_*¤D‡lc‚°úZ‚ØFŽGMff©‡ M^eŠ?Dc²ÓЙhÛÓ7è#áb æV·Ô—éŒi¾Ñïg¦©Ú‡¹¨ÆÓl£Ü}€R_Êkæè<˜¾DÖ¾¹K[Ú÷yèNÓUõRåñR")ñòÌÓ쯈ħ9X\UæäÌOНê+Å#èúŠñ\nTˆŠ>7¨ŸñPg׋á¬ð„Û¸1çÂI3d*9õ,ŠxþMŸH ¾Œ[(Dš$Keñ͜[,ËDí°æÜß0 v’Ì̬JȱȂ¹ÄZrtžaà„ÇK»+Ó\¦Á|Ç%|Ç#ûã|±A3¤è¸U8:XøŠ3ïuûieVfdÓ¡¶G`:t£àWõ¶Fܤ…ÊbªÚ¼è¯ý­ò¼ÚÿS|¯U~«|\”±ÞЕã4õ%–²‡Õ_ÈY)Õ_š²¼ê¯Š«[gõwñ ·x|ÞþXwÃKF»úÍ£˜ PGûLÍãYD¶çn‘Ö³ó|9|ÿþ˜åÊ>à˛dqlÕéî‘ÇY\óýÝà¿Ü> ½ù¸hx.ËÕý˜/ | lô"`¾÷Õþn„Ÿ«é+È»ô‹/6Æa¡õUþŸ¨~ŸŽÝ›ê]ôTÿ—g?_é+Ô¦ê}%vYÑúEÁbŠ3dëZŒÕj[.ïmë<Æõ›t{¼(ê©ÒcSÑH­– WR:ÀkP`€^Ái¾ÿ|_2xÜ9˰Ãà#@Ô2Õé–Á^êBµU¤ÆÔb^1Ó¡óÇÕ·NÔ*š£ŸqŒ5«Y…SvkA«7̾a^½âw¬3T›nŒÆøY»>´($ê;ò]Çð©œÐâéí\ÕL Usý3j}›éôË©b±M¯áÖnCz®±Ü=à¨}Ô¶ú C´“2ËÃôůo6¦'Ó^ù-ÃT8DøøýéepžôÔ²ÿzAÿ +ë13n;Øv»ØZÙS]uÃùMsë´e ä™\CÓ´rúBÖÒ|!¾pÄc™˜À2†]ÎçÝ €ý?%ä U ù?¸ 4‡~‰¼ãò[–§„À9íAµ¶6j¬>j£ôMƒVæÊã1seíQ&‰sT3xU?•<Úî§ œvÔH(Th Κl*ñÏÓ5#ɵï菥âXJÏnzdšޅØ;ã˜sœÚß(Už/(Äÿޞȏ6ŸÂbÖá.ŒOÿ¸*š3à1?êbOë1?û/ØEœîŒbR^äÆ!ãÃ1y&1QâÖcöX?|Æ!èp± bå bf Lbæ•LÆ!£*©ŒCó¥~#‡ìJÃ1ˆ|ÿB‡Æ!Ã1hÿ»:‚x[xF-T+å¼3Ž| ZXWðùÔÚ§ÅQòÖ~8W9VÙu»˜5•;ÞÝÓÿe¼Ú[¹ÑõÜ}”sy¿)î*,$’[J\Oƒ7wærâ€Ð¹Ù¯4p°Ät±5åÑ2—šxÿ6ÌÈ6Á•$éUÓ1^AâoÀþSFþí5M“jÎk+Ø+™Kø3›míú˜ +``e÷ž=h¬fÜ/L×ϝÂïá 3 ¸¼Ï§4û¿Æ9JüéÁË¡PØðgçŵƒYûþi®6/ò>Aîø†èԃ9ÓIJb§“ üA1ì+ü`ëû¥av–ÀÁlÀ[”¤°&¾l%¼Õq»W™6{_%M)àŠªü“}Z}Y° Yˆò1ši°#‹Ì„^Ýuˆ¥jKb.ªm0çMúïqæÍÖ!G&kŒXß>æ`­3A`]c¬Ÿº&,n8¬ÒŽlČԼ–†Ÿ†f¬Íé?EoLŒiërÁBGrÀNmC´éÿ°!òùbåû…µ(¯ +gG(ŸÂ¥ÛÇ#)Àj,éKÄ–$a^–´ÁX²LÚZ¿)®þŠÑQ"ûàFtüén²ˆ×öo$;—‚ÕV°k3ÆÉÄèø`Ü'àcøÂʖ†àª–Uú“þþ(·.яóJáՙ»lÔ \)Yvèí”27ðŒzßdé-¢˜ÿ>à,¹@¥èF޾ÎrÚ)óýð²àm“篸Wz~kª„Ž:ÑɘO€ wS†Dà ÝJ2.ÿ m·é¨tZ^(·ªû[ÞàÙW«A¡ì[Šj¹Í# +÷Bªú-€Íìb2sfæ39úý¾J»ÎO|ý(eWaí¨Æ%óž>6ÐjAæî§Ü½öõtOöØœéƒð$±îD §þ, ²ìˆ=²øóQš·Þå  !ß æ„31‹Õ•dÁ0¿à xxC²48é‚'ÄAäXw;3³{μ산ûbq4ü¡V,âµaxk@êP²lÍ+çì‰zâÓº¬ÌÞò‹)ڃR;|s b9s Ö|RPï‡YôADæàÐïgjŒrPׄ;C½;aŠqÍ 0S¾c·ø +°K…•Бz¼S²×¹M|'´X£p²,GgFx‰–NãNtIÄá«V È< Ÿ°Ï'Ã;;v&}ƒ´­B„íÎà¶sÙ,÷3KÉhÑ噑B×Ë$6:dû(wv¤e€.LÊ^ÏdŒ¯fPkÖv08±üàÇòÄL¯bæÕúx2í«ú82«è ß›Wç ɶ¯ËÁ^Ú¿7=µzfWÌ9¾XpµçÁt“äz0‹Ñ¥³0©•ëü­©^¹)’2½scð왤ïK(A³K[ÖZ¹ñ‰î7 !éÇòð9QüÏç ܨ‰rïîI&՘œ‘aBJò’ÏåˆËØ÷x22ö1øèGÈ`K¡á ºöò¹Óp`Hà¾6}ÅXc2oƒ +7WÀ{’*!ÁCàáÁ±‘ü5mz/ß³J𳱇`ËC„ ÿà{Üí„àxQºÉù4ç'x!LÄèU ìÔ2ÿïËåùXô{•¬¾:V¢¾Þöù)&4÷ºÇ,VVz¿‚Ÿ1—ÕuC¢b_WÑ¢ó³OÜù¡×F¬>¸XbyÍfÝÈ5^+ñÛî ØE¥dè`gpbeãÄ¢q¿9ÓVTËÀ]/4Θ{`£¬µ–¢·ƒ®è9ÚcŸ\»çän³´&/…f-Ò°üxãۓ1Åà犡‚V÷ìLÇQ3MNf8¶R!·×MjFc‹ríÿQù»#1Åї¸øh–LÄï]â˜ÌrÌ;AŸ*ý£®,à™_Èr„hŸ¿NPÄ¿!rÌÇۓuÊ~ÖAχÝĵßwðå­Ì)låùúÌhÜ3׫Šc:ñý"9Œë• +Ó¤yҟ‰L†mÓý¤h<,箏J¡ŒùyÆ|Ø®LãׁŒùíLo«~#óéy¥‘WðÈ ?ì[ð?Û²Á‘Z1¯÷2S™²˜ÿöу2+m–߇$ƌ^Iyšð¢Lƽ°ԙ ešIAh‰Œ’ÉH’w«SÊLsÈZñåF%ø£Ž”à ÎŽ6ÅZV6ñÿš–5b@ …³°_‡jÅ÷÷Š›™ý!0½;¶¸a_€£G蚀ŽoÁ{r|·`؇?ċ¼œ{º¸ÿ— ügÀå–%q;Î@yÑqRėÓ|—ЪSíøV+)äÛñÁd[À>×ýT«â×ÛÖ>BVA@ÿ6fû`”Y=†—\>Ãaå]þ +×u8‹„š?ÿ5·Ç®‚w”œŸõ²p-ÛTüˆžaª~DMÃURŸºéÖ¿ÕägàÏ¡ûL¥ߟCö™J÷óè|&R¿þ{¸ú ó™<þ¹MÚ¿.í]üC'ŸýÙä?Þdóêø¿é2yò³È9“Ïÿ½$î¥øÔ?ÿjHÚò) ]ý4>Wÿ´ÇÞ¤ÿÁ’‰D”^mÂëW¢‘öCÁ÷NŸbyX"ö¥$52 +HkbT³°Æi!Žf$1󿦑ö}écR>ËKªGÙåËʑöwܪGÙaþ:GÙôÿÉHûÉ?8´¿ÚæR>þ +î‘÷…0ïäR>ýN +î‘÷ö8+ºGߖÁ]Ò>ö+ºGß¾–»¤}á<üŠGßô%®éx|¾E#ïk-wHûÃáÕò)›+wHûÁ³ÎüŠGÞNϑHûúi[ºGß=+wHûãåné~êRî‘÷ÖÊ]Ò>ÿܔ»¤}ýT¥Ý#ïÇÊqéx+g+ªGß¾Àä}ÿهHû—‡«Hûôxt½¶ÔN_¥#ïÆIriû©›wHç8<ÚD‡yHð^×6‘!ü4‰ _ÑÃ'!\B2¡óˆS%ÿR­ßæùj„æ“GB)5{P›Ñ!—AÊdÆÞ11Ût‚Œ#rЈH¹0J;@”þ>…Rtbcç҈XåëS ­r`•7D!6¼Ã”7®!Éâöþì|îhú½(àuÙy­ð‚@.`C”¿b!7çKÉù©‘æWz$ÂÖ©ð>„BOÿÊ>`§[ ¨ âfúŒa}pA5®%¼(ïëˆdétÖwI×[sG¢"kŽ`™Ÿ¥T. šßFTŒ}D¾yìb…ÄSá÷e5p²Âc–çF˜C#5½¸„Ú½ Æo¨M˜T³çÓe€Ú„×Ï!pM€Ô@qíÅDŽÔõbChÕe‚èiŽÜt·>0Tì“'q ƘªzaôZfñ’Ž`™KF!TïMïRßÎu¸„– ]?ôÄ#ag¾¬‚‹z„Ülá#ì#œ›ÞÆ&þq Á\Bq6¢®0L—‰ÄÕ>:˜l˜è¢É­É9ÃèD%ý¨ÏPä\3ª:DÂÀ‰ñ¼bt§KÔ'G°‚R}»¹\_F(5Lƒ6/¹'*q‰ÌY®iõ½MS«Ž–t¢Åiˆtþé +cács2³mB{6‚º/çKf{R êùёÈÏÉ)=»Ð¦Mþ܍wÆÃ' aû2 +{ˆNP ëF2~é+-„ò\Ú{GaüóË="_Ðem‚T³ôcÌMûãÔû’n¦rxÖÔi<˜€óÁ™¸˜v‘mw“s„tQa›Ý¡9Î1<{B)<{¹ØÐpŒl¡S!Bâ´¡¼äïLÿ”Ö¾êáÛt Âþ™øÚ Ý]&Ù^ӑ#sòÝ^ÍvŠ“Éx[7ÀŸõЉ¡ËÙÎ{†5¾%žÎs^'ÙÃÐ\ä8“¡=kjT§Öƒ£-ÎÇv—CñöcƹálϺҾÌ{«|Mš÷7(Ÿĺ@ì©ýÓŽ•]·êm§iHu'ä)U/ÌÉio2Tªüÿ¹ÎFºÄùþ5ŸI O†Í¬Yò>&[·í2Ò-¶èŸ™Ä‘žI?+ŒOÆÏãKú„üϏ²Æ?+¼Øîî?- +N됆PEM¾_•´^'½ÕÏ +d' ŸÉ›‹ž6pü&4‡Æá_ø¯ùÎ6Ÿh~Þ5öŸ³'î¸ßÿÅü\sÿ§ ¨P,ÿ’Dï.ù•Jkæ6d›Šý¥Ê¯÷Ê\ä]fn®9‘Ý>踓 ÌÅãwiqKær_ù°ÆÏýdÜÍÄßÿîOæUàύÈþÒæ?“wÃCi¯ó”1³ïœ"†O9qÅß9qÌÐq[qÁîӑ|éJ¶2éD+nõªñ‹ŸŒÿ,*æ­V¶ë‰ %Î-s#U‹JøÜ‘d¢ô%3²(JcïhJcI‹Rp¯8jüÎ."†;$†|CU‹\wXßàÁw™yk¹É¡.–CË¥òôŠµÝŽñ]ÆÂgK÷Jî¾êïTfj%ÎÖ;©_º±Â$´øýüÞ5Û DÞ?œA•$*(¿ÆŸ8hõ\7ɇXï2ëòUõ£çy408ù(ˆùßâ$Gp‰RYýø?¡;f÷Üðé¿[$w'@²üjo_É%÷d¶]T|Ïx¯žÞßP–ëX¡-`j,ᥒóÄ&1øÔ&4B"[•WßóÆÈþe9W‹ë:ýæ¹SÅXj÷”â%I¨”%þ¥„OðŒ¿ð’­?õS˜?æ§+ñ¹ŸþÇ×w‘ŸÎÕ¼Õbùï7Ï»ßk=å¿Cw}Õùè1©·ÚQ#&v“\B÷EÅ(ö‰5ÄïÀ(ó„×=IG (õEtQôåÀ’%~~Qõ…Œ£Ø”vÅlQٟ”v%|QÐ>O¡‰}eùGD£è îŠ>è£ùãÈrûÅÀ£¯¾O[(ùҏ¨(ùBgmžœ£º(ù⏤(íŠ>¤£µ(ö%‰GD£¯(ú{ùîºB§aìŠç(ó…tQõEÈ(ùâek½GfL­?Õw²Å7å»(ú`QéJ?žQÛt0ENçÊ>$£¯(îŠ=·DMfÓ(û¨(ö%XQüº(õEˆQô…ž ²<£¹(ìϋÊ=©5¼»(û®(ûƒµ½\²<£Ø}aGhLî{ð +9Úw¨(çhT[âŽð£éÊ>¤£è +>ø£Ò”v¤ÐÁº2ª(íŠ<–#ŽHÖÎIFÿy¤BJ7¬i’ù "Q»V‘ (Ú3q (ݱã–ÄΔrÁïg¢Sµ³ñ )ނ~!%;}?’÷sñ )ÙÚî‡_ë\xåñ+ó­bU½X„•oˆIVúŒlBJ·¢ÆÄ$«~Ö6!%[G’­ø¹„•o‰ˆIVÏ'ñåñFeè"V¼ BJת¡ˆIZÏœ’­ð(bW¿<ñËÝiq³~Hšð–´¾6¾J!%›k’ˆIfÖäøúæÿ̏þ>ÕÇÝÈÚXO×é{ó’‚?ê ^s_f¹‡¹ÍVu\÷£ŽqÁ³çû—øÞâ‘Ö£mÒ`³y®Þ_r–ƒ€ßíw¼Ï‰õsۋÄ7Oým¯à§ïñ•˼`¿'ð÷>m¯æÿ¹¿îoû›þæÿ®Zèhj=6 A3Ò}Í?Ü}þ œ±­•­gZÒµ­mkj×U´u´µ¹êÝn’·OZú¶ª·Q[©­Õ~¶ ­¶®u]G]K]ž®ÐWi+´õÏ«ª«µژ­AsÝWo+‘®µ®¶†ÔÖºº [m[­]®—WžÕè5gF8|À”«¤ Ù.A)Oý¬ô­þÆloÂï>яy§A–&¨!›À4²×¦Ó™4-°>?»¿ªññê!ó|—ÿÂH<ꌟ÷â^¿Z7É`Ig’ˆØ&¿ø{½~Žt‚H<ï¾Ô°EMmMQٵ居LYÊ(º`(:OcÚs¯Éà†AdßÏ&lÁ½/­íú*USr!+Yýt»¥ý!Ø08è[q˜ÍçMBuç‰| g šßѤ9Ÿ–8葲§#ASó« +‚ßVáÎ33|Ö|ÆÀÁëadZ¡7ÄæÆœ˜Që@ÚDþ9‘rÉäÏÒ\–ìi”Yègö1[—ΝMïÒ[·†Kza˜™¤Ù†¶ÜSj#ž#¸ÿ<Íï™ï¡7žà 7{:HXœ³9žPYx\Ôé(Xù ”4@»CþDì0cœ-¶® +f~•˜K Ó4„ מ@׺ï„Ú6é5æM:à½uüt5Ü▴ÛYÕê[`“±HpÊaT±dxgA´«¬ga×0æ)òü¬@›SLÉyßRr$‚ñ§7KqN°‚7=Iç:¬Í6œ÷§×ŒÂ·D¡.ru.Cg§›?¹lì¦âåkõÞ\Ú¬¥q2…Ó“m¬úŠ9#P»0ݾ²ØÌÎ/¸1gggéбC›ëÏÈ|…=6(&€LWh&Ód˜™}ñòˆü•o5–LU•›¡ÈÊÇ©Þ[µæ%‡¯ø++£2IšžF„¢j +’ÑœÓ1³3‚ƒÒ°±NÇ+ +ôì,J‚v)€Ã(hø“:øØó3×ìiÝxïHBï©-uYÂò@csy׍wqâېcq¥[á›È”\Ô)A3¿ŽÃ¢Â4ôµgb¯"’ Wúå‡ôJš’÷XT“ÝÏ»OA–jg“Ýg»s'º¯v4ž§—¤÷¼Ž‹'·T mº­÷sálC> äšÐsWˆR†£5âñ¶ôà"ÓPêûÚéëîÐ?¯*å죝Ã2ہwE)ݒ± s"Ÿº:ü–âaÿÆÍOe²AÑ7â7f{®âû•+î ¯»5/±Q3”J)ƒÆI™Æ¼~ J‹ ¾ÑL÷ùyînfJ¨ÀnØs(çɝ,olôÑôxPÛ¬ã ÜÂg!˜PŠGÙ'Báa iSÞìÍ:«}P²Á€˜)—ÕÚãu‡ÕóÌ;®ì`­¾˜ùñ>¨]´7Ÿn}Q!®§¨}Qzž§zú¡}öŸå>¨½í)ôª$]Sõoª/–Û)õ×â2QôªvF÷šÇ6ž€ÚúkøÔ•ͪ=P„Ú¼¯ñZ7‘î;ÑÛš‡¿¼«ïE‡Ê·¢JL¯*úwPY‹. Ã¥÷Áå¶cåHPt±Ã¯ÐÙòsûô +¹>˜X«óÜ /’´oøUÇ0;dW¿å³~Ýþí» ¿ ÉK§þ몲nô«wUz¡(¦×9êÅõšüOA”Éiº±JKì¬ðÁX@:OðY?0 áFÖßråÿNÙ¾â_¹ôɇ†ØÀÍH£Õ{ ‚;x!¸ìÊU¾…«ÖIZÄ&p¸æ9@dJ¥gÏsØu~œtí‚pÁí }˂ݪç{LRg{§ÇP!wí¶Îý½ÀЂðýÀl³cš€¶8é§o„ƒg· ñõÏöé~ºÍèÛ»wB€.÷!p߉:‚ z¦Ùˇ’Ü˰Õíõšø†à~îóû ÞmßüÌÜðç#JA5íàf–u£AìîևÊ9Düþ#£7EIqL›ñ¿·î:Ôþ¬'¾µø0žHp˜3XÓbßÛön|a<3ÙÑa/¤l%‚S—)Ö`ÏA®TCéüŒEÉÀcÛ×ßv''û33$Ì!ì "B‘¤vÀƒ¬σì±2,j +îÑ©il«móYC1EprJIŸv;uÛàÞîêô†ÝÚm¶ÚUiu „" µZ£ô~@X?¿ÿ¿}™’I•EÖù»Z÷y½¾^ß;Îó½.ó|ïc|ß_|îïàfÿûÜïà?{]íw{öž½l’[¤¿»tÁ¾ÂSl^Q®|úه·ëkÃÖ½vë—òæ‚xO“ZÅ=®å;ƒ¤ëåq~@âÝ'ÄÝ v«Ü'‹þXì¿4€_%©,L–ù-QõækkägÛåmSjä(r8¥—6]rWëÉ>†¹[HÂߘ0”ŠÃ +k•œWÏä^s¡‰È¼T6…NEXù᝭¼ÌáϳQ4´Ïš’ÞŒcÈ@«µ»c¹ +2‘…ÚS k诛§¡S+^Åñn½á0ðýæaÕ©—²'B,*ŽI±Íš c©Ò³ŠBŽ¢¤YÖ' "c·é~ÔêÎTÝ,Rj–šU ”—ŠîvU“ÿ{.ïâeäÆÙÏ] à·÷ÆÈÌÞm±?8½‹`”Ýúͺã6:%X=úóË´Lèzê\Ö$ÐÇÔ6y¹Õh|¬Ôª±t§9%âúÿ*µ$„…'ÑAÄoè*‹À¨¥g§dpå‹:ÿ®TZ‹”Úìõõ8VÚIâ«´BQµ2 ŸT¼U‹âZœƒQh_•Ãÿ¯}Rª³ñ²ˆ:õàã¤!ØÛ'llé+­%i tõÉj‚$k÷RÕXÒ'Á³SH¸ ‚H%3»pÜÒÃñŠà9zÞÆ’žºƒpþe$~”‘È}üAÅÍ&ƒfæƒg'‰5V•nÆ mªþ C·¹fÞ/Pº…IÅm™ ÷´¥rñj1ÄF+ä﬒Ñù»l}¥“}¢¼½öû!;V)ÕÝÂÚĞWƒ¶ØÇ„ÏÎO/5}As —Šñ Äßd(¬bÁ´æm ^ψ’!ëÊú.q}e ±Â.›Ðƒkc§rŽÏHÖ<WLLœ-ÿÛjÔ¨tGĆh6´toÒA"Q–R_³+ãÝúÛ}#x2A3øW¡*†¦ÛÕÕòƒ2wªìÝú› Á'9lŽÆ’3|:ƄìÿÏ3ÎÒ9ƒ$üÎôú 2´tË,ÉøÞ¢¦‡"#?øìO0é=æÈöšõËõqÙ5jhèõ'@×ñނN¼ývúl÷,Võ«õ¬@]DfÜm|r;^åÜÂ~üÓÁÃóǚ}ûÏšé“[ƒÉ¯Ƒ&¹åðb“^-Õî>ë=®ö¾WŒxÒoÂÍÊ® Ê¾8ô±4rÉR,鄒Ó*n‡¤‰ »*Fö*%Yå#ïЛçpéVWå'yÕòS ÿÃ_Ðâdžµ…»ºh¼!<wr¢Ûqìã@CèÌè·4QfµvêÃùóÓQµ,5B,Î|ô?U´ij‰>…+Ô>#X?Edè*SÌ×P·”½ÆÌؗÍ;*ÕÂñH»ß`è̞:{ˆì— Óc ö\)5\žÛ÷—·<Ãf0ŠØ'@:^1|GX¨Dž7ué×Glß{<Çz/"gZ¼‰:¤OQ8^“ÈÇ;WùÑ¥¼-ìH)’Ô?„±½„äô$=šXšÇ;•±bÜt•ԐØé°GÍ-é>Âk™îc”/Ý-PñäÅ¥ëÞBõ' Ê/ç -PéŒ3ÈVÎàÞM?Zåþ°ºÏf@…ƒ(iè¯Z?wTFüyR hóΟ­‘åì]î'}Kx„þ㪿}©¡ÎyHž¼9ÖN¬‘u†‡=١ϐxs Z)&mé +Á²©j«Xž6îvwaCkfݸWë±Ð›s[¯gr3þmË¡ñã¿7BéÚò×Xê ð +˜öé ÑýKŠö/£ô¹„…ú4F½×./»¿Õø+ҁH“o"Rµ4üCö3”ÏL<µÖº;,Ù …µò^@Ç¡ë<¦µÏt‹ÂS®4Á ËBôî&YÚ/³µ‚œ¸ƒ’D—’Z­az‰xð?nâ¼1}ã¨^Óí–nÍh/6á Éõ•.,˜vˆêÛËÙ|{q<‰¿RvSÊ>mZBpƒ(òú€å}IÈÂcjy܇ѷbò0_!a`´Õ I9qÓpÛR'f‰†‡u&•ÒZªðñ‘íÂDXeû%@^^ÿD£§‹ )  +áËô§rÿÇí~—/­yÊs¹¢$êºÞkÑµÅr¹=häޛ“PüŸœ× ˜Bôß 1þý©<²B!ÿ5å¡£9µ€¤L²À¹ÛáŸ:0è0ÁÜtý¬Ÿ7±GGÞHwså}[膉ÓÃFó=ÑÛ¹Ï#Ú'9‡Œçß±(–¶ÝÍ ÇZ$€Ïù9ÑÍ`" › PÂýМҚ"ã$m¾ÉŒRùò»T›¸¹ä¸ä+DÌÓIjµª·±Dl·úÏqqðV+ŒO;Lݫڰ¦‘¬ý¤‹Ðw¹BtÈl—íãö!E-Ž3õÒ<Ï۝=Ö?k¾Ä#ѧ¡˜°‚Œ°VöI=¥8 +á xÖòÇD§+åý’† pÀ„ÿ€wËߕZíëˆ{·#ƒé(M™ G‚PÓ(¿‰Á:Åo… âEâY•û|wœ=ÏT\F`+‡`„K%µñƌP¸í¤‚‚] ]§ "ƒeV¹5mÉM¬ÜfsjÃÓjÏìøæÕÞëêM©‰àϑþWôCD¸Ñ(ÿåLÛßh֍#F¼Ú ÿ¡X}kƬDþ”âˆD$©ðԈ!y?ÄÙ8ž±»ó»|N/`Ù~ô¿â<ÊÛ½[Сç.¬†K)·0(cAÆÔºà×@‰ïðD¯†è«Ô/ւ%”…¬p®f͌ZöžÐ:y¦<ôñ»ØwëX·/²üÖÖÏ£&óMŒŠó^¹rƒ·]˜$Sr‡4]¼;Nž΍wQ PÈNd¶Ý#Š Ÿnö ~Ü5ëUä’+(æsšö(Õ¡ósá(”>o{ý d ©Ž¤5Ý1\±Äœ!¢ðHñž6óÀ7þÅ\Íz´:¶,¯Z}iSçJÛq4E²qA~èœï?p»e"p‰@;…Ž…õ-w»sw¶)fˆLr¿딳x»éÍQ`ŠYýÙ¢1‚ìÛaVý0í°œN{ òìèIë²4¶¶åƒªWc¤_å !•àÀ’W2»&/¡ÄA•FÏxÃe·‰ÃôœÂù³”nºµ¥÷Dw;/ ½”_À&Í‰Åæc°¶lLe{7„Ú„Úê=TTíað¥³Lü"ò'Yùöÿ"sZ¹šçño]ÉåðÉÛek´¯(3ó”p&ÄeÁ ¿¢ÿ€¿¦4dB' úp} Wè|9ÓáÀó»ÂºQçPŒ “~㋆tPo¬— »~/ØÓY¤³yÛYØú„"qS^^Ùd€œ{%úBÁ”3¬O>‹ô¤š!ô‰Ú×RÁÁQSï;ɤÆA`—Lå>õ2°j¸ó"6Ïè–337m°òMÛOØ }=!_́!–¸7LŽì±æÀ¿È4‰ØU§ ]e”*ôû#ôý¾yÁ7Ô¦˜ÍsʉÖ%IT}¡ðiá8ælU©Ç{ ÜyRþ“½+?hî¹S’’,r*‘ë·Z¶y,¥3h=ú.œéß«×íüˉré™Ac¡ai}ñþ#°%cøZ1®yk`îóózö;£Nò™´ \³bñ‹/}wºÄf·§ð7XO=tĦáÀ¼ŸÚ†¹UÖqòϳ'òæò×T®§LI‹¤í¾Ä<«Ö áÁÃ]h.ƒ‚o/G{µÃѐ'm‡(¯<_ÿÇÙ¿&Çõ{7àØ?³{ñìߋ/fù†wzþ!ý›ßækX¿³‡XÎë(~XÝ«cû3Ï|ÌûZßÕVïÙ¯îm¿ÃÙ­mä^콚¥‹Ù«¥[lHa¯yY&ϳF:ãÙ !¾ïÙ¢ûpäØË¯Hɤ{3¸/f|Ï»ì͑´æ{3$û3ٗÈcõ{2ó{;Ïé3${Kiá Cà@عÆÃ­wN·ä.Š×¥ïôҀRú̈®4¶·¼"–ׂÀ–Òï4Òg‘äÜôzâQíDš)d‹×ßZ>EbõÜ%jVB«©–,öM5ð¾"#žéR™jܔÉõ…Ö^Mæð«}²óeƒYè4Ž`^…æ0¹Z$›,/êh!æFR2cª-•è¾&Fûe[õê±~µÈåÝ@v¼LŠK5)ÂVÙúÍÀŠÐ4n„¿.ûrÉõMÂæ’å¶ÃÃkiµ!ç´´ê²%ž'UÜ7wæøäì׏³—‘ó†á+Œ¿ÏÂp«ãaÚ5Œ¼åàéWL˜ŽŸGÖZN}RЏÓ?ý/¸zDküh×ç#_¥,Ío¼‘SÒuÖüþêtW“öM[ÄW'þÏëÖÊlÊç¿§]ëýþ-/•éë¯é!å|EÍm}úìÄ|º"½ä~ÉßÿKðë»mã™ô1ö(¯G®ˆ·ØaÑ"ôW±È_ ð$d:{Ëf—ž‰ïrÃ[º N»²g–“i-‹I¤·€V8Í[ûf—ö¸&omš^ƾe‘—ï›oùÃj¿ÁcÓüZþ,û§ïÿΛn;ƒkcø,F7>刯Î2gý†×ÇýfÙϱ;ùèñ“ç›V¿8ïË"×Ȳ\ù™o<¬Kþƒá7¿ØýɛwÊ –¿t-uñö¯Ûî¸×úgpuø.Ÿ‹ò.ÓLÇ+ûÙl.;·âdçèƒOÖN0Öâ1ú­E˜šè‘uˆìí¾¬Ë9$½»7¼G&Éò»êK¢ìÃî2¢OÊݨXC ?ZÃÜsd©þA^XNHä9ú3|Ø#ý;é4Ù!‚¢òø¡˜Œ8Ù¸ù!êäñ•î³IÝÆ[‹¶db˜ð +íI°ƒÞ?%ÉxďµA s †€¾ ÒØû%ü! ͯ³ ð(OËîÊGüª+Ó>G÷0 ðéÛxâIøKM¨A»"Ûã8ƒ¢o„ rçEý´®ù‘Cu26FsófƒkàÆ':ÁÅ_ŽdɳOµÕ.<°*nÙÀ¶—Œ<¨+Q¡Öcä}¼o¥w̼ÂèqŸ,j­$Ç|[wÙÖoÔُ§€¿ÍÝ·R'«Q¼K¾Hõ֟#"8`Ž×\ßËæÈ“leHÑd +NIñÃrb|rNTŽÛt½¿B˜9¨‚ßýUôSÑrÅó +¢šB„ÇÅ*¢íƒNÛ7òûhé>8Ã^8ÔàF¿u Îïìá{ëA I!ël õl“ˆÇφ1F*TÚ'Ú¥Êù’èCoùÔÌØ”€sÃøG?œ&z¸1Ý-#Ý\Κ »S‚?ÑÀü$¬t& }^o¢DòÝH?{+„‡ÃLu³EŠhY =¾± ÂÒUsGlN¢ û×ü\æj4 (Î0ã)…xð9ë˜ô“RÑ?èQF)ÒþrY)ú·Hiad8f¼d=èÅߥ mg“ˆñ×â$â7`“‡…L·.AÃ́Ëÿd¾N\â\`C‚K@éÄ+ò·ã’s¼n”¹vfœûú$'x'=xu¾ŸD|®ÇürAÓªZ;Úå„@ÀÁ38n$¹rPÉU™ǵ“=ÖÖÚcNÍõ1™¸Çþ™dóïwv͓1“æ_3;ǙŒÎæ¦P¤qØí—¡}™¾<òm3çÀ\Þ<Ìu,và¦n~OÒ@&šº‚"x]8Ïðl£Xè…ÍpÜ$èQdÏpœ›Åðê15¥Þe>Ðé2އĕJ))okˆÜê?o% h ð¼ÀÏÃâ88¾–Ϲ6â‰.³Î3þ£[‰¬R *¨ˆìF€ ç“'ܶÍ5¼˜Ï¸}{вû¾1p.¦V‰,–®;î3ç}º'Dr£å«Xê­–¥d2ȝË"ôùÝ̇ì“ÿA6fOss?_ÿà¾fæ ÿþ^Î kem‰ˆ;\#ÙLåQýº¢[ΧÚg{ÃB?wž4!À€h&Ûˆ;úƒ¶`×Ð<Ñ i®P] ¼c=² §[w8b‚ž ¸AOm*ý,•}¼Þ­óAвsÁM”öžAÏЀÎzsݸsß@9ïœöbCžÙ>Yí}Ž‚ #N{rؔèi]f±Ør”CNRt¸#9JPå6£=å&°> S ß­µ¢§Ú·Õ±ÔQ-Φe¶$„ŠR$ùmï.bߏÁ‚ðÏwW|¢àò޻؛ðPÔzâÍ[_~@Íù,ÕÅöGEa¨­„ŒEVSþ‡Šd|{ëÅý 3Oª{0IWùÎÙH½{U"W’0'bjêœÄöoÚÜRÙâ^ÄÕ©Q•œž¦hâjŽC_·N!À%–îCœæ:n —–ºÞ‚ ðm³x³~nË4ÐÍÀÅò³A÷¶F‰#“ƒ´.O`T¼'%JÉcT5j$UÇJ¶)|\ÿS€D—Úã)GxGCg¯›&… n×Á–TϾG´˜ ‚¡•âÈÔzt<òÀd5â&õB¿vß4)Û ™©—•¢ YÞ2‰bõ|r=áZ xÀC<§ÊŸÁ>„‰ç€ Ċ㨎@½ï[n"Zvm 0Ët[\òÅÂÖb”‰¬_´µBy³ý’<—ÒÇÍô§¤ùlWÈ3¼Û{Šò¢Mvq†gq©ã—Å“­Qݝ¹6… +ßÿ¶ðTý÷íENÙF­Hñ Ìõ¬ó#6ö‹T… vÅ}·µoâyiIǹSX9!ˆ¯†õm¸IßàÊ̝û*ާ?„Óˆ`HÁÁÏ+ÁRs²ÿ–àn}"Spˆ‘ððrv,êð \–¹²Gµ>Ðêr±@EÄkIhŠ™‡`˜ ŒºøÃ01Ÿ)}*Jó.‹9u»¿4kÞNPaxà[ô•ùþÅ¿Œ×*´î„CF‹qzÉÕj~TÚµ8Áf‡œ®h‰#µû'¼“ñ4Œ‰^„)Úì!\>ÚB}DŽ+T)õÀô)2òƒÜÖ âèhƒöYâ{ÈüM ßÓ]äg‰ÊÇâZÝñ<ºÛ_$=#Þ9¡éáÑÀ ˜ë–‘Ý}ÍÔœœ†Æµ£Õ· +-ê®3•XCTÒÛñƒç=†¼Ô|ý„èS‰'Z8_°Ý“ßö$ÅG ÉÒºŽLm`ø“˜tS¯æŸå·uÊÁbžî% +ÿ¾ “Î5ýxMßû0dž ­Æi–sþ82N¹§ü°šR0d4Ÿ»ƒ$σ²þ\Ÿ÷à켟öàì½ô—öàì½T—éÁÙà +GæÉF¤ä$£Rú©(éW¢oYìå*'òù#éØì!cB€Q1òÁ¢úôâ5ÈP8¼AÅ>"‰Û}ˆß4Ãå‹,Çâ'õÁî/ÐzrÈ©ü6ù­ñ`‚>ß\1Ò=ãhǕGA€¦÷lxü‘3r€¬g.tƒ Òb,i©hoú­ŸETc$Î2þyb’ Œ¹ýàyå|¯Ë™´Όß&Ù 6¹º‚ä'¾yËu•Ü,Òÿ‹¾4¿ør.à²9.{ëGmo‘ÎKŸ˜Êëû·"¬;¯Ü%$Oä:ž÷’ê7nôÀÆ€àÎý»KÎU³G I×󮬾vߟuUÜf©t®sT¿2‹çÕ×ÏýwbßÁuMüW"S 2EyÐ +þ²£ßÖoï§8 t]FîuÕ`nuÂÀþtªáèZ¶†ÝƂJLgZ¶žJÚ۝~Â&ËômÙÍ%é\Ý9ùÔ6íuçïw4±ÿ®„»IÖ¢•ŸL‹¤_Ö½{éV[ÿ2ó¼ 'ÍùyoÝ{àXg¿×ƙŸË)äz=åV>>iλ!èþM¾è±6كû´æÍõ¾3£v—â3Ë½Ï–oß$„ˆ¿Ý~÷tqÛDÿØ#ßÅ,öþü{dP¥¥cæQ%ÿ`¨g|E¦ûð ží'§¼kG/'§šp¦g½º!Eª¯Ðú_ÿ¢'¾· QÿºˆOñ¿ò ­þ3F“?åD'ñ0§wõ¸_~ˆN¦c„œ+áýÊ!8Òõ]1òÖýWMï„}ql{毝D'ýÄ@Äkþ¡ßwD/ÃaΆþ¼4Š!~³Í¾>L›eIÂöÖâ¹¼Hšk´$“TöUªÔф9šÞόÿæ°è•—?yc¹úÛHÙµ ©?ÓCùp䓂íѸÃ]Ðê伂ÞÑN²…‰¯¼X²'f|*=ˆX>íß²L§¢Ê(.FaÄVAŒ*ÛpTF¾)ŠB#9~N‘° §–E7‚SGñ©A—œžƒHïK ƒÚçOŸ—ö)GÙh9EtùÊ [V™Ç‘œO‘cŽqœýч.¢§ÅO_œÃ‹ß Ÿáló’xÚìåø"F–Iî6¾P­$ÓÆë³†ý+ 6á4Æ· lÏ €Â§Ô8ë¯Ù²=p-½´v@§7Šö&íånùÊxÞD{ZöÐRyMçÁ”µ¯uJֽܡٟ£vÿp1µ¨ x¨BŠÉK¼„©êH l<ô©Ç¨é¹Ä©ó…ø;:($ïàdyNïtîég9Ý/)Ýܰ@š-8žÞDá9–¡ï)¨òˆ¦O´Vñ֜¥äHPJ3l1L՜çÑ2f4l ǐ­¯d% Ì©Q©ã’Ù†øÜÔ÷ê7²%̙€åÌØÿþÇ0‰ÁëPç.˜îÏþlw2^ù%Ôìç8þüìÞãw°/†è=ôÏAª~ç‹Ï¯\ ­t#—3”­ ì^Ô((6oPù®›!.²øáñÞl²bE6öT€C™ ++Ò>«8d…Ž¢•!9CœïS‡ZމmŒaÁ?s4Û¦ ÐñϗG12ÆJNœßœ +º”æ8Þ¾!Ÿ„x‰—µ¸åán¹ÞÆh˜³O ­†c˜ï›¯a»m·GîqµÇ¶Ûó3w5‡Zæ;lfÈWí3Çv b-À(·VáE²Å©!.fvtêGšt„a„ ¶k7‚EÐU7 24š™2b݄¬Œ•WSÁë/u%¬œˆ +ü',b ªk½‹RDå1`H €/B:Í)iñKk§FÔ #þ‰ÆÎm –@âìÐ8ùîÑߜ±ÑA΄NÀ¨–˜è@ŸµÓ„[º'¨$ÐaPþBQËÿ òJm¡Ö¨’•êPì”í¡µ‹’toÇØhu:ž÷›g¸¡Þ… †5(Âp¸ÒISW&oÆM*bzQr%qú#4ih@}*‹Öe¡ò³n¢õ˜£¨^øÄJÇ6îP‡ûBAñ6ŸDƒëñï‡ÅÐHŠŸÍÏu§ì›#n0ô/Œ@‚€Û|ΝÑ'<×ðxÄ`M³ëtä4Ž³ýÿìÙÐéÁnÍ žKÆ»h6x]<.ûDŸX>$©Îûi…ªP§Ä>Žœ1I—ÝZŸÚfqµË¸Œ€Þzj<㇎!Çš8ž„´Â²„‚„˜ê?؄R%r§1qÊ£’@ƒöøô뷎™äÙáP“O×$ §¡àBiÌL¦¶È"tﱁ‰'‹èÑ(ÕpgE@Åþë} +Êu‰h[­œ+'L^@iH²™¥BÁ:ä=ã¨VNíŌà¢y,¸ðìù9lqUáóÏí'â«êRËކ2Oe¦OÐTè Îe'&D“Ql]Y:T9Ì2o.N€Y.* +Hp嫵À+Œìs°g ûD€I+úZbNàIóë!äâ–؄!DR©P\z•š Ë_ƒ¾,ÀŸ0qíTJgwÒ‹·Ðj¬ÐSG€x…X¯Ò•'ÊbԌ‘ ¬_ËE‘ïãË¢žâ-/ò™¨@õ¼%hv@õIe +¡‹“̳FTömŠm¾n£S Ùf'J¢ ³?KV1@tãŽvQ @· …On•µøü@HMÙAvÝ#Øå+sÅPÏàêøÉ[[\UfАǏæ¿30»¾Ïã·½Ö4¤Ÿêªª©(…IT‹ QD"±Fð…Û^…DõAVÑX¨Sª¢,2A%We㋷nÚ6ÝØÛ…Ú]€Ûdm¸I,D _¡@T`Éï¾ûÿÿzªI$"-¹»y™›™ÍÝæõ¶ùÍègCz;ÎgCz›Íínõó›ÌêoKz{ØßÂ]üÊx{µ²Yl’6͔2ªRgà­­¥Ëëòây¸2›þ&‹öMØñ4ì•ý2q£÷›ä7r/鐍-ç¼à>€š˜žtCp®eÏsà¢=ÀÚEˆ8½ΰ’ +*Ս¼èCÖZÖ+²'ฉ'؎HÛù|j²§kŠ3„¨–ò/¹Š÷ëksn_³ pç7qÕÇ6è?N€:ä¸ÑÝclwÉePÝX†ÎÇ6È?L•`Ãno?¤Ò@QwsxWk Òj°(÷›©)Ù.à:\ÊÚVÓúMbÛÀ•Öòk!.ÒÕ³æßs©\UÍ Ó/õL¿z@GÀphø­€Hè êNÙoRªæ¸6KçÊÞ?B¼  ˆ[9ªF_¥"zãx˜“Ì”,0Ûà.eÛ<R—Ê¡¢%@ŽBƒõ ü(ð#؋G³9D}@ZÜ_=ª Lt=@•ŽH)T^·R…m"¯©ˆît˜3SòáǽƒÔ£¤\øÄ¤½Þ€3ÒIÓóÇpŸ.A_w7 =÷²÷!áw ³Ò,¨˜1FFx]ü xŸØ.-Ï)€álÔ¼=麗‰}ò¾)èð¼ë{G¨ènŽ’6(¦s{ëò8Õw´ïêMy¼ì!˼K±.îL¤Näšï䫸z«‡yA¨ŽSQÁ%2œöcBÙxŸòyb*ü·×tŒ‡ýÚTªñ7ç槗Á|ZR^l‘Ç’¸‰Ëó«AëÆÃ׫ú_êè=k/<;²Ò&žùäM͔æ£àð,½¸BNÚ͇•XùŸÎDD-ù ÎZ»Ø´G€¿¤Ýã|ü‡‘X!KŽe.4â¬k‰¯p»ÈƉ7¡Má¬ý灎ììܵó .T˜0¦á .`L”ÙS&±’“–Ê<7c†“u„[þà ×՝MêÛço³æEz>äQ?¦ñ;ìø!Žæ(_Wä[(w5xà#•ºä ŸnäP+¹ò¶^1yl½JêiªÊZÙolãxhÑÿ}['<¸ÑÿK‡Õ‘EÚ¤vÀè ºñ{òky-2[S3ù6dè\¶Ô@£o b“Þ•Y®bÜT}©Óä|N®ÚdxêJ“ ã1õ™Þý:×®ƒÈÉ,†¿æÜñ6lxÏ^"õÜ,›SÛ±3¢E6ï ƒÃ— KquÄq›Eוò¯vuN3kÀñ‘Ð){•’Fx(šÖû!ôg„–û³Ê™D²0Ž‚¶2õ6(þ¦Dú4„m¯†S• —04Pµô%Äm^3÷gæ‘N¶OäØÈ›€e0È熘“€ # z˜€} d“‹XF^(µX,œ‰‘HÀ•2J`ÀTÐ-Ž4{çÕ엾‚}±ÙÐοùӉE{èI” ‚4¿½l"nÌÞD) ±½<‰Z + S,£n(…zÒ96;xÁ·0ðԑò,EL^¡ŠB)«»bÕÔ'ŽL¨ŸjÒé}BúފÃZd¿¬E,81Ûxx‰|nLá„*<)ã’=7uãà´ÉH-5Zb¹Î`ò´lJt´}ÑuèÁ˝ÌîžÁΕßñ~žið¤ÐŒúܹHr«Ð ÔØëØIKࠟ4ÿ{å²wn퍟A˗J‚ÜÀýüћg ØCŒî_¬d”¤U¬ÒcbÁ(ä‚•ÎjÁîh© êf¾1™Ð%¢FáÁ‡Å9ÓaW’0õÉ7‚`0QYMH(s<º,ï¶_ ’5ƒ—Î䒔R×Åà’H¾•ù{!j¸Ñgwf@\ªºK†:´! ñCXZÎÌ’\ÞÁƶw;è¸Ft½Ãó´…ú$Öߥ«óerŠy)·©ÿ9#üéh܆+‰¦Ë´1EÃÓ +•ÈF£AM4 |9 —ødœzéïǰ„ӍpÌbÎXõcn´[ dՋTtQfï nœИ?zGø$¯²(§ö·‹DŽ\ÊY•ÉHDú’Eû¸Èz¥i(Δ}%ä)GÒJÝJ(p `dOŒì”¢W”Ù_Ôw® ¤éW§SÕ +ëowŽ[Ñ«xoF©¶Æ´ƒïÀŸ~ó^Žž>9„ jþ*ö© ˜”|×è:†×ì(¤=^ û´q 7÷p|yÈ7ìJ¿_$J-Êu_óÇJX’ˆ1áÑBš08û1_Û¢®Ö€×}n ðŽÑ‚dF÷Q ¾†ÔÃò'kRCß}¬Èƒ]ѧ‹änd’¬—dTX–^2Siær¿6<3AF E`ÕäîuÑ9ïZÍÙÖmMg ³|V£þõ¬õ¨üÈ#î[„Æ #Ši°%}-H‹Ã=J>nÖq`!ä7‹Ù (²" “­r…Ññ æØ É¬Š°ŽKýGÉx‘ûÔ»euRJG †Y}hõ<»c¾‹‹à*4Äãç.c™SFÅq€E7ÜÚ]%ç§[íXÓ­ÿ-¬”‡'ýôëyËZÔæ?Ñϧ[ޗÚrqÜúu»uö”#¹ôëy-´rÔ­½œrÔ­¿b;ÿÔ­¾rCÎ~·#–ü!ñJ֒$ÄE!‚È÷ök€Bˆ(‡]ôÐe©Ôk«ºUêàA'@ˆ§µ^«Äÿjiº†ŠRù•î¶ñêLUeß ¯lÀMÉê»]ÊЏŝž?U#‘ΫDâ„5ÀŸØÕ…íü=sz×÷¡Ï§-H±ÜãcÏçÿšÓ¨øõ ¢OO°`$„kllÂ"/Œ9EDÇgQ§áÚZÌtÅk1íJÖcê£lê4ÿ¦7üª4î|Õ}übÕ}+*?3é¨Óêã?ùQ§ÂÖ£OXº£O·kþ;þ5w­yµ¤3ý¤Ö=¯ûª8mví?ÛQƒôš}5?ïB?úªvòQ’”Š×‡¿ý­™sÔCëË떾¢*>^ι}‚ÜÌ_X«TNÄ{G¹‹k™Îsê'ëa¿–ÔÛî? ÂÛyamǘ;ä…÷|“É X;oh’è¿”{ÁóÛõ†Ûy7÷¨MôL. m¬+ÆÝí‰.‹˜ó* g¨EÿYãÿâ¢gaQýØmüõýa°Éý Ož¢~‰­²üI¿t=]îs«åÔ)ìjþOÐ^áO÷ÿc¿þßýþ¸•8¼°‡ZøC—û’ûîUúüm“b–ÔŸ¾î5×YBÍ#C˨Õú‡ðîè?þ6#ñë¤j¿û*ô÷¨ÎPY U/úT úy†Ä~?稀ƒ¤~¿ïæà0‘òftù>m@Ÿš9‚r¿Í¨ø&àù¿Úÿì­Eÿ ­Eùè•üì[Q|È)ó:!ìéÞŸ–g¤B~y‹ Ò֝ª]Ëgvºt(8í«§·´$`f¾’¯óÖ!ãõ²(QI±ðÌåÆGu†pò¼˜¬·»ìšÖvfºz¾ÎÌ þ|šö|øg£O4Šyqd=/gŸÌj_‚I~¢ìv6Ɏ¥>]: +uÈKЧìæ‘Ø +5ï³SŸ (¦ÕtmfËÐ 4ŸÇ|])Ú±ÓR»”™bçƒk(K¹SEˆX +þ I]`¥L…!a(yc¢˜ÿc’‹h ½ý¶…×òšÓ±3+*fTó?3ܶ$e°Fž`Ô*<™LA û¨B<·öÞǹ±ê9½žH%6±†Ë”«± ©1U:/s]—n()À¿÷ÇDÞ@`°f kæ. wñ÷¬‰S>3o&+5ð…-úv¹ëÍø`åǙ?‹"0ÌZ½w†±Qâ›nNKsÂï’mb–4€to†i¨…ðÏF³]¹žY®}^×-±zËìW:ýˆfFæ×DŸ%œÈßñÏY²IB|¨s€TKTY× } &zƒ¤?dބ`=:=§–!'ã¢3µÂ>ÊèÌæ\éáá.JxZ?wàxÀè×Jö½”v5%<4ƒ„uTJý@¯»WWzÙ¨\7tXÉD&®û´!p!÷8)øòKÁøHæŸ.® õæ'ŽôXTÕ|„RûŸ…Ô/£¸Oš»…Å ß$…¿6~*&°i/ ‰v‡J|nWàžxÊ~•'ïrðLðÊÔ¬>)eâ%&H …è&¡"°f¡E¾õw=;‚ìÞ/À\P§håó§ ¡÷p©WB>±…B¶ Ó£tî¡lÌ•@Œ§L‰¼ÆdO˜0½e#“Ilêõ*°è]=— +I\l҇T<à‘Ù¢´’4d +Åâè…«‚ŒFù¨[÷w½ãŒ¸„pºš•ësÈvãAÄNølè®ZmãFÌE¡VŽ(@R«ñ™qC·d[ 'OmA ûãGÆÑsGŸÅ &ÝVËk€M¥ù9EA ?Þ)ç_ËÉ(_c¬6Á´Á Î»Ûªf}÷wßbC +]»ƒùÇ^\ñQTìvâ‡ÉtHÞµÃÀa.b‘ŽTãØ‚§ …ùãºÌ¸£òñþÅÅ"äX&Õ ›yÐC_ØE^Ë=Sᣁ–…™ô1‡Ð´>…±´)ßÚ«õŽ[ë¯Õ¹¾·ÖúƒMú ܁´0M  þÐî ôÓ=@}í¦û€ý½òô³@XqHșö‰9Py‹¤ÍÀJ–¬ +gEâ}舃Hè‹e¹w‚$i¦D²Úî&éÒ¦À'#~wE(*NTF•Üsbª½ëŠmm›óZ™BÂsweË®xeºhŠÔ–Ž…çÉ’™‘µd%ú¥ +ƒ7¦gUÛ=AÒg éú§8)ŤáÚ©÷B÷ާßlR)y[Rg%%ÅîLU/A{¢¼M¦蔆š…©ìh±2m!®… I@*ÿ†lhQ¹u SJí‘úñTĜˆ'2[gÈw{à8ò8‚‘ÕEz ;„þQŽaSˆ…ïˆãÈ醤p¯F`³/€^WT€Ë э·X|v#Ò,l zíSY‘ìÌ €áPÊv‚£nn‘ – l)ŽE“vÔE¥…°Bï6Ñ –Êï¦6…UÌ¡2S´ 9r¦¤)Ã.„Ä癫¥v«P¾§Ñe^Ó *p}¡Gª×…nèìì$z;½:-eÜ3jñ´Š|W'Pƒé²+A±ŸÛIXO‡5 ŠŸégóì+µcϤ Ò¶ì…Z¿Œ¦) 5ޓF œŒÁÐÐ8ƒ™_tNX¯Šè®+º)7Eƒ0 ¢ãr‘r$ëi]xç C ‹IŽ:gÆæ8¾&ֈH +{¡’XÖ *¯0á"ވA Pè!#YúÕû÷Ë}û…~¸°³êóÖ )ð<`S—â´¨3RÇ*ŠÍôjÃö¨Ä>>öpa2½<µÞàY—tE´Ãéx É­×o· àbe$ü©0ùBƒÔófÉûZ38æD¾–­JQµWÜKEü—ƒ¥¸§±Æ¯ä‡ð;1¨W¦,Í+¾m˜D¦œ~'jÔ&•°ºTx}Á ÊñaüÒKQsZ¡§š²Âä1Fd‚š—” Tl/Fº6N«)ƒ¼_‘‹ä>ШQ«¡5åo~‹d|šÔâÊñ´®¼KLꐧ¦ô&F¼G‚dŠ‚2p˜È•Ñá‚×`Åu>ºŸ߬D‚F­¿ýå;r!Iÿjàý»jÚÊÖû‹\w‚¿q>AÄtdRȵÁx''Åtä¯§Ø D+7aøZŠÐ> ëI}:ZÚÚþnüy9—ïׁYAߛ1]b­¦T%})-§€½w4(áŸ~H¥ŠZ$Œ¢²AØÞ¢T‘â^QRðIÈ͞=æ™ +P,A äíÿ{:è„Pÿ?ÚÕ? Ý¥æúƒg|Õ²Ӏ» ÄåVÒº¶ê$< +Ë'Áª0ùO£±Kˆ+6«ªÔžÎxÕ¥¾S1`×^E®þ+&ºôkYÏ^õ*Q¾6 YDý``þ^¯ëuü¥1¬Ý­0 ]“—ø£?ƒ—ë°¼×/¢æ9u†ë9aJ iÁß`>‚V酙<èÍ}q™Ü^¥æmhg TyÆEþlãV~_3G•–`ÈÁs +ͦÇrÚn·¿?‚V˜¾õöb\E+z¥d’Pƒ\—ðîqU!¨IA9k3n^ÁÇIàB’ñrbRŠdôî/`ªæ±d‹G9Ó\j²fFÈ逸&;D@Ïr¼O<¥g‹Z”²-,ú1+¢ýqRW¹’k}ő“›gøŸŒ"µÇöï5Èj‡Ž,÷ œv-zþ÷qÞØ\›‰5‡ß/®ÆÙ뵑5×k rÉAq±T†çbñ. +¼/Èûг< O ã Mn¯p÷ÝøácýÔ/~ì HdgD[î߈·8¯Æ§qÚ׉;ð¸W^øÊk—¸ tKêž%µ±¹¹µx£P·ODLƆ ÍiÕ+¹ÃÀ…žtBĎÛº0ï°Ï¾kˆÁ u×IcBSò¦õÊð>KÑÅ!s«íkÑ©‚((Ã"$Lʊ*Qv/ ¹q ¡¶ @rËöMiÕé*’œÅ‰6 . +sÈv£ ¿DrÚoòG¥:.RµD«H“[Í¢%ÊÖ +úD]ÈÅV;›íݰ õŒ +Ä5 +_ÄkçGñ„ÿ†b>£ØFÙéaÛ*·NøÌÀw½X(˜<-B¡ÝI>ôØ“Øxt/…Ÿ½ŠB÷v"yí!…¾¦gÌ6úН—™o©4‘¥í¾ €#“º0g€S°(a,Ø[¯7÷À, #p?Lø8 ¬≯ñ/|ü +g;áÏÆÆBR¼X†¤ÊÙº1uŠëL…¦±!àÜ0w’}ûøSÝxãsÄeoJÁåtÂ*MêîË-eyã{CEÆU(ç˜Í'ƒhî…ܤ¼ uò1ûP¢oª×¢â3V ½0ªÚ*‡`ü©í +wþä.~º¿ýSè6çÀÆ à KàŠ*_\õ\EX NÃãH*±ît8ácﱚpî@Vï ÈtàQHbî3 ¬8𑏃1…A´ºÀGXÁc"²r."ÛÛ¡ÀEԍÄF˜ÒA ÃX|bÚ>é‰örk£Ë‹¼7µƒsÈ8£Â½¶};{r^@­;û’IßÙD&NþÎ$wöŸÕ =a 9] .€fB(.­²úB¹-è 2]3è3Ò'viyZ; u² Ìôø‹öñIJ֋ºc¨O‡ê‰­· ?˜ÜHáC5üUû툎eE„ÙHQO8»£ ²`DU¿É}¡­©QÍÈ)çÕÖÖæèŸö2™[ãShņÀÉO6€"zšÿ?xÁ†‹¤Z¦YA§­m‡éD «j½\›Ù•nE™p'ÿ½Ó¹S‹ñýŸgñ¬éë{¿ñtò +`‚À1§ŸÜÑOñÛslªî·Êu¿‹ûn³Yü8¯çñÿ{¯ ô6g_ø;¯ý:ù8B¥j`F[Y;7Yó·ŸÃ…yÛ¼Ìçþ[¹8¼Rå= Ã÷7”àlÍÊ~?sþPW¿K¯¸®ëÞÉׂ˜-ÁhVÓ½ºl^¦ñŠºŠõ†…c ’LP¢om$šMiYBøtâ*„ÀJJ¯†çàQ5`U>§pj.iÉHä%q‰­ûkkn,W’ï>¶ymnÀ¤Ë§‰­û+kiÍ­–33¥èU§Ðy#²–>4‡½ÌÛ±pùô±ëieb9î/nA ªƒ5*bª!ÞvëRÄùb·ôÓ÷P¾?Jƒ'Rñ/fj@SÀ&yï'”‹YϚb·m÷e,NeGf+ÎèOÓÖªTNðØ B¦HuBÝ5 PŠ›ñ¾lMJ¤ à·ø}uõAfà4A%?Oú•úÉÐÖFY÷+õ˜àÖ6>³Ä¯ÖO²8úÎÞÑÇH;…J¤Éw†ÏR,j³<ý˜rGVtmAŒ¥"Eá%ƒ;!Ö ±Ñ®ô£ã\;ãüéåó°Jƒ;§p¦Xº…¢Î §ÍR¿õÿÔ0„þ1Õ'ì&`;eMéù(¥ïÑ + ¤Âʦ+ÊK +'…o©½:Pñ@ÁÇeகӸ¡®ŒiIdU¹EãB(VªV<“?‘oϛÇ,AWWKÄ5¿DtE£{QÃ!Ê9|u^´îVñ¯G œNI’yÑ~âþ%å©Áòï8ëYž «tq }€‹ïžŸÆÚ§ÞÊ#;a¶r +jUûdª®.'Œáù»ÅÛÍ}JD'ê*Ÿ¤ª’‚Da-†øOŸÎ~šÆE}·o$£´·NÀ(U×bÊÞØÉ, +•‹Y² <U9ìèq7YY«6w/;Ɓ$(¶q/+Öê[ÒYi¶¯úÑÍ`Š[Uw\~Ò¼(ÞZ ÀÔSiÛ*ÎiC°AqiÊ(þpTc!Ër^©§„©‰³Ýؼ˜Óx·§²øYKŽFêôKa4[Kø\hé‘B^ß8Qhi.ƒgÿUdTå+·cýª÷9ɧ~+¬r=’žì–&œxaÕ¨z½e˜Çƒ0’c+·d=¾üÔ-Ȗêø+Qì§ß›À§}ÏLß:™QÂ[ޚXHÈðô«‡ht)€ð° C¨Ï6G¦DÊÆ»íۅ«¯-üSã,ÉÑ'¤íÜD]K¬SéÊ30Ќ·„õ}Ø+qÁ9›r-WChÚÀ*VG“œÞ2xc~ÊÙ$öèÂ{yRê¤EƒnÂyê¥#D­Úá@¯{=\K$®‘ +=çÄð%­cƒ‚ÕÐ ïžz¡^©Í®w E=Q-+WfL'ó|¬"ïåSÉWjÑÔt¿á+»ƒ(—ÂlZEcçݦÿ6žçÚ)Ú®çÕs‘†aamTu]¨lmC¥]¯Q]©Ž[ST£uu3õl`t`Zq=ZOÖÚH´W ~=}<@T0Ué^ÍÒ0$oà9Ï1¢k[† Làjc! _ЂkÒkñ-5n?ar»Ï¯|µBùrbâšÓᾇːà|¯—ìð9O•Ü*…p9o•Wÿ]©ŠÿÂÀ…µtÎï~ò¼¡àå!jîô”QîEöøA/Ò:Ÿù$`7W°àFgØÂÒè…U…pbÁö@: 7xQ³œ€FTÐþ·!aß:Ð:wCî¸Ë{C™mx.2À]{rÍ@®®eƒµUñ‹öô­o5!=ޗÚ͜}p¦öÔÇØÝ!C³qCæš´ˆ®òËÁó´¹ ãkÂש°°‰ì¼÷úÁŸ´4°͎~²ó(âÃ2€*K»ˆ1ؑGm{\*Þeõºz +»¾BÕ5Jׄ¬ØÒµý˜B0¿¥KWtôa2w *$1«±¢ÂÊK×0¯þWÓáÚöcà=¯]XÞ>Øa| ³©nº­” z›ÒU~~R/V1Vbïê_°>¾_óƒ_ò»³¥w`&:µ~~j½Ã u +$6Y¸PÁˆ¯ÏnXÿóJÖT +¡Ý[K”é|Œf„éÜhŠ6&&5Î04´MQWç@20Ì`vª´[yÒÃ-ºè uÍNŒšì¥øZ;âÍ]֕¨Ÿ¬T>™OÀZ\¤ l[þ‰m‰»ª.¸TôW1®Êpñ ðÖ<0ïõ5ôJ¡ÕC±m\›\>ð0•Ž@±µ¢mH ¹à']&Öwz8´ó‚,W¨hïÙ…eE¹}-蕊{¡SO}öxZþ%bµÛcŽGw)µ«`áˆKÇ4;-Øa/³*qol4:ŸÀ8Óp +Z‹Ñ¢}¡…f†œb†Åóz¡Ð`XOC «©Âß-¬¥Ñ'kã+v˜ÿq¨â[Œdä֘g«À +pU´Îœ•Í]A‹ Jû'Jé¡¿`Uõáû-…Ór™ö röŒŸÌ "\è纬ü•žÎÅýÁ 5é®—v4Á»t4¾ø'Æá»uÇaåæ1¥ðƒ,¥:~!‚ùß·¢ò™ÁæR†z1I*‘èÝÍ×XÎ6~‹ ›E aHÿ °=KlÑɕ-­MU é6Åiž-ë ñúu˄YËÀgÃ>Rßi'¾*¥“ Ù@8U|Þ$kzòà†nà¯ÍɨT2™Áïfk>p½z¯GÕ7k¥™”Zs.0'XÃϰP]uÄ&n{ÐB~³„ÝÐÈvò3†y˜ôïQÿŸV(«ŠˆÖ4|7·>œUFšWÊ"Þ¾-³©èz“ƒ›…Tî¦L€LC{U0KheL‰=¿­2N$™8våx±fÕ“;`³°d€½Ìºï—YÅ2k8±Âv>Ên\™ÅéÐ]¹ŠÛ·09­ž÷ænôêh·¿3wL¦gåÖHM*æ¿q8;þëF£2™£ªdž(‰]Ö)½:˜ø÷b ‚Út S±€U˗Mŏ2Çê£r[ÙøtâgWOۂ;±1þx1^o"¹M˼¤NÂÿ†œ-æ?®ð æ (û#*¬SCóŽû¼þˆQô»Î|(Øo+¡Gú{ Qú]…Œ(ÿÓØsáGù·|èQù;¾t(ßîë¡GÖö0£é{¢w}ß:r[¾t(øÞ÷:{{› +:Óª¤ÕXP£™:µH8ßÝ +:{“ +>/ú!GÉÃHn¡o…Ï*þvĈa,b;LU1[ÈÙÜ,¾r»Ç½y3mÆê¶·FDS¯SFeQ¡h«üåàùãþ}ÒåÂ¿‘Ó±OÿB/ÊÝ–Mž» ääòûÐÃ&l!‚m·Ì:ûàt“›4›Ðì*KîŒ  *¬á'Æ ìfÇЭÜ*E#í,`8PÄtgOÉz™úæ´Fë9±o.­HC³}ÊçéÙ6 ›Ðܙ5Êù[4plÙMɐh¶)üƒ®m#¢6˜qćísH†»_½õ—³8JSõE¶dQ7J×ï//ïü¨WOw à}M8£Ü‰dlÔ©I½³‚@£Ñ%,±rg,PHNÊ n¡h$kTð¿bÐH{):QïB`Á)Íe:ÝVКÊâRà:ÍÁææiЎԇo5;B»€/MBÔ)o_UVÜvE9ŠíaåmËY¸Ür™A陨´ÕL¯Çiª‰ŸÈH¿¹Ûö6\šæ!_“œH=䉫T3XâGÏ5#ŒtK^‚x‰F3S‡÷‹¦­ýÍ_ü!ökD},³ ñ ]äoލèU>žrøSúČ.LîrËٔ|–'õµI$¤Þ4 +¼²™ßw•ÖóJÂSË÷C £yã*û1í‚7cÏù΀P¸öX…‚l>m!õ  ¬·­³j±i ÙïyPÁè-©4«ñLQ€a«_»åÖ¸eŠÓé9@t<ÖÍ݅,½Hi_eµÑß!kÓÄÜ_ER ÈylV_˜ß8òٍ@ÊÝñàãÜ£tàˆ-c"Bu‡kqG­[Ø®u~Mö)•þE)ÖïF©^ã;RŠZ¢",ðLºª:^”BÜæL#GÌEU3çݙhR҄ÉÔ©!+0AÎ Hn ªnÏTŠÒ@™$`i¦ìÞº*_wúH¹º½¬C֓äFéY^ú•éÂ>´TÊ}PCœs>.9OŽ?Ð37Yµ&Jÿh[ÿ»…òù¾g_]ÍþôÉÿ K1틓{ŸêçEì­@úã3=è›î¦Ô¾ÿo™ÌmÆËÌm6˝ÌoŲùù–Ù|ÜÆÅì­9åmË]ṍ³ßA²ÿg1²;+NcuûBd¨7ß·˜ßµâŽm±À—¡…S?[ÿx m‚Kuú]ô˜{e!¥©s?ºpòcqµM]Ãç‹1Ü/aò_ Ä»0CËK Ÿö–Iá\”»§•¢“pâz†|:ò3ºÇiT» ×_4ÁN.(õÈ3ä oÝ6Ð(¢¤»’Ë?öòîÖO/cÈÿ›Ë}ž9aZúxøC¡ØÊ4±hs7ÀGf¤ÜQëÐÏÊ;Jp&"ø€Ò0*}‰Æws4ÍOZ¥äÒ¶Ç{AS&^ù~ú7OjåúPº¯Ìræ ?K—¼“—ö_,‰r8Ž_ ÁËü³©ú\¹ýüÊ­Y£ ¦ÒVïÁº<¨L¹>¹é´ab3 +¶À_Eš|L¯ (2ÁN?cy ^Žå³( ÿEשù(EkUê®7£œ,' /¡ wÝ£IéþÌ̙$I™@À`ŒTFC"\ô™ØX(ˆ4R¢0Ì G!“'®-T-­­ùoÕÛjº¨-A $€ÕEVûQµP'¿¿~ÿÿß}̒@" +¶ÛöòóyËvý¿oOw¡÷7›Íëo9¼æïGyÍêïGw£½=ð%½mð÷ð +Óá÷»[m¶ØÛRz°ðÿz´ú\d4{d)=¸o;DŠ[z-hø€¤Uš?§na¾ÌOÀ»=šÛr“w ·ˆ‚^!°rñè÷À‡<›Ó¢Ù…©åð—ƒo>ˆ_³}Ò÷ÿGë©|†ý/}Å-(¾5=:¦ì˜“FˆŸÛ…óFëtžób ç«xÚWVòWNÍL‚Ž:@¶©òþח‰^‰å×NÉO–zv-AAÿ³}ޘªÒ˹ýžºø²£x¿Ÿ/5ƒ¹Ö‘»r‹B7:K*}µÔ7ÂW$Ò:Mä2ù&ÃI’1K'_pk+8Îå ¹l¬¡£ˆó¿X" +nA_#Ó[`}ˆZm¾ýqªEõǖu›Ü6ü,‡üix[©óÁLóüRÚÇXA¾K:,ömnܛ!!ïõöãÚép3­t½^n—vØ„²Y½`@.x„BÿN«,ú?’ ³ÙÓ®uØ ŠG†B#J(•^ºÕ}“Ð ^™PÓ­ÁF£˜ŠGƒ¿™Klƒ‰@¡°báTo4Wp`ýKð¸ûšh1pnvÜ>äž ó: ÷L+&ò|‚H6Ÿá1ÌE?F²bƒ^@ï¶\7Lð€ÇC@ƒƒ[ÑûV´'ñ–àG§ï0:¿LQF„Pߜ‰ß õ#„BE÷°\cEp"äWdNÃ"k´È†%¸T>”¨%ƒ,‰Ô áÄ,‰ýÎNDçÇe›æ!±õOËÄA)aÇØ’Ç׉l1ٙÿAŽÖóý-Cé$ù_|8ój·œìy…"åÔ·Ͼíy3}‡ñò tCø"ÊäȪ¨'hëøÕýqîóv‹Y5[B²|?#$ñºúÊÏÊÈ)¯x¥K/.EÊ:h˜D“s¥ú¹w4_¥\`ý âvœ¯-“ÀþìbÑëÌ õIß¶¶["-aØ&ÓlÐÑt‰÷zõ|ª44_®•MZå„iýÁ+â G@xv4¨œ.ø9¼%acÎQG©0žÔüc…ìuöPhh¢S÷uÀ {Æïwë¶\‡²ºª4H&&f +*Œ4Ÿà‰;¥tKxUó÷Sç÷mA‹Ûö šFtäkpټ½ÍÅ]Þ`Ð!¢¢¿ÅJ¶œq+˜‰•Žw +$ó£@†‡fÔ>¸gq²°î÷ҷז¤hÌ F=Íű +Ý FÓà §n©AZ)hD$ÙÈÐÊļìòÁf›q‘8âü4é[ú›j•r=cç’¡W°Po/Bƒß’%ߟ\žm®RaâNðèmžs渤^t0rè0iΊF¶œ¨ˆ4QtÛZÁ°þ-n…U¡ò‰óÇÄÿǪWPoU=Q¸½¯£O’Ñ'KQaç!¢bŸ‰aõD¡¢ã'=aõYÂä*9šMxÉàêS1N¶e„³½I2ƒa0193ádæ†Îi“½Bð~<†ˆkì<9ñVä9Aì–U7¸&ÁÂv~„ýèh^Ȭ"[³Ð½ã×µ¢ñk{‹-žÕ`“{ žzžÃ°T¸Œ:½‚®›ßOAӍËÉ{8‹H ÅV50êloÀø„?GïÀúÀ +¶Ôþ?`ÙnÙúP´‡°dy_©(2=‚·G(¨^aìI`¨{EØ.ØÁìò-Y9—ã^óH-å¿d‚^´ºUµq4¾ód)Sn]™ÁR“‚«Áì4‹°(dÛ0`åçt×KMZ?Û2—¸7‘BêGlË3#†Sóëð±C†‘ëC•d–æjîꇺ‘ë’ËEk˾0…QI‚#Ž×ÍǝE_ÔÙøû À B…Øg +»ò`UsZc¹9 ~¿¢TH°?G°¹'0ý×ìþþÂäÙv&×ì.m˜L’½…0êmj˜­^®¸é„!·”zÄš!• ›y?av‘nÂê#Ø]ÂÃK‚®|[=Z½…ÚAn·âûªöX†{FBeBCHP»Fî\Yª~ÐêáÒ,J•{ –Ëu=ɔ±Q +SéÝoSè£ß¨k!#—À}oZ"Â뇪·ßcu¡ÏuŠÇƒ×¥+¬p¡BOá?gêÁìüØ&|Bsj k;—zënªø$8Óªò¦ƒè£„q_ »ÀÖC¼›@SÌJ°‚?¡…×÷®»(”çl”4ðy·]ߘL>è¿VMhLA +AꫤQ®Õv-´ŠèVԚ·­;’çv ´ +OV»,ç04zþºÄ,º½ñÆÄã~ý1mðhƒ”ØÆ1”0¦Ápìí‰Uy‘#²P6ZçÞXö ½JH]‚é!Ówb®Ï…ûÝw#(=ª‡_Õ1W?Å@,r?—T(ZŸÌšjAÓ¯‘žfí2Woáš?§Wà‹œ + ÿ—tù××Õ·:ÍÑè€Ç'L¥®5cÎì!'˪Æ~…ž\=@Ó3ęsŒUA›OԆ ‹JPl†VÜå6Ý´åwý£OSÊßweOg©=Tx´›ewÁMDƒÖ´óÖû%ú¥ï;çPl6άۀ 0vý¹÷aàneÚßà –æ]*`,-¸„üHòâùÚªÊÉv~â!►qîµÎƒ's Zão‰Ê#WÈã¹ïzœŽ¯G$·–ù¨íYø‹P„Íê‹_Û§÷©M“[CãÄg?©°â3žKScÄg„ÔØñô¶Sd4VTíZ›$î&¡^$éâÄ Ü?;‰9ˆç¥²G™Äœ>ªj6.Ñ4úŠÑÇQðGÅì2×z¤þykµj,r×Ä£±Ë^îŽÇ-tôv9kò¨ìr×ö¨ÕË]5'ïË^†Œ½?û—?-c¢ð²×ðüŸ»-|–YF I{]$ñQ¸·Xpÿ‹I\«7¹,ó=ª´²Å¦äq‰Š‚13©jF@®ÜD"ñ{³ŸX#V!&4%ÆÀwɆ¨ øg1=ôkð0,šP$¸ŽËã?Qgh‡£_çFžFqÌtg–YG ôgÍû;ŠÃl{·!-kŸ>)K\O&F¡?½e~»±}e҅bA„—"å夬ê½]?êøƒML@n·Ës»êé-’¢Í*%9®@~ᝠúÀ´:ã„×=—X¬•:£¹Ï~¸Á¿Þ)DY°çvº60)uIµcFs³WñƝ•TŸÐ·"}mÊÅÑÜDž³ŽVÏÈ+øäGñ 4hG]Wö'ê¿ÄŸØ<¶ƒß{‘g*ÍåäÖiz%BäT‚ùŸÇã[¤© `TµŸN{Vü_üzŽvJ£X‹p±/¡nÊ+i¸æá±ºÅÕ`“[–+Ðûún¬ \=;4„Èë>w>5_.ü¹ÂƒÅ°`( +ÐeTP„ÛINn»¤§AÃU…-¬=CU 3-2 |Ӎ®¦ÀO×JœLº^àêlàø‹‡M.×Íý4©¶—KÒ Vîä”FL±@Y: PjŒ€ƒþ¨tSâê=A3k郥l&-˜ôôgñ"άVÆó·kA¬&p#ò¸¶^;MÓY Ti pœQ +zW`ÒÁ‹Ê”»~›j’1CÄåÁß¾8Pn KµÒï’Ö)i‡\‚ e·À ±Jä,ÚwŠ9à̏8çL–°2#xt×ÍߞŒ¡S"RélK"À7yàqa«ÀdD24Ÿxl„ېKbƒ?i{ðñðo<3ýa‚=9Y.ZsËtNᏑólZá×mãA !³‚_˜îm7ÑPFeB!rºc¥Sjˆ/ZÛ +2¼õžÒi÷­ÊÕ¨Ô¨¾ñjXB…¨]k÷&Ùõ‘·ý~FšŸšévCÚZûð8 +ûŒ¢ÜÈ5Fë¢Ãnû@eɾ𡓍ɞ«øè$ØÑ·^àJŠºÔƒ‚§‡ ;|%& go`­(‘Ò«? {NHދ/±1y⼋†3}qO?ïHÔ7ˆÐR;ÅËÞu®Û‡ñ$§ðALâ­ú]Ƶå5ohz9lBÑ&ó¾wì‚^¯maNî‰4SSb»¦2 šÒÍÀDÇ^gÂÿ%\/ž6H{kaǽZøJ€àØ6'±ü—àîÖŚ\mx&›ð=ßo»ÇÚ²|w$}°÷eduû=ãkÊ0ªHüÜDbí¡`ۂG(ÅÛ7T7Pý”Ûƒv“B!ݔq¾F±z)D"«þbHýåo_ôQaZ_pÒ7GjlîÏmZèi1Sï{~ä‰i»µªZZ`Î^žp‰T™URáÑ"Ð ê®+U}gÍVÖR5ûY9Σ:€WÓ¢ø¡ŸÔ5~àÚ4´Ú—MÚøVîÝÚSé @LÕ¡}ŒºwRqÂIPZÐ ,½”£‘„v$Ý~ Áåú<í¹çÖÆ¯Ï*v8C×ã„_îR©ùüÖg(ÇD-fŽ5-è¤ø“pJ¡zƒZQ«ï@z’Xé¹—ØYø îq[ód‡dE˜X؆ÀŠfð`¥ßï×»ñý=¨³þW}©…ê(¡©M.çž!£Î““pš|6˜8D¾€cwÎ$žg$ÔÀ—“ª\€ÏÜJ¦úIH býÎL8Ë)ŸÛyh%Y0áʟ°gᜯÞ)ôšÐ +ºÜMÔdfE/²-¢åaú» âþpìoçlYH¢ÞŒÝ¸"ð,é=ØdûւÜÈ=Á«Ê–„7Ò¹õAüI!£ü+ø;•AñÝÉJ®§õD=ƅ +ТW¿Ò·PƁ9•Ö—€á® —¬V‰8ÓyAøÀå­HÓl£Ät÷võï ë](ǐ,ýI‚q“wÐ;ëgømÚËÀÀ?EdÞ:|þ@ý°ð.¸ ÜÐäš^IºühÇãY–nûÊüß5  èò/χ-|pÄ©úšÔ¶ ¤·yõÖ* %4ÆÊÇ-Œbœµö1ÊÑAã¦÷”]8(“Cú…£ô ¤Mbÿ{¦Ï±®.òž¾ºCÿË®¯å…(žîÈÂÄ)Dÿ€3¬ *s05 Ã3ú32­Y¡øëYn¿kùö¿÷%bêöì«êرd¾Ñ…ÅŒß!‹%ò«¯¿¤ìX·%*»E»jÂÕ{Œajœ¯[³1qñÂxÖ¥ &w—fYÁ圤¼â˜°ŠçØà•“ík£`_øø¿û¿8ÆL#:[/ʖyˆÎ›Ù˜6SĤÝùP<7́àþV[Á-ÃÇZ˜[p֖ÛÜ{ oÃü ¾k7úJFž +§gPñÕÀz‡ÏúìXÇß$ÙÇJûršWÇr4¯þª“ø×§övì4k uí³ wƒ^5güϯýP?6Yߋ`ÙM,Ûx1TŸ4m“ót—çæš—M×׭㓻z™;³ò2wÏÐoú¥íü¦4^8Á­î,±ÏžæŠÅŽáÙÁÍ)óaj^µ¡~¦Ô!~pÌpOýЍxá¼b˜o@?àóŠ[où±®?ð¯¸þ”¿¿ùWìÖ6jÍ®]º£ÞHýÝÞOòe¨->ŒÏçÀÒNþ›Çi‚Îß,‘qž+C×ãû£& +û«GÏ_»3çûFþæ^VÿmÞrëñóýû®`Qž8aú̶÷ðíÞãú¯Åj¿}î»[~×W×èõòçç^—«÷¥õ=ˆì>}×eàg¼+¶÷¿Ðv^×пù¶¬c,ûwûï'Á‰¾{Ût47äkŸ{¨œÏÕ[)} æðr=—›ù37o¦\ÈÿÊ¿·ÿeÿõºšL3Ü·~>gìeH²ûÒ öM‹Ëy ¶ǩÉ|”ÅVuæ ŸŽ~ +Òº,~ó;ÍAÝΘ±tZdçÕA +0ÞBï>²î Í£;ÍUê\ŦAÝk©»ž­º©× Sõ³§”@U2ýàçIþßÏBaÿ͝»ÃO”ñJľB±*“ï®G‡¿-O{:9n樥©¹{1jäÃ|_3±Æ^é¢JáÅ3ÌY••އ:ueb"z +²°“F¹Óøÿaíz9)°O,Ûæ +½P­~%/Fcq0”wí @MœkCšdÌîLay{Ä/»—žŠþߙÌhíy`©\“’£}ˆüªþŠŸþ‰­n’iŽž:v­Õð½]èÑtMt»÷4_"°T°Eeñ6"ˆ]E¦ð˺)å^U¤_å{y‚u{ތãc¢1âúPTò :/ OÙ?¶•CëROŒ·„pÌî +ÕÝéëHÊ]ã5Q12ÿzÒñ1W´ûïN"è@Ä)Àºò֔Gà¤"{—§…ÊzÛ¡Ýy§^[iiø3ƒÿ“ÇÛã24“Ðãӗ»÷v0¤ +±3BOu/„5‰jE=ñ¾èn i@Ÿ®o„²‘i¢ÉÔÝL«ä²:­hhn™ëEäûÐ[j‚Mp†LUB†÷c–Ÿß¸6exY›æqkbߟ\D¤jPEƒì|xäÝ\V²ŽXkbØÊÞÑ ”Sè9–%!¬AÅߎC•b:‘É‚8Û¶æX3a`Ž>é$ éᆠB+­fG¯TOjï$¸É°(VZ(¢û¿"çÙ'Ùڍ*"VNQÌÕRRÀ™ÒVïÖTÌJ9’ËÅ)õÉä'P{ò¼%dÒð„ÁMpÊö ¥ïµ/…G/]„¾î=¦Kh:’ào]Àú§Á·ŸÖu6ƒ©û–ö :àh:Ÿ§o ôöZdEï"i;Ê[O½/ÝԎri1®à°NAÑ´< ˆ•Ã*“ø +RnóYöyykâjn.‹âê趛iÜn‹i¬œuÑm4Sˆº”\0ÈøµI +› y>QÛfŠÏñ̂e‡ +šæu’BÈîœæPÈ1¥u=ü\†hÈ8T'pÕy3j¬&÷k_TrùSêaèF­©€÷bÕ»fT© Ј ¦Ìù,*ßxâ•å³d¸’6«JøÂ ì±CMK{ŽƒAW sí̌ûNŒCeÚ + 3\šç½4šÅÍI䫇¶ßtd|×$¨«¡žGð)._ +„á-©Sø:’énG޶ éNo?pœ4¹ô¤6w“éBz|‹xWÙ4“&ûW…C'”Á©K°¼/’siÜ ãìÈÏvÜböý‡EÏf例›K’ú.knKè¹¥¹/¢ç’§é§ˆ6{ºKQˆJ46Ο'Â,½pc.½ioßÝæðè½t_Ї”<Œò‡¢/tЇD&Šz®ˆ¼ÑAˎ;µPîFö€‹då:¥QM)Ùal!z  9{ÒèlˆÂª“]&àXø +[(H8s=É[a–Š5>kRšÈ©XiÌÁ¤ßX‹¢¹a%8Œjˆ­@8U±È{’@K›ÄWdòñ7·mÙÀ&“¢ˆËøð£”÷âÃä’Ešn¨|N‹Dj^¥Í‰#RiMœt2 êhÅ*uî‹gERœ?S8§iÚæB§“Š“‹ÇæCÍ4Rz”™‘E¯zyΦ.ç${² v´ѐÒqu4± P '·Ä ¥F^×Rû2>ܨ*€¢"#¢caþ«¤ªhªŠ—¾xj°øK;‰®–.âì*©_O0vÖ)—õr2jË1.ÃÛ`ÇðÝØæ-€ +‘¢A²`×UއŸ.Þe*”¶us¢½v\âħ{È!?¬d§ßl$¿—`4.­ìÂ"؇¶0g‘ŒªrG÷ÙsWŽ4íf–× [Ë]CzSõ“‹»f½˜'Ú;GgV §ñ³‰®5[fÍtÈ×J2ʏ÷âðchÄÄZ˜²¦žî)£Å±}Ö„×!­9à +…ÙAÐ[$C)€nÄ+Lqœh¶WTO­ƒJÆO_¯Eà-ân#Œ_qPr@n0I¢•sp0sàß/ÔÕêûÃyÀSE÷®ã’°«õžÖD5ï2\A”iw/xÝfÚo²®k‰ ì#\wê £ì@ˆÀ¼VÙ³T¼`C½o‹KÖÆNs²k¤6hD{d4ÇÐÐäØÏÚ-xvâǃ¢dPáÁ¢h~Z("Ïñgƒpɯ¨Ðò*^û§&0.½üy<eF™ƒB]Ä «~~¢ ¦ü–_²”„ŠèlAžÖ†Ï#ˆm9ÐFùKv_´AW8[TZ± —ôR8osTucÀ´Ez®šŠ6´µfj~ß~Ìq +1>Ý÷zµWÕO·«TªMò·|¢ ©nÏÀxŽL^¤™Ìe ²ÿ¨0³jLœÀ,pÒ$#Ç'¶IÜl)M1s< j<ÑEd<ðÑeðâZÖýJ¦a-²¿ƒE.ü¨&ë"}¢¿šç±õ‹ çt P¾p%_¼·Ïà\Yôá÷Z×û½*òãWF{VB& J +â~ø—ÌW‹ºãÃSìRíôÒûØN¸t©^¸Šøûƒ ’?qÇWö¡!z`¾Ð:`‹É aµb_N#\‚'‚ìÌë¤ +·8–ø™ÿ<©œÆ½Ôl7tµµÐ!èǺPw ýÁ›j›ÜvÇ¢ÿÃ5h”–‰v%ó“A®yí/¥xч‰ú˜Ã%Eåëz'Ä'9©»‚!ˆcîh.‹Œ*!ú3)U¬!ùá1˜>{C)7Óõ*­Ó/ñ …ÿlŠYÿ/nK@E1‘оf´>+¢©Ê_¦×yÀ‡}S—ìÁ<&dZyðP×iùâ·Ò4[¿YA~)¤ÓJ1òŸ`@&׍RkV‡<¨—i«Ä†”š›ÂþÈ5&'}{Ú1Jp@$uzؚyñ}t”[å—‡'+JÍØÌC˜&å'™Gc¶.N_ž:›^уëú` +‹M@¡ˆ³æ ²¯Ç•,ˆ®Š”¬MÔÍ­#ûÞÝ\©)”Žó*P=—•_)Vx$ƒœS„O0€Y‰Åä{^B ,WàÆ ,Ïþ²Ò²R_TžGà#¢‰&P.ž|ñkIü”Ô×%’Ï­†ªãD"ÿ¾µ÷NÄsäF.ß2–ȃ<Ññ¤>ÛÅËv‡ˆ$góíœKÔÀ6ÊОÝ0 ï² CbAk,iW9íŠNûΙ|ÉUՃ£‰6"¶6{¥ÅõþuqÜ”Zˆ1Šâ ­ƒ00"ɞ{’LóöÆû(Љpzq¹ÃãU÷8Ո>5·ÿ…²VÝxËcPc0bjš ÿ,m -+¡<õπbv Cÿò—1v'ïo¬^[…µ‰ƒwQ­œ¿ÂìkAB’yå.€ÔÔ~?("&#=áé™À/uS‡î ûHÛ帤`‡•K§whÁ”p1”ˆ~т¡Ý·&26ÉxPSU@öaoÖÚÂöŒ.C´ƒc¯SZ!PÏ-ÉöæE«1%Ö7GŽRs•(eL]³"¬!Gû¹.zœ‡±“`¨Ÿž \oü>Á‚µˆEôñ¤ÑËɖ¿å(–ï8 Iš²§Õpk+*ȨÊåMòQOëËñø¯ç´ç©Aöe'³Ä­ð?çĬǜ”Õ´ÉäÇe£øù¼™Èüj2”!µˆI~‚‘æôº“C,]@Âñê µßCIòÁí›ýlLø”®¯¤ C¶íôc sŽ(~9véñ&vàÅþa¥à  P"Ÿæ€B? ˜p¸©zºà/Ê£p«½Ó½³y ÷M¼{Ô÷L3A^ò1)᦭|†ì!‚„dž÷EEû•bòÊEÕAímåB/ˆêî#²tæb[u¬®LðEŠ5´_ç멨·4SqR ɏ:4~;÷ÓC?#œÄ…BP¥0ÜlˆÂ%d¨‚>þ`‡/ÿn8èrÿŽ]_]mKr»¸Ë).ßۆ +T¬ÌÇñ}6P¶å$YøVC‡Äí¢—ƒ`/§0~pY’¹/©t/Os_¿ S[5Ç÷d>C¦àBJã–nŒ§O¦9;ëAÐfƒÉþ€€B6D …@$æAû"ÅÒÚRÖ2«TìTH3 +zÞ¶¼®êîÙx¶Ûn£K‹m’€ ªˆ´±V¯Ã€U€÷ïß¿ÿûìÉ&I$ÔjóuïyÞòóo;Îò÷Âï;Îo9¼Ýñ®ó›àoƒ»¾ó|MçyÍò»è#}÷ÐkOv²Ûm²ÆÑ²B0¿! ½*\£çCJ™Q›½yã*B½i^l§O†S˜õ@Â8KԊaNðŠ́ò*áK¦5Ë.D"uóljáùñ>°Y۟3{*>A)l4Dåњ9t{ò`…v€ð‡ TÂà—¾cúr±ÇFmŸe07W¯µ—ÀnXpÔSz@Þ£Ûϑ»e݅eb¥ÎÁ)6Dí.c]€Wa¤€PۈTeÃE0њ¤È€ž‘]gú OÂÑ +ŒÉ­P÷ à¢#&b;M-èn™ÝÀ±X?õ>°9þº›Gɔ_·ôO+Ï»¡DÒ#È.lªA{hþpœ¡ŽÍ´ºLH^Eƒ²¸fÈ:•="bׯˆî\Uø[&¦uåY†àý¹ï¤ ­RÜ(ÓȏRsòé,]@¯P Sæ~£“pT~3ŸssáS7p¬\6‚Ç}¥’ ù£½>XjTÃX9ôF³\Hjg4·‚ô¯N£,9n¬þs]‡2—“õêEÂXÞïM^Aáe 6w ²ëâìÚ n'’äžÍØ'Ùñ€*±Âxu¬ +ÊV܀]Ì+'è"ò“rSÉ© :Œ¦B–û‘â°Þ6*çz2{Óã™w´Ø'Æ $âÊ÷0`¿‰h)+@»…ÈgDø!S·´Ý†­T;Î5¦ñKuî] ™Íxz¹ eëPS`1ûì!Ü%19¸B—°`[“³ºõ6‡ÎâɭÕØúwü‘1é2¶ÃÝ™é ÀKeq¨€¾aBœ/'$f7ºÎÏt61g!lb‡õüH1¥o(Þa#ï óÊBð‚¦ì·‡:î[1X„}Ï*ì2f'åÚ÷7˜¹–¾Lb›IG߇Ô|ÀÃ¥× 'ûpSöà%è°švפÎËÏ¿@°S×ü^t½áìý¬P÷am²F«"Ël¬DgCmIìïr­‚¥”Xµ/ä ª‡©¸d1ªá|ç»À»œø7p—¸ÕêkEà~©Š÷Þxĕï~GJ…$âóÒӌ‹Âh÷™V!RÏ1(½Ìá"ÆrȐŸÌ 2БO·öƂà +!ãS?D‹É&UÏfó*Ë#ÿ°×µu½ÃW^‰‚V¢Ä¶d<­ÆŠ}>tPv$û"‰·èBø4sóÊøb K°¹‹Œ¯ëÉöŒœoñ*^¹£Ãð×0ñ–&=4<*’ªuM°ÛKÆ*dꖺà}PM°ñ^qù„]d¢:Â!*ç^@¸²C–I¡+ú¼s:Ù¯âÍmIsª¸{ëƒT >þ9‘ª&`¢¾¡RÀ45ŸÌLK€€;ú௠½ƒ®;$± Oã/°7@Mˆ;îQLÇ»‘ëd~dÙ:+qWµ~ÉÆ!G³çAG84Éf3-΁Žl2žÈèXÿâs c.%”ížÌqAÓAZsAÞÙåZQÀ‰C¼ ¾%&ÕÌUn¤6¾/èåëœ8özë.si’°H\š¤… àœ¥ù9Õ/͞¨!2®o"_a"+øø•lÌÌnjkò¶hô¥(“›”×qIÞ²§Å¨ïvéÙYZ(ÍPu˜ÅM× ±ç#¼|ÂëRAùH¾ì䇭Ý<)"1ögŽò˜7èŠy¯JF M*æ(Lº½ÿJŸjš®PRE0GӀw^ xó^ž{ÙTÓh>ÿ¼ˆzϔ´^ê bQ{‹?`¤¡ $wx½ØŠ)9îüÝ!㞪މŠ÷1.£„”Sæ¹ÎETJl!/3ž¥¡¦þOœHx¤þþ-ÍȞݜÂ?Œr›óçðˆºªÄ¼gGÈÒ¹þPjn¦ó•i^[áêÔý·C-V‹°jx.¤¹ðáÁ¶_Ô³U ‘ô†Ó!uìP.¤úÄPËVH.šÕ<õ"[?jD¶$‹AeʺÀµÖ7Ù¸»TL€æÄt-4À,Þ{¾ÞåJߕ%Û2ù{å±&áö »5P ~WfÉjÆÚO˜ÀÆô2WÖE٧܍'oÚ"­k{ Íàüœ£:·ŠÝºt)vëÍ®ƒ]k hÄðu`ü\CDMbTõk5…u«ïí Ñ Í×Û·¶ƒ@…E]ˆhÛA™BƒO«¶g¤âæ ¢dˆœgŒ™Vc'œ5|³ ˜ï4îˆà +êޒ©#v¶O.H +,® Z8Ë7˜…3ŸûüE@ÓUÂv<Bðùˆ$I0=4ý X6Œ‚zãÂÈX]Ì+Ã#Þםƒ WÓLx^ó/ +”¥í¿Á…‹f§gO ñ2ëa®vؘîú† ¼C Šº'ó<…`#ï–×+¢Å(¢róÕäãn‹Kor|ž2Ðb¥ËÃæ¥‚DÑâòJHÅípKÍ[px%Ó¡õ8%Ýíô80Këþ¼~›¥®Uµçñ #ðÏÔ¥ÐB 3gBemI“þ,*üõYŒì)T@-ðzoÀŽ1³ò±Ä,nl\Øßq?¯KJ8šFI\d ù¼}ÁpuÚ  0 1#׿‘ë̬ù"kZ_<ï +Ž#者Käžw’gLµ>Ùë¦ÆN´\²×GƒVÐÇ”É +ŽIÃ)§B#Æ©ž-ý_fƒ“zxŒI´x óAØØïE×Wú©@¬J@„Ø„7¨¾eÞΛ±Ÿ¹43&hhZJ_iš™¹ui¾/N‰ØÚhc¾„"uÞ\${@Pa™áOÌÀG`œk±YH‚0לù͜ʦVáÚ;Õ6øÑ u«Âˆå~BQ»Ô¬Æ*èkïÁA³u¬‚’Á¦#[EZ¤kZ¼ÖqÑ/»” |¤Š°Ò…§#ešêO‹¯<T}hñK›‘Ó,J<‡;E³°býŸ bž¦Ý-¯&M[É&W:*Ó :õÃ}2g¾DNx¸%pˆ£¡ž†0Šýk N·Ljÿ–UŽº<nùÚÕâ¤ô›¢05›:Æ 2n…O¯gY_Ë:ÉT¢ºÛD5³ªˆ‹>,Çã+Ȋnä;>é.”*¢ŸpªoÊG½&z ƒ±W U7V”ÞE‚]B–‘ÍÕ¹Žkz#—!ÏdF¡3y%"J¾©ñ)\b–¹'ãn]®Iç}ó2œëQµ -;ym³woBÀþ)HæQ¬xñB åKÂ*+õ·‹zۉ˜t¾ã4¼AT /¡7á¹£}´Œ‘üȚQäúìm¬²WòÁ–JùX¥d ×M¹¨¸÷)*Þûš•\±¨#l);ï¦Ìâ°ÙDi¿¹à֚ì0§"41‘'Ð ¿ãàN¬É™ÜÕB(r©¾åœP°P¦G“Ò¹:þa¬º²Ñ ÿÒ¹?#˜j!þ];5U%ÆKïÛÕÅ÷*{?79 Ûšì)þ£Tg=°7|-`äý““ljM°¤ªV“|”£&áBòDÙ¦}‡?UFø;Iu›Iº×:h=(¬gŽ2·H“¤\`2<«%0üKGœÖºØ…54©£]R´êƲ1|•ÏñA!öÅ3U$æyj@à37Rb$º’ ç$Í!ëߏ·‡T\’uɀbò7çU‘)gîO5+ҟžbQª~yaÞò½/q‹Åð‘VûOgV€Qø_5?8&LxŠgSÅA..¹\П6îzKÒêÛ¡áëCJò¹e«ubÅ)P6hö5á+$år܂6Ê#}J-öVðeŠ:cËOIÔŪâyþTßkžhÍh‚ k ùQŸ– ÿÁ³½ªŸýê}— †3¯â¢û-Býê²pï])0C¨.š¨Ò›îÊdÇàãr“\.‡—6d¥¯°EÉÚpi½Hj°ð­i_e¶Û:L<ιyÆÝ>j½úÖ5ãcV=îî“=mðŪLºÖnC\6',Û;× <ˆ“V‚-µ6»‰Y½_¨ÉÃMjÀx£ñ2ÔÓÀªEá°T´-á–H£ ¤w!(ãÝQA‚@Œ.£‚¬¬£Môè«Sa¦Ê ¥kՆk—ZèXd#E†¢ŽŠÄPÜÂdà àÕæåíkYË4¢yµ{¤Üò]m +Šwï,Bwïd>0L­¼\D¹ {GÔ-åk¹Æ°FSùxX? ā*¶Ã•žŽPï³Îñ’êg(l§Ç˜!þªúv!b0 ùWa6g‚Ï$£àû°Sl–6O$„´¾yè©X•2' L=ƒï‹¯øÅjÀ­j +µe™Ç…“; Þ¼í%l½$*йk¸_Ko ”)^¬)6î!áªÙðç³­vú{»·Š»ÀyÈx‘vÇ]ÐDjžåáàäï%¿œ”‹ðƒa,ߢ6P4y2Êd¬ÈkR×"†²i•²an¡8{¨OOu ÅÝBq×PŸ!PºçùÞp»ŸˆÛµxq 0ò2G§³ËK/Z¼ó Ë03¥,ÀïrF„û‰f¶‡tf$©ƒ˜$áa5éJ.ü[’‚‡´=@ЕiM°’5`ԕ¦ú×õ~TÒgù:ðãÅ­ó²IdI7MÈ<¶Ž¾ Û\Âњ¿JÚ<4œÄžu‚ÁòVËÅȌ֓{±**7Ðȟã…?Äþ²oG‘&à ° çf–pðñ‚YÃùàØXÁ·Ä 9ʨ|Fw#t Kí}Ï·UX”]¯£Çé\¿„<ž”»´¢×£y wefhÀ=ð-WlÂWÂo¾O¼Yˆ†<Ä >¦g\=ŽÚcƒCÙGž€”·f4ÞiÚ! ïל&Ao›]i%@ò/°E¢Jòy£‚ïÖí¤ç7^—j|՞/„Ùöž)³Âê­uÒó-žng^l›½Û”ð….)tÊ4ïKäǂ‹Dè„ ˜kÈ5G‰üáÌþ|¶“×%iL)ØhÍX5¸Šb‰¹´ÎØ|ê\p‚œT^Bж„uš˜ëª   A5€†¥xt`l‚u†§o`“ êyˆŸ¦ss¦·çW*;ˆz4—À?ì% â¾ÛBc#Õ"÷Y´3¡ûv@ïv:)°òFºØŠœqx/Àîó@k™NìŠg8p€¨v÷Ɩ[qåô|©w‚V­q?«<öó@S‡•pSÈåKÅ¡HAŸžôø%Ÿ²¡ûý—µÊi!*¸ø2,¦ÐǞ…¢Tø$Ý |a69®¬þŒÞ¼õ¤±cJ&ϳü 4_xÑVA5éø–p Ÿ» ¹¨šì¬ ؏œC(þ ›YÖ։)Mɘ6’çj©}-½¥gP TÅÒ´ž‚Qm¢üHñåuôƒöÍ_`^¦…2éýÞ!¤ÀЬÓhYá%ÿ(¤I㬠ôÐ1W±õ•wÐCÎ÷IŒ­BdËAîD,Äôê°¯r]²/~‘ó è*¿ÉÀþçf¸C²LمÕÁÌ-r{S‘&ípæÆ¹;=„7A…¹UÐQ!¼ƒÎÔw0Ü=Æˆ³/Š\»â‡¦•†¯aŽA ž8šA»õ «¬Y"@ë!)Q-d@ø +LI*£­e‰«Vîø«ånôÃê©CZ +´bmšÀ½É+!M¯2äo¡£œÒ¡Iàì!¼$K¬‹ÞæPWP>a‰ÌH+lîɒ. Dè³íç9zO’&X­bÉßvdðÄ6¦@ƶ|Ö%üI%FS2ïŸ}7¡Ò{™‘-üà +Ißù@”ïÄ8)j)a² ÑøáÚÁ ¥í`fž²éúƒÈv]û£ºÖ®Ä|¥ä¦£Cà`±Y¡Èh^çŸÞ³3’bJgðÆ„¼{·í‡O¶$–Fÿ¤<9;.PC/G†3–[éçڐhhEÆ»¿äŽüT½*<–û)ÊõçSyk"¨†9³3¹½wÄVP¢œùÁt·<ô˜·w€¹š¯ÂK´å׿'­|i5 +XyðäȪ^=Ó¶Ç¤§ÏÈÉFñÂX ç€šË2 ñçšÑæà¼Œ·à1€WŠ<6£æJ 3”ÆÏ+‡Á>yp»bݦ𔾢žŒ,?Wô‰°`™ŠN‹8}Ö DdX9˜ÃpD§†ÿéP›Œxšha‰ܦßӁáÙߟreGE&”>^“Ïs{ÑèTyàØÌ†ËÍØÍïPԈÀցSt~ó›Î7ƒ½X¤@Z‹{ ±:Á¸‡ôXP'qTÓQßjejƒØÍ~¤Qa9[§¾Zp µ®»"±Ï]Õ‡¤m8¾¯Oïmº,Á4¹{ECp'§Â1‚Ha…t@hþõŲ—\J£4ÉJ¹>Ö¨æÍf-)Óiz,J£ÙB©(„}‘Bȵ©:„ô@¶ô$l|Ž',tI<›Ùa#amÖ¢[ Cí†tØEX‹â„)—ªcì&‰–öæ‰t»7ïç›÷¡š/ 埚-£ó6»GátÖ¾8Vèù¥s׈~ˆ”Ι=²ÃÍ*3W7€j²&3F5É1V±÷¶õp -ÞWÎèÜÅøä0_‡¹v¦ #«1FlЗ–iþ"d‰ü)<ØDz3˜'ª[»ï@©þi`Á}`üeïÿDKK#swV`µ…:O=ñâCÃb&-Woj0…óÕÐi[ÂÓo¿·j"á,n +ü^ì]LkkԗT=Â?ãÀ‚Ã.èT:¿–è7EÉMߺ­‚¶+mÞÆ©KLšóX…‰?̈½D´UGðŽf uQÑMüÔ°K#ó`”‰§'*‰'n³Œíp—˜mÃlb2a"[.UÎ.¶eæ§Õ6üd¬XwRýؘÁP&g@ŒŠô*z¦Ùó}ª ·HÕúÌÑcÇRÈ<­çúÖ>ë6Ãô{)Çn!廳UödvU¸?ØÊñ6cÚ8‹H‹§ÍQtÁà„„KU¥|?~ãX\œÔÉ\b¼6faƒå5Ïë—g^¦4Óg;IµKºø|Èn¦÷HðÀS‹r”¼šs®T¾zÕîÈÒKÙè÷[Eàű¨TVwÕa(ðëÑkã/jC8¾/†´¤ôýZ­À³î;üºÜ,¤'|i÷lŒn"Cý>\¤¥ô!}|À‚Ë9§Lšê_%» §“z +[8·ªóÕ!RO!è]…RO<ÿì]£uicGžg‘×ý±±t¤ÌÎw¶?1yh¢VI«Ï̦ñI(öÏIHS-«ôbèôÒWÖ-T¬Ð¥êÔw1[ȋbàIk]w,ãRÕá +]Ù l RNÐ +MfEK‚á‹ö¨Tp[=â€o +6ÃÙPd4W„:žþ©LîiY_гՋõx…ЄuÝ _fa˜´„í˜Ë ÌЋү–5G߆"5¸†¬(»ñÆ M”©…šOò¡IÒ/TH÷Óá`Öæx•ðDÜF³X%‹s/`š-8 qmraú1lq[Ëc6¢( H„×<Ÿþ ê³ØDyo‚…/Þ/nbÌ=¤:«N iãÚÙãI삷/âi6„#¬Úm(V•üBÓâ òÎöµü“›ÆªdÀ[ú¢`†Ïª ×¢&Ï>ë¦óT´ö|¼†6¨õb¶aæ¨5á´‡ÝBòÁ&ˆz­3ÂÏù;µb3¬jl„³-è܊M¹ùÙ"è‡yõƗQlîæ6ÔÓÔÏF×ÔÒø¥ë\ Ä^R†ÊMlʇٌ|¿vÔ(°f€÷k7³Eï³Z`î¦A²)7d+‰á%Dp§-ªä,ÞL¥ãÔFõ–÷¦>hŸîg^W©Aã²Ü ‡{ÅMIEÝ¡ñ{¹×»%5°“Y¼Ædšù#ªŒè0aäˆÑ…fÌSm7Ê1WQ±²ž3  ÅsN‡¬‘«ù4ë¹²@‚‹ÞrŠ»¼†£; é:ic=1ŒŬ‚öñêjŽv"-ù Rü-˜ð,ËïF#=²k‡­‹ÄEðV<¥¹o‚9*,*ìbÁ'ëNqQC-Åt#™õ_)³Þj~¶š™é}C #Ô]Z7pž¤9˜?$"G‡Î†—… Ý[Êb_緎 {¼|];A‹¶xø´“¥$Ýþâûþ/Yò¡>1¤ƒîÐ*ý{Òá–D-rXeÐE՟g‹B~£kÛ Ÿ\Î.©«ÎCW€0?Aßälû<,Ï#Bãê–([µY +Š£õœ÷"›CóS ΃"Ð!­ ¸ÇùJì€4£€ÅË*݋ûÀ“ã˜ê6ò‚X|i öTJCoƒd*6JÝCÈ9æ»OpÝabÜû:€£.Ñæh³'žMÈ¡s•xÕ¤fR£ZM«9vò¾ëׂLX— +ï¦ÆÙºÇ7ñmN¾¾ÆC)¿RU[qñºAY³.ƒhÆ?™£ôycâR5ˆ•Þ‚bhÌ +*Û4ySšÍíÒÄPUðÑò>6’º×~mÜâ¸yš„c¢B-L†.©þïnáö Š|Áp*s: á ؉‰ŠžEèÒÀ{ZÞ¾ ¢6–‡ à¶³,-ÂóøC¢ØsÕ7žKmUœÊMío÷c¸¢3,7¡ÕÄ“êíô`Î{)âoÆñ+U®°Åâfh-ikæÿß2yxìRôÒ©xÝM5ñ(yIu‘rQw“< GVSä0y!£–:.Cð×\‘Ëœï¿ä +À7CUå }‹ué1£ò­Ê÷l>Cå,ðSì@ôÌ»æÌà"&¡‰ÜBш:E5$ÅTÁ•[Ш{%øuÎç_cºRÉ&·ÔÁÎ苻óü¤;¾ +Qᛍ1H©\?D^tÜgæú‡é»ª.кMõpçƒú(,ªWT‹í-‘ä°xk'¾À›÷é7<¬Û‡¿TýˆJ±nb2ìü A1ÅIécª@Šö{wX².—µëÍþÛÿØÿÞÿ´Vÿ³5ÿÝs9÷ýn¡8'@ç݅“®K &|:ÿ¿$:þYÅj½ßT2hP´6zè{óHTØ¡¢bÌ<ªÊŕù86Úí`¯iþ9`ºæ>)˜ÌiÙJ!š|¨g&3HðûcØT.ì„N÷šî1MüN‰ŒAØ]EÈÜÝÔ`ü¡ˆÎ6Ý«¤â’˜{æl$xµv,žêÙãב‹€ôÀbà=(Œ«®C'ò0à,f “0Å:Wm«¹éæSËrçŸeY·3xu·C.R¨.Sš{ùÈÆïÁ„r÷èñ·€òaÏv(âêÁÞ¤Ç'ê±À׫ƒûèoÀ‹¿¤“¿­ïzùãìOvŠqg§6no³Ó•ö” ÎXC‹*'¸†iÃêCc<ï<`#Ë)Âo°;O€uh›‰ËQ²mò°ÓÐ _óÁží8X–律'¦¾»'Z» }AÅEɗƕ ÙÏ_iàè„~Á†LZÅæÃNÅ<½¹äC[LÙ"ï*D³‰.@ð\´˜’óHÙY>Bðړ›>飮;ëëŽÅ)p¹àa(ÌG6›*ɵ7rÅžV$;´ ·¶ÙDžÂ|Aom±^k;MܯJÞ÷ýÃØø…½@ù¬G¯LÙ9V.Úy(ó¼ ,ǍkѲn÷hC%º ˺‹Ue>K‰à$ÐV®¹ºM ;Ntq蚩š W›±lÒúJ¤³¦ô4`os/šòÑ{8¦6¿”¡–¬[)S1Û°+˜/I›X¢ˆÍ[E]˜²ËÎjäƒ%Z)à7Eaa{ +¡î)q¯õžîçv`xäLÊï*‚ˆil‡{`«`gىP¢‚Z'ÎÁ¼+ÞXûYÒ[;ME»'\¦=Ú¦ÁmÄÆm“¥I%YêÃÒE_ðìê jICØÒK¥žå†d…^h]b?$·#±CU«…ˆñJâ=tGêù·Ÿ[»ïú⛣íöÖo,î÷:ž…øAFÔgÄy˜8¤ÐŒ|ؐ5[|s(òÀF Dšo9—‰–ƒ¹B…ÁtßM¹1´iA:ðW'ÓYô E.u«úð¿}Ëýø_*®³6ýoü0¾*Ó úoýa|žWöÞ×úáÑå~ü/™·ÊüŸÿ0½m‰ûñEÕï˜Î¹,ˆ‰Â]rbJ†ï +5©"µ€B“Z?³öß&0’Ò\s2ÂB@‚V.t[¯{î¹7÷Ú<ëŠUÍBØôj[`tÓÚ2 &æp6JåMiÁ²H5¥<ÔnY}“œbïdå܂lôØÞ<Äh¦;šñæÔn~Yüy¶i9]j£C ¾+VŸ±{;K„oʎCT2Àn¤ÄÓhRìu½ ÿ 5-©`ÝsX9×ÚÔO\€Ž¹¬Rô_÷ï°+›¶ ¥‘Îܺï³X&Ï7%vÓÏ +nn[•à|±7Ÿæ~½dgÙ©CHL1Ãñú8B«Í ûQu.¦…@<›áZ¯}Òñ¯= tèu›vÑ;©WÝ´@#–°hè'$¿€¨÷ IEø#üñEáeªÂG›Ó)kÔ·„KV®;Â$yÛRàª賉VâƒÊÿÎlP¥à#׎W¯„í;áŠ[E66ð3EXÆYð±ƒ-Y@Ùï »(ÔP©ôïhwžaw‹ïzC¼"£ØŠËF[d¬ïÛAÀGõÞj‡¡ü)­R_»:1̃ÜuHñ¶!äQ’À_1ȆòHÈK‹¬é…¥ÆØLõ%õ©7¦wÌ1è +ÉGÂ|8¤&<.lXÒXÀÃÆ´›ô¢¨#wó=ÇÂuÂSè¬Ð¶m†Ø”«¢ˆ â"'Ð."9YJD#x@k«ƒÂsÊM[ê=hqFj­@aaŒ2Ü„=S]kã¥قy¤ m9¿Jü=‰ü™õᵚáðN59QcÆd#9*Œ|ð#)o0ôA÷zÿÙæá:Î ¥ÍRÅæøasxÛÄzO¨dÆýÍþmsðÄn/oôCyz°ìðõN„álRë¥È*ž-…±±:(t€sZŠ.Õ¿Á)¥µ¥Qμ)’Á¬[×û‰^ôéùÞu僅7Xƒ‡öÅÎ.§Çç ¾UزÊd< äé´F>sáXÆ8Å~Þ5x=3fW¢q¯˜}T]Ë@Öâáaº´9®å¿Q=Ïw!I úõ}‚>ï׎éaÜhA·ÁÑvËÛ=dcqÀÅ-㯊•WGn´Gz£Èó!^>™ö!ØUýN ç¡\ñÕżñýMðĜù!ދ0á༠á`ž>áPžs¯òÌÒw.§Jæm)’®wØ®½S6®½›¹lÚºHÜðRÇm]+ïšÁÝ´¿•ÃÖQÇjÀîñœàAÞŽ# ö”œá´k79¢ìtcÛFǹ˼Õ_Ëçzs“.Ç"Ÿ;ØO–o±¡Î¯z (øöÀL€©@¬ˆîÝêŒ7=ªepWàz݌ÃyË+w¾<¶|°³Ž/¨ã3ÊOëÜoBéÇÊ8"4•R¥y©ûLù¤ÙùˆðBˆî Æ3jjùáÜ_ú¨s~nއ7ú$I©—¿ì¡ÍÿRô­âÇû´9¿³Z¯÷hs{E¡:xÿü£^;ÕÝ ~K3ÛÚ&²ëãî(hþÔ4 ì=jM¹WwC@ö•hh˜‹z{þzÄCúhhßû‘öŠÅ»‹ƒÛaÆ8v͸™h¢ŸZ‹Šÿƒéÿ¾ˆAï­Q´þVóü(„•þ脺;£D äG,L2ñË ¼wüPåòìù׏ê¡üVñû¨exýÔ?xþ…ŒGўÁcçÿE ³Ýr¡#kµ{Tbãpo‡ÔÇ^cnÜn·ç8Ün6ÁÎÆ«¶Y0v ª‡’v¿œþ—†= W÷hZ* ç –sþË#è*qv~¹ga'ÁD®Á/Å® ʾLªÜwisOÞgçµLwl+n>ÔÆLÁØïÁ¿Qûƒ üŒJébcAdß¼pÑÁ¼6ýg÷è7Ü:V•ÏÖÁ ®{EG÷Jï¢ÏÝ絋Cžƒ s‚©ßíþ9bÿ†Öìÿ +ÿ÷ݍ. Ïëoh^û2û‹NŸÈ®¿uÒ ¯ØËêÍ:ÿBO_·¡-ö*˜³\ÿ¸@öŠŠžæßt@Yý#—IŠèϜl³Ž†wÕÒ;¾~†`-sG <ûͨiçôp®éRCà /ùFk¥ËÜ¢™{”R)5' »lßsâú™7ë€5?ق¦ó÷¨Uýµ ³9ŽAЦƒ‘ Ñ£ÝÞì– ›ûlw ù¤©¥Õ\PÜ»’‹‡pÇYûâëÞìÚÏÂv—þ‚`ÿø(a9ôë%ÔҍM‹c¤¸ÐþøÓ†›Œu‚˜Ð :qA[÷À¡dw!Ÿ/jtý ^ú!–hGöØOïîÐü¿z‡ñË &â‹a?Àǜv‘ø…¨}¼/Ÿ¾Aÿñ÷†Ð}}¾|íû®Ð7sBüúß÷G›pÛEÿþÆ6·rä_çekù“ º}‡¼‚ëÎZç‹:s&Xz£~óÚk_ÛM7ìGŒôÔ&Löÿ<ÎÍ/ٙSo›ö—heJßڛóæ¡¡æýþcÙþi‘빿v&ýçLc[~ ¿~¿|³IܹŒkÏÜs°ž=Bƒ>—âÀï‘ûׯ§¡Òß`ûCèúß6+óa~|÷{ašÊúXÿÀ×ãûrÏþmf]öKþ}Ž7~ÅÏãÆQ×ÐöOgµù 6æ†oÂüuoo?oÊßxÙo¶;a#õðþ¼6'‡C{á˜U\:ß ¥6á±ú?ð¡µð؍>ÿMü$zŸðÿ|?ß÷Ãýðÿ|?ßþþ£5 ǧgONҝyú|å>zžŽžšŸ½§úÔþ?‹OãSì)ê©ö”öûÚ{téì©øôë¾Ë?³þ˜=0.Y¾v`·%Š:]*¸_1 »êõV¼0kµWe`¯?@|.êë„o­—úþÞo¬­×ssýÆcq!ö¼Û¦™î±w³CåðøZ_•#tÌ$à`ýgÿÕ80eý©vÐ3µÀ¨ÙÀ¥?Ĺ@çÿÉ óýƦ'u¶¿±Q³ƒ!Ѷ3¸6÷ ¬Ÿílâ:4]§È'ž+çáÏ~ƪÏO˜~çÿZ£gŸ6JóÆýô(~yëð›/±—ّJHÉæ8K|éæ}Ї0GjÁaæúúu}S ²y …¬(È7—©Ë¬ÖþòÈÛ1‹Ñ`«~t¤õëeSÂ͚¢¬Éé-Œ‹Œ-Y=`˜Êxæ 1Ž“ïɝObà#ÂÅkÝ0ÔA|yZEMFӌgMÖ~@9´WC^]i>Hi­®@Ï:ù©}V½­·Û®À…½}ï´i;?ٓ&I$$™ ☦ A +ÀÈ.}3!3!‘ h¥hPIá£êf(P|äpf}rÒ«}K¶¼£xÞW·Õ|UjÉ +I5x¨«VZýZDŸ¿¿¿ÿ}öI’%UKo9»ËíÝßnòów¡½-ç=лÐÞ¦ô÷¥»ø½-ëïàŽ÷}ø ¿‚­8ÖÛmÚÆÚ¹®všâ0k ʵwÚÝWD“çáLíñ Lû@Õð ;¤¡¶ï֜jª–3+Çö)q­Cv'e+ˆN¸ø¯˜É49Ò‹@+çª4¦|mÿ!ÈЄÉa¬ñ<ùNN|‰³·BjZY󼥸Ϛ”=Uua÷Šç³Ú_ ´†Úù¦ö3¼ÃúdånÂqœÛ_NUô'òÖҔ;XÝëøóx(­×|šŽ˜5õ Ᏸ– Œ)¾çñæðk3¬?-L‡N‰2æ%HV‹§ø*NLÚ%®y +e¼;§¡v3‡¾)…H.@’¸‰ý0)ôÒ¡p+»ð=)ŽÞAߟŸºGžüŸá'¡Ê`,rïM÷‰@䛧yµ®mAtÁõ—[³$Õ,y¨=z£ÔK]ýFf8ƒ`šÆph\W¬Ô nÃd-0 `3f9*s£W¯¢öB³ñ¯v}ޜ"D +çŒòrŸ#¦ƒïÝ­Ýø&ÔRVD+”¡³ÄÎçÙêv¢èÓȺ>ě£DM5ÚÇ(®ßî×KéJi]Gpbø¦±´¦Ü-3ç2ö¾ª13¯´}Ù¤¹Û“ŽO™“Ûøÿh=@È]‰«F%%b15Foß¾YÀ´òÙT ¢Œd>ÄH7gˆw—†w^å@Ÿó5ÖõKhLï?ªºÐ=·ârÜ=ÝŽÌ#ÖkÁ¡A­(‘åÁ˜"vXùdÐz( EÐ8wY Ã;¬ÒaßÅÀ9ù‰ˆ ÎRº3§~¿?Ž—ö5óˆWŠ*œ4)g´NððJ¾gÞÐɃ uä2l'*¦p[µÚjGN^²ŒIŽ ÌýƗHq»ÎµòÃ5‹Š*'ŠtqÑ~áNœ£ÒìTÐüÍE¾xýô^xç8Ù<g¯‘#®w*tÿöZÿ™7Ü趃4A§œ.3rìÿ +]DöG*âÈTakn;ÚãÇ«Ó+*9|óúdp Ò·ÊçÕò‘0D,9Òk©ÓJX{Ç6·øó¹Z‚£™kC=Ÿ%JýVÉ4Á«¾'z2[€l2ö2_’6O\®„| [åÿ˜@¹ç d=…cðÀ l*.“óu™n¢>yÀã¾=2Vz="ïÁ,44ßjñS¼5yoº—¹Vz¼^R}§ß v‚¦Y¼Šø{ÑHnûf¥×<ͱA¹ºÐ·mÜçM<ñÃÛ¾uL¯˜>‹Té¤'ßÞI¡¿â¨ÖŸ¿‰îq¶ê +´ ¿Jõ;'^¦‘ Oÿ²†0Äáש£¾$™û±Z{M¼+'Í7øPHUʺbÚs\C6㚠A’}]».<²tŸ¾Y[%8?úJa +Ù)'È)C҅KysAiÿq'Ä×:PïyZPŠlc6ïGŸ}Y)ñV‚é>*%à9¿gñê<=t´uÓ`拍ý£c?ú\ +º;¼¤-æœ2Ñ‹èâ˛£„G/^ÄI’2ª»l.gBŸ£ P +æC¯“Éø ±>%)„Ÿ×Y4Ͳº$s5؞¾ð؞¼œ­]‰Þ¨Õ”¥À§éÈbvíµõb 7JE”GŠ%£41ˆWÿ8B}õΊpDú°€.¬ä›z‰#*ªLtf⾨v±-=h–mK´CÕ{0gøTÝ,1ɼõ\›·¯›xJ,:\ôÓÁh„Y–Yÿ=ö%U9Q-Føè…}÷"•u\\Ѧޱw#Ô>А‹cuÏ*òbbi҇Ð×[_ÅȾò󿯃ÛþÑa +îî8 }W¢ˆ{ߪ©]mà„z ýL,ëäç8X³ì·à D.uüwu¡E¶…Ҷפ +ŽEÝMQDô%DzšØܛxMÎÐtÖYr÷––X!\fÛÅm¯wÐ[Yü$€Ì·¢OP¸ëÐ1ÐC­m°žò7Ž~p/gY<¢ +u9Ì¢2°ÈN_ÇHò«,Šu³„‚. *ðùJ¢ÞBÛ/Q¬W+ºÆð°Ë\|ùÜn¬ämÞK‰D oZÞËm} ¸05‚f­¼OŒÝÃ&®:{áP³ß§j²{mü+rcª‹BÛadé+M']UޞÒ|ó“²& žÈ¨›n®¸˜’ðXÔBž9υ(G šb6°Ïª}= +îƒØ8D!TsÈS»¹0Ø{v ÓvCõƒá÷ËR6H2‹BGÛÔ“– Iƚ^^Ýo8‡˜ûuqA»]Å(Î|“wA§n{]ÅÔU{‹*4L¦Ü^%ÊWÑCa9¶‡K@)£½s'Tþš€¤Ç>㘪=ÿˆSËC´—Ü-7@ߍqWÍZOóiÛ¾†Ðó ºR¾Ò\ØùS·7f%Ní¡hv\Ôø¥¼Šð»§¢[É=#†/cãoQ²8zÇØU‡¾7>´`UЮìùŠg â؄Uç–×5Cw<¶²JÙçqښ[žfà&ýºÔ³Õût‚AOÈcYmxصÛÄid?êéEڏ•ƒÔۑ]6£»™ëw"&`þ/Ðýö‡u+FÎöƬ¢ ‚Ä–æU•bæ¶À•™ÙY‘à¶ûUÇm[­²ÒÅ«ñëqßDú@y{î!üêñ°R›¨¸ŽTÎ'qN€õâÕ¡0Êqjϋ+Yµ|¶5ŒÑ‚*³ùß™ìjü4YäŠkéŽú.ÊXÚQ:WÖLǶ…I²›è¾ôÚ +lþ/¤‘5ên ~§€ùûÀ(+O‹ª7gUޚ¹x×Å;!…ûRs¦ñ㘺äêŽ;j¥K‡m¯ËáˆðDþÿ¼tš cêz£œX¶¿Ù‰?]`œ©SÂ%{‡(,ŸôŽ“Øorßm +öÜcpЧ° W9äOßÏ]¢žž)†~ñàâW¨2NŒ¡\÷·“84&[·ñ3»õr¦¬ò¤¨ºòwg‘òa‚~ÌBǗ×¶Å-Pœ†Yá¼W2gË-§ùìJî´¡½ÞfÖ_ßaÎ ¢ˆ3«4ƒøi/h(3Â.MmA.ÒYõ|S%ñäûªùtJùS$‡v¯”dAwðe6òhا~­‚È–ªùK‡ž—cq?ß™VÙ!Ñ{‹bÁHñµü„þ7ëè4È8U…ÌD$©ß<©0;é$yô(íàµ]@Ë»^ÀÎ"K ؞RyÁ«dËá´‘Ûæ +WˆWΩҲÁغ²ƒ‰&–§?ìÛۉN¤RJ—ȦæSë‰ÓCm¯°WˆŒ=G»3æ,³7 G¤w°fõµ-v§w¦•Jœ5­x _ù®¶ÐE‘ŸÀª”qãˆTHƒ¸6uçÅbFoð´ýêˆìI¹|é'›zûYÞê&õ›­±P½…´MﴔTxÊQOUñ¥±à³Aõëš4Þ#h¬kcêäcæBPïÄÛO%2ÆÊàVMÞ§akö;œ¿rƭ֜ Fü:ñ—Å“ÁU$^ÆD Aäç*â¦ep0®Äÿêùè‘ç¢G»m–öý¤½– ¹‹#ófÛ/׀E½Ç +¾²LÛepßI‰4 p‡ª¶)rRŸÎÁßàŸ‘\ö—D8£ýãɉµf./ˆÀŠ·ª’Û0¿ó¤®Lû(§âÙ 켏obò6t¨•ò¶¾Wá¹gž”n´œõm'=þ:NöÉ֗f[Ò'RN°yÑìB¨LFëæ-¤ý2—¸žÇ¤àÄÞïÒ%VÈ]‹hB€¦®<•"`çjv–«a׸"x76Jäµ½½ÔQ£,~B ”MØbæ80IØ<{OÝWI/¬­—Òq‚ѶDY.«ûM©ïÎ~Ž€'wªï@ÄïÛÄý ¢{ ó‡±µÐŖ–x£O*àòs³Õ ڃö¼´~œ ¹…>÷;sÏ¡·_Ÿçì[ŸâeÎv.MÂo¦âä\¢ ÞøçCÇ»€Ÿ®÷ŸÌ¹z›Ç1tôG¬0ÐG¶êðJW‚8åÖ9pû­!N+hIǨx´·y@–é@(”Au©”&º¹éÆÃ¸~¸ÆøUò‡Â™~­·¹ñˈ(vT•,ÊîHøër‹iÏJhw!H¶ý‹‹on„Ô‚}]íö:Ìq¥â$oân¸}©JT7Ó*p"˧ mÜ4©¹W4Ê{åÅh)!÷—<=«æ™Qz¦‚¨¼È•—òr%f‡¦ªþ „uáz§OÑs)!bm²Þß.î [‹€¬[ßÓ"Ä^Œ…y•pØGj+=H¨±«k¾©GPõ|åèÎVÞþ=&Úû7Yݾ- +Ù;¸Ü1)¦ªø[l­pQ_J«½R~r)—/.Ñ;5sÑöÍþ«q’=!ú-<5AAzØR² ÏÙ݋´0Z«·P4—»må»Î^.eÃÃnB¼sà³æºÊÐhþ÷%ˆÎr'nrH¥=ŸCí†\,†q³²†ˆ@%ØO¬-1N͚W‹oD¯ü"¶ŠÿÇÁç+bopYè¾´Rüƒzús{Xª?§¸?ú¥–Îæ$!֝ÅÅ?"΋NˆÅdU†Èh m…}VÀCååS«WÊСFÕ`ìëEmYTêÏÃgSÔٰ*2uË10y=ý.5iÀÿ×LNÎÛ^òkîD´gCa‡°4Æ»;f¤ýõmFŽz“sUš—=É!swÉ'é:Ã<üvz{åâ6ViožÝ(›ïXÆû­]+!d¯”¸f•†*ô ïÃK}âð\(Éd¶=9û~G¬l–ô|‹!©¿ÀfáL6üÐÏ)}¯Í]Šgy î"|Q«<­ ù(Zω0s9ZãÄsÅM‡gÖY;¬2ÿnNʪ¿õÌW©=_í7@ C>²eÿ39WoÿNŠß'xäèº&ݯâ³ÑFsÞ÷ÒÍŠdR¤¹´Á×2ä +ÀÅ^R³Ñò–:ûT–-BdežÂÆ*>ÕgÂ¥ÔK¾¬Rjô{·h†X «'¢{E™Xø\>ᧁ‰*6a-½#Ây=(·ÕY=®Â)jHÆ¥ÏΤÿ힔~ѐ¿áN›Ê~¢¶ë;¼M‡‚Ø3uMaØJ™"¬ûÎ{Ó¾>áÙ}óòށ–Û¦×Y‘>«ü¸’N!rÚjÎÕØÖ—xi +É&°ï›lÒÙ®Ö“º›‘õ¯ +ÓE+ßd?Î#g<>µÔd8­3ãëe!XI«€çD>µžü‹˜Ï&FÃͼ-Ï x‰HGÕÛÝÜì¨h”õàŽ¼Fïë0#|¼ß@«³Z˜À„´Ûþb¯7ñ8Ít}ÝØàæùW&×¾“DZCÉw0¼½û…¶?íVØü9YÒâ7p®¾˜¸w¥ðlUPÎㄠ+šÆÈãÀ¼âޞÏ4£dâÜE]’úe;ßtµÍjzæîXÞv1­™ì—Ü‚ٍ’ëÃú‘²\s¾"—Ù?,cÙ/l_s¿Ë‰$â%êQ²_Ö=’û–Rx+¯euÞ·Uµ±w­RåVÍ~' qKS1íÝkoð]ën»™­»³m>t‘«Þ¹½mªÊ™”Vݲ“¦Š õ^Eè« Þ;H8PìKƒ«£Â6Õt'< +åÎËÈ(;¿ TŒò3eM÷¹+õöÒ´>Í »©’F€¦íŽ¿íÎ#ƒ’4>\J“Ú+É_ðʔ[Þ7í¬Ç5NCNø[¨{ÙE´Š¶éU„„óÞM´ †)ûצ÷äëj†cÂë‡JU˜}ϼ W]ÛãÖÍ¡Mò¾1ú!ë2"Õú ÅWý/zÑ«9Väý%waðúÅáèc‚ôV<èŸÝ&‚ûÁ]ÇD=Â*>}=8ԟ’޵¯nev³%Œˆg·Sµˆz¼£<Źm +j‰å&´O1ðt4r°ðôôxáÕ4ãÙAΫ翯çg*¯žð^r»žÑËB›WÍ@‹¹Ú¶áç•EÝF­¾y_>%;øöMµ?Bæ"×í±t5ÖØ™÷@ÇFè™ùnaáw8Ìü§7&ŸdNü·a:Cÿv‰ÆJW‰æ§¡ƒŒJ·¸B^œ Jž¯ Ou“×-°ƒ#•ßv‰ ggŒˆ!¥ìž96öMƒ{òœ{_~läfõ= ‹^R=5lÆAÞÙá%]!ZluYåúÝžd%xyPDC†«°*°|5xú¨™éKké\“Âp£ÉPŸæSƚAŠ%”Iޤi¹N¦«éÁêÛl>¹U¥; Щ´ª’ÁùUX=µS¯:˜-S¼ÎÎn©¦Ò«uìOÆÑûUN¿Ð,ýQ‚—¾,M&Iè^¢m]ÛtͶ_õSàªê¬PöúU:Ú"öQkÛs¤ Îr­ìàÛOéé>Ë-Ì,/ +Y Ñ±hÌig-S4ʽ‹ p]F¨ÒyFpcÊð™4rhŒ”Å«Y^*»;Êë»ëi †{âuß©NÝà­Î=ÁûÇÆjf&QÈþãÑc›¹àX3籩¯¾|Ðèkd´Üòx¿²åñÞ[/é’Ä{s_:ýZ¶•¼>ÚbRæ¸OïÊߏ£¦À(ÇkÚ^Î5?ÎL÷ÑmXcgó»"Êúî\æ"|gÖFî› +I,³¶F6žñþπ³ÎÛWhç +dæv,œ!o'ßÈú»ÝoÎ(Ü¡[&ä´Ú(ËvP^“Ogãڑ¸¾~V 3w܅Ù;*¼ìB© ‰¸Ù?ñçoU(YÇúì!Âqz#c(tqé[›k+Z÷fI,ØOÖQi‚(Þ¥Ú"IŸÿõÏG ”c¼èž¹ÂBÀ¿ZP@1¡çBN¤ša®€œþöbñÒBñBq>b•~hÃñ.W!´¶í®qWA'^ÒA,‘‡*´ßdŸ«ü§=2äÌð®´ÝQ²ÎpÄãmúC‘Ät¬ÔþÏ(ucA¬ÊqMí¦‰€©Ý­gSÛâòÌ^Ù y&•‰€e¥4¬OP¯†ÔKÍßÉØ?ÔÙ;ò²ì©³)ð@ ++ l]Üåév†r”Ë{Çmp£Ç/[¾›_¦Žð!~ÊЩ`·“¼ã6ºìt˜ù2 ¯xuí&Á^‚|´k÷ï2GÐÅÕ-èçÂ6R©¡ßó¯;³¿’†Z¼¿ ”ÃæÔ¼2ehÃäIµk¯yCžþáö¥©¡;8’ËÌÔÛꍳ]2†ºl¢ÁÜˆJ¦¶#èpwPœ:˕òÒ}‘¶¤#ÀäpI„:/ gÈdý·@T’%:‚…bX¯rØócgIt;@… œ ߓIVœ jÞ 1]‚¤ËËåSñJIgKýìÿð¥-ü™0=ƒÝ¶ÿ)oüZþÞ4â›G9üéŠÿÕ:½0·“œæÓö ]<äç6˜¯Ö1tþy¿Ü×öóÌ ~q‚¤ÍNüËÿ8ÿFSûÚþÞºoâXãå9 oU7þŎ>Ré¯íÓÍÿŽ>‚oþK|˜vSÚ­Ldÿ:gÿËþ›ÿe™?5û–5ÿYr̟šÿ´GI±L 1×îLÿ&¼ÿ³™ÿ…1WÝÌÿÕ¯?þՍï֘eò Dû¡ä]"€Zcmbß̦sßSFi%bO‘L ÜõYRLs¦%ýÔß2ÛÿQµ³ü4¿,IZÿ’ÂwJ“^Á²À³¿rZð˜¤æàÜMëÒ¾gòŝ\–½þyV)U½ÂO/þÙ¾Sþ’ý˴ߺ¤òÉ_ƒ¼²Àõó̰9fÊç\ë,t…€šmÛàI^Å&÷2tœ¿.nÿÈHEú$Mã“{Œ—! »¿2œfÜĂì®ûú·}ù[½¹ÝâNÒòÎ_±œó+òºƒ7# +µ[3­»r¦ðL¹Åm|æ3˜Vó¹¦þŽÊ÷À+{ßÕ½ïÊÞíÎ÷-šçUÙ®qjZŽÑˆ’gåMæ=ÂËOIýæäoþ¶Àoÿ9W×ùaÓ¿>±µ]¬äGæYsDwŒw$ßåEo·Cæ¢ø®fê½Ý]Ê?õÏdÿõ¯y”ª:Öø¶ßþ+? ¦ÿ|I÷ÝҚÿÊ$ÿ×2ä¿ý,Wÿâ±ãÈgÏʼÕîçx8ŸÇŽs¿õñøyŒ•'ƒØ^WÎ÷ú¸•ïþ -a¯ÿ%‰ÿæýó~ù¿Üþݝ_À¬ð5~?³ÁÕø:ÏZS +{üù?ΑD­çÑi¬™]–‘Þ¢Š]߁ֲâjúÞe"¿”÷sҘï‚,¡ýýg[áw4_ÚÚç(5ô|*,¡ÄKéõ¿ÿ,~·tì(>2õüi·oþi·}bø_þ"_.„/OûäPlš‚Z(GÇH½‚"CÍäÎC +óy?’B¸Ã^ý˜ŒÁ»Ëüt‹Ý“ÑÝÀ2~r©½Â4WhÿðØ³.&qH§g2„žá¨L)wßdòxÒ(MX‚‰ GÏãåf jê‰üÀô¹C êbgådyNþ)e¨gڋ¿ ÒQÿ>^@Ôñ­sîråw@;v¥w.ëü™pwW8Oðòn=¶ÂeLԜ,½­9•)îp*1_ÉÀír úý-`ûx¡u[½’—¼½ÂGFCVŸ“ pü\báç2dÂF|÷Ñuƒä_Ax.Ý2<š)ÆË¾ŠC–“E!ö¹nm†›Z²!mmY“­o¬d¹Ž®¾N×RSùîÊnB +ÖGd.CoZ,àFS†I^ÊL'Í,Y³¸N÷Úûa;·²†Wz;Ä<Ò-äc‹\êÇ_v×jÅÏ(Ébë Ã$ÁèVè‰)æÆG/pˆ_×Â@½÷ùwÄ%+ØîÙÜ+zVÛ \ ˜:ûIX•Ø·ÚËG¢Ír¼ŒIŒSh´-}@M®$rz6@"‹9™êW]¢(zü}o­vϗöC®”ŸÏî‘^d¹ýåRg‘¨ªs +: .Ϟ؅”r©Õ~’øÛa\î7^#Ò­ô†Xª°ewÕÈÓçN¦?ß»Ð6!åÇ{8Y„#û^áՒÚ°‘@ˆEF«”$ü¬JíA#ëÖú²µüMoÕ±>Ø ƒáîÑx‹“Œ¡G«"Ý]ÏÕé®üêNScÚù€á–Ð[?‚þÑ>V¢ÕÊ~(BŽ;jOlÃ\oœÈ/Ä}j +ð·ÞH”¢(ñ:üj§¦—ŠÏÿ@¼+ÑÊY 2ƾÆê ö㥍Åi¸Œ¦™™þ$Û_0$d«¶)Ç=‹¨@Ê–ÖöZ­~z„wwÝ-ac!ºí°)厇÷Ošz“MôaéYµ…æF}*•é[nº´/£UKÑJÁ—ª¥túVHòËAÈ+婖¶ÇÒÑf£W ‰ûø0«Ú&ð½G¢æóхaMÆ|Õ_XM´à?iï0§]Ù¡N»³€Ò¼KçmUîÞäɬ.âi§èÈ4;o?÷1ùj†sŠSðÓұÞBÕÀû&XgìV„6XœÁ6-ÕuàWÔ’  »£!{Â!bΛ/N»óÆ20åÝHVÁ"uîhÙ0GÿäL+‚Ïc祠!ȃҧùc-/Œ¹!f#Ô.ýË/ÙR•¾k…ÝWŠfw¡7×q֗öeŒŸ»ãæÈ¦)ó'D¦9£:Ñː®Qâ—=‹ñ<§¥Ð¶RÜ?sÉå%zT`£~i“šÊu©x”hÏ礅<ÀC19¿xŸ­ ‘•¿Î:Zô„¿©`=jq¿k¦1ðH‘ºFý¨ÂáÈGEKÂKV©ïcsóдäÃÝ5«Öàaøtä‚çú°ÕÑM“‘ß@ޱ1š#øG¯ó¿C(JŠ&OýK;vT1w‹5œº“^É.Ô{òEeí0‹‰ +“æ–*àZFC•GÔȊË7"²Í jÈ©ÆYþ¥†!Ê+ %í ÿÓ¥¾T’¨èküÜÚì5ý¶òS(±Î©åw٦يËk)H•­ndŽK¿.ÎærÝO´†í¶¨-AˆDw¦Ž !8Û©âtl*[p_eZXÔÕôYú,„ƒãe7t-Ê(¶‰€5A²µœÈƒ Eêþ¬œÓyGÈ*¨ÁìI7|y#¤M'á^H÷ÏúgÓæ”dš%&qm ‰Qd¢²¥¢Ù&ՉN±hlÅ¢óX”ó‹Ë‰úįŒZ'ÖñX»½[­™‘a•2\Yt3eòùs¦rÅÑ·Sng‡´Þ”›‹Ñèϼ¹éIÚñž¡µé@‹XzŽ‚ÓÅã0ÿ™H~D¢B3#X+’v§Œ»ý䄙“ä;>cÈÂXw›q¢ß¸›‹÷q~ån/ØNîoÒh¬”_°{€ÉIÿ‹ŒÃÆì¥ÿS ÿgÍ-¸·÷Å!Û´6wz1S’ÿL„l™ÕzñŸò‡«<™c h Ps0Çq†'Né¿;]56»ån& ÂàÏ +Ô.CO™ í8Ѳ}•¹È?LӜžW—) õŒ×9ý¿Ñ ·Ji®¯*ÄÇÑKq’#ú5mÀ$}ÀóÇgè8$Û]Zén(|‡ªíŠzû©nß\ð€{ ¥k˜àP-eWí³ÚË!f 1çˆB¬U>ªŠÀ+iÒf¹f©´wº³w¾’ôKÅKÊ9ª¬Ø‹A¸îªJ%Ù¦ó(ns§”.‚§ëɗAPáC¦:‹mZ'ҩ굂Ôö²ÍÜ¥¼Á -Þe½…6Î>þò{'dŒ°›vE‡¥¿ASœz¸Õmó2„9åȎͬ/¡,Xd!†Òg(½[Žƒ-óQ2•¨öà©¶è46{KS¦¾­?nM‚§1é2W<5ýTŒ@ ÚÙkið× °z1[óËÅi´É›À¥äÍ¿Íç‹A”—N½QþCk¦¯îÎØîÎìîÍ%ÕÙN‡mƒÉ±GÈs³×7n>*qQ)çJlö¶EW#É6—‹IÀOz͊‹{çHÎ$xd‰we½‚-e%Èé܇‚>[<€Çٓ·‚6÷žNĵH­ñFUwrÚµíh´xghû+Ú5&¡Z¡UÝËwÃN6½’iá,'çkÑ/zjƒt'hz½£T‹F\íÕíôZ:C´_´Z"Ðj"ßd¹× aRyï V¸Âç°@s†Érª´òºpˆ©DÝó538|Úínaèl u{J›L¦öeк5õóRõn’À=„‘L=$««ˆ ãXrCTsû¼-ä%¸fH— wæ8(GlïHì°n˜†T”°¾Tº–ëÖ×Hí'–î¨Æ¢/6³ˆP>1£èØÅíìrLaîm)%Y·Ú-ä»òÕJ9́g(®²NO‡ŽB{K»˜ì#9˸³o’9!1–Pï,ªÖœÐ—wõ„üÚ`? +÷D±Ýµ°!4N#ŸdæœúåÅ'³ã ÷£«s"¢µcâÁø¬¯sù–÷<’nz&Åo 7%Í­×ZN ßg +ґ+ڟ7åg؝þ0'o˜ÔÍ[Lû‘Ô€½W²Óõ°—„z,v8ÉאaUõß¶%ÉçÄômO×Cïö¬˜‚á‘Ἷ(®>j (ètNåsM.þ죚©Šš`s¦†){Xí"ŒLøZ°Õs¦Ö60Gá¡ÿ›™l5Í~¾~ÂöÚ½ev&actòê@í@[£ ã¾_(©.]N>áÐ2ÕmòçNšjÁïí1CuŒMbØÛBãO –»NŸª°ÅAÎʓΖÏ\N•;(•û²;öú ÿ­i‡øxô§ANJ,€æ€R( ÖÀT©xw¯dÄ)9ÌaôW>ÊT™þ1y¦—,Ðô©Ói]ÙÈߢ!Œ×¨­¨ÏTḭ̀öÂß>ýY]óÅ%QâÓ%Ð +ÇtIÜì±¹‘OEȯ-Þ-}hz™ݯ››ëö£ü|Š+]Ц®‰vä˜0Q¬Î„â ÛëdX†ŸØb׋ž'…Ÿ{‰G·s +VN¿¨ÑhÃ(§Ž‘&*ulÄÕ¶Rq;Ֆ¾#6¢® )vĚ¼³éÛ ‘U· ÙühÜ­§§6’ÃrOk,QHxËŸa0À*Ûn¡HßW’Ù—¡|ÏQYxi‹IªR“»z—Àè›nÖm5ð©–œ‘Òò~`š)yÄ«—”þòÄ'_#Éof@èÎ6X}5´ílɈÙ“£-û‰wYz-ÞÚ7×;—3Ù-sP|ã·¸ô霯?Æwž<M~<•„gžŒ÷É)·;~DÏ\@ v/ؕÿa—C-§bL(Q¹÷ôÛ£|®¢ÚE äuV‡²…ÖûK?¯JÙ0À=¢ ­Õ>ë5Q{‰¢—{3³Æ!ê¥k‘E¬`éo?î?Ít ƒ¤ë¿pe=%cç{éǜ3‚” #Xs)Ú O4¿ ®¶j/ §f +pqÌmàä­í»\pÚÓË©ò©Èàì˜è üìtÜâh®(¾±Ç'W̳²ÁmJçI.́lQ'TpúsQm}θ]?Ï·2'žÃàڅŸ£BÏÊ¡uèT)‡B^E×£S“ө֒ûQ{¡¼·×f/¡œ‹ +Iuµ§ýŠ ‚ÁlqÞb…^̑' ·æ)d·>»cH.°»ÜAeiuìÁÜ3ژò¶ [T€A ˆhö˜æý46±I˜-‚ÖwzÏÙì«be!²æzYßaØÏЮ(íOµ–Û¾ùkëh@ EۑN]vÈóÜé¤.zZÚ©t$Üõ¸éÑ¡…ݑ ¦HÒ +Ú± ›H×%<’Œó. â¶¶¼·¬÷‚S—‡Á!þÄ²Qž`šäÐ6rÙ2”Àùz4®»;íFê½ùgÉaÞ‹l_ârå¨l¯ìˁð[ +poê: ;…³‰Õl%ãã !N_h@Ù5RãÃ|ëÏ©ì3z:çÿ”©;Ûnó«–v.ÛÆâ8,1u‘4˜Â‹b€Íñ°¨fx¥µÚóÒY4ÜðöÝr±ŒjÖ™_T{žˆö—Uµ÷T•ÍÓª›É)¸™ìbØÕ.­DÊ5:ٝü“+êuš@Šöm&KkqkéoB¯€Z¡Wb7}t8:9Î-ªBàê>+i?n[¿íª0ø%Cºñ1ÉÕ"0,¶Œ°ŽaÂø7nø_ßµêùՙêx|-yíª/£Sٕµ=$Šøh{8E¿ÅF¯†ÀŒ×Ñ­#EþN}êe“¢þ&*6‹öXV4_¸ ÚBr­kM–(ã7ùÛpÚð"RK³á4)-mbøB—’@þ¦8ú©û€{n4¤:âø£Üœâ¡-޳æÐ¦Ðvì˜ëûxCrõ$€“Ýí øÐëŠ`í´Æ)0ÎϬn‹´ÕÙ{fAšü?*Š€ 1ÚÂÖa¹ ìonTÚç®Y€”‰¤~oªg«.}1šÂD¬×¢ðþ&$ô„Œ]Õ.7±û"ÓY³¯2š‹…ôp†¢Ùé&|ymŸâceVl¯ºØMZDÖjbÜçP:-õ%KN”[p:¦Qiƒ@ªïL'kz8DzéWÆ]£íyCÙ#Ïk~»DS_Ááøî!iÈôÿ0˽^ 9vàQv§Î:“·º‡»QÎ$?÷ÎȒ\®­éÒúw³ú‘óÑŤp¿\ȗ¯Ãapi­°;ˆYrÀ óPdþö[^”!£ª¾6íJ©²ö®9pêu¬0¡%ˆÅÇèÒI¬Èì&l&`|®Ñ +ç q ƒþ“ªŠà„²êk/œV6›–½}QUfI5 ©¦ì¡Ñ#ThÚÕɜŒu{#p²3ʵm¢^ȖÅW攋aˆŽ*âŒDtòÏšq»’Øúd–¸ÏzáŸ*íô': ҷ墦KÃÝ ZÍ&z„GESU‚E‚ßBdô!;B«ñ‚è{ ÈåZC¤Z¶„Àðjצ¿r¼î‹ú²ÏÉþe»š³Ì±mt\˜¬Û!_¢–OZ ƒ Td{ÛÇúá» +[~šâÔ"b3šb±F÷Ø¢[cPû‰¯ ©¾…Äö"°—Ç,l|וzȯºÂ9Áß^àè”ýò@ÅÛêCñ÷0g¥ҍõøáVæ™Ãò)RU[Sb#Gë{^6j:VflœÙ^œ!—VT‡²[íá´.e>|ú¿°¾Ç¯Ê¯˜\Â_”èS9„Sp³Q­®pmôÇUxˆdß9ûº’ñÚ»£N]Bê¬>³”äÓ×^ÈTMW®·•7`il¯óõم)\ôÊ? [ã™[ã™~éksù³?ÆðÛBY…¸ôÓ5²{RJ÷Ýd¸„nµÈ6ðh­gmµ¸bQ,*Vùkaßeü +:ýéT üCÿ”¼X{óKoÐVwØâ»æÉ¤tߘÖ +PQ³Ä¼G‰<[Ï]D#軹úê5¢š©„!"·ÅÀ®›`ⴁÚPfVEÀJ5Ã1Òó¯ËÀ¹Ù}ۊ‹œï‚•ÿô\XÉ~ îx§OôÀ,”8|æaüƒÒb–ßÕ2`L™&é8£5~&¿öôÎYKÒ_‘o|:ŒwgÎi&Š>Ñ™¸/W¢üÈê/RϹ™/*GK×—•äüª +Œ:|³zÛ&a!þê,ŰÉmŠÇ^×ãË#ópã!øTÉ©tïÁVÍ£(Áz “¸zhéáO#´[4åÐ×`‡Ùkr‘â–봰Wj†ÒÃ(ç­|Æµñ¿Zõ|.J5±sRÄÉè1¥c:çöŒà:Ù! uÏ1c ëÛ8_ˆª͛z︍xx2èã—ØM?©S£ì'Toôþzß¡â:Ô-Ìs®— +„À1%¦^t0gm0ŠÈÈöD磼›ó"oTW!ØàãB)èŒô¡Z(ëÛ!þÌBì«#ÆÍÿ°I5åV“e¯ÔQ¡eeS]NYô–Eð½Êå‡q®G½ ªû0„¥É7í)]Šâœš1ûðº‰xϝmj$gàõ·uµ†‹Y£o½0`\¤N€+¬¯GJdék"g¥Ô^酟¾!MPÊñ¼ÿ¨<šö¯Ù½“ˆ¥eTÑM‚•»†@òYæ#C3¾ßæ]ˆZÓÁzKhHÒ'ÙÑ5puA† 9/ÅòšfbÙzýñn:¨JUy•˜p:vP·Pω54ü¾T«;úl3Öân.Oà ø‘Ó$x„ÞÏPÄ­4ϑR˜æÙb°Ó%²Á)§Q𤲃žÁ&dFwފ7ÖÞÁÏä‚×3v+àœAĪô𤠗çܙã;?Ï=uïTõ2ò+]tJ›õÛTìÂׅ!,‹×²~²•¾¯¼UÐ;ó`t™R5ÄÕJÝ»%®>HWb×e$ýb‘m¼²w-½wf‡ €C¡ÎÛéû±"Pá}Zßëdõ_h¥IŠ_¬Üñn¨SºÃ úB@žhg $žÆÎƒ„°•Q@ŽçW§\jK¬ªzpñ,ú" G`ß.üß\¶L}¥,õ Á—ËÄéfím“Ò=È=õc€ÀKEŠ<÷ÈÁ$šK±g´ á{ªÈ9TΦõ¦ß÷ƒ(_º¨Vh󕾫0YcAw¡”xƒ=]ÓØØ MF Q7×-õ¥€ÔȕvŠÁoª`9\´Ð[GÇz®ú6QÒà“”}NŠñ”;†ÄGØ[GÁ¡"} +Þ:œ¥+…ocÆé¢w€“ "åWêf®ãMÙèªô*Uò2±¬×üjùXcío²2±­zßCó¯Ë ð3v¶‚àŠÿž…`üVkœÐŠ£ùٟö0)Ìÿ©IÞáléYì–Ê ]o¬ˆú${üxa€Ú\ +*ýŒøx1` M‚–ÎÞÖ6øÿAyóòð¾CÄÀ'Jä\–€ÚÀCB4ŒŒ¾ ŒÈnòo®Û*â÷nþ‹H–z܏*,V!}|)í¦>©ÝFþ7B‡-̵üâÄTJ¨ëόEÆá·ÅaŸÔ@|Dæ² éò¸b]³zkjžˆ¤Ë(X 6%u¼úÀl]YQHÆ4ÉDo[”Õ¥ õ'¦Ù,ø2/km£ß+¿ÍÁÖL ê^hÞVçø¹¥k¼ ájYÚ´|OWÆ<ÀK>#AUÅ 3Îav¤ÅÑ{ yý5„ö5G^Ã~èNU‚Y…&Îežu¿4ö ¥è'Ã9½ŠŸ‚¬Wûî‰mŽjÈøH¶!'ĺóæûaCÕÖð®ïäʚϞB{y]´0dZ{dOcˆCÒ²`@t¶¼œ,Ôe’­1àQ‚Üë,‡Ú®fÚ/¦Ê\+»Û0Û´žb޽ .9VmExèÄêD³xuÜjþìê€ÛëÖ*8ۃ|ŽŽÎA”ß +Óå™W»³dÞÙðš=gæ=C +d;¯ӊGi= ªüeýhŸnŸ3$ÑÅ¿¡ƒˆNða½§‘|Qlµ”n/ío܆ÐD+Æñpzѽ÷>¥W÷œèºMßc¯e?Êz­høxÄZ ÄÜ;µ TÉšP?(9ùÅ{í±fжo æ0G°ßƒ™ƒ¬— =uéS熱žÁí‘üý3ÜO¤ô4И¥vY¨kl4Á[ú®ãW$:F*A•,ªh=–&ËwÁƲ L©ëc7¿%Á…ëþŸ„öî&sõæküW‚<™ÍFh,<ˆé(êyø8ާ’V<»;:paKZiÀ]ÂÓ­´–žl-[°m(ÔRÐÞ¾]s ºèkÆ®,x_ã߸|Cxݝ!›%VPÉó´t\Jh—÷®e­‹<´B+¬~AÅþZ::ϐòT)Tù¦Xü¬½¿1é׌˜óÂ[ýºÃWh{ùR¬'¾:hë¹ø9iˆ9’Z NМ^2[{°™Y칿_"Ž„ü)SÁ0%IðRß+E¤¡|Ê0BŽ™H9 Ü©ÆlÄï^jÜ +ècž$óÞ@ç‰|ÐØøüLÑ(9ý‘PéSðO«l§NPx¬Þ:ó·ò‹Ó*]øÐøjÚ©GΝ­¾BލœTán% ʟŸ€ôTÊ­Œ½ ¯J£ù‰s"“V7­Ë) ®1u¨…*—¯"òt¶…Ê—lW“krQúPJ5{Sº&–³B>eKÖÙægV°ñL|‚¾õíŽ×J’QzuDé œ4¼µwÎ÷—𔥾•í Om º7«Ì(mG{D¤'€Ø®JEš‚ö„4 lH~ê*Ú±’#Ê}¦]9Ö'VÂï0bí¯²_Vtg–Š˜¸Y[ì9ºÜ¸Je¾o®âsñ`§¿ê#Nש$P²°‘ÚC*•;ÅkéØkäÓUWæ_çnÁÒt:qT&3â|"ÐD½óܼSþ?ÕEÉúy'×ñ%òˆHyÛ¿÷e;(΢êsò‡3(ENïAûívë¨%~VŽjO%«KI –Ï‘ˆô2G¡‘ÿÙ£+|"Öó,‹Œj‘tXŠìÒCÆ$2BLh‹§,•ø4Et õob̗Ѳ*‚.EHòhl¶Ukq¡h Ú9ËÇà2¾,9wÿ ÆR% ¯Ýî¶Çãu?_Ìa·ÈŽÂ.DØ·èD‰”"A[Ñ2‡(Zƒ†Ð±úïk–Tñöå°©wÿ³¬ØÛr%óü6×ù2ÏÛiÿŒ³ÿ~Y§È)œ½Œ³zë΍–oÎ`¼,³±nñ×é¹ËJNä²Ò’°²Ò’­>½6Á’ã麻CR/UJ*ÑÚv¢"s£!äÜÑ ½ÑœùÇ|罀¹´3^îëJÝ %ÂÝ|q§kM,žåDÓöã=)ó>8œw ýÛÌ==ð:º‚f_ +zd  +Q ¸nn"u%í&uÖó3˜ýýu•N,½ÇâCeñ:•,LôâÞÑÞKÏ©” ªÑUˆ{áó‡ -ù+HÔ·$O3äIb­þ2:Ó;áòymN޽?ç + Ë^ÂL9îêGŒ§o­!äÐ=DŒ ‡=×àÐÀ˄›,zm?]Üø’]Þ>TÙ/…ð……Þ“kÀž +[,°¨Kg _"}š´ +\*ð1búËG²êJ±\ Ɂ}Çüò³î–ñkáUÌ¥ÜFÐ[ Íù‰ÂÓð^2_ +–#N[ÿhX™_4ðÐÂø2ã1ÏÂô jTðØ¢¤åvÒτ Í±>KÔr‰ÌbQÆ)݃éî\É_þ¶; [ºûÿ~æËŒq™^>æïHÃ}ÿÓ÷Ðvf»¡yÿ¬ÓRõ«|Ì}fòrÿ_?9ƒñv™Ž“ÊÝÞ{Τå|½tæ.[[¬Ãæ¾Ë|Ë}ö䫒—|~됚r¨–õHýÍP#îÞ…ÖáÇç#÷*ƒBwÚ£÷0õ ­í½Ê?}Ú!þiº+“È—îÑ,™þ”žBþQɚ!ÿ†QSÔ#÷æàZêPÊ~îJàpñHýÏ#÷Gr¹uhýéÑûü(ý΢—õê‘ûò‘ûâ£÷>…w‡8†cœC*!èQû«EžA .G¬GïƒÉwÕ¡”|ø¨Wxie7:ä_ú„²¥šYRmþ ¦÷µC YÏc‘¡…vëлTåLôh—"Òi›éq»D~çï7ªî“Égâ£÷¬C 9¸D¹—üBÄ^è$n¥C|wõ¯Ù^eïù½_úî¥F›§P"ÿ»c=Ý66_ñ–¶÷\oÅØùÛÇ|~˹ñ95q2wR֟dßÙ½ÙÑTf¼NeO»¿êó?ÊW3þ_ßËûÿÿÔªÙ÷\‘ ¢¯û’¹¼ŽÊ->4)__žÂu¶ß ×ÒEa;?…¨ðµ>«ÂÕøZÿ ”ûïö-l\XËØÌXÍXãlglAÈ£ÑXÑØÒXé,i¬jˆäTôö:‹MŽªÇWc¯±²±ÚØîlm,ÅîJÒÍÚé4;{£,яÏ]ÝèÛÇ[>è;+?šó5ê,º‚)`;þ¶»¼›Ïød¿¹î3ÿø`óhmƒwrímwvÈmwvßQ÷»¼1ûø[]ßSxc÷ûÌ þ+‚´äI¯W/aOÁ§Í¡ºiæ}V"Êp+÷B¤Ù/éÕQ¦º~Rë<<š@>G›iôõ.Ñö9kÉ)ífžs¿2^ ƒÙĝÀ›䔎ž©I]µ¦ª;i–`‘ˆª–ùv¥ƒk¬»Iå+{Wd í£¢ –v¹LU /PßqQi¨$,2×jð›ç„ü¶®Yô–€•ÒrÝz×ڑ¯µ:ÛÆ\ –¿rL|1ѐG©`–õޙP ï¡DH’Aϧ÷àOó“Yp2+”³K $y"A}>ÄÓÌ޽Q$‹ˆŠïn›9ÞztŒ™¢{=Åů$v·|Û^íjsmlŽ×Gok*íD6o«Ž7©Ð˜åRŽ]´ŠÝÓRÅpñŠø“eà߯kvöO«"‡%³{Frɂ¾”M=³t%tj÷Èn¡ >̶B\öӗWùÝÐ[ò |lbžAµþ…‰Ç·£™¦³â]Ön{uv6HMóW2¬e=¡ÙJ©™[+=›d)µ ÓD}vÔUîÈw±u8‹<%7 ´Š_A´|¢8GOn=ƒfŸaªh§Å»9ç™QXÙê$ò‘_‚ïdÛ`ƒÑ9¤*#‘â°Û—ÇšÜö>Écã/,mº®;i;T°<ý ë`u±jD?§Ù7pJhzÛ·ëeAM¸Í"„Z"êMÄa ™ Á^QrêDB-u~ë—h¿nûItàⱺùd껢\ß²‹å~lÐk0ߓúÓL‘`G°™Äo6 M€µçÛÝ0GK› +œ« d‡RÃØÛ¦|כ0Õ½À’D»J9û +`8pÇ'悞yj=L…Òï M90б¾†$söěMy–⾉–\¼ò›ý„½PMëÿH°nj}ď‚Ùµ•SbúÀõ/ÜÒöíaA`%±¯,7¤ú{áñ ÉU{*UɍöŽ‡Ð²©Î>W<ƱŽÊ5ß@æ!}À:1äe:ËÑTɐùS¿”ÓY?j· éæOçNÅjoŸÙbÛY÷!«…¢)AÚEn¸Éœˆ:”Œ?ÓµÛ½èz—ôß©eî¿zdÁx– + ¶‹h}ÍìÒ ÃTÂé?úÒ{ÝÅ|ÕÓ:,^˜ïhäö†U7šßz=ü¡Ðð_½#¢Eªë„:dGüâì(Õ\„t+]:Äé>kn6^X‚$ü·†˜Ü!R¸«2Ž °ÕÉU'9Q­\¤4° œÐɍm?Mä ù0~‘G.Ñþ裑¸  ¼xÏ ãÆafYÏ2~,±RGŠèò_D¿±ü™a–õÜd”DqÓ&YnšMuKEpB#æs*˜“EÄQî¢Çf eWZÙã¡éïf…®.ñïùv½šñïùv¿ ít\Û_x¼}¶-e±´Ý• üÌ9žT}m t·WQöz6ÇÖY7S7Px Ö¡îY×ûø‘ö²¼”;†ÔÈoºü]\ +ð×#`Æúטñ&¤£â¯à _áw˜æd™ˆ‡¯e'Í9†B¨'¦wÓ2<>’ +:´ÒÞ³/w4¼”m“­¡‘AéY.¾«fž#0$êßæ¾A)°ˆ8«9ÊÞÞf©À÷£Pè›rÏ@ò<òY·îŠ˜°ôxB>q)ýð\Ñ4"ÊÌ0 +%l_k”3‘òªdÿx¢¹‰ªŒÙ$(¢[Ìó”b2ÌJ)Øz¸±}o#  Tsìú× ‰ð7û]Ó야¢=AOØR2>w ¶9#)ºÊ¾“ê_#¤wG»ZêÍ+³Cã <°¨…»ÛF”“ýýUUIRI%Q! HH T’ U%BT +Š,@¨*]BʕE¢ñ\ \»[µ¼KoT¶È +È *áh +ä»ZŒÂí±ˆ«_ûï¿}ÿõR¤ *·åæmç3svú;ÔÞo/9ÌÞnõ7y»ÔÝÍíîõ÷¥¾w­¾÷ÀïS<]0ÖÛm¶ÙoÒÍR™k…áçqÿ=7îðüóÖq? +®föÁÔÂ;ØoC»Êðt#þØ b¤ôîVÕHãr2N±&:®ºÒS ß4JŠÆüß,>ob/yS ±€dçI„Vâ(eUæø+ÝWF(À•¿yÍîˆÿžóœ\녆Ðv6âðÄËÕôV*‘ÊŽl‡lüf›ž}¸"ÀG08ÁæOÕrOÛ©¥/}íqrø˜V˜1Åæ»OB]Ë €F‡ïÃã~=øzbÀÿˆ¼ސ¤ßìpMU"éC՛b:« ,¼ÛïzVáïÓûߦ東wéêÅ]ÔFcÀªTw ¬ÑŒ²¡Y2Ö­`ô–@ãɂᭂÀù•P\IPX# žğÀŽ8.”Ny´p¸­! Íô—%JAnh¨¢1gÜ¡]‘V—gš¦!ÐҗÜpm|¹e :»J°“Ø0ÞQY8wÔà—ZQoˆ¦ò"eAʪœÜÚð$1ÐeO׫HDí/D寁 ™ô LÖ®8R9\«ßvì˜à€¾#¤©µ&wÂ8lƲiL"9!$¨µ´ +ÖØêÔ$ðàý²Dó5žº‚¶•Ã|ÔºT÷…à~òD€¿Q¶#æV£:ó¼h›OãZviíí­=‘Zt»JJI‘L\k܂±ÿG¿è…ÅôÇ^ @gZ„† q2óø þwúåóWhŒì=ïÏDsÏ= ® ®G Çk‰;ûàgþß=§Â9üö¯LÁ/‰e²Â¡dï ÎðCæ‘G¥ÐðC´Âÿ’ÌûßPBPÈÞ¾´úŠÜû,/ø•¹ðg4ý@I}2É_ßQ[Ÿo27ÁÊ`>dë7XH"7(j}8@QI|&§Ï+sìM 6F§û]‡Îu+ãbœ8e:"A”¸ Kœ^­—³tXH¡,ƸûhÖª³ ÿ¼„ÊÙ¾÷Ì+fà:wl-N—©”múÁ&¤t™†‡éBåfñÇE‚NkyÞ_᩸®Â6iÍð߃DGS!ê«yæz²s‹pañ¡ m£7Í/ç¤ ã¿Â‹{cçvíWQp`ÏDàÕøþzG€VÖp)Ýu=/u'®x>¡”<·‘Œë ˆ^ êºnۛ•éNSÇ9:è¦R®$xÎ-iu¸c",‰1#{PÍæn}.¾Ç¬‚o@]?‡ì xžì‰"¦n}õ@å”ÓôÃ!qÓ?åPõM[6fðÀQ†Œ/mêç¾ð¯Â׃$á¿õ’C2ý‘<%ìÝDæ#²EÛJJ2qpNO1”)’Íó©#s$³df£ã£!pϖ(’@àê(-m¹&:ÑJBðw–ƒGJP;cø;ÓBîàq(ªó؉–ð¢ô™6¯rˆé}à  F¼Rï!î¯f•b9¡‹£y‘¡PëY ¾ ³& ]ëÃݺ9¯0Ko_¿†á¥ ”äšGŒí›%{6`UK&o†uö2ÒËf»Ž(ÄÔÅS\ìµ0˜P–„ßbdÊaÃàR˜D½1˜Dãañ̌Äìat)—œ÷€ÿ‡&c¼š/u·8 {ëôrâ\¥«ƒ+ӐlêvàQ"àkòP-»8~7Ïûuu +nkhY9 =ìŠ6šÊs + +ÜÙñ6ZÚ)qøúæŸxâEžØø@ö¸¿šV0ß ƒYEC«½F¸Î!` (¹ Ö¯8¦¢¯óa®H’Ųv8û˜ó_¦(Áˆ` ʄí_l=Ęð:f0àê=Ãd…n¢ÈÞ6¯>þ’¹ÆÂcÂ0xv%QʰÿÞ_3PêÊ硹#a‘Ú ëb­4âáÒ¦µ5È‘O‹»Ø*'(_¸ÀÔNb}§/hx³Þcx‰æ’ÒÎ.¯(xá/–DN‹„i.²M‹J™oöÜÖTÅÚþb¯|@Éj›HåopbäºÝoŒä©rݳ·@8³;u«:ÁDç• âkFÌ£’¥HUêÊ­XUëPVÝ¿ñ€Uû&¿>ä0±»HúY>eÝ/ø%ý/~tü59IöŒCöÉíóyÅÞ,…Dæ1û‰.ÊuŒý§‡¬ø ¦`sÔ*ÜH̅“ ù±œQÞ8XàW0–uÍ^í:xฺ}„@L*￈§, :ó‡­ÖñØ¢;Û"Ïñ m¨ê¶G/÷ Ž»ÞÜ¥Ü1çÁڙÎ(;]ú„åݨ¬È±©@¼9 ‘¸ ázù Ö ¼=£¶ÙŸ•®¸ážoAÙ-Š +Ÿç=$ã¤r,5ý׺NŽ§Þ²þw¯²*Ž<*?ªÞ)«ù¸ ñŸ~q.¼£õѰ” +Ð֞Y¡…³—ìÊH–OŽ )“¾<çå ¤îßòFa!­Òà€¬.»'6B„«“[¥“¨«Ð£Î_ +ó_®9ˆÎݲv7ù›×ý•ç#Å£Ÿ#\‚Nqz9VÐ~ò4Á–  +RÅsu†D–K˜…“}XsXؗMÏTzõùÕÙÆë ]œNÉ3åžd±÷Ë¢qw\J±D›Õ^­ZH£¶š]£tŒìP&ú¹À;JN׳Ýsºs‘&LöËÌUl¬“!V{ë7‰%Ø¡~XPd»(N§Goóåƒé.$©)q?0¢žïÕÂuXÈ074Äê]œÌ+3 (Fç°£ª ¢óøßÒD¾Œ¬ªeäû„Žeéa0ìÓ;Â{¡» ök4„ç®êóvm¶ŒÍ¿ÇËìÛ²7fÝy;ä/™Ù¶ÍOª›ž*¨ ª½ƒ;zœ¯hà_±5¡…Ïˬ=©D­þÑÝP×o·ðé±³ˆat™Ê³À +Bü©”´S +«ßIr@þ3+Ò¶z>àÙk!ÙpuïáYjõžÉ%¼ +ÃXwT‰Ù0l÷f+•&ÍðHø„Ñ˔ò׏y³Ë_¶¦É0x²R>rS϶Q([eNã¿%zù-û;K|Ýe‡”‚gš‘=’X%Âdû%ÂØ÷3&D@ÞL˜·x>ǔÐÝ_\6÷µ{“¨¿òV‹àÚ)£.²‰G‰öÊ.BhŒ«½»ÛúHnzåê ±½ÜÉÄ9·0*Fr]Sˆýš†-%¯n"£0Üìw^sÊU¡ŒN!%å> ø'û<ÿÏ+³Ð)WúEÍ3WpD)ñK‹¨ÖT+¶Šî`$Ö4c­ |­¼º6—0XJ6J]Y3ÏJ:²Êhn­ëD0qw­ã +¿‘@܈ßÝ Á!ì”Ô:²ê³ÑèÑìt+KØÈT·T…|9ö²nyQzº8V3Ü©² ÄEEZû€ü<Kúe."É.àÛF†cR2ØÜKª°ïEZƧ‹¹[›5Ҍj}¸5ËØÔûPk”±©ã3Š©÷ aÊájï#í…tKŸÍìdƧ +܎8äB¯ŠcS­´Do&5:±¿ÕÙ)ÖA®V‘©cò78œš/yÓЇw'OA +sw<¿F,²”Vê²y¯nåŽ=p7ê!<ªõΣ„:î +~ÜĆb¶÷s´xÒ§óØÍ¹8€ 6lɬߢÆìä\ß~.ן¹„µÞnEŠÀ¥ÇfæË" wS²É8VÍÍfù 7Ãéöë¼Uð@Õý¿®–|,«Uyà¶>€7½Ù»†€ð-¹ÚǍ-ÀTzpŒê· âٛ7¸÷ê[¬±ïÕ·º36T +apª¤UÂx®ÜæÂÇÉ>)\ø¬VÏÑõÈåߞÌö,,±›¡yU­Ir€ÓM}6©&¾Œ €\Í?ÃãI^I²à„´=]™—Wè×m(h6¡Pï j£h|n#¥Ý#µË¶˜špXrEI,@]æýº›¬w‰ å¦¾›®+ƒ°³Íi„?<Έ“û˜”ò»õ5‘{‡ƒ¸®‹Üy N™VW©šS,½‚B`zÎ"ɨ·Rƒ¸ÓDµøçǎ+8S?vÅ>8 A™3ÈñÆi~á×­É-KêV¢ŽLk¶€=ñ“¶ô´†°;ÊÒµ5W3›'œož˜8ad޶ü%ïµ Ë:úðF>=óR·D¿äKÍMMf 6n]”X«râJ«†â*/rkr<±ÉÎî\]ù<2:@?”ÏÀÔ¬¯ñkþá“VŋŸz¥ÅǓà [4œNïÌ@ö»²<ÛU9âi‘Â^9Šáf¯4h Îƒ•›ó`l2Fõ7”ÚÂvRö÷šà.ÃÕ^‚<õÈ¢=^ÄÌ#ôì áˆÂYMÙ¾¤,.­„åÆõ¯r›d9Žrï§¥{¢aH÷%2&„³Û'N_þQrEÀ»“8ÿ( á¶+ŒƒxF)2̀ˆO"óþœâ­Y ú7…¯#µêÞ=ÕØ“aA+†\šÕ-×<ÈИÍݳ‘¦ +àMèƒù¿wfp ÿ^f8r£rl y³A£M˜øãõDÕà™òŽçò*äØ=rö±®ŒÖ‚ÜR†`gŽTT™¼þf°ñ+¶›ªŠðLj§;Aêod§€Îwž~ÕTBK©¯mxDâÆû¾ŒWQùûÅM#ÎKÌ¢•òÚNÖ7ŒyêÝò”µ¿qœzŸ è!Àm#î¡KGÝj—’.yJ´O¼¥vÓo@æ}‚­Eí½ƒyfJw¬çw™çåæ@ ‡¼Ô’˜ªqZ5"À>$pÆÕ“Ó OýZ¾üÅ¥°úmky$&9DK}–R9Xã¥>8™,q2ß|p'é—|+æ{ŽS™éÊ%ÛH QYCÈ ¡œœ'e›È†Ê¹,ÝÑ ÙWµûØA½†É¥± ³HmQrdó 녁¾'Ü)«ì[QÉØçŽ<  +™u`Ù¼Û« ‹| «ɽØbذ¡ ƒ^Ò«†¦N x¶áMXkCgzÇ#z,%E’ÊGà mì{ˆdÖà%òÄÛ´ÅNé¸ÿ˜¬”’ +Ӝ÷¯xBâý7:ÃNHº¨~žßÚfÂíH]?›Í!týìxøÛ|]x»lBéõ±ÿ÷!tàfÓ!tû_”ÌUçc’!týE±˜«ÝG~²OßG¤ÌUÿªUç  ûÈGß¿ûˆGÞï÷¾çö¿í écIÔÊqŸà!ˆ!A¯“ôÈ|ÐWÕÔgÐ!ø)Ý4‘Ÿ¨6CѦ÷ç½o~{ÏÆÙÿ!².èÿì ë~DW.l‡ÜE`l‡¯ø- ΞZ+é ÁT4ÿæftÿ'ƂÃûߝ‡þ÷ЂÃðãÜ~9塨C#é-LÂúÁÿöË\4}Üᢹ1¬5'.f‹ƒú ˆ/зچ–üµDgH†ÄÁD=³7a¯én¬½™´–ZÿcÖ…í¥—¸MÝ£‘B펐B탷C2¯´.·œ–^÷ ºï\”\·q×oÉ,‚y‹æyi.WóڐˆûU©ÎI –:ގ#‘†–ø9$å¶tƒC¸²nà߇Ìc’¿Ö´cŸü ¡ŸûÐN¾Ò\çæÃ…ô]OS²ûë—Òë5ž +¼åŽ–ó`; >¿›¥í7·oŠGIöN·îÿ€È‡ÿnjýDŸ—WꙡÕÐ!—¡C¬h‡[D…Fº ÃT34ˆf±fñ(uíú”¨g1Hv´3´È}\bî™ þ5øäcÐÐdÐäPÑdÑäÐìrˆ`¯(M2Bnô†YŽ] &Y -í7Ô'&Pa|B:8^­üµ¨ }¶¦©C ~C§Ò!ÔvHet¡úzu ‰T)û4/óè`zD:.”‚¤ђcÎÆÂ;pÈ<Ò%(¨C^oQaûà>¯áh”m¨± “•¦ûB¤èº$/·Ô0/×är>#‚S5576¯ƒC£èÕa0‹0¸U XÅNND°`· •/°ØlÀ´5«4- PëÅ¡¦ÙÁhhæty"sâãNA‡„ÙòŠõÿ‘OSò«õÙ{ ŸfðÌûÀà`é~¼£ôª?^‘úâÒÈý.×´~šGì?\‘úæËÑúE¤Ñúޏ×~è‘ú܏Ø~’Gëú?)S¢AR­¥jû,Ò!¥B&'²‰Z·³GSºd"âêPŒŒúÈ]‘ùB?G£òåßg´œGèØß­é ¢?]QúüÙ~˜˜˜Bffe åòø„ÜÜÚ1ҟF„ê?Oc³iü~g©Ãd3Tý&G7Õt¹.¿«e“ú™vyLçYAÓömW;PÓ¨ú½vGPö¯$ïRñ˗9ì:?T£÷¡èwšêê톇Íó{НGÑïuûíöÅǟçýçwm÷{¾ç?¿ßìµ»Ïnú‰¼Oøû\. Ûb1V+ŠÖw]×Úî±x½‹Šjm–·Œû N'¹Ï¶l†®–—»oGG°ÐµkÛ¾¤¤î*ºn›¼×cq½î¼3/ÕGë½õ»ÂxÞ§¤gÏUñÍNSžKÎ -漸¹Z¿å¤ï±m»¿µØú°Ñ߁˜è¯Þ„nù¦©î×¼Œºôî-Zç“×r)~¯©‡¥ü<ŽIâh¼»—þŒµï +Ï¡{Vƒñÿ \Ïø}ýÿ04VþHp­d7]VI +Öt¨ÿÅ#ÿúa^ÔW,BOkß«Èòð€£ñsO<Çîg/º#nG¶‹Ž÷zÿj’ ¡hØY³(¿ÔLQe +à6¬ÚP]r>gV"ÎÃÎÀ΋(LÙ=£uÞ! ¼à˞¸&ôÇÓqokS\8ú¦~½Zt¬rQñÞY’ƒ‚ +eòdÉÄÎáßyÂC¸Áb©Â‹dÌ¢¨ž|š~JYNfùՌOµz×Äñ×¥;Ù=á +ÄԄB•³×íô ;®hYÏee˜7kµHRzΚ¦ýþ>E(º†U›ÖÒÓá!V‰´z¬ ¨ùÉ#hG<ÕóI˜€NÃ42ããl÷ùŸÍÛÒԝÃØBÿ‘ñ .Ýö©Ž‹A_Ɇ ”ôD€Ñ֐ ë>ØÄnlt¯kìó§­ é§jú•ûý4‚Y«“{Kóæœî!óIH g¨šèl ·ßô½'ú›<ÒZçÛf•ÇúóI5ç÷…îÃüä#Ä7ŸØdÁFÃ}D¦278ˆë]r£F³xÉlúÖò3ðÐæ‹x™HÕÝЂïh™%·t3¹}¡€IxžE«)wLMô­:6¥§\ìœ8~²jîš4Ä`n–ÐáÛÔ$iIÓ4¬nVQr|$œÏþts9lü»»;îž<\ïrFãÅðJ¾öhʎ#&"–Eü½<ŠH㑃øÐFé¬Ù'‡–Vçm)œè²èäö¥*a8È'Âݒ`)hÈ]2w8AAA;‚EâÖ(ä0­•Íg‹gÕØù#$û·XIGرýÕ$Mën¶¨SÐEùhþÀ¢}Õæ@ÿÁ`f)DûÝN‰m× ¬ Å G–³ž2XcÐ\üPòŒ‹–Öu³ØæwQ`H¥ûÛ¡d €¦¦Ó1¤†Õ4 Zínó=³ÝŽÌÃ1Ï\˜‹2IŠå^ƒ‹Ñ±è€6ÄÂx( jwm™Š7 +ȯçº&7ðzfUÔ5¸äî¬È3ø +Î6{7IA%½ð’Åô÷s:Îè’!Mül ¼7²þÒ+·õIdf¨.0Pz>®B +G¯µRVò¦žð|=1ˆÄ®âwqô-THÀ8ñó’åkËLAye²v™…åñ †úŸ[äÌS@H.¦ì®p™]±VÙ0‡2ÂÁæçì$ …Õ …Õ\Eâ÷”ôÒaǘ”Pÿ"|áŒ:" Ùï¼(–™8¶Q-‰pKXËèønDƒrTOªŸÛt[BOýN\Hœ—¿5f Seå¹9°¨V×îJlü$¼_¶Á¤O%ž­eâ(°ûjà”´:x|0ß+‚ºÁuŸ¹­ÀÕ(xSu°_ÅÖ}àûþŽSL§·süÊäòÀ‘ˆ]± Ë![ûqY¹/ß͕øÁxÉC8š¶¼”^¤zá˳„bB4çasözâ:V<12–ø\1#IJB³xâ>¸ØÃñ Q!{W€rAïhmIß|ŽI˜Q IBم'/ÎÂæ@ï:’‚ \ +#ò.kݼÿ)ŒžêD%tto“UüòÎ1uDm‰}¦¼k„.ZÑÚۅŸºì +ä|Žs¦VÙŎ®(„^ kIÍވ9œUqt7¶ÎÅç¤ œÝ‚ÿî ™,€}&á‘»ò×ÖòŠ%\†??ÕâRÍGÚ+‘Ý£èÁ«ªÆ­jÚîA Ä)+…Š„Îú8¿¤‹~¡!¸¶ž´€vâ12Cnúòª3°ù pL2ì»ë³-jö$" !C‡M\fq7ë›Ê<ÕUcyyõï3ñ-îóñë´á$}ØÈÙõŠ.Ó»(ÊO%™"a±•…¼¢cÙ!â7ÉIJ@íØýJN_éfpkM:Ì4𗹐tÿFLµ¿"8éU‰Þ)v~((òZ1-ô‡<>kՐýŽx~úHÌ<œÑyg™ø Cs¶$˝?²‘Nå«îŒç”„cº†™†o¨Ú¤•0/¨ói30±ñ0°xÉù¶qØ'Q6ãWƒ'菊vOº™?KM¾àW>yG™wU,L®Ô°É·$p[ÄÒUù$Ÿš´e^Ã`Gtêõß\ +>ˆ¹-ý>ËàAõ`ÔóN0u0¤=ÏÞu{9òÏ5hñ'ãq*×Ȥ„:Kä`ċ@[ŒƒÏȤ<Øó}%ìÈ$<Ú$6mR’ˆ,¡‘)Ž~˜èËOÐsNrLü·‘ ÷ŠÕÎÍbêüJVW»½½‚ñFpàq †ížßñ¯3ˆ_­g»f”Åíîî'œêkÂåiXw´X$b8ÁRÐæ ]¿E"DŽ;ºm‡mÖ2aSËÈZœt´ÙDCG s˜í i ë0ZåŠêÀ*”BÊåŸ5ÛIfi:§_g`§}…enc.r<&¡¹›I…äÏÜ0CŒ€K§3ø]§ãåXtΫטÂ|ò@ý‹ö܉ýûnߪtýSzdj%ÄoMˆˆîÔã"û¼^,QYéQùY”îUÚpõÁ%fRîw‘Å£¿ +hÙ›xÒ[+>­½ê~!¼Œü뎝®Ö5+ª–Ųx2Çó#uu»vêçà®Â±p-æ=dÄR9”Å„=îWì!¶ÊøCz:S¶wçueؕnüÎtè—ÐÎ9;m–xLuÛº3è@µ3(2Ï)ÔSŠ< I)í'1Öu$`Ð +Ø7¤Ñ(¯³8õâ§ïÉ]ZÍ呯Z.bU˜`)ϯ±ÓÁ‘r`¢ªôº _†¸ÛCðm6‡yC™¢›á£³iöL +¢}‰RL¹ŠNÔ60âÈÌ®§(‰õ2Ht†“7›ô10qÿ\s%,e›üIdcÄ"°Èröõ ›trˬ´ÊA$Bìhÿ’y'h»ƒ#¦½<®¹’–“)aÝiV2º‡4:Çñ.èAë[¸øLÜ5kÓ¹«öž4¥lcÒaíèÊöðÜÊKñ¸Î­.â¹7ñÿ.…(cÏ¡E¦Q¢Xz Hó4)OB’æGuóLc¸pÁ]`ÂeŞĘ24ÎT4ªø ä­}&8RŒ«§§¤©÷ö"ª0hÔƒ\EÖÐæû@(DÙ»ÁÌðÌ'Ù˜‚2|:(ˆ„Cdæ9$ý d.%›}tr »ø!#¡9úób Ѝs9 •Ðà-J6Õ¿éI)¼Qmõc­LX3#´šJ¼NGN¬:|?Œ³©õãçâ[Š»‚+—‚‘æ:­3)GÒ +dœé icŒû+ÉA[̊{ØÂ_̗lrÑó P¸ n¤[þŒÖ¼ k½êÌ´jN¬e¬åè\}t &“Ýè4 u ûPþ„Ò¬à‚˷–ðüᬜ‚x×raÞéöA«ÿ e>\¶ˆ;ÙÞfâ÷tžJgdHiúÆ8zQg‰ë‰7=ži²sðÄ8#žJc&N6ÍpXT÷Ô£=(Éç_-0 â½½#©©pÀ÷FLs˜·ñ9o˜|sˆÃ¶ì=;|cæjdÿÒ>äÄ/:mõ#–˜ç³¥‚rÁƒ³M'*¦5qÒ.¢õCÕΘÀš·ÍAu½¡P¿löÁí&:n°XtÛé´{Ê3?ù†G{<,!'k=ëT. ýzúžñY½øxV˜ £• ÍÏe˜Pâ"¦¸8^ø¾nálÞQfCqêuÀÍïâ gÙjÌÌ>×X 9nŽõ“Š‚6–£¨g·ò–”Cð]$%¬O£¥öÄ¿„…4EÀa‹)ùÇq£û©Œ%mÔmYð6 ½k~à™„€DD)>BžãÎ*=`ö¢_“E|Kmñ™½öÙ½ø`è¯K-g¢Ê8®v‹KZè¶ú:-p'z±|Wû4ZbÄÀ0Þ'£k݃£†ÛFFŒ‡ôvØG"»x>A¤óMº–÷ D°Áßïžöa<ƒÍ¦Ý[7fAª‰<: …\Q"ŠÐÇ­ÿS— àÁÙü•?(çàÂØÉöŒð¡l~ˆ[É;§Ìˆù¡l{Ïù*³øBsÿ½qò?ҍ¸ÿñOÜz¹. +hÚ×ÀMZýý£k_Bה¤¦B“KEFÎ$üéßs)h÷ »ÿóË +ÿ½¿Âv ˜“¸Ô$pq‰“»4ÜÏ:Iۙ6]ÄÞ÷ßм¨•ç&Á?,›#ۊ÷ó°Ñê°o­ì‚ߜð›¸äÛÿ?®‚Éo;aq +Oó ‘ÿBÏô¸_› 4'_ž)ï¢Yϙ8¸^dm'§3%‘íÜÿvQé¨Ì“áâTS 5…^¥‘W©ê‚œR»úL¥¦™e~ Ìë¿}\Ã@³íU’jîÌýúMêµ#w𕨢û„­x¨o Z …q!ì+'ïþû¹ý…qf¦ r²ÉT +ènvË%N\ÔïæT)ü)©áÍOjdhzC)½!“KH±xá~åbƒS`jx#Sš5:q§±X  Jš4ԍ6†ïvF˜mL†¾ ²ÿ_¨ÔÖœA©Äš™fýÊ%I©•ßSZ©5ž¤Ïܔ×--ñV–Wòc0rMPÙþæ=I©ž¼­ÿs¯fTÐðÍ^jq#O~`ŠtÖ瓇M|Ÿ:ÿôÁÛíEÁßßþßÿö<’H•9÷Ïû•#¿éOh°•§­_T³ÞÍIJÌJ¡eM+΃ñ“ÞÇü“î|¯ÿغÏtM} üwù Êá¨ú¯¾x¹-ßu'oû33!2À0T(@"2S9& ÌYрµb֌VÑ ƒ€•28 38b ^֖·U-[hÛÕ@*3 HÀ*@¬‚Õäqª«@Vs÷ïßÿÿç3$„«Û]vú÷W]ïµ{°ö½ëë´öµvþØ{kÝ]ïvýø#߂~Ùwàí§‡»Km²ØãoýhÊà¶ìÿµ$À¸Tiï†bìÄÅo}A˜­UÇb¶|Š2½,±˜®-û(ÊõF}½VøÑ•øÁ­·2[oSS(.©¦ÃCÈ̐kоÑÇ }yš² }þàÖ[¤²òÎA„ïòÛ°÷òä©pä`gf9| ŠësL³}Ò]-に´ƒBÁCé0#–éNI<# bÎ TárI“|]XÆy‡& SfŽÇN~"_ýQírµ\ó §u–J˜ƒf×óZ_õ³Æ\Ø9UÇEѦPG}VÀL‘Bª"¾eõ +»¾Lè€t*8rãÉ?†ZjÙØ˜êkÉT³ìо® Ó£Ÿ=i€VÃ‘-JÕoàæŸ^ºYoüÂßü*Ì}.+œÎà +×'2#o/Ë óÎ`9NëäSºã)ýÛÊ}Õœ½Z)Á ×Sý‹ßîSÚ³ÿè çö—s߯|Zö8!šmâôÀ_<œu޽±èÍܨg·dŒѼùwÆ ޗ4ÍÕn­„ €ÄjŸô¸„¦uÄ‚b‘f §‰ÅZÀ9¯j,ù4ç™ÓÉ­úÆ´}f0!ÈސÖé[ˆG¤³?ÖïvTP!§è›Æá¢€ ?ÁÄ1ß$éŠÿ?Ò˜31X=‚:·H¢Ëm/'¯ý§³Tz&VUi{GH ´ÁÏL%ùÏÅè°ÐòS"è1‚£DèvBÀ@ñЮŠB¸ÉÕ¦0c´Y”ߟ­OKy6˜i*ÐŒG¯£²×›RPIۙ¢¿/¤•«º`De=Ó0Q¦(Ó_³Z`Á8$Êo£¦>†eÝÁ¾ÿÃÕ§4pƒëå­FìŒØ-ä‚!m`yvb,Á4!¥\‡/ÿ°k Þ©Léê™t(€V8XgcB¦ú˺œÑú +Ü  ~Ð@ʑǍ| ƒG×H}$Ê ^‚Ó#|º2ø- Íǜ [´¢6–]Óõ{X}µÀÓæcYÀ´Ukh¬»¡ÐֈÐ\ÈÍ‹EN Ç`jûX(G€ÎœÃ:šË~šTÐS¸×cÙ³ ¦[ôѝÏ{ßjã¶p–»՝^7eΈ}3H xÃ>¸õ=Ȑ>z’%ÒYú¬ÝÆÅÉþ»púËëYŸ˜ïY0 = Aó¸°µûP,Zð<ß -TT̲î—çq _ÑÄ2ñ2z£ƒe·œy-²‰ ‹" vÄË[ÙH»ëàrãÆŸæ‡ PÀA¹•¤j÷þÚ´ ™ä¸Îþýÿ ɞÆîHp;È ™Q§â¢#êZíKK +Ã"(}ÝpÉÎímKúíN‹†–a“=§2g—khî\÷F’®Ì1ÞèáYeÞÕ +ʟ°ú4üP˞îìZàtö´£žpí¬I•´oµ ˆvs{L–ãSÈCÁ¿˜dg~‘ž`Á‘žhC#8a Œúà8ÏôíØR®8W›éááhÍ]˜‘¬ IŠžpHU„—sÁ:¼Þ¢&tƒ)Hx#i  ´DŸ­µZS†( Ö9‘C´.Œ1l%6 × fÂ[’0(v÷Hᆘ¶o°A´í˜ !‡ºõ †¦šðHˆºJáŠDÛÐsXç/C†H$Ñ]^ÑPø$?š:K>ú¬¤þ>a}º.RÜ/ñ¦r¸_ãȔFÿE%‘c…þWT;"øÏqß/åYûþN~0¿“¯û…ü±5CnY—Ô¹/qËyÄ&+…cZ½…T)Ö·¹¾ºÌ/ŽIõ.Q;QÐx7#çVNr‘“©*Î=O°Æ¥ÙŽ@ìÂöIÂöÌS¦&õe‘©* Šw56˜ È©Íñ;.XìºG̤>`SÑ- Sю‡ófìY€)“ÝÿäSÖïÄgÅç×á«Kçf<1¶@Ž)ë½ûh¤nÓ°)ëxK§¬&C{†Ž™¶õâÑ«èÖ»!OBâŸlìÂhòü«aO(oÚäm°[Šz¸‚F=iS#©yEČr·?þ üÒµLßNWˆ$cðþÑ#DJGi¡!¨E$c&‰ÿëÂÕ#ìA‹æÓÕy໪#.ä¡^/ˆqhšìê•i0Õ*—maŪáwvÛà?zü¨=˜µlb ¦v±i.¥Ãë¬ICf·ÅìÎØ0°ê#žÛg~Ý Y¬h¤Àð ¹T¡€«mŽ©£h’›'“Û‡Ýp^5Ì0~'Ò`^¯Ži¸x@ƒÃlCP$©ášP·ZZæÁNà׉“%«ÎÜÖÎËg‡fP_^}Ö¤ +6lI ZêX§ Zž~€· SETÞah²À—ŸÐ-¼Êƒ:¬ÊᆂG½ËƒÚf¾ù“¯±ƒÃfãA§!÷Þ.&¨³’]Nj[3²}{[þà ?«e71® =“*-ìi É7«˜žò€*®ƳÝgO”w9à‡Oëì…N—½QàÔéD†úN8Ðæ“¾ÐÌ`C¼‡âäæ[èŽ`Ì/ 0­úÆJSÉÖ Ì¬ÙŸW3Çøs`H#-°)¦ü8!›0C0ü5U4Z¬ð³ # +‚oTJ +Ü* Ëc”:ǀÇÒ7½\vì½êàºëv?‰§ïíêÊY렂›.zÉN@7mÇŠ ÛóŠë¥h #áÿ4§øƒvþé:æë¤”\·ãJ|`Ý»ì€nÝÛas~‰—Ïrøßý+öààvÝ#ä÷¼ïžq$|ŸÁÅHù8²ŸîVkäüfߨTÝpp=±Y¯áÿŠGÉùŸê‘òp¯Y{FGÞ/hÈôÍÿ°0Oþ‚zoà@•ý[‡$'؁+ø÷à  µ Jä»0L_ Oÿà`›{‡'íÉ|@Á=̗ùƒ÷ìþJ%^ôHŸüz%]9+ä/%ý(•x9$Q䤿‰V,%o,$¨Ÿâ¢Uùká=ÃoЉWû épíÊ̸®ÁŸñ BxßõF 7 ¿ªqÿ¡÷ù«ôFoá¿ÎekDú(k}©ZãƒIåmEÆeæÛÔ»SÄ'òPàò<‚³§†AxàÐ:ö |`o|pdÁ¢våkŸù)ÿö oäÐüþ*ß'Ù¿âd™ó]}WAªeÁ|¿½wæ5´inN’òĵ2]úÆýéï–½­óÿTý‹C‡§¹nnçGfÿø%_ûÊH+’x9®ž ?èÃmäPãʓjüÊÿ²“w_Ö²áVõ¼z>× º§äЙóýoý+[~Ÿ$»Óäÿ‚µ·À뭐¿sŒµ M’3Šò_²È_ã;ãòd¶…rÙ?×B_Á /Rj¿SñP—ÁçýQ_°:®«õЗòFØ)¿|EkoµA§ñ%GöD—/¨_Ò½èôö¾•él? dž%˜ íËÀ}öW6öw>Ó¨³¯%Lšª"ýY\Š=/F1i@ok_³}¥ +ñËùLʖž9^ÌM·´•ß§7»IrU[€È0퓷cï­5‡™øýÝùs÷ㇻÙ0ßMRéŠ5côæx’ýâw§³é¿ë¬ÙP¶ßfóò‰¾®~T}õi5}[¹kO}^k§G¾¯q”·÷ÕÛwû  Fc)ì¨~¨"ƒP)æ)žíå<„üè æàZ%õxÒe,̧šçë§æÆoÔÊ0Ma@þôòfÉYÙôØaÄÉ{õ¿Põψ—Œ.P‰¦tÄzªŸé‚ò åEJã&k1I¤d½ÿèI—·¥B"agƒ‚?n”½_ݵ1Þf´½ +VpÛ=™ÒHnƒ”nâ¤úä v`mmÞ ½œï‚ö毤Y[Ⱥ­á«ÅŒfcÑ«û3¼`ðÜÁ „/ß©ƒ/ßGÌïXXFsjH¾ÂHôüú Ý)¬¹Çuã‹ï©@­0âj+‘µK·+(V$,°˜ƒDZbƸ£ H±®‡Ã §«¸ð8ÐäûèxŸP½-û>&)5ȇwȇ£‘zEÀÕ¶]5™ÝÔaß –ÆY7þËZF‹sÇ4ƒTRƒ^¨<™9B8’Q2Й¦;žR¿‚|÷TùÓ£å‡1Ñ+ò•ÑO•¡[нàXJ˃I‡2`Ñôy†u-c\X`ÀÍ ýô°‚“ž)"­“€µ4EUœ&¥ô å\¤s#ò¥{Çh091tOßaŽEeÎnÞèŠC’å WX@ڍš¿gŸF%uŽëT9âx‚ý÷ÔÌWÜÐvo§÷)¥1LAVêdB$„š‚`±Öå6wJv¼ÕùH"ulµðk÷ÐkZB&0O nc|/%ËÇŸƒÀ•U”2²—T‚Ë —è¾é·àÎhGßlÖ7hàÛdlÂq3pÑøBnp_‰ú"ü¨´z7çX7’;ãBíÕ˜êqÎbLTȞ78BëÆþíݟ|²8 “ý9Y^Ö {0|±<^%Èçahà‰j4VœŸ±€IbyÈW÷9ùB…$‰¹.ràõ2‡ €J®’ØSHWâ¼ë7ˆbŸ4ÒïKüG´E&þÑ^QÝ·ÚS3x¼°$€Ç «Èå] ³—±ê +ýi;𕽍Ձ;Ê1–uF$p'Ýx`%Õw‹}&á=ÚWR;AŽŠtõ1ذXeIÞ'‹„P©îó±JQ/ÖïC§a~´u+êžOXú÷ÅÚ±ûGØà⊳<6@æ.ì0hOA”£=b yÐd€¹>¾F×±ûď¨Nt½¡O»àÁ¥Y=§ÝÀn ~ãëômþÁømN_9[ò´û„çW\°”XA_ÓýZ!€ÛšQ¢èÂ@<àÎù`e!å<˜3'}–Õ”tµ—ù¦M¹ÝÓæÆAVé£$nÁo“vkD–=&^ž¸G¼y7Fw„p›Hf;6pŒ…>¢HG)v0©còoäŠÏ`bäd¹Hå"ÌWÿÌ¿r`1€›ÃžŽ®*V)í;ÉÉ_a“‰ÍÚ¼¿.k¯²; €FRÏ7uµÔÐacyŸÈÖÿ.ͳ‚Z©ÂÙáf¯S4ŠKÅør”’D¼+ãô¾Ð K +Ý|ëé›@ÇSý3ôGž[~SB©Ö ̟ÊhÄ 1@؋±ƒ÷ùÖL¸›ŒÂËŠ弩¸jÆB³$ Xòv”;á'¨[ÿ©[ÿª[ÿTö&z<G umMÇSdz´@Òà% Ó ÆÎ8õæ@›6•æà_·hûàfúì ‹†ñv4ó/`ûîóSv|¼œØHÚ)Q’ØëJyGµøºB×ò„±p×õÏÌ5àÙñÍ÷òYÇw– r¶èò(M ®Žê¾í#ÈŒÄÜ#%KŒ¶»µõ4;‹s‡T~@ †epL4I(÷W Æ7õ{€,£s@:*0sñP&A³äñOë w!0yøð;¯&ü–«§ÂNrr'ygÇdìº-r½Ì¿'Žº#ºê’ÓŽµ¶@6šx«½¯¹¨ö5ž¹[ç<{ý \¬ß=iÇ8BYK£C+•å0,hVLB¾š£0Ý!¸Òö ­Ø¸Iî/ žh–};k؋pXz0Ëhè"˜ÿ, _pt¹ŸÎãÅÛåR…8·ýûH—~éáî㿦pËÕ[ô£Ïºü9÷Ô-ÆNV ɘ3‰oÛ@HÅ5¿m# ý·’ˆfCâåoŒ®e¹&ÆL¥Ùo­Ì>­Ïõ¸‰ª ÌI K^‚ÉVVBў¡¹|j%‹àߍЎÞ=ƒSÍÀIMÞ/L=‘õÇÝ!љ‚aÕÑ&ôà)«uœGEû…õ„md`=Ì̕2Æ37ݘ5 cœ¡+Þ ûÒTÿhQ2iò7)8Ö+s›äf¡cdFJD§®VS< &až.¡ŽÜÓùW+‰çMÉãót†=¶HZ}‘“¤ã\×ûƒ8‘wBLbA0@óœä…‡EáAN(ú^×sˆ”[aYɳ¹6|î±Vû;ó×_9Ïgeƒg90ü= Ÿbƒgܨlûì¡TWî} +!7ŒÙÿÕFÏ֍Úx¦GÔØYCëçu£FÉã#Ëa­oÖÁå—ÚOž·Ù»IšÅžÒWX6u¹Q)B©æ#´¢Ýhewò Ô§AšTRën57| ›+Fq¡z6‘Ó/4„%{ g~¹wƒ90ÝõτHîæ>WxhýÍ;ÕÜϊút-‚Éã¼Õ¡„Õ›ë§ÊL”àìÚ­(ÙK÷gÌp{ª6aã%âÙەºåkDӑûÀŒO I˜ôu&ðD^ §æ +ŠAð*Y²·ºòñÈùö®išežvù‚ÝËÔåГESI¸ Å7@¦|š#¦Ð/¬ÌäÓj{ ^(¹PQIÖ >!Œ)´§éŠ¤Ó %¬1¾ #:ˆñM„VCÝû3ö™š }¤¼vÇdrQ>_Îk°[nú¦V¸1޹ŸËø(”>Áu²“[‘à%ù¡Û!,åÄyªÀ´Ðâ¼qãXL\1—ÜÆVÆàŒƒ•’6‚±Ë Æ±%Qí£¢Du-eq$ð~”x)¤BesjÍ +ê¶ó?óæ¾ŸN'à9îFö¡ýæC²ÒÀJÍŒ»’‚ñ}tCq…‘Åk*ýÀ7W;òG5‘4l‘¨´Éßùdˆú}Eˆ>Ÿp*äÜh9²¯'ºÙŠgØ!¹g›Q D¶CuõQ÷_¦´Áòën”¯˜µ—ÓÕ295Cjʕö÷âÕHŜk=îbü«ög§F™Õƒ#Œ„Ÿ¶;NñmŒ»6Æ{|j63ÍÆ{Lj62Ed¶;ÄØÞáq$Z;ø1rö7/\Å}oŸ~ÇλØ_æ EÉë¦C«ç–Š+‘ dE¨‘ f6‹üôˆ•œ’‚ìר+LPK#”`PGu^ûB +h¦5É+~‹½ÚYŸÙ#ˆ* ŒzWùó-k–¨Ù•ªcEuPËE*MŸM¢š…ZŠt¥~Gõg×þúÿàðWùïx\tå—B¼vdà R·Â/*«"Z÷ìÑâa^òÛ<‰×·{hB÷‘ÕEÏ¢&kÑìÑ®ÿ›±w™ø+X®&ÉØU ¹Tâ + +8*Ÿ:n¤‘³Î†xŶא + Ë…‚>œ梛ª.€ËY‹ÓKÑQ\RåYàëÄR¤Z5_:È{¡Ž¬B„Ÿ¸wÈÆj³$WH.ğ©m1H¼Ä½é4Ý)çõƒ4¹Zxò†5æ$z6Š\öŸŒQÕ4¨ ‘£ˆÐÕA/,ï”k ú¶Ã[²©[͛6ž­ÚöûÛ:Þ«He=«œ3U8FKÕrîðûSÆìÞ„%oAº!Rwf>[`|µôæ>\z@Ÿ+¸2þC­WȽíޏ⴫lAVÿYìïÌdûÓ:ËCd=ÄÕtþX ­¶!5°.¦Á TÙ+ƒØ6Méõo1~àüö_}hf”üËڋ 9æ¥Áë'i?¼-R[ÑöÌÜcgÑ´¦½–»ˆp±Ãʨo½Ñ³ !n‰ÒÌtªýèÃi·ú[? +-Á±ã'ŽL¢'EeŸ¸ž˜¯ VAËRV)r·gbLLÐÈä~’=£!‘PÃ4vCµ4+B\QØãuÉøøÆÖîÄo Èq:<°oYÓ2ðÅW—u)û”éDä‚×åz ƒ¢ÃjF².¡:¦m(rcÝ_&bs¥¢  & ÊÊ —[bÃOÙ‹òW #Ý;¢%qãÍÞË+‡º‹v»­ÉÂèÇ—§¼†És gî"y,¾u7ÍêÌO"¢õIXíӓ`¢{†Óš1¡¢31ÉB Ý£¥*¢8‡4bÐ©e•ÝÎN‹ÅøГÀä²#yhkµˆ¬«_Ã]€¾«÷G‰¸£±õ}?‹.¢åWK8kÜÌÛU@ÚòkMÚ l±Æ!Ö9œÐBÆó÷ƒ0-O™9•ö.§\¡×þH#|)<»Ô>qH„+¿†UÐm Tlr…šG~钉&¸C:ÊýKíŸ~ï=…_¿w%…³ïÝ¥0øß´¼#yUÊóWV4Õû–?À=rˆë C±® b#Çêr´À²úäïžaŽÕÑ£¯ú3óWðÆ#ZsÖS±˜a­h'×<®”"KfÄ®´†Ž+̓ Ài\÷ ÉuÊå~þ¥k¸Zø â©ýHSn„÷àèõØ1}—“…â +át(QBé=”àØÀ?C&펆NLÿڒÅëE‚51(% Ñ2Ÿ.Âé5#?[C~åÓ2!ªµÄê°7èºNïש¶—D8®ú¢Ô\ïüt?±Ò+©‘Ñœ÷OÑÂ?®õI{Zª€US[žª›s AqNÐU¡cY¸^×f™éÉëzÐ9X†òeW9£B>ncí‰ œYçT|;{p]B-‹£oìÝ¡÷Ls5«%ëO.B@+ãsYêÌè¨cÄâZêÓ¬ò ¥iul Bu Æo쬍dÎ×P±ÌNüöâð¾ømùíÅÑ}æwç\Âûà·ç\âûç‹ï8¿MðŠ»Å÷õYi/¸¢~8Öc ïø7Ç[4³}Ë'ҟïà—Þ˜ÿ¾ùsýû=ð*7å0‡Åf–øg ©€¹­¹ðÇ25†J +ÿé ‘ˆ/ »¶ ¿?ç-;W‚Ô1ì“Ô±ýñ˜²j÷£1dÓJ µUÑ©­b Áý Y5҂¯—{©3´ +}^ÊÈúÇ^Æ Þ“¬Uˆ(Ō{,AzÞÀÁ±PIOÓ²;Oàò°µ-iü~¦•1œ£,a (”erP¾Óµz˜p[x¶Að˧TÅd("¡T¿f‚ßbZwL†6|TE·o­‡^zÙ´L@ZçfÄN¯_‡B†¨IVÄ­qó…[~'É°Ç` ^`çÚ¯Ã,oKÎGÆì`~¬nÁ¡È¬–Š]²qÞ z™Þ%²zÉ9Ò­ÝàKB®ÃÐ:."/•:ãâÐÎ}¢žL;©¨Ë³^v%d7±< ¯ì¶»Ô —$¢ÆlW÷hZ¶]óÞT÷y„:ïݵÂÁó¢û8U>0׳N°ÄTJh|Ê*à¤í¶ àŸ/6,0F¾á ;á†R|%kZp/aÛÅ* 2B?~è+ÕáÝòþäW©¾Ó0ãO˜Z†%@³í?}¶Á¹CàÊnGk×ö¼Êם4ÐҜԆÄ&îæ[æ47ÿ”ö ÈapT81Eª1Ã]´óÒÅ÷cåÎÞ½Rô“×´ðlÐ!U¼B“sÞa‰ü øb!“!¥Ú>dæN]{Ì£H a¦w¸âŠgpVuþlq°ë"ã$'ø\7}ۈ‚E¸#¦Õ™È'pm!áßh|®Èï³ÛUùØöÀ¯®ÙlDlú ·óaǺ¦¢Ÿì,ðONlöTîÌÚI¦§j]/Dz™ՙ®m—mŠêy2òä’Jíy5ŽÑ{‹+UØûfn’}9´dœÌݚB¤ìæÌñª#¼W#y‰1® ü¬gxMš4€ÅÈ6F¨×—¹õF·Yl»õ6 Ç·èǦ¾8Çe2­‚•ù¤aë~±ü<9ëL|,8:¼ëûÒoO;‡9¢,Îb9 7§ØáÿZMéè:@¯5|Þ>ÕøOb¦1Ò÷Uó¯†õWwFô֒µù¥µÛÁPeÏ`0{Ùè™ÚImwƒzƒ,ªÊ^ƒÑtF´LÏG%¥Àª–cR.ÎMXâ’Ëz–Ì-ßÜRÁà×ן!§<³Ð&QñOW½AO…æ—S¼½½ïÙ2C» ÷fhÅp{–º)œ\k)›8)jb¢‹hSrÌÝ.ÍË4($ê=*»ShçÜi¡;ïfÐcg’0÷úFlÈ¥ñ~ïäÅû¾>/§ââô‘ñ}<Œ_Œ¢$ah)óA’Þà¾æÝ_„„š2 KƒŽW–<ÚþCI V/9QŒ9[l„Ñ3.ígÁs\‰œPւCϗ4Å|/¥.#`¾ã‰Ê4ÙpqÝ™ 'àˆ¶Â¢éï]z;eƒñŽÁ¥ódтbtXgaa‹ÏÁHŸªÑÐ$ì„ ÉF:°4Œ¤«ü‚@4ÇÜü¬~³r¯Wwš—`꤁oQÖ6T˅QÖ7 ßGQ` :‹`Ú {[¾€X +Ñmƒaùì ×焹#Jt œk:ö÷ëKï†n"€¯ÁÑõ"=§„dy"ô_ óä'ÊÜÚ\á}.±€e–=ÚÖ;ü—j“ò€þ8°l7ÀTÝ[ƒè]@ÝôŒW,/ãœG3I°Y®—"*š>T[Š,B`úyöqkï8”‚þ9ÀÆáÂÅb-Ò-{’ƒÏ2(8i:©ǛMžÈ׈ ¨#¾&j(-Ão¨p­u  éF^ÓPÖÍüM0Rì'¸}I÷Ql/î5žÍþå[  t‚·üµ0†ºØÿ7hDÆ êÁÊ;Î›€-ߛèòq’h3%Ãlœõkë¡ 6Þª`Æ<Þ?¬miŠ6Ö/t¯  õde©aT?"«$’[P-adƒa~‹_%r­ƒað¥ ëj%»ϯçû•iÂÈQ¦¤úbZXÄ·þaÀ×§û°èA£§DÁJÚ +ªu@¶­%–ï~J +wvpkÖâƒe¼Ùe7<öá`¼iåR€ÿ. ³]7LíB9u)ߺ ¸ª/ò— ^øMy¸] ­°‘^(PžBd_pCpZàmëé‚Qa;y¹{b‡ÑÖ «·+O)’P½“S¥ŸïQA¤¸ß#ã(GµW8KÙ×yZ¹\¥êGŒphµkÔN8­YÇ6­’pÏIdSxxAý-7VûX:´Ú¸¯X$–»É/ÁVmÕ³‰oÈÓq`:þ®ëk@ÍãPÑܸÖf8œêMõH#;±§nŸ“?LeQ¡¨!h´3›\|ŸRVª¾ÈFw/[C&íØ&nŸ¦Nu*lӐ¼æª\‚!è[OT<¾ñϱ)Âè—Ú)¯—¬ZBàÝUÄ>· øM Æ“z¶Âïömg騧‡=foQ´BYɖߢŒÀÍä—ÝAÙ4Ãls¯Ö>=>áÓ8úgšèèmÚ¥­-+ؽ—«}4a¢T^ZÆì.›À)uSëØqÊÝF”›v Æ¹ôÞÂI5% ˜h= h>cÃ÷{oöúÛ"¸Ëî¨ß¼žDéÙ¼¹mÞBÈJŠlCíå÷;*D@§’àÄ4–úÌÅn¯T"Nñ`&&ädû·KX )}zMjÃó(’Ñ\ÑOU½‰X΢ãµuò«bwt¥Á“œ©5Ù§µ,_d”£ÛºØÝìöâ…Æ<3éå°§KE ­‡é%2±; 7¤øúА&è¶|J_n¨Ÿ[ó)¾"Ï3ÕXɋÜYȐwаnù¯TÝ­¡4 2›M¸]6Òìt'LFŠÆV郢À](p$YK|£uǏ[uâÕá-‰&§ŠÐYcAß|gõ25¡1!Ä0³Ïé’à»mJtÔ*Á„k™†ˆcÓ"ÍèŠsÝ®ooê 6…x芖íäD›‘¤^yØè~>>¡F¨–›|ºþ©ž5^¥)³wÛW?ÞP¨ÔC ö%_Ú)>˜»ãÅZW=Œ ó¼^Ҟô +!|”1uÑ®<m³ÀDUú÷o¯€†=u|”b®S_Ó¶";jä쎆xÒ=:{9ûµ·¦ +z¤LGlêÛÓHð»Ï“ÑÊ”'c`Ì-0ÆI1#“ô¼akïՈ+> UsbA¨Ã¼6VUha©Õi½–â~ `ø]:Œ4’*µK܉7púy³7•ñ°Ç² ¿#м,ƒvÜ]—…&¦F^ôe>4êY$ãõ¥©’šéMNŠpñ:Õ hí¨®y)kj+žêފç’ÁÈ¢¹ñGæ\Ž¥¾â5ԗ°^8^çÚRBwäŸ5´fÞ˛é{sŽAú‹£-ïÄ#n<2q?;»¶,ª“§Ãd{1Ýö·†}™­³¼Aûì˜"ªè˜ÁµÙŒ6Ì{Þ.Ì{Û}˜÷¶û1žöh'Í¿ ó’ÓIq2EԖ ¿$ª:·VC× öŽW+‰%¥»¼©È:[÷|[ÿ0ËŒó“–[ÿƒ[ÿÌ­-¾üô9›_¢º6EiLç¨êåFT•Æ%/V¦É(Y µ¥ªZ_›ÔX!Õ|«-(ŠoàéAvÜ®&(´6 ŠN”$›¥X“xÒ±=²§ûžç ²[Щ”aƒS#ÀZ^: Mê}ëŒÿŠ(Q>ÞæÉAnÍ(síõßbu€˜Ó­ÚT°Å6“‘ù7“wÜ¢AÒòÐX!øÌô”é&ËOR…Ðͤ¤ûy·Ê™Ñuù 橳» +1¡h4âéAìæÙf¤€ks˽‰@ìŘ£$èTt¶•„Ý{p¾ûºŒ^Ç}ŽÄlVÈìéð™éÀçÝ;}rÇXÔ!zyµ²q®¤3CZšõÙH×Ü¡”éi7¸ úx¢aûÜêŠÕÌÞéìE‘£¶AÏ=´âúòX ù}A>m‰CÚ9s«#‰~àI³Z!¸Þ¯¢O䝿¾å˜éþb§Š,ªG¡ô +Q:^S‘5Õ¯E¼]‘üyÀ +èiO›7¢4¹è€ý-éqƒ*›SHDh¾b,O¿(í`3‘*!®>61|m»ì(âcèÞô[âcRlOü²îBƃw†¬+Dè¤Â+Ñ0F`uí¢8؂óTa8Ià¢Rðˆ±V\ùí£×êi§ñ6Ò;-)«3x%yað‰¾}îÎÓ$ýÚ8›ìMRœ¸.æx[‚õmçñ¸/_Mi¸à€K«“³qTÔþ©¹+ ðK} +ð¶ƒÁg ¢¾H7‡Êö•µ$ãm -ÚZáSçæâpdÿ÷ƒ!ÈOÛæâègލ;{ô‡ƒALŸ† ²²–¾å‡)‘ V;nHa‚súŒ¨xÕýÑÝ.¦Å[Ô5‡é²dú]›ìԋ;½³”ì±;,p{ÍÁ·“}qÄ}£ë†„È»õmç ÜKKÒ5Ç+yÖKìA˜¬Ÿæš×R5m­ÑµlSëusõ´­#Wۜ’y¦¯1ï·<ãÌ;î Õ}#QÅ»…H¯¿ø%l9–ÚÝÜ«mmËXJà-Ú¿û™Up€t€8×f§^sߣ˜Ç­ÜÅþzòXSÆpõ5ÐjX§?qtfƒ#¬4¯Ç~ÖJÍÆÙ’¯fzӋuº¯ñîCºº•®¯jëfQwgZ»gŃÙúý¿ó·ÝEŠ»oÀu_éPÝæì£×µwŒÑÀWÿ±ÉíÜÐÃSàC:n#[m:ó4µ.¨ª럽Ä&÷p(:á;OæOÔ¥¯Úc†)rIíL—Ác+ “ "0VÜÉ\;mJÀ @…™™ =›ù4ͳ l +Ëúh]K²“âKP6 +M'ÿ¬áõÅ»ë|Xü­ï+p¹¬Þ3Í´Ý;Èùm´À6Y>œìÚÒ´2·mÁÉv€ +¶Â¢¹Ö^éËgVUö¢þìæá…O°ÔL±Ì9ã ͔ƒÉÍBî °¤érûʼ;ž”Îî°(i»Há÷œ9Y¿s= øÄ¦îœÙ‰o‹›Û™ëGø2ÍáŠ1å8^ÙǼÁ½­\Ïyð‹E2(})Y™ÙOõüvG³ã¶ ]8;m{܌_¸«ø#À*q±&n®~”Ý-}з(L¿ã”^Å·e´sÙS'ºr$RÔu-i#Y¶J™;˜MÝQLDaËtږìªg}}£²ï¨´( °A ƒèâè½A`•·tpþ+ÂTn]zð ½Î„¥ÖȐs•-…”[¸ùM_bŒÌM†å×5-.ý„³m<×ym76/¯AVLDg÷Â\j8á&–a4Mâ¹ Öá’O¸ƒƒí\®º..ØÖ¤µÑ¢j3|9º¶²J¸mæÄ^ŒÜR/„…"Ÿ_hikš‚bqí¬¶‡Waçj.ž¶"¨Ñ2ÅOϯÐ嘼¿ +§7§2è)­GºMþ x Búòh7‘æ¾â3Ï)dßßyǬ…FՔwÚ°úZ†dÙ6zñ„‘;m\¹â¢ y "~§¦ 6û‚?YæyƄ#ÑPÛ)“ED{[¹Â£t\ê!ƒÞ\˜vßð¤C¸O‰và¢ÞP|nÜŽ1ë¤õÂΑ>¡'ƒ÷Iւf: {Ÿ;‰á«çk˜Œd֏ÀSèñ/ro,<ÝЋk‘‹h—šð´.o®Å?s&Aê¶Äõ'Ÿ£¹é¸ˆF´ó¦Ð¸ +áx¸ûß:<Ûjöjãöå ¼_¯ŒXP®ká¾ÿ‹T´ò a»}Ña½wû ſ坅þ?ÛË9ÒÂÿ+‡ú2ͧ¹–~Ya¼ñeŸðp½¼³,/«á~Œ³è=Ì6Ì°ßÆ÷0Ú"ÆÞT'$O )ø¸LÊAWXü[O<:0f¸‹™\ioZã°EÇ1ë\zd\$W¸ãwxiðWè]݃H/-öI$¡ìk"¦ÐÎÑI¯PUæ-€"ÎÊó¡mò҇h6oÆa²#oL“Šö=þæA†<YËëêùçȋŽp8¤ÿ£öŽÞ–;B9ÿž{ÔpÿÓ=àp¿Ó=Ýp¿ÿžëñãŸk5%L.TÕ ‘R¾šÔ"ä¬Õß*ƒ¤~òpœ w“º¡åCÃn(F7±(]g:MñwK±»vÓð’tÇu ¤ 9^Â}(MSØo­q Ï~Ì¡¶·ÎÁhúSqéÍ{±x/Á– PÔ8‰7…&à¨9ÞÕï—±Q$ȑºË{îMJŽED²Ë÷b·ÎšiM^pio"ß×kóÒÁýÕå,ýOél#õ%½æÂ?ð¥½æÂ?íå¿êØGñGFüf‹V7k6¿ÁY°•é9-„¯þ¤e lÿù÷-pÅý=âè?ìØJý8Äy?q°•æ?½°•ÆEw„¹)ëÖÊr _ú¦*V¹òŸÆ>_åÉÿùٓ÷UÏ"µÝœ{œãÚá=Üú#“ŸÔŒoúÃ*b?a‘þ#"¶ ϚK‡~¨ø:ãØq՝8²{v\®U°2}Ò¾ú–ß t´+QóR¾¼;VX{i« d!vÕX:Œ<Å+"/ǁÈÜxhÍE­ô9‚T8£2€M䜩íH“¢ÑLÎL{W¦¡I!ú£uìG²Øv·E׏&Äk#Ö,ƒØ¨1ØI='±Øâ>¢YºÞš¨Ñì䩯líoìíïìð>ºòÏkg·¿³ÝD³‚òçYX÷t±ÙÂ5^Ü^=ŠÛ¤^ÃåÝG¬C>þÎ@§£x0QÈ»~)ÁÄÑÁy!Ähûa úEùjÚ$ÿ²®g€‘+ð `ÍǟœÍ›¶vy4®3Iô;´íB{ £32øð¸‹×û˜??>l0}lÑOuń¡ñ/°”~,»ŽnÍ~«é]’OÎû1“Ù¸ïÙ©…æÍÖ#‚ªâSL Ϟ³DZÖ1ìØ·þðƒv~ÓӒµ†¯Ùš¦Dûñ_§'Ãjky£_ +âUp܂™ ûïK&ªñÎGfz}Œtù~Á+#û) ny¼m}õ©X}¦âQà0SjÙ󦝤eAà#–Dô¶õrO¹†P²¥ÏaÝe扂諡3 ;½{WM]-°@>¿ +’@JM(¿)¡ÇºÉ™†°ܓ£Æ$·V`ÃMÐf§ìCLjx¯YävÏ2åM¤˜©K¸ã¹2õ ° ÷¡¶P].¥öÄŠn.¸Öu>é$æžµÏ/”»^P2W8*æØÖb— +,²}-Þ½½_)Rûfݘ4×✨¤JM0u¯Fjp²‹[GœH½ˆ[+bÍlL¦L+¯1¼ã±z–E×/…}(b(Ó ØO€Ã~ÌU%7of4Á§XÜ\@Z“PµÇ‚ÿªYbÄ +‹ßþ£ºy.ë/tòpI&ù¨›Æ±4oQ·L‰%ÔÀ’][÷œUÚ>ðDR@àusAMf,@QCºrÔ¬žMBÔ5¼ïbY;$ž_˝†UÜ[So’A:ÚüÇÊ­5JÕ&¸kõ±ñotbP Ljt{vÙÆ`a¤´X݈êpj¡Ü$BZ¥Ød‘N¯ŽôÎ\²¼fàÚHݦ˜¦¥GªXˆ : +%æÚèoŒ¦<ÍyÍUސïi†§]‚Q†û!ÏQÑeöJچÜÆQgT)J*.PSŸ†hlà-4±Mþ5>"˜5D“¸pb#ʳub‹-ë +É'Óåø /Ì#¦‹xö}ÌWâ?T’¨;Kâ"y¹7¤`4¶ýÒ !¨ø ´½4 J;mÁ6NC¼´Äûm(ùT ß±Eo»¶m¥ÈH,-¢æ¾PþG/¶šdӑ².¢O†s}Ãnñº¿/a}ÃpÛM虍¶>Ÿ¾‰´žÐv“ø ë+Í#m'f͂yOJÞ ByE¶“ý±÷Û ¾å×ÙÝÚ¹±'Vg À£êí`îeöæ˜ð֣|¬m˜€ ;DŽ¶Ëª#ʹщû)o‹BõÜ®;&Sº¯*ï^y«Ô~QÆÚ fz$OR•Ø11ÂÁPvìW2YêïÁa!v†ÙñLNIj¨NˆUX­1n‡hP݄_±-ì'O”oEðr¹ÓT‹mnE©°¨@tãj+ÙDa»·kÙf:ƒìÆH$màèËIux³LcÕy/j2Ó88˜;›!”…&lÏNÊ<™v7ówŸNÈÛañQàzhÑO{JW|a”O¨h¼µêMB9½Ù½f¨vA>Vý÷·Å›†º|¦R%“Ëý÷%5î¯ •ËÉ '‚_¸ë¥²ð^ Úõ«»µÎìJ‹óÒçA·—:ï6—KIn®æ< ÜÁæÖ0Ë챪Q¿p’uÌìOWޓn>êAàh§y¾’ʈ»n¼XbøºB š¥i$ÙðÀ4¸÷ïFNסBÈ|T¤’KÜË¿°Þ¼´0iZ²¼à®¿#>P@|WMÄäBö‰.§¯Q1WK,š&òI—!oV²–¯ÿfôû؇ofµwHf5몵ƒ$û©UÌ¡îËtÙȽm4p`½ïFdï`åt¥&P¶,¨PÒõW\6t„ÀùÒ®5-n̽vèòöG†Ü~„û­cÈÒ W/æ 3¦9m­ê™5…úêþ¤fëåÃG¦Ñvxï[]Y»feö‚³ÜZáù´š…0þéQMo—-`õÓYYô{‚ô¦Ì9¬—øÅ¢˜Œ‚4œœ@å¾ 1-W¬_¾02î}?¢…ׂNíH'ËÇS·Ä‘À/‘ÞF5g7I†‡mlø‰Qí¢üÃQyÑևÓ{F :~Ñ_ý$…‡C2ÝI|pQˆ¥‚TN¥Zú^DIø*tÚáò·)®s«kiS+…Ö@<½é?¦£ó™Oۏ^7®. F?Wc¤GK´°Ð²nžÕMø˜6ïöρäãíԁ¦R G¿yγ±ÞŠ:aÛ +=ᅉ/Ý øBÞ¯µ°ŸÒÁì5/¶c?µÒ֎b×jD¸ì)–Œ¾Û%GÙ×;’Þ•]‘W;kÅsÇSêÏ #ä¼èUÿ»°Î3ÈíÞQ:3«2Žr;g“ªÚ0jÿèÕÿü +?%å -N³†dvtæ^)íføÞY}t.SY½á‚=ÖowAߑ˜¦ê¶ ùöæÚ{=~ÕÔh&ï-‹ ɝü³FÏ5©G\· ›Ú+’kû¸¢ÃP/ñ5ŒMÄ÷ŠMÄ÷ŒMÄ÷Õ&â7%å)¨š°vY¢º[ädÃÃӕYÁ͊,í­ì,•£Ê œ ¸p^ÇñÖ±¶oüºÄßá:w>àöZP“€ÍÈ,Nõ‚p¹^¬<©Ú¬ÃQa2©& ¿<(&‚uEõh úØÏ¢ÞÔÿiì𰊰Ì?ßi¼óvÚ_†&Q¤wŒ$Z¾pv,½Ž0®Ñ%¦ïíÍññýì™Ûé` i¼e;áVuÌJµj1-4 a[ݪ0¯›:lW¨iW§JÃìÝ“““^dÒLÛ¿üE{¥¸lõ CRïJŒêí„úsÊç)‰s,F£L¶Fq[Îÿ‘v Þµ@6È£Ž¥öá´.ԍè°ó_}’A+èLúèN2»Ì’ùèD¯£óùŒKøPÈÞÅêB+šøjŠæÆ ]ÈÆ §š_D¸1Ñ£híâšßsOºØà|wKøÝpVñí—ñéÅ]˜ –ü›SôQtQÇWuFŒ,Iݨ£ŒK~lìãw7F%Æ7sžö–‡Êç'–Ïcâ{UtµÈO°º( ‰`ž”¡vNõ6T-z88êlIÓ ¿ôY$btŸ¯ÖôŒ:¸l!ç«ûo¢d\íµf€L[þìC¦aæº\¾ÌÊ÷Ó{V¦v/£"¿¿T¨d÷ó$>°ùãÖÁº4gT¸ÞqÇ ~—*aè>lXɪR`<úÓ#>‰¢QÈdhjÅl¹¢_\pP¼Ôµ kM% !?HÁ8Y¶ŸÂÓòàN§ ´à“ƒKœœ¬;æñ(7Çz1J Ï2Yz±­} +žh ¡(ÅÀ÷Sw…N®¯8¨Oo9ëAÏò¢s–ÿØAÔ÷ÒãìÑA4‚ ô‡z ±a®Aô;:š&æHÜæÛûb~è}‰ŒÜ#gø›>EÙáúúA,’Ùnѽ:»õÛÕ¶K—\¦?_w¦ €^sq§‹´É)äՆ‰¨¸~ ± JÈHâ?Ô׫Y½È{ã òûs#øê‰³2®Q·ÔF)o環L>ªvÂ8ӉX +üs$‘à(}Ðà¬€A‚>𤓢mÁÍ/ž%2ãðW¡æHBøŽçÑPü¦×µ6`¦RnAr™B÷L‚Ô¦¬·Ñ +e,ŒS)ñL“bS)dÁL£ÓåHѐïrAåïI°Ÿè5éL¡¹H¼‚™N4:©¢FÛo~}k+¾¦d¯ûÊ!üä) hræ'ÿf›x;™'Þc4º‹e: `ÈT +€ÖádYÑBƒ,¡t ¤ ±©'Û7)´‹ ?†ðê=»>ïE†¡d•Ö0Ü Å:kˆ'=G†&×8D)|”ÐpãA®‰vJW`î#q\‘f¡fû‡ôìW}-@¬­n«"µ"½ù|Ìt·Ü­6«Î¦ÀÔsÆ$bÅ6»wא^¢3µEv‡ÐïQk-†ì “O$h…ZÉ/‡IÅØs>zgŠÜ OÄæX—ÂM0>¬¢"Ôòdᓞ‹6Cšs’!:ZwóוÞÅï×G£Í† öîÖ®ÌF±knÖvÛsX¿†ìä„h±Zݜ™,–øä…(±}ñÉ bÌoÎH^‹òœÉ,åZŽáÅûƒ’"ÅÌ]œí)Û³’"Ň»9" +ÙǸ·õøl‡“æ-ë"bDÄ]åg3'¢Ëï·ë’)"ˍ߮Hª‹,ÞýrE„Y~VýrE´Y|ýúä‹È²‰7úÕÞÈÖ\~â%w²<ØÉ÷ ’3¢Ë±àD®ù²ø\‰V²÷Åe·‹e¶óFýâ‹ÙƒÏ¹bæ9$/]·˜¹$Û –Q²gÊè‰dÚŲü‚%–o˼ó†Ë7Ëûû‘²ÎŲ¸"Q¬|[/¿+-[,²ÑE²õdJ’â-–~èl©E²äÊËOË¡-kç¸×]D[,è¢3š-¦Š¨Þ}þ}ƒ*±%´<ãüE-4¹j`…ð%Å1-¦x䶕KhlhD¶úu¡¥>g½f¼äk`‡A.§u9Æ>û¢ØÇޏ¬‹cy΍{s$ø+Xhm‡ýRµJ‡7ª©•Pé‘^°»ŽÈÞµ¿¿!y‚:_o 09ÇÁ,„O\ö¸âõÏ𛬜§fº9ó·Rô€Ó‘õ››ÉaÑ6Á¨µgÔô—ÜŸ**>³…ýS4Ú.„wvȁ\ª÷¯bW«%ïX¤×F½²qodŠöé痽‹æ¥y|ø¬˜®F ¹Å”iñcH“»¶f¤0F¡Eð’_ p¼é±'OXvsâ-u£I~ ò ?]•ü1iyÆnwßBô“ço ¤º©æ=õæöáÕÂE:c<[«Ÿ‹uxؤŸè¹ñnwÀ1YŸ¤å6¸w² NPÞÑ$þs؄¢&Îݦ5˜ùmíyÚïå ™Ï"W߀ßOc‘ö£ +i’xØÍÓïbf±´­m|”(¾I“0ÜA«—Ëãgç… I›Ww€ù»Lµ-(—ËJÒž‚B5ÐG•Ǐbã>‡œÅÐ.ÍbPs9׉ëá׊µ$%b÷#˜ (”‘‹z>‡wöö¾Õ½¿±o9'\fZE֞®µö­öþÕ¾ê5¾çñpÖp ?pä›û|79®Wó’oô“‡$ßÌÎߒoýiÎ9&ÿÃiY\a%o”ˆI¿Ñ^‘•̤kӐøŸp~Ø9l %n&èúº"’—öÚ¦|{]­kA'{¨7ïToÚóh}e:ˆ8ïŽMPìՆ­‹.æÁ™ÎéÇêŠÿ’Á>ì&o-„y0°Ý4!dñjƒ Ñçóoð”ÏΖ[Âø'¶S'ô®7APCtV ·Á‰ÚÓKѹÒ>œÊ7*ž¤®õ¹„äS¦O;7ct)RÊË6”€n2ôŽØ„e|åœMõޘMfR„-O€µeWƒïØþcÉõÓÚð‹$Ò?‘N˜VÎ0²ÌÍ»(Nèñ0¾€Ì-<%ùb›'oéÚ¿žüÅîoۜs•y9×:ÀÈ÷sÐ\оGˆç™<ø×rlÞb—A¸À»Hº'öŠÈH-P]Ò·N%]¨%O£n3!çòª÷ŽyŸcJπÎõªµ–T¼±œ=(ÌOœ  +Jœ¢¥æöA1áòT& +Á(pÝÌœ+šË€YupW;úíVàåܶÖÕ5VԔcšÍØ0k¼|¹• q8ƒtۃ¹¡ð‚_sÿX:5—˜ i/Ì0L<ëz»µvR‚¦}sœ}ï|§ä‚dËÕ+Ü XG‡&!±$ÿÿIÔ| dpÆÂâ‰ÎMøŽ7rVî$ ܟ¬†¨`nåé¡ñnÀÝÉw&ºsÑyo‰ÍÇ%†9a1“)pY86§ÝëY_ònd0 ).±[v,•S³;% öt£»‰pšØÂIʃsKÌ8¢{7W2â‹?‡:¡›¸ß–ªy( +÷;Èä1ÚYÒWʟ1:Z"J£w^à&² D¨÷ègò£Ïô—á†ú åႇٙ¼LêW‚ Na ªéµ2+ÌP~;KQ‰/Ñ})Ë·Ý@7C`ûrÕOLiHj:Qò¦GJ?Ø —òMôÜ¢aúrýù”iðFmˆ`H­oËþä§_{êÝ¥õ™8Ï&Ì_,oQúšõ^­ê6¼tÌA¡¥¹Ì€ÈyëÀ7½Æ÷jƸÐyM×üÑÆù*ëËõDh,*?²¾†úÔ©˜‡lW‡ :›ëÇ}²Úüûɍò¾ÞC»ç^’ªŒêØFžF‹Ñ뛇…!³wa¡Ÿj¥Va IèÃ@˜X[°×Q5çŠOx ‰„÷FÍ/lR 6¨K­gÕ÷Î{î ý½¾ûçgïnh:ã?tÉý9ÑL’Òð°`3ÒïÀùz)£èÓ¿A—åð†Aj$b½ó7,æ±Uù‚•ûxàÌ Ã)5Ý((>4XC⣙2§Alɼ«¨È´*ú:–[ÀÕ ßÈ÷Ɲ²ÈÁ3½1½Áý‚áÏkŒ[DWñZC€Ššv+X'¼Cï'ª3P—ǹlX¹MnzÕW¼Eº`¥íu[ X\‹òÕåŒ]·xm°ûƒ‡XLù÷f§Í3Ռ¯:÷žã"K’ÓÆäÜQ ¡ŒÇc€a54.Gävt K Ã:I|O\8®5[®K{ƒ>eŸ˜àóªIW§9`pƒÌ#˜¸CÁxä‰qE9#q^vm!ÏЁrÑâì53ƒ5|WÑï(•ƒåý‡Â þ¡ L/¶Ï3ˆ£ŽŠ"æßǂZ'›‘uOMB‘Þàë]>=‡5@¡ýeƒ®·ÎŒ!ý!cþ ¡w°`¾@溛 }ÛEû }’©M ÐGRDÎ6 §‚mÐ)ozù;å5ÉЅâøöXµ2àÓÄÑ´.SYÚ ø×ø;9íNûð'äTÏÄï°Pø¯¡Ÿé ‘{«}™;»Šh|¤·ß™,¤—ßôA®f`ú2I>³fó"Žˆ¿î+î+¨ +«@>— ‡ö(v±eølDZú»¯ùãñ¿'dÌùA‚¨¤¬àÓg:‰´2ð=æ›H§(¦´57¡©ÌÕØg8*ê }<ñcö¶õ>I°9ð`ѸG‘ü +Rjaï JpÀÑ%S/i +T°ÖúÔ¼?-k±_9½ÚÔ¾Ù +Q˨àyf~‹Mk¦~0±!¨RmÛ©ú†õrŽ+¿€8bË$?$ÿÄd‰,I[NÑÕ~À2“l`à‰J™^Â~¢±£PdMç@ŒLM‰{ø×Ùçs燷@·;8Ýõ½Ó÷2%ΟéÛ²Ø9‘fub¦¶yEx-ðŽ˜p>}+ôÄ…áËù•á·Aó]a¾a' †X2ÃíY°2—0‰kU»œñ›ñnôcKªÔ¥>µëÚՆÊ]M QÁù¦œ«ˆâÅñÏ·N}­Rƒìÿ]@ݺŸ×Tka*$Ï¢I2œ¶ÌmÜ×Ý ¼iÓ_ò†Ÿ¦‹-Öõ>qøœÖ„KœMˆû›:I:Ç-µº9E2÷çqÈ@+íœúá˜-¾ý€¼ïs—ý|Ä|C·ýxN飝s+I"ž¾ ¼…ù”¼ Eg Ü5s+šj溑«»ÖTš¼CZ↠ë©â@ºšž”R Å-}вήíÚpݧºQ3Á`ÛJ {lˆ?jC›Aõ¯<ê$/ÓØ9ËÚR¶ÕúӎⳐsà3™÷›ØÐÛ+œ.`ù­iŸõjæøÆFµ?àó>Ý`NOÊ«îáa˜kLi¾_´uLì鄯SœSQð[v]¹¨A™:,Ÿ‚~˦¸ºÂ@d(*šs‹LÛ1©7IÝ{§†@oªJñÕàÓÜÊ=ý\¨(ž—ôÂ êZúgý*»Ÿïld_ҁ»ƒg~m§›•g›Èðݧ2E¶›H4D\¾±Ð±¶¨{K—Þ’é¨è^Üi™Þ¸œ·¶÷ISÍ5|Ai(=¬+n!²ßÃrÿáLÁeügoþ¬æµ!ƒ.¸Î¹škK]Ô5J‚ò{Y¼bN½º{ è!•í —Åå¥e °Ø:3æx)€ÐeûÑYĀÕ7áW x Ì{CÜÉ[ú‡˜·u?¬‹ÌŠaAK*ëÈ%§¸<ß·(|ªºZþ® +fjhƒ99Ùõ~cí³Örjd÷ÊêЖr(uÏáCQÖwŠr®ìUð‘2 ® GRd€ÔKŠÌ½öЦÎêgý3pÏ):ʶLï¸Ó­±fm§æw‘â;OÓm¦«;§Å¢ŸoÄGÊáÕ@Kšd?:á›éT/‚{7LÌBß ª,¢¼Œ_'Ã(¥ ]˜ÅÛq=¼_ŸqãƒýA¬ZaN=™É!‹ ÎIëí­ÆÕwkµ7­06å¼==Òý]ùR µ»Êñ¼~ÛG&(:¼Mô·ÉÚùÑ+íÖtE¿¯ìº%~­k§Gìº%ÏZéËJÿÜNßX¸»™T ÛóÒ¨·E'ä‰Ûÿ˜¿kï Ûö’˜vïoDíúyOxNގ8¿/)í‰ÛÈÊp¾§Löû™?\NßI'ü‚vü:OyuóZN%+î‰ÐމÏü?埙eÊåp‘eº—€gȂ&\aþ…püð`˜¿¶4Ê6½TµD­;S ÛáÙb­£ ۅž”xw*ÿæZÑü†[jLgÍ®ÁRì=Ž›xà Ç÷}sÇ»ð"þÀšø%¸ð`À»eÅEïDöê/2¼âkèq@¼.[+1Åï³ßÖKal4ªýø‹˜SK¼ë[Y8`Ç6ÌãˆÝß#´:1»6Rß#cÿj[IwÒß[·G/[ƒ°)_î´­ÜäÃ)Χ +Êq]Áç2­ÙN}’Ü©mFÜî.Ôgï¼Ð?ø‰Súð·$²Fd°7Ò(•üq*û|Ä_Þ=.H•'û“ýÉþþ¿çãR–¦w§‰þ‘ÿ†¸ÿÚÁîœJ8²Î²ßês·ôÚ§ÕúÂ7ùß÷v±úR‘uùä&ùùÄqó¿¤Gß9ú]¬^aûhG¼€¯Öqlð¦57÷õÄqÁb-ƒèT[›÷€#RmÖ÷_ÛÆ´ãÖpS'·uaOtâ[K͋ñ4ä(`ÑZBcn3|Þɶ® n÷]£å\Èl«8 tWT£ +t˜èõÚ/ÇÍÀׄ*AÕÿ-®> Y€ŽZT 8íWòTàÿÕÍ"ªçà´k‰ž‹Q­÷ï¯fz7„°ð?h>h¦…TSB6%úä51>%èS;ožjø/1 ·Ý£IÙþÌ̙$ ! PB¬S$€“2Iö@€ +Eª“­{,´zÜdÌA“>2õV¨;[R©]-½·E½°VÈA„B Ñú1V (2ýû÷ÿÿ}Ÿd´ª×[ÛÎîó›»Înó¼Þsw| ç7ÁÞs|íó·œßE[æo™¾€wÐ=§ Û[n–ÈÛ}I?[zì,OJr z÷õ/P;5ôù0¾HQi| ñÝÔ´¯•#*VYUÚÃ\¯“Ú ›[]9+F˜‡gC‹ci?(¢Wš¶C(>ܜq4ý¼ìR~ܜmÈ 2×ñ%>6 Í‚µäm$&aZT˜½ù ‚2Êv× mâ{ägl1ÙÛIôîXÛâDÏþä§cDnK÷4›üj1´Ó÷ +ýºJ.ðÖ`»øÄ’' ºK‰%>JÀ’Uƒñ;Èz¤XDfHZcÝ«Lax•½ Fñ9gÕ~¾Ë—«Z:T¬PÈp¦–É-U +aºƒåIH»’R.Å%s¶–ƒœ’‘w-Š/9²IÜxƒâi¤÷`Ðs{•ûTäËÖÐïä–¦W¡™ó¬BŠÐaÞ97Ívð½•6Ã_Á–W5ü¶6zåeÖ|Å¨ÙŽáÑóÔÀ&‘ÓÌÙl<L¬«{]ƲMûG–¹ËTLeìéQCîÈxßÀ,µ¦žÒÆcß^¨!:ÇÆ#.ƒ¾•ß^lÞ  Ô¦®„ö‚ŠIѽ¶î¦PúqÔbº~ø«{]½0=PÙûœïÁò¶“¢ˆcŒÝ§ Pô7<ɛùn« <øÖÕrbHƅñ¿W!°sÍM¥®%šJ)XÙçeϐÍò(?`ù“Ó‹~›cní[P¥šv–4T'‰·záQoÿ:,¸N‚ ·ÿ¡ pÿNÐ͹.åÕÀ·ýícF×3΀óð|Ñ @fn1Ô ›ŒEÓî=jGÖÑb䀿_¿`Rp!w$þ֞ÝWæ°LÍ$›pVWé23`„‡}6 Ø)]64x&v íËÿ )»%8¯çŽ“²ìv›ïû1gNä~ÃÃùd›\ËÃsŸß¼6y‰!ŒÒÆ´nÌA‡yª#š+°¶‘râ¸À@"™ûqö°ý¼S֜V |òùËÎÓ1 ”íŸI‚¥|çÎ?E}+Ó¿ts³¹ð {6’Š  +ƒû…A4hR`˜‚7p`ÓãˆtL€)çU +B$Ѭç¡oCÌR¯çtÖ²„Ò®}Ç¢êOâxn›}šv¢Ðz ˲€rÖ"LÒzOP} HRmËTpwNãÖ­¹õŽ/¿×dW ¢gë%éóG¶ÿȝæl~¹ÉÊëÆä6zBâaéQùmÉüÊì F“à«ù‰…“nROÏÚZá|†p?Ԟ$ÇŸwXª-k­ìM>xÔ*1–nÔVÜyìPßp~€œ8 +äÂ# Ò/\‡ßÏÂá**Ñ<ÎRœU ¯QX9Át#\ÁˆwNiÿ³FœpIB"ÔøÑz¼Ñ ñ=8õ>z4/™7!üŸ +n#£zt>¬Ð…ù””`{ŮݑõÊ´=™Øۜæ=Ãa|×+é–íªY¾™l«†µžt9EÓËf{Ýß wêr,œ`kd,ªòÑჿºOCŒÁÁs ù7)a%# Ë `"s@3»ÿXþÍVu“'íaI¸…ÛùŽSr8;K¤*8ÈI4„Þ:Z2E¤1Âô+þJBþw­NêJÄqrö«¾ªr«ÉY¶íï*õ¢i]lă8fãɳ›øŽÈy©í³ìyO‘DEHO5u·Ø°:~§·°sy:šul/H¯O÷‚‡F̽‡\¶uÞ4Wb…<ÐyßáV™šõáZíTõØm~̘Z +-²ý·o &JæÉu „!¥:À¬G˜Iö%ÞL±ˆÑ“n‚µÅ ³çHóçN “ˆ® kæÐmBÙ֨;ëØkYdߏ½ž—Ðt2öaFÄû¨8˪¢ªyß&6ws™Hö'~9¥võ.5£=É]d¬ïzïU°·àçØ‰8 ã*‰¤ ,‚Øœpå‹'úSڝ—li·‰°Y·r •sÙK|ãM"6c+ºÃ•ªýõ~1µ^Êﮟ#Ö( 0‘//ŠnfƒL!%+îêNønñ¢N6JPÒÌS›ùCfêhÓÖi‹ã_†\‡HîíÓëÀ÷»<ÑP˜p¶¢‘ñòNqZé…'ì!ԓè˔ï}󽉰¾f§‘š…”•6–A$Øý¼o[ß ˆù #Ñ=ÊeÄ$ǒzʑYÅ@¤SßCêÔ*†„ÿX"ë!Ï=‚§e¡m0¼ŸL1ÇÁ‡LYrF!N{íty+bmr&ÙN$‰Ì¸pSRsÌTX´2¼;‘m²Ÿæ,N¹¶âï3`Âvƒ[A#!œ[e0ª÷qØhåö‹"‚|떾*lnx'<Ý7’žW½,>ãZÈHñ’‚ÑO®Q›ìlI€‚°Ú<=š_2²寖šâ}†®—j#jʯ€“͈žmbÞ*õ ¡NÄíTÊG\&68ö#èŠwn1÷¥ܹœ*“ÄÚÞ0š=C&C· +;`0ÂxÃñ¸[ñî7qㅟOäk÷évoî”Ú_) D24dA}æÚ’&o˜´ßNóxòÓ̟vžÚìI¬6¾þ‹òΟ‘–ç ”¹Ã{ÀÐփèzabˆQ´˜€žÃiSæÁ®ŒŸÌì-¹D·„‘'MŠÖ˜éÕó1c¦Õí)ÆL<?B¤¢hRFÙçpì²h[g…„I¯¦v˜rٓ}™5ƒµ#:M­œ?,zÙ¸\SXÈ8õ»Äݑ4n¶ÔoÁ©âP +:ç¸¤ÊØ7BÅ!ÈØ´Ëۆ ) ûÝAŒŒ`SñçÂÆ„b|&—ti—¦—uênIw}ә|¼|ºŸ|Œð6ÁìB‹š»ú§>Çà JÁ `±ãMž–Ozúúð›‚L€Õ÷ˆí3zåÂ;Æ©Ô0DàŸònpD÷e+9ü«¾VW«ãÄac}à û>HQ”ìBÐ÷¶&ü-dv‰&J¡Ÿèô¥Ñ—QZ¢QÊv`šÇZì”| ÕS¬ëDWE¦ºíÛx=«'zF õ¢w#úü…¦‹ç¦þw7Ê#E,ΙW€aöݽ'Ý áWõ}Ո6 +Ö{œékÑ5^gT[̈„Æò¸¡ÿd^ª’[À‚s®@†§ +;’†jܟÒïc±‚ðºeëo  aÛ\X¤„±X® `¦Î àZ}æ”ÿcÆ q?ÏÛöÊ©O²k§%4œ8ÏDÿÃ?Œ^;‰ÿ¥¹óÿ2v₁hTÚ]9ü¾¡ìÄ|*¡|ÞÙyݓ.ž8ÕPÚé;æH<ƒ¸—Y‰El*©~®Ç¹Ç>ªæY"×: úò`peæ)óyfµ›ežóñ**Ìn˜Yó …ñëZwõŸ^?FÚ«´ddJyQÊû3©c%-­|çY1OQùÎká <ølVÔqúl¯Nè:ZM*0‹p„ø~­ÏL ÔùÒTã[Š2Ì©]ëÄàïI‘26]¬íÇáÈ~$Ò¥‡ đ£|Ú'ú+¡¥1qZVLµé‡²v„1¸1'…|Êh”6s oAÊc:Ü|§#FýÁÇ?Ýb ¸öàÙ[9J×ÙPcDð4{ê‘4E‹ƒoOÂCG¶zH”:4©øoæ]—uŸPŽò§e×ôXÄÈ©É~È8AɀmÍö¶n‡;ÚþbûÂ@é2P91õ=ð›Ó‹²SwwßuÛ=˜´7×J¯ïm*­ÅQ¾ÕЍËù+9‚‰CeÚ0גL¶u•EP'þ!!µÛ,àäFŠ`Šõé÷øÇY{ªÍÄÐiäò{#Ú6Z’8#ù–é$Øqä"YáÞQÔ,‚9«Z1´ÊØRM¹¶_µ¹õ7簃à²IVþ }.€ŠþßEPX¬íËѨAóVÌ%Ô<>º4åLDpz9]YÊâ֊9ö)»˜Vôá`bÚ¹p.ÞÛtu$•Ä<± ÍÍ¢¦ÅÒׂä%P¡KµƒÇEòbê„Vë RÍ&ôÊßõ¸'n†àš º_ÍàŠŠ@ÕEj†yÔØ“ˆ2OQpy¿Âઢ•gd¯ßPæRJ”CÍP³™2J®‘ê,=ñÜd‡)Á€NJúpXB—2hUóñø@îNÛPV­h¨?eÇ#N +ØéImD˜4Ç;lF²ÚL˜©—–µœÅ•E”¶+rÆÛP‹õ°Z€]À>\zâz€çÂó”΃rmý 8ʎGÎ?¢Tùǃ9~ÇAÍX¾ôåX’.¶Gž£eg¼¾sƒ!û{¿h¤ÕŸÄÛO€Ü£Æ:yNñb•¼Q`š{ HܚbÈ~j³ùY;ÉТÒ1­e ä‹…çØá?ªœdÿ§¦u7Ú2ÒªøÅÈy.J˜/D.>.ƒ ª%¡c‹8v ¸¶ÃÍ'¶Ãh„Ð*Ջ7ÖP›Ê‰qöÚ7…¡ +ÊÝã¢1ºôøP­1DlƉ>¶–~ìÅÀ*ñ‚x¤"l©#[HÁÜ9øÁ6 ~Z· +½’· +¼Kw!»Áaú÷"ñîN¥–4q¼áh3é(6£l¥Õä¤ÎI˜€‰ÉRˆ¨¡”{mÝk‘]ìIþbß¶ôvsDŸ$vxXá}ŸúGÙø]ûämÙüj­Y.FÏÙ†ÏÆµ7ºÀÏúÛÒIþ½IÐ XÛñã&;F…{Œ´âþÙ‘$yÌD#‰qDŸiÍ҈§ï Žûôß!&‡f… f…`ÝZç$ºlÆÊ—øçó…{’ûf;7³Ÿ…˜톋kgfà TÍÛÂÞ ›n„uÊ}è#e›¥IQçÔÅØã¨V£¯X€j–D. „—ažIßN±B•¤t a#©+mo3'iÚµ×f/@ûÀFGÈ(`äLù¶ÓDșL‹™±EÇæ­·ƒEtâް¶Å7¶Võô"ø†ÊH·cp|·ïÚÔ¿4¤˜ÿ¦û/#ä¶¿ns¤ä„— Մ[>zP—–ðr ³¼®•îÿ»%áùù,¨¸ï}WHœ اñ'ÿÑ©äIªŒ…ñ4jš2vÙOñ€5®õ68\ “åä꫔×9ÅR›ãÊØD“£—œ¤”©´Òz£ê«í’Nð ¨s²¼!üà¿Ð…3å@EïÌ~„!í³MŸˆÁÅGÝ9lÄ9ðICs8 Pì¿…ë@Äí jêi¼+ÿڕ\m2ŽwøŸ+3ø¬ÒØØ¾õ0LûuœüæÑö^˜%]’<ãAÖÿׯ]6í‡I7 +*±ì([1ʀ`3m8úþ×]C8ââÑ­4íƒæÄÜ¢äÝPÎS­ Z[¥ð̳#è~ÚÍQc1 çµ×o·¥ÒÀêR óù€‘¹Õ5UE(”=ø>҂d_ù\'œª?ª¥“åü“ÔT¦x’¥0s¿S{2ªÌ MÀ!3q {Ѳ}|µ±JK$“åY( ÈñØeº¦÷¿´ÇUxËà¡°ï±S¹p„UK¨“òÅ/îº0Xß8rÀ²ñà)KGÓ9›Ëß •ÛWƒvYáh¯‚„ +œ®ë¾.a~ýƵœŒþ7³†H¾> B,mçÊ*JR©Íñ®gñÎÏV’PHú?€.][kÔZ„+u˜r§=ü+g· k7˜¦ä–®”‹fB¸öÀ«PŸr>íÖ3¡8šÞ° n‚c/ÿ,÷)ÿLöÇùgµžêìŸ!3üRhÛ])m¯úƒm}ys¨bøg0&cjèiöô$ ™¨’-î÷Ì&chmßïÁ{Êaäþb˯¬û…µž]mg,Ýná ;}­ŸY)ø§°jª»‡PÀ»…ÕFº„“%U”ªiÅU›2|~®Øi¯µ¢¨‚]dÇ]M· +,E<šèMÔÇX/²‘tƒcwÍÛÌ^ý½ÞÀ°ÜPd9OªÕZæJ<¬æàE"¨ Ç×¶êá¢÷n0•p ÔòIþÈ:oz >VnþÐi6 +"+`>Ðö?7Àko‰®ºŽô×\” ´eÜ H’îªôTE +çÚE«íV‘4£±.ò9Ù N 鬤f¤­Ø÷ÇIïº7í7%ÄàïY`RK›þed5_~*—À"Š5_÷ +ʇÿL$9”[ÂÜȈ?‘É,¹Ñ—U½<ÇA\7Ä÷Wñiþa !;×Gøãm³êÎW‹ð²q ºÉ‰ŒßF}Èäãání³`U§§ôž†x ëœc7×üeå÷B=JYŠ;[r¯‰ +.uSà3ZÄ +#ûB˜äæK˜’žmkƒE@mP¸÷’ÝÔe'Í!£ZÊðVÇRá\¿zLE.øHãl8¯|è ^šÒêr¿9~qUÉeQzÎ +Ùg.Éa¬ž3±xÎÉ)ÝåO‘n!‰DI1:ò]½ª¹3OWÃù±w¥ÀŠqO‰t¬ïIÄ ‹Ü}ɨÉg¿ž†—·Î\Àx3÷ŠÝԏ³(–”CÂ…Ñ([ ó'…ç÷F"—”‘ïèÃÜXÀáÃuŽjuwaä$×ëм;%i +ýúŒYëœêBµY[›žÖؤ&J³] ­1‰bľ“Ašº %kªË?;³º)ÀAÖ5V†´w‰tqU¡”`×LJŐӒvŸµ¶ : mÙaÑ]%Ϫõ¡$“~$skB|i™i/ TzÏGhj¸ jøoòå0$u;áæ£‚ò ìIñ{M‡±©È%k,—S"$¶[°¼+Òzrô‰«ˆizh«åY)5¬ ”uëÊDw˜n#Æ~±C Ýó]>ÌT½à k"ÅlÀ¨)è7­ˆIF‡“—Sz ùt·¶Ì^³A“s¿ÄËy«à@J l‰Áæ£ï³´K ñ$Ïß‚ ÇÞ}+â]욼ð¯) ;ãüŽjâý2Ó»7oÆä“•H0Ù¡Ãg‰¸N¾Ò;¸œ1ýº-xyuHŽ«IÔ´ôfÎƒú3ä腬=®x@ú¸ÐSôvŽwƒf'ÿp¯XèòܞÊ3Hä¦1“îÓ&ÚÖX‘ÌÔø²‘Mþ½YÉ[1î-uKíҹЦÅà-1j5e)u-4B*r~ (¡¤ÊŒ»ì6ËsÉCÝƒJ ²SV1©½^¯u‚ž;’­ýNð*=P=ÎÓ²,˜±'͚U-ðù‹pÇî °Ž&Lk´ßˆ~CÙ= —ďU·],×MZ¸¯ù‡¾+¯-tàÁ•’§Áê&b× ‚¯Æ$.­­“Ÿk®å…`AÁ)ùR¥£Ý®»{m{™‡FA\ñšrš{ÂJõ˜ƒ²¾t²B6\VòÁ:Àûºk®óC/܋1êκçG]õ‘˳¾f«ÊSÀøPáSsnŠþ%µa$a>i÷]B}ÈÑÇ|~Ù>qÿ^ؾçmVênçF©šê‹Q}5UC –´¤ðšèÁŒÑŒž*äø„)€³¬@À*Ò*\[K¢’þˆ¤´:Ý^¾ÊáCzò¹z -¦A[ü• &ëD˜£_¿·iðK7óM|’•’,(ÈIë‹l¤ÏƗä{ñÚîTž¨œ½-LíMŒkYG*)Sßòÿ½,oÚMŽ~þ©wiã&'NT’è•t.Y4ž‘(yÉp}Dï¶ûBòój†:ŠvÕöÚxV,FÕtÞì%× wïW w¼O”îw‚ÿpžð.m +‚4Â%Ï_vžðw¢­@oµM¥üÞáBPh½èîY\{oAa¸ÇȜ(a-¹¬8äŠmŸª½6"°#þ5s¡PÂ:¬ó;(ÎæƒpÇJN¹WP´}È«ïã{ÁíðºçþéØBþê–Ig¦OáD pøÀdÙ)E𥓮~‘$ž!µ3¢Þ˜/X„Ä?ý澿gÿ_Óøšø?’Ò‹Áó 7þÔ­(¿‡þö”^`—¿ôZQyU°Ÿè´¢æV®éÿ¢MÿW+øÖ´°ü­,?ÿ––E|8„Wí‰fÄïÒé¹Ä"¿ÿk0‡¢ŠŒKþÊU­ù+,Â@ǘB+ýØïäB+÷ßäìkZr¬b7; .¿ýII>>;ù•i¿ò*ç̂µ‰/ÿÿÁRsÿ‰¬ÛC—òþT^Ï9(¿ùˆ‡pÛå5P ï÷­Ñ_8Õçó.à”MüéËôÙÿ÷Û£ ïƒ{ãt %ù¸ —üä—þ-ÄS¸ÑõڀÎ$­« ƒÚCò±¬%XÝØ+iEŠË™ÝØ_qRl/½ÔE—3ò¶%ßt(¶®³¦Çj÷¦켫 ö*Rݸá‡î¹Øz€ßq‡Å*Rqž·¬M¤ó«7:ÿ ê$?Ãι+'æ<ÁÎ&;k»Ü7Î"-{Ü¢óÿϳô5ï*sgô·o˜kLÿÖɎ¿Ö[üÅM¿þeOýªÍ¯æ\dû›G?œòi¹3”¡ä=8Jðvˆ ^Oí¡æ™rÇcòÿ@rVx Ù®»ýœþ*“‡bç½éýʞ>§ôá=¤ßØ`οîç\þx:ǯ9«SóÿÕ%oÿªKèE·þYñ~ÄåC„uþ‡Õ¡pÎjÞÝÿFÿ~ÿ´ûc¯òüÉ×ù_X>¤éÑoÛÕKÿ‰¿þŠÏOý?Oßÿ´§ÅnáÅ~Ö_ •~~ÿòf×NSùk þ«¾ÜçÝ÷ý†ÿ/èø=‡qåG7¥tғ¯ÝicÌXºšyò "=ͯr͔ã«ZvŸ“#÷ô;ZþãÃ¥ûüäYÙ¹ÿó!¢ÀÄ !ÌöàÍy?ñd4[Ÿþ²àşOÛ}§,øIK8L†_¥œùm.0$“z¬qÉa;æNW0µۓG7õMþfCEÉ§|tŸ=ˏ-¢œ¢Ë9̺ƒ)1`ÞΊÁ¿²hÚdìûX{üLMƒnnÁ¿ +“*þEÚFb¦ñ8wøÌEn'kkZlRîÖ²ÅÔ)Iý&éÿ¶4µj¾®=Õ\ô\ñ 7Uy =¤ð;æ5…€&‚ÕÀû|¯ó5àæœi·¢´]“F ÚC›cœ’‡£ +. Ûiè®M\9ø15°òäøÂW&t-_l1|KgМ%.£åýhõ?8úÓ +u …ªÖ0hdt_fFؐ¾Ð.ß;+¦ND˜â[¤"eLRøü˜Uqg«/Í3ª¼… (Ë +w{”È#ÖïŠÅ=úœ;ñ)e ¼®*¬kB÷µ 1ÊKEg?ð0”`ŽÖMñΡþ"}Z瘧€ KÞ–ÝA½Ý÷UäÍ·µÚK(j¸BÝj7Ãã_«á{…_]i1ƒ>Ã^ ~|¦Àsþf>âëCO܁]N…)øE LÝ'{u‰²p(wºÂ/YŸ)‚åà^ŸÈ­¼[Ld +Þ[¨t •ïÉØÕ³ÙfåqȲ›bÿf°Ît|íæ£Ú‡÷t„ºìÉ{‰ö +TÞ~PÎ% ÆD¡ $ìÛâ8ã_°q¯$2÷aÌ@ä`Sò‰¿ÒPÖ:¬ *© O â"M¸8ˆ’¬.K]Ì —xÚÔ +†9ç0;D(B‹Á›•?r¸,.=|~•ÅBžŸ n~rXE]nå(²›hô—'ª}äc¨±žŠ˜º°N=:×x}ýL¦$=M“Œ n7ð€ô7á ˆ–õ F1`ÿîŸ0eö<1^ç4ez” -uÑ⇜°]˜š·“ +tL«Jç7þZÿûÏS +ôf°ï½À›`ðŒªôšAPÑ|FèêØÒ +…C¸NM6@U¯«q¢=;Ý1Â8€Â>Ó>›*å/“öÔ2ï­ì~¥î£Öqⱟƒy…<Îc⠖P§™˜a7`$îc ­{G1ñä…×؏@Þ£G é&É­fÙÅ[¤äMœ™-kê¹Lêné²Ö1} 9µÃg,ŸnPéi Iù‰/aS;ÿMº@'‹Üå·šŠðŠç10²ŠO  +ô@Ïx`g¼¨3Þ¼ï|hàÀ4p€øc|,x>èb ÷…4zP[%€QPQcD †Å„„æŒÙ£8h΂W‚WÌ8ãGþdў4\š!"¼ù£@hЂ¦ùš.Í€> ÜNhÑ9#G&dÀQÿ£G,h‚ õR +@6ÎY£Õ=Y£õͰÑëM¸Ñ̅p·ä·´·„% ¢[¸’~hý£Gíš9 °'Áðú@ø|Ð|>@v0¡E/ uÄöfA£Rh¾4_š9³G8 ,¤hçÐÑϚ:Gµ4t&m 싋:œ¾wƏù¾â N´ßþüÑüá4|GThþ#GÁ4|#GVhþ3GÃ4Îl‰¬À›Áù ÊhþcGûÎhþƒGýˆhø¦é4¼ÑýFa£®69¯êÍàØÁ±hoŒhøæhù&ë7±Z~Mq£²4kÍ™£å6ŽÐ؍ôÞ ©£åš;czcx<ÓGnhî #GrhîÙ£ç>y£¼4w¦ŽøÑߚ<D>z&ì4x&¤hðLÑõ TÑáš>±£ëš>Á¢¡£fhû&¡£í>'u? ×YýÒ:Po똸…Çq ÛUöuƒ Û¯½ö''ûì“2HI2fD‚B’;b@@ nçÒdL‰"EGUäjl­«wFL… +•²89“ã)zùzí½Ï–š­º®Þ¼¦Ô5S0‚‚€h1 +¬Û~†Á# ÷ûûûÿö}™$‚ª)^o›×ÐßK»ÑïC½󼾦û[Þy߅]ø5ޟ~ +e0îÖënÖÆÚî×í4¢O‡¡Ä™;yE”bp ·'ÛGùë†O•°p÷¼pö®9ÃÞ哗´œ‚yW–¾åo&GCøÑóšÀq=%/¡~ÇI”ýT­²öQUq4 +!d;=žÏZ•«d«²Yœs©¢Óî²É[¶J«ƒŽ×ØÔ¼ÑI$ïŒ`ïúàóȚú:À[fÛ FiQÍÜxqÛÕ7Aí0ÚúQæ¹?(yµ*›Êêóœh)]t^u  :ê^ª BÖ (å!é9ð%«â1?[+P@”±K ›”*‰%Ì«>‘ºïB€Nž³C5°™ +7•]LšdáÉB–ÚΪY¶³¯•B¾7fê!ÜîÉ ¾ZëŠOw`~¶q÷a*_w’K«$ëàHxò&ëdö7à + {;½h¹!; Á¸Þ¹Yº`hÜÿÆ7ÛªÐVgmµÔ•3òcë½á´2ÐÑ8՚£&£_õc¢µ6Oº†`/XÓ\•¬²JÉb’Iço*D ×÷Ð@Ìd§kâ“RŒwLÄqdJz”BÿÃê9Z7ìÙ>£’m«ÌtI–§Zm“¶á“)ȆM!!Fƒe=5=(ٔMA Mb'@غœ¸÷úux”ÎT#xêf›©éªÉ©|ÌûLKm]$Êp=™*IG™4ÞIKBŒ/ÊQфxhÈ$Ë)°Ò¬0˜Â8FïIY¹Bt[N’¤Ršk˜Í,DÀ±rVîvhä±\ǝ<´^3}Î(§Pˆ±¾^Çã1cò±ýâÐ_h¼-™zeY¾îBëik3 ƒv´¿ˆ¥ÄňÈÞ]ç¨ ì•ûZ•È úʏ¦n¯œ×ß}ó•ù|UÛågÜ=£éÕÍß¹¤'Ît÷¨¶šç7l¥ú’¿zhö~h´é"ûô}p‡ÿÉ|ú¤Äºœ™Wí“,mÎ7+ži~lúeVÜH2Éçè9Üè@*ҁî/6gØ霸öa.>Êù’ ^x2bcÎâ -ô!X‘Ù®ÌBbl¿Š”KµhõºmáB@ûµðހä÷Á_"R¾î•ü¨‚»)ò äB„L”*™ú6»òʟÐÝUþx:ñóÍï8lcæìA~‚:tÊ$µ8»?¨©˜Œá=”_ch¾Æ /mlÛk’#s!“* ]‡¼B™zϝ^穝n[72“û‹ë;b‹:¼«*ʧ6ßê* #a'ñ¨€„r§l,ßÿ8‹Ù‡/ûýI‰#µ(‡8;ó.ª³þü_šä»‰d_KgJž£c +Å^¢ee¤õ¹ÏÆß¡õ—Ö eo{Ó7m«êºwOåAÄ ~‚r®˜Ç®äu¹¯Æî©l©ØBy Û®€DI[ÁfSNCSø/ÔS?ïæY¡®ŠzŽ—$>J$fþG[֏š5ÝCß}x_æºU¿ÏµåAU~1íyßãÙßK\vðå*õÓÌ/DÚkÄ[ßE5 ìbœ/D9èyPàþ”¸ûÈNüü/uü:t hª­‰ã¼B¿¨TNñ»—ïFëuoé +€X¤KÛAÀd.lS’KD¶`v2)h%ŽFhßvóÕ╦CÿŸìïÆ•næŽ'²÷1$HåZ’ŠÜ­§H[w +ðZˆ /„Q]£Kæ/¥“—ÿa’×7û¸Pˆ‰Ð: øž/æF9¿OdPÂ2{šÿHÑ¥"ƒý0Î cqVÚ<`§eñ +ðÕùŒU(ö\d‡­n·ƒq‚Úø›j>8‰É:¯½Í‹«IŸ~N‹ôˆ“ñ ·õßÀn߻鱷¤ÇkÞËçÉü7P¤ï¢O•¯åyÃåÌö_2VL­ŠUœ£NeÞ [MÊÚv=ÃU´ÆY£¿¦zhìZa4Çé%ŠÈ3Åßl©Ÿ5Ìú:9ËÃkü_ÀH›XÅ oTàŠZÏ-cZÄ(j©õ½„X [Aé»>•aêÚ{'Æs§nSö¼‡*¯.&·•ý6žUÍyÄɘù8 ´°Ùw#a¤]H7›¼âCo°8öÇÖþ ±P%ކÝx{¿Sk{ÊSä¯üÃçÅ –"“4O]pÑfoô†¼=àŠ@[{¶›Ð¾÷vZñÆ'-ûf®›è-£®h¢ìô;ˆeSE~‰4~lqJý"É\ëÐïóN^Ç·¥ÊQï$1ä™^'ü{¤j¼†¼P‹Áöz3”¤ýg”ñƊîÈBan›iÿ©‰Ì^ªÂK2“§Íù“¶KœˆF"u ®¾pKã§W€C¥sGät7«õ ¶ƒzÀ‡W¤ÑÒ®Kö¼"¡¡ê*éiFGÀþ«a}4¯k¸ˆð|gIU +,rÙxÇÍ@ŽåŠeüáûó:r£6» Þ~éÀú®ûâ=·Ú +så¨ńsWJ½Þá€Óµæ BbpÊq´. ‚.Ä«“P|±]*ûAP‹µÛ!ö6ÂØ\àU…ö>”³)þyk#+À äÉ©ÔÙÍò95¢û0¼S¶”sþôíµr-Œ=@ËçôZ²1BñyH[ü:.ËÞ]°…šnÇ]qGÅ£âLP[î2€þ9d5”*ŠŠöS Mi腐áz<€àøc>m¿TÈ­ö [ÖÎ>gG¢@=ýÔöÚ½œš5VUžçŸNb_MÊ£1A¨œöäLÂ>æ±­JjyðeKà•¦¶Œþ„9õùøzoißJéNMðàji²ÞùKzŠe6’‰ÇúÆÁÕj·ô³Ü—5öµ›ºYïv³Òùk“µ 6Õí +%}$·©dœ¦Ú´Ä Q&_b/ÌS×”ÿЦ¶YÔ há +[TC²ÔŠG2%-|i] å:D™š-áäBŒqûe»I­g#†Çf›È«,¯!bJ_ð7Ó.YÕ-®Á&_T0ã`pñò#hC™øÁ™%b³sCè¤Ë,À ^ÂÇØ} ‘ͯ?¨’SdQ:v/‚ì’˜þ0m_24ià^ÂZ¸åµ5¤â^hl\©½ ‡Ãmȶ–™XúÃA½”ôL ÞlaVoâ1ÚAË¢ ¶câDSZ*mñä Uø'Qüt š‚Ÿù;UœãPÃgÄ[ҌÂ</áŽM0ïSƒ7^\2`áyL˜[šh`ƒ³t¦šfT ŸÍï ä3‚æmx&3͵—òãŽTóƒŽaÈOqmYW4anNlïH—õ¢ßÕ¯«J”Ç+\@Í_@¼“kˆwÒ'[pÑÝýoì³¼MÔ!ƒ™…;ôäª_&ÉÓþ·¤8ÅjN¼³óØâj=$q;/iq±øŽfZl¨9™¯òŠ4wßÑÀ©rû²d%¹Ûᓋs„ñï@Úì¢ÜFa%@#©ŽÀ3Âä+fHpJänaÀ5¥ç¿!Â/‚óUzU½•_ýò#|¶žPøÎ/}”¢é’;ïˆ»Ò àöG=™6Nær²U`Žlª9G`¬öò²UKfRQ8¤Ï úÞQËðs! ƒKä+è£Þ§_DÍèv®Í¦Óš|n+ønŸÿNT|Êÿr-»¹g* V9²¾znØÔ/KÆüFÂuEyá3‹Ê˜êÞòU«hR(é£Hâ_‰Óü×(Ü/é°_0ÈkñL®ø€ ò`—5.BN»I4àn’Ýê„/Ìãý2¸…K~ÝZsÎ%q +½8kó+‰^Ô3Ê *—\ ùVýO ’ qEÌõ6ûþ9w÷ðûúž3™û½kòØñÕ7*èÿö´äB½ðûO-[)µW8]ÿ îwEÜ +ŽÜ>ÑÜøØ·<Ë=-íÎлû¹î=ÑÜ"gÄñ—íÏë«~w>Ô»¹œ«ïCíÏäû¿(róÝÚ_&uÀWÅñò²‘,…MC»¦[Å{TYj,ð­@Ž™•´ÞhAŽš ý†¼0KL|K©šEI·‹ƒ~Il†%p(°Úžž³)*ÉŠ{q°WÛ❇K—]Lãtɯûmx±|l`<·I v=_#‹ÌËÈ[¦ ÉJ¼æê騱 ƝX,®…‹.̬¥Lf瘲ðJÊLý?«âž4ÉX¥OV…j6×Ö G鋨-|…G$ˆ[ç¿L¦4ë=ˆ8ÇÕwüA¦X߃ˆT®ÝvIÛ2î·GvÀ»³îþRëŽ_‰ÐÔ ÑÁHqŒdÙr ư)Ã(Η]~ ¥?z?Èþe^ ׳®ÅB…b¹™Y‘º-ÎÐ9š¨[HáþnÍaFD5±1eå»°zñy ¸2×a^ø†òƒ…;¤\™Vð¡Hù¸P¸’@ŽãŸG±á÷árñ$ŸU³@E˜O0·í{ðŸy ·gŽµb6üÀA¯pǾYîe†Íî +s€*o¤LèIwÒ«a$¦ÕoU(æwìË«÷Ù읈V\©yt˽þ!,­ž]G÷½ƒË¦ìûË©³O¥Þ;Î1ÞÌ&Q¼aŽ÷þJ-¯<n}3ÿ¢â™ÿµaÕçÑT!}qO‘¶°‚TŽ:P-w—€%lУ%”÷KCiz‰¿Ð_p¯ëg¦j$‚¤"W{ƒóïâIT¦ûI5*›k8Gû‘Ê+XpÓHNýFé‡(ŸÑFéäªC,¼:28ocˆã±ÜÃZ_³b„Zҍ¼ÒênÄ©aKãΗ(R¯ îÝ©|U–º +wž +í¥Srÿ1n!džÚ#"¹Ieàd¡ËüÇËú>BjnOi+VÝÂ̤²ôiòÖü3‘ªš,ÎÖXî,k”°Ðð㺁ß·Lr +è=‡M©®¯g}‹˜†+Β° '(BÀ®Ø†HŠ3r¯í²t>­ßǧŠÙäÂ12‡dí¨ÝNo)+ýêuº‰ëù¤AAÖ" sêeB4ž´ybÌJh «<6©"–²NŸ’QÈ]Á +¹­Ý?ñÉ< ÔyÕ'KaVøeP‡êPCÙ\ÊoÝ[’*¤ípŠèut|å6tèPœ‘àà|Ÿº“¶tHôÝ™K¼0¥¥xoäݖ¸ó•ÖJÖ5MIY¢uñ¦[Œwsщ©N’fG«¨¦RÈþL0Ôå¡­äÍNZuú¾¡YÛsŒ3ý4-³ŠÞTV¸p–´GjڈÒbI>ê|D‚"‹-(×L Nú=E°ÕԄM,»+¢ *ÊþPƃÁlæ Jž }Ãt±ÿcV÷­ŽHôD¬ÎŽb¯®ƒæúÉ 4ÂÐ㓯Ֆ6?“6KÿXMÊ«@|ó0qÝɼ²gJó`·×vKnzÛWÊ:ª¶îOüøä“W|òîIÄsìœ7ù‰¤×©«'x¹Ý“×[7¹ßAîwÑ{Ú=ÎúOs¾›ÜîÕîwl÷;·{Ü8¯º”lݱ&—³Å›Ë• {À™›ÏY8µŽ¥I½êÙ8VnÉŲVN8 ~Á[÷‚·ï´·ï oßmç Ã[÷Ü[÷ˆ’7çftooÌôΜ9H̷솟ƒé&˜sŠÆᡓ¡ƒvv%?zPsa/»^¤o޲ùKفŠÏÊŸÝ)ØÌ9D_×›õ]bUçÎʑM³éGنc|±H¦õm,©ñ5/³ ë»väü2ì;–ø…»ýk{>9|»Üs)fQ¢û`‰~Á-k1€rû1$<xb×x>wÕxbö¥}˜(§ÓûP¡Ħ§¤¬÷Q +“%¾Ù©ígÀN=ý:—2–”÷ùл½¬uH&‰í½w´=“)ú7ô~ñR¯ÿ Í[©^ö&† ™å +ôKkK {ÄSÐˉp[¼óˆ»E\ðNR×=ƒ„z,‚Ò§¤Af=n1F釖ÐÜ`= â«Àmºv“䋉¾¤Ç1Oð|0K¤lÍMÙ°»È6P«·ÃãXІ~8z-û5Y ·÷Ò¥²rà–´¼bÙ>VM`9±Áҝ((qI!ÔHïdC÷QßB…[qz)®É¼ îSЇQqH6°ááDÖ[[aJ\qAAZ@€L«u¤¢D„õ›9ßó 'åŽÛà#äÀã²±çƒbÝEzómiØÌR>£Uså™<*ôtÑ@·ñhxO—½½¥I1ً2ø@¢X¯¾˜Ü+ùÇ^ŠÓ-lWˆxf|jÚ‡BXXäªK +ô̄£ûQ1ôŠá šàF@?aGï#C‡*RˆÃ| ɦuïè~µ¦@¸4Aò8Æ{ Ý"0,%Dî<)ðJÑLښÔ'o>ra¢bû“%ù{HaïÜL/Ű7ŽJÜý‚ä.]Q}¹S«sE?}àÑàÓxˆê¹WeÇ\Êÿé}à‘‡|x€ÞÎsÓ5Ì .ò“¦-Ó›WÝ¢;ÒSPëÝýjE'\©”ýEOuKO4}àCņ?ýD’¾‡ê_VÅÍ·õ™¸±“Üsmf¾‘mpÙ¹žUk2ioOHû€Eñ.h} MúI­¬›††X"Ž^‘ÔvFÙošƒ^a·Ÿz0vÓ7ƒM×Ë%ô|ñ'5„‡Á/¨ û`ƒ7qÿ[T˜>Ø \ÄOob ‰° _vŠ›^ƒ¨FD¬ºkxÄLD‚_ÄQ.Î.ñk~Î0Ë.§×,$üvç6œ³íšÎs/B™aEä8}úñ]ñeÔ}naµ÷¨ÜöÝõ9‰áبm*ۘbвæGè§0+=Ÿž¼WSÜÓmËnÈ[pu—͜ۺò—ÂÕw[õ½‡Q·jðVйãgÄn)ïÀÅ/ êÀ‘¥T¸ªé+Ç«ÁеÿW‚}å”'wè;J àá½½wôìÏd?[¿‘eY…[¼P™‘CaÀ”¸tڋÕmaúå*ÚŽæ.W‹\³X€æµ²·÷r9\Öq^¯üäž7Ë'x¸Ú§ ŒglæáX>ËÕ¬þÕ±ª}ogÛöþ,¾ j<µ“ªcžÿin!É jÓB¬Â-|m}›ìXtÚÕøÅn†hôÛu.K VÂBøä[ÅÕ°–“M²ŽRo3"H#pY‹ê@OiÜ_Ý­üÀ;èáánï~x[68˜Gxˆ6O9,«$ßÓÎ)¹WÌߊt(ŋ¿ë›A*‚hž.ûßź/UkFó|p i1Ã6Òn Nï3|½Ý:jZW\ð¹Ê둿ôwˆ®¹Q¼uÈ«ÿÝßJ³“üeü£·f‚°¦Ñ³›Esk`2œpN”>Ɔ|¢à GÈò:·ýÊ`ŒåÖÉz›DãýÕ~‚ÖJ%Wö-û€+¾UÖµ|±AÒ)ÇGƒÊ#ÁÆÉÿÊÞÃðw°üw½‡àò˜j/™4_#q«\ÅóÖ"ùä«©ÍÒ×ÍÕT˜»Ûwß^ Ò÷øÃÛ|> ­KŠA<í÷0=¶chÝ µØe3é]¤= kŒ§®Xï- 4=®NêÕª%Mª–jêwdzr´+}¥­.¤ê¬‡ða£fÝñˏ®Y*‰áC%ê]øVró¼¾y9˗ƒIÅða“Ç7~ -yàݔ_Àý9Br—ÚI©ê+ï{1åü57JìˁX£në焾N~âŽÐOP‚›èY©Ãyt[{(|A§ðØwùEh+Å^`nt“‰Ê~“Û-%oØf{SÛ?ãÎ`-Ñ>[½SlÓj›oèÀCw”+~åpiù^2WòXqE­Ý…šž”ÂÍLŒd¼È- # D„”„2 BË¢zÙ4v4 9Ýi7Zȗ¤ÒbAb–€Æ_ÖÅ/D‚ÌêØšY“^8fuí4\fwā®>kë4]Š‹Å~6ÿCáŠ/¿Ýžÿð‡þm ^E,–Ò%e†JWA{ahKa;* ͺRÚ¤PNk›ŽܽzÞ|ÔT\sÞn},&?§KÊu&b›çâïð›ÿË×eðâŒ?^fæVÝ)]¼Cs+\XXþTU?âûÿÚ˜þáaËù@ö8í ‚ŽK ùø_þîY——[2ø/}jš“Jk?„JkÑ%5î0¶üËQÙbÛcŠ4ýT¯B2îÈ)› vÿ +ÕvH·[Xr_G ë-Û­£ûf ÅO÷Pù-×óI}?æ¿Åš>{˜«¾ç±ï…ù÷{ÿ“îw¾({螫ýầ-~ãu¨Ýð8ó(EÈXQ?ãì:ìâ]ïmOáx||Ý_[ùÿîæEƂ+Œí:„_ü_u¾¾"ýð}G_?DØþXeuØ¡´c¯ˆ BG‡Eÿä^Oቧ¹„’™œD•ñ6þøHÿÔÑ ®¸¢ÿHš{ñæOsHÿ ‘•nÚqnžÓ’ñI%j-ÿ™Ë¸C—qòBGøå§õ)¡ïÁ§òBGÿTŒ•ç‘ÿ¾EîþVoL§‡ óíY¦¡NϨ¥ãìËæpŒ²Ê” ­±O‡0Ißî]GۗÝh3+±´Rڕõ\ì6ŠJ†T¥’–p`8†ùmQ©Œ,d4 —µP²0FœöŸS´¨å³æ…ð=ç€`•nwP°5kZDrÙxëâ#:£ŽÕ›ØÖžùí"× âƒGöÑ#Lq=Žé´$6¶IÔ3ö§G—¼œIaU6\ӉCª¨Ï~ÐÝ[«$=Ývl„C jƒëú;X{la,B•ô%KyVí]?—}väõ ýEщØ]‹ßî:°/ Vë]|7'˜l+‘v_$·“;¢s޶ºÝCiºz95ãu’³N)]¼¤Q½uÒ¡\A]¢„¨]a¥]S¥B 'Hd„$ÁüžúpêÁzØþîA=ƟPp…WõòŒMdASÔomŽÒœ˜Ïl¿Yƒ(ÙA•"ÃMÒ¹Ž[Jzaüs«¨û1–+ñs½æ$8j4è°e⤤2Ͳ·^A‡òG»pü'ؐۧ2}œ×ЬÀ6Ö4¿ƒ?¸(f)¿ »#]7OÚ§“I(RóÙ2²¬fMç8@߯:…êéuâ%-riVtN„ï= O¸À”[6Òý¢¬XsE+rýLà¿ÛÉ}RД@®ˆçéü‰Øz¦Q·]†)Dm)Í+¦°nÑ#—.f];Յ(eûi7^4¨$I)‰ ¡oek…l€`k‘ tòâF«‚_Ø»CӒC*6æKzG$«å,g¼?êù Ï©ðÀ-ç¾J}PšxRæð×Ff©Š´2p¿Ñ+6Øæ–Î\£²Ø¢c ADúTHח†~…˜'§‘Q¹ +ëÖü̹ò¯é_çu8…ôD0©FŠðy¯qƒc'3`„e2Sµ7{Dæç—„Ôúܶ›"•ìAØw`#=Ê{eòa|Ó(a}‹…ȯ!IϚôçbf¾/Ç­:lˆ—=³Œ©ï§¹@ö-ö€ +ò¢s‘”#8µë»ºã¢BâÝø©Bʧɿ’\¥šÑã·‚6I•=Ô ˆçT2Ÿ[3wW,YՒy5\—4Q ÂÅyŒôëc;ÒC«åúÒ#ô–™A‚ð9ñ »â„ù˜‡Ñ _—) —üi¥üû SÈå“b'tm¡0FÊ2Ò DÐ5 pÙMQpšÿMº;ÜÁövÓ)/ٝ]ùýµYDß0¯T‰kՓX å{–¿_¯~WÉ»Ÿü؁9fžN% ¨YìöÍ}òy ì±÷KeŒûé~<´Jö̋3ö¥Ýkl¢è²à3óÛם´Û•}/b#ºQ¯’Pgžæf!jå…ûü|B$Gi„*˜Züp‡<ÿãï°o®[ö¨Ïùà®Px„ ’ÀàŒ“íïæIíe€=Ç3oâð8íhÓvëj»ˡ¹å翈äE‹xgw¢¶¦Ã5 ¦(êŸ:J¹3ÙuøÅȎ´Ÿ[¢d ïÆ¬ïæólےœ`ÑÕs–Vé%Ê"Kë&sE/¾+Vù¢ŽdՏs'nú›ÌÀ=ô–T&ύû\àÕÆèçX(Z]ù¥&YfX!¡gAåý9{0Yæ–›’Âë VïЅ¾7]W; „úŽ|Jqò÷º9ÅÔ¬"6í‰÷\Ù]W’Ó=ÙNÑ=gˆDœßMÅWš3ÙC­Y¹~8œ×8Ve´ÑÊ­înüòé>3‰š'Ø"šž¬ÄÍ,+:%×3Ƥc\+)¯Ô.5´—Õ®¸”ȵ$„"8RÏS7F(7I´¯©›Ûˆ2Ï?^q g—lúÙv +;Vtç&áúe-ˆŠªÂÒ§¸¯» Ž9ƗÏ\£q·²¤÷TÒv»IT¨Wï«A¼¡ƒ¡úDQQ€NŽÀr†2ªÓ)kW<‰‚@);ò÷V÷f֗³¥¡¦È* ì›!nêÈC씤+›êZ¯ Zê»|‘€kM“ý>ªiMª½Ô‡ÆNm J ¥“@·m2béêúˆ„ŽwSåEYj_ÍÂ8xV#F.ª;ÈÎQÛŘñ¶˜Þ¡‡ã]/žn•à¨ÄéCø“á_ö‡YQm§ïT;K¹õÓñ$.°¯Yç5±­[—%bì +~º´òPÓé?‚ žpKœîûGé?õ§×F §NUú»èÌ%ë3¥'€¸ŽÑOÅ$Ëf¹©bAaÄEáñðóæô¶Ì¢uÑWh{ÂLñ&ô"UAÑ¡0Å^O´õºs©ç ÏÙ´²•&7LIR…y·dšnNŒ¥ÿ"¥Õ,-{ã¬;òƒ8½àk&ñu´„Ý~§`Ù¦Q®| Íå§û嘃%w'0/ڔ5)¾(zN~œ.ÎîHïØ‘óZ9çiˆ0G"7mF×­•‹¹âmñyn!{Òå¿L¢ä\yá'U‰‹ñә¦ñ$Ž@ŠUÍ)y¶Ï¦¾uµ`rÛWoJ£œŠªAhR³/²ùTÖ°[¾í\ñíeÜ9¼´Ÿ–JØóúvD=;õxéFü$‹"5yͶ*Ím]²'«¶E}]±Ð¼ôÞyñÉÐðªµÇ¡œAã4㖠·3úwÓB²L"Å©X4ôøÓ‚;'ٚ…}A¯¶ŸȬ ^Ppô½I3þ^¢ ƒÜ=È è¼ØlõàsÞ~ej‹IouVlúðŽŽ5˶­aOëI6¬fˆ‚ʳFÿùtư ?›vž&íÜ¡¬¤¡qièj}_ Öø¯!H+­4s¶2-aêÊ¥©káIÝÉÄ[’¶5ÝLÏ÷¤Ø¢ " *òäÿ@ÔjØN{§ \ÍùŸí³÷11O°$wÀU5^>ß7/ú¯¶$#,>gñAm×9·<ÎÓGŒöǪC d×b궛죗û§ZR;fJÕ/Zp5ÄnÛ®‹ÀI• >È[u¯M+ú0°d–¼3'xwx.°¨ª‘Þ$÷oÞ!_F¤öbŒ@Žéð äÊ­’ôJã[þòÎ8V(<Àœx˜8yJ`îNøV'ÿ!<ÄAÜ¥€Ag½®Î;7O¥Ù®Fú!QAh«.™óP§˜+€â 2(ÿkÁ*œ§¬s©}飄}f¿ŠØõ¾©’ÞïçSy´üR1ݙŒ|ê%¾L>3r!{é‘&|"Ãóªlñ(¦($w"EàÀ0(RŸ½¸½ÿƒ ïçŸü ބ7aúÑë‘uïþ¡» F5òr7db×=;ò‹\T築9ÿØcûó—¡°Çæ˜&ÿVÎsCaÁ;go9| oŽÑÕÎsCaº;f6sš y“¶7œæ†Ã8ís÷ÃaŽ\훬]ðl1ò1w¡°Çýx¸°ÇëâÍ»Åßß‹çÃa½ ¿É‹çÃóbÿ`l1öx¾`l1ÌâØ †78¸°Ç9‹`6î¦âÂІ)—cMÙØ÷qa®,ã½?“6Àl1ú}Øcñ¦ùÁ°Ça7 6õ†Šþ<Ü0ØcÎw¤uócâYô‡T„§lžÚÛNÎlɶð;ú£¶ff× †>Òn l1ΝçÒÅáJ&¦ïCaŒAå}èl1ÌMà †?vjø6î‰ì aÿ<×ø†Ãîj¾[¸;ùx-<‰Æ8œXǾaðëÀ¶ŸÅòÿ ƒóXg\8Óf”«+ú@æÏ~n +o›àÿEßàó«Ïå†èõœOç©ÿ£ýâʦ¾Wÿ£3öx8=W"‹úxñÒ´m76Y…NgÿޏU^×ÙÐ2Á:ûú/êc?ììÜyp5ÿ‡Æu[õ;®šÁ®Â“ìvž +ë Gú0Tgæü'±¼—²·ùî³Q—“ó`Ìø}FgYýXÞMS èr*¿Ÿ½¹îüº›=“‡˜ñhd;—u흒¼,õQSÁéߟC“‹w'xÛðëe9Øïãáú¾ß6ßo¬¿Ë„¾ßC¯Áë¯Õöúçüø;ÿó ¥»íûß4¯ÿãu¨ÝFê7QºÔn£u¨ÝFê7QºÔn£u¨ÝFê7QºÔn£u¨ÝFê7QºÔn£u¯ûõÿчcnt=¿å¾¿7ïƒó Ýè‰ÝB‡"s}¡íÿ’Eî¥+‰þ§A·î(5` ùùÿ‹J<ã@6î{<ùýËh>Cä=ÌoüÐ\sˆw°[Â<ÕÿŠ‚ãDšâÿRÿăɊAW=@ÇÿâVþê2©Gÿþ®Î?<£A ücšÔ!§*â?-ٔaJ4§éŽv²÷̞ehOðS%ß*ù¦M9¾ÁHüʬõÀ!tEzIŒ…½}ï´i;?ٓ3é20ÌB@…$ ˆ)g‰ƒfF˜8,´KiqGÊÂ`–Ò¤†˜}0 +Ñ|ûSÞSÃm}ê_-@ $$X[µ±O£ +QJ„$)Ÿ¿¿¿ÿfI +*5|ùå÷¯«îm÷9¼æï/9¼Þsy¼Þ·›ÔÞ®ûwwz»ÝÝ¿‚ÞüÞÞõ÷µ½ÝÞ¡O}ö¶Ûw]cmåHBøF†ÉñXÅ®µŒ³˜ 8w¾®j* +ÔØË+”!Í©Õ÷ks³Ÿ~Šwªjw¨Bi]øãÓ>üq¢k8Ù¶åJ÷×¶«Ðf[»~æRZÔ/ŒÚëZ}Âd¬ô²å +¸º¦ôLûœä\ûߥ´ñ‰ûê(æò'mƒp˜.Å'Jy·À ± +¤íj'FïW7¡‘ìÀj!vnӎ™$ô3)ŠNi»¤ñ‘î“ĶS¯&Iá4Êí¡ÂÍ +âÙèb+àíÌX|¢ 7)ÈáŠE¤0½P†Dٍx#‡&ÇY ‚|,±ˆÍ2DŸzã³B@¡0zõñ-CL£I.’Û´ËðŠù#D»1‘&×¾x?“(°ãÂ4¡&1•uªî1*ìã¸9®!ô UŽãËþåá/‰cOÃt«/éM` ÃëK¿¼^›<žÎ6æb€AB/·ÍK‹GšFàí7w`Ԑîþ[»2Q#Äbëˆ*g"µ°Í·ŸòÃòN×Òàtb0p%B·Ùºè˼D‹Qœl(r¯Ž60·Œ'ŽÚ³D˜œè,ôÒ,SKM°¤ÖYø㪧¼Or9”P+ÍÇê:jÚåóiÒ?Jl~üÀî}!ÆY,Å-B¾Kz[䚷æa‡IßËÚ5Å_'ý4hÄênå$—÷Ààˋ³ÞQ’ +J~s_b†8jý&=4)>†T1ëUò醪7d +¾Œúü½UàŠ—E@UöžëðWW^­Å wPñN +·[Uû,‰}>Ó6agï§ÞôÒðR¥–]«hŒ7BÛðN¡UþÒ]¿hQ!ýAcø")ù°à¬Â>42\ +¹Ä©È¤Ç߁ZÑÅHgêÊd>õùlÌmGï|÷ÌöXèú…Ÿ‚”Ìú’6ÅC§%JžÞ—я¡Ú}RPÙ*øæ»Y3Ÿã{@ç†}̯ïH†=a¦°¥ÒDʔžð `-Ít8^ŒW)zMx…: ÝM{CW)üYØC°¿+9§¿ £Ôß/Ô#òÊû̉PŲ#ðQ 23Ëz,¦ +ÁO[ j³B‡å±¥;ØY®Ã‰EE1 *ÚavWqû@I?7›=ð‰¨¿! E—q>¤Ì…¦ªô°²÷Ê´ËÊ^ù cð¸.É­ 8íH$R:@āߤF¿¨Äµâà0¥+®öš Pɏk4ðÇJþñй¥ôbܰiy“•˨µÀBqÁÞ!§Y™º¡„Ó"{Ï»°Â1B‡°†ÏÇåbiç¹%gÉ.ڛTÁz=.¦úUé÷Ö½ à:ӂG7z)”™Ìõ£ñ‡[ñ~šM‹µ¨Wñ‡n‹§²a$4ör´°ÊþÐ4LØ(êÌÿ´ªþV7JÜÓðqô„$£`¼·Š¼ðWó1éÎõRv*vAüÒèºoøpT—rS¾wˆ³6Ã-֋NäÅ®;|6åp]âr¹·n`/øOîŒþ½ðvÍLîêo Üé“{³¨K$]©ýº„±WÅÈ­ƒÉ­ÿŽîVýdo8Þ¡4_χøZ +>¼ã9 D9E{ª\™8M*fÛÍSB´N¾Û¸†ÿh¤0ÒÙ{Iè£tbÛvÅ´ûp‰M.òLäin ¿D̀¬èºm$™Î¤žƒòÿ£C ÌQM15ÿ ly6˜É0áw##ô·½Ÿ:ꂗÎ6¾„ ´W&(òÃSư3РÃÉ äD7ëìîb<ã$»W«{,A¾¶Lœþ¨?‘Æœ)+LËfd!ޤRٔ![[1BqÉBÈ"½ç‡Ž#*ùËð—Û$ÿ9[úžÀd×e߆Hýy"†ûÌz—3,¯z(ZbxmI1©É¼’7ïä›ÚóS·'“#9 nÏêÎáw°/Gþ%дŸ¸ÓqêÀÚ2+7q îÕȖW´fß*è]ò«{FTP ëœÞˆ®†Ó½‘9?½ïxyèÆpãœm§uÇ’ú›ÚÚY|mT¯¨¦Ç@½­±ò¾¯Ô¹Æ{xX_#ÎŒAfö„®Þo)ʜ³_Ž%˜lÀÎKVþ¥¡¼pÍ"òãÍ?[•tžùÕ9ž“ò‰}ºñAˆ]ݓu:ž1D¼¤69F ÈåÓø‡EÚ;aúÕ £e[âïÕH™ÁʺßÅÕ`"{E›–¯²蓗ùˆïįíÏ2õ[ ¶É”O@3z'l$’Ì‚Šgyz2ԗSzl(0tá;4Ii.g𹹘ÁpÕßôþ_JYÑFQ“ŸÑWò àµFÓꍄ_JŽÇé»BbÐÝá +=sühlÚ xEÌ,æQËü\ªr ÆÄ\ñü¡È`$ì1&›~nb¥íˆRcKóWØtÚ ÷3u%S7ŸéiÞ£v®æDÒî¶eD««‘¶ƒÅIz +_çý™¢0›8Ӓr.?„ +Y!Õv¡Æœ™NI)X€ˆ[XÂ“cÅJ‹7OØíó=Ã;ùJNøG´P¹Û³uÇné†ä.rkRT¤ªF+¿6‚˜A¾¬&‡u&û=4§*ª~ò@WãŠÍËøÛf\-]Ô7Øpš˜l£öÆùô~}Þ££BêÙNt“•ÂlvÎïô¡$A¦ÍÜÅ müA ¹¿ùâV}.€ Á/æX’ 7B… S¶¹Ÿ7,K ”<ä úŸWó ̧N+Ý2b7•¬’ }emS½iç®[çW;[TËõ%Ià]•üOfn™ô…i£LçŽEY%a§&èŠOp-(7l)ì"ÜÌmóRBN‡ +ï®(Qq ÈqFÞðÓîËm‡¤W,)]LROùÀT‰?L5÷n_mʾ㺣—º}ùÞÃiþˆ‰»ˆg$LÓâqCÝ2°ô …Ý‘:ó‘G~€ëcrúÆ \ÿK͍(›X!×N,%âwýãš_U›™‰Öٞoø¤·ƒ_" “~¯ ¹ÖÊStHW$i}ñÇc2¯7¶Wó®S‘Ù’7s‚(Éw˜ô9mÀŽÇ²D ”ñÑ©†¿K1 Só½¾È y²cË YÚ͜ÌTöþ—áÝ2ŽÿN«¢…+ƒ´ ”DK«“ ÑK(<èvÑ8²W¢-([ñ̯©fcØ“`Y¯gÈÁ)yx°)þñ›Œg€%ò˜ßvêZ@ü(d£1õF}ȉ{y1Š¢s7f¯á·çþxM‰^µ áóÖ®^_·ßQˆœG`!”틍NHYєœ+¨Ù + ˖ÊM6E-¾À÷¯^aÐõa%†@RBʍmòÜî¥eèqæt͈ˆAÎՅÈåÎ7A¾ÍÈë×§Š3À $ÞÆ.³™ÖDŸ¿Ç.ZÍmUÛõ}݉¡.BÞj›… ªàêôÚZ†Ð”Œú+!ðÌf¹ãÓ ¿m,Ë6fZ÷•%êA…ƒia,Lø6ðPõéx,Ü¿Á–Ž%ü›–u†9\±Õ«DͧL®qæñ­”£öh7}Äf…#˜5xm&wØ! aÐSP0 zéOæ È~ܘ !ÃÜ5sŒåvL2¸è•ø<[!úÛ õ9_eóÃÙzðň¬áÎSBÃx¢·ÀÕÀƒ ¶¹¹+¤2»&¼ÖI¹[¨0}Ì=_U: +^eÝög3or›MxÊË{¦¸l*Â%\†®ÂÕ¿g}‰½ +¿‹H±+N`%÷.…Hm+ê>©N;HJ! ïEÆ*TB™Êã2­Ü•Rã%ܕ"¿“NÑÅÿmAԈÚ`åÆº7nÐ7;¿Ô7|¼7úâ/™–aHoÜ«„U宓ޫ«iùî7›÷Ї|®Ü^ɾ²aÛÞI2n9&7&Öbà Ö½ºõŸŠÿ<…!þ·ÑŒ·{%HˆžU~ñn/w~Þ^÷…¿îµÐ‡ùpg–VžÞÿÈ`¤·á>ß°:±Çm¼®ƒT'ŸBïà7¼à+³ŒXckr­ÒŠ-Cè|âŠ+8awìoÁ†:(Øa†3k —yiØX^†!kõÀςí27õWËÿ«Xÿ‡ãÖ9Ë}cùëhâq¤E¾sp~¬sg-…Öø‰m[ë0*\ ßHDù«7Y±Æ øHnàcD‰hov‘0–ˆš]ûÎØýe Y[Og©*b`>¦ãV—ÔºÁN©ôl¡CHבøHÓ©¯£‡Œ!Y¢wˆú–ï¥Éˆ´ÂØ;9íI,«Åp×´c'ÖÀg“9OâµÎ±ª…Ê•¹î<—§rNº¸E Œ™RG_j¡<²•‘¤¢PP5‹¹lJhl,æI;»§ß@~y‹dPQ²¤JªntkÐb†gŜ+[‰èD#¤cÅ æù,9SßÁ¬„ "$3Ni}&…™ÑÝ )ð'^ñæÃ¯]ßý.Gt€Uôuðäíf_Ho³õŽh§³ô‚-E+9 ±¾³ÚkȾô—‰”Տz&3‹¤gmGϏéÉåÕãꜞ^L)rz €µ~ry8¼ÙÉæ5õ¥æ‘:ª™Éèšú¢óŠ(ñ‚ždOÙ\L)zàD9q¸žŒ'Og¸žf_›ÍÄóB^‰w×àðWj\c“Í«Ãy¡žè«ûc»Ü«È/#ç®uùRó¯È—œu|áyÝ+ܗÖ¾d¼ãëðeçvÀZ¾ D¾wzò2zYé¤`ç'¤kÛàš¾wšò_‹ñxňàÌ"šÔWeuÎ`$Š6 mQVÁ¨#xŸ—’È™–†Áž)<|Ì!©”Ž è tJþÉvÀ©Sž?›ÛD‹|Ù>¥å=ßÓþêLŽÛ֓!_G¨0Û£imIú¿Úúuךè$ʞì)àˆ7ópcCLÊ!Õ¿Ãw;–Fˆ o5y2+oE +8øõ­0M ¢ydR^֔Öi%ܵ;/z®Ùlü}þž•K¯°›D ¢x=äý£fçþ)æQ+g€xÿíÂêð¾F·º×šì¼IïÞQq³À?Ärž`ê¬y]‹È×ÒWՐÄlž²¼òd…ri¡Ü/k*Ö÷NóÕµé;øè^'Ö6ÑÖ«ã£2<(O¬¹hëìa¥ƒ¬äÜ똢ÊÕÒÚØ5uz¥Ç¥öŽâ¦âðŠ¡äòçš{&º¦¾ MáæUáJ˜o+lµËä÷1ÖY˜Á*vQ>ŸvÎ#ÔîèëÓ\ÀA?ÍO)bò–¹‹Æ +-­5Ã]ò7ˆ#ÃÔU¯tŠì7GXð´•æßNIªÍåsÇÞô{½Ÿ£¦Ñïô~ª2ìd_O”6ÀÑùÏ;¯Icó{4}D ;9ͼô~I‡òÚSb3îSvóç^bšêøo?‰]*ËI±y·¶™Ò®ÿH~ao?1v:wqG縣§qGºkàµÕ/k­Ãôé÷ û03»WJ‘²ŽzâÂÇ%Åû018ôéŸoÄqX@Æ\'Mâ5^ãVÕz¾ÆZ·¤~âBùÊ ›-¿ÿIEÀ ‘O‰=òÚ¯Åôú=ޞ2ÆJWøš¯ A†ªkáµÔ8ÑîœhéÜhüþÃ)“ù¼ÄðOòZBf_݆Ÿÿ44øïċ¶Ÿ?ï€ÙûAÖ»ÿ{b?ýQ…ïþtﯛ3áýÿ™ {ŸÑ¿Îÿî.wœ›uˆÊ®ˆ\Åv ty‰7ü¶«ø]@zé_â/+ºD&æý\,F +õØf—ÐÐÛÛÜ×Þ×qWhÈÆ.δ;j¹¬½ÄD½ko̚lz>Øþ˜hþØhï姄|øgÿçÍ}®‹™ïšè¸–éÞïõH¨?PùÏ7jž_óèàl0~õrOËORù’.oñl/öÝ¥Y÷;Š#~‹]ðµyÿ5Êg̤dÝ¡à¿ê‘æÅ’6ávŸD3ô¨%ý:IÛöÒhy´'Pëyèy~õ¤ÎáèN æb“¡oÿë{Íðý7ÿÿÏùb8·­7ïÝñýÝrºg¨‘èvl}î‡÷Cûý¦U¤?køþÞW3«œÕæõyí]­Oh.VO~J@ñÊ`5æ…zïd \Š Ÿlf´3љ”÷ö°‡iìØÑ_3¾ëòâ¦z–ˬdýØXOñ5‹x]²;_þ± ð<ëÜÏë ñÑ%Éôóµÿ˜ÏÏÐ#Yèb~Ù\|†`Ör¨óçöÊáQ ?rPÛ;¶WÆ®2OÊ®öÈ^l¯tFÀÛû°ßo"qðû°éì^ÐÀTÂ_(]hdG¦„uàqП¥b,²%eå .Ь·ÉÐ]õ_¥^XÊ_d¯ }L‡O€Žl%R0pJµû!ZHKƾú#Îû¬@ØÉLìrX»a€S±Çϯº4¹DâÅ'r¥Õ%™ðA$ ¢° œ'¤IV§(3Y£A-ßhÈìVÛê‚nW˂e.itö +÷ɃAV$¸K?,†nb¶‚ý¢ªSVÞ~ZÄÀðóØ×ý«ªõÄ:…0ò± ë¼pöÅëgö‚±ú¨Kù +§×ˆ5÷ " _ÿ5ÒÂ˸CÒ*n!e·»ôÒÅ$ˆ‰¼­ŸóPW7+‰/W`jJ­͋&ò{•$P9€³,mc÷ÒÊCHÍåSH2j”ð¡éµ§",ÜÒúMÜÒðO³Usbš^£ì·AqÇF( nóTÈ9kïÀ}™ —Þîðû(®â"ÚÎ%á±!'HS¼ˆC¤N8Lùm–®l–RÁS'!ðg¯ 9ÄZÛahS¶ŸõIíÆâ`iâÆÃ4L2äÇÕS|cÊ1Ô ‹üª·Ä⟱¾X«½‡­ SðÕ¶Wòç½jwQèŒæv¥"±ñÐEÑSBå°ªQB³q¿8aŽÌœJÌÎ:o¿ÊS œ¾Ã Éó" + $Ë Å1§bN£-W1Åcß±FC |¢p²5²ýÑ +©PÚê[ã 3….¥¡Œ?›TZ¤`gÛNˆcANµSÍk«]ºƒ³ ab,AÍßêZì+®³üO…VæUZ}÷·Ui¯æUZkíª­5öÕVšûZ«Mz*­5ÿU¦0ü}ä5žk|õ½‹Æ«É‡ójû6{ÏVx\ˆ”îk´jhëÀ¾ÎçÖAâé{”½BUêÞþe>$v9¾qOF­æÈ²þÿ€±å<ƒÀj»qÿ®ûÕJó"!òùœïÑ0¾g>Ž'› +YöÅ$·£]r—MuÉ~…q!wv¿ZÕ/ßë)Sø@Ë>ˆ!7ZOö¼º—o*Š”fáû~*ÿûüQýî‡÷Cû¡ýÐþýÄaöºçª¡ðô>—Ãð|=W‡î!>x~ÑŽ°ª_ó?;ý^n&g¹hºÅ_ØMÜ|sm?õC5»_n=•Ë¢/Q‹âȕpÖªpÖ$)éç ¡üvæi^o¾gú~?îøÙ®]–ÿÀ­Hô¾‘(zomð¬þp؞½Ò1÷˜Ín{<²4΅ùÏ.ž»¨á%’ &/q—,Ç¿rÚ¤¹íeÇ¥ÆsÞ5>9>øìî?gÚ²\Û ÿ”‰\؉ŽSً Îúœ`±Q¤ sJƒ³åy©î²©³PÚp]NƒcÞj~ ³Ͷcžr…œ"eƒËŽhøœ9qÍ+8\Ðmu©y#!eüU|qê\ +çg`a¹3“³ËÔ¯m¨i-/gɏ}µêe èds +Ûa22¹¬£*ÈM.K_"« ŠäÐHN)eʃ%¢î³jÞ3ô”l¹s¹…¥O$Y1›•ŸªžÇT$2*õ'‹e‰´ÉjL&JW5|M¡åfkÆS¸h´%“*ÞðO™˜q+?¾´ÔÉÂÔÕ¡O6W[§1êMˆÌkÚÇöLXÛ.wkªaˆê N-NfUöÖ6[1N×¹z© >þñgÜ<Ç„Iö¾‹¹=TjR‡EE…[›sQ—W"Àc¬M“öƒ›lô•ìZx¹wñÃÁ–ÌãO¤6אŒA†Â¦q0ÜiwÊß§ÒÄCÜae4ØëT–å§™`ÕÕ#PZ¿°°êÓu1· Á¿»ãæ? x˜z­ ñ(½BÅ»‰\‚ƒãÕÉdµMÞ³}UzœÈ)æ.?xjä™Ì¹s“}”-³™rç( >ry»ê‰|yYd­Àúª!\pBtCí¬Ÿa”§ø9¤áóCg"I±ÎÛsB@¾x*îPù Å‰sA„)Π­¹ÜÐoÚk6ãŠùh•Úç ì‚ÝàÈ¢ {tü¥¸Ö„FYr‰â ’èåÊ'Їu–¯¢EºHÅw&ûkcÈcözÍ?¬É:†³9«¢u*ùÔf® ©kvÀ6ÈÃPù Ð²ÐTµqdTžŒ=‡:$HšZè›ýR¾aõ½bÿÚT³ïªfARνיR;ä1Ÿj +–iõ{Õ ARËð•Ñ ÐL>"Ã×aëuÌ9x¹žŒuÝ}‡¯Øe*éúÈ}î‡÷CûÿÊïë`sø¾Àÿ&ùp>6[§Àñ°<œ ÖZû-+,ê[æËf%¾¤·u-ÞËx2ߖY){ľ +_/—ùòù©wÒïåþĿۗÙKÕKùrþ¬¿]† ž ¢Áfºz>Ÿ½éþÏOú`̸/d»ôrÄÑø¿O9˜Êazí‡iM•áç.¸þz*fŽèºÆƒÝ!Þu/;¿_Ÿ&0ÿü!ßqF\¬,2Ãÿ؇}ÿè­ÙðVºv¿Ò?ïëÌãAfQçÏûqÅNBïúEß>¹ïŸ]ðɋø#yüc·7mH”N^Á/.lXkœºg@Ó0¤9LÖSLsB*ÿÏç.ÕûLÀ Ja°tÌ+ SǔsEf"RYo,qfŠmΒèOÊ gµ5õnӑð +S–yԘ¨cXqótà-“·b&:a×9`ϔb᠏°$(Pǃ_é·Çí dK#nœ¿£­¬;Žßì=hÕ=c]rA¯Ð¸¨Ïï†h¿A{F¬jhã[o«’¡zîr~2CdºO‰Cœ­lhG 4¶¬mlhÔltd-Ÿl̍ ëe2‡~ãciŸ~Úÿ£nvùÌÈv\“‹„ò,œ¾³Ëfd4éíÔD1ŒÐcŽ”òÓþ˜TæÛždYf­0®™UøRu퐽{äYOþ/Ñ¡Ä҂¹ñ½vÜ0¢EkÐe¶Uû=-ðÐM„…ýCœ`ÙuCòXF¹¶`þð1EŸøML”ÒS›Œ•rýÅȳ»OJ;!*ô¾“Aº`Wä[r1h±µmVK¢(©´·Ã 8˂ÐOÄQnëÔÉó¥úé¿Ã"[k=žà.â(šrd¬î+j<{œ&a„¨eCêêp¢°sK,pE¦âCON¶ß¨¸ÂB ¶r5´H0þê +ãaåûq‘†`¸¯dî-°op_²¦=Í¿›Þ…òÇ«¸­#NߏP‰¥Ór­P¾ãtäA£‚¸¨›ßQB$¯46^‘F¾4ïEë½²_Æ6"¶TiD”8 '­)³ûðlýÚ |—K¸íy?ϧP&¥hsuÁˆÛÌc ˜™± &„kH¯¾{,´þþÚ\_e{ݤé:¼SötÊaK1XzŸªë´œhTFÒ|@›Üw–j‡9®î/¸™ŒÄd«ÛÎ&60·p`¶–ÐG6øzï8™ŠÉJfñ©¿³xÐíÙý+eËU·*­ÿyš~òŽ +,KíŒPb‹¨.ø˜qZÂRù~ùJ³:¾“òNÑáñƒNæŠXÎ'öÒÛçP(Iˆu‡`/vX +I‡¿ _@*þ"3ù;¡®£‚›Š}}Æ°GJT¹[<›—þ=U$¢åßYy£ñù# Œ³zçìyöł5¿CˆÔ|lJ‹ÀbçÂM#©ãÏjç¨ÿžuÊtkh꾜+IiÛçu-VêFòƒG’å1HÙËîE¶Á©Î…\'햐t8§új\‰ƒÈÇFL x:¸²#Dt#^È"A4¢Ê~]@Җ„¸ ÇHT!°öÙõ’Iæ +û„ð©ºÐBæë)k`dîX¿ã„G_”sŽ}ðÂõÿ÷ L=ÊáïŒL?±û&¦/ûF&g§ŽBiQHÞ$/ÑßQnÚXßðM¡sNò) –‹„‰H„k÷Òajcð֐[)7Þ`G`âÖSÏhN b“ +q¾.c¹í¢­ 4$؋‡æeHÅC#žêb¡ÁešÆ;’Q»‹™@ĺ¹‡'Eyørô÷k'EÉ¥àZ“ÿ‰ˍF›‹“Wd¸›’?¿õüxˆzÒãdؑsF€u6Ö£!ÿ@hލ’ê™÷ÔáܖÐô°–û'$âv€éQR.–CEŒiwd†òŠü\ÔñÍ7ö"¡¢ó„ÛaË £ZÝHˆ#z†Ë`˜¹Q¾],ˆÛ¨.hAA[ø ó›¡ðâ‘C¶9¬dLy.ö*ÓyÏóº0Ю–†1h€¶õ§Ì)CØSuRÃ3ÙÏÐ'n(ãLüãO7¯< bo6I±Ý:ƒºv†Ú1ÒøwOæ;¤¡ÝÓ ìh;¥™›|ÙÝ T‹£þwI“ºnŽé»<úäpöÿC8wO¶wJÃϹºwgt|mŸ³*wO¬wNR@ Ý2çt)ìc¡íNé:wMQôÒ$,–ï¼ÞýwtçÝ448ä“_ñ#©ÂÏàMpKn>$âµÔ¤—…£˜P¾FPûíEJ6ž§Ì:O8ÈìÿxꊜöËæ;" S}DD†•jÛ@K"‡VíØ¡¸«!²\iMþjé¬Ñ˜á!ûeÃe•(1þéà³ÿwIo 1Ï ’+œ˜çÔ1„˜çËê´Ø±„˜ç¸`iŽ{f'NzÖ¤nâсÃÙfqŠÉŽ~y¢cŸÀ8z›áڋ(V-ºcžá«Æw·îûÿëJhMُ’xj ” åEš.cS·‡56f4Â{3µ,!Ì©VÀäßæP¡ç^­‚??«⊠ÌÜA2Á ÊæW܃²å¶¿I1Taƒâ߯c`ÇYãD‘bh«H«ÎÏx¦’×[wë#zÿëLCþ8 søÓ¿ŠU:þ>éšçí0ñ-ÏX³ü‰÷»¢¿wºûø>þd| ÿ™ Ãø¢|ÏüH…ˆ÷/cv»ð]ý¦žV«ªá±óy‰[ïCå÷èG¸?>=ÁþE§H/ÎrøíüÄ7–šÙý©H®¯îõ®®ñ𐠼 /‘cÏù£ÿØ@.ÿâ–ÑŽ1õˆ5Β#ûÚ0@0ÿà–я‡Oü;ž…ÿBËáKhɛÆ"ªGŒý4ø‘©Ð.•~ +<ùÿ2~msB?-£\ˆ'ç :Ý&ÝÅ+oîDj|Òξîdº@²F”ÎhýÂ9Fhí‡Î„3–( Áv—R懤NªâK`õ)~vGK±“w Žâ²X¸žDy9’ÁT—'¬3€ûFÎ,ÓÅ1ŽBûæÀŸ»Ö\Î)aD¦â5ÚtÀã›?šb›‰GóL“qÒ¿šf›†/æ›&á›ù¨ÔÜ25š÷óR u®/oÍ7WÎA_;Ú¾`F¤Õó¾«ç}WÎ𯜺¾mÕóéÜÀÅǺ€æPÙ¯ |£Õóífˆ› Í)¡Z"«ñ&§ha bû$†ýŒK†êäXˆ]ì$#C_R/„â/›)¬VÉ9HœÈ¦øã"áLÁI—)Di*kŸ±Ñ<'š¥ (ú(¸p×eÊár“¹”QÒn&ÅEèÁ@- Ê¡»¡¬™ÂÖ2…W~v±éýýc- ,ŸEW ío#0«_ÙB™$B²{\‰±Ï?^5üR›Ét `;ªÊ­ŽDšWâ‰ðV@!Í8ìßY„¤© +²I IÙÈó{A÷î5Æ1ábÃQvj ,R–?ÿŸˆü‚ˆ¯Ÿñì¢gĤ‰ý£7×ÄڌÞ;¨›Q›Ç’>pýªHøÃóüyOÓxƟ› TBß~íR¿÷ٙŸI $ŸI!$$$F,A‰>Å\úì ‹ŠÅUÓ|,EuÔG CDÒfOŸ:Ý÷¨êªkªêù|鯵’ï™$&IB + !Dp#¢ ¨H3ïÿÿß¾ûì™&@‡y¾µ}»¾»»ËyoBôoBônô-¼åè^…¼¼½ ؼå½?ròôíþ^§¹ËÝÞmìÞ^¦ï/Fó—³{Å<=µ·mÖÛ]±¼%›ÇÕÈY¼\Ֆo<ÞÍãý£nVo`Çó¬Þ<é¿*Íãÿ›„ßð4íyŸxcžz]d§6y[Ÿ¼iôýÅRú(ð;$ü€05`³Þo=³’âêÿ jŽ‹@B©ôtç§r#ë¼"èbÌ©ÇÁìžMæFñíÊ9SÉ«øJx¨Lä÷Qg¹³Þ cV„(âÃ#5ź&òÅ'µþÍ»ä¡ÑÙÆÝîžÚS¼ÅÕ§y—¥xXxð½Å;>w~w\~v¸ü;Àb§TtüêAj»œ×è:†Ý¥dR -{8ž§áñº´œÃågl(|¤k(|£—ÒïP!å'TŽÙ>›?(8_Ígd/Ѳ;¦À?§’4x€Õ +›V0†º8ÔÿÒS†j;S†jIÙÊiÎålý$&*³¶UvlXi#î‡  ?»×Ý×ÝêG†+Rº¾¶·»ÕP£÷°‡.¿}á.tŽå¬¤Jã.ð"rPÆ]‹ß¡(N–#ÃwÔá»ÛªÄåÓò({DÑû½Ûp,¨ E'|̓†Ê«X»ü•ÿ5bïºÕ…܏В/»óšÕÎ9ѬL(=ôˆ¿ tÖ¥£ƒÜÛ€"íIaË j\íœmÔÕz05ò[ò\žoÍ>ëÚ.$È_6â{ÞE€9c$\c ‘ëñfH϶2G ’+±&GUoÛ).ë>o‡”ŸÃsfÿwv¯€Àð(ڟýÖu‡Ãcï†YÃÿ¶ŽÖòyÐé`pÜ4¶ÞVëËုòg—ƒ¿EÑ b†)3ÈgœÄv¸©›«þ,nŽ÷‡gü0m3ðÆZÒÃp³Éá¹Ob9äð4X²ÛþՂ¯ Ñ£›üË_'ÿ•‚¯ÜÁ±ñÖ +½¡]¨ý£çjGà•suÄX,ù5Ü‚×~Å£àŸxãOÁ7ë^ù— È<~MÀB>Z¹ø;¬§œJ̼¿4Lª¯P”£ëáƒUjçÑ4*XcÚ:]>Ȁùo›ïÁr«ò‰ ÓŠéÜ­RÄÏ6r¶­Ë­X֝Áš"N=ÕJ´æ…Bû^f7£œ+/"*˹!K'¼)æ2J΀䣕*çÅ7I³%™wœ ¦˜¬ýÓ.êŽr¶¤Zc̉á0‹²qׅYw¼Zb½F]ìØ>ÕMÇm ST|Ÿƒîsé¼À¼&Çi‡šãÏ2'w@½A'¶ÞôÙrw\»2NïNNëBwfIÝ@Ùwg‰Ýgêz(Ýy;²¤îŠ16º-««U#8C»ƒ'w=؈2DZJz@ÁÀ%î¹¶F­Ì#ÒÙ҈ÞúÜ+d.(C4ûo:ëÈ ÷Ycð¯W'1U¡Q Ÿ¤Ça$K¤w7ÊԘÑS´û)R¹¡.<²ÿ¸r/rF—S§ Z®‚5œ7ê¾Y쫯” öõ’”nÚXí¥‰®Úz+´ô˜»i¥O¯ÓO¿¦O¯Oí¥’}zˆ7m=EîÚz©Ûýdúýtíú”úõIÛõiõë·û ´Ö§o×'×ì§o×§×°NßfŸ_´¿ÛO¯ïB;i±†vÓÜNçÙ'×î§s¼O¯fÏ´O®Ñ;ŸÞO¯ï§síSë÷ïAé±Õåy„—¡F‚ØÃ¥‹×˜¸ó˜‰Ü¥M}ô÷VA¯Ž}m?“j©’õwÿÖ)Aãÿ굆ûEü]¦¿òèü5ÿàÐ7üå÷þ¥}Ɓ¾`‚ŸööQ­Àl²û~ ‘e¾—' »… o$óðãhýÅËhû%Ü= ºç@ßÍ®üúþµw̵†ü…«¯%M7Ç.OыßK.=}ìT¿Ìµ[ýÕ'֊z¹r§â¿ýöyýŒ”„í#iþW¾ú~?©'[úÖ¨úóðªF))^4ªA6£¼0À‚áþO31ײ¡ßjãw³\ïikÌaàÚo"LµØÄð²çêtÒRò¼oÚeXBfâ÷DÀh +)•Wï|¬ß^@ïõeÓùÅóÇžøtᔮ,žö^¾!ò‡\MümN¾]8~OìÊ-Ëìâ8Ë'>¥y¿œ:¡”äÇ©èi€ë_úYìsm`Ùëh¡èf§—¸ÁÐÍQ„Éü{Vx lj æ~mQduaF±JoÄ㨽åN˜YA·œÃÚI§¤®Ù¶íN§‚:Ÿ¸­¶®Ì# +¡ý}§ÜsUE` ÛÎ2wuùW÷ QÚ}hÝRº»`Úaþ„£L”uOdï¢ç¥xlµ'@ö‹¼Â¾<0ýwZ: ßPÑ]š6 >Œ  ä„tÛv¢2–Ã3A; Túèà–6–/êNÉGî!-oŒ4ږ%_ɑ&%ìE QŽDL¹k29rr`m­@÷b5«˜± +ëðCpNóÎ <ÍëÑ¥&xu8³ú +ò·ãQMÙ¼#íŒ(JåԄu/V¤Öer—Ñ eŽäÏü¢ª˜ª´ü +€Î6M] ¤L]:Ÿfu?ÀŸ –¨û#,xÒžÕ§ë› xtlèK€K‡A“ЬÂXŽhuoàQ̊ý¸‚wV”ÅG>´­ÔCiÀ:æ©5dÄ´ëåE»/ äqÚŸ‹dV[­ôt›ã=ƒæB.$uGŸOÿä4¥£Oæ½yÕyBꍒù7Tyҟi5dê u ?‘?‘žý)+Q[Ùêª7#Z•É$ ÙéÜ2iLì¼Î*šÈU±<"–p±l jқa8Žôôþ Ln³sÉÙ>”ÖóŒ7 G†´$Õ졲û«}° fL6GÕìF·‰C <µOÓý8ñêrÍ`Äý9…FÀ+Ü"·Ë¦å‹S"™FFÆg®/jÓâBPŠÓá«hB£Ü5ÄЂ‹%„1šš i ÿÁªx5.íf|òª•9dêyÔû§bµs”Û°¾"x7À0Ö»AJH¢Ô3@ +¼CAΜxz:K‰ì,ÑPlŠÑ湉<Ò½@^¿àіyá i„C]FuYY †yÏnÄÓ-¸Á„ݯÃN°Øãkg…ZöŸÇ Wç V4vnòÿº8‹{66—áEuãÜÛ=¢VµK¡«ö¢šÃX)| Ü7{[Eö­0ûÓ»  +=ëõmKrZ§øãçšSmi7wó»£EÌXœJKÓx­¯¶†g ¼Ì­ +zq/BÏlwuãoKYb.ÌöúÆþxjEµ:˜S…2/}Y5wš&;àjîPªsúYŠÍ‡øYŠÎµû1Yý×ìÅg^M¬‘Fb³û/يÏêRúýb\’׋s–ùŠÍ³æb³õøŒÅgºf+>ÿô3žÝè[˜¿Ù_¼Ú„) ˆø›Ñôg¯Ù¦=UU Ÿ]nîn²×íŸYJý³kçP”©%˽-ÉrÔ/ûà_}Ä¿ Ĭ`lãoFFÖ¶ˆ³†²~ òßò^>.¯ñUÞ?ýg_Ðy9h.û/%‰ðaó½3%ÏWÿú¯¦ +\[äקד*Ÿå†ÓÕéÿ—ÖˆÖâ{Ý/CÖ¸ï'}ŽÚŠ £(S-L…ágât -Ucˆû×ÿE²ø%®ÝWæd{pÎ'ýBÙ°4±ºLߌÏ·+ã¸LhŽÿ;¼WN¾wxs':Bê¹÷üxÿð‹eö}$®Iÿ;4«öÍÜ5…WñZVÔø@"4 )Œo‡>«ÄðˆH ©ðSìSäEenñi^ï¶äO æÏ…:O¸ìüâ­¶_ˏ‚¾‹j>O4q Ӌà +éOBïÛ§ã·F +ÞbƛPݝŽNUjډÇh³4ê{ºf¦ +X~°óšú'¯­Þ +•—°>• 8Rep?ñxy|XO;>Muߍ³êx…Í„R¾-[€A—'w©•Àº5 ü±Iǃž!’2I>ªªi.]\P*'ðbýût’¤ÖÚ¾Ä2ҁ)²·8 +險Èõ{Âqǝ ?2Åb6 ²a ´ÏWê¼ÐœÇkÚüôI9¥ŠÏw–ËÄܘҮbüwT]Ø:€8ð¬ÑX¬oÕP‹®MGäú–éê>Ý(í‘VÓÝ˟ +RÞZż¶¡¼¶°yòtµ²ÍڅçtÆ,­›¦1„’ÌLcAW+PtÆøϺ²L$®wªÝíˆà£~ Ë×tFmt,“팛ü–LY,FGi DŠyòY1dt á.–K¶’ç |`+½ S¿2™»ã3?Éh¨~96æ>fЇ3ô´T?œ°¯ŸóVóÿiwèh¨æÝ©Ç˜ ޖ1]ÿâh˜õ?¹O.A«ä°Jçþd®¤¼ò½ ù —»Ç9ÀÙ;è:,âS›/÷1¿³ÎÁ´õ°&Zù÷ŒÏ÷[Ãáø.Ñï¾bbøÌ+ ;\ìÙ6ó÷Õ¸Â>nûš“0`hÿÔ4Ò¾•8ý¦Ìd÷¡BÙ—ïw8ê¯åã|TäK抜ˆm/‘-¥Ð#òœ3l&|d +“`¨=¿.§c•S±Âå~>ŽÍÁ’ÂáJÉìØÊ4¥´³CûâíÞ åÁZvG£ï¶IĤ˟¦É€ 9„Håà?yã¦#g️ +ç ȹ]~òŒ"?'(݁|MûccÇ'cnsw޾«w]w_N«¯¦È +.‹¹W;Ó{Ÿ±:Œ¤¤ë=•z֗1jïl¹²5Û?´2ˆkÝk3•µ;7ž~‡dðZI°O€"X iyßßl‚Ytÿe›–ßuN .+~PÖk¡;6FQ»ÅZ·G0*ØdøYg†åƒÎXGs×c'EËç 5£›uÎ0w}év³›v'~û¡—ç×] Ùͺ¬¦3Ð ľÕ(Q¢D"{±%+ÁA'§-_«g\tÝqù—©üI‰:lÓOD@¢B¢‹I]$lˆrp =å~ífŠÆ¡\ÚѺ\µ2E"µë‚’Q”ùÅUÈç$öÒ*¦úr-T\44”+ŠÊŠ!Ÿ‚D§óÜ6cy2„ý~ź6`/óØ·u˜‹{]"°‘ Ÿ ˆ8ßíH¢ÑIàÙÛíQvc×ø›ïD½÷—{©bjbnæö¥Zÿ¯ƒ%V$Å'ñH¸êôè'¼ûÐ)µò£í“›sNÎÅÛ­HÑ5_ +óšÁàgšKLkZ\­´ÅU¦1?ŒÎ·H÷‘„;?ªNiu=jxje»ª4þVѲnçuÜû¨#zl΋V§Ê ‡/WvéZ¦êÞ9Ë·ExA ‹óvm +lfçß²X@U uÁnϝyL9ææØ¾D‰°$«F,]ßäßU¼½n¦åwØîq}#RH¬ž$g¸6ÊAõ^ӗKëPt¸s—¸®†U$Ý­%¶IÌve5 ¤;hÁ},óYãPu=ƒª8”úùDÿ÷àá+N¨0NÚa2´³ÜÙd¢|ÅPÌaí(ùîXúIša +{lŒ{Âeh¿¡í‘B%²3À»p©üU°Ê}䌬žÉ{ ÙÒ”òš…%hC¡=uôŒŠM¿Ÿ${ñÔ®<=OR£À‡Œˆ0Ú®U1±AH.o¨3ÖoýTº¹‰c'†±DÍsC#ÊEŽv€;Y×dçPí*°œ”¥*0øÑ +º¡@؊çþ¸x9ãÖ*†´Q¾ÇÔˉC9ô^Î%AzThP1óõ³Àн¢³<(H쁍P“zQ铘¡ 9YÏ8cŠçSi}/dhöoMe`vy©ô.¦¡œtzäílÿ±l벉OÿÊNºé/Éõà­2·w``ÀúœíÜÙÑñ(±l¹³·Oºq!i2µøìö ”¿@­í â[öîùhŸ^ ³š¼!!ꙧf gSÁ™TïåϾ6ώ›‘ñJµ‡¸uò=|]˯‘é¢Å×Èýøµ]|AW_#ÖÅï|ôI_,yG­¯~ +ÏñÐEG‰Â'Þq¹¤™Ê¸æ84a\ÞDkâÕhü–…Säµ¥`“³ž‰Yg(µeëÖóYH¬¥:œÙž›¸óô ¦tþø¯•~u?G÷ÁyR„°ãÒ8¢ ë…~ £ Ïҗ¢µÂe˜ÛIœ)¢$S2“1ïÁ› F½è¡ëÆ,ý®$g óÊë‘¯Ä +^w‰µ\¥ˆ]áu픺ákÄì|Wá)3Jc³d@Bñj>ži·Ç|"y1JÂ/k ÿ?ðÇ •G +*ô&’,x…& „oø_ïE‘|«‰bþ©B)xW—9-)ØdÕVáqâÑÎËO*’Ïh—LGBx]¤ª¼%Ø"uƒNarÜ&’Îð·mu²ÒÎð¶-Õ²ÒÎð¶+îéigx[–éigx[×Þ­,ï bÁn֖w…±0Þ­,ï3ëî%Z<ÇT>ŒŒCD„YH‹Õ"¯Í!·PrçûÌ{óX裻 <]^\µ€ˆh7ÍÎ^Ö Ú)7Çñ}Z½#9?Wp¹ÞV]Â#©$I¡nê¤kàwBú¯6¨ªB“T.H€Zü%Z3ΪdèŠ%b»lçÉVKnlöÉ «tl’ §Q¤¤\¶Dþ¤”f”{äS×µ_lWÒÒBóæO01+zÙšø¦Î]˶ø8Ÿ¢ù­À¨šV´eÒÍ|¹#'mt¸œF§/eÎÍe Z›û1ÛQE/çԆóÔJª=£-à0?#¶ óAY•9˜í™´U•_·Mñëӂ_ãûc–VuÂV‘K6òՁEbM0˜ˆý.(ó©-yoÕ·gŠÐd™§â3V¬cÀòL遅ægаî$gsš± «ÒªxdŽŠV .oò ?÷ø\ô›ÿ ²þ߅ø ¡á[P#ãÃõ:œ©{£A(Ò*–MpO9L~Ù;‹&)‰wÚ®A…hQË(´œ{9…Ü ›ÃV + ‰1±¿ç>@Ôöâ $)3B$·ªQk‹Š¾ââÍâæH‰`l5è0·´‚ -n14GÜÉx{>ø;>ã®zFùÌÈÒk"}H·'Â.Û甘Ö78fË“r¶pàᔔgSýŒŠëÓâtÂÁŸˆà/fÄg¨íÔ6z… +üàýb¥R¯`F¾¥«Ï+z +剳P«‘جÃQ„é‘Rät❸= ê%¬j#\½ (Ÿç…¿#øf“QºŒ1çRBL%vX½è˜-фÐáʼn—C©4½Á9pÊ6(2>p#³MùF’ÿÖÿô•Ë×dÖܱg„š>:‰´}µ½ÚE·à-ÂÅۘA\§gœÛœ:äñ¶Š©ÙñØCoÓ³à‰jpŸ4 QÓ2Á8üò€4yµ£s-(z‚Q½ÛªÙrDPABj)ë>¬4 ڙês؅Q.‰2#«4*$z*ƒkõlîæDãÙAî:\ˆ^‹\*ýú}4h‚(¯ Ó ñЎxb}M'fï©Wäoª_‚îí/üÅÜ ÏêqÅaÖ f=2 ü­_ÈFšÝ¨pýº‚V¥côfRC;ßvÒà÷֒³@n}}<EÖëÃÏÛ¬ë×r¥€#í,ÍIVºR@úÞ'_³ f1ÓXø‘‰|¨Â »pãOÇò` Hç\6sU*Û3l +Si’w:êAMâ½n<>À=ÔRËٞå>Ì?/´Û§6ÌìØ~q#Õpm_%e5#ý[0ý`§`µœFÈ#šUœá؟Toý;YLª}ºÐ£ô˜ñ†~J®Ìä3ÈTÏeªìï`ɱàã†ÝÊ 5€ãž¬Ež‰–Œ5m™ü![€ˆ!:§y8ÀL„u¿%!ƒg0û·½é¤í=é™6a½lŸä ÎÕqú1®å~Ÿ³eî`£:³7¬3Îõ °ü4Rãˆ}¿»tŠoç¾üÕÏ3\+î([ +â¬! +iÑþ@µÇyÀý/d¢}uM…®žO°lpùñ^q÷GԄ\‹r(d 17`"0Ó¤-GºÊ¹¶‚î}ÄÆYkž’Y>‡ÇïÄ< ¡É>½°ó¥÷Z<ð`z÷!ôƒ Q(âˆ7«I}0*j*‘½—Ä:ökô\…I#{Z^菤úa#vd;¤G眀ñuÁGç_ˆ ¬™¡y¡¦†åîx×I÷h jñ½¸ç``xš¼†l7ã£'k fG»)‰òHÛÙLNRFÖnÕGéßv´j Hßxú4öŒßVšÎó$á Åâô~ÇnßÂ[Ÿ€¹sëPž}£„£Ô[ÌXøÔ?”– eAyšrPiß6™øˆ +ãêaÓºüHrÞÓ"$E[ÁK´ð¾‚Hú˜€»b9m«a¸»byhÎ}"~6½«ãfã7ºUñž|¸^P0¼§# äƒ ±>¦ômë‘v„ðoÏ©àjõ|}Mì}TNøµ[연.ÒÆ~0·XSCêc ì$bØÆãÉÊbÿY—T(_ŒÎ¯kñIːÞ(:ÇÖ«ÕÖDsƒÅšÉ©äÙ±[…SÿýåÝ3vÚñeWùifXÍåŠñ ÀRL1«ÅoÚª‹S¶ÁŒf= âmPs9ú£ÎÑ.YÔ+|ƒaîQd¶èî§«gס$ÎR9OŽ„IØ!iTåª÷È ¦‚ØoNåÇlã¸'N¡1r4Lꎋ …_¶Èf*[Žº5~Ð;ŸÔ# Cd‚»ºiÚ°"ф֚m™ÔLƒ1 ƒ–v„ ‘9%£ \· '™"${y#@z´í†f¼î(ÃL°"י››~"ÊmÝIã}#ä~ÜêØh£á(Qê“ÿý(Q…S€B²€ó»¤zòb^iYš'‹ükaC§XG]? Ø~¿êê­·à$ºq3ˆü§ÙÄuàÝÙB«~;I“8Oµù¶Ü¶¿§m˶[mËÜ-¶åü+¿¿œ'ë‘uZû®kÔ^6¸ß‡vÚãi.ü9Âkÿ£8MQoÏ®ÿVsù§ï3iøÉO‡HÿiZ™¦p2Q¹mð]Xÿ÷H +¦çљØ:4Z•³åxo ©ÿ!g§­ø· ~ë¶¿Gk?ÎvݞZ §­2×ϼmz}±…÷ºîÜï¾yuÔ/Ý3õñYÞk¡½ÿÖ¡×0ß¼¼ÜTý&ïý­nÿʊ׋›òåkßÿ^V½‘b®]Ÿ)ñåk…g 'S¯‡•®·Üt’ÝÌÁo÷╎;õâë(¶r~ ¦ÆqߌÌù›ëù .*Œ.†O´SVÇÜ_nMI6îA`eº%6̂QøéñÕ²ÑൠÖj.ŠKBçD–Š2’Ž Ê(zJ8“( ©(Î`â@y»’x«%ü礸ðg-ÇÏÄÒ)}ÑÄë=a¼%XIÚhfªX§ÔáÃLð%íÀ[YÝ[h¹°H'ِÃ`Œ&gg)ÓÍÏ8‘«g!%Ȇ¤•€BÐ)x`rþàºíN¨Úöw.ߏ[ö4èh± 6¡–‹O»’­O{ÒEQ÷ +¯åè/Ôm[#¯qÏеtHùuC~´­¡º’‡„ª¨€ê̌Ë¥yNi /Ä!fÍn„Âðîm Vq‘Ë}P ¢')̦QYâ†2ò,²`=îš=òoú¶g¯Ë‚Qô4V[Ý݉Luä‹7S„³ª›Øûu2Õû;€þøú?~߁™_ã‰\G‚0ˆ€™ËJ±42ZÅ(ïÀ bÉPF–î‚s–Ÿ 2œ{GANoqí”áÀ¼¨ÆõDâ!³œZq+y½b¡Ò{Hܬic˜xRú/|ý+ñÔ6¦ÑÐa«!ðæ2éÈR¢™-ëºËãüÆŠø ØaØù·¦D£ЪråÃuCQub6×˔¾‘^6‰ºÀ‚Ã:=¿×fÎ;ڐSÈîüœËkëüþB +_<6W“B +SG¹ œŠgƒM"h?¥M{KÙ'£ÌE%ð»Bž(kß –Dz„3àO¯Ä6 ÄL/@£cÄ(¦ãÁ{`"Ò\'ãlQpºòX9€‚%n©dIáëèaHúa±_‰bòÙÐÌ}Q±I—™Ï‚o1·ð†ÅʒÅ텊‡È¡,@çô94lX"X¼ð±wÞxØ¥J—ßábó]‹™%ˆÿC¥²è E +¾‡Üöń(ëï ݈إØ+ÄÑ¡ +ÖÚçSô`óQ‘20]à34ÛÉ"±†×RZy +o4ÑM‹èéP™¦¢¬l(új›Ò­³éPÔhÜÝ-* Óö² Q?…‰¶E¨ex-su‘Ã>íª@+í}á~Ðýw…ìµKç®å­óÅÀW‚AÞèžCö¶T…Þ‰Šï¥ c@ç¹g‰èèÂé===t·W2x@ú—††#±*Íæc–‰3^=îâ(´¤:ÏCnô‹CɍC«:¢Õ,W^†?Wp?èdÊ+K°íCp¨Zà< «¤O”šìg³Ì’ÅJêÊèC‚ÙŽâOÓÖ-u‰û–°#ײS µKçsK\M±úÕpq<Cz,1z»ñ!.…'ð~€eJaÐ'ƒîk2 +-tj«Ä!bªûŒ>Š%ª~Gÿkùµq¿ã\ùˆß’5sðÖN, –\j¹Èüìj¹Èó°”ÿœ#ùh£89Äq±¼,â=Üd â=œgù3tøëìFó^ÒÀa”¢Mc{ê3*-ƒŸù¥sîSÞt9õ>ÕY^¶vwF¨BTR<‚V,“?ù²X ¨Ð<‡ˆA›¼¸}ø÷¢Ö—ہƒyåpk7‹Re ¢FÝÆ1±T“&ä¥é&a2gRLĸÇÒLÇäð“29I“./ð®#ާk…:¡½üW<ƒ7ˆ6ñ;#80x›¤šßÓÀ1Z†p@…§Aµé§á\Ÿî“Âô'ºí_A–M™HäÀÐ%éûü"«í$Y ›ã‘ThÆqÃæ"§Š¨ÃÅD•M@Œ@[3DÑΑoÎ9sÙ騧7 oðë‚sOßáqiCôÆ=ľÖkäm0#ä@·²lÃOi°õ3[ùÓt¬f­ :¡ÅþïÊýé<€ ~ÏYÐ.¸ËîÆqšB½ØEÏïԊa§b)˜¯˙íe ؼðiØÍ“ö,âNÎâ~Mä‰&§`’óFzœœ ×Üjç”ÙÑìRò*vlDÆC‡_¥Ã2€c"ø —pÍôY)~Â’ÆÔÿücj|]ëþÌmOîýLmO›cÿ&6§ÉÁñXڟêAòXڝU’·Üç¼Y+peS»Å’·Ïx²VáeïJÞˆ²Vú¨>"É[ùp|E’·éx²Vý<d­ÁœŸïJÜ8kÅâÉ[úp\E’·×¼Y+|¤d­ÛÁqJßÄY+pæ÷‹%n Ë¿x²VàO7oJÜÝ=âÉ[âÍâ,•¸qM{Œ·Þ1á,•¸¶þÉ[ùl_¬•¾q‹õ’·ë˜¿Y+pNwË%oN~elÁe’·#Tuÿ±d­ÁÀÑïJÜJÈ÷%d­ø‹%o„Uy+%oÆcO¿›k¿§劯Ä-ÖN1Y/Ÿ‘ÈvXþâugÕ¿ä±§?%`ÿü°üjzö35þ4Ëæ0Ëçšúf¿Üqñ’ñA@ËNjöü„žÍP=ÃÛÀÀ=ý“#0Þ9‘‹¼Rµëoþ*ö/Ëàkjàkj`kwnÚ ^ë[^¯k#Ø{5ޟƒîûÇù:ðm¡õy +éÉþàq†vÆv&uâü=(·¼ŠˆÑîý}Ïîb¾u¶»zҖmý˜ù¿'WêA´ü-uØ¿_Úñzìg]ÁڝîÙXÝUöZPuù¬Ôï“Q {9·ó÷ü9‡}áC‡9à?f¿\0šœ^îÖ÷òðç<ë×ëÎH—šÈüzýp×ÃÕ_UÅáÎvoŒ;3>52¿`°“&¿¢’O¯×éËM%AÑ¥Ã3‹7DŸm͋EïyJښ¢o…$YKHw,ƨ- eW%Û¯* iÑԉK+jŒ–DŠcŽz#kÑ464u9›æÕŽ©Icn8{ÅĚoCq‡“Þ)¨pê€w2„äAB 9;Ñ4âbüZŽ¥Õ),`=ˆÑÚxCk#s„<‡ØCÇ&ô¤Cwì°Âò©Y)´M³‘#¼péÒSf½¡ÔâS›©G°K(íP“Ë!RÉéÀñaóϰà&+½ìbXdi.0P®YMó] û#³ŽRà“ '×d—ñLKÛ¾µöµß”µôÏ­m¤ ÝËߚ}kÁ¯o[\tá¼·+ 5wJã7 1A*aPUÚÊWQAòÛ±Ié—6 h@ˆø.OÞ3(IGÀ"–´W™ñv‘é*èñÖó¢ä12~ÂùÂ(4ê ñˆ{>$æéyÙß +É𢁐çSՆøL°»áå#Ü:ào²PåQ6iØX˜—>ôkY0ޱB»4k0¬›¦‡0ü=‹‹ÚSkƒ¼u<9ˆê3v ôÓ5 «ßê BÙd~uHk{ΨeSnJnävl(`η@63bFç®0ÇTV·GÓ°h%½A5¶j"Eð!6½îÑ¥$ÿ]ÝÝÉrK¹õ€`Hêf"äHoé.ÆD‚ÁEÇs\Æ!á¸ææM„Š(¸ØÜ¹7«Šæk›™Ž..î«®¸¢¤s! f¡ŠÀT Þ:Ž!~þÿÿý÷ß\°U^­ÍîÊ®ªÞð7«ªº»ÁͪÞðvº«¼^ð³¼ÞôÕç÷Wzêï@=]àõVú Êp¬—]´‘µêÍ.[w:¬çY?šßÊ4iWhûsäT ±òš4{l¯–•_€&Yò¢Ht»^OS³F¥‡‹B< àÑ××@%ütŒçE,4+ªÈÙ;T¸ñ—Ôþ >»øÿä"d³œ~ŒfÇ?ð\ÜÑhÔú¶D­R+þ=6…g´5êò#GA¯=B–ÿ@àüӈj^yì}þêøoJÑ´}QoÑïÆdO0ˆ¬Jõm\5ážG‰Ãa€EZ£n]áQ¸îð¡(±Õ)]ûÅâ|]•ÕÀ/_²‡§Éz;Zø§‘ߊÖ1f®DqÕ£Z5œN§1“)\Eáj)±©±ìãe.ïdõû«F„pç­ éQÿá¾_ýy¾A€CÆùéý›åYôx»Ü L}_%ÐÞáŽÁ«yO ŽQ´óa¡Ú>F̗I·–ÆŠŽ¼ø|Û|\'Fx›ä®Õn‘)Èô2€嫸ÜÎÌ/˜g­¢ünèsÛ81 +dJ‰°óRá7çÆðÚw*4䷅ã‘á´Ü#±¿@,‚Mýiy«¸vÆ‹úZ[?:'[ ΀VBk ¤yuúavX‘DÚ¿ŒK±ú<öWI†ÔAâM‰–,«5Tò<sv^—èN+°&Âfµº—®Ñ4!R± B˜ ;GKè/ó!ËÓ —…óÙȯЛD/ò»ä¯ DÏù˜’•ÖÉé–g=‚1Áèz! sê_Kȗͽ46mG‡ïl½QÄÁÝÜçñ‘¬Ð(0µ®L‡¶ôý +?lp"¶¹mê÷:=¿Fq<àÕi!ŒÚÒù£NÁϦ¼Ä4g´§øççN"/nyg-Þ¢#^"4wQ‹ÑDg"\ë‡-†ÈL/š+]KTÆäٜF9>j²¶dÀz4D6Ãìh×ÓÀÍ2"ۜ7ðÞb¬ô¼Ÿ<#„õ}C¬‰éù ý«âf÷¸–7üãyÍÐn±3,À©ÓÄ=H9´ôÆtçÎl‰éÙKB‰eUåš%–Ç,òwÀÕ;3²;h~¨ù›âýƙT?“ý½(Ÿ¯{'w½¢”ñùå­2—€€(`á½ÉÃAneÁG®€ð+¹°'œ³Õ#ÎRUPN%‘™'Ý^DsÔœ:˜ý)Gú›ÙyèÊ¢3Jq\L苎©n À ,Yœ~Î(ìúd¤QY—zá"D‰2ryöe‰÷fHÄÎrVö]¼ó…ÈÎÞD‰ÎwÒ½&;Î1ï;jV`ZؒôÅùG“?`=rËG(äÇ~™®åyuØáŸæŒH/”xnäf +7I–]:1n_5…Y(ëªÜÅ v>b£ wnÑ~Ê/?ç/EϤu$GVòè‹NÂb- ƒÀ&,êDYêg2ŽvlG;> s`ôã’Ò#“µŽäÈ]ËsÁ¿2ºòZV»›'Պnl§k%÷6Okîl“#øLHþGçS#Ì3±MÛPÇÓ1»$=’tëNO½%gŒ_CUvm­lÀ«vW± oZ \÷'×ÛL—·áP¶õKDí‘ä\³ú„r|}é]›¨ò§OR¼µèï«ÏPÕ ÚU‚ÎrÄiÀ'Œ~]9=:\æDø²CʉVÑ#ˆîŽIÔî“ڽbZʜµ×ɖ²·RÓ׆´ÁÔ!t-k2³Æ9MUgH¨V¸ÐÏéCpTè°Î޾L³ÿCjw­êR²Ü;ª:ÊõýÙ5>_fO`%I.ãmÚ{’cïŠLùŒÉ’ˆ“%#Òñ¤™þgâ’o=¢Ä4¯Bþ&n]šBF\¼,×ö„z³ ˆa«¨2àWcšVrV'2G>À‹µ»96 y8 Ú­¶ôÐì[¨«Ô,ç\ñ<ÍŒX%º¹ƒíZ½: O ç®Gv=ëÆVXòZüXüœq-îãå(ˆð¸ƒÄVt>±nT‰-Rx¬ZLB™ûYöØæË9뤋¥Gáë"Dï¡ÙwŒÒ +es˜bËÛó[p& ýû¡{fÕ͚0ïZ&ô6ƒøJ°#Ý}m»´ï9û™í‹ Ô~dr]¶—_Ü÷§w#Ü÷å»fݘOÇåÕ;#z>‘©å€XBêîi1+1ÃÒÑߗ×îúYÿd»®w.=/û "OwIá· ?n¬^¸£Eþ¡µ‡hô£JÄ-uÜX÷¨OM%9.ì©^ûòø?·³ãûaúÿ”¨4IóÝÿFc»ó÷[¾ ÝžØ:Eœ÷Ó íüˆ’`ýêWžCÈç\¦”ùVñæœMÔÓ?,xGsŠq|Gׅݲ '¡õá©Y“ö+oýŒ«ös_›h·Vx†ÛË,)æàѕïKxŒ¯~ó%‹pó¡¼Õ}S‹Õ_¼Ö}Öv§¬Ç^k2rìž™Óæ—×ðÀ +¹àcӚ·tjl“÷ܲ‰åCîŸ&Õð Âæ{C^ç‰|-˜rҍôh*dh0A˜‘ Ù£`;­Ä%Ð2kƒÝR§B¥…¤ö–½çŠš0x=ÖpuÔîH©«ZÖ¡µƒÝ¯¦Uf‡ì"I|=3ð+Ґq¡Î}r#.vª¬¶ô{&ɨŽéËÑ98Ži D°ÚÅÓ’yd©îQí”¶MÄËï±(À2RƒÔ6»ë|†i‹ücȋÿus¿Í”ÿýs¿Ú"9~såܺ»ÙW4ò»b Œ,÷èÏÄ'†q§[FmÆuÍ@í,wUÏܟ¨ˆ0æ=ÔA& ´âA{I0]¯ ôdÁmø\Œ˜.ۉßûc®êúBÕÓ¼a?ð8êYönæýK ÐÖ\Ð]®¼jö +Õw±vÿxç¬*ñÎ 5㜪U‡\í¿ò“­Šùâ%›š‚¶gQ%tÍ!4\»q&O}ó ÖóN5ô$F°èrÐM2;u‚Ô²neÕðQi?“"':ˆžê&ۍm"'‹DO'ufäÄCw¯Ã""D”ášWʅ+8»®Æjp0#¸ L6õŒìcøÜܨtëÉ_5½7‰éÍ¢8”Ž]º$9á÷ŒÎÓ蝿rïjû³‡µyñ1)Ïïnnn§|—¦¸1ïȂ\ï8OS‡ØI‚m8pOyx9iø‘p"óX±)˜ÄçíÌðuͪÁºÒ¾isš!‡Å4Ly¾©z¾“¬êJ¬Í©lf äV©^ =Êk/Tô^eùU,2XÒùÛ°¤Åqi´ŽçÇì!UU%~K!‰²r ¾6Kºö1N ö\&û0©8^ݞ%GÀÇæŽúb#¤´ÿM¾ýV?âÿ+½’ùì/‘¸m¿Û`câŽÁ¹ô8Ö9ÒgøU*;ž ëÎÀÇûŸô°1ذ3î¨Djw¸–¶ÿmaýñúþûãÝ6-ßé°>ý¢û%ÝÆõ¥ÿ2¿}•ÝÇtÿß`“±`ð,ù?~̚oÅ`¯É þÚ ¿ùX9ôÜ[?ºñ¹&üÄ·;Íè>ÿåæa_OŠÒRʾ×Ï4¸±ãÞñ:|Œ¯y=ôpè<²_Õ/üoü1Ú@Ú.?¹ŽÐßÔU&ÚO~ģϫ›Jé{›øKclU§pg‰á{Ô°FPs¦ƒ¶çg~ù3¦Ҏ÷ERožÀß'ÿý¬v‡Á<óUýïu+ûÞún|•­Ùz˜÷½øÀ|>WÉiÜ©lüùÐiéëç5;¯s}*ÚÐ ÅñœäEâË~’1êyààΙïö&¸Íf®½\¬ñö?äàÙqDÏÜ ¢÷ƒ/|´é°« +³œ ›â€ ¸‘Cð·7f«ÕɇÃ8~¼¡ã mLUmmõ¤Ãùó÷ÿ“³£¬DÜÓ´7Iûóœì + +_g‚âˆ#%èäç58Âç»ñ°\æùùsŒŠ‚ÂXU_®÷%+ÔûøÜåÓô¸w²¥ÀM”늇\ÉgŸ‡pÇ+uN’Ö>8ÿàðcR5‹?’­¨Ð†¦þ}õhRò|Ù-Cá‘o<€&rðh´µ¸x kñ҈ÐY'A|®ôÐZ@&f˜³€KúVíî.¡I|)„µ]Ów¶a;×l ¾`ËðÌ9ž€ÖZàãtÁŸÃÍ:k[;¹}2â³»r£’‚,H_ý°ƒ¤¦ØÑ˜D\`K<ê°e>iØ¡˜Åæ4¸Ú?6ÇwÛL žïˆ¾„MgŠ}iµß³EÊrù™…ILò+fÕ¶‰[;«ÏGE§W—»¿KóºÌÓ¨~̧\ÞðöãxXì,K5!ZÐæ~X¸õ±àTÏëÒûðñœfÆ>K)±t’Ã|ÛàX°v£}¼Ø(ã¥lßÐÜ5}å3àbIÚÜY×e«ý/UU1°¸ÂØZ°¼²dŠx΁ƒõ oåjò}=Žš5;§Ê•B—Šrý>à,s©ŸWç•p+ð\¯YÙØb`ú»ø~­%…,çO¼Æn 0ßv4cÎYŒ¸iv`‹„P\Ïò:d–§h«¬¥ٛ§·òn Ёb ‹¾Þ¾•Äwóâ {;èÑ +(­4÷šR8}yz‹[¯}4q¬f´Y¦œ{¤×€ïf|@TÓ.ÈOÖþbì†3ÃKöýDxöìÑØ½¾J5wL{ìêâñ³UúeH喔§Y\YÊ…¿Êݑ |mÈâòQŸôÄböVÒŅú2|ü +I½]i8gøa«|ÜÕà ºÌñȉ›ŠW d´†×|Hó|CY%.2Éfír7…›´Ãa­~ýêðCA~³Þ3Cq_v4ì¥ß“z—bY…Ò!ýL°" áCy%w3+çâÆ[í‹0(ßօ]#pfi -ÜÃ,&ßæSØdf‡_¥öƒá×ê¤4iëï¤4iëì·¬´iëúÛæZ4…ñ^ªX¶‰z‹7ØÆËҔر®M£z(!cù‡«°†lÑךûËùÈ%¹Y£|Ö8¤y$ÄþÈ÷£jP)QiÔ>ÆèÅØ¾bJQ[Õ)aJã@ÚôRž‘Æá0‡©¢9õ‘É<ˆ²ãïE3æ±Ë[:F†]øé ¾&‘±Q/à_Aó÷T±ÍØ!RŠ–)sڒUƒˆiþzËzžŒH†·3œæT?¿lÎÆÚ›9bÍ£À˜]ÚÌ2‰My5ycêI›Å)Õ"MÄ^l¤›UÞp9p8È]¹-5Ûµ#2~º_û§fE]hµ¹ê‘<ã3½ïk¨Õ9>×^½åçµ×å™rh²Ù×eLïÌHä떙cÛûÏ.֖ül<´Ë'֗Ò :\–Œ‚íu£ÁžØãÙa{÷×v›Eœš½aȃí)s²Îeãé<ÕG½c½+„Áï‡y¡Æ“×ï(PÛρwÉï7TÕzšõ¿ iIr‰á{­V‡cê>ÒË .Æyp¶Òµs¼-Æ·½ +f‘n~ÒË"b7ŋ.Rˊ¹dÞg-òo cþú«CÖ7ÑCeדeøô='컺ãÑ6ì^0ҝç t)ºJ2  ‘ô(‡Ág:0§å‘èéÍð0ّèÎGüǒV~Âh\fäÌ÷’WV$¨v­Ó%Ä8œ¼‰;9cÚ1ÈgÝ:p:\ ©ŸYÂ,o¬ˆ.í~ÄÅD-“–½k0qg‰‹aláLí…ÿ1u¡Ö"1ü̦%3‹yƲfŽm< ¢áE™c(ïdÈïwî¦-…¡µfo‹0À`I›tGÌ&-æØˆŠtîíö%’p§9y„Õkˆì†–´5¤çT>ýf³c±ÎZÞïssbɤ¯ ϳD¯¾—gà 9cÞ4‘CÝIkìeÏc;ØÎÅKIw~®JÔ¾œï%ø»\lgs¬Ög-{ö—»ÝÞÆU{›’<×ç%× ÷ØIl»ò.›?oc*ÓAýdO8ˆR¬²7± ÕâÁM¹ÚŠ–è{ºÑ0v…E¦Ý-·‚ïçµC0R¼*àWNÖr`xiUS?j¶…Yï3[m1¸ ßBÛWn¬÷â ˜÷'n&=X ´â†Ô²¬$ø®¼’®aZû8B™‡jþ²s—– ÇVÑK2¶PRùCaW¡¬¯çUniÜ;mè§ÝóNæ,ÎÑÏV¿šv5Ëz<[G)<…>†<ÝÞ²Tt0QÜ£ýëà‰Cãr·%h킻˜…:伸4P+ùV•âÉíË´íÍÊߟ)ŸÝÿ¥r¶¥m.¤[3~+­pÐ.ÿ a‚ÿ‘ò0H“èmS(HB±i!‹FÕ÷i˜>ñZ®Sƒ-ÒE8ïr¥w®QD·æ~Å_ +ç&·<úÊÜÁž*3€^6VÀc‡—•éÛ¼xéuèF»û …¬¤8·3œFç8ïìÃÙò1¶‡²äyM) Ä]÷üa÷³WëuމÑb'. ß÷%XÆ5ÔÀ §@¼HÆ,õµ8ú;`K´HËÈv,ÈnvU~ÙÂY²ÚJÆì¨Ÿ#» ^¢ü½¥Î1œ•ÍζåY2޽Æ0uèmc ^§9NºÈÊ[æÛúvÿÖÞây“¹Õ|ƒ‰Á‡AÇÅé4“ìž( ‚²CÄmχ(TóWiñÃä‚×ñÑúҜ>1Çi~2t'ŠW±|#â¬zN +Á'xe^ÝóâØov,¶Þ?àl7¿°Ì%»Ÿ}`“ýa6®>&³YÎ=Ïø8ª[ÒFÁz†o½+7€^‘Çþ€}¬¨4|©ÞÿÌߋA£Sx?î›É ÑúÿÀÎaØ Ïý–ÿãAïàŠ­Ù"HÖaScï0ŽŸ?ïÀçXûÖø‚I¿y†öÁÀÏß^ñ7³8òO>rĀÌý»¿¿ˆÌk÷T?|IøŽÖ?ýõ´Q¬ÓGUWH Í&ÿ¾[†€Åÿ½¹ýþ*žóaQÙf|I‡ýÆÏ-Ÿé³ó™—É`ó=ê\Bn¡ÏÀø‚z¿Éî0wŸýôW×Âãëäвä…&ßܔþgçýjò.M +KàÅÉ ¿þÚßýïR<øöȪŒøãú›™ qÑwö¼+~n7­ö)óXŒŸÚ`òÿÏÜf;2¯´÷ö—//Gí9oã”%tß&ÅˆáØ¹ü$ìÎÊu?ìG}Îç`nüÆÙKn¹»¯×—°ÿòg®oYÈåýŸê%i»ÿÿ0óߘ—U›¶{ðaç±k€ +×<êþÕœ›×îúxµ÷à¡ó‚W×"V›¿qž¹¯Pörlɦ¯A:Ü_äÀZÆù@´¤-úp{¡£6ü—‚«œË½ßܙ|AÞӔ+êeUôESð A¹˜VZ[¬Æ §xrH˜_Óٖ^a¤0 ò_"iKËÿê™4DÌZïu¾-Ñ:h~–ìõ´ó‰„¢S3%Ô¸úÎôÑŽH˜w±AH§®ýú¢G¨§•PÈ1`l~ +ô=¹¦›ëh\:xπ'ašÓƒ!;#b¨®zË0wonꃞSÖn:þÞFªÞî0ñ¯¦Ò7ªÌÿX—G™Évë¥'Mk<’Þ3ϝ—ªÜ±Êû˜Æcc×åמ»ZÑr»ÈsTz¥buÔϚzí«ÊFœô>³UÉ^½Î4ô&Ú5dv;8cÐí›Ý1Z)Ió/GÍU.ÅÅn[p¡±ç)¦OTüݔ!WÄËp¹æ¸ó„_4r£ +°|ÅSÔ6N™.\ÞØs„fü­Lþ†‡Xüc±u²‡w°˜'cÒÈàO ȉtéôäÄnɐ:?v@¨‘ P^1Jzøg8ÛÏÏC¬'¤¡¡Ø«ºªÅ„AQ¼ê(‡c* ÍD”‰Nd}È㺝ËŸ.sÿG2ñ^¤|Üö¿ 9ñåSxKªXîß½\H¼×¸zE<ÎLÝ'w˜¤ßõÀê Œ§xJ?Å÷ÅØ[…ëÄNe¤³Î\å…cA|0ÃЀ`¤t;|„ÊùR®Ü3´ßÂwnë9îv¦~–¤Ü]ÎĜ–Ç1LÈÛÉÅoöüÁ¢ˆo à!«ƒú Á3¤l/þÈÓ_WúžExÒÎ7•´„UwÛhA§yæ5öä'k<éž1Ä"C’¹žr÷Ô¥[ׇ´ë–€ö·\.ñp˜µãÏ`aÏ_ÔτQß<\]ZYm]OÊDàý¿£M—ÖÁÆtê™Ӈ}YæùÙ堔ñßÚ [WrgÜéæX‰ ¥µ|&©Þ‰Þ6+îd"ñþÓµÊZÈ|..{9vSy+a5Йæö˜ºaÆÿ–(y ¸Ü9TÝyE½±´}ºgÝ68€O’@S4ovi­Ýáh?³Ië\VÏ[Ñ¥—‡ÅÓ»øXÀÚò>Ԟ`ŸÝÔü<‚ð¡&çÌÎÒ׿ðùN\]`O;¹†|§¥®ÙHRHp-þ4y%só]ëêË¥FéÈã÷­k-˜ççcúOâØ£ÿ$Zgý³7»\[¹ ͘­»³®H¼ ‰T՞ŽwÖ¬yN“üFi€ºCùÍ–!J¿¥P¿Ä{\Ý|!t gï4LpñC±|Ûss龅©j¬=ü£6à—pÀ©”*¶¦9šË ‹åæ8f‚L ôÄå–gœ“¥&ξßêY’U°udcB4£À ¸”>µ£ZUݗyJ=\qH×Âa|é/~1ª"­•°vQ-€L=´©Üo…±³ É3¢Î4VÁì|{ù$™ý)ñLOêØ_TëïI•çTú£ø«â¶F‰‰¤n{\ô¡Ç.·l¶B}©R^7%²ëÕ¬^“ î0svm;P Ï9žl_ù¤v×-[ŠG;þSåo¦R„úçü5+Œ>zTâT×>fN‹Ô +¡ ÀH iÙ眨RÀgC󣎢°´³Í°ÆÓFÊÏá ¥† í»¡6YÂw®΂çï]NhN௠+ØÊø?œ¹Œßí- €žÁf—bsMcÕ+áB&…>D×éc1² ªg÷ öˌ­i™r¯ŒÖ<ò7€1Èò +wnj’#Œq`ÉÍ¢7|ß««¦Â†*-œb&å=D•f ¹Fé:NRm¢×ÖuªøNŒ(ÕÙ[=_*tò¥Ê~âèw ó=ü.…{` +Ã|+¢o®‰o–?)žvs´û]ξF¿›ØÃô¯´­ÈÇVçñ!µœ]Æ#Å¥Úx;¡±_¿Ù©A$ïÉàlé–çޅº¼u•jøñ‰ö¡ìöAn¶þ~izZm%$ÒUDDÔÑ '}¼J—/HÓԓñ‘óã ÁÔ´6 ‡‘%ØÀŒ®ðI…è„ +xº'@K"'§ð^²ƒœZ mIKzL–uIa¤DÉ_Æx¾£\fnÂãvƒ_’¾•òÈÒsHÒÝ«ÈÈÒS7æ4”²4™$i&F“›‘¤ÉÙ[=FØÓó–['G¥§²¶š>:êŠ]]¸Vš’ÍãËÓHf §ÎÔ²¼Z<:Úµ¹°O¢ÑßÍn¨…ƒ%Žü; dÅTþ’-ð,ø´w°°h¢ÑނÁ¥‹Fô,ˆ´aÿ6)bÑ̅ƒ]ŒT7ŒT†HgLI °nQÐÛ]{qL¶”,ˆ´byçb¶ú6±.æ4”€±±ÂTÒ& ²x23-ØC*reH•ÌßbŠ-£üZµ=G%Néçgׂµ;|ªÏôلypSÑyµŸ9]ý” nJ¦¯g/j=iᨼñ¾oQÉäÖûGëGЏ0¨Ø!Œ©l…žM4ã•(¶–¯ÕD­OåɉE% ×Ëáxg~«Ù³êcuv6ŸxXt°åۑÎV +Š0·dï„ÒTæH!±ñ)@ÁÜPÚ<¡´¥¯˜0Œ«ó¯à΁ŒÕÓù¸ä4f@'–K™é‘R!JÔ¥QþŽ?ð)Ÿ(À šŸY¦Ì% ÙïMsAó‘eDçYÜóXO˜†âF f£Ôṙô®ka=×2[*=:ï#·ßÒTÂÍÔôõ_ÚDºìá׿G‰¸pºªž€­«ºÃµ]B™õS·•‰ÛÏ:ßë§Gë¢ÀIùÂûÔÒ}LÎGïø8žçÑÒäú¹WÞl»K‹«ÝöÝN7‹nOð”eßFTŠÕ<¿ùü×íoòP?Óó_Œ¹ÿÿ¿šÿô/ˆþjv2|$—M\)_hŸƒ5,ë+ð—çšP·úñ©Ü†@k;rŽpe²0×M« µ^çRJgwEA jX–ªÐ²cn<ûì%Ù­4ƒk#8"÷¯Êÿ5+½» +RAð}­häÁaxeÖzô`C­3\i%FÌü7F¶7Š^…ü‰b¢F„ÐÓB|”ÙÐ&ñr„ŠÃ±Ä’Àà(|ëDÃ絍ªà)Œß"bÚÔШ“{lS¾®å¿ÉKt넞%"O£äj­é”¡äŠªzìd~3h)°¥ ´>‹çQdòYàWZÖüb ´æ;Á„Í&éƒP¥_¢àLÆÀ‹¦·øü,*¶•O]¬»FˎLë9ӄÀøìofÛ=gF×ĐM¶ìÙ/ïÌÃÇž\Ž ;çHJ‡bá8úï K62år;â­æhv(Œ‡;[¶¡¶+󪺄†ý=½u ¼«=êT¸3Έ "ý,ãyš«Ñ{qê—GªtqìæcØNz¦¯D´ãG ð…)#„ ahïÜþ”¨Òl1µÃ×|Zb@IÒ°ôØHÝôÌÒ~œ*Úy¯zñ0°—$}2kÆÃ²Ñ¯,ðË,½<Áðhàý„m| •»kàRúLÞ²îÊaññÎÅôêd>!­¸ÄTåïÆ&·ŒGÈ˒™ŠÇ‘c°1šìØøÎu͗ºÁ€;3ÒHƒg9 …!\’yWóÍ_ž¹ç6žC¿[Ù[;s՛xäv§>Ùé3»ä¾:ӞÔê#>+bÌ_à Ù™ËÒ×ãòͤSš-ê·Ì1ØD‡‰2T[/Æ_Î}362¾Y›_¤mÂB7d¦Óäâyz»êx)ßÞK™• NôJuÛõŸñÃͯç=xÄGuÃp0™{fImߟñ|}>7²í˜v¾6ŸÀŸä椹>¯û75”íÏ$¾ÿûb½²‡€ïøG!ý¸ü\âÇ+)øSk^®p@kI-ÂP¦Æ!“HÀçe]ToI³†° üî «›Ò²l²²o\nJÅøH·¼¢GÝó«9B')¤ü£êº ÍéÔÐL‡gùTÃ{›Ò?Í=aÙ蔛û«Ê&þ Ø5߬&ò#Õe£cQ}¥HfQua–3VÚÍèåw_é wuK=ݔ'Sgªó@ÇÏ¿APVÖF¯6D/LjëÓ³7‡ÿÜ_løÏt—ÂR€S­/âGð­b›0{·1i[„Ò¸$0(!a”Ã:ytÚ³@IšBiÞÞ»ñŸ8OÛ¼#­Òw‰£'^JšÇº¤àIrúÿŽOgñBü»WõáfN)?êô%õÇR*?³¿—†Ö‡ã°d”Õ‹OGµ²æüîåÌ,Í&Íãy žÞΙ"%¸¹)ÁŠè£ 7?öÊÔj<6'°¦¡ôx†³vƒcêZÉÔ,Lâ{C@Šx8#ºôÍÿíütpïæŠSzÍ0+˜àYJ‰Y&'2~7õFmrÛÄÏ,퐺p¥{“ÜáÃW>’H‘å»pjl{.i[f¥ÃóPkˆŽˆvªöQâ,¬ì]Bérfì げ:<š=@'TىÔ8f‹‰wuÇp†Ïg+>—"å±qŸ,‰S і¸¹•sübâfMLí˜u’}:¥³XÊcÝ÷ …ŠaFí©Ÿà”¯3ÓîŒÓÍ̙I?)wv¬·–ªÛŒÝêW÷˜f:7}І§á/r 4[spÄ0zêM/æÁö÷õ–n>`SUø¾èté~£K:ßÈ^ØÊó}^ůél&špD@éKSÔEu?/+þ•ÅDé­³ê÷T“eÎÛÝ n<ΟõŠ%<BTK°5wæ€÷i³7ؾ èªWa"e8̏y;³ô{SS»¿l6¥—kÛZtžèm\n{øïÆì,Ý3;LSߌ„¯·7è ÷wN} Œ@ì†×F.ªðGûêlÙώÏ.“¨ +~/ç¥ö1Dé°Áw¹‚—ލ')#˜·S«ê·G«œš¿Ï«d¸˜Ôn÷Zõ±ícÞo ‰µíÛ µì­%këÙ²€Ä;µqpü;•qq¼9CkéØlE‘‘,“[5ÌôÇôµ¥šå·Oó/güÃùPÃÍüÙeg­Í¢ë4!î…UoO +{l[È;kw^pÛlÚÆI»D7RŸ-ýŸrpï³Í¬{:±t }m8Ҙøÿ\ÔíÙï%’8—Î&¢v£Ïf¤1XáR.CÑØ P¹I¢§¬26½h]49^öÈ|ïbH²₇Tò-ÑVJÀæAoé8mKd‹¥¿¬í³×*f;`ZˆÖ)ÿß°§×[£’û£9-º²(Ixwj¯‘ê\—vS‰Is4Ì|Òëg)‚)pU`, wՓ!Êÿ¢Øà´ïHA’ƒ¡©†Ãñ¯«Óÿ¥ƒ÷WüA˜Tã×=eSXùØ|üŽÍ›þˆmÀm‡s²;üè`Að‚ ¡¤íÊF´çYX'«–elÿT;Wíµ4Ÿ¦êR̚Åý%›Ù3nÔ:uLŒ8$iU8òâhß¶³{#߯LØvó”•í$³bê^bÖK·ûwõ«K|Vʈ¼IôbJ¹žKlP³°2ÆYQ¿³Ù.=³Að¹à“Sè¬ÜiLóɉ{}34½€Ðx•×3×0¬úú}ƒúû8l9L§Â6Ù²fðo‡pe3¶p¢Á}õÁʁ(k^ó*îªÚ)ÀŒÜà™‘d¥Çºy°1þXÂÝJnL`1ÞÑ·¼ p þɏіdÉõà küâ­=ôú«u?ÈAoáÚ ù¼“þÅ¿Xó܋փ$ù¢˜ƒ×½ø —êÎæ_×O£‹Fh­æX »8…Ïþ@Oj.gYãLE Oj–Ôzx±ñæÀyÉaOÙ-#@†u„—¢LÕÓw2†u£„—©rC; ÂKóO¡µ‚á%ÞܐÚÁP’îgÐÚÁ0ŠÇ¯ñÇÂK,~.x¬U訶ÑÄ%XYpÍS†B(u{-ÿ–qÜu§£ðWMϋ^n3Wӆߑ5°EÅÜtܬgThhã3g>PÕÔSÛ¨”^ _Ñ+ æÑb›~^º*N_"öW8îšÚÐ%xí˟,Ài ZŽÔЂɖ®àÉOå…ò—†!­J¬ÒÀ¸p2EzºöM9b]Œo[ O øB¢NcÉ}}5^šÞÑõÚ¼¸Ø¨6 tnæX×Gúµß¤…LÆ §­bë«Ý +?¨/áBuêÏ(¨ÿ=c\ïha×.×Gҍ;ôrjyÊ~ñO+7¯C¯RÚþΆR,SJ +iSjÖ·n9ùÄL@ì#±¯FŠ1{ÔÊj)`2˜%v=ûb9%bY"‰†w´E¸±8S@vñu4µr³7²e‘éJúZ©Y’·%c0S††ýT_ƼZ<|C7—½™Y ÷’žq3ßê<ø¦lhgTÀü#U{й58HõÞ ¥¢½"Í$©ª¿Áz‹½!]±Sê3œ5ýèåŠU*Åì¬AIè¢e?–õ\'<‚nG†ê]¦]è르I? +ׁdLf¬² +§?ƒTh\q•÷¥S8²ÓúÝqðPÙUççOKú,jŠ%Qö!œÀSõPò¿í)¸ð¯PÊ<)|p‚Íœ_³åKèƒãNÓO*ö êåZÌ\¯ç}žT1’ށ·ÊöGJySäŸ8;˜Ó¹gýäóþò³Û¬·ƒþCƒø•Z"|àù+H:ÞòZ £{“^wLœÑ›B™ˆK-JVZp‹”,R¹º_¬n3”1#µ‰¼—Üf¤¶zèNu转{™Áù`ãa—“–Ê#eö52X`ZÈù‚k|ò•„¿Eág³7‰§ ”YkÂ8?‡xXž’N +ÛÏÁ±ƒöÇíÑ[N AÄúš[Ô^GY?½x(Á4þ’Ÿ‰. Q=lÿ£×Åñz£ü!ùßi¿ÝÿԄ_îÿí¼/Rïð½Ô]ã^²-Tsø Êð½ô·xׅï¦4·~8'‘vãÞ¶·v𽴻ļ/}Û“x^ý µ­á{è®ß á{Îݾ Â÷ýî[ßÿ1i§÷zµz6 ù6ÐO‘ÕÁ3å:kqõi{ò~ÚʓÙG“Ù{æ[ŸGm v_Á\ùÊÒzøòzû‰=„y=…ÄžÆ<žÆâOeOeq'¥OJâO'È\Iò1äù‰=œy=ÄŸ%O’¸“äãÉòw|¤y>RâO•'ÊÜIí#Éí.$ùhò|µÄžÖ<žÖØÇ¹øª{¿’ ³öý’\óEÓÏn‹§ºÉÅÓØÞYtöæºy|ÊãxÃÛ`óGŒ„’âRþG”“HÕ*¿„‚­ù'‘×ÉX†üd'΂èµe¿;e@6ŽÎ_Šó±ò,WHý&9R«yþ íoý)þ3Ž«ÙÉùœ…@æ¬=|x{D>ϑcȇËò!ì£äzQáòˆ}ð >Üòƒ~ø‚ 'êÛ´÷ãø4AñhýõˆGƒùåQá>zƒ˜´ˆXÌÚÐé98¼b'‹ķŒµôkíÙZãö -1ûŒ¹é[Ò¿-Ò¿-q'ÈG“ä8ùN¯VÆËàôWß-¡ü©=”y=•ÄŸ+O•¸“å£ÉòÜy=mGÌÇÔ|ÍÆ·ØÇ“ØÜIóäùŽÀë^½M‘'EÀñ·ñWñ¼VoőpRx™ðz úËoHÿ+_ò‘õÿÈô°é¿]ûò}œ|Ÿgq'¥OKݸYqöOkq´ÿíùŠOcñIëýù=nR܏a?YqïäÉùNGºŸ%OWmý’m‘zþFOû¿|¤}‹å.6Ïilö—zèòzï‹qù{ÿÒÿÓþî[ürøÉë­»L;zÿÿ³¾Kâ“ÙüR|Å'È|{ÿçgþGÏÏÜlÎÃf³¸“Öælˆ}²Cž‰ð#ÿ =‡Oªþzþ?Ÿœþ÷ó/G<ûu©·Ð󲚇ݯ7Šï~¶·©ÊKçu™ïJKIŸÃ8Äx?"gÑô4?¯§à1ÕGtòé‡ûRžË ö¶}5F!îÖåõügWõn'ÿ*ÛÍ·|@?ÀšÙ/ëi—ðýÜCËɧÿ´+?ñÿ|ßúBÑóÇóé³ÏËçèóíóù<þW?ÜgóÙúüýŽ~Ë>»A|Ð`4z Žƒ' Êè3: öƒC ï´]úès¸”9¯]ÈKK«—kê¾EÊ¡ÛSAžÌ~Ÿ¤çúñßaü‹Ù6ºËeÈ+Eÿ#²­ï¸ýã=¿ ,êfÿÊç'µˆdñáC(ûÈ-oÿˆ-™Cás·kîZ9þä#Éû„yN”øœóþ7ÅïÅ;ÉY5÷í×¹[ÿÃX£eڍy‹aEe„í¤²ÎdÉv4}ê®Æï;§š!ÌݍÞv7£e8)v‡nlé8îÆt]…ç̘U¿v¢ômO˜ò!˜Çw ⑨݇°Ì•ö‚åFÜѧ¾ùW2o4u¿°u-ÌFõÖ^#›'þ‹E €lêÀn¡sî¥VúÜÿDºÏS^]îöZ24ÊÈ¡¦x1“ÉæQќQÆïl¿Fm•…ß £¼™hˏÃ-£Â7¬Ï6H¿×“³uBwébÁÄ R8Ô«EçÔVÐÀ?ª„Nè½¶›ß:¯OU;£]ìMØ'§xRºa+–²FŽ/~+ôÁb-À'[Я{Jä]Óà¤%ÜTmŠÉTmxc´š|Á%†¿€—Tԟí¢p?äãñdaØÖºêüœ®Õi /áëÖU¨`Ù5—Tt¯„H'óñÜûÒW˜'3µÑ´¢p9Döú¡p”ŠÛPбtš^^ß`§êO"YPò;\<Ðâ^‹fZ’6¨µô¦jBúµõ#»!ÿ "žs˜U%çŠÎY'²ÅV +µ©4~;“ŒXÄZ©ÐÜÐÖ)ž Àyƒi*iGW4•Zzêi¦ô#Oç©øEq–žëkÀ!þ­^¾WB¥B&›m@Á› .z‡a+\µÑÎïÊ¢°ÂÂeç±SÚDð;ö™céb>ù&^upZx  @mÑcଧ´‰Ó:`-4…¡ý€Zȇ˜ Bç°Ær+$vßc»™ál¢ð¥ïJiúáC‘ÒªaØKy¨òɝ֧8ê Ìüý§›U85FÌÊx@SÛ©ÿD‚½Öø;£K;}‰zI·K/˜¼µÒtrít˜‰>jJÿ£-£š ÊIÀz÷´ˆh<ÃQj÷€?ÄlctO¼YDîdPœÁr&œµõÐÿÌ`¨”Ž÷ÈuS&^ ä[ŠA*çOà?̲biì!ÔRÒð݇LçlB¾†³·.ç.© /8ò Œí%Nl‘’pÙ»²ÍØxÕM$‚PÒÞÈÓíüe´Š@…‡èŸfØûåá ùJ·¡ 'ãXÀ»` {•ж²ºEgÁ”‰EÊm@®AÿÛÔê L¯g:WÖî±HŽucàTC1^þµ”¥œXÓôäQdmt—#]¶5”°žI‚¤¯í0A÷9(l\1òyÛ +¦ƒ¢ù6ºR×E–/Y©¢Q¡ôêšÑWz´¼¡Þo°ÔU%«“> £» ÜåA…‡³«&×óý·¬«¬§¥PïêúóÈö.ŸÐ•„º‡Æy ¤Ù€0ü‘oÀTAM‡šK(º›àeJ©Â ä6¤Ž– Ösmrx (‹]eÚèæÛŸOÑ£§óŽ­tzjâE¨{ Œ)8\‚¢šÇvª”B#;õžé«ÍS¨£öÉ+¸®³¶fa3RËœ² -^ÞÙ¦…²øŠFð͹÷Éf÷¤°ÂL(Ÿâlã,Ö:O'/:‹Í9Ïñ/4ä;ÖZó‰…*¿ +h¯YÜË»=S»;æ8!r¨}úÑy¯ùZè•H¥Ë•—<#ÛmÉåïbã-á€uä‚Õ6O¹]ܜãªL†NŸið$wL6T’'ì•ä-Ŵˡ؞Ýüdyÿ·³@nËy‰ëʝ óvՉflŠ"Ž)ü¨òU[ÝþlXv}Ày޾WÄNÉs5Ò맗7öPJÊk§×^×rë½ö3gEi^W–~MtßY#èã¤_ ×÷Q wNRÐÜíí,²?´/ý«rð#Ò1ÏF?²ê7ݖcý>·4â÷ð¡ +{‹ÖÞ³sý¯·wme·þ:EÏãþÿ‰×‚KS§"L]Xrý_cMzñ\xßÜð2”¾l¼ä‹{¢ë--ӏòûóߢŽƒ”]€÷Oòx y˜…É¿ý¥ßtÿ²¦¯º‚pWy2‡€—™÷,½Y%½ ´|µÉroŠè'ýc1rƒÚۘyÄ[˜yÏbËÕÏ#@sÜrå¥ýÉJ<¾bxf%ªl®QDNÑ>¨ÐþfˆVDsq+'Ýœ× +ÓJK¡ DkÓûŒ¸f[eÂw´su#ÔCR,«”ñQÿ^£.r W5´›Õ.9ŒÒ8\ÁJÛdëò¬]k¸&²A–dPfXru5®%+ÙJ¾wQšd:¨Íܶ꙾Á;êë Ïòj!¸bÁ/}>R âÐ8‚‘Ï•sGÕRyÍ%yÖ_œò ÞRifZÿô.Vφî“dxWQ¸Õ£Ú5 :éåÝ˒(%œÿ̹a’—¶ä́é=CøÚL¸ûób¬=À©“ʰ¿$ìƒìê÷m\ì°yÇܹ²4 §r߬sT)\öh/ؘ)v÷%³U}ˈ!Š>¸äMÅq þ¼Ç`³<Øê\ÏõÓÃÞ[”C§ª#ºh¼Ո¾+u+OÝ}œ™äØÊÎÆÜ1bPqºÞ\ÊŶl/Ã+½B%+12Ðwb`õ¤€œ¼ÌƱ:ú[FÅшsñºø–3kžñßȒZY»ÄjenŒZ}"®5.òé¡)v”æœ A˜;¼ x7µVÆp„™/\ÅZÕÄñý&*Ö´§ Ѝpñèd,ã㘴öš¶5„céÌÜ+~?¼)„!=èÏW¨€‹–„¦û‰…‚Ù"°Xr¤¦ósoÉa4PU‘øí¬ŸÃ³+åtçɵ“Õº^ëY•üa JÓwMt. 7ˆ|°•YÂàˆ^ê^ @ßËð¬×´¨é\Vê-™Œnü–WŸÿ¾¥¸®¯ÿû¥~úGî²\Ö"ËE›j^H𥂪4ãÁðù“DqVÖhcrØ‘×Ø<u¦¤Ó€¶*œwI«u +uñ<מ­ë˜)eÑ꧙>î¹Â“œ7VN8död€'dٛ(,®¢üíŒé޹Ëk«Û«¸%¦®˜Ø:„ËVå´ãÒÄ5fš×ìm Ší^ÊÀ`¢lË©<µ‰úŒœ|ؽÇÚöO[í'¼Èýˤö\~ÙH=•¨ÁwtÒû§×ÝZ ŸnÝúøwGù¦KŸCÑ1‡¹‡~¾¯U gA8ʵT¨ø‚2Ñ%¿E!ŋa{ÝÓâÁ×¾ò1t;õ­ÃwYÃsxÕ»_P΋x⢌fkz¿]­H´…޽“Zž™lD=#Lß¹–™Á€Sg \îÐ1®]Z“s6ít1LBüÁs~¾u^1ž‰6‹Ü?– Flš¸3é@Þ +5 +M*v­Û4Å&oä0C†¡ñS ³My¥‘õm¾CêÍÇZ¼ÅµIs½à+×£`†Üë\èȲeD÷ ²¬Ÿa÷G{˜ÌËUôŒôKÓˆvª”ۂ¦&?Äœ5dçiBDõWEÎ9œ|±çÈDˆX“œL“RDÑ¢D0v€FD3E{^8 g´!|ˆy’ÌÜj ²Ü(ü„Hÿ­¿ãGèԌàx‘‘tšÑÔq£GšÏæ ÙQüµYÿù_LÖ +ý›¼P}rü¿ß;ÿ¿8âÎøëcàÜQox톎ªYóâ¥]¿ÌÎÕá±nàå‰XT…)NM;c¹rÚúê½­N¾^ރ½+­IÁVòîÒ¢ø§‡Üv,4Œ´Æ›ŽMڛŽt•‡Å,}]ú&húö§uúƒ1!‚÷Sö§p÷2æOsôžq Œ%É­N€Å¼¼Êëÿ¿³*výI +ü÷šqW¬O~qå78Ljõ_z’ž9n”Ô=E¼EJa‡Y (¢çÉ* ùÎ[Pµ©ì1͚X.[KÓ1Ù@`0f©`9l˦ æL  Qøp¦›9m;Öî/ìARÓÕꓟ + –“PúïW‰¹C™,LJú¨µªfhUú+2UZø˜.z&tÐ|l#kãZŸ²`Jåµé÷J×GÓˋ´ƒ‚ŠèRyOeëœ3À¹Ä¨MÖððc‰ãŠ[³œS3Çô‰$ s‡‡ÝŇ*ý³'Ò-txYˆÓ1Ö-¶d튓‡4ú¬Š,eNÊÿK©”·ÍäMõl?·A çA0­ºÞ‰“\í̚¹£X¦¡äÌ_0F¸¶;³×üØÐkÁ ÝA4þ·Õ33üWA²… ×>T]ÅÏܶ~ó–Ú-åh6T´âŠið´`z –+\n!0ë™=uÝÄÐoL¿ûtr& ©ëï'÷É ¨å?Æ—ö³¶º{F€ïÊhxhmLþ|3{2yݚW]™“ÍìÕ¦o^¸¹½øšèñ<¸³èsâŽ2º¸¤Ö)ɍŒ9Å5ëÞ2¯ÄÞÓû²¬¥UÜ»·$ÜÇÑ66ôÓËæSÃŁˆa֌¹õýUt6ˆ?ýšTÎê÷öû¨l¥±Ì…ÿA[ù<&¤àŸ¹ë1÷lƒ[¨v Vúþ5,Vªôìmï}iû¦ó\{ŽKµ+‰ö‘Á‰c±ÿjG¹É.¹ãnë®x²ëšûšãºA¢ªƒdlïOÄ +p»aâáPO|›o#ڜo°TsðìqºÉœM©ª;ÙH{–5 ^ÃÜmŒ6ÃelRù0ñÀ͌H{/v*IJûˆxVUÞ´Y~B,_¤ö{ õcýR;£»|—cî¼êüWÝgë"Ç×LJòjˆ;EۄªrÿÊô2ÿ&5ã¬'@ú?êW¤ù‹ú*Â{ÿ¹V…nþÕ¾P&5òÊhOŸRß'é× 4:Ä Ù>ñ>ÅXO©2PK+ =Ò{)Wè®y¿lKmãUó`NüFJª™>:,žm† Ó3ÊfÛ—¤A.'ß +•[ þ·f¾ØáñÊ¥kk¤ ç77¬ÃšjO…Ž+!IeN€6ñÓC´Í÷˜sêù ²á4í°ü*zƒqä9OÁ`ðœ‡æÒ×Qš ?y¦fom«°ˆ®4€!ž/tûÓvIïÛ~9°Ç»uhk}ñn…×þ°lˆ¸ Ȏô‡eÌÝ=è1\ü“ˆ.")À¹ÃDq{ƒ7)=JtRz´í@»ÎÁ×Ú9 íY«S8`¦ê‡T§L}YÌl€?FMqvlý óS8ê&®àH‡ÉH›ä_Èe>le—¬ £ba€i·*‡fB!ï!TT?$TXÖ˾#ߚüTèßÕ°‚ý©´:å\m£0dƒ"æ­[ +®mR,.«ù,i e«Ê©…¦„,&=6§ ¾´JNr)ma*üdï®kؼx»ÊW¤4íb*ŠMöcVøcG“–˜¡×ºñ¼œ­[˜•ð¿x°zø1tÇ_E`=ÈÄnBØ·þPÃê` ÿ;,FOãö^{ óh%:+4äî€ àͯä‰ë!ðÄÓåc,–|ŽÜtâ d›|À#ÓÈ3 †}ƒÆdÈ=Úû¼4c|Ý'øæV2º–xd/™àŠùD£Ÿ+—l@[Ÿ•‡µW?:žE¡Ú7P>÷D½>”Ÿžƒ™ÃZ¹¬:¬FH¹˜[ëy#·dS»ü)õ7øP°_ÊøàŽ•l¯ŸÞwc™£7<îŽË +°Yõ%À½-V˜¨Í¸D®–nÖ!™Z‚ž1NIðìøÓ gd:-Ê`T~ÓíæÓ¦áI‚1éÑ5@ Í?BæmzúznIÎnÅäKMØ*À’ŽC ‚æam7w8H1 +I¾RŒ®es¢wÉ;á¸ìj®Rl1ñ/»¨Üƒ¾FäZBݽy!pO4öøìõ?¿B§%Îf[•«^kj.[B­ÑàaºH¸ÃÁD† ÛL´œç›uP)NvLðöŽÆ¯|°te™Ò>›ˆË+¼ÙC1â7Swùæµ4öj« jOS1ˆ=Ýä wu7küÊîïC©-ÝÊö·ª{ØÔ:›¦"¼-O¼;Øé««+`ÊŠ ¶ûÃD¦DÂWEªmßæÇìÝochÎ7œŠ¯súž³{3^셮Auw¡£ŽÉUŽ£DΣ;]Æ©)4°~ >×úž +¥O`„³Ø†E -Ö°Åû¥o€oU“íT؊©ÓüŽpÞ|¯t޵4í<ˆêVS¦<Úô§TÃ!³‚M‰¦Ð†Õ¯ˆ‡ðSÀ†Áî«ñˆŽèɉŸ@ˆ<€m˜P’ª¸òQ߸Xõà6Ë9—²öné6y‹™Ë(g«Âi›=K…7E–1œ¢=ín+{K^¹sf®¯4%ޏ±ýˆôn ±ÂAt÷úŠê†A°½éŸí¾^¦Ã±šs{Õ9¢¯´3ÌNòµ{é} +JÅ9¶òµƒæJxÅÏÂe¡ž{·ÞVˌÛ åkw̪k36.*2/Ck68’nõÄ?èû+/–Ìj^¦à±Y!Y¾´šd]›Îo~^ñW8‹S»å|á§TnH¹·ˆêãpw Ò¯MdmÌò”«ˆ—î ø ?Oû½ç™[[ä-šÝ|²¼Ç7¾oÃo+êëÓæw‹ )3êw¤Þ¼ZžÌºHÿ´U˜ZOJGÅÔõI/uoò}xŽ¢-Ù|Tþ€ùËÓFߛžvòùÜîÖ­óa(ރÏ׺gf÷(M!L:ùlícܛ¦:aVždJ¯Ò‚ÞNÍ÷žæÿ£¦›&>…e7{æ“Ü›¶sjz#™Ë*µéÞ÷ꈙ€d@ßÖ½ö¼™%ž š_i¢‡À¼]!ë?n®ûI5µv;¯¼_EZSÙ˜uË[Wœ6÷ÛÕß·3òÖ³:}³3öÛ¿÷Lÿˆº2šm*&|çµ3å·ÞÄÏÇÚókz2˜Øk×Ú®h$!ò}@†à'lÚI¬:呸©µ+éè<ߢL~ɊÀ' ’0)Å&)æÌ‚·¸’øL+ЏÉе>„†s3òW¾èª37̆§tûŸtÿ3=föþ×Hë8ónJ¿;ÛöIŒ¹±=I_#†5ù'ó·ß{V”ýïO{é “Ç „'‰I$Œ ï úƒåDfe\c‰fEÅI°`"°Á’yò ¹›Ž.:Ž,f³3QqP `*¨*«1U>2fit&8’}û÷ïÿ¾ûޞž’@$Ê +n廬w™n7—7¡wœ·›Î[Ðv¹ví·™ËËËÎ[н[֜½Õ½î[мåç//jÿïSz—«{¥<=µ¶]·WRWTîuèMÝÀt®”‘&z'“+±ž× h·b1I&ò©«.YßsºJJ žÞ’ywkÁƒ…{ '[ ›ƒ™?©.R›èbjS.=éë€"™7ÉŒ◃Eh›ßøŠôÍ f6ôÆÛªyR¿WróoktÌXØh=q*Ô$ s"@{·²¬ úCÚìÞ(ždü€(äÁàâ«“m“mä“n­îJƒ«ÖŸð`”uú5Ü=*F 4 ¿Á_Ê6 ôCò6ïŠ/ĦÞãü ò0וCØû*†ír¨zyeXSó,TŸê(C؍ .sY(Ú±²¦@•Â/#-½íö± Ip`-¿ÔxŒCDÍÿ—„?Õ·E)›ynœçJêeÕIk«”o Ԅµø*©+U»ÐÝÐ=¿Îµ‰‡©áj<ÛcU…“tT{eC ¥(ÉqòC,­²¥¸Ì²°dÉrjªÊ gB2¸Y,v¡œ|6ÅøÜiՃà6º~€[·i¹Í‡Ê{d ¥ePâzpM"õ<ѽÜ@ >äè:àöJÄ!¡<Ôâu'Î-ߗ>ÝûÍÀz0€+[iû”gSqµÕ›|oxk9#šõ‡FR’Š85cÈö ƒþ†­J|E«+äŠu'‘díÂ'̚b¶WZVufãÂÂì‚Æe/.Èñ³îàJ.kÊÿðœ~VÁ(¹kø$“à9§ðû@™>ú¡„&§ Â÷ Ý\ðOÝØ¼U Z)ê“,öë:[øX[EoÝÀÕå–é¼ÙFÚ¶ õ¹{ÈCŽß˜|¾1VI–Á < ðãڗÞì‚ÁAâöËÐsnsÆ4•Cœëb]±ú.[ò@ ¿“_&ùbÎú:ÊMòeŒú±Îà܆Öìî¶:ÊMז3£Ž²€uEŒge&þÉ L$u”›À7ŒYº€zhêø7ÛÆ¸€~гo:5ܛæ#­ ގ4¦T~:ÒMÂ&Ô8poÚÆïàß%œ›ÕƸ€ìF§&øwƒ°A¤àîŃzq&ýÔisPýœjpoYĀN2ÒMò1©@ ¾‹G‘œjfΎP ×C>Û· By Ëq×âO<üa,½tìõ,̌Ÿœª57ÝF8€~€³?©~pÝ$*#+àÞ2ÂMéc€z8Çpož|_÷ foɋ ÚÁë1ºíǚdì &=õՂkÁYdhƒš 3?üÍØÿà¹î|f>^Øî†/‰tû4Kh¾2/üåÚgÜ?››>ÿË@‹ë+ ݯ? E§À]û%0+ðV|Þ¶&Ӏ»ïb]ó»á(ßÿâçwÒ +dô¢“(JXÁÙíSDÀF¸`i"=›+³Ë’Ë2R,4%Ž^M¾ +ôÆpÙ^ÐG¡¥¬£kæÑ“k«*Þt&5g1™3 Éc5´<åF–b±÷àæ‰ÐyNãËJǸҸSr^[FךŠÞq©¸qå{36À¼J:_ÎvíÛ÷a¢tTçzq*`7qÒϕ (ӝâ§o]qÖצï¼gà—=ýJ¾‰ü[€vÙ7é…!k—èZ7ÂßEÀ³ßÝtd·Ã !@t4ÐÂïÀK¹Ö`÷§X “÷›Ò ù ÔY®ì¶Aƒx4':7J’àKšëJ‚ôƃ-—ÊŠÞnt†U¼#$^ó³ ö7¤ïw\a%† 7ëð“ÎØá&Oé ÕÈm‘¨B†þ/¼Žöº ËåS¸lèNʁXÞÏ©°ýxìhwZ†‚ö:ÂÇgTg=jÆý[âÝ6¼þ®(Ò:°·À>ô²–ªôÛ`Œ¼P[¯­dx:›Œ‘ôrGÐÉ<ƒù¸«&J2äÓ¾ÄLþõ@×]Ä¡%__³›c=¯S=‹Ö ۖ„<ê9Ú\(x ½±žÛÖObôxQýˆôƒŠí°¤ŠÅ¡ö.Íûº}öÍwB÷þêå5ÕÐ)©º€áFÝ5ªR“ºø‰_U®ðÍ AâjgÜw\¼b©=ÎNðï'ÜÿóÊ\ïŐ3֚çÀª†í„x0´Ös&íô\º?ú‘þæüÛÒ?Ø`Ûª{.«_\iù¡iG҄>sf¢IÝèæ¾²9©Œ“.Àͯž¹Ñ1ç €Åt—ѰJÛE¾„xÐ6س‚ˆ8nTô.„ºÌàbW˜0`ŽZ53b\5Ã/ÁÉÞxc{ê%èÐÎÃbës±†{ ð @@Ìí‡-hðYªÛ›'êA¨€á߁oš ëpÙ šÅ¶«l¯7êg«M’üÔò^hÙ.oÔ÷þe¼ØÀês›a@±™ sd°Éd¡{³wˆz`L¬re‰äÏ dÕ¾ äÍtÞØ›Zúð eÊ D#ånɞ®pâ*͎Ó@ÎP>ɕÎ=[Üߪ©ž—g Ùq±ÖƒöÔKØH­ïõÈü +£w¢ %bŠù¼5-ÑlºýTÜd|GäØFáÊËô!һݕ àSENÊtûD7–ð7rÑÆó;~p¨Œ´0?MÜÖ¹Ø×Þáš]ò0&7vžÅÏÂŽlìwnÖáéæ’)Ä׋¸åâS游AzNtÄqæð:€ÉSýÔÀóÁŽyË»ñÄ)Còk'ìóØ¿˜:¸ à ´äW±?crf ˜„!;£­ÜG×2}‹¢$²dä‰,’=}¦éã>Ӝ!J k*ÈBm$éD1T zKtÃ?ž\¸ÜÉv™0ïˆñW—$®ñ¹£úÒ8N43Ћ(ÝWßVžâ§½WªÏÿt@³÷ïVcäW3¾™œyÝ& 'yA´M‰Î!ÁKºê¾ÆÑ+«h›»YxÁ²*H÷ö‚CïBöñp^i^6 ïŒ)ÏøÂàÎ}!|`+5Ø'ëÏ­63\L1oÀöÝÆ$1yÊãmƒ§4~èðF™aý[é÷rÁdRÁ.>°K8ÙúCh@o6G‚ˆÁ ˜~07ƒ8pwm߀²:Ë{ÚÂÊÂ;Âé¡!–×@ÿ»öö΋ö#óÛ4è¾`°TðiÑyr¢ÿ¸i á)6߂ï ÷ô^Ûëg\–9$FK·°õH°ñT¢|9þY÷[¡¿9=~…˜pԔÚA‚‹™'³þé@Á]ìp¼ðDÆ bWí–Pát”µ{U$P¨ò;¦M|JꇘZ”=½CP¹íQ6ý%›¬æµŠe¢¥oPí„XÊMlSµ8€[qï3’J«d•oemÚHuŠ2×íÆ(béÁ;I¶©©ó دýà ÈFoÃÙ¼¢nÝÓ6ýr[T6}—šeLÄÕp9@°µƒ†ïwpg¦MÝÏèÜïg§Ë`7AŠê_á¦o|¼Nk×7c-w’Uµ³¹»Ïšýª›°Ñqm¶Ê™¬LOŸ–~$® »±V ßÈì‘tl¸n¾y0[‘ÀPh†ï"÷ˆoś~¥H8£o4QÅ«!07ãè#6Yw,ñoÇÐ?BX_ÇháHÀtÖ{úí™ÑϬ40„Pƒp¬4R†¡àT= M@_X¢²mð²¶n´< eÜÚ¸\Ýhlô€Áen6¨ú:§Pž®AÁl§2èxÅ7¿Ùì?V? cûª›JXU7ú퇔Bu¬©_]°ùâÂú ë´Ls‡ôXì?Ïܧ°÷”6[]°í¶Ã»mÏaÜ…ÅþTËÇÇ·P5ûX3È»°’+ߥVoãÝÑëúßPßKÇ$ä-žÜè—Y¨”×­aIGƈgÈR“ÏÊ ÚGöT(ª­‰YoÙG oVãì¼dlÞ,z;Ñà 9=C ΀¼ù7ˆGÐøE-—¨ÍáˆÙ‰éZ‡ ²>`c¥`†DøÅ2n½¦n°2YÇ£ÀªN8\ùXޝDǤ–±ájŠgpG·L¸…ÑÜˤ¼>Õ6<õ/½Ù–äƒG@…~X,™ùµ)<¼’hÞ¤½/2‡[¦½ŸÒƒY‡Ú¥¥«Ø÷ +½ƒÚßw^ï…SópUÕíä°¿F +º½š)Ђì+ߜ§òײHïŒFl? óÑê'2ÂòÁÚ7;±‚’>z˜t@ƒ_|Œ%ì²­æÐõ°Yª¾"èÈ:KÛM|uz[ÐÏsÕFºg è~Òa*‘mÀiŸz… +>åi ¤utL÷‹ÛwsDùÔh™âÓyNæÊ‰•Þ/;4Oxj'|4›kŸÛÚÁ¥Dà Y•w¬Îàl¼-gì@¹Ø?¥ç`àVie°xBÖzxuŸíÀºØ80·;ì S¢n¶~Ïnœ-­¹0PýaõçˆÇóÒH ÿM€[ã¸ÐûH;É÷ å0æAù[PÞëwzEø É{w‘·Î[¡}¾Æÿ޾öм·Û_5æ÷ýiÐ>O%^úë4w;µ·*ã.±å×0øévŸç™vOÓݝáºK°õ®×{þíšSSc’ýŒÌ¼{<ߗuÞ?Ôgö¨ó+!ÃGÇÕµ…6caÊÐ}ÞFYg£ö?kg£ÝžCz<Ñ˽ð”ØpÚfîÏ"žÀù?ûOÙöðïÿs!ÝTݪ~Ÿ×Œìµ·~+Çv”·v¬ÿ™²Åüpß5»“uá¿Äù¨xIçyܗ—ÃŒÄIã˜0emÌñ©2^.¨Ñ Ï*gž·2g˜¿6g¤³Øš!µúsDâ—Çòÿ /gùi{/–—ŸkKïˆîáÝ/žã{/aÇö¯¸¥ý©€éMϖµoKð]——¶þ3å¥íÛí~Çˈ‡§Þý/CˇË微Ɨ¨·ð¹¼!à?è?+mð>ý_ѲKÀx¡bó^Ӓ‚?±òß~-ì¦úìôü=¯³CË|Oéô•ÆXx¿y£DÑ­÷û_¿H¡µÿ~—ÇÄþŸ-ïxÛz_câþýŽCÅÿä¥ñÌñÑ1Ñ?§À~žÆ—¨áûo°~÷ý·åbc¸~/þ?-ó þ^Ææ—®‘±õÓ¹A¼ØRû҇ž?Àþ.+‡KÕþz_®‘´Úÿ—êסKå%d±¾÷¶ü\SßÓKçqßÅKï‘(Rùk#ï{ã­ö½ú)|/3cè?¨¶ñ«^‡‹ùIޗ¤÷¶¿Â5—Ëâþ£á¥÷Ȕ)köþ[¿“åþÒޗ¾ïé}åB¾5/·÷Žý¯ñò_ÅKõkÐ¥üoñì8ž[þ:^z4¿fð¡-þHԗÔÂn!¯|ò¿‹ö¯”Šk#ð~ÿ‹åþ`Es¤ô“ðŸÆ~ÇáßÜu¼oÀ¾†×òèú‡´ÈWþUó}sêë/ 7§{Sy—¦6=y¾:òÆúO¾›çï©7\Ë‘Ñäó9Í£óè„ü9¼›¾›eôÆïË}óÆøÃ°7À¿Rlžg!Ér®¼ŸîO÷'ûÿNžÿg5A€-73] ®†Xlìî†{CŸÐ¨£–£˜£™££™¶£>ŽªŽ®F‘ïI-¤˜ÒLé't€î{m!úJ­%^‘E#Ý$µ$Å$Í$í$õ$ù†®®‘E+Ý/¥l]¬{¢•qtRªnŠTÔ>nÀûb=Û·OvuÑ,Öº^@‹†èiXw‘îÉuÈy"¾Ñgè»Z-ŽŠš‹OE©¢c¡i¡OfµC`ó^ôOº%Ú%éX<}N‹]¢ØhšèåtrÚ9ΎwG=£QF÷FûFº}- +:j==¦]G°£¨Cl®v·ŸÒ>Ò.¤_I H’>‘&¦“\à`Ãk/´«©WÒÂÒ°¥¥(ßí·ùLF_£ªQŒ3Àéú5î>¥=³ÜŽØÍøUxîþS)áy¸¸>Þ¥éŽÓ¢¯îÚÜ yþΧW‰ä=©Ê…Ë—ÅùÕE‰Í«šàuÒ«ø˜lq_셂ô7qçÿ­)‡·Fàqß8‰L0‹eerÏFPF¸{>þWÝ}´÷™‡OÞ¼ÝvéL0¸!{ewM$¦/Èl¬Fm4Ôh¤ +‚Øç·hð\ÂGP£|É!¶ m¤8:¡Ê¯1†Žñ,;ÊEÚÑzCùŠCLa@’#¸Š[Ò1¡;Â5y&Û›Šâ#’yÿ…äÓ˵=‹£‹Ö† !¯¿ÒHLšÑG£4áÙà“Ö:i¢O쏉zL\rëÓÕ KTI–¨òïCř%)O&Ø4ç¤ (’Hê ݟ˜³«Îsœƒ+Ü<]BZ Fòúž³òb¬Ú6à…à§hÚð$™™ZÖXµoZó`>öí¼}ƜxÓtºä›l7S‘—œ²mƒÑÛJ4L>i_©-ÜJmLGŸ¾X¸Çj„Í%sÇ1Mm®ÀEWJáë×CßOÃ1¤®=ÅÌõ#I\§EÎÐϐGfþ”Í%p9‘ºç;G”-®‰k@ !h90Ï·F’s/óÀ‚ÊO„ +ñ‡è ž°†ß$ݑ`t[äÛ4XÞß$i)]1`z*č%ºT°?j±à.v8Ú±#ÝâŒ,qX‹pY€‰3GA£÷S‹¤Ìò‚{8”æö‘ûp,…JU;°Ny .=‡Ï![ ¿j%p'‡x­©ÏÇ(MÏ aŽåÀ$®‹p玊1[º¡Ð2MOÒ*t'3?;Yò¹¶>•ÿþŽm•ÃÛÚÉ<7ðÚÉ<7絒xjëY'†sk$ü)wÝíY'†®µ’eoÒ;"É0÷»KY'•ÂþKY'†NÖIìWpmdžÕ¬“îW\ZÉ?b#‘k$ø¨:X@é÷‘@éʼ9@é¼W tý8BOp¥ÊM³ÅrNmãý(=¤=šNžžã¹ ¥OÜk ­ Ú@M:²ð81/¡ã xËPôÓ¾yûô¿O^€·ñ0Ö¨ q5ã -ûl5ªßêa¿¶€·Õ;@[û8B@[„ åӌ•¤€·ò0„€·Ñ+ÂÂ9@[âÔÿRÜÆ¹v‡¦×Ø yÛ«ŽY×ýMì*U²’òÕ¹(êÿ0ùÒw£`^ÚÙ 5~yĐ!ùØ[D}ÿЁ|nȹ~"oň¶@ýh‹TÞz"É7“ˆ²@ô‘P#l¢7è¸(g¹eֈ¶‹‘çû9uÎ#`R¯i FÀkXÉ7»€P¹$ø4ø;TÞÉý,—^ÿÁ@÷Éä´oü$Ûtòo¤ÿnÊ'”|Çô#a é Fê¡ åŸíÐ#w·ôv\µÿýH¼ô"H¹XC FÂVèNÌBpÐ#`Oi Fåa +õŽrÊÕ7€„ã FÖBX Fþþ ß}ƒ2oñ¿©Nøâ FûÜ(½. ŒçLs€„ï«ÞsÆ@õ8?ï FÀ +bí#kp|$Þôa8ž!9ÝÊoO‚÷Ð#acñ?™7Ò୐#a=ß© FÀO˜ìP#a ÖÖ¨¸kÏûÐ#s0f@û|„ßëÁ’lzjÑ63WjeŠl„,¹óËèÀ×ä$hºu$÷8 Š?_çò¦@—æp.Ð%à»ãp/! r/í¹T%ùîWß@—žHð† ûD -v/ÁàmÐ%û|HøØ KÆo³˜ ƒ ëðð  KÀºªÐêúøy^U§d€—X“òÌ„¹`½Ëû„¸xöÞþd¸Ç4lEÿ‚/ñoèïʲ¾úÿj/îïöt_Ûôw~ÎßÓ¢þ¡`¦œQ,@g¢5ñ ã€5¿ÿ¹_³_d/ñWÙ KûÕÿ¿½v/ý­ßÿÐ%ÿgú%àþ|$ }²@—øWÛ$ ~Šûd/ìï¿ +¾uýô |¦ëùP%áÎéð%úÈ+$ ق²@—ýX+$ ~n á@—ÎÕ|hþ^«þHýw%_ÿ x#€íP%÷¸$ z¨$ x3ßò Kè -%íà?ȁ/iÁ@—á`,%ïðHõ0ã@—ÑÞíPò¤r‚é  Ášœ"אý KÀ +ÉN½våNà7(x«Ý²¾ +÷j/ï¯cDÀ›ÊÓ@—„ïa¦/õ"/ò vßVTNu²¿í.µØ<Ék>Ísƒç9Ø<âävϖ³Ê%¬Âw²Üì¹ÖÁñ+¸(ýiöˆýÛ´ Îÿj¿âyÇnÐvòÖi KrßÀkyîùû?ÍÏÏòyúÿûsõºçÿ‡H'ʘ°ˆþNvo(h +sòMK~¹ )¬óNaZ‹ë¡­;ù9Ù´J]Ä×ó·ŸèçfêÍ_æ+Áŝ}éÖ¿kyþŽvnãoÿ';7q¯þNvnã_üœìÝÆÿ각Ë>gëŽs™¯¹œýyÙ´`DÏ@n¶¦€ã·Ã@¤^ØÝy#cõ8+žvnâ—Ì`îyÙ»Š^º睛¸¥úèKžvnâ—ÎÂÜó³w¾睛¸¥õ×<ìÝÅ/ŸÂ\ó³w¾>睛¸¥çÃÜó³w¿µˆ¹çfî){L-Ï;7qKêð·<ìÝÅ/Ñá®yÙ»Š_+‡¹çfî){Û žvnâ—éØ\ó³Ëþ&睛ø¾_ñW<ìßÅòÿйçfþ/—ü]Ï;7ñ|¿ã+à,ßgý½eÑ-^¶ó/ŸD¦,Íñ×bo¤ýQºôùÿµ7ʞ˜Ù:úôp^ØÚ>¨ÛßϛÊ;wåð×}7À¿@m«µŒ´>*¿é‰2þO5ÉþäÿryÏ¿çç>׀‰ „yƹ—!Êä tQÝ·vvŸ8C1\%Î,hšQ5¢•¢#ôu¢#ŽípՀÛÿÔyö„÷áŽEÚ¸ç XèÚhÓç j´un9À¡TùúIWìhs°ió†4ԚwዮpUÔ Šº-/—E¥¶è´¯k‹J}ƒlξÉ]¹« ƒitin‚ ¶«»«îÈKö×w‹ëÄ¿5×; +º‰}- +(ú+¶ÿ—Ù•Á5âsœ!Îoöÿ{è^â4Ð¸ÞÆ{Ï¥÷s›ê½„;Ó®ô¢¯¯µ?Õÿŏí1È»×öo_ýµfûgú÷9£Î³ïúš×år‹›œ›Ú¡åí½ãýG\c—_hrãõÎõß@r}væÀ©1Ë£êmŽ]m±7_ðZ³vçÙ +kFåÔW!Å;×TBPÖ`13Èç»ýc;ÁTˆO^”›‹GæTjÅ+P¦Ðž¯ÿh@WÜ92d²+*5*N„a¤‹|„=:Š•ñ†üèEžcBš.}@ˆ½›OÉñªYÏÊ«(ÚŸ•8¤ Ž‚VìbôciúŠw‡ Õ6OL¡Ÿ*G°¬ÒvÕæ×L´ iƒ6ëüf‰Ï?ɦX×éý*Ö±Á‘•ŒÚéLÂ9–øÏ[~åæ’» u_âè¸Áëf%m“ñT¦ÍË7k +ᛖ´n³¹ß õ[ædùãJSûwìҔçÈ2,þùÓ7¥Kœ6.gØN=¼|³Û·ÒbPޛ;ĦÄNùd؉ß +±ì.À½òÎì Ùá^,ðª¬ðªìð§_¨Qôehõ÷õý~M_«_×W_×vyuÖìOëÿàÉ»”:øƒ¢†oŸÐñØ*n\ÎlÅû/ôB?êõOwõó^fEáâüsÐ|õ½W¦+–(«P²ÓÞˁúّܰwvj@"r-óúؘ0¹„}íÅ÷uñâr óÿŒ?ÎH՞YïˆÃüê9àÎ/~^êŸ_awÌõç­^£ ãͤ€0anáïò«Ðÿ‡3?”º&>»€dnba ݨ#.?^òÏbãˆx»¡ŸÙi¬x©.@I;-î‰ LÉÀÜlÌé¾Þ¸+ieœÂÞy͌Ôñe‚…f¡[ý-ù×¹ìUõD؋ïT†ÊkÚD"!҂ã®mí)hM/#³¡[‰“VÉ^͚ÖxMð£Y5øˆUS½~튻¿%»a å|ÈlHZœ¤£¢¬Ò!X",`0½BÜïV‰ÏåM< ¿–RRóP# ô Sã[³B´³Ê^áfÉÆl¦·F*÷ôž}ù[†çu/)V­yéÔ+ÉY†&%+ç¸W¤C?#Ö$”{Fó ß¯DÕC—Mˆ8l̤÷0rÜèB£÷\¥JÜï€F$O=šz»*œ»¡Ôµòs”§-,uMօ›Õæ}Iؗ[oDü=aejfèèKŒÄ³¾ÂÍòƒ€{9­Ð|8C5™y;s›uˆt`lvM¿X¦{4¨¶B©ÞÈUYl…anxY®«Ò{!¾/›‰Cd2’D7Ô`)d ³04dÕpcööRƒ¬m1 +Jl³²9Ámsÿ3ÒWò2AÊù{ùjWâ5E‰“ðZ­¡¤0^M¿K°k¸‘}’m("ØèQ%m"¸˜ÐšÎ ›#:Ú2\$ѶîNCÈ[Ø`Dtϓ@ fxë‘ãò&®›Ôh~Ê¢¡‡àˆH0¿dréW”À­‡È<𲨠zTšÖu‡„èÏb—º¹ ÔÝ +Ç ìêN¡‘ toš+(M!¬›¿ k |ö†wÅ3‡IÈm‚c”…¯©Ç%ˆ…’Î{ªg0iDør&ø5¯:€± 쉘ÑÉÈ–X´ZÏv,‡±¿UÊ Q] ºÈ#9BÏÆD"9/«~dàN°á(”…Û!¡?rÖÒMù• R<³ŠäÐx¦µîô‘çšJif•'n)ùwoJQVìc¨'ÝÑ:ö~ÉE˜Ö0Pâ–ÆsMr«tÂL…íý^؝ÆËêÞÿ™Ì‹7Q Æ®C·Õ˜X‹D/ƒEé3¢ÓޟÑÏÑOèçç"÷vAÄΈÃÙ‹7œn³6D}àêòŒMRé¼ +SDÿVCށöѯ^Y8:üÒ1dykò‹ÆÁîQ/ã5¦®½)H¿çFê&ôæbü!à[²î<"‹ú•ö =ÇÃ8Ï»gþ§e®ÌÞÄÑþvލû™9{·Lߤæs߇Èèõ™|ßÏÛ²ì0»_v*ªO²ú5»†ñØݎ™£¼0o9(ë³p[wYúç¦=öa]_×Ì+´º¾ÿOCÖbl¾áÙ»´ªxÞs:]Éé狙ƒÌ+þ²ç£ÌÇæ,e÷o‹L§˜WúƒÊýFa_êƒmhŒ\ôt\DŒà¤£(< »_©ß)¬T¡ÚC#7_‰=ƒ™Ó›V—]¼ ]êgU—åWÁHÇ®6Êכ®Ø«&Äfñ½¸LxHe„.•ˆ`zxLBüÚǘP#ì0¥¶æéÔmMò×'Õ匔¬È¾¯P‘é?ÖV d!sÎeY1YÞÒ“#˶ã„ÅÕ÷ìÐ5fJÌpamÁnºwÛCªH§ÎI &A ³ÊʹÐìkô?]]¡û¢Ðý5v‡ ùY,^E¤]²$.²ºc"Í'1íŽù¨di/¬»:ÞlsºazIí´arýç3†ØU—ÐíäÑxï`Y.mÌ¥YrùúܜÉè]mVÈÔ&(~˜Ùd‹|ª´]óÙüÿlVeʙ:2ô  $šSìñT!ý¥Co¨`r¸0#àߤG”B"'HФfBªo¨—Ät\sÄÞF{3%ÊHÐû9i½þ>Hn²ê  +é_$•N†žB€­ïÙI; +*ÔÐ^A†nó†C†N‚oT-ˆCÍ@-ñÛ®¡Y@M¯|hŸ¨i.ÉV妆ŽD3CT€.ÎNVM²[J3m×§[êvëäq>ÊÜï–I,ÜZvh:›¬;§V HC]!€Œ§ÍŽú2sús5{¡ËÛvµh†sØY’ÐóÒuàÛÓg?Ll§œÜ. ÎeÕ )&XMlø`‰Ü±bƒÍ„@v¨&Y€qÓõØè0»eZ–ÊõTµ¨ž¾¸–LÝi +F’FÒ{2¡ô¤’l¡â6‡<ñƒ;ÉéÑ §j‡µ3xCÝøv£æ®ä&êˆyà/*°jsC/1Ë{üd’ÚhÊ[!®ë®í²8h¨¼„6õîÖ4—<É9ÂÅL2'X©Œ#Ad &d™ ’"€EAQ’A€‹HÈ,ÉÃ*4h•«W»¶Ý^õª·µdj‘ @¶ÕmzÕ[kÈJÔVª ûÿ÷ï¾ç30 +­{{è÷ÍÝÛçww|ßG}­ô÷ø-´»[,²ËdjÙ:*úËL˜»C¢=@ ÔàC&þ·˜³Ÿ-jŸq+Ƥq͖ÄTúäöζìúÊ©ýÂϜi†ë=k ˜M^>º>…ؾ·"ˆ‡²ªxèY—B4ܞ,/ @½Š5›ñ£-bAáŽAU0¯»¡#@ñKøÐ¾­ PuóæS‡‘¾~^*t€ Âú8fXõ1OŠ}†ÙcªîÉ?ãÉøƒ*tn,‰Á0û¿ûш}é>øñ¼½(‡ß !÷Èã(áSK(LòLcô÷:՜(h”˜éíÉk§“a! ­ ›é(x‹ZþÆdçÖ+hýb›©ž#=lñq% _yˆYÂvŠë¾u8“Áõw¿¯M*åY²çCª»Dy[!qyk–Y³²ZÐè(ZòíåÇl+]DRç¢Qˆ4“èÕÇÐè—M†Ìº§ûåUÈEÆ¥þ-ª>Õ>ݐå7ao9|ûéµïb¢ï‘rô„Ñ.¦øÍ?܌:5–1ÀúóÁÐ,« u²ïÍÔR¿¥ä:’\ö‹N{£ÄžÔt‘Ü÷5wŠç¢óÐÿÝÏm¬²M¹î›–Œ‹¬«ðóë6æ ÒÇ}úó™Zö)RÞ}f´ÁQE¥:€ói¿/ª‘ýˆWB‰vì¡è䯿b“5ägÃïJ7®ôhA<4)%,‹O¦Jˆ çǓ}èWê_}l2¾{†V¿ùՖ •ã´ÁîêÛøµL b ;u"ivõbUÍòssÌu½FhyŽÂq¼ÇÖ]f3'˜‚·`óøÓÌD˜&瓘Ìcö¦87x¼,;ywÉ˰G—1*jü½'Fyp£n'.Áž]ݗ—<‰$ýŽ˜…_X ¿¾œ‹i)gmݧɯ%3ök‡ûéâD.!/éĒÎ헕„¿è‚³”aIˆ³‚ˆS@xÝÑø™ñ’B¯Q=)¬î¸}k7 R±cG^7z±Ï˜h˜…RcX·ŒÅ©XŽ® +ijaP!k“Q›rPV%–‡' + qUbà–úR™ÑÅâ›=?Tˆâú%_<²—q©»­³Â£ö šu½Ïw¸ÎM&äξºNS«O›Wû¼|”{ö{˦H£ò†¬¯]$•sÃêhá•#?û¹áÁyyN›ÁžÉßÀÁäåë&Qý™ Œ¨’R¯v䤮/ˆÂÌV]ÑýÁV]‘ýÁ_SIËÁ±{j[Ã>#ÜbuOTK*ˆÕ¸˜J#󉅪]PQ'Xߪ‡˜ÒÁuJ&¢&$+p$”ÀÚÌêÍ*l¿ØÎ,ÚUC’šgîà1è3â¥M7÷)Oƒi¯8 ŠLù¼Y2ðÂ1ÕøB@‘Ê}Ãã +<\ÚÍUÐÏ6x¡?æð¤öÙOïU#ÀÔæòÊx™\òSÆ]:÷_² À¼¢»@5ðàJ¾‘¯ëçRrǜ"÷írb8¾ûƒ`¶€lèáP5jùZÞ¨›!“³ÛI6p>]¯T³Q +Ùç #ö»È§”I´ÞZ/ºIЉ“tZèè)ccö¤ÈßÁÀ‡”Á@‡ÔL¦ûE)& CŸ—3˜²°¶¿škb 'gŠ +2Dr²‡w+•j€Ã÷†©,C‚£ÕÆà¨V¡þr6?‡Tà@ rµ%™OK«Y­Jÿ#ÇbÚÓåqõ…"'9«ZéBëêbÿÚQÏ.֗XÒzԜ¬0õöPÐ+š,†3îî'fü*b!:?°8¥P‚>‚> AÍ#þ!&›óWbÿµÓ®Ï½ï˜üqxIQ¨Å+€&ӀœŒoçÍ!±üƁhKß<‚1œ'I±Þ³Ä-6”÷:£ÛUÙò¢¬ûýSqV/†Y¼ÿe¬?>Þʋ²S4yúM@æ{á+_§§ ¡ì‡”Ñ–6Ìź’dij­%u1.LÀU—^¦mh©ÓªdôbcEÙØN#ô‘i¬˜’©­Pl +–³À’ïß"ñ݇ì×ìyä¤oyÀ­sçt XªËFøÔò§Â/®FpÊ1ûä^qòîâ>]¥<¹áåÃC»Ê•ˆü°iÓRO/1œ?&£W)BYžò2‡|ÀSV˝RT^9–ùÔ:oBQÖlîö8Ji¡x( Ö¢QI¹RÏWüÓV6ˆL3×ÛfîdDƒ†«4·Ê¯Ä$'Î߃6­ ¸#u/‡î‘%ò^IÉ6W/sÏ#{ç46a9ãížñ­…_‡b\7Oó›ÛW7Ügv—p¬C·j9­½žXôV£„µVò2rg´§½ëäóaÑ}ðžÑŒZÉ$¬äу+:H*Po¯P©2×$nuîæ–nÝ⌼Íý5LAjf–î¿HDZmÍÅÝá,ŸE~X]Ӓº=¥¯Âèöl¦ú’œ‡…/¤ê I)~>¤C3ö»Õ´y”­LQŠâœÏF *74<»/øT,«0¡´&ÔάéŽÚ‚ù"™ÖO›]Ù7M<©Ô7À¨<ÛÔîbó W&©Ž¥@»–îÆ^°‰#4ƒê"ðqXyÃaü>æ/Š’ñ—ûtrϨ[ýº9=oÉèäö=Bß_G'­êÿßG&Ý䝎¨±¢Ý ÃÖ)àëË0&G¢ót!ºN9È*EU"Âu F<Ý=«‰ûkšùÉwÔ´u½½d}" Ï\'ŒÃօMCr+hL…Ⱥº ±Ul¡d‚žv~¯¤&¡@|Æa (GþsnÍ>¥)yh]? õ4]ñߕwç•Òó]è†X)[Ìöö©˜8èRôIX&ÑlÙí6©!ĒOµ–Yڎ? ñV´0r¥àÞg¨lÅô½Vs´¬yâÖ:xÞh±bÚAç^žÙ­Ë £Jd¼õè\Ôúzл^çx)0Úãbò%8…`¹s(øš¡Œ'béŸÿwxNEÏÿ’w{hÖ¦ªZÆñž S†½?@‚ÂsIÏ$ ÙüÙ7ó·ÊÉSBw”6ˆÅ„%7‘Ž—š"ì¢~`T{Mo’;øö”ï²¥¼#Tw®³ +¦Išþ!ðôÁ¸Ù雦¬bxW`3ñòEŒ§¿bð‡Å枕->Ûj\» ‰ž7s¿Ïþ?l/ „,¨«EѹcrëE[ÉØ¶m¹-A$â«ÝYݏû>lc“g–[M‰$þ-I!9¤_jE¸»´óŸN_ˆ—lÀ>Dz5—Ë76\ÌRÐVOE.¸ús›­õÀ©±¼#V;YgBޙÅ]08å)½;…@‰¤;¶ÚŒX©GN?æLI´Ç‡×#0D,ûٍºÃd%òÃmïdÇ.UÖ·§ =BÒ×DíÆJÐ)N°õÇeº§OÚØ¡òháåQ±ßsÿ +Rd–¤v‡Cé÷?‹‘£b†¥uKŸjOÿ*!ÂWÓÃ]˜¹þýÂF#l,vAXÀÙdyƒ€DröûP•N‹&ö8rÙU’ž¨F4‹®¿ %CÖÞQNͦÕ"/*rzF"1µNÆIEÇ)7¶½®:b?ß ý~ Gaœ× +¸,÷mA㉴Aƒø‡ÉGó_” +Å:æÇ&æËû‘üüÜÊ?žf0¤ś2~Rh¥c€>žU©Ž)e§( pãÿéÊ[WV©£šµ"QØ~™ÂL(øn¼¼¢ÎSôEú"~xÝs»-AR£?FÇDK&õ©ýKFVìðS/ˆyújÔk ïÃÓ1ÌqêÒ÷:MʌÀ„ +ڙfƒ÷£[”n'd?ÐõIoXÛX3†wb ¦Á—.ì}¹ü?¾Õð+.Фʪ¦ºÿi ©ñ- õ †±¹°Ô_SyÄ«“Á´¤ÒGDØ ÓUÈ©0¸T?"á¯R>¾$iØ­)X¹=A¨9Ìë.êÁ¶Ð¾;ì5§>+¦I$&ËÌ53ӔoíìVÿêk÷,Öüfîj¶c`ªBðßKçZ¸W·9Y(6yx.«gÒ&šM&4×·Š=`9òR›pkïJdØ(8c”«ÀìÉ9ݎ 'œ‚øŒ¡@án¿óaùU¡7ü} .©ëèЗz›²VrEÞ1dœðKAâ<)çE•#îÓ)0Ï ZyþäSc¥ÿ»cݤ7M[x$„§ú,‘zr¶j̕@œ¼Õ¹‚¤ˆuò5ŒûŸ_¿ 7· +àK°ñÔÞðýïìހx\ݳÿ,3B»|Ig\Ø¬Œn­ü3¦?7„5ïm?ý¶|évË lõØxŠÑË¢<¯DYðJ›js¥®ˆ€_xHò€6[·½‰l Ã3`q|%3Ü¿û³ÜÒ7Ó+lDƒ ìVa~Edšö±‰jÞóâPà÷…×;m{$äê›I”%z# -ŽF3É%A7øM5‘þ¼*ëÿ~D·ìö¥Þ}—èÓ)M½cË¥Çvà˜TA®èk´1V<ôEÏéDM²F)y?›‚jwe +„^‘$¹_ÝŠYÎEd… ¯d~ޘïƒÐ8Í,”Gœ°èx\…ÚwhW_@˜ê ¾…ž™Fɢܙ6ø!"Km6ù‡MN-˜- ¼.#a~:ß\ÂýÞ@rªõ6°ñÎ +rˆ}ݦ:¹ íÑ ´”©£c£:®èìOŸ¥cØ +a>}j>!ðÑÎy.ë ³ˆ©ù¿§Y»c¾%0«¥¬ŒÑÁÕ6šÿõPépô<à ç&?M+DœsÝ*Ä´¤q­µz•Žz^—¥eÅiÃFöý+qv0ˆt,Ö\S»Õ+XqgØð‰S/¿‡z›ýj3nʒ‰bV½(™ÓêÞÙ<?O¦ºþÁ8Í20â¸@õaªV³F³eÝ87Øù"ïtjû“»Ü"*µ¦iriш*št8Ä(ERÔGÃÔã^¹/ŀqϨGˆõñ×(Æ¢=óyéÓí*®!…¨GW6¬9«N zÓÁŇ %U‡°áSö]»M½L:O"{uWо‡?ã¡Ï2ÚrwÑÔ¼}\¯ª ´íx"ȎÐǒ°4Ïoª±Uü!iïõ}>Ø)]lò6«˜}¶xwaé­íÓS´Æq§ÚcÈIWüƒƒ½ 'Éã _Õ Ÿ«˜éˆU}JW§õL&¾; j:$ í½WK_òCã«Âïɛ ¢«è¦ö¨`²\† HÛ]F蝓!%äÉèߦZ…ݧ¢.Ê(C îÑó‹Ëä5s ¨¯ó›xۊ»è»'œ ²CŸ²Y …æko#»Ÿž!%Uxƒ#ëAU؂ܐ¦gní.óæ€öÊcæ¶ô,lÑ«çn˜qž­K¤¿Ð"¨Ó÷¤= ÷¤vOJ Åc(O"—ŽÒ_«øCª «½›À£)t§…fœ®¿„×I9=½«Ä¡êƒ®¾FS2§q;ÿС³Ü´å¯Þ¸q±> ßNâf{{¤•F…s•öÄiYe–Ïz:@)Äí×CÁ£^*둱ZOÖÇ ?ä¸ÏØ_ÞÞ^£M¹—¤Fûq¬+½hÛ쏪3ùˍÒ3$h_%Íæ·¦Øwy Q1tä‚K¾Ö[4¦t¿Ò‰-w“vcF½F·Éɋ7Ö®g>Úÿ…ÊKQ#û´ïü›WÞìFð{íýÅÚžñ"S‡£jxê*_Dùöð0adÑ l£²lýìg8gWKõ—‰:ycÿÍøÌ}íyÓT£‹ ™¬j]æ4XZÓ.ó%E…?Øv,/T“SSŽX•P˜âÂ> 5%*ßäìQÑ韬Ùˣ៬UɽE"³ï²ôgÒøe(J"Ҋ§ðavS(‹1ݦíWæU ’¬Ü”µÑlA›!X§ë‡NoàÐÙUÉ4 «l/¸CËR€íºJÌÚë¢ÂjSª W±€¬p {¥žÝ•?õΣ4{µç)XÙÆäœ¥¢‹ǤÜO +äž5¬9 ½ÍWñŽ†?$÷Æ\“Ñ,é]ØàUÉwðärX³“þY Ah/ÃâJ †È„÷}ÕoQŠ…uþˆ`¡å¿}-«:PK5­k1,%¦Ý]Ho¦}üáÞÝ SƒL_ O# †"<¨ìé`GjyoΣð¼Rj–Ò˜‹†Lvãs֔Ǜ+½¨ÝÖ<•.䯈ì<°$Òv}bTË +gaé&È©~*¥kpˆÓq‹¶,[«õéè*ST³ºIj4¾²ª¨·1þÇÎ?°ÒÊɀ÷‚zúC.²Èc©1iÑ'° CŸ˜l +²tsу™P<æsRÄCà¿óP9>²ìj-ÈO­ÐÐËV»FÁÓƒ†a™=»;"«]£J¯hÒ¨†š¾®O§{Ð6ÂD{Pä€ÖËtÏ¡£3µÀ)ãŸY©5¯Ma’Ðòfò¤î~ß Y g!_÷Ð)ߨØãQK~ðÅMÞséx_!5þC׿~W…¬D9n\iÖ`‚#8üïc*Œ"·‡„eçîoc†Þ +˜‘ཊD;_c&‘ª¾…U+n84 ý;$¿tgF_a¦•D™‚öãö'ÉéŒ?¤àRC×(×\ RÃ{1JÅ.=°í“×h×Úy‘'±#mŸÚ42°©omíÛ[n#QÒá}¹þ©ö¶Ï}e£¨¸èF‹KÙ\l‚—ØÀö}¶Û^°ˆžíß`j(YbŠYOnodW#ÄŸ½.m÷E>×ZZús±§ gŠöžß ÆùMÔ­z òŒsrðúA4Ûó9_áz!- ›nÝÏïoì3€%Õs^Ìö·ÎQ¯Ç6]eýaÓ.‹“oýpԁ?žNŠ÷Q]Nâ±s{0IgeÝOØà’sڕÉ^ÁRlsãä1}ûOZt}EuC€,ÞëÒ=VÔéyÿ@“©ü0ü“>è3ÈL©Ž?+§­íÉòÖ<ïœWßÝÚ[œùþ?DÐPÊF½ò݄G‹MžÎñoDk82žgL±)ÜYNjˆß¦·Å¾´XÝu܈ÝtMr×m#° Fä¤<9nDÊé¹R HkJ(7õ ó˜§T}1O¼&CïÁ.#OAóìåÞqörÉvÙËþ$o)Ґ1q¶r¶öãläFý†{9/Ó7³“®3Äps ‘vhÈ"5³@O-ÒÙ¬lÆÐP…W4 †¿Õ=âÔи<„ûÚ;¾À©µpetX;|Ðéµ !#¿DñËlƘÁìžOAŒ•v‚AO¯¾t|Fd‘ÀÔ)r³Zß +áSÅárøÁւ熐6@ÖH-ÐÜ1x-^ý +ÚúU½¯®ÏÀ~(/¹Å·!¡àÏ7µÑKR’×lF\\ ¾~ÃŒwcêªïË|e|:âøH;±v_ Нª2þîÅ*˜iÞbÖ"± +‹KWà#bâtL£lKÛkv랐-Ô]v_>dï€6äíúÂGû™;!šú$*¢?jåx‡r5bÜV®IÏîæDî0้ÜgOýž?ôÿu‡þϘ ¯l‡-ˆB•Àæßî9iNovÈÙœNXÈùÞt‚EÞ;xÈ7Fqh<½aY¤¬ z–‹ö"ROCp¾ÃBž9UFïəG‘KÎ0JÅ#n¹Ù²U0HÝAœßâQtëÄ¢ÊóQ(²Ò(²òhÀݑæÑ‘FEìJ)g$ <™¼›½HG·«,ÞRË7Mòå óHºcÛÒÎì:Ôè΃öÄLQö#ÝÒ¹<æR#SYØt’j¬)¨Ñýf)\cegϵ oÅ.䓑|¼J'`iˆh¹r³œ55ô{ Zÿ“õ“_–zZӔ²™5ÉΡ¬&Ê;_ñΩ¯Ôiѹðƒ_â(5ýbÄ^ +Wr`—¦¾{¡?ïÚç¯ôgKž½*åޕv.;9ù×¶ZÍüÍÿ<Ì]_¾F\πCÆÃ)®OC\îÞ½ùf"ªÚ¼}«­Ÿ;óó²~?;#ÜîBWÙ¾<ÊKt±¹Ù5¾ÌnvL— ®vORr/;&æsý¹Ù:p°R¹Àð†$1ùÝ¢ñ6;žÝ¾w?õî²µ+ð±Œ(’¡%.1„ÑێsØn¼|O&oôúY*Õ]Á\# °i%‘œ=Ù&<`‚Ö[ñ±BoÒª<ˆ°„ò£ÈÙô«5p/¿s¯m퇠m_n2€;~±ùÒµq¦PÚçJà^[OÄhcQ½ïÙj= /KóÍÞncǟ«äJ¿V7*üý¢ªŽLyáf’¡g‡LØ|¦ké›Ýå«ei‹¦ÏȏÓýZ»sG_Æ8É»ŒJÊT/dÛj®W´{‚½Å z'Ĭ‘¶K*±©J©÷4§-ËÎâ"‰¾1ñ«bÑM"þEðû†|ƒ‚}R¢‰=[W¦Ï¿–R²BŠÎðÿýÆ]<Ü\G&K ÕÎK~—ª)š.'¬[½~7};2.9[ǘ.)eL¬ßêÓnw¹ø"$›–ÆÁ~1&ç!ûxE¢Ÿ9 ò+ !@«Ú¢l˜fóÔ'tZŽ$qT”€MN9÷¨Ç@ŽÓÀc4[ð\y±¯Õž†ÄдP'JÖ7F7ϬµÎJPÍó»Kat´Ïˆ­fçëŒþª sIálÓÿ®îÓÔgµÝ\Üì/É`0§¯y}ø æ·Eà aƒX-½ü‰«ßÈíJŠxäÓÚ.‚³Á¬Ò?ãæ–Ü³Dwª4g^}9 ¯ —©¥£€à,£G½Pü‡u=ÈD™uÈÝ3èç@Gêº÷-*Mg Ï¹=Oƒ¹”hïšYRŽà1å¯Mf‘«kKøÙJ‚zD2i½ֈ‡ys{2M¾°ìäÁb90žÆÔÊØ‘î¾ô™_È £K)ie"{©vç³Cx‰[¯ì³¯­žÿ£=ö.™àG¿Î€Y²ì ¾!OS½OÀ›ÜãÉHbäQ{ºˆA7“rñ»ƒJ_²|•Ç"ýÈAp`“»º>~U ú/U «NSÖ™z`~õÒ²u™Sšmyøƒˆ h:+þfàwq¹Kâ"ãyFQ­t4b4tf4¬cñiOú°è&#ÌxI²<ៜÿÓ>Ò Ç‰ù³à>CT†Á`|´MA +¦ÅÄÑo\W z‡ Kî‹EVˆë®i§ +`õRþ±_'ڗõ1Õ£|xá·~EQ~ƒ]3ïU0hv‡zŸ baz&G$:[£YˆÖ­Ð²ÞDü¯…kv÷2j)ÇýŽ`ªî~×´é‰7wÖ"œ˜ð“à:rJÉ[‡»ñ¨³”âÎ h)ș©¦Vl¼C˜ôUڄ”0\dRùDCrnû€Ï˜WÒ,þ-´/Ug7zù¼‰™ôñCgÅ)Í8’Š)µ „szÈ5«Ï¡?þ@°þê,;n†6ªT$ެWìú«UÅbúl*£¡Orœ}El‡ÿ5°Ál†>´¿=i.ÒWÀiÄèžtLæ óQk÷Öm²íK;Ÿ“í9€³?/ Nè$ôâÞY¼y†á¶±ÀFìâ6ºr\Çêq°ó’ì¸ +‹™X}WQöš¬eæì”¡"«‡+»LŒÃ=yV‰‹ìôÂÍ=Óë.ü—+Mè¤3Õ;O'[XSclïâ:Àê/Nr¸ü™5Y¥AÜÃ]íãë/ ;=ó³®û´Ä}¤jO€ã¾oùµ;#¤ˆ@¯ÈlÅlïâRîëð9dh„.õnB-ý“SîQ'éÜ«ÏCiډ4ì›[η¢u\}¸æÌ]䄳V_ȟD îÂ&Cš'¡whW\+»‰©,åWš©ÈÑçˬוԊ±5<’E“Hùz¥˜}ӆÚÞÀÝ4Ã;ïdY_I.‘EfÛ>x~:—ÿóièÕáã—.²aËøSn!àÊ+ÓÒ«µF_ùPÃíEì®íì-ñÔ6]Ÿ>®ö­>+±`w`¶.ŀ—ƒ¢:þ.V»ÒVï(”àºÉÉÆ Å1`ìì5&««…Ö»ß[œ÷}¤¼ BÃێPÒë"ĊÇÙÚr:Ȧ‡`®µøºÈ͑ k§zU»‰>áÁûÊ ­Ÿ¼[Ò,±>¸&öֆnïå֒éb³/çÜÜìw'­ +ÿVü‰+ʲĐ@¶²^L–‰ƒ£g‡:;Y©9Ê~~6ùqê¿;–€\uã½»ü_ʗôÉL3êúæcЃ¸§±–>Ô_.Fœ‰d˜µ’ïóÐÊvEŸäjHÇ» +“Ú¿|ÌTY÷ÖUzT~é‘ûÙ£÷´GdXëØÍa±ÞÅV´hÝÍ Á N_bâ¢<¿‹q"ׂ0áŽÌ×ì÷äZðFÏÉ"Wl·îH‘R=ÿÎ,Q’$ ×\^}c¶µžF¶K³W‹?‘piÃø9þ?\­]·¹¹·M’YÙr1y¹-V¹ô;"ëσéÍ[çe:Ùfs;SòÓñAtS«¯ +@Ùc ÕÜÇ>©Ž»‹½šÿZÊÂÅ ¦ÁÕüêc§uW æöÏ=1Ùû…a9.ۖø]žÌUöåxd$?}öü߁ÄÈßÛÈJEÙ\Õë嚗o)&øÙ`u:Õtæ!ÕLÿvÔЯ–®Å$鳁Ƈú)`– +ÃSÝ-,—Èq½é'¶ó‚úv|­f«L«%½ÜßKkp(HŒÚí D¤±ÙôgûKðtl…M(OhMé÷äé톼;ó}x‡N/ Û!‚*9ß_‚Mõ“„G߉@‰~Òü]•½Æ«•ÜqG NþT$uÿÄ#ŠÂ¼.1QÉO‡¾S¾l©Š{6gÉ+^ƒ_É?¶(Ka*¿Šlé¢÷´h¯ôyˆ +w…üÙSñƒ}{éMðò˜EðºÚ­òQk\Ÿ6©àȵàÐߑ~qž×áÊ‚ôó’°È¤¯["Ł<øV†—–Zû ²%àÆ²RÏëí‰GÙÞO8qnVIâ§üôÁÏ$eZÍd¥¬ÈÞÙj¥ûxìCùk:ýJV7Su‰üiÄþ;¬OŠœO‹u‰ñ‰ñ.±>2q>5Ö'ÉN'ɺÄùIÄùWX›Dâm.±6©ÄÚÝbuéÄëî±;âvXŠq;¬NÉ8•Ö'ËN'˺ÄþnBÃü·‰ó‰ó.±*X‚ß6ë³N'gu‰¶N&Úëç'ç]bv‰Äí.±;Tâv·X˜‰ÄĺÄ퓉Û]bF4!¶½î±¤ìÿLÎfI„™`’U[+EU+¹†fBg ÌQP(иÄEéď‰ vdáÎÕµíU½Û®÷mµí·|ÖÛÞ¹¶¢ˆ*€¡RÈJˆ­@$ýýÿÿûœÌ‚3­«½ómîß/›|½ô7Íßg|ó}]ßKwß߁›ð~ö€wkd¶[%kS‰ÖàâuÉÄë°q:ôâuø8Ÿ98Ÿ;°N'aƒ‰»N&ï±N'cƒ‰Ù'²ÁÄìӉÙàâ|ôâ|üNÑ8¦'ÐN'ÐÁÄíS‰Úü˜U¡OùHˆÔŠ,f@ ÛNèù‡MÑæNðôédðùqYRÁT¥ÔøÍ¸™¥Å¶*„§z•‚"‹xZ>KbaÓo +˕…T°½ÛxP‡ ãD-_jÞÛ ßiW<®õVc#›™ÍcQ7³“:A%¾LºŸÊ~÷|RÄÂ.­°±èРYÖ«l'¢GûZD8ùKאË-ûD{§^Òºoʛ€ñJ]MIJ˜úµe=Ϛ õSmÝüPYb'”>Baèjñ%I-+ð"3v]eTäæ@0±¡IÉðÌJ›‘òÈñe­ €^.u`'÷BI“ßÒ:š…/-Y![ÙñÇ7ý!FAº5tùp`O§bHÑíü‘ÚõHöWÅÎK÷Bȹ3š8´¯:]ë'¨U®pWø /³­aw& oU•:,MgåÄc®5´_󥽆”_ˆQ"‘ôˆôMhÇ¿—]dQÊRÖ¿¥Ä@ö͐:‘ÞûUkŸD à¤7?‘_òÃoϬ=Éõ° ~—ÊʅǘˏÉ ¾#«‘ÜŠG‰Áy1ï&ø²Ÿ'ɐ=˜üÊ̑˻vX™öP¨žÉ%ä#¸x—Mœ¼k¿šL*e—]%©eÔ!Àô‰þ{™¶x¼Ã­Û7•¶PÃÙr¶È>ì¶ÆwµÄ:Hêc§ˆ Ê¼[)Ê*ño‹‚7BNþ°‡fݪ9Äø"º:ÄÑÎ'Áòì¶VL'ÅĨÝÔÝ9YÕµJw‚à¨Á£›ê;æ±ÁF)^úŠlÄ‹ðè¾ÕÓtJõLÕO$‡|áRšy¯PÐä¦RxÞ¥Ú§/Ú´ï>v4YµeW֘bO±²—•…û®Ñb”âÓ¥H´"±½Z¼®›T[{[ÅöœâëòIÞ,/u»Î¦dϚ­âú$Õ䢝vkgD†óɅ4ÎXÇwp±zf¯§6hZÀ°;Þu&:°¢‡«ëËvª ¤”þ”£vˆÅê‰Òj/5˜õb³8 ~ søš^OTm¿:kø(…*ytå*ñÕSáÑ:irÌ \ÄWPԊܷõ $eÂô澈¨û ¿,PÉXÊ}”èåÔÐg³îÏü@ØOöøÙº²·È€ Û + >͗n;ñ<ÏÐB5Ñáõ'.€±ˆÎc|¾“²ô½I…¨€Š~xHAðå&À%ªo+7T‰Š•7æäSÖ¨#k„Û ìV5$A5LÖ8FÇ5×Ò"+)"U7tðï³Qø++ ‡Œ†“ˆOaЍw„GÍÚ.ÃÝó¦ˆqy¡F¿o…jÈè¯w΍rµöÑ*D…™³¿#E“M Îeá"S…õÕ Í7ƤᐠpÊinÎ~™î"Ìãc¯MÁCÀ¸…òÐuLÃê/„ª‘ ›u`Œ‡!fs± ¬©ŸuJ‡¤ÀJ¤‚÷®3°i“+¾>²UÓaì$ØŸ;ò0Rý$¶‹@vaêýý…]6t8.ûåZŽbbÆSò”‚ÜRÄsAEÎfôöÁж[®ò¿2{3Â̊SB¢ÒTjÃì9³>®1 þ“V»8ÞÈú¾ŒCâ<˜/nhŒ(#JG~!ÖmoÞÙ£æá’V%qK¯‚jôÀ/V„+“mÔ÷/ß»rÎ=Kz±F´³pIKO&­ÕÔ÷;uVât_֑]¬­Le0jµÖN•²Y4¤ýÁ|Ãűo8*Êq®§©¹#ÂAqTö÷¤I©cúØ©ŒñB`џ´0Í^Bjd¯žêž OµrÐööü6¯ž +ƹ={#“κÆm×û¥^4þ&gÉùÃ%Uÿp%žÕNͼJÒUº©ŸRê¥îýY^¬¸¡:£ŠWI_V,ÊYY[k…ÝS«+Í^×>è„ÒŒzò=kÿ4.éuvð.Oê4çF¿ÔƓE—uä™R7Až®ò9+ÝM5 ­æQq›­‡ül œij6¼F³ë_·29÷ãï¡Ï߯&Åô»GâÕñaÞ˯%‘ãª)åÈT#‚5­þu[\Éu+õ‹²ì…«AÏ êÕ _͘DšBÙäçÝ$³o«à|àݱP˜M ƒ‰`žYóZК~&_ç ?ÞÄžåkõ–F˜)R6ùÌÎÖv±¤½"µD×)o…;#¼8Ðݾz\7ƒÉJœc+«N¥ÜŒŒ'ÿ=ÀiÖkÄsRåڛ + U(WÇxøØ­]±O¡³†²‰c‘¤qU}#mºÀ¸Ôi2uy6RÇMK¿ ta0…2œ`.¨Êé5 Ië꺑g·ìÊRÃeﬣ9›¼Þ/4×™sU#YÁ‹€J×õa¼8bý© Þ+¦>1ñd=w“Î’.ʈ‡¾Am +-¾×Ö«/(ò> ¡K?Èâ±æoƒ€“ž.ñž£ªc1AI!í~vª£Ù&‡0äG–ÆYãȰvÖ ›‹®ÆÃ9C ´j¨ ‚è“58Æ,èPxsŠ6ûS¹_]·ÜF†‰;w¡ž®û$……êÊËHœ+ó:>}öJL9÷†ï˜ôŒuSá¼x”±I¤CřÊÓ"­àO§áÊçZÎOIÃMÓ{á0&åbÈX+Gÿ!®C¢þÙÔït¬¥Þ> ZV¢©¡Ó=~:€†â!úm[²y3Lxûøo^|‹ù§+ŽÚâLjǻì ãOÎ<ÇÍvóÚ§evÌÙspĊÿ™5ðcÝÝg:”Æsô1 'éÎ3žp¬ ÔFs}]»ù˜!ŽUã8ñ®š/îªÞ²–` !µÖs5Šö+ ¦ß.$0©A)«Öx'Ö¥îe¶çS7¦…½ÔŠ‘° í8›ÿn<è+¨.¯]UÇ^Ö¡µÁåÔÔm%êê&(ÁàBd´.~iŽúWn§*EºCÖèL›”ñÑ—4#B÷Ë1·Šü¿ pÚÀÒ°ê.4ôÞ•Ì“¬òatœ?Kذ}ªëËÜCx„l‹8'ù[’¹_ø>Ò¶ÙRïgíäTËÉhÑ´ŒF% ¿u#Ÿ* ‡_˜§ùW² ©áisw¤% »ÞÁaÆÏ桊°}Oî* ©eèeWpò4ÒÍQ“Î¥ƒº"^•½6¾…¼"šÀ/¨®±Àü|‡lô£”b÷G3Ë)¸õ +-ØòÁAÝ+¤½MMcZW½PG„Hޱ>}¡Qð»xÒ{ò­ˆCYd¼r>C4AM%‰Okˆªü“!{q_8;í™1”FŒ¦°C†@wíÍLz_$í2t[˜CÏçfÙÙ͙hŠ2 ôd¤=íж¢MÔf ¦CroY ÔV7†×?†Ë‡6Ӑ†ÿ2–<Ó3Ï(ï Ês"sžlÞª2NKÓPޚ²¸+Áº¯É•÷áäŒïO‘¶H+Ñ#c­J1õÛÛވ±‘XõãBc¿,|e=&œ‰bâ0ez⸞o3Ê‘GSöÂwysñ*5ñœ8õƒƒ° ±¿×F%-Ì5B!ÌB >Á|Èá¨_29rٙËÚۋn“Ã0ʉé<"½Fòÿ^¬89MŠÔ™`Mb—ÌŽùä2b¡æ\“!9{ÍÍb¾¹±EþӖ3X®˜LSiǛÚý£L6lÙîñ¬\éଦ«Ù¿nÙab4ª +C/l¢²ßÔ_¯ô+l +Wš·gHuŸ…üV†Ä GÒゞkÈòMûGfÔðõ/ô}Ԏ`¶R…Mªd&ø°S…îÏޗžôAá+¦!,•ï5e`ƒæ©ÆxV¨¹‹ã!@z}Äã¡·[ªÁ¿þGêž<úÊl"AØ¢Š’Ä.BM€ˆ¶!ÓÒd YS¼°èJëôR‚ëöÇ6|>´ØU”ÚŸ6Šôï+·+)úbÓmdAÁD/(ÁƒSt'yt„¡2ô=º7¡2rñ/n.á·Ìå ü÷ŠÇ§ªFµ[_¬± _?Îè§6µh< ðqp˜5^gæwÕ1–€ò°XéX;; +º²×O=ºr>"›cåøÚWoÁgÈóç`EËAôì0Ù Š(èŸÇå“]M{¹ ‡PåÏ)êÄRìh3ëÔºž¨IÕnñ¨f1Œ"Aõ«×K‡Ÿê$dÄJ^O<~ûüþ=ÀI„õ5Þåŵ  ˨+)·YMzÊm EÃU®uŽ +øI–|6È+–ûžLûRõÙh¸Ú‹¨ŠW¢Ä™úõ,¿Èa/BåÌÎí3¿yÃ]Tá‘Ðq/Jãø“¹Ÿ”¡Xe·¨»<÷ƒ|¤á ýTV“Y²(½J_H¬ÿXpMÚçi^Uå‚÷9EÌRgH6š*’(í4*½(ZÓJî÷ ßÙ_Õ(Uá‡üØûøt¯ ¤%gñ7†Ÿ¥y`ï%%ãéç :p9•ÐàVc–$Xå‘ÒßÇéÄ_ù2ÛüšÈp1ôRif»‘Š/ëÛNë +C=«ÑgbðvUÞpèeI¡¶C.vìzâG܏+£LÊF ÜEjîÇ +aXh½\Œ·âUÓü¸áóÐ,ij„…Ò±°^xêxvå'‚ü®B‚¬ÿªf3… ß+¦4!xœxïÎÞÍ@ê]ýòYÙPL,´%‚‰îÉ0¼ +D•»m¯~ Á¶Ø<œœëúC¢ˆÔ7wUÞ!5;OZµØÝ5§ˆÙ1ß¾ZR¨¬Å|]1¬"Àv@tÄ®]èÑþ(µÏÎM×;÷w´³zÆÜâyø׳ò×°âVxhâù€û$ùi +æ•• Üx‚&%¶ÂÌBÄkÞ`Ã×¾˜è\gPèE»ÒSmUҊ3HlC›r®—¨:4]–Pù|tiLATõ|A%B·ý­û‰à.›‚¢z­Î.Ë(h…SªŸµiý§ö0J=wíûÊL¢Ñ/Ýn¯„ì+kâ,͐EË@™šFIdžZ3¥ËxÞónY‡~€ú |Ò7NãëbAàW~AL-Œ¾Ð›ê”•f}z& ßD˜­9kŒ¼ø¥CÕ—ùâ[âVÀNÁn³X‘ñ\BQœ.7ÃwßÂ™ÌæÐŐ#Í&„«ZM}¢?{Ô~ø(ý· +‚´Ö˜ñfr Vk-"³·LAõ%ôÏÁHñ_UðïXºŠoàŸP7Æ9i­`¸ÝQ¦s>¬­y GXúpÛ64ƃ±Ž¥¿Z©²B,ÈÒZ¤¡Åj[~ yâ8LPÍê1¿}+ìD+/ð뿤 *ªŠ¥cjˆ<…×?Œá ”º¤^›zDy> ²Ì3@ÙÏQÁC¹ù§f¬«öœ H7À×MßÿÃ`ۓžš}ü›¸”ÜŽSwQÁVUªoC#‚Õå?öÕ¤J'a¡ñ:‡oU£Cw¤LÝ ¬Ùæ‰È„FoxŽïÀo5ŸÉ¼¨àŠÝ½WM·K[—7í( ۏ‚HÜ"Þ"vöÝÔ= +:Å „Óä-“wÈ;6°ÇËÖ»ÊFþ±±ðrÏWö‘мg<â#<ß~7@žþͶ"žðߤÒ<ày‰¡« äÂiÚÙ¿ßZ§1i¥«¥€Ô› ¶›%Q« +˚y Ÿçâö’W<ÎËÛ8‹“_‘#z9?ýµ&Iv³ړHi™ÜTýŒ†’]÷öä7/jPR’0­Ñ 6‹—KE1´žkĜŽü¼0’ Ž÷\&I}-uV<®'¸^3Ÿ™´†‰$R£û?#œ¸„ùü*ï.!aŸÂ +}ÅÔ%g? ¯ÅÜBT^² ÛM å$NÝB qzéÕ„Ã:Gª #×G–WÔ4Œm|X×ν&# /3Z_žÒ–ð¹k7àDº D)ƒÔNj­Þ.ǚ‘ÿ9óê®=HWc5×áp†Ç³­Ãõ‘öt¬;¥Ô +#תÆz’:XÏ2=]Kÿ¥?"~õ•"ˆøÏÈéхVE0p¼ò2i¼¬™ÑdØRɃ§/½…,;ˆOa\yàKQqŽŸÇŸ©sèÚq\×{@¥õ=vô?°æî:¼0²v|eøôÜìJñ ÷å‘TÛÔr–-Ìם³”­‘hqÛÕ]fÜ ºxhܸuÌâ÷  ðèlk¤n˨,‡ »ÐÛT«¸…>( Ä<þÁ/Ùgéj_ö­¿AsÇt³2fŸ²2iòɍú# ¨/8áGù—T˜Î­ì‡cˆÆuxap¯Ê€ä¾SV¶¿ {´©·é/Tºžstê’róÏ®J¶<4½ mÜkÙp7·2¤§Á©Ï:VW¸J‡gy$ˆ(m ‡<å¥þ¡o>X½PmT~•]6ØÖ{ÁKq×vh‘ÉÑ®®SõéZç 뻟¶ÑŸ++f&uŸ[é¥vŒ5\‘z´h$Î%„Eû:°vçP\OsÁØXڃ¨e’¾1Íc4S‘˜{Ì DñI‰¥#ddçjÝ1«rkFŒTRÑÍë:Ñ7¬§öfó#ü¯eI³{œ\z¹ì“zñ1aVlè’|‰Áþ›œÉ:§ÒÊÎyA1'1gÝïJjWÄMÇúxÉ¥UÖ0¬ÐëwÊNENeÛR'±Ì-Œii +š eù -c”À2”¼¥9fSÎS¤Ô£S=³‰~®%«Éã× +\æ`mOêÅa´c^ ·µÛn*¢ÚáÀËNÑ«l(úkŒŒ g›Ì¡Kÿ¬ÃJ=q2K=0¬u¸O‰8΂ «Þ¦lï òuØ]pœŽš÷ òV|ë?Âp³+ÎÑ÷Åp¥÷=úE:|˜óTÓ vwÇK¦eÒ oÆi`¾rhø62Ô¬/@æمs· ‹c[çýF֘+ìÌUúÓG_dNÈK¹ÓvEkq„'Y6¹ÝcNïîâL÷J%î½'ͅï1=ÝÔ=“— ²Èm6X\VÈÂOL>9~ÕJgªä ¡(ÐÛ²¡ÅËþ¢]¿èWÚÈWÚ²AíMRÝåÑ'+§!ʺ@a*-#PéD…}ª[¼ÖQº>EX­8î•ÒSŸ~O)¾Q±käøtƒü<@íçÆU7̽ 1T¬çRzø§>æâ±vËïShê6%ÚÃH ¼j# ÉA5N®;φ PtËØ*UámÏ»ý +|5<8ç¼>E|¬KÌ[¬QÚLùjµ½¼lLÄ9!~‘ì¨ÝÁ÷ÂãMYÈ94*%C>®š:u +«È…‰Î;On'W£^"uT†¾=«–ßǀÞOøZD¦KþãÄË|4‚Ï3ÿ'½>m‚êjåø7 Ùc°Kkk“¨Æ4ä6kio;6ó?§73ÎÍÌNJ=H¢7™âÛÌÿ¦ngO73àsfyŸ4ŒÏœI> ͙¹ŸLÌÌ_îUΏ3Õ·™éææzÙ¹˜ñ ›#Ìù„f|Õç|ÞfÄÜÏ¿›™ø¹ÑMÌïsg˜\MÌ3“sÖï¹î0¤FaÌ^ô‡˜I›˜|ɹ€¨â®t3sª„˾¯ô £h»$CeŸÙ‹×©FÒËfåČâ¾?5³WDzُ[ ©3±º=³ÜKòð폣0«—Ô»;¯² Ò\`§hÉ«µ×Q—ŠBëB&Õѧ«úf§Þ:¦wSÎéçK³þ”«K²#º{1G„0ÇL—ØaÚÑÅK‚ueTãvVíøˆ"mpœïi§3ì7“4zƒ \tXr_ù#@¢ï#_ë£ht—ÔÛÄ2‰©—B÷U;åý‰œií]¯y]6ñ¢Öx‰k«/O($LMó—>xí'÷ñ͘k¦¥-$¥›FðvžYÏh×~FG› 0ˆÒlˆ5B€Éfj𥠻9'ÅI:ŒUì¾ ®:8_öj•²¾Äҏ sÂö›ÙOí±þ~œã¡ëË7!ºËpʀ…+ã™ÙNO„æóޚ\œS·P5Ò¸›dýÿþrïJÀ?«‰¦ggÂTn³7˼Ӛ¦½”+ݶ¹XŒ{²Ö(V¸m[]XòYœ²…ÜQ8§Ø ïg,֐Ž4h¹«b\F~|ø”«»ëÿ:úmL$Õx‡vômJõ ¼Zv¤Ü•yZ ÁuvWÔÒ!yüVD)fgˆŸ%í‡kÁnšç>Ø.Ñhx¿.”qô¯ª°M_]d½OAF×Ö×X¦I—¶',™T~šA17?ЉiÕ=.ž÷x£o¼O ¦ÎÎg +¹ß†"ßn0¾×áq±Kٖ,ALçxޓ½ÈÔõR£IŠôȔY4žASOô/x}‚ñIë;ù;ɽ„š-äΘ¶§üg½-ÊŠÛ +ŒsúÌå)JƆ)eß\³åÇ WǞ ùøÜ3V“%"Ø,wâzívòȎ„ô÷ó¸—ú›x|×^´R»>´«œÝ”h§2fá[ë©2¸ÈCÝÊzê`Qh3kߟŒHÂýµÊhÐ:·6\ʾ\'*ùp)¼Ø™ÍluYÆùj_ƒj֑ï^¹¨¿1b,ïÊõF̵tμü—ç˜Ì äñ)<µr¶)^söÀ¾ŠËÌS““àeP¬ ›ƒ¹.š‡Ïv3>àRŽ–UƾY¡>·²³¨øÒ–_ôä½Í$ûqšemD¿†O°Žø€¼+p´ÏÔ2Õ6„úµ2ÿ¹ï) õh³F¥µJʺM—Ì +Zl Ed`ˆû»}Û]MUÙæú°œjâ×fêwxªø³ZköLãÛô‘ÿPëer_>VYÙèMÓw_Ð;Øö’ pE¢râ[“ŽøOü+m¶™‹±lÒ°äÌpÈ|¾Íjž£iBÞùœWQò}Ê |É+Z1Ë©.Yýtinߍ¹ÿ’& ûmk¸ Oʲ·ÒêhÊn™ÍácI­z\Äû˜Kµ••×£õR"ó½qª·Á‘µ @"2VeÀ¬Ys±TÞß×g +æy¸Œ6ÍD5ÿ\K¤ÇºRmpð_§|ÂÜÀ#Ú?†oFÝgîaç;³BŸ÷ܟ„gîvEML{céÜ\‚˜CÚ%žÌ¹°;Íw¼Ž|`sW:ÉMé4t}¬®yӛçý/}¬ê­ëþì&r<õS6mPƒT>¦å@'£š+B0<$cH‚É—GßF¿L͎æ2oXÛ'ë(t~qÈà1Ù¤~t,4èþw?q#/øòL+ioëŠ|$SáßAt3—ÈþgVÀ"ƒò0FóÎÓÀµ ­¬|![XŠÚ‹ñð…mcóÑüü›‘[[immþ¡~Vç¼V.š©#sé¨Kåîù &ۉ‡yù©Ä*‰§àM/f¢Lð8\´ºt˜Vv×E–RFh–hÔ\‰Ö]tÞØ9Ù7¦Ä††L¨NÒ¬'1¦›Š|³êÓQû´A~îùUFˆ°c&+,]Êì  ß_~ZGWšÌ»B§\Jq‡s;ÿf»ïn~&».MuQµÇGf‡Ü®”ƒ òÛ*­·€/½â¶cCij÷*N5jsd·L%dàjÊú¾,Ð¥ÑI+Æó³ü¢ððÐ{&;Eêw <ï}ß9•”â\ž>óqñ<{xú:Ѷn ZGb‡i_•‘Ört{ØñŽÌÍÍ·yþm¿m¸ýº?v–ß<o£ŠÌفå}5f^] ÁUj„ϲӋ€àpŸæào6ÿµÀÚϧX!z hÈ ±¦"º²«2«1È+7 8Þ`¼B²#hcc}]À³-€ì{)þS±Ø‚ûºîÚtêÊ^ø6Ž¿iíá±hƒ” Ùôþû³+7‹{e@¼ þ)úº_£Çjb×ñΎ°nXÿ6Fí©¸ßE«‹Ä$&YÕ£å‡|S!À[…ê3 Úƒâ¦ÓzñµœŸJÝlÜa ÇÖÔ¾™ª®¢(73SiÈy#žÀ¯výL–²÷+·!î âEƒ°‘ý EŚ&k& Û¬²Bô€« aß0mWë÷-}PüŽ¥0²ÌzѪ€ÂçôeÝ Ï_¬Î‡†ˆiiê™ë U3šè «(JgåŽç£âÑýŸ‘‰Y”^‡’„¢â~蟑x)lPB8{~`‹é`úQáY»…igŽGØ-‡Xh}kxø×º,¨¹«³<Þ¨ùË[Ǧk”:3ª ¨¯~ÒÖºÚVÙ3BNb¤ÅÉ 9=$¡''æpO{ýÃB"‹S*lgZ¿8‘Ú,hê”Á@À¼4¨"ÊÄ~\F°!•6¤­›þ"žœ/ÇÐk Ì/&ÁGÔFå=äÒMGÌòi-¯¦šBIÂpë±=Q´—¦ Œ˜JnFŒZ²§¯5wÇó]žl^üzð>jêÕùÜR1Y‡%qÚ:5hHÚzcHu{¸ýë9Ą^¨²H=…±5…ô—ýŽStæ„ò\²³Vò=+$³àh`ž‚éò }ã«AŘÜZæÞweòÎe_õ UžÈÚú+ð5Þ_‘ð–r÷äy$@Âۈ uÓ¨ãIuÑ L=êc0ë¥%«)Ü.Î*ÍAtبëd™Ëvä™YèҞŽp…ƒi -þ±vÕ3#$Æâ¤N†öô/w³Éé®2h¥F¨©äib “_z3{k +z*6UÀ?å=>Ø|>Žf?4ïÇÛ Af¸¼4SÝvºëóð`¯>_óÌ=ŒòœëÌÍÊÊٝè¶Á2_r<ªHϱ1Íæ¯ÈDún?ðBšðÿxV¦Ò„!M£Ñ%(†héyxŒmX<º¾>e6hçU•!Ô6"’ce$‘¼o•ñúÙø¬nÀãá$•µ†ÐßD÷c$)«»@’âªêïþÔFÀBšoܪ…ì;ÑíTÿǑ—ÁCü/~„4çä]óçòEß<•F£SÿÏSSÿùá]ÿé ÷›5?à„„yßôBB?܄„y_ôBB?℄É8;ÿŠ#ÿÕ zõû%&!]Ýڟ½ zñÜoû¡^cd§% zø_ÿ!]ÖÅOކ=íØ©ÿÔ1ëùÈiò†=~ÝڟôC¿|øpÓâúüHŒ½»:fGngø6T™Ãñgš¢fµËŸ†è±¶O¥?CÍ;¦ÚñyòV?÷ñ¤Ä"÷0­')¿ +ؾº©–¥ÕMå;xœVæ2¤ÁD ÀEü:{±Õ* åxu® £EÔÚq\Ø`,{žÖriî¥0ï° z½{ÝѶßûë²é›rI%q·qÖúF䍺ß4¹sMŤš6“MÇRmT¹¶íŽM]Í®mråWrN7¡J2†&£!HR”~Q¥)3!Šb”¤Ôڏ2 …!B˜„)Š2”d)Bßÿÿþýûû÷~ïÝ˗5[Q7\e̒ÙJbkàÖí®-0LÁ·“llo7“x7‹÷‹y7ÀNøÞ½ð i÷ÏÝd’HåÖN€³î­Ÿ=EÃӅֳΣ+Íf‰}•ô³Š¹ÕäŽÂÕײ݆}ëõrE×§ûtòíˆ)XúIæ-6j¢m¼æê½°Äã¯mÊ*Â×Y‚¼¾:Z“¸d‹’ZµæÉáô ÓZÓ÷rD]Hí<ß(¼i§Ãè‡UõS„÷¤¥í:vü>ÍÛp§œêëOçúÿ½Ðs6‹oýb~ÅÛ-0»f&‡;X'ò‹Ë~U*ííÜçŽ]û~UgrhRàÚˆåkù¯ûÿ›ÿ¹zí¶IáĦ•yìO7•ù=?­MíŸú×·¸Ë/•áÊ¿ežˆñ7é¦ +÷¶’÷¡RÝäù—þV‹òµ·Û½FÎù[ÙX“»cùºx—½[ÆüÝn!ïmš£ÓїUê`¤/ýpS§K'e‡ñâåá¼¾üð +7Ä<›ùÃáÖwü9¿™è™Õe¯ÝÇMÁ¿ñ±Ì÷CJ}þÙ¢3©­I>wôUºê¸™ŸžòþÍT$ê|² ¶/w›¾ÏåœÿkUw÷9G‘“WQ%Èðê ¹úp¥ôÁKéU˜ïÑKÎtJÎGÎ+9Êª ѾòWüïH¬ìž©YÙ¥gcæUÈeïnÃé‘:.>^VƒÈ{…Bø´þ½Žþ¿¢øj9êL•VS‚öWßñrºžéž ¿<~z>aYàË݂Ø|®ŽöiMñtö/LáÛô”ù€êýHu|º³¼l=*‡Û„Štq³p~¢¡å†òË^RžX*Î}$ÿé–X*ãà+3Ü*i|½ß¢v‰Upòù_-êníèü¾¿3‘g Ú%óÔù€Yø†/(¬×GÄ1poU¾¸\žçšoa✱ц0KŠ®¯!Ÿ§ó²÷4¼ÿÐQ|‚S-# VZ?¶^'Áñšy꣯ÔSÕG\õ­[¬W¹Èh)ëZ·›É+7æ9C點–Û¤d–ïæ“Þ±Sœƒm‹Úäf +Øüz>ç«,OëÇÍ«6#´Ãå§þ<ÏØžy3“n®§(Ñ֏Êöú9³Çe +¾hyÀïåê²¼êðTúYœ~ÍD/՞áͪ½…Õží6*Ì=@÷€Kjò?8 }Å;hY %ZZý`13áèÀü >8j•|æÉõÁ¼f™çëºñû–ØŽÀKÍ]ؘøšŸð€ü°>H.{à#h€Èy¡=Ú¡UÀÄæóÀõ…ר´KÜè6~ˆþ´j¯ÊYuóùÀrþèþ³B­¯º/(¡‡Û[õxðùz@øeë¤x¡ãÀø‘Kæ0Â`|>ˆ™¥ lJUV| `%¤ôÝé})tXP¡WGZl x<¼o•ŒX%‹ÿ†¿®³“Žàt@uà{°=v™J,¨öƨÓ/#!:Ð6Àv€{;âðËÀý 8tð2uà|kp>o釠U݁ßùJɝ×ì„Àï@ø ~€”¡ìûý`?LCúa£ŽÄô€çûBÒíôDü´j•Ô©Zà;RÒ~dÊåêWŽ2N%ˆaàK_(HbÈFlàò-;„3Àø |Ð9[1û2ÈX‡xÏvôyfVÜ “߁ðü`;ð%¥+ŸÉòÀð@–Ëóõ‚+zÂÐw4ð;þÔ?_jz«T«Š#® /\½i¾v { ?ÌÂåô@æ=Øbàoï€üÐ?DºÐ2p?T oåÿgj N´×‡›®Ø=´8ށóm_¬Ugê½âôHîÀüà?L~Ü"ÀæîÀë€ñ@ô2Fö!ÎÀø@x`bl‚ξóÀÙlĊ`~p­ rðÈȱ¯|ZÿÍÍä3<~[´cq#ýY‘Cº4þ•="*ÏÞ&F PpOE—×m<µ¯vdgõ§¾üG‰IÄ=òÇe›èÏ?¶ÔGì¨kÿ¾²4ð0Ù4Yl“ÖëwÉ«žá{Yv ¾Mé;.Ø+$Hzh š¿zQ¯“,ô¹c“@›\ElÎ7ÈH¶Á¼ÙíØ^Y½¬ÃÓv{[–ô}rÏ÷œ ±ÙÏ)8óM|{âfà7|¸ˆM‡ ϔCwc‹vlµz\ãîÏKJT÷i¾Vlƪs ?¶¢ö¥à½êõGi0²Š^¡¿¬cÁÁ+?][~}×ÉÍ­Žß¶¢OÎÁ³uûcö~ 1 4Ô‘ߟԋî(2Öky?p|Ö;kè÷ʁbe·•ž‹mÝ“B 1|TwÔxˆö¤T¾èÚ;šq‹IÀd7V²uÿ,QVSü¡;¶Gow%%(gÊ=ðEbœ^\Wl¦ªûc|†ä삌c–™Ž¼÷Ì/՞ùOeµ-¹ï£O±]XçØ÷C‹¤6“÷™ŒÃ‚. ¿ÿó3]2»óf³žß"GýÙ¬5²n4ÝþûÁ¯Úq7ŸÆÒëZÒÊF2Lè1À>~ÅðÜÇrÙMwG1méĆQÅM{çQÄ8¡®Eµèžæ;¥=ñì÷cûݞù «VfŸ·ÈeœÆ¬“åÞäÔïç÷Óažo{‚{忝qôyFÚô?åY).¿âv:ãßÿ]ü]…ÌÏøŽ1ÒY~PZÁ¾ÃÿÝ´·ÍÂ{F7Wl8ύµ@û©ã!aåÊ7wrn +*s‡Û'¿¢oÓÓw+Ÿ—ï,¬€Ýþ"Ÿ%íëiÖ»¯jŠÜu¦­v&nñ=þr“Þ7QÙ' }Éþ,:{éŸß¤'a¥¦¾- ا¾‹Û7Ø-ûîW„òvvɳ7õ>º²ç!b}¯&xo&µ·Y†1=dìJHœñ±Mª£d=T~ÌäCžóŠÃíªš®wQMˆ§Àë+“¦ÔéH—÷¿» fÎ=ˆ[7Ö-Z–ýR×FÆàü5CÍóɒè^••u?ežûtk]Ù û“„|³¨ÊéëQWû´p{£¨c5ö7·ÛŠäy'S®o㿎™¿Ž¿`߯´êo³ó­28"@ö} +ç&å{£’_HöÁíw-§ +¹ÕaQ}ñŬ ç0ê}¿×êøÀµã%nMf%q²:縠²M‘ú§&Í?¶~ø»”‚êxò9À¿yº³ì¢K6„‚ëœW¶¢B_·7 ›Ê‘‡¶¡ÞÝ4çeuÀ÷Òã‹éÊRå?ÙbøªÞ«ùÕ¸)¼Ã€[ú“B«¦jPcîÛ7T=q¹;?\ju³™êƒ©È?’Ó)èÁÿRι¸lpæ#\&ç4³œFïÁRê‡5pëQItô+o.×HÝýt]¿NØÊ·Ê¥Yt ÿ¹BóúðÀkN”ŒêhSˆl×àO£‚öÂþw釁7ðÎè9Ö&ƒÎïý„Ç_9E¨‡­þ…¶·m©€×8 ÿþbF·ž‘ÏH×sÒ1ùé7=#_ÏHéùéÄ4fè`ÝòˆòÞ¯úTØÞқ]í)±ý¥7Mí)µþқ§ö”ßÏÿúþ©»SÚ¥)ÿ¸‰Ø¡ä7Ï«Ãüëßû/}ŸftߨVÀë‘Æ ´¡“¥:šª{î$®]l 6²]s•¶J1ïólÓ~¨Ø†Pµ{õçޝ—«°­«éó]Ê@מý 8ÈoÙ l>°øë.=â%rÕ¼JCzÃ#¤£& ehéX…kL€®=8Rk’ni“q|ø¬>½bzvæð×ÙÔ¥M]O¹Ü{ K Þ¸Û¼£ ^Âî°¶ÀÛ풤¾¤à.ìxeÉð.Ô/ÿrg*ðRÀJ¶ÆÅN甩¾gwð8»Šš®±<\; ?lÓ°0Ä8Oܽyˆr†©¥wʷ֝ˆßÕkë0z¸KöMOÁÃÔ'Aì‡EQÄã»üä@±Þܛ]˜Ïû]–5wìj«üÊÍ_ ©Ûƒ«©ÞÉì>Ì_FãX•ý˜ ¸½êâŠèfߙq9§üËiaÙÏYGYÙË~#¸á¹Ö$ým÷ìüZÃäס՗rkNî&Wu8æê(òãgºDûü½[k7Öýª°p"ö>²gcÇLÆõ“1¨&k½dÍuÌY3ãtïÞe`‰ªžÐ¶,‘k'JìU¦¸Ý\HXrטX¦órŒÏÙÁUʎ*‡tÓ¿,'sA{ZÇdePՈ®ÂÏÜÜßF«ò0ïÙã€Þk·òe}óÖV®ª%rºÞ™PvNÃ,û3mòL̛5Í[‹®4¬d:Óߞ=‘åb‘PÜv™p˶¶ãlmÆAÂmmíÕ5J17†Ô÷aE½KElëJb5Ÿ_•@ûÜ*Ûʍ´°ÛìZrìR¶ÆL•Ÿ»9ö‰$Íò@}–sü·ó™fþv<³×0«~ûö~õ½® L É¡j?¦|杊žU&/wÉ0¿6‘ëšã‘f¼ãרõÊ^£ßºN°ÿ¾ÀÐqŽVó¨:O«=N¹¢lN¯¼.ƒ²zˆû¿5Ú·oRɂ¶žÃÞq~ÌòxO'ápRߥ¤¥Õ´ ¿IÏVëÊÒ8)Ùmµ­®’»<‡¥?tì“OdÖË>=óë( éÛ#arúïùrúïìrý1× ìšÙ깋îg]ê9¹ïí>RjÇJQ»§¯ dú®[9»4Ö7컫a*M³ ìQö¨t•œ7V?~Ìþʋ2ÒÆNë2}6o³2ݱް»%»_h˜§Q|èέnÙ&W¼¥cñ†©:Î(ÌN‚sé¶Ý¥o“}ˆÒXÍ`ªí‹Þ]IaBœöê³¾óqZjåÌ8²™ìö³¦ÌFÃòZ­ÁKžÜ8 ‘ïےã–ë¨ç{Aq†Ä{-0I -ßxÑ„àK)w®]yT»Ýƒ; ]e‘õqq^ Rc¦ÿÖ¥]ÎBA¥ß­Å*:ÔÀNÜD³z®ódë(á6Üþé¸bR3¶ ÁÞè¿p©‚°Nçs5Ÿˆø÷IP´Jéðfý›(|ZV +x,ðÒ¥‚¹Í[­9s›ßeÒÊKr8¯XßýãÜ:Ü>l>sÜ=JUW]Ÿ]vSõÜf<¿Ê;óÛüýӀùZoìðøøòŠêPà|öÜRnÎÉ×-+Ò²‚ý›\…õ­Ö™ÙFnpå|˜Êݾz¨Ó]FuQ°bêR¼Ë¨ÐÎm[W¿8ÑÃdKš–\UñXþ°GNyÎW8Û+*º¶kö‚[”ÒVl®oQQš’o±Æmž³IºnXRê2w¨±â¹ÊÎâÛúRë»Ua]Oœ¯­Š®²è·RéûHS\¿lºkß$À+“ÎslÂ1¡|Ú(×M„ßåX—õºB·òÒ£‹.íª£`›œxß ž’žßP$¾ë[\)Wêµ¾Û×([ý®å×*’w'‰¹HÖã-$¡ß›!¨ç,‚ª©8ëÛ°ûÛ.µvÔºN‹¬ž¶Ô•øL“Ïl’¿qW€ƒM£Oÿ¨ð!Ë1(·•Ù§`Ú+·´9/Ò÷JÇCv–iý»mázôšM˽‚»tÁncð [áãÞ@bµæPtXfv[?5GˆÒ©;¦Âß…:Ý…kê·Û4é_6¿ÜÞîCÝkî‘Qš„>ᅌw`º¸ºˆ ÊXâñã2µŽýº “±Ô#ü‹KªíÐÈ<ÞUÉäGåfÎ\k¿X7ì•rRÓË +’Ä ª ”–¿~Z?RŽ ê¢yË OÂ=­*¶øZÉvôI…Âõðԅ½Kù:Ì´²†½9b]X%q»Ûœ™÷/L÷x’вév—'ÖMû€q£±I—ð9P´kþ¹âa³Gþf–æGÿŒuŸd æQ„ü,¿òÀ¯ò³òݜͻªñlV|‹:N/.7'—]ÉåÇäòôܞ]'—§N\4Ô`ƒ*ÐpJ; &º?µ(È¿`ˆ. +r’ê¥^åÉ~³! ڝ=÷Ñ0“µÅTyzj›§Q«u«¶?§uMY"öRÛwAK»¢a_ ½ ¬­O¿HSÌKrÎoðÖ ~•ã ©YÕË\ÌE­ÄÙn=Cƒ/£kU¥4šî·2ŽŒë÷<4¨ ¨lڝ¯ÆÉ®G1 WΠwÅû <ôPï¨PQ©T.Û-¤böÔ ®ºÝWËxxn;¦´Õн~›Š­ýi·’\ô‡méÿ·cÿG dk.-:·Ӟ=ýjå+á =:êÉlÆû£c´2¶'f-t:ç¡—á5,%p—˧ҏV©Ýâ*p_ÀjHÃìÀæúÚ°ô¦‡Ç¿¿ØRnvÔYlöÛeÑè{3hÏ–Ù*iô@·í0ð±ݓÙcë)u…ŠÌC§³üø¥l5k,SYÈÁ̃9÷çQùéºýªXØå¤IÙYIÐAq¢rÉ +ô +¿~qágAq\–ºdemÇÒ;ð(t v^4mÄѤw®ÿy㢎Êãwî>î>¡î>¡î?`÷Ý)%ÄÈאº5$˜0ٚÜéöŠ÷a±V¼äo´:tkk©=¯³$ßг•¸Î{¥V¿ÙÙß°\êZmîwÝK)ìîR·i`W¹Iìaêps’Ÿœ¶ÙVµ²µ,GªR¹§¯ ~à˜Îù=zJ7 º«+=r*¹wô­ýëO÷Õ%’¯i7~ñÛû¾VÝe¤Ù(.-eôï[joƒI¦â£ö+ÒÃÒ b6Æ^û!õSê¡dÑe“ þÔæî|2ºjNµíW¬Xf­×µ#Üt§t²å*&v´P6g#9NG»£ÉeÃ<Š\ڙB½JSYÕ™Œœü¬ñû0ªÛ–ñ§ÇÙXée%¹Énû––Cö)¸>•bÈU¾b†u<òçP°Nß%»Žå) »§EÝÐSÖk½ˆX †ìҘ<Ô=†æWqö•w0=Õ*0Éöæ¾·µ»GÅün AÚqœŽÐõ`ÿ’ô/æ7wAîó¾ê.eþÚێ«ã¢a}å,7ÉÉ×âb¥´5k]¢«)Wudg`b«D¯¦Óo®³ƒêÍ~®MD+>»’E”Öÿ '­m¾=‰Ú©zo¯»mò‰¼Ãšu:²Í7ý}‰Ä:ƒ6' M^©ã Ù0¹íê•ðu ””˜K€±ÅܼéRéj—јHóW)zÓÃ_B+Û%¾Uu«Ù©þ®€× %Îq_±:uò O_÷?ºäþã§÷¦Oî½?½:5½ˆ‚Ý¿%Ðö'Zþ´³úw?¿H‘ÏOÝÆQ×Cǚëvin¿Å_à§ f˜SÝ_v u¨ŸÙ_uþÂÿ¯9tŸÖÁì~뱡j÷~ýÏøØLƒè‘ø¬&Äã?~k‹ýWå×HÙDº­i¸;®®Œ¤5WX-ao»‹.Wµ^?šÜnØ'ùXO.<æ#cù6|Ö&»½^¬+Ìd¼„﮾Ü'P«å¬÷ çó½kYÚú|_1eÅHó÷úÙú•a¼Æî\å öìtî\åã^û"XKøR‹Ì¿¾Ñ—É)U…냬’`×äšX,øéérjV`‹&xA¹V¹;—]Ð÷…¯ˆ?D¼uðñt冡¨°ÍvX×C-‰õËfÒÃ;9|7d³|¯ä–O@î:E+¼¥ ¸¦R‹ +v9¢ö.QJ-u°}¾UJ,ZL쀖ŸÄü09Œ²”Z’–-˜KM±=±yÈŠÎ/‰u!‡ø K¾Û(ÌX¸Í/4½–:LËAŸ kƒæâóÀû|ҕ•ÍWÉUáÈõA.±4;¨ZÉq–ãoþÌ áo9XŒ‘ò–:>ý 9?r| xß;Ÿ¼X/´X2w¿XµéÓ¹i÷àp:Å(µæ èóÁœ,9ùå²Àüú•Ü/RùKԏ%¡ö½èø m×O½ÄœëÏÒª,¼¨ätÑÀ–ˆ-¾@Ž„'Àށߧr·/TÁÇÜ'r«ßñý0%ê­àÒ¦§¸Z"LïÀø€KQ$òÙU‡8¼ë­^kK½Z›ø@h»–XHY¤ځø K1}Ø6•J.ô#š¬-`IɁúÀ}%ç'}A;•\P:âõu$bɸ¸~p?,”Y*þ•® x×à§½®<ø + +8ˆXŽ‚Ï”Ó‡¯ ށø | %ë}ß@‹§R¾ˆÒåó@‰èAÁ{Þզ߿ßY,@ ,Ò»)e§¥—³1€ÊÀBmù€Â7~ól0žó÷£Ž?ÄV8X8Z0Æ.š"ë …4±M4B–©¥’«%º£H#†)©)âŠCÆ®$'¿?~ýþþûûß?Ÿxp¦a]šSK,QEÕ-·T¶âª-ÁUۃ-Á¸2[‡-Á¸2Ë-’Ü™eVY,·=[på²[‹se’Ü;«-ŖâËpnmÁ—¨<ý¬–[$W­Ú…Üñ}ªþrVÁà¾;.²Ý \2²ÎÂöžØ@ø^÷š¿ÿá•ákBé—¥åÞä)y›»…ê‚—î6ÿ’nt–Á+ +ô/Å â…äpc@üÿ zWïCGfÿ„/*vë-ۅñBÊaDS…ÊáWó’z¶Ã +]¾h¬¶œ3&ºÐ¶KÐm>¤/Œé‡®^³6†Ò¿A“Ù;ßÂÕì‚ö{bðÊܸ Ý Éïâ…ÕՅօׅ؅ðBíøAvá{}e·!t}uñ" ÂñîVZT¹9‰Puat{P½ð]°Y)…–äÂßBáBäBæÂéÂêÂøÁyi‘¦˜Z0½¸[¤ÐËpµÁu¡|`·I±¬XWX¥–©A•@_!”û°µÁtÅíl”,”àÑ,,¸lhˆðµAy„f¸]¸^Oð¾è.À/#:²ØÐ¹º ºùÓ2›#(ý|ðØW>azð¼™z×U š £ µ u#$°º0»·Ô'ê‚ëÂíîPd·t u w.ŸèBóH2_© ¯¢.ÚØs…Ý;æðd˜\Ø]8]`YZ0Ó Ù…Õä©)…— ˆ Ѕ¥ .`/bí(Ю”»€^א °¸Ð¥ë‚¦Nuát¡uw!`dCL/©É (Âü¼‘{r¼ – § à…q“ÂçB—®i]¨^L½sυãrï ¹ wʌ› ¢ ­A’_@bqÒ¸^h+°¹Ðº@½Ð^ø.!ðm…Ì…×¾/G¾B7ÂæB×υхëBõá{ ½°^è,»ñ ˜^Ô/t›/o¶~]X^_¥ÂêB÷¡\ÔˆÏ +^àNø®˜A8Z€ººÐ²µK zÝeìå¿×å/X>ûêtÌ p«£|'ù8ÖL›{)øŸÙ2×qÂ2Ù E‡'Ë2߂¼ uP–½Þ ½ò ¸ø0'Á2ßjqº³ò(j_®üºM#†ø$e B(ÁÕCj›6Úo¬oXQ*76\5ªâ~ù94Ë^.‰ЏE¬$ÁS^0êżï@1{, )©Þ¢ÖóPÀQéÍÙ¢¼…&b¹Kó?%©>q˜Û؂yu gÚnä¯ } fQf—¢^À[@‹—zkݰÕ+ }¼EìÖ¡‹ Y3q3}ÃÒìÙxçä×±½²m¼±3M{Í=¶ªŒ×Þ}#58Æj,Ãûˆ–TµAœP¶·h»r²ê¸@j)SìÁbèÍu67Ûè¼1EŠ—M65ÓÒÅêáÉ´Ìeáx38§–b‘\Ýõ +˜ 虂V0½„C5r"içW­ÕUòUE³üòÿËh|ü­dÍÏÊô™MþÖWÍÄ3YýܱÂĶ+ý] +OT—ßG1oˆÌU£ãrõŠ oi:nd­~¦ôRúÊØ¦wûÚvôåélŠ"–ôµghÇp†z¯Ï-Ùá`¢¤ïÙþކ©Ê¿>Tf›"m¡¦N>T2¨ÍGadfŸÿÞ͒æÍö6îš_> €±Ÿ”Æöؤ¾ç¿täϧyë´VW´Ý–ádŒ ÏÏãÒ .ÍõLJ¶*ó• Ü®ùɵÈ“[ÚHS³'kx3^ îµ£6Wlh‡DıtáNÀgÒ B…ÜKŒÛ2â_"ï·N¸ò¤ms}ÜKH æÚBÊ¥ºµ°nÚ½©³3ð4éþö&º1Úñs%£9Õ·†p*bùŽ;‹-QìÌñÒ-æw¬=š6²ù–ƒûˆ•R®?@Î%¹º|C8¸?DÎ. +ÿ‘ÒL &iôéBš†7œ#::t¿ˆg3‰³æÔÎ}½±jÓF + ÅÞ/]žÕåäåÔÑ1\Îe0§(½ÒM¹„¯Û­µ¬™ÏÁ±Ü“ߙȻGBƒgtAM4W¨þ3:V敔óz„]»_|=2õVy6'~[~‰÷*µ«~ko{s¢m êx7À3ßf!TgÊÿÈ3åUŒ݉ž+ÍùŸK3’Ù.éŠß:×ö4!'>¤ÌŒ^XÐÔÁ\Ç54/¼=•xø›M·ÁÚû†?‚d–û}i»SA›3@ôÃ:»§ÅóMÎÀ&ö%ùïéšÌØŠc¤Ï÷(½kKÏ¡±›v‘ûhhƒþÚÿÁ£MæÄÑ¥4›±S˜-Çl¾÷ Nj)¯*¿Æ¡^Ùfjb¾ Œšt™˜¤f­ÆôÑNYÍ/ؾòÕ1»ŽÏm(¼xސYûy .F6Rúk4¿õ4WáÌSzŠrøº»ßhPÀ?Ê®Œ~YŸëÆiōú7Bà¿Uç¶4eu¼ŸÛi=´ºØÚ‡»G”HÖf§áQQþæ‘íFë}T Ò^A„¼ƒIy’ò %äkÿüƒðwøYÿñ?øä„ß(ҝDÀô( k +íýmZÔQ¥nx–6¾ ¥¾Szioäəm¶{0ݯE‡çº¦jë»!W¶$êñlbì“ÞÁ²4¹I).AŽa9¡'IÊa$<çØdÓ´,2i UòޕSKùÐSwµšÔÐ6ð,”nß*2TÝ'Ü"øfÍ@+æ)¿Î}*„ÐìêýÒ@&tÚi4ùòà'êš~ÆÓÎ0Ë4Á®ìšiÒæ)¨Ï§?`ÔV6•­«![² úԾ߿¯Ñ]RlݱAÍ\«uز J~Ñ©M¦‹¬š'ÑD´˜Ç57‚€Ds ©ò ?U\W蚢»^Ï[@‹ +†–Ë#vldnÃû RZß/¾51MkâÝgÕUÛjjª’*[CU8²åøOëÆÿâîAT{ÿ«+6”WKÁÙŽ­‹à„áÝÿϐúÞÔþ=Hʍ]rÉ+,ڏՠz‚qãX!x¯ìšÖ¨gëšÁã,dõµ *4WN?"€Tö«wãš.· ´R–Ú‚Tƒä¦;Ýùµµ«c€½Aê´á³4oÊ-ù[ÓY–jÉãšË·O7fk3ý°‹~úŠÙ­|hGŠk[k <3Zþ$ŚÇ¥5M³|Ý tÕC§*×Í5¿Â0g.©ªï¢qzm6yŽÉ®)¸ìšácI؝åQ(6/ Ù·hÓPš 4C]kÌEHÊEݰ(nsQÔG?×}›KšgË#mª‰—Û5Ýà΍+žB W›ö nS¡Ì¶üוVAÚè^±¾lêdY—6£]8湪s[5Ç|:^#o[&·ª5¯gN×Ì9ùH“·YÏÖìùþ®}E§úæº-ÖÑ ]æúwÌ®ü×=˜±È¢²F m¯H×=S¨Ö±¶ “M¶ËsØ]¢ÈsÿF»üJ*4šßªÉïhkÞp×L¾¯çsÁ¢U«¶pȖ™‹é¶0·f3à2ìċx¿-l_I­Oísü˜Kú¦ºìï <éuc+F(GZm¨ø++;f½>NaÆ5ñÊo/ñÞ´šùùJ~ò’ ~ÿ¤×îÒñj[]R?Æùöê íi¯•ˆ×-ˆ±æÍùÆÃnQ¦­ûxÏe Ðc¾ò/Wª4I;n"$œ–åÁ²lƒDzШQ¦ +,‹´7N§#åÑNÃÇ9QÙÀ^ÁŠ6¨ˆlÆ—ÚØW-¼Íò!¿:N蘣…hßþ‰Š[áåíVð¼_ŽÕ[ÞyÁÛíñ¸ûyƒËþA¿Üƒ¹ÿr þÿÈßî-ÍÅV¿XÍÖ¬2Ñ´Ú òMô[òŽÕ_ꣀ©ƒ½7¹~ŠŠvÁðï p“Í3þ6bõ4ÖG®÷Çþ[úñЁ_+$ÿáo¾°§c[dªÆ0¿¹ðºÌ[ILs†TÍw€‹(ÉÕòª™µ—åô@û[S†y–)7j¬ùØxõ·îÑ¿¥6e¶G¯‘[5c/,®é%yՆréi¡éh卫 5vðltMmãPr aà1Î ^"¼Ý4n§=}ª8—vVFVlõ?°q…Þ¿© 7Qĝ¶c¥ÑwÂtcœNþt¥Ý´¹)¼‰êlÿYŌÌ8±IÄʁ%âÁKN=¥½=£ŒÖÃêÒð´q7õy¾8åƒú.ºÈ8é{c¼E«>\k>wÝ«¹m£ ß «Ùƒ¶ËŒrŠÙÉËwYÞÉé +ÌͯÉ"x¸‡'gH6õWf‘?æ¡.m}ÜDà uPhäâK?›_j|höõ£ìÜxây1i¢jÜ˳|‹}’¿ÎsY¦#M•Ö…›âÜ_M“ÕÃèÃ;æ7'ý8kp€½ZV8„åîôãÝ£œWëó0ïÖiڜËù¬ù¿ü“¢¿A³èG¿ Õts èæAÑ̃£™G2ŽdÈ:9ts èæAÑ̃£Ÿî:9/[ö¶‡G>Rôð;.½<-ÓÉê­¼ù~«Ï’.ÏòVX¿—¤Ù2ð÷G˅™G6˜—rÁ´«úRXYlÅÀ¼ÓI†¸]]0Rñ܊^{K҂Iu½¶^y®ˆæÕP·ð®PtË)zOñ/¾¥æÄ»÷ó.·øö¡wDu3qYn„)uÁs¢ +^šT‹ÂÙ_±¹‡,/4]qŝ¹™Ón`-xRéº_Vhºnó.ê×åBᮋô–¿6ºå‚æ‚éêPuCrã–[ª +^¬|úкp¥Ó†¡uÊßޅÖT_n\yú's.ûa\…èxòîñ¼Aß}h÷÷¡{àºà¥ø4n_²ÕýP„°®ʅ.ÕÝKÇìP]@_„pL>@CX]8Y/¸vá….ËêË©ùÝÒÍo¨æàߊ‘Aىt»;مð}YþïÇÄËÔIŸg|‡¬YnŒ. ¹¸$)~Ô9ÑðBòþ´7—íPÿ/%uð¹`¥Ø¦nÀ¹¸7×7Ñ£›K¡Y’èWbŽmñ/,‹<¸Yà¥Õ< t-‚] wëB—bêcö¡|¿2]SÌk_—ç z ¥á(F® ¨ ڗVÇauA|dsϲ } ƒ 2ØW¡z ¶}Ø^¼/n ê}°xËò¡xÞ `PŽp×ۅãy¡ øY@¸€´ÁKÔ )z‹Ö.Cޅ؅/8ÅÑïìÈZ ¥ùì<½Fhë‚øAn¸ ÷…ž › a‚?\ÿz ¥Î¢ranáqá3<.X¼Ä…/2Ã~è.“¿„ù5´á{0º½è_S„t-€]0]xRõÅ»ì0«-{G8>æ— eÞô/7ภƒ +^¸âó!löL­e¡C¼¹öï=#¢øPùjLæ?À­ÛCè·ÿwó2´÷·__§¯ŸÙ9ŅÄËj'öÐÔs‚ þ»GÙt],ÑäqésaCý•¤,[…Ûó³2Í“?‹OÇiYߺ?Žß¢™°¡õ:ÿõÈÿúɾó™?ŸQ1(ÿŒ«ÑãýïPrÈú>§ŠÛC—]ñã4^ÁÞ½Ï]\‡åÍò»‹¤ºNî+:9ŒÔ-ÒeùǚKÅùG0¡ßóÏ&»¬~¦¥//2ç$þ‡Bnþ/7n¨¥ÆŒ¹œã§Ó=&^õ7‚Éçè®Õúiå`ù*î҃¾Ñ«òçõsgƒ?¿¶Ì×ñ:³ûŸ×UE»ÈÃ{Z.ø¾K\²3¾¦¿»w¶‡ƒ\"^l}ü(—E¹¨ +a–DàèýÊ!Fy{šp¤Ã¼ÀÌ÷==ÎsK>oyaÿ&°¾fnÆLûs«fy›“?UÓyŒòÉݓ˵!äì•$víò#uF»0¡ì³%÷77~œ±<f… —’Ê®äÛçxºBÒuüÍëÜí¡Ë/okËgýFþ›ÿQ=ÿQ *¢“@ŸO"oµýRú›¦o‰êúlçò*ú—Æù_]^M¶¾ìý| +Ú~ Ø)2aeÑ-1Ë`ü¤áhƹÍ@,ÃS'ÞQs©q™ÜU5OYS-U=¢KהÑKôÊq}ýuCÅ`Y°û²õ“Õbù÷½uS_Æh{…Ë©žP¬êâՇ.:Q³6ô?þ™íã£8Á,±=£~‘ˆ­+˜Õ¥}‚l˜‰ÆsXy®7$Ô[›—ñØð¡óô=û£†ÔãK8îînn| Ž{©,KNYFOI²rLYك„ÓÑ'aŒí²­3ɗáÍîêöýaZP{›sáÍû7E²»Î×Ó§@ÿ²`£íaÏKÿ€÷Ÿ ,ÿ2÷¸PùLŽÕÙ貦»8¿ÇêºÊ™:ÑüØ%÷ŸÈŸÌ°©ùç§½c­„á@. CSƒÁ#y-Ê~šáHXž*ö[ÊîPïËOr}S£½Ÿ1D‡‰˜æç l\ÆR@â\ԏ#‡u¯›_YÛbäñ½—/'ŽÖåö‡›êËùѹ9~{êO4Kb]É}ºêÕ²Ëø~áRɞX×U.I»%þ«M6K +ÆÏ½âszÏeì­>Ï/©©ü'œtú\½\ÝnM:ÆZ8ôUµ•E£©@/y]ñ:¾ÅáÇOÿsjv¯ª8JGۆ>g¶ÅLSƒþeÍfq,}¤ÙF¿2æ;.W§Î¹i—Êd£²ò\eZYdÉõµù «ŒÌfju{&û[£Ó…Nº29~¾AX¼‚qybò +Åä‹È×þG/×È~í¹~¾9íR¼Ë”•ƒ”ÆÜ$Ñ΍Ëö%4d¨ÀΌŸßLßóÊûþùW® nupØ¥^°¡Þ1ÜtëEç:m йaCënêöÐÌ«uyÄø³Ÿ¯®Ðg4“[:ù9Êògæ $杴睊iS==–éÑЛ²DéuärîÏ£<"•yèëüç2¦N„§8í¡ð +Údð ýã²b“óÇdÅ'׎ÉåâP–œ(|揿tSÓJZ&߅Rs/Šù.zô:n?W7¶†ýÓgª[…½ôÏI—S(6)áQM?qsžsmYiú$éð¡øs{'%CǝÅÚÓþy›ÿ¼¹dÚð¡ì':ùþÆ áìèHËX},ÿßWÜfJ6ýôϨ¯îó¿vñšDûRnXPñùII¨o’®ÁѦOs=˜Tú«¹Î§T®å£¹TûÉЪ§ÅT¸\˜”ò|ê˜SKƒ ++ë…&jaN‚ ´3I™RîüŠÒÊ5œÜfp34cJxĹ0¡•=i҅´J÷fK"Ubu1nE³%‰ôò¦ýùyS~ßeMûæåKD0¡èñyôUeàf~þ½Q–A«/Km‹…•² ª6ÍÃ*v~‚·m œ˜PîïÍÇà’S¦Cù=þ´ifUÿd G¥_Oûêô½¹ÜR~õ+ÒæÜ\•JÙ5RCycâ§E–޳G‡y»«ê\î\–šw§›Š' ²|Î@:›ôµ¸S©O÷n¥'ϲÄÞ\žVî§4ÅK’šGÕ7Ó \±§²9]VG+ªÈåu_ÖåuS¯ëºã¹L‘XN¿ÏõGÊ¡§] ŸÈ•Clþ/¿tU#'°¼®'ü¥¤s&<¶c;˜N7âutýC,ÞÛ*ï$TÛ*°P–9¥E†‡ïz{uGV¬IïM?»„KE-êölr’WÕX;<’fØtU°òëÓÙÜ)-’»º¾Â·ò»©Nè[›ÝYÉÙ&mgMC’7Nç:͂tŸ¼ÔcË" /wWÖäl3†×ÝÕßkÊÚhá¦/Tdï“ßâ9ÅÌ&@Êõ®ó[:óm»°Í¹,×ù¢Îþ}̞8·o” ²kÀšÕ¹e¶µ‹öÖw³Ê©°¡–ƒ)¬+= îZн±è“¬_'ePÂ[¼eÖYyR¼]%fqQ‚u,rë|Ô×ê1mcS,ÆO•ÕRӚXeË8n†áIŽœ*Y~åùiWàVÉДH©éã)ÝØ5›ñrO‘r_ífræçi6R6ç7•=v¬4¹y¨™fÉétiå´7Œv¥âÎU +ò9FnG(ÍÚ:p¡ø–`³UŒuAj°÷”¨Ÿ¼sÛeOîË5÷—M‰Œœ’ÙZÛE8u2Ûk-‰ea¯M©Øc ®Â‡AÒ¸éU²ì¥FÈ<¬é–à +ì{ººú~´:4E,¼æö–ÙÈýÅf%,-ìü¬È§a󪦓èµsx¹‰j®‚´²dö®›ÚØÃ¿”üÞWeú/ìa{ÛWÿ•¯½º; in P»Y:0ô<7Ü¥û“¾Où‹˜Â‡²s²y'C%I'CÝ»©¯)ã$ÅKS:ɓ%I²xŸžÉ‹ ͨµ+M’™>v8VEââR-á‹M= ´ÕdYݗfú»³~ˆì²,ï +ÆÃ©Ð*ÑKùNÂ/8,ñ7(nòE@VZ’–ÝҜ®z¾–©¿‹ÈU…µ8?.|ëýϓyw–kÜ]½ÕÙ{5|(|ìÎg§&æäó5"±cêß:P;ouñè¸úĶ*Û +aO¦žTè²Üâï$S†mó§L†—|˜ÿ‘ÞQ/5¾¥™ûŒ÷‡î6uöåôEP¥Ê™¥ ±E)aC¾WÝ©‹¶—…뎿ÒþúmXª¤)w\v·/qªT¡´2EM8›L¶ñm‰Þ³ äð›ãŸÐSõ³‡àtþ¢&É}.7Ú¯m‡Ï–B–Àö]’Ø&ão̶Ï;F=žøôG/¡<ò6+ªM’ÖE,õ©8éÔåÛ•…ñ¬=RûO[-RËRóˆÑFíA+O|ÇuÕ×*¸¬øPøºN´©~\-™Çi) + y×Rxí~¡ï•*¹bã5ýýuÙŸýÑA¾¿¥©»zÇ`û±¬ªµEV†éÃÊ-ȹ[CYœ8Ãf%øb5­è1턊LEöÏM:—˜™„ªu K?™u¦žoG›*¨þ}Î%ÕÍÉUEñµÙNŒØýo·ÅÏFœšÿ4<¤òîö¼¤4‡Œ§hŽ5}”iǞ4§ºîêäèJI[vϵeßQ0_2·¦¦t¾åS +Ûu›fêi)Oâ{†þÀtJ­Îãl™\Ë5Cj£±ßAòÞ¼Laî ÞíZmÿ¾‚ˆRÌR”S +SW$4¬–F~,$Rú”Ò„0lƒ¿6üÛól÷m„+²¹$RˆŽHQ;)DQ +WM1‹d—Ia,,ÖÚc¥´Ä+Qi !¬,²ŽÑ4)L?ïÿß¿~û÷¾÷Þñóóñ᎐¤) ±¦–X®5¹]’Úݕ»ƒ(²º­¯[Šª·%Yex'&à܃pEx²ÜÙ+UâË-Á–àÜÙn]¹7&æÜ›ƒê?v²Ë$Ž;OꝎ§ðÑ׺™#-œ'![qó¬1vI/¼ó¨ìî ˆŽåîÀnĈŽ|h{~5ËGœ.]Ó%jݸðæéFZ¤D?·]Ø/E¸lD®¥êÆ/L¼ý—\%៭µ/ ü€ûÀ—ÛߞaŽŒ  ºL~àh—‡‹½0¨KÀ×ËË3 hÛ¤ˆF^/”n܈v°%å\_¤–™¢߁.º²Xóè"—„j¿@IË]9¶˜ jrn°Ø {¡¬Ÿ^i± hÀÖ/aÓ:: :tòå KԝV4¼±oפ‡q-]‰5”ÄèÀåÒCÃ֒2ý½Wña‚ódæ]öÜùF䋵t«ØfÀ—›FÀ¬˜ têwvåX`ºv=“"HtwÐ8%Ó¯$ X°Š˜ºw‡.ÝnB*©Òñ&Þúø`uïN’žX qd:`ܸ ˆšrÌî»zxF@™,#Ý3)çC›Ñ¯r•†<XƒYÕðòAÆØ€qàyð9:Ð>bY†(€òøPçéÈ hs¶4mxF4º-ÃgŽ$ä '8×ɾ•ŒJ3-¦•¨Ç—|@B$9±Ê˜à8h09@9`9 9Ð=  ”àv0=H*QšÍÁèx08p92ï)|»±/£³.þóçGÖ^ê^@é€ß§‡eè ~|=˜÷>Ǩs|>°= ­2¬ÈØð;`7 +á`z :7J!¸`zð:: :`::Ð:ð;?Ø ;ðõ`v@vÀrta·n¤÷—£(°5@v`xqÖPR½Ó`¼™쒌Ênb=YøÖ|ý2lt=ëîJ‡9X¨ÿÿd‹FlQ–EmoõÇúÛ³ÿ ô¿u3m~?Ќ”ì,½±¿,ÚSW÷·6ÀÛSi ì ±?úб=þ?wEP.(Ôf¿™uB¸³tÉý{‰i™¥þ¹Ó|cvaµÚ›áˆÐDßû ,øûÕøê“øùÊ<ÄJǵFImîÁ¥óOUrq˜4z,Œï­€b´ü֛ÕúÌF^xÓf»ái L¹líZ²Òû!´:CwF•6v³-ª—­7=ÔLi¢ÊšüjÃU×Å#íª$ñP Ûgâ û÷f­3ì7®—Å€ÒƜ6 îv­î͝eÀûs|3êö#eV@uVÏêÿË#«çîͯŽ¿¦T÷:>°ßžžÈÝë-MOg4De—‰¹f§ã É:iN¿‘ôúيج.^döèǖðzKUYhÚyސÛŠÃò³¬|O/Bj,«ÏLO +LMiÞOwc·½Ù¿Pz$ÏsC§—ïZnÅ^âñ$hW‡#.ÐÄadÒFÓxÁ˜«9ÞñïK¿þ¾1…=[N @ó} XágæO5Öúwmښ.ÁÉ1ô?”ÝßòßNõki[gl,¾›k`фZoþ4Â9Y¤7ÇôÚ©vÞçÈzt}¤ôäGÿ¼~Ӗºõ?]êH“‹ûoRëÓøÏN¨Bû×ÚÌ#Or_¹=Ê c·”’©o'%Æ{²Ñ^1zwz=Ž÷ï½ßúòÏã=i}¨zÞQ%é·^·î=lŽyäÒM·xÉ6Ž­’lÝá×­ýîVê+ ê$£yî£Uû« ^”鵦DÉôVôÑaô>ªnŽ‹½,¾ÔڃgD/5¬Ì1µ'RªC53·nœ> dêþÀ}úS|1÷÷Æ¢7æž`Ïjo`5>¹2ükM“Ëç'[˜N§FÛ›¿ *Û¶¾Z3? )K[ü̬‚ÕÞ°¶Ýã+•¿Âs— ßëømµ~ +4S+¸ÿW£7º<ÀL C¿“æ¹bMÒ Շ7G,ót£ÐÀ7¾ŸÆË!·ÿh/ad¹¤îÞÕbc¦Þ÷:lr|rt q‰W2§áù°F¬2'w—=1çf֛¸–Íæ ÷z0ñt"ôNݚ7«Ã04rføc7ì,½‰ø©ÙYqVEaÃ&÷3ÄaüËJN°Xóë€oNlØ“ûKŠl¾T5=¹Ì5!ˆšãZjyzÃLMÐ¥>Î͛¢‹MOï“þQ-ú‚œ'ö¯”>J‡¶7å¹›€diô‚´Aæˆ!uɟ‡…/¿AN­'{HxyÑÌ>µ°¡;àÂg4Ín;ĄÝ[Î[o½ÚòÚ|S/ëäD{4Í Î;ùv}P:¨¢ßž7ç½tíMÙôõª¡#F@ë\fkº~—eû« ¥¸Â¢QXðQ¨ÙCó±5p‚ϸ60Ÿ.T©ò¦ìSART‚%@æTxk±pª˜o~TqÄ2b7÷ãmsé±B­âÕbÙGÏΛ¥6®cÖÍ¡Çcëp ŞšU8:'·¢£A‚Í¿—#“b\õ,j*„Éíðv›X"Õ´J™ÃxM8ÉpKÃU/–äð \nÜÉf‰FÚ鹓P jôk~ct˜j‹Wø + ;¾Ñeíïð¡ÑF»L~â2[°²÷b<èîùD/sQ,ï8íÕ+iYµKŸÓ#QùÔ½sPìûûº^ÖªöÓZé´På£kQISBe_d¡T £ihMƒ TØ7Kû¿Ç«6]ù½åÿjeß0ûieÿýÏÝFl?æŒØDgó¼¬Úê©Uú®œVFwª7äut¦EGʪ È®Rªî¼ž_$oªW1*ç= Ø~Èr[wˆV€n€Å\“ÇåÊ›ºJÒë+Hª·¶¤ÍJ,²¯G÷c]j¦Âº:¥xÈ+§¢š^A]7ÉÜ^SÄÜX¸ñ–.ã¸Wo¹6Øñ]ªöûš¢»9HÝéŒEvr“VU¡5˜ø%nïJïn£7Q¨ÇÔcÆéj7ë£l,•Ž„J@:(W@ÖéiýÔcªî;ÙýÜw²WK°Ýì+¸Š‹g2yÝqÚ¢qbŽ–6‡r֟mk[ßaµõÆëíƒ'ߛàÒf_^0S +Þ'ñE©ü­-e'Ü@c‹ÙÐâ4]²ÐGQ½V|I„S¼„Í•žýË w]Fv ƒ€ÿA˜ÂCfû—ñúRnQI?¼còf€Ë#Ųå·åµr¦AnÅ|²Ü\Zm°LÏ* µ6º£¸kÆ]嫼 þbX1þ˜Ô€—&6TÍ8«öån«öŠZ·D4²³²É0× l30ä#.J%ïúìÅ$+ÜÞëM~¥è¡¼Ê¬¡1oB+½Ò g¦ðØÙ€ð8ãsôQ|êÆó˜û¢Ý´Ž í]}qé¯×d'C‰·¬¹±²Ÿ3 ïY_x«·°êµk֛´=•×úuSSł·…jÃUJʯmn^…Ôɗkµ»©¹WÚ¾ȑf¨ÕöۏAïÃ3Aîu_imÿHlp`uxHT;ªûKŽtTŠ•é#i FÏÛY…¶Ùôr•È{i„RO»Žž]ÇO$KU¸ÐG€/ÿ íÓªµ$mÕ¸âç*‚ˆµâýç‹dG#!Ò[“C¯fK_û˜ûdÁ껙»f^Z_×ͨcӞŽ|¤`Á‰¢ÀŒÕ›ŒAWß» Ÿ¸ᖻŠd‹÷эú¤wÞa[ä6û1ÀîÔD£ In•XJT›åIª‡G’aW[x)-2¦+‹ +šßŠŒÊãYÎ›àÙ×*œŠo×f ¸¾´ÕPä›ï0™µþB0÷ñv̬C½¨oö#x}™¢ìü}nâCHoƞÍz„L™C*–7hÛی©6äaE4¹[¤Öڕæ¥zzNõôx8œÔÑ_´èOO'»ÕÐÀ–¯À0¨ºŒ]F.£Q€ cßr Ý÷Fì3EäO†µ›êïmY5ÊÌ}ù抔Èõ0¹á¯hyå ÏÇLð<òk~9—¨ïšWQ~먿uÜoÂî7áwðº‹÷]Eû®¢ýß ‹÷P@_UïË«õàÚTÔPÒŠCZn7Ÿ}‘E´Gç!þ¥î×gèM7êýei¾=)VÙ®6tôXº´ÚšX=2ÏXv T%:%j/Ÿ(ZŠûöؾùõý6îŸy‹è“_³¿4ØY{ãÊ *$>¸ÝˆÿuU—R£@j>TçÔhQÝìëDaÕØ)\µB¡™ÞïOü"ú3ñòøô:voxyuª4<ç'Wõ®ÓkÊ"ñ Ñk÷´H¹÷ØÊ¤žß™£Èµó®åBÞªÝYº&ïyÉV=•,yÈ+Ö~r/7°²EKêpÓ¨Ê'ñ*^R#EÌÍ+ò>uQ(µYKZ}5V/íÆ®ªÛûÞOGE#u捌5'‡»$pk—£…ká+QÿYYдõ]éh>Ä:¸ ?ÕÐÛ+ôï´5¸ý·Æî45w» ]Ɔ®ãCWq¡«¸ÐÕÜhjî45w» ]Ɔ¿{ær{åB®^pÞò@si7,—cWãBp4Åá~5*…L½Ê–3õ.ý^'ú́.îAúp9 9à>Õ&äߑsùw)Søðšà»Ü¾p zÙ/L5à~-Á—ÝÝÀ—rߥܸÌÍÄmzQsyuÛO/raƒûgócmÀ—Š+»8+› UÑ\ËÇ9£ €Þ8ŸÃ¸$¢é=c6ßÁütT t‰ð@—¦a^D í*…¿œ.“u©wçT^nˆ—}$n­™]L"—b:º$›¨v`v©EÓ÷'ï¦Ì w”3D]kè$Ýs®Ô¥Q‘º4»¨'ã¸Ä"è½h òÍG³”’aŒ²q˜ ξÐÀ ÷Ž?P¬W¯oãÆÿ£›§.êÂnã÷í@Ûÿp¸È ÷øà5àK­T~\ Ø:q•¯&ð™ú¿Qc8¯¤²^uÈÝC~J.³Ì'b‘º—VºØ&áùªpàh‹°óàtàvÀe<û q$nm$]ɏœ¼ ÄD¥\­N2=ÒJžŽQÅ:MË;PdmzU ~xЗzµøpfNá鋟ËܘŸF­«o¿†Üoœ ´Ì-͇KM͟« +Òmù6ýXd±ÕÖ$ÛÛÝï0'êËDê„/dfhk>kš`½Ÿ\’.«¸`ÕˆËQ*p4`s€oÜèaÀõR£Šp5àv@n6“/i yð9>ЗÎà`ˆ'6Ì4PZ“p툼°æ¬½¢;.ŸI¸„½:iË׉®s†/.Ã`9©€ÝèpãC¥b눆Ÿœ°qİÇr”]qÅ < xd:Þ,qΨ‚ÆÀè@ܦ‡)àkæÊcCóÌc†Åãmɝ^iA¶ÖdÚmº,¹Ľ5 N¬ `Àà=h HåéýÓøP}ցÐÔO¯/sN3㛰5 zð;P7À09`5àvl@Ûè¨8äÀòÉEÒðìÀ™(º*>Fށց·ÑL Ô ˜ =ø1øüÀéÀñÔcŽ05€tÀxšA xЈ¨‹Û¨|ʕ +ƒl¶8x°:@6 yx#ëŸÌS, X؈ ßҎÀç€é÷@o”áâÀë÷TèU; ;B T4À܀ñ`nàs s n•#÷œJ.““È—©Üë`z 7\ˆŒ²¡ÌsÍð>ܤ ÔG£Ë¬É°œÙ®Umµ,•É`}B¯n‹^¥ Føº +ó W©ßïÑm·wyöÿ¢¡‡^o'F䯸ä"êýû¯¢Á=¬Ö™/ö ) ¡5gE÷‡>lÁOš…yö'dÝQZëLç¨TaÇt$ß*µXú`²ˆÜT65)Íþ8ے`§95ÁN §TãµfÔeYÔØ÷Г‡ê™±àÓ³yýVL¡ŽØÁýT]b»‹Öl +.\£jY¢=}¸EÕ¨Ï>/ϸè±ÙƱ¡O«ÃúYÈJ‡µ·¥ä&n ·SŒ¨pq5:Ÿ˜‹«_²p^SãŠó¨ÉÇô°´µ8\TÚ·³Vh'ȧ+½NV©Þ* ¹dâAø»ÿÌ¥5Ô$TžÖ]gÈ%éQéìÝS2²ù£½­6ˆ™ðYس'/l´‹¥TŠ4eŽŠ3ð'EøÃœK𖈣O²ëEÑ/ÿ[gZEº?[gZEÎÿggïð¸|›Bï ýò ¹|ïöîô»V8úî·Bœ¬ƒò!ø;:¬qWõöuI¼ÿìòbŒßGTÌaî'ڊŽÕµ¢«.ѯ?¦­—Ïî58ñ‹ª3X̌§ÉØzfQnš½1W½ù:žE6õDãEhˆþÛ`â¢Á·#a¥Ü˜©T_ß\=u)‹Î•6hö¡ñ]¬¾2ŸÉŒ䙩“¶[¼Þ”+*NïIµ}Ó`íQ_+š+j>ÛOŒ‹[áÝý¡m¥¾:ZäýW®÷ð›Õ¾ü‘¶Qsz{¢ +³Kڈ¼õ «ÿ¢‡˜Î~’,jYÍ=ž[OG6¨°§§Þáiñxÿ|ÍâýRzVk§€™›ô0Ñ`C%Îõ_)g"sB´X&ª´œ’o™23»ÔÂj¬R¾SæÓÏÚ"ÀÙ8„XuM©¼2Šý_ú«€• •švPjÑÈ­-žåªßçEz±`‘D¾×¬ð?9 /µ œdWn©r/™Enm?}Ry Ü£U©©ضŠëéŽF™§I0§vŠíÞÄÎ6ò]¼XmµÕKE€˜â`ĀÖ*ño—4)߷ɰ³ÀÜqFÖÆÍYósß·-L)~ûäSoåí¶Uf®´\È¿T’yëxõŸ„Šð_Z"¼7©¹¾ñ g->Kh®Ô~4D4öy¾>F¿€µ\”ÿûUû*ö‘V}Jw½¸­åCŠô,ý¼žã‚×U«¦Ç7 ŽxséþTÍýÜ ê ¥5}“` +%"«‹ÏCÿ#e»R6VFaŽŠúâÄGyÜÅ%úŒ¼}&õü{é³}Ófû¦Í÷M›î›7ÝÈ.ä_/ x¹ÍöKRqüuA_ƒ³¢‰D Ô4j§‹È3_Sþ(°n*++ÄB£ÿYµÅr¹T‹x2Rb°jE„±éèSqƒEHëR®à&\í:H^µ;ª|÷ɨOEƒë$ízVU£:ðlû$ø;…Aâ¥?rÝ1«Uë»ÊñÕ uڝ¿qköi¢6u0¨uW^OJ–]tÃë™GÍÄsöÑNê+bjY«÷Vè¼K’Ï2‡êç¼*€¸¶ÔTÚÀe +©¾¹2¥u(Ò՛ [p•"ĕ8‹oÏR}ËòQa»y ž;æÏÙêªw×2Þýî÷ok㛚i¡];USÓן&°EÆ[›çîkœáÒ³M·¦uª\IÎZ*7¬óÏå"Ãßlˆ‹â±6Ù—„Ĺ‘!xLK™—„ÄÞ÷\U¶¨q㛗bª;zõ•VÖðU ÔÞNr_"¾ÍLËíº+ÿƒ÷UkœøÆçX˜w¨±÷~nmàìk‘A½ÿ¥C¯Q oïjKmbñÞXÂßÚ* 6«Ei“Kþ¢lª*ç^²ŠÔjk¨„¨}Zo`ü»?ÚT@°Y‘Ö‹ +nBVí3(‰ÄV{7–åUƲÌÛ"Ç“1Ѫ;·°­xhŽy¶|ú‹ëDX÷Ù»¼TC1m¡5Qý·Kå>£¥¸‹ d:mª¢5ݺ}±ÀÖbÍÎã¸Kh²N.ÑÞw;¶2¢YCŒðQd«SØØJ8«¨‰'Œ¢œ‡h}{ápNÚ,©Š‹)ð)6;Ô²mõUw™Yà¥ÿų[¹*…H²­òlß­Ìÿ|r›æmÊu0ç +ª¾­í£„´äèßµYýß²ãò–u|/YX-œ4\ž~×ûۀªø5‹ü¢a'‹Èêöÿ$› +š­y£´š›I‚­"ϲ '[JÉÃÍöݕAVƪæª-¯áHÛ¸!¿†ÄÀfáºÜçW鐒Ùղݼh±£‡¼m%êe +ҳźÍc-Xmi™1h®ÿÃôÎq Õ^á¶ì*¶©ïU°õìÕ«W}ck­ŽrIÞU°/÷T(ª €­Ê÷îÏäœ@ÜR•€JIú¿ÛVÌcŒÆ àúÇË£“YÃŶاÖíJ´°ÑhŒ±ÞMó6w¶–y•lÎÒ½>sÂÕd"Ñ÷7-õ¤®ôZügAŞâZdÐ:Ԟƒv +\>J«æbÁòŽ-írQìŠ)öŽ.(ãþ¡7g÷V2-kອޘ|ÈÆE®ÿIµhãÊ鯗í"×÷éq×Ɏu†M¶ða;]Eš-}¸ÒÛ´&üÕGˆ~•7 µÒ}­£i½MOœyPïáLk ³½e-*ÁKg6Ëv¥Æ@³2‘-4qh•^3!h¶ vê֜¥T¸k†5sß^øj]©~~?LWygEæ÷ÃT}4Ì¡Uj¹ÈkmÓàCTGrŒêa¿~›AÛó¸J¿Ò¦àP}¢O2«`žGþñçÐÞÏ2›`µßŁ=wm˜ÜuÊ&ôlëîqö\ësö7ù´K)¦³å¦5Ûû;¿s;UWW9¦-W¼·,ñrÕêJzm!Ñå"ÏÙÙÕS@ýI#0ÊJϞf1\ ŸÒæÌð‘l¼fv¤ðD´Œ£w­”‹e[ᆠŸ?{·ÙA–•“Ljí 1wß&—NS®œ§f^WóØß²B_ÿÜ¥^Úìu趤ÉDƒÆëå,˜ÔoõyUï>ê-]’eºŸ8× ÷±/¯ë1ꮖ=»ÜöޑÝTg+9$ÅE§(øÐÌÊ'Ôþt±§´© ˜ÈÜÿ)“¹:fsÅìs—ÊïÑîP<Ó¦Ã{Qº’Û!ÿ½L¿˜´:j˜{š6<Ž×Éä=di9&k»×dŠùxSÛìV@g]ì]ú}PÝÉYÔ.Ên·Ÿz‹<ü½óFU/ßo¼{ºìa¼YƒüÎ>Ο^®o-ã-ë6¡&£@kÀ Û2äëUQ¼¯ÏÖy+:ˆ–ˆtk›gƒdîšÝw|‘©hEÞê{˜'¾Ç¿ˆÈ©e‰­¯æíõ0ÑJÿ‡’J“³[c•C%áµ.S7¬êC»ûxQ9 ò´>óAà5.E÷¤B_¼‹@ۓJ¸=g’Oí‘Y‚ŽFP]3V cR-j(YQx1Ø0îÿmOàîNœ®5[cã9göÒ³å|ÍÑo$Χ¾:wƬ­ñêJwʔ Z[h³_2rÌjVáMµ’‹JÉ Ö36·“ŒM“’=€3…ÏYɅäÏ`Ãþc4x3ÑgÒ¦öïÝ1´øÎƒàïK§TWN¨®Q]:¢ùTXĜþgs «•³j$x¯—Öq‹´S»¥…%-­‰ž†u1n·ýË%œ}¥¨³„¶;+)ò"¦gÅ{[r ß°)¾<ƒ)µ‘ù'XùsÙÉò0ö^1ÕmïÑ:Åàϯö`dOM‚™y0Y(i¨•ß1¸Ÿ7ÉxGYU"¾S-ª¨.stÕó6… ¸ó¯P—åQhõŠ‹I÷•¶¨áµÍ:˜K®õW_8ÔyoÙ ü½f¸Æ—rPý. _¦´Ž}™«yDÓUUŠ´LùB<ã|™å*²à®€½ g ŽT”ñöD­›Îê \†æô¤¬—ÕK»ò•.ìb|:Ê lìw¨öÒ,½}á¢ÒøôùGëT½ñ¬ò°YT~/·Vz8åxüѵu þ•L3+ ACË&w^ ùÈÖþzhYsÚ¸ù¨h³¶•0¢v,ó)4M¯Õ»Çý­pMµÌþ;"ݞ½ÊXvïehª‘jæ_bÖ×ÿr,åŽê;룛èué-Uÿ'éÚì)n]<êa*g?äÔín©°s_Áî8Yà°²ŸQ‡a/oú$Í_ßèîž%Ý,⍡š2¥߆å~¹¾ËáØcjÄo¬ }ÑaRN#žyaRo/ÏG›L1×WŸ{Ö¦¼Ú¼ø%û!±úチ½”~± ¾ë M¯o«+ödrċj©¿·3$¸K6ˆö€{`>(Ã.Êó8րہցÙ岦ÒDÁô2Ÿ·Ë{Öì€þîXû>.±¥Éæ¬Àׁ²ҙp>\g˜>SOÍ«%À>$ÚÕàNPR®Øø {0:°=©. õÀuà{;=ØH²›Ä6ScçÍýØsy¯2h°°yîÏô³½7Ó Žt6¹he¯¥Îªó:öd¸WÜÆç‡­’©m=£ãm-ð §Ã 6Fû¿l6†dóá¶ÀãzAÝÀç}èô09 ï3L±%€YM¯Ï–†_õ Mõ‹?ñöÀsz|‡Ôžó±ð‘êø M÷›cjß7 [P;®˜ùMŸpÉöôu‘po“UP8è£ØÀêÀìIp7́ԁ؁ÄQæÀu€vànãÎK€}Q^\^Ø´1þeÀžÈ„Z ÝǖSUëŠòêëãˆÀóº!ïú#Þ[ߊvr;¸Üì&Aòš›^mO>ρéJòêâ‹C"w€{P=ée5y¯.Ï%$s`b¬2༠>Q.û 8Û°Ïe¡ÿŒÇéÃ-ëë‹)³ùYa¹ÀËÜÈÌ ^—š| ÀÒ§Ö\ã}ú*p'•œ¸vnxïH9°:À8(ï`{ :À=¸ãJmh +ˆ9Àì€ø~`¾”ùM ÌÜ ½àîàww t´=œÔ’oP~ðC)êÀöv¦Ò8hW;Ô°[©}:׍’ÆyWC=ï-–Ùl¦oCæ~Õå4Ÿáý´¼Æ§éü˅øäMŽºè³úJ±ª>jTDôW ø,+Sˆ›T¸[ŽåzÙΗç%vJŒJMh§òn˘²†¾æo×¹o¸M˛‘ñ› iÙ–)ñÍ&qqñKñ´”±ÜԜ Épåþ!gÊrÝAÊI(̘²Š’–rPÚjV±ËIäûõl,ÐÐњ ÂîˆÆç¸qË·=~ZL ÕOŠzIŸ ‘$öÉ¢§”ãê\7¯ûωªñ[`חqI òŒ–Éœæ&dç¸+‡·¹w× ´yó߯U┚*]ßçՔçxkˆ¶¯WvÉiµ®"Zqqˌ¦µ,Ýö„¶¬R?çA +LŽSšÇ"Sù\ ýÄ»¢Åsø~˜zT»vYp2' WÊ·.-s$ˆ%dW£châ4§ %Y*™nå0>f†¯^ZËúþš¥ÇL¯©ê8Z#û>£žmU8Oþ÷©åJÝ¥³üNK·úÚúå§î¶ QÛ?SÒй—û¾–ȉ7Ót*°ÊM™ùM3ÇõU’¨Åß­ÕÑ ž¢ç-\¬åí^Êñú¶+¤¢5ÜNú…ÊÏÍà®fÚrCú²„•ú2ý7t:\¢ªÁ©à0e. +âÝ;zË(ä&>ÕEª…o^™2T5+Éøßª¹»Î;2V\ò¥¡b;ˆŒÎ¹m3äܕŠŠtÿ7¢å(t\˪Ûiìë"zçÍþÃ%:ß}s÷x“Òµ9.ŒoC#-Ï-W«)ÌÖ{KçÅp֝6Q9·r”W¬´øœ‚o–eè‰!¼…_tƒO)P|S—H²\} ´£¸fP„5YLf‚ù®<_TÃs)“à…•§'K¡ŽìË4ã7 ®´§´FòïÇGMu*Žš…ÔÛð šÀç8s8ð9Ô.ªe:º©¨ºŸœSõePÆÅ›)w|.fÄ{)=W\&']QåïhAeð´1:§ƒûêIèx|Œ4+]LÝÉÍ(îè®$߁Žš}¥N‹húƒvWü5—ŸÒÊgYÎ@GIug†º±[o­tæh£ô\òapì<íWÀâý¼Õïh¿%h8½¢dW­&r¥ºlRÊÒø´R¨™#àŽË—ü¢âS¼â\gïå5º“°¶%Õ=³‹¹s‘°®23M=ý²'>WOèËý¢5Z.-ŠYµ£9³[ÙUWY{õÖ[î|àUÈ¿yÀí;$ 9=3”)/.Ÿk‰2—bÜB5ó劳ü½¯ŠºÑ69¶èœw[òä†þ È1Z3™l¯gÿÚêî͹;f¹bvîãJê’2o7_9¿ÏÑì4—OÿkÇp» U·UםUםUםWÿÕ]yÕ];þמrÏ>í?œºé”“âՐ<œ€DÜ6èºÝ´*®Ÿ"‚ç&Êú‘½w¡DóßNºÝ’{ •¿+çÖºÙ¥ÝQ1?,Ý/­ºj‡^[’¬‚&ݹzêIÏ´Go©ÀºåB덤վÔâ¯è«CV*¥÷—䍶M9 ùœ=n-í:Ÿ¤Æó'äøÉÏv…6ÆLò4Çd‘ì­&`½J•·ª +îȑ•6[«FÖrheA +¢¹TӘý5×[ω¦ÿšç¬n•¥”â¿i­}+ÒÊxCëøtþ/èq‰ o¬ýh”p_º…S,yõ*Q5«ÆÕHŸýk±<(Qê.Âðº EØ# Àºûät[)Ü`®+”YFÇl”¡«ÕÖp.¼m²Ï,¹h•Þ)G²àc¢,•.°`]¯êL…]h¬ÿ +¡YROMCÁטÉ4¼þþŒ>ï¿ï?‰vjýCªòžíöã´v¶ÝU…jër¬ȇ +™%¢MМƒOMAvŽÿqydw]}NzÉy®ŽàF×ü®Üzå»ÕóoJ‚Þ®?•ÑÜÝý«SÙ#³¸å œ—š$e4ЏeOʁ8©$©\[󒍃yÌôªå^ÊÓÉÿ™>)zu]~Šî—?>Wò2¢?Ë¼yß±\‰¾mìK¹ä’ÎÌMhŸx)Ë— ± í´÷þεà^š‚ð.Ñ+?šzµà\{ã-•^˛gIvT¼ µ$£:4–G6}ÆÙÕ‹N]=ùNWH©wï2„üÔYÙÉìè**1åãýFmøÔÆ/ȽébÜÚ_™œÌžJd¨¨›¥^r;­è¡Ö»ùj}ìÙ]ìïWQÃxï¼èûU˜Ñ^qÙÞø_ŸÝUFލ&ÕÿåpîJW•m'!ph³]um\¢Ë¼ž–ô呑2ïW ømíŒÊŸDIß°» !%¨Ï°:¿î/@_cûø^2A£L3g|±{S‚Ï*ohNÑi,›/†Ìl¤à=éR2´y·ô¿¿gÆ^ž1ܐQG2¥çûæÂ°ÈãBo .pC΅1º«…b»k{xÐÒùËÓ÷½>ДP¯èáw¼½ABôסL­pœ7\—ìÝ»ÅüöϪ½=ª½=1¬bÑ@ÿ/LèÂ|¨í–˜db«ÞYL©F'ü¡ó'›†½/”îU2½ ïû¯Jߎ}úÇЯdª)ªå&±¥ôGŒÇQÕYv÷·ÌLï}¢W¥2ÍÕ+:êP¸ÑÞª8'÷þ ªež/K*š`;«Ï71·ÈJ+]uk®ƒ¨¼;Q š%<¡<ï%'²ðY;ö¯YΊí4Î+Ú4;)¥ˆ)® ÝKÆöx”‡ëö¸®Õu¢bLÇhâ|÷#ž¼^»†ÌxkÚº¬ß„Íõ¤lMœl© Bâ1;’^Íþ6}œWs=|~´€JŠQpOÕÛf:N·\•~ËÍo„u¬«)ôúc•^6SØï4•n{õ(,Š•%J¥rç8]5½|¬BŽÆMi)Ûx>ۉ|Ñà§óZøÞ§íÃ^æÒèj_àp5WÆþ‚øÝh‹_ʾ5”âÙU’¢!‘<•&"s`EìÈyzŽ-v =p›½•^m__6zkâø³ËÖi—>Ñí7S×Ë1gß6ºK痐áj_T¼¾‹Zú U¬¶®åå:ÕüeôŒ5å|j±VŠ~®ú=HvÔÒoQ*}2ûvÊߑʾ‡_O}}ýq*àï°BÜ}k eôSQƒñÁ3žO\«‘ª¾iª¾iª¾iûËæ˜Qϰ½Äq3{¹Mò‚2÷¯ëËåø(]üåóŸ|õl/KxO—*²SDÛhîZÌw=ËYlÁ=ú„9 ‡_£Èw¤¬†e_9öÊ`ôd…O… âˤˆð¯ž^ñõMå“{$^Šúõ^[£MÉ ZômŒx?ؾ­GÊ1^Š… KéÈØ¥MŸÙÞo–1¬žW2ÕÅ ìùŽ·ëԆ‡ÆW•z*%3Ύfí)ë7ÉGa®ñd²‘VBh4Vs0¤£œ«½’¥e‘}¢C\ËrQÐt«1ÃF5/¤×ë/V‹©}# ˆZé/Ÿhå^Wr§µŠ‹«_^®´åëôî¨Ê½¿Y|úù7Êȧfôb埝ê5:­ô¤Çlùi{X·ÞN£oÿõ¾ž¯¦YøÙWϼ ¾ƒx£÷ñ/«Ñ¢H¹.•¯ÂS_Q,~w‚·8ÑL”¼Šÿ²J+ÿ}sQʔ)ìð×ùÒÅå›6Ón¶ tLXOÑ&œ²›“ž) +2Óþã;+Õ{(§ý¸%|«îV?¥åú^SœîÜ%GtËLÇIåžUµá±}‘ÀŸM–þ«Ì+?Þ¦9Ym&?èK¤g'ÅíÜRyÄc÷“•`èŸÏô8þŸÇ¨»æcr_’×Òælqß™®ú|ÞuápµWËõWËõWËõWËõWËõWËõWËõWËõWËõWËõWËõWËÿ•|¿'„¾_ÝÈâXc¤,«!ìËD¬~ja/ 6XÊ¢o­½ˆ}#•›ç‚¼Ú²ÉV£.-ã*bßT&ùR‰ïË*¹y¯ÎaX|:|âqL1Ëb}¼úbÔÁŸÄ°mÇPâ˖»óÏòÓ+o‡ün-ƒ|_ʛâç oèQöÂ͕S¿¢:ø}>álÍó=ûúCÃÀõ¦ÚLHn0øËý3êaOTWÛ<ØË#”ׁð@›ãsOÅo•×£|%ä€ÚÔÞ{Ä{&ś*Œ@ó k›íVÈ ¡h–ÄöG¾Ùfû‚I´Ձ7ÍF–H x=é/•̾SÔ‰a̾[ïÍóXœo„-Ð8ÔaŽTø ˆ‡ú‰ý2ù_²°æ©‚ýac*®< p~XʳÉãǝÓÙ6´ò€mÀõàv%Œ«5ÜÐgð:Ð&ùÜi6T›çußNGfÆUž¨ ·›sÉ{AÿÀہëÀì@ïM}±ËSzrʖݑc* µ0îKSúP=˜÷Ú··Öò¥äØÊcÒš­,e9כrà|2ʖÜqeK-¨¬mZ}L!ìCÓ ¹c¾»"9sncTµ0l¨Ñ7Óî_Åځ؁ï‹D¨ü–Ltð5æ×` z :Ð?ß*Q@wfÑ+^P9Œ ·µ©pXÊ+¨Úñ@â9Ñï`ywËz ;;ƒh•?öÀù@wÀy>x8Ü,š 6TJ׆3³öáÑe©ƒ}Y±”÷ œËæ2Ê{HXä´Joµî )èM”ð&ú‚³Åô#ÃÀãÀèøw€söL1Öì÷vGÆL\À&ßf^7*ÃÂÔ¾ÿrp“ËŸ©ÝûoôC«»-Ÿê‹D£æÆJjâ#?™ ޼º+íkìÿ؁ì€ö€u€{`=¹_i~àÇÝïü=èü—ÕfÆM/¨ù²_3›D¤xÜã s s dç ÷¹vœvfǾŒ,dÝ6¥üîê÷¾7ÚD ; 8œðpÙc'„xïà}þ|AFm©ôcÔÀôÝ ÿà{@?$Ü3އWÔù€q$¾sځäýð÷p=ù¶ÚZ—ÛíÍ¢S°9^”<œŠšøÉÀÞږ22õ}0xø‘îö£¹î@ÖûE’ùÏ\m™Å ^|)/œü¢_9û<¹_h¼¡µ.ÆKèsc"¬S/¡Àõ{Cc#lcê^ÜÚ%#¸>¥àù¸â ó}ËOÕہÄèƒÒÀö |0>Q/œýˆˆ|d  †”Gs t@u {;2Ñ)>è:è0tTœ"Hÿå¢R¿I(@¦nÝ]‰éÄ$àzà=ÐÁh”¯8á‰HùùºÀä&‡)ì@÷ qs‡ëð€òÚ1ìàmËׁî€ì‰|·‰Ò؁ׁåJû?ë@ëÀìü€=ð”fÃãÞ“¦ ¶Kå½á´JgxmǯÊùoFpmbr’ùo­Ë|À`u@u€wq}Iì1ÌbRŒå’@;ê_oSÙ785,ªŠÚÑáÏ>f)j8çüxOÂàÿ2úgy¹´ê_{ÙåË3Ù'ð;>c~-Ëï¾{¤cl?ùÐÝõ‰sª26Í¥>⻢‘·ŸÖw ésÛÑkdQn©ÖËw‰c;"ê1Ӟê1Ótj䠮ݍês÷=GnqvY)ysmC½"´f;]‰@§½:sâDô y*?˜âû@Ù%ɯ'^iµÔi¯6j¿üÙG‘çù§4LGëùêÖ?oÏMQÃr–ûþ~·)Å"{{¯¢Ò²Šølú>§úÎzšÐm¤í„×ót/›þߛôMQËú~r¥òʟ’¥òïÐò¥ìdÃÓ-9šb¼Ê¹Ìpµ*k9µÛ-ÂrxÌêqïþµI=„iÆKƒ­ÌßÃÊÑ&C_Ô¾¬vß{êømݶ¹'˜G¶I¯ÚÉu/£r(5ööœ_f֗A}h–:ÃÅIÃ>˜­ÂÊ´3»•*´#¨NÚò +KIìÑíÉš15ƃ$®=ô§Äş©‚ŸYŸÕÔoÜ„ú¬èTtÿx”Gi™OzܱôK3}}S½ß½Öö­o¦š[zí5: üdD“Y-ß“·½ÑK5:úm¢<G¨ú—â~(=…ÁÑ%¾Ø¥z½Çå8|zôIFõø°)>ì¶÷7×Óhv”ÍY¬L73>==àu<à{Ç_ï‹gOuqÏØîoœÎ¹EuÊ7h­¦»ëåüÂt%ºä!L79nNÙÝL'¡Õú2½ÔûÑì6¥i䔘y©8•ѦåâŸÕ×è÷…¢ Y¥âóKÈÐTö—ÊôaÍ·á÷»6a!©ä±“ÖŒåÛ·Y:S4jŽ ý–µÄFk%<\ëßÞ¦éxNe’<©Røö*QT§ü(ïô±µs:OŠ1gkõAî‹ñûǃ6dþ»'‰×Ôí|û³<ÐÏ(õwà‡:ñÅTçãô%;õ<Ÿ1ÃÑ!èJIÔy/Rè/P¯­}+b›†®Óna{Iòy¢OÙnhԶԕujƒÿÔÆG<Çð¯ òîߎ™¼&ñÂro¨Õqþÿñ}_šm3—n½_Ý%}{&‚øŸ¡q}:Íó2ÁLŸ\ÇdÜo6m“,Ù¶IÿiÁìte Þ‰],ù£±d£azˆžÕÍ ØÇ(Àßo;§caÌ8¾×¹$íŠxŽÑ@©ë3 û’Ü™x/0äç/¬gr*œ6ýùy†ŠŸüÆýo?âߚ_­Üޛ +úûÅêyº÷#%RùNq)ªß¿'4\¦§&£Îìˑõ:ì0fáã0üÙñøÇ"xØ'Òïµ!!\çÔh‡þ±™Ïõùi¸Ü³J´h v—ç'¹v'ñõº¸ÌÓUu+U}+U}+U}+UÿÿоY +í?×WÂÿ'…û‹éjÑ.Nù¿º- ÌoôøDŒŸAê*bÞáûDË¥ÛrVÞ]pª“·$Ý,T¾Y'ÞÆqw¤àó„Aó-®Z[Ý K칓ïÌ*5z‹ëÇJ©a\ÞÙ)Ië®]¼‚LÚ ŒÕTڃÞ¶ìsÓc¼F#…IëT4MÃhT¾ïzþz éîžŸN«N:WÚ2\Αù—Ôͨîïvú5TñS[¶_…—^§«~x¼—HoÌÅö gXÍ·Z›–nmîY¶YŽš=·ªQ×@stç‘å7 ìèÐJ(ÃQ~gá÷û«æo’á/¬ëÚ¨ÕU€ú îu¼Î' ³ÕŪ‚÷9ÜOXãVßµ­ÙñZÞoòeê=7[£GÕê_ˆ­Ðl§@1ï’òjå$‹õCðÀ(}`•L’¢ ©X[nìï‚ÕƐŸòƐš.‘Etm¡Ú¸R{2ù}‡–.&ÞIDG(ê6d“h‘+rJÏw­}^xkxº&M\Xñ‡ ¤Ò«Û¸Aƒ­|.ˆ•ÚüêÁ Vò’õn^dBo15 h¬¥À¿:ó¸˜Ð“&?\Vtq öœLÿñ~xoSýùçDs3\MÛý;ÿ8ªEuÁhæmgÕGÚ¦î‡Ý6V–ÑgæM"/u“5Çp«–1+1n +AlžCò§ÕÁ££ÿ5ú[Nôi™“ѸC"b9ïh_vÛòTt7Éâh¯Œr³ã¬Ÿz«*ßÑ)Ê«:ã6TK:öR©Èze^¯”_˜¯7~¾QŒâyŒìK~‡~û,äÿ©–__Óe·×Æ8 ºúø¥ô²|ÆS°¡á|ã½Å\¬R×øëàÉÓvëIÕºš-K(ó8ÎE®)5/|ç^ãTYÉVQ[RŠù{wJHaš´òèÊî¾ßנ݉ÃÑ þjsü®JIPäßcUìâLˆËŸ<]齿1]ÞВF¢˜µ¯„ðgÊÃ=Œëðõ^³}W›&/ãW꞉ƒhÏéÙ;ùh_©ÛqÊbÿ·s…ÙM°t=xÖ«Úžö‰ÅÖôµDÇ) +hFAܦ'8 +ÒkvfO&]ƒÁPÉñ“udßÒÆ±Ú…5~éº.[‚Ðì\ÇIÏ*&1Z—b´úžúGèÒ鸮¾%ú–‚yn/XÞ_ +¾âXäðÚEA1 66Šó”ÂOÖ¬ÛoŽI÷õ’q«Ke蜛55ëk ½|”mâîw‹.‰¨æ}…î­ËºSÃÆ¸4M­¦ètcW­ÿ rËäVj^Ӟ$ÛÂ^éÜð1®Ž¹Îÿ {-᪘Þ*[Ü­mï+æèžFŒtÎIà÷”CObÚ!v÷ráf*ÈÅÐA¾¬]ƒ³#9)*O·I‡ÏDýü_󗸶 ϕ³vB:€~Î!ÈxÕ¡‚{ êj¸oÑ®˜hã`}Ï „a¿P<~Þö6ÜÕÆÁÿî¿O'‡Fá'¨ªÒ;¥ÿWθàÇæ¯^Ԁ÷ó»_ô¯]PZׄa!yh—hh‚åOñQq>gÈn >Ù.°LÜz%ts'¡ê¯@jêzgë¯B_C]¿ÿìÊóœ½ùVïÜçü0T˜êO4é"ßå^~ÇN¦e΅§Œ™äbœ|ý<ø +ö/ýëä³ùNsFñÆç©¯ý ù³³bt…âófòÇeÔðÔY·S0¬ô®Á佨ùލùŠéAÉ]qó qò§N‡$®ž¦Iz9Õú¸£ãOŒ‡‡Rªý^Üô}AòÖ~œ|³_ªï‚²] ù2ðZñ¶Cæ FEÑüe­Wßj>]ê©G˵ìºT³~º¥‡Ëw¶êW1Kbðé*×Ðáb¦ÜÔxõðôeÔv‹#†úã䜢'ü*ØvG†E8ù½¹Ê;ÄñÕ§ºµÏ~áNÞ^Œ~š¡jÝ-}¥Bô|3üꍋuSö\y'†€dn®à۪ϴËòª þš›jÝUý¥7(¥º¨íÔÜî?ÐT© vtûî=1!ÀãRa_C-l„ˆ¯P™ý’h{‘`('t Ÿ–þlÀì?¤=ÁéÔéed{bÏ{ß^§ZáC 6Ï¿ªRÙ÷ØóíÚÕçv1ÖÁV© +zõJy ²‹ +3Ï9{4!;(ÖÝ3XBZÉôä×;qá‘xìttÖ§ÈCºÑÕë>,b ž˜M#õkÄȶ‚ÊsÊãË#Æ?—§¯ÓÑzÑÎOÍ9ÂȤjZ–u¶2(ÿ" ÀÚ»Ô^…QiQ¬ +9ì +c)!äT®WmÜR—Øâƒ¯\¶(;fiǪ½*yôWøª†W;Qê¿TŒ2w´=Wª¼Ùa?n¼GO«ó…£]؂%¡ê„ötçá¨/€Ùí˜yØ*ù+€=Q°ù4T>y¾Y@Œ|¨žjÞ}èõG‰Û[ª-úŒz£f +ölé®ý²¦Õ8SžéÄ"ՃtˆSø”(Yϵ.ÕN«ÓÎÒV;©`Û©ŒÊ"o›S$r/‘ºl<ÜÖò·ôæ3úöêGø¦Õ[…Z–s͛¹ßhÝpüß?ûn¡©û˜@UšEº²=ț§>üjpÔ¾Ó/Lð–æá–ÿU}Óû´·OœB’8oG¥³É”¥Å/mÔÒ,퍨³l¨ð@l”hyíÓæö·@.Òpo†ŽVk·òvopo(ÞÜÞÐÞL~2MìÍîCó·7¼7··»·¶7‘'<{ˆñX®ßkƒÅ··•M­½´y¶W–é†ÂσÎÍmúˆ­ËÍEauô³)—LâӅF.¾î(&׊aM3H„ð¥0+¸Õìê.rTuHȵa1ü ÷ž½ ×o«vžÿÈôÃGî~´ è½)¯µ\†¾"…×âÈúÈÜ:î>o»‡]Çîãá¿ÿü+ž¹ta‰¥®,4ÿõ'ûýQϤ=ºv4γŠY¥¨È×_ê=Π5³^¸G”y'ƽv¾~ô´Û¨צŽYÜü®ü·X»2«¬ÇmbvM¡§yA"]ZKÅyÿ–‡ ¾1k[jÝ;f £gV‘]{=îú{{téÙÏÀ¾LX„]zÌZ|•<ª8h§#sJ ò†nS7S³yôªw“Ì,öºXQ}©“(•ñBµ]¿ˆyÛK´diåèšYvÙv>úµ×,ÖÈyÇam°qjCï½Ý™vžú׈.òÝ,Ò÷¸uÕoîȰš­æúÝ^Ï?ª2¶«j`ªó”öèÇ0±¥zêE©î5ÄH¹Nx¥+NN>ÊÝÎ,YÏ-7Ã¥D’jñ¯\üªq—Xy;fxT-ÇŊÃO:°Øw<¥Ÿ§±]Gž:û-,ž2™e?<Ê/.·þ-ÑÇÃZÉ}eiÙ헃¢›GPX?†v¼Æ+ª[?)Ä¿;^3+[ÕZó)*¸Uìϊi ÖÜËK‰}ÌPuºS é<](îï.€B¾]axÎîNÄdï‡r7Õқ?Ìò‚Ù£?<ãºé>ëHmÀ"×œÆÆÝY|,Å=º-þ¶=³ÿ{½·EÌMŠ xLƒç {V=¨í_É“PsžE #ëw·}2zŠ1àŽ™_·B”¥Ã .ú·ÆÀðÇ{›Q³n„n–òùg¨ínÕ*ÝWÈW·.]æ(3SãUí€x=Çì6 •åw?u¥™qWÄÄ;DÕëE\wÙu²Åž’–ù-ÕwJ¾?ûC¾¬ó±ß\êm>!+C½üãºæÎËæß%Ú±é‘üa*øhøª1׍QÞ›ôì$©T01AÒ¼ã¾Üw­bÝ*æ¶M«0¼ÅQAþȅ/ǃjù<Ùðœäi'aÓÐ3.ðx™£=®;γçðÿsMþ[t#z=µn„0$tÀÚ¨†+/N«n†»XiÕ¾TyznÙúÌꎃ3Hîc_šÇŽbJW¦ÂCoHófßÈÛµã̾Éeõ-íÇqÕm”î}J¸÷ˆÓâðߔ­‹s麣É}˜S-lw{ª1³$GL+Ä®È*Žßô +u ¥pÛhاjˆµ` ò*ðo‡mV$Uá1?ŠÆ%Ҙ¸ó—SoGlÖ|yÐõeõU³Øˆ •Õ®Þ±Ïé¬ÒäF¥fª„ƒ3ªykìÉxÞé+ÔËòâWy¦Ú疲3ù×ve2µƒ©«bgô~ÄÊ㴍4œ¸¤XíƒJÐí3Këß2më‰ß@›*ŽÛõüù6-ÎŘHZóAW7¥³}qÙ¶]LPŸÌ(;ÈÁHH캞ìÜJ*kYŠV÷"%êøµ¹¬4ÛªF›¿¼i[úñ°<ŠøuƏæ®4eTó¾çQ”æ¹¥ðÿú®5Y Qoï=mLâ%Ypüº:á±ÐºÊł:áþªã£µïÏpeP¢æ”Ç@ŠòÂé›Cÿ̋ÛÓ/úÕm#žÚz®pÈ©xÞôw«w2¯\æÏKZ²Ðêû ²êJÊ®³Ý-àŒª±ê$²W˜±hu iäkË«´Ç®‘Xú®:º§Gÿ~(åÞ0™ëƒ½¡…qÒÝwž‚ OKúýz'ÅÝ DIªö÷Ì"à]l´c¥[ +¼Ûý*„о€wÉ 7м¿]úŽGû/ j’î¬t»b64Ž—ïeÿmp¨wmaêÎz²5Ÿ§â­¸D±ëL¦nM† ¦#ð´}'´J°¤±[¸°e…ä³²:U±fÚò4«÷i}s+bïýQÒõŠßoÃSï8¥1ÏÒÎ'û×|ýGG«‘‚|+º-™·HÆU4Å{ÜP³!_ˆ¤¢ß^ÐW­/?AÌ,¢-=…êk(ŒL¹ÎÿIÝ¥ƒ·‡‡[ÃíááÖðÿ„tmcÁk˜¤­ÖYŠ‘ÑVIò+—¯|®UGC]='–s¸=í!å_ßKx4¦ÜÍ2&~ê]*#S]{Ï¿¢ëi¹’ÐèòöùþW˜Ó¨Ó4²Çu\э~Ÿ¹š[è¼-J@þÊݴ㞌¥¹BßQ/¶­¹y½ò]RÖç©];™w—R˜]-"6ÂkeþaÐÆšÄÈÕp{¡¼ºžžÚ¸Ÿû™£íTu3Â)iDgšW㔢ÎÒ¶N ˜žÝPç”ôÒÚ ç֝Û|:º¥ i˜õ ‰£éo_Ð œv: «ØKùmÊm{(‘Wý;EföܧYBab‡nÂjª¶å>÷ÑYb¶™b7%ŽÐèÛî|¸U%äg½lOåªÖp1?ƒúÇ>9Ïçøæv>Êû'Úc ¼úc‹ìOý6Ë#ظ´Swp>ۚ:CO…%UÇ>ÜKÁϽQϵ6Ÿvé_>%*ޝå¤ÿº7hšþ*ç·Ö¶Õ¹@âBUñÛÏb¨óëx(iOÿhçã4ðTQeŒåTóuÓåêË»gŸIŒçÖ¥w wÀ©oK)èÙ}‰ï•|¹¹¥‡<_pîôsQ™ö7Çl+ùŽ»vëۚaÖ±pëX¸u¬\:Ö.kµ‹‡ZÅíbáÖ±pëX¸u¬\:Ö/÷V±oµ! ¿_ފ­ˆ¹à/'}r¼ü›í³ƒ«¶«[÷u´+"]Fqë-·ZÆ}±=Òu ë­^nµŽÐ¼;!øväpôáÙWá×+‹ak“h¿Å¢Š³Ô€š8ªåc²/Ìv©‰\ Ÿ:^ü~ì]kóЭ£Uf8§ì¿ÒƒL¿Òƒõ«ñƒ¦“}øRçÖ# Ï.Œµkþ8tå1ÝÇԇP_¤‘)ÍÝPfŠa³‹1õÕ—å&tuê{ò­/>Ðdgä†l¿KI"Ūd ¨Þøµ9œàBH6+Zý¹[9Û ç›¾`ü•+ä’Áí,q„ +™*„ræ<çW.jÇÑyŠ8y“Ä +ø ^a¸eæÊ^dùˆ9Ds<Äh°dÁC‚ˆsjv|pç‹ eC—®X㺣—<À!æO¥~VÄý_ì¦×p¤  |0ijÌ†6c +xŒ¶¸çÇ5³ xÓm=_fqͧ,“mqUÜóY6¼Ý͚"$­hs•˜Ç,¼&€äHèsª‹œJÇU\Сð,*®D© |W$w ÆÆ[œ|WjÍüªyû󎅮.ž|“Ž}®~Y<û;ށ®0ž|›Ž®2ž}¡ÇD×?šO>Òã0×?â'ŸjqÒ5ÏæÓϵ¸Ì³Ï"Zê@Z".Ìv‚· ¾,&µ" ’F6sðl³˜ÙÐB6D Ù¿ÙÐÂ6 –³30•$$Ìlèá Ùh1³¢„lpƒe¤ÆÌÄ#dJ –£:HFÈ«3È2Oý×D¾ƒ>âî ÷ƒ>âdŽ62âI@¹AŸÉBp!*m|GŸCòáÍæÀ¤JAhX*ùBÐ8'üÎxêgüÎTw Ãþg ^Bô¼ WÀD(··pf2«‹‘O§‹– p`ò8¬™xo#ŠÊ†î8ªtr3áKQ€$Ucá/¡K(DÜHVԔ +vVä0¥_ôÉä|P³\ò @q+°÷î"cÙ=‘cۗ2§éKrææHŠ‰pç¥Á(^Ž+êCŒ|W(hљ€`Â_n½œ9ɀa +¹Æ[bqŠÉª–e&eû˜è@/ÁóÔJxøª£ÇH>¼Ñ@Îz¢áC†Õm*o‡ ±ë*†-újWRF‹?76n?‹Ò-Jʸð 8M@èdzq÷à`q¾Êkð&Âqúk¶@ò ëÐW9 @qރœù àŸõ×\|W8wó+¸·š  KõrxfHßõ0ÇrêfØx”ð#ò`°ãÅäÆwr'ƒy˞H$ðäÂÔ†07óü1¡(†8%ð÷Áw?ÃÃü=ø{ê_€ªR©)CAµÀÀRXÐ €d_±ëbqOû'Û»Šýº"¿n}³n-=»Q!¯nG`Ý4<†lµÅZµ(¢‚Æ íDÀOIÚ·©:6áÎ`cuž6O_ªî8zqÈoó·"q‹c©Eƒ—51sî¥1Î¥™#hò¨‹Zê#4^YVÞö^Ñ»b{=ü æ_³‘®û9è]ÜÔ¹iºì×"àß+ -‡Ôî63xÉ·óü·’[Ϛ;XØÍèœôX5Œ±˜e™7ÊÌNÄ œÄ“*0ý„ñ; ùG聒&t3ÇùYɟÌì6‘3š$àtM6 ] u!b‡.ŽUÃð»­Kð»‹^áxºo…ä‘Gø^ˆäÿ Ù"Ïð¾0¿Ä*./à¿$x ö½ÔÁ»™xZ / +‘ƒ%ôS +Ò^³ Äõ =€É=ªO@áIÃ"=vöò>“| +í‡ø=/ñ‘ié".Ë +á˚œ¹âR„`R„qÚ0Ø¿ µ™‘jd ÆgKzÑ sØ]Ü9 aI0…PâT7„ª#UUÔª¡Å¨nuQV]T8J¨óÒèø¨ô¿øUwd#ž˜YtÀs„W¦ª<|h)RläàËéhh*þ£‘¬&r5²‘­$ ÂN“îtZH§G°€Z+¥Ëž9*Šz ônÀa җZ#N@/„]¶è.aŠ2T .Ô=é1{¯Q’åß*…Žb ۏ'¾"½”—G¦›¡Í;ón@˜õ<ÓOsL“nDžýcMÕé¦êsM·$mŒ–Ri»=4ݎi“mɓ ±¦îôÓw9¦ÐÛm£íRi¼=4Þi´¶Æ“$±¦òôÓy9¦ÔÛmaoK(di%zówÅpåX[MÁœx""~ (‡óÊ•ÏÂ',?œ™2ƒù­†è5ÀÝGó] +ðþká»æD7qüØÂ?›oùÞCzI[¶+Äøø¸:#?®—GîžkìLµî“žàíviÜHŠ~d¡¤a9̦>•09ôÄGC߯>˜–{”.S…€S£6‹Fùfùt„øhgáú[C—7ÍiS1?!‰î_y‰îGb~ ÊÁb{Ÿäb{–͉ò«±>Y†'’3ò0ܞf'æb~i†'³™‰ù(lNf'æWbˆÃə‰ù5XŸ"xPLя¤'6¯j9ÐNu„Ðd çA9æKILl$Ⲃsì –£ ˜èH&]” aÞ Ñn$âŽà]I§3eגÝô¶^ì0¡ì¤ï±D4ö¨ñÉÔq'ôƒÞ¬€]°Œœ¹ê’ :½¡ï~’XhR_ƖÐ¥?"üÍÔµÛÕkMèé‡x _²}@ï_ó,àðwïù–À xùœ”4Ïù—pª þg§ ÿ3…Ô†ÿ™sñRÿ™Ä€jƒWiǛtc0ïÉl“…ñCëlf”ª!,¹ÇÚk:ÓhˆÌà ìe®À‚jÎmæÓtÆÁ=‘{—ììú‹:-8ÏÐþ-Ø¾åüHWíÕWñۗõ®†ÇÅG%þEE¤7ô®ÿCým‹þÙ`¿öN ÿm°_ûq‚ÿÛÄþß`¿÷†‚ÿÙh/ýÁ{ýC˜¦>ëÿPÑåoê8‹6iç@ ×í û$W­7ÙK‹c70}“þ£z7ú û'`G˜¯Ü*¯êۘ—CcâªËÀ ZÜ@ ^ÜÀ £lop`÷p`´A€ÝiH0^`À ~ƒ7k¤¸¯bd9Šgò@ Yó:nÃm0«.Ãï@ DõuÔ÷0îñ©ªôi¿Ñ1ãDî`B¿‰U_Çî`] Š^jÞâjþæec|ƒ5š ֘0oð`¹A€õkü°`à À ƒö C˜°ßŽj¢Úª€8'DóLÚ8³/¨ÑBóŸƒ Y—Õ]ŸuU-_gXƒkŽ2¿ö ‘eõ5ËèÞsñÄn·>$™‡œü¡²•J©·¤yÏø„Š[Ÿ«&eç?lÞÐÓhæ·p³ô?W7¤÷—Ÿ›âZ;?¯'À³¯p¾ÿ¦ñ­;ś´v—¿N󯿳­HþÏ^Ü6uîCŒéy~ßzÔü»¯)'Wåëû£àhåw«f¾·^9ž7Ytìl=õ”šEg/uêzË#ÖowMv÷ñï|ßVêí×hòO =’˜ªÕ§;¦BW”¾ê<¼ö+?Uu”mz'/u÷֎·ïº|$k:9™³®fߏ™½v2Ûޞó—ºèð8ÉéŸ(ÚKå¿ÔqÍv݈ÅÛ"&û(«þºO#®¿Ú¨>CËÀ>×Νr")4yÉ{°šûZèÙæ7_߬byu9Ç#CB=nÛg^þmbáý½tð{¯æ×F®ótãöZe±£ZÖ¼ýk\ӣΝüº×}—ÝhýÓhó¦]ÏûýÑC¯îµŒOÎ×¥þv¹L¶;®âß¬bysºgÌH)²¿Âq¡>±Fû¼‚šCB-¶oƒÝí”Ï¡­ÉsÚ¨}ô»õÞmUSU¾¬úã’Ú$î.PϵmQÀkRSD`Ú°Æ¥ºfÔã]D‚‹¶ùpS¤FzppfÞ Jð|öW_%;j?¾)¨ÐtlP½#v„…ß›ZÎìú„D÷w‹wÔ ŒÃJÛ,8ü‹¨Ÿ‹ETÑqú7ü¶¢ÉS§™,ñôÊÍÜlœ–††©ÕK÷~hº-c´žMƒç¶îbûŠÏ8^&Hº.g{ø‰,ýŠ¥%¢¡¬ä °y¥H»!ã¼R¶ÎS;ß·•‹ÏÑVfËÉ¡q0c¯¿1Õ°[”ë|7¥7&K?)`í Å. +¥h²y!XÜî’*/µ¡ªo&4ü*3©ºÁ¸9™wАüö ³²Yëbò¼“j”a“.ðz~ë¶ ¯W³ wmA)Žïùÿµ)ŽÐàüJ°üûëœ_iâT‡áò‡…"ùRÅUv ls`]׬U`¹×y²fúé+×ä¸+GÐ8ùù÷ZHþ¥´:Qý]4:êw³ qΗmŽ`WmŒ˜þ®úYO øŠgZÏ ÔTn@» ÓQd‹¢‘¥d»îHQU8±üÉgåhœ{±ø +ï°—‘’Ɲ%$³¶&ò²YÑU¥ØÚúŠégûŸú&(¸,º_(\H˜ãB³Ç‚]öbÍyMÙ*$4ÆxZ`xšsq ?IETøñÎÛ§7(ºš<‹p8¼L‰¸šÓqD¼N8ÜMqmÜ ¸¥Ñ"¸­»ßÅEçè\] Ö©%S[ ¯N¤°ÉÄ-ïu)'ú½U^’¤¢§ª¢à¤H `’H‹^ +ƒP`±°Tµm"…Њ¨d•@ +Ûr5•<Ö Úª-âÚ«Š-ÝØ¹yd’7k!’"ŒÛQU`·vú1TQ ÿ÷ß÷ªªIB—©™}¾fnó7›Ðގô3£¼æï7z™Íގô÷ýëï{{›×ÞþþçàkOïïÝd²Ûmßz–›5aÒ\9A9ß-H\vhÌðs@7 ÂEnh p€÷k¨,Ð6ÅO¶ûÎiälE™Õ#å®; d–¶Ù*Äu‰þÌ[=‚à<áAR;f®ÈÕQ£{cÆ»khõÜÁþprêsAË¿ä ’·ÍT‹wئ5Ì%ñA-o7;5î|ôèê éΪõ>ðƒṴ̈yÃ7¶5r§Û3ÆØÿlê‘Æ…Ô¼óXk'®æ-AÖð½ À '1yƒp1æ§Ym¦×fp½€X..d‚;ß 0l2½Ncfj‚ôbòf§p[YŒ†ä÷¢Zùƈò$¢>†ƒh¯H½ï1èƒÕÖ*¿Åâˆ3¼–p7ø €åR= ÙöCg—,4O3êšäoÞ5ׄŸ$>ÿ÷û-Ö¯ð‘òDØ}#†’]ý%#嗽Ùvi0\9~±ÓŒÒÀÁÂFHêmo|<«›¬`hՒ¸â„|:=`s—â]Dh=‡¾•íVpÂuª”G@܃nÕʋíð[s ŝ֒BšìhÎU)Ť«Þ†Ì2 ‹Ê#4܊øÓg‚P҄%k¤NÖBUQÎñýáv÷o`|6zf!¤ ä½>™¡Ò5ñ,?m^¤A­!Z§ IP‘ê+δ] ÔrÍc&J¹hšƒñMW“\ÁðÅá{ãO዆S…F©&¯Ä܎†Ü¿ê%t\¦É566*ÊXûí,nÓû‰Xm™±¶jwn§|ð÷•]ÊXÛDê.@Kp'NËtªyìD¶ÀÞ·}u=é¿ÄÓï0/æ+½iÐ冓swvæIâMûî÷[ǙÍÝ͋ß… pÊÿ4L‡ñىÝõྪ‚­G_^ü”L!³€I6ô•¸:^ítY$ó»ò÷ó@€µ3Ø=s *æÑQÉ^´^¾P%qÅAtZ!6jÖ@,U›©³cq8çšUóO¶Â;ªHœÕé)kŸ ¸Ì'˜\þDÙük»ÜãÓ®`ë]w—Ÿ±¦œ@"윪p4’ìÈP§­_šŽh­šaBiBOcp4”›"‡WŠI4}Þê‚Å8,!<|.1)ÁSkçù÷«€f-ܟ÷ñ±Z¿‘ì»czøâ%Ùñʾ©ÃL¹EÀÏ'>y'~¡„òþ› óŸœͲ{Sˆ+Ñïïƒª~S†#ï» ‘@ÿ?W}ßp'F›öÂT²˜—®çsœ¹ÞÖ +ˆõía• ÞºF(K×¥¦Ù½ÈyN\ªyÔk}$3œê bˆ@sí%ÝáQ¥Øe¥Ç÷¹ÐfCšϤo}8ç¼§ëŽZö¹ tÙKˆ4ý;Ùf7‡,ŒzÅ;d®}#ßóïJڜ½F{þ•ÏÈÃùÛÓü N»Ëç¦wB¥J~¿žAû( P1º€ÕºZÜ´‚Œ m™Lá8UI‘ki­^O9S`ý¤ ¶þ«;™*°6ÛÐ|˜ÍiëþAu?`ðÂd¸ß[|SÞ͆‰(c,hlÇyF\iÄjÙӖÒ<°ûÔâÛȐ#?ö%Q¹÷¨NŽq¡ÿ²9Ÿ½l‡Ò¬ýÀí½ÿ‘A׋;ÿñûÉé+C¯ã‘z?cÏæòIÐóùõ±ëˆí¾ª=q·ž/x÷ÎF3ÿÃށ¸¤?ù{ÐçÁ1õh ~ڀSÉ7¿ K~ 0Œm].“[Y|:i„ÄA³©AÍîÒ¬Ì1;2þóâ{êÄ`#¦#Â@h¶¼ÞøŠÚ$DÍwкwSžÜ‘<ØZæQBç·Ä Ü¥ÕòP>k°ïNƒ|µè븺õ£Äåÿ?=ŸsÓŤ]Må"•üJEÔ® '—Ã+ãԬ!·2WöÜ âs™7 ´¿œŒ;÷U¦®¸¨áïFŒ;æÑŒFÁ4oñˆÃ»/÷ž™ýû?ú¡É2¹ÿ—ê¹èÿ‘éïíP n…ŠˆaûT96n˲—Õڟš¦Që[åOÿ×Aµãôxñ¼o`¿ÔŒ¯îö˜8¼Ë†1òŒ|¿I9ûᣇ>9ã4%>¼§ÿîKF|BùÿÆP J8·+¿ƒáø‘y tøÑZf†öí"ÿ="ù üyœ²ý†#þ|Uu¸Ë?4•õX§{œ€ÑßÅvç ý)ÿx³þñçý¬_ݬ@IÐpÕç6ùñ¦ÚѓçÏùƒ–ß½9ù¿k DŽPb´9È´…òs :ó¦·ã 0Üÿ¿µø>L¿ó{\¿—òd;Ѥ×ÊÆäÆzûñŽ1 ¿Õîv]þJ"º7"&7#:1Œ@;ÿ̀»˜ËÂÓ'éäÿ§°Ïý®uäà~?g9ñâè53¿ÞüÞ®¦Œƒ¿ã1Ø?¬Ùýe°¿þ óµñ%üYÏ׋Gâæ—-ƒ¿àƒ÷ÈÙ¥Æñ™,¹Šþ=ào÷ÚÎó+YåcÿO³–°îavÑî±qÌ7r‘ßI,õÓídâ%ZÙÃýñÅ8|Ñ'¡F6ct‡“Ò#þÁFN°^+×,ý;ˆ•ÃdqÓEMéÚœ©aå7pÅFâÓôöï¡Ý»* ½;QV‰6ïó™IWÍ v6:(û<¦ ‹® …#7†'€U\ŠA +Gž;7”"»a¹½Oµ:T^@ÏJ€Zêd‡<miÈ…1„@>þoáXYÇÑçó¿p‚j:6„û´/ëlN\2o®E®¬Dãø€ˆp÷Ò¨‹m +ÂDZžÆTÈ9_]¸*‘³N¶ü*Ù¸J$ÝOo_ߒ¯Î¹êd +ûå=¡áîUÅ +K ê´?ânÐØ#v†Â»Ca Ý¡°þ킐éø)”©>Gð(¹|3tç|PÏã p¿ ïc‘÷µ*óºjߓÁìúúÿ… ÿ"¥^÷QM þòŒRɇ#Mºðs_6^ ?CAéwÛ,×YßGº°Ê°Ýêò¼]Eö¨zÙqhÉñ–ŽÇ +õôí߯YÖÊþ¯o=÷rVe™pGpc&6}èxí.(?Ÿ-?®î=56|'¦Æ6̘tU¶ƒý +ØxŽÒèåàÍÚ?ÞkÀè?òkÀè?Ôl¸ÿåªoc*oþފÌ‚Ï~})Ÿ÷ÆÕ6ż €ºß¿à³BâÓLýÚÄׁ»9¯wüMxÍxÔP¶ÔGÌû»¤£â·®7Šr™d›–Ò‰N÷µ *¯eä ˆâ×KN'íML‚¼À§Îcd¦  +KJ¯†Œ»\ƒèð«¶*·«ÔÖC¡»±r†Ó/?±¥ÚOlH©F¥XãY>E°Y˜'®Mx•LŽ›ûñ¡2ÂuèÁx]ìD™ ÎBó¦]ýïœrÛ=ËÅFýÓ6dSÞÛXDõç }¸ÿ^D›ß”AšjIä$}áù"‚å•Ï >€9Õ¸åŽ +^À·ª¥<@,&©‚åRyÅûÿKhFz¹rƉX¬ñša ù8vç, Ó,P !ƒ…jÝ ›·8ö+¢>8€(ò#̶–Å2Í`ÏóôÐÄÔm»‰›vLð€®çIdGÍÏ Xû8%£9¹ÈœÎM2W«Ú‘¨Oû KmÑ$dlòé÷¬N¯}ôà…mi÷¬ÒÔ5!(ù+\0CmG5Jz„\ÿ,á<Ûº:3Junl”ŒBNy‘J*g"÷¾ º}MZóӇN]IƒÀXιeó–Byd@Ï +Uô DÃäV4Ò>Ü ØRâÒ±ÛKš#GÇ}T©å*ö<ùiò·÷g£Jz]ázW4€hÆeèäH°–‘žKJ±·ˆy­ZÛ(THx2üyþrČý¹S#aCEɚôSrçxí¡©Ç[¨nþƒ"µ A}>D±f™æ4‹š,€ö¾ˆâ¹aÕ7›ûk¥€µ6µÁº¬€¶LÙÔ{œÐٛ se:ÖÙPôÆùÚçÃå¹%Y“h¹=¢Ÿ´¥‹Ì7éžÁ–|…^2õÒ¬¢õ°5ë=¢ùÅvbîO(½©GlN§– è ÏÖÕj^Yü}~åÂÜ⇄^0lñŽØ¯¿ èCUžž&/'KñÄ]bÒUä‡B󋼃 k@k2e'¢*ëÐöæÁï^é q7×$¸¹1ÖåRøC@x£~zØcÀ PæÙjÝÂêÐ#E3è4.£éÓüìÃ8uàÿZXpù’•Ô}'ÇÒ7Dk›¾eAWí'O½ü‰¸M'wIÏ]h±†»Ùì|5^Âk¬'Ó°1BŸ°²ÍäʈÓ$´ÂQŠ*ydª|aI8†©@ަ,wr¤éà– /Š"‚MŸa3D Q~kÀà6‰Íy´YËK¾èòÍÀV¦_ ÉýXì#[<ÙÅðè!¦ü¯îž ®ßîÿ#Ó\5/ø×·'ÖW_ÉïQÙ+ÖGB³à8ËB¦| TÁÊcS #8uË¡µh+ImÁ|¾ÍÕÔ¹“èsí‡Pî×qPöúèç´Àhf½ +^ésû:›X]8tܕí0šr~^» ºpée4¯õ*Á…Ϧzÿ‘^¿Ñ(ãÑÇC3ï fƒ*\ÌÖüøõ»üÜxcu÷ô3â·iv·1æ„Ô㊽éÀ»©ÈgÅñԓyG£žK ,è²>@p¢ +îþÍÁœÚ}CÐjPGÒ¯&Ž(YÒ¯ùe@³tŸ–ç°lD–üØÒ$aü¼@„åùß}˰‡Â,õÄ ½·éƈ—¼ÎQð‹x…=j¶ò~ΖQä՘/Ò(-¡GsŒò­ÕX³ÕãaäîæwÇÀÿ¤¾Dzli׿‘mZzÂ$B₁2їf€ùÊ´tb=øöº´_ƒ¼~,é µnŸH¥_Š“«D —o’ƦÅö6¡®Üz¤@þÝj5¾VÑõú¡¨}i=Z3e%«ny©*´Cý»W.=k{¤AW³LÒ,±¢*\Mi+tÐ4pÇ͕ÈKAö¼Ò!èB…8Ú`×Җ$ÅÂqՆˆÁq4ÉW«"K¿ƒpËë°Ë³Ð<½«ì˜üõ ˀÎZ‰K;»@Î`M¯ †ÇÔz!+î18² +ÕSõ£ƒM™Ú9°Ê*ѨAÐ +MB-ÅrSÀdó=ŽTW‚¹Ú{Ñ š° +ûÔM> vÓȥ՝}ƒ±à"j@áh8%eX¥J­Õ6÷\¬FŒP#Ör§îŸ”zËQ=•O)Fÿ˺di‡œîi¨zdë:Aì¨BNjé‘+³ï.lƒÕCé*ÙÒ-]AãéßH«ì`Žv·¬%0iä“,qÏùU‹ï lGœ{«æ–Oc¬  +„8ŠqVj:è,M›ö ›¤›3YJ”rZÔP+&ŽçÐ_Ñe(¡8  4Ò¬µú˜/¥Þ}Œ¶‰Áglûÿ-ƒ{mlÌlۍ˜\šÎX‚$å.¿pun”"Îþ£¦`ZY>îKQüâZ©Z?þj޽ ÆaÞeþmDy£J`äÀK¿ä9A?OðrØ%Æ (nÌb…åF`a@4Áà–…MD\ (uuMV…è @£hkϔÊónß_„EÈ¢åÀ"ÁS¬Çyë¸ðà¦M›À­vÚ>zžzQü…G^Ë7G”̾DӋ•M¦Ñ-rv;fp-ÒebySšyîÍúTý{6á0‘G)‡¸l6tDÑE#â+~=ª¡ïå{Ø(óf£ÊøƒŽÖÓX¢%DÝeÁ› +üÿ§&ìÆ”Ùa<¯=ЏC½Ê¼Y#-1aïͽh®&éC‡P¿OæÉý›%a4<hDœZ™¶bó.2öÓ®ùƒÈíøOœ ÷«øp¯`y¬ÃQj7¨cF…?4Ýü¥GdÏ7GösoÚÔvM2”}ÝNÿ}?4Ñ-0wZŽg1G˜ÌE3Λö–›Ç*3óß©º*®†=*Ï@µZs¯M„ðS -YÑMY¼…܃S£ztÞ _ï Ðë¯ùÔ@Ü2ôUèœ4¦q»5q­ÔAKöSš²yªy5êÐU썔7ʖ¢x@­VüÕ/¨('¶@,Ñ²Ä ¾˜E¬#+îµÎŸ2M–À6»À›%k-î¶Ö>û +¦•ŽÏ߅“@èQ:v¯uˆÌÚGpî?MôÜtÁLä¢è®–„T«(˜´N ÄKñ!vÓ³u"èpŠXØÛ´åYû`ùå4ດ„Ù¿X+ž`$gaM{|8íL1ŽdÌKoy®Œ¡ÚÿÑ‚4ìKîy°†e§Ð1Ù-9¡a…{?®KOçKó|вàP²º yiÀÁ؀K`\(#bÜß»Fb¼`ZØ©±¡<È;CŠ9á´WýÆ´ÁgJ$ÑËG7]›5f§œhþýQ¤@2~Ê Ä)ô—rïÓ¯fé Ñ¡¨YlzŦä†×¿BNätUЀ=ájý@lru#™~Ôí_žÖõç¦&Q5ÍKO¨\; (IŠ†Û§ ö؅ø¦ÔUÔ°á}Ô\ø4çÕSL¯Ø_®›ÅNÄw‰ •áÏ¡Ÿ™#“½üÒ]ž”„Û.×ÁpjÜjK…ì\ÑÜrD>GpœGL–íBàñ­?#¹ø{£¾½2«M/LõšånSBþŒKæÚœûshÂ-·†›ÊS>`0P–‚Æ óòÐžÙáF­m6Q¹“ÛJ”iíŸý—[j1XÍa¢ F°Ë…†D;3X]2AôÐhßç7¤(ŸsÀYݍVrá&„3ˆiQ¶/[„ï@(炧–J¾bTzŸt jN@IððÅl~:ԇ›“~T«†%Yvm?jïË·ÚèH{šø¸s½’Âì·¦¿!藊œû0`;Ù¼!!À2h¶¸PÉ}LÃ8w¸¯&~5äÕäù{{å¯o €˜-²yßòCxyR¼>f‹xRxyr¼:’¼!ãoðúó%x ^ÖL_7íý7‡ôLß^ÖG“+”+ÃÜðï Aï è1!Ðà:ò€ô—€Ï”ÑÊï‚ïš!ç“hæòúšô€()=û€æ&Ì6®tWÙBà麳\ Kž%6yôSoÜ75·L½À•¦ +ïÐñnÑp<2¸+Õ_vasÖÜNlïM~ÆÕðÏ@†nôôlUʓéa»íµK‹·jr$/é`ôŒÕÆî Í>Í»Âò!ŽH˜brNÇ:a®`=¾e¨eÈýŽ4{q|ƒNOŽL8p#qs±Œ"lºlõ›ØéA›pPc¥ÍæôÄ*o1&³“¦lkÓs„=›4ñӀä´Ã0aç*ÐÞŠ‘ÌÎà‹õ¸¤q6ªh÷ÂR¨[k0±x¾rÂR¶Àã¶£§˜‹ÁsÿÙoîÈ?à@ÛûŒ7ø6üöýd ¾ ž/qa…8BuW¦-,7ײí$ê7¶È0"ò:®Jõ¬ “z ºECK4,†ó*R­è.RæÑ¼­D€ †EQµ ¸GÚéZŠ)d£n|¬; ß+J¿lÐvZ²pYjc¹ÃŸŸMQ1À»ß݅¦-.î÷×e½p [m덾7¯oàUQµçqéDÖ ÕPöÒâ-•ìpâ¥ã§ ðÔâPñW +;s‹ ç+†p6É>Š¥iPÔí¥Ì€£êvP·)H’üäà¿S [¤×,#ié´ƒðkÉ•~:@7à—oN"¿ëð²t¸2ª "ÕÁR÷s1r§‡Å7*ÿ2´º  +âCùÀö¸6æÖ­bpa歘æÇƒ)oC(ÒfóŠÖ¿ª™‰À+ÔD¢·ÔO$Šðé{™0};–©Wü¸ªRppŸ£’™¾+g7ÂrÀÆÒ…÷£¥YÎnÕ ?ï Ü7,mïðFþˆ˜|n|ýË@«³‹8µ˜rJÒò>P_#i'ü¡¨÷b»ñÕÌpqÆUþcƒ_ڞ¿Ìpê_C}/ë—åbËïJå]Is«Ê̐z:î•fC§–]¶J°†«D¦ÑìÖÂó·:“#¬¶.Xw{¶/]Í6Goß{µÛ¹ô6¨ÍŠs^Šjl;½Öñ*ËGj*k7©Ìz=Ù¥×h'þ´ dþ/»­ãµ,§?eJÑí×¶öK A3ö/”Qc³hY½NFÌ\Ri¬zðAř6‰ÁcZ%8#Á,èå+oÆNTׂÏEÕ=ÐÕj•g´ñ•†^º8‚Ç®ÈÒLbpSùæ¶)‚je¹¡Gó¬±ÏÚé ¢O»OuÀzÉ⃚Pœ’–"æè +"rwòí;²° Ó£ñ‹09pép1 +¼&È]ˆ#xâáP /ÏwûàŒnoäVÙÅþbSœöè(xm4Ÿ‰ÏípÓd”\áceôбý̈́@¼uqËXŽDAÕ¯c0$38R¾G Ázû0WaßÎÝß²‹ùÂ.[‹–=ªX°.„jþî,·Ú¶±¢ñÖª§¾[>œô¿.ãè+Âº~]7ü[ß­¿µÅ‹Ù^K‹×Í\//¨´o"øü"º +…³×s´­ÓIGç~º, |"Ç5WhžÏK[jö oɂ.‹pÚÀ)öØAo>¶—–®ð5@ç%½6¬;À6†ž9͔˜º¸|LÝXrnôD¹9¥Å(s„4©ÚZÕMÿvÏ]Áå2Ø!ç#L€w8ùÍ#ùSgÜ"8 ýÊ_½"¯YÓW3J±°2qÜæÎâí'°s Á¦n-ÉАmq˜96CÜçÛEnh{·rRÏ).pºoœroÇW‡4n&#yÃàZœ,‹Dw®ãˆ?h1Q¾‹ˆ8lF>mâ˜Ä«4­¬ÏȖ›Ü%Mèì\}J¿—®WQ¸–‹±nA(CÌtéҹŀú«¦`{©+çKÅsSç\ÑîÞ@Þ •g·K&¥k|6sTlÂws Hcj̹£,¶5RÇãP•ó‚ko3Ý&NQM,,/dŸ\ߚ…zȁt¡§ŠÒK6™ÚdCS†œúü<ˆÌ)‰Æv„ê¿ÔmyÚ¶QۜÍ4xmÀÐAhÄ- +‹–ÈIÙ)­$VJL³ר Ą7h+µIȉÍ)VG~!*X?žˆÍ¥œxyo3–‰ÝY:"¹^˹[tïö€4Ô+µK£ßƒì_úšðå9éAntZkã¿öu牎óÑò¾ÊmF‹W@(Á´¸ƒƒI^•i¤Úà{ý*ü,­6äнƒG·vv8‘Ü_(±ú{™s˜õ’Ðçz ¢dJ½=àÁþÿºÈûöœqVGßÄáu‘÷dàL¹ÇípºÈûçå d}÷î d}Ô8в>ûaønY~;ˆ‹#íû‚Y^x…Q«Jâõd}çÜEYqS˜yû¯?ì`qGÓøn9^§ÿq²ì‰¾ôˆÑÚ­†Ç¾Ç7„†D3›Þj#xK+%¹ j•í€é»øUKÛ°Gð»EíƒýúÂíW¶¬ nÝ{`F¹~©{nô-¿ öÁ~ëBú¨Â +9àFÁµ'´G[T{@ÄÝoh{LÈZv§´¯7[۞Ð?ŸgëuG´™ Oè=¦$XñJõ}z²½S^¦¯Qר+ӵ騖,ÿ „J‡ ãӊ+²‚“‡‡ Ÿ¼ó¦\ôÕM«ÿßZÍà9VÔÞ¿¥ðñ~ U´ýü=”{Õ¦±‹Qþ~«o½hÒ +!ýú/e ­¨I^î~ “ý…И>f€µ³‘Á=82L0Џ«X[Ÿ–ôCj„¨Î¹— õP?à‹xޑõÝöȶNØ ¬ÐAö킻É Ø`Æï%òVàߓº|–Ü?]J’9³ ߚ}E’Їê€69ÂêI•Ô«+©”½ºžî ¥>¦þ½0þCòd@ÏÜbˍ‡@"6z«:Ȅ«/@ß/›žh¦©KQ¶ÌNy~a1Øê£ƒ‘{Þ®|po«Ÿ¶-]ëS°øˆü(ûÉ/Nú™?ñ§sßÝNùãS¾qá(>xtîu*Ä}!ø­§{RSZÐ=ÉG9)Z¢zmï*%œ1¾×` + Õïλ¬ +#fÁ±g@+<ãQ(YóžW×^Êó®fþ8r¾ejkÀ[˜ÀG}´ÐözàèUÔG.꼗ï¯y²äÞBYs‡ÅŒÞ™ÙpñGªE‡ÉýGÜmA¦’\¶)<† ¼ÍVî‘Ëš)šê +~.zýÀ”/r ß/¤‹á +ŤÁΓdXÑȟ³¯_ ¨‡âêE”Èי¨²žg„Êu@‡'‡]á¡aÄy¾Ë€—@ìUg݃Š4å„3gþÚcPÛjX¡0,=¸Ô°?6ÁÓæ •d›m@ÂêW6 -e¢jXŸ›`؀ nà1|ã^¢Í¼qAÈ ´xÈ‚ó»äÔ¶îamtµÆºZpºJX¥¬ó¯®g@µÌ=-$ßgN «Oîœ+#¶‹žÐt ó¤~Ž@Ï9?†.Œx´¹OØSu´¨Ò¡bÍ5ßӂ˜@TEêßVt¬c–Úªªr®æï¹Î¾¹s@^‘ùÀGN´?\kQ |Hׂ‹q"ˆ~ôl†`?ßL0“q8ˆ{VRúV© {Vk¥pÁôxŸY{”UÀ® [IˆiŠç±·•,`:¿T×Ê+W¢“$\R0C¼J¿VîyN¹2ÔüÔ³µ»wš§’Êõ‘ü­E|þà5n‡Sï¾'í¤n«3¨,÷•ls”KZްãõƒRHW \£D÷%â KEâ@,;廀î‘Ç5 ¨€·Èè¡Æ l4~"BÜT‚g‘#òËFÞ÷,i¬\°A 7›!0Æð²K¥Â5ú2Ó9F³S@¿†Á>Ǐç?ž@-‡Œ‡‰Wó rÊþ§sÈ+F ›S¬°ZߕêèËh÷QH*äM†#ünL>=Ð#@Pr¥È÷‚ö—9Ãh\†(Æ& g  ·§`Ž–Nz‰Dzá]Ì픪݊>¨ûáÙ=&¦¸9‚×y& ?©ƒøäîµÈ?ûÔ}w®5Ár%¢ÛïQ(ÚæÊ…Kõ±¡d„drWQc›~Š¿0h=‰Æ© DuÖÌKjhûμƒ·¤}’Yp~\HÂ!\}ÎmÂDÂۉøW©&Zcã4‡ñ ƒÏ§Œë@LGZٟ¦_#ÛîaÈéþ™¼I˜dwYFh(ˆzi†þB¤¼EXӇe¦H¨(÷­"÷Så‘ô“ÎñöŠ·|qל«ûF‹r¯ö /9Wå;ϔï,S¾Ú$î(¿/á +øº0¢É)!ê+†åÖ¯O¤=8|9#{ޜ½ ƒwvS¸§þƒ½6!õ§!ãlÍ +§T€mÙ5b€‡ }û›¯TБŠFOýŽL:ÂqÍBúÝØx«Üî,¿ÚBòš –—?žê_Kâs˜©|lÜÞ2\R«°%3Ý‚—§}ŸÐuÜI>C‹'â8‡¶¬˜5BP~}taGºïŒBãeù6Œ$éoNÿíœÌïðï±Û„ïi¡F“…uøÇÚ nêl|>ï?ûˆGkm€)3×ǰÁ>Ža‚΢ÏfGþÛêOóøýñðŸo¬ @ÖNqˆJÀšßŽÄúŽÅwà ´HõßPø÷¿é”üs·á`åÎL¢û¯ÝÈà|ۏ^‡óQëúÇ™ø½hÆp7xoÆïfÿ¬äŸvq꟯?íÈ'> ÿ¹Ãþó'ý¹<Ÿ}„½ £úµ®9ííÏûß÷*qëâ“/ºÓ_Š7Ð+ßK;Ëë~îúßݾŸþÛërúßǾŸÆúŠXßw½©ÿ2N¹ +¿¾ï‘ã}˜ÝôWÿVÐY|`ß̾Y2úþ×ëÿß_þ…¾ýÚ4Ÿï³3>“&Lə$™ ˆ@À$R€¬„-¤".d˜@‰"£FÐH‹zÄ3)‘\™—+j·ÊÛ=Uñ¾T„UH«jÁV°·æÇž®¤ ýÿÿû÷ßffdÀ®­­¶»¼¾õÝÞo7}Îo¹în÷7œÞ‡·¡¼÷7£½-çw¿¿Àv÷£¿Àßu7¥¼ïýJ²ImÖ9²O á<ñ—8T }Þ·˜&“h‰°MÇûDҖhP×hÚÁ~Wë1ØÞ 7½ò–¿‚Hë»eLQˆ*ìª| +OâÉæªFÂOŠ<•6Bõ&{F4<×SÏK*W²Ø¹Œµ-1ÕóõÚ ª®Šf§EHފqkµ’—õ*%&UÉË-“쥈QAÊ÷R(*¯kWÒ×gji:|.²S$zµª¥/œ·ª‚= ÂJú%ê´[©Q#î(ŠÛ/µRÙõ¹šöñõڔcùµ;þQ£(q¤™#Lz²ÅM tJ–©þȧY(КTø_çdU—Y`5\ +d ë,*‡CÖ[z:ËY–¤¤¢:Y¼xUpίèK©e³[áTûї¼É ÚeO_ÚcÂI’Z`*\çW¯F+ +—V°*|KÂS£fºQ¤pl¸ïßðMÁÿ‡̒z”ÿۂYÁäݹÕô*áqН›Ôêr',9&e$Þyz‰E§­<ã–ñV©‡Ã åÊ%$ œ×N¹ ïÐÞþúhÜèfaðO¦ ùìµ%5Õÿ<¼…ÿg…jb®7ˆŒ‹)©ihåÇ, ›™!G)"zܤJ£–°¼|ô)9låôR=rü;†xbq[9jáËæäsäˑ8 i…¼–­¥ët‡-—#ïÄ·ØQ-òKÍB‰Y‰eàIJÐbYA‰q‡Ktqùj`â7E]©¬ ñ+ª½Wc—ê³ÝUUcÊǙ~¨šîÌUO«žû4ýˆh«AŸÌ9Z°Ê´ª®«2G(3ӑЎfD3SÕ@j¾I-QƒPxQ…–÷}…eMKäµö5nhšûÉ–¾çe›Ìô Îþï@¾³©çÕ#²HÁ^i¤8Vü”õÐd?–ž=l).<µ"A„`–Ï.?á´HAdÓÄX.––Z€»»v‰ßêÝ£6i¦'c©ðàÍ>6êý¤mÕ¥ÇuX²2šˆŒÔÑ¥- è× R½(œk‘}ë:“–¦RˆõËÁýGKLÐè<AŽwÇ9EÈsÞ1¬GBÎÖu!À.T鲉dci ‚#Š9̱ËQÆ[N Mè”=͝“ÅôÔ¯skUÒÑý ]Wc›ËÕ9˓n>«++›Z×?Õ*›‘¤YKMK9'´xgC0snŽ–ŠNUk»Ÿj»æxØß·âÜUe:éúP„ÂÌKc™ƒ[ړèö¥jº&ԓ„¨èÛÎlO9Òy¬'žžk‰ç<³¥#g&z bÁô+UâÁú9K1aRâeOWüÝMuwf(;ƒ"t‚ņXdO¦©lsÀ“‡¬©¯“Ôö}ZŠ¥«RaÒøàz:S‚]m{ƒÍéЯÉ+®‡¼·f]ýd ÃkS¢ A(;H>Aá•vMvÎXð6Po5ªNÊ´pÔí}a…»î42Xa™Å…ˆõÒ̰Åalz9 ƒ@kÇYRÇ$Òß.(çG`¹ß÷l;`¹ß—`¼Œ=‚çM°\ïëØ.w™°\ê[ÎÁØ.vÁs¿×°\ï`¹Ô¶ K`¹Ðͯǥ°[cøûÎÂØ,œkK«F)l:ŽªÕ£yv P|{NÁØ9¡¡–‰l”2µ‰ì:ôÖT‚Uÿí÷sÿÇ'‘Æ}‹¿ &¢¿éíéãÚÜ3:îş)*ÿ{wëê?£÷°?íJ¿ñÅ60æ@ªSsù)Z8Ä"×È9À^:áώ9 jcvpÁ+צ½‰%%‡õ9tSl~oÊ`¥àPÊý0RðYïçhÇä0RðüPÚÔÞ|įX<€|W&ìÞ|įXTl€rpÑóæ.'Á_u_.blw—ù ¾ ^ h¬¥D÷q7–{•¸š´)k(÷r¨ÖQ×±$ÄA8nÁi +hz²¢ìŽ~gßî ^BÐ)„ðzoܞ–÷vz0<™XuyäLÙ~lÔ¢)Ä?<’4f&ú`-$™"60¡ëÔ¡w%}ÃÆYa½äðÌ`@®,dÁô÷—q,6J%£²ºcerx››f o´ÚÞëÀm‰ÜçñlD­Öl-1;6ÛV ÓlM£f7lá>¼ãÝÔ*$?ᔃD‡ +ºj¾š«©2£ö’†GÝ0Ùªí@WŒrDÄu3Xᤂ!ÞJAF¨ ®&]Ké +@]ëG+ +W1×]>šÇBL±¦ã¸c!&pÓº©™†¡ 9¡”{ϳ&?qÅqeù–Vo4´¿U€VðÁ¹Ys¥ ´ÑÇmc՝Æ+Q6&"%pCšh›â´ðÖ·añF‘ˆÚ{'Qþé5ZÅÊà‡ysZ\£É§ÌÕµÃ@È?›½“'«9*öT繇Œ´Rև-ÎïQØÞºM<[¥š¾ÚPàÛàPàÜàïë¶Î–•8¶Fìáë ³ vè6höØédѣඓKm=)¶ÓÄIÄ3áø§ƒÍäê§\– ßiW»€M)”ҝœÊMÁâÀ&ÙÚ.¡æ$ï#| Àw$â8! ˜ F˜ƒ8‡`TlƁM8LÔ¿ì'Ÿ_Ođ„ZÓ1ƒ Їd°L"VË…)Q+w2Q ®x ìVÕ Ä2^ßyôu–8T¡ |”HCpˆ ×N(Cò”‰tƖ·K”i^`£jd¢S!@0*4FÒîÑßj!‚NI$ˆœNÁ¯Ç»Åbd‹T5mP%þøª¹]ØvÁÕaÚÀ(äHðƒñ“Ý/ OFBÒá¯ÆWËÎÞ„]{½^)jôðZ=¼^××^ªèrûY5xN=Ö{5ERn1H>õOU·#x5â"¯8ƒ&ànÖ6®S”³=¤„4Ü Ö¡QªFGßÂn‡ÆËíÊ“G‡ÆÓmŸ[Uî÷ÌA©On‡T §‹.F6Õ| ª¡gï•|ª¡ËU𪈺¯€SæwPHxâ†4ÙS__Ȳq×4V?¬“ôW*5§çÊ@ú%!uòk"S3pe¥ÑlGi+@ˆç۔ˆœRX6ž +Œ …WNÁ‰cXɸˆ|ÆÕ¼Õ2I¸ ƒé™p% g¶,ù՘s}E‹ŠKùNÙ` Ö\8‰mJŒõ*ò"fÔC»¾“(zè¿eôÊ9¬O24©0aŸspííãÄRµ%òAˆ9 ±BɗéGÁh’kp»®öbõ‡Vw¢7?åF›U•ÿÐûÅ÷ÿ {eê?¨½²éÿ¬½²ð1 Û.f!{eïʳíðQ/l½ì3¶?Ú)m‡Z•ɕ嗶^·õ¶_}½²Ï÷ËÛ.²ð½²í¿Ö^Ùwÿé/l±ªÇ‡âÓæþƒ£_ò€Ó>qÅŽ©•ol€¡ÖÐzqÕÀ¨.}hâÁ—ÝõòÝþ4ž; Áq·Þ€¢GÙocœ?s~' þ)2ÙÕúà;êWL‹E>´ ³ÏªqÌRâuëÐ{Yéz Ö~Qöè®W™ÆæÅÌ ÇÍé’üžnÊã÷éÜhÓdøÅ^— s,É<ðñàUév1ã/áU{Æk%·Ü+ù j¯áÿ„|Ûùƒaçò—µ˜ÑBï-ËÚÎ厁^®å·„¾O+ÅïuµÑ³ðÇOOáq-g›} NW1Œ§ÌõœÏU™ä9ø ¹n¨¼jxštr´èõ¦Wÿ!çÏ +ÑÞå‹ó,;ʒùëvk¯yŒwîzÊt¾§Ô§õ£ÚÝ՝wsWÊìk÷Z-W¡Ø|¢¸_û;<~ÂϱgÉÇyª¿ÿ +ã¸Ë^ ºÛhŸí®z¿ïW/åݙhý݇5Se—í&þ%røY";žp¾Î›žsàì9××Ï83ޝ7Ÿ3°F’èïFQ Sw£ø;abï²úR­¤òú_\¿Þ›Ev&óä˜8Wýô1 CÏ^!}[,t‚°~N½.ÈhõÎÞdêÃ헤 , î Æçù]sÿ¹$`žH7GÂýŸ¼ëŸˆ‹ÇèX:‹L [< ÷* éEƒvùîLؖ mÕ?ÀåÁ4÷Ocy½#×ZX#žÜÝüHØÖq1™²;XvKcüSßD? |dv-ñJ)áÍZ8­œ¨­Í©Ú5?îÏ@nMrŸž ÌBR†Àº÷üîŒ!}þz& Ö[t‰Њ²“,¡»ühMh!?-€í¢úGÿ:.²8ú䕆$sOn›ÁW[\è6*³}¹@wÁËêý£ȃüy7&áq @{l†úT¢•Žé-ŸJŸ +­ºëf°Àšï [ÄÁ؁æÑÂBÁ}ã›@¬ÜVw †{ØæÞۈänˆ¸m èdt±â¸1à/º'R%£)ԉwÐ-øéW=r„'À@j<‚¨ÌuÎ@V`É6HÏ2XW¿s€D¿¥×) —¬P »ø]6† !]e!5 ú6ýXD?F)2mÿýø¬# /ôE®¸Î‰#̊ÁEáTµPÅHø“‡ÉÎŜ,`÷{õÐ iaÙ·Ns“ʼnšÁ¸¡k‡X0»œè†±JHÂí Âóáþ&åüèeÜ3ý¿òŒ/|¼…ðQE6üÖò‘Åc† |áHb/bí4~?ÂüsÑ3ö^SvX[éTþù"”è Xl\™eÕ=Mƒ5÷—eì~xzè¬4*àn_m_ôñÕ è?+ïÆÃìØŠ¨U¾p›"ÉÿF  7ʃk¤=w>FK+¥Àé{¯aéFUê?Çp²öbaÄ%bŽn}øb¹ñq1ëMRÃÅÞàƒm:Q"Æîõ!ߛՈwöQ¿¢&êà$H…áÉIçÔÅJ–!‡sZ´/[á˜+ûÌõÀÆÈUšWè™kû0GAÛB àö_¨ïr!ÐM~D2¬‰¦`Ó÷ù yÁ³~ÇAP·a؏„åˆâ÷RqšP–’¢¹º1š¸±œG7Ԃæ?ô9»ŸpÚÈ>™’ŸÛb< sÓ# 5®h;'n`®ÐRú€d6ÛÛÂvþ]¨j×jGíYiÿˆ 3fò;Šà}“½HÉã%€ 0xŸ9!Í?íX#e¾<ÄÙ¡äóšß‚ÃcºñCéòÞV½BŸ2nÃa؇q†ÃéÔTT?t¡¶ý . +%’ë$/Ê­ß«ÔØïª±o„±l¦ÝþøbGÒ¤?$xÙžÉÎÿجWžÑNÝ÷–‡ˆW™èkŠóû­çõŠó‘CHZÁò\Ñíº1æ=¡ôü[!Ù”køïÄB ±y¯BŽ<³[PŒPûË4Õ÷¦Ÿ5ÇžCÜ'ÊLÝØ3÷6üV¯}†ïšOX÷lÌ,;úm³ &‰ ûCVŽ|ç.1l6/í‰àЙ4˜ +êä*Ù¹æì·rÅ!Žmâçûz:{*:{P!Ž9‚ÇÕ˳ÀÙPY9šëh쌐 ·Øó1×u¢=uýil¡Þl­×ÇËûðmÆõ¢£ìÕæÁ;+|›áÀZR#ïÔd×Z’ÕqØŠ ‡XïÐ3ލDÿÍ܀Ï`b\?çmE17Üo.~ ÈѾ–ôŸÞAü™“GZ¯Ò8oÀ+ÛççyþúmFp§ØWðOùøSþ§õOðü›+®©,ÿ©,ÿúiOý 6ãjF‡ó9X“üèMTó'üº3ümÄÝïéò'ýIgýOû'øtsçÊwB7ݒ!Öo8¨zÝa!L2ž°f`~Æ¥ïV9ÀÒ×|n±}Û­?yPµ¾W/QNHmÏGîžý`9¿ߎ]õƒÜЂçuP‰Ü_:ë +vÐõËÙbŒ±Yzj„MùW%ÖEQ¾_ЉJ¸éŠBØ¢:Ó¶üŸ¯™œ”ø™riêT]]AVº2„o¡LÍ@7‰`ÿ·|´!äx¼?c׀F“³h"¯åŸÙG~@HxDº¶¾4’J£a&Û næÿYÁÉ2Çs™¡&¼ú’¥ÿoÙ¡ ¯œ!°yÑ?Ò8žV¶[t΢}²×Qõ Ã0-%y3dj+zE #ù’=ÔCÓXPÍõٟ”ÄüÞA?…}&eøWä¼òSÿªëÿ愷°˜ý%¿µ1ý4%º™ôP–þ#µïÜJÄ;^ùYí{…G곇B£ôÙáQìJFpw¦öրyYÁ¡QëŠnÀ¯J䬕åP¨êYþšV淝•æP¨è™Å¡QH«ü*9ŽE +wzÿIŒ·ÿq…½üÎ$‡ +7L îèBPäÃbŽN¾Ñ fhÙhOÁeó_X„âL½b,°‡c¬?dÞ/×âЧý<Ì:_eý´.½Ff ®‹øPºõÚd5ÂÚ÷ «=U † ý‚³øèYaüîãþ,»ª’…—µ§ø(Yij¼h c;C“¯v‡kNL,ÏXÑ ^îPv“/ñ¢ÊZoÅ-8ö]Äð‰A9Ð6e.å»úEZºcYHî¼)¬Špõb(/«ý_4Ý굈¶6«¹á “‹Œ° é.³ó(EÖñZÇ_{Á«\ؾ©_×6E|±“æµ–Šõhå¢'èæ˜¶¬µ=¸n÷lÞ}fkœ^AüρƒÓNgÀ»•³ñÀDö€(Úd_,lù[:Õs÷RŽ|¯Úµ[76`ì¶W*qïÕ³o>ÅכÁÏa™¼}ä_“F/™‹,_¥—4^ïþq~¥¢úÔ¦ÿÔF/®þؽŒÐ“{l'ñ¾O'P!äÄj)z$_Ÿ5ÅÓm)\¡"/àåÑGßpk,g E|°´Qår;[¥{ÿ?µ(NIèÖrÈ®ÿ“«4Ñr ¹ÏÙûM„&óÞµ4[‚@ñÕÿ>£µa±+oǒܩÆH, IJcSðB:^L#äü7Á¥÷§[xÿߣ|) ¸þTwûà¼9 °8ÔDþNDÕþ{ñ§HN5hsDÙ·Ä 5Šs3ÌB?ŒÄ[K½â^“¸ÉÒÄ +aèG{> ‰èòÍE34Nf +ow%lV˜-ÿ +ÎzZûÞ$7ƒJ¼ÝÅCÎ.X-ª§Þê7’6ЉÇvqÖ%R"1&CŠÅ…Hº×0y?ëàl‚Î2¡Øž¹È_eÀ/˜ûuQš~pN)×ò°~`»ŒÁ¥&‚ßãq/¼à¤Cc–22T6”Ø=e TJŠ[“É¢/ â¹(n1VŸ„pDãEÄ'Ðè+¢ë14„T#1ØtµÉ&¦È¦(Êd娄׭…ÉDù +HÌ`¬æ‘²$´¨îÁ¤{ˆ Fkb⃭ި¾…ò„øž,œ7˜lwXº W2M€E©¤› ü]Gš‚C;ŠêÿÉóm‘Ö;~)%l VÌ66u›Îj»Q'‹]ãel´„¸:@~qÈ㬵Q=cBFXž»)’!µ¹E#Yô]’ דC§ªÚ†˜·!ììgQYÂWœüœ“~G'}èhW„ôöŽg˜lYS҅CüN*õ“ªPëYeqtöÈvakïÙ•ÄŒ*Á„z¢ëŸC8>ÕSð” }ª8€Ž²åaùâÂ4§`<·‡êå8Â.ŽúîñARZ€Õï´9ŸjPX®ÚPzÞkh„€]¤^Áíº@‚¶<¶)[ºä'[À’öÛ+p#C¹—¬‚´&€XŽ×¬¯aY>\Ì@ +‰*êö€ žØ°7?^‹GÄçÏ¢çSñ9ô¹ÿ‚mánWeô´öìñßm·Øñ{Ϲ9i —úL.Ž2®1󃯦bÆBŽÆ¦`Ʀƒÿ…C.×ëøþO¶£èäv_ÍælrAþdåLBõЏ\qÀi +væ:Yqm{sZð³óJKoh%ù³T;;€C·a_Ó bfÄÀ'ƒ`oó"`"ÑñˆO.XÛA41 —áLDêý¢ºBüÖ¼4¹pµ ;`Ú@'!e*‰¯Š ÂóF€é hGÀ©«Gi%E"uʄxéÄwTÃh ?ò0 —OH²/(b_ß"QßjJA¬èÃù:Zn•Å;z¼Å=v£SÙöŸgµî•^Lø‰üs +°~_ •¨c÷¯âS¹èÍñTÌÿ½œw|S|U2tʉ•3*¦cï§_Ž¿)¿*1f3ÂÎañ!´›HZ¢¡lջܿU˜§Ìæú¾²¦»Qo·Ün|ßÅqs»Þzµú­^³Z¬øè÷u}…e†ËÄûâC r XÉÊJË2—½3˜æ¯wɛíù¥ÿæùÌ/;Ïsø~‚¸tÛy Ú¶¡¢n㏦ézcÀbÒúr¯Ž=_‘cd´a…èðøœTd»Qoâ5’蕼b0kš›æùΆ“¤<Ìëº YI67©vR×;³ÕÀ¡¢$QÓÜn½Fðj†áÜz@Ó¹…_]¡…«!˜º¿…=q›òæoHQ¥¤ä ßnfôˆ•¨×„þÐÍ÷yì¨1y#!‚)|bõbBTÝDz6pւ·D±«Íähi*@ƛJ%2Ï(”XtÂBR´R$ÝÌ>çìIœ|öÝÁ¡«Ý‚f*FÒ´ÌG±_ ^óÍ0°•Á³–·àý]hŽÿ(\Y²fYW†`\YÏ$WaŒ¼¢»Á|ƒ öá~ýx}'g÷ŒŠU¶Áñ÷oì˜`e™ ŽQ5UÈ̊ºS¼¤¢¡”|É Üw{W +¼ôŽ‚lõçë”!‰)VWèdß2Pcã#„ +ºÝWq ±%- ÁÎËv²n)îH¯6b@<œ¼º}à*Àag» 3Ÿ€`%o«½‘$Eฐ¯ˆ¼"{ +oDf‹âÜð°ҟ Ät”Q‹|x|+'⠂pc¾²"À0"àÚ"‚l$c†O-È®ÊìÄHȁå zŠ«‘²ž¦%o)&Gù «ûàCÀFȞÐÀÂ;»Y î%&Y³›Cy”Â_óY³Å”@ôü¥²¸ú BÞϧpÎm—A<ôÆ U°-òÅ#í؆º÷»F“³ýöffI†LɘI$ 0HÈ`,ø2a2Dµ;Fâ4ZÎɘ¨²©2|emkmmÛ|[×µ[{{R/TV̂Bj@*QZжü8Bµ +ûûÿ÷ï³3 DÑvÖÖï|½Ýß7w|Þîïx=ãw¾y¼ ï}ï móŸ»ÀÞx›æï -âw…¾ÊpÛkm·[dãǶ²H‡ŽéÖÜP\ ü+@?‘,Oß‰7¾¸ ->êéP¶ +æÏZN¯ŸÔT <XWPÌøw^É\WÈ;íݝcGÒZ¢"ÕôòŠb{lœÚÅ,•C¿%’~Sh#'쾸j€Ÿ;ÕY‚IöÀi«„=iÌ´ûEw}zÖ) Cáû:9ûZ– º>±ü ¤AúË¢áö‚Z ÿ=6*4…~ö{Sìªs šÍK!bÕѺªÑÌþøÒEžæ:Û|VG©lJÄãs©Àƒæ§À*Ð\Ÿ­â•žý ƒhå“/̨ "%„¢ï‹óÛøß5öé˓ +;¤°¼©³s¸†x5Fg×H;֛H³ÅîȯBÛE»+>ã‡ؤâ®jøt@'¯åÁ76þ6q›¢ŒO7‘=F±?ë÷¢»aæ½a¶§n#&E>*ÏɌ"¬:‰òâ*âÿjæÛEò)ì&¢òç@÷ûQʑV|Rh-wÆ7ûZýê\˨í¢o°Ù§ ã wDÞԛ§ ¤ŽC…-7 +ˆvoþãÔ(𬝪weÑYàŠ~Ú'Ç‘]ˆ$Ÿ@“u,DÜSŽuÐÀöOD»"PØü~«Äe!v¤ þ¾.qlÈl­[ ÉÂî#U¯³Ð·‘>¾—¦ûð'Ã)W»OR¸æ)ýKˆ²ö°G¤Dìà +zµÒZØþ“;ïÁ)eÓ*ý^  +ºÕè%wRy¥ ¾U<“BæØ|K™\üKŠ9†Çcæ.¡Ó1ñ.y2Ùí~.S)ëù3+eB®Ò^Ü?—Ö=ÿ_KD=_¤cEšþ*È «ôŒè³?#­€!K]a,îÃôF©]"0ÿ²¾žÓôD޽9HšS¸Ô2”Æ:½±ÏÔ¯Œh.“û²[ò¹6²–"²š²~ø?4²¼äÎúNB>4è÷(à²ÍH,2ÓHÖò®/º. Ӕ,±F3ŽW•û¾º‡%ûòNôº¿„è›æQP½9Eçe†3Œö?©+éDw¿ÉßÃëèG+ÇúåLϵ~’¹a[äsY·KAüùFL芮nUÂÆ,kr‰½,ôF³Î'¬ñ|‹<÷îº$½©ÜŒ¹àýö՜žî˜}T#SP^!àë&8™Õ¨Ï4|SÃÔõGEÁæÁrã›w÷Y߯‚ó`=š§èß±|ëÛTP÷$9oNyɓóÕÚ?ÂhpnáãðäÀ²lT¼Xå†9Šã?AÑ*P·oyS{՞ÌíòÍ·õæÎÂÓÕñU²9ÖȄ>rÒ &f*Ïމý{Š\²\D»ý­œÎo,4ù)•¿û.ÿéEVw›·Á"aõ+H˜ŸöH˜ðdÿöçs,ÿÇÏø2ÿèçzùöÁæx2ò¹Þ–^W;ÃêNšPûÙds¼1"ˆò9Þ\饣z¢[Ýçxsrÿ»áÝ¥äs¼?cރÌÿŽ[‘ÎðĈ÷ª3–þ¾w‡ÿ‰×¼ñ¿æ‹4ÂokUsùѬp‘ÏBa IâÝãùÛëx…Ü4ï–ô5ÿ £gÓ](ó>H÷‹æ![yPqïot÷Zù#Ò¾W.;ê¥,*¶¾&'ÊQÿ~åó6¿1 +Óü.P/ߑ8ùZDu›ºÜ§ Ã~BÝ Ù¬ôµh6EëBõ¬ü¿#“Ñÿ,¿"©P]ç[J•ޣζ”ÉÒv½ád™>ÕnTfƒ©fÆ=‰_ž tTÐå0)·NA·`t'ØQ‘‡¤¼œP‰gMà¡'÷\ott(ŠÆJ•ºQ-ݹr´l àÖLy][Î%]ì¶ù¼º™?Ï÷>úˆÉºÔdÝj1î¹sÝ×. ºBz÷HQêDÑÿ¶%iÿlKsZÓÿëË¢ù­ÂŸ›û›ûÿ)E\ˆÄqß³ð'ü Ià;ð3~)(°ûÔôëÄOsˆ„ÁŸuâËf#iiû¿aüÛ¦¼}Yzlv+Š,/»®§¯¾Zå‰@—îþÎCæþ+ý&Sèû=†îÞ»/ò—éõ|L 2ïõ2˲_*ÿʾºôyã?,üó?Á@—ˆø¿ÿ¶IŸÖޏgõׯ@—‰;‘ .ÍüÍs?Cûáù»'{|÷õÌäæðˆ8øNZ/âoÂÒ?"Ö½Ä{š…ì/²‰ß`ˆ°o÷¦ëà›®¤Ýufêáè1¼ +2۔xçx5—^ßR0X!¨6[#ž½µ¦vLÝÆA`õQ·ÎÁÙ;àK—…D[I‰âÜԓëIdÔiÙÍ6ÐHi‚Ökzù—$ Zˆð43žÁìrù dÀ Nò™9bÜ⮐XwÞÂÁ½¥9¨` óÉbö¸F‡[œ†ÒȱWõh4Œ6NÃðæX±FHQ\Cüw" »Øºˆ‚åÅÝG&§¸ŽeB’ÚÈãÁ”èY:§qÜOÄïIGr“Àʏ”og!Y”–ûԈ‹ùvû+–Ô@Êc´]Q¨(Õ,/òoUOȤ<ìt…ÂT…¥û‘Hv]4š3ùð#舣;kª3 &Œ®ÀGƒK%F;äњR)’nPÑ_tßð8Ã)€‘cÀ¨w9ôs2$‹°‰’X¬ÔËUƖ +BÔñãӛØ]}Qõ&øò +¼ °Ö2‚þù<Þ´cxX=S¸:BÅӟXҔ ʤ9ðÊû†H>IR¬¼$/›TA‹²[Œdd„*–º•Yìè£Ïõ§Xô¢#œFªÍ¢ÚÄ`èëèÑv*÷Ý R:UzA`„Óž \žÇaéä/l½ÑAÍðŽr5O|å}-Ø ã­ERË×)|xóüIýJ‚&z 5òÈ=÷vŽþõäkð-Iühš²ÚÁ²I+˜Ö7^D=@æQÿE=DŸÆ#ÈIXüáEØÂ;ud´ß§!n!]8ågªpu‚‘!ë‰7%zÀÈJÂí֐ñgáøYÔ¹"+¿†~âŒÃ°´LÉÀFñœ²,n!óø{Àd_FôNT3Ão úÞ€®{gPûFoTü΁otçc°kõs¥%cÑt@¡};x¦V‘_Šl²#ãÆö꧞©ºƒêb_å`úŒô0x«Ÿà_R»^þi¾ª™{èYQr+ß0‰€@Hdz b̟Co>¯Ÿ9@‹4ùÔ.ǎnÇ1eßBÐqßB£&ډíLV›!ÍD²½“Y€½… žoª³fL™efñ>îDÉìr ª÷a[E{S ôØ8Ç$®ÖÈ$­Ô+\yämˆ'LÄHÜã2­jò:ðn(§fî¿`EAˆ=m q]1¿m÷xç-|e~NÏ>PYµä- °dîºÓTC€·óYóŸÓ]Ctl.Ȱ@CzÁs¸y&!eHÌiÓûE"na_ šë´Æ¥Ž”=•·:÷,©¾¤‘$ŒHæOJÄiFæÅûÁíXÛ7q¶G.bê…ÊÞ3pz÷úhåÏc¬óϬ›/6eɳQl•ÞÁ’<†õ^ÃëŠ¯Æ €ç0T½>¥pxÌ«%Ž\ç ¹c½SØk#A˜¨‡A5Î͓à¬dl>œÏÇ©Êö·s§ûpÛ±€*tÜj ¡!þ/„k‰’W6èݨÄö&j™çÀÖXÖ¢réð®:î{ÎEáÇ¡íCÎi]µxç‡Y÷Œ s¾Û_Z ¤\lªz¶Uf¢ðåY¾Q˦¼\¦æõ¸R.œm„>ÏTI®\¤ªG*£€'ú¬5ª=ù=f0²ÖH£IâóžÍù%CŒ&”Šö•˜Ùª6Ù‡››¯Tv·‚r.)ìx=Öp‹õ2³êú ÖöY8ÛG™í£×< +ÆnØD7~…°'žmhE¼V[•¿A>Äõìø^.˜lÞ0ý õMjÁ$9»Å7ív,êÄgüi;Á“•þEꌿ¡F|ï|]ÝÁÍræÉQþÉzî'å"…¡‡š}ãø«eÛØh±”àÊNÿ +û £¬;ˆ´B…?È£S*7¦ÑK³4 KÀ)œíWx¿)þyÜ+Þ•g•ïœ7r=Ù×p°Ó‚ 'ÂÀ2´ OâÒ¦±î ݚ=fWNRˆ‚q`±æó“#õÑÙ⊚ñ&,“¾ñœ¬åŸ>3’–8:Lè’ø˜ˆŒÙŽå6JÄôoTK皯QÙ¼£Û»‡A°½¬ h¼^s(C*üA}#H¿,+7̌æuKY¸0—f³s”¿~Ïræ³Ô(ŒGpùÿ‰šVúPJ ŠÑúï(âÔÑþ7¦ºy¼à—N‡Ïˆr“øŽEw +ß!`Æøo nºv Ó±a‘µc@o!luV hÞA×±-pÆØ¡†Â=ÉrØ´qã[¶ú=ȤÛý÷²¢¡u&¼o³’ŸÁ'ë9‡¼Î™òò[µ=Gó +‰0M$aÊ{7íµ§‡’T.¬s4X`U·p¢ÞQR²î§‚òuK{î‚øê‘·Ì ×T“£ûÁBWzèì7GôÓÕÆí‡É·aià@õ„Ô×ý0 qdúNáLÙ.uÙ@mHØëê·úvà›¬"FE1»aìóÅìİfod¾†JO¬Yëa¶:´G6Z ³ÈƒÖZþKs÷Hâ"¤I›µJž•J‡KýûëZmÒJ²ã˜¦Ž«$ñ«¹;Ï?ÒÿÓ(zŽuܪ=…t|cìÙ?' üG‰#´=¥JLieOÃ\ž7g¹®oK:V蝂D€ÙÒ°m‚ŸÛ—»@·º¸{«’°i;rߖýØøoT$ˑâ”Î)W>òŒØZU³¿ÕìVÍî/oS ³›[+{Á ŠÃðP¿ÞݩŦIâ™dUÉMl¹ê¦'.öZ* ]µ©píûžE6Eó€Rô® úK«t <µ3Å((c„°zÞÃï, ¼ÔÈb¼¨” ¤í3ÇiÅ>ÑщvÀú9WlÑb7ÓEó~ܱ™iLumC(í¡Øi1DY»ü§.píôßÇQ{è¹1§RH÷£Å2sëHdG’r]כŸDhçɀ‡ž:XúŸýû®2Óç'NÔwq· êŸf†7ŠxÞlå$¾”yÆqÍîFij–Qø?&¥Ó;£ +,:Ù^ŠEL%¶_™¢ª¡À®Þ.6!mû¨•ÛÕõÜUös“y¬;‚yL]¶ÿ´c‹ß‡æ+{•k»‡Ÿ5иFöxGöNRBxÙ«Œî—ÂïNnÛ)uB’,yï[u¢T"fgá£?ê¼´(êՒ»dß& ?‰$r󞩸|,ûüsÈ1.!ö8 +—;ŠÜA½GùÉÁ¤i£S! Ž]ä`fqãøÞZ¥Ÿ´($ÁQ ÔÒóPôs탻kzÅPEÎÅþÎ ÆaûH7ç÷˜7°5Åêá²ûƒŠ[ËÆôë¢ÏLÔrè¿X€AX##MÎ⫸¹p&k<çwV›X…«–*ð‡^_~ba&ooŽb5,ÜHOæÏ3ÖBF|ÖRÕ'£ÏF|ôQ™Ûš0‰@ÉGD eL×`è™-ÞÿÔJÿ"~AÚ_©í‹í+ô¿ ւ»qÅO½ycoÖޟ}«­°žëg¦ºÙén¥qœ‡ÒZﲟâüùÆ?O ‘º–;©Aæí1ÜßÜßßÿeéò! }J'ÖB);®Ä}[äÞSé_*û³}›¶¥—¦ú³i\v³~îØÏ;Ãzßýè¤?•µy\,,IØœ×øp®qýº²­¯ÿ*—Çô¦¿ùIŹ’—Çkðp®)#¿Iþó ‹Dvèzvíÿj—Ç»¡KãÝþ ;¦šCÔ/šýñ”žë„ñê;ûi™'žmÉވläpž?z\ò°oÒÌÜ¢qå•aàá<ïOl=²8O?d$±Œûý™éöÞ[—gnÊ3i'Ç^Öæ$þBö™oÏÀ/>‹^\BIÂ‚U:¤f-£)ÕÏ + <ª âöúÀSĕ´™¹ØXaÌ`D·=m +%V*Å¢ÐÝM€Ï8Ä:šý`–$µF‘Å_hôõ‹ +=yԌԕ#.}XÛÛ¢©)BRƒ¼ºHŸÒÑêœν›øq…ÙM#´hˆŽ 5~›~{ˆùÈ|Ó^̨Á{œ-¢JÖTK˜ {¬“å£ ¸…m8¨È,^¡°¢”šjѶ þ&ñ¤_Œ£*1I9ˆ +áFÿn³~~?·Yª9u›iÇEf/8£oÐ6ŒYl’Û•Gô—ù.œ¤4"±kSGµ¨ÇŒ ü‰4 ìÖ®r$Ð7ðÌr$Ð4W>•jçn}¤‘—Ë&„¥ëT©Ç|E¹7;ªÞÐîSðð½R—ãP?bš% +ž¤MûN¡îø›Xî­€0|ío8ó +BÎ:¡©JŸ:w‚Q•‚ÞñåŒaTã–äb”MŽo`Oåñã8.…Ä“ë«ï£á__vAj›Ò¤Â-¾¨÷#ŠÉè5¢fÃYÉߛú´e =i>0֕!y0¢“îIw‡ë'y~×Ô7µá7ÕTP7ÕdgžQ S"o°¶Wó²5Ŋë©G«oªË‡±á8k‰½bÂÝқ8=…P%ËجèèSƒ¤œ\ß¶\R¸kJo ±´E 95eäz.`̙4ÈÙ7ý~Ûdýº,TÙ¬·Öå# ¡u§J›Xþ×tokÅ)œ Zj&1m­Þ…JËH8$üR.Q£Ò]Ú͓ˆð¿Bµ½üóY_\Kopl‘=&*솪CY1˹8¢ñr2àÊö¾‘úñ"hô>pÚd-K€s g' +üwa1:×Ké»õ”N¼E>/„5»»Êx}˜)¥~²jp…ÓªLz’Ë5:”á枅¾y\ØVeŠÜ2 2ÁlxŒåÂ(ÊGÿ7åÁ7úÓÉÎú›¤ëý8Ýfðm£<‰…Ô,4 `«ÆëC×K‰jï],Kç&]Ô+ÞhÞ*Ywý›¥'oÄm09ÚVõ锟!:¥Ñ(ã¥2f«Ñ7ÍáÙ­”{j¦N}Ó~ûu[†uK×µ0_JÇC}t§JņÙÔ&Â/sº„È7µxS¼p†éáN„ê®Ã‚åˆÍ )lò9ŒŠ4 A²5>…†pžvÃq +÷ã•/jÉiešæ9›ž÷µ*8꫓»#׫ŒuOÆu&V o¢}¯½õ{œ…¼ !")Í`ÈR®XذAÏOñÛøÙ*TO¾„åÎÅû‘ÀVð£²÷à0ŐÀ ·5TOˆ¡´W$G£<ßʈ_Ý:ñüi'¤*ç‚ʐèr'm‚¿ä¾f·ßúœ™p99”¨3-’ ÆÇÑÝk¦î•[¿ðŒ*ÿ¯÷îBþwRû¸?5aóê0cߋÇÜÜJ\ù +ç‘9bëOÎÉôsýÚç>ô[¿Þ§úŸŠÉÞÖýº¸¸9ziûêW ~¦ÉϕsÑgÿÃG?ÊÑÆö´?ᣋ³í­?‡íÿ_s Ž_û´qaƒ$ÏÿÓGâ!ÿQÙÏ|8°m:B¬?®G¼°N؜&QУ¿™£;-±ÛC³Oç}þ<ç‡EÀé‘ßðñç5-Ý)çèñ'42™è M…d¸ÎÙn¯Erà2oª¶ŠÐŠc5³}Sƒ½È¶+²Pº…ËòP³+¥±vy(OW4A÷wÍJâ½uGpI½ùƒAîtH‘­9kJݝÖ%åȤÝ×i6BnÙ¨TËàÝ(ò…¾«héKEC¢-}wh ðê‰r ¯¤ÉÕesO惜•„Ë+сzçwÙ_Và~âGXWu8QbÕKó#ñTU¤¢Þ¨ò•¦Q[£ÈûÍÞdiûÇ)Ý®(éEV‘ÔûH“”{Éi';;ÍΒs͑¤*eüףū{Ä}#ó{ aéϛz+»üã†Û‹=&úG Gù»¸8—zJç¾ùy?CzJKcžäüž8.dáÅÍÁ‘»:à·31òZ˄Zî{ý?§‘áÀ +vÃn +Pt‘ËÕ~[Ìv¥6Ø«š–j÷.$ĹuŽÍ:+¨f†u“òk©ÑÜð®=<üŠãѸ’$wä×dú «R+ ëðƒ]ª}ª'Ô¼H‹1\ï2,Ä NÔ.¥³¦É¢+Öî•Å:‚û'Ró“î¶'¼æ>uœ.UÓëõzcčÇJm„wݓ‰¼c‘†Å¦¼K'ùp qýM&選è_ +΅5-«ÿC^r÷ÒOYpRJg>ÂÐCüDïöÑšNÿ…²—~×o£˜LEa»±½¼ñ½Ü]¦4nu(¸xŠÎ'·Öq¸j.ÑG¢ïeE´¿Ä-ӍG£Ç·ŠÙMšx½˜jÛ]X½²–’#±þNx´–ÀÎùy®”®.6ÛóG"+Qæ[ð^Q–Ï”ËË È²¥pú ÅT °¼PĔ~ïeãN[¾tlh¥“×i%ã|ä…Q–¤Fú­”EG9u»Ðèq*°“RDo›FNv~kKbZXjb:ñšb”¥(s‰=…;ôÆéC]­)NWÉ×ëFÊQá¤ñG‡kåNܕ;Y°)H§êçcú/ðtêXêHÛ i…³¦§sø‹ºÅR-‘gâç›Øì.€oaפõ9Šž¤¾Õ.móÚ±©n6GëÁqü‹jQì×,ǎçYùIГ2ÅB(ÜÈßA¥\CÕ6Ĥ‰œ<©V®6•­¹pæÛb‹ùUSÌ*§Éä¼¼›¨*^+³ðÆÝîõÎη r¥]Jñ~‹ +ý“Õ-¢‚Õá[,*|VHy×4bMÚ=…0 RÐ@¾ñANLoËâݑBBiÈâ§,ùq#,æÇÍívW2Ê­J%dJ(h,˜RêùâI +5ñŠ\»†ér㢄ŸK…çÉÒŸQ?uãÉj êT3VÔ±áã«…ñՂJT5WRWì¡ä( s£zîîË×m £v]›èN¨œ'Q£`ÁAá3R¢}ZÃнYèYãP²¢,¼†/s2‹È +~¡¨–ò/‹Æ9{ÃX¯[íM™\ã $È/4œOÚSû|¦¾+-\;ÖÔdS¡)(×eïl„!¹Xbv§îž?$î!嗟'û{!p]œÊ§+ZÐñ{AÞ¸r7´ö,#Œò#boŒ»h‘¤‡`"LRþ «•pZëØ°9ÛÏÝÆ +4Ãü§O\9Ê4ѧã‚%¦ˆS¼I£Ê­k»ŸxµgÀ§°j&£ÉC@–Ú?E骬©]#dúC!AÊÐÉ4f÷LÜú¨Œ\dÉíÓÃÒ°"·潅V8F˜zR€è>'q£ GCä‹|±–ÇF~élZÒ+XRksåiq:¾Õ%´²2M¬­‹É4z´ç£;-ÅvEsyAˑz}玆üêŸg à²cZ»€Ñ;N×RdW?f%7ÍÎαWa{6e㬧¥zs°Z6úŒxÍ÷;LÜûÞ¶ŒŒ-Šnd$³Vô†|ÉVl¯3ÆÎ4Q‘;J(¬öÙkþ»‰‹Rw2[бQaõuÁeÓO»Ïq›£öMU4¿ f«&N~l¸aT'Ü=¹©ÆaR­Tc ÉV=¹ªó}S/å)sMe ô®ÀªÛî¹³¶¦$¬šŽ#¼õÁV’¬Ät­ËU¸:ïƒÖQ<¼™´mAIōY)rM‰Ò:z“½ú$±:¬Ø +š“éÚ(ڌ–P? ù5<¬„<Íæ4)вtÎî!ù1+¯¸_t¥¾3Î!ô#GÀx_j. _Pra.6T3ÒlKj¯BLÝÔÙS¡òã«üŒª|G.ü¸I[dÊöÜWŠ{߂ö aŸŸ¸"„ÝuaSùÀ¹ãŸ¾0 \_?%k€Ó!bë |*XZ½s±Sv@hV¾çáLXéu°ã…O¹:?-ÿ@›Ÿ,æã=Ó<¹LŠõ*%¸vïX~gªZ_퉶šBÌ4¿äW–¥Dšçe ^°p…#]ÖY¿ ¸vÀ®G×ûbã3hä¼Ï¯ôãâ­Ø´)K>4Q~%ŽE}ˆ¥ëWpKpêTµ¿[Xž”+/ÒÆ¤«Z4¶°A–Ñ6B¥wìc¬N­ (՝ƒ}E,Й°¤o°‰ÑîB¨öÜÀÅ¡±¿ù@}è·Â7iëJ‹÷ߋ2 $~Mßå«Ý1#§+°†¾ýÖ4ŸìÌÌÌ̒I;$’I PÈt™$î1"ÑhTl𪈄… +¢E€Ü™×»UÕõ[æê* +ý|¨UvZ¬ˆ€!䕾b¯G1­Iûÿÿ÷î÷3¹3‚­¾ß_^öÝöð6ïÛöïßnð½íÞàoÛÁß¾÷ x›ÃÞvò·—¼]ÞFð7íæ_àëO‡Ý¤¶Ù-uù]ô?UçÐ6&¨w%U&(´BN¾RµÇæêڈûbÀB‹uó¼­¥éÆÊ¹–c×F^†;ꡎñ +l aìY9ˆqº®9Onù2b¶!%†¨zFròAí¨u¶?šcéÕª%r[Ù¿Š-¤n6’E±Ý¨r?E™³¼qµÏ^Þ Gڇ?P$Tԓ «Ž­¸\ohõǗœÞá­5•¶KÁ@ž6¼Ý¶MwåTjøò3ôdßæLR¼F:´}³»ÔªŽ°pÃ=†'åuàŸ–•ç+aÆNtùþ8î?<¬7\ ß~I_·º·˜è‰m½[b³ƒÜ‹ðC%º?h©Ï·'j‰»`06nSõªyúàR…-Fż ª<܊x¯h` .:Wíhôv_‰—u&Å}a[dÙnQ;±$cÐ`&l¼¾ÇÖÜkÀI¶ƒ°§Kæ„ÚFö"µ›Å:æ‰èc§¦v«žly<#r,ŽÕmÇG`Á~) +uÑ/I†Êª!UÕan2jy‹fŽ‘tÚ>Ç¿l'Òî5€y{6Õûâd}¬.iZª`£ƒCÙ!Ô/ËÜ…0aÞý–²ŒýH ŠÊ;§‰LƒzMÔ¢ò^<ò«GsNL9¤ók¦¸ª¯QS²¥RíÀù¨1ßVQûT.5ð}xlÔß« 1Šú‰ÊÇ.\©ImPÁ³ŒËc»u:íœÄõõ4¯[ìÃÒº`dÏÁg¥ @Ѝ‡v'³-¬†Â™Õäýû±y?xµL¦éCÆ]ò(xíTPñÏj‡û¹O,¹åGžÄÙùÿ¥¾Çä`þõ° ýî`øÈlþ’¿3t£¿¾Ã?x¹"xç°V¿ešÇ´ù˜þ¶¿)Öóñù¬}ÌF–þÆNÏçQ+þÆò_ý ½ž†¬¼Ù¾Ïß#c5Aìá +­¿#ÔÔPû¨ã¶QÓî\{ºó—Ms±;ºþ8¬ü«'ƝñÔKpÉàž: <ñòàeéwDï÷ýª%¾)--C÷©7íB#àDÆÜÄG_`hzS—?hb2oøs½%¦c\ïO÷ûM¥´¡ÛȾžòóºâó¶þUšœï¿A÷ó¨>þ÷ÏþÿâƒÌ9Ùëü(ì,Ã5ôù£ .۞çµ?sMöª¾¶w7âèû=‹W.c—[ÐGFèEõ/«“ÿ_ioMk´·Ñ¶þÛ>¤ln¯3?úˉ]·ÿˉ_š1ØÇ¹eÉP“‚? Äùs~þ]Ó7©$O/øƒžvWž1ïÏ6äŸlùQó"6&Ø}YØkl©lLÃè…Cf¹wÜû¬,˜&ïK J0 J@ LH Ü£€ŸºP|P :Î,Å_Š<.P¼~Í n¶C,.%[ƒÕi֖åìã8-²ኜ+þ|¬>£.©ÑÓИù±ÄrŸ€^²å,d2‰Àrûªlu›ài¢ÑÕM”ìf\Â$M1¹–=¨ª6AÌÑ­ëiå«Ù§ÀâC9^¸}¬y—?I”Ö?©ŠB‘Ÿfka—(š¸ngšd²ýÏ@§kBS!å˜Áí[zã]”äå£Ë ã= ½Ã“µn’¸‚¿x´/>éSJ[ÿÉûGDZøï¹úÿÖ~ÑþWî?hý3öÐC?hü[ÆCöª†~ÑïJ~Ñ÷òÉ?ÑûGµaòßsf ÷;/„ý£ÿCöÇÿaûGè¸ý£áûچÛgò·í/þxµ”ü·:þsö¯ÿ‘ +·”ýª`õK´Æ| } …²\?Ò}Çåõª<ŒIÿc{è÷==ß³Ðîï­\ûOW[îÞÆ²iˆ£«Q¼WEÉÆsrm´oûd7TG¥aq7l/ÑQ¤Ø=þöþ¿hñrîÓþ–Aû|ArÿKˆä·õð4)ê2IÍûäYs&Pr›S÷Ȳ=½®8Ì+_ñuD~´hoÜ_—2Fl¬ÂAënÒ¦L­•P9ÚAüÊKz•U°*ê +¨­w¯¦ó½]qØêMM÷ñ;õ*UŽVé‡3÷éÖ¦éÔË^~ Ϫ8—4&iW„•]Šyÿ: +UìÓŠ^8]_°*u¬Ä¼®å1?òÌõõ +7d¤±ÃŽmDd]nSò0¥ºˆ6:¹ŠxV’Ë\*t…“QTÑ ÀÞÖ!@qƒ)ÂÆ©œƒd :Ëà4^%Lì¨B\oLє· ' ›judüîl"ÍÌo£AÕZ6 š^”O¾¡)ZeVkïà0 ž… GP,p%Q†[í*x-¨X8¥; þfnÞÄkƒô$ùchäXWL€Å㣵َ6ë`½uztV€W•ެ©ÒýÏD# d1Í®ënñ —þó»Ç@òPK6v“`ÕûIÑ՝£òKñçNÑø£Ú¢~4gØó@3í3½ ù[¡R°²A,;çy%dJ§‰bº>hTÌâY_TŽÚ2W,z5m#§•×ÀQ¸%3£tlL ŽKà%™òË5‚4e`/1rW‘Æ8pÆ9Æ?‘’ x!+x\`v’d[Ø·™cÖJ^¥Q”@çIØìn¢»Ì¼FýÐßѳæk؝-Ӌb›Z( ¸%Hçj;ÊòÜZ֜ómcÖ75}@åúUMÓõ0ƒ’} KM]m%5~L>\é>\½{ÂI›’M‚OÈ,™Àk$ûgþtX˜=yÚLëh<0hYD²¸>Œþ¢b}sp>±ÙÕ&}õ1†°$W#çõÇï靤ºd}×=9"½fŽX/¤™u_xŒ¡?”"í8ÉàyûFîãµ_B¬2ÈšÅæ0eåm•00r‰ja^,=òé/âàÀȕÇá:¤­o^AØ˝ö4(6êçÎ <¬¸pʊ“ž\pð%ãñ££¢e@¦ÃÍÌ&­‡©ÖtëìmYS9–Šë±"q¾×»ØãØÿ5¯¥eUJï˜N¢wc`&‡Yó`r ¶oW>maÖL^ gQѱ´_LåýP!Ò֐^VÔ7LF…{ž 䄙‹Æ $±$Ê]{‡OÐçSÉàÃ¥Úüð>¨¢õÜkkèž|dñ1•øä¤q z ßTÈ=Ñᜒ2„ÎŒ£Õ3’>{0éþ¢Úì¡'I´àãè6Uv6ì¯ËIE÷ æzWмF²ããïšÔÑރrÐs‰÷«„л¯t½c7‡®„1$¹øÝÿ\Jè·Z»Ž kó‚RíE˜qçÀb7ô@1¬ŸsóõÄÿëÐG„ûœÈ‡Ÿ: •ÈRåè”Kk„­¹ÿœ­¡Ä§×ƨ½^ŠÁÿ|A‘I<ƒ“m× fÀB¹àÜ­mÆÊ»-@_¯íúßL:ÏPñȞà83"KÂ$Ñeã›r'cdLSÅtÎD…m~“A@ûÆ4\ľ»Ä«jÝ£‚Ÿvã}]мK§· {÷³¯R§¡v–Jy7qÆ;=¾œ¬<(Fe “wáP{Ä0¦ç­µM³ìjôîøëÿ¹AïEq¾¯Ó“ïDoÚ1„ÇÕú@kxÀÜW( ùÓ¹/È“h_“`nxÁXücĦ{q&³ìá)¡ÙQÞ'Ò»ñe5?(À/#T ýµ5‰)IzÇhõPöáŒ_]5Ђ£5ހãCÔ¾ê߁¶Æ_ú_Ÿ¡gŒ˜j¡Íj󿁧Ùã +ÔN©*ç› 8™M̰dŽ’¼£Z‘êâÀkòZ~°çGbB`ÝfÄ >ypÁVƒóqô[gŽƒ‚$ƒû”.=ê9L`šÈH-ù£Á½zãÖýÞ.¸JÞ:üYOGTÑ"zê<Cµ™é1c²FC¢ÓzbÌ<1H˜ˆHv¼æ±WÐŇ~üépñÙ7&£iµjy1ãƒ6aª±eYÙ°¯å6”à€ˆº}”™&/Þb—¾–gÎ3€ÕÓ ÕîÉ´ƒ/9íÃÝ:}ÏDòqAü҇dIw‹Š1sŒÐq·ÏHA—~^é÷<ŽÈ6Ì:ÖmjH„÷¾2üf"I›C:LÁÛÿaº€X€äE¾ÇOÃÖ5‡àe8>‚ ,üò qèVºÅëg}Å(@z"mîsË ÒªÇ°ÿ܌ÑêiAº·xK…c,˜“<_Ħó" ÖÈ-9xô¢@)ªéSùi`Øï²ê²éi~#DäA} ðC|Û ¢jVU*wÕ*̜ð”úµçÜlOqë}<òý”Oràú\ô²eküðŠÎ[ªs"èèË­‘l©$X¶ó´xãaž»‡Wqæžù€T|îãbM!3%pû§ù…¾àÇ[£æ¨7þT]Õ/ˆX€ß º}þ!“͈Ã4oI[¥£Ë,Þ¤§x:7lӃʚ6Ç¥Y(±ÆäAìʹ¬Jë‘ÒÌì”ìÌá Š™zӗ~Rž&íÆ¾¹e­ï@c¹¨ÿZû7ó/¦º»v##• ›8ןa' -†$V{°<3µFXg£ÃCm¿®æ„cþܝª‘ΫÅ&ͨ¿ª~GÏpIõ7õNæÐ¦Ë9æ“ñ]§+€Œ§à~*ÎÕLgUèrdV¼¢@ËQÊw7ý1–~òŒ±x·e³ûqZ±iràZJWA#k`S¶Ààv„7áßRA­i½9L2†Û{]v@µM„eØísžÈuÎÔÜ×TñÙRƒs^ði.Nů7ýbÖ¯­n½„ ÷#Ùf\¾¥ÈÙ£&ZRT¹Î±²©réPå—.*is×`ë!h=ÑÐ[ÄxGVZ'%?H ë‚ÀmT„á÷‡hŒ%8á£/VE“@•!9̟àè™Ô Ü0ù"´^¤ònáÚYKˆïׇPZ 0ló¼Òe6z>r8ÙÔ0;²QhM¸Û×´¸Ç¹ zHY`²øPq0Hkn¿Ø}v|²aR………t……sN'—|>ÎGšƒÛÀm@f¼˜l¢·IÀæW*2ï:˔*¶~)ë€|­âßÌqˆò9‘>QÚ/YÓÿIێ ˆîXnͺ£ž¯Ÿ@TÝÞzy[àÝ8˜;UQ(7aãÉñ– °À;ö¸ÂN+õá=”Rî¨.ÓۗD!ÉnÑ߯OÒ§~˜Žöué¢g‡¨ù‡¿ó“˜¸P±¼3÷LjÉy؁mSVØõÖÂk¯ð:Ÿ54{Ú¤[òµf•ƒ‡µë²?Mš;U®²¦né÷JXóâàZª§®U“Lþ‰a¨J4jŽ3Énk=«NÊx£Ôñ"ÀÃÝíÁÅKnO±÷C&®ž´ôe)ÅnV}Šm¬[@”ßÓé-:Épî­m˜V±+¨Å¸Ø@nw•±â°ö¡ L y`…OÉْeð˜Õ µ‹˜m£l3¢.FcÏ~å† +=þÀTÓÛ{oqˆˆu7¦yZÛTÚ ÞÇVÈZ֔l¬ÙÓáÅ­é—c£bï‡ÑýSlT)a½”&4…ƒTĖÔ\l' Iër*ÚN´ŽýÚI¯ó“m³ßL¯,Ï2>vJ&ö$ ²:Š#Ÿ›ƒÊßä.Ër–iƒ¤vdÝ;J*©J– V1é²Oü%d•cC@õ`;ѨåšQ|p"ûhNÞ·yopÔ€ó@'žësÔ#ª™4«”€Í%Š=Ï*JçòrÇñ*£‚{ì0³˜÷ˆëTÛ4aþ¶GÍ®îdy/:òQ_ï:h‘ÒЭ) vD³ >Ø©x±te‹¾.b,\éb喇™‹¸±s䋚¹‹K'~$$ؤ™îp°w”†8Õühf†mGn ]ÊU¨äåÀš±Ò¦WQ›DזšŒdhø¬å©š%XÌÐ>ˆø¢F6«ó55^¦§yΚ¯SS¸Îš¯hh ]W÷¸E ”ô)¬±µg eáiÎò!›‘bú2ÅÊt˜·¥‹˜$\„X¼)bے.F,\ÉbçI¥$’6”)§ž#– ʄý4ûãå‹ñ ||½U@ººðé¬ÒtãµT?Ì VLw⽟ƒd»Cò¶³rì~z\ãã‡ÅŸòÔë'ØÖf/¸–’ÇòÒ§ën³Ô¶6¹Z†Á¯êdG¼‡|{h›·Üž:_jñûJì7Ì…¼ÕÀj usCÕ¸ñ 2m GmÌ^ì±qä‹k.бc¼ŒX½1bå¢k€bß..±/¦,\èj’,]YbÀû鎋‹ð勽êÏB‹øÆ^ôç”fƒÆÏ¯ËJààuý¾ËÛ[¼Ì[j#0ÐãwœÖqï–ÁgRÑjþà…`*T~»%*Ø×|\êÃn¨É±&z|ë=b¶³fñ'U+Ò¦fužÕ>ěVq5˜’Hó›¸,ìFÊ~åÌՔy] ~ÛzDtéð“úÓU™—¡ž¾ÂÇ{G‰2¨6:™S iùú7/AqÏoqö5cðå†4J­€QBM¯ÇhQMÏýpÞKípbøÿÇ®¶k°&#pWh5G_ e¸ˆ1µâ£±Î‚/C!~ø•½ cîGs«,["îsÜrãÈl÷€vR\7ñêË;”0‹—,[bÑ¡¯‡è±r%Û¾æ.€±aJÄ<&ñ)Åʅ€ð·Ä ëŒfüJߞ°7´šƒþ¢T#øy©bH€®ÀØvR¬—¾e¬Ü,v« dÝ Ý…†"ÅõR:á&·~å}IH9>M‡nsÚB`Œq*Ÿ…FÖ³¸?·¿‹\s¿‹\[øµÁõ[òÒDþ¦=ñêY¼õ¨£V>-;2ÅÊC©ˆ˜NXš‰6ÀX@TÌœ#8íK8™.«®p¦‚[;RËaK±5l)÷½€Â“†Â“&œ9,à*Ô ¥æ¡ÑéŸiá­¾ÚPÁio•„¡FâȎ!ü8WŽS6%ÉÈįdF]5‹Ý`Ñg -&Z‡–¨ +2ÜÝT¥þ?¶[ͯ‚ˆ½MœBaÔj_hµƎŽÀ+¨¶¾üw¬<:Á· +ؼñ¸qÛ+ú¶ðänHi>’4C˯[-ÄצI–©U´‡–ÝMü· T[Õ\ê+ \n2HdbãcqêVÇv7ˆù¡»1Úª±Ý®|ëO†Ú…\`CANã÷- »núìw}jì´¹z·á¥Ê<«Ú—lv7x§7–ÎÎüS‹ÔàÜ-²y‡‡É)œ!­p ‰-À-ô·½À¶ƒi“`Xñ»06e‘RÚFÑ=1`dÒ¬Ž4g[SRåm.ñmïÄβŻ?s·úík((MoÀ ú¬3üâàg*¨ Kqú™Å+éö^¸Ãìq1qÅ9Ì_‘2{öîÑ«_N` /ŸÀƒž#鞎ÐüOâÏKƒCô:Ì<˜†öÇ`=@×#ÚÙT¹/9¢âÔ9ÌøúTüa@1¦«à·2ÿ¼¼@"ò3·×Õ‹5^ >æú]\U’’‡(Yu`˜)µà}N¼ÙÏáßK¯5&ýA*QÍ/BÇZ̙Jw_ü£ÊZT•õFR°ì² ‹ßqÛ—©¤Úo\£dv ­,”Ò =b¶÷ۋð=JžnÇˎVÃú}ÎôâÏ }Þ. “%v>Æ2O½Ìkçë’@îÇ[{­§cÂvÆ ¤ùÚL Êº¿8E»¾.0ܟÿ•°ù¬b +a^5ÀÛÕmÊõ·Åïúêܾ^ø1lxöåÝ-“¤©Àg(ÚÌÀ_·¡q X¶±8ê&Õ¨ÌhGw7°ÐÔ¶}~?¿r<õ ¥±Õ#º\ìÐÖÿêÙׁ°ÒuT¹ÏXÙ%Ÿ½›A-ޘ[" ~PLß±|=¥¡^ð•{¥’%aÐ:§áz¡¿­C$²M Üzªé®d¸ §åPš]ùlÁAÑi0Kd²QÆÁ<ì²,¶<šxbáà¯t•*s‰ 9ZMٖqz$xkFzeyc/¦ŒŸ[™[ï÷È<Ža¸ ؁áà4VÈ#ÁέÃôuIÑÒçfBåƒ=â¼],%&j”Š››ø¸£iÚ®y„!ÛæúHeu§ÙeXYfœüœ¾Ø®Ú[y{‘·–G!{Ðß&ϱ­ ³ó¹*n‘ ›c\›(G¥l<5ÉCõÔÒº–.Ð:ç2*j=Àš_ª—ôa× ußíÇ^–®4|FÔ8o6e¿ÏÅ?£yV·^-»RŶ7’^žò­“>-ók+ʶEä"Åô÷•l]qoqs…‹n^ &÷גÔãóä-D^JN9=¨[i$ûN^&i`™ +dÐYÁ4$Ñ œ– ± ¦Íƒ,y ›š +îù%ˆj&p%‘$Kõ2Š”Ê}(n­c¢£]_,Û×9iÄ/í­Ä ±&Å5­L²³H;ÄcE¿&dðᾓؚ*¿–/™-×bñôeútFpÜ2“ô¸Ùˆô¡èbƒ KÏJÀtƒwdN)?ŸûWàðYÁ“×·V™ÈV…j8¾ÎuC R±µ‘‹‘¸Æd܅…XWc†/BX·A®ø±D±hÁx±tå‹xÅÅü±bêËwŠæ.H±`5@Ӑ°Ÿ>°Ò›Ð­VZ–x½Çh¶0ԋnÛµ5‘cykΪqBɈáÛ3,Õ=*“"/fàw|klÃa7¢%4ܜ;t‰3ñ…)U('‘‚;'Á4ïã-ÿ؆€Ÿ„v÷0sÝ96¦Ð©²3Ù»¨\öã”@ŠSƒh-@§»h§zaø÷ræ²Ñê%±”˜ùCõ2ªíyՎäùñò¡#õ2êÄf=@»½F4v™aøLÿiõ4•/Ç9²øùh\\{«élÖ¾—c¾£%B‹Å} ¶‡PŽ$ó¬ÃËFÙ%"äöc1µHöNÑÇ £}ùóÅ€Ž*îÁ•’ªØbv{ÅÖÿž÷l¢À8COq#´7_vV•f«XSRÐ׸㋞­__‹cqAd9dC§©h ꌕ-2-KPøGêY›´R8¹ñæâ¸É>—d¼Oöðo€ÉñïdøíÖ§7\¦–WR8F]*ÂaI2l1î͗lG~¥¡µþ$(™ Ë U6ÇzjÑݐ.'¥ ünoZñN¤BæÔíî–~Pûr|í!G¿}Ú¥Ñþ`«¸!ˆîÖ녾ûkŠ:×^|+Ó66³·2]„i-ææKÝÄ’ÖØè¥—×µÕÝÄó—ki:‰b}'Dpc‚)|þ®òVbrúh¦ÀI©jb&(ÙªÚ§‹ô¢šÊ†Ï,ñ6ݞ|ˆ:‚y9¸'_V©eÔ <4„ž7šÖÔ[ ^§ùy kÿÛÍ°ØØš sÀÿ&M‚8“pƒ + ÉGd½?Ìáûh¨¯GØï'aoH•áN1´jsDÕbâ_ߖô¯°ÕôÄô +b + •ó™ÎKäKõ¶^û“/a_”ý²ú~_ÉdÆösÙ1¿«1ñ²cxF׏òš ý”Ïk0¯¥ös +ø_֘„^Ålôîð=~jcæð=ó;_ù†>Î^ìöòß1ìóìtô%îOdîÛÿ²v.?Êtÿ­-ÿSÙ;奿â{'~Œ¯ë=“³v´jxÈ-d;¸Û_8±ûGƒ¾8<©näg;ÆG·‚Ÿü%ƒ_Ì3½gFSüÛ§“ä1¨ÿ„°—â±™8§ïÿtOô³?âŸÈ»E6«¥ ¡ñ >)ž§þ“Ïý7ð±±8§ñ—t¨—¹3×~KOägŸË¢°c˜}Šé|<€ ~ÖJÒC7ËKâ!ŸϞøú¯ÈÿV¯ÿcyoäx:?Æ4ÿ't áµ×¨&^–tõÞYnñ–î½rûÂõÌ B#äÏ|õÀ|T$×.k2½siË£¥×‹fã V‘'ÿ$ |Uzé[ÊõÒ×eë¥Éó˜$¾f9ré©Õ˦Î\ºp<œŽizëñ ïòË×` 7 ’\¸êõ¿ß ð#×.àߗ.ѱ缓Ôjö>××a˜¥õ;ù|BúóSËuü"ìâËØD—Ër¥ìbKÔòéw’‘¥ì¢KÚò¥ìâKç¹Rö‘%ê!»Œ4i{X’õ;Ϟšj4½´I{NT¾:$½EËÓ*(Òù8’öü¬>tI}ە/”‰/eÊÒ|©¤kâë^› _-Ìr¶?—‰/½ò²>í^¡Õ l.´Ÿw‰/ŸP¿¯î¥ó‘%ê+R„ã×_;^¡Ÿþe.¥÷ˆ’õ ß=õÔ¾ó_|‰¡ð ­îùUaÛÊûymß]öVÝMf3·K3^Â$½¯*^Æ$½Uã”Ôi{(’ö\¬¿g^¢Ï7E^Ò$¾K•/k_)rø²öÑ%ò¼©|tI|·*_^¥ï ælà8;^7DϛþFï8Žïµ`7V*åšÊ«)î^4½Œ,³Z_ßàcKã¡ešÒÿë²…æ‹kK÷Ø8Òöp¨‡‡ùˆÒö·ƒZ_Øa#KÚÝKõ7RöЩÃZ_#C_? Tpò<Òø§ªÞÃß3úµžH/ß5èýKÇ¡áÈUx}˽–7ÚÌVE¥ÿ÷¥úþ ùÿß?ûæÿP”Ñûoaà[øSÁ}àêüüþÂïü-DŽÛQG¨Ìê;mFÀ á”QNç¤´\¦•ö—W¥OJߺCºÏ÷]ÿu¸î›wt}Þg»í»½‡woÝÐw™Nñ÷y«ïïéÓgôÝþ›q¦m§£Óætý¶Ÿa§·ÓÐw¹Nõ÷{«ïSï[÷ÈwÙþû¿ï·ónþ¿Ì÷ÿè26|„/é1Š‹„ÿ7Éß[‹íó”ÚgÜÏ{’öpÎÕÍ+eÖóí£#}ú.œÏõ“>ûq€èqŸKÍÙößsøõUš‹Ð¾˜¶¿Á.&o—2\O.Ãõ%ÄàÓÿ÷œùæKýÛ1ý)q7&K‰¹øÒâv†K™ÚFKªŽ ›Ë˜žòíy)q3%ÕFÇe×' 1jeÓ +.êgÌd£Ý›Je¹Rµ½jžF¸‚Ñ!ù5`Ã^’ܤ|ºvʝdõ|á’Ì`‡ñ„?·;Þö. =…»¢ø +D{%I7øË…L¯§´^¯¤ï˜•eÔ&ÊäÔ[xfTQ-¸,r1Æ7 *góxGgJ…ÒU-TÇÛ2cf¸ç±/šî!«6Øk%¿{’wÿڏÿ§ÿ»Ý/¿rr¢ ìÿgü ÓMäÿ{ÎãÎÿIÅÓÁ&Ç|llwÆ/ýG‹ÅRþ•úŽ%þ*~-±¿Þ¢_¡ó÷V5R¸þÁ‰ýÒÈPaVƒÕ¿^ÿöK©ü³Uù2,,ú»9½þ†ÿïUwy–ˆ[zJ[“+ÐÃÖ€êöóŸl¦qm)ÙÌ5¤ (Vya;C»‹.QHF¨îÄ?²ê +~F¬oÕD¥7,L;_’O8±¥ˆ.·]£Ö‰Ì—XęåVçûG­¦".²rÙ*–QüëE ¡+J¥‹Û/¿SúH¸À²tú¸ÜΎ~t~ìÀÍ;f%Š;ȏ%ü:,® !$2:¿x?”^Ö_v~`}KÓşš)Ze—‘9ì˜Hë ñÿ8ŸŒ¯HOÇ?â¼h{ü} !?nÉ>”¦³? ùv0—î¥ógƂºDMÜN’oˆSóNf +^5ÕËóUó¦J¹T«*^rjæ7PS}1Ë̙ç±Q±~͐¼ƒõ?m.©NyÉî¥K‹(gê¢<ÂC넌òÓ*Z¼TK _Â;¨&¢Ì<ÝéSœ +ðLÜðŽÑø!  ííYz[n1&õ½[#Ô§íñ’™)–­ìÇÄ}üQ'À];N˸Ÿý‘[“?]¡@™E×èçûƒ&m]â˜}ŠÖ‡É¥°ñNÁ g)ÏÚÒz×k]w¥®Ž$“p$ f²ÌÀæ ô—OJ¯œ?ÊèŒo™nõÅ!yÙ`óåQÆRÈwñš;ê96ÊJGŠ)ۜR:u1k—]>RºédȤڊÿˆ‚^,ûa4hË=ÜDzÀ…¾ûÚ4Ÿï¾Ì̒HI2a"¹&~É2/Ð `„*Ԋúç…EKÁ…F‘d&a•o’Ô]}i­VÄjÚ èV¹˜A¢5Emð”[n E EIŸ~ýûÿÿï¾Ì’ +V¶ù»ïsž¾ß>æô·}¾æûyÍç7wwœÞŽîòô÷›üޖóžèïSyÍîowzûÏww{;ïànÓÃÝ­¶ÛlÅÏ\*K¹Ö§%Üäai‚¤Ã€ž*Ð'åzè2‰±óޙ•X×ï‡~'b-Šä¯Äq/÷ãLfš±´‚6‡dMÙ6Hº–þü¶XάVžò9*ßč³ï}C®? ðݸNM, €èZœÜà­=÷D剼Ðym ‚Õ7¡Ý´ÑóBBÈÛç H†Psùæ–YÙ´…af}äƒsIHÔMþ‘–äŽý xBä'LòGXށËoA+^ê9)éH ( +•µš™£¡ãÀxÀ¡-EUö€Š +Ò¶¹hÿÅô²ƒ"6—i*C²È’N"bp¯›-Ñ~l©5Øh©\<ÓI¨'EéQ*ìcp7BË[énÏ8Š·…Hcb‘&Ü0ߑ*Z\PïZu èO&H;©8°ÒØfÝD`öAºž.ót§ú¶Ý$›ô[òÞNWA·z±‰»ùÉ(©6ÂöE¯‰‹\aÒÔï°%-ˆ•ñnÀaå5” Ò~àe\ë‘-ÿNO•å<Ãæç"CæÃÛ¢nb?à=I¦x7 +Ý?Ų<ïEW–6TéýêĂx²H¡OÈ}¨Âϧ7pRáÊ8Ž.ŽcõsPß± ú,û#é|1–Qm/¿¤“>Ž+ɦüÿ:ƒ=rÆé´>}5?¤DÚ'›, ؗëéë´_MÊp# ˜NEçl$FȶqƒóƒúË,/ HÑ1²ˆ,B=Þ»CÊ߆$÷„C&I^ɐÔÈ:Wõ2Ó~¾Ùtj_Ïù~.Ù]ÓNÙ_¿® ç«ó@Ñ·ô£…ÐíZWäÀ{`ÈÑ!¡Û´Ñ˜{A¾SCÃÜ2ÈaGAšA{Oo)›p3üÖIû/[NjÀø3ÄHÆIW{Ø»ú>µF:Û¨½|1‘0áÕ÷Á#$s{÷$Ö݌ìÄØÊ[¶ +rà0pRäÏ ++cOžVSÐú’k=Siuuè¢aËv’ÕÒ +í´ý=òû Ù±ùnˆê41ß&ÿ;l ?qk+ñs+êñrȬv”Á¨/Þõõ±}ƒX´Çß8, bøõA³£ÒÈÝ!·† ³¾)Y[W7(‰¾ö>ýëŠìò ív7+yR#¹„šøC©¶•÷âðÞIX……JýÔÚNùõ¼¶ˆ¡æÚR0ó΋J*Ý ÒZ'[ç¬ñ‚éÝöàväö'‘Y$µ¿–6ô6ŽïÃu½q4•Zøþ| ö¨¥cä&gøYQ=¯µ„7Yëo n¿L'­|áîÁÅѧ]õ¸£E¢-Wì{Ï ¤Õj”ŽÆÎ‰ë)¦µò!È¥&Ýà }% ^ÛwV;J$ð³Sv)øÓ²™ÏJûKµÎ¤ y½Ëz­ysçù»—úŸ]¥•ü6€'ÎK³1[ÖüøÓ=z¦G˜˜‘NXíÓÅ{Ä|*óÂG‚ŽuâëVâ´n‡Jc?u4¤$”wh®pߎmÃüÿÃ÷7M,¸å±ÎÈØå•æ9ûQ„òq[÷{CcGÝÄÙH !¯ß¦‚­ˆƒH?A~NËä¼q`€40¸ZûÜ);ÐȪX¹|üë#.ò (â +x«x¹ø šŽÎO‹g°ÈÔÉ㉴Ú¯ ð˜Kæã,üRÜÝÄܛp$(hƞ؛|aä .¨·2"5Ò±Þ&ûWéÌïžjÙH*h—Oð6[Á?/l š™x¿\}ߘwüÂ8«WRí­]HEnE@•ÖÍ ÀºëAö:[3֓ô!ä„_§XŒß)ü¸B0aI³6˜Vמš&¼ôÑ5çü› ÝÜÿN%Ïôý۟µ‰sÄÒÙ¢oߘùÐvÇÚe#`üžÃ—-z¯b’'ZÇâ&úØ]ÂcצùM®Å±+*€V›‰Âñ¾ænDÑë©ÅÇYùÒ`¼ƒ_IŠÂÑXOWÖᬽèӉÍôÃÚõ.Þ8µXðó.ej–)~´Çèô÷ú;×㘏bó„_£´º>Õèðð‡ó™S’#k†šNrà89Dù¿Û‰ƒÛ¿K|¯˜%NJúxÓåè éÕò×6tØiG¹m°vÍ'»Ÿ”­EM*í?5Ée’—{>?a8Å+˜÷RÕ×2NšW\´u T4m,åñ|\· N”¾`àë¥󳜯dð¦Þ·ž¥¤e>u­-<âløþ¢EL öjý(Ù]_ß5DZ€ñû6ß©–:Ͷa ò;¦¢ðçNÃn§!#õ‚?Œ rå|ݒýb¡—_9Í«4(ÚüZÄêùíÍÖ«˜M\Þ´zÂC±ÍÃÒíž^ ëÀ¯¤Ô±îôø ±7ÛÝßKn$ß9_^+ð¬b÷~qMŽø£Àn +pŸýG€Ü½%bs?ÿÕé+óØü^’½JÆ\Wß,eÅ}ጸ¯ø“°úÏéNÃòjÒF¬©+¦µ$UÏU +óµ~|i¡ZzfĬŒZôÄT$KúÖÐð£ÆþXÕÈïÊ 3ÖoÉea½œ"Äu5þj$sœ!Ô×㘿ô§Hg¢-˜ÆYV†ÌÐé³}ÑË6¾˜Þÿó}ïM#;T0s2¤•ºÐ¡Sýù£n¯Le~­á’§ÞãÞWíù±¦«‰èŸOw£“üñ˚-ù3RÀ-o­Ý¯ë=î&U¿Ùó½õü0z;ß]¿ÃA:ûØþ=rÿ²{_ŽŒåe‹Ë5 ¶Fâo7P4ôyZ‰ícD#¾ÒGÕòu8„´¬üN0Ós¹æyØÔ¦9D.ÑÇ·ë׫¦Üâ¹ïn/{ª^mxGw#Á:NXá­ÉïÿŸXÚS+z¯ü_ã-“:®OþT ρ>±¶‰ÿÃØæׇýñ½aÒÚ 8_NŠÍ8‡ì ûRÄ®?À–ýJä=TñŽïŽy|¡èëgÊç[?î·Ë¾¸Ú+ӛ÷ÆG(ÌDæö ·^ ¹¶f³’¼žõEÛ3ò@ƒÑü j&êõ®V>ى“Ö­<·DT³å}…` *ù)¶Æ4Å­Ö߅²ƒt¸‘d=‘Gu£MfOÙÉ貨 ^@j{ìVøEšÎ»qÈï˜YÓ|YíáZ‰ko®dSŒNñžaK¯0Νà-&a>Úçm¡Çb–(=~†¤4§Y ¸"}Ôý„ë銸‰×ÐÍø ÄëÝ¿Áñˆ”1:÷ ¤íð“¯u†,‰×¸r¸Çێ•¤ëàÏ7‰<(Åó:ŒJÅ.•»¬#œ3âw¯Ó˜•Bšk7ÔÏ·CÞÙ$îpV1°%Qé LI³³^ÓIDŠËÞä'W&EFqcé_ÊS•ê©GÝŗӗҪù±N¨¾¤º£#9JûÆ9,Ó§â,»gì @7ñaf¹@{T|ŒHYªP·l#ÆÄª“Ù™±BÓc‰7ÇsùÉ`¨Ðõc<€‰ +xm}'\í+í}nB’u$æ˜B˜kªý[n]¦³jßíN½¦¨`ßjöÎåƒ Vï$fÞ¸¨dÂ;&MI*\Ñ.™D·È ½à*m<9@œ\¥½åXT¯°œ7š4·Ñn(ãû~±±m3€(ÖÐ"žŒq˜ŒßÀÀIÚ œ¶æXõ笤Ùíã‹÷®7—nòz·˜g™g•÷›@Á×F /æÜàU9®¹ÇE]îêZ³ïÀµd(Ó uQšô' I¤ÁLpd5Qª}³#öŒ}T‚ŸdýrÎ]X›Œ(ÛG¼gVx¨õ÷ëµÕƒß?  ƒŸ¦mjë¦AáÝDIfÚ³ÇAHÁnðQFÑã<a^í6(¯þd擠HS½:ùˆ_¶-+÷?/8h«¿ÈҝnG_È 0{ÓÀЛ¼ä[´² ã6Ã-ºmÆÿ(Å'˜ÎÔ,=&ۑ9E—ýC^Ú¿¤åSé!áS°É£È-я·iÓ³s`ߎsaÑJ©ÿ–·i¢UWöi±¹HÖ n¡;  |,lød<~X¡{bJöSÏ1(–KîyOÿ'¿*ÍÈIEíèm¯Ee@jž)eõ%xj²)F½K]·?LÿéM)Ì;"§À%vûiõ>!ðݺëÃá†Sàä>>ðS—Æ#Źà§Ã²Â¾^¼Sõ10’÷¹± Yû1sÀ-QêèXe5‹H€íÝMðöÎö{ÇeÂMÌÁT§}6$@zÓYr¾DĝWåá—xQ᩹cq•‰Ü[™9dœDÄØÎŒø»þ…$í%û{Ü"¦¿ ¤‰ã)žmw贜Z 揽2²+o9Ó§!íO‰ÑƒpÖ^AL*ï&©±ûˆû¥2V‡ÆÏΦÿ"ö?Jÿ<ˆŸÞ”n¦øäHÖ25îfêX/Œº 6ò0 vÄa\óèԐpò^È ­ýåûâ-5m”ô +›IFÞm%œÁ–ÒY¼ÛIeð|-¤¶Kô݆Ý®ƒ¦ó§r>¿u«9PÂÉ·¢S-K]Ø@÷…ê$ê£ûv£ö”.œ¶0ŸØ$-TrŸma#?·N^»ùúrýü›e{“}N²n8²m„)!DZâKôJ}®·Áö,ªa յ𲩄-Îø2o¾Mü&âOƒbýÃ|=±÷ÃØŸ|1$dáÒŞâo“öG|1BÄ›RËDaTŽK2,´F(ý±Å–ˆÂ¡³2ËDab·Ä…ØÍBÝۏ7s.)-éʀ£YsϋDÂ65X/{}è``‡µê¦TûŒÑÁðøDÛçâ°>÷…;1Bóï)@n`¥) +P”ÿîáÓ>×ÁK҇A‰i^$‹ž H‡ßÇ.ÎAêlÄИz°RkŒ$3ÏZ|¶æÃ¤™Sÿ±gZR%8pÒÁb‹­û—r€Âî DŽl(äáKïI".Äõ1.¹¨X]ð÷Û;“ÍãyG†ÇkOäRá[ÂÂïµý€¸p¯(æÔýažQâ ³ŒÊ BN² <Ÿ»ÎGÞé­SCࠞ¾ÆecK§™XÒéæbJ¯}ìÏõûúIŸÕîÿ*ŸüÒ¬>㼫Ž˜ý2¬>ú¥XqL>וaþ÷ý¥X:côʰäßtÿç*Ãó3ì•aÙÌ!þáüרÿþk­=¬’בö(’FXßà /ûU^Ý÷ŽQþe㉺ˆ_XÉÕÿÌD +ûe éA}ãê´bhpêXg¶ÐºÃXúè]J¶>”Ö>¾B­4k[ ,V=T¤*I€œ ƒ ü;1×R7V,­2!nÐÂïÑd¥æ_ÔI ٟ…ÓÀãBêÑà$™Õ¾Ã*¿Ã©E¥–Õë‰j|„í^C!AÔµÅÎÝY¼Sï[rʯÑ{M7N¯‰i…2™«”'-ÍD±ÔO@y&(Ïn{]&;$ÛmZFc•= né/¹übʵÏþ|oþ_††‚NqO}A¸ÉÆ!~Ÿ‘BýVCíûî+Š÷©ðøÊ–k¼÷µGè sGùžú„¬ü¢ÃêÃsûqh+×µÙÖH¿nU‹öÝ9¥~uNíÞ8AÏùåPx£ê>ªAwÆ8øÞÍpLV°T¦²O÷¡]Y9çL¬˜×®«0ꌬˆÈ)ÀÄJœé•·û%?û¥?ñŠs “bF•[8§þ}OøpðP¤£"¹ÑQÐCBĐø×ªÀô+»u?þ06ÙV$ih»¥?þ›~(!ì©ÿ®c! ¨;;Y†jdúŸûU?û…?þ²ŸùØÄ¼íTÿúŠÀÝþšŸÿÀaƒĘB1~€JŸÿËCëÇòŒ! !¼h˜R›v¡ Ñ©™çJ4kù»`L¼( ꨙÎ\iAóP5N[Az€ÅæÅPáè H”>&Z”€´B2+%Ia›Úkñ.[º[ËåMV¼“Œ¥ñnj|Šº‹Pi~ÒUe+8"Œ­Ji»±Ã‰pžjnU®ƒ=\QE¿Zé½ÍÛÛçÍ{Û¯‡š9!`‡¥QOÑý<õ)ßÉ +PŠ©<ä‡Y5 +Ò)Ôú[ʏ£¹%5ó>½)rCJ̛¿»X¿vªì2T¡*y¿•2¶B:ñ4ÏNjWéóæ­3Ó=×$*þýԐ„>¼¡¨ä·’Sg³üZ©–g±—Þˆßz|jXŠñËÔg÷,¨¶¬@&eP <òôt÷u£ ãÿnžý¸^öá~Oý¸_,½ ­ú…hóO²ãÿÌÁÑqÃN­p +ï‹ ¨îs44Õ'þkůô^<¨ìûñÞ?áÄ|§ô^<ŸòÞ<ÚµV#蕭ÏN=^9ÞÔ0ý9©6NªiwU Ó*@òì8§,oÈD5ŽóKyóF…å™ïl+oÇ]–ã[#PzMSYß4­ÿ^ihݘÃO×8ÅyÛ²Ý+¼Ãç1¯~ÚYfé'W ñq·eº· ½EÆT4³ßRk|‘¥VsÛóØÛ²Í»hfè.®ãnå3ù“`3Ûæ ‡ãá œg·ÍÿôM-kÆ +Á>µ¿ÈÅ]Ѐ¼öóÊxqؾ%¼ò½]gÞym?íqmç–*áqmç“'¦±œKyäÆêž-¼òÀßcÅ·žê•æ?ÃÖ}À6‡ÙZ÷Û £y-Wëo…ûÇV'=¾¤ú_¼·ŸKõ·–ù…e·4Wœ².ÜwCÒ6ÔùYo¡Þ¾ïû/[¹ú(sL +§ysýîç¹¾ô0Խ滵íöý¼wF‚3e*ûr¨hÆ57›ÊTQæóœÖGð3áÕeM-š´^Xoø¿¥,´ˆÝõÿYƒ áÕaèÿ²‡÷óK ²¿Ï ?˜4ÁñÞó&–#~;ßhXçÇ{àÌ£À_8J…£žçY#“ÿü³-ÿª!±ÍM< L–¶ÅåŽžÆÆÆ­ŽæÆ–™xzê]Ú}ÝP˜…ø™¸™˜†8†Ö¢sP–¡1-3Ð0ö½>¢ÇQQj&!ž Š(š]â}çù6ÁŒXl© êQa~†,X_ÐMöy”=ÿ—ÙôTû~÷¢ÚÆ¤êø…Ç;|âE…ü>÷Óª›¾u ÛÆX³`µ T?Yø¥ß?¶„íÿTÙϧŒø%0‘ +Áà_îMûãEmÅ3Ő4ÄÇ!îÅm Š _NoßòP½ê4ϵÔ϶4,1ÇÀ_Ùäj‘o]®`Þ»×GçñÍ,¼j'¬ˆð¶·7Zà*¸FÚíìŽ4’x²CO.!eLi9˜bTv(Цƒî`ÎF ¹]ÔÞ_âïf!v‡Pe¼áí ¹ b"–iÔy,CòY/S#3Ô0Šrp¢ðI‡Ð¼ãÂÇm&õ£ÉDáë˜y¤Y+ Xâaƒßù7V02‹œ›ïë9ReŸ)B}­‰XkÊÐçFúI«X¹Õ˜1Ç»‘$éŠüc×23(Í3+;ë‡ß³.ŸÛ4¦“Z•Á6Ž.HØ_„ò±‹ÃØ„Šñ·¼Q'",­Ý³¯’ ‚% ±÷ÙºW"}‘’J™¦<&àr~{›6hE*uŸÐ}Ýñ'”>Èo¯8)êî×bOò^á&DM2LúfqKI95аY*gø-X)¬Â‘m”U'CuvZGbŒ™®ZK~*¥¤–JŽXA¬+' ëè W^ÓÔfLTØõMKÁI%hA 猸ÓJKX¥¨ M.¸êóQ‹Z@ÄìNÆì¤9ϵÜöÄ_…¼öÅ6Öi´¦µˆq/g¸Ìó<øw0»R> NïPDcò€b¢çœoiç…äy¯òØúgÛ¤žú n¥³¦(…÷tM¶ zŒìœâf‘Š$HâŸ[mc –S,ŽéÊš´E€ýk;­ÚtøÀfÊöÜr–Ž¨ÖÈRaÆ3ªbb{òT—ËBÞ·i¢Î­@Ë>¼òX‘2»m„SZ­ú¦x(9 §vÒËÌ;Ï+,7:!—^R®´`áïžÛÏùý0]`yÎMî­¸‘xÊ@Ö@Fy[ZhwIPú®› Zºˆ*t42$ Óe È L˜½’„¥ÁSñFú%öCœÛ;¸–\áâÀлݽ yº8óŠü¹P°•õài`,8%ל?Ç13‡}T Hà~c¦ “Z:ãZ&Az_Œ(N×ÀvÍLÒ¶’SEŸe¥”%z;SK¢f!ähÓ°HwG+¨Ò#f¤}ÌèìðWåû )iqÏl´¸ç´<¸çðH£f‚õöŸç—Gó?¦]‹H½~liÐêM!¹­sœ +ÛÏkâ2<¸ÛÂù—ýS¼_xV¦ºûæ© šWŗWþ:*eùì>Ž‹´Ý¥ÌV÷Z¦:9\/Uäí-ô›¯2w+][ÓÈóXž{ÿ½ŠäÏÃ[|*˜¿‡{¾‡ø±º¸Æµ> NCœÁÆ¥—“Bã!'Äëwú› < ÐËþ÷O¸§ÉòeƒY÷郇ø¦X=̗ö̰gÎ}ÌÁ2Á„¥Âêο~ý »ä–ýñºßëÎÈÇ®žªKޙ`ɖíÿ ¢îvv!A‡¹Œp5Z"Ý¡m]ԁ#S£Œ;çù-õ‹¬è¦A•S¤®=8}“šp%ÿ41𣜦°JjøˆÎÞÀl6U©¨f†]+³¦@—l*g ¬˜ HÙK‹+;L.Ô!n“%‚ìúØró¶Ø0êkÅ&ú8%1·íçSb¾Øç ·;'–e.µŸáTÛS\Ù©|¯qN¿X/™j(Ñ÷šåy@›â;óÇá¬÷L׉ÙVt ¾êò=(:¦¹þ`#:=ø6/8RµüÄqJEâRá†$;öaÕa‘ZPÏ΋¯Ì×Í&ÛªkWáÎ <õ…" +œ-´§i{yž©=×h $VÁJ %¥~¸JWÁ‹¹@KhßyP½K¨p÷dNØ Àç¹BN¿ÛjxçlF±É;Îwꪝ³¿LW´¨”Qu¡u¨Ã ¬òo´S¤a¾Y D¾tpÝQ6éãÏ¦û˜>ƒ³*è;˜#‡ç™¡ó0¢R™´ -vÂh0Xo÷Û+–ÁØ:ì3-éq#Äõ+°è;µ'ÀbjX€&“ ·Sƒnøxçr¯’ŽN¼ Ü=,èlçü+³ÃJ[õY²üS_Ì^iUÃЅŸÎäRÍ:ºP;*_ÏÊ"ëÓ&"Ú¦…wD©cPfšÕíËEüòo€’ò“¦(‚}„.XÇóÞÍ7ÛÛi²8‘ç ·ýS>§œoëñ„¡Q4`Å9¥hžõ0Ѩ9æ¾ýM ô¡æOÜѲ©3RÑ{úg~VëâÎùOøç}⥖lñ¥}p‘~ãûËg^iˆ8$×n¿\UM@Ý­_©=¿ ûª‰›àŸ¼Âé¸ æÿ ]ÒâQD€m~œ?x³†`s†ŒÙÃi40ÜíOñg·À„ÌTl¢r¯èå´Ë×1\›ƒ©º1\¦g/Èh;Õß sV§ÏçS}– ÉÝ`Mp–ó ¾…µ‹sïÊŒ‰F‘3èY?‰}"Øãâ©Ú÷ó•xÛöŠ`¯:~åsZÒª}=e@EñP°i¬3s‘§j±þÿÌÅbs¡GF¶'͛ÁšÏï³qüà‡É¤µ›¥<Ùæ[…xÔ14kc&9ª +Ù±:`6 ùÁŠÐý;¸¬˜vÕBǓ$]èT¹| +£HÁÕOò]ÁüQåo£b±ÎZz¬/’›9Lÿƒ†> +Ó0ÖçòWñ*ãØãýº)‚DÕûÑû+x/Øa×.1€›:|—ÍÎÆ¨Q¬º©£’È™¼•Iì©§¨qFj&2Ô¥Lj`ý!N +éR7ƒÅy³¢`³ Ýã‘)(ô.É&ýÓ&,ýåÆ6Á8矒§ÓAǕµŸËàB=³ÏxMÛvĝw?’Ü Š%‹æ“‡ØØ­B¡’P§©ŸIzÈ«~)‚¶b—ýdrþb*§aã$¯÷¯ù>©Á8;uðeg~wf§3ù2( æÞEUTœvǨŠ¡ñÆ%‹±·©„ClŽõ\"fæ§*ÿ€#IäZ +SFÛ,~¶ih2ú1O~Enò¾Anò¼?ýqÕA6ï{•øÊXÃÛäÀåÔýÏß.æº{³€ܪp|k?‹¢—ŽüwzÿÛø,Â^ñNsøû§ÿóܞOюï¹&ZªKçU¡Ù?yÊù>ϓ©¸Êý#9þ½¯ÔKF…Ã*>'r¿7¼J˰Å¢þïN¸?9ß%üÿñúuÁ;Ûÿß§_¥lYZÛàôë„Ë “ro߸ù/ý­"î/Ü¥î÷+„LF©¹N©uMÿÆ\ë£Z|Q¬ÏI6ßv/PÁPý{æÜ-6·w*æÂe-¦žý`–< ËG~°˜ÈâÃk:¿–©.@äHËË8( ݨr„Ðt[[º¡a•ó9žX’XßjëÖõ.E2˶OÁ°wœÁþfy£­Æ8ÿ>¸ß5)óIh z± ý’9ºÍ“%’;:ÍQe—RpçûâXt0híh¯iÔõÐr‘Ə!ÑwLÂPSž§~ìg{¥›8W¹ +뼂΂YÂÖ›,FྤÁ‡¬ƒEz‚ÄÂ4“‡;‘“Oé‚ÁÏɤgói‘¡C¬Ã“ …¥vŠÙ = =ˆ’dÏU"ʊ9¸³&‹–4:TD2*’j§pÒH4z«± {T™Þ+d$¦>Sbf7e$ò\¾‰-”Y{Åo¤9$“öBԞ= LMg®9‘Öh&2,#"&)Ûné×gÌúW•”Qp +j á:US·¶ƒ„ÏÖPÆö%µtGÑÛî@H+uèc $z®ÆtŽPdT­ÔŽË Vª·Q+>«šŸ4ÈÏíEèÿZ.ÒŽ$2*–çXÊÐ sáæ W˜ãwß!šûê +Ò®×µƒfãÝÅå|f¾³›jÖá£dl~uřѼ( -ۆ¢ás22ñÑh=‡|`$rV ƒ;H#2iÆ8Î|¾„ÎjqwÓ¦ebõúá1ê*Εâì5̬æ7΋~çFªY‹©U3ÕŘóa±ê¼¾ ã¦þF•ÊÖ^Í"éèžÕ&ÕF <úJ§ëƒ0ï,ÿ£þõÐf±øãCÝè5ó1û‡4³û‘¤"cØÅwÙGh6Ìȯ¿«Ìñ8¦j8?ò³øPh滈½%Ž¢v‰f-â¨f¿RxÍc§};EP 3d¨×¾vÔw¡ËDßGQP|ÕD«ÖF¿C=O^FF´¹Ù_ևÿóMš¿VÂ=Ž:i Ô=¼‰Ðè,ô»¸à:„9¦à´Òá3]B/8ú"dó¢ó•{³H”¹ +ÉsdݦÆÍè7(K¼nbòd¯œÊ²ˆ¢Äï«¶×Ó;ÜÖ]•ñgpnÔáSÿS ´ì»96çkêë˜Ã;Béd?G&=qžíÐ\ƒ8;‹Ê~JRÒüþ<°„ÀIp«žèŽ:œþÞ7¼°”-c9rM»zITe¢ÃHçtsÑ×Ïî8@4_.ù(Ü9 +uxýA §êóDd€k·wûbòwóˆÏ#ÐÜÍh2RÑae¯¹äA‰ÇæuDzê)©è #ýþ”w}Áû»™¾ìÆXH§¿'hú œ=û­]ž±âÌg€Öd䌓1pÑüÉ»âøNE¦#J öäfa<Å;Â珏#Ž·ƒaù•ÑVuJjz¢ÒúÈ2Þ©œ41"í1£¶Æ{›gY2»q|÷M]¸¦úŽÏê©e’+»X§mÌG*Aï.¢V¤F~¥³‰¨#}øñ‰ª®¢S¶ö'¢WNµlL ÷fŒKøv¹ †”1³A›Œ3“ gaË3ÛÕXg=¸-ø4x“Ù+ÈëµUÔG3? Â*þþN ¤¨;ŸË.È¢t½9(WTE£±>‚ùF|ê!ÃcùŸú¨îuؓ %'ß+WÈÐ-* Z»v6r< “郄y†Xó(2̂éúfk“<¦ÁÓG“øŽù„(ó¼aut‘,\?S)dFºgM>B;¬G2{Crížs°´ Ðm‹š‚´×ÈՊQêLџՌõø¯^ÆÅ Åwš-ÐÔ¢cv®‡Í¤Y=«H˜ñ.&¤3 +F«œ(quöj€×X#œšóÃ4éù’K/È{¤”èS9u¥|ª{8ëC¬2©¯¥MüåE،ÍÞ´¨ÇNáèw¸âYùv~Óÿ^^ +ñºµ*‰$€FE‘{ÊiiÁ&àcƒ}ròœuèýŽ*ØöŸ¹Sësí.2‚¼ðkªì®ÿ•SëV[IÉàÌ<Íý>cØÁ™‡é¢?ÜÅÃ*ÇFgUû É½±9éîš §Š¿ôã{_ó³@¢ÊÝÿ#FY>énc9V?[rG÷¿ÖPY`SÿE‘Ù^OŸûDø¶ÌD³ý¥ç‡·vp¶ìÈgUpFÑ)òH•ìm೜J$Øzø³Ñ!õ8@סë½T„ߘ,ê.`³ÖûŸTFúQ+‡OG*_¥˜×CÆîHs•úK‡þ²{˜‘ßBK*ŒÑ;>7ÚzQ„Æ”0ŸRÆw +Û|nt¡˜þ¯¡[zpª÷ÑA“k(+ä•OÐ3rs+G¿)fF»ŽÕ@œ” üHæ¼6©œ©NU¾Œúi`³§ër›b<z0‡k  HEÒP³ø«ON™™«'låHiúÒ%­²ºÀƕ ÜÑwÙÓÎJ„³$epU™û¥ç¡—ŽU?‰V±¿ÉÛASÙ•H´Œ‚´úf@ñÐ&©9¾î—´ÑòÆ{“6 ýÌòԈ-9g5¶4M€ÙßmN‡ry¶¹þjÓo½+¼ÎžÔ'­]OÃê*ÏH™ž!ãñsÏßAV8%?u·ßÙ¦ÑD¤-b²õ¢ù<öœªÿk£ýÉâiîaâFóïŒÎBޘ|þAÅNµf)aT˱«¡^?cLoù™Ÿà- ð×cÕRÌæÆ.õì{GJYŒ»Ø7Åꖙ“江4Gðw˹o­VÈþ¤³CiòÑç ^r¿]7W°©ËÕÆ©Ü/Ö4n3‡˜9k +¢»Ôz¤¡ñKG§üæÊ7 |lë®>ŠÎštsÁ¡Y&ø ƒY¶}!iËhMÒfYÎá¿1 +KÔ¿Œ–s¡,²ðPkÔf±åôƒÝÙ¸™žý$É„+k%¤Q㱗aÌëQP¯Á®#¿4b­ ã)60ré8µs—o§–@2£ [·›à¿ÐwÆüª&麻4žÁO„ïbãVüÖ,ôÊæ(05§d±ôœ"Ñ­÷°2±C ùùvÛ4ñ9»µZ6}ga¸à½åLäy9#ͳaùèásw b¿Êrïaˆñ•{C†HÚuäãá¨#›¯8îþ¼aÜ1Hn £Çªk”¸Ãé-¨UuÖc/ ]•Æ]Ÿ·Ÿ$/…i$z÷å^¤˜òèô's + Ñ÷÷‚,ʇ@¯œ¬ÓPMê½j~C”WEüeÆrڟø¹e××§9ÿYÈ5ÉËáàx÷‰ŽŽžc:6ãc:žùÇOýH¸èoŸ‰͝uÂz!Kì8Î;Vî&žf“šDÞµy°|®=47&|HRÇs†’…KMIÿ9çz1çÿËG(ÿo-w‹hÍ0s]Nl•Nhùç1âèm|\¼h]þzª¿ó¯#ªòœžB‡ÉÀÊ ®‰éb9ú¾ ³]íÉ9™ÔßðFœú_öÔ´à¨úF‰oYmç²ù•ÁAäÄØÊf•O(R¢uJ¾è•S¶n×?Bhgk¤Fr™ñh +VØÕ=Ö …œMFÇèøÞ?B\y NÔëYJ¤)F³+ØaÁñB9thðìÎðÇØ¢[²žö“Eז4%h3” ks5ِôÁ¬ž1æP”'3å`3³ö‚§oWçE¿†kʧ+‹ûPñWü5-%ügmí.še íڞßHŽfО«~åºÒ[s# ©»Œ]:ƎäJ’3¨À,ÿÙRÏ ™^ÿƒMILD“ú‘!?÷Ô´-!HÂX?tZ?ëôa‘؆5xƒpÁ“q;"Õh>Ë+Ÿ9•Íê‹M¹#æø{¯^Ç+ñK#Cpl +'>1–7_»»î± Ld>‹çfWŒŽ½f>Ы¤}]ˆŒæ }·>}W¤zÄà²Ø6UªŸj©ú¼)¹y¨oö +vÇ4ÞþP Ï&nj1E÷Þ̗ùÏæŠé5‚žs >s)ܺî]‚´K˜uÚ=D”X.êQ¾2šùå}@¢ ÿ¤˜–iz;䢳ù¥µ(•Ò¨L”aG’køÎÆjvuo\ZCqبje5s¡¨¢¥$5Ŝ—­YvÓHÏE½8¹›ò­´ÿñi-÷ çi,Ç)üÚKòñÚKÊ&)#™»üÍ%ÕòK¡¾J?+ù%Õû’€¼p§”têHP +ä ¹³Ö1mPš™´XœH™þ•?þiØÍǪÓ6vº7¹ÅxÑêmJ-­N +iÏõÚ]áŸ9®’Yú]†(âŠ+ÿ8[á…eçq!ÐX73+«Àe+Ä4 ûdë(bð+©$úºr-ùMUp4ÖT¯Ô>óˆÍ6k?áÅÖJ䛄/8 "x²{Ûä0äú Åq½)VÜp¼­j‰þ¬é0êÇèݪÎX B*j’ßõ²EnKÖÙë#{ +jòcÊNtæpe®Â þ2÷¾;IªÚl׸œÐR)«ÊѲ»Ì;è÷ó±j{5V~óÿÅPèfßrPÏ.bÊ÷ïÌ-KMHÍp¦kÞÒT‘©žØÛ)ªŸ7m>F–f—®­«ÚŠ^k Uj4½‘xMSpÙFÞp”#M^Ċ È¢wòeˆI³‘g†š¡ÁÿÛvÎxcœΡ¶}c‰Ð‡5éÛFü¡ò¦™£(©•èñŠàbo ¿ª×‰óË˞uKB´¥ŸûRÓyœB0K—ït‹êÆå³Úzwm`¥r +Mª•Õ*^„)™òO¤FÛ`ÅÆ¿DcM9'^{mßN÷¥¦¬½¾LÜèµÇˆÜBT¥(§ß þ˜ŽAñl~»+³ ¿v ž†ý)Ï +ºüºÖ ËCJl\¤”­uºš¼À7QÊ©¢«vSÑÿ\ƒŽá%‹ûônm´Ft"3©Fmå[ùˆ!»!åþ;Ô!íÉÁ$G•4|ؓâIÏ1ˆlà홱¿ÌÍ3MQˆ I×7ÒI‡€ê ðl„SŸöÄ%µXªYü¸¾‰¢ϬǩlhŠ·r°õc(gÀÑ©ªË$+Vpꟷ¶Öӕ”1·ë³‹ÈaOrˆy3™x1•prf»ƒE)¨ÅE¯­±Ø`ö.›“I[kÔ¤0²Õ#™ä¤{dáw2DÀåÍm˜¼Š~$ý®Ï×ōüHùJ5Ÿú—˜š7Lsá+ÈüԈ5œvýV6ÆOûZ8¸ôa÷eðŒÞTÚ—‹J Þñp æ·0˜å!§À^?Pâǝ¡UR.NÅûØÜÊ.•Î5ÝkÑÝ~F» e¶/ë'³Z=ÑïàÛmÆü«Ç«¬ý[‰?Y³e-¼ "ЌªMÅ<ÄNöµÐÅò.LP™ÃcôNÆ é^Äô!èÒoNkÈów]ŽT\½UUÍôA–dDö?ä°/4ž†vzº!@¸ÒòD*îƒ7Í'¬+…¿ÛuªɉޤíäjH ó¹\æ¢G§XŒäsg¦@ؾîÀ[§¾>~h¦Z Œør–óðªáà …Sëõå0 •)€J™ÉÊéE-+ADuô0ÍDuö’r-'&i5‡=Òï"_òûў_¦#øTNº=b°Ùíl#9¹[áHA‚õ#áâKb žuêGóŸ†W#S¯í'iۖ™Ñ)«…@´½‰’ â—÷?JŸSƒ;•zº$7é”Ù®ÜÊ®Á ÔPi+MäWö/ù8¹"1ž‰U™ÌX+Œ>¼~ö_L–™Òý€4Œ3ù=`Gåb Õuœlý Ñ|¦É5Yƒ¦7SMQ\ºLvýoúŸIœ¼ì­K@¸Ã¬¾($6љŸFžÃpó/p¦¸l\ƅIõÍÿûC7Ó_֔Ä-iBrâöog€@üƒçIûÈUYæ+h +s}þê.ºfÈî7ÈÓßXN +ð}†Æ‡5 ö‘]-üp²Ìè©l%9Y €¢3jÒjž5¥þ$àfˆ<*ewyÙ³\e5|’ OY m‰ëðÜò­wêÇÍ+#FÚÇ=š7~ò‘Xùƒž™qˆÏö:R?Ô¹^ئbË\>Ãáï¡$±.gBRxï[ãÌ ^–„ú#|GҖ]qòñ­Ü›®¤:œÚ8½2é: &<À:´j"˜øG¼Ž‘ôW´Ñ­Q‚|±©.Оl± 0ΛôîÄì\±Ôð-aYˍ€»”n …T¢:Y¥ct2¢°³1°^Ökwó™4 â3ç½ oˆ”/¦Iø”­Ž¹:q!& sS·DÄÁ«áA׉Fáe듴¡ÄúメƒOoX’:LºyÜùØlߣRà¡T0|6?D'ûÅ;o´‘À˜kh ÐþsË¿ßÆ 4gb‡¼Š;SÕÓôÈÌ7Ù:§8‘v AÄ¥tXrr½–Ü”4.¶ÈX%rׯûj£;—NAU‘EßúºZд‰ßüú%„jH32šZ'¥ˆL¯o¥<Á¥’î"¿,jAaרi›ßéÆ oÁzõÏÍßÜÅ\a¾±jñ@–$a†3ƒÎ½¬F7率&ÍҕhÏ,4±wgØmiÈÜ,N=}DÍåYb* .ôëÜÀ#£æQûÄ9èԖÀöòu{Å,ÿàŒpOÀ5J”˳_áqñ…ÛJ‰}Æ`ãxôX× GÜ¥Uˆ×æri„WVZéÉ_¨ßƒv°s>˜:+ޠѽÅCÀ:­Ww*Æ4zfºZ#àG1R”Û-]b0iÒBÌhJ¶©Û™·bºru„iS¬Ë9 vz¢nØϦs`¹]m7$k`▞|ÌW–D ÌsäGÙfκq# A0øp U³—Ý4jβs€Ùò’Õ.ҙTŽ* éù$R}w-φfYÃä`1¶&#{”ªsJ†#sJ†#i7ÐtR<cN1ŸXôÏA#ÔÛAÕîÚ§r†»•™Ì³@dŸnÒOFí =¶Òq£¦tãUªÀR+qՖz3^Þ`5)äÏ9;Óß­eí¤ ÑâõKOqÐ5É8ÞÍ`þÛ ÖE»Â®9î'?Á8ǒÛxfÞLo œ÷›¨òøÌ‘RóŠ;YìäjgÐà ±²CÐ5ÙÛp$§D…Ág÷Ã3VcD$ZLË.oy§UQݺ©WÛ#ô†lC/€.#–„æL|wC½¼ž ÆöüntðÖ +E¤“™Š1gûÎÂÔg²š„7Bd[¦ñÓ/wMÁ©—*­ºáø’‡æ ô“葍)ïQGàÜ/5ñTÈv6â ÿR7ãi™}Ê&¨:ó%׫V}¦WKƒÓŒVÏ—«AJšæFú¨°‘ƒÜœÒT§Å¦<åÌGÚgdzcAàŠî#ì»°5jg’4ÁñómÈÏ`þà=7.Ëj(àRÖS’¾¬ø[›’Yü¸Äo_ª…˜— çÈݘñQ#å­4gy#,굎Ziì(‘òhÚÔmtägm=;ÞpòÊÒ½óÕ¥j ɄSöD¹øcO˜4³ÒF¶í¤â1×áo»#it[ÐÉNjÍìóã缘¿÷çm¨ª¤žèú +h‘úšYá´:KT«üGØÈ½!jaxfюXU«Á¡Ïxœslçí`ڃ;å™x䎮½ïy¤RËb™—Ÿ_õ +>5—rÑØâ¨@?×͒SjõDA¸¢¸+”©b™m,T(º-ÁÏ\\Cp1Än'ûˆÅŸÊPZ7§%ÑûU—Qô"Rí°›‰þ¿´u[mîÊÉS‚Q±©ª,THó‹'º*ãg´V[éôS_¦³Â*OD2R¾éU@"ÅiꊥC²°ˆþTl£1@;“í÷Å£Ò (lZ·à*M,WUÚ{YÜ8{±rOs½yDÁ.q + + £½G¬‹ã#q¼3,23Ždÿ+D¥—ø–—¶ $†Fµ"ö©ÂO·á¸F¼‰@"üX%š0Æ-¤1H(ô¥ÿøÚèáœë ’ö;ãô¿CGc2ïæ'}ÚTe ÙúÚQôG5|EÉ-B‡Ì8ŒA(R½…¯-¢¬|2*Рû"5+ÞäOʑŠG(Š{qq(QÄæG±K”ÏÄ×Âçõ.6êeSÆ^ʨiuîñ;‘­?mØÄç8Éßi5O´öí?;96ªHX£àƾHÁ¬tÆ +4TÎÃÆB½¶µnƶË[H®6åi`”³ùÎ×§b¡'Cpó*ñ]Ýû¸¿`«™Ó—s±›Î#rsj®y oò Ôþ¼Y•Wq‰ëNPpÅÛ?´—ÏTìRhõÂF{¿µ;ØÒþ'ú-6ñºàoæVg¦=ƒZ|p€Û¹»7–¿Eõӟ1f0§tq'èìbf +7`‡±ösß$‡¯sMªAÒµVgMI+ +Æ^töb{9ý³Ø +´ö>ސª2z²¹ó!W‚bb猅£÷óXbãCŽtßà“Šd~þ`ºÎ• LßóÕ~çÃ< êwð$G ³7Öìõ`7"N&®=ÿęŸX힩žË›°Zän´Ý†£ÃeNG¬EZœú}`~»·C©#Ä?8IÊïlŸU€]ÿ{€­”È>½ãª“ª{ “~šÓUÌÓ;qœÒÿðolãPp`²5~°àˆÀ5÷Õ7ã¯z+©l×¼ö[€Œ1u 19ër%]kØLª³ö¥ JQÕø~4 +Âì|XA_`ÜU€×¼n«ÇçhÑΞ´®ocλ‹LÒAVXDÑ^B²=q.¾þ©FRè Îwv11mµúG,@¡–yáý ¿é©†Àç*éF¸)QU5Yšµ5yZ¥5}Ôõ¯öݤó.EUê¼®Â®6MYD{u÷Ã*ækN`¸«­«VSW™ª8BV¦ª½$”Õ9J$?¢i!Mƕ:LäpH9YeyšÈsEæ;º÷RJ?Á¬Á¾rÁÁ0VzMevÕ¸¿¾MZ‰'s5{rüf¬áø)8½æÂˆª›üü_5wÍY°ðo/c}Îð¼ÆËâóµ(çP½ƒÇçu(çQ”ãó–G9á¹Êñ–¾X+‘9»ŠšµÏÞ@¶ƒ†¿=yk•êPõX<¼pØ´ n$ýâpÞn® Ü9—{—/ÛéÝÀf¶qý¿i‚³ÛƟ‰=¤Hùw²ŒãNH8ÐzmÅç¬ui6ã_ý·n5iD+dÿ‹IÄÀ֖Y¼°—WBhӗò8Ìϱ}‹3Á [8¬¡‹OY…‹~¬ÃEu\ä§1,§*($H)Ü8xnàXÕ_ãz&çü‚Ïá©»"79÷FªG® Ofíÿr@*nEÁ€Õ·WLîðÑÿM›JŠ±Ù¼}#µãԙ@ƒWƒÚhežœg`eË Ÿ¨ CÂ%•Y ôgq°B·{¬>2PuÒ0YS;ž<'k?ö£R §2©4i@Z…£å]ŠàáÍùYCRdáaŒŸ¸8tªFǝ¡‰ˆ ëœgi‡Ÿo튁l»Ô­Pj€U5Tl®¨Ô $h‰–Êê}NägGb–cD£ŒäÒ'BcÜ}ㄸêwùQÆÝ)f,Z+©Õ,Áü»ì®§”³Š\§g7­]•Õú7Z¸ÀÞü~jÌÑÎÃc̑’åၱä'Cû•Ê櫑›ÞºÖ ÿœº¬®˜®t%à5 63Îòf€oœzó'k Ԕžª·¢cQ\èÕ4ƒ\ ÷µ5{¢5±9šév^ՕŒíƱí +–€àCÁ¸Õé‹ ý6‚©î§—®YŽ…Ú©ím’‡¡Öfx’à ³J+a§3òùcÏ­µí ÍÍ»­ªìÞ…¼’χ Ÿb>é(Ô³Z‰U¾–3ñŸP©f0›ê’pWXÖ;¿©ipVËøg¢žwНÃ`o@~9Ôcà >ìæª¹Û|å‘ú›F!«ý}B6×Ñ] +PÖyÞ]š<@ ÈÌÒ¡£¼:w$øâ§bû6ò6ú<ÉÁÒʼ'7 C}£¢•´CNÊÖÙI¿©gÍ&Z™éRÌS¤1¶ñw°1¶ç6Bxýùoâ¥-:‚Ç~3‚F×á[aޕ:† ¨5Œ“ª>üCŽú³ÕñwÅ[Ð5[RM兣]mWk ¦­×4nú$xXq¥j¾üïhxý¢Ì4Âfq ¹ôí¿„ß>]wьïÑØÀ!%Rvó‡gëåcÙòÓ‹¤+§ß±¥¾V9t+Î*͚¬NëS@³ÊDZï›W_}ò+À®@qJÃâs5X}‡V™Ofƒ´ +ì»Öžr€«"N¹##bòê­a‡ß›¨š¨ÛzhSThSóP#š@ Ù¤º>5`TI{5nß5'ªâ¿‰0@ ÔeB<-±mªº +AÊøóä¤ÝÍ8TQtÐ7=âN&Œ@-tà®+×Ðb‡@(€¾yz½ ¸€j$€ +@ v\hiygٗ‘ŸžwÆî´¿Dï&Ã@ã<™§«œÏÄH2s ×ê+Ó3+C CœÃÉßZQ™ÙpQ÷‰5¡»RŸßêR>JDÿ¹ ²03Dk'½^ÄЧnFíkPû=7š&þýéï"¡Ò#w6©#%`9âˆOòš»ò¾S©û³)…⻈é.]ˆ8‹pZ3¥+ÎÕÚÃÇ4îû_ºww‡tíÙ±;¾Nâ—.Êê™NåÁ`¼ØÀ¾†8ø5;Þ6WTªYá •„RÎÜ¢rš(Ҋ£ !eu‡RÓ׺:åýУÚðM +?«Ãm©¿å +=¼ÍIŒ=*1·™°– j:ô©AÛâñ +“¢E³ _Lêjš®õ&\óf¥ +jý؉š*˜‡2÷aD4þÀ»ôÅd·ˆÎ\½4T\<¾`å|6sé +0a£;4Uö£U3¸¤Q‘â@ä@½5»ołž¾ ¡ÍÌ[Å+&hÊ‘Œ÷B¨:Tdzpú_Ï6’QŽ å=e1¼bvéîtj,FÅ5KÕ% +FŽ"~á¸ÖÙÚ¤­Z¡†"&ÞU˜Oîôh;´œL‚!€5ÿ»ï5þ ¦ڄCÞøAåk—|ë¼îƋ‚7¿ÍÇ·Ý$AqÑ  )ô5áKԏÑ yG´ô«Æè@Å?Ý4¬üàÓ_?ö%0Ú@-Cˆú‡R;4ƒü Ý9c¦ht}ÚEGW9'®â®& ½rՏ‚ qì*cê ë{ݹÐ++_euŠ<ꍕ×(g…—Áê ìãu‹9øá쮹X¹¶`~{+”ÔÔð¸M¯¡áÇËE¢ªx³ÄȒ¯Þ?ÆTHMC°ê_ܼ|EÇÜmñÏúGs£>—Fþ¡ºƒû]".“àR-ß§ã¨?pð¹Ëy¼É5Ü/•¤:7û‰^¢·Ø Þ¡ØñûÒE¤ûþú<0¨ Þ¡ûP͇þf^zL÷Áü ìý©rҊX +'¿÷þUI×âfBJå’ôoåðÉý¿×à'ã(iòtq+ŸAw‘ŒG÷¬‰ ,댄HIî$í‰:óâ>é)"×Ãaw®Ç’ò=‹ +óÈäg‚kÞëNÏördä$‡0"@àÁH ®dÌK2N`s! H‚Z"ȊÊL‹38â­­m½»Û¶Ývõíò÷ŽoH‚Õ€€¨*¯Ph¯0ÅG £V~þÿýû™™" +½ëwmîîùçwÖß=ýß<ß7Ößk~o§¿·á–ü ÚÝ­’Id‘ÆO|^F²Lٕwï¡N¡€nÕcvµfíhaøë1|/++^»ü&÷yÁçŽÓÛtË|ÙÀ…ûô›k¯ºßËàmÐöåþOÂð +KkMÖ 3]§È€á·³4öáÜ[ïá@ c>£;i»ô‰ ØÞr¥«M³£èqóŸƒWÅ Ê ú†¤æ‹¹‰ŸÌì>ûø ‚]aö›Uö:^1¹ƒ_ ³]£Xr×eÚå~l?œ?äûé]ä°NÚ_Pq±B@Â}~4aØ¥d’L÷8Óù¿Æ×Óª@ öÜïð +ۍæVÄY޲q㡹VYRšGôj[åÍû]IÊS·TÐ~ð1îUÞzH&wúxƒy\ H³ø!£(E‰‹vDí2§§U(ùåwW„ß$çËwÔÕlÏä”[ñ¸Ò€!¾FZ…\vÆnYð?Ü ýÁ¿ þshÜ{Ûš{c–Š×1›}ú–ÿ+>GVKá­yìÃÑ£¸Ìƹ­j–‹<=Ú&b{vTµA»®;䥈Ñð3¬êÒmõ!RÎ[¶d4T–hœž¥p Mø«Mxk™ð•¬XÙ“òQT¤Ö¬)·§Äì7ãŸé yÿ÷ÉA“r/ø.u&YkGí'ü:ï™òqkhàE†áõ³ü ž:„Ë×ÙR Á© f²59RÍ÷ š9^%›»Ò–µðLž¬v·Á©CGœ%ñυÝs‹|ƒÝA´í9©Ãê`Åê|(i Ô}t<Žø/¢°]àâ`¶éÂïRl”‘“&4Ø(w­ºyq÷Z-÷Iß±¦44¾ `t4ûŒ¼+³ê’#}ãwˆ7ÁìTò?y! ä\–÷Ðs’è8¤¨©Þ>ñ@/‰Ñt^\®Šþ~‹Þ—D˜è¦Ë¢ýº/€çýÉv~‹×7†g~ß{y]ý%mDou%-H#A*}YòՏ—µ›ÚŠ-Py{øºÊE¾°qì%¿ûÀ¿hyµe/C îÊa*xy5FÁÿ,ã§s£B|†ê5ÝÚMtï/Þg©t’:vâaÇN܌tïU +- ã-qó|oŸVY¾}/z‘æeÄv'…ÈN$ÏÁݞK¤â–X„”lñ;jÿ ÔvÞ + jC àù–AÎÜÆ3Œh~7¥L‡¼@ ’BÑh[Íþ%Žitbÿ׊ê¿pÉQÉ}åúõžH_*sR4_ñ© vëqh Ö¬YbÑ9˜c1fu\UTú˦V• 0æ}ÿþ?\d7`FÏUóq‰³âäםÚ㉧d*Z/ý_Íþƒ"çC¢c+£\®°-ù>q–peŸ>³N$âÔ·¬¦„•c‘Ž:§±¼–ê[Ü3’ƏäMÚ·f¬”…déK6<õ…–óZGӎ“B'Foº•3|Æhøæz ÎJú:Ö=’ +‰¹Ãܝ~꺡ìÖYÐ `·…è¡qgy…ï§8‹p–Ö•cÅç£'i ÞD{b7Ž8K€‹!YLÂб¾îdò *lÝx;ì÷vEe1å^yÈÔ!Àu-¦ÑW©·P‘jÁ&$éïdŸ8’j·Þ¯• õ¨‹Ê‚ZÀ¡5½Ò%WÓ_º•*”|-Ùê%1°VU Îu 1Ý÷· \FÞ¸Mévô 1×4¥Ø¥±Ž$"+&­“ÞÇ2ÿ y£âzçU¯<åúZ×tÃP&ap~¥,ã‰Z…=¨++_m,ÝÒ÷É8béò2ºpÕ»ö7%Pƒ~#*Œ•X_æëõ©kù S Ë^¶Ì4½u¬s—®§ç/W9׬«8¤iRÙw(WÒì"«ËÝ«¬,¥u3—Ñ0xå+o˜æsÜÖҜ±M”åv¡&íký‡y˙'ŸOJ>Ijæªæ¿JAÂÑñª€óv v» úvÊúA.·D›û _•`MF%ƒOñysiîŠX×ی“TüfÊÆ”Å!Ðo€Î,ìu¾ø=«‡‹I†Î'&â0š– &/}šõ¤yål4ñ8Eê)kAò׺÷°r &7Úh +ցv ”P`^ËQ‡ŒƒSñndT|wb{þê¶>ߞp_‹¸ˆÑ zØOñ…Ψ\5|X 3mJœTUuýV7¾Î_ŠM'Po°>÷´zy۔ò<Ç6 /äé’a¤95?´ns1ºbƒÒM±¥›×o½A¸AOÕ +Ø¢²PàŸÃ=Û'Uå`Ç­YlæNm«¬!­] ¼óWì–c­YÝ Áºõ5Þññ̽ÎÓ܈TÌyõ;Ž|*Ü×HZž}g›å;‚¦sS™û–Ÿ éNãÅ=“µ–2ˆV8 ô9øÒý¼({ØRÍDCOCp9œU¸{kïFðêg%ýÀ›úÈ8¿ßìI—îo®ÌÅËnþó”*Ó¥.úØ2¬Re¾ˆ¿ºÓpvéÙ[…ý/¬nToŒ.:ÈÕsKGŒ/Úëdû#qÝ`!ô }Ý¡“[™º=џl:폲2§Æ5 /®9±EÓð ØIœ¶¥é¢—„¿rZ”c;ÈQiw'úԆÜRßXØçCbŒþGåmMÑëGUkéÃ⃹%÷$Þd¬KO´Å7"î—Ndìîð1Goø©J>Å2±¤• }æÖø:9¤!9}Åv‚z_—k.)ƒ„ïøóRϱäûû’‚ÐŽ½wѸHôÖ#‹ aý\ÃÚ°n Åêz@®Ð‚áKf{<²øt<; aP}¿]‘ + dáËõ3òSžlÒÆ©³U1poëÙ¾å€`·ËLCT$6y`leþöµ»èÄw{§\|™RÑÑ ­vKÎÆ¡¶2™¶Ü_¾,B÷P!{Ã@´íœ6_÷_ÓFÓzÛ©o_TÕÝä'Ïc/ SÀ^1v›‚Ùã!§ó†Æznbz+žÁNINäæù'Oó†wö­9»#7FQ®¬0$kv/–ÔAÇ{8'V¦Jø2QG8àkµ©q’´ÔÓ7R ‰åÕ/©IO÷…óßÍ•ÖjÕ$X°Lâ2ÅMO#^ñ3H4A·S%K^1ô„éDIÂPìAmI6B œ³Ô¤‘zknN*Ò_²‘ý7vê̄iïËA¢\¯èIαíâJP^Vb‚ü$oèš[s¶7‹¹³qjâ%óàÉÝÒ “àŠê½ÚVR A«ö¿Ÿ2ûÏenŸ;èÚ3|4õ©õ:ÂîÕ)`ÂgÏ×%v,î± ˜½ÕÏäïƒèÒmÏ8×Ü*ƒ¾¥ÂÑì$ElWqª‹ncôš}ÑúŸõ–#e·XZŸ·_®HæÕçkE^} ¡“ò:¢ôM­7,¥R Å¥ +½ý9Hcï- +ŸÒLgºk։ê†ö’ä%Óåë’F[ýý7C›Y›}+(ŸžyÿìâIDâ=2Ê΂Ž³ƒ+JèFV‘t´p"ÏJÿ©EºÔ°Š2÷Û´À”û¶‘¤"ŽHÛ_x’‚R¬+o<€špµÉ4 +[2@ñý +C2s¿8)l5:ãÇÐ:‘úóîˆ)|&Ò¨kR¯ÎíßþMQ‡’ +ûÿæ¨Ãÿéª0÷xt¿ÐÕ|ýš£tgÿèÕ{§)4jŒ?)Ê_þ5F'Z”³Taô:Ô¿êjŒ=î±/ô5FõÇ~Ä$ÚGìÚ@jjN= è}ÿ8ûÿˆ€·Ôkù„¾ +R :éíÌì1ß¿RÜp?pàx…z:ý©)-¿þ¤ ‡Kþ†©#”¢5ªú·ÅÅ/ìQv€n£ÆE#+͍1FœjLÝf¨Z-֟h~w?ýå‘Ó1WXÔé]ˆo†‡-mxèœb–þ™u +`û.ÿ#…‹.,ïgózßê’mô‚ni‚3NYÈíβjóË1nj㉪ªT·ªt¨6†­]‚–õùúÜã CÁÞzԙÃ}Ø +Þ!ð+ï@XõFàZSnl¯°X¡®Õ$y¶€ðÚ©ÕKõ‡c'¦zá°õ5ðOgkû,ÙÛ-kÙåòïpT/p6Zw½0m+¸è\@L?°Y: ÈÌ Fš{A [ÛK÷|•v_Ex.¿‡<ê§o.¯’ÿµkM£Þ¶=çÕÅ|Ÿèí¥Rè?IDñrU#ß¡è9‹¥›ï¤úÑ®¡ò©c¥r<¯µ9:òãQӖ.§7÷¾ßÜJø3z5ðþâ×è ýì¡#g ›­]»UmBÄôk}&ËÁYø¶a†¢ SŸéR#б?[o”ГÁ9ÔG½"0ãÀ3ßš­³Br‡tUÂÝ¿j‘Í„nWú9ºÀŠE¢s°…ºV?^±t†LDµ›TÙw7ÇÍ2¸yÀ^õµ"±¼‹ÃçÅe¬Rßtȶ:·s ۏ9¹¦}Ô}ò&î¼Åß¾ò"æ÷k»7÷thË%„„óEH³ÎV¢kŸ2æ(³a ý‡ïaúBÏNO­ØP¸A®MO4•Y+R: ؏#$ƒgh~#åˆïҁÌÿYâN 6ÙØ;r¦#Ø%¹_ìIíOËYO X?§RÕ*)ÉQ|¦®l'®=»ÓR”³ÏJÆe¥aåC$zpÚÖ±&¥cr`0o´– æqŒ2Ž˜/CÜìFMÔõ<"8ÎÌ«œ$9ð~ "Ì.Èf‘3NÊÔ×UÁƒÂº`&n®È[Ꝫú°ÆzÃ}6, j¼üw×&jåþâ¬pcˆ-g£:=ûͲø8/9ŠXOØWMü¹Þ­s¾$>¤è|?<Üæ™<—ñNíÇ$?1Ī1ò½ÒÍùXäf/7*}ÄôO¡ZTáéÔükáñsZ{ñ‚ý€"3Å+ÁzjNtÜ8ÁÔáÑÔÕÍiúê£ä.Ok&]uøÖ¸Çá^sÌÿkóœÃB§”=•K‰‹ŸÂ€^¿Ïv~Œš¸Xćù[Wñ¹Dr:ŒŸÊ³y +þŽÜ*Óó ²´Ä²A†”²‰O™Æ^‰ V›°Bœ°š +$×(É݄Ÿpvø‰kc+šÅßx2fÒhrÙ Þõát³ç*{%LW–ç.ù[¶õK1﩯àV±Å´æ¨rÞÅØzóiÎD0úŸÏR )¥ðëøx¤q{vç6!p{v¾K%§ó×ÍÚqæ×Uðäÿ”úTqÒCuôÀYO›äüÏ{•)Y”†‘Z…OÈNÀyzÿ°Yœ6Z[Ô2’= 7úFHè~ è|Ò.Œ–*ë)sÍ›7ì»Ö7ڜJõ[lÞ8܊£rÛðã÷®Had½(”‰òÀ1ÌÒÊCÿ´Üø\ ë,}µ3ʯÒÝ&òä˜P’2¡øž¥®äݶ?çí³Ûdª~nA•DðæáT>³ýàZ$Uæ °‹Ñ®”̧ R´|—] G'Ѫ§­±øàÖø9qmÏ/;Ґ¨3’ôbà‰ö5»&ÿŎn5 5jÚÔA™RÇ¥cPTE Þ~Ï·JK[ƒæ /Æ~¸Ì¯’鮕üé”ÜõÓ4\4 Y„ÒTigP”º +–’iސõz™¹ñ·J¶“Q)¹ñWj·ÕÓ¡Æzd +­0 €gy#xõцB¡õ´å ¹GHú±˜ÜK7îœVU>ÿNz™R?¸5@÷ìüúv•¤aÛ´ËQ´ÿÉVh‰1ËÏ!„¥Ù +ú¥b %_O)–ê.Ùl2¼€#Þ-8÷Å"rå>Пà4ûq‡Qm8óªDŠÓ8ú>‰%"9¿µ¨ì‰ô|ÓËDùšbtv|Ž3§1Dø§ãèCÔ®¸ÿ“LӋ(t:iŽ˜HÙ- +¼Üi³Ì«h¾´w--ÃÝ ¡±ïºblz[ØAò¤y»Pu›ø +îl3JùsØkùIÝC¤pr,˜fT?H—âc:Ë¢pXâIòE® ‰_z'æºü‘´¢Ö)éPTF?†”„"iY^–_”ª‡J‘(š`Þ®–¶µ‰Š‰§ÛW_™Ûq=îç?~)/¢½t£d/Òoªkî§ÄŒˆUZßË}WWãFÙíç^3# Þ)ýWí*Wy_ŽsJLÍ7ó¦Ì''HÔ ×J¨ÐL¬(pó´öºCÀCw ò ÆÈÛK_—IÿLõºOøÂgšÒ}p™«¤þp™áôŸó„ÌB_"üuSðhÿ“åxz2P©™QuPeÕýr]Q‘±ªPËlÝK0¨’#£cì$ôk1°#‡i rºð<Ÿ¯£JQ¸- À°Ÿ7õIƒ¡<ÍõZ}ÛRÅÿæ¢k~¥(PF‚:{F#ÇçÍòš7ȅÓÖè‚m"n‘ᢕ^7êDÍaÁQ–ü˜OÓYN,Þì“48¹,§–ˆ×™¼Ö±Ì+1z œV‹Û­¢Î¹Ð¥+V¯ ÙGžÖ)Géë= …Aڈx:ôó­ÂâÀZ¤ž³yÑ)j5pQêkò5-î·~ååŗ@{2]Ÿ`•f¡ÐSX®±,À“Ñ=ž‡€åÕã¦ÄƉÄòXª©ÁK6-¦ÛÁŒ†ä +¦Aí×w÷jkÓÌà̟Iά§‡C¬ ¦§‡½3Ÿ÷/fsǹ°zWϝâYÑ­—‚¦{D­/G,†yö¿¢aè0ëMzÕ,ÿuì/ÚàpJž^€{¬kßTž×æ‚Ã-{°õ…ït+_úŠà8ñ.€†ä5›¿7-úšúʐxú0ê¹â™‚I¤f­(Ÿ5îßJÙÒ ‡2 9ÈRäáᵃ`Ñp,ø’…@þ–IcŸ%;£àKMèD±!€Ú umÐL†MHÌmÒiÄÎ9ש•´sٔÒÖ W#Þ°u•\ºÌv~NF­®¶NL¦ùºvîÕԑԮ}ºDÖboÎl Ç.¡<ÞCêêh2gcÆø×ŸV=áU•–„Ↄ?+ÀÔæÁ/Ë׳YÂE»è2ö‘«Aà§$x ¬}Z2ƒr(µÈ™Á+\ٞ$ƒ›ðëC‘õ%M³óo•Ùµ2ŽËǓ|  õÃìҘoiSÓ>ƒh© çn“æ6_ŽÓ×nßiiÄoO´‡Ž}°ÁÚÉɋ¾hÿi67[96ü :5v‹J×ð€_SÙðF[w7)Nÿeµ•cϟV©O²Ûž*Wþï·è"Ü šÒ5Ë¡?²©ôzä »íꬌ¯²KSìÅH0S?û4¦_ +õîF÷E ƒžjì£ÒiG±œ6\ GOq|ÙLü É´,zCÜ[l¼öÏÓFß N¾x«šk+Äë¹4ƒ—2ä3ĨtbíI|´¡:!Þ뢂S‚ҍ‡H«¬qIÕ)¯÷~È8ÚнóҖbÂÆ Þ**¦<Ô­eòËìçe.zûõ£2Ò֖\¶,›Äó|Tp¶{#Èq\g¦¿A2ݪ‚suÑÂvøÐyP?R¯›i!1™ë‡¾ +ÿaõ>éHƒ4<ÀPKà +#i"ø¤OöN#ƒ«šGãHõŽ+P2ÃطȺ*ÜÊ®D)x¯·ñÉ<)h7a™& +DŒ…ƒYÖăçÑëSޱƒüê1—°³{?=ü¬M\þ9{ÌÒì´ªÎêÜc 7ㄵ¾Ò wpÍS]ÙØˆÐ½úØ›>o´D/ƒÊ”ðÑY¡Ð^Jˆ>ø›âFöüV)¡hðK3\©õß -¿DWñꪺx¥®±ÀF ?Ky• >ŽÜ0ëJ†Gtá¦Ê:o¿CïÑ^ñž×Žv 2e_‹2¯]ª…qœÎށ"yA”ò®¼„)£å1œŽ=Ÿ +#áÏø£êTÉ ÜAc“«‚P±CNNMá5ÞÛ±JUìɑßÜ ï.O 3VªÄl¦9ðºžüD™ÞãÎ(‹û¦#à1·‘ÐÑ¿f•uÖjèÒme˜8CG€ÜH†ÑjUuR+’ÈäR ÙçŒ&´´ï^š£Ì¯n-=ĚAjO_G[°ûG;Ž¢ÍXº™¦¨r<.‚ê;9Nii’qr%²H¯ÿç~h š¾ŽøÇU%qBÖY;£‹íð +µ·fõ·Cÿ[òÙôw÷0-6b<çÖnúùRSâ:ïÜ×\]HÒXÃͲø ¨ +ƒ4~ylñԙÔ|FSnãýÄ2sHô ìštæÕ‡O¾>µe`­Fdïmš ÕyŠÇ«À2¯Nz±œÙC9Œà³®â!ö,È£ç‚ؘ@§°áTõ¤lÍAñYÌçÈbˆ–á4s—û‘ºè£ý° +yoLüu°wjˆQùp$ìsGÒ[ É’ØŽ•{4¯R:IƏAzePþ>§ŒGžó¨B«Í4ªø^³J¯w{ÿ²¥g-P!‘ݪ£*X6œõK;""fës%.ÿ ôZS}Ô{ÙJg¨½ÿݑ`7Þ3¯Å¡OHöfÿÎÛß±wï“cþPîZ€wâjÜ?<¢Ñð@pMTÕ$:H1ï3M@84Žçfî‘~PÀãǀ~=ÇÌö‘­ê0lŒ8€~ˆ@>ü@ +¥ºÏ@gO°“ÕK€S2=¡šúf$ŠRþÆê¦•)Ýx¯ãí$;ð‚ôê*TԟL=uè gñ¯—p3úlÐ3×&‹‚x ð›E"ÌøXúû5"I*I¶ÍK[È hλò€u~À6à;ZJÊ~è>h2‹CMXÛ9-рm} MÿÕàÐÿr8“Tâµ?ýˆ…WÏI4iXØQk`ÙÛi¹ñ÷/œjβÙYò?ÝÉ?LŸ¡¨éI׊Ÿ6‡’~ÏQ§E% M»/*p0ŸõæÐͦ€íc:r7ÊSÙ;¬ßÇí&š]jDØg W9“»(#"bß® +”ÐLæś¯ªvëнž^yíŒY-2ÚæèñêºÐ¹ÌC¥$ѝÀS^Þ5)ú< +:2b¾üùÀ‘½Ë…à[py–™žš!2–œtz?içTù̘Ó›©3#†7j>/1Hs2Óö¾›Lo¤¡º}æ#ê}áf[cƒÊ±ª‰ÿòw™Ngß ac#ú~>sB9Í]´"–¢oxš#הæ­SىŽj;=ޏ¦“„«±!¡/¡ ͬçR–è–l}¦˜Æ™¦1ÌÎÊDÝsØ´˜¤1mb×烬±à”CLO“ôšbp3IÿñP=x‰1_>›Í‡>{ùÆ}ó?½ºM¤ KsݲÖç3Îe¬,¦Zú|òh +øÐàc=Á!Dw}_çÑå‡HS8µ“k1ÉV&«w4 ¢X:‚/KŸÌh@tIZãBUF}+ÛE}F¬~Å"ÍG€Uÿ>ç”Ä–r^går’Çž¬tã2“X–¡§ g#Y™‘Tž2­¥½‘©ž8¦.¨=ÜdQċvßÎ÷ÉlÚO f<ô•惨ÁŠ˪Öón_:Å8R×f,Œ|ü1•Úxò–S ÷9‚öGÇÝ(ɉq†*bűòQ!ÏöÊ«ïU×C Œ¦õžèªÙ°\Ó3±¹9Ófƒ8Sæy²…:–ƒ‹l;ЬŃÑè·¤àGA¹€±2ï ;(âDk¶\²—ᣨ=õiÍ©¤…=³ýÈSÛB—ÃÞËT,Ó8#z=-;Ñ9góÜ¡I‹"9åþ5}zE'-‰% {|¹‚;*iò×òÈôfƒ×¢FÌz5̒g.f-®aÁ»»î@æØz@æwÝdêøÃ±*‡ðæ SiPûax=ùcç! jûžÊN‘Ü«xvKœ3i*¦±3_žÑÓKőÿ`ÕdnGŠYË£çxC^ [RïÖËWAwßúŒ¤™è>Rôj(‹ÙXÂm¯3ß ôz á¢$}â%&¸½Æ]e*Eå59 åf?´¨S_z„ó"®Ÿå]h4Í Üçi|‹×•ŠéçÚBQ]œ™³rŠú¦ ççùÌ}éýty¯æ§%‚Å ë1wì9ýYt¦I¥” Ì€!ØcVT£[çÒ©ÚCPêÚNK¨¢½ÐÑ9Ÿ‡JJæþn™3,ù-á18Cå-öBNôIge:ْY½F^dág­,UZ,£Â5çµ +qô„>ˆE͘Dƒ…ËV>3!?š\Z%¾xF¤coóò(gÒ»mßË=vÛ¾IœJÏSüºñ{iSŒFnvF­Ôñ›—GÎßKÞatú§±«ÕSn-§ozLhÇl11ÐÆz‹/Ì´„.hðFû¸lSb—£«gûӔo}‘­âÆF,ې;Lqñe:¼ù]n&Z\®¶*Âd®´=´gBï5ǨªUÓÀv)̆xŽeˆRº*¹\ò¢;ý»Y‰ÊM)qšÌOæLÈæçäo8}º­¢jW1áås—+™]–™)aW–jA U©Æe¥Jæe\«u+’dÂ\®3‰’¸Æéäõíg +¡+¼(8Psƒ¿Ñî +îÙHÛœ%äá^O7púµ]g2jZæ…`¥Ör¼ç™-”Yb‹z/%|¬©\º†è•Ëí6R¥rô¨;±¶”à³é•Ëíº‘;oC2÷³fƒÎEƒM÷‹]ݏ=X|f¥vê¦<5ÎVc_ò²¥vÕbgsú¤ {””ozS;ÉÒ©gvV'˜šõ˜ofõ»…"i S۟´¥P¤˜ËØc76oi'”µa‰uÎxõ&5j}èwÈÊÒ= O]cWl®ä íݲÔù û‘B9ÉIžm¥t|õ¤›wËhJÒ2г…C,ƒqã70©òö0¢×¹þ”*Ê&|Õ)œ'”| ÒÖL2Yb6Ú!#,úGâ¸á:BIÊj\a4Л‡úÏE¨âõÍ1¬`ç$A±‚ÅuìÇÖþ`ÑûÔPó]X?îé€EÊ2à¬S^®äf@y÷£Næ™ w]föiÄ?FQÈÊÉdnZ”€R×ì\‘Ðk·JNˆëŒ¥-HḦq¾HÀPNm¼$ìàX! C.¾yK’CjBÝQ(™Zš‘þÞd³ °ß*uÀÁaezy†Œ®MýöŽÂ½'žjê@oµ­›TO¡<áÃâBw|Ë^Ö·¯—œkÂíG;I­!§äc«=5+*/‘ׇùöGOÕÓW‰Tå-ƶï?¶?ˆ]-Vføw¦ýc5…rG9í $‘CQï AáRmгáY ZíÃÖ^…5ˆ;îyzôš:.QÍфg‹¬èä^:c`ž kÍÌhï£bœ¹ÆDù %+JÂYÄ&ãמ2” &­MæyÅm³šy3如6{ÚYZI‹±¤ÆUu†Ê‡™O̫͝”ì +}¢ÌuPþ½Ì<±ØY½q>½äßÜ–¡’Ýüo^~;øÜÑr/ +w“}ÔdžßWpöü½åïF¼ëޑy··øsÂljÓg¥“Å€Š‚Çª",:j(%*[äò@÷Ô{—õ×NC +uK~Iì×wjÐ9²LÍ}@æ^³[HçqælºÒdïÛXýªH95Ýç Ìç¾{åê|*J¥«n% ^õ©J\ô8„Ú;4ÝACŸ¶‡ûE2Ç~Ù¥j]¨ µú¹P +71‚jëHèæË„a]Æ7‡7cöøBêƒîÑॷb'…7÷Ì­GT†UnGþu¾:dÎãŠS®{Äxuѯ<&Ð-~ÉAÙ¿–ëj-y>çÚ‡ `G'o +x1ÎývïÎp=¸Û¦}¸'º†8ŸYÆý~ƒtŒ6IubÆ|î Ç7 »³i;gwÙ,-§µ@JV‰DƒªPID%bH#²©¹Áq[ª š„”ª™åYjÛc2ªì½Ù{•2(ce]±@m)JP‚à.ϰ€‰@'ÿ¿¿öIB‚\÷wyݼçžsÎüüÎÐíe’KcŽºÇ»ÙË:a‡É`ø ,v?ÁßÙ¬0õðwagO +ʌ*¡ðGóSa¯ø'§ù"¼¯,.ë ø×Ί”ÿG`¤…¥IÎ̵a»™X-ŸA[6p+EÿYxø@ݕÿ‹zé˜]È»«ãÆÏðªºß~›ª¶BÝ_ŒWÄK’7N‹¿‹|Dر|GÈБlXöÃ,TˆøÉ=jìš´ÃÎÿ´|UV›×?J¯bо7z;š?·„Tæz›Ò´õm Ûã’pw2Ýä¹+?Òr?¬ä¨Tïçقú¼ß ÁZ À ˆ¹ì¿j°¨¨Æ× =EŽú½>×6õ»Yg³ÊçšdxÉòåÕÜ”<X|ê6÷ƃʼ‘ +|Q×i}$î ¯¾$F¹ ˒[Ÿ‚Ú0kÖ j? P‚ò8;ªóW«èYO•ï¡-rìk‘\/aUѺ;MX¸ò^ÿY£Z6³’5’¥¬OgÔåÛvE3Ê"„+啱Xê~70W%á˜íü¢ñ¢}§qÀ0om 7¢ûæZ|3º’òÂzڍ <§ùˆ ×/%xIˆeiüsq[LHàØÁ¾üünŧýç7\W>"v|HѸß}Q¿ŸæÄJš”Á[ç̈OŠº4&zsç«NÓÇÕAÅEÕ +ë3•Å8lQZå¡÷#ÌDg½ò$ÜWIS²FÎ7IÇG¸Ô¯–®9––øìL)†' ¼caÔ/Œ6'ôáq{ÝNÄ|š"D|•úªëG®-)ø”¿¤@íf÷ŸG_6 Æã] 8F´‰¹}˕2¯M#A‡@@-‹îïJÖÃÉ>x]3.ty":Š<‘Ï ¸œxôÜ1tpp^ô¦ßý‰·éRµQ9þ|rïìãG/yõG-µÏ69nú‹XåÈOó#—§ZG.9w1õ^¼ÿ.9tÑõ]™ê¹)Õfôö°ÿ˜Ÿí÷ŸÚûòYx¥/ •jíq؅"µÃµr[“’#|¬Š¨*®´¼Y'Ó4¸ùU…£ÜҘŽ]w5aõÔ¼[ÓÜvëAàæïÃc‘¥ÜÂ\ÞÏMΠêôú{–èu¸~d+úºhÐC÷S«%xjñôÄúoJd\¹^wšc¾ìdÆ‰L¤³¨i‡P<#Íc„%·–;]øÄÓ ÞëëÅ®ñhî^û-ÁWþdfAMx´ 8Á›äŒßJÑRµQ÷ЂøîfMzYÒòÉ,,‰ Öº€A35jÜÉà]6¬{uFÒd[E`%§Ø>­&ó̦Àsõ¹·`BȈqð9þ­×êÆ ‹!¦ RDŽŸú«9–®xQ¡–E‘–æd1æ¾y¿H¿½éÅZæÈ3½çAˏ¹@ÑÀÂl‰0»¯Ž»ÚN EX•!tœ$ÖWßÒ¥_+MÈÆue"QTH¢'Æt¼s%2B@¨QÿåP.“d]}zñ«äà í½ µ*þJ5 (̰ (x€„’I=í@€’á⎙6ÑA^7KA¸I0®"GP6gÆ¿ $5ېV aãcþ¯½¯< PpŒÒ,¢ \M¿×eÓþWwùù›<`iÊõý$lø^̃S[ýœ~9>¼±†‹=s’_"N5ä™vldŠÄ}’²Y(n¤B=¿¯™•qPæßC°bn©þîÜ­7bV†{i»B¹tH½É¸šØ+L +ý¸+äýM®ëàêMàPbjs>1Á¬r²¨â‚‚&”–Ö`πĂJ ]Ž2 ÏVbjaâfä.sž UÎJ-ž-á_'®!à/µÍZaÔHðó$vž`6Ûèmµïvÿ‹w}ã¥ÏˆuÚz ›¯A¦&ÄÀb,0­ø9)AMÇ)²½r.é©`´@T[sZn'p=5>õ+"OŒ°óžãÐLI€Ù€ º«ï«òbàZÌÌk–‰ÔbFkŽ0ôÒ0Š®<¡$ª ñ‡¸G4Ò&Ž\F¼/>×vƔXÇÝ 6wmãÌ6f6zùÏKNùˆ ܗ-Ÿ¤xδu°jr¿Äº`.çe`Ç5$ÂqÝrÀ~9HÇK-w„µð¢´_ “èKtÕàAqlm©V #ÂêœUnà¸f45§C¯ô tð¥usÛu¦‡ŽU:BX6Ùd.ì¶!bª”ž +µwK– \Mý60"¤ÖÙhG¸añžÞA±•}׌'›ùÀwV+Žy¨•àw¯Ékª±…ã:jÉ~ž¬ìžø,…ñžs~Vœ;÷õ¬Ðêtâ×Gˆ‰#~V >wõ¶Áž†–ë+6rלD%ð†-Ä*!åÁ­”þ4Á« l7¤¬È˜µ½Ÿò‰Îã“rëdë¾£þKOð_¬Ï$û»ûäwCp0RóDYÁžL¼Jñ¢ÆgÎ·/r°è¨ÏkG«&›Œù-@]þ‘’ýRw5oðFæn‘zïàkÅ;œc²YΛsN“÷=n­ôK?”ïÑ 1 fΠqU²ÙÍFJMÍEï\¸~L›žŒÇ™#|nÆK{#Ÿrœ §Ãœ[èô/pdÈ‘‘^Z¡7·&ÓèLu‚V“ìËj|qVØ¿×r#ã_B´ã>žBc¸r<}˜Äß/±°ð @Ä7݂(èÀ€®%Íö V4Lw£;KWÃlǜÀwظM¹»ãw8T;˜xPÕ}l¥¤üJ>ü¨hb袖ک³k¶¾¦Õ¯³ŠÞÈ3ò—!qñxn ;\Ê/‰ã¦9ðPpX×m¤ +o7L@£Ûs¹Ü–9Z{2è¿imV¬1'1…ЧÓìî Šàˆv¨+Á>`Ìýÿq²\Nÿ¤„*-±`0FƒçÜí£’à9V™^¿¥´5Á-iæI|NØñ•òÐ%õÝi 7¡i‚ÛªV' AS‡¢ …FD_-R N"}ªpô(ÄHYpdGþRqÕKM’6Rü©€ÿæÇv/‰ná©Ï槇.óÚu§Ý–­6Ž&;F £Q²ÿNÔ±˜ÆÇçÝØ°`ËH´û1ÅÉJœZ] û»ï{ÄTkÆ¢‚/‘V>eßcu6¤sbO 'µŠ½–9g€—¼¥ÉßÍÉû„pŤÒ<þ¯¹hèlѲ—äÙ¡Óòó¼,¨ŸËþÔ5g,ÌëJ¶ÜU_rÛA`Êñû·À5¤{˜òÀ¡¡h ‚Ë_§HmÑ`²p‚Q³³ @Ô>+ÓùçlÝÀÔC•%¼¤ŸTÖ%bÃÌaÁ`âÚ>ùQ¨À…´¯n€hÄg†žQã )zù‚ÄY5Öî™ÁZZ—@Kr|¬½RÁÒEð 4»ýäC>.U{É,»Z^ŒƒPvV‚_²ž%Ü?Úp ‡øVÁy(Ý{Ô|2„w½Èû¡°ÞxÇy‰Ôë-ÜRñß_Hý¨|í·íG€F +.ÿÚñHf³¡VG¼ù}鳂òâ~‡RC–¶?«E¦ɱàÛsô>̰4¦°…ã"×W™)ڑeŸ’ò\„¸I sšÍF¼{úŒ- ’»Be·ƒ²Ç$Âz]2wóµÆ5!$PZgݤ‡"?ÝØ°×‰¤I\Jï óJ‹*µ7ÖßÒö·ÚÕ¯&8s»FjQý’QZr¿5hº6Ñ~ÚN¶ù:v {ìjVN +̏€çì/ÜǰÓC~Nß7“Ÿ Ð+`[“óÔ¿$Ǟ%þ]ùDù*rÉ'R6n/€xT)¹§Ý.NþRõܽh¿Àa‘Úýá S§ÜÄo?::ø™"ƒðŠÆ}ݼå&:·rBñr‡l^ŽìGt€ð_„[jì¶Ã }?ž™˜}xEJj-µˆ–L^Ñþãj–ƒï¯bû»Rª/è틀×Y4vmµ—;#âùZ%jý^t¨öÿž«=ÓZÖ”ø³ƒX/+û¾ÖK¨>À*“ŠPc¿êA#NÖ"x’ÐÜþ°_pN _þ²#@ˆƒ¤A)-kKÿE}RiúÒuýþŝëÀZ†ÿŠR —dA¥•›»š¿îF†j]rÔq‰¯W“×op ÷ž6ÛÑȼ‚ø,àcÜ&fä+é­hRVµèþHRƸ=ÈóÀɧþ:²‚3Ÿ‹ƒÞ`Tw0ՒÐpºb®½<64Kçs‚Ì¢D|,²*WÜhK•v¹|q‹BöVr±¤—ÎåòˆMŽ%pí±Çkðö‡iá>;¸…m]’óG&µ±²Œ÷sBæ›ü‘ެw£ ð¨½ç8Q±š¾s£aÜýÁ Í"ó›†ÀÀ£o i×ßfÄp¼ˆäZF2_øæÒè–.>í™^7V¾˜iíä1ìsqßÊt˜BÚx©lbÒ¨xJ\ÝUÌÎb¼ƒÀ ñ8ÒÄáìÉö,¥1CZàjîsbÅÚAïáÅÁÇà~… öŒL3)‘èveYž§ŸM¨ÎãŽb¾n°O÷”ž¸jûtàÌ/`צ†ÆÆ]9Byë£ÂRù¯`§¯®!´DCÔ/å{æa\¯ŠÎ"dVˆÌkƒßí¢êL2d}3ò…åø>¹0@ y· ¼Ä馛ö«×‹ƒºþ¹ùײ™ÞŽøS;Ô_"Ìï3|)çoŸõ3º;çýÌï·¾}s;¨Öó&wEëý“;³ÍsæwºÍògz-:g~VÈ¢e¦·3¼×SgÏ4R8ÉÌô&w¯Öt&wîf¹³;ôó_Ögu®|ÎîY®|Îù^·ÿæw¢Øì–Ös&w'šÿ©ø{€/ÃzèLïY«µ™ßïõ¢ÌïÛÕÚLïôzÅ3¹‹×Û3º]]¤Îòd³)F™M_.g}Ÿ­öÌí¾¯Ÿ3»×­gu«þæwù?WÒDlÈMï͚eÔм\K¿™‹4,”ÉM »-GÎE}4ЇM ÔÆ&…8LÍÁ+ÿ³]ýæ…v‚ ÔM +y<¢&tòÁ8ÑtKÙäÆ ’øÕöL÷?™çÌ÷3™à¬bê, pŒ1dnÿ^}%j$ÌÓýìK¤"#ßTD$-ó“(GiÞ¢6Žë¢‹çs%#^¶óΑ«ÛæjˆÃ ¨ä]±õkøY’ŽìÂt©%ûœÉx gÝj…¼7vF©‘¾Åû ͬÏCÍÙú¶³=JÏT@Ž$æ{*Xœc ÍÙ,¸dØ{¢Y¹ _Ìᒰ<:«Ë>û\&i†˜}.SJ9š",Ì]›¸cú +üVÌmr÷ {áה'ç;؜&ôýDxMÈz¥ ¿OôñjAº¯Š|KŠÂúA ²õy?ž¶8< œ`ïÿC^<Ôþúþó‘þ5ú¾0<¿Í/Eu_µwNº`…ý BµNpT,J×I„i´åeZë÷Áb¤Ï÷æE3ÞåÉëe¼HƒÀݗÔ¸\H&ÔUqí)U±<Æ_£l/-ÁìùéËÍ<ᆡàE§ý¦Oz±ã¹WGKñ©¨i­FI9|ú?ÐîZ†žømC·#^¯åiòː—s‘.¤l´ù¦ô¾Ú΂РJäÕý°“™—}ôôêf‹cjˆc3ðž¿ùx·UþÀ’œÞŒ 1¿ ï9 ˆ~wp{ébY…é󿜳 ^ àKâbhLüçÈ0/OXXÚúXكì|—OC&WLM1Û”·…“-O3⋝)ìގ뵙xX[nY2â5/©MsHªC5¦O–úá·ù3~ù‹­l©ÿv´îFU‰#*C˜‰±™IMØZ”w˼ZtÈÞ#‹whïÅàí(GÕfâ2ãA9: ²?DÅtµ'5ùA‡¯&6ô-­œ]?¹$ÉîŒý(kÏSð¹½_Ê]Uùp|eFXÌ얀Îr$| ˜PióÝíÈ>´ñ[U6ψ®²Ùb6¿ÜFӇìŒr®M¹I.™6Ò[ß"\ÉÅ#DhWò<‚ó+¢C¯^”þsè×®ôþ~ڋПÏö ><þu£ç?Ÿn>nOç֍ŽÔþpFžü¾>sóüciÜÏæè|äÏçN|ˆ󼍏À?žô|þCùúŸµ?8ÓêÏç÷ÇΰþÀ|ÿyüû Ïöç{Dþc¯â¿”=½Ù:cù‰?¯H<(a÷‡óÝI;||û3ù؏šÑÙóÇóîÇÎlþz0ÙK9d½pø%÷ÝԐú|E1$%ꇖ$q×'‚v‘hbº°†•´ìÿØ`H—ê.〞ÿw»ŽÀþÝZmáQ±–Œ¸š‘èWk“_¨ôbL&üMVg}³Äõózel¥湓Û÷¸W·QénÞ®C}±Ù5‰ô«W÷–_Oö÷+Îû¥öÞÐ'xǓDZq¯ô{:#s4áÿQ÷Æ/ŸòÅ|9ÄáƒÚá֏ˆ>)n]ìÚ3WöEòÇ}¬pê7אÌégYŸ¥èϺ¥jÝu”!Ÿ¯ßÓExea Ë2Ç» s8Ô¸fOo”¸e^õÿËÒá¯e©pח·*\34@ÓnƵM°Dû&ÑOÇIҋÆy£[¶÷µsғhø3Ô£C{°“Ñ)l††|¤µ\¯µ|}^2o ­øÅ·tŠ„Br× ›º© öúæ£ éÝGM× `É#ã& ¹%jᅡ¥Ä¬wÜ|Oüƒ€£#~,i¾ê* DdO޽d£Û¹Ü“Ûp^ôT þqd\g%@ÿ1?!(ûv½×ß+˜6_ÃIv„ä֞!®pÏV·qb³1„#²÷¨¬=×¼Y? ”µŒ4I;r÷¢sQ{ù:DQ{&77iApè-JΰŒjZe& ¿I©ðIÔy8¹‡²ir}hð@uj™(m«Á“^V{Qˆzî&|ƒVûó¢ +öðüâ܃$P@Ò­,dWõ®Bý¸Y̬ Ø{Tâ&œÜ +ð¹rÀ¶}e¥Tå6«ü9ÓŔTâ,ŽTí¦@Ó¾·ŽÇ«‡ó؉‡¼'P6`£¡ÔÜ>ñúWx 7°³qÜ1zNÿ˜%›y\ö æÔ°·g–÷Æ1 +ð.†nœdº6=+Ê䙖¢!샅ñú2#É/e‚ÍûÑZôûTƒè$‰Ø©ŸpÊk¤nt1‡M¶Nó_ºNî}è§ÒÆþ_Oádë4åý˜Àù·p>qeK5¦¹n‹«¶%®LÄ –ß“éÐjCÑÔ®WGÇœCJÈtŠùé.¢Ó\xƒ%ŒH…¥‹ëÚ¾?žŸ©­(Τ²i^l‡Ä/¿ÓåÝÒë6þ/¥ÁiÊю4­ iZÅÿŸæz@X·Š!³Ñ–©}gæ%ÚÔ䠙0ÿ1¬hñ¸bWáhˆ#H1¡óÆ¥Æç#Ó,Ú¶ŽPå>ÔúµÆH=­´ãŠÎN7«`܃[6U<ÌN‚Ü}¹¸ë™Fù‡êû,i—Îj"ikðHÁ¼–v@zîÒlÁB\µÜÚÉ[Í¡ÚVO’|Üü9¼}ß·ppŽ®ß$î“ÈšV·`oT®ï±… ©&_t‡v 9{‰Zꌐҽà9Ân^ô¦'Žm©ËK­5Za§¶òo¬áÜBÔ»­£м û†î¤°+´›¨M/8Éñø›Ä¯ÙQÑ© e%Þvó‘›Ë¼ÔÃ~2rѱ§k¦椀[hmW†\Âû_·è¯Fz;‘hï©,P¯‘=7"ä4ÝQbÄÅñ~šó» ©ÄT_sõí¶«+‡Ú£âî ÍÜs´>ä^ ”ß”Öæn]³uz0Ä÷}1û} s¢Iº÷Å=î1²1;i`†D©”ñªäbM-©ˆQúÈ£Ít ÇØå! dTø4œ¨w¶bP‰^ÝtGыU+*Ó,”þl£_ò½dˆçÀš°.ƒËn%•kÚÿ.„LXú[¶KëüÓîãÌÃ%¹'¡‹[¡3P¿ ­Ét-ț2••/Ìû<%n\u ¹–d&ۈ©-‚ôñˆ¹lôlœ¹nô­Î @Þ¿íæ¥Ú!ÚèKT–`i/;‚µ`:g²_¥aėP“JktZ–Ÿ+ã©&Û¡­,ôÞt0üjV榗˜™ñ¥ü.oãS +- ³#Ec*ÎùŒCƒF9ꬣCRþY³ÜèÝِ‹,™Î‹!èxô˜°ÎCÂ̛˜±Ýž,ÖF½’b9¥îÿÕÝÜ"»°Î'uóyLo1m´xgŸcÀ +ÁÒ¬gd½o—õmŸs?i¶Hÿúùüݲ†6(ßpÛh¥÷–<ˆPzn)©¾Qït?SþRƒ …·@ß;I@‡à€À=Br˜0¨þZ6ßFÜþYó[²ú€é­Ø/tòÏ»9a°b7½OúÎâùAsNG#\yq*ƺ6›~Æ: +i½0Z{#%¸3ŒñúÑ„QìáprÃÝËRc¡ÉkІ¿· èä:ÉS+G‹‚"žêk¼Þ»ÿ‹Þfœ`jo]äbÃ'ÍV"J³=§aÜß)|”„]&ñŸÐYbνˆa÷’ί@§_R•žw-*%6ώ·8»Å€ò)y‘>yiàՕ˜›¥}YP,|ñ,ÅèÚP‡ë¿,±²©N˜¦áE% ,´L¶õ;!ØM!£U§ÌϏ‰uV›*Á,Æ9x³ú¼“í/ÍÈ,³þ"¬³ßHk1ÿQ÷¦{^׺̉nÈ]„Ÿà¶¦¶"y$¹Ãì­ÄA™ÑƒâöʵKÀç5½Oî֬ޏ;Uð¬6ñpn}Ë v¹‘ìˆâˆMi]?]“³jò +`gX{ øÍgiË"üHypîþÿßèM¸;G¢ÿ.í_”±#:[Oò¨ú”ö…ùjoQLqK9°ÿ¤Ãéˆr¹ôåUño1ööW9 £|¦Áÿ’Ü3› +8·æ<À6Õ=’~x…´ô «_[ÖJ;ò*‡|uióga­·$¼KAØæK,¤…‹”Us6àeûԜL55Ñk#àþä­êKhĵ7^@¹ÄÝ2ú2µØwÈÿAvÈqkÿt^«Çq^2È_t„ßGT¼S\ÏGéç ]/ÖæåžLeÓö¡?µÅ?eíÚʼn_î–@‡ö”3!ãâi¨¹«<ojvJ×N¿…´YlÖËXò– ¸þ,k|à%ix¥Œ˜\Ÿ@ó Öa½VøÖøá[@GÛÃ,êìM’I6E4…ùe¶ùZfæ)é§·m€Û[µö…ÿ¹ð8àmªE%Úu³³›[ÈËsì¿E%‹ØÙ0F—ºruè¥ÎwÚ\ǐÐ)XZ›T9´oÊ;]<¹. kJÐáä;É_EŸ0SEŒ7M·.•ÃîG j+Ãh³mm©þ`ƒD\/Ã*'ɎǾƒÍ[çrmŸ']Ï%h•ƒ…º6Ùð¢jªŽ»9·LùÊtÏMoV±¸P늚œ.gÛc… …½ËTÕù“»yk{–°tÏdÂÞå?fCÛàK6Ű,qTT…¢>û†•x.¶ÿ¯µ8×Í âìá´_êXCȹº&0—OéRx›ÌúE¦ò'Réׂ£³™¼– 6ÁvȐiT‹§N{š­ð(#$Q“-* ’{“8Õ~–J W9°sQ&oÛQEòÖ¢‹­¥E÷{|&áìÂ͹O¤ƒ˜¼Ã¹ÐNõÃ#¥b™Ppö·jþ¢Â¡ÜÈ:vô̏§ÁC„Kð§Ï~žGNþò(®Eé OÝ eA”X0;a‹€ §‘‹çm«núk"™m´£ëg°skU".r  T\’ÇäýÒ(üe¤M½UÙ-ƒœ&FìXÄùìŽUcÄw‚šçP8d¸7X«ƒjÀÅʝFR Zo:ÂàÛOƒjÙLÅ&ö‹ƒmPUm¤<¯™÷»ÎF\jëMCZ&±5 +/Ë\nš*àÛu‹þ×ñj‹SF˜tKMpm¾OÙ®ƒÙà_¿~v2æ*!®‚ëEÁ¶¡Âï–½dn¬. ·LbȬYŠ¢vd¸6Ûãøµw²¹Î¨šö×ñj4-ÙZÏÌ\jˆgôì—þ>,^|òíóWÛ,ȳ&"*±÷#2]ó«Ö'ÂL”CíE«&Õpm¶ Ú$ËǓ.éº ÒF…ªÇ·Já +<‰}Öی£í’ï½x£‹†5i\MË6uÔÍjW“ñLr›6kȲy;=3•‘yS#2â­Bµ25ÓÊNÓL‘¢…ñ¤T0Ó¬‚Wœòݑó!™Ÿkhî!=2@W *Æ4»`--pß­ ÕD>üÐûÜ÷éíHÈ>åtÚý2K¯Bär¤$44\î H&2k4)æÃû ,ökõà]Ýͤí–Ym…€1ÿ@.*5Zµ2*‹%ˆk@’’¥PTÙUvV¦Co$ + -[+¬™rŠŽUWeUËÜ»ª…RÐRڊЄ„(‚P¢Ïß>ýýûü”¶Ûwç¹Þû›žç¹ÞsÔ»K$’I“¿%$÷þÙDÆ~ԟº@e{çì©ü¶>ª•°{ü:r¥M€JÿÀè‹E›&äNcÃE—I9* ÿ2*¼±xù:ÆÂ0šè̒©–”Oe2°Ü2Ž}œJÏo£ÿ œ®1ºvîgâ=íˆ3#Wžo‚ì/Ãç•Ù¾¦)ºÕÅúƒ'힀@Ï%êê¤Ûã¥óg ¸Ì—Žê{ãsÐvIÔK”…Ùö˜  Æf0žŒv°Ï™ÃGîqìè>¾3æÎ'ê⠂‰ —´“6TaKkë± Üœ’„>EnÛ-ÓTn˜=êGòçQŚ|æÛÛhì¡1Xh#ú¼lNÜãö*ÐÑ®¢ù;vÚ±ó%yÿ‡A}mûÛz»³µ÷²®gí©üÉìÆµ ±(.!LíÊÑXçøÒœ·á±gÜ6Œ.(i$7+t—¨äºKÀô¹.’ìûÕâëW[:Eñ“ö•|—íڕ¸£ŽÔ®ê¹]©]k¶·éÇkÕ´x SS¼W@@ ÅZ{^Âû-HHi³·km«$ãE.aáç>c©µ*Óî÷ìãË:¤}Ï +Ÿ¸eÆ+‹iƒ¸_MµÙ•³OüûÁ4÷ËÄ\ÁÜ3" ÊÕµN+ß8ªÁXZ—ûÄã«NŸt¬ß´Ù$ÖeïÔ¡Ä D–dXz;±{ypÓ¤+F7€ V¹Y×K9o:5Sׯ<>ïµ_ŽŽgm¿'@˜x-¨©ås!ÇéÓбTÄlS†˜/Їäðhøx#áx×µ­+È&›Ÿ ‡Tk8Ѻ¼³Ï³Á»|#s²MIuyèòø€jëTŠaô1 +;Þh9ú]¥³ÔWJƒ2=±"¤Ë6~ô¸¶ËÙa_àÕ³¾Zž+=dmIÄãAÿ%©€ðö‘òþá„Öö03Ï×&s_O¤à­'µÉǍsåÝ Ÿä+…»ôJ7–°…[2¼¦Qö“óàta¿H릾 XÝ^NvÛÑW”¯e¶†—lº„ÆÃŠh¢¬ïøí.¸–ԝ*0t}6Ÿ=µñ®2âïÔÎ ùdà)Zhz€tCnÍȳݙÒñEà³h·…éóâņفd*¢=¹o d5{Zÿ©š%r;Æ»œ¹–V‹;¢~±¦Âøb%“ðòǗ«N´’.¡‚>{ˆtÜGq4;¨¼ÏV:…x}h¦lÁ^Ðñ8„Ç#ñۑqÝóûó®îÒpÔ)ގèÒ;‚Öxò+ˆçL\óÓ- m‹Ñ“ǾZ^-9½²îx!¹eD›™ýi÷«~æ~Íõ½ÌþÑgã²µGXÄ´ ðMè6¶uփš.`èÉÞo˜0ùX­Ê½'nrÙ4Áö͚q8XbY½ywWaúPþS*/”טUVÀN?KUbFŒx¼®/BÝèjÖ:Ðrì£ dµOò= çq µƒÁgCü©œg’þԒ´r–öt„Öôe‡óSM} qyÅ]Ö½a$úöuô0ùŒdK§¨Rj<÷ð,¢ÈÓDžù„š¶ÂÏÈ¥þ.¥ ICë<íofÁä9r³Ëñg¬"w¹Q(ͱxŸeH ]±Xë©í23áJ,Ñúßåf|ù(³ÎóMx޷ދ)=2E™_YH³çÿ³§ž~ô_óÓñ¶ð;¾С ô>±J%ß½byƫΊL*æ©Lr=#ÉôimÂýßxˆm·GÃÚð¤âÅF§„pöjÄ:ãml–·±}‚r{h®ærðø× Q½˜*Ùliºv’¯¹Ò‡6ñ«<×]W§.Ý Žê”ä[8vÈÓ³úH÷¾}JX\gú¬(ze¯–äûÈW­¿¬€<ôä²²ÆWï#µŸ£Á ïb(»cqHbÓÐÿÐ¡à‹ˆðÜ‹g%Ÿœ—iä±Ý¾€St äs² ¢€±Df€_îv±LV4dû ¶aŸÖá†T¯Mö7Ë.00¡©ô±³ àØÃô“¹ö½™Z #´²š hÁóQ¯úÿ(êèZÏ%"Nî„wÕØvÅt´ã´ù..?VUõÉÜ+õ¯†ÃŽ©XF~³Š¬Ye§vvÍBÔ‚îþM’—‡Æ¡sÐgQ­RðFóè|ûð\ït+w W 1Öfµ—{ +}¥5=lÂÙÍk²ÆI4¬Æ"ÌÜ5˜ì'Leå™=/uã\ 'l®mÝv¬BXÌ‡Ç ZCöËN¾—,¢…x¢m²}¨ѼΛհÿMãÊ~£îԇ"a^›'’ØŸú¶Gÿ‡Õ¨£fkÀÿÀéð±?VÀl>‹9zì¿ól/džÏ•ÊÙízBJHl\z²‹ßñÛ'H»SîçÈiï7°>ÑhK1K“¨`Ö.Ë[“Ö5Œ^ÜÝ5ë=˜CÎ¶-ÛhßO!ç ¶ù +ç|3UºF6_™¾6£Hjáh<Ÿ}Ëk™èhýƒˆ?X“8ÈF™«H]£`è-Ü~íßÿá©ñqL?û仅\mqji‘gâ–Ç–Whœéd6x-øªZ@<`õ&Ò9Ÿ³Yÿ¶3cJ{¤tL;—¸c FòQ(é÷ÅþµÞ–…ó‹ew¥ ž€)—Fñ=îm¡ú¾ûÐ'êòžöÓÀ«šˆ²¬Ñ„wp´‘‹jø‰²£¶¾Zã×ȱwZù…K惾ÓËñÎò†Ÿ­{†CâÚ½àËpR„–âq~ȼOnìÆ¬*R%6Õ4b`§¤œbü#»7F¬æP’Á¡™ÌoO[ âÖL…Í»Ž ^·åz¼ë_l]C½KïDbÍ–B Eè!Na÷2Ρ÷²жs—«pÑ£ïÄ;ÌÓò `ºÑÞ2æ Æ;Aqµkë÷-Ï˓‡ýÂü¸9ƒÂ§~RÆË&e,l‰9ñ+ø×sáÃF¯§ÐnÚøç‚xûlÒîzsß{ž—6ïþ'Ì×6.%ÝêÏN||;µ9ðV‰ýë™Þ®ç«ÛsÅõÄ_vîgøMÖs¼u ¨b)RÁ]­™&K«Ï;ñºÒH“?E v¨ºÄ‚¸TÉÕ[ƒýì¹ÁUˆš¡ã@^a +“”›u8†"t¾q8ĺ­æÆ‡žPÀ?0›tÛoޗst)Æ>t<Ñi¼&Säw‡‹$&è·[/Ë~kû­ii/Óî÷vÏÓù±¾çÕÕÝ<ö¤Ëìb-Y#-Xû›³í݆î7!úÛ2wûT~ÿ!Ùà=ü®ìñØ~úÎýV½$­z0õL¥–©ªÿÖá–Tû‰ÈpÑã*4Œ!ð¯X8ÆË¡¼:,OGÃ5T'€F  [bgO«±%¡­ÂÀj¨ X£ØŒÝÔ)aR0ÝVµ÷Á‚NώcKɒm0 _Ó,üûÝ<ä Æt‡Oé¹7Æk—ViHÖUôÓÆ‚åîå¾JF²ô/c!÷%ð”0Ó'¸‘‰m +_~&ã^¢r…Mµ`»¹3)“•HÆo=ZCdDÓ8§Œ7ñ `½ÊN_êÆ_°ô¨EãHÓQ9Îì³zî7¨…¢õ³µ¶…¹¬ªcæª{RŽˆQØæ³û™"uÄ&~±x,qzÎY㻥ªšñw%›°­™øq·ªÀ[w-X¡ù­´WÖQ®ò×Ùªe8×9`õgP E}f¨÷'²–&,w%ŒãC¼šmÂ//Èk¨ϾO$Ÿ»Ðù&й´×L‰õs¶õ%«ÝÃ룻†ñžqcát}ãJ²Ë˜A§ðȸeOHõb\oÊDÈbíBz6#¯Ön +=„“õ«Â?ἓmø”Q÷†‡Žü"¢·ÏtJ³YãI[‡ð[@mŽîP¸V_Õ-ïsd–÷¹ l] óÞ*’¹¥>“¿÷4§ëYöÊõ£xÝb6£p”ËïHÕ$s±ï³f‘°6¯õ¥#t摾ȟtI `¨=JVå7Œ7üÅk5Ÿÿ Ø­ˆý¯ŒŒ©‚(~Ì_¢1Õ+ +Õ'áëÞ#·¨ÜþåƒäÛ%IãÅÜ}hA0­—BŸê¶…UßÙ ÄÂJd¼]¤>µª²/< ãrÇ–wÛ"Æ,lÉûwP¤ÞS…U3–Ah()µÛ ¦òAuò ·‚çd‡MjŸ"/rY‰ÂÏÆ²L+̪¢ÏçPˆ¢Þ¾±$$Ïi™(^.næG§ž «‘J3ûÒÉD&nAžòIŸ¬áG…¶Cé‰Q^2Vݳ„j`VڒSs$(ÆÃncæN0uãXIÅeq³‘Dãž5QZ²ÝÙVÓsx:CšÊ.î‘ +‚bJWOl›)˜?*/ +f®UQ9»` ê­p ëi>zΤ¨:ŽÍÐFðg;·-— +M¸i»”2¿½‹\—°µNÚöZ”Wz.ƁAùÞm|¦pmXû+_ûQ ’™ƒ˜;÷Ca ìÇÿ"܀Ñÿ»½“(³;¨ñÊ>Ñ_ ·’ûXöûR»ëy& ‘•óüžö\Ó!l:ÔïÆ#9¶„îf'£í:®ç#HøKTøi‹ï€Pzà²çA’ÙÖym¨—§¬CÎñ8êÎãÉoôäyR6vIÍí-‡@=úòofèšâ&^Ü˶Èbíá೜Œ0Bº’øÙ"L7}¢ž]RªuÈØßÓiàuŒ…å{vt֎eíÉä*ÜÿÛ[%G2F$*Ѷ'´ q  +F}~Ì©¹)PŠmœ•ò¿Ý <ÂkÖ!悒gÔ¢ø–Ú域w,F¬§‰>BZŸLªŒÓ$"AôMã*²â©@gø¶…ëŠË×ùôÈKØý2A<ñ€L|0ó×5óÀa Íi2Óº,Ë®vÌcNð¾Ë] Ù¿ðb#ÚÌsNaåmÜ©L…ššq<!3^%’$¤"ïV½Å¸ÅòM-/ë?ݗïYþ ¾¢ÏóÅðɬþ´©½ހ®Ö{206­íÀbååæW\ɨæ^¬ªÏêwÇu?›ƒÌʘxý÷èA8ў<ã¼Â…Ç5ÿÇ£=VJš*®ç¬ÿ#e<È]înศùʹÝP³ÖµÊÏóìE—ÚŽ6¼k™¡P:teø‘ê?^—f† +õÎâ«!*í: ÇÔñ´ÖëÎßÿ×ìÒs¹´$µ$pùñ™’ÏñR\»>Å-šúUž#ÑžÃ>æ*­»˜‰Öêã}tˆ»þZtw3`„eÚæÐ´)]û^áKˆœÂ2Zôãz-ôQBMÅÙÈoÙ©3˜;õ@¼£C}t(@{é 7„›n]&ãÿÚM©:X>¶L›çõH½¦ºBEZ§¸+ÈmŸ­®Řx#K4‘]ÂÆ%¯Â¬íQZ§±š‘, mºªÍ'qàÈEÇÅ7#DA²à2ԃœ¾È™q¥Ö®í˜ŒÜÌ\I¬ŠhÎyÕ*1ºA Xß.ÏE­^Y¿Z†Óý&r*h™7£Ý`ÐòD²¦W;¡í.ë?í áx;›Ù´Ø¿/ˆ~‹ƒ³¨Š°¿®5°È©Î÷`öy¸Æ·1cÂ=ºªMÄÕÃ-úcǍÐ'¶EÁž53)ù•Vð:(¯>'óŸx”"DÄ´Žè E³EÒ­œcš‚NoM)“ïù¸Ý=_÷œ*;ùGú6ÆG6~V°kßfƒ¼[Uœ×+¿<’lGî+vƒÙŠ¢ËTè Útð j#|ïK濚öÅïw'³'7Î+5±f¬èT^°§—žŒ-u¿ãޝ°AžªkòjÊ~"6¬¶G¿ ‚ô-²æ¬nʹ‡ ä€p²ã]e¾EPÈ!J+ÌxÖQöä{ːº¨¬d w`ÿÕ.3Ý+nú»lº1~¸C ÊTñb……jÉĉmÔ¾åùvvyLM3Q¸)!ëð¥ÄßöÏ®Å4Åbå1WdOBe5"Õcˋ×ìGkìnFÃtíºG< k2ÿÙn +a៌-½¹úÓzñ»ŸÜõè?!åmÑyÍñ÷<×ôXÌÆ¨Í¦Gï'2TJ;x¢Q™%#…C/‘;ÿz¨:=•ÍõÑ3F)¢aEØY&sS {Ú§Êd÷®*‹AëŽ]y¨¶kû÷„›±ú +q›T?͋h‡Mûa?þÈsM¾GÛáü¸B..ÈH܌&ðtÈiL½É3xO˜¸…—¹^:ïø…ŸÝ{X¼ý‘ÈLqˆVŽšºCèô,$m&Q¼õ;‡ÄÐÖ¦Øöxpƒ”3¬²>Ù¹IÇòaóh•OZf“ Àë_˜^Ú 3óqiGFúÜZ0÷üëµÒ;=@mû¦O»0³5ÇLå9Ǎh™cô2qÌPÂy4z +©¯wNg<9iý¹³Å±Ö–Ú;ü=AQ•]ÂmÔõk¶ß-¹ÓlLÞMÒ¦öh™ .¨sTƒÉƒ2zÌݰKºSQb¤ÄïK¹…Ñõ£Î¡è"ö,ÇIOz:ċ̜‡СŠpíè¦Ã®Â˜J¯ž ?ˆDaÍí¸ð÷ŽI/€‚Q·J‰G~“Âh;_¯ږ„¥,j"ó+?Äۓ ºbŸ‡_*p¯pãù}“G›¦Ó‡ÿe5„ÿﯧ(>æ0©¸‹?îJ³®M³âg ¶eÝjB[vIVË8¼Ç÷òѳv*f‰­ é‡\OÁíkÚ ÷…V[létå/ãBðþ¬Žé®ÐÍs*@ŒÐ„:tïºbˆ8×ýeâʹ#£C.¾BÁédä+â½0‘ÏhÌú±kß&X` õ0ÏþÑkÛC?“íÑ ¨¿ûëÄÉé¹ ‡§$ÃøI'!»…ÖΝt¥E 2$U¤$¾uHáÜ*wZ0Ƥ­h®¶fOlxOԀB£À)SÞG>â"Ls´g•ÒšLÀ¥&tœ´™zë´¦7¡Ub€«Õ‡T6‘ÅPîD~Ý ¼7L"`= mö ‰¹֎¥b^PG$!%¿=5‚e¹÷¤ ®èY;¾”¨~ ?,ä9…pVÊqCüvŠxx3¬ pÄ`V.§‰9€áTÂp¬OyüÖ$èCî˜ÛÌ5ÿÙ:Âuì6ÉOüqã‘Yڜ åk~wÕWz°e`T*JãQÆ;™ÖÝóýÐ\+@T¬@ïÿ°hÞÚ¦âJÉÜËhha¼eœ¼Ä©öÙ +Ú¿)6·ÖDx«x„åS­A tæ<ß]iDÛçÊ_h›j²—°¥ +Óm®¢ÐøD”4QŠZ|wÞÖ¦"¿4íµbÞˆaƒ¹+ „ ÎSî崒)ô-¯liëôr©›…ì ×B2ËàÜ¥ôÚ¿1©ÿŸ2z´´ÁHñl:ÃoXêL>Ò´ÉÜÀv Î ¢Õ';@&ÅË4$µã\#GÜÔ]ÏÚ¡-3î=Ò·„ëڒ|\ÏE/‹1Øv’)3¹<ìn}Ü:kG‹Ó5*jS˜6jò +”f-ùԊÿ¥”ãÂÓÌ|¶Ô;_-C¦à©îª613yÑQ±>ð)“Dþ¢‡DÀ@2¾æ<Òåž +ƒ‡‚èþQWh®{…9~Ä"ƒL݃Gvb;ˆ;ú¢ï6­z ë³í«^±=¿àéN%ìÆ¾:†0f>'$´Uˆ“íò(qÅCbTC~–Mh·fI[žÓ”I~ú'Ŝï2—Z'»œ>àÒÔûo-u֒g|Z­1=è‡ÇÈQÇdúO}í}•áe3T“D_^˜PÝL8‡AÁ^Tÿ0!›òêmÃH i eW)5SâôÄ‘M\4ŠB;,ýÇûªøÏf,vÞC&èêÉ}3/RRgîØ[Hê»u¾¤“5‚Ïî% ;Z÷Ÿ9&;Šÿú‘›µ°9Z4Óî}Šàs:2í,ÚÌá¼Î)ü¬sU絞…‹Ç´Á ?È@„ž-Xþ'où~§-ò[iZ;r[:êøêÀM¶€sÞdAܐiì ¡öÐÿßTÂA‚á>é@GKïvúòbTþD§Wå×~ +6…P6Ÿa­ŸôçÉÿNqxPØö¶t (½¡?EšUè‚PcA¶ÿð8 +WÛD.¨Þ¡x&‚r`ɀËˀÀ -_Õ꫽în\‹ÍqÀhÿÜ.îL#„}Q‚«®\/øŒ(÷ѤéäS ýj{ú‚ Ö(ÑÞ´ÕÃ9…­þǟØP´|}xNÑãZ¼ËTÆMF`®Èߚ '‹êràNwÞ¡Äßmc/%Þ¹*MÂ/[»L¯ìÑ縆5’ÊB†e”1a­îL2ÚâÆšï”œ —Å1M !»aÐ]"+ÂTQAÏ¡À®ð´ˆ'Ä6ú1îÝ·Hy³VFZ½Xr{0‡;v@ÑS¼©lÙC<*R'²ž¹¸‡¶JNh¾r.ˆ»ëÔcã8èt “°kÐlÇ£ÈÜrÖÌê’îiBuãV0¢? +â, ßjä"Â×¾Ý +ݹJP@uÓôՑ|T¸þT¤º„Ñ\L-TÑkو“^,xñ¬RÏp¾p•½G–Ï~Œ†xŠsãJ;ÉwˆÆ0 ˜04æKJÍÃ_»J8Y¥vÐ…): t&8mobJ«Ö‹DP@¢‘„^釀ˆÇw/Zû釸Ø)_äfí݌L÷ì‘Ýz{z®Æ–&³Ä%F`b”)´‹¢ùŸ5¢®4®³B6—Ä,:†~î„ñ_BªZŠCBVØï”ÝT²f.t'*¥;6't)yG¼î„Jå/4w@4“„©Q—/^n„€qÝg*´œi•Ÿ|LÃ`Žáý)Ûúƒ´çó‡¢?YüÇufñ=£ùï+QóôOæ>&lþ`ùæOæÀyôòLw§óü Ÿ?€öGón>tgóô¾àþu£æÐþ~0ùôI1ÇÎpþ~`öî§ój öIAãÃãt…óâ}ùüÿØíÏçû>°þ}Èùü§ó­:ÃùöcÏ÷çÒTþ| OåŸÎ-`‚Ïç4{óùÿ!áÓ͈ùãÏçä?¶?žx³ùóƒæé>xùõGóë·€?›1ó¿t…C<™h’:%Ç¢"T~Þ^ƒêž"µ;2àüי=5j[Ž6öN “öÀžòdâÆ3‰ë™; Oz2}¾þ)“à9䖳 ùc'›ç·mV;Oۙ< '½§Ï> Éâ ëÏsfO‹LdúPNy ¬Æò}àÉêä“ãǟ,dþx'd”N<øÝ °g­æOÕßPdùOЙ;ÀOï>0Ï=Ôþó' ýQÿ‡ó'ë+ž<Äc.~HÉæA=ÄÉó@ÇìLžÓ@­ÀK$÷Âô"õ2 -ak^x”~xüúý„ß·½ÐÉý­µË'¾<û^€‰ózô§ÔÅø'Û=8'ç$«þÉñ žødýÀ7ý³'£÷Ó'臟å;@O7%Ô<ä“ßåøm™;-¶¿µŽìø£'ßü*×7ì9pc¶2}`'<¶cñúdõ€ŠTÜÜLŸÕ÷$±¼ÿTé³üÜÒ£àŸ^dôÀžè•—ú#'ì9JIÿ¯:B™/‡ðI×9ŒAß<Ÿ­ò½ùEmüüìï¾ý¶Ù+ÛJ=›,næ–_;ür³R„ÑÌrûÖGe'=ܒ;Þ²äoYÅ.üT!e§NF2Yj‘Dúè;ÚkGʎQgæ$|âðÿà­A“É·v-âÝØ,4M²÷—ÒÉ! +26~QpÄgµÆ¨„ÅP“–°Ç£ ô}㔬¶,Š.›ËâÓ€¼ ˆZ¥äy9±ÀêJgå +mX*Ÿ€7ÿà!ìéžÊ)e¨½öè3¬(3ƒjíÝ'¼›ë2@I˘ÁUë¦Õ-û¯Gï\C=\s!ÅÒ'×ø™òûO`;sûÅ 6)õ¬#ÑÎP4{~ëÞÜè £ý UžÏš'vtXºŒúªS/n‰a +Ц4Ý q-†5~ÌùàÔ¤Š( ¥™ŽÕä)¨~øQÓ½_KbvÝߔøé€“Þ,Ý9Ø(Lþjs°W-SpŽE§¤Š• ƒÅ‡„»å im¡Z§}öóÞvPqJéÙ½–¢n¢m´+îºß¨ ÿ>6G°ò1m5¸ƒ5ªÇ–Ãl4¸ôƒ—4 0[Ä%ר‘ˆÏ¢ú³w-ZW2hЁ$û¸n~Áa¾ôƒ#ÍI Õm +Ìt±|Æ„kƒyû̈QdB6¤q+fxê <;},þf¿Fì|è5ÆÞ½åôF÷A¯í”ÙÓ9ñeAae[ÁâEᯤ~y8(0d¯1ãÁüm‚k[%WL|Ú³·4•áñÛ!¤&{ö*åzª©y_DÛc˜ëè›Y ã’TÐ4zœ©w¾UûÖ›NÃRØ=çÓÞ¹ûÝý]Øèz¿ú•¢…±¤0ÞŻ۔^áS0H!Ó¦»m¼©b]T…¥¶nf °—çG÷ +-ü¼ ƒ¤¨kvy jBô]H9¨Êʳ}ºv-Pm¸Ûd]YtÑ*÷X¶s*ÖN—+ªcŽò©7Ϋl¥Ðº‘;þè»ânÇëmÅ-†‹Üw¶t³nª7…µÚooléó0­ä&øÃ‹þÛP01‡Æª˜,m=Xxë¨:sµ4t_ùD|¥éïj g\î³ýá_uX¶ +LÜÞFñ³ôål4³ù³£ll}©vé¼vf>þu|þd?œ‰}8d߯‡8L7UÆp‚gð#1ŠÒ cȗ·wy Œy Fю°ÈašcíôgÝ'6wçSOi*bvXÚ²ÛÆÝ¼Êsñ4a5¿~t”g8Å3¨Q‘æ^ݜÏèžÜÑò˜1nƓ ×ot÷¾Ì7€r® ‹‡‡„i/p7Î"p­âÆÛúV¨øJÆü(öÅÔë„ûEU ÒòÈgHžpx7akŒN¸?±çM.ÿ&ìdm$+ÀJ5= ÅD/…îÕ´¤³‹$°-¥§j4hRˆ$”Ùl ØÓ½ Rˆ + &‹pwʤ”¨ÐjÛD·¯PEöhªïœ|â8£šã«Es4P€*ªëŠö@‚¶}ÿû÷ݒZ ÏfûsÙ¼öóy¼þÿPíl–KcnCº †£Õk7´ðVŠ’2=Ïø\ȳ¢Þ»ÌIªzK/ì™Fh®"Tö‡@ô³²œs=XÔ#KTô³²žsÙX–týãJGLyDÃÙ-$³¾-_FÀ¥Õº-t~LN޶SÂ/^ÄXË!ÌÑì¯}sRt·'ýAèzܬãe áÆõN¹ê5ä(èãzŸË<šåÜø¾¡xßÞô嬓ü–º·9e5¿]ͅˆóPò‡™1ֵϷ ZÞF]º–7>´³ÎîTüß~p#áná];÷›Œì#¢i\‘pUÏ^ þ¾éû¯j-iMjÆmËj®ZB!iÛsñŸõ_öĉªRÆ[‹LU1P«qý—0m ‘hþ¢É£AƒÛõZÎ& î¢_{ŸÿªL·e:ÒõEöŒñgI€CM¢&¶[CLvdUæ÷¹×ôSû“³ë/S$²è•5.ü °ËŸ°Ž7zýQ[öìÉÞA‡h«î"¬dœ†ӛÖiçLÿéÅGäc§‡CꑺV©ÇJ;Uò8(x²ÅBalüͧ½kbïGc8 ^çWýVûö×úŽû„LcÙ¡áöȇÔÑô\K …ËV¬á8fK&WjF;\…~sH$½zÎ́’wïLÁ’i¬ÂŸKå¡nC9hW_h;á˜ÇD0±ËûÄÃç2¦‰WØ3”—rnC*BÿaÎ~<‘wþr%¨· ßÏo½§oþoº'oýӇeÐF*¦Û,ëéV B6ÊÆ#Ç-™ÂÉBÊ[iì™ÜNÆ 6ðƒ¹UŽ«ÙÊÍCÊՀ«Úp†‚gÂݼýS„äô™CrwÔ}˜Ð¢p²ûÆnÁɱ’ûŸ”pƒš=·³NÛÊÂDˆٟ¯]~y¿M«yîjî䴚îR ¿ÂýåÃC£™Y³yœ( +ê}&’sZ7Ìß™»“qhTr­‰¨‚Æ~œ!n]Õ®å÷~ônToBSÜ¢[n^¹nW:?HӒ©[˪z.ÿÍÞÇκsœ‚9âů9Vº{'N"«‹(ßïŸ1žÒ­Y À#uè‹k,ürªòë¿Åªµ¦ñ y°ô™\É©¾ÄêÎð”'\:þ® ÊÔ½Æ~Ìj%˲4𮬌!Ò5žö ­Ôk8. YtN³TZÁcE[Ekߢo‡¡ˆ95úˆ?iÂFÔ‡Ã5 0MÀëÀaÛÙ6jÀY3ÖÅ`0­0DÀN›töK¡ùÖÂPÑeÅÁ¡ +tÀZ²LÜpd¹Ê%ÏJ ô®=>õï 1=æé{ÛܳîÖ2à9ï×þööþËþW›dþZÄ$înAÔgÒMÀ-•ÿb:«"z)ìë{y)´Æ1Ãxõyè`çU¾E¼Ï·Ô¾½ÏÑÏY֑ON2@ÝLb½£OТà9a«ú$µÄ‹?þƒôyý‡Tڒ¿3ë#õ*C·ôRŠ™Ý¥~–æïè™9ûøõÀ¸.¸ÿ£Îíf.¸‹@+÷Ïñ=û ¬^¸Öþ Á'֕âECÔ´·D›'í :k®L×¾k]q¹–ô‹üTÕîØ}ÈhàtEÙlž¸ß¸v4…òQ*×¹Dúä8Ç× †ºâ;]Óp1>Ë+ý&ߥ>…^ Æ[ì­O⒇-ý~cbË쨂`Eæ\yÅ +=ðõ×Dë©äq +ʓV†EÂ9ʔœº/D{“ŸÍË3½™-è.bGOnd¨õ{/@ë‘ÓjZ×$úñŸäÀ V‰±}XÛEf¥¡s¦ô#ILæ»ÐjsÁáÿKX£9Coy:“ÐL†öŽf+ üƒ@…â–Ä|]U«TkŸG\μ´®ov­wIj×x©gz&aô‡ãÿN‚êíçIÐk¯!®ÎsšëÈk»k½O>;]¨óãµ×ô³½5F×]S š vkñkžºÓÍkž¹œû¿íZçqZäK?{óÒ½Õڭ¡±ÔzØÜYå\ÉÁ~¤è:@à¾kŸAÁ9 »ç8'!Áv¦àµ¿¶;‚õlwâí,ì»6×_S ºº£ñkˆ‹•ç5Òá®ä:&»!j×QÚµÛ/<Ùۓ3F×zÉÐ]ƒ]oüZëàk¼—\ÖºøîüÚïåçGk·žtv»(–vaLÁ5Ë'Aw vžc ×u„/çç5Ý`k®†×Aµk³QZäçÌÕ»ÿ ŸZ‘&Ø ,àlùâºÐ“0ŠJ_ÉBó Ýw-¼â ½­Ä¢cC"~çT½›êEþv«K#õÚÏCvFçþÇPbØÃ«ˆÎ¢Ö»wmàØòÎ/¶eÐ÷@ÏëÔ®"W†³A!2gÔú|‚ÈÚhM½³÷›8Q"iõ’”SÀ%@Ò¹ç}:ùŒZŠì7fÜÇÕí¡tâÑ5ó<3ð,š|f‹à­·IƧz,<7EWiP¢;fÅù¼V³Â}ây¥DgŠƒvv2M=’ìà÷|ԂPðÊj²Më9rÊVŠcÒô= …mÅR)nô]©å¸<û‡¬-¿y¬S¿ùÏܺ,‘øÙi#=ª›µ°X/><TÃ7ÀÊg®·fZ2×ä[tŽMúø¬ÂIK ‰'y-(™§~UÆÜ³üj«åݍ—¬Å w㻘’R»ÍIÖYŸOJØ^d…Ä»KôH‰ÿýo˜ííѹ†bãÁu˜2&^3âÞhqúð/’;¸g*^ ÌV`‹£43²ê‹§’֐ØÓ8ÙS=p.Úl.¿œPm#8$7ÖXáEúÛ3þ·ÐkúÁaßGO7fÔ 4JµhØÞÿœ´ÍÏÕòHê—æ¹ü÷æ%F^?‡=V£úº¡‚)Fœœ½d, »wéö •»àvŒæÞyPkä3‘éM_U(¬-1X˜Ô Ž%¼5>R!Y-ƒ'C[·R´X÷ùiX2|cu+{CûtbµnHþÓ[$¥mý”R»½³å2IáH*°¤±¥QÈ%›è;pF´GJ]¡sׄ9:ëÍ:qù»9’»@˜GöjÅÛ|0DòJús¡;]£çkdoá 6ù~ƪ‚”ÓåÀWóÓ¼?0­ ç˜ÐP»Â¢½ã˜ wèH¿’¡i¬µwõw¢Í²¨{…WìâõïMaáçDDÆ_¸±ˆM{ö¿LÆvËÞÙÉð…MVB”Éž¼nMžÞÂ֖nà¬}/ŠG1ø%^o*.!¨¶V¾[íó +ìÎ#;W§?_˜roIQ@aó`÷š`¡ ‘SøK~ÊWe#òAëü_çÈúOéÈÿÌÿŽGΧ‘ýWÿ9_;’óävñÛ\Žìÿô9n‘üy±:yó8ÿ®Gv—ÈüŽŸÿ¾G.ã¡ÈÈåO‘óÝÖ +¢EWOpJºØB©#ÔZÈx\ÿò\mÈì[Á·Šä6ÆDö²«c#rJAŠq·‡þ…\“˜Š2]þÆF¾J±šù_.BA2j +D/ï*D,É盁B‰£ëAm!@ŽüeEnÅdùÜ'ýÚÍÇÛ¯ÿ?ê«Ã/:#§úÉϜ®rr^àÂ,&”l"Ñõ fø®·ñ‹5³öñ¹rR!1žoù@‡˜¼DùeÂýÈDŸuø|G–pÈü lp/Ôaš~ Ÿ+MKàó ^·)ªÛþ _…½Æá†­ÑðÀp©Š5)§ ·€áŠ9r·Ò Zê¹ Ð½Èð>~Û¡ï+E§œˆå,o#»¤P€tú¼2ëYìbBÚÛWu"O½ü“hVâ¨÷ó"ô,I#Câü íåÕ х É`ˆé±ˆ&&•©ïáÿ`äX¸RL]âãx®þ{ÄЯâdŽ /Fxdi…;]x(o˛ê'›àø_‚ÜgLjrížÝE:ùÏç:ýþБ;Cå[óË>É(Ț7žgÞþI],á?ÂõÒ?«û㪷 ŠOݜ4ؤñ:›¾*5á:j|‚´˜òşž_ óÐgÀêZ:õ3i°¹¢ÞIúÕ.ÑìâwoLMß숐òcV3£÷í£ƒF1Bÿ§8o$Po­5Qµ—\gÓzŸ GuÜ÷ÎWa™þ.8üßøâëÔpØ“Iøêþ‘ ëd¤€ýÅhžÑ+UAÞͫƝùü4e3î?ºž ?ÑzH<E½ÝõŸ,Š–/]…’šYe÷oõ1‹ +N×ÈæÒ–øaÿ¯’—ëW|á¢ÂåéI®©-Sûƒ¶z‡ãÃ7·ÛèaCh°£ûê$ŎÀoF¸Š^‘G`ç¡»¶ˆ.½äo™šÆ,òO˜€Àe𗍄?–\“áµQDeÁPY:^ŒÂ+sˆ€§ð#¦F{²=MΌ¼— ÝqG·@¹Tªø(Ui‰3(œžà/ú¯Qòtç¸/õã?䕎ѣ…§¼s9éR¬U(›0Euý­ÅóM=!*áýþ, +p`O~V\«GÑðþ`š'äÁƒg£H͊•Æé\Î͞ú†×SfzLàÇNB‹"V²"—ÑSUŸ¢e6{£ÉJ½×ÑK8SU’þæ­+zÌ¢9‰`jÌKFúmÛp¤‘)L¼^ƒÍ+™¬,XN[¢³Ôòð.È`ʂë“"4Ðè.¦è—¾Ö?yó‚ßšªâxhßÍ»‡zWüíÑvï™JÙÛx®MÇr‚–0a&,W,„ޱlú ÆñEÉñÖ(CËøÇŸiO”fÞ1¡› x$ÆÍ£=<Ÿd'Ït>ÏÏ"PYn?Ž(ÿe¯f/Œ±w:" Háôž9g1¾­g¹*yõݐàé‡Í›ÅÎÆòzw®CE¨Nv€:÷d\‹mŒ“â]»ñSzƒ¦~®éoò þ=¦yÌÈÞ¥(g÷ðEÛ&p³jÖaÜx¢¡Häþ˹÷ôés)½»ý8 }À5cqå4€Ÿ©E½ kF{}S¶ïÜ|Ïëï»Nc"ڒ± ›õø¥å÷aýߌ•c?ÓM,–üZpC;—áônþºà”3üc1_Pô¿^ž*¹sœÓÈF-®oLÊ!ñÂéOÛ ×iÒªÉU·©F©ÂB4© +<ÅIªÑs™În— +¦?¤Âh›&ßå f’vYJíA!ã­x?ïÚ³ïnÄ ˆsJwĖ®†v×êwþy|Ê’¥w}37Š›µ9Æ*5L7‚…T{(å»V5°~jÃ@+Âô8…w½¸;´³xnr¤+- ñZöC¾°×”sȹ£†äž8î{Ã`aӃÁ–˜:w†^åyO]l”­™$"¥s¤…ÚÀ:NÃ-7ƒä=ÄH©Z8«Ý­€;÷„tÑÉU+¹bËÌþÓÖúȱÃ$y¯Õm/¨¿›F™–žBlШ +¤ªý¼.9ç§q…›:ÌoÍ /d!]9L†nöªçàUÆÜY*}V&$é±+Èôè֌ꁤÀö¾:Ñe÷ðÃr›~itGvû‹!¼ 4£ÉŒîóÚÞ cÜ"TµmÍÙ¼:xXÔ¥ƒ…îM}O—¡Ñ±ƒDÖ”eXÎõ_X,—hÕÀ„‹J W¥Xtiá÷d4’g›Lœ?Î7\uÖ5L1ì¶hfâW¨›4Jî­gÉh«Íf{ÖØbV)@ézêӞŒöÕ&JT ¼K7¼:S\²!W&ØJáÍ §øŸŒxÂ> çéñŽ×j6S«ææbÆÐ/ÏG>wˆg¡å+fˆß"ï9ô¼HÑm>çÖ`¾ŒmUŒ—#–Ã.XÑ'ÿê1@ûŠh2¢eŸø…À*ƒ² ÎßG#o‰ñ ð +•XÍwHD¬R®8 ÜF̦÷¹'M¿ÄçÔ®ãYÍU<Ç­9ÃÄ|J±ò}±J¤E› 2¥mì\l¢Ã_£=¦¼ˆ{ǚ÷ÿðùYùS•¶›»Ÿ¿žîQx+ÃÒÇ1ï÷?º†ÀÍ-ÊûH^nê–7z[zÜõwí¥®¾¯3ÀVq‡ñF’#x{ÈÚ8z`aÆ®)á¸3á~9é“WaBƒ/ßLb24ʊ^®æf÷€†RS|âŸß¦3Ĕâû1Î}ٟÛ[¦9÷‚6eO³ñfŸÄ•“ÔŠsëhÙêK^W!ð!ÞBUŸÝñ—¸šó¦î&¹Ü‹é·?£1ù·‡Ó܅ùӝ[%8\’¾üS*¨ÇЛéŠtߨ¿ÎtžH‰VzÞN ½ŸO¹Dq¦ô;“ƒøQ¯ 0s¤[p*뻵àSœÿ…!;XÌç…!;UüDŽמÁ>oMØRON÷šaÝc¨JM¡ºï £Ci&úòŖA¥üù=yež¡IN$:õg ½_ú¢qŒªHÿŸ7$¿Îtúf§<ÝwÙÛâd}ûg‰êéc¼O;Kâxú[W‰ ‚’ Q'é^<-¹`Áÿ¥Êºm,~Uö:Yã›M|/\Í©~wµ¾õ³‘½Ú¹’ÕÈÉéc&*ôq3 á Ããñ"OM‰s§ÄŽ$¸‘¼ÄÿN$Aù-Ÿ[›ÑgЏ}žŸá¶³•Ï@ÁÑÿjږ4—}Á “P{sÐÒ­0낚¥°gùD²$”}­YÆè™* 4:Ȇ{Y i•ú7Të8ÜUÏˁ)j&úÖ-sh3Â" 0³¶Éè‡2ΒAiûzµØBë +MH¯jà¹ðœ¬:=^þW¦\RYqZÍsP½,f +ÎMz @ǗB VïÞoê$Õc/hyÖÄ/sÕø&SËTªëŠ;0@ošÎUdÞ7yWº/û´ y÷JÞ.w¿Ë¹8’V³Úû_œàô/Ýn©{¯Óh¤Ñ^®½ ó ÓÆá¦WÀ4´†áò8þ²8/&œìƒÌJjµ-µ)­»*Cä³FùvïØÄ¶×Ï!(¥›å+Ê? ½bC°»YDŸ§¢ +oÐå àÛSÉ ^jb/@†z NSXҙ”œ¯èáSÒ/€ˆ3Ðv%AX‡E“« êdÍR½,½F``Ƌ¸K,=MSë…Vü¹·ï>p~º9À®]3=J©ÎÈ­ï­OåÅ Uqӏ14³®ºîY÷ºi¤ók±Ì`¬1÷ƒG»iæCp³¯´Ñᚵžå?®yäPÙ©ß^"j­§Nw*ʽHëˆXñT%eè¨÷y&åÙµ& ýð)b½3ØO´Y[äSsƒ*&—£nˆ{çzð4I«;%ÌÑN/dQ=Å2«½Z¬b¢¥a7Ÿ[Ó… qL¾À´Ý‚$¯"²(6ԜYÄ9£(EҜSÓP—a£Uڐ¡'B´j!M“9RAù1¨‡X©QÖQñ†{v–d˜¯¼q1Uøc> õ˜ÀH¤ÀI]rŽsCNyZù¤•ú<•+g28 Ÿ2Ջ„)ªÄà "0:Á%>`QîDŠC£eWBï¤OŠE,J$R Ê×dDŠ]0þc²þKyÙ½.mxևëçË1aµV&ў÷]3• #Š“Lçz²–x^T‡’»ÖŠ?IAXy¹¬÷Hÿ¿GH6.}ôâi-ß++‹§Ö"0à¸'Âï-oÇÁ’Dƒ¬OëJC«¼r7ÿbéÎë·ð²þnâP¨ó·Á´ó {Ø}ºænÞ*c6ý_"ìc¬ <ÏàÄ草ø{ÿÁ‰h†‹‡wI4ËøoxÉBêÔwñ…Ç@‚–qÅ.ttsÌçwR*T'b&²ˆ Äy¢‡T©A6éCCŸDî]ëøó¹Ǟgg 0åùºåþ6°åî$ÿ¬9C0dDÎ.L½Ý’ßnŒy±åŒ.h:‰À1Ô@êUnaërÏR,«ÖîÑ=üBÄY`9ƒÓ,S¢¢môJ¬¦«Àmé4#*!Út”5 <—¥.††š½°– ø)I´z¨8ïdž…³J r /2x¯ŠþÓ3p¶fBžµsÉE¢½ñ\—!Š+AžÏ”jþ[—Õ.C”žnï¨ËkÅÄUæàöiÑ uâ$âÞ£ÌPtºÚ%[œ*ƒÖ~ÙêàZôéÞ±×r2Nmµ `’3ÏVseûL‰Þ1ú2Î`5©o+¿»\ËN!¦‰MV´kÖÈ]œ²•¹ÙÔí`WœÌ–dŒ]T®ýœ¤’‹ £LûVîözÍ(ˆímÌý#ϖ¢ìKâj¨2Ԏ¾R›ØŒQÄjàæSÒí(ý"P‚ž‡ČÂÏ5™î”¸<Öý.‰uæ­VžjQ³>+!A°°¥.蔱Ý>Qöáó +ºÂK±Â‘ÐäÓ¦Y‹¼‹Rÿk­zV OÐ^Ðú˜îÉÞ@1øÏ€K¶ €ܓ™¶A÷ZcâÏc9²…àٜKô­“„H¹ŒbbÞSDÕÏ¢S¬©Ýµj!“ÛSµ9dS§ôs8u6‘å03ž7Ov³›9V¶³™9Ts©WðrÅ1C2Sü³É‰‡­±ÓØ gå|;¾ç‰ +ÉS¨ÿÏ>›ÄoGàbEë!ß!²ÀË !çóQ¢Æ¯#ÀYy]á?•«äw˜Úù^ÏBöÀ]õ× mŁ÷Íf†ä^G‡šÝ Éè7! 7>BÊ + +#½ÿ0-ɵÜsP-U¨«ÿ0-RÄ2Ñ5‰Û‹’J>ÜèâÀ‹/S`DEùGZčÐ" $N-úùŸO¥§ƒÖ¦<"AVb¡ŒÄI: I|b8ußܜ DI?Vî^¨6`3Xø6äi`bcaXÍäu"ø ¼7#K$iß Ä?©‘"T™uþ +³÷¡éZϨ@¢E=%‘jùcïíQ¸¹åP<ï÷ՏQÐQíç ˆj¿-S÷–eFl¦ŠÉÆïPW½öÝóÀ6íZºìY'’ϼ s¹g9Š +JõÆ(Çï"çޞšÔÍê¾á 9þOyAv댟ÿïJLb£Ø²ˋtå2 ÿÿ·w¹ûô¸T8N\ýì*Cà‰Ì;R¬¥Þ«Ï<؈9¢îÙw|0ªŒ¹•Â0{ÄÚ3`gcòk"^œ¼(¢Vü/T¢úh§"%ˆhx"ùÞ"æ‘ÇÜö®ƒû$ òÓ¹%i3Êj®ŠX•†*9ÿ ÈI¯ϪJ¼+=˜~G ÀAمžÑH…F0R•|©só ñ7CeWʓ4 }WŸÇÈAÐ)ªÆ`(«yg=Qö¸G²Ã‡E[ã¶Z÷paÈøÔ.î +(ÝÜNwwI»€…AËpmÖ4ç!¡i&œ7ƒµ.È}ÚXuå`¥À<1Ibu‘«/iÝYØRc:59‹Q R𝠻~e¥VˆLî{19¤ñ±ðÓс Rý|àÓz¤^«… ZÃ2l±Ù4Gg¦GòEÌßӘY~:¿£‘OWAqGLÑå}q +­5#Î<ÌWMôQ钍”©íN×á2ög@RÎcX•½ô5ϋ~•éR }9Ý´¡ÉÒ8‡jáëªSÛJatBEgéqV¬öéÂÝﺁdîà1œu`Õï0Gµ¯Ne Œ¹YP¼µÃ{ELêSëAÏÓ`ب‹ž;c’a¼"j`KWf\aøÄ¬³›%§» F><ÙçF{+Oe¶Ò~À«Io@º‚èNäHægPáR)|¶ÚÎõ… 1u£ÒŒÐC øÉBðË:Xï„ßññ,rÎ=¨ÒéP»ÁC”«©D0mÀ-Mg^ñKÿñS=žìh ä’kh·“ƒ›Ä‹¼·”³ èRŽƒñí¿í”qïÄäÊ@~3Ù çpžyÒÓ§"µ5}Ј¿Á3›ÿîÍÍç|Õgëáÿ}Q{·=‚ÿqCüvÝaü! u‡ñ‹O¾!$“+|ö‘~:%¦I(Ë»ø~y\ÐGÇÓï×á±DH…8"šº5·?S¬Òo/&p«•c½—ï>Çêb~Řë[¬ón +µ|õ¢"³†gÒ+VK\êŠmAãJ3Wæå•G9«™M ‚)¹ä)$`Î×K&¬ Kówmg¥ÞÖæÑp¦ìüè>‘‡zXîšâB&j©î“ëx¶A[ÿÛÝF"ø¦‹Mz +™Šš:OH§›3¨ Í¡&J[ÆžÄ2¿ 9êúçÀ³1ß鱎’y¬R;+µ) +ý7ãõÄcu`_W=|AGÛùÑì>˜ÉF¥ÈÃìû¶´u"ç\öûgyû>7†‰Œ „œö¡tåIl·S<Ø ·@±¤oåí³^G©§ÓM_UIh”"Ùɼ¤é,Âʚ{«¦|ó}”J å“<º2­TÆÑm™ú¢‡JHõÿš÷‡´ôYdˆ¬œR–d_‰<†“cá*©¼3?Uäú °¡‘ù +Á¨@±o1“՜Í“*‚rׯFhŒ­Ë´+Ž/ÿâú:íqօì|ÖTL{}ŠHœºàâY﷒Ë~îÛ3™¾§ÙUg¿§ë|¹gLd-Pô&¾b´Í†¹»3Ñv‘ažô«E*S-±ȸ"$’&±Yy†‘¡`_ú©¼ÊC˹ + …P›ò,¿vFîg ÙÚuë}ÚÔ% ­BETžÉg€rˆˆB§;,¨ï…Ï·|‚¦_Km³ÍX'°ÂX›ÔҖ#Diw=Æxâ´ešID–ðªÉ3†çMȉšzªoõ3œ…DxCŒ_ âÂQ!ÐAÄÓUŒ"b+=‡{ž³Ý| Š3RUûÓ=|Ñú{þ»ñz{þ‹ô_O~Ќó­ÉßEñ}‚ ¾>® w)ûàÇržDÅÊh ô¤~®&E¾÷Û«æšx×ø¨´a6ÝþI¶ÝUû‹£õûkñ(¢ú] +ƖLfh2R&T"ðC*,çõ_«¤_” aûÕþ²¯ç¥¯•i€UÜüP~ÿÞZÀ‰‡6W”Œ8¶Ìày6‘‰î³;ɨ­&x°šèR‰1HÙs48áL¼·¡P]л‘áÂ=&P¬¦õúJ‚¯˜—=]q€µ”lk™1n*JTLcäh˜ìF}@ä-Zá»8’2bh¼%Ÿ vnŽõöD+ôR´< îÖçÉ2Æ:÷i«9ryíϓ˿»:ÏkqHó•XìHû*±@õ•Ìك’Ã!ˆDXô7cÀXóM$òQ"cªû³P¸Ž”jUlÏ"^30MA=¯Ä,ÞqÂü­®Úýä‰1-Äíâ‚,ä„3õ¬¸ºØ“µÌòêôõ5]Ý9³d¼Ø–|[¡ ½* Û<âÙt2(Ù_ÑTÁ5Û;Õñ ý]¤C]„ß7M!N‚¦¨ÿ;þâڄF93D!ÍB OYÝÈXƒÅz‚%◢D™¹!S§ñæŽÓ¡¬Üú!ÿœæÛŽ0ï„aáõóœ%k"I1¸ZÌ +RpÁUÍ<(f|2c`¶3  ÿ ~6hêƒÚî* zãêAîQâ8ëêS×\çÜsåÓRį8&‡Az~½%øÐNͅ•?//}c,”·`:Éúø¢bÊKõ„·ö@³cÅLÏ9p_)L:}[Á ¬Üø%‹â–‰ÌQϬK¡‰ö*JȪ´?‡wð#“?LŠ»¸xa¼PGУVè3Q™ž¼˜¶1}KL(nS>¬ñõ:Aš¥ŽÈ–×p‰I•¬YómXÅáÁ…òtP%¬–¿·‰i¤“RHý¦^UŒvAœj5¨˜Ìß'¬Jì/ÚBý®Éž©ÐW¼ë©Ï:ÝLÁ`i7 önA™òHTmk&zn-¤DÚ>—ì̕ÍéIӊÒXGâ€tOtÑv‘"•pWÒ§ì?Lt°â\c´™ ê^~`¦uѤ¨àÛӝãㄓ€oÁMº¥oÒÈ}+<‚Ðʗ»6~®•'@™ŸÀ1J¤ ¼R©Ï wÎ;ßã,™ËðL×ýDuÂöˆž`ˆà~ܨ<VIŸãÀßFMô>£Csšwšq½KÞIÕNõOoàKG¦ãp±Âx1üݶDà¨- 3;ÛÈH[”M£Ø5¡ÙIüï-ÞwD£¬Ä‹ˆ/×s´Î«fWÒ:5ÇøÍ gð,°êñþLØCõ%·K1œINI#&Eâµ÷Œþr-ôÛÜÔgÔ­_›]£Œƒ½œÓçµ.ÒPwŒ{BÄp‡ Ö ‚{£înJº¹ºÎ&Øv{¦HÐӏrTµbI‹.+± }ûti9ß²d$É&C0Èz"¨ÄF0& „@ª€ †Aš£Ճ¡ +5¢¾®îºV«­[[k[VÔ[lÐXÛB¡UR°,ÀŠ"²Ìûÿïÿÿ¾û÷ìÌÃB.‰^{ÞÚÞ^sÛëîzúô7ž÷9î†îô·§¼æô·›½]æïKzûy¼ÞÞõ7¡½ëÔޖ÷·¡{[ü Êo_u–Ée¶Æ®\ŸNšF²]eçEb¢î^nìh(Hè)^ŠêGà°sü»ÔùOf€ývÀËEõŒÒàwÃ\Àçáñú֦ЮèzõŠw÷/‹FŠY/?Žj¨ÁòɊŠgZf?KQâ(MÃéáí£z¼ä«„$ê†U¤åM†,i![xu(Á&’{ u* y…礩s³u+€ö™:\­‹gw§·§qá¹NË´©Å7wt¥ôìZé5ÒüšÍhG_AÖlë÷Ÿ5|[Š]ųè‚Ì*­¶.°›j^¾¯ ý˜ +à51±¨µcœ¾?Ü=2jN‘… ¡sI‰­Ð7?X&,/oŽ:¢‡ƒ;?WgߞuƒEOÒøW˜žÖ6¯ø¢•çô*X¹TuÁ¦ZP÷ 7W¢*Á[-šoʯÉ)'SE¢¹Œ3ÝÞ^ߪ*žòNïÏZ»º›^ÕØÚö¤©d*g&ÝÝÞÆ»¼=gßÅŒšÁ¤æ³òm‚¨ Ç¢íÊÌv°+q”(c٘rK³Ç æŒ†²ÃS½Rðy8êå쫩يFíª7gFÏÃ5Š.»Ñ$ÛÂÏó/'C¯lª» û $›PÛþ§IèD“|õõž˜k¾}‰±G=x£½Ì 'ÒïYx>¨úԁém¸Pãêf¼´e•‹0¦<­]B5Æ÷}2OZ`²jf¼ÖaAš ui¨+ÉÒîê#˜3Ú˳o Ü}øÁ썯Gá›GáÎ#ðdÃÑ?ûH=½uÖ&Õ6B”‹ÚŸ è“I`TPW‰’Cçð7¡™ÇvY°q2Iq³_ÔïÂ£Ç‡&h5,44"~þ©˜üÏOâ‘YÚ,‹Çr®_/>e:ð[‰NiGU4¶ø»éó8nËb3¹TÃIäÛ³Ø†DÚÍãÃGã0†“Ûª``zŠë™í—T3¤Öt +¨ø¨†TDg=fç\=‚"o"¯û¹ê{S̏ÂȞ„¹ÇÅë„ÔÈP´ýr¢¾ZIڛÝý†þ€ëgÖ_|‡FêS­0ÀO‘dÚëûáÙD ‡™FLì©cpuVÙT¢†à$/[“:2 ç΋øè=87@£y‰Yyيf–0ÑèàX³œÖYÏksíçj|ùڟjv¦Î`){ó®<2r2Sƒæ 8°à"~`øø ‚’7LŠ-ds_ìXZ„ڍàÌ>a 3ÐâðјXC[o`1ߦ +Nñ”(ØÙ1ñ¥l¯Lw3ðYO5Še«zkŔ¼åÅÀ,ÁÀAžºïbðÛá‚.P¶¨§?`ŠmQ’?áŽí7öTH£ðûh #l¡ýgì6ÔÝOÝà|‡Z;{Í,n.§x¤ìÇDàÊÂaQë“dî[Ú¡ËRä¨Ñɶ¯]Êä¢r?^NFŠRÑÙ½¾¼œ +á)„ä½Îr’ߎƏy¬æŽ~š–-rn¨YeížDt~^YvÆ£ððÏäW6ږâŒÕøÙ$tŒãhÏ¿o-OZ̈́ªa!´güJÕŸê0Ì c"Ч¤†Ÿ7* 1¥p¬œ=‰q•!¹mÜQ*•»§°´r´/N„ƒöÞ JopL³\7žö<7÷î›v›ƒøö{÷Ϭt¡•÷°â¯ævZ^n{Yr¢Ô )˜P“DÛ´ñìc‹òìüp¢ː_Zc™ùAT¿fr§oc~'á—t¨Æ¸ãbÑæk?sÖFeöÞúÅÍVÎÔ××ý³~‡¤&êvøm“mO= +j»` +m7SG+„›ÃX‡RôÚ×Êðƒ´ …¹a' s•TMÉv(̨¹„¦ÍƒXÑyRÎVݨthȹÁ‰ ž,Øm©Ûžº| ¦dcfÕu‡ ÷ž»ííCÌ.Pù½aû|6WZý”Ú£à•±®Œ¬vz ?æÓ€<Ž/–Ö?¨ý£±¢ãn¯5l¬T/?Ë}W£îŦôQòù¯É|kÿ1GúÑP⏹û¼h£å}~(îýkˆ£ßÿ QöÜîŠ>g€þ(úþñGøœÅ–>§Ë4Qª"ÏÊ +íì-¦þòÚ£þhvé¤~ &ª9ï8ׅ}8\(g|ÏUü3µ!´2°¢#€Æýx jŽ–ÐûH7ï”ÛîZ¾N±O¥_«Þ{ïŸFŠÏmÀ3SålºD¡Jï¼ùé|ÛðI·°°˜ ÈT +Ðrƒ­b{Ãlƒ²h*<5ߪé¨*k,eE„ç~|ëÃEž Ù ÀûÌ6Š5“Ú˾ ¤J6MOTì¬4 Æ:cŽhñÞ)náxÅÔû!u ûØ·ƒz»¢õÀzÿÄjw~ìt;´G÷Åb?¾¬8þæs0ãûêñ£ûÍfm£úyq!Êä~%ý”âG÷u¹ãG÷/]ïÀ¶k~Ä~ñýìs’½¦Æ¿wê=Ù£i@[ò.L<«Ä Š-I½§<ÏËÇ`>Å.û›­ë]—޲00Àë´õÇqê/¯êVì§pÞÓ×øÀŽ{ÖaÚ±Ìʇ€îa¬ÞރB[C]¦ðÖt±U>XßfO}ö©n¦aRÈÎ!©*k±{ š2~ +=·•AV{[ÔA•ºa¹ Eö®Ò¿•>Pð­¢=ÐNÿË¢ÔÁ]lT¡ïëÜÊ-HF¾êúÏLw£×'Ùe؃×¼à%k,ôîf÷`ìþÓr¬]aËz£Ç„ÒL5ñrÃJŸ7Wœ°ŸZt3ۃ÷é`o§Ëþ–ðoãAú¿æ¥z}^U4¯O×åSJôývUúQûþcLJÿåu!Ìô~Ýu!Ò…u!ÿ±æ ñQ°}E§…Ž +×Ú~úm‡ Í{ŠžÕ‡ªNÝ6_вë­?‘)wԔ¼ôEn“Šx±p©c_Ž”¿ð’˜ÏúÏoGЦä”Õo/ÅÍøϗ?ã™~”ÝîKÿÄrw¡)½Ø8ìŽÛ4ùó„²èVl¹ÁâÌkt®Xé_—\@s+q|nN=ŠY M,TûwxT²ÆŒ±â0;ôÍ ‘K祓9¯YÆ«^²€xfýô|D!'9á7Üֽ䠞|%˜ó¾Ç­}ÂI-}ðftnÕ@xO­¨JG­)„n´¦Žûe|®½m¯5WzI*µªjÿ¼ð8Àñ/ðq+.ÝýM몖gΕ(á*Pî†ÈöæÈöÐ)iL1¾ô¾ÉU8s.6ÊùðáÛ:÷PˆM QvsÃǓ3~ë ðñá>ð}ÐØ=¹°{c`ûš×¯”úüfyߎí ñÏw»­{ð Ýø§…¯wZúg[¾™Öï¦u»ï”T¸¾z[O’Zìl?vòŠ–ÍÁ‰Þ²[Ч±~ڞϮ„YgB?ù.Ÿ¶™ýpn|t#³öÏ_wrÕg9ÆË96 rlç$£ÇALî?ûd%KãRà{)Õ¤sqÛeVz/ øñ>¹°y*ëÅŒáöÔ¹f‡·¼È-yÂK­ye,´&á ›3-—ü–‘²®c-Rûç¥ë~v/[ò‘ërŒ¦V䬤ë¯{gWŠK½ •Ù×—S҄–è^Z0¥õy(gˆîz_cn³}r÷;ˆ­ûË>¿p„¦~êÙþô᪝w*ò1‹Hë—Z;ƒÉÏ¡î /gž¨-䖼/÷z ·üºÎöü¬7·BiýÜSxjÃ6¹>Ÿ…/͙ŸòØÚÃT¸è¥£°w.B8Á…01ø×5®æq;¹œL)­•å¢×œ Bž=kÎHuF²½È-{Ê_M£NMkÛ+ÂʎxV ä‚Ò¸NQiVRk@ÕSÆBk»ŠóëâWž¼®G“[¤e¨åoÎ1áÂZìºÊ‡¾O;Ùã²ÛyÉoØJ08ï{Ï«5}è2ü÷{ÒûSöÒiV±_#¿g<Îsë³·Zí§«B7-»¢ÀòN×Èçûoa€“ûý²d¹Orð+ß"€ÒTÀ/ j+ӕ¾l’¬—¸$« +¤=?»ûڈ¡¯³/P åšËPބ«G|<0:[ppÂAqAZ4áՄ nX#”Ö÷ÑaOáB¨ ¶F´s¶`Öæ hP¬¨b|ւ¦!…ðMmþ1e¹“Zó_‰ ±‘­ø&·ÆŒCT +ý©635 ¾¯þ­–Ž5ìRîXˆ™^Ɛ. ôE k™­î ma††¶œÃW™#LJ6ŽÅª n¸‚×¾5»CZ ;Ð΃u‘÷+H¿·4¶á‘æ × ý£=]%ãÁšúe¥P2.Ð$»;`…þççRD¢sˆ¢` sàzƒA»à[€=ÿŸ!ïs¶91(µ‹ò3©¯]ÛjÀ‹P?ž°Kßj§!ó…IQ""ã4zÓ)Ï&²ÍñI;q­:eǓ5ÚôœC¶ÁPm=æ’ ^ìZÚ +ñ‡ZܵE`0ñó…L2aZ9½ МTPœ^}‚óèc¥"]½† 5ºOtð à^çÈQmhˆào^}!‰S›Ià ÙÚD+ ág¾gÿaUš&û,AŸKÎ.°ð¦ÜÚCî¹5Ï­cÅ‹î9!Ù®¨áà’ð8Öڍ¨×hIáßæL2ì›Æm~pű@$9°máX<ˆÜ¡‡ï4;ŸýB> éZ#•4zç΄#¹SÁçóL¯â6‹\‰C*ç.ŒøÌosä +ÎÿŠ%0ǓWñ¶tDq>~öPHúˆ4ÊÿßåÎ ¼ú%Îç hs+Œ¡¯¹õ€[’,¼ ðJå㙠M,£ O@PµÑœV‹Ø ýµŸ†@+øNÈ@¾ÇJüÐP +àý2Aæ매~I9¤ƒ½}á¸öÀæxôÄ0ƒØàÑ\ñ·x—ª:$6çI:õQ¡]á¹í)4ÕÀ<êÂR¸Å"r$?ƒ¥\'éËø5ŸäM™¯N–â;šùã†Íœ×áÒ¢ìúùŪxðÚjÒÏ–Rà1ÔÓoW&FV4¾»>—ù¢­¢\ÒkjnßLX³ÃL\ÒthÛévpžÅŽÆ5mFÇ͍ó¤2Æp¢»q –\1ÊØsþ\†x Iž Yï‚,‘ÈDÚ½} Ôj%ì +ãØþIöÍ9Ԃw¸´çÒ_TjÔ÷Œ\%|ÖNd£÷ø’”£ž,_ã“Ô1ñ†×’«/ÄA~…üKáÂWy?®`È«† +hÖNå$­j‡¿EDZ”×q2µ@³FårVïz“€ÍØr¡ +y£¥¥zß½qd‚7û“LAx~ !MˆðEõ^Èüy%¿Xp=²LÅy¹Ám3··tU½ÃèЧlH[žŒ¦ëÍo’SHBšWðf·,kAq ~ÈzËÆôh*0j·Þ`ÖÓÝ4`¡£xkk oÝ5»ã[êšßdք插kdš݄‚ÙLæ#–[€k]‘¬‚ÄÒ;5ºb Þÿ0¦ŒÏµ5̆êçzG©2f¢Ô‹ kA"€ôf·\A{ïà݁­Ü‚w8¾™Ð\Üøæµ£m4Îq4âßÿÙ¦v —ÀÏ*™§64]NôgbU'®sÝ/™´MQü­_ÏŠíæ²é™3ޑ'ˆV£J½`Ê'î&ºpˆ´¾°+ 9§æ° ÈW`¾ät‰1µ'ÆÖôIø˜;â€\QW{@ÓCÒ?ãQ›W’~>(™Z5·¿Ê¤­`œÿ¨R)sE)UB¥jÎěom6ßGû¤);¾ôۘLõF6Ù9eÅ —FYþ¢MÃzZ×a4Ö#F±ð%éàÍ͝\."ôi‡L±Ç¡-›^¯7\#ê ·K,’ýê`—ìî,§É€ùÖáәh„½Têxx%ôJÀæ¢ËÞEù2¢üΧ#ÐÒ¡c7"™¼yñ›ÇîE—¦âE•êãœïnd ¿ŸèˆËµPdzÿÇàN)†_°ÿ“ĜqüIÇñ'ÿÄãõK}…8þÁþ½{ËaRØÀœÏ®:‹0 αÖÀœ~ †Æ½üáÿ|ÒwêׄÁ¥¯-Sì8{‹Þ3ƒU!þYkvh¾ÞÔÉñdD¢qÿBèH êãøóúEëµ·¸.ÐU´$Æ{“•$ÆSϒc!Ӗî'¯5ºø¡ìÛ>a­ +®Qôq +¡P*íqÔçpìâÞ)N{ +A™k3žïáD²…»¥ÈÜá­Òŝ< Ö +¼zì h$ÂßxkB´ek nø'Y܌ì` ¶æ·–5 °£Àžî€½± +X®0«µÇéñ¬É¥†ÍÜ`iÜp,*Ù³ÜւËbí n䏍¤ Ø^Hƒ2®Æ»Ä*‘1œs¿}XêÅךE)¯ƒ=ǟÉn]Z:úDPÅp'ïß5´ü,¸’…ª§ïßJÐ sç¢oýô|ý1Ên<.hbÈ/s¶›>)R$˒ §&ûÃu¹9JRòG)=<9™›gÞ~¯8EwÖ¢koÈ:k”Z~LX‰:|¨³HÐM™ª)³‘)²&p0͑+I–&pïß~¾w¢ËÒgr¾~µŒ+ùæ]À%+ús“&˜’¹/ôÌ£„JbPFl_À”ò@™ÅìÓ{ܚ`û£’”*.lnÅâÅÐ|[‡ä©¶3ÁÖPJA§-[S9¼«¤AõÑØ0‰O… ¸‡UÔ H|JÝ]eɨ< LÌp ¾ç¿J‰ên¢^îýò1 {,A½/ß¾ïó½ —myUÏ[Ð"ë—"¾…D^s/ʤL +Í4×Ìç²y&r°*¡°&qû®}ևŠMåbMä`첤W–ú]—KDgYUçîÝ|ƒ1tN»÷½wGªSägè´:’œHÝzS”?ž„ÑGA*Aë(§ËÀœÂt‰þ€‰Í…‚ˆQU’ÀdÑ/„Ù:«»Q_#¨•{#FOl"ÉÕ¹*ñ독a”¯_ùÊ+ìe0Kk¥T1âNi¨‰¹ÔnJ¥Óç“Ë’Îëµ¾!š=”Š ĄJƒ| +u—霡èáL 5,`#6V·®9OÿÀmŒ¢Ö¨*Ö<þž De°Ó£CU~Ëۅx’¶|,ÅKìaxD®7üDeG±ƒÕٓ—œÿ,¹W‰M¬Ãr8rQ„PQwèЂ¢££S‰O;÷ã\\ M*5^CF¨ÑųN“ö »ÕÜÄÜ\ÿâæôp½~I+2¨+ñ(S²–Bämè²Úó[ÜÝán3CÓÝî«ð»à—“ý!­ý]¯5 ™`Ýsf·ÌºÅ +ærÇÇ j2ÞÈÞ¥Á0í— 7„WN9‚0_¨kA0¢bšˆéÅÞȓ +Àû\ô¤oS}¹­ù„I†ÿXêo‚ÔI0ÌU-™‹/Ç~GDï…ë‰ÂõÄÜÿ? ×,Bۃ\‰ŠÑ_g¡Á`Àe¬téÍð÷¶Áw2¾z„äðq¤1àèœÖH=–ôÉ!ÂÚ$îT†j_ž¡ûfñÍAßÞ¡<0.!qjP´qç äZ2Ÿ#ɦ`¾N' †‰·Ç‰·Ç‰·Ç‰·Çü;|yÅÇ4fÞjm¾¶¸SST2–ú> kÄÜMMc\ ·[Ü ©¬k ¸š›,¾²¾1T—Ôûhkf£MŽÍm‘­ëËo.ðƒŽ\*€Ö…ptî m¬x×p1 äւ˵òDW2æ·¡.LÄ92ÞØÖø¤<»¢WD8²äÌ@×ñò*·Ò4´ +È3ZqéšÓ‰5¦$֘“ZbMi‰5¦$֘œ›öî­ûhî<֜±'^oì’uÖï™ +tfΚÝ1'Z®ô£„:”i­Ÿ$‡èK… ïɛ™—Û— +„5³å€½5µ&·þ…5ä8Oª^{Ršúü2 nC<]ìJ/«.†/fSe|"A*=É­¼×S[ 5µ´yl:¿øW̏`k{³Z ²XE«r tO.E«kŸ"Õµ +ìW×šÞøÖîåpíMkRëûù­›!pk +POø1ÐÓ¦†$Ö“XÖk˜«Î§E§AŠÅñøb.0tll/(1Lœ9~âX40øa}\ ÊMŽ, …ÕE®® …}Ä¶Ç ú´û.ՋŸötÖ ŒíEJºG#¸ÓöÉ,CÒá‹÷ï°Oÿ¿å/Zµ•þýþu‹ŽÂ›[RÅÄ8*IÞä”\Â`_F(|œÉ +F| ëþ¼õ»Íüå̦£Ç ¸T½þmEûY/3Pcø™5g1öY:lèðÂ{ +j-6uݧ»<ô§S·£á–Qq¡·íp5.͑ _oýïKñ²éÂÆû’¡àC~ÞS¼yÂáZÂ÷xÍôU^±*‡º¸UU9\.ì ÃIr¬±Â~…ÍŒ<&8 ÇQ€LÛp“ª.Zña±'\8¹ÔE~ýê]jp¸Fÿ“RÁJf«n>ÓÒêÆÜlLU4 ¿È)‚–$Öïß!Ñm˜ð$Õ£?áÉ«£é¿{síÉ¥8ÃxÉ¡ 0Úp¤ÐÀ}~⎨ÀFÄ8¢ôõØâ@ðxò@ñ;É{”#W»R¯}h²­"4#eýÙtnŸj¤`+ }ÝܙèFü9ÆmËÈ jXÎ<™wBüî¤Ã»H°BË;™e›bÌûÁa»á`93õ=|k›Øuø:Óeì4/¾ÞfíŠÛBª¶xUW|ÿ*Â<%.¿îfú®×ð¤½mMç»å>L Qc„ +0p“Åþ%U¿Äú'Ñ>‰ôO¢}ïr¬`¬3ê>]—˸¯]ü‰ 1j68“ïóú¤›¾¨U•þnÃïo5Þ7uøüïMâ\£ç3žÑ0‹ÖÈõCã\M ³ƒÁ_O¤4àfÈ»%zÑ=’¿»hžÉ_Ü´â××>wEž÷S¢þmŸ›Ùª +ðþ${Ýp_ðYHõ§GGFÃ,‘ïf^^_Nk_ôQîýÅ=mee3¾Jù|­§p¤wñy¸Ýn«)ï“3:‹)æ ژ¤­­òv½bÊGE×£ˆ£¢cWçŸÆøŽ…4.œ5košµpê…]ˆ­Åm;ºzÔà\síÇÈÃЀÍ~†…ÌÚë,¢qþ…]qäà²ÔƒW-M“t#u³äíæÈ¾xp„yæ‡Ó8OËݖ͜`fQÐrÛMÖ2N1›2À"ˆøQ—>J^]ãʺ·Ñ‘ˆP–µªªªÝovIeË£…Õ9Ί –›ÆZ æ•ï–‚˯˜¹é”a|2ög‡uhÜQ´lPnbN’ª’L»â&û¯¡Ø“_5ÕÓ6w9Šáý1ÆÙlÇ 2¯›'o6~i¾Ü}Ê#· +¾h;vñãÊpËU”„v¡ûø+A*—‹6È ­*Éíêí ·E͐Ê/CŒ…u>†\jø_j—Iž©ð›í’2g-äñd—‰Ñ…õ]À¢‡èཥe•fÒ®¬p %â•R~|=’±o¤ú·dœ[>W_?ϳ³­­Úí|ƒÝr+@…På}îWhŒÛè 2ët@´­‡E•2Ã&–.BlœÐÀ,.UxÀúxüÜtÿ] +®¦|çnÅ—Ñ Ö´~§5åd,áx2ÌÈpgýñʱuN-)O‘ás1ë¦NÝ+çgP61AèàÐæm ÍF-ã٩ݵWÀËéƒêé CK3ä®K»§õ²(³¼Œš6m¹´¿¥Yþ<$ÕÙôôÕ`óõg\Žœâ`wN,ºqHŒU2êíPË,¤¹¸qN»Å«´5ާŒn~A‡z):•ìŒ||Ýkjj²\zabLðÀ&†pCú•8±éÔEdüë)D’™rïU}C¶i–B ۔%…ÌÂ=LÛ6nF›®Šš’†„´àéxº†±ƒ ÷©Êòs3ùš5*Yoã½¾•7S¡Õ&êˆ`!/ɖª4ME{ ¡`UŠq£öœa‚t! ëÝ’Žþµ‡â:ÿZP|;Z/õuu5½„Y|¬+]ò¤2=ž;ãl3ôñ÷ñJ ŸsÜÌw6èJ޵Þ_YâL7Äõ~R´+²ôu”råæ]êÒj2iOù«b$Âè;|Äâß7Í5…$'殐06stpS‡çA™pù(³\éÕ U“ ¿ž{­ §UÌ]B—ØLɃ‹|õ/‡Þ•h=„Z—8&ûK.íô`Ëß·S3·S i…y×èk‘­%'RVVV@¬m)äg\3±éâ“üïhèé´³Z]/œ}}M{­?7DóhŒà·Ô.Îe/Fîc‚–_Õbn¨h†a8 ę®A&‘3B‡ìäæ!]C¿HÉ˺‡ù3¢…uñ +hWPR‡9©y¨7Z²ZF×nèèú6Ói´ÚŸ³ì™à$š‡ˆORLB˜óõÇ+àÝ~Áàw +ë³™ƒuÚ!ÁßÈû(pw÷_$p¼®Õâþê@Ï¦yEEEíׇˆ@yê—u +cϔ9cϖ9ëæAÁºíÅâàÝw“0n¾kù,%%bƒv=WµÙÖùvt[ÓÁã틺Á™¹™ƒu­™ƒuÝAÁºýÄ`“˜Ng÷`K[´­~r¥jn‚j͙ØÅC¹²¦îÉ Y&ÝwˆØ¯¿ºRÍ•uô¥¥ý×Ñ-<ˆ.»ÔºN–¶ùÖyŧ҅28ð¿¯$1ޘ1æÁ9^Å×ï'+غاN ]ò\ˆ>úiÂì]HuÏ¥]~úsŋ©iJßLoŠjñi$0 ¡„ÄǞ¶–]›¶›¯ªÆm¦ëë' ±u౞)ºúêÒøùZ`øI:}®Ö¶´µ±û qÖ&Gû)ɖ.¾Ò\u‹­¢\u‹¯àNbd}¬Ãv‡Ø¾Na–ªÈzÑVÖùՅ¿ç˜¿ù¦;‚AGã<¤9ô¡bÎW·À×Ý·Î3äb¥;®_§ï¾„”¬lÝcµ¸UNíæ;ïkù¯aêþ©ŽúŒ/ðLwþ×þ‰Žô.ÿLÇp47ð˜Þç ÿYŽàR9®KÿãÖ[= 1è]ò&;÷ ÌwCã…1Þ{ ƘïdÄÇ~k +™ŽòØTÌwÀax³ôš/ßPþÇòý÷·P|;_vQMG÷i*޹˙¹½C +ÉhžâßC šZ@]ãðeÅÆEÅÅÆÅÏ÷`´,nIüƒá|Cu–ÓÊ2e;»8¼M|\,,¶Ø² £VÛ¹›NO,&Ü·hьOÝ'+Ӛã÷Ù/Šçá•ÿt6ôŠ‹p™l.l˜l8áoçLǑåðMnùYL™KýÃtºm«›G6«7h7šüÙ±y¾´o$áÖÚétºä‡s“iPo­;~ß±6YƍüÐÈ8¦qQ±m ” 2ŒLÀöü#gbùÚmzn‰ÁOò¢(åӒúm,ë3²æÝ0cÍhÝþ[¸;/NiÉw‹3ø€È möïng1áÀ8ã>|܊‹‹hѾÌþñoÂh”ÜõðNË3Œ>Úd6t››ž´›› ]Ú]«6@öèŸðps2*¨]+b˳C,ïȳæÊ 0ýLÅ&OòÃQTh·D‚%¶âËC OnOlÛ÷®‘ÄçrqÁ•¬ÕY÷ZŽÇ„þKXˆVô2º^®†úRRsP {´n¥ß5Àԛ<Ü7µ[­ŠÓ³ºlYõpµZ­T`´h5EÙ˃ïbÍòlƒ rü¦(ÙÖ-¥’$Փ…S%×ÐVÿQ6骑“nd;à:؇.Mc“D^S?%¨´‹‹´6kڄQncyRÐî´dsF€ìÑQbë:«H˜ {¹<‚[­ûEۆ¿JòÂí&“NÝ­u G?:[«ŽŒÙ¶Î+O á»®‹±½ ¢{„gŒµvâÌ蝀Ä|Ò¤¶7rœòxˆ‹„9ââⓩjÑ/åìOZó”åñþ«w<÷ l¦S(w¯Ôj8M;Ö~Uɜܡ,=Ò|,Ÿ®G{{G—„Ea¡nßim·٫X†˜³u 4!Íŀ´a ²6âÜÝx-HÔã‘ÈÖ¶cnG+± i­Á=nh1·¢d¬¶Î3•€K Ó¼ÒWÎ&áΞw[cçm±õékTª[;ºYtîºÃ ß¿ÿûï³7Píîòù׿'y<ïÁ?Gz ï@}菽õ;·¾öÖ4Û¾úâ|õ  °N¡.—º\:iØ0gTlߎoþ?s-ä6܁Ëz°ǵۅ8…+ r¯Ššiô@‚ËáÔMk X©l¹S°Î<Ì͓DÌN£2å9ô䞕¼;xpíì«áW£µ.K—cü–âwXn×üA+Z¢çՋž¿Ó…pÌB¦[QãÒV>‚8š3øáÏÛ|MåÞÆ$K…ùw —à#-70¨z[Åòöƒ‹umÃ9-Ðâ4úY‡ý&¤>(1—‰mg%HQ3èz>³Û({8‘6]"‡üÚÅEZ°€t‡\8ì0ëgl ²÷êCÃ4ŽMnÆ6áëD[a $ +¥o±.ƒçQ¨«~dcžqÖ ×B`¦‡C¾FÜözöÕ`µ{Íîœc;¹eœAFZ4Q£MðgAœ%ªˆV÷Gƒ^/Y†ò­‘õmãmç¨lÐQ5Tœ\2×Vã‹ÚÌ&hOeœY½/˜^¶Qö>–sO-†ËaƉ°’Âofÿ·w Àìá’‰Ø _éä•;ŒQˆ‡Áòø14æ{"ùÛs/¾Jç¡ÆX8Pâ-²;X{N\¦œ”Ó±³¶c_¯Ø{çËàŽep¨Ð/–¾Â–øAÝK,äKkke€¸2zgt>Ó¡¢E¦(‹EUGË”Œryóç'm ìnԘ¬HpyuLß%Ç߇'˜,5Šgt0ä-;£Àˊt(QDDüag,¢¨¦v«ºR¨”fQµÙ"5‡ñ†Ü&îÏÝ+oúÚAøÅÈî‹Á—ÐÜù%ýFT3¨É"Vc¼£X´`>P‹èzߌ‹ÿjD q×UjæfÿŒ}„ :kÄV±Ý˜sNïíu+$V2õÝ&Êÿ\ÌϦœöÕµYœÝ\ _Gcÿ^}ÃÝLK¤Ï¾<îD aê1A›>ōn£Hö“[¨a†°7È>rŸC´JL4޾¾¿øÝ^÷ú<˜³#ûž%ÿA„X¦:¬wÅé±ßôë6®ÿå[©Á«}ن®ºº¾¾Ê§ÒI$,ãÎ2 À}øSizfñúéØàÀZaZ 4:îNTéìù‡¿±Ñ/.^.- + ¾ÎÖL€€‰20ÿ'[¥>W»Kݐ +âÜÚT³L=º3 +~Ì(FL +]ù|Âå„ül ö{HÇ%«»ÉŒ˜Âœt¥êÜ\…×; {ùŠv¶ÑU‘¹™J _Ê1®Â1;]™Pé5,ƒö£@³Ž Ãǒw¢÷C°ù]`§AŒDj©Ó·à|䔁K¬…K­ß +Bf8ÎRÀL&ý.øá÷(îòþúCé'„p›ƒž 0=JUôQ¦yÊ­;†¤b9Œn“ÅïØa’Œ|ö°#:W]7òòж°d_Ùö͌Ît ç˜(מsd%u™=ÃeâA v‚À½bxý€9 |+š½Â×9— ÜGÕ~ބPA܌‡LÆ?&<Ž×Ê2Kø¡FXµÄe¹ËF/Ï}”ÈÿZæegT¤è±çN–4CTèðEB,ÊûŸ:±hŒºPU²‡QÔ]7œ*…=-]?Ú÷È0Sµ©Q +‚ %h1ö@‰4ñÁéݚ¡Ô…ÔYåv»$a¦´º¶\_œº×1» ½ …•›‚¥À—x,5@ìû©4_BQU½‚£< ¹¸ÊÑ}ç0̺!—?ó{m=†¯ôš{ð¼’øÚŠb(£Ê7³m¶ø¾q p!Ç(PÃ~)§ðߕ|pŠ@SîËõIêZf Lñ~<¹¾K—¾6[ÞÈDTÔN¯8nd¸ø•¡`CùïQ$‡jê´r'£üŽùÄ%ò¼„%þÒAøF²Hâ^úÍf>ܒ÷Cޗ"ô +ÚóbvݤÏ5Xq-‡^¤ï‚é +‹GÒðÍ ¿¤Pw²^Ò%¯sp¹šÛgy—Kõçð&œï€ráºL$·P°‹†{ þw.\u` :Eø„’$ñÕ±h~ÓVÓP$‹€„Ü®Ç9Ua},¹ÆÌ‚ŽQ‘í~Yàì²Î>9Bk>ƒNŠS*ÄKôœC‹ïà‡œ6ù†Q;h ÅÙ¦ÊØû•jðHJ2¦f£+tŠ¿ Ï¾4jÔĽyTMäÔ«ß¾‰. ­›˜ÏúQuÇÉnÆü¦ÕUz¦¬Km 8G*7Z”(>äQ*w@—÷EL eý‚¨¡Ô]UpÕzC~?1\È\qòÄþ‘&õÉ©!dpJ†0£Á$YEN¸ǨÒ( @òHVþ˜%‡üwÞ¯g²¯®éVfÀ%ãÏé+ªÃžïùÕ;Ë2%¾šnÒ@Â}ð¥”2õ£¬ 4ÿS›è=K‚ÕÏ="Gm6”8Š« .€™Ã ¤Å½U±(Q˜þ‚v¢,úÚ]ÝÞݗ«lÏdù»” €ÎŸ»þêW>rXbäz¥‡#y#ѯqD0JE>ºë =w*Ë8qEt¬”wóTN¿t~I +0pÊ/ûÿGLÞ6RŠâ§¿@¾/â ƒ¬=ä Tí|—éR‰êáàÇO´&RT«þú]2˵ŒØ™'ŠŸh¢ºŽË6-9P<§•Z*Žýø;䞙Þ‚øø»Mƒÿ®P•ªÏKtKŒ[»ÄÇЗ‰€èŸƒ6oƒ5 àíÁ/ç©u§ºÑéç„#±&…–Äk‹Xþ£ à!ᇵ>dhú!è‡fº¤ÿA/Ç÷²gHÍLK!hŒ¹Éh¥¼~U¤ð½67‡ÑЯš¥'ŒúalòpJ{މ¥æú¼Ð>2Û¹"/°?§üèr-9 ÀÌMÆ«A>әìy({+Ué#¶Ó§ÁŸ‡/õ>I‚Bf +ªê¯¸"[E iÇ¥Â¢ãØøë,¬ñ6!íWúÆ Åþº_J”vÅ\8YT#…üha“ƒîõýÀ6¸\"eê5ەŒwoÆëVF㒎 A¶!^ +!=J`-÷z,¤ýN¤™µ(Lmž”™¾1Q9àlDº)Yá)¦¿'t“u¹“²K~gÌ!µ]e®JwW' 6‹ô!÷—ëì¤`·þÎ6¤•Ü»‚öÝJƖþå2¥™Rä|Î>ïÆݬ\mµmVÊoAá€WXÙ- ‹éIQ:„·‰ܚhûƒƒ«2ðÄÎ.³[òK|>zIaWax6®&n'ÐÄó8ô¬Ï%¿â +uÙZÄÖ̤Œ~0“<àB¾ ô +3ý{Ã1†¥¯¿AHä~éu𝰿iè{²ÏÀVÕØz¯}}J5m”³ÅÒýYՖ@;ðƒÚ¿QSG§å'œž¥´EÎÀ’«1µ†F¥œdíÃÙ.Øå±rT=F/ƒÇÔèѧŽT›Cȟ?·>k¯©Èʹ¶Ä돌YA%Ï&AÓ–eC“)낢V–úyoht?p!žM&QJ"ÜfFŽ™›ˆCÿTG^{^N…tԑöJ»ö†B‡š‘“23¹eÏl£ÙàÕé* Ûsc‡‘p0?âO“|>.Çošö@0Ö uÕ{#ç¬úŝKž”}Ñ­ ʁEÃ'‰Y¯úÅäj#gâñyE+XHçÌ)bÑ­Sÿ àà=¿Iµ‡ҕfÖ?Å=®´”N4ø4™4ì5Ýx¼.«©nÓÂKvÞż+±çÐT©l¦ÃmJ,ŽU›ó~ˆzÜÔµ·Àퟲí06Í5<ÆlÍ B ÿïDá3‘Mvø*Ý9؟³³“ålû— +:1n)Ձ¯Ïí@~ ©R¯Kד¸èHO-¦æ>\ÆÇçÃm»Ü&ï[»Â=±¯i™D¥I v–§=Uçélô:ÏP£Xs5È`¿22ØM:{ ÷áEùÃØÃì ¹ÈŠ(ÈüÅ¢zÀçb°ùðõ}|Ù ¾Âç{ |…×Yuêͽüòø»Ö$´œðrí†.Gœú„Ó`ºÆA~PFÿ^ÐcÛT 5-Ñ}:ŽÃ:Øo÷6ç3qCx%}W¥i_DõÃ߈ÍUndMƇgTòpU¥œb(Rß±=͌/fÅs«ÚüÜ9ÒÃ.^‚@Øaä^áGÃïô +’q¢«Ï&Y¯x%GË·ó6ðÞ1 ÓXô—†k¾zX†èbþ !Žÿæ5 «Ñ3ú-_¬SbÏv£Gì*bQ ñÙË÷¡l­º²²²ÝJìÃò²»ëa¡áb€Ã-GV*÷Ü©5?ù VÖ$KUßb_.…`J¤‚UÖòÃÌŸãBá8q-£önAD p•@;‡=Bù{ÏÑùþ~¦2çàËmÍ¿ĘÛÌqq´û,ã´7^è¤Qa(¿â½Ñ¨¢šÃUGJ/NÑ(؟…›ÃÅÓfVÌ墰ÄTEö~ +ßÞD¤³|µìUèÑÕs“¼~ešUœZ±•ÂL˜†¶æˆ_\ş½×§>¹55ßêÝÇ")’Œ¼pþ`{’Ÿ—ëRïe`ʖ×j-Œ;@¿Xk,«óClÁñeD=LuLѳ÷Rl¨ŸîD9ÂuœõÿPga’ÑKB‚•é@—à*¬¹?‹úF ð'óQqÅþê.>{€áêK6›K—xЃ¾ËrÖà …ü™k`wÝÿwlT덝Âú}dî 3Iô4Tòzƒ/Nõ[E¦œ¦ ‹j¾³¹âi´ŒF¸b8qäUB³j=<ÀklÑ»Û7 ±‘£tû39¡žÒåžŇ=ɒæÁñªÁßÕ£gý?zBYY« [[À8&d²éäû,ü +»É¨¾_agm¶‚zDZ¡pÕ./šcøws> í¥æÇ½Ú3zg?uJF &¦,ÔkÅ<9y% xU˜@eW”$ˆ÷ +u8Zœ„\zÕ<ý*†ylÿ°·MùŠ¿<1T=©tJVlá2:©§ +՜'°nuÉë]Ÿ$&ô›Ê_T_Û߃Tùå7'vBÜÔÐ.<ÂÓ<®a’E +¿É‡N{rT’¤òI;1YÐ1Y°Äö˜#„ªÉ$а䞑¯…KÃP”¾ð¾ôÚ_\\‡ŸñÏÓ×täÍïtºW:m_sÁßÑàÎ'FZ¥^×öϖõ%Â]y~¶øí‹Ó9Q`>Ž*o†hF‹t"½fÒÑûΧØó©ÿ®±J÷L”#Gô¾ôÝ¢d±„ŽkÙ9O´BB'SKÀIó:Z_¢©[ÐÛóûý ÀcxPòoñ¢O‰%BGc¹ôÌ® ¶Øõ%—6ÂÿoöÍ»Uµº3nÿp(Îñ!B–Q ³Ï򨃿¹}Z/ŠÌZ +_¢}Q‚^J¡WˆÐùJãÇ``§Ö|̇4ÂH;" J0ƒ{ +@ŠõZ† mäš*zU!DÑDaª*CYþó3ka-”Nχª.:–áÆ¿ßYÁ FŠDv^¬(ÿã9óëý¨kl]&ù»Y£@­óÿÏȏK`ýÑKô§Ô¬t=ÅWè˜9$­ò¾ÿÙRe,ßH.šfÑÈåùA–ï*ö5L`hüú±-²Ý ¯è>/¥H„—5‰ øš¨î—²SOʝоî0çÒ"Ý |†IJ8ÎK 3ïÈc9,2¾ü‚ê-«Àýˆ—‰¯FÁ(½EgF©ÉÚ ÈåøÏ­­‹¨GX8ÑՖV~sï|he(°ažBÕ³’ƒL[[&ø&{ßÏL¨#©Óêc—©³Ag£°òÙ\Ž-%x芟Ȃ5xUe"5|{b5}hŸ^}Z™zä‘Cµ›‘üòÃ:L¦f^¶FV$X^¯Up×îÒ5&ò«<ãóÍh ó±¼ÎÌßo¸øØ¸¸¾.*(V¦àâ¨ýXv¼6ö“'Lnî_–Ólž&X>šjnÓåÆÌRM9ð¡T*ý2㒤žwfPÔIRAÑç鄧u¤·QXóò$°_£ÈehE|ä´$ÇŽÝæøÄ·Ä/kžÙU¥¹æ sW¸¬µÖà)vDÅÍ×ø1‡qßê—Váxs{Nóo²o¾™-®ÖP‚g£‘ÂUOùƒ—3i£i„¿Œz½8Ðì«ì¡÷^̂§üR®XëÄÞý" AV’Âu΄½óRфŽå'þLƒÍúø²_Ý]g>5WÙ C‡™°áÚPþ-˜S?Ĉ¿ÉúG¢N¸=3û]¾YUökr垘˜Ÿµ´D€ð™s`¢¯Ó‚ºDNB¦Òæ|£Lߌ“~0¤`Ìã?‹÷¦' ÈYѐmcUö΄¸!¥³zÓX-6ÜÈKLºaÌy9óç{£„põ|–ê¬Ô ÷¡&nM•|úî¯Uì ` ª2*ÃÌ­åjÐjfÐñQIP¥n¢8e(FdCOÇ~®Á «çÊfW?__^šaé5@FgQMæWÜv.¹'`ü½®úÍ¿ÌÐê{ªuԜ:?–$Hž°tÑ vƒí"œ™Ÿ6QU \@ÖnÌ/õÔ[˜®cQs˜·Æ¥µç2`­aým¨ÑóÕÐ[E‘ìCµU[í*)~ÀîˁSWQú‚֝ÂÚúv«¶é&à_b¦€Ï#ЂŽMú?Þï…Ã5¯w¶VU +)ïÚ¼ +‹ O!†¾hÅ#•+T£Ö™ÏüU¦gw³ÐêU‘§Ezud|éz!ðôÜàÍ«y!9 *r[ñŸ¥y¨1†Ĥ¡‹†klúg쎗‚G@I#éx¤p¤‹HÒÿ´%f%å¸RҙqéҋIg“S(&õ!ñøØc \e'Ri´ ғ†RiÒÿn;!‹Úãqþ…>7ìq¸ÞÖôÑ ŠEjR2…höÿÕá>ò×S|RºgÅDWA +j'FŒÃ¬ß¼ÄAwîÿ ¯[âW¥ó5E»É”ðÅVðϳE4T„·‰bŸô³¶O§Jpùzn& ·õÅ-ø}YpËRÐ[µŒ:`@iýВÞù•ëPLUµ=fÆn[ëp†Pd8Ñ·]çM¦ëôì¦ÿ0tÄu*,û.|À-Ôôíê䞕†¸ï!+MÊORÌqìžG”c»ïVã­…piõm—”¤éLۙmÌNͶãé'®n-ÉKåþÝ¢±¥ÔÐ¥"æöó^?·y¯Ÿ!3ׇôícïßõRo!:;%=žgÒ±gü³IOæÍê^ký/EŠ‹Í}´ßÿÞkξÿÕæ¼é¿ü¼×foÿ¯5ó&ó>ûÿšëM>Öߛý÷šìŸ³³7ÿ7šÿûñ^kȾöï5ÿ‡6ó_C|ýæ¾~ùûÍ{[ïÉy¯µÜîó_òó/gÜý€…6°À )ô>ôÇ´ +FØ] Túz5ôv>$ûqˆÜ&Àý¬[ï""ÐQgãêº|73¥Æ#áû^­.jØI©i[ÅÍñ¬5è÷#~n²ȟÐ88œòJ·Š Æ£;Ìe©ôõeI„ ßÌ#ñâÿžùV‡l­€ù@ñؕªëŸñr"¡±.¯H¸5Ð`:uÉÖ´52«+A:hö·v"È͈?éc[ çcÕí}K7ÿëœrªá”$ËãÊë ËpFBêꝏæíg½n›÷í¶õlSÕ3_›µöPa™ä˜# þéìþˆÿk×ÿo‹…îÀÇ[5όWòv² Òuv®J_‹‡ܞšuþ^Ö}«“9iã°Âñ£,‰6jE°ž´¦óv»×ðÌðÏꪦm­ôë¿éà:8 ÀÌϘ +0üœt$™áÉ+@þÁTꊏ8çUƒ²vƒø|·>ÕßѨ4PÁ†…É®vqˆèt¦>Õß5ˆö·òÝSÅÒQà6õvIµv»6Ϝ#k!ÿ/kÜŸ‡Ày:Ü<œJϙ_Ü@÷?“÷õlÛ¿ïâÿ"¶—ônL ðÿ‚úã%b•`¢«Eo»«éÛT˜ˆké ¡Ä Y¶wޏkþ. …ÁÞbt’Íooó[>T©SåVÐDÞ«/ùú´ðž8©êӟ—Š›Æ©wrsõâüá‹_=5$¥aJAi2Bòö…•¦ æ#gՃùñ¼ß[­ò1ôÅøzÝeUÇôy!2ËmŽÑéŸÛ ¬p¥ÝÝ߉*VêîîóeGª~¸½Ôè­ã™ê;³êÝ}}}‘® +G)ÜAphQc)â6^UÁ€ê;›LžŠ.1ZzW”GŠ dÜ΍ѳš•ÒMk¬“[<ô(Ú4æÒñª=®có7“­°Hk~Ì4w ÜFìS@~aÃ=Œ¯ÎÃeϒ9ݰŸËÛ1im–ÿk…éßßúÃÓÓż?@’'ª¼©á_œ¥¥3jÜ,X‘"ccð‰‹œDá0Û7ÉIZ\*‰© ¯GSPe}³ÀËþAÿ黵â'†ÕªYEûÑOWø4;„u\vVÑÕ¶Ó Øt³m´ÆÛPŒ­Z]Q5µà–bêúŒ”¤Æ“]Õøíl´ðlCp´Ç~C=[à¿ÇÃÔÿBø3ª˜ø¼ðkîHÏå= AüXÅèø÷Ã?Þ¸*X“59½lˆ Y¶h›%]³=uZu:-Õ҃Ïú﯑]°:ÿ‹„»á_:»ãâìÍ&Ôð¹à2@‹ªoÑ‡ÊÚùp tF³£°‡b·”8&vAn¯„}¼Ž‚s¥üJh¿— ŠÞI ¹$ÛÃ_â¾/ÀeêÕ«Ôû†Û UlÃjtöJú0?¾#ò¿-¨™ÜŠ[1l ú1`N0žèÌˆJ®Œeø…mÒÍ2WuÕZ¯`Y¹Ñl!V¹¿ø“q4 mxw jcëZ1ÿ·s ׉…Ìeœšµøæ¢¯ŸIH–þê-G`…y‚zé<îä¥g=œëëìm:òb’cêAVF{&ØÏ2jì˜7è¢?vÅqÙÇW:ì?rU‰¶í&ðbÚÀhُTÙ.¡Ò”µ8ÜÞ/;Î_œºë™– Íù¤äÍþýjm6=XÒ4õ6=XÔ>¡õ!ý¿éižA)Ü-íFãx½£e½/‚Q®ÞS‚Ê%2“t–è˜[î÷{$Rý…+ËM=IK´GÝý|¶?ߏSuw»N}¡àÛ3‰E¹ øî;•”ŠFâ^R8ÒLÁ@NfÊ­¤gy½8xQîÿ ¶°vd^;E¬o Í>|͖Öl¯1ÈèY…«%*ÖaŽŒÓ3[³Ÿ'bÕÊ|Íq ‡ DΝú‚Ëz +º_¯ìù?ØÀ4íª1~Š4£gߢè:áâø­^ÛeÜµÉ ÅY¾Yö«#¢;w”çòø’T,4ô,3J6hÜ[@ ¡ã˜aA¯‹Šw€ƒbI“³ÖøÛ}'WžÒe±¦ÓÖw‘,-ÅùèØ’DåþÕ”/w=ºÞv욌|ŒB5ÓŽFG¢·¹wŸS¥S2þE›‹qù)"áuH« ‹ŠgCŒ*¡ŸPìËÞÇØÙøIAqnUÃc”˜Z¹¾³~†ŒÚâ_:óbÝæîñöCÍN ÇãÂ;p}𯝼ô­íÒ¨; ø¿˜ê¹™„xX÷v­ñ¹*BN{MveúÑÛ(©ƒ`<š×Æø9¶+|ð²†o½¡œðZ¼Pt&a0›òãDfR7µhú¬¦Oè¬ñ¯WV«k>øè¯È…g!ã×ãƒIÔÖUâ”Ï×ãù¹ê§Ä‰R$K‰AokPû&Ì*ÿ|˯ä]¦ îݨÆäø¼æ=!¶vee⠖Æ×܌ëçD_²]Xz¶þ[î߅á:üVZ­¯¸ÚüI^ámK ÊñÏ’ƒÇµ÷œäî³ó@'ðns¹‘•r´n˜Ü/üãôEq"™Àw†ÊÍúWaKèPžÅ1O¬ßÔîŽþ—#‰‘Äbåm6˜ì¹º¡‡UÖXÎ"Ƭ?åÕØW ¼çøØ[+½ÕÝG˜ìÒý öú'Õ¿øà˜ùûi³)[‹.qNJô] +z°}ø<;‰~G³qy͸âñøë¢§¹†¿rn·dé21¨KÂܬ΂ ÛÎCî•P}\Á¹È5§xÎD-﵍§wُ^ÄÓkً“³Ë±0“l {1boÉ6 iÆ`ÛPÛa²&4ÒÆšdЃHQ¡Å61sK$$Æa 0’H@ "dDvJ›!<=Ÿÿ÷ÿ½ìI6]ÞMÙ¼—wyË»oGnö¯B÷//btïBó—ðþþZ{»½®ÖFÛÑÑ~}I4 +fºOÁ@ùö¨ˆ6>‹êâj۪à¥î§$bsí|†øLeF•ÕÒ]ù®ßZ@VtFk^"\²7t\¶¯^*;¯_u™«*ǹoÏFžQ­ÉUüúºÜê“ýšñjàÇdUh»¤k,eä(뢦ˆkEQ©¤Ð~-À-Ð3Ä¥¶Lü6 +6ã _ðÿÑ-~e”è,Ÿ­€¬Àʓ¥[NoGƒ#q"û‹!bÊʟd%9w퐫\,ÏÒ¯ŽB­ÏæXßi80SÒdùêëÁOoff¿“‚žÇb'ç嚽¦±¦ 0«6­µÈ‹%„.)ï蝴ŠM67Å?k›¢LX£]ZëÃ*3åÂÌùw‹+q#q´Üm÷B®;ž3Ün3Þ3ž3œd +Î\åÒ~þóáe5Ñ¢¸æñÅþ°6sj¾ö˜‹ ekÚd#Xƒ> ÒBÁ$OõÀÇ+N +õé:ÌZ&Ê|ç3 è»G–÷_ǹV €Ù™>ú ÚúË[Ší’Á³£ŠvêØ‘W·ñ¯µþ…îΖó€%­¼`AÁ…ÊgÝÓ~ç¶B¨ôÕÒU^%¶)d9 ÷ÜzJ+ +ëñý_!ÿãxԍŽ”éKqiØ! _ÓͬE‚÷ç; +*“`íðMн5¢i옫£2¥üH;Æ#‚SÒhBŸÊvBc¦Yt¹º†ÓŒޫÂM˜,I˜ž-ÿbº°îäŽBár»ºÔR:Ióxj«£²fˆèkOEJ ‡‚ùõæ¶fjË¡'É7ӏ¿Fc±–Äαèç3œüísY5Ã%€yÔxeFÁÆ×IGï½£­¥ x±ž<闦³ö˜´°cž³i§> +Ú´ Öl„hH¿¦{¬é8ô«h,¾‰¼•ü«–â™sIԱķ¦óYoQ ¤ŒsÙ²±‘Ë›àG,¾¾¸¸hfþòÀx°Z4o8l”1Ö.šµûøŽ ú§LuÅÒ .vÈ)îKøgÞ?øÝŽ $ž¡€¦h‘­í·\ñZ+Üé'Îb{£n£ÅHiâÌ^蘽Β—Ö ©¡°¾5¢Ðt— ¾ŽË™PI[I/.Ðn/“I +¿ñ×WØkÉ⟅€Êuø>Jj`îY†Û*•±œË»»¼c’$ee±–‡­™ƒ#’aè+*ˆ${3×ÞÛ1À‚§@j`4 ÿ·Þ¤…%ÆEIqCÞkG+ïÆÄ˜1.[ÿ’!«ÛÂ7Å´ÿÚywå&6Ê*kvwÖÐÙð°wÓbWæ[‡”𶈌ª&ª“ °>ï²<Ê)Ö£ç¥Ñß__–üa&P‚RÜXDìÿV!x@2¼D ´ù´…> ñRp({2û½/nK¼»>Å(q +“-²nÁ…^&QNè7óY„šdݺE3DÄö#Úñu±|oÆñ»>ÍS胶öìû–t¨Øx¯é9å *ü•÷ˆ#?ÇwÛIŠ©p =`E¿8ãù +¨çۃì€}×x$rV£ù^>lW»N_µÚ¯ösˆü+jú£³$Afòà9Í- Î9Bֆ²m9ž¬Ï©W’—!̗‹«¨òo•íだE¤ˆñb…Ù zúk//»I¶ ®V™Žð«^ *ðáÐ(÷=aá)·€ò»L+9+ñÒBS¤8s Ş9* q÷´Ân’¨rêx×ÉF¥ˆÓ1ÆI«:›Ö\­|@KŠ…{¢ÉP£t҅"i£vþþxØjâÕ"Щ—°bqŽ›pHˆIoDæù¯Ù&£s€ô`C+yò ë黉HA=%!ËÛ¯iØÿ„®kÊð¾û¯# õ«ÂÉÂðö¦*½Ì¨òòÝùnÝE(Ÿ¿¯»mQ¨|¶p´šòÞZ.ü?`PcCúlºè*¹>é:‘¡ÚjPSWß=xð+–“K…eý«¡’_Tzð<͇“üçÚsVŒçÜ š +±’Üý߃ “X~¥Æ=EÜù*à}À`’@Áߺ¹m-=-¢êå8ÓëT¬õêǕÔ€Ý8.×ÔHÉ&ñA›¯ՙ+îÍSˆÄJíÒ4¾ã¯9IçŽÝ Ñ @5(®I¢ޒ“객4Å-á3Œé“ÕQ¿æÀŒ>T¨nñ²Qà8ýÌí§ý ö¼“±|¹¦Š{Çf9ÆAf,tï%´¶uuuÕuUU_ꮅ +[·NHTYD02…”~vRC÷¡­ò‰ vQÿäù¢J>Ûéhàäó—N«p«˜µ˜qšk¼°9™»p*&•°Mœ0"ºÕýÿiP˜Yè}‡"Õ5NYg ´íö;z¹uv潚†\ +6ċtq# +ÿ¤½}pў}î3Þeîz¿¿zô›OV”¯Q)y9Í?Ï'ÌÇ\;·¤…¸[Á­«­…¥„t=üD°ùÓ²!·î‰ÖI´îVø‘Å^É´´™‡xÉéhÿDH¼”âÓ(v{>ư‹ƒ€g£:6÷¶ç&-ÁÊPTõ0ɾu%¶5ðâɋv²Þr•ˆî˱'{iŒY²6O¨˜%º@p¹|“Y󻿆¢úU}õ(שYe³åT5ÎÃñdx·шßQ¹ã- ,"°"¯bÙí·XìˆuF³pŸã)H»óW֝¢Lr‚½g-²ZZ„ù ¨UQpv/´h•ܨ×1¦WY}8WYÐÐï-ìd g›ÍFxϱRÃJLÁ ìÎ\ϒR´a1S;”ÅLR?J*‡îףƜŸ[´úÐU~ª¤({(g·å½1Í;‰÷@A(bm³óèñ~n+Ïaʔ°$Ö|¡Êx ! ‹=ÔDS\@åËtë±2&G°{ë œz%{ $ÁW:±Äj¿$¨`Rgâ +ܸôÊõ +Ô'D­dãE^­´(ۜ¡Ø.?¤¬ü§!i´{¾?{ÛÞ¨ý²Ñ{@ í;dù¾DkK¼~G7åYo:HÉ£ÒÉqö‚ î¢µL½RÕE9Þ.…g^H_Ñ1AØVÇÒ#óÇKz²Ç>$(ÕHÒܬiÏå»ÍNÅ þ¦’ï¦ë "^ÍÁ¾F¸´¸¹ðFè®7j ºà(´9‹‡ ÜÏJ[‹z맅bjÙz ñ±4‰áüÛ¡²ášvòŸ¬=BXü‹+M‚¾úèš×'\íƒ6Q£Nçb1YvZX- ¤ñãÙo´: +êÿ™{>÷÷î@½¸)òî¢9™ò4>¨ÓÅK ÝWÏ“¼`ù9ò>Fäþ°¼¶r^ën­áÈU-§`ýÅÆºËµ0Õ£(Ïô”ÄÏà„4‰ûpõÂzjj}5Ó¼Õ+IÅ£*uî™RT¥vÛ¶ï[^ K,ö}m4z +k爿œ¶±{:<Çzôaaõ²“䎸†‡ŸJ§Ð=äPPô¾ §Öp~eFdÉ(oó%Öü‘G¸ÍÍí5™´¨ y潘äÊß>ûŽ“ù¹Ó9jðtµ‚ W‚S[*dÝùBè} K„¾[ë +RÈe +LÒòáV÷ڞ’ZK>:2­»K¦Æûb h|ưŒH¹¨Ym³v„•?ƒYšÃbªµz*ߢóõ¸µß ÊíMÓµÃåœ[‹¬þ`nÝÍ»ˆt­q0yIDŽ£½×Ly4xX^9ê.šæI$?ØEiRaM¤—)„XÑA±ÝêÔzì-¹ê’l›:íÛÕâ‰Tú(5Ce+aS¯k!6\ðÅxݦ +ZDðòÊã”xÙ<9 (bí1E’×jŝÇoÆÂÂÆµŠÖ;äÚÀ¸ö}ô݉XÌíÞ1·IyååKÅ÷ 9 ‹%[ì/»[#ô1.oê*tK8>ôõ`IzÎ÷´ý)bÆEÀzÎÔ÷›¼kúZ\³½ª6ç´8îì©OÖx¸¼P?ý› e(ñìž¾èêRW¼d>$Z6ÄåäÏ, "!( Õք-ĶÖtԞsÊ)Ÿ¯¾5ËU¦Ÿ†à4ë;dÏF‹¾úR$x8w$†Î(qŸ°*/§ˆÅû–Jí9äž@š PJb$Ó<Û¢~ÿY}8Ú ˆojÊ+ÆùEûšáÒêÉ9i øÚªÉ{H ¶çâ>ÁÔ{žÔx‚0ñÇ]‹^"괼Ėtþ…êÅÛíûÿo·ÛñvèoàÕd¡úF—ðâE¥²rM*½2‹’Íy®ÝÁÕè%GLWW)äªÊu$Œ¦ •k‘¨ ?Ñî‰ÜI`º™6ØÇ…uã5¾0h»¤›©n“¨zë5¬Êæ‰;]ÍÆøsFúrÐ.@éCbÝԔ¸/Ð[£`ö¢“z®+H%tÂxýü+®+ò1~ý£îhh "ð¾À}eïÈðvüS}wò$|²»¢Å7ԖèÐ8“@—&îìÿWx׎[¥é·jk€Ú/žØª²%N¢Ó)ˆÙ¤¤X¶Ò3n(¶|±³ 8XX_ɾڀN +<«™JHdtâÒí{‘›‡†)º(w5tn\­Í“Q¢RMý÷†)N¤ûx¢÷*/ÏïGîš9©©äóÜAµ?ê<â‘Þ|g”*gÁ‹”@n'‹ gJ‰{däv¸ ‰ð>¤‰H®v›Oµjèp[üÇkÓËþßÛÒJ Íùöé˨¨Té-z?WðWú¼Íü¥Y#͸\ÍSêèÁ¯Ÿ :fe|H—-#ÃéDPúÐ#œWWz]×ܹ¹òRµ¹ƒºRœ^[¸$rðn‹ƒ--òËòŒu6c¯Jrgࢠ?O–òÛOCç.g LöÌÛõ¤Ñç3ÚÝÎuWû“¢Ñ‰OX˜/¢3€Õý8ŬöyíÆµl²”€¿g$àö7T ˆ5KfzîÔõ:ñ¡¿$ŸŽ67[d¦mû¡C·2ãËÚì°%•Žú5WxjÉcùÂ{`QªVÆz´5žÏ­dN=´™9—,¹h5ø^æ«Ikç].¯¼krw“!`8Xæqø¯>4=]¹6+Ž)̤I˜:R^Ðñ§·«ízâK¤Ôß *wÜé·F"§޽ׄNâ¸P«jêëaB$¹)±ˆšx`âNg?9奞‹ƺ +—7K]¶%ÆøàS1Õ´ÐÃK©gòn»üú=åß«ôH©ìhÒhp÷TC”ø˜úKÐĉ¡ÿ§ã—“Ù‹`>ªîÔC}Õ¡®áìÍq~l€4—¦ u¿¤ÌæuÈd +|F$¦¤€nj•/ü3ž?Nǎ%‹qݏÀ‡ë¦[%—¸A«­À£V – œgã[þ&ï±îΉÉrçh}Ôäåö¸‰Ÿª$Ð5«Pþ(!³üÍu+ŽîÉYµï´ìMiËäô‚—þÃIÿ*ÄHîã©füf`Xo1ä`\ºÄ¾Üܧ!Õ~é'ã(­ðk·Á!uÕzõ¿ƒ•œ?²jàïf>Ú@2\rˆàçw#3}·ŒoÛô!‡³o +IDôI§;ºWìíÿe‚Ÿ +[nVp¼2Jò¦$¸ ‹À‡ÖRv£€L©óî2w]à¥ÑsC{–u;ÎϟœÎVz5ŒEh” N}}à¬!LÒxrîШt‚¯`ÄêY.²eõ‡;v¸›z]xHM¶æðã\²FQF \§n-êöÙ££„–ù¼¦´Jc£„ç’Ú…™ôjü +ÑÁéxaC²Ý!%½Ã”,>RDC֊ ~w‘IÐh8ae7Ó$3µPÇì¨Ï7­ï>¨iýCŠçí¨ür’½ò¢t.ªÂÃRë›o‰)Î䴽ءEèØÛ),æQIIÚBj’‚r+çÐøD^âÕ1SŽYãöÚû⌮ªéÆ5#þCýßo›’^[µ|ËëU-f_w–9§w3?¦¸Éw¶;:w\þ3å9ªnÅ"ëªË˜‹›w ±’…½fvõ Ó¡¡±Ò’¬C¤r66?$è\{ÆSæù˜,]! phÙHÑÃßÁiµ'ž®úþšõ¡ðïÈòÛ×ÖÊÛnDïù?ê’mÃAE1Øé†©4Ö3Ž C³x½Ëª‡rÝÏ8·51В~¤“V{ 9Mþï¾üiËNZÉgA€m#–K_––äãM¼i!5Ý6B¥añ„Î?!9õv)»¨V/xO³¹P:Zª´ã¯Øœo7o3]¤Zß + Ã99ÈÛi‹iNR|Þ\LSLè›Þ2ðP ,#À~ " EÙi´Š>{kqGÀ§!VŸ¾¨ˆ +¹YywÙ¿:t¤(n žðOx¡]^À|næißKå»0È2Q¨Ëé:;mº*`&~çc¦b·c¦êB苣° MOEÙNRÒM¹¿Zÿ¨h¼_)çX…_F×mí@eåªo1§ÖÓcQøø^>?Ï{8L¤É~‰ ~ØA^뒵MЇ^³FEÍl«Œo¢àÕÍ9böš·E—Š«Û»ëƒÌ6ä®î„'º•½õ)5³ï^Ñ×]œµÅœ_'¾A÷:~°á•ÑÕ!3ŽÑerA-˜gTtÊñs" &‹+ÊtÆlƒ€‘zÒ/n…eÒÄÀo)YBô’9ÜZ%±siYYX†õ¨:®AGs ü"Oó9x±q=Ÿµü+— eÂaZqeå¤Ò cJPít3“ý£)©£Ïgec~¬=ªiÚ°Çv”¨ŒAR›Ò-ƒö¡T5-¥›êŠˆfZ ×»AN‡…Š“f³ç×ÚV™$Îô´ÅÝÙò@¾“”3ã›'.FÿŘN_„6“…Åù¥:^®/'úÙï^;¾¡\%wô÷¯VÎë7+T*³OÄ2lڃþɤ1´u€qr†¹cs:tw_Š.‡ó5Lþ‰H ÍPÒzBÑ!¬ä ÐâzI $¶ñóÊr—¸É„µ½åà ݵ]¸\¼@ Ç;hJ`Œµ‡ŽR“üÍ?¨¡4Ž®¼”ÔR`ÂúˆâkLJߟ×è°ÒçD/Ýs^ùãÃ~ó)ǑàßßøûŒ]º­´B­µdÿ4¦w@ÿ°À£ + ›áύuuN“*ÒL¾6¨àåŠåKºMʄ_Î+•4َJˆþ^W±ç`Á7Õf¬ͳ>ØQ ^ïº^‘ÁùDÕb@š$D*¹ÚàÀ×@Ði;·1""//5‡K#’ª´¹îÇt«ýaÎÇlñi=´FÚmyq£n]ĈÒã5_7>ÑQz~­°%íμÒI2ðáé×¶ +uXk ÀaƋÜO[ØÄ·®±7Ï)¥g¶UÑâ0ÉwDÀ¹-SÔ×mÚ4î$KùV;ƒTL.³švàZ¢dZªJN‡!„¬.è2wBuùM¥Ž;PúˆÛº^Ig^»’bm6 XØ`åÆm³o¦ +ã÷ÌMâÐ@ÒÜéUC®\ø‰÷ƒ‹ü\`:[/¦©®]¤O/'É^VV½§DsId$:õ¦èôg‚È“þ¦²QŒçvD‚ùž°FóN‡6æwå9Ï8ÌÐ}‹V;jÿCÙ¢¨}6¦ÂCÎa©acœsZĆ×ðüˤsðE@zncà}:£F|úA²8ñî®®ãɬÁ7¹dÝ,\t 9ØÍ«=Ÿû!Yì;¸sˆƒIý' ¨GÕ+\‹TԔ Œ®Ì͙øI5Ÿ«I+7“CîÃÊÂú¢XD•}صZӔï-&>×s,œ}B/7NR«òkØÊ¾jõ‚:\?¥B¯ M<cÌ*».NPví˒.¬VÇù*ò–¢bªÞW„,›***­íÜ·|ڟ8©óDcOœTù–ß·Þ‹@Àߝ†j«`ˆí×ÏÓíNˆ†½ג޼V¡®˂ú’Š¢ƒÛ¼ëOÍø¥¦Ã…˜C/Õ··+×ïHŒ=É0J:¾íWG8½#ÐA@Ó}i,³‚sM«g:(~TŖsRåv-wñßÔÝûè.0HÙrÊLáa• |ìǬ~S)àkévöc8Ój՟i…pÓj¾€Ã·I[(’6Uó ¬à@—J•¼-À[TᥠÿHW£Ú ýÿÆ¥ÿïj[‡§êKŠ›c2?â}Þãêç??³ ÃÝý¿¯GaÖzÒû™µñ3 Iá\W;ý¿æ®è`ÿÒEÓ×f?ÿ1‰nۋ¡p@îÿ(]'Ì%ü!tŸ1ü&1,8=ŒÆ%»þéŒK¿DЗïûœü"Šèü?ïŠévúeûÿ“SŸ0“^ôqÿ]'ÏðxœÀKÊíbH8Ï=ðR' {r» R÷MлùGö*®þÿMÔè¼Í}mžÖOE¯ê,Â99:CÇãf‹Ëî(1¿~q$¿c§áSüáí´ðáLï‰7 Îqc êŽKà7ÃÞfÃêB»ßL…†²Ïoª»ÚŸ÷gåõ7ºmå[ý• pÈꏇAÁô¶öµÈú¬¨©Jú‰¶–¡‚&R‰±jÎ7²ïw!N§áŽ·Ü!‘©ÝÖe$Prš{ތ8TQ±öó1$0À¯ÔvÜæcV^Nûëæè‡VڊkèóyL~ àË—¼M¸jÑ®ç" üHË%Á†ão48m#;ÃßÎüšë]ž"ìŒ~Ypç/|da†ìñH>ž¡™ÞSGr""‘§!-7ž¶'Þ?klœ"oƒ§¼Ì⧑ÙŽ–S; üª=`ÍCí“PՅ¶àëúF§5jöwD8n!_C‰šÊ·¶´µyOmäíþù¿×þDæÈMk±ú¡¹úêMÖ^åéfDŽ/–‹ò†[ˆeÁ ·íl¦<”‡½®G"|4iUaŠëW¹~U½Èü#3`á×Ú§ôM¤Övo7Ášˆ ÒLÅR£¯˜.«çǁ ‰]ý®úqU A2s¶~Ñø(:0• êæì£iæÓ®5Öw][¤i¦ÒÒ1•™Ò=GI2sÂtã2ãªññ‹Ð‰1°“½ÖâA¹©Îížò+Œa›²+Ó“ÄêF$êtî5žƒÞümÀE1óÉ㥚jb ϊ{y„?}ýŒ©ç83{\‰ÑèŽ,SùƱa¸jCÉáï?ßÖ=áâxáíþoÙÉ(ñU>,¥Íuè—β &XòÚñ‘, 'Ó)ò­ÅäàéíÇ=ªùÿV®÷j|µ‡çŽýæ– Ë7Häøó-ðfº 1ác¾ ©„ÎEùΔ5W±»ƒ(\në¹¢ciŒ9a²ìßà=6Àmp˜á>Lœ¯Ëè‡0 u˜a՗“Až‘ßnP;ñFP?×òúpŽ Ȧñ/q;§¼ç‚•Ÿ½Ü‡`‰ œ0–`Ö2q] õ総4=ôiÔ |éÑMµ@À6¨;ÓË~¶P@ÆKj‚{ȜÓÞzp¾×`•œ/²ª\N”xióþa­ÉÍ|·Fÿ!—­ + à'Ìé=[=¡°yV8• x5xîÏmÁØoÍ¥<ø´£t‰ü]¨n‚{Èô‚uœJxö”]n×ËVÎêp`È42þÿÝ-pÞþöáH®? 6wâÕÞÚ9¼ßº÷#†§óži-¬œáø2emdÔ)™ÉëBX²Èñ´-øýè.AúU³ B·Oeg·¾ðd¹5ŸMÏëøæªÞ`z³Úò:íôóÐì5³ÞDðf©ãÔ6…”žò'ìêÙ•HìÈXýß5g<Ë Eêvôƒ¤£EÈÑ/aa„%Myvz.s\]§óƒ“âOìÔuôVwƒÓVažËá ¢\Np|=@ßO°ýaƒ°<üõÏ44Ïóñ9ðó<× $mªŽ×缊ìqÛ®Úü0Â0ݕûe«xã‰ú?õ‚õgÁˆºW?øÁˆ¿ÑþR3ßöŠäÿçn+“þ³ýÈ?¬ïÒ(Ûc֌nöÙ+֏öŽCg=ÇõCs¸p®K¾]o…ÿÆ_§ÿç }âeuå/Íjï@_¼'ýð ÷dQ¤/MOžÏè:>“¥ÐôÚ¾ŠÇ¯lþ7Ït;-œU섘e¿ÞÛsŸê¼ùó¿¶F°ù~ÁÿëŒÿÿ?ÂÆÝݧ»SwC»WwwM»É‘¬½Ir ë>øjZåÈ2Ük줗Î÷þíw·[©ê°zßrŽOSUÚm>ŒÚÿ^})>õÍw¿}”{Óë§ÿý;aÿÛ5ÑöN¿Òk£ì§ÿ€ÖêÏÿ ùwªÿ¬×GýBsMëîšèðöyÈN¼býþþ!Šá5Ëø¶k™ò'åÜ6¹~ÿÀkéŠñüˆtÿà Ít±<×Á"àž>W‚¯1!¦‰ø™9Ga‡$ùrÆ=¯ÆYëú®%|¨g´^Ç#=îÊ}òüõñO‹–qC½?8Á$ß®0ý%V{}³?!„ÉèˑBPíXR$§¼­.¡£‡jf*5Â$é­41pŸ¼7Ksx³ñf*Ô ldÏkÈA??f«s…Þ¸w ¤p½‘k>›î¬ÑOy:%ÝøýlW3Ÿ¦ß…ºlÿ±§ õ‹½ÌërãÎô'ØèððÏÃ˗žy¸vyØ@_ýŒ¹q¨É8ݘ@yÜF¦gÄ!õÚo.ض7ˆíOL¡õÈ0Ìãý™vñXˆ"˜kVÔú¢|ùs—æÔ¥]ñF&x0äzxz”>2†gÿSLzǑ§ÁŽÏCðgR9×õÃ3ì^pƒ–¢žŠ»`%$02ˆÃ۝n1p8šPÎMþuƒã½/ó#'÷'J[Ó!>;ZŸ¼ G*1Äò¿|^Çþé¬Û¦? èCÂß´"r±’ɃÃA@‰<Í)÷À<2ËÍà]·ê×óÀ*ëóäf¦Ø ûç"_°¦nZã†&ý\7âžÀbå¦ó8 Wåž|!„»?—,Ö,×í½‹N‹Îsï叅ùV").gA–DwŽsÎðßڀÅGO-ʇ{oøá– +857„f|µM!Â-ývY®ùy™…•N…MÙïœyïkÓÞåÿ àz +PäÔ7ä÷p~°×pªo¾5ÜÕÌeÙÎZၘXÌu³GoÇò‘2ý‰0ã2ýh(—³`çÝÝx4ó+Á=æ#YC’±<ùB;.zaŒé—Q¯—6×û$ÙF~VÞå✍F'ñz +Ÿ‡$@¾dñ[w{™ð·#«`•ÄÍÓԄ*úé<¬O<ûð=ÏÆ+õYäb!î´lDÚ&!plÝ “ÿhømvח)œ7±O5ÛvzÅ:çÛ±I-ìR¶&XóåÖ€Œ2#¡™÷hnÖü·ïoRn]’‚M—b^y˜žÄ¦öYڗGçÌèô¥5¦_X¦¿Œ2Cóš?rZä÷&{Ø."Q%¬ü'‡ÍœMŒÍdþÌç¿n²8ŽV[ ò=º†ÓlÉÜ*)ÝñJc¸Ã”ç®3$s½Ø|²&~ÝÉ(›LÿEºXd\›TÒÍ#h±>Ï%½†k龌Λ>ßMÞrOžlsmb©…ØË"\Õk} ¡ú…¾†Ï|’›kÎqO6,m]˜iß[âëuxò“¦sû™îò§Ç…›Ù I÷ºRâ׏>q|¸^Ç)S†Ä’µ½ê ±uתÅÐa®õ(Ćg׎àôª¾(þjüϚá ^$²%o±F(G²Ø]L2š7z0¯1ö2¸ü>͸Ž2E6'ê·¤Ûòôž€b÷áLvôš®^’ç„oßýãÅ|eœ‚ø_™`…î½Þ±¤ìÿfLÌ&#˜Œƒ‚Á`±lÃgY$;Ø "Ò °g’ÑXá™Ô +G&1µ[m[}ëFµkxûȈÕEµd€€"”kbU\„DJ( g¿~ÿïs2IA­}o6íõæíöü½ç7àoËÞsyÍø;¿EôK¿B»O‡ÞºÉ%²^jCћâ}½2œC;®ß¹~ +†Üܖ‰Ø~` jÍÃî ½‹^·(yBIB<)&à&lÞX%‹ÁN/„˜î}Œçèu;aòÕõlÙ¨ €Œ±VÙR6Œº¸âI{”4>ã;23û»Çòa”µ +, gèõ5]%åý‹ Gv‡†7ÀÐH¥Ð̒Ü!vV'}¸ÈѐÐd™Õᙬû¹’GLyü’Λiœùb?¸ë¦ç-˜ýzpy—–Σÿ£=(¢ß @;»jŠ |ˆ [Sɏ‘ƒ»jχé„RYÎ`Ù>Æ'}ՅU^®­-E:ÀApZ=° ¹ „Ì n­Êm­Õýü’‹×£ÝØÂOр°½„¸‚œ +ö‹2üÈÃÝAËÈ.l=+14ÞÐØ×÷­ÃuˆºóÑCÏ9‡œ”`ýØùRuÍcSÞc:wçÁ‰Ìw ¼cԗÅ×?ÙSX4òeûž)(Å}ž.¼¾>óg³dY1úËmž0¶bû–ß÷XøÎ¬±ú/9xØ}›’"óÁâcÁ:$«Ž0ÉKɲ–ÆÉ2–Ás†½®Ói6 +0œ€a晹jm{ ürŒ—ldsíðb/µ×mùûòIg9z*t2}ò?½ ÆÌù«Úÿ¡£gdßúíú$3ЏïTâÏûÎ8äþŽ€õn]íãÞyùqJ—õö.ï½Æ—ØÆl½žkïÐ}þÓ^ýi¯kEßj7[곦ë2±uôöšþOM¢–óyÚ¦JãÑsߋ¹ÅxÙ»¸YŸxlý÷1õÜû‘ÛûMÿþ™}j{·êtZ­À° åeâKø“%€o<ç‰ýCüùÏG“ˆ ¿Ãíwӝ¶¿3†ñ¼7;‰Ân)ÿòFsÍÉ2ù?Ç%É£·ð2½;”ÉúŽß8›&Sˆ(Jœ,ûQÛä¿÷Go“ìóùªºôvù„Íßçú(íÆ?²øƒýó–_ü‘ûsö1-âû=¸«5=˜NzžÃ棷Ü"ȗaö?ó£·² RsGE*!C¹W˜¦Vx=ÕdVù¬ìßX- 0m³}¸E‡•×Gî6G|y/MÁÓùŒß;×§Ù:3}¥¼å¸ì¯Ç…l:ASñ·~4Ô=9U˜jùÃÓºŸzw¦DoÛ˜:ÉË(¤ 3„]·,ìŸyµ~= +U§eeGØ>»eH7²Gnkt'A¨Ý¹ " è—Ûb˜L˜ý¿±vþ@ÀÝä¤ðîä"Òkáqè Ê¥„ý Rnh&¿dï‚6Ùq^’³[’°+ûüwð¤Æ¶À»ØÇ ¾¸¢c±MƌaôW.œZ ðò³¼‚ù7%Œ:ƒ©±ÖEòk˜]{¿dñÇcˆ‚îØÆêà§®]ªÎ7IL½çԄ”Ñᙎ@mŽÜ€ Ýq8=N©8“¢W¿j=š&.šÏls$¥fkie^ïéËîqá%Ëæê;­{»Œ4Q‰SîóNk¬õk|<«@¤äÉ#L]PÃäŸÝy9›B®^³¿ïÍ!áR¦7…àq9/ +€`é¼ 3i°ï ’3æÿ‹Ã¦Žðé,Þ%³Ã4­êoœ^üÞô +B§EÆòu\>3É»&ª¦‘{ ¹<ø1°ùèðlWWÓµ´²ÏÎãüžMáâ¥Eeæg,H\Y®óý·‘3ö1°©Žôòqޘ§o'¦Ù)½=÷ ’ôΞjjãzx¶|—¦k^‡¦[ôzchŽôÃfôͱú¬šŠþcX²þÑë QïU{Ò N÷õ‹#·‘Õm4V¸YÄ£¾‡¨+*øÄ´hU –)Ji»á¾Ä¦¯á5ŽdÕ´ƒ®ß'›éW÷;Uï…MËÝã¯Î¶l ;ˆššžõ N#¾ß'™ý` +[ã8£ußè=\öËñ]5z´ÈÚíS¢›w¦²u“ÍÞԅÕ;ςR§ Ÿ¹.½“Ô~S¼ïÒGØ%a¥â#èÏÈ%ñ­»¨‰›É`b'Dx¹àä.ÕF„ÊPÂMºQ1Äp¹à»….«HDšØó†£O)6Üj21‘X竃‚Ñ(ÓÅ*¯¦é›ÿÆhÒ4Fíþˆç €· <,RJ¸I_¨È—Zs½zjüX˜X-\&)3y:›AjžU{² ÕW°[¦J#ùDæ™?mYÁ®jB&±(Ž,:0¾B‡Éó±K¦{¨Ê1mä#®Ç>•o”ibÒÅ^û‰´È¡æÆ Às–iªmiR¥´‡*ºôÕ¨4®ÝdÑÀV†R¡“Ê)ÎWG­‚¸Œ‚¶Í uâ^Ÿå '¥†]„ìpÆÂRáŒ)[â"ªÒVÚ¼Dn1¼YD—;`‡‹%÷ù Æ8“Ç{7ò”&[wØ!>d…,UÓ«Z±Lx”üV„“r [ÀŽ3 Ç5­õ%C¨2%!ÕË*Þ ‚þÓkÔ[-¤Ä2@páë\µ…«þä†Ê¡) P³Œæx-9p´@F˜&ɹˆú1 –JëRÝ)öNݲ3À[Ÿ¦‰uª?❯’f—w<êmÆ{ÛBGî!P„ ItcCB„ùO‡;_Jh5‘´P³o‡B’Ë¡iï”@¬åې•¯{þuãÙ©øÍ%RšÒ‰‡ë– ¶!™$~š¾IÛ¯«§uN3Û¤9`•I]L¸ÏjGrÉ!˗./΁­×6¬ûWI5~ÝYöî’nCJ±âjς&¥Vê;¯Ë÷vpIÖçô Â=MлßeåÖ`u:ÕýÄ_૨qo j&CÁ[ïöž…œ—JðUyLRÉaþ%b`¶´þ¦±.0ßàxð— 29#Ȭ²!-ÀÔÌ(‰Ù +µíì^uåœMéPho¾ú~‡Ùý³}ðÿž|~éj­Ëh<åd䑵@Ú¶Û&mpRëð7ˆrŒRaʐ~IJßü¼òÎ]šÒÔ¥êHʜ< 7¨*›Ï«Œk<ëÂ$’©7tÍÆw¶8¸~¥ë€A×÷ o­£ƒC€C7ú~ë„GÃrJÖ@•ÑS»MûÛ-ú…ÞìÄ BJ†›„¼ˆÊÎu~ ûI~G…­®¨h3l(q’ÊUpRjr6 •cËËÁý^}Rñà4-»|2îRðø„Ø)Xñ߯ùgsÓ£6ì´ü²?h~$ØXŠev˜f¡&ðDðLg·Vf¦SVÜ3q؍dáÇÄ|u“„{l"tál …y( ¬5þWÑiëõñM?(4é6‹ƒ?êòHAEQ¸ìº!^õ +B\}GC\Ãe +µc½·«EÙÝñ¨Ýõµð »Ò—/« €@a`ÑS\™Ó‘YË*Ü Çnt)Z´¥™Ø]ãpe,f}"?åà ›ƒÛVQ +ûû”;‘-„*ëÐýP,â@$Ç·ðŒòù@Ê6s™$ïî]X½xt„Æ³Ž¢#ç1¾¹–L¬:*ý5Սåü¾O5rfÂúXy¹BÄ9[ß[48ñëþì/ó† +Óâ ÷a?|A'{ç„»?úç/¤âk€Þì[äÍnŅ©¶2|t4Õ§ ®—,#™ØO-±5ª:ÿâHê’tïuі™%аɵ-øBÉ`€i§ÇÅ õdîLÏtƒ#%ðçÜë± #8Ü* øx^””Žš5|‘ ‘\ƒ÷ZÕnÇ1žQýL™£ˆÿ¤qÇâŸUï\X +%ö¹ „°”+~” !ßÅK06ù¿½d?—|ÄdD«NЬ†ÿ£½KÚèr¤ dý[Q¾ ó¾@KÛàwó€oòp*éü²¢Mu×ËRÞBLœÐl”U­‰%ÚòÎÚ‹þÌK Õâ©éG ™{ ~-þ€ ìÑÁú²po€ºÊÌÒޖâ74€D\×hºÛÑw© d”Яc2÷ofC'-@R \Ä ­Å·Qa]ëh\º–0åçãá[Þt1/–ü]‘»Fê@oavjë=±™‰Ïˆ”AœœŽƒ…]Ô¯€âò^‡ÚØ4eVÛü‘=ÈYàþæ· á`;J1 ka>QXIUӑ(b19ïȯ›Îz=«5ÈÐÎñþ;9è–àX…b1ä$ÆÙõæifʊÉY —Õè Ó¼r`jŽ˜ é¼V] ÚÕÀ #2e}ÜËÝU¾õü¹ ç!9¢œßÍ!9¯á!;|%Ì—P'³eÉé¿$wøYìÿˆôÌINâ»åvSBG“³hIˆqø¶ïpm‡šé Èåæ­dyl© ¦ˆ¾ï6IŒ„ wã0Ÿo56ž5&þôÀdµ“²¾ß;š¥úl–¤šòÓ#{ÕÌ´2SOk¿Øí®©“Ì\Ê ¥ÌŽÛP¿H»eY ‹,š[ìf¦hȒU©Çâäó³À•ÒPß̃-Fé-ËþyT¾Š—͝Ð5sÐ%c[O@ÝýÁG]ÏȨÑ,2ŠÓ žþÅ-œ´nQãWµÏ ³°ÏÇÒ·,¦ÈÁ“ÁÃ7>Ú¶-†6¾«$q¹^··R`ƒ•¿TA‚JYrœ‰ú—KöžêŽ»Iª^^3¸¸•e+‡Dö&•q‡a)tÎâ»lv“E…ÁΙ ]s³#í‘ìÎ+r'Ñg˜ˆ†ýòÄ$æ†Ô\1b›¯LÍÀ®JU÷xXªd÷QÊ-¸|ƒcl[øÐµ¬¤^ò +¤6ç¥nîâÚó5ìZJˆÎtE§³Z[8ù Â •é8@»3°“NC`›®íËâW1.ê€Í'´1«o—-Í ²l@Èu  +´íºÒ¡[ü§tóøXàŽ±3˜X‰¨y+ñ¬Çü"²ä)^çÑM‹f­ù(;ý8EàïK„_¸Ž¿ƒy_ivK Ž iRéúÿßé +ã[ “ù¸4dG(ƒ!p^AÎÁ=7¤Øû¡cÀK…¹¤yF_AÀ)ëu¿÷3Ð^Ë¼çø–™AÆ{ÏW¾¤TÐņɯÂ*"ªÜhs(Jþðs¥ž8žß¨ë1.&Ϙ›‹]À6×r;œÔuÓߥŸu¡P¨™Üª¾ÝAv‡òß#ŸQ©;éõ¦K˜W\Y’†gÞcXõÌ1ˆE»s£e|5â~³_2M¬ãîÞ͵îN~²ï±àúÊ!¶Ö[9“o÷/‹€N›fßÞe¸Èß l»7Y³š&å7ًFåÉ73/²K73+·!n¸§ãdÜݐÜÍr—0þ Üfçq{6å̈́‹Çu‹C—Æ]äÆAÇxx`EÕÿ1róó—ìsž‹vkó—ÕàϜ»ÁÎ_Ñ@´¸Uê/Oœï‘ƒâóû˜8¼çK­ä¦ééI&Ÿ•„s¬Îçç?¤f‹íí”Ï“ù¦}9óLûçåX™«FQ{e¹Å­ÎMªßûyìÿg$·ÿ&* +‚øTuâä„ÏÕû^zqfNA¸2¯UƇó\¿ h®áOMå&/ϚÕÎÉ3Wñ¥&ÌKÀø¾…vi¨ÿã©wÎχjÑéü4¾9¶mÙ9m¯¢âíy6ï¹¥sÓlm”ÍÙε%ÝÒñ¶ç/¹Õsӑvç,ç[‰+Õ¬ê8…%(ŸOy/ŒœÅýŸ2‹€+ó\uÓÕX]Êê&ª.¢jN':9òåTÇQ>n<£Ã™)G¡ê GËMñeÚn,£ê˜ê-ôŠ«ƒùÊ=p+VU &; Su¤®hÒôá]BÔl ôYé¹fO¥TVzmÊZ “•QÂuÆ ³eÓwùÆè÷Zš¸ä©XëÀÜ8‰Ž™N Žc¦òˊš €ÏQG€‡ú™N4“:GTo}À* +¨_Xa#\Î0ìS”p>Dÿå >Vcå¹xïÛÎõÐÁ/¿!…ŽJ.ZaqyŽ?ØÏ^„'".I^uÔÓ¶øäoùÇn/ÒeÝZŠâM©¦¥Ÿ]Q‡‡ÎÎ/#…) (ïÆ³ßX7£Yl‡QE²qº´H/EÃìOæ3ub¯s ^*ú€ ;ӊ¹e¢¬9Yg%Pت8!C(¬Ô-žyEg­wâîj +ùcµ–!‰~ºtü†r¶c!éۜÓÄTу7 g¶šÓŠNŠRmb¡Ci±ZU{{`GÀª›ï ÜFaù†Ëo4­‘ÝF:+<º²Ž³pvXß<Àî‹Â.þh²©U)‰T°¸P˜•N¤åS䜪`åò ö·ÑÜ~x]}ˆ‡äÝm.›ªæ«šÜöCu«‰ÖMG‡@ۖâô±DŸç£ÛiÅöˆÐý󊼰àÊÄ5¸Pè'Ó¢Ê bc„ÕVĈ8©ðW Ùð…G«¹J¬¿d£¹ê¦ù~ÀOµ‡„êÑá]TUI·&Ú× ŽÅ6¯&µsÿ¬‡Û)ڑÖÎӕÖÏþ³ã “Ú Âîs¨´s—Dp„D¶'90ÇëWÖCÜKYC5´¸ø£*M,š©Î/¿:Ê­bYC\ )dgY퀢=AéÏc®yEt9×@~/is>AMëÙÑKÇ¢ªbŠ—Â»®"êNâéž#Ò [íú“X ~ñ''MP Š\SØàS7dã;õNà¤÷ÝâÉ ž˜ëÒ®¢—ÓLt®à€ÁM©ÕP´Èü¾™ y,Ÿƒí"–½äíÊ!…v&NY“‡|™}5Œ¥Äõ'#Rÿ&ek–ʃ0ñã ±wƙ%˜# HRcÌr¼ƒ;\œ&ى£¼ûiÚàC±Ú,ày£6èQe›‹eŽ;Æ0üÙÝqáMªš@¾Û_¶<‡Ž)­ù»IÎ4i¹¤gÉ9aòÑm×è_p>L°J]$ÀÛW@[õ‹ÞÃk†~ÝúýX®.6h`êº8¬âjɃºZ°pƒ‘ö¢°q“XZðf•ð ÎÅf;Ûéƒ<¿Ke`ǀso©q¡õ?9ó:X°sÏt±àä%×A¸¦0Ñl2y'c{p¦µ}ýïJwwþÕqG[ÒFa0@‹:@ ´Bîî±òÌcmmìýÚ …)¨}8‘!c€Íí/f¤»Ë=Gøqz­PàN]hÛ氝± "|àz?+f‹&ìt);Íñ~ñúÆÏï†ááþO€\­ñu2®bÄê|8z½5 +p0•7ÁO1î ôÉ×^ÈAðôߨF¥¬ÌfÝbÚ@èm úC_Wý Ä@RIHI9‰ö²nj3‘ËúºLèN@!¬Š"XEU Vš†Ý%µäà'|/fÿǗ˜Rx0¢5tˆ“Dú‡ˆƒZ*™äá_¢×R3¿ÅÂÅ`W.tû;I“ØÌ ¶Ӌ2péÅH—g³0ÁX͓Ñ_¬¥Ùï~¨Ìx¶Z ÇèöÑDý£ŸŒÅû¶l_‡jÅãCöv¼†/ªY‹’èâ±~Eö+ôêoË©>: VHbWÇß´ÃÖix•1yìÛöÆf2Q™Û}]˜Ýl˜Ê.Ì- ï{ëøRªl@_bã8 í†_Tkq_L°ý=j’ÆmÄ~ˆo"ê`þì¶Áðݍ0Ÿ9#PzÓ0Iòý¹²ô¸Éòô3™þŸxÿ¨Åg jßõ¿ìPà)©ßw¤¡~üR|-­ ¯}LÇ×!8ç.4ºs÷} , j3èÔ|>ìjD“™8Òg_ЬÕ{opÀjC‘Wù1Y|’‹èR²ˆysÄÁʳF·NkžÃqДŒñ@TFÛññBüVIê/s ß]þŽÐ>é&GX£Ž÷HƒOBíˈCöا]nQýÊ_¾$Jó¯4>¡³IŸY«½HX,ún¼’ébúaVö#¥Šá,Éóµ¸Í\â(¥¾«±9âw©ÂZÓü>ñn«´Ý±4ß«Luˆ+O‘RÚr+'DÆx•ï/bŽQ¥€à (ŠMÃn›t†J¨=øBø !g×̏Ûr  Ràš+ÑÐÂ2nwà™,5ß×hˆ•™Â.`ß±ÝÙ;_?£³v¶”ÐvX[Հ‡+¿™Û˜)Y[Öú5Kõ"܃wÐG„Ð]K¡&×+ÒáˆúlLŗ„|¸;dǯ¹õç¹üSw?G¡äî}û™¶Û۝ӔӖ%\csÞ‰êó£nw>Vç诹þ“Yc[èô„šªó8Uu¸þx{Éáœîx 2jo,`îWc¨à“ñï#đ¨VY˜Ñ"୐ÀîJôƒMl© HËÆvñĄɩ“÷/QqLHÝÓH•ÂÅÄn!·˜nvñ”Ÿqx;Íú#ûн/Šb@yCÒÂx‹å¸¼0#,t$Èä?ê®|a>½C´]R«#8MžÌEqØò&’·ÅÏÅqÐ å©?Ñ1ÇC%Ã+¦˜‹Õz7iØó爍“œfns«&Pas2©ðrÊ*{«i DLՓÛ%·y‹Nc‡W–ÀٟɮvÛ̚¼wgSä8³A¡w§}5?ŸrÙ-`½X­ZJ]GN_Ê(ëÝÿ2GCTZ[½wµå€‘»06häaݽÁ†´\?*þe}~/è'lᨭÕF´U¢ R–w3—ëóÔáRÀ6,èÕb΍¼ËÉ‘x£?¥ ¨6¼ZË +€¡reL·M'¢Ã+=㷝WãµKLjKVþwRJŒˆHÜÞ +,mJÜØ–{ÝçB]ý؉h=ÓQý™½U' `ÞO¿ +Sñ¡=:ÕÎΦ;–v¬ÌkÁ⇻Ê}yñDá¶Q^D˜K5ð y +/Õ¤ÙkªW&¤ÛÖf¨¾HRDT{¯äTWà+tR´ç@ƛqgHU&é@á³qQP‹l)+eT-¾î÷ý HzµÁ…‘uÞè£-kÁoÿªøÃ[ÕxCÞå{8Î +â½éÙ½õbédñ¦¬\(S…~òÚË®2ÚS\˜À=¢ˆ1Cï>=ª…Ä‚«ß.ñiúÓùcݒJ´ƒ=‡6s½{Ýå†! 6¦.8ˆRŸuãObØ^áJæ9³çÑ:Ñn܊·øW[KªuÂi‰…ºøjæŒIö!€;ÂÒÄ-ÐE´¬^4Þ91c‹kÀÿ’%y ›]{bÒ᱌páw9ú=ÞÀÍëb>ږÈ2ºãègBèRV½mo-Œ ™® +ùµEw°îÀ&”zgW^®ÑÅEԺÓuåëbÏH£0,ñYyU”‘‘ú¬8Ó +9úÖ¢á+Áã)½ü´_#MÔH‘Q¬ºI–Hr]‹”T]¥…É(&n3¦¢ÐÜãfˀeÿ«€nŸtìS‰œwŸ,P†ñ‹åÖ°­þÜSÐ6;¥)ÎÛÓ´,Mä6¤EVÉn+ߝª›W>ªmR [‚ˆäÇÀaf>†¢F8Ʌµ`·¸˜áè…l må⾄Ұ„‡c“<Îä&ÏÅ`xf ¼3UfÛÍ܂ ?Ý + :c8Aws¿Úû\ÌýÚ·uúS%ñíM@ÿA gĪ! F-²$¾áa›’k…̺Í培V‚‘ÝfnãU=–ƒAH®?,ïfã¾ TM[½šß#Žû˜*zìM"tZwƒ ¦š¤·óÊð³Ž3»ÂÂØj 6 +I8óöh2úùÖiÀ•}hê³vn?ø–Ö£ƒÝHWþƒW ·#S?¡ÀUÏæ +zÜ–evËpðHE +òŠþ•¸š)ÎcLg§˜apÄ»óxˆW{²p±© ®wùݙEo*)pº ™Bæ% +REh'w³¥¼­D£h҂íZÔ2mHl1WàJ•µ°s¥h°¸¬ì¤ßÉAÍåƒí¯á•Îß´ Ðe–MŠm6Ζ‚È[#O׀<ֈr½B’ªs[Z¤æmF™ßRf¿ôF–#QÀ”+m¯¨Õ Ë% +IšÍ"m4é;Õæîå͒Ž ”êÎÄb!Ɣ¾ +q4ñ(2Öÿ 8øÒ„*\z62#Ø5¶w‹ï©mÏ(ˆÙ‡bÏ–k;ªž3SíÕ$fÈxžN‡¨Œ9m‘þdP|áøÚ¾´¬ÕgÙOd“%+úJ¨˜†©¨ØÊÇs†Tm6wBX8Ř´©…óçñ‘…‡}Ÿ;l‚tIe”9uŠžòš TˆÄ‹5Rígôò.'ÏÙg×_÷ôâf”.õ´¸§5!õ­”ÁgÂêe÷:j_ÆAncÏ~#êí ƒ µ†Ñ/5˜ˆ [ꈝµmWÒ.Tu~‘"£¬´‹wÁKΑÀ§jî¥5®Œ¨ýTÕòH +è+¥9âifL +ï_ä µC=àBkî¼zL´±šÙZ€@M^ í£BÑÔtW•‘øxÞ߈†‹½ËŒñNj\Úυˌî丳IzeçÇIä¡ðô7ý<Ù²[ö¾žqô‰)p·/è @¢h6D +ÛVint*îuàŸ&¥Õy©×WÁÞ¢ʅä°FIQÔ¥ÀAF6àÝó·”^¼eÿÙ.j\D¼ú|Úk™ä+R¦ÒÏÎʺèd>ñVï¨XW†½p:h=b`îï†`‰x$…=Q¦ð\cšX¢yí)+™½ÊÕ+Óÿ¹)J/ȎS<8ÿ”(ÿÆ­÷ã?¾±1ó$;ÍϬzo@¿ŸU) °ñí$1ä°î•mÎ.¨RN¼û!kwOãÖãÀàÈ +4 xüÌq¼ðbÁ;vž–¸ð"jV¬rÓº‘¹˜*¶—÷ƒ˜¸<¤Œì¼ +¯YÝA+|¨Ý¾•]³1°óÁCÔl@¦‰Ç·ú!õ‹}¬¡ÿ§Èa +tŠ{Y¾*ڈvyk!Þ£aůlnóéÎc0fHk”ã*Ñî»ñt¸B\ÒÅ;Ú[ÊD­î 8ÝÁ–Ÿ‚<ó›S=fe°=ýˆž2nË|{¨Ùe™@ì©U¤ùœSfhDՂTX¡:ÂÀEsޞyV´ö ×j¢©]3½¡¦­"ÏBl\:¥ÂJ˸xé.…™Rm]nQ8>‘Oî•‘``BÜJµÍ4n}©z¢Êµðbà͹!·š¬Ê-øn4|EïZ#Þ&Ox|óÔ?/‰#øÌòñàø›šþ<ºüÃRñàçOþ@ÀãN‚ð†ÄT;ÅWi)mS><«—ä"Û[¦P‚e+¸æŒ0÷ÜÍC¦s XÁ(Sþ ïæùM|Ç-¯Ð_Í¡¯ü ?»_Qn×ÏrÚüµúƒ2}0ï¿î×ÊÛµù۝»_¶qªšíWi É#»»©«¾AYrB" +U6 +iÌèÅòÂ9>þþÿÿûï³&fðò¶ï¯-öÞq¶Ûyz7£}Î[ËÕ÷Jòô¶Û׿€×ðòþ^•í^…½;øÓ½í¥’Ùt‘·ÏwÓýIyŒÿ¿ì¯mŒÿ4§%o>S’_¢)ɽ/›‚™ô;rœûÒùÑ"´lþ¿=+Áü«Jœ¨²[S՗W–úx·C„ß`¨³C×Lôÿë9«eÿòýïb»m6§#ÚÎ}ûL锸êÌ©rZ¼¹NM¾ p¿K—OnPòOG‰éiæ—Oº.žÃèwÜOÒì>>Œº~¨¦~³ÒÓãJüÜ5.Ÿ,»í‹09YÜôýރ<üÏ=žÎ:zæÜþWÐo¤úå>†û‰¾“}ÐßEÐo’ú-ºøvÞ~£ùöYÏWÛÄÍx 0õ×?o³ÅùÞÆO…øÿ"f³Òí|E‹d’è.~’C‡ \»âÀ®¹ kÚn(¦U+n)&ƒ +’¾3aK¼*VqÒ6€À}>åÁ§gî›Påò_ø#ã߅¤¿ïBxJeWˆ( qFÊåxôšd¿?»p¿L^-x›<­HÛbàøáJ1€Â3Yj C„ +¾ï×IöùÒ#¢ÚtMÑÿëÁÝX“b *ZÁMe«-5”ï¿ñ÷¢f2*@À±Âšxê®5HNJ§n:p¦îuº`;cDæp‰g‹…!„îïãsýªøû´Hw‹ŸHD'ǏÖah[#›,ºßR‚S ’©Hmé8Ñܕ+òcÀ¯`WºT–Е7\WÞT–˜õ7XZG·J>Äúܖu븑aF+”~ÅFœÔAòäB}è +o=ß^¯‰ì|ö–^—Ý× ³ìa1[~Ց±Ëj„•֏àžjº1èãf°ÇyðH@¦R,Rüÿcm-¨žÔ¹«¾Ë¦mG¸z%8Jö¶0·\;î^¶ˆý[!p »!¦7£! +Uûâ68õ±œ;r¢öÐ6ÇDR.!wøuõÐU\wg Eæ +N=Qԗá ž(d8ól6|~óÚ3M¼†Á ÐþFÝ ”Ik.ßõ¶ˆôƒì³ÒñõD£E^ԉsîdSܹ£‘m…–§ +Q(ÞÉ:kžTH`d-aѲ!_ìÆ½¢[‘H’¢ñƬ@ê’ØùVÀT0ç XñÚaàÖÚ4ARˆÈHº¶D¦É!]M«&”JŸôÿ2ô U{Jä— +é֟Ÿ¨’X@ÝÞÎÇ?°ÃÁ¼sÞðy°DɧÈDÜê¿::!úм8Ta£1ðÉK6ñ#¿D»•Ð|¢Ìô:P•ÂöòØ + =æÎ©öÿõÏD™±‰yQ£ü~}4”Aµo0j$^6Š¢ÀW¸€¯Ÿwò‹Ò7¥ÐZÈi³ª…oõöš‹gy³:sµQ/‹m¸`Pݰ›–ƒM^ݕ ®ÍŒz™=ÜÜ`ÍétéYKh.eI» iؽ‹Ýaس]ä£ ã{`Žu*Yx±âaÂ1à&KQn½úÈ µªDoYÙÁJUœ‚Ò.ëUÃ?¶äïxgãŸÙ>„Möp° ÎPëä)ÏK·óÐ7{ÓDoq¨EL×¥KÓ` ÈYCŒXZHí¿L)1ŠP$]Î ÿ¬‚±¶›þÙHìÇîMª´•e¡ÐƒR"‹’xÓ¶Çz rjœÍ¤P§( +˜Ü¡Øõ fÕ-%tK)Uà~c ­ +E9K,b¿ÄSõ/¡SAWï™·-ˆíõí0á÷}+éÈEt}Ô].‰HEŠlV—D¬"µ4‚PÿЀýÎ §Ž_ +è06ýà\Úäiây…G Û¡Vcõ¹ qÕY4²iBðAn` E´W¬§gÔۈ¨âöuB6¸0îkÂöGÿú“ÜÄ û°Ù ƒ ¿M%´2ئbÈ6(ß@\‡`‡jÅnÃqÚÈøæya²N7KÑôø©Œ +yÖ& +Ml.€Z¬÷^ÛrwWõ½Ð .‡]欄d$<çúÚDӊO-†0ï´¶ °ù€ Æ]çz™ÇKbÄ)KBÌ5:›¬go6C;?ݺÓî ;"Žì}?¨Wdޱ5›‡]ÉA˜H7à郙› a0G’–ß@ÓÃæ¥·z£Òüí¡óˆÄmÂLjTô)%ZU…±-5d8š›A8¥?Íh=¥Þ„NƒHn!¶UBâ7!E ‘þ—3c«ñ®ò+ñ»·±W(I ä.¦õx1< ð¿}iº‚ +ÃòŽ1´/‘ËSø|îr(J8"ÕÅW§Ô°¡Ü|˜zejŒ»—Þ¡ÿ[Çç|¶w‹¶6x}BdKoiòß¨Gªg¿=d nõb¾B§JHè€p/ÂõáFÿ“ã÷,ŽÜëF­î !µ/Ïݸ˜7¡0K¡Ù;ƒh1ê[ *]z³;¬-k +6 @4ÜH¥Ô:T÷B]À4!ªÜK'w¸«¼ê.m… ‡ +MÌ(SQôÛºX²–Ut +wH–À¬d +"ÞÑܒ¿aDC}£oÎ<¿€§“Äm‚x®ã™‰.:Òï(´[if›ÊM¤·ÜYMÒXÅÃaC +Uw—\¿Øö€Úa®©×=ãüWwvþ¼ùUå*a$ Ú|I8/&#“=Ù|OѰ˜JUüJ7Î8¥ãO˾qöe¼¢ùÓÖ§‡Gwìp$$ |û¨îë°(ÑÈ÷8žŽïÃÀ#¤êp=ßÍKIÌ`>j;¹)3nÿ°ÚçæÿyµÏÀ½Üð8¦÷s·¿ô¯w2RöWôi{ú4„=}ÿÿ7Ä_ø0N؋Bôà¹—ê’Ó E:pð(ã0èàýšGõ‡Í£}ê`m'þCñ2‡„M„Îæ“a2½Šl'S>›Ÿ,šޘ’‡°ˆDÓ + x‰»øîX›¿åQÉãH„]ÿñ$!ž“‹¾eÝ ßß¡‚›û=/mÍø­Ù Wî ç/|ëËæÌ·½†_6å5Þ}Òî×ï ïën€ßþ:4 Ñoÿ_ѼϸT_ Q}¢û5Gÿå%% —Ý®Ð8¿{±þY>»»çAf`[äþ\·Ë~éGJùGº.×㊀§¹Hè>i£¹ûù‚úùtxä€ÿGGG#Ìç³>/ý€þ½{—Ù¼xåzAýãłÜ8 -¿&"‰§>jš}°°Ð¢ÊDyaü€ä´‚Y­–ÁÂÃl !ú“æT|À€ÿPˆ3Bƒòõ û@ùv*>\×NWL Õ¶@`{(P^”ñãÍîôÿE„öH„ +„¸Ãrð +Ðý›ä³[(²Ëˆ>†r–kOÁ`€]Ù¾X±f@°ä¥¥” ?¸D 9K5†¾#Ú¾@]Þå-.U&Z<4üÀ€þ]ƒËCe”@ëfÈŽ‹ âa÷àb€E u³+’px½4€þkÀà{ f°Õ÷gȃraãÞHôW" Òù)f«Yz™ý¾Î@º£(/u¡£ºK5Z¾¡Î8¢§¢pã9Bù,Õ> ¹×9Э— ò:üà €þ0Iò@à/í }åÉH ?àзvvtéþ =%=ðƒ†@¸p_Ń$¿žqx¯ŸoR{I•­žpînnx–ˆ2ä Û´wòÝ-™Ð¹F-äàé{Ýëœí ä8›_J Σ¥„1%uɚœù<ŸÔ„q§H ?¼…òÐYhÈüòïÙw»ÝëâHï<ƒ-*:4"Ùø T2'·°/ :u„å¹ãä‚þ jœ<¬Ï” ŒC#³ð€ÿp–íÇc¹¤8|‚x¤)¹ iÁÀæàhxuÅ €ÿN±c”%&3ÒoœN/ˆ tþ`€ÿ‚‚#F1ß÷ü46.–ÇRú YÊÃø€¢JèFðà„öDٜºAüø0'÷jƒƒB^08if·¶ImÖ^@÷x¯·¡ú@/3¿ÔË¥¹0¾ç.-Ÿ*nÿKpz_r„ªt¥Êú'óT;2ê°PBùPcí¡‚ìËÄ€þ<`>âÑÁçñÎ<`Áï%ë.Ÿæ¿÷ÚqãòAþö@~½¤Á×ó‚ý°„|¡ˆÖÉMÓ¡„¿˜8 ÿàÁø‚Ozœ½ôl–t$Ž/!r²ZSžëÂÖk5žt†1!-"ŽŽ”ý é0ƒÇÐÁã‰ã’h@ñÆÿý=¾Gäü‡ÿŠ÷xüìÔÛ®@$Â2æÇz+*Ž!2ÚÅøÊˆ ñĤ,¼LK˜ ñÄ|§@8УȽAãÝ†£Àè ñÆ"‡…'W@§–^”9ÁH8 ˜R²^bgàñÉxàPxââÛ9CF¾R†ÓÂëGl[( ®=ƒøïÇ"m¥3WºÿKóÑÎk£ÓYl%PÃè±ã&8†Ë³oá²í Ȥ&]¨L±yÐØPxâÈø× ”¼Fã‚Y'Á U¤xâ—D)3×l0½†ÂÏ£·_ —Ñþ.àf-™ ¼Zw$^:¤&[B:ð™}":ð™wIt˜Ü¥Òcé“fo8|;›žô6”8„s~}á &_P/ªG^.ôf.ø÷FªoÁ㋛KNL¯sÃá¹f@xâfD¬H3 —×$„ËìÂeöHà-rèìπJµÁgÑrIœZ=¡ö`˜<³@џÆyü @è ™Z>œL^‹/RÿKJ"ËÀeGÒ݊YÅá-/&Å7UËý”b”oJ ο€}j:^U^¶S«E—¯b–ÆÒˆ¹gî ät¼»º0®QežF"áí'0þõ©õôYz¹D™s(¸7Oöë>ýÁK¤o±E–æ%&\ÔŒEÍ¿pRŽ.À4™{( 8ýÁJ8Ð?€i2ç`nÝ=€ôtºú_^Í4OàL¹ôYxÏô¾Ñ'ÿ +=¬M÷(V(•-‡û¾b› WÊþؖ"Ø[\]>º¸¶&/¬Ú•–&÷ƒÇ>Ç`ïdêêòŽ+™2råñwuæ Êùó—,r½ö’¿Ô@ìtP¦—d]A; ‘3¬8|ùšyS­bÇϖ,Wû«ð±¿ùª8ððp?ûj:ððs<0ÃßõSÁ¿Õƒ‹Â—-=XⲊ²’²ž³IYV4ñp§}ÚÖÝV¦®W\º¹}wDÔ=áýD|ÓP÷÷Ýy꼌”Ïàöÿ—GúW‹¬ÈE3¸¿&ºµ¿séÏý3¬ñoßÿÆà‡Ð6 +¾št>®ýÿ<~þ8¿x\bßm{éS¡ÂÊd(³OÏBº&® ‰5ÏÕ¨ç$×^Á3ðÒà¦ó0â?£N‡.ÀٗÏ÷˜n¼:sýü–MB…ÏéÏñ÷¨4çøçt± 9i&*¤ï¤Á°.ããHà¡s®¾–’Jî=Uñ Cˆ–!AŸƒƒUábràÔ~U;Íïɾ ýùk ¿h¼A 鳸Ú!Ð2à6l6*D ³¢«ýðˆ›?\Qì=¸HÖ`À¶æïˆÒ`Y®åa¶üRM·Þ[jÑv€5‰›ÍÄM|³)ÈsB‡Â­’ѧg'اFy…@IaÀ\½›‡ôê ¹Ð¶Çéȗ?éH `‹u*dØ$ÔÔ{½w:¼¨Qø˜5±Ó¢c€ Ã{-ç tïXðUÔíØ^âW?Zt8Ç +nˆÕ¾8¡6>i[MAŒš†R"*T)½ws¬‘ÃßæÔò>ïq6ê«upná+2\ZNziª– ¦ªp© SÑ4Ûº[ñúÚzojh—Z$Ր§ŠBÞö—¾ÿÌÁ€aOJ ‚8÷^¯§-;ÈžëF¤–áX¼Ýæ w¼Ö‰rÉJ«¨`޶ǹ¦¡žiÜØb=À[ÇþŒÕ”ÃÔä¶ïQŸ§~P»Í^~—†)GšBãX!F|“N‘Ht­­×íü°éûY§‡±¹Ã=å€^ t¥úËuê¿&áá,!“ F€ëì¥\&¸7‡þΛöã,6€r`jµ(«{'PdA•i’6êqÅØ~°nûGf¤æô,CÚ†§Ž®—''›'){{ ú^͓¢F«ÝBa׫wû·Qxmtoè‰lõŠ­Ùû3„Žj@ùònœÍH—Ú­øÍuíèV©šå¢šÉã]ÍÜ[Ç®‰{¡X«w¦k€ÖÀnç‘CQÊG&utñÜá®Füü‰ÖùV«|¯€ÿ.;c¶›Kï²ßÉ´CÉ«ªÅ\ú¡IŸ'rÎçÞhíLO8¥‹ø_"8J]ùšv`Ñ9›£vÆÐ^Y…šï.¼¥ìcÝŨ ãû0 +ä‚#ç€øá¯Û …éy Èaƒâd1§í¼‡"āÒR ÇkížûB\i{Zlß*%o•~>A´m¶[3éՔ“r"µô6­±Ùz@* ã²ôB—ï” &‚aa´k„´¯D”-uö`bøõ{SVj8ʐ¶ÒÂ\Ve—4;2²ïlÒZÕÍôù:®âÉLÆË«âÉnw0Ÿ‰ÂH¥Î'Çw;2îVaq)6Ä$=|½!·{sù`8¹ †·Ç–.šv¤´¥çE/{à:¡$G#à;3àñ u±L‘-Í<½!–>Ø!ô%­ëÙiˆB3˜vÐù1^­P ¥°³>šƒó͎hl#A5~³k®öÀbNÌNêau¼iÓ ÞuB«½³£ö£Rñ@$ðoƒM ÓF‚aqü¬l‰ð䮿‰kêó ß¹ÃÐ/%èa9S婜w6Àq iÞýÞXe±ûCn×MKqô€6St`™P¦AcÆ>šÍ|›Â.Ãø¬%»WÍ^‰¹dèoÊLÓ?bLpQ¡‹¼ÆóNP&ÉòNž)4G ©£5$iM„Nˆ¦I®†%¸ FÑcƒ‰(ðÊÕø1ijàdYv*ú8“oÜ.Ç)³|SŠbf_Õ?›Þ{^ŠD·v âZšHýBÃÄ-ÝøÃl{ÔÐ1¨8ÈO5e–™2a„ö¢%ã6‰B‚:2œ„zHBµØ«Ò&€t÷Iø{ÿ/Ƒ°‡¿7ÈHÜsß,M=šÿ$žöH{üò ù¨{ôd×Û¡ïþù4ù=ûâ{å ˜à/.¡†Ë|£p㢺5Â0úPø}V”>5pÛö¨ o¦œQ/¹ ìSý¡eò‘”¥;óOõÊP˜Ê–æG”É(‚43¢ÝR+FúÄqû“øQÆ`̧à6ÙÈÝW_n+®)]z5ÃYÉò±%Ÿ÷ ‰,ÿûñ%›¤iQtÝ,Igr–$‰–ébK;4´”ÿ>$³æ"k}±Ñþ ¢#~a×@–+`MAÙçpD$éƒFíüš„ÓŸ&4~z%Ô'¥Ò–DԁºÙ½GO_yØaëç¿+Úà} $äw©ÖÍ÷…Èîz8Ð)â­ÃÝ=3ÎyPHï˜ã•¡Hã ü¸¡§LžõIc˜ÝËS¶¦°-T‘>± ‹SGÝzº ˆ…ø*ÝRXÝRXÝWþ)md⼨鵡’ÛTÀŸÿ5DÓ³T´vϒ÷D3TÌGC¦‘æ?ÂvÙìÄäðAÄÜ3—¦™*–ãÒPÏ;å¡Kó>~,–|ü„“v;œVMŽÅÎQ«':Ç{'•c·“ëØì'òÌuóùv>düóR0Çy?Ø1ÛOæXùÒsìvR}‹6O4ÅãœÛ'.Ù¹ì˜ÿ3œã)Í-Îu§%žc»’¡c¸’ìØúRTLwRYö>Œ—hÆÖKµc¾’£ci%VÇ×ûót—ÇšØ±]ŽóXá4;V7É~÷ //ßaWæ»ü.;©ÂßÑ¡ÙgJq0úBùø·È>zKç>–¯Ÿø}¾Ö»Õ¾}ïY4N!®Ó˓ì4__toè ä~nìí?“ 4+ÿôù¡á ÖoH»Óïûi¯s؈¥«e%ïò>ïª|/ö‰ üü¿­àÎ97ºsõ°ÝŸsŠ¾ì¶rØ¿Î{²FÿoÃû?—ÉðWþ·‰ào5Ý¿ðÊþ\¶·kö}o³äÿ-×¹øŽêµ»*¬Æ5Sß žÂëwQi›ãVý_5·ö ÌnÃY¶Önµ›­m®¶ÛZ÷[q­þNš?,"9® ÛçÖãsÍþ· 3_Ӓéõ>ï2ã ¿Šg÷צºsÐJl|û®5;EÿýDŸxX‰ößå=»6kÿônÅà‡óaŒñÝ#v/õ ó3ÛsþfûÃv/gÓ¥çòüÜáÚÌ,ž¬¾pþnrt_½ð)‡BA¶÷Òá¥*„Ùӽ­%ìðr®1ðóE}@Ð#ÈgxÄäÅ4’Í|w(@i¬4A ÿ˜ö›:·›°s¥©±Ý~5òhëYÍ6î¢<:-ǦÆô‘ž%ê¶æÜ ©;ìKNë¥ a˜+;¸Jû (¼î¹KÜýô©ˆ…õ +”A³‘ q›vÎÀг7óGnšÕÆ4P$fò‹}ð™s¿=„ èÇ·©Å«Œ ¾þçWd´ÇfÈÅ+ŒÝ™V¹Bá×8€ßëï ‹‡ŒÝœh|VñgûêÒõÌÑt´Le€èÓr ŠºGf¢&楺Ñ4#t«K ;ð ËD°ÝSÃP¼Úó¦% w¹SûÓF\ìÕÓ*¹Ù®¡Ù¶ +Þ8Ap1 ÉFᗠnë5Æ—0ê  ºB¦€ 4»AáJ»·G}EdÄÄ]Q蕯ãÁÀIôß¶™c;Ã…gø®¥Åi<ÁOk˜!uZb9 €›+à9ú÷•!¢§DÝþ`á1"_¾añjÂÃnã[vf?ϾØïpÍzw»‘3´:e-NÏ JYœg—bÌño€ ¤çX($)i³*Q}&d["™NU§s%"ï&¬Í/' dÄí4C¼œY0)ŽŠýɍ€Í’‘²ŠjfU°‘îHpÀ½òð}‰Ô£¶I‰Ð¦YwSV™#L »…ä{[­ªðĝknJþ­ªÏ +Q™ù-'Zeie0V‹j°Jˆ8Ì Ôãa@ãF!©þ˜Æ²Ö”ÊšžãЩ²+Žà| ¸âD lˆLž'*ž\ ´il{±®ç¢^by–G¾6¦iÜì[J¼e¼YŠ" »¿U=ãø.mjÔed5Ÿ/£eo" l­šÝ6\nƒ›C*x$ÙY«tÍ‹z×ê Â$ßaiSÁ&Ê[”³= ²ž°þ9ÙK0"¡C¬|€1Ÿ2#­öÙPœ0aôùgˆìªÒšö/‹&UI–§[¶Äžæ··R(*¦:t  mRѼV”«˜n/ú `WKÇÖl ¨Ä­Kj5_èڏóúsƸ˰ÙLQµ:9Cähuɕ<5#ïdš™ƒC¸¦TþÅh{×4;†eO u+!÷ҁrÔ^ÈK÷ÉøjÞT„@Ps¹º' „È6w/R°HºÀ‡1ÇNӍð:Ó¾ ²¯©f¥I·sçèªi¯FU|A5³ÅÔ¹`Ô2a}6:§HRVZHßÈâcÝ4î¤Ìç ­ „{,á Ûd6íâ^Ÿ ,æEª~Ô÷Ž¥äj6SŽŠHù†ûö~ôS±J‰ß•ûÚqÞ~Bqۉ*+-½Ö7¢§!\¨2;՜;âHЧ€œæ.@¢Ñ€vë*J©¦Z‰¿NKfØRÔ“"%¦ªvªDª°e¤û슜e®òÑuj Ñ·8/ z6íA×¥Â"hs¨èdÁΨèwk_âŽ^i¾ñ¶:(¦|NCŒª;J÷˜©È)äŒ/퇃‰¿3ÆÃ¥Z¥ïzªfÝq4«©_–\ìR†‡BTÑÆ°káieBw°¿ùäôªô²¡;í4Aš¨´·[å=1kOtK«9cXØáöuéébªx/ŒtjôX”Rá*x? ±uží/LØr€dé ÀÒÑèÑaÙæ¹?O²¿(),겦S^º—® #‰ ‚ùȯ?G ö aã$Â~Ž{¼{<]8ýAƒÄæ¥(µVÛ%a¥dN†@¼#ë!uÎiYa[¦ ŠÌÎæÉ@eىFΨ'€ƒq 8,ü»TdÏat?P¼¼­Œ<»[TBµ˜d{ˆàK[c'±d.@Y`%Ë$¡§¡¨ô&‰Ú¥4Nòh›:o€I\"ò3BHH´øIMT$$^!꫉=Ì>uãü@ÊòÙ­Ÿ+¬ÊÊ(a•Wùáqño„fä ÀÐ@u‘ƒ#!A—øIðàqõæXù›r#8뼊·¾é ÿ•¬RV4µçÐz‰„RϐãÛ;š¢œ ˆLžÞ5³¶wS’­Ù-Ñ :qa'"ñï¹ÉŒbØ¿C|à™•Ö6ü‘`½Ê+s¤ÆÝµ]ŽÒwãdà +U7Ö6[}xj#³AG—3¿Ãwwo™œâD– $¸aޝ,É÷-eÜÀì\œ¨ã4ïIŽtë1qC°zj´P1îø0k¡ÐíÕ=ø„‘umRqK~³â­×1Õ|¬)¥gÜLߘY¨›fp"7\£«QT`‹“¢ß‰Âƒ~³]x䱨þñ1‚¬oÀC<*ž=н1PaLï¯VBoº9Wl?Lç A#ڊÜIg=*™@ϳ÷āåÅBù±ÄÿFÔí#¼ä:[žÊ¸ÐÄÐÁÙ/›^ª”×s§úØæe'Z0o•Ê0Kµœ¨(Ô"<çR@k0bap¬®ê6wök†ð‹±‹%é&‰/‰Ùº·1äÂÑÔΙ>yèGÕ©&1©î¬$ާœå®EËPAóL‹–#iydÎ8˜?œ!nIqHT©˜$„‰ ¤¯Ÿã=Ÿ +üîÑókÂ9åLu[¨>#Y3RWIyñE]±'qC•p‰‘èOJ »Ušór³FdrL0*‡8$""ýeìS,¦¨+¹çtɓ'uE‚+ì(/]™^m”È¥zƒƒàe,Ë ³ŒÀÚG¹E¼8&)W¿¿Wyµ C¸à ÜMü ”`K@fÙ + —À™$ÓÇìœ}(À©À à«ÐQ +&¹BHuåÀið + ôDE<ò—¬¸©t‡—ý0DñNÒú׿¿³(³Å(úlˆ=ò¦Èƒ®OýVD‰,£¡K(ãèÊ8ÿ×y!ó¾Iù¬ŽU«fÄÝgónÕñ»tÖrÐÝ×xp ºîk¸¼=!ÿ›ë[uÑã;Ÿé±àïp#øWûhªýþòø3xeñh~øidÛÿٞ¯ ¢Ã˜iÈŸ¿Èõu ûÎ.Kï|«0ï"w>½b†k³É®®“&¿‡O×Â"QÎk#;˜hÕ¾íç²½½à‘`”îC*€B•Y¢,k¦º¿Æ‘Ó!›8Á PàZäPgPœ@:îy7 ™‡â4D¤å`Úui“ñÖAN8ßý¿4$wgûî€?—ô¹î­ÚåY ¥§Öi˘·wO ˆÎOÖÌo50 L+çÛ½³äå<ô‚y”"š«ˆ AV¤B½2q̓„°.TF!˜Cô…µ4ja î ԆjBN|s¿ÎLd&eþˆoÞ¦XpÁvI¯áØ,¼¾F;ì³éÓ$–ÓüΑ¾S+(ž3I§3¥½¯¦nÊPÖӑmÙOzÕôúš$ԝΌöF‹ɮϦ^¯©¢Nƒ8Y;É´Yð@Fxµàµ4QŠl +°±í‹Ÿ¶D$Ùv˜•²8öÅ%lLƒÔ§SÚ&ÕÆê{Dôî=™ÒNcòSɖ¡8†gKXƒ¢îѸãuï°¢’ù|IH£§uëmîêm÷6ßGÜÎfµmÆ³30’Z$œg1%ºÏIÝ×uké\#[¼ÛhlkTë­Þë%q®ê(ø1P|ü páDpÀ³ÐøZ, O€H žá|2xo/ÿ¾ÌÂV§«{[\%oƒ†ø¯Š‹à¢=/ËދO÷÷æÜÉmûýÞÞÒQ:ÕeN@Xp + €4@9 G³]­Cú5píZ°ÁÚbµ H 6ÀPÉÚd(d(d(d”SªóakGi µ µ µ¨jÄKaCaCi8”WuõO]RP@t€J+« +…]`¡`¡`¡hT.zë… … … †¶Ú kºzµ,€ ›¬v=ìVíŦì³n4wžq³ºÃOâØ%'¬\Yºý»a÷Ht;a›âÁÁ̤äÙôXp + €4@9§«[U“×Õeã»_ ùÜmª‡yº}äÈ7mÒUÁ)9ÃÓijäÀ¢r˵ƒÕu÷€;–xúÕ´w­S¦}F]'â«Ì²w5Ÿ++ Ë‡qúíµ)Ö;î”+ ZhÁ Mt‚Þ‡ Í§Ïè8ËçtÞ³Ä÷¹R™í=Ðzk6¬P;6]|õìØ|öY~Ñì°Ëg²àrtÙ~m—^vmv,Ô>«ÑÕuⲜ(ؽ²%‡•\úúŽØ +¯¨õ#Õµ«l¥•—ŽóÕ;ãÖӒWCzr^wYÙ®Úw^n«Ä +­b« Îö³´Ï«lúçzÂTXH)ÝrÁ€p+jU¬ç€jW°dР€°€Õ =¬®Ïèz Xp + ©míj§(fR®ÑBGhU+‘` +‰‚XʅV¦Xi¨Qù·ÊÕ)JùõV ©õUU Xp¶´¨Qaêgç»nÑȆOa—ùã6ËõÜ=·h*°à@) XduP€¢H†±D¥@\ˆ + 0+l +Û¶À­°+d +Ê*°à@)P®¨Z¨Z¨Z¨Z¨Z@ àe@\ˆ +„gUXp + €(S'YP€¢H…’Àj  .D…l`À(€R Z'×Â×Â×Â×ÂÒK +€,¸ +@¸À €Q¤Aë!m¶È[d-²Ù D…Xp + €(XÊ÷°/{÷°/{÷ Uv€  .D¶ ø¶@\ˆ"v+0@)–Û,›®X„,QÚaà1«ÐI!@È;Ξ³Å[~݂ÓVÍ«$IÏ<´u«vÎÕ,l´ß,l–-j–Šo2wõKWÞ}òZ»´ÕlTKH®yKÍb\@"^¤Zâ´ñjT呢KQ=R¤´B‚º,Üå”$€ªØ;œö›>v­ÖJ Ö,–Xu¢ + +€,¸ +@ ¯Cå©¥‡u«ŠYÔ¢YÎÖÓñ[ZæÕgŸàޒ¯ "šõŠÅ:-–¬NͲÖýúäÅV¨Z/×-Ñf“näÛ ¼]y®¤¿î…zÉÒ´6gYŠúíS%3Ô~ "ÚEŸ ÚT`»]±OBËdô—ýW@€°à@)h3gVÁÙ` ¼0Ê@x´J®Î…fJQVu‚úÔÀ pçJ…YšàúϨÐçµ h­E»µ2Ñò®³E²_<˜bÀ €Q¤¢ÍÒШP°úkPÐ *z«5@$¬¼Ò=¢ -=Žž…Í« V®¤£e¢EÎÄԙb³|óØl·M¹ÙÐÔ4ÖX,Q˜ä&Îm<šº–mæÓ–-<¢:ɯ$¶…y¨kÍI´šþ&Ú'`€©W´õÊc(Íwꩯ®Å•)¬¦½{@’»¨Ó¨¡ì–Fç-6eLTÓ4ÅÍ2‰¦R4ÍLæšf‘¦s1ƒLdÓ4ÆÍ1ÃL¦iôJ¯nF ‹Ø&©ƒ«ÓÿW‡÷zfÙ¼Œáòô¦-KæèúݧKK©íÞD›ßg§‡©sjÕK/pb'ÍfÚ¨Xæ *°à@)h€s@4€9Äh'ÉXàòK @ì<Ù,x¥’ˆûê\ìJIEÿBgl2ÁI)(Ú¹Øñ’`ÿùT2,ñ(kÌ¥G\iCYšlǚ¬ò†Ê¹µQÞ<ªy(ó®v<¤˜j¹U ?›ȨêÜÒª­¤?µ›ee¨euË*&æÕkW_*ÉÑ6çcÃI†‡çÔ2kå¸ O×þM9µ%M:MªL*0mmµm“K&œ²§s°ÖHAÆ0ùßgÚÚÑ*– r ’BÎI|Ã(Y$mG’ ¶£‹w5µ ‚¾›P·|\‹jëÔ.·òœ$}ÁÂZ¯vqäÃòôðFÑI¹Cð&1I&å ~>€q«VLvŸè:c¶ñ?¥«3í¢DÞpùy‘¹ûR‡ËÌ ÿú EÒb²7Ì[#|Åä¤ÄüÁ(>òtƀ ‘ æ‚y°yC“ r’"J4d)ÿ|jÔ5s~Û¥ŒåÁÌ›ýtyÈ󢥿Qõ0š|à´±°0“ƒª0•>¿"@ÆXº¾kbd|½›¼Í×Z­AÎ{ª©Û@· +øPQR&ùcc¿–+ÆOÿïæŽñþe k+àÜíý/&:UwZºãWn–ŠN`üéÅJloO¯åɎ…hz—d¯³õþ°DDÝF×vÂw_UÒÂ>FMÓ¡t³=¯éo¸kž":p9•¿i®«­=÷»iËÁùNRnå6 Ê·Ír¬V‚Ü5ô¤áÝ˕ožå_æ¹W+A~úRpÍ>åÊ¿ÏrÑù®Z%hQᯥ' +8®Yü”Dó˜ja€ÃJ9ßôn¿V݄mOä’õÍÚ³5j´ª$%E D¢—‚ÒÖ¹(Ñ%&ƒÇíán£Ï9ÜDÕmܼ + nçڒU~q¸p‰2·¸…~â13ìðYήµØ”5Â识þVªµ¢Pç D®3Ôv³FŸ.é LÙ¾{b*ÜûUòéÙOä;Éþ5ן`Ðr†®¸{¹P¦õz¦gÓ»jÍÓAËa:~z8¢Ó§ߞ‹ú¯zýW½~«ú/Õb¿Vï_«w¯Õ¿Eú´Wêýëõ~õú¿è¿WŠý£Þ¿h÷¯Ú?¢ý£soæŚ»V³rØù%Ê=ÝZ͖ÿ®Û¡;)A‰hJöèJoЕ¹·â nݱÛކ´45øhyô5á¡Ñá¡Éߡѹþ/?•×ì:x> Þº ÿƒïH±É€x´$^ÃÖ•ð£Ø¼>oypÊ¡›=Xjñ©åLIK_Ï-%.EA TH¯…ºÅt° …lWVÕ­ kׄµÁta.‰Xν¬V7½6zÄUsÁʺ8gr$cù‚ÐÇóœ>aÙwþcRQu«o•wïæ–†¯4îf Ã {¯[–FI çQӞ̎>îdÜÙØFa>[ÐL„¤…ö²=½‰FÈ#/$šD»ø}„rýtfu¯=–~eFì0l(Ÿ?˜VSù‘­Ùöö¬‘b³SØÃžÞQP)Ê9HRÃ4½Ž¸!@3ö}Aó¨ D„¡™Õ„Ù8—èD½5ø'lú’§) 8@'ù¯Ÿ*ý݄~L(>ïՃÇÙꕷßà$~ÊnŒ2”ñ`ÎJÁ³ê(ðËþ͟ÍxœÌÈϤ€Ž^H…Ս™‰£„qùez¿*§ ՝ں‘* Ýû¥˜Q&Ô7ÁÕîPrw6¨ç‡sŒ ¬!lßñþâv⹷໯mœXé–1ů;*B9H“so9êîãY›soO,p®âC2}¬‘ÂÞl†jõÏÒô¼¹=¬í¸ÕŽ~öôsù°pé^ÁxV®xÿ5g ë›l÷í[«¯ ãáI”Ÿß5UísŸ]ê­6G8ž\ÿ&ž½fÎvëk«0ßéäó 2¤‚ð‚Ê“nM¸©:"“lRmÃI¶)6ʓV;N„4š(Þ5a´è N¬þc5¬Ó9éÙ¬Ìì܁Ïp9íÇ=¶Ž{’‹v;G=ªÎԜÒ%N—%C#ƙf´ F"BŠDdÉ%”x‘›&QŠ“™Œåäc:@ùŠÆvA3ÂåÍÆvIŒì¡ó׌ì²;À„ì!¨ŸÇj­cŸZÉF¹*#Ò kªÓ¬åHJb›ÛÃñ,š:héÌw­Õÿþ·´iЧüۉ¦W­û©¦Uôý×ôý_껥ö/õºfG‚ªÿZÿÙôÿ_ÿB¼Þ~w&BÑJ›ñJÿžžùG²Û/veú£:{’I©§™ƒ·… “bôåéôÞÞÞÃ:tÃBȎÜÀÿÆÝFÚ÷ƒÏ°WÕ6^R~“/¼þfeø%`2CÜ·býä׈“\Û«–ËãÛiío?õS»'s"…TaKÐx>àpïà<¯–„;—ÑÌÀkøo°,Ö¦l!È8…SK7ÍW,LC½L¦ +ÑMó1†¬RU~ +úÒK`›f‚ÏšyñÓ}î(,e¶6ÚQ?2b 6ýÚÉ¡Fó çºÔ$–ël7lÓô®Ö³XÐx÷']´õkÐO™_«êÿ‡Ù6 _ѐ;1[¹˜%~<¸ÉùIê00Õ×,ÿ×Ìð´ÿͯë±ñù¿Åýñـtt­×4úكæ&^±{íÞ3Më«öï"I bÈkÁW+s`YXQZ.+» Çõ¸œ6¶E€>_2‚hù†±ëƒÓc+#à܎¯ +i 8á>Û¹°§ê¸oë,Ù5ͪ¬ê½!høîv*åƒ2 §äK¶(UiØV¼"„Õ¡5hM^W„Ú0›FiBm(MфÝi²ê¹dtžešKöµ[–vuiÐÏÔåÊþu=ìÓEø#Gzõ^ï$ÊKÅù¯úãüÚQOì—ý’Ô>ý +fÿ÷Ï´˜%FŽºñÈ«û‚½ÚU,ÛÞt¼^¸'iQ4{Þç­¢Uø¸•|c½MĨš-ï:gÖJ½Î%[D«ñq*øÆ„¼JšW^oÖJ½Î%[D«ñq*øÉV÷£g¬ìê–{J„”ü_—µó)§õnµmãÁÈ_ûb#iªìà0 þàN§í…½œ†¨[× +m릡V‡ú¢š…êb¨;%ª)¨Q† ´WúÚÒMCJ*‚ÑÜ>FKZI¨iEPŠáüm4šƒQÔ#¸M”ÓI¨5 Ax®ém.q¸kÇpÿÇ)´¸`0wÃ&)¨ÛM¥Än7xî/‹-´¸€"£FŠWˆ£iq[Å£Çï´¸ )¨Åqùª6—¸Üj1Üw³KŒ*4¢¸ùê8—ÈÜzQÜzHq.;‘8ô¢¸ýeKŽän=(î9²œKŽäN>ŒWî(â\w#qôc¸ÿ¢S‰q܉ÇъãýõKŽän>ŒwÇ-ĸîDãЊ£ü*SKN7„uó̦—_û”°­‹0—ü@¾|%ÿȋ¯gÚS¢x¡u½p°dªÂ(ÓÜåÝvÛæ‚´íÄô0ðεŸ›;&^ðølTô¾°ÚнF +?ºÂùÑ©‰&>h‘‰#XÒdbHÜUÞWvÑåwmWÍhò¾kG—Ý´y-¢”|Îí™ÁGÝjQB4fΕ#2&Â_ƒ¾_…ÀZ†F|éqÀ3"v#2 Ž44^VýG•¿Qåvª<®ÕG—¿QåÃQ•‡‰?1)îm¹š:^ià8´ƒ ?˜9& vàðVÔÂ9(¥"NéðÎÉ"M=¹Pà_O.< ÓÊɆ0¡( á§N“+{{}8‘)A‰JìHêÆ#µfîþ®ÚY0·‰ýx>vbmó# #æUr!³LŽú"Š O¹·þ\ + v7Ÿ˜aâÑ[¡!‡‹EàÌíkl€È@ í0[¶¬„lGFTQœ )€T« iÚOjìj֛®r,Û©,`×Ît\S<˜z?ÒöEò¡Ì»»' +%OϺÝg×…0 ÷$—¾b2¼U Éö÷ÊV·èkã±0öìœ +^ö¯B‡8Ázs¦9œÞMwø9e]Ÿ@~-÷Sîl&ÁÛ½wÁ¸¿Ïr÷Ù½»•×¼«Ø/ .æÝPä3ÛrÔþÆä³Ä䲗%žó’ÏqÉgèrY‰Ék…ÉÈàrZârZK’×yÉk¸äµô9-Dä·ÂäÉàr[âr[K’ßyÉo¸ä·ô9-Ää¹Âääð9.q9.%És¼ä¹Ür\ú—"rið¹9\M>'&š\š}ç&Ÿqɧô94ârjp¹9|MN'&¢\šç&§qÉ©ô95"rjð¹'àrjñ95RäÕï95{ŽM_¡É«soO9îƒÖñ92\ÿ>b?áQK<‹<…$TRù¯™E*(<ðà1øf¬à7À‘ýó}ó +8ý¶¸µœÇì±à3e)Iµ›•7)'œÇIçšuP}ŠÉSj ú9½ÉSL‡–lµ$vsæÕð»sR_Çøÿ(åIz{åísb/ßß,y¹‹þD—íæßšÝ†1kY оBô%Ðs©èTS°nÁ”Ϩ¦á· ¤ÊŠ|føÉ?Ԛ ¯7“mö±uSeE0&!AóûID®|ÔLˆb­Oð!å՗¸<³e/÷r€•¹·NPóÀãµTȆÕï‘?ÄPÅ]ìæEç|IO1—»ÿƒï‹T¯Ç—"µ»‘„Û¹°'˛,<ƒ‡Ìþ2o­I0Ñ¡åAP¨Až0¦ f›ò~T¡œ”(H´>TYŠ„(’ß\Ûq֊Êcä†%±˜Û¨ ýŒ20)ôô’? ÞBGåÊHÇ÷q\‰¨¤zFÒHüÃy‰#Âl)ï÷’?„ß +GñâHÿ¿GüàM¼‡øMøR?’OÉ%I$”Ï?§MÝ\}p0´é”𤪊x†Ðm<§ëXŐÅ"›|tN¨¦™aéI5tΚl˜ç%~E,ó;®˜à„ÈQbÅ9üjzõbÝéÿ¼ñaó=°Îøø[i-†Ÿû\¨ +ȸy|h´3§NÜ,·D~´,©'îÒ\°É„*¸ ëÄæÓS[ È޹ث  Ï6òŸ; å:•t+yú•ô=ÿíZj¹ë7Q馫•M‹/Ò^®ëòY²ójAԇPÑæÜ~šƒ° ¥}}Gˆª@‡l9uG™Ö!¶½µn³r+´þ²Œ°û²Y)YÚeç+–{ë²­Ó×ek§e¶®Í -5š`š`‘–&JÎ%ºÁn±#yû KVî€6ÅFب´ i$ë*’W£6?d«ÏŽœÛ„.‹}ÔÛöE¿ehi6)Ý+É1] º¹6šuã-€&¦Ã£µ°óJ5b얚gÐ.ž<`|»DØÉ×­gš<_Ó¾ëî¨û,Û-CÞ«©tì7jÉQjÚr̚¥K’L£ãÆË1ÚdžÂÓ]{ZéÚ¶øcit´~×QG: +Wq·”4±Ý‹Pwƒ€T^­ KÊ`°yúy7m¹RDdûãIJ3{ +CÞ ô½/KëGáÊàÃ¹ìÃáÌ'ÅÉFGdu¦ÑµÙqÂKfÑieQ×ȟRJMìãî>£hxt]¤•¼4QØ-I= +Msŋµ ’»ž84´õô(h›¶ÅAÇeöí¢DL”"ì.8©úPÓò”ÁQ–¼“$¢D¼_”îÄÿ«<讕;t¹óÉcŠ `F¨ô»ƒlªÜM±*Z—öª]úª§ýª¹¿žÐãÝô)Ð7f9”ÛtGº”ªöÒöOf£4Ѽù§»¨Ë8ì¨w¬1lvo˜tƒe›JËm2aèª*ŒÀ%”¸£/–Œƒ´°üîIæjú¿cÕýcÕ4Ë=[M2¿Tv„çÖÊÕu†ÏsÅÂkÉÙJ†H‘”sÇ 0){¯Üñ%LNÖzq24L½€h›~›àÓ`¾mܸkÓóŠÊxâí‘îÖnÅ{c8؞l, ˆ˜œœlN+û57ðÒð@¨o¸îÿûÑ0‚§êe'8 z;Ó¯°.[û7і‚\P04°q£d:âLõ@ Ѕ“A/à܆T”'ÅøX¼7§ø£c¿w°YÏËvX0Ø Â?êlÁH‹!¸~ ͛ÅFG2þóÜ(Fóȹäì^À<¼[ÈÉézÝ)šéû}Tf^ë^•ørïÜòoƶO¦Iòo'ËÜßM#£ëtú"±å›§³Õ+kó«õº~ŸKJ~¦z{~>қD³gn§¨Œì)íõÇp%zÊ Í͛ÝAþÞ¿î#ÇÛ·Ž3ˆ7ÔÇ1Jʹi•»hLfëØ/{Ñ÷ 6ù…!ð žñ ’obðÈÿg­}##§Òèàèã]’QÍÆvQW‹e ØÌñâÜEÛ×ø*ÈÄÚl‡{k¨`(¦¹§ùóÇp‰àß.87€yrb~£…Q= vžƒt° Ê=èû›ÉvÝÖßAh¶È¢4’ û‰-ù‘µ‚WÚÈæîh²1'eàÞŽÐVATÚ +‚E:žÈ† +")p-PÉá ôýO&ëÏØÈû{º{:9»9[¸ðSÏÜ÷z²"ŸòiClf€à0’»">£4ªJTºJ\I%RûTtuèó¨ýMzKþξŠGµ¯£Dâ×ÒÒÿf¿9ztßv€ åûû!•±a›7ä¯D€”<å ì‹lYé«é䦮>l:„KrôRP8NûÀ¤rúá­P4^`E@"  T¬q÷=ßSÎó€°Jx`äÌPqX`äÌprf893˜˜9ê&*Cp AÀ1ÄqX`æŸË˜8®89 •Õäºl)KiMÆû¢{£òCJM“»áÂdÔº£Ï5 dž <9 PD˜bŠ$v¢’¡öƒŒ!ú±E$HLS‰1M(኉)[›u&»uºfwϝ¦Y¬Í׉O—õD/òŪ£tJÙžT9Dh8Ñe‰ÇZõþŒ÷‘ÑÀ‰B” É#%¦Á](HԘ²Ë€|ØkPF™“ùIœJú™ì¡ºÁ2$%frg¡Tà?v_×Ùb2Óáòh˜C™sn˜ðÙ©>¶8®(ñTBò¡”U$¦'æÇÎ÷Ž'E„À…w|ζȘå®_· Ãy/]è^µw{äÀ{ÐÀuwO ;V(¬$Ç£`"°ÀE`òáÇ9H9ðãòB`2©€Å¥œ8û‘V8®üT@rÀƒK`Öã€ùðë\÷ýµ®{µÏcÖ¹ìz×=Zç¾]k†ÎÿùÖ¸Q#Ö¸ók\÷þõ®,¤Â3˜ZÉÕïélî çz¡w²–yÁøu‰=ÏÔÿÖºŽN‹]D¹¿“L +öV--ֆ]JÇ¥¼¬z[ÊÇ¥¼¯þk¨›âNÐÏ® ÍD%õ÷Ý£iÇþûíÝÔµ}º–¤šm¦ÛmèÚ`ÛM=I6˜›~[º·tz“Öõ6Ø0ƒ@š‘¶¶'ºøÀLL‚KE8ƒ´”½Úç.’Û%À²ÎbN‘0‚L`pÀ#$'q@ B:pدßïÿïßn¤–¦ÜèGÙpË'†f\ë™e¹ÞÝs:än^¥ð^Îð[™råð\¶xÏ%ò_ þ _à…þ ÚxzÉ]’uÖFÊ— $˝BÝõtê(ÝV硹juTa&ˆ%©Ö':(ØÝÀáFayåÍ%ø$FqŽEPytùAüùA‘O”:| ©0*Ÿ(+Såù©òdx£•O“)ËïÓäËÞ§Ê Säù ñéE!FxÕjtÐ]:M“ʍ]âŠK¢È2vaºO*(¨‰Šfc &*.3&çd¼Ì¨ÎɁ™R“2¥;)c2ÐÆ¨a¼ì¶FŸD]’Æ·Dj)vJ~¦·E£¢›íeFm¼ÜõHá)6°ˆ9 „§Û(@<:,ó2‹{ÌÒߔޅ€ù…˜\˜ÞW&77&7.LnnLn\˜Ürcvçda{z3²7&7¤;#rczS²7&7årctrcsòcy˜ÞG&7?&7?&7.Ln<@n&7×öŠIŽå߯‘¹6o¦u¨‚œ-ÆÈÑ*@£7/“Èx°MG+Œèÿ+.a-&–ÂVD´˜MI‰Ԓ†TŸeK†2¥0QŒ‘•. ʗeK(eKø¢f®XPRœA/³QZÍ«T¶i' +} ‚¢“arLMDĆ4rÒHcK!ކC†4Æb;Ã#ÊYÁòÁã_Î/¹S,Mß·”ÞŽSzIMée7ÐÊo¢”ÞšC{•2“ʲ«. +šÞUÉà¢lêG¡µ#jLFÔ¸´8´X–à0¥Šú‡ðÇÚÇ×ÙÕ9{>ɰÌaéõb°j”.­óÇK>;b{¦ñö±Òi.y«ªUxSëʪš´ÒÉ$â¥X/ݲJ|xd´Í¢¢iäpB‡Z9u¬~>.¬ûúˆY%Dm¦ bÕ$2g.œéÛA×AÖ¶7"’ªõªÇ,¤ã+ËãB{º—,kª\¯xî K$¦à+ªªlè’qÖ*6£ܶ¬rõÛe_Á|ØÔ|@m¥õcg5õµS‰ç0*j›; ?ÕÖ8̙Cg&‰æÐԈ=ϼÖ:ÐY¤Ò×n›T:tåś'U•­ñ©).¥3;³T_4¦™êlåæ™ñÓgM4Îíª-Å\&rð™ÓBgwñ™¥×n.k'yæ3²ë”ó™¸LkòÙÕIÖ1†]fŒ êܹM•^±øü\ŽˆÓUnuUŠKOt:â"ÙO=ʼbº6Gx ÂήX@,$ƒkCÒp™¸]Šôñ=¨ÃpGÁ¬ûa5êí-G2"&;ìË­  P?C,p;CȗÔ@!äRÔd[ݐÐÌxㅟÈ@bÉäÒÁÞê*¤òX¢¬ñÅ2Ї‘¢ÁÛk5•F¯ms.}º^}ëÆŒ<ê¤7fy" (êª +“‡|êÇÂ=z<ŽÊBwƒàȀÄäŒó‡)ŸcM$dAµâðöXûS8CÈþàò@ѵùžÓç`Ô9¨dj®jŸDs‘ߎñ8‘5å‡5å-çD´?”‰ÐI4CÂë×Ö üDW/wv‰5KšêP„ù6²{ƒÕÀ–à7Q¨ÒðßòùH‡…ÙrÞhó0~À©åì•,Qkl¦•lnsqÖVI)€– 1+͸Ї9ãO°JS–t€³3í)¤˜ò€q²Hš¨µû(̤£Q%]ôÚ'áÍæ©¾[Îtï34.\×ð¤,ùï;Ü‡#MïâhI‰Noš`É£}/ éÍá g6ç‘!!åŹ[& Îo7F“¸¢ìS€³Œ´!.@â6ãi/Òff¬úBŸK”§²­ñò3…\Úü¸¨êä™Ïe ¯4£Mv¯µ!ïxMWÏT1xj—F—ýÊp¶B±ÈJ/ѳ½¦ðTò–òÁ(Óÿ'¶/¢)ė?ÑâËüqø Xo¥þ8ý–, J–fà¬cÇ® ˜*¹¹ÔҞž½Ój'5CU˜ ¨îŒ$*~HW’9î†t~m+£Mv»Uá|c›”ÍÇ*Ž9Œá óL +®·Bv‡e®´Ó_Ø'gqZ>/B’®Ýö<›Ž†«"n:$¦Ö6¥%¥=ã£3ÜV¦‘öÑX–‘µ2ÃzŸ”$d°§^5).4õ£AO„0„£\Žú¡„lÐøKýWéXnjW$®g­ k !(¸¶¼q¥_²J€¯dä¼ÑzüMXóHV£ÏµÞÄe+žÔyt˔ºÀ!·ïœíÓü…l=Êô+ÿþÿwöu$²EfkÝôZëŨ“íÜ]÷:9ž•ÇÓ©ÝØ²ïò:O¸—pëP—;¨üöŸ²Êÿ‚!#GÓrÐj‚»p|Äåe²¹«ÿòl‰ýۆçB’Q‘f à1ü–S®¯þ¶S¯þÞøWB‹†çCïYN°G"bւ6c˵¡˜^ø &®-µ×å‚ڏø}ðFtÁùÏ֏`ÿÞG+˜µW‘¥d}¿+zŔ³X½ÆiMÇ'xÇ ýGÑyí¶ãI"ýsû#'±}ˆyÞðz¦[× +Tázã&=6=}³Ù§½âӉ½p0Ý]3ؼ67oq<>ó½Ñn‚ši&\œ±™^H·ZoV,[‚²P׫džijëú•Ñ%¯W‘]…EšŠžxRê×wޛŽ³Þ©­ÈÃ÷ ó_ÐådŠ.#Âø}n{“8špëí#µ‡W¥û¾à·!áö}H„ yo˜!#ÏñF˜ô»¯3rI1H›£õ–z>‰«"ëZ“‡× ð$ïœHrÝˌ3ù"{¦Öõ*ÐùôcÙìã/¦ŽZõÃáãÉqœ­6/$á=÷¯…¡¡½TûgøRҜõMº2Á•|oƒR{r;v–"7žD,úýzQ:¶Ì_|´¤ðlá{FwVµ¬¯Ô¼U’ûöÒ8/TÁíÆ»:õÿ¢³§J%SÔ!±ÁbõK¯¯K ++ H';ø¼' wÿYú5;g¹ ¬JVÝC…/kW+Õ]é ñÓý Ÿ&C—˜ÌpºP\ƞ9{Ù\¹JJF!ßÉFh¹Ð¦.=ʘ1W¼ä&ÏyÈtâEÙÎÖè`Ú5Ç\¸äµù!Áë"ΰ®µÃθ‘gi†šé¾R,ïdÇid¢Îø&ºû^„xq÷ÇB–ˆ)™µ­ô×Çu„Š¢0NÌ¢ŸØw' •u)¿™Ô˜¹(RÞÏbìlˆ—3{U¼ÔCyιˋ±Æ­ƒŠ½VÍ? Š( 3^õН û—†Hà>·sŽ‚…“»2څ’*êöZé* Ò:3swíþ®Ke=ðÝÚ¡Ô¯Eñc¬œ’„Mô1Ùï¥ßí:’ƒ„ÿ3‚˜ˆ_HÁ("…[¸ ôJø ß§ ¢£««q¸Ê_±ú“K(Bv/“9=ô«î(6PœW½2û1›ds§ÿÏåÔÊPÄ<•S)A ãßþdË\!D:ÞED¨xý²µ3SnIÓG—¬©9g_„«Ï-¸a¹à‚g6³=Å:‚VB´h§9ùJk#Á´iûÓh^m\3h«j7õVÛfÆÿ²7þ~Jl¢Û+qRĹýôZz¨¿XXè_ $­ž9¯¶x¥Òe”Ï]zòŒx'‹×š#56¡í‹Ìé¦9°Ž¼–¼xÝuãǵ׏V^¼Ç fxñŠwé·ÝÐ Sçjó¥$š«‚¥°ÖÈÁôaqßíþ^ú?tÐïú"² –û§ì»öBõ\ÛîªÉ©3ª&}‘L{u™›Ù[Ý«ñš\|løø wá'Z×jµuÅµí©¢‘±ñaÍ+É ­g»Ò‘i^ƒÓí¿ØCÝzÀÎ|7WÃÉ[ƒÍ»áZöÚ?3ïs{³ã¸'ýÒÐöÌÝSKp×vЙë*õaê·TãÔ*áÝSŽÇIË-8~t§R×w÷Šá¢}"02ÿ"ûÑG¿ÊÝ,ýå“ó3¢ãBû„‡îg海„±È TäÂÉö¦Ê“Áìût°’mdzÒá¤s(Ù$s(m۝ª×ÕKLs=çF +ÀÒ ¡ãpKÂâIžñºÁy=÷¬»a~HŽÝcÊs8t ®/ÿºtÿßÅvÁèF¡G×kñNʼn«x¦úG>t,@rÑà‘6ê,à&iÐ_›n-ý€«ˆ¼0¤€Ûé·q}«¿1‚¼¶Èæz"îâÀÒôZº·ý×K¸æÚ]ç>¿;møîÚïûêªÛþã~sʓrAJ¾öxÀÆ +E57ُ &­çÅ~ÕçÆ}ìúïÈô#Q~¶Í#{‡j;µ­dþŸÖVÖÂa[WÊjõ•:+ j—ýÚ«iÂ-qoŒÎ¨\Ü<æzA~oÿžá®ü6—Ù,žø"$u¯v13;ê×»¶ÔòkÚ÷-(+èx!"Áîâ÷Æsè—:¡½V)¥Ü÷ý¿³íÜ4¢¥ÓØøÐåëÈÏy¦ ñ\ŠÈ'9”Ò–ä ¯8‡Iºäor3¨NrŶxÑ%ÍX†»îÂï´£I.ò=)OQ‚¡#Lùðrøà×íýRË>£ "÷ÆiÞq¾p4yÛ°u‡èÐ×¹à¾ÀÒ\«wJUTüV½…‚ž›åšðøÊØêa£Ò¬¡6+Ÿ§u\rsh>.@9à©ö(4hJ‹®ººùˆcSt¢h6móÔ{Iö#½®÷1Á+w\N³C6åӈÿÙÒ’ˆ +Å¿wÍs3Ôd¯ӛWƒ~À#sîÏÍkû1‰'þ{Unüæ| £»oæÇÝùÛ™H©7¥IÖáô§‚†štˆROtx:DeÐ" Šix!L-þ˜¼EëIàºËú±Áß½– +à‘è²™Ë÷ãùAË4„˜y—äǽ+6¹3Fu5ë=¸Ê|íЯF6+?CL‚À#ós’›þ"»¾­9 ¿î9ÕÙ!7þMw}1s?ޖˆ¢¶~æ9®ïQ‚S€Ñüö2K˜Œæ©Áê+ô„¼Üm÷°QÇûÒ,-¿ïßÜLëÍȵY‚2Ú½Q2ۖL¢NÔSCe1C]û¦Jb™Uw”±õOÞí´wàÐ | +aû1xâͧÓ)ZB9DA¾_âÉ=z8 øæÅê` ú~õ¯aÃ+%™ߥ$ÿ6ç"ðUÌ}]/gÇÞU®hçâñ× üž¥ Îh¯úÂìox.-tµ¡F@Ö´ºòQ[‹=1м—xLW²Æò¾Û<0Q¼&†f˜w¿¯umÏË8w#lŒyÃ2¿Ï€Žƒ™‡ô‹€!:·ñZ–ÿX_² Ñ{ôCÚYDHRn§á7¡ï`6·ŒïR×R˜,&¼©`6¹œÚ^&^ +gE÷ó‰´&LU¶‘fSùˆó[)¸>‹|©MЋÖܦÞhdòƒ\¹MÍ÷Í^tŒü±•ª"o¼éMôґÈhiDø“„}˜à­7úçM‰ ‰®÷wpòf¡÷s’h­ÄJã<ù5îš÷©ÃPZ R¹ªD‚î&¿×»Â;T<$‡/‘È˜Ñœæ ‹  !’´×]br°ÙåHýÁÒ" Õ³½/sÝ|=Ф~¤¿u‰¦»üopGì©3eJ/Ùñ`fŸÅñªêXÔ¿‹å:·¥º‘0)d¤9Ûáρ=«RҝC³ç?ô%°¦-K õ*ƶ¿¶Ç*mòþõý?­¤B¡g {YRò&1[>±‹H(îÝîý@‘^«j‰c=’‰jU\tì +%»Q]×XJ!»ÔXÕ2EzÀº?‹Ý[±ò EŠŸ[H¿n¢¶¤ FًöFc.f,›ýšl§Ð6÷#Yù"Þ~ñßEáÇÇ¡"Û».O|þ/“Ðe>A¶0TŠ>#ÚÖ©+=.äÎ öóvü­ ¸ÚÕ'jí%o2Vö¡0žõUo*ÎÛ±‚\Ñû¼á¿¨â›=ŸÏ¸Òn òpãï=ÄpŽO~nqÐg™û|J՝ž—‘F8 ®iÓµ^­¸âÞö/‰@Ô94p­«úš=úr½ówì{â)ŽÙ¥÷iªÀh¤³ªs«h $â,””‡‹ÉPB ÑiÀó0 q×¹Ž#ÛN(ÿN—„w©Ò¬ÓqŸtrs³îŽNv}Ѭš8ïò)&löNù¿óX?šßñX?Ã|äÿú†ïÿîrä/ÿáCwû½¼†ïüip˜¿zö¡»ÿòdÚ: {ô5D¸}uºƒ}½:þbí±çðÐ |„&d|©Áq·ëÖčžˆ÷Y̰NY§Ø,9l>wËë5bŸZ¡ú3ÇFÚԄìKCF Ðæ°KØå실À„&¥CQÔp~Æ>© +çƒl D(²­5[‚@ ûâ´ÓÞÀ»q'2ª.ÁI@~ãƒ#n1¿p°Kÿì+ÝdPë®3«!©KÄçäa‡L¥ëÛbÔué9FPFS¯à‘̼á(È>J‰Åm:‹¡£ˆ4p’./ÝhÇeBëÛùgÁ …¤üÆW"t5ÞÔ >·†Ÿ ­_œMº,xm]t2D8!¨!5o_¶jâ5|€ú:ŸèösÊBKù¶Ý3Mq°àGÄôÍ£âùFѳݛFÓç›F×éEn­ã–F§5ÌúM{“ÕoÔóåÑkºó=ˆ„þî«[$ªŽV.¯ëCà*<áZÛ·÷hÀމ%\®¨‹ëžÍ$?•‘€½MhîË^p_bi0OÐ8IN;T>2·]Áa]`)š*ä!7Ìø+·q§B'Ö Äù’ Qõéúªþ,¸µ +·[ô\f£õYéB3‹w$Ô¥zr±Ü˜=/ˆHÀ´»ON~ñ…wŽ/™^8ô’¼q~›Û×™Éü-1Õ¯P_ýà +À»Jê!Œ‘¶¨Ü™òð±¼oÛ)ϒ,ïP†I@œš»ÇÔÌÅÕ«Œñõm«j7— “½¨a ’s©3³næ”K"Þ\MYÇ˹[¥‹¯YÕêù›¡Í(‡Ä_h6«2¼•²ýdPŠsRÁ$‹¬÷â•Ø”¯¤x©þ¾ØZ¨ow²y†µ†;u¯³#€kä‘8ø^¶¤ÔÈ:¶UŸåAå¾F‡–þ~oñ òߏü¨<·#ð[ÂA忳ÿÄ[㳟‰–ÿs7ÿt[Üfÿ¡–êæÿʃËy6Âou鏁j;¬Ñ[./vJÛ°\ +Z^p±—!>•ÕfT%BÐB$;:ðF ï±´|™ðª´º…ôü]¾N¿Gô]F$óð[ödÂÕ¤ù‰'{eç܌ \ZÒOâ§ïœÆ< ÆsëÆÐ9Œ)—ñ|»÷Í +ÊÔªg ƒhêÁ«Íüaû=X0~E"EQlHÆô°jY‘­_ÕEã;05Gqfۄ`£;“œÆZˆ,e %’,„•#üiÌhb!1\æ -o¦®V¤Ø"âú¤Zp×ÃðG‹åW» /¬p_C™ª¸Úà;¸èÛ\j|ò9Á@†²Zõtm(!荪z‚&EõÅIìüæÎς©b9Hùà¸_S—xǽª‹ÃWêhË«%cì‚ÏgAiígºý<ú´><: OIHxàcLŒÅžÀëŸZp™_ñM¥uÿùbÿ[+ûÓ6aÁ6”ïÿd#˜××k§òzìe§´üqfÎ#Ã=Íßþ­S>ùT\' ÝÄ€0Xçt‹=@±Îéxè9Ý/´úÓÓ\:´Fçb)óðZÔ-9ÍL»åDR•i~­˜uÀåÐ<ÛüiC÷šržáé}}OàYzT-ÙN[y(9à3àMغÞ9Ëú)ÃŒ-^mìùìO °i¹µî´a:(ŒN/Ú¨p 6À+p¡¤AŒ‰æ_*€‹âÚz]K]ÞhŽQřН&h°9Á/ˆ¾×Ú{LîÎsÉ/Îsõ­‰(øhnØrǜ„<õ’æ]ë’焳¬#1k¿€¼#ƒ¦½Üø6æõÄ椒±Ä|@s™|†\ÿhŠÀFã¤_€t£2d%Íô^õ1¨ãßϘ¡# ?ì_ß§Y$müà~«Á‰K·Ôü/H$©Â@çúbÞGî>+W“¨9œì„‡­ï¶G <„”å{ñè¢ï.°É|Î=¡õ„àAôà;4ÝZö6%Šþ-…„ådƒ . >)Ð}ú:üo ±ù§Ñn΁pèÜLõ̒HŠLÑïJA8dõ=~¡=.”ô®}hOKå=}Ññ,vDôÂSÐO.ñi§Œ§ ˆÒ›â@™ŸZSÖÌ=°øòž†*éß ‚ +{Àe)ë¼Âz˜”ô ¹}xOJJz^ }ó‰éœ§«€ôEEKÀi)ë§Q êfSÐA*ñ&jSкswÚbzk)ëÌÎÃ@OSrž³ßLÔ䧨¡ëÕKÀ¶Vzv~HSr{ÀÆJz¥E(Œ,ÍèX;~ —â;×¢ÁdƒLp1Ø/S ‹(þ#Þ>S¸%5»ýSÞü§}›I“`ÀáÙØmB;ªM†I¼ßäů &Á¼wáBÓl",¬pސ0Žð”¶jèŒÏõτ±¦è áœÙÏð(™ÿý$ù·÷2ÜÒ|Û¢ûûC8úK¿…y•HÎd8å„n2‡=K`^OKà:K×í^qŸSš ÁÆñ:F\»¸zŸ[–6éž]ï³öˆ°'=pVi gÿ= R‰ ˜}OûÍm;<¦ö±|Hù_Ub¸ë.÷c\»ª_|Œù®ˆGW÷ïYCr nòIÓn>ö|ðd°ýxs†¤ÏTFŽÕÂéBÌ3£MSú{èpŽ›ÈÀð€vBF+Òl©»ãÄa^èvÕΓ®ç{¾DL±¸¿m‘,ÒòØZ¨x£¥¿Ø"×¾ÉÁ(±4 Sˆ ^H!\´Oú#›/eõvÙ-?k‚J«Ë2GdHڍ²þäƒcŒtEÁy‹x†ýÓÕÓÌí¿ðO™ké›t«’ÏÊcH…m6¬ëÐHcøÉölŸö±6{6ÛhvV^¤äû_®@¼÷V[[eµ3Ójˆ•õû&Ֆ6- í+dvRÏúÛ+{Õ5¶8–[w[žÇ ágtyÛöÏ6}\!æ`àYXñê,vmÙYXÙ$•eMd™•— sU†Ý^žÆÊƹ%vv[Úî¬ÜƒZMêìaÈf|ËÚl[Xć!Dv-¶•°¡X#>ƒ}VÇm +Çk¶>F«Ôu¶ØÜmµ° ÔØÄÚ­ õ[ë +ÖÝFÊ·kÔ¡ý±9H¶pv;8†ÔÄD!»›+(ÀºˆÛXׁŒK# +¤B9Aø€]P8íÖÇoaÔldóˆà}P敳í݈úŠÚ墮 ‡Y±KWµÛD… +ÆD¾ÚíëvvÍ VÙVí +]_wö&Þ0a~ B€„“ž—Jy9Ԃ'sÔØL@dX.”å&Í)ÄöIÙäÊEž«BùdzÕxıô“¸‡­V0§dÂý¶3ãR"†#ËÝÚ%••€nùf‰e«² e«'ÒËRcÒË{¶c?ÝE`$û#à$ÞIWÿЍÿó"ürŸÐG)âÞµ }dô»‹Â·—Zð»Í˜ÔÀy OF~öGÎË¥;]óR¤ù‰N§rOJâ'äüÃD³ƒ<Á Ï1IŽK1ìs ðo QüÂxG,Çr‰ëO”¦´~E³µÒà‡„çRÙ¦–l|›®µrASß  óm»éX%ID›U±JpX£ß…,“4¥’ãsÿÅôoÖçZ\mΐ\ŸH ‚yé¬/nBöèæÿæ/ù+ æk5Æ¥2—i±MΙ¶ëÐ7`–CòÁÿ4^ÐÄ:Ü¿G/æN¿ó äg³ZÂù£òøÿý9µø!?µÿÔ'åY‰OåM57>™ƒæ£çž\iÂË$ã-ïÊ~@½C‹Ôýùƒ‹æ?ò/Æ2P‘Œ0Ÿ]’LÃYd­qŸÕõ£ûd è§'ôF¤g‰»M,ò)?Ì¢“öȤÿ ŠOçQIüßå’<|Ø$šš"‰O8”ø4pìž!;ô ùBö§µJŠ åó‹óH¶@¿!ýò¡~‰/ç‘>üÊ'ߔDûæÿ×8yù“‹ÏBþ}üÚüçüEùY‘"ü©…âaâµöµÆƒöif³ Íêbì +ùƒJüò/®ÈEð±ÿÆ/h"ÿ*a9ÅìÊoâQçÌ ^ȅÿçò…ìÄ'­F~PÂ|žd ÀyJ_]’aü‚|Q~0…øÃ ÄûçL/®È.4ãf ÈëËÖénq¬?5òê +‡ñ†œ^ë‹ñÜãWÿ¾†ùò¤üòL¤ÿÓF¾÷à£?{ðQŸ½ø(ÏÞügï~ +3÷¿ë ùâåþy¿ÎʄüÇôòÿ*“þ>pôŸÍóǤÿ5˜='î2ßËIþ÷›IýpôŸÙæOIÿ·ç¤ÿ{'òa'òÊ'®)¿Ê/üÂ|Q覿{ͦ¿âOâS_¯ü9›M|f¿ÕMèü»Öè'Ãô‹£Ó ¿Í%§\jÚ%ö~ô²&†~ï@y‡öÔžaú ³‹æÈ^)¯q©\•…þBò˜þº‘‚XÓ üìÏó‹Úœ^ԅùó þ~´R~Ñ/í<Ÿ¨—ÈÑ073²K¯ç¿œ^Uè 'õµi¥Ï˜O¤ÿ¶ÿu¡^iˏԿߟ} RBjOÀ¼rºê£ÒÏSž“ý>oó‹ø‹e1¼È›ÿ:a{-Re^¾Eòâ„}6ˆô/ÿ³ðÇñVΈ¿çDÞL/̘C~ôý,ÿL¼¥OÝhX%–0ÿyž<_ë²_êÎOçE +&ÐO•r¹,¹„ùÝÿú|ûäò…ógÍ£—æ’ŸxÄ¿5¤<§é´ø¿2!?h¿›ç“4Ù٥ݚ¡ñ^º™uåG?Ã5QâŽïå<'´*kÚ?kŒLÂل¾Dêã55 óžý5þ2Оӱ^‘~âõ·ß{F“³ýöfgÒd’G0 !0@¬+€ d0G2L‰ô†HG¨ÚՊ¬à‚¨†`€ +Y“šÛWÉo¼Ú6­jÖÚÑ(@2 TU‚ªäbª©B „û÷ïßÿÿ}™È![Fß_z—žÝÝÛÎoGyÏsw—Üå÷7œÞ•éoKy}{žìïOyÍþï9½MèoSy¾Þæô}Ïu.ô·­îãN¶²Ûm²6‹)õ5à—ŸýØ?âÅöâÊ~Ül‹Ú!ØóA‘z™OàËm~榅ûš—ß SBýÁK‡dÛý±0ÿšè³e6Äv¡þlÏöEö™‡ýyÂÌ>‰ÁhϘ¼±þ¨žÒ/´Ì=’E˜{%0Ÿ0ޕëöEñ¤¦Xà¿J—%eheïÓUØk…Gªé¿;êzÕ”šÿy:µÆ¦q¤¶˜Ä×÷rÛùš~Îó]O­K —m¤ÐÙy~å¬H•‘$þ?ßïò»¤:h§ÀNB¥Mùy_O‘ØÓRÐ÷8mïoãtÜÞ¿¸©r¦¸‹\62¿Ût^~âg„ ö„âʚOÿ²yÀ Úç`^;?Ãc/ü‡ÿz|pN×xf4¤ø;\S”܂ސ?ûäÍÉÿ0Æ'R2AœãW¨ÑđidYoä í¹“x(¾Þ?Â-܁#|áwpÄØ ÔâõŒ)RÂêÌÕ&"ŽòNæù` O¼}IË裈›Æ­áì]T‹„.R_威ßH•–ÓùÖ&ÁÇúYk'.`£ÕVVK^+øŠ‡³KrIŽ´ ¬ÂA£Â\ªr"gXRf"¾hÌE ÎÿÏ1šyâdaíN©çNõ@êìŒ‹À ô8"á±a‰¨@;:KpÈèʞÝ5…Š0"q 5Äыað%J5+§þ{BJ5 *3 “Iá<]¦4 =œa‰­hô+ݓ'³ÍŠáG»VŸ•"./Zçۄo°$Š Ž+1è*Ow£ö ¡eÌ?ë°ìÀ¼Îh¬Ì"°ÉAìU¼À…§|‰Y€Êên™è}ÉGƒOÀrÕ¨\Êâ³ÂÛ!¦Ú)0¸"Zá«n¨íÂAæÐõWz2¶OŒL6Ù°ÅQ3€$W`(#»ñçí"£¦oûš\ÁðÒ +4åŒCá§z³„Ý€B\}6´QÐÈK Ñ\𳘸$„ñò|âžA­>¥JÌjb‰ÖÈ:Ñk,ŠÍlwÛ]‰i…ÿìÑX!Ow lÄÉÌY"œšâ,äA¼yÄƌdÎÿìÅÿùˆþ¿ñ‰w¿ßÿ@—{öŒÞ=þÿq„PÉ¿åXþï÷²Š%çþìQ/?ØV«çN%çõ±D¼ÿÈ.°Ûì‰Ñ°µ&~Óó yþb—ŸÈ0â?G¿óýbÿÔ=þûßèóþ +%׌OPqùÙÑQßxRø:ëù÷n¹Çpå”òñlØôòŒ%\¦Ë Vá +‚;#@!ÖX/!z‡Ù ¾#¤ žº×çDß>7ó€7Ðð~q]í«¤—âwô÷C/kóÈïìóËDrY{_œÌYL¿x} …³/kóÛwöyÁzþݗµùʼnª ¸êŸ51 9ç=I¿‡mã>×ú&è>;  Æh®Å—PEöÕø˜|6‘äîs·íuûTµ'u×G¹í䐱ÊpÁnŸ—ÔÖ¯:öowün¼u¨Ý£ž +?Ž®Þ uð¹ŸÆÜ×í? ·Ÿ?“˜éê¾ [¯éT`[ת‘ý@ƒ¯ï¼’wfm‰ðC[p}3qOÆ~¤ò}ŠP24°2"Ÿú74ùTÚµ?ôŠéTÿñ”ÿÓ)ÿ§Sþ²‚Îx' Qk™¿ˆœùtcZ%q‰á˜™óøÜVvˆ¾@4 ?X}ñüϊÎe:©Œ³Ý0Ê]ñ•&O"òl1õ) k8옧ˆÔ†…„¬Ç@üNˆ|%ÎØjÀèúàu³3åZ!pŽgì‰á»2€[‹‰ˆˆzÓO§E2걃¼oQÓD&H/BBìÀXÉó ?«(]QKp“qÑòþ=ûýÆ#TU(ÀVȬ&ÒÌbæ^·0° a[ÂvA¦ª|Ð=€ ù¾PûÅèVöäßw­¿AGòŸi +HÈq„î† °µš~ٟo¥šœÆÔƒïÙºh–bŽeï®òoåëm³ß@+‚›È:Û ý‰øÞõ/½{ô Ñ¹÷ŸèIÚþ5_ßöÀAëÉHÿ§‹f—7$ñ>nŒ‚aƐ™­’Iâ,R›ÂËZ½@*à® å˜&¼v AÅ·Jo™“™'dAÌY=ågÏ/€ž…o3ý“¹úeƒ~ƒ—9r³„PcaW‚A˜¶^ªzxTðèâ(`õ!™ dæF«¬Ìþ0Qœâ¤éõ/¸CÕÔõN‹Ô„‹k1âöˆ“Ö@GjfüOÑ#(K°»¢õøëÌA¦)t´DC»Óåö+RÈȤþð-s`Ô%¡¡”v¡„¤{ÒÁ¶ je㞠çe”çÈ¢P$¯æé|JÕbg{ý‡þd|®ÿ¤d¥Át&´ 2#§‘h$Oó' NÕý\g!–JÈÁ|ë(u.¿Å3ÖùÙO„Ã…Òy.² ù4—ÿCý`·—%ùÔ÷Ü@¡‹€×\±CíêÖ(}ºß€¡öÇo¼P¢;>Yž³÷ñ4ùÃKoˆ=öpëGünZŸÇÉý_¥D†•ÉšRk­.D¼v›ñõh_œö”VÌÿ;e‰¥ùì#ÜøH¡cšF×n_¸±æÛø!r^ÈY¬wü+,ýt1èydžpfÂßýVYðiñ¼õÜjË>¢€b-±¼ÿ`©‚ŸÃ?Ÿn|8ó¢Kh-_~â‹Ì|iPn +9eä•fÀf4Ä)—O&ñ4dýæÏ ¤­èƒ³‰š©´ROÁՍƒ²vC…”Ç•â›_¨¸“Úp”Ò»¬˜Ûà=d÷\½&Õ+¹¾²çæ’NˆÕ(/ ˆC.j©c…_”Þ +dÖ †`ÎÊۈed rb4+µÁ›ÈŸ™x-1 f¨ŸCd²`ëZR¦4ƯÂmõ‰-­A$³²õtP·•ÌqouƒaˆÀˆˆ¢±Òh;GåÒæËÉ» ©(v»O ¼1.=*!è AD +oò€Qòd!èjÌ^üpˆÃòÖÔçµ[SžË©Ï…Ý›ºßßëßëi:Bs=±¾n¾_›Š½ulWýú¡ÛZi§Ã‰`’D•A Y'سÔk°•^väg3Þ[ۏsöfP±í¦mt×ÔKúҊðQæÿÎ'Aý¤7H§ÛËñø)ó?ûà§áæ +ïé&8Üðg3Zë©S@ë¯Â#ÂàCòwb`|ºë·Ä'æ|™‘ˆ'ùùÄêƒbù„+ÃÝÒ¾fŇtÐΑ¤)ª·sUM4t*hÜÚrG÷IÑ̚]Ô¬`î«ù×onÌ+K9ù*yۚŸòêÝÿ˜B;šÕl¹Ñºš7»p”$"׫;GŸ3Æ6Uµ¯@ôˆ°ü¾IP¿§íÏ_Å.6•_ Xè ¶(Á²÷ؒu%©r'”‹ÌHPV!8ê†xÀCÃ+$”rúñös’@ŠÅ+íh§¶d˜|/† Æ ’\(šá$ÅTB¾ÜŽx€”Œ4³I8÷q¹XhŒÔîIêµvÔô"I¦ñjí p±–¾lr™9ûë}2kÏhÛ +zyöÏ)ßì´cZ„“ÇM:ñh¹ÊçùFm´ÅŠRifÒ|õ½ú>~íT¯±€%¹"ÂE,@–Ž`ŚN4øösïÉÙ]P;zÍêátWàý19rŒÑ¹Kr¬Ïƒðzêfjàü}­4î[¡§s}@øGÄñêaS@ nə,ë… ‘VRÿç¬AÆHmYåï€ä…ÔÞ±%u?|ÍìêÛªX½²—3‚’Ë1ٔ—~íLj0G"~.ÿ¨˜!Yf44 ÚȓUí †©{@N3u´lq_¶ÐAv¦?ïu” °Jã`àºcÚà +"¬xÁ¦žrevžrò¥øP6VöäÖ½±¸Æ2@à£ÒÆöï’aë—ÇbÏ.I·È>uÈý)P–Ñ•H•àà ÇVXÕËíÞíÇÁ…ÐÇSBMµÊ]¤ +âaHu‚¢˜óÇL¶ Å=µ'éIÞ_c(X)|3Æð/] K×ÀKõüSòˆ¡ß +˜oùnW c&ëá*{ÒÃ)a±ë$Ð𙮌S£d­¸(S±"ЊIo‡ÜWþ@Ön2+Ó£½— a;.¥õ$þñMþ4 ò áùzÈTc#èŠ)§ÃÎÙoIÕ97ϼēÑB4œ)½‡ ãŠbàd^ËòóýdŸäÚ ôRŸ\—ÄŸÞ5Òæ™Õ÷£ +“!Xª9 ƒ`#áˋk؃•7Š)ÃiøGïÝ8¡çŠ©©”Î p¶†@–Y¥<ÁÿW¾Êž¾ÙO]M +sµÊzéÔÍûP³vú҈Yµ¹SÅá*{*AlYYÙbàÐN‹õU ‰Á{Œû)Ðzø|. 8Œåb·5Š\Yh®M3êÀ +äd¿ƒw¬â ó8IÎ \žSfg™‚pîïG‰ÅM¡•)±ú‘¦X‘³ZÅb3ãºW´/‚ß?d:?ºÖ†ÚeÛJS >ùO<éöϬ”R½Ì¢Öæ‹B¶~ +vkR-©¤1³Xªoß3°®B¤­7R¦sk]˜VN؜WÂ|SL-¨:ãL“xT±üŒΠ0p¦žÝ¸ºÎøW+Æ.0éŽà –6-Ä,YÖ!chlìoHy&@3Ë73î+ç™ç¶óÐTòwç)l7gً¯z–^O/{¤ ýRsðp9ꊱQ~R‡ô Cg¤Â‚Zx%%§Ôó9Í (½ QŠlð7àþeEH·Ùr·”ÁKåÎæ±Wws +Ó(W`GÕâã$C*#½Ïa©…¶Žé¢çs´@ÁYìU«3pò« DN8y| +-·†îk­¸=é'öÈ|Ÿ âDfðòžiCŠZ†8›>ЀŸQY˜:†¾¢™¿ú³Ð&(`ü väáéųžóԁŸhÒOº%o뷏¾y7ÚÈ8‡¢bí8:¡àBiÁrFtE~Ã>qÈ}Žéùlí¼ó¦)“ »~‹Í¶tl2Ì&:ÜƽìëÄþy? í´%¡ùƔ®4µu@%¥é”bYYN\ìYNKŒµëßlÝúU²uK>â¨òj.mê«ÇÄÿ ù+ 2Ppá̈́w7;‰Çó/òL—>åàBWãUÕþ{랝ԪáFš²Øö:wMK×s]½s ®ÞšI7n'q8Ú±æ%V¾ðBÂD†9u Õï®êC™×ۇâ¶A&´!p‹jMgC`>¼Š&ÒÁa¿0³©¨¯©l*F¿j ¬®"’x+Õxö”øÖ‡}2ÃH6‡$æB› Mù R{ìnзysÀ+ð’¨1”Íâz™Ô€W‘†sU¸È͈‹üÓ© –!¹dH¦§3‰ù¹†e7·ÞÀ¡Åà£àyt½ƒÙ¯O¦ò\Õ§³úCûÝP¦¢ Rô…Ëëö¢ô3¾rO÷Ö]z™Íy P‡¢îï ö…Êòî|(€Â¢ñ‡|(ðÇ¥òRÙ4ýÂ4XiªA½çØÊ­¦ÁÅn<¹ÿµŒ@‹ëšËH“v4Tô®0U^²6¨XgÆq·qø«Á=3–§º‰2Ù¨š6ž‹š–©‘®®Øl‘™ œŽ¢ÐwÀãj1vZ{)큷¶¦ª!ªƒY)?€¥XædTFð§('Ç®”o×åîp’ˁUuá3[…2[ ¾¸Òå/¡x®+^ÞU½½šåooJ ö%íâÉѲZ¼l­’Ì Mô·Ï1`?鎝¢sNõŒ+a®!Á^„*L†\2õâ`Óɟ6î%×"/OÙæ¾ÐZ)߸³Üü ™€3lÙm ¹L­Â%Æ<!ÏBž†»ð½)PJÏb~²wÙ0R¤Òò€!y¾B _Ø$†–G:·ÅÍŒxå÷$m‡p£a^øò _Äžî€÷´VÀß ÛT ‹’ø`(¨9ç¶:n§w-Î jI´Ùû0 3ûÖ?31/:s"¬æt9 ‰Zõ§x.ázÇz5 [«š‚>+ãE§šîžýs˜錡„‘\Ñn¶:_eÈA'Zî‡,gÛ²²ƒ;мƒó)ýÐqÅ +א?ün¢sꓔü˜PåmÐF¿DÓÚ+0šÞCVÝô¡@O¯dëÖBŸvì/ +_†l×áa,o`q¦€‹Íìʍöè}hÛÉLÖð +ø'™ +IΟ“£#Ò +$ðo4s"W·Í[30`ÀFxIÖÌ.s ¹S7Ëzž,A1oN6%/s[ ¢ãÑ +î6€XO˜iã—ËÈÊI‹¶?Ü>ÍM —ÕÚ8Ô{u\ֆzžò{”ȵiªÝÜÕòs`ÌY·²MË?Là€&kË̤ž¿'ÛÂåc˅z:§Äß^@¾\Hk¤nÃäÑ$Ë# m£ªZΛ½\wx5kéI«‘̐¾î⑧0£î\ù¶G&g¯çuì9'"öGë#ç¹¾®RósRgÂUü°”¸œ2`' +a(R´" +ê@zÄõ-ZùMŽe«Áö(Â{§0”çÉ1$©ƒŒ¡UZ§jaÄ<|ƒ,Ið8ŒX4¹I"hžŒa÷Rîoí.€ÐQݍ–×y$jyZ[-@þ€a8 !ؕ‹øx/¨ IÏän†ÿ{a™rÍÛÄ<ä|‰95L™(„ Á3¼™v²DS;"(ÊDž ×#× Tl1žýþH¬„í#¦àyÉ>®Ò +Z +0nR˜µ÷éêÞ!@ӑHD)œ„<øK…ÇxT}jo?•É7AìæW%}Aî l~„ÓW»_\È=?Ý75|I!’ú#ÿԑ7 «b} |ÊIøq¸t~ )¹§R6¼:53q&ܘ wä´áؗmf·Å=O^Ó A¿ƒ¦ñÖ”A\:™Ìö6þ`Ùþkï4+º|‚ÅF‡;gÛ®änænð"G³+m8”.bkI  qízyòáî¨Dbî¼&@"n²_~Ú|ܐ¦ià͒½‹Ñ0€©¨ì!n7*…qâ·;{!nö±®„˜ƒ »uýH‹ ¹õéྂz°uÄTp8]õì +û]]Ù¡%å;\öʑl¬gÅY¹ä‹Áº vF#›±éÈåÀ ÕÍ]d—•Ž8ð)£]O^‰É:+ς=Á|¸µÙ&ˆðï¶©S‰)UuGùö¦p]<ÅSÚðµwº·²jü•?î*ÞàR¬H? }%´ +`«¤ÉȅåÂçì//ïÊêY—3Y– TöæOl…`¬º²o@›ÇQUßC"2é(5è>"¯gÓG«±ýÝ"K'»Ã/“Þ.¢¾øVOØ/“Ÿ1'JÀGº'ù€´‰R3Þ)儞¡çY(gLŸçéÿÉ·Çÿ¬ Îïqߢº•ð™Ü‡ íˆ’}RxYï} ë‘ýhLìÃûV?=+ù°mÚµ•K»<ó©8 â ÿ¯ëØñ§7÷ʕý{øù'Øï¾&ׯ å„ +çN òÞy˜óÑyÝVVö÷E•½½ÉŒYدö¡(òk‘0Y +þlP…wÜA`ý7x®P›TŽýnöm•Æ—Šø2ëXÄ}´ˆb?Š˜O჻ÜP6/ã¶·øËžm8 ˆNÒ^#ᶺ¸¶â˜³'ðE þÐ?‹øº µçwä·à%,Óbv#¹É!s{p³mËu0nÖ«Õqð›_²sø?‚¡öwª~ÿgŸ°ûÆéð¸Rèý¿µõ3³tl»¥_#û^ŸtߢìµtßåÃܽ¸ö%´=-—a²¢û=«Oåé¾~OËÉrÿ5í>ƒ9„ûß;E¨”ÓRæ¾ö«Cò':ݍ³ÄôË¥Ÿü¡ÊW Sþ¹.0¤AÆBjÿYñþÿçé‘EYçj“pÔÓfê½AŒÙ^ý~ÐNèþîÆÙø–pûþ=ζI žs߸ºm-´Ò_â–SáÈ·¥cåd¿µcÉ~äU‡Ž5ێãQ]±îmä ×|=ÎøN. ¶ðܛϊVÌfÁ…'¿ƒˆˆ«âl¶7Ÿõ%”ù²WuñðÑV~¹‰ÑV}˜‡a [2s{~u•šbú]Ѐ®õ¾yžyË?׺«®dîJ©ÓûÔP¶ôõQóÁºh®QÂ|ݼGÄERi»L*W¾?DÉD¢YbÛXGZ"¤g1ökÒ¦9U?fv¸Ó=͆٬ùÆØü¡Nρ +N(®sñ"¹Ë1†,d¤¨AÐëLŠèu "ºepêj¹Ò&rM”4G…\iëêÅ©9òÃ9܋Kyu•Ó’·aŽVH™Ù,ŠéVı+)Ÿ¢¥©ê›Pòž½ÖÁ؍V¦$±Ý×RÞ<Šå‡+³nJ“òa†ŽIä½ê$®ÇdW¢|\-Ž™ÏâU$eO„L§èÆnÉ &#_м‚<c +ƒÅ.é#u*à>ô?LðGYö&qãÝaÕÜìeÉgAçïûgYÕÁ—ÈÄ·œ6å Ìüž\:¶ÖqŒDKm”Љ_¶&BFFW‰ã!¾(÷ D w|³ÜÉ"as\´ü϶A]üñP=!Ð^ÂÇÁ;ϧDb;3RJAj@ÿ„VÔ±9f0â–+®‚Öìk¾Y]ï¼Yf/v¥Ý©‰» Vþû‚¾TM (z,䦴9‹,‹ ë÷ TK%ž\œz›Ðg˜˜dL»ä ¥—Î M—õF4üiŒëNó9ƽ1wyEˆ¤üwÓíÖ©Å_ýIÃè‡>æd›?Î#ÆD9íŒ7ø#y¥!g愅ª ï™Ç^ªæ,uöÍ Þ§©pëס_éßöÎë©A•f[Üú·_™Eü}N¶ë¿]Íà5rZ=øoø¢ÿü-‰ð +]oì÷ö"8í<[^Ph!ÓܝùێÇ|ëÃúùŸ²M½Â„{Ã$,|®}Ëû=|o¼eü:{v^èsbÿE!³eû¶õÁ¤Aÿäe`3¹â’Øñ¶õÜüAö6ªe'0~?æÍçÄÛ×–å‘…Í͗Á·¯m;I ›Ïó#iÿç-vþ ò^\±!}„{S>Â:T%ävpwaFÆØ“Õ¨WªYŒó<òõCÐ€(3ÀbuŠ°}‹\ÑÛçZèR¿’ÅbK9¦>Æ)d4³Ìî—,í;)äו ‚¸És3d`£q¥ÊaŽßDtǓ¿RÅëæ–Zøq:Ugãê0¿‚aŸÅÕMåžF!À±ˆ3’‚µÿDF¬»'•Ó0w›ºÆJ±<Šº Ùt\mC rˆ!±… +¢È>¼ åWÌ>—Ïë‰}o©b¸œ†ìFÐÉK‡¯ö…^¾¾T‡)”~§×Xƒeœ×4 P,éJ{þLBÈYòÜN®8 赍xøsã_!Üȗ2 MÇF]µöò–oÜ +d¸,8;Óp¸ }—Wàõ`iÝ4HÎú4_é±=_ÏÈH6ÚÁͳ_\ž ¨¹ç9]¡±ôœéŸMÕÈ dx¹AÜÕ,Û֍ßí£¤^`†[Zƒn«ÌdàObCÈÛúæzÑñL¶²‹ŠC]¸”†»Óí‰(!χ ¦;ëϧ:¦a,VAáړ۹¨õ˝¬ƒ¼ÅÑJÈ8ƒ9†¼Á§6~ÿÙç•+2ÿZV²ú«‚Øl¿²Ï3ª6.€9L«Gy`‘[Þϐ*ÄKA՘4èæ#ì0îr»ÞEî[j„d4hCÂFCNäúSS꩐‡g|ýA]?a ¬‘¨pg¢°!’È}0ûa€‘ –}&îê*‡Cž„LÏôöGú{Òû”’.žY —9pB倷¡r]mAT°)Ú·œÙׂo:“yøÆóÊÿÊ?cÉõ4=¶·žó¦¼7Q‘Rþl½ë‰ìaÁR:)òeªÊ GÂ’—ÞXSI¥•@dÀî…NË¢‹½ñPQÓ°ï¬PYkŸ¼ÓÅp"<þ¢ì{îm$Ú¯.ªð~–Ôd Ë rcæt°%>В6å,O¬ÀÓ¨/I¨…aóµ½'xɋLЬÿ÷€’F¾j¯„SOR­0$bÝ8ß­Ö_ž-XŽtñÎ#Ş#éTôV#*r¬?îcnYlç¿Ý³ëæîãû)„aqué,ôù£éå3銧oýY´Þœ­‚Ò¿ ¦»“¼žý.¹žQKº×zýƒ“‰ +2-…ÕK%­°aKv×dÊ©tÀÉð°Þõ¢¢€8Z„G40ßӋ Ê1ì|2ÝkinÚÕ0à^?‘¨9°+-å¬byŸAØSI‰q‰žûw‰1‘dbH’|©¦ˆf‹(: þé>oÛ;¥Nô7~ªÿTîžäTsP÷wu»e”“Ás¡G ½†luè[½ß +éMJýy‰ê<¥Ý1m}õ–bÍ@*Ê_è ƒ)`\ý\YBíÿ6üoÄ]OsÂÆg10³›ÁuΜ Ñd¡I1qÃuI$m¯,¶Üùm¹>U`¤T‘Eø¢Q×ÇŸøÔ*Œô)â$=‰‘õþtÜÏÿxÞnÍÍneÅ_Ho?Þr¦æåcÖ[3ù‡üiÉÎ6Êôm±ÿà $h_O‚‚5¾£rÛ¿XiâYkLÚ³|?·¼å$™`èžwÔ=ڏ«ôYݾ„{”#±…Õ»üϬ<¢ÞŒ­¾ßgæcâxò¶þoûåmÿTò¶ºþ4­¾ÜÒµ{›YZÝ]«ðïOóf•·ól~!3DÐVß 7vŸÐA Ŕq6+òÛt*”ÖÙWêr5î´jR\×Åß!O§ÓaÈ:²Ò‚¤U{* 6ô ^ãá7“?·6;;T×Ùâu¾ÒTIÍ)ò73s­»÷TÕIj'ÁT¾§“š …½ö±¥$ÿzªª¤¨B ƒc ¬H)!ºñ*RTÚ***]«,U¶Ä%(Ú.PÔ•^º¶Õm·m¼l´nðm\—vªµD +H‚ŒUË` ¾„ÄBWßÿÿûïz¤„D½[nós7wsy ç7z{ÐÜÞszÎþs3·¼ÞÞõw§½­íoG³§½Lü Ê{ïºÛ­¶Ù#i÷ç_¢"B¸rã†J¢Kƒ ØÍeLŸ–ÅFá«©ò½,™âÞÁÐ!cG~6±¿ö‡” Sql•Ùc¥ˆ®¤¢Í™ã¢æŒ¥ë|á+¯²EëgӔ¼ïÔÓBÇ~JöE±+.¦ßTž{ËXNL½gmK–s`¤”ÿR“%”w@¸©)]AKƒÄ‡ç±éÇÖ±éÇ®ù‹•åÃwþU+g'ŸÄš¹ËüÒy¤ð0žX~ÑþëË~ã¸î{žëºîû¿¿÷ûÎðA&ð’JÿýÈnk‡Çÿê½[оÕÿW}›Ø÷£®Éøñ=k-‡«ø<]Q"楲VýgÉÇýí¯¡œ˜â”€8§{oñeðxòç;Ÿöˆ¯Ú_à]tâߢÜËàìŽËà쾉\ßró,qxbU/¸<ؘá¯ÑÏÑ’¾‰¯Ñϳ?ÛÙñ0|…k2/Ò:Öi)Z– uђUŒ*D;'ü÷Eºù>/é)R=v.€|~BžÉp ŽbX4 -ü/ñ/O¹E “äç£ü˜–ÁÙ˒„;4Aþ#æ‰Íco—÷ÅïDZw_½/s‡™Á ÛG0¸ß´$ð4ßËÅÜ&w<‘qïsÉ}7Ærßü¢ƒà„à9üî#ÅùI›¸ û‰¶Û…(•ð(ÖR|„iîG‡:ËhΗø[¸‘Õ¸‚Û̓9û˜‰æ{®ùóx®B›A@©^û˜žj“îXª"hÇ¡ê!ÐSØêÏxª8pSÓLÔg׫‘ðém÷p‹Ä¡»'q ¶$¹& Ÿ¸ ¹Nª|Š9¨¹¯Lˆ×ó”ü+T¼$쀐lýfà}¤dq8*\^$Ž>dÑɒËÓaéú §ƒìÅç ЗGCëȚ*%CÆEL2)«Å}1ÄZ¶âÿ;ÇÈp—tŒÁkŒ¶í¹èÈ~KçÈp§\áQ³c®î ÁDº.ÊùÿXVo¸Æ»¯X"C‡È¯ÅÞEWMh#|9͂E6„²=g"ºÂ¨ëù‡…ó¹ðü.qÚþ[ÉT/u£ÿ”&êÞ«/åàÉÿ—E÷Jƒ4aÊ~p¹CíRBר­³ÅkihrÓmßK: ¨nÝõéËþ}*‘€ڐ*àǪߟ½¾ôTï·Îm´Ü)ŒÝ(›¨Êï¸ùËhÍUS\!OÓê`þLÈÙ̺›Z¼tNÁ;™' õ´¶Ÿs ?7™i½oÏ¿+Z5óßÇÒ³?Þô­¿BÕ K—ºP±í ût¨¬Â KÕÙÙ6õb°l‰Ñ¶!eéàö»SÙô&³öˆE`ŠÏ1nã9"ê +"8ÐEg“PÝ8?$€»²`¹â0–¾¢Ìîw—ʧ§mmǍ*|¯lñQÈ=‡)¶ãÁ0ØÔL~bS¨«]«i]¹¬¢VÉց™äkº½ðE¬N»:îaÔS¾«à‘ïYKöÂÐ@ÏI1£ˆ>ïâphåfÓÓG2!Xi(Y>µê¹9[oR®aâºÊLSþ÷XJå."Tß"@ŒåX QÉ u¼*>´nµsÖA$ÈàuŽp–ù¤uñ¥a^ðÜqbo‘tà%+ü07D>|‰Ç ߺ½ˆ-犉=©ÖÔH¿T. ÜÔØ"͒žP½|-OQ,¤(“lñ¬Í³×HUi±!º2Ʋ5Óђî‚émDŒBɝ´VH³d£û> ýžõÕQdQòz„T–Žw¬ Ÿy{7°>Ôbañ¸› ÖrF‚r•Ô[tèàòÒh°v|în˜º^ bR\¤~ÂòŽÆÉiËézwÁÓ ûÌ +1?\³{èÎl{+ÂÓùtu£s‹у"Ç£VÏpGYچÖítµ‚+ú؉ra¯8§›.þêk*єŒME±ºH%…%5¶ÛŠ…ýêkÑ*²€ÐÇì ×qìd¶„5œü°t]_æÚAù2”+àËH)é¾ %~2½7VöÒ ê¹`ÎÚAØ2«Ü„¥ +1г³½»òWÎn‘Â¼õ·”¼}öãyë~"Ä3ö8%qðO `·ã„‹£5šuUüw±~µËžpÒò£!ËöAU DÍ¡å;~áÌm]°08-) ZI¬£„…ºb½âÈA©N=¼Ëèƒ5=h«;¯†ôÎTe°ÔvlV‚ëâ½;á-~'Ã;´uwðٝáþV‘Ƕ¾¸_áM‘+¥6@ÜÓmzÖ6YmÔß°JÁ7•¨Ñv̅áÛ¨µyúÕÖCôüO5¢@ÿƒ.Üð†h@ B\ÞÌH1·1æL̵Áó»Î=C”¬“?R ¼ÙññM:ëÎqÚ}t?;W/Q:KÊè>Îx@cÛ +c5J&ë×ú¶õÃßNoÛ$fÍ^åobÔº\nyõJG<Ÿ4»tàš÷ۂÿI³sSÑ=ŸŠ‹™°Š¾ÚÃáCws p)3,â +­û{²Á9ÕˊßM– ¡éCÅlô*'§i¬†ê¾Aß{l“J<Œc2Lc3 c7ë`îf¨½¯„›zeö¹>S²¨Fä"Ÿ5é…0xƒÉÍA}.¦Aôyáécî”žPò­.«Éã”^iïnÆ÷Ž+Û»›Ù÷¥ç·l=˜Ëº\Ý( êö¾Ë78©ÀS” +•”]±üɓ &ÆM~Àh—,&’1»;£<\‰JG{ÆI"G{ ÄÙðÚÿ¾G{éZÞHït²dc•ò_õ‘Þғ^G'ìä¿tŽ÷²½/„ÑÉ~éïÄc ’’ýÒ;ßüÕìé:^õÿD/zþye¯ÿµ3¬•‡ÿ3¯ËýãHOѳ<²×Ý·ÿ±Œñ¥¯ºVüYkïéRÍO){’Ikî]¿ýÓq¿åºMÆóü$ 4O›ÿT‚é¸ßÄMÆùIçMÆó²?؛ýÉàû©àö²üMÆÿÓ?#ÿBn[¥øSrßþÓqz1'¢\ïÏy‘_ûÀþ™ý«þæKÓ¼­ñ +Å_ÅðËKoç tI}â ewÄ¥úuÜÅ~'Íiø²Ûÿߐø²×âoâË`c-é§vg|TÞnˆ}þºX´Á)°¿tîdýjkOû)Ô¿üÓy¿ðJ-h“YñGS,õRŒÐÿô«’ôm’ Ì(¥ªRI­ +Ò¤ÐÛOÈ%L“4¹´¯I}D¤Mµkt¨’“K•í,rR‰cÒ¾%ôÒM')J¤¢RÆÛNú•Wä%KB”º]²L&šŒùÕó¿zÝ»‹¿ÜGìMÙ÷ŠÚ~ðÆKï cþðÎFâþôÝßü)öÉÃÿÛ.+ÿé7§ÉRI÷œþbKÊæ.&¼ßs)¯ÿ9l?üÿ¿ãA8Po£lïãhõ8š:ýŽúá»ù¸Z_AsMÁ°äßiº<¯oËj>Ö>ÂǦór².sxô­òøÿޝ‡ñzoÅ7ÿ)BŸEŠbFƒþ¥kŸÿkŸŽþøBü Qó¯ôBÃÓ2çq£SÅüÑ=ðøº=úa á4ÏdÿeÆl˜õá ôГþÿ„z}š/vòL²CUÝÃmëâÈ·àù’½4vKnyRí'_GBJÛNf²®ëH4Âo;#)yqW*U°ë‘ƒˆ¡,èæP7W•r¡y +߂àãÊmz@%wT¼ÎÁx^ÅÌ#('0¿Ë‹ø†‹Ö®SJ¾Ý€VHÐâÈͳýv!ß\aÁpùÏu…Ì·êˆy?ä…Á³ÒðMäñ­*$êb>’Ÿ›æ™>fæ/Œ _ÄÇbÑÃ^[J¹ñ\Õ4Á ¼Áç|`xàê½1ÄïµÅU„«ãGºë׺é#Ýu ÝtQî¾÷Zô—Z¡Í¾àèCº±t„OtKÔç`7Á0ß´+SéáN¾®¿d£å[d1dš½É흣F“\9¦WȔ-Y 0uî¿z>Zî9”{ʶœÊóé…á‡ܪ­¼LB¶k¬nþ¦%@:¶—h^—ŸÂ"ð\Â䄀JÅsAÙaSÐð…ꆻ)´ô;Ò±Ã'¡´ Ç­äCé[¿¢dI>«ç8ÉGüD–“ÓIƒÔöS©.-¤…:‘vm —ýPN£Áøœ§¤V(EÒ¬ÌBWù¤KY@µj6±lÚzúZ½ñyÆ($7зQX‘VÁ{)͝¬èǔ"Ú3§V+ /'M"ÚÌS¨¨]°òÃ.€¦ƒí0ba¯õ8ÐcXwðv8¨,U®ƒ–óÚf1yáÐ;^…=5‚¸F*qè`Á¬ƒSÄiDu'×Ü*&hŒª0×8S%óÒM=ùÅ=ž@‹ !•UèÁNjÕÙ|2_~•ßö9䣮eàï'FQ²SC>‚¨~:_âMÙí‘a]þrØýpç8&+ÏÆÐœ~.(°ùÐzx@¬VA×4d>jÌëšì;® nBlh‘€ØQ7 ¹¥èÕu_3?°‚£P±Áì* 0µž‚¥ìØnö?²ê¿ªÔ­zwUìÍ6¸(ýêŠù¸*8ù_êÁóÁWó!@Ö4bRæ›H|ßæ +3UsîŠO'2ê‰ÅÒ¹{ð‚‹ÇÑfZ¾¾ +æÞoŒfOt8Z¥*§þ—âK¸Ýª7|û3èÞK½¼—A?ÅÞ¢Œ÷X:£Â ‚±m§§Ë\3@œ™’sz!-5s%+FIOˆëYâ2ìó‰2x«Z`ÙlÆw\ÂUme‰ïF¹þåÙ®®‰ëÆÖàyUʞ†€jcׯ•SÈϗI ¤<‡Bêªfјò²&K·¦8i—§¥Ë\`óßz:º ?PÏ*«'Õ…ŽÔÜ)šŠœ‚ò¨­e`Å¿Î%yÕÍ^ú¼cyÛÁ,7¦¨É·X[$ôð­ká”ÃJPÜådüF2¼]°/*Hb÷ žncp‚÷ÅuØ{—cb}FmøºëÞHs‰žŒÛf‚ºÝ'˜evÜfAì•uq2,$½¶vì^ضð+` î—·¢’¦ÛÌ>Ë'2m½=ꋉ°z H!;p›®s*I›ŽÓ«†åî%+@`7´y䘮b(žÿø×@Z: ¼'çß²‘U ƒ"©¼:h«È“‡ŠØ"Uïß·'ÿӺߒãÅ5Ên*Í%à [µÎ½zpÒzxv¢ßìNéWKEÁÿ¨N½Ì«Ýþ!®ïߤý "3?‘{ Lœ6¼¹¯³!:mÑ]®h Ûy¨m@8e; ƒ³½É»Æ•¶¾SÚ]”Œ–ž´˜\Æ¥§/–Ä +¦>ɞšÈ—!}á:œˆGi`nMÊß¡h‹°‡È.Ð #fr}²Í‰s·Ùƒ·ƒïIoɬ,;^ŒÝ¥OKêˆ1ç+bLŒÊiêz[Ws¾˜j“º+~ÂIäa姝ä)@¹7¦ØRüöwaG ­ñ©×·Të>Ãë)Z,ñ¡´ÝdLÉ[OC£TðَÀL‚~͍|1˜È t‘`fÐMßùHxŽ_‡¬'pðU@ÂW‰éu/E‹ÞšjiUԛaÓ¿ŒHgl«ðR„4«ÏÎô”ªížÎìÔVb•§¼wÆW Ma « +¬“0Ôií¹J©ՈZ€’ šã;U’á»6;|&[Ë<¸eUÏÆ}ã#,ÀšÚzÂTa*Úk1š‰ºŠ¯­üé×Ùµ‘²Ÿñ;=yÌlÛXt|F3 FîÐÛ+ìÛ‡é™l­8; aͱP|×&7¶kì¨>S c±ÚÍ!ŒÇ_ †(€À[ig1îQï#°Ž +N &‹ï]q–Â…y&\ÔE—"rFɒ]K¬h¤ ¥=.èÝÇ2‡nçw~ks±¨Õï9†¥*Ò®ÅìícÙÝsÅZʋ€#<7 {;-¸lƒ¥WZ Äï“6öv*šËádÃƒ‡Î¹ëßûUÉ®:=Î'âZf½ò¯2‹¯E÷͸)C'’v#!¹8"–0 +SÇ[rŠl%• ã0ZñZB¬ËOU÷T‡Lڔ(8 ¢Ý¸–BëÉۀR]MNóÐhd=P¡=Ög_ˆ(¨6¸· azBÿ†p˜Bɇ)À€ûÝÀ­¦Óõ§ë·»”Jð¿o³ŒŒ ê»sži"_·‘vâ&f¤ò×°åç·£dSÓTßlèF=!RÊ¡£¹;Wk¥ô¶ò¹Å”V§¹Þt)ÁpžšXà¼%…ã%!k!j_ìüÛ¯UêBˆé¦¦ÆÒoñÒ4‹z¯‰hÙM¸xw{FõáE»簄/„§ˆ “¦å/ÐoGF΀€PƒßÊÃk°æ•ËDnô囸«4"?Gº‰[.nf¹Þwç%ÐÛ3=þ³ô1€=Öû‡çÚ¶Í&˜ «ÝN + “ç(yúWeÑ¿|6Ïܸ_G£ƒwÑÁâ—caøðÆ='Ýs Zês•۝x¦õ_hŒ(>ùè&žÛ’»èÚ̀µ;ùܝO†Ìö± '¡ ±ÑKjéW«Ê[jäIí ÜÛVȓ¿ˆ Ÿâ+®%í¦ŒÒ$E6ýä]ÛG‘w- Ⱦ„Ù×'¦¼€‹¶jk—&¦ tÐW’Ϫԝön™ìîØÙµˆ8-;“ÉIjáS +áâ卜r+Ç(ÜvVš6¬ö‰¤µ,7¸¸ÆÞÚ È¶yƒ†°"í‹·ؽ1›—¥i^öVbñÓÁïÚW‚nNüøÍªú°–×í#Fg# îJ†ÖXj†65´ÅäPYU:ãoÑkïŸê ØgTþ°Û„é…s‡yÀ7(ö‹!þõG:w‚ÉdÝsq5ÁØÙC\p™µi^ b˘ +TA Ä8&ä–ïž¶ÐBwô»œ jÀ‚³€ÍÑl†¤¼£ƒk¶|d m?¹¤OLK¥Û\·T!••¸ +»Éшb ~{ÝÇSàAYªþ:¡ëåkƒù°išV—#jÞÑ\g>ÅÓèäß?f¯³í†ºò}A•h°OµÕ# é,(ò|Íq׸kÍÜ7¾*KëãfÔuÀΞë_FåE eÜpƒb<‹¸fm=ŠBzZ׍5oaÞô« Ç³£ºPëjד É7ÄNäáßè‚Gn9Ü4:%«Ú/ٜگÀ65e+O80~¨C…ض)†÷˜6°õj@ÛHŽTC—½û`ôÞ$½ˆ¶þ¹g"ê‰-eB¶Ù7¦ ÉÃtn{JÓhîwxí“!ô‚˜MÍ&'råÿ +3ég‘¼çq«\âw(¿(`OšfÀ—}¬_Èlª=!f³áU:›Qg¾ýÖژàNï UƒÙÃq…ÕŸdl(„ë–à8rôGx´ÁtìƒßŸd¸y‰µ²‚– ðìŠñ¦àyö~°Ø wp˯é œ7/¹ð­ÂÖM²»£cîûAûõ#ýú‡wµ¢®¨ù¿QŽ„2ú0®•}=#´ì>¦ø>z”ù¥¯ÿ^ikø¹¤ÝL<)ÿH1ê"½:‚‚<71·Mñã¶|ܾp ÃÄ·BZTe_¤*tNÐܯõ p?WÑ Eϛ¿»V‡~–? ôž¹¢¬¼•³ÐGbË„:RÄ¿êÁŒÑÂ{„Ì( ØbÌùרòð([øo@¬™_θ)Ƶ„…/À .×±[§nñºÍüu«øåfÏ&¸^sىŠîëÆ‡û‰kwy"Ò¶uU ʞê2êDZ4r8*‚pÓ%í ¶˜ƒHD{]4þàþ  ~9i”ˆiÕ¶L*àöSÑ,4ÑÖ}3¡¦$3ÿŒÿ)؜H\ÙaÅbéÅk­A:ô\§Z#Óù—\޳ºÕÞ\=?ل—¿¨lL€mŸ´Š÷Xy¢7Š(r¼Go>Ôf¹âx)Jþkkúø¼ÄîCÚ``©^Òj +“V„ MM»|á×V’±<»«õø%ó O$Òϖ’ÕW¤@Ã@ˆ™}byޕʕÍ9ì…&$˜?ŒÛnÅY­:˜Q¢ë™„ôð,O´&X¼¥æÛè@òc+QrÏDZc…øüõ'8¥ wÛ:zÓ\ç­ø{½$-òzwfіQ©î*»ƒ”^Òõ)z^Òù(Œ`IØ­õ‹chÈ«HøTĤÂö˜9L +ö“Pr“A°|lÁ6Á!°lýƒ‘ “;!Çñt˜^jÒ7àõuù2ùT‰þ(yÁàõ“n‘¢;4 t«•ôR Kˆí‘zõ5Ra”©VL ‡g»,­g삠yÕ§¡?ëUâ§–H3òÛ¨=XHãw"€9R +0|.>¨X!Ð*ƒÄ4i}^è¼y7l’¬X,œF3$½&ó"Ð@mËÝcùuñðyûaZ޲® ôÎAAm›÷L +n“¾¨{Ÿ k4ư@5k4ñ^EÜ^ÔÐmwÁÂL9@ìpÊ¾Ô ˜ž‰¥;` ­…$þåˆfnàE;RpôsçB»”ôè5ÁˆCЖœ"WÀã“û‘,@ò~ä}¥:yE‰ºŒǹHÑ.¥<ãÕÀü™ý$îÄ`XŒKúC¬¯=!ÎWô‡Y\îFAÞr”ô8±íeKd›§R|òkTêpEbý:›ëQ* \6e>Ôd5ÂnàL $߆D߆FwRž‡nÇ´.péԀKlᨳº «¼æþzl\ê×xÙý`RI$쯭ݍۛdꉽDª5 ÇþTZÜæòÓð´(§@lʼnÖÍSɳ&I¨·v¦¾©E,û™ R‰F¤³7N© Z„âôR“Tê*lo"ò€ò”ô”9{ý¯¨W!AITôV/¹ BE\“ßßKà)*mŸI¹äpŽËDžCœÚkëì¨*Y|XlÙðÚwT.ï¢ïn9‹䍢ÍÁ‹b?Azí¾ ¿U>¬P†a2.פA¢Ón5¬«à÷jÐCpٗ^38øÇ»{­L=5 Øtš„yóî Ûق`)"zcÒV/ŠÌ5Ôæ û õ€AÌ þîK†Ø<ôç{¬'xº§³–kÚó*+©ØY©9©ªu9³^ëDlj½®2>¶^ëBlh½­|Ù^ëŽ6í/kWÔ»ÉY#ƒãdŒÝÖHáxÙ#„ºÉG’<•ÖHá£à~Ü#}~63îf€Ø{éã~vϧçç,Ò}|7ëhÝôŒžqd­yZíR}0WDÝAËN-jÞ¹ÔâÂúº&̳n¾[iÍ¡µ?¸OLom©­·m¶ohÖÛà¶öö6f²·>Jªì#YS‘å8æúF  l½Û6ó†ÀìX¶¿šÛÑE¶™ÞÙdȁ®ÞºàFTZŽÈâüA· ·¢ ú=?‚4o,‚»“jn0Ϲ:x=hu•T_Ê|ÍƒÝeH£¤ï¤M\cQ@2K†œ…-à”ÎFå|@ëß΂ÍÈ‚5ë¯È³?šv4ŠœhݸÀ"DfX|"m¿ ÞF@C9X=kU½`G{l×ÞÏ4ñ]ñ¾Ð<+&á]’Ú¦/T¢DP{üæØÉ£j}ׂEV ×»»ñýø„¢UF¦‹Þy¶Ýmú<N»çvâž*•w ·!û#F: `÷Û¸ ßì²` *FКÓSŤO6FZDzûÛ´@b$¦ÞÍôú 6‡eœÇÁJ½ähE®ÇÞÀ†ÛmâßCò£áÚ#“Âú( ùÐ!ªÅÅÄðœ}‘5Á< +^È&¾(%IÞ +( ÅsœšO¹ˌjKÙÍ·bÎy£ÐîØì_K@vm[Žýˆ‹;v&Éÿ»sÃû},…§ËĂ¹Ù"öÛ^1ÛÜ¥Â?»ŒH_¿ê1ôP0Bö@¤½~™è žnYÏ(…]5ñ±Ý' ‰'ðǕö€5ú=ª®¶É Éõ;ÈхÎQV¨›Ûƒ‚wó)Œ¸}âG’q|šöS‚ðTihnB>·¯•E~šSÌ)³dpŽÕـ´~¢Œ{·TL#¿º!b’(—î`ììÛÿgJxÉ© ôn~xäT-:¸}ÔI>2¥ä߄pGÎ<óLê«ITB.CՃæ¹ñÏóó}S ¢ö&½Ö¿“Ñ Þ5 ùWY7Õ>¿ë©}{¹ÀPX«¿›d+MRÞ.z”gŽêoÇ-ëï}£IÙþÌÌ̆I2! @B¸¬X¯¥¬„Ï¤Ì ÀÌ ( +‰T¸‚*Æ‘‘Á ú|å«Ëj§…E®´mÛUk|‘ +Œ’$€ "5Q  WmpEQ´ ûýýýÿûï³$"-këo__t.óžç/C{[¼æï9½Íèo=Üޖþï7·½=üõ<=ÖÝm¶ÈãEÛó˜pQ›'ñëåE{-ÉGdÏÜ2Ù(3à: ëË[&,#è“ñVeâagâʳ±•gä.¿ò¢©Úª•ÜŸ0…µ­*ÈBÑiœõV´:º’‹:ùV}´«4åd~Z…Qœž1·Â½îÖ +J}_gHò”ˆ™J̈¿«½ È߁6Ký¡‘abŠáåAš ”2ø¨ï?ZÝ?ªFyusZ²]xǂ`qL np7Þ*áCN¹@’ªt†7 PÙ}{™ToIiNŒ èWjÿê€/k:[Ã`ø-üwÎ ©\´}”Èr~;v…R„4©¶<5þäáûîG‡¬âÌø‚-ÉêF*AÀ˜r‹?‡ÇëA£›capä–ÔVÓ!cÁº„<2)e,Ù¦Õ·5«ì†/ŒÉú¦¼šžÅ6¿Êx„–ð…d»+Å XcǑ!4•æqi'fRG9â?6l£î|k{3ïýslJ“!ÕMŒ©2Œaâ+Ym„Œ;²šã€-þSø/‰ÒÁMyšÎ²»£GÅq$rˆÛÙ?.9¢V47d)«9Äq¸åÖǵvMYŸÁÊà(î³x.’ Y`$]¤»éCŒº³ óñ²<äVaA]rª-Äc¿%oé"}¨Ö#l1¼Ù•O-QvS%Â̂PÊPjBH€LëgŸá#”¶Ó²é*_“%#D’IN•¢F·:$##D4>í3s*é¢u¨µ–)2ÒrøåW‡ZgÜù_éê¾Høß„u\'²ÿ´|o Ä{Éúcã|ËOcôÇÆÙ1„áîÿòª²?NïóG:ÿÞf©ùMS3 »ñãz;¿þ£^â9×¢eþ5VG³p¼s¯×äŽu윔s¯Çqý£h‡wô‡wÚ£µîÎ?µGkú÷oéQÚÿùe¾‚MÓ/Ý3:1âe Æ!ËOǧ÷y ߋ31Č¡&~‡°æ8aîW½Þ*Ñï@Ä{³Ÿ´‘Éœ3GexÉKâç8ƒùu AAÜO"ÑlÛHM †”® ëÝ2Œ%³>ÖÙ&rm’hÚÙ&¤Ùr'?Ìåæ8û%Jf ¼;ò<+ò>zcÿµZ·AuÿÿÂ4Ïò¡»%¢ò·%g×ǏwÒ{¾YÞ°þê­/2ïÛ"a_ +ŒÝâa•ã/yexÂ^^?`B°Úâ7¤ùê´掻ÞY_ò÷†Wü‡ Êÿ„žíFq×rwi»ë.Oöq—5«fçŽÙ“»o“¸wá(Yr›+—r±_,ïWvW¬… +ÖöÊôÎðÉwpg's;À2½³¿|®æwòԓ?òŸºœdê"ÉÖ^úÉÖBøÉÒ¹éœû#¾¬Vœüƒ+ʹçyüŽv$íÿÞ«zÿâ\SÿAY¡ÝVÑñ}¬Øhü4W¸¿pŠ÷W¢ýûGÉízIÍÙ«:áXŒ\>,’ju&×%^Ñü«e4<•óÒUý«ÿ g»Wÿ<ŠÙGt×$Ó _šVUÍ6ìñeù|_š’üá™lZw,òEùÄÊÃlY,1þqùÃç£W7jÚbËãOò¯Ã¶„0–NÐ';ý*?}Ç=sûÉsß<|ÿñ<¤ç4º'/û̶§mãæzz¯çUÃ÷H½Ô|þêp_ºŸÝÁ=Ñ #ÝV(?ûUrÿûìbËÄyÜ †‘ø;Ò +Ÿ#ðØþôCÌ׏;Ë<>ÚѪåèükJŸ5îÑ%í`yÚ»³¼3v\ +/ß6'ºò?¾Ð–{£[Ðiu»‹W{oÿ (»6Bí·õœ™ì›òrgÛÿU%ÇõRQÝý3”}ːw£ãþi±}‚aÚn.)éÀ§²{aèÀs‰² ìhý+„gäü[8ͅ +Y¼~žy¥žf–ú¡£8m­›“Hm«¦çš &ÅdÙ*àÎv€<›Dӌm_…÷È~ðbbMm€ üßg·mʞº—#죶é´Ý5&]×8õ.2–1Ý膄0À*åAÑXiŽ'èxϬÉaf:އÃÜtºÃMY n¡”+Jžïˆ\¿Pw)¯ž/ÖüYOæ2"_öÛ+‹‰y&-­:VÍr l—}3âÚ«`cWXµ0±WºãÇl™Ê´aæ¡!‡"?ø`G®½ã•8'–æÅžcJ2\TµD؏»Ðd؛+ú&&ÊüyÌ¿@Ž7®Š£î*|6ûʎâm÷!Õb¯áuÂ[þ¤7¿rz-ç!Ú­;Çô¾)ñMYä ý§Ùmæï­ôÿdÕÙÝ‚ˁ7àüüOù›;[ÝXâu9T4º›PZ´ðò_[9X—&óïhö÷{·}7ùZ´ºžQZ´ºIÚ´ºIZ¸Ëéþo5öYµxO¢¸Öÿ?õ.‰¼¶—ýE¯oà«6«ùÙ³Ëû,ßÒ-{õBqí>-uտÌ}mý\³Î«£÷ôH‚ûQ<3÷¦#“ùn÷ø!wᓠé –qÝé?€µïçÑ¢ºä~ÿœˆ~¸’ ûyâò:’êK^ Ãl“©Ÿ§"kùy.òÏ¢áɱ¼‰}6M²àˆ8³›šæK1ó¸ªyüòÌ[aÙ|ˆë˝>‹Û(?y¸B;Z·œ™-LÂ(yΑ`%þ"åCÂ-x¥1›†‘jå°íЏÆ0™}ÙýÃÆºÕžé —ßS­€œæd=l`•-¹Þ¨ž¶[£Ì2Œ˜” š#sÇ¡¢ÏD;مšž¶ïrs³ú}fV”„]M¯°Zì_ÓÚv8¿ã¡\Vu†$FôWdèuðÓÌt?ÔIÈ.~‘[þ×J$«»‡³7ÿ„îü‡ÅGãaO²0-Ç"éØER=Ÿ¥ÏŸ|§ß¬›GC´eH½ó8@ %-F/î—bo E5«õa¹ÌÅyyî{Ž#n£Ö‹ª  Ø£ 9æ@5N»ÏÀu»Dٕ —å-SÑx‡TžÐÉ ¿ON*³Ll…Gß,öNÔ‘L¾ÄÊ6¨‘”Òøˆó’Þ½±q +‰ºªCÀ +ië#Õ5ògžØm_©¼ÔÙ"Üp»Xœí};üCÚ(”A þ|§íJÃ\ïʟg›rÒhžùÛgY¾K ®ˆÕ퇲 ›ÌͰ¡Mü’}?’p¯©²ƒ·è½óµ€ž›ZPt€–Ê䯋¿(Û.˜•zxýíqQ Üa¤GÍÃx_+‡ú¥ YÓvà n#i¾Ñf¶”þÑT$m0fÔE~Ù:©H¨Û‘¼k¦‹m=M¥¶ˆU`NFÛD%šh6Ú/ š“FöAë-øŽ˜„ßþÿb²Ôº§¤ñ<¬üÍé po<»¹Žˆ"”Œ¹ò"è²8e$;Ãñ Ô>§´Uü;ø.«»ÈEÀø(Ñl,ò­[•žäïù1ô/¯Z æ\®Â¹õèH":ÂzɯV¹õìZê+Jÿ6‚껄žbdö±@›ð«eс”ãXrý‰«2¬Ãxeò`A'Š(*ÁòʶXŒ - <-¾2CƒgJ8¨a›³Ø‘g~.e¡‡ðÄÞµ:çOÑMÈæ¦ŠP®3q 8 éUŒì·ÿÚû…‹A¸qt=wÖ·!p\ݰ0’ƒ7¹ێ(™$“Q¦€…ÒeÈBªÕ-Ä䮋$¾LŒ¼c.dh&OéI÷CȇSÆr…YñXŽXóW·3÷DY”¡ã÷›ÙB,Wˆž—À27Ér?†8+u9®I]R#ÊÞÕô Kzž±p&ÏßZA#"9¬M,`‡ÃÇ â7²S¼=úì%—^†•R`®QgÕö¾î9í¨† 'ßûî0öéèqÍ(Ý6߷ܺ79Ý8ZXæjõý®'ÂUôÿ#¯Ì–ÀZhå»fˆnõÆ.¤ó.µ×‹ZöRNǍWn_CÙá™"»Ø³òP$/09ås’úçO¶0"(uN$ëð›¶Ä ~‡Éĝ¯ÏÑsUU/ÝBrðƒÛ1¾›6K;ÝvrôÖ p§ LUV!^–IpHŸ(¢V6&rZ¿”ºH¨K¸y+j›þLoK}¦…yæ·2pù|ÙnÅÞö‡§=+"Âæùßy«>OI›±Èñó÷ù²öwz}¡`œçaq1ºsÇ|üÇ|gs|¾óLwÏÏWq|âV-˝óMs|۝ó³;åöUñú›_4OÚ£ƒ%·Êv‹' ˆ–È ië?SÿøbDÑuì@n¬ ºÖºN­p(…ëÖ  |üÿ8µ¤ˆñ"‹R9}ˆYßgÇúa9I²gY¸‹–Ý +¾q1#|?fle0LDŒ›~tíõNÐÆ.ù£¸y™„°IϲePÿ fw|™Q=6¢ìÉ×rwGdεMîçkð:+V§kùŽ×‰Ÿ3vß&8po¿;]©LlÍþ#µ! «M¾èíwg„þ¬ûP{UdQŠ|_¦qY_zd¡?Ø-±KüÂ:фˆó@Yäa ¿ö ?ñoÇ\Âr6+ˆ¨ £ÖºR×zléÀ!~åZÃöçéUÄÚj½Æ+¯ÞKpÖþ2¸Çî÷h$W»)L´§wŸ@Â(ÀRÉ= î$õ=õ#-¨õ¼¦²F{xHsUï *–åw†A)A((¨«¸Í¦êu¯ðr¦YV~ev_£ÏÚ³hÇÔyÃ4„™¼Í"‡:«˜ÉùC ñ?+Á,•0Ý#yûOêohb¾[x±ÅßY'@] 3žžt?óþõïâÂm¿ê™2Y“f=\¹¿WLÑ}…>Ú³ÙÝQ6–WûlˆXÖÅÞöRJdø0\Dg"nEY±ÆG³*çfh7mGwŠjÃA°ü/_qˁÚý„­ù"/? Öy’;H# P‹ g¯£}<éó+À¢%:AJA7âÙÍñòòîø&(žæ;Ô«ÒR§®cÂðµ½ÿS´_‘Èâ¿×o'¨²~¨ºB ÈgL"žÆ_,Äæ×ì‚JoŸ¨ðK¯/ÔxÿóÅ*o1Á^7Ȳ‚×V$à[=Äô&¶ -™nÕºÍk Š›>¯á¨v°ØþȋØvPntu}·ñ ··'{¾.ˆü㲁h+2ß4Tfô ëC¥­\I9#Îns†Çß`»=ÕÀºí'›EÁÚú®RÎ~粐{ O>A¦i‰˜­Gˆø®#ÈõM+‘Ïu¨hoݶ’]hnR€­Î˜ ©l4ßé%'֗¦÷k|ÿ®ÄDYqê ®q—¾­ _`e,µÖ¹‘=a£êR'¿EAfnsœÎ\—4¯9 O_y퐁v4¼PgמIƒ{ˆ`Å0"}•Ì<Èî¹±® “å6v"ÿiΞåÀ}Ão%œkеûûˆéÄG4Š7RÇÀüðiÒGsd}ðÉ»Ùz*Jæ.ªüor¿ÆÐÀRtŒê÷[Ò÷V„NÎpÒwå(ÊÅû”…^Ùû¶µ“döB:9ÃÝNÙș®Ì«ñâ|‚¢(~®‰•¤;…å +R¢(¥n ¸}S¸ö?*8;㐭݃lª:N†ª{n¹òýr¬dµ#—¤ù ¾-”;µw Ú6@ò*”–¢~_F± +ð’Ÿò­Â2÷ •óǖ"Cc<{ürùâBý3ÇÄãg'ÄãgŒ÷ž2AˆëþÎ"ê ƒZ÷áÂGS‰E·Û—~Ýp¯¾o Zü²S”jƒ¯˜aJtÛß:N’Ôö­àµjÆËJLdi€¾¶; õ2؂øf„ ³öò‹¨¨ûSç…_‘tΓɯ`°îH»×¸u,Yì?4?©½~tV‘eª¼S+‡øI(按µwæ¤?’h‹ý’-Û"ßÏE¼Ád9)57r>E6"Ì|6 :ÖU´²—iç­h>X‡p—×¢Þeû$[͗ӻ?§ÖKøí|»M’Ö–áÞ Z6ÀD'a@/ÒVÛAʛ hM&d®†{–Àd‹dë!Yíææ5؞šQ¦´¦ŠD m€Ï¢éÚNùuÁ¿ NW³´„5}3Ü[6wå„ü‰{'TOÀ®®ÃôQp®Ûý§ÊpfIéJ)#"ñhG»e`z°ÁZ ÷æör¢P›¾*©0GyŒ ¥‡åØ "ÃòÊó”°FH¦è³ó’?¶s§ª›[Îw#¾CøçüÚeŠ÷ÛëaòQx7jÙð€7x¼˜“ÑÒáZ”…çjRMz Ï£éQð³Ázù°=›2XÈ%ä”à½ÁoŸ©¶}GāO%Ì_€¤sÜz¼Þót°TêäAS”pü3õ*AR£v’%1\7é‹1Y™ +ÛÔO½°ßÁO¨‘>f G $úo¸©ý×dX=5G'^0•lxq>À‹ìå‡Ê?¦¨ÝÄ蟂Q‹Ô8d”^¢x~'À Äfù²gÑ݀_…à>M-¹ßµ ñ)†¥±Q-ÚilÔKxš[X›Wô{gñ}ÚÑ~ +4~“ú9$$“ÖŠÜ-¨@;— k½Ðo¡Í¿kð¿§Ü¹í¸…;[‡½ÊŠbT9“"ò€ReøS±©ý Þ-û^…Óö¸§ +ÚVóð)íaâAÄ«ó„,˜ªQ åÿ<™,ŽÛAkn28cî·ZL\vÎßÅ¢µW=òö£>2ö³ÅùŸd®¶Jñ %qô*êN•]# "ý…tˆ4‡Ó@S(¯?‰Ç¡´ó1 +ß¿+Dñ[±ô¼Üêô ÑìøÙImóe JФ%rYÖ#ë2äÍèU%vÔ8|5iŽ)²pjÐjÌjËþf®ˆ1h#DŽ{i¤-/BLBýK9BLIÇõ|ࣈ˜’wöTWE–@|,ø$ééQñt8=‘¥§¹²­Í?9Š+ð·ˆÏÛ¡ËJ²„$åR¨ ‹ñ¤Õ}ò´G¸Cáô¼:9€Ø²]iÜ¥&IV"a ßôìJ Ä–Pí¡ý•¤m³ Nâ2Zúþá\¾î=‡õ±|ׂúŸ‰Yã¾jc²h>«·ÂĜ6‰%\š0]÷^Öë…ÿšºÄWORæ.Ç!Qfœ7 Uð‰Ñ³‘œR^_Ù ×÷$ûˆ´Qœ’zŒÉ‡:@fgé¹Eú/„:~YòA«5\WõùñéžeYÉz,ga*kõKÂ0ðuãÏ¡*Ò×"ö¡]•܏´™·+!⬸½§^:ÖK˜örèBË¥ â•Ã+„Þ_„6åá䨾¯³8$¢[·éƒ}K€¯ï€|&¦égÊV›öD¥vrÐKF ƒ(9Ⱥƒô«‰ÃÏz¸œ<÷ '¤4¹K8|4­øÍ±7Ք‹Â·ûúIcÎI[÷Ǔ–•¿ O,™ÄxÜæ3õ’¸ Tã¶+ `òŠš¸QsØ£»^wAe¥ÐkbL%]ñ³‡Ð‚Vtnó ìC}]Á˜‰B­Ñ´G +à@b=yсDl­­7l'$uÊÙK¯ LvÄÁä±ñR^G¨hŠ èjÀÍÏFq+ê´ù0Mý+ø½K2‚Ï +° zB[ð•Ud¥¦O¥YwáyË*VÉÁÉ+/(†w1šÉ”¶Rå2€ÉK * òʵU}0ZØ¿ÙYëC&ø#Е<ÃGÿ®Ê D“Ñòð°Iî\#åÖÀ±yEè l¾ë©—÷]•}ÅLžª–,µ£Ë܁½pÖØ÷$I©Eð¯œRäÛÃiå+¥ƒ&ÂeOakºõˆ¼*Ô³ŒÒ»ÌŠAâ6vúÃ,k*6!ðŠ1õ²¬ÝÆhl4†±5Ò@SZ]äï@ì²àÈylÃð¯ð½w´6GnTLNàÞ:1Ó =÷½O'ÖBI±IôÈZòu°’äëʑy°$LÁlMßþˆV¥Ä$¦»®)¾IY~øå斏"yËnUö£Þ»¾jêf¬: ‚;÷ÍDò-@3½’ 2+íh CÛøY¬]AїÉÜéøPƒåûêð¼Ù†P½È²1IKÝÀO1³JÃߑáAW…Zôf0Aiwd°1”(ú„™B]´%2m߻ސûä›A<ÒF°ù5Ðü}?Q^/È"l Féõ¹¾Æ6M§cØD僨LBS(Ð=´ò—˜~åàBýx}1I˜£ʏCuøGTå8#NT^k©i3mÃÜNÐ%`³k‰WVÜX„ÿš‰Ì?kèÀ—¿ú!òPÌS%Z€—{ÿ(¾¨T‚_†‘ãyóÝâچpô6Ì]ðÖùÂWå‚Éލtk+ÌÞÉrÈ>Ûï,T t †æXè¤RËd qӛO¯VùO3Ä5ŠP>žaÒÈt_«¹ûþÃ-¡¡.ä+ZK€9í[ÑÜ·N*’¨¤éú'Ó_•\N°ßÒt_4“B¸ad9Óöç û»…¨05€óÁ ‰ +@G`/vŠÌÀŸ£œ½YzÞ/ºOŒ‘ÖQ;‡õáL¾‹Åjç·¿Ü­z”ˬËCèù¼¢ê 0ÕiKû×qÀëÈgy-Ì<)f +dt_R­ƒ½Õ"×<*×<0&ž²Î8]AÀ"±¸%ŸëSõ€v· ×»…c€»#ÝYIb¨gÛÜɑžä·Æ£ùE7ŒÓ582d•<ŒÛ¾O•¯*¾´«´¨2…êðï mfÄ©]q6»¦°“£2%xŸS>ò7S:KDêf©™w6䙁 PT°< +Z.ý¾¢ï!•Åê¤hú¤ ¶STÚ¥¢zö?DÔ jŽøx¸ósO³Zש¼¾4IFJþ¦·¾¼—¾NÃ‘ð¾^•»Ì«ÀV­Ä>š >Â'÷%¾wÂÂCV}Í_E›¨ŽGé±?ΆBû?ºÂÂN¿¬%p ×6/zÃï‚ÍÙáξO†< †¯é²¸uò ]t +}‚:¬«í,öûOë싉•(´®{l4™g"},Öìz|ªÍH®ú¿Þ>‹2ã>¯3/|"R¹‡éÔÙ«¡¾Àm ]þû*8:}èô Èí*·‚ðȒÍ+˜•Y˜>Ëèÿly#Ám`ЙÝSÓ¨ŒòýÕ@§ö+>o~… %EҞ2mÆy7Õ>‹Á»V{ö}ŠC¥šû^%!?¥g_`Ô!sxg0Ûa§b6W «.ehä1ÁhH¸@¸ÑÃW$ùb"‚vb&Ps²öw ;ž ŸSÕ¨°~Ì;ÂëáßVJáMnÊ8W…›ªˆÞÙåS>),e¹ +'Õ»"•ÿ~9ªÛdA +– båè,e8âÿÖ*Yƅʠ' çÑh²@Ðù åx‚3£~™A/á㏇j%T_{},ha¿ 1zÞ)P2!yÒfýoÄ[ÈÖä}Aöù\sá‚:¥>þ1Ž©B9QÕób}B«RÖj:¤hQÔ4LÂßø˜ßû›ã™.º1‰4t`Þ´ãä÷„m-|±úÐaRË/µÿ›×*fÝÓØo +½àì'žpfYMOÝÇAЃÏ@P'ŸNépü½P”9ŒžË®J |\`a øÂ€ˆeºBeÄGKÊÖ¸:¤Oët«™I¢5K„ÁÓÈÍí±¦&†x"’×'!‹µR Æ7=LÁrÁÏÑRVz¯ãÖ« ,D?8wΜháJȐžè-²†³û¦†iéñ·ø'Ëûà´? r,îýþ7‘ý =ª Ô¥$1îŽȃ›@…ÊÙ¿7ÕúËȟ “XÊÃ~D͘¶B”+lŸR1õĺÎY9­SúE®«î5i%V{ÀË2sPõHꍠmâ>@: ôgˆQŸÒ®öÇeóHœËð¾@j0‰)€ÎIkvº–n%ßQÃ.9Õ_è¶O_Ñë"{p)þs&É(õŠ SûÜ>R‘«ÛHMٕÉûº‘}òš3|®"¯¸Œ¿Î”¯¸ðºóðò;  ËGŒDŠÿ9“ÅñÌ6@Ê +™§2#×òÔÆ¢aj™M@¹#gâ\q+ÕwE¶òÌÉ¡U¾¯·c$Bc‡‰JáUº‡$ÞÔB]±ðL[…¶¥ò˜Ê´¾#è ?Xlz¦eJwdÉÌˀàaæ ýâÖÝlÓ Ÿ%28ñM wÀwz9P}ÃDÂøÿ¼‘ؒɧóà HÞ¦ö J]øÐj³â"¤$ä•å S‘C_Àã^K%ú\*Øép±[¤ú¬m/V:UŽQØ!meÐøˆdó tÂÒC¸ eYÂ{ -:Äø Ge‰¼O%Ê#$Q’ ¤!)9ú*¸˜¥¾]i;Ò?w¹)=THü)@[¢ÏuÊ(ÿ”Eíos+äN§–Cü¤Î?³ŠS‘‘HéMÏ04@ONá`\² RŽø,K]ŸTB\3®|{]"]Ք7õhOÚ +¼)‘luÈ:ò—8ä!¹õô$2ôm”|+ [¤¨®¤6Ύq­¤oÛ'B®²®ø³kمyc4‰w,WˆDÙl­„ԋ=³Ðm-Aáx~ü¾-zÖ> ûeL¶SªJ·œÛÀDÈÀ$þ…á˜ÍãÅ5rýdd×â0– ¥§1ìÅ0ƒg\ Lüg9÷Ä5êïs[L2ºØÄûÖ:ýv»]™Ö‰¶×¸5gîµN(+EÛyþyå¨(w]ˆ‡nŒýSC™_š®Y]ÀjÐù~Àž sèwzP®J ÊSG"Sð<7TžCà›ü]¢[Ýûˆ¼Ý¢œŸwÎP]Ʀj¯qɯõ_7 !c­ë‡a%ˆ +ËT݆¦#uwôÌêB ; GÕ|fŸ0®]9ÖeŽ•¸ß låG%FÇTð24TOÆÒ“œ´–Tš".‚öˆù‰œÊPœS—Šÿî>X9ÆÄíàÓíbs☘Ý,υ•nøÒSdYCW(ºÖ@±@~/M•sêށO'ÚD;Ð{§*ƒýçÅ)E«ÆSL9uç~)%0ì$H‚¢GPÍKªÑN€P¼A%!ú_â)k獎üÕád±Ì-ϒÕW è,6)éí´B€’>¨…—·êɟ‰úï ×ò ç69§Ÿo_w¸^Y{$Œ0r‚瘏]eÕáF×3` Øpá,Â3Wµ.Þ"!Ƈœÿ߉_‚¾ùÝíšÞ~h”"d,GŸ`“ªx©÷ÉÔ_·W¯’ïB¥Ò{ÑÕ¸Vêυ—Çü®bçmå—Õ¡»G.@ 'u‰=`]à€ïðijcE+hþëF89;Ô+ç3<{r0ørä럟…ɬB^g­¼1l'gf¸”A9 gì®q/"­]à¿#„¤Þ|҃ÃÇÐôdþHÚð»G2%jm5ÖHŽÐãÕý“߇¶*u¯à”ãÖþy]„-p'ˆù¹0qµº^ÕD Û¦Á~d¥L„5r$+§O• Šèzs²êŽÊy[.¼ì¨m´#ja/ó^Ÿ9Pü¯Ûw]Ûø¿¸Wˆ™ôfŶ¸Ùê­rݾ]êËÚg쑖 ü^¡uvê¹@×ZÎý<ÎKÚ¤it—_NSPª:»Ä0®òô{Á•úÝóÃY ¨™Æ ÷ ˆÛÉ/ÔáCðæÙ”?GÝ,Œ< +na=Sù¾´i}hÚâuVèZ#ïéþ~æÇÝ®ý,æv#‚'¥Ø +«»Ä 鿣W+ÖàMåBo×\®Æþºq|,rºûY(Å*=Õ»œhñO h5å6§ºÇÀ2¼0,xd7–“f¤^èœ""Íè˜Õ¿X$ó|Ù%\|lšíÃ8ϙ؛@\ïÀO[rЧ¯ nÀ_+—œ¢܁¿.ñhFâ¼_{yo«®MãTl>.oÎÏÊ¢…Ê7÷êIù—ˆVì|CÀüžÙ­“×í:В] Â#ô]¬ÖÑì,JyþV„ó â›çÙ«' **]_Qš¢Þ¡<ƒ©û|ðЗ3°Œù´¬žՁH½_ ±3c¹™Ö;Ðl øxÙ=Œ,ž’ôeøóøer}+²¡8…“×Y7ûòb&ÜbEwnç}(% ¶n•¶îãsº˜!°ÿ7w‘°þ<ߛø`3xC5—ï%3žîЊMà)* l¨¦¨"Mú•¶'+PŒ×y)~B>#¼8ʄ~ÓéEAÙFWåR›vÕe2ÖU7é¯M>«(–jñRsÞHÈ÷·ÖÃçЫ8Ä €^T†ùÔ[MUÀ‰È@¦qn3°Œ¬L_›ÁCò´þÅg²¯âáBŽé7¾B@‹ŽÛ¤|ÖÊÁå¦5ØM²®<Äi¤EÅG–Žˆ>HêÃiÚÅêˆÍ¯ŒÌ&¿º4öî.q\Ý¡JÀäózÉju‚(r,1jÚFœè%úp!(ßbD%¯ÍÁÄ£ØÐŸÅ澅^Mzñ,׸¸Òž¼åj·ƒ ×ßzƓ³ý™™™&L™'`Á!@I@!€ÜèdNàdYV4/—ÝF£ï 3i-$$3:`Òú¶ÒÔ»ï_VèïÈÝh@¥¬„H@,¥b4­@[ï°"´¢¤ïïß¿ÿûÜ̆E_y×ë¿}»¼MÝæ{‡»ÀÞ¾Þ7¸›ÌÞFÿ·ø))½îÖÛn¶GS÷ŽìºLÔGäC¤¿y O ý¬ü*«W0sö´^Zâ¾AFXWÄÚè¯C¥½ÿb|¡%ÌÛN±Â™›:®:ƒ +Y™d|ä¨`7\@g\·Ä·Ëè–r`f1 hžwÔi¸C„4‰]p¥4d:ázëöÔúR+‹%ÙNWZp„ ?z‹gµ®›!¸è¡¸æ¡ª)ŽjùõÑý #NG¨þr¼õ³B€~lRŀ\çÍN½£f†¨‚&Á¥éÝŠn•:=;H·4£üÖä+gù7]ÝÍëh,²ÙæÀ—܁ì€'F”£ü]^Ã:—iÑè›@ғd™Ú\7æ PWØVóÞÀõ®0%/<ºæÔ¶ ÓKޏ”óùN9Üå\ è5®ÕXËØr¸òUó«PKÿ42à€Xâñ&|7•Øö7η¯ïÕ~¸Q«ØT„ÈÍk4éà­Á{9kž©m N¼Ìт+b’AkÀ…ùS{L(QÈ/Ùԙï¾î«ƒ®Å‹h>ÌD„ÉçÄÇÑ96ëç§ûS ˜"ÜjQ Sâ“? Þò9 °*÷Oӓ².Dþš?È;ÇÂÑàÏ0~ñ·9R€®ššBöÙXє’(G/Îê2Ÿ3U©ø“È­Œ„ò*®©Ë©HÅY6QgÜÑÀì•ûŸÒ»J%#gÑ)9éDíy’/Áih€ÛÁ]Þ^‡gÁ(4—¥}y[(4—±€¨ïh PÃ˜z¡TMáesYa€ì±CY¯3úDÉ}&¨UÖsõÁ÷O` Ì|6®èýø‹=Þ]‹Õ-:ßiižCÙãÁ¶Š_D×cñZŽßÀNL5ß¼oÈ[>~à`‘†‹*ì{-H›„›p 64Ì(@½½Ðyå:ÞT†©3ùEôİmwž"îh‹˜ƒ"îu͘À_¶$Xw¬A`D5zuhþþ$äc4ùÒ·“›½;èX±®ÚPÌõÞÓâ¥q}´OÁÆ|OD¢ý´¡]ZÀ¤ÿ¨_d¯jßU¥B±M{L˜Ì½8ë©ýDìȯƽiu[þ×®3UÇrÕ(™¢„é_ˆš=çÅùùtnr…ßòxEҠȌ‚*n؈”3ô$¾pÆô¨`bMa!û…¤ëÍïQ _77kצÆ_àÌÆÃ ’<ƒµ]ª…ˆý]Äª?ud³vwËîÓ¢³t>9P[ a®Ö=ùEÚÊ| Î6Fë:Ù5öë{÷ãŰXŠ’Z gœ5€º^8x ì8P|Ðãa®ð% uï(¼á]Wƒm܄xzί‚­¶d÷„(<5}ېz\{ƒå#È;N ay«¬/Ã+,Øû‚•qŠï +¼…Ôrp¯”{`ÈRIüC(OOÃ}³àÂãÑ^ðß8‰çˆ7¶â¼­mT•§²dnù”bÑ8ޞñÇñŒÌŽ“é, 56D«úÜÓM'ZRìÛCÝò.“Y©•zÕðŸ§þW7ýpŸ:’Y¤  ê'°>¢tƒ¨ž gRú‰ôÐvçL1_ˆ>z¶+ŽÅ}Kã¸ígWÔ¿ œ- VYèöQã-žZE¤ì#?müIŽ¿# †*»ã_r‡èn\ç͚Û[­-wv'ÂkÍ~}IÚÛ SGïSB‡Pya¿?èÑsÈ;oÖ¾{c®Ûö ƒ²~!W9hD„[yÉíÖX†ëåÙ9ÐõŠ'íƒõ»¾J'fà+¬ AG»nðwΊó:¢±Œ°§†„°½œlnßԍꍪú,@u½Á‚·È”ÙŒw“À\K«ù”IIÐZÙØ½„ÁF՜§4ßÕMîz2I$æË« ûI#ÄR®F™ueóªÿÕú5ÔxԐu ”ñ œçl–4T凜ÔwbϝÜPžä3åÒºß?îÊ Áo“¯bg6À²þ"¿gœPé³­1.¸2CÜöô'bø”‘;ÖW±€mÑ ¼"hZ¤ˆÃv¹")z»âœ €2a»ýý%+>á©ÒBúsd" (Âbqh„‹#!jÊú¥°9i!xwÕ}á£{F +30Ѿ+ú@8Ȃ >-ùaDFþ]ƒVÈíÈ#]©¬—µ}~)½xã<Ž~à=Ó¢/`ÿhàË}-yü=“oG¢¥jþ}ë«_ |á.­ûg Bj‹#’täÎêp• É y7ñ/{CC qÞXa΁$‡-~ÐõùÁ±?@ +^©Ð^ot9÷Œúü>Ù$®šyd«eً_”ïH¤2œËõ^!§ˆipâõ{ð¢Ëiv&¥ÏH„-–!Ƶ„ÃèO2y ÷‘@P?f…9’„ïS>*_n34ê[GSçg‡)™øqΓ ²¶]‘¡ÌÃ"¥R­´h<ùÆûZÕØ?fÛå2à4½(S òདæ(¿ˆ/NÈncݬÒzôg9Šÿâ…3ñ«ûâÅϒ„<’èT<ùÅ¿ ±*׳Fd:N‘SF~;Ó¦O?'íªÔÒ’Ï!‚Ô]þS© ði¡-ÀB”¶Är|«§œd— ˆ û½6‡ié«2b›­JVýVŒ·KË]/¤)Œ#ôãO +( 1ÛÐÇH5w:|è¹G+B~þO£¿’TÒr’¢$“†·ÚºßfKj’³}šJTô3"d«¥¬._h>yD(ôîe€’6öœC0w~8Âj1ï2Ô±˜ÓgãsVîeV¯"~*HRXò¿±ŒUŽ®0¢×-J¨Ç°Åж},\…a©$R@'³¸Œts,››óÄrc;6K0{ãUmþÑúLàÇ«˜ã?Pÿ‰"žÌÎKW·J폎\áYšÕw B_¯^H-(göõò + \*Œ ›ƒPr=ecB0HÆîi¿Nf·´ =<)Yë@Y]ï·óúñ)µÔ[c2 JgzùÈ`.aÎJö ºèãO{VÁ|r§ÏË1ÆV|§'ÍwEü8ޙ¿.ˆ¨Ñ$4Â+¯»(¦ŒÒ?3È8Žøi¥“,0P%¤>õ–²‘…YCqï˜seˆnw𽯰Žª7p‘ü ¦kCö.tð‘µá!ÔǙHÆt¬*€-*dRû¶&flé¹; +EÞ3|‚y +£&{4-†þt9OêW„0ç\¤xB÷öcí„}ÿ$øå_¬ ¾P«_&ºÄ@#zJe¬ {±]ª‘¤4ÑgïDâVikPÛ¹:6-ФM×¾ý—ùZÍvt-‡¢J<2F¡£ô+p5Ь;ZLïä—,¡Yƒ°úG-v(_Mqi ü¸®¤B9]¿Öp,HäM| \mÍJ çSŠ‘MI£Ñ¥£Ý˜0¾ L=$ûß%©¯wO$E² ßÍè ´Y¸+Ö¥Õ8蠊ÑðZ†ßyá€#8‰ãoÀh­Î‘·‘/–Ú5]…ÉØUKbº÷ ²’•dš'îDrÉTòHu{ê £I,È$úJvuAF]’ ¼C'´”1ÀlWO7ûY÷t_¨9ÖÁû•×lƓÉ×X,KFiúŠâAlÙLel­j„4õ‰’Ë}ù+?$aš4Y¦7¥º¶ ÄumþÄx{ÿˆ$£aDÇãrzk¹¬¸-Uå{ÌPqLßOÜۅÏFӔ†®µšëu@´~V}´ò5w˜ð€Çg‰OlÍ\“¡`p~bÒi‚úÊ*8åWY¤„ÊŒ$~Rƒ§ÄvÍò–€QíA–šà[®a×9÷Ŷ^Äd"±ëeqÌw÷… +<ò™]T,ýCé ³ÂY‹©€¸ßïºpÉMÑtµÆ^ójþ[ÖڅéŽÅŠâ¡‚nÁpÐcÁ®¼¬@~ëPn¿áÅC¨€h>¶×V2wb€h¹£ù1 ÏZ ¶È×µ'0Û¿c¦ãÊ¢ +*óí^B²`¤ÜPå¶<›†m×´B(7+̚¯vç‚@e MÙÕ S¡W~ý O2à~f1] +.ë¬\}m$ s€5úãH6Ÿ×Ø Ð¬<¡E6aì›6Ìÿ8UÆÏ½ƒ,Pôµwï@Jge«}JM¥àQ5Æ¿7QïTøœ“]²Û#€fúØ'ܶí<)/!2ZhoÀ CËCU›¸–s…ˆŒ³cˆHÌ%vK± —îü.œo8–¯L™T $Hb+p`ÏÍHÃç =´ãBŠZÌP%Ùð“óh#J2aP3†‚`Ò úÌ¡h¡û÷†4ž“ššKÜò‹$¹áIJû½ÌiZxÝ™u]Ë45U£=fŒòÍ­ÙL°aS㜖ÄÞ4îY•cdrl$•7ƒTiÂb Z”àJZýÈ T©Ú£_až0 8ž?H¹ÂIN­*i.8*}Á¸ Ž«Øsînk7€… aíxÄq€$()Õ¦—ïŒf-Ã`ÏÞþ!ŠTw1Öë/¾S@üV£aƒ<pcA+Co° Pԑ˜ôYEE …ðÅ¢ ûýµ±ŸPe 6‰\õl¯cðٙ|6fg³Cû›«b,­ çRiwz»ƒ£Iª1Ö;ƒä©ü›¸]ÃÞ¹ÔÁֆ|ëG¦ý¬_4`·§‡ÈЦO^°%¯„`ÿ 3Áš1±!hŠs"²;å?.e(C¤R vÏ ¸éR-<՞y\hAiÀ¬Ð„Mbð…1„!RwÜm¸°['¨¼!u@OÌ/C†& +Ñ +(D7°É+œâƒÒºö÷À‹Ë®Ézó““å#õ¯SDoÐak%ö8o±*cPÑ×0Ü-¦ ŒÝ$n‚¾Á¸ûÊòJØaè;ø¿kv•ÔߒÀÒdøwWӅYƧZÌkÄ'¢¥m•:Ò·QSÄ J¾Ð útë]ÕȨ5œ…îxjåE‡!›pÃÁäÆº+££³ÔŽ·Ï_B¬õiÍÎ>THØ®#€TÐËZ «Œ¢¯‚R¬± °mK!Ý2¡Öxõ×8ã£çUŒ j˜¹!þç®Ti@ác7Ã;;OÅÉ~{››‰aƒì×ÉÈåNLrÕø,Ô!õ<ƒ1áb J{1ãò£nè¦Àe~Èd;E€É¡ŒxË{¥=ÕÆk^† Êv=kN‰[K.µ¦¡[K>­§Z±+k>ñ †6ñï ¼Iªoì +úûJÛ¤ÊǑ,mŸ +l*ݞ—®I×JMB–/ö„³f ·Ê֛dþìG¤œ±ÂabùŒz¥¸?SÃ„™ñ‡Ï1TîD~-ODöBrè_}Ò\ÝÕûa%ÀKïbDò@ ;š—ÑÀWý!Yw&@)Ñ_ÍÛÂÖþLA„*"Õ٠½^Pp¾ ¬âŒ1‚f;ùßÉÛ/mÞOÛ1Õ­|`Ò÷U®àî6~O_Ž«|°·R(Ðã=ÛÈv ;{CPmú¡i&ý/ȅé¶8êcjӃWˆ?f`6ò&…EWÞî +ã»^úŸnQˆà +h[ý~N”ù;mð?V8¶6=ß:JV~1kÚQL_I‚rÞCöƒ¥mú˜»¢ÒfÌ,v!ñ +VŒIÉL +ò'&xzFK¶ÔbžÀ˜8p鿬ôSúg‹†Xº|„T·øðDª%©â•r=P?3œë™`KéûaRC1£FjXb꟰õLƋõu"q–ã'x¿ŒÜÒÐ{üØ\ålË=¸Q9\ì{ °¬ü ñm-"N^°DÛ45ÔÌWéÃÝÀkD%lV€ÖÅÖ_ X“´XŸææÒEXEǚ|-h/ÚE©À‡ +#‡;‚¦±ˆG'wUb£¢\± |Ø[lvŠM[,À +t¹ì +ü¦Ïzû»±zW¯a÷QÃùÌ÷ˆá÷˜½ã؝¿´­ÜRËҋºI!R³@gP­<Ѭo–hý1¡´ýô\w¶P ’ý +Á ‡¸6Uù`ûäw0„^*[(Îó¼Ÿ +ù »]€ ÏÔ[ŠP–ÊÞo`µÔˆ¬çæ4‡Ėøy|´õ3h -Œ·cFÏӟ‘_êªC`˜Dt_âžÄí=¥t‰ŒÀ"³òÅ¢?>¶èàô °¨>E(`Zà‹ýމ4Q#£ïøÏêêøú[‡Øº9êç¸.ü](ƒøï+±bsBۉ\`r|\Ù'é +Œ,015òí_ÂÿÊHýŽ!Ø~9™BµUøÁ¸Äˆ…:á?ý°]fP+÷û7TϖhðmVÀ +Íz™ñWTçPÌՓÒCW×GJhðÁÃbŽ<Ô[â Qpi$‘ßúZ~-TÁ‰¯‹#TÊè#-玂‰úÙE_Ke"YMþÓ|vn,ÕºÞdb¿›ß¬Ü#2>N­`?õIç:Ŕ “ïPœ,e@#þuÆf‹¾¬¢º¤½í:pœTÀpãì¨>y,ÌÀ×À‘#,N$ê´e!3ðæË;èŽÊ—À×J»©µôfTƬó9çŽ)ǀ ›¶ÌÈb!꽅—؆üjïÁ±{ 5V¯ïlE=:,¸Ÿ£rÅ]ý6…>ú"§ŸK »ñ©ëªªF¡cïõ]È?³ø4ó›\„ÜžÛÐ#òók‚þ¢Ý·Êh*–0š¶ H±;Ó%dÃ95CHž¨³€êIÁÖ!yã_Ì|@E5í<ƒâ„¢Ä<}`>SŠ+#°‘h}òè«¥øóKížM¨!ûÂY%Åîðä²^û}|^Gy îºô¸+Ÿ(ß*ù:š¾Ž¥_—š½C—ÿD ÆT4²4,L»'Òö¬ì‘Éùð'©(»ö0˜œêUû½˜F¶!FôrÙKÛö´ªqn?3Õ.‚F½ôÅýæ6ôFJŒ?܆߂—}¿¶óÇO/R«lh¯¥»öȲôªý×!øBº’Æ’ò¹ÞÍ­Õì$H¤*°¤ÒªÉ€vC,y2ÈmýÐD´˜ C÷4•yú^ødPh»óT(‹y‚K *‘8@:ó®²2¹O Ù\›ÉlcŒ†”ÕÍNЁç8öùi¶':#¤fáž`2Låp½RÁÜt‚TÎÅ7š·ÓSˆWcÆÎªõǘ“¼ríᦰ‚H¨vÀֆ¢ô9ï^²"Ü +.8!(°>‚ºhInU%™il`ŽÊé”­oWî·©ãGŠb<“öáÏt<£&Ž€ò¯ ÖàuI7*Zï¼ãhc(ÊãP<¶›â¸k\2š¸î>\­ÂÚãè<‰ !Ç&æ–pÊâõHŸ ­ãzŸ +›aqzvU¼è›TFÏþa'¨nqYÇ'úuHö<¼ÒãCXì n«úÈÿ¿ %|Ï —æ=@¤Í YˆÀ/Eë°–Œa¦Ì›XqèL ýúv@< ¦„¬;^ ìnµóC|ŸGiª1)Ùôˆ¶ø³;z_Àð*¿Ð`l©S”€C£hÌ +ýcÑý‚ˆkؕMeÄi—mòLø&á«>¡åw\%w8®MåГu¡±(F€"Šã¾/<¢J8u“H¯*h·E0ápcåZûÀ/øÅ-€,L´¢ärJ7^HSIòŸˆÓ4wƒ3t_qAFK•ñ¥ðìðvEE–Ñ‰PÉ~eRê)æÜ™™xí|ÔÖý2C¥T¤´x$EÍ4ðÂ蘗_ˆ{Ô*%®£E ,™"5“º²øÉzNüÄfdÞ)2wÛo#]>li­E%*)…xÌݎoåÛ R "£`i¢þ¯~ÿè=RØöKø~/ËQ[@ ™€ pw,œ³Ù—%A;;׬í”o«ßÀýuŽ­‘`Õû€ý±jB×![¨hÍ nÈìÌ@THãëœÌaÂà²$‚}¬:ñÌjè¹NˆTe½^ì›)š¶ÐMUÚàÕ´:FÈÙ×kˆ\à×k·B5xT¦„V¸\fYG,Z?l9bÒ¹ZËÂDŽ› ns@¦q b%vÙ ³ ãy¥qïh«û³xÞm‚¾Ëà_í% H_:¾sÀPê´là˜p¹[N†§ñõ?§Æ% Âsè0 ×9 `1*=*ç#,‘+cw•W7œ„±ÆMSäm„µ^¹Œoã—_Jçø¥JëâþoøÿÜËÿšg—ÿŠgÿ¶Ó‹ù3ý[™C?ðX™C?\ÿÁî-ޛ­:ûÌ·Zu÷—oÔ* ÿ™{”“Œ½‰ÙK|Ô¨çvƒcþ^² ¨$\H6>IµÚ àÿš Ô¡åup%0iMcþJŸþŠ ¾4dM«6ñÙ=ä j½È²UKü5{¨0¬¢Ú™1;Z„Þë–mM{ÇØYCÞ fÑ#.®ðÜ]'Ö`ýå"¹XÁËǹÊlßiKòÐï;? Ö7¼°Üz6âǝ‡þ +{øp¡Ï63Œ$¿Ò̂¢0gœa{ó£1ƒ<–?øé |(yÿ¼q‡ŸÈ†±úÔ«_ò›+›n©šñ̰où¥>aTûû7äõ_ìÜ呯,̚>‡â3s¿æ‚†ïÉé´ÿÆ2ÉaAóloL:‡,GòÓìêwª9((Øà9…p¿¼‹vLzïëRWZ +Ýs,üÒÿ ûýžŸ—ç%˜N?jÂs¼hÂs:̈́æE“9[ñ¡yÆ>q¶ùNW¯ã§Ï1Ì»ÕÞe†©õ]]SµßØOw“¬'³·æÙë æ3eCí`‚á¬Ænrë´™Î\Ÿ¬{¿mÐí‚Ëb§×ö8«·øÇéÿðÁ1À]OøgžEË ú¶»¡W=6‡ØáÖØSü1̑œñÙü4Öêº{ü”@vÛ᥋¾ª'ñÏ%KŸyýý½ü2ýý®ÕÏöMgûÞB̓ô³ ³ï»ÍcŸ‘Ùn½Ý&®û^ûËcñ ’òh|¿ù'\’ÿ» gÉA9äϝòh"¾Lø?%DgÔÿ~?ö~é¼Ò_ïýE—Ø®ûXŸSa²î¸wçËyï¦Ë[;ÖÿnkÜmØrý~Þ ùÖÕîêg5¼çÌy_g½î¼Éábd >²gÌY3匙óNLú %vê-Hý4M “ÿ5žLú;%E7ÿJ—ÿò ÏxM5wž^yyå痞^yyå痞^yyå痞^yyå痞^yyå痞^yyå痞^yyåçŸùòÕ·ck,¯ýº¿ùuîÿÌ+ÿ™Wþ‡b?mN!)žÖÜdUv˜Œx¡0m{#{†¨RØ%¹ÒlÉ 1{¹þô¾ÅïÁMïgͅ’`Ï{¹äþ¥¢tmŸ‡©h©j¯H׊X»MsbËtÚìJä02FqÝ#Ü=Q[ƒ÷ J¦b¿@äË)d,×qAú »Žà +>˜ ‡•¦Ñ\ ¿3ã!D_óϙÖDÍÚa ƂÙô{~ÛµÎH]{ i<(Ys¼½Qòažù/,÷òA?sô@›³wskjÍۍ›¶JÿÙìn%±ýèM‚üÜíŽã_<1R€ù—8¤'ìÝs0ˆa¬¿`†=_kd(nDqˆ+eŸ 7ñêlFÀ¥ý_V<Ö»Òzø©ëøéëì×ñS×Û)ê!?ÇWµC Çå•\&®#N·ÒL*£Rš¸¨È(Lû_m¯âû©Ô'žO¸Oé'Ý' OðJ÷=ÎćåO¹O¹µRÞOµWù5"¡ã!´ÁÓSJ'³O·O¶O6:yÅm9 šö.mg4­“ ר—«÷˜?”Lgߎè`Âû„M7âÈ+F!+çØ&ùDÂu€åTPÊ¡GkÐÃqVÐ$Ut:ЏaÞòåF‹3¶ g•²¹ëÅǏ습%E°.¸êž¿ÍIOïž(—Y§šd;tÍÔ¿ Æh=­ÏíÈX ÂÙ%7ǟ%3ÝÏt®ˆì•ØÈî‘NÃce±A``Âä6—¶J`c'Õچ°1OU+ËØ’:ïk²Úÿ»kgµôö¾ÎÕ÷ÜxêxàF >wÿ¼º„]Ý€¿µrûŸƒ§´F¿OâÓæý§œ‹ì«·ß=‡?#óþ€Ÿè¹ÕTü.7ïvïù”?ÿ Åw+µWïú,~àƒÚÿªÇî”Wú»†¼³“Pb»Ÿ™c÷k°ë‰%Ÿ°ë¿Åß”ßi@¿ïå »ú¼qŽƒ¿þ+»ƒh|ß¿û8i¿R«4B<`’Ä7´|¶Jò^ž$fkÁ+mL>*ê³çÈWÚð‘«>m³çùç¬ùý´šÏŸÊ ‰˜BÕÊã@µgÏwº‹‘ÂÆ"^ûŒÕgÏyHM[R‹…Âbà՟BôA²o@‘ãV=ZϜk¡ ^›JO·3Kç]ŠÞ™Ù®ÿH’•3¤œ­µÂÐ#Æ@üøñ2!ÑåFFá|˶(¹€S8EËș«nלðcz@ª§XÅf4UмË&a;œàb£e,7êì b„ ş€üø+@¦(¡™š³M¡¼è2r†Q¦™“Oy[0DºlOFD3K¤ wSZã—YŸO‰3MºÌ{‚p/T˜ÿV“FAþƒ'U žQwíß´y»qW¨@+XîzŸ?֟Ó:w û¦@¿5P#“öŸáÑÉû`ᝂæX¾äJÈoåÁ²cú᫄äF$õ§êw²)rM<ïÈ=U"Ì¿‹®3yª•)T³ €œâciƃ±šbÌ/r Qbç#7˜¶Ç¡I¡¢Î瘲U·«l/ä3¨ôZ`W !¼ÅÎÑ15Wá¡s¸V¹%š(0” ²/­ÕO[j¬Æù;3·^vÏ6z™ÿ tñš¶wÜb‰>ÖØ€»O€|›Ãål1D˜©rToéÍYoÚb@óx±†ñ” ayxr¡¢N=Á„ÎùŠÈ7:{hÅÔ¦ãÜõ¥ ¬®~¤x¸êìñ¾86úҟ>:µtBÃ$xî2ÇÍ®5¤‰4w‹Çϰ}FýÍ à7¿uNhYÀt¼¼fãŠ"@˜‹¹`^Œ$´TÃ×T¯¡Àz>º¾‰”Þ1ì½2À´˜j§ŠXËú®WAô†µ±·8Ôm¶ëҌ§(.Ó-hRoºm2Þl§Ûö¸—$;$cÅcSí +Îbík.ääiÛ8@†4AW¿›>2K1¸e,³E³Á@{ÓGtق{¦,܃™Ð½jˆ¤Ào-҉¢9¸‹!T𠦓€·•± +8 (=…v“Ì ôëÓ-^È®™të^˲w>¢ŒÝš7Ô£]ÓUí +î½§-àÞã]·à»p6hà½ø×mú½‰]·ôå©ïñ®Ü]¸`ºlÑsÑ5ۃ¯lWlúo%©çÏwûCÝYI Úp¡ފ*[OƒnÏÏ+òÄÒÜ%už“pš®S“î”Ê¿Ž‚¿:Jìnt7Ò ˆ­Û‡¤6 ·pØ†Þd=3"6#‰Bž·hNëpŸ›3êÞ/!gmÀ½Ÿ[ŒËy5v‹¡šV뺿Adb¨){ ±qêý»e‹Ó +Ò§C²ˆðe–.ªe¡X%í¢f}ÁF0):i+ÊȪ7…‘=ŠSÁ¸=Ž'[`„‰b~Ԅààª2gµÍó£,LT¼8P.Åúh™þ*&úßS™$Â="k»`»OÑ4 -) ;îXŚ.ññV–|¾±TµÙ^ ,ØBR e7ר“8pÁ§.sm—–»ùõ~ª¨ >Ykù´ŒWlœð%ٝÐ¥P>f|¾Iúáì+-ø…J”$ÔlÄñŒ«’ öaKLbýށÈFò³â/ÝÜÑçÀ{-‹{æ2L‚±õZ/Qœ#3 a‚çÂÆKƒ‡=PPoC(`áVl#ÿú‹hy×8Sج9,Ùg\á Ó/Ìеðƒ{o”ê§WeÊ®0Z ý,!ƒfµ’P¥MP^í®šÈüïHBÏla>:í4C×|:͖e®mð¼õßÌ-¿QÅ©í§Tݖ öÁ>—á¨;|„„cÜÁ°5#ŸHߏÓ[küs"ªÒ5>Sõ¹¦‹ZU;¹ ­v4aàÄXc¼MÏ,¡4ì´Çˆ£«Í ”%·yŽb4³­”ßá१h“;L´<þ)•_¨…_ºÓLήËÞY/ɟ5‹ O»Çó«¬ lCopÿ¿²UOÔãâÀá`Ÿöu{¿©ÈŌ€Q°¢×eA~«Ý傗ßn`b¬ë†Ýr2Z¶aC˜@ ÕÖW>V¦ÖâV ^ƒîúY t^Pßpží€{·K¸ä<‡\6[:âÄ&ØêÒYÁT(K_Õu„ ¨H\üۛ—|ëq—EoË9Áòw©€#‡apðIA•F ~Ö«}f(jþïHòÕ§XX`ÈuÃÚà— moË=tt€`4 ªôÿÒ¹ø£^4òêϋ=uÍÂ,¡o,ÔUdO¼9 Í~#‰$ÌüBíbO-[c¡>^wXá5X"Â>'FâaÏû1?AèdVÖ½BÕµ¯€*Ú× †Ûî±&ìÿç33™†ˆ`)˜2l‘Qc‹ ÅbfÈ1À"´9’¶I%bKÚÆa1c˜q Ûmí½¥e£n«/e#ÑNÅÁƤ–0’ŒgeI' ÆT` Ÿÿç3XÉ/míïnîÛ»ç›ß7ÍÝÞú[¾Žï¡¾o©¿{ð} ø ¿w×ßc~ Êw½d’9-ÒÊã·9@êZxÏìÍ­Y;ò"ðëÎBÍ­š(Yµ³(LÚÙûxm6ƒ¨ÈDéQ ™,ɚÐï˲Èi •É Hgo”„Z,¿'â?çød-)ÿØÄ®0ƒâ´D²‰dÿ˜˜ëO„…¸æ’)–tsÑLÁ̧ÅFŠ›û(ÄË1£¥Q„Bð_§n£ÉêB1ec!”Tµ8~9`ƒæ&m” å3ˆœ/A‰Ò"PBt—” Ðùÿ%‘·1€K7d1‰ ,‚«yˆWK£©Ó± эSÿH䳐´,ù,y*Tdú9ÉP¶J‘®Ö@ ȗšÑ$¶) ÙcxÓùû 2œ:fʂö4µÙ¯å%•¢»1oN¤Ø'šÂZ´2Ù$¼Õ»ïæ%ÎÌd€Xí’'dº~k¹&O›‚­ã‹‘æ¹+‰IØzÜiÖÃ1Îä[BÆ.”¼ ~%™ÛöRÆoS'‘™•ÀPol¯=·å‚ý +[Y6Y<|?цñ2ülž8‘øòMȝÓÅÞ0 E÷éÛ uBÔéž/3£™^ëÞ#Ç-&j^|H_'՚œ™ÇÚ»)œÇ¨=Vkö_^UιE$H¤òÀ¤!,eS¥äë„øÉ?A— £à$®ÑúœÂëž_À'œ<ž„áöÛ̚aábÏ×.=ƒ«BõÙµ»Q9 üîÆÈuètó& Àþâ@²- oÈcØVº©û+ +Ñ´%ŠÄÇÁ.킠ÁDu‡ßéÃÎÆÌ¼L|" xiÏÅ9Ê9ð[}‘™\&B<B~–û‘ýÛ·OeMÖ¢»aދMkî¨Óè?<áå_³Nå੐Ç#§¶ +ÓèyÁåJ9;-ál!»Ž æ¼l-cUïÚÆH¯È<„É…Áu§ +]Ñ +[C@–f’w„è^X­¼hyIwŽ]D4-!¤®îCÇVI3–n=;²šHm'Cî¸IÇҁ‚8œeÿ•úWßÏãJ «ð¢2Y¬>rd–X|И-ÎÕýꉄ—K!èþ‘;mmtÄæƒñú,:àžo@’uôC·G&üäR[Å)@l´.–áœ}ÖށøÝüþ™(0ÒñÓE®Í.}Eu1Kÿ/æ{Ež ?]Y­í”¢bgä°à%ŒÓoøXÄ*çÝɺ sº´³‘ÜÖÚ ¤&m:‘Ä›¡YV``1j‹€èaÍ.cÓu萌ÿvÛ'˜J69טFšÑ“ofÈ[ò0sÝ0—¢‹u/D¼QÑn^#–ÇbÅjì±ê0½°70pŠ£ª)¼àÕ@¦º³Øý°£Îélèåã’ÁRßrÉôN2ÀN˜)Øg¡u›ŠU†¬á'É¢,–c!'K®q"»i¥ç«J˜?ØQ!¬|bË'f‹¼Ëñä½»rz4ùÄHǍàkc°ôž‰U}DýϐHñi*go¡c%ŠJü0Ȫ^üivšm@cÄúJä0y›é=ÚMÔ°VUñ<âUá$”…#G|ª­,yT`Å>’ O²zx4žŸ”I`|Ï´Tø1ü¥!áÆÇ;&·3™oÀŸ”d¸mÚà&IâԂ^w¡ÂÀÏù•‰œÛ-P2®§!=„ñˆY‹õû"{•—Ò­i"ï«§y^¥·Žü£…ŸESï&@‚^[zuªßOÊ3¸®ÙzàÅ#µ„ÁnO6L¥d%-»ŽWË …޲wëûñ/ë¸/HbÈÐ,%…?˜¸ut1Z``À>ϔvX„»û)‘–n”ô¼cÛ'@•,œÌ@Èì¥C;­ôï—Î>‘½b­3wª…v/Ҋ-nkn þÇ3ãŠ5·(£ôºŒ⟉ƒ¨øØ&|L×3¢CѾFÒù|,ç;ص÷‚0çÇdiõ¢¥ñ6"báYì Y*ÄnœVm˜LèQªºkƙ%õ_3ft»ƒ„KŽÍjD¼ÛÒã:à› `pyòÔ ój¯ÀÀl,“чpÝö¾{O³À;ªm¡÷Ô) çñõPÚþ¨Gõõ?ܘ”_Ìèoê®R}§+£ƒÆ½tÄçœoþ92}Ɲô†•ô?*¸ÞÉó€üh3:³=l;ٖ_î{¤áõ’)s©zfâ@h—ŽÑɍ*ïÆ—Záb‰ì„(ÙÓõû&J‰4ëìËLó l)Ù4,Lìó!َ=+aü†?ðÕÌäbK֕>ûÃy°•¢ý¨rt“À³¡²쿔¼ƒ fLNC#ü3Excܯ$àÖùËöAϱ³áã§ òØ¿×’#1”<7£í¦ed$3))Ì>ÚgBBÝ%7¶™åé—%[Q @h ´Lü’5ÂÒtl¯ÝJýYªÖҺ݇eôJNËY’õæÚvkÔpgÛ@öù~ϗ¢vÓ² gZ͇GÀI̗X—IΜ ‰da§o½#‰€ÚWè)uœMâëñJْô¿ÚO„H3ïÍ+ÒÇi¨ l¯Ò§Ö†~ +O.rI¶ï(1¡¼ ãÞ±%ÅcXå]˜¼@×´ ;ü€¾l´´‚”Ádى<¢”ÁLÚԁƒ5?0›ŒL³ˆ eS‰YQÄ©lÛ°ã"¦ æØ"ÓMÅôÁ ÛPâmŠ@o¦’a‡q@Ãô!¼º˜Aù01Õ©øÀÀ0၎µN<Ç ;$§J؄wœ`ßCì¯ñ'ÿətP¦¡|WÉ5 -e¸ŠjöÅCš¿V9íéò&¯ª]ÿI«éŠéÍ_@Wû¦®9›û`{/FÑ|ô‡˜æ)b¤<ÑIBaò´‡—5$㐞œÊ°q\|+päþé“ፈ'¿¸S'ø@𽽓ßâ'Ѳ¸â pÅ@8‰H/§%ÂH,r@&tÿ¥ Yµ©Iq)%È×ÇókaÉr,b×®Yüd×¥Dr´W¿¯Š½úßM¯žz¦Un #D4¹3O.•_ÛøªÞkså(…VòL-<&o‹¤›ϗ4º"ñ.ó;LŠŠ'ªˆ%›–¾¤ºVq—… «b¿¼NKº#Նr-_¹NéæPë¶93f:`hxÄCØ„“”³/T«JbÑ<Ùµ»Ú€»_‰Óž#¬TN]RV~RW wµ‘éÍ4ÂG•ˆ„{Qm´;ÄeâAXGd¤¢úÕ¤º ßgÃÓ§p%£vjA.çÜ`Bë]+…Y®”×oÐÚÇÞºÇ14÷ûó¿ù¢?ïg{Ïį7ûþR$ÿËrÿRϓrøêÿãŠ9~BΟO¥¯ÿ˜£—ÏWÿŒQËß+ùqG/î+‡gÓý¥pìú°­;>Ÿþ´¿@¯#6—ðÕÚ_Þt?í›KèÓÍ¥úއþói~xÏã›Kù³?Ë6—øÊ¿ó›Kþ¯ñ3dÿÇٛÚnû]ôê*t¹ÝD¥MV»èwýô¤>ӗK´àS³œÿY¼CÉgµÆ$DR{•ßÜD~¦6s“Êȹ!3îrbgž‘2£:~VEãÙäú¿Œ´Œ`D9ºˆìrÑ©üÞD¨ÿíó@>áÂÓ?)^¯å?,<„@Þy!¼ù1¼ò"*Ÿ©gëõ qçó}ÿ›÷Íûæýÿì7'Î;ý¦agë¿oÑ?þܸêTÿwô‹˜{¬+ ÀÖ~ÂÕ#ÿ<Ö·ƒÜë +ɶ¡ù,ÆIŸ1ÄKóºÝÖxG)Þ;E^ëŠ#²›ÊÉm»X:µõv  +·ï†]e¬r”oè•ÒÑÀ2~y”ëŽìWÌüîσ>ïŸõjûö¼jÞ;¾Zó•<·—¼Äh|Ü[æìª1ó|ðõ0|Þ1¥lÛ­ãìÄ'Íäžêc¬ŠzÞBÈO[Ȃ›Öìì²O[²4lâ޷ʆ³ëZ(›Zõ¼‚BK+K²²zݍël#³4òSOšâºž;tÄN”Ö@clQ[7ìJÑÊJ¤hm*´EFΒ•Xá݃`WÏ¥¹ +x¬D+ a¤ÚÀ‰å:Wa´ìÅ|êÅájÃÑF¯ï÷l‚1ñ÷îÔ_îÙ¡,±«ÿáxúñxõb³º‹Üy)‚Y¹“ -µ20UÓqÒۆ!é"<ëCÕî„íÔüKýÖ(Žœq,ù“»)°h‚(Æ8ywØ ë Î5“è}AR«¨Ä<›Œ½À¥ÆB¼e¶ìCèö] +±©­¨ïökhdà·*ÌWÛC;n +‰MŠÑ~úž=æ$X䈽ÖMæ"Ê¥O wh¨ye¯²]º¼äÕ¼Ùc Ó^𐉽¼1¯èP;Êkgd)°5Ša×ydÜÊBQ”uIdذ„¢Á֖˵+!(¬uØYv€…L%.¥l¦A p”Kue0J݉J;6‡Ð5cb꬗`ìÀÂ`Ž–ÙD‚±ôà)Y!ÅA#ÙYuX-ö#xՏPÞ)K,°ÐšrÝ0²”>[p'þ­*‘ûøh•…O“‚M$`sr±ÔHÁˆш,˜"(k#+9‚,lM¯"½ý}Ñø¸¿(˜Å¿ü#njBøJDë±LGÌGŸÎym؈òÞPtwÿG‹Äò/9ç⟳¯èpT6c0…V5RŒ$JÃûõœA÷€Nš:)ÂOˆs +‡1sø¨\€ÍTÒÚmEŠ²Ç Tÿ„X"-ç(z¢tK5àê,X9ö(±u>Iê5ÀȞšúUfƒÂÈͯ篷? óšÁßÞwxÊä(Äóˆe&Ôq¥ß…'J0ÑíP£,.µºàxk[ÅôiíÖ4}7mª ­q {Q÷ÓrƒWR%]øKÊt/6V¶c|x¬Kâ»$" ­ RGI*N@,ŸÐ¬æ±- \Uþ&èt?h{rÀá;~'ÝŽ‘×Îh”º©À©0ÙâO;^a¤ïž!¾g·ðM|¦Ù²ñᦶµI҃AøÁ€×ö|PëîàAç…Í" ¢‡BÂS¶³§\ïIW˜w†USF•½éŽú *äÝô +ª‘Ì÷¼\ör(me•¼9_ Niëh´dÆý‚Óh·­—=lEÐxFí½l½|LÆxÐ'í"Dað T]«µt°'Ìøè\©¤¥©\ øÙc¡tåFúh"ÐÓî†õ!æA$,öM'˜‰ß C´°'P®†ßt¦¶Õý;º1ÀE"½ð`êÚ¿¯»Þ;#ø}ø{ ϰ vn„#»>a¯µCîÍIUS *ÿðcpÿ±–Qќ'é²äA—$6^²ü錨 ZÖ­5c­w±JeçÞžÅM!F@.óܦf®Ž–ŞçFÎ&Ét|ϤpåÁðÑÒ³¤`Y¯~Ü ¬„mÌ·;Á96¡õ{É2k3x¬šÖ¹¨·3ôͤpÕ%A«* m¦¥ à©?™C@:åkßð¯®Ú[*•´ðÃð#GK.©xå†Þ6Îüz¢¬ÿ0jÉ9¤ld0ò€Ã“ªß70ø‘ÿâ[7X#ÐÓ5ã¦&¯ÿww˜˜»Gµ!ôi©©ÏöÍÕ¼Su&ÐBŸÝÞ¬öÃâÅ2 C»ƒLÎÈPi?¼WNm1º¡×2‡ŸàÚKìkî÷¥X!÷Å|æ tÆ&°kýÞáͯºÀ”fhŠubÀ[Ò¶\C‹ÞÌ-âxì‹=nŒ ‰´c–ûG*án·h¨áNîÀèÃæð½[# Ái_·fm8Þ±†;Ñê°æA±$ú&„äRa”my¢É¤ÂiZŠ-@i^¹ÈÔC/¦¤CFUÍCÙ©Aè êœÔVÍÄ›&׃«T‚XÀK1 +!¥W $‘§Û¤ŽÙ]˜Ô&ʵ§j…èÂÎÅh@AÑ8ÒÒöS´5å³sk-Ãà\V^»ýœÔ…8eû›D!àþe …^‰ó]P\äy ¡ÛeXSÂÔ«80x6õ•ö§ñͤ?Ò+ª ´¯Ýxן5*iôÝaô“Aº¥Q¹yx ;ßóžY̞sÔ×$â£í8žBܺA¹FÚÞ°?ÒGÓ‡`§!C†5ÂY§òPf¤Ý'\»!oñ äö‹ý4l1L?Öyì¨yˆ íyUè„B$²(þT¶í¸S%UàÍR5³£ _ý Û°E#͔’O(ÇÇéÊ0#쁷·=ÄÀ,ʀhê—˜€ DœµÐ›ä„ÔÊa¸¦ÖÁºìmº¢ÑäŒ&cnä M uÇ-5€Á2+’BÓ1ª\8€àsúÈwZò8Öóéëe´”t¬é®oÙ}ŠýÉ87;?™º:ˇ§òûқöâÁ嚢ø+èÕ½”Ú† © +`Cƒ/2jŒ+¢â#þ–¢˜?­€šæ`µû¥ûpÜðún!XÉ£®9• JÙ³V¹‹Ñů_²ò,¿|fÊ4 w<ñù6‰¸^u·,X7Š0š¾Ø+äXfmɶœÅóu©¥ ÄjÕdÛ^­›*Öí`d®`´íP;ï[®¨·­â‡ n¡>+÷×Ï-–<ÆaT¡å¶®×Ü•XƒâkíJ” 7¥v«¿·%/µ¼`|v´C\c,ìkE#&Öæ¿Ö>ˆ›Ùɧ&î&̇«×'È[*"Þ+ÇÏá›I˜7 ×°Òc([C#–ÎØÖ°Mk,göã«íƍ¥º 1/(õ·SžÐ5ëì +Oƒy™îøˆ³ß¬- ÿâ§uHIý!äÁ>ø7gkîŸ6ÊØ*ÍY7X‡Ú‚ù´`,>lÀ”Ò!²ŒzJ,IHÂCQ’IFD“¡zٗ„‰~6´Pö¦™«=>e &T(w¼âlû®&ϸ©Ù×7džÏ^֙‘íÊ&Ï á"¶–<¼ËLc9yÚêš=Uµ~MzÏ^Ò»¢–Ñ];:ut´€M‰Ë#(BkŽ6Öcˆº1r5í¥·n9 œj­ +¸ÛÁ9©?F#—_úv‚Íg„T=XÂ9rP´¿oã“ãËwÜ7|õ޽tQQÒÓ«f¿t:,\ÔíÃ+ƒkц—A %R2yŽtÒhJ;XšÎÖ¦…IÊ/~¨œ“âî±s㥍Xµ÷Vc! jþÈcü6ÚÔÿséh¡13šÙ†v,¹(â×L.(6ðdÜÔ×ɄM¾í&øÙ·­Ñq­3£qƒo Ú+°šÉ¡.µÀ³˜{ö–.„âµJçoTÑc?iãôÜ_WE Å¥¦?チȭJ[!ûWêëÐ +üê_gÇÿt°ÚËmX½ÌhԆÉEZÀC"o;hl§»hHØkD¬t‹º*][‘ËD˜ä–&”ÃBLi/ +­‘õZ¿Õ×֤µSaÀÎZ—­Ì7Y T:>oß7ï›÷ÍûæýÿÿÆ +:v~ZØÈ‡¼Rßhè§x¥¯ÙmŠšÁ©þ#Ô`«‚ü*ÐBÁ€P,)Q:Š zQ­PhP¥° t‘KAjPG.G”f¿gו:kWòï/Ê/–¢˵òÞ:¡QšÖæ Äù²áð½Ï›2 ôùµ©pÀçP`T³èóæ¡ï}=Âú4ø`Óéð°2⾯ºюk©ã‘Ë‘¿[¢mµ¨€i,ëã +ÖǪÙN× cł¬NÎVDЇlZ¹T¤àsW*-tI²µ@›+îjmˆ§fæ§p– ÃþapÎwʜ›S¸ ±H'm. ÖX›4²Ö*„þíKšˆ™¦ ¡Õ›25žÕæ!küO¯-Œ7¡ ò¨RtIµ–áôÌo{ìl:T¶[Í£¤6]Â|††;þr–·j"RD¶'‘?Bk^Qþ· h¬â<¯BJž”Ú(³ÆÐ!k³ IG)މƒHdtîžâ³š€ôþ¡Nô¤[ƒ–A3 ›-×^D¦)Žº²%ZD«]G ©±b è‡5›.Ä6ñh‡Ùº6FÓRQÀ,åšìøxH5?¿Z#æØø·u/”¼€[Ëbï/©F·2E¶#[ì:kfÓO¹®“ÍBí{èÁˆ:fP™M@6Çi²´£p+xr«÷ªð=©e(ÄܺÒ£Ö4ÕÈÖb M\S¼6kô4•j0‘6ц‘µ¤ 0³¾?˘i¯]å»;kËòà†ê1®í­÷Dn‡Ò×DÃäëääÔõr=—@Т6‘1´†Òp}ÖusÓ㏕/@Ä–ێYU;…D‡ƒ…?¤- +"ðD‡ º©—5/¤òD“Ð> HkŠbMo¤ã“WM^D›=5 Aa0Öú8…Gq½)ž#hµÒž-êãk²y”Rn–i‰=ÑȦ¥¤7YǺمgíS˵/Ð.·svMª–‹ 䨣¢WÅ “«ìUµ~⟔-ÿ‘F®žŠûÛu¯»J÷*ÄÖh<'^¢Cü幨­ËçÉÇÂaÀžq[ðo‡qŒ9¿Ô˓ÍBйRïFOµºqh­ Åuõe£Ê⤀¿s@ÈǜÆ_V¿Ø?œƒø6ÊX9©W¹ kó´[4¹rŸh HÚØ8“|²]D±.V¢îˆ¬ÅÚzµKvÔYx"qãAâ0VΙ~ëÑ_¹1}ˆpP¨‚0^Ö W‚4žî`:êÚò«àZJl,:¡É±Ò=uJi÷Úx¯˜¸Þ–‚ˆ0™¢t¯m‡qxJ%:°ùãlÚKå.l${Á_#`Ç!Yßج(F®N8nÝXà¤òýË!…ChkÐg7äMÂEóÉÀ}s‚ªùí.¶n»Íèc˜µUL8"v¦ +:>"Îë¡Æ´ÁBät*ÞÌ;ã”NGXJĞdx5­t'|wp” ÈþeÂ~¥,²¡Ò“{’„µÉ ‰‡É6ž‰~ݚýÕ%Àè¤>…rßs Öf¶úxÓæüÔƒ´'1V4ÓöœQÛóÆü»Š ˜£õŸÉ£Â;Bc)üV¯Ù+Ÿ§¿ÝÒ³WOG‘€P±C¿ìåQ# +í<á_Â{FU ˆ$䯥P ê?rۀ-k¢»[Õ*-e· +ɾú0ÚÎH'™!ðÁ±C€|¹Àgú½Ïz’аnó¯ß{Úø·où†9©_¾B…ƒx `¶)sxc©¨rwÙ +!ƒy[éòóH¸¥™>dŠò¹aњ=i®,Åìz]âŽsn²Ì•Hþmƒ…+â٘5³OM>dRs\B³ÖGUb®´˜Ìàæ¢ÙQ&‰DFz…鳨Åè±á6RgÁZü ¨æ£ÇË&ªO6SPŠƒ;åxnj%âZ~ÒèXòpËC0vƒî<™bÔ*$ÝZVBË]),tYBPဨƒyÖ\§RFà‡—MWλÐdšòíxÙ¤5„Jm©2B'qDÇ{@¯}.XÁ© +=½Œ99n3›ššÐ?¶ ­oÚ±ËÍÇ5ŒÚUæGoäÀ'2m0ëp1ÇC å1?¼»Ø—M;2¼¯^pµûLùU£¢âáè˜/ñ9ÀS(ÕÆî‰ƒÏ[?s  P…ÜÙúBDu|xì±ÂK4Šeˆ³ö ¿í8_ó6ä=ÇûDÉ픇¢…–¿¥qµ—ƒ[ÍG \XB„êœÑ̀Çó¹bU4ØòT;¼_[ÇòʹövWN‰ðthéGSÔöô£Øïûa<çöÚè¿)“Î{-r¿*Iç>Jª,Í[%gã X¯z'x¥|4-Û2þ¾ ³iLÉ¡àš¸wx-»n°-Òñë̇“HÑDÄ1™ÁÓa· +b\=¨Î?ACÖÝ}¨ôçm›5ƒAö—ï§%[2':›×{Q¦€_³!ÃÔù¾|*ìVûIÈÃH8DeÎcUk]â–éZ[«VФ bÕQÂoC ¤·LAL6',AlNõˆÉÂSËãÉ®"Ÿo×ò|Ó¼Uzòø•Sƒzèqj›Âzʆõ×Âpóÿ+¯Ç¯Õ~·]HÝCŸU27^%We ŸÚ|®Ä'б¹ž¦Ææ2N¹zÒl©Öûøß™ÍIàu¿i´Þ/ ÿ–:lB¡u¼V¯ÝóÝ벎ùâu%å°À1€k‡ÃKà ÛóQR·µ~0ÖÎ +ùðŸ…#~;¯‘øCÛÄÁT6e ‚õ¥v;SÑPö·¥:ê¡Càî.5ÁåŸÇ?‘½Q~1åY ã3奿õ®ÝVm?Güœ/ŽïJ¬ÄÝê].´Ôî÷ê…f,áow} zå¬q· –§ö(1Å_â;åÏ0ÙUE¡¸£˜t©¤¼`ÙÞOk”ô¶¹CŽþû¹cnÙL%³eŒ-›.Òßþ`ݦ9‚«êÇ=Ô¶Ëësém—ÖÇHÌ>Ê^œ±ïr¹ß·Ó…µ~0Á<…Gm"•ƐäпgÈfÓ¼ãŠ}Ų˜Ö¯Þ¶Pù°ÙkFð™&Ï[0L&?öŒ[ÄzÛ$4Ѥ:âëÖіJqö`sÖYÒ›h¿À²#Þó—Ù $aÅÙ‰²6·Ù¿W ô(N£ÓÛ‰~ê$‹g—¢Ç—>î¢Þ÷%ÑRŽJË_º] q¤Džà•¡ôyÈ}ÜC•ZbrÑ߆e‘ÒD×Ì |Ó´D×G´'"«B¿E^y ª³hçLŸ4ÿ`ÐêÒ°îþ1 +¾þÂoB•]Tb1ЧÜÀa¹ô¶îUaÙ‰˜VBBÜP &B¯Ó:P5QÙ0Õê½WLܚÑ~ûPQ¶¼¸€Ú\ϧ'7ÑY²Ø·'G«£¢ÃW$åa«Öu7âS ùtpå¥j±ÕzMÓ`åj¯hËN²`F¡:ÉÁ˜U” ¤ëf 6_Ü ãREW£wžˆËI£¸C¾1»„É-F7rÅbhÆî~î”P?ûÂo~§»D×쌞 ÛsÐû¡ñ¹x·Ø$bAm_ÄÀ;®v¸§ÝÑIrCZ`׈¥gítõҍ0&û8’çh¨w+ú;@ùœþ55"¶t¦Ñ\8žKçš2àϳ³—ü|Z‹¦˜3rS;¬5¥g‡)¦ïŽ©u³=ä¤äû¨ÀùD®Ñ^’æ£NÜå!»»IGEÉùÔ¾;u¥ˆ¥¸ƒ„æû4z¥£æÅ4ùÚ><€¢òöšŽ•\ +¸ÝŒnÎ7kö#l#vñ»˜ßɾócx‘··1¼˜Û¸ÐÛâ.G¨¡#«¢Äõ(3ÃÔ¤HöãÔ¨H¶£ŽŒz•‰Àz– ØõD °z–‰°õD‰!ê\$AڊW%¸³‹*‡©xƒä…P|Á÷ _4­îT) ÔC LŠ”tÃâ凩…ÊöO…{ßG‡*º™š±†\©B’ÙK=ÿ÷é( ޝooyÛ½ÝÝÞožwwãîó÷÷æïä§~KKïY$’9ë«X:™ºË¤EY€ˆËáéRPê"yRQ>"y2BT%-荡·¢\DóŒjQÌ"IøPŽ-‘˜7¾¦¹˜2;IÕ(DҗºÐ"y¤Úîd‡Ý-O¤n¤ + ÜîÁ\Ü<ˆã5Ϙ„ 0ß5#°˜ƒ4–¦£X¹*Mœ¹Ót»Œvg7¾9¼ooј% €³rvÕX¿áùÍQÁB˜Š¿‰›˜‰­´Œ-ÍùI$Ù¤ÂŖ¦œ¤?”§S€c‚@( ÅjÿÊÆ ùÄÞÐG·O!I|u&„ÝŽ ØöMk< /ÊÅw!%¸›±ä—è÷EÀ„‘ÝV°3t„lѝ¬Ò¬¤Ò¼¤Ò̤Òß²_ðöRÆÍLe1ó4¸ù­_g¡ÊMh²“ZMptMa“ +˜kYsÂÑÔõì=fvjøJ…}¾E 4pqϖ…±C[h&[#Aý3l÷lIÀIZw•#ò¤ŸgÀ̼zu妕¹ºô¤JJcû‹ã€¡þX¦Xº"x¥Êã5Ð + r|³/ø)ËT•NÌÊÒ*ߑü#õL?ö¬?·™ÓŠðñ‚°õ¶‚zh°¥!j’è +›SN?e`Þ-«ZŒTO͒^©G©Z7FÙ~í½¡^?ß.çíïIª™ç©”uS9Ö4(JتAU×½g™¿†åPÚ-@ÑëV0Ù÷*‡ùMµTG*UhÉl>ð¯Åo³Ëƒo”À‰Šj]úÙ[¸QYYì ¿Dzâ«w" ÿ°E´¹yaÒ ·lADVž`žVOˆÄEV±æèFN]¼°‰õ*Âya|Jö¼°À)öÆíü *˜‰P™ÛÛ¹â +>Ëc·è|•F•†Î~4=y÷êžAŸ»È3¤Ù¶7š¤(¡}2ól˜ +Üð½2° +ÆÇm 透;sDföæIFýq¯ 6ìPyß i_óý·ù +ƒær[tʋ÷ o–$ßåyxü8ðÐX8åz’€†½C<òñ•È,½ñScKLWWUPRË|[«È¡a¶tò ,‘/—Pԟ—$Tç©Ú£åM¢†A­Å’Dë¾Â”ÊAk[z9±'ÝǙÕ=×aËiÖrÓÆõÜ`à-ÀÞE‘$«š+ß+4Ìô©›fdgçÃáGÏàꦽ幷Dک˵.,*µ›Êû¡Uk5@'’ÔA¼(÷U¼£ùLfÒ.Q¸\Dx--˜Ç†GšScùÌ-ÆÓÕao¥×o2öð¢3KûdÕbû8Þ%óúk5QÚ¥š·.­(ElÐ]N\wkXgS–ª]ÄJ–™Éi ¦EMÝ%7_)º"›ƒ²ÖêQ£ÕV¥§Hdpêi'ü}‹D'.e~ï Cè<¿ÿ,FÓø½å±*~øj¾[®©ÐRR\Æs ÈX'ØÐKÐ*Uâ|h%øUÓ´²°¢%֧Ø cݾïãÊFœƒšÇйaµ]DªAŠùL6胐hãN¦ÿt³””;ŒtõI]DÆÐJ«¨±ÏíñçDR -”Ÿ€ã;ð3XyvðDÙÑ  Ù|"Ì?Î!íŒÿÜÚô -`ÏWP›9nRÃ-àx÷ ½ñ”Q뮿p¦aÁ‰;·žy’lˆ/ƒgH6tCeà€ÎmÍ*“J(žG®Ke8Îäu\éµnNXz¯ç‡¸¿ò‡½i÷@|™Cílp”wYC¾A/|;„IË¡+å©5ÿ;%¦”ø7¾,Ø+\xöú ”è¦oòKµîXAä6Ï2ôûO-h8˛@ó¼îÒ Ғ ½kZ\ªÐ9qÅ'PñQbÐÈÿj‰Ã³ðR#÷Z;ŸWôG.ø±Ëþ³`<øºñÁqbúsjFØéfpãW.QJ€Ýu@אoÃÅíגKRðæÔß:]Ã*œ:‹Îya‚#»XH,x‹ +ð Q*y`#*™¤ÜoÉy_ò ä¼Á#w +8Öü%æÌêrž@e 0 +É¿&aħdDaòèƒHZ–"|©wР°çðš}/@ô”“1/ JBJPtò"|¬‚c ”\•Z¡%4?ÃÕÜH˜êð˜Ø3—nRÀrꙑº—›²:5­yd" +"¶_˜M‰«fFM“°ÄójÜڄ(© ²feuV n:m„éžÖ“ {ʖ°4kåT±b‹]€¡/7`*ý€¦ú­`êq|ö¨½Æï5‹™êª]ÅJŸÇƃ­cá´‰•,˜X¨v*Z¿å…àtI+剳RÃÖgT‘6õ«üšÚ›C6—èàŠ©,1A#R†0$T , ‚5%¹‰„E¸BÖùa‡š×;§VzືÐo}P¸••§ÔšÈßRøùž½°¢ÜÁ½õ"'+gm‡oÙ®ÖUˆ'kMlþ~ƒ$#ؓ|ñ7¯m”öJT]‚²Gèt!óD^aq~7{Ò0²*`7“Õ0ªÑL ÆÕ‡ê©€BÃe¸*âÃÎûâDL6[U–S~ȪüÄü…0öÀNÃZûâ«×§«.ÞŸ˜*·)éTÀhÅõðd*¼ây…0)€©ÛPö‰²A Gpg…W.šáœ'ʓë`lhDŠkI]㭊l²^XΛDù+«ó¾Â¬NȌûò½k\ç*‡ÂŒù[Û®V­WX +š´wWÊ3ìc>b¢È`esúë;b9/ZÁ7 W%7$×QÍʵ,bT’z$'£ÆÍÙJrP2þ¥qp¿–‘§::œ’)úö+Ê,/™`eZÑ÷Æ'9´ÜÖH²gT´åw¯ZÛÒIÙܒ [°¸‘øÐ(£+âQSFÙüîHÃè; H4‹ÛXwY A&'Ù&Öü•£Æ„‘ +I]¯7Kˆ‡¬öâ+ºaeiÉΩBê[#JæšS¾à{®c”°Üm¿ŽV ùÁê`ډe冀„9³¡MY¦¹˜]M¨:¤'2 +äRW'¶Ã0ï1ÎH~l£ùwûù\1ÐbÁ\`nâË/ Ý›ƒu©²¾¯ø7S†å +h+©1Än‘LñÓÚÊ*M2А¹öÖÙ# Û©™ƒA’ðUc–±¹ÓÅü´ŸLsô˜•bUº˜dŸã§©4½æœùRP‰Ïá±B}±HbB/÷Ë@‰ª£N¤ºˆI§¨p$>›Whâ&®ý1 ü:Íl%Ä×·eŒäÖ¨qkp_œcd-â+mfÅ9 S{ëë-:½»Zê5ö›ôɺO\¸ëTC‹ôÛiô´sö*Nm*´jÍOò­ª¹5áð{MXü…ÅnO^[µ´fÛɳY­8¿‰5=*ûBýÆ9ôõ’¦D¤üêK½^J+ùŽ¬Â ñªµ‹ªûG÷ aúãG”}· çüÆÇ I}ƒÎ:º“ p_æΟ PŠñÖs¸Eób;ÎzuÅ&šâ§ÜèOp‚£Ë=:ºbˆèAðF¶Y5Ôr§Aé’^I4õÈBvàÓ;Z7 ‚‘ew±Äè +ü/‹Úþ’¡•Øiç• ÎW” ƒ÷®ƒó­4ÕJlÊâ'ò—’«K‘;Fpx¢·[9 +õﮩ‡Aك$• ÷îN÷øÿ>Ö˜p‚‹ÓA³F°çkލ9_މÁÕ-ZPuåG0¨s2™fD¡ +àùK/äõ—¯NõYœ_i AMN£=`û³Œ ‹—Ñr´íï7³‘ž[ ï5{Ò2ur ¡dsuÍ`(×k•ò£+X°7Œ{CµÞˆó^ÚZMψó]Vñ§ã}³õÞí>æ•v¬÷ž+Mv¿Åð¾ß…V{íqþ3æÅ Ø|ɃÁ5ÐZ6öý “ Ñ5*(²¹aÕ hJè”=nȃöäÈ –ü“½§:õÑÅîY £Añ&g IÔ'Øúkì°b{11g)À•fŠl¤§ï/¤Ô–‰W.t§%Ô±Û4%zø‡UÞ¤—zAfËÐÝï2Lì­áÊøGVoŠGT_nµd¦՗ý´ò²áEªõ%„Õ$§JŸ™È ‡D«]vˆ€ñ®«%Qk¿˜•=â“ØÇg¯C˜?ïÓ&é03Þ6Ñ)·';Ü`=;ÎZ÷ö÷“`ÉÕ$ujåA†vódQ<ßÜ0ò^~®ùa vN J™½·¤ZGÙÿ|¹iÐpˆÇ—{n»öãFeå´åÙ$ü3ðª¾øžÖœµþý¤qO÷ X°˜‚KY®ˆøAW‡0; Ößñۊð³&Jq «{É7Èŝ©L@ M”Hþ¡Ú³µ¢ÄêCû3»ãÈ) ð>Œ•ïÓ$q|芎 0¯‘.¥µƒµ*7*0—Cl=·ïíw¨ªXZ;PÝw½î›2ߺÍ)” ö¿ã$â=ƒ1Ë&æ|ýRCæFáŒÁpÛX²J0·Aê¢5Ÿ ÔCþ[²e"¨ÞÜÊÁJ¤¤¾m¶ÍˆÊR7 Ë ÞFhjÃÖ)+ou©fí®fÁ¸Ú¤Ab,9_ çi2§)³ÉÅñÐ<  Ñ1ÞÃ6J:±Ä"ûL*ÛþïÞ+Ë«Äñ°¯3jÈ\+=ReÏ3)±(__S€p‘ÎËĵ©ÒÅG¸«ŸIñ¥àZ7§\Qœ±[ÑLj­è±¢7¯>LǪzË«Ôåòq¡e·Y®êœ|!c 5¹›b_¹¾/ æñjg±9@0­ÁŸ™¦,zò¼:×[E2EGóÅùýÔ|áQ—çôñíA™ÛÇ)‚yuʎv3æG?òeD‡I9‚BÅ %î(¥TûÏ'ð‚ ’8@îGèax¾œdpdž¼ÝrÒä‰;cƒÆ3IÞl2qËc( +Vƒ—¸šbé>“éqç;>pŽ>cëqÕãŽã’};:Z‰€iô>©6rcÜ-ËÇí™ø9…7mmèñ¸âXåàLQË¡)¼²Mñåcjµz›ûI5órªož[%/¹ÈÌc ¢uq>u8#9Üpí]úQb0±däu±¬•²Œí÷d=º·ØÝ@ê°?d£rN¡hK*-Zjìó7ìØzÜ%B);ä«ÿq[d|±F>I>}hÔâ#Ëô…Û·UZÝ\ëuëóRÝ»yŒóy™öú5ö· q1¸òW}+5`I_+3oÈ&T½c­[u¥ùöîMåë eC38˘ð<¿bàÃÍvœRnÆÕé]ŽÚ2Gj$fÖ©`=Ýüƒ±T%H‡»Ž]ûKw#°Š@ðË8ÏJòÐY›ø» êöC]y /vP"‡–!?Ýáìuhqׅða$9Ë÷°e‹ãÓ¹DÏ`v÷·êO†öl:É]…ïaÍvjgÀ˜@³q¶,è7…úÄOúþ£?:¯Ó¦rRk'{ˎ„Oª-kbnùX $Ô*éCÂ=MKŒvJ$—ÛË~=°—ÈÈ÷)…æ]B­õVÎDŠ4€G¨aÃÏr@X™H‘‰ÈOwaÖR§»°øL¼ÌmCÛ§T“sÕI +÷ØÛu˜Ëz#(mè•WÛÑ+0%4Z  +”°š3ïáí X€øçä>fc"$§ú€!1¥9Îßϯ€Ë‚–™×?X Kã˜ÒÓŽ2ýó!åÁB³/ŸŽºÓnξ2ë׈šò¥³:ú¢ÙžÖrfߒߎI¹/YˆO™oÁ{X‡ŸºÀ{ZT€íÏHvÐhFtÿ]œë7ÑÙÀ±L¸7 ô¿k}`ªZ‰~W†Doï}]Kמy~Ø …Ûèôdm>¤~åö¡KaÓq\DåÇE~>BSX¶7õ•Dlp…§8îö˜màñ_ h¶8m`{9@_´/AΧ.@9  ҔÙQYFÃ#!´’ÉrÖö“ÊQASӕ”M²)1¸¹8ÂWÈuÔIY!£ô–oST… ЩËWúÖwQù½­,£&ÒŠ;õœ8ôá‘CÆåŒˆ){†$0(zÝH¦Ã׊Ë*R(qqåRXòxYdn/Ô)„ÞYE)CÓ¬55ƒ¦^Ö¦NÐÅE2Ü’6¸ÖE|ô¸ZÖy”:]E"æ”~“ȼó62}܇iB:‡»¾éDfÍÐ=ÝçŠëhÍ)‰ Õ*D£ôª8J M|€™|Ç…±é‡–g^g#ïîŠáÜ-ϗ·ßVShà«>JËŽ +£ÕY0QúHS0ßtɅ}1Ô½‰΋¯#6ªÄ£Sà*H!_³à¾.±EBl~“Îù$œ…JyoÅ}‘± _MqˆÐmä¶þíp¯þëñC—0’Ë£$²ézÒˆ3޳×ôŒé@tû¯Øl½Ñ}o9æt@ !H.$šVEšû懻<×öí¢ãÐ=6ú'ÉVa Ë|Ry6_Ê?¬úe‰Re¬¦#‚$;Ì6hqq§¶%¯{aF¢7¶8óì÷w¥úåW ÕNX XVÂꦬx¼%ÇTj˜n™Ô¤;n¡™Þul¾étzáoÎ)^ÝáŸ\Ô҄¢ñíqBÿä¥VĨ}Šú¦‡Ù‡©úæ„×CWÑ¢%Jæ,á„PR\²Æ}2å3þ2ämR†Åa*wlU¿›¯*Þb§µÓÚ(õ…{],¤¬jdÞ×LâVB@‹r(}™!‡|; C˜°#›n·ãûUâ‹Í å0¹úsœŽæ,‹¸0o Râ‡q´NwTSh¢ä–{A;ZƒÂr̦ÑќӬ©µn°E6Ù+^$vÁM¶øcätÉ<^Mó±þ›Ï¦xÑ=‚Xþö cÛØ%ŽïkÂ9ÊFA^òíµÃ~I"Ç£Ó +ú¥sìWэuÃá* ™Näz‹Áý®’¡àô¾Åj?c9é…%« —j¿ÖН4ñ”Óʼ õwSë5Ô i§—þj n…ÇJ‚eµ Õ4öƒ×Ðh}™ísÔM§ô””1„SƒNtʜlš—dX«RîX¼›­b —óØúëÙªfuJïªÊWôFŽ÷VÂUØ"¾\ -¼a²¾;Á}MÇq”Ñ[å²Ïþ÷ G +pÈyc>§ +b7Ïv³ç»Œ?oæ}å'äƒS¬0 8G÷ãØôJ<?Ð.9‚ÙÓW¾Ã²>XSô ãè…øp»•Ð|jf%ÎöÍd4¯èÿDù¿üÿzñßìÝ횸t_æÿGq‰rƒ}óœ£ì/ty}}.Žâ“ ½ë#pø3D2è4T:M$äįz5P;Éù>è0½à o s$‘»%'XXšèlW &ü–¨ùšÏ;À-€³Tˆ@3 ÐÉÁâ2–jÀ¾²Z‡T´Ô䈓—g«³Fýs=eVª¢§V’.1ï¼PÄP“0|žtÞ. 30ˆæÐ”“x8Q^Ž‚9ÛÙO”“°¤ŸxÒ¾g)ÂK´yà$Ôpʬۅ˜òV,xÁ7…b»ÀÄ~œ»ˆé€Ãeñ”|N18÷î0Ù~Ñ×mûŒ‹ —@kÄýÆI†ËöDOÜM°Ù~r0rB"<£ —âƒ`î3 6^˜&Ê!|ƒ`wîËQP”„ø'NjžÑ_æ:Ո¥DÞû‰ªâck|œÄ¨ü‘!t£Ë][äæk{ùÇî4´…á)‹Dc–±$)àqhšê,è Æ‘‡î4¯¦î(´{·Øöð›òißÛ²µÊŠAZT—WõWÜ`,øÒ¤<ë<+³ôL&‚?Lâ¼µ;bB¶Žf4~?BÍPÒ(VH‡e¶Š‚ÞŠ~€àö #ºœ É¡ƒE:§ ®¢¡ªf@4º^Ã`ÂY[£õ£'¥¶ •—ûÏgAùã›güïgA°Zý%éóKTÎ ô–6‚EOú½iˆ-ñÜ´ô”±.-3*qùœÙQ2>ÿÿÎêˆÂp“a²ö¹xAdy²º˜”ßÙֈuqƒÈµoþK¦Ž,8ñ@ƒ¦5ýÕnž|è<%#X•¨àFAWçÂÂßVéèA;Øã—ûüaH’J6—èŽÅ½„QX?+ +%S2Ýæ-^/㚎Éí"Ùæ,ƒÈñìD±8%†&±5‰¬MbkXšÄÖ&±5‰¬MbkXšÄÖ&±5‰¬MbkXšÄÖ&±5‰¬MbkXšÄÖ&±5‰¬MbkXšÄÖ&±5‰¯þëEãxÿuñx,ÆSEÛ´Ì÷]Öw/9˜Ìfš)øÀsG^1Çìuϋñ”3Çl/ßZê¡ÓMššŒY¶Íó-¨´âÌÎw9‰Þç1›~n󷄕úQŠËZ:¿Í€ŒøŒ2Ü;g¡ú«A*oÇâM_oût5ÛôOr=8Ÿ}‹6F09ÖjéxŒj)›ñìÕqÙ¯â1p$Y4C }æ¡òa[ÎqÇډô¶zwt// “Z£j©®gÅ*DƜ»²“Qê`DRÊ"YTí+òÜÓRÚɇÚË+²¬¶êô¼K¨‹]“¼“LÃoäç‡áx/NÈý¯ÙÀdn´ŠÈtÒ×zÛã}!*=ŽóM—µÆ ¶uk5ªÝÕõýž›‰0Áþ=lPõµ)ŒZãèËúbc r×J#i*Ç Ò.IcŽRˆñPưdO׆ê1®=…haðV#;é +¾ô»è\lЖ†**û hÊ4Jª æ‡Í#/4&–M9é¬Ð‚Vœ°½dXh¬—]ƒ‘¼üæüËU‚èû!ícðæ0Ùë–6F®ù$PÊ©–X«C¼Ù¡Xʟ(¢’åäÝp9oÚóq‡”# õÅ[@v2¨If£4#BŽTh/HIÉ¢±Â¯Ç +Ê©2*MÊ¢ÖhW ð»p½†Ï’­ðõgoæñÕ×öBœ»­kÙ +½\œiÐÈ_´±†Ïõ«F\ˆ-…³²È°RâLCüŠÜ~ЃäV>]ÇëBM¸áE¶3fŸÅbŠpX^{Wgäœg`âùGÈKßõ^‚àܰõàÒêCÕ+*©þBŠ­œ:C¸rÛux7÷*ßÄV퇛Wpkáf±cø´%ü¶V89±ò%!²VG²‚#óI_r Ä‚“[í?Ìaù7È©#øö°6u4Û i4÷*¡UÆì‘‹–ªÜÒGx|(ûåœR!”›ò´ŁnoÜ;¤Ea†@C÷dâñ;6ð¡Ò*$W“Q¬îœ¤å)£+†‡á,€‡’E “¥ãòäÇÇU π*Ì 0â{›å•ïÏsw¯›È¸È ¬{IGei!ι8}Ú§ÄG—éåJAy%"”’sõ+>\~b¨¼E¨µô…ƒ³TJ1‹ûË6ýe y(¦ÃgúDH¬£]†ÎðƨùJÚ!ŠR\ L?# Ô`Wb„ÒŠìT‰»ÂµQRmZ!÷ D¦¾m":ó $ž¹¬½ÙÉLgŸ5_4&³„QšjZ`ÿ¢J–`7%PÇ©eÔrŠô+Aj3³BDŽTʉï½1J\Cϙbˆt’]¶x߃¦ÁþXÅ'­´OJ½hp;ª5! }ØOº±16*É©$ݰp?,š”’ŠXÔÓQÚeQ¡#éñÛ%'ãYH.mÎþþšzªÈß¼Ä2$IsÓO½Rb%«#t BXŠpúi÷U‘ºJ¶Èp»U |ª‘’bÒ4dò +:2M ÖSüÖW)Ç[zTïâF?W–@N´Z,û-Y’"ϲLjùªâ+T×.àQ-z÷ØÒ!€ï™®+Pu×.gÅÜkI3S~™$/Œ5¡%qwÙ|£ÉŠøm>*ë5­«î½¦Ðfn}®x5÷šíÊXžOй-Æ´º.G \ùŒ[]y](-õú÷]"2\š?7Øk|n|QT›Ý¦ÿ'T´ì‡¾õԘ•hû¦uO÷6þê D°;suî¬f߂×:à”aËIü§ås£>Qýº½7ídŸ5¬æ¼=â•e=€àÑÒ:sÖHÚs´³½§q:pCÏRSQбE¢5›-Ÿ¡èÍíùµ¾ut-îûµÍe#ÿes]Îk5šïó[|љºÜßã͎wìç|Lï·?=ý_ԁµ‘/ð?8ŽœI–‘Á®ëÑaí\#ƒèŸÙ#ƒèŒÚ\¹Ú\ø?ÚßÁb(~­g´¿MdY˸œ%B⒁\W§HùلùîÁ˜O˜˜Ö‡c˜³|’ çÞ®¸Ì‡ýžµñµáË.§mµe·Á¿Ò*ñRÓ^!¯YYÍã+ð‡¡òWyœàáË¿&ª¢Ü3OÑp#ò$uß²r?ÖÀ*­œ¤ øõZY½àôšX®ÙÃñ#2yâXΦ6Ôݸ«™Hx¼g½]/ø]3¸œ ¼ŒÜ^fFïu7…ÌÝYЎ÷Hì"¥ïóPÈî)½£sµSw›—Êáã£~…ãb*n2uq";©¨ÕC64< ,åDäŒnxóåäÈZ¬ÿ³ãoy«æ™×è`E±Ì +§T“¶ütþ[!s4Wt0.nèv—):¦µ®wš‘ó7zé¶9¦0.i[ðAws¢ëãÕT¤?IÄXuøQ£yù¶?lÞûê|E*œ!9֚Ê9ÿ¹1‚Gepö…aîjå,••"¸|QCc\Õè¶³>fÞuZê)zê&ÖôSl+¨ƒËø^Õx¬Õm"Žˆ[Hº “Kz)ïë·¢pI/ÏWQO’L³­BAI³¿c@³yÌê’Rÿ~³ÃÌ: äY4ÛBáÙb¹úøþ}‘œû(Üô„gÙÎ0’f…ÿýöb—]lÐp÷‘Yðú³—{ceÄþ|:i¼JÙz‘YÃüQ\Ó~}êŒÇE Yj/r‚Ì/y” œ.©ÚQaÔg[êV8&!1‡±ÜdÀüäÑû¢Ü§Î܏;œKÁyB>ß8ϊk’Ãü‚bRtӆ¿Ï"ájš1•ìfQŠÏcŠu +álŸñ²½#»!õoêSI¨w4úœ3ùAÈ +’“?:QkNZÓ¸ñ ¶-‘‰ÉWKWr,ä-eR~z8,P^:¬Iì‘ÁÅøözÝÀünaë£#ƒ‹A•~8Sk!pÀ ³Ñ»•“¹ +²nš^;GÑ“ Ï2CA™zI޲‚¸©ôp ®ì –¸‹qjR/éÍn/UÜB";”¸–AežA<£‰3âYæÓhŽ›°Zʙqr„3¥§!'$F’Ð’_*|$‹9òE+Åî çÔjŒüɆ.=X×ßîbÕ$AŠó…~†D{£d oùšþ§¸¼?¬¹ùò·z×6¨™Ìùn°]ÄJËöސIÛ$©RdfëGý‚B,D­XöÊZ-%ri,.¯oһ֏À°ˆ–¢–Õh©[ü¯ø‹ÇêF¨«UuѨեJä{;¿A_3_¡+/Æ?–2VV#ù ·ò”M¾Èù1’r?‚3±ýèÉn<¡ð£óF}5KjÐWXUlµ£´ŒîNã$¹JÛ´ù›u4j—‰ €Þa$0t«^ãº=sƒáÃö, iõö*®p@g+ ÜA{Yîîºiu=Á,$ù*¸£óÄE®0êå.õ®=súV(¡y~•§¿t‡Ô²Âr7I>­Á¡ÝÀ;ƒC–éYª›´ʟLP®ÖVµš.rÁ˜I7Cv<Œaâã]ëlþQÚaˆ}ü(ö;‡c„=¦ŸHuøC÷p‡2HìXÒ ºïù™CÅ¥>X!yë.õ©üÅáQŽ@3È*wÅ(u• ˆÇ‰‹Þܛ“äð«ö +í^ÞûmüŽkwƒj$)Y¸«®¦×“X˜»Ï¤g¶ä§s½NUÕ8qa&TáÁ *‡s?TÍ6 +%ðp9uCâ‘C¤äÔ¼²i̯æ4wÄUÅr¸’nȂS˜Òí¥‹Giç8¸lÖ':M«ÓÌkû‚mE9²«Ï•_:UyÂm¡O,UÖ¤Û9‹¼Œžýô›¯48³r +¹™³ŠÈyÍÕk_´&nø·{ _Ê~1W÷ASýÑa˜Ýñ[­Ó3âŇԜd5›­Ö0‰ t?Ǻ¶Ì ­òåDmîûû¬IK}lýÎs3™€a™‚ +V`±dÕi¬ ëH¨ŒÒ¶Á€l AÁÝÝÚ·pm¶§…”£Ì&·wÝí»tv Ú×kÝìm@”¸< X™VÛvWv„eÅJ 3Ÿ¿ÿ³m·w»ßïïž÷Ï}/}.ûç¾{ì{ü!õu’I$–·­):Ì?Ï2eLî¼{\•ôcw,ʅcw"3~ìUÆè›f"©WŽ€÷OtŸ]ÎYƒ¤Û7"Äü«÷°£Ù¢¤V}ۊVqa4$BiÑü3'´õÛýÏÁö¢%.ÇO`›Vâ`Kì|ÝSõA®L~÷ð”¼Oß5Ø(kÇI àö°©\¼¤TS²©éž”Ûµ8CTzp¦y8cÍ.‘¶gbÑVh!Y®O¯²=Œ'½„Æ2,æ!¥$¼É‚®jcÔK.§Æ=\'­TŽë9nV%–ô@Â[ s´6¢3zPP6Ì_]0½ú)¨€)B} ßöô,Zˆ£³~ ’¼øfndDJ6îZ€ ÎäñǔTÀJp—»Æ + +Ør¬7MÑ`Mʱ”ç_Øã¼%èæœÁ‰ì¹º^ßM±ÓXi½ý0ôÙyD͔ˁûPѕv=O =D0Ë®Ü}Ä|¶ÿÁõâw±ýZ]‹1Aô?KÀ…Ñ 4 YÌÀ^|>à׃Ž\dƒæ²ÂnªK œ­™¸«|•统¡mÛ ÕË!Z~þ€÷ãÅÇ%w1‘èÌ“+Hñ–áQü+„4³)®eY«o¬ØáŸ× øÁþµÖó{‘Ã4KyS®çí¿˜†ótÐÇòdOÛ|¦Õm‘&ìsxï)Wþy +ÆÉg¦ÓïÇêd%œMsê΃R½žäL{–Ÿv¥Õ·èÓJÿ¥å&ÑZA®!ͯ±\~>BRD»TŒ½öc,OX©Ë%³p[.>øŽ=Ÿ@žæçmL™ƒÎʽÅSKžò$LÄyEþ'ç5tzô×g³”Ÿµé*™¦ë®¦*Ùiø|$øS8À›ž—®%ΰt8<(cc”ÂkšGã}Î ͬïÉ!Ĩ,{AóaސOtä¤%™ÃõöR÷Gá(ׯ™ŽÀX䥂-1=~Ñzâ³ÚA×ÃÞÃWôSՒ ÁÔÃÆÛ8Ί¸ùA&ԒÈJFcÁ–‡ŒJ4íñl“³d4DñØëq^=fì–|L¼F0xxØø¶gQ+ŽI~¢V~uÜ¿zèIfì u&”Žêf̖áî›Ùœ‘··äd¬tZqÒ2ڜCßב—(ËEyãG÷IsÇÇÇIˆQ?¤Ç¯Æ“tèLÏt-¡³îö«ËH1óqÒ¤ ‹ÚºÈ>)£ªÝL‡Â;¦í¼¯ò&SIÉ¶_•~dà-ᆯ5oÃ/ÈQá'|˕¯­Ô硑Q2=½ž}kp¥ L@KO/ÀP$s’ËEÆE—oZFß`=²ÕjÀ ÆnBšœó¾Þ÷^ö7nïr蹝ä•Ç× â[bÚ¬Ì «š¿$×±5´šüS]Go³íàûÿcÄüôí øèû픬ûþ:žwŠ)l7øÖü³x—Ïüá ¬âÒ#—N“wj\Kr¸—›ÇSG`¼•^J–šŠŽ‘Ï öù1KËþh }¾adfíñ¾Ä˜ä ªŒæ4Lê H¾ùÌö 1=æó%)xûçcÌ%ø Î8¬ìøïETȌí¥ÂÒ̓OyÜÂ26— +©¿}¾:QËDðãV_^ +ý¿–ûç5K¬3ÔTŽ1Ê[Ê9"Se ˜ûõÕ "®ðñÛy­óß_²;UýŸ_˔2áéßøØÕS§›FaÔY­’¯Mi&žAÞ9¿¸èßuÙR:oîI꿹ÀxGS¦óB‡J¬ñ"TÁ•YŽbŸxwÚÖ !/,¼e(ÉhÇñC%´Óö‘“Ý]ýûÅ/9žMÂLÇçÞá†ÙÙB)ØþÎnJn2n‡²Çq`Õ/ç„ÎgñÂd’dcÍéL·É˜ð$œøS[KÎd¦&ƒ¸Ú^+<¥äÔՓ<a±€ôÿ@l`,š`)qF>2êÏ`;šæn“KìÏâZCóx9zN"Êz­ïЧ®©!þÑ{‡Ý%‚G?UD¥â–ôkHÍYG×ã`;¿æ¼”‡¸yFj\5r\õ—8 ŽYä ò¸š÷™­A’ªgÔ«3Þ;ž"2"²œÄ†ìŸøt}ÔĎ(z÷Ünû!ªGٙdjÌÃ1Á$Ôh?Äû½íݐªF¦ZXϾmš²Kühº‡ü7£É ]ô˜ÀêšÝ¢õ7ꄷ`€w-NTNPåÐX¼]š€é1€%£?â\wFâ«hi–ÚÇo¹.q2Tlçò‘Woí·v³"ÞÍ8ÆtՐ¶ö&Ä*îìI`µ"óþfڀÜN›¯ˆ¬k{fÆL›xŸ¿êÁùF~d_“;-áEù܏Í/²°«F<'Oû̶ø^t¦>®üCçy探ó‡xããy×'íļK mù189w„æt®9ҝÞ]>Ki~@õÿÒŽ8ÇqVÃTÀRR2W|š>&:p§R<}ßt\µZw±ÉÂÕlëϸ<ÎNZI,ä4[TzÙËÀÚˆ–˜N2+hã–N]îkdÄr1gNÇ+ׁHu£ގ4ìñF|xtJ:D£¶†Ni>¿ÏÙúÂÁ *ÕqæquÈéK—Ê\“Hêځ +Ñ<¾KB½?uÑ9J÷Í)Âî™N¡áN"Б IÂÖ¶ò¾ìî|ñÿ¤h ›‰•#À"<ñU(¦€žN÷f81Ú/zŠë 6Xª¿`û6÷Š«2Óæu óݎv5ãìGMÛ0º›4áF•oÉnMe%¤tÅZ®^©uõl 01È6öxF̈ØEF¾¶¤ ^zGXzŸ²bY߬¥2ŠÔèòrš}NHóìÌâ;ªØ>§7"êo2#@½ ©”R|¡Š’‚ÔýÑW@ÛMõOÕ}¾H-[öôÁjޗH­çôjÞgL¬ûê«=«Z¦Ÿ]§“é‚Õì"‚ԝ)©ê«K««ˆ@®‚FU³e hÉwâhèÛ0(Æ%(Í:˙¾ã¦ 3òÑÿ³82‹§0ÝïRª9²iN©±'fݞL쥔ŽÄ³³ô¸pʂvßô‹H Xºt€rʖ‘QzÝѽ†°ïå¬aÅÕ±þZÆxÜgWØk#¿–±¡úÈÿ[ºoùµr]\—ëÕåóÎæ» goüµ“|]^¤ýböšªÚ`W;PPÒ +Ñ)Ûd%¨“…Ž|–ì=’%íµq©ÂzMÛ&8vúdxÁóæ<{ó”mÑìA­&´¥óðj¥{iDs©Ì.‹×'-‚ì7ZJ¤$hIúã)Uƞ¡TúÁüÉš{Vœ)º¶)ÂÔ¥÷Ã@pç'Êlÿ~R«¢sŸZ‡D¡RiФø÷ «g:¨a8¶sèRâQ³¨ÝL’hcÃ-‘­C·[‹[àc'­Ç2)SGDþޙ•#«ŠfûÑ2ƒòsäªÃs©ÂŒK8éM”t?;ò9{)$ï÷µµIIÙÎ|0­5|‰bLú=ñBÈP)ü¬½)Gÿ ÿ _Â(_•>QΔïMì©×$BԈzA}é>CQ%Z‡ÒPâe"ÓVëz ¡ÐÓm À枟Ìs¹ò@XçüaâŸ}ðßh®^±ì0{uº/îéVëp«| ’:Æ·[‚$=gõ‹ô"­…ë[tu +\JÿÙÌ2H¢Ñã’ʼnÙén@lkº™ï\Q,Ÿ£ w,´^ógÛ±Yœîɘÿ³ÆÞW¨"-©ôOZó˜Ãä0ñ‚QÚd]f E°Æú áQÏYÆ>íX½‚UCµãäõ°ŒØÙú9ãçÇî3+ÔR2˜2¬“aϹœÃ¹ãêØ%f=#½b±,‰™ „4 +¯9MÖ½2³0N#Cœìvçc‘`òޏÙ1xYÛQÖ¸DTtTw;<¤çÒ=Áï·ÇàŽÀ¨.ç‹Oq֟eæ€ä˜xg%"?ðˆþ––›Teo ‘ã~r]húæ Iº`¤æÇäG1)ƒ12‹y‰¢T/Jˆ¦b4„ðø ƒ[°>ÕqO'¾eÌ£Ý3F6vÔFsor(¯y…aõxµL± WrÌ5 ãLвÓHa/ñ¯k·5áöf¨ˆ‘¢L}ëø¬F#’û¯ñÇ眗~;¦ 3i‚Aœãs Ô£Çé±ÑNsêŽRsž Çû˜”pïº%ÐÜH8H~ÂüàÈE´ðù'Q¤à–hÂÆÂûøöQç 9éÎ{ÓR¯¹œçˆt‡2¦‰)„§co#óˆ=íë´¦$Ž‚üDƒyñÛ°ãӚ—ŠW²Úü‘J¬è°O-õA<ç×üA?|O0°ZD}ÑÉvƒæ°$7‰¼ qÿ©©gGÄ5.¯ úá3G1• +÷l"B¿È­þ"’A þæ8}©9‡Ö¬Üš}ì¤ý¢Âðžöcí„?0÷ìŽÈÄ¥,ŒQ 4áoÂ÷nµl„5óÑ”€ý|ÂMËÀx´s¶†¾lîÑ1dδٰí§9û(ç¬4_ʨ´èŒyD¬ùòðÂԎÑ{ÕNˆc§íµQö£{¶¤µxØtqefÈ<»Øb˜R¤$~؋5]píÂÚâ3;³e¹RÜÐ*/ÌÓôy åtˆ]•ˆô‡ž +ßD­ÒUo4b,¢\ûڏýL HÌ9 ,òHyu}Pà~©¯·ÆÂð&¯ayux6¬‰5„P0ªð)GßyttE®ïÄ$KS +ãD­ÿ-{²Xðîtu$i>'| «XÑs&6hÈîhòRù¦êM&#â×^üñӔŒ¨ÕÂ÷x–‚óx9{$Þæ±í]ªž—nsÁú•׿E’k1–èíÄH“Q÷!@pQÉ} ¦ñxá0G¯+ ¶t|“"Ù1j̳ì8c¼…µãJ©úàê6¼`•ÕlðmFrÒ$Õ'­Y¥švºÿf6lɪ|¤À°£@óɼEˆó„°®ôk„ž†¸O3·Š\#ÖKð0îJGO‡q&”y4̤Ț[’cv·rªmz­Ù!,À€61ù—»ù“þÀŸÿäI,vú÷g4?n¸¥Oë(èÜ£ùSk1üqUó_ür 6„xIýëÝП?;ŒÊ±·¼gÊÎAæÞγ0ÛØÑöž›)´¸¿±'þrŠ‘•2¨;>~xuëýX—å°ÉQ+<èóß èuNO²eÝ Öù¿jàVijuYÝæÄjΪ9¨Š9Lº¶db~Ž‘’Ÿ/9{·sÃûÂ%Ñ9„ü|94%…w F‘} °ßÝ%Á…¢üÆRô¢Ùò¯=҄GpT}zْ#÷JµY¡̕ÒÂUJbw§*<5îâUä·ª} L¤­é‰[ŽyòSÒE9òSF&áñÏ{PÚò¸éQF© ʨâÚ@½1 ÛÚäJRž ì-øx¿…¦BߖÀèWS˜ X¤c†ŒÛUù|ú‰;…¸ð1û”õ“&lVÿïs¯pxÛ(= +ä£=“< Zq1Aþ,€ž’J©"ÓfÒâhŸà@d eîÜ ì|xþ™©ôÎeЎJ»m¶©L¿zw™ÿf/ÿˆKÇÉ„%·v™Ø#ê¶Î“ñM]¤Ô`‘” F#.Fh50Jƒ§rÿyoª7_írJ®¤¤NvI áSè·/iSu0Ë:m&•‘cÝ+”]çõ·\Ž»[®üdÿò ÿ¶'ÿšOÿ8Ÿÿ¤Ÿþ‘?ÿêOÿ`Ÿû²ۓÿ~Oþ?ÿ?ÿž¸¤f÷ð÷–­Å§öSp?.= £ê²Ñ]§¢TIm}Kóßb.HGk·õ L/.”“×sÖÅØÛÛ7FùÀRweèæ×G3w°%[úï(£B×ór@C¼J8Ü=Ôgl}샔¤\ ç’H ?8Š’(H-­ÙÈp=¬d3ÉF˜?”î„¬£;`¶öwã°Sw§Œ°äÈ5äú$º o¼?ÜF¬é¤ ì;—×Rw¿îtšÓèOLœíF ÿ0Hr7Ÿu +2•¨`‹2$YêÁg€E,U–ÞWнEΠÀÐhh9ušŽ÷Aœ3É;!#ó3BÄ$L–†¡cÄâr…(Ž@OÁÝÞ³ŠîÞ}Ä# $ÄqÂz_Tå"Jb°ãîÄ‚ +)œÌ#?Co ƒö¾éšýäo™)`©õNŒ¼ ÛìU²Èhá£|F€aÃÇ eâ°Ê‘L¤ç’ÓgÅשóþÁ„²š$ñ¶Ní:œ9ÌànsnæV þ«ùÌÙDîà50 +1€Ïf!`ÊÄ´ùî’pNNJt“’É´º +aSs9 \1ìϒÒ&$\8û2OK#£Ô;$ ë%LK9Éjd’b"ëgƒìd7ڏóÈ ÊRV™ýuNŽs2”q-÷ÑÎfÀ¶ j<ÆEKí, =#äñlr†(þÛ'g䌚R]ƒry.¼% ÷>GLmbI؆àyæW$¡A# d, .®Gøqeø±'xöE˜2«Ýˆ1nOÀÑáïÉ.ŒÒ.-‘)}ò£"뚲Z9ðŸ¹"ؐ’p;“Ók adoh©"h`›tTÌ„ìÞúîùÏé= î?‘×ç¢だë0 „9+?åp=‰ö<éÈÀ+ø÷xàtážz=ƒ÷?ÕÍ%?û8ÿ3É•ªÀ­Y/îՆF¬×øjüìAªiZ¿#ìÕÈ#U§øjÙ±OJInrŒa#ûmG!òÎÌíCý +fZɊ¡?ÈhÇTvÚãfúæN÷g¨T>ñX ¦¼»dz‹£ûR˜¼ ¬á8ÚiÄ:¨Üö¦!Pÿ]™ÿmcé2˜ýP1ç?² }!XýP'Ð ˆÜT)®4ŠhP“¡ìÌÄ¢%Q;ÇsáÃÅe«úÑIY|¾DwÇ?¸¤yÞª]»Œ&Û§uøÜ¬â—œ«ÆÚrÃÇ£L¼šü¼VY8N¿®Þ?p9ê²Á²ñêÆy¡äL$ív74µ Êöfb­ª¯ØÌ‰·ì¨_BÔ ÒÇÚ^Ô ¥"BÇj`Eï 4™*šC%ìj%ô¶üëßÎBÆ¿±Râÿ9¸xÛö²\6þt ¬u™·¼§±Ì‰ô¯ðiß°Q^t-¢êéìsb‚ô’ŽÒ)rÙ¤ð¢^°06¶±¥«{@É¥ë4+ ä¤ÛâYy¾Ýâ4C»†ÓšK£@®p;c·¸RgJ^ý)¨d[ _]3½Â¢W‹MñÓ|”ܪož››š1ºözöºù-~o_'¯u¯ìµåƸð¸Ö狍kV\k3…Ʊ2\jý±q«h VT¸Õ3ÅÆ§.5.¨¸ÔsƠܸÓãK9€cM.Õ>„”} ÍGÂñ«¹{ê뽺¤±°É |=½ý«1ty'büÔçJ1Ý0J4¿ÍÑ©f–í?© I"™,r1f€PúÐvA}_ïïʌ–‘’{Ï ò7Ýø\BRËH6®ï.ÜP”^¡À½‡w:|bæ>Y.=¬6%ÌaqyncÛMöHXðJƒ<…ÄT÷$xº3…7GÑâAö·HeËÛ!3%±Ù KÀ®¼)k$ßD6ڃƒcHé=K3+·äp³t.—5·³¥çÈ9ârå_ù^½1s4×:†Tu½á€KÄI!Ou6^âÔÉ®HÁ¼êxÖR@œÑe/'bр¦qà~቟ϐ2ù3Ö%“ú ÆŠKÙ$€sñELR@d¡"Pp#<Ê2Q®”©*aùYõ³m­ÆÌššÓÝ0†¹œÀ˜–"å‰þâÑ;ÒjnOþ©WǍøþ¹¢xåP˜L÷|àr† KLȇ›ïÜðdk›÷Áƒ~ÒdC<ˆ~)«\-‚ž4€Uƒ D?Î@1YŒDqK~ÈÙÞ`)¦Ü³O”¯ÇØ!æW|Œ~ €þ]‡ÔÇÏe+úàÇ+ú\#ö¿£²ÊWPåƒdcüRó?£?”¯ß°ä‰øÒ©ÉcÇe)i„X¤DÿÎ@s}&J—T a”T46±UµƒƒÐ××ãÒñ6±§±‘;ö­E·ã[.ÅZxœ(m9xPàãL{-'mù1°°¿U·u.«KÕ#­±/„„Iòµ˜Hz»„6 ‰p)}Õ äö"ÛèSÿÿûhÜ?oçïàõ¾'3¿Êâ<Ñk-Û_¿ƒ¯je:,Ö?•NJÑ¢?oðûb“Qý©nPq¶nì´#åæ³·zñsNÛyû Ěc»ïÍсÓuc% =ª21]â’O¼ßp–DOÙ6†iLD׌ª8zó¬Û•YšMxê³}¡}ÑuؘÈüJ|²ËðåkÇÆ^V¤CìE/†ÿh~*Í(r¦éF>àšª…gdèzL՜u‘£Ð欚Mš²á‹ñ]ü9Zû}û4ýól¸ƒÅiú?E·úüœ¾ï¥‘¸^žÐÂè_ÊÐÛÿ˸yˆ©RJdEIbr¿.èÒZА|äö$ EP.Ùƒç +&{™͔ÃÀ¿æ§¾4ˆš2‡U=ó ¡\ñ,5ç_óqQ€Éô­Ž¬­‹!Ej¤]´S¹áµJÜLš1"”¼ +7ŠÏž< ǁœÊ6Ÿ¶²Âêû£Òi;j3†ËýǢ½æ—rFì­8‡¨Ð̗$Ç5 ©ïÚ/pØ +&åbt÷4ÍYO9ƒ.½¼gpô¨§™´J%)iœ²cl¬q^2jæ]zåý@Y8^29§Ëà…Ó­Öƒ]H+IJÀZ{Ë®·ßµÛç÷K1—â’ð°rål?·'Ïkô:•î?+a(ÒÿaD®üFˆ6.¼F×pÐ2òÚní0%ix217¶²ü:Þ/¾mÄ;tù,µ=½f8zIpr.°¥×ÛÝoz¡Æ{KY„=ZÅï {‰½ÌŠÓÈ"]ëHºô´«&·ÿÃ{2 ½ÿxrä½çÒõoa:º<;rp!?è“Vª®(…/o¬l({Ù0Úñ$X’“¬_{% 3·¢¤úþ­vÿÕÞ°ÊBß) á„Bys‰“2Õ¨¾^®öHVšèŒb´Vô²¥s-wä j³ÍXŠÉÈgçg Î/a!cáX›beŠòð/ùûÝõM¬h¥Tc©à 8¸JŽî­ÐcÒaô%Ôca±Î£~ð 4*º%ÏåØJ”‹SEèëÙ]8úüx¹YzYTÀ­]Òæ¨9#C‚æúòº^ÿ5³à_Å0­šê÷'{‚zúàFè1u:..}8jL7Örks]VëŒus¨15»'½:ßêËËÄÙñýl±RÑÓ.<;Ù(’`ƒ>uí;ìVû)âHzØ€ƒ©†Ž¢atfáÊ`º­Ôû&ëFFƒÜð.©y)a1`‰ä”CÌ)ÐNÿ>V‹èJ4aÀï¿’['ч•³¹-&Œu‘…hî¢ò3ÀH ÎР"òä‹X^­0q{³Òð„­‰Td³àÈї‹É<—Kaڙ’5åàȁ‰´«÷xq6&È̠öÊÜZz6Á.¥Ö,bJH(B?A]jbؔ´nQOûé‰-|Q] +ûâ9 bù§§µöæÞ€ÔÀ|zT"|…fS°áôèä†öÓÆ2Œ4¥*©y¸ ~óû‰K…ÙCÄO =…·ïB͟–tŸ~q,ËÑáEY†Œƒ­xbGºO­ÈYˆYŽ2Xë_ŒîtmÎ|,®x Ã"F3ˆ +^L¹¦¢#ë=*ÿ1ô 2»F¬ý·š!Æ0¤TBáà![*=“áÁ“‰i¢zSIeão+`¡NÙtN.HçßTæ‰ë!Íõ%‰ÞÁÒe ÄìŒÊ 9mäu±Fáb—sÿ°Ü-ŸþámÏ?‚{–A˜RÁçÔ“Á…»Ñd`p’›–f9Š8|.)©Â`Ž¶×Ùí<³\Àk“Di†Ýgû޽ó Âh¡¹jdÈGu<–¹#¦R˜‘׌X§d`ݸ{;Óvê?°ë·@à}§ƒuÓèÆ™uÌG³¤:ãÜÇRê"}â-–- Cn^üø0{>,Õ¿V ל+d˜ïÒp“…ûQ:DrÿPÑéñÜÃGٚ€}~ÞýD )Xp ûñÈ[ ÂjS8‹wQá7{’ôö3vW!ßõsó÷æGzg÷r™¡¸»NjL‡­$²©ÂîҐÁ‘C¹"‡†®’Li?€PºI®y-`÷ÄcO¥#0š,&$vQÒ¯´µ¾à‰ÓáXø=°f•‚á[,Èóqê^Yu‘Ucèi¡‘:¶¨}€ÖÛí…1ù¢˜É? +®('Е±õï>²ÏyžÍ+¢3’Îï3â•Ñè}›Ê¯´…fŠ!êûÃnbYä™fúç2·&"ögë^Œˆ½$·$”m!HxJVcÖÛÊò (¥~8}'â;‘¯øõÐ#®‘ïŠE>ý½ëÉ[=÷Ú?e­…*sŠïp–@?Ô·•~ԊþöŒ-À{S"_¾}ט``x¹š¦/±ä–c+£#Y.XtŽC†Û¾ÄTb +;+bŸ¸…"¶Mz*¦$Mh›Dïü.WáÝ@E­eöÍzÅ]òåTÔà¬ÍEb,«“•Î'‹‡rOQx ȦJ¦Îa²L`öLD)†¤A³±]#Ȁ=ÄL4" ÉÅöLþƈF‘ØytČ"êÊÒa™‘/IƒÈ€>LWzFt @ôŒ#ˆ& "ƒ7:Ž®²tr=»ÕI »wÛÔ¡¶ï‘cª2¦ëQ™Ã÷˜ÔÖê$ªS¨ÏC‚'m>Æ](Ðl¾ƒ­‰8ÀMå?ãû"3;àށKÔûV bÃNôn› ) ÆԑY ó¬@­o$”´Ô¿º˜gã1ƒÃ$u¬å‰xw)ÃsV«û¡Ñ1Ñ\UGø²üOdP}eâB¤”¾…:ĉú¨>˜yµVºNýÌ ó“¿ÄÁ©­K3S[Qš‚õ¸,f8Rë¯ý`Ï À¦”q`×e´)ë³ՂíԔ!¾¬«‹ ¼Ú{_Òz„†^›é ¿Ï*v](eêÿÞ^>*])x:b8Õq±&T<¤­^Áé$„왩ù‡£t$Ñë‡Ü0ªÎ’qn‹VÁ(­@ùĄuì*ku’PDFb豂ÍPw<Oï….ƒ “û¥/¥!j¸ÿø¾½:³} £û~`OU ý²·\~“éðœWÐ<ÎŒÌ§ÐIØ4U2ªb hÞ²S•݁€w¯0§[šîxr¢RÝûú7ƒv**Gƒñ‹ [TVu«1 [Z”õ™ãž%„¸%Þ³‡yó‚‹-Jô”Åý‰¹„ÑmþÙoíÐçQª?oºUKÉå.ù½œA÷ˆQ«Š©'gfèÙˆ­bânõ„ºäUá u¨/Å9°¦;û¨ÕXqÙ}ä N¦üŽ±Ñ–¯ß{âj½ùhvý•ààdøìåtš–§]‡Äs_6b3K82aÄ: ˆ‚z¶AbtU߅yÓ6Á°:—Œ8¼Ðxg]Ô pè,•³ yÐY•aè¥Ò•'úÒðdŠ·óŽƒ2Uº‚·zuáVìS ®“»ºuæØ~óžïàs hÑÎÖ]@Áz[‘í΂À«\ÉÐP+•: Åf&΃.©Ëàûw—눦\)zÉ6âË⎘§+½nrÞøà„¸±*O[ñÝ×" ÎT+ŽW\@»"·ÒaÒ$ÁÊñÖ®'°üoæý˜÷uÓ!ïªÉ öˆ¯CÏ®d¯¹˜X•uoå;%<xD©Bßêf7mµxöõÆå…*Ä“LH,U³» 9 ‚QaƒÿîDH ´d­Ò ü¾øá±øh|;³l*Ê «*‚[áì^]Øvä®h‘¾)´Ôö½Ë­ŠÈVEØì5ã‘ä‰3§ŽÇDW¹ŽŒš‰Í+‡ÇŸ9£&9I¨[M6š2F…³ÒÈb­¤pŠÐ Ó»zûŽ& Øa½-%·î¼×ªøç¯á5zÿ0w~¯-ŒÕBÐÕå±i‚Ë9Õq˦_UÊ.ž×UË.™PK¢ª3âÀïُ’pBø¾^C»¢òñ_ÿï1ð …9{ÑEۙQDÙУŒŸi‘åTŸIïÜ‰/ 4öÖpË Õ¹—ÛÁÙ*;$ñ=) +cÖµ¼¨ŽØ‡'­r Q„— eß-ü¡£eûÈò£el] ÿKR<3ãÇ3Oè% xü ð‹³ _ <(qx’ rˆñâÈ|<[sæ|8a|=N½ŸÇľBJœD¾Žn¡VÒ§Lóì¾p>0Oª›}¯UfÅx<ŒÿȜû^EQTtÏzCŒ/÷97%_à +¿Á÷ÂT‹¼å#b’”ë=1yÙõïÅ’)ÄOä6ÈňYaæžæÌÚ#a‡ÄbÙúGØZ;JçEóöÖàWå¢E¾ØïƒøD^­áè ¼8M)†LH–®æáèZ[ÕTÞø8 Ü·m‰ÿ#7 ÿ9P¬•|“ËÚ-‘tP÷–‹c‚ŽÐÃ'>Ü4qÑŽKÈLåx—ŽmCbGyҽ睕ÒÈMBŠßÓâ1\d$;d¼k÷išùñÌwCvdEËíb-ˆ €¡ü‘•ÓΆH8{ù12¸ +8züØÞ\to-o)+!çXU`óïÄg9ôŽ+Žf Ë^ƒþ9Ã{‚åÇá/än5Š9Ájä=Ô¤çە$²MNlcgƒÔŽ“‚kéŒY Y¿å·ärÔñÞ­ÎmMê„BáÓù²%‚uéX` byʢꩄþ^ר1• b×üWŸ“ç^vn M•y½<³ïF¨´ "B°.Ã@Ç­~¿Â¯~¿ì„fšþ+=+0Š$$¢Ý2,ÂN!¿ßøeÿ}àýPÃ0î¬ÃŸfßïïˆuzä ¸A§öÛùµÃdŽ»ƒA½ ²»²Öjð3N«dK‚Ó¿sí¹ ŠH’X=;4ôáYfŸÜ¨ƒ!××¼ }ß-ÒP=‹/ÞzÂßMýÚ5, 3µ»—÷lªGæf*ؗ÷n*G¡¬ØG÷xR¡dE¥Ýö…B̋!a$Ló «ÍZÞNðët)½°šöËëdœIûfÀ!™þØà0Íó6Åo¾¤ÄèšžHÑÿQÛ¯XvÓóŽ×D¢ÝQÔclBÎË } ‘¼O_é‘6fm–B×£uIþFòA +q:nM”;ì]ôÀDé,GÑÛznûûÀ@Ù_` ŸþJi½/ÑèÕú?ƒÑô=žì}­ƒ??a‚Þì0v{ $M†ØØKñvëó;?²´óåÿwŸ‰ýÞ~6ïϝÇkždõÞÆ»Içk£Ûkxû-w&ã]ìÜk½«w*ã]úî5Þì1Û¸$^Ȝér]bIu:êtû§ˆ]xhÝS‚¿Â(ûHWøE°§Á ùæmæ¼RÒ35 +ÀM¢;zvT”`ôú++Zï»`”›µ;È姚ÐFƑó§,…Ô©ø#!<ØÛ÷§h(7¶+áH˜ÁóÓW 6ÇGöll7Œï™µŠoIØõÊ$«wÆU©!V3dç +°Uo?Æê‘í•“5xl¸#èÜK3 + +ƚF´£…;ц ¬: +&!Š9ö1v"Ïjç˜Àò‘°!×½/+*rͯ©Ðò|¢CXT¹Bd†Â ¯7‰K7¤O4€©{ÉNWm&ÕÿÚΎ$Œ)z”Ü»îöo¦ž0è¿7¾kÿœ)”²4d´ÑZÜ+Û.Zßi4 +͸–$ÿKÀ‰?Ó³Íúµ³n?Õå¯å~AN Ь×ÉHU—d+*§· «nk–œ±Üg2Sqҙ¸è»V â¨K¨ú§·+¸Œ,Þ7ËÀ͸IŒÜ¿–?>h§î{e‡¤úŸñ…öXÂֈܲêèÖ¬òÕbî#n°™½W70ÐK0T MàÆž šà•&iz¶"pÿs÷½på6„ÏhtT؝ƒUšÃ;­Öë5­1a!Üb±a¥\±µ-Ì4RÎH`Ñë°„Fä˰z®‹ŸÍ…¯wù,jšÕs¼‰¯ ŗ)…ƒê‘î¢'¤nÿ¹?~~;Úfû!ñAPo3ºÞG-S¸¬dI}³ãØ]F9±¿BÐÈDņm-˧QšÁ‘€ð²×Ón¹òð,·™aå!p5(u×Z ì|ýbðn>oÇqrÇG.‰1BÒ;Úß¹áé¡T¯Z«,qŽã‚)1béë¡,\á—,\ŠF)Ê.X¸lõgcíxïi­ò§=¦Ðè—ÚÎI wb8ÇÖk+–bmu´å—Á@å:¹ó¿(äY®Ô”9Җ1ŽÚ¦(Ï,8õ'ä”!·*;W:s—´"u‚1ÕfÀÜHÞÚOÅ_Ÿ½‘îO¾®­Y$òžÕÏôâOôN‰?pàp—’Ë •î3zðñ¿CéSM5Ý^Xó ~Ёí4³6drÄáëj 1ÈÖ´°а!©[˜ +ŒJ± Õ¬€V†»áíÆh¥pd¿‚B\ ’ë¤%™/␗d¿’B^Ð1Ä.¬Kº¤ñNê³³í2ز`Î<‰¿´í&bÈÿ'ÜfÚÝd0ôHÝÿ KöÈP™šÕÌþP.b’bÍ{ìd‚̤´‚Ì”¬‚̃ ”u¥l2J-)a’Y†J]d,2NáãÜ5¹e]ýÏÂ#W7½N—xDt¸…:±ÒÀÍ{Êûü~`úK¤’*¬·֎· +¼ˆÀä.h 1VqÍ Ñ'-ȂÓ9ႁŒ*«9ò?è8ÁË Üùí] íy±Nÿïã¢wGÑêK Qƒ‚!È_æþübKoI墕q‰þï› û[¥¼ÃlށˆÌ?ˆ~G½µ¿¨¶„vÊé¶è½_p­ÊÙ¢î xX"i4{—1©;êÀð°¯ï2Zltû ¨ºŽM7nªÅxY»›a Ж¶ïŽ‘|¹ô€ÕF§¢jÑeŒVr0³9Ʌ™ØS 3¥L,Îjafs 3‰Dõà–N‡Œåšx´yãg«ûbόKŠj±ÙmMŽÙþ’Ô.C!•þ˜,ß_’‰¯‘‚ÉWŽLÕ1×ܖ‹•ð]ÿRöŽŸ=Âzaþõ ŒF^)<ªq%ã¸ÎXi*jn´Z¿„àÇK¤\n+C {»–%/_¤Íï ʼׇOnûÆ2utöÛwÔ¥Rž—‚e] ·|u÷| »éÊDO(çód¦K";­G´¾ëý6ï±]…UfÝöª¯ºr…U>g½g¯q½ÆkÂg½ïõá¼,,ï~ö¼7$† ÔÀ7iþ{â>ÐKÏ}ŠŸ²]&‡GäT¥ö?éS/#栋ÔôNÚJû(ä|ÕæÄüª ‘QS/£š²ëüԉ—KŨ—}Qö“ûª4ú²øYw‡æ«÷‰£ûrÿf£íË¥äHï¾òÌÆýFÆw׬؈ž]<@–R^.8ԄíþƎfØK%‚YZRøOfŸµë¬øä@ҏÛIT=¢=ƒ½E ÷uÀݬƒ(‰®öd(œH.H&®X•?CQªÅˆÌÊ +ãÆ75Ï;ÿ ëü]òüï÷m5F‚—¯áaºíõ£=Í[ë¶7__ Gµò¤“{Pn“`l6)–¸ù"V‰Q…ÅðÃÕî€Ì6}ìÃÿý\ò€`jW®éä9ѱBÿ‡@8dÉ\DIóÈÿ+¨êêH—D®§7ÕÐÔ+‹ì×+çP +†æ|øéf  ÊÔ+>xñ“G#uƒ·Zjm’ru +y{b¦Ai‰¶)öb›·NWC S¼7Ë%”Ð th,VexVjí EQ™ç´bY€3©L´ß6¦¸s|¥øÒ?gvÿ©~ wn?ú_ˆ¢¾wç§Ýht Ž€K6lPŠÈ\n~V÷"Ãa‡Ã×V™s]D8”ðÍ „ì +ì$g×t|òƨÙö$r×ðŽ–Q¸Ë —{4»3‡\]f%˜i5Æcb`Ÿfh2ÐßL:¯*¾!Á ì×'UföÊÕ.Ör£_HgÿNÔ®•Üþ^¨¿lŒ+ÿãß5OÍ!%Žä4±¯¦OÛßÌx²âÑ݄´aÁ›:òé, `ï[Û¨fÇW_ó¿²ýÝØ|_ê¿Ì•~V÷¼¾zƒ2T.…§…¿VùŒî/œ`Ð3ðÝV$—Î'ú±t¿«èf. ᜮD˯¯~á»®µ#WÔ +HaûÿìÃè¯$95؞/ý˜”?³ڕ‰ëGÁ¸¢¥Ÿž¢ÔÞÐ#ê=‚W™†_eÆÆ¦FKã7‚7È;„"( / ›¤ù‘Pµþ”Ü~óKýýžü΅~îZõê4¿–y·½¬ª¥ã„É΋¿|‘iÇ’È5¦bœ®ýäâ½¥þO×wu È:Çèt#uƾ—yÉ̼î±xŽÇïìzÌâ:ݎåÃfK02ø°D³ì”pbóIPý>ÈÃ}iaÀÅÇ Ì¾a_™"ݘäCٞ©fãe°¯Ãu*Á¶Õ£~Ý¥ƒ´ž<ò|Å E¦A¡ÅÜ16c}Ó [ñðáiqaÙ_|E+‰ß2¥Ù_—i—ßNÈÂÀ0û—|]Þ6å*“d¥ØËã_˜o3´Kü|ºñ¦!³ÚO})gݗ†»MÐ›Ô29µÛ!MÏUÏw¹º+ a Fhæjœ¾¯菱§¤"‹­=”úÓ`ÁÆá­+ÓÞ¼„´%ä}y@ÑÅþ2²[»‚ÕN¯€œÖ‡AThŠ1|a¬–²Œ5.¤†Ôg#h%Á‚ÆSfCÌõåúž +G®·×^õÞÎ àO’G /ShÒmâÇ[ Y©³“h¯‚k’ªÒAÈý£~ßÂYH4Œq‡žÕ÷œÎ‚GÔw(ˤÉN¯ÐÓÇø²$RËÕh‘‚Ü;3Ÿ`Õµ SŸ7Wâ 3Ÿ3‡>@.׫?xWÈæfÛvu-M…êx˜*™M}⹫ɞxiæmo++ Ïs )*ZªØ ˆúNf2i,PïQí§X¡ÖV#à(ÍǞ,.õk¦ïˆÕ€ïf0æf|M˜|ê³-ûÕ÷}^o«ñú¤ÜIî2uÙ:í¡´ÿOÙÍÏæÜð79H,Cê÷N®X»øÖwŽs´4E”Â҆Î9ÿ9±k°îF!òrFÌ8ŽOjíÓÀ©æI³I±tà’f¹rAnà?тžeë +”bOÞ°é՟“™¶ ¥`´—"®ãúÿú•o„G&Hé8™h…*¦cOøàPµ[¯Trè’ÑB²"ÍV@ø¼ý‹ýó=‡žÊ”²ý§¦ÏŽbt¬ûEۑctÃèíšÈ|Ho ˧“V`qé,z´-kˆêúðQ›9&ŠpΛ6zV{NJrj:ü¸f] 5Máo‘ Z¥(á¼V§³àX†Á¯7øÿ&E¥°– +ö¡NÆ®}ˆ÷º ŸDÚO +¹òDŸŒ8é½tIþ©7ºÁ2c´ä¤Ã{­'#˜l ξZšAug'œRs&F)ʕՆ.ò ²pT4)ýQߨœÈïÜ%܎¤R˜¹EÂr×3ÇÜEºV‚g× h›d„U°AôØ œõÙTr—pTY˜1»-%.®ÌÊÇ/S™“Ró&” ûƒÜŽä‹1ܜ±û“Ë5TÍcYä=Ý3HÞÀgw!&êê$ûw‘'ÛJğ”8ÇÉËIùR ×¶’ !ŒÿT륨÷ž×èwݲ%†H‰qÃnµÄ͵\û‡jåÚÕO·.¦S텂Õf™¿†u]4¨á ±“îúsÉ#ih#IêpÍi¨B̃Ջ d{Ãݎ#^C֛T~ƶ˜eŒB Å­sõ»}´t™Ì2,ì[X³Â†»v¾ +Á †C˜|)zƒãæ¡/±ïLÊAbf*Ro\”jbÁb¾prV×öޏ±€? E X$K¨ã‰W±á‹ê»YrÓá&ð- ¨‰ññ )ÖÈ@´›ŒœœDuÅLúfÝ´Ütäæa.–")-…›:BoÇÄ´•öçfçAz>#5<Ƨi²AîXðãË 03M‹ ‰µwÝù Sbï»ð%(XbkO›ªÒ®Õж§ßÂԇ“+w›¢æµódÕzÒf#®käöa¯¨1y¬-”W}Ía»pHãd|Ÿpÿ’Nj"°Ô﹨êwÞ|Ã~n¡r¸þkJzKÃDwä´iɇisˆ3=D°Wz02€I܂W0X×¢àò˦‚ŠkÞVxý³tمH›à&«Ëäçj员„£¨šfÆgZÆ :8BîâcU?Ô-(Ól ¯ím’"—3÷‘Ó,£¯0*£0Ý&e£à´ÎÞ7™¶§ÏCxáÉ9ƒ*W0T3[7(úN õsMk‘äòÚrÃmrÇ a]êþÅ9— +[7NP=Â;KdííõD+#܅P8˜‰öÔYÅIû’ ‚´¶vc`‘v®}“âË^¡¤‡}õK4o¦¥ì›îÍKÖºfAÏ"màÊ){(ù˜~qÂëiñdZXø_ WŽÕŌU"¥çJÌ<â¨ÔZ]KÊ⤮]#NeV€üõ2¬JèÆéôÛLáßw‹JPÖ-qۖ¸šä×¼›tY¶ÝIM¡RÏttÙÕ'W÷hƒßŽÒÙ,AX`ÜÇ0öÜ® ¥C"³¥xÕL,ÊfR5SÇӛ÷¿ð“Α)A­º›a±S§;°6"»D…ÈcûgVŒpÇ\ ]X‚êÎnîË•ÈA2¬éd››u¤.ëH€UÇ¥ á%©“ÇuÀ D°OÝ8%‹öÎp[ºt£gg·t;HÁý%†\SöØ"N†!|ÐGa½KCÅB f(οç3à6!/C©‹™„ XI’Æp-¹hç±Ö[¸ƒ Ùf*Ð4Î Ôy›`åzÂsé÷ˆ=‹ l W,RËdâԔZ® ™ÊãÆdª6€W7bJ\ái@â`))K͋_ÃGücÇ&Y·ôIœÍ„¿J_vf†?ç1×;s²Æ+îoD^¦"½B,‹Õ† ÑQ§å7×Ðò‚ÛÊ.ðtö! ‚©Zäh“T©´~èzl3ø'¸˜ü{«e.>‹oçDŠv„Õƒ›uY×÷õù@¢!WŽܑ3Iû-ö±^ŽÖûû°]¬(C-«õ‰äåKš—¯GÁEÙµ~ŽÚýRîÊY”a«ìÍ#–ÚÏÒvVÑÕSûÜ¢ØÊEDä¬yWJsÇ6'érœþµ¶ñ*K⩍;ywd4¥©PïU*íV >@àł©÷²œ÷ƒ–ï¥Á/´—5dSlè™(À‘@±Ó„û#Ô]И 'ã܉¾aBŒ#¥ +¿J¨’•púKû‚©Ž‡X/¶Z¿GYë;[?¬”]>ïH¶bח²*ZÙWƙwÁ&1YO«U=Ÿw)fVCQSsó½OÅÿ¶Ô4ó}³«=;…ZíŒ^õãÆ˜ea¡j5 B­wurt¹åØ@J «]¡…!89wd\Z;ØEîi'm§Ì[ afðo*ß;Ðßà·>Y¹áyþMosWæïŽ·ÑâŸ<¥ ‡ÖT‡ØÙëµë.×nîn—)C;wo¶Í¼u¨Ä„Ò¦›Ö<” ‚Ì5uCIQ&CùLb‡†ujšp‹KÕz%KýЯF1Þ+ S•ÔHWƒJF:½Ï3ÚiQK¹œ>i¦¬|mºF4{–(Rx§Æ=û^áÇ÷Êjàĕˆ’óàËJäìñòã½ gH´®9oü]‘Àׯds‡“†ÿªrӟ6ÉJ”¯§#Æâ£˜ ÓÅØò`Ùž¦ÇØÃmÎKÕ\H<‘û²B@Ô#!ÎL|c­ß8á˼–q{\¬ÇK—û:ºýgX‚Ÿð¡fxrþÞZ—‡´[a–¥¬‹_a–œC€j|£ÚT9#]òvOý÷:͊,‘ðø"ä¡­ÙRÆ!ȵÇ_˜ao˜ÊÓQðüg醩Šb†sd58þÄ á'cqáöÏΖ”L×oï^tp3®~1Ö[޶~3Oݚ\1ŸŒw&¥G?Ò£Ï'î«s?K&¥¦ÇáÄ´Øîq#v‹äÝï¾I08cB™Ÿ믣»˜D¼åT §ÍúÀæ‰ZxþýŠ¡Á6·Qï–é3J[p*‰­6?öJcÝ=ufŸ¢€±|€xŠlpcNWNj+R78¹åÐWa$hõ÷X’q#nñX¢úÊ£:H¹ȼ3è¢Ä‰é½k†Øòà×)!3oH îãîiTÏ´Õ~ ù^?-##Ú;ÄD ìE [ԇ>ÑÞN5c½ôäÕI¡-é¡í¦É»ßjøzÊñ˜]ú« ßoiHkÌóúK£}—ÚRb"£öûB)Ú¬Bqá Eû3ªT|¬ŸðïÖÁÿ·`€51òd‰k*‡™Ã*'hIɽm¸$tyNùh§·¤5WÓÖkª¡.¬$‚t{’øF¤¯s}j‘°ìzé+ÆõàÔL£KµÑÐIg¡åÓÔ{Pe¤²þü/nïmawRxqXŠ3±F½õ>njHç¥  .þÛ$1TÊe×fûäcÝ +~Õ3ú€GÇ5Ϙ÷X@jl PÛ O¶%3dø”á IÆ(}Q)ü¢SÅ¢%=Q)$Å +1)ì L½CÀ¾ŽÁgìáî€ïI82F˜Ä#vãŠëêdŒñ ̓$ß° 0O×EìPëŸ0áw‚O«mŠV5 “’3x*gõPÔ@cઠDCqQD|Uùôþ©H`O§ö +CCÔñÀ¾÷ –ŵ°-SáDt][<…,9 +9ãÕÆï MT‚•û]öà{õºòIÊIöªƒh¡¡¥Ø>ª}‡±½éëØ¡A°I¤Ñ@n)‡ÌõCÎ×¼XÅ –Á‡,Ø¡)°¦$– +ôÖðGEX Ï`¿jÅä.ŒÔkœ’¯‰´d9€ª:ª²]}5]y£ƒ5¾Ó¾ù—j—ÓÎd¥yŒ,éjä8OFî¦%y+d|½N¶½¥.*XùÁ¿¸󪣽xÄÙX‚M¶—‚7ö¨hTpeYÂj”Ã|¶­  qW©BÆ&1Þ  +šW)óÆã[;â¡ôåÕ×<ÍjîëgÆ)å{×|RHdÌ ïùg×jøcwߺz™Â§žZ4ݬ‘÷úëՏ‹QÎ¥‹sjôl>ÃL. +7ÏÏßþ¼}{…XŒ/ ?syîGzcºGõôI¶ÌՅ’k'|Wž“ºÇæ^ՒneHøM|çUkÝq¬š:#aÐÂûô2—¯}Õ°PáÔ¡z‰#'ÐFä[‘èø\ž}xràÌ¿À4m¿ °Žªw[yÞÂjn‰?7Ó¼ü”‚ۏH +Ôªã}§A ÎiŠ/µOsc.|ò7N™ÐC‰E´z‡Ù¢ËZ ³`†|9ý*hü’ŽZîÝ.ۃ ×¥WÆ6¯Ÿ–’>ùzùُšˆné7YUöâKFÓqŸQ€¼œ}j²Ñ S‹èÄcë_XþJÄdÁ´ç¡_¡C*á +$hGŠ÷ˆ]¢ØÜùãb¥m îSxéÛbÜ(-Š¢-kFZz_"„åÏT»ø‚«ŒŸTºæl¶ß‹“³øhñ!öcöiè”EÏ-OîÖ!É$¶Íåš;앉ìžÙìÓ¸Œ!ŠÎ‘Œ)&«Q´NZ;ʶ÷,öjÜβ÷»®Ó×wµßB»éWxUÓ;¿>µäTÎïÔ­y3»ãV¼a3»÷«^,™Ýô+^'™ÝÀ×!­{EÛ݌²Êê‡hôV¤2ïJ¯°E_µ÷WÛ@ÕQ)wÁb §Qˆè¶Ù¥.inÐç6ªèM·°7ù6GÍe}%(y0äž%¡pˆr£aóJ²«öjPúåªiWfð;ìÓ֘ýoH¡ºX]¡úU¥à_ø@b$äG(*¸&­ú7·~G<üŽP¤G¿cBäŒ~Iì¨ôÆ)c2ҟÅß7#ú×·Uö;Ð$Ì7côö˜Ìl¦JŠD>$깃§¶N,6ï^¼ã §>‘Õiæ4Ü2ñäc±Á§JF?\yÂR1òÍãBøàb³àT ·| ŠAõ®újr°“½ì·ÆbíOž×”tõA)ÚìåKwˆG‹`\*x5KËu(Ÿë+=@³ÁG¾´‹ÆKɸ‰)ŠtLrMñÑn*/±â²ò±ñ@®|¨pZÃn>Aqèù=$PÒ÷a±ÓnùcX†þ°ë=tn‚ eF¸º²¶ŸŒ­P8dÑV$2ˆËÍï@i4¸Q 8žS¡Þ~Já 9à™*…Öl¶ÖK–Pt|ОŽ°ÇÓ #ˆm Br S/jÎ&èxKIԞ5¸ÝÄcÊ?ØcÔb7Âòš‘­;© ΓÙn%µ@O~‰pФ{©G’ (Ö·–bÝvkhœ÷púàHË'4…Ûþ‹Úµ£\b˜À$9p#Œ^àôp:7?À¬{  +y«`FN|w1ÎŽeE›CÖZØzbý²mäœeÛ +9“9½ÏMl™} 3dëèýÄ͔/£¼'Tw‰Û*_FIVÕ¯£Á©lå}•-µ èýå-/£Tڍ}ÛTÛR¾ÉWæw‡ÒJÚ¼‡1w“X$âJO§wZG h¯¶="ɗΨ‹)í’ñâ*2ÄL±Í Ži”dáôär_Wë–n«2ÕÊqýˆã‡1x2$KöB—›¾Pºnºb«wŒ ×ò™S´0ú‘oe½ ~šfØüª£çRõÍF«(EЪ*›µII:I³±ÿšgÙ4úLÂC›!ð¡Š7Ö*I^Q àÔxżhðø%P²~2Ÿb‰ú +¬Mz“ƒ–«—£0iTÛQ$ui¿SBb8<-Í«Ýàымtzå¬õOwNþ¤l`.FŽ _èœÒIêEÒE;…!@dŒ™£Sª¡ð«_¨Z±~Ç|²«ïë=}d­îô¼­´PDW8IöNjR¥¸ے¼‰^ÍÃc~^À— +Œ‡Ü˜åì§_9Þï³0†\½—R"VðØ.¿ˆ¥ãöÄS–­ 2º Y‹Œõòø´²á.!¨S)¡¹k'HØô£ÑºBÉQÌR¶¶=§@^a8<÷ú/Aè‚/A¼øW£„_¨óAÓÂõ%#0¹Eƒ™D˜ású§¹ÕR²A^1Ü»“‹c¤]Hߝ‘Ú Ì +MZ|éQ˜áó>Óº±¸~1oT‹¾ˆ2ù¹}Ì>z¢Ö¬7¿·mÅW"¢Ý“¼J¾ózE0¶䷈6u‘[6¢Õ¼ÅûÅl~ "u?knÞ\3îâð†qE Û¤æ[eaHœlÑ)·y{覲Mc +å¬I#9“«Dî0W†Î)¡ëR„#޳«"ûÌ[+…‡Ñ´ê¼óˆR­+Š´À¬`™ò;ôE¥ºz [©š—À‹@zÝÖeúR øde’®SšD…$> xG…þ‰9’+4Œd„þP²$I‚$Ñé¥"í ÖÁóŒ¿ JÓ¨_¨³ñrøBá·¿…VzáõT>¤Yf ?î‹&±B4ô- Kïå‹&5 +сT­•Ãß@óß=ñ^±CŒ1é6ØÊYDûi’ø{(,ûdˆµÔŠV;†”Ï7èã:¤Õ™ºç?€_㝣'ü'hØ'BÅ5 +´W‘½â¾Is¿"èEtYûWHÔèQ|k§Ïò.™ïàºy©zoĺLÙÆ9Ù2¨yã+ùE@ÿ<üª÷}üàC„j_±çù¨Þ³‚ÕCž ¥ÓSá Ýùb•ðÃ]û]ÆLÔ>Ÿ ûüÂÄv(qi5JßHg{1ó_|¢ŒGé,é(n‡Çzt¾£ž:óÓpWê $û{Äp>ךá1#ô' òØèOLP”BýG§ng\ä‹ÂÃýpd¿½óA°jF¿7ëˆnõOèɎ6ß,·füŒ["8ê? *¹·\eîùñ•§{âK£•æ]5:ÉßT§¾ú8Jý2¥¥?¾ÖU[Ê NÔݑzzÕ½*yQ¿ §â¸ÿ‚jãàÿ‡ñ…ÙiüÂøì­šƒk—ìlÃ1rùoœóÜRŒ¬ÈL ]H¤iØdúzͨ:¬Y·b9>ùf6B%ݰ8Å쓺óxèqGÓùŽOåÁ§ÖÓח°`xŽÓíC¼Þá· àãéöÅCawĚX¯«fòÿí¤Šî¨2ó™V1nÎÝà¼e´1 +pw»ã8L†«ñœ‡n'DèO"6Ç« +wUDs»ÀW)Ÿ´×)VFw\#bü +Õ+A}j˜ ðëDuŠU£»ašå, +SøQá JµL8wÕ£g.*©ç¿a+ÌS ̇8#ÝàZd_²¾ñT|×%— Ž‚]ž—£¤C¼/ ´ðÚGSJO—Ⱦ™ ~ÐEû$RïÜñ‹8òìޛ‡/.8*o«푾¬»tjè ­ù'kUpÂáã• áJúzÆûCl;ùªÏ‘”¤Ñ~&aÁùY‡+¦ÌXú‹ÕbbGc—»$k–W÷Ì2>®µ8ß}¬K&¬—-ôÖ®Qà˜ûÔ£!MD ÔP}QÊPBó87Õ¥¦§êBRƒ‹ØÃ}IŠPtö÷¿!A¨«‘¾øD(;@)Fû␠åª"7ß …^ã}òöò#1•½êãOÍ®©A`­æûF^nÛdH;†ó –Œ¾˜šC H:|¬÷¡L sTìœÈ´”±jA¬1UïUæÿ™^Ž|¯G]Š©~5<_qpOڊŸMþ&]Ñee4Ûu ?"à0@CFUÃê +áeûÚ ÚM¤ðɈðÂñ”erÛ¬éù4z\g·ËÎE\¨ªG:KeBFôþb,Iˆ™¤vVL%Êv2Ô d¾Fbf|ŒàaXb9“ui »’Yø¡ªóàC7ÐéE¦¤qx6>á=$IRßPrÅ>!‹|CbWç +ìPßZUïá‡Ñ;:fBiØõ  ¦7¦iX˜M4ô­zL`ŽRWFïȟÕJ&*¶0kÅy˜1³ä£N†}ì¬ìÙzUƒ‹XZùœ‹u6®ñæ»Ò§w*¥r¯ƒì8€w*o +¾õVšÍ æ¾ùª¦¦ò¾'¡¼N PÉ;rûÜ}ˆT Ê]•ɐ272v$äçƟw•»©»…ÜÙûÆ*ðªðƒswœ]å]ä/&ö±}„ZȰ‹7¶ë;²¬°ÚÌlbØÀŒ /[„ë^½²ëC­gxfB Â{®ÒõÄ!×?]³½hïQW«+ѽÕï'{º^ÂönŠù5|ˆ¾ðÜÃI6‰šCtًì=ô/¦åÚâšÔ›¿cï˯ÄzÜåÿ‚·ÍÞã›GYŽ˜ >„0}ÀÈ`HCnµÆõñ½xPÙuöæ'`Ñÿ¸Ê©Œ(d‚t@ !Y#ʈðÁ0Â#l9vgÛ 54q×ñ$ˆM†`ud $0̎¦18ŽŠüäóÇTÛÊøw×Gä W_Š »£ñaôÁ01˜<`Q‡„ÎÂùز˰0;bððÌ nð¥qØ,pQˆ¬}ëÛ,y¿ 6{ûpú#µ«ŒvD4N`K5–üBÜï.Ò\>T'êý»9Â-ïRèR±ú|j‚”?îÓº­å!òÈYý?øÿ2éŸ ÿùUPù- i?²ä «à«ÖW‡ŒÚûíx}@Ù# +?˯ùçšùÿ¿áðéÝâmÉø×ûÿŸYÍ?÷Ëý¥Óøº}υ§Òé^úïk9t´ÖÖÚ8öÂ?F^qú8ñ0ѰDÃFP͈O ò)‹oA±øŒAííg…¹ÜøUWª_¤46HèÒ Z笫ôٍ6c1?aUádÛr9 ²~šû;k:÷ jì=¶q¨ïî§JÚ!t  †0 —Dú].”¨r!ž¥¿½¿¼x…¶Ëb +.+b„—B~˜85{ÑÈq±L=Fþ¨>ßß²@ƒÑk_…Ch@ Ž Ðk£ªÑ-œÿVð"ŸZ Ðq8Hü á\óR… löÏ[P”Z¿ÊÃR„®×¢—T@ªä4u¿s‹Ì°Ñƒ\ò tÑpÇÏpæ +íŠl \bµVkD¼|õU˜€6׀´@^ £Áç£Z ô|g’wb+õª!Q"(êÅ>0>/‹U¢Áð-xiތ@,Øò9¹< M ³ l¾oE›ËÛ#Îzȧÿpü8é0‰n>]³€M`}ˆ@±d‚«Qp€7ϊ ‚(ªè#Ê·ˆlD|MQKŠ_EÀ¯ÏE góUÑ˙;WÀ A(¬m½Ò)å*…h"Õ}[Vêâ/ä[ôEYö‰ á€CŸEñ4Qí¸>tKtd}zò€ #ˆP~Õ ¿”z—µ#“ÇÐŽl‘]¾m|õ€@Ô3Ådå +gI]x€1r‚À¦¨€3;€.=kñi€$ڈJWR©ì@8šʯ–Á®«Qזp>Càß¿ÛP"eµ"€1̏ÉàµÌڄSVµíZ”("eý‚µÇà S(í‚ÇÅÒ\Ìs.Ý#ç‹mÞØºmHÛ¾m m3ï}FÙ«,uœ•œß+ț³h‡§ïK½ø,3¶ÒïeÞ쬫½à§¥Î6ðÛS¶ñÛN¶þóo-·êWý+ çýåYäÎWô»Í?ˆ»û¦çjµÍUÞk oaðoôwûYM™²1àe˜Ð•?&0ô«¬…NDö^C›ŸRà*[Ýì{C½É¯XÕ¨øó©#¤û|æ{-EÚsôtLÐäӁÛrê‡{Ç#žke”Y3ð’Zý4Ý=;g¸¸ÉK e~=;v¾ïHÓ38ô ˜¼Z^Iڗ’š¬ÌJ'q(Ý-ùt·A¬J%nˆ¤.¶üˆº¢‚ŠDÒ)H¢šEÅ/vDîìS¿»çZu}ق¹ëÂ=¡xŒz×;ã«áX0‘KÀو`¹ÍP ããßÓ/8/ÓQG3r–o…1˜¹ ŒI̤ƒcΆ:ͬÓ#Ž|£±ÌĄŒF5ˆÕ$ܨŠÆ tՄóä&,FœºÌ’Ý>1kD#dZçŸùØLXk_÷˜`ªÈƒYgÆ8¹ ¹}¥þFF©ñÓ!ñøÓŽnqÎΆ™³w<Œb“Ñ9à‰Ž¶½ñ‹U}y‰¯êó†)À+¨2=_ªbü"µæÂ6W(l4“¼Äòl3†*”aPbÌcTÆ‹æÜ±Ì% ‡nw^b‰c³†+ÉPd ÑÞ©y3—› ٝ(mÎy\´ e˜†\âpÌ+ „ ËpÍN«ï!}8fÎ'Ñ]4 v¬ ö8œ(î!8Àœ3§‡n¯ù!<Àœ;ƒ‰Áí³ß¸#q´zÂÿªÞÇza†¯L ×ð|"ãJ7µ¥B¥ì é#˜ˆ?€Bĝ9€ Õ¬†ŠU+ÛН) ËP8$Uû|éݖ4vC;AÜ´‚X ₸ÀnbùÖ³ÖÞ©·l‚¹˜Ž¿YßB²ð6õ_\T¦p—(Xh{š·À¡³`¸ÿ¥>܉ö ++o¨ì´ý$û?íO‹?‘·gîHŸ«H?$gáàmö/Bå s5=º}ö™Uÿ؟"a€¤¬ÿ%ÓO³"xô.}?ë~äħ×@U7Œý¿ã‘ê`ºÔåÁf7oêÒͲ6ÿ¾åÖÞî§`0j`YEÜ¢/m` ®ñ×F‘×+é«(¸ü5ºÆþ¨Wº"(è¶wËù Ø2¾È2ëo½|…òý‚ÂH¥ÐÑK á¢"¡aâ.‘@ZÖ +Ö-\ÀÉîÑëÈ¿ùÐ È÷ïßþ«¤ÿþ×Çþ“¢¢ÿëú/ÿUÒÿҟÿΟpÉç"Ïö/Ùú[Õv?¯ÌnÏÕ¤¨„rrÌ _㌂…_§ê?:æ„+2'Ë#ýCùíáÿ +Ȱÿê'ú‘ÿýÉòÅüd¨ù"ÿý©öq ò/óïÙþ@µ_Å+ýº}køÿ•`Y͟~ÏíÓìÿ¥>ȟ^TÿÍ#û{³¦ÿö‘ø;çÿäêý–aÈOXô$:×þg÷ÓÿÏòFü‰õÖñ’·‹üFc÷ґI>_äz‘‹˜ÄdŽoŒÇÊLc%&R*Fd‡~¹|š>Ì–öW%’’Êâ1¹ >ÄíhC†]u·$CWRa¦_°wûñp“-\;q`˜í3Zùƒ´Gº ÕZ‹5™:\~fB¤A,Ä8í(3'cÜg2ùª!"4ëö¤vã¯Ío·þ¾ûj×q×ûþ® ~k³)'Ç7ÆcQò:2Çbq’òRòò˜ìF6láނ¾3ŒÉJb`–=ßÅ"²Ônþ,rXJü[¿vt•ÒÃwúsã´LœÕ€¸Jø*uReeØà²€T:šÊ¶81)Ô§€€XjÔéŒP¢ D Š”C(”P¹<ª|j|\‰¾AC áwV†•oqóÆMÕ AßàÆé¿ù  XÅ[þ„m#ˆÄÊâû kyl”ÄÖO³s§Ô:£º·kÔI®0àd©ˆmÓ3 ƅ’hð¿'ß™KPò”ÄÛ'êýx©XZ*„%p€ÈŸ·â~Ê«X Éû“'îdŸ½Á?{²~êIûßõKƒ-^š:B'5'K™A„îc‘H¾%.p³Èƒö ‘|j\â7~ޓ¢87§)’‰Ê@Ü s^f9»¥šaP¥æç^‘þ¾ SüwzÓÉ2rsïM¹¦VN}ñ¾ñ«IÏÙ1i£²üîA‰Í…';S}1 Á$»’ìK°I.Á$»’ìKðÎ"âb”Â9¬ÁØ 3R3q_¢´Yû•læ,¼ Ë;ƒR²G¢ It<—?×ãœ*TÏ~äA«Ã„(‹œ …EÄB!.eûdÇ$^-83H»×«7öøòkoÙâÿá໏Åá1ß§(hÿr{ýJ ß©¶ ;Òh‚¶ÎV¾Øþ¬`ÑÅÐe’Œ˜cTß{°€Yÿ/Œ,êՈåÏfav@êH~È“Œ¨éÕþ¿£~d—ùŽ íÖèE½/%¶äp/ý8öë õAJZ¹Uùºkßø9‡¯\™Sì£hKìeF¸ç‹¯EŠ[ŽŠÎû¢¯ÈÝ#$f¼ÏÑ1ˆf-2d\ín L–Rˆ‰šÔÉRK¡lK0‰y?âCZc໒o‡Âã/ýìËr#­Uàf¸_Ÿ°B Þu뾈&•€gE Þ@,ÖÀ3Ý@Bp`zÐ Õ¬„º,Y±œ²ÈLÊřՌõë!>ÂśeŒìBY¬Xl 6°0˜ˆ˜Ø}Ô &®gÏ{ ÷`VWÀ³\¶å«#V³š[ Ú­YDµžÅl'˜µfék>RØKe«Á3ÁABbà–KA3s ßÁ,×Á3ô`¡8K#i“Ž”-܌³ ‚E\"àªš5iyü&0'5 úÐjNy±âß»æ˜êûãÉza‰­'?(bþµ'«Ó`ÁiI߯Aš“­1&wð©=X é¦æØ +’Ûü,O«A€šëRtGdnŒ$X\)&kT~Å'« aRTþÅ'«á†ê¤T•¸üÊOÖº3pXթѯԔÚÕoõ%Yú؞¦¶šzèÆE©Ø'êJ}lìk¬Û9¦Ïm/2=&£Z³òA?æR~8'‹]GIÑ?ëRVÿµI‚IîÎþ•'’/vuֲͪwvX²ÔŽ8*b=‘š†:=ÍÊቯýw×Hˆ@^.SÌÃJ*IzK+oY`SßMyñì. ÿ³î?£3mF¯ÚЈ­&p#…D¡K›P™Y¯ÌwW’˜©4uAÕ_>C—„oŒi¼ÇÈ2Ó¥œBâ®ôÉîýòÝ0C(»iƒÛî¨âPÜ&qӘ¦æµ=mÖÎ'j¹>Q‡U°›QÃCdçÒJûdæ5Ž ¨ÒOcXçJ Ò—·U+Î'(-T­™9.ÕJړ’ýT­¡90ÕJó Ê l,dÔëÌ1õҾس²så¯th G­•µS[+hš¶WK[+g›­•æ+­•ümT§¶‘‚Lv«©ãbfYÝw3ŒxèÝ}Ù*ý¯@þo pޒWˆ6Ú¤¸b»Íöw;Ä!¶Lþo õf4 c«0Ó&,­–’çªÇô5YÞ{¿gU;Í-fïKÄ>“J ph5\M±‡ºÒÙ[á˜IŽbþòuëŸ<Ì&wœ¿¼È½sVfj¿Q‰zçKle'Ct`z–ˆÇjìs%^™Er_µ•æý¥ÜÎnìÀ¥ß[z§!àˆê/ËX~ŸK^. Q»|µ†æréw͍Ú +Ç6&— e lþÐRÎóܼ5ß,÷|W~‘îæ+ïõEµx“NþþPµ¯ ã ßâ/º:[y^å ÚbÜq¹&cŒ.~¶†ø5!ã„öÚîgÙz„…û>µÝ\½O‚0³.[k&Yǎ~çªÆâý÷¿‚êңߺî ›ÇÛ¬IŽ£0V ;¹¶¼‡A®}CJEÜ»®Z±[ĝáZѽô; ƒÝäàÐå8Ž$„–ÄjÃí~5 9›Ãh¢¦7SqGéùÕ÷ƒC@ŸOZ¤këX¢Uˆ{ß~úD”ºÛ™™›»¦è  +Šˆ–ª«’‚¨À±2“U.ÈèŒ+ueîîºúí3êªÂÕPÌï=uÝÝÞït÷ÕU÷žª÷j¬À¾áÝ4A—™ºá[¤[øqA¦´]ßÿöf‹ÝÝùï~‡ßŸ¿÷øcõ½¬’Hä±ËÇ«áV³-éA•ì’ZŒB4°éÅ5\ü5}òÿ߈×kä¸uòAèŽrÊÎ_‡Ç—^_##` ì¸òü?–\5å#½,8„+W߆"1ÌÝÓÓTQJlÛkCT>Ù­‚ÓÁ÷óXë|Uô¶ÖÆR±Â½h ÖâëõôKM-åéդٹ ƒ®Ô!˜7¤û«‘ŽpŸM‚xò}3ߕ“™²ÇŒ©-ôåBÈo—„£Äh¤ >³q(ñÛñŸ®¤ÇÆg)Ǻäcª„¤’Ž­Åü­6¿U&%~(\ækª¦„VZp¿pÍdá©Î¿œd´ãVyXíFUµ.V.ü¥-¬°æÃ5›q93zç¤áX!??a-5¾ó3ë5%›ÖWŒô?ør¼r4¤fáÂ1¡èœNU™Âݞ¤Åۑ4èù‹øôïK®« IwT=ÎÚñ—ò¤OkÓ_ʒ"%^ŽÈ5}Ò͏*¯@ØßŽƒ òx¥½îSÅ;i™æ€ÌŽf~~Éë m‰Ϋ>³€¤:²DíÇdõ¢ë%Ý­¥m"¦kì ³ q—šóTsTávkn|8Mj‘_"tgƒ©HÊ¿)1ǖ£ÚïH‰AˆšløK²zv3úü懪ewiÎK K(Hâmcv܀J2ahYN Þg”ÂBÊLx´9çs´¬h·/'hà6×5ëÀÒÿ¹ bۖ†Æz ùÂpT‘Ã'†?E§Ù£¹²ý¹SèI™¼ZÍÈj؞ÖU.¢Þ#]Œ–'íÏÆí'Ú²ª<IÁ_?ز‡v¹mËë(Æ¡¸Á± gwYÒp¶|Ÿ8ڂ_yÓÿÀ$l凹a’îçÀüó²VK<¾yà6ÏFo]O­'‹'ŒßÉϒEì1˜Ì¸ÜYàéç]GüŒèkÈÁÚçc;‹Éá`×âþ“Ñ•Ÿ$ò%ó!14l»™9’ ÕIäœ÷WàÛÝPÙÝaÌÔ¢*· ¾`餥[ôë[ƒÖU+kíÂóê×X˜IÔÒóӣ8IIǖ–H8Eó8`â9c-añ(Ç8´ÌÔó’"=œâS)ÞDFH<ÍÜqêiòs¦¢vÖ1Ñ!mþkÍâä:ÝZùË‘NBGGïK#;’-#ßxaÈ3ÍO^ôÀèè’r:ÒR‰¸Ø0Œ¾½â_L85ÈÈãjŸGJ¿tù CÕÐÔÂ3+†¶7E?“eÍ,æeä¹£3¬¨Å³ UTæpKûzÊpÄ3ðmy¨êˆáî\¦@‰‰Õö…€ï„ +ÇÔ;¥ø™ˆM#ƒÜн–$”\ާËîø(0‘ey„&é6ßé©yVöAµ´mCA¶:%­½å粧ȆÁ‡&†ÅÈØ?›†Ìg€Ì0þUŒƒïœ³XpoƇ\|h n¿•¢Aèe“»ˆ¥ÀæärÁ-3OL¥ÏÄX|z=uSø¡ˆ“ãót‘™^ÌQeyyЩŽK…Üu†qqñòAþt>hápŽm활ƒÈSz·Œ#¿ AÎ+sþP†qKpüٔLSå] ­²ü’Q8çªq ,ÈHÎ%¡oYkàßE§=OÉ|õcȎ¬Cp›sé]U!ÄUœŽ¿¡¶´ „ñ¯/³]`û{*ó*{úŒÍuVWÍ«Td‡û³¢,Š*ÛÌÚޜ)bÐój‘ûãJøëê ++£ó‹Ð®Lq„”±ÐídFQ’)i›|ÓÐáÙµDÍ¿Öî[51r°ª¨lÞ%˜Á³8e‘lr.I·nKJ`Ÿwä—.=Ý:œõlØT"׿q¶ñbÔ­”$ÒÕãïˢׄš`”ªÆ‡îìY/~…xÕKì•ZùŒš +ÁÈ|TdP«>/ÜsV;Wx×xPnta5£\ ¬|‡ñì'y\¾fø™‡©“$½fX3y¥3!âfWü7ŽÀ9å(8‰xö ˜çIÂõ c ¸(‘Xb2aI zÈ çë%D0ƒýü³Q©ÃQ°e¼c:?Ÿ7®g‡a"¸à\!þ]:l9µê„îb2ÏæÌ13RH:Xf¿°ÇŠ OØ8áŠwwèÉ.חòbš±Ëv’¿t<ÇQ©³ÍFd5¹º‘[ º™Op‹ˆØÈ¯C0zö7Q¼°à”˜w¿ñ^;Jé,…0mqCÊÏë«$#Th\ÌM$'uÃÎËöª& ҃=‹JŸFºT׉ô6–ýÝ@Ñb¶çÓ§{]c^Ní-î›\©ÇBË*.[¡—Ÿånà"kî1oåI%܌‡ ýZÆlfŽ…\"¥3eþœÛ.m¶m§;6×§›ŽýyȪ[Y}™  œ…„·þòû¶¶Ô˜òÊKð¯YùtE2û´ÄU 5/°â¤äË÷KzšM÷´k4ÞÀÝp; ?4ŒÀЏ̭‰ιAv³,…8q{(U'¿Ë<­¢I’ý9p”‹Šz™àÉåç`@v÷I¿î麾’O~8«Hj {¿*$ +êL|j;fí#É8`€67Œ¯|Y±mF˜¼ ûşÝkͬ qõæ© ÿ~H˜$²õ3UŽNw … +Iv × +âp˜Dx‹5' dáìŸ Dfþ.f—*B=IÔú‰X?¦¿{¿wQo^>[w5Vñ,ÙêK©‹šw´ŠCÔDàöè+&ÝØ˜Võ–Þèõ4ì•ÂOFsFòŸ…ö9/3Uݒsž&E4d•ƒ Rtü(nB§´–†Ä.2Ѭ^¥Ø[h1…÷¿$º«ˆ€‚¶a»Ì1©G,·•:¾-u,ÝN˜Nr užõ¨p{ÿ3Al…[¥5'\4 y»ke]NÍ@YòØ­˜z³ž]€þ´ÛíYf‡Q5ÙbKëï%'\oÙÃèÖޅô^Ü9ü³þ‡5SŠ$ÈJZ#Õז±õd× å0zëý«‹uß]DVæ<µÌOÒEF+ŽÇî gµ—«x·1ùKÃ#|ÅPÐÖðª%c:/ŽŠç`òśú2: ¤†óXóˆ(×ÀYþÎòRã=Iä¡éºÈGßãڑ±”¬fzr9:Òrð±¹N_ãÊäü{éJ2‘òdZpüg–í^ø|z7 }igõ>ÂÕ¥L EW®úÛBä‰õç_¯1Ҟ$’¯Y§×f„ÙDŽ×µ}j}Œ˜˜ÛG×Iß^C}GbÛüsްEQ•×÷–ú-^º¾ñšÂBwl1OðÊ!ËXŸâŽ©;³Qh!o”{>¶ˆ¦O\íŸ[ç˜QÏY‘sá5¢i²bÉÍxõý3¢xå1d"ñxùZ`qdû/PdÖ'‘“+Ú ³ëcWÔË^šú¢`ò64Ž÷¦S,AI.*|ùdöj3>Ë,¸ª—±Õ®‹GB4´oR=7HF²Š#µg¶ hȕ Ó[a‹¾ÊÎÀEØg±é3ÝѤÍmFí4{ÀÊC?hÃÈ>²P:Ò¨R‡Ûš,hTóÚ%6ÔP¯3K—X¡â¡S³Þ c‘3xvÆï ÂZÌKԎ7]•Cmf–3˜#Ö°_S6âä{ÂÆˆ‚¢Åeq˜u:en3Åþ|óْϤ¼ ÒÛ¬›š)ëjú¼nµÍ,÷ÇOo€õ¨Ÿ™Q ­öU)‡S 5AEI©ðu„§ÜÇ=ðþÂQ»Ú@‘ÇVf”¡ê¢a¾Ò˃žqsº9t•± ç’úçþ9þrÒêóÇ„SÙGM(v>Å:aâ7©qÀç°{.¬s°ý‹ÕP¢”ÙåȕV#Üx ZÅó¿Èà’)üœ>‘¸_Ú§´5 ¤›ÝqÀsöïx”£pS(6pež§†Èõ? 9èª{ÓaG99Äå=-‹R§¢C"[[­yöÔÐaU=2zjW“¼Rĝ½µ¸Vb^aTá 9߆µ˜)6»æa¸nM‰@.Å_¢@^¦Uí"—aYïvD%;8/eóm¨Ò»G5AÏFuÙ}øŠ5-¹WA_:ñK ÷dè-núðìÆ¤Ïí‹ýžª–éÞz[8Ïè¹YÈä¶Aò3qé÷%©Í$:zs¥¡d促Ž{„ôé¯ê÷$G“4,³›넾I7[ƒ½%É'ÐM©8”³&<ì¨M˜Î+nî˜/f³®Û”Œï®D•Zف:XȂ ”“—3YײKÕÞæõÏ®Qì{î±t6iY=þäØxr•ÀRep…”±~öEùÿU¾ôjÚ©ôgÊma¥[B·‡¹”E©9$‰ÈÔ#ò‰IF\˜ÚáH!ø2«gƛvo­\XԻے{©°ÅÉYŽÕ.n‹Àu6fÞN°××W1„ëóÌ~ìËø¡ér;§óä„Y94¾Áɖ…1ëb[3.áOÉ#"^ëY¹«"함‘WfÙ_(îF›Ä¯¤ÉL5Ž8BÔ¢Nð©'JM÷Ãfà҂é%ô¼’†Ïpriißi|#ŠGH2oYy'YŸ ‡*[ؕF@€|þ]„ÓDñ#,NO£Ë Y'²#­lìömÍòþ÷0§âõýèZÏYãî¡Êõ~OxnôµmN‰i=ÊÔS©‹=Î?Øæù{˜ð;­&:ƒú=obR}xÎngkú¨+GÔ·ãÏsãÞµ¸æuý닎¿»=ºÊêCCä’}hw‰ Zzz[Ï,´fm4»³œp9Ðá&@Ç^úN­=.­2?’Ù¾+‚ÎÂ6 ñfGGsåîapãËá\)E#³‘¢”E· +ãÕ¢s³7…që« ÖÄ9WuÃvq&¢&s§³âíj‰ Ž(šm1ÊáQ3ݐ`yßeSmû´ώpLIEÞ£™îƒ¯Úðuïû;R|{[c|ׄsëW¾ ½§µ±9nä>¬P9«¨z‰$Ñ2âöE|Žðk¦6§[3Ûä«f~ÏZŒÝêxº´z#±t,±t,ñt-9ú ] Ž.…Ç?BçG¢’Ñè¤ôz)O#Eb±Íg yÍRðø6¦¿‹ëbpx¦¿£¿Ó?îì`y‹º®(ÚHO@Jh¹Mhò]«ù@Ì9D½M“Íz›‡‡ žRO ýJ {(SüíávTÌÃv^ &…%‚ž,Ò8‰âѽê,XÆh䷍l¾†A¶,=2ßZµ‡ Ê_X¨zkd¸w쬾FZڀ²*¯`% +_Ô)}.Òõ¶ó»²“fñl+~±*µ¡¹+`;ø˾yý•®E«È–´{ ØèÈ¢"뙁¥Ù}öv1ÅRðûÿVÀ|[ƒ9Ý:œ××­RiNl‰u>ƒÔkTå0>™xm¼8F¥Í¸Àfä§vÎÞï—uƒ“3æ·£’²}jʦóþaR‰è¬|>%1ÂQ‘Šü%…Í% °=×í{á߬>aýL/ŠW| )ج¬b%©f)ÇfPºuÄÚ9UžoÎFT‘D¥¥þšÄÒ½ûûÎÄKOÁK¨L…ÔÍ]+«:÷ RäR,EKK϶%¤nI—J4m]ÚoæReìmމÅW÷NRéü®•VóÝR:éÕ?’@ýÓ•7ŸP•QÁàH¸}þÅ|M÷ÍBÿ°OfÎÈÓé]iΕÚ´‘¶™ÛóÓ½î÷0¹ ¿˜ò øöu©$µ–•žç?-ö—ltŠ,ߘôÁ/ ¼Ï‰¦ûnÆ-c×N8 4d–2_éb?ª^¢1ƑŽeÛc‰?þfÑù¡áäÓèJ)‹ô˦¶ö>i·=µèXeΑŠ +ŒẔض_3IW¾#°dzºRNúؓ¾$éՅïn‡:k±dQ¿UDB²Ž”¤£¼†AMå["@}ÖéÄ5&v3 `ùî¼¢–Ü3o÷\ù£hÁùM¯$~I[äA\Œ©OÊ^-kDãfފI—îÝ(uûÊ:KΕüô ðÿœ›ñý-® Ir"Ãæáږa# á÷ü"¤ë‹Z>ñöS‘rtÒnœ€›ªãºÉÈ×ÄávˆUÙ'ˆá/!9ÁÆv’ŠõÊÔ¶Ìþéß)¾»“§y4YÔqÝ¥sq Áˆ¸žå-œ_‰#‰Å8*íù¢Å5µgµ:X@Ã"P\aˆ£ÛˆFÞBjcƒœ²–g4ÌiG~zXå.,¸=Ñ!Xÿ‚‚Þë,Ê8ˆAºÉÃ@F°E 4¨?ÇÆ¯ŽZõê½ü²è/¼…± ¼ Ê2Ç"HJ$`°—Ùbë7¬ÐÙL8øÖ׌Šö ÔhDZ_d42áÿ¬?YN0>À pûå>"Û(Յü<ŽíÊ9IÜ2\3ò¢Zy+ÅSös“KäÓ!'uÎÛ24ÁxaóäÂÓ%e4(±àía8ÐM¶yíCvÜ"Dبg­§gÂ8 ÝaÌ£ú×*®)×÷)=º­ƒJ¹˜@ü§²AI7(¨WÔHïÊø‹XíùsÑk½„%9ãmÉ)ït¤*$öƒ}ú#ƒ ³Üʗ!%~9#—±ëúZOuE‚z:œL´Û×5H/q`½*¡µ1fž*jB#O‹jÌèf[:À‹™¥u¤ ãOÚøLêQ—=Myx0JM&co,±¡´éÎsh9l -´]§¥]BÐ'²9céüé«Çª ‰a°WßËR§ÑL2eT½‘Sž§!;¿I{:ž–ÏX?\¶é‹wf/j5¬ÃŊ÷ÊR>"h²ý58ÃgÇ®¢ ßu¨8l÷UJ?mKßtA»Pì*چæM +7hÄɉ ¾û¢SÛ[9Àü©M!q}žMiAÉóâ#ñH0”ʱ³ m6«ÃÁ*lª)ÕåíïƒÛfS[.ñÅlHç(ùç¾ÎìýÉ~ß Ñ¤Ìý¼ÄªÏOÏ8y(<#’¥'#!äÚ¢É9ðôí GIJ§"Tæ×Éô\@è˜~×ÉiRŽ^ª=Éï´³Mü‡¹aTM#*î”%zѵ_Xý¶­Kĉ!ö×ތZ¥10–'Éê"ÊÍ9­‚ö“P_َaÕâæQ´þÄj]:SÇ:PçJj t§ Ò8¼FQ²Fê€âE^öA)tHÏâsȦ’$¼ô»¶¨÷O®™Àº3ƒ,0nB™zäc˜³ù‡&–Dg+?Â}ÝI )b&õר2pbI¢um©NC͋ڡ©ðI(1rlj—©¦‘Ðxnð¶ŒØ,UÎ^Xx®Ü¡šƒPúÔàõ%ªÝ)ø[Àê³"­©°]±Êr}HÂÝáMCǖ«ª#:цuž3mt»Lçü4ÄWdž‚Z¯ûµnBw«1†u´㱘[¸ÍÔd˜g”Ìg *FB¬6Ñ5+°˜ÏçÁüï­eÂÓ!ÖIˆVõuùÜLí"îŠùȐ¡êШЉÓe©ðcVïƒÈyÙõƒ€‘ÃÀ£L¯nŽh®ü³Šü#ùHA,ª?h²šü%”bŔXú{yDXäq^ QýCk"¦9”Q}%Ð2è>Òè? +è6Ë óAYtÊè#×&QE*Á‹>` êAÖ®ƒÅ£'ÜÒ|ÏJvúÁüoÂlû–öûù¯S<ç9äÆüz‡K—”)í-¼Äו—Öi¹›(©‚ ÿÕ1l2úÊ8È%šqÌ£œ¯Ó“ÃØ×ìâWú=Žú=–¢VâÏQ½úÖpz»+¨Êí¡"môÙjú1§gµô˜•õx\)ê3ètB\63­ÅöèÒúï»§|uu& s”5}ÃëgD §O LÁº5Z¼JIi€‘u½(A¿e[kÔ£=Ç_ôzBBðzêÕáG‘$KO¡Ý§iDŸbˆO©ßOb-\ +þ´*u,ˆàU¢ÃØí9•j1(lғV£ +‡š“sû¯$“‰¯ôb-°}jζ'·F÷’»“Ы³‰bqGªs­$+IˆÁj³èI摻•V“g©{äA1iwÖÒwœ€þ}ï/Ãòd·¥ ëâ )(ÖC;"2ÃÓ@»§Wžú’FÕn’Ò9ìx|GVF•¼qj]ŸIhË2‹‹GÍ£§¨ <£ÙÎn˜õtA°ˆ1en.ÛL–Ç+aÔF¸Å}à×ê¨Y©>í1K–zÙ‡«çʎd°Ó‡íÑ·Š·v¤%yáïEzÉ>Ikg•Å ùՌ¬½º5¤ÕÁãîV¶.ˆƒ?"·q‚EO[²¬D[M¨Š“R,ªª°–7`Ó JhñÂú‡§¨Ê÷炏sc4Tã /¯Îu¶Ó™w‚ŽMÒ¹ýÆt±;Q FW–ƤF«‚ÄiÝR È¿ b@´6{<Òç!ëšR%ëÝVޒA+2­„¼‚\`Ý÷«ý}B£³sSIyüIªàŒ(>Ò èߛÛjÈŵÆkF(¿ª±%ˆé¹Wš44¥H¦RÜ2%§Ýpè@©~óòýÔïzÐ:û„(dÍ{Ž  Ç&ëç`ƒ·¾å„6¦º…™;¨ É{è¤ön7ƒú$ŽÞSӏSÂ,K¡ +Â×=ÏÔâ‡ÉÕ†öÀwíH!gä÷W¼$G/ ws°=²¡D>镎Ê ˆÔfÍY°È[tNP«_*õ¦¢”Ú ە@ì) x²/oRWøÍà#Ú-$ªÙ{gIþRû)HI*UTN*ûCüŖ'$«/¼aô CÑÜ¥õ±Hüƒß ÊJ¥œô:#vyª&ˆå¢ZÑ3ÙÍð #ðÉðøc¸‡Û<3‘oÕ<6¨Ö%«%:—iâ¦Avy% ÀpZD ß6¥"A|d;»€#´?ØO"„i¾m®|7R1êñq²f ý‘‚pñ +Á»Á½vƨþ<"¹¸çõÌ~; 6‚Oî.¶¨õûó†ø È@k„¡gMËAâR¨YL #ÎSqéfG‹#;é Éw(ê›nlºÍ0È7ö”éO¹!úŒüéO>I?¤Ë|JkåûÔñ%^´OgheÂÃsYâHô-âMI!úŸmrÙ0¼YìˆCÁíJ f Ù} »á6‹Ü ˜`¤ŠäBÓF5ƒóÓÄnîÔ{÷!ûÈd%¥‰÷‘ÝâÉIä²rëŦJ-¦Î@4‘éÓ&E¢Ú m—¡IDÓi*5Ü¥!d•#!M²ü4› cÔ;G¡Oi¡ÝœêÒ]^½PÜ;Ñl^´¢ü[EÜì*`ŽˆœCµÐ’‡ÀÝM˜þ†³Í ðpUcWìÃîÈ óbG¿š!%AOëU ÷e)³5>>¢ŸtI/Óp~C_¹QðÉ(˜}ZÓ¿’ ¹ +ä ~ä2$û-?äXzŽ*·L[oÚ4^]Që“Ü„(äu˜(d Ãʽ¹“q£V̲Ó=í}·&]8c£{éÄh賸LyóIYN–«µe‰åEót +ó#ë§vÓ|Ÿ)k½}ÍÉÄ÷Ç`q¸ +fç‡ýn Äþ_®IÛæ¢•u&JfŒ]R£E¯¯¼îE‰Y²K_¬Vçš”Š¬/ˆ¯7ÃW˜ ©„d§à`XãEƒTù]LØÝ_3Õ¢¤E‹€EH +q›°6[NŒôH4¬®ï»Ý)"|Zëg•Íu{3ÚÄ{'¿6ù¥y±µ'ï”)bë婅Œã¶±¶W›æ÷ù©è¶]]MCµo‡n”°ý%«®ûúP‘Kà0É>ê6W©_ª)}LÆv-„ JöNR«êهŠE•P}šž]Õ}!žÆØåmêaݟ¹˜ÓrøšòÍëWú'Tkiˆõ'i-þU!=1KjDêÆa@QýÛΙ¾‰ž_F»aWTR._[5"5:¤fٗT´%õ4Ë úЎ 7ý–F\ÈAúû+¾-¦Šûñhˆø±ž÷¹Ù²åwõkr=HMÛ+êJݱ˜è`¤™Aü +V%÷±@E_ŽÃ^µoJ)JZCu¶$³aâ©Ëx¦‡ltO’s枆m›°ìa«rðJøÜ¡è<ÒiðÅy«d@ìNð‚žêÓ+O²uyºâp^r5—np0n:Jí]œª, ßᏖ¾w†Á#­Îߚemù° ¬j¤i?^¶ïxŸ(¨†4ÑMvã'ã\ë/[æ}´kú(ö !@¼3uæ1±àü£h=²„=é¯ÿûÊX±j,·þY3«„í +PèâÖcÃ{%[‡×²t‘[†S'¬h0pˆn˜ìðGþ^¨§èdKJO¬ŸéDs|lŸèK;ÛRÎlw§µ«{‘ý挩ï¼c-}á[§Þ;[GO¼6¥ŽµVÃõ‡-tYÆ»6¾Íé±né€Öw,ˆêÉ(Ý@7¹èÍ‹ô/îH‰pô#ƒål…”UZvÕRª÷ÿʪ˜ƒïlÅÁX~ƬDÈù·¡Ç8=6oÊ èàôc˜¸>ÇýÓڇŠÌ‚>“Ž +¸ç€Þ9xÀ_¾’_ϊ‹÷ÑÂàW¼K²ò|+E|E ÁP¹ = +؂­I˜ˆéis +±"´%·yd™¬ÓkϘɝ¿ÓWyÅbñ© +‡t¬tf¼ +GʍYrñ¢åœX¾~²<§$C~×zÔ=FÁüZnÚ¤:¶\§Ì"t¨ð{­;‚Ÿåi +5&‰º¯; g1,ô…NYó™¬dK0ö9‰ôb'ˆ:45È,0¹µ#x8Ÿ`½þÁ&܌sì-ƒV$Sê°¨¥B¥¨š,«©…N{ŽÁ…A½Ž¬e‹büUCӗϏSÈŕ-ý^òüSE‡1eZœn‰ÕzºSAΎ^ÇÑ m\Î=¢¸zÛòºþÛëV^Û¡*bZê +aW3 +¢žœ:Ï=!E²óÙÑy»C'yýíåú¼zª¸×–ˆXlx'Ë\nR±º+T8#ëºPzfãuË¡äGF¼Áº5Ü÷@‚íß&¶µO!>¿7­n¿Z6¹`ndü1§cÂhVþE}h&·)oª­ëh—3ˆ¦¦, +°ÜÜÚ³,¨ëVf•j͑M­Y´*DvJ ÄÊçJÇCdïÖď/¥²X¡4ÒIò復'Ë.–›ƒ.éúb‡Ð" +—] 6Þ҆Í[w½;ÀyÒÙ Ó L“üì@Õ5àٛÔ×­.§ûZ¡ÏêŽ?ÚÂÕ/Î×V¾uNÿŵ”éª\Ø`“• ì +-™7“åÊÎ òZÑÔ»ÂÖ8QˆÌš&)ÑÚÇÅ@#>ÆÑn/›ôMmüú¬3£ØÌ+f&=ßšoS{Áêo`0QÁ‘ÈôîlUßåÀº3zp41Ž“ö2 e¢Î‰˜°ENÆzÆì_Íò-ø|G°àßÍ,sºyîƒñÑ2¼[Ê¿]Î1IsŠ1I:H¤~fôÀø ±¢(?¤Eæ)ÿXU;³.þ¦ÿ¬“Uú$ö©DÝ!VÁàáJ½7ñ`¿JìD`…wëÄî"Ì«r»çaT‡¨<ô0®º_öÃv¾˜¢6P*㳏Lmy‡^¹ƒd¹/šš%àóY/š´X§hàØ‰„#kf$(߈?څH`ÿྴõ)-·}íKÿº!®á4¿Ç^Üò1Ö ì­trÊ&CÞ0¢F’Ñ¢.­;ïh”lÉE;׀>¹7°®ÔɎ™?™ñƒù›O?˜áÐ^x‰Ç€ihfÒåuÃX+.AêÂZ¦Ö* ¿1Æ4ðPÉðƸ6±Á*uDþÊ¡]ªÍú2ˆhڏ’lb14aç(ÖnüjÍ~Éɛ’âÕ@÷w‚§Ë Ã9 Vv_Z¹‡ŠÎꫲu‡w£Ë[sm.ÖXbL(Ëêeÿû|”–ô6RT ŠªJë®ÌÈ=_ãùªÂ§»mfÇgé”,ïA¶ÈSVmÍ @Ìø{Yƒóoƒ@¯¬.ÒéA¦ZQò¡ˆkoº™wsÉò­Rv-Íü¾C‘UÏ §9 +5=˟£åøÄaÒaâ„`ò€˜eÕ;"DÛæß“Þ(®{óÒÒÉ?2–IñÔ²WèO˜.wS»+på”ýõ>œA3›æ²tÎéo5‘KƒAî/×RÉ_2RlˆsßJWõ˜ÁœŽÉφÍ/ÉǙpü¶Ã#%}D}ñÉåg:˜g,Y¡Âý'ôG¿9Ø*ûKßn!Ÿaøxqç“Em|(lG+“­Q~åÂÁjŠ6²üçŸ!Î + RþpUF´2¢Î¿þô÷é†$ç *uÒy2ÎË ;€À³·Nx2П!'Cû¼€õÜÈã…‡f౿*ǖº ×Á”fØ|{3•Ð^Ӄg)×…eÊ +šáÌ8¡8b§|Û0d-Ëõf;i@NHÏâ?!TXÛ}D2ŽîbœÒ.Y\CHKý+m$ü*÷ëƒL÷×_Â'\FA£† è"‚¼\¬-Ԝ ~”Xî+|x»Êñ8xI`øK*ôÌ +–ÝO=Úaž­o=•|-!f niðŽë•xÞW•Ô#Ýô ZuϦ°B®ð3íF¤„o yª|–²áŽ^Žb%eŸ È·V¤ O×úé1P˜|[;á«HöÑ;+ÏÔìê ™Ôü5¹ +…îFe‚4Ô> VùJlJÅ5„ô¡{a¬˜…JÜ]é­â…ìÞ.Hûcyfrð铏Ø­ö.è¼\I­àŪ5ºåyâÃÌYsGávdúªså%叡“ÈÑ.ñyzyƒ’§MzN‚ÀÂ6 ¥ £‰ƒû: `Œ6¼Øq¨ÎV‚„r4¤žZ«ãJjâ¬Ùvþ 1`p¾³üËþa¶0BäšÏ-ïX9fÍ Ä+œÇ‘â³Èҋr`Ò˅²6\S@Œt«aG!¢÷T”Ÿ¤&ʔ€'îÀË×s&n˃ö‹Ze†\‰ÌÐӝáŒÅÙï†>zqéÓ  N IxÑ ý —Mpøs"bl½âg 0mÙ&[+à&𝍊D˜DrÓeòtB†2 ¤(WI‹emy†Jèlž•0i*ða™¥‚º,^ÛárË#Ý./Œ aùQ°vÌa‹ RZ|¼üL€Ã0Œ;ã2ì*á:7zR0ᯟ°3ᘶƒj‹÷ÂpPbçŽà͘føG™¢Ý†<´ßáŠCæ,lßE»d-±‚ˆz¢áô!E2`{ž .ÝX L1`õÒè„àáç‡ +àá­è;]¬: nv|0tʾ¨ ]› …êéœR¾'¯„›)ACcæoJ VŒ¹01IáEdÖ¬CX–±MqMq{±­{±Íqí{F½«^Ý®E® È٘Sòw4=ŸšÇyõ‚w$Ô80žá–O†)Kñ~’ˆä{2åɵLèÝ\»dàÂ5Ve‹€ý™ +!XÚ А­ø#FKHX± +(H¾&Õ³«õ¿ŸX*+A¢¸#ªWy®Þ˜…쌈NY$PKYÈøðᒯT•]ÏN%š.!·§!{Ø8‚ˆ¿›©#íW,ô­ErC…½¤Jó­©NXІrsh±ÎÈ4¨cÑ'\œ¦èácß˓a@wQ:˜)CåÇÏqP¿1Ã$œçÆàœU˸×!øøZ/rý¾ou ©\ªÑ(_šý¾N|¡ôðÃéŽ#CfaÃWÒÍâÃ9l,d쏕Ïý_Œ!K y*S©ƒÚj)×Ó寳 Söqυ=fs“±yzz™pù]ñLEuÙQåèÜó§‡á¸1p»u·û@ìÝ`öU¯Ç +Êׯ9OˆöÕð!ÅUíа,KÀÂÅü1‚Ñd‚Gًαö"ò¬T‡î¶9¿~¦âÔÃq50õú˜Ž~¦%ö§v©øµŸcsEš.èuڑ|¶‹MÜû´–"€Âçd¡²tS²P¤3rlÑbï/ÀM:´D»wß)DÏÃ*w1×âþ×èñ…W~N´¢FB0©|ù—èò…Ü¿'r} Šv0J/\y|`´—òçt„B9%ªÚNj¶Ìus±:¿Íßêÿ?±«ÚØj¿OÍ«~6]ªËr¢ó9M D7@/k€“½c»šGàk•¯žxO~Ðç;à̇Ó%)æÎÃJØ;ti„5¡Ž 7À%\}ò7õVí&¡q +Bœ5 ¨Q¤Síä,ê^·‚ÌãW²1-ûIdÌþçªY3>iáÇ +uOÎÜ21ƒWè{Œ;?ˆX‚‘þ˜”8SÿɇÁÔäò9,’=ÓÈc8Z'hóEñøÎŹ撱n¬±ìM–ÿŽ›îÔ=ml< ©@À°°ï¬IeHþ€õXly?5ޜw'д‡˜> ±ÚŽ9 èJˆÿÖ|݅óøÂ¡ÊG¿øòsÔÏÅ^ô4Y` q;Ãfqºhc|5MvPÁo]Ä©À²rBÃØBð·¢yñmétI>jÇøI¡4<ñ3²=è­? ´ô‰ö"óiÐþ‚ÇÙ„_ê狼¤"²hãݏÖžÖùõ[`>û-`±õáFû2V†àùï$ú \Öo¸>z‚I¬ôûýÉ)*;]È8(Ðk”Aî— öZ¶É%TM½ u<•õ§ •äŸ<,SÀÛÞéálžËó4|pÈÀ/ «‚ ˆN„Z¾Èh;"X!¨× D†ƒ4Ôâ$^¹a!gU^ä¾ôRT)­UüŠÌyåë<÷è^²lp½ÛçbƒúÆ+ü-þmš1ñ0bñy²í<—0a ­Ê•Ƥû”m¼[B‘äo7ÐÒÈÁ]]Tp’š‰‡í áÙiÔÑËÐòu‚‡®»v)‹'dðØÀð×yû;£²|=æà_ØÆßÚ p’Ä;´$°)?»Ãì ‘ V¹îHìËdverF…D¬,¸ >è67Æ-©Ty6ãá}´ÂDȍ#u Þ”/ís£oåh%¶G•½8UW’ú6þ¿{öÞ¾?UêÎ1<¨µäHûãHþL¸ X¹×BлµvZ'þÈ»ë¯i¾5ÞȲ×^Ò°ú…2/'V—lâ^Óa»Jf¡Ã6wÓÖßërºéù!¾Þ" [Xßi`@Sˆù_„ÓÆ)\ªÇ@Íÿ­ÂÖè݌1 æ˜à ÁÞ1øÏÐ6ŽM`»Â›vЅÂº‚¾m”ÿ€5^* Q¼¶Å@¯Q-+m¤ÄA'ìb×s£ ½BY)ºQÅ5bþGšãΟ ýn13ë€1YOœŽá§Ø1÷LøgЖ1~Ý0#,c ü¶ÆO°͈LñSنú–`’´(òQ„lp˜÷Ä&©.wL1¾kág{ô#y^‰1FŒùTQ÷ܶÆÚmwš3÷¾ó|íwZ庁rܕƒr˜ë[í¡+ü¨ºß=Ãmn¬j0lA5žîžd™äŠÒ—¦/N_”_–^ ³Ëó óKó‹Ô—ª/V^°¿<½izâõå´/Â/Ç/,^|¹rà‹‹/ZÂñ%Å \Aq Yñ"á@„jÙ,‘² 2™H)¶[,Ñ£H^÷½ˆï»ìNo7Îçóùÿ Â𡚵‰””Šñ|\\´´¼¼¿ãøú].—M¦Óiôú+Êò¼¿/ËÔj5ž™æyžo›æùÞw©ÔêuZ­>¯W«Ök5žŸçëuºÝv»]¯×ëߕªl\£s8 ƹ;³r³»r·:æ êr»•1†í¦pþç¢Ê£[ Øk";½TO/Xþ†)·üZ#^ Z#\ ܄~CÈ0p¤92ª¼oªHJô#…C7 ïG +FÏ+Œó¹ÚãM9LmÛ^{QArÃ@sÃ@rϓœ¼e1”ƒò…™GÜ ñð²õ(ð•³1”}{ˆº[^xæð´¼8pºƒq¯LÚã¯?D|ðáŽòpõ®eI‰™%L° ÂäYµ¹ Ì[Ù¸D¹³”ѪNÇÚY”5ë!ƒã?Œhm ^gÕãíù”>^¿}ž*ãÞJön˜¢èyÚíòåŒ$WAº¥¤êr*X½u¬v~!qÛ ³j°¢I ‹ÁL¹[9]k9Nq,Ƽ6;8ÒØ,¢ÐÐùê ˆÔ.Çö|ÜŸÈôB»Ò¦êg@ ï7°ZšÁýEU…irs!¹ðVŽÌŸ;r>¶R¥_)cF2¥b¨´iOžNbÀ()3µ#ïñ‹lQô ¬Xâ È¡ñaÖ¬ G”¹’åÃ`lwƒA«e.Š>zB‹r-²ÇÉ9Aw¡G·ùìô¾ˆj¿7èw!Rtð´Ë’Â:î‡ÑþGÿ–ÃèÚ|Ðx1•ލÚ7e¤ìYE¥ÌEí¤¢Ú…„;àÐÁy:9oÏ%²Ë-Μç*) +¶Øiò®i³#uVW4Á–“—)3Ïu/Qà~؎AŠïäA壕‚ȆO,VsÎRM4w.—Z|XŸé„1b÷î •„v†c:t<À²"5N̪™Î8ŽK¢(Ó2ýU—V7]hÉQ Ë»˜6pY % íP¤LR8¶¯ÅŒå)AòRн;%ž(j$I‰RÝWÝ\aêÜ™J?ä.iðÇ b‘ø칆“ÌKLz“šcã˜# cêtÊBöqŽÖÐH7‚Bõk«ÁDZ²c¼wU]CLäÛfoãIÐQ¶ûiD ’Y*65B +¶à¹{§O‡¡$m(¾^û! "Ûs^þ²…±-*Á|E‘“¥F ‚vJ–KRs'ЅаÓ +8>fµÃô!IЅRȝ_^zA˜‚D]zyÚi(bÊO4­Ú·ŽZK0’vL>¹8ÕP6¼®²¥P4õØ$c±vt-q›Qæ3 +JËN2gò`¥Y*%IJƒâÖ¸[®XÚР²(2î%r²†®]ìœ0ÿj7ã˜ÎL÷¸Ôh÷ôæÚ-ŒJë4Ät[Aü.Sáåœbx± )´Íf‚’fP…~'žYá2‰@¨è Èã¥P,mfü¢îžÛY +ÚтÍV0.0aÉÝéé®äêîº7Uâ^V’]Ø¿§&\µ”y-ñ|ss]&fü®ž —Ñ ÿ–ì]Ï󪗵5òa¹ût$yIï¬ Ô_?ØzšT®ãÞèÊP3Ν)C=¯uÃF¥äÇ=£0C‹?ö#Ŝ¯b¡Û0-ŽÐ›‘“›ƒS)ܲà2ìî®8 ÊÀ©Ý3ËâÅ1Úó +­Z$¹g¥ÄÞ ½ñ~šÕ}ÚqZ•Øô–±Ô,çÀωç0•›JÞ`z´øU–Ê~f•–:"vŽR²<–lϕ›­É:«àuWx¬¤úÜÍ ­¸¤êgÿ\¨{¹v|Í"´N/ßYÕ¬¡0þõ”-W0[ +εe ùqzՔ)b¾»çjP¯Q§&|aƒ­Cœ…B +òäkÜÄ!ö°¢ûN ©1ÝâþMKÉÑF;~Ž7:r¾l}oÀ¹Îbü¼fÐÉÁŠaöô¶hãPàú3;©ÑÈ/»RKÙ.WÀȞ¡x™†’Š©eô‘ù©?´æ±Ë +#ò5ã{Ö±£Zãߖ8©%¦†ë_ã•~³R—€~Xh +áð>¬,¨§¸šFËÆÓ×Ò[ó.óHï€Ð¦“ˆ^M1Îð24ì\ÀÅAé”îLRïÜ÷+ë\³P»{d¨×¿sˆ=ªTâú‚=L¸ÁÕ»c+X"ë© ñ +MuˆXã¯ñ ÑT4K&|ÝàCñ3Û¹G“«?€¥¹p0²ð÷\Å^˜P¼†r ©ØM)Á`*®ræç…áfø¬jz èç˺u]\çH.C}‹Öð‹øn$ÑzŒ&ÐçÜ4óˆãv‡#zú¢Fñ»)öì$~·1òòÜd_陈ôxG#NÞ ó&NF¡8”jµ©³N ðŒ}QÛ=14j aj}³ëíQ¯}Ej@‘¦c¼¬ª°ö"·Ns˜ÝÆxë›(ÐúJKáT™µ“ð„KYZ£`4£¿S› üÚԆHm4q„MdjŽñ³Cäâ>¸[bÝÈs£ ’»ÿ¦œë¨ÿ,`«ëH)Œ;HyŒ25‘¨leR`±Ï°€²ÕY%ûœ÷^l&ÉÙ"§t†BFߔŸ¸a3)SÞA€u6;°©*g†²í6íՑ©rRtõé¨ÇŽ ¿§ˆ“¦ù§?Tå!Îúê†ÓˆÛ³QGQWY2µëSíL¨&¹³Â\Kô­‚Â2É4ÉP>àϖƒoD•/mSÛt‘’)õêTlCJäûjá¼,‡9¨»N nUŠ5ˆðŒ˜èW07Uµ6íclwIcFíÖ j«ª¬ؖµÁ×U—U¬wœCmÈÌmŠ‹S®âY¾C‹ÙÎy›AÑ×Vº±ÒÒùxLñÎbR¬EÕ͊T÷úUñ¨žmÄò}šû—Òr©S©w¤Ñpmëî;›Bw¤ô!¢Cèqô‡Æg¢Ù 5²E² XhÖ{A·kâHH©¯©x•¸4Éw2]ՖO›!Îߏ¦ñ.K^R»nRґóÍS‚þ¥F¸Ö£ÄJèÛiiy9 0gc}ÅˆÝø3†Ç¿UUqïd.òÆôÍ¿Âèôòê³jÀÓ©ÚJ'†%ÑKŽ4‰,Œ\ƒá£pyoÈÓëˆÌAÑn¹stÖѪ3²óŸƒËTØÔبÀ[—ïX-ðüK~K8m±·p6[ …ñúì-¹{›¼K‰ì᪰사G”F#~•Vé]‡•#ªÒí‚.mÚC,ÿº>ŀøù)ö?òŽää*ŸR¾£<õÁÕ*t­è¿ã›k@c¤'$骀Π+ ~'²‘çæÜÁÆRt0uP²ŠrˆÂUV6õ—òUãrXU¨Àþ@•sÝã û#_Üm´ á- +¹NދVâ 'CJӃšçœÜ´ŸÝBK’ w‰Täè’èÜnM½KžsÓuWÿ«›õ\°cÕ9L·ñpóXï)Z=‚ß9.«Œ¶ýÎ6ô ‘¿Çõ[ûªó 8Åq#Q®¸ž#u`hûŸîÝýüï. ¯¨ÙHžhžU´GÅ€¶ï„Ú è)ˆ4/¡Üd[÷gN÷„W»÷@ä¡¡[±BøÙ˜ÐÓz‰¯{XªKIcµÜTe‹õ|N÷g›¤7'3pÔépÆ´Š×UYHt+¾8§"ñ FönÐÈÑI7Ký#4,Ócð£]7h\oÃ7KñÆ5yÑK¤¨WÕ§ÛÑpj‘ |’-Ì[=ºÜ×">“14Q4Axuâ‹paÈNR.W¡¦ª®JØ*ôx5€u_NØ}ÂÕ¶à,—ðë›m@±pjCŒ¾¹úZ÷ù ‡ ”ºRJ®øÖŽÐE\e‹…挒·}Då?•a£XÀ¬N~à.`ˆ€†bÄðÙÊ5À¦î×™оOÒú¡ÏLkå»Äÿô¼ ÚÁxÝ.­ø½JJªï@»ÊžEPbH ‡is|d©Rµ¹\$¯ÃE]—%mžrŸï!{òȵJ™Èw&Šhӆ^{¾ ÕBº°J¦ªÁ/q©Á-‘´cŽ%ØÝBí'Z%zí´h,`¤á¥-BÁ*;ǹRÞ¦Z8†G ó$‡S%¿QÞPmèÀa@[€&Á\­g>‹Ñ~/¦®yçQE‡Æw„_ ÖzG£‡¯üªq˜Jšávï÷9ǃXçâØÕŠñÚU?à(‚i@Ây2V¸Ñz £¶\,¬ÑIœ®ÉpÞ¤Ûa¡æ7G/­Øbþ-ÌÝ3øÄi73v¿$`݂Ön×¼.rÑsÊç~IdÝ1Q±ù,|ݬøw,àw» ‡5'»Ã…Ú—7Lú0XâæíwQTÝ®`ž—ŽÆOpƒí- ÃJÄs”ˆv"WçÒ¥ +×>n‘’JA¿sôچ™²Ÿt8hÇ M¬®…*¯zqùN›zÞ 3 ½ßrˆá~ž3Ë$¸žN“9á9­ 4 Odè­s6®Â¹_„œEg¼më˵Q}êÒz¬8>ïøeã‚WzÕÄOï\@ܼéÍÓH—žr)'!nô³sö 42|?†¦±¹‹þ‡\33ƒf!ðÆO;üŽ”TÞ`,³ Õ^°”4o4MBÕî…é¶MÁç!eÍBÀ(XÿDn؜̗ÞÍÔ`¾s…â”…1hã›1m¿úÍÜu ÁôhNup=„bû-°ùQ’ÄG.©®BÊ }Þî^™Û¶B‹([º&Ã98Pe#RÂ7äYVš{Fº¬îV¼×ç‡D}'¤q ©Ã‹Ñ½µ6ä(‡S0©]Ž.ÿ‘@3Íuìn]½ýn¾9·d1&qBùs|ˆ`,´i*éîjqÎêë†Þ £ñØõô›—cÄúŠBÁۆ1$oý6¿Z5“5}›žåV ¬ÿ5é¼gß^›vn7Á9÷ÍÚ|ï^¢åLÄ pbWh¬ +ù[ݵ3H3`f8ÁKsô‘Õô6Ç©h2P2.‹«CW¿sÛ¨Ç-•¯Ë‘Xÿjü¾ÛËvnWÁ ë»Oˆ’Ê)þÒåçÀ7çYY6êæ¤’^[.ª{ò¾Ž‚MoË}S]µÓÓ ¼Fž®‘Ûˆf‹Üg.pŤžÐ_1Ow%HU½Ù”û‰è÷Û)?AM9Òi^[À˜Òc‰(é)‹Ò„»ê<°á¨rÖB­õ.[+é1$û(¾­ÂäGd‹ÆÐš;Ìnœê« +]«SŠÑ‹ýnȗFø_¢…±’Ñu÷¦r|:֋ָQWÜiÎ_D簝Ä) :“CQVh:³AQ»»tî”®«/ï»ó÷„ÒZ´qûQ…j-b`ÑVüëéòãS¶ÒX±«ûi,HĊFt¼¬éäé²Ó°^”êïË;†ôçY{s°ßÂvÔìOFwúv*TR1xäq}ò/ÚÜ6f€²Ô œaÅEý\-¡çí…Âvþ8ûïÝï™!Z•¼z-Ð$ùÛΘqs_…ª)3ØPF®ƕ„#õsW-Ԙ´- +¥÷Â͖ +#2ÂÍzQDê +4±ˆ Ô;‘öbÚ6/bK+t¯#þ$z×9*q"…´ãxŽlÅqPí'cUlCN0Ø¡e²_Îâ@}âPç1¹¦AÈfÄj.q›¸¼OÐS±o +ÛÇmçÃí¼8giuè‹Øâˆ±Ï"ësá¹·w¿¥ +–h}t+£âîâµ)¡ +ö#Z="·e‚¨³vUÓ¼Òb‹Ì¨‹'Ä$¬ø¬ø¾›‡º:ƒãö™øˆE-/NÿA(ÕЗGwŒî£å‘”jÇyÂ'¹8ݏÇGFk½?!O“h¡êÖ„åYRȼGˆ<5Uf׆íª.ÅWÃFúYØh‹,ߨT;ó<_Ç=7ΚhÒ)ý”SBsÚ°¿?üÂK˜/^»alTTD^!³ÈLc/FÒGÅdWá„&¥â¥Æ¬aa  Âec1ÀUU D@¦š"bp0„Ô¿þ0„Öiþj8„ŒÎP‘™Š5ìÌF‚h¾(­Z¥T„&™MTÍb/‚¡›ðÖeuþÆ^\мI“À$ðʘBgfBJõšP’­í?û„&° pAÕÂSJSÿMMR¾¢>W%°S5%l a ¥ )LBæŠã !ÀÂR8”yâ¾P“šÿb¤”]šT’~ð0„ÔÒ¸Bk™1¥WMM-š)7[M@$øÈq3þ0„Ô! 8- ÕÂQ_ŽšçJäqUWá(Ùæ¶r$pþ,d§ØÛÙ>ÁÑ /5³QJ«×*Ÿ=WŽOºæJ}‘JjEO¸FO´» ( „Ô6ƧbVƞõ=? UÈýê¹8*ä}šŒž¹’Ÿ|U[º¤œU*”¥>⦹5<™¨¥0’U¿ØR¤œ`*ï‹wIÅæqVÂbâ†õšèEZ¼"¬~UžU|ÿڣןûHH°i”G‘T“\Y!ÀЩ%oÕ.¢AWÌÂÛTõ/¤½\h}ôˆ”ë’Kh:ð 'ä¡$Ý NSªI;+¼"J§uI)Ðÿ’§P?gò0I)ä¡$ì0I'E’ƒ )I’[Ð &P¡$í Tr$¯ LË’dŠNªI7nð‹¼JRF`0þó’c]RIœ]áY+«‡ŽÙ_æ*ÿ`áÄZ²`­ 3öf_iÕ%‰›†¯Wàñ‰¾œçcSOO®TaîÐ=dTS"¤YMry3C‰Pƒ’z]_ihSLtTҘQèÿÝû€{–Í{vóTD{°6?lÒ¤œY|Oò¤÷ؔHg† †Øp˜¼^vrà`ncìT“”²?yv‰Ã¼Åƒ [Aƒ2˜]®Û%»VÍýÿœ1DI +r¿­~IÊþÎâÚ>Œؑ¤ÀånK¿.©'ƒIÚ´ñYHõc^ÁÅq +H2UàUp¯mYÄ{œl$\„ +€u$$Å(IBuë×®]°»SSqb¢!¢ñ ­ôð˜ÒcC¿Õ5«¥ÕÍ~¥J°DI J•ŤÐ©RªÆÉù,¹0¤™øT¼‰¸ŸP”B}rP:¨IP%I*+€¢¾ÀåÀ*ÄA8y8.fIÐ"rdI˜2!U‘T® ŠVE‡àIXN¹%_>ïÌÓŠHȊQ¨c±ÝRdvIJ€U±äòuØÀ ÀaÚ_ÕëêÙjêÕ+‹8Aº©£˜Á/BÎ-P”HJ—•$ Ôèׁ#ªïÀ•/Xf[²£/¿ìYPƒ a›…è$‘+ *S60 R\• K¢BTž4€J;’˜)$éBT˜*K/° RRH½o mÜ R8£TÀ%6ÖniBT…à?® *$°yTqåªÉj[ø¥¤¬Tq`£sèÆ¯kßø·Š—Q´‘ÊÀ%9$¾Í@%F $¹Ñ@%:²f`vßI4 +í^UII²¢_Ž©y¦Ê¥ê’‚§“û­0‰Q \HJ‡È¥¹T•d窢úŠÉÖ¥ë Ã“Íip˜Z²zp;p P‚R„¬E€—Øìeð˜ÏX“ì¥u‰PBF¢¤ Õ9usR3J’•D¨Ÿˆi€J€Aܨ´Â/CÀ@N¬¢®±z~$§ãêþÓq O»9l J1)YIª’Ÿ<*ÐԔ³¬¦¼ª„§¢ØuIM~BSÌS NJ¹œSÅ´€^€Ù»ª]’„§3ÊEu‰N+1„Jn^ J§k¬Jq:^©)ÂÈIèbˆ÷íZK]þóœÜ6Æ1Œ‹*Ž(I™´BúÍ:ae)»L""2¼©šžã™KßY± ¡³3J³RÒÓv¥o`Ac%è„FZR.ÓMÛ¢ ^6Ve U ¼ÿ󜿨{OÞ÷ðw¿ïÁ÷ñÏïáÙKïim¶GÖ9=ÂÕ%z(¦üÑ&Šo‘=³6\3ýdSr$åãÕW«Ñ⸝JÕïû*ŸAݾÓZ¹Å8ö¯ô—½÷  ¥ޚú÷íCb¿Íž{þí½Eë$ô—­R'z]¢÷ü~Sý©9OO&ûtChÖz¨îŽ‚ÂÂâÂÃæúÜ:[§±¿j ¦Õê(ÞóÛþí×׉ê(‹Ð]],ËÝÂAq‰üI¾€Z<ö’*Q-#¸H‡l‹«WaOPp'‹h;Fû­`Õ÷IQíú{¼¿âw¨¡ëEÃá°„@‡úÆ@Š"=5Ñ@¯ô?7¨¯ˆ¼EAjH¦ÅÏOGN}ûÄQM†Vº¿s‘Zµê*R“EJ=ê*®‘NQ ”ºþ¼]Swüi.¿°_Î:7lÒkx‰ñûÄPÞ"gª‰ó;±oQ@®ýü7ˆ ꢀ¦ñ;/ÑC£ÕE ê{¯"‡>ñL=TPÉ¿E¿U ÷ˆ Ë¼E +íâ'ço?Úý÷ˆ¡í¼Düâ(ú¨ ~ŠÞª(_¢…慠÷è¢1ꢈ¥ú( ú¨ K¼EËôQ´õ‹q²œë¼B]ãø*|‚)ßÂu4SgT„S©"ˆ©¯¢(ªšQb8î¶r;9Zö p‚ÃEwoE4¬s€­‰lQ\@W'±T;»µ_Ë‹Âp§Ÿ'„ £~›_=/Ñõþ:T’· +Êr¯£VÅt¯ÓÞæš,¬Þ¤ñ0¿@d Oñµé’‚— |ø×ÉçŒ(½o‚GH\Áu“Ñ|™ã´Ãj„(½ ,*0]'ØÃE±Žœ»ï®”¸ÿñMH¦™£ÔÆxö+Á¯F¾+ø1øÁÉ9ÁèÂx0’9÷à +?U>ë2>èa„ÆLa¤††(ÈØ,Öðaëчï†!L\÷Âáx13ôV£ þÆ)º±þÏ~1ëô¹™/½ÊøcOúÚôc‹Ñޝ†<ÿяŸ"à97Nތ‡|22C#ãތQ’pQÏFJ(ÉqÏFL¾5èÉïSç4Ê7H®É¼S¬2µØËÀËOދv2é`Aºò-ë´ÂºŽ­ðEè¢Þ…=<£3¾  ¿©èÍi·[Å?¹èÍï´ûќ®ÑnìýºcÊß ñx3ÕðρÍên†~(Ïâ+²Ÿ Í ^ôhg£C§Ÿ(Ïo†ŠM»á’5!£Ÿ –ïe‚¼¡1¤ÓâyDÔLPÑn÷wúé¢ÜOF›vøiÇÈ®5ºã÷ÃP'âcQ%Ÿ}»ß"ë¬WcS§Åõ÷»~ñÙÉ vøjäF¯|5€¯\t˜Ös•©¹ý”uØÖ×Ã\>O¹3!è×o.Âþ©*e<ùÁO†Ã|6#ßÔ9v6;á;En;Üþ:éÍÏÑkz6z}_z‹eÖB»NømTôü~ +øm„FÙ|6Òh­Ó½E±Î–÷?x7Tn7Ãr7°ï$7;ñº½è}}à݅µøÝÅý:O{þõÆWƒy½¡1½RØO‘jJ+±¾Rëª7ÛÔYaŠùùåèà)wý!PÞ÷=èà©÷¿…xÝèá)7ŽLp»·Õ¦8rc:¾qz#½nÏ/³éŽ*“‡ß"¿Õ®ÇE»ñÆëÅx8íxžŽ>ÿñ"9 ?i1Ȋ9 è䏇%¼â÷­ÞŽRÿ¥÷]Oz9j}?z8­èæ(ëï‡3zæðÕðæÉŽn˜çÑn˜+±ÎÒñðç·£Ÿ¿ï}×Sގ†–ÿz:*|~ù&b¼%ßz:gTtä‡O«º|z(¾ÚYð3–yí ñՒnøu„‘qHüu«á×.Ñmx:ýðì7ñÿ‘Ùog»Etò+¢ï‘_G|ŠüŸüÇüŽëvŠõ›äW¿õ‡{¾õú,TzÃÀßý*·È±éþ‰»Eðjbh">{Ñô/‡Òz>šCê=W„øûÑö¢‹R+Ðø®ÇÜ|â0¤Ýß¼›ïä¾›ùžì~®¨ý—c÷#÷ÿ)°|œJt‡õHdG÷~Ÿ–íÇz?ÒCýÿ‘ÿRHk +EºC±´‹ä)!rԐÒô‘5# $^²“¯ßRvU$e­$sºGôg5µîÛ»©±£u³rÞÜÐÇ56>¨ãLù²m‡ƒ3äV<1ŽhÔ6µÞ&Oh5&|‹Ç`j* b:§ê"jŸ°‡ºGW´5~H‡î˜]JÈDÔ¾±\®«~_;?eӍ¢ÇiB“†´ÂÙ¹ƒÁb¯3+L&eq›6½C™›J¡ß̳Œ„ ¾ {Æ-½oJ’‰w¢u Nœç%Ô À®…Âu¾I³b6V'[ěmÙx{ö>­‹k]ŽÐ?š¼U¤d\úǍF×EiDëï†VKLuSbúÐ,[û|úJ)³µEšC(¤a¶šs¨dW9\¨‚6`QT̕9§s¶§9Pÿ؟&ØÛSÀ›¶ÔêN¯l8¡KïX öZ¨¡*Ï ,ã™8Mç¡¶QӘ´ýÜʇ¢(Çk”²ÕÕµµUWÁ7‰ÆPÕÊþ%«kXú¶ý/¥Tì `y§4樁7*÷;`"Bؓu¯$›­b^hQ´Ë‡‚Û9ÖÿÖ°ٓi3¡Èú'Bo"²Çö@ãî‡÷kgS›*&ÌJll¨°-»¾Ü&”;sNsº¶ë»ó¬xñü‹~<Œ÷|Ì(­£IžáÖçh¢Ž#ô£æäùq–rK,èà{ÿÒ]·-· ßÎÖánŒéþQ†±MF±·'ôwVۏúmj?Ô° ¢Ï¾mgG [´¿vÔß}7:š w»ÝØnÚº^†>$ ð^:${ËZù3žþæ•Ëf4'î+ WÌ`çi©;ˆ8Ã(dp!í ùõc€¡‘‰2ú(¾\@Oñ1ü7z¥Ñ"ÙáÜçi¦é¦)§i½*jor›gMòSn©¸TÛúfFé#öU0ЛÎ-eª†ýÑZ’=Ý¥ц,ÞæÓ®¦' ÈLåíBgB}=+þrNA¿Ÿy”þr‰é$ØkúºMÞR Ë#4ÝJ ÊÃS·V¦ˆàÉÃQˆ+¤›t¢V åãSîÍà‹ š^\Ñ¡§\—NO1n]Ž`Ob.ՓŸ\Ìîæ7r›½†ì4J4¥öuÉ×l~ìS „K’ý´èÓµ†¥þŸ>M¯æß¦:…e{…U1•*Ì÷½ê¥fSµ`Žôr4jy¡Ûäu´>X¥1Mù㇀㨫2¦˜5k­Er:‰8Ž µ_"³Ï…µGŽK\³TfcԊ¡®¿·¸(ÔJæ‘åµq˜¼¨´œº=×±½¯Q¹æËHÈã8ÀKqV;ÞØ(›øµÁ …¨ïÝØsG¯öL’“Þý +$h׸÷nÛe-¹³O!·283\°›ª‚Á Ýv}P)¼Ø©¬î[tÖ>­)Ï-†È~®Â±§î}Np,kV5{$´B’Þ~Èñ/ôL"z%¯³7Q»©p—&ðs®Âšԁ+¢Ä2ëÑËá. ÔgãŽ^ÑLýxŽtµ_`9ãr3®²ß9n=ÍEI5dwÔ»¨û*\bŠØœAorN_9PWm þ@g‹=ÁÄF*.ïöîj;:¢p†÷T]ïÜÔzÕ$ìÈ3§&ŒÖ-O\Ôzu F"/´¹¨Ô¦Ï]r|Ô¹:±Í?6k—o+ŽRíçÐË%¾NYLµO¹òŽ?_6_]²©ÛÊ +ü˜nÿ¡EÔÇb¸ÿ¤kÏéFm2ÿ§–<7±¹¡€´ü£[@RL¾ŒÞ',p>Äo§iû*›)üƒßÐ RZ‚¾›ŒÀ ƹ>¸q‘­Ž ‚Dcó€ƒ`ÅlJA°> Ôrj>&ĝù)X?ƒ× FngZ)ŒÊÍ$[žlÎçšNÜów#¬ÚÎ3Ïæ‡± |oYµ–ÖéÀ¤E¥ÉŽÇa¨®$ˆ¾ÎP}w¬~à¤j×ï2䏌7t`K)ÿ˜>£õØ70WÌîùÁ Èr[ ŽŸÕEðÔ]ØÚ$øj/<Ñöé>‹Ï8~ ‡ãú©>&‹ÏR<êo‰¢óՏ¯1'ÄÑyëÛ9“,\[z”ž×R‹ÚêAíu öº{]H=®¤×0 z‰[|Ÿ3qŒãT‘Ëë^²ŠTåíÑz¬;ɇ; £ +fÑuquÑtqmXqXm"öÑ|H¶½€£11‘јøÉãÆ-.Î8¾s)9!99àNwӘ)ó‚ñNñUø«üQBÈBÎB«p¨DÔZqk®Ä[!+_`*±W ˆ/¨\Q}âje šÃ5ÆlLÙ§1¬- .ªY ®…ØÂéáZÅÐÅê¢õ‘z轌^МõEéâÅVÄÐÀ.¸(TÏ7·:-eƔŒ{Nª”à +ðŸRœRÓ}õ°ònё»Áôؒ3M÷ØWh̺—^tŸ|s±Éz„}>ü¯§©M÷Üˑån²É>ûëM÷ÈÈêïr“wkîQžfÁö[›”Io0g´#4ß}®I÷ÁÅ{¯»¶bhi¾ïDõ÷vÃfõ÷vÃ>är½$ß}6WßJɑà|½¸ +-Ëۗ¾±ü‹möÑtqƒçëZòŽË]Ë$o;ߘ™¢iTaJ…ãyp9 uZ0WXù·{Ý(ƒÕÿÖ¶®\—ö÷—­?MÆ×:vâŒáüzÙ*e#ì¶€$~ζJ@{d…úHVO¸÷ +3¿J>¼hÈ´ý%Ñþ?^¯Y¦¨ƒ\º·Ú±ûp•…x†®L+Åô+Ä CÖx‚Ù(⡮¬ûLJ½dn’&ŽªŒ ó˜¼×ek:5ò8<+¨‘AJKõnVæ° VÍ`ø:§4†+é´ÇQà‡ËõZò'šÜIR‡b”Ø_­ }"µ†2¬x k¥á;—ÒkiðRT³Ã?_H*—Ü¢ONâõ4íÇ΢zNÂ¥(—RëÒ'Höúú5Õ•¨ú—°š'Ü(àö ’Š©þöœ–S)–Ëã#´µ¢r­ÏdæAÍ“k»ìÅtÍvn»=]’Ëx!zLÁx²EF¥l€³ò ˜Åü:ÙÊÜýj7ú§z[6‹À–ÊtDa–Ã/†Ž†ÆÃ5…:ÆÑC|ӐȔ>’CÔhX¶‰¤‡b®'»­BžL…kù“HÃ'[+@å‹ê‹3+'%&QDå+f‹Ì1ÃÐytNÌÁúþIôà÷æ3ù× `a«NKç”eám¶¸ùzˆqGòš7*ªŽ­äI/)#Iºõåù,­nÑEBñPpT–åŽAL…n‘S„VN·F¤& 0®×§'ÊfO–RÖÑS^™š? ¯N~ç’{~ô¦—7Ê ;¯¦iføÆ¡ZÉe·C*R³æ]26~I9r¦ýJC¥7JÇÚzó,Ö´¨0IÌ#Ãö¼¥G̈́¨ +2-o7©dv®uÜ%R (ÜT=A­ÖºŠNLà–ÜkRp†CÊOk@ˆú Ê3oê‘TZâAŽçXX‘¿`ç¬Ùe•Ã墇ØyHèá&y#¥ŸñKÝk@®|#Ys¬6Ý÷ÀM™²ÚŸÀö?PFxN¬@(]O@ù÷`UÞ´À¢}×þ¸MîxVö–# .•\ÈJ¾©ón«Â_~?ª–p„Ý_£ßRo·ûì5ï_Ôßòl2Ö.ÛÜGW›üX¸Îè²Ùÿî‡ÿR {ŸòóìüŒë¯ûÛÛ_d#Èñùhx(yøyÈ|4;x}?k¯‡B%íÖz,ÅÎ<¦|ßÀrcÄ~b–}pøpšƒŽ´rÐ#ó•ÞQAÁ^Ÿl3jœÕY×–Go—*O.þ!äk|Ґ<«°çʏØQI +>ÝcŽÌÁü«šg¸*]¿Šúc· ¶‚9@5E1f ìcK‰÷Ä4 $6ª±ç)ÌÉ#óŽ:-$‰&G"pÍ8$¸–ÿqO™Ï…ãÅBB>MÅ£”Y152’xsæ‘LÿPJ4yà“ÒÂÄ]³á•€Òb؝£¯úÁÁú±‡-lÑÁŸæjfNZ¦ç|,1ô@ž©î<3™Â1îËÒ>\cՏ“«,¡·À¥ ěÙ⛝5‰½©©ß˜è/Ìmܛ43ì ‹3lI½q¸BW8‡3`³DæèT¡QðØ8Z!ìTŽ\îìDm”Ôp,aD9ò؋sqÈ<$åY8Jûªg â35µhSƒ5LӚèÉٖۤvŠ“>TˆÂTG¶Aú.j„hðR£w#˜ˆhêÁÒµ9‘ãnö@¬]H0  +£e,âŀB|¨-ˆú{ ª—G¡ï›T[5Ë*Nïrԓq*"u]>s$â¦V‚κ8S°u +EmkU7¾D—œ' o_ “”ñ}V}†3¼ÎΨyžAß72ضò¿ì¹æf~Áôx¼¦Ù÷þ¼©g SÉàúƁ ¯`â +¢óìF‚©N€NdœYðòVY·Çh]1¡qœf8ø„0r'ØÚŸcg:¤òÚ6À +b”³Å HK)´JÀÙdf_Aã› í&5G‘Ïe!³¬æ¯‰»ú¬[i@±… ‡ù±ç}™Ð›wX§jdùvü6՛!Ãì¶sª°!b®$rcø^0§ÝaS¾ §-*ÌGFo þ7}'©{»úÄêÒnòhÝÖ_³²¿ìÝî´¦õ¢îÿ|›¼¶ñ&êýQÝH”¡xϦÝɆº”2·£Š [š²Ìè. þAp®ÜCÀ@3T —•]œ£SÏÄ$x4Žç<"_xT¾ðQ´9®ºÝÈTì`j’`øqH"Ñ©Z0E „À¦Ñyñ°9…©MHØ}Ô³’¬t'¡`KþÓö¾žü*O£öµ‰Lý, PìRš­s ¡Ð“eסþ¬‹z¶›w&› §ßŠ~ÔбUC¯ÝË&A{ÔÙûVL‚›­Z€Ɔ۹^¼šu»±hq2jÊW/®Ø:F^Üýª…ã#ƒ$C®Ç¾4š?@Ã(8ΠíÜÈH!7?k!!AÀëÂðSáÏlH´|{„z|ÀB¤îd‹RÙRÞ´$ +Ô0´˜Áü©h„ë'l?î›SBYûÌ+¢Í¾¶Q#ìåËb{Qö†…ìBŠO óá©3뚔žï˜ûgG1Út!£Uåa%³#ž¸cl¥D:´2ÿÁ;݁•w»$«…q-™ ¯ÇÎ!€ýXÍ͆AXºMû¢·q œ° FzíÃIŸD߇› +5cEš†oöƔ1å†%˜ˆ>d.èC1kt? èÈIèá×ñ8ì[Å)‡²uAj ¹û†*⎇ÀqIÐñÛúS¦Èú7 MbE—b&;Eå'ûÜNš=!®;CGþ¤ÌSŠ?€ÛôkÉQ ¼â,ýØä05 [àVµü®; Ǝ¯†+3wXפs?¬µ×gù«kø¨md÷KFÛjÓö…°ÄøP*ÝÃÃà¾ç©£^k9Šž¤0’ U41o…qŽúf3ï ÕáڡãLhÿ3ããÔþÐÚEEãÿÚÆ>:X1÷ý6p§ÉR%Ó)lXÑ£-°%T!O“-WF’~#ÆlDc*Çò»AHö®Ð2B‘xä^3X^A'Ž ä²Ñ÷_CÐ;C ãhþ'Z…ƒ‰é6³›ÒÇÙ¡<šáâúO{ÂÙãŒáâM˜Ã8Κ9ç„xÔ£[HGu¡4ööÌ{5T‡ÖýööP)h„N„ðlªt¦5¼øz’Ë5Ž0fñœ£Œ!ƒÅ¼g߇*¸Â˜6ŒL8¥ž4u÷(aB¢®p#ôN–e¥¨* +s‰ÂvÎù^@S28X¯à(ڋÁVZ-CËèw‚Ký(Ìmó;à}6n"ÌýÚ3…3€~]¸ˆ#ˆ]³^‰ø"ãa:n™ðRGV{½$ûs +sj€íC¶zCäãšWg·û¥äÂspS?Ó†ŒøA;$(b7G6äŽo¥¦g„¨P‘…©£¹¸B‚Í“EêÅØqa?Ügpæe„<|û„ Æ¢ä#—üׄñ¶|¹ý…iätLœÎÓ=©€ð\•JI—âMér͓îC”•n‰6Aëlþ™ªËE°_tÈûä'b …Âe.€Æ©kkÒYř—q4t—%Ž´sH t6ݦ:5¢ú\nìCÑÛÆ~KaGÿî°¨ºËˆkë©sDÎˀjՖî„Z‚uzyÿí9Èøk_ß…ï áùˆg4,dæ3,Ľ%áJø}Ë0•Ïç|Ï/=: 8«ã…³øÒ¼/ÈCÈÎh|ê‰ FɇmÃÁò4:!-m„ÁlºsŠb‰|µ“ºx…ãï§è,ú,}ßʂ¬æ>î^ʞC¢ýAg'u ù4ÆáÕg6|$hÿ¬£mö $èˆMåƒ~,'ËЄ¥èAqíêb–±nº.ǔ|ҙKpšé<#ù/´¨åWóƝƒ¤1Ž×þWâ‚@ÚEa6Eن—€âÛ#Ds_Èşò޳Sºú½ÆÇve*<ðpuš¡èg§Vµã›Äå6¬Æ˜: ¡ýºA÷ÚªåÄ­-RîªÒ™Ü|ŸBúJ‡ƒa=;#²’ +øD­¤½cP+«Ïñü÷’û8þ` ՈH°7`¬†µˆô²zŽT0³&øN‚|:ÿ˜_ü]‡1Må)ƒìeYóÅõäÑbV«C/SŒ‚Ï=SôA<Å®Gí¢êŸ5@ÜO;JëxŽR—Ö½mà}¿3/ý÷µÛmÍ]¿;l†>¬@›~·'Á~¾Üê°äüðXŽ Lr‹ÃÁ¦@S‚ÁÈÌÆ_)–‰öÁ€¹…¢WG®aׅ|¿>\Ë@ î׫†ÂO²là Eå+ãzYèÁº…ËBÖEMí(¾P’hАŒ*2@k:µ«ہëwÜbØ׸õ³,Ÿœ2;D™”쑡◍ŸòÐa#•a£Æ±cÃ'ŸC9ÚvÂËdòA••ГC gx™øøèñIKåXG±í˜"{TÇcñÌ19“üd£»(5‚ÖJIxw–•ÝÉËå%ò²¹L·‡+’‘0\ÿÄ\⨐¢XÑá;‹¬«@=ñŠc>x%QmV!)ó¤N¨TPXp\üæ³4ÆøÀvè Ç÷¼Ð,Øð4™)X­ôÙ͂©ë @…Ú¬yÞ:ýpóRùªÓ‚®ýd‰±ã!Že܇d‡î<— ’–f®¬é!ñ^êÅöe¼‰Ú‹9!ý¯æÉî\ +¶9€‰Á’&üGï†ðô÷UÖzæƒ¹9-p–‡+Q -_:ÉÙCT„)k'UHVN«¯ÌNŸÉoŕŽMd´¶ÃÍtœáæº%茬œQ8ÇW6W]Vß.·Æ +B~´éa暏äf«V 0|²š˜áv‹~^^¼Ñ4酇2í›þþ–…[û WÑHš7žBz­üˆ»QWÈÀk}- +ú)c@¥ ¡–:‡F¨“8ñâ9ÌÙ RÐ͝C¦T ^ç)µ=Ÿ²ÍPWGf6j›Í(e…ЍÜë.¦;fa׃Âäðb¾&nK¸âfØÛ©ö´íµÈ÷Acârd1dÈ!…>q‹x¬IS¶Ë)>|^•Q§ƒ# ó¿ÒÕ± jØdõh„µcñœúp.šåwòˆ|B}5ø#¨¹/¹,#½i³‘P$ ‹¶d™¹½^¯îŸÈ…E!=AZÁ˜zYÜæn’ÒÂÙ«¼x³‡¥¹êSjw@†fOœM?ÊêîdyOi•ï;nå†O9;Ÿí3¾f{>À(†[-”Á4Πў}†“8œ>vb)÷/ Ÿµ¹÷B6±ÑÊ,™ëÝP¶Š4$;M?œò²ÖÐѼ•?@dÉ2åT§^}ã|ŒHQ©ZY¤íAóýÔfO¼Œiº f"PtT³ød´̆ŸþO5ׯªã$£ÍÑOy»è&ÂçBPoĶàlOF œ¼ÀL^c˜˜OˆàøÅ‡Æ(>1&hÞº&Iw€€Sñ¢Î qÓ˒¨¼Ð)öZâ\›…Ё+BJƒ£ +‚ÊŒs9ŒäîIw—€J㕧v*ðc²½Ë Lú üЂËÏ¡¤ó£D]™¨Œ++Þçsž^w?¡ +ø]ãÙ,® ×®Ð[ÚºÿŸ#åÍ£íê™å‹})b ¸ý 1ŽzÆEBl{ⱟ­-ÉÓ+?5ˆØ,i¾:]Ÿ>7RO¨£å DnÔµGm«â—؍ + ˆ>‰Qýú´Niû#Ye:¾63ŒèaaÖ œ9jY{zà÷'Ø·'tþR?çêÇ7&Çä)ÕýMí:…õ4×Å̟˜Ð @#Ëþ”–oËޓK­oM.ÑH{ v¸“1ÔYSXíqAös®,>Ô±ÚÇÚ¶;V!ö°¼§‹-£ýŸ”q(¥–§Î/òk“ç·¹ÿû¹’B +¥åo·šûy»¼öóÞÝç=¼æþ üûüªiÞõ’I#²êåÓj©Û´Ój)t´í4Ր‰(.#)•iՀª>ª´¡„ä³u”ú]A€âvYV„pû}GÿÎ1Eš\%;U{÷7O{#a;ĎYŸ¤}(‘(^ÕpL[>̔œö’Šóû¦@L½‘U–iw 랇ê]wYœËvÊ¢½ˆînvæÃÈÝ=ö ÿÜ­´i˜íL̒¼Š²ì×qÙÁ~÷DÁ{»8/w‘tß¾ï}ªb”¤­$6T”Â/¤Aق‹" í ÿm Wî‰àìmsˆäLµÔ¦;4¿}ª9R³¤+ŠL8 aÃ9äDÿêŸ1ÔqJ@û¨Jï¡ÊRÿÈNy«zEÕ0—Dg"ÿ<£鿤‰]îÒÃ)'Y±Z†(§¡5czmZ kU9»9M1v•Î4³ý§ƒ›G6,~lÙ.äô§ô Õ͔ÀiIWK܁§ßؼ³y):” 5¦ Ugžy=œHŠNŒÞ[;´V¾J0YÛ袼 òu.÷)PÝ«n\AûÜ|ùYՁ_¶K|>^ð¹&& ´ÂuËÒƒî'ƪ÷cg[f@TY¾øh–l: 8^çnÖ &o*Òo¼Ó'´Oƒ´HrÙÌ´l«Ñ€ŒH¹_åûKäOa‡UÁպݹæQÿ GÔ N5žE÷àƒ‚R*Àíàh û&¬0ºr¼:¾q`sTa…þÉ噿¸^]8«&°ZMú¢“iåáËJ‰€Ó/5¿BúBýÍR =𙔾=øA4Gü£-eÀÑ4ÿ󉤕žÜ_Ì r†>£}—ÃC‡„QpŽàJ/KV"SJª”PٔÛÔäsÀ(’ +­¥.–—MTQEû1OžØ}‡>…;¦ÃÅóæ#]BûóP¾|“bNÄÁضN 6c +Mzß.Åà'ú;< §õ;£ÀË4쳑2Ð dˆ¸Ooyß³eœe-‰²bZ*¿± +ÚJ®#H~i%i!Vö^ o|>€þ.}f®³AË ÷½0’“ÖUOPOžà8ý´î\÷фì¤Gôsë! ¹Ï¿xõ=#$)2M­˜¾§æÑrÒù17ä‘¿ ¦å3›šü8UçÆó槪F ­Zä\¦Ç4øâ‘‹AJl{hBÏ %6>Á4´„ް_88ÇBQȈG'(-‚«*2¸@€òþP3ö'ˆù¡°Ÿh + W79&þä&ê)!—°Ê3cœŽ$.‰'ÿ @K%"|ôb¥ƒ , “Âĸ?pÖ"9pÁJ©‚a$·Ã[Ñð nÅàRAF„סdbøKrÁËÓH9°Ÿ6FµQUneUÅÁ¥‚Zq2#ÉÂç#Ž=€$>b ”ÆlwèåÈž( ¦0`Fi‘‰[M­°a¬…„”ý ‡^·ÀTLâ—>ªÛрðvòàOÕÓÓÓ}ºe*êiûÆÓØ j[é +K*–ø 6{À(Èáñ£U¹zIùÊDÃ2õœ×¿à³®W¹º?Uʝӊ|6¥q¼é'‡ÌBM!Î.Õ'°ã¾<Ý[úWóÍéRW9 ^Ê W¸ÅLb÷§@™]9º’]òP­“e°0‹BJQ|k얕ÆPIâ³ [R"·T&5ÐrE’š}Ð ”¡¾âizXƒÆ\¾Å؇ZÖ̆ûº„–i[)CLÌÊehשЇ²±3.¤¯þcbÏz+}—ÂSZ“R=ÃSÙDng†}€jF³Š| Èá]ԒÆÃ Ì^èõâmoÍ%½Äœ‡¨²DøI*ɀ®_{K|+BT&nV7ŜHn§þUô˘_†K/Â9AVO±Ê”ƒ+}ÚJZšœ"[O²59“Íe~€ë†ÃÎ5¦¦¨"­[}Háك5y(’·ÃÌÅmJfd`-„»Û– áҙœ1I䦀ÓÊîP?-îzÛ¸b[ +†Þ (å™f„¤bËà,eßw̪)pãG–÷í@…:墯‚žª›Rܤ¼ÂƗçsU)µ%ŒÚŠTô•Y¶Ã™Ê i>[ßuü' ¯Ê­á+µ xL>ð¡¤ÔÕ%¦Ò¨µ‰ Jʺ]%:$ª»,ؖ‚èAÞt$ÿ–ìâü§ù¾[×w꿔>n·”ã‹ËI_råî¡úßI@­!з¬ă‚JÙÉòßQKRA(Ó¸6#øø¼zÙ>¹ T%ëÐì—C±C(‡d†U ²L ÕÈN¡<„úä3èh B‰ +d)ÐI *iÓ¡Ý¡ïã*™·„‡èAúRtr``|ç‰_¬¸ƒ?ÿó©;嬟\ú^çÓBïøAýâádSÞy.öw+îþ)§ÂýæS|Ÿ7anþÙNCþ +–Ͻ-›h.¢‘qˆÕ“ïˆàèhkÞNÐK[+f<˜ŠQž3žû6÷ÖĎt °T¹Ó;½Ú‹ÀµŒ¼¤¢ˆ²ºy³»ü ùÚ ¼>DŸ6$ۋ¾S߯&Ï]˜ý2óCÇ7䀛e¡SàÑòÈÑE߰̌¯Y˜tW>P˾R[õ_¸”Cí@¶‹åÇÕb¼«íúâb¡”ÐÔÀÃf>ˆ‘wìÁsè=À¥¬†|}ÜTßsãxB•²¿;ýåxjÜôÓôxk­fEVÝënG’Æ…Hi‘@oðy°䀋ò#Ô +ðüä2|µÇð82¼žDç Ú¬6$ëé‚e$qí |T× ¸u áqÇ.@tnžƒˆáW„rbL|t›÷ ¸ÞÆ4{i6äIÝ\ã€?é½Ý!AӃ=$¤„¯2Ö­ù×‰?Fà:±÷ՀIT¤y¢îû’æßšç~o)"û7.$Í5“¼01Îý‹›{ÎUö˜Cñ RUz¸»&Šgáø*-û1Í@TÚ_Rµ4C«2Ji?™çjˆ#­B֕ ¨3HWãE¾¿­ G‰ÌÆe¦bš˜»/",òÐS‹ngߨg~ßpµ¥^vztˆgç;5—&ܹ¢¤ûFŒ NAfêit«<¹_ë£.)útÔ«i9OT  “6æä€‰Ó¬LåªàøPÚF楽0oTÕ4ÕÔi´•IŸÑAXQ›}å)Ûé€3ðYúºŠtêÑ.Ó$ûMA#˜mAÒÕÕÓÒ· < +7Ÿ7Áô_·*–“­J@M‹ð~ êZjétɗá`º_S…˜©©ÔêþÝ6š²”*Õ]m˜sÕÖ4 ”ˆã©XH MKV;xQËWKÝӒC4”µtº=5N™?¾ˆ³À#mMYB©QKXÓGOOTÒ§S¤îÈ%P 撖¨c£§…áE\T䐀Ê­KMIcRY!lž¢ˆ»x6BÅ۞…áIEKÜ´Š~ ñi£"ö¢­<°i@‰EÛSéitŸ|"ÍÑ #EîÇòcå$ HÔ†®<âæQJCݏ[ÁA‡U#]Ղ–"C“³M#áÇ΂”¤„1¦.ÖGʏÙ—»ˆ„ÅÞÇðH,%±Í›Ó–4ô4úE %suZ­3}MPXcÄ.ÊBŽC<8™°±!Vwr<(ØÎÃçÛK[5ØfÅ1†Õ7˜}òÐѼžÏùb@V-!Á‘è6cöàpžè|¼vC„?2Ékmßq!b#ö AÈ m,DjΠ|îϛÁ@;3FxÎaÿOBþӍÎÅîF<|÷ô;[¹‚˜}†~-U]ÐWQºáªµBîGÝh^N¶U¯<{è +Ì刁N} Ê Üû‹C\zf‚ÔðøÏÕÔnðש‡qéâõùø²HloŽŠ‘à=?xŠé`0Î/qAà]Åë`Ãw›‹ÞÒ+]™&®Ê+]&¦±ZîüšŒŠ×x„ÔÑN +Z(÷r áIn™W#ØÆ³~Xu\Ζ5ܸ‡³5ÞPCý&×3ï#Rv€‡ú w!¹7u\Ž‚4x‡îáÅ\ÏōsRwDUÑ£LݦXˆl#G 7c¿[vA¹Áe•\Ïʍhné +ä|ÑûwÕÌüø×y¡°72ï6!¢M]CƓUË!´73´Êˆqdv.•‡µºÃ×#¸ŽF·5ÜÌXߙ™vŠáôI«$Ê[2ï&¸oLÌ£´æ!°”ÌÅÙ|GCÊ?d?lÍÃ`°†8JDî;d‹p¡»Œö×£º‹®G‡>Öûñ’;%J÷ÐZ?®~¬ÊÒµ~÷mSý]i¯‡\kSgŸà¸7®FB?u³ÛâµVŸ1ã/žÔ?Vlù¬´ÛPulÙãþWÏsÏÂvÕøKdlyÝMœIÓøT¸˜rÆL›)+Ê^H—êõòÈwL¯dkx°ˆ·FÁ"  í˜îö÷v(ÑíïIW’SG÷Þ²¨ÔHÕãڟÆ%r·VµÌEˆÔñ¥Öby2ë98òë\œS†¹˜³‘µ?ž ámo£íOê¤z§ó£ÃÂèP\n1)Ι¾0TŸ"É0–P*Iy<èbP©Ø .šâ$-fÍÄHyÌwf¯ÜöÓ½&±|~B£ÆßmȒ§ƒö¯$pê½|X·’Kώº!áÇÈYñÏ*ˆ…‰Pä†!㩽üDØ1ÞåàÂ?_–´]oGDœ„ 3.Éì2 ‘X +C…ýtkA>™YEtû"T0´L$Â'Š,>GaàËFù&& PΜì›ÿ º4¿M žHŽ$©Àù¨ê桽!ø(ÒO!k77Ä%e Rjºû!WA‘á_²$ˆ§2—ŽEYrQ—aþ3ò!ÙòlÒŌî&ªö8‰!×ñ+3ï›`,i椯!9Ì¡9Ëôègðnqê‘R£ˆßíeH>i/ò?à©ëiðÃüf=—ÁƼ|¸z«­ zì—à »¢Ôá´Ü[ƒ,ᔴK}L}‹ÊÁ∁-‘ÄhY âØËŒ´©^|NöÿVŽÁ–XOìý¡ÖE–uy1I±Êy-d—)ä.OŠ";$tPF!ÇIų‚9ëp#E`Ì,ÁG^G;{’X0Àžƒ 7ÑAfæä +$šÀß2AeeD‹¼Ø¦qñi³™¡A9š$Œ™†‹ºO"J·L­Ö’+¾Å8ºbÞ%d„Ó2÷ZÒåÀðR3lRŝc÷39cۊ†IC=m8«oDv¯ÛcìUÍRÎød¢/ß qÆŽáwŽ1Ý3ÈhrDÐ@#±RMx¨H…*E‰ys³q®gp!®º±ã t¦˜š&ðõ‚° „ ¶ŒB8š%O`)ˆ ê™T{ØÁÚ{Åž÷ÞÁ›×„! på +ABäEÁÞéžî'+Dƒj­{¬0A¦ªP‚¤7äŠüRC¤ô"-Û í +~ô’fý‘AûßþPÃZ‚JÞiâ.¥Ix%òçµ2Ö +aÊ ¬¬Õì˜Àæsj‡†F€yFeLÁ¶ÿH98Œöø¨7áà}a•Gꔕî–Fì=×±wðo]픫jp tá©!¨{ÍcJyl$FÍ#a·m´áx'wƒ„‰p-y}s*ŒÞ4s¡ô@¥·{à—†˜ƒá‚Žrq¢JUi )ËXc¢R³x¤£*¿„Ó}ž$Α”šE‡)€#fI5$jÚ RL¿3ÒÔ>I·úËXaƒ”sp5gIiRtt{ë€ú)*@+†H˜ÎUt. DðLÕpüûÖñãÙ^ŽZåÍÎL2AºæåáƒÎ¦g[tö‹ãfWRÔý·Q¶õ”.Þµ†ŒRHÁÚN•}D³! :Øe µ>˜^ÎÑJý¢¦<šq( ¯ Pmapî¹N^¡$©Ôh‹s³Ñ÷ N7Ë· +½& [hU¿xñ‚…xËPÃ.XÜ?Øü¨âö¦Šåï‹öy)û?}Ÿ¾Ïßgï³÷Ùûÿþ?§ó´9¦NUo«ÇôXŹ'7‘©â@ƒF¹¼54ÞF'}û!üaˆ¼~z«y|¥ªõÁ¸þä~nñw»š» r‡m΋_B¿Ï_p¿¬=Éû†¦,d˜ýÖ7Í0ñ˜¤»÷.®Û§G ê ‡±À$ž!œ~üΧ”‡Å²ÓCÏÁ£N³§­´Ó0û=e¸¶íô Ét~Œý¼Ò,×ÜxUdqúyØìœÍ-ñ[Esl\ÜÇ@3å‹}Þëà<>ôü:ñ0¤±.^œ14œ^ 8¬k Á‘NØ%Kùæ ’J€‹–£ [~‘¼I4Ñ ÷¶ˆaa!•EX’ª‡lÊ¡Àq’ãœ\;èwÛ²—‘eŸòº^.4»ík'7‘Ú¦ 8L ÀFëÖ-¿ÙúKör?ñÈT¹k:`“<’ŧÅ»™}Y³l*–ãc9ka ¦ÂlËþ%þÂØOt½óá÷5;ʁ +A¨Ø + ǖ®?„ÇgvF…rÂÔùÓ ^s!<é6 IîÁì!"²û#ꤊH»‰XT +¾I*ÀÀnˆO §: "w:`0›¨U‘îׁdñׇ¹HOèÿ…yöhFp®£‡[_›‡X¡Ï8–-ç‡6GDChz™•—\áàÆ«§ 1Þá’ô“‰ã?"E9Ø W“½ÁÉM6ÙÖ:A]^<ÊïÑ>dęÑ&>ˆf„šõyh}H‰(úÑ1´?½ €nøGÚ¨ÞšZàëCGâ â€ö°#íLbM9ÒLÅs!é”á’Þ͎HþŠ=©‹·îl×9âÞºeÜcE,é2̘†g=>?å†oՖ©Ä‹µy&Q*ï҈õSÃ¥`˜Gi¯®C q´O,t¢º}òô¶NB¥{ØÁy»Ä9x†à,º¤zÜÝ^Åk½ 8îÁõåΙU‹{0 F0X›Pï@΂#‹¨î×^ɸ·§ Àœ[0"x’+-Ädjw²:”©:e® ¤LߺªvúöZðÉ,ûŠ¤Ã¦UÁæö—G é—ã fl-¥»ÔpTOtÉQ\¼±§XÌ»Û˅9̇³2ZÙ*æ® VÌz1~ÌÖ¹S&€÷¯Í>‰­"1“u·B1¿ÂB©Y:UÌÎ%œÿ›+ˆClAO@aýæåâȬj 3óô§px‡U¸n1·¯t¤_ks™AtÏIoÔ­€¯šj$¨»ªNæäüèý’V»¥Ã«×«só(BâǃÄûëqáÄӈ ́‹‡4\g¿ïĈ d(<@Pà êÜ@WÏ xL% =èqи€ÛPâ^h¾ž ';Ôâ|Xƒûð¬Ââ]3ʘ<ÔÕÀ¥xQÇ÷±êµýbW¿h}‡ë[bV¢ÃÊ K@î%¬¦ž4]5ò…ý±{D™.Ð0ºSÌå´%4¦ÙZMŠ悁´ôê­g U—jc¦[RT7l - ªÿ)åz%Ùo›4SU¾žH÷_¡¡î³çZ‡0QþØíçS‡uç z½nß{T.‰È0â° «\†º- 'tñR3ÝíƒÐùcö¢Mо“CÕµš^û¢?†x•kˆ£6k›v_×Î~ˆ!ö0º}Å îrxŸ†+¿å + 6ks°GZ+/æt:=èN1Ø2p)^K©È}ƒ/Ä-‚5¢qÁpêr&ZÛrc‹c\[ âÙ adÍŰaÂۂcŽ î§K[8káˆÄÍܘêq%QÎ-˜‘šâ؎¼^Á—|äȨÍÏ7`8~CŽ ¢µÈðyc€æ…ÍJ¬Ýå¸kãˆÔÚ£óœ8k^!)á®ÐF©FÓãüá>7βu9‰µ›Åe×¶ê”Ñ}øæß’qÛ?Ãõ¦Ú ‰¥bÆÅú˜ø1èÉ Ù ò؞ͅê^GÂz¨e!Çüg‘¼ùˆâ_Žöø–ë +˜¦Ãñ"•4‹ùq¡î~£ù+b=ÝcÌ+õˆô±Ð*¯@yr÷¡m¢ÍâÜä¹Zj7q5p±§³„ ®Û¾z˜oþš˜YÌ©»n:Ö¿ŒXøµ8k¯úL%¸Ñ\}pR2ú}VÎïèzùI©È}O‡¼±÷­ì"•¼ŒûÃ4¹)9߉5ݪž±\ÆË| +’²õb®Ï ”VèƒJÎÞ4«#Ü0¿2\¤§¿Õá叄wZº Û$\ͯåo[àcè^ÍF/ ?ghڋØ–ˆƒ«0P`QâlÃQ‰Ç†¦‘Zí!…¤xaÈPJ`üs€À!\Ãý ¡l¬Âìƒ R^brþ a‹Ë”‘ ¹ŸRŖÇn@ ž1Þ°Í»A)ö€³aT­ìq0´î\kîþ´²6nn{–þ3 ¹ÀF}3Æ=4Í¥x¶ºs ˆq'Ü8kRí³ÌÓNfÖ¼ó‚6ÿÝbÔD‚#ç‰í„®¢‹‡ß³Ñ`wÔÙ®þî’`é)³—9c–vÇ 9í«—Òö‡øb,JihŒ#,aÈÔÓÇÁ©°ÜµÚ òýÁ¤Õhá­Oñ±ë¥èŸ¬.Ì ¦Æ”ÉKbalð”4[çcðN¢ "M ¨ÖZAÝ%‘àã—)Q¯N%G‰[xaç~@T»ea„a~º£¢µ*Š”?'$± ,*ðBnÜZ%œ†ÐÛ´IâÃTñPAöᯌ«%2†¾¨´?» ¹  ŒêTmˆä`’œE©úÁC‹á|H(Ó•Œ€ýÃR6Ôc†\z§žü%8Ǿ!)ÂJ©‰X/–EŸUw½á"çvHAð<¡@€{ô‚éÉYð ÞµþÜ/oÈ,bÓ\¸RýÂd “>ÿo$Û¦¸¾ä¸.'OE‹³³òÁ‚™LæÝ)ׅ:½¸p,](YÀc|¾¯Öé„÷÷á%w€É"_ÎX¤zz¼«7ŠÛ}¬*N! +~‹à€,Vg¾=g0]»¦Vpåð%S¦äHÂr;kí¸b“¦äy(S!ZÕмá)ÖVµTXvA5:ñ ¦#¤åYwx“‡Ö_4}Jòol?÷? +ô•¢ˆ?ð˜œQ&·D<6är Õ3 ¬l&·‹{óMªèK./VíòQŸ—+ILۗ>öá^sŸJ¥3äšÙrɗ¾Å•1‹&`ú1)‘4ÝY1ၳŸ F¼þÂ8y;ՈPH&1þ¡-ܨýF^2àÎé2õ%eÿgXÑû—p+è{ áO l;%;ô +$aÌ`ñŸ¥EýE+? ßßJ‹ê<þíµßæÛss!¶xl'… @´<€1]Îo>“·%aLc½q–m6I° U@¹lېx¤åBqzÜ`±Vc‡soy·\÷&¦¼KÒë` XÁ!f8—6Fm|q0Á加ÐöÝè̋AáÉrœüŸöØg¿g¸>âZ˺¤`]¶ößz›7'ðÄ´Á߀„Š/‘äÙ'˜WÎ@úÚc`o\5þD ïÚú݋CÿŒÁ‚-.u˜1>+ϵK” 1`°ÐÿH¿Ñ^@ð]ôá3ûØýnI*Òç~cĝ͘R\„ºÑ)oeàñJÀ§”>·å@-{™ù>É9ºcª]è1sV&J:Ãqúªíi {Cž™ŽlÁ‡¾+SøÃ®—bb±5ɚ;AÃgv;Žm|±…ÓV¡à®w@¯*»[LJîíjë·c{ÎÛ+|<óñô9¤g|\Úþêˆ}àƒ ×¶§­ákïgv{o®'ÐàJ%à +ôœµ#]?Ÿ €ÓͰl™dßÜPè^a)D˜ +NՐ)ÏÙU†Ä7«ãóêÌ@MëÀÁ¥}ë¾àÅYgLVä7a‹¹ò‘#|[¬Û!]Üë@ö#Ò­ªøËý×Üꞻ¦¶‚#rlá¢qEIÕX,6Ê{sC<$ +‘”®´àŸ¸®þ´D®ŸþiŸõQˆ”ÿ]­Ç70ÅÚÜ¿¨œÄ +<¯$%ÿ¬ùß®+ÞAˆŽ=$Ú¹pªý¸f‚ÈN’>ð[Ɇ +Ð+9[Ł—su0Ãj¶ëä_àøÂèM b”eÞ¼»b¾x‚Ðܲ°evµa‡¸Ÿ}2&*Hy€x +£ÏS(ç[+¸xŒ•.ړ'±Pï0×Ñ=ƒ‚ \øß0V,…rñY´1sqx¹¸É¥"Aâ½jíÔ½ ºº3oÞ¿>ƒ +µI¢µ ×à¾ÂVbÆi8¿RÚ|b¸ú€=nrZ Ë0ZÕܒ•UAµ¾²‰)qONF̃ٴ<‹7*Ò'*}õOÕèì}:F ñ—íEÄs' \)ÀÅ2 GJC‡Þ Ê:£dù4[›HÁÃ_p•NÃ_´ì@ñkL-ú Z)Õ+±úW¥Âš{Ý —˜+¿4¢(ö¢¯®Ö:kÛ˟¤Äv:¹¾nìºâñLèEÙ Ö±Nûb1MaC¦Nü3_H]‹‰Þ •ōHb´-å‰åՂÏ#wÿÀäÞ§ÿ†ÏýÃÞW'>|û:á½¢ZØ) |“ nIq^UHã¾ Ñ"–°i [@-/£"¼ÝYß8_ҔƒqŠ|¢×Ðäp ;PÅó""4ˆbAÂö< ð\vzL„ºûÔÕ±ÿÞ«lš žì}Õm=Bî ݗº¯-_º|G¼ŸY\›{cCao¯ØG f Í£ÕN+›éŠÈŸB`Yt½Ÿ¥0*I.å…oNj"@=h+6|DÛ‰¸u"É ‰ ꉥ‰!Hb|²úŒ)n :;.‰+$£{½°‹e¬ °ì¬t<”Ò…e¸ߨYDçŠÄç6àuy܀SÇ‚¯$Æ2|P Ko.ÅaÐ>nZè…:3ŒÙ݀hÜ+8pêy +ÝWÁ}ñmù ãlÆÑo {ÔóííðÜMÁU<§ç¦g@Ÿðîù–¾ŸÖüÿOi - +l†ä>ïóå9é¸; m-Éúö{p™˜¿ªÃÏכs}LßÏÜä¬>kòຌ(Å;-É[/ëœúŒ¥7Ԍe}¹E{ƒÉ?,«.¤Öñ^1ãsëo¾Eú¥Ë}þ{ +7œÝß—åéÊÚ¹·\^Õ(ß«gf3S^—‘Ú)x犹3¶ÙÕ/~ºë[¦ÝŒާ»¬wé—Oû~ϋfn°^Ù¿€OÍÇ šìh¦—J %ØÁw«¤Åå® ×u‚·]Չ‰ÛAI‡ht¨³Çe„‘ÓüGK‹ht°¬ŽìüNÊ ã;²«çE&¾xM—Ï‹ò/Ñ Ê_£¬¿H.‚úaHN,©é #ô¢üÇÔx"ÞûVҖS~ì²I-–ÙJ–ˆ"4`–Q ´§m+ +ÃÑʵ-ì¢(Ҍ IzQšç<ªæc…jûˏ¼`˜é‘3<7Á}h+”\W pÇ~Œ¨˜¢¬;ßß¾û²[@öç7››ïàÝç7›¾þ=ÿm>ûÖÉ#nIºÛýÌjÉÀc—'ìcš'-Ž “L¶$ɲØ·e^KIüw¤ã2ü°Êó-ŽÉDpCY\2gփò'Xh\%ÿÚô?¦"Oÿü>b\RO>>#ÜøA H›Ä| ìÃâ>½Øšy{‡àÚõuz³c¾«ušúÃqÆÌxã¸ä~ Øä¼¦N„{8.8`žÕk Vàlm.²{P9¾ÁøÎ3q(þ´™úºêáæ‘+2žÔ?ÊNÇ=¡žÔê5c‘\­Øà|i©þ³UÝ×@ïgs¬Jzº¯¹Öêñ§×ÿŽ·ÄÙÊú·Y¬‘ñŸ,âý6v]©î‡>y¨€“ýulÀÎÍÏ>¬Ôw2‚ó®-XøÊÀcèþé‚Ò?}×j«uš°˜àâ?þÉCW­KYÜÖÕ¥±‘¬×Qò k|‡®³W=©7Î ë»°AgaRð߂‰cÍv¿Y­è0Ÿ.‚âyŒgª$|uçA­o!UUzêÃç9deݵZʺð Ç9ìXwì¼HìkµãñßGc½OB?[" i1ª×kuºÃcù9ífz#ÀpQ P¡"5òJK\>$;ë§¶ðr$ðÏû¸'§¤ÁŸìÿ¨‘ÇHpšÝGy~×'Ċ)¾?§°yžéd)ˆsO‘2¯ó³Õìá¾¼X•^«Q\’ÁW`üDM^ +BG(~âáÂòŸ¶è8dfE…³¡˜ª¥7]HßÑ×Ñ+3uÔç"sŠ]$<†<îtyè‹~oØ0½v±$ðJ kâKàÀ9-pø“}Öìgµãä.Ϲ_¦gã¿}ƒò+x“kHP¦øüvbëV0ÝPüA*;‚îWSW܊ ŸUˆl9ïjG§@ƒŸ¼IŠˆtY ZººíV¸ +Çc! À¦´‰ÒrÉXù¤ëÁïà“WÝqÊo¼×¥‚‡òg:I[Žöf3©!Tò‰pEö¶A±‰2™Un/Üò>M~>áý¼oØBuÎ4Û"ý;sÚÿ]KŸ[â€ä%tö·X'ٸтÍ;€tÊÈÿ,ý˜?¯Ã»¦;©R>ƒ`̐ ­Äõa†ä¹ 4¹z͸ùՏJG$…fËße½#–ÏýIÂ×éš\%“M.'‰[í8”%~ž)‡ [þƒºÒ7yً¦=k²µÏÝ1Ó¹$o<ñ}±ÄÜK—4„$TM'„É¥Àø>öƒ`¢ñäêPk`×m®V,êëfZ%Ѹ°Í²É„növ Â!6ÏádKKˆ͟íÝ-¦»E@—6Çoѱ3z^ˁoÃi£Y§ÕcwÂÆ.¹Slö¬£{cúÙFº>Ï Î7è>Ï5œméöqÒ±hÎñô¥bÑ+GBD¾‡^6Žhlüe.>öI_ï|„?ˆ‘ÇÇåzù1ýû?óèQýÒýWaÔ8rD¼ªt¼çcò«jÅË+ Åpma•§§kµ»P4rT‹ŒVÇÕq&êîLFlGÀCō&íÑd##‚¼…Þg͉í·ó]]1ÞºgvÆóÎqõÛ÷pª­ŸùMK-Sn¹Ü)ÕîËâKæÇ¼Ð2íû v Ÿó_ñЗ€;½ãgðåKúû0Úª-/lÙûd ÿ- ¹Ýoy<]Ž…7±í,ÁÇù4*£uÀuAÈvŒzÞE· Ñvµöê‹êŒԗðfŒGÙnÜEi1§T%ë{1uþ*‚Áì‹AÙ)ºGˆd-w™Ôê”.ñãgù4 ‰Ð ÛµFúuá{J«‡hß@ü÷Lwn-I-Èî6î;Àé›@'Á½§‹IšÀr}.ȳ½Æ½e@ò\ØB  Kb;¹z<£( ƒ:ø{¢¨Kÿ·Á‘âÚ{vœz ýR°‘ +©KTys¯-l«U:ðÒ_:~7°ª¯š{Q\=âp­l’w7úì5f”û H7©ƒÔ½þ– &ÿSm…sƒÛºs +w.æ7XÙû7/»¢,ößò _w&<í¨èÞ\؋ ÓëgNS“àUÍ7™Ýþąû½¬^ý[¦:·"o‘Ï­6Át®Wí\¬ðQr®WJæ!6^=À]´ùM9I2OÜÞgc~p@:”(ƒðÕ¢ y#ÊmÔqlnGõXhVUŠÂñ5ªŒ~ú“õKîӚ2Ážéi$Ï~Z` ËHGöD ‡Ï9òbOñ0†`$¦èd‹]µ`Öùøèœ«£Kë%€‚åBxãI¢°ËãÕ +‹êfýQ“Û€n|šÅMˆáSU~œEmET |/'V®à/rǓÚ٘zuK¨Ò„I§U_%øðcØ(ûiCN™s„ ZÁÂâWÈ7õt˯°{‡Ü=Q¼šò@ DâñyÁقYèÃS@ʁd·…LÌ'鉲™Œls}¦Ì5¾„—ˆôú–Åö€E þP´])ÊEšÇÛDvrÞe¶è˜ná΀ŸÓLZ +k–Þk©8×ÖÞk¦Ä|"]™ û4f`§’Áꝃ7%ƒ~v’X<í t4Í.eå¬Ðó|…3kN›' ãs*–2ø(ÞÍ&éšÓeZÙxD|EëèUßh?Ê ?Òüú"ÿnŒ²mÞFŠåìz•½§jÏ1ðÿ&:Oó äŽ‚ZâòŠày§· +™±õb«}]IõNŸVý  O„÷mɦ¯Þ֖ŒËùž vBšUñÄ0õ¸¸P'9Ùv +# ¬ëgU˜cHå®Ú’ +ã<Op=iö7ÚµÞ8™£¼ÿàNþLèO_pTS ‰R8ýÆ V×,¶½Àk¼x@ÓghG?~´z 1°¡&!4^dní2…ÔÙ|®µØo «þR<¸å#ÅFŒ˜d7åZw0…ukϋNºqÎ|)ð&¢;<ï‰×ŸZgs¦^pQ Ïø~”@™¤ +¿›Á%­2æ/-B|É´øa¤üBty£ðýhñvänr‡NIŽÅjC"…¼+?‹ °1[3þ}2²—¡ÿÔÿI[òç?Ü`Šl3¤/ïÐÑqA6˜ÜˆÒñœ—¯¥ ™ +¼àM š9C„ë3 Ûwvv’$å6xj7$ð%‡ P}R£Ȗn2¤Kè§§Kæ‹Ù«!_°$«¿úË÷/ÿQTË>¶¸œ`ãFс ø èAgÝ2×âu''Fp ÛNäÁþB)Ÿ&¿Â¤xJqU¿²§"ö&ª;N, +Š6®Ï,duµ®À +dÐð)zšd»<¹è-~S”dÊÓINÌŬTÖÚóŸþÊS§XBÌã2Íԏ㯔ÒÖ÷˜»ùkLÄ +€JÄߖú§¤™/ϕÁ.‘GۍkÃlngâò1Gæ~má¿È܉‹0‘(ó8Pܚ̈́ìD'ËõçŸwHZ£ÈxZŠq%tmã3ƒs/AȄÅ“åýyè6˜ƒã]…4EUâp“Gäh‰Rf ˜á§¦ÇË}o»1ð¡,B;囒¯Û±ânüq‹7'‹9a~êa‹%0"ϜbÊÀ‹>r%2x²Xñ`[æˆÞš-Ÿ$bÃZ%›!ø›yšidò‚%ïͱÀ‰y#±—“&%òёó#Ë4K•ôãî›ÌbÀ |!‹ÂèÆ!>~IwO&9@ÑÊî”s¸§ÁŽh>Èå¾ßÅ´ß§¿‰~ú#Ë`D¼‰[„KȓÜçzq/Vi¾4n‘(@Ú$G…¸{ÎÒ$ñ!#ñäx¹Š¯’¶c`Ã0‰kئ‰A4~1ᜠېz^6:ä³È¦÷ãöc¾í]CMKö¨imÃÆ¬ Méǽ`JST8'òW‘Fâw"2æ(¤Ñ÷Ì@¬Gç‚äóIü'>ž˜ÓŸŽƒòçFs°Àœüaœô”Ðl8ÄJhóŸöRŒçàːEÏ ?‰ÆÑc.+uZJ«¶*P›´KíïT_W.ÆÙJ½Ç +åµõó{7\Ô!  +)ºyáCY{èݧ–¸ñD†Í9ÛêÛG¡l=”¶e¹ø´ä/¡÷™æuVÞC6Œ|fioË[ž¹j¹ÔéÅÂFñ‹‘RžÒ_Ú Û€í͵/ \˜ÖËÀ¡ý^ê˜"óüTîyñÂ5Yñ©Œ²?åÈy¦0†¥åPOäJ•§,ÛO‚—§@½îG‹Í¯¾O炤µk Z\´iKZ\˜!uZ…íö쁽:‹àqÀ2•¨ŽZâ÷Ö4.Éúú-ÃÕ?Ú¹sq¿#ý}Ó«”7Z—>VÙÎë€ëʲrÙþéÈÕى4BÇìß[Ëë}»›`%œÎ~ßpå4yTéN“ðŽRhœJ-‰b$ðp£{—6 ˜ãM#Uàèu\H¼v÷DëÑ>´3ùÈÖ¸â à%ÛýH×kr€@ƒâ¿V6.ÛÑ :ÌÙ{xncyðä?àØr¥ cºåhUz+:ÍBHgƒ™“]®‘¸2ȯæIGÖ¹mr˜ ë`¶¶+kh¶¹uµÌ-­ªÚæ–ׄ[\ÚÚçV׆[^)myµõ‹k [^E„Ô¢[^Umyuµæי[_b¶¼âÚìV×´[_‚¶¸+kÚ­¯l¶»%µÙ¢Õ<Å8a½(÷˜¤vw|ð_vE÷n—Å0µòÈa‡øHâ`‰NÆÄ¬¢é>Ë(¹õ9¨òÕÙÀïìi%‡Æ8uÐòZí³üÊ}œ/妷߳…;ú§ÁhÇ~Í&­ŸæÐ.8ù\®ý™ZÒ¶Ni3 Òoّ,‘á=GD8§K)tùážÂVÙÜðàÙÀ€ d"ûhCè ú[P©Úÿ²Lì)½¾ö]‘ªä)§h{Ñ#P$Ñ©z7„Ö”Ò£Rkßn }¾Ágfn²õǃÑ=w=&]6~ñM±S§;  ž'w¿–'ç`Bÿ­f\P²£|,҄/¯!›ª35êÌߛëƒu<÷ +×mQæa9Øi‘±¹lêð&zhüòg]¢<°–F”ö(0ŒãÉ$¹­}8ñâ$ö{ž ,Pbk(ü8ÝM¹¸ã®Eyœ` îѾ!#c{|?žÙιOÅê\—Ú§<ÞÅÊ£|nÚmË´o¶^éàÅM$TXõÁ:¼N 2o2E˜ì*ċX‚U—Ö·å™vëÁW‚W€râ9¿Ÿ\Tœ6Ù6h—‹Ë5MÂ!וT\À"QI"ö(#ïX³CIžRèÈf…M™5¨-žÜˆ.»¦Û›Ç‡Òc¥ëtØéãDé±ö‘¼¾›Ëø´û6ƒóIÒsè£{7ޖ7¦Ç¦»é±éãy67ÿln,w=ÃñZøòûxü»5­ežà‘µ](WÚR‰­1öxz6Øv Z€NÌÎMÎdç)g4³•“”bŸží]ŸPál7T9׎ŠUcaK‘/9Æ`Þªâ!œXMæÇï´§)ÝzlûU‰p ®[ñG”¿hƒ_ vƒAïÓ8,I\è̦¯ÀG ˆ>3…bþ@¾’´¸‹ègɘL_ |öQÀºÓÕ\³¾-bÓán8&r›œZð´ŒNè_‚èïbçÀs²2ã9º¬*Qqx.Zi sMŕèI™óÃÓâ"¥kq§X 4ù«Ð¶Z„IRÂ嬏mìz¶ˆ©AÈ8¯²¼lùòÔ?ºI`lbn[;³4(ÂZ‰¯îlL~ó±«z­ZDõ¬ ù8Õ6ÈòŸ­<xèh3OënŸâ±#{ŸdÝÖ¡XÖ¯…bHÓÐÜuà&` ¶Ï‚£#ùE@†Òñ~€ÛÑ©Ò 8ílÚ(hÜlҒĹò@›oÓ²‚&n˜ñ§‘Ð`'Î5lßsãÕw5vîé—ÀùŸ7Úzw„ð?xó­¸}n —½kMŠbðhŒÛ ¨ q¾ÕцÍÜIàC,*øð«ï¡Wޚveª»©h›âs[jQë!÷Žû›õ-ûçQhݖ±Ø×³þò?—‰º!} ¸Úç"¡­s_×Q\<-ÞD Ûlþá©{Ck‰Wuß0”cxDçy! ‹@£´ìpYØ^/©y!‚¥áqjwÌ.[^¼K^À‰LÝ£zsÓU”lD1mšÖŽïF8ò{²&™"0%—|=s„¹>XiÉ@cÀy]äÒÁTq‰c°nk¤¼ÍbÕâuá®$¡“+÷~‘K­˜d¦"7V{Ød%ݖ½RR¾ÿ¸3•tWN„ø„.؃?Ù­Àµêô§‡@§Ú04˜þœ3ÛÄ‚f]ô B%èܽ´{öÒÌaÕºÐã#ºjÈnüCµ¯fÙþW 5ñóbæ,>Sւ™$X©œ”Gá<™°gùº"«4ÿå­?ïÚùâ>6æ$Ö~´Ë/–zH¸·C>öŽŒ ˆ1_ؼ.°'¿®6êN J“ {˜ŸñãƒGüð‡:XàBÙðՌä6ÈH_Nii´µÞäz¨¢æFA*.ðU„=Ñ'R‘_µ–xJïԑãr³–=¶&²çƳ\ˆ‹AþϹ-juåª?èô1n!2èX&ä›øqæ¹W“©yTd{FÂÕ×É/¨•ì £xÏËvŠm|Õø- c>!ýôFö7ɣ̋ì {Ž8s‹½¦c‹ÅCö&uýÒ©.z„oíè¸`mOvG(ª1Í £ø*ºøæy‰Ê–FàJt¾ 1Ôy1ÕØ<šíhÕ1ÞÅyҐ-vØÕMA¢? 6¯N1˜çÆ&„+*8/ÜS¦ûÄ9ZºÀ0FۀH»¥!àÁ&[ƒÃÓ±î˜7ibýƒ]®ÅI°'\^ý^œ{¥û#Þ¿úG©|ÜZz¥úp4 ƒ¿í½E"¯R8Д³úùÇ¡Ëmîbªqtí¶M²xµ1{Ü^ …Ö„F'íVˆK¹N‚bŒÌ—+®ÇJÀP °sNÇNÀPn¯Ác;‡Ð¥´ ÅáUñ÷¹æG{|7ÞÝÇ;Ÿé€Cz¾õ˜×>ì9„)ÒcN–†+ä$.Rò$ÞLŒåÞÐážçÆå/Ã\p+ ½Ê&Š…ÉÇ¥û „.ÜÜoú’ãÌEãdžpñ5ýŸ×ÌI­m|B/ߙ¢_ þ¯ÿHè´Ra¼~‹Þ?MïèQ&ŒrÕýb ´ +­'ö­£Š§GógÓ£'+Žq‘Ì[AôYÅó Iò*FŠü†Ó±ùׁcr—¥âên´¢‹Þ+À{9Ü!VŒ|n ›ð²÷áFHñ·ß3…;™Ò1 ÈØ5¹ýKÃÛP€¥k皪^ó$VYA²:U&F²A0# 87û䥍‡m|ý¥ƒqëY®Uk> £”WμMíóG·±0¤N«˜^'Ë´ñç 0±™Ü¹±’–as#R͕ž=µY”#/dª¦»ÞþªÄG'Æ@nÏûjVùP™4¿m_#[»@n–ÁX,X-vÚd «'\ÁkíP«F÷í¢šwÏh=Ù m >׫ûŸDÁjšƒ0ˆš<ž‹cºa÷†2 9r™~‹Z}ªüuD|Ç y`¼koEû;‘GkÆ‘Ç30<Þ0}ÃÄgòþçp‘åªæ¸x#žøõ¼k§²O\uݜ똿©sŽvľá¸È—Nw¢øjŠªyBõpg’ëšõõv§ÂJŸ½¹tQ&5âãšþci¦a†w¢S +£z`3GeßWJ—ßÉWӂÇïFŽ‚òCª.¯,ÙþÉú"E¥\å³ýº· ÕîKË¡}“|Ìz ]|íŽùšX–Ïü4 àƒƒz̾ÐjòP*A«|Î3FÏÿÁ÷'jˆ/¶.È>ÔÜã@£ð}1Þ¡NëҔ Úg´âÀdÙüD ×Ðï'‹?B>„ï—0bí³Â÷âÃ7BŒÖðM‚ ÂP½žq² ~öP–¸¨|žâUõ¹¾¶f ‹È;9Œ€#yÔ“•š½ó1KI¨*wS±ÉW¸µóóäÏrý7#fùˆ¬LñYkUZ‹Û¶#ÆKk`ÐÅy=/Ó5l4?žÌº˜Ø*+Tcμ/è>ƒì‰Ms +í¥æƒÕ (ËçæCx@…ÇóZ2sÍ ³ [\š§!Ýäbh§?ÎùBé&ìç°Ä +â÷‹w¾àîz¸À…âç–.¹abBþaaðÇp@1¸Ï+h ƒ]™Z1©ø…êò4W8Üa„Žäܽ—œ•ûŸŠ£ël®Aõ¸´ÒhÃhŽå,Qª± $ Ù¬x÷r?p•]ù#~>=¿Ô)ۗ@åސzáMދ”¾fPÂ~ßì7ÀE÷/wÆhÜegÛÏ;MÐÑü [¶(Ž[›ª·¿öB䶔ˣJšÂqq~æRƒ‘n‹”ѸhsǚQw6¹{Àû]®Û¥gï’@Š7Ž­ó.cbB÷ÍËå|û‹Ê­7ƒ¯Á"Xk—¾  LÏÈ¢·Â¹ŒÊÛ+‘¿ÎùÏd8%:®Q®¼ÏS,â-„Cøç¸Ù̆ÈÒðÖCxúٓ ¯ØO‰)¦1:«Òÿ¯4×PÕ\±ß{z]ÔØ°ç¢Aåœq¥š@ù\­ág‹œ­FÓ#ƒeÛfµ Æ÷?‹†½hß  +Ép¨V9«07èHÇÿ´©n7—á&h¸¥oÍ.°íQ|óžÉê²j͈ۏ‡:nƒçM~Ë=øTtޔUáø¦åMÊùÀ•ٍ߀ªààÅ}GÑb»²ö¬&l—V^²“mŸÇ@ªO¹¸*möö^¢±l5Qa"âñ§ËÜ7øÔ7…et¥}ÊXí†iÆ%¦œ­I£Žt¢Sn& ±‡#c/ÒAà‡K°--«zšsEÍ¡ Çxå/…ÇÞj—¼à˜t½§–K×CL>ê}0ŠKçO¶~½qtÓñ¢ZYzê\ù>Ý2kµïÁÆt>F ô }ÔÁhËn»@›ên}e%®«“™êî}±ÄcfËé8QqXÏÝÙ\ˆ#¿$ ß¯O}r¡‰Cõã•< %_|Ò[ÚÇEôùÃúL < ß!ˆ¸æ{ËæöáÚ@´ñ8jϋÀQ³öˋoŽþðͅºV¢8ˆ‡ÏÙnø—*JU_obþ¤ü›•?œße~èÁô^ÿ9Á%Ë8x—±vjäFª£{Bª1â÷ꌍkµÊžÙš/v® ŽyP”ã˱] +®%Z¥é¸Ba®×sÎ6 ϝŠÑ“³g݆Äó´·N8ó ~G@qõn ŸKÂpEÉnÁ-´_mAÄIŽŽ ".IˆÓџ%&¬ûž‹¢.÷•têÆ“u*D±Äy+ aKºnf¼MÇ7Þa²\µýó×/f„d™r|§ ­·bÙ9ÚVÑ¥®^5GA? ­ãº…:£«¶;W#ñP73‹8ÞbÉñ¶övN@»Å•ìÛØº$ˆ7Ÿ]ƒ6»T–² +*/ ñÞH¸¸k=ïÝm,/ >¾FöÓ4EÖk,ÂÉËgŸË¸†æÕ›@ÙQ£4Ÿp[æ‡c.Äl„3Rr>7ð…÷qæÕæžz¥ÐH|š²vˆ¬˜Á"bÚó^׫͗³êÀå ±ßº]vÅ둠ÿۆ›d\Ûéœà:§ÁÕ=ÕÛÞbÌÆ”ªY Mó¢%ŒCPL¦Ïæ\¦âs»÷EU£AìƒÍÑ"°_ â}¡„û æH¨õVÚg%Èb†ÐSÍ<<úzÁ4Ú ~i›’pl"ö„}m¼jùÛ—0+ÇL^‹Xp’îØïÚÀ¡< ¶õ‚^ùº|«mûRÖ·Ìr¶@쿘zpakeå’6Õõ·ÑàFöØ×c%ùãb~É”<‚ä—ñâFDöJžbM? an˜ï pV ÝUc3†È1Ó9¶ àb£^zçîH_úbb9$_¡t5¥véH4»•ÍvÞ*†"@3˜¶v-’í¢5·zæÚá©"&iifxM”IqÌV •z.£6>»¶2æ-FîÕÍ6y88‘&e.5d'È~Dó8c©™ÉV×s¡ç~|£b«Àñûi'Ú‰ÂpZ¬xù¶@E™“muXÙ–-¥×²£Þ0ÙÍt$ÆÞáÔkHa'­ùm^QçH> ›"׫ ÁßO +éFI,ù¶½Lg>×2[,GüÅ>;ü…>­œY¥aɀv&„4® ?¬–žã Ò×p½[m«˜Hó-¬œŽ04шø¾èÄkÈR „­¾ÔË·²sr<3ŠqÁ݉úïp÷ll†Þ[°D×Ëù'ì»bï±§±9[Ù:h=XQ˜=M‡ATÆúW-^h-¬3Œ±¤ºDÎôdI‘•ې–°[:7 ÒRŠ0­©DíÍc'¦0 +%|<0Éù¼9ÉGAö C,d$úý?rü²Ú,YcÕÓEú²ë!Š7] mÖ¡qx0—±*xK¨E9ÝëSBŒ]ÎÍ9KLZ,0¡Ú­SK!Ìd]#8ÓÆd‚Þo¢†~¼…Ùá¢s•=oØ5lF›V7çÚR\5$£]´º§íDÞ(ñ†;»aÜ^ïºF”“ýWwuWw%ÉRI$!YŠd,pnÈ,–T¸0„@`¨¡‹Ž[t\…܆˜dll]ԆEìÝpq^#3\|àºa†Æ*É É  ÈæÀ@¡b0ÈFºÿû÷ú«€‹o9Þíöîï½Þîï¡nù;ñ»ÞïÞ÷}/wÐ.S‡k$’K%µ¼e€>Óîã՝N,®Aþoy&°ý½ gs}m¹2//±ë•©(!赦[W2†‘[÷0².%–V¸6¡.Éò ì¹²phá¾ä0ݬ3ƒÉØÚ¼. +’’ ù £i¦ä”}EÊ(aM†Ä6³ÁŽ•-ÔS¾×uIY¼Ì mE!RÄCÚêž»²Cu\[nZ†EcÖ!€F(’¹]gº#ÈúØéÔ05xÿõQ‘²×Õ`L¬¨4\ÊÂL8¹ =А»ÌÈMÙ»$ð)wG}l=‚ U{ ÿä›ÝcAæˆmcC¢—c¦Õ²ZˆØ»?ÂÂËÀ2êÖ\Àk–¤P •†=¸Uv!覆ê¤w{„xº&íÍs­ç®$ŸÉ-5­Ý¼ªÝ‘ð©rIÐ$ä$‰ÿOùQ¸ôE9n^*Y|äâ2Á”žší 3\ÃÇ4“Ϫ–,–äRœ=/Z4Zkánk‡)£.epÜ¡di]tńü9ÓbÀrΒêOL®\k† +OK­µ·m#“å%ñI)°¿•X¥HŸçPµä¸`¨Ùû¦Û$¥0±%(~ÇÔ1Ùþá#qt®µ&%ƒË cˆ’SÑâm\Èñ Qó iïÆVU1È¡.+IÞ%bX-õI¨òÖ!Ð- +qEpGì>Ҕ'E¨Õäãa–LC d£×ò\lìéZKîÔ1%lPrP@ ¯; d&/°ûʕϷ“—çf{ʕ«æŸÌqÞpôì1Ŷ beq4ƼÖ&\’©ÊUrT±µÓPLÉò‘£ÃFòӐµvõuÒëNÒpÂP²6«Ão”:1HŸ3€ ø­›Ô{êÚ$’‚2äYN ÇRÛMá‘äತaöˆÑá#§Ã•.º‘âþþGŒ?v’<å·zíL§U©²ËYí±™’YuàN•Pû~ŽÉ……š"~Ó¥U‡V€ý@áTÞc`¡‚¾qFj¬»}XD}[N—Ï—|¹ÓC iQö”Tێâð½Þ´$Á—¿‹iLí©tìñvç;j²Üêf¤†]©j¶z¾yªR8Ë­¹Þ;Y+s¾ûXûƒ©ÆjKQ§®4p²ä¨ÂÃ\Ԓ}°ªj©¬LKöËX>jU(Ô±a½l¦>¥Ý†ýµ¹ÜÑõïšØp›ëö6Õë`Aâv_ .‚u ëZoH“~• öKR°ÏÄaµH¯Iä±²F%ª–°Ôµ+š#³Lâ;}4±½ÁÚ¢!V´¦keb_$m…;Q}·Î“¼ ô›ÖVçxMV_^™]4û9ǧǓçŸS.ҙÓU7’1˜VŸ¸0p7v6 AäQnܳ†=Ǝ }:…áF_å%&Ð)pkIòƒÊXªõä®Tæ³'YÉÌÊZɎï‰áÜ¡S1«ÚÌåÎk;r÷íÎô务Ö¨fECy7ìGp7–£j“s†è\úÊ4Áí_©j•,6Øì†uVAb™^ü`,ý†=1€Óö´È¦í$ƒ!öùÞ`kÃS 0I%á9áJć5aƒÊŒ$0•BƒÐpèÒá?æ1²—1.;!¯o ´ba+zD&«Ñ…¡%kv‰.}ïÌ%¶•°Õ5Q™ÚýlÏgõ3#‚ÙÂJŒ±5ˆtIE,ÚS¨tj}2³)w%eˆÑe­™à3þ.Ï¡7KÑ#? +F¹DvbØË‘±¿K Žœ·y VÎ2ÐH›Î„/à!θA <––m†<Ï¥ÑÅNÊ:iNâ¤éӐiPÝ.™¯ó{bP+4—7ú™?äg&ø¡R#ûL»þ #Pi£¦—m›œî¶/§×½#҂Æ.ÍëGõI&òA-¦*m†2—£Àznj(ʏÚ­»ò½#ֽƩ³Ÿìž÷Ý׿ýSÌX÷Ú ú—·ÐQ¬{¶¯õÏ þ Þ¹áÿ˜ð€ûX¹Ô0žùv¹å§'°ÚîOÈ_æxïebmt¼Œw¯Íî@–Ô«›À¯³~± +-­‘ùÌtó聾"°ý‹”Çd–f×ݲ}UÞM4¸RŸLd/°Cx÷Ö><|HI³I”æžH³¯fî¿r{¹¦ìØü°ëýSÒy)iÇ]hiÓJdL˜€‡0`~,1åÍÐæŸ°ÞªQ¤ÒyŽSwÏq Gì}+ýCÃ2  ÒkÍ0ýÈ[bQd(䢿këép[Wû'…G’‹ÞO½#jÿlû…³ú®a{A„à¢ü•ÛÌf“L0gvg‘N—½&I})kb‰ 'ì{Hdq±ÆKf&[û›/¸;–ØÅ¥¬÷œÙ\k» À׆š‚(êBQ¹´K2½\Ó x¦cè„<£3ˆÊ›ö2µaŸéòµ©‡!r¸òª“ N±2+Îÿ½içÃÂAG5UZ…pë/ o7ü˜Õrßú0í•?? •=÷•=èAÁ.94¼®<íê7º¾x{ÁðkÔ§†þyì>Ç>HoȞϯ‰œ‚…ï¥í’—/Ùaà5E…‘4ø-†˜Ä8’ŠOwڌS¯«“B6tmV_Á +_kP²€†Ö²—Ò¸CÑ\¬‡äˆù™«IRÆí#`!ì¿ªóŒ ¶_¶©-'ÒÃ-гXŠt-C€G#J‰ +Þ"†ÖdPô !ë…Î hzeÂÞÆÛ¡ùÖ=DC/À9„¤N  T­âŠt~‰!S5Z‡æ#øcׁŒŸýázé^VJý$9°)yÕ¨sÈGõá&P°c(ª •k?¦ ÕŪƕšnéßâ9 vàßq¢înj à‰Ú˜´“|jf¦Ky›_¾\:‚SÅ›íL\÷ï¿”Ök¼ú]S¦ÞfÚ_<§·…le~`É»”o= [Ű#eÌF7.D×Í)}ܾdÅ×áîùŒtï3W"–~Q6›=ï°1—-ŸtØÓ®Ýי¤±œÜÂÙá¡ìàžt+Žà:§g¡1ëo? +‘þ +“_Ù±„¹ý5§h‚ +B7¶ZzI­“ ¥†ÏCYs5² [”°®Ð°Ó%á™èL]÷aF'Ÿ£îŒFä;¢lYˆ?éƒl uµ0cdÔçúz@¨à +KïMè\HNÙÞR¿g¡I¯ )óå.ÙèJP¸tÆˆŒeCð˜‘âÂ\[ÞÈ`́Á«#ÕóËÓ9OKÌБëúåy¯òZe1í<Í +‹8¥áb¸ïFç-ÅÁõ¤oy=7ü:\m´ýò‰ ü\ERû¶žíBôo//Š­„aßòVû(݈*ví’bg' Q§ï‘¶¶=ánL¼øï8|&¼{¿‡VÇ_д_¯ýþÆ6í.J]ݱ³~##É۝â2%XºâL\ ëúà¨,3µépÓ œêfA·x*K«d¿LU‡‚Ê£¶@€e¥ú“¯¦el8””¿8e¡‹Á„_fȞ÷¢“è¢ðû ³¼XÂ-ËÃé×ø,‡‡˜H©Ã£‰¬nÜÉSàÆXnÈÓ—›à7¥Â©ÆSšÝ óh/dGNªxU!\.epY<è© wGÞ%Å¥3F)i–ÁC*|á$ýhÝÓ:[p„<™²#cæ8–û,é ,ºmö˜”ÊлĄxZŒ§F–\”Ù)E­RªÚJRµ=²[VUhCÚó l„7”!ú\à ÁÅÿ^d «:ĉy®ÒÉò‘¿‚b^ÒÍ»¬–iˍ›à’%x†ÄOô’¹Åx^]"RÁ±íJ]t):à¬ß )Õâk­Õ°`2~@Á¨rK\ý&–•MÕ¯8ÂàüÃà—4ôJ`rª—Í"²iálÉËÚÌÊÕÕíQhsY˜Û99––²s¶ngx/wŠf#ÎÕîúØPùb°Ê0b“dsxkÿS@)“¤L{e:D绋ï:å,ÚÂмwGQ`ì@nü«´à:ó¨a¼ð˓vg^ste·ÿŽV‰LÀ´­Á¥9¹W©oòƒl¿+| Onq"(ȑ5FR¹F,u>kmq¾“§4´d!;Â.“F*HÀzXÔsq§E ½æF°YU²*&éŠ_¹8L+‰YWi¦‚òçCÌ{ñ)š»˧òX’EIk‰£Ï·„Y‚8D8düÃ? ¼Œ+ìÌRbŸY $TÿB!jS;‚Á%ø’A% #†ez“|¡‚BQUó€ +p¶ÊgmHµÓŽr3ҚE4V¥ŸSErSÉíæéÃ.²ô²ª$–H9*$”ª‰ ‹¥¤šš,’þȑ·SZ).Zš1i|*h³K€¦ŒbW*hÆ¥í©¢z[‘á°ŠôE³^VúP;á˜Ø^©’ˆfdˆ3Šphvõ1µ½‚Ò™ãæøú“Hãx€¥o@ÁåáÁçÛÆ z½H«7»ÀáKô¸C˜}1+wi’²¸»·’Í)ª™#K ÖA˜ÄŽ1-êË*¦UœB)É Ðn҆>î| åµr¼.fVŸž+`Ée±2¸dÞâ,ÃC‘÷‘â*CT«ÿýÖX9k1ë,6¶o÷“‘…ô1088ú\IޖËCvïõÏètTŽ÷Yç:XóILfIÞ¾&=hï^˜'½“wšk–qBò1ÞkµË¸¡xjˆ, pAj ét f”Úæ)h0­¢qœRÙcG†BÞ“Ð ¾|ÊqÀ‘^&çæ6±h1y*ÒR%ª¡4ÍU°$ds Ãy•²? ͙+‚DJ8x¿Õ/·Ré´)óÒÒ´ÞU1 ž°OüØâµ…à<êWŠ.¢"—÷úxçŒÈˆšzÃFÿ ޱNCö,`¯BjFƒ3ßӏš™»9‡Ø}ø]èëjW>æÌf8õ,iãy;ό“턲zÖºBs»Åõ—°™wÕg}ï¢g ŽÔi­¬M}¿}¸_eØê!lª²ìOÜe—Ô_T'¨s ¡ÔXœDçÛùÂ({}E÷~˜uR‹CžÜ0²Ôj/´ ê4}ގ…Π'ÃIgä0RÓü¶îg—i$­Ž‰g“ð©hȝ ˰žHE…›6pX~@ÅC܆„Ý£Î(­ÿŸEÉÿ?ßÏ÷óýüÿóð5C§é\gkqSš»½žãÚèÏpŒ3Ùþ]‚EO·Ú¨]~àAðÕn@=ÂÎã*bÿ°¿Gü='ü5´Ëóîuûø¼ Uíw_p6j¥tžÍ4Ýúh± ôõ‰ßºKö~6§×¬qù÷ùn»ü(ìèøKg¤{C0z}™‹*ÿ ^gfa¡/Øìµ]=φß9ñ'ïûþ pfy@¡º½Ï+÷Qî7|Þ&Ãmìí;¼ZÙëò={ßäõñ³Îì\Šž±lëJ&rsKCFçC¥ÑÌ,ÿ°•Áÿõø˜gõÚå¹ôX8õ—öºÍ§Ùì>ÖQ„ñ™S0Rœûê÷=­¿ØMÑýMÇÞºiþèÿAÖó1š-†Es„çÿÉzÞ³S÷ò_ù$³?ûНÜÿqUï‹É(*½ù/ô^ð÷D]ŸdD>ÿè*½áä¨é‰µÏ×7ÿQUïÛ¨˜ûE#y¼ÇÚÿSÏ¨*½ÿsü…W¼¤b7Í~>ȦFDxäE2mA7cpéÏÁÙ–wù1½Ñ%ÇÞÆÍä‘Lp„c<ééÎÛÒgÞJ‰þ¨66ox¿AD4]ÑGIAO/TT±úÃÛà&9tÞ¨P{|#1€=¾@5k©ÝÄ%.FŒ\Œá\!E9äO›¢ªù0JŸÄq?6åaFL‡Ô(ҞWҞ*E¹Üøëûo€Sº4"Q‹¼B?ýcé–‰FMßb¨åŠe“sHOØéí*1†ÈՇªËí9 ÑáŸì8’Ââ¿>ŧH³µtßúXŸ°þÑÁŸY¸¢Èc¬ù&Å]ÕèÖb›51Ww4HýùSì{yY߁áàD£c\nVÂbæÉ vzôïbàFG¤ýðº6ªb~ÄíÜúª-iûü NE>µÊ>#5J<Œ¡„ɏö'Ø;ˆ|/#{ŒŸT¼«rxƒ8R˜¹EQ“  YžØqØ 1ªëh!¸´µ)j Íѹ0a ÷úŒJö Õ(Èw¥€‹% 0šÙÌ 2ÕJ $îûhåHèå<;0"vx »P hQŒU&ÌQö>û»:23»„éc„iˆ’>²€Å¿²¡ŷz.T¼'ºU‚C‘`F)»ÀjŸPzszìüíæx7®í9,œÌ@üj8r© +F+‹WÞA=×]¥!3‰j»Lòî3‡ÿä‚ @h‰Êš«Or”RD»ÊìKïø@ƒÀh•=ˆ¬÷^ }®Çþpkº=§ëAj°Œj~¢°¤%ÁfZ%î­,$HŽÕА<¨Aþş‡t0ÀÂÌßCoÄN=ºÐ¤À©¾E˜MX×F™øñðՂð%á 9X +v]ÚüꟋüdsïd¾©î²_û‘ÌgY󠩯ÃP›áïKU&Z(H2Í(ÞÀ=Ä`̓ý&¹ÑšêÍsäšþ3\¨G,™™¸›¶nV£±Ä=È·êšÄ)1f¨¬=ûG·f¿èësÕƒõ˜RgÿDßSŠÒP›ê{ÿö&úž«#ü‰¾§—Ä&úg÷¤Æ£û ¾–RYð%œÇ™7Ðè«uþÚ—ÅÚíöaóÃ@‰Œ‘‚*0 ZŽÜô÷Áò= V±^‹’o$ÅìP˜R0:ü>^qœ“ӞÝУh \»à– Ków6…@øà([-? En´Òÿê —YõÈ;©÷% øVxb4á€M.ff*;=‰~††·¢‚ç âϐh ‹™™ tUÎ[‹WEpéR[-O8Ý*H^æÂ^ôýƒC:Ãú'àF™R`ˆ¢ë¡2/£*¬”‹*À"û ÁFÔèc&ŸÑtÀ +h Õ¢L@SšÝƒÙDrOëiϕïtˆsàL$âJ­“ÿ·–¨©4b:…3¼])Œ³J9 ª•=‡¹P£~Šº~À•Ùçâ:1WNNL+£°PŒ/L:¢œ]Iõ¡ üF2ãF‰k·Ë·’ÎÁrµc¤zEM¾ÅÞu+V»÷^›d¬i%3R¢zƃ½Âûûž~ZøÈÚ"Èe™^~Ä£üI?’F1pеƒ0Šö*p„…|2ŒÑ‡d#=ÚßÊÜ`{¤ªï„z­.À“µNQíä vòã&V΍xqö.]ðUöñðgŽÈYŸbwrΰvŸMríwÀ"ÉTîo âtüž~8:Íq1ëyøòUG?!>ƉjÉ¿ä‘?â§~±ÖóñÙQDù„¼Ÿ'Ú}Ù%¶óñkJAß°ÊóÿQìUDm^M’ÕX¸Š'džÇ>f€&áw=[á,Ôï¦âox~Ãv'—*&€ݐK‰îQü?`ïTÌ8öÌPP'Ž/ØQBZ÷F \—(z2öúÉW…6úÚ_›@ŽüL¤J¡“®¶¢2¥ø$z¥~f}C:™õšE¹qÖí_†ØtÍ«­Ù€ó™U† û%»1Ørïè@½üCÕ\P£ÂJ B÷‘Æ®P‚•³³ Øÿ!e»‡Ù˜ê·’4K­ô¶ôÿ0ë±½k??Ɔ¶zbœqÎ3Égß=sÃß|þ[ȧK­èH®åk‡— E÷¹Ž®[@¾èA‘ÿÁ–Qª$ +ß}å¥!x¤».–K¨‡‚NN2‰h¦1î® +å/»ÕlŒI`_Rh|²3:œÊæqCwïúðÖ&*·$5ÐûjÂ(î9A•/rSR&úe‡EÔ(ÃF}›• ùàãsœ ­“øñ„®hßÚO[R<Ý~öŸ‘+Îõx‘¹€v9jÊ+S xþÓýŽ»*çÖeaÅA¢òa‰ +1‚)“;Ô²XBL2ÍÑOd+‚³÷¹è>ΠԚŒó¹YÅ+ôžÌ|ÏMžƒóB]= —@à[(‘¸Sßax8J“ ì`°P†!SŽÜ¨,HNÎåÀóD‰™»AƐÇC¡î©ÛR&hs¾"$í«ÕÏ®–¸Ì]<ñt¿;ߺI‡9GåÏ7ÖÌ=`ìŸR/&]¸­•ÎTã +;~.çeªOÏAð%\A§–wžG¼‹…=AW¤Üç'±ûìC«ûfï#ÊLɈ(”Pl«a r4ÅzÈÜÚO1>¸ŒJfõqîjôÑyìÇÈôÒE ,~[€Go¼$ëmÀxK@¹ý+ñòôI&Aj -ÛÍé‰|k„—;ø«&û?µ»ˆµ¶î#Öô»övœÅÎàw +Œ®žÙRãë²âR‹Øn´×ãJGWyeåþׄ¡qv@+J×Oö¼Õ5ünìÕ¤3‹+¿iÖ¤ý eìDtÂØ†qÀ5!dݧÆÀEŒ%ºû¬NeƒÇwqAœAॠÅ¡‡¦È,¤?ÊÚ¬T™°n‰WRàÝÇí†oøL5Óýd©#Q)ˆI,˜K™‚F¿XÌCE|¸•.b¹]K¯«v—˜C‘ÏJ†`°×͖=Ï +ˆHED  ø«ªÞ㤠A=EËæÍ ÷;Úº%Â5ðŽ±s#ZÍõ§ ØR,áe”q åsªk3\•JQª©ˆá¨²€p£*ÜŲPRtû™Åæf¶‰tÂIɔVpE#?[EŒž*j\¾ªC`HtQC!K}ÕHž¸R0è%¹ˆÆvÝÎ38 £Þ¿„øŽ0¬ '0#M°óäÕÃ)!›@ͪšâPQiò0dQ²N7ÅÆ /Æ]@«æ¬Tµs³«””êIvNt¤,ž¢oäˆËÅψ±OˆÞPàFcÈ }º N£Øçh›¢• +áõà$‰%èS³¡×Ú #¢ÀSIÀŒùD¾"¹¬l¨ž íÐ ÅÁ§ìm¿-xj€¥·‰F»ÒXSúiAçbâ„$¶dÁXRL$—ï|üO«¯ÏM8ZäuáS>X &8ÞP¥ax?Ä@ è£^’ž@3Ý$g„¨¬” 7°Àá?,¥Ì÷ïCz PINF7"–ÐD)wU¾Xh#ȶÉv¸ +©wøj’"íAYóS‡#<%G$R.wâñ }#ϔúEwVARå´}Ql)¤|¡pÿNȌ˒¤’þó¥:äéæ>¯ßYˆ6þ/®]ŽöSè£ +õ‘ £ø#yᢘJ«÷”‡åH›ÕFÛCq IÔeƒ 7Q¦•)MõÌA\¢ødþ‡Äõ¤AJt«T—2X²±XöRíAgËÇê?¹_Q·Y(Í~™^©;g+V Mõ„V¤£-侘HºêJº¦uȉ~€RWIH˜ ¬¡¿ñ)O2)¥bÄ_„ c,r4L[#d¿¸º½ 5^BÁøÒcñ.nŠg7u+ÖR[ +:7ÓJLJ«#IQݯò“xä/(¬Ô-9 ‹_?\¹+ïó[y0—`žÔ]8·^·I(K x@\ ,ì˜ÐQRDùÄ|ø@”º vÏÓ&¡ûŽ”ӗð³)mŽáo~ºÂ +ƒ[8Xû“ìMáH .«·Ò +‡ìù*õ•:…·Vœ–.—]çë\Ë1ud4QJ>ù̪ÔÓ.‰þ?,Fîø¾½öß|ù0óñǰñŒj¤Œ%I&íO±¹#Sâ‘:û]‹cÇ=Í­Y½ð‹;Þã-u ËZOÁ#g>Ù̪÷±T+®€{òo¡eÁ”‹iVÆ1œ€žÛè$¢RŽ¡ri³bÂY uÂ]TÒ|kHAú—ûȑ +ÁöGß&‡>œú0 IÛ= Ë×ß§¼× ¹#—û„ÿ¤'üñ?ò >ú±[ ñˆ ”­ôHߺÂõ@ÿÍá¼çWü%‰‘Öǁ§s*ã>øÊÛú óàÂþ—Ùüškà$³èÎä 1|JÖ#æÏŠœÕ¾í*NĚÂĄò0ù8ðƒàw#_üñoZg+åýƒÚ $N5³È.ksW w1~—fG,û"™Úò“ˆ”›öÀ¶á–‹Ÿ2%0I¬X5öô=É Y‹t +НHßĤ;ê&›üÖÐ6À €ôõ”ÿPñî }°1úP>tÓJTD!°†~Ã`Fh,™¬FØÇÞ²èªí'n|ŠR­Ž¼F¼äq!êjo~ñ‰?ϝ޽ÐUã~cÃÝ4X‘ú}ç¨}Or%n¹Â[¤€€w«`1«Œíª×ß6 ™ýûæ/3ӻ׌3¡xŸÏ yLv¶ ÷t‰ðBlø{º4œïöîìÐђO²A ‚¢VlºÍ²ÈQ´\µµå*^VÔGt‚:2$ÝFךåm뗛{­·(õH˜Ûi 5h ZÐ¥h+Eû;mP§ÏÿÿŸwd +â¿­zÞs³³³»3³¼^ò»ÆïEès¼>ô ރ¨}Û­¶í§ïto}XYÇ'rU×/Gm+Ö8œ$í,Ò Wópnó¾²m·,¿Z‰Þa:´y6uiWr.ÿC>…¾–Ê#KY š[›[åޝí¿`ÙÐÎÎáßBÏ÷±gû™±·ÀÈÈ$H*±LÙ*OÞmoF+mÚÞŽßÎ:Ò„ñÚ-úémxìéï)ànËk"Vá?AVf¥_™`éCåOä=ÛÒ]WÞº_Œí7?6$ª4¿yܦf·}.jwØg[´›Ì3Hê[¬JzÊDº×]H»¸±ÂzÉzwúDåނô°t§¤YîÕt©÷ì­[ä¬ëé'z+gø Û<à»$—Irú%k؄‘Å®Oä"àQ<‡ÚÈP)ìRXNÙ,êÎQ–_5zæˆ)Ѝ#;coFfvнû?Ú&®$é-V-¾uaê '¿ªèÛàÕûM€M~Ø9Dvôs·ÏeFÝóÑö© t›|’@Óœ£NpüÕìCI¯ga-ü©üBî·[§Ö÷ä»~¦+Föò­á&/GÏ'ñÝ5‚œö‹~š#?¢ß¦¦Èê|%urE{dÆ;¢ß¥üÔô8Ýý?±“Hæ´[ôõTd`´[ôâžOZžôÓćÒ/}HÞcæôr°þ[:ûk:­š~–ÈH{»'¥Bº2¿kÂ]K Û¤%À%aôôIÅ p–\ —~»9¢›XÞS3}{&ÎØÅ?jX§uÌøkƒÜÂW-¾´œŽãù{îOóÓ{º/É7ùBöÆ|I‹^ÄóW8š@²ŸU—ºÄÖÝÑÿJã´ë§_oŽuû”'xТýԊÔ_¹‘|ô¼¹hýÜIiâÝÁÑ6úÒö’Ç‘QÖÄg¹¼¼{:Øñ1 t_zz +©Éfý>éa…G’ÚP¯þΕoÂm6¢>‡¡O;Å ×¼O v'„î÷Ô_ ÚÝ [G¨áº“Ć·ìŠàRí«]¿`ß^‡‹Œý¶ã;YøDván6Üú‹”‡ál–=XJ.ФA^~r…ïH­>švÝïcaºW4~«×²LS ÆÅ"ñ±E„ „_&lY^s5ãÁX:@u©.úé<¬MsG¦l. 8©‹H6…33¤9F%ŠÌ/Q¥ÇÛI÷,Ù÷ÐKä²Éäٌ^dôîù|&ÃsV¨Ø:n¤Þiµ‹ L½4Øù4˜Òá%€êá/¤EØË„—aÅ«…é³ã%8#°\›Ôiî^É>ñ¹&ú¹%!ú¾Íû늤' +äâ¥Âµ^ªC/'q- ß­és(ù%ºÌzßfŠÇ’¶}n²NÉJ¼­É£"jv,܆N$­Ã:[)œ¸Zä›Ë–®\~Û9RÌ­l”@u–­aUämuoo¥ +þ؀êÒ !—Q^…Ï6e)‰SᭋíB›þaÿ>Ø;­Èä¬&x\æÅ°k[z0ýÄv¦þMÄv¦ó°§Â”n,½^NËW&òíª@¹5ÉÙ_’—ZTèé̶XN­Ûԛߤ½a"óàÕï ó˜ÊwÎ?½¾‡u +Î4½0ÿÔãޘ؇îšÁªŽ•õïâGdm·¥÷ö Xn—¦çíi·.mèüš]ë5/yèo ”Öë ô/¨±|xc%¥Ö +ûè²Dÿ²¾þÏ_ t>6GHçüfk_DϞ-tgøA®ÿøÂj¾|{ÿø´³_ð·…J[Á.êÞ:-g£ð¾]þ·¹r‚Ú£ºè±ŸeéGÃÁ7çÀ}¼èÀv Āüpï±¹§Ø·ÜëìzÎ2F½`\Kñ–Eà=›íîé÷Ö}ß¾×>Ú>u˜í#üSü£üÛÿ˜ÿ¾ùŸïñ¯KoÿPýw)êàøº¬þkìg¾Ç³«|³ïŽÏù'TóÔ]Þ¾d ‹ð¾F;ËØïr)ÚnïGÐ~}/Iy‰—¾ßGÂò*ý´Ï™ÂäT?÷>†Jªó+Ïý~®›êûêŸêëàÃýOþˆ ü¬çÛw»–lª?Îi¨øOüˆpº_éa1o€þ˜·Kßs¾ªzûõ_º¡î·ÒäÁ6+¢q0_ÆDø7¤A_ƒÿX€ŸÜB0.eÏùòÅ7­Ý{nã!­[½-üGë|„hZ¥ˆ]ý}:À¬KׄqdÁޒ{Z4zEJïŏ3€Ø©!dÒ  ï÷ˁc¿~·âﳬHœCH÷®öW÷¡ùAgY€IáÒõw÷§ÁÛgYɧ].ìÞ¾üEeRuë¯ïAγ|uý:X9¼Ë¸®.IÁñrKŒëᜇY—x³¬ÂËèÍÉ3ë.êA$žëó¯Ï_Ž]ìoe~\á.òÌÔÌe1ödNQ};ÕÝiÕ,ÕøöÔ×à$t1í¼Èi‘NIŸg“Ž—†‘¡¶oݪgÛ¨öòØ&ÄL‡aÒþÌ'Ì'˜Cá$Uɵ5øT»¢Ó>¯)7¨ºÉùfdÿ6–~'±Û¸ÌZ¢nµræ<ïÃð †OÌ|£Ù +ÛNñ$|ßzòl¸‡‹¾f3×~Ìø-€*<^r¹.ÍÛ´ZŽFù߬‘ÖÔ@W•ƒ&YYï5•• 'ø¹±'yŠ¥å_³ …´O+w.—cýÉúM6êûœ+ÞzÛËù†cøy·–|uÑuEi™°$òX-?w²ObZ¿̵_ˆlD җiY‰´ìRÙ00 *šY•éH=åJõVîõ)ò¬Sd¡ÏùªVÊéçdØ/KÝ'¶ÚŸ¹ßc$µœÔüö(õ57"Àz’O_wc‹Jûl›Lå¿l7¬V +¤ûLŠA“9nù䞿ºPaí#áöˏÝ}ȟ€Ï³iÕ{„„[ýƄd›£Ô3b­î+}Ë:Òy{ê>¥(ÃQQo׍ Ú¡5Æ|SÜJàT6hîZÖb²&ÓÀyÿL×ú†ì• oRµèØh ƒ35ßîÔO×}¯²fäq¯æò­Ô¹éóÚVÅvÅnðˆêA©˜"PP³à…¯„ãD½ÍOQK3¤Ä¤%­3Iëd’Žt/ç[¾ÅU¥à‹!Êù0`6ÁI~‡)0¢ËÞÍ¡eÖ^b9Ýk"Àõ'Âû^Rú‘ºøË|ÓN“Ö[ûvãꑉ$©ÌOáÑåq-¾ +Ðä8Ÿ‰6Xýv4D›Â;TõÛ­³Y7-w™D¾KR^&&+š}b_–™o‹;tŸ—’Bý°ÞHª˜GXWxkڕ4ϋ@—ܯÏdñ;‡-m¬ ùË¿æÚÇZ?3c¿œÌflmà]è’_–4ÝnˆÌà=¢-ÐGRíl«¢‹v¶»¬»Ð“ÕÍ® ]ËmúÀ#¿²Ÿ}‹ß®8ž×݅mñŸ2niÿ;5ß)˜YQ8¤Ÿ•µñÖú)v­z”ÛÞ}w9Z›œ‰gÆ­ÛJ²Ë¼î5Í~¿zšã;ά!W× œl—ƒ ÖD]äï³´¶ +hõþµéeQ/|»ÒßFøô¦×&B󒃵˜na…øï‹¨Ô_ÝîÔ¾ó‰¨Ú{äýFÈk;;úiÚE7Žù?~éIYu0ÎI½Ä«ìh¤Ñ3ãG&ðš¿7äê wØôö9jòÔI>5^ƎES:Ø5ëJÏÑ¿‘Hε*u¨jëي®Æãdoi¥g蹉4+’á3tSqLÂ/lú”h“\+ëÍ©{ +ÄNíÙØ$ϵ„ý°o#ºæo“¾{<Íì=Fw³ö`Ioi}èÏ­{¸’|zðP—uî/osxݵö·¹ü çosùEI#«Ýr‹ÒÞîyEÏ}$3½ïüy?¸„ä<,ÚáéÑøW¿gP©Ô$†‡}3x f¦ÅôÒ,ÂÐ?Jé¬È^M4ýUn¡}äú <ÙH_jšçÀi¥¦ŸÁoѦŸÁn›‰«Z*n?yäi•˜¥ðHùNÚ,e*¾5ß0µ¾æŽ{§I#oò5“¼f²gïéxD;Â]í'¬MJØö‰}ª‰´»z?4—pG¥Yæ‘I®MXF(ÂOÕK‹«Éà[2ÝÄæá,’W¼û8—¼'}í-ÎÁ»Æàôü _.–~ùì©xý¹:z^&Èzz[­§mû®ÒÏû«+ÝÇçþu܄fux–ßΉ/âKa¤‰P´²½Õ…¦zÞO½*5­‚Ê{Llÿa„|«ý'e)3y¤é Ør¾«ÒPéz~+kXˆX2\C!–u.%±Q*w>̛“™”ÃÅðCz+ÚúöÀï«õ¿bÂÏ ž¯BÎÔËúÔ.z<<Ïb»£Êë\µm÷öÒ–™ þeÎÈ®¶óïYœNý.I¡]Êr×ioßïzX +ÚÁM1®±ýðf³L¦ÃÌÌ{ ä=g>RX¡­í4Ÿ¦ LÚhØ8öëRü¯Égꥨí®ë‡ÃX\EðR·p-_‹Êí\µJÜZ]Í{´Z49‘h8zíA‰l>â#LJ–"EyꨗËÌkœµð« ë#Áü)sÈñlvüÙæ*CÞ7^¾Bø¶Ûä¿í”ù-®c ZL¶tZڋrØÓåšå¯åÊ%T«_]3ñ¬vSk”K'â? nê͏ïðÓÜÆÀ¬ Aÿ Û¯º·¾Iò˜Y÷M¿u wÚüÆ·3cèAf•â^—Ì»6·™‹áÈëg߂~þ’ “ßô힥➒î±üÛ¹­Ï³ÀWL°*]Öè0 äßS€$þ»ì•Fg÷V &÷¨Ÿþ¾¿Ü–Ó·óuEÈðPîehYÜIÁçV '^‘îw³z>ýõoGꗺOçÔûíêvÆã_9£ú¯jó~÷îq°‡\u$Á^¹7@°Õ¤X 4¥j¥'1³.¶¢4¾žþÍ~åeÖÕGÒeiÙÒÃË­äـ3£ËK­À$š¹FtñëjYòæeÖ§WÜK­Â³åÍ:íât9ÂŽXLñEBò“ÿ1n°&=v‘(˜´/u2i¼k‹Ë +]ÞÛ×îÚVL°‡ !Ý{_…¬—;9ö8g$âs5“#CH¥ì¬êgÖ>°énwˆÖyjuyu‡°´úÇËh»†Wn©»Úü ¬võ‹x8´’‰»²{–—UD¶:+oÆöÖz{5€¥î‰cü?…´¯ÄzõËåÍcò²æ±ù™´¯¦‹.±þÔ±÷}›Î½X÷¾%cޚ±ÍM„7ö>cœJÇÕõkWÕ¬}_\‰gŸ ¶Ìa`k+)`qáGŸí]ä;»’`íòcÜp庸îôNÿõ ÏTK­‚°^¯ô;ê"À^ÒZ;ø›7jÙŒL_êÉâÿCoÚSžì¢ýÕÙ¤lwö­h««O<½û`—QÎD—Õ^#Kˉ+qï"Êॵ¶ äàn&t0ٖç嗡ò/è®Ù²š=®{ ?'`%d&ɧ—_€²ñdR$=ß\ÔÛJßðã9Ðmâo|Oy"ðώ®Lh–²¶–Â_%=A¤¿úՐ|x–}}ö5ŸS|sO®™[ÕÝ, rÎVÛfm+i­Ò?ùhÖMWš_M9.Æ­¨$’ý€ Á[4`ôë+ + «;ÎN‡[`¿ã>ª}f¿•¶ª¸¬Ö['ôómË­­fF_3N½<½«‘=Õsý8Õx™9÷¤U•+#Sg"•!&%”Èxù½ÊõäôÌÕèuÚH«Yœ¨fÃ*R³7J•™ºɄÿïæüöpS[AA+´  “{Zӆɵ™Î¥/lG|’ν~!Þۂ‡ij»NŸ6‚5ŸÈÆûqàüü:>]o‘ë]Žî©…Ï-K7DõS ô{J4•E[j˜\º×>©*—}óä¿ý„­+KŦäÍëV©{è%û‹ûüú¥e·›@Î~U'}òÕ%ÔÞœ2Óñ/þ֊uR'1³N>âRw³ô “°Î™2t;Jô¯öÉw¥M}¥šÕ2Žì“²K •œÈÊÇÁ‘ÍÊÇÐHÃJÇ‘Q+–ÂÍǧèHýŠC· +ïäHñC`À§Êøí£;¸¦Ñ;›Ü­Rg—àOžÙ¥ÄG¬Öú}.óm®nž†ÛEb ñ»¼Ðâ]ñ‰#þJÛè6)üP­¯oÛïá]ÃD%œ‹h:•¼[êßÚá·ê gfrÞW·|>L +7î¾L…ëTÛ÷f¶V·ÝSoìä•!–ävEl°ÙØd6µÎXmmÞÿÄH¾6ƒwŒ¸‰Jiäèn6$Sâ=Ócùí»l4o)Wï½0ÿFÅVswƆŽãÔÂ-ÛaÔµl:€>ÆEÐhVåM|N“%ùVïÖP¶M¼EÿÍX< y-’ú'ÉãEþhOzïºO{¯Ið}®’Hþo¤Déٓ±KU…Ÿ t‚–÷2´lÏÀ—çæ8 x K߯3¤c§Ä¡üyÕ< ¨®møÿû#üµ#ú¯ö‰ÿ¥ý"Dw}=ÜH}ÿ®î$>ó úŽ–tH}û›¸ûöm‰¿LÜóûbCïï=¸ûãnbCîØ13û!÷s‹|ï÷ćßâñâCïßÿ”H}ÖÞ|Š"ŸÿäQR—Ê›¡§öÏãrO©ú+Óêv}:LØð»ã)’>|K¾›ÝD‰Ø¢Ý}þ4#áî¾Ü쿛âåõÊw¶e:fìOcKëäjù÷w̯¹’p??ûh¢þÔH¸ÿވÆ÷¡~ŸÎ꾯i¥}ÐYmyO³¦Àúkä[ö6±wÞ]?öym·ÏçrÛï½As3t7¬ 2D†|{pŒm~*ÄDïA_á€ð? cÀþ€‚ćüKHÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿMario.03.60.1120.0038G5.0018dÙT“zhJDÎ öؐß_FVHÿŽÿÿH±LÇôm»ýŒA 3´‘ÅGx U{@|’øa’ P’ XƒÂûïmo¿ÇÊÔ¨ˆ#V¨-j¶ªÖ¢´EEÊQ«klHªÕKVµm¹J¢áª´GðÕ@EA©ÝÁÀwpwwÝÝÁÀwwßwwÝÝñÿ÷¿ÿÝ}oÍç÷[õ}_àõ¾þýö½1cq/mó}¯ÒôÄÖë%ё˜¸±ÒɤdÞ™“¶vdd»I¬–m%‘’øV_ i¬šLÍ6–M&¾šM&šÈxúoË-“F[¼,Ú¥à½×I$–W*«~×VÞ·½óÔU÷ÚÆýÂl´ÚSŸèN3¯±{=‹ÖVúL9¯ Íu°ôªU¾wÊz®;‡ÒÿóK¥áé_ŸÄìÐø­õ÷®j¯[°t5{ZÞÓÍÃ^¶£N¥N7õÐð†_£èô¾ûú>ÿÌûaþ£Q™Ñh‘@´-®×CÍò„}úünbbBC7Öõ¯Û&ÉäAXó†>Á`”Íf¥!! +{S“ÛU¨;0틯ŸóúV*q³b X¨Ët]7ʽbtiÍJʓ¡†ìû?" +Àg»Žà¦Ýzô~Œ;0üĦk5¥Òéh¹¿ËӅ©T›HÈÍJÊùPVDaøŽ#A„ÂMJJã +]Z((,‡1Ì>lóp| Áàç&&&女ø  +³Y>>“9œqÕãÐhit¸nϳ?ÚO1˜C3|Ý·hëåð™6ószLÞo;i´ß7MÐùWýï{Ðap³“33ròú^-´”‘ôgï»ÆðÕY™`aku²e¢®—IþS§ÞtÄöݱ9"æç;ÂV˜Bw‡ðëAË¿o;Ë·ŸÁ`•ûY\®ZÅb(UaÙ¯öւ·Í‹bÊsÜñSÞrp¢ ¿Ž×µÀÖ+ʑÈäMÇ㽇°?Ã#í=¡ÑG£Èdz)òrQoÏÓ:=qÅEf:NÚ)xøù,¦Q-¾7“äô­Ûé}ÿôuîöĤÖûoa%1ú¼»S,õ¥&̝|VfŠN©ŸÙÍÄûJïÛ&É£ÇãÏöm''w©ÔÞÇêhsïc£IXhm/ÀþU™y?´ÐæsÂV«Dí¤²Ùb„kï¦ôÎl(ºæ½×”À”ÆÀ@kMµkq¸µ‹‹VDzí»Êg׀Ò +½\œÄ† , +óF6½^)o‘°00½—dRŸ*C ƒ‹ã¸ã¡ÀéŠ|| _R[…õ^¨¹ECÉÖ?”çyÒ¡‡ ÃpÇûcý±žŸ$!Q¡uº•]%<†óSH£­¬ddãfÅ5ø›Î[=ž9âç:þ¾ñµík¹T³,˽ÜÛý¿9´Ôé÷‰¹\‹éh±¸Økm¶^64د?ϟ6¨ê—X^DZ!›ëz×úGSul§¯ l¶ ҐpjuÍ­¶ÖšÿoáÁ[F†ôJ(~Ó´ˆ¸\ +«ÅX±s`¹nX¹EeD)þSµxî_—]è­÷êµX©Ï<2YFá®+%’’„³Y±þËÙ%·*î3¶«QC ý#†Ø.S”bRk}¿• :ˆýL»R̦RlÉ×Z̼“ªg÷æy—¿a°“ޝ×ÏöËt]æÅ±=ÔÐæ˜Á* h–göšÏí•h²Po‚à89¯cöŠ˜œÁ6íão7˜«¥Òrb`ÜÂ>[viŸL˜ÂV«DæÊ …€>h–ˆˆ* Õ¸ôù°ì8ž+Š»lÛ1~ry|¹I¿ê=B-ïí#“ÉÐu\gú°Í*FÑûhíoKÇÇ͵k~ôþFÇMzeەK3ßß³à¸"ûÅI<Ô¤¦‡Š*jÊÓ¾ùÚ>®´êqâLæ3ù÷/½çZ©¨Åñüy~´º\á¸c¹~]K¯8œKͶê +ðîú\¬í¢Ð«uÙvWêm5`¨”Wð¡| Füeâð_ž7’ä§­òr\’*Ý_¤ê ; +¶òWÔ˵,Êe&̝u¬Ë2uLþÓìÇê[uãfe™ý¦‡3€Ø{}¾ïS©”!ŸXÏFÅ×5ì~ÑSžíûunÐ`«5—6WÒÛ³Lú`5\xcžÁÀ| Þjh¨XW‚û±ìwAèsNˆZ+î¨mÊs¼éÍfVcA s6T¹Z*1܍4XÜlÔ¤¡M—)a°“iŠã8ś}KïyTyR¯Úö­b¢‘unK)”¿UªÌ;=?Ûï ¯'íý¾—ÿ¿Ú<~>ŽÊúÑ¿'˜ÌæýL¦#æ?l›'Ó²¾òW¨]2íK2™I³']k2̝S?½m•ô¶ëÆ Ê%Ó'VڟOEñ±®h¯uÍ{´TÀÉer®g÷-CJ+4Ϧ@è ;RuÂÖësÙË]®nZXðªL9[œs·žÜô¯ïûæør®kÞrsôgѦC˜æ% àÛÍÍÌè´S“3*͕.U›+ø®7S°¡Ðô'xÂVR‘=?íCï^Êþ^Çc;¨t"C‡Rþ¥¦Ó°X0Ü?zÜ·,ÇKÒâý¯aÙ§í­WL)ÊÉLž\è< eÞîˆd•‡‡(©/ÁJbš4<Æ3»Xî£~&çsS +«í}ªNKœçÙ_a·ZÊúғ[í¼„žþ?{év¦e)”›2uÖ³,ÉÕ3û7$âZ4–ÏgŠL¸ýÓÐ稌”K¦N¬X3Áþwç8³Uè½M¡MSÍ{´TÀž“ÅñgÄ¿UªÅ9êQY¦}0@`ø> ¤ÌTQÆÀÀÃ[-’l1ÝC|ض"æá½_«)ÎLLE>¾Å>>à_' ÃpÇâeϾ{6Õ©VcŸÀ`ŠŽ¯Ãœijª»lÛ6nÏgSkµÄ\.ròó 9Uٕ¿¦X«¸&Èò'Ö +¼ÞOÚsËtûßv=ŽËe<Á|k¾Ó´ç;Á±ŒÏMÓ¼ÔÔÆƒ@OPœÁµ fÔ¿…ŽÇCö¤OmÛ¤; »5¾Ú`¬¾ôž_.ÚNL¨ô†ìû8›•Ȫé'äxƘ{u¹Ç‹q¾ß\co—Â浌Œaè­÷½Ïsm#"L†ƒƒ(ÜÐap¦Ï›³a·‚å¹czîk%L¤Óöل•ãõh ]™Zpodë¬fY“ªôHd¥üþ«Ô¶é¢½›®¤êšß©´ØN³¬?ÙL*Òè_lðѸêý}<×±úö˜j#/‚:wlžÃ°¼í›bòu¢¦}ˆ ¢/ûÖõuºÌèt%6æ±QQ׻ܴLJ0#¸.*ºf´šBž)Q”Œ“â^ û3îýÙR[7--v»@U*‡ÍËt= ÿ`¦ ¯hH§a¤ÍæÊwåöä1„\YK•]™[ð'T<«ÓQíp=C¦Bùºî«>û¾Ñ´#& _±TŒI<÷[£MŠõ¿o;Ì}úý8Ù´–W*âúRþ‡eÙs]_W+ +®%ú6‡f·Û^ +ßö}žÍf•††S¢¯£Ñ”8#±0w՛Hȕ+²yŒÆ[¢è¦¥%%¢"L +ÔÆýëqÜsÝ¿o1!!¥nÜ ß1Òô¨±’Ãoüü­™$ÊM?mì$¦?V€Ö%žêpodë¬fY“ªôH•ü¥†Â_`¦þÿyô>‡W©m×¢½å•÷RuMwj…B^><ÿb’QFÍ´PPG€9O5ì~³L +É¾o‘׫ÑORjVULÁüït`œóvݘ“®ª™÷p`ðp¤¿Ä̈…K?ì=±â1 â˜úbV߆úŒÈˆ_à½Ïs)j¯üF?¿©–†ù ¥ÛÏþH+~¦ÓJ-O´¢õŠfG4nïS©æýç¼uÜy*€äŒÿ¿ÌèôsR²²9ï_AßÃ׸Ëg³Å"z?7ÝáÙS­;é_„•À¾øEÊþÂ).b,wùQz.m«XëÕê•úúŽ­nK›æËƒ‰â¸¥|KÌ–ÊçÍ;·œœG¡C»Séù{ŽG'“?:ƒ/r¹`ø> DQæuÊSÌDKK@U*ˆöµ­¤¤®ûFÐãÍkجJ³$øöžgæ1 *µX »n6}O_ +~º­OKψÄ)èˆxngœJ½gü÷½÷¦Èc+µÓAâMɟþCïtô\õ®õ,˟·>Û¯¾r.V˕J,³­DñR‰Ä®‰µ¬ôWEiYF¤^"|i f.ívsÍR ·}ßéRNõÏt痖ziŸKnžjež”X획R‹;¥÷¥Ù²‹Ñ²Û¥è¯!·ß=犣âr£´òÑõÏJ#Žº$Cß þ]w\~‡eÏÈr; íªÔT³?ÔªFƒa¢Ã~·[rˆã•g/ ¶Í³Iæs'î¢.7km¶Cˆ:7ª›5¤ÒZ¼ýWqþÅ÷‘+LÁ*Ì¡zÉs|Ùñ3}o[u§Sˆànœ @ý/™OG`°̀۶è{}¼ì…äy®jÉdB"]Šãxם«YÆÍ‹‚W\ ¯‘Yè”×3%*ý¹öÝx…ó‘r¶Qgt¢’úÄOtN%tM­g¢”V•ê5"ñãZ•%¥Èò%Áî‘KŸgýÊIþZ1žëðÓË?QLú[tóV–~;ðª5ïQg}C2™Áø(½„Û¥IbCgpÕÔä r$Ÿ|.º$B¿ûUª•yîß·OV=²ÂÖFOñ3ë݁'͇a cYBFÑat¨s*Y•fI®•‡‡*€7ÛU*Dø F#‰âNˆ,o'ɹæ¿S)—¿Ké\5sµ.j^Ž¥™¡æ¦!|Ô\­”YÝtR_ÄDñ]£C+"ml6ô)zHÑ¢|k\yéîè©'£F3Ø|ÓòÏ^aimÓÍZYéEŽèê5u"ÕٔΠâ/Fõ·Ori‰ ¿ÔªW­Çq>©H°Šÿþê$›+ë¢D,¥+ó““ù5Ž'‰R¸]7HuzvôXÌa|›ÆÕµ掹±ÿAÙ,š»+ð;~Þ}#ëîﻫEg®qËK"øéü’ÿQØM‚å¹i÷Þ¦]m»r«#_¯Ÿc]ÛÑÕ34<ÔÄ/š‹•²‹;®ŠKøˆž+´N%dM­ˆîvŠÒêQš×»³eUI=1ŸEe}y…¥·O5ig¥;£¨ÕÕ6+³)œÄ^ën𠙐ØeJ#Žº$Cÿì–éº~“ù¯Cmßê5xèéŒþ}þ¥Rwe}Å Ó½5,Mr¹)áÏAÁŸnäþŸíM•ø;-–kI¤m##›³ÙÕ²¾N¶m«S@r05ŠÁô¹…ЇkÞç¹ÐsU´áªz.ٗ|ÕâÍEÊþR,ï¨E%üDOÚ'²&ÖòÊûÔjGül¯ºE»Þ£é²¾êYëÌ--¾Ê÷’ÏJ,wGQ«¤Yß¿f{éÁ¼EèÞ¶éEÒYØ¤5ȐQuÑ"ì[óñJ­ Ç­¼EÂà_î'Šâ—íØOS±–Ë)t÷¼ë6££Ú`órÈæé3y³œz*5Œ¼^Ù"Eϲ¢S9×uÅYA¢@Ê£}JX¥Ü·#G§†¦¹î$Àíû~nÏgBª«•<Z¶A]½S2Bù¨¹[(³ºQI}b'в'º&ÖÃn²+Jñ‘ñl¯á8NÎü§}ñmm$ì£ú~¿ç},õéŸKnžjÒÏJ,vö£U¦R»2éÙ½EèÞ6ì#7ï$6ÈÌÄøèȎ;‘ ´A ›L×UÕPtUїwe|ñæp}GP¯~;h´)ƒáø‰´öÑWÝãx7¨?–‰[°‡ÕÐ@âúUjñãa¹gK;éxWˆŠ{:]&iüÉÒ7-)Ž–Δ/5dYg^Š–²Šêô‘êË?^Œ:ÒiË:WÂÊ î”VåBô2WXóY_ DøÞ¡üþZ%nÂWA4uôªÕâ'ÆÂ!s¬\ªüT^â"žÎ—IŸŸ±›jÔ¾~>Á`SOçmk;†~ö©îùY×¢¥º´H‡Yeǖ~½u¤Ó–t¯†ŽÊû¤VåBô2WWÿ5•úOêÏå¢Vì!õt‘úúUjñãa¹ñl¯ëxWˆŠ{:]&P¶¢ +iÕõgfT¥™'˜ÌØbÖDLR‹,ëÑRÝZ$BΖÑýYgëч_áÓŸ“¥|4vWþÙV¡z+‹+ÿûÜŸDøÙCùþº%n² ¾”Hý:UjÊ'Ƙge÷ù¼+(Š{Í.“ËX¬GTBB®‡áÍ㋺ÝpUšÊíºÎÍtYg^Š–½DˆYÒÚ?­,ýz0ëI¦?4ZWÂ͊¶4¯ýåBô2WWÆÿ»DøÞ!üÿ]·Y_]?[J­YDøÓ ì¾ÿ!…eOy¥ÒzLîu ™ü߷溞¦yO­°ØWm֓«\s÷‘Rר‘ :[Gõ¥Ÿ¯Fi4Çæ‹JøY±VÂ*ÒÍBîä®,¯þLÁÿx‰ñ„Jßú7… I!U¿ý”Œ|‰âþ?þ²'Æ+ÛÒ«_|¤^Ɗ–ø®W_,ñ¥¿¿ñ¥¬ÿ“K†Àøôª×þÑxPRò%žþik8Òá°þ}&›ûZMsçi=O‡tÇWëêú” ”.Ýh`=vºªðúúM7ö´šçÎÒzŸÙÅhï»éèd(˜ˆÒ…ÐØ<í&û¾ˆ +?kI¦ÿ¯I®|í'©ùŠ…‘èÔ0QԆ”.€°¿o;ÉL€mÀ0ôŠÿå¬V%T΃ ?Øôâ&_H‡™Ÿ¦†GôÔ¤¤lµtºmîÕ +ùU²þÍÙìí¤äÛÍMHä²F†Û1·‹éÒi¶tšåî–•X¹ü™ü«Q(”Ë(ž*_{‡1X¬ŸBøÚêL¦`Èär'²²™žŸ§žôԍc9AD’ºu÷“8¢«;ç~ÒÖy,¶[#ÍsN–*;¯¬}ŸÒÐØûí÷çé|© ÒÚ2„øØÎÛ¶ª»Çßïç 1÷ëñéV„ÿۄ³Y»Ÿ[¨Eaè´¡u‡f)Lï葝Ö´Vwõ”ZÎK,ô­Û«Û˜*>Š +ó¤Ø ¨x{  Û¾jþr‘\@ÿÎÚ­E5õ=¸~{E>¾©bNjiäé(–«ÄO}½åG¬ª5«SS² ‡îJU7;œ5²Øk§[‹om²OÖæç»ŽàÆ ¡«ik>Kœç1œ"ãÒz@ÀŸ ÎSÜþž‡Ÿ§”G£zrŒ²ÐKÇÛø™÷*@êòÏà°HBÉT[ Û·ŒS”ݹ~Åğûnt …}*µ¢Ò…Öšt¤Eiß¼Fw{ôm©Tðw÷ÂE¬Ó¥–géöJÏÕº‘¤ÏKÌ-Ô†Øæ¸÷b¬à7Äq,0n»«y¹¹XXUöñ}:M7G¤×/4{ë?À¨‘Úðœ"«¦‚=·£´OÀB™XÛÞW©t´%´6/amv²¯•]76?S¢h6!GDžï´í&’óŠ»-¥¬êh¨'3Ì©îvsùüÁÍFâ8ž'À‡ Lƒ$Jk®Ûøš)Y¬TQ@ +°Õ“÷áT'¸ŽcºíO§­¤À«PKE¥ ©vztO¼ûÔgu:^Rópÿhј7~¾¶ùºn’Ñ1%Î:jZ‰…¦CiæŸûyÛ6ÅmŒü gøÚõ{ÇqӍ›i3™ÄvZž¢eôˆyŸuL F’ñÑÅK«}YÀj©mÔ´DB.Ü-aE:M7G¤×/,¯«¤P‡ªû©7hŸe}½å¢•tŽO&zE±A͎¾_B§ªõyô8ú\ ÒÖsGÐf$$ +¦‚©õ4âÀôߦRêèÚܖS)s¹«í´5Ûæ,Š~§Ú(»WK¼ W}£hS£ùŒÆ9ûyÛE¡´œŸÏEx^;:Dgu:^Rópÿuzbï܆¨dûôËqi…¦Ciæ£O©Mò°ðèÐèú4L¾‘3î÷[âé5ɼä å‡\Ò)½ïRÞûI¦èôšåæ–Â¥úv‰ñøž+{ʄ é͈¯h¹Í¹ÚÉ\¢²oÔÊb)ÉN–³£Iàí7SÓ[U¼žFñ¾2Ë932ŒŽ»oâh¬¼lj0bI·2¯ÛŸÒ©zUká»6<_ƒ¨Y^3º/)y¸º½1 YŸ)oeyþ|§rRS¾Õ‹Å¨Œ²ûéǺ˜[uÍB¦}Ú±\‚Êü'YÖ |®'%”L¿ÈCÌÜÖbx´“Eyz(Mhâî·UÞ©ß͉®WÜôé4ÛÝ&¹goøÓe}tOމÅ_oyQ|€¤s%”ÊPÒÆUUª¹Q3Oª~íÅÎwß¿oÊô¯Ó¥¬èí]h  ‹êæ:N“Àš¢r®w]YI¿Si¹c˜WÑ®Ûø—=5Sê0cÞ·-ʆ´2û +d‚~•õ´ªÖ-o vn‘Õç~õÝN—”¼Ü?ߙ¦!.¬¯åìv3’¼´DAÛóŸïmPL.ŽÊù¦iÎÓÜàû¸Wø.S”)¯Éæs*àS^"eþBfæÊùá•¥O)z(»XÚFDÑ8’®íÞàÿ§I¦ÙÒk–vÿ6W×DøÞ"x©}èê)¬98|= «²¾çܟc*KÆÕµž50¯ü_hÅíßiÚg°¯ù,’"^÷KYÚ4Ä×+ˆÂJÊ;Í&“ãî¹ëƒs—Rs)3Á>˜òvþ%˕(¡ìò¢ƒrƒHN³¬>žjÚUkóª÷.ÍÒ3ºÄïÙFwR¢³¸º½1 ue~cA )©Ûþ÷½ŸríIê&GÜ;PCp`@üH¯þ +³YÊóüùêñj—*¿›Ye|•þ2»]W0~~ý¬\[œ•ïš­‘ãy.I€«Õû+iÿÿKûú~õ2˜i›L´DDEÂáúúzÜRáZ]hÓ;h´€ +Šº]8ÌÚm'Q’ÚZÎÿ³ìê(ÖëqËäêS™Ñh¾<Õ©t¹xèæÒ27j…Beˆ¸ÜMSÉ{omHŒ ϹXke°ò½—dŒàïsŒ¥¹Ošêz—Z[¾¯H;ÄÒýÖŸCæ­EÖ"ם·mÂpœ!÷ÇèDÛV³ŠnºÓ©Íc#J>Ú4^an¤6Ç4ï'æ%ãc]¦«À÷Q_ü¯AÐOx_(èï&_/ó4t[Ïø¨‡·ÛؾvT/kÑPõ`7%Íó}Ε´¾¾ù(ž+6X²Ö+àØÏ¡G'™Ìåú>ˆÌ_ÇHaðçáö ðSÀ•NÔL¾–³šzÄ_H¤fU4!cUÙgìÑÒÂîіVͤr9Ö®zD`mO‡;àÓÕñ#2°ððvK"2³Ùö[ÅáLºö›>ʶ¼ož¥7k&ŽÃ³ñѝÝZ6‹¬EKOSÆòPY_>ö\–W+ m¶Ÿ^èªW êan¤6Ç5M1-ÁGɅp øPó0‰„åÇiw5ÕõjiMüÜܤG𿍬>l; l GkÚýȾîû¼}öû6Õ©ü×óôš?ÜFwQm •åaíÖéXxz +ïÔÚns®ë”ê¦Î÷D”XŠ4ØìEæ™ §›q¸”È59-€²“¢é± =Q{Ý­m?ñéÎZðP¡^o[ÂPx*ð(£ÂW€” + ‚‰á%Dâ¨<¼¶ÖÔm$mnlÐ×e`¹Û6Çi(Ke¾[%u-²Ù.ô’OGîÏÒ}^·Ùö:ÎËûÓ÷½úß­íݤ§­íŸIûÓþwõŸ/kçzž·¶ö_½?IúÞÛÓP±­úß·»Ÿt!vö{§ xXÔÎ0&¥»cpœg<4!v1¸8™G€âppl]Àþ§Á»u’÷{’@ @ @ @ @ @ @‰©¯ˆ²Ëe¤ /Ó`\V ðý_«1G‡3”Êcý£ù%}"L¾Ÿ6”›Õ÷—Ê(ÿ¸oSûߊñ>'’àø78JCû¡8Áq¾ƒÐt”‡Ãä·íúB ӟÏÙeòæHW®êû ½A§å¥-góxÝï{±á¸g(ÏUŸ²²åþÀüß7æîì®T¢B84iiŽc%’™es¥ák´š(­4’ª +vŸ…`½ ,6~Q>{.QÕô7^4T—er‹ÉŽÚ­žWÝ­]’Ç{:#SݤQÇ™.ìN'Xšôi ¬¼-¸#|Ïfs8Íëzwÿ¤›t.%§Ì¬ ;sZ /%"&=WÈJÓ¸Çuç)I)2ý¿›èRoT{Þ_(ۜþç¤Þ¨÷»—616¤c©kÚûSöd©ôGå<|pfW€à$6wúm~î¡_°ÛÔ/”^JZÏA¦vz²Ü_ç›ø˜¬Q‚?{æ|Í +ªƒ].ûe=—²Ñ%Šz3œõ½•ôÖí]¤ÑEi¤•Pi[´ü+èYa³ò‰ð°;°åý ׅÒýØ8VW(¼˜íªÙå}ÚØõÙ' ‘©C|+ù-û~5 \ê*dÎ +é43èÓA_—…½Ý7V7<‘‘a‹,¶[ˆÝwS#’0r=Âp’0:°xÿ_ëäàŸ=䘆ÃYr¼®kä o?r$34ìw@“/é¼ÚRºYž÷ýnQK^µ«I½mýï¡À÷´žñOuå$2†CÆ\ðw@ræ´*êÃw~QJR֊ sCsݱo+ÆqY]Td‹žÓ»\ê?Õ¦²½½»gÚMVZV+vÛp¬ú e†Þ¼ËLJµü£C¡ºÏÜ÷)~êøU„ÇnêÙå}Ûüz쓇 +ó‰Ÿúœ§(l//¹åf¦!……Óáou7Ýâ|Gˆ2fQÊq\U–_/gœÎ;ñ¼]Ö ºcÚ½?gIq»Þ÷¢@)´fàÙ?dY 2ùüÚRºYž÷—Ê)Ç»ëé7®ŸÞøÍëzw~Iå +°wÇøþ÷Ìyƒ|U6y¼Ü”Æ4ª¬6Š ?(¥)kÓò‰¼Û ²º¨6J UÎÚ»žOååÙ]佖 IÊ¢½?­¹èn«v§…UA¬°ÛÖ±?ej\£C¡½WšÌ¸Um ŽÙ[=w݋»$á¼âgºÔxÚ$õ5>÷Òôw(pÈü䟎¬¬ ÖW++ì|KILñ7Èø{<ÿŸrنj‘ò¼òL¾6”®•>÷O(Û¹az„›Ög½ýÞù¾d}G¨s†3ٜ˨ª29EΣfC„d}'Üþ=šÍHÁâ/ͨR°Ú(4ü¢”¥­<£ï÷ÝõˁFl2 ØïÇnVWº Û ¶3åKñ~/ş¯ü«+ÌKÂÕi3ÑZ}jú¿n׸Uú e†Þé"„Ü’(ÁÐÞ¥r—QA¨LvÊÙð_v[aºî ß$ÿ¦;iǪœ8WœLû<Þo;ÍsY¾[–7ÓӘáþ–ßeÊò¡Ï7ËãÆñ®PS©‰!• +§»¾”¤EËÛÙ r÷œ§¸÷Ÿ ÂÉLN“/§Í§úS2üÚ9EÖ$›Õ>÷ç,lló™Ï‰‹ÅÈöæ…=Ïw`H処ôÆMr¼gsÂÑ2P*…U†Ò“òÌ­ùIKZ<Ý£¶Ÿ!çù×|++ªƒ]ùB¥~*ˆ’Å’´šh­´¨5VíG +®ƒa°ÛÖu—…ÖrŠú–4b¤™tòc¶VÏ»L þç’2òëKá_ïœ4—W¿Ù?ìfó¼ÍJDqX|?ÁÄâyœ†BÏ;Îæ3êeÓ¦I—ÓæÞJYey´rŠÒ ¤Úé÷¾7Çxë‡Îrü¹°"çú^—ÒÚ{sKA¶À‘ËžbGäã}g¬µM¿J¡_°ÛÉPûÕ¿-)k?›ýUa.ÆÆÒ„ +Êê ÓG#ìýª\ŠIbÊҘ”QZi%TunÝ7 +®ƒa°ÛÖu—…Ý‡(ÏèoG 4é&]¼˜í•³îÓòÄyŽG"çOÜ×#ȇ $@ @ @ @ @ @ @"óûò‚Vëã¾«š‹œ‰XAö˜Qä¹EA8–Ãa +ÿ¥¾Õ@V•ð¸nNtÊ=”áYX +ß§Í¢°Q…´vÐm ¯ùYK¥yV ’¿ÿl+ÿ(%n°Ž;àú¾”gÔâV}í%Ê: œKᰅÒßj¢Ão…Ãp‚të Þ€2×\§2ÊÀ¸i^ý>lõ +œÄ¢¶ƒiîƒ,³ïBUƒó,®¿ÿØÿ· [Ïã¨W4#ӄâg„jK”gâX `Wÿ¤ý9-À_÷¦ †ÿ(Nú š9ë.Sµ ²Â +ߦÿh¨TjPmèWüƒ,¥zõ¡I +ÿ߅Þ [¬#8W4#øN%aօK”_\ ¨ÿEÙ^ã܅Ãp‚tïÐnœ+yršá–XBá¥{ôßí‚€  J ½ +ÿe”¯C{ÖeI +ÿ´ +ÿôa+uqßÕô ó=PN%AÞÐ(ò\£ª\Ò †´+ÿÑ4oÚ@Ž:ÂáµÂtïÐoHGë®S\2Ë| +ßÜtÍE`£ hõ(7­ +ÿêÃ,ºËÐëzÀ¿I +ÿþ!_ù+yÁuêôàó5âg{`£ÉrŠ‚4Bá­ +ÿÌk7¥qà †ýp9PlÐÊ=íÊk†YX +ߢÿh¨TiÐm ¯úƒ,«½ +úÀ¿I +ÿ÷B¿úP•¼ðŽ9êæƒ\z`œLðƒïly.Q¹ İ.ЯüρFU†õ!pݨNœ¨6he¬¹NÔ2Êиi^ü÷ûMBœ(NƒiÈ2ÊW¡]`в¸ +ÿ÷á_ó„­àã¨WN&ƒì!G’å„âXy„+þ†ûU6|.„§]ƒ`W ³¾ïÑÓ6­`àÔe_Jò¬È¼í~  JÝayÀúºa8•„a +<—(¬'À£Ì!_ô7Ú©¤•Ãk„é×A°†`ØÌ,ïZ÷èé›`àß ²ÁÒ½Uƒ$€¯ÿïд •ºÂ8óõtÂq+>Ây.Q€'Qæ¯úíTÒJ‚áµÂtë ØC0l +áÆw­{ôôÍ«X8_õY`é^ý`Ö¤ÿ @oµEˆ @ @ @ @ @ @#ýÒ¿õ¤žíIâړ\ÒJxʃk%^$y—æàK•ꄵZµ ­)Xmà±ÝTÀÝ꣝ïzƒWÿ,;X`m_ô_íðÏÝd¾„ü$¯ÿX’{öi<[Rkž½)ãž}¬•xQæ_›Z\¯KU¡KR +ÒÝXn`Xïè¦ýQõ÷êë± +ÿेk ÂÿMþß ýÖKè@WÿÿÒ¿ýZIîԞ.¢Msz”ñ¬(?UâAG›j£ž—+÷-V…-uaZUXnïôwôSy•GÓûßçV ¯ýt°ìƒlJÿÒÓԆ~ïÒúÿ _þ¥$÷jOQ&¹½Jx֍*ñ £ÊB‹jK•ëµi…-` +ÒͰÝß¿M07—Ts½ïx–¤Þt7®–`m‰_úBšdûÚ%ô +ÿÿ‰_üä“Ý©<]Dšæõ)ãXP~4«Ä‚/ßK•ðZ­ +Z¾¥~Ã?öÏý‚`oÑUQï~®°zî†õÒò ±+ÿHSMaŸ¸’úÿ _ÿR’{µ'‹¦“\ÑJxÖ}*ñ £ÌÏ79.WÀ j´)jøV•û Þ~ÿ~Š`o0&_sï{ºÁ½èo],; ÀÛ¿è¿ÝÏÝT¾„ÿù+ÿž’{±'‹¦“\ÒJxÖ}‰*ñ £ÍµQëRå¤Õý¥«áZUXnïá_¢˜̪>›Þÿ±X7¡_úéaÙÚÿF;¬õ!Ÿ¿¦—Ѐ¯ÿþ¥ëI=ړÅ“\±)ã]ĕxQäþn¹^¨KU¡KU…iUa´Ö i¹ø=^÷‚ô, Hेm誾»jëz¬,w´42¿þWþI'»Rx¸Rk–%= ‰d§ARÚ~¶4´4éd«l7¬!åÿ +Q2¤¯þúÞ¨ZWl§…1E$·}¡§=v6ü/Ò¼6¦Ya+ÿ_ýp<Íi>…B€¯ÿ‚ÿ[jЖ«àöõ¤×8!møWÿ‰.nÛA´Ü WÒØUal¦ýæ¸0ôRÐÒK†Ëª+R²ßê +ÿµÈ¡P +ÿà…àp-XÕ|ßMs݅´ká_þ$¸m¸X;§A°¸«Ka_ÂÙL.þãŸë…ih¥¡¤— WšV[ý!_ý‹‘ÕÔ( +ÿÿ WþƒkDV@öøkžì-£_ +ÿñ%ÃmÂÁÝJ ¤àZÀ–ÂÎÂÙL.ûz9Ì +ÒÑKCK¡¹uE¨•–ý¯ûˆûº…_ÿóJÿ}ˆ>¬í÷AO¨[F¾ÿãK†Ù…ƒ¶a[Å®ªƒ +÷X[)ظ?í +á¼¥ëRÐÙý Öñ×%e½øWýŽD}ÝB€¯ÿ‚àÿ¾’·ÔJÿÔo‹”Xµ¯…ÿ¬— Þa`î+x±Àµ º°¶R×ý¡\3Þ´5a°–&(°¸¥;`¯ü.D}d´¬ÿœÁøúJßLV {|\¢À¥­|+ÿíáº8X;†ƒXàZa\°¶RÇþ˜W]àØ–†l%‰Š+R°Wþ“‘Y-+_þ÷òŒZ„•¾šLúNÝ^QØ-v¸Wÿî’áºXX;¤—”±Àµ ¹al¥®ý0® ½ÐÕô7…1EcŠS¶ +ÿÒr#ðÒ°ÿ @€’ @ @ @ @Xàˆ @ ,pD @n4±Á‰¾™¬ßþ*ñµ)㏸mJÚI+ÿ¥ÜĝÐhßWnØð°w ƒþ¾™« „Öµ­'þ4Àܯ»‘©ësáOè?zJP-,»W¥©9¿ù|n7)ì}1Ç›Pžg!ýIéýŒW»n֚€ÙÉüÀú<Ü åÌ-ôÏî·Çÿƒ +¼lJxÿs¸}šVÒI_ý,xvà$ÕA¥nØð°w ƒþ¾™« „Öµ­'þ4ÀÞêû´ˆýCRêp§ŠB­(×u%t’ÒàUzZ“ŸTÓ~ø;1’ÉexÇÛ{c9‹Îþ¨C‡Ã¹[ò\Œ¹?™*G› •ÿÑo¦{¦øÿþ°«Ç¯JxãÇnR¶šo[ÛðęÊݱá`îþ†<Ñg-v˜VµëñÛÿܦê¾ìxå陡N—@¥«xºOi2ÒàUzZ“ŸTÜÇÂø\†ÿ¿»ùŸ ~z='åæy² jÑo¦{¦øÿðáWŽ§Ž Ý*M÷-_³ +\$;è\ö„ /yµ„µh·Ó;Føÿq…^8Rž8ñۆԭ¥aOqáÛbL¨5ví‹ lpÉà ØLXVµkƒÿY07~û¤äGWýOè?zö¼](´™ip*­-IÓ— ÂLûï¾ï¸ßãqXl3–Ÿ“¡?»ß7Ç;Is9 „?sƒáfy¸Z´[靣|ÿ8UãØ¥p7²XSÄúÞ½ éJm&­,»U¥©?A¡âÁ°¨£AãwІåó–6.sÆ3yÞd|-üÿ-ï½ó­àr<Ù.XßLÆßþ<*ñÓJxãÇn¶’ ÚXðíÀ IªƒV±‹ p¸?ôNÕ-{ì+Z×L ×}رޓÙjú3Øj‘ÚÎ-1#ªË/—ä½§´RÑÐꚘo¦«î¼Ÿ“ýÿæXo+Wé^RJz¬vZö®¾à'Ç· jë7îp–³0:ô®a…¿¿ÞèosÕï1!7!KUébO0ï¥ÝºÄ´7^˜uÓÒIf^a;Еáœ+6Ãu°ÿCQ^~Å(]½>Òp÷>=¸KUa‹ÜÒöæf’WO x îz¢Ýæ$&ä)j½,Cp{GÞ¥¡·‰‡]?…~^a;Ñ¥¯ÉÒ¿õØoêaözÝ[”.ëB½£„ï¸ ñíÂZ³Ã1¸1¥‡pæe‰\=L-ýÅÐÝþ¨°PkáKUébP+ÿ9.íZZ +aÖįý„ïFð·]†öXzºqäRJV}¨á;î|{p–©,cp†êꊴ©åAKRÒÄ6 WýþÑ䖆˜uÓûƒòó ޔ¯ é_ùXn0¬=hcjAØ\'}ÈOnÕPbƳãXvÌÀLµ+‡ÂÌL}Q~¯Jý“„$ÖL:ÿÀÀ[7á_Œ+]+ÿ[jAØ\'}ÈOnÕ ÅŒnŒiaÛ32Ä® 0m5º¢àt¯Ùê•×$ÖL:é~e¥¶_Oa¾ä+]+ÿÀµPAõšUMîB|x%ªA‹ÜÒöfe‰\>Û0m5º¢Öé_WKÚ´“€˜uÿv–ÙsK2y @Õ@¤‘ @ @ $ª" @%Q @5× @>ÇéÆt cù{8-™@7¥´µÚ-›S®yͰ:îÂÁΩkÙÏôC¦ißw>Î ‰@7§ÝyO(€p9k´[6 Ûj¦op»‘²°©št5æúŽÙ'uj‡NAôñ™ÒZ´ë°BòJ£ÔêŽÏpÝÕ¿ª>ü¢¯]ØQû:¶pÜlîÆ}R$׳ŸèŽxÎX}œÐ éx­v€KfÄmhn8Ìړ¼Rw³0âz ;7Q•j‡NAôñšZ´kƒ1%Q¹ÕžjYgCSQùº¢¯]ØQþÝSvmvwcGRrÙÏôF“]°û]œÐ éx­v€KfÄcù•ÇØðü>‚ÎÍÝE•¬xnßK-z¡Ó<Í­PéÈfšgO¾}vI%Q>¨ìõ>÷õD^»°¢ôvü׀+ÿ¥ÙݏMԜ¶sý¤Ô×g´R-v€KfÄ~Ê0ügðýWªè²äò™ä¼–KÔúŸÎóžs!éý>{5šç9>LÚþ¨+T:r™ŸŒÒ’ÕŸ]‚UêŽÏSá_¹Õzîˆ Go¿òöwc?Ruìçú#I†íù[8- ҏZZí–͈6á‹NŒÝWU]«»µP«  læV@ó9|f”–¬úìÀ’¨£Tv}—ñ_æjˆ½waD#ûõ`™•³»ú“¯g?Ñ+Z‰[8-¿ ±€×V[ñmçý7Tv{ËUÕ@>Þ©»8;;±ÿÞµzZMœîA½;0}®Þ{ýZgN¨ìèÇ=[øçÉý­QD#î꛳ƒ³»F¨"}ð8>3/{÷´Î†î¬7y" @ @ @ @ @ @ @ @ @ @ @=Ðø{µ­'þ‚¬YR1‘d`µà)À²^ðHð Ã$Y„ðž* +ȬdaÀx "±‘FUaHÂX‰)ŠZ!LíšS]­ÖÑ¥" +ZgP·w§àùÝÛijxßÞ¿¯¾NCњ\ø/ÔÿõýN—¡èz>‡ƒÃÐù>O]ìÜÜú[§Úü +• 8°³z>³º÷> ›= ÆÄ’íà6Î%5g¦™3«ÐÑ#7¦8$ƒ–i ˜¿Ôþ ûïw~÷§wsmpcÐ’˜Ïœ9€ôý]LgÎÀ z~…ÌWl3‡>šàÿÚb­9p<~=Àñx.•´¹K,Øá0®¸8|:ݼõÁK#ÈÜ?‡*ŸWý)o:Ó{+„²õÁ‡gò•æÇˆÂ%:/üՈÒóaÅo‡;[ƒÿÖb­9p<†àx²wn–à¹K,Øá0«ppúç]¼õ˜àǽç/\µÒôuR7.‹™Ö›Ø\%žRà‡Ã‹³ìâFû­ëjýâ‰ÃäOÝõaÀkT|mÿÍÎb·‰ÃŸ[pôX«N\†àx§ƒ.–à®–YËp˜Vçf‡Ü uËyëƒ÷œH½pqô½—úSIx¿Ûp–j.|8»?+m|ÿŸ‹Ä-òùöÖ+,³kzÜlëÅófⷉßԸ?óñVœ¸= ÀñO ]-Á{Ÿi©jKx›MÏ8@ïFàǽï9 €ørçô¥ÜëMëîÌ«‚.ϳÁ·o7æÕíÎTÊÙ͛ŠÞ'}uÁÿë1Vœ¸?àx²“>®–àÇôTá0¼c~×óî;9Á~ÿ2n +\áËҘ÷÷Ip–eÜüÖ.ϳ‰Ìò^K½ÞîþÁ«}ÝöûBD_üØq[ÄáÏ®¸?ú,U§.?pÃgÙĊª-LN%ý¾Ç±«úㆿ_š¶?6v+xœ9õ×ÿEŠ´åÀñè.‹?Šôt·ÚYg)Âa[g+7Ü v=ïx‘zàÒxïéOi½ÂYÉ\øqvš©á-bŠÿ›;¼NínüüU§.É¸%-ÁÙ¸Ò-üŦÂ,Ù\øqv|â€Ws¿:üU§.É¸?áKpG›î8‘©¸8ßáÍ „Y³¸!ðâìøá! úµ¶£IŠ´åÀñÌÜÊ–àž±ŸqčMÀÆÿm6fÊà‡Ã‹³à¸'èhWüدø9€ŀ8s!_þnÿ“Ë,óºkë|9ÛC_ñë3¡ögᆤ^p¥xDž4܄¦VàËhà­hó¥¤#Ìü+ýF˜»÷únCÌýl5#¬Qç‡fxÙÙ +ÿå3¹gJ•Þ5бޓ_ñí%Á3ՈÑ{+? ¨Ã¯®ýý”7?iÌù‚A !_ùp¥­²Wx×BÇ}~¿ãó¨w•pe²‹ú?áAQ‡_]ûû8n~‡3óøU>R +ã³;–t©]ã] õúÿŽ8M3x°³£À»÷öPÜý§3ç + ¶€B- À„[@á̶‹h‡1+ÿùxRÖvvx¤)âÍ}ɧ„Lm6ïîºbÈjB&+…å=©¶ôÐԍvvð½Â¬ÕJ‘´Tr¼õ0‘Î?îR¸uâðºbâ©LðVB–½.Àj¤)ã”KŸ…˜ÚlKt™yLY ÉB&+…ò¯@êB-½45#–Îޏ +³U*G¬Tr¾ª˜HÇÎÐõÒ¸uâðºbâ©L{¿³’ü8RÖvvx¤)ã/_r~1Ðìϳd;‹/B&+…ê^Ô„[zzWÿvðÓð«5R¤tjŽWŸ¦+ÎÐõÃ?kÅávbâ©L{·É”æaKYÙÙâˆ)s-,dëú}žÀñÌôWÝ¥1/B&+…àzRmêYÀfªTŽQÊóôÂEyÚ¸gíx¼.Ì\U)‚¯Ý÷„UP¥¬ììñD¹åõ÷'#¯éùýãd"ÛQ‹!¹DÅp³¼@êB-¹šWÿñ³·‡áC(ùµJ‘Ѫ9_WL$W¡ôÏÝ./ ³J`«÷ûU +ZÎÎÏAKš}É{_ÓóÛÆÈEµ1d5èDÅp³¼@êB-¿"‘ËçoBG…R¤tjŽWž¦+ÎÐúHgî—…ÓJ`«ÿ¸ÆaU +ZÎØ W¡O”°YýèDÇC°ãH³Šý#8‡Ç…Ñ+ÃÈXtµÖ¹›Mð¬Ø ê ˆów7˜»HzÜ¥t²kóŒÎXúT×oÎôßÅr©è!_üºð Ö\VY÷Eî+û&quÁÿÞJðòHº×9¨Bn€Õgý¿:‚â5¾ÿeÈDÆ?¢¾ä=ÒôWò>wfÁ–O1±9uସ¬¶—FŸŠþÉ–]p÷’¼<…‡AÑ.µÍŒ!7Ñl®OþßóP\F®ÿ¥„L]¥iqýú8DÆ>wwÓú+ìþ+O1q¤‰xy«ŠËBãHò|Wö,âëƒÿòi^Bà…u®fÂs¶U?íýB ˆÕB¿ë„LW +á»Jé\„L\΋—nºüîÏâ¹Ôó¯þaxjî+,û"œWÛ3ˆzá_÷’¼<…‡AÑ.µÌ0„Üí€Õ{`€z„ªì‰p‰Šá\7i]+²Ë™ÑríÂwwÎì]Ԓ©æ!_üºð ÕÜVY÷E› c¥gõ¿ï%xy ƒ¤]k™°„Üí€ÕM‚…ÁDHX8…~{WþÆ¿J_»BãH§úTY!_ðJ¢ÿÌT6·á ¹Ûª› ‚ˆ–ôÄ¥ƒ¿a-$_†oӊúE8¯Ò ÒÉ +ÿƒ¬T_ùІ×!7Àj¦ÁÎpQ륤‹ðÍû)~ìû"Î+þ’ ,¯ø>Ü"Û‚Ó£ËÕéR¿þ=,•šÎNüõkeð>ô= ÃnÛ²¬—N¿ëÚõßÁx'vÖ-â±&&óâü]çÆxÅ}s=_gp +þ5¨Òÿåüº¾ýgŒá¸eì6x‚“}ÕÆ‘Gï²gX7ø‘ÑBÇv*А¬:ün’àáä郙Å~šm®pZtyz½*Wÿñô²WùYÉÞgÙ8•ihñ;Öõ¼úÿ_Ó*_/Ц•nì3¯çùÏ8«8D«‘ Dÿ}À¢ýç¼ômƒÿT6=ì;œ/ õJ'ñHB¼ß–tiTFà…-^T£y¬ëú¤£ÿ\,wšTPô…aé|mwU0s8¯þøE¶§G—«¶Jÿù²W4ÎNð}ð£Ûúß[µwþÿaü•8h¯aca5®ívý[½ÝÈ1sòžR/Ýiñ˜ÅzUŽùdAI»‹"Ë.`ßâGèÂÇv +А¬;¾7"àáÓÓ3Šý4"Û‚Ó£ËÕÛ%üŠY+šg'yžŠú®B†6#j°Î­z+÷«•ÉXçÒ¤!‘¢ôWâ~ WgV7¾t_–D›¸¸Ò(–•ôÕþ$m!c»EHVß‘ppéàë#Šý4"Û‚Ó£ËÕÛ%ÿ!K%s,äï2ÿâÐ:{àì3«^ŠþÒú^„á1Xl6 _×ñ¾Šÿí}¢yÞZSúåùdAI»‹"‰i_hô¯ª(õBÇ%QCÒ‡Ž¨‹qî?¢¾q_¦„[`pZtyz»d¯ÿ¦¥’¶ äï2ÿR©Q œÎå¬ë1¾õ½†uj#÷œ»ì;ëuý~T![Eïý—}ï·«•˯ëôVÞ½Ï,ˆ)7qq¤Q-+ôO@êúïЅŽó +А¬;¾7"àáÓú+çúxEµ÷§G—«¶JÿújY+`ÎNð|‰Ž÷´í-}ëzñâ|J¡ôØû ê×§Õ¸].‘Ñ:Ž1ãâPæöpï}Ï,ˆ)7qq¤ReÐ3¬üHÚÂÇv +А¬:ünEÁçôWÎ+þÔ"ÛRà´èòõvÉ_þºP9œæ}qP÷V' …ÂìÛ6÷µmJö¤ }E͆u‰Ò…¼ˆWÌ=ōˆu­j‹`ÿ÷£hT¦òÕ Èl6äAI½EƑd2Ëdΰoñ#B;üJŠgôWÎ+ÿÚm«pZtyz»d¯ÿ](?œÎNïú,^Û]×Uðª§Ð|þþÔRæÃ:Äý7W¢šÖœn¾cÌq1fÝ·5¯ÚíLœëºÅúÇ ³Ól6x‚“jãH²e³gX7ø‘Ÿ þ k”ÁÌâ¿ìB-µn N/WØ%þ:”çÉÜú÷FS„wÙ3¬üHυŽÿ«lS0´ Ô©IâÀ*€3£Ô¤ñ`pª—*JOáT+¼fb‘gMKî âõ(?•Šÿó©CÛß8]”µù،&ô}¡ô®EÒ¸uçG«¹ÛÂõ+Ãrå‘o­äÂ5%'‹¸ptº¯þ˜¸ªÜ,ïC‰é\:ø‘~ÿ)_žmHRÕèDÆ£:jzñz”²“ÔüÊP÷‘úÄr¾ÇU„ÙvUCHx?Wêýí|½ÇR¸uçG«¹ÛÂõ+Ãrå‘o­äÂ5%'‹¸pt¹ø¯þ‰^ä,ïC‰é\:ø‘®…ÊWÃo-¹RÕ!ʚ÷ñä©AþW;ŽçR‡¾Oì=Ø S>Ž+ †•Ìó·ýÜèõoìéJðøÚ.¹ÈÛëy0IIâþュÙâ¿û¼>’wÐñ#_JáèþÐfü+þR¾÷„[i¡KT„LS:jkÜÅêP*“ÔÃJù/EŒàï÷öÐBê>rO»®z+ïR¼5òŠõ¾·Ç¥UÉIâÿéÁÒìñ_ý™Ûþíé³âF¾•ÃÑðòü+þR¾xE·“…-yHDÅ3¦¦½Á¼R”¦wæ©CÛ!ÝËYÖch&=>{¨;¹E~]'m’–kJ«’“ÅÜ8:^ƒÿòyÛÿõ²âF¾•÷r)&B¿å+᷄[^…-^„LS:j`pot þM'©±¥l„[[º™k¥pò3£Õ¼íáe+ÑIÛiÒÀíι)<_tàésñ_ý3·þD4«ŸâF +Wß0B¿å+᷄[Rµz1Lé©}Á¼rT ÿ•¤õ9ÚP÷SwŠ×JáägG«yÛÂÊW‡Iòäíõ»‰UrRx¾éÁÒèb¿ûÉ^IïôG‡Äâbpi¿ÞïxKµÚ+FQq)<_…Ùõ¢/¥5ï¡gwa^;µ…é¡ šËxF÷Ë÷ƒôyÓËIIria#ô„žùë}oñýàµݧ]+¥]+áD°wJWJRvÞªÿç7' *Ô®Õ¯ñó?ÑìFl¥FYÞ¶•å²?ænz+íùgo¹Üâì4Ÿ¸÷ +« |ò_¼à8 ¯TÕ†¤]…xHXîÖÿ\!s¼#{ÆÙJ¼W<¬…äÂOs-õ½wÇk+äҚÿ×P±ºWKJþ*WÂêX;û]cXâþ`ÿbؚ‘äR‡);oS +ÿÌüÚåH“«üÏçrVÆÛ|WŠWÉ¢Eø-ýKR‰ý°Wû{=[V’•å±ýñ+áÁ”„.`·„oxÛ)WŠó§• ü˜Iíû}o]+Ï·ð ÒºXÉUsGJø]KÔôþŸí ýìd¶¬9IÛšãH¿ù°*@ÛÜ*¿Ìþqw%sIk¯`†¯c½yÕuV¢ÒMòñxÈ%yn6n•á‰_ ¤!s¼#OHSÅÜéåHP}èIîe¾·?²ãH¿ù°*@ÛÜ*¿Ìþuw%Ñ-HW ŽÁÿ£Ì\¦¿¶Ï¸?îëîKë¶[7`ÿö¿ á?KÑz,5úü¯¬*þ¶ý¿o;FÐ×ÕAÞ·©øüWᥤéîRz–l Û¸dnv´¤+ÿ=èm®4Šø7LòUw׋k¦!2•*¼â¿íìú<ÅÊkûlûƒþî¾ä¾»e¶;ÿµø_ +¯¯Tâ7ã ³ìøM—e÷;žæ¯Ca–õ=ÜWá]½Or“ÔËØ>éq_þ íÿË.îÿÏz)õ¸Ò+àÝ3ÉUÞ$W‹qéˆJ*UyÅu°ôï1ršþÛ>àÿ®Þ× Ñ݆ÁÿªFÝö-Š7ݱ$kÎû°›[¿pÙyEåÓ`øHXw¨Åþƒ;ë×w>ôR:‹"˜¥rÎ$qû«Ž¦!2Õ*¼â¾ã`ÿäìmN¿Ôüëƒþ¸Xï0ó¹}ƒÿU þWÜ­šöò +ÿØIéoSó¾Šù ý WÿÌgoýjîïçފGQq¤SÑ_g)± +¯ªUyÅk°ïlkÚÿS ¸?øëx  Øìüj?™ºy_+‡À`8˜ [€Td&–õ=x¯Ã+Ñ_“°|$,;Ôâ¿üÙk–]Ýþ­è¤uFF. Ó璫¾Y± +­ú+ïªUyÅk°é°e²uþ§@Î?øèXî;±Ø?õ}ð)ÈÝ5ëzžµ@›ãé«/îÒz–l õ8¯ÿvZ×®îþyè¤uE|¦y*»Ä‹{«œZ_TªóŠþ×`ÿéÞbåšÿSgpÝTIwÐhîÇ`ÿðw[¬_xé½4o½nûÁ5ÇÉÛÔ÷UmßE}ºOR̓á!aÞ£ÿúíÿ¯]ÝüóÑHê.4Šø7LòUÄw,Çg—Õ*¼â¿O°èó,×ú™÷þe,w}ÁÿÓ5¬óø| ³lÛÇ®õÍ"—üѕÒéñ_þ»;æ.îü÷¢‘Ô\iWöûþ›ZÍ©ŸpæRÇwÜý‘X¿éú?G‡À`0û»í÷Üwj¯­]oSù´!aßòpÉóµ¥øiV 9¶¸Ò 8¯û;þǘ¹M©ŸpæRÇwÜÿ¹·©çªà8d%¿ów~{ÑH—D.øæ| ‚–\°,ö‚­£Îxüãó¥?•ô¨‚¢d!ëoq¤QÁql\351[Æ<-£XJÂóÒ¹¨Wýלµr•‡¯ùÈHóž=£Îx³5ygšÕçYõpˆ"WÒåPTL„=t×EÅÃ3S¼]…´rÉa+ ÏJæa_÷^rÕÊVB¿ç!#Îxö9âÌTՇìÅë]g×Wu%´¯¥b +‰‡®šÿ©p\[ ͨÅo,%ayé["·œµr•‡¯ùÈHóž=›ÎxÔçqÜ>Šýë>ã×u'ß%}+TL„=tЯýNyHØ8fl¬VñÎ%„¬/=+7Ñ_ã^r×JÃÈWüä$yÏÍç®q+éX‚¢d!ëÚS ­ÁÿþG ÍɸK?ÍK X^zW3 +ÿ­ç-WJÃÈWüä$yÏÍçϟTßi«êôZq¸].|.U63ܐ‡© Hó´¾ üíږ’,AéA­‰`ï ;W¿‹-ç–lOʌӐŸ©¶½=â +¶®”=Àóìâ ¶€†¤s¸®[ +ZH±¤Q´f%ƒ¸ =Pø{µ­§þ<ðAEà ò Q7ˆñP¼Gy!⨼'ˆ¨ƒÃ ƒmÎÖâá1IhdÎD\¦]®Ö £°g¡KacÞÏ¡Öö_7ÉÒvßÒ~ôýµúïmä‘êý'îÏÿ{ézÎæ'¶¡äõ>õý=ô½osíbM;žÃ²}'W¥lLíqçLw0°)&´q²\SFÃch”Ì1²ˆ£tLmLá442[®ÓSø/ïÞ÷{µ¿w6ÐøyÒڔ¯Ú xůøö3¼5{ *íÿ²õft\ƒ?ë„&âTc·éA ¶ö;ÿ"Wx¿pxa…<[LÓ4dyýûWEøV†.W³Í‹Ó7—“8M„¶ó~/ÒúWµìFÔ =Ž[,÷æÌÿ„øG* ÚBÇK$xÒڔ¯Ú xê5ÿ_á«ØXYWoý‡«1Iöÿ\!7£¿JHE·±Ø?ù»ÅûƒÃ )âÚ`昱£«yýý•Æ‘g 8¹^Ï47þ™¼¼™À‰ïIó‹ÑLlV\èFw•âxœÖg37îüw—ãøùº¾C™ÌÎֈJ<3xîùß/œ4&…¡V8Hð3¥µ)^¨1ãW_ñÿc;Ãpáz:ô¶„!êÌR}j ÿ®ר¨Çj¥$"ÛÙlü‰]ãÑÜD)âÚ`昱£Ô¼þü·Eœ$RÙ»«Ó/Q—Ìõ>¦uDä<ƒzê¦=ÈMý?ií9_ãý¯m>¥KPp͙Íyï«(½f$Ž?í-¸”¯Zƒ5uÿÆw†¤/G[†mC՘¤‚Ôÿ\!7QQŽú*PBB-¿Ã°õÒ»Æúàðô𧎠0s‹<Éñž~["Î/ðy£æ…^™æ}'¤š§žÜG}pԞ¼Rˁƒàá›6¢÷f³\„𞣋âà\•Ó„Žû:[b¥xvPcÇßëþ>¿;ÃR£’“¶ªõf) µ×MÔTcº4 „„[{=ƒÿ®•Þ>ß õ4¯þ`çS<Éñ^~["Î/ðy£æ…^™{¼v÷í/QV×£½Å ôü3gç¾òøp‘ÿ|émŠ•áÙAMÇ×gxjBôn„[Wz«QÙMµPyWJHE·æìýt®ñ¡pxjÒ¿úTÁήy“ôï?¿-Ƒg båz¼Ð«Ó/aàO'âü^wïà>3Æ{oñ_çºWßá›3†›ÑánJùÂG}-±R¼;H1ãª×ü‡á¸p½|E?¡z«QÙkµPyWJHE·´Ø?ÿ„•Þ4n HSÇILÓ4r~UJ‘_ Ô~5ù¡W¦Èù±rîu û›ð¯ù¾oTÏ5ô¯¿Ã5üo?çþë¿wïeêý]ö.„œ$~Æt¶ÅJðåA*,>6w†Ô×þ[°‡«ijá:ŠŒw Á!Þ»`ÿäJï\jô…Æ”³G{Šÿóólÿó}g¬üŸCègë=g”‰ +ÿ¯þ>t/Ë +áÛ]¿ý‚U˜ä¥Œ.¾Þ¶ºÿ‚ß.Ò×ú”ΏRmë*FHRÖÒWÿƃìxT³G·Åûìíÿç¹Îrtd™å"B¿ä+ÿ ò¸v×oþÒU˜ä¥Œ.ºÞ¶ºÿ‚ß.Ò×ú”ΏRmë*FHRÖÒWÿƃìqRÍÛÿïÎ5£p³i—©?㺞R$+þB¿øùп,+‡mvÿåJ³éc ®·­®…à·Ë´µþ¥3£Ô„[rU*Gª…-ml<}Ž,îÑíq_ÿÛÔuÏ áo`ä6甉 +ÿ¯þ>t/ۅpå¤í²¥YŒic ÞkˆÙ‹¿YR¤d…-mì<¦qÿ•öë\i¾`ÿò8Î1èâîwÎÄ7<¤HWü…õyпn֓¶Ê•f1¥Œ/+ÿözþÚB-¿®©R.…-mì<¦qÿ•öë\iç¼ó¼ï²õ^©çÞm‹<¤HWü…õyпrõIÛeJ³ÒÆAVÓÏÇÔT©B–·6Ë8ÿÊÎû`ÅÝù6ôƗîøH4v zcNޘÒýß ŽÀ=í½1ÑþìOnPÑ}Ijë¥|:b‘˜¤¿Jޘî);m¬Wÿe½1]¼õÏþïC +áçÐhïAû¹Ú‘%™æ¹®KÃøyßö›aiyô™s!þºãHµ-S<•k.ã½/aµ.3›xfï‚FU.÷óHWüá_¦æÐµҾ1HYŠKþêޘî);m¬Wÿe½1U¼õgî× +á­ŽÕû¾W‰â^û¬g7˜Ìz?àû¸ÙôŒã'·ˆ§õ°ÔŠ Ūg’¯Á]Çuì6¥ÆsÒðÍíׂFU.ö;!_ó…~“¥Yp¢Û’¾1H޾)/é-éŽê“¶ë¾¹bËzb«yêý½mfmÂƒGs<.½Ç{CæùžflyÏö%Š~Ú‘ÂgP´gþ­wôžÃ}õÆsÑðÍÞ¯ŠB©d+þp¯Ót¯èi-[’¾1H޾)/»‹;šNÛ®é_e½1U¼õ~Þ¶³¥}¨4wÇ÷ÞúòNþOìV!ÿ܆¤qÔ.–y*È»ŽðÒÐڗÏGÃ7z¼) +¥¯ù¾ŸÛE— +-¹+áÓˆÝ +ÿÔ]ŝ½'m³Šÿì·¦*Å÷íëk:Wô¨4wyxõ½y ¿;–å§BÞÞ¶¥½1»IÛlâ¿þå*Ìup¯ù§õùÛÿ&y*¹ŽÛ +Ã¥ÆsN¿=x$}ä*–B¿ç +ÿáúöÉÉJø|«zږôÆí'mú¸¯þ® +ÿÿŽvÿɞJ² ÑÜ0Ԋ\g8¸fý•à‘!bWÿýW™mJWK¿¶Ço¼åÅ6Ø.M íÿfw,çñLÅp±Ø¨1Öó¿ðù¡ÚçkIJÿú¯:Z ÿ®¥Ëñ¼j«¸êÿ5ž~Î +¦+ÿéqHúeµ)],zþÛ¾ó—Û>á¤ç³·ý™Ü²¼S1\,v* _pó¿ðù¡øùÚÒR¿ýf£­× +ÒÌðC{÷'©ö'ušÏ?gQ+ÿô¸¤G¼y–ؐiÝÛ +o¼öX¦ÚýÃIVvÿ¯;–X»|-·¼¤"ŸÙ¼ïý?4?òó¿å+ÿè8P2¥G™R8*”¯þžv¥ý7™mŠ”ëv7§·ÞvqM·E †è3·ýyܳÁáâê^é§ížwþ/4?içûÊWÿC¥}­-÷g#Èχ²WùªóöpU6ÿKŠD=æ[pé@› +%¾ó±Šm¬¥kÎßõçr̽+ä"Ÿ¶yßúžh{§ÿ)_ÿAð¤L…iY ý2£çìàªlþ—ˆ÷¯2ڔ M… ­o¼õئںPöÌíÿ£Ë/♋ºWÈE?ló¿õ|Ðÿ«Îÿ÷”¯þ‚ ÿ²¥‹¥}^~Î +¤"ÛOˆ÷2ڔ®–Mmê-÷žËÛWožÙ¿ôs¹eüS1wJù§ížwþŸšúyßÿÿ¥ù߅д©Ò¾¿?gRmÔb¼?ló-©Jé]¯í¸Öû϶Å6ÜLîYÅé_!ýӅÁºâ””¯ÿ³Ø?õ Ïûß9Z¨V—ð¼—’Ÿó÷·ðYšÏ?gRmÔb¼?ló-©Jé]¯í±Ûï>×ÛjgrÊác±Pb÷Ï;þžhGÿàR¿õ Ïüï“S~¥{à*î÷ót^~Î +¤"Û+Ãïeµ)],zþÛ¾ó)_ù ýGÿO4#Îÿ”¯ü +À<£žÃ@ €?ƒ˜~àæÀ€Áςͭ©p-R×uÁÿŠ’?l#jm¦ºæ>âàÿÐѶ.ã»ìä:%ZІ¤c¦ +©çîã;H·<•bã?°¥útŠãWŒã „ G«„5ò.úB@u¡#øa¹aÔ]s%X X;bî;¾ÎC¢U§ÿL5"ê`ªž~î3´‹sÉU8ÏËJÿڃÃ8W¼gla<…Ü;uÁÿHH8Hþ+{kí}µ\Ål £pŽôV÷—¤…ŽÄ«Oíá©]0UO?{Fv‘LòUoûŽ"ßµ¶ãWŒã œ FåÜ;uÁÿHH8Hþ+{k¥~¢ë˜³¥~÷íï(ó¼?b‘­LSÏݦv‘«žJº>3÷2E½+í¸Õã8ðƒg¹wÝpÒDŽðíì]¨E¶¢ë˜­PbÕÒ¾ý½å‡¥|J´ýÔ5#^˜*§Ÿ»,í#S<þ}ßÿŒá’-é_mƯDŽ8@Ë¸vëƒþ¡#ô„bíB-±.¹Š®û1`åÁ…ŽÄ«Oíᩚ`ªž~ì3´\óù¥Æ~ZWþÔK^36PD!¯%Áÿl$$$~ØF.T«mE×1UÁÿ}çxh[Þ\XìJ´ÿ熤q邪yûÚ3´ŒY䪜gå]¿øPxf+^36ÈC^Ò =Ú¥ò¿÷ð‹nÓàWÑwAõ¡©¯Ÿ»lí"™ä«û‹·ÿq–ÏðþfÍ­°âÁܐ†½¤{–•ÿڅôP‹nÊáá.àè?¶‘ù^~ågiÏ%ZœgìÒ¿ùxdgcplÙµ¶X;­kÚAg»T¯ü…ÀCR94ÁWxÎÒ)žJµxÏØ¥â €!®ð’»ùZÿŽB5  +¥€Ô]¿ü­Ç!…RÀû×oÿ+_ñÈF¤!T°â +¶ÃJ¼cTc¹\ ·r»nyðØÞwýpŠz×oýxu.ÉÔîžwþãÐÁɞ0vnX»{”ƒÒ,Ïø•¦WüKG2mÂ¥^1ª1ܮ۹]‡·<øn3Îÿ²}]ÁÃkÏÅp–HF§tó¿÷†Yž0àáűyH="Ìñ¿‰QZa…Ä´s!Ü*U㎨Ç{'mÜ.Ã۞|5ßëæ\ ú»ƒ†×žŠá,NíçöC_<`ì\4ÅÛÛ¨="Ìñ¿EEil+þ%£™¶Ó¤éò*1ݗmÜ.Ã۞|5Ý+ë„.WppÚóñ\%’©ù¯;ÿiè`ë猷–.ÞÝAégú*+Ka_ñ-ÈE¶*ñ¬¨Ç²àm¿1vãyð×<ïû! ›ûƒ‡¦yáØ®ÉÔÿÎÿÙz8óÆåÁÃn.ÞÝAégú*+Ka_ñ-ÈE¶*ñ®¨Çv ¶êì=Æóá®yßõB/Ü6¼ðënÉÔÿ3ÎÿØz8óÆåÁÃn.ÞÝAéçûU¥!_ñ-ÈE· +•xãª1Ü®ÛóaíÏ>çÿ£\¿ppÑç‡a¸K$#SüO;ÿ´z<œñƒ±ppۋ··PzEyã~ÕEiHWüKG2mÂ¥^1ª1ܮ۸]‡¹|4XÈ |çÿ¶ô0nÏ9ngœRH×AžV÷ô¥ƒ»êNڔ=ʌw+¶Ý]‡¹|4fذ+ÎÿÊô0n¥‹2Ü4Ï8¤‘®ƒ<;Wü¥ƒ¿ÕIÛp¶ +_©Tc¹\ ¶êì=ÖyðҖƒç<ïü¯CêX³-ÁËovè="gø!c°’è .€’èAVßÔpƒ»J‚Û&*Ô¤æ.JË{;þÈOµµT¦ž-ƒÿ!_ý÷ glÙÏîÎ+ÿÖ]¿þÁçฬ¸ËÁ_>~$™™ŽK’ûß áŸÅõªZ) ÷¨*Û„ÚTÙ1Pþ¥'1Õ¥e¾½çÙ â£6¶ª”ÓŰä+ÿ¾AŸôglÙÏîÎ+ÿÖ]¿þÁçฬ¸«Á_3ðgo¡¤ïªÓ= ó{¶Zw8¯þÅKE!aÞõ[bpƒ½Š ¶õx¨ ,Ñ®•–öwý@ƒY5t¥®-ƒÿ!_ÿ ƒ?èÎÙ®K?½Ž+ÿä.ßýםÿl*[Ó¯|ÞÜ|¾_5™Ìç"ܞÿßT´RîÐU·TávU¶²£JÒ¥š5Ò²ÞÃÎÿ»¥}t¦ž-ƒÿ!_ÿîAŸôglÜD³û·Šÿñ®ßýםÿ‚â²È¼þ¿÷÷ªOœìUãU}RÑHXw»AVڛkmP[]ЇðÒÍÖJË}{ÎÿÁÒ¿I›[WJZâØ?òÿß Ïú3¶lig÷oÿã]¿û¯;ÿÅex+çÿîo1˜‡ÌŠÄS÷Õ-…‡{´m©°V··Q¥[IÌrR²ßZó¿ìÅTÔfÖÕҚtØ?òÿîgýÛ64³û·Šÿñ®ßýםÿ\*[Yx+ÞþTö7ÅLàó:3{WJû-…‡xh*Û„ì·ªTiT¤æ5Ò²ßZó¿ì„ñQ›[WJZÓ`ÿÈWÿ¸AŸôglØÒÏïcŠÿù ·ÿuç× +–ëW‚½ï[Îæ†®•ö*Z) ˆ*ÛMÂí* l˜¨~”œÅÉYosÃô(7F5êÉÂGfápnK?»8¯ÿ"íÿÝyßõâµ®2ðWß~oãú@õñ6{`j—Šÿñ*Z) ÿ¢ +¶·`­eT×b¡úRs%e½ÏþƒtpÒzš›þㄊ3¶k’ÏîÖ+ÿ¹vÿòžwýô-Æ^ +ù´·7ô`ñ[_³åùÅó>eêÕ>ÌWÿÂT´Rÿ4mnÁZʨ-®ÅCô¤æ.JË{Ÿý…èẌ£Íœ$}ë;fȖvq_ýË·ÿ”ó¿àCÔõçãJí6âŸ-JNÛm¥wûþÈW…p®¡V ¶è!gt…xQP[UJٝÎñ8Vÿì¸b¬¯ûðÍýÕKct7?îëØšC?xx¸2Ör;ƒÖàÿÿ+´ÛŠ|µ);oÅA©_¥°ì…xW +᪖³aW ;ӅxQP[t ÿ;úg +Ïàâ¿ý— U’ÿÍÿð*[¡¹úP‰v3öÜ\Fr;ƒÖàà<ïû’»Nž)òáÒvݪ JïöþT•" _Û +W ;¶áEAme(Vw;ÄáYüWÿظb®E0‘W=Ú¥±ºŸÅ´"1¸=,LävPÎÿ¹+´âÅrÖÒvݪ Jïöþ^•õÂÎí…xQP[_ýÝîw¨ó‡¿oÿí¸b®NÁxÏàç»T¶7Csø½+ñ¸=,Lävt¯ðÞwýÉ]§Qwá¤í¿¥~–ÁÿÕé_¢•iýÂ,²wÓB¼(¨-¯Ü.ú9ÜïUç~Ö+ÿÜpÅX鄏EÁÏv©l« ÏÕ¸Ò-†~áé_‰œŽÎ•þÎÿ¹+´ê®áÝ*NÛòjWèìûð‘ +¡\5Rx»õ×ÇÐÂÎí…xQP[WJםÎú§œ=î±_ÿjኸÔÂE\÷j–lj ÏÕ¸Ò-A߸zWâg#³¥†ó¿îJí:x§Ë‡IÛ~B Jýƒÿ~”ÓªÃT*Ò½„Yd, +* j©@3¹Ý=oÁÅý‹†*õTÂEp©od©ln†çá‘7ڃ¿mÅ+”g#³¥†ó¿îJí6âŸ-fmǎ”÷;ÿfáÿþ¾.H¯â öê–Æènk ýÕ΍s¥|¤í½.+á¹+´ÓùdfÜxéAÿs°ì…x~íÃÿ±_ÿëâä‹!›ü¥Kct7?¥JšûÕg‘¾9”ÂDyßýbWi¦)òÈ͸ñ҃þç`ÿÙ +ðœ Á³ÅoäÅÉüßö +–Æèn~TûÕS9”ÂD*Zà2\s`ÒÀ$@yØp . 8$@S%ç]>§:ËßA8ÛêJ*ˆ/ØL½™ÙjÅAÇn)ÅI®Uëu3d*–»ƒ*î§õ*–p‘8Hœ$N ø¢ÿ:éõ9Ö^ú ÆßRQZh/§„ËÙì5ŠƒŽÜRŠ“\©KUí&¥£paå]úÔîK8Hœ$N' ~ïù\p\5>Ó*ºJ*Ô‰Š/_°×Ò¸}¸¤ +”šåH2Z¿i/³›6 .Âî·ú +K8Hœ$N' ~÷û´IÁSu\3o©(«P^&(L½~Ã_Jáöâ*R\—ñ[Ƈ´—øf³`Òì.áÛ¨ð¡T³„‰ÂDá"p‘ïüAŽ©›Ótx¬?>’еâb„Ëïý†û„®n)¥%ÉÏÿ‘wAí%ömfÁ¥Ø]öÿQáB©g „‰ÂDá"—Ò¿‚ੵ8fѤ¢­Ax˜¡2õû T({)¶“\³¼UüÍPª^Á¥Ø]ø¨ýÈU,á"p‘8Hœ$Aòøfà¸*n'ÀvÞÒQTAx”„Ë×ì5Wæ,Rm&¹g­ÕüÍPª^Á¥Ø]ø¨ýÈU,á"p‘8Hœ$AÖÖCÿÐκ|N•öRQ]ß°Û©+),nþÖ÷Žb„‰ÂDá"¦tøÐtë)(®ãØnÎÞèi,nÿŸG1ÂDá"p‘oÄH:tÂD¤øà0£Ë¯QÅñu¬ß7eéÏÀòC ?ÊQ«¯šjÀ +OŽÂÙfóSgÿ}ƒúß1æ2t« ´õÛ»šÍ^îʨ“ã€Ó`â;؆õ>‘m÷–B³:Ìy}èûÿâfxÀËbàië1¥ P^sN¥»Qfs{Ó·fzNÚýÂÑe,³üO-å§X•9¹Åý›ÂÀÖëï:<ÃìVð.ºöU~ÃYIñÕJيÿôRÁf émRJeÅX˜®.ì7}˜²WGÝî +›¸¸·ôsÈe~Ê×pxjÜÞOÅx«Û:[&y9¯ÈZñu?v˅fôü»6Øôá¶-:§æÃpÙ๠ïR¡okBYð±AýyÍ:–íE~™Â·fz ~×ÒÜ-(!õþ{Ïe¼o›¿ŽüÇ13ÍlÎS{…túûΏ0û…oÒàK¯`St?ÌÙIñÕJ×pŽÔ– 0gKlj’S.*Äê..X{댵{£e.“ÜÜ[ú9ä2¿ek¸<5n kÖp~#ÊIžNkò»ƒþŸ»=2ÞêëθcWW‹N©ù°Ü6x.H<ÏSp¦ Íy£¤#© J‡ôA/Fç]:[³5ÛòüL²P½@‚=o—òøþŸc°v µ³é*\ uâ»LÑêªO޵EÿU$ ¿fÔý>pǞ²b¬M[‹»ûyÕlN—ùWþ³ƒèža}x®©¸%¿•ÊržÛ1²3ÉÎÿÈ^‚àÿ§î߸Vyà¼ßx:Ï4WŧZ» +Ϥ¸lý%ÉyHa'S„@:‘Oç±…:W۝ténÌ×ojp=2®•ÿOå<§¦â¸®{çy¯]ë§šî-}çMƒ-oJú\ uâ»LÑêªOŽÿ¹H1_ÿ›SÜ©%2â¬M[‹»‹Ò¾¿tiÒ¿jâßÀƒÆðE^+‡ÃpKs˜kÑÐâ/ln;ºÔS÷x7 +Ï[‹N¸Œï{£¸lì¹ ïb¿þÀSIÛoºWèç4ê[µze-ٚííOèÜ- (!ö|¿/?¶Ö-}çG˜}oJú\ uâ»LÑêªOŽÞ•÷Ùµ>émÇÏ܌U‰ý;‹»§é_¡ãµ~èàyýÿÛ¸·ý&ÃÁ«©Áû‹B˜¹š÷šª ¼gžNpy ¡‹))û¾—=2õø´ë³ÅpÙמ¿wà|q§Gΐ‡Jû3šu¶íE~™Kvf»{Sƒp´hñ!å¼ß›z“LOøÀ4×Þty‡Ôé_K.¼WiW¦YK_Ø<5\#µ%‚ÌYÒÚìðív*Äê®.îŽáï¯JÕîç÷û ‹~»‹BˊýÅ¡L\Íz•«Ñª§8¹ä琺ÔS÷x问ŧX¶ž¥Ãg ¸jxàXÚÿ@°4<áÎø ´}KÐö‰œf Ct= +h lhXÛ*^<œ•*\vx¾O;Ëãxhd¡B§]ÿ>^7‚‚8(x:î_ X ˜4.´(aD(!SÁGà  0WàK'õƒî÷¾›½ït‘ÇÏX¸ñ,íK¶¿á_—œÓ·6íF_¶a·friOfáhÇù } î÷Öéôñýƒù­¹×ÞxNaö-…†àKÉÅv›lË¥‹3vN+ÿۅ‚ÍémÓç‡oÕÅXÅÝÍÜ=ùx²Wnèó'?¿úî-ü{‹C.â…ÍÅpøn lPßÈßԊ÷¾!v·þ[Ìç¦_ƒ‹N´vŸãÜ6~ÎäƒÅÆ ¯»KPÿÿ¸¥…Cÿá¹Ûvgóé]¦N–Yãû칛íô_Ôß±ù¹?N&÷{e‡ƒÿ.®xv×ÅXš8·CünþÄR¤eŽß wG'å⻸%¶>‘Ôçóìì&½Æ¯—p–cÜø}obt4IÞ~­Ãg›Ø«çï7NG¥‹Šâ5çÛ¤í½xT?þ|UMÍÛ³8}³·±:š$ï?{pÙåö*Åü.ŒÂþÇe6þݙÃí—;-_¥Ç§’Ž*ÄÝâÝ |YÁڎáÝqÚñ’èäÜw·‹‰‰‹ÈädkÓÏ'>Æá,û»ƒÿ­ë΀æ‰;ÏÞÜ6y}мÞ'À“²Lj(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(£ L°–ªÒV’£ +Ò¨¢Œ%2ÂZ«IQi,+J¢Š0”ÊŒ%ª´•¤°­*Š}獳 +š¹#«Ï“h¾<¥±\SǞ(‡°ŽßýXPö!§‹ 9XJf›g«‹)0€ÃÍØ£ÇànÞÕ®ÒvgBŸesy)¿i:¸_hZ±ßâ䎵¤îIáÆÝ•ÍŐÖ¥Sïç½i:¸_XZ±êEVÒw$ðãnÊæâÈk +Ò©øsž6XTÕςüíÖë7­˜²qO<*[D,oáCØ@X†ž,,õ°”ÏnÙþÎÂàç@a扃Íào¯„µ{ö“³:½ +ìá1­'Åð¢áêÚNÜx«}û+ø0¾û +Òù¿£×épx<\LN>ïwéð¸^Ü}[{~¶®sÆÏõqÕçîD\÷±Ö1xT¶ìvk‡¹ð!§‹ 6°”ÍËgðqe'24L÷µÎ´Ý8gBE•ÜâàÌ-'g àíÅý¤íNJ·6Êía}ö¥òÿ„]™,ôx·“ë'ök!ëjçIЅݲ¼þ. ÂÒ|X_j(¸uÚOí*߆]ñá}ö¥ópÝ6/Ÿþ؄d÷“ü²XzÚ¹Ïډú¨êóѽý~¯Wµîª“˅KiŽÂî–=„ˆnqaf\%3 g¯‹)9ðy¢¨ùžûÞ,pN„.›+ÎâàÌ-'òÂø>8¢á×i8#Å[<»ãÂûì+KåŽpn7'“f^^L¬ªÏØzÛÜçÍ‰úŽTuyâøKŽDõò¹Z?°G6-„vÿïaCÚ"Gw‹ =l%3ó[=þ,¤Ü€ÃÍGŸÀޗ‹¹Ð…èY_ÉÅÁ˜ZO‡ àù"‹‡~ÒpÉáÆh[)Dž÷ØV—ùýÁËO;èt9¼>Œ)›Îçzœ~?«ÒéYÉj0õº|çË…M^D +¡mÇWžŽÝ‰ëBÁf¼({ ÝÂïùXJgs°¸:Ðy—‹Cw¼Xà]Ë+£‹ƒ:’vUÒÂø8b‹‡~ÒpNJ¶L07'CXV—Íñ¿®gÌǵú“õ½þsÆÛ…M\ÑÕçîL@ç^ 5áCØ@X†žtãåa)œ=…ÁրÃÌÜZ«ÅŽ ЅÂÊáÅ~I;*ՅðpEý¤îIáÆ<07'CXV—úŽ»·/—ì©«Öÿ‘ˆÑՅ‚ÍxPö!§‹ 9XJgapu 0ó?†ô¼Xà\,®Ž. ×'eZ°¾¢áéÚOï'‡x`nN,†°­*Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)µþÙùô xÐ1à@ǀýô xÐ1à@ǀýô xÐ x€ÿ‘™w?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ__FMAP__Àÿ@System BIOS +<Boot Stub8GBB Area&Recovery Firmware$RO VPDFirmware A Key Firmware A DataFirmware B Key Firmware B DataRRW VPDLog Volumeÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$GBB€€€€€Þð{9D799111-A88A-439E-9E1F-FBBB41B00A9A}  3x¦N½öµ·KÃ6” kðª^ÊôøÛÎBïѵ¢{1}ÀÇç{´‘‘γ÷ºÆ-eÚ:¶© $to¿æ²X +¼lãzÊ·T’x,µq-88^:šãµÕþ'm^?ïØÊ9*“”»‹¶¯žŠÐrÆÆ˜`ºßhbâ€d…ûü„ÃGÌæ×õ³}eQÍ]ï’V‹VÉCqmml£C…·ðriH ô~ÆVEßOoÚWšê”í¸¾„H«)ûÓ ¿çõjGóˆŠù?J4+Jcˆ\q¼Þ +½g/BýN×}ø} ~ÓE•òí—kÀg}ªp}+ïâ_Nߜl/‘u`›ÝýµeX»’ RœH„^€\%xç¤v­Uãjø ËGî¯`ko! ê åòý2žFx– ^ò°°æ&ÕéD£%fˆÁkÇE™rò}ÍÙã.·Þ‹Láõ VOÚx¬`‡WoóåŠÖâaÌ s³Ò‡ 䗿kN`ÉèõûìLk®Y´¢ÚŽàLY¡z÷_K´Ë‘D„{+æòôø¿xíÞ¯äpèÜëîç~ˆ Á~×ÅÓ/g‹=¶È¤G#ÒÄÖ4åË|rÌ ußÈ^…}دq˜YÙ­VÈñØ>õ¯E €3­/%•㜗Qbc©ñ´/¸& jћadyõ¦·@Ÿûuœ)AÜ~ ™aÓsAX3ËÝ[\Î¥÷>“–ý +töiÒæV¦°îU¡¦®!ƺ£ +´¢¯¨p×"*öó`!$!x‘–'©10"_Wüár¨G«8¸”±rñU„#4Tß·Ðúóò¤ŸŠ T»¡EW|—yèÌf÷ýÕÕ·œ"ƒh¿£Å–>Ž||mÒ ý%nÙÉàê3û³,ÏtÃŒxùD²ÜXuö²âÙu0½ÿÇОŒÝÏÎ#߈e;éud%÷o}×¢á7°ÑÇøKz£x‹ž]T*J­‘…§€sç×6h›sº]ÕôiæíC؟¾¸kmf:ÊQ›V„»61üGÒX·ÍÓT[¨ZˆÉÞ3„«Ö¡Áò/E‚àÊÏ(QøN¼Ët‰ó,¹ôª)@¹ …ÐsÈ^õËPhˆ]_+¼Ö d³£Ö §_3ဴ¹ý¥š$:g[ÌÐraÏ2ÿ¦0KqH–:]zžT’ûŽÆ»” +m„³ÄÄ\rýMspðá"ü[kyUÏã›-(CáŽWNç®ìzëøå‰N^”ÞeTí76 dǺD¨ÿ~^}¨Z«¸¿D›J +³aìO©Wçî³£Óq¿4qm0ÅÑâKYT¾2#YÊÖ%ø°,ÏD*²çk¿w9{ºÀÕeÔó@/Hrÿ‹[¶YÒ7U_4бÎZxòˆíUj5m» 5wJë7¼¥C +§·UIÍa§Lŝ€Š&0«8¤$~ó•ÌҚq$Æ\´ù6²¨%.PVoµˆÙòª…@¦lREÈúH«'±¿‹®†¸"-uÁ]îõûÉf˵G—ÒXy^Wwó u…°f;Ü~ 1ñéÒ vqAô(_´xN›ÅyҎÓÒÂ^û•ÒèòÀ/yˆ{⊢`Œ«0SO-ûIks'±ò§:ךVÙ#žoé©ü§ sm «v­¨‹ÞÝŠ]6Ô+Ë{¿áVÅÝh5ƒ•†”Œî ìj“pŸXғáG !bì¹li«>4©ðØÓºE=yà)ÄUËsä]ˏ?KÄNâ." Jkx½1ûÂ/rõ¢„FÓͤ—¼ ¯8×h‚ö&vïÒÝáJ÷ýþI=Á¿¹{gHڞcÀņë·N„J߅¨•¹ö‘°] ¤Ð\ü‹ûUë–LEvQƒd!zN9Ìù“îû¬¸7„­fŁÇöâQé§ðá‡Ô`i»s[:fTÖi©ÉÀµq¸ùN÷YRŒWŽÝŠLjÍ +Lrå½½TÑå¦Ü¼+EšØïî´§9xwË!ùdô`_^β«z¹ªÙô×öÕ~ë–êJw½îFWã`º÷Öo<;+é yê1.ÞÑ]¥<±™_"²v,âªsÇÈÊúŒdô²½Ó +)ºš ×,šñü 2¿ÿmP(MN=µTÍumõ¥6úý¦LÒJD! À? l%þ¶–m<¿|pzxN\7£’†+E @¸ãÞµeÁC!nÖ4lBΚUÛ·u³É¹_–‰ë±`½£.²¿C#ܶ~Nû|qÐ}ê׎ÝàÜU~6Wëè#›4g}gJ~u Œ"ýµºjqäaú‰ATðmY±OcDŒ9¾­(¤¡LÊûîç¿#+èÏáDµ>lwë§Ó$Êüä_Ž·±©¡—1Ú?p®¦j(He8÷ˆP´'µŸ“¹µ®8“Âq}½½\Kºâ´Q!û—öf%Ò? ”G¹´³O+Ýó ×ö´Íø[aÝV™•ôÐ/ø©ë×í­šã¸£;ë¤aºŸ‰•øè>Žn5âÝM ~ª<ÕtûVlh#à’‚“@ó÷6µÖêèÂ¢g±^vβ¡À~£+æ‘,XnÝ×Ð$Êø‘-04‰D`[TºräR¨7vµð-ªûc _ó²/´s0¹0ӄ @ùƒaÆÁü'µ“~¯?%ó Þ´¹jµJ1-jf ÊüŒ7S_K77:8æs +ÙôÌX/¥•ˆüL¯ÉD{‹–+ÄO^—9ñ9¶ŽNB¤vWëhêcÃÙû+÷N©æ;ÿK+é _ó0îvö5D+ßë2àÞÓÎÇ7Õìe}Vn)ºj¶õS:yÙ Y±?M{ôúWùFÈËx>ÖÖ¾›Ç¸o«£—mS0 ¨âÇl @Êþ½Mœ3F|WfÇc•ù^ÿY‹½…\´Ìaþ,+û6,-j%¾–WÐð:T1椔‡©šŠálÒê¾ýL¯£Žß‘†ê,W—…pù•ýýÞ\+ÿa™ì©æç¸Z³Â¹¬6eX L¯ùÙ_ƽ²råÁ¼š¢,¯¡˜?ÓSɘ?® CÉ­}Yƒø~®Î¾–N ²\ùîëçæ|_o’ +–‰ë¼xòÚªdpmðTLÄþ»+ñ/ø×–+ç/܋+ê¹sòP͚³«œò›\±\’> ŠúŽN’R!õ  @?öÊþf%Óë´ó²–ã;+é yø·– ×-;/HùKž í¿«ÅÆÁô†\³NW¿ÖG€«œò8ámK+Ý䂣 „¹S‘}—…p¿o`Ìï0ý…sW³¯¤næâ,¯Ý×Ðrx¯üЧnIÄ{‰ _ñ¯lVêg£éÃE Š(ÊÁ·&WÈ @ße}³VmY±©›Š?*vWÞôgáZ3àÎãó·õôϻù¬ü~vþ®sÆ$N%ÝqàycWG0ØVX+'Ù«> ½M%8Çcõ_…é*Q‹¬©A™#ûÞvýøÔ“U7âlіvEñ ŠÉ½í͚ç¡¥îû. ãwH @þe|pzúY¨öµQe}4?3éã·yÙÖµü^Áÿy/`ÿ³¬¨}Húþóy6“c·ìé¥úªç|†ð7¨²¿! ÒÔÏÊrá¾*{ +9É*QˆíӑÀŽFWÇ éˇn_Yҟäö2¾`ÿQ1}iLݳ\;ªÇØWôÐ/÷öµôó²-êæìØ/\ÄþÁý 4ŸÆÉ‚ýeY‚‚©æ<”òÛÚ"hΦù +ÑD @‡ð2¿mU2‹²¾÷AŸüʔïºUè@ö²¾}a'³¯¥kS0TP@‡ï ŸÛ¯¡†éŸ£Ô†Ï_ý¼ —q~ÚÓùý²Úà±°}inô„/M-'`ަ‘†êÚ6 ¡ý5ãø8µ+ô¯ߣ’CßøÍÅöùzہ#Ôðt£ƒò|1ž"û)Þël$´úO€ì¯Ç÷=±ÉRJCËDõÑÕåb@he`èeási2aÍÏFÀRÊ÷gc>4xj)(Ycï<Šÿ1ÙˆSŸÍ›ɖ‰N%kè(Q¢-Ǥìåâ{j XãÍç!üÀ¦ÍAûqhªGé>ïºjRšïù¼¨èOjr/âO³ùqdQ°\ùÈÁÀCŠ &•q¨1ø+@J2Ä〫ºø!)À‚5”,H!“XTBԒpó1]¡Ã +—Gu[³cQŒŒ7L}C€7œÃ€~b^PÈÂÎÌÓPÓ8Cæç‡ø½Í‘ôüòo’‘íž$¢=Ã[Ú~xÒϓupY¾± +S€ÞS‚†BJQë³Hø^‚‡Ï?zv°Žžè2*»\´¼…¢‡ % ö|w$â=ÓÜ H l}?ғT²±µÛÆA%JG¼z:]Øá*¬7ý=hbòÝÑõ™¤aú´rpôR0©y_®ZIî^'®(Ä BS»î„UÎùEWƒäFo¦ì¿gÕc‘'³: KfpŠÐFT¯uõۄ¿Fú‡½´ãè°7KšÉ°ÝOèÔ+§K‘*„ùj`Ú.7…Ré#£¹ëOéL¹´s0Ûð¶téÎæÎµT߉òŒ£û,TõìØï»térÕu1&àÂï³ò°6á¿ +Í<ê 4Y_»¯ “§.4ó²õ±ÁËçnlꥺ +ÑTÞ ½S í·ŽÝïmì!©ƒx•6—¥]K'…_C±Z‘€%=µLÁð<Ͻ)ùà¡F‚V¢’¡2542„ÔoÂÕRŒAD^o9igH9^OM)UKbõEPjqïMJBCVÏÆr®%ûÚ£sk\RÃÙg©sY8)µ€ˆøwW,råÀ Ö × +¸IjIzp¢´è31.„Ýpݰü1o,6–i‘÷¸þGÓŽ%ˆùö’0ýEY¸¹¸Éý +˜÷çä +16àÌÐËÁ7¹ýŒ€»¯Ÿˆ%ãVŒrðî ¹·õˉäf‚»ôÔãŽyˇÚ(jGµâ,]A¿»´(ocRêºxþÂ8JCK>O=‚¦ãõ{ñhÑ%Z³b%¨‹j©“Udd þÕh®ç ã^Ù¢‘îk*P%P—‹ç¡Ð¬ù«pZ+_K4X ãÁ>÷AçÖF<Þìjúҙ۷IcHďN ÓâZ'¯}d?cR’Œ[¹ÔߣØÎJù~oðáŸEÇ­À5ݳ0µ.Í`æ8Z´Ë¡ÕõRKÝg±ò+ÎÈb žÆ„HúúôzÝ ^‘©]—Íz¯òØäM*Y6 öÅ'±ßܸ¬›5_ ¸‹v³bÁÛ·bd ÍiO*d\"Έ¿¨´ ¬ ‰w\fX¹5î@G(ŸÚY¸Þ¿yÖ@ý2¿•…n:§"÷=†þîÎÆ®Œ¼O_Ž~… 7ÕÑÌÆ½± !X¯8ÛUL-Ç e©ò°®‘ØMÒ 2Mš1ß èÉÀ¶ ‡ÏÊÀ<'<›ä© ÙåìÖOE„Þìjèãmìj„ãÑñk^fW¾/\#p·eš™è'ù›*I?ÀÊøL¦†SfŒ… æã^ ð§"øÞ–ÓÖÊøU³·N‚ÄÂrG&'@ô&ëÚ N—«©ÎÚ×ÒtéÈ¢»ŠÉÏ:Ë©e€nÙ®¦~H]WÀP¾ ½JL¦´>Ílô`_Ðú„¡ÝÚXô2¾Ù«5ºšS~44Ÿ+öµ3P +óòBþ—®X®f§ã Y0^%¶Í`°–õsFaøM|Ì;“6Ǫ«0HñFâ+hɆ²¥¾´nRýµ¢P⧯ Ÿû_¿µ§véœa(D§c¿»C!mfxe³®« +æ¬Sà—5S~(þçKC/P8•X×¶L¸‰äúAÍÅöÐ^ §Ku3Ôãß +Ü8'¬‹ÌÊýDτX²v-öÙ^ ËÙh†õ“fÇ[K7{seã·bóèéYÓJ‹'¬I„EÕtóè¸õ¡ÿÍwD¬Ì/r ‘h/ü"³Ú»–’PAFV¼hæÕ(ÄhŁîqû ¯òØæ~:×zÄO_¹³¬- gnkgD³!‡uZÃ{l Æz6œo¢£í ¡¡xš2ÜÙÕÕÑËDghù_±¤’©£óÄÊùÊøKFX÷Ögì\„×TLD¥Ñc×ÓR]õB53QA(´ÒÝà“ÀžsênŠi~øEÂñFâ7\bÖ¦\rGëÞØQH‰%º +ÎÈA¢ãtiBKB§•(Å7GW••ð§­<쀕v́æÜÚ×ë2ž¾–Wë¨#^­3ÇèUƒ“iHùèØµ»ûj~*RøBš/,hßK:9HqõLø¾'ù  8oÃ/Ø2Öööuež¨ÈÛY'=ƒ¨ô,’eç­ÈüKºíî-*y?Ïô2¾†Î™{³YÚÐ^†WÄ{Ÿ“~Rf×B¤…o™„+ºùñ0ÑºCpx'ÖÒÍMþ)UŸñ±!xâ˜léåOÛÝráŃކýý­3fŒÍ ®Z¬ì¯Š—ðö9;l¿K+â€W®Z8Ãv¦e¢zë–+zšŸyb}Lfܔb§‹vÍn«¼Ú¤Ò¦kÂíÛ¤±µFÝNŒX/G؆z> |ú™_?urÄ4±ß£¼§I'σÚ .ÔYÛ´7ª¿™•ì+ªÁM·Ö”Æä…,2⥏óí§µ¡ê»§ÊÊû†ö”òÆ­*…Ž{š’EºtäÛAØrYöŸS+üÖ9ƽ²hɁ¦tÄWh^Þ¤VnîÖ¾fÉ©ð\wwifN ±‘M'îìëéljè‹3v(Ç÷=±Bku3ÍÔQ®n=àà$!~åÊP¡ËûQnЂ#´°9$;¥¿ËýöWóò°i¥ûçcl#Zº‚7ø5û®ÿgK(~cWBÚ¦fúҗsgXûÃh'ð"\Ës3+çéO0ïîíZq$%b¼ð—½58ܘ3ƌ¸w5³»û»&÷ ü¬¯ÎÆ|n8[^YQ¢·<]Aìe/ä%DÛÈýî CÞ_·°eÈý ¯Š( c¢ôiA ŠÉÃ-a.Ϧ^ÀƒO®~OÐÁ +6Õû.V–Ãb˜Šì¼v~{+Aà\¼ UºšR°Z’œo[+æX²L¯›öÎÉ¿2‘å{ýab0„+ïeK¦l«¯MeB1E€kË!L(±KkNmúª«1§È³—ÑÐ úY_ŒóU7âóØÎŽFÒ¢Z6¡oU4*ˈŽƒèèæa/×ÐÊÁ?{°-HúGº5P ‹â'¯EžnÌ+Š¡ZÜ̯™z ç#„´§–ájζz0Ux±žîÖº>í­F´³Oºé¿+æ­Uݳ2ýµ§¿­\ï_h_§š’mj%÷÷<ðU$¤GÔÊÿݱËݍötIF*|ÜkÁ'„¤§â¸èáÕOËU›½gE% +½rÛªéá4MgéN÷[ƒ{núқÎ蜜2{!NsZ4Cõ òpmµ´”#Üa @‡ÿÙ_+Aç(ê@²'Nœs§À*y|¯©qS@¿ÍÅöš+ô¸ºZ‡ÓŸtÇe|ý“y8„‡uZva‚5¬éåBpk‹Z‰˜—#ŽU +ÅoÂØÌXò²¾Ù«4º !4»{¹ö‚4õ²¾šŸ¯Æ¹ØøOoC/[+ãƒÝ\²f+´ŽvíòúǶ·SúÉ/¨-„EzšAeÁT!Yi3š  |÷#+ÿ=h#ÆÑë¿ú™_óä/ø°¯âBÅ?‰mU2*M£t¯ÎÀ6V º (ú0Ž‚„ÐǶAsØ/\wVNÅþË+â˜PѓžŒ@á£suDPhXXç½ï_ZRµfÇ/ +à}BY Ò4õ<¿€L·.[ÌñÙÔ\½“évøÅ2,Wž-9¾fWÐinÚ¡Ã~eGÐ|"¤Q3:`ž<~­Õtó†ílÂÊÿªî‰XçcWDøâà€¡qÙôÜԓ‰w\/ü} Ø/åõ2¿Ëc‘g†;û¦Ý†ÉLÍù;vÕ3¦‘iò¾‚;…«3u‡ì©dÇ+1ÚÞÛØOcBl—#§.Qtr2üÙA÷̯ˆ‹…³JÉè̼;wrÞ·¤+üKa•ïõ¯,¨ÐÀäBϙ_-nÙ¨£{I$aãÌf C÷Y_?D‡‘•üŒ WN\±ßÝS{mS3#éÅÖOFÀùt>,êCC/,Ý‹ñ±Zèøÿ6 Ó¹ÒÓS™‡tl+æþæÍ „ LÊåšw–TIe·kgãæÍ—ŽvéѼ2¯++úJq„¿}žT Þ¼'H̯£âÝe|ɏ„ö¶u•#üTÏÑ oÔÐÊ3+⊁Mz¢iOJþ•³FBFD˜onl5ÉlB¶,7MºFÒ‡7l‚2¥B÷îkgÒw÷v’ǘ{+Cçe +æ¬óû™•ñ›†ù™_N|vûûbGëéf‹QH÷a ²°­Ù±ßÈz1¶f%Ԍ?Pphêz¹Ï'­•ñ1pn*°-ê@j*\ÕjiÀvÏÂ…5 c:A]})(~¨³{~­ø[jèåßZS¨‹Üégd_;täT^À¶bXJOÚ+¯[IB ǽ-AC†ÇøO_ÚÓÔÍxOk¡F‚7ÑÌñ®sÆ'‘·ò-œ3—.'c>7ÞKrf+´k™!†ØbÀX¨Üñ€™Ü™¬ևªîžž•þÚR\3+üԒ+(_øôQ Òåe|ýgùˆ¯¾ÊùôÆ÷-ŽDVɂûй¿—ÓÓWϱ`½,*&"E§ ˆî)z†™#5X*DÛj¬Xðú¼üž íÁld¬l/ˆAНâŸ7áI©¢~ë+çÆŽÿäWÕ£yÙðHb‚þdÂLx{.\7>.²6 ¡[>˜'«+ÛUVb>¬%t|'ÎÁàOŠñ.덞ó\µ X„dú¥`í "\#Mž÷øZǂ~: ™•ð»ì¬~o ÎfWï­i„þI•óa‹Gέî^¤òVB¦Àn›à]HNûã•;6Ñ=s2¿iO-½¹±C# )â×5Èô©”ãØ{Gì4<ôt“Asëèc”ãÞîík…÷”.E)Ó쭝•óÒI»Z¼¬¯Ÿ£ ÌÊýÕtð_u½TȚˆË4Y_¾´¥{™bøOF;«–a\U¡ÜÞÛ¿µóà¿BÌ}l¯£ÐpxíØX™°j&œš>l„ÄIã¡mUorõ8·–ꯢ²vÔEҐÌ{b]=ñ‘}•‘GTrPÙö‚.hÍ᩽Lü£rIn¹¤3ÿ Úz:«"ٛ»K \ÖNø4\hq¯³A¼zÌòUÛ§;{†éiçdIü߯ÝÇ­Uݳ6æÎ¬¯ŽGŒøÅ‰=÷é%=~¾š“ôÔ§"þ.VWéx™Îšñü̯ÍN[‹â‹–aÝÖ£Ò§® ²¤’uG‹mU2łù^ÿX_QÛ·Fßõ´rpâíøOvÕZûºúÃâû¯†Ë»iY }Bq‹ FÁô\6h˓3`@ü2¿oW6lo­4 MXGŠ+atåÁúR0ÝMí̈́·Õ”Œ?WcWDës˜ðöBƒ‚ÌBýòƒÛ”ïõ‚ž¯m)O§°¡7B± †^ɀFúy¯MNvMÿÉÔ_ lÃéŸiÝVš.¸QŠî—­ÌÊþ¶–nVù™_ аðo<´díåa\ ycD8™Î&‡ ‚ˆ6U˜GNð‰ñý%î!ÊÌÃ4 €é˚I8p·‘C÷5³‡Pˆœw5Ó¿*ÁÞ²¿+þFWû'e|*ÿcYPйpÃ{oWG,ùnVWþzÐùÙ_þfäÇýCUw\k¤Êû.ô²ÝßS+÷¶t»|_ŏBÁ—¶”pS]Y_£“†ªâ¿1f0«þʔb-WœeaFÁôUçäzÙ_ÍÆ¼™ñ}¹bb+³S5¹j½­}#ã%·÷v[èeëöµð®jÍ +ÓC©{w\šüY9 8(®óáïw5ïÀ‰ÒN½Ý$“§u„²N½'I£ã¸àî8ノî`0cŒm€0àØ1ðÁŒ`Ø1€ÛÀcÆ6ØÛmŒ`ÛcÀÆÛm¶Ûm¿­ÿ|ùÿÏì>ñ÷‡#£¼^ëÝ'YÙE¦RC¸[%•©_[x6Ê¥÷ke²ÛmËæôÉR‘°²1[TõöVV,xY‘:¶¥êÐãí²êi©hö yd•Ì”é,TcÁ¢dÎ,ܶ«CJžHëKGyYšŠ^b·öX¬jºª}[¦M*VbR1|qcj¤‚¥ƒŒïÞÉ_J¡Ÿžšeµ4vÛU\ÎJÿ“k£9+ëpCm|e›wƒ¹€y¤¢ }Ò8ta&[¤ª¨¥ñ58þQ¥ *âJüŽòR•`žô)]6Ûy†©+ó³ŠÂÊôl9K•éQê—þ‘|—æew©TéQ0Š¹.–%ª +ß`í®¹Ú²×} Þ-ùØÝÎËI•Á'íK•˜Ð:Úð'={;r‰þØè*©Î’ØoXDúJýshû£~wË¥¾I~øê?zo¯Ó9%Žì<eU;=ԐKž*á< ÖµÙÅ.™ØØW¾»8+ äK”Fo_¦Ì%Ùº‹­Ò¸ó©»ª]™ßïk«*Òû"^Pe7g^ðåfÁ†¹ß*ÏODIÆBÔ-' éóG”‰„}¬ª¨Váxi³8jšj9 ÞÎÛޗófyø0«i+õõջͮµ.õFnêêiÕx™Wvùœ®B_CÙ<çš%1KÚé{;a¨ð¸“tÔ|µiޔ¨d« ٙ]‹Îm/%선‰uQ+ƒ'OH¶Jh—aÒëfÏY¢[ËMGB¨¶Æ½ô1ƒìrŤ»ž—éøúU²C#,N ē/T•ûøE\••ސ—ÐÒÀ4‡ÅåÕ½%í¥fÜËèÑ)mÜ#â@åĕõW2Uâ_+Õh(¹\uñ7ذ®¦™í͵ ¹#Ə—ÉŸãMÀê³és±©ÿ•®†€yK" õiQ‰üÔÓRyù+úÚYá"uÿOšUp%j%ót¢ +áóêXÙ¸ØéÒÍ-öòªž’éi'ÉcõJÿ*çlý¥HȆØ+„R)Hĵ7Zí•ßÇîªVÀ~øØ4ý®»IgfÁ+E!bë<Ï% ¶É_ÒÆd¶aivüÞ¥·‹ïð|ÒÛy ¾\8”Ñ 7Éà6ϛ’¿³ B×G>v^«†éhjY,`JÚåqø“ÓRÎÙf´¢’•Š–$k%¡É`zY?q%}-ƒ…Ø<%s$N±Ò©öÒWÒØùi ÖÑñÓI•Á\Xs÷ ¯­¬†Øëòۘ J®;$w%©T”T  \ÑñImü6ËNé”i”Œ…åòxª·™,·š–œàÉ%k¥Ÿ‰èãâ6iZ›…ô"¦ï³±#m¯wH²µ™”Ý.˜x}%‘ْ¾—´Rß´¹)ec`—™ßaV{ûOIB—¬+ëxR‘v؏„¸íEAÆ­¬ª¥ær¬+븜)5z4¹d—1âJ^²²±ÞîvJȑ•Må¤"M×ÜÂEf”Ì´ ¾Ÿ9ŠK”6»ãË>áKò‰K©(§ÒìÊ^Ñðܰ¨qf·éIRëÆþ>žX~¾€p÷ºRâJú_÷J •ŠŸÍ†¬\ò®í¥Ô$þšÕýºJæ[pÀ©h«ë«b ÞÕ=Y.­%ډ¹}ò~t©ä 2¸4ƒÕWQÅHÿJæK°õuʇ6: Qž¶ô¸Ë·ávf2j©h¨8rò)|+É×òŸ4<¹+éxÉ*mh%¬«JéHŽzÐcÒ R‹$r«Nß§áH±±°~wË\I_wÌ6$K¤6ÑÐòji¨ëë«Þ–Ëð)(˜YYQPO+‡¼éøkk*R(ó¤qEmߕKgø³IíR£RþO.ßÔ籩Ovºçk^ïÅ%d$Y%ˆºÇLš´£”¼Êü)fÚ°‰a‚~t²}*殦™#»SžÆ%€ÉSi`’ },$’ŠÛ3ÆÕ¹åR×ùçÝ#…¾ˆø¶’¾¶t™?Åc£ƒ’h×Éh5Ž­ÕÔifÚ¤s¯£V©Yè6ޜ•öq •…ok¥½ŒÉ_iéî¸Ã»;\õÄ$¡#µOž⪞•\•·’¿¿Ž‡«©§ZÔÛ¸{miª¤¯¥®‰è8óœ£÷éríi©´|´©*JõeKoµµM2RT®dýªÂQ%”¼n,öcV›‚¤Õ'êžá𯵭ª*I¿gbD¤ná”;A¾:%tù<»ùÉ_V¥„ž›àDÂ>*@›sL«>­¤·ïÞs“;ýïºÓÐÏ´ù¼L„Lۅջƒcq^îjZ:sƒ"Ën­•ÿK“Qû¨$¹ƒô©.ð» 3-–[‹‘¬²¢>mgb÷ÛÈIé¹høˆ&:I>n^BÉ|Y4”^ݞ[m·[+^®g•ý%(J˜•ÞîR÷3àý/O/ÀÙȖ9ŸۛjUkÎ{«Üì’ìú@ž×]¤K­éOÙgí +âÇ:@R_èJ3«_ý ó;3¿K¬ ¤c'êáIÅ%}¥óK|ªPD¿o gæå÷ÜY¹dƒÝ*ùºæRÏÐ%íÖycÇč[‰ÜÇ藽RŒ±â×êQù¾|Ĥb±&)i‰b]&.^¼¨((½¾½ïD¶§‹Õº6«ÿ[ñkõ!å/V¥‡)CRöêð¶ì—·UŠÆc¼/ïS2±¼I‰MÔß:Xƺ™”K+’µúrWÞ3Kcƒ’€²®ð%VêEòU +YþË޵‘;D¾ò‘ÜÇA’ªÁ´¯YىH›Ý¶:IZ,³…)ËFÅ:¸_å¤""6z»|àým*uÈâFÃlXÉ¡HKöÚ÷{;;=›ãŸ7‚Ó\ †tÓg¬ÑUTRªAÿ›%}œhZãþ¼k].%ãj3˜¾¤ZZ@¶©}æà¸î!'Fã€K€‰htt< +ÜJµÜx-[¦N5~ 1¶ =2ªßO̤N§¦Ö»8¤eIÅíÕcŇ*–;3+Á‘Þ=ón ½è²)g"RV8ÛGœî1-+eÀ†·Ý#|÷€¨ôJ°ŠÛ뒵Xè¼Vv$+.ýe*úbV7ik„ÿèÿSü\d¯ésÞº²ªCwÊú®¿M˜«©§V]§æî­ÿô¿j_|Kîô”ZÇOEo@=g’¬ãa¶ ~!/ÊRó9Q¼îl4ù¥µ}·õµý¶ëüÿýüMñunm´•õjzo'óü¸ÙÊ4ËÈIJÍÌUdý% ú_î·Á_«$¼e–ˆÅ¿­…§Ž‡³`ÛÁ å´­>Ç2o—‘Þ1ÆStô ÿÃã4»<'È%õ¤¯±áO;‡X©h꺚h]†™ŽÊvfQ/O*u×åI_c«¸gfeXíyޱջ—ȝ°¯®c¤Z&¥£éyœ¦9c3Æo;1)ICø›&}Ԓ¾é”¿FClÖz ËðÿÜ<ª®¦ŽväæÝàÊFî+jêU޶’¾¾GÉLËX– ÙÙ°¨¦æ$~²Ç k]œRÍ)Γ·ŠÊª…¶zÇÄÃWÀ?™w&^F%ZÖÿÄàÚZZOÏM«ÿpdâ–ÌÅ:+ÿJé<ÿml® Um–ôêÜÛyœ¾BùY/\b•±°¯cžÑüé+î­÷øØmŠÛecɞš _\ïÖÖU+\€±ÐU«d•u3œ)¾‚¸×ý¼ÛkmòǏ“”SöÚKs§ÿ õŽluá/Ȓ¿GCɗ’Þp$bSùV¹^˜”þž›RvË`©h¹VV6eõ>úµÜ¯ƒ"¬\7KyQKÌKhV©åí¿JžäñfYIqÓf°ôԔ*É$™Öê³&³y+]ZQõ,öc£§®5ÎþÙûKø1¡øV3~¬àû6åÓÒÑ[ìDuM=&—/ƒýY+û˜šªŠ^4ä½¾g7õâLJ%ç¶VT¼ÎTvêŽLU󤯫@ŸÆÃlh¨8Ì,¬Røµ ÿu³ñehÜ0»„¾b¾þÑÐòRúõ¶’ÓþŒh/²Éá +¾a±íÍ·ÉÙqŸäI_ehZÒ9ç%Ùê†o“þöZœìôÚÛµfÁ‚Yc-!ÇG3Ñ_ì0Ÿžšg½‚Kg4+oñU’µÊK<Ʀ:[g_]X–x2×I>ϋp8Ð$¯€íšç|µ¾Í§?;啞Á[æX|흎ÿVåD>éù]¾k2æÝà¼füMžZÖ:dôn8ŽÏ¯ÿkühÜp }åŽÏ¯Ûe¥é]+ìüa=­Í¶ß@ÑzQ¡ñeGy›9Zù£Ê2´- é}ƒi𫓯­´4KìúúYbÊF6«C‘eSÉè59ük9MIU©`bG¼ÄulïŠ~×åö‡ý–^‘q³ëìöx'øÕ©üë®.P}sB@ô$æ±}Þ#ßò$ç²¼oíïݯTÒÑrÂ^=†?ÁìœpÝÆkxÎãûÝ môðÀ‘ÿÇ÷¸ÛïµT•ÆF ¸ë0ýçað=¾Sï±=Î{!{V1@Aˆñ$ç1צö¶Œ›Wºg%q‘í½^ +íÖá/¿|¹·¶v¾6òA¸›#ÿÂÆ^4M÷úzj5rlj?wúï—rÅ÷yi…îúûl‹ªëÕâï—6ì»rÄ÷9¼mç?‘¾˜ãgM½þW Û=hryÆ|m®¬ªšßÆîv[¬û¦Y¯%€í»~¯îð[WOW„î½~/¾ö™+ÿ¹J!›Æ÷‰FH^ж÷ù|7pôèÝGC?iãøÂÊʚ’‹‘;1Á”Œ€{Ðç2Ìsë®$´_»^©ªëÕ§ Ã^zü•ûÜf1s¨¿œeÚ uz OäÔ´vßa¦uËàÛÛ.˜ËïµÀÝ~Û£’Üa/Ã!àýÎW Û+8ŠÐdŒâ(?ö9b{–æ¿y ±¯®¬´ûÿ(h'¸10»-CÓ¦O5Œ¼áûÎã%£vëp÷®Ãßûl¦ Þfq]ќE뙌=Ù½²é»Ú0_¬†ßåy[YUEA=ꕋ†Ôgñ;Vq×vëŒâ(>ց„Æ÷¸ÓB߀¢_•ß'ÎnqyÈßýÎó÷¹ÄVkx"Œ?ݗecüÉùã3äåÙ¿#ÊêÕ¹K‰±zÏ:åðwÄS{[A þÓ?’¾äoݞ.ùsŒ†ÙVÖTÚ~7Œ,¬iéWÎ"¤âàóù܏‹œEcünE`³Sy86vØkÏ_¢pjäÏMZ~_Ð/-w~¹¥¢åˆ½v$Yèã0÷lEë±Æ÷þÚW¢¸æ+/ö|œáIb¯žÑZØ;pý-…íðWn·3Œï%×çħÑò—Ènk÷-&»·[ác;².Àéà®s8®ë-‡»î¶ovŸåò¾¹Ëy^Jÿ\•rF}>£»!5îüž,Õ§ú<Ñæ0ŠÖ™\/nFz#¾a²^F&ÆÂ¾Óô|€{Ы8BpÁö¤bø¹Ï¸×91)iú^nö¯ª’¿‘¿vdc€øz“~o¿ï6¯–Ÿ§äÌ´r¤¯ã/¿pFP~i¯xÌ«¯{?©ç+“ÅT•üO{öäeϒ¸¿GkÓ֟[ÊZ>^*ùs[8B»õÄf€Îî_­n¦ÉXYXúRWêié0»KEËÛúÂ4ûã¦¢–ÓëùWUO›È_ڏïTF€~VÂNÌÊÚ},,+µ ‚²X,Ù²Á`ýãnÿáþÔAüÏYX¾»å•%ÂŚœˆ?»ÑŸË†’Š‚Óþ>@ëÕ%/†îÙí÷…º´ÿ—‘WÖ«ªÛ>é•ÂvÄnäõüà铧_­@ßÔò6Üu-&æ¯tFà|Ò>#f®ñ¤¿SÉy-ãguëÚZ.M·ÿrFà~F“vp­«©´ÿ§“rûì/wìVÖM&°‚Èì§ÿ\âÝ< q¦ð÷®Åmaß{B8€ævGՒ®­«´ÿ·”\©ìMïْWÀæà¯&7ñ֟kʪš|]÷Ú´´\±w˙Á°ô÷‡*¯±©Ãn<Çx=’ûœ‹Ø‰Ê„•ùmöïìä¯,ä¯áûÎÀàː|£T璴ÿǙ%ø dI_CS†«±µŸØó9‘ï‰+àøý¥"ãUÕ§oìyŸni$¯€ãöç§á0adI_þ~ÆEZçÂJø|¹+ñ öª¶I_ü9+òq¤•ðJù%| +ä•ð¿’¿þýNnI_¥%‰ú||cæƒ)T•üñ¬Àó$¯Êoa¾Ä•ûóKEË yöY쁂¿ðI_ª©¥ÜÁ=Ã>lø~d•úZ>[ë¾_Ԓ¿Š½û3eÀçÉ_år8Žn8RJùµàòˆØgþŒ‰ÉÙ¹g,]çӒ¿mð +àèI_‡û̕zbZ9·ü/NJû{eÑ¥¢å’iìˆëŸ%~.ÿ'‚hõ6¢ÿ'€7ƒü?¾š_#‹DZ,“W»õ$¯·5{²:Àñ{_íÌYxü5DÓg1~œ•úºšenqþ[ u#¬?|Ò7ÕÕT\HŸqÂÝ}9+ôt<œMîæI_ëî&æ‡!KÐámE5+¾ûNJÿ+‘9ˆï~Üáªø|¾-b+º¬›o8³RØkϲolº}~?Èá{¾½¥¢å58à|®I|/ßj ¼‰ÈíÜ +íÖç1÷¿JJüÎþ; x[ûçG‹ èIb•ŽÜÛH™³³`þójíú·uû±ïêy¸Ø`{ޱªëՑʁ ²Ô[óÁaÍÁ«Üúè V{Ғ¿¹Ù½à;XÙÝzâ9@åü#B[띜MïÙ㯷8¸]¥%~ ñÔæ¦|Ò£ŸÍH™HíÕûµêœ±y‰HΤ•Å»ázvqih¹cŽsÁÌ7üü– Xí•lî½{«ŽÃàu$¯××VisXeµ8ãWhG|² õ՗7{ééy™lGsð{%w¶ƒÔ’¿YUQÉw÷îת9ƒþ7ºœDìÇ7@kos8»Æ{!Þ¾é+Wù*áúžSÒÑdoݞëÕæqb8€û,-ÄËŠ6˜÷w:¯o­©Ç'Úîþµ®ï×vð?'…˜ÁÍKGYÙÙÙXØ;Ú÷}¿Â†§SÎ4ç]Ïè2Fݼ€÷4î^ÙûKÍï8ۃ'éI_ÞÄAË\¥ë9Kü)Lý]ø¿';|€£‚Ω_§ÓÞ§šlæ)¥¢äâÙt#(?7ÚêÝ[«*ê:’W+«ªó«Åúé곘ëÑ@ô>XÔÉÑH'GÎ_&uµ«Ý/ѓ᱓ ô~-ÿ›ÓTgõ<áJF­ÕeûOfoR°}a[ìe¿ùü†‚Õ`;oY—ÚQd>Ž]¸¯…)n§ŽÎXVÎç×+ä>áæp´”<Kž8kϲÉ_ýÁàèü`®Ù}nƒ?$÷°Ø+·[›ÆœX=ŠF\¾® +ò½n€å±þµ:äüñü8Àj~¯2Ôøó™huEø¸ž›ß«œB?;›Q`ŸñÞ¬Ò¯‡lo©Ñ“žkzΚvÌ>–pxå„åþ–¹Ù³³³‰Û¿fŽ¡³@óä¯ë]œ~¦¹Ù¤¡ä»f ;`LÕgÿ×ѓý…|L#怒¸æÎz\Þ.§¤¢åÏñJÿfPùÐÁ_ôù©£#·~xÌù»Á3!´WÇÝ·ßkšÉXޏK–lPÏÏWý'n[¥%fú늽û?ƒÒ+ݟbQãÂÄIEí|ÝĦuqj{Ðs9\{;6ÿ«ð©7¾Æ«à£%~—™çt>ë—lih¹lsuÞFëéTÓÒ+â SžÆ«çÀ{ï:WÃae +þ¯ˆMc¦N2cQÍËÞ+«jä"`ú?$o —г_ŸÇo ,•Ïšœæ;¼_をŽß%ÁŸžšcóæ¿Ç5>o£‚ï[ä\önZÛâ1eíÏ$ù£Ê\|”¶€~vœÒ¸ùÚo™ÊÄß.wîתж÷î™KöÉë;9/ Ë£ÂÚªši‰XÖo.™F˜¬÷vbßgò'福Âðÿ¿9ä]úRWø|,/w×¶]úÎoÆpÚÝ.Wsó»Úk7POZç|µ¿Ç=bß'›ìdfáþ›±¡ÖVV32Ñúœþ8ùVôÖ7Ñ;O?«èÍkU×í±W˟àqH2]¤ƒ|uWÈÈëô,Ý7ÀøÚšaƒ ‹Ö~ýÚõGLÀ‹]Ù¬<ÿg¥²®OÜa× H›ÒÀ/K°ŸZªŠlÆ*ñî:ïl3ã=c¥¼t”TKDZÁÝýi½9€Y ­Ñùú¿ï~ÒÑrÂ÷~ÄÛ .JþöÎê‹ò'm®[ŠÝÿ¶!ˑÿ5-çtèK¯ÓøKu2rà àŸ`´íº81Rµ×mïK% +Óç1UKüÃÿe}©¨Ü0·Sƒ ûGOß¼<½wÇâÖovcÓÙàûŸZ®àÞ?ûÚ]÷§«í¶¯Ú^—eðœ8¼5çÙb/]‰À^ÀýÿìÓO+xÛ}sÊ4ü]Ãæ[éñIo¨ß_¶BÐðzµùGíÄXò/Êj3˜§Ýv»Jáj8ڌó?ÔÏÓtG…ë>ñ k³†µÙ¾×ý·üOwС¿ ýý\¸sý3ŠôgÞúeÿ ¿¯¶€O3ðÛÒçÝ#z«S›O~ïÜkü<·^C¥—n=º·_9½Û×òõÌáq*©U½‰T, YÇ¡U¶¾Ëß@³•ø|Ê9ü8ý×»·±­§çt2©ÿ’ÔG“gûÀÆùŽYqÝ@¼ïaŸ÷Û¸$" c÷P1;4ÿËÿ„#¡öJÿíÜ©¹å‹û폗ë—HD@y”Cœ@üeøC8 +çԔB>/¦ˆ\çúô€ˆ"Ž|(y‰U%T?աnCÇöRqP”ôžw\“9܏}î:Çý6cî«ú!—áû¨:÷°>Ê®#r×Ù{è÷Ö Èn Ìÿ6Ô²£g'fO:¶¶Q›‡ù-ä H•id|>Ê.ú"U±ÓŸ0ÑàOs®ëwÚ(¯ûa÷œß¡æ+麟ᒿ/ç'è"¾¶á1^»]싩T"¾þ;}§LO ‹ËJ•—ז›Ü‰uUÇ\¦[q^¶æ(8‚éAÉÈëœþž+é9¶è°  qvõæÿfŒñ®%¢CmˆÌ ûzâ¸÷HÀ™BFôŒõ≝»EâŠu·ŠݨYt™eÊl° ´&†Âc¯v¡Z¤ÄÓY ¡Á =Ù<Or °ÚîÁa7– nŠÛXƒ­.ÝÃr–Dm‘¤q75÷÷ ˆØ+næ½uáaQ`67I—_X£ÊhÜ+QÚø ºþ¸¿K¾¹ßGÌß[×úÀCŒ8ä€×)¥s¯ÐŸŠüOÀl­íÕ|_ÁŒÒuvõ§!Ç2p}i§¼®0½±‡·CH~V¡ÆÒþ +¬Ër¦A‚: 2b‰Q³C›—圭½µªÁ½¯5`Ù-ˆØÞÄìTô•€Í3­V®Ú°žB,–)jÂõÃ,L֘>p¸÷'¸Âzä ºk"ºf{†(0‘€ùÛ(»§,Þ™«„ùÓ6Ì㢠ì¢ï¡§‚ñ¹Ÿ)m䄨/]2I¶fñœÐ{Ÿ;f]ÖCïƒÁs„‹1'e)4òÁ"lXýpÀ€š›/AžOõ{¶ì  ƒ¬¼¬Ç,¢µa°0]¶`PÜ¿ìM¦83öçßpÑi?×mÊæ¹js´÷pØÅ}Ïn¸›§MW”6ÈÄ]MjÀ­ˆlôD‹Z2W†ø{ì~ÿϙÇrÐçMPz•è†ñGz’%£½Ku"¡·ŠÃ‰JñFuœ³94â2P{—òÑát@.Œæ® '‘zݓX›F‹¢ð)²âð­®L4]jµé9‚“ Ë5¬Ø^ºhqzùtÈë’~¥E“+U]G¯è‡ƒh÷û¥;9ìo,·g]'jÂîí±°ÏßãAë7Ø}nÿ MŠ@ÛMþ4,¡¾Ãàmñ¡bá¾'û‹½ÞÖK@›¤v0ÂظÈ ½ÆÄ€m4v„˜o¬Oôšdc"cJg£¦F~$á½ÑeÚ Ã31ŽÇÙ;LwN&ô‘ 3 ô‡NKŽg}5ýI“("ÒÌ'.4Q_7ÄëÝ??÷¹¯×Àáœñöñõ‰Åâÿ°²¸mÖ$(n!dç^6#øOr | wÜδ>BÁ> ÷P8xá‹5¶æE—l;H€},kW@õ˨ >{ˆù&—²W̘‘<² +±v'âAå¢GšÄca¾7–é4Íæ!)ÌHO»ÿ6ØìÃ>ò\˜®¤×õ›ì>»¬ÅIÄ|¤¤ÈxÃòVAT¥ˆ‡ Ó/…Amû¸Èm¼¿¬_+2Iåٓ#–t˜—û‘#½Åóî|ÒL€ß y;/Ý>:А¼1‚z.̧~W9c°ð-۞ӳ춺¾ƒœûŽe6ïgËT9A +¹HpÓZ$9²#fëwìh'ãGFzWã2\j’ŽtÎBâA(OºêGƒ8ùhmµ\þ.äQ\ßãBFc²Bÿy[±ä$qrü—Òò¼Å‰5«*@sÝÉX#&!.BúTÚæ‚.“<ý =ní»Mð^8ÁpÍk–Ø&ÖBŠ-‚õËQg]7Â=Ãk@ŒÇNºlV <KE‚^{Œ"1¢60Pjà¸j¼›ÒmÊà–Œ0½Û‚<¥}ψñ ÕÁEè6АH°UÁCÄHï^8FCˆNܱÑE|-O´ôþ³îüÒ«ä©$©ë™$šŒìÞ`Ír¢£ œÈj ž¬'î²¹û—³ÿ'ÑsIùç‰úpôýüý=ÜTž› +R+ùÞW1P~€~,Y“H¿îDŒ³÷3$1;äC¸’2èü?ǑEÉqÍ"ӛ4œ™»çßXz£Â nÓ°¾³üw+›yïÛØKm»¿ï>ëÝ}—²õjÅußyÌÒqž óhÂYS¶ñ““‘$õ%¤’’PÌüNˆã¡§xî¥g¤þ*Aw2rk*Kj ÷v•CÁ ¦£×—±n,JuĚ"$Êh¾G”ñéèP¸¢¢Ýp\ßy4CnJGûâ@>\ç\™­ŒÙ¾7m×ÿÙE—Iÿeökî{>ϱÑöàô]ÑzßHõãi²~’§t²8ó©(y™¸sŽÅE}Þzrry؎º_Š‘'3s,f Ο·€Ñs,hGõ½f/Y¾ÃF¯›V•ÅǛþ‰x‚ÿÙÒQˆ£‰ÂšQÌCþ=\Ϲ4l¦¬™³‹ÄŠïlÃ×á¢5û®îŽW“Yyf_Æž×œ—7——É£ñ’/ɞ†Êqò$¼˜Š $+)U÷ˆèJü9ɜp{&L–UÊWå¤( ú­+²ºPÜýNô%ìU‡Ú6 †BpŸH°&UñáОRDî"(&òw› Ïæq§4ÎÎj4üÜjÈ^b0q$7ÏrÉ}÷Ȓb[xŸÄE—Ñ"€ÝV©vz|Ù@ RHïªpÉlZŽìù">%Xùçs7I=:ÊUWªG™/q«3o2JoÝ۞ĄÙ¬ñóWr›ãN ¢_r³›×M?œûoaé¾Í»EÜzˆ:LN¸õé~Ÿ +=^úk.x²Ui©ë9}ý˜·óܱ•ÝPL%z ?;ìÖÝØ²£Öü´ïHh²Â䢭*¯¦X;‡ç)A'2qç&«áÌǀ‘†ë‘M›-§Ï%‡¼%¶ßÏ%xÉuÇiÚr}ÐÂ[u빯°é=wÝ;pÆm‹<Á¬4£a•£­2°÷2‹Ý*Á“Fp—‹<Å +]<‚ÒƒåýÂz=†—‘Ø¢ÔÑJº“_ óƒIdcbÀ•3¸arläy¯†¬K“4ǀÑì ,Ú0Á­¸)V’–|BJE ã–+¿&Ë ýjÁåçkÚòpÍ͕O9èùv›Ö?zß;Ýí½­‘fk£nÒp-L$Y„ýÞ/rš_{&9ÝÎÄ~ø÷”›íÈÐÁÜEvåírNi³\ç½å^FdÑ#÷zÄd?1É6·o#>øõ“:kT$—Ùü;#¡Ì>U!ë¶Z6 å&Ϧõ‹ÌSmuÒ¿.Ê¢äÞ,©Ø†ž˜ÅJæÝâÔN£ÖŒO™E…zí¥ýµlÞЦ€ŸØègy¸œtÕvÿ{)«åÉdp銐rm=è/1æò"Um2-A¨õ^Üy¦ô(±r(fÒüÇ3ä@øVLɒ…¡¼:b× +ù†©’÷ödÿI¬mu‘ސzmÒ,ÄA\Õv˜K-âìbkHvHchFb!(‹•‚A€§ bœH<¯²×3Ý=¤ôŸî°Þíør“ýÚqž?…x´Êµ&ZÉÙ\¦Ë­Nɞ#—,µÜREq®ýeðï*ЇxTÝÚoq±`J²È&ÝÏÒ*³(à¢l+dh^ñkíH–dâÆß +î*ϾN¥Ñ¡@xøöäО5~†´=šÈïJ  ØÛ£o^9ctmé퟽qcZC²G »c1¡ím%ÑrŠ +É7ip¶F<÷¥úû‹-ç"IÒBWp :ˆ†óÞW" ¼™eIæIŒñ”‰tç:’‹¥Õ–óo«öc¶(ØÐk.‰« ä;¨táûö¡>ÏóOϙñ‹!§¡UƂ‡‚þ½ìÔÿ,pdÛ|\*©£X<ì»À¿1ôy¯±rÕw#_hai]î>mÆ<–£È¸ã|㑞ÄëÞÏN<Àño +õ5ÔX°¯‰\ÍfmWŸ‡!׿"5ùˆÛ1Àb¶ÝŠÛf+Ua-¸ ‹­u$0À¶nÌètéGLN¸’àÅ åm¸àle3 É U2'úuÏٌèa,·CBæT eĆìæ®8{Øðµšû¿Åð/—mðKô»»ûyO\ˆ„ml(Ûw ֛‘+.0p8‘/"-\È|OtÅÂ;:×ϓ”å>xÒÝ=6×SìGÎäp?ùíkïgî3Y £_…l¾\ÝúXM+’îeX¦÷7vJ)µ©éµöÓÕôÛ +ma4ÐØë‘mÓדAB{ÝÆ¢Yíá+€øŽU"Ö¸Ž%6¬Ì4›4±ÝbŽºH31E4òMTtÈþ§Ýkæ;)6цròÄ-Ñ:ô 4ì˜Ù0(‡5éA„^‹:ž¯'¦¡×¶…úÝÿ^j¾›b‡$dqؐ’ySlLô!ºžPƒêÇtüö÷64ûoµ­¢ÖK‰7§ŒñÙ$H&±ÒhªÁ]¬‹Â_=<ÌôcÀxmp¯ê6ځj€ú_|¬lê¶ï´Fé#tI²»ú$jgüÎUWÐ×Qjâ Ҥ󚯢ÔÖÑOVÑN“B6÷V†ô›yävôû=2µnyå5ۛ ÞÅ5¨ã’Ù"u-dÝÓ>¯¢ê4Z±S•¼Vƒ›#ƒ„à"Š]YþµåTû‰Í'Üù¼ç?ŽÂ:Œièµ;åÖK†èÇë Öº£m¨7m¡Š¹þ¢7 +õ1}Iµ«(µ¨m'PrŒâj‰Å";æ‰Ë¯lcb‡1ìÒwYØ ç6×tßγs¬Á©€ý_¾Vý^eՂ3…sp©þN(’>^'üÇÃÙïœÛ¦ÜÆó…CÎqI§¥¡>™_Lˆîókî'º.tݜ”êè:ˆˆj¢ ’Ú©4äëLÓ­ ¡äµQ}måïg8èØHf< ÚMc¦‡r(¯“Ý=ì}7§Ù飢5:‡gkFæg*6…î 9Ð}öÇMø´:˜Ü+ˆ’¬ñ¹"HB“mVu„ÚÊ28¦E~U`m¿?Üàʈ’°fîó\õíH7àYÕOÂ|ä´ïH˜tC>™o{ûø’MeâCÍ{XŒ• +Y¢G8m¢h~u%E~§iÒ̖{ñ9ڝ¾¢®†u49/¼ÉoI»1. –ÒPÏäIý*fKnt,¯ø/\t:OùÎûnn¶„ÜgœK’†Duµ™(1¼ÚéÍÚ7¼¨¯Ã’­Q‘PAН­Ž9¤¯Í˄d¯ø¸ìôø¸Xã»Å+Äürzí¥•TúžèG»Ó |ŸYµ½}õ®,{ìbäQé8WW%p² T«aÛuíX\´]lÝr–g[¸_hÌëf+m›.R@Ír¢ÿ§*&ôË VGnÈëf§Z4:՞…u.»cÒóÅíµ‡C«Á½LFcR0ÛÊjºÙšÛB9­ÐØ·]hÍm«•ö¤{‰¬Ém©5œZÝ ê–+T“X&‡Z˜GÀŒ6‡[7^F©v—Û²X_õe©Œ–Ú Æ+²Ùu«SŠ [.¶b°°Ì±j#³ Ó;)Ù43ˆÀ†Ì7I ÁÂ3/$-$9$Z‡·&±ŒÐtœ¥ÊûL7k´>ì.^©¬ètŸñBžê^3’$%ÈSi¡Â¸{r1â©_v‹lÖªÞÓí:moEêv}?á)«Û(Τæx Ê$Q+ŽhW5I·Dá¡9váz–ø7O²åàî)•·ï[®¿R;1€ûÝ-à½ZÖ½ÓUŢȖp¯&½Â–Õx!ð¬ +h/ܾu„{e®Ú+x×$,KnF42on”QRlKÛÕ×uÕ镩Þ<ŒÃÇi6X@é®>´0‹=-d4 +þ¡!ÀdÒ?N™Ãva»éCÉNÌp“š–Ÿep5. •ÊAÓzÝv†jY¡×ôI©¶Ùßðr:evr¢sC­ÔTl¶ÓžË[¥õUSú…׊ Í]4‰Ä±Û ‰p³WÙ3 ²×çµÇÁ“ýÞ)(à`ð˜øùÃ5©éöEí“B$­€ýþè±ÛyÎ}uõ¦ù ÁÕ"p¯ƒn™b¡Žg̓!&H-“ÍIûƏ\/ËBºAÕ¥û5¶¶•;-Iêö]7®²©Ú¸Â¼á!±Ýº(jø .0ïSÒï`g_Öãwß*ì\&¥×7Á»Ð.Ú+»±ÝPk Údƒi¨õ÷Êj\`Ýx1ìœý‚ùÂ8~*Ê¥€êUš3¡ò}ú™ýgAŠ`Jþ?Ÿáô¶ì–cDÍ-2mÔëuU ̞kÏÞ3=ºÞZdóîb²ÚªƒS±éyéùßg€ª¯ƒ&!Éu‹œÑþ"+ù’Eÿ=p¿;ÝKß·íà½m¡Â²r¢ÛSwQÙiým­VÕÛ+ÏžØè[æØ+Rr(–?ãNM`žŽOµéÅ»òàÎM¶«Ÿ½µªÃ~éw§6î9ïq€2 žíyR:±d²ï®RÑk½´üï³tÔãü'*DÞ_æ¢ +³ÄE|œ ńó;ë9AíŽãqmZÛ.€ùº»…þI½ŸÕ0¼Nïƒ8uÅr–ú~ˆíÜ&Ü?=¹½›˜U‹%<ý×=ŠâáòsêÆt™Žeâ‹3:ûœ#Ðd=²[M&<JPy'g;"—¾ÿ} ´ìû.ÛµíQ°lI¡ÛvÝ©{zòqò·/Ž‚Ž<ɛ“éó³èVkîdå¤ã'ÃÝ3¸QLu)ðù~ä÷Síº†g]cp¬² ¸˜¢Zhãl×CC ædSÈù}æ5?&/Ɂ‘æ·¸.GC&Á!nR»ä\Ás1 °$Æÿ}‡×uÛþïëH:î´½ñ¤ççŒìŒY+"YC†8Ç¥,Á3">h_FҔa€«y¸ÕO ›¸Ìùh%Ô{5¥îý‰›èxV~;‹xx¿u+8õø8 Ú3:HΒ2¤¿±qï#Œˆï{…:4,þëøòr ´¤´ÝÉÌSsÞ&v&‚#žgÉt£èAe½}&ÏQì'F1Èûe žèpUÛbAxŽ;‚š„üšf|\e#ÁÃñ32ÀŽŽXnã£å&²)Üå…Î М€ÉÞd÷Þ4>~t¬“`cÃôZÐú41ŸS¹¸ŸÃ/0X¿ãÞ³h÷ü4˜PÅ_‡^ÙÑì4£~€ã|—þ²ÞíÏrÊT–G8–JÎî&²ËȤ3Qƒ‘wd͒—‰Àøøç*'M®gdYœä«ÐÃӇèQOq8ÔOìÞøYª )Öù¦—‘àœµagY¹ävö’èÀoÜå¿¢^®Ý*w§O¹uÃ+ÐÙÿƒ‡Èøþ‚@ò(‡|dÎDù{È£?wTM¨O¸ò`úŸð§çz ûz³®ìVÞY-'ûwb²êÀuí‘ÄØÞYLŸéÅõ±òÆ0ÇfIÓÇ–p÷Fsb2d6ò›´×^Xgí%¹²™…7‘ …(It€[ý+›z^¬AÖ_y^uÞdNF4͈FzחÓ`K8mâòFÊD$™sޏ ‹\K«G+ûzíÖË¥Új=Uî=i?½æ©z®–£kÓ¤)ö1„¼öVé-Œ9Ak¹›þÉ֓e3%@ùQ/w³Óî¶ZbhTí´û®¯ÛÔí:Z~®.´·ÒcÑ3ƒòâ¼¾9Ër¦34™Ÿ€iD‚÷öÕsòû¯<ά!it”{-VæuFïd¦²iU¶CB~Ö®|šÿm*¶æÝ!±Ÿþ™Ÿ·¸®Ü"ÌEÇ·­Ÿ¶­Ÿ´ÉÛ£½SW¶GX‚3Èì•Ó&µdý½nÞÒ²UnÞΫ!÷ÉÿbïQÐU\HrƒÎ‡™ ÷‡âÃ`© ¢Àý͵nâÚº…Mm¤Ô +SQYÖPZVîm+¨É­eUAo\Ffâê¾ÈØIÍ3ÑkVMîâDHKñ8í>††Ú<9“‹ +‰ÉIÅSqØÛyF3ё¦;3Y‰sÃy´«¡žEú=‡E7»Èx_×U§üê]…ÊzOý{lMn›ù½­zÏÜûJ«&ÜØÔWÒë÷›mEF×§¦Ùi¾s‡ÐþIÁkîÞûô=¬Ò•æþÏöx‚ú×{cQ³2,T{(¬%€ô{ #Óíõ-°oÖ*Wñe.”ÕYÔí ‹îwC!Îô@ÃH¶òÓeÈ@ÑE–Çu­4–·q@ñº|²8fqזcÏèÑ +“Óo6úš}§M'¼W¸|Í¥m6Åû× n”÷ÜU–Õ>÷ÜÒ6ûïp ÖÛï~»î^3÷^àZþ\3ýßpί”Õ¦¥ØTmz}¶¨{JÎÍø¿î‡z67ΚMó:ê¿ ÕÆßÀÇP"|\‰¡ÿœw•úpÌö—~#Ð咶k•0¾±˜˜2¤Ô5^Ÿsÿîî úžMwê‹ßí_ +¸Âò½¾Ùì•>aZý…cüר5¯Ê+½àLûñ›|p^uòXV_"Žë3­Î¹¯•ø£yg¼BË Ò×Ð>z+õ'û+Ì)ÕAçozå:NÊ·Îöu~o³ªó]gœ/ûUæË¬ǜìSÿË8{KÓ"ÊÙ}Ì©,UvõµSúšn«¥¯ |ÙÁÿOpœ¨¯äÚ~Äó[kE†§Ÿí©ÿÛÜS}_qKõ=Å/Ôx;ßkm§‚­·•ïè}Lþ®›e¦°|äWВ¿Ê¶Ý”Ô]ÕNoé9€¡Úoßm¨íËïld¢¿U¹ÖWÀñä¯Éæ&«ÎŸm{Iø=µ7—àÉbý³ì$äüYk—8KU@$¯Àñè¯ïÏoymî±¶ªµ§Õ±£ô¡pªå×EøòdYk¨§B+àj+÷ ߞÞB+êÔlì(õ(}qMå‚à{äX·_YuÒ±d²Û#ä~%°gÀò(¯îš_ª¯ñbíjJŠù§Ũ¾ùÖÛHÈa×5ôAð?îŠú»j´¤¯Â+ày6¢þLàýÍ}E|ÊE}î‹C­ñþ:WÀú=<.!X?®ƒà|TWÏ`¡¡Öò>_S„WÀò¨¯ò(cÈ"¿¬{IçB ~Mƒ?¼‡%~(¯à¬àú¼”Wë¨ç¤óá>+ìrlúÊs€äÓ·äÖëèçR} @„…NßÊEr,ð<œ>¿&Êÿ¯ùˆ¯á`Z¥NܾSV_ÈE} Áø÷Îøœóä¯ïí«QëB+àxÒWïÏm"fúåAoóéD•ø—%~•øz_œ„‚Jü"Ý¿zí­å¶E;~²†t`Éð?:JýM]uÁ“àyƒý댛ç~’ºŽxY_à~T•û8ö¢úë¤âÁŸʬ‹Q|ÏE}‘ÖÊãÓ·Â+àyY©.Ô_¯ðÑ_cdÕ}Íí­T?™eú8ÉXšˆQ_Àònqõj‹óÑéÂ(¼ÀÿĕúËkËMé(¯‹Q|&JýãkËjÛò¢Å\$¯ÀüÔWÛ®.Dß_wç!…ø¬€åZ‹å¿øôíõHS·Ïƒð>àÿgP[œ|´Wøök¢¿€ãz8®áGݿՋQ|Ì¿ò>€XWÀ¢ü¶íÿÅÉÇý†çê÷û˜U¿nI¡ßSå¾5`ýfOÐ@ŠøG0üzÁû—ªèÿáÜSÿ°!«òQ\؃ÁðêÓqÿ¾ÆÆ €I$’Y$²Û$’É$! $€ l2 „m¿y¶0cm¶ÛlloͶÛm¶Û$! JHHPûßÿ¿{ÞmƒBÓ´ë&šÕf·ºõ»¬½í®]Ýo]o]’îKf³©Ê[ۥӬײåÙ-µËe—w.]Ùd²îK%V«%–K–ùr[àÛàÉo‹rYd²Ùe’Û–ÕjºÚP–-Ý{§Yý@Û®»ïKl–j24'›õG‡~~FOœQ|8Ó^~GóøWþÃ(Ɂ³U%ݺdÙHà ø‡&<¥Â•ˆ«ùÒ üÑ_€£#'à'ùƒÿ•¿rcÆÚ©˜ë§=ݾW¢Å’÷>„ÀQš+u Fg’ ¯€pùƒþ§G?¬~UŽáʋ÷ëó-›§¨æ[+[lÿ]3œ¤9?N +ä¦.‡s¯SÛ-ßx­›ËäãóÚÁó…€Öâ‹è£Uùí»}õV;‡Àgõ¹6KEf¢Ñ\ªÀ7ؽœ/`–v˜@êúW6yvFË :ÏX¨¸5û ó/ȐgòPÛÞׁIÔ¾màÿçO;ýÓ£úÁNEºý_!"ªØ”e°Û»¾|Îë1@nh¥­ú +Ù]«Hek9º'¢¿5ƒàǕë?C˜?Ãà¨Íª‚;•lêù¬ËFæA©'ÞXÙc¾iìrô M¢˜¥Ô XŽspÿÐ|©?oàüšŠ'*/õòúy?Ÿ Ïû¼Íb§.»‚C­ä£ÕÜ7÷Ä ú$³e$Hñ5‚ÍͶzÂw¤˜VªÝ¥},õGúÐWå!ç´Wç'߂¿í%Eÿ—~eъÿFayòµÛ°åc\­©JàR‡ëÍa_ɂ¹²Ë2cmT»EewÎØ_;Ý@XRv yó|Ö€*/à8“jâDž³S,ì/mW®Uñ½o{‚JJú“÷0—ål‚?ÅÎZ•±w-ôÏ\̝ª·Tл[R|å2T_ÉÛvø¢þ!ÿИ›ó.¬R˜ª%¶¹P›þüj® µÝŒ;ZR©Cu‰÷åë]v­ ªÚ’Ë̘›òpç_©wâ_Óà4Käúú)EÿùÓ©Q‘ Ýzº~öøºÝS$ÕXÒ½´î¥q Iµ£n÷z«¥›¡M}Ì+¦jeß|±Z©¹àëÞÎ*è–z¡úr2|ÞÀ‹.ßä"¤bØqFU6Wÿ:yßÄaiúíB~úò{Տ˜Îâºý¼ž-!)©˜n±:A;ñ7™½OgAÆZi–Þ¢¡?| *çÐw‘wôŸýgfۚ¢¿ýå_›Áøqê—~{Žßú¢þ¶nßÀE±æ6^f#5kÚF6¢ ,¶-T“ÕZdÖïõ‚ŒÏfÊáw©Ú+UNÉ8ÞÇ¢ÙÃ^҃é8›6¬Ë£×6ŠQ(dü=9Q~‰ú?ªÒÏQªú§õxß>Ÿöê˜ß/¬­¿ ²»Wo¼tzknÚG–‡”•÷u_I÷—6Yyº‰/Öe©O7ê{O]Rà_;·ò`m~·g~Igaæñ\I—V-³½QÈ~wŠ/š+ð%Eú ¯À" +ÿèLMý³›yªŽÃ‰~ï@3ºõü“sOG©¼£e”Ч²ËÆÛÒ~æ}M–_½tfxk«_lUKUn§Á¾›o nõú˜ ÒQ6d³´¯Ï—o肾sð8 ü¿ëNýÓ£F‹pêiü+î-šž.ãÎǹÛ}ŒCd̶,é6ÄheŸydž)¿W…™;2wŽt}NV¢âÕË[ëÕ^Å֚ÝQºíÑ÷q-iEZ<ú”𠯀} QâÀûÙX5¹ûæêU8,²¸4¢íiBVR|å?óÌ1ÝÙ{×~BG²äûK¯)v¯ò_wñ-rªàÛ\ö+҇ë’ÎR>|Î?ßëÎ(¾¨¿þüýʶ-6B„×`§xP众Ë73•¿V´OMÄ¢pYe°èäì1·¡+I=U¿v +Îz£ì³Ý{ÏaZ9[ŸYÈp¯Âéa¢¹|ÇØv±­ˆÜ~„³™y«p%ÛùÅÀ‹ÇoõzOòҋÿzá@pìi3ü߂^,<º¬U¤{»l¡ÛAkOo Ie9椖r“3ûš-v4AÏT6ŽÞ«¹UÑCdkØ»ŸCj®U|_‚™ë5< ¯Ñ<\Rº¤ýêþ ŸÎLãù†OÀ¯£ÿÖ£Uý³›> +ŠÕ׳{ˆ,JqÉÌ5ÞvÃõ‘®VÍt%ñtTAh½¥Ñ3 Ô%ëÑÅ*”t¨à̳VúÉ<Ô÷¼ÖÕ÷£ÑfºX6êÎBïÒ^,\¿ð ³¨ªeZëzØ;ÂQ6tø¢#ëÁ_‘‡{'èøq¥Eüí ŸÅÁ:À|þ?ÂÛ¼tíô&ûm/ƀÀ§Ž¸õœöÏÍcÚz8\Ÿ]Ô»o Ðâ#AdZ‘Ì7"lÉAô©>r^†É1=Nˆ“ÍQ[ùga¶XÑ$á_uÂV[Z9Ë·aÊ´{}„ԍéëù|»?y|™‚è’w£ÿ’ŠÿÊ5_JT_ÏqEÿÙ¥ýÓ£¶2‡‚²ST•¾9n¯r믰ƒÉXûlíÎ^ «f±³ÙÉaè·q J`Žº%Ö£‰½¿sI=ò)=URxfD¼ÎQÒw¢ûýÝåڄŒyݕ,í-E椓תFñÕÑn¡zž÷?d˜·iŸtVuXNªùfæmšŸàgOaʸ6õhƟÑÛ²¼h+êX HA_¯J/ú_ÛÖÏó Ç»ë+OXÍg¬T"›$ÛU“˜Äܹ÷ qóa†ËÛ{låËa ¾íc°SZÄÉl*6[ˆûªQ·¢™Òˆ±% Ö¥ [AŸéQ¬aðÌÿL»[Œ-Ç¢lÉFÛ÷Q—-–~å¦{¹È*·?·Ù3xzöI«¦Á4sVô\9kRò3FÙ]«vm].‰Þ×¹YcܽrŸ«ZΪTMÿq;P ñOæð~ZQßp¯÷GïÚ¥õ$ñ:¶šE²¹Pò HNp´«m{‘»WùKퟚmhçqw>‡5€ê1öŒ½§DñtÕ@ޑ ðØAt]ë c¶72˜]t%ño Å¸4-ô×<{³jéð–ß\ÖÏÍÞ,\½Ë­ä­5º¯ÀËô\„ÖÑë£Ü­~Ê +ź|åRweÝ:Ž¢oçeÛü„3Ñ ÏÀÑç;ûڜ}sÆý*QÙåÙ´Ò«ìÞïþ˜ÏY©]ì<µùŸ›`c®¾Ã)}¬­2W®žÿjç'?U²»Wó2>ÏX¨ÜúîKt祬)C×ѲÝÿ¦›gä!Þå"_‰Q~j‰¿ˆ~’žç;ÿNŠÿ÷Nˆ éŒåêŽÛc¦ñ ²ÿˆºuܞV÷ì#»NlûÐ}.ÀÃe‘›ïõ†Ecá¬-_ï©k÷(Õp­a”dŠÂQpÖoýAe¹õ¼Š¦Î{PçÐmsuDmå¿çå+¨Õµš¥õ,œ)Ûü8ÚÁùú€_úçàAk×ånôŒ’›s¯Sü¼õFŠÝAª¿Qo¹rÍõmÃÅOýr̶k…Å?É,{‘Xö·Á òqEðãҋúíôÕ$À«Å¶¤Çý–f#‰¢:4Ò1 þžcúc=b¢Õ׳dî¨;ýUÚQöî”?÷SlúÇÉX·ÙX¤h¯åŠmŸ³¬Öj´’1/ó´¢ÿçʋÿ*K(lòìš<} öú˃²ÿ«Xuuêéù‹&;D—ÉPv®,ñ¦Ùù8”lü°¹éDì#w4WàõxWûU‰u$ÿò¹ßöÎlzm Êꍥî¾Ítê©öŸïAq³Ö*6úíA§­fÀXé¹;…*¶­ÉÐå,©‘*/÷ó|Ñ_€T_Ëéä}jvÿÝ:1Kö”¥oÅÁ:¾«ÇêՔíþG' J‹ðû’¢ÿ}17Ó§oò²×Ãú2¥ÿnñVàW†ùÀgÀ'×ä·Õ῍—uè!ðgù¼€T»ü`þl¯áðèŠ~‚¾¥R¾ E_€|™Q?17âàߎš¯À‚¾øÐWü+ÿTøæA_ƒ,‡ôPFݾð?*/à`U⊸Ÿ…¼ée¢$·–S>9+ðâíÛóò¢üâ‹áùuô~¥—ˆ‡MWàÅê‹ÿýò¢ü?ÑYkè¯ ù½ù²¿€~ÉÁø|¾š¯ßh¯ã¡ž WÀÒê‹ý‡öA_‘J/ò¨–Cäê_Kª/ùÎaA_‘¬S£'òp€Øê‹þ~~Æ@9²bo‡ímÛäýäê‹þz”_Íø|ª¥ß‰~$døô~A_Žß€â”_ÃþÝï•~(¿Ïpó¤éðøÕK¿¼é_ü¨›ð)Eýq?‹ ¯‡Ãæðó½”MÁü=N¨¿âàӂ¾J‹ðü©Áÿ ôQõø¢ÿþ5_c*âgþóƒüÞÀí.ýu2ÿvWÝ訣àX‹)µ¥imE6·¼œÇýå(é¿úɯ"íiB×RÏT&¯Q]l{wй8?À“ëþ ê_€WúTj¾Æ–r“´yèvwmTë[Ÿ½û‹úu^~¾Žã-¨‚Êh¶¾ëä •¿ g½lÆ~íª½k ï{5“ aҌ·$÷Éy¿ OóóªÅðÿý}É~§ŸÖe(°ng!wéZ9֛+}³s8»§Bë†ë49˖âS +º$…á(t‚Á¢:µÍäo=& +ÙënöZùfæq}^ª•ÍÜWU8ÒÒE© |¾CXoó'O­ñ”j¾}Ág±Íý¶5˜:3]…š~©)ë5+­”Ì6Vö‘kéD6Nü“ÿ4W<ìõ«Èâh—Û>×ÔU'麷±ëù<ë¦öQm«þ@lJÖúœ~Q>ŽþiQôhÿiš fntŸrì¼Î•í¥tFÓeŽÞWÜb«µ#â8;Ň—ÑŸO¯(‘“ú’¯ÀK[óÝÏùÐW÷*ز÷:M«ÛÓ¶Ãe£›Ù¬l]†"Èt-¾„)]ï4qòþÓÎMTV´U£Ë©ÉvWÓµ¬6kµR#X>Œ¨¿žÑ_ªÅê:/6ôv‰j÷Uk•¿V»èüíç(A_ub•ÅÐí¾æ›«Yë5&ë·F»ä \'—S“³Tµ¾ŽÒïßebŸµapÖ€”_ç¹8û⯙:—õ¹: î¾Íï)ÚÒ'g]¡‹h:’Ë2^ëôïyDf°y+,̶!È2JÿÈ'Ú¨´Š)F Ìò|>Õ(¿§kõÓó ¯?ùÜQ}êùGg÷´µ€µzͪí  Ô­KÇö¶[W½©C6ËG9ÝD_×mÝÚo™·oÉ'ÔÌ̬R5„]¬t|=*Qˆê‹ÿóx¢þá[÷°§:¤„jò®×Ú,'ª¿§}¶ÇMñþ@µõhÇbíaÿ9ùmŸ§mò”£ $qEð+èýö!ÿæv_?Ûc¨~E1ï¸6×w*V$Iöà®lr̞E¬do=2èTµÏ*”_ûìÚê5_S·iwµõg9ß䯣ô÷ƒÿ͜𠌬þú–™0vß\º©dtOۂ¿…¢ùWîö]tø~»ÊâiÑ_ü™:d?Onâ~RØt‚p€ïÜK5•þfÊÿ¹VÄåu¤ûúPײú½¢œL·åôOÏû~¾ïy£ûú¦Û­T×ð.k•UîKà¯Ä)SŽÒ0Ï +SlùSàJ‹õÕÏùœ&×)q¥~ê¦ÉN Õý¸+ùK…+É¥·µÜ,!eƒäÁ_›æéè±M•ü Q~²×ÝzóA_Z#¤ì”l¯ý)ð௣ZÀÇÃì¾}tàÿG'FݸŠç5ƒàJ‹õonxÿ¥¢¿µõeÜw#ãîßßR +ü¶(.ƒ‰Û>úœÁåM»~ÔäãàR‹ü˖Cÿ‡²¿Þl|Â9Ål¶ÓéÑ?ú[+ü£j+|'åUyüå?ÇhNàÿÀC'ÿ¥#'àïôo"§±}—’>ëéð¯Ï'x?½Y=Z ¯Çݸu¼Ÿ¾Kñ/Òѐ'w‡àSlÿ͑“ý»uÝï¸WûŽ©ÜÊa’Ïôþœÿ'…åoÕ¤A_„¬ñ'èü‚ýúšÁ÷§ +ø¢ÿÍÑ_î±0êf—ï+è3©«hÞ.1·#¥€çV,—ðxíüŠ»zQí<>N9Áè3üœàéR‹þÿ€Ïù¼ç}öüËãóü-³œÚÆà€õ„ƒ'´»öƒýK‘£´/jŽs¾]üzÉþŒŸñÚµdðøÓƒýtŸeXøúA_4•ÿßuk~h¯ÃâA_†zœ¹0)N`þZ¾SEþ`ÿ﹃þÈ‚¾kÏÄ)8?¸ž­ÿœ‹ /ÀëÌMôê—}dýRïãµ*ˆ+áøôÛ?ÚÆÀID=¢p£XPoàõ ¯Éïê—|¨ðü¹Áÿ-û(‰dDA_”_Íàü>$àÿNÂËõ ¯ÆÂ礓¢*"T_€ÝKù|>,Äß]Ì×ÜõÚLMðãÐÉü¾žLá_áæJ‹ùTî [Rê l¬4ý4Wáó,,¿RêœB©wÀ?Gõz^n'úµEs¿‡Æ°²þQ=`ä´d #'ÀìÈÉý? +ü¹Ñ“ø|; /ØK·ò·‡À²týuŽ÷åËáñú ÿ‡{F°|—oàü6NŸ£ˆÿ,|‰NŠÿÈ+áù0WË'OÀø;Ø_‡}’Xºx¯H¬|ÏæÈ+áùÙo°œêp°S Ïðãu3>ÿ!µ7ôH‡ôûë6Wðø<+üî€| `ú}Co©F_ÊoçÑ)÷èþoáñ¸¢ù8?ÀøúŸŽXûœ»Nìn7˜èGsX>°ä÷³ƒýýÓ A_±NßóœvþIcâÇâÀsð'øäk㡞ç*³†2²å|¨¿À?«Ð²ù¢¿Õù[ÃàèôR?»«ùãE~Ôê@üî€|>äýDùùœ~A_ĞwùÚ¶ûªÅóe=\Oé÷½0¯£“WÃñx ù֎øœ\¿W¦‡{EàÕ0ïRѐ)Ð~û‘²¿‡Å˜›çNƒàêw‹?¥R¤.×^Iûþˆ+ú‡N€BT_à +Y§Rìií9'Oˆ+ú5uíº¶B¼Còz26íðãsõ(dòV.NƟ¤`;8x¸g;ÞéÔ°× ?¡G×õToò›»'OÖÿÍ&Šü8Ý /©ýz©¬%Emàçó.ˆ¹Oÿféɐ ùü+ýïÕËè¡{høIÈ+ä»FAŸ¢ +ü„3̜Cږ1RIÄ<»"åïyev=Ó©JaäØ]WÓj;XYXØÉ>¿$kÀíQ_üõ­oñ¯™õXÈ%XmS§C2êl°Aø0WèH{~–zÁ ÂFO€j/úšx,Ä"z,-¶Í“§)2tÒGéùÊV¾?$§ñ$døÏA_•Š{’€oƒuEÏdpꯛ'NT€`}Þ1~Ñ÷§ÒIAo¯¹ª‰~$døqf&þ¯N‹kGâ_£áÞæºÑèN²ãž±p.˜å.‚Ê’Wj˜tåû§6néʛµt¦wδÎùٛ¾u§#ÁâŽÔö=³­*sÍÂ;üÛ2~Ê·ÇMïókq*nó§/ý¾'¥wntÕ¹s´UMþg»»x™¯ßºÒüo}÷•7óŸO|οãßä•3ùOx­wØ=ûµ7¿u÷?M{FïçiܳںÓöNÜÆ…ÒÉ%›Ÿµ­åJp|rÆ:ö…÷4àõ`¯ì5ºœR,B‰€a}uì_ äköNÛ ÂèÀø¥m1ªîkHåwÕw$xÕ\QàUpSóΑÊî+p•¿æ1]Ñ~ꛇÔRékÆTÐN]SR¥ÒË*]T»áÝ.Œ·Ð`b¸7P>>¹ÏãȺ!;¦t°¼ç»©t³º—TÍ/º«o;u,øøæ»ö§­ö×K/Èþ¦§íO!±ŽxÞ Õ_‹pÇ·\ÿÂëóSw†#Å{»ª­Ý/ Žà|ž·=XdÛê2Ï}tÄkӆ)~Jâ8WQBþŸ£ùçé~¯[«ÒøvßñJ'¬1…Ï-#¡3±È¿À•æwÀ‚;5ã]ø^#Ñ™+—ø-ÏàѰ¯ +˜Äð=÷ ï¾Ý …ÍÇÂç$4 ?&z#ñ°Ëæ2å?ȦI7ï}¡OœöV8ï޽邧;ÓUûë›r—=ô€~÷H§ù|sV£K¡Øì%ôr±~½“K±™/ù!÷ó5ïÊë~×~FÄ ÎK)©½´ +NsßßÝ"»­¿7ïnO$×I§³žÑ9”ž×;÷ÙIâÿçm*ž¥Nd—ÝüYö¹åÂÃ<,Ñð°ÏæÛÊÐöï•Â7à ú!ÀêA_Ç5Ú%c¡f{aî“C ás¥ôÿaø¤\ ª¶öÂ㜰ú×Á-dõº$Æ·S­Õé‘q%²{,Gý?½iÑûË]q¿÷%ùiÛ~Å¿>ÒK s™Bñ ûDÜ×i‰‚Íì5š„]<»¦íe£ô ú)+ýØ[½¾÷ê_„âüŽßÿc<£ážòØsÿwµsE¤l&Ç]ª˜×êµ²úm¬\¤WüôXH‚¿õïñu[èŸÞß©~R)ÿ¸–‹ˆvì˚'ønÙX†zÖjt›„¾Ç_«˜×êõ]Ïo¨ÒKN7k»ü=Ĭ×çSÆÃüÎy·˜bãK¡Ýá3˜ß¶Æ7¹ Œn[S§Ñ#ÔÖãÊzÊì1N¥oáF+Û.ÀæÒhSæºxÚïGÍu?<îD©èˆÿ=ªì•ËÅ2VwãwÎþy¿Öw©—:~Û{œÉåRy£9øWg×çÒö³_;#Ƽ]ôv…wÅÓþŽÃãÌàSäÍÿü5š*|-¥Ð껝¾£¸“‰ȶ›v°\•m͖—¥Y (¨_sÛÌkµH¼¶iKžÆ“¼Ò5Â_bóÇ ¼ñ§tŽ»T¥ï °=~­ô垂¦5ãO]êzíVÎa~1¯Õ®º_cX·S EòŽJcÌ Ì†_ãSÒ·xÿ4Æ·Ryœ¦Œ›_æ[ã˜S Oü®óMá›­ÔÌ0ö-ç»Ì/Ææ³¥;œ;¦½*;ÓÁ”¼•^s2's¿g0»å$ïŸâ]ñ*÷y¯—˜d4Þw®Ë52Ù?4×Êgç䛸5OJ]öÊwÐ0-ÆÔöµ>¬]{†ÿø3f§üH¿-§ã n§I%úé‘.9¼SxKÄÞì¸Ëí›%ƒ·¸7^Ü2 Ž-÷õ¦k²¿-ÿ.MíŠ íŽ9~u¾,ýh·Í•ÅÝÜSð#öîðËú˜bŸ‘VE±R0Þ² æž1™Ç5fq÷׎w aíÌ0Å¿«4Ý{rOóÍ{vFþ· Ëã/.ÙL#‚x«‚yâž»œÌ&ù¬•qS Oò8/ý¾w¦9·µ®Ì)¼€œö…1'ÊüŒÅ÷YÞ·Ö\2 | ïÃg{®S •ÅÞ'2yɆIMþE2Ãyñ¢˜3‚ü%†zÍešü1Í?>vSî\‚ܧ[„£ïÕHûöð§ß¬>(_ðj2n<·/28+yr®øþ v.÷¾þÄñ3ߓéáŸðÌ.k´ð7 o×ùÛÅúP¼+ã7ÿÝ2ŸÞ·ñpÌZÛoŸ†|\ÂÆ||3Ýçzß´ñ®Bkàä6'ÝeŸ»Ã8P{Àï`N~&‚ãÝᘯÂЉpý£ÎÎÿƒÓî²h¢@ §>÷ªr>ÿO»÷àqphhu-À¸…¸=p©pm¥.À¡¸–I&öìÝ»ÛÛ»»’,’I$’>UUUUbÅbªªªªªú*ªªªª±UUò¯•òù÷¼ûϟ{ޟ«ý'þÏtöë9*w‡;Nàà¡Cƒ©ÁCƒƒ¾®b_‚Џ×àPàâÛØWÜ«J~SÀûµ’k-´ ÿ§‰±ú_DzÃÙô?ƒ£cû;•ß·üÍ—ÎýïYϟ·è9óüéû¯ÖwûœÉ¯â]ʖþӏ½çþ¿Îâ|Ë›ü?ºçÏý_ßþOœçÏânÿ|äiØÿÿ‰èyÜN'ÿ¸Ÿ7{Çâ'ŸúŸ3‰¼øÿŠqº.ãÑË®ÆÀ¶ÎȺ_M)Ú÷Vò¢9ß>þÞ¶¦r;âûŒ]³¨a•ˆûÁ†äWÑJãá\îý ·XÒJv½ÇÞm•Dݵu 4'~=—‡€H*/¡êðI¼kûZy¸§Þ W×¼³©ÍÇÀž´Ÿ“ëÂó8ÛðTG;Ò½´ª¹_I¿ö·q]‡t¾*”’™0ÇÂBoðÅOå° ü¬Lkûd@q– { +Nâß²©1%‚KlìŒÛZ´’OäQE·iTۋ}kE-Ûù~½züŽwϼ³¨ðø|.vÜm5ÙvéÓ}¦”½…X·‰ƒôôØeZÖϾĦã!6Û¶LIoO³îgåb=zõ 6íš͋ׯ1/,ª§c©{°÷mvY2c¡+ ïþ;+ñpž£ ¼]·VÕÔ ÕÏH'ìñÛº>ä.üžkfŒç¤ºÛñ]Tìz¬¯¤È¢–í¬PJöx,¯á]¯ïGtTSLÄèfx1a'Ùúoì¯ÂÀq­k'’ò±/+($©&!¬ê§6iµfÊn7{î,O™ÅIl’ÿ;'žj*vC¦˜ƒÝÖ㙨³îPýÌKË&ív{±<Õj±¡ y3‘Ï<£î.ಿÕö3e´×ek+ýØ®r~Ø×Ö«jøáà¹4“Ï^<¶® üvWéf!Üm6³©ï-¢îÅsYjheb^EBrŸÁSMÛ4_O2ú Lom¾ÔÌ_=VW÷õžüWßOä¢Yé.³f›’ëŸÙ_•íûÚúš9ž Ûw +xóò}tØ—ýÚæú8×֚ºy鄭JvýÝMۛCÔPû vuðnlý ˜i°Ê¿¶­ß°Á ÌâÚUÎ9ÛqqaF«+ë 8×KéYjhIùvWÿp®×³dÆ*•øl¯ÃÁrpîûúž¯/ÚF-…$»vÍ&" _ÁK 8úºyú¾ñOIu˜eâégd&÷¬¯ªD´g­cK0þÊúH¦¬Õ"_µ“îÝ:JUHÓ[O>Ö²y÷› ÆÅ½³ÇÁ·àÙ§üÅl‰¿RÁÿ7Ñž´Ëƾ߰ÁÔõØèeäa\ÕÏȪÊüT+?'í{í¹EºæŒÙ+ûl¯Åô=V,2îWÒ¿À%{~óׯh÷´I¯à¬›Çý‡y߆ä}û+ñßE&½7Åe +ç?+öÝÖ¢f+žãi­ ·i(®öÒªvC¨þ›R“üðÐGÛx¸æ<> <Ü_—xNä_ÛVçïoÏì0TMÅ·ÚiO5‚¬¯Æô¹m65«h$üßn ˾ZšS±ß†ÊüwOÖÚk³Qå•J•¶4ÓðððULäjJKË:ЉÈÔ0îûéû*Ògß²¿7ÐIM5þÊþÆ®Ÿ¯šC«ì1ÐËI‹ ÌâÅÂzôTô†Í6.ûôý³íþ,¯ÓMD¿à5×Öµl>;+éã±a–Ÿ´?7ÑLIVWä:ÞË·n§dz›ðÌoGèªÂº¬¯§çW? «HRÌÄ+e¯V¯R¾ŽYo)çîtk+é¾Û« +Yê²¾ûnߊƒå0ËÅÀ·®ß²¿±­Ã²¿û;¶™ê&÷·†>æÛvÖõôJÞU€²¿ðÙ_»²¨tëq\MQõ•ýÝàÿ+ƒx?¤˜†Ýâk_‹x?„õ4·¾çá¾/¸7èORƖ^K±íðAQý_aë×µ”Ií6ٞ’êþ +ð°k¾ý; ¼UnýϬ¯äpïñpn¶¡•í+bÃ/ê}Ŕs8³Qsq½ ú@ú²¿ƒs`͓¬[Õ·n5¬¯®€ãÝwé™1ÐZËÓî)s³¯©ø¸Wü4!$3QÝ>[ì†Wµ¹¶ã½Ñà‚¡yœT—8—¶xõ̵4Ufû7ƒþgÞ¾‡K?%ZÍÇÖWìif88WýµuÇnã:ªè5ݕ>†f3îN”&”QmZY_ÿë+î¶nÙ¤ü§]lUk+ûÚþ~Ómœ_/¿¥˜‡zñåÅ}ãã·ô2½”‘764‹@òog7[+ }kXݶ֎fN%ÚÖ0þõ•øž¥‘…u‘„«$[ŽßñUI4‡MqolÕ×QJkêéwb¹ÞKKÝ6»:êÖ€þY_L?' ö«Uõ•õÐ|›¯bÞÙÕÏHxùƒþ»þ`ÿ¥žSî_Þ®&Ò­»~¦r5÷•C-ÚW½}e~'Ÿéfc_ºÜst¾ššj)1,Œ+—ŽÝ&«<WÓvëqã·vu=ï‡î¤ßíÙ_[˜?ÏHõl꧸oqaE¿²¿®€ãZUÏ%åbÞÖÐÉ«˜?³dÅ¢ÜÁÿwf“÷Ú³e‘‚”;#ÔªÑÎÇI£,»à=E~‹+õ”O³’¾²¿½ÐgÿO;# ë×®\7[ Ïçäû qÌÌ;µîÝnm5fû «ôsqÖ²)´Ûe÷”×g^f/Ÿ¿Ðgó1\æLt Ãþ•ŸLIÿJÿ®ãÖÑJ&›ƒr¿ÍÒ¿ïúU±jÍUÒ¶Ìüœ5p=þ•ÿ‹„õ-«h2ñ¯²0®jg#RPü,•Ïôð.+²pîã<ž”Ôd#î&<®&x“i%ü¯oÞá뙆vÒq֟Éù¤V‘ŠRÚSüb·’ìûsq°ˆnÀ?§ëv×| ÷£’˜}õ¹bRïGô¥â xi3ìJGÜu}ZÝê[ãJv½Îöílûꤞ÷ ¤Wøe"RL/½òv!Òy©éÉ ©.Ƕª¯[c–Hö^ Mޕ¥òóÄý’Z\«˜†+9ª™I6Ëî•Þá­øŽ¤˜JE J\É=:¤>•d®©7T›˜ˆ‚LI(Åt#êâ\dõç)Û÷Rj&11žŠ¼˜3£ôv$ø“HÉî="´ ¤ñÒa'¤‡Â®O|´àì¥=îúóøäÿa~(g¯ô¦ã!؋û6iIûÔÕÐî.øHÄ£_¤’…òä4ŽêzÛþˆx*ËÓª°—¯^ÒÌCü9|µúþ%­lþ› ¯.^¯7%™LþõsÒܔ1ۆí¯m*•Ë•Ó).ïfº5Z%¬Ÿ‘ÒÏÈvëq m6 ¾³Æ”ckY=¯«¤ñÛ¤¢ä§ôªõfÂJ4Ôù*î(ϏTyöe&ÿ9ÁWk}1ÐËIœËSA]Š„µ,?ìîH®b¢·òg@dłúnì4#ú-6ò+¨¥RA¥rèæãÙT÷’j+mц‚äÞYÔ5fÉ M†Lm*ç_Tr¹>µí¥OÃǨêfÒU¨ŠŽôc6Z‰&Úlj×QJ+=— o§¦”¡”ÆÒ(HöîÊ£?MÜ|t«+*®ò¬i]wé›4fñãÆ:‰oõÝöïbœáÝebÞá\Ø«”N]ÙS­ §¬ÌKË$õ8“á)Ύ^Å7wº4¿G7Àž:L$ž©9•Τœý”ðóºÞÂÕ[éFŒ2ñ]nn'±¼kå®R$ª_OÝh͒QŽÆ¶$Ä2¬±Gõ}{ûjÔöL’ÿK;!÷GÄÈø—EŒtftfÑt]¦íœåXÇ1Û38ÝÝÝown¯[¯kzõà-¶Þ´-¥ +BÐ +@( +Zðwû÷ïø~ëû»í~íöão³d±é–tˤdÒm¹ðé²;±ð/ò>†FGÌùwðù#"Íè|L‹át_àbøYöŸ÷v²Y-Ӈ©fÚòïåz<ÔÓìD´Ý=-Gîí•÷îå+ OÇßy‘‹ƒ•†¬À©åîµµµ»X?ŠÇ'êÖ¶›+ + âªÊû<¡„‡6u”¹yŒsO=(HÚÊüÔt +Hš±Ü¢Vísg×oe¹ {ՊJÂK>õÃ~¶’ª‡þ‹â/üT¯•U°«ÝÛWÔ+j„ói¬mëêUÊrH=uiY‰u•„ÆúbÃ÷_«4š\é䞌ܼŠyé'¿×¤™c±*Æõ_ÆÄêٚ5y O#ý6ÕT ‡xßäb`VÓεáѪÊúKʽř4ÍōUÝ¥b²*î~kJiݛŒ°ï䄔“1«t’°®ÉµB±Ÿ‚Núh&÷,¯ÌÇ@kjê1j6$MQÿÃ_MU¤†«‰ÍòëÎHs¢|Œüܶ0%TSóª|Ì]JS~Ì »D³ó‰²m³ª²È²J2h60/*OZM3~‚èü쯥QŒæ~ƒÏ—© ”ªJô®íŽÚâ+/¿«˜UQKªšTªÙ*¼JÕ_x[½ܲ¾”Î_\X³À@¨Ÿ”Z—ï™e~–r?ùŒã”óÁrÅÁ»T'ZÂ\| +}Þ¬Ü{L¬epµ$¡Ò®6x1¯ó’0mzXYUí/1Ë JŽ/^ÊúUs™•WGÓf¸‰¹$ªÙYñZ%ëKG=¯MŸ6ÆÆ¼?7~ÚÊú¿-÷^7ÿ66²¿aUAyo^ǕVXme¹ àAØcY+ÊÚéG2ò1*he¼Ë-Õ4 +²¾½ˆ¶r%|—?•A-ÐTçó>&V6Ìbü¹¸/6Êúù"Æ®‹ÌÍlõtv]zG¿='ÏO6«%Žý½…J qÜ£;3&ĉ¢¼ÎgÉlR-ƒvÖÒ¬¯±aù]ÀÚFøwôÜ|LœXÎÖ†Ÿ•ˆéÆ?+³¢¦£ =K+õÔó©#,u"¯ÜMÊPüêÿC;2›µšÝ“wtÝ®s¥—†Æ ¯MÐmìjp.ìØËù˜Ґé4Ê÷À§dÛgTÞa7€ëNÈâ_Ý7ÈÒ ïe[WQœ0”®½¹÷Éÿbߝtt3’˜ÕhÇU¯±*»·×_ÿ‹á'ƒâøs²pÉJåµsוðvôWrÊþN6噟+èÙ_†åøéZ•Í•[ïk­­ëN¤xVŠ­§º³ì$KÕÔÓWE¸•¶­‚¾;XP!ËnŽV|‰¥œ_€·ÛW%`z ԫ⢂WSOI+(À¼´J†±WËô•õu²LöÞ[9Ì_í\—hGmÚVžÏ u#dìœ2UmÏæo›Ù_’çò¶65â<îû“Ñ„l¯¿p÷w÷,~¯[—¯ÊÞ·²¿Ü„ì¯­ø⺝Ýъj&zUT˜UY_„ä6˜ì̬x‡Ÿ!S•œÓ%_5Y_IOM9ÛȰî'}+ÜM£níkuõõÉÅÁ‡íçæÆvf¤šÍËÇge¨è.7ÅìöZÚsU•û%¿}93#cùÜuuÃ-ÉE_ÜÙVÓαk–—ãý+ü, »FÚÒªŠ^ ËÝ-²¼'!® Ŭ¦œO$ÌfšH~¿2ánqõgUne͒¸Ó®&ɶδ}8½- äӉ»îí»\þèþWҎºšdøJ¨eâ^’“Â¿ÖÕ¾·­ëu[ØÔèg4W%y*8›çUÑôí«ê1°¯µ…Wv•»4ÉÆ×ÖÖJˆÒ½øÇþ»Ý)µ•ö;à<¬l$«ù+iYK§¥¡3«+ø7vª½æÏF0ŕô¬} Ý­wYžºÍUBt€½kÛ§cWGuiX¿â£H ]M$òLkL ¦y)ì÷ùs²P½ŠY´¬÷ûcc_Ó²¾×€ÎÿÄð›øÇ¥ý G«7Ó+ +öâ5²¾‘ú%ñÍ!æ>ôázp‘>Ó[+é°ýo«§ô¼¾»}Ä$ù€Å~qbWXצÌHš‰ŸÃ,t± ð¯íì*X˜ä¯' ]<}åµu͕Zþ’†î“j¯¨«É3šdÏÊCµ‘¿ÆÔÓÑÔÓÒ½·¯Jû˜Êÿ›vWè¦"sZd³èEëô¦šÐŽÛÆÖWÙÚ4'g³±Îãõfãô´3¬ûV fV>¹á©ÿkê'ضÆÌµ²¾Ç [¹e}ŽºE$ѦN*iÅk +ªüԍïüMÊxf»Ç«Uá^Û3ÏêIBëjê-lc‘ºIj¡—è§ÇSC+‡~žÄÙ+gVrÉíō]íµz§SKEž¼Øül¯ü_;¿BÐÎÌ¥_¾ufÊþ^F"V&•"(”ˆæ%3‘kÙ2J¤žœûÕ~E‹~uÿ¹UwiK~~kIé8hG}ã< ý½ÞÊû¯n,ŽŒ”'ÏÍËéBòUe}+Ùë0>õÑ»mpx«rDù[ÚêyÔÐ,ÙJºSè«+%\Ëõ¿ÎTSKô´ßg£T…vcX¦»µ­WjÀϤj-îÓN}êx//tWþëçY_oŽ˜¦£ -ìjrqpR¬ä'å!Ò]•e +÷g6]Úecá¥tÓ1Ð }"c» ë)^¼®õ#®Ï0~êκžyIÊIqen7²¾’ÏQ?(¿Oàµæ¤Ä3Ÿ\êèæe~%ñÏG?2^)퉎êÍÆ¦Í0|Ÿá¥{”ÝIX±ÓÑÏW*}VWÞx.Y—õ4RÌð—C¸úºNšH$Äcì¶ïoÙ¢Y²¾Á!#9BvMofÈk‘~Ue~òÚ¹Ž[LF¦žŒcÿ +s¥•…þêÄ Hf¾ ¨¶¯§c®Ìµ²¾Ça~›~8²¾ÅÇ« +šž$„ŠÖ)·šo ԑ„I1ÔÓÒg&´’†wIOM›æzTÐËeäâ*$vv6ŒÝf"ßsZdD<ðM’¶uW¡m+…üšê¢‚Q[ßêihÊí~$âúÖWñðïz\G}âoΖö:úÚÍzãªúšªŽ­+‘ËÈÄ~ânUø5‹Ñ[=«}UõpGãm~*¸JÚº³‘Ö•´Ïnöފoe~–rA]¯ +S¥£žÇX77•â$T$ÐÎh®FŒSó¢Ýñ%$Ê«šO ‘+sÑÐÍc‘ëÈÝiéh*žú‰ö?åGA-èò„É Ÿ5pSTaß\UQKµè†~D~_­MúWã x¹8ØJæ¡$’ÝYõåzÖ:LU³“~6ÜŒ ¤«í+¬°ª¡mÓwa"E¥p%Ò:¤¤«¥ýëõfq°¯`‘4u<öݕ÷“åÙ_ÚɾŒ‰¬V÷~uæí+‘ÇÄ¿c¸?À»µHºÇpaseWgYJ› ¥IàåüXXÿÄÜß\X¯Û÷91aù!ÊNR¼Ã۟}}sek[Öq;õÕÌYOYM6¿H#ÞíÙ_Š}t[¦N˜‰U¤ôÛ&öÞ½¯I´Å•ô…Jô Tñ‰¶Ú@8nV÷¢÷ÁÎi“A-Äì¦ÒëgYšI˜Æ™8ªåê$Mº¶ì¯Ïíz‚h~Ïg²ÚVÕe~º¢}Pbf5ýnèkӁcùÜtܦ%ñÍ]’]Ý­b·wOû—‘‹SC-# +쐑޹ñ$Ç'7ËU¬¬üܵ] +è½y)´œìœ3‰²VθøwÐe®‰Ès¸ùù™J²¦¬Å ¬×úþ+ÿAëÉi“?)͕ô¬Å+y¬¦œâ%!9¹yõ3ûY/ªþêÉo[÷vÝÍGÀ±Á—Š{Íi‘GӋM!'ÌJÊÕÐÌmè¦öWñp.’´ñ+c›|Ü´¬é*“‡åâàÝ«ò1ú¡&¾¾µµu:xnÂù€a!üçJ +÷JÊѪ+£‡O%҄äÇAqSC¦‹uO<•éÛØTíTká¤H~•e×ÔOæ´ÉM•AÕQÌ%@R\÷vÜt¬Òþçj?G/—ïÚ>…•ô‡êåcOÊÃÆ?ðžûVNÕe~W£ÍHº„#¶òžzO3+3·Ä îÂM=- +.œTcÿªŠ_G?5V*äaÒ· +Š DÒ z°zöP[Ù_q =`úÞގהٳʹŸ”ÐÎ̝’…M՚ŽÓÒÑU•õìFÇègæ&ÉÉ1ԓQºZɱ Ïʒj3/#]uJüǙ¬Kû¨/†Å‡é8Žf¦–ŠNšl…;% ža|d‡òg~zOŸœ¿×M­æc_ÓdºUøcŒðÙâŸV·Œ’P›>ð¼Øÿ+§ûùå$˜¤BêHÁµìl•ecaoJäMª&"ßT¬jè“릐ICHŠ“šŸjº¢y5¢m8·iù×SOK¯ÕšIM’òq°vì¯á^Û¦î1Ð\d•†™XÞ¦¶/e#²šnFÚ—½M‹n¬û(Wd/-ëÖô3Eø¼²pɨ¦"¢ßøT2ñ:úÚ²Ñ/OüO þç +öJÝ>¿bšs?5¤§Aá'6æÊ®úæÅýzÒD×SÏ$Wo6Llê’ágؤœés¨æWœz.CŸ|‘ù4 ~¨DëY_âøw¶õõ”ÓžnCYáîÅdâçç4J #UÚæp\’¦TúéI6âRä•e«’V”ÕàÞZ¥wiP¢xýM=~!ù:+ãÙ_JÜÄÔÐË%X©Uξ¾¶fV:S9£Ÿš•F1e}*Ý¿º´M •F]ÚÖ¥gIàªMm]E¸›?Š„:)órò§ÔÐýiÙÇNý!RT•æwü+ë‹Y¹J쒨¨S/# 4:Uçåm£óÃXü®´;çÙ_{tïÓL¤Ä-Ä6í÷+íºíø>OŒ•QÌÅüØH’]¥£žÓ!i=JÙ —áY¥ié•Â’ÑÏÌWàøæÖWû“o®ß´­¦[0ßöübýÉö +@Ä֚z:û^ƒ>¿]ûð“í$9IŽOú‘¥÷…¸[EVRâ_ܱ¶RFnssó«’¿{.½"Ñ#''7+ ^…·;髓ë¦Çé«´3š$ †ó¿$kF@pð¯m•ĺø0ó#4ýuDþݕúÞ´î~fRC}merÚÛÙ_¨ •M?gØê¦êS:ºšY­2Iú_˜9ðWô«¯7^Z±ôá{ËnrüÁix§´ÔÞÁ>¾¶¶­…M +Ll둉~ÎFVO®«5MæÉSy„—dÞ>Ö»¬·?kšl’¤š|ü"Äëe})Jšìj¨šöóISêQõwkYm]N֏Ù>BÞ¨}qcYMÔg*m¥)³’¶ö X"UÅý)®C³~áîÏJCªŸž§JæÊ®ÞÂ¥À¬Ld?ènVöÚ¾¡ 47/z‘ +Šb)5½4ïIŽŠíoeð…v¶¯§M¯Ä4Êä‹'ÌÏàñÔIXú¡T7/Ǭ¦œM֝‘q€-$!<øýó쯶ë{Õߖ%WÜ¿ˆÚÊúIÝ£oUq ȋ½jH=]=bÒVEQC-yo_?+óÀoe¹ Ù_‚ò÷YXØL÷Œüïëº;›.¼´KÓ_[ÁJùj(%ôJI•{yzW(ž1]ϖצ*ïî,jÒz# ¸ÔÝ:ezI¨Û»ZÛ*º6=JùÄï»ï¿Ûë‹ +ú‰öÝvü[óª}¥úoËÆ;¤ÖõÕ×¶õô“1ûoížàÿ¯F›Ú×u­ki˜ËÌzpEŸb‘6{£™ŒfÞKï Á¦ê&è•ô2ëgQ„ÜQQ ˆÁ³¹Or¾íuôS-y“[V®ø á¡y[Ú n…4슬‡Kt^mëê[zq­{t‘4‰ ,íEøæ›åÝÚV&ÂJ„‰#é²·k¥1“‡å¤ç/éÈí¦ËÎÙÕå<ÚPÔφ%ñÎâÆª?õ Í}•õýeâÚ®Ža­•ðý“èð¯õõ¦ö½LÁR”ÖÔÓ_ðyo×o×ôD«!ç÷ý ù¯¡|y¼+ÿ• Ù_”è<'’ké Ï«ì¤;ràbÊù¸Ðe~N#™§¥¡5Y_þ›+é1x˜7ý¬­ÅÏxßaß\+ +¶²¿!¶r{mêvÿÉaEÄ$óýœ•½[Ü3q/ÚàâÊøµ•õ¿+øÖul*è¬jè®lúúÚºŠôƒ‚ÊÿõY_éžéèçèfåÛØT\XÕjiéiéhMÈA<ð\™÷ô›‹{ +]M4›…z›—óØQq ûÎý­wYvºÚý ÜÃëíðè;oøéß­ˆ"à¸ÈC¼o˜Ã£ípúú °ó¯ÓÈm/¯ú‘¾_ô¿`|ì:ÂÎ_þ¼šJ¾_xýÜO?ý‘€ê-ßçx[Ÿg¹Ü~'üŸ©â{^Nûô¹œùŒ…æ÷þûÞ|]ë}ÇØúÎóÕÑëÿ+í·^´'ô?”ð·?‹ë½ï«ûïwö{ùÿiõÏ[ù~­‹,_ƒî¾×‰ãû³`þ3‡ÆýÉyö>Ò Ø~}ÝÝÜûŸw%É.IrîîåÉ%É$»’I$’I$ŠH¤Q(’IH’I$’ID’I$”JH¥Ë¹·®¾ ÷÷ïßÏôŠG‘äŸsäßsénNÐë’Hݮ֣–I\²Ç£Áím›M\FÞ p@6Úë¶]´» ¥‚ïð[®¾ 0i<8 6Æ a¼;Å€Þ àØ '‚€öÔo´ðzÈÜêå¶ú×*¼¯U{^žê¨0¡­÷Ugá©CZ\:ó`hB`^Ø`^„ pNên煕ÿvÊýVï_#̅§„Êøg=EiJ™HUÀUb€®TV%«^`ç绬Á¾²ÀEa¡2$ÖúÉ=Ýl¨r~¡®ãcgkp8¨¯ øåÚÈò@U$(@h 9*ˆ°QÙ¦»­ z¡ò~„W!7ÖJÖŠÄ +ù°% Ò0‡PT0'y’É4y_!c"*ŽÑQ‹å©E%©Õ¢S£okðJk=QQÕe§ù˜eS¤ÒÙëy“5N EE—LÈ—SãTe‘™ ŠÞ4šJ+¡Pª×öµLzº\^Óð¨tŠg2IÜNô3TAkˆ”σ}bàڒþ )-N¦¹ªGmQ[¼Øc±ä,éfVßÛsµìY_ðÙ_§Ûj21°ó}8!û¦Wçö>ºöʑbK_{[ÿ´(í>ý~Kq˖.MqïS5Ücº[pD•øµš-Ë%,TrŠèN?´ ¹¿Û&k“ ›ûjm×ÓóË` !øÖWšÏVžê¬Y_ýWè%´ŽÛ-ÎôóGíÙ_ÜuÝùÿ5•Ÿ>Êğ7?º[ui-V_þ~Õ¡4¶ë“ÜùH¯ë~ …••ð ëJ]Àù}¯í@ž\b× +ÿ Êùµƒc+ûí¾¯¼±ïl7ÿ¬ÀyÆKqùk´„²ÅøÈ¯ùY˜#JQì쪷Cê÷È@@@Y_ývWäkÆWí)¦Å’?¥ŸMz{œv¸֊ÿ»{ÚK×ëûpF?øÞJ[{}üèæGWÿY•ùÁ„Ÿæ +Pñ¼öZöÚЄ°±-ô³ã’ÄÁ-ÂÔȨºý}T]*dcÍe~Λj9‘Ä<6WÛ-I,Á•ùùTE•þý•ù:Á„ŸîN=†öc½ò¿×m¾Û ßK>"äÈ er?5À¾´þú*,¯ˆ}WܳU#DÉÇÄažú8²¿î_•¬w_ݗcÂÑôºqW?°%¿Ý¢¸~Çᝥ8ù¿RWÿÆÊþ†°aËþhµ0Ù_ûÌåᜣèêà‚›ør6Wâ •þh¬3õÚñe¾eCX0åÿ;nÀÛípl¯ü-u¢´–ÊÉ«ƒ‹,B÷áಾ !ã²¾K+ñeÂeGX0ö¬¯ç{IÊóV—½Ú}æÓ$&Ò7¸\™辶Rࣴ\_:(ÊïíɦÕ|ͨþ6Ê6ÿTà?GCð© ²¾ !ý6Wâ‹+þ+ú:Á‡1•û îÑY6ݲa=ÊÂìŒUi>¦†~V•A{&Ó? èúÊüÚºÀR’ï7W[ý¶â—¨º;PhÁñÑ_ÿÈÊþûq¬àF‹ìV$hç*+.5q@—I®;2<“AÐ( +†\ÇCó Çcea•qY‚‹“¥ MQtBš’XA)MÓ—+“—³a¦ÔrR „¹<¾zØL0‘©»X–ÜŸ7öæZKòFTזé,Z¥¸^žëÖX¦OʃˆÀ²ð2•':‘Qs1Œ!\£)`q@ü;•Ñ׌ºÍ@Â<øF8k³hë3Dƒ a€K…©®MR‰½ 'ÍÃOŸ)îdþ*ŸÓ–‡= G’¶eƒz|ŽªúÌ×Ȋ‘Yå_%%·³èä@@@@Y_ùl¯îuý#WžÃÅþÑe}¸ÖW#î–kRÜ7\‘ÃÚ¬}„Áó…ïœ0€í¤a=m óˆo› ¨|—¹¾M€| ¤À„øá> ØE¦o“7øP^5sKòÊ¡>p~1œˆsÐcE?tÌÑ¥)˜å I&£ðà• 2ÞÐÄp—Ι¦õ±§ÏÝ2jƐ,¶­¸H¦¥h)AãGΙ–„Éè¸èØÏÊK20ÅëÀ>³4Ȉ3³äÍ +Œzå‰A“÷m<$ &Yàø²—å#špUQ¡ˆ/S8äÖ/ˆˎ‰Œ÷ 0Ü0Ð`<¨ò˜KÞ¹`ù˘K€ ÅÀœ ‡³Ê À¦s̼‚!¤ÒY@ 9à)á1å¡ý¡5º÷-“Õ3<ùßwLÍ]òÃiÉHÚ½Hù­jWÿ¼Êú{ªß»þgÝ|fWèæ:•kƒ0F%a<ÇŅ‘‡“‘‰Áɍ“‘Š~Ö*6¼õğ‡ÀÇÄ0dՎYøÆ ÙP 1F>(>qãD“,6>6lXxø°ÃäØÙĔÆÄ„1‚@‰Ѧ„'ÈN1°Í;Æ’Êq‹†lc¡1Jãqñ¢H“FYˆ—ÈƓ LX°q¢Á€é`cGšâ‚А)(˜À˜Ë øaÊ8˜ÊH¬Hd™CË b|‘?ňüÈIÜL¤ ô‡ó,Ò¬3S?M"T.$?„áåü‘‹ ã÷LܲN¬·À´SHæGWþ[+ózž‚Ú§uì?ûE•ý¿]Ñ¢´¦Ã„{)Ddæ43&âa¾Œ\×òsVâaðóVãâægg Ýù˜Ò‹ñ Ž6t9³•Ê·%$Ž$&oï’ÄfkbJž€«Öù4t!ä€~¦£xôá mS © ¢Wÿ=•ú)ާ#ÿ-•òúèÛɲªÛ±f@±3XÉ3xÒ_Ô-Œ${(Y̑ÁÐbA’?dÆ0N;F7¿bU†‡åª†„V1lÐ%$„¢#KË ‰þVLúîÔÄíç£fÞÈãûl®cy?ƒdr%øVµ½Nàs" +ÿžÊý,æŸ'#ÆeGX?-áUñöW„»wíÙ_Ç-Ö'2ÌX²äÄa#òseü›§è0à:~錭á69¾/ükքøãG»×ò/Rñ!¾[AâÊÿ貿=­è˜)¼ó,¯ç5\ù½ ÊøÝvùÍ ¾pÇ ®@Wñ6®,MÏ(‰É,÷ ¸ +½œûŠ±T†ù™bĈþ7öïXâ@In>ÆëÄ•ÿ›§oÐKi"Áyð_ãîqøþ–׺‡î™§\p1©¦—þÑ­û¶~͍R±˜½Vs*£‡¸e}w~ÌÄvWýÔùŽ +nÞá2'áo£(ˆE%ïƒUÉ·›>˜s ˆx¬¯´VŽ$1a<0?rÄx2¿Öëh6Y9¾UàùÛQ£}¶.° FX«sqþ;+øpž4\“ˆÄ +¯fÇɨÀ»ðY#ü°^¦éªÛ萞GÖ/~÷Eßÿ×á$lHo\0•èÌÈ@@@@víÿËe~gOÎ×Qm;.Ã岿9©ç®*§²#DápqͰFã­ÚÈÉìŒ×ñY •wl¹EϓxiÊ5®Wv¿1cf²ö#_½ÈB€æÚ«r>šD•ÿÕ۷󺮂úқ™²Áy+ü€¸«ÝaÀsØpr2r1M²†Â/´Ðöà8d£ñY_¹ðnþû‰À¼a˜à¡{„¼û¦ßž·?ћ€€€€²¿ú»Áü¾âùŒ¯Îj¹ú‰íSué»GcØdð1ñ1ãDåÜk +î,½ük¸5_лãü㦸8ÞÂ2óA»4“zqöà <?û¹×ô$òÙ_>Ìêêº~ Öü.?€M»‘ý·óÁ˶¤È/ÌÃ5ˆ…•ÎU¦”X/3AX>£_D>E•þ@²¿ÌáõÿXNïY_7¡ãºY½;<ìŒl>›wGl²%ED†õªôŸ Wîðnñ|pd²öÖÃx3Û\7ÊÒÜÜl¸è®x?ô8¢ÿÂÖ½³+çôG:Þ§o‰…ÁÇádãäFŠ9Òe^¾lÉZêÝùeë ÔÜø¿º7<Âb5Ñ£¬âáÂòÒ¢wr;œ@@Cú6Wì\µZ‘ªÛó<ÅÙüÝú,¯÷̯ø:ÂwÝ/²EÓÂπË. +;(ؐ‰ì­û7…~^±þñËEˆüàb²ñㅘŸðÙ\ÿB„ÿ %µ·N9ˆÄj/ÿ¿“ùZÂwݗÓs©½KòÈ ºú§ÛSÚßWgMµ~é—eØðx91¾FÂï)–(0Ÿ7Âf¡›m#h±& -¾dºùŠ´,X’’ûâ@‡Èa®Dł0f¶øÒö‹ÒXÁK+¼ «5†‘¢#7‹Ñ;ÎÚd¹Ș.½vkI,×^ÉméK(ŠnFF¼…`—Þ±Žƒ˜%„š®!Lã§k‘¹f¡ë֝îŠíó¯¼mÓ0M䡍†åªËŠ­Ç¶æGAeõ9ƒÿ‘¬'pÅ@cåzcF˜²D1Š“§aTk»n¸ÌÉ8dHvXQ YJ¢Ämبh´„F¬µ^ZÍìuúÖß'fx¹Kw[B=58þhofº¥uyý'Ö·îº,¨¹5¹´îáeÃèÉýfóc“‹ò™_7Dkh6.Û¯ì»aÂà|]© Ô÷uW5sÒVؘ›y0÷3–õ;k¢ÃÙSmo,hVOXïe©fôíØ§!*êªë:k”V¬ìðó$usÖÛ黪ÝÕ¥DáÈ6\²î»weK0l;:i¤6e–õ»{Ž:¢ƒH,öt`)–òÂ~ҟkw[¹íLµ[cè®A®ò¾~Ö¢në¶Iv +ˆSý,ÅÕ~ð%á8›müì™1z…|L0(T5P`¹MwYG=ÖZÔmxi䐬ۓ¨f`¨³p‚ª9r·t,Ö"ò™_vá…m´÷wé¤È@@@C½öd®èËÔ<3‚¯w®‘Ë ª ²¿çþ«ù?qõs=g¨ûþ¤ÔQËö=†OÊe|þ j¡±¢‹ çcÂÉ6ð²áé›ÚÔHooî)ôz§ÙÃêŸÝNÚß}7"–ZgTOM—¶tAŸ‹Øj¶õ»Í‡,ãÇBgn7ó¶´ÓãYÒK÷“ë:‰»HóïTÎWÑlîëw=ÅʝÙRmÛ÷’ÞV·$ë ߨë!þçaÒ^ÙÒÆÅ‡Âàãø÷…q!½J‚£Ûgʳ¤—¸©ÛYÓL×Pl'u]8?_ê«è¶G؃[TMZSLñlŽç9Eûj‚1D‚³saE²ó¢ïBҚb΢nâ¦w¹²_Ûþ:aE±7ªÇmæË¥îì½xˆ¯’Êü'øW–[Òú˜ÆÔƈ 6ZÞsÑzÊÿ?´ûm7¼ìMÎã_Ò2V“æu¶~†_¨7¹ÓÎ7‘$|-Û¹„ÁÃí—$nM3a#–iƒ ŠcE¨œ0.3$î’)ÓE —_·&›O~隆«Q «Ünuäõ±‘eM2¹:ÄÓd‰)pÁ0NÈ I€Õz3NÈJ`˜0 š)—,Ó·^v4çd—# ©Ã·À1è³Sbé½÷ÜbÉ +lԓN1Àšq½ø ÀYrÉ;p._O!`0€Ëóc"«ïÊ c’Ž¡2œM2!eÁ¡˜& +pħHç¨øiMC&" R™)œ³°R LŒÔ^YK͘$%B–Xä§NÛ/%4[z +­%­…¼ö·¢ —õé4ªR˜Ði󶪏¢°§`)) Ú®¾—M0!¿oðöSö£Ö@õö'#Qü­$çÛ~ã+ž†«ì¶:îsàzž /­„™×oý¾»¢AY»„õÇ 'ÜdՕÈx^îð–Öp­„°>M€ÿ YØnV½o€ù³FŸ !«©Ýkg5\ý\þ¿ygË$IÆ|ãùJ`_Ž5„9‹&“I1“¸ñ¡,ËÆ,â:7$¬HpRÝ.M‰IX$HÌ5š70ˆÿ6‡*1Ä¢YRc'‘àU¿ŽkΖ¨¬Í™…›-D†¾~’kK¸ëº;*Y…©m¹'£T)(qX/" »a óo…¾œ±±a»ÂcoY»YÛÂí O©ç¨=7cù½œ‚æ¬y¾jÇãšþÖ«Ðu²ßo5¨ø4™V]a;æv~sSÏïf´¬Ußp²qø91²#E÷»,Œ»%n HN¤0#ã¥Ð]±=’2Xä†×KßeÙv“'­ð0IgM3¹×ýÎökJûŸçØÅC)¸ìr¬Ë"ÆèïKe„üÌaeH#–VòÒ† ³A‰Î-˜"ãÁH¨1çÆC¬}˜Ï–rÁ—N8g4J+γÇ3KmV£ŸÙtÓzŽwu´é¯m(ݶU)—݁ X'ÚQ?Âê,Gù\±‘âéØî[-­¡–;@@@CðÀ{¨ƒò4Y^¡ ~>,,œŒoƒ¹ÓâÁ‰ɳ¿ÉdPÌAvÀÖåbLëµøì—«5ײ{ºªÖ¶–oL÷ sò°÷¶M—[Ų}!4æh² }™fã3öf$Ïb(’ÂC°2[ª\».™LoHXcÂm˜ä¨OD2™Š²Ðùæ(–¼ª+ϲ\‚fcÌqvÀÊsòãñ ¥ xOE†íj[mÞÇ×YÓM0Qq%šN5™Y•FÞ·À:‡Â ž3‰ 䍿cï8õ6 ´èk÷P† !ô:òycI1+þà²Ä^i|N`'zwAŠ Ì ‹ËøKÚ 9L!Ù Á­ ÐsÈýU'0¹f§úÂ$7€J…Yÿ0ž–éy€l…öGòŽ-t@¨b‘ÚAzd‰„Œs $œCÅ3Ë$M¸‹Hí æË Ì ²¥ùÉ<!-J³2*LÍÏ¢¼å¡P3ØÄ„äBš ÐuØG Í3'oE„뻝möæ +nCç‡EÒ¨èêsgšŒV%„9´Vßxl¾vÖÆ—k+×ó`€€€€€‡úw–]÷(íª1b@àcü~Wÿ ñ؅ºH?x{~Ubð'}¿/Íyžý3ƒîQ\L7ø‘`þB¢wAá>1b7¿¹«de"OÖ0AaI2á‚|ž7—À+ù]aöùôýÔïÉE|„Î,~ˆ%ø¯“Ex…hÇÆÓ³Y­Kc½ÚN¶K¡úh²:Kô99Øÿ•Å!¦±“âð ßóç@³ó¨¬Ít{Ý;B&äˆ*h%ú÷ˆ !ÿooêíW%äô€ûñ83côøwÓü\Sïøj¾M3øŒÜ“jª¼•Èç¹µ~µ¥48>7ë~§!͗…g?ÂϬ?Ó¦¢·®Y"µ§ã{ƒžÿ¯xêw:֋Räð#€ˆ}æŸßó‚ЉíPó€€€€€‡îû¤æ® ~éŸÏå`£È{£Î¯fæ*ËmªGŽÈ„ì ÄÈ1b|¾9º‹—Óaonywzÿÿähß,OsK;©ƒˆfò:2 +Éøpó6¤7àèˆùúx—2ÍxÜw}㲡)•ùFЇANãuHWÊ´¢€ñµ½NÜy‚@@@@@@C7x'µ½þÇ¥¢Úu;í¾±Mírkºß¾ ªÄ÷u©o«Ô]Ö'º«’*e•‚¤Ÿ75@kPº«JнR;(«”^ևÈt!ó^x`_Y)¼¯JRø|¥Í4%¹«P‡³EL_ÐFöæ¬õtÒþ"´Tó)Kº«¿ATžð)­Q)&±2ɰ3¨¬óËÀPhQåpTqVk5•ʯ¬UÀ'dªhå#š“Õ_X'¼¬¿ Ý&¢Ìh5;võƒ˜®ñh¬øÔˆ*«¨¥èvFò[I=­èFÊü@@@@@@»ŽgKUºë«¨vuôRÆùÐ 1YònócÆ ÷¡cG/W»"1¾Ûêë¨:û3¸h©ÁE/)!­ Ø„×ߢZ q”‡N¾«u®5†5\þÂŽZºƒeàQYT‘êí•&Ð'›äøªÚdþ¼´W. ݳx¡²•L=æ4ÄPüT¤Ú野Í?üÚދ}·ÖYÓÎ\Öï/­i‘ÚÒßZR£&5õ­9°â´1’[SÞ4ˆ­÷÷¶TI-©¯m)%ÑYïdÎÎ([Tå …NZÓ_ÜT­aA}lDl1ƒåµ8¸s¼ä<É ‘T¨7÷–4 ЇÈNïíê%y`ŠÚ¡¥($ î7à§2 Zm-¦0^ÙP¤¶%„:;}õñ4¥„"ý&ŠÈA³£Iq¿ãQ^bºÒÐàB"*Á"ƒPØPûD–à²kjp”™*1 ´ÃO(ѕX6Ô¦¢°Nolh{ª+üúsC_?iQ:{.5[®¸{Íü !û?³éîk7*.ë>/dÜ>‡~ÇUÿ÷¿z=õñ;+fªò¹Tõ…½}µ\ÿ^:,p€€€€‡Ô²¹èoÐU M¡?Ì¢¾7i[QXÞØÑXïv•ôRÃìÚ°@@@@CÿaaI4ýÛOþ âö¢i¥å†ðÖX³ÿ“ЕþF;ì™+±Fîàá3À>;,·{“h±O´¶ù†ÓKéú¾wšÒz¯îKÏsSnO"-õ½ÚwDÞð:_Mçƒç«ç¹¹n¯œµ;ÜCf¾$'Œ°Q|žàáÛèݸüë4nBgû7Œ?œƒ_Üoìé¶µÔ;=Ƽw„€€€‡v·ÒÑýwÕú/;ç;€õßÖKu\ž•¹z¿Cõ½Ñ7Û£úïÞôޟÏKé†Ë,ۜC"4UêPòÀ;JP.Mìû•˜Nۈh’•\¬¿ãÿ‰çûkÊnñï%œ’Wl™òVõ×Lü¼X;ÂR„5÷UÛºú)q÷r4 !íz¹Øzڝ־~[«©Ýì(æzº9žª‚cOGµÔÐÌiivÚÍìæ«y1§¦Ûk7rý`BuÝ?¦ôŸÈý÷9ÍÔsY ¢þ-×[U?דÛ*œî¦~_LŠ4þÓOI9ª¢Úêhç5t“}e,kQA3ÖÒNêÂ@Šž¶ž{W¼Úiƒ ‡ÝE<ö³u/¦¦žÖÑÍu”³Úê®¶–wW³Óz¯·óß¿ô^wÎk½wÚÍiÿwüÆÍ7©ç°RZããaòºo\Ñj'Mɇgq;W+Ÿèrc¾_!…¬äqÏV_‘`ò#KÈݙ)ësçk¸¼vb³/‘IÉÉÒgò$Žg,.fqÙiÈÙ|‡÷ ™ÇäL¸ðåv‡£ry8ؼww"ÔhÈó–bò$rÞIg/‘0dò,9ñZž Ç+Ç¥8L“2ÀCÆî²Ò›ÛûõuΠ}´—rúz¨•ýZ[ŒeîæñÝÛgµ7q͋Ün+rwxÀ–ÞŸo°õ^‡ëyï³þ':oOçî«è–˜ ^ˆQФ+ËÜvò÷oáaÅèf1dÝæ¹7øO\þíò¯/wRŽîÑ4~ó_«Gg1¨è½óšNsëù‰Mÿ¸5[‘.‹+Œðo^6Té¶Nµl¡›u,°° ‹u`8TŐÀháQÿ,²àM)–T '}œnC>Ró ÇÈó +Y¹Á4˜édy1äÖn4nTÁÁË3FÞÝ3*ä5YD¬, 2@7NÇ<¹%;C¾&m›)lß)fãL¤Pk2­œ::͓ºÏ%Ÿµn©žq}³…OœÉüdåf)t;ј³Êo+ì©6›èþîl9_á獜 ðÝЭ]1òmrڍB̬mlrÈN}©˜JÎBu…ù™ê—oõ}ÊgZø„Âà:¦Ûêãn[$’7%’Ë4nIœqæß7,ºéœ’6„’I4†’HI$ÚI$’B $’I €<àðy ðxǽïÀ€$ŽH܍·}ÿÿðó„“j·³èö—”Ç%½w'ºãuæ¬O=e’G[Õlô¶MU“I+¶M;=f:kºîÛ¬½;·oŽ÷>×uí»^éÝ{NéµÚÍÒnÛ|n§Ã§i»|¸ÝŽI,œìr?Ôø½ÝÞメI&Kïi~Íû’'Åò} ¬Ñ>.•úÿžýgp?¯ð¤ß(Kõm{eõÀ¯Œ®\|(Ðs–ÿ²î˟¡¥~†»ý„Áuû¤¯læÿdl=€ƒ¢z¸ú&ÿyþ%ú Ñ=nŽJ¢•Y;òž‚fòK/û~Xѧ¶¤Þu=@èlCd¤KÏ÷¸OÓRìÊkóØõ'aɘ?òæ¥ÿHNÎKm ¯ÍÉûÆÏ 3šBîzQQ¾ªv +^ŽZ¶]2*Yӗz«òTøÈÅyÞ¡€?psâñ39©u[w|ÅÆ¶Þÿ² +þÚJý ´L”;¶’`À€fÃЙYFüy!¨ÜäQbî§æå" ¿7+à·ó£~Ïô¼Xøï>Ø¿ÝA_sbÍТ9ñxúÿ¶‚¿5! +YL@-àc ¥=[O8Dá-Ôþ +‘Fßĕømà+ê´=óòzÂxé@G›%ü“DñÒÕ/õ+óMÉCž 'Ž=b>jFdœÞv:¯lKé.}‚çܦ®~9# sêŠã˜/98€tÛJæo®‚¾â¦ŽküZE?ø|Xœ;æílìµžFÕ¶(°€NW8P„ή‚(šwZ Í{|‰~oWÀ¢’¿ü àQ¬Llx§Öãoå’ÿX·æô¢_ÁúÞnÁ/à‰|n+Ð¥üŸ ögä¾ÒÞ@OàŒ€p7Z*Æ%õ¼Ò_HþáüG¼E¿¸¥õ©}ȟfKýmþ2iñ±/ª4G°8%$a¯ ¯•X{l_Ï(úÚvûzîbR%ë–ô\¯ïA_›“¼‚¾†XÔt“$‹˜€N Ìá+¾‘Ôí$Õe2*òB +ø~\àÿ'æìí,kuõõv–5‰©ÌaV—ðkì*Êôüߤ'ْû_[¯°'ðëHÖ"ËÛ*ê› +Êr7”$¯N—߬-ýúïã6düe/§¡C-_m«~ÝuþË?žó–¾ÿRú‰+û½]›“†€ob“. ƒñ…T&b(¤+iç)'NÝÿ°ÆŸÄðô°WÎÇ@ÜØ(·õïÿ¿ü¬§ „tí(¯ð_V·ú‚xü¥åþf>1ý¸A_VŸ‡¨¦CG9+wþ0E>Švøzo=%ãÒpûn&ûø+ò0îݔû5PøðWɧoØÝى" +ø?ª0ÎÀRÓ ¥Ÿ˜ØÎ½4Á +ü6ðWåã rûüWã ý”•újÁ‡ü ¯Ù!Wàö&™ÚJY»È+æŸE¨¾ÿkéSò±?ᜅ1ë௸0f“V .ÿšÚ$_¹Í´+Ë}È©X·Óoí¢ +ø:švþmË甔‡¨ÑJ ++øzÈ+üï­~üÆÛb¯·WۗsÑÚ]ÿEèyDGc#`Ý# œã Ýca FÁ—KýM>–øyè[ie›;$¯ÁԊGÝP™[>ów%~MÕYúÚ ¯€WX?ù“ƒ÷›¡yüæ9Ž_•å<ÿ+ÊyîW”ô„~?ç¼ìwìs’è©+ô\݃>lá·Ñ|\•úª' ]Ôò9" tاo€[sÇ4®² +ü„7aNßÚÖ =??ç{‹vþf>Ûûv¢HA_Us”i§héfÒNMÆd'"Í=µ+àÔÁ_C,kßÉ_ÈBºî ¯º2göµƒOÀÏô}Äó±¯ñíÌrNjˆ@zÁ]áWóÓ ¯ùé©8>ž +ÿ;•u|)Áó½mü²ú‘ùh¿q¾ý´àú#‘G ¾ÈB9´G¹)M‰, uPWè©OQ¢•Mx?ž“ˆíðêd¯Ñ“’ûø+òPæ6Ø3¤‚¾Þ»˜—æ9Ž_åÁ_ÚڋçcÅ`ü‘~qîi`ό>&p~FԎ<¾í$°º(+í«j&ŸKržƒ“Þð3ÿüƒâ +ø7PWè©OR#—»ÿƒ"Šþ§ážç³§Á‚¾r*ó™}$÷¶å®³Û›~ˆ+àÿĕý4Ý$ñۺɷöøͬpþ ~JÆÛs6ðWޛVl«ê·¼;ßø3ƒäS·ÄðuðWÒŠ1nhüÐJšŠ}lWàò ¯ÈBº£'•q½4÷:šYîg™æ}·§þàüÁ¢ø‚¾]}4ýcC_€ʵà‹í¹W ÐÁ_,½™='¬ÝA\ýÚ+þ¢@aõðu”WúCÄA_ºº`;|:»·‚¿Ìó<ÍJD{œ>ôÞµÉÝa]™|¬>¾Šë4êŠ+ø?& +ý $Õ$ì½Þ‡õÆÀ¸ˆ+àûòWüÍU,ô|#¢.wš½ ó-Jö–Zï}½w.Dûk$S1¢p|;~ê°~—ý}ƒàÿJ+û¡«§ñ(¯í빃±ð[ÞCoöڐT•ýÝö +)Ûàì ¯ÝÙ_è%5‚ÁŸ“~OªÃëéËî¯_óA_,½™¸‚¾,ðvsƒ÷˜¢üN€ʰgÈ·oÍn`¯õ÷PýªÁý#›9+ñ|¤•üä¼\CËH‚¾ï§oî±Ûþã¡BÅ;~}©7ƒø‚¾o~%í¨t¼œ>D•ÿ]‘7úŽh|{Q~†ÞJþêÊÿŽ}|.x¤¤"Jþæô+¦ùß·0ÿÛOï9î¿ú³ƒâŠþ`, '_ÏL!–йÁ“ór‘1oî +øÎJÿ¯ÇoýoB‡ÿbŠÿo8>(¯àìðùînð'ì‚çÙtsöíÛÿͰgÔЙUDðª‰äŒö‹V”"¿ùEA+4dü?ó8?뻂¿ÔV’OMwW÷–¢úš-^‚~ r–A^Š'A=›DðDT&JõB·Ì§oÜTPŒŸ€È›ý•a;Ðò¾‚)ø°Á“è]Ô¦Üòó ¹¹Ç¥z(–­tëm} Ej%”‘šø<ÑWPA_ÿԕù«{ ?ƒàÑöìºf:¹œô•„ï?Éù¸èCmËO…—ØóŸ³ ÏèŽ[Y×þŒóî˜ífoáüü;µÿ!¬UÒM»4Ó˺ÚV¶±t³«f¬@½M%¢ …ÏO?«#{SBfæqH@®øø þë£Èâ°~:•ÌÉC»ÿú°ÑV¨Ê7¯«rè‘KNßþí`ÿ-)©PÕòÕþý¨ñx·1š‡VX”ig¢/aJbÓ\ëiXÝaFËV}zšI^Š#=:ÿ›œzTX¾DôGHÔ¿q‘7À£[Vm1AÁœ…0‡Öã·þׯSþöÊÿA)yX?*ÊÿÞ`Éõ3î¹Hõ¾@·ß^–<Rü½á°¬ÞKáæU_TWÏjÜ«¨J’Ñr×Ô6WP²Õ YHo?= Z +ù]{ƒü=F•€F@¹¢çŠ·ì–Æ­•|÷uš2ºìjÿoc¯À†ÈãUçX3êH d£ðm|Uíoî/Z¶¹–wäöï*§š_švi¤’-W8ïi®3mb篨f¬B·K¢ „ÐOÁfç³D挡3ý8¢üž]›ƒàêuŒÑ£FzJâc·ô¿÷<ü¬I6Ñ©¢s6Ù­Ôý×hý滁m`¯û­ßÌ̖Ç@äðM<:rÆúš )F—ùx÷Kê´6qn\³=k­¥c½µƒž¾¡®º}’ªmršCMFiYÙ6P‚Ñðò&úlQ~WRÔ"߅ƒ>§`¢Ÿ[¿Ï‘7Ñ\vtL™°S{¨+û¾Ùoû¿· Š4[[vÿÜàÉõDZµ3v¬cþ>üÃ⯠±`ø+7 Œqó9è<ã +ÂöUֵΖun6TíuÓúª©¥„†ÕgD ×œ IwŠ/͍ß”tc΍»Â­<¿/ËzS–ôE±'GïOƒ•ðKK¹Þ{d[7Zµ¿»î,ÿmš—Ðm-Ûö9.ÚÓùR>_ýÈàY|íkÀí ´^Ö·üSoÞ«CçXP=µRÊ7ÖΘµ®vµ®q²§e«>²’3GA œ}TBeM°¬@ûéÁùÃFOÀ«’Â#¯,7Xž¥<~ UHŽ©/õ¥ž©¤F”è½ãeðt¿+à”³ÓùímÀÝë!ÿc݅þßJÿíñÛü‹¾úËJ²c¹G œ±à:,¤Qk7Ü+?“ÉÂæâ4 ³.´2–uŽö¶–udIkÔÌ®ÓHèèa„–×ëb‹ñª/àøµu.«–Ëfÿ{[gþ7zÇííÛó¦þ?R@aHã?%£ÔøÎ† ĖÁ±ðJ Ü>5ǍÏDh˜ÑÁ˜³«*‹Xåe­n°£cª™YHlªx¨?S0‰+ðéÇ×Óò‘ÆßC¶/çr܇ówwËoÅïîþÇO"?/ú÷Îúš9‰†ìv³;hò·Õþo¡9g~½i÷ľÙ|]ð˜×.;;¢ÔÎA5ÓK9×Q;Ú×¶±-cKªª=¦£5¡ŸƒÎ#}SE«ˆ”iJțâ +øn·q¦OY«ý¸+êJfî +û³6†–|ô”CÇîA_ 'Ÿì¶þ‘ûüxíüˆ$ŠSNøŒæ¿}_àvðYnä¶°í>UáC>i]€ñ–Ýlõk½­ƒž¾¥«]<ÅPur–CGA ¨Eôð/§.ÃFOöX}|Z‹àÓ×ûÞ[V?ky+Ñ4β¥¡É_û:N˜eÐ|Kœ¤œøš¢þT’þfiÃ'µ‰xÂß|'ª‚ÊD…ûÔ}Ö§ˆÈ:à4FÖÙ¨b݈¢ÖWºYÖ8ÙS¶WPjjNéh¢N!ˆ-ۉ+ôOtT“[=Q¢øz¾/Ýåã g%ÿ¥´®Ðï-±ð®Òq¹½¥–wÙïl¹ˆø=WÔè1cí~ß•ڍ²Æwqª/ù“Î\”.a=³‹¾°xIOçÌÿˆÈ:à3æ•Ùgâ[u³uéíl ÛX¶×ѱTÌih¢43ðyÔo—6¦*š*SeÅ©©éµEý&ʝ¾-Ûðêy +•é ™bxÞ}YA±k+Ïëj/±‚¿öÛ¢Éàw<ÈvùpWÈ۞òD_ëÕüÌ۞B+@ geò;[Ro¤/˾ÛårÏX½ µ¦ïMõHí5ÎöµîVZÖ­të´âÂCd[ƈž;&‚Ü(·|樿»­M¼QҞHŒàѓðì,¸·æþ† –“+eÒàk1%¬3½œRšƒsÔ«3«äGڛ½5_',¹¤?»ª/êSeòҌ|ŒŽ §ùD"‹âçƒÁ1}ڃW“Õát2L-T²n֚çkZâäڙm•ÓìUú*R¬TO"qÓj‹ùZ2~$¯À«¼% 2è:7÷úl݇¶yô~çMÅJµˆJ¢¿´G¸ü_ÿ³––dÅ=âxönø½áЬ!u†‡Åå á´1‹Œ´&Ûj&œëÒ¶±wµ¯k®Ÿ`§”Ó8‡ ›œz+Í+üö¨¿•Ú³áX?w!Y~糨ÙaGc_£ۙãÜ>4‰þba»#­‰3ƒ¿1ù9cë ²‘8†ÁâqMþ[,ó‹ÒG0±N@7k§Œ%´Zƕ–¬û´âÍ$f~z©ÃNúñæ ¯£æà¯¡9/ðrO •ó–ÖS—z ÿÿü^|‹œZl¾RMžÂ¹ñ·ÅϺ‚Ê”¾®ø\ŽPmò¹gÜ~–CRãHp©Ä7K:¶û•Ô Ù]'{E𹂾›iwÉðÃWøè^±¹Çâß[d\¿ïMq›sțÒá\¼Ö“ƒ"péc|ÝÁn"q Çež1+q¬LÔ&ÛꏹÙkLÛX˜µ®k® _§“ÒÑk3óð*½Õ¼uy¥äNʉÁðu8?´µþvWŸQ–eÇCªb à°m\MñsÁv0YH‚ÐÁây';ҌOIÂȎÆ­›kkZç/§„ :Ùm5¬ôëÿׯCäløµÀg€så_;ú©'?ýØÔN3ä£tø·ÜmóUÃñÚ}÷°‚ÊM—%|[û~CUãñ-~S(ý‘ÓJ4¸VΑO¶°/gTácJ×Z~žK?=ókאWÊßݱX?w&×T_þ¦}ËÌ6c¡”ðÎ^kËä/¬ ëÖZ–ü|+?“QzÆ®Ìf£Ž-T„ƾ¬Íµ‹­¥kNºur–?KC¬ÏÏ@+l,µŸ—%~N;8ü$¯þ¦s¿*ðåËË´ä gñ/8|#ÔýÙ7Ñ?åÁhÀj|n<½õVSM$ÈËE^ƘŠ-e¦¸µ#%TÚéb'?=¨‰ããZ—åk·úIÙk¼‰¾3øA_ô}ß4€Æbe»-&Ŕ‹Òâu|‡Ï䓽ìü/Zœ±¾_—|2rÆû}\ðxF^[ŒÍ@e—¹•e¬‘jeëê›kè™ë-RGgI¢Ö+ÏûuEþi4ò¸4-Ûðyj/ìuEüiõÿ9E¯ÉÒ➱ í¾Sªà¯«ürÎûìd¶”øµ'ü¡a$‰j´NÖu¥dô¦Z³ëi è¨!3¤å‹ ¹-O‡%Çoš—öX2|gÑðwj/‘eÝA_¢ÿèðÿ®ZWU‰Îâßq¸gDìG“"‹_ì ´r žC^ù›‡Î¬Jµ‘‘v5õ.Äà>vÚú&J£Ë´Ò:Z-fqêª'…4_³ŒÀíö&þz]7€6 ¼À娾'ÿḨË2å$qÐêŠSðm\Fãšôˆ«úÿ†gá±®\rœ"›Ûé6ZÉ{:§+-keu%TޞŽ+øV‡ï¡–‰¹·oÏIC Zß}*vøÕþÔvÌÍ8eåÚr²zŒœrÎ:5ŠzPÂòØ W¸¬L“&&MÏʱ¾_<ƒÄbZ8œs®7ža@øF)”¶°1i®p±¦-`“SS0°’.òž+¼Åöóƒû ^fKøÄð°gÄÿwsÙdbôxØ ŽÅý=³‹ãÙøL«ƒ¿j“gòXO”Á4ðÊpyœî^]£²¢¿Þfñ%~úø¢üA_ÿŒ—b‘÷Mµ`‘5቙š-˜8ї8΢q™)—–fÊÉj;,Áÿy8>ið`ÉðÙÅâ +ÿû«Dž¢qç²²ÇnqEúnόÁþú˜2gª/âð_%~V?2~ïr6^9^~ë‰Óâð_e¡yç`¯‰Áðÿú:~O¶Õ­ðwy8ÿe|b‹ððò’û.+àþÝ»w|ü¬Hœwö øœë¯¾[ê‹ý×÷Dß ¯>)ÛàÝèÉúIӉ­lò±"p|ÞdMô\uáù™ƒüêÞ|@î¼x‹Áþ’xê+®ó(ŒQ~îïÿ9md²¿ÆÒ¶ƒªãëýÆÎ?Üîüä¹/c_€?¸à²ú¨â¿ø?ÛåA_æ¸lNן‰+ð‚¾+àü̉¾O†Â·oÀ +ø‚¾ÌÌäé¾Hœ}(+çF Ÿi‘7ï5üA_¤•´á ´[è°gÁÙìMùÑ%~ú²Wäô-Œ„ý7)5!$¯Á¼àgø·oÀÔàý¥‰ i'ÃÇä©+òuÛüA_³’¿?+lVÀR¿°ñ +ï+”_ìRN‚?¯£'ã>€>ƻŠ8V”Ï[ê‹û“åø=”ñE}Y+ó±‡È鈴mΨ¿³Ç¸«M»€WÀõüÛ?—Œ~‰}¿U¹¦ +‡ÝX&ži.´ü`Éð‚¿qŒ‡â߅;|N~vS@abqúŽ”ù7ƒù¤Ö øÁ“àj/“j/üíQùænë>ƒûZS#[ÇõzkŒÁÿwÊh18>ûRWæÎ÷¶ ú_ÿ.¬í^Š!’®l½Q›kµBy®º}n’;C?6J'ússé×ý5¦jÄ%õé~ X“¦³uUÓ딑º ÇÍîƒ?è‘=QRìx>G6ÏÄàø^ÿ§x?©¢3¢ „h¬DÕI$Ǝn\¶¢dË$üC­•I[%ß`‘j’5Tm*gàepõDO +ô:ÆZ£Ìé#õàVf j>4$r²Ö»ÚØ%+gVEûmŠU#š;ô‡¹¹Áó¤oîHœ+ÿ©GA +¸éEï‘ôpéú®¿À§êx<#/ Žt¿i¤™,êÉÒ®*F¶XpmŽ»èu‹3y7ŒFŸ†Á±øëû‚bñ¸Vn’/|Z8Ü`‰,ëúú¥ÊYÖKšÌû ¥ß'ÄývDb‹ðunߝø\¢ÿV™qÊ=ã/|öŒaš8f)È]}[½­~¢ àß +ËÉ+óó)üþƒ?áÚx†z8×bt?qvšGµ…G³È›äø§{+àª/þç"oå¥ñ.>c¡Òdönpë‰TE =HêøöÃ9Üådõ6®'¡ú„gáu_ŠÔ…½-7º‚¾W‹ °œ ßöù}Hù|W·Ü±ÜŒj¤“w¶°l®Ÿô s¤Yó-ø&®#o°"x†®)¶¢d͵‹euö±ûîÆÔ_&é†íð¢¿þ„àúšlS҇¨ÖËæÏ¼n¨š3mbµI ®£&Øw[ïIõáæµÄpôûOGîd¯ÈÕñ§×à§`ÏûÝHÊG-_˜~çð´ös -oë ~ 3Ö"í,.ýŸ§Éá°H؛ðÓÝáÿ{í€õ[¨Ë…fòN5³ÎZúü _ŽõZpòîué,i»M¯ÆÙólü®‰¿‹Q|'ÿ> +þbeºúÁâ:]ÊÛZû…©&§K:µªHÞú +æ^a³q¾9+ÓFm+tÔf·¹ƒü¬VL+àÚÁ_ÈÏî5²³0û1gXÃO*«ö7Pƒ!Üknò¬"¡›kºXÿi˜?íò¼ú¯ñ%~ú9ÎÿÞiõþ-ó¸ÝD|[wß9פb¨˜ï·Á<™Õßł¿Œ-Æ;Ú×®ÓHö¹ƒÿ›éÇùé|$¯ý¤õ#î˜gDíÄìŒ-Y8ÁO+ÞÞ)~ a<¶ç~ÄLÛXêjNþŽ`ÿ'kÏÆÄ߀;ø+ÿj/©M—Ã9ñ¾¯m÷÷Öú¤ U{Üû‰™š,žÙÅîv(͵Ší4–÷0‘Æäcƒœ“à§X?ý.{¯õWҍõ'×éå;ÙÁþ² +úå,‡öy~>›¡CäڋâJüô4ŠÜò‹ý5»mÓX võpþ²¤ò½OòVæË§·}çO³—Ë_nbÓ]Øë··A¿Gärb·WòNØ6Z´ +~ÞÝ¿+’xƞڠØúúÿï(ªîS·ß£ü´£MÆÄå÷A§ÒÐÃ÷öíæVSSýMÂAßÕäY7ŸP6K¿ƒü$¯÷¶Wú’ í|Wâq^ǁZ@ò0ù3¬x WÓnóÊÒ'ÜßæÙ‡[n¥ß‹+ü ¯þ…àÿÉCf½WíñŽcI?8®êO€ñO˜¾–uuߢž‚ÞbŒQÔ»ð.y3?u3|Tàû´ÕüÄÃnÇËúšÁÏ™”dW77„»N Œ+ùÑÛà×ýG‹S8ÕÚøU°\îù<¯ã#™„Ú‹â°~ï7þî +ùÂxè?í¹Eÿ”^'Šõ~šç|Æ)6›ê>'9~`ñ=!ùù,š’­cyeÒB·üŸ%VB¼—ö6+࣭³ö(%¢»}5_ä`ÔvûòòžÛå33N +žÆÌIuÆ?ãöû¼Ï‡t½æO~~³ éо[ò~ãÅ*ȤŠþï³Rù9Túb;Ýò@ÿ¬U¿±}×?5Ï|]ð¸‡ld󈂡¶£dÁ¨à5>7ž‚³¾_Wü>)íCÛA\ºÞwþk0ÎÍGŠ+ø½¬•à#yú|†ß@퓎Z¹ñ·í•ƒbG-eZ¸œt.dA\èyËÓ§Â8q—’)Ë[ÿ ßå2 +ŠGÝKRö=/ŸWà³X?;ï´úÿ12ߔ]Æ?rXwKÞύJ(OÈÐ(œgÍ 3™·ã¨ÆJ5`Ž-—½õó‡ÈÅhrçZ:-Âì`¯¦·oæå"D•ø¹.y~>UÉpNš±Eð߃ûíüܤH¾wÀW~Éò$'Á™ÌŽõŽð߃Ùé_ù5„ˆ·÷à~úØ2|Ÿgk‰+ñ|—OÈÌâ +øìf¥ò¹EþÏä¨|x-σØiõøß£ðÚߣû}Qe‘sT@ ¯ƒúÝDO•ªHÝáðåýÇ(¿Æ‚ð®ÆCçÎ?€寍œó0ÝõÄüX3àÃ'ñ|“˜?ʲ¿ù©Áóg‡_ÀOˆ+àì÷üuê|9Eþ6¼üÇ+Ïó[Àû15%0døI_‰+ðnò¼úIӜÕàþE»~;þWÊß ö)|}àþŽëÀ¼€N€;ËÁüqÐ|̍“ +Áýޚ¯Ž /ƒ±‚¾< /Àp|pY|ܼÊåøµÀ +øœÜð?ëª/àúpWÐË Q~¢þ ¯ƒò³þÃü`DpÐåøøèVÐʊ+øýÇ(¿Æàÿ€üVÁ×djÜÑ÷E”OÛ>CoÁÿ}n¥ß‰Áð{ Áÿ~ç9Eþ+àX?WÁë·ý76ÏÆ¶Ï€ñE¯åúo =ô$Üãâ°~ïõEþd`3ðvK¿Mj/“¿”JüüZ¢ÿ²ñEÿÞ÷a|?š|›~æùß#Ì+nðø»°gùîì/²Ûðu¼}' +ÿ¦ñ@YA,huŸ| ¯“|±± ½€õ°WèHÇoòé§ÇY÷À +ü¼\Ô|\ t$r˜ð¿ãòf~Ž™ä¢m“B8¾WÊðˆ!#ÉRlàÓL`zÉ+õäoôIPlF?¶Ä¿¶0ŠÂ(7;r|ûAG²è›àæÙøèïÑùZµ¿²ñr‡•ˆ…/ú×Ú³.ê3ž@:S@‰êV‚Ogã8`G€Ïøœwyô_9´ñ…J˜Ž+Éäê + ½‚QÓ²À,¢WÍñ3<–v;% ÎyÅb +vøºÑ“ÿ:&Á€V¤oü^¸•\—%j·¥&µ\pª¸u[1úaÀ7{·tëÆé½×»w ÀÐ7wMÝÝÐcÆØÀ=l€À¶66Ø6Û`ÆmŒlm¶Æ6ÙÿŸáã}Ç·^Òi6)‘D¢îÊtœ¤K’î‘.‹TÔ¹(»³¦ ÊbÌÈ¢S°ª©UR¸àLk…mÀŠà\ +•U^µ.R«.‰T¬úžÚÙ/z[wº^õ«)ø½ÿ¼lºýŒ[úÌöSڝYòé&3ÔržE,·‘K/Ý)%|zMgÎÀûǓI/äÒËøñ I#“/£”‡Íž¥—Ï{°W“•úøôzÏj7ýåQËüšOgÍɘíÈh"*?͘Q2 +I_ϊâÃ0ËÿÉów³Y8҇êaœ÷sFðžU&¶4€Ï~œÑîçߕ¢¿•I/åò%¥·š½Þû]ø÷Æ}Ñï÷{-;üŠ|óQ_À¿ëók)¼}‰öÒa.%ÒÇmDÔÜŒÎæKë¢7Ž7›Ášì?Z4„õ÷伨O~Ä3àœ™æü¼ï»)'>¾¶²0Ï¿·;2È>w³RT3ó4þíˆrÐý{¯í¤ôO—Ðx¦ãn°°o­,ë<‡tTò7¼š ¾>ï]Àý›§÷}ów3ê|V÷ý7KÖ{7L.úÞþ}ûs³‹¹—¦ãNÔ~Uïc›½®§f¹¢þ¯ëNÙÈà_õïzýZÊjÿ}ˆ±>‰²²­®áðZÇÿüvãáe}QðUåMOã¾éÛ'ÛÛ ~ùïŒÜÌú³šöTpËq7n«AuqÒÂÁ¾³±©îZŽåðu?ó¾À¦%þ5Ë|®Ô6ܾTr=ëúBÿ~ú‘íÄ¿œ½•óXàCaË¥ÂÁ¾¼ë\VÓñ£ýôcÄÿÍʱ(j¯ù/“²«£ßý»éæÿÑo½VúñŠÏ¹I3‘¿Ûmµz%Ç9`?ùo+Ÿ™yÖ¸‰EŠîë™KÍ|ëLO©«rÃãpû*ùãXhl0ÏR۝ ôöÝKX1¶Qã~æeg(æ‹!£NøpÌ³»8#K>îGQmgY•‹‡îæYS +£aws¸™ÆT?çôûxx—Ôo÷¥ŸÎÓ<=Õ½•Ç·ª>Ü{҆YåéÛ. +üï7ãëC½¦xoeG®¨¡\ãòú,]aàÍËWÕQu®­ðp/a¢ÑðxWøX7ÿµ þö¦wúÏá÷wVö<ºNܲã›À+í/FWÏÎìä¤6úÍ'Ú4¹F“÷I©_7mûÑ ïi„è—ck®UßüŒÇgüÛÍþ ÏßÿŠsIWñ¹ø6[ޝÂþÿ‹ðûáü)ÞWö1ÿ»ŸÛÿ†Gƙü_êËÕhÿ³˜øYÄç[Rÿ{áÿ_ü‡øX¿1óð û_ÓÌf>'ÂÌf?¥˜þ¶V1?ï¿©˜Ê{Ÿ8€ô¯•Ðf÷{9e-¥•o*‡{°õ¼¨¸­W™ñ¹|šâZ>eSE¿¶³¯yugu±çVÓô¹Õ”Ü}æÃÖù‘±¼üÕ/s©Ðø~åéaRARžíäcv<ºMôԜl ¿£äTÑp:\îe…]î¿ÓÔgóYpV«Ìñ*¨ø4ô;ÍF3æSq+¹T2z_ MY‚–C?¢ä¶uö<ºX#IåàöPh¼ÙHû7ƒàÁ¤È%„ÚÒʲª“…’ àÑFêgևM¶t›©<Œ†mñ}ÓUæ|jš-ÿkµÚÅìba`_cãcaá_Ïl}Hh[êôž/RÚΒ‚v6e5¬Òö0ð`Ì¢àuþ¯Ìµ³¯ÉÉɂÃÁ¿ÈÈÇìâö7;V-šêŠ*îT–‹âåÈ Ä¿Ÿ-èxýù=}×êò8Q|ÓskûÞ¶F><./c [UGÁ‹zFŒX*GA›ª£á]ÜÛLz&4«Ñø˜øøÕ”Ü]gþL ëÈ%n ýìRúó«=†A“AŠ„†nñws0ÑS¶³¯«¤áAC—ÊùùÛ*ÞVNFDLÃÁ‰¤ÌllZ í|YC›yœž$(ƒMwý~¶>72›ˆ¢Ä}Óu²ÔAýõÜZYPnuû½œrïÞæß£+çüŽýýNƒÂ©¢àdääÅ¢¿#!›­§ãäääWÔò83rÓûY*n6ïúîîæßc¨ù¿fŠü¦—9mаìbaRñ' ‰xSšØ<Ùøû½–£. +ƒƒ{9®ô²â¾ ܼ4Wà™©]-] F3GÂÜbö1)¸Û¸h¯ÈÈf¹T3÷wVúþ÷ +áúŠŠÛ»˜o?ûWä´>uG±oÑæÉés‘²6óg‡ƒ´Õh#ÁR2¾¯RÖߥ̓ 9®ô­º–PdVŠü2&þ÷­ÇŸÚG¢¿‰ÂÀ½†DÆ)8s¸øØÐiVÓ­Ôµ¤áÎ|ëËö$3VT\êÎO†œûÈxDØ÷ –ØUÑô,jòè0K鼋›~…•m? +vb+òzOן]]QCŽg‹| ýíÜ7Ó}Š+òžoǹ¶èSÐÏÇÈ6:/'''w•²MVSñ»^ßåuO±©Ðx_ZŠþ«Eñ`šü}ïµE[Okg_#íÞm[¶“Ñâa`nf}h4WUGÁ›Öé£é¶ 'óyœN…{x¸ÿSµÚío¦¥;ÜÂw…Ë¥ µÊæ£Ð`ßÍJaá_ï¶òpÑ_•óó·ý~µö¿.™‘ük»«~ Ü·¿E~[Ðñð°/·ýéU ­ãïv›9) ¸+¸•‚RTÑo÷û‰X +êb44“>µù©o6 ½ÛÉÇ¢¿×êõ;û¾mo£ž¹·èA1uü̦—9eO=°õ0oúõÆûOíó@þJ+ûݾ®?A®«¤á[{tWàÃÜÛt óIh¾,”4Wõ¾—“71¦Ë†e|ï‘ xh¯ÁãáNëa¡Õ?¶ÕCÂ×ûÔâîæbâ 6Zœüz+ðEðeŸ“2ãÑ_Ùjd0oïi{”‡9|š1» ?•ôè¯Á/!Þ0Á9 ”÷·—V¼úé}6z=ü|nÏ +s[߁:5pG¾Ï1âÁ87þ¾³¡cU‘‹‰‡ !ðþŠüÔ¯›x™ŠüÇ¥ò`ðMšû9=.r&w•Â7WTPÇÝÓâa`m5Z´WãþRPNG¢¿ÛŠ5š_¡E~WÏÎÛôll«iõ^gÆÔgó=K^~ô='éQ_&úýn¤×rü28ÔWûY9;ïof½A“ç×ÔVò¨a̶úÍ'2›‰{ws“‘‘yÕ¸ãïv¯ˆpE~vKCáÖÓñ¯:·òß?eы²¿·èØÎëý(¼snßY¥ÕèüH´W÷{I¸¨ Käû›+ü|y¹CèQ_‘ÍVSqnº}( ÙoC;}ygaS+éQ_²®åC³U ž×YØUaàßÅÙ¯|ý•ÿ.@¾_Mäu-lòrrq»8½.w3‡;1$ã¶@úJ ݾ³I…ƒ}Éânaã±âÑ_–ô3·÷¾÷ +ÿso ?…Á¿½áNKý ++ñ:–ÖK³‹‰5+¥×ú}ŒL.4þÏêQ_ÇoÉé·g±‰ëËyÝø+QŸÌÁ.k꨹œž%Ý×N0ß_˜?Ïæy<]Íů>æäj+üyý§¥Òñ'²1ñõžoǑÍTr7Öýݜ6 Á¢Ž]-Šøÿê+ø˜x8x7ó»N.kŠþVÆG…ƒ}aÞë·óûI,œŒŠn.ëìõÛýÎÇՂDÓñ÷‘`}o¥äô¹Õð¬>*®“‡‡ƒ}uÓèóëê"ÐÃú´Wõz?Ê·•ie[ ?{®ßæaÒLöÃÔÄÂÀ°ª¢†ân¶[¬Ÿ™ìÒ^ô0/¯!Þ€ùè¯Á‘Úóë£nµcQ_‘ÍÖSñ²r2,*¨¸SšÞçp¼Üî-, ÅFíýðõ6˜xíþâV6+s3ëCÐocQ_ÕèüN/³‹Ê¡ÞïvòpfVU´ùøÐdÐáïÑ_ƒ&ÇÆìäcãÑp=x¸O¥E~/pœ˜ôh¸;Œ\L:n6ë/…‘ÍQð§ Ð=…Uç_p½»¹¿‹ÜâpÒ7öîÒʲ MÌi¸3rý;NtFfE~ü ýWøsÚèÔ-#Q_ÊôÿË´²­ÉÉÉÅÄËè3ùÝ©®fWTPããvp°/cz +¿§ÒçE¢)û"/g}y¶”Ñåú ÿm'æ]ÜÛäddba`v10 Œm9õ±hüwè¯Áàß^An%¼ÿÕ¢¿Ðg÷÷·xݜX&.˹E_ ÏùՔÙ9œ^ç Ïû8¼)و½Ä DÞdDôýýïZf †ž†}¼>émg_²ØÈÈf¸Û͕Mþ/¥@9ՔÑý+?eÒ¿ò: ÝëaSÒçVSÐûž•ÿéVÈwf°úVÒ9kÏ®‡ åúWþSKœ¥ žèXÕÙVÓð7°JËô²V¯Gâó)¸œúêˆ×Ü¿jôž,ªw_éþg£o#zWþ¾ª‹g•Òí¿#Ò¿ò½îÞN®ŽÒʶ®—‡—é_ø2#{]-¥•eo*†ncM¨uې?ÕL&‡Ã›Êå­¸óû=–§?ÿ¯þ“D³Ö þˆ6DåêvÚ»ûÞ¶NNN>7g«qi³’Ð&ˆLÕèüJÊn/G›ÌÛ별—]ßļêôílëædsó“×O¥Ò²¬‡®¦ˆFŠÿ‹Ì¦âÞun.-,›RÀͦ¯C}yu°ïàþ†·óR~·R”0š }øÖ³2Zw_éâa`k½O”Ѐíþ½6zk%¬ó¾D>h?¡ÛûÛ¹ý¶©4@ýO‡"âן˜h(û•tåýöÞSIëËyÛ?—ÒP22­ °CÜÖDÜï £‘ÆßIÍôŽI$Ž °lm¶6Û` 4 ÐÐÓCwtÝ4žÿÿÌúǼöM²m­tµªUm‰T¹(¬K®¸\•ξ.-Â䪼•ι|•«°;’¸U+à +¥pîO´üïu‘Ç,³¢:‰Òpò@2~€rPÝO_ÉÚu¢V£{]ÍFuÖä£{<õµ3Rè¾´‡w¢Ÿ%8ñʧÉLÄÀ"CzuÄæ<~†n2 +r;°¤³ôb¬!z~°”âDˆ4L'[ #æÑEýފz&}h1JÂt“æÙñˆó‘¼V҃Vš#ù‰77؆3³øÑë¡ÞE Lðü¡ùÝ:£ùÂŸ7§ÚçÍFA.ЁSXÆ1Ùu®Ë–ìƒÌDuDû–Še¼VN¼tÌTJ¢V­ÆvyóQ}aÈ÷„¡~ƒ÷28Á‰êaȚ º¡ÈS¡khBq=~pþiÙ«fˆä»ÞôÚ¿ï͸R}Ö—}³Vûí´³1¦"z¯=)úޓ•oI5ÙçàÜ×4Þe¬†¬ ’{ z¾ŠS[O9Ã}÷.x6ÙpëX6 ”ªŽÕÑË$A¨Ù¢É~‡ÏçêfďF¹f¬Ä Ã]xçÿ¿”¤ñŽý2jPjfˆ—”óQBM¹àà oúÑäQóië¨c+ïòÉ1*Þä4=ÿúÕ¾•ÂÞºžîåD×Ѫ :ÿŠîΛy“´%¨œŒF‚ëv¬l5ÌšöŒÙ|.!"7Š‚öpîì·Û4ŸG/;¿ÿʬô—utg\ D½oL@¶ŸŒ°¤–SӔpplêè„3_G*?Í…é¢è”úY¸Î· 7ý/"ñ®¢” +#ƒÂüü›J™Àœµ}ü^èå×§[óØ0þJB}_aÜØH̬;°ò]<소÷T³mù¨sÉLð«1om³ÝsÀà%åÜ^ç¸Tû;#EÁ<åaÝJB|o)z'÷¦‡2~€D¢³akiæÑËÂ"k‰UE- ®¿×?!Â!—{[’üZMôJÛJ‰¡ *öɐŽ^%Ú?$wÝ w«÷þë+ô³ᥩCêXêa­ ÔõžE«+â|n±`u„e­W‘Ëžv Ä&ë…s^‡þlêé_ÛÖCu=wÖWÔ×SÙùÒHåhe<*tM±.âzÜÐätéà`’|µ³áËè±겿E-â‡o‚ŽZ9•ôѧ›‹ Bw‰WˆQ9tWYàØÔы‚ö‘Ú« ‘6Wã{}鷝"oU•÷´„ˆæd`ÛåâÞ"ÇÿÛÿ-bRKÅ¡ÉLñLJÐ)¿u•éÖPI+I1 'õÀ›(‚«ˆÒÚÿ¢Êø©Nó&6Փ¼]Ã…–Þ͝<Ò5J¯ò4ˆ ö®ŽX¡È¡PæÄԈ€æ:Ü3ϨúÊûäE+âiG±üŠ‚üA2fc)v_#á~†Lz¶EtDŒÔÐÊDn$𔂜‚‡‰î•ZÕN 'L<+q‰Äwk òÊý2èöÍE'ÝnÇ/MBý)%ä^0ÇÀÜ J”F¢zÊQ)) ‰ÞçÂ5¨È”õ3±Éï°¸nޙ[L".S¿¸wùa~ìåo_œفoZ¶r?²Ý³[*yŸºÊøfþƦ‚{paÜaÎèooªÊüü—t2¦ƒÇßL†§šŠªžu‚µµ­Làz“®Äxg¸ç°n+‡/ÔÛÙÕ±¦˜[v"ŠÏF+E.­ãN5d7œq–^„Ó÷Y_ =>á|$ñùÑ·½]Å«+ôRÞ-½Dï³ÀئŒ÷]Ø3 ¤Ø™ñ?¿)©ÉôóD‰}e|#E5>”ŸwçØªÙ_¼³¦_Ÿ’žŸÔ§‹âi½¹ýVWá>_—åOD/ÌDNÓGÞ°?­88ЇÄ0¯CÄ-Äu|ۃbæ½6WßU•÷´„Lvºz¤TÓñâÐä¦zè¾¶ÿ G}‡[O8H šðŸÑ½"†¢a®½+¿E•ú™ÈÐÿuÜzY¢ºŠQ ìŒ|Ì[Ôàíë¨^~sΠJº¥Ïë cë+ÿb åÝYRˆA=ÈZ¹ù ¼I˜¨Lvl•ÜJ©²"&:MÈݞwV4šY¸É²A›¡•†¶ª«¸®¡’ïûï,¯…e¥›{kS™ÇÜaûjéI(«Öή•my–Ú.þ¥J Õ¦ðç“G%ùù“òVtë‚Ù[QGÛUκfáÿ8W˜þØnó§¸)®s1sӐܖWÃ^1/,òø®Î§Ne†ƒrY_ oSDõqé/˜^Ÿ):'©lövFp£¬WzŸáÚÕk¯ÎŽî~IÙàh]fœwr—š}JÔº´?)KÕÏïÁÜaÛ­÷ÛTù#M•ðã°à€Ã¯)&!„’a¯¦%;È£Õe~¾ŽW]~zzAþ›¬X;²¿Y?"?:Öéf!Û4ޏî{o¬¯ÏH÷8x\Æñj€äcù•Ô>1SqXB[¶›ê²¿3³gP¹ +ÈB œ¦ˆ\¨Ù½kaÔŇþ¹sÀ·hªÂ’[õY_{H@±ëík§B. +3&Ÿ‡%3èe< &Ü$7Wו„éFöº>}ÕÌÈÁ¸ï²¾–ζ”—!üT8C‚”ZyÙ–• º¼#©HOŽJç}]Ö—Ô }e}ê þÛ#zW„™+ òKC?ð¹r·nðIVLvi&!Qšg (¼+«À¤t™Xk¯N½E؅(`þüîÊú.ý^YÓÔÎÇmìê;È÷}• úÒJ.dÛ«£—î =K3µ•ñ5>_—…:«=1D\ zÔô»̧zÑX‚ý¢Î¢h1ªB¢êõ-•:ì| x¨/g’Êú7ƒ¾-íšÝ™«j¹ÝÆü–Wê§cÝíY€Ì§O7”„énmìT};Sæ‚SÀ¥•hþÒ¹?ˆ˜jÍQ›ì4Þdû·ä9ZÉùM*i;ÁÙiË(~íù˜˜Õ¦ÍYü¼Ù¦÷Ïe½üxíøb⾉\>»M,ìe{Lˆœ\Ñ~tw@û«HÞÏ< Þ>ï8¡Ïê²¾úà:úš‡òŠu rµ•÷kC’™ôË¢NÞ|DŽO[šLŸë‘ioâ·G/ï²¾Œk£¯ûUMe­Îu<Âݺ̽ cë+ïPl‡w¢`£K­Öžº*p x©ð”·‚£W£ÿQ9ÏuŒwsÛÃÍÑüV‡.â*Ú7vWå<_ëž +iƒý}4ëØoUBÞ¤”c¯²ño1o­ÂÂåâ#àt©EÑ}gSE8çp†F ¹tÙ¯Å'xQ~wìÇÁû½?Y÷¸¯¡K@Y_Eýn¯®­åZý +1Y ²¿ Åú”zTçåèMÅ·ßj ÿ-ZÖí§²ž8gzã[Ž÷ 3¯Î§SäÔÐÊÞÜÛw·ÌSe~΢iÆãƒÉ¹®¢”yŠVc-½”àDUé_Å>Ço‰~烀GW¶µ‘Ý”v—^E¬¯†Ò¦Él +ÖW҄!à9Œ¾ž•ý,¸üëŠÊËò¹NbUGë¦ú Qi{Hv’øW5áê[›Zü<<+Y_Ocuå•õõÖæÖOȊ6CcWA˞¬¯¼š!øŒXk`ÜW"Õ­7™ZÕy#;?ŒF+vP+è¥9,¯èeቁeN¹8;®JBJÂü–•Xwv"¦[»Œe}âÐä¦z0ӎ°œÑÀ¡šßXCuyb7MÝ!Y_yC›J™Æ¬÷qom#6¶èeaÔ¿?&êÇèø´eö@¥íÙ_M›—¨6;·ÐÈÁ·Ç¿¶u„e—‡ê,¶IL=VæÕ:µnF—…Šëþ)?œ= cVζ’aükëVÍYˆßÍe7(Z™tNÞÆ¤ÌLokŸ­¥™gP¹Ôþ}P·©%±F; +Ieq-”[š!¢©²¿- þ&Šs@‰ÿÑ2÷™m…¸˜@g_Að0î¬S‹µ}©lð-ë<ߺ«ÐXZÊú,0Î8<ü¯žÍPd ü)²¾Ÿ„ qūԃ8ƒÃgüØCY0Éà:ô¥³‘ݐÜ÷ž#!VcÔS§.p.+¶54«ñU7ËêÇoéfkif†ºÆvyï|¸vЕ©ëæM>BˆM×VWé&!š´Ý³§]'àøÞE¬¯¥J b†í†Ý)žQâÊÔIw½æ{¬]Ù_¨›‹le“&,²ÖV^ŽÈœK TqP^Î~N +#u½lÁûÚB섫)âø“äî…Q‡ãx´9)ž¯ ¤¦¼3UV.‹ë)±Žä»¶t넒L]3¾Ùª:7¨¤ —èU(ð±ÇÔ9–†Ýb¾ŽQ7"Bv¯¤•GMñ‹ dwxTø¶îîÈP´!7¶WßP1Û ÒŒ_ ÚY˜„ë?õ>-4­ŸS85 ò/ÏÈM¦ʊ1ˆ@á `œ•FNÀª°AAMZo&çØ’B†(E•ö¬÷Q…F)p!n.¯dÀAN¶„+ꅾI(µîŽ¥è—₵”IÄ6ÅA{+óòQhYD=m”Ôg\,Ôü]h??†ô\_؂ýýÁûJ…5ŗæù9-' ©¹°¤ g¯£• CC7úÅ;8—5Ԓ𱽥7ˆ˜läì‡rn66 q31P ²¾ïE+á­¡“lјb•š½š ÛZ‘ʇS†íàÜWkUNLJªÝYRïnmOÉ÷]ù¸QÍÌqêùE°³L¶öQñLHq¯ —"FZÕù'#û/¼åŠl¯ãàyv54<‘ý©xn•:á/üfÂ8Á fãßÎÈ÷¿ààpÏwrºŠP4“öÌ5¦Rã[0~!âùx~¤Üoa~†N†V‰ýùäPêÊøNWVQ}pššon#<2ž2/ A¡ðZ9xœþ¶žj>IáE•÷ Û/Ïȱ¦˜´NôvñQðŒðI‹¢à]døÔ-êI…éò²ñ.Å2QräSÍSD‹+â\£ãŠÚÚ 9˜˜™©*«Ëa­¦8%˜“x×öÃû-çqH Ü,©æT¼+Þ÷½6WÃwƒ¢CZ¦ml"÷jYsaFáÃpñ”v°7Ú´ Ccµ¯ÁÀãËY<Œþ¢,¯àÜØq¢ž@ÓP4Tq!ÆAɺXH±þ¦tú8ÇÀõ·wϕòUŸV;~†SŒÁ°fP„ôs1TôµŸ'›+ê|eö͐þ{ZëÔøñW+3ÑiØq‚OdáÝ«Màÿ?›4Þ¸–¨¡Èé}`k<önÖÆ Bt£ þò(ueO78€BÁ)Ú?âèc„ÃÀáÀD¡"Iæ6ÍM濺ÅUV¼Féì¿»V\|«ô쌞§Än¸œôœ#ûõݕ(œº;š')â‹+áí»ÊlJͱAëe<0¡P[áÅ*d'Ÿß‚š~MuùÁæƒõ']Ƚš!bXÒË·ßjɎÈ#UÏH#) ñ°×Ó üB š3ÁþÏ> q%B+[.ö‚:xK€vu´”Çcà[¡*½¡Ïª™êt¼U œ$~"¿MãÛ×P•MŠ—·°'õ}¢-‡…â(*#ЌGê +É;ý49ž’ƒ å›&#õ•>*(íå0LêòJH`ÿÛÛZ”lc,ü¬'Xˆ‡Ô ú~ ³ 0q>A¢h‰À*G½¹´¯Â6Ý´YÈÔÑÊV§ËÄËy>FòҝKiÜU› ñ÷÷X°Ÿ“îÃÀrî+èC‚1C襼I²¿±©Ÿ—‰v'Â>JþNbf>ÜMõÉûjõ$Ç÷=°Ô…³>XW6ƒãó§ é!Ýè£V@[!£ùQ9Õ¦è–b\‰gQ4ï4ÎA~Ñ7Ôë`ì†#˜åâ^)‚sâ ù#ûYXwX×Ö©éÅö=­,ÌPØÚ™ÈÛÛJ€ÆE>;ΑƒSÈÄâ]ÕNÇ:Ø_á¢WVaЍÁZÓ.‰ÌƽÁ¹®[×-Iwýûëj¬üœ/-dóΚ¬Z¸µ< ÿŸ$%PfæºüðÙ`Ë]M»Šú%°¨Âj ¢44ë_G-ÅÛYê À!û› +7ô|±Vgƒq\'=se\üŽn>–ÈilD±aK0:_̲¦˜FÃ}Sчqw:ÝÅÕÏH)êòíë¨m*&Ãÿq¯í²pnø:©ëÒÌÃçcà_ÛUÆöºöT“âÀ¸­:äû·jÉ×*(Œ…8xjÝ¢~¯.™tF^-ær˜/™ô¡ÉHN–’¶±Ã…3qï©f!Õóçj¹NÍldÿ’C¶! ¬;ëjµ¶³ÿ¦hÑËBÅ7ŸÜúxü?ݐüôrð©Æð]•ù>Š;|n¼#ÚBD@ókhdÅ-31¯­*gG¯hsöÓ==ÆÛï-XŒl鿢zÿ6e4OQC€QÝBZe^ZSçdà‡Î¦ÉKê¢äÞ-í˜X6T떶µ Óå +=ŠÌc_[#ừF{¬Z3d w£6ŠöŽö0XSB«âEFž ØGþP]†y8W42ž³:öµ~AL1C4øõŒ zÁ^•–&-í¢hgW;–¬™öAÚçã_©`[cn©òçÝ­KÌÊ Ú…¼I2ÐÏâ4£ãíëÐxûâ\ÈAûŽiWÁ‡W64jlO= ç#»÷öŠõÔ2…Ò¤ÿz)¢› 6Ùo!í'ß÷Ù1ÙF-1çÅåj¼ŒÔù=/çΪËÃtÙm©,Ãjázž¶†^ ÅrÞÔjb'ª9Zy¨¢½?§Ïì}ydÖ? +óq°MÛ5]ɵçÊý(4 Ò#ïþZ½öÍ,)%‘b6. Ùº¯áråe³ý,¯£®ÌN>®/ùœ}_&Ý?ÝYR²bÁ>àF'¯Îž´dÇdéE³e~o©ŸË¾¶ªÚWĞ›+æÂ‰A¤Gø‰÷»£™Š¯Å:Úxjûü~ Šävà?e•ð+h|mZo O«¥šs¾ß}µµ\êzV挶ö[¶kŽ® +¤q—ÖßG°Íuäk¼}ï¬ý‰Ÿÿ,¯ëifá]؁‡yd?Ÿ ͅ/OÖ6WþÍ÷–¬üFYýÕ wå} ÿ108W-Yîðð¹ÜÚ× WNOý¬¯Ä@ó+h|zÚy¨Ñ“û:º6Փ«f Í)&!—èd·ßl8&¥µSß(dl¯ÿí•õ¼Wû}ö¹¸×ÈðަÊûα,E֖Œ6W͕ò#ûp𑽮|ÌT äwfZþ'ÄŽ<ÓdÿçôC4Ÿ‡ášû4úúšnÓ¿ï«§×û +MN·;íÓëÿªL-§k?Ÿ•ÿTÎûOUþ°¶Ÿ_|Eõ–øÖÍM>L­•ÏÁYÿÃð¨[½AèAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+Eïp¶·ú¬x>0—Èð‡ƒxC%õÀd`©²1àÈ@+j¸«b­¶ ®Å-ÚÛMMµµ[nÖ;-–Ùd’Hän7%–I$r8Ûn6ß6Û|Ûm¾çͶßwwwww>îî}ÝÝÝÜù·Ïœ’[¶¶É?ÿ~ýÝÍó}#‘Úå–If²í­úÓQUn-»j–×%qiv¥¨¸ºÚ¨°]„ x2ÂÉa`FÂ1àà<ÂÉ d# MàHñ<#À²WÇýOÖÉ/iuï +ýæg’àùÇòûÿñþK€ÿæ÷¾ï_HûûÆ}ßàøî/‰ûÌ·#è¿@蜗§à|Ÿ˜ú¿õ²³ ûo/ãxŽË ~€Ëò|›ã>ãÉú¯ÿ}Ï-ö_Hò’Ÿaö¼/ÖùÆ"ËùÀÿ÷/ê¸1ô=ñ–Èp~ƒIæ7ê=û}¤ÿƒËLùO#ÁxÔYbã=6ü>€çúWoW踹n þl¬Å(÷ß+“û?!À}F÷¾ï_‹Ãy_Üë7-I5™Q ™Ìò¾ƒ‚›ûÿý²¿I¿}ôÿÞù ê·½÷zô<&ùñu +å¢Þw[I+É©>‰ÉùýúúvWʺý¿ã·½÷zõ<Q7šÆ*§eª§eê&åqàÊm>bnc!ØvnÿtÙ~Çc±¼7]¤aÙrò9>kÏø¶W +¼oœw×í쯥–¦Óæj§³©4Ùz©Ùh¶\g3•:™ZNl¾)O”K4Xi^C®êL¶‹+æêÔÄÑdž¬ê}·RoOQ¨–äõ3¡“9`I:<¼¦×#)‰—”Æ”<S¯äEe$¹þVwå6Йœ}cè~SHs“20ãÏX9Ô%f‘4ã6rLÑ7´­˜1³N38Òl}쩜æ 9Ûx?B²›Z+´¤ø´’ogª>Ûè·m%HûÂúÁÔ.¢[Õè²Ü`ò5,¯þM•þG•óÉéæ”Tͧ¨Ó¨ªÔ—Å=9I©ôÖUtÔÓV4º[*AdH>  ©´¶U:„ÔÚB¥ž—E–*-3/‘á»+úýBªÊ£·íÉ7å,Ri,ê§-ë¨n,(í«¨mì(î6¢®RÒ²M&&RŠ0x­%­m,`¦ëcÎ8ØÛ)–·UšÇ-«µVõô[x3ªq*R¢Ã¤”©2K:Ê saЕ*(Üx‘ë¨ò… +“ÊÖ畣È呵¥(‘ ڛD´V¨ÎžqS…TmcH–ø2â0è£Àñfˆõ½Ì© +0 RÊS­ÕE‰ºÇΞ¤QFѹi¶†EDMÙýíó´rjE¾Æ<ï…ôÙ#)RçÓ´|‰é&?Ж§EQ(G¦jlhãý ÛFÖýµnªÍ,éxPh9ävY_ÿý•ü‡5èÖYSûP¼{l)4Uy¤šl®/WÎ?_e}ªÉN ÓÕNö½N×¹¾gÓWÒiU§¦í*×÷ +SRöUùEGU [gSÜyܲê*vÚÍ- ~D”¢£¢£Ê+Õé'Äîh®ã:wYSÍgºN¬g ,¯÷6Wȵ«žªœÎ{K+ñ¶Wñû<ÚÔìúÖqõ„Ç-ÃÖÐó~-•ž×ÏgáڗÛÙ_Tž™_o4u6„Ö¨¨]iUð(¯ô} ¨¨£«]/]÷ØY_Wû–eÅ&“)×uÿ‡“e|¿µÚȚ|çeÙ'7S”[ü›D¿‹Gª*þfÈ/¬¬m•æÑ_›f`֔£hBtv +m,¯ü+öUsùÓl¯ò\Gke|ýl¹žö>á:—O*,‘ý=5ö•JSRÜX¤UüÞÕI©UŸ{³Å·’¢¢£SœH€•ÿeIYA2“M•™åøž·P¯2Øíœ3WØ{„êPX–úx沬}Ô²ûT¿¿gÔ¨aý+ÿo響®ÊúI¬ÐòD,¯ö[ÁöˬÞ7\í²×m—:jµ•ÅvÞýT{+ýo¡’Ðå¸Ý\Kìk+ý¸N¨›–%¾‡ž"Û:•Ié‹â¯åQ[‹ŸÃEE•ðÊÿϲ¿xýÂ,s›³5Ÿ­ç›¯³Þl¯ñ÷ƒæë2skXÉRyÊÅͯ\êÓÜ'Os|¸±-þ•ÀÓôgK§m\@ +ý•ûØ.£XãØkõú÷mn=+ý\üÆ>ð~ZS…aqc±ëÿ½g;­« Ï•ÿæP¬h€6Wà•ÿue|ßÍØZnýÁþ>ð}qßv?•ý«‰{»ë 6WýŸ­§Gd, +à•ÿØÞÀs"Ç#«›Ç‹e*Yéz}Fg=µÙ_ö–WËùãv8ý‰Aö½p òýGäG¬Ÿ?£KÿÏYJ¥5*=&×uÀ +Y!~? +6ö}.?Ù¤Ô¢ÊøeÝÙ_„ÿÊýÓ+mæð»Ù_ŸÓëØ[×û¹G¤Ëo8ݔԦâGGݎªÿ¾;ҋJ¥^Ë@†Ãíì±ÕÁj w‹íÖþ¸¥ö©KY²x³À²¾Y_öÖWîñ,¯î·ƒñøWÿye|¿º×XÓê7†>)µÅ}?£E•dXfS³¿7þÛ+ôpœâÒôoÝÿ\Mûý6Wè÷%’vXBÊøeÛY_nÂÍÓU¯®Gō½d}Ò^/£®UcIW?Çã·þâÊùt=AS=3»ëCéªÐóHÝ|£b^C[=ÕRûZµ¦âWËíª×Z%,e֕D/´Kâ–FD䜌|¾6U§¨5›üiLу”5 ‘—J¸ÔÃ~Î%³RƐMV,µ­Xj•Th° 8ÚáÕE·k-¶Õ}µa}Åøž³"·«²?&M5«*¢¯)©Nm6zmƒQOª]nS½WMRêÏG¡5¶¸•âÕ, FøÈÊ-~Un•…¹µèºÏq8–t´K‹µª_pQê•Vµ+m7TÏáˆÓ<]eaT%–•}dލ¾ôl©Ù)®GÚ!} £ïâÞ“‚ҀϏÈŀ +ý•ø¶'ñ7J*OÆ­±wiªÓÒ÷ûÁù»¯°Ö/'E-5•• V§nÂÕÍÊ·×¼l¸‡ÎY¿usÝ̍KâŒ2øY|_;lùÛHùÎÚ¿vÚ< ±Œ9fQˆ™£ ÐcüP]½o¤mQ—€|¤x²ãÌcЖ…4Tóë÷M ":fz Râ%‘æƒ`9dýÓ#çYÆ«M‹G£À"à=(ÓÎYXLŠ*lÓ¶n˜Bl.0_Q#eî_Ÿ@1æ„Q‡Å)(©F|Ô8² )„ƒÔ> j ‚ÒÝú!…+}{Òµãø‡›©„;»ë·¥‡tæÆÍ^Á0|‰ñ _F!ìð;q™S;èOV‹ªuìð‡ÒM÷½ž½‘xþ>•Q¡Í´ãjö·Ðœÿú„‡xúò ··LËíYYùà ìÐTY_÷œç}Qýpž/¤­ïø ÿ[î¦9nƖjÖÑ쥾‰ö5z/$ÛÛ·¦±·'ÊæñùeäùVľÃóg‡y‰å+‹å÷ ñy‰ßìò÷÷×rchóC“@!Ÿ°ÖÓËúú‰ç¹ÑMeKqi†'ŠÀU¾Nށßôa̼Ӂ}f?usf–p~DY_÷¿Ÿ£–¸bì¯üp‹î·=ͪ'%ä쪢_A‡ºò56Àr÷ÆN×b‹KèÛ/_dŒò=î5’>žÆ1F6Ö7¿CbU‡Cðª¢2…EQ²ûŤ†Ñ!🢼C½ÏÒøû"ø}]Lmï-6îãîÌCâÙ\Ù}I÷ýÛÒûM¨Ä푤Êÿ¿ü ýe•7ƒîäÿ^@w¸ÞqÐïDz¾~Á|û¯4h†Ù&î¬Xޛe ƒ²t5„Ë/ánŸ ¾roIäoK¾Éû¶WN—›Ò‰›Ò”҈:rİÍéKœ²xoJÎÉã’Í3(KÃz`–/\0~oKpoIüýÝË×% díËB‘:jˆcÓBMvéƒÂ‰9(KR"Y4Ðé‘ç"Œé½,‰ý/Ñòñh«÷ŒÝ9gÑPOQé¡C#D˜¢ŒPƒË,QDîýão}j³õÄo˜»]àþÞÔuì“C¶Ðxeõl¯ÒÖÐç¼K+úýB§gÜԛ°YÏ¡,î»JE²¿ nŒ÷D­˜)­_qW¹Ÿâ¸æ4ÞßNÞ¯w#ãË=P®á,Š»q ]l—m·«aoZùÓ_›eˆûCk¿³²©ÆëÀ +ý×¥ÜqÐëjíUm~“K”Îòޗò¾í³ Mú Q»4ÙÝ3¼%¾¿ø^’·ûf‡®Yï,j¬¸J‹›K!ÖéH]mY×Y\,öãG½¤m…ÅaS7Ž›y¿Óze×­\®³ÐsC³†øeÛÙ_eq\Õm“5Uí',ێIÜ©2JÊ Š='5ßð¯ôsºÝY»tÿ§TSMË·N‘¬±`_ÂX·ÜW+SãXºWì,|°¸¬#±²GûBëzÅÖµŒÕ§…Ôoq{ÑîÝ/‡Ñ +7.Û/¢ÑŽÌñ•ÿqÇoÏÚ¡è9ø¿v²·ÛÙ_¸‹ÇoòÞ +ÿÆîXS×Þþ¦v_þ»[ünðYbÜÝ\÷VH1wvʺ½•:ß˟VÚì­ «SV±NE’ºøÜ ~ûò#çó“#³<@eÝÙ_Áü¡5KÌíëèø¯ÿ¿²¿ÏúïZnÉ þÏÇzª=vùÇ;­7 +ü՟…4ý·£ÛlÆÛ¸²¾².îñ/}¼4[ÓzWΗf榱ÛuÐÅ·_a¾AtÖGcGðWû›+÷L®7_«Ñ$ÐÑhò˜ß¯û‹+æü£9=DžÇ@=Gm|̇ ¨—È5]fŽÆÛ¦÷ wð‡™v>Ë ëv*ì;­Ü2ÞÿwÇÙÙ_qsq¼à8½r¾ÛK+Éî•þÿñ_ûTrüì}àúYéz™ÉižòÊù»8>+²ö½‘øJ7Wªæß»k®ÖÄÖêïõ˜×ðÇëÆóIpå˲ ތ–X +›½¦•ã÷·Lê'³ãȰ²¿á~>፾ßõñe6uS²ôڌ×{é_÷žàÃyØ{GK+É2ScìöYo¢C,Œ\Œ(.îW'rߕe}Šº÷ÎڍàÎçè&íê¥Z“ö^gE€•ÿ ñõýÞð~¾CªÑs=ݕó{ƒ ^C3êûnÆ \¿S;1õþ»[ݖگï Åõ˜Ï±U[úÛ¿)â¡eÂU¾•÷n tmýÁ=õÝÛ÷I&å¦G',¯÷ÿ§ºjµ§¹hµ•ÅnçÜ¥žÛl¯å¹Cv‹(ì¿0ê}Á‡Ye•Rdˆìʋ¬ÕÉÎòøøl.œ.d®¿çðÏeë´Õ×:l®÷üxW?yP =qnšŸœÊzqä@Y_ý>(¿Óþ»ÈŽ`ÿA Écö…UÔKä[×Éý8ýš»+ûÇûŽÃsî ;ÝÄô¾G†I5*ú闬絺íeüKøCÒÈìöX­Ù[2^™šÛJëÈb½;%– VØ0UZÁ‚cdWX³Y`Áq  KzbγYÍq±‹(PÆ*ëŠ*Åey k, fñueÑDH¦† l­¯4¸°¤{‡²\h{—ÖØ"IJ+Ó/))q¥b‡˜64Z QR†ÁšÓLQckSQvííãïgk[æs +>ã”̏ ûqr®¦vdv×Þ,¯üÏڗìhgfyM¿ùþw•ô³· ™Éq3çí3Ò~ÁÿS·í î{h„Êò +S$×kbsÚíY½w üƒãyvò 7pÁuû‚Ã6 ¨PB„ê°ÜÝÆøÀzÚ »<<шq{ÃÅo Ý]ù±@ »sóXP.‹ÑXK(x“{·íϔ4§H&Á<¬ñ©³F”ÊJriZ R à‘Í"?º‹M(E¡åTzþ&®þãߗÅ»ž`ÃxýEe‹/Ç +€•ÿroô{þùÇxÿuÌíëèi´ù‰ž¿»¬Ž7ï£úýy»jfxž=Z™ŽQÍʳÙeÖD¿…ßsq½§:W7â·[,hw¯â_Eóى|þþñôCäoï_ô'fóñÚØ7âÁwÐ0 +A¼{ðªÂp!Á(ª>$tÐbž¡<4&íÔ3ã׀éUᦄCãÏÎÊJkÀ½WˆoŅ •4šy °ÍP®Ý"ƒ^ÂzŠ=A¤Ë2t?{ví*) Qˆ²á⥍ôû(øO ¢‹ç蒣âè®4îÅw‘Å›(?D<ªãx¬¤ˆÎ£/‹Î;Ñ ‘1¡#P¸ò’£èÜÚ"5W>·áþ߸$|ÍbŠ›ò+`Wþ'9߯¤Ñö?⩎š­ï}Á‡[þk ¡,éysŠDÃðøïIykŸòak+•¶M(Ar±1c\–Ôñq–&l¾Í¡c-NÕr‚à ²Œ—Ù1U`íºóٞ~õË4D™¬LP“D£Jñ(cEñce†ŒHíJ€,±fQ…ê#Æía… !¤Y•;Så2¢ŠTš»„”³­ ŠîŠƒH–d™MF„ €zºZE*m…@Ùª¯=KÁÑqèdh­¡æ$f]OA°f…U要š…10´4ÄÂÑ©ãËÜ®²*0х´XÚ³LNÛ,?ä ð[±¶(3%5×*ìdLXUQ3V¬Ë\¥1/´hºÍ¢ÄȟQ |í§ÂçzîUÐhGù©ÀeùÿÊÿç³ý—øªN/¸Z깃pKrœ5‡™rÕw¬çµÜî»þïÁà!6•“©g¥äS²ÆÀŸÎÉËÔÎfêg%ªçæ $Þjº“CU=/G¤Êi³|“V‘d­œWV‘%tp)æåk(sô³™È´ +[CŸI¦Ë# &£3Z“C&QA©é(ރH–vDj ‰¦Zê-6£5YA3Ò̳²ÑôW"w®¢æÊ™ÈËãFʨ–’RMeêÒs…5£ØÜTjs›*1G«ŸÎÖPL(­~ýŝdö;ÈӞ+U‡O1º(<‰?1U?ž/‹%v¥Ã:Ú¯ Ðå<üeŲ¿Æ×oæ3`“I`“K_I£ëŠê-—5Çû]BÉÿ?×jâcvÅKø6Ye8ZÚ=äF÷ Q/OùŽ/kíýú++öU:}ßú–܏õ0êNú˜]›+˜Èòšû +]\üǯ‘5S®s—ê§xMLær¦rZ›O—Œ“M•ë*BIÌÝ,Ö_´ ÕS™Ê-5[ªÏo4W‹I¦Ëvº + ÕÏ̤šÌeùOGÉpøº §Ôf)õ§ú\,ô¹Pi:»aq[àÙYwtÊà ·@ +ÿœy>/뼗õ9>?Ï|]BȲ¿¯×ëÔ%žýÞ!ŸAÎd×ÛÖó§ádq;Íá\(.¬ª&ºŸ<Zm>`E¢Éç%8RÑt·+é(ô™Mܔõ5=Փ½L©K'±ù+¹’©4¹NÂÄQF#ÿ©ÛvTí­QÃÑ_À(t<̶G†Ìr|˜â±s¥¤ò¢X¹z-OLýý•ûØO—ÜWÎg²CµGxþÈáY_û®7ë<çöŸP±ì¯ì6«í~OÒ™åøšôškûè<î¶'wÌ,¡Av¢«Q×yå$ÓeMºÆÓæ5\ç.~Ù¢‰šÉp´Z.f>ÄöH3Éë7»—éÍ»•ª¡ÏŸÏ÷5ü¥,Ö]$æn«ØYªê6{ý™E¢É£vÑ Éñ}^Ë×iE{ë+𷮤ҳò8í ÆÃ2Y/Ãó3¼Ó²¹ÀPïü?©øÿô»è²¿°Øl$öÙ©ýîÓY_RÆâ¿þ·WÓþd‡ÖrÝǎ¶afÑjf˓´\Ã+F«“¶`¡5– ×Ù8af፛rÈ®N坫e©Ëªû',­Z,±ªž˜™Éq̇ I5˜]iPlêóB[× P_•Éœ³¶lµ1¤¢È”âa:2—L­.["È`¡8´©‚â•”ŽRiPbÚ°Po]XŠI Š A-$®Nm3ž6j®¸ÚXkZ ^œ¥ m"тÍ}h}3Y^ZV%+/‘ô¼æWÔZÖNâRÛ$MÀusoEe§fæ¯m&5o[b_ íà½kïxSÕÊlt9aúoˆÔ3ŸÄLù¿§eÑhÿ/øÿó(²¿{Þ7nÀ‘Ý=ù,þ~¶Úía¿GÃý µòø‚ê¶o\-zÝa¾(Àn®.…©xÙZ3±ð$Õ³ó¹ìŽo!ÂOóy+‹ +ǖaÁ£c?›³Ì_?L(g[/²±¥ÑÌòüVƒ)éìi´®nn0ìaB_Ý/°…¹°¶±8j1t¹ñIRláaÙ׍d ea¾-—µ½º¾Ž°,ÛÚRij‡ds¢½¥ždiœ¨a­2*->êtq_ªÓJò9ž[„æò|Z”ÔŽnmú[:èÔD{?gµM;Ów;¾Mä¾âÃG™ä%G9£ñ?ëÏøÜלô™ÿ5üg Ÿó=Ô§ÅËpYYOCòtÿK§•þ®!¶’k4ö鑿Wð7ãõP»ŸÓp^´“e”±Ÿ¹aƒdŒþ¦álQ_]/FÄ1ºû*Y¬ÌÎKˆÒæ¸õIémv1GÇ²³¨²ÄkË6s¢äl°Ÿ8‹²³5–ᑈL.ªm·þÒ7%²K3r׬·G$¶9nsvË®–i+li$“I4’I$Ói&ÒI$„M$ÒI$€À{Þ÷½ïçƒÞÁàÀ›}?ÿÿþ{ÈòI¨Ü‘Ç×vw]ÑÙ£‘ì¤zÇ4çl®èç>¯i£™é-mÙ×9fÚiµ³NëÛ»ní׺|:K¦íô^Û»|Wºoƒ^é¶Ý·Ë¶îÝÓvøníðMc¶ÎÎ7–=Ëõ]µ²ûÎHåØH!q‘Yáz&$€± N*?º4˜!{®£.,…¼@Î]àÉ­b- +ÒCàêJ¤°‰õÓÔQ?¶íXµfœ6“òÐVIÐð‘¿â$b7êå(‹…WŠloní¯îí{ªv:ŠÔ†}zE÷®Êh—Ÿæú¾|oÛÓOHàß\—jC]wH±^)°·°©ÅÿæŠÿú @âȤ ÿèËBN£Hìƒ&½©§c# 3ºïmT$+e€}Vdèá#rZ þµUrM q¸³J­¾”f–¾Ù·²ª·TÃWîìi1Åp Õ^¹I—Áò +ÞåÀckàp¯‡$¸f†gƒ ^-bÒµG…Ç 8¦Î®öæÉ%!ÇÖ½œ¬3M4Î4õr~5FsÖ¹[X¸ö¦Ò®òæÌË[3òšµk¥6E}wQªû0ë× ËrpŽF<,]Ò,E\¤—v¤ÿîÊmknmS’ ñÜÛù+ÇXWŽÍ1>;‹4Äèeà:):2­2ܟvƲ í͑;*à­0§€òáB¿Ê›B½B·-¥a”ÊöåÃód ­3L.Vñ6É;Ä¿ZͲW»ÅŒ‘±T.6cAS4c#ò­³X«}ຶ®W»‹DêVkxZ’rá²[Å6 +¡%j¸ gŒÎ à½SczUÑ?l¡"ZyËU 1 7 ‡FqÌ͸g/‹Ù¥p®îáA”VÞ閆¶²­”†tn È>4¯9}woê°o¾;Syo{wlHÁ½¸ÂÀRoÅzL¼2»Moð¦¤-»Í³Ç†f>†žÎ +ÝÚ«¼Lýï +̼—û»ÁÂâÖ¼ôÜkßʭ¶lµÒPnUõT¿ÉõWýú,F?ŠØ +eOK2ùˆï3ãÁ_{ ïní½¼÷±DÄÉðon +¾Ã»ž&¨?'âî(­ â‹#¶£™‹þG©)áeð\ނ¤døŒ ß}­üݳó8W€d•ååµÿã¶9§fbŠûV[# ~ȇwb­H°ÂîæK#Ôü¦¥ÎþõNÊv>ûn÷¼g*R+Ü#sywmT†‚1ô}|0áƒ[ý•¼5Õ½©À¼üÜ"3ýV~Jüªm‡ù[®Û…}ïý¿ +ìì*è%â;VeÐ>wÝÉÜ[ã=jCåQd|f£È8Şʟí.••)Ò ‡ye€7 ÿicYó`ûßö8{¸­O_ï¼T Ò Ù+ûYqb ü׫ÃRí¿ŸÊ°ØZöãÇù5^þo_¼«åŠ3~%;ŠI¸Wv ðH'Û:¤Ôsõͽ‡qjCvÈÓá7_Øè`JsöêÓÝ$ŠÐDb²ï%7Z÷Þ$“ñ"qNr-÷ÇÁ•«{Dç"ÞÃÁ Ÿa´¯,ëÍ{Cnˆ§¶Zz +IØÿbÏǟ £¢¦Ž¥œÃù£© úy>í$äiéèãóQehq„‚tÂv 4ôqÙòuXÚ9déèd)¨#Éü’ù‘VQœü§ËÛäþOânŠ9èÓô28*V÷¤*Gq¢‰ùÈÓóq¥x ó±"¦Ç&²Šñ“çch'ã) „óñ¨($PG’ ÷IŠ4ª¼+W¸ŒüŸ'¤ï¢cÁq™yÍsC(‚†E ‘ZÝ ‰;ÜÍlŽNå'ÁOG%M?N÷3‹¸›ßtaqÛ×óÎTÒúÞ«÷OMFHÁ7À¸nÛ¶Ï,û%~¶LN[¸ÃM2-²&یüñ/µÃÒ[ ð \ ÀŸýÃIë½=2N º9û|Nӊ{dj'Í$m¯" +˜ Ø2Ô\œn,‚½lfâŒX……æàúŠ·);Ѫ5õœ¸TOcŸšd ‰ +øÜ&$GÀ6+ㄤ#:ÁšÙŸ•~Ô|l{ûIœ+€&6ö;s" +ö|áÿ üÆßB:oCvh'ï~N%éšZ!ÚnAþŠZŠZŠZ¿Ì-¼6ƒ€!:ÿ5Ä<ü´%Ä- ´% Ȫ CtsÔøñö= ¬>Ù/טˆ/ó=&lb‚^¬ûø9?&ÿ?5G/ +^~ pö 5 iÂOMEOɛ& +“ù'Ô:r#‰; L –…*“À˜¢`a>b£¬ÄEYùšP ”&Qëщ¢'xË•êLC§ãp¬¦ùV +Žf*‹‹Â¸Bù4«¤ìÒø8N™@_–r"~Iüé[ôÙ钴b¡QZ1P¨ÍÐVӗ‡áósÌ8VL9 “7Ùp¬˜~¯ŽsÒOò°îêÒLŒ+ï^ xáù·k9ùM;ðrB׿çØê/¯Ÿz>Ë%¸Y+f‚~Bj1êH¹>‚¾ó(7âðjé°jû +9¨Ñ˜)ßõHOãð¯®vçäÍÉÁ•;³î¾L>€’…t´²Neq¸þaÚÏÉ?™%‹ÞtEäèûů+ïpI@„&£_$ ›ãZ^GÛ%´"4©Sl•ööJC~zžMÖÃ?õN0ÿޙЕ‡u6ÝÚt(4LÇÀ_`_USÎö~›O4’“ðó+1%/¬DŽ¥Ùºì@T¦™÷PØi†Êõ°Ï°ôÓUöÐØFÏ¢3IéÙÙ&ø!÷8òÐoI™5”çN_ßÝö=›ÖTPØÖSa8˜mÑÙmÖº>+˜î±Ä7õÍÏWÎ*GØ{ª=[šÏk]ë5»bÜR7œŽ ˆ±Ø\VÞäC5Žò§צּxš5O»FìãbÛ¸²øçQë"¾î'‚QóU“öe9Ø9ߖ ©r$±Iþ(¢£––†r}i×Ð>€FEôPÆöˆà¶à@ðÂê(º˜ÓÕ´e»dWԞÅÎC_™‹xU÷B‚VJý­œæ‘ü fó‚â3l "iӞ2Î›˜ËÎq‘.Áð9(¯ÓNÇFH¼. @ㆪ˜ÔÕè-¬8K‰Ÿ:ÈÎËÌż„WÀðþüýÒR_`_£?_€Ÿ‘u—xí§ +›‚LVZW"ÈéVÜ"¾‡÷Š(†‡!ôtegÚËdûà@œÚp–rD-Mu5ªŠŠ´Sáð?ÿ%}Pxæ.2¬ÍE»´Ðý¼ŒÜ¥díµ‚Jú“ب¯ËC9„WÀðä¯Ñp«ô³‘³1NÁð=ÈxK%d „õ×KìÀ§o€âS·ñz|¦œŒ¯øá¦¦2½B5 OãN¸‹+üþ¢¿ÔŠÈE|ÈÒ!ëkÐä"¿/ë_ëX3ä—¢—‡9ê_·§oìH„eE [\‚´ŠdWáÅü±eÒMʼn+ð;p¶…õy¶Pµ˜’WætÆ71ê_éI_ߑ‰`Ϟ™‰¯îd¯×ˆƒÜ"‚ÅE|Τ0Å;|L•ý4äaȧmôøE|qs”o*"++Ч¨£YÒÎ +3²å_;áð9ƒóQS1NÍS‚€~0ݑT•ýQõ1cÕSM‰Áð9ƒä—=3; øá8ö¶€IaîQ_AZEΖãéè$Å;|M¨¾\•ø¬Ü"¿Q YðgÃ>œ¯îÑ_A\î-åº(¯àWÂ+àMõkêb½Pg"âÇ[Xàr'ʲ¿Â+àw(¯§©:±¨ÅEE+/è$¯ÀäI_ҋQ|íõÜB:9`Ô_€'˜ßN†}|âJþºœ¤Wñ.˜NßÅg×é&…ü~Šý~"+èhdæã^Â+àó ™5¥"¿ƒ~Ž’lNïçñkõ¦àø¹‰¥É_ã5❾¼EÊÿCC&,ð?o½µÊ‘_ øõÿ¨¿ƒà~àJAëì üi+ðŠøô•ýAé‰HGŠøDT££.ð¯ñ_–†rŒ42qü¢Šù!ð? 0¢…N]àþ¯ |LìÀ€9Çàx“ƒâŠþ¾ èá«Kc'ÕõÛŒìº +Iˆ ù߀âNŠ+øõó¾£ð3¬À‘s€-Ûÿ`Ï®#6¼Dñ…?iA_û¢¿¡¡“2~Eµ×‚ëƱ×Îîë%zʨ͉e"ʌٞÐB[çÓ·ðûA2~EàN­ |ÖÒ:ìj!wu’®W.·5nä0'™Û%ŽØêêWþz+è•vÞf Ÿ‰Áð?vp}Ü ë¯ÐE} î–Oc›yü ôWO&½ºAãb}úþØÞ Ûíõ«u²&UûtÒJ¨­’HeÂäµ œRW|æ ÿ±äpÙ€âX3÷är°«¡ßè º\›7-•ß}¾ï ØIl—è\[ë&]W¿ßÜ?_Û;]V¶Ú¡eQ?»¬”ÚTÅlj!WB,_óE|ÎÉþ‰¾ŒŠù̋+ÿ౓ëˆ_µ3Œ]+ÇßôKþL‘”eó9ÆîkHóêbuŒÔðOjj̒Ñ{½²tSVÛj‰9Í­T`BÓý诙يØx?ÀäڋçŽÓUçX3ëhŸú©ÞeÏžèØ¾Ï¢ÞÿXZ`åsnßÅ\]f¦€q®Ÿx¶IpoíòöɺÙ|æÝ4X–7cQ °-èÊf¥¨¿1ñ8>‡Ò‡[§ˆŠÿÅÀýý}+Ɩ3Q˜qç—ùEˆ²˜3m¿w¦~Êì¤z¶#Ï õ“O×öÐ87O—¶NjR¶Z cQ;¼­–Ù$†.Áê´|»+ýcQ~gg|‡"…ƒ>í1“ìšÎ"+ÿŒŸ]" q î¼ó—M¦Ê4s±2Ìܾq»ÐôÏ^£gÕ´"‡5ye€¥öúÕêòÁÍJV»Jeôçª!%ô¸íEøÀýð>£Ô¾‹‡nßµO=ÿzÓù[BkGÓåÛ~ë£aò¼dZ ”Ñ:ýöÊKfЊʾ…ÞÞ¥ÿL—«ËÛT, æw ¤:º˜…Ôf×@ +ÄȜÃGÆ_€õQ_GÄnß瞾DF®‰³¦‰éóÚÒÿ“õȲ•E¬_å3þ‹ª7œØÊuŒ”¯®µs¯·ÖÐ8O·Ö¥IkÙÒ²(žÜUȉ-¯Ôj/Æ(¿€âڋçÎ|¶ ýmúÙÖþ¢;Y•ßù¾Å%RZ>W2ÕÌè¹Í#×A´”Ûµ$޾µ2‹X÷ybíuZÕiJÀœá”ñP?EàÿWà}ŠÁù}Â.ù7Îúâ3zêGm,žÏ*áé2lÜ·d‹BÓ+Ño|‘:fI“Ìiúœ¦ßQ梍ñMd“x7ouív”ûÊÙm²Xî­$BáBqòÆè¶¢ýF:+âŠþîØ3èŽäS·Ïüœ+ÿ)’ÂÝ3ΚS«ÎšèrlÜ¿d‹.,–ÖyÜÕAè6²Û¶zsn¶4Öð8O—¶nWM6GØëçw ¤WJ¾žôåï0dÿŸ_¢øNŠÿ‹8?ó1EüÉ%ý}3΢q‡CœÉ2yŽÑR‘h`åzM÷ÛçœyÝ;ö[nq‰º®bª-eËíõ³Õ僢”Ûû3ûªÉE“ˆaî<•ùÉ_äbÖü8µÀñX3ò î}ÐÎàL¿[_õôï}D†»4éÏäÙü×ò©à}xË3y­;ö[k-»mK*ëcHùržèÞ Û­ÍkM&ê²Sl–;f’]©Š¸ŒÚÚBÔÔþf(¿×ãÓ·Å»~ŽŠþÿ^(¿ëÐ>iåúͼÎ]·î¸–¤ß°FO1¡uôš¸]Øã BW{DP7÷8/w–.W-6'WӜ*Þ4" uÄ[…/ð+èa Á“ú1ƒ'à 5_/¹k .çÝœý|Q[@kWBÕÓÇk3?Äöè±2L~_0Ó÷.{QœÛδ9WÐ@_Ü@`)4]©–è¥+M‘íºi,â!â[Š/ûtFò(¯ä +ðëé5qmÔîýæÀù“ˆo·Ö®÷Iݦg±¢Û¦ò(³JÑ_Y”»æwZ$¯Àñ²¼ÿŸ_˜ˆthž{ÿ¥5ÅçRsuœ{ü»g*péÉwH·8†Õç5pzֶ곎öˆ_/,MàÝ¿à)sR™šÂƒuY'µK½ô­ã¬Œ+ÿ*p~ŠT"¾&Ô_ÿÓ¯?¬£mÒÉ.çÍæ3.^$Çå»´YJE¡Ÿíz‡Î‹Y¨ÜÎ46$‘zµHoîKÉWÓÂ&‹=ål¶Ò¦+ê¶Cå3ëâÔ_8›å_;í³™këhMk·õS[ÝF“&ÝÎô+ü¯¼E”».K$Åö]+_žÐ¹ýæª+ªÞQ9<ÛԕOÁº5}hów^çn‘šÂkUÿšÃöB+æth+à ÁÿñŸÑým#¦–Es:÷ø9vß?“gåú/Ƶ,:ñœoôZÈ]#%!¦êÙ·‹Do÷¶¦ðn߯íÜn*Xëç7Ur{Z¨½––³ÿdWÌï¸9Çà +ÿÞ|ï̼9u§œtòÛ] &{6õé²»ÿ¸.ú'þ¢-mÿÜéd×£×w“퍵‡ ]¨*‹Ypñw\Ùh§bWkUºDìZ—æc·úzš¿âÑkú£›­.4ë÷™f¾g&ÍË-0ržöKk@çÏ­ÅjJqvÏՃäbòËL®}ÇÑ韲Û9M³«QÇëË8£‹«#ìUó{š¹-¢H‚«…ÖH>w*¤¯Ñáà~ý<üˆÅ­ð>;|b‹ÿ€ƒd¾™çZyÇUA¾ÔM°id¶(]mãÒåšùž=bd¹12î~Uÿ%’còùf5¡pôzWì¾ÆKhЊ¦¦SéþþáæíCÅÒ}ý"úyŒŠx¯æ5øX?,³àuÜ"¾°gÂ+ÿݹ캙Æ’/©Ï?åsNœÿHßè2Í~w)¾æ2L¾ei‡Ù°‹L®MËhÝý.ÒSpÒDS’Š'µ5o÷åV!ÞnÔ6Z ÞVËnHìêbv5ÝïIÕlÈ!xEøsÀƒøEü,jå3¾®‰³ª™Þiäö:H­>Š?ž~ÉfÞ}6e˝Ë5ó=71øŒkŠÒÿ“èØ|®ËžÕAèvrۖZW÷+¯×öð +^ï,\mÒ4Ùb¯›Û%ŽîÞ!ÅÄp,5•ØÍEøx?Àú"Ÿñ0dü"¿úŽ.‘ãfº‘ÛXu¿U@Ó©žhꦘ +’ïŒêtP¹üëçAÒ»ÿ.Ùç²­>o×Éjr#G1žqçzs]¶E{n}ݚ…‘DótÞî²WnšC»E}|¶2‡³âJü¨¿Wÿð’øBüSRt[fU¨œbÓËmz‰ v’3Q 7šÏÀe󦖳.<æ`±Ò7óYvÏ-Ûð+áð;׃üÌ7ÀƒàrqEü1“à{ÄWøxÛ>_Çāó>,J=0tä@’¿úù~|àE|© èËÀA„”“((e)§GYà|ƒ?åEó¾Ò°gïoøà2Jü¼€_¯ï¤¯ÐÑJ޽×Àú•ƒõŸ!]æuEÿ¿Ÿ}ùy©~Ñð>²+æN•…3ʱEýª}ìuEþõ‘_Wð<{|¿#;gå1•ÿoœzÙ!€_ó­³óó12ñ.ã«ñð;|Í0]BüÌUàÿÁÀgðÆO€_Ux?œíð=Ãü7¸‰ý~¢' ýYñüúÉ𨿅8>Ö;ßÿpØâ? ÿÚÁ•¥Â±¼~ x©àÿÅù#Oƒàrd¯þFI“ÿËì’Cnë%-P¾´7ƒtf(O9©JÅ]7¶K2J'ð¦æ6•1[ÊÙfëdf¯IâÙxk7lä¥+t×YQððÿnD%^?IÓåb‹øœNÿ~ð\ ÞÝ4{…±5ô U2 Gž)¶&–~¼³3$£×M/ ¥Lõn¸zé{º¹6ÛJvôó5l'Þ7È¡ÜνÞXÀà]-êWÓÌ~~E*”ð× àΗòH'À¯þŠ+û„Ò h¡uÝ>yÜÍ5ùܳ7/šjæsmÜ֕÷)¼Ÿn}¾µ/ +¸¬÷Ö4c 8~3ußW&ÁHù¨ƒÏç[ù¼ËWœÊ³òù†Ÿ¹Î7z ÖI„ë³ùRY×F¯mëç{ù,^Áÿ‡”»è¨å’Ó΢ü¥…ôŸäê‹ÿcJó©†Ñô}v g\9¶šˆÇëÛX õ‘Ñž™§\4Æó]~?çœyÖúÙ¨ð?q‘D÷~•C‰¾gÊw°E|_æ¿MÄßÕеh½Gc„.Ù¦ï@Æ}èÊ"†ö²Tv¾=†ùÜê¨7ٗ/GØñ6ßèwÈâLą½ÒiŠŠùŸ,6Âp|ûÿÄß[Bk2åÎöY–;˜iónUÔ87NŠRŒúW„Yô®ù‡.w²È<û—<ëeJoíÑJoÍl‡â1nqó.˜aNßQ_ü)ÁõÄP(]g—ΟzíeLo톺l"¸^ ›gŸ²~ÈGŸN÷pWG§ÛÚُ‹%~‚†Paõø-•ÿþ QÕM°å>ÛØáìæÒ[toíÍJQNèGÔÌnrl¿Áìø€Ãåè\ â}±õ…ßÂÉ1òÑb~›Ãÿüü[´ÍF\ãw4õoT÷{eÖ%ä¢¿5Ðö˜¤yþ;åÊw›µöWãddMúA‘7à ÁÿÐE]Jí“gó^Ï2¶Ø~͂ÅöúՆºkŠæ¶‘ӏž9,´Ïï×öûÊÙoàÿàZ‹ã¥ð+þ+úym¯+5Ñwûëf‹ +%ﯚ„y]Ÿw—£×MàݱWÎxú§^|€ð€ûϝÿéaõþŽ¦ãæ¢>Ûïß.S´ÙRr3Á<¹Õß碿Ó‹X?øÝ{¯ûtWÉöhY¬(|‰Áþáö:ùßÌÊóü‹Q|I_€:¢ÿüéÁó]­€·…Wfå,é÷u’¿þ¬ 5švûßk“—Ì?dÿqÝã··®Ï£ò­Eú؛øpáS·Ñ?è æ8èg[ý …‰þGS6+ˆàs~£Úç@Kw¢ð,¯üKQ ¡eñ`π_ø]—ÏôñúÎ×&×ÉcY6ë*]—¾É³ïÖÚÚ(}þª2Ûj‰sâ[·æ|ócËC9›öp>ÓíGéçÑþ®…«µé„±i”ë&7»ª¹.M»yª¡ßÿC0|¦îy³àñ‰Ú]øx?ÀWþ•þ¶‰ÿ4çÏ{N•ìyvPƒ?.u,×Ìö¹¼òÂDFÇàY‡\nÒïŕþE¼ú‰‡iÒ½¿Lóé÷)cÇJî¥ôœ¢‡Ñû9ÕØÎÞª7ൣ´»ðWÔÌþ%»~dàûWƒŠ/úúG\ó×§üZÁÏ/¯¡lW*ï#Î9’™_ÏæÛàÙVŽapë—ð!WÀÌòþ| ù߉§ƒð<\ÁÿÆE|ñxE?ùýQˆðAßæ£]þ7~‰tdÑæ:~| ãcàÒ2323Lçgxìç,ÎÏ.sÇÝÝÛlq¶›ÝÀqÜqŽÇ¶––Úp/Z[B€¥¶ÒÛK@:Ü[N +ZÛ@ Z/߁ô(} “&í3&ѓ.“G2>NVNŽ.Îs&‹#¦é¼ZGÆÇxGÎø¶ó¿À'ÀøW±š>“H¾-ázNŠèé##·ÓÀýµ¶÷ÒÝežŸM†‰Ò½_çh¯3©§H8ÝæP:iÏSç1SÞuÏé&}6¢Wãï݄NÄßîæ—“ÓÔ5ηƒðó8?ûÝõ•E÷ów‹?é&¯¾î~^|ö?Ë_édPTùß“+èæ:ow;Ìþ†SÍ_餾G{ üŽ¡·ù4ÊCTÅ ²ý|Òê±~'*ŸŸ_ôÙþ³ï1?_íõ\ÿw…úÏÀ—ó·úl‚ +‡Gfɚ¾ùÞ×Êø0V|—›Ãù?ÂËú/‘s›<ïü® Ÿ×Ré+øýÛ·áêAäõ ¿Q/øúNÇÐIù9Ïø¾­eq¿kø™Ëú +ç¹ë—§Gƒóò?q{¤ û®Çê¾ú?ËtÚ«O+ü]óû/Ÿh¯À}=àþ‹Eü²}~¤ôúl/£Íz_C)æ¾þOÌ@z.ëÏ~,ï]}¡Æu5 Ì÷}:Œzm_wÑÞGÌÔÁÊúƞÁu]Ǽœ!ß܂¿yó·émŸôº¿‹S:•Eë¾ñâüíüN…—ñó2ª¨|ùú?¢Ñk©4pÊAG" +úH§ÇÅìMþbFfQ¢¿ôx2~ËOš+ñü"ŸÎf1È+à?ûš—áê‹ÿ¦’êéÔ-Ϗݓëôý€úsôɕü^žO«¨A_±7øj9DNðøT_üž2H/ñ8È~…3à–¾™Çññyƒÿkí;q?| øFOè+ãàóü?ÿËÖ¹ÎüåÐWÇÆœ÷oSàQ¦¼ü~öÊÿìêèçéuçO€h¯Ú+ñûtOÖPò¾Áþ'Î߸2| +üIðßÄéÐWÇìýƒý翸¢üÑíÄýÓ øñ{B_NZøðΓU÷BËãÅí }țàÁ÷BËããH~ý[åÀ ¯µƒá8?àùʋøúWêRj¾*/è+ãâsÿ3x?u~>Èî€}²¿ª/ôàÿ€l¯íàüxœ[ÔÓÊvÜÖÎ÷¨môàÿ€Q:~֏ƒ8?ù®‡T_íàüx?A_ +pï>+ý-³àWùtNŸ ¯Øê‹þò‰=øx¢ý¼€ò%EýÀgãáö—‡×ÝCo€ùÿ`ÿ{J/ÿð÷°¾>vŠÿk¬¼“UûºÁê¼>ð3üŽN?ÅéÓá¾?Zpöq%¶~¯›!Ù÷À ¯Ä‚¿!¢H/`ý~¡·ö¼Ý`û¶}ð+÷t™žwz˜ù¹¨î©Føðú™ŸÙÖÔlùt2Ã"H »|‘~žî«K˜ýkØÐ¤Ó~¤ü5\ÆÏk¬ØSê/7ƒúÊMåÀxýZßô ¯ëuz4Jœ($ç¤zČZ + +ÿqY7´ÚSUòé<ŸQªþþäúþ²–ö~ât,؟˜ÇÎLc»6ðŠ<)¹>Ìì'ö\þ œu¶~þ¦L[E½»ï÷JzýNªsMœÈès=Ì×wì5r®sÈ£U•ÓkõҚ÷{¾_sèøâ¿èl·öu|Þ}äʌ,Ä5<MMGâ5RŸ¿À,¨_6 +ÿiEÝPêfý­qX»|üHÉý¦ÿ_O©èRü…A=•Ÿ˜äUw—ÏGáõY_I’ÁQÉõÔ²½u,·(¤”ÀÒdyž‚zȆîâKuÔÒðx!ó`®ýyx.ÍíʂÀÁ]Ù9u÷üó×QËzÚN_š›%ÈÀh/ºÄ+»’SÝ^Šixq^/›•÷¾hÅŸ®¤–ð±Ž-ى”þW¯ƒ¤—æe?ÞâŒlÇ{Œ•Á‡ý~®VV{!=?”èÖáÉ9—Ç)<ŸãÁ_ßÛZíuþÖ±(Šª Úf-Q™“Óù™¸ì¶~CõL®‚/‚Fç›Á´¤|;ïÝÍ{L<Êç¤<;³ÑÆÌó~]· ”Î~ž]²™Øèqïâcdb ̆«E—¦ÕûjÜoç3å:T qSúkž;÷ÕëEr뺦ùtåGè2ØÕXà¦w/yX> Lƒ ÃmÍn¿[I¥ƒ£`(Ðe»˜rÛ³«¤Ðe±ÑØEh û8ަªŠÇãñ8|.½­Ï‹Áà[g²¾ÊùÓ«Ý×íé4ùÛËJg#‰áðn ´¢ú9—Qž‚òés’ðy®®ng2øûە»qmiœî±—·¯I7- ø1#A–ÇE3Ù\oB +þ¦ƒ»•í¡43 ûkg¼¯Éã}|h+øü%ö“Mœƒ û}•V›=ÝNæc贓[û=ݽ¥œÌ¤JâÄû.ž 6ƒ÷;mŽ‹7%7/ÛÁaíuÔÜ_gÄÍÉöÈ æ›*­_Þ×5ÃêƏÂß´sR·WWS™xî„ùoc‚¶´³à[Úł¿š’ÄAæÚUÒEÕñÈa¯ó¹˜þ5ÕÕ.£=ð ¯Ïfd8\ Š-wDš’ÃÙØØmöURXž²5ÊÌÈá¸7Ô)‹Ë›·Ãàð&$û8`¯Þë=úWï1ú ’ç;¬eŶþw1 +þW×ï¬w]ö×]’î=t]a^w'ÜA€Û*ª¼‹aðJº=îîº &-ÐÊc°v;®þŸU:üŠ>iok¾×Óêy• ˜v¾£w_·¬¥ÓÞÀ`Çö]=–k‰Ãák53Á_ŽÂ_j('¬ìl2|ݕÂî» š K=ä”JÏÅü8+òkþƦ†Ã¾ÚÉbzÛËS;˜àÜ[fdp±®Tv¨Þîë¬;ý¬Ô¶*9Ýc+÷?s[úPWáÀ›kK-Töf4ø0'oiÞšlíÏ‹U`¾–[ºêM6s™Y~Æû³ÖÑwºún†Í8î!Ùyðø ]ãiW{‚[×o,7» +}.w% ù.Ó¬®Ûlv54›s<$æb:ÚÒÎ鋼8+ò}¯¨ÞWî)è'£X\w_Æãq§"h“c\­}>§ÏþØÕPÇáoÞù> WÕhyÐWû݅=vße{YµlėgÂà[çòÝÌ+ÖÑé&åñq²ÛSöºêhü5ùù¡ÇãñôS2|Ýá:ýYK§®‰¼F€Á?3'Áà[h³rPÁ_”Åz»mý–Ÿ=“½»9hîÆÎÆÃI7+ïà¯Êöø½¬ÿ7 +¡ÂÝV‡3˜Â^Ü­Ô¤IUE??5)±©¡ƒÍ $Ï + +ü̯kèsrQ ¯ï÷»¾†¯š_Øà·–ˆ1Ùtòxž¶6ŠŸ=”öWÛúš;Ÿ¼uü ¯èsyß]WI¥¯çÁ_ƒ×ÞWî óHaðZPÁ_—Æz˛ž,ÞK{ve;oU x`¯ÁãÒçeáÕ=1#Ë_¯S¼œËEö 2üšçA"Á_‚ô]]\Áf{|K/„¸¶´¥ä¬¦ÓÁîå1Ø?}~ <‡XÃ3A„ö›ëí¶Æ[‚~ç‹ìô¹É~…ÄÜm*࿼½ã«ƒ'û¼Žãi­º¹¹âp¸0ÂԂ¿3)ÚÅÖ&E‚¿’ÆzØ<?“]Ɯ–'­»¶âlÛšÚº~ß3#†@ƒ{ÝÍ9+ÿ|&’lޓwzK²nîîîì€HI$€@¶Û`0mƒmƒm¿~ýöz~šö9ϵî»Âº–¥·Ñ-]©jQ.VÛäª\®«Ø7âÔ®Îö-V¥RªÕp9+UWØW +àT½“}ð r|®Ä÷*•¿ôø/»k$nÉ0ñÙ_ƒþò_XÁeËÊ'¤ýL¯Ïö:[zúkUeMu¿4·V3wes®æÀB~öWàÁ½ýíÚÞOï &Wÿ’ ŸGMxØ šíÅYxföU“ÒZ ïÛ4cûñÃZ³Ü¸«*C @Êý”Ì9VV V{†»}ÿ/Jÿ\ý+ý½};/löæÚÉé9¹yÙ_¶ª—?”oÞôô¯ß>°£ìú™_—æ)O€É†Àá´ž— vººY¦ò¾öWÖ«Ë7MVúΓWIC§é¯/Jÿ<×ú×»»³«¯8öh^ÙQŽ2Ví’ @™_ò_YVOI9pß&þÐÖìs²¿AÙép6úì¯ìvÌÆ¸àmycCêe} J®eçºÙù;/s‰ÛœzŸÅ•ô­Ûó’^ÖÖ¶–†Mü&W÷÷¢Y_úˆ4ÏuZáŽ£‰ÓŒœ YÂþÞˆ @e~ +ù˜·O^¼6&¨“+è^õtaÞüUSbk_•àþOÛÜÙ]‘{ôpoÒ~Þ½M'wà‡Â¨ezp @½³¤Ë†ö4’¿ÌÊü´o33çk[H×~ä™_[ð;$íӋJnù½Û­iÔ°&.¬edô•lü¤)@ @í•õ9X-š1ÕÒP{·Ù_—æåâ\4c¶v^’Å.[µeùa_óþÀ€Ìvµh;=/?÷ŠOMßyÄ¯…Kuc9ÑQ¡“~ѓ3 þ ÁÿV3'Óseq»›‰2¿…oU +ÿÈ¿³~ùôô§¹/ÌÌŹÛ×ÓK' &$£?"ø™_ @?úÊû·N8ಥîڝ•ôz3ò.\7ÒùñÛûz©˜ß§Àµýøíý¥7x@œ¬/ø=o©°±I¬¬18Vw’õӆì˜k®ÑÌ;µ•ù¹zÕYkÖª3$^;iI³¥î»sä£Üþ֕«=Ê¿7÷¿_CÙánÔÝÃÒ @‡ö2¾=ÊåivµRe~^7š§+÷úJ1¯,h¹3ö°sýÅëG”–_ÞlM¤Öíÿ|ú^U¥?|Ø êL¯ÍÈóõôóÞ¼ãËø¸¬œÉj¬§ïž@f8a²¾=3篾}ã®?‰÷²¾|ÁþƎWۤø6°¬¯òñ¼Ì{Ë úºJ/­<&ÌÛ4cÀ|Áý 4ŸËÂÙ¢õªD…XQö®ì(X/X"<¿ÌTŠ @?üÊýí"L$Êú: ÿá^µT8ݺ>ƒ?²ð÷OŽf+ÌÃ|õãžÉh*ö È¢Üø'›ÊánÕ4ìŒ-~šs¬ÑŽÛ÷ïݹáâväs땟ˆl¯Žá»QÈ«è;¶WÏ Ïø4zóŒDZ‰š+æÀ„V)Oû÷œ|š ýçå•ó"w Ÿ¡ ÿøo2=V¹w @ý ­]9-Œ¼o3ÅQ›t}*±Jx:V|{(:Wþ^;›}kJ=NÂÅ9X~+ÿJ¶nÙ©´­¤²¹Y°8ZWþvOÛȾ³ÖÓÎZ«+Ç_>!.–J›‘èh'¿\¯1/ï{ânK !U—‡¹öhÛÄ´¯ø*1ªQÂí¾­+ÿ͸¬œÒÎÇ^µVvEì-+þ=æúyù Ö©U—‡aGږ,vä @ @ @ @‡ötQÞÄÙyKÛûÐ^çMu¹å ä!ý#ê³qzÛªÙÒ¶0!ý7ëgWFқ¼Z7?ð1n«wvu[4eOɄÓ Cþl¯ãxÙî/ÞÝÙ6¾ @÷þú5½™éOÏÂÙ¡´ð?ëÜöj&:®x[WÑvJCH CúF–v6’Œrr? MÈô5õ3òy2–âÿÈ©™ð÷¾¬’²ñÜÚÉÙ)þÇI,lZ‹·Ô>n‹IÜ÷ëPþüJä¨ez_÷ãGGÜ÷«g噏çWÐö'úýùT½ÿŒyC‹AìËÆój&:£ÙKòc`“ÞÀ÷fθ¡í{µ³òuƒÜuú)[®éå¾ZÚ Dӝn]ƒmQÁ¿½;óì3Pœú©¨úê½/â?74ƒÓx>AãÓK|ƒóJ!B’¹xÞeTÔqô¦TXš‘çØpª™¨á˼ïÖËüÃǪCÇçŸóƒÂ¦ºÜñÉDŒ›/‹ÄZ«œ;=×üâY¦‡Žˆ9˜!)âÌøëìI 4¾! §¤Ïœb’ Ê® ”ºb;Ó®–E ŽÐŸù8øèD×[ó´9ˆ÷ÉiQáÅ«'¤ÄE…„-¥ð|c˜¥&ñ8TZgˆ¨?EjŠCÁ*CöìySÝ~ˆäTŸíœµ„'¥=Ê©´%2¦f9+ŠðゃijŒƒÌ,)ý‰2‰Ti 9æžáÿGæ}ØyŒÑ+li¬43…TÑèˆÐ&œ‘™Ðu‰C %í FƒB44<Ëøa°²$*˜çTÌ!TÚy˜UO âµ\µƒ=0Òôc—x{¿¨X©—­P¢:: Cøãzid~°òDóåà !$;ZÚO^yx—8?~ýŽÞ½ÕtñíkB}Õð¿ÞcµeáîBɗ’¸YÀéå`G$ø6ÂAà@€=ff-Ñ¥´) J®þöé¼|¬/”¡ …]ØP¼âw·¯§:†˜ú£xS^‚|NxŽtµ^\<åœ*{"þÐsÏ^­U”=NîÖ©—ûCB÷õtsD½ ú`½b¡q*ŠW¦§+J¨í0»° –ô-„Fa¼Ù-ç¢N¼¹2%õ›f¬„³µdÁ O½ÉÌ|—¶"$jhdM|ëg~Ö¢Y“ Ì\7k‘fm…E¦|܏Abœ‘E[ºé®·†W¦=6®Žmu^¾‡²"¾¾¦~Š¡V^‘—.ˆÍQ1ÕüY_›‘è €ýûŽ ñ'HoH‡ï•æa›|ûÙ_‰2Ÿs+ñ(Í Ñ>Í¢Ôè ð¬LÖh'“òå ”}ÏxJÀ¨FâõºJ1—®T À˜³ òe~±Ñø8ͽ\ϧ¨%×èŠ1Š a\Ufã]R…1Måe|LsÎ'j²ðóòoÅ õ´ÔÚBB"ĪúÑôL¯ CüŒ¯ÜÖÎ„ÏØrZž‚´BA“N}qºÙù@‹+Tw‹Ṫ;;"ôìNc]×(ý+4Tvöƒ“®‹waB͆ÁúgVÐXò«å&cùÆÒƒóÒžâ”øíŸ 3—‰pÝ«9ïÓð'áB…¿êhdÍH~cv4w·vG2¥i{ÿöîЅ³ÞÀX8†x×uæåÉD/Á•üÌK“èµYÉ/h/'-ü,o_LÝÒæâ#Ùè}<*ôÓG7¡® 65§Á4K´¦ïññ:„ÊøŠë•æké盹MS3øeìŐÚÉé14Þ>K€ÕLÌk׏.*æ‡c·¬¹^YûD'š?µ•ð6utD$7vƃµîíki-U–f!²-ô÷yà ùM=×üü¯ÃDõ31Èj{Ooϰûý ¯£¬xÚA™oæ^ÌY ĹLѓ»¹8÷–ߑápV馹6'/´$7Ѱð¢2¿S3煸™tº5{ûۆΌ"1u©¡‘«£š|J"þÌD*êÄNö2¾›‘•þ͝!Qvú‚þ¶Wæd9˜ 65 Ó£?j£-½m5{+ñfSíe~±Ò‰Fh0Îқ¼ç…¶½RL +ô¯\­«&ñ¼Ãk2Ý<ÿ"[aÒnGž+`9D[+·àÊþÅS&tÛYî/ôڋæe|úôPUXP?ìe¾{*H”3t÷ÒÑÝ´}Ce|sDÓ½b²¿ Cö2¿¯©žm—D•¹n ¾[«ÌA=J²Ž½ˆ³±8L}q dt!ÀQ|¼'`ÛÃÊòʍ³F3²žÙÕ´¾h1iùÔ܏Bž_å³×œi+.!äìÌ[…ªSNu¸ø›fg^ÙQ…©$¦»z©ž'N ªð)sö²¾‡@»«=Øè„óºqÀ$¹ï>zöá4ÚRnhsÊÊüHßcGځüÿ&§ð+S?"+þ÷ÃûóÚã„Ýåâ\{1d7?"ø-m+„`†Z\ÑՌ¥ð|z ðqñ%Ðßåe~ƒV t4*æäΦGOIÃbè/so_Q 6%B°©¥¾K:^ìN÷2¿mQ,煽õ!­È|NÇ?àÊý/âhÇoå4CæâÝq»r'£ÔÊÿª”PÙ_¢•êD£4g•‡nÙ«(L»ÜVN?|øU®¯Ñßg¹ƒâ¨ƒ^ÍË<ÕìþfWʬTŸIF5¥7yç¸_ µPöºnx[(ÆñšÞöŒ¤Þò²¿0Žö\¯.kÍP±íDïú™_Š¨l¯ˆ<Ž™š%1 L¯ú™_êÆÉ ý`ôLÇó–ªÊW›ˆ{e@IŸ•‰Î¬`áP¸ õ§„ݧ^ övµ¿Ö¬˜¤vf9ìhåTcݎ{ô(]3üėCñSgWG3ä&Çseq»CþŽb—C¥O;2ΫÈzTóîe~^7˜ ~¶žsçÏ@ y £î{ð¡Ë§ ë¨:ÿÛeëöõs#óó5×& ++õsrÓ%l´È¾³2ö~© î{ÆÝ5Ðښe~öʍžæËô4¨O¦†L'ìâ2¿qW5óÃ4-壘›YÃbênG¡»²¸ÿuþ†¾¾÷2¿7#ÏU—†…ÄíÏΪ¼›ûFÍúÙ_²¤í·jÊØÈ°¢í3Ü_C+Óõ2¿ê¥6Wâњ 6´ôÛé{ß Vl/íif#½„ÓŸGFB“½ðnl­U—…-þ>•ýo¨$‹ +â¨svŒ˜Bb~^7š<×N8³µ¬bØY¡ÊÊúøµYZ9¸‰SoòÁ»F_Ýeõ£ê+óüæíW{€Êú,ÞYQÃw)ÓC&ü"ԙŽ„»§íh¨Æ=†$ÖL³t²a¼ÇhÞø %ÜNܛo%»6¦b6±Ñcµ¬4kðb=+þÖ^%ÆÞ¾¤+ÿóר]³Ä*N煱ûzélÎÍ.M„{…£.W—/Ì·©"L@ØÑʾzöŠW©ëe'ÐéÃJݾiÇÄì( IY»FÚÝcÁ<9ÖÓÎ  +Â7 +I„/?JÿéöõH2¿ú4îäw7O?É•óü €&+ÜËÙú¤7·ÔÏɾqÁ¾Œ~n?c.;ê°A' ÷Äú_ÚÓC¼ÞPðoï´ðvWíªe„ K &ªýóãX×~žÛײª¯¶˜¼(ÔϽý4ÏI•ót„BÎȽ]£˜ÕžäïᲿ…%-ÓM Iƒwy4<¤î{óþǕ•ým3±-•óÏïÙJ#ì\oÕÒ¿úèÍ ŠäàvhnLeú7õXñíiûúŠrD²^XQ}¨jˆÊø ÙÐWaEÙlՕ•'l֊œÜo+.‚³Í4Ø@€£’·ïž¤Êü*ÁŠ0jhdЇ$Ž\œ P†Øl¯þúƒŽ5Öh/\¨²¹ •ÿ¥•ükÊóôŸNÊú”ø-”žG}Ïx!Î ³º3+ýž—++îx[›uÖý¡“·¯§1΃?¿e(´³±Ä‚L#Ö4 6ÎÒ³a±¨nÔJ3A†p¿…g8‚Êø•\Ì[§ÏŸX#ídø±pæï¹•ð€\ã8ô¹^Yµ¢Q¾4qÀÚ +„€­Sƒ{q†íÃ+ÌÃ^¹YÙ_‡X;z¹—Nx“¹‰šâvçÝä&Wÿ}AˆIbä ´s/[‡ @‡ñe‰ÞÅX]65ÝpPE¢?GšíêßaG*ºÍ¦¸8èq¯È¯^q)OY;#oW5»³ªvWÓ#Ò° +û ³¥î±ÛÖ7ȵ!m\|NŽªª¹Î°NôgVÔ䟶=fÖ®‘¶ØHÊåaz´þ-]ø÷u“ÒAcœûÚ ïþއ¤o0Bu¼˜0YЌ—Iˆdµg¹pšh''ÐF›Ë÷%ÿWÞ#ñhŒa.Nœp´‘}gáG0÷¡ Á ¥lі5åxäCÍ»'Öªn>í|¸—¢<({౜ jz׺#`“¡AíbFùÉ/ir¼Æ[zöÕ2ÃÊW™ˆõãÈL¯…Gè'À ¾º­Ÿ/áç™_‹!£Ú´c¶ÁzÁ6B_ÂôÇìn×þž+MLÄnÊa;¾4º\NhXµ—‡¸=Hç»:ªÍ3q¼| š "Ç +Ý ¹¶& +°Ù¢|Tz™ñrnxTcÞ&‘ƒ}žVŠk­Ï‡Â„ýãëü+ФӒ#Ö(S<-ªj’ˆG×µ¼–œù1ÃaîÙ"ý•õy˜a)a6ƒþ„øÄ-K–õ/8Ýð6ÞØ>|+Á»„Ož¼lшF8Hy؜™çÎ>|ô(\rP Z8—§}‚O%Û\&è*„"á&9î«§‚PØO{èb5·fÄãdyæØjr¾ÃÚÖz2*º.ßP@cښÄa°±r¼Ã_«œð¶ Ej̓Î>#ôš=l¯›BM9o¾ÌÝ0›@™‘Z2Û­Û§ˆøá3› T½yÇ¿½¸íÏ[ ˜±äø9£{Qæ®ÑÌGäh|i«õÆøÀŸ`žqDe·¯Ÿ7Ä(b Ž(¸ÈC3âBÑ$4Òøí×òG–&ûê°Ô3C· ç€FƬ˜!ñírÕP°ÇÃ+§S? s!êD$=“I¢@‹Ã˜™wsҟœÏüJ9rŒ{¸8¶Ä;1…ˆÌéÃw(ülc…™ú7ãÊ ‹˜jgŠ60ØÔCàafL0-©…p-iž¼x&˜.øL‹V{†É¾à²¿ …Aö4ˆuZáï䄙_k[HLf‚˜À»àÏè—þZQ)ʶ( Y¶¨âmŽ‘ØÂ&ŀ"Qšcõ[·þ! ÌÍW’öųVUô]”]þ&WÅ´à ÌŹCà}ŠÉÃ֝Â? ‚‰ ˜kŠ(ŠTZ¢Ö Øÿ·C׈„(´"\Ì:Λ¼ÏwdJ3=Åþ*©Z>’ˆWö´Èu!9)b=ª ¦‚ •ÿÓx?pGàÊÌ()¶¨–Y¡’¹^d– üû‡qW®³Cò¹yaB¹^ZÅ)Ψ;Û:D¶´Ì‡³•…âG#ËècÞØ›œ o­Ÿ”ÕvŽmÂi³§zÀ±ým5x0ò50´•ª²’ºçà[SˆµÉñR¯ÇŸ“}°³Cå1þ3Ð âÚÕÑK†Â؃†ø¨Þª¢b4ÿ-#rt”cUy¶Õo¨"ZõªB揃Ý_x—I¶)RŸýä¸P‘=nBdDÄòø±¾ËÃÜ5¯*¢_拸!Ĉ!VRžºƒ±v‡!¼Š×”ÓÎÇÕÒQiçíˆÕMGÞ=’|hV(Tq´>Z¤€(%u]<–†„Žaۏ}“hnÍ0ŒÃ× ÒVCʅ§\%ãy[ºº9ºJ1ҝh\)-‰¿kQàu=3êæäȅ­…ÓžùxÞm¥7|ß-W‰¯>\)˜jBDá_C}߁¢8Yܺ¨[㎠ñB£Þè{^蘁T́8ÁŸÓ.¦-(“Nu¯í)u™JT/p“QÈÐ!)‡Fh#/â?s[:ýú ø‘ÌÜo;¬Çϱxroíûq4ˆl¯ùh7'í¨Ç¼Qv—ÍfOk Ÿ-rÏȾ^µP˜!LÏ.gËúëŽ ‡+©¡&àúƓ·»²¸P ‚õ–´þZ>’ˆH횚æíY~…[4bJh @™_ýx ÿù¶°Éð¶öˆ¬¯ùþ=rþæI­üâ._µù7ƒÿߪ˪Êg¹°•âfCÙ^µVú+j…€Ïÿ¨ZSwÑÅê|ø¢ü§¹²¹^þöèñ%º±†·Â%`G40Yyöéðî]Ø»üã—ŸüEõ#†íNÒ6V»F;dŒB wdÊù2¾L¯ÿ—Œøª¦¿Ÿ“~f#f#½ƒv—M„˜ÿWϓˆr™“ÔcÞ<ãâ=–¿ÅW2=ú?’ÝXÌK”Ï^qü<Wì‘øÝ˅Üõc76E§äÖ.k'5´óŒ óQæ¶§—ö6ŠÚÿs+ð¬ ÿðéÍqtsqqï,? ³/ú™_^¹UíùùkÝj͇Ùñ§‡ãHD>mœO~ýóáUñ7Ún¡½F5tMÞéþ ¯šäöûó\ Îwß¿ÔÏÈ?JÂjCÙ^¹\ÜZØì÷ˆÀÇo[—å$ã¡«qzÑ ‚CMûfb\ÿ³â:ڹΰ »Úÿ¹Sr^ÒíÇN¨Ç»6†r=íàÖ<—Ö_Éôÿiä&WÿÞÊý'wáBüåû1 +êe~›Áò£XLG{i‰ÿFYû© C+ÓQx†‹I€ýӞв†Ëɕùt4ß{afƒ·N ?ÂÜÚ2߂ÄjÕYFјœ7ÓÏòBÚá:·üŽUÝÏÿ_ÏBœôtӇ7÷×:ªn?ab”tŠCŒœ Bø’€þ +>ß¼—Æ\ zi“÷uá!iéϹ`)iÄOáôHwý4Ú,]>¿œºtX‡÷© 7%Ð6ž «œŸì~ŒUþŸ_ÿhCO¯ÊõNu¨‚áéõùþÇHÚ}~®nCíl"ª¦£¥¿ãG_ʹÈÊ7N²zM †:D¶•± @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @€¤„€ïFÚ{ýõ°-µZY¶KcÁ–Yo.Þ,–[Í÷Ÿïñíá0€m@4’Ù)lÒËe),±Ù$‘É%²WdnI¶Ûæû¹¸Ûm·ÝϛîîîîæÛo»»»»¹¾m¶å6Æ´¿þç͸܎Gd¤±Û)Km†»P2«A]G“í÷Ùmò)~2øøÚä ØXXFYµEB¶HHHBNjx …–BËd–Þ-½BFWÄ$$%²2Þ-ý@¶K»Kmá@æoÇç3þgϱÍí³Y¹ß¦xÜÞãîsºîg=žÒù³ªç@{c›Ïù·Îl¼J+8ǎÎMøü÷<{úÿ:^{ÈýäÆÛ“ÙÛòsw>!Ëikó<Üú¨±}®rkKæÎø@ìN“Cå>⍷"×ÑÿÚÏÒ}C0ØÐÓ*‹—ÏæÏÀ`Ÿò?øê¶ÿVŠÌ¡¯år[x9žq9,_¿ÏhÀïŽG›ñÕ1?ފýŸ¤äzcCOšÍÎýï8vw`sZma¯¢úôWю¼´Ã,Önw™˜×ÓízuӓìøW¼Ûj7í§@k ãøssþh®#9]{œÖnwÊLu2è“.›ÓK³c¸Õ §Ûjíµ `µÑ†ßR‹ip ~4³zf3º¹ÍW=ü½^U¦¦3»]gâí¦t<3q®ÑeÀ2Í®¯@6zÞâGâà–TK+‘mó ®ûåÙäÜvÓ8°l1E]ñ¯K]1%õ{/•éwÓ¬{¾úeì0“%“4mwصÇÃM¸s¿ÁéRW ¸¸µÅü9íöºÍÔÇ6}€EÔÑ_ó:ݽ…<åŠýª óŒ˜îm_M³°§›®¦Ù×&Âr¾›hº"¶—ªMõtÒÍs“ü¦Åâ,ýÍÿZ5ªŸa·ÔøTWæz+UE²m]J}†€~¹YG4uEƒEiè¹]{ŒÖwsšÍÎòúJÎF·ò8TWù)ØYžv‰dx¢ÏæÑ_³¬¡c;«£šÒeõáçð:ó-·>¿€=˜Þ½t÷Q£>‘ßÑ_NJJj×sIrúZîBîÉÙQ¾)uîkn©¤æçÑqEßæÑ_¤ÙôºÞ‹àVÒ£êúcëøږ4õÚãé=ýþKq 3ÎÑï7®wsÊëÜdfÿ³ p|gEQ‘¼qEßú¨¯èü±E|êQb¥œÔH€ûôWó;¾cž¤Éß*¹žrƒ“Ú¿ÄÎ XõÜ¿K]šÎOoa9Éä]Ñ}÷¹+û‡V1.\ĺt¡ãZžËM¥meÇÂÑ_Ê+àH·Yä0Ý¢¿˜c…ã4Lx\q™ÏÊÑXy »–Ô3ßÑ\âċîÿ8Ÿí¨¯ÞE¸—ÕÂÏÐú¶ë.Ɗýe Dö°Î€WÀ=½þF»ÏòÝ5~_ óúïO~`Ám;ë°3»”@ý~°—E~ö=Ö7W¡hšq4®ÊZ‰é“8?ýc¦Kܲ^ŸsÐÐâþÓ¸Çü$3ƒàûÔWù=´ʉª¨±~-6g?CÚA´ ³ 0=Ýûéq¨¯ÝÍהƒ³©ºiÈRËü*o^ºg0}"½ÖòvV—ª¢¿ã:<gãûÝ`þò>ó8?Ù¯kœ×tqšÓíu]¶lj‘å“};hÁłﭑÀrɃu´s‡m* ½ÖžÅ}«¡qcNé›L—ËÊu7¯\¸Ñ_ÀøvWþݒüê+š&Šß¾Ù_÷.ì`Ü'`Ï«ÅëZ–Õ顏– ²4:ëJÚ*Ìυ¬ð³ƒö•´nY0•˜ã±^òÊ¡x£èáj ëÝ£é› f-³2U´«Ó&Ú&Ï0Ç%•%J¶w¼„ï&'m*1#x¶hº#ë]ݕN$‰dÅ#F*ÓªQ`å•:të)ss,I¡ÚØØéƒ& “Iz¡TWÓ•5áÂlê]ÙÔ$D¸ÕQU¦U§GšÙ°DЬ 2}=±¦F +­ƒ Õ"+îE8xÑoXlSMÅ­C†Tï,ê]4N#Ål_‰=-2¹h¬-ÄÁ$Á‘Z$¬t¬NÞúø¶0#–³ÄôõQ»,Oe­2ãz·Â³^œ'hµ…’½v¨F?"Í>8þÐJвÃÃ6R¦µXc{/‹øZÁÖÿñ óÄM Ô,Ø~„‰‡%&ŠR´WÌ]DM†Èø £Ú+ðøvÿ‹¬ål õ‹£¼þ »~Úº•:$Þ/ʺsiJ¢¹`»äíEù½W>µ ¥êÞÑÖÎ+ß¾³†šD®â]<¼‹t¢D+[¸— +$C¶ +Ùñ–K¶µ„ˆvòí‘g ªX"7"Â,Ñ}˜²®è’¥ÃåË2å +ªœZúY­}µÃVŸ`>DïÈÐ_#Ã÷Ñ`=¼‹s +Z<¬]µP‰*.øs,H!¿vJi¾ÂV.¢ùiBáXÌ«dN+H2ÉRR=Dz#ô‹b½ª.ðߺ@ˆ’eø/U/§Æ'G¨f‹ê§¨Š³ZAEœ8w…têӘwN•Š´ˆ¨dL9¹iVo¢$˜«÷j‘q†ýâ,å @øB°Î#÷i‘°Dè©B$kKëx«ÓGûÉßÇbɶ{×ßeâŒÝ~ ÝcÆà=G»ˆüêV(ˊÃGçä ìo…)ãK-›Ý=j„öÞ°U4婞0Ûv}m¨À¢¿í7ƒþ^ÊáÊ¢¹ÍÏò“VÞʊçŠûté K±´ßë:Ê'm'VkßfÓeä¯þŠÿ±Òç,XmܲaÚÒúî ô޳÷ñºÌ ¡]z­úÌ+åY¢Â]Å^*7x7¸×ö@ÐÅ%À2³äúK¿w^¡Þɍ&îxwßY8±§o]K²Òœt €Ïÿ3XNö:Á‡®ÞëfÕ©2soU;o…œO_CZ9«¸—9R“C“?a·Òc"Ï÷AÄ¶ÊûÀOŒmíÞLl õLJ#àßÞq¡ÿÚ-wg —Ò#ø¯¦œ8 ü> +ÿò[˜™®oÓç y ?#]çýß +ÿþ]-þp~Ò²‹ÃڋëuÝ +ÕùíÝþ5Ää?W!â‰NúL_M|ôþåò) -‘o•‘`— õ~‰öù.Àöt™›çp?³%‘¼'~5÷6+Ӝ%fÃ'x?øyÁõv&Otul\•Ï}šNNf:óèя"%´XI#Ã} ¸)ÑVÞÆ„ú*Ú+ +tUXVȶ… +Ö<4ØDƒk7D賨l6Ù ‘!>IäU­•D³uÖpà½HÕâ.‘ ÛÅD%iî%¬8Õ¢ë>—Dt]ÇpV ‡ÂNŒU‡‚ªº-€^«ã&VE…ªÓ‹ÅIQV†'E¾Vë¸Í¾†'á·W§ÏŸH óôWüÿñð¯û¶llë(›WRp¶œkZº Ôþ¿Ã¢¿©ÐyUªÑUU¢¬b™"%ËË=Ô­`϶«¤µcq¨}iY‰¬=ÿät¶±“ë#|Ir<+Sð¹ÏŽ_I‹i[H}÷ëü^(ìðh¯·•°6W­§k/ápúÚ+þ–g¢ò¿¯3oâC¹u/%…þ&^ü‹÷…ïuC'Ö ÷&âÊß¼?ûœàÌ —|>ŀϲ¿òø£³Ûpdû)\8wYÛëJǶUu|1¥LòÙ+ý,ÏÄëí!I7§Â¾/8D}Žq É­\×÷ÔF¾Qnê¾MÜ3ð¶ü'“&=.×Vuñ£·oúþ(ì÷WîÖíæéÖú@­»~ýõŸ€Ï駃'þ-ý?=ø›Nžúò,½‚÷/_b¬(ó7´Ù­CVµ>%ÇÎ+dF~ký¿á Kš}Æ»Ps'0ŽðÎîy]k~AŸ¡÷ÔWñ8 ýëVþ—r¢µªŸøÙÁünÍÝQ¡[ËÑb²˜²¾ rñ—ÕÉ\¼´©‡Î öÿƒpàZӝˆcý8 ÿ3ÎO÷úÂwuE/%/eÌÿ'a+ FƒÈMê¹÷Íì%íDOi ÿN™uw-ËÖõý ö–U.>%û«V¦ÌFí¶ËæõÓ]>+µb0º¢¿Émûnÿç©39ê×eˆæ*w%dæÆ™µmVK²Ëu¹©ŸÖülàþOdõvž“•§xãç +Ó·-ÖÕG¿ë41 ûÏs’AAï(®Z¹®(öšvmä$÷Œ)2VÀñx¢ýn`ðí7ƒ ~Sd÷äqEþEø6í›WR;[|…p8 þ’¦]ñóƒù¢ø¬ë©p¯îÕE‹%‘}{# ó'n²ýböL[g_ë§t=oW¹¢²vZ‡”K +|žÎJ` EaƒØñÛþðaùhõÕ{æõo[Ö>u`õµU«šçÎ+]¶ªvµ³çˆ¶zˆ..+­\Ö¢Ù4Y¢ãlæµWtxÛº®Djæ±ãz·ëzE³ÄFÜ&Í’¤Jז›§²®é‰[9¯UõPÅJʔÕ%*bEõâ#ÍÑ>¤N ¢ŒDhÚ°zµœ(Výޝ§/#þžÔ;¶t΋gӚv8o9ßõüQ%ò¹Îý½zæö ›§ƒ*û ;}YÁùÝwA󶃯ÇK›gUC»Â½WK`q¸(#ÄÑbï"]ȅyÚ ®ã?¼‘r#?‹¼ˆ*¶H›Œ7p‘f‹¤ˆðV†&ï-Ô«8êñAiMü…¤¤]$&_‚µ„®¯#áˋI²à¸¿’9¢Vǃ3ôØ-qXx¶ÞbH)»÷šÁmõÜ, è÷Òb}/{«WMðûqº€|¿àÏù|Q%îƒ?§5Î>Ë=?åõ›e¸}w{Ɉ6•´lgf»·hv§ž·{i…ƒ'Ï{iîx Ú4­1n|“ú>÷ábÄ]# Á¿»½»ƒƒ#/€Ÿ0é­ÂËòpo“Á¤iáA›Ø·òb¢Á +$tK=f ›È· +Öáep³t„A‘¾¼„¨bgÙ1Qmyv¬áË*€`'“H»ßɇ…€™fþö.n8±°‘1bË*¡˜®†½¼‡Áƒ8|…‘éԘׯlJïäÄO&Ú>>ˆÅ#\ö4˜×<8ÚÜ+þœ›…,£×MÌK™{ñ^¤ãA¹îʉé”xÙn§nã¿°a¶ÚjyÔzÞà“Ë:¯kµ dƸ|ÚwaÑêæ¥€>¿ýz+ý'Q5S?ÔVRlêèæªèú®_M´Ê»°Öì´¾küû3[TPõQ¡[ùíÚ{Nš+ŒKÿùõÁyÁ|ßî†ãUA±èõ}àë4\ËٕQÈ sI³é¨¦´œiO· 1ÝK4}_K½£ñ‡ýOjšs§È½.›Óc\Q4/Ûê1¥^L~µ$z“•„=¸œ`Ûê*h5û~‰Çkz/+I³éFŠþëÙQ\‰Ö«ÛÜ¢¿ÿª+þ;97Ñó¥kÞ¿´þ³Bݓ|wúÚ,Œ›¸vó}ïÜEÇFžÙÆÉíÓKäé6z\˜¯êhœj ;}Oo ãK5Ó<뤺|™º‡ªé1²`+¦ôÔ»Nš]4çy’¡ÓÔîf{Ê(=¬mÀŒ$Ÿêtz¾ƒ™Õh|—Qç|¿­£ßìh¯Ýß-Û#'m­9hì‡þÌñºÖŸ{ž?¶Îq4YÂ_¸™¾»‡ëöY¨¯«4»Ç¢¾®ã#s=”¡ÙyÏe›Jãœlß2ý¶§…C3’b¦œ˜ŸØô}ÇöpŸUVO{a¢Oq7Töy‚óÞqoÀ¢¿"3ôö½}6¡¨{îßýsì÷Q~½ÎMŸ[÷Ú#¹“_oýG)Ŋü ØÉÉbþžp¢öNjc:Ò¦w æTÖ´”·¦+z2¬TG®ÛÌuwalŒEzÒç´öªùÝl [ErtéÑe½»…wÞ+÷2ÈÐĺn‹—6‘_¸EœK–ʸ¦étÝÙÝ8Uöβ‚waÑj´>J{¨Ñ¢ÍyQäF#@t´1̹Ś%4݆J˜•qD¦™ÝÊb¸¸+€ÛéeĹWuJÐî0ä|IõÂÜQÆ6 ãcöL³r©¡SpÍl —‹Q“êhkz‡‘•ƒ×6ˆ†G‚íQŽâ7‡†kO­í›ÕÔnuÝ\Ç9°é9¥û}SË:ˆ˜Øœµš½ŠŸIsÒeû‹5zt¨dxOdȁú›••ÏîSNëæNëñ û‡C¢æ¾Ù}ÇÖ¢¿öŒ_óú<áïïæöž$ØésnšÕ«˜*ÿS‘I/®á&"Ô #J¡‰@ý?s»ÿ¾\Bååjé¤}ñu:O2Æ{]Ö˅ [ï5¾öpí¥]²!0|º¶ÓìÛm¶Üm²Im€B@$…„ì`4 °b—‰Çm­ØÚãv†-¸„ ]1p’ ·q¹m¸Üµn6ÛI4Úm$’^KÉ/$ÒI{ËÉy$—½ï{ÞòI$“i4’I4’M´£nG¿þýåæ¼ÒqH£ƒdâ^¶—[%!™Ô¤Å œ¡X{€¤Òp`.&׉¡ÔÁÝ{®Û‹C®([ð^íÛá×v»»µíwvë·Á¾-»|7á§Ä^:÷]4î6;RöÛºîP×Y/¼å’Kjˆ[ZºW[}ù·Ió¡ÆÕ +¢Üñ¨Q +‡h-Z·HC3¦y¦fãAWf¢9m¡†£ªM·©µH—¡Fm²«NåGÓjŽï£ÞÓxJ¤b›'1¥ÑÀeð™žWËhrøW ©¨g7!>7UÒ)ÁÖºÜe]4îê¨DuSÝmSY‰Ô{6 )CˆïÝyþ'Êq¹‡Ï¤Žîç3™P['v!óùZ'¥+Nǯ뽩¸*ÿúj fŸÿ éÓOLÇAæ3xÿ.û”ä'ÄmR§p‹s´)^!‡OookÚÖ ÷Ï87°lïY”!]tÌíQ)ܳ7_ ª¥ ¸CK§JkíwµãyÁÄÞtûYLÿ/泿(ŸåŠí -ßP‘áÁÔÒºÔÕé·³­}]5x>pêX¦3¹/éKéa—7«·µ~:¾²•XÊ¥b©R*)ÚV¨½URºéQwOx™‘ƒ…ÎrÚ'Ì55:¥"ÚêéTéÝÅÓ¼a*tîT ë6Q“r›,¯ÛUÑÁ+l¦ðïY]ÕX'›ßDÌÚìÕћlò,â¥Ü‹«Tc+úíðR6µf\ÚÁëmQ¹Ûá*Ÿ +’oáQ:w;x/µÞÞñþ­xºg1üæ7ŒÊ·et‰õ¿,•à‡Eº½Dõun£{"VTé¦$aÉPÔÿ/lQðÙì…=#­í;Ó±°«Oÿp«§Ÿ¬¨¡¬§¡OòŸÿY¨ŸGæž}?ÿq1X†yôØí‚6 +WZy閌b«ëuõ”µiìu*m‰°“ê°•š£ WLéæ³Æ¢å™C«•Ô*ÀÏ=üí–Ý™MßÕ»dÞ~h+5 +µõjëSÐ[±®¶ÌÍ»•¹Ûð}M½GTíÿzíG[QCd¥}+ÔQ¶q0ºž ]ô\…S‰(aê-š‹gºí«§Ÿ¯­§ö4Ç"z?Ëãàÿ1™å~ÎV7EYQ¦üZdá_©¨ÕXÖWÖSt•̃q¼"3MYÀº¾§{E»rº»Ô35õ^¶+‘IÃf¦Ê¾¯¬fQ5©¨³RÁ÷»Mï¶fjª©è˜FèλúÝw¼&w!<ÚZ»ÞS%Šê«+ÄP>ßêFM+<›©<©Vojir³ÌZlÏ®ŠíDó/Qb‰å泬fT±J¤ØN­$ÿ½Þ÷LÊ'³^½(·3’‹òg´ƒ Ê̇˜’Š€²°­ÞÈ7»˜[Kßä)\_éЁµ°‚¿M–®¬¥õ¨F» dèfTE¯ÒÁ_×ÖÓjÔ±¨ÎÓ{Ý365߁‹©¬Ô+<ўË0?ó>qÄܕ†§ÝØ~R;üê¯Í¦ UŸ¬W)Úï~‹…~©—3’š ®)‡ãy“ûíæu.>B#=UMCÙS' h¦æTî¥*|WçU‡¯O_ì úö‘Ÿ{<ÑÒÐIÅ?æ‹"$|þ–GÉèù¼S™©/mL‘qìzA~µ\¯æ¢¾Š>éÛo}GM]_éª:•}u[¦²Ú,Æ%óü>¿‚@øYÍÒÑ7±)“ 7©ÒO´ƒÌ•ò __ÉsŒ"ÑÖÏ}œËƒg,¹ùçΎ» ¤–GË>+CÌÔÒϖÚZ{! Ç&À¡„Ïä?dasœªÇÜzaOlèY7¼‹Æ7r鯡«Ç&Â'ºÂ¨ãáóØõÜº®†éó+ùUÐô#"õÜ©ùÇä³å|Ñ|ß}è<¯ÙÐÎÎQ:› eî‘e„ÍD>ä”÷Ñ8w ÀÝø,Þ6®²¢y¢ÿÊE}’íÊ(}ú,]3•ê>Ð[ؤvŽ*˜ˆ}É]¼ÜhGCg¬5V.¦¤|ÿF×^ b,ïsyˆ1þ{{™ŽlÉw¬j>æùüzg+Óý¿•xgSß ¯xŠV +¸” þ1E91%aeaçïPÊ>…ÃZ™Oµ§föÕWá¶ê¦ß<©¾* ­:•ECPxÑ)S_íj m®åsQ!^ovµ_y·QQw5#jð¶Õ +ݱmÑ:M¯Ûm¿RtLÎ׀;Ž<§{öÛ{j¤S½f¯)äŸVûÞÔSǏ Z¯Tò¬2îj{¿MÎTÿ„”´3¬äº[xjˆ,(‡Ü–0a”ˆûH¯â<›†lw(¯ÍËG5fš†qÒ+RŒûÁ3G=5G<ʊy’4'fÓµú¦èç¦ýIéβ¢{¼)¬¯Ôí=glSݍßڍ ªIùš'2÷ %¶Á´Öµfv®Wѳï]›×…rÅ[¶³UÏ+öËÑ:¶ûg¦¨œÛ3.øm·ÏÝŸRlTÍ­¦ßE:žœå"Utüïw(Wuè^©ŠIùº'WS¥r·²OlMùižVŠF´nôÔŒºé¹8…ù;ŸzÚ@~¼Îä›Î/Ü¢¾¶]z×N>Á͏ƒm­áÚë¸v|ê?-uÞ@®Ÿk¡s­qõ]lÏX®§íéÛK…æ‡ïYÙðþõÙñpìú–+ˆûŽñ•á\p»u½¦ÆøÆúÇÉýEU`Å´óóWQ’XÅÅ@s½½ù`>Wü:פ‚¿i,º |‡ô$¦oó›¡bIàê«p?ƒqÏi'誔ªûneº…Ɉ½Z8`íœÛ¢¿Òưc[ÞÙYïyiÏEÏP«Ó?9𐹷xÈ¸Šø·¥؟&ᤵÒ+ð²Q™X%Ü@¨±âZs³TSê×ðVýsä·C•_wËY{”Wæå£´tspzö޵4ôˆ°kçVðXS‹âDWÀûE~ÆãÈk˜ÈÄÂf¾²E¸ =B+ýÙ§A-E=QHÙÔ܁~ÿÿJÿÑÆ¬”]˜âäˆï­í&sg’ž¨¨Ó7¢o+qü`]£|_}Áøù‘Oœ\œð :ÝoæÊ“Lâ‘Ô¹~_·ÿ¿™Gé#´™að}øâ›ZNÒ:¢o-qü`;ƒðŠøŠÿábáéš^u/ãÑ¥ÇÓ%ÉS¥ªK=©vÖä)Òúý:\] +]íÇýŸ—|iÏ5££s¶E~;Iͯ€WÄWý]ª3Kƒp—ˆŸB'q–I4³JbÃa+©çãê5¯D…Nº^¿a7ªØ¸´IPËX–jµ/#¦Kˆt—Ó¶ý\jÈpŒ¹ÖÔN¨›±¸îÄWÀ+â+ýh¼Î%ÄÏ%æ5 @W¤º§\úâ»'¦óS¾GE9õϳ>-ñ{Ñã3¼dßے]A”eO¤ ²›²v‹\–©'ÊÄ¿•H—ßõ_à¦uÌî_—\ÒV,Œ¯ÇÁGi2â+ÿÕéÂXz„¡ëz ¼ÝW×>Ìñ99ݰ±ï!Ô^ÀæÿÈÂðxˆŸ]õO‹øøw1:{6önà³´UéqšdAˆ³\N}§½vûS¸?|ùœ}׎êÙ/çPôô5þ]c®³Õ_VW‡ÊHã˜Rék9ֺ͛‹D ìñT ^Ùü”WÚQÎÒ:—S +DLÀÁø¹•ÄWý* ~y/2ãYÆÁ¶ðõ†Eœø¼äž*FŽ^¿`âÑ&´¸êT·ö¿ê‚¿¢DûÌ6·+…z!ðíʋûL=P¯úd-ü4ò_hÂd¤7þF{‘ý=÷ÍÂp8hÿ(¶›VâÑ)bY*¤°mR0}J¯]F€•üEíÅéš^"jÓë_¦ý¾JO;Ö&+”’¤W®ýÑW¥ßœþ”`ýÆÐÈ+ðŠøŠÿÛ÷ü*û/ –a¿{+k¡Ýpþn2}X¼Õj]ñÇú_(døE|EÓî¿Yß²2ï! Údð »ab8Ø&­5{&¶ig5)^ÿΊû9X§”}¡©*/€ +Q~"¿Ô¶—ÕÕÿQÊÇ{좲ïüŒ7ØèÚ1®çÜZ%‹©K|iþTWè\1ÛcE¥à +üEÐÝCk oßàÖ³Ô"Å æ–ÏMê¶2úļ}'é"¾á’éÅñ$`øE|EÏßP<ÇAæÙþFV +ø>N'19TâÑ(«Lñ¢Šû6MX’¢øE|EÏ̾ÈÀ6U†Hd;Þ%jê~u½šY +•ù§ÈE~r…Å%´ó¾¤úȽ0"¾%Eñÿ=‘ÿ|)wÄËW‘Ñ3eaÐLkâ§ÿC®ßÚJ‹èÅx‰*/€ +Q~íò”_ÝF ìoüÔßtþïpaÔeÑG ÍÎU¸´K—«øÓ…ÌÎ>ٌcIU¤`øŒ ¯÷¢jʾ§– ârr2õû ]Z^&äK·ôneœ2Žgm‚4hè"AŸ}$Wô°e?é2Áý°FµºôEûÆg¬™Óø $>A3{D±U?~æY£§˜,¦hÁiÒ¿€WÄWöòílevÛß_|’+òñÚ20q–¥½àú~J¥¢úžZ7xÈg[ê\Z"ÆŽ”_Ìë[[ô¯êcx2(ë·ÀÊ+ê`¢Ø‚¿èpXÏn°î3é&nlÄåWÌõю_͵žÏT•÷áÁaw‰ÎyßpkeÇêã{„•ÀùÑõÛ0õÙPv†ËÈBºÞ2—ÒÈUk ìîíÿByßo.¹Ã"Ã÷À+ó2Jÿs…ó*˰E¾ò‹dêõþ"B¯y öðH|´ÍLž©.ÏæK·í˜½¡“íXň¯€?qõÄÿQ“+Ý~'Ø"¿Ãc#ë6|"û-Þ.K®G%AñÑ_S®ßŽ(dø¥û^àü’¿öȯ¯öÎoŠËÊIê’à%½s3ÇùüôWԒ¿}|ÿÈ+öŒl¬+v¶ÚÉtº%Eò0²EÈ@MÂX%¾ÎlwÌ´Ç좿0Í|M¶LTŽ•üt¯ì„WýÂ+þb*w›­D•\ŒS(~Ê+í¥£1‹i*Œ_4`´£ëà®ßW®ß'þÅþRJ“T‰ÀÆô²«å¢¾Ö’{M;18½c܋ˆ¯€>mŸ_ºi*A_öȯï܌.Õ•¥w%¬ï;„/ς¿¡pÅ\—+ˆ©ô•üÜcƹhÀE¶Eƒäâ`hl¸Í3´oðX˜Ï˜ŠûUVWÑ'p~ÿͶÏâxíÅs¿_öȯñåÐz{>.…äÎó/ó_g*µîSœN»|TMõhdü”èŠÏ³EŠæ$¡ª5Þ +vÖÆZ`(?aöÌK5_výÒ+ò.„V}š+ÿÃÍ1[[°y3d^¡ê}NA ÿÍ%Üeª8E|"¾QõþÍÿý5c³½Z҆ëÄu– òÑ_ÚR‹òÆOÀ;ùx~4Eñ‘_ó+g´Û\ž7`q²?-û‹5__Wâ+ýš+øÖ¹*»z,¹êç£ÿÑE|Œ¯•Ü"¿›k[æµõÐ5þƒå"¾Î‰ÎÙùuÂ+àõ1,A_þ+ñõïò(íé“ämë"¿v›ÙøVw6¢þt¯àò”_û„WÚk6W7®îÃ]ºÍ±Ïɂ¿RÔ_ÚQÎÜ"¾Ñ‚Ò +üA_+ÿbŠÿ ŒŒe¬E² Üe­GŽ’ÿ¿JþԂ¿©­E~üÑ‹ÀºK÷óßô +k[ÀczäWüFVNOV—Ž£·i]l»öu§ªE~WV—òhý{þýôê]õÂ-¸¦ôÏï$¯ú¬ø*fÂ(—oÀ>ðÿ±_G÷æ©xYä¸ÊD[¯»åjK¬’gf“ËuÜÿp¨Öø^_®Eù𠻦— Eêl֟‡s¼~M,ÒYb‹,_äêj>>6….×ÝÙB¶¢þö0}¢3X’TMðîR‹ùëڋüÖÊô²®ý›o~ç_³ðy¶Ü}¿‚oâô-þÊõGót3ë××6é ¦—Æf:Û?ðùIÀ}ðMÿƒßˆ~oß3í÷üã{ö}Õê*³Ó×;÷ă>ú+ýŽ§°Œ»Lt•µ·×éìNWËH`±x?9ý4y(o˰]¯ž9l'Š\Ÿ-SåÝ÷<æ÷Mw”´Ýæè³Uð;.»~ogw•×^VÖß4š{öqÆùÌK'ÿÜ'ÿàˆc|TTð\šÜ6E>M_³-/š +Ü&¢ócwa®õ™­NW¥{sí-i+QõðŠÿ²îæ¶Wv:ûĕâ:Æ÷ M~ιÀd˜`ðëD8{TT1x ’ûþe¥ò†ó]x²»ÉÚ]åuþË.žj¢¿ElŠû•3¢A_€ +ÿÞVû´¿?yŒ¯¾@Ò_ù¶x ŠôF'ò‹°xx¬ D/¬Ë¥î!|x˜Ü2=|Ü» þe¥÷AAz‡©¼Hj¿y5²ü{>¿hŒÿͬ:Wðð$¯û» mâ:ÆõS{Òiﯳ×üÄæùÌËà1òhðqç\nzRì"1¢dWï™VHEöy>¢/Ž2¾ñ%gø™¿Õéûƒô"¿´î¨#'fäWÀ+ÿT_»2Ø]˜ëîòœê÷9Ï´£ž*&øE|‚¿µë·æÐŠù~/èüµð^|ÃÉ}FÞ]¿,?|+àu؆ßR +þŵ½¨¿–>a%•^|û¸¢ÿ¸µý¬ùc'à/èügŠ/÷}Áùc'àö‘ƒåDßw8¢ÿ:íðvh¯”¢üZ‹ùÒ¿ƒ×ô¯í¥N»|û½ÁýÔøŠø7´È~WkâÊ^8E|ÜÌW¸¡“â+àöh¯³_wàyß/-|Áߙ뚩EÞYõú<^á¾__­ÃSNy¥«‹ú?nY_ø¥嚯ƒÛaªü¨›à +ü£ëàü*Ô¿q{Ãñd•þ__°¿£õ¯r=CA_€WÄWÁø4¢ÿkã>UiUçÀ+åÄ߃ÚX3ûYU¬×ĔÈ|"¾\Mø; vþß·è¬ä`øE|Œࢿ´ gî.š’†#À+â+àì§ò0|ÜßÑøŠø;œ}£«´dƒ>ú7ô0PÉð{dWæäâ ?€>t»cÒR‹ò +ü®ÁóøYmcj'T–øäŸœ_Q_ðÒ¿ˆ¯ƒ®Á“üÒ*¼þÚäÇå×¢þ+RÿŒÁµK„sþüqÍ|48xgHů5ëߢ¾ÍNàýÁ~_ø‘ƒ÷æip®QpÖ)=dz~fµ/âQ%õ „Ký ¤°N%Á7F&l`+Ñpo8‡£¯KËR£ #—–à¦Cç]¾_üdWð-Rò´©?j5ù¶µ¹%ôy4ÙIZHûqŽã9f–Z±Ú¦Dé‡ñh’|§Ø?NØdæ©1Ò´Éñ<ßS)Y¯n¢,°v .“ûx}¦è°Š~¤Î?A_€WûTWïíãçõþJ"w‰ÉÈ÷ü\_†‡ï8˜žó‡‡áñ«¼neŽZf¥Å¢M­²E͇£í஍D—šÓýSâÿŽàñQgxìá1‘ž)#ˆ£–S½òº´¼¥/ºÇr%Íøo©Š/øÈÍä.tË>øE´E~ó3±â¢é»æ)nç²;<Ém*1ÿ¥!ªKøâ)·6’ßd¬8œ²þžëíô«ÙêöN-sŠ^Ý+šÁþݔ|Ü¢ÂAŸ¯ûÔWðz¦ôXM¦ú¾i|5"1Ú\—Ó,]ºT ¬;¶;ÐÝ4Ôòѹ&:…r'³ü)þÛ¥W"oäàþ_þâ+÷¨šÎ§o[÷# âßÎj¶LìÒû :FZ­¼Å®"ðŽý6ñ¸nV3C;`ÞÑ0+ø´ŠÿW‹Pï.±Ó=^ÉmŠ\„îÛ§¾ëïW1%%W¯qh—ÕÐ{gäƒ>_wiþéôxÅ)ê¯OÿIAdâс("¿8•ê"«‡Šêð‹zŸ;,C†t—^.¸¯£àÿwSîò–^¶·ÞBÊB7qh–2¤Eswƒ+¿—”–®çá¬%–v¨¯‘ƒàÿw?|€¢ë.Kƒ¿ââØ×sðV½R¾æú7xšËÍTÍÙ¥à§}­¤÷ö|ëe0¯ÿ´Àýúž`s +œ~_þÒ+èÄ|¦^g¬@{Ã,Ï·ÔÅÙ%ß\ý,½ÁRîîsOʸбEó¬vtÈ}¼?òÙ² ¯À+þéùnw2›ÿ# ÉÈQ®²K…uôQ_¿æ}=ø‰x—Æ{±™ËÒ‹÷ÛO¤hgÌπWýÍDß»L#ǛnîéY<¬+x»ŸÐE}ÁÎR[Ó^6b<w{Üï¸d„WÊÁþ_÷u~ìËa»E‹Œ€›‰®ØýWÙl=’Ù?;åâCCEíî™_iX?ÞV¥õ.Ƥ¨›àÿy%Ý¥¹ëî}×XŠü.§cޜ¯ýÚ+œ”=ò‡ÜÝ}£Ìvÿ¼¦Có‹Ö8dYø¿£þÖg¿g}Ö4O~ÇFӜ«Ù·. +_?ƒÃE~'˜´«©výÌÆ”¬àˆmû«QíQ_»2Ø__g~Ú÷€wîB’]AÈS“Νÿ19é<ÝÞàé»KÂnèè¯ú+øŠøæÛ!ýÕ¤ÌvØ¢ÿU.§!/½× ÌLSøb‹¥|ÑQý·™JuÚµøo½‚¿V°ÅèˆÁðѵÿƒrc÷×ùýÖ¸Ldf2‡[h"¿x²ÝO:Ø>Mmê£âe.ü‚¿vðWœŸ’Êâxë«Qø7K¿veÐ_ hýKõ³\] +WbgR”úrº_Aè2÷ Qø°W;”WÊÁþù±ƒ™|WÙn-kàV¥ù­•õúsÒÅ÷|2Ï­_[} ¯-eÜ-&Ÿs!p+Ò¹ûûÞ²ºE|¬àAŸøV2|Òi·ì2Í÷ÍÁôYJ´Ï´îŒÏ&¯p/AƒÊ0Ûà£î/uéŒ Úç}KQ¸ªóå²€ ¥ßþMŒŸÍl¯pT»î!mÏ¢ËÍ|éҋÈÚûœ4àqqþû¥sºœÞùonI_àÔ_þj_šÙ#Ëpm·K‚äâïK*ÄT6éE½QÁábo+k}÷Jç·ÅbüSØ+ó'à0â×;ûÔMfý‡YÝ9lBSÛùË ÿŽSê°8Èýÿ’DÍæ6À¸›ðWþçϊUõþ~ñ#¬0µçåFäøDŸ +/1uß/Sïo}™_¯þ]¶ÏÍl¿"+«ýq…([®àüŒ¯–¾§€"¾ðÀ_=üfˆé_À+â+àþÎoΕüô¥EóËàìÑ_:Wð”»ó;à+ø ð§#ï+üܜE­DßG€sò¾€•üE|ÆÆOãúzö;ƒðê‡( ¶×ûÚ¯ˆ‚`­µÏ/ +!¸h»…xy0‚xŠ ð7Úé5q—[mْÉmÃdd–KeºK=m¶íd’I¥–Ie›\ë%ºY$šÙlž’øFª/þÿù%’Ï[â¥. 󠺊Š âG +*Ñ_ð€Šü>°}Þð ÷è›ñãuƒîð€x¢ÿtWáÞðÇíEûé_áÞðâ‹ü.ŠýÞðâ¿´WüàE|M÷x?À4WÞ—üàå.ýôñ÷?`ÿål?}|é_íñù?`ÿ»Q~¢¾ð>>ÿì÷†«ð ÷‡Añú<дWÀt6†ß¼ZߏÁßÑöÍWðª/ðí2w_<ú?Çà~ýâ‹ü¬ü;vþ~ìû ›@„~¥ÙÃô÷X>¡¢¿U°¡C¡Îkömø¶E?ì^}À;QYQMÛkõÔ:9Ý_Âòûwà_Qáî4äøÈ‹ÁK¬Ðè¯êêiãù{ÒUÞ4 Ø=-§ÅÜï-»­Çm‘°Ørͳ{|E~¢Ê²¢=$Üz »§Øy›ŽÐ'_E×Zàîþ%•®?ãëÈ·|l?°~þv}~ʲ?'tyäüz º‡Iêû}ßDüVê>®è •Ý]å}r¼ï¼+ÿ€çöÈ~®Wpž27v…íöÚ퍭ÍüڊM?KSs–±h±󛏑«¶îw]ÆÊ^õò Z÷”%ðÿӏø8•±ò·‰B×ìèånyè Ðê(ôþ›m½h¤tÕ6õõuü--JÞÑè¯ÀsôWð$`îìêâÞëY/uñ]dyø·PWÓPèúÚ +\ÝNûÑVps5xŠì,Å~9]#1[#ðrN’»/_‡ÌÀ>v1YÃÊø™ªéšéî ù…fÏÌ*Üyß竤yÞng}lïãñ-nYÍ/;ó_O>óUPð ǑK÷²9ærW/!²~?¡¬¿ƒü'êé©»j‰þ^÷¤E~ÊÑ_ÁÃÃï-¬"þcĽݡvuTõuÐïà˕Ñdk¨{.ғOïµ´ŸDÐRÐL뵜ìc”{úZ.Ã[ªû|Î;Z»[«ý9ß½Ÿð¸°¤Ö}îA9y ¨¤ÔSRMAþKØg‘½èúš{AE5Ö?×ÐãþÿØTëäI“s½ÝÚVG—½vkÅP…oKS¯ÔíigcÐh†éráà Ñ~n%Øê´•4Ý¥†×WÊÑ\‹¢¿•´ò~‹²m­äšéýÿ…maµú›r>†+àaž.܈_†ŽwÅÒHJþ:Ít{?³»K§îØXíµ½®§±nØÔäè¯Ïhó··»ùdï»ÍËn‹'‘·» +žÏÂ%•µ‡íÛá9¯Öi³íì¨à?Ϗv.£¹µ°‘&O ‡ÝYU4%¿¾úˆ»Zý”­ÝÜ_³o„Í•U?q´£øzN¥¼ÿ4úݍ+5ž¿áßȓ&ÿ…À¶°Ú´&¶ùò¸ûšØûÝ¾¦¶>җMðf‚¸€½‹t½W´®Úk00¤H“&úûÝîk­2w͝ÿ^¬¾²??}~?ïÉ-Í~Çe«Òüzè¯ÝÍ]ݯq"L™]aF +æã¹µ¯Ùù õ»+EŠ E4ÿ¯p°¶êÃeuqkºÛítݹ® ?öáÚYqcY.°¢QÄâpx\˽õåß{¦Qwu½¼€‡â]oî/y>™X¯NG·+ »ßÛÁ€^Ýﯯn`à¸xö󽋄î®mûë»{«åì¬'Œ^Ýñ° 뻌oMíÕ¼>›{ëÈpË©X6!+އ)1~ ÖþWō÷כ܎"ÄôÁÞo÷ç'ÄÆÌ(²V¸‡2.<3‡î¢á˜~$3%bpž>Yñý잃.bÊNÿ ÇÏè3ƒ;ïqrV.RyÑÉr9Åɼn|o8þÞûÊçö^Odg+ø—Á¿àZíûvãðÿuSUÔv´SV–57××XOK¢õš/k©ö~nvÓ¬óñ²Ñ§¦¯¼Ç§âåó^«Öæø¹xҬܣôZ4nŸ-7E3ǍÏèüÔhT’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’H1à@{cFßøëñ8цJ€ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  Z™[«Çæy‘ûÛy­ÕCuÕ$ƒ3ÂA07{ ySSÇm×C>w„ÞXÑý½¢Þ÷©óAª:®ÌÉE(w™ÿL +ݤ’Ëb§¯˜q|ÌÆnڛæÿõWƒ2D⒎xMâ(ç»6Œo5&õ +ÔÒë •õ™%YÛÉ%|þÇ%ü·…ûX¾~÷çâ¾çiŸ…ài1˜–;“¼K×Ó&Ô”šßsûµÜkÔ߬(×BqŸªu°y­½a¤æ$ôMDE­›3[jÿ3àìh_!¶= ù¾ulh¬¼©UóÉVí‡Ûgm—a_(³Sc ›¸u‡žo¡úÁc#w±&ÂïÎÌ"]øƒ±ÆyŒQ0ù}½½NM˯IäXXïNÈF} ™ŸªÃ2nö”ª*k`ÕO†¸hq›§—Ò)M¯ 2›6º‡HfÛ+[.TU÷Õ`ó·7QÞwVÙ¶r0B Ïñ)73¢Œ[¬´¾fJõx‰¹ðª©ÿxY1#0†Ãùuò„áïÁ¸Õ¿qãq%Î|}„*´yб csÈi÷¸aäè&¡ê驽á$ìÐotSmN¦Jî0"Š¥2,$d<³¤²î ÉzÐHóN + 畟ʉsчóg{gvWø7"ÀÕ4Žf÷­ސ7AªŸo¾”!^š¡"¼È0!ážS‹-H1ˆLòf¾Ûµ‰à j&¬¶ºIÛG £t õlù¶°H~c+:ÞRFÃcš–=ñ¾¸%ÏR}þIgLkßò”þÊ7Z¶—j£LIî÷KèûøzS8"4‘9¯$cØXîÁË{р¾‚µ¦^š—$mwpü¿»Ø£“–[·*˜ÐDª­«EÑ*¥ÙÐLûu§4è€:ÁÔp$=gÛ žEÚC¶ýfÂÚÓ]˜Áx€úF¦¸hÌ: ^ûlD\Œ _æÎIcò™·•!šOÚ jHýûú'~¸°|6*ÀZó÷!ŹJ§_\„´ÝB_WùÚ[evúÑ CðÓK)אַÁ.µ˜Ðqš¯f.í:÷åbŸ¶HÕ|¥Ÿ|+O]s$-/àD¶¿U_äœÆћá÷c„… +¡gJÔý{}™?1ÔÚ«HÈB¨ß+#Ž`~'j2$'$E:å¸þ·ûµÓi ¸>§ƒ6³븴g–û,ë,??2v­f¿h› Ì.7ýJ#ŠTæpëé*nh¸rm\¯WÂ\¦^œ×*4øô£çµÀºN2fáÒ»V²³#l4–Ô²~[$=èUwý+6dwK·œï¨M:ÇOkšk®Õ.Ç£t6 AEçn×̜‹ÒHc¹¡=Ž/ÓÅ|⾃ø³g\Zå\•ÞýÔ~†‘+æû“Tv! ʬúã…aݰ³ šÈB`Lô½=â5Db`.«¨ˆa8É:`ƒ¹%çÖ¸šªŠ¾À‚”Õ_³ýÓú#tIšÞØ,´nKÅ»­…¨’‘çp^îT«)˜ôÔ¶`äʪí⌅*9•ãBˆ;…ëç°v°¼0¾‘6Ú}úå&&Û:ú.›»üœêÐÿð'-ÙT“zhJDÎ öؐß_FVHÿŽÿÿH«L[ÀR˜ lI¼;µրa@Pø$MZ¸PELà!  À ^@düÿ  @ ÀX.text¡@À@ `.data°À@À.reloc^À`À@BU‹ììàSVW‹} 3ۍ… ýÿÿ;ûthàWPèÁë ShàPè¸ƒÄ …$ýÿÿSPDž ýÿÿPeiCDž$ýÿÿtüÿè÷‹uW…$ýÿÿVP舍…$ýÿÿWPèn…$ýÿÿWPèWV…$ýÿÿWPè ƒÄ0…$ýÿÿ;ûthdüÿë%SSShjP‹…$ýÿÿÿPX‹FƒÄ;ÃtP…$ýÿÿPè£YY…@ÿÿÿP… ýÿÿPVè© E PSS…$ýÿÿhüÿPèvÿµhÿÿÿ…$ýÿÿP‹E PÿƒÄ,_^¸€[ÉÃjÿt$è×þÿÿYYËD$…Àu¸€Ã‹L$‹‰D¶I ‰3ÀËD$…Àu¸€Ã‹L$‹‰D‹I áÿ‰3ÀËD$‹€D‹H áÿ L$‰H 3ÀÃU‹ìQEüPjjh$üÿÿuè˃ąÀ| ÿu‹EüÿYÉøÀÉÃU‹ìQEüPjjh4üÿÿu虃ąÀ|ÿu‹Eüÿuÿuÿuÿu ÿuÿƒÄÉøÀÉÃU‹ì‹Eƒì€¸Iu¸ÀÉˀD‹H ‹P$SV‹ñæÿW3ÿ‹Þ ߉uèt ++Î׉H ‰P$‹M‹p$‹P ‰uüÁá q0‹þ3ۋò+÷‹}ü‰uð‹÷ó;p,wr‹uð;p(s¸ €ë7ÿu 3ö+ÑþMè‰x$‰P ‹ú‹UV‰:‹x$V‰zZòVQÿp$ÿp ÿuèkƒÄ_^[ÉÃU‹ìE P‹E ƒÀPjÿuè ‹M ‹UƒÄƒÁ‰ +]ÃéÃé®U‹ìQQSV‹uFü3ۉEˆ˜L‹E9]uyˆ˜M‹E ‹HI÷эU#ʋU‰Š`‹M‹‘`Pj‰‘d‹@3ÉQPè‹MSP‰Uü‹‘`‰‘H‹ESÿ°`Sè‹Ejpÿ6pPè+‹EƒÄ,ˆp^‰H[ÉÃU‹ìQQ‹ESV‹u W‹}jÿuƇHÿuƇI‰·L‰‡Pè€ƒÄ ¹…Òwr;Ás‰‡T‰—Xë ƒ§X‰T‹Tñ‡D‹‰0‹C(‹K,3Ò+ÃPÊSV‰Eø‰Mü臋E ‹U‹ÈM‰FU‹Eƒe‰N‰N ‰F‹Ê‰N$‹M‹ÆEø‰VMü‰F(‰N,‹K0‹S4jX+ËÐÎUVSW‰N0‰V4èzÿ·Xÿ·Tÿ·Pÿ·LWè ƒÄ,_^3À[ÉÃU‹ìƒì ‹A,‹Q Áè $SV‹q$ˆEÿ‹E W‹8…ÿu·A0Áë‹_ãÿÿÿ‹Ã÷؃àÇËØ+كÂèƒÖÿ3ɉUô‰uø;·Îr;ÚƒÄj^€}ÿŠPtöÒ±€„ÊuÐéuø€ùt-€ùt(€ùt€ù …”ÞÆëx‹Háÿÿÿ‹ù÷߃çùë`2É3ÿŠ8T8ƒÇT8ÿT8þʃÿrçë G;þrø*H*HuK‹Háÿÿÿ‹ù÷߃çù€}t ŠH€ùt5€ùë +ŠM:Ht(„Ét$ßÇ3É;Mø‚Jÿÿÿw ;]ô‚?ÿÿÿ¸€_^[ÉËM ‰3ÀëòU‹ì‹ESP‹@V¾ÿÿÿW‹}#ƃèÇÇEtŠJ:M t!‹ +#΋Ù÷ۃãËMÑ9ErḀ_^[]É3Àëò‹L$jÿt$jèXþÿÿƒÄ ËL$ jÿt$ÿt$èAþÿÿƒÄ ÃU‹ì‹E W‹}ˆE…ÿu¸€ëH…Àu‹E‹€<‰3Àë5V‹u‹MQjjhDüÿVÿP ƒÄ…Àt¸€ëWEP‹EVPÿƒÄ^_]ËD$‹€D‹L$‰3ÀÃU‹ìQQ‹E‹ˆDSV‹uW‹}ƒÇ‰‹Q ‹Y$çøÿ+Q(·ÇY,‰E‰Uø™;Úwr9Eøs¸ €ë@‹A0f‹U ‰f‰‹f‰x‹3҉P‹E‰Q4‰A0¾ÿÿf‰0j^f‰p‰PƉA(‰Q,3À_^[ÉÃU‹ì‹E ƒ`V3ÒBf‰W‹}j8Zf‰PH8ƒaºÿÿf‰jZf‰Q‹U‰P ‹ÐU‹÷uƒ`,ƒ`4‰P‰P ‰xQ‰p‰p$_Ç@ ‰@‰P(‰H03À^]Ã|$u‹D$jY‰H‰H ‰HÃU‹ì‹ES‹]VW‹} +ǃesÇE€‹M;K|;K~;‹;O(s4;Ïr0ȉ‹Q;W(s ;×rЉQ‹M;K}‹‹J;O(s ;ÏrȉJÿEƒÆÿMu­_^[]ÃU‹ìQ‹E‹HƒeSVW‰Mü…É~@‹U ‹:p‹‹A;8u!‹Z;Xu‹Z;Xu‹Z ;X u ƒ}tÿMÿE‹EƒÆ;Eü|ȸ€_^[ÉËE…Àt‰‹E…Àt‹I‰3ÀëâU‹ìQ‹E;E~w‹ML+ESV‰M‰EüW‹E‹‹E‹};Njs}F‹ML‰M+ø‹E‹‹A‹;u%‹P;Vu‹P;Vu‹@ ;F u ÿqSÿuÿSƒÄ ƒEOuƃmÿMüuŸ_^[ÉÃU‹ìQ‹U …Òu¸€ÉËE‹HSVW‹xA‰}ü;ùt3t¸¹€ë‹} öt'‰ÿ@‹#Ù;Ùt'ƒÂ G‰} ‹xƒÆG9} uظ €ë&‹Mü‰H¸€ëÿpÿp ÿpÿuüj PèúþÿÿƒÄ3À_^[ÉÃS‹\$ W…ÛtT‹|$…ÿtLötG‹D$ ‹P3ɅÒ~Vp;tAƒÆ;Ê|ô^;Êu¸€ë#‰|ˆÿpQÿp RQj Pè™þÿÿƒÄ3À븀_[ÃU‹ìQQ‹M ƒeü…Éu¸€ÉËE‹PSVW‹xJ‰} ;út:W‰UøTü¾€‹öÃ`t+öÃ@tÿEü‰ +ÿH‹#Þ;Þt#‹XƒÁ OƒêK;ûuÕ¸ €ëu‹M ‰H¸€ëhƒ}üvJ‹} ;x~<‹MøLˆü‰Mø‹1ö@t;x ‹×}‹Y‰BƒÁ;P |ò‰tÿH ‹MøOƒé;x‰Mø΋Mü)M ÿpÿu ÿpjj Pè®ýÿÿƒÄ3À_^[ÉÃV‹t$W‹Fë‹~ Wÿvÿvjj@Vè…ýÿÿƒÄ‰~‹Ç;F uߋFëÿv ‹~jWÿvj@Vè_ýÿÿƒÄ‰~‹Ç;FuߋF;F u¬_^ËL$‹D$…Éu‹L$ ‹‰8‹ ‰ˆ<ʉ þÁˆˆÃ¶D$Pjjè™#D$#T$ƒÄ Ât°Ã2ÀöD$Pjjèu‹L$  QƒÄ ÃU‹ìQQEøPÿu jÿuè·ùÿÿƒÄ…À}°ÉÍEÿPÿuøÿuè\ŠEÿƒÄ ÉÃS‹\$V‹t$WV¿àWƒÃhäüÿSè ƒÄ…À|ƒ‹6‹Wÿt$VÿPPƒÄ 3À_^[ÃU‹ìƒì0SVWjXjf‰EÐXjf‰EҍEÔhÔüÿPè1öÿÿ‹u‹F ƒÄ ‰Eô3ۍ~éÿv ¶ÿvPèüþÿÿƒÄ „À…ÿ7‹E ƒÀPè#ÿÿÿYY„À„èEüPÿ7‹E ƒÀPè™ƒÄ …À…Ë‹‰EäEÐP‹E SShƒÀjPèˆôÿÿÿ7‹E ƒÀPèÂƒÄ =€t‹E ƒÀPÿ7ÿUüYYEÐP‹E SShƒÀjPèIôÿÿFP¶P‹E ƒÀPèoþÿÿ‹E ƒÀPè²ýÿÿ‹E ƒÄ(8˜Lt@MðQPÇEü¤üÿè˜þÿÿ;ÃYYŒ‹E ‹ˆX‹€PDðPÿuðÿuÿuüèrƒÄþ‹E WÿvƒÀPèIøÿÿƒÄ …À„Éþÿÿ~$9u‹E WSSƒÀhDüÿPèUúÿÿƒÄ…ÀuQˆ]‹MøQNQ‹M ƒÁQPÿƒÄ…Àu*‹Eø;Eôt;FtPèêY…Àu ‹EøÆE‰F‰^8]t»8]…Nþÿÿ‹F ‹~‰Eì¶PSjèô‹]ìƒÄ ƒÀÿƒÒÿ‹Ï÷Ñ÷Ó#Á#Ó Ât+;~u‹Eì;Ft‹Eì3ۉF‹Eôˆ‰^‰~ˆ^‰Féôýÿÿ¸€_^[ÉÃ|$uhôüÿÿt$èuûÿÿYYËD$hƒ8u‹L$ ‰3ÀÃU‹ì‹Mhƒ8u¸€]ˍU Rÿu jPQÿƒÄ€} t¸€]Ã3ÀÃÌÌÌÌÌÌÌÌÌÌÌÌo|$ÃU‹ì‹] ‹U‹M‹eRSÿÑÉÃU‹ì‹Aƒì…ÀuŠÉÃjPEìPè`óÿÿ‹MüQjjMìQVÿP ƒÄ …ÀÀÉÃU‹ì‹EìS‹] V‹uWƍ½øÿÿ¶Cƒø„›ŽËƒø~Oƒøt)Ž»ƒø‘Eø;ø‡§€{ÿ”Àˆƒgëo…øÿÿ;ø‚ŠOøèMÿÿÿöØÀþÀˆGøë8…øÿÿ;ørmƒï€{ÿ‹Ïuè(ÿÿÿ„À…wÿÿÿˆGøëèÿÿÿ„À„eÿÿÿÆGøƒgüéXÿÿÿEø;øw/‰_ƒÃƒÇéCÿÿÿƒøu+ø…øÿÿ;øu‹ÏèÔþÿÿ‹Mˆ3À븀_^[ÉÃU‹ìƒì S‹]VWEüPÿu 3ÿjÿu‰;‰}3öèõÿÿƒÄ;Çt`EPÿu jÿuèýôÿÿ‹UƒÄ‹Ê‰Mü;ÇtFEøPWWhdüÿÿuèj÷ÿÿƒÄ;Ç|!EèPEàPEðPÿu ‹EøPÿƒÄ;Ç|‹Mè‰ _^[ÉËU‹Mü;×u¾MZf91u ‹q<æÿÿñë‹ñ‰Mð‰}ô;×t·J‹r+ñL(뽋V(щ붋T$ ‹D$‹V‹t$VƒÂRjPÿQ4ƒÄ…À|W‹>‹t$ƒÇ¥¥¥¥3À_^ÃU‹ìS‹]‹MQj0jSÿP4ƒÄ…À|TV‹E W‹}ƒÇ¾ôüÿ¥¥¥¥‹M‰A‹M‹E‰A‹M‹E‰A ‹M‹E‰A$‹MjX‰A(‹ jP‹EƒÀ,PÿQTƒÄ _3À^[]ÃU‹ìS‹]‹MQj0jSÿP4ƒÄ…À|lV‹u…ötW‹}ƒÇ¥¥¥¥_ë‹M‹jƒÁjQÿPTƒÄ ‹M‹E ‰A‹M‹E‰A‹M‹E‰A ‹M‹E‰A$‹E‹M ‰H(‹M‹jƒÁ,jQÿPTƒÄ 3À^[]ÃÌÌU‹ìƒÄøVW‹M‹u ‹}‹ÆÁ;Çv‹ÇÁ;Æv;÷„º‚ ƒù„«‹×€â„Òt ŠˆIGFëå‹ÁÁèÁà+ÈÁèƒøtQEøooFGoFGoFGoF G oF(G(oF0G0oF8G8ƒÇ@ƒÆ@Hu¹oEøwƒùr‹‰ƒéƒÆƒÇëìƒùtŠˆIFGëòñNùOƒùt ŠˆINOëò_^ÉÃÌÌÌÌÌÌÌÌÌU‹ìƒÄð‹U …Ò„WS‹EŠ]‹øŠûúrq$„Àt‹ÇÁè@Áà+Ç;Âs\+ЋȊÃóª‹ÂÁè…ÀtKÁà+ÐÁèf‰]øf‰]úf‰]üf‰]þEðoEøGGGG G(G0G8ƒÇ@HuÛoEðw‹Ê‹ÃÁàf‹ÃÁéó«‹Êƒáóª[_ÉÃU‹ìQ‹E‹U ‹Mƒá?­ÐÓêƒù r‹Â3ÒYÉÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌU‹ìQ‹E‹U ‹Mƒá?¥ÂÓàƒù r‹Ð3ÀYÉÀüÿPEI SERV[p üÿ£ üÿ üÿ üÿÐüÿüÿu üÿˆ üÿ üÿûüÿ‰üÿ<üÿ©üÿdüÿŒüÿ‘üÿfüÿ4üÿñüÿõ AÖ|ËFH£€´Ùã¹@€Tüÿ—üÿ=d”øIÄÑBލ…½ØÆ[Þ]Îè +Hä7D¨×ëõñ”÷1X9ïýA¿”xÆôþq/Ó2˜"0z6K¸'ô ·ÔT6H6# åD½…¿í>ï?<U0#1>347(7,7074787<7@7D7H7L7P7T7X7\7`7d7h7l7p7”7˜7PeiMainPÛëTÆFzDOÓ*5¡>@¬ø”VZL ¸Á@´üÿà.textW@`@ `.data@  @  @À.reloc2à@à3ÀÃU‹ìƒìW‹}‹MQWÿP0‹EYYë&fƒùuƒÀhH'üÿPè†Y„À‹EYu·HÁ‰E·ºÿÿf;ÊuÍ3À_ÉË@…ÀtôMøQMðQMèQP‹EPÿƒÄ…À|ÜWjÿUøYYëÒV‹t$ Vÿt$ è‹hX'üÿVÿP$ƒÄ^…À|3ÀËD$‹ht'üÿPÿQYYËD$‹‹L$+u‹P+Qu‹P+Qu ‹@ +A u°Ã2ÀÃÌÌÌÌÌÌÌÌÌÌÌÌU‹ìƒÄøW‹M ‹}‹Ç$„Àt ƒùt[ÆGIëì‹ÑÁéÁá+ÑÁéƒùt2EøïÀGGGG G(G0G8ƒÇ@IuÛoEøw‹ÊÁé3Àó«‹Êƒáóª_ÉÃÌÌÌÌÌÌÌÌU‹ìƒÄøVW‹M‹u ‹}‹ÆÁ;Çv‹ÇÁ;Æv;÷„º‚ ƒù„«‹×€â„Òt ŠˆIGFëå‹ÁÁèÁà+ÈÁèƒøtQEøooFGoFGoFGoF G oF(G(oF0G0oF8G8ƒÇ@ƒÆ@Hu¹oEøwƒùr‹‰ƒéƒÆƒÇëìƒùtŠˆIFGëòñNùOƒùt ŠˆINOëò_^ÉÃéqYR­”@¨È¾[?ìÈ-@q½fÈy|ñK©;kƒ š@PO·«-ýr@£!Êür—~ú@ËqÑbÍx€D†xÆ¢§—¨ÞAŸYçºk<·C½ðœàz©¦AZWRU~aM£¤÷TsQ´žB}]ŜÿûC¼3N®¦+BîrípH˜x¨ûd߯Bâ;öÖdB¾¦(?±:êBLs÷¢XôM‰€VEӞÎXN˰ÀwhH®µÃkÔ/öCòQ1kTƒF­rرkÇ×^D6ҟHkÕŽq'³^D¡ôÖL(Y·‚ÿ•ÆDçÎï}&ýK¢WJj³î…‘D†’Â#}”pB°aåÐu‹cD*5üšW»‘C›f)tR›£D‡ô[Tº.LªrŽàõ%DÒÐÿ&Þ3ÎOžp‚³z6hEßæH4í\F‰–ljÕ©FýfâW¬‡|K¼YemAéÊíFüñˆé¸I¦õ ˆoωF÷5G_ùÜý@ˆXo“B©G‰yóûyD¢ï¸*C¯çMG¡µ%7 OJ¸¯ì?€îk5G^:}õLx2M¬>æc§žhG†wC~sF¯®4S,ÝBHGª˜omB®>9«c?Ì(G´›pӔ±qK¹ÀÛØÒڗ­G MBE¯æòJ­™úw‡BÑG ÙRuóÛMO€·õO×KøG +l-#\|L‚³{ëÕG >«Å5z· EˆT›/ 2¥H"—aÃ7ïFŒ5Ç£{QíÒI +3©GóÔšI'?ÁMJe{7©sG¶ä¤x&¨3áJBÊy¡»šJ„VáæjHNJóµÛM!ÄA¾£¡µjBڋJMfîPwÃBžiŒ‰ÞpÑÕLü'P¨ ©O¤ÊÒûOLõ»‘¹ÜôD‚~•5—DɇL¬‘ö¦È1DD…LâÁ¦•’M›Ýg,·(CŒ€Ô¬üƒýøMþB5þÓÁøNe|€H`oöpM*Ñ픛AD”4›;px9M£O¡ýü¯šF·»4¼ÝJÀ–M¶™ ïÓ±%@”¿jVààM™@À¯9 ]@¾F„oÅ1M4*“ã)W$OŸ±×@›EjM ôÿLøQÈA¸)QŸQRôDM +dDâô~þA³£Œª0M 7 +™*âF€ôäÛÈoNž¦wnMFŽø³R "ÝN5PÛëTÆFzDOÓ*5;]EŸŠ+L– §—¹Íó#øŠ×L„ôÂÃë #à!¼Gߝ“ªO§C +¥¾jÂÈ4¶¢E.‰äkìÆ;ÕäÒËhpõO´b˜"´­`ÕäÒËhpõO¸f˜"´­`Éâ¹ïaŠC©H/RNKt èrçO>þ†@¶8ŒI:¾C”P.‹ƒ×œõêF½:Ašéݟm’}6ªÌëÌEšÜueâs¬pOÁ¼SOÂLC²”ŽÒÔÌ`SQÊÎ2@‡N·UÿhfÐm¬ÐsÔ°kª½mçµ$c Ôš:'?ÁM¸“³ŸÔš:'?ÁM+* 1šH²‘‡Gß$9GŽýia¡PE°U”β²²MsÀ'y+C˜k§ã£[ ÙRuóÛMO€·õO×Kø¯~ý1§€^CŽ +?_†gݹ´c Ôš:'?ÁM}R£ÌæõBºÛ¿=áwt+Ïb.-Ϟ·C‚”çüq=þ§´´ŸÀBÍK…@›Ìgø>ªb.-Ϟ·C‚”çüq=þCþ½*°M™‘o…e”w~ú.¹/à.®Kž¶td^÷·$c Ôš:'?ÁM –Â3ïLöFA­4x™p,„ +²´c Ôš:'?ÁM ‹ÖÆ¥Šç&D’x¨ðÙëM Œ¬y|l^=NºoÂ`î|.›Ýg,·(CŒ€Ô¬üƒýødDâô~þA³£Œª0¹Üü‡yßG©§¾=ºRÕ ~”µSÿ}E˜¼Å«ÇwýZXf€0œJ—pziéXÈãH‹pÿÎBºFÎiP×­ó!ýå%I´8X»C&)fá˜ÊÓ³I¯0¾ŠÑCaÁŽQê6Gœbl.”4«7ÓüÓ±øN•|€H`oöp’OqOlL¼øA›+€2béêâ’ĤL¡|» +Abéêâ’ĤL¡|» +BY -èâ£F§C!¤)m¬´béêâ’ĤL¡|» +@DÌs²*æÜAœ­½´#TYØ™óÌQßOUN¤[á#øMEjì܎@mÏ|G¥¨´„N=â( ËÌ$KÕšZ'?ÁM9†ž¤uH—[“ÿ#Æ ñ‰¿²OG–ãz{±´¤™@À¯9 ]@¾F„oÅ1>n ~ÈÑGŠÚUI&²¶³&&Êw›KŠQx±®:þx–·¶ÃD¯5kÇÍ+22¹C¾¯Ô½€Ç<ˆ+fyTäjèI¦½mä¶% øUÏ)u¶]O/¸z>ÏÐc Ú¾'+®ÂC¯kt•$AÞ( \¡"ñ ÁTMH`ôðmÑ­ h°nsŒÅG–KW½]Md!xªÖ®¿ÕÅKŒÅùîGϒ™"Îh›k­:O¶ õ˜™4C#`‹ÙŸ¦WNtJ†JûíÙêû €ä'üÿdüÿ €€'üÿgüÿdüÿ€'üÿp'üÿ… ~ÿ²K†j1¢™jH¨Ó2˜"0z6K¸'ô ·ÔT6(¸²Ò&§H³ß˜<`$ðÍ3KV*ɓE¿$säÿÿÿt‹HöÁtƒÉ‰Hëƒ`÷€½?ÿÿÿt‹HöÁtƒÉ‰Hëƒ`@ÿÿÿt‹HöÁ tƒÉ ‰Hëƒ`߀½Aÿÿÿt‹HöÁ@tƒÉ@‰Hëƒ`¿€½BÿÿÿS¿ÿÿÿ»€t‹H„Ët ˉHë!x€½™þÿÿj^t ‹H‹Ñ#Ötƒúuƒáþ ÊëƒáýƒÉ‰Hëƒ`ü€½šþÿÿt$‹H‹ÑÁê#ÖtƒúuƒáûƒÉëƒá÷ƒÉ‰Hëƒ`󀽛þÿÿt$‹H‹ÑÁê#ÖtƒúuƒáïƒÉ ëƒá߃ɉHëƒ`π½œþÿÿt"‹H‹ÑÁê#Ötƒúuƒá¿ Ëë#σÉ@‰Hë`?ÿÿÿ[3À_^ƒÅpÉËD$‹ƒÉÿ‰‰HHÿ‰H‰H ¹ªªªª‰H‰H‹ƒáýƒÉ‰‹HáUÿÿÿPÿt$ƒÉU‰Hè?ýÿÿYYÃU‹ì‹E;$/üÿ‹EuÇ$/üÿ‹E Ç4/üÿë ƒ ‹E ƒ 3À]ËD$ƒ`ÇÂë ‹D$Æ3ÀËD$ƒ 3ÀËD$Ç‹D$Çt0üÿ3ÀËT$ ‹D$‹V‹t$VƒÂRjPÿQ4ƒÄ…À|W‹>‹t$ƒÇ¥¥¥¥3À_^ÃU‹ìQV‹uEüPÿuÿu Vè´ÿÿÿƒÄ…À|ÿuƒEüÿu‹ÿuüÿPPƒÄ 3À^ÉÃSetup €œ1üÿÖ)üÿ €Œ1üÿ-*üÿð41üÿ/üÿrìR(R (!p"# ¢CHÿÿÿÿðA0' '£'™'ð777A7GGG™GðWWWAWðgggAgðwwwAw ‡‡¡‡‡ð———A—ð§§§A§ð···A·-ך××@×ðçççAç!@@  P €pÃqÃÀG°Ct³ÿ÷ïÿ(ýâ ,À 0ÿÿýÿ4}ÿýÿ8Fÿÿÿÿ‰úwÿð ¥ +!  ÿ´0üÿÄ0üÿD#M…AÕB¥{iYNª?æ¨uv#C‡µi¤œÐ;UÍ3KV*ɓE¿$sä4üÿ€<5üÿ,5üÿuf¶óf9°Eüÿu f¶òf9°Eüÿt%·€EüÿL‹ÁÁà°üDüÿ‹> ~uÁj@X_^[ÉËÁÁà·°Eüÿ3҉Uô‰Uô;òvà¸Eüÿ‹E ·;Ãt +BƒÇ;ÖrñëÆÑÁâ€}·ŠEüÿuÁà È3ÀPQh™ë Áà È3ÀPQh”è²ƒÄ 3ÀëˆU‹ìVWÿu3ÿècþÿÿÿu‹ðètþÿÿYY=€uj_ë9u tWÿu ÿuèÆþÿÿƒÄ ;Çt‹ø‹Ç_^]Ã`¹ÿ2%ÿ÷ÿÿ0¹à2ƒàý0¹à2ƒàþ0aËT$ ‹D$‹V‹t$VƒÂRjPÿQ4ƒÄ…À|W‹>‹t$ƒÇ¥¥¥¥3À_^ÃU‹ìQV‹uEüPÿuÿu Vè´ÿÿÿƒÄ…À|ÿuƒEüÿu‹ÿuüÿPPƒÄ 3À^ÉÃU‹ìƒìSVWEðPj茋E‹UðYY³…ÀtŠÊ"ˈ‹E…Àt +‹ÊÁé €áˆ‹u ‹}…öu…ÿtG‹ÊÁé"˅öt‹ÂÁè"È€ùt:Ëu ‹ÚÁë €ãð +؈…ÿtf¶Áf‰€ùuÁêâÿÐf‰_^[ÉÃÌÌÌÌÌôà ÃÃU‹ì`‹E¢ƒ} t‹} ‰‰_‰O‰W aÉÃU‹ìQ‹M2YÉÃU‹ì`‹M‹E ‹U0aÉÃ1ÃP ÀÈ$`<`t   À `"ÀXÃP  À%ÿÿÿŸ"ÀXÜXÃúÃûÃU‹ì`‹E‹M ¢‹}‰‰_‰O‰W aÉÃÌÌÌÌÌÌÌÌU‹ìQ‹E‹U ‹Mƒá?¥ÂÓàƒù r‹Ð3ÀYÉÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ3À‹Ð‹L$ã½É«Êë ‹L$ã½É«ÈÃÌU‹ìQ‹E‹U ‹Mƒá?­ÐÓêƒù r‹Â3ÒYÉà €¬Tüÿl6üÿœTüÿìDüÿŒTüÿXDüÿ€UüÿPDüÿt7üÿ!8üÿPX@Y +@h i€ j k€ lm€no€c=üÿ=<üÿÐ& & R# DH! +°6ˆÑ&&R%DH#t@! °6 +ì,XÑ&&R$hB" ¤8 +à.XÑ&&R%PF# Œ<! +Ô0XÑ&&R%,L# t@! +È2XÑ  ' (# +4! 4!@XÑ + +ˆ ˆ +”  Ò&&R%8J#t@! ¤8)@Ò&&R$hB" ˜:)@Ò&&R%PF# €>ø*@Ò  ' % (# +4! @@XÒ  ' % +(# 4!@XÒ + +ˆ ˆ”  Ò& & xi# ,Là.Ö' ä% ¸$ Œ# +`" Ð ¤LÖ  ˆ +ø h ظ Ö((R%8J"hB˜: ¼4 +ì,%LÖ''R$8J!hB˜: ¼4 +ì,%LÖ&&R$8J!hB˜: ¼4 +ì,%LÖ$$R"8JhB˜: ¼4 +ì,%LÖ((R%8J!t@ ¤8 +à.'LÖ''R$8J t@ ¤8 +à.'LÖ&&R#8J t@ ¤8 +à.'LÖ$$R!8Jt@ ¤8 +à.'LÖ((R"\D ˜: +Ô0'LÖ''R"\D ˜: +Ô0'LÖ&&R!\D ˜: +Ô0'LÖ$$R \D ˜: +Ô0'LÖ((R$DH Œ< +È2'LÖ''R#DH Œ< +È2'LÖ&&R"DH Œ< +È2'LÖ$$R!DH Œ< +È2'LÖ((R! t@ +¼4)LÖ''R t@ +¼4)LÖ&&R t@ +¼4)LÖ$$R t@ +¼4)LqV±ª%Gµtú«3½YZ SÁ˜è$L†‰¤´¼ÅÈ¢H×tŒüæN’ˆÄ¾À’¤5+ŒoôþD‚VáÖwÍ3KV*ɓE¿$sä¼bÏa@d¾Ôç±H°–‹ G¼zçÿK±Ë*kÊO´ËR^ýSñDO2Z223Š3ª5°5î5ö5ü5.6W66—6ª6Ð6ø6Y8v8ž<²<¹<Î<Û<ä<ó<= =D= $0(04080@0D0L0P0T0\0ð0ô0ÿÿÿÿü'P¨ ©O¤ÊÒûOû;@Ìø´VZL ¸@@ÜUüÿ`¼.text_ @` @ `.data¹  À  @À.relocÂ`à`U‹ìƒìS3ÛV‹u 8¤jüÿtCSVè~SVè ‹MðQMøQSh¤iüÿVÿP ƒÄ$;ÌċhôaüÿÿuøVÿPƒÄ é®WjVè9jVèÖ‹SSShjVÿPX‹}VWè‹hôaüÿVÿP‹MüQjVÿPLƒÄD…À|<‹EüÇppus‹Eü‰x‹EüÇ@ €‹EüÇ@ ´iüÿ‹EüÇ@–Wüÿ‹Mü‹ƒÁQVÿP$YY‹MôQSSh„iüÿVÿP ƒÄ;Ã_|‹Eô‹SjPVÿQ,ƒÄ^[ÉÃU‹ìƒìV‹u‹MQVÿP(YY…À|ƒ}t\€=¤jüÿW‹} uN‹MüQjjh´iüÿVÿP ƒÄ…À|4EôPEìPEäPÿwü‹EüPÿƒÄ…À|‹Eô-ŒVüÿƀ¤jüÿVÿwüÿUôYY_^ÉÃÿt$ èg Y3ÀÃU‹ìƒì@SV‹u ‹Wh8büÿVÿPYY3ÿ»büÿ‹jMÀj@QÿPT‹LbüÿЇPbüÿƒeäƒeì‰M؋Dbüÿ‰Mà‹HbüÿƒÄ ˆEÃÇEÔ‰Mè<v <þu(jh$büÿëjhbüÿ‹MÄQÿPP‹jMðSQÿPPƒÄj@EÀPhÄiüÿVèDƒÄ…À|jƒÇ ÿÀ‚fÿÿÿ3ÿ‹M QjXjVÿP4ƒÄ…À|D‹jXdüÿQÿu ÿPPƒÄ €¿düÿ u‹E ƒÀ8ƒHƒP‹E ƒÀ@ƒ¸ƒPÿƒÇXÿ€r©3À_^[ÉÃU‹ì‹E‹SWURPÿQ0‹EYY·ºÿÿf;ÊtYŠ]fƒùu:ƒÀhÄiüÿPèÌY„À‹EYt#‹ø:Xu€ûþu6ƒÀPÿuè«YY„Àu$‹Eë ·HÁ‰E·ºÿÿf;Êuª¸€_[]ËG,‹M‰‹EƒÇ0‰83Àëè‹T$ ‹D$‹V‹t$VƒÂRjPÿQ4ƒÄ…À|W‹>‹t$ƒÇ¥¥¥¥3À_^ÃU‹ìQV‹uEüPÿuÿu Vè´ÿÿÿƒÄ…À|ÿuƒEüÿu‹ÿuüÿPPƒÄ 3À^ÉËD$‹‹L$+u‹P+Qu‹P+Qu ‹@ +A u°Ã2ÀÃÌÌÌÌÌÌÌÌÌÌÌÌÌU‹ìƒÄøW‹M ‹}‹Ç$„Àt ƒùt[ÆGIëì‹ÑÁéÁá+ÑÁéƒùt2EøïÀGGGG G(G0G8ƒÇ@IuÛoEøw‹ÊÁé3Àó«‹Êƒáóª_ÉÃÌÌÌÌÌÌÌÌU‹ìƒÄøVW‹M‹u ‹}‹ÆÁ;Çv‹ÇÁ;Æv;÷„º‚ ƒù„«‹×€â„Òt ŠˆIGFëå‹ÁÁèÁà+ÈÁèƒøtQEøooFGoFGoFGoF G oF(G(oF0G0oF8G8ƒÇ@ƒÆ@Hu¹oEøwƒùr‹‰ƒéƒÆƒÇëìƒùtŠˆIFGëòñNùOƒùt ŠˆINOëò_^ÉÃV‹ðƒþ |¸€^Ã3À@‹ÎƒáÓà3É#L$ ‰‰‹H#D$ ÁuڍFüƒøwƒ"ƒÆøƒþwƒ'3À^ÃU‹ìQS‹]V‹u …Ûw }ÿÿv +¸€é„‹EWSÿu}üU è‚ÿÿÿ3ÿ;ÇYY|hë_‹Eƒø +wc¶€ï\üÿÿ$…ß\üÿSÿuÿu ÿuèìˆë%Sÿuÿu ÿuèâf‰ëSÿuÿu ÿuèØ‰‹E ƒÄÿMEßuü9}wœ3À_^[Éø€ëô‹ÿ\üÿ”\üÿ¨\üÿÖ\üÿU‹ìQƒ}SV‹u w ‹]ûÿÿv +¸€éŠ‹EWÿu}üSU è²þÿÿ3ÿ;ÇYY|nëe‹Eƒø +wi¶€Æ]üÿÿ$…¶]üÿжÀPÿuSÿu ÿuè:ë)f‹·ÀPÿuSÿu ÿuè.ëÿ6ÿuSÿu ÿuè)ƒÄÿM] }uü9}w–3À_^[Éø€ëôIQ]üÿh]üÿ€]üÿ¬]üÿ‹D$ ŠÃ‹D$ f‹Ã‹D$ ‹Ã‹L$ ‹‹QÊD$‹L$ ˆÃf‹D$‹L$ f‰ËD$‹L$ ‰ËL$‹D$ ‰‹L$‰HËL$‹3ÀÇBd jüÿ8D$t ‹h\jüÿQÿPYYÃU‹ìQ‹ES‹]V‹u Wÿu}üSU è{ýÿÿYY3É;Á|Ië@‹Eƒø wD¶€Õ^üÿÿ$…Å^üÿŠˆëf‹f‰ë‹‰ë +‹‰‹C‰FÿM] Muü9Mw»3À_^[Éø€ëôˆ^üÿŽ^üÿ–^üÿœ^üÿU‹ìQ‹ES‹]V‹u Wÿu}üSU èãüÿÿYY3É;Á|Ië@‹Eƒø wD¶€m_üÿÿ$…]_üÿŠˆëf‹f‰ë‹‰ë +‹‰‹F‰CÿM] Muü9Mw»3À_^[Éø€ëô _üÿ&_üÿ._üÿ4_üÿÌÌÌU‹ì‹UìÉÃU‹ì‹UfíÉÃU‹ì‹UíÉÃU‹ì3À™ÉÃU‹ìŠE‹UîÉÃU‹ìf‹E‹UfïÉÃU‹ì‹E‹UïÉÃU‹ìÉËL$‹3ÀÇBhljüÿ8D$t ‹hxjüÿQÿPYYÃU‹ìQQS‹]‹VWjMQMøQÿPP‹u ƒÄ …öu‹‹pd¶Mû¶Uú¶EøÉ€ÿÿÁáƒâ ʶUùÁáƒâ ʋøÁá%ü ÈQjhø VƒçSÇü ÿV(‹E3ɃÄ8MtB+Át+HtHt¸€ëi‹E ÿ0QWVSÿV(ë‹E ·PQWVSÿV$ë‹E ¶PQWVSÿV ƒÄë6+Át#HtHu¾QWVSÿV‹M ‰ëQWVSÿV‹M f‰ë QWVSÿV‹M ˆƒÄ3À_^[ÉÃU‹ìÿuÿuÿuÿujjÿuèèþÿÿƒÄ]ÃU‹ìÿuÿuÿuÿujjÿuèÈþÿÿƒÄ]ÃU‹ìV‹u‹W‹xdEPÿuÿuÿujWVè þÿÿ‹E ÷Ð#E E‰EEPÿuÿuÿujWVè|þÿÿƒÄ8_^]ÃhèaYÃ|$tWSVWèåÿÿÿ‹ø‹D$iÀfjd3Ò^÷ö‹ÏD8‹ðÁî%ÿÿÿ‹Øëè¹ÿÿÿ‹È;ÏwN‹ù…öuîë ;ùw ‹ùèŸÿÿÿ‹È;Ùwï_^[Ãf‹T$íÃXüÿ€¤iüÿìaüÿY¼(Þ(b½A½ö£¹­µ¡ÙT“zhJDÎ öؐß- åÖ²ÇrH¯fýÀæù^xzs3À@f‰Fƒ#¸€^[_ÉÃU‹ìƒì ƒ} SVWtlƒ}tf‹]EôPÿuÿu Sè»ýÿÿ‹uôƒÄ…ötN…ÀuJ‹~ ‹E98r4VèíY…À|5‹N‹WL1 QÿuÿPP‹EƒÄ …Àt‹N‰3À‹M‰9ë ¸€ëò¸€_^[ÉÃU‹ìƒì W‹}…ÿu¸€ëSS‹]VEôPÿuWSè6ýÿÿ‹uôƒÄ…öt4…Àu0f9t!ë…öt VèßûÿÿY„Àt€~t‹F Ft ;uørܸ€^[_ÉË~‹E ;8w-Vè3Y…À|æ‹WN QÿuÿPP‹jƒÆVÿuÿPPƒÄ3À븀‹M ‰9ë¸3ÀËT$ ‹D$‹V‹t$VƒÂRjPÿQ4ƒÄ…À|W‹>‹t$ƒÇ¥¥¥¥3À_^Ã×oüÿ\püÿ€€qüÿLqüÿȸýŒ²Öó@Ž—0|ɋ| /LóˆÞpB„–"ôRƐÜ<ûuJžyYéÝx¹úÍ3KV*ɓE¿$s䊐L‹uˆVBАR‹uˆVFАX‹uˆVJА^‹uˆVNАd‹uˆVRëKˆ^‹UˆZ‹UˆZ*‹UˆZ.‹UˆZ2‹UˆZ6‹UˆZ:‹UˆZ>‹UˆZB‹UˆZF‹UˆZJ‹UˆZN‹UˆZRА‹uˆVА‹uˆVА‹uˆV"А"‹uˆV&Аj‹uˆVV8˜ýt‹Uì‹uÁê"шVë‹UˆZ‹u8^„›ŠˆVА ‹uˆVА)‹uˆV+А/‹uˆV/А5‹uˆV3А;‹uˆV7АA‹uˆV;АG‹uˆV?АM‹uˆVCАS‹uˆVGАY‹uˆVKА_‹uˆVOАe‹uˆVSëKˆ^‹UˆZ‹UˆZ+‹UˆZ/‹UˆZ3‹UˆZ7‹UˆZ;‹UˆZ?‹UˆZC‹UˆZG‹UˆZK‹UˆZO‹UˆZSА‹uˆVА‹uˆVА‹uˆV#А#‹uˆV'‹uАkˆVW^8˜ýt‹UìÁê"ыMˆQë‹MˆY‹M8Y„›ŠˆQŠˆ ‹UˆJŠˆ*‹UˆJ,Šˆ0‹UˆJ0Šˆ6‹UˆJ4Šˆ<‹UˆJ8ŠˆB‹UˆJ<ŠˆH‹UˆJ@ŠˆN‹UˆJDŠˆT‹UˆJHŠˆZ‹UˆJLŠˆ`‹UˆJPŠˆf‹UˆJTëKˆY‹MˆY‹MˆY,‹MˆY0‹MˆY4‹MˆY8‹MˆY<‹MˆY@‹MˆYD‹MˆYH‹MˆYL‹MˆYP‹MˆYTŠˆ‹UˆJŠˆ‹UˆJ Šˆ‹UˆJ$Šˆ$‹UˆJ(Šˆl‹UˆJXŠH3‹UˆJYŠˆo‹UˆJZŠˆp‹UˆJ[Šˆq‹UˆJ\Š€r‹MˆA]ÿuü‹WÿPYY3À_[ÉÃSetupô'J ßBMµR9Q=@Ñþ€ÑþÑþàÀÑþÀþ ¢¤¦ ï{üÿƐÜ<ûuJžyYéÝx¹úøàuè C³qb„%f + 1óûç¦FšñÔڝ¡Üú•Cô×ÇõñO…”ÂîõÞ&5ä¶c¼2ÆI½·¡ þl?æ¨uv#C‡µi¤œÐ;U$Õ2ç2"343P3h3m3ñ3û3B4T4v4$;ÿÿÿÿ¿«¶*™ªOA—†ìD +1!˜Ãr@”ø|VZL °ç@||üÿà.texth@€@ `.data À À@À.relocà à‹D$ƒÈPjHè0YYËD$ƒÈPj@èYYËD$ƒÈPj`è YYËD$ƒÈPjhèúYYÃj3h•èªj3h–螃ÄÃVfº€°uî‹t$ÿvèˆÿÿÿÿv è’ÿÿÿÿvèœÿÿÿÿvè¦ÿÿÿè³ÿÿÿƒÆVÿt$èÁƒÄ^ËD$‹h´üÿPÿQ$YY3ÀÃÇà2ÉV¶ÁÁàf‹ à¾ÿÿf;Ötf‹€ + àºf;Ât þÁ€ù rÑë +‹D$ÇÇà^áð€à‹T$ VWj_j¸à^ÇŠ à€ùu‰2€ùuÇ à€= 0àu‰2ÇOuÅ_^ÃU‹ìQQSV3Ûjˆ]ÿè‚%#Ó ÂYtÆEÿ¡Hà‹u ƒàþƒ  Þf¡RàfƒÈf£RàEøPVÿu‰]øèÿÿÿEøPVÿuèJÿÿÿ¶RàƒàƒÄ¢Rà9]ø… 8^„ Rà8^u ë 0¢Rà8^u¶Tà%ï¢Tà·Rà%ýÿf£Rà·Rà f£RࡌLÑþ¾ 5ŒLÑþ8]ÿtƒÈyëƒÈ¹ÿýÿÿ#Á£ŒLÑþ¶bà%ü ¢bà¡8LÑþƒàƒø¡Ìàu ÇÌà ë +ÇÌà§8]ÿt pÑþ 5pÑþë¡pÑþÇpÑþÿÿÿÿ pÑþ KÑþ¸OÇôOÑþ_‹ÛÆf£øOÑþë¶Tà%ç¢Tà^[ÉÃV‹t$‹ÆÁè%ÿÿ‹Îáü Á €Phø è\ÿt$ƒæÆü Vè>ƒÄ^ËD$‹ÈÁéáÿÿ%ü ȁɀQhø èÿt$hü èƒÄÃf‹T$ŠD$îÃf‹T$‹D$ïÃÌ̊L$ 3ҋD$öÁ DÐDD$­ÐÓêÃÌÌÌÌ̊L$ 3À‹T$öÁ DÂDT$¥ÂÓàÃÌÌÌÌÌôà ÃÃU‹ì`‹E¢ƒ} t‹} ‰‰_‰O‰W aÉÃU‹ìQ‹M2YÉÃU‹ì`‹M‹E ‹U0aÉÃ1ÃP ÀÈ$`<`t   À `"ÀXÃP  À%ÿÿÿŸ"ÀXÜXÃúÃûÃU‹ì`‹E‹M ¢‹}‰‰_‰O‰W aÉà €Äüÿ˜}üÿ 1óûç¦FšñÔڝ¡Üúî2Ä6È6ÿÿÿÿßæH4í\F‰–ljÕ©nÄ@Dø({¯æ?üÚF¨(£´W¤B‚ ëòá¹÷&J† !d*VZL ¨‘`<‚üÿ \.textF``` `.rdata À À@@.data,à@à@À.reloc\ ` U‹ìQ‹E3Ò3ÉV‰Uü8t f¶p·öA‰uü8Ptf¶pfÁæƒÉf uü8Ptf¶pfÁæƒÉf uü8Ptf¶pfÁæ ƒÉf uü^8PtÉ8P tÉ8P +tÉ8P tÉ8P tÉ8P tÉ f‹Eüf£€€àf‰ ‚€àÉËD$3ÉAf9u‹P‰ñÑþf‹Pf‰HñÑþf9Hu‹P ‰ ñÑþf‹P +f‰FñÑþf9Hu‹P‰ñÑþf‹Pf‰DñÑþf9H u‹H$‰ ñÑþf‹@"f£@ñÑþÃU‹ììÔS3ÛVW‰]ø‰]ôfº€°vî‹E‹UøRSSh(“üÿPÿQ ‹}GPè£þÿÿ‹GƒÈ£ð€à·wf‰5H€à L€à ¢L€à‹MøƒÄ;ËtJ‹9XtCUðRUüRjQÿuÿPƒÄˆ]9]üv'3À·ö‹MðÁÿp¶ÆPèv þE¶EYY;EürÞ·Gf£@€àŠ D€à·ðF(€É€hÿÿˆ D€àPè> ƒ ôÑþƒ ÿñÑþƒ ôÑþ FhPè ¹f Á·ÀPFhPèþ FfPèØ ˆEÿuFfPèÎ jaèÀ ˆEÿujaè¸ %Tàÿÿüÿƒ ôÑþ ¶GÁà + ôÑþƒ ôÑþ d€à ÀƒÇW¢d€àèþÿÿFSPèŠ SƒÆ,Vè ‹u‹ƒÄ@MìQSSh¨“üÿVÿP …,ýÿÿPEèP‹EìSh“üÿh|’üÿVÇEè¼ÿƒÄ,…Àu€½"þÿÿu ƒ%ôÑþûëƒ ôÑþ‹MôQSShh“üÿVÿP ‹Eô¶@YPVèÖ ƒÄ_^3À[ÉÃV‹t$ ‹h¬’üÿVÿP‹hĒüÿVÿP$ƒÄ3À^ÃVW‹|$ ‹‹ph‹D$h€ÿÿ0jh@jVWÿVjh€jhDjVWÿVƒÄ8_3À^ÃU‹ìöES‹]‹V‹phW¿€tjWjh@jVSÿVƒÄöEtjWjhBjVSÿVƒÄ‹MQjjh¸“üÿSÿP ƒÄ…À|‹EhÀáäPSÿPƒÄ _^3À[]öD$ ƒètPHt¸€Ã‹D$¹°`f‰Af‰H¹²`f‰HAf‰H¹´`f‰HAf‰H +¹¶`f‰H Af‰H¹Â`f‰HAëE‹D$¹¸`f‰Af‰H¹º`f‰HAf‰H¹¼`f‰HAf‰H +¹¾`f‰H Af‰H¹Æ`f‰HAf‰H3ÀÃSUVW‹|$‹‹ph3ÛSjSh’jVWÿVSSShSVWÿVSjSh +j]UVWÿVƒÄTSjSh UVWÿVSj +Sh<UVWÿVSh¸`ShUVWÿVƒÄTShÄ`ShUVWÿVSh°`ShUVWÿVShÀ`ShUVWÿVƒÄTSh `Sh UVWÿVSjShjVWÿV‹hü’üÿWÿPƒÄ@_^]3À[ËD$ƒèt-HuSÆ  à@¡¤ à%ÿÿÿ €£¤ àÆ  àŒƒ%¤ àóÃÆ  à@¡¤ à%ÿÿøÿ £¤ àÆ  àŒƒ%¤ àüÃU‹ì  à‹MÀè3҄Àu`I‹EtIt +Iu ë ë ƒ}sf‹ $ àºþÿf#Ê·ÑV‹u WP·ú‹Ç™RPVÿuÿV(G™RPVÿuÿVƒÄ$_^]á$ àÁáM‹„ˆ(]ÃU‹ì  àÀè„ÀuL‹EH‹MuÉf¡$ àV‹u ºþÿf#·ÀW·øQ‹Ç™RPVÿuÿV(ÿuG™RPVÿuÿV(ƒÄ(_^]ËM¡$ à‹UÁáM‰”ˆ(]ÃU‹ì‹E‹VWURjjh¸“üÿPÿQ f¡ à·Ð· à%?ÿƒÄƒÈ@f£ à‹E Æ à£$ àjYf‰ ’ àÆ àˆH ‹É‰‹M€¹è¾ÿÿûÿ¿u ¸ë!°€¹éu ¸˜ë!°˜_Ç$ àf‰ à3À^]ÃU‹ìƒì$SV‹u‹W‹xdMèQ3ÛSSh¸“üÿVÆE ÿP ¶ à%ü¢ ࠐ àƒÄ$ÀˆEþu ¸ f£$ àë‹E £$ àf¡ à·À‰EÜf¡ à‰]ôfƒÈ3Ûf£ àCSÿuôWVèÀýÿÿ%ÿóÿÿ PSÿuôWVè2þÿÿƒÄ$ÿEôƒ}ôrÓf¡’ àƒeðfƒÈ€}þf£’ àt‹E f‹H fƒÉf‰H ƒeô‹Eèh°PVÿPf¡’ à‹Mô·À‰EøfÁmø·Eø‹ÓÓâƒÄ ‰Eì…Єr‹Eèj6PVÆE ÿPjÿuôWVè ýÿÿ‹ÈáðƒÄƒù…“‹Ð€â:ÓtE;É…‚ƒà<u{jÿuôWVèèüÿÿƒÄ©„©„jÿjÿuôWVèIýÿÿƒÄ‹Mô·’ à‹ÃÓà‹È÷Ñ#ʃ}ðf‰ ’ àv ÆE éÖ· ’ àÿEð Èf‰ ’ àˆ] éÿÿÿfƒ}ø„’ƒeøÆEÿ‹Mø‹ÃÓà‹Mì…ÁuK€}ÿudSÿuøˆ]ÿWVèDüÿÿ%óÿÿ PSÿuøWVè¶üÿÿ‹Mø·’ à‹ÃÓàQ Âf£’ àè²ûÿÿƒÄ(ëSÿuøWVèüÿÿ%ÿðÿÿPSÿuøWVèyüÿÿƒÄ$ÿEøƒ}ø‚{ÿÿÿé€}þudSjWVèÌûÿÿ‹Ðâÿðÿÿ¹ƒÄ;Ñt%ÿóÿÿ ÁPSjWVè.üÿÿƒÄƒeøSÿuøWVè”ûÿÿ%ÿðÿÿPSÿuøWVè üÿÿƒÄ$ÿEøƒ}ørØé´ƒeøƒeìÆEÿ¡$ à‹M썄‰Eà‹‰Eä©tM€}ÿufSÿuøˆ]ÿWVè4ûÿÿ‹Ðâÿðÿÿ¹ƒÄ;Ñt%ÿóÿÿ ÁPSÿuøWVè•ûÿÿƒÄ‹Eä‹Mà ‰ëSÿuøWVèðúÿÿ%ÿðÿÿPSÿuøWVègûÿÿƒÄ$ƒmì€ÿEø}ì‚bÿÿÿ€} …MýÿÿÿEôƒ}ô‚@ýÿÿf‹EÜ_^f£ àÇ$ à[ÉÃU‹ììÄV‹u‹WMøQ3ÿWWh¨“üÿVÿP …<ýÿÿPEP‹EøWh“üÿh|’üÿVÇE¼ÿƒÄ,;ÇuB‹SMüQVÿP(ƒ}ü YY‹Ø¿Ðt€½uýÿÿu…<ýÿÿPWVèûÿÿƒÄ ‹ØWVèÈûÿÿYY‹Ã[_^ÉÃSVW‹|$‹‹pdjj»ù SVWÿV jjSVWÿV ƒÄ(_^¸€[Ã3ÀÃU‹ìƒì SVW‹}‹MøQ3ÛSSh¸“üÿW‰]ìÿP Ç€ à¿þ‰€ àƒ @€ à¡@€ àƒÄƒà£@€ àtƒ @€ à € à ¢€ àƒ ¿þ ¿þ ¢¿þƒ%¿þþ¾¡¿þ¨t‹EøjdPWÿPƒÄ C;Þrå;Þr +¸€éƒ ¿þ3Û¡¿þ¨u‹EøjdPWÿPƒÄ C;Þrå;ÞsÎ3Û ¿þ$ˆEÿu‹EøjdPWÿPƒÄ Cƒûráƒ%¿þþé°ƒe訄3ÿf¡h¿þ¨t‹EøjdPÿuÿPƒÄ G;þrâ;þƒmÿÿÿ‹}èÁç‹Ç £`¿þf¡h¿þfƒÈ‰}àf£h¿þ3Ûf¡h¿þ$<t‹EøjdPÿuÿPƒÄ C;Þrà;Þƒÿÿÿ¡d¿þÏ‰Eä‰=`¿þf¡h¿þfƒÈf£h¿þ3Ûf¡h¿þ$<t‹EøjdPÿuÿPƒÄ C;Þrà;ÞƒÐþÿÿ‹}Še¿þ‹MìQjjh(“üÿWÿP ƒÄ…À|#‹E싍UôRUðR¶ÓRÿuäjPWÿQ‹EðƒÄë3À‰Eð‰Eô3Û;Ãtv9]ôtq·H ·@ÈÁá…Év`3ÿf¡h¿þ¨t‹EøjdPÿuÿPƒÄ G;þrâ;þs5‹Eô‹˜ Eà£`¿þf¡h¿þfƒÈf£h¿þ‹Eð·H ·@ÈCÁá;Ùr©ëfº€°ˆîŠEÿÿEèÐèƒ}èˆEÿ‚Tþÿÿ3À¶ € à_áýˆ € à^Ç€ àÇ€ à[ÉÀ|$t +ÿt$èýÿÿY3ÀÃf‹T$ìÃf‹T$ŠD$îÃf‹T$fí·ÀÃf‹T$f‹D$fïÃf‹T$‹D$ïÃSetup=üÿ=üÿ=üÿ üÿX“üÿœ’üÿ€˜“üÿ¨’üÿ H“üÿ>„üÿ ˆ“üÿ·üÿ x“üÿ{Žüÿ €“üÿo†üÿ°†üÿ(‡üÿ€8“üÿô’üÿô'J ßBMµR9Q=CZz¬ãŠI©I³bf=»?æ¨uv#C‡µi¤œÐ;U©^Ùí´¶Aš)VE9ÑÞOøàuè C³qb„%f +:÷-™,LŒ”>¼bÏa•Cô×ÇõñO…”ÂîõÞ&=d”øIÄÑBލ…½ØÆ[ÞjIî䨚K”Ñ΂r0PX9ïýA¿”xÆôþq/ƐÜ<ûuJžyYéÝx¹úoLk°ØH¢ºåñÍ}V(©3555:5q5™5¤5F6å7g9):Ø=ð=õ=›>4d0à1ä1è1ì1ô1ø122 2222$2(2024282<2D2H2ÿÿÿÿ`ð#ͨñM¬­ü”?€@dLøLLVZL À``\”üÿ L.textG*``*` `.rdataãÀ,À,@@.dataÔÀGàÀG@À.reloc2 L@ L‹D$‹hŒÚüÿPÿQYYÃU‹ì‹M MV‹u‹FDtƒ} uƒ}t3À@ë!‹H‹P‹@ë‹H‹P ‹RQPV苃Ä3À^]ÃU‹ìƒìh‹ED‰EDeD tG‹M0‰Mà‹M‰Mð‹M4‰Mè‹M8‰Mì‹M‰Mø‹M ‰Mü‹M$‰Mœ‹M ‰M ‹M(‰M¨‹M,‰M¬‹M‰M°‹MëE‹M‰Mà‹M0‰Mð‹M‰Mè‹M ‰Mì‹M4‰Mø‹M8‰Mü‹M ‰Mœ‹M$‰M ‹M‰M¨‹M‰M¬‹M(‰M°‹M,‰M´MàS3ۉM܋MW‰M˜‰]ȉ]Ì©t +ÇEȉ]̋EFPPSWVèhüÿÿƒÄ…ÀtjXëF0PSWVè'üÿÿƒÄ÷ØÀƒà_[^]ËD$;øÁüÿs‹…°Öüÿ‹L$D‰3À@Ã3ÀÃjjèŠöÿÿƒ`ƒ` YYÃV‹t$…ötÿvèöÿÿÿv èwöÿÿVèqöÿÿƒÄ ^ÃU‹ìƒìVè¼ÿÿÿ‹ð‹E‰Eè‹E ™jj‰EðEèVP‰UôÆEøè‹ÁàƒÄ=€t=t=t=u_S™W‹Ú‹øSWèùõÿÿSW‰Fèïõÿÿj‰F jFPEèPè³SWÿvEèPè¥SWÿv EèPè—ƒÄ@€}ø_[u ‹Eð Eôu‹Æë Vè#ÿÿÿ3ÀY^ÉÃU‹ìQW‹} ;=øÁüÿr3À郍E PWèÄþÿÿYY…Àtéƒ}‹½°ÖüÿS‰Eütƒ} uYÿu ÿuèøþÿÿYY‹Øë‹] …ÛtA…Ût=VWÿuÿuÿuè½öÿÿ‹ðVWÿuüÿuSè V‹øè+õÿÿƒÄ(ƒ} ^uSè‹þÿÿY‹Çë3À[_ÉÃU‹ìW‹};=øÁüÿr3ÀëiEPWè+þÿÿYY…Àtìƒ}S‹½°ÖüÿVtƒ} u@ÿuÿuèaþÿÿYY‹ðë‹u …öt(…öt$ÿuWSÿuV膃ă} ‹øuVè þÿÿY‹Çë3À^[_]ÃU‹ììPSVWH3ö¶ÁâA¶9Áç ×A¶9Áç ×A¶9 ×A‰”µ°þÿÿFƒþ|ÔjPZ;ò}Œµxþÿÿ+֋q,3q3qø31ƒÁJÑÆ‰q4uê‹H‹x ‹p‹Pƒeü‰Mø‹H‰}ð‰Mô‹Mø‹]üÁÁŒ°þÿÿMôƒû}‹Ú3Þ#ß3ڍŒ™y‚ZëAƒ}ü(}‹Ú3Þ3ߍŒ¡ëÙnë,ƒ}ü<}‹Þ ߋþ#}ð#Ú ß‹}ðŒܼë ‹Ú3Þ3ߍŒÖÁbÊÿEüÁσ}üP‰Uô‹Ö‹÷‹}ø‰}ð‰MøŒvÿÿÿ‹XًH ωH ‹HΉH‹HʋUô‰H‹H_Ê^‰X‰H[ÉËD$‹S‹\$V‹t$W‹|$ƒá?8X늃ÇÿƒÓÿˆTAFƒù@uèþÿÿ3É‹× Óuà_^[ÃU‹ìƒìSV‹u‹FW‹>¤øj^j‰]ø‰EôÁçhÈÀüÿë jjhÄÀüÿVè‚ÿÿÿ‹ƒà?ƒÄ3Ƀø8uâ…ÉuÞ!MüjX+EüÁàPÿuôWèÈjˆE jE PVèHÿÿÿƒÄÿEüƒ}ü|ÐjƒÆ_‹‹ÈÁéˆ C‹ÈÁéˆ C‹ÈÁéˆ CˆCƒÆOu݋Eø_^[ÉËD$ƒ ƒ`Ç@#EgÇ@ ‰«ÍïÇ@þܺ˜Ç@vT2Ç@ðáÒÃÃU‹ìƒì`E VPèÁÿÿÿÿuE ÿu ÿuPèºþÿÿE Pèôþÿÿ‹uƒÄ3Ɋ@ˆ1Aƒù|ô‹Æ^ÉËL$VWº´Úüÿj‹Á+Ñ^‹<‰8ƒÀNuõ!q$!q _^ÃU‹ìì,…ÉŽUEà+ES‰EԋE VƒÀ‰MÜW3ɶPþ¶pÿÁâ Ö¶0Áâ Ö¶pÁâ ։”ÔþÿÿAƒÀƒù|Òj0‰E؍… ÿÿÿ^‹‹H̋úÁÇ‹ÚÁê +Áà 3û3ú‹ÑÁ‹ÙÁË3ÓÁé3ÑúxȃÀxèN‰xuȋujY}àó¥‹uð3ҋ}ô‹ÆÁÈ ‹ÎÁÁ3Á#þ‹ÎÁÉ3Á‹]ä‹Î÷Ñ#Mø#]à3ϋ}àÁ‚Ûüÿ‹Mà„ÔþÿÿƒÂEüÁÉ ÁÇ +3ϋ}àÁÏ3ϋ}ä3}à#}è3ûϋ}ø‰}ü‹}ô‰}ø‹}è‰uô‹uì‰}ì‹}ä‰}è‹}àÈðú‰}ä‰MàŒjÿÿÿ‹Ej‰uðY‹UԋƒÀIuòÿM܋EØ…Ãþÿÿ_^[ÉÃU‹ìV‹u‹N$W‹}j@X3Ò+Á9Uw r;øs‰}ë‰ERÿuD1(ÿu Pè.ðÿÿ‹V$3ÀƒÄ‹ÊÏE…Àwrƒù@s׉V$ëQ‹E‹M +}ÁS‰EF(P3ɋßVAÁëèþÿÿÿu‹ËVèþÿÿ‹Ejƒç?ÁãÃWPF(PèÉïÿÿƒÃ@ƒÄ ^ ‰~$[_^]ÃU‹ìSV‹u‹N$‹^ W‹Áƒà?²7:Ðÿ÷ßG‹ÇÁà‹Ñ‰E+ÂjPD1(ÚjPÁãèØ ‹F$ÆD(€‹EƋËÁéˆH&ˆX'‹ËÁéˆH%ÁëˆX$F(PV‹ÏèzýÿÿƒÄ3ÿ¾ŠŒ¾ªˆQ‹ÁꈊPˆQÿŠ@GƒÿˆAþ|Ø_†¨^[]ËT$VW¹ÔÚüÿj‹Â+Ê^‹<‰8‹|‰xƒÀNuî!rD!r@_^ÃU‹ììø…ÒŽNE¼+ESV‰EœƒÁ‰U¬W3ö¶Aþ™¤ÂÁà‹ø¶Aÿ‹Ú™ ø¶ Ú¤ûÁç™ ø¶A Ú¤ûÁç™ ø¶A Ú¤ûÁç™ ø¶A Ú¤ûÁç™ ø¶A Ú¤ûÁç™ ø¶A Ú¤ûÁç™ ø ډ¼õýÿÿ‰œõ ýÿÿFƒÁƒþŒmÿÿÿ…xýÿÿ‰MŒ‰EüÇE¨@‹H˜‰M°‹Hœ‰M´‹‹@3ö‹ù‹Ø¬ß ÷‹ÑÁ⠋ø‰M”‰E˜¤ÈÁë ÓÁáÁï ù‹M”3÷‹}´3Û Ø‹E˜¬Á3Ӌ]´3ñÁè3ЋE°‰uˆ‹ð¬þ‰U3Ò Ö‹È‹ð¬ØÁáÁïÁæ ÏÑë ó3΋u°3ÿ ø‹E´¬Æ3×3֋uˆÁè3ȋEüò‹UÑpP”pØP܉p‰PƒÀÿM¨‰Eü…5ÿÿÿ‹uƒeüjY}¼ó¥‹U܋uà¤Ö‹Eà‹}܋]àÁâ¬ß3É Î3ö ÷‹}ÜÁè ‹UÜÁâÁë Ӌ]à3ʋUܬß3ÆÁâ3ö ÷‹}ä#}Ü3ƋuàÁë Ӌ]è#]à3ʋUÜ÷Ò#Uì÷Ö#uð3×3ó‹Uü΂Üüÿ‹uÀŠÜüÿ„ýÿÿ‹}¼Œ ýÿÿEô‹U¼Mø‹]À¬ò¤û‰E ‹E¼‰M¤3É Ê‹UÀÁîÁà ÆÁêÁç ׋}¼3ö ó‹]À3ʋUÀ¤û3ÆÁê3öÁç ׋}Ä#}¼3ʋUÄ3U¼ ó#Ű]È#]À3ƋuÈ3uÀ3×#uÐ3óʋUì‰Uô‹Uð‰Uø‹Uä‰Uì‹Uè‰Uð‹U܉Uä‹Uà‰Uè‹UÔÆU ‹uØu¤M ‰U܋UÌE¤ƒEü}ü€‰UԋUЉU؋UĉŰUȉUЋU¼‰UċUÀ‰uà‰UȉM¼‰EÀŒpþÿÿ‹E‹MœjZ‹40‹tpƒÀJuîÿM¬‹MŒ…Çüÿÿ_^[ÉÃU‹ìV‹u‹ND¸€3Ò+ÁW‹}9Uw r;øs‰}ë‰ERÿuD1Hÿu PèHëÿÿ‹VD3ÀƒÄ‹ÊÏE…Àwrù€s׉VDëP+}‹E‹M SÁ3ҋߍNHVBÁë‰Eè üÿÿ‹MV‹Óèüÿÿ‹EjƒçÁãÃWPFHPèáêÿÿƒë€ƒÄ^@‰~D[_^]ÃU‹ìSVW‹}‹OD‹_@‹Áƒà²o:Ðö÷ÞF‹ÆÁà‹Ñ‰E+ÂjPD9HÚjPÁãèð‹GDÆDH€‹ENjËÁéˆHF‹ËÁéˆXGˆHEÁëOHW‹ÖˆXDè~ûÿÿƒÄƒe‹]Áã4;Šœ;NˆCjÿvÿ6èLˆjÿvÿ6è>ˆCÿjÿvÿ6è/ˆCþj ÿvÿ6è ˆCýj(ÿvÿ6èˆCüj0ÿvÿ6èƒÄHˆCûj8ÿvÿ6èðƒÄ ÿEƒ}ˆCúŒpÿÿÿ‡H_^[]ÃUl$˜ìȍE VPè¶÷ÿÿÿuxE ÿutÿupPè2ùÿÿE PèØùÿÿ‹u|ƒÄ3Ɋ@ˆ1Aƒù |ô‹Æ^ƒÅhÉÃU‹ììˆ…xþÿÿVPèMúÿÿÿu…xþÿÿÿu ÿuPèÆýÿÿ…xþÿÿPèmþÿÿ‹uƒÄ3Ɋ@ˆ1Aƒù@|ô‹Æ^ÉËÑÁꈋÑÁêˆP‹ÑÁêˆPˆHö¶PÁá ʶP¶@Áá ÊÁá ȋD$‰ÃU‹ìQEüPFèËÿÿÿÿuWÿuüV考ąÀt¸PÉÍEüPGè¤ÿÿÿ‹EüYÉÁìWh|$è®ÿÿÿY_ÄÃé`V¾ŒØüÿèÒÿÿÿ^ÃV¾€ØüÿèÅÿÿÿ^ÃV¾hØüÿè¸ÿÿÿ^ÃU‹ìƒìlVjjlE”hìÙüÿPèDèÿÿ‹MƒÄE èÿÿÿ‹M EÚèÿÿÿ‹MEáèüþÿÿu”èqÿÿÿ^ÉÃU‹ììVWjh…øþÿÿhäØüÿPèòçÿÿ‹uN…úþÿÿè½þÿÿ‹M…ÿÿÿè¯þÿÿ‹Î… +ÿÿÿè¢þÿÿjVÿu …ÿÿÿPè´çÿÿh½øýÿÿµøþÿÿèºþÿÿƒÄ$_^ÉÃU‹ìì VWjjEàhÈØüÿPèzçÿÿ‹MEêèKþÿÿ‹MEòè@þÿÿh½àþÿÿuàèmþÿÿ‹ðƒÄ…öu*9Ev%EüP…êþÿÿè+þÿÿVÿuü…îþÿÿPÿu è!çÿÿƒÄ_‹Æ^ÉÃV¾¼Øüÿèfþÿÿ^ÃV¾°ØüÿèYþÿÿ^ÃV¾˜ØüÿèLþÿÿ^Ãjjjÿè‰þÿÿƒÄ ÃV¾<Øüÿè0þÿÿ^ÃV¾$Øüÿè#þÿÿ^ÃU‹ìƒìVjjEðhØüÿPè¯æÿÿ·EüŠMƒÄuðˆLðèòýÿÿ^ÉÃU‹ììVWh½ÿÿÿ¾ü×üÿè’ýÿÿY_^…ÀuPj…ÿÿÿPÿuè]æÿÿƒÄ3ÀÉÃU‹ìEèƒìPè±ÿÿÿY…Àu$‹M…ÉtŠUꈋM …ÉtŠU숋M…ÉtŠUùˆÉÃQjD$PjèøýÿÿƒÄÃU‹ìƒìHVWjj&E¸h¤×üÿPèïåÿÿ‹MEÂèÀüÿÿ·EÜjjÿu D¸PèÏåÿÿj}àu¸èÞüÿÿƒÄ$_^…ÀuPjEêPÿuèªåÿÿƒÄ3ÀÉÃU‹ì‹EëƒEÿŠM ˆƒUÿ@‹M Muê]ÃU‹ì‹E3Ò9Uu +9Uu3À@]ËM V+ÈWƒEÿ¶4¶8ƒUÿ3÷ ֋u@ uuä3À…Ò_•À^]ÃU‹ìV‹u€~t3Àë8S‹]W‹};^ rw;~vÆF3ÀëSWÿ6ÿu èåÿÿ>‹E ƒÄ)~^ _[^]ÃU‹ìƒì 3À‰Eô‰Eø‰Eü9vBSVW‹Uü‹E‹qÁâ‹2‹83ö3Û+ú‹Uøދuô÷Ӊ0‹ÂÁøÿEü‰Eø‹Eü‰Uô;rÄ_^[ÉÃU‹ìƒì‹MSWÿ13ÀPÿu èà ‹È‹E‹‹Ú3ÒȋFÚ¯Á‹Vÿ2‰Mä3ÉQP‰Eìèš 3ɃÄEä‹úù‰Eð3À@‰Eü9vt‹U‹EJ+‰Mø‰Eôë‹Eôÿ43ÀPÿu è] 3ÉÃыMø‹ 3ÛÁ‹Mü‰Eä‹Fÿ4ˆÓ3ÀPÿuì‹Úè3 3ɃÄÇÑEäыMøÿEü‰Aü‹EüƒÁ‹ú‰Mø;rŸ‹U3À3ÉûȋEü‰|‚ü3À Á_[t R‹Îè·þÿÿƒÄÉÃVW‹ð3ÿ3À9>v%‰<ƒ@;rø9>vÿt$‹D$ÿ4¸SèâþÿÿƒÄ G;>rç_^ÃU‹ìƒìSVW‹ø‹ñ‹3ÛÁàSPè?ãÿÿ‰Eô‹ÁàSPè0ãÿÿ‰Eø‹ÁàSPè!ãÿÿ‰Eü‹ƒÄ3É;Ã~1+Á‡¶Pü¶XýÁâ Ó¶Xþ¶@ÿÁâ ÓÁâ ЋEô‰ˆ‹A;È|Ïÿv ‹]øÿuô‹ÆèDÿÿÿYYÇEðÿuø‹]üÿuø‹Æè+ÿÿÿSS‹]ø‹ÆèÿÿÿƒÄÿMðuÜÿuô‹ÆS‹]üè ÿÿÿYY‹…Ét#‹V+Ӎ‹‰Uðë‹Uðƒè‹‹I;Úrw…Éuêÿuü‹Îè†ýÿÿƒÄ‹6ë!‹Eü‹°‹ÈÁéˆG‹ÈÁéˆG‹ÈÁéˆGˆGNyÜÿuôè@âÿÿÿuøè8âÿÿÿuüè0âÿÿƒÄ _^[ÉÃU‹ìQ‹ESVWÇEü…À„ºƒ} „°ƒ}„¦‹‹]‹ÈÁá;Ù…”¶M; øÁüÿ„‹ñÁ拎°ÖüÿÁé;Áur3ÀPSè­áÿÿ‹øY3ÀY…ÿtaPSÿu Wè®áÿÿ‹M‹Çè4þÿÿ‹Ž”Þüÿ‹¶àÖüÿ‹Æ™RPQWè üÿÿƒÄ …Àtƒeüj+ÞSÿu÷VèîûÿÿƒÄ…ÀtƒeüWè[áÿÿ‹EüYë3À_^[ÉÃQ$Pè¥YÃÿt$ÿt$ÿt$ÿt$h`ÚüÿhÔþèôƒÄÃéÌÿÿÿU‹ì€} ‹ESŠt8‹E#EVWƒÏÿ;Çu‹÷ëÿuÿu荋ð‹ú‹EŠ„Ûx WV膄Àtì_^ŠÃ[]ÂU‹ì‹E#ESVWƒÏÿ;Çu‹÷ëÿuÿuèJ‹ð‹úŠE +E E ÿuÿuÿu ÿuèrÿÿÿ€} ŠØt„Û}/ŠÃ"E:Eu„]t WVè„ÀtɊÃ"E:Eu ŠE„Øu3À븀_^[]‹D$Æÿ5(ßüÿÿ5$ßüÿjj j5PèZÿÿÿ‹D$ƒÀÆ@ÿ50ßüÿÿ5,ßüÿjj@jPè5ÿÿÿÂÿt$ ‹D$ÿt$ ƒÀjjjPèÿÿÿ VWÿ58ßüÿ‹|$ÿ54ßüÿwjVè©þÿÿ„À|¸€ë#¨t¸€ë€|$Æ t jÿjÿWè›ÿÿÿë3À_^ÂS‹\$V‹t$ W~Ѝ@u.ÿ58ßüÿÿ54ßüÿjWèNþÿÿ„À|¸€ëX¨u …Ûv¸€ëI‹D$ƒûr‹ËÁ鋃ÀƒëI‰V$uò…Ûv Š@KˆN$u÷ÿ58ßüÿÿ54ßüÿjWè÷ýÿÿ„À}©¾ÀƒàÑè_^[ V‹t$Wÿ58ßüÿ~ÿ54ßüÿjWèÈýÿÿ„À|¸€ë[¨u¸€ëP‹T$‹D$ƒúr‹ÊÁéS‹^$‰ƒÀƒêIuò[…Òv ŠN$ˆ@Ju÷ÿ58ßüÿÿ54ßüÿjWèoýÿÿ„À}§¾ÀƒàÁè_^ U‹ì¶E ƒì ƒèVWUô„ƒèb„óHHjY„µ+ÁtDƒè +t(ƒèt3À@éô‹E‹f‹@üfÁÀjf‰EôYéȋE‹‹QüƒÁ‰‹Iü鱋E‹‹Hüf‹fÁÀf‰Eô‹A‹ø‹ÐS¾ÿ#þÁê ú‹Øºÿ#ÂÁã ؋A‹È#΋ðÁî ΋ðÁæ#ÂÁã ðÁï ûÁéÁæ Îj +‰MúY‰}öUô[ëD‹E‹‹@ü‹ð‹øÁïæÿ ÷‹øçÿÁà øÁîÁç ÷‰uôë‹Eƒ‹Š@ü3ɈEôAQRÿuè¸ýÿÿ븀_^É U‹ì‹Eƒ‹SŠ] ¶ÓƒêV‹qü„âƒêbt2JJt*ƒêt!ƒê +tƒêt3À@éÇjYëƒÁ‰‹Iüë j +ëïjëë3ÉAQVÿuèÙýÿÿ‰E €ûdtj€ûht€ûw…ƒfÁë}‹NfÁ‹Á‹ÑÁêW¿ÿ#Ç Â‹ÙÁãºÿ#Ê Ù‹NÁèÁã ÉF‹Ù#ڋÁ‹Ñ#×ÁàÁé à ÑÁàÁê ‰F_ë'‹‹È‹ÐÁêáÿ ʋÐÁâ%ÿ ÐÁéÁâ ʉ‹E 븀^[] U‹ìQQSV‹uE»–»üÿV‰]ü‰Eøèîûÿÿ…À|fW3ÿG‹U Š +„ÉtX€ù%u8BEøP‰U ¶PVÿUü;Çu8‹M €9/t ‰}‹M…Éuùë$WVèìûÿÿÇEüÒ¼üÿë9]üt¸€ëWRVèüÿÿÿE …À}Ÿ_ÆF@^[ÉËL$…Éu¸€ë¸Ôþ‰Š<ÿu¸€ëÿ1è0ûÿÿÂÌÌÌÌÌÌÌÌ̋D$ÈÂ1D$T$Â1;T$u;D$—ÀóÂU‹ìQ苍UüRÿuPÿQLƒÄ …À}ƒeü‹EüÉÃé ÌÌÌÌÌÌÌÌÌÌÌPP<$XZÃÌÌÌÌÌÌÌo|$ÃÌÌÌÌÌÌÌÌÌÌU‹ìQ‹E‹U ‹Mƒá?­ÐÓêƒù r‹Â3ÒYÉÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌU‹ì‹E÷ePR‹E ÷eZÐXÉÃLoadFirmware() returned %d, firmware_index=%d +S3Resume() returned %d +LWRG‰ù#Äܧ)‹>23E…PØÝß)5k¥c¿qWX¾Ò}P?‹&:Preamble signature check failed.Preamble invalid.Public key invalid.Key block hash failed.Key block signature failed.Key block invalid.Success.CHROMEOS€RSA8192 SHA512RSA8192 SHA256RSA8192 SHA1RSA4096 SHA512RSA4096 SHA256RSA4096 SHA1RSA2048 SHA512RSA2048 SHA256RSA2048 SHA1RSA1024 SHA512RSA1024 SHA256RSA1024 SHA1ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0!0 + ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ010  `†He ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0Q0  `†He@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0!0 +010  `†He ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ010  `†He ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0Q0  `†He@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0!0 +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ010  `†He ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0Q0  `†He@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0!0 +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ010  `†He ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0Q0  `†He@0!0 +0Q0  `†He@€€€l`@ìàÀìàÀìàÀ @ @ @ @@@€@@€@@€@@€Á" +ÁeÁe ÁeÁ r +Á +oÁ +pÁ +]Á|Á +SÁ +PÁ ™Á ™Á @ + Á @ +Á @ + Á @ +ÁÏ +ÁÍ +ÁeÌ FM <%r%/%r}•üÿȖüÿ€Dßüÿ„Úüÿ¬Àüÿ˜Àüÿ|ÀüÿdÀüÿPÀüÿ<ÀüÿÀüÿgæ j…®g»rón<:õO¥RQŒh›«ÙƒÍà[ɼógæ j;§Ê„…®g»+ø”þrón<ñ6_:õO¥Ñ‚æ­RQl>+Œh›k½Aû«Ùƒy!~Íà[˜/ŠB‘D7qÏûÀµ¥Ûµé[ÂV9ññY¤‚?’Õ^«˜ªØ[ƒ¾…1$Ã} Ut]¾rþ±Þ€§ܛtñ›ÁÁi›ä†G¾ïƝÁÌ¡ $o,é-ª„tJÜ©°\ڈùvRQ>˜mÆ1¨È'°ÇY¿ó àÆG‘§ÕQcÊg))… +·'8!.üm,M 8STs +e» +jv.Ɂ…,r’¡è¿¢Kf¨p‹K£QlÇè’Ñ$™Ö…5ôp jÁ¤l7LwH'µ¼°4³ 9JªØNOʜ[óo.htoc¥xxȄnjúÿ¾ëlP¤÷£ù¾òxqÆ"®(ט/ŠBÍeï#‘D7q/;MìÏûÀµ¼Û‰¥Ûµé8µHó[ÂV9жññY›O¯¤‚?’mÚÕ^«B£˜ªؾopE[ƒŒ²äN¾…1$â´ÿÕÃ} Uo‰{òt]¾r±–;þ±Þ€5Ç%§ܛ”&iÏtñ›ÁÒJñžÁi›äã%O8†G¾ïµÕŒ‹ÆÁeœ¬wÌ¡ $u+Yo,é-ƒä¦nª„tJÔûA½Ü©°\µSƒÚˆùv«ßfîRQ>˜2´-mÆ1¨?!û˜È'°äï¾ÇY¿Â¨=ó àÆ%§ +“G‘§Õo‚àQcÊpn +g))ü/ÒF… +·'&É&\8!.í*ÄZüm,Mß³• 8SÞc¯‹Ts +e¨²w<» +jvæ®íG.Ɂ;5‚…,r’dñL¡è¿¢0B¼Kf¨‘—øÐp‹KÂ0¾T£QlÇRïÖè’Ñ©eU$™Ö* qW…5ô¸Ñ»2p jÈÐÒ¸Á¤S«AQl7™ëŽßLwH'¨H›áµ¼°4cZÉų 9ˊAãJªØNsãcwOʜ[£¸²Öóo.hü²ï]t`/Coc¥xr«ð¡xȄì9dnj(c#úÿ¾é½‚ÞëlP¤yƲ÷£ù¾+SrãòxqƜa&êÎ>'ÊÂÀ!Ǹ†ÑëàÍÖ}ÚêxÑnîO}õºorªgð¦˜È¢Å}c +® ù¾˜?G5 q„}#õwÛ(“$Ç@{«Ê2¼¾É +¾žË¾ÔÅL*~eüœ)YìúÖ:«oË_XGJŒDlŒÁüÿüÁüÿ\ÂüÿœÂüÿœÃüÿ|Äüÿ<Åüÿ,Çüÿ ÉüÿÌÊüÿ¼ÎüÿœÒüÿ\ÖüÿˆÃüÿlÖüÿ\ÖüÿˆÃüÿlÖüÿ\ÖüÿˆÃüÿlÖüÿ\ÖüÿˆÃüÿlÖüÿ|ÁüÿlÁüÿ\ÁüÿLÁüÿ<Áüÿ,ÁüÿÁüÿ ÁüÿüÀüÿìÀüÿÜÀüÿÌÀüÿ@@@ÿ•òÞÿŸMºL=‹Ðje,g2©347Þ8æ8ë8å9ö9`:™;®;=Œ=ê=I>‹>0‡00¦1Ê1B2d2Z4e4`5W6D8‹:”:Ì>Ù>æ>?R?Ê? D80E0R0n0{0•0Ï0U1f5w5¬5²56 772787m7w7Ï7Õ7&8,8R8[8®8´8(;€;@hÀ7Ä7Ì7Ð7Ô7Ø7Ü7à7ä7è7ì7Ð;Ô;Ø;Ü;à;ä;è;ì;ð;ô;ø;ü;<<< <<<<< <$<(<,<0<4<8<<<@ƒ}ô uÇë&‹UüÁê3ÉÇ ;Öv‹\̀Áã pA;Êrï‹]ÿuü…|ÿÿÿPWSèMƒÄ_^[ÉÃU‹ìQ ¤€à¨tjjlèWjjmèNƒÄSjlè jmŠØèYYˆEü„Àx&„Ûy€Mü öÃ@t€Mü@öà t€Mü ÿuüjmè YY[ÉÃ<ÿu2ÀÄÀy$¶ÀPè Y¶Àë/< s± ë±8àV¶ðf¶ÁfD$·ÀPè1 3ÒY‹ÎBÓâ^#ÂÓè¶L$;Á”ÀË3É9˜ýüÿtAƒù rñƒù s3À94…˜ýüÿt @ƒø rñ¸€Ã;Ás‰23ÀËD$·H·@P·ÁPè YYÃU‹ìS‹]VW‹}MQ3öVV‰7‹hÿüÿSÿP ƒÄ…À|‹E‹VWjPSÿQƒÄë‰u‹E ·H·pPS‰Mè”ÿÿÿYY„Àtj ^‹×èLÿÿÿ‹h|þüÿSÿPYYë<ÿuVèw +YY„Àt j^‹×è$ÿÿÿë!ÿuVèÎ +YY„Àtjjh”ÿüÿS莃ā'ÿè;þÿÿjm^Vè| Y¨ t jÿu°è€þÿÿYY„Àtjÿu°&èhþÿÿYY„ÀuVèA Y„Àt<wë +jVèQ YYjÿu°"è5þÿÿYY„ÀtVè Y¨@tVè÷ €ˆEÿuVè ÿ7‹SÿP,‹MƒÄ…Ét‹WjQSÿƒÄ3À_^[]Ãfº€°„î‹D$‹h˜þüÿPÿQYYÃU‹ìƒì4SV‹u3ÛW3ÿˆ]þÆEÿ‰]ô‹MôQSWhtÿüÿVÿP ƒÄ;Ã|EìP‹EôPVÿƒÄ 9]ìu Gëˆ]ÿ8]ÿuÊ8]ÿ„Sfº€°…îEÌPEðP‹EôSPV‰]ðÿP‹ÈƒÄ;Ë}fº€°†î‹Áé!EÌhÔÿüÿPèûYY„ÀuFEÌhÄÿüÿPèçYY„Àu2EÌh´ÿüÿPèÓYY„ÀuEÌh¤ÿüÿPè¿YY„Àu +¸€éNjMÜQ‹MðIÁé AQjVÿPHƒÄ;ÃŒ§‹EÜP‰Eè‹EôSPVÿPƒÄ;ÃŒŒfº€°‡î‹MøQVÿP0YY‹Mø·‰Eä¸ÿÿ‹øf;×tNfƒúu09Yw yv"‹Uè‰Q‹Mø‰Y ‹Mð‹Uø‰J‹Mø‰Y‹MøÆEþ·QʉMø·‹øf;×u·8]þuSÿuðSÿuèVè;ƒÄë‹Eä_^[ÉÃU‹ìQVÿu ‹uVè>þÿÿYY…À})‹MüQjjhÿüÿVÿP ƒÄ…À|‹Eü‹jPVÿQ(ƒÄ ^ÉÃÌÌÌÌÌÌÌÌU‹ìQ‹E‹U ‹Mƒá?¥ÂÓàƒù r‹Ð3ÀYÉÃU‹ì‹E‹URj0jPÿQ4ƒÄ…À|8‹E‹M ‰H‹E‹M‰H‹M‹E‰A ‹M‹E‰A$‹M‹E‰A(‹E ‹M‰A,3À]ËT$ ‹D$‹V‹t$VƒÂRjPÿQ4ƒÄ…À|W‹>‹t$ƒÇ¥¥¥¥3À_^ÃU‹ìQV‹uEüPÿuÿu Vè´ÿÿÿƒÄ…À|ÿuƒEüÿu‹ÿuüÿPPƒÄ 3À^ÉÃU‹ì‹E‹URjjPÿQ4ƒÄ…À|&‹M‹E ‰A‹M‹E‰A ‹M‹E‰A‹E‹M‰A3À]ÃU‹ìV‹u‹MQjjVÿP4ƒÄ…À|'‹EŠM ˆH‹EŠMˆH ‹M‹jƒÁ +jQÿPTƒÄ 3À^]ÃU‹ìS‹]‹MQj0jSÿP4ƒÄ…À|lV‹u…ötW‹}ƒÇ¥¥¥¥_ë‹M‹jƒÁjQÿPTƒÄ ‹M‹E ‰A‹M‹E‰A‹M‹E‰A ‹M‹E‰A$‹E‹M ‰H(‹M‹jƒÁ,jQÿPTƒÄ 3À^[]ÃÌÌÌÌÌÌÌÌÌôà ÃÃU‹ì`‹E¢ƒ} t‹} ‰‰_‰O‰W aÉÃU‹ìQ‹M2YÉÃU‹ì`‹M‹E ‹U0aÉÃ1ÃP ÀÈ$`<`t   À `"ÀXÃP  À%ÿÿÿŸ"ÀXÜXÃúÃûÃU‹ì`‹E‹M ¢‹}‰‰_‰O‰W aÉËD$‹‹L$+u‹P+Qu‹P+Qu ‹@ +A u°Ã2ÀÃÌÌÌÌÌÌÌÌÌÌÌÌU‹ìƒÄøW‹M ‹}‹Ç$„Àt ƒùt[ÆGIëì‹ÑÁéÁá+ÑÁéƒùt2EøïÀGGGG G(G0G8ƒÇ@IuÛoEøw‹ÊÁé3Àó«‹Êƒáóª_ÉÃÌÌÌÌÌÌÌÌU‹ìƒÄøVW‹M‹u ‹}‹ÆÁ;Çv‹ÇÁ;Æv;÷„º‚ ƒù„«‹×€â„Òt ŠˆIGFëå‹ÁÁèÁà+ÈÁèƒøtQEøooFGoFGoFGoF G oF(G(oF0G0oF8G8ƒÇ@ƒÆ@Hu¹oEøwƒùr‹‰ƒéƒÆƒÇëìƒùtŠˆIFGëòñNùOƒùt ŠˆINOëò_^ÉÃÇ„€àjLj€àjÇŒ€àè‹jjbè‚jjcèyjj0èpjhõèòƒÄ(ÃV3öÿt$è‹Y¨ujèbFYþrḀ^Ã3À^ÃV3öÿt$è^Y¨tjè5FYþrḀ^Ã3À^Ãh¡hèShè$ƒÄ „D$jX•ÀÃh÷èžY$ÃÌÌÌÌÌÌÌÌU‹ìRf‹UìZÉÃU‹ìRf‹UfíZÉÃU‹ìRf‹UíZÉÃU‹ì`ŠE f‹UîaÉÃU‹ì`f‹E f‹UfïaÉÃU‹ì`‹E f‹UïaÉÃ2ÀÃjfè8ÿÿÿhjfè»ÿÿÿjfè%ÿÿÿÿt$jbè©ÿÿÿjfèÿÿÿÿt$$jbè—ÿÿÿƒÄ$Ãjfèýþÿÿh€jfè€ÿÿÿjfèêþÿÿÿt$jbènÿÿÿjfè«þÿÿjbè;ÿÿÿƒÄ Ãÿt$j.èQÿÿÿÿt$j/èFÿÿÿƒÄÃU‹ìƒ}tcSVW»Sèÿÿÿ‹ø‹EiÀfYjd3Ò^÷ö‹ÏD8‹ðÁî%ÿÿÿ‰EëSèñþÿÿY‹È;ÏwN‹ù…öuìë;ùwS‹ùèÕþÿÿY‹È9Mwì_^[3À]ËD$ D$u3ÒÃÿt$ÿt$è#PjjèƒÄÃÿt$ ÿt$ ÿt$ è4ƒÄ ËD$‹T$VƒÎÿë jRPFè3ƒÄ ‹È Êuí‹Æ^ÃÌÌÌÌÌÌÌÌÌÌ̊L$ 3À‹T$öÁ DÂDT$¥ÂÓàÃÿt$ ÿt$ ÿt$ èƒÄ ÊL$ 3ҋD$öÁ DÐDD$­ÐÓêËD$ƒ`ƒ` ÇàþÇ@àà H¢à¶žàƒà ¢žàÃV·t$WVèRƒÆV·øèFYY·À÷ǀtG%¹f;Áu8 ¤€à¨u/÷Çt#·D$p,Vè ¹ÿßf#Á·ÀPVèƒÄ °ë2À_^ÃV·t$WVèàƒÆV·øèÔYY÷ǀ_·À^t¹#Áf;Áu°Ã2À÷D$V‹t$ WxWè·ƒ|$Yu Æë÷Ö#ÆPWè§YY_^ÃV·t$ W·|$ Wèqƒ|$Y·Àu Æë÷Ö#ÆPWèbYY_^÷D$V‹t$ Wx(WèVƒ|$Yu Æë÷Ö#ÆPWèFYY_^÷D$V‹t$ Wx4Wè&ƒ|$Yu Æë÷Ö#ÆPWèYY_^ÃV‹t$W¸$jPVè+ÿÿÿ¿<‹ÇjPVèÿÿÿjWVèÿÿÿƒÄ$_^ÃU‹ìQSV‹u¸ jf‰Eüÿuü3ÛVèÿÿÿjSVèäþÿÿj¸û_€PVè7ÿÿÿj¸thPVèYÿÿÿ ¤€à ¢¤€à ¢€àƒÄ0 ^¢¢€à[ÉÃU‹ìQ·EPèNYf‹È¸‹Ðf#Êf;Êujf‰Eüÿuüÿuè§þÿÿÿuè0ÿÿÿƒÄÉÃU‹ìQMüjÿuüÿuèRþÿÿƒÄ ÉÃf‹T$fí·ÀÃf‹T$f‹D$fïÃf‹T$íÃf‹T$‹D$ïÃU‹ìQ‹E‹VUüR3öVVhTýÿP‰uüÿQ ‹E ‹Mü‹Q‰P@‰pD‰pLÇ@H‹Q‰P‰p‰pÇ@@‹Q‰P º‰p$‰p,‰P(‹I ƒÄ‰p4‰p<‰H0‰P8^ÉÃU‹ìQ‹E‹VUüR3öVVh<ýÿP‰uüÿQ ‹E ‹Mü‹Q +‰pd‰pl‰P`Ç@h‹IƒÄ‰pT‰p\‰HPÇ@X@^ÉÃjpèjúÿÿ$€ +D$¶ÀPjpè~úÿÿjqèRúÿÿƒÄÃjpèGúÿÿ$€ +D$¶ÀPjpè[úÿÿÿt$jqèPúÿÿƒÄÃMemoryTypeInformation €ðìüÿjìüÿ€4ÿüÿ´þüÿÌýüÿ€¤þüÿÐýüÿ $ÿüÿVìüÿ €ÿüÿÌäüÿ)ëüÿ3ëüÿ9ëüÿ€äþüÿþüÿ @ +€€€€Tÿüÿ€ôþüÿòüÿ€dÿüÿ”þüÿy)ë0÷°`M²Ü,–αôô~š@ÁÑK¸„$ LæZ SÁ˜è$L†‰¤´¼ÅÈ¢ÿ•òÞÿŸMºL=‹ÐjeQeÒÀt#*B—"¬#·óÜØ=ÛDœ4ô‘K޳08±„«ü?æ¨uv#C‡µi¤œÐ;U=d”øIÄÑBލ…½ØÆ[ޕ(Ô«ÏxrH„D\ ûÚH×tŒüæN’ˆÄ¾À’¤ƐÜ<ûuJžyYéÝx¹újIî䨚K”Ñ΂r0PB•mû-aEO‡/\ÿRé=Ï%Îâ jD§E¿É7Ú&4K7?ˆ†)àˆÐHK‚ ºÿݬ¦h5ÅýF©]»«™ŒÎûL2F  ˜Æ®.±†™¬\É åH€h»•õ@ +Ÿu.=..›-A´±pAk‡ÿ¶s…³bÅJµ‚æY8׃ŸL7AÓMœ‹—¨?ýúÍ3KV*ɓE¿$sä>+>B>W?m?º?H0B0)1W1Ã1×1ë1ÿ13/=¢= >¤>¬>¸>¼>Ä>È>Ð>Ô>Ü>à>è>ì>ð>ø>ü>T?`?h?p?t?ÿÿÿÿýfâW¬‡|K¼YemAéÊí#@<ø$VZL ¨ ,ýÿ`<.textò   `.data@ @ @À.reloc<`@`U‹ìQ‹E‹UüRURjhìýÿPÿQ ÿu$‹Eÿu ƒÀÜÿuÿuÿuÿuPèƒÄ0ÉËD$¶T$‹HV‹pjòVQÿpÿQƒÄ^ËD$¶T$‹HVÿt$‹pjòVQÿpÿQ ƒÄ^ÃU‹ìQV‹u‹F‹WUüRjjhüýÿPÿQ ‹Mü3Ò¸@B÷1ƒeƒÄ‹ø…ÿv(jVÿVYY‹M ˆ¨Žu‹Eüÿ0PÿvÿPƒÄ ÿE9}rØ2À_^ÉðëøSV‹t$W‹|$^ Sjj‰6ÇFpsmb‰~‹hÜýÿWÿP ‹‹@d‰F‹‹‰NÇF ýÿÇF,ýÿÇF QýÿÇF$€ÇF(ìýÿÇF,ÌýÿÆF0ŠHƒÄˆŽÔ‹@ _‰†Ø^[ÃU‹ìQSVWfº€°yî‹u ‹MüQhÜVÿPLÿuüVèWÿÿÿ‹‹xh‹Eühàÿÿp‹@ ‹@3ÛSƒÈ PjWVÿW‹Eü‹@ ‹@jjSƒÈPjWVÿW‹Eü‹@ ‹@ƒÄLjjSƒÈ@PSWVÿW‹Mü‹ƒÁ$QVÿP‹EühÿSPÿPƒÄ0_^3À[Éø€ÃV‹t$jVÿVYY¨@t¸€^èthÿjVÿVƒÄ ëå3À^ÃU‹ìƒìW3ÿÆEÿÆEþ9}tƒ}t9}t9} u +¸€éDV‹uVè–ÿÿÿ;ÇYŒ0‰}èSŠE À ˆEùŠEˆEì‹E2Û3ÿˆ]ðƒø ‡³ÿ$…ŽýÿþMù€}„¶¿€éÒ‹E ŠþMùˆEì³3ÉA‹E9s¿€‰ëz‹E ¶PjVÿVƒÄ þMù³ëÖ³ jYëÒþMù³ ‹E ¶@PjVÿV‹E ¶PjVÿVƒÄë֋EŠþMùˆEþ³ë0‹E‹³ƒø‚(ƒø ‡ÆEðë³뮿€…ÿŒ0€}t€Mðƒ} …Ýh€jVÿVÿuùjVÿVÿuìjVÿV‹E¶PjVÿVÿuðj VÿV‹E ¶PjVÿV€Ã@¶ÃƒÄHPjVÿV¶]þ3À@ƒÄ ‰Eô;؆´EÿPVÿV YY„ÀtGöEÿuHöEÿtjjV¿€ÿVƒÄ ë‹Mô‹E ¶PjVÿVh€jVÿVƒÄÿEô9]ôr­ë_¿€ëXj VÿV$¶ø÷ßÿYƒçYÇ€ëÿÿÿ·E2ۉEø3ÿf‹7¹ÿÿf;Át.ŠÃEj¶ÀPÿuÿuèéúÿÿǍD0·áüÿƒÄ Mf‰þÁÇ€ûv·‹Eô·Háüÿ Mf‰H‹E f‹Møf‰3À[_^ÉÃU‹ìQ¶E¶U Áà¶USV4ÂÁæ f‹º†€2ÉWf;Ât€} t ŠF¨€vþÁ‹EHtHtHtƒeüëÇEüëÇEüëÇEü„ÉuRjÿuÿu ÿuèúÿÿƒÄ…Àu‹M3Àf‰¸€éãÆf‹H fÁé +fƒá·Ù·H#]üáüÿ Ëf‰Hé²j[ÆE¶}Áç f‹7¹ÿÿf;Át2ŠEEj¶ÀPÿu ÿuèªùÿÿƒÄ…Àt‹øf‹D7 fÁè +fƒà·À#ØþE€}v°#]üÆE¶}Áç f‹7¹ÿÿf;Át6ŠEEj¶ÀPÿu ÿuèSùÿÿƒÄ…À„0ÿÿÿøD7·áüÿ Ëf‰þE€}v¬‹Ef‰3À_^[ÉÃU‹ìQjÿuÿu ÿuè +ùÿÿƒÄ…Àu¸€ÉöM¶U ÁáʶU ÊVÁá W4f‹†à¿‹Ïf…Áu +¸€éÄS‹]ÆEüjÿuüÿuSè­øÿÿƒÄ…Àt)¶U¶ËÁáʶUü ÊÁá f‹„à‹Ïf…Á„‚þEü€}ür¹Š†à @ˆ†àÆEü3ÿjÿuüÿuSèRøÿÿƒÄ…Àt ¶U¶ËÁáʍ ÏÁá „àŠ€É@ˆþEüG€}ürÁІà ˆ†àf‹†à¹f…Áuï3À[_^Éø€ëôU‹ìQS‹]ÆEüjÿuüÿu SèÚ÷ÿÿƒÄ…ÀuZþEü€}ürâVˆEü3öjÿuüÿu Sè¶÷ÿÿƒÄ…Àt(¶U ¶ËÁÁáʍ ÎÁá D·Éf‰þEüF€}ür¹^[ÉöU ¶ËÁÁáʶUü ÊÁá ‹D ëÛðððð@@†€‹ÿ†€Œ†€Œÿ†€šÿ†€"Bÿ†€'Bÿ†€(Bÿ†€2Bÿ†€5Bÿ†€6Bÿ†€7Bÿ†€:Bÿ†€;Bÿ†€­>µ>Ð>è>ð>00080R0j0r0ÿÿÿÿ§¹³ý‚wLœlCÈQòS>{@Tø(•(Ô«ÏxrH„D\ ûÚ?æ¨uv#C‡µi¤œÐ;UVZL ¸ý@Ìýÿ€ .text@ @ `.data ` `@À.reloc€ €U‹ìƒì ‹EƒeøS»ÿVWÆEÿÆEþ9t_‹}‹u ‹ƒétItVIu¶HŠPÏ"ÆEþ +PˆÿEø‹E‹MøÈ9uπ}þt"‹E W‰EôEôPjj ÿuÿuVÿuÿƒÄ …À|3À_^[ÉöHÇEôŠ9"P +PEÿPEôPjjQÿuˆUÿVÿuÿƒÄ …À|Çë‹U‹ìƒì@SV‹u ‹3ۍMÔQSShœ$ýÿV‰]ô‰]äÿP ƒÄ;ÃŒC‹EԋUøRUÂRUäRUÿRURjPVÿQƒÄ ;ÃŒ‹MàQSSh¬$ýÿVÿP ƒÄ;ÃŒü‹E䋋Hƒ9W…ª2À¿ÿþÀ¶Ð9<Ñuö‹¶ÀUôRPV‰EÜÿQLƒÄ ;ÃŒ¼‹SÿuÜÿuôÿPT‹E䋃À‹ƒÄ ˆ]þ99t,3ɋ‹UôÁ¶HŠ@þEþˆ‹Eä¶Mþ‹ƒÀ‹Áá9<uÖ¶E3Eìÿuôƒà1Eì¶Eþ‰EðEðP‹EàSj SÿuìPVÿƒÄ é9EÀPVèv;ÃYYŒ+EÄPVèƒ;ÃYYŒ‹MôQjVÿPLƒÄ ;ÃŒ‹SjÿuôÿPT¶E‹}ìÿuô3ǃà3øEðP¶EÿSjP‹EàWPVÇEðÿŠEð‹ˆE̶ÀUôRPV‰EÜÿQLƒÄ8;ÃŒ§‹SÿuÜÿuôÿPTÿuô¶E‹MÜ3ǃà‰Mð3ø¶EÿMðQSjP‹EàWPV‰}ìÿƒÄ,;ÃŒe‹Eô€8ÿu€xÿu€xÿu +€xÿ„·Mø‰EȉM؉]è;ˆõ‹Eä‹}ȍ؋H¶QŠ:"Q‹]ȈU͋H¶yŠ"Y¿ÿÿˆ]΋‹ f99u‹Ïf‰MÀ‹‹9¹ÿ9Ou‰MċH€9ÿu€ÊÿˆU͋H€yÿu€Ëÿˆ]΋‰MЋ ƒyubf‹}Àf99uYf‹yf;}ÂuO‹}Ä9yuG‹@8u@8Xu;¶E¶M̋}ìQÿuȋMÐÿq3ǃà3ø¶EÿPWÿuà‰}ìVè4üÿÿƒÄ…ÀŒWë‹}ì‹]èC‰]è;]Ø‚ÿÿÿ‹Eô3Û¶MPEðP¶EÿS3ÏjƒáP‹Eà3ù¶MÌWPV‰MðÿŠEðƒÄ :EÌt4Sÿu܈EÌÿuô‹ÿPT¶Eÿuô3ǃà3øEðP¶EÿSjP‹EàWPVÿƒÄ,‰]è9]؆·‹EäƒÀ‹¶Q‹]Ȋ"QˆU͋¶QŠ"Q»ÿÿˆU΋Hü‹ f9u‹Ëf‰MÀ‹Hü‹¹ÿ9Ku‰Mċ€9ÿuÆEÍÿ‹€yÿu€ÊÿˆU΋Hü‹ ƒyu)f‹]Àf9u f‹Yf;]Âu‹]Ä9Yu‹Š]Í8u8Qt5‹M؍Qÿ9Uèt_ÿEèƒÀ9Mè‚Qÿÿÿ3ۋEԋSPVÿQ ƒÄ ;Ã|3À_^[ÉöE¶M̋UèQÿuȋMä‹ Ñÿq3ǃà3ø¶EÿPWÿuàVèŸúÿÿƒÄ…À븀ë¿ÿt$‹L$‹‹@hjjjPQÿƒÄ…À|3ÀÃU‹ìQS‹]‹V‹phWEPjhjVSÿ¿ÿÿ‹ÇƒÄf9Eu*EüPjhº3ÿGWVSÿƒÄöEü@u¸€ë1‹E ‰8ë(EPjhjVSÿ‹E ƒÄf9}uƒ ëÇ3À_^[ÉÃ?æ¨uv#C‡µi¤œÐ;U•(Ô«ÏxrH„D\ ûÚ 3`3ÿÿÿÿ%׆£º–B¦/`+뻐˜“@$/ø=d”øIÄÑBލ…½ØÆ[Þô.VZL ¸@%ýÿà/|.text“+@ +@ `.dataìà-à-@À.relocŒà/ à/‹L$‹D$V3ö+ÁŠ:u FAƒþrò°^Ã2À^ÃU‹ìƒìhVW‹}‹jM˜j`QÿPT‹E‰E¼E˜PWè{ ‹u E˜PVÿƒÄ…ÀŒ’‹EøP‹E ‹Ðâÿ÷ÚÒ÷ÚÁè ÐRÿuWÿQH‹Eø‰E˜‹Eü‰EœE˜PVÿVƒÄ…À|SE˜PVÿVYY…À|Eÿu¤‹Eÿu ÿuœÿu˜PÿƒÄ…À|,‹E‹M˜‰‹Mœ‰H‹E ‹M ‰‹M¤‰H‹E$‹M°‰‹M´‰H3À_^ÉÃU‹ìƒìVW‹} Gë€ùt‹áÿÿÿëAöÁuúÁŠH€ùuá‹uMøQMðQMèQjƒÀPÿuÿuVèÝþÿÿƒÄ …Àu‹hRýÿVÿPYY…À|VWÿUøYY_^ÉÃU‹ìƒìT‹E‹SVW‹}‹UàRPjW‰EüÿQ@ƒÄ…ÀŒ‹uüF‰Eø‹ãÿÿÿ‰]ìöÃt ÿEìöEìu÷€x…¢‹MØQ3öVVh„RýÿW‰uÜÿP ƒÄ;ÆŒû‹Mø‹ƒÁjQM¬QÿPPEÜPEÈPEÄPVE¬PE P‹EØPWÿƒÄ,;ƌ‹MÔQVVhtRýÿWÿP ƒÄ;ÆŒ¦E Pÿuü‹EÔÿuÜPWÿƒÄ;ÆŒŠ€} …Ä‹uü‹EøŠH€ù„¼€ù…U3ö‰uô¶@+Æt!HtH…©EôPèè(ë EôPèÃY븀;ÆŒ…‹M¼QjjWÿPHƒÄ…ÀŒv‹EøMèQMðQƒÃ÷ƒÀ SP‰E̋Eô‰uð‰uè‹u¼P‰uä‰]ÐÿƒÄ…Àu‹E¼P‹Eè‹Ð»ÿ#Ó÷ÚÒ÷ÚÁè ÐRjWÿQHƒÄ…ÀŒ‹‹u¼E¼P‹Eð‹Ð#Ó÷ÚÒ÷ÚÁè ÐRjWÿQHƒÄ…ÀŒèÿuè‹E¼Vÿuð‰EäPÿuЋEôÿuÌPÿP‹uäƒÄ…ÀŒµŠF‹Î<uƒÆ~(_FVH„°‹uä<„û‹%ÿÿÿë@¨uûȊA„Àt ‹Ñ+Ö;Uðr؋uü‹EøEì€x‰Eø„ö¶FÁà™‹È¶FÁà™È¶F™ȋEø3Ò3ہáÿÿÿ+Æ;Ó‡Är;Áƒº‹Eøé}ýÿÿ¸€é²‹MƒÀ‰飸€é›¸ €é‘3ۉ]üÿv$ÿv SVWèÄ‹EƒÄ;Ãt +‹¹þÿf‰‹MüQVjWÿP<ƒÄ…À|±‹E‹MüSÿu‰Pÿu WèÌüÿÿƒÄë;ƒÁë/‹MàQÿuüjWÿP@ƒÄ…À}‹MàQÿuüjWÿP@ƒÄ…À| +‹Mà‹E‰3À_^[ÉÃU‹ìQQ‹E‹UøRÿu jPÿQH‹Eø‹UüƒÄÉÃ|$tÿt$jÿt$ èYƒÄ ÃU‹ìQV‹u‹MQVÿP0YY…À|xÿuƒeüjèû%Y‰Efƒ8YuZ‹@‹UüRPjVÿQ<ƒÄ…À}%‹E·@EÿujèÅ%Y‰Efƒ8Yu$ƒeüëÿuÿuüèÈ#YY„Àu‹E¹ÿÿf9u¦¸€^ÉÃjÿuEüPÿu Vè¦ûÿÿƒÄëæU‹ìƒì VWfº€°‰î‹u ‹MüQVÿP(‹jjjh4RýÿVÿP ‹øƒÄ…ÿ}7ƒ}ütPEøPè}#jEôPVèÿuøÿuôÿuVèÎúÿÿƒÄ …À|3À_^ÉÃ}üt‰5LSýÿ‹hìQýÿVÿP‹øYY…ÿ|݋høQýÿVÿPYY…ÿ}ʋÇëÈU‹ìQV‹u‹MQVÿP0YY…À|VƒeüWÿuj_Wè­$Y‰EYf98u5‹@‹UüRPÿu VÿQ<ƒÄ…À}&‹E·@EÿuWèx$Y‰EYf98t¸€_^ÉÃÿuüÿuèùÿÿYY„Àt‹E¹ÿÿf9u¤ë׍EPÿuEüPÿuVè[úÿÿjÿuü‹øÿu‹ÿPPƒÄ ‹Çë²U‹ìƒì ƒeüEøPèS"jEôPÿ5LSýÿèÒjEüPE Pjÿ5LSýÿè +úÿÿƒÄ$…À|"ÿuÿuÿujÿuüÿuøÿuôÿ5LSýÿèžøÿÿƒÄ ÉÃU‹ìì„SVWfº€°Šî‹u ‹Mü3ÿQV‰}ԉ}؉}̉}ÐÿP(YY…À| ƒ}üu‹MäQWWh¤RýÿVÿP ‹EäVÿƒÄEôP‰}øè !WEøPVè%‹MÔQj jVÿPH‹]ԋE؁ÃàÿljE€EÌPVèG ‹MüQVÿP(ƒÄ0…À|!ƒ}ü u‹MÜQWWh”RýÿVÿP ‹EÜPVÿƒÄ‹MìQVÿP`÷EìYYt'EðPE”PjjVèòýÿÿEðPE”PjjVèàýÿÿƒÄ(EàPE„PjjVèËýÿÿƒÄ…À} ‹hRýÿVÿPYYEèPhÄQýÿjVè[üÿÿƒÄ…À} ‹hRýÿVÿPYYè4j$VèŽ +‰E¬E¤PE¼PE´Pjÿuè‰U°ÿuôÿuøVè÷ÿÿEÄPE´PE¼PjÿuàÿuôÿuøVèÿöÿÿƒÄHfº€°‹î‹hRýÿVÿPVèÞ ÿuȍE„ÿuÄÿu¸ÿu´ÿuÀÿu¼PVè4 ‹WWWhjVÿPXƒÄDÿuÈÿuÄÿu¨ÿu¤ÿu€SWÿuÿu°ÿu¬èµƒÄ(_^¸ €[ÉËD$‹T$‹L$ЋD$ ‹…ÀtV‹ò+ñŠHˆA…Àuõ^3ÀÃU‹ìQQV‹u‹WMøQjjVÿPHhh^/ýÿÿuø‹ø‹ÿPP‹E ‹MøƒÄ‰H ‹Ç_^ÉÃÌÌÌÌÌÌÌÌÌÌÌÌUW‹ìú¿„0ýÿfŒÈfŽÀ&gêð/ýÿf¸fŽØfŽÀfŽàfŽèfŽÐ_]ÃU‹ì¸€¢=€vf¸€¢ºâsY àºè"à‹E"ع€À2ºè0 Àºè"ÀëgêU0ýÿ8f¸0fŽÀfŽÐfŽØH‹]H‹ãH‹MH‹E ÿÐH‹MH‹E(ÿÐëþG”0ýÿ¤$Iÿÿ’ÏÿÿŸÏÿÿ“ÏÿÿšÏÿÿ’Ïÿÿš¯èûè󐐐è됐è㐐èېèӐèːèАè»è³è«è£è›è“è‹èƒè{èsèkècè[èSèKèCè;è3è+è#èèè èèûè󐐐è됐è㐐èېèӐèːèАè»è³è«è£è›è“è‹èƒè{èsèkècè[èSèKèCè;è3è+è#èèè èèûè󐐐è됐è㐐èېèӐèːèАè»è³è«è£è›è“è‹èƒè{èsèkècè[èSèKèCè;è3è+è#èèè èèûè󐐐è됐è㐐èېèӐèːèАè»è³è«è£è›è“è‹èƒè{èsèkècè[èSèKèCè;è3è+è#èèè èèûè󐐐è됐è㐐èېèӐèːèАè»è³è«è£è›è“è‹èƒè{èsèkècè[èSèKèCè;è3è+è#èèè èèûè󐐐è됐è㐐èېèӐèːèАè»è³è«è£è›è“è‹èƒè{èsèkècè[èSèKèCè;è3è+è#èèè èèûè󐐐è됐è㐐èېèӐèːèАè»è³è«è£è›è“è‹èƒè{èsèkècè[èSèKèCè;è3è+è#èèè èèûè󐐐è됐è㐐èېèӐèːèАè»è³è«è£è›è“è‹èƒè{èsèkècè[èSèKèCè;è3è+è#èèè èúëþfÏU‹ì‹E‹URPÿQ0YY…À|=‹MWë)fƒúuyüÿuƒy u ºþÿf‰‹M·QʉM·¿ÿÿf;×uÊ_]ÃU‹ìƒìSWjÿuè^ñÿÿ‹ø‹E 3ÒYY‰}ð‰Uè‰Uìƒø'w3À@ëHÙ3À@Óà‰E ‰Uô»;†ˆ‰Eø‰EôVjÿuèñÿÿƒg‹ð‹G‰7ƒƒYY‰G‰]üjÿuèóðÿÿƒfYY‹N‰ƒƒ‰N‹Ë‹UèƒÊ‰ƒ‹U쁀‰PƒÀEè ƒUìIu؃ÆÿMüu°ƒÇÿMøu…^9] s+]ô‹E‹jÿuðWÿPPƒÄ ƒÇKué‹Eð_™[ÉËD$ƒ ƒ`3ÀÃU‹ì‹Eë ŠM ÿMˆ@ƒ}wñ‹E]ÃU‹ìS‹]‹MQjHjSÿP4ƒÄ…À|u‹EVW‹}ƒÇ¾Sýÿ¥¥¥¥‹M‰A‹M‹E‰A‹M‹E‰A ‹M‹E‰A$‹EÇ@(‹M‹jƒÁ,jQÿPT‹}‹u ‹E ƒÇ0¥¥¥¥‹M‰A@‹E$‹MƒÄ _‰AD3À^[]ÃU‹ì‹E‹URjjPÿQ4ƒÄ…À|&‹M‹E ‰A‹M‹E‰A ‹M‹E‰A‹E‹M‰A3À]ËD$ǼRýÿ3ÀÃf‹T$ŠÊÓ`f;Pv@Vf+P‹pƒ`ŠÊÓæ‹H f‰T$j p…Év‹0I‰H ‹H ¶4A‰p‰H Yf‰Hf;ÑwÂ^f)P·H‹PÓê PÃV‹pj Y+L$ÿt$Óîè‰ÿÿÿY‹Æ^ÃU‹ì3Àƒìd·ÐVW‹ÂÁâj ÂY}Âó«3Àf;E s‹M·U ¶DEÀfÿAJuòjY3Àjf‰EžZf‹tÂfÓæftžIf‰t @@Juèf9U¾t +¸ÿÿéßSjX+E3Û·ÀC‰Eô‹Ã‹óf;Ew9·UJ‰]ø3À‰Uð·ñf‹MôfÓlž‹Ê+Mø‹ûÓçÿEø@@ÿMðf‰|Àußfƒþw!j·ÆY+΍TEÀ·ñjY+ȋûÓç@f‰:BBNuî·Uf‹DUžf‹MôfÓè·ðf…öt1‹Ã‹ÊÓà·Àf;ðt#‹}+Ʒ΍¶O‰E ƒÄG(ƒ} ‰Mð} ÇFLé +‹Ø3À‰Eô‰Eì9Eð†Ñ‹S ‹Æèüÿÿ‹K ‰Eø‹CTÿ‹Æèûûÿÿ€~Y‰Eèt·Oj(X+ÁEø‹Eèj(Z+ÑÂ;Eìv‰Eìƒ}ø„¡…À„™‹C‰Eü…Àt;Cv‹C‰Eüƒ{t6€~YÿuøEüPuÿsë ·G‹K+ȃÁ(Qÿv$ÿV ƒÄ‰E …ÀŒ‹Eü‹K;Ás+ÈQ‹MøÁPèÝYYƒÃ(ÿEô‹Eô;Eð‚/ÿÿÿ€~Y¹ ‰MøuR·GQAf;Âu‰Møë5ÇFL¸€é‘ºf;Âu ÇEø ëºd†f;Âtí·G‰Eø‹W(‹Æèêúÿÿë·G‹O+ȋD(ŠNYƒf‰F„Éu2¸ f9Eøu ‹Wt‡ ë ‹—„‡°ƒúv‹@ë ƒfPë ‹GÑèÁà‰FP‹V4ƒf(…Ò„õ„Éu ‹Æètúÿÿ‰Eôë·G+ЋD(‰Eô…À„΋H‰Mø…Éu9Ht‹Kè‹Sàƒë(‹[ ;ÊsÚëى]ø‹Uø…Ò„›€~Yu‹Æèúÿÿ‰F8‹Eôë·O‹+ٍL(‰N8‹N8…Éu¸€ÇFLëeƒxu<€~Y‹PQMü‰UüQuÿpë ·O‹@+ÁƒÀ(Pÿv$ÿV ƒÄ‰E …À|¹‹Eø‹Mô‰A‹F8‹ùNB10t ùRSDSu ƒÀëƒÀ‰F<‹E [_^ÉÃ3ÀÃé«Ûÿÿéb‹D$‹‹L$+u‹P+Qu‹P+Qu ‹@ +A u°Ã2ÀËD$ÇàRýÿ3ÀÃf‹D$¹Lf;Át¹d†f;Át ¹¼f;Át2ÀðÃU‹ìƒÄøVW‹M‹u ‹}‹ÆÁ;Çv‹ÇÁ;Æv;÷„º‚ ƒù„«‹×€â„Òt ŠˆIGFëå‹ÁÁèÁà+ÈÁèƒøtQEøooFGoFGoFGoF G oF(G(oF0G0oF8G8ƒÇ@ƒÆ@Hu¹oEøwƒùr‹‰ƒéƒÆƒÇëìƒùtŠˆIFGëòñNùOƒùt ŠˆINOëò_^ÉÃÌÌÌÌÌÌÌÌÌU‹ì‹E‹M ‰‰q‰y‹E‰A E‰A‹E‰A¸ÉÃU‹ìSVW‹E¸‹M ‹‹q‹y‹i ‹aƒÄÿa¸_^[ÉÃU‹ìS‹E‹] ‹M‹E‹àSjÿá[ÉÃU‹ìS‹E‹] ‹U‹M‹E‹àRSÿÑ[ÉÃV‹t$ ‹Æ…öu^÷ºÿÿW‹úf;Ït·Éf;L$ t·HÁ·‹úf;Ïué_f9u‹Æ^ËD$Ç4Sýÿ3Àø€Ãþ|ئ”Ôš:'?ÁMœòLè®N–áôjìêê ŽD𢤿DŠ9¾ý¬‰oü|ئ”Ôš:'?ÁMÿ|ئ”Ôš:'?ÁM}ئ”Ôš:'?ÁMBÚ7M :ÚN¹ë¼´q;ýÌ`[ÏK·Ñ»™Ê–¦N-ýÿè,ýÿ€dRýÿèQýÿ€TRýÿäQýÿ€4Rýÿ€DRýÿ€>Š¢ÔòÜÏC¢·óW*|« QQýÿQQýÿP2е‰F§yeE>U׳43 4d4-8}8„8—89–9¼9 :~:è:÷: ;q;$d>l>p>x>|>„>>œ>0?4?8?¶pOƒîtN‹°!u‹¹˜èýÿë ‹°!‹¹èýÿÆld‰>‹°!f‹U èýÿÆzfd‰¶Uü‹°!‹•¤èýÿÆ4d‰‹!Âpfd‹2¿ñÿf#÷fƒÎfd‰2¶POƒêtJ…œûÿÿº5ëº4‹°!Æxfd‰‹!‹‰¬èýÿÂ0d‰ +‹ˆ!±3dŠŠ4èýÿÀâ +5èýÿ€á»Àâ +Êdˆ‹ˆ!Á°fd‹¾ÿßf#Öf¶56èýÿfÁæ f Öfd‰‹ˆ!±°dŠŠ7èýÿ€áßÀâ +ÊdˆÆE ‹û€} t'·‹!tdŠŠ9èýÿ€áŽÀâ +Ê + 8èýÿdˆþE GG€} rȋˆ!±0d‹÷Á@…ùdŠ€Édˆ‹°!dŠŽ0öÁuôd‹¶<‹Ö‹ÎÁê€âÁé€á‹óŠ]ûˆUýˆMüÆE €} „®·‹¸!L9dŠdŠ Àé€áÀëˆMþ¶Ë3ÿAGÓçf¶Êf+ÏyÇEè‹Uè…Òuù‹!·É‰Mð·Lfd‹¿ÿ€f#׋}ðÁçf ×fd‰¶Mþ3ÒBA‹úÓç‹Ïf¶}üf+ùy +‰Uè‹Mè…Éuù··Ï‹¸!|:dŠ€â€ +щMìdˆŠUýþE FF€} ‚9ÿÿÿ·uðÇEŠËÓe3ÿÇEèfƒþ@rÇEô‹Mô…Éuù· çýÿ‹!·ÞkÛ ύLdŠ€âÀ +“´èýÿdˆuGÿMèu»€xuR·uð3ÿÇEèfƒþ@rÇEô‹Mô…Éuù· çýÿ‹!·ÞkÛ ύLdŠ€âÀ +“¸èýÿdˆuGÿMèu»€xuX€xsR·uð3ÿÇEèfƒþ@rÇEô‹Mô…Éuù· çýÿ‹!·ÞkÛ ύLdŠ€âÀ +“¾èýÿdˆuGÿMèu»·}ð3ÛÇEèfƒÿ@rÇEô‹Mô…Éuù·çýÿ‹°!·ÏkÉ Š‰ºèýÿӍt2dŠ€âÀ +Ñdˆ·çýÿ‹°!Ӎt2dŠ€âÀ +Ñdˆ}CÿMèu›·}ð3ÛÇEèfƒÿ@rÇEð‹Mð…Éuù·çýÿ‹°!·ÏkÉ Š‰¼èýÿӍt2dŠ€âÀ +Ñdˆ· çýÿ‹°!Ӎt2dŠ€âÀ +Ñdˆ}CÿMèu›ŠMþ·uìÇEÓe3ÿÇEèfƒþ@rÇEð‹Mð…Éuù· çýÿ‹!·ÞkÛ ύLdŠ€âÀ +“µèýÿdˆuGÿMèu»€xuR·uì3ÿÇEèfƒþ@rÇEð‹Mð…Éuù· çýÿ‹!·ÞkÛ ύLdŠ€âÀ +“¹èýÿdˆuGÿMèu»€xuX€xsR·uì3ÿÇEèfƒþ@rÇEð‹Mð…Éuù· çýÿ‹!·ÞkÛ ύLdŠ€âÀ +“¿èýÿdˆuGÿMèu»·}ì3ÛÇEèfƒÿ@rÇEð‹Mð…Éuù·çýÿ‹°!·ÏkÉ Š‰»èýÿӍt2dŠ€âÀ +Ñdˆ·çýÿ‹°!Ӎt2dŠ€âÀ +Ñdˆ}CÿMèu›·}ì3ÛÇEèfƒÿ@rÇEì‹Mì…Éuù·çýÿ‹°!·ÏkÉ Š‰½èýÿӍt2dŠ€âÀ +Ñdˆ· çýÿ‹°!Ӎt2dŠ€âÀ +Ñdˆ}CÿMèu›‹€!0dŠ€Édˆ3À_^[ÉËD$‹€!0dŠöÁuø3ÀÃU‹ìQQV‹u3ÀW3ÿˆEþˆEü8FOuÆEþÆEü¿)§—닆!<d‹S‹È‹Ð‹ØÁéÁêÁë€á€â€ã?$?ˆ]ÿˆE :ÊvŠÁ*ÂëŠÂ*ÁˆEýŠE :Øv*؈]ûë*EÿˆEûŠEþ[8Eýw2ŠEü8Eûw*°:Èv$:Ðv 8Eÿv8E v€ùzs€úzs €}ÿ:s€} :r‹†!@d‰8Ɔ0_^ÉÃSV‹t$ ‹†!pdŠ€á÷dˆW‹†!0dŠ€ádˆjƆ0[¿˜:‹†!0dŠ€ÉdˆWèöF‹†!Y0dŠöÁuøVè¾þÿÿKYuÈ8ž0u$‹Ž!d‹<‹ÐÁêÁà Ёʀ€d‰‘@‹†!0dŠ€ÉdˆWè’F‹¶!Y_†0^[dŠöÁuø3ÀËD$€8w €xOu3ÉAë¹ ‹€!Àfd‹V¾Àüf#Öf Ñfd‰3À^ÃU‹ìƒì0‹MŠS¶Ð·UTÞýÿV3ö!uôWÆEÿÆEþ‰Uä„Àv¾ô‹!·úd¶FdŠ€ˆÁêÐèƒâ$B¶À¯×‰Eð·Æ‰Eì?‰Uè™+‰}Ñm‰EøÑ}ø‹‘!d·‚ d¶šM‹uðƒãÁèƒàÃd¶šNƒãöž`Þýÿ¯Ç¯]]ì·uôØdŠ‚Ùó‹]èó¨t+u+]+uøÃہî‰uà;ór †Hôÿÿ=TsCþMÿÂÀd‹ €d‰‹EäÀ€}ÿ·À‰Eô…Tÿÿÿ‹‰!ÑdŠ€áüdˆéÿ€}ÿu‹‘!ÂÀd‹%ÿÿÿd‰‹Æ3Ò÷÷ƒeðÆE ÆEÿ·ð·ÞEЯ߃eø‰Eô‹Eø™ƒâ‹UôÁøÉ;Eàw= rÆE ;Eðv ŠUÿˆUþ‰EðþEÿ}øƒEô€}ÿr¿€} „Yÿÿÿ‹!ÑdŠ€Êdˆ‹!fd‹¿ÿf#×Áæ f Öfd‰‹±!ŠUþÆ,dŠ$ˆÀâ + +Eþdˆ‹‰!Àd‹áÿÿÿóÉd‰_^[ÉËD$‹ˆ!SVÁÑfd‹¾ýWf#Ö¿‹÷f Öfd‰‹ˆ!Áfd‹¾Ðÿf#ÖfƒÊfd‰‹ˆ!ÁÑfd‹¾ÿ¯f#Ö¾ f Öfd‰‹ˆ!Á€dŠŠÚ²ñ"Údˆ‹ˆ!ÁŒdŠ€ãódˆ‹ˆ!ÁadŠ"Údˆ‹ˆ!ÁedŠ"Údˆ‹ˆ!ÁidŠ"Údˆ‹ˆ!ÁmdŠ"Údˆ‹ˆ!ÁqdŠ"Údˆ‹ˆ!ÁudŠ"Údˆ‹ˆ!ÁydŠ"Údˆ‹ˆ!Á}dŠ"Údˆ‹ˆ!ÁŒdŠ€âýdˆ‹ˆ!Á´fd‹¾ÿûf#Öfd‰‹ˆ!Áfd‹¾?òf#Öfd‰‹ˆ!Á9dŠ€âdˆ‹ˆ!ÁÀd‹¾ÿÿ¿ÿ#Öd‰‹ˆ!ÁÑfd‹»f#Ófd‰‹ˆ!ÁÑfd‹»ÿóf#Ófd‰‹ˆ!Á€dŠ€âòdˆ‹ˆ!ÁadŠŠÚ²þ"Údˆ‹ˆ!ÁedŠ"Údˆ‹ˆ!ÁidŠ"Údˆ‹ˆ!ÁmdŠ"Údˆ‹ˆ!ÁqdŠ"Údˆ‹ˆ!ÁudŠ"Údˆ‹ˆ!ÁydŠ"Údˆ‹ˆ!Á}dŠ"Údˆ‹ˆ!ÁHd‹#ށË0d‰‹ˆ!ÁÀd‹1æÿÿïÿd‰1‹ˆ!Á’dŠ€Ëdˆ‹ˆ!Á,dŠ€Ëdˆ‹ˆ!Á,d‹1æÿÿÿ÷Îd‰1‹ˆ!ÁHfd‹1»`f ófd‰1‹ˆ!Á`d‹1Îd‰1‹ˆ!ÁÀdŠ€Ëdˆ‹ˆ!ÁÐd‹1Îd‰1‹ˆ!Á‰dŠ€Ëdˆ‹ˆ!Á’dŠ€ËÀdˆ‹ˆ!Á$dŠ€Ëdˆ‹°!O€Æ*fd‰€xOw,u ‹ˆ!ÎdÆ€xOuŠHþÁ"ʋ!þÁÖdˆ +‹ˆ!ÁÀfd‹¾àf Öfd‰€xOu‹ˆ!ÁÄfd‹¾ÿýf#Öf ×fd‰¶HOƒé„„I‹ˆ!tÁ‰dŠ€ÊéÁ‰dŠ€â÷€Êdˆ‹ˆ!Á“dŠ€Ê dˆ‹ˆ!Áfd‹¾? +f Öfd‰‹ˆ!ÁHdŠ€Êdˆ‹ˆ!ÁhdÆêëk‹ˆ!Á‰dŠ€Êdˆ‹ˆ!Á“dŠ€Ê dˆ‹ˆ!Áfd‹¾? +f Öfd‰‹ˆ!ÁHdŠ€Êdˆ‹ˆ!ÁhdÆJ‹ˆ!ÁÄdŠ€âŸdˆ‹€!’fd‹º!f Êfd‰_^[ÃU‹ìƒìVWjY¾×ýÿ}äó¥‹M€yO¶¶Q¤‚‹…ìýÿ_‰Eî^uŠAŠÐ€ê¶Ò,Áâ¶À ÐÁâƒÊ‰UîjEäPÿ±!èLCƒÄ 3ÀÉÃU‹ìƒì,SV‹u¶FŠŠ^ÀŠV‰EÜ·€PÞýÿ‰Eä¶Á ‰EØ·LÞýÿ‰EèŠFˆ]óŠ^ˆEôŠFW¶~Oƒïˆ]ñŠ^ˆEöŠFˆ]òŠ^ˆEðŠFˆUÿˆ]ùt?OtƒÈÿé¯ ¶új [+߃ûÆE ÆEõÆEø}ÆEüë ² *UÿˆUüŠUÿŠÚ€Ãˆ]÷ëŠÚþˈUü*ӀˆU÷ŠUÿˆ] ÆEõÆEøþÀ$þˆEúŠE ˆ†Ö,€êÀà +‹–!Â@dˆÆEûÆEþÆEýF ~ÇEà€?u €xüuÆEûÆEþ¶Pú¶Ӄú~ÆEýjZú@ÿMàuЋ†!odŠ€Ëdˆ8Uùv¶Uùf¶E f¶}óføfƒÇf‰EìfÁ獕f ø‹†!fƒÏPfd‰8¶Eþ¶Uò¶}ôÁà ¶UûÁà Ç×Áà Áâ ¶Uú3Û Â8]þu.¶VO+ÓtJ…¢þÿÿ¶Uý¶” +¨ìýÿë ¶Uý¶” +dìýÿÁâ ‹–!ÂRfd‰‹–!ÁèÂTfd‰8^Ou2‹†!,fd‹€T¿Àf#Çfd‹:»àfÀf#ûf Çfd‰ŠEøf¶Uö @f¶ÀfÁâf Âf¶U÷fÁàf ‹–!ÂVfd‰¶Eö¶Uü¶}ñÁà ¶U T:Áâ Áà ¶Uõ ‹–!ƒÈ@ÂXd‰f¶Eûf¶Uôfºf¯Âf¶Uúf ·Ћ†![dˆ‹¾!‹ÂÁèÇ\dˆŠFO<uºþ„ÀuºÈ‹†!`fd‹8»üf#ûf úfd‰8‹¾!Ç]dŠ$À +Eðdˆ‹–!¸#ÂDfd‰‹¾!Š‘àïýÿÇFdŠŠÚ$áÀã +à dˆ‹†!¶}ÿH‰Eàfd‹f‹Ø¶Ò¸ÿàf#Ø·TÞýÿT:¯Â‹U܉}Ô·ºXÞýÿ3Ò÷÷Áàf ؋Eàfd‰ŠE <—E *E »þþÈf¶À·ø‹†!Mfd‹f#Óf¶] fÁãf ßfÁãf Óf ×fd‰‹–!¸…Â^fd‰‹†!edŠ€âàdˆ‹†!efd‹¿ÿÀf#×f¶}ÿfƒÇ »f¯ûf ×fd‰‹†!hd‹·¹4àýÿÏÀâÿÀÿÁç ×d‰‹†!ldƋ†!¸fd‹¿Àf#×f ‘\Þýÿfd‰‹†!tdв +Êdˆ‹†!Hd‹áÿÿÿ–Éd‰f‹Eäf9Eèv‹†!Hd‹Éd‰‹†!LdŠ€áüdˆ‹†!Mfd‹¿ÿƒf#ϋ}ìƒÇ +Áç +f Ïfd‰8VOu&‹†!dÆB‹†!xdŠ€áµ€É5dˆ‹†!`d‹áÿÿ÷ûÉd‰‹†!mfd‹¿_åf#Ï¿_ef Ïfd‰¿28VOu¿6‹†!hd‹‹ßáÿÿÿÏÁã Ëd‰‹†!ldЋ߀áÁë +Ëdˆ8VOu‹†!ÀdŠ€áþdˆ‹†!qdŠ€ádˆ‹†!tdŠ€áùdˆ‹†!xdǁˆ‹†!|fd‹¿Aþf#ÏfƒÉAfd‰¶FOƒètH…îùÿÿ¿à?ë¿à‹†!%fd‹f Ïfd‰‹†!'dÆ@‹†!(dŠ€áý€Édˆ‹†!)dŠ€Édˆ‹†!/dŠŠ^€áìÀã +ˀÉÌdˆ‹†!ŒdŠ€áýdˆ‹†!(dŠ€áú€Édˆ‹†!Afd‹¿üf#ÏfƒÉfd‰‹†! d‹áÿÿOÉ€Pd‰‹†!fd‹¸Rˆ-fd‹€Tf‹ßfÁë €ãÀà +ØdŠÀã$ +Ødˆ‹†!ˆ-d‹€XÁè$dŠ€ãð +Ãdˆ‹†!.dŠ€ádˆ‹†!.dŠ€áüdˆ‹†!/dŠ€áüdˆ‹†!AdŠ +Êdˆ€>u!€~Ou‹†!¶fd‹¿f Ïfd‰¹@ÇE€~u‹†!‹]ØÁd‹8çÀÀÀÀ <xÞýÿd‰88Vu‹†!Ád‹8çÌÌÌÌÏ d‰88VOu‹†!Ád‹8çÔÔÔԁÏd‰8ƒÁÿMu–‹†!‹UÔHd‹áÿÿðÿBÁâ Êd‰ƒe¸`ÇEìäïýÿ)EìÇEèåïýÿ)EèÇEäæïýÿ)EäÇEàçïýÿ)EàÇEÜ‹Ž!‹}ìÈdŠ€âÀ +dˆ‹Ž!‹]荹Œ‹M‰}Ôfd‹?f¶jZÓâfÓã‹MÔ÷Òf#úf ûfd‰9‹Ž!Áˆ‰MÔfd‹ f‹ù‹Mäf¶‹MfÓã‹MÔf#úf ûfd‰9‹¾!Çúfd‹f‹Ù‹Màf#Úf¶‹MfÓâf Úfd‰ƒEƒÀÿMÜ…Hÿÿÿ‹†!ðdŠ€áþdˆ‹†!ðdŠ€Édˆ‹†!ðdŠ€Édˆ‹†!Àd‹É d‰‹¶!†”d‹É€d‰3À_^[ÉÃU‹ìƒìDVWjY¾8×ýÿ}àó¥j Y¾X×ýÿ}¼ó¥‹uŠV„Òul¶F‹ÈÁákÀ‹¹|×ýÿ‰}狹€×ýÿ‰}„×ýÿ‹‰ˆ×ýÿ‰Müf‹ˆ|Øýÿf‰M¿f‹ˆ€Øýÿf‰MÄf‹ˆ„Øýÿf‰MɋˆˆØýÿ‰M΋ˆŒØýÿ‹€Øýÿ‰}õ‰MՉE܀ú…«ŠV¶Â‹ÈkÀÁዹüÙýÿ‰}狹Úýÿ‰}Úýÿ‹‰Úýÿ‰Müf‹ˆLÚýÿf‰M¿f‹ˆPÚýÿf‰MÄf‹ˆTÚýÿf‰MɋˆXÚýÿ‰M΋ˆ\Úýÿ‹€`Úýÿ‰}õ‰MՉE܀ús8€~t2€~tÇEç0ÇEîÇEõëÇEçÇEîÇEõj EàPÿ¶!è¹7j$E¼Pÿ¶è¨7ƒÄ_3À^ÉÃV‹t$€~O…Ò€¾Wuc‹†!¨dŠ€Édˆ‹†!ÚdŠ€ádˆ¿¸ Wè$2‹†!¨dŠ€áýdˆ‹†!ÚdŠ€ádˆWèö1YY‹†!¨dŠ€áýdˆ‹†!ÚdЀɀdˆ¿LWèÁ1‹†!¨dŠ€áýdˆ‹¶!†ÚdŠ€ádˆWè’1YY_3À^öD$‹L$Á¶P¶H  J¶P ¶@  JŠ„ˆÐÞýÿÃU‹ìƒìDSVWj Y¾ÜÚýÿ}¼ó¥‹M‹‰Eìfd‹@Rƒeüƒeø·À‹ÐÁèƒàf¶€ ÛýÿÁê·Ø·Ñƒâf¥·4U Ûýÿ·‘ωEð·Ã¹‹ù+ú;ør‹ø‹Ð+ׯE ƒú@v$ƒàÀƒçÀÆE ‰Mü;Ár‰Eüw‹È‹Uü+ύLÀ‰Mø€} ‰Eôt ‹MøƒÁ@‰Mô·Ö‹Ï+Ê·ó·]ð‹Ñ+֋òÁçÁè+ó€} f‰}¿f‰EÄt‹Eü€eÆ€eËÁèf‰EɋEøÁèf‰EÎf‹Eôf‰EÓj.E¼PÿuìÁáÁâÁæ‰M؉U߉uæèd5ƒÄ _^3À[ÉÃU‹ìƒì SV‹uW3ÿF‰¾·2ۉ}ü‰E‹E€8t.ŠÃÐè¶ÀVPèkþÿÿYY‹ÏÑé€|1 ¶Àu €‹MüÓà †·ƒEüþÃGÿE€ûr»‹†!‹¾·‰}ôd‰82҃eFÇEü€8t ‹M³Òã +ÓÿE@ÿMüu鋆!bdŠ€áÀâ +Êdˆ€~u€~t‹†!`dŠ€Édˆ‹–!3ɍF3ہ‰M‰EüÇEø‹Eü€8t)‹Ç‹}ÓèÑ~ŃàkÀf¶€…ÞýÿØÁàf‹}ôfd‰BBÿEÿEüƒÁÿMøu»€~ufƒû vÇE‹E…ÀuùÁã_f‰žÃ^3À[ÉËL$‹!ƒÀ@dŠ€Êdˆ€¹t‹‰!`d‹Éd‰3ÀÃU‹ìƒìSV‹u3ÛWˆ]ÿ8^O…¸f¶Ff¶NfHfÁàf ÁfÁàfƒÈ ·À~‰EèÇEô8t 8^tÇEôDh¸ è'.Y‰}øÇEì‹Eø8tYþEÿ¶}ÿŠEÿOÁçþȈEä¸$Ûýÿ‰EÇEð ë‹E·HŠ<t <u Môë MèS·ÉQPWÿuäVè/ƒEƒÄÿMðuËÿEøÿMìu˜€~O…àF‰]ˆ]ø‰Eô‹Eô8„¹þEÿ¶}ÿSSOjÁçWÿuøVèº.h¸ èp-¶†ÖÅØÿÿÿ‰EMSÿuj(WÿuøVèˆ.SSj8WÿuøVèz.ƒÄLÇEÁeƒMSÿujWÿuøVèX.¶F¶NƒèÁàƒé ÁSÁà PjWÿuøVè/.Shj +WÿuøVè.ƒÄHþEøÿEô€}ø‚,ÿÿÿ_^3À[ÉÃU‹ìQV‹u€¾…½S3Û8žujSSSSVè×-ƒÄ靋†!`d‹Éd‰€~Ou@Wˆ] ˆ]ü~8t¶E Shj +ÁàPÿuüVè‹-ƒÄþE þEüG€}ürÓjè4,Y_‹†!qdŠ€Édˆ‹†!qdŠ€áÏdˆ‹¶!†hd‹ÉÀd‰[3À^ÉËD$‹ˆ!‘t¶HSŠV¶ó Nd‹2Wɶ¹´ìýÿ¶‰µìýÿÁç ùæÿüÿÁç ÷d‰2‹ˆ!ÁtdŠ€âdˆ‹ˆ!ÁldŠ€Êdˆ€¸t+‹ˆ!ÁqdŠ€Êdˆ‹€!qdŠ€áÏdˆë°PÆèwþÿÿYÆ_^3À[ËD$€¸t‹€!hd‹ÉÀd‰3ÀÃU‹ìƒì0SV‹uŠFˆEý¶À·Eíýÿ‰E܊ˆEÿ¶À‰EW<·‡ˆÛýÿ‰Eà·‡TÞýÿ‰EÔkÀd™jn[÷ûŠNˆMþ¶ÉÉ·À‰Eø·XÞýÿkÀd™÷ûƒeì·À‰EЋEŠ‹HÛýÿ¶€€ÛýÿˆMü·„Ûýÿ‰EèFX‰MØÆE ‰Eðf¶E ·UøfÀ·È·FcÓè‰Mäƒà¯Â·VeÓê·Møƒâ¯Ñ·NaÑêÁè‹ыMäÓê·Møƒâ¯Ñ‹Mð¶ ¯MèÂÁ9Eìw‰EìþE ÿEð€} r”‹Ž!dЁW ‰Mä<ÿudЁ ÆE „ÀxÆE d¶‰ˆЇáïýÿ¶—àïýÿ¶~`Ñéƒá¶‰`ÞýÿÈ×¶} ×¶Àƒá Q+ȍD ·Mø¯Á·Mܙƒâ·UàUèÁøÐÊMìM؀¾.t‹EÔÑèȀ}ýu0€}ÿu€}þu €~ué¾ +€}ÿu€}þu €~ué8€}ýu€}ÿu€}þu €~ué €}üÆE vA¶EükÛ +uðÃLÛýÿ‰Eè·kÀd™jn_÷ÿ·}ЋÑ+ЋÂ3Ò÷÷þȈ:E vˆE CCFÿMèuҋEäHfd‹ºÿàf#Êf¶U fÁâf Êfd‰_^3À[ÉÃU‹ìƒìpS‹]‹ƒ!FdŠV€ÉdˆWÆEÿ‹ƒ!ldŠ€Édˆ‹ƒ! d‹áÐCÿÿÉÐCd‰‹ƒ!‰dÆ‹‹!¸ÁŠfd‰‹‹!¸ ÁŒfd‰‹ƒ!ŽdÆ@‹‹!¸ Áfd‰‹ƒ!’dÆò‹ƒ!AdŠ€Édˆ‹ƒ!CdŠ€Édˆ‹ƒ!rfd‹ºf Êfd‰‹ƒjðY¾ŒÛýÿ}ó¥dŠ€Édˆj8EPÿ³!è’,‹ƒðdŠ€áþƒÄ dˆ2ÒÆE 3ÿsÇEø€>u1‹ƒ!þE d‹‹ÏÓè$¶ÀkÀŠ€…Þýÿ„ÒuŠÐ:ÂtÆEÿFƒÇÿMøuÁ¶M 2ÀIt'ItIt!Iu €}ÿ•ÀþÈ$À¤ë€}ÿ•ÀþÈ$@$ë°d‹‹!±dŠ2Ȁá2Èdˆ‹ƒ!Ðd‹áÿÿÿd‰€{Ou‹ƒ!Àd‹É€d‰€{j^u ‹ƒ!ƒÀ(d‰0‹ƒ!ÄdŠ€Édˆ€{j Zu9€{u€;u‹ƒ!ƒÀ(d‰ë ‹ƒ!ƒÀ(d‰0‹ƒ!ÄdŠ€Édˆ‹ƒ!ƒÀ3Éf‰M@‹Èf‰MB3Éf‰MDf‰MFf‰MHf‰MJjDYf‰ML‹Èf‰ER3Àf‰ETjXf‰EV3Àf‰EXf‰MN3ÉjXf‰EZ3Àf‰MPf‰E\¸DD‹Èf‰M^3Éf‰M`‹Èf‰Mb3Éf‰Mdf‰Mff‰Mhf‰Mjf‰Ml‹Èf‰Er3Àf‰Mnf‰Eôf‰Eöf‰Eøf‰Eúj3ÉXf‰Mpf‰Eü¸‹Èf¥f‰Mþ3Éf‰M¤‹Èf‰E3Àf‰E@f‰M3Éf‰E3Àf‰Mf‰Mf‰Mf‰M +f‰E¹„f‰M j!¹•‹ÑXf‰E3Àf‰Mf‰E¹‹Áf‰E3Àf‰E ¸eDf‰U‹Ðf‰U"3Òf‰M.3Éf‰E2‹E|f‰U$f‰U&f‰U(f‰U*f‰U,ŠPOf‰M0¶ÊƒétI¶ˆ¶uÉf‹t f‹L ô불¶Éf‹t Tf‹L 4€x_f‰uËf‰MÐ^u€eè€úu‹Mׁáh÷Éh€eèf‰M׊€ùu +€xuÆE牀úu„Éu +€xuÆEç‰j+MÈQÿ°!è-(ƒÄ 3ÀƒÅtÉËL$‹!€fd‹V¾€f ÖÆ.fd‰‹!€dŠ€âdˆ‹!€dŠ€Êdˆ‹!€dŠ€Êdˆ‹!€dŠ€Ê€dˆ‹!€^dŠöÂtødŠÀè$tƁ.ÃUl$Œì„‹E|ŠŠPSVˆM¶ò¶É q‹°!‰MpÁáW‹¹ôßýÿÆ d‰>‹°!‹¹øßýÿÆP d‰>‹°!‹¹üßýÿÆT d‰>‹°!‹‰àýÿÆ, d‰‹ˆ!Á dŠ€Ë€dˆ3É:Ñu3€}u-‹!ÂÔdˆ +‹!Âd‰ +‹!Âd‰ +ŠP:Ñu j Y¾ôÞýÿ}ðó¥€úu j Y¾tßýÿ}ðó¥‹Mp‹°!Áá‹T ðÆØd‰‹°!Æàd‰‹°!Æèd‰‹°!‹T ôÆÜd‰‹°!Æäd‰‹°!Æìd‰‹!‹t øÂðd‰2‹!‹t üÂôd‰2‹!‹t Âød‰2‹!‹t Âüd‰2‹!‹t Âd‰2‹€!‹L  d‰_^3À[ƒÅtÉÃU‹ìQ€}S³tiV‹u‹†!þMØdŠ€áýdˆjèU ‹†!ØdŠ€Édˆjè: ‹E d‹‰Eüjè* ‹EdŠÀè$ƒÄ :Et2ۀ}uœ^ŠÃ[ÉÃU‹ì‹USŠV€ûs6¶M‹EþÈ‹€!Éj^ÓæŒfd‹÷Öf#Öf¶ófÓæf Öfd‰ëm‹u Æþ€>vÇE‹E…Àuù‹M‹!WHd‹8¶6çÿÿðÿÁæ þd‰8‹‰!Œ¶Mfd‹0f¶Éj_ÓçfÓâ÷×f#÷f òfd‰0_^[]ÃU‹ìƒì,SV‹uW3À}Ô««‹†!ØdŠ€áódˆÆEýÿ‹†!ÜdŠ€ádˆƒeèEԉEàFXÆE÷‰EäÇEì`‹†!‹MìL‰MðŠNˆM Hd‹¶U áÿÿðÿÁâ ÊÆEÿd‰ÆEû‹M苆!j_ÓçŒfd‹3ÛÓã÷×f#×f Ófd‰‹†!‹MìÁdŠ€áÀdˆ3ۈ]þë%EÿPE PVèhþÿÿƒÄ€} vÇEÜ‹E܅ÀuùjSVSÿuðèÉýÿÿƒÄÿu÷„ÀtÄëÿu÷ŠE Š]ÿˆEüEÿPE PVèþÿÿjjVjÿuðè”ýÿÿƒÄ$„ÀtЊMü‹†!ˆM Hd‹¶ÉâÿÿðÿÁá ш]ÿd‰‹†!Œfd‹f‹Ñ‹Mèf#×f¶ûfÓçf ×fd‰3Ûë=ŠEûˆEþþÀˆEû:†´v €¾³u8‹Ž!‹Uì< +dŠŠÑŠŽµÒà€âÀ +ÐdˆjjVSÿuðèðüÿÿƒÄ„Àt®ë І´ˆEþ‹†!‹MìŠUþ<dŠŠŽµÒâ$À +Âdˆÿu÷EÿPE PVè'ýÿÿj3ÿGWVSÿuðèœüÿÿƒÄ$„Àu?‰}܋E܅Àuùë3‹†!þM Hd‹¶U áÿÿðÿÁâ Êd‰€} u +‰}܋E܅ÀuùjSVSÿuðèIüÿÿƒÄ„Àt¹ÿu÷EÿPE PVè¬üÿÿ‹MäŠEþƒEìƒEèƒÄþE÷ÿE䈋MàŠE ÿEಈ8U÷‚ýÿÿEÜþÊHŠ8MývˆMý„ÒuïÆE÷ÇEè}܋†!ƒmèþM÷úfd‹f‹Ñ‹Mèj[ÓãOŠ*Mý÷Óf#Óf¶Ù‹MèfÓãf Ófd‰€}÷u½‹†!Hd‹‹ÑŠMý¶ùâÿÿðÿÁç ×d‰‹†!ˆN`fd‹ˆúf‰Nafd‹ˆŒfd‹€ˆ_f‰Fef‰Nc^3À[ÉËD$‹ˆ!ÁØdŠ€âñdˆ‹ˆ!ÁØdŠ€Êdˆ‹ˆ!ÁØdŠ€Êdˆ‹ˆ!ÁØdŠ€Êdˆ‹ˆ!ÁÜdŠ€Ê€dˆ‹ˆ!ÁÜdŠ€âdˆ‹€!ÜdЀɀdˆ3ÀËD$‹€! fd‹º€f Êfd‰3ÀËD$‹€!d‹ƒÉd‰3ÀËD$ö€Vu>ˆ!‹²0dŠ€âýdˆ‹ d‹‘0÷€wñÁ´fd‹¾ÿÏf#Öfd‰‹ˆ!ÁÜdŠ€Ê€dˆ‹ˆ!Ápfd‹¾ùÿf#ÖfƒÊ fd‰‹€!0dЀɂdˆ3À^ÃU‹ì‹E¶‹M Š ÀА!íýÿ:ˆ íýÿw‹EÆ‹EÆ]Ã:Êw ‹EƋEë ‹EÆ‹EÆ]ÃU‹ì‹US2ÛV8] t0‹E‹u Š +þM €ù>wþÁˆ +ë€8wˆþë +8w#ˆþþ8] uÖÿuÿuRÿuèiÿÿÿƒÄ3À^[]ÃÈÿë÷U‹ì€} ‹UVt4‹E‹u Š +þM €ùrþɈ +ë€8rÆ>þë €>r$Æ>þþ€} uÒÿuÿuRÿuè ÿÿÿƒÄ3À^]ÃÈÿëøU‹ì‹MV‹u3ÒW8Ut¶}¶E‡¶ù‡·ELíýÿë€~ujXë¶F¶ùƒç¶„‡ìíýÿÁàƒÈ8Ut:Mt ë €RP¶E jÁàPQVèƒÄ_^]ÃU‹ìƒìLS‹]Š V‹³!dІŽdŠ–,$?¶ÉiÉ €â?ˆEÿfd‹†€fÁè$ˆEýЁVàýÿˆE ˆEüЁWàýÿ¶ÀiÀW}¼««ŠUàýÿ¶ÀiÀÀm €eü}Ü««ŠTàýÿ¶ÀiÀ}Ô««jÆEôÆEõ3À_ŠM ˆL̊MüˆLÄ@Ouî€}ýttjÿuüÿuôÿuðÿuøSèûÿÿƒÄþEøþEôF€}ôr×jY¾ðÛýÿ}°ó¥¶Müf¥‹E¸Áè @ˆE¹¶EðŠ„$íýÿˆE´jE°Pÿ³!èÇÿuüÿuìSè´ûÿÿƒÄƒøÿ„€e¹¿jE°Pÿ³!ÆE´ÆE¾ÇEÆXU苍CƒÄ ÆEøÆEô‹ð€>t<ŠEô8Eüu1jÿuüÿuôÿuðÿuøSèÓúÿÿ¶EøjhjÁàPÿuôSèQƒÄ0þEøþEôF€}ôrµ¸f‰EÖjEÌPÿ³!ÆEÐèƒÄ ÆEøÆEüs€>tjÿuüÿuüÿuðÿuøSèdúÿÿƒÄþEøþEüF€}ür×þE €} ‚Eþÿÿj EàPÿ³!ÆEä€è¹ƒÄ 3À_^[ÉÃjSèiYYƒÈÿëìU‹ìƒì4V‹u€~OÆEý„\€¾Ë„O€¾uŠFFˆEý‹†!dŠˆ,dЀހá?$?ÈSˆMÿN3ÒWÆEþ»(‰Mô‰Uøë‹Uø‹Mô€¾ŠAÿˆDԊŠI|̍T܈ +‹Mø‰U‹UôŠRL 䈋Mø‹UôŠRL 숈u!ŠMý8Mÿt:Ás*Á@ë*ÁEÿˆ<@r,@ˆÆE ŠEþE ¶ÀP‹EøLìQLäQLÜQWDÔPVèÕ¶ÿÿƒÄþE €} r̋†!fd‹ˆ€º€f…Êt^Ãd‹áÿÿïÿÉ,d‰‹†! ЉMd‹ ¶ÐÁ⠁áÿüÿ ʋUd‰ +‹Ž!Ëd‹âÿÿßÿd‰:Eÿs*Eÿ@ë*Eÿˆ‹EøjLìQLäQLÜQWDÔPVè¿÷ÿÿ‹†!€fd‹¹€ƒÄf…ÁtŠEÿˆ<@r,@ˆÆE ŠEþE ¶ÀP‹EøLìQLäQLÜQWDÔPVèijÿÿƒÄþE €} r̋†!fd‹ˆ€º€f…Êt>Ãd‹É<d‰‹†!Ãd‹¶áÿüÿÁâ Êd‰‹†!Ãd‹áÿÿßÿd‰€EþƒEôƒÃÿEø€}þ ‚øýÿÿ_[3À^ÉÃU‹ìSVW‹} ЇˆE‹E‹ØpëHŠE„Fÿt:Š<ÿt+f¶—ÕŠÈÀé$f¶Éf¶ÀfÁàfÊf È·ÁPèYWÿYƒøÿtƒÃsƒ>u³3À_^[]ÃÈÿëö¸€ºø ïV‹t$ƒÂ°iVîèYƒøÿu À^ˆßdƆVè÷Vh,ÜýÿèEÿÿÿƒÄ ^ÃSUV‹t$‹†!Š3Ûœd‹WƆ.¶É8^Ouâð hÞýÿë âð pÞýÿd‰‹†!œd‹É€d‰‹†!œfd‹º€f Êfd‰‹†!œfd‹Jf#Êfd‰½¿8ž³„µ8^O…¬‹†!˜fd‹fƒÉfd‰‹†!˜fd‹fƒÉfd‰‹†!˜fd‹fƒÉfd‰‹†!˜fd‹ºf Êfd‰‹†!˜fd‹‹Õf Êfd‰‹†!˜fd‹‹×f Êfd‰‹†!˜fd‹º@f Ê鷋†!˜fd‹ºþÿf#Êfd‰‹†!˜fd‹ƒÂýf#Êfd‰‹†!˜fd‹ºïÿf#Êfd‰‹†!˜fd‹ºÿþf#Êfd‰‹†!˜fd‹ºÿûf#Êfd‰‹†!˜fd‹ºÿïf#Êfd‰‹†!˜fd‹ºÿ¿f#Êfd‰8ž³t8^Ou‹†!ÈdŠ€áǀÉ닆!ÈdŠ€áÀdˆSVèµÿÿ‹†!YðYfd‹ºf Êfd‰‹†!ðfd‹f Ïfd‰j3ÉZ‹†!‹Ýðfd‹8Óûf ûfd‰8AJu⋆!,dŠ€Édˆ‹Ž!¸PÁ‚fd‰‹†!Šfd‹ºúåf#ʺf Êfd‰‹†!,fd‹ºÐÐf#ʺf Êfd‰‹†!3ÛŽdŠ8ž³t8^Ou€áë€Ékë€áҀÉRë€áՀÉUdˆ8^Ou8ž³uVèáéÿÿY€~OuVèÔéÿÿY‹†!Hd‹áÿÿ¿ÿd‰‹†!ÙdŠ€áýdˆ‹†!‰dŠ€ÉÀdˆ‹†!‰dŠ€áßdˆ‹†!‰dŠ€á?€É@dˆ8u"8^u‹†!ˆdŠ€áڀÉdˆ€~u‹†!ˆdŠ€áڀÉdˆ‹†!ˆdŠ€Édˆ¶FO+ÃtOHtƒÈÿé ‹†!¨dŠ€áþ€Édˆ‹†! dÇXU¶FN¶À ¶VŠ”¬Õýÿë?‹†!¨dŠ€Édˆ‹†! dÇU¶FN¶À ¶VŠ”¤Õýÿ‹†! d‹8¶ÒçÿÿÿÀÁâ úd‰8‹†!”dŠ€âþdˆj3Ò3À_8u-‹è+ët!MtMt MuÊˆëÊDëÊ"ëÊ@AOuʋ¶!†œfd‹f Êfd‰3À_^][ÃUl$ŒìhSVWj Y¾´Õýÿ½@ÿÿÿó¥f¥jY¾ÜÕýÿ}œó¥f¥¤jY¾<Öýÿ}üó¥¤j Y¾\Öýÿ½ ÿÿÿó¥f¥j Y¾Öýÿ½hÿÿÿó¥f¥jY¾ÄÖýÿ}ó¥f¥¤‹u|¶· ETÞýÿ¶~¯ù‹ÁkÀ‹ÑÇ'Áâ ;Çw‹Ç+ЋÂ3ҍ< ÷÷;Ñr@¶NO3Û+Ët[ItƒÈÿé9‹Ž!ÁÀd‹âÿÿ?€Áà Ðd‰‹†!Àd‹áÿ?àÿÉ d‰‹†!Àd‹áÿßÿ닆!Àd‹É €d‰j&…@ÿÿÿPÿ¶!èÚŠFOƒÄ :Ãu ŠN€ÁˆMÞ<u ІÖˆEÞ8^u¸ÿÿf‰E÷3Àf‰Eùj_EœPÿ¶!è“jEüPÿ¶!肃Ä8^uj2… ÿÿÿPÿ¶!èfƒÄ €~u%8^u ¸Èf‰Eƒj2…hÿÿÿPÿ¶!è;ƒÄ ¶¶NÁàȉE|ôÿÿÿf‹ˆDìýÿf‹€Fìýÿf‰E(ŠFOf‰M/:Ãu8ž³tÇED0<…°ŠNІÖ¶Ñ¶ø‹Ú+߃à +ƒû~¹™ëf¶Éf¶Àf+ÈfƒÁ +¸f¯ÈƒÀ™f Èf¶¾Öf¶F‹ß+؃ÃÁã f Ëf‰M¶NM|»ðf‹ ~ìýÿf#Ëf‰M(‹Ž!ÁœdŠ €áf¶É+ÇÁà fƒÁf ȋE|f M(Ðf‹•|ìýÿf‰E/jWEPÿ¶!è- VèÄÿÿVè·ÁÿÿƒÄ3À_^[ƒÅtÉÃU‹ìQ‹MS2ÛVW2҈]þˆYˆYˆ]ÿ¶}ÿ‹ÇkÀA„18u ˆ\yˆ\yé'ŠX@€ãþEþ4ˆ^PÆDyŠX€ût€û …ÆAOëÆAOŠYOˆ] „ÛuŠX€ûuÆAë €û…òÆA€} uŠX€ã€û…ÙÆA€} u +ö@ …Å€} u +ö@ …µ€} u9ŠPÀêþʈVŠPÀêþʈV ŠP€ê ˆV ŠP€ê ˆV ŠX2ŠPÐë€ã€âY€yOu6ŠP³"ÓþʈVŠP€âpöÚÒþˆV ŠP"ӈV ŠPÀê"ӈV ŠPÀê"Ӏ~ w4€~w.2ۈV:ÓvÆDy€úwþEÿ€}ÿ‚«þÿÿ3À8]þ•ÀH_^[ÉÃÈÿëöU‹ìƒì SW‹}Š_OÆEþ„ÛuÆEÿx€ûuÆEÿþ2Ҷ‹ÈkÉA€|GŒ91t¶Ãƒèt +HuGŠAÀëŠA Eÿþ€úrˀ}ÿuÆEÿ@Ї-ˆE <vÆE ¶ÃƒèV„?HtƒÈÿé/ƒÈÿé(¶E À·°\Ýýÿ·€`Ýýÿ‰EøG‰E=ÇEô‹E€8t?¶Aÿ¶iÀè™÷ûf¶Q·Àf¯Ð·Òf;Öv·òf¶Qf¯Ð·Âf;Eøv·À‰EøƒEƒÁAÿMôu­ÆE ¶E ·E\Ýýÿf;ðt"w þE €} räë€} tþM ¶E ·4E\Ýýÿ·Eø·Î™÷ùˆEþ…ÒtþEþŠEÿ2ۈEø„Àt)ÿuøè¾ŠØ€ÃY:]þtÿuøè«Y²‹ÈÒâöÒ Uøu׊E ¶È· M\Ýýÿ¶Ó¯Êù N~¸ÿÿÿÿ눈_3À^_[ÉÀuÆE ŠEÿˆEø„À„¹ÿuøÆEþè;YˆEý2۶ËÈkÉA€|G´91tV¶FPè$Y¶Mý¶À+ÁÀ¶ˆPÝýÿŠL1„Ét:¶€QÝýÿŠT0„Òt+¶E À8ˆXÝýÿr8YÝýÿrÿuøèÍYˆEþþÀûrëÿuøè¸Y²ÆEþ‹ÈÒâöÒ UøŠEþ„Àu 8Eø…QÿÿÿëŠM ˆˆG€}þ…ÿÿÿþM é'ÿÿÿU‹ìƒì0ƒeøƒeôS‹]ŠVWjˆEþ3ÀY}Ðó«ˆEÿ¶Eÿ€|C„ÒŠKOkÀA´1€ùu¶F ¶~ iÀè™÷ÿ·À‰Eô¶ÁÆE ‰Eð‹Eðƒèt=H…ü¶U ¶Õ©Ýýÿ¶D0¶ ÕªÝýÿ#Á¶ Õ¨Ýýÿ¶L1ÁàÁ·Mô¯Áë?¶U ‹ÊÁᶁiÝýÿ¶|0¶jÝýÿ#ø¶hÝýÿ¶D0ЉkÝýÿiÀèÓè½äÝýÿL•Ћ;Ðv‹ÂþE €} ‰‚aÿÿÿþEÿ€}ÿ‚ÿÿÿŠCO„ÀuÇEødÝýÿ<uÇEø¤Ýýÿ‹uø…öt?ÆE F¶M ƒ|Ðt/ŠŠFˆUÿ:Âw#¶Uþ·U\Ýýÿ‰Uð¶Ð¯Uð;TÐs þÀ:EÿvìƒÈÿëƒÆþE €} ˆDr±3À_^[ÉËD$2ÒÆ@8Pu@SVW2ۍpx2Ò8t"þÂ8Vþu²€>u€Â€úw ŠË€áÉÒâPþÃGGF€ûrÎ_^[€xu4ŠH„Ét€xt€x²uþÂë€xu„Ét²8Pt8Pu²ˆP3ÀÃU‹ìQŠESVWˆE„ÀtMŠ]ŠE ‹M€ã qˆEþyþMf‹Ñì¨uø°þîf‹ÖŠÃîŠEþf‹×îQ°Hîf‹ÑìˆEÿ¨tõ¨t€}uʃÈÿ_^[ÉÍQì‹UˆŠEÿ @f‹Ñî3ÀëåU‹ìƒìSV‹uWÆE ¶] ‹ûkÿA„71‰EôƒÀP¶†ÉjPœ3Ó¶P·†%Pè;ÿÿÿƒÄ‰Eü…À‹EôtÆé±ƒÀŠ<tS< …´ÇEø0ÞýÿÇEð‹Eø¶¶ÈύŒ12QP¶†ÉP¶P·†%PèÚþÿÿ EüƒÄÿEøÿMðuÅëIÇEøÞýÿÇEð‹Eø¶¶ÈύŒ12QP¶†ÉP¶P·†%Pèþÿÿ EüƒÄÿEøÿMðuŃ}ü‹Mô”ÀˆþE €} ‚ôþÿÿ3À_^[ÉÃÈÿëöd¡ðÐþ‹L$S2ÛÈd‹ðÐþ;Èw;Ðs;Ñr³„Ûtç[ÃQSPSQR¸¢ƒàˆD$ZY[XŠD$[YËD$2É8w ƀ³ëˆˆ³8ˆ³tƀ´ƀµë Æ€´?ˆˆµˆˆ3ÀËL$‹! d¶ƒàHHt HtƒÈÿÃ2Àë°ˆA3ÀËL$‹!¶fd‹V¾ÿþf#Öfd‰‹‰!¶dŠ€áÀdˆ3À^ÃU‹ì€}‹M‹Áu:V‹u€~Ou,öE t&¶U Ñê€|2Ptº¨#‹ñÀæþÿÿÑé Æ#Ê ÁÁà^]ÃU‹ìŠE3ҊÈ8UubSV‹u€~Ou&öE t W¶} Ñï8T7P_tŠØÐé€ã€áÛ +Ë$Ï +ȋ†!qdŠ€ãÁ +ÙdˆRÿuÿu VèSÿÿÿƒÄ E^d‹‰E[]Ãèrþÿÿ‹L$ƒ¹uºø ¸`€ïƒÂíƒàð‰!ƒ8u‹‘ƒÂHd‹ƒâþ‰%fƒ8VWu‹‘Â °fd‹¾üÿf#Öf‰‹±dŠFˆ+¾ãdŠÀè$t²*Ðë²dŠ†äˆ‘,dŠ$ÀÀê +Ât²*Ð벍Fˆ‘-fd‹f‹òºðÿ‹úf#÷¿ f;÷_^uÆAfd‹f#º f;ÂuÆA3ÀËD$€¸t%‹ˆ!Ád‹ Áé€áöÙɀáý€ÁˆˆÃU‹ì‹U‹‚ð€d‹ƒàþˆ4d‹‰‚'ƒàü €d‰d‹‰Ed¡ÐþƒÈd£Ðþ3À]ÃU‹ì‹M‹ð€d‹d‹Ðþƒâüd‰Ðþƒàþd‹Ðþ‹‰'‰Ud‰ˆ4d¡Ðþ‰E3À]ËL$‹!hd‹Ê@d‰‹Á¢€dŠ€âdˆ‹ôdŠ€Édˆ3ÀÃU‹ì¶E¼À‰E]ÃU‹ì¶E½À‰E]ÃV‹t$Wj~gYó¥f¥¤_3À^ËT$‚׋ƒùsV¶t$ ‰´ŠÛÿ^ÃS‹\$€»u0€»ÎtVWjYsg‹ûó¥f¥¤_^ëhÿSè©ÿÿÿYYƃŠCÀ +CÀ +CÀ +Cˆƒ¶3À[Ãf‹D$º€fïËD$ƒÈ3Ò¹0¸èÿÿº¹0Ã3À3Ò¹0¹0ÃU‹ì‹Eˆ ‰E;Ás‹Ed®8ƒE@9Mrð]ÃVW‹|$ ‹‡°¢€dŠdŠ€¤€$ý„Éy€á²ë€É€2ÒöÁt€É 8dˆ‹Á¤€dˆ_^„Òtºù °î3ÀËL$‹D$ SV4ŠŠÂ$ð<€·A•ÃD$ ¶Òþ˃â€ã€JtlJtTJtCJt'JtJuj„Ûu d‹#Q Qd‰ƒÁ ëU„Ûu‹Qd‰ë„Ûufd‹f#Qf Qfd‰ƒÁë0„Ûuf‹Qfd‰ë„Ûu dŠ"Q +QdˆƒÁë „ÛuŠQdˆƒÁ;΂^ÿÿÿ^[ÃU‹ì‹Eë ŠM ÿMˆ@ƒ}wñ‹E]ÃU‹ì‹E‹URj0jPÿQ4ƒÄ…À|8‹E‹M ‰H‹E‹M‰H‹M‹E‰A ‹M‹E‰A$‹M‹E‰A(‹E ‹M‰A,3À]ËT$ ‹D$‹V‹t$VƒÂRjPÿQ4ƒÄ…À|W‹>‹t$ƒÇ¥¥¥¥3À_^ÃU‹ìQV‹uEüPÿuÿu Vè´ÿÿÿƒÄ…À|ÿuƒEüÿu‹ÿuüÿPPƒÄ 3À^ÉÃÌÌÌÌÌÌÌÌU‹ìQ‹E‹U ‹Mƒá?¥ÂÓàƒù r‹Ð3ÀYÉËD$‹‹L$+u‹P+Qu‹P+Qu ‹@ +A u°Ã2ÀÃÌÌÌU‹ìƒÄøW‹M ‹}‹Ç$„Àt ƒùt[ÆGIëì‹ÑÁéÁá+ÑÁéƒùt2EøïÀGGGG G(G0G8ƒÇ@IuÛoEøw‹ÊÁé3Àó«‹Êƒáóª_ÉÃÌÌÌÌÌÌÌÌU‹ìƒÄøVW‹M‹u ‹}‹ÆÁ;Çv‹ÇÁ;Æv;÷„º‚ ƒù„«‹×€â„Òt ŠˆIGFëå‹ÁÁèÁà+ÈÁèƒøtQEøooFGoFGoFGoF G oF(G(oF0G0oF8G8ƒÇ@ƒÆ@Hu¹oEøwƒùr‹‰ƒéƒÆƒÇëìƒùtŠˆIFGëòñNùOƒùt ŠˆINOëò_^É÷@€à%þÿ÷D$V‹t$ WxWè9ƒ|$Yu Æë÷Ö#ÆPWè)YY_^ÃU‹ìQMüjÿuüÿuè¸ÿÿÿƒÄ ÉÃf‹T$íÃf‹T$‹D$ïÃAcpiGlobalVariableDIMM0ýÇýÿˆ¿ýÿ +Áýÿ®Ãýÿ=Åýÿ + ?ÿÿÿÿ€€€€¿@¿@¿@¿@ß ß ß ß ïïïï÷÷÷÷ûûûûýýýýþþþþÿÿÿÿ€€€€@¿@¿@¿@¿ ß ß ß ßïïïï÷÷÷÷ûûûûýýýýþþþþÿÿÿÿ€€€€¿@@¿@@¿¿ß ß ßßïïïï÷÷÷÷ûûûûýýýýþþþþÿÿÿÿ€€€€@¿¿@¿¿@@ ßß ßß ïïïï÷÷÷÷ûûûûýýýýþþþþÿÿ€€€€€€¿@@@¿@@@ß ß ïï÷÷ûûýýþþÿÿÿÿÿÿ€€@¿¿¿@¿¿¿ ßßß ßßßïïïïïï÷÷÷÷÷÷ûûûûûûýýýýýýþþþþþþÿÿÿÿÿÿ€€¿¿@¿¿@¿¿ßß ßß ßßïïïïïï÷÷÷÷÷÷ûûûûûûýýýýýýþþþþþþÿÿ€€€€€€@@¿@@¿@@ ß ß ïï÷÷ûûýýþþÿÿÿÿ€€€€¿¿@@¿¿@@ßß ßß ïïïï÷÷÷÷ûûûûýýýýþþþþÿÿÿÿ€€€€@@¿¿@@¿¿ ßß ßßïïïï÷÷÷÷ûûûûýýýýþþþþÿÿÿÿ€€€€¿¿@@@¿¿@ßß ßß ïïïï÷÷÷÷ûûûûýýýýþþþþÿÿÿÿ€€€€@@¿¿¿@@¿ ßßß ßïïïï÷÷÷÷ûûûûýýýýþþþþÿÿÿÿÿÿ€€¿¿¿@¿¿¿@ßßß ßßß ïïïïïï÷÷÷÷÷÷ûûûûûûýýýýýýþþþþþþÿÿ€€€€€€@@@¿@@@¿ ß ßïï÷÷ûûýýþþÿÿÿÿÿÿ€€¿¿¿@@¿¿¿ßßß ßßßïïïïïï÷÷÷÷÷÷ûûûûûûýýýýýýþþþþþþÿÿ€€€€€€@@@¿¿@@@ ßß ïï÷÷ûûýýþþ#$#%$#%%$#%&%'&%''&%?8?<'$?8?<'$8› 8ÿ8$8 8ð8þ8€þÿûÿ¯ûðà°þÿHü  þ9Ñü@Ñð ònÿÿàÿ?d€ÿ0üÿ@þÿx ü€ þø$ýüÿ@þÿ| ü€ þø$ý<‰zª€ÿð,ˆDÀÿÿÿð ÑÿÿÿðÐÿÿàð €à{ d2ÀÀ + X$Hÿÿÿ€`þÿÿÿð°@ ¢¤@¨@¬@0@PpPÀÐðÐ@PpP€€€€€€  €€€@ÀPð€€  @ˆ€„@ˆ€„€@€@° ƒ˜ƒšÿÿ¢¤¨¬ 0@€(8 €¸ ¸ èи ÜÄ Ðè¸ Ä Ä ˆ ¸ Œ +¨ âô ¤1 $04(8<@@€˜”œðh`ÿÃðø<dx†ü3333DDDDšðqÙû ø@ØñÄÀÿ?eàÜ'ø@ÿ€ËýÿÿOÊýÿÿ¶Çýÿ_¬ýÿ gýÿ!=¬ýÿ"¥ýÿÿAÌýÿÿ*Èýÿ1ö€ýÿAìˆýÿBW‰ýÿQ5·ýÿaqýÿbB¢ýÿc5ýÿq†“ýÿrÝpýÿs€ýÿtý”ýÿ­˜ýÿ‚ç˜ýÿ„ɱýÿ…ü³ýÿ†›ýÿƒªšýÿ‘=œýÿ’B—ýÿ¡¨ýÿ¢¤«ýÿ£Ëcýÿ¤{cýÿ¥fýÿ¦ùeýÿ±dœýÿ –ýÿÑԞýÿá…¼ýÿñz¬ýÿòåÊýÿÿ™ÊýÿÿHËýÿEÆýÿýÇýÿˆ¿ýÿ +Áýÿ®Ãýÿ=Åýÿ +0E%@¸ Ä ˜:Ô0 + +$N*(%&  + +NÿèúúèMMéôôé››êîîê + $%&(*1 + ?› › ¸ Ä pˆ'B!B!B!B €ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ      ÿÿÿÿÿÿ¥*  ÿÿÿÿÿÿ( +0 *¢.â.â.â*¢*¢*¢.â.â.â*¢*¢22****;;;;'''' ))))5555777722****;;;;'''' ))))5555777755 + +####))))))))....666600000000---- + + + + + + + +55 + +""""""""''''////,,,,////////;;;;    t¢Ðþ, + + + + + + + + + + + +fªUUwwfªUUww + + + +UUªª.â.â.â(‚UfwwUU,Â,Â,Â,Â,Â,Â,Â,Â,Â,Âff™™   + + + + + + + +             6666666666666666666???????????????????||1B1B'(Ä'(6)L6)L                +  +  + +  + +  + +  + +  + +  + +  + +  + +  + +  + +  +  +  +          +  + +  + +  + +  + +  + +  +   + +  + + + + + + + + + + + + + + + + + +      !  !   !   !   #   #   #   #  3333ÿÿÿÿÀÏÀÏÌ¿¦L¦À¿ @ }yuqmiea + + ,,qAd>d4Y8¨£$ $ Eš9™Iš9™I™Y!$ E$ Eš ™L™Yš ™Y!™Y     !0  ˆ|43  ƐÜ<ûuJžyYéÝx¹úaßä‹Ê“Òª à˜+ŒÑñ­mÌÔI»n‚±ý€ÿ=ŸL7AÓMœ‹—¨?ýúÍ3KV*ɓE¿$säŸ>š?4Q4j4Z<¼< =Ã>Ñ>Û>ó>?9???Q?X?j?w??—?ª?¾?Å?ø? ¬0>0D0Z0b0x0…0‹0¡0©0¿0Æ0ô0121L1v1§1Á1Ý1%292T2`2“2Ç23 +313{3‹3Ô3(434W4Ÿ4ü45b5i5p5¯5Ù5ñ56 676R6³6Ñ6Ú67%7R7`7Å8ã89;9{9™9Í9ß9÷9?:Q:i:¾:Ü:;4;t;’;Æ;Ø;ð;8K?0(d6‚6â6õ6œ8ª8!:c:w:<;};#?œ?¦?°?º?@dþ0 1,151>1D1N1Y1d1n1w1}1£1¬1µ1»1Å1Ð1Û1å1î1ô1r3„3µ3Ï3Ë5Ø699è9: :/:K:R:\: ;;$;à;S=Ã=?,?Ý?P(²2Ç2Ü2ñ2W3i3‘:—:¨;Ç;H$>(>,>0>€hš9 9¦9¬9²9¸9¾9Ä9Ê9Ð9Ö9Ü9â9è9î9ô9ú9:: ::::$:*:0:6:<:B:H:N:T:Z:`:f:l:r:x:~:„:Š:: :¤:¨:¬:°:´:ÿÿÿÿ ÊÉ_Ó2¿F‘jÅ À÷ëë‹(@Ä ø¬ VZL À`@óýÿ .text«@À@ `.data @À.reloc U‹ìQ‹E P‹MQ轃ĉEü3Òuü‹å]ÃÌU‹ì‹E P‹MQèÐÿÿÿƒÄ‹U R‹EPèƒÄ]ÃÌÌÌÌÌÌÌÌÌÌÌU‹ìƒìVWj`轃ĉEì3Àuüj 謃ĉEô3Éuü‹UìÇsmma‹EìÇ@œõýÿ‹MìÇA üöýÿ‹UìÇBÜøýÿ‹EìÇ@¼ùýÿÇEðhŒüýÿè(ƒÄ‰Eð‹MðƒÁ‰Müƒ}ðu3Òuü¸€éôÇEøë ‹EøƒÀ‰Eø‹Mü‹Uø;ƒ‹EøÁà‹MøÁá‹Uì‹uü‹|‰| + ‹D ‰D +$‹MøÁá‹UøÁâ‹Eì‹uü‹|‰|(‹L‰L,‹UøÁâ‹EøÁà‹Mì‹uü‹|‰|0‹T‰T4‹EøÁà‹MøÁá‹Uì‹uü‹| ‰| +8‹D$‰D +<é\ÿÿÿ‹Mì‹Uø‰Q‹EôÇ€‹MôÇA|üýÿ‹UìƒÂ‹Eô‰P‹MôQ‹U R‹E ‹‹Qÿ҃ĉEè3Àuü‹Eè_^‹å]ÃÌÌÌÌÌÌÌU‹ìƒìV‹E ƒè‰Eø‹Mø‹U;Qr3Àuü¸€é/ë3‹MÁá‹Uø‹D +8ƒà‹L +<ƒá‰Eì‰Mð‹Uì Uðt3Àuü¸€éúŠ žàˆMÿ¶Uÿƒâ@t3Àuü¶MÿƒÉ@ˆMÿŠUÿˆžà àˆE÷¶M÷ƒát3‹UÁâ‹Eø‹L8ƒÉ‹T<‹EÁà‹uø‰L8‰T<3Éuü¸€é¶U÷ƒÊ@ˆU÷ŠE÷¢à‹MÁá‹Uø‹D +8ƒàí‹L +<‹UÁâ‹uø‰D8‰L<‹EÁà‹Mø‹T8ƒÊ‹D<‹MÁá‹uø‰T8‰D<‹UøÆB žàˆEÿ¶Mÿƒá@t3Òuü¶EÿƒÈ@ˆEÿŠMÿˆ žà3À^‹å]ÃÌÌÌU‹ìƒì$V‹E ƒè‰Eø‹Mø‹U;Qr3Àuü¸€é±ë3‹MÁá‹Uø‹D +8ƒà‹L +<ƒá‰Eì‰Mð‹Uì Uðt3Àuü¸€é|‹MÁá‹Uø‹D +8ƒà‹L +<ƒá‰Eä‰Mè‹Uä Uèt +¸€éM žàˆEþ¶Mþƒá@t3Òuü¶EþƒÈ@ˆEþŠMþˆ žàŠàˆU÷¶E÷ƒàt3‹MÁá‹Uø‹D +8ƒÈ‹L +<‹UÁâ‹uø‰D8‰L<3Àuü¸€éà¶M÷ƒá¿ˆM÷ŠU÷ˆà‹EÁà‹Mø‹T8ƒâþ‹D<‹MÁá‹uø‰T8‰D<‹UÁâ‹Eø‹L8ƒÉ‹T<‹EÁà‹uø‰L8‰T<ÆEýÆEÿë ŠMÿ€ÁˆMÿ¶Uÿ‹Eø;Ps0¶MÿÁá‹Uø‹D +8ƒà‹L +<ƒá‰E܉Màƒ}Üu +ƒ}àuÆEý뻋UøŠEýˆBŠ žàˆMþ¶Uþƒâ@t3Àuü¶MþƒÉ@ˆMþŠUþˆžà3À^‹å]ÃÌU‹ìƒìV‹E ƒè‰Eø‹Mø‹U;Qr3Àuü¸€éªë‹Mø¶Q…Òt3Àuü¸€é‹MÁá‹Uø‹D +8ƒÈ‹L +<‹UÁâ‹uø‰D8‰L<‹EøÆ@Š žàˆMÿ¶Uÿƒâ@t3Àuü¶MÿƒÉ@ˆMÿŠUÿˆžà¶àƒÈ¢àŠ žàˆMÿ¶Uÿƒâ@t3Àuü¶MÿƒÉ@ˆMÿŠUÿˆžà3À^‹å]ÃÌÌÌÌÌÌÌÌU‹ìƒì ‹E ƒè‰Eü‹Mü‹QÁâ‰Uô‹E‹;Môs 3ÒuüÇEø€ë‹EôP‹MüƒÁ Q‹URèƒÄ ÇEø‹E‹Mô‰‹Eø‹å]ÃU‹ìƒ}‹Et;E tÿuÿu PèƒÄ ]ÃU‹ì‹E W‹};Çvƒ}‹Ït-+NJÿMˆAƒ}uñës‹MV4ëIJŠNˆ…Éuõ^‹Ç_]Ãéjÿt$ èYY3ÀÃÌÌPP<$XZÃÌÌÌÌÌÌÌo|$ÃU‹ìQèÊÿÿÿ‹UüRÿuPÿQLƒÄ …À}ƒeü‹EüÉÃÿt$èÑÿÿÿY…Àt ÿt$PèYYÃéjÿt$ ÿt$ èƒÄ ÃU‹ì‹Eë ŠMÿM ˆ@ƒ} uñ‹E]ÃU‹ìQEüPè~‹EüYÉËD$·ºÿÿV‹òf;Ît·Éf;L$t·HÁ·‹òf;Îué3À^ÃVÿt$ ëFPÿt$ èDYY„Àu·FÆPjè¦ÿÿÿ‹ðYY…öu׋Æ^Ãè‚ÿÿÿPÿt$è½ÿÿÿYYÃèÎþÿÿÿt$‹PÿQ0YYÃU‹ìQQSV‹uWVèD‹} W‹Ø‰Uüè6YY;Øu)9Uüu$ƒÆVè"ƒÇW‹ð‹ÚèYY;ðu;Úu°ë2À_^[ÉËL$‹‹QÃÌÌÌÌÌÌÌÌ̊L$ 3ҋD$öÁ DÐDD$­ÐÓêÃÌÌÌÌ̊L$ 3À‹T$öÁ DÂDT$¥ÂÓàé3&Í̾Hˆ†:Ã.ÖÑñ­mÌÔI»n‚±ý€ÿ=É2Ó2Ý2ç2ó2ä3ÿÿÿÿq½fÈy|ñK©;kƒ š @ô"ø(H×tŒüæN’ˆÄ¾À’¤©3&Í̾Hˆ†:Ã.Ö´"VZL ¸ô@ýýÿà#D.textû@@ `.data @ @@À.relocPà#`à#U‹ìQQVW‹}Áç }ƒ}¾uÏ€€}tÏ@‹EƒètHtHt¸€ëUÏ ëÏë‹u Áæjèy %ðÿÿ‰°°‹E$j +Pÿu ƒâ‰Uü‰>ÿP‹%ƒÄ÷ØÀ%€_^ÉÃU‹ìQQjè1 ƒâ%ðÿÿ‰UüYˆð‹âýÿÿÊ‰ˆP‹âÿþÿÊ‰ˆ`‹%ÿþÿ€}t ë ‰ÉÃU‹ìSVÿu èŒÿÿÿ3ÛY8] u9]t ÿuè-Y‹u¶FPSè¶FP覶FPèw¶FPè¾¶FP¶FP¶FP¶FPèRƒÄ$8^t8^^[t]é+]é.^[]ÃU‹ìVW‹}‹w VèôEPÿw0èÑ +ÿu jVèQÿÿÿÿF0VèéƒÄ_^]ÃU‹ìQQSVW‹}‹G ‹wh‰Eüè PVèõ ƒ¦‹G(‰†dž€Ç† =ÿýÿ‰¶è` ‰† ‹E‰†(j‰¾$ÿw†Pè  jÿw†Pè ÿu ‹_ ÿu3ÀjPjPPj‰C0è˜ýÿÿƒÄDÿu ÿujjjj ÿuüVèÅ ƒÄ PjjèqýÿÿƒÄ ëè‹GLH9C0rò_^3À[ÉÃU‹ìQQƒeüV‹ðjEüPVWÿV ‹MøQÿuüWÿPLÿuøEüPVWÿV ‹Eü‹MøÁè‰EüÁàDà‰Eø‹H‹@´ðÿÿƒÄ,;ñrh´þÿVèm YY„Àu‹Eøî;psá3À^ÉËÆëùU‹ìSVW‹}‹MQjjhDþÿWÿP ƒÄ3ö‹EVPWÿƒÄ F…À}ð‹EèEÿÿÿ‹ðÿ¶ ‹Fp‹^ÆPÿsè^ ÿ¶°‹†ÆP‹CÿpèD ƒÄ3ö‹EVPWÿPƒÄ F…À}ï_^‹Ã[]ÃU‹ìƒì Vfº€°Èî‹u ‹MøQVÿP(YY…ÀŒ£ƒ}ø…™SWVè@ÿÿÿMôQj‹øjÆG‹h$þÿVÿP ‹þÿ‹‹_ MüQ‹ þÿÑ þÿÁâRVÿPL‹hÄþÿVÿPÿuüèujjSè¼üÿÿhÿw»TþÿSè‚ +ƒÄHÿuüWÿuôVèXýÿÿhSÿwèd +ƒÄ_[3À^ÉÃV¾ VèK €|$ YtƒâûëƒÊRPVè? ƒÄ ^ÃjèÐÿÿÿYÃjèÇÿÿÿYÃU‹ìƒìVWEäPjèé‹EäYY‹ð‹ÐÁêÁîjY#сæÿò‹ø‹ÐÁï Áêçð#Ñ#Áú‰Eüƒþu ;ù…¡ƒøs;ñ…”ƒÿ…‹Sh è¦Y2ɋ؋Â8MtãÿýÿÿëË‰Eø8M tãÿÿ÷ÿëËƒþu/ƒÿu*ƒ}ür$8Mt eøÿÿÿëMø€8MtƒeøßëƒMø è^ÿuøSh è;ƒÄ èc[_^ÉÃU‹ìƒìEðPjèñ‹EüYÁèY$ÉÃV¾ VèùR%ÿûÿÿPVèøƒÄ^ÃV¾ VèÛR PVèÚƒÄ^Ãè¢ÿÿÿ„Àu¸€Ã€|$tèÇÿÿÿëè¢ÿÿÿ3ÀÃU‹ìQQjEþPEÿPEøPèüƒÄfƒ}øu,hîèxÁèƒà€}ÿYu€}þrƒøu +ŠÀÉÀ}ÿtñ2ÀÉÃV¾ VèFRƒàþPVèGƒÄ^ÃV¾ Vè*RƒÈPVè+ƒÄ^Ãèqÿÿÿ„Àu¸€Ã€|$tèÉÿÿÿëè¦ÿÿÿ3ÀÃU‹ìQQjjEÿPEøPèOƒÄfƒ}øtfƒ}øu3€}ÿt€}ÿu'V¾ Vè¶€}YtƒÈëƒàþRPVè«ƒÄ ^3ÀÉÃU‹ìƒì€} „ jjEPEüPèæEäPjèKƒÄöEð€„â÷Eð@„ÕSVWhyèD‹ØY‰Uø÷Ãtjÿjÿh{è4ƒÄ ·Eüƒøt ƒø”ÀþÈ"Ãë°:Ãs$¶ðŠË*ȍ4µ¶ùjÿjÿVèûƒÄ ƒÆOuífƒ}üu>„Ûv"¿¶ójjWèÕƒÄ ƒÇNuífƒ}üu€}u/j*è¬R žPj*ëfƒ}üuj+è“RƒàPj+蓃Äèç_^[ÉÃU‹ìQQSVWj:èkj[¿þW‹ð‰UüèX%3Ò ÂYYt#óR‰uøXt…ÀuWè8‹ØYãÿ_^[ÉÃU‹ìQVWè¢ÿÿÿ‹u3ÿ‰Eü9= þÿv ·}ÐþÿPèþ‰‰VƒÆGY;= þÿrà3ÿ9=þÿv3jh hÿèÝ·}èþÿPèɉVƒÄƒÆG;=þÿrÍ3ÿ9}üv·}ìþÿP蚉‰VƒÆGY;}ürã_^ÉÃU‹ìQQSVWèÿÿÿ‹ þÿ‹}‰Eü¡ þÿȍ4ǍÏèΉEø‹%ÿ÷ÿÿjPhÿèQ3ÀƒÄ ‰E9 þÿv+ë‹EÿtÇÿ4Ç·EÐþÿPè'ƒÄ ÿE‹E; þÿr×ÿvÿ6hÿè‹}üƒÄ 3ö…ÿvÿtó·uìþÿÿ4óPèæƒÄ FF;÷râ3öF;þvÿtó·uìþÿÿ4óPèÁƒÄ FF;÷râÿuøè>Y_^[ÉÃÌÌÌÌÌÌ àƒÈ@"àà À%ÿÿÿß @"À  à‹Ð%ÿÿÿ"à Ø"؋ÂÃU‹ì Ø"Ø À%ÿÿÿŸ"À‹E"à]Ã`‹ì°ÿ‹]$ð†<tóëõaÃ`‹ì°‹]$ð†aÃóÃVjj¾‹Vè!jjèìƒÄj VèYRPè¡ƒÄ ^ËD$ƒÀ0jPjyèïƒÄ è¶ÿÿÿ‹L$+÷ØÀ%ÿÿÿ€Ã3É3À9L$v‹T$ŠA;L$rò÷ØÀ%€ÃU‹ìQQSVWj2jÇEø€èŒYRPè,‹U $ƒÄ ƒ:ˆEþÆEÿ„ëŠEþ¶Mÿ‹4Šƒ>…Ù‹M‹}9N u=‹N;v63ÒBŠÈÓâ…Vt*‹F…ÀuhëƒÀ0ÁèPVèXÿÿÿY‰EøY…ÀŒ“ë|‹N…É„†‹F;v‹F +Áƒè0tu|10¨umÁèPWèÿÿÿYY‰Eø…À|Z‹ƒÇÆEÿ…ÛvMjWèýþÿÿYY‰Eø…À|‹E9u ŠMþ3À@Óà…GuƒÇ þEÿ¶Eÿ;ÃrÍë‹}WVè˜þÿÿYY‹N‰Eø‰…À|€Eÿ¶Eÿ‹U ƒ<‚…ÿþÿÿ‹Eø_^[ÉÃU‹ìƒìEìPjè0è&þÿÿ‰EüEüPÿuÿuìè•þÿÿ‹M ‹UüƒÄ‰ÉÃÌÌÌ̌Ȏ؎ÀŽÐ3ÀŽàŽè¾f‹¿ f‹‹øƒïfÃf‰¾f.3ÀŽØ ÀfƒÈ"Àfgê f¸fŽØfŽÀfŽàfŽèfŽÐ‹ó‹þÇ¸ÿ‡=ÿt÷‹þÇ‹‹þÇ‹à‰¸‹þÇ‡‹þÇ(‹P‹þÇ$‹P‹þÇ ‹ÿЃÄúôëü¸d +þÿøDÃÌÌÌÌÌU‹ìQ‹E‹U ‹Mƒá?­ÐÓêƒù r‹Â3ÒYÉÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌôà ÃÃU‹ì`‹E¢ƒ} t‹} ‰‰_‰O‰W aÉÃU‹ìQ‹M2YÉÃU‹ì`‹M‹E ‹U0aÉÃ1ÃP ÀÈ$`<`t   À `"ÀXÃP  À%ÿÿÿŸ"ÀXÜXÃúÃûÃU‹ì`‹E‹M ¢‹}‰‰_‰O‰W aÉÃU‹ìƒìSVWEðPjè\ÿÿÿ‹E‹UðYY³…ÀtŠÊ"ˈ‹E…Àt +‹ÊÁé €áˆ‹u ‹}…öu…ÿtG‹ÊÁé"˅öt‹ÂÁè"È€ùt:Ëu ‹ÚÁë €ãð +؈…ÿtf¶Áf‰€ùuÁêâÿÐf‰_^[ÉÃé€U‹ìƒÄøW‹M ‹}‹Ç$„Àt ƒùt[ÆGIëì‹ÑÁéÁá+ÑÁéƒùt2EøïÀGGGG G(G0G8ƒÇ@IuÛoEøw‹ÊÁé3Àó«‹Êƒáóª_ÉÃÌÌÌÌÌÌÌÌU‹ìƒÄøVW‹M‹u ‹}‹ÆÁ;Çv‹ÇÁ;Æv;÷„º‚ ƒù„«‹×€â„Òt ŠˆIGFëå‹ÁÁèÁà+ÈÁèƒøtQEøooFGoFGoFGoF G oF(G(oF0G0oF8G8ƒÇ@ƒÆ@Hu¹oEøwƒùr‹‰ƒéƒÆƒÇëìƒùtŠˆIFGëòñNùOƒùt ŠˆINOëò_^ÉÃÿt$ ÿt$ ÿt$ èƒÄ ÃÌÌÌ̊L$ 3ҋD$öÁ DÐDD$­ÐÓêÃU‹ìQQSV‹uWVèD‹} W‹Ø‰Uüè6YY;Øu)9Uüu$ƒÆVè"ƒÇW‹ð‹ÚèYY;ðu;Úu°ë2À_^[ÉËL$‹‹QÃÌÌÌÌÌ̊L$ 3À‹T$öÁ DÂDT$¥ÂÓàÃÙ•BGäô@†{uÉ:µN€4þÿPXYhijklmnoÿ  +    oLk°ØH¢ºåñÍ}VTêÈLcJrO‚†H/ Î8;©3&Í̾Hˆ†:Ã.Ö8F4D55<6F6U6]6l66;;&;0;K;c;t; ;«;Ý;ó;<1FACSu9^ tfº€°ËîWÿv èFYYëĸ€_^[ÉÃU‹ìV‹u ‹M QVÿP(YY…À| ƒ} uVèÕþÿÿY3À^]ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌU‹ì¸P¸P¸Pè½ƒÄ ¾´%þÿ‹} ¹è%þÿé´%þÿÁéA󥺴%þÿ‹} »·%þÿ+Ú¸»%þÿ+ÂÇf&‰;»Ó%þÿ+Ú¸×%þÿ+ÂÇf&‰;‹EÁè»æ%þÿ+Úf&‰;‹Eƒà»ä%þÿ+Úf&‰;¸P¸P¸Pè4ƒÄ ÿçfgê(¸0ŽØŽÀŽÐŽàŽè Àfƒàþ"Àêð3ÀŽØŽÀŽÐŽàŽèêÉÃúÃ3ÀÃU‹ìQQV‹uEøP‹E jÿp ÿpÿpVÿuÿVƒÄ…À|4‹Eø#E‹Mü E#M‰Eø M EøP‹E j‰Müÿp ÿpÿpVÿuÿV ƒÄ^ÉÃU‹ìQQV‹uEøP‹E jÿp ÿpÿpVÿuÿƒÄ…À|4‹Eø#E‹Mü E#M‰Eø M EøP‹E j‰Müÿp ÿpÿpVÿuÿVƒÄ^ÉÃU‹ìƒì‹E ‹H S3ÛV‹p‰Mð‹HCW3ÿÓãH‰}ø‰Mü9xv>ÿuüVÿuðÿp‹EPÿuÿP‹Mð‰EøŠÃEðƒáð¶À™ƒÄÁÖ]ü‰Eð‹E G‹ò;xr‹Eø_^[ÉÃU‹ìQQV‹uEøP‹E ÿp ÿpÿpVÿuÿƒÄ…À|2‹Eø#E‹Mü E#M‰Eø M EøP‹E ‰Müÿp ÿpÿpVÿuÿVƒÄ^ÉÃU‹ìQV‹u‹MüQjjh,.þÿVÿP ƒÄ…À}¸€ë/‹E ‹H3Mƒá1MHQHQ¶HQÿpÿp ‹EüÿuPVÿƒÄ ^ÉÃU‹ìV‹u‹MQjjh<.þÿVÿP ‹E ÿp‹EPVÿPƒÄ ^]ËD$ÿt$‹@jÿÐYYÃU‹ì‹M·HtHHtHHuw‹A3Ò+ÂVtRHt + Root Key: + Vboot API: 1.0 + Algorithm: 11 RSA8192 SHA512 + Key Version: 1 + Key sha1sum: 541f467a7d8747f55ae9087ee4e34155f5ee3cd7 + Recovery Key: + Vboot API: 1.0 + Algorithm: 11 RSA8192 SHA512 + Key Version: 1 + Key sha1sum: 5d0d163b824cab5ae4f23fb2cc012e2a4124f4fe +Firmware body: Firmware A Data + Offset: 0x00040000 + Size: 0x000d0000 +Firmware body: Firmware B Data + Offset: 0x00120000 + Size: 0x000d0000 +Keyblock: Firmware A Key + Signature: valid + Size: 0x8b8 + Flags: 7 !DEV DEV !REC + Data key algorithm: 8 RSA4096 SHA512 + Data key version: 1 + Data key sha1sum: cd72cfb929765f82baba0a01ed937a73f502f6c5 +Firmware Preamble: + Size: 2164 + Header version: 2.1 + Firmware version: 1 + Kernel key algorithm: 8 RSA4096 SHA512 + Kernel key version: 1 + Kernel key sha1sum: e39e019cb5df3e874f443721540cb261a88c58ef + Firmware body size: 851968 + Preamble flags: 0 +Body verification succeeded. +Keyblock: Firmware B Key + Signature: valid + Size: 0x8b8 + Flags: 7 !DEV DEV !REC + Data key algorithm: 8 RSA4096 SHA512 + Data key version: 1 + Data key sha1sum: cd72cfb929765f82baba0a01ed937a73f502f6c5 +Firmware Preamble: + Size: 2164 + Header version: 2.1 + Firmware version: 1 + Kernel key algorithm: 8 RSA4096 SHA512 + Kernel key version: 1 + Kernel key sha1sum: e39e019cb5df3e874f443721540cb261a88c58ef + Firmware body size: 851968 + Preamble flags: 0 +Body verification succeeded. diff --git a/tests/futility/expect_output/show.tests_futility_data_bios_zgb_mp.bin b/tests/futility/expect_output/show.tests_futility_data_bios_zgb_mp.bin new file mode 100644 index 0000000..2f9f807 --- /dev/null +++ b/tests/futility/expect_output/show.tests_futility_data_bios_zgb_mp.bin @@ -0,0 +1,63 @@ +BIOS: tests/futility/data/bios_zgb_mp.bin +GBB header: GBB + Version: 1.0 + Flags: 0x00000000 + Regions: offset size + hwid 0x00000080 0x00000100 + bmpvf 0x00001180 0x0003de80 + rootkey 0x00000180 0x00001000 + recovery_key 0x0003f000 0x00001000 + Size: 0x00040000 / 0x00040000 +GBB content: + HWID: {FA42644C-CF3A-4692-A9D3-1A667CB232E9} + digest: + Root Key: + Vboot API: 1.0 + Algorithm: 11 RSA8192 SHA512 + Key Version: 1 + Key sha1sum: 9f59876c7f7dc881f02d934786c6b7c2c17dcaac + Recovery Key: + Vboot API: 1.0 + Algorithm: 11 RSA8192 SHA512 + Key Version: 1 + Key sha1sum: 9bd99a594c45b6739899a17ec29ac2289ee75463 +Firmware body: FW_MAIN_A + Offset: 0x00030000 + Size: 0x000dffc0 +Firmware body: FW_MAIN_B + Offset: 0x00120000 + Size: 0x000dffc0 +Keyblock: VBLOCK_A + Signature: valid + Size: 0x8b8 + Flags: 6 DEV !REC + Data key algorithm: 8 RSA4096 SHA512 + Data key version: 1 + Data key sha1sum: a78aaa1691c2125ef8ccefa1a8a6bea92d38fae6 +Firmware Preamble: + Size: 2164 + Header version: 2.1 + Firmware version: 2 + Kernel key algorithm: 7 RSA4096 SHA256 + Kernel key version: 2 + Kernel key sha1sum: 0c9fd5b03ab47d37924ba8a7beb64039d84ed0e1 + Firmware body size: 917440 + Preamble flags: 0 +Body verification succeeded. +Keyblock: VBLOCK_B + Signature: valid + Size: 0x8b8 + Flags: 7 !DEV DEV !REC + Data key algorithm: 8 RSA4096 SHA512 + Data key version: 1 + Data key sha1sum: 4fe08ed739069d6834b68612eb707998a0825f34 +Firmware Preamble: + Size: 2164 + Header version: 2.1 + Firmware version: 2 + Kernel key algorithm: 7 RSA4096 SHA256 + Kernel key version: 2 + Kernel key sha1sum: 0c9fd5b03ab47d37924ba8a7beb64039d84ed0e1 + Firmware body size: 917440 + Preamble flags: 0 +Body verification succeeded. diff --git a/tests/futility/expect_output/show.tests_futility_data_fw_gbb.bin b/tests/futility/expect_output/show.tests_futility_data_fw_gbb.bin new file mode 100644 index 0000000..3f81d86 --- /dev/null +++ b/tests/futility/expect_output/show.tests_futility_data_fw_gbb.bin @@ -0,0 +1,22 @@ +GBB header: tests/futility/data/fw_gbb.bin + Version: 1.1 + Flags: 0x00000039 + Regions: offset size + hwid 0x00000080 0x00000100 + bmpvf 0x00001180 0x000ece80 + rootkey 0x00000180 0x00001000 + recovery_key 0x000ee000 0x00001000 + Size: 0x000ef000 / 0x000ef000 +GBB content: + HWID: X86 PEPPY TEST 4211 + digest: + Root Key: + Vboot API: 1.0 + Algorithm: 11 RSA8192 SHA512 + Key Version: 1 + Key sha1sum: fc68bcb88bf9af1907289a9f377d658b3b9fe5b0 + Recovery Key: + Vboot API: 1.0 + Algorithm: 11 RSA8192 SHA512 + Key Version: 1 + Key sha1sum: bf39d0d3e30cbf6a121416d04df4603ad5310779 diff --git a/tests/futility/expect_output/show.tests_futility_data_fw_vblock.bin b/tests/futility/expect_output/show.tests_futility_data_fw_vblock.bin new file mode 100644 index 0000000..ff25ed7 --- /dev/null +++ b/tests/futility/expect_output/show.tests_futility_data_fw_vblock.bin @@ -0,0 +1,17 @@ +Keyblock: tests/futility/data/fw_vblock.bin + Signature: ignored + Size: 0x8b8 + Flags: 7 !DEV DEV !REC + Data key algorithm: 8 RSA4096 SHA512 + Data key version: 1 + Data key sha1sum: f917ad29e36aa8a286f978c1aa0550ea31c6a561 +Firmware Preamble: + Size: 2164 + Header version: 2.1 + Firmware version: 2 + Kernel key algorithm: 7 RSA4096 SHA256 + Kernel key version: 2 + Kernel key sha1sum: cc05423373b76acbec23ec45dfa3696a2ea6dc0f + Firmware body size: 146456 + Preamble flags: 0 +No firmware body available to verify. diff --git a/tests/futility/expect_output/show.tests_futility_data_kern_preamble.bin b/tests/futility/expect_output/show.tests_futility_data_kern_preamble.bin new file mode 100644 index 0000000..359f45c --- /dev/null +++ b/tests/futility/expect_output/show.tests_futility_data_kern_preamble.bin @@ -0,0 +1,20 @@ +Kernel partition: tests/futility/data/kern_preamble.bin +Keyblock: + Signature: ignored + Size: 0x5b8 + Flags: 15 !DEV DEV !REC REC + Data key algorithm: 8 RSA4096 SHA512 + Data key version: 1 + Data key sha1sum: 50b28df3cebabeefd134b7bc96512207f57b20a5 +Kernel Preamble: + Size: 0xfa48 + Header version: 2.0 + Kernel version: 1 + Body load address: 0x100000 + Body size: 0x12000 + Bootloader address: 0x10a000 + Bootloader size: 0x8000 + Flags: 0 +Body verification succeeded. +Config: +hi there diff --git a/tests/futility/expect_output/show.tests_futility_data_sample.vbprik2 b/tests/futility/expect_output/show.tests_futility_data_sample.vbprik2 new file mode 100644 index 0000000..4e0cb3a --- /dev/null +++ b/tests/futility/expect_output/show.tests_futility_data_sample.vbprik2 @@ -0,0 +1,6 @@ +Private key file: tests/futility/data/sample.vbprik2 + Vboot API: 2.1 + Desc: "sample vb21 keypair" + Signature Algorithm: 5 RSA8192 + Hash Algorithm: 3 SHA512 + ID: f1afa44a1aed0d0e9ff630579df920a725e9de5e diff --git a/tests/futility/expect_output/show.tests_futility_data_sample.vbpubk2 b/tests/futility/expect_output/show.tests_futility_data_sample.vbpubk2 new file mode 100644 index 0000000..4a7ee4a --- /dev/null +++ b/tests/futility/expect_output/show.tests_futility_data_sample.vbpubk2 @@ -0,0 +1,7 @@ +Public Key file: tests/futility/data/sample.vbpubk2 + Vboot API: 2.1 + Desc: "sample vb21 keypair" + Signature Algorithm: 5 RSA8192 + Hash Algorithm: 3 SHA512 + Version: 0x00000001 + ID: f1afa44a1aed0d0e9ff630579df920a725e9de5e diff --git a/tests/futility/expect_output/show.tests_testkeys_key_rsa2048.pem b/tests/futility/expect_output/show.tests_testkeys_key_rsa2048.pem new file mode 100644 index 0000000..08a8a2b --- /dev/null +++ b/tests/futility/expect_output/show.tests_testkeys_key_rsa2048.pem @@ -0,0 +1,3 @@ +Private Key file: tests/testkeys/key_rsa2048.pem + Key length: 2048 + Key sha1sum: bfb2fa9188a87bf766dd7c313ea6802553b646b6 diff --git a/tests/futility/expect_output/show.tests_testkeys_key_rsa8192.pub.pem b/tests/futility/expect_output/show.tests_testkeys_key_rsa8192.pub.pem new file mode 100644 index 0000000..41c14ec --- /dev/null +++ b/tests/futility/expect_output/show.tests_testkeys_key_rsa8192.pub.pem @@ -0,0 +1,3 @@ +Public Key file: tests/testkeys/key_rsa8192.pub.pem + Key length: 8192 + Key sha1sum: f1afa44a1aed0d0e9ff630579df920a725e9de5e diff --git a/tests/futility/expect_output/vbutil_firmware.tests_futility_data_fw.vblock b/tests/futility/expect_output/vbutil_firmware.tests_futility_data_fw.vblock new file mode 100644 index 0000000..e69de29 diff --git a/tests/futility/expect_output/vbutil_firmware.tests_futility_data_fw_vblock.bin b/tests/futility/expect_output/vbutil_firmware.tests_futility_data_fw_vblock.bin new file mode 100644 index 0000000..e69de29 diff --git a/tests/futility/expect_output/vbutil_firmware.verify b/tests/futility/expect_output/vbutil_firmware.verify new file mode 100644 index 0000000..e23c169 --- /dev/null +++ b/tests/futility/expect_output/vbutil_firmware.verify @@ -0,0 +1,16 @@ +Keyblock: + Size: 2232 + Flags: 23 (ignored) + Data key algorithm: 7 RSA4096 SHA256 + Data key version: 1 + Data key sha1sum: e2c1c92d7d7aa7dfed5e8375edd30b7ae52b7450 +Preamble: + Size: 2164 + Header version: 2.1 + Firmware version: 12 + Kernel key algorithm: 7 RSA4096 SHA256 + Kernel key version: 1 + Kernel key sha1sum: 5d2b220899c4403d564092ada3f12d3cc4483223 + Firmware body size: 16384 + Preamble flags: 42 +Body verification succeeded. diff --git a/tests/futility/expect_output/vbutil_key.tests_devkeys_root_key.vbprivk b/tests/futility/expect_output/vbutil_key.tests_devkeys_root_key.vbprivk new file mode 100644 index 0000000..bc11607 --- /dev/null +++ b/tests/futility/expect_output/vbutil_key.tests_devkeys_root_key.vbprivk @@ -0,0 +1,2 @@ +Private Key file: tests/devkeys/root_key.vbprivk +Algorithm: 11 RSA8192 SHA512 diff --git a/tests/futility/expect_output/vbutil_key.tests_devkeys_root_key.vbpubk b/tests/futility/expect_output/vbutil_key.tests_devkeys_root_key.vbpubk new file mode 100644 index 0000000..ad2bd19 --- /dev/null +++ b/tests/futility/expect_output/vbutil_key.tests_devkeys_root_key.vbpubk @@ -0,0 +1,4 @@ +Public Key file: tests/devkeys/root_key.vbpubk +Algorithm: 11 RSA8192 SHA512 +Key Version: 1 +Key sha1sum: b11d74edd286c144e1135b49e7f0bc20cf041f10 diff --git a/tests/futility/expect_output/vbutil_keyblock.tests_devkeys_kernel.keyblock b/tests/futility/expect_output/vbutil_keyblock.tests_devkeys_kernel.keyblock new file mode 100644 index 0000000..afb0faf --- /dev/null +++ b/tests/futility/expect_output/vbutil_keyblock.tests_devkeys_kernel.keyblock @@ -0,0 +1,6 @@ +Keyblock file: tests/devkeys/kernel.keyblock +Signature valid +Flags: 23 !DEV DEV !REC !MINIOS +Data key algorithm: 4 RSA2048 SHA256 +Data key version: 1 +Data key sha1sum: d6170aa480136f1f29cf339a5ab1b960585fa444 diff --git a/tests/futility/link_bios.manifest.json b/tests/futility/link_bios.manifest.json new file mode 100644 index 0000000..9bd33f5 --- /dev/null +++ b/tests/futility/link_bios.manifest.json @@ -0,0 +1,7 @@ +{ + "link": { + "host": { "versions": { "ro": "Google_Link.2695.1.133", "rw": "Google_Link.2695.1.133" }, + "keys": { "root": "7b5c520ceabce86f13e02b7ca363cfb509fc5b98", "recovery": "7e74cd6d66f361da068c0419d2e0946b4d091e1c" }, + "image": "bios.bin" } + } +} diff --git a/tests/futility/link_image.manifest.json b/tests/futility/link_image.manifest.json new file mode 100644 index 0000000..e3296a0 --- /dev/null +++ b/tests/futility/link_image.manifest.json @@ -0,0 +1,7 @@ +{ + "link": { + "host": { "versions": { "ro": "Google_Link.2695.1.133", "rw": "Google_Link.2695.1.133" }, + "keys": { "root": "7b5c520ceabce86f13e02b7ca363cfb509fc5b98", "recovery": "7e74cd6d66f361da068c0419d2e0946b4d091e1c" }, + "image": "image.bin" } + } +} diff --git a/tests/futility/models/link/setvars.sh b/tests/futility/models/link/setvars.sh new file mode 100755 index 0000000..1918099 --- /dev/null +++ b/tests/futility/models/link/setvars.sh @@ -0,0 +1,14 @@ +#!/bin/sh +# Copyright 2017 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# This is a template file which provides settings for firmware update of a +# particular model. The pack_firmware.py script uses this to create a working +# setvars-model.sh script. + +# Image and key files for model link +IMAGE_MAIN="images/bios_link.bin" +IMAGE_EC="images/ec_link.bin" +IMAGE_PD="" +SIGNATURE_ID="link" diff --git a/tests/futility/models/peppy/setvars.sh b/tests/futility/models/peppy/setvars.sh new file mode 100755 index 0000000..855e815 --- /dev/null +++ b/tests/futility/models/peppy/setvars.sh @@ -0,0 +1,14 @@ +#!/bin/sh +# Copyright 2017 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# This is a template file which provides settings for firmware update of a +# particular model. The pack_firmware.py script uses this to create a working +# setvars-model.sh script. + +# Image and key files for model peppy +IMAGE_MAIN="images/bios_peppy.bin" +IMAGE_EC="images/ec_peppy.bin" +IMAGE_PD="" +SIGNATURE_ID="peppy" diff --git a/tests/futility/models/whitetip/setvars.sh b/tests/futility/models/whitetip/setvars.sh new file mode 100755 index 0000000..4b9cb40 --- /dev/null +++ b/tests/futility/models/whitetip/setvars.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# Copyright 2017 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# This is a template file which provides settings for firmware update of a +# particular model. The pack_firmware.py script uses this to create a working +# setvars-model.sh script. + +# Version information for model whitetip +TARGET_RO_FWID="Google_Coral.10068.45.0" +TARGET_FWID="Google_Coral.10068.45.0" +TARGET_ECID="coral_v1.1.7272-0b44fba22" +TARGET_PDID="" +TARGET_PLATFORM="Google_Coral" + +# Image and key files for model whitetip +IMAGE_MAIN="images/bios_coral.bin" +IMAGE_EC="" +IMAGE_PD="" +SIGNATURE_ID="sig-id-in-customization-id" diff --git a/tests/futility/run_test_scripts.sh b/tests/futility/run_test_scripts.sh new file mode 100755 index 0000000..f224bdf --- /dev/null +++ b/tests/futility/run_test_scripts.sh @@ -0,0 +1,82 @@ +#!/bin/bash -eu +# Copyright 2013 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Load common constants and variables. +. "$(dirname "$0")/../common.sh" + +OUTDIR="${BUILD}/tests/futility_test_results" +[ -d "$OUTDIR" ] || mkdir -p "$OUTDIR" + +# Let each test know where to find things... +export BUILD +export BUILD_RUN +export SRCDIR +export FUTILITY +export SCRIPT_DIR +export OUTDIR + +# These are the scripts to run. Binaries are invoked directly by the Makefile. +TESTS=" +${SCRIPT_DIR}/futility/test_create.sh +${SCRIPT_DIR}/futility/test_dump_fmap.sh +${SCRIPT_DIR}/futility/test_gbb_utility.sh +${SCRIPT_DIR}/futility/test_load_fmap.sh +${SCRIPT_DIR}/futility/test_main.sh +${SCRIPT_DIR}/futility/test_rwsig.sh +${SCRIPT_DIR}/futility/test_show_contents.sh +${SCRIPT_DIR}/futility/test_show_kernel.sh +${SCRIPT_DIR}/futility/test_show_vs_verify.sh +${SCRIPT_DIR}/futility/test_show_usbpd1.sh +${SCRIPT_DIR}/futility/test_sign_firmware.sh +${SCRIPT_DIR}/futility/test_sign_fw_main.sh +${SCRIPT_DIR}/futility/test_sign_kernel.sh +${SCRIPT_DIR}/futility/test_sign_keyblocks.sh +${SCRIPT_DIR}/futility/test_sign_usbpd1.sh +${SCRIPT_DIR}/futility/test_update.sh +${SCRIPT_DIR}/futility/test_file_types.sh +" + +# Get ready... +pass=0 +progs=0 + +############################################################################## +# Invoke the scripts that test the builtin functions. + +# Let the test scripts use >&3 to indicate progress +exec 3>&1 + +echo "-- builtin --" +for i in $TESTS; do + j=${i##*/} + + : $(( progs++ )) + + echo -n "$j ... " + rm -rf "${OUTDIR}/$j."* + rc=$("$i" "$FUTILITY" 1>"${OUTDIR}/$j.stdout" \ + 2>"${OUTDIR}/$j.stderr" || echo "$?") + echo "${rc:-0}" > "${OUTDIR}/$j.return" + if [ ! "$rc" ]; then + echo -e "${COL_GREEN}PASSED${COL_STOP}" + : $(( pass++ )) + rm -f ${OUTDIR}/$j.{stdout,stderr,return} + else + echo -e "${COL_RED}FAILED (${rc:-0}). Stdout is recorded in" \ + "${OUTDIR}/$j.stdout${COL_STOP}" + cat ${OUTDIR}/$j.stderr + fi +done + +############################################################################## +# How'd we do? + +if [ "$pass" -eq "$progs" ]; then + echo -e "${COL_GREEN}Success: $pass / $progs passed${COL_STOP}" + exit 0 +fi + +echo -e "${COL_RED}FAIL: $pass / $progs passed${COL_STOP}" +exit 1 diff --git a/tests/futility/test_create.sh b/tests/futility/test_create.sh new file mode 100755 index 0000000..55c648c --- /dev/null +++ b/tests/futility/test_create.sh @@ -0,0 +1,69 @@ +#!/bin/bash -eux +# Copyright 2015 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +me=${0##*/} +TMP="$me.tmp" + +# Work in scratch directory +cd "$OUTDIR" + +# Current vb1 keys, including original .pem files. +TESTKEYS=${SRCDIR}/tests/testkeys + +# Demonstrate that we can recreate the same vb1 keys without the .keyb files +for sig in rsa1024 rsa2048 rsa4096 rsa8192; do + for hash in sha1 sha256 sha512; do + ${FUTILITY} --vb1 create --hash_alg "${hash}" \ + "${TESTKEYS}/key_${sig}.pem" "${TMP}_key_${sig}.${hash}" + cmp "${TESTKEYS}/key_${sig}.${hash}.vbprivk" \ + "${TMP}_key_${sig}.${hash}.vbprivk" + cmp "${TESTKEYS}/key_${sig}.${hash}.vbpubk" \ + "${TMP}_key_${sig}.${hash}.vbpubk" + done +done + + +# Demonstrate that we can create some vb21 keypairs. This doesn't prove +# prove anything until we've used them to sign some stuff, though. +for sig in rsa1024 rsa2048 rsa4096 rsa8192; do + for hash in sha1 sha256 sha512; do + ${FUTILITY} --vb21 create --hash_alg "${hash}" \ + "${TESTKEYS}/key_${sig}.pem" "${TMP}_key_${sig}.${hash}" + done +done + +# Demonstrate that the sha1sums are the same for all the keys created from the +# same .pem files, both public and private, vb1 and vb21. +for sig in rsa1024 rsa2048 rsa4096 rsa8192; do + pem_sum=$(${FUTILITY} show "${TESTKEYS}/key_${sig}.pem" | + awk '/sha1sum/ {print $3}') + # expect only one + [ $(echo "$pem_sum" | wc -w) = 1 ] + num_keys=$(echo ${TMP}_key_${sig}.* | wc -w) + key_sums=$(${FUTILITY} show ${TMP}_key_${sig}.* | + awk '/sha1sum:|ID:/ {print $NF}') + num_sums=$(echo "$key_sums" | wc -w) + # expect one sha1sum (or ID) line per file + [ "$num_keys" = "$num_sums" ] + uniq_sums=$(echo "$key_sums" | uniq) + # note that this also tests that all the key_sums are the same + [ "$pem_sum" = "$uniq_sums" ] +done + +# Demonstrate that we can create some vb21 public key from PEM containing +# only the pubkeypairs and verify it's the same as the one generated from +# the private key. +for sig in rsa1024 rsa2048 rsa4096 rsa8192; do + for hash in sha1 sha256 sha512; do + ${FUTILITY} --vb21 create --hash_alg "${hash}" \ + "${TESTKEYS}/key_${sig}.pub.pem" "${TMP}_key_${sig}.pubonly.${hash}" + cmp "${TMP}_key_${sig}.pubonly.${hash}.vbpubk2" \ + "${TMP}_key_${sig}.${hash}.vbpubk2" + done +done + +# cleanup +rm -rf ${TMP}* +exit 0 diff --git a/tests/futility/test_dump_fmap.sh b/tests/futility/test_dump_fmap.sh new file mode 100755 index 0000000..5ae2e97 --- /dev/null +++ b/tests/futility/test_dump_fmap.sh @@ -0,0 +1,55 @@ +#!/bin/bash -eux +# Copyright 2013 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +me=${0##*/} +TMP="$me.tmp" + +# Work in scratch directory +cd "$OUTDIR" + +# Good FMAP +"$FUTILITY" dump_fmap -F "${SCRIPT_DIR}/futility/data_fmap.bin" > "$TMP" +cmp "${SCRIPT_DIR}/futility/data_fmap_expect_f.txt" "$TMP" + +"$FUTILITY" dump_fmap -p "${SCRIPT_DIR}/futility/data_fmap.bin" > "$TMP" +cmp "${SCRIPT_DIR}/futility/data_fmap_expect_p.txt" "$TMP" + +"$FUTILITY" dump_fmap -h "${SCRIPT_DIR}/futility/data_fmap.bin" > "$TMP" +cmp "${SCRIPT_DIR}/futility/data_fmap_expect_h.txt" "$TMP" + + +# This should fail because the input file is truncated and doesn't really +# contain the stuff that the FMAP claims it does. +if "$FUTILITY" dump_fmap -x "${SCRIPT_DIR}/futility/data_fmap.bin" FMAP; \ + then false; fi + +# This should fail too +if "$FUTILITY" show "${SCRIPT_DIR}/futility/data_fmap.bin"; then false; fi + +# However, this should work. +"$FUTILITY" dump_fmap -x "${SCRIPT_DIR}/futility/data_fmap.bin" SI_DESC > "$TMP" +cmp "${SCRIPT_DIR}/futility/data_fmap_expect_x.txt" "$TMP" + +# Redirect dumping to a different place +"$FUTILITY" dump_fmap -x "${SCRIPT_DIR}/futility/data_fmap.bin" SI_DESC:FOO \ + > "$TMP" +cmp "${SCRIPT_DIR}/futility/data_fmap_expect_x2.txt" "$TMP" +cmp SI_DESC FOO + +# This FMAP has problems, and should fail. +if "$FUTILITY" dump_fmap -h "${SCRIPT_DIR}/futility/data_fmap2.bin" > "$TMP"; \ + then false; fi +cmp "${SCRIPT_DIR}/futility/data_fmap2_expect_h.txt" "$TMP" + +"$FUTILITY" dump_fmap -hh "${SCRIPT_DIR}/futility/data_fmap2.bin" > "$TMP" +cmp "${SCRIPT_DIR}/futility/data_fmap2_expect_hh.txt" "$TMP" + +"$FUTILITY" dump_fmap -hhH "${SCRIPT_DIR}/futility/data_fmap2.bin" > "$TMP" +cmp "${SCRIPT_DIR}/futility/data_fmap2_expect_hhH.txt" "$TMP" + + +# cleanup +rm -f ${TMP}* FMAP SI_DESC FOO +exit 0 diff --git a/tests/futility/test_file_types.c b/tests/futility/test_file_types.c new file mode 100644 index 0000000..3f88872 --- /dev/null +++ b/tests/futility/test_file_types.c @@ -0,0 +1,98 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include + +#include "file_type.h" +#include "futility.h" +#include "test_common.h" + +/* + * Files that exemplify each type. + * Paths are relative to the source directory. + * A missing path means we don't (yet?) know how to identify it reliably. + */ +static struct { + enum futil_file_type type; + const char * const file; +} test_case[] = { + {FILE_TYPE_UNKNOWN, "tests/futility/data/random_noise.bin"}, + {FILE_TYPE_PUBKEY, "tests/devkeys/root_key.vbpubk"}, + {FILE_TYPE_KEYBLOCK, "tests/devkeys/kernel.keyblock"}, + {FILE_TYPE_FW_PREAMBLE, "tests/futility/data/fw_vblock.bin"}, + {FILE_TYPE_GBB, "tests/futility/data/fw_gbb.bin"}, + {FILE_TYPE_BIOS_IMAGE, "tests/futility/data/bios_zgb_mp.bin"}, + {FILE_TYPE_OLD_BIOS_IMAGE, "tests/futility/data/bios_mario_mp.bin"}, + {FILE_TYPE_KERN_PREAMBLE, "tests/futility/data/kern_preamble.bin"}, + {FILE_TYPE_RAW_FIRMWARE, }, /* need a test for this */ + {FILE_TYPE_RAW_KERNEL, }, /* need a test for this */ + {FILE_TYPE_CHROMIUMOS_DISK, }, /* need a test for this */ + {FILE_TYPE_PRIVKEY, "tests/devkeys/root_key.vbprivk"}, + {FILE_TYPE_VB2_PUBKEY, "tests/futility/data/sample.vbpubk2"}, + {FILE_TYPE_VB2_PRIVKEY, "tests/futility/data/sample.vbprik2"}, + {FILE_TYPE_PEM, "tests/testkeys/key_rsa2048.pem"}, + {FILE_TYPE_USBPD1, "tests/futility/data/zinger_mp_image.bin"}, + {FILE_TYPE_RWSIG, }, /* need a test for this */ +}; +_Static_assert(ARRAY_SIZE(test_case) == NUM_FILE_TYPES, + "Need a test case for each file type (total NUM_FILE_TYPES)"); + +int main(int argc, char *argv[]) +{ + char filename[PATH_MAX]; + char status[80]; + const char *srcdir; + enum futil_file_type type; + int i; + + /* Where's the source directory? */ + srcdir = getenv("SRCDIR"); + if (argc > 1) + srcdir = argv[1]; + if (!srcdir) + srcdir = "."; + + /* Complain about some files we can't handle */ + TEST_EQ(futil_file_type("/Sir/Not/Appearing/In/This/Film", &type), + FILE_ERR_OPEN, "Identify missing file"); + TEST_EQ(futil_file_type("/", &type), + FILE_ERR_DIR, "Identify directory"); + TEST_EQ(futil_file_type("/dev/zero", &type), + FILE_ERR_CHR, "Identify char device"); + + /* Now test things we can handle */ + for (i = 0; i < NUM_FILE_TYPES; i++) { + + if (!test_case[i].file) { + printf("%sWarning: No test for file type %d (%s)%s\n", + COL_YELLOW, test_case[i].type, + futil_file_type_name(test_case[i].type), + COL_STOP); + continue; + } + + snprintf(filename, sizeof(filename), "%s/%s", + srcdir, test_case[i].file); + + type = NUM_FILE_TYPES; + snprintf(status, sizeof(status), + "File type %d (%s): examined", + test_case[i].type, + futil_file_type_name(test_case[i].type)); + TEST_EQ(FILE_ERR_NONE, futil_file_type(filename, &type), + status); + + snprintf(status, sizeof(status), + "File type %d (%s) identified", + test_case[i].type, + futil_file_type_name(test_case[i].type)); + TEST_EQ(type, test_case[i].type, status); + } + + return !gTestSuccess; +} diff --git a/tests/futility/test_file_types.sh b/tests/futility/test_file_types.sh new file mode 100755 index 0000000..4b7a9fb --- /dev/null +++ b/tests/futility/test_file_types.sh @@ -0,0 +1,76 @@ +#!/bin/bash -eux +# Copyright 2015 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +me=${0##*/} +TMP="$me.tmp" + +# Work in scratch directory +cd "$OUTDIR" + + +# The first part of this is a script version of the compiled test by the same +# name, to ensure we have working results. + +# Args are , +test_case() { + local result + result=$(${FUTILITY} show -t "${SRCDIR}/$2" | awk '{print $NF}') + [ "$1" = "$result" ] +} + +# Arg is +fail_case() { + if ${FUTILITY} show -t "$1" ; then false; else true; fi +} + +# Known types +test_case "unknown" "tests/futility/data/short_junk.bin" +test_case "unknown" "tests/futility/data/random_noise.bin" +test_case "pubkey" "tests/devkeys/root_key.vbpubk" +test_case "keyblock" "tests/devkeys/kernel.keyblock" +test_case "fw_pre" "tests/futility/data/fw_vblock.bin" +test_case "gbb" "tests/futility/data/fw_gbb.bin" +test_case "bios" "tests/futility/data/bios_zgb_mp.bin" +test_case "oldbios" "tests/futility/data/bios_mario_mp.bin" +test_case "kernel" "tests/futility/data/kern_preamble.bin" +# We don't have a way to identify these (yet?) +# test_case "RAW_FIRMWARE" +# test_case "RAW_KERNEL" +# test_case "CHROMIUMOS_DISK" +test_case "prikey" "tests/devkeys/root_key.vbprivk" +test_case "pubkey21" "tests/futility/data/sample.vbpubk2" +test_case "prikey21" "tests/futility/data/sample.vbprik2" +test_case "pem" "tests/testkeys/key_rsa2048.pem" +test_case "pem" "tests/testkeys/key_rsa8192.pub.pem" + +# Expect failure here. +fail_case "/Sir/Not/Appearing/In/This/Film" +fail_case "${SRCDIR}" +fail_case "/dev/zero" + + +# Now test the show command when the file type is intentionally wrong. It +# often won't work, but it certainly shouldn't core dump. + +# We'll ask futility to tell us what types it supports +TYPES=$(${FUTILITY} show --type help | awk '/^ +/ {print $1}') + +# And we'll just reuse the same files above. +FILES=$(awk '/^test_case / {print $NF}' $0 | tr -d '"') + +# futility should normally exit with either 0 or 1. Make sure that happens. +# NOTE: /bin/bash returns values > 125 for special problems like signals. +# I welcome patches to do this more portably. +for type in $TYPES; do + for file in $FILES; do + ${FUTILITY} show --type ${type} "${SRCDIR}/${file}" && rc=$? || rc=$? + [ "$rc" -le 2 ] + done +done + + +# cleanup +rm -rf ${TMP}* +exit 0 diff --git a/tests/futility/test_gbb_utility.sh b/tests/futility/test_gbb_utility.sh new file mode 100755 index 0000000..bdfa262 --- /dev/null +++ b/tests/futility/test_gbb_utility.sh @@ -0,0 +1,209 @@ +#!/bin/bash -eux +# Copyright 2014 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +me=${0##*/} +TMP="$me.tmp" + +# Work in scratch directory +cd "$OUTDIR" + +# Helper utility to modify binary blobs +REPLACE="${BUILD_RUN}/tests/futility/binary_editor" + +# First, let's test the basic functionality + +# For simplicity, we'll use the same size for all properties. +${FUTILITY} gbb -c 16,0x10,16,0x10 ${TMP}.blob + +# Flags +${FUTILITY} gbb -s --flags=0xdeadbeef ${TMP}.blob +${FUTILITY} gbb -g --flags ${TMP}.blob | grep -i 0xdeadbeef + +# HWID length should include the terminating null - this is too long +if ${FUTILITY} gbb -s --hwid="0123456789ABCDEF" ${TMP}.blob; then + false; +fi +# This works +${FUTILITY} gbb -s --hwid="0123456789ABCDE" ${TMP}.blob +# Read it back? +${FUTILITY} gbb -g ${TMP}.blob | grep "0123456789ABCDE" + +# Same kind of tests for the other fields, but they need binary files. + +# too long +dd if=/dev/urandom bs=17 count=1 of=${TMP}.data1.toolong +dd if=/dev/urandom bs=17 count=1 of=${TMP}.data2.toolong +if ${FUTILITY} gbb -s --rootkey ${TMP}.data1.toolong ${TMP}.blob; then false; fi +if ${FUTILITY} gbb -s --recoverykey ${TMP}.data2.toolong ${TMP}.blob; then false; fi + +# shorter than max should be okay, though +dd if=/dev/urandom bs=10 count=1 of=${TMP}.data1.short +dd if=/dev/urandom bs=10 count=1 of=${TMP}.data2.short +${FUTILITY} gbb -s \ + --rootkey ${TMP}.data1.short \ + --recoverykey ${TMP}.data2.short ${TMP}.blob +# read 'em back +${FUTILITY} gbb -g \ + --rootkey ${TMP}.read1 \ + --recoverykey ${TMP}.read2 ${TMP}.blob +# Verify (but remember, it's short) +cmp -n 10 ${TMP}.data1.short ${TMP}.read1 +cmp -n 10 ${TMP}.data2.short ${TMP}.read2 + +# Okay +dd if=/dev/urandom bs=16 count=1 of=${TMP}.data1 +dd if=/dev/urandom bs=16 count=1 of=${TMP}.data2 +dd if=/dev/urandom bs=16 count=1 of=${TMP}.data3 +${FUTILITY} gbb -s --rootkey ${TMP}.data1 ${TMP}.blob +${FUTILITY} gbb -s --recoverykey ${TMP}.data2 ${TMP}.blob + +# Read 'em back. +${FUTILITY} gbb -g --rootkey ${TMP}.read1 ${TMP}.blob +${FUTILITY} gbb -g --recoverykey ${TMP}.read2 ${TMP}.blob +# Verify +cmp ${TMP}.data1 ${TMP}.read1 +cmp ${TMP}.data2 ${TMP}.read2 + + +# Okay, creating GBB blobs seems to work. Now let's make sure that corrupted +# blobs are rejected. + +# Danger Will Robinson! We assume that ${TMP}.blob has this binary struct: +# +# Field Offset Value +# +# signature: 0x0000 $GBB +# major_version: 0x0004 0x0001 +# minor_version: 0x0006 0x0001 +# header_size: 0x0008 0x00000080 +# flags: 0x000c 0xdeadbeef +# hwid_offset: 0x0010 0x00000080 +# hwid_size: 0x0014 0x00000010 +# rootkey_offset: 0x0018 0x00000090 +# rootkey_size: 0x001c 0x00000010 +# bmpfv_offset: 0x0020 0x000000a0 +# bmpfv_size: 0x0024 0x00000010 +# recovery_key_offset: 0x0028 0x000000b0 +# recovery_key_size: 0x002c 0x00000010 +# pad: 0x0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +# 0x0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +# 0x0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +# 0x0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +# 0x0070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +# (HWID) 0x0080 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 00 +# (rootkey) 0x0090 xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx +# (bmpfv) 0x00a0 xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx +# (recovery_key) 0x00b0 xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx +# 0x00c0 +# + +# bad major_version +cat ${TMP}.blob | ${REPLACE} 0x4 2 > ${TMP}.blob.bad +if ${FUTILITY} gbb ${TMP}.blob.bad; then false; fi + +# header size too large +cat ${TMP}.blob | ${REPLACE} 0x8 0x81 > ${TMP}.blob.bad +if ${FUTILITY} gbb ${TMP}.blob.bad; then false; fi + +# header size too small +cat ${TMP}.blob | ${REPLACE} 0x8 0x7f > ${TMP}.blob.bad +if ${FUTILITY} gbb ${TMP}.blob.bad; then false; fi + +# HWID not null-terminated is invalid +cat ${TMP}.blob | ${REPLACE} 0x8f 0x41 > ${TMP}.blob.bad +if ${FUTILITY} gbb ${TMP}.blob.bad; then false; fi + +# HWID of length zero is okay +cat ${TMP}.blob | ${REPLACE} 0x14 0x00 > ${TMP}.blob.ok +${FUTILITY} gbb ${TMP}.blob.ok +# And HWID of length 1 consisting only of '\0' is okay, too. +cat ${TMP}.blob | ${REPLACE} 0x14 0x01 | ${REPLACE} 0x80 0x00 > ${TMP}.blob.ok +${FUTILITY} gbb ${TMP}.blob.ok + +# zero-length HWID not null-terminated is invalid +cat ${TMP}.blob | ${REPLACE} 0x8f 0x41 > ${TMP}.blob.bad +if ${FUTILITY} gbb ${TMP}.blob.bad; then false; fi + +# hwid_offset < GBB_HEADER_SIZE is invalid +cat ${TMP}.blob | ${REPLACE} 0x10 0x7f > ${TMP}.blob.bad +if ${FUTILITY} gbb ${TMP}.blob.bad; then false; fi +cat ${TMP}.blob | ${REPLACE} 0x10 0x00 > ${TMP}.blob.bad +if ${FUTILITY} gbb ${TMP}.blob.bad; then false; fi + +# rootkey_offset < GBB_HEADER_SIZE is invalid +cat ${TMP}.blob | ${REPLACE} 0x18 0x7f > ${TMP}.blob.bad +if ${FUTILITY} gbb ${TMP}.blob.bad; then false; fi +cat ${TMP}.blob | ${REPLACE} 0x18 0x00 > ${TMP}.blob.bad +if ${FUTILITY} gbb ${TMP}.blob.bad; then false; fi + +# recovery_key_offset < GBB_HEADER_SIZE is invalid +cat ${TMP}.blob | ${REPLACE} 0x28 0x7f > ${TMP}.blob.bad +if ${FUTILITY} gbb ${TMP}.blob.bad; then false; fi +cat ${TMP}.blob | ${REPLACE} 0x28 0x00 > ${TMP}.blob.bad +if ${FUTILITY} gbb ${TMP}.blob.bad; then false; fi + +# hwid: offset + size == end of file is okay; beyond is invalid +cat ${TMP}.blob | ${REPLACE} 0x14 0x40 > ${TMP}.blob.bad +${FUTILITY} gbb -g ${TMP}.blob.bad +cat ${TMP}.blob | ${REPLACE} 0x14 0x41 > ${TMP}.blob.bad +if ${FUTILITY} gbb -g ${TMP}.blob.bad; then false; fi + +# rootkey: offset + size == end of file is okay; beyond is invalid +cat ${TMP}.blob | ${REPLACE} 0x1c 0x30 > ${TMP}.blob.bad +${FUTILITY} gbb -g ${TMP}.blob.bad +cat ${TMP}.blob | ${REPLACE} 0x1c 0x31 > ${TMP}.blob.bad +if ${FUTILITY} gbb -g ${TMP}.blob.bad; then false; fi + +# recovery_key: offset + size == end of file is okay; beyond is invalid +cat ${TMP}.blob | ${REPLACE} 0x2c 0x10 > ${TMP}.blob.bad +${FUTILITY} gbb -g ${TMP}.blob.bad +cat ${TMP}.blob | ${REPLACE} 0x2c 0x11 > ${TMP}.blob.bad +if ${FUTILITY} gbb -g ${TMP}.blob.bad; then false; fi + +# hwid_size == 0 doesn't complain, but can't be set +cat ${TMP}.blob | ${REPLACE} 0x14 0x00 > ${TMP}.blob.bad +${FUTILITY} gbb -g ${TMP}.blob.bad +if ${FUTILITY} gbb -s --hwid="A" ${TMP}.blob.bad; then false; fi + +# rootkey_size == 0 gives warning, gets nothing, can't be set +cat ${TMP}.blob | ${REPLACE} 0x1c 0x00 > ${TMP}.blob.bad +${FUTILITY} gbb -g --rootkey ${TMP}.read1 ${TMP}.blob.bad +if ${FUTILITY} gbb -s --rootkey ${TMP}.data1 ${TMP}.blob.bad; then false; fi + +# recovery_key_size == 0 gives warning, gets nothing, can't be set +cat ${TMP}.blob | ${REPLACE} 0x2c 0x00 > ${TMP}.blob.bad +${FUTILITY} gbb -g --recoverykey ${TMP}.read2 ${TMP}.blob.bad +if ${FUTILITY} gbb -s --recoverykey ${TMP}.data2 ${TMP}.blob.bad; then false; fi + + +# GBB v1.2 adds a sha256 digest field in what was previously padding: +# +# hwid_digest: 0x0030 xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx +# 0x0040 xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx +# pad: 0x0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +# 0x0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +# 0x0070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +# (HWID) 0x0080 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 00 + +# See that the digest is updated properly. +hwid="123456789ABCDEF" +${FUTILITY} gbb -s --hwid=${hwid} ${TMP}.blob +expect=$(echo -n "$hwid" | sha256sum | cut -d ' ' -f 1) +[ $(echo -n ${expect} | wc -c) == "64" ] +${FUTILITY} gbb -g --digest ${TMP}.blob | grep ${expect} + +# Garble the digest, see that it's noticed. +# (assuming these zeros aren't present) +cat ${TMP}.blob | ${REPLACE} 0x33 0x00 0x00 0x00 0x00 0x00 > ${TMP}.blob.bad +${FUTILITY} gbb -g --digest ${TMP}.blob.bad | grep '0000000000' +${FUTILITY} gbb -g --digest ${TMP}.blob.bad | grep 'invalid' + +# Garble the HWID. The digest is unchanged, but now invalid. +cat ${TMP}.blob | ${REPLACE} 0x84 0x70 0x71 0x72 > ${TMP}.blob.bad +${FUTILITY} gbb -g --digest ${TMP}.blob.bad | grep 'invalid' + +# cleanup +rm -f ${TMP}* +exit 0 diff --git a/tests/futility/test_load_fmap.sh b/tests/futility/test_load_fmap.sh new file mode 100755 index 0000000..a93b71f --- /dev/null +++ b/tests/futility/test_load_fmap.sh @@ -0,0 +1,43 @@ +#!/bin/bash -eux +# Copyright 2014 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +me=${0##*/} +TMP="$me.tmp" + +# Work in scratch directory +cd "$OUTDIR" + + +IN=${SCRIPT_DIR}/futility/data/bios_link_mp.bin +BIOS=${TMP}.bios.bin + +cp ${IN} ${BIOS} + +AREAS="RW_SECTION_A VBLOCK_B BOOT_STUB" + +# Extract good blobs first +${FUTILITY} dump_fmap -x ${BIOS} ${AREAS} + +# Save the good blobs, make same-size random blobs, create command +CMDS="" +for a in ${AREAS}; do + size=$(stat -c '%s' $a) + mv $a $a.good + dd if=/dev/urandom of=$a.rand bs=$size count=1 + CMDS="$CMDS $a:$a.rand" +done + +# Poke the new blobs in +${FUTILITY} load_fmap ${BIOS} ${CMDS} + +# Pull them back out and see if they match +${FUTILITY} dump_fmap -x ${BIOS} ${AREAS} +for a in ${AREAS}; do + cmp $a $a.rand +done + +# cleanup +rm -f ${TMP}* ${AREAS} *.rand *.good +exit 0 diff --git a/tests/futility/test_main.sh b/tests/futility/test_main.sh new file mode 100755 index 0000000..2e5f4dc --- /dev/null +++ b/tests/futility/test_main.sh @@ -0,0 +1,64 @@ +#!/bin/bash -eux +# Copyright 2014 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +me=${0##*/} +TMP="$me.tmp" + +# Work in scratch directory +cd "$OUTDIR" + +# No args returns nonzero exit code +${FUTILITY} && false + +# It's weird but okay if the command is a full path. +${FUTILITY} /fake/path/to/help > "$TMP" +grep Usage "$TMP" + +# Make sure logging does something. +LOG="/tmp/futility.log" +[ -f ${LOG} ] && mv ${LOG} ${LOG}.backup +touch ${LOG} +${FUTILITY} help +grep ${FUTILITY} ${LOG} +rm -f ${LOG} +[ -f ${LOG}.backup ] && mv ${LOG}.backup ${LOG} + +# Use some known digests to verify that things work... +DEVKEYS=${SRCDIR}/tests/devkeys +SHA=e78ce746a037837155388a1096212ded04fb86eb + +# all progs in the pipelines should work +set -o pipefail + +# If it's invoked as the name of a command we know, it should do that command +ln -sf ${FUTILITY} vbutil_key +./vbutil_key --unpack ${DEVKEYS}/installer_kernel_data_key.vbpubk | grep ${SHA} +ln -sf ${FUTILITY} vbutil_keyblock +./vbutil_keyblock --unpack ${DEVKEYS}/installer_kernel.keyblock | grep ${SHA} +cp ${FUTILITY} show +./show ${SCRIPT_DIR}/futility/data/rec_kernel_part.bin | grep ${SHA} + +# If it's invoked by any other name, expect the command to be the first arg. +ln -sf ${FUTILITY} muggle +./muggle vbutil_key --unpack ${DEVKEYS}/installer_kernel_data_key.vbpubk \ + | grep ${SHA} +ln -sf ${FUTILITY} buggle +./buggle vbutil_keyblock --unpack ${DEVKEYS}/installer_kernel.keyblock \ + | grep ${SHA} +cp ${FUTILITY} boo +./boo show ${SCRIPT_DIR}/futility/data/rec_kernel_part.bin | grep ${SHA} + + +# we expect the first command fail, but the output to match anyway +set +o pipefail + +# If it can't figure out the command at all, it should complain. +${FUTILITY} muggle | grep Usage: +./buggle futility | grep Usage: +./boo | grep Usage: + +# cleanup +rm -f ${TMP}* vbutil_key vbutil_keyblock show muggle buggle boo +exit 0 diff --git a/tests/futility/test_not_really.c b/tests/futility/test_not_really.c new file mode 100644 index 0000000..3cfc3ed --- /dev/null +++ b/tests/futility/test_not_really.c @@ -0,0 +1,20 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include + +#include "2struct.h" +#include "test_common.h" + +int main(int argc, char *argv[]) +{ + TEST_EQ(sizeof(struct vb2_gbb_header), + EXPECTED_VB2_GBB_HEADER_SIZE, + "sizeof(struct vb2_gbb_header)"); + + TEST_EQ(0, 0, "Not Really A"); + + return !gTestSuccess; +} diff --git a/tests/futility/test_rwsig.sh b/tests/futility/test_rwsig.sh new file mode 100755 index 0000000..2bd70ce --- /dev/null +++ b/tests/futility/test_rwsig.sh @@ -0,0 +1,64 @@ +#!/bin/bash -eux +# Copyright 2017 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +me=${0##*/} +TMP="$me.tmp" + +# Work in scratch directory +cd "$OUTDIR" + +DATADIR="${SCRIPT_DIR}/futility/data" +TESTKEYS=${SRCDIR}/tests/testkeys + +SIGS="1024 2048 2048_exp3 3072_exp3 4096 8192" +HASHES="SHA1 SHA256 SHA512" +EC_RW="EC_RW.bin" + +set -o pipefail + +infile=${DATADIR}/hammer_dev.bin +outfile=${TMP}.hammer_dev.bin +cp ${infile} ${outfile} +# Signing without private key should extract EC_RW.bin +${FUTILITY} sign --type rwsig --version 2 ${outfile} +cmp ${infile} ${outfile} +cmp ${EC_RW} ${DATADIR}/${EC_RW} + +for s in $SIGS; do + echo -n "$s " 1>&3 + + for h in $HASHES; do + pemfile=${TESTKEYS}/key_rsa${s}.pem + outkeys=${TMP}.${s}_${h} + outfile=${TMP}.${s}_${h}.bin + + ${FUTILITY} create --desc "Test key" --hash_alg ${h} \ + ${pemfile} ${outkeys} + + # The input file should be correctly signed to start with + ${FUTILITY} show --type rwsig ${infile} + + # Using the wrong key to verify it should fail + if ${FUTILITY} show --type rwsig --pubkey ${outkeys}.vbpubk2 \ + ${infile}; then + exit 1 + fi + + cp ${infile} ${outfile} + + # Sign ec.bin with a new private key + ${FUTILITY} sign --type rwsig --prikey ${outkeys}.vbprik2 \ + --version 2 ${outfile} + # Check EC_RW.bin is produced + [[ -e ${EC_RW} ]] + + ${FUTILITY} show --type rwsig --pubkey ${outkeys}.vbpubk2 ${outfile} + ${FUTILITY} show --type rwsig ${outfile} + done +done + +# cleanup +rm -rf ${TMP}* +exit 0 diff --git a/tests/futility/test_show_contents.sh b/tests/futility/test_show_contents.sh new file mode 100755 index 0000000..e040362 --- /dev/null +++ b/tests/futility/test_show_contents.sh @@ -0,0 +1,107 @@ +#!/bin/bash -eux +# Copyright 2015 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +me="${0##*/}" +TMP="$me.tmp" + +# Work in scratch directory +cd "${OUTDIR}" + +# Test 'futility show' against expected output +SHOW_FILES=" + tests/devkeys/root_key.vbpubk + tests/devkeys/root_key.vbprivk + tests/devkeys/kernel.keyblock + tests/futility/data/fw_vblock.bin + tests/futility/data/fw_gbb.bin + tests/futility/data/bios_zgb_mp.bin + tests/futility/data/bios_mario_mp.bin + tests/futility/data/kern_preamble.bin + tests/futility/data/sample.vbpubk2 + tests/futility/data/sample.vbprik2 + tests/testkeys/key_rsa2048.pem + tests/testkeys/key_rsa8192.pub.pem +" + +for file in $SHOW_FILES; do + outfile="show.${file//\//_}" + gotfile="${OUTDIR}/${outfile}" + wantfile="${SRCDIR}/tests/futility/expect_output/${outfile}" + ( cd "${SRCDIR}" && ${FUTILITY} show "${file}" ) | tee "${gotfile}" + + # Uncomment this to update the expected output + #cp "${gotfile}" "${wantfile}" + + diff "${wantfile}" "${gotfile}" +done + + +# Test 'futility vbutil_key' against expected output +VBUTIL_KEY_FILES=" + tests/devkeys/root_key.vbpubk + tests/devkeys/root_key.vbprivk +" + +for file in $VBUTIL_KEY_FILES; do + outfile="vbutil_key.${file//\//_}" + gotfile="${OUTDIR}/${outfile}" + wantfile="${SRCDIR}/tests/futility/expect_output/${outfile}" + ( cd "${SRCDIR}" && ${FUTILITY} vbutil_key --unpack "${file}" ) \ + | tee "${gotfile}" + + # Uncomment this to update the expected output + #cp "${gotfile}" "${wantfile}" + + diff "${wantfile}" "${gotfile}" +done + + +# Test 'futility vbutil_keyblock' against expected output +file="tests/devkeys/kernel.keyblock" +outfile="vbutil_keyblock.${file//\//_}" +gotfile="${OUTDIR}/${outfile}" +wantfile="${SRCDIR}/tests/futility/expect_output/${outfile}" +( cd "${SRCDIR}" && ${FUTILITY} vbutil_keyblock --unpack "${file}" \ + --signpubkey "tests/devkeys/kernel_subkey.vbpubk" ) \ + | tee "${gotfile}" + +# Uncomment this to update the expected output +#cp "${gotfile}" "${wantfile}" + +diff "${wantfile}" "${gotfile}" + + +# Test 'futility vbutil_firmware' against expected output +KEYDIR="${SRCDIR}/tests/devkeys" +outfile="vbutil_firmware.verify" +gotfile="${OUTDIR}/${outfile}" +wantfile="${SRCDIR}/tests/futility/expect_output/${outfile}" + +# Create a firmware blob and vblock. Version and flags are just +# arbitrary non-zero numbers so we can verify they're printed +# properly. +dd bs=1024 count=16 if=/dev/urandom of="${TMP}.fw_main" +${FUTILITY} vbutil_firmware --vblock "${TMP}.vblock.old" \ + --keyblock "${KEYDIR}/firmware.keyblock" \ + --signprivate "${KEYDIR}/firmware_data_key.vbprivk" \ + --version 12 \ + --fv "${TMP}.fw_main" \ + --kernelkey "${KEYDIR}/kernel_subkey.vbpubk" \ + --flags 42 + +# Verify +${FUTILITY} vbutil_firmware --verify "${TMP}.vblock.old" \ + --signpubkey "${KEYDIR}/root_key.vbpubk" \ + --fv "${TMP}.fw_main" | tee "${gotfile}" + +# Uncomment this to update the expected output +#cp "${gotfile}" "${wantfile}" + +diff "${wantfile}" "${gotfile}" + + +# cleanup +rm -rf "${TMP}*" +exit 0 diff --git a/tests/futility/test_show_kernel.sh b/tests/futility/test_show_kernel.sh new file mode 100755 index 0000000..151cf46 --- /dev/null +++ b/tests/futility/test_show_kernel.sh @@ -0,0 +1,77 @@ +#!/bin/bash -eux +# Copyright (c) 2014 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +me=${0##*/} +TMP="$me.tmp" + +# Work in scratch directory +cd "$OUTDIR" + +DEVKEYS=${SRCDIR}/tests/devkeys +TESTKEYS=${SRCDIR}/tests/testkeys + +echo 'Creating test kernel' + +# Dummy kernel data +echo "hi there" > ${TMP}.config.txt +dd if=/dev/urandom bs=16384 count=1 of=${TMP}.bootloader.bin +dd if=/dev/urandom bs=32768 count=1 of=${TMP}.kernel.bin + +# Pack kernel data key using original vboot utilities. +${FUTILITY} vbutil_key --pack ${TMP}.datakey.test \ + --key ${TESTKEYS}/key_rsa2048.keyb --algorithm 4 + +# Keyblock with kernel data key is signed by kernel subkey +# Flags=5 means dev=0 rec=0 +${FUTILITY} vbutil_keyblock --pack ${TMP}.keyblock.test \ + --datapubkey ${TMP}.datakey.test \ + --flags 5 \ + --signprivate ${DEVKEYS}/kernel_subkey.vbprivk + +# Kernel preamble is signed with the kernel data key +${FUTILITY} vbutil_kernel \ + --pack ${TMP}.kernel.test \ + --keyblock ${TMP}.keyblock.test \ + --signprivate ${TESTKEYS}/key_rsa2048.sha256.vbprivk \ + --version 1 \ + --arch arm \ + --vmlinuz ${TMP}.kernel.bin \ + --bootloader ${TMP}.bootloader.bin \ + --config ${TMP}.config.txt + +echo 'Verifying test kernel' + +# Verify the kernel +${FUTILITY} show ${TMP}.kernel.test \ + --publickey ${DEVKEYS}/kernel_subkey.vbpubk \ + | egrep 'Signature.*valid' + +echo 'Test kernel blob looks good' + +# Mess up the padding, make sure it fails. +rc=0 +${FUTILITY} show ${TMP}.kernel.test \ + --pad 0x100 \ + --publickey ${DEVKEYS}/kernel_subkey.vbpubk \ + || rc=$? +[ $rc -ne 0 ] +[ $rc -lt 128 ] + +echo 'Invalid args are invalid' + +# Look waaaaaay off the end of the file, make sure it fails. +rc=0 +${FUTILITY} show ${TMP}.kernel.test \ + --pad 0x100000 \ + --publickey ${DEVKEYS}/kernel_subkey.vbpubk \ + || rc=$? +[ $rc -ne 0 ] +[ $rc -lt 128 ] + +echo 'Really invalid args are still invalid' + +# cleanup +rm -rf ${TMP}* +exit 0 diff --git a/tests/futility/test_show_usbpd1.sh b/tests/futility/test_show_usbpd1.sh new file mode 100755 index 0000000..b5553aa --- /dev/null +++ b/tests/futility/test_show_usbpd1.sh @@ -0,0 +1,46 @@ +#!/bin/bash -eux +# Copyright 2015 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +me=${0##*/} +TMP="$me.tmp" + +# Work in scratch directory +cd "$OUTDIR" + +DATADIR="${SCRIPT_DIR}/futility/data" +TESTS="dingdong hoho minimuffin zinger" +TESTKEYS=${SRCDIR}/tests/testkeys + +SIGS="1024 2048 4096 8192" +HASHES="SHA1 SHA256 SHA512" + +set -o pipefail + +for s in $SIGS; do + + echo -n "$s " 1>&3 + + for test in $TESTS; do + + infile=${DATADIR}/${test}.unsigned + + for h in $HASHES; do + + pemfile=${TESTKEYS}/key_rsa${s}.pem + outfile=${TMP}.${test}_${s}_${h}.new + + # sign it + ${FUTILITY} sign --type usbpd1 --pem ${pemfile} ${infile} ${outfile} + + # make sure it identifies correctly + ${FUTILITY} verify ${outfile} + + done + done +done + +# cleanup +rm -rf ${TMP}* +exit 0 diff --git a/tests/futility/test_show_vs_verify.sh b/tests/futility/test_show_vs_verify.sh new file mode 100755 index 0000000..4981a38 --- /dev/null +++ b/tests/futility/test_show_vs_verify.sh @@ -0,0 +1,76 @@ +#!/bin/bash -eux +# Copyright 2014 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +me=${0##*/} +TMP="$me.tmp" + +# Work in scratch directory +cd "$OUTDIR" + +# some stuff we'll need +DEVKEYS=${SRCDIR}/tests/devkeys + +# The show command exits with 0 if the data is consistent. +# The verify command exits with 0 only if all the data is verified. + +#### keyblock + +${FUTILITY} show ${DEVKEYS}/firmware.keyblock + +if ${FUTILITY} verify ${DEVKEYS}/firmware.keyblock ; then false; fi + +${FUTILITY} verify ${DEVKEYS}/firmware.keyblock \ + --publickey ${DEVKEYS}/root_key.vbpubk + + +#### firmware vblock + +# Get some bits to look at +${FUTILITY} dump_fmap -x ${SCRIPT_DIR}/futility/data/bios_peppy_mp.bin \ + GBB:${TMP}.gbb VBLOCK_A:${TMP}.vblock_a FW_MAIN_A:${TMP}.fw_main_a +${FUTILITY} gbb -g -k ${TMP}.rootkey ${TMP}.gbb + + +${FUTILITY} show ${TMP}.vblock_a + +${FUTILITY} show ${TMP}.vblock_a --publickey ${TMP}.rootkey + +${FUTILITY} show ${TMP}.vblock_a \ + --publickey ${TMP}.rootkey \ + --fv ${TMP}.fw_main_a + +if ${FUTILITY} verify ${TMP}.vblock_a ; then false ; fi + +if ${FUTILITY} verify ${TMP}.vblock_a \ + --publickey ${TMP}.rootkey ; then false ; fi + +${FUTILITY} verify ${TMP}.vblock_a \ + --publickey ${TMP}.rootkey \ + --fv ${TMP}.fw_main_a + + +#### kernel partition + +${FUTILITY} show ${SCRIPT_DIR}/futility/data/rec_kernel_part.bin + +${FUTILITY} show ${SCRIPT_DIR}/futility/data/rec_kernel_part.bin \ + --publickey ${DEVKEYS}/kernel_subkey.vbpubk + +${FUTILITY} show ${SCRIPT_DIR}/futility/data/rec_kernel_part.bin \ + --publickey ${DEVKEYS}/recovery_key.vbpubk + +if ${FUTILITY} verify ${SCRIPT_DIR}/futility/data/rec_kernel_part.bin ; \ + then false ; fi + +if ${FUTILITY} verify ${SCRIPT_DIR}/futility/data/rec_kernel_part.bin \ + --publickey ${DEVKEYS}/kernel_subkey.vbpubk ; then false ; fi + +${FUTILITY} verify ${SCRIPT_DIR}/futility/data/rec_kernel_part.bin \ + --publickey ${DEVKEYS}/recovery_key.vbpubk + + +# cleanup +rm -rf ${TMP}* +exit 0 diff --git a/tests/futility/test_sign_firmware.sh b/tests/futility/test_sign_firmware.sh new file mode 100755 index 0000000..fa5529c --- /dev/null +++ b/tests/futility/test_sign_firmware.sh @@ -0,0 +1,187 @@ +#!/bin/bash -eux +# Copyright 2014 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +me=${0##*/} +TMP="$me.tmp" + +# Work in scratch directory +cd "$OUTDIR" + +KEYDIR=${SRCDIR}/tests/devkeys + +# The input BIOS images are all signed with MP keys. We resign them with dev +# keys, which means we can precalculate the expected results. Note that the +# script does not change the root or recovery keys in the GBB. +INFILES=" +${SCRIPT_DIR}/futility/data/bios_link_mp.bin +${SCRIPT_DIR}/futility/data/bios_mario_mp.bin +${SCRIPT_DIR}/futility/data/bios_peppy_mp.bin +" + +# We also want to test that we can sign an image without any valid firmware +# preambles. That one won't be able to tell how much of the FW_MAIN region is +# the valid firmware, so it'll have to sign the entire region. +GOOD_VBLOCKS=${SCRIPT_DIR}/futility/data/bios_peppy_mp.bin +ONEMORE=bios_peppy_mp_no_vblock.bin +cp ${GOOD_VBLOCKS} ${ONEMORE} +${FUTILITY} load_fmap ${ONEMORE} VBLOCK_A:/dev/urandom VBLOCK_B:/dev/zero +INFILES="${INFILES} ${ONEMORE}" + +set -o pipefail + +# We've removed dev_firmware keyblock and private keys from ToT test key dir. +# It's currently only available on few legacy (alex, zgb) devices' key folders +# on signer bot. Add them to ${KEYDIR} if you need to test that. +DEV_FIRMWARE_PARAMS="" +if [ -f "${KEYDIR}/dev_firmware.keyblock" ]; then + DEV_FIRMWARE_PARAMS=" + -S ${KEYDIR}/dev_firmware_data_key.vbprivk + -B ${KEYDIR}/dev_firmware.keyblock" + INFILES="${INFILES} ${SCRIPT_DIR}/futility/data/bios_zgb_mp.bin" +fi + +count=0 +for infile in $INFILES; do + + base=${infile##*/} + + : $(( count++ )) + echo -n "$count " 1>&3 + + outfile=${TMP}.${base}.new + loemid="loem" + loemdir=${TMP}.${base}_dir + + mkdir -p ${loemdir} + + # resign_firmwarefd.sh works on BIOS image files. The args are: + # + # infile + # outfile + # firmware_datakey + # firmware_keyblock + # dev_firmware_datakey (these are only used if RW A & RW B differ) + # dev_firmware_keyblock + # kernel_subkey + # firmware_version + # preamble_flag + # loem_output_dir (optional: dir for copy of new vblocks) + # loemid (optional: copy new vblocks using this name) + # + #OLD ${BIN_DIR}/resign_firmwarefd.sh \ + #OLD ${infile} \ + #OLD ${outfile} \ + #OLD ${KEYDIR}/firmware_data_key.vbprivk \ + #OLD ${KEYDIR}/firmware.keyblock \ + #OLD ${KEYDIR}/dev_firmware_data_key.vbprivk \ + #OLD ${KEYDIR}/dev_firmware.keyblock \ + #OLD ${KEYDIR}/kernel_subkey.vbpubk \ + #OLD 14 \ + #OLD 8 \ + #OLD ${loemdir} \ + #OLD ${loemid} + + ${FUTILITY} sign \ + -s ${KEYDIR}/firmware_data_key.vbprivk \ + -b ${KEYDIR}/firmware.keyblock \ + ${DEV_FIRMWARE_PARAMS} \ + -k ${KEYDIR}/kernel_subkey.vbpubk \ + -v 14 \ + -f 8 \ + -d ${loemdir} \ + -l ${loemid} \ + ${infile} ${outfile} + + # check the firmware version and preamble flags + m=$(${FUTILITY} verify --publickey ${KEYDIR}/root_key.vbpubk ${outfile} \ + | egrep 'Firmware version: +14$|Preamble flags: +8$' | wc -l) + [ "$m" = "4" ] + + # check the sha1sums + ${FUTILITY} verify --publickey ${KEYDIR}/root_key.vbpubk ${outfile} \ + | grep sha1sum \ + | sed -e 's/.*: \+//' > ${TMP}.${base}.sha.new + cmp ${SCRIPT_DIR}/futility/data_${base}_expect.txt ${TMP}.${base}.sha.new + + # and the LOEM stuff + ${FUTILITY} dump_fmap -x ${outfile} \ + FW_MAIN_A:${loemdir}/fw_main_A FW_MAIN_B:${loemdir}/fw_main_B \ + "Firmware A Data":${loemdir}/fw_main_A \ + "Firmware B Data":${loemdir}/fw_main_B + + + ${FUTILITY} verify --publickey ${KEYDIR}/root_key.vbpubk \ + --fv ${loemdir}/fw_main_A \ + ${loemdir}/vblock_A.${loemid} | grep sha1sum \ + | sed -e 's/.*: \+//' > ${loemdir}/loem.sha.new + ${FUTILITY} verify --publickey ${KEYDIR}/root_key.vbpubk \ + --fv ${loemdir}/fw_main_B \ + ${loemdir}/vblock_B.${loemid} | grep sha1sum \ + | sed -e 's/.*: \+//' >> ${loemdir}/loem.sha.new + + # the vblocks don't have root or recovery keys + tail -4 ${SCRIPT_DIR}/futility/data_${base}_expect.txt > ${loemdir}/sha.expect + cmp ${loemdir}/sha.expect ${loemdir}/loem.sha.new + +done + +# Make sure that the BIOS with the good vblocks signed the right size. +GOOD_OUT=${TMP}.${GOOD_VBLOCKS##*/}.new +MORE_OUT=${TMP}.${ONEMORE##*/}.new + +${FUTILITY} verify --publickey ${KEYDIR}/root_key.vbpubk ${GOOD_OUT} \ + | awk '/Firmware body size:/ {print $4}' > ${TMP}.good.body +${FUTILITY} dump_fmap -p ${GOOD_OUT} \ + | awk '/FW_MAIN_/ {print $3}' > ${TMP}.good.fw_main +# This should fail because they're different +if cmp ${TMP}.good.body ${TMP}.good.fw_main; then false; fi + +# Make sure that the BIOS with the bad vblocks signed the whole fw body +${FUTILITY} verify --publickey ${KEYDIR}/root_key.vbpubk ${MORE_OUT} \ + | awk '/Firmware body size:/ {print $4}' > ${TMP}.onemore.body +${FUTILITY} dump_fmap -p ${MORE_OUT} \ + | awk '/FW_MAIN_/ {print $3}' > ${TMP}.onemore.fw_main +# These should match +cmp ${TMP}.onemore.body ${TMP}.onemore.fw_main +cmp ${TMP}.onemore.body ${TMP}.good.fw_main + + +# Sign the last one again but don't specify the version or the preamble flags. +# The version should default to 1, but the preamble flags should be preserved. +: $(( count++ )) +echo -n "$count " 1>&3 + +${FUTILITY} sign \ + -s ${KEYDIR}/firmware_data_key.vbprivk \ + -b ${KEYDIR}/firmware.keyblock \ + ${DEV_FIRMWARE_PARAMS} \ + -k ${KEYDIR}/kernel_subkey.vbpubk \ + ${MORE_OUT} ${MORE_OUT}.2 + +m=$(${FUTILITY} verify --publickey ${KEYDIR}/root_key.vbpubk ${MORE_OUT}.2 \ + | egrep 'Firmware version: +1$|Preamble flags: +8$' | wc -l) +[ "$m" = "4" ] + + +# If the original preamble is not present, the preamble flags should be zero. +: $(( count++ )) +echo -n "$count " 1>&3 + +${FUTILITY} load_fmap ${MORE_OUT} VBLOCK_A:/dev/urandom VBLOCK_B:/dev/zero +${FUTILITY} sign \ + -s ${KEYDIR}/firmware_data_key.vbprivk \ + -b ${KEYDIR}/firmware.keyblock \ + ${DEV_FIRMWARE_PARAMS} \ + -k ${KEYDIR}/kernel_subkey.vbpubk \ + ${MORE_OUT} ${MORE_OUT}.3 + +m=$(${FUTILITY} verify --publickey ${KEYDIR}/root_key.vbpubk ${MORE_OUT}.3 \ + | egrep 'Firmware version: +1$|Preamble flags: +0$' | wc -l) +[ "$m" = "4" ] + + +# cleanup +rm -rf ${TMP}* ${ONEMORE} +exit 0 diff --git a/tests/futility/test_sign_fw_main.sh b/tests/futility/test_sign_fw_main.sh new file mode 100755 index 0000000..face801 --- /dev/null +++ b/tests/futility/test_sign_fw_main.sh @@ -0,0 +1,46 @@ +#!/bin/bash -eux +# Copyright 2014 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +me=${0##*/} +TMP="$me.tmp" + +# Work in scratch directory +cd "$OUTDIR" + +KEYDIR=${SRCDIR}/tests/devkeys + +# create a firmware blob +dd bs=1024 count=16 if=/dev/urandom of=${TMP}.fw_main + +# try the old way +${FUTILITY} vbutil_firmware --vblock ${TMP}.vblock.old \ + --keyblock ${KEYDIR}/firmware.keyblock \ + --signprivate ${KEYDIR}/firmware_data_key.vbprivk \ + --version 12 \ + --fv ${TMP}.fw_main \ + --kernelkey ${KEYDIR}/kernel_subkey.vbpubk \ + --flags 42 + +# verify +${FUTILITY} vbutil_firmware --verify ${TMP}.vblock.old \ + --signpubkey ${KEYDIR}/root_key.vbpubk \ + --fv ${TMP}.fw_main + +# and the new way +${FUTILITY} --debug sign \ + --signprivate ${KEYDIR}/firmware_data_key.vbprivk \ + --keyblock ${KEYDIR}/firmware.keyblock \ + --kernelkey ${KEYDIR}/kernel_subkey.vbpubk \ + --version 12 \ + --fv ${TMP}.fw_main \ + --flags 42 \ + ${TMP}.vblock.new + +# They should match +cmp ${TMP}.vblock.old ${TMP}.vblock.new + +# cleanup +rm -rf ${TMP}* +exit 0 diff --git a/tests/futility/test_sign_kernel.sh b/tests/futility/test_sign_kernel.sh new file mode 100755 index 0000000..d252745 --- /dev/null +++ b/tests/futility/test_sign_kernel.sh @@ -0,0 +1,308 @@ +#!/bin/bash -eux +# Copyright (c) 2014 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +me=${0##*/} +TMP="$me.tmp" + +# Work in scratch directory +cd "$OUTDIR" + +DEVKEYS=${SRCDIR}/tests/devkeys + +echo "hi there" > ${TMP}.config.txt +echo "hello boys" > ${TMP}.config2.txt +dd if=/dev/urandom bs=512 count=1 of=${TMP}.bootloader.bin +dd if=/dev/urandom bs=512 count=1 of=${TMP}.bootloader2.bin +dd if=/dev/urandom bs=1M count=16 of=${TMP}.kern_partition + +# default padding +padding=49152 + +try_arch () { + local arch=$1 + + echo -n "${arch}: 1 " 1>&3 + + # pack it up the old way + ${FUTILITY} --debug vbutil_kernel \ + --pack ${TMP}.blob1.${arch} \ + --keyblock ${DEVKEYS}/recovery_kernel.keyblock \ + --signprivate ${DEVKEYS}/recovery_kernel_data_key.vbprivk \ + --version 1 \ + --config ${TMP}.config.txt \ + --bootloader ${TMP}.bootloader.bin \ + --vmlinuz ${SCRIPT_DIR}/futility/data/vmlinuz-${arch}.bin \ + --arch ${arch} \ + --pad ${padding} \ + --kloadaddr 0x11000 + + # verify the old way + ${FUTILITY} vbutil_kernel --verify ${TMP}.blob1.${arch} \ + --pad ${padding} \ + --signpubkey ${DEVKEYS}/recovery_key.vbpubk > ${TMP}.verify1 + + # pack it up the new way + ${FUTILITY} --debug sign \ + --keyblock ${DEVKEYS}/recovery_kernel.keyblock \ + --signprivate ${DEVKEYS}/recovery_kernel_data_key.vbprivk \ + --version 1 \ + --config ${TMP}.config.txt \ + --bootloader ${TMP}.bootloader.bin \ + --vmlinuz ${SCRIPT_DIR}/futility/data/vmlinuz-${arch}.bin \ + --arch ${arch} \ + --pad ${padding} \ + --kloadaddr 0x11000 \ + --outfile ${TMP}.blob2.${arch} + + ${FUTILITY} vbutil_kernel --verify ${TMP}.blob2.${arch} \ + --pad ${padding} \ + --signpubkey ${DEVKEYS}/recovery_key.vbpubk > ${TMP}.verify2 + + # they should be identical + cmp ${TMP}.blob1.${arch} ${TMP}.blob2.${arch} + diff ${TMP}.verify1 ${TMP}.verify2 + + echo -n "2 " 1>&3 + + # repack it the old way + ${FUTILITY} --debug vbutil_kernel \ + --repack ${TMP}.blob3.${arch} \ + --oldblob ${TMP}.blob1.${arch} \ + --signprivate ${DEVKEYS}/kernel_data_key.vbprivk \ + --keyblock ${DEVKEYS}/kernel.keyblock \ + --version 2 \ + --pad ${padding} \ + --config ${TMP}.config2.txt \ + --bootloader ${TMP}.bootloader2.bin + + # verify the old way + ${FUTILITY} vbutil_kernel --verify ${TMP}.blob3.${arch} \ + --pad ${padding} \ + --signpubkey ${DEVKEYS}/kernel_subkey.vbpubk > ${TMP}.verify3 + + # repack it the new way + ${FUTILITY} --debug sign \ + --signprivate ${DEVKEYS}/kernel_data_key.vbprivk \ + --keyblock ${DEVKEYS}/kernel.keyblock \ + --version 2 \ + --pad ${padding} \ + --config ${TMP}.config2.txt \ + --bootloader ${TMP}.bootloader2.bin \ + ${TMP}.blob2.${arch} \ + ${TMP}.blob4.${arch} + + ${FUTILITY} vbutil_kernel --verify ${TMP}.blob4.${arch} \ + --pad ${padding} \ + --signpubkey ${DEVKEYS}/kernel_subkey.vbpubk > ${TMP}.verify4 + + # they should be identical + cmp ${TMP}.blob3.${arch} ${TMP}.blob4.${arch} + diff ${TMP}.verify3 ${TMP}.verify4 + + echo -n "3 " 1>&3 + + # repack it the new way, in-place + cp ${TMP}.blob2.${arch} ${TMP}.blob5.${arch} + ${FUTILITY} --debug sign \ + --signprivate ${DEVKEYS}/kernel_data_key.vbprivk \ + --keyblock ${DEVKEYS}/kernel.keyblock \ + --version 2 \ + --pad ${padding} \ + --config ${TMP}.config2.txt \ + --bootloader ${TMP}.bootloader2.bin \ + ${TMP}.blob5.${arch} + + ${FUTILITY} vbutil_kernel --verify ${TMP}.blob5.${arch} \ + --pad ${padding} \ + --signpubkey ${DEVKEYS}/kernel_subkey.vbpubk > ${TMP}.verify5 + + # they should be identical + cmp ${TMP}.blob3.${arch} ${TMP}.blob5.${arch} + diff ${TMP}.verify3 ${TMP}.verify5 + + # and now just the vblocks... + echo -n "4 " 1>&3 + + # pack the old way + ${FUTILITY} vbutil_kernel \ + --pack ${TMP}.blob1.${arch}.vb1 \ + --vblockonly \ + --keyblock ${DEVKEYS}/recovery_kernel.keyblock \ + --signprivate ${DEVKEYS}/recovery_kernel_data_key.vbprivk \ + --version 1 \ + --config ${TMP}.config.txt \ + --bootloader ${TMP}.bootloader.bin \ + --vmlinuz ${SCRIPT_DIR}/futility/data/vmlinuz-${arch}.bin \ + --arch ${arch} \ + --pad ${padding} \ + --kloadaddr 0x11000 + + # compare this new vblock with the one from the full pack + dd bs=${padding} count=1 if=${TMP}.blob1.${arch} of=${TMP}.blob1.${arch}.vb0 + cmp ${TMP}.blob1.${arch}.vb0 ${TMP}.blob1.${arch}.vb1 + + # pack the new way + ${FUTILITY} --debug sign \ + --keyblock ${DEVKEYS}/recovery_kernel.keyblock \ + --signprivate ${DEVKEYS}/recovery_kernel_data_key.vbprivk \ + --version 1 \ + --config ${TMP}.config.txt \ + --bootloader ${TMP}.bootloader.bin \ + --vmlinuz ${SCRIPT_DIR}/futility/data/vmlinuz-${arch}.bin \ + --arch ${arch} \ + --pad ${padding} \ + --kloadaddr 0x11000 \ + --vblockonly \ + ${TMP}.blob2.${arch}.vb1 + + # compare this new vblock with the one from the full pack + dd bs=${padding} count=1 if=${TMP}.blob2.${arch} of=${TMP}.blob2.${arch}.vb0 + cmp ${TMP}.blob2.${arch}.vb0 ${TMP}.blob2.${arch}.vb1 + + echo -n "5 " 1>&3 + + # now repack the old way, again emitting just the vblock + ${FUTILITY} vbutil_kernel \ + --repack ${TMP}.blob3.${arch}.vb1 \ + --vblockonly \ + --oldblob ${TMP}.blob1.${arch} \ + --signprivate ${DEVKEYS}/kernel_data_key.vbprivk \ + --keyblock ${DEVKEYS}/kernel.keyblock \ + --version 2 \ + --pad ${padding} \ + --config ${TMP}.config2.txt \ + --bootloader ${TMP}.bootloader2.bin + + # compare the full repacked vblock with the new repacked vblock + dd bs=${padding} count=1 if=${TMP}.blob3.${arch} of=${TMP}.blob3.${arch}.vb0 + cmp ${TMP}.blob3.${arch}.vb0 ${TMP}.blob3.${arch}.vb1 + + # extract just the kernel blob + dd bs=${padding} skip=1 if=${TMP}.blob3.${arch} of=${TMP}.blob3.${arch}.kb0 + # and verify it using the new vblock (no way to do that with vbutil_kernel) + ${FUTILITY} --debug verify \ + --pad ${padding} \ + --publickey ${DEVKEYS}/kernel_subkey.vbpubk \ + --fv ${TMP}.blob3.${arch}.kb0 \ + ${TMP}.blob3.${arch}.vb1 > ${TMP}.verify3v + + # repack the new way + ${FUTILITY} --debug sign \ + --signprivate ${DEVKEYS}/kernel_data_key.vbprivk \ + --keyblock ${DEVKEYS}/kernel.keyblock \ + --version 2 \ + --config ${TMP}.config2.txt \ + --bootloader ${TMP}.bootloader2.bin \ + --pad ${padding} \ + --vblockonly \ + ${TMP}.blob2.${arch} \ + ${TMP}.blob4.${arch}.vb1 \ + + # compare the full repacked vblock with the new repacked vblock + dd bs=${padding} count=1 if=${TMP}.blob4.${arch} of=${TMP}.blob4.${arch}.vb0 + cmp ${TMP}.blob4.${arch}.vb0 ${TMP}.blob4.${arch}.vb1 + + # extract just the kernel blob + dd bs=${padding} skip=1 if=${TMP}.blob4.${arch} of=${TMP}.blob4.${arch}.kb0 + # and verify it using the new vblock (no way to do that with vbutil_kernel) + ${FUTILITY} --debug verify \ + --pad ${padding} \ + --publickey ${DEVKEYS}/kernel_subkey.vbpubk \ + --fv ${TMP}.blob4.${arch}.kb0 \ + ${TMP}.blob4.${arch}.vb1 > ${TMP}.verify4v + + + echo -n "6 " 1>&3 + + # Now lets repack some kernel partitions, not just blobs. + cp ${TMP}.kern_partition ${TMP}.part1.${arch} + dd if=${TMP}.blob1.${arch} of=${TMP}.part1.${arch} conv=notrunc + + # Make sure the partitions verify + ${FUTILITY} vbutil_kernel --verify ${TMP}.part1.${arch} \ + --pad ${padding} \ + --signpubkey ${DEVKEYS}/recovery_key.vbpubk > ${TMP}.verify6 + + # The partition should verify the same way as the blob + diff ${TMP}.verify1 ${TMP}.verify6 + + # repack it the old way + ${FUTILITY} --debug vbutil_kernel \ + --repack ${TMP}.part6.${arch} \ + --oldblob ${TMP}.part1.${arch} \ + --signprivate ${DEVKEYS}/kernel_data_key.vbprivk \ + --keyblock ${DEVKEYS}/kernel.keyblock \ + --version 2 \ + --pad ${padding} \ + --config ${TMP}.config2.txt \ + --bootloader ${TMP}.bootloader2.bin + + # verify the old way + ${FUTILITY} vbutil_kernel --verify ${TMP}.part6.${arch} \ + --pad ${padding} \ + --signpubkey ${DEVKEYS}/kernel_subkey.vbpubk > ${TMP}.verify6.old + + # this "partition" should actually be the same as the old-way blob + cmp ${TMP}.blob3.${arch} ${TMP}.part6.${arch} + + # repack it the new way, in-place + cp ${TMP}.part1.${arch} ${TMP}.part6.${arch}.new1 + ${FUTILITY} --debug sign \ + --signprivate ${DEVKEYS}/kernel_data_key.vbprivk \ + --keyblock ${DEVKEYS}/kernel.keyblock \ + --version 2 \ + --pad ${padding} \ + --config ${TMP}.config2.txt \ + --bootloader ${TMP}.bootloader2.bin \ + ${TMP}.part6.${arch}.new1 + + ${FUTILITY} vbutil_kernel --verify ${TMP}.part6.${arch}.new1 \ + --pad ${padding} \ + --signpubkey ${DEVKEYS}/kernel_subkey.vbpubk > ${TMP}.verify6.new1 + + # The verification should be indentical + diff ${TMP}.verify6.old ${TMP}.verify6.new1 + # But the content should only match up to the size of the kernel blob, since + # we're modifying an entire partition in-place. + blobsize=$(stat -c '%s' ${TMP}.part6.${arch}) + cmp -n ${blobsize} ${TMP}.part6.${arch} ${TMP}.part6.${arch}.new1 + # The rest of the partition should be unchanged. + cmp -i ${blobsize} ${TMP}.part1.${arch} ${TMP}.part6.${arch}.new1 + + # repack it the new way, from input to output + cp ${TMP}.part1.${arch} ${TMP}.part1.${arch}.in + ${FUTILITY} --debug sign \ + --signprivate ${DEVKEYS}/kernel_data_key.vbprivk \ + --keyblock ${DEVKEYS}/kernel.keyblock \ + --version 2 \ + --pad ${padding} \ + --config ${TMP}.config2.txt \ + --bootloader ${TMP}.bootloader2.bin \ + ${TMP}.part1.${arch}.in \ + ${TMP}.part6.${arch}.new2 + + ${FUTILITY} vbutil_kernel --verify ${TMP}.part6.${arch}.new2 \ + --pad ${padding} \ + --signpubkey ${DEVKEYS}/kernel_subkey.vbpubk > ${TMP}.verify6.new2 + + # The input file should not have changed (just being sure). + cmp ${TMP}.part1.${arch} ${TMP}.part1.${arch}.in + # The verification should be indentical + diff ${TMP}.verify6.old ${TMP}.verify6.new2 + # And creating a new output file should only emit a blob's worth + cmp ${TMP}.part6.${arch} ${TMP}.part6.${arch}.new2 + + # Note: We specifically do not test repacking with a different --kloadaddr, + # because the old way has a bug and does not update params->cmd_line_ptr to + # point at the new on-disk location. Apparently (and not surprisingly), no + # one has ever done that. +} + +try_arch amd64 +try_arch arm + +# cleanup +rm -rf ${TMP}* +exit 0 diff --git a/tests/futility/test_sign_keyblocks.sh b/tests/futility/test_sign_keyblocks.sh new file mode 100755 index 0000000..f689c89 --- /dev/null +++ b/tests/futility/test_sign_keyblocks.sh @@ -0,0 +1,110 @@ +#!/bin/bash -eux +# Copyright 2014 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +me=${0##*/} +TMP="$me.tmp" + +# Work in scratch directory +cd "$OUTDIR" + +# some stuff we'll need +DEVKEYS=${SRCDIR}/tests/devkeys +TESTKEYS=${SRCDIR}/tests/testkeys +SIGNER=${SRCDIR}/tests/external_rsa_signer.sh + + +# Create a copy of an existing keyblock, using the old way +${FUTILITY} vbutil_keyblock --pack ${TMP}.keyblock0 \ + --datapubkey ${DEVKEYS}/firmware_data_key.vbpubk \ + --flags 23 \ + --signprivate ${DEVKEYS}/root_key.vbprivk + +# Check it. +${FUTILITY} vbutil_keyblock --unpack ${TMP}.keyblock0 \ + --signpubkey ${DEVKEYS}/root_key.vbpubk + +# It should be the same as the dev-key firmware keyblock +cmp ${DEVKEYS}/firmware.keyblock ${TMP}.keyblock0 + + +# Now create it the new way +${FUTILITY} --debug sign \ + --datapubkey ${DEVKEYS}/firmware_data_key.vbpubk \ + --flags 23 \ + --signprivate ${DEVKEYS}/root_key.vbprivk \ + --outfile ${TMP}.keyblock1 + +# It should be the same too. +cmp ${DEVKEYS}/firmware.keyblock ${TMP}.keyblock1 + + +# Create a keyblock without signing it. + +# old way +${FUTILITY} vbutil_keyblock --pack ${TMP}.keyblock0 \ + --datapubkey ${DEVKEYS}/firmware_data_key.vbpubk \ + --flags 14 + +# new way +${FUTILITY} --debug sign \ + --flags 14 \ + ${DEVKEYS}/firmware_data_key.vbpubk \ + ${TMP}.keyblock1 + +cmp ${TMP}.keyblock0 ${TMP}.keyblock1 + + +# Create one using PEM args + +# old way +${FUTILITY} vbutil_keyblock --pack ${TMP}.keyblock2 \ + --datapubkey ${DEVKEYS}/firmware_data_key.vbpubk \ + --signprivate_pem ${TESTKEYS}/key_rsa4096.pem \ + --pem_algorithm 8 \ + --flags 9 + +# verify it +${FUTILITY} vbutil_keyblock --unpack ${TMP}.keyblock2 \ + --signpubkey ${TESTKEYS}/key_rsa4096.sha512.vbpubk + +# new way +${FUTILITY} --debug sign \ + --pem_signpriv ${TESTKEYS}/key_rsa4096.pem \ + --pem_algo 8 \ + --flags 9 \ + ${DEVKEYS}/firmware_data_key.vbpubk \ + ${TMP}.keyblock3 + +cmp ${TMP}.keyblock2 ${TMP}.keyblock3 + +# Try it with an external signer + +# old way +${FUTILITY} vbutil_keyblock --pack ${TMP}.keyblock4 \ + --datapubkey ${DEVKEYS}/firmware_data_key.vbpubk \ + --signprivate_pem ${TESTKEYS}/key_rsa4096.pem \ + --pem_algorithm 8 \ + --flags 19 \ + --externalsigner ${SIGNER} + +# verify it +${FUTILITY} vbutil_keyblock --unpack ${TMP}.keyblock4 \ + --signpubkey ${TESTKEYS}/key_rsa4096.sha512.vbpubk + +# new way +${FUTILITY} --debug sign \ + --pem_signpriv ${TESTKEYS}/key_rsa4096.pem \ + --pem_algo 8 \ + --pem_external ${SIGNER} \ + --flags 19 \ + ${DEVKEYS}/firmware_data_key.vbpubk \ + ${TMP}.keyblock5 + +cmp ${TMP}.keyblock4 ${TMP}.keyblock5 + + +# cleanup +rm -rf ${TMP}* +exit 0 diff --git a/tests/futility/test_sign_usbpd1.sh b/tests/futility/test_sign_usbpd1.sh new file mode 100755 index 0000000..48e64eb --- /dev/null +++ b/tests/futility/test_sign_usbpd1.sh @@ -0,0 +1,56 @@ +#!/bin/bash -eux +# Copyright 2015 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +me=${0##*/} +TMP="$me.tmp" + +# Work in scratch directory +cd "$OUTDIR" + +# The signed input images are signed with dev keys. We resign the unsigned +# images with the same keypair, to make sure that we're producing identical +# binaries. + +DATADIR="${SCRIPT_DIR}/futility/data" +TESTS="dingdong hoho minimuffin zinger" + +set -o pipefail + +count=0 +for test in $TESTS; do + + : $(( count++ )) + echo -n "$count " 1>&3 + + pemfile=${DATADIR}/${test}.pem + infile=${DATADIR}/${test}.unsigned + goodfile=${DATADIR}/${test}.signed + outfile=${TMP}.${test}.new + + # Signing the whole thing with futility should produce identical results + ${FUTILITY} sign --type usbpd1 --pem ${pemfile} ${infile} ${outfile} + cmp ${goodfile} ${outfile} + + # Now try signing just the RW part + size=$(stat -c '%s' ${infile}) + half=$(( size / 2 )) + + newin=${TMP}.${test}.rw_in + dd if=${infile} bs=${half} count=1 skip=1 of=${newin} + newgood=${TMP}.${test}.rw_ok + dd if=${goodfile} bs=${half} count=1 skip=1 of=${newgood} + newout=${TMP}.${test}.rw_out + + # Sign the RW part alone + ${FUTILITY} sign --type usbpd1 --pem ${pemfile} \ + --ro_size 0 \ + ${newin} ${newout} + cmp ${newgood} ${newout} + +done + +# cleanup +rm -rf ${TMP}* +exit 0 diff --git a/tests/futility/test_update.sh b/tests/futility/test_update.sh new file mode 100755 index 0000000..31f3ecb --- /dev/null +++ b/tests/futility/test_update.sh @@ -0,0 +1,505 @@ +#!/bin/bash -eux +# Copyright 2018 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +me=${0##*/} +TMP="$me.tmp" + +# Test --sys_props (primitive test needed for future updating tests). +test_sys_props() { + ! "${FUTILITY}" --debug update --sys_props "$*" 2>&1 | + sed -n 's/.*property\[\(.*\)].value = \(.*\)/\1,\2,/p' | + tr '\n' ' ' +} + +test "$(test_sys_props "1,2,3")" = "0,1, 1,2, 2,3, " +test "$(test_sys_props "1 2 3")" = "0,1, 1,2, 2,3, " +test "$(test_sys_props "1, 2,3 ")" = "0,1, 1,2, 2,3, " +test "$(test_sys_props " 1,, 2")" = "0,1, 2,2, " +test "$(test_sys_props " , 4,")" = "1,4, " + +test_quirks() { + ! "${FUTILITY}" --debug update --quirks "$*" 2>&1 | + sed -n 's/.*Set quirk \(.*\) to \(.*\)./\1,\2/p' | + tr '\n' ' ' +} + +test "$(test_quirks "enlarge_image")" = "enlarge_image,1 " +test "$(test_quirks "enlarge_image=2")" = "enlarge_image,2 " +test "$(test_quirks " enlarge_image, enlarge_image=2")" = \ + "enlarge_image,1 enlarge_image,2 " + +# Test data files +LINK_BIOS="${SCRIPT_DIR}/futility/data/bios_link_mp.bin" +PEPPY_BIOS="${SCRIPT_DIR}/futility/data/bios_peppy_mp.bin" +RO_VPD_BLOB="${SCRIPT_DIR}/futility/data/ro_vpd.bin" + +# Work in scratch directory +cd "$OUTDIR" +set -o pipefail + +# In all the test scenario, we want to test "updating from PEPPY to LINK". +TO_IMAGE=${TMP}.src.link +FROM_IMAGE=${TMP}.src.peppy +TO_HWID="X86 LINK TEST 6638" +FROM_HWID="X86 PEPPY TEST 4211" +cp -f ${LINK_BIOS} ${TO_IMAGE} +cp -f ${PEPPY_BIOS} ${FROM_IMAGE} +"${FUTILITY}" load_fmap "${FROM_IMAGE}" \ + RO_VPD:"${RO_VPD_BLOB}" RW_VPD:"${RO_VPD_BLOB}" +cp -f "${FROM_IMAGE}" "${FROM_IMAGE}".unpatched + +patch_file() { + local file="$1" + local section="$2" + local section_offset="$3" + local data="$4" + + # NAME OFFSET SIZE + local fmap_info="$(${FUTILITY} dump_fmap -p ${file} ${section})" + local base="$(echo "${fmap_info}" | sed 's/^[^ ]* //; s/ [^ ]*$//')" + local offset=$((base + section_offset)) + echo "offset: ${offset}" + printf "${data}" | dd of="${file}" bs=1 seek="${offset}" conv=notrunc +} + +# PEPPY and LINK have different platform element ("Google_Link" and +# "Google_Peppy") in firmware ID so we want to hack them by changing +# "Google_" to "Google.". +patch_file ${TO_IMAGE} RW_FWID_A 0 Google. +patch_file ${TO_IMAGE} RW_FWID_B 0 Google. +patch_file ${TO_IMAGE} RO_FRID 0 Google. +patch_file ${FROM_IMAGE} RW_FWID_A 0 Google. +patch_file ${FROM_IMAGE} RW_FWID_B 0 Google. +patch_file ${FROM_IMAGE} RO_FRID 0 Google. + +unpack_image() { + local folder="${TMP}.$1" + local image="$2" + mkdir -p "${folder}" + (cd "${folder}" && ${FUTILITY} dump_fmap -x "../${image}") + ${FUTILITY} gbb -g --rootkey="${folder}/rootkey" "${image}" +} + +# Unpack images so we can prepare expected results by individual sections. +unpack_image "to" "${TO_IMAGE}" +unpack_image "from" "${FROM_IMAGE}" + +# Hack FROM_IMAGE so it has same root key as TO_IMAGE (for RW update). +FROM_DIFFERENT_ROOTKEY_IMAGE="${FROM_IMAGE}2" +cp -f "${FROM_IMAGE}" "${FROM_DIFFERENT_ROOTKEY_IMAGE}" +"${FUTILITY}" gbb -s --rootkey="${TMP}.to/rootkey" "${FROM_IMAGE}" + +# Hack for quirks +cp -f "${FROM_IMAGE}" "${FROM_IMAGE}.large" +truncate -s $((8388608 * 2)) "${FROM_IMAGE}.large" + +# Create GBB v1.2 images (for checking digest) +GBB_OUTPUT="$("${FUTILITY}" gbb --digest "${TO_IMAGE}")" +[ "${GBB_OUTPUT}" = "digest: " ] +TO_IMAGE_GBB12="${TO_IMAGE}.gbb12" +HWID_DIGEST="adf64d2a434b610506153da42440b0b498d7369c0e98b629ede65eb59f4784fa" +cp -f "${TO_IMAGE}" "${TO_IMAGE_GBB12}" +patch_file "${TO_IMAGE_GBB12}" GBB 6 "\x02" +"${FUTILITY}" gbb -s --hwid="${TO_HWID}" "${TO_IMAGE_GBB12}" +GBB_OUTPUT="$("${FUTILITY}" gbb --digest "${TO_IMAGE_GBB12}")" +[ "${GBB_OUTPUT}" = "digest: ${HWID_DIGEST} valid" ] + +# Generate expected results. +cp -f "${TO_IMAGE}" "${TMP}.expected.full" +cp -f "${FROM_IMAGE}" "${TMP}.expected.rw" +cp -f "${FROM_IMAGE}" "${TMP}.expected.a" +cp -f "${FROM_IMAGE}" "${TMP}.expected.b" +cp -f "${FROM_IMAGE}" "${TMP}.expected.legacy" +"${FUTILITY}" gbb -s --hwid="${FROM_HWID}" "${TMP}.expected.full" +"${FUTILITY}" load_fmap "${TMP}.expected.full" \ + RW_VPD:${TMP}.from/RW_VPD \ + RO_VPD:${TMP}.from/RO_VPD +"${FUTILITY}" load_fmap "${TMP}.expected.rw" \ + RW_SECTION_A:${TMP}.to/RW_SECTION_A \ + RW_SECTION_B:${TMP}.to/RW_SECTION_B \ + RW_SHARED:${TMP}.to/RW_SHARED \ + RW_LEGACY:${TMP}.to/RW_LEGACY +"${FUTILITY}" load_fmap "${TMP}.expected.a" \ + RW_SECTION_A:${TMP}.to/RW_SECTION_A +"${FUTILITY}" load_fmap "${TMP}.expected.b" \ + RW_SECTION_B:${TMP}.to/RW_SECTION_B +"${FUTILITY}" load_fmap "${TMP}.expected.legacy" \ + RW_LEGACY:${TMP}.to/RW_LEGACY +cp -f "${TMP}.expected.full" "${TMP}.expected.full.gbb12" +patch_file "${TMP}.expected.full.gbb12" GBB 6 "\x02" +"${FUTILITY}" gbb -s --hwid="${FROM_HWID}" "${TMP}.expected.full.gbb12" +cp -f "${TMP}.expected.full" "${TMP}.expected.full.gbb0" +"${FUTILITY}" gbb -s --flags=0 "${TMP}.expected.full.gbb0" +cp -f "${FROM_IMAGE}" "${FROM_IMAGE}.gbb0" +"${FUTILITY}" gbb -s --flags=0 "${FROM_IMAGE}.gbb0" +cp -f "${TMP}.expected.full" "${TMP}.expected.full.gbb0x27" +"${FUTILITY}" gbb -s --flags=0x27 "${TMP}.expected.full.gbb0x27" +cp -f "${TMP}.expected.full" "${TMP}.expected.large" +dd if=/dev/zero bs=8388608 count=1 | tr '\000' '\377' >>"${TMP}.expected.large" +cp -f "${TMP}.expected.full" "${TMP}.expected.me_unlocked" +patch_file "${TMP}.expected.me_unlocked" SI_DESC 128 \ + "\x00\xff\xff\xff\x00\xff\xff\xff\x00\xff\xff\xff" + +# A special set of images that only RO_VPD is preserved (RW_VPD is wiped) using +# FMAP_AREA_PRESERVE (\010=0x08). +TO_IMAGE_WIPE_RW_VPD="${TO_IMAGE}.wipe_rw_vpd" +cp -f "${TO_IMAGE}" "${TO_IMAGE_WIPE_RW_VPD}" +patch_file ${TO_IMAGE_WIPE_RW_VPD} FMAP 0x3fc "$(printf '\010')" +cp -f "${TMP}.expected.full" "${TMP}.expected.full.empty_rw_vpd" +"${FUTILITY}" load_fmap "${TMP}.expected.full.empty_rw_vpd" \ + RW_VPD:"${TMP}.to/RW_VPD" +patch_file "${TMP}.expected.full.empty_rw_vpd" FMAP 0x3fc "$(printf '\010')" + +test_update() { + local test_name="$1" + local emu_src="$2" + local expected="$3" + local error_msg="${expected#!}" + local msg + + shift 3 + cp -f "${emu_src}" "${TMP}.emu" + echo "*** Test Item: ${test_name}" + if [ "${error_msg}" != "${expected}" ] && [ -n "${error_msg}" ]; then + msg="$(! "${FUTILITY}" update --emulate "${TMP}.emu" "$@" 2>&1)" + grep -qF -- "${error_msg}" <<<"${msg}" + else + "${FUTILITY}" update --emulate "${TMP}.emu" "$@" + cmp "${TMP}.emu" "${expected}" + fi +} + +# --sys_props: mainfw_act, tpm_fwver, is_vboot2, platform_ver, [wp_hw, wp_sw] +# tpm_fwver = . +# TO_IMAGE is signed with data key version = 1, firmware version = 4 => 0x10004. + +# Test Full update. +test_update "Full update" \ + "${FROM_IMAGE}" "${TMP}.expected.full" \ + -i "${TO_IMAGE}" --wp=0 --sys_props 0,0x10001,1 + +test_update "Full update (incompatible platform)" \ + "${FROM_IMAGE}" "!platform is not compatible" \ + -i "${LINK_BIOS}" --wp=0 --sys_props 0,0x10001,1 + +test_update "Full update (TPM Anti-rollback: data key)" \ + "${FROM_IMAGE}" "!Data key version rollback detected (2->1)" \ + -i "${TO_IMAGE}" --wp=0 --sys_props 1,0x20001,1 + +test_update "Full update (TPM Anti-rollback: kernel key)" \ + "${FROM_IMAGE}" "!Firmware version rollback detected (5->4)" \ + -i "${TO_IMAGE}" --wp=0 --sys_props 1,0x10005,1 + +test_update "Full update (TPM Anti-rollback: 0 as tpm_fwver)" \ + "${FROM_IMAGE}" "${TMP}.expected.full" \ + -i "${TO_IMAGE}" --wp=0 --sys_props 0,0x0,1 + +test_update "Full update (TPM check failure due to invalid tpm_fwver)" \ + "${FROM_IMAGE}" "!Invalid tpm_fwver: -1" \ + -i "${TO_IMAGE}" --wp=0 --sys_props 0,-1,1 + +test_update "Full update (Skip TPM check with --force)" \ + "${FROM_IMAGE}" "${TMP}.expected.full" \ + -i "${TO_IMAGE}" --wp=0 --sys_props 0,-1,1 --force + +test_update "Full update (from stdin)" \ + "${FROM_IMAGE}" "${TMP}.expected.full" \ + -i - --wp=0 --sys_props 0,-1,1 --force <"${TO_IMAGE}" + +test_update "Full update (GBB=0 -> 0)" \ + "${FROM_IMAGE}.gbb0" "${TMP}.expected.full.gbb0" \ + -i "${TO_IMAGE}" --wp=0 --sys_props 0,0x10001,1 + +test_update "Full update (GBB flags -> 0x27)" \ + "${FROM_IMAGE}" "${TMP}.expected.full.gbb0x27" \ + -i "${TO_IMAGE}" --gbb_flags=0x27 --wp=0 --sys_props 0,0x10001,1 + +test_update "Full update (--host_only)" \ + "${FROM_IMAGE}" "${TMP}.expected.full" \ + -i "${TO_IMAGE}" --wp=0 --sys_props 0,0x10001,1 \ + --host_only --ec_image non-exist.bin --pd_image non_exist.bin + +test_update "Full update (GBB1.2 hwid digest)" \ + "${FROM_IMAGE}" "${TMP}.expected.full.gbb12" \ + -i "${TO_IMAGE_GBB12}" --wp=0 --sys_props 0,0x10001,1 + +test_update "Full update (Preserve VPD using FMAP_AREA_PRESERVE)" \ + "${FROM_IMAGE}" "${TMP}.expected.full.empty_rw_vpd" \ + -i "${TO_IMAGE_WIPE_RW_VPD}" --wp=0 --sys_props 0,0x10001,1 + + +# Test RW-only update. +test_update "RW update" \ + "${FROM_IMAGE}" "${TMP}.expected.rw" \ + -i "${TO_IMAGE}" --wp=1 --sys_props 0,0x10001,1 + +test_update "RW update (incompatible platform)" \ + "${FROM_IMAGE}" "!platform is not compatible" \ + -i "${LINK_BIOS}" --wp=1 --sys_props 0,0x10001,1 + +test_update "RW update (incompatible rootkey)" \ + "${FROM_DIFFERENT_ROOTKEY_IMAGE}" "!RW signed by incompatible root key" \ + -i "${TO_IMAGE}" --wp=1 --sys_props 0,0x10001,1 + +test_update "RW update (TPM Anti-rollback: data key)" \ + "${FROM_IMAGE}" "!Data key version rollback detected (2->1)" \ + -i "${TO_IMAGE}" --wp=1 --sys_props 1,0x20001,1 + +test_update "RW update (TPM Anti-rollback: kernel key)" \ + "${FROM_IMAGE}" "!Firmware version rollback detected (5->4)" \ + -i "${TO_IMAGE}" --wp=1 --sys_props 1,0x10005,1 + +# Test Try-RW update (vboot2). +test_update "RW update (A->B)" \ + "${FROM_IMAGE}" "${TMP}.expected.b" \ + -i "${TO_IMAGE}" -t --wp=1 --sys_props 0,0x10001,1 + +test_update "RW update (B->A)" \ + "${FROM_IMAGE}" "${TMP}.expected.a" \ + -i "${TO_IMAGE}" -t --wp=1 --sys_props 1,0x10001,1 + +test_update "RW update -> fallback to RO+RW Full update" \ + "${FROM_IMAGE}" "${TMP}.expected.full" \ + -i "${TO_IMAGE}" -t --wp=0 --sys_props 1,0x10002,1 +test_update "RW update (incompatible platform)" \ + "${FROM_IMAGE}" "!platform is not compatible" \ + -i "${LINK_BIOS}" -t --wp=1 --sys_props 0x10001,1 + +test_update "RW update (incompatible rootkey)" \ + "${FROM_DIFFERENT_ROOTKEY_IMAGE}" "!RW signed by incompatible root key" \ + -i "${TO_IMAGE}" -t --wp=1 --sys_props 0,0x10001,1 + +test_update "RW update (TPM Anti-rollback: data key)" \ + "${FROM_IMAGE}" "!Data key version rollback detected (2->1)" \ + -i "${TO_IMAGE}" -t --wp=1 --sys_props 1,0x20001,1 + +test_update "RW update (TPM Anti-rollback: kernel key)" \ + "${FROM_IMAGE}" "!Firmware version rollback detected (5->4)" \ + -i "${TO_IMAGE}" -t --wp=1 --sys_props 1,0x10005,1 + +test_update "RW update -> fallback to RO+RW Full update (TPM Anti-rollback)" \ + "${FROM_IMAGE}" "!Firmware version rollback detected (6->4)" \ + -i "${TO_IMAGE}" -t --wp=0 --sys_props 1,0x10006,1 + +# Test Try-RW update (vboot1). +test_update "RW update (vboot1, A->B)" \ + "${FROM_IMAGE}" "${TMP}.expected.b" \ + -i "${TO_IMAGE}" -t --wp=1 --sys_props 0,0 --sys_props 0,0x10001,0 + +test_update "RW update (vboot1, B->B)" \ + "${FROM_IMAGE}" "${TMP}.expected.b" \ + -i "${TO_IMAGE}" -t --wp=1 --sys_props 1,0 --sys_props 0,0x10001,0 + +# Test 'factory mode' +test_update "Factory mode update (WP=0)" \ + "${FROM_IMAGE}" "${TMP}.expected.full" \ + -i "${TO_IMAGE}" --wp=0 --sys_props 0,0x10001,1 --mode=factory + +test_update "Factory mode update (WP=0)" \ + "${FROM_IMAGE}" "${TMP}.expected.full" \ + --factory -i "${TO_IMAGE}" --wp=0 --sys_props 0,0x10001,1 + +test_update "Factory mode update (WP=1)" \ + "${FROM_IMAGE}" "!remove write protection for factory mode" \ + -i "${TO_IMAGE}" --wp=1 --sys_props 0,0x10001,1 --mode=factory + +test_update "Factory mode update (WP=1)" \ + "${FROM_IMAGE}" "!remove write protection for factory mode" \ + --factory -i "${TO_IMAGE}" --wp=1 --sys_props 0,0x10001,1 + +test_update "Factory mode update (GBB=0 -> 0x39)" \ + "${FROM_IMAGE}.gbb0" "${TMP}.expected.full" \ + --factory -i "${TO_IMAGE}" --wp=0 --sys_props 0,0x10001,1 + +# Test legacy update +test_update "Legacy update" \ + "${FROM_IMAGE}" "${TMP}.expected.legacy" \ + -i "${TO_IMAGE}" --mode=legacy + +# Test quirks +test_update "Full update (wrong size)" \ + "${FROM_IMAGE}.large" "!Image size is different" \ + -i "${TO_IMAGE}" --wp=0 --sys_props 0,0x10001,1 \ + --quirks unlock_me_for_update,eve_smm_store + +test_update "Full update (--quirks enlarge_image)" \ + "${FROM_IMAGE}.large" "${TMP}.expected.large" --quirks enlarge_image \ + -i "${TO_IMAGE}" --wp=0 --sys_props 0,0x10001,1 + +test_update "Full update (multi-line --quirks enlarge_image)" \ + "${FROM_IMAGE}.large" "${TMP}.expected.large" --quirks ' + enlarge_image + ' -i "${TO_IMAGE}" --wp=0 --sys_props 0,0x10001,1 + +test_update "Full update (--quirks unlock_me_for_update)" \ + "${FROM_IMAGE}" "${TMP}.expected.me_unlocked" \ + --quirks unlock_me_for_update \ + -i "${TO_IMAGE}" --wp=0 --sys_props 0,0x10001,1 + +test_update "Full update (failure by --quirks min_platform_version)" \ + "${FROM_IMAGE}" "!Need platform version >= 3 (current is 2)" \ + --quirks min_platform_version=3 \ + -i "${TO_IMAGE}" --wp=0 --sys_props 0,0x10001,1,2 + +test_update "Full update (--quirks min_platform_version)" \ + "${FROM_IMAGE}" "${TMP}.expected.full" \ + --quirks min_platform_version=3 \ + -i "${TO_IMAGE}" --wp=0 --sys_props 0,0x10001,1,3 + +test_update "Full update (incompatible platform)" \ + "${FROM_IMAGE}".unpatched "!platform is not compatible" \ + -i "${TO_IMAGE}" --wp=0 --sys_props 0,0x10001,1 + +test_update "Full update (--quirks no_check_platform)" \ + "${FROM_IMAGE}".unpatched "${TMP}.expected.full" \ + --quirks no_check_platform \ + -i "${TO_IMAGE}" --wp=0 --sys_props 0,0x10001,1 + +# Test archive and manifest. +A="${TMP}.archive" +mkdir -p "${A}/bin" +echo 'echo "${WL_TAG}"' >"${A}/bin/vpd" +chmod +x "${A}/bin/vpd" + +cp -f "${LINK_BIOS}" "${A}/bios.bin" +echo "TEST: Manifest (--manifest, bios.bin)" +${FUTILITY} update -a "${A}" --manifest >"${TMP}.json.out" +cmp "${TMP}.json.out" "${SCRIPT_DIR}/futility/link_bios.manifest.json" + +mv -f "${A}/bios.bin" "${A}/image.bin" +echo "TEST: Manifest (--manifest, image.bin)" +${FUTILITY} update -a "${A}" --manifest >"${TMP}.json.out" +cmp "${TMP}.json.out" "${SCRIPT_DIR}/futility/link_image.manifest.json" + + +cp -f "${TO_IMAGE}" "${A}/image.bin" +test_update "Full update (--archive, single package)" \ + "${FROM_IMAGE}" "${TMP}.expected.full" \ + -a "${A}" --wp=0 --sys_props 0,0x10001,1,3 + +echo "TEST: Output (--mode=output)" +mkdir -p "${TMP}.output" +${FUTILITY} update -i "${LINK_BIOS}" --mode=output --output_dir="${TMP}.output" +cmp "${LINK_BIOS}" "${TMP}.output/image.bin" + +mkdir -p "${A}/keyset" +cp -f "${LINK_BIOS}" "${A}/image.bin" +cp -f "${TMP}.to/rootkey" "${A}/keyset/rootkey.WL" +cp -f "${TMP}.to/VBLOCK_A" "${A}/keyset/vblock_A.WL" +cp -f "${TMP}.to/VBLOCK_B" "${A}/keyset/vblock_B.WL" +${FUTILITY} gbb -s --rootkey="${TMP}.from/rootkey" "${A}/image.bin" +${FUTILITY} load_fmap "${A}/image.bin" VBLOCK_A:"${TMP}.from/VBLOCK_A" +${FUTILITY} load_fmap "${A}/image.bin" VBLOCK_B:"${TMP}.from/VBLOCK_B" + +test_update "Full update (--archive, whitelabel, no VPD)" \ + "${A}/image.bin" "!Need VPD set for white" \ + -a "${A}" --wp=0 --sys_props 0,0x10001,1,3 + +test_update "Full update (--archive, whitelabel, no VPD - factory mode)" \ + "${LINK_BIOS}" "${A}/image.bin" \ + -a "${A}" --wp=0 --sys_props 0,0x10001,1,3 --mode=factory + +test_update "Full update (--archive, whitelabel, no VPD - quirk mode)" \ + "${LINK_BIOS}" "${A}/image.bin" \ + -a "${A}" --wp=0 --sys_props 0,0x10001,1,3 --quirks=allow_empty_wltag + +test_update "Full update (--archive, WL, single package)" \ + "${A}/image.bin" "${LINK_BIOS}" \ + -a "${A}" --wp=0 --sys_props 0,0x10001,1,3 --signature_id=WL + +WL_TAG="WL" PATH="${A}/bin:${PATH}" \ + test_update "Full update (--archive, WL, fake vpd)" \ + "${A}/image.bin" "${LINK_BIOS}" \ + -a "${A}" --wp=0 --sys_props 0,0x10001,1,3 + +echo "TEST: Output (-a, --mode=output)" +mkdir -p "${TMP}.outa" +cp -f "${A}/image.bin" "${TMP}.emu" +WL_TAG="WL" PATH="${A}/bin:${PATH}" \ + ${FUTILITY} update -a "${A}" --mode=output --emu="${TMP}.emu" \ + --output_dir="${TMP}.outa" +cmp "${LINK_BIOS}" "${TMP}.outa/image.bin" + +# Test archive with Unified Build contents. +cp -r "${SCRIPT_DIR}/futility/models" "${A}/" +mkdir -p "${A}/images" +mv "${A}/image.bin" "${A}/images/bios_coral.bin" +cp -f "${PEPPY_BIOS}" "${A}/images/bios_peppy.bin" +cp -f "${LINK_BIOS}" "${A}/images/bios_link.bin" +cp -f "${TMP}.to/rootkey" "${A}/keyset/rootkey.whitetip-wl" +cp -f "${TMP}.to/VBLOCK_A" "${A}/keyset/vblock_A.whitetip-wl" +cp -f "${TMP}.to/VBLOCK_B" "${A}/keyset/vblock_B.whitetip-wl" +cp -f "${PEPPY_BIOS}" "${FROM_IMAGE}.ap" +cp -f "${LINK_BIOS}" "${FROM_IMAGE}.al" +patch_file ${FROM_IMAGE}.ap FW_MAIN_A 0 "corrupted" +patch_file ${FROM_IMAGE}.al FW_MAIN_A 0 "corrupted" +test_update "Full update (--archive, model=link)" \ + "${FROM_IMAGE}.al" "${LINK_BIOS}" \ + -a "${A}" --wp=0 --sys_props 0,0x10001,1,3 --model=link +test_update "Full update (--archive, model=peppy)" \ + "${FROM_IMAGE}.ap" "${PEPPY_BIOS}" \ + -a "${A}" --wp=0 --sys_props 0,0x10001,1,3 --model=peppy +test_update "Full update (--archive, model=unknown)" \ + "${FROM_IMAGE}.ap" "!Unsupported model: 'unknown'" \ + -a "${A}" --wp=0 --sys_props 0,0x10001,1,3 --model=unknown +test_update "Full update (--archive, model=whitetip, signature_id=WL)" \ + "${FROM_IMAGE}.al" "${LINK_BIOS}" \ + -a "${A}" --wp=0 --sys_props 0,0x10001,1,3 --model=whitetip \ + --signature_id=whitetip-wl + +WL_TAG="wl" PATH="${A}/bin:${PATH}" \ + test_update "Full update (-a, model=WL, fake VPD)" \ + "${FROM_IMAGE}.al" "${LINK_BIOS}" \ + -a "${A}" --wp=0 --sys_props 0,0x10001,1,3 --model=whitetip + +# WL-Unibuild without default keys +test_update "Full update (--a, model=WL, no VPD, no default keys)" \ + "${FROM_IMAGE}.al" "!Need VPD set for white" \ + -a "${A}" --wp=0 --sys_props 0,0x10001,1,3 --model=whitetip + +# WL-Unibuild with default keys as model name +cp -f "${TMP}.to/rootkey" "${A}/keyset/rootkey.whitetip" +cp -f "${TMP}.to/VBLOCK_A" "${A}/keyset/vblock_A.whitetip" +cp -f "${TMP}.to/VBLOCK_B" "${A}/keyset/vblock_B.whitetip" +test_update "Full update (-a, model=WL, no VPD, default keys)" \ + "${FROM_IMAGE}.al" "${LINK_BIOS}" \ + -a "${A}" --wp=0 --sys_props 0,0x10001,1,3 --model=whitetip + +# Test special programmer +if type flashrom >/dev/null 2>&1; then + echo "TEST: Full update (dummy programmer)" + cp -f "${FROM_IMAGE}" "${TMP}.emu" + sudo "${FUTILITY}" update --programmer \ + dummy:emulate=VARIABLE_SIZE,image=${TMP}.emu,size=8388608 \ + -i "${TO_IMAGE}" --wp=0 --sys_props 0,0x10001,1,3 >&2 + cmp "${TMP}.emu" "${TMP}.expected.full" +fi + +if type cbfstool >/dev/null 2>&1; then + echo "SMM STORE" >"${TMP}.smm" + truncate -s 262144 "${TMP}.smm" + cp -f "${FROM_IMAGE}" "${TMP}.from.smm" + cp -f "${TMP}.expected.full" "${TMP}.expected.full_smm" + cbfstool "${TMP}.from.smm" add -r RW_LEGACY -n "smm_store" \ + -f "${TMP}.smm" -t raw + cbfstool "${TMP}.expected.full_smm" add -r RW_LEGACY -n "smm_store" \ + -f "${TMP}.smm" -t raw -b 0x1bf000 + test_update "Legacy update (--quirks eve_smm_store)" \ + "${TMP}.from.smm" "${TMP}.expected.full_smm" \ + -i "${TO_IMAGE}" --wp=0 --sys_props 0,0x10001,1 \ + --quirks eve_smm_store + + echo "min_platform_version=3" >"${TMP}.quirk" + cp -f "${TO_IMAGE}" "${TO_IMAGE}.quirk" + ${FUTILITY} dump_fmap -x "${TO_IMAGE}" "BOOT_STUB:${TMP}.cbfs" + # Create a fake CBFS using FW_MAIN_A size. + truncate -s $((0x000dffc0)) "${TMP}.cbfs" + ${FUTILITY} load_fmap "${TO_IMAGE}.quirk" "FW_MAIN_A:${TMP}.cbfs" + cbfstool "${TO_IMAGE}.quirk" add -r FW_MAIN_A -n updater_quirks \ + -f "${TMP}.quirk" -t raw + test_update "Full update (failure by CBFS quirks)" \ + "${FROM_IMAGE}" "!Need platform version >= 3 (current is 2)" \ + -i "${TO_IMAGE}.quirk" --wp=0 --sys_props 0,0x10001,1,2 +fi diff --git a/tests/gen_fuzz_test_cases.sh b/tests/gen_fuzz_test_cases.sh new file mode 100755 index 0000000..2b4255d --- /dev/null +++ b/tests/gen_fuzz_test_cases.sh @@ -0,0 +1,86 @@ +#!/bin/bash + +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Generate test cases for use for the RSA verify benchmark. + +set -e + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +# Use a different directory for fuzzing test cases. +TESTKEY_DIR=${TESTKEY_DIR:-$(realpath ${SCRIPT_DIR}/../tests/testkeys)} +TESTCASE_DIR=${BUILD_DIR}/fuzz_testcases +TEST_IMAGE_FILE=${TESTCASE_DIR}/testimage +TEST_IMAGE_SIZE=500000 +TEST_BOOTLOADER_FILE=${TESTCASE_DIR}/testbootloader +TEST_BOOTLOADER_SIZE=50000 +TEST_CONFIG_FILE=${TESTCASE_DIR}/testconfig +# Config size must < 4096 +TEST_CONFIG_SIZE=3000 + +function generate_fuzzing_images { + echo "Generating keyblocks..." + # Firmware keyblock - RSA8192/SHA512 root key, RSA4096/SHA512 firmware + # signing key. + ${FUTILITY} vbutil_keyblock \ + --pack ${TESTCASE_DIR}/firmware.keyblock \ + --datapubkey ${TESTKEY_DIR}/key_rsa4096.sha512.vbpubk \ + --signprivate ${TESTKEY_DIR}/key_rsa8192.sha1.vbprivk + + # Kernel keyblock - RSA4096/SHA512 kernel signing subkey, RSA4096/SHA512 + # kernel signing key. + ${FUTILITY} vbutil_keyblock \ + --pack ${TESTCASE_DIR}/kernel.keyblock \ + --datapubkey ${TESTKEY_DIR}/key_rsa4096.sha512.vbpubk \ + --signprivate ${TESTKEY_DIR}/key_rsa4096.sha1.vbprivk \ + --flags 15 + + echo "Generating signed firmware test image..." + ${FUTILITY} vbutil_firmware \ + --vblock ${TESTCASE_DIR}/firmware.vblock \ + --keyblock ${TESTCASE_DIR}/firmware.keyblock\ + --signprivate ${TESTKEY_DIR}/key_rsa4096.sha256.vbprivk \ + --version 1 \ + --fv $1 \ + --kernelkey ${TESTKEY_DIR}/key_rsa4096.sha512.vbpubk + # TODO(gauravsh): ALso test with (optional) flags. + cp ${TESTKEY_DIR}/key_rsa8192.sha512.vbpubk ${TESTCASE_DIR}/root_key.vbpubk + + echo "Generating signed kernel test image..." + ${FUTILITY} vbutil_kernel \ + --pack ${TESTCASE_DIR}/kernel.vblock.image \ + --keyblock ${TESTCASE_DIR}/kernel.keyblock \ + --signprivate ${TESTKEY_DIR}/key_rsa4096.sha256.vbprivk \ + --version 1 \ + --vmlinuz ${TEST_IMAGE_FILE} \ + --bootloader ${TEST_BOOTLOADER_FILE} \ + --config ${TEST_CONFIG_FILE} + # TODO(gauravsh): Also test with (optional) padding. + cp ${TESTKEY_DIR}/key_rsa4096.sha512.vbpubk \ + ${TESTCASE_DIR}/firmware_key.vbpubk +} + +function pre_work { + # Generate a file to serve as random bytes for firmware/kernel contents. + # NOTE: The kernel and config file can't really be random, but the bootloader + # can. That's probably close enough. + echo "Generating test image file..." + dd if=/dev/urandom of=${TEST_IMAGE_FILE} bs=${TEST_IMAGE_SIZE} count=1 + echo "Generating test bootloader file..." + # TODO(gauravsh): Use a valid bootloader here? + dd if=/dev/urandom of=${TEST_BOOTLOADER_FILE} bs=${TEST_BOOTLOADER_SIZE} \ + count=1 + echo "Generating test config file..." + # TODO(gauravsh): Use a valid config file here? + dd if=/dev/urandom of=${TEST_CONFIG_FILE} bs=${TEST_CONFIG_SIZE} count=1 +} + +mkdir -p ${TESTCASE_DIR} +pre_work +check_test_keys +generate_fuzzing_images ${TEST_IMAGE_FILE} + diff --git a/tests/gen_preamble_testdata.sh b/tests/gen_preamble_testdata.sh new file mode 100755 index 0000000..607e05a --- /dev/null +++ b/tests/gen_preamble_testdata.sh @@ -0,0 +1,84 @@ +#!/bin/bash -eu +# +# Copyright (c) 2012 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# This generates the pre-change test data used to ensure that +# modifications to vb2_fw_preamble and vb2_kernel_preamble will not +# break the signing tools for older releases. This was run *before* +# any modifications, so be sure to revert the repo back to the correct +# point if you need to run it again. + + +# Load common constants and variables for tests. +. "$(dirname "$0")/common.sh" + +# Load routines to generate keypairs +. "${ROOT_DIR}/scripts/keygeneration/common.sh" + +# all algs +algs="0 1 2 3 4 5 6 7 8 9 10 11" + +# output directories +PREAMBLE_DIR="${SCRIPT_DIR}/preamble_tests" +DATADIR="${PREAMBLE_DIR}/data" +V2DIR="${PREAMBLE_DIR}/preamble_v2x" + +for d in "${PREAMBLE_DIR}" "${DATADIR}" "${V2DIR}"; do + [ -d "$d" ] || mkdir -p "$d" +done + + +# generate a bunch of data keys +for d in $algs; do + make_pair "${DATADIR}/data_$d" "$d" +done + +# generate a bunch of root keys +for r in $algs; do + make_pair "${DATADIR}/root_$r" "$r" +done + +# generate keyblocks using all possible combinations +for d in $algs; do + for r in $algs; do + make_keyblock "${DATADIR}/kb_${d}_${r}" 15 \ + "${DATADIR}/data_$d" "${DATADIR}/root_$r" + done +done + +# make a dummy kernel key because we have to have one (crosbug.com/27142) +make_pair "${DATADIR}/dummy_0" 0 + +# and a few more dummy files just because (crosbug.com/23548) +echo "hi there" > "${DATADIR}/dummy_config.txt" +dd if=/dev/urandom bs=32768 count=1 of="${DATADIR}/dummy_bootloader.bin" + +# make some fake data +dd if=/dev/urandom of="${DATADIR}/FWDATA" bs=32768 count=1 +dd if=/dev/urandom of="${DATADIR}/KERNDATA" bs=32768 count=1 + + +# Now sign the firmware and kernel data in all the possible ways using the +# pre-change tools. +for d in $algs; do + for r in $algs; do + vbutil_firmware --vblock "${V2DIR}/fw_${d}_${r}.vblock" \ + --keyblock "${DATADIR}/kb_${d}_${r}.keyblock" \ + --signprivate "${DATADIR}/data_${d}.vbprivk" \ + --version 1 \ + --kernelkey "${DATADIR}/dummy_0.vbpubk" \ + --fv "${DATADIR}/FWDATA" + vbutil_kernel --pack "${V2DIR}/kern_${d}_${r}.vblock" \ + --keyblock "${DATADIR}/kb_${d}_${r}.keyblock" \ + --signprivate "${DATADIR}/data_${d}.vbprivk" \ + --version 1 \ + --arch arm \ + --vmlinuz "${DATADIR}/KERNDATA" \ + --bootloader "${DATADIR}/dummy_bootloader.bin" \ + --config "${DATADIR}/dummy_config.txt" + done +done + + diff --git a/tests/gen_test_cases.sh b/tests/gen_test_cases.sh new file mode 100755 index 0000000..540fc2a --- /dev/null +++ b/tests/gen_test_cases.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Generate test cases for use for the RSA verify benchmark. + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +TEST_FILE=${TESTCASE_DIR}/test_file +TEST_FILE_SIZE=1000000 + +# Generate public key signatures on an input file for various combinations +# of message digest algorithms and RSA key sizes. +function generate_test_signatures { + echo "Generating test signatures..." + algorithmcounter=0 + for keylen in ${key_lengths[@]} + do + for hashalgo in ${hash_algos[@]} + do + openssl dgst -${hashalgo} -binary ${TEST_FILE} > \ + ${TEST_FILE}.${hashalgo}.digest + ${BIN_DIR}/signature_digest_utility $algorithmcounter \ + ${TEST_FILE} | openssl rsautl \ + -sign -pkcs -inkey ${TESTKEY_DIR}/key_rsa${keylen}.pem \ + > ${TEST_FILE}.rsa${keylen}_${hashalgo}.sig + let algorithmcounter=algorithmcounter+1 + done + done +} + +# Generate a file with random bytes for signature tests. +function generate_test_file { + echo "Generating test file..." + if [ -f "${TEST_FILE}" ]; then + echo "(skipping, file already exists)" + return + fi + dd if=/dev/urandom of=${TEST_FILE} bs=${TEST_FILE_SIZE} count=1 +} + +mkdir -p ${TESTCASE_DIR} +check_test_keys +generate_test_file +generate_test_signatures diff --git a/tests/gen_test_keys.sh b/tests/gen_test_keys.sh new file mode 100755 index 0000000..04315ac --- /dev/null +++ b/tests/gen_test_keys.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# Generate test keys for use by the tests. + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +set -e + +sha_types=( 1 256 512 ) + +# Generate RSA test keys of various lengths. +function generate_keys { + key_index=0 + key_name_base="${TESTKEY_DIR}/key_rsa" + for i in ${key_lengths[@]} + do + key_base="${key_name_base}${i}" + if [ -f "${key_base}.keyb" ]; then + key_index=$((${key_index} + 1)) + continue + fi + + # Extract exponent from key_length name, if necessary + exp="F4" + bits=$i + if [ "${i##*_exp}" != "${i}" ]; then + exp="${i##*_exp}" + bits="${i%%_exp${exp}}" + fi + + openssl genrsa -${exp} -out ${key_base}.pem ${bits} + # Generate self-signed certificate from key. + openssl req -batch -new -x509 -key ${key_base}.pem \ + -out ${key_base}.crt + + # Generate pre-processed key for use by RSA signature verification code. + ${BIN_DIR}/dumpRSAPublicKey -cert ${key_base}.crt \ + > ${key_base}.keyb + + alg_index=0 + for sha_type in ${sha_types[@]} + do + alg=$((${key_index} * 3 + ${alg_index})) + # wrap the public key + ${FUTILITY} vbutil_key \ + --pack "${key_base}.sha${sha_type}.vbpubk" \ + --key "${key_base}.keyb" \ + --version 1 \ + --algorithm ${alg} + + # wrap the private key + ${FUTILITY} vbutil_key \ + --pack "${key_base}.sha${sha_type}.vbprivk" \ + --key "${key_base}.pem" \ + --algorithm ${alg} + alg_index=$((${alg_index} + 1)) + done + key_index=$((${key_index} + 1)) + done +} + +mkdir -p ${TESTKEY_DIR} +generate_keys diff --git a/tests/gen_test_vbpubks.sh b/tests/gen_test_vbpubks.sh new file mode 100755 index 0000000..8ea2759 --- /dev/null +++ b/tests/gen_test_vbpubks.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# Generate test vboot public keys and keyblocks for testing. + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +function generate_vpubks { + algorithmcounter=0 + for keylen in ${key_lengths[@]} + do + for hashalgo in ${hash_algos[@]} + do + ${FUTILITY} vbutil_key --pack \ + --in ${TESTKEY_DIR}/key_rsa${keylen}.keyb \ + --out ${TESTKEY_DIR}/key_rsa${keylen}.${hashalgo}.vbpubk \ + --version 1 \ + --algorithm ${algorithmcounter} + let algorithmcounter=algorithmcounter+1 + done + done +} + +check_test_keys +generate_vpubks diff --git a/tests/gpt_misc_tests.c b/tests/gpt_misc_tests.c new file mode 100644 index 0000000..e0a8d56 --- /dev/null +++ b/tests/gpt_misc_tests.c @@ -0,0 +1,378 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for vboot_kernel.c + */ + +#include "2api.h" +#include "cgptlib.h" +#include "cgptlib_internal.h" +#include "gpt.h" +#include "test_common.h" + +#define LOGCALL(fmt, args...) sprintf(call_log + strlen(call_log), fmt, ##args) +#define TEST_CALLS(expect_log) TEST_STR_EQ(call_log, expect_log, " calls") + +/* Assumes 512-byte disk sectors */ +#define MOCK_SECTOR_SIZE 512 +#define MOCK_SECTOR_COUNT 1024 + +/* Mock kernel partition */ +struct mock_part { + uint32_t start; + uint32_t size; +}; + +/* Mock data */ +static char call_log[4096]; +static int disk_read_to_fail; +static int disk_write_to_fail; + +static VbExDiskHandle_t handle; +static uint8_t mock_disk[MOCK_SECTOR_SIZE * MOCK_SECTOR_COUNT]; +static GptHeader *mock_gpt_primary = + (GptHeader*)&mock_disk[MOCK_SECTOR_SIZE * 1]; +static GptHeader *mock_gpt_secondary = + (GptHeader*)&mock_disk[MOCK_SECTOR_SIZE * (MOCK_SECTOR_COUNT - 1)]; + +/** + * Prepare a valid GPT header that will pass CheckHeader() tests + */ +static void SetupGptHeader(GptHeader *h, int is_secondary) +{ + memset(h, '\0', MOCK_SECTOR_SIZE); + + /* "EFI PART" */ + memcpy(h->signature, GPT_HEADER_SIGNATURE, GPT_HEADER_SIGNATURE_SIZE); + h->revision = GPT_HEADER_REVISION; + h->size = MIN_SIZE_OF_HEADER; + + /* 16KB: 128 entries of 128 bytes */ + h->size_of_entry = sizeof(GptEntry); + h->number_of_entries = MAX_NUMBER_OF_ENTRIES; + + /* Set LBA pointers for primary or secondary header */ + if (is_secondary) { + h->my_lba = MOCK_SECTOR_COUNT - GPT_HEADER_SECTORS; + h->entries_lba = h->my_lba - CalculateEntriesSectors(h, + MOCK_SECTOR_SIZE); + } else { + h->my_lba = GPT_PMBR_SECTORS; + h->entries_lba = h->my_lba + 1; + } + + h->first_usable_lba = 2 + CalculateEntriesSectors(h, MOCK_SECTOR_SIZE); + h->last_usable_lba = MOCK_SECTOR_COUNT - 2 - CalculateEntriesSectors(h, + MOCK_SECTOR_SIZE); + + h->header_crc32 = HeaderCrc(h); +} + +static void ResetCallLog(void) +{ + *call_log = 0; +} + +/** + * Reset mock data (for use before each test) + */ +static void ResetMocks(void) +{ + ResetCallLog(); + + memset(&mock_disk, 0, sizeof(mock_disk)); + SetupGptHeader(mock_gpt_primary, 0); + SetupGptHeader(mock_gpt_secondary, 1); + + disk_read_to_fail = -1; + disk_write_to_fail = -1; +} + +/* Mocks */ + +vb2_error_t VbExDiskRead(VbExDiskHandle_t h, uint64_t lba_start, + uint64_t lba_count, void *buffer) +{ + LOGCALL("VbExDiskRead(h, %d, %d)\n", (int)lba_start, (int)lba_count); + + if ((int)lba_start == disk_read_to_fail) + return VB2_ERROR_MOCK; + + memcpy(buffer, &mock_disk[lba_start * MOCK_SECTOR_SIZE], + lba_count * MOCK_SECTOR_SIZE); + + return VB2_SUCCESS; +} + +vb2_error_t VbExDiskWrite(VbExDiskHandle_t h, uint64_t lba_start, + uint64_t lba_count, const void *buffer) +{ + LOGCALL("VbExDiskWrite(h, %d, %d)\n", (int)lba_start, (int)lba_count); + + if ((int)lba_start == disk_write_to_fail) + return VB2_ERROR_MOCK; + + memcpy(&mock_disk[lba_start * MOCK_SECTOR_SIZE], buffer, + lba_count * MOCK_SECTOR_SIZE); + + return VB2_SUCCESS; +} + +/** + * Test reading/writing GPT + */ +static void ReadWriteGptTest(void) +{ + GptData g; + GptHeader *h; + + g.sector_bytes = MOCK_SECTOR_SIZE; + g.streaming_drive_sectors = g.gpt_drive_sectors = MOCK_SECTOR_COUNT; + g.valid_headers = g.valid_entries = MASK_BOTH; + + ResetMocks(); + TEST_EQ(AllocAndReadGptData(handle, &g), 0, "AllocAndRead"); + TEST_CALLS("VbExDiskRead(h, 1, 1)\n" + "VbExDiskRead(h, 2, 32)\n" + "VbExDiskRead(h, 1023, 1)\n" + "VbExDiskRead(h, 991, 32)\n"); + ResetCallLog(); + /* + * Valgrind complains about access to uninitialized memory here, so + * zero the primary header before each test. + */ + memset(g.primary_header, '\0', g.sector_bytes); + TEST_EQ(WriteAndFreeGptData(handle, &g), 0, "WriteAndFree"); + TEST_CALLS(""); + + /* + * Invalidate primary GPT header, + * check that AllocAndReadGptData still succeeds + */ + ResetMocks(); + memset(mock_gpt_primary, '\0', sizeof(*mock_gpt_primary)); + TEST_EQ(AllocAndReadGptData(handle, &g), 0, + "AllocAndRead primary invalid"); + TEST_EQ(CheckHeader(mock_gpt_primary, 0, g.streaming_drive_sectors, + g.gpt_drive_sectors, 0, g.sector_bytes), + 1, "Primary header is invalid"); + TEST_EQ(CheckHeader(mock_gpt_secondary, 1, g.streaming_drive_sectors, + g.gpt_drive_sectors, 0, g.sector_bytes), + 0, "Secondary header is valid"); + TEST_CALLS("VbExDiskRead(h, 1, 1)\n" + "VbExDiskRead(h, 1023, 1)\n" + "VbExDiskRead(h, 991, 32)\n"); + WriteAndFreeGptData(handle, &g); + + /* + * Invalidate secondary GPT header, + * check that AllocAndReadGptData still succeeds + */ + ResetMocks(); + memset(mock_gpt_secondary, '\0', sizeof(*mock_gpt_secondary)); + TEST_EQ(AllocAndReadGptData(handle, &g), 0, + "AllocAndRead secondary invalid"); + TEST_EQ(CheckHeader(mock_gpt_primary, 0, g.streaming_drive_sectors, + g.gpt_drive_sectors, 0, g.sector_bytes), + 0, "Primary header is valid"); + TEST_EQ(CheckHeader(mock_gpt_secondary, 1, g.streaming_drive_sectors, + g.gpt_drive_sectors, 0, g.sector_bytes), + 1, "Secondary header is invalid"); + TEST_CALLS("VbExDiskRead(h, 1, 1)\n" + "VbExDiskRead(h, 2, 32)\n" + "VbExDiskRead(h, 1023, 1)\n"); + WriteAndFreeGptData(handle, &g); + + /* + * Invalidate primary AND secondary GPT header, + * check that AllocAndReadGptData fails. + */ + ResetMocks(); + memset(mock_gpt_primary, '\0', sizeof(*mock_gpt_primary)); + memset(mock_gpt_secondary, '\0', sizeof(*mock_gpt_secondary)); + TEST_EQ(AllocAndReadGptData(handle, &g), 1, + "AllocAndRead primary and secondary invalid"); + TEST_EQ(CheckHeader(mock_gpt_primary, 0, g.streaming_drive_sectors, + g.gpt_drive_sectors, 0, g.sector_bytes), + 1, "Primary header is invalid"); + TEST_EQ(CheckHeader(mock_gpt_secondary, 1, g.streaming_drive_sectors, + g.gpt_drive_sectors, 0, g.sector_bytes), + 1, "Secondary header is invalid"); + TEST_CALLS("VbExDiskRead(h, 1, 1)\n" + "VbExDiskRead(h, 1023, 1)\n"); + WriteAndFreeGptData(handle, &g); + + /* + * Invalidate primary GPT header and check that it is + * repaired by GptRepair(). + * + * This would normally be called by LoadKernel()->GptInit() + * but this callback is mocked in these tests. + */ + ResetMocks(); + memset(mock_gpt_primary, '\0', sizeof(*mock_gpt_primary)); + TEST_EQ(AllocAndReadGptData(handle, &g), 0, + "Fix Primary GPT: AllocAndRead"); + /* Call GptRepair() with input indicating secondary GPT is valid */ + g.valid_headers = g.valid_entries = MASK_SECONDARY; + GptRepair(&g); + TEST_EQ(WriteAndFreeGptData(handle, &g), 0, + "Fix Primary GPT: WriteAndFreeGptData"); + TEST_CALLS("VbExDiskRead(h, 1, 1)\n" + "VbExDiskRead(h, 1023, 1)\n" + "VbExDiskRead(h, 991, 32)\n" + "VbExDiskWrite(h, 1, 1)\n" + "VbExDiskWrite(h, 2, 32)\n"); + TEST_EQ(CheckHeader(mock_gpt_primary, 0, g.streaming_drive_sectors, + g.gpt_drive_sectors, 0, g.sector_bytes), + 0, "Fix Primary GPT: Primary header is valid"); + + /* + * Invalidate secondary GPT header and check that it can be + * repaired by GptRepair(). + * + * This would normally be called by LoadKernel()->GptInit() + * but this callback is mocked in these tests. + */ + ResetMocks(); + memset(mock_gpt_secondary, '\0', sizeof(*mock_gpt_secondary)); + TEST_EQ(AllocAndReadGptData(handle, &g), 0, + "Fix Secondary GPT: AllocAndRead"); + /* Call GptRepair() with input indicating primary GPT is valid */ + g.valid_headers = g.valid_entries = MASK_PRIMARY; + GptRepair(&g); + TEST_EQ(WriteAndFreeGptData(handle, &g), 0, + "Fix Secondary GPT: WriteAndFreeGptData"); + TEST_CALLS("VbExDiskRead(h, 1, 1)\n" + "VbExDiskRead(h, 2, 32)\n" + "VbExDiskRead(h, 1023, 1)\n" + "VbExDiskWrite(h, 1023, 1)\n" + "VbExDiskWrite(h, 991, 32)\n"); + TEST_EQ(CheckHeader(mock_gpt_secondary, 1, g.streaming_drive_sectors, + g.gpt_drive_sectors, 0, g.sector_bytes), + 0, "Fix Secondary GPT: Secondary header is valid"); + + /* Data which is changed is written */ + ResetMocks(); + AllocAndReadGptData(handle, &g); + g.modified |= GPT_MODIFIED_HEADER1 | GPT_MODIFIED_ENTRIES1; + ResetCallLog(); + memset(g.primary_header, '\0', g.sector_bytes); + h = (GptHeader*)g.primary_header; + h->entries_lba = 2; + h->number_of_entries = MAX_NUMBER_OF_ENTRIES; + h->size_of_entry = sizeof(GptEntry); + TEST_EQ(WriteAndFreeGptData(handle, &g), 0, "WriteAndFree mod 1"); + TEST_CALLS("VbExDiskWrite(h, 1, 1)\n" + "VbExDiskWrite(h, 2, 32)\n"); + + /* Data which is changed is written */ + ResetMocks(); + AllocAndReadGptData(handle, &g); + g.modified = -1; + ResetCallLog(); + memset(g.primary_header, '\0', g.sector_bytes); + h = (GptHeader*)g.primary_header; + h->entries_lba = 2; + h->number_of_entries = MAX_NUMBER_OF_ENTRIES; + h->size_of_entry = sizeof(GptEntry); + h = (GptHeader*)g.secondary_header; + h->entries_lba = 991; + TEST_EQ(WriteAndFreeGptData(handle, &g), 0, "WriteAndFree mod all"); + TEST_CALLS("VbExDiskWrite(h, 1, 1)\n" + "VbExDiskWrite(h, 2, 32)\n" + "VbExDiskWrite(h, 1023, 1)\n" + "VbExDiskWrite(h, 991, 32)\n"); + + /* If legacy signature, don't modify GPT header/entries 1 */ + ResetMocks(); + AllocAndReadGptData(handle, &g); + h = (GptHeader *)g.primary_header; + memcpy(h->signature, GPT_HEADER_SIGNATURE2, GPT_HEADER_SIGNATURE_SIZE); + g.modified = -1; + ResetCallLog(); + TEST_EQ(WriteAndFreeGptData(handle, &g), 0, "WriteAndFree mod all"); + TEST_CALLS("VbExDiskWrite(h, 1023, 1)\n" + "VbExDiskWrite(h, 991, 32)\n"); + + /* Error reading */ + ResetMocks(); + disk_read_to_fail = 1; + TEST_EQ(AllocAndReadGptData(handle, &g), 0, "AllocAndRead disk fail"); + g.valid_headers = g.valid_entries = MASK_SECONDARY; + GptRepair(&g); + ResetCallLog(); + TEST_EQ(WriteAndFreeGptData(handle, &g), 0, "WriteAndFree mod 1"); + TEST_CALLS("VbExDiskWrite(h, 1, 1)\n" + "VbExDiskWrite(h, 2, 32)\n"); + + ResetMocks(); + disk_read_to_fail = 2; + TEST_EQ(AllocAndReadGptData(handle, &g), 0, "AllocAndRead disk fail"); + g.valid_headers = MASK_BOTH; + g.valid_entries = MASK_SECONDARY; + GptRepair(&g); + ResetCallLog(); + TEST_EQ(WriteAndFreeGptData(handle, &g), 0, "WriteAndFree mod 1"); + TEST_CALLS("VbExDiskWrite(h, 2, 32)\n"); + + ResetMocks(); + disk_read_to_fail = 991; + TEST_EQ(AllocAndReadGptData(handle, &g), 0, "AllocAndRead disk fail"); + g.valid_headers = MASK_BOTH; + g.valid_entries = MASK_PRIMARY; + GptRepair(&g); + ResetCallLog(); + TEST_EQ(WriteAndFreeGptData(handle, &g), 0, "WriteAndFree mod 2"); + TEST_CALLS("VbExDiskWrite(h, 991, 32)\n"); + + ResetMocks(); + disk_read_to_fail = 1023; + TEST_EQ(AllocAndReadGptData(handle, &g), 0, "AllocAndRead disk fail"); + g.valid_headers = g.valid_entries = MASK_PRIMARY; + GptRepair(&g); + ResetCallLog(); + TEST_EQ(WriteAndFreeGptData(handle, &g), 0, "WriteAndFree mod 2"); + TEST_CALLS("VbExDiskWrite(h, 1023, 1)\n" + "VbExDiskWrite(h, 991, 32)\n"); + + /* Error writing */ + ResetMocks(); + disk_write_to_fail = 1; + AllocAndReadGptData(handle, &g); + g.modified = -1; + memset(g.primary_header, '\0', g.sector_bytes); + TEST_NEQ(WriteAndFreeGptData(handle, &g), 0, "WriteAndFree disk fail"); + + ResetMocks(); + disk_write_to_fail = 2; + AllocAndReadGptData(handle, &g); + g.modified = -1; + memset(g.primary_header, '\0', g.sector_bytes); + h = (GptHeader*)g.primary_header; + h->entries_lba = 2; + TEST_NEQ(WriteAndFreeGptData(handle, &g), 0, "WriteAndFree disk fail"); + + ResetMocks(); + disk_write_to_fail = 991; + AllocAndReadGptData(handle, &g); + g.modified = -1; + memset(g.primary_header, '\0', g.sector_bytes); + TEST_NEQ(WriteAndFreeGptData(handle, &g), 0, "WriteAndFree disk fail"); + + ResetMocks(); + disk_write_to_fail = 1023; + AllocAndReadGptData(handle, &g); + g.modified = -1; + memset(g.primary_header, '\0', g.sector_bytes); + TEST_NEQ(WriteAndFreeGptData(handle, &g), 0, "WriteAndFree disk fail"); + +} + +int main(void) +{ + ReadWriteGptTest(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/hmac_test.c b/tests/hmac_test.c new file mode 100644 index 0000000..ed77d7b --- /dev/null +++ b/tests/hmac_test.c @@ -0,0 +1,105 @@ +/* Copyright 2016 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include + +#include "2sha.h" +#include "2hmac.h" +#include "test_common.h" + +const char short_key[] = "key"; +const char message[] = "The quick brown fox jumps over the lazy dog"; +/* This is supposed to be longer than the supported block sizes */ +const char long_key[] = + "loooooooooooooooooooooooooooooooooooooooooooonooooooooooooooooooo" + "ooooooooooooooooooooooooooooooooooooooooooooonooooooooooooog key"; + +static void test_hmac_by_openssl(enum vb2_hash_algorithm alg, + const void *key, uint32_t key_size, + const void *msg, uint32_t msg_size) +{ + uint8_t mac[VB2_MAX_DIGEST_SIZE]; + uint32_t mac_size = sizeof(mac); + uint8_t md[VB2_MAX_DIGEST_SIZE]; + uint32_t md_size = sizeof(md); + char test_name[256]; + + switch (alg) { + case VB2_HASH_SHA1: + HMAC(EVP_sha1(), key, key_size, msg, msg_size, md, &md_size); + break; + case VB2_HASH_SHA224: + HMAC(EVP_sha224(), key, key_size, msg, msg_size, md, &md_size); + break; + case VB2_HASH_SHA256: + HMAC(EVP_sha256(), key, key_size, msg, msg_size, md, &md_size); + break; + case VB2_HASH_SHA384: + HMAC(EVP_sha384(), key, key_size, msg, msg_size, md, &md_size); + break; + case VB2_HASH_SHA512: + HMAC(EVP_sha512(), key, key_size, msg, msg_size, md, &md_size); + break; + default: + TEST_SUCC(-1, "Unsupported hash algorithm"); + } + sprintf(test_name, "%s: HMAC-%s (key_size=%d)", + __func__, vb2_get_hash_algorithm_name(alg), key_size); + TEST_EQ(vb2_digest_size(alg), md_size, "HMAC size"); + TEST_SUCC(hmac(alg, key, key_size, msg, msg_size, mac, mac_size), + test_name); + TEST_SUCC(memcmp(mac, md, md_size), "HMAC digests match"); +} + +static void test_hmac_error(void) +{ + uint8_t mac[VB2_MAX_DIGEST_SIZE]; + enum vb2_hash_algorithm alg; + + alg = VB2_HASH_SHA1; + TEST_TRUE(hmac(alg, NULL, 0, + message, strlen(message), mac, sizeof(mac)), + "key = NULL"); + TEST_TRUE(hmac(alg, short_key, strlen(short_key), + NULL, 0, mac, sizeof(mac)), + "msg = NULL"); + TEST_TRUE(hmac(alg, short_key, strlen(short_key), + message, strlen(message), NULL, 0), + "mac = NULL"); + TEST_TRUE(hmac(alg, short_key, strlen(short_key), + message, strlen(message), mac, 0), + "Buffer too small"); + alg = -1; + TEST_TRUE(hmac(alg, short_key, strlen(short_key), + message, strlen(message), mac, sizeof(mac)), + "Invalid algorithm"); +} + +static void test_hmac(void) +{ + int alg; + + for (alg = 1; alg < VB2_HASH_ALG_COUNT; alg++) { + /* Try short key */ + test_hmac_by_openssl(alg, short_key, strlen(short_key), + message, strlen(message)); + /* Try key longer than a block size */ + test_hmac_by_openssl(alg, long_key, strlen(long_key), + message, strlen(message)); + /* Try empty key and message */ + test_hmac_by_openssl(alg, "", 0, "", 0); + } +} + +int main(void) +{ + test_hmac(); + test_hmac_error(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/load_kernel_tests.sh b/tests/load_kernel_tests.sh new file mode 100755 index 0000000..45eedf4 --- /dev/null +++ b/tests/load_kernel_tests.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +# Copyright (c) 2014 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# End-to-end test for vboot2 kernel verification + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +set -e + +CGPT=${BIN_DIR}/cgpt + +echo 'Creating test kernel' + +# Run tests in a dedicated directory for easy cleanup or debugging. +DIR="${TEST_DIR}/load_kernel_test_dir" +[ -d "$DIR" ] || mkdir -p "$DIR" +echo "Testing kernel verification in $DIR" +cd "$DIR" + +# Dummy kernel data +echo "hi there" > "dummy_config.txt" +dd if=/dev/urandom bs=16384 count=1 of="dummy_bootloader.bin" +dd if=/dev/urandom bs=32768 count=1 of="dummy_kernel.bin" + +# Pack kernel data key using original vboot utilities. +${FUTILITY} vbutil_key --pack datakey.test \ + --key ${TESTKEY_DIR}/key_rsa2048.keyb --algorithm 4 + +# Keyblock with kernel data key is signed by kernel subkey +# Flags=21 means dev=0 rec=0 minios=0 +${FUTILITY} vbutil_keyblock --pack keyblock.test \ + --datapubkey datakey.test \ + --flags 21 \ + --signprivate ${SCRIPT_DIR}/devkeys/kernel_subkey.vbprivk + +# Kernel preamble is signed with the kernel data key +${FUTILITY} vbutil_kernel \ + --pack "kernel.test" \ + --keyblock "keyblock.test" \ + --signprivate ${TESTKEY_DIR}/key_rsa2048.sha256.vbprivk \ + --version 1 \ + --arch arm \ + --vmlinuz "dummy_kernel.bin" \ + --bootloader "dummy_bootloader.bin" \ + --config "dummy_config.txt" + +echo 'Verifying test kernel' + +# Verify the kernel +${FUTILITY} vbutil_kernel \ + --verify "kernel.test" \ + --signpubkey ${SCRIPT_DIR}/devkeys/kernel_subkey.vbpubk + +happy 'Kernel verification succeeded' + +# Now create a dummy disk image +echo 'Creating test disk image' +dd if=/dev/zero of=disk.test bs=1024 count=1024 +${CGPT} create disk.test +${CGPT} add -i 1 -S 1 -P 1 -b 64 -s 960 -t kernel -l kernelA disk.test +${CGPT} show disk.test + +# And insert the kernel into it +dd if=kernel.test of=disk.test bs=512 seek=64 conv=notrunc + +# And verify it using futility +echo 'Verifying test disk image' +${BUILD_RUN}/tests/verify_kernel disk.test \ + ${SCRIPT_DIR}/devkeys/kernel_subkey.vbpubk + +happy 'Image verification succeeded' diff --git a/tests/loemkeys/README b/tests/loemkeys/README new file mode 100644 index 0000000..58b3bc8 --- /dev/null +++ b/tests/loemkeys/README @@ -0,0 +1 @@ +These are devkeys, but with filename tweaks for testing loem keysets. diff --git a/tests/loemkeys/firmware.loem1.keyblock b/tests/loemkeys/firmware.loem1.keyblock new file mode 120000 index 0000000..0d6087d --- /dev/null +++ b/tests/loemkeys/firmware.loem1.keyblock @@ -0,0 +1 @@ +../devkeys/firmware.keyblock \ No newline at end of file diff --git a/tests/loemkeys/firmware.loem2.keyblock b/tests/loemkeys/firmware.loem2.keyblock new file mode 120000 index 0000000..0d6087d --- /dev/null +++ b/tests/loemkeys/firmware.loem2.keyblock @@ -0,0 +1 @@ +../devkeys/firmware.keyblock \ No newline at end of file diff --git a/tests/loemkeys/firmware.loem3.keyblock b/tests/loemkeys/firmware.loem3.keyblock new file mode 120000 index 0000000..0d6087d --- /dev/null +++ b/tests/loemkeys/firmware.loem3.keyblock @@ -0,0 +1 @@ +../devkeys/firmware.keyblock \ No newline at end of file diff --git a/tests/loemkeys/firmware.loem4.keyblock b/tests/loemkeys/firmware.loem4.keyblock new file mode 120000 index 0000000..0d6087d --- /dev/null +++ b/tests/loemkeys/firmware.loem4.keyblock @@ -0,0 +1 @@ +../devkeys/firmware.keyblock \ No newline at end of file diff --git a/tests/loemkeys/firmware_data_key.loem1.vbprivk b/tests/loemkeys/firmware_data_key.loem1.vbprivk new file mode 120000 index 0000000..d361c31 --- /dev/null +++ b/tests/loemkeys/firmware_data_key.loem1.vbprivk @@ -0,0 +1 @@ +../devkeys/firmware_data_key.vbprivk \ No newline at end of file diff --git a/tests/loemkeys/firmware_data_key.loem1.vbpubk b/tests/loemkeys/firmware_data_key.loem1.vbpubk new file mode 120000 index 0000000..013e040 --- /dev/null +++ b/tests/loemkeys/firmware_data_key.loem1.vbpubk @@ -0,0 +1 @@ +../devkeys/firmware_data_key.vbpubk \ No newline at end of file diff --git a/tests/loemkeys/firmware_data_key.loem2.vbprivk b/tests/loemkeys/firmware_data_key.loem2.vbprivk new file mode 120000 index 0000000..d361c31 --- /dev/null +++ b/tests/loemkeys/firmware_data_key.loem2.vbprivk @@ -0,0 +1 @@ +../devkeys/firmware_data_key.vbprivk \ No newline at end of file diff --git a/tests/loemkeys/firmware_data_key.loem2.vbpubk b/tests/loemkeys/firmware_data_key.loem2.vbpubk new file mode 120000 index 0000000..013e040 --- /dev/null +++ b/tests/loemkeys/firmware_data_key.loem2.vbpubk @@ -0,0 +1 @@ +../devkeys/firmware_data_key.vbpubk \ No newline at end of file diff --git a/tests/loemkeys/firmware_data_key.loem3.vbprivk b/tests/loemkeys/firmware_data_key.loem3.vbprivk new file mode 120000 index 0000000..d361c31 --- /dev/null +++ b/tests/loemkeys/firmware_data_key.loem3.vbprivk @@ -0,0 +1 @@ +../devkeys/firmware_data_key.vbprivk \ No newline at end of file diff --git a/tests/loemkeys/firmware_data_key.loem3.vbpubk b/tests/loemkeys/firmware_data_key.loem3.vbpubk new file mode 120000 index 0000000..013e040 --- /dev/null +++ b/tests/loemkeys/firmware_data_key.loem3.vbpubk @@ -0,0 +1 @@ +../devkeys/firmware_data_key.vbpubk \ No newline at end of file diff --git a/tests/loemkeys/firmware_data_key.loem4.vbprivk b/tests/loemkeys/firmware_data_key.loem4.vbprivk new file mode 120000 index 0000000..d361c31 --- /dev/null +++ b/tests/loemkeys/firmware_data_key.loem4.vbprivk @@ -0,0 +1 @@ +../devkeys/firmware_data_key.vbprivk \ No newline at end of file diff --git a/tests/loemkeys/firmware_data_key.loem4.vbpubk b/tests/loemkeys/firmware_data_key.loem4.vbpubk new file mode 120000 index 0000000..013e040 --- /dev/null +++ b/tests/loemkeys/firmware_data_key.loem4.vbpubk @@ -0,0 +1 @@ +../devkeys/firmware_data_key.vbpubk \ No newline at end of file diff --git a/tests/loemkeys/installer_kernel.keyblock b/tests/loemkeys/installer_kernel.keyblock new file mode 120000 index 0000000..32e5e92 --- /dev/null +++ b/tests/loemkeys/installer_kernel.keyblock @@ -0,0 +1 @@ +../devkeys/installer_kernel.keyblock \ No newline at end of file diff --git a/tests/loemkeys/installer_kernel_data_key.vbprivk b/tests/loemkeys/installer_kernel_data_key.vbprivk new file mode 120000 index 0000000..3581b5e --- /dev/null +++ b/tests/loemkeys/installer_kernel_data_key.vbprivk @@ -0,0 +1 @@ +../devkeys/installer_kernel_data_key.vbprivk \ No newline at end of file diff --git a/tests/loemkeys/installer_kernel_data_key.vbpubk b/tests/loemkeys/installer_kernel_data_key.vbpubk new file mode 120000 index 0000000..2b68412 --- /dev/null +++ b/tests/loemkeys/installer_kernel_data_key.vbpubk @@ -0,0 +1 @@ +../devkeys/installer_kernel_data_key.vbpubk \ No newline at end of file diff --git a/tests/loemkeys/kernel.keyblock b/tests/loemkeys/kernel.keyblock new file mode 120000 index 0000000..27352c7 --- /dev/null +++ b/tests/loemkeys/kernel.keyblock @@ -0,0 +1 @@ +../devkeys/kernel.keyblock \ No newline at end of file diff --git a/tests/loemkeys/kernel_data_key.vbprivk b/tests/loemkeys/kernel_data_key.vbprivk new file mode 120000 index 0000000..39a35a7 --- /dev/null +++ b/tests/loemkeys/kernel_data_key.vbprivk @@ -0,0 +1 @@ +../devkeys/kernel_data_key.vbprivk \ No newline at end of file diff --git a/tests/loemkeys/kernel_data_key.vbpubk b/tests/loemkeys/kernel_data_key.vbpubk new file mode 120000 index 0000000..1986526 --- /dev/null +++ b/tests/loemkeys/kernel_data_key.vbpubk @@ -0,0 +1 @@ +../devkeys/kernel_data_key.vbpubk \ No newline at end of file diff --git a/tests/loemkeys/kernel_subkey.vbprivk b/tests/loemkeys/kernel_subkey.vbprivk new file mode 120000 index 0000000..5fa82c8 --- /dev/null +++ b/tests/loemkeys/kernel_subkey.vbprivk @@ -0,0 +1 @@ +../devkeys/kernel_subkey.vbprivk \ No newline at end of file diff --git a/tests/loemkeys/kernel_subkey.vbpubk b/tests/loemkeys/kernel_subkey.vbpubk new file mode 120000 index 0000000..b0cf2f1 --- /dev/null +++ b/tests/loemkeys/kernel_subkey.vbpubk @@ -0,0 +1 @@ +../devkeys/kernel_subkey.vbpubk \ No newline at end of file diff --git a/tests/loemkeys/key.versions b/tests/loemkeys/key.versions new file mode 100644 index 0000000..4ea1a01 --- /dev/null +++ b/tests/loemkeys/key.versions @@ -0,0 +1,5 @@ +name=loemkeys-premp +firmware_key_version=1 +firmware_version=1 +kernel_key_version=1 +kernel_version=1 diff --git a/tests/loemkeys/loem.ini b/tests/loemkeys/loem.ini new file mode 100644 index 0000000..8501f0c --- /dev/null +++ b/tests/loemkeys/loem.ini @@ -0,0 +1,3 @@ +[loem] +1 = ACME +2 = SHINRA diff --git a/tests/loemkeys/recovery_kernel.keyblock b/tests/loemkeys/recovery_kernel.keyblock new file mode 120000 index 0000000..ad3fd6e --- /dev/null +++ b/tests/loemkeys/recovery_kernel.keyblock @@ -0,0 +1 @@ +../devkeys/recovery_kernel.keyblock \ No newline at end of file diff --git a/tests/loemkeys/recovery_kernel_data_key.vbprivk b/tests/loemkeys/recovery_kernel_data_key.vbprivk new file mode 120000 index 0000000..b47a51b --- /dev/null +++ b/tests/loemkeys/recovery_kernel_data_key.vbprivk @@ -0,0 +1 @@ +../devkeys/recovery_kernel_data_key.vbprivk \ No newline at end of file diff --git a/tests/loemkeys/recovery_kernel_data_key.vbpubk b/tests/loemkeys/recovery_kernel_data_key.vbpubk new file mode 120000 index 0000000..395583b --- /dev/null +++ b/tests/loemkeys/recovery_kernel_data_key.vbpubk @@ -0,0 +1 @@ +../devkeys/recovery_kernel_data_key.vbpubk \ No newline at end of file diff --git a/tests/loemkeys/recovery_key.vbprivk b/tests/loemkeys/recovery_key.vbprivk new file mode 120000 index 0000000..9a7733b --- /dev/null +++ b/tests/loemkeys/recovery_key.vbprivk @@ -0,0 +1 @@ +../devkeys/recovery_key.vbprivk \ No newline at end of file diff --git a/tests/loemkeys/recovery_key.vbpubk b/tests/loemkeys/recovery_key.vbpubk new file mode 120000 index 0000000..1ea4a98 --- /dev/null +++ b/tests/loemkeys/recovery_key.vbpubk @@ -0,0 +1 @@ +../devkeys/recovery_key.vbpubk \ No newline at end of file diff --git a/tests/loemkeys/root_key.loem1.vbprivk b/tests/loemkeys/root_key.loem1.vbprivk new file mode 120000 index 0000000..d032898 --- /dev/null +++ b/tests/loemkeys/root_key.loem1.vbprivk @@ -0,0 +1 @@ +../devkeys/root_key.vbprivk \ No newline at end of file diff --git a/tests/loemkeys/root_key.loem1.vbpubk b/tests/loemkeys/root_key.loem1.vbpubk new file mode 120000 index 0000000..7a61f84 --- /dev/null +++ b/tests/loemkeys/root_key.loem1.vbpubk @@ -0,0 +1 @@ +../devkeys/root_key.vbpubk \ No newline at end of file diff --git a/tests/loemkeys/root_key.loem2.vbprivk b/tests/loemkeys/root_key.loem2.vbprivk new file mode 120000 index 0000000..d032898 --- /dev/null +++ b/tests/loemkeys/root_key.loem2.vbprivk @@ -0,0 +1 @@ +../devkeys/root_key.vbprivk \ No newline at end of file diff --git a/tests/loemkeys/root_key.loem2.vbpubk b/tests/loemkeys/root_key.loem2.vbpubk new file mode 120000 index 0000000..7a61f84 --- /dev/null +++ b/tests/loemkeys/root_key.loem2.vbpubk @@ -0,0 +1 @@ +../devkeys/root_key.vbpubk \ No newline at end of file diff --git a/tests/loemkeys/root_key.loem3.vbprivk b/tests/loemkeys/root_key.loem3.vbprivk new file mode 120000 index 0000000..d032898 --- /dev/null +++ b/tests/loemkeys/root_key.loem3.vbprivk @@ -0,0 +1 @@ +../devkeys/root_key.vbprivk \ No newline at end of file diff --git a/tests/loemkeys/root_key.loem3.vbpubk b/tests/loemkeys/root_key.loem3.vbpubk new file mode 120000 index 0000000..7a61f84 --- /dev/null +++ b/tests/loemkeys/root_key.loem3.vbpubk @@ -0,0 +1 @@ +../devkeys/root_key.vbpubk \ No newline at end of file diff --git a/tests/loemkeys/root_key.loem4.vbprivk b/tests/loemkeys/root_key.loem4.vbprivk new file mode 120000 index 0000000..d032898 --- /dev/null +++ b/tests/loemkeys/root_key.loem4.vbprivk @@ -0,0 +1 @@ +../devkeys/root_key.vbprivk \ No newline at end of file diff --git a/tests/loemkeys/root_key.loem4.vbpubk b/tests/loemkeys/root_key.loem4.vbpubk new file mode 120000 index 0000000..7a61f84 --- /dev/null +++ b/tests/loemkeys/root_key.loem4.vbpubk @@ -0,0 +1 @@ +../devkeys/root_key.vbpubk \ No newline at end of file diff --git a/tests/preamble_tests/data/FWDATA b/tests/preamble_tests/data/FWDATA new file mode 100644 index 0000000..a1c06b4 Binary files /dev/null and b/tests/preamble_tests/data/FWDATA differ diff --git a/tests/preamble_tests/data/KERNDATA b/tests/preamble_tests/data/KERNDATA new file mode 100644 index 0000000..7611897 Binary files /dev/null and b/tests/preamble_tests/data/KERNDATA differ diff --git a/tests/preamble_tests/data/data_0.vbprivk b/tests/preamble_tests/data/data_0.vbprivk new file mode 100644 index 0000000..e8b068c Binary files /dev/null and b/tests/preamble_tests/data/data_0.vbprivk differ diff --git a/tests/preamble_tests/data/data_0.vbpubk b/tests/preamble_tests/data/data_0.vbpubk new file mode 100644 index 0000000..0074637 Binary files /dev/null and b/tests/preamble_tests/data/data_0.vbpubk differ diff --git a/tests/preamble_tests/data/data_1.vbprivk b/tests/preamble_tests/data/data_1.vbprivk new file mode 100644 index 0000000..759113d Binary files /dev/null and b/tests/preamble_tests/data/data_1.vbprivk differ diff --git a/tests/preamble_tests/data/data_1.vbpubk b/tests/preamble_tests/data/data_1.vbpubk new file mode 100644 index 0000000..7e2d299 Binary files /dev/null and b/tests/preamble_tests/data/data_1.vbpubk differ diff --git a/tests/preamble_tests/data/data_10.vbprivk b/tests/preamble_tests/data/data_10.vbprivk new file mode 100644 index 0000000..59afeff Binary files /dev/null and b/tests/preamble_tests/data/data_10.vbprivk differ diff --git a/tests/preamble_tests/data/data_10.vbpubk b/tests/preamble_tests/data/data_10.vbpubk new file mode 100644 index 0000000..7dfc596 Binary files /dev/null and b/tests/preamble_tests/data/data_10.vbpubk differ diff --git a/tests/preamble_tests/data/data_11.vbprivk b/tests/preamble_tests/data/data_11.vbprivk new file mode 100644 index 0000000..d12fe72 Binary files /dev/null and b/tests/preamble_tests/data/data_11.vbprivk differ diff --git a/tests/preamble_tests/data/data_11.vbpubk b/tests/preamble_tests/data/data_11.vbpubk new file mode 100644 index 0000000..f258b25 Binary files /dev/null and b/tests/preamble_tests/data/data_11.vbpubk differ diff --git a/tests/preamble_tests/data/data_2.vbprivk b/tests/preamble_tests/data/data_2.vbprivk new file mode 100644 index 0000000..9e05e3b Binary files /dev/null and b/tests/preamble_tests/data/data_2.vbprivk differ diff --git a/tests/preamble_tests/data/data_2.vbpubk b/tests/preamble_tests/data/data_2.vbpubk new file mode 100644 index 0000000..8a2ca31 Binary files /dev/null and b/tests/preamble_tests/data/data_2.vbpubk differ diff --git a/tests/preamble_tests/data/data_3.vbprivk b/tests/preamble_tests/data/data_3.vbprivk new file mode 100644 index 0000000..74828be Binary files /dev/null and b/tests/preamble_tests/data/data_3.vbprivk differ diff --git a/tests/preamble_tests/data/data_3.vbpubk b/tests/preamble_tests/data/data_3.vbpubk new file mode 100644 index 0000000..d71da88 Binary files /dev/null and b/tests/preamble_tests/data/data_3.vbpubk differ diff --git a/tests/preamble_tests/data/data_4.vbprivk b/tests/preamble_tests/data/data_4.vbprivk new file mode 100644 index 0000000..b7ffe39 Binary files /dev/null and b/tests/preamble_tests/data/data_4.vbprivk differ diff --git a/tests/preamble_tests/data/data_4.vbpubk b/tests/preamble_tests/data/data_4.vbpubk new file mode 100644 index 0000000..4ae776d Binary files /dev/null and b/tests/preamble_tests/data/data_4.vbpubk differ diff --git a/tests/preamble_tests/data/data_5.vbprivk b/tests/preamble_tests/data/data_5.vbprivk new file mode 100644 index 0000000..2387696 Binary files /dev/null and b/tests/preamble_tests/data/data_5.vbprivk differ diff --git a/tests/preamble_tests/data/data_5.vbpubk b/tests/preamble_tests/data/data_5.vbpubk new file mode 100644 index 0000000..7d4e17e Binary files /dev/null and b/tests/preamble_tests/data/data_5.vbpubk differ diff --git a/tests/preamble_tests/data/data_6.vbprivk b/tests/preamble_tests/data/data_6.vbprivk new file mode 100644 index 0000000..9861ee3 Binary files /dev/null and b/tests/preamble_tests/data/data_6.vbprivk differ diff --git a/tests/preamble_tests/data/data_6.vbpubk b/tests/preamble_tests/data/data_6.vbpubk new file mode 100644 index 0000000..d3e6288 Binary files /dev/null and b/tests/preamble_tests/data/data_6.vbpubk differ diff --git a/tests/preamble_tests/data/data_7.vbprivk b/tests/preamble_tests/data/data_7.vbprivk new file mode 100644 index 0000000..53ebf51 Binary files /dev/null and b/tests/preamble_tests/data/data_7.vbprivk differ diff --git a/tests/preamble_tests/data/data_7.vbpubk b/tests/preamble_tests/data/data_7.vbpubk new file mode 100644 index 0000000..736a0c3 Binary files /dev/null and b/tests/preamble_tests/data/data_7.vbpubk differ diff --git a/tests/preamble_tests/data/data_8.vbprivk b/tests/preamble_tests/data/data_8.vbprivk new file mode 100644 index 0000000..82aec31 Binary files /dev/null and b/tests/preamble_tests/data/data_8.vbprivk differ diff --git a/tests/preamble_tests/data/data_8.vbpubk b/tests/preamble_tests/data/data_8.vbpubk new file mode 100644 index 0000000..cd68c16 Binary files /dev/null and b/tests/preamble_tests/data/data_8.vbpubk differ diff --git a/tests/preamble_tests/data/data_9.vbprivk b/tests/preamble_tests/data/data_9.vbprivk new file mode 100644 index 0000000..f798f92 Binary files /dev/null and b/tests/preamble_tests/data/data_9.vbprivk differ diff --git a/tests/preamble_tests/data/data_9.vbpubk b/tests/preamble_tests/data/data_9.vbpubk new file mode 100644 index 0000000..3d46a2c Binary files /dev/null and b/tests/preamble_tests/data/data_9.vbpubk differ diff --git a/tests/preamble_tests/data/dummy_0.vbprivk b/tests/preamble_tests/data/dummy_0.vbprivk new file mode 100644 index 0000000..f0d0861 Binary files /dev/null and b/tests/preamble_tests/data/dummy_0.vbprivk differ diff --git a/tests/preamble_tests/data/dummy_0.vbpubk b/tests/preamble_tests/data/dummy_0.vbpubk new file mode 100644 index 0000000..b0782e3 Binary files /dev/null and b/tests/preamble_tests/data/dummy_0.vbpubk differ diff --git a/tests/preamble_tests/data/dummy_bootloader.bin b/tests/preamble_tests/data/dummy_bootloader.bin new file mode 100644 index 0000000..094e86b Binary files /dev/null and b/tests/preamble_tests/data/dummy_bootloader.bin differ diff --git a/tests/preamble_tests/data/dummy_config.txt b/tests/preamble_tests/data/dummy_config.txt new file mode 100644 index 0000000..37d4e6c --- /dev/null +++ b/tests/preamble_tests/data/dummy_config.txt @@ -0,0 +1 @@ +hi there diff --git a/tests/preamble_tests/data/kb_0_0.keyblock b/tests/preamble_tests/data/kb_0_0.keyblock new file mode 100644 index 0000000..e764076 Binary files /dev/null and b/tests/preamble_tests/data/kb_0_0.keyblock differ diff --git a/tests/preamble_tests/data/kb_0_1.keyblock b/tests/preamble_tests/data/kb_0_1.keyblock new file mode 100644 index 0000000..84a11a0 Binary files /dev/null and b/tests/preamble_tests/data/kb_0_1.keyblock differ diff --git a/tests/preamble_tests/data/kb_0_10.keyblock b/tests/preamble_tests/data/kb_0_10.keyblock new file mode 100644 index 0000000..46781f9 Binary files /dev/null and b/tests/preamble_tests/data/kb_0_10.keyblock differ diff --git a/tests/preamble_tests/data/kb_0_11.keyblock b/tests/preamble_tests/data/kb_0_11.keyblock new file mode 100644 index 0000000..046e4df Binary files /dev/null and b/tests/preamble_tests/data/kb_0_11.keyblock differ diff --git a/tests/preamble_tests/data/kb_0_2.keyblock b/tests/preamble_tests/data/kb_0_2.keyblock new file mode 100644 index 0000000..4c5e890 Binary files /dev/null and b/tests/preamble_tests/data/kb_0_2.keyblock differ diff --git a/tests/preamble_tests/data/kb_0_3.keyblock b/tests/preamble_tests/data/kb_0_3.keyblock new file mode 100644 index 0000000..50ba145 Binary files /dev/null and b/tests/preamble_tests/data/kb_0_3.keyblock differ diff --git a/tests/preamble_tests/data/kb_0_4.keyblock b/tests/preamble_tests/data/kb_0_4.keyblock new file mode 100644 index 0000000..3444fbb Binary files /dev/null and b/tests/preamble_tests/data/kb_0_4.keyblock differ diff --git a/tests/preamble_tests/data/kb_0_5.keyblock b/tests/preamble_tests/data/kb_0_5.keyblock new file mode 100644 index 0000000..4cb0308 Binary files /dev/null and b/tests/preamble_tests/data/kb_0_5.keyblock differ diff --git a/tests/preamble_tests/data/kb_0_6.keyblock b/tests/preamble_tests/data/kb_0_6.keyblock new file mode 100644 index 0000000..91604b6 Binary files /dev/null and b/tests/preamble_tests/data/kb_0_6.keyblock differ diff --git a/tests/preamble_tests/data/kb_0_7.keyblock b/tests/preamble_tests/data/kb_0_7.keyblock new file mode 100644 index 0000000..4da9b8f Binary files /dev/null and b/tests/preamble_tests/data/kb_0_7.keyblock differ diff --git a/tests/preamble_tests/data/kb_0_8.keyblock b/tests/preamble_tests/data/kb_0_8.keyblock new file mode 100644 index 0000000..ca788d6 Binary files /dev/null and b/tests/preamble_tests/data/kb_0_8.keyblock differ diff --git a/tests/preamble_tests/data/kb_0_9.keyblock b/tests/preamble_tests/data/kb_0_9.keyblock new file mode 100644 index 0000000..e0b6504 Binary files /dev/null and b/tests/preamble_tests/data/kb_0_9.keyblock differ diff --git a/tests/preamble_tests/data/kb_10_0.keyblock b/tests/preamble_tests/data/kb_10_0.keyblock new file mode 100644 index 0000000..6592b5c Binary files /dev/null and b/tests/preamble_tests/data/kb_10_0.keyblock differ diff --git a/tests/preamble_tests/data/kb_10_1.keyblock b/tests/preamble_tests/data/kb_10_1.keyblock new file mode 100644 index 0000000..682dbd6 Binary files /dev/null and b/tests/preamble_tests/data/kb_10_1.keyblock differ diff --git a/tests/preamble_tests/data/kb_10_10.keyblock b/tests/preamble_tests/data/kb_10_10.keyblock new file mode 100644 index 0000000..039229c Binary files /dev/null and b/tests/preamble_tests/data/kb_10_10.keyblock differ diff --git a/tests/preamble_tests/data/kb_10_11.keyblock b/tests/preamble_tests/data/kb_10_11.keyblock new file mode 100644 index 0000000..43a3c7c Binary files /dev/null and b/tests/preamble_tests/data/kb_10_11.keyblock differ diff --git a/tests/preamble_tests/data/kb_10_2.keyblock b/tests/preamble_tests/data/kb_10_2.keyblock new file mode 100644 index 0000000..7a6da84 Binary files /dev/null and b/tests/preamble_tests/data/kb_10_2.keyblock differ diff --git a/tests/preamble_tests/data/kb_10_3.keyblock b/tests/preamble_tests/data/kb_10_3.keyblock new file mode 100644 index 0000000..d1b6062 Binary files /dev/null and b/tests/preamble_tests/data/kb_10_3.keyblock differ diff --git a/tests/preamble_tests/data/kb_10_4.keyblock b/tests/preamble_tests/data/kb_10_4.keyblock new file mode 100644 index 0000000..84d9b87 Binary files /dev/null and b/tests/preamble_tests/data/kb_10_4.keyblock differ diff --git a/tests/preamble_tests/data/kb_10_5.keyblock b/tests/preamble_tests/data/kb_10_5.keyblock new file mode 100644 index 0000000..3bd4527 Binary files /dev/null and b/tests/preamble_tests/data/kb_10_5.keyblock differ diff --git a/tests/preamble_tests/data/kb_10_6.keyblock b/tests/preamble_tests/data/kb_10_6.keyblock new file mode 100644 index 0000000..64219d2 Binary files /dev/null and b/tests/preamble_tests/data/kb_10_6.keyblock differ diff --git a/tests/preamble_tests/data/kb_10_7.keyblock b/tests/preamble_tests/data/kb_10_7.keyblock new file mode 100644 index 0000000..c590be2 Binary files /dev/null and b/tests/preamble_tests/data/kb_10_7.keyblock differ diff --git a/tests/preamble_tests/data/kb_10_8.keyblock b/tests/preamble_tests/data/kb_10_8.keyblock new file mode 100644 index 0000000..0fa0493 Binary files /dev/null and b/tests/preamble_tests/data/kb_10_8.keyblock differ diff --git a/tests/preamble_tests/data/kb_10_9.keyblock b/tests/preamble_tests/data/kb_10_9.keyblock new file mode 100644 index 0000000..1307428 Binary files /dev/null and b/tests/preamble_tests/data/kb_10_9.keyblock differ diff --git a/tests/preamble_tests/data/kb_11_0.keyblock b/tests/preamble_tests/data/kb_11_0.keyblock new file mode 100644 index 0000000..110407c Binary files /dev/null and b/tests/preamble_tests/data/kb_11_0.keyblock differ diff --git a/tests/preamble_tests/data/kb_11_1.keyblock b/tests/preamble_tests/data/kb_11_1.keyblock new file mode 100644 index 0000000..c1ce372 Binary files /dev/null and b/tests/preamble_tests/data/kb_11_1.keyblock differ diff --git a/tests/preamble_tests/data/kb_11_10.keyblock b/tests/preamble_tests/data/kb_11_10.keyblock new file mode 100644 index 0000000..72fd668 Binary files /dev/null and b/tests/preamble_tests/data/kb_11_10.keyblock differ diff --git a/tests/preamble_tests/data/kb_11_11.keyblock b/tests/preamble_tests/data/kb_11_11.keyblock new file mode 100644 index 0000000..da2af5d Binary files /dev/null and b/tests/preamble_tests/data/kb_11_11.keyblock differ diff --git a/tests/preamble_tests/data/kb_11_2.keyblock b/tests/preamble_tests/data/kb_11_2.keyblock new file mode 100644 index 0000000..cf264d8 Binary files /dev/null and b/tests/preamble_tests/data/kb_11_2.keyblock differ diff --git a/tests/preamble_tests/data/kb_11_3.keyblock b/tests/preamble_tests/data/kb_11_3.keyblock new file mode 100644 index 0000000..2b4362d Binary files /dev/null and b/tests/preamble_tests/data/kb_11_3.keyblock differ diff --git a/tests/preamble_tests/data/kb_11_4.keyblock b/tests/preamble_tests/data/kb_11_4.keyblock new file mode 100644 index 0000000..222eb49 Binary files /dev/null and b/tests/preamble_tests/data/kb_11_4.keyblock differ diff --git a/tests/preamble_tests/data/kb_11_5.keyblock b/tests/preamble_tests/data/kb_11_5.keyblock new file mode 100644 index 0000000..3ca3c81 Binary files /dev/null and b/tests/preamble_tests/data/kb_11_5.keyblock differ diff --git a/tests/preamble_tests/data/kb_11_6.keyblock b/tests/preamble_tests/data/kb_11_6.keyblock new file mode 100644 index 0000000..a8a2b43 Binary files /dev/null and b/tests/preamble_tests/data/kb_11_6.keyblock differ diff --git a/tests/preamble_tests/data/kb_11_7.keyblock b/tests/preamble_tests/data/kb_11_7.keyblock new file mode 100644 index 0000000..c969d50 Binary files /dev/null and b/tests/preamble_tests/data/kb_11_7.keyblock differ diff --git a/tests/preamble_tests/data/kb_11_8.keyblock b/tests/preamble_tests/data/kb_11_8.keyblock new file mode 100644 index 0000000..7e091a1 Binary files /dev/null and b/tests/preamble_tests/data/kb_11_8.keyblock differ diff --git a/tests/preamble_tests/data/kb_11_9.keyblock b/tests/preamble_tests/data/kb_11_9.keyblock new file mode 100644 index 0000000..b65bcd4 Binary files /dev/null and b/tests/preamble_tests/data/kb_11_9.keyblock differ diff --git a/tests/preamble_tests/data/kb_1_0.keyblock b/tests/preamble_tests/data/kb_1_0.keyblock new file mode 100644 index 0000000..865cbed Binary files /dev/null and b/tests/preamble_tests/data/kb_1_0.keyblock differ diff --git a/tests/preamble_tests/data/kb_1_1.keyblock b/tests/preamble_tests/data/kb_1_1.keyblock new file mode 100644 index 0000000..ce7a363 Binary files /dev/null and b/tests/preamble_tests/data/kb_1_1.keyblock differ diff --git a/tests/preamble_tests/data/kb_1_10.keyblock b/tests/preamble_tests/data/kb_1_10.keyblock new file mode 100644 index 0000000..75729de Binary files /dev/null and b/tests/preamble_tests/data/kb_1_10.keyblock differ diff --git a/tests/preamble_tests/data/kb_1_11.keyblock b/tests/preamble_tests/data/kb_1_11.keyblock new file mode 100644 index 0000000..348748f Binary files /dev/null and b/tests/preamble_tests/data/kb_1_11.keyblock differ diff --git a/tests/preamble_tests/data/kb_1_2.keyblock b/tests/preamble_tests/data/kb_1_2.keyblock new file mode 100644 index 0000000..8a0189d Binary files /dev/null and b/tests/preamble_tests/data/kb_1_2.keyblock differ diff --git a/tests/preamble_tests/data/kb_1_3.keyblock b/tests/preamble_tests/data/kb_1_3.keyblock new file mode 100644 index 0000000..cf7c6ce Binary files /dev/null and b/tests/preamble_tests/data/kb_1_3.keyblock differ diff --git a/tests/preamble_tests/data/kb_1_4.keyblock b/tests/preamble_tests/data/kb_1_4.keyblock new file mode 100644 index 0000000..55d81ac Binary files /dev/null and b/tests/preamble_tests/data/kb_1_4.keyblock differ diff --git a/tests/preamble_tests/data/kb_1_5.keyblock b/tests/preamble_tests/data/kb_1_5.keyblock new file mode 100644 index 0000000..eab3750 Binary files /dev/null and b/tests/preamble_tests/data/kb_1_5.keyblock differ diff --git a/tests/preamble_tests/data/kb_1_6.keyblock b/tests/preamble_tests/data/kb_1_6.keyblock new file mode 100644 index 0000000..8d515e0 Binary files /dev/null and b/tests/preamble_tests/data/kb_1_6.keyblock differ diff --git a/tests/preamble_tests/data/kb_1_7.keyblock b/tests/preamble_tests/data/kb_1_7.keyblock new file mode 100644 index 0000000..bd81157 Binary files /dev/null and b/tests/preamble_tests/data/kb_1_7.keyblock differ diff --git a/tests/preamble_tests/data/kb_1_8.keyblock b/tests/preamble_tests/data/kb_1_8.keyblock new file mode 100644 index 0000000..3c5c4fb Binary files /dev/null and b/tests/preamble_tests/data/kb_1_8.keyblock differ diff --git a/tests/preamble_tests/data/kb_1_9.keyblock b/tests/preamble_tests/data/kb_1_9.keyblock new file mode 100644 index 0000000..92259e8 Binary files /dev/null and b/tests/preamble_tests/data/kb_1_9.keyblock differ diff --git a/tests/preamble_tests/data/kb_2_0.keyblock b/tests/preamble_tests/data/kb_2_0.keyblock new file mode 100644 index 0000000..9dd2fdc Binary files /dev/null and b/tests/preamble_tests/data/kb_2_0.keyblock differ diff --git a/tests/preamble_tests/data/kb_2_1.keyblock b/tests/preamble_tests/data/kb_2_1.keyblock new file mode 100644 index 0000000..9dde3ef Binary files /dev/null and b/tests/preamble_tests/data/kb_2_1.keyblock differ diff --git a/tests/preamble_tests/data/kb_2_10.keyblock b/tests/preamble_tests/data/kb_2_10.keyblock new file mode 100644 index 0000000..c98cebf Binary files /dev/null and b/tests/preamble_tests/data/kb_2_10.keyblock differ diff --git a/tests/preamble_tests/data/kb_2_11.keyblock b/tests/preamble_tests/data/kb_2_11.keyblock new file mode 100644 index 0000000..d942311 Binary files /dev/null and b/tests/preamble_tests/data/kb_2_11.keyblock differ diff --git a/tests/preamble_tests/data/kb_2_2.keyblock b/tests/preamble_tests/data/kb_2_2.keyblock new file mode 100644 index 0000000..ef0bf05 Binary files /dev/null and b/tests/preamble_tests/data/kb_2_2.keyblock differ diff --git a/tests/preamble_tests/data/kb_2_3.keyblock b/tests/preamble_tests/data/kb_2_3.keyblock new file mode 100644 index 0000000..462c2b2 Binary files /dev/null and b/tests/preamble_tests/data/kb_2_3.keyblock differ diff --git a/tests/preamble_tests/data/kb_2_4.keyblock b/tests/preamble_tests/data/kb_2_4.keyblock new file mode 100644 index 0000000..1687b37 Binary files /dev/null and b/tests/preamble_tests/data/kb_2_4.keyblock differ diff --git a/tests/preamble_tests/data/kb_2_5.keyblock b/tests/preamble_tests/data/kb_2_5.keyblock new file mode 100644 index 0000000..f255488 Binary files /dev/null and b/tests/preamble_tests/data/kb_2_5.keyblock differ diff --git a/tests/preamble_tests/data/kb_2_6.keyblock b/tests/preamble_tests/data/kb_2_6.keyblock new file mode 100644 index 0000000..66044d0 Binary files /dev/null and b/tests/preamble_tests/data/kb_2_6.keyblock differ diff --git a/tests/preamble_tests/data/kb_2_7.keyblock b/tests/preamble_tests/data/kb_2_7.keyblock new file mode 100644 index 0000000..a20955a Binary files /dev/null and b/tests/preamble_tests/data/kb_2_7.keyblock differ diff --git a/tests/preamble_tests/data/kb_2_8.keyblock b/tests/preamble_tests/data/kb_2_8.keyblock new file mode 100644 index 0000000..ea5a205 Binary files /dev/null and b/tests/preamble_tests/data/kb_2_8.keyblock differ diff --git a/tests/preamble_tests/data/kb_2_9.keyblock b/tests/preamble_tests/data/kb_2_9.keyblock new file mode 100644 index 0000000..8675f60 Binary files /dev/null and b/tests/preamble_tests/data/kb_2_9.keyblock differ diff --git a/tests/preamble_tests/data/kb_3_0.keyblock b/tests/preamble_tests/data/kb_3_0.keyblock new file mode 100644 index 0000000..d82c293 Binary files /dev/null and b/tests/preamble_tests/data/kb_3_0.keyblock differ diff --git a/tests/preamble_tests/data/kb_3_1.keyblock b/tests/preamble_tests/data/kb_3_1.keyblock new file mode 100644 index 0000000..38b13a4 Binary files /dev/null and b/tests/preamble_tests/data/kb_3_1.keyblock differ diff --git a/tests/preamble_tests/data/kb_3_10.keyblock b/tests/preamble_tests/data/kb_3_10.keyblock new file mode 100644 index 0000000..2fa4a65 Binary files /dev/null and b/tests/preamble_tests/data/kb_3_10.keyblock differ diff --git a/tests/preamble_tests/data/kb_3_11.keyblock b/tests/preamble_tests/data/kb_3_11.keyblock new file mode 100644 index 0000000..a7c6446 Binary files /dev/null and b/tests/preamble_tests/data/kb_3_11.keyblock differ diff --git a/tests/preamble_tests/data/kb_3_2.keyblock b/tests/preamble_tests/data/kb_3_2.keyblock new file mode 100644 index 0000000..2e8a2aa Binary files /dev/null and b/tests/preamble_tests/data/kb_3_2.keyblock differ diff --git a/tests/preamble_tests/data/kb_3_3.keyblock b/tests/preamble_tests/data/kb_3_3.keyblock new file mode 100644 index 0000000..53bc558 Binary files /dev/null and b/tests/preamble_tests/data/kb_3_3.keyblock differ diff --git a/tests/preamble_tests/data/kb_3_4.keyblock b/tests/preamble_tests/data/kb_3_4.keyblock new file mode 100644 index 0000000..9e418c8 Binary files /dev/null and b/tests/preamble_tests/data/kb_3_4.keyblock differ diff --git a/tests/preamble_tests/data/kb_3_5.keyblock b/tests/preamble_tests/data/kb_3_5.keyblock new file mode 100644 index 0000000..fc61bf5 Binary files /dev/null and b/tests/preamble_tests/data/kb_3_5.keyblock differ diff --git a/tests/preamble_tests/data/kb_3_6.keyblock b/tests/preamble_tests/data/kb_3_6.keyblock new file mode 100644 index 0000000..e3de18a Binary files /dev/null and b/tests/preamble_tests/data/kb_3_6.keyblock differ diff --git a/tests/preamble_tests/data/kb_3_7.keyblock b/tests/preamble_tests/data/kb_3_7.keyblock new file mode 100644 index 0000000..64105e0 Binary files /dev/null and b/tests/preamble_tests/data/kb_3_7.keyblock differ diff --git a/tests/preamble_tests/data/kb_3_8.keyblock b/tests/preamble_tests/data/kb_3_8.keyblock new file mode 100644 index 0000000..06de8ed Binary files /dev/null and b/tests/preamble_tests/data/kb_3_8.keyblock differ diff --git a/tests/preamble_tests/data/kb_3_9.keyblock b/tests/preamble_tests/data/kb_3_9.keyblock new file mode 100644 index 0000000..b1ea80f Binary files /dev/null and b/tests/preamble_tests/data/kb_3_9.keyblock differ diff --git a/tests/preamble_tests/data/kb_4_0.keyblock b/tests/preamble_tests/data/kb_4_0.keyblock new file mode 100644 index 0000000..167ec8e Binary files /dev/null and b/tests/preamble_tests/data/kb_4_0.keyblock differ diff --git a/tests/preamble_tests/data/kb_4_1.keyblock b/tests/preamble_tests/data/kb_4_1.keyblock new file mode 100644 index 0000000..62b81c3 Binary files /dev/null and b/tests/preamble_tests/data/kb_4_1.keyblock differ diff --git a/tests/preamble_tests/data/kb_4_10.keyblock b/tests/preamble_tests/data/kb_4_10.keyblock new file mode 100644 index 0000000..7916dc4 Binary files /dev/null and b/tests/preamble_tests/data/kb_4_10.keyblock differ diff --git a/tests/preamble_tests/data/kb_4_11.keyblock b/tests/preamble_tests/data/kb_4_11.keyblock new file mode 100644 index 0000000..6fdcdcc Binary files /dev/null and b/tests/preamble_tests/data/kb_4_11.keyblock differ diff --git a/tests/preamble_tests/data/kb_4_2.keyblock b/tests/preamble_tests/data/kb_4_2.keyblock new file mode 100644 index 0000000..1d2d5d6 Binary files /dev/null and b/tests/preamble_tests/data/kb_4_2.keyblock differ diff --git a/tests/preamble_tests/data/kb_4_3.keyblock b/tests/preamble_tests/data/kb_4_3.keyblock new file mode 100644 index 0000000..f4863ab Binary files /dev/null and b/tests/preamble_tests/data/kb_4_3.keyblock differ diff --git a/tests/preamble_tests/data/kb_4_4.keyblock b/tests/preamble_tests/data/kb_4_4.keyblock new file mode 100644 index 0000000..b6ab2df Binary files /dev/null and b/tests/preamble_tests/data/kb_4_4.keyblock differ diff --git a/tests/preamble_tests/data/kb_4_5.keyblock b/tests/preamble_tests/data/kb_4_5.keyblock new file mode 100644 index 0000000..3e3bbce Binary files /dev/null and b/tests/preamble_tests/data/kb_4_5.keyblock differ diff --git a/tests/preamble_tests/data/kb_4_6.keyblock b/tests/preamble_tests/data/kb_4_6.keyblock new file mode 100644 index 0000000..324f4d4 Binary files /dev/null and b/tests/preamble_tests/data/kb_4_6.keyblock differ diff --git a/tests/preamble_tests/data/kb_4_7.keyblock b/tests/preamble_tests/data/kb_4_7.keyblock new file mode 100644 index 0000000..5ca40ff Binary files /dev/null and b/tests/preamble_tests/data/kb_4_7.keyblock differ diff --git a/tests/preamble_tests/data/kb_4_8.keyblock b/tests/preamble_tests/data/kb_4_8.keyblock new file mode 100644 index 0000000..bc0d028 Binary files /dev/null and b/tests/preamble_tests/data/kb_4_8.keyblock differ diff --git a/tests/preamble_tests/data/kb_4_9.keyblock b/tests/preamble_tests/data/kb_4_9.keyblock new file mode 100644 index 0000000..1ee9437 Binary files /dev/null and b/tests/preamble_tests/data/kb_4_9.keyblock differ diff --git a/tests/preamble_tests/data/kb_5_0.keyblock b/tests/preamble_tests/data/kb_5_0.keyblock new file mode 100644 index 0000000..fefd916 Binary files /dev/null and b/tests/preamble_tests/data/kb_5_0.keyblock differ diff --git a/tests/preamble_tests/data/kb_5_1.keyblock b/tests/preamble_tests/data/kb_5_1.keyblock new file mode 100644 index 0000000..5677051 Binary files /dev/null and b/tests/preamble_tests/data/kb_5_1.keyblock differ diff --git a/tests/preamble_tests/data/kb_5_10.keyblock b/tests/preamble_tests/data/kb_5_10.keyblock new file mode 100644 index 0000000..2b29569 Binary files /dev/null and b/tests/preamble_tests/data/kb_5_10.keyblock differ diff --git a/tests/preamble_tests/data/kb_5_11.keyblock b/tests/preamble_tests/data/kb_5_11.keyblock new file mode 100644 index 0000000..382871a Binary files /dev/null and b/tests/preamble_tests/data/kb_5_11.keyblock differ diff --git a/tests/preamble_tests/data/kb_5_2.keyblock b/tests/preamble_tests/data/kb_5_2.keyblock new file mode 100644 index 0000000..47e7da5 Binary files /dev/null and b/tests/preamble_tests/data/kb_5_2.keyblock differ diff --git a/tests/preamble_tests/data/kb_5_3.keyblock b/tests/preamble_tests/data/kb_5_3.keyblock new file mode 100644 index 0000000..20d8427 Binary files /dev/null and b/tests/preamble_tests/data/kb_5_3.keyblock differ diff --git a/tests/preamble_tests/data/kb_5_4.keyblock b/tests/preamble_tests/data/kb_5_4.keyblock new file mode 100644 index 0000000..8ae685f Binary files /dev/null and b/tests/preamble_tests/data/kb_5_4.keyblock differ diff --git a/tests/preamble_tests/data/kb_5_5.keyblock b/tests/preamble_tests/data/kb_5_5.keyblock new file mode 100644 index 0000000..f324cfe Binary files /dev/null and b/tests/preamble_tests/data/kb_5_5.keyblock differ diff --git a/tests/preamble_tests/data/kb_5_6.keyblock b/tests/preamble_tests/data/kb_5_6.keyblock new file mode 100644 index 0000000..daefaaf Binary files /dev/null and b/tests/preamble_tests/data/kb_5_6.keyblock differ diff --git a/tests/preamble_tests/data/kb_5_7.keyblock b/tests/preamble_tests/data/kb_5_7.keyblock new file mode 100644 index 0000000..1e5a7b1 Binary files /dev/null and b/tests/preamble_tests/data/kb_5_7.keyblock differ diff --git a/tests/preamble_tests/data/kb_5_8.keyblock b/tests/preamble_tests/data/kb_5_8.keyblock new file mode 100644 index 0000000..7736a3e Binary files /dev/null and b/tests/preamble_tests/data/kb_5_8.keyblock differ diff --git a/tests/preamble_tests/data/kb_5_9.keyblock b/tests/preamble_tests/data/kb_5_9.keyblock new file mode 100644 index 0000000..e1eb9cb Binary files /dev/null and b/tests/preamble_tests/data/kb_5_9.keyblock differ diff --git a/tests/preamble_tests/data/kb_6_0.keyblock b/tests/preamble_tests/data/kb_6_0.keyblock new file mode 100644 index 0000000..1d9e4c1 Binary files /dev/null and b/tests/preamble_tests/data/kb_6_0.keyblock differ diff --git a/tests/preamble_tests/data/kb_6_1.keyblock b/tests/preamble_tests/data/kb_6_1.keyblock new file mode 100644 index 0000000..6dc2731 Binary files /dev/null and b/tests/preamble_tests/data/kb_6_1.keyblock differ diff --git a/tests/preamble_tests/data/kb_6_10.keyblock b/tests/preamble_tests/data/kb_6_10.keyblock new file mode 100644 index 0000000..669d637 Binary files /dev/null and b/tests/preamble_tests/data/kb_6_10.keyblock differ diff --git a/tests/preamble_tests/data/kb_6_11.keyblock b/tests/preamble_tests/data/kb_6_11.keyblock new file mode 100644 index 0000000..6fdabc7 Binary files /dev/null and b/tests/preamble_tests/data/kb_6_11.keyblock differ diff --git a/tests/preamble_tests/data/kb_6_2.keyblock b/tests/preamble_tests/data/kb_6_2.keyblock new file mode 100644 index 0000000..b48cf51 Binary files /dev/null and b/tests/preamble_tests/data/kb_6_2.keyblock differ diff --git a/tests/preamble_tests/data/kb_6_3.keyblock b/tests/preamble_tests/data/kb_6_3.keyblock new file mode 100644 index 0000000..601424c Binary files /dev/null and b/tests/preamble_tests/data/kb_6_3.keyblock differ diff --git a/tests/preamble_tests/data/kb_6_4.keyblock b/tests/preamble_tests/data/kb_6_4.keyblock new file mode 100644 index 0000000..8e137ab Binary files /dev/null and b/tests/preamble_tests/data/kb_6_4.keyblock differ diff --git a/tests/preamble_tests/data/kb_6_5.keyblock b/tests/preamble_tests/data/kb_6_5.keyblock new file mode 100644 index 0000000..07c14a3 Binary files /dev/null and b/tests/preamble_tests/data/kb_6_5.keyblock differ diff --git a/tests/preamble_tests/data/kb_6_6.keyblock b/tests/preamble_tests/data/kb_6_6.keyblock new file mode 100644 index 0000000..29579df Binary files /dev/null and b/tests/preamble_tests/data/kb_6_6.keyblock differ diff --git a/tests/preamble_tests/data/kb_6_7.keyblock b/tests/preamble_tests/data/kb_6_7.keyblock new file mode 100644 index 0000000..25a33e7 Binary files /dev/null and b/tests/preamble_tests/data/kb_6_7.keyblock differ diff --git a/tests/preamble_tests/data/kb_6_8.keyblock b/tests/preamble_tests/data/kb_6_8.keyblock new file mode 100644 index 0000000..e7ed2a0 Binary files /dev/null and b/tests/preamble_tests/data/kb_6_8.keyblock differ diff --git a/tests/preamble_tests/data/kb_6_9.keyblock b/tests/preamble_tests/data/kb_6_9.keyblock new file mode 100644 index 0000000..04564b0 Binary files /dev/null and b/tests/preamble_tests/data/kb_6_9.keyblock differ diff --git a/tests/preamble_tests/data/kb_7_0.keyblock b/tests/preamble_tests/data/kb_7_0.keyblock new file mode 100644 index 0000000..9540a0f Binary files /dev/null and b/tests/preamble_tests/data/kb_7_0.keyblock differ diff --git a/tests/preamble_tests/data/kb_7_1.keyblock b/tests/preamble_tests/data/kb_7_1.keyblock new file mode 100644 index 0000000..e1703d2 Binary files /dev/null and b/tests/preamble_tests/data/kb_7_1.keyblock differ diff --git a/tests/preamble_tests/data/kb_7_10.keyblock b/tests/preamble_tests/data/kb_7_10.keyblock new file mode 100644 index 0000000..b17c506 Binary files /dev/null and b/tests/preamble_tests/data/kb_7_10.keyblock differ diff --git a/tests/preamble_tests/data/kb_7_11.keyblock b/tests/preamble_tests/data/kb_7_11.keyblock new file mode 100644 index 0000000..1c4b725 Binary files /dev/null and b/tests/preamble_tests/data/kb_7_11.keyblock differ diff --git a/tests/preamble_tests/data/kb_7_2.keyblock b/tests/preamble_tests/data/kb_7_2.keyblock new file mode 100644 index 0000000..1b3c66f Binary files /dev/null and b/tests/preamble_tests/data/kb_7_2.keyblock differ diff --git a/tests/preamble_tests/data/kb_7_3.keyblock b/tests/preamble_tests/data/kb_7_3.keyblock new file mode 100644 index 0000000..c54e2a7 Binary files /dev/null and b/tests/preamble_tests/data/kb_7_3.keyblock differ diff --git a/tests/preamble_tests/data/kb_7_4.keyblock b/tests/preamble_tests/data/kb_7_4.keyblock new file mode 100644 index 0000000..3fa9363 Binary files /dev/null and b/tests/preamble_tests/data/kb_7_4.keyblock differ diff --git a/tests/preamble_tests/data/kb_7_5.keyblock b/tests/preamble_tests/data/kb_7_5.keyblock new file mode 100644 index 0000000..d13fb0b Binary files /dev/null and b/tests/preamble_tests/data/kb_7_5.keyblock differ diff --git a/tests/preamble_tests/data/kb_7_6.keyblock b/tests/preamble_tests/data/kb_7_6.keyblock new file mode 100644 index 0000000..23b3b6b Binary files /dev/null and b/tests/preamble_tests/data/kb_7_6.keyblock differ diff --git a/tests/preamble_tests/data/kb_7_7.keyblock b/tests/preamble_tests/data/kb_7_7.keyblock new file mode 100644 index 0000000..9537503 Binary files /dev/null and b/tests/preamble_tests/data/kb_7_7.keyblock differ diff --git a/tests/preamble_tests/data/kb_7_8.keyblock b/tests/preamble_tests/data/kb_7_8.keyblock new file mode 100644 index 0000000..37b6180 Binary files /dev/null and b/tests/preamble_tests/data/kb_7_8.keyblock differ diff --git a/tests/preamble_tests/data/kb_7_9.keyblock b/tests/preamble_tests/data/kb_7_9.keyblock new file mode 100644 index 0000000..72b4f53 Binary files /dev/null and b/tests/preamble_tests/data/kb_7_9.keyblock differ diff --git a/tests/preamble_tests/data/kb_8_0.keyblock b/tests/preamble_tests/data/kb_8_0.keyblock new file mode 100644 index 0000000..791bcab Binary files /dev/null and b/tests/preamble_tests/data/kb_8_0.keyblock differ diff --git a/tests/preamble_tests/data/kb_8_1.keyblock b/tests/preamble_tests/data/kb_8_1.keyblock new file mode 100644 index 0000000..42876ac Binary files /dev/null and b/tests/preamble_tests/data/kb_8_1.keyblock differ diff --git a/tests/preamble_tests/data/kb_8_10.keyblock b/tests/preamble_tests/data/kb_8_10.keyblock new file mode 100644 index 0000000..0552201 Binary files /dev/null and b/tests/preamble_tests/data/kb_8_10.keyblock differ diff --git a/tests/preamble_tests/data/kb_8_11.keyblock b/tests/preamble_tests/data/kb_8_11.keyblock new file mode 100644 index 0000000..9d0532d Binary files /dev/null and b/tests/preamble_tests/data/kb_8_11.keyblock differ diff --git a/tests/preamble_tests/data/kb_8_2.keyblock b/tests/preamble_tests/data/kb_8_2.keyblock new file mode 100644 index 0000000..26864a3 Binary files /dev/null and b/tests/preamble_tests/data/kb_8_2.keyblock differ diff --git a/tests/preamble_tests/data/kb_8_3.keyblock b/tests/preamble_tests/data/kb_8_3.keyblock new file mode 100644 index 0000000..5b4e9be Binary files /dev/null and b/tests/preamble_tests/data/kb_8_3.keyblock differ diff --git a/tests/preamble_tests/data/kb_8_4.keyblock b/tests/preamble_tests/data/kb_8_4.keyblock new file mode 100644 index 0000000..36c45a6 Binary files /dev/null and b/tests/preamble_tests/data/kb_8_4.keyblock differ diff --git a/tests/preamble_tests/data/kb_8_5.keyblock b/tests/preamble_tests/data/kb_8_5.keyblock new file mode 100644 index 0000000..ce19f3c Binary files /dev/null and b/tests/preamble_tests/data/kb_8_5.keyblock differ diff --git a/tests/preamble_tests/data/kb_8_6.keyblock b/tests/preamble_tests/data/kb_8_6.keyblock new file mode 100644 index 0000000..6c0bd48 Binary files /dev/null and b/tests/preamble_tests/data/kb_8_6.keyblock differ diff --git a/tests/preamble_tests/data/kb_8_7.keyblock b/tests/preamble_tests/data/kb_8_7.keyblock new file mode 100644 index 0000000..68ca984 Binary files /dev/null and b/tests/preamble_tests/data/kb_8_7.keyblock differ diff --git a/tests/preamble_tests/data/kb_8_8.keyblock b/tests/preamble_tests/data/kb_8_8.keyblock new file mode 100644 index 0000000..51d8668 Binary files /dev/null and b/tests/preamble_tests/data/kb_8_8.keyblock differ diff --git a/tests/preamble_tests/data/kb_8_9.keyblock b/tests/preamble_tests/data/kb_8_9.keyblock new file mode 100644 index 0000000..e7a766d Binary files /dev/null and b/tests/preamble_tests/data/kb_8_9.keyblock differ diff --git a/tests/preamble_tests/data/kb_9_0.keyblock b/tests/preamble_tests/data/kb_9_0.keyblock new file mode 100644 index 0000000..ce48a62 Binary files /dev/null and b/tests/preamble_tests/data/kb_9_0.keyblock differ diff --git a/tests/preamble_tests/data/kb_9_1.keyblock b/tests/preamble_tests/data/kb_9_1.keyblock new file mode 100644 index 0000000..7d2f049 Binary files /dev/null and b/tests/preamble_tests/data/kb_9_1.keyblock differ diff --git a/tests/preamble_tests/data/kb_9_10.keyblock b/tests/preamble_tests/data/kb_9_10.keyblock new file mode 100644 index 0000000..6cf97ad Binary files /dev/null and b/tests/preamble_tests/data/kb_9_10.keyblock differ diff --git a/tests/preamble_tests/data/kb_9_11.keyblock b/tests/preamble_tests/data/kb_9_11.keyblock new file mode 100644 index 0000000..026a5e6 Binary files /dev/null and b/tests/preamble_tests/data/kb_9_11.keyblock differ diff --git a/tests/preamble_tests/data/kb_9_2.keyblock b/tests/preamble_tests/data/kb_9_2.keyblock new file mode 100644 index 0000000..599d5bb Binary files /dev/null and b/tests/preamble_tests/data/kb_9_2.keyblock differ diff --git a/tests/preamble_tests/data/kb_9_3.keyblock b/tests/preamble_tests/data/kb_9_3.keyblock new file mode 100644 index 0000000..69166a5 Binary files /dev/null and b/tests/preamble_tests/data/kb_9_3.keyblock differ diff --git a/tests/preamble_tests/data/kb_9_4.keyblock b/tests/preamble_tests/data/kb_9_4.keyblock new file mode 100644 index 0000000..fbe775c Binary files /dev/null and b/tests/preamble_tests/data/kb_9_4.keyblock differ diff --git a/tests/preamble_tests/data/kb_9_5.keyblock b/tests/preamble_tests/data/kb_9_5.keyblock new file mode 100644 index 0000000..1eb625f Binary files /dev/null and b/tests/preamble_tests/data/kb_9_5.keyblock differ diff --git a/tests/preamble_tests/data/kb_9_6.keyblock b/tests/preamble_tests/data/kb_9_6.keyblock new file mode 100644 index 0000000..03234e8 Binary files /dev/null and b/tests/preamble_tests/data/kb_9_6.keyblock differ diff --git a/tests/preamble_tests/data/kb_9_7.keyblock b/tests/preamble_tests/data/kb_9_7.keyblock new file mode 100644 index 0000000..6597d33 Binary files /dev/null and b/tests/preamble_tests/data/kb_9_7.keyblock differ diff --git a/tests/preamble_tests/data/kb_9_8.keyblock b/tests/preamble_tests/data/kb_9_8.keyblock new file mode 100644 index 0000000..2174d12 Binary files /dev/null and b/tests/preamble_tests/data/kb_9_8.keyblock differ diff --git a/tests/preamble_tests/data/kb_9_9.keyblock b/tests/preamble_tests/data/kb_9_9.keyblock new file mode 100644 index 0000000..eef120e Binary files /dev/null and b/tests/preamble_tests/data/kb_9_9.keyblock differ diff --git a/tests/preamble_tests/data/root_0.vbprivk b/tests/preamble_tests/data/root_0.vbprivk new file mode 100644 index 0000000..3bb9a13 Binary files /dev/null and b/tests/preamble_tests/data/root_0.vbprivk differ diff --git a/tests/preamble_tests/data/root_0.vbpubk b/tests/preamble_tests/data/root_0.vbpubk new file mode 100644 index 0000000..eedbab5 Binary files /dev/null and b/tests/preamble_tests/data/root_0.vbpubk differ diff --git a/tests/preamble_tests/data/root_1.vbprivk b/tests/preamble_tests/data/root_1.vbprivk new file mode 100644 index 0000000..17fe479 Binary files /dev/null and b/tests/preamble_tests/data/root_1.vbprivk differ diff --git a/tests/preamble_tests/data/root_1.vbpubk b/tests/preamble_tests/data/root_1.vbpubk new file mode 100644 index 0000000..5956dfb Binary files /dev/null and b/tests/preamble_tests/data/root_1.vbpubk differ diff --git a/tests/preamble_tests/data/root_10.vbprivk b/tests/preamble_tests/data/root_10.vbprivk new file mode 100644 index 0000000..dfcd815 Binary files /dev/null and b/tests/preamble_tests/data/root_10.vbprivk differ diff --git a/tests/preamble_tests/data/root_10.vbpubk b/tests/preamble_tests/data/root_10.vbpubk new file mode 100644 index 0000000..2bfe6de Binary files /dev/null and b/tests/preamble_tests/data/root_10.vbpubk differ diff --git a/tests/preamble_tests/data/root_11.vbprivk b/tests/preamble_tests/data/root_11.vbprivk new file mode 100644 index 0000000..90e0281 Binary files /dev/null and b/tests/preamble_tests/data/root_11.vbprivk differ diff --git a/tests/preamble_tests/data/root_11.vbpubk b/tests/preamble_tests/data/root_11.vbpubk new file mode 100644 index 0000000..0e2cbdf Binary files /dev/null and b/tests/preamble_tests/data/root_11.vbpubk differ diff --git a/tests/preamble_tests/data/root_2.vbprivk b/tests/preamble_tests/data/root_2.vbprivk new file mode 100644 index 0000000..110f8cd Binary files /dev/null and b/tests/preamble_tests/data/root_2.vbprivk differ diff --git a/tests/preamble_tests/data/root_2.vbpubk b/tests/preamble_tests/data/root_2.vbpubk new file mode 100644 index 0000000..f70344c Binary files /dev/null and b/tests/preamble_tests/data/root_2.vbpubk differ diff --git a/tests/preamble_tests/data/root_3.vbprivk b/tests/preamble_tests/data/root_3.vbprivk new file mode 100644 index 0000000..4a5f022 Binary files /dev/null and b/tests/preamble_tests/data/root_3.vbprivk differ diff --git a/tests/preamble_tests/data/root_3.vbpubk b/tests/preamble_tests/data/root_3.vbpubk new file mode 100644 index 0000000..847f676 Binary files /dev/null and b/tests/preamble_tests/data/root_3.vbpubk differ diff --git a/tests/preamble_tests/data/root_4.vbprivk b/tests/preamble_tests/data/root_4.vbprivk new file mode 100644 index 0000000..58a8575 Binary files /dev/null and b/tests/preamble_tests/data/root_4.vbprivk differ diff --git a/tests/preamble_tests/data/root_4.vbpubk b/tests/preamble_tests/data/root_4.vbpubk new file mode 100644 index 0000000..5663351 Binary files /dev/null and b/tests/preamble_tests/data/root_4.vbpubk differ diff --git a/tests/preamble_tests/data/root_5.vbprivk b/tests/preamble_tests/data/root_5.vbprivk new file mode 100644 index 0000000..101f680 Binary files /dev/null and b/tests/preamble_tests/data/root_5.vbprivk differ diff --git a/tests/preamble_tests/data/root_5.vbpubk b/tests/preamble_tests/data/root_5.vbpubk new file mode 100644 index 0000000..ec5019b Binary files /dev/null and b/tests/preamble_tests/data/root_5.vbpubk differ diff --git a/tests/preamble_tests/data/root_6.vbprivk b/tests/preamble_tests/data/root_6.vbprivk new file mode 100644 index 0000000..54b424d Binary files /dev/null and b/tests/preamble_tests/data/root_6.vbprivk differ diff --git a/tests/preamble_tests/data/root_6.vbpubk b/tests/preamble_tests/data/root_6.vbpubk new file mode 100644 index 0000000..b6b3803 Binary files /dev/null and b/tests/preamble_tests/data/root_6.vbpubk differ diff --git a/tests/preamble_tests/data/root_7.vbprivk b/tests/preamble_tests/data/root_7.vbprivk new file mode 100644 index 0000000..cbb3292 Binary files /dev/null and b/tests/preamble_tests/data/root_7.vbprivk differ diff --git a/tests/preamble_tests/data/root_7.vbpubk b/tests/preamble_tests/data/root_7.vbpubk new file mode 100644 index 0000000..e829fae Binary files /dev/null and b/tests/preamble_tests/data/root_7.vbpubk differ diff --git a/tests/preamble_tests/data/root_8.vbprivk b/tests/preamble_tests/data/root_8.vbprivk new file mode 100644 index 0000000..8075f45 Binary files /dev/null and b/tests/preamble_tests/data/root_8.vbprivk differ diff --git a/tests/preamble_tests/data/root_8.vbpubk b/tests/preamble_tests/data/root_8.vbpubk new file mode 100644 index 0000000..31d1a4b Binary files /dev/null and b/tests/preamble_tests/data/root_8.vbpubk differ diff --git a/tests/preamble_tests/data/root_9.vbprivk b/tests/preamble_tests/data/root_9.vbprivk new file mode 100644 index 0000000..f78df54 Binary files /dev/null and b/tests/preamble_tests/data/root_9.vbprivk differ diff --git a/tests/preamble_tests/data/root_9.vbpubk b/tests/preamble_tests/data/root_9.vbpubk new file mode 100644 index 0000000..df4d836 Binary files /dev/null and b/tests/preamble_tests/data/root_9.vbpubk differ diff --git a/tests/preamble_tests/preamble_v2x/fw_0_0.vblock b/tests/preamble_tests/preamble_v2x/fw_0_0.vblock new file mode 100644 index 0000000..2345beb Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_0_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_0_1.vblock b/tests/preamble_tests/preamble_v2x/fw_0_1.vblock new file mode 100644 index 0000000..bbbb1ce Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_0_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_0_10.vblock b/tests/preamble_tests/preamble_v2x/fw_0_10.vblock new file mode 100644 index 0000000..3607ed8 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_0_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_0_11.vblock b/tests/preamble_tests/preamble_v2x/fw_0_11.vblock new file mode 100644 index 0000000..3226144 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_0_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_0_2.vblock b/tests/preamble_tests/preamble_v2x/fw_0_2.vblock new file mode 100644 index 0000000..0e73da0 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_0_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_0_3.vblock b/tests/preamble_tests/preamble_v2x/fw_0_3.vblock new file mode 100644 index 0000000..4363a18 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_0_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_0_4.vblock b/tests/preamble_tests/preamble_v2x/fw_0_4.vblock new file mode 100644 index 0000000..fc7aa13 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_0_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_0_5.vblock b/tests/preamble_tests/preamble_v2x/fw_0_5.vblock new file mode 100644 index 0000000..ed5a251 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_0_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_0_6.vblock b/tests/preamble_tests/preamble_v2x/fw_0_6.vblock new file mode 100644 index 0000000..c11261b Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_0_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_0_7.vblock b/tests/preamble_tests/preamble_v2x/fw_0_7.vblock new file mode 100644 index 0000000..5f6f5e7 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_0_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_0_8.vblock b/tests/preamble_tests/preamble_v2x/fw_0_8.vblock new file mode 100644 index 0000000..935a73a Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_0_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_0_9.vblock b/tests/preamble_tests/preamble_v2x/fw_0_9.vblock new file mode 100644 index 0000000..289a73f Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_0_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_10_0.vblock b/tests/preamble_tests/preamble_v2x/fw_10_0.vblock new file mode 100644 index 0000000..3f178d8 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_10_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_10_1.vblock b/tests/preamble_tests/preamble_v2x/fw_10_1.vblock new file mode 100644 index 0000000..9d2c286 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_10_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_10_10.vblock b/tests/preamble_tests/preamble_v2x/fw_10_10.vblock new file mode 100644 index 0000000..e1bc3c3 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_10_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_10_11.vblock b/tests/preamble_tests/preamble_v2x/fw_10_11.vblock new file mode 100644 index 0000000..1a99743 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_10_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_10_2.vblock b/tests/preamble_tests/preamble_v2x/fw_10_2.vblock new file mode 100644 index 0000000..3435014 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_10_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_10_3.vblock b/tests/preamble_tests/preamble_v2x/fw_10_3.vblock new file mode 100644 index 0000000..7b01221 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_10_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_10_4.vblock b/tests/preamble_tests/preamble_v2x/fw_10_4.vblock new file mode 100644 index 0000000..bbac0cc Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_10_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_10_5.vblock b/tests/preamble_tests/preamble_v2x/fw_10_5.vblock new file mode 100644 index 0000000..a2d3ba4 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_10_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_10_6.vblock b/tests/preamble_tests/preamble_v2x/fw_10_6.vblock new file mode 100644 index 0000000..c67c3ce Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_10_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_10_7.vblock b/tests/preamble_tests/preamble_v2x/fw_10_7.vblock new file mode 100644 index 0000000..9aab1c9 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_10_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_10_8.vblock b/tests/preamble_tests/preamble_v2x/fw_10_8.vblock new file mode 100644 index 0000000..72666aa Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_10_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_10_9.vblock b/tests/preamble_tests/preamble_v2x/fw_10_9.vblock new file mode 100644 index 0000000..d90f124 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_10_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_11_0.vblock b/tests/preamble_tests/preamble_v2x/fw_11_0.vblock new file mode 100644 index 0000000..c9d3602 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_11_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_11_1.vblock b/tests/preamble_tests/preamble_v2x/fw_11_1.vblock new file mode 100644 index 0000000..07a1427 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_11_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_11_10.vblock b/tests/preamble_tests/preamble_v2x/fw_11_10.vblock new file mode 100644 index 0000000..86062ea Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_11_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_11_11.vblock b/tests/preamble_tests/preamble_v2x/fw_11_11.vblock new file mode 100644 index 0000000..f508618 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_11_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_11_2.vblock b/tests/preamble_tests/preamble_v2x/fw_11_2.vblock new file mode 100644 index 0000000..26cd2f9 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_11_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_11_3.vblock b/tests/preamble_tests/preamble_v2x/fw_11_3.vblock new file mode 100644 index 0000000..2283f4a Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_11_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_11_4.vblock b/tests/preamble_tests/preamble_v2x/fw_11_4.vblock new file mode 100644 index 0000000..98c8d51 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_11_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_11_5.vblock b/tests/preamble_tests/preamble_v2x/fw_11_5.vblock new file mode 100644 index 0000000..a082ed0 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_11_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_11_6.vblock b/tests/preamble_tests/preamble_v2x/fw_11_6.vblock new file mode 100644 index 0000000..9ada8fa Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_11_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_11_7.vblock b/tests/preamble_tests/preamble_v2x/fw_11_7.vblock new file mode 100644 index 0000000..a4fb3cb Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_11_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_11_8.vblock b/tests/preamble_tests/preamble_v2x/fw_11_8.vblock new file mode 100644 index 0000000..cbe1ef8 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_11_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_11_9.vblock b/tests/preamble_tests/preamble_v2x/fw_11_9.vblock new file mode 100644 index 0000000..9dea282 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_11_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_1_0.vblock b/tests/preamble_tests/preamble_v2x/fw_1_0.vblock new file mode 100644 index 0000000..9e26cf7 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_1_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_1_1.vblock b/tests/preamble_tests/preamble_v2x/fw_1_1.vblock new file mode 100644 index 0000000..e74810d Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_1_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_1_10.vblock b/tests/preamble_tests/preamble_v2x/fw_1_10.vblock new file mode 100644 index 0000000..578b8e6 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_1_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_1_11.vblock b/tests/preamble_tests/preamble_v2x/fw_1_11.vblock new file mode 100644 index 0000000..91bc6e3 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_1_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_1_2.vblock b/tests/preamble_tests/preamble_v2x/fw_1_2.vblock new file mode 100644 index 0000000..9bf19a5 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_1_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_1_3.vblock b/tests/preamble_tests/preamble_v2x/fw_1_3.vblock new file mode 100644 index 0000000..60ce324 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_1_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_1_4.vblock b/tests/preamble_tests/preamble_v2x/fw_1_4.vblock new file mode 100644 index 0000000..40d52fc Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_1_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_1_5.vblock b/tests/preamble_tests/preamble_v2x/fw_1_5.vblock new file mode 100644 index 0000000..855250c Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_1_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_1_6.vblock b/tests/preamble_tests/preamble_v2x/fw_1_6.vblock new file mode 100644 index 0000000..ff9c30a Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_1_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_1_7.vblock b/tests/preamble_tests/preamble_v2x/fw_1_7.vblock new file mode 100644 index 0000000..1616e74 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_1_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_1_8.vblock b/tests/preamble_tests/preamble_v2x/fw_1_8.vblock new file mode 100644 index 0000000..c66476c Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_1_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_1_9.vblock b/tests/preamble_tests/preamble_v2x/fw_1_9.vblock new file mode 100644 index 0000000..53416ff Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_1_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_2_0.vblock b/tests/preamble_tests/preamble_v2x/fw_2_0.vblock new file mode 100644 index 0000000..e9d5fc0 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_2_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_2_1.vblock b/tests/preamble_tests/preamble_v2x/fw_2_1.vblock new file mode 100644 index 0000000..490a1f1 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_2_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_2_10.vblock b/tests/preamble_tests/preamble_v2x/fw_2_10.vblock new file mode 100644 index 0000000..fefecea Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_2_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_2_11.vblock b/tests/preamble_tests/preamble_v2x/fw_2_11.vblock new file mode 100644 index 0000000..eb9967b Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_2_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_2_2.vblock b/tests/preamble_tests/preamble_v2x/fw_2_2.vblock new file mode 100644 index 0000000..7d1c408 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_2_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_2_3.vblock b/tests/preamble_tests/preamble_v2x/fw_2_3.vblock new file mode 100644 index 0000000..f5655ff Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_2_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_2_4.vblock b/tests/preamble_tests/preamble_v2x/fw_2_4.vblock new file mode 100644 index 0000000..c99325d Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_2_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_2_5.vblock b/tests/preamble_tests/preamble_v2x/fw_2_5.vblock new file mode 100644 index 0000000..0d0dfeb Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_2_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_2_6.vblock b/tests/preamble_tests/preamble_v2x/fw_2_6.vblock new file mode 100644 index 0000000..dfd6098 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_2_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_2_7.vblock b/tests/preamble_tests/preamble_v2x/fw_2_7.vblock new file mode 100644 index 0000000..bc12c53 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_2_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_2_8.vblock b/tests/preamble_tests/preamble_v2x/fw_2_8.vblock new file mode 100644 index 0000000..31b3499 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_2_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_2_9.vblock b/tests/preamble_tests/preamble_v2x/fw_2_9.vblock new file mode 100644 index 0000000..56d1bd4 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_2_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_3_0.vblock b/tests/preamble_tests/preamble_v2x/fw_3_0.vblock new file mode 100644 index 0000000..8e336bf Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_3_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_3_1.vblock b/tests/preamble_tests/preamble_v2x/fw_3_1.vblock new file mode 100644 index 0000000..5a3211c Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_3_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_3_10.vblock b/tests/preamble_tests/preamble_v2x/fw_3_10.vblock new file mode 100644 index 0000000..f5cc853 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_3_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_3_11.vblock b/tests/preamble_tests/preamble_v2x/fw_3_11.vblock new file mode 100644 index 0000000..6d0589a Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_3_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_3_2.vblock b/tests/preamble_tests/preamble_v2x/fw_3_2.vblock new file mode 100644 index 0000000..bf306cc Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_3_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_3_3.vblock b/tests/preamble_tests/preamble_v2x/fw_3_3.vblock new file mode 100644 index 0000000..2633870 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_3_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_3_4.vblock b/tests/preamble_tests/preamble_v2x/fw_3_4.vblock new file mode 100644 index 0000000..27331a0 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_3_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_3_5.vblock b/tests/preamble_tests/preamble_v2x/fw_3_5.vblock new file mode 100644 index 0000000..a9fa680 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_3_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_3_6.vblock b/tests/preamble_tests/preamble_v2x/fw_3_6.vblock new file mode 100644 index 0000000..c2ba832 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_3_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_3_7.vblock b/tests/preamble_tests/preamble_v2x/fw_3_7.vblock new file mode 100644 index 0000000..770d739 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_3_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_3_8.vblock b/tests/preamble_tests/preamble_v2x/fw_3_8.vblock new file mode 100644 index 0000000..b77a502 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_3_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_3_9.vblock b/tests/preamble_tests/preamble_v2x/fw_3_9.vblock new file mode 100644 index 0000000..a3679a1 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_3_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_4_0.vblock b/tests/preamble_tests/preamble_v2x/fw_4_0.vblock new file mode 100644 index 0000000..f2f8976 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_4_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_4_1.vblock b/tests/preamble_tests/preamble_v2x/fw_4_1.vblock new file mode 100644 index 0000000..90f919f Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_4_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_4_10.vblock b/tests/preamble_tests/preamble_v2x/fw_4_10.vblock new file mode 100644 index 0000000..0f60ee6 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_4_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_4_11.vblock b/tests/preamble_tests/preamble_v2x/fw_4_11.vblock new file mode 100644 index 0000000..228bad4 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_4_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_4_2.vblock b/tests/preamble_tests/preamble_v2x/fw_4_2.vblock new file mode 100644 index 0000000..e46f4c6 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_4_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_4_3.vblock b/tests/preamble_tests/preamble_v2x/fw_4_3.vblock new file mode 100644 index 0000000..91ec252 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_4_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_4_4.vblock b/tests/preamble_tests/preamble_v2x/fw_4_4.vblock new file mode 100644 index 0000000..6331c7b Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_4_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_4_5.vblock b/tests/preamble_tests/preamble_v2x/fw_4_5.vblock new file mode 100644 index 0000000..7f63bad Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_4_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_4_6.vblock b/tests/preamble_tests/preamble_v2x/fw_4_6.vblock new file mode 100644 index 0000000..d98b709 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_4_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_4_7.vblock b/tests/preamble_tests/preamble_v2x/fw_4_7.vblock new file mode 100644 index 0000000..5dd2aae Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_4_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_4_8.vblock b/tests/preamble_tests/preamble_v2x/fw_4_8.vblock new file mode 100644 index 0000000..e7fcbc7 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_4_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_4_9.vblock b/tests/preamble_tests/preamble_v2x/fw_4_9.vblock new file mode 100644 index 0000000..05f3e9a Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_4_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_5_0.vblock b/tests/preamble_tests/preamble_v2x/fw_5_0.vblock new file mode 100644 index 0000000..876a2e3 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_5_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_5_1.vblock b/tests/preamble_tests/preamble_v2x/fw_5_1.vblock new file mode 100644 index 0000000..6ba0162 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_5_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_5_10.vblock b/tests/preamble_tests/preamble_v2x/fw_5_10.vblock new file mode 100644 index 0000000..53b00f0 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_5_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_5_11.vblock b/tests/preamble_tests/preamble_v2x/fw_5_11.vblock new file mode 100644 index 0000000..9e1a63f Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_5_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_5_2.vblock b/tests/preamble_tests/preamble_v2x/fw_5_2.vblock new file mode 100644 index 0000000..7c2bc1a Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_5_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_5_3.vblock b/tests/preamble_tests/preamble_v2x/fw_5_3.vblock new file mode 100644 index 0000000..e5301dc Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_5_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_5_4.vblock b/tests/preamble_tests/preamble_v2x/fw_5_4.vblock new file mode 100644 index 0000000..6271c96 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_5_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_5_5.vblock b/tests/preamble_tests/preamble_v2x/fw_5_5.vblock new file mode 100644 index 0000000..93ac33a Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_5_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_5_6.vblock b/tests/preamble_tests/preamble_v2x/fw_5_6.vblock new file mode 100644 index 0000000..3a692c8 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_5_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_5_7.vblock b/tests/preamble_tests/preamble_v2x/fw_5_7.vblock new file mode 100644 index 0000000..9563c43 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_5_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_5_8.vblock b/tests/preamble_tests/preamble_v2x/fw_5_8.vblock new file mode 100644 index 0000000..264fe2e Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_5_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_5_9.vblock b/tests/preamble_tests/preamble_v2x/fw_5_9.vblock new file mode 100644 index 0000000..e475377 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_5_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_6_0.vblock b/tests/preamble_tests/preamble_v2x/fw_6_0.vblock new file mode 100644 index 0000000..6041f55 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_6_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_6_1.vblock b/tests/preamble_tests/preamble_v2x/fw_6_1.vblock new file mode 100644 index 0000000..0eb1b65 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_6_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_6_10.vblock b/tests/preamble_tests/preamble_v2x/fw_6_10.vblock new file mode 100644 index 0000000..e4fd494 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_6_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_6_11.vblock b/tests/preamble_tests/preamble_v2x/fw_6_11.vblock new file mode 100644 index 0000000..9607f1c Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_6_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_6_2.vblock b/tests/preamble_tests/preamble_v2x/fw_6_2.vblock new file mode 100644 index 0000000..e40941a Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_6_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_6_3.vblock b/tests/preamble_tests/preamble_v2x/fw_6_3.vblock new file mode 100644 index 0000000..2a56aae Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_6_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_6_4.vblock b/tests/preamble_tests/preamble_v2x/fw_6_4.vblock new file mode 100644 index 0000000..a14270c Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_6_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_6_5.vblock b/tests/preamble_tests/preamble_v2x/fw_6_5.vblock new file mode 100644 index 0000000..e4da434 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_6_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_6_6.vblock b/tests/preamble_tests/preamble_v2x/fw_6_6.vblock new file mode 100644 index 0000000..798491f Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_6_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_6_7.vblock b/tests/preamble_tests/preamble_v2x/fw_6_7.vblock new file mode 100644 index 0000000..ce19ac3 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_6_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_6_8.vblock b/tests/preamble_tests/preamble_v2x/fw_6_8.vblock new file mode 100644 index 0000000..85cb792 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_6_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_6_9.vblock b/tests/preamble_tests/preamble_v2x/fw_6_9.vblock new file mode 100644 index 0000000..4093680 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_6_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_7_0.vblock b/tests/preamble_tests/preamble_v2x/fw_7_0.vblock new file mode 100644 index 0000000..921718d Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_7_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_7_1.vblock b/tests/preamble_tests/preamble_v2x/fw_7_1.vblock new file mode 100644 index 0000000..ea17d55 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_7_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_7_10.vblock b/tests/preamble_tests/preamble_v2x/fw_7_10.vblock new file mode 100644 index 0000000..03e218a Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_7_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_7_11.vblock b/tests/preamble_tests/preamble_v2x/fw_7_11.vblock new file mode 100644 index 0000000..8c0df1a Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_7_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_7_2.vblock b/tests/preamble_tests/preamble_v2x/fw_7_2.vblock new file mode 100644 index 0000000..4ad44a8 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_7_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_7_3.vblock b/tests/preamble_tests/preamble_v2x/fw_7_3.vblock new file mode 100644 index 0000000..fcf5f89 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_7_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_7_4.vblock b/tests/preamble_tests/preamble_v2x/fw_7_4.vblock new file mode 100644 index 0000000..67deffe Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_7_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_7_5.vblock b/tests/preamble_tests/preamble_v2x/fw_7_5.vblock new file mode 100644 index 0000000..0077be7 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_7_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_7_6.vblock b/tests/preamble_tests/preamble_v2x/fw_7_6.vblock new file mode 100644 index 0000000..a1025fd Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_7_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_7_7.vblock b/tests/preamble_tests/preamble_v2x/fw_7_7.vblock new file mode 100644 index 0000000..be91a8c Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_7_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_7_8.vblock b/tests/preamble_tests/preamble_v2x/fw_7_8.vblock new file mode 100644 index 0000000..f844982 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_7_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_7_9.vblock b/tests/preamble_tests/preamble_v2x/fw_7_9.vblock new file mode 100644 index 0000000..3432ea5 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_7_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_8_0.vblock b/tests/preamble_tests/preamble_v2x/fw_8_0.vblock new file mode 100644 index 0000000..3f9183a Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_8_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_8_1.vblock b/tests/preamble_tests/preamble_v2x/fw_8_1.vblock new file mode 100644 index 0000000..74270d0 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_8_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_8_10.vblock b/tests/preamble_tests/preamble_v2x/fw_8_10.vblock new file mode 100644 index 0000000..e38e212 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_8_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_8_11.vblock b/tests/preamble_tests/preamble_v2x/fw_8_11.vblock new file mode 100644 index 0000000..84ba8c7 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_8_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_8_2.vblock b/tests/preamble_tests/preamble_v2x/fw_8_2.vblock new file mode 100644 index 0000000..459e9bc Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_8_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_8_3.vblock b/tests/preamble_tests/preamble_v2x/fw_8_3.vblock new file mode 100644 index 0000000..bc9ab09 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_8_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_8_4.vblock b/tests/preamble_tests/preamble_v2x/fw_8_4.vblock new file mode 100644 index 0000000..5c087fe Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_8_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_8_5.vblock b/tests/preamble_tests/preamble_v2x/fw_8_5.vblock new file mode 100644 index 0000000..53a8c69 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_8_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_8_6.vblock b/tests/preamble_tests/preamble_v2x/fw_8_6.vblock new file mode 100644 index 0000000..b0656a1 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_8_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_8_7.vblock b/tests/preamble_tests/preamble_v2x/fw_8_7.vblock new file mode 100644 index 0000000..c780aee Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_8_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_8_8.vblock b/tests/preamble_tests/preamble_v2x/fw_8_8.vblock new file mode 100644 index 0000000..193c5b8 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_8_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_8_9.vblock b/tests/preamble_tests/preamble_v2x/fw_8_9.vblock new file mode 100644 index 0000000..6d109d4 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_8_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_9_0.vblock b/tests/preamble_tests/preamble_v2x/fw_9_0.vblock new file mode 100644 index 0000000..2fc6d4f Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_9_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_9_1.vblock b/tests/preamble_tests/preamble_v2x/fw_9_1.vblock new file mode 100644 index 0000000..d04ab0f Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_9_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_9_10.vblock b/tests/preamble_tests/preamble_v2x/fw_9_10.vblock new file mode 100644 index 0000000..8160172 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_9_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_9_11.vblock b/tests/preamble_tests/preamble_v2x/fw_9_11.vblock new file mode 100644 index 0000000..acabf1f Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_9_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_9_2.vblock b/tests/preamble_tests/preamble_v2x/fw_9_2.vblock new file mode 100644 index 0000000..bfa38fd Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_9_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_9_3.vblock b/tests/preamble_tests/preamble_v2x/fw_9_3.vblock new file mode 100644 index 0000000..769cb2d Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_9_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_9_4.vblock b/tests/preamble_tests/preamble_v2x/fw_9_4.vblock new file mode 100644 index 0000000..fd8a402 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_9_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_9_5.vblock b/tests/preamble_tests/preamble_v2x/fw_9_5.vblock new file mode 100644 index 0000000..1952c85 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_9_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_9_6.vblock b/tests/preamble_tests/preamble_v2x/fw_9_6.vblock new file mode 100644 index 0000000..a05ec6c Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_9_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_9_7.vblock b/tests/preamble_tests/preamble_v2x/fw_9_7.vblock new file mode 100644 index 0000000..0b8bddd Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_9_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_9_8.vblock b/tests/preamble_tests/preamble_v2x/fw_9_8.vblock new file mode 100644 index 0000000..5d8655b Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_9_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/fw_9_9.vblock b/tests/preamble_tests/preamble_v2x/fw_9_9.vblock new file mode 100644 index 0000000..ee574e6 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/fw_9_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_0_0.vblock b/tests/preamble_tests/preamble_v2x/kern_0_0.vblock new file mode 100644 index 0000000..2d766e6 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_0_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_0_1.vblock b/tests/preamble_tests/preamble_v2x/kern_0_1.vblock new file mode 100644 index 0000000..91a732f Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_0_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_0_10.vblock b/tests/preamble_tests/preamble_v2x/kern_0_10.vblock new file mode 100644 index 0000000..6f317f8 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_0_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_0_11.vblock b/tests/preamble_tests/preamble_v2x/kern_0_11.vblock new file mode 100644 index 0000000..12353d7 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_0_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_0_2.vblock b/tests/preamble_tests/preamble_v2x/kern_0_2.vblock new file mode 100644 index 0000000..eac60c4 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_0_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_0_3.vblock b/tests/preamble_tests/preamble_v2x/kern_0_3.vblock new file mode 100644 index 0000000..0310591 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_0_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_0_4.vblock b/tests/preamble_tests/preamble_v2x/kern_0_4.vblock new file mode 100644 index 0000000..d3b73e1 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_0_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_0_5.vblock b/tests/preamble_tests/preamble_v2x/kern_0_5.vblock new file mode 100644 index 0000000..d29e642 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_0_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_0_6.vblock b/tests/preamble_tests/preamble_v2x/kern_0_6.vblock new file mode 100644 index 0000000..a2987ce Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_0_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_0_7.vblock b/tests/preamble_tests/preamble_v2x/kern_0_7.vblock new file mode 100644 index 0000000..ff064d3 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_0_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_0_8.vblock b/tests/preamble_tests/preamble_v2x/kern_0_8.vblock new file mode 100644 index 0000000..3f420c1 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_0_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_0_9.vblock b/tests/preamble_tests/preamble_v2x/kern_0_9.vblock new file mode 100644 index 0000000..cf4d8dd Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_0_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_10_0.vblock b/tests/preamble_tests/preamble_v2x/kern_10_0.vblock new file mode 100644 index 0000000..385bd9b Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_10_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_10_1.vblock b/tests/preamble_tests/preamble_v2x/kern_10_1.vblock new file mode 100644 index 0000000..0f8277d Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_10_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_10_10.vblock b/tests/preamble_tests/preamble_v2x/kern_10_10.vblock new file mode 100644 index 0000000..859e859 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_10_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_10_11.vblock b/tests/preamble_tests/preamble_v2x/kern_10_11.vblock new file mode 100644 index 0000000..341d339 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_10_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_10_2.vblock b/tests/preamble_tests/preamble_v2x/kern_10_2.vblock new file mode 100644 index 0000000..bed4935 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_10_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_10_3.vblock b/tests/preamble_tests/preamble_v2x/kern_10_3.vblock new file mode 100644 index 0000000..b7914f1 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_10_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_10_4.vblock b/tests/preamble_tests/preamble_v2x/kern_10_4.vblock new file mode 100644 index 0000000..7dc8b0e Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_10_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_10_5.vblock b/tests/preamble_tests/preamble_v2x/kern_10_5.vblock new file mode 100644 index 0000000..863af76 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_10_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_10_6.vblock b/tests/preamble_tests/preamble_v2x/kern_10_6.vblock new file mode 100644 index 0000000..2ddda3f Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_10_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_10_7.vblock b/tests/preamble_tests/preamble_v2x/kern_10_7.vblock new file mode 100644 index 0000000..9166f31 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_10_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_10_8.vblock b/tests/preamble_tests/preamble_v2x/kern_10_8.vblock new file mode 100644 index 0000000..6d1be0f Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_10_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_10_9.vblock b/tests/preamble_tests/preamble_v2x/kern_10_9.vblock new file mode 100644 index 0000000..712ab31 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_10_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_11_0.vblock b/tests/preamble_tests/preamble_v2x/kern_11_0.vblock new file mode 100644 index 0000000..4a7bdb4 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_11_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_11_1.vblock b/tests/preamble_tests/preamble_v2x/kern_11_1.vblock new file mode 100644 index 0000000..02f8b6e Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_11_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_11_10.vblock b/tests/preamble_tests/preamble_v2x/kern_11_10.vblock new file mode 100644 index 0000000..a10e66d Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_11_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_11_11.vblock b/tests/preamble_tests/preamble_v2x/kern_11_11.vblock new file mode 100644 index 0000000..0ad90a1 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_11_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_11_2.vblock b/tests/preamble_tests/preamble_v2x/kern_11_2.vblock new file mode 100644 index 0000000..a3d7aaf Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_11_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_11_3.vblock b/tests/preamble_tests/preamble_v2x/kern_11_3.vblock new file mode 100644 index 0000000..60cde01 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_11_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_11_4.vblock b/tests/preamble_tests/preamble_v2x/kern_11_4.vblock new file mode 100644 index 0000000..e42ad1b Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_11_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_11_5.vblock b/tests/preamble_tests/preamble_v2x/kern_11_5.vblock new file mode 100644 index 0000000..5b5c0cb Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_11_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_11_6.vblock b/tests/preamble_tests/preamble_v2x/kern_11_6.vblock new file mode 100644 index 0000000..acb80a8 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_11_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_11_7.vblock b/tests/preamble_tests/preamble_v2x/kern_11_7.vblock new file mode 100644 index 0000000..00446d5 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_11_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_11_8.vblock b/tests/preamble_tests/preamble_v2x/kern_11_8.vblock new file mode 100644 index 0000000..91f2264 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_11_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_11_9.vblock b/tests/preamble_tests/preamble_v2x/kern_11_9.vblock new file mode 100644 index 0000000..73d4626 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_11_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_1_0.vblock b/tests/preamble_tests/preamble_v2x/kern_1_0.vblock new file mode 100644 index 0000000..9da762a Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_1_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_1_1.vblock b/tests/preamble_tests/preamble_v2x/kern_1_1.vblock new file mode 100644 index 0000000..86b665a Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_1_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_1_10.vblock b/tests/preamble_tests/preamble_v2x/kern_1_10.vblock new file mode 100644 index 0000000..3e58df0 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_1_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_1_11.vblock b/tests/preamble_tests/preamble_v2x/kern_1_11.vblock new file mode 100644 index 0000000..421f63c Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_1_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_1_2.vblock b/tests/preamble_tests/preamble_v2x/kern_1_2.vblock new file mode 100644 index 0000000..2409233 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_1_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_1_3.vblock b/tests/preamble_tests/preamble_v2x/kern_1_3.vblock new file mode 100644 index 0000000..1bdba9d Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_1_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_1_4.vblock b/tests/preamble_tests/preamble_v2x/kern_1_4.vblock new file mode 100644 index 0000000..f87045a Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_1_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_1_5.vblock b/tests/preamble_tests/preamble_v2x/kern_1_5.vblock new file mode 100644 index 0000000..9f0dab3 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_1_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_1_6.vblock b/tests/preamble_tests/preamble_v2x/kern_1_6.vblock new file mode 100644 index 0000000..9650d36 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_1_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_1_7.vblock b/tests/preamble_tests/preamble_v2x/kern_1_7.vblock new file mode 100644 index 0000000..f6293f8 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_1_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_1_8.vblock b/tests/preamble_tests/preamble_v2x/kern_1_8.vblock new file mode 100644 index 0000000..c594f32 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_1_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_1_9.vblock b/tests/preamble_tests/preamble_v2x/kern_1_9.vblock new file mode 100644 index 0000000..7bcbd42 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_1_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_2_0.vblock b/tests/preamble_tests/preamble_v2x/kern_2_0.vblock new file mode 100644 index 0000000..9f43f12 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_2_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_2_1.vblock b/tests/preamble_tests/preamble_v2x/kern_2_1.vblock new file mode 100644 index 0000000..973d7a7 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_2_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_2_10.vblock b/tests/preamble_tests/preamble_v2x/kern_2_10.vblock new file mode 100644 index 0000000..87eeb6d Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_2_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_2_11.vblock b/tests/preamble_tests/preamble_v2x/kern_2_11.vblock new file mode 100644 index 0000000..e2ca47d Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_2_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_2_2.vblock b/tests/preamble_tests/preamble_v2x/kern_2_2.vblock new file mode 100644 index 0000000..b8ea351 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_2_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_2_3.vblock b/tests/preamble_tests/preamble_v2x/kern_2_3.vblock new file mode 100644 index 0000000..2361ea3 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_2_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_2_4.vblock b/tests/preamble_tests/preamble_v2x/kern_2_4.vblock new file mode 100644 index 0000000..d89a8dd Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_2_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_2_5.vblock b/tests/preamble_tests/preamble_v2x/kern_2_5.vblock new file mode 100644 index 0000000..6840eb5 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_2_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_2_6.vblock b/tests/preamble_tests/preamble_v2x/kern_2_6.vblock new file mode 100644 index 0000000..de39553 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_2_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_2_7.vblock b/tests/preamble_tests/preamble_v2x/kern_2_7.vblock new file mode 100644 index 0000000..124d1e9 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_2_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_2_8.vblock b/tests/preamble_tests/preamble_v2x/kern_2_8.vblock new file mode 100644 index 0000000..af6ffdb Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_2_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_2_9.vblock b/tests/preamble_tests/preamble_v2x/kern_2_9.vblock new file mode 100644 index 0000000..6b09c7e Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_2_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_3_0.vblock b/tests/preamble_tests/preamble_v2x/kern_3_0.vblock new file mode 100644 index 0000000..9086e89 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_3_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_3_1.vblock b/tests/preamble_tests/preamble_v2x/kern_3_1.vblock new file mode 100644 index 0000000..b07ec0f Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_3_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_3_10.vblock b/tests/preamble_tests/preamble_v2x/kern_3_10.vblock new file mode 100644 index 0000000..d412135 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_3_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_3_11.vblock b/tests/preamble_tests/preamble_v2x/kern_3_11.vblock new file mode 100644 index 0000000..6fdf6a8 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_3_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_3_2.vblock b/tests/preamble_tests/preamble_v2x/kern_3_2.vblock new file mode 100644 index 0000000..bfb3334 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_3_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_3_3.vblock b/tests/preamble_tests/preamble_v2x/kern_3_3.vblock new file mode 100644 index 0000000..8f3eaed Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_3_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_3_4.vblock b/tests/preamble_tests/preamble_v2x/kern_3_4.vblock new file mode 100644 index 0000000..0a876e7 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_3_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_3_5.vblock b/tests/preamble_tests/preamble_v2x/kern_3_5.vblock new file mode 100644 index 0000000..fe26af2 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_3_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_3_6.vblock b/tests/preamble_tests/preamble_v2x/kern_3_6.vblock new file mode 100644 index 0000000..53a1147 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_3_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_3_7.vblock b/tests/preamble_tests/preamble_v2x/kern_3_7.vblock new file mode 100644 index 0000000..3602540 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_3_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_3_8.vblock b/tests/preamble_tests/preamble_v2x/kern_3_8.vblock new file mode 100644 index 0000000..1463459 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_3_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_3_9.vblock b/tests/preamble_tests/preamble_v2x/kern_3_9.vblock new file mode 100644 index 0000000..0b169cb Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_3_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_4_0.vblock b/tests/preamble_tests/preamble_v2x/kern_4_0.vblock new file mode 100644 index 0000000..fe06eb6 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_4_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_4_1.vblock b/tests/preamble_tests/preamble_v2x/kern_4_1.vblock new file mode 100644 index 0000000..23dcc89 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_4_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_4_10.vblock b/tests/preamble_tests/preamble_v2x/kern_4_10.vblock new file mode 100644 index 0000000..0fd6146 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_4_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_4_11.vblock b/tests/preamble_tests/preamble_v2x/kern_4_11.vblock new file mode 100644 index 0000000..e845347 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_4_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_4_2.vblock b/tests/preamble_tests/preamble_v2x/kern_4_2.vblock new file mode 100644 index 0000000..069597f Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_4_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_4_3.vblock b/tests/preamble_tests/preamble_v2x/kern_4_3.vblock new file mode 100644 index 0000000..dcb5493 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_4_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_4_4.vblock b/tests/preamble_tests/preamble_v2x/kern_4_4.vblock new file mode 100644 index 0000000..66d104e Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_4_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_4_5.vblock b/tests/preamble_tests/preamble_v2x/kern_4_5.vblock new file mode 100644 index 0000000..e70f27f Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_4_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_4_6.vblock b/tests/preamble_tests/preamble_v2x/kern_4_6.vblock new file mode 100644 index 0000000..17e069c Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_4_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_4_7.vblock b/tests/preamble_tests/preamble_v2x/kern_4_7.vblock new file mode 100644 index 0000000..2e37d2f Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_4_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_4_8.vblock b/tests/preamble_tests/preamble_v2x/kern_4_8.vblock new file mode 100644 index 0000000..2b1c3ae Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_4_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_4_9.vblock b/tests/preamble_tests/preamble_v2x/kern_4_9.vblock new file mode 100644 index 0000000..9acaaf3 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_4_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_5_0.vblock b/tests/preamble_tests/preamble_v2x/kern_5_0.vblock new file mode 100644 index 0000000..6b3b1ef Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_5_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_5_1.vblock b/tests/preamble_tests/preamble_v2x/kern_5_1.vblock new file mode 100644 index 0000000..9a3ee86 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_5_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_5_10.vblock b/tests/preamble_tests/preamble_v2x/kern_5_10.vblock new file mode 100644 index 0000000..ddaab18 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_5_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_5_11.vblock b/tests/preamble_tests/preamble_v2x/kern_5_11.vblock new file mode 100644 index 0000000..d7f0482 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_5_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_5_2.vblock b/tests/preamble_tests/preamble_v2x/kern_5_2.vblock new file mode 100644 index 0000000..fbfd226 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_5_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_5_3.vblock b/tests/preamble_tests/preamble_v2x/kern_5_3.vblock new file mode 100644 index 0000000..8aa55b2 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_5_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_5_4.vblock b/tests/preamble_tests/preamble_v2x/kern_5_4.vblock new file mode 100644 index 0000000..4b19c14 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_5_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_5_5.vblock b/tests/preamble_tests/preamble_v2x/kern_5_5.vblock new file mode 100644 index 0000000..1fd5568 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_5_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_5_6.vblock b/tests/preamble_tests/preamble_v2x/kern_5_6.vblock new file mode 100644 index 0000000..681cf05 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_5_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_5_7.vblock b/tests/preamble_tests/preamble_v2x/kern_5_7.vblock new file mode 100644 index 0000000..83b7202 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_5_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_5_8.vblock b/tests/preamble_tests/preamble_v2x/kern_5_8.vblock new file mode 100644 index 0000000..33a675b Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_5_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_5_9.vblock b/tests/preamble_tests/preamble_v2x/kern_5_9.vblock new file mode 100644 index 0000000..588dc60 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_5_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_6_0.vblock b/tests/preamble_tests/preamble_v2x/kern_6_0.vblock new file mode 100644 index 0000000..173107a Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_6_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_6_1.vblock b/tests/preamble_tests/preamble_v2x/kern_6_1.vblock new file mode 100644 index 0000000..44af122 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_6_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_6_10.vblock b/tests/preamble_tests/preamble_v2x/kern_6_10.vblock new file mode 100644 index 0000000..31164a2 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_6_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_6_11.vblock b/tests/preamble_tests/preamble_v2x/kern_6_11.vblock new file mode 100644 index 0000000..68a25fd Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_6_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_6_2.vblock b/tests/preamble_tests/preamble_v2x/kern_6_2.vblock new file mode 100644 index 0000000..4711591 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_6_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_6_3.vblock b/tests/preamble_tests/preamble_v2x/kern_6_3.vblock new file mode 100644 index 0000000..81e41e0 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_6_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_6_4.vblock b/tests/preamble_tests/preamble_v2x/kern_6_4.vblock new file mode 100644 index 0000000..27f4deb Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_6_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_6_5.vblock b/tests/preamble_tests/preamble_v2x/kern_6_5.vblock new file mode 100644 index 0000000..e20ce4e Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_6_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_6_6.vblock b/tests/preamble_tests/preamble_v2x/kern_6_6.vblock new file mode 100644 index 0000000..0675d90 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_6_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_6_7.vblock b/tests/preamble_tests/preamble_v2x/kern_6_7.vblock new file mode 100644 index 0000000..e704a37 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_6_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_6_8.vblock b/tests/preamble_tests/preamble_v2x/kern_6_8.vblock new file mode 100644 index 0000000..e3c9cb3 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_6_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_6_9.vblock b/tests/preamble_tests/preamble_v2x/kern_6_9.vblock new file mode 100644 index 0000000..14ec0b7 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_6_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_7_0.vblock b/tests/preamble_tests/preamble_v2x/kern_7_0.vblock new file mode 100644 index 0000000..0f895d5 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_7_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_7_1.vblock b/tests/preamble_tests/preamble_v2x/kern_7_1.vblock new file mode 100644 index 0000000..18bb6b3 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_7_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_7_10.vblock b/tests/preamble_tests/preamble_v2x/kern_7_10.vblock new file mode 100644 index 0000000..7e64df5 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_7_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_7_11.vblock b/tests/preamble_tests/preamble_v2x/kern_7_11.vblock new file mode 100644 index 0000000..f4621af Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_7_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_7_2.vblock b/tests/preamble_tests/preamble_v2x/kern_7_2.vblock new file mode 100644 index 0000000..e9f6f41 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_7_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_7_3.vblock b/tests/preamble_tests/preamble_v2x/kern_7_3.vblock new file mode 100644 index 0000000..f01797e Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_7_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_7_4.vblock b/tests/preamble_tests/preamble_v2x/kern_7_4.vblock new file mode 100644 index 0000000..9def5c2 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_7_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_7_5.vblock b/tests/preamble_tests/preamble_v2x/kern_7_5.vblock new file mode 100644 index 0000000..668fa7c Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_7_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_7_6.vblock b/tests/preamble_tests/preamble_v2x/kern_7_6.vblock new file mode 100644 index 0000000..8395e18 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_7_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_7_7.vblock b/tests/preamble_tests/preamble_v2x/kern_7_7.vblock new file mode 100644 index 0000000..796ee81 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_7_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_7_8.vblock b/tests/preamble_tests/preamble_v2x/kern_7_8.vblock new file mode 100644 index 0000000..be961b4 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_7_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_7_9.vblock b/tests/preamble_tests/preamble_v2x/kern_7_9.vblock new file mode 100644 index 0000000..966a613 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_7_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_8_0.vblock b/tests/preamble_tests/preamble_v2x/kern_8_0.vblock new file mode 100644 index 0000000..921d34c Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_8_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_8_1.vblock b/tests/preamble_tests/preamble_v2x/kern_8_1.vblock new file mode 100644 index 0000000..c74b3f1 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_8_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_8_10.vblock b/tests/preamble_tests/preamble_v2x/kern_8_10.vblock new file mode 100644 index 0000000..c1a8465 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_8_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_8_11.vblock b/tests/preamble_tests/preamble_v2x/kern_8_11.vblock new file mode 100644 index 0000000..d6ccce3 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_8_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_8_2.vblock b/tests/preamble_tests/preamble_v2x/kern_8_2.vblock new file mode 100644 index 0000000..63f672c Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_8_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_8_3.vblock b/tests/preamble_tests/preamble_v2x/kern_8_3.vblock new file mode 100644 index 0000000..6d34ee5 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_8_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_8_4.vblock b/tests/preamble_tests/preamble_v2x/kern_8_4.vblock new file mode 100644 index 0000000..91f98d1 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_8_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_8_5.vblock b/tests/preamble_tests/preamble_v2x/kern_8_5.vblock new file mode 100644 index 0000000..49f52f6 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_8_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_8_6.vblock b/tests/preamble_tests/preamble_v2x/kern_8_6.vblock new file mode 100644 index 0000000..262255a Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_8_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_8_7.vblock b/tests/preamble_tests/preamble_v2x/kern_8_7.vblock new file mode 100644 index 0000000..fe9841f Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_8_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_8_8.vblock b/tests/preamble_tests/preamble_v2x/kern_8_8.vblock new file mode 100644 index 0000000..d457806 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_8_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_8_9.vblock b/tests/preamble_tests/preamble_v2x/kern_8_9.vblock new file mode 100644 index 0000000..023e0e3 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_8_9.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_9_0.vblock b/tests/preamble_tests/preamble_v2x/kern_9_0.vblock new file mode 100644 index 0000000..1ae72ae Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_9_0.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_9_1.vblock b/tests/preamble_tests/preamble_v2x/kern_9_1.vblock new file mode 100644 index 0000000..ca685d1 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_9_1.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_9_10.vblock b/tests/preamble_tests/preamble_v2x/kern_9_10.vblock new file mode 100644 index 0000000..b38fee8 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_9_10.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_9_11.vblock b/tests/preamble_tests/preamble_v2x/kern_9_11.vblock new file mode 100644 index 0000000..0f83c5b Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_9_11.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_9_2.vblock b/tests/preamble_tests/preamble_v2x/kern_9_2.vblock new file mode 100644 index 0000000..986414a Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_9_2.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_9_3.vblock b/tests/preamble_tests/preamble_v2x/kern_9_3.vblock new file mode 100644 index 0000000..c1ede4b Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_9_3.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_9_4.vblock b/tests/preamble_tests/preamble_v2x/kern_9_4.vblock new file mode 100644 index 0000000..fa4eee8 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_9_4.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_9_5.vblock b/tests/preamble_tests/preamble_v2x/kern_9_5.vblock new file mode 100644 index 0000000..e951642 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_9_5.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_9_6.vblock b/tests/preamble_tests/preamble_v2x/kern_9_6.vblock new file mode 100644 index 0000000..cbcdc51 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_9_6.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_9_7.vblock b/tests/preamble_tests/preamble_v2x/kern_9_7.vblock new file mode 100644 index 0000000..e544cb9 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_9_7.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_9_8.vblock b/tests/preamble_tests/preamble_v2x/kern_9_8.vblock new file mode 100644 index 0000000..8eca173 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_9_8.vblock differ diff --git a/tests/preamble_tests/preamble_v2x/kern_9_9.vblock b/tests/preamble_tests/preamble_v2x/kern_9_9.vblock new file mode 100644 index 0000000..fc6bfb5 Binary files /dev/null and b/tests/preamble_tests/preamble_v2x/kern_9_9.vblock differ diff --git a/tests/rsa_padding_test.h b/tests/rsa_padding_test.h new file mode 100644 index 0000000..bf039f5 --- /dev/null +++ b/tests/rsa_padding_test.h @@ -0,0 +1,53 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Signature tests vectors for checking RSA PKCS #1 v1.5 padding + * implementations. These check an RSA signature verification implementation + * against Daniel Bleichhenbacher's RSA signature padding attack. + * + * Test vectors are due to Daniel Bleichenbacher (bleichen@google.com). + */ + +#ifndef VBOOT_REFERENCE_RSA_PADDING_TEST_H_ +#define VBOOT_REFERENCE_RSA_PADDING_TEST_H_ + +#define RSA1024NUMBYTES 128 /* 1024 bit key length */ +#define RSA2048NUMBYTES 256 /* 2048 bit key length */ +#define RSA3072NUMBYTES 384 /* 3072 bit key length */ +#define RSA4096NUMBYTES 512 /* 4096 bit key length */ +#define RSA8192NUMBYTES 1024 /* 8192 bit key length */ + +/* The modulus of the public key (RSA-1024). */ +static const uint8_t pubkey_n[] = { +210, 136, 105, 162, 117, 171, 114, 146, 81, 242, 21, 222, 87, 60, 122, 176, 245, +57, 213, 159, 196, 165, 40, 75, 146, 35, 114, 118, 25, 196, 150, 38, 40, 195, +56, 109, 145, 47, 171, 117, 57, 220, 176, 186, 70, 175, 222, 65, 60, 65, 31, 88, +93, 220, 27, 74, 73, 43, 112, 6, 242, 78, 38, 229, 58, 206, 200, 4, 196, 67, 8, +141, 21, 141, 79, 214, 221, 179, 184, 64, 92, 8, 222, 68, 16, 97, 101, 68, 210, +155, 217, 238, 78, 207, 202, 43, 16, 241, 194, 78, 28, 172, 124, 44, 111, 181, +187, 71, 57, 190, 50, 109, 254, 170, 103, 126, 124, 156, 169, 36, 164, 186, 136, +108, 66, 44, 147, 137}; + +/* The exponent of the public key (65535) */ +static const uint8_t pubkey_e[] = {1, 0, 1}; + +/* The message for the test. */ +static const uint8_t test_message[] = {0, 0, 0, 0}; + +/* The SHA1 digest of the message. i.e. + * '9069ca78e7450a285173431b3e52c5c25299e473'. */ +static const uint8_t test_message_sha1_hash[] = { +144, 105, 202, 120, 231, 69, 10, 40, 81, 115, 67, 27, 62, 82, 197, 194, 82, 153, +228, 115}; + +/* The test signatures (RSA-1024/SHA-1). signature[0] is correct, + * all other signatures are incorrect. + * + * TODO(gauravsh): Add similar test vectors for other string + */ +static const uint8_t signatures[][RSA1024NUMBYTES] = { +#include "testcases/padding_test_vectors.inc" +}; + +#endif /* VBOOT_REFERENCE_RSA_PADDING_TEST_H_ */ diff --git a/tests/run_cgpt_tests.sh b/tests/run_cgpt_tests.sh new file mode 100755 index 0000000..3f18624 --- /dev/null +++ b/tests/run_cgpt_tests.sh @@ -0,0 +1,390 @@ +#!/bin/bash -eu + +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# Run tests for cgpt utility. + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +CGPT=$(readlink -f "$1") +[ -x "$CGPT" ] || error "Can't execute $CGPT" + +MTD="${@:2}" + +# Run tests in a dedicated directory for easy cleanup or debugging. +DIR="${TEST_DIR}/cgpt_test_dir" +[ -d "$DIR" ] || mkdir -p "$DIR" +warning "testing $CGPT in $DIR" +cd "$DIR" + +assert_fail() { + set +e + "$@" 2>/dev/null + if [ $? == 0 ]; then + error "$*" " should have failed but did not" + fi + set -e +} + +# Test failure on non existing file. +assert_fail ${CGPT} show $MTD blah_404_haha + +echo "Create an empty file to use as the device..." +NUM_SECTORS=1000 +DEV=fake_dev.bin +rm -f ${DEV} +dd if=/dev/zero of=${DEV} conv=notrunc bs=512 count=${NUM_SECTORS} 2>/dev/null + +DATA_START=100 +DATA_SIZE=20 +DATA_LABEL="data stuff" +DATA_GUID='0fc63daf-8483-4772-8e79-3d69d8477de4' +DATA_NUM=1 + +KERN_START=200 +KERN_SIZE=30 +KERN_LABEL="kernel stuff" +KERN_GUID='fe3a2a5d-4f32-41a7-b725-accc3285a309' +KERN_NUM=2 + +ROOTFS_START=300 +ROOTFS_SIZE=40 +ROOTFS_LABEL="rootfs stuff" +ROOTFS_GUID='3cb8e202-3b7e-47dd-8a3c-7ff2a13cfcec' +ROOTFS_NUM=3 + +ESP_START=400 +ESP_SIZE=50 +ESP_LABEL="ESP stuff" +ESP_GUID='c12a7328-f81f-11d2-ba4b-00a0c93ec93b' +ESP_NUM=4 + +FUTURE_START=500 +FUTURE_SIZE=60 +FUTURE_LABEL="future stuff" +FUTURE_GUID='2e0a753d-9e48-43b0-8337-b15192cb1b5e' +FUTURE_NUM=5 + +RANDOM_START=600 +RANDOM_SIZE=70 +RANDOM_LABEL="random stuff" +RANDOM_GUID='2364a860-bf63-42fb-a83d-9ad3e057fcf5' +RANDOM_NUM=6 + +RANDOM_DRIVE_GUID='12345678-0000-1111-2222-123456789ABC' + +$CGPT create $MTD ${DEV} + +run_basic_tests() { + echo "Create a bunch of partitions, using the real GUID types..." + + $CGPT add $MTD -b ${DATA_START} -s ${DATA_SIZE} -t ${DATA_GUID} \ + -l "${DATA_LABEL}" ${DEV} + $CGPT add $MTD -b ${KERN_START} -s ${KERN_SIZE} -t ${KERN_GUID} \ + -l "${KERN_LABEL}" ${DEV} + $CGPT add $MTD -b ${ROOTFS_START} -s ${ROOTFS_SIZE} -t ${ROOTFS_GUID} \ + -l "${ROOTFS_LABEL}" ${DEV} + $CGPT add $MTD -b ${ESP_START} -s ${ESP_SIZE} -t ${ESP_GUID} \ + -l "${ESP_LABEL}" ${DEV} + $CGPT add $MTD -b ${FUTURE_START} -s ${FUTURE_SIZE} -t ${FUTURE_GUID} \ + -l "${FUTURE_LABEL}" ${DEV} + $CGPT add $MTD -b ${RANDOM_START} -s ${RANDOM_SIZE} -t ${RANDOM_GUID} \ + -l "${RANDOM_LABEL}" ${DEV} + + + echo "Extract the start and size of given partitions..." + + X=$($CGPT show $MTD -b -i $DATA_NUM ${DEV}) + Y=$($CGPT show $MTD -s -i $DATA_NUM ${DEV}) + [ "$X $Y" = "$DATA_START $DATA_SIZE" ] || error + + X=$($CGPT show $MTD -b -i $KERN_NUM ${DEV}) + Y=$($CGPT show $MTD -s -i $KERN_NUM ${DEV}) + [ "$X $Y" = "$KERN_START $KERN_SIZE" ] || error + + X=$($CGPT show $MTD -b -i $ROOTFS_NUM ${DEV}) + Y=$($CGPT show $MTD -s -i $ROOTFS_NUM ${DEV}) + [ "$X $Y" = "$ROOTFS_START $ROOTFS_SIZE" ] || error + + X=$($CGPT show $MTD -b -i $ESP_NUM ${DEV}) + Y=$($CGPT show $MTD -s -i $ESP_NUM ${DEV}) + [ "$X $Y" = "$ESP_START $ESP_SIZE" ] || error + + X=$($CGPT show $MTD -b -i $FUTURE_NUM ${DEV}) + Y=$($CGPT show $MTD -s -i $FUTURE_NUM ${DEV}) + [ "$X $Y" = "$FUTURE_START $FUTURE_SIZE" ] || error + + X=$($CGPT show $MTD -b -i $RANDOM_NUM ${DEV}) + Y=$($CGPT show $MTD -s -i $RANDOM_NUM ${DEV}) + [ "$X $Y" = "$RANDOM_START $RANDOM_SIZE" ] || error + + + echo "Change the beginning..." + DATA_START=$((DATA_START + 10)) + $CGPT add $MTD -i 1 -b ${DATA_START} ${DEV} || error + X=$($CGPT show $MTD -b -i 1 ${DEV}) + [ "$X" = "$DATA_START" ] || error + + echo "Change the size..." + DATA_SIZE=$((DATA_SIZE + 10)) + $CGPT add $MTD -i 1 -s ${DATA_SIZE} ${DEV} || error + X=$($CGPT show $MTD -s -i 1 ${DEV}) + [ "$X" = "$DATA_SIZE" ] || error + + echo "Change the type..." + $CGPT add $MTD -i 1 -t reserved ${DEV} || error + X=$($CGPT show $MTD -t -i 1 ${DEV} | tr 'A-Z' 'a-z') + [ "$X" = "$FUTURE_GUID" ] || error + # arbitrary value + $CGPT add $MTD -i 1 -t 610a563a-a55c-4ae0-ab07-86e5bb9db67f ${DEV} || error + X=$($CGPT show $MTD -t -i 1 ${DEV}) + [ "$X" = "610A563A-A55C-4AE0-AB07-86E5BB9DB67F" ] || error + + $CGPT add $MTD -i 1 -t data ${DEV} || error + X=$($CGPT show $MTD -t -i 1 ${DEV} | tr 'A-Z' 'a-z') + [ "$X" = "$DATA_GUID" ] || error + + ORIG_ID=$($CGPT show $MTD -v ${DEV} | \ + grep -i "disk uuid" | head -1 | awk ' { print $3 } ' ) + [ ! "$ORIG_ID" = "$RANDOM_DRIVE_GUID" ] || error + $CGPT edit $MTD -u ${RANDOM_DRIVE_GUID} ${DEV} || error + X=$($CGPT show $MTD -v ${DEV} | grep -i "disk uuid" | \ + head -1 | awk ' { print $3 } ' ) + [ "$X" = "${RANDOM_DRIVE_GUID}" ] || error + $CGPT edit $MTD -u ${ORIG_ID} ${DEV} || error + X=$($CGPT show $MTD -v ${DEV} | grep -i "disk uuid" | \ + head -1 | awk ' { print $3 } ' ) + [ "$X" = "${ORIG_ID}" ] || error +} +run_basic_tests + +ORIG_ID=$($CGPT show $MTD -v ${DEV} | \ + grep -i "disk uuid" | awk ' { print $3 } ' ) +[ ! "$ORIG_ID" = "$RANDOM_DRIVE_GUID" ] || error +$CGPT edit $MTD -u ${RANDOM_DRIVE_GUID} ${DEV} || error +X=$($CGPT show $MTD -v ${DEV} | grep -i "disk uuid" | \ + head -1 | awk ' { print $3 } ' ) +[ "$X" = "${RANDOM_DRIVE_GUID}" ] || error +$CGPT edit $MTD -u ${ORIG_ID} ${DEV} || error +X=$($CGPT show $MTD -v ${DEV} | grep -i "disk uuid" | \ + awk ' { print $3 } ' ) +[ "$X" = "${ORIG_ID}" ] || error + +echo "Set the boot partition.." +$CGPT boot $MTD -i ${KERN_NUM} ${DEV} >/dev/null + +echo "Check the PMBR's idea of the boot partition..." +X=$($CGPT boot $MTD ${DEV}) +Y=$($CGPT show $MTD -u -i $KERN_NUM $DEV) +[ "$X" = "$Y" ] || error + +# Input: sequence of priorities +# Output: ${DEV} has kernel partitions with the given priorities +make_pri() { + local idx=0 + $CGPT create $MTD ${DEV} + for pri in "$@"; do + idx=$((idx+1)) + $CGPT add $MTD -t kernel -l "kern$idx" -b $((100 + 2 * $idx)) -s 1 -P $pri ${DEV} + done +} + +# Output: returns string containing priorities of all kernels +get_pri() { + echo $( + for idx in $($CGPT find $MTD -t kernel ${DEV} | sed -e s@${DEV}@@); do + $CGPT show $MTD -i $idx -P ${DEV} + done + ) +} + +# Input: list of priorities +# Operation: expects ${DEV} to contain those kernel priorities +assert_pri() { + local expected="$*" + local actual=$(get_pri) + [ "$actual" = "$expected" ] || \ + error 1 "expected priority \"$expected\", actual priority \"$actual\"" +} + +# no kernels at all. This should do nothing. +$CGPT create $MTD ${DEV} + +run_prioritize_tests() { + echo "Test the cgpt prioritize command..." + $CGPT add $MTD -t rootfs -b 100 -s 1 ${DEV} + $CGPT prioritize $MTD ${DEV} + assert_pri "" + + # common install/upgrade sequence + make_pri 2 0 0 + $CGPT prioritize $MTD -i 1 ${DEV} + assert_pri 1 0 0 + $CGPT prioritize $MTD -i 2 ${DEV} + assert_pri 1 2 0 + $CGPT prioritize $MTD -i 1 ${DEV} + assert_pri 2 1 0 + $CGPT prioritize $MTD -i 2 ${DEV} + assert_pri 1 2 0 + # lots of kernels, all same starting priority, should go to priority 1 + make_pri 8 8 8 8 8 8 8 8 8 8 8 0 0 8 + $CGPT prioritize $MTD ${DEV} + assert_pri 1 1 1 1 1 1 1 1 1 1 1 0 0 1 + + # now raise them all up again + $CGPT prioritize $MTD -P 4 ${DEV} + assert_pri 4 4 4 4 4 4 4 4 4 4 4 0 0 4 + + # set one of them higher, should leave the rest alone + $CGPT prioritize $MTD -P 5 -i 3 ${DEV} + assert_pri 4 4 5 4 4 4 4 4 4 4 4 0 0 4 + + # set one of them lower, should bring the rest down + $CGPT prioritize $MTD -P 3 -i 4 ${DEV} + assert_pri 1 1 2 3 1 1 1 1 1 1 1 0 0 1 + + # raise a group by including the friends of one partition + $CGPT prioritize $MTD -P 6 -i 1 -f ${DEV} + assert_pri 6 6 4 5 6 6 6 6 6 6 6 0 0 6 + + # resurrect one, should not affect the others + make_pri 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + $CGPT prioritize $MTD -i 2 ${DEV} + assert_pri 0 1 0 0 0 0 0 0 0 0 0 0 0 0 + + # resurrect one and all its friends + make_pri 0 0 0 0 0 0 0 0 1 2 0 0 0 0 + $CGPT prioritize $MTD -P 5 -i 2 -f ${DEV} + assert_pri 5 5 5 5 5 5 5 5 3 4 5 5 5 5 + + # no options should maintain the same order + $CGPT prioritize $MTD ${DEV} + assert_pri 3 3 3 3 3 3 3 3 1 2 3 3 3 3 + + # squish all the ranks + make_pri 1 1 2 2 3 3 4 4 5 5 0 6 7 7 + $CGPT prioritize $MTD -P 6 ${DEV} + assert_pri 1 1 1 1 2 2 3 3 4 4 0 5 6 6 + + # squish the ranks by not leaving room + make_pri 1 1 2 2 3 3 4 4 5 5 0 6 7 7 + $CGPT prioritize $MTD -P 7 -i 3 ${DEV} + assert_pri 1 1 7 1 2 2 3 3 4 4 0 5 6 6 + + # squish the ranks while bringing the friends along + make_pri 1 1 2 2 3 3 4 4 5 5 0 6 7 7 + $CGPT prioritize $MTD -P 6 -i 3 -f ${DEV} + assert_pri 1 1 6 6 1 1 2 2 3 3 0 4 5 5 + + # squish them pretty hard + make_pri 1 1 2 2 3 3 4 4 5 5 0 6 7 7 + $CGPT prioritize $MTD -P 2 ${DEV} + assert_pri 1 1 1 1 1 1 1 1 1 1 0 1 2 2 + + # squish them really really hard (nobody gets reduced to zero, though) + make_pri 1 1 2 2 3 3 4 4 5 5 0 6 7 7 + $CGPT prioritize $MTD -P 1 -i 3 ${DEV} + assert_pri 1 1 1 1 1 1 1 1 1 1 0 1 1 1 + + make_pri 15 15 14 14 13 13 12 12 11 11 10 10 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 + $CGPT prioritize $MTD -i 3 ${DEV} + assert_pri 14 14 15 13 12 12 11 11 10 10 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 1 1 0 + $CGPT prioritize $MTD -i 5 ${DEV} + assert_pri 13 13 14 12 15 11 10 10 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 1 1 1 1 0 + # but if I bring friends I don't have to squish + $CGPT prioritize $MTD -i 1 -f ${DEV} + assert_pri 15 15 13 12 14 11 10 10 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 1 1 1 1 0 +} +run_prioritize_tests + +echo "Test cgpt repair command" +$CGPT repair $MTD ${DEV} +($CGPT show $MTD ${DEV} | grep -q INVALID) && error + +# Zero primary header and partition table and try to repair it. +dd if=/dev/zero of=${DEV} conv=notrunc bs=512 count=33 2>/dev/null +$CGPT show $MTD ${DEV} | grep -q INVALID +$CGPT repair $MTD ${DEV} +($CGPT show $MTD ${DEV} | grep -q INVALID) && error + +# Zero secondary header and partition table and try to repair it. +dd if=/dev/zero of=${DEV} seek=$(($NUM_SECTORS - 33)) conv=notrunc bs=512 count=33 2>/dev/null +$CGPT show $MTD ${DEV} | grep -q INVALID +$CGPT repair $MTD ${DEV} +($CGPT show $MTD ${DEV} | grep -q INVALID) && error + +echo "Test with IGNOREME primary GPT..." +$CGPT create $MTD ${DEV} +$CGPT legacy $MTD -p ${DEV} +$CGPT show $MTD ${DEV} | egrep -q "IGNORED.*Pri GPT" 2>/dev/null +($CGPT show $MTD ${DEV} | grep -q "Pri GPT table" 2>/dev/null) && error +$CGPT repair $MTD ${DEV} 2>/dev/null +$CGPT show $MTD ${DEV} | egrep -q "IGNORED.*Pri GPT" 2>/dev/null +($CGPT show $MTD ${DEV} | grep -q "Pri GPT table" 2>/dev/null) && error +$CGPT legacy $MTD -e ${DEV} 2>/dev/null +($CGPT show $MTD ${DEV} | egrep -q "IGNORED.*Pri GPT") && error +$CGPT show $MTD ${DEV} | grep -q "Pri GPT table" + +$CGPT create $MTD ${DEV} +$CGPT legacy $MTD -p ${DEV} +run_basic_tests 2>/dev/null + +$CGPT create $MTD ${DEV} +$CGPT legacy $MTD -p ${DEV} +run_prioritize_tests 2>/dev/null + +# Now make sure that we don't need write access if we're just looking. +echo "Test read vs read-write access..." +chmod 0444 ${DEV} + +# These should fail +$CGPT create $MTD -z ${DEV} 2>/dev/null && error +$CGPT add $MTD -i 2 -P 3 ${DEV} 2>/dev/null && error +$CGPT repair $MTD ${DEV} 2>/dev/null && error +$CGPT prioritize $MTD -i 3 ${DEV} 2>/dev/null && error + +# Most 'boot' usage should fail too. +$CGPT boot $MTD -p ${DEV} 2>/dev/null && error +dd if=/dev/zero of=fake_mbr.bin bs=100 count=1 2>/dev/null +$CGPT boot $MTD -b fake_mbr.bin ${DEV} 2>/dev/null && error +$CGPT boot $MTD -i 2 ${DEV} 2>/dev/null && error + +$CGPT boot $MTD ${DEV} >/dev/null +$CGPT show $MTD ${DEV} >/dev/null +$CGPT find $MTD -t kernel ${DEV} >/dev/null + +# Enable write access again to test boundary in off device storage +chmod 600 ${DEV} +# GPT too small +dd if=/dev/zero of=${DEV} bs=5632 count=1 +assert_fail $CGPT create -D 1024 ${DEV} +# GPT is just right for 16 entries (512 + 512 + 16 * 128) * 2 = 6144 +dd if=/dev/zero of=${DEV} bs=6144 count=1 +$CGPT create -D 1024 ${DEV} +# Create a small 8K file to simulate Flash NOR section +dd if=/dev/zero of=${DEV} bs=8K count=1 +# Drive size is not multiple of 512 +assert_fail $CGPT create -D 511 ${DEV} +assert_fail $CGPT create -D 513 ${DEV} +MTD="-D 1024" +# Create a GPT table for a device of 1024 bytes (2 sectors) +$CGPT create $MTD ${DEV} +# Make sure number of entries is reasonable for 8KiB GPT +X=$($CGPT show -D 1024 -d ${DEV} | grep -c "Number of entries: 24") +[ "$X" = "2" ] || error +# This fails because header verification is off due to different drive size +assert_fail $CGPT show ${DEV} +# But this passes because we pass in correct drive size +$CGPT show $MTD ${DEV} +# This fails because beginning sector is over the size of the device +assert_fail $CGPT add $MTD -b 2 -s 1 -t data ${DEV} +# This fails because partition size is over the size of the device +assert_fail $CGPT add $MTD -b 0 -s 3 -t data ${DEV} + + +echo "Done." + +happy "All tests passed." diff --git a/tests/run_preamble_tests.sh b/tests/run_preamble_tests.sh new file mode 100755 index 0000000..429213c --- /dev/null +++ b/tests/run_preamble_tests.sh @@ -0,0 +1,110 @@ +#!/bin/bash -u +# +# Copyright (c) 2012 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# This tests that vblocks using pre-3.0 versions of vb2_fw_preamble +# and vb2_kernel_preamble will still verify (or not) correctly. We +# need to keep the old versions around to make sure that we can still +# sign images in the ways that existing devices can validate. + +# Load common constants and variables for tests. +. "$(dirname "$0")/common.sh" + +if [ "${1:---some}" == "--all" ] ; then + # all algs + algs="0 1 2 3 4 5 6 7 8 9 10 11" +else + # just the algs we use + algs="4 7 11" +fi + +# output directories +PREAMBLE_DIR="${SCRIPT_DIR}/preamble_tests" +DATADIR="${PREAMBLE_DIR}/data" +V2DIR="${PREAMBLE_DIR}/preamble_v2x" + +tests=0 +errs=0 + +# Check the firmware results +for d in $algs; do + for r in $algs; do + for rr in $algs; do + if [ "$r" = "$rr" ]; then + what="verify" + cmp="-ne" + else + what="reject" + cmp="-eq" + fi + : $(( tests++ )) + echo -n "${what} fw_${d}_${r}.vblock with root_${rr}.vbpubk ... " + "${FUTILITY}" vbutil_firmware \ + --verify "${V2DIR}/fw_${d}_${r}.vblock" \ + --signpubkey "${DATADIR}/root_${rr}.vbpubk" \ + --fv "${DATADIR}/FWDATA" >/dev/null 2>&1 + if [ "$?" "$cmp" 0 ]; then + echo -e "${COL_RED}FAILED${COL_STOP}" + : $(( errs++ )) + else + echo -e "${COL_GREEN}PASSED${COL_STOP}" + fi + done + done +done + + +# Check the kernel results +for d in $algs; do + for r in $algs; do + for rr in $algs; do + if [ "$r" = "$rr" ]; then + what="verify" + cmp="-ne" + else + what="reject" + cmp="-eq" + fi + : $(( tests++ )) + echo -n "${what} kern_${d}_${r}.vblock with root_${rr}.vbpubk ... " + "${FUTILITY}" vbutil_kernel \ + --verify "${V2DIR}/kern_${d}_${r}.vblock" \ + --signpubkey "${DATADIR}/root_${rr}.vbpubk" >/dev/null 2>&1 + if [ "$?" "$cmp" 0 ]; then + echo -e "${COL_RED}FAILED${COL_STOP}" + : $(( errs++ )) + else + echo -e "${COL_GREEN}PASSED${COL_STOP}" + fi + done + done +done + + +# Check the kernel results +for d in $algs; do + for r in $algs; do + : $(( tests++ )) + echo -n "verify kern_${d}_${r}.vblock with hash only ... " + "${FUTILITY}" vbutil_kernel \ + --verify "${V2DIR}/kern_${d}_${r}.vblock" >/dev/null 2>&1 + if [ "$?" -ne 0 ]; then + echo -e "${COL_RED}FAILED${COL_STOP}" + : $(( errs++ )) + else + echo -e "${COL_GREEN}PASSED${COL_STOP}" + fi + done +done + + +# Summary +ME=$(basename "$0") +if [ "$errs" -ne 0 ]; then + echo -e "${COL_RED}${ME}: ${errs}/${tests} tests failed${COL_STOP}" + exit 1 +fi +happy "${ME}: All ${tests} tests passed" +exit 0 diff --git a/tests/run_vbutil_kernel_arg_tests.sh b/tests/run_vbutil_kernel_arg_tests.sh new file mode 100755 index 0000000..95317ec --- /dev/null +++ b/tests/run_vbutil_kernel_arg_tests.sh @@ -0,0 +1,201 @@ +#!/bin/bash -u +# +# Copyright (c) 2012 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# Quick test of vbutil_kernel args, to make sure we can pack and unpack +# less-than-full-sized components. +# + +# Load common constants and variables for tests. +. "$(dirname "$0")/common.sh" + +# directories +DEVKEYS="${ROOT_DIR}/tests/devkeys" +DATA_DIR="${SCRIPT_DIR}/preamble_tests/data" +TMPDIR="${TEST_DIR}/vbutil_kernel_arg_tests_dir" +[ -d "${TMPDIR}" ] || mkdir -p "${TMPDIR}" + +# Arbitrarily chosen keys and config file. +KEYBLOCK="${DATA_DIR}/kb_0_0.keyblock" +SIGNPRIVATE="${DATA_DIR}/data_0.vbprivk" +SIGNPUBLIC="${DATA_DIR}/root_0.vbpubk" +CONFIG="${DATA_DIR}/dummy_config.txt" + +# Create some big and little files for the kernel and bootloader +BIG="${TMPDIR}/big.bin" +dd if=/dev/urandom bs=32768 count=1 of="${BIG}" 2>/dev/null +SMALL="${TMPDIR}/small.bin" +dd if=/dev/urandom bs=16 count=1 of="${SMALL}" 2>/dev/null + +declare -a KERN_VALS +declare -a BOOT_VALS +KERN_VALS=("--vmlinuz=${BIG}" "--vmlinuz=${SMALL}") +BOOT_VALS=("--bootloader=${BIG}" "--bootloader=${SMALL}") + +tests=0 +errs=0 + +# Pack a bunch of stuff +k=0 +while [ "$k" -lt "${#KERN_VALS[*]}" ]; do + b=0 + while [ "$b" -lt "${#BOOT_VALS[*]}" ]; do + echo -n "pack kern_${k}_${b}.vblock ... " + : $(( tests++ )) + "${FUTILITY}" vbutil_kernel \ + --pack "${TMPDIR}/kern_${k}_${b}.vblock" \ + --keyblock "${KEYBLOCK}" \ + --signprivate "${SIGNPRIVATE}" \ + --version 1 \ + --arch arm \ + --config "${CONFIG}" \ + "${KERN_VALS[$k]}" \ + "${BOOT_VALS[$k]}" >/dev/null + if [ "$?" -ne 0 ]; then + echo -e "${COL_RED}FAILED${COL_STOP}" + : $(( errs++ )) + else + echo -e "${COL_GREEN}PASSED${COL_STOP}" + fi + : $(( b++ )) + done + : $(( k++ )) +done + +# Now unpack it +for v in ${TMPDIR}/kern_*.vblock; do + : $(( tests++ )) + vv=$(basename "$v") + echo -n "verify $vv ... " + "${FUTILITY}" vbutil_kernel --verify "$v" >/dev/null + if [ "$?" -ne 0 ]; then + echo -e "${COL_RED}FAILED${COL_STOP}" + : $(( errs++ )) + else + echo -e "${COL_GREEN}PASSED${COL_STOP}" + fi + : $(( tests++ )) + echo -n "verify $vv signed ... " + "${FUTILITY}" vbutil_kernel --verify "$v" \ + --signpubkey "${SIGNPUBLIC}" >/dev/null + if [ "$?" -ne 0 ]; then + echo -e "${COL_RED}FAILED${COL_STOP}" + : $(( errs++ )) + else + echo -e "${COL_GREEN}PASSED${COL_STOP}" + fi +done + + + +# Test repacking a USB image for the SSD, the way the installer does. + +set -e +# Pack for USB +USB_KERN="${TMPDIR}/usb_kern.bin" +USB_KEYBLOCK="${DEVKEYS}/recovery_kernel.keyblock" +USB_SIGNPRIVATE="${DEVKEYS}/recovery_kernel_data_key.vbprivk" +USB_SIGNPUBKEY="${DEVKEYS}/recovery_key.vbpubk" +echo -n "pack USB kernel ... " +: $(( tests++ )) +"${FUTILITY}" vbutil_kernel \ + --pack "${USB_KERN}" \ + --keyblock "${USB_KEYBLOCK}" \ + --signprivate "${USB_SIGNPRIVATE}" \ + --version 1 \ + --config "${CONFIG}" \ + --bootloader "${BIG}" \ + --vmlinuz "${BIG}" \ + --arch arm +if [ "$?" -ne 0 ]; then + echo -e "${COL_RED}FAILED${COL_STOP}" + : $(( errs++ )) +else + echo -e "${COL_GREEN}PASSED${COL_STOP}" +fi + +# And verify it. +echo -n "verify USB kernel ... " +: $(( tests++ )) +"${FUTILITY}" vbutil_kernel \ + --verify "${USB_KERN}" \ + --signpubkey "${USB_SIGNPUBKEY}" >/dev/null +if [ "$?" -ne 0 ]; then + echo -e "${COL_RED}FAILED${COL_STOP}" + : $(( errs++ )) +else + echo -e "${COL_GREEN}PASSED${COL_STOP}" +fi + +# Now we re-sign the same image using the normal keys. This is the kernel +# image that is put on the hard disk by the installer. Note: To save space on +# the USB image, we're only emitting the new verfication block, and the +# installer just replaces that part of the hard disk's kernel partition. +SSD_KERN="${TMPDIR}/ssd_kern.bin" +SSD_KEYBLOCK="${DEVKEYS}/kernel.keyblock" +SSD_SIGNPRIVATE="${DEVKEYS}/kernel_data_key.vbprivk" +SSD_SIGNPUBKEY="${DEVKEYS}/kernel_subkey.vbpubk" +echo -n "repack to SSD kernel ... " +: $(( tests++ )) +"${FUTILITY}" vbutil_kernel \ + --repack "${SSD_KERN}" \ + --vblockonly \ + --keyblock "${SSD_KEYBLOCK}" \ + --signprivate "${SSD_SIGNPRIVATE}" \ + --oldblob "${TMPDIR}/usb_kern.bin" >/dev/null +if [ "$?" -ne 0 ]; then + echo -e "${COL_RED}FAILED${COL_STOP}" + : $(( errs++ )) +else + echo -e "${COL_GREEN}PASSED${COL_STOP}" +fi + +# To verify it, we have to replace the vblock from the original image. +tempfile="${TMPDIR}/foo.bin" +cat "${SSD_KERN}" > "$tempfile" +dd if="${USB_KERN}" bs=65536 skip=1 >> $tempfile 2>/dev/null + +echo -n "verify SSD kernel ... " +: $(( tests++ )) +"${FUTILITY}" vbutil_kernel \ + --verify "$tempfile" \ + --signpubkey "${SSD_SIGNPUBKEY}" >/dev/null +if [ "$?" -ne 0 ]; then + echo -e "${COL_RED}FAILED${COL_STOP}" + : $(( errs++ )) +else + echo -e "${COL_GREEN}PASSED${COL_STOP}" +fi + +# Finally make sure that the kernel command line stays good. +orig=$(cat "${CONFIG}" | tr '\012' ' ') +packed=$("${FUTILITY}" dump_kernel_config "${USB_KERN}") +echo -n "check USB kernel config ..." +: $(( tests++ )) +if [ "$orig" != "$packed" ]; then + echo -e "${COL_RED}FAILED${COL_STOP}" + : $(( errs++ )) +else + echo -e "${COL_GREEN}PASSED${COL_STOP}" +fi + +repacked=$("${FUTILITY}" dump_kernel_config "${tempfile}") +echo -n "check SSD kernel config ..." +: $(( tests++ )) +if [ "$orig" != "$packed" ]; then + echo -e "${COL_RED}FAILED${COL_STOP}" + : $(( errs++ )) +else + echo -e "${COL_GREEN}PASSED${COL_STOP}" +fi + +# Summary +ME=$(basename "$0") +if [ "$errs" -ne 0 ]; then + echo -e "${COL_RED}${ME}: ${errs}/${tests} tests failed${COL_STOP}" + exit 1 +fi +happy "${ME}: All ${tests} tests passed" +exit 0 diff --git a/tests/run_vbutil_tests.sh b/tests/run_vbutil_tests.sh new file mode 100755 index 0000000..84f66d1 --- /dev/null +++ b/tests/run_vbutil_tests.sh @@ -0,0 +1,226 @@ +#!/bin/bash + +# Copyright (c) 2013 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Run verified boot firmware and kernel verification tests. + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +return_code=0 + +function test_vbutil_key_single { + local algonum=$1 + local keylen=$2 + local hashalgo=$3 + + echo -e "For signing key ${COL_YELLOW}RSA-$keylen/$hashalgo${COL_STOP}:" + # Pack the key + ${FUTILITY} vbutil_key \ + --pack ${TESTKEY_SCRATCH_DIR}/key_alg${algonum}.vbpubk \ + --key ${TESTKEY_DIR}/key_rsa${keylen}.keyb \ + --version 1 \ + --algorithm $algonum + if [ $? -ne 0 ] + then + return_code=255 + fi + + # Unpack the key + # TODO: should verify we get the same key back out? + ${FUTILITY} vbutil_key \ + --unpack ${TESTKEY_SCRATCH_DIR}/key_alg${algonum}.vbpubk + if [ $? -ne 0 ] + then + return_code=255 + fi +} + +function test_vbutil_key_all { + algorithmcounter=0 + for keylen in ${key_lengths[@]} + do + for hashalgo in ${hash_algos[@]} + do + test_vbutil_key_single $algorithmcounter $keylen $hashalgo + let algorithmcounter=algorithmcounter+1 + done + done +} + +function test_vbutil_key { + test_vbutil_key_single 4 2048 sha256 + test_vbutil_key_single 7 4096 sha256 + test_vbutil_key_single 11 8192 sha512 +} + +function test_vbutil_keyblock_single { + local signing_algonum=$1 + local signing_keylen=$2 + local signing_hashalgo=$3 + local data_algonum=$4 + local data_keylen=$5 + local data_hashalgo=$6 + + echo -e "For ${COL_YELLOW}signing algorithm \ +RSA-${signing_keylen}/${signing_hashalgo}${COL_STOP} \ +and ${COL_YELLOW}data key algorithm RSA-${datakeylen}/\ +${datahashalgo}${COL_STOP}" + # Remove old file + keyblockfile="${TESTKEY_SCRATCH_DIR}/" + keyblockfile+="sign${signing_algonum}_data" + keyblockfile+="${data_algonum}.keyblock" + rm -f ${keyblockfile} + + # Wrap private key + ${FUTILITY} vbutil_key \ + --pack ${TESTKEY_SCRATCH_DIR}/key_alg${algonum}.vbprivk \ + --key ${TESTKEY_DIR}/key_rsa${signing_keylen}.pem \ + --algorithm $signing_algonum + if [ $? -ne 0 ] + then + echo -e "${COL_RED}Wrap vbprivk${COL_STOP}" + return_code=255 + fi + + # Wrap public key + ${FUTILITY} vbutil_key \ + --pack ${TESTKEY_SCRATCH_DIR}/key_alg${algonum}.vbpubk \ + --key ${TESTKEY_DIR}/key_rsa${signing_keylen}.keyb \ + --algorithm $signing_algonum + if [ $? -ne 0 ] + then + echo -e "${COL_RED}Wrap vbpubk${COL_STOP}" + return_code=255 + fi + + # Pack + ${FUTILITY} vbutil_keyblock --pack ${keyblockfile} \ + --datapubkey \ + ${TESTKEY_SCRATCH_DIR}/key_alg${data_algonum}.vbpubk \ + --signprivate \ + ${TESTKEY_SCRATCH_DIR}/key_alg${algonum}.vbprivk + if [ $? -ne 0 ] + then + echo -e "${COL_RED}Pack${COL_STOP}" + return_code=255 + fi + + # Unpack + ${FUTILITY} vbutil_keyblock --unpack ${keyblockfile} \ + --datapubkey \ + ${TESTKEY_SCRATCH_DIR}/key_alg${data_algonum}.vbpubk2 \ + --signpubkey \ + ${TESTKEY_SCRATCH_DIR}/key_alg${algonum}.vbpubk + if [ $? -ne 0 ] + then + echo -e "${COL_RED}Unpack${COL_STOP}" + return_code=255 + fi + + # Check + if ! cmp -s \ + ${TESTKEY_SCRATCH_DIR}/key_alg${data_algonum}.vbpubk \ + ${TESTKEY_SCRATCH_DIR}/key_alg${data_algonum}.vbpubk2 + then + echo -e "${COL_RED}Check${COL_STOP}" + return_code=255 + exit 1 + fi + + echo -e "${COL_YELLOW}Testing keyblock creation using \ +external signer.${COL_STOP}" + # Pack using external signer + # Pack + ${FUTILITY} vbutil_keyblock --pack ${keyblockfile} \ + --datapubkey \ + ${TESTKEY_SCRATCH_DIR}/key_alg${data_algonum}.vbpubk \ + --signprivate_pem \ + ${TESTKEY_DIR}/key_rsa${signing_keylen}.pem \ + --pem_algorithm "${signing_algonum}" \ + --externalsigner "${SCRIPT_DIR}/external_rsa_signer.sh" + + if [ $? -ne 0 ] + then + echo -e "${COL_RED}Pack${COL_STOP}" + return_code=255 + fi + + # Unpack + ${FUTILITY} vbutil_keyblock --unpack ${keyblockfile} \ + --datapubkey \ + ${TESTKEY_SCRATCH_DIR}/key_alg${data_algonum}.vbpubk2 \ + --signpubkey \ + ${TESTKEY_SCRATCH_DIR}/key_alg${signing_algonum}.vbpubk + if [ $? -ne 0 ] + then + echo -e "${COL_RED}Unpack${COL_STOP}" + return_code=255 + fi + + # Check + if ! cmp -s \ + ${TESTKEY_SCRATCH_DIR}/key_alg${data_algonum}.vbpubk \ + ${TESTKEY_SCRATCH_DIR}/key_alg${data_algonum}.vbpubk2 + then + echo -e "${COL_RED}Check${COL_STOP}" + return_code=255 + exit 1 + fi +} + + +function test_vbutil_keyblock_all { +# Test for various combinations of firmware signing algorithm and +# kernel signing algorithm + signing_algorithmcounter=0 + data_algorithmcounter=0 + for signing_keylen in ${key_lengths[@]} + do + for signing_hashalgo in ${hash_algos[@]} + do + let data_algorithmcounter=0 + for datakeylen in ${key_lengths[@]} + do + for datahashalgo in ${hash_algos[@]} + do + test_vbutil_keyblock_single \ + $signing_algorithmcounter $signing_keylen $signing_hashalgo \ + $data_algorithmcounter $data_keylen $data_hashalgo + let data_algorithmcounter=data_algorithmcounter+1 + done + done + let signing_algorithmcounter=signing_algorithmcounter+1 + done + done +} + +function test_vbutil_keyblock { + test_vbutil_keyblock_single 7 4096 sha256 4 2048 sha256 + test_vbutil_keyblock_single 11 8192 sha512 4 2048 sha256 + test_vbutil_keyblock_single 11 8192 sha512 7 4096 sha256 +} + + +check_test_keys + +echo +echo "Testing vbutil_key..." +if [ "$1" == "--all" ] ; then + test_vbutil_key_all +else + test_vbutil_key +fi + +echo +echo "Testing vbutil_keyblock..." +if [ "$1" == "--all" ] ; then + test_vbutil_keyblock_all +else + test_vbutil_keyblock +fi + +exit $return_code + diff --git a/tests/sha_benchmark.c b/tests/sha_benchmark.c new file mode 100644 index 0000000..27b1c10 --- /dev/null +++ b/tests/sha_benchmark.c @@ -0,0 +1,46 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include + +#include "2common.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "host_common.h" +#include "timer_utils.h" + +#define TEST_BUFFER_SIZE 4000000 + +int main(int argc, char *argv[]) { + int i; + double speed; + uint32_t msecs; + uint8_t *buffer = malloc(TEST_BUFFER_SIZE); + uint8_t digest[VB2_MAX_DIGEST_SIZE]; + ClockTimerState ct; + + /* Iterate through all the hash functions. */ + for(i = VB2_HASH_SHA1; i < VB2_HASH_ALG_COUNT; i++) { + StartTimer(&ct); + vb2_digest_buffer(buffer, TEST_BUFFER_SIZE, i, + digest, sizeof(digest)); + StopTimer(&ct); + + msecs = GetDurationMsecs(&ct); + speed = ((TEST_BUFFER_SIZE / 10e6) + / (msecs / 10e3)); /* Mbytes/sec */ + + fprintf(stderr, + "# %s Time taken = %u ms, Speed = %f Mbytes/sec\n", + vb2_get_hash_algorithm_name(i), msecs, speed); + fprintf(stdout, "mbytes_per_sec_%s:%f\n", + vb2_get_hash_algorithm_name(i), speed); + } + + free(buffer); + return 0; +} diff --git a/tests/sha_test_vectors.h b/tests/sha_test_vectors.h new file mode 100644 index 0000000..a096bb4 --- /dev/null +++ b/tests/sha_test_vectors.h @@ -0,0 +1,91 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * FIPS 180-2 test vectors for SHA-1, SHA-256 and SHA-512 + */ + +#ifndef VBOOT_REFERENCE_SHA_TEST_VECTORS_H_ +#define VBOOT_REFERENCE_SHA_TEST_VECTORS_H_ + +const char* oneblock_msg = "abc"; +const char* multiblock_msg1 = "abcdbcdecdefdefgefghfghighijhijkijkl" + "jklmklmnlmnomnopnopq"; +const char* multiblock_msg2= "abcdefghbcdefghicdefghijdefghijkefghi" + "jklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnop" + "qrsmnopqrstnopqrstu"; +char* long_msg; + +uint8_t sha1_results[][VB2_SHA1_DIGEST_SIZE] = { + { + 0xa9,0x99,0x3e,0x36,0x47,0x06,0x81,0x6a, + 0xba,0x3e,0x25,0x71,0x78,0x50,0xc2,0x6c, + 0x9c,0xd0,0xd8,0x9d + }, + { + 0x84,0x98,0x3e,0x44,0x1c,0x3b,0xd2,0x6e, + 0xba,0xae,0x4a,0xa1,0xf9,0x51,0x29,0xe5, + 0xe5,0x46,0x70,0xf1 + }, + { + 0x34,0xaa,0x97,0x3c,0xd4,0xc4,0xda,0xa4, + 0xf6,0x1e,0xeb,0x2b,0xdb,0xad,0x27,0x31, + 0x65,0x34,0x01,0x6f + } +}; + +uint8_t sha256_results[][VB2_SHA256_DIGEST_SIZE] = { + { + 0xba,0x78,0x16,0xbf,0x8f,0x01,0xcf,0xea, + 0x41,0x41,0x40,0xde,0x5d,0xae,0x22,0x23, + 0xb0,0x03,0x61,0xa3,0x96,0x17,0x7a,0x9c, + 0xb4,0x10,0xff,0x61,0xf2,0x00,0x15,0xad + }, + { + 0x24,0x8d,0x6a,0x61,0xd2,0x06,0x38,0xb8, + 0xe5,0xc0,0x26,0x93,0x0c,0x3e,0x60,0x39, + 0xa3,0x3c,0xe4,0x59,0x64,0xff,0x21,0x67, + 0xf6,0xec,0xed,0xd4,0x19,0xdb,0x06,0xc1 + }, + { + 0xcd,0xc7,0x6e,0x5c,0x99,0x14,0xfb,0x92, + 0x81,0xa1,0xc7,0xe2,0x84,0xd7,0x3e,0x67, + 0xf1,0x80,0x9a,0x48,0xa4,0x97,0x20,0x0e, + 0x04,0x6d,0x39,0xcc,0xc7,0x11,0x2c,0xd0 + } +}; + +uint8_t sha512_results[][VB2_SHA512_DIGEST_SIZE] = { + { + 0xdd,0xaf,0x35,0xa1,0x93,0x61,0x7a,0xba, + 0xcc,0x41,0x73,0x49,0xae,0x20,0x41,0x31, + 0x12,0xe6,0xfa,0x4e,0x89,0xa9,0x7e,0xa2, + 0x0a,0x9e,0xee,0xe6,0x4b,0x55,0xd3,0x9a, + 0x21,0x92,0x99,0x2a,0x27,0x4f,0xc1,0xa8, + 0x36,0xba,0x3c,0x23,0xa3,0xfe,0xeb,0xbd, + 0x45,0x4d,0x44,0x23,0x64,0x3c,0xe8,0x0e, + 0x2a,0x9a,0xc9,0x4f,0xa5,0x4c,0xa4,0x9f + }, + { + 0x8e,0x95,0x9b,0x75,0xda,0xe3,0x13,0xda, + 0x8c,0xf4,0xf7,0x28,0x14,0xfc,0x14,0x3f, + 0x8f,0x77,0x79,0xc6,0xeb,0x9f,0x7f,0xa1, + 0x72,0x99,0xae,0xad,0xb6,0x88,0x90,0x18, + 0x50,0x1d,0x28,0x9e,0x49,0x00,0xf7,0xe4, + 0x33,0x1b,0x99,0xde,0xc4,0xb5,0x43,0x3a, + 0xc7,0xd3,0x29,0xee,0xb6,0xdd,0x26,0x54, + 0x5e,0x96,0xe5,0x5b,0x87,0x4b,0xe9,0x09 + }, + { + 0xe7,0x18,0x48,0x3d,0x0c,0xe7,0x69,0x64, + 0x4e,0x2e,0x42,0xc7,0xbc,0x15,0xb4,0x63, + 0x8e,0x1f,0x98,0xb1,0x3b,0x20,0x44,0x28, + 0x56,0x32,0xa8,0x03,0xaf,0xa9,0x73,0xeb, + 0xde,0x0f,0xf2,0x44,0x87,0x7e,0xa6,0x0a, + 0x4c,0xb0,0x43,0x2c,0xe5,0x77,0xc3,0x1b, + 0xeb,0x00,0x9c,0x5c,0x2c,0x49,0xaa,0x2e, + 0x4e,0xad,0xb2,0x17,0xad,0x8c,0xc0,0x9b + } +}; + +#endif /* VBOOT_REFERENCE_SHA_TEST_VECTORS_H_ */ diff --git a/tests/sha_tests.c b/tests/sha_tests.c new file mode 100644 index 0000000..1d78204 --- /dev/null +++ b/tests/sha_tests.c @@ -0,0 +1,107 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* FIPS 180-2 Tests for message digest functions. */ + +#include +#include +#include +#include + +#include "sha_test_vectors.h" + +int SHA1_tests(void) { + int i, success = 1; + uint8_t sha1_digest[SHA1_DIGEST_SIZE]; + uint8_t* test_inputs[3]; + test_inputs[0] = (uint8_t *) oneblock_msg; + test_inputs[1] = (uint8_t *) multiblock_msg1; + test_inputs[2] = (uint8_t *) long_msg; + + for (i = 0; i < 3; i++) { + internal_SHA1(test_inputs[i], strlen((char *)test_inputs[i]), + sha1_digest); + if (!memcmp(sha1_digest, sha1_results[i], + SHA1_DIGEST_SIZE)) { + fprintf(stderr, "Test vector %d PASSED for SHA-1\n", + i+1); + } + else { + fprintf(stderr, "Test vector %d FAILED for SHA-1\n", + i+1); + success = 0; + } + } + return success; +} + +int SHA256_tests(void) { + int i, success = 1; + uint8_t sha256_digest[SHA256_DIGEST_SIZE]; + uint8_t* test_inputs[3]; + test_inputs[0] = (uint8_t *) oneblock_msg; + test_inputs[1] = (uint8_t *) multiblock_msg1; + test_inputs[2] = (uint8_t *) long_msg; + + for (i = 0; i < 3; i++) { + internal_SHA256(test_inputs[i], strlen((char *)test_inputs[i]), + sha256_digest); + if (!memcmp(sha256_digest, sha256_results[i], + SHA256_DIGEST_SIZE)) { + fprintf(stderr, "Test vector %d PASSED for SHA-256\n", + i+1); + } + else { + fprintf(stderr, "Test vector %d FAILED for SHA-256\n", + i+1); + success = 0; + } + } + return success; +} + +int SHA512_tests(void) { + int i, success = 1; + uint8_t sha512_digest[SHA512_DIGEST_SIZE]; + uint8_t* test_inputs[3]; + test_inputs[0] = (uint8_t *) oneblock_msg; + test_inputs[1] = (uint8_t *) multiblock_msg2; + test_inputs[2] = (uint8_t *) long_msg; + + for (i = 0; i < 3; i++) { + internal_SHA512(test_inputs[i], strlen((char *)test_inputs[i]), + sha512_digest); + if (!memcmp(sha512_digest, sha512_results[i], + SHA512_DIGEST_SIZE)) { + fprintf(stderr, "Test vector %d PASSED for SHA-512\n", + i+1); + } + else { + fprintf(stderr, "Test vector %d FAILED for SHA-512\n", + i+1); + success = 0; + } + } + return success; +} + +int main(int argc, char* argv[]) { + int success = 1; + /* Initialize long_msg with 'a' x 1,000,000 */ + long_msg = (char *) malloc(1000001); + memset(long_msg, 'a', 1000000); + long_msg[1000000]=0; + + if (!SHA1_tests()) + success = 0; + if (!SHA256_tests()) + success = 0; + if (!SHA512_tests()) + success = 0; + + free(long_msg); + + return !success; +} diff --git a/tests/subprocess_tests.c b/tests/subprocess_tests.c new file mode 100644 index 0000000..75d6e49 --- /dev/null +++ b/tests/subprocess_tests.c @@ -0,0 +1,292 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include + +#include "subprocess.h" +#include "test_common.h" + +#define TEST_STRING "hello world" +#define TEST_STRING_LN TEST_STRING "\n" + +static void test_subprocess_output_to_buffer(void) +{ + char output_buffer[__builtin_strlen(TEST_STRING_LN)]; + + struct subprocess_target output = { + .type = TARGET_BUFFER, + .buffer = { + .buf = output_buffer, + .size = sizeof(output_buffer), + }, + }; + const char *const argv[] = { + "echo", TEST_STRING, NULL + }; + + TEST_EQ(subprocess_run(argv, &subprocess_null, &output, NULL), 0, + "Return value of \"echo 'hello world'\" is 0"); + TEST_EQ(memcmp(output_buffer, TEST_STRING_LN, sizeof(output_buffer)), 0, + "Output is \"hello world\\n\""); + TEST_EQ(output.buffer.bytes_consumed, sizeof(output_buffer), + "The entire output buffer should have been used."); +} + +static void test_subprocess_output_to_buffer_null_terminated(void) +{ + char output_buffer[__builtin_strlen(TEST_STRING_LN) + 1]; + + struct subprocess_target output = { + .type = TARGET_BUFFER_NULL_TERMINATED, + .buffer = { + .buf = output_buffer, + .size = sizeof(output_buffer), + }, + }; + const char *const argv[] = { + "echo", TEST_STRING, NULL + }; + + TEST_EQ(subprocess_run(argv, &subprocess_null, &output, NULL), 0, + "Return value of \"echo 'hello world'\" is 0"); + TEST_STR_EQ(output_buffer, TEST_STRING_LN, + "Output is \"hello world\\n\""); + TEST_EQ(output.buffer.bytes_consumed, sizeof(output_buffer) - 1, + "The entire output buffer should have been used."); +} + +#define TEST_STRING_2 "hello\0world!" + +static void test_subprocess_input_buffer(void) +{ + char input_buffer[sizeof(TEST_STRING_2)]; + char output_buffer[20]; + char error_buffer[20]; + + memcpy(input_buffer, TEST_STRING_2, sizeof(input_buffer)); + + struct subprocess_target input = { + .type = TARGET_BUFFER, + .buffer = { + .buf = input_buffer, + .size = sizeof(input_buffer), + }, + }; + struct subprocess_target output = { + .type = TARGET_BUFFER_NULL_TERMINATED, + .buffer = { + .buf = output_buffer, + .size = sizeof(output_buffer), + }, + }; + struct subprocess_target error = { + .type = TARGET_BUFFER_NULL_TERMINATED, + .buffer = { + .buf = error_buffer, + .size = sizeof(error_buffer), + }, + }; + const char *const argv[] = {"cat", NULL}; + + TEST_EQ(subprocess_run(argv, &input, &output, &error), 0, + "Return value of \"cat\" is 0"); + TEST_EQ(memcmp(output_buffer, TEST_STRING_2, sizeof(TEST_STRING_2)), + 0, "Output is \"hello\\0world!\""); + TEST_STR_EQ(error_buffer, "", "No output captured on stderr"); + TEST_EQ(output.buffer.bytes_consumed, sizeof(TEST_STRING_2), + "Bytes consumed is correct"); + TEST_EQ(error.buffer.bytes_consumed, 0, "No bytes used for error"); +} + +static void test_subprocess_input_null_terminated(void) +{ + char input_buffer[20]; + char output_buffer[20]; + char error_buffer[20]; + + memcpy(input_buffer, TEST_STRING_2, sizeof(TEST_STRING_2)); + + struct subprocess_target input = { + .type = TARGET_BUFFER_NULL_TERMINATED, + .buffer = { + .buf = input_buffer, + }, + }; + struct subprocess_target output = { + .type = TARGET_BUFFER_NULL_TERMINATED, + .buffer = { + .buf = output_buffer, + .size = sizeof(output_buffer), + }, + }; + struct subprocess_target error = { + .type = TARGET_BUFFER_NULL_TERMINATED, + .buffer = { + .buf = error_buffer, + .size = sizeof(error_buffer), + }, + }; + const char *const argv[] = {"cat", NULL}; + + TEST_EQ(subprocess_run(argv, &input, &output, &error), 0, + "Return value of \"cat\" is 0"); + TEST_STR_EQ(output_buffer, "hello", "Output is \"hello\""); + TEST_STR_EQ(error_buffer, "", "No output captured on stderr"); + TEST_EQ(output.buffer.bytes_consumed, 5, "5 bytes used"); + TEST_EQ(error.buffer.bytes_consumed, 0, "No bytes used for error"); +} + +static void test_subprocess_small_output_buffer(void) +{ + char output_buffer[3]; + + struct subprocess_target output = { + .type = TARGET_BUFFER_NULL_TERMINATED, + .buffer = { + .buf = output_buffer, + .size = sizeof(output_buffer), + }, + }; + const char *const argv[] = { + "echo", TEST_STRING, NULL + }; + + TEST_EQ(subprocess_run(argv, &subprocess_null, &output, NULL), 0, + "Return value of \"echo 'hello world'\" is 0"); + TEST_STR_EQ(output_buffer, "he", + "Output is \"he\" (truncated to small buffer)"); + TEST_EQ(output.buffer.bytes_consumed, sizeof(output_buffer) - 1, + "The entire output buffer should have been used."); +} + +static void test_subprocess_return_code_failure(void) +{ + const char *const argv[] = {"false", NULL}; + + TEST_NEQ(subprocess_run(argv, NULL, NULL, NULL), 0, + "Return value of \"false\" is nonzero"); +} + +struct cb_ctx { + char buffer[49 * 1024]; + char *ptr; +}; + +static ssize_t input_cb(char *buf, size_t buf_sz, void *data) +{ + struct cb_ctx *ctx = (struct cb_ctx *)data; + size_t len = (ctx->buffer + sizeof(ctx->buffer)) - ctx->ptr; + if (len > buf_sz) + len = buf_sz; + memcpy(buf, ctx->ptr, len); + ctx->ptr += len; + return len; +} + +static void test_subprocess_input_from_cb(void) +{ + struct cb_ctx ctx; + char output_buffer[sizeof(ctx.buffer)]; + const char *const argv[] = {"cat", NULL}; + + /* Initialize the input buffer with some data */ + for (size_t i = 0; i < sizeof(ctx.buffer); i++) + ctx.buffer[i] = (char)i; + ctx.ptr = ctx.buffer; + + struct subprocess_target output = { + .type = TARGET_BUFFER, + .buffer = { + .buf = output_buffer, + .size = sizeof(output_buffer), + }, + }; + + struct subprocess_target input = { + .type = TARGET_CALLBACK, + .callback = { + .cb = input_cb, + .data = &ctx, + }, + }; + TEST_EQ(subprocess_run(argv, &input, &output, NULL), 0, + "Return value of \"cat\" is zero."); + TEST_EQ(memcmp(ctx.buffer, output_buffer, sizeof(output_buffer)), 0, + "The input buffer is equal to the output buffer."); + TEST_EQ(output.buffer.bytes_consumed, sizeof(output_buffer), + "The entire output buffer should have been used."); +} + +static ssize_t output_cb(char *buf, size_t buf_sz, void *data) +{ + struct cb_ctx *ctx = (struct cb_ctx *)data; + if (ctx->ptr + buf_sz > ctx->buffer + sizeof(ctx->buffer)) { + TEST_TRUE(0, "Test failed as there is not enough space in the " + "output buffer."); + return -1; + } + memcpy(ctx->ptr, buf, buf_sz); + ctx->ptr += buf_sz; + return 0; +} + +static void test_subprocess_output_to_cb(void) +{ + struct cb_ctx ctx; + char output_buffer[sizeof(ctx.buffer)]; + const char *const argv[] = { + "bc", "-l", NULL + }; + + ctx.ptr = ctx.buffer; + + struct subprocess_target input = { + .type = TARGET_BUFFER_NULL_TERMINATED, + .buffer = { + .buf = (char *)"for (i = 0; i <= 10000; i += 1) i\n", + }, + }; + + struct subprocess_target target_via_buffer = { + .type = TARGET_BUFFER, + .buffer = { + .buf = output_buffer, + .size = sizeof(output_buffer), + }, + }; + + struct subprocess_target target_via_cb = { + .type = TARGET_CALLBACK, + .callback = { + .cb = output_cb, + .data = &ctx, + }, + }; + + TEST_EQ(subprocess_run(argv, &input, &target_via_buffer, NULL), 0, + "Return value is zero when using buffer."); + TEST_EQ(subprocess_run(argv, &input, &target_via_cb, NULL), 0, + "Return value is zero when using callback."); + TEST_EQ(ctx.ptr - ctx.buffer, target_via_buffer.buffer.bytes_consumed, + "Both commmand invocations used the same number of bytes."); + TEST_EQ(memcmp(output_buffer, ctx.buffer, + target_via_buffer.buffer.bytes_consumed), + 0, "Both output buffers are equivalent."); +} + +int main(int argc, char *argv[]) +{ + test_subprocess_output_to_buffer(); + test_subprocess_output_to_buffer_null_terminated(); + test_subprocess_input_buffer(); + test_subprocess_input_null_terminated(); + test_subprocess_small_output_buffer(); + test_subprocess_return_code_failure(); + test_subprocess_input_from_cb(); + test_subprocess_output_to_cb(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/test_common.c b/tests/test_common.c new file mode 100644 index 0000000..2ce3a5d --- /dev/null +++ b/tests/test_common.c @@ -0,0 +1,217 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Common functions used by tests. + */ + +#include +#include +#include + +#include "2common.h" +#include "test_common.h" + +/* Global test success flag. */ +int gTestSuccess = 1; +int gTestAbortArmed = 0; +jmp_buf gTestJmpEnv; + +static void print_passed(const char *preamble, const char *desc, + const char *comment) +{ + fprintf(stderr, "%s: %s ... " COL_GREEN "PASSED\n" COL_STOP, + preamble, comment ? comment : desc); +} + +static void print_failed(const char *preamble, const char *desc, + const char *comment) +{ + fprintf(stderr, "%s: %s ... " COL_RED "FAILED\n" COL_STOP, + preamble, comment ? comment : desc); +} + +int test_eq(int result, int expected, + const char *preamble, const char *desc, const char *comment) +{ + if (result == expected) { + print_passed(preamble, desc, comment); + return 1; + } else { + print_failed(preamble, desc, comment); + fprintf(stderr, " Expected: %#x (%d), got: %#x (%d)\n", + expected, expected, result, result); + gTestSuccess = 0; + return 0; + } +} + +int test_neq(int result, int not_expected, + const char *preamble, const char *desc, const char *comment) +{ + if (result != not_expected) { + print_passed(preamble, desc, comment); + return 1; + } else { + print_failed(preamble, desc, comment); + fprintf(stderr, " Didn't expect %#x (%d), but got it.\n", + not_expected, not_expected); + gTestSuccess = 0; + return 0; + } +} + +int test_ptr_eq(const void* result, const void* expected, + const char *preamble, const char *desc, const char *comment) +{ + if (result == expected) { + print_passed(preamble, desc, comment); + return 1; + } else { + print_failed(preamble, desc, comment); + fprintf(stderr, " Expected: %#lx, got: %#lx\n", + (long)expected, (long)result); + gTestSuccess = 0; + return 0; + } +} + +int test_ptr_neq(const void* result, const void* not_expected, + const char *preamble, const char *desc, const char *comment) +{ + if (result != not_expected) { + print_passed(preamble, desc, comment); + return 1; + } else { + print_failed(preamble, desc, comment); + fprintf(stderr, " Didn't expect %#lx, but got it\n", + (long)not_expected); + gTestSuccess = 0; + return 0; + } +} + +int test_str_eq(const char* result, const char* expected, + const char *preamble, const char *desc, const char *comment) +{ + if (!result || !expected) { + print_failed(preamble, desc, comment); + fprintf(stderr, " String compare with NULL\n"); + gTestSuccess = 0; + return 0; + } else if (!strcmp(result, expected)) { + print_passed(preamble, desc, comment); + return 1; + } else { + print_failed(preamble, desc, comment); + fprintf(stderr, " Expected: \"%s\", got: \"%s\"\n", + expected, result); + gTestSuccess = 0; + return 0; + } +} + +int test_str_neq(const char* result, const char* not_expected, + const char *preamble, const char *desc, const char *comment) +{ + if (!result || !not_expected) { + print_failed(preamble, desc, comment); + fprintf(stderr, " String compare with NULL\n"); + gTestSuccess = 0; + return 0; + } else if (strcmp(result, not_expected)) { + print_passed(preamble, desc, comment); + fprintf(stderr, "%s: %s, %s ... " COL_GREEN "PASSED\n" COL_STOP, + preamble, desc, comment); + return 1; + } else { + print_failed(preamble, desc, comment); + fprintf(stderr, " Didn't expect: \"%s\", but got it\n", + not_expected); + gTestSuccess = 0; + return 0; + } +} + +int test_succ(int result, + const char *preamble, const char *desc, const char *comment) +{ + if (result == 0) { + print_passed(preamble, desc, comment); + } else { + print_failed(preamble, desc, comment); + fprintf(stderr, " Expected SUCCESS, got: %#x (%d)\n", + result, result); + gTestSuccess = 0; + } + return !result; +} + +int test_fail(int result, + const char *preamble, const char *desc, const char *comment) +{ + if (result != 0) { + print_passed(preamble, desc, comment); + } else { + print_failed(preamble, desc, comment); + fprintf(stderr, + " Didn't expect SUCCESS (0), but got it\n"); + gTestSuccess = 0; + } + return result; +} + +int test_true(int result, + const char *preamble, const char *desc, const char *comment) +{ + if (result) { + print_passed(preamble, desc, comment); + } else { + print_failed(preamble, desc, comment); + fprintf(stderr, " Expected TRUE, got 0\n"); + gTestSuccess = 0; + } + return result; +} + +int test_false(int result, + const char *preamble, const char *desc, const char *comment) +{ + if (!result) { + print_passed(preamble, desc, comment); + } else { + print_failed(preamble, desc, comment); + fprintf(stderr, " Expected FALSE, got: %#lx\n", + (long)result); + gTestSuccess = 0; + } + return !result; +} + +int test_abort(int aborted, + const char *preamble, const char *desc, const char *comment) +{ + if (aborted) { + print_passed(preamble, desc, comment); + } else { + print_failed(preamble, desc, comment); + fprintf(stderr, " Expected ABORT, but did not get it\n"); + gTestSuccess = 0; + } + return aborted; +} + +void vb2ex_abort(void) +{ + /* + * If expecting an abort call, jump back to TEST_ABORT macro. + * Otherwise, force exit to ensure the test fails. + */ + if (gTestAbortArmed) { + longjmp(gTestJmpEnv, 1); + } else { + fprintf(stderr, COL_RED "Unexpected ABORT encountered, " + "exiting\n" COL_STOP); + exit(1); + } +} diff --git a/tests/test_common.h b/tests/test_common.h new file mode 100644 index 0000000..c3da880 --- /dev/null +++ b/tests/test_common.h @@ -0,0 +1,167 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_TEST_COMMON_H_ +#define VBOOT_REFERENCE_TEST_COMMON_H_ + +#include +#include + +/* Used to get a line number as a constant string. Need to stringify it twice */ +#define STRINGIFY(x) #x +#define TOSTRING(x) STRINGIFY(x) + +extern int gTestSuccess; +extern int gTestAbortArmed; +extern jmp_buf gTestJmpEnv; + +/* Return 1 if result is equal to expected_result, else return 0. + * Also update the global gTestSuccess flag if test fails. */ +int test_eq(int result, int expected, + const char *preamble, const char *desc, const char *comment); + +#define TEST_EQ(result, expected, comment) \ + test_eq(result, expected, \ + __FILE__ ":" TOSTRING(__LINE__), \ + #result " == " #expected, \ + comment) + +#define TEST_EQ_S(result, expected) TEST_EQ(result, expected, NULL); + +/* Return 0 if result is equal to not_expected_result, else return 1. + * Also update the global gTestSuccess flag if test fails. */ +int test_neq(int result, int not_expected, + const char *preamble, const char *desc, const char *comment); + +#define TEST_NEQ(result, not_expected, comment) \ + test_neq(result, not_expected, \ + __FILE__ ":" TOSTRING(__LINE__), \ + #result " != " #not_expected, \ + comment) + +/* Return 1 if result pointer is equal to expected_result pointer, + * else return 0. Does not check pointer contents, only the pointer + * itself. Also update the global gTestSuccess flag if test fails. */ +int test_ptr_eq(const void* result, const void* expected, + const char *preamble, const char *desc, const char *comment); + +#define TEST_PTR_EQ(result, expected, comment) \ + test_ptr_eq(result, expected, \ + __FILE__ ":" TOSTRING(__LINE__), \ + #result " == " #expected, \ + comment) + +/* Return 1 if result pointer is not equal to expected_result pointer, + * else return 0. Does not check pointer contents, only the pointer + * itself. Also update the global gTestSuccess flag if test fails. */ +int test_ptr_neq(const void* result, const void* not_expected, + const char *preamble, const char *desc, const char *comment); + +#define TEST_PTR_NEQ(result, not_expected, comment) \ + test_ptr_neq(result, not_expected, \ + __FILE__ ":" TOSTRING(__LINE__), \ + #result " != " #not_expected, \ + comment) + +/* Return 1 if result string is equal to expected_result string, + * else return 0. Also update the global gTestSuccess flag if test fails. */ +int test_str_eq(const char* result, const char* expected, + const char *preamble, const char *desc, const char *comment); + +#define TEST_STR_EQ(result, expected, comment) \ + test_str_eq(result, expected, \ + __FILE__ ":" TOSTRING(__LINE__), \ + #result " == " #expected, \ + comment) + +/* Return 1 if result string is not equal to not_expected string, + * else return 0. Also update the global gTestSuccess flag if test fails. */ +int test_str_neq(const char* result, const char* not_expected, + const char *preamble, const char *desc, const char *comment); + +#define TEST_STR_NEQ(result, not_expected, comment) \ + test_str_neq(result, not_expected, \ + __FILE__ ":" TOSTRING(__LINE__), \ + #result " != " #not_expected, \ + comment) + +/* Return 1 if the result is true, else return 0. + * Also update the global gTestSuccess flag if test fails. */ +int test_true(int result, + const char *preamble, const char *desc, const char *comment); + +#define TEST_TRUE(result, comment) \ + test_true(result, \ + __FILE__ ":" TOSTRING(__LINE__), \ + #result " == true", \ + comment) + +/* Return 1 if the result is false, else return 0. + * Also update the global gTestSuccess flag if test fails. */ +int test_false(int result, + const char *preamble, const char *desc, const char *comment); + +#define TEST_FALSE(result, comment) \ + test_false(result, \ + __FILE__ ":" TOSTRING(__LINE__), \ + #result " == false", \ + comment) + +/* Return 1 if result is 0 (VB2_SUCCESS or other), else return 0. + * Also update the global gTestSuccess flag if test fails. */ +int test_succ(int result, + const char *preamble, const char *desc, const char *comment); + +#define TEST_SUCC(result, comment) \ + test_succ(result, \ + __FILE__ ":" TOSTRING(__LINE__), \ + #result " == 0", \ + comment) + +/* Return 1 if result is not 0 (VB2_SUCCESS or other), else return 1. + * Also update the global gTestSuccess flag if test fails. */ +int test_fail(int result, + const char *preamble, const char *desc, const char *comment); + +#define TEST_FAIL(result, comment) \ + test_fail(result, \ + __FILE__ ":" TOSTRING(__LINE__), \ + #result " != 0", \ + comment) + +/* Return 1 if vb2ex_abort() was called, else return 0. + * Also update the global gTestSuccess flag if test fails. */ +int test_abort(int aborted, + const char *preamble, const char *desc, const char *comment); + +#define TEST_ABORT(call, comment) do { \ + gTestAbortArmed = 1; \ + int jumped = setjmp(gTestJmpEnv); \ + if (!jumped) \ + call; \ + gTestAbortArmed = 0; \ + test_abort(jumped, \ + __FILE__ ":" TOSTRING(__LINE__), \ + #call " causes abort", \ + comment); \ +} while (0) + +/* ANSI Color coding sequences. + * + * Don't use \e as MSC does not recognize it as a valid escape sequence. + */ +#define COL_GREEN "\x1b[1;32m" +#define COL_YELLOW "\x1b[1;33m" +#define COL_RED "\x1b[0;31m" +#define COL_STOP "\x1b[m" + +/* Abort if asprintf fails. */ +#define xasprintf(...) \ + do { \ + if (asprintf(__VA_ARGS__) < 0) \ + abort(); \ + } while (0) + +#endif /* VBOOT_REFERENCE_TEST_COMMON_H_ */ diff --git a/tests/test_using_qemu.sh b/tests/test_using_qemu.sh new file mode 100755 index 0000000..081d963 --- /dev/null +++ b/tests/test_using_qemu.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# +# Copyright (c) 2013 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# Script to run a test under qemu +# +# Usage: +# test_using_qemu.sh (command line to run) +# +# Required environment variables: +# BUILD_RUN - path to build directory inside chroot +# HOME - home directory inside chroot +# QEMU_RUN - path to QEMU binary inside chroot +# SYSROOT - path to root for target platform, outside chroot + +set -e + +# Set up mounts +sudo mkdir -p "${SYSROOT}/proc" "${SYSROOT}/dev" +sudo mount --bind /proc "${SYSROOT}/proc" +sudo mount --bind /dev "${SYSROOT}/dev" + +# Don't exit on error, so we can capture the error code +set +e +sudo chroot ${SYSROOT} ${QEMU_RUN} \ + -E LD_LIBRARY_PATH=/lib64:/lib:/usr/lib64:/usr/lib \ + -E HOME=${HOME} \ + -E BUILD=${BUILD_RUN} \ + -- $* +exit_code=$? +set -e + +# Clean up mounts +sudo umount -l "${SYSROOT}/proc" +sudo umount -l "${SYSROOT}/dev" + +# Pass through exit code from command +exit $exit_code diff --git a/tests/testcases/padding_test_vectors.inc b/tests/testcases/padding_test_vectors.inc new file mode 100644 index 0000000..7555726 --- /dev/null +++ b/tests/testcases/padding_test_vectors.inc @@ -0,0 +1,1654 @@ +{175, 252, 122, 177, 196, 124, 26, 246, 113, 221, 91, 127, 46, 121, 0, 232, 225, 212, 163, 162, 94, 49, 146, 83, 85, 251, 92, 117, 65, 23, 246, 152, 17, 126, 225, 193, 9, 51, 114, 227, 198, 22, 191, 180, 90, 76, 55, 169, 193, 11, 87, 102, 96, 206, 59, 98, 120, 100, 23, 36, 161, 60, 161, 181, 67, 0, 65, 53, 43, 60, 112, 222, 201, 80, 233, 20, 123, 2, 7, 32, 26, 231, 235, 192, 127, 50, 196, 72, 173, 149, 18, 240, 144, 144, 166, 59, 11, 44, 93, 157, 207, 184, 104, 49, 66, 92, 56, 74, 166, 36, 32, 182, 86, 182, 71, 58, 60, 252, 121, 39, 181, 181, 74, 106, 36, 159, 129, 27}, +{63, 199, 230, 54, 70, 66, 32, 224, 207, 175, 98, 55, 75, 156, 173, 231, 246, 22, 84, 134, 127, 212, 74, 169, 189, 136, 39, 116, 135, 156, 213, 152, 122, 64, 205, 154, 245, 101, 227, 7, 28, 210, 35, 210, 246, 188, 205, 187, 255, 84, 44, 122, 47, 211, 215, 128, 84, 7, 76, 88, 82, 21, 247, 42, 1, 152, 159, 162, 80, 143, 144, 208, 237, 27, 10, 89, 211, 243, 124, 173, 40, 184, 63, 238, 109, 35, 158, 76, 83, 94, 233, 56, 130, 21, 148, 150, 231, 5, 19, 129, 17, 187, 127, 198, 123, 126, 129, 141, 227, 250, 227, 41, 28, 209, 25, 145, 169, 36, 19, 207, 74, 253, 246, 205, 6, 6, 39, 250}, +{53, 246, 254, 141, 208, 15, 13, 5, 31, 255, 135, 186, 189, 70, 14, 71, 89, 225, 28, 80, 65, 48, 123, 183, 186, 60, 189, 183, 80, 61, 57, 144, 109, 180, 200, 166, 217, 129, 14, 240, 231, 208, 189, 120, 106, 90, 144, 114, 236, 163, 179, 18, 0, 232, 53, 70, 1, 54, 231, 113, 118, 90, 130, 55, 164, 224, 218, 88, 88, 103, 57, 249, 137, 207, 150, 133, 234, 96, 149, 217, 170, 187, 223, 60, 46, 5, 118, 144, 155, 71, 15, 189, 216, 46, 78, 95, 200, 195, 0, 39, 100, 81, 15, 0, 70, 105, 26, 203, 162, 42, 32, 128, 211, 95, 150, 12, 8, 177, 158, 116, 214, 83, 121, 65, 87, 252, 152, 147}, +{23, 57, 155, 227, 220, 79, 157, 167, 251, 163, 241, 59, 11, 88, 117, 44, 158, 123, 62, 225, 65, 185, 10, 135, 22, 65, 180, 71, 138, 156, 243, 200, 77, 203, 7, 66, 15, 83, 122, 255, 253, 44, 48, 244, 58, 42, 125, 54, 211, 86, 15, 93, 72, 229, 124, 24, 207, 19, 152, 208, 201, 123, 195, 41, 119, 13, 45, 180, 168, 95, 204, 191, 147, 204, 69, 27, 161, 27, 59, 233, 44, 63, 230, 9, 227, 157, 123, 137, 75, 69, 229, 164, 124, 39, 139, 76, 9, 46, 38, 212, 202, 155, 90, 4, 46, 166, 188, 191, 100, 194, 173, 157, 108, 159, 123, 181, 137, 170, 127, 177, 99, 190, 134, 33, 174, 179, 244, 100}, +{150, 30, 159, 80, 149, 11, 249, 69, 153, 34, 149, 16, 116, 49, 158, 178, 223, 223, 178, 23, 19, 108, 188, 101, 220, 192, 143, 193, 194, 71, 178, 250, 35, 83, 187, 75, 107, 170, 247, 40, 245, 127, 227, 90, 192, 34, 99, 29, 79, 10, 68, 55, 104, 238, 204, 4, 191, 54, 135, 249, 230, 13, 190, 253, 252, 195, 35, 73, 87, 205, 115, 5, 8, 121, 51, 214, 74, 176, 68, 167, 62, 190, 165, 1, 243, 134, 63, 40, 177, 140, 21, 185, 1, 237, 65, 193, 234, 194, 231, 187, 106, 187, 200, 92, 121, 51, 177, 57, 237, 73, 246, 224, 247, 157, 119, 156, 28, 116, 30, 204, 157, 113, 80, 147, 226, 242, 80, 29}, +{84, 146, 252, 41, 116, 142, 76, 161, 185, 133, 34, 196, 79, 14, 217, 155, 171, 85, 71, 232, 31, 61, 78, 43, 244, 58, 219, 5, 162, 130, 95, 47, 16, 63, 220, 85, 109, 57, 102, 76, 171, 63, 47, 211, 46, 52, 50, 227, 85, 62, 178, 146, 236, 208, 92, 204, 79, 83, 88, 55, 75, 100, 6, 179, 123, 113, 236, 212, 37, 237, 178, 91, 190, 19, 112, 67, 175, 229, 169, 189, 202, 112, 133, 111, 57, 23, 196, 31, 247, 197, 139, 245, 218, 110, 151, 100, 201, 27, 212, 97, 188, 229, 136, 215, 160, 4, 7, 255, 197, 133, 176, 70, 80, 42, 194, 77, 0, 85, 218, 87, 84, 155, 186, 35, 175, 244, 52, 177}, +{99, 224, 129, 53, 122, 130, 26, 149, 166, 24, 146, 252, 6, 68, 155, 230, 126, 28, 78, 98, 69, 24, 32, 194, 137, 29, 252, 224, 200, 113, 73, 19, 97, 86, 35, 230, 225, 205, 251, 238, 214, 50, 67, 15, 127, 79, 50, 19, 116, 225, 130, 160, 119, 216, 96, 255, 67, 190, 187, 46, 7, 202, 238, 247, 177, 87, 122, 148, 50, 230, 20, 194, 178, 232, 5, 255, 141, 67, 168, 90, 5, 137, 119, 140, 11, 236, 227, 8, 153, 129, 56, 79, 160, 171, 34, 220, 158, 148, 113, 76, 31, 96, 66, 107, 243, 241, 132, 43, 59, 46, 81, 49, 170, 80, 19, 93, 73, 47, 204, 75, 174, 100, 96, 195, 111, 201, 215, 138}, +{107, 126, 89, 125, 208, 132, 6, 216, 192, 73, 251, 165, 211, 82, 48, 100, 6, 109, 209, 156, 43, 72, 147, 2, 39, 86, 108, 196, 121, 214, 237, 169, 100, 146, 81, 245, 248, 135, 4, 110, 187, 8, 74, 238, 177, 255, 161, 239, 178, 251, 87, 105, 71, 23, 22, 172, 227, 169, 23, 174, 117, 49, 218, 105, 208, 193, 20, 242, 10, 234, 125, 147, 99, 107, 26, 229, 165, 115, 41, 17, 85, 35, 113, 3, 189, 82, 171, 31, 23, 79, 251, 204, 56, 229, 248, 221, 192, 101, 17, 170, 60, 81, 131, 116, 180, 81, 52, 241, 77, 4, 139, 7, 74, 153, 4, 152, 12, 127, 35, 179, 72, 43, 103, 255, 117, 81, 28, 121}, +{43, 84, 194, 177, 38, 22, 141, 12, 3, 187, 61, 8, 31, 255, 81, 66, 239, 162, 109, 19, 110, 209, 205, 56, 61, 246, 248, 209, 34, 15, 176, 193, 153, 138, 88, 218, 5, 226, 206, 119, 188, 81, 156, 13, 242, 247, 38, 164, 107, 87, 124, 183, 231, 107, 106, 169, 7, 59, 144, 14, 59, 78, 86, 151, 91, 32, 55, 123, 148, 67, 90, 249, 111, 79, 1, 35, 233, 26, 34, 68, 228, 74, 167, 53, 158, 60, 59, 50, 93, 145, 48, 51, 252, 113, 154, 5, 156, 2, 212, 126, 104, 85, 138, 210, 31, 247, 167, 160, 217, 96, 125, 64, 161, 68, 102, 26, 214, 74, 70, 96, 235, 250, 81, 72, 103, 212, 6, 55}, +{195, 241, 199, 232, 15, 74, 155, 40, 46, 84, 249, 144, 47, 169, 16, 74, 217, 147, 200, 213, 138, 88, 153, 234, 200, 99, 232, 118, 217, 240, 213, 17, 64, 239, 163, 2, 155, 149, 128, 224, 244, 212, 214, 91, 254, 21, 9, 237, 67, 88, 54, 38, 161, 58, 21, 190, 133, 172, 188, 198, 250, 90, 30, 159, 108, 6, 78, 36, 48, 31, 89, 249, 70, 202, 176, 39, 16, 195, 52, 24, 196, 255, 38, 70, 11, 73, 169, 55, 169, 60, 165, 202, 97, 91, 121, 104, 44, 197, 224, 243, 165, 9, 208, 126, 144, 59, 147, 142, 153, 30, 68, 8, 0, 31, 98, 121, 22, 192, 223, 3, 31, 239, 14, 200, 107, 84, 199, 201}, +{47, 96, 6, 227, 11, 197, 77, 67, 31, 191, 3, 6, 148, 83, 120, 193, 100, 203, 130, 84, 138, 160, 80, 210, 82, 0, 174, 62, 18, 252, 113, 11, 172, 241, 105, 0, 39, 96, 116, 208, 204, 39, 41, 113, 1, 139, 149, 142, 57, 233, 19, 96, 3, 82, 44, 207, 217, 38, 171, 252, 164, 64, 198, 58, 238, 31, 237, 191, 227, 54, 139, 168, 212, 69, 96, 52, 142, 1, 152, 121, 189, 2, 249, 55, 35, 121, 88, 93, 241, 248, 247, 1, 206, 55, 219, 60, 160, 50, 245, 19, 4, 238, 84, 52, 5, 27, 102, 119, 201, 83, 128, 60, 110, 134, 135, 172, 87, 98, 224, 90, 137, 68, 171, 221, 105, 182, 244, 44}, +{95, 237, 173, 102, 88, 166, 76, 83, 85, 54, 120, 138, 77, 207, 87, 50, 159, 24, 158, 240, 32, 147, 155, 250, 19, 24, 232, 50, 93, 169, 88, 79, 28, 104, 210, 41, 84, 163, 51, 98, 32, 98, 112, 149, 61, 130, 176, 153, 108, 122, 17, 187, 204, 146, 252, 168, 135, 19, 194, 152, 86, 75, 177, 209, 208, 41, 111, 126, 228, 231, 223, 137, 107, 70, 58, 117, 126, 110, 141, 106, 77, 41, 60, 75, 198, 153, 78, 73, 13, 55, 148, 77, 1, 187, 1, 201, 46, 203, 37, 128, 166, 87, 127, 137, 164, 119, 113, 168, 73, 64, 85, 197, 25, 55, 20, 165, 34, 31, 202, 250, 182, 186, 169, 215, 198, 96, 17, 152}, +{72, 180, 208, 128, 45, 170, 186, 160, 135, 178, 101, 65, 51, 195, 90, 198, 25, 157, 51, 254, 110, 54, 211, 225, 123, 13, 94, 10, 92, 130, 5, 171, 41, 3, 37, 126, 203, 128, 2, 254, 38, 197, 193, 112, 255, 153, 28, 57, 108, 50, 28, 38, 242, 39, 55, 206, 3, 185, 230, 201, 13, 122, 62, 120, 40, 52, 219, 79, 206, 174, 70, 20, 24, 152, 187, 158, 157, 17, 56, 252, 126, 96, 106, 12, 42, 164, 248, 140, 70, 53, 10, 104, 88, 45, 191, 133, 241, 22, 231, 39, 87, 32, 148, 154, 81, 185, 146, 67, 78, 61, 255, 176, 139, 130, 230, 172, 226, 91, 60, 12, 128, 14, 234, 220, 181, 67, 39, 246}, +{86, 76, 64, 38, 113, 158, 167, 120, 36, 21, 173, 172, 213, 120, 15, 247, 10, 52, 235, 46, 198, 254, 73, 225, 119, 126, 33, 186, 201, 91, 91, 234, 148, 7, 122, 40, 11, 171, 156, 159, 142, 193, 62, 13, 191, 12, 83, 30, 72, 173, 112, 69, 51, 114, 221, 228, 104, 254, 92, 144, 102, 60, 89, 144, 21, 242, 63, 112, 47, 161, 112, 111, 186, 146, 4, 255, 141, 29, 63, 95, 118, 220, 137, 149, 212, 116, 90, 28, 163, 172, 186, 239, 183, 101, 172, 231, 55, 36, 54, 174, 176, 72, 124, 29, 167, 211, 166, 67, 176, 151, 146, 116, 121, 56, 220, 50, 5, 152, 188, 115, 222, 10, 138, 107, 194, 247, 152, 215}, +{73, 218, 23, 139, 175, 44, 151, 217, 141, 160, 138, 69, 186, 234, 154, 29, 224, 134, 21, 106, 132, 17, 238, 237, 246, 178, 139, 68, 173, 39, 205, 65, 125, 78, 203, 85, 232, 160, 241, 205, 118, 105, 223, 182, 26, 117, 110, 82, 124, 93, 16, 57, 89, 177, 20, 197, 98, 68, 50, 5, 253, 152, 222, 14, 162, 210, 108, 119, 187, 197, 194, 102, 13, 249, 209, 25, 106, 75, 235, 151, 188, 129, 187, 143, 186, 203, 204, 160, 141, 136, 126, 228, 46, 8, 187, 149, 98, 112, 13, 206, 20, 106, 3, 134, 77, 253, 146, 68, 56, 158, 99, 22, 68, 145, 185, 119, 204, 126, 57, 86, 143, 86, 98, 128, 154, 248, 141, 201}, +{17, 203, 78, 181, 191, 136, 80, 205, 222, 73, 242, 136, 193, 11, 81, 160, 7, 60, 2, 188, 184, 61, 197, 73, 96, 138, 139, 243, 254, 184, 157, 95, 232, 101, 84, 107, 90, 12, 232, 69, 98, 104, 95, 110, 1, 120, 247, 82, 28, 94, 242, 4, 39, 78, 113, 45, 97, 199, 70, 227, 125, 102, 61, 119, 46, 189, 48, 137, 54, 170, 48, 94, 125, 243, 197, 210, 34, 95, 234, 253, 190, 188, 79, 208, 40, 143, 234, 138, 13, 148, 54, 188, 92, 155, 133, 6, 189, 63, 26, 37, 89, 231, 94, 50, 135, 254, 2, 229, 62, 72, 184, 129, 185, 159, 8, 237, 40, 57, 100, 0, 194, 227, 201, 239, 15, 163, 2, 225}, +{152, 165, 19, 136, 166, 1, 220, 187, 174, 221, 178, 38, 210, 247, 38, 25, 199, 132, 238, 72, 154, 8, 114, 233, 119, 176, 119, 56, 241, 27, 251, 49, 159, 228, 139, 173, 80, 157, 98, 249, 74, 60, 153, 150, 99, 98, 109, 116, 27, 79, 148, 169, 212, 64, 17, 240, 1, 190, 79, 149, 147, 238, 11, 98, 238, 136, 30, 189, 15, 37, 255, 39, 10, 155, 225, 213, 193, 45, 202, 109, 139, 152, 176, 201, 22, 198, 159, 60, 99, 178, 92, 230, 162, 155, 47, 4, 206, 112, 192, 75, 147, 206, 198, 69, 114, 198, 2, 233, 96, 253, 152, 103, 226, 252, 180, 94, 137, 53, 14, 112, 229, 100, 91, 96, 196, 81, 31, 27}, +{176, 15, 137, 53, 43, 130, 143, 84, 6, 47, 132, 249, 197, 89, 81, 157, 217, 160, 62, 219, 92, 233, 214, 194, 40, 183, 243, 82, 45, 23, 84, 177, 225, 138, 32, 100, 208, 248, 203, 217, 228, 211, 142, 71, 2, 61, 39, 29, 86, 29, 40, 79, 215, 137, 14, 1, 220, 235, 111, 186, 42, 245, 69, 87, 95, 49, 104, 180, 182, 119, 24, 174, 51, 113, 145, 28, 210, 186, 102, 98, 18, 120, 75, 30, 203, 177, 96, 211, 102, 249, 127, 150, 51, 45, 12, 116, 83, 58, 56, 39, 14, 118, 21, 122, 145, 104, 248, 142, 66, 3, 252, 210, 109, 28, 243, 189, 15, 50, 205, 238, 56, 229, 3, 50, 97, 130, 3, 54}, +{198, 116, 60, 193, 48, 12, 86, 183, 211, 107, 166, 75, 4, 6, 212, 235, 6, 197, 54, 143, 201, 61, 215, 210, 52, 133, 6, 206, 71, 194, 231, 218, 115, 66, 201, 220, 207, 94, 120, 130, 121, 10, 19, 54, 20, 126, 60, 68, 251, 164, 225, 174, 112, 2, 69, 100, 18, 174, 90, 192, 14, 203, 60, 196, 71, 197, 141, 200, 225, 106, 188, 225, 168, 102, 236, 143, 72, 192, 96, 61, 233, 132, 95, 111, 0, 236, 148, 247, 67, 241, 245, 195, 145, 52, 65, 120, 7, 41, 164, 246, 250, 135, 77, 10, 216, 192, 46, 152, 125, 211, 85, 89, 29, 218, 251, 102, 138, 221, 116, 253, 18, 132, 204, 150, 97, 226, 86, 108}, +{50, 6, 79, 178, 251, 9, 17, 125, 230, 244, 80, 183, 70, 161, 228, 126, 218, 134, 43, 146, 39, 134, 228, 232, 3, 206, 244, 229, 93, 244, 194, 54, 199, 124, 32, 92, 117, 194, 53, 89, 211, 184, 167, 161, 37, 83, 43, 221, 185, 131, 101, 197, 162, 3, 149, 137, 253, 140, 105, 116, 186, 112, 178, 220, 19, 85, 90, 55, 81, 137, 25, 2, 130, 250, 81, 148, 121, 216, 178, 52, 183, 185, 188, 143, 117, 30, 62, 228, 31, 41, 234, 167, 28, 208, 33, 2, 117, 43, 166, 143, 48, 156, 96, 156, 101, 178, 174, 48, 15, 59, 227, 115, 18, 142, 151, 255, 184, 165, 242, 248, 76, 100, 102, 235, 139, 26, 240, 170}, +{191, 145, 54, 181, 109, 12, 103, 161, 165, 234, 178, 43, 63, 19, 75, 248, 220, 162, 123, 117, 93, 211, 223, 164, 227, 73, 160, 130, 11, 37, 237, 30, 226, 249, 230, 39, 221, 144, 144, 99, 183, 251, 17, 118, 144, 28, 19, 225, 1, 32, 188, 106, 101, 116, 69, 159, 47, 165, 59, 32, 55, 26, 172, 254, 233, 5, 170, 109, 35, 131, 47, 207, 218, 177, 1, 218, 34, 6, 238, 116, 212, 8, 127, 101, 54, 238, 143, 28, 27, 151, 14, 230, 128, 219, 237, 3, 227, 175, 89, 21, 240, 81, 16, 142, 110, 63, 64, 247, 32, 128, 91, 66, 1, 68, 71, 35, 216, 27, 104, 139, 195, 2, 235, 38, 116, 83, 160, 131}, +{166, 150, 24, 164, 60, 229, 231, 119, 83, 231, 13, 106, 169, 61, 175, 25, 135, 179, 224, 2, 125, 178, 10, 171, 238, 120, 152, 161, 97, 226, 196, 101, 230, 251, 113, 8, 106, 132, 8, 209, 139, 94, 63, 205, 142, 144, 53, 216, 20, 133, 185, 10, 71, 85, 134, 136, 179, 201, 174, 225, 201, 131, 246, 147, 205, 36, 248, 238, 155, 247, 186, 223, 144, 34, 97, 255, 234, 178, 214, 143, 227, 126, 75, 98, 10, 73, 87, 56, 126, 83, 79, 204, 208, 117, 63, 116, 122, 197, 211, 147, 192, 213, 103, 142, 211, 102, 15, 55, 229, 236, 130, 141, 201, 27, 50, 183, 90, 16, 22, 169, 253, 42, 181, 181, 143, 36, 48, 243}, +{118, 105, 27, 198, 92, 25, 194, 139, 134, 112, 74, 62, 222, 214, 199, 42, 187, 118, 216, 223, 99, 102, 27, 115, 197, 36, 153, 133, 109, 99, 73, 98, 218, 106, 53, 195, 99, 102, 57, 84, 117, 110, 150, 94, 131, 21, 3, 139, 189, 87, 180, 143, 52, 31, 135, 105, 253, 100, 186, 191, 158, 190, 208, 177, 83, 248, 51, 162, 141, 205, 43, 55, 216, 28, 143, 155, 106, 165, 166, 42, 65, 206, 16, 106, 107, 232, 221, 114, 160, 15, 246, 227, 54, 134, 241, 82, 29, 252, 153, 60, 19, 39, 248, 88, 236, 0, 102, 206, 25, 28, 72, 149, 186, 185, 249, 191, 93, 162, 100, 204, 61, 32, 124, 159, 94, 105, 3, 119}, +{60, 246, 92, 205, 87, 38, 219, 6, 78, 146, 252, 109, 118, 86, 73, 17, 26, 68, 77, 224, 183, 41, 137, 44, 182, 53, 18, 178, 143, 9, 69, 27, 240, 28, 221, 176, 53, 242, 137, 112, 173, 228, 16, 83, 78, 87, 191, 189, 98, 179, 175, 184, 217, 242, 181, 236, 216, 229, 178, 54, 155, 177, 118, 23, 234, 124, 184, 47, 193, 154, 89, 199, 251, 67, 215, 158, 175, 48, 56, 136, 40, 48, 187, 37, 193, 74, 108, 246, 10, 230, 238, 94, 223, 45, 145, 33, 214, 116, 247, 176, 30, 29, 20, 92, 21, 49, 106, 29, 179, 100, 224, 81, 85, 181, 58, 211, 105, 24, 45, 74, 142, 89, 113, 33, 86, 155, 62, 183}, +{127, 249, 4, 16, 48, 237, 168, 192, 117, 78, 159, 17, 89, 161, 66, 61, 36, 215, 224, 185, 139, 15, 4, 170, 209, 111, 66, 158, 97, 0, 91, 167, 178, 108, 50, 191, 240, 255, 127, 40, 122, 144, 0, 186, 182, 184, 233, 24, 27, 106, 200, 222, 224, 175, 97, 14, 200, 221, 1, 207, 150, 172, 249, 196, 137, 231, 72, 203, 69, 49, 81, 31, 217, 89, 80, 215, 225, 137, 17, 223, 64, 99, 150, 239, 3, 74, 125, 19, 100, 152, 94, 52, 51, 116, 3, 106, 91, 8, 201, 154, 26, 83, 245, 94, 180, 40, 165, 3, 57, 168, 225, 255, 104, 208, 243, 223, 172, 116, 231, 54, 40, 92, 1, 253, 64, 135, 165, 35}, +{70, 90, 173, 89, 239, 21, 66, 237, 246, 8, 101, 100, 208, 21, 175, 213, 222, 91, 71, 172, 160, 69, 117, 41, 217, 211, 221, 44, 244, 235, 241, 131, 65, 156, 14, 199, 53, 230, 120, 70, 205, 206, 120, 24, 154, 190, 57, 75, 220, 5, 139, 90, 140, 86, 198, 168, 240, 244, 137, 59, 9, 107, 38, 97, 32, 82, 181, 137, 144, 253, 230, 230, 99, 234, 229, 127, 171, 60, 165, 72, 137, 74, 236, 55, 221, 185, 204, 26, 166, 200, 25, 73, 179, 24, 77, 117, 93, 28, 74, 14, 72, 15, 16, 61, 155, 219, 92, 18, 243, 128, 33, 64, 128, 18, 39, 73, 46, 47, 71, 46, 231, 241, 186, 13, 20, 163, 236, 133}, +{106, 159, 151, 238, 122, 209, 19, 49, 178, 67, 53, 182, 95, 107, 82, 181, 198, 39, 20, 5, 228, 128, 113, 105, 66, 192, 238, 24, 103, 235, 198, 185, 158, 34, 99, 211, 46, 167, 140, 60, 194, 241, 212, 51, 204, 136, 43, 157, 20, 7, 7, 209, 189, 95, 68, 231, 189, 74, 144, 221, 156, 97, 81, 56, 83, 50, 213, 96, 101, 223, 246, 37, 36, 30, 146, 89, 231, 167, 110, 127, 156, 152, 46, 228, 185, 89, 62, 109, 127, 137, 73, 78, 41, 251, 39, 163, 31, 10, 77, 14, 33, 193, 159, 254, 89, 49, 91, 103, 95, 204, 231, 178, 115, 233, 65, 50, 198, 211, 129, 114, 236, 254, 199, 22, 94, 69, 123, 121}, +{153, 23, 76, 50, 173, 3, 226, 233, 204, 54, 93, 8, 40, 147, 118, 142, 152, 39, 43, 1, 227, 145, 241, 162, 130, 180, 180, 249, 123, 100, 247, 166, 25, 169, 137, 41, 197, 160, 70, 122, 246, 64, 97, 243, 177, 205, 212, 127, 93, 156, 41, 72, 130, 59, 51, 225, 94, 121, 176, 67, 143, 160, 12, 106, 192, 112, 188, 167, 28, 88, 128, 13, 65, 163, 84, 80, 245, 64, 239, 105, 137, 97, 39, 128, 119, 193, 135, 92, 128, 223, 222, 225, 188, 45, 90, 237, 140, 192, 128, 218, 98, 185, 63, 58, 45, 24, 8, 97, 183, 131, 211, 52, 252, 1, 119, 176, 178, 201, 228, 58, 39, 167, 111, 208, 8, 198, 154, 102}, +{184, 100, 231, 143, 129, 199, 85, 183, 158, 249, 43, 218, 27, 152, 232, 139, 160, 87, 187, 43, 40, 5, 229, 3, 251, 39, 213, 199, 195, 208, 82, 79, 164, 45, 116, 185, 155, 42, 61, 68, 31, 225, 7, 12, 93, 2, 221, 18, 29, 28, 43, 15, 121, 80, 43, 197, 233, 86, 243, 237, 245, 177, 18, 211, 245, 158, 72, 119, 251, 169, 156, 66, 38, 249, 208, 135, 254, 223, 33, 26, 5, 196, 201, 184, 191, 11, 97, 168, 208, 107, 223, 157, 135, 21, 49, 181, 238, 251, 170, 249, 100, 97, 31, 27, 185, 90, 209, 63, 71, 213, 157, 240, 146, 247, 86, 197, 33, 245, 57, 93, 31, 110, 193, 3, 160, 132, 197, 232}, +{151, 54, 230, 118, 103, 110, 223, 19, 15, 63, 207, 121, 150, 194, 129, 41, 126, 242, 72, 236, 4, 69, 48, 219, 127, 37, 90, 19, 131, 29, 161, 107, 174, 172, 32, 44, 37, 147, 107, 175, 194, 139, 146, 240, 66, 179, 16, 5, 208, 45, 65, 10, 218, 101, 152, 53, 108, 80, 91, 18, 108, 25, 215, 231, 207, 55, 40, 215, 233, 251, 219, 135, 224, 76, 210, 144, 179, 129, 225, 98, 149, 41, 176, 214, 20, 112, 118, 222, 221, 115, 223, 31, 216, 90, 243, 140, 196, 118, 243, 164, 19, 107, 197, 12, 250, 149, 166, 151, 118, 39, 181, 0, 63, 241, 222, 55, 7, 10, 193, 184, 128, 76, 157, 225, 172, 70, 212, 228}, +{8, 137, 24, 86, 228, 235, 58, 96, 77, 81, 196, 50, 42, 12, 150, 216, 107, 254, 91, 168, 197, 203, 199, 77, 151, 59, 90, 185, 108, 208, 0, 73, 76, 181, 196, 83, 103, 91, 101, 35, 33, 246, 18, 78, 250, 64, 166, 134, 219, 90, 91, 188, 54, 222, 54, 126, 200, 170, 130, 66, 49, 76, 190, 95, 19, 30, 227, 182, 72, 174, 254, 194, 207, 27, 105, 34, 232, 84, 244, 15, 137, 213, 211, 193, 138, 221, 95, 83, 124, 89, 23, 208, 22, 12, 173, 191, 16, 186, 104, 54, 201, 80, 55, 67, 230, 157, 20, 172, 218, 33, 72, 184, 252, 107, 220, 121, 33, 164, 90, 4, 94, 6, 44, 206, 62, 123, 123, 190}, +{195, 38, 39, 252, 106, 79, 249, 9, 238, 240, 212, 231, 81, 87, 9, 81, 116, 200, 183, 1, 56, 182, 213, 192, 233, 83, 130, 114, 85, 233, 206, 186, 161, 14, 164, 210, 224, 89, 203, 17, 40, 81, 168, 171, 237, 81, 193, 213, 173, 215, 181, 31, 23, 78, 145, 140, 173, 218, 180, 183, 96, 44, 162, 116, 75, 232, 88, 124, 81, 41, 18, 241, 184, 179, 67, 33, 84, 184, 190, 179, 232, 142, 226, 227, 70, 188, 134, 71, 236, 135, 105, 104, 165, 216, 226, 171, 193, 216, 162, 20, 46, 116, 209, 49, 174, 110, 149, 5, 134, 126, 4, 75, 36, 131, 105, 60, 155, 175, 136, 18, 48, 83, 32, 210, 208, 202, 198, 173}, +{207, 61, 44, 84, 250, 38, 61, 187, 32, 149, 56, 113, 137, 177, 156, 50, 244, 8, 185, 56, 183, 94, 60, 153, 114, 195, 108, 135, 66, 137, 130, 125, 94, 55, 237, 71, 132, 190, 111, 234, 10, 26, 44, 160, 113, 196, 35, 12, 250, 117, 38, 153, 99, 93, 52, 140, 121, 33, 180, 14, 103, 50, 156, 216, 31, 163, 206, 181, 124, 23, 145, 194, 17, 127, 88, 95, 117, 216, 201, 15, 162, 114, 198, 19, 144, 199, 247, 94, 86, 60, 185, 197, 204, 234, 117, 13, 248, 108, 119, 85, 27, 48, 100, 220, 29, 232, 164, 15, 78, 177, 68, 124, 246, 47, 14, 44, 27, 167, 154, 152, 252, 115, 36, 125, 32, 124, 36, 247}, +{29, 68, 134, 99, 137, 19, 241, 175, 83, 198, 154, 133, 157, 168, 235, 58, 35, 134, 204, 255, 235, 63, 95, 28, 197, 240, 113, 225, 55, 236, 48, 73, 117, 44, 222, 231, 103, 133, 36, 45, 205, 236, 206, 38, 174, 91, 203, 133, 0, 107, 57, 225, 150, 103, 2, 140, 108, 244, 252, 211, 158, 145, 40, 46, 242, 183, 128, 146, 61, 50, 133, 118, 44, 163, 149, 253, 95, 252, 111, 248, 29, 64, 177, 27, 42, 193, 164, 88, 17, 163, 241, 246, 213, 87, 239, 182, 179, 82, 82, 125, 121, 139, 231, 66, 41, 225, 74, 159, 82, 142, 187, 38, 181, 52, 243, 250, 78, 78, 184, 225, 41, 87, 124, 217, 232, 222, 25, 5}, +{169, 218, 125, 96, 182, 89, 135, 135, 133, 58, 0, 182, 251, 47, 3, 253, 208, 28, 16, 242, 113, 234, 146, 127, 119, 144, 230, 41, 186, 6, 20, 14, 145, 92, 203, 113, 201, 71, 25, 143, 108, 233, 219, 129, 98, 118, 223, 40, 83, 57, 153, 84, 73, 164, 253, 107, 59, 207, 53, 173, 243, 92, 186, 54, 59, 25, 241, 87, 230, 250, 105, 99, 228, 139, 123, 154, 17, 165, 78, 138, 72, 179, 223, 207, 228, 229, 84, 204, 69, 185, 242, 124, 152, 182, 187, 144, 199, 62, 206, 124, 255, 103, 64, 136, 179, 28, 103, 146, 42, 201, 72, 74, 80, 207, 115, 9, 178, 105, 54, 106, 20, 119, 145, 177, 239, 112, 139, 40}, +{72, 223, 52, 213, 114, 155, 78, 22, 169, 67, 88, 250, 68, 200, 62, 223, 232, 203, 199, 8, 122, 115, 138, 231, 57, 14, 165, 181, 216, 155, 26, 145, 104, 168, 223, 238, 72, 206, 123, 88, 11, 217, 90, 116, 173, 218, 41, 161, 251, 86, 197, 213, 6, 21, 254, 134, 37, 233, 238, 243, 210, 146, 154, 107, 126, 98, 114, 185, 208, 87, 77, 126, 56, 8, 69, 229, 240, 181, 119, 23, 83, 189, 139, 38, 82, 236, 29, 64, 61, 30, 123, 217, 86, 178, 152, 213, 247, 106, 215, 66, 183, 194, 34, 16, 221, 118, 82, 25, 40, 196, 16, 52, 78, 11, 116, 63, 17, 116, 226, 38, 26, 18, 167, 65, 123, 41, 30, 70}, +{67, 0, 4, 227, 118, 113, 7, 47, 83, 214, 169, 41, 17, 158, 236, 11, 90, 46, 165, 97, 72, 49, 10, 136, 219, 146, 30, 135, 58, 230, 63, 189, 49, 9, 186, 63, 37, 39, 174, 148, 97, 165, 207, 225, 205, 200, 81, 185, 83, 115, 189, 141, 226, 172, 110, 27, 82, 114, 179, 163, 75, 221, 64, 187, 61, 112, 218, 120, 48, 232, 235, 49, 78, 229, 251, 200, 76, 155, 66, 60, 161, 127, 236, 203, 24, 120, 194, 191, 62, 168, 249, 22, 177, 153, 146, 145, 47, 154, 168, 14, 118, 27, 122, 189, 227, 128, 123, 226, 179, 248, 77, 26, 162, 37, 169, 229, 71, 194, 185, 17, 123, 136, 160, 189, 207, 115, 180, 252}, +{169, 113, 102, 246, 127, 131, 106, 239, 146, 22, 41, 41, 194, 250, 32, 111, 224, 62, 216, 229, 215, 25, 242, 169, 78, 72, 226, 247, 125, 1, 174, 25, 45, 118, 184, 129, 55, 88, 58, 114, 194, 37, 111, 128, 175, 46, 137, 247, 105, 179, 124, 47, 251, 34, 165, 136, 30, 196, 126, 167, 132, 75, 145, 218, 174, 124, 24, 209, 130, 96, 160, 113, 113, 131, 178, 20, 223, 149, 43, 67, 206, 63, 108, 178, 193, 86, 127, 38, 104, 148, 108, 4, 72, 133, 236, 183, 7, 217, 160, 152, 49, 182, 207, 231, 136, 183, 243, 7, 100, 214, 118, 34, 176, 240, 24, 8, 9, 57, 242, 251, 32, 56, 113, 45, 24, 87, 216, 116}, +{160, 36, 13, 94, 102, 110, 26, 22, 204, 79, 52, 221, 113, 224, 29, 41, 128, 88, 194, 140, 191, 146, 54, 1, 226, 132, 83, 207, 23, 227, 86, 39, 114, 225, 59, 217, 119, 215, 87, 158, 31, 119, 166, 231, 250, 188, 179, 179, 154, 235, 211, 185, 116, 30, 194, 198, 163, 240, 239, 137, 243, 226, 100, 9, 134, 160, 111, 16, 18, 190, 6, 123, 165, 154, 45, 254, 126, 111, 247, 147, 206, 101, 70, 254, 167, 237, 119, 26, 107, 60, 100, 175, 100, 116, 173, 220, 123, 131, 249, 115, 217, 249, 152, 255, 52, 116, 176, 60, 177, 49, 37, 202, 107, 251, 241, 210, 138, 124, 178, 226, 0, 130, 153, 204, 154, 91, 73, 222}, +{73, 185, 87, 85, 55, 139, 36, 48, 194, 172, 53, 217, 109, 180, 8, 132, 119, 223, 234, 246, 95, 137, 145, 99, 11, 35, 214, 158, 64, 14, 251, 21, 4, 221, 17, 193, 10, 224, 30, 30, 135, 79, 231, 234, 196, 154, 38, 229, 116, 252, 32, 51, 92, 174, 78, 160, 147, 138, 33, 138, 48, 176, 190, 20, 21, 241, 2, 149, 2, 58, 90, 75, 225, 174, 47, 35, 238, 29, 230, 181, 5, 200, 12, 78, 97, 0, 147, 202, 235, 68, 149, 18, 96, 121, 118, 89, 165, 7, 233, 51, 7, 90, 34, 30, 249, 20, 204, 14, 204, 168, 35, 59, 176, 165, 153, 18, 92, 102, 72, 221, 198, 43, 129, 72, 219, 132, 119, 178}, +{106, 171, 122, 132, 141, 194, 124, 173, 158, 159, 163, 111, 124, 123, 126, 119, 113, 254, 131, 84, 24, 212, 251, 190, 60, 167, 122, 138, 13, 36, 154, 74, 53, 160, 167, 15, 155, 140, 40, 79, 54, 251, 108, 21, 8, 209, 3, 243, 72, 207, 230, 230, 177, 232, 145, 110, 22, 175, 132, 75, 151, 87, 171, 134, 223, 68, 202, 217, 87, 174, 14, 223, 81, 9, 207, 64, 151, 66, 224, 226, 241, 249, 99, 159, 212, 164, 221, 163, 130, 118, 171, 52, 188, 101, 126, 7, 115, 92, 43, 156, 116, 120, 40, 210, 207, 249, 194, 198, 95, 157, 252, 128, 212, 252, 125, 104, 188, 28, 148, 67, 227, 73, 98, 200, 23, 116, 105, 154}, +{140, 56, 193, 200, 93, 156, 107, 177, 153, 18, 231, 240, 78, 141, 193, 238, 209, 158, 159, 254, 6, 127, 179, 105, 72, 234, 161, 99, 204, 110, 103, 82, 217, 32, 8, 225, 85, 130, 204, 31, 122, 29, 11, 182, 156, 58, 21, 44, 185, 164, 232, 101, 216, 73, 2, 200, 236, 188, 47, 191, 130, 238, 186, 16, 46, 190, 221, 191, 118, 238, 106, 52, 15, 101, 230, 10, 11, 52, 73, 229, 185, 177, 170, 18, 121, 152, 19, 154, 68, 105, 23, 54, 70, 54, 143, 137, 66, 104, 48, 128, 88, 132, 222, 70, 192, 24, 132, 166, 240, 64, 21, 212, 160, 205, 154, 157, 251, 154, 119, 222, 221, 52, 184, 31, 68, 4, 89, 51}, +{109, 42, 56, 48, 136, 52, 33, 178, 63, 33, 222, 100, 22, 87, 44, 78, 255, 117, 80, 34, 21, 84, 61, 207, 75, 15, 44, 70, 151, 220, 131, 36, 117, 41, 218, 92, 42, 149, 129, 178, 102, 206, 7, 217, 73, 219, 224, 148, 18, 158, 243, 203, 162, 53, 130, 197, 20, 16, 96, 175, 62, 38, 52, 177, 53, 104, 168, 84, 102, 35, 60, 82, 1, 66, 60, 35, 197, 187, 127, 222, 183, 33, 225, 228, 224, 27, 95, 177, 219, 79, 2, 40, 59, 155, 211, 115, 55, 55, 142, 199, 105, 118, 146, 8, 209, 18, 242, 132, 13, 164, 253, 52, 89, 81, 39, 175, 241, 95, 44, 173, 59, 70, 152, 94, 87, 117, 113, 138}, +{84, 121, 201, 45, 96, 15, 41, 179, 74, 249, 101, 16, 51, 36, 122, 238, 18, 135, 43, 246, 208, 15, 33, 179, 168, 224, 118, 195, 75, 155, 226, 156, 131, 12, 186, 161, 237, 102, 92, 105, 128, 226, 148, 189, 181, 79, 250, 115, 209, 60, 175, 144, 190, 58, 254, 244, 8, 210, 204, 86, 140, 188, 129, 173, 73, 167, 70, 161, 61, 91, 173, 13, 2, 179, 140, 56, 213, 110, 126, 125, 28, 186, 112, 227, 254, 202, 38, 123, 94, 129, 65, 210, 100, 89, 15, 82, 241, 245, 215, 100, 44, 239, 174, 49, 107, 232, 62, 122, 251, 235, 239, 243, 103, 165, 205, 63, 178, 53, 60, 233, 39, 6, 31, 4, 91, 66, 149, 135}, +{2, 31, 121, 2, 163, 98, 179, 202, 120, 83, 77, 161, 166, 239, 236, 187, 102, 112, 0, 255, 105, 115, 182, 13, 102, 206, 118, 47, 46, 109, 235, 100, 56, 231, 161, 241, 0, 104, 155, 228, 70, 136, 170, 77, 167, 137, 240, 255, 250, 207, 187, 143, 161, 16, 196, 86, 122, 216, 88, 196, 45, 238, 97, 108, 92, 120, 104, 56, 123, 217, 8, 209, 51, 2, 60, 51, 5, 181, 246, 137, 35, 19, 185, 223, 61, 11, 85, 174, 135, 85, 40, 57, 203, 115, 254, 201, 87, 248, 23, 248, 197, 8, 237, 119, 20, 130, 47, 176, 146, 69, 223, 156, 219, 248, 136, 222, 136, 213, 215, 197, 103, 4, 148, 231, 57, 241, 70, 147}, +{69, 132, 200, 217, 25, 33, 66, 253, 45, 151, 249, 38, 67, 148, 50, 82, 54, 163, 178, 40, 163, 245, 103, 53, 137, 90, 210, 143, 43, 222, 240, 106, 94, 175, 250, 151, 76, 209, 129, 37, 170, 107, 31, 41, 191, 71, 147, 199, 247, 229, 135, 188, 19, 32, 233, 27, 80, 228, 252, 89, 208, 218, 134, 125, 12, 147, 192, 179, 56, 198, 124, 197, 57, 115, 197, 180, 82, 131, 53, 206, 185, 166, 34, 152, 61, 141, 63, 0, 81, 123, 1, 69, 86, 70, 218, 207, 8, 59, 141, 140, 230, 124, 174, 102, 235, 234, 133, 216, 212, 42, 78, 224, 196, 74, 187, 197, 126, 238, 145, 72, 92, 217, 77, 23, 86, 5, 50, 195}, +{78, 62, 40, 102, 223, 57, 129, 76, 150, 67, 252, 26, 236, 221, 94, 138, 141, 194, 124, 24, 227, 14, 52, 0, 183, 25, 167, 190, 101, 64, 202, 62, 130, 192, 197, 185, 164, 53, 226, 13, 134, 239, 191, 196, 129, 174, 50, 89, 76, 9, 191, 103, 198, 211, 210, 174, 9, 211, 54, 162, 109, 241, 83, 253, 237, 51, 97, 69, 152, 251, 34, 97, 43, 203, 187, 216, 25, 253, 2, 214, 223, 15, 94, 245, 231, 40, 157, 130, 62, 192, 195, 231, 53, 48, 84, 38, 233, 232, 54, 234, 166, 39, 140, 136, 125, 31, 249, 211, 163, 187, 202, 65, 214, 61, 213, 163, 161, 222, 241, 147, 224, 172, 27, 186, 139, 182, 164, 241}, +{119, 153, 196, 226, 234, 238, 2, 70, 220, 46, 112, 51, 118, 157, 207, 223, 177, 156, 107, 71, 61, 192, 124, 162, 64, 141, 159, 3, 209, 42, 110, 209, 165, 139, 99, 140, 148, 118, 18, 238, 16, 199, 25, 12, 206, 7, 205, 137, 193, 180, 164, 58, 50, 90, 151, 247, 27, 226, 129, 209, 212, 87, 17, 56, 233, 108, 209, 140, 133, 237, 152, 30, 53, 228, 174, 222, 188, 174, 104, 183, 47, 235, 170, 146, 230, 23, 138, 229, 159, 120, 221, 38, 226, 242, 117, 0, 242, 24, 201, 106, 158, 15, 7, 0, 123, 245, 159, 4, 119, 250, 182, 43, 81, 38, 180, 8, 172, 17, 109, 243, 197, 24, 125, 120, 68, 93, 128, 242}, +{203, 22, 0, 56, 14, 80, 101, 200, 30, 197, 189, 24, 203, 118, 41, 29, 247, 74, 228, 219, 75, 160, 180, 97, 108, 189, 29, 51, 18, 8, 193, 197, 94, 32, 127, 13, 60, 8, 31, 121, 197, 197, 157, 42, 229, 168, 233, 99, 140, 21, 219, 210, 98, 147, 9, 186, 165, 98, 105, 254, 125, 242, 15, 148, 215, 105, 51, 68, 134, 237, 59, 83, 164, 88, 48, 53, 1, 203, 216, 178, 245, 113, 176, 32, 89, 102, 141, 212, 181, 94, 34, 225, 254, 191, 120, 10, 92, 119, 0, 71, 29, 62, 61, 197, 247, 58, 219, 46, 176, 107, 193, 251, 148, 10, 184, 137, 54, 230, 136, 229, 201, 124, 60, 235, 197, 169, 237, 1}, +{44, 223, 28, 163, 166, 249, 237, 65, 48, 132, 7, 8, 72, 233, 108, 24, 163, 54, 93, 47, 150, 47, 180, 119, 231, 157, 122, 214, 66, 74, 126, 34, 149, 250, 7, 180, 41, 88, 56, 207, 91, 95, 36, 126, 71, 133, 18, 6, 99, 221, 87, 196, 232, 13, 148, 143, 31, 177, 193, 245, 159, 19, 51, 44, 181, 153, 249, 101, 105, 46, 53, 25, 76, 238, 58, 155, 82, 236, 168, 20, 107, 164, 152, 148, 192, 39, 155, 253, 227, 125, 208, 117, 227, 142, 157, 191, 11, 93, 26, 52, 141, 225, 231, 39, 15, 118, 106, 235, 251, 247, 242, 250, 246, 56, 33, 28, 247, 196, 228, 23, 101, 56, 28, 8, 83, 218, 193, 131}, +{14, 230, 134, 48, 61, 89, 74, 54, 186, 93, 213, 117, 178, 160, 22, 232, 16, 212, 186, 17, 37, 223, 79, 171, 250, 196, 153, 141, 171, 160, 148, 60, 7, 4, 26, 110, 162, 215, 230, 174, 231, 106, 139, 125, 67, 86, 210, 156, 36, 48, 62, 106, 144, 209, 104, 90, 62, 173, 252, 101, 22, 51, 173, 209, 55, 132, 93, 148, 132, 23, 56, 185, 229, 57, 50, 238, 122, 111, 214, 95, 63, 99, 220, 229, 178, 176, 195, 52, 186, 79, 228, 204, 173, 109, 201, 133, 158, 214, 182, 50, 71, 89, 81, 241, 22, 66, 120, 85, 225, 134, 184, 30, 166, 142, 98, 218, 30, 128, 79, 213, 152, 59, 40, 141, 51, 55, 201, 180}, +{205, 203, 114, 16, 128, 134, 70, 43, 169, 198, 42, 173, 90, 133, 176, 104, 3, 36, 116, 152, 210, 40, 166, 178, 16, 2, 148, 194, 113, 75, 231, 138, 196, 4, 141, 40, 77, 171, 88, 25, 190, 248, 37, 3, 163, 26, 30, 161, 110, 37, 197, 82, 122, 154, 202, 183, 17, 99, 43, 112, 62, 150, 126, 200, 108, 57, 106, 157, 177, 203, 109, 54, 183, 47, 248, 65, 250, 246, 159, 223, 252, 36, 72, 35, 141, 47, 164, 139, 186, 255, 64, 27, 91, 234, 31, 119, 18, 92, 91, 87, 251, 107, 173, 172, 104, 219, 68, 254, 48, 137, 186, 68, 31, 239, 187, 213, 212, 180, 114, 161, 250, 212, 221, 176, 16, 117, 118, 13}, +{207, 61, 1, 237, 247, 43, 219, 243, 30, 121, 166, 242, 158, 220, 173, 244, 129, 23, 224, 37, 91, 72, 27, 246, 220, 139, 84, 103, 51, 100, 75, 212, 237, 73, 195, 144, 218, 154, 102, 158, 48, 50, 147, 118, 220, 192, 13, 213, 190, 207, 244, 251, 27, 146, 105, 139, 38, 200, 181, 31, 87, 180, 220, 64, 228, 121, 230, 205, 3, 182, 65, 112, 13, 244, 189, 209, 84, 133, 34, 170, 14, 225, 53, 195, 9, 217, 132, 209, 206, 251, 244, 31, 154, 20, 32, 227, 195, 224, 121, 96, 66, 130, 84, 221, 63, 154, 142, 157, 163, 70, 19, 45, 52, 123, 50, 100, 18, 20, 131, 116, 26, 68, 66, 106, 162, 21, 96, 81}, +{146, 135, 240, 230, 153, 113, 241, 51, 26, 127, 153, 14, 165, 167, 50, 218, 132, 179, 156, 119, 252, 137, 59, 230, 14, 221, 133, 34, 105, 194, 72, 28, 247, 124, 186, 136, 88, 157, 249, 236, 173, 242, 129, 235, 187, 133, 249, 205, 118, 184, 147, 53, 81, 196, 224, 121, 237, 211, 193, 167, 185, 47, 110, 140, 79, 247, 232, 253, 6, 215, 136, 48, 63, 249, 229, 20, 238, 138, 217, 207, 12, 183, 165, 148, 28, 40, 171, 173, 166, 228, 59, 201, 83, 74, 64, 181, 208, 24, 203, 157, 215, 180, 226, 251, 242, 214, 218, 108, 59, 244, 99, 120, 193, 234, 185, 19, 122, 122, 18, 26, 52, 40, 117, 204, 87, 68, 237, 141}, +{136, 81, 40, 252, 136, 46, 173, 1, 58, 109, 55, 69, 35, 149, 10, 11, 178, 146, 112, 192, 18, 242, 52, 135, 49, 13, 249, 9, 38, 183, 78, 223, 45, 30, 255, 35, 239, 135, 18, 82, 49, 180, 178, 36, 148, 50, 7, 24, 18, 86, 169, 196, 181, 78, 27, 172, 28, 199, 168, 247, 199, 53, 230, 217, 130, 189, 140, 211, 3, 227, 253, 28, 195, 168, 249, 180, 243, 150, 117, 147, 160, 165, 231, 112, 72, 182, 226, 106, 164, 200, 197, 2, 27, 103, 164, 181, 42, 62, 232, 71, 205, 169, 175, 122, 112, 158, 158, 31, 96, 175, 44, 112, 203, 202, 135, 6, 192, 199, 65, 149, 247, 135, 179, 47, 98, 161, 173, 79}, +{165, 59, 29, 2, 223, 203, 116, 114, 66, 84, 141, 229, 37, 225, 93, 178, 196, 34, 237, 119, 156, 94, 135, 75, 12, 185, 80, 253, 247, 37, 61, 42, 146, 170, 120, 237, 2, 220, 228, 81, 11, 24, 242, 39, 10, 27, 180, 172, 76, 111, 153, 228, 129, 126, 35, 153, 62, 73, 72, 168, 65, 57, 206, 169, 231, 195, 54, 125, 210, 221, 105, 214, 105, 142, 91, 225, 129, 191, 222, 55, 4, 36, 46, 195, 244, 94, 90, 84, 58, 211, 200, 97, 55, 120, 77, 1, 37, 155, 121, 30, 143, 132, 202, 64, 47, 44, 124, 47, 190, 218, 194, 68, 217, 101, 244, 169, 126, 110, 254, 22, 182, 43, 233, 135, 208, 89, 63, 3}, +{63, 219, 18, 224, 241, 109, 218, 73, 105, 249, 116, 156, 177, 242, 14, 52, 144, 172, 103, 102, 101, 116, 248, 171, 144, 53, 178, 196, 107, 11, 192, 174, 53, 208, 166, 56, 27, 191, 109, 173, 84, 197, 78, 88, 116, 162, 185, 102, 96, 139, 242, 117, 65, 211, 98, 241, 87, 152, 29, 165, 241, 43, 216, 159, 40, 34, 252, 244, 81, 167, 233, 72, 2, 62, 195, 10, 169, 141, 55, 34, 79, 110, 159, 126, 235, 145, 173, 176, 38, 211, 215, 151, 83, 109, 183, 143, 135, 129, 19, 115, 32, 24, 9, 206, 17, 73, 197, 79, 30, 204, 107, 114, 11, 248, 156, 141, 5, 20, 248, 129, 132, 159, 186, 182, 105, 215, 65, 245}, +{169, 9, 112, 147, 255, 73, 86, 114, 168, 32, 119, 120, 108, 97, 152, 196, 250, 97, 104, 179, 145, 151, 52, 167, 228, 230, 254, 30, 30, 13, 57, 91, 6, 191, 126, 149, 70, 227, 71, 156, 231, 81, 123, 155, 222, 229, 215, 30, 213, 79, 94, 93, 92, 232, 34, 5, 18, 231, 81, 113, 36, 228, 54, 58, 174, 188, 60, 66, 204, 64, 214, 33, 207, 41, 107, 89, 105, 24, 95, 150, 57, 191, 160, 122, 74, 242, 253, 151, 120, 74, 134, 240, 232, 235, 150, 239, 0, 169, 156, 219, 59, 202, 130, 175, 243, 245, 36, 204, 118, 55, 211, 229, 10, 180, 169, 56, 119, 108, 71, 161, 110, 172, 81, 221, 191, 226, 200, 56}, +{23, 24, 96, 230, 215, 251, 120, 191, 195, 23, 71, 37, 140, 157, 15, 2, 12, 162, 13, 22, 195, 94, 158, 96, 202, 185, 27, 74, 144, 37, 6, 65, 238, 251, 253, 52, 201, 242, 231, 217, 72, 71, 83, 134, 222, 112, 242, 128, 228, 172, 29, 23, 143, 120, 202, 6, 48, 102, 130, 116, 60, 115, 152, 128, 250, 252, 146, 69, 83, 246, 136, 0, 238, 108, 13, 228, 41, 123, 144, 80, 168, 66, 166, 86, 130, 135, 190, 183, 65, 112, 1, 222, 192, 48, 125, 77, 61, 145, 57, 23, 238, 19, 206, 180, 70, 24, 172, 80, 115, 136, 151, 56, 186, 199, 242, 158, 57, 132, 126, 61, 26, 7, 78, 231, 2, 198, 160, 161}, +{145, 163, 153, 59, 93, 220, 224, 137, 214, 212, 191, 213, 18, 211, 182, 250, 138, 230, 40, 67, 72, 180, 241, 100, 137, 174, 82, 239, 126, 33, 72, 253, 235, 21, 22, 135, 209, 41, 163, 30, 195, 80, 219, 180, 128, 254, 201, 208, 133, 127, 43, 201, 230, 14, 13, 122, 11, 251, 241, 71, 80, 109, 59, 110, 6, 18, 20, 249, 209, 143, 126, 214, 44, 26, 207, 73, 56, 236, 227, 32, 128, 0, 237, 147, 196, 24, 83, 53, 130, 140, 107, 79, 84, 183, 190, 82, 202, 96, 123, 11, 139, 5, 115, 138, 185, 10, 183, 159, 0, 2, 217, 55, 208, 59, 249, 126, 25, 3, 3, 71, 249, 157, 102, 241, 7, 27, 186, 90}, +{166, 225, 75, 183, 237, 43, 148, 64, 169, 91, 106, 219, 237, 103, 12, 196, 221, 205, 73, 239, 217, 165, 43, 133, 77, 234, 124, 250, 21, 76, 246, 199, 72, 176, 30, 117, 55, 219, 196, 56, 219, 228, 143, 230, 140, 72, 182, 224, 69, 85, 239, 251, 101, 67, 96, 20, 221, 44, 128, 57, 127, 97, 158, 62, 200, 77, 3, 108, 120, 137, 253, 94, 25, 115, 98, 115, 212, 223, 63, 208, 15, 99, 218, 62, 34, 11, 180, 215, 95, 149, 113, 93, 79, 177, 9, 185, 2, 230, 115, 158, 97, 174, 1, 132, 230, 168, 15, 140, 245, 28, 155, 68, 20, 61, 9, 211, 171, 10, 32, 212, 87, 68, 251, 107, 126, 238, 77, 217}, +{60, 252, 48, 239, 99, 168, 20, 51, 33, 11, 207, 108, 127, 160, 194, 219, 251, 139, 210, 154, 242, 181, 245, 113, 16, 45, 214, 94, 163, 56, 112, 225, 248, 71, 214, 114, 145, 53, 180, 136, 49, 46, 115, 123, 213, 115, 187, 74, 244, 55, 79, 128, 8, 137, 169, 151, 58, 122, 252, 220, 20, 60, 178, 17, 177, 147, 71, 244, 151, 91, 71, 194, 74, 4, 96, 161, 108, 54, 75, 78, 248, 101, 104, 108, 196, 94, 237, 42, 8, 133, 208, 160, 183, 59, 149, 42, 192, 90, 171, 68, 209, 86, 76, 109, 73, 88, 237, 110, 90, 37, 203, 93, 245, 251, 42, 207, 204, 246, 205, 91, 197, 72, 252, 209, 156, 43, 206, 112}, +{45, 46, 112, 78, 229, 11, 244, 207, 2, 147, 88, 30, 5, 77, 159, 0, 184, 103, 112, 161, 123, 50, 37, 90, 253, 21, 154, 155, 14, 201, 204, 3, 92, 55, 37, 66, 34, 144, 65, 144, 199, 200, 126, 213, 197, 152, 178, 95, 77, 31, 17, 250, 92, 19, 30, 225, 10, 36, 251, 111, 7, 110, 225, 221, 229, 193, 173, 104, 89, 101, 106, 222, 198, 190, 239, 170, 124, 69, 73, 229, 173, 56, 206, 79, 29, 116, 58, 70, 30, 1, 99, 118, 107, 197, 194, 253, 255, 117, 84, 223, 241, 42, 136, 26, 7, 155, 123, 136, 157, 12, 18, 221, 78, 230, 101, 251, 113, 200, 202, 240, 139, 228, 113, 243, 95, 133, 126, 64}, +{132, 161, 126, 70, 199, 230, 151, 46, 128, 128, 201, 18, 192, 207, 60, 210, 164, 71, 242, 219, 243, 167, 242, 40, 130, 179, 41, 236, 230, 123, 115, 111, 8, 54, 239, 98, 185, 26, 59, 51, 213, 53, 135, 196, 32, 55, 67, 202, 217, 139, 176, 52, 68, 10, 243, 208, 222, 83, 109, 116, 22, 204, 13, 125, 19, 186, 62, 51, 137, 232, 220, 244, 48, 131, 183, 83, 193, 191, 234, 29, 88, 56, 42, 139, 187, 74, 146, 175, 60, 206, 134, 106, 45, 173, 17, 240, 222, 221, 177, 2, 147, 225, 251, 228, 22, 166, 119, 37, 122, 72, 58, 161, 174, 88, 102, 102, 31, 65, 247, 142, 28, 110, 161, 80, 176, 99, 247, 216}, +{183, 235, 137, 213, 82, 10, 213, 81, 156, 144, 183, 198, 157, 206, 97, 113, 187, 111, 32, 197, 24, 237, 172, 37, 129, 21, 123, 135, 200, 119, 212, 233, 82, 2, 223, 33, 15, 146, 16, 206, 254, 238, 161, 5, 56, 150, 161, 214, 176, 23, 190, 113, 41, 220, 226, 82, 235, 114, 36, 112, 123, 176, 115, 217, 191, 176, 212, 143, 170, 44, 201, 28, 35, 97, 125, 195, 209, 111, 221, 85, 204, 64, 34, 176, 10, 171, 70, 163, 128, 8, 222, 237, 206, 136, 44, 64, 10, 143, 103, 186, 61, 51, 77, 166, 119, 255, 203, 80, 128, 236, 76, 168, 30, 13, 151, 46, 153, 72, 246, 102, 167, 89, 165, 66, 212, 226, 186, 78}, +{200, 62, 2, 42, 238, 86, 117, 57, 18, 40, 38, 53, 137, 42, 37, 210, 163, 76, 74, 19, 176, 70, 87, 133, 217, 123, 227, 139, 53, 164, 4, 244, 7, 196, 231, 62, 79, 145, 128, 213, 254, 178, 69, 176, 253, 37, 90, 138, 233, 3, 59, 32, 113, 155, 191, 150, 78, 214, 187, 185, 67, 233, 252, 218, 229, 196, 113, 225, 150, 19, 158, 148, 219, 247, 218, 164, 237, 98, 51, 28, 241, 192, 240, 104, 117, 6, 52, 45, 102, 211, 101, 113, 207, 204, 220, 57, 182, 237, 223, 23, 227, 141, 119, 76, 93, 36, 133, 198, 160, 230, 235, 209, 239, 159, 214, 84, 132, 205, 51, 12, 114, 247, 27, 0, 71, 64, 251, 208}, +{120, 50, 207, 27, 64, 71, 137, 148, 233, 127, 162, 57, 17, 43, 39, 0, 173, 98, 212, 151, 105, 201, 212, 178, 221, 163, 3, 234, 23, 210, 104, 5, 197, 182, 2, 133, 43, 17, 190, 53, 230, 214, 88, 148, 86, 85, 182, 96, 5, 23, 99, 69, 184, 253, 184, 240, 68, 17, 230, 52, 65, 227, 252, 157, 173, 153, 219, 102, 131, 167, 107, 9, 175, 6, 106, 193, 75, 143, 114, 100, 119, 124, 92, 175, 235, 29, 76, 98, 254, 124, 51, 114, 129, 214, 229, 191, 219, 102, 158, 210, 177, 56, 19, 192, 62, 140, 68, 27, 179, 176, 74, 97, 153, 52, 0, 203, 10, 242, 176, 197, 38, 182, 192, 101, 166, 207, 136, 161}, +{82, 101, 107, 231, 73, 181, 81, 44, 221, 22, 211, 169, 164, 94, 65, 121, 220, 113, 213, 122, 26, 254, 181, 74, 145, 255, 108, 63, 120, 77, 176, 116, 208, 230, 22, 74, 114, 104, 231, 56, 79, 152, 79, 111, 134, 46, 162, 187, 82, 36, 77, 201, 53, 124, 66, 249, 43, 77, 112, 152, 59, 32, 130, 238, 219, 16, 157, 23, 178, 239, 243, 196, 127, 106, 77, 162, 104, 40, 192, 165, 161, 229, 254, 87, 199, 119, 88, 76, 123, 142, 163, 156, 249, 125, 18, 171, 223, 113, 45, 110, 53, 95, 22, 163, 73, 251, 254, 127, 90, 31, 237, 149, 29, 50, 220, 188, 189, 185, 208, 30, 19, 245, 218, 201, 245, 191, 185, 113}, +{13, 55, 154, 179, 105, 204, 66, 137, 23, 161, 251, 150, 9, 212, 60, 183, 175, 11, 1, 142, 88, 49, 183, 91, 0, 187, 10, 152, 249, 16, 132, 47, 231, 103, 115, 208, 61, 145, 153, 79, 169, 113, 24, 106, 14, 219, 73, 232, 82, 91, 155, 39, 230, 233, 21, 34, 170, 150, 151, 2, 121, 224, 36, 130, 249, 234, 196, 99, 185, 5, 108, 92, 241, 242, 167, 131, 0, 127, 13, 222, 211, 137, 129, 119, 95, 125, 210, 230, 48, 133, 91, 82, 233, 103, 83, 4, 20, 150, 68, 163, 243, 229, 226, 98, 117, 21, 62, 18, 213, 44, 36, 203, 165, 60, 247, 154, 112, 174, 144, 58, 167, 132, 142, 4, 143, 84, 19, 105}, +{25, 98, 247, 188, 53, 203, 253, 250, 216, 152, 200, 145, 99, 87, 178, 100, 41, 120, 184, 239, 118, 21, 94, 58, 57, 37, 70, 95, 154, 82, 145, 169, 125, 71, 158, 217, 102, 32, 187, 239, 34, 71, 64, 57, 20, 229, 127, 136, 65, 202, 4, 238, 137, 103, 6, 188, 184, 89, 143, 148, 115, 206, 65, 187, 51, 217, 92, 160, 183, 42, 52, 15, 36, 50, 85, 41, 233, 151, 28, 251, 118, 58, 234, 250, 60, 53, 13, 34, 126, 68, 179, 63, 191, 145, 25, 20, 108, 112, 13, 38, 28, 11, 178, 87, 240, 144, 220, 53, 86, 167, 36, 104, 225, 227, 243, 98, 248, 215, 146, 27, 71, 164, 17, 14, 209, 61, 210, 124}, +{167, 132, 230, 14, 179, 157, 230, 98, 46, 104, 145, 102, 118, 76, 166, 166, 217, 7, 115, 185, 116, 46, 127, 71, 45, 233, 115, 238, 81, 188, 46, 2, 92, 58, 208, 105, 183, 169, 184, 78, 125, 219, 216, 33, 236, 210, 5, 58, 74, 145, 51, 210, 125, 254, 156, 140, 231, 43, 193, 136, 143, 225, 24, 0, 11, 183, 52, 117, 185, 45, 233, 180, 117, 102, 142, 118, 215, 103, 112, 52, 229, 76, 112, 112, 108, 171, 11, 255, 239, 231, 70, 190, 25, 189, 128, 62, 4, 60, 139, 13, 179, 1, 55, 198, 38, 198, 245, 208, 89, 92, 65, 201, 12, 137, 18, 43, 243, 28, 65, 114, 108, 156, 178, 146, 191, 15, 159, 233}, +{126, 200, 17, 221, 225, 39, 74, 102, 61, 201, 252, 40, 133, 7, 13, 62, 4, 125, 140, 6, 129, 253, 95, 36, 124, 255, 224, 144, 145, 107, 84, 228, 184, 70, 135, 0, 59, 21, 179, 241, 29, 30, 22, 22, 74, 162, 155, 66, 111, 244, 225, 187, 200, 28, 189, 183, 56, 70, 235, 78, 232, 119, 137, 101, 2, 229, 182, 236, 48, 139, 147, 40, 105, 245, 108, 154, 124, 215, 5, 59, 69, 88, 63, 109, 73, 64, 139, 173, 168, 73, 75, 185, 131, 255, 30, 209, 114, 245, 125, 115, 143, 154, 83, 64, 84, 139, 242, 67, 176, 77, 50, 183, 69, 112, 167, 91, 162, 198, 103, 168, 92, 36, 222, 236, 7, 181, 65, 32}, +{12, 197, 193, 138, 211, 26, 114, 14, 212, 123, 249, 247, 52, 160, 18, 4, 232, 120, 115, 63, 118, 144, 110, 68, 246, 98, 116, 198, 206, 69, 34, 9, 205, 18, 8, 89, 171, 225, 254, 187, 103, 27, 56, 145, 211, 199, 80, 162, 74, 147, 7, 87, 83, 144, 145, 249, 100, 211, 7, 6, 78, 91, 103, 120, 73, 231, 37, 53, 70, 213, 141, 0, 120, 177, 184, 73, 179, 202, 79, 189, 211, 156, 122, 134, 2, 227, 236, 28, 196, 120, 102, 104, 137, 1, 176, 49, 38, 85, 206, 234, 216, 159, 86, 223, 221, 125, 71, 203, 218, 58, 1, 223, 77, 46, 12, 126, 108, 215, 233, 142, 32, 165, 193, 222, 227, 132, 180, 68}, +{194, 184, 243, 10, 189, 2, 78, 224, 228, 89, 73, 202, 126, 209, 252, 8, 134, 149, 225, 154, 32, 203, 119, 132, 205, 110, 185, 70, 244, 133, 120, 230, 43, 22, 120, 172, 212, 37, 145, 191, 229, 105, 156, 49, 210, 139, 38, 47, 0, 80, 113, 6, 4, 100, 9, 16, 142, 19, 196, 150, 57, 114, 50, 39, 125, 4, 211, 182, 197, 109, 156, 143, 231, 110, 29, 233, 138, 230, 161, 83, 14, 6, 13, 174, 225, 76, 42, 145, 255, 239, 180, 22, 168, 96, 240, 213, 57, 154, 100, 126, 46, 255, 126, 23, 114, 227, 131, 113, 118, 66, 127, 39, 41, 158, 110, 168, 87, 146, 1, 131, 73, 102, 87, 174, 194, 136, 141, 84}, +{189, 78, 1, 11, 235, 85, 39, 172, 55, 0, 134, 39, 107, 206, 87, 224, 51, 2, 68, 141, 181, 214, 72, 190, 102, 167, 185, 170, 135, 177, 201, 218, 30, 3, 119, 231, 71, 80, 168, 8, 41, 170, 161, 192, 182, 119, 226, 66, 148, 33, 66, 139, 94, 195, 176, 153, 74, 82, 248, 37, 168, 104, 217, 176, 169, 83, 130, 248, 58, 53, 251, 48, 137, 86, 2, 119, 236, 240, 164, 37, 146, 78, 124, 34, 87, 129, 160, 90, 117, 6, 98, 28, 217, 240, 10, 114, 164, 1, 214, 19, 7, 64, 133, 181, 142, 177, 191, 195, 26, 229, 212, 26, 77, 27, 122, 89, 61, 27, 50, 122, 53, 50, 46, 136, 1, 226, 115, 105}, +{102, 50, 181, 153, 227, 60, 50, 196, 182, 35, 115, 233, 16, 223, 222, 46, 23, 120, 117, 199, 50, 129, 158, 234, 247, 74, 24, 188, 59, 183, 119, 217, 15, 167, 131, 193, 86, 138, 191, 108, 213, 28, 61, 75, 39, 232, 223, 187, 37, 128, 101, 89, 190, 147, 200, 226, 178, 175, 177, 222, 243, 133, 5, 224, 147, 236, 39, 93, 107, 98, 193, 225, 233, 200, 136, 173, 70, 11, 133, 169, 220, 47, 107, 94, 230, 249, 130, 37, 133, 50, 230, 56, 162, 79, 1, 4, 45, 125, 176, 37, 57, 221, 81, 239, 110, 144, 52, 15, 171, 16, 2, 139, 194, 241, 5, 97, 253, 183, 173, 96, 139, 202, 24, 133, 172, 84, 93, 73}, +{61, 83, 124, 59, 2, 154, 145, 52, 180, 88, 194, 28, 130, 12, 169, 108, 184, 252, 152, 120, 120, 145, 220, 47, 166, 55, 104, 162, 240, 217, 78, 110, 183, 94, 178, 26, 49, 104, 167, 163, 95, 213, 174, 117, 217, 47, 24, 64, 201, 246, 181, 180, 104, 154, 158, 199, 179, 165, 208, 120, 125, 27, 87, 73, 116, 3, 157, 184, 134, 155, 218, 42, 150, 146, 134, 79, 106, 190, 10, 1, 208, 80, 254, 41, 55, 26, 55, 123, 156, 29, 11, 251, 169, 72, 194, 26, 235, 52, 229, 81, 48, 203, 243, 240, 71, 19, 157, 57, 62, 26, 72, 134, 52, 249, 228, 199, 95, 246, 118, 65, 240, 22, 93, 169, 146, 96, 231, 202}, +{23, 69, 173, 106, 115, 255, 118, 71, 134, 214, 94, 197, 184, 34, 84, 15, 216, 216, 88, 178, 45, 72, 194, 191, 142, 212, 124, 253, 124, 97, 123, 84, 195, 90, 194, 176, 218, 130, 100, 42, 113, 17, 118, 163, 205, 140, 59, 117, 94, 248, 26, 238, 11, 233, 211, 229, 116, 2, 44, 18, 62, 172, 208, 75, 184, 250, 109, 64, 106, 95, 233, 251, 38, 192, 102, 242, 237, 44, 194, 65, 113, 185, 189, 189, 209, 102, 38, 43, 66, 50, 200, 156, 168, 211, 18, 202, 101, 213, 4, 68, 233, 123, 192, 130, 73, 218, 144, 82, 119, 84, 201, 145, 197, 225, 7, 93, 210, 84, 59, 209, 124, 171, 113, 42, 229, 211, 141, 8}, +{84, 19, 151, 53, 253, 114, 103, 52, 98, 137, 238, 106, 137, 197, 187, 92, 208, 57, 144, 116, 60, 80, 95, 79, 207, 203, 81, 211, 170, 68, 116, 219, 21, 61, 27, 245, 117, 56, 95, 173, 240, 74, 27, 50, 141, 81, 75, 199, 49, 249, 175, 16, 151, 239, 89, 210, 230, 224, 19, 5, 75, 247, 50, 15, 145, 249, 184, 8, 233, 40, 28, 201, 234, 207, 40, 176, 229, 60, 255, 127, 199, 167, 253, 72, 242, 151, 247, 206, 24, 78, 201, 83, 51, 51, 128, 248, 7, 223, 97, 242, 1, 249, 56, 208, 136, 80, 178, 65, 110, 160, 211, 173, 191, 23, 163, 84, 134, 232, 162, 4, 177, 198, 211, 102, 109, 154, 104, 75}, +{101, 8, 174, 215, 173, 245, 131, 234, 59, 110, 13, 115, 154, 204, 251, 8, 187, 81, 169, 174, 131, 210, 18, 77, 237, 224, 84, 97, 9, 136, 182, 136, 250, 216, 4, 68, 72, 135, 29, 207, 239, 101, 239, 140, 184, 28, 156, 149, 98, 74, 31, 177, 147, 150, 138, 243, 89, 4, 33, 105, 197, 37, 160, 99, 58, 208, 234, 109, 205, 224, 49, 89, 44, 139, 90, 179, 67, 48, 189, 172, 65, 205, 110, 251, 79, 60, 157, 225, 128, 144, 93, 18, 241, 26, 243, 86, 96, 187, 101, 229, 166, 145, 90, 43, 80, 10, 249, 82, 177, 90, 150, 196, 18, 133, 69, 197, 134, 42, 171, 111, 123, 35, 130, 248, 143, 233, 107, 144}, +{201, 118, 150, 67, 121, 239, 3, 136, 34, 62, 59, 175, 196, 197, 68, 119, 20, 7, 210, 146, 179, 196, 132, 249, 225, 87, 131, 148, 152, 112, 215, 139, 104, 17, 6, 9, 33, 198, 182, 87, 134, 83, 151, 51, 153, 13, 209, 8, 106, 42, 25, 181, 20, 195, 137, 41, 22, 194, 54, 150, 198, 241, 152, 188, 33, 18, 95, 131, 196, 193, 210, 34, 95, 225, 96, 177, 157, 34, 51, 49, 189, 11, 18, 39, 6, 145, 207, 47, 103, 190, 107, 21, 207, 116, 217, 103, 90, 239, 193, 233, 15, 5, 157, 78, 65, 15, 13, 6, 55, 90, 141, 254, 191, 121, 201, 47, 56, 75, 240, 55, 237, 56, 244, 60, 228, 130, 36, 203}, +{155, 3, 111, 34, 69, 98, 38, 83, 83, 225, 169, 158, 101, 83, 117, 11, 247, 68, 122, 21, 0, 80, 110, 53, 224, 82, 222, 65, 50, 169, 71, 87, 161, 15, 79, 8, 137, 205, 18, 112, 237, 199, 225, 28, 208, 2, 178, 129, 141, 42, 9, 118, 159, 226, 164, 33, 202, 120, 176, 111, 233, 72, 152, 72, 249, 147, 204, 199, 42, 38, 178, 99, 190, 3, 154, 103, 104, 67, 225, 102, 224, 139, 155, 203, 57, 211, 182, 45, 224, 143, 120, 236, 63, 220, 61, 6, 111, 254, 26, 106, 240, 250, 192, 185, 5, 90, 183, 121, 253, 192, 53, 222, 253, 8, 244, 125, 140, 129, 114, 226, 56, 55, 189, 15, 193, 249, 136, 36}, +{170, 182, 247, 65, 56, 44, 39, 224, 31, 204, 248, 46, 84, 33, 167, 181, 219, 64, 237, 23, 215, 104, 60, 208, 191, 243, 116, 234, 122, 171, 61, 209, 34, 132, 15, 184, 108, 72, 165, 147, 20, 111, 202, 226, 130, 54, 19, 3, 32, 148, 199, 244, 63, 138, 155, 254, 215, 180, 95, 50, 95, 37, 34, 3, 25, 66, 232, 13, 132, 133, 83, 117, 200, 189, 43, 179, 248, 255, 176, 209, 126, 0, 166, 63, 99, 25, 233, 154, 76, 159, 211, 112, 136, 176, 242, 132, 173, 163, 31, 153, 252, 107, 190, 177, 5, 227, 45, 18, 177, 40, 228, 164, 58, 209, 173, 229, 16, 240, 195, 191, 140, 24, 29, 214, 111, 54, 204, 189}, +{168, 177, 144, 141, 244, 167, 65, 136, 127, 68, 177, 193, 122, 161, 140, 165, 249, 78, 98, 22, 175, 161, 82, 125, 138, 74, 44, 16, 229, 63, 230, 115, 198, 102, 198, 131, 96, 206, 148, 25, 149, 50, 32, 0, 202, 190, 131, 172, 247, 221, 240, 64, 206, 139, 221, 85, 25, 139, 3, 228, 157, 88, 14, 19, 155, 236, 217, 128, 69, 229, 89, 111, 21, 213, 245, 8, 26, 64, 152, 215, 32, 176, 131, 91, 170, 208, 37, 191, 15, 13, 7, 211, 240, 105, 87, 108, 6, 25, 112, 171, 58, 75, 249, 45, 144, 67, 55, 70, 172, 67, 109, 27, 203, 202, 181, 46, 249, 241, 186, 16, 49, 104, 220, 253, 228, 34, 231, 208}, +{108, 43, 156, 107, 211, 228, 3, 144, 62, 29, 86, 214, 94, 167, 91, 75, 65, 121, 214, 161, 21, 175, 252, 160, 118, 146, 15, 37, 51, 158, 88, 195, 155, 92, 203, 37, 39, 123, 141, 145, 42, 32, 157, 144, 126, 252, 74, 225, 147, 206, 166, 22, 19, 250, 231, 63, 33, 64, 101, 214, 63, 31, 64, 85, 240, 229, 14, 187, 59, 131, 47, 156, 73, 176, 11, 104, 178, 74, 52, 251, 217, 146, 84, 90, 224, 30, 157, 130, 112, 115, 232, 189, 172, 54, 222, 8, 85, 60, 116, 79, 147, 63, 24, 72, 128, 66, 180, 105, 252, 113, 202, 121, 134, 141, 114, 195, 5, 84, 255, 142, 14, 103, 1, 178, 201, 20, 57, 110}, +{175, 153, 138, 196, 78, 114, 237, 39, 227, 223, 237, 77, 142, 33, 145, 66, 215, 116, 3, 82, 136, 170, 116, 118, 48, 164, 159, 47, 22, 26, 67, 84, 76, 78, 222, 218, 44, 246, 139, 0, 25, 0, 62, 18, 161, 55, 15, 138, 234, 67, 232, 33, 224, 226, 129, 231, 129, 223, 73, 32, 242, 46, 42, 201, 129, 221, 186, 139, 135, 161, 158, 238, 196, 183, 123, 225, 115, 8, 51, 186, 50, 199, 156, 160, 253, 235, 157, 200, 72, 157, 99, 131, 13, 240, 126, 116, 130, 200, 224, 96, 123, 244, 187, 35, 82, 61, 93, 64, 202, 164, 159, 161, 122, 114, 189, 3, 173, 208, 209, 221, 154, 227, 181, 166, 81, 238, 153, 0}, +{199, 86, 66, 176, 197, 28, 123, 59, 86, 13, 154, 192, 127, 185, 184, 193, 67, 124, 121, 222, 115, 230, 163, 159, 202, 92, 192, 112, 31, 210, 161, 238, 28, 0, 27, 187, 183, 200, 194, 42, 182, 19, 30, 144, 129, 87, 161, 208, 224, 243, 237, 1, 86, 178, 211, 35, 169, 43, 165, 145, 101, 36, 87, 75, 172, 116, 206, 194, 182, 242, 98, 226, 55, 243, 0, 153, 136, 162, 215, 41, 121, 165, 65, 84, 198, 175, 10, 125, 111, 199, 146, 136, 176, 25, 16, 105, 32, 4, 70, 85, 175, 202, 162, 137, 230, 222, 187, 41, 221, 16, 138, 73, 127, 88, 202, 220, 168, 221, 35, 124, 223, 184, 181, 40, 15, 101, 22, 235}, +{172, 165, 254, 103, 24, 137, 162, 96, 16, 164, 104, 165, 190, 44, 221, 159, 80, 208, 198, 153, 62, 141, 152, 122, 104, 179, 254, 96, 26, 27, 82, 180, 216, 215, 236, 41, 86, 120, 216, 59, 177, 114, 141, 217, 151, 120, 175, 75, 45, 70, 174, 92, 198, 97, 184, 25, 231, 241, 47, 147, 162, 178, 255, 3, 200, 102, 88, 11, 107, 91, 219, 91, 50, 41, 99, 78, 146, 157, 93, 107, 13, 218, 77, 243, 151, 129, 52, 165, 224, 177, 51, 160, 189, 22, 129, 110, 191, 13, 11, 219, 71, 12, 120, 88, 244, 223, 137, 53, 11, 205, 233, 138, 81, 124, 221, 202, 81, 217, 85, 4, 90, 176, 123, 179, 2, 168, 177, 40}, +{126, 110, 129, 243, 14, 19, 218, 81, 157, 92, 203, 19, 252, 240, 234, 183, 35, 151, 63, 210, 183, 76, 194, 146, 54, 27, 107, 7, 130, 159, 109, 217, 124, 84, 6, 65, 240, 79, 231, 98, 137, 20, 220, 135, 81, 8, 95, 8, 90, 88, 147, 132, 86, 59, 246, 80, 56, 104, 65, 238, 254, 99, 244, 185, 109, 193, 131, 234, 148, 196, 88, 168, 147, 193, 191, 202, 19, 140, 188, 108, 162, 12, 165, 37, 61, 34, 103, 129, 91, 34, 214, 76, 220, 205, 61, 241, 69, 89, 189, 87, 247, 126, 76, 49, 102, 13, 191, 74, 229, 175, 184, 25, 171, 6, 25, 252, 245, 26, 65, 72, 174, 230, 100, 94, 245, 105, 74, 70}, +{118, 53, 145, 170, 95, 126, 13, 41, 238, 175, 151, 110, 10, 246, 27, 92, 238, 13, 82, 199, 30, 61, 77, 195, 139, 71, 209, 242, 37, 50, 230, 18, 13, 205, 169, 244, 80, 200, 29, 251, 59, 254, 190, 227, 40, 74, 134, 69, 118, 21, 16, 113, 212, 9, 29, 140, 158, 184, 247, 214, 209, 202, 24, 193, 47, 25, 56, 96, 125, 61, 53, 173, 82, 208, 182, 32, 196, 192, 52, 148, 54, 84, 193, 179, 183, 2, 4, 24, 254, 120, 25, 153, 86, 219, 86, 194, 148, 87, 179, 107, 27, 140, 92, 175, 87, 16, 252, 167, 100, 53, 131, 163, 144, 66, 202, 205, 141, 147, 142, 13, 124, 193, 247, 192, 108, 51, 12, 122}, +{110, 104, 163, 65, 193, 116, 235, 77, 71, 80, 92, 109, 121, 30, 23, 139, 222, 244, 126, 113, 106, 84, 253, 236, 45, 142, 146, 82, 215, 115, 233, 147, 49, 100, 236, 195, 143, 33, 10, 169, 179, 209, 124, 226, 109, 98, 48, 140, 206, 19, 147, 107, 1, 228, 237, 83, 113, 119, 100, 26, 122, 193, 89, 133, 144, 7, 80, 93, 96, 185, 45, 140, 235, 161, 69, 76, 27, 246, 142, 51, 114, 42, 40, 225, 0, 187, 175, 209, 245, 39, 84, 53, 71, 84, 28, 139, 80, 127, 146, 14, 144, 246, 230, 88, 206, 95, 25, 140, 167, 63, 196, 100, 238, 152, 123, 62, 227, 30, 22, 89, 90, 36, 22, 74, 227, 141, 161, 224}, +{194, 194, 143, 109, 161, 1, 151, 196, 158, 214, 194, 203, 169, 232, 123, 174, 4, 58, 8, 105, 110, 38, 96, 145, 246, 21, 65, 26, 145, 213, 163, 252, 110, 177, 44, 51, 36, 78, 165, 127, 191, 185, 117, 227, 194, 99, 141, 200, 102, 228, 155, 34, 31, 83, 19, 70, 230, 88, 88, 254, 251, 43, 108, 218, 183, 184, 38, 183, 13, 170, 169, 2, 252, 182, 192, 67, 53, 91, 116, 248, 152, 47, 9, 242, 31, 17, 57, 44, 22, 160, 127, 22, 216, 222, 114, 54, 26, 198, 217, 162, 119, 184, 189, 61, 131, 105, 171, 141, 56, 174, 210, 169, 139, 2, 52, 206, 57, 238, 108, 104, 40, 197, 97, 171, 97, 212, 12, 188}, +{35, 73, 98, 197, 254, 4, 224, 26, 33, 74, 14, 16, 127, 46, 164, 86, 95, 244, 220, 144, 126, 64, 13, 245, 204, 19, 237, 171, 188, 32, 25, 147, 3, 233, 160, 240, 89, 162, 17, 190, 16, 42, 218, 241, 165, 5, 28, 221, 143, 96, 233, 186, 5, 237, 246, 217, 242, 188, 83, 136, 31, 144, 30, 187, 135, 89, 255, 171, 206, 129, 202, 120, 197, 166, 244, 45, 202, 70, 76, 43, 156, 86, 53, 202, 122, 116, 137, 45, 47, 231, 172, 40, 49, 78, 83, 33, 193, 25, 118, 7, 0, 156, 139, 139, 25, 141, 126, 157, 84, 187, 159, 206, 159, 216, 234, 155, 149, 46, 141, 227, 26, 234, 65, 56, 10, 193, 184, 88}, +{6, 199, 9, 252, 161, 114, 3, 70, 34, 133, 130, 192, 203, 156, 200, 221, 32, 54, 96, 78, 75, 56, 129, 149, 208, 34, 105, 69, 159, 253, 242, 251, 219, 180, 72, 63, 171, 185, 191, 82, 187, 46, 98, 69, 251, 208, 70, 94, 86, 26, 162, 138, 75, 12, 85, 212, 220, 211, 46, 239, 111, 243, 84, 52, 231, 106, 219, 2, 29, 247, 49, 128, 18, 228, 107, 43, 225, 218, 5, 55, 227, 7, 151, 68, 217, 128, 14, 83, 146, 51, 179, 179, 177, 153, 62, 72, 175, 9, 238, 80, 43, 59, 47, 246, 52, 246, 53, 230, 216, 178, 90, 116, 125, 148, 141, 205, 115, 77, 155, 87, 215, 109, 55, 19, 249, 38, 213, 68}, +{45, 207, 224, 146, 145, 2, 7, 136, 12, 216, 44, 117, 185, 100, 130, 7, 3, 234, 36, 94, 10, 197, 51, 160, 164, 119, 32, 146, 117, 13, 13, 63, 38, 162, 227, 84, 214, 118, 141, 217, 24, 221, 207, 170, 34, 82, 153, 7, 23, 255, 117, 83, 146, 225, 204, 5, 211, 24, 33, 85, 239, 79, 0, 33, 74, 210, 179, 36, 193, 90, 119, 239, 240, 99, 248, 5, 168, 55, 227, 172, 42, 232, 42, 78, 78, 40, 129, 127, 177, 156, 143, 139, 190, 119, 204, 8, 192, 71, 200, 235, 195, 238, 184, 226, 230, 47, 227, 130, 246, 100, 104, 223, 132, 217, 248, 68, 60, 184, 253, 68, 234, 164, 113, 86, 137, 79, 51, 175}, +{81, 139, 234, 105, 113, 15, 36, 1, 57, 12, 229, 129, 235, 82, 138, 229, 127, 64, 11, 189, 222, 75, 220, 218, 194, 249, 32, 94, 9, 55, 201, 131, 112, 148, 50, 224, 50, 68, 238, 177, 185, 54, 142, 82, 15, 190, 188, 207, 251, 14, 65, 107, 133, 137, 26, 84, 163, 33, 4, 71, 46, 188, 83, 233, 100, 98, 69, 43, 150, 87, 103, 159, 120, 163, 146, 49, 193, 96, 139, 181, 153, 89, 168, 55, 38, 134, 85, 67, 92, 124, 232, 123, 76, 233, 2, 82, 48, 45, 197, 22, 245, 215, 240, 133, 127, 190, 152, 66, 109, 28, 58, 135, 163, 8, 34, 21, 230, 231, 146, 4, 24, 78, 254, 51, 112, 227, 1, 218}, +{97, 190, 43, 139, 69, 157, 12, 183, 205, 227, 76, 15, 93, 159, 226, 237, 139, 158, 87, 1, 140, 170, 102, 62, 170, 0, 84, 142, 96, 3, 112, 118, 205, 31, 194, 219, 195, 146, 200, 76, 94, 206, 72, 35, 137, 148, 248, 181, 201, 1, 49, 36, 171, 66, 181, 46, 139, 221, 252, 114, 195, 94, 41, 10, 38, 169, 45, 251, 49, 161, 227, 107, 21, 24, 245, 243, 159, 166, 241, 231, 159, 215, 6, 86, 48, 52, 183, 237, 6, 133, 116, 106, 209, 107, 144, 20, 178, 246, 215, 145, 140, 141, 117, 106, 94, 58, 26, 141, 228, 179, 176, 221, 176, 76, 197, 127, 59, 155, 21, 87, 76, 37, 5, 102, 108, 112, 165, 60}, +{154, 60, 197, 163, 26, 224, 212, 94, 209, 132, 126, 92, 161, 205, 233, 94, 123, 155, 159, 107, 112, 223, 39, 33, 173, 138, 29, 5, 250, 43, 47, 205, 244, 11, 49, 36, 89, 115, 139, 224, 83, 65, 69, 153, 188, 55, 15, 16, 34, 126, 220, 122, 32, 194, 53, 166, 253, 16, 30, 77, 249, 206, 68, 8, 37, 238, 70, 240, 185, 112, 235, 217, 93, 50, 111, 44, 188, 195, 121, 92, 137, 59, 209, 135, 172, 167, 54, 47, 157, 234, 36, 215, 161, 238, 151, 108, 157, 22, 99, 132, 252, 234, 190, 156, 111, 4, 48, 133, 114, 171, 66, 78, 164, 132, 91, 24, 40, 172, 32, 228, 111, 249, 104, 163, 83, 218, 220, 220}, +{162, 2, 121, 142, 110, 120, 8, 184, 8, 47, 57, 232, 177, 108, 195, 108, 197, 219, 228, 77, 14, 148, 20, 55, 75, 29, 38, 86, 147, 96, 171, 192, 111, 80, 12, 77, 251, 58, 242, 96, 31, 44, 203, 223, 78, 85, 146, 150, 61, 126, 45, 255, 23, 90, 205, 183, 13, 199, 44, 211, 136, 12, 50, 113, 221, 56, 206, 174, 163, 166, 236, 161, 215, 140, 138, 218, 179, 71, 90, 19, 104, 6, 184, 27, 145, 8, 102, 222, 130, 110, 228, 143, 55, 224, 224, 190, 89, 77, 158, 18, 63, 114, 117, 241, 43, 190, 61, 166, 84, 194, 57, 165, 203, 147, 62, 210, 80, 218, 227, 47, 222, 83, 195, 118, 118, 112, 22, 196}, +{130, 204, 46, 32, 5, 54, 198, 191, 122, 45, 54, 107, 23, 35, 223, 7, 134, 128, 240, 241, 80, 54, 135, 176, 104, 11, 242, 40, 222, 54, 224, 115, 214, 70, 139, 86, 126, 94, 209, 38, 75, 75, 122, 47, 208, 170, 33, 19, 172, 69, 123, 183, 74, 210, 208, 173, 95, 129, 42, 14, 159, 209, 123, 224, 151, 62, 221, 171, 215, 173, 250, 22, 77, 24, 114, 146, 176, 217, 33, 124, 5, 238, 238, 106, 13, 174, 161, 101, 247, 164, 90, 63, 20, 36, 186, 67, 171, 0, 89, 121, 98, 173, 245, 206, 143, 25, 5, 153, 61, 255, 89, 234, 14, 34, 32, 85, 180, 250, 133, 244, 45, 99, 17, 125, 38, 31, 251, 140}, +{70, 86, 229, 108, 223, 207, 115, 21, 130, 219, 6, 7, 224, 19, 156, 46, 196, 134, 216, 51, 233, 49, 43, 192, 204, 72, 83, 79, 85, 125, 96, 2, 131, 168, 88, 138, 41, 232, 229, 127, 147, 235, 2, 163, 153, 198, 79, 56, 246, 55, 82, 14, 253, 179, 104, 23, 240, 44, 225, 241, 175, 151, 207, 210, 201, 141, 177, 42, 120, 220, 250, 52, 130, 163, 194, 193, 144, 240, 251, 126, 158, 24, 124, 197, 224, 88, 64, 180, 163, 223, 199, 221, 252, 237, 212, 241, 154, 137, 94, 46, 49, 202, 84, 153, 225, 241, 145, 181, 236, 72, 68, 122, 15, 174, 229, 59, 73, 232, 214, 182, 192, 75, 134, 108, 230, 179, 140, 227}, +{44, 68, 47, 210, 103, 245, 6, 150, 251, 250, 126, 124, 115, 113, 141, 207, 14, 210, 210, 146, 130, 174, 157, 106, 110, 9, 4, 12, 213, 20, 73, 98, 17, 240, 101, 193, 174, 22, 2, 119, 34, 84, 86, 241, 226, 195, 207, 24, 128, 172, 88, 128, 14, 128, 143, 35, 202, 192, 202, 206, 55, 166, 116, 138, 47, 94, 79, 244, 244, 200, 7, 118, 54, 198, 10, 253, 85, 237, 64, 204, 97, 247, 38, 140, 144, 126, 180, 243, 73, 147, 50, 72, 19, 215, 169, 124, 233, 210, 72, 87, 133, 176, 20, 181, 93, 126, 185, 14, 69, 124, 43, 65, 204, 206, 82, 191, 58, 62, 10, 43, 170, 17, 134, 136, 25, 93, 160, 39}, +{195, 92, 198, 142, 127, 248, 25, 250, 133, 30, 153, 132, 215, 109, 94, 164, 102, 112, 34, 31, 89, 113, 214, 112, 104, 171, 243, 6, 106, 165, 93, 160, 204, 249, 220, 141, 249, 21, 118, 117, 73, 59, 9, 16, 66, 225, 69, 6, 17, 50, 13, 88, 150, 112, 132, 197, 166, 116, 128, 91, 87, 134, 121, 89, 206, 114, 237, 5, 233, 80, 163, 140, 149, 71, 74, 222, 240, 146, 126, 112, 136, 249, 70, 144, 209, 254, 217, 68, 188, 46, 162, 96, 187, 247, 192, 39, 7, 90, 133, 72, 105, 192, 168, 122, 91, 68, 222, 82, 254, 4, 186, 58, 81, 189, 248, 164, 105, 68, 233, 55, 14, 88, 233, 203, 224, 168, 129, 193}, +{195, 196, 41, 89, 138, 211, 236, 247, 166, 68, 177, 159, 224, 194, 18, 117, 221, 195, 247, 198, 46, 235, 147, 169, 21, 191, 130, 126, 247, 211, 204, 24, 103, 84, 36, 248, 120, 184, 124, 144, 131, 179, 112, 8, 24, 108, 86, 18, 46, 2, 47, 171, 22, 140, 132, 247, 2, 202, 226, 253, 226, 39, 245, 87, 63, 25, 119, 228, 171, 213, 181, 204, 190, 24, 165, 244, 147, 145, 29, 249, 59, 19, 56, 120, 112, 192, 175, 0, 63, 75, 255, 142, 215, 38, 215, 153, 96, 35, 54, 114, 144, 162, 185, 182, 101, 46, 114, 141, 45, 101, 30, 244, 126, 76, 238, 42, 241, 172, 163, 103, 190, 54, 59, 65, 85, 3, 0, 86}, +{107, 32, 83, 143, 78, 65, 166, 34, 124, 26, 79, 9, 163, 61, 215, 179, 151, 136, 57, 99, 17, 234, 27, 188, 141, 34, 133, 125, 72, 249, 72, 68, 249, 13, 201, 163, 250, 254, 248, 46, 234, 170, 81, 11, 97, 136, 73, 101, 171, 138, 46, 92, 80, 21, 65, 187, 30, 101, 174, 38, 133, 147, 217, 0, 94, 231, 231, 193, 130, 162, 118, 136, 69, 155, 43, 239, 96, 45, 23, 204, 227, 52, 246, 80, 181, 45, 155, 2, 221, 168, 160, 227, 225, 185, 83, 124, 30, 138, 26, 57, 233, 85, 135, 219, 193, 241, 184, 123, 216, 108, 188, 236, 21, 239, 240, 108, 40, 137, 41, 142, 53, 156, 208, 214, 91, 66, 141, 66}, +{147, 204, 220, 142, 121, 24, 86, 49, 234, 218, 182, 105, 108, 184, 92, 128, 212, 193, 51, 35, 54, 221, 155, 39, 220, 199, 19, 74, 180, 137, 235, 35, 169, 194, 173, 171, 188, 90, 84, 232, 94, 45, 26, 20, 147, 234, 236, 161, 159, 128, 176, 32, 86, 106, 85, 17, 78, 31, 162, 62, 133, 72, 239, 49, 108, 77, 104, 46, 28, 245, 238, 166, 92, 51, 162, 194, 132, 235, 56, 209, 153, 8, 36, 150, 83, 192, 172, 34, 91, 221, 83, 198, 36, 123, 4, 50, 69, 148, 240, 196, 213, 138, 21, 51, 68, 114, 139, 14, 115, 216, 250, 93, 70, 196, 251, 219, 53, 92, 187, 56, 129, 180, 23, 172, 160, 54, 60, 102}, +{152, 41, 244, 42, 110, 50, 117, 165, 1, 108, 249, 34, 74, 203, 202, 8, 214, 223, 251, 186, 245, 151, 199, 176, 151, 173, 204, 202, 74, 194, 143, 180, 62, 158, 245, 85, 139, 188, 38, 220, 170, 252, 101, 178, 154, 80, 85, 127, 58, 71, 236, 32, 223, 253, 150, 247, 72, 160, 18, 76, 18, 2, 52, 22, 184, 213, 97, 96, 221, 141, 187, 129, 67, 160, 155, 130, 100, 207, 213, 44, 197, 138, 162, 157, 28, 176, 48, 42, 245, 113, 41, 37, 55, 183, 171, 12, 191, 233, 248, 113, 12, 63, 59, 36, 120, 124, 166, 30, 79, 116, 138, 243, 122, 93, 166, 131, 138, 164, 85, 160, 113, 248, 42, 120, 72, 70, 159, 172}, +{99, 219, 44, 153, 72, 25, 110, 112, 91, 80, 115, 210, 201, 148, 247, 57, 22, 136, 227, 222, 135, 177, 208, 176, 33, 137, 244, 207, 209, 120, 252, 112, 104, 135, 252, 120, 53, 104, 86, 144, 158, 250, 31, 218, 24, 226, 45, 13, 176, 20, 63, 2, 121, 87, 251, 225, 69, 39, 236, 121, 100, 76, 75, 34, 192, 66, 63, 63, 35, 119, 235, 235, 78, 38, 88, 251, 185, 91, 138, 21, 193, 24, 77, 127, 236, 37, 37, 173, 161, 28, 47, 191, 172, 99, 162, 145, 16, 100, 39, 11, 136, 226, 244, 30, 236, 57, 68, 41, 223, 191, 85, 211, 22, 221, 187, 137, 202, 58, 155, 68, 44, 56, 89, 211, 72, 241, 82, 55}, +{6, 240, 235, 35, 138, 41, 31, 186, 48, 136, 33, 19, 26, 202, 86, 55, 60, 216, 81, 46, 79, 252, 75, 140, 168, 7, 202, 25, 83, 6, 122, 176, 0, 45, 166, 107, 137, 55, 119, 187, 27, 35, 196, 114, 138, 239, 113, 145, 173, 245, 18, 163, 149, 176, 16, 158, 98, 29, 202, 168, 43, 17, 214, 166, 24, 19, 56, 170, 16, 39, 73, 109, 227, 138, 33, 190, 185, 70, 227, 165, 195, 214, 155, 233, 6, 251, 187, 37, 25, 255, 189, 7, 31, 77, 104, 234, 18, 172, 169, 165, 23, 71, 120, 16, 89, 130, 121, 139, 187, 65, 206, 83, 72, 118, 174, 172, 218, 130, 60, 21, 63, 106, 178, 187, 209, 246, 67, 185}, +{24, 91, 48, 152, 102, 238, 163, 186, 168, 111, 43, 72, 47, 108, 42, 205, 149, 224, 103, 210, 205, 250, 228, 17, 100, 247, 79, 231, 152, 6, 104, 44, 5, 83, 229, 58, 151, 190, 220, 219, 251, 155, 187, 149, 245, 184, 86, 186, 45, 99, 136, 190, 122, 37, 119, 120, 188, 255, 64, 75, 229, 84, 112, 121, 91, 154, 37, 158, 87, 5, 237, 21, 30, 123, 135, 27, 22, 94, 152, 255, 238, 151, 139, 54, 249, 158, 244, 154, 82, 22, 237, 79, 203, 49, 120, 119, 156, 183, 63, 235, 55, 104, 163, 243, 4, 234, 136, 248, 66, 120, 147, 107, 218, 55, 69, 100, 116, 197, 24, 232, 98, 93, 129, 152, 249, 154, 0, 24}, +{143, 219, 83, 21, 251, 119, 210, 140, 3, 161, 213, 174, 247, 40, 170, 221, 92, 136, 208, 35, 114, 196, 128, 203, 158, 82, 244, 145, 4, 243, 116, 248, 5, 137, 98, 93, 19, 21, 235, 157, 246, 38, 31, 93, 153, 224, 128, 213, 36, 91, 148, 49, 185, 93, 172, 63, 110, 73, 216, 123, 158, 237, 69, 219, 16, 161, 13, 111, 33, 70, 139, 114, 54, 63, 68, 189, 189, 14, 98, 216, 136, 166, 13, 212, 39, 47, 41, 113, 241, 93, 253, 203, 16, 55, 181, 86, 126, 127, 213, 239, 57, 194, 143, 223, 17, 255, 219, 152, 17, 184, 215, 201, 195, 206, 100, 154, 19, 178, 237, 7, 61, 119, 106, 36, 73, 39, 136, 245}, +{128, 29, 82, 226, 113, 173, 40, 159, 173, 154, 68, 127, 78, 184, 234, 253, 19, 233, 27, 231, 177, 247, 125, 166, 96, 142, 232, 8, 120, 110, 11, 222, 131, 125, 175, 201, 98, 51, 9, 159, 73, 44, 228, 235, 204, 212, 66, 123, 248, 199, 15, 115, 237, 205, 117, 27, 254, 141, 71, 149, 95, 163, 48, 98, 119, 118, 78, 216, 46, 180, 240, 158, 117, 54, 175, 167, 217, 12, 26, 116, 162, 191, 180, 14, 108, 22, 17, 47, 80, 8, 2, 76, 148, 248, 87, 131, 7, 46, 119, 30, 124, 92, 160, 38, 199, 46, 173, 170, 204, 17, 15, 57, 205, 63, 27, 252, 208, 195, 249, 75, 251, 179, 71, 238, 190, 8, 9, 91}, +{185, 27, 39, 206, 108, 58, 195, 70, 117, 171, 209, 127, 42, 33, 4, 109, 129, 182, 157, 121, 45, 191, 205, 31, 155, 3, 237, 3, 67, 229, 37, 2, 183, 70, 98, 153, 250, 162, 148, 173, 25, 199, 251, 207, 177, 52, 158, 171, 78, 24, 16, 68, 126, 173, 230, 33, 44, 9, 226, 243, 158, 133, 111, 186, 15, 235, 82, 155, 183, 112, 44, 177, 173, 228, 147, 146, 0, 40, 218, 21, 101, 8, 37, 29, 141, 116, 42, 194, 150, 20, 187, 155, 176, 54, 46, 69, 200, 111, 70, 225, 70, 9, 94, 148, 6, 59, 108, 122, 148, 216, 122, 65, 190, 197, 12, 240, 18, 142, 181, 19, 40, 214, 208, 221, 230, 147, 24, 111}, +{142, 118, 155, 69, 189, 182, 104, 188, 110, 34, 234, 92, 151, 20, 85, 16, 199, 9, 205, 141, 32, 156, 174, 93, 195, 153, 50, 11, 191, 142, 148, 236, 59, 122, 112, 200, 170, 181, 72, 72, 130, 44, 254, 98, 162, 218, 6, 89, 234, 66, 251, 207, 122, 11, 161, 195, 198, 246, 135, 85, 87, 44, 118, 221, 87, 10, 186, 5, 224, 117, 166, 196, 62, 205, 79, 63, 41, 63, 123, 65, 136, 211, 28, 68, 226, 80, 156, 155, 57, 13, 131, 145, 144, 225, 208, 57, 160, 164, 1, 221, 39, 224, 89, 224, 112, 39, 107, 200, 83, 96, 160, 146, 139, 194, 89, 61, 76, 117, 66, 207, 191, 218, 151, 120, 251, 238, 126, 137}, +{209, 208, 100, 215, 63, 193, 5, 249, 189, 203, 12, 50, 223, 25, 153, 154, 7, 243, 17, 43, 197, 118, 214, 179, 234, 145, 68, 25, 246, 214, 48, 146, 107, 53, 165, 113, 249, 107, 161, 220, 129, 188, 33, 195, 240, 121, 127, 6, 248, 163, 158, 196, 95, 253, 49, 183, 40, 178, 181, 255, 66, 48, 101, 28, 151, 78, 100, 227, 249, 101, 69, 129, 103, 55, 217, 26, 179, 125, 29, 219, 124, 73, 196, 247, 232, 69, 168, 147, 227, 27, 83, 94, 250, 153, 62, 189, 197, 227, 233, 165, 42, 46, 113, 166, 107, 74, 8, 169, 0, 156, 216, 210, 153, 77, 163, 235, 46, 37, 67, 36, 198, 189, 17, 122, 177, 137, 188, 153}, +{79, 100, 170, 136, 230, 233, 154, 39, 46, 126, 160, 185, 31, 89, 207, 150, 140, 155, 205, 114, 7, 233, 70, 124, 51, 134, 73, 112, 170, 84, 82, 138, 53, 174, 9, 253, 57, 240, 184, 239, 170, 64, 15, 15, 244, 243, 98, 231, 74, 76, 114, 62, 8, 95, 75, 28, 112, 58, 16, 120, 121, 124, 41, 248, 158, 240, 41, 255, 91, 185, 243, 171, 251, 105, 27, 178, 116, 23, 227, 18, 176, 160, 33, 133, 176, 209, 84, 227, 254, 237, 136, 5, 15, 111, 100, 65, 2, 166, 157, 211, 227, 176, 142, 167, 67, 229, 224, 131, 50, 222, 126, 223, 115, 65, 98, 130, 226, 136, 135, 179, 188, 232, 202, 200, 75, 34, 204, 42}, +{164, 115, 186, 205, 20, 105, 129, 239, 54, 209, 215, 251, 224, 228, 31, 185, 154, 49, 54, 96, 90, 17, 132, 214, 128, 139, 103, 132, 16, 221, 143, 172, 9, 141, 17, 39, 118, 70, 19, 191, 48, 82, 57, 228, 90, 204, 131, 51, 76, 212, 54, 220, 78, 234, 7, 140, 228, 237, 234, 65, 36, 240, 65, 213, 253, 26, 129, 136, 246, 71, 1, 66, 160, 28, 154, 237, 87, 154, 7, 207, 225, 97, 126, 178, 101, 155, 85, 161, 83, 14, 23, 151, 218, 255, 204, 70, 79, 78, 79, 106, 225, 255, 82, 158, 238, 133, 143, 90, 26, 162, 241, 215, 14, 227, 244, 255, 126, 233, 153, 130, 218, 195, 171, 20, 27, 162, 249, 219}, +{247, 159, 74, 28, 253, 193, 65, 55, 133, 170, 10, 2, 167, 51, 128, 66, 115, 4, 248, 99, 68, 40, 37, 178, 203, 191, 88, 47, 208, 72, 35, 170, 163, 173, 202, 112, 117, 26, 41, 215, 61, 159, 145, 143, 117, 135, 95, 80, 75, 21, 255, 253, 50, 84, 47, 101, 101, 11, 223, 28, 218, 32, 181, 112, 54, 212, 157, 60, 239, 87, 32, 185, 209, 84, 109, 110, 138, 39, 130, 6, 198, 37, 162, 255, 90, 184, 69, 165, 187, 82, 102, 52, 148, 42, 31, 108, 17, 122, 238, 171, 192, 132, 45, 45, 138, 12, 173, 164, 15, 64, 201, 168, 10, 7, 53, 136, 25, 219, 23, 251, 48, 1, 142, 24, 103, 113, 253}, +{169, 229, 159, 147, 167, 199, 64, 111, 109, 156, 191, 9, 231, 135, 24, 240, 101, 74, 205, 48, 133, 225, 216, 185, 170, 231, 252, 188, 205, 228, 170, 227, 78, 34, 182, 138, 125, 170, 7, 32, 181, 159, 161, 138, 39, 99, 231, 29, 109, 212, 32, 84, 221, 23, 24, 109, 3, 170, 34, 54, 29, 1, 43, 89, 220, 88, 46, 102, 147, 199, 113, 57, 15, 237, 218, 143, 84, 147, 99, 100, 1, 169, 47, 59, 35, 173, 32, 85, 88, 42, 233, 57, 219, 134, 112, 108, 17, 38, 210, 192, 218, 30, 156, 234, 138, 244, 249, 5, 121, 247, 139, 85, 248, 124, 29, 99, 91, 255, 76, 219, 250, 35, 230, 218, 209, 81, 147, 55}, +{195, 229, 145, 124, 23, 149, 238, 189, 138, 229, 188, 17, 60, 161, 187, 250, 159, 151, 133, 189, 181, 2, 98, 159, 172, 100, 28, 182, 2, 129, 15, 133, 6, 14, 250, 222, 80, 216, 200, 110, 220, 233, 109, 229, 63, 159, 175, 230, 110, 172, 221, 219, 201, 226, 20, 11, 117, 92, 44, 121, 170, 44, 223, 111, 220, 170, 31, 161, 70, 167, 72, 72, 35, 88, 230, 221, 197, 230, 64, 223, 205, 103, 153, 83, 115, 195, 26, 205, 174, 91, 158, 47, 113, 251, 39, 61, 88, 98, 15, 176, 137, 223, 155, 249, 17, 95, 86, 62, 222, 217, 169, 10, 2, 151, 232, 1, 222, 238, 72, 47, 203, 98, 72, 40, 129, 252, 114, 35}, +{151, 174, 6, 93, 203, 238, 132, 101, 240, 107, 138, 7, 21, 196, 97, 80, 230, 51, 228, 119, 7, 22, 114, 230, 191, 143, 191, 234, 45, 152, 5, 28, 208, 140, 247, 143, 16, 149, 102, 224, 124, 145, 182, 192, 200, 141, 71, 86, 205, 140, 84, 160, 85, 167, 197, 131, 215, 89, 74, 14, 156, 33, 186, 250, 14, 128, 56, 234, 25, 101, 9, 252, 61, 251, 213, 113, 34, 131, 184, 68, 107, 192, 212, 177, 136, 8, 242, 181, 156, 82, 121, 123, 85, 173, 120, 221, 192, 139, 6, 122, 32, 22, 203, 96, 186, 87, 132, 215, 234, 66, 98, 196, 202, 55, 147, 63, 115, 54, 202, 22, 11, 55, 54, 66, 61, 130, 96, 39}, +{9, 173, 150, 107, 152, 197, 60, 47, 236, 67, 49, 52, 113, 242, 159, 62, 92, 144, 253, 90, 248, 80, 202, 162, 175, 168, 156, 8, 106, 192, 119, 69, 242, 105, 103, 229, 157, 134, 116, 165, 140, 59, 161, 41, 119, 115, 113, 56, 75, 245, 91, 22, 242, 135, 167, 51, 62, 208, 154, 17, 150, 255, 174, 78, 43, 189, 121, 235, 139, 147, 55, 105, 25, 132, 189, 14, 201, 9, 160, 20, 207, 215, 140, 184, 128, 245, 168, 226, 68, 103, 135, 70, 56, 49, 58, 192, 55, 45, 189, 6, 221, 73, 189, 102, 106, 56, 141, 144, 12, 180, 133, 110, 230, 230, 139, 228, 81, 160, 154, 101, 200, 18, 101, 159, 70, 15, 26, 24}, +{70, 245, 157, 218, 60, 255, 141, 155, 207, 0, 191, 65, 191, 79, 23, 17, 24, 243, 244, 205, 178, 115, 229, 184, 67, 81, 189, 155, 240, 160, 231, 236, 136, 129, 235, 180, 109, 195, 1, 91, 23, 140, 44, 245, 166, 30, 7, 27, 127, 133, 173, 15, 207, 100, 218, 184, 167, 194, 123, 39, 193, 82, 157, 13, 238, 49, 169, 115, 214, 148, 231, 246, 94, 82, 198, 104, 131, 248, 222, 186, 22, 93, 216, 46, 139, 181, 16, 180, 94, 168, 7, 249, 91, 92, 148, 18, 18, 223, 142, 111, 152, 188, 178, 206, 43, 176, 108, 117, 241, 192, 200, 114, 44, 79, 111, 245, 115, 194, 221, 162, 67, 30, 142, 40, 219, 232, 99, 250}, +{140, 92, 43, 0, 3, 196, 78, 134, 237, 171, 57, 126, 30, 16, 171, 25, 189, 159, 12, 189, 113, 141, 254, 198, 127, 192, 48, 133, 149, 64, 51, 19, 74, 93, 198, 143, 66, 72, 158, 44, 161, 150, 176, 3, 94, 6, 111, 149, 99, 170, 36, 137, 126, 125, 104, 20, 237, 149, 108, 189, 47, 32, 234, 86, 27, 242, 220, 196, 110, 47, 53, 224, 57, 13, 85, 53, 44, 43, 128, 50, 159, 220, 237, 191, 2, 156, 172, 233, 182, 172, 50, 254, 171, 194, 75, 106, 102, 58, 174, 245, 229, 215, 34, 38, 129, 252, 92, 133, 121, 86, 243, 128, 224, 248, 238, 106, 80, 180, 118, 108, 158, 207, 42, 251, 99, 49, 198, 163}, +{146, 202, 155, 48, 92, 88, 10, 104, 31, 124, 232, 134, 190, 67, 93, 168, 241, 101, 60, 42, 46, 39, 239, 65, 20, 247, 49, 130, 236, 219, 72, 170, 57, 78, 193, 8, 158, 101, 74, 248, 55, 217, 251, 55, 44, 13, 210, 228, 238, 92, 88, 33, 121, 114, 109, 74, 84, 78, 168, 164, 204, 21, 217, 114, 23, 113, 86, 31, 66, 11, 225, 108, 136, 142, 140, 146, 1, 207, 213, 141, 101, 112, 19, 4, 171, 35, 101, 87, 85, 69, 98, 175, 171, 172, 144, 195, 105, 86, 108, 225, 167, 108, 113, 233, 139, 120, 121, 100, 137, 10, 173, 67, 45, 207, 94, 222, 35, 251, 43, 229, 97, 79, 176, 201, 56, 203, 57, 238}, +{7, 168, 47, 55, 21, 140, 240, 131, 133, 245, 199, 12, 22, 100, 214, 183, 157, 113, 250, 26, 84, 203, 21, 71, 80, 127, 128, 137, 109, 181, 202, 17, 39, 230, 188, 139, 209, 191, 124, 51, 140, 229, 96, 132, 5, 134, 244, 228, 52, 192, 42, 237, 9, 245, 165, 246, 126, 161, 83, 150, 51, 78, 233, 4, 174, 119, 83, 204, 107, 67, 232, 240, 192, 153, 168, 11, 91, 176, 205, 192, 202, 129, 12, 49, 171, 19, 8, 220, 223, 55, 70, 126, 25, 216, 32, 18, 39, 77, 203, 152, 41, 159, 138, 118, 6, 149, 14, 138, 159, 196, 165, 30, 182, 104, 225, 111, 68, 2, 61, 250, 204, 230, 195, 133, 93, 85, 125, 24}, +{158, 87, 190, 249, 117, 81, 195, 161, 135, 250, 71, 97, 50, 255, 86, 17, 96, 20, 117, 114, 195, 206, 193, 169, 150, 0, 252, 108, 123, 231, 33, 23, 115, 220, 9, 196, 106, 209, 231, 207, 234, 151, 70, 18, 43, 239, 35, 43, 241, 7, 37, 252, 239, 78, 50, 109, 103, 200, 53, 33, 76, 192, 39, 109, 53, 3, 143, 82, 169, 181, 209, 153, 19, 246, 77, 235, 115, 222, 187, 123, 49, 0, 49, 157, 159, 124, 184, 136, 44, 85, 232, 42, 95, 143, 81, 199, 45, 236, 106, 27, 76, 135, 181, 72, 103, 193, 113, 108, 174, 170, 127, 231, 137, 249, 197, 81, 205, 212, 53, 149, 225, 75, 169, 39, 220, 68, 145, 130}, +{143, 109, 26, 148, 41, 73, 129, 30, 68, 185, 199, 245, 102, 184, 139, 166, 118, 74, 144, 43, 85, 37, 128, 41, 252, 226, 198, 86, 122, 137, 88, 161, 195, 163, 145, 1, 57, 121, 129, 115, 77, 206, 218, 166, 192, 89, 196, 105, 22, 169, 3, 241, 127, 97, 102, 103, 207, 241, 78, 35, 68, 148, 19, 247, 212, 216, 4, 91, 104, 103, 226, 189, 66, 106, 26, 61, 37, 205, 126, 236, 173, 136, 103, 74, 200, 203, 231, 208, 20, 228, 66, 134, 193, 44, 87, 72, 221, 100, 215, 153, 251, 249, 247, 129, 106, 39, 179, 202, 40, 70, 255, 150, 249, 92, 50, 100, 177, 205, 2, 185, 2, 11, 1, 191, 252, 130, 84, 202}, +{74, 231, 203, 76, 18, 79, 200, 38, 42, 96, 65, 213, 181, 41, 119, 181, 81, 95, 128, 184, 121, 107, 67, 140, 123, 194, 11, 137, 221, 101, 211, 54, 224, 207, 132, 27, 48, 155, 30, 105, 154, 133, 77, 165, 55, 28, 22, 79, 193, 115, 222, 230, 45, 89, 133, 245, 110, 99, 237, 201, 18, 169, 95, 180, 172, 59, 111, 22, 129, 102, 7, 134, 159, 97, 159, 139, 152, 255, 163, 254, 195, 190, 188, 106, 29, 120, 13, 35, 54, 90, 36, 107, 212, 32, 80, 145, 164, 210, 102, 26, 152, 179, 78, 59, 123, 99, 251, 89, 240, 119, 151, 89, 120, 128, 191, 83, 159, 63, 229, 42, 83, 36, 166, 96, 10, 210, 239, 165}, +{145, 145, 244, 35, 223, 175, 79, 236, 223, 29, 0, 105, 200, 123, 82, 231, 145, 124, 232, 113, 180, 247, 49, 227, 250, 193, 31, 222, 172, 169, 63, 77, 241, 35, 54, 30, 71, 126, 246, 190, 87, 189, 41, 208, 169, 111, 68, 165, 170, 53, 119, 1, 40, 242, 90, 76, 202, 79, 66, 57, 92, 34, 129, 93, 193, 24, 242, 11, 105, 187, 216, 178, 133, 38, 107, 111, 48, 244, 230, 12, 151, 180, 129, 223, 123, 162, 22, 20, 5, 244, 31, 218, 104, 54, 189, 44, 169, 43, 187, 133, 99, 204, 69, 253, 127, 195, 106, 254, 119, 137, 146, 168, 176, 140, 91, 129, 57, 242, 70, 211, 185, 184, 223, 237, 34, 34, 227, 133}, +{111, 39, 227, 239, 217, 215, 152, 68, 125, 144, 29, 228, 206, 251, 216, 12, 41, 67, 56, 79, 53, 168, 241, 49, 45, 115, 61, 58, 67, 17, 161, 217, 85, 39, 74, 184, 41, 86, 101, 133, 116, 239, 57, 176, 213, 59, 14, 201, 43, 82, 139, 181, 127, 127, 245, 63, 61, 135, 5, 216, 54, 1, 79, 20, 10, 253, 241, 23, 41, 145, 219, 47, 213, 109, 158, 215, 52, 35, 184, 244, 230, 144, 73, 247, 250, 8, 235, 18, 56, 68, 75, 209, 96, 228, 29, 84, 42, 73, 0, 78, 188, 154, 104, 58, 86, 189, 158, 223, 160, 28, 143, 161, 136, 140, 61, 105, 245, 69, 90, 117, 139, 199, 81, 221, 246, 229, 146, 65}, +{179, 182, 1, 90, 236, 179, 154, 200, 117, 58, 244, 112, 186, 133, 231, 37, 236, 240, 208, 27, 168, 243, 51, 114, 200, 25, 97, 193, 219, 95, 238, 198, 217, 152, 51, 225, 35, 62, 66, 100, 108, 157, 102, 210, 255, 210, 126, 167, 220, 228, 167, 234, 177, 76, 64, 232, 233, 58, 249, 215, 160, 82, 65, 205, 119, 207, 253, 223, 81, 11, 65, 22, 201, 218, 80, 127, 100, 41, 196, 27, 188, 49, 80, 162, 192, 253, 12, 200, 205, 119, 123, 23, 110, 251, 72, 230, 48, 73, 247, 59, 155, 70, 34, 232, 19, 42, 156, 24, 160, 35, 23, 159, 123, 249, 2, 33, 150, 130, 87, 86, 101, 249, 151, 186, 18, 233, 93, 138}, +{85, 131, 89, 215, 220, 66, 37, 150, 235, 194, 113, 123, 102, 70, 194, 134, 238, 42, 242, 134, 140, 188, 252, 18, 64, 150, 163, 161, 24, 13, 110, 244, 105, 182, 85, 80, 112, 35, 23, 84, 73, 233, 243, 89, 17, 123, 181, 189, 138, 189, 92, 86, 93, 178, 253, 109, 123, 0, 81, 200, 254, 169, 127, 252, 217, 165, 134, 66, 33, 10, 25, 195, 75, 121, 252, 126, 225, 63, 152, 168, 134, 198, 103, 2, 222, 6, 241, 51, 17, 60, 22, 123, 46, 181, 52, 247, 172, 211, 244, 90, 106, 62, 232, 75, 241, 148, 19, 98, 16, 184, 203, 122, 126, 158, 112, 89, 88, 203, 156, 233, 239, 229, 36, 9, 173, 209, 178, 197}, +{106, 89, 114, 37, 51, 52, 220, 92, 46, 53, 198, 122, 130, 251, 39, 50, 90, 0, 212, 153, 209, 104, 154, 166, 168, 178, 99, 248, 50, 128, 210, 42, 84, 212, 71, 178, 88, 191, 140, 138, 181, 153, 231, 101, 208, 70, 123, 110, 168, 175, 242, 90, 255, 5, 195, 22, 17, 227, 220, 62, 206, 65, 136, 66, 214, 224, 145, 146, 53, 162, 138, 137, 196, 198, 236, 182, 38, 82, 34, 37, 186, 62, 206, 191, 40, 186, 163, 232, 191, 113, 134, 246, 65, 200, 16, 70, 134, 7, 90, 222, 195, 9, 40, 169, 137, 6, 52, 86, 150, 56, 43, 206, 243, 114, 160, 50, 107, 167, 149, 28, 4, 60, 28, 246, 162, 175, 169, 83}, +{203, 28, 36, 141, 40, 97, 125, 164, 187, 142, 192, 136, 114, 224, 84, 160, 42, 216, 227, 153, 128, 83, 146, 70, 126, 36, 197, 106, 23, 5, 210, 69, 61, 228, 167, 133, 140, 57, 234, 31, 253, 222, 183, 34, 3, 204, 231, 44, 65, 98, 220, 230, 12, 37, 39, 186, 254, 156, 36, 223, 114, 13, 49, 100, 6, 46, 186, 249, 135, 125, 155, 150, 237, 61, 164, 164, 34, 24, 92, 35, 93, 224, 100, 195, 66, 48, 180, 111, 122, 6, 65, 83, 69, 246, 251, 85, 34, 50, 138, 133, 154, 249, 126, 186, 79, 235, 180, 5, 64, 45, 9, 245, 72, 108, 221, 29, 194, 81, 16, 204, 235, 116, 13, 185, 17, 224, 198, 26}, +{178, 101, 217, 223, 96, 38, 126, 114, 30, 147, 83, 161, 131, 201, 0, 187, 128, 209, 48, 38, 245, 148, 140, 228, 48, 186, 53, 176, 241, 175, 202, 76, 216, 134, 201, 158, 227, 28, 55, 214, 65, 115, 129, 167, 188, 212, 116, 20, 228, 106, 59, 219, 100, 137, 14, 78, 107, 208, 166, 226, 235, 126, 129, 99, 111, 135, 112, 90, 41, 208, 117, 254, 37, 26, 161, 141, 178, 128, 36, 4, 240, 182, 127, 161, 49, 11, 162, 233, 72, 106, 122, 167, 192, 42, 124, 21, 32, 15, 148, 207, 46, 149, 74, 63, 207, 186, 232, 148, 105, 35, 47, 32, 161, 3, 110, 68, 143, 54, 167, 156, 75, 16, 250, 11, 114, 178, 89, 150}, +{62, 49, 88, 165, 147, 38, 58, 36, 255, 209, 230, 77, 91, 109, 203, 174, 124, 134, 135, 134, 152, 186, 42, 76, 133, 82, 231, 104, 97, 82, 173, 26, 67, 98, 124, 53, 126, 137, 186, 186, 18, 172, 185, 57, 199, 180, 200, 98, 45, 217, 152, 86, 133, 9, 78, 84, 166, 216, 156, 225, 144, 38, 213, 55, 170, 134, 221, 15, 165, 27, 228, 220, 88, 2, 87, 170, 210, 77, 67, 83, 255, 141, 237, 50, 204, 163, 203, 108, 176, 186, 4, 5, 147, 68, 48, 243, 165, 73, 112, 209, 254, 200, 153, 164, 154, 138, 247, 219, 38, 140, 9, 53, 94, 27, 17, 150, 3, 48, 219, 158, 67, 226, 75, 172, 203, 23, 156, 77}, +{24, 88, 145, 142, 55, 225, 79, 237, 70, 218, 233, 182, 36, 255, 155, 88, 72, 131, 254, 122, 251, 136, 108, 45, 208, 205, 131, 150, 46, 107, 199, 102, 20, 146, 214, 172, 204, 160, 5, 244, 137, 128, 229, 205, 136, 129, 14, 227, 107, 227, 3, 131, 47, 14, 168, 69, 136, 139, 162, 17, 86, 169, 223, 189, 4, 101, 42, 45, 118, 89, 247, 86, 99, 167, 244, 117, 113, 109, 193, 218, 45, 111, 100, 85, 240, 76, 75, 10, 152, 244, 90, 111, 210, 2, 152, 198, 244, 195, 39, 238, 185, 179, 163, 102, 189, 194, 50, 246, 228, 203, 117, 134, 101, 127, 74, 218, 29, 111, 234, 74, 36, 12, 120, 32, 49, 231, 182, 149}, +{83, 219, 158, 36, 186, 119, 77, 235, 25, 174, 55, 45, 83, 79, 252, 121, 133, 48, 88, 182, 24, 89, 202, 173, 147, 227, 138, 101, 204, 245, 178, 159, 3, 199, 139, 212, 207, 189, 176, 7, 132, 66, 223, 194, 199, 203, 224, 245, 179, 38, 180, 135, 219, 182, 245, 36, 40, 174, 7, 84, 65, 238, 203, 108, 143, 144, 235, 176, 198, 9, 46, 14, 182, 76, 230, 24, 231, 23, 55, 15, 145, 170, 243, 22, 182, 142, 68, 221, 190, 24, 198, 47, 183, 2, 238, 182, 189, 200, 103, 58, 18, 251, 75, 185, 16, 107, 29, 61, 67, 150, 196, 189, 240, 127, 211, 216, 197, 110, 169, 164, 219, 185, 156, 120, 188, 232, 19, 119}, +{134, 184, 118, 247, 213, 141, 71, 252, 188, 160, 165, 193, 82, 14, 190, 115, 18, 153, 83, 17, 252, 223, 69, 221, 44, 248, 162, 113, 48, 239, 15, 190, 159, 83, 111, 100, 62, 153, 235, 114, 86, 12, 13, 249, 136, 60, 135, 190, 173, 97, 74, 66, 29, 245, 51, 238, 78, 35, 139, 16, 116, 5, 244, 25, 129, 245, 140, 194, 185, 73, 144, 246, 101, 11, 152, 33, 48, 219, 33, 22, 207, 137, 59, 162, 89, 62, 15, 235, 182, 232, 209, 106, 145, 92, 185, 175, 143, 117, 89, 152, 26, 70, 25, 228, 138, 51, 171, 218, 104, 169, 7, 44, 73, 254, 223, 198, 124, 38, 196, 160, 0, 252, 222, 16, 119, 30, 9, 54}, +{7, 248, 19, 66, 27, 90, 171, 129, 99, 209, 194, 239, 6, 139, 22, 63, 226, 2, 129, 147, 35, 88, 128, 168, 209, 146, 133, 94, 85, 52, 246, 75, 49, 57, 65, 192, 113, 243, 165, 243, 12, 220, 199, 59, 64, 172, 202, 21, 104, 194, 159, 27, 143, 86, 218, 193, 188, 201, 40, 112, 183, 178, 58, 194, 233, 7, 212, 65, 53, 29, 253, 48, 231, 121, 255, 114, 172, 119, 174, 77, 209, 77, 183, 80, 180, 174, 197, 133, 0, 58, 44, 69, 94, 36, 245, 196, 101, 251, 34, 29, 20, 153, 237, 188, 218, 141, 178, 81, 203, 83, 217, 75, 16, 58, 91, 7, 149, 252, 122, 67, 130, 157, 13, 79, 118, 59, 12, 224}, +{51, 232, 31, 142, 59, 134, 84, 238, 51, 65, 209, 59, 145, 138, 191, 90, 202, 243, 190, 219, 184, 150, 137, 59, 42, 61, 56, 108, 62, 76, 30, 44, 82, 50, 115, 72, 103, 159, 185, 23, 245, 142, 137, 64, 65, 23, 49, 34, 94, 137, 246, 188, 182, 243, 34, 55, 153, 93, 234, 254, 169, 200, 219, 17, 41, 50, 69, 13, 67, 163, 19, 174, 201, 56, 196, 57, 13, 79, 19, 67, 165, 128, 145, 110, 151, 119, 91, 200, 206, 181, 247, 78, 143, 174, 139, 135, 250, 247, 61, 210, 173, 13, 141, 68, 29, 8, 225, 132, 76, 10, 192, 59, 117, 120, 74, 10, 173, 104, 26, 191, 204, 30, 129, 61, 241, 11, 36, 74}, +{10, 191, 251, 21, 8, 105, 157, 166, 90, 145, 198, 86, 119, 23, 64, 9, 114, 145, 87, 24, 224, 192, 50, 32, 51, 246, 93, 130, 201, 74, 62, 45, 76, 122, 100, 122, 35, 190, 56, 192, 218, 62, 119, 81, 41, 11, 152, 234, 172, 97, 177, 75, 11, 192, 246, 153, 27, 88, 36, 222, 41, 33, 51, 104, 185, 143, 251, 82, 14, 76, 73, 103, 84, 119, 249, 103, 13, 6, 202, 176, 85, 39, 51, 190, 139, 93, 86, 47, 235, 240, 132, 20, 15, 174, 218, 219, 79, 219, 221, 111, 136, 239, 83, 22, 201, 16, 23, 72, 182, 43, 141, 130, 112, 57, 207, 47, 88, 81, 167, 37, 100, 155, 107, 95, 115, 46, 73, 122}, +{132, 78, 21, 97, 25, 78, 245, 96, 150, 28, 186, 200, 183, 131, 161, 246, 210, 142, 82, 63, 11, 206, 126, 231, 48, 32, 207, 106, 68, 38, 159, 152, 91, 224, 121, 103, 118, 125, 90, 197, 78, 152, 48, 150, 155, 75, 83, 78, 98, 147, 106, 67, 74, 222, 189, 136, 86, 202, 18, 241, 144, 38, 60, 186, 110, 190, 131, 245, 85, 112, 98, 147, 237, 202, 42, 15, 28, 60, 181, 66, 110, 101, 202, 111, 223, 224, 6, 137, 233, 54, 59, 62, 15, 152, 105, 125, 195, 18, 68, 179, 243, 201, 207, 226, 170, 253, 203, 174, 110, 255, 29, 99, 169, 89, 185, 45, 51, 47, 230, 172, 38, 181, 93, 88, 162, 96, 140, 184}, +{61, 165, 92, 91, 245, 167, 27, 216, 85, 185, 62, 175, 178, 154, 86, 8, 98, 39, 161, 155, 136, 187, 43, 84, 108, 49, 194, 51, 47, 191, 50, 230, 222, 253, 181, 186, 119, 250, 59, 24, 239, 7, 48, 200, 209, 44, 112, 98, 180, 28, 110, 44, 0, 184, 214, 219, 250, 227, 46, 181, 63, 79, 47, 101, 1, 61, 203, 251, 205, 250, 11, 177, 28, 53, 185, 36, 198, 143, 146, 64, 240, 150, 225, 129, 104, 32, 186, 234, 134, 130, 205, 228, 219, 146, 112, 60, 219, 189, 9, 121, 221, 162, 107, 231, 9, 154, 81, 179, 88, 224, 148, 238, 135, 91, 99, 50, 237, 243, 82, 203, 51, 42, 138, 215, 150, 63, 68, 237}, +{167, 84, 114, 86, 16, 197, 137, 123, 207, 156, 215, 171, 151, 142, 217, 97, 217, 164, 33, 183, 225, 112, 70, 242, 153, 242, 96, 83, 148, 239, 128, 31, 220, 128, 57, 35, 25, 103, 204, 87, 252, 160, 222, 1, 76, 182, 7, 149, 128, 248, 143, 247, 54, 183, 10, 243, 195, 66, 77, 226, 83, 123, 165, 45, 200, 143, 66, 17, 154, 240, 189, 34, 255, 196, 0, 57, 18, 78, 72, 91, 113, 133, 16, 189, 151, 245, 190, 38, 171, 171, 139, 43, 11, 23, 163, 108, 239, 124, 151, 50, 82, 102, 26, 73, 172, 111, 221, 92, 165, 223, 122, 120, 238, 96, 188, 185, 98, 60, 116, 178, 178, 252, 74, 40, 53, 110, 25, 31}, +{112, 66, 218, 8, 65, 121, 63, 96, 159, 236, 154, 176, 177, 42, 19, 17, 38, 47, 71, 83, 141, 127, 141, 58, 175, 133, 28, 32, 0, 38, 216, 163, 248, 209, 159, 184, 237, 244, 36, 40, 74, 200, 62, 223, 251, 41, 148, 219, 107, 207, 92, 118, 134, 46, 209, 165, 235, 98, 184, 134, 170, 55, 115, 192, 59, 216, 122, 243, 104, 64, 205, 81, 113, 16, 94, 33, 38, 36, 47, 17, 173, 205, 168, 139, 128, 29, 118, 127, 195, 219, 0, 139, 73, 137, 220, 130, 238, 76, 219, 67, 72, 163, 233, 6, 157, 46, 158, 101, 140, 200, 11, 178, 127, 230, 22, 246, 99, 160, 240, 208, 241, 100, 207, 164, 147, 95, 8, 157}, +{157, 8, 38, 7, 83, 185, 4, 190, 126, 227, 40, 112, 33, 165, 194, 135, 66, 200, 195, 177, 189, 114, 171, 105, 248, 120, 44, 244, 127, 215, 173, 102, 228, 38, 26, 135, 167, 9, 194, 143, 50, 71, 4, 197, 44, 100, 130, 132, 55, 0, 122, 94, 124, 30, 183, 100, 249, 94, 209, 73, 102, 72, 185, 232, 75, 227, 4, 86, 183, 62, 16, 77, 84, 151, 168, 21, 13, 161, 182, 177, 41, 224, 41, 141, 225, 40, 141, 113, 34, 79, 140, 81, 30, 89, 202, 89, 216, 117, 16, 86, 56, 33, 23, 154, 43, 114, 63, 173, 99, 191, 78, 155, 140, 70, 76, 161, 174, 254, 88, 52, 196, 37, 217, 174, 131, 22, 95, 42}, +{204, 207, 172, 92, 36, 175, 19, 179, 244, 4, 40, 177, 29, 78, 169, 24, 19, 207, 139, 68, 79, 194, 139, 86, 120, 253, 169, 26, 246, 28, 140, 16, 146, 198, 84, 161, 24, 238, 11, 209, 108, 107, 186, 67, 173, 8, 40, 45, 217, 50, 35, 10, 105, 174, 2, 18, 222, 151, 67, 10, 40, 228, 86, 182, 128, 154, 35, 159, 46, 134, 158, 41, 218, 113, 128, 188, 208, 159, 44, 77, 142, 42, 86, 255, 14, 195, 160, 217, 231, 179, 85, 185, 118, 99, 2, 152, 172, 36, 174, 85, 161, 226, 133, 72, 190, 253, 118, 196, 97, 64, 184, 180, 192, 60, 209, 168, 198, 143, 122, 78, 220, 201, 163, 246, 99, 227, 69, 250}, +{33, 11, 99, 239, 154, 237, 245, 136, 8, 47, 114, 10, 121, 38, 88, 167, 188, 121, 109, 101, 192, 141, 216, 147, 158, 44, 144, 173, 40, 208, 141, 33, 252, 250, 175, 48, 147, 130, 67, 16, 87, 111, 223, 121, 43, 116, 68, 170, 194, 179, 174, 15, 154, 24, 3, 198, 124, 206, 83, 141, 96, 205, 56, 191, 199, 247, 95, 163, 198, 206, 69, 146, 118, 104, 97, 58, 246, 90, 82, 33, 210, 165, 199, 203, 229, 184, 129, 146, 123, 100, 217, 2, 198, 66, 222, 231, 17, 19, 195, 39, 214, 56, 108, 149, 224, 55, 166, 247, 173, 8, 175, 34, 160, 166, 202, 127, 228, 175, 4, 145, 242, 18, 8, 115, 52, 166, 81, 243}, +{148, 36, 232, 162, 141, 183, 248, 14, 172, 42, 246, 70, 207, 205, 169, 52, 129, 126, 196, 212, 7, 36, 124, 89, 245, 193, 166, 202, 91, 103, 115, 73, 28, 21, 118, 58, 225, 191, 64, 167, 116, 25, 86, 151, 91, 193, 167, 160, 6, 176, 205, 32, 235, 167, 26, 6, 57, 146, 207, 237, 202, 181, 84, 48, 191, 184, 158, 232, 187, 136, 1, 244, 169, 149, 247, 57, 245, 164, 78, 247, 254, 43, 90, 229, 50, 120, 17, 187, 25, 247, 39, 204, 59, 73, 184, 247, 148, 122, 21, 35, 133, 117, 39, 175, 225, 4, 179, 79, 151, 11, 40, 157, 178, 234, 68, 182, 47, 43, 137, 68, 211, 154, 232, 105, 14, 0, 236, 24}, /* */ +{88, 248, 96, 25, 16, 69, 31, 23, 192, 179, 4, 132, 43, 69, 160, 50, 183, 198, 39, 140, 175, 200, 89, 50, 126, 145, 9, 219, 192, 141, 146, 218, 214, 117, 145, 34, 174, 78, 81, 181, 165, 230, 211, 26, 160, 70, 39, 194, 59, 89, 120, 90, 157, 128, 227, 156, 27, 226, 117, 115, 151, 154, 109, 108, 156, 79, 61, 111, 20, 90, 219, 226, 244, 195, 23, 240, 159, 122, 7, 139, 232, 10, 188, 52, 157, 8, 206, 34, 202, 219, 28, 65, 120, 120, 222, 118, 251, 60, 190, 15, 76, 181, 57, 175, 61, 144, 222, 145, 50, 212, 102, 95, 229, 136, 211, 141, 21, 113, 187, 228, 169, 82, 8, 205, 223, 232, 229, 150}, +{129, 199, 114, 195, 96, 134, 223, 89, 225, 66, 132, 126, 219, 147, 253, 45, 39, 249, 237, 118, 212, 93, 87, 37, 129, 251, 228, 149, 151, 136, 93, 188, 139, 208, 138, 128, 206, 152, 81, 92, 122, 140, 64, 30, 137, 134, 162, 189, 233, 78, 5, 56, 19, 185, 184, 245, 117, 240, 235, 170, 52, 186, 102, 104, 122, 31, 90, 28, 2, 126, 117, 10, 47, 41, 82, 82, 182, 87, 83, 20, 210, 237, 119, 84, 145, 11, 87, 5, 94, 16, 23, 194, 192, 191, 239, 196, 0, 191, 192, 159, 142, 200, 63, 103, 120, 227, 106, 136, 126, 169, 64, 205, 243, 13, 159, 147, 139, 3, 218, 36, 202, 150, 134, 92, 174, 6, 214, 254}, +{74, 166, 51, 229, 21, 233, 9, 187, 200, 129, 132, 19, 130, 113, 231, 20, 154, 33, 167, 222, 124, 174, 194, 193, 170, 45, 46, 22, 181, 8, 205, 164, 93, 88, 137, 81, 84, 162, 254, 97, 26, 47, 129, 217, 17, 143, 36, 170, 55, 250, 91, 112, 248, 245, 204, 31, 76, 168, 211, 156, 101, 31, 52, 255, 53, 111, 62, 230, 186, 54, 141, 158, 187, 38, 170, 43, 86, 240, 186, 187, 202, 161, 166, 47, 127, 127, 18, 142, 239, 249, 181, 197, 152, 30, 24, 135, 230, 138, 21, 142, 248, 3, 22, 61, 150, 116, 222, 223, 1, 87, 237, 252, 50, 233, 154, 165, 103, 49, 250, 209, 204, 50, 42, 16, 150, 223, 245, 222}, +{153, 29, 203, 47, 200, 77, 92, 114, 74, 182, 232, 47, 172, 58, 94, 131, 167, 41, 243, 77, 129, 217, 7, 66, 232, 162, 7, 51, 80, 170, 117, 117, 189, 203, 144, 133, 139, 23, 131, 183, 188, 44, 191, 61, 64, 57, 29, 61, 190, 191, 96, 73, 35, 101, 64, 175, 165, 208, 131, 136, 76, 74, 174, 98, 4, 250, 166, 159, 46, 50, 134, 160, 113, 208, 171, 118, 217, 95, 66, 204, 50, 183, 9, 118, 121, 110, 237, 18, 237, 26, 81, 192, 120, 34, 168, 100, 239, 80, 24, 233, 198, 49, 118, 170, 188, 49, 138, 141, 204, 38, 214, 236, 180, 31, 15, 224, 54, 54, 75, 248, 105, 235, 168, 223, 140, 204, 69, 143}, +{91, 79, 17, 33, 241, 1, 163, 139, 203, 14, 108, 239, 104, 122, 126, 164, 172, 31, 123, 13, 229, 23, 21, 120, 168, 30, 94, 55, 211, 194, 233, 6, 10, 168, 19, 141, 152, 35, 205, 235, 198, 164, 222, 236, 8, 13, 228, 92, 26, 107, 56, 84, 189, 14, 146, 178, 44, 221, 54, 115, 68, 5, 86, 19, 238, 215, 51, 193, 171, 78, 99, 90, 53, 9, 26, 144, 8, 177, 7, 167, 19, 212, 175, 42, 54, 139, 193, 127, 192, 81, 215, 208, 53, 50, 68, 146, 209, 72, 50, 134, 72, 117, 132, 54, 138, 169, 40, 81, 95, 135, 253, 163, 37, 225, 225, 213, 214, 30, 218, 132, 142, 237, 17, 224, 242, 96, 112, 227}, +{167, 53, 194, 41, 207, 229, 93, 93, 82, 17, 113, 131, 210, 43, 67, 245, 29, 47, 172, 9, 133, 40, 82, 22, 163, 198, 211, 133, 125, 217, 103, 161, 162, 187, 226, 253, 142, 118, 37, 247, 27, 236, 109, 80, 12, 166, 132, 199, 191, 188, 155, 216, 74, 197, 90, 140, 128, 209, 132, 52, 82, 138, 71, 187, 183, 168, 182, 232, 187, 141, 203, 138, 184, 122, 13, 212, 65, 32, 36, 75, 185, 214, 100, 141, 10, 104, 150, 105, 192, 1, 223, 103, 85, 75, 27, 47, 234, 173, 151, 92, 41, 15, 19, 128, 94, 90, 133, 119, 93, 38, 181, 77, 155, 177, 54, 31, 118, 36, 74, 251, 100, 14, 153, 114, 232, 196, 217, 160}, +{39, 109, 51, 141, 116, 230, 100, 148, 237, 131, 194, 8, 53, 153, 192, 185, 145, 250, 218, 167, 118, 7, 79, 131, 38, 135, 188, 193, 109, 174, 244, 248, 12, 180, 50, 157, 66, 147, 182, 151, 226, 156, 214, 128, 170, 30, 6, 140, 205, 242, 62, 13, 78, 115, 226, 74, 153, 76, 14, 162, 75, 93, 41, 114, 162, 117, 143, 57, 46, 127, 144, 180, 168, 70, 221, 86, 166, 157, 111, 132, 183, 89, 180, 235, 189, 34, 4, 68, 68, 180, 167, 160, 169, 69, 241, 3, 105, 197, 161, 197, 54, 245, 255, 100, 215, 137, 109, 229, 90, 202, 5, 186, 218, 42, 25, 65, 120, 72, 188, 118, 16, 105, 83, 139, 204, 59, 6, 51}, +{41, 189, 183, 22, 15, 0, 219, 237, 92, 23, 91, 86, 222, 78, 32, 226, 118, 233, 104, 210, 219, 33, 22, 95, 61, 41, 122, 179, 152, 214, 124, 89, 56, 20, 243, 33, 25, 230, 187, 81, 236, 107, 112, 238, 123, 156, 240, 86, 14, 68, 219, 69, 52, 115, 249, 16, 49, 146, 51, 172, 89, 17, 92, 3, 152, 184, 192, 167, 152, 154, 82, 197, 24, 61, 234, 8, 107, 133, 10, 194, 230, 117, 128, 201, 114, 26, 92, 102, 149, 37, 130, 53, 95, 166, 114, 141, 107, 102, 71, 69, 9, 251, 13, 114, 191, 120, 159, 105, 44, 94, 162, 145, 35, 223, 15, 193, 66, 172, 186, 38, 142, 16, 62, 244, 45, 156, 199, 105}, +{154, 133, 252, 169, 115, 235, 34, 21, 3, 214, 80, 41, 42, 65, 162, 58, 6, 215, 93, 18, 224, 7, 192, 133, 151, 14, 44, 7, 109, 242, 28, 99, 235, 17, 79, 216, 68, 105, 197, 7, 244, 184, 10, 162, 18, 143, 49, 163, 18, 37, 96, 229, 175, 230, 40, 253, 174, 227, 91, 121, 214, 73, 55, 234, 192, 135, 131, 24, 44, 65, 10, 17, 9, 173, 224, 213, 218, 253, 13, 148, 73, 216, 122, 26, 104, 3, 211, 133, 231, 250, 199, 141, 117, 129, 125, 143, 225, 15, 187, 221, 121, 106, 206, 116, 88, 52, 122, 5, 163, 105, 111, 73, 117, 110, 56, 162, 173, 17, 116, 101, 101, 215, 243, 99, 75, 161, 221, 127}, +{20, 163, 254, 225, 221, 224, 131, 24, 122, 153, 198, 220, 2, 226, 34, 151, 168, 33, 130, 242, 139, 80, 222, 199, 119, 137, 239, 221, 101, 235, 82, 14, 191, 128, 250, 108, 116, 216, 231, 35, 245, 29, 174, 91, 137, 61, 17, 198, 140, 6, 154, 232, 17, 17, 106, 193, 215, 135, 40, 41, 77, 230, 7, 119, 84, 27, 119, 28, 176, 179, 99, 58, 75, 1, 223, 241, 122, 58, 190, 143, 233, 140, 14, 198, 152, 166, 89, 106, 20, 126, 231, 99, 192, 116, 116, 120, 196, 97, 215, 171, 92, 114, 173, 146, 209, 166, 61, 85, 205, 179, 237, 227, 30, 201, 36, 124, 240, 140, 113, 229, 214, 0, 101, 241, 251, 18, 6, 10}, +{1, 125, 2, 106, 10, 201, 123, 249, 227, 188, 202, 1, 122, 213, 136, 188, 166, 198, 82, 100, 24, 108, 216, 253, 121, 240, 2, 79, 113, 224, 204, 98, 13, 22, 21, 178, 33, 29, 238, 143, 121, 96, 47, 14, 54, 175, 51, 207, 71, 59, 194, 137, 106, 170, 63, 241, 141, 231, 34, 247, 41, 169, 4, 153, 164, 252, 219, 204, 140, 198, 205, 105, 187, 238, 108, 62, 241, 104, 115, 18, 231, 217, 10, 41, 96, 44, 7, 248, 99, 98, 134, 114, 59, 88, 174, 86, 77, 96, 35, 242, 82, 247, 58, 239, 87, 60, 76, 152, 118, 153, 25, 100, 154, 10, 112, 91, 58, 216, 160, 188, 41, 9, 223, 164, 29, 249, 142, 150}, +{9, 163, 168, 23, 237, 174, 243, 78, 196, 121, 43, 227, 90, 70, 70, 250, 156, 190, 238, 60, 240, 14, 26, 21, 173, 144, 95, 30, 183, 214, 135, 93, 59, 239, 195, 11, 53, 255, 174, 252, 141, 149, 204, 121, 60, 45, 137, 85, 231, 87, 94, 5, 143, 161, 184, 166, 79, 40, 228, 151, 47, 114, 89, 65, 36, 30, 204, 48, 137, 130, 113, 165, 51, 178, 47, 13, 91, 223, 128, 207, 29, 52, 201, 163, 28, 194, 157, 82, 168, 183, 102, 186, 246, 49, 226, 228, 62, 107, 110, 36, 28, 26, 10, 226, 115, 74, 64, 199, 246, 17, 41, 223, 67, 141, 82, 38, 224, 182, 237, 12, 243, 127, 201, 200, 219, 160, 246, 133}, +{164, 70, 156, 81, 12, 247, 77, 220, 58, 237, 221, 253, 62, 31, 159, 131, 121, 89, 246, 165, 167, 149, 192, 221, 168, 72, 74, 117, 154, 25, 176, 74, 152, 36, 191, 161, 219, 157, 201, 153, 178, 156, 128, 206, 226, 252, 214, 233, 106, 55, 59, 111, 221, 159, 107, 187, 44, 155, 29, 180, 44, 185, 251, 182, 208, 228, 129, 69, 105, 110, 144, 41, 251, 92, 247, 185, 166, 191, 45, 87, 98, 196, 105, 199, 121, 37, 243, 50, 205, 86, 1, 146, 39, 195, 38, 203, 103, 36, 225, 250, 101, 70, 107, 198, 254, 47, 224, 239, 172, 157, 247, 190, 144, 100, 33, 112, 67, 187, 143, 119, 93, 12, 62, 122, 144, 52, 26, 20}, +{85, 22, 244, 254, 1, 68, 218, 46, 120, 198, 216, 73, 131, 72, 76, 146, 73, 79, 92, 195, 26, 87, 112, 148, 237, 200, 161, 206, 189, 139, 98, 98, 90, 41, 81, 199, 118, 88, 160, 179, 228, 243, 248, 99, 226, 93, 157, 52, 223, 156, 207, 81, 163, 46, 64, 181, 60, 48, 229, 48, 209, 112, 163, 63, 162, 101, 182, 55, 250, 246, 91, 103, 167, 141, 49, 120, 69, 209, 108, 30, 17, 122, 31, 40, 43, 41, 67, 50, 222, 78, 116, 219, 50, 251, 43, 1, 241, 111, 103, 121, 96, 205, 219, 189, 180, 244, 238, 15, 237, 228, 107, 210, 192, 142, 108, 124, 142, 21, 105, 85, 15, 225, 40, 152, 140, 65, 45, 253}, +{44, 144, 206, 74, 190, 194, 56, 45, 208, 59, 159, 146, 33, 63, 28, 111, 245, 204, 109, 241, 131, 18, 169, 103, 148, 157, 171, 183, 178, 251, 149, 205, 35, 197, 75, 244, 23, 71, 183, 134, 195, 99, 75, 39, 14, 155, 83, 214, 119, 64, 87, 213, 233, 148, 13, 198, 206, 106, 168, 92, 53, 120, 69, 188, 229, 115, 23, 231, 201, 195, 92, 155, 66, 83, 79, 197, 111, 104, 120, 220, 84, 118, 81, 184, 244, 169, 232, 238, 191, 38, 121, 215, 11, 211, 171, 212, 7, 92, 46, 175, 177, 113, 143, 100, 9, 230, 63, 30, 166, 182, 31, 165, 138, 195, 123, 26, 7, 20, 16, 27, 15, 136, 176, 156, 38, 191, 135, 109}, +{147, 78, 73, 6, 16, 0, 28, 115, 122, 94, 50, 13, 151, 23, 177, 77, 226, 134, 161, 217, 132, 161, 23, 114, 120, 73, 241, 78, 120, 8, 247, 242, 72, 40, 243, 90, 71, 74, 55, 197, 49, 86, 165, 133, 184, 41, 30, 216, 74, 56, 46, 136, 116, 234, 49, 237, 212, 219, 138, 77, 33, 11, 233, 220, 244, 127, 153, 134, 165, 127, 44, 88, 254, 18, 52, 5, 74, 17, 180, 40, 161, 82, 64, 73, 25, 115, 36, 29, 175, 181, 69, 56, 239, 196, 79, 51, 105, 91, 145, 45, 68, 254, 205, 176, 42, 212, 210, 219, 21, 22, 29, 77, 216, 61, 251, 171, 226, 161, 127, 103, 242, 241, 117, 220, 173, 234, 145}, +{80, 236, 244, 126, 76, 145, 195, 175, 50, 139, 105, 110, 47, 25, 164, 251, 187, 216, 27, 71, 127, 150, 100, 77, 143, 252, 132, 35, 134, 20, 213, 112, 233, 93, 224, 83, 192, 2, 99, 24, 120, 216, 98, 175, 140, 202, 18, 125, 107, 252, 17, 128, 237, 214, 9, 124, 18, 3, 160, 37, 221, 94, 227, 230, 179, 19, 37, 80, 192, 190, 173, 134, 10, 60, 110, 66, 60, 219, 173, 57, 67, 181, 0, 93, 156, 149, 38, 243, 30, 223, 181, 79, 38, 17, 225, 62, 196, 100, 44, 162, 48, 106, 36, 103, 116, 96, 75, 243, 124, 9, 11, 179, 41, 237, 102, 91, 146, 150, 1, 192, 122, 48, 7, 18, 135, 162, 27, 58}, +{180, 221, 34, 213, 156, 93, 25, 182, 140, 110, 177, 219, 4, 229, 81, 165, 116, 37, 178, 134, 73, 162, 213, 70, 76, 73, 145, 185, 119, 75, 86, 34, 147, 70, 35, 74, 164, 241, 246, 238, 248, 9, 38, 17, 91, 147, 117, 202, 75, 201, 139, 83, 243, 208, 200, 133, 197, 84, 194, 139, 141, 115, 183, 187, 40, 73, 248, 112, 63, 61, 25, 4, 232, 93, 252, 8, 55, 223, 94, 87, 174, 147, 44, 174, 49, 177, 53, 173, 72, 153, 18, 219, 103, 24, 154, 186, 84, 116, 229, 7, 170, 112, 222, 145, 116, 110, 134, 201, 252, 217, 141, 75, 119, 159, 27, 201, 9, 224, 108, 174, 81, 171, 89, 30, 49, 84, 136, 247}, +{136, 197, 86, 190, 149, 48, 235, 83, 15, 22, 36, 59, 168, 175, 226, 95, 203, 146, 23, 215, 112, 142, 126, 17, 241, 205, 76, 56, 143, 77, 52, 184, 133, 245, 129, 177, 140, 34, 166, 230, 141, 92, 81, 89, 141, 100, 86, 47, 54, 166, 147, 106, 210, 214, 108, 213, 110, 190, 58, 202, 187, 45, 50, 152, 40, 110, 218, 219, 5, 193, 26, 33, 246, 217, 174, 134, 123, 92, 223, 27, 233, 11, 182, 184, 36, 192, 219, 202, 126, 61, 118, 118, 131, 130, 220, 238, 46, 5, 194, 97, 207, 68, 36, 130, 176, 223, 55, 117, 156, 125, 97, 79, 40, 219, 204, 194, 135, 176, 74, 4, 65, 35, 68, 231, 160, 144, 171, 190}, +{131, 67, 174, 50, 255, 188, 156, 8, 29, 227, 168, 177, 56, 151, 30, 204, 226, 181, 25, 47, 169, 17, 110, 72, 46, 124, 186, 116, 201, 93, 105, 177, 97, 139, 16, 95, 150, 98, 138, 26, 233, 231, 107, 247, 114, 131, 202, 56, 157, 48, 201, 70, 227, 115, 137, 43, 21, 227, 167, 13, 244, 255, 185, 74, 218, 120, 188, 36, 168, 126, 8, 228, 168, 83, 15, 105, 167, 3, 158, 207, 214, 175, 160, 97, 54, 121, 45, 246, 221, 100, 33, 166, 173, 159, 218, 150, 66, 218, 140, 113, 217, 251, 128, 194, 172, 68, 234, 107, 163, 207, 20, 34, 75, 9, 221, 32, 206, 56, 220, 52, 85, 115, 25, 153, 98, 52, 191, 128}, +{36, 156, 222, 157, 192, 208, 74, 119, 177, 181, 138, 6, 22, 197, 101, 101, 128, 15, 206, 38, 240, 254, 201, 20, 54, 162, 109, 49, 128, 247, 33, 83, 99, 161, 93, 248, 221, 30, 122, 57, 46, 48, 151, 179, 115, 83, 86, 36, 227, 65, 91, 22, 89, 163, 185, 144, 179, 100, 59, 214, 243, 9, 105, 9, 243, 241, 139, 132, 131, 10, 127, 42, 132, 10, 4, 189, 14, 14, 35, 100, 9, 210, 9, 12, 225, 96, 36, 214, 135, 200, 29, 50, 200, 211, 213, 105, 245, 184, 136, 254, 162, 11, 134, 162, 139, 91, 165, 156, 2, 7, 69, 24, 66, 62, 195, 14, 194, 196, 166, 38, 63, 219, 31, 79, 95, 249, 172, 162}, +{209, 2, 189, 71, 166, 8, 245, 46, 145, 21, 252, 124, 148, 129, 39, 247, 186, 71, 99, 153, 145, 121, 222, 6, 4, 42, 199, 189, 236, 168, 35, 22, 198, 122, 185, 202, 170, 166, 32, 142, 30, 246, 9, 162, 60, 8, 7, 47, 85, 255, 251, 56, 220, 166, 41, 171, 113, 31, 233, 60, 121, 97, 65, 56, 131, 128, 44, 121, 3, 47, 12, 215, 105, 116, 100, 104, 79, 124, 5, 51, 50, 61, 86, 169, 105, 92, 27, 169, 122, 240, 97, 26, 161, 100, 41, 191, 176, 99, 113, 188, 183, 163, 64, 123, 120, 170, 120, 103, 131, 37, 249, 145, 22, 64, 194, 228, 85, 59, 157, 213, 10, 156, 25, 189, 176, 84, 108, 1}, +{47, 124, 177, 255, 109, 1, 57, 60, 247, 247, 255, 191, 218, 246, 7, 150, 161, 168, 223, 14, 183, 163, 116, 175, 31, 47, 99, 185, 195, 77, 71, 20, 109, 69, 142, 111, 182, 13, 33, 167, 102, 35, 140, 146, 5, 247, 137, 231, 19, 228, 76, 159, 66, 204, 185, 191, 14, 97, 235, 94, 222, 205, 249, 30, 211, 213, 157, 246, 230, 31, 214, 32, 190, 199, 184, 181, 95, 36, 148, 130, 49, 125, 195, 249, 121, 53, 161, 90, 212, 72, 250, 75, 22, 253, 125, 33, 111, 9, 151, 8, 207, 70, 70, 42, 111, 101, 183, 164, 97, 68, 27, 71, 112, 45, 83, 72, 132, 103, 170, 200, 7, 233, 237, 113, 107, 31, 87, 102}, +{43, 83, 93, 134, 45, 249, 147, 13, 3, 228, 8, 79, 101, 43, 101, 221, 21, 206, 83, 105, 141, 149, 4, 214, 151, 120, 223, 254, 104, 34, 146, 5, 151, 109, 218, 122, 67, 144, 234, 89, 48, 192, 128, 132, 87, 242, 207, 228, 123, 116, 120, 39, 223, 86, 166, 59, 38, 46, 185, 108, 101, 37, 216, 159, 198, 163, 155, 27, 155, 135, 242, 23, 19, 114, 155, 100, 229, 106, 227, 151, 216, 48, 27, 236, 143, 130, 61, 212, 199, 157, 123, 4, 12, 204, 128, 198, 168, 155, 179, 184, 245, 63, 116, 1, 89, 186, 96, 18, 48, 114, 103, 55, 17, 172, 177, 224, 110, 218, 129, 136, 83, 240, 124, 72, 223, 62, 168, 196}, +{96, 155, 159, 189, 153, 51, 235, 44, 249, 197, 127, 205, 88, 11, 57, 45, 249, 165, 93, 93, 79, 28, 246, 95, 91, 30, 175, 160, 200, 250, 99, 225, 187, 86, 36, 123, 219, 104, 127, 111, 255, 143, 248, 168, 125, 233, 175, 159, 103, 11, 15, 74, 197, 149, 13, 90, 37, 87, 190, 206, 31, 219, 49, 16, 71, 47, 8, 23, 204, 84, 137, 179, 226, 31, 152, 82, 224, 34, 108, 178, 43, 219, 133, 174, 213, 119, 14, 54, 46, 241, 73, 144, 58, 65, 250, 231, 252, 243, 104, 36, 122, 91, 56, 39, 10, 40, 177, 231, 179, 248, 208, 96, 56, 248, 51, 218, 175, 255, 86, 100, 30, 181, 78, 163, 192, 188, 140, 21}, +{104, 124, 201, 248, 93, 145, 141, 33, 234, 26, 169, 125, 162, 222, 199, 161, 30, 117, 107, 107, 220, 141, 40, 161, 91, 199, 224, 230, 9, 242, 74, 144, 217, 14, 10, 245, 172, 151, 41, 205, 207, 0, 179, 94, 31, 39, 172, 79, 122, 197, 89, 96, 61, 218, 168, 86, 9, 153, 53, 147, 78, 172, 132, 136, 169, 78, 21, 186, 76, 31, 86, 108, 232, 53, 255, 22, 7, 58, 166, 190, 0, 14, 84, 24, 170, 40, 177, 156, 26, 147, 229, 4, 141, 39, 129, 229, 78, 250, 134, 90, 175, 213, 144, 167, 250, 15, 201, 70, 217, 100, 176, 53, 255, 32, 139, 233, 242, 8, 223, 73, 10, 103, 112, 207, 115, 255, 154, 15}, +{25, 80, 165, 71, 208, 26, 227, 225, 150, 3, 143, 107, 249, 82, 40, 60, 12, 39, 104, 251, 2, 167, 5, 193, 163, 71, 84, 21, 2, 153, 72, 212, 207, 139, 45, 95, 147, 84, 90, 153, 66, 183, 6, 232, 16, 166, 69, 49, 201, 77, 225, 216, 192, 205, 63, 235, 22, 175, 154, 166, 237, 0, 195, 252, 47, 178, 116, 229, 157, 62, 76, 112, 130, 168, 209, 64, 211, 3, 239, 44, 203, 36, 234, 14, 7, 141, 9, 11, 101, 82, 15, 22, 49, 232, 83, 4, 217, 11, 59, 239, 200, 137, 205, 42, 216, 130, 98, 9, 20, 95, 92, 171, 127, 128, 6, 149, 127, 44, 246, 155, 206, 234, 185, 1, 188, 57, 208, 3}, +{204, 119, 88, 8, 211, 17, 224, 207, 10, 92, 70, 216, 225, 155, 29, 115, 241, 25, 222, 197, 255, 36, 253, 250, 4, 189, 162, 215, 81, 162, 177, 38, 254, 212, 14, 161, 11, 223, 157, 80, 137, 162, 152, 158, 255, 150, 29, 173, 16, 174, 245, 165, 11, 198, 187, 67, 207, 216, 102, 227, 236, 131, 187, 28, 126, 65, 189, 107, 34, 107, 12, 200, 22, 155, 121, 24, 149, 19, 171, 242, 186, 149, 251, 133, 238, 34, 3, 226, 12, 85, 122, 226, 13, 54, 0, 152, 247, 123, 126, 231, 27, 40, 129, 127, 143, 49, 155, 17, 0, 25, 158, 73, 225, 191, 223, 212, 193, 56, 25, 27, 103, 6, 100, 15, 151, 82, 224, 188}, +{116, 148, 185, 197, 134, 9, 208, 177, 205, 130, 139, 147, 180, 137, 197, 148, 176, 87, 229, 57, 203, 135, 228, 130, 54, 111, 78, 1, 163, 205, 184, 34, 44, 145, 109, 47, 117, 227, 150, 202, 201, 22, 18, 164, 159, 208, 227, 48, 200, 97, 126, 8, 3, 81, 137, 53, 181, 89, 194, 189, 72, 51, 104, 38, 115, 0, 96, 97, 239, 111, 153, 196, 110, 163, 222, 70, 44, 151, 220, 163, 217, 221, 66, 204, 28, 133, 150, 12, 85, 113, 130, 69, 148, 90, 83, 153, 214, 84, 94, 181, 41, 132, 243, 94, 21, 25, 221, 5, 180, 4, 225, 250, 105, 130, 23, 25, 170, 190, 164, 39, 233, 19, 225, 124, 123, 188, 186, 211}, +{185, 20, 49, 67, 147, 211, 14, 231, 78, 224, 187, 190, 183, 28, 113, 246, 69, 247, 2, 141, 14, 66, 29, 144, 75, 81, 38, 26, 32, 164, 70, 22, 129, 113, 225, 190, 130, 23, 7, 157, 165, 86, 39, 183, 234, 41, 98, 187, 161, 185, 10, 224, 172, 87, 183, 130, 44, 224, 201, 187, 19, 67, 14, 158, 235, 130, 11, 69, 195, 204, 179, 228, 102, 142, 217, 34, 234, 2, 152, 214, 243, 66, 0, 195, 43, 184, 170, 101, 216, 150, 109, 70, 150, 201, 1, 224, 25, 9, 114, 148, 39, 38, 118, 86, 93, 137, 16, 27, 143, 100, 246, 254, 192, 14, 151, 26, 105, 37, 82, 39, 253, 123, 252, 163, 87, 62, 224, 63}, +{184, 8, 234, 73, 68, 227, 120, 164, 147, 61, 94, 142, 124, 94, 96, 138, 107, 96, 245, 92, 244, 22, 253, 186, 153, 138, 89, 4, 131, 39, 17, 13, 182, 118, 119, 53, 217, 165, 29, 187, 178, 127, 28, 217, 103, 246, 122, 110, 222, 6, 69, 101, 125, 65, 108, 127, 176, 38, 173, 239, 177, 243, 250, 135, 196, 59, 141, 123, 238, 226, 4, 188, 254, 19, 192, 7, 4, 141, 206, 253, 37, 60, 103, 192, 196, 241, 151, 170, 34, 210, 195, 235, 16, 151, 200, 254, 94, 87, 188, 8, 21, 136, 227, 46, 225, 49, 161, 165, 180, 46, 162, 116, 182, 33, 215, 54, 42, 178, 150, 222, 191, 117, 130, 150, 241, 126, 112, 115}, +{84, 137, 93, 112, 96, 234, 35, 252, 204, 185, 41, 120, 67, 175, 193, 178, 38, 215, 17, 100, 90, 102, 50, 214, 114, 85, 85, 148, 144, 71, 127, 194, 253, 141, 55, 142, 18, 17, 48, 74, 214, 160, 75, 14, 252, 129, 103, 168, 15, 110, 253, 40, 110, 82, 74, 41, 104, 120, 187, 45, 129, 71, 123, 216, 79, 196, 16, 75, 199, 245, 140, 179, 153, 168, 100, 186, 48, 16, 69, 50, 214, 19, 150, 100, 56, 52, 52, 247, 116, 196, 115, 181, 214, 62, 152, 17, 11, 29, 92, 86, 46, 4, 139, 252, 13, 197, 188, 231, 112, 253, 163, 121, 105, 145, 91, 2, 113, 249, 106, 208, 66, 23, 171, 200, 146, 126, 137, 249}, +{87, 26, 59, 103, 226, 29, 189, 26, 157, 143, 75, 230, 253, 61, 47, 230, 213, 122, 96, 93, 202, 90, 88, 215, 218, 102, 51, 94, 42, 206, 80, 174, 214, 212, 131, 117, 141, 58, 158, 146, 58, 134, 254, 146, 93, 1, 150, 26, 126, 178, 33, 17, 164, 77, 209, 148, 11, 101, 20, 226, 184, 61, 99, 103, 147, 117, 200, 210, 230, 110, 39, 12, 100, 38, 176, 248, 188, 93, 24, 211, 89, 58, 40, 169, 70, 21, 4, 201, 79, 108, 220, 173, 201, 127, 29, 71, 78, 46, 52, 14, 130, 164, 20, 130, 118, 217, 85, 110, 144, 75, 236, 244, 41, 253, 245, 147, 65, 170, 69, 110, 209, 175, 199, 154, 210, 74, 206, 68}, +{200, 45, 136, 8, 216, 111, 30, 211, 107, 197, 214, 223, 77, 138, 162, 86, 4, 41, 75, 0, 199, 196, 15, 234, 252, 190, 228, 235, 184, 236, 55, 3, 223, 117, 182, 51, 171, 75, 152, 29, 21, 254, 101, 249, 179, 44, 54, 166, 232, 85, 25, 149, 64, 230, 183, 234, 178, 56, 162, 32, 196, 112, 22, 154, 213, 172, 179, 144, 253, 21, 72, 142, 61, 253, 129, 55, 47, 178, 191, 123, 54, 208, 180, 5, 153, 206, 67, 253, 222, 29, 45, 94, 135, 15, 8, 152, 245, 171, 77, 71, 46, 163, 108, 160, 22, 157, 81, 38, 31, 157, 136, 121, 187, 22, 81, 116, 190, 181, 186, 4, 205, 115, 97, 188, 87, 184, 31, 76}, +{92, 185, 94, 77, 166, 107, 60, 19, 137, 88, 15, 234, 8, 212, 151, 227, 74, 191, 9, 143, 129, 194, 195, 102, 97, 207, 34, 26, 36, 66, 156, 138, 78, 4, 49, 98, 234, 110, 89, 14, 114, 133, 174, 234, 182, 244, 141, 250, 18, 218, 116, 130, 113, 97, 235, 97, 155, 73, 45, 169, 74, 26, 164, 179, 106, 215, 253, 186, 71, 158, 221, 188, 127, 170, 134, 238, 119, 73, 13, 232, 94, 75, 73, 224, 147, 69, 22, 158, 169, 20, 145, 170, 134, 166, 104, 247, 198, 186, 179, 133, 229, 191, 32, 157, 148, 13, 157, 211, 49, 163, 111, 228, 3, 90, 83, 12, 54, 179, 59, 93, 168, 173, 84, 37, 168, 132, 118, 18}, +{100, 70, 111, 205, 62, 27, 79, 137, 115, 125, 62, 176, 208, 208, 246, 88, 123, 62, 140, 119, 165, 120, 253, 77, 182, 143, 167, 4, 83, 108, 95, 155, 216, 229, 218, 244, 189, 252, 66, 230, 213, 177, 157, 228, 139, 93, 135, 25, 41, 183, 126, 143, 81, 179, 10, 158, 87, 75, 58, 90, 213, 25, 100, 198, 62, 103, 183, 21, 55, 244, 243, 78, 43, 162, 77, 12, 223, 225, 61, 66, 125, 154, 100, 57, 18, 200, 246, 144, 185, 252, 116, 167, 136, 193, 18, 175, 213, 214, 137, 112, 153, 60, 14, 25, 205, 69, 188, 101, 30, 218, 63, 228, 57, 87, 140, 39, 40, 173, 122, 208, 236, 191, 164, 152, 0, 41, 242, 13}, +{21, 222, 94, 105, 242, 166, 84, 11, 49, 137, 31, 95, 27, 146, 143, 18, 156, 0, 148, 74, 61, 22, 187, 99, 36, 220, 255, 14, 18, 14, 121, 251, 224, 61, 198, 39, 254, 137, 180, 250, 56, 7, 214, 190, 209, 133, 85, 23, 239, 8, 152, 136, 143, 189, 67, 26, 241, 168, 187, 178, 85, 253, 120, 53, 183, 92, 155, 0, 17, 206, 56, 197, 229, 41, 200, 187, 101, 108, 42, 199, 183, 242, 104, 231, 82, 17, 31, 68, 235, 205, 9, 40, 193, 42, 82, 126, 121, 190, 29, 126, 21, 192, 4, 206, 61, 226, 73, 143, 37, 194, 72, 61, 151, 163, 227, 64, 61, 250, 5, 130, 20, 173, 111, 144, 151, 123, 29, 121}, +{104, 197, 170, 8, 187, 194, 154, 162, 188, 50, 67, 232, 117, 54, 175, 255, 176, 252, 45, 161, 244, 36, 246, 119, 85, 79, 172, 207, 187, 99, 6, 180, 227, 159, 70, 248, 102, 42, 219, 147, 168, 22, 253, 196, 230, 195, 135, 219, 148, 228, 139, 106, 185, 36, 91, 41, 126, 238, 93, 174, 222, 150, 227, 172, 60, 214, 207, 190, 112, 115, 73, 48, 41, 117, 217, 192, 215, 228, 185, 173, 188, 81, 169, 199, 198, 77, 130, 93, 50, 136, 49, 183, 177, 11, 160, 158, 20, 91, 194, 50, 228, 53, 33, 83, 67, 36, 93, 168, 161, 27, 117, 138, 134, 18, 104, 44, 6, 134, 193, 4, 58, 219, 237, 68, 165, 218, 47, 248}, +{101, 72, 86, 195, 70, 102, 100, 177, 109, 143, 92, 188, 97, 130, 224, 241, 143, 151, 148, 110, 225, 214, 64, 107, 159, 54, 208, 8, 6, 156, 188, 234, 41, 201, 199, 222, 141, 222, 98, 4, 50, 58, 13, 146, 193, 125, 22, 166, 165, 93, 133, 142, 133, 183, 243, 32, 197, 44, 212, 29, 143, 14, 135, 187, 93, 69, 135, 56, 110, 100, 176, 4, 228, 25, 180, 238, 33, 29, 54, 226, 146, 104, 226, 207, 20, 191, 14, 9, 56, 62, 249, 131, 241, 199, 107, 17, 135, 30, 197, 155, 75, 81, 56, 95, 13, 106, 65, 66, 241, 130, 120, 74, 55, 33, 223, 176, 205, 147, 219, 236, 76, 25, 26, 37, 61, 159, 213, 9}, +{10, 2, 31, 111, 99, 21, 24, 139, 111, 66, 165, 206, 126, 167, 57, 133, 139, 237, 153, 160, 239, 194, 69, 131, 33, 60, 209, 205, 114, 90, 31, 196, 168, 55, 34, 66, 140, 159, 160, 58, 224, 60, 253, 243, 150, 225, 90, 155, 94, 232, 244, 192, 80, 109, 3, 180, 251, 29, 179, 139, 240, 141, 149, 185, 156, 254, 53, 156, 39, 185, 185, 3, 214, 224, 57, 154, 98, 160, 47, 247, 3, 73, 141, 156, 29, 27, 117, 124, 56, 240, 117, 203, 216, 35, 93, 94, 78, 226, 143, 176, 195, 169, 154, 137, 96, 168, 32, 250, 109, 142, 50, 66, 192, 174, 79, 74, 152, 76, 201, 9, 208, 208, 176, 250, 39, 214, 236, 103}, +{136, 19, 84, 22, 94, 99, 9, 6, 70, 1, 202, 253, 144, 154, 233, 36, 246, 81, 158, 53, 184, 223, 139, 255, 180, 35, 98, 104, 110, 63, 170, 101, 90, 228, 70, 145, 145, 229, 179, 33, 71, 171, 132, 28, 219, 28, 94, 74, 197, 182, 63, 116, 48, 215, 95, 121, 170, 110, 27, 119, 118, 179, 18, 81, 10, 230, 55, 206, 83, 201, 76, 159, 177, 116, 255, 16, 254, 173, 67, 117, 41, 154, 107, 17, 26, 227, 11, 48, 41, 59, 226, 189, 202, 196, 12, 34, 202, 175, 189, 52, 194, 199, 126, 28, 176, 40, 175, 179, 96, 102, 238, 229, 117, 54, 35, 94, 121, 153, 53, 144, 95, 31, 99, 133, 242, 6, 208, 156}, +{67, 26, 36, 208, 22, 199, 70, 159, 213, 195, 255, 216, 147, 158, 122, 26, 228, 211, 239, 49, 67, 88, 124, 40, 121, 86, 145, 193, 224, 146, 63, 23, 8, 157, 167, 31, 177, 219, 150, 22, 215, 149, 115, 211, 89, 194, 225, 68, 136, 102, 28, 127, 79, 179, 153, 147, 91, 209, 175, 178, 163, 119, 23, 76, 223, 160, 164, 84, 24, 63, 170, 219, 144, 163, 213, 200, 83, 146, 47, 183, 50, 208, 67, 194, 104, 32, 134, 250, 44, 242, 162, 87, 60, 139, 68, 54, 11, 115, 228, 241, 227, 127, 253, 244, 16, 75, 248, 235, 166, 78, 5, 227, 51, 60, 194, 46, 130, 24, 22, 204, 220, 5, 165, 194, 181, 154, 172, 86}, +{189, 56, 81, 255, 22, 207, 165, 245, 207, 188, 140, 78, 35, 69, 85, 64, 183, 222, 161, 219, 118, 10, 247, 221, 69, 16, 218, 194, 145, 49, 41, 27, 92, 81, 132, 109, 147, 42, 8, 241, 237, 180, 98, 212, 220, 162, 37, 14, 169, 25, 21, 175, 45, 219, 12, 3, 186, 0, 201, 36, 159, 113, 238, 235, 84, 69, 71, 78, 87, 103, 159, 165, 181, 247, 91, 179, 243, 8, 90, 52, 89, 58, 106, 9, 74, 96, 124, 96, 37, 227, 118, 79, 117, 15, 7, 32, 104, 119, 174, 15, 85, 29, 38, 121, 215, 182, 165, 81, 148, 180, 218, 109, 18, 9, 39, 25, 58, 178, 163, 192, 161, 111, 165, 1, 216, 30, 140, 72}, +{134, 30, 90, 171, 133, 114, 34, 244, 241, 250, 170, 98, 223, 24, 204, 151, 143, 248, 66, 41, 155, 249, 251, 66, 217, 202, 163, 238, 209, 208, 134, 40, 10, 58, 44, 250, 42, 137, 146, 75, 252, 197, 251, 156, 102, 11, 236, 239, 133, 89, 224, 199, 239, 185, 241, 188, 135, 106, 47, 246, 116, 238, 73, 180, 71, 42, 53, 236, 175, 153, 26, 140, 172, 94, 235, 143, 107, 19, 130, 182, 27, 173, 95, 210, 185, 231, 172, 22, 16, 36, 196, 185, 40, 114, 239, 166, 95, 148, 36, 207, 225, 134, 6, 137, 111, 17, 62, 77, 176, 124, 64, 87, 70, 172, 179, 177, 187, 84, 180, 100, 96, 142, 59, 206, 149, 138, 104, 185}, +{63, 12, 29, 144, 90, 46, 37, 93, 95, 113, 129, 134, 29, 77, 177, 25, 231, 91, 153, 214, 102, 219, 72, 75, 122, 227, 104, 207, 193, 21, 101, 251, 108, 216, 128, 195, 248, 180, 14, 229, 147, 164, 179, 29, 66, 116, 115, 164, 180, 33, 108, 184, 214, 70, 225, 106, 62, 64, 113, 172, 203, 142, 40, 129, 117, 122, 249, 242, 118, 102, 206, 246, 102, 160, 132, 193, 93, 170, 176, 110, 154, 206, 154, 153, 110, 68, 202, 212, 142, 163, 145, 120, 197, 72, 183, 100, 155, 181, 202, 50, 41, 126, 46, 249, 32, 188, 220, 197, 12, 146, 47, 243, 149, 146, 59, 81, 219, 219, 0, 122, 125, 73, 118, 223, 126, 148, 168, 158}, +{96, 129, 5, 151, 208, 116, 108, 48, 49, 66, 188, 22, 64, 244, 114, 98, 198, 144, 204, 228, 61, 232, 225, 18, 67, 103, 187, 248, 101, 70, 173, 172, 92, 200, 56, 57, 223, 52, 61, 210, 202, 163, 204, 46, 10, 236, 219, 77, 183, 225, 127, 4, 24, 157, 102, 187, 172, 48, 3, 143, 68, 75, 108, 43, 238, 27, 121, 130, 89, 178, 44, 207, 125, 61, 218, 226, 230, 13, 52, 214, 71, 106, 198, 250, 162, 99, 54, 7, 5, 145, 20, 230, 223, 21, 145, 190, 152, 46, 230, 124, 150, 18, 151, 23, 16, 28, 197, 14, 28, 198, 2, 124, 244, 29, 140, 164, 219, 142, 164, 248, 160, 7, 205, 144, 15, 214, 131, 57}, +{185, 202, 28, 194, 57, 155, 170, 139, 208, 151, 106, 198, 33, 39, 40, 109, 183, 140, 10, 168, 215, 146, 244, 143, 42, 41, 2, 211, 118, 34, 36, 81, 99, 147, 182, 132, 163, 36, 160, 120, 4, 36, 9, 58, 138, 40, 112, 189, 32, 24, 36, 123, 158, 180, 181, 246, 162, 182, 86, 20, 58, 197, 98, 66, 123, 215, 32, 72, 238, 129, 224, 185, 223, 40, 157, 187, 237, 113, 126, 62, 83, 81, 185, 164, 212, 201, 203, 10, 14, 48, 5, 203, 21, 201, 24, 82, 38, 77, 50, 192, 176, 183, 174, 42, 103, 67, 191, 199, 182, 109, 150, 175, 209, 34, 149, 204, 220, 49, 164, 221, 110, 22, 238, 164, 255, 190, 193, 52}, +{126, 119, 22, 18, 68, 163, 178, 211, 238, 244, 191, 226, 8, 226, 53, 136, 249, 102, 141, 53, 0, 104, 101, 43, 153, 160, 198, 119, 74, 75, 69, 230, 187, 63, 177, 209, 114, 209, 192, 223, 161, 252, 10, 154, 198, 169, 104, 86, 59, 183, 252, 77, 143, 102, 209, 90, 161, 18, 104, 42, 252, 212, 72, 47, 82, 217, 199, 51, 137, 244, 61, 118, 187, 103, 255, 206, 51, 142, 11, 240, 135, 213, 188, 7, 19, 249, 31, 219, 233, 149, 4, 118, 212, 218, 197, 55, 128, 8, 158, 73, 94, 43, 211, 133, 230, 233, 52, 124, 46, 98, 226, 123, 71, 5, 71, 158, 148, 43, 42, 20, 86, 98, 174, 234, 83, 118, 185, 157}, +{172, 196, 55, 135, 6, 171, 155, 74, 88, 96, 187, 149, 90, 96, 107, 156, 245, 0, 34, 223, 80, 200, 204, 160, 236, 113, 208, 169, 195, 180, 11, 96, 75, 145, 116, 99, 60, 110, 49, 140, 253, 157, 16, 252, 23, 92, 90, 77, 64, 127, 180, 214, 128, 1, 223, 157, 74, 95, 3, 64, 174, 248, 203, 153, 128, 97, 34, 19, 78, 139, 78, 236, 226, 130, 3, 82, 235, 42, 80, 14, 183, 229, 138, 116, 8, 160, 122, 193, 122, 116, 125, 17, 7, 220, 203, 16, 27, 95, 11, 135, 180, 205, 12, 154, 164, 186, 234, 183, 78, 64, 255, 133, 193, 99, 123, 249, 126, 220, 101, 99, 82, 109, 70, 40, 250, 230, 51, 50}, +{193, 225, 172, 15, 134, 54, 224, 179, 81, 254, 102, 196, 147, 197, 160, 96, 209, 45, 54, 216, 152, 1, 177, 112, 93, 4, 29, 199, 91, 186, 184, 121, 97, 188, 112, 26, 96, 111, 54, 82, 98, 221, 52, 77, 225, 12, 97, 173, 247, 136, 51, 21, 144, 20, 214, 207, 71, 72, 90, 75, 118, 177, 75, 40, 122, 155, 122, 11, 162, 118, 193, 12, 97, 139, 238, 242, 175, 102, 199, 243, 97, 235, 35, 176, 50, 55, 41, 104, 12, 96, 190, 169, 158, 202, 47, 163, 186, 23, 101, 66, 81, 189, 110, 175, 104, 247, 177, 71, 8, 84, 13, 17, 236, 89, 158, 129, 79, 47, 187, 2, 108, 52, 186, 7, 34, 182, 116, 56}, +{60, 73, 166, 208, 177, 62, 180, 45, 51, 250, 144, 159, 76, 72, 124, 51, 127, 72, 201, 114, 162, 71, 213, 132, 1, 143, 112, 140, 174, 119, 83, 75, 112, 235, 81, 167, 184, 203, 156, 169, 182, 197, 215, 51, 85, 203, 32, 226, 115, 110, 12, 8, 110, 232, 79, 250, 182, 107, 251, 162, 118, 142, 134, 106, 27, 222, 116, 223, 70, 114, 60, 200, 134, 73, 167, 137, 230, 215, 16, 74, 242, 134, 44, 182, 43, 202, 46, 93, 122, 88, 195, 43, 5, 210, 216, 233, 29, 162, 115, 131, 29, 181, 63, 201, 52, 70, 219, 85, 188, 70, 60, 239, 88, 11, 3, 201, 123, 217, 207, 243, 224, 113, 65, 78, 190, 246, 120, 32}, +{205, 137, 35, 46, 243, 63, 150, 241, 248, 135, 228, 94, 208, 75, 23, 219, 164, 100, 168, 147, 49, 80, 183, 29, 107, 174, 150, 199, 87, 100, 104, 122, 233, 177, 162, 249, 86, 71, 156, 126, 233, 30, 62, 54, 141, 16, 107, 75, 157, 98, 149, 237, 121, 222, 116, 49, 122, 111, 244, 146, 208, 17, 90, 81, 119, 254, 46, 210, 161, 32, 226, 163, 172, 211, 92, 23, 209, 136, 80, 188, 169, 61, 43, 162, 244, 141, 12, 34, 108, 31, 178, 76, 253, 182, 65, 127, 190, 14, 13, 203, 88, 173, 152, 190, 39, 201, 41, 88, 45, 194, 227, 52, 141, 212, 6, 99, 16, 166, 12, 114, 227, 137, 70, 186, 151, 102, 136, 224}, +{55, 25, 220, 4, 4, 96, 126, 51, 147, 213, 149, 250, 90, 6, 85, 89, 239, 101, 23, 44, 199, 178, 208, 35, 223, 251, 118, 165, 122, 106, 106, 153, 75, 204, 33, 205, 176, 33, 12, 154, 254, 76, 223, 127, 66, 32, 216, 201, 157, 129, 37, 21, 60, 145, 119, 40, 94, 227, 248, 233, 8, 51, 85, 61, 241, 63, 222, 56, 180, 167, 16, 22, 244, 23, 140, 205, 58, 93, 159, 89, 100, 226, 213, 99, 49, 128, 70, 212, 202, 215, 128, 177, 207, 71, 202, 96, 249, 37, 245, 70, 189, 192, 184, 242, 254, 2, 107, 29, 129, 80, 100, 77, 16, 170, 150, 201, 89, 86, 149, 182, 16, 76, 143, 4, 171, 108, 9, 21}, +{163, 67, 96, 217, 245, 177, 248, 117, 56, 77, 131, 189, 125, 203, 166, 102, 231, 142, 82, 101, 4, 0, 231, 12, 187, 116, 1, 131, 170, 103, 171, 110, 199, 145, 184, 151, 47, 21, 146, 38, 53, 238, 227, 180, 77, 37, 11, 235, 135, 233, 132, 71, 244, 3, 155, 252, 38, 209, 112, 79, 90, 166, 215, 77, 219, 70, 22, 34, 194, 152, 94, 252, 244, 28, 245, 27, 233, 116, 242, 39, 9, 66, 203, 160, 182, 164, 128, 174, 226, 235, 252, 209, 136, 133, 17, 126, 44, 100, 35, 20, 182, 89, 102, 160, 143, 116, 89, 192, 50, 237, 139, 90, 211, 67, 197, 129, 232, 116, 165, 177, 140, 230, 5, 250, 34, 245, 249, 240}, +{42, 172, 129, 43, 194, 215, 212, 241, 158, 58, 191, 141, 112, 133, 232, 171, 162, 175, 219, 239, 42, 207, 191, 42, 48, 75, 123, 157, 11, 18, 44, 115, 177, 241, 218, 194, 242, 117, 2, 202, 119, 191, 103, 192, 27, 159, 111, 15, 164, 118, 195, 159, 250, 120, 31, 18, 160, 208, 27, 53, 212, 28, 124, 171, 31, 92, 254, 253, 46, 71, 26, 50, 70, 113, 229, 219, 223, 71, 125, 155, 118, 102, 11, 232, 99, 159, 123, 150, 161, 179, 136, 132, 247, 252, 25, 163, 218, 215, 117, 41, 193, 104, 146, 59, 62, 38, 162, 75, 180, 245, 89, 79, 202, 96, 116, 2, 82, 220, 230, 8, 210, 172, 101, 10, 191, 200, 30, 99}, +{40, 2, 121, 214, 149, 55, 245, 2, 149, 179, 97, 43, 161, 101, 66, 86, 131, 69, 57, 42, 204, 114, 58, 200, 186, 68, 17, 219, 101, 243, 221, 144, 146, 163, 252, 59, 173, 47, 71, 114, 150, 167, 32, 115, 213, 86, 234, 19, 53, 138, 68, 192, 150, 78, 191, 165, 110, 160, 231, 165, 91, 19, 96, 25, 41, 199, 249, 19, 108, 37, 250, 131, 72, 71, 202, 161, 61, 223, 69, 89, 227, 145, 26, 108, 115, 88, 236, 153, 121, 98, 144, 73, 137, 170, 10, 11, 30, 97, 124, 109, 188, 117, 175, 9, 167, 207, 15, 146, 117, 177, 156, 107, 166, 184, 215, 22, 113, 18, 161, 114, 97, 64, 96, 76, 223, 236, 180, 145}, +{204, 178, 122, 7, 60, 38, 175, 105, 249, 7, 236, 119, 199, 203, 146, 38, 254, 114, 110, 160, 199, 81, 133, 97, 134, 23, 9, 150, 238, 154, 113, 248, 136, 194, 206, 41, 63, 159, 108, 2, 195, 203, 180, 253, 151, 172, 215, 193, 174, 194, 34, 211, 66, 153, 9, 94, 232, 107, 212, 180, 27, 126, 202, 58, 126, 124, 178, 195, 34, 205, 89, 130, 96, 194, 245, 25, 113, 188, 195, 1, 159, 46, 51, 132, 233, 96, 1, 170, 163, 186, 191, 15, 116, 122, 139, 5, 131, 228, 6, 219, 242, 180, 198, 58, 176, 131, 48, 149, 185, 69, 176, 47, 90, 249, 235, 214, 54, 143, 123, 150, 70, 228, 233, 158, 105, 52, 11, 185}, +{205, 44, 249, 137, 171, 48, 181, 30, 5, 61, 54, 202, 215, 77, 178, 43, 151, 77, 118, 249, 71, 255, 180, 39, 190, 138, 27, 163, 244, 153, 66, 164, 231, 111, 23, 211, 133, 41, 89, 122, 216, 26, 156, 190, 253, 10, 251, 109, 8, 39, 105, 29, 3, 153, 32, 70, 232, 8, 204, 84, 98, 71, 33, 97, 42, 53, 21, 107, 79, 48, 156, 66, 71, 231, 12, 46, 110, 171, 20, 38, 86, 52, 253, 51, 92, 242, 24, 122, 81, 97, 8, 182, 82, 184, 249, 237, 196, 60, 104, 78, 188, 148, 147, 179, 148, 176, 101, 231, 57, 15, 15, 206, 99, 250, 81, 245, 189, 42, 148, 215, 95, 219, 82, 70, 75, 59, 181, 1}, +{33, 151, 93, 221, 76, 188, 145, 113, 221, 53, 178, 206, 249, 159, 26, 124, 26, 122, 39, 116, 179, 77, 42, 90, 101, 75, 13, 48, 113, 235, 120, 127, 241, 38, 68, 112, 71, 34, 141, 227, 165, 47, 95, 139, 223, 146, 46, 95, 239, 181, 234, 58, 124, 15, 114, 56, 145, 204, 68, 133, 186, 41, 230, 122, 7, 47, 173, 251, 122, 55, 95, 196, 186, 109, 149, 94, 57, 112, 8, 47, 35, 186, 220, 66, 148, 58, 220, 50, 63, 164, 72, 174, 130, 88, 78, 95, 210, 226, 151, 85, 179, 108, 145, 185, 192, 46, 176, 50, 74, 183, 73, 82, 212, 131, 55, 82, 152, 68, 166, 167, 92, 83, 17, 231, 5, 38, 63, 122}, +{161, 65, 243, 161, 134, 106, 11, 169, 144, 23, 210, 197, 234, 97, 30, 218, 93, 73, 187, 124, 169, 154, 95, 107, 162, 95, 123, 204, 210, 207, 116, 38, 18, 167, 170, 202, 28, 64, 54, 236, 185, 94, 248, 254, 61, 136, 229, 51, 248, 188, 250, 233, 98, 145, 182, 128, 145, 65, 100, 26, 219, 233, 114, 141, 172, 8, 10, 121, 105, 113, 9, 62, 123, 31, 222, 43, 7, 7, 6, 91, 153, 215, 227, 219, 189, 47, 56, 161, 150, 109, 210, 129, 92, 27, 39, 86, 218, 233, 82, 33, 87, 214, 157, 78, 131, 197, 35, 97, 96, 196, 219, 209, 119, 47, 224, 254, 193, 192, 199, 121, 19, 26, 177, 233, 77, 115, 106, 114}, +{125, 169, 244, 138, 183, 217, 102, 33, 113, 96, 163, 0, 77, 111, 202, 49, 253, 133, 179, 57, 41, 150, 133, 6, 182, 206, 133, 121, 254, 96, 155, 15, 232, 109, 22, 248, 143, 233, 220, 72, 254, 44, 56, 127, 1, 114, 105, 114, 19, 85, 250, 1, 207, 216, 231, 166, 95, 2, 65, 240, 43, 178, 176, 246, 144, 101, 135, 165, 86, 202, 140, 107, 103, 239, 12, 26, 145, 3, 39, 177, 243, 8, 54, 16, 27, 201, 195, 234, 190, 247, 163, 130, 26, 112, 1, 83, 255, 114, 70, 112, 75, 92, 249, 250, 236, 89, 199, 153, 47, 19, 214, 242, 210, 60, 221, 102, 147, 184, 203, 160, 0, 187, 134, 114, 187, 151, 48, 137}, +{138, 125, 20, 27, 38, 85, 135, 148, 156, 229, 116, 105, 24, 179, 122, 217, 187, 253, 220, 36, 209, 210, 192, 44, 121, 142, 38, 205, 106, 206, 153, 206, 32, 136, 92, 174, 137, 44, 140, 212, 220, 246, 251, 210, 65, 137, 119, 22, 20, 164, 58, 82, 222, 111, 167, 37, 83, 38, 14, 81, 201, 197, 234, 72, 45, 185, 238, 12, 204, 110, 232, 39, 175, 10, 100, 123, 209, 71, 2, 234, 79, 85, 33, 59, 8, 88, 38, 37, 112, 95, 61, 10, 163, 201, 100, 156, 43, 121, 153, 233, 125, 126, 121, 237, 222, 157, 17, 233, 15, 120, 99, 20, 143, 104, 112, 50, 198, 21, 107, 167, 41, 189, 76, 87, 168, 50, 118, 229}, +{204, 47, 172, 244, 194, 44, 228, 47, 209, 217, 115, 242, 44, 128, 125, 3, 225, 131, 26, 173, 220, 122, 103, 4, 176, 70, 70, 76, 1, 71, 191, 103, 182, 133, 5, 57, 0, 105, 177, 28, 59, 4, 221, 5, 20, 247, 146, 167, 30, 67, 220, 148, 91, 194, 203, 167, 110, 63, 161, 179, 57, 139, 83, 71, 193, 13, 6, 197, 81, 134, 52, 205, 164, 126, 182, 194, 171, 209, 21, 188, 72, 15, 161, 182, 160, 6, 21, 169, 60, 71, 171, 228, 221, 184, 11, 146, 198, 165, 252, 103, 116, 23, 3, 55, 24, 212, 190, 231, 127, 121, 116, 41, 181, 34, 40, 247, 37, 244, 232, 220, 188, 118, 76, 233, 12, 155, 217, 200}, +{97, 202, 75, 1, 46, 74, 252, 186, 224, 52, 84, 14, 93, 140, 115, 194, 236, 183, 88, 141, 171, 47, 141, 8, 63, 150, 216, 149, 97, 11, 155, 56, 236, 147, 108, 49, 141, 38, 205, 5, 243, 176, 68, 91, 16, 201, 54, 153, 196, 224, 232, 150, 57, 51, 200, 137, 102, 108, 14, 158, 105, 101, 31, 39, 92, 77, 164, 0, 41, 36, 135, 171, 211, 198, 155, 56, 244, 25, 44, 69, 238, 213, 178, 149, 43, 107, 186, 72, 128, 249, 105, 13, 132, 92, 235, 248, 254, 167, 120, 38, 74, 249, 147, 228, 13, 189, 254, 49, 218, 55, 163, 145, 87, 170, 168, 102, 104, 153, 35, 118, 123, 119, 164, 114, 223, 29, 22}, +{72, 235, 15, 52, 21, 127, 44, 41, 178, 135, 145, 205, 94, 152, 10, 140, 215, 96, 215, 76, 212, 113, 15, 114, 223, 73, 51, 156, 129, 154, 148, 142, 169, 213, 161, 78, 211, 66, 20, 106, 171, 110, 209, 192, 177, 14, 84, 229, 227, 133, 168, 185, 255, 117, 177, 178, 105, 57, 115, 200, 108, 11, 229, 81, 144, 207, 89, 28, 75, 16, 121, 247, 200, 237, 166, 20, 240, 164, 216, 2, 200, 107, 107, 160, 248, 234, 132, 89, 246, 210, 85, 245, 24, 93, 157, 68, 238, 34, 243, 0, 208, 174, 63, 164, 236, 28, 236, 69, 61, 50, 23, 222, 156, 180, 227, 92, 1, 155, 7, 41, 207, 50, 185, 10, 117, 246, 108, 132}, +// NOTE(bleichen): The following vector got corrupted. I can't find the correct value anymore. +// {103, 156, 216, 104, 151, 83, 86, 103, 1042, 66, 145, 142, 248, 231, 5, 52, 89, 194, 63, 221, 123, 245, 54, 92, 147, 11, 25, 28, 221, 63, 111, 100, 22, 217, 191, 184, 75, 78, 253, 54, 45, 135, 176, 109, 192, 158, 154, 147, 132, 249, 180, 30, 151, 252, 242, 209, 131, 16, 59, 222, 50, 161, 196, 30, 218, 149, 126, 23, 4, 89, 235, 190, 90, 201, 178, 138, 130, 237, 136, 48, 90, 145, 154, 20, 235, 63, 100, 185, 173, 224, 173, 196, 88, 137, 181, 35, 130, 197, 224, 36, 20, 145, 178, 223, 219, 57, 4, 147, 74, 85, 126, 239, 191, 28, 12, 36, 152, 127, 23, 15, 238, 182, 243, 223, 141, 199, 130}, +{159, 64, 108, 77, 50, 40, 179, 156, 169, 50, 101, 236, 149, 225, 137, 18, 133, 236, 48, 237, 105, 50, 104, 210, 228, 192, 26, 85, 159, 181, 66, 49, 135, 55, 161, 173, 120, 143, 221, 254, 8, 68, 89, 254, 64, 50, 165, 204, 94, 122, 19, 170, 211, 108, 26, 115, 28, 179, 135, 34, 192, 86, 186, 22, 122, 98, 244, 255, 100, 27, 116, 139, 10, 170, 93, 124, 6, 97, 147, 160, 91, 6, 179, 168, 131, 35, 201, 87, 174, 218, 190, 245, 49, 229, 45, 4, 42, 129, 171, 15, 134, 205, 57, 205, 189, 136, 90, 234, 214, 92, 220, 88, 135, 102, 154, 29, 243, 212, 89, 62, 198, 205, 195, 189, 36, 61, 151, 212}, +{207, 20, 144, 103, 240, 248, 149, 233, 45, 64, 92, 144, 43, 87, 34, 91, 52, 80, 91, 47, 6, 46, 130, 241, 78, 181, 44, 95, 213, 84, 118, 211, 22, 214, 110, 92, 58, 42, 93, 39, 177, 37, 253, 28, 117, 209, 122, 36, 136, 11, 72, 177, 40, 40, 17, 230, 247, 142, 61, 38, 12, 30, 189, 225, 179, 218, 145, 116, 153, 56, 52, 156, 59, 78, 27, 127, 74, 34, 53, 14, 30, 137, 159, 40, 185, 226, 140, 66, 163, 236, 98, 101, 83, 76, 61, 106, 70, 226, 228, 94, 136, 4, 108, 2, 236, 98, 167, 72, 178, 195, 254, 69, 199, 43, 22, 30, 169, 110, 154, 82, 38, 137, 134, 192, 27, 127, 111, 159}, +{183, 163, 252, 60, 116, 85, 91, 224, 94, 40, 116, 224, 61, 237, 29, 136, 202, 49, 154, 22, 99, 15, 112, 171, 24, 143, 158, 148, 124, 200, 239, 208, 224, 89, 69, 227, 154, 166, 26, 250, 106, 151, 87, 82, 142, 244, 33, 184, 80, 26, 57, 184, 145, 254, 49, 93, 129, 140, 80, 42, 48, 121, 228, 70, 175, 142, 125, 140, 198, 120, 177, 214, 236, 191, 95, 251, 203, 192, 145, 100, 149, 254, 194, 243, 38, 76, 195, 214, 160, 50, 93, 213, 140, 185, 139, 43, 96, 122, 226, 24, 159, 98, 51, 226, 57, 109, 249, 68, 194, 104, 5, 220, 31, 107, 114, 168, 82, 76, 8, 204, 225, 205, 198, 190, 82, 210, 229, 10}, +{21, 237, 218, 104, 158, 31, 222, 219, 252, 216, 12, 211, 166, 162, 7, 249, 34, 195, 50, 14, 41, 125, 38, 58, 19, 85, 247, 132, 42, 94, 93, 95, 162, 148, 105, 119, 156, 243, 230, 92, 67, 79, 177, 66, 247, 131, 132, 34, 57, 142, 200, 129, 153, 21, 35, 243, 221, 94, 192, 205, 40, 173, 112, 223, 7, 161, 193, 29, 138, 63, 170, 119, 55, 201, 148, 151, 197, 193, 14, 5, 34, 178, 167, 3, 215, 203, 109, 115, 65, 230, 63, 120, 232, 67, 226, 167, 231, 111, 219, 40, 63, 138, 77, 220, 26, 9, 41, 109, 118, 68, 248, 80, 114, 5, 44, 235, 136, 144, 12, 60, 238, 243, 180, 233, 79, 235, 154, 99}, +{111, 252, 43, 45, 255, 238, 18, 76, 241, 101, 147, 99, 79, 122, 95, 238, 31, 20, 29, 130, 4, 126, 233, 126, 152, 31, 177, 208, 217, 157, 49, 36, 232, 42, 3, 38, 115, 11, 125, 72, 242, 68, 173, 189, 182, 29, 24, 249, 57, 27, 30, 175, 84, 141, 82, 206, 0, 236, 27, 219, 17, 248, 195, 254, 231, 47, 159, 208, 105, 29, 11, 36, 72, 160, 60, 142, 118, 43, 107, 85, 186, 237, 178, 136, 14, 212, 160, 189, 2, 61, 60, 119, 33, 223, 192, 116, 185, 179, 52, 10, 244, 33, 203, 134, 236, 3, 103, 130, 209, 155, 126, 11, 86, 82, 249, 192, 145, 225, 197, 28, 212, 34, 31, 151, 24, 249, 38, 87}, +{175, 250, 152, 13, 98, 148, 181, 206, 230, 49, 219, 165, 177, 245, 127, 38, 245, 39, 196, 182, 142, 14, 126, 176, 162, 206, 242, 60, 19, 7, 164, 199, 77, 255, 175, 123, 187, 147, 108, 145, 190, 47, 92, 10, 240, 90, 34, 234, 19, 128, 46, 197, 188, 12, 215, 162, 145, 236, 205, 90, 4, 81, 26, 103, 181, 130, 135, 76, 164, 149, 81, 1, 35, 50, 129, 108, 84, 128, 152, 170, 19, 58, 96, 25, 145, 51, 35, 193, 250, 203, 122, 15, 3, 168, 91, 118, 211, 82, 192, 158, 111, 192, 102, 58, 67, 35, 254, 191, 124, 81, 184, 43, 211, 93, 123, 183, 14, 20, 26, 180, 214, 162, 72, 151, 160, 94, 33, 36}, +{34, 139, 154, 99, 43, 125, 237, 188, 96, 119, 153, 79, 214, 121, 48, 50, 169, 32, 208, 36, 159, 53, 139, 18, 17, 153, 171, 157, 191, 135, 21, 127, 153, 69, 181, 72, 126, 248, 94, 163, 227, 40, 251, 17, 81, 90, 91, 98, 129, 167, 3, 201, 247, 72, 148, 132, 67, 234, 68, 204, 244, 59, 121, 24, 184, 105, 168, 214, 164, 115, 127, 200, 74, 86, 154, 220, 38, 218, 246, 228, 139, 207, 188, 250, 89, 32, 195, 180, 123, 1, 147, 4, 223, 26, 75, 224, 90, 19, 113, 105, 166, 176, 128, 65, 212, 63, 177, 251, 5, 210, 21, 199, 91, 241, 153, 203, 17, 242, 244, 191, 99, 217, 112, 201, 211, 212, 253, 44}, +{204, 197, 203, 229, 50, 226, 149, 127, 225, 66, 70, 133, 113, 127, 107, 62, 227, 63, 105, 10, 125, 72, 127, 154, 251, 130, 31, 248, 173, 130, 20, 183, 157, 115, 69, 173, 158, 92, 26, 236, 213, 231, 49, 37, 10, 205, 154, 46, 200, 76, 80, 50, 220, 182, 141, 88, 82, 144, 34, 94, 69, 48, 151, 45, 73, 55, 217, 185, 137, 209, 251, 14, 145, 214, 248, 16, 107, 107, 31, 125, 1, 36, 212, 19, 54, 214, 141, 42, 110, 39, 6, 46, 69, 36, 214, 211, 220, 233, 248, 225, 54, 12, 249, 184, 106, 21, 216, 44, 59, 254, 18, 109, 175, 98, 74, 155, 9, 23, 4, 42, 133, 197, 88, 191, 195, 150, 247, 131}, +{150, 141, 50, 100, 106, 74, 165, 222, 45, 243, 90, 186, 203, 85, 243, 28, 34, 58, 142, 126, 6, 218, 81, 179, 149, 197, 47, 28, 226, 135, 52, 246, 185, 219, 224, 62, 145, 25, 132, 134, 104, 95, 88, 179, 165, 101, 32, 10, 133, 235, 92, 137, 58, 48, 168, 244, 241, 153, 198, 73, 151, 32, 254, 10, 197, 6, 83, 68, 255, 178, 82, 204, 71, 213, 0, 236, 189, 68, 7, 167, 4, 46, 99, 36, 177, 73, 209, 249, 232, 207, 170, 255, 212, 243, 117, 97, 50, 240, 128, 146, 33, 64, 224, 209, 114, 196, 131, 193, 219, 160, 113, 35, 184, 173, 59, 55, 161, 94, 131, 199, 106, 23, 23, 221, 114, 233, 147, 186}, +{83, 254, 104, 247, 34, 134, 176, 55, 184, 99, 26, 95, 212, 99, 118, 207, 252, 148, 238, 22, 216, 148, 129, 112, 238, 167, 165, 220, 246, 206, 25, 194, 183, 25, 57, 224, 51, 92, 211, 63, 99, 232, 115, 54, 136, 166, 69, 113, 68, 60, 199, 140, 70, 71, 40, 117, 40, 51, 53, 7, 6, 151, 57, 135, 223, 161, 145, 236, 80, 139, 101, 144, 30, 136, 215, 139, 100, 28, 75, 136, 208, 85, 58, 7, 19, 136, 254, 206, 16, 116, 82, 4, 148, 213, 194, 104, 62, 159, 45, 242, 13, 56, 253, 28, 195, 16, 42, 150, 106, 147, 237, 57, 129, 43, 162, 2, 255, 134, 11, 50, 191, 17, 206, 177, 79, 103, 34, 68}, +{131, 56, 158, 206, 174, 184, 76, 123, 120, 83, 164, 250, 95, 76, 183, 194, 175, 129, 173, 211, 204, 88, 43, 216, 95, 131, 3, 40, 173, 91, 187, 30, 4, 69, 16, 233, 187, 183, 221, 17, 179, 10, 85, 86, 57, 113, 151, 67, 194, 106, 107, 14, 251, 255, 131, 178, 135, 17, 237, 246, 223, 25, 125, 42, 162, 121, 51, 249, 144, 209, 127, 220, 170, 250, 60, 160, 200, 20, 53, 191, 104, 183, 107, 179, 226, 168, 237, 6, 108, 131, 1, 1, 250, 109, 69, 144, 78, 138, 238, 200, 42, 38, 43, 198, 217, 87, 29, 93, 20, 24, 96, 67, 230, 216, 31, 189, 198, 174, 192, 193, 40, 50, 190, 171, 77, 209, 205, 135}, +{16, 229, 88, 181, 127, 42, 241, 214, 13, 220, 237, 211, 175, 233, 143, 252, 48, 133, 199, 225, 210, 159, 123, 180, 165, 37, 165, 248, 235, 49, 122, 101, 3, 29, 34, 174, 2, 173, 83, 63, 86, 147, 33, 41, 192, 192, 159, 243, 21, 229, 104, 126, 172, 179, 154, 86, 132, 229, 231, 249, 241, 221, 104, 240, 215, 236, 213, 182, 220, 134, 28, 174, 121, 220, 241, 161, 89, 146, 190, 14, 223, 198, 204, 128, 189, 188, 154, 190, 51, 96, 146, 189, 229, 180, 117, 172, 173, 169, 65, 81, 231, 12, 142, 235, 237, 223, 21, 187, 114, 6, 50, 215, 48, 168, 90, 174, 12, 66, 217, 147, 170, 225, 13, 220, 203, 85, 30, 126}, +{197, 77, 67, 189, 54, 155, 189, 211, 59, 207, 230, 104, 126, 68, 140, 83, 77, 140, 207, 186, 168, 123, 63, 241, 44, 10, 29, 233, 108, 167, 47, 178, 246, 41, 15, 131, 96, 110, 10, 124, 9, 220, 221, 159, 130, 135, 245, 53, 86, 190, 78, 135, 177, 128, 199, 212, 54, 141, 30, 18, 118, 169, 42, 236, 0, 146, 55, 58, 14, 137, 70, 165, 194, 82, 48, 248, 26, 121, 29, 180, 46, 72, 155, 181, 121, 202, 51, 151, 120, 22, 11, 247, 9, 243, 126, 65, 26, 163, 101, 109, 205, 139, 194, 58, 191, 199, 37, 49, 52, 194, 96, 240, 199, 48, 137, 189, 46, 81, 238, 15, 223, 121, 77, 48, 37, 56, 242, 103}, +{112, 15, 119, 112, 8, 235, 8, 157, 237, 68, 88, 48, 144, 70, 251, 67, 226, 131, 111, 12, 90, 157, 75, 117, 82, 139, 68, 9, 78, 27, 208, 192, 45, 250, 157, 116, 11, 13, 60, 232, 123, 180, 67, 185, 76, 120, 210, 32, 241, 197, 21, 92, 170, 175, 101, 117, 50, 225, 159, 107, 63, 242, 92, 52, 252, 240, 131, 204, 202, 26, 34, 11, 59, 97, 220, 104, 64, 191, 66, 250, 158, 175, 116, 213, 95, 115, 57, 253, 143, 197, 243, 112, 220, 42, 147, 164, 126, 55, 131, 132, 50, 231, 43, 67, 231, 63, 40, 48, 175, 57, 199, 173, 127, 32, 188, 129, 155, 105, 36, 231, 163, 183, 107, 252, 174, 100, 124, 114}, +{56, 66, 234, 129, 94, 12, 73, 31, 51, 88, 150, 247, 38, 162, 69, 5, 237, 245, 21, 226, 144, 123, 49, 80, 183, 143, 47, 18, 81, 69, 133, 3, 78, 231, 137, 89, 209, 144, 205, 165, 57, 126, 63, 166, 219, 209, 162, 88, 172, 70, 156, 229, 160, 61, 162, 43, 25, 85, 42, 80, 13, 153, 59, 22, 174, 151, 220, 22, 158, 240, 25, 110, 217, 20, 4, 183, 104, 60, 240, 185, 52, 227, 176, 73, 165, 239, 5, 133, 40, 188, 204, 5, 250, 154, 23, 131, 212, 106, 150, 229, 1, 135, 70, 177, 148, 62, 33, 168, 47, 24, 124, 12, 2, 65, 235, 47, 95, 39, 9, 181, 13, 171, 212, 38, 47, 218, 38, 234}, +{16, 156, 246, 136, 247, 42, 46, 103, 86, 217, 191, 237, 161, 110, 91, 139, 29, 89, 153, 147, 209, 207, 225, 230, 252, 235, 59, 16, 80, 80, 236, 76, 20, 212, 233, 155, 112, 148, 68, 80, 33, 127, 136, 0, 173, 25, 39, 0, 162, 48, 93, 233, 61, 33, 120, 153, 203, 85, 108, 22, 54, 160, 6, 143, 207, 201, 64, 136, 200, 54, 88, 153, 45, 45, 108, 148, 75, 213, 202, 2, 108, 180, 199, 31, 233, 219, 155, 248, 118, 118, 108, 126, 173, 53, 213, 48, 237, 181, 85, 240, 40, 119, 110, 131, 114, 229, 90, 157, 253, 38, 138, 211, 17, 147, 25, 140, 215, 26, 10, 210, 176, 217, 128, 248, 75, 241, 24, 9}, +{82, 230, 122, 93, 228, 31, 119, 246, 151, 76, 153, 97, 84, 16, 154, 40, 242, 177, 46, 44, 161, 244, 203, 218, 250, 107, 91, 219, 94, 165, 44, 65, 14, 3, 148, 233, 211, 138, 242, 197, 200, 59, 240, 191, 232, 250, 104, 130, 217, 152, 55, 226, 191, 146, 32, 59, 192, 140, 35, 16, 253, 4, 80, 169, 213, 165, 147, 11, 125, 133, 51, 167, 154, 1, 15, 55, 109, 64, 90, 155, 214, 16, 33, 136, 20, 88, 153, 93, 146, 237, 1, 234, 111, 117, 254, 22, 113, 11, 190, 221, 114, 243, 41, 219, 253, 158, 0, 131, 197, 253, 188, 22, 74, 136, 83, 129, 22, 219, 225, 204, 122, 212, 87, 86, 231, 0, 84, 102}, +{175, 251, 55, 241, 96, 176, 69, 183, 98, 21, 124, 235, 253, 129, 187, 29, 136, 42, 225, 238, 148, 55, 79, 69, 204, 46, 60, 38, 198, 254, 141, 183, 42, 67, 204, 240, 49, 187, 143, 197, 218, 167, 133, 134, 219, 116, 43, 177, 125, 247, 26, 179, 201, 39, 100, 142, 152, 223, 54, 18, 72, 39, 197, 214, 252, 96, 49, 237, 84, 206, 103, 112, 116, 2, 153, 83, 89, 239, 136, 167, 17, 229, 213, 226, 228, 156, 161, 70, 101, 178, 92, 94, 152, 180, 98, 242, 209, 4, 42, 244, 234, 18, 103, 21, 107, 63, 50, 227, 9, 99, 122, 53, 1, 16, 17, 168, 54, 136, 134, 155, 102, 211, 81, 199, 242, 252, 95, 123}, +{19, 111, 169, 183, 133, 100, 232, 225, 84, 60, 114, 196, 172, 140, 88, 79, 27, 225, 233, 243, 47, 255, 86, 246, 210, 18, 21, 200, 99, 41, 232, 226, 188, 200, 215, 243, 52, 223, 17, 5, 7, 39, 128, 241, 159, 205, 5, 249, 21, 182, 144, 191, 116, 145, 237, 235, 202, 60, 217, 235, 155, 40, 170, 11, 50, 2, 44, 149, 253, 227, 45, 77, 200, 185, 252, 54, 23, 254, 168, 110, 104, 155, 38, 125, 209, 65, 186, 37, 22, 10, 35, 227, 124, 0, 237, 22, 173, 206, 229, 32, 188, 67, 73, 170, 37, 235, 71, 174, 89, 133, 203, 62, 24, 224, 187, 218, 152, 156, 90, 85, 6, 240, 139, 128, 205, 124, 187, 126}, +{110, 44, 150, 100, 224, 195, 212, 170, 110, 231, 217, 33, 93, 29, 75, 82, 216, 151, 81, 11, 12, 226, 87, 250, 165, 181, 111, 100, 249, 52, 98, 240, 67, 144, 206, 67, 248, 171, 162, 18, 57, 80, 233, 87, 101, 71, 36, 5, 208, 50, 85, 255, 15, 25, 240, 146, 65, 63, 96, 102, 136, 210, 133, 30, 121, 247, 123, 182, 146, 155, 50, 48, 167, 117, 249, 27, 2, 208, 231, 86, 116, 61, 10, 143, 193, 108, 103, 240, 204, 97, 112, 135, 42, 107, 222, 182, 140, 205, 246, 104, 128, 53, 109, 244, 231, 183, 33, 58, 151, 91, 125, 135, 176, 76, 172, 33, 32, 76, 204, 144, 225, 97, 184, 197, 83, 228, 112, 190}, +{88, 140, 101, 8, 149, 63, 118, 189, 105, 34, 132, 156, 26, 98, 140, 51, 255, 64, 90, 236, 199, 78, 108, 213, 84, 95, 90, 254, 76, 136, 97, 179, 25, 156, 95, 249, 47, 139, 81, 51, 112, 91, 60, 27, 27, 41, 111, 16, 80, 32, 159, 174, 12, 186, 170, 118, 166, 149, 29, 154, 189, 133, 223, 139, 217, 167, 41, 38, 133, 32, 221, 195, 230, 97, 191, 75, 241, 213, 36, 36, 246, 107, 67, 195, 28, 230, 59, 89, 225, 213, 192, 226, 188, 157, 190, 239, 246, 63, 72, 8, 104, 187, 155, 202, 188, 13, 2, 99, 96, 74, 41, 48, 223, 237, 3, 138, 37, 136, 59, 44, 161, 61, 36, 138, 191, 111, 222, 65}, +{182, 247, 222, 191, 93, 175, 233, 18, 168, 44, 57, 129, 1, 213, 55, 9, 3, 228, 85, 120, 11, 151, 210, 65, 95, 212, 169, 157, 141, 107, 250, 80, 143, 248, 212, 252, 42, 224, 106, 175, 97, 252, 141, 157, 85, 70, 53, 94, 92, 85, 254, 249, 60, 57, 126, 107, 52, 166, 180, 102, 92, 165, 168, 250, 163, 133, 106, 213, 37, 159, 43, 85, 217, 79, 174, 23, 156, 77, 255, 165, 237, 186, 213, 82, 195, 21, 66, 148, 47, 85, 92, 231, 25, 116, 155, 6, 216, 153, 40, 93, 179, 220, 106, 114, 219, 229, 97, 152, 239, 161, 103, 7, 116, 138, 102, 52, 62, 78, 237, 66, 101, 96, 170, 109, 119, 193, 231, 48}, +{170, 237, 192, 133, 120, 102, 241, 113, 188, 159, 188, 189, 200, 188, 206, 143, 120, 172, 51, 27, 12, 174, 23, 108, 208, 173, 164, 5, 64, 187, 90, 61, 184, 73, 190, 30, 100, 169, 150, 4, 149, 170, 59, 34, 188, 80, 71, 221, 31, 124, 207, 240, 95, 97, 89, 159, 52, 90, 46, 145, 160, 240, 60, 157, 27, 88, 157, 154, 235, 183, 23, 10, 16, 51, 18, 147, 210, 238, 165, 182, 110, 156, 240, 78, 87, 184, 174, 253, 228, 75, 113, 200, 16, 69, 95, 160, 137, 235, 45, 79, 101, 229, 120, 144, 126, 94, 74, 26, 127, 70, 20, 126, 97, 104, 198, 148, 145, 174, 77, 177, 28, 30, 7, 200, 156, 167, 248, 48}, +{165, 95, 121, 143, 163, 114, 1, 212, 76, 126, 210, 12, 219, 129, 218, 172, 139, 127, 220, 213, 7, 37, 194, 251, 132, 84, 88, 136, 32, 192, 51, 99, 113, 233, 234, 92, 198, 22, 239, 175, 93, 166, 72, 2, 229, 139, 195, 48, 63, 34, 124, 120, 245, 151, 171, 193, 68, 106, 84, 0, 185, 74, 64, 243, 243, 252, 131, 255, 63, 112, 133, 122, 20, 197, 150, 20, 27, 205, 56, 47, 65, 242, 33, 159, 214, 204, 65, 61, 220, 207, 185, 183, 229, 36, 191, 240, 97, 242, 52, 22, 104, 231, 200, 149, 141, 3, 219, 238, 222, 132, 176, 221, 119, 44, 40, 255, 106, 51, 68, 150, 43, 104, 253, 23, 209, 67, 73, 228}, +{44, 38, 201, 74, 60, 202, 69, 41, 205, 143, 221, 213, 163, 71, 166, 155, 245, 95, 123, 58, 235, 252, 224, 63, 6, 151, 154, 150, 46, 117, 249, 251, 46, 123, 97, 206, 57, 178, 28, 160, 220, 42, 62, 211, 46, 79, 236, 128, 255, 130, 95, 130, 204, 248, 154, 2, 192, 136, 114, 49, 0, 110, 66, 234, 22, 116, 185, 54, 58, 104, 79, 14, 92, 44, 76, 126, 171, 209, 16, 197, 80, 242, 21, 217, 59, 120, 119, 190, 41, 198, 131, 249, 72, 204, 155, 84, 45, 145, 221, 68, 122, 235, 50, 27, 186, 180, 78, 191, 205, 101, 33, 151, 170, 155, 152, 110, 163, 115, 142, 69, 64, 204, 128, 121, 129, 185, 171, 242}, +{71, 18, 207, 108, 247, 30, 42, 151, 81, 68, 223, 107, 148, 197, 188, 126, 236, 182, 38, 40, 253, 62, 120, 202, 57, 100, 20, 114, 233, 197, 91, 163, 53, 41, 149, 231, 254, 37, 177, 185, 11, 89, 212, 97, 83, 87, 197, 49, 238, 180, 175, 219, 8, 16, 129, 141, 62, 165, 199, 99, 232, 98, 168, 199, 223, 168, 152, 163, 157, 66, 51, 85, 193, 137, 32, 66, 92, 247, 107, 23, 217, 211, 20, 59, 163, 218, 22, 28, 191, 252, 46, 40, 200, 150, 235, 66, 26, 145, 229, 206, 62, 136, 223, 113, 121, 114, 172, 49, 123, 87, 237, 150, 250, 128, 236, 72, 49, 97, 214, 158, 70, 109, 151, 174, 251, 69, 124, 213}, +{27, 234, 243, 214, 22, 134, 45, 73, 241, 125, 92, 241, 222, 92, 136, 143, 26, 109, 193, 5, 90, 44, 144, 79, 172, 101, 187, 201, 59, 64, 45, 88, 75, 45, 132, 160, 164, 168, 149, 60, 18, 30, 6, 54, 188, 86, 238, 250, 73, 234, 166, 227, 143, 18, 242, 182, 111, 97, 78, 37, 219, 55, 19, 109, 75, 186, 215, 219, 243, 148, 92, 122, 109, 21, 29, 240, 126, 68, 128, 73, 167, 2, 108, 96, 218, 100, 27, 132, 47, 59, 121, 131, 47, 177, 83, 251, 215, 207, 53, 109, 243, 78, 49, 199, 253, 135, 228, 133, 50, 193, 103, 247, 35, 202, 234, 149, 150, 216, 134, 94, 13, 102, 128, 49, 220, 235, 106, 132}, +{5, 81, 108, 20, 53, 178, 87, 58, 206, 59, 56, 124, 34, 47, 217, 127, 236, 153, 164, 144, 34, 17, 34, 238, 75, 163, 233, 174, 253, 171, 175, 148, 246, 220, 21, 80, 218, 63, 189, 6, 0, 238, 160, 32, 131, 226, 144, 146, 106, 187, 116, 70, 185, 125, 91, 143, 18, 175, 195, 217, 163, 141, 97, 180, 207, 94, 33, 56, 28, 72, 76, 173, 148, 151, 86, 60, 79, 3, 224, 156, 82, 129, 245, 58, 21, 132, 206, 248, 238, 75, 113, 146, 241, 195, 75, 16, 124, 243, 150, 74, 144, 187, 231, 248, 173, 77, 231, 112, 75, 9, 112, 26, 156, 73, 178, 84, 25, 72, 2, 115, 59, 52, 133, 12, 79, 171, 24, 233}, +{82, 76, 163, 64, 52, 131, 126, 39, 92, 163, 129, 6, 169, 87, 167, 250, 142, 146, 101, 34, 101, 150, 176, 71, 28, 21, 10, 109, 157, 203, 39, 47, 68, 28, 170, 39, 183, 78, 96, 144, 186, 145, 13, 185, 100, 8, 37, 21, 206, 118, 193, 126, 247, 220, 133, 201, 93, 146, 120, 119, 87, 126, 128, 118, 9, 241, 132, 8, 106, 105, 66, 140, 152, 167, 118, 14, 170, 187, 115, 38, 102, 183, 110, 205, 39, 225, 141, 71, 61, 176, 68, 131, 203, 54, 191, 81, 13, 68, 254, 213, 134, 33, 93, 234, 65, 63, 149, 39, 140, 243, 214, 185, 81, 207, 142, 223, 113, 20, 31, 221, 129, 220, 4, 69, 181, 219, 22, 221}, +{67, 186, 175, 37, 23, 92, 186, 59, 87, 94, 40, 49, 77, 169, 100, 116, 88, 54, 115, 175, 55, 242, 58, 98, 6, 91, 147, 117, 31, 139, 250, 97, 135, 146, 118, 12, 247, 12, 243, 154, 56, 63, 52, 246, 122, 84, 137, 52, 205, 218, 138, 237, 1, 178, 226, 103, 197, 86, 114, 166, 33, 7, 180, 66, 209, 243, 2, 10, 135, 158, 154, 149, 20, 17, 18, 25, 212, 128, 163, 236, 170, 160, 57, 217, 47, 106, 52, 85, 84, 107, 175, 8, 154, 226, 108, 15, 46, 30, 165, 60, 82, 2, 177, 231, 107, 240, 216, 138, 215, 71, 10, 165, 156, 177, 75, 22, 116, 107, 122, 90, 47, 127, 150, 159, 72, 95, 150, 92}, +{123, 79, 198, 44, 174, 132, 39, 66, 165, 128, 155, 228, 125, 192, 136, 45, 179, 45, 11, 18, 151, 177, 245, 176, 83, 5, 208, 10, 129, 246, 45, 1, 214, 24, 202, 101, 225, 12, 116, 131, 107, 136, 164, 210, 115, 79, 124, 71, 123, 181, 189, 101, 14, 176, 175, 129, 68, 202, 83, 41, 54, 136, 17, 239, 23, 186, 221, 218, 51, 198, 210, 69, 66, 182, 42, 37, 167, 100, 104, 17, 42, 99, 97, 164, 187, 242, 46, 193, 51, 194, 125, 114, 210, 228, 163, 138, 40, 43, 112, 190, 226, 214, 218, 160, 81, 12, 195, 81, 79, 79, 125, 229, 113, 199, 221, 130, 213, 8, 75, 66, 74, 77, 215, 106, 231, 34, 118, 191}, +{14, 168, 97, 161, 26, 203, 199, 227, 232, 207, 52, 122, 216, 27, 84, 61, 206, 197, 138, 44, 110, 62, 95, 193, 193, 210, 117, 90, 120, 84, 95, 232, 130, 235, 247, 198, 4, 138, 7, 126, 180, 175, 217, 245, 215, 49, 192, 102, 50, 165, 94, 5, 245, 167, 74, 106, 83, 63, 147, 101, 107, 60, 65, 218, 133, 199, 164, 234, 181, 45, 142, 147, 239, 182, 73, 156, 71, 178, 236, 56, 168, 15, 71, 78, 126, 151, 207, 131, 178, 182, 112, 117, 170, 116, 214, 5, 151, 32, 225, 202, 137, 24, 45, 102, 229, 123, 180, 74, 14, 149, 241, 157, 113, 116, 231, 249, 190, 50, 170, 170, 191, 44, 174, 20, 93, 77, 86, 165}, +{50, 4, 2, 131, 195, 200, 82, 46, 195, 114, 114, 56, 186, 73, 105, 98, 21, 191, 103, 226, 220, 38, 164, 58, 217, 71, 222, 244, 13, 97, 191, 187, 102, 245, 71, 26, 249, 126, 143, 171, 118, 63, 4, 140, 31, 91, 174, 217, 166, 8, 141, 44, 152, 53, 96, 88, 46, 120, 218, 211, 211, 79, 187, 50, 49, 151, 49, 75, 103, 196, 78, 142, 221, 91, 82, 176, 200, 14, 157, 199, 49, 121, 46, 232, 83, 235, 10, 92, 45, 251, 47, 208, 3, 78, 57, 23, 235, 200, 34, 192, 205, 233, 250, 67, 134, 1, 114, 243, 23, 223, 227, 93, 137, 2, 195, 141, 187, 153, 68, 39, 123, 96, 211, 227, 96, 232, 69, 223}, +{99, 175, 150, 250, 152, 204, 247, 192, 235, 73, 151, 168, 18, 120, 111, 150, 231, 167, 71, 100, 184, 117, 53, 44, 254, 255, 31, 190, 227, 192, 228, 225, 17, 37, 168, 194, 65, 197, 100, 22, 202, 150, 72, 157, 178, 229, 197, 101, 146, 15, 119, 208, 20, 66, 72, 115, 120, 127, 134, 21, 199, 15, 22, 107, 166, 14, 88, 201, 6, 219, 56, 144, 94, 188, 64, 31, 7, 113, 174, 168, 167, 68, 160, 231, 123, 139, 25, 77, 116, 59, 170, 102, 83, 22, 63, 66, 187, 163, 226, 178, 11, 24, 142, 101, 246, 20, 42, 213, 76, 248, 232, 51, 147, 113, 151, 75, 142, 30, 24, 33, 99, 136, 25, 69, 50, 60, 230, 114}, +{116, 173, 123, 204, 240, 77, 197, 151, 102, 237, 171, 42, 48, 149, 253, 251, 2, 179, 254, 146, 56, 13, 231, 202, 126, 103, 86, 45, 214, 136, 173, 33, 74, 37, 84, 104, 122, 173, 64, 154, 182, 176, 180, 97, 246, 145, 177, 16, 240, 244, 88, 226, 212, 97, 227, 122, 79, 70, 209, 172, 207, 37, 162, 224, 87, 163, 149, 228, 176, 20, 113, 242, 13, 111, 213, 170, 126, 86, 90, 61, 121, 175, 253, 35, 73, 141, 192, 56, 93, 90, 135, 253, 205, 131, 134, 86, 76, 182, 208, 140, 252, 210, 48, 131, 8, 231, 4, 20, 213, 175, 148, 226, 48, 246, 69, 69, 60, 14, 48, 127, 17, 14, 245, 68, 114, 92, 129, 123}, +{133, 1, 253, 35, 247, 215, 6, 169, 61, 50, 249, 234, 72, 240, 58, 198, 99, 127, 112, 213, 217, 156, 124, 213, 5, 201, 13, 27, 18, 39, 27, 133, 220, 178, 12, 215, 233, 113, 9, 131, 159, 136, 69, 181, 36, 182, 65, 196, 42, 59, 235, 253, 43, 21, 200, 59, 173, 101, 132, 104, 64, 47, 249, 96, 152, 40, 92, 11, 71, 4, 205, 12, 95, 134, 193, 52, 87, 67, 245, 35, 140, 227, 6, 242, 48, 129, 43, 143, 184, 89, 61, 81, 30, 35, 194, 99, 48, 96, 238, 175, 130, 22, 37, 255, 90, 169, 122, 118, 181, 127, 57, 145, 225, 134, 211, 23, 31, 116, 251, 226, 16, 103, 190, 27, 20, 65, 153, 143}, +{105, 173, 89, 207, 246, 150, 98, 159, 5, 150, 81, 75, 252, 15, 56, 161, 2, 173, 158, 30, 29, 180, 200, 221, 255, 201, 138, 167, 152, 244, 198, 227, 80, 167, 152, 153, 64, 87, 10, 206, 244, 243, 60, 255, 218, 221, 127, 202, 58, 44, 116, 125, 133, 113, 250, 123, 235, 90, 212, 116, 226, 143, 239, 19, 229, 154, 115, 210, 243, 119, 225, 79, 163, 232, 75, 40, 77, 65, 184, 26, 192, 179, 219, 155, 93, 101, 129, 205, 84, 91, 148, 229, 102, 37, 15, 254, 95, 14, 46, 115, 70, 120, 39, 45, 70, 128, 51, 122, 146, 146, 101, 222, 253, 15, 245, 146, 139, 92, 233, 114, 252, 182, 197, 16, 169, 247, 114, 255}, +{115, 162, 107, 127, 84, 124, 173, 220, 11, 91, 235, 132, 112, 80, 72, 177, 170, 240, 50, 45, 49, 45, 229, 37, 136, 197, 10, 189, 242, 52, 183, 45, 158, 62, 210, 5, 244, 173, 120, 138, 104, 221, 68, 29, 249, 146, 117, 172, 193, 164, 242, 54, 197, 124, 129, 81, 139, 191, 189, 20, 162, 162, 5, 136, 108, 58, 78, 11, 135, 171, 36, 153, 227, 69, 199, 219, 46, 176, 116, 55, 206, 59, 142, 43, 174, 104, 53, 183, 52, 94, 219, 34, 242, 223, 32, 161, 175, 217, 0, 168, 4, 24, 43, 249, 119, 86, 141, 250, 185, 204, 211, 205, 223, 182, 100, 71, 30, 31, 160, 71, 40, 66, 54, 114, 12, 87, 160, 139}, +{134, 102, 198, 41, 2, 83, 119, 69, 198, 26, 19, 184, 61, 116, 50, 144, 224, 152, 46, 193, 125, 110, 114, 0, 154, 149, 40, 145, 203, 15, 214, 159, 153, 225, 131, 130, 35, 248, 164, 141, 213, 145, 75, 102, 91, 83, 131, 223, 235, 12, 135, 60, 56, 84, 74, 78, 102, 96, 143, 175, 97, 236, 24, 114, 187, 188, 255, 206, 243, 85, 77, 228, 41, 113, 41, 105, 6, 197, 193, 242, 93, 185, 189, 118, 149, 169, 154, 212, 78, 161, 3, 79, 110, 114, 104, 147, 192, 146, 55, 101, 207, 156, 28, 185, 114, 109, 47, 145, 213, 169, 43, 209, 9, 65, 117, 237, 67, 210, 209, 104, 197, 35, 64, 78, 17, 185, 86, 95}, +{53, 182, 77, 247, 25, 237, 192, 83, 184, 131, 60, 125, 72, 207, 106, 38, 233, 63, 179, 113, 238, 194, 20, 170, 154, 229, 131, 200, 232, 21, 116, 123, 107, 147, 224, 214, 248, 17, 169, 115, 9, 138, 231, 145, 207, 212, 210, 164, 231, 142, 10, 104, 193, 188, 27, 56, 240, 43, 123, 15, 111, 88, 219, 61, 100, 65, 55, 201, 169, 28, 75, 209, 178, 24, 88, 169, 35, 243, 228, 240, 88, 117, 67, 139, 103, 19, 133, 160, 173, 207, 180, 105, 229, 134, 165, 109, 114, 86, 73, 176, 183, 88, 254, 42, 73, 87, 97, 86, 196, 78, 41, 208, 139, 49, 122, 115, 192, 53, 95, 113, 96, 202, 198, 158, 229, 74, 103, 100}, +{38, 204, 200, 191, 131, 211, 50, 184, 194, 110, 171, 250, 6, 141, 115, 139, 176, 115, 99, 11, 17, 95, 178, 31, 162, 35, 21, 243, 139, 67, 49, 65, 88, 196, 79, 188, 250, 179, 32, 15, 38, 229, 67, 244, 41, 226, 119, 213, 195, 238, 207, 116, 57, 12, 17, 223, 208, 217, 160, 204, 156, 165, 67, 111, 67, 86, 44, 241, 60, 164, 187, 171, 234, 204, 19, 64, 80, 241, 151, 129, 48, 67, 90, 45, 156, 204, 25, 168, 176, 199, 15, 202, 125, 252, 239, 234, 196, 255, 40, 145, 200, 250, 163, 110, 136, 64, 28, 199, 147, 136, 234, 53, 247, 116, 196, 112, 185, 148, 177, 83, 51, 24, 58, 236, 228, 93, 9, 168}, +{196, 223, 41, 186, 115, 55, 78, 55, 29, 184, 24, 46, 215, 156, 243, 205, 141, 30, 250, 54, 134, 230, 118, 44, 85, 89, 204, 93, 211, 68, 125, 12, 188, 0, 235, 162, 112, 46, 31, 154, 171, 5, 137, 240, 230, 84, 28, 223, 49, 43, 63, 137, 51, 188, 86, 73, 158, 36, 67, 209, 49, 58, 184, 228, 13, 84, 135, 225, 206, 49, 58, 106, 145, 117, 83, 17, 1, 54, 19, 0, 161, 166, 168, 3, 18, 119, 144, 28, 116, 73, 144, 33, 212, 202, 74, 90, 234, 15, 112, 173, 244, 199, 57, 58, 44, 20, 126, 192, 117, 155, 141, 95, 201, 36, 213, 31, 118, 216, 170, 241, 191, 177, 17, 159, 107, 89, 160, 171}, +{108, 27, 52, 214, 141, 2, 218, 20, 117, 102, 31, 148, 176, 199, 179, 20, 142, 183, 0, 184, 0, 104, 120, 11, 106, 19, 216, 20, 28, 69, 202, 125, 168, 195, 155, 252, 46, 89, 75, 104, 108, 41, 224, 52, 149, 26, 0, 251, 17, 57, 43, 69, 146, 101, 33, 108, 89, 104, 146, 80, 214, 158, 20, 239, 0, 136, 23, 54, 151, 183, 129, 209, 192, 108, 246, 43, 202, 170, 92, 27, 227, 31, 99, 182, 222, 198, 216, 42, 12, 49, 65, 119, 251, 157, 214, 127, 16, 151, 86, 72, 214, 31, 255, 198, 203, 214, 210, 103, 115, 174, 47, 79, 20, 88, 12, 15, 28, 49, 160, 183, 208, 154, 78, 181, 157, 84, 105, 114}, +{153, 10, 199, 46, 243, 118, 15, 168, 194, 233, 180, 49, 175, 107, 230, 104, 146, 235, 211, 57, 180, 248, 63, 98, 220, 157, 88, 168, 252, 18, 60, 99, 86, 132, 95, 10, 42, 137, 212, 130, 20, 103, 230, 55, 75, 167, 53, 245, 37, 111, 58, 220, 120, 56, 194, 251, 77, 26, 67, 134, 141, 133, 93, 142, 19, 154, 169, 147, 25, 20, 213, 38, 121, 183, 158, 128, 171, 18, 107, 40, 22, 163, 76, 227, 130, 12, 96, 48, 82, 23, 85, 211, 123, 48, 15, 60, 58, 66, 14, 56, 148, 132, 144, 148, 212, 212, 222, 98, 142, 179, 218, 238, 223, 228, 120, 207, 232, 136, 119, 239, 222, 10, 137, 236, 114, 52, 17, 195}, +{199, 117, 115, 13, 106, 202, 154, 83, 215, 179, 80, 250, 21, 154, 103, 82, 97, 68, 74, 186, 227, 136, 44, 94, 137, 125, 126, 138, 31, 236, 88, 138, 127, 177, 164, 43, 132, 90, 202, 94, 81, 190, 80, 216, 61, 17, 218, 233, 90, 74, 118, 106, 159, 248, 66, 159, 145, 107, 189, 250, 8, 80, 109, 136, 20, 204, 89, 123, 211, 170, 25, 47, 246, 121, 53, 156, 48, 14, 91, 207, 30, 64, 9, 188, 135, 199, 143, 22, 155, 38, 208, 101, 238, 149, 168, 178, 13, 189, 200, 239, 209, 52, 76, 224, 113, 32, 67, 202, 2, 117, 31, 219, 176, 51, 40, 184, 8, 249, 229, 67, 124, 216, 39, 97, 182, 245, 221, 148}, +{31, 22, 134, 209, 99, 106, 229, 219, 22, 219, 17, 6, 96, 142, 185, 132, 20, 224, 137, 90, 161, 88, 102, 230, 121, 12, 195, 224, 84, 204, 30, 53, 157, 34, 218, 70, 155, 14, 108, 174, 243, 167, 124, 143, 197, 194, 152, 47, 160, 234, 198, 140, 172, 11, 48, 202, 177, 33, 201, 137, 200, 172, 21, 52, 189, 197, 198, 184, 66, 189, 41, 25, 50, 72, 158, 241, 246, 8, 241, 119, 181, 238, 174, 63, 225, 68, 225, 204, 17, 35, 148, 137, 207, 121, 139, 243, 62, 208, 246, 230, 234, 24, 7, 213, 231, 82, 193, 0, 145, 125, 173, 101, 104, 175, 147, 208, 158, 245, 181, 101, 124, 175, 73, 6, 174, 109, 92, 97}, +{150, 71, 73, 46, 146, 231, 29, 114, 197, 3, 145, 225, 224, 249, 242, 175, 97, 115, 220, 185, 43, 166, 207, 131, 135, 64, 149, 226, 152, 116, 170, 244, 118, 21, 93, 17, 95, 140, 126, 163, 37, 124, 10, 246, 160, 203, 1, 241, 111, 125, 167, 139, 1, 244, 115, 196, 83, 198, 36, 117, 106, 214, 107, 220, 111, 108, 147, 164, 179, 122, 73, 114, 239, 206, 91, 114, 61, 158, 248, 202, 233, 233, 22, 134, 145, 1, 21, 142, 70, 233, 57, 171, 115, 131, 163, 102, 14, 198, 38, 247, 50, 110, 60, 35, 70, 177, 228, 149, 62, 216, 234, 157, 232, 220, 69, 196, 164, 228, 200, 23, 106, 219, 159, 202, 212, 217, 84, 26}, +{185, 207, 104, 192, 128, 74, 84, 197, 6, 132, 126, 125, 44, 218, 133, 140, 90, 124, 138, 31, 217, 205, 235, 116, 223, 151, 204, 0, 241, 107, 242, 114, 59, 229, 118, 68, 197, 141, 222, 17, 75, 53, 188, 11, 94, 183, 218, 190, 50, 33, 115, 99, 100, 203, 44, 1, 53, 117, 223, 187, 101, 98, 92, 247, 52, 86, 81, 35, 72, 27, 25, 240, 160, 127, 139, 5, 11, 152, 173, 175, 106, 93, 52, 249, 228, 210, 35, 96, 186, 31, 245, 246, 12, 101, 138, 195, 137, 72, 245, 189, 132, 205, 232, 17, 13, 7, 82, 142, 26, 51, 26, 132, 83, 60, 72, 235, 71, 85, 194, 103, 63, 202, 215, 123, 74, 52, 196, 154}, +{93, 245, 9, 119, 46, 236, 144, 54, 10, 34, 95, 31, 165, 208, 194, 138, 54, 47, 93, 39, 174, 7, 117, 101, 8, 178, 225, 131, 12, 11, 233, 186, 215, 83, 92, 181, 44, 189, 207, 182, 152, 67, 33, 86, 191, 163, 255, 57, 85, 21, 4, 120, 102, 194, 189, 159, 119, 121, 44, 25, 41, 110, 246, 35, 186, 95, 25, 254, 30, 218, 251, 193, 83, 250, 187, 247, 132, 179, 219, 139, 75, 76, 167, 65, 196, 237, 49, 228, 70, 151, 25, 235, 25, 33, 101, 110, 196, 76, 196, 131, 141, 39, 117, 212, 177, 19, 253, 163, 29, 169, 224, 54, 223, 194, 219, 206, 139, 105, 82, 153, 224, 130, 164, 30, 155, 254, 59, 11}, +{15, 192, 74, 183, 250, 236, 10, 187, 205, 120, 170, 52, 148, 87, 237, 154, 255, 11, 186, 10, 146, 39, 95, 183, 194, 214, 1, 15, 162, 170, 14, 62, 63, 3, 242, 53, 55, 94, 18, 226, 250, 104, 247, 93, 81, 136, 179, 194, 75, 102, 173, 96, 37, 31, 207, 209, 207, 113, 241, 248, 11, 236, 78, 164, 99, 220, 160, 239, 255, 191, 78, 138, 37, 17, 241, 8, 227, 215, 134, 79, 54, 226, 123, 232, 111, 8, 188, 155, 189, 228, 241, 242, 178, 111, 122, 193, 83, 201, 205, 255, 26, 109, 223, 152, 20, 212, 112, 234, 218, 34, 152, 2, 82, 7, 101, 31, 226, 78, 95, 206, 151, 170, 196, 152, 66, 43, 12, 98}, +{98, 32, 85, 169, 17, 222, 147, 46, 146, 86, 167, 249, 195, 195, 73, 68, 84, 130, 84, 45, 104, 68, 142, 158, 204, 197, 216, 137, 12, 247, 230, 150, 82, 111, 138, 7, 103, 103, 23, 179, 69, 229, 206, 69, 3, 78, 204, 117, 22, 91, 236, 27, 163, 178, 91, 13, 211, 195, 116, 198, 155, 139, 49, 209, 46, 63, 165, 115, 175, 124, 203, 128, 24, 138, 76, 209, 190, 238, 115, 69, 187, 212, 39, 31, 155, 4, 43, 190, 163, 74, 72, 184, 138, 46, 22, 112, 110, 224, 115, 69, 19, 149, 147, 161, 212, 64, 79, 94, 57, 60, 50, 191, 141, 105, 38, 109, 231, 51, 250, 183, 96, 27, 43, 144, 25, 71, 78, 192}, +{108, 249, 124, 133, 43, 196, 228, 240, 247, 18, 125, 106, 184, 78, 73, 221, 231, 137, 102, 123, 45, 203, 215, 228, 118, 155, 40, 230, 137, 26, 150, 26, 146, 30, 178, 183, 225, 122, 243, 84, 0, 232, 16, 26, 244, 46, 126, 54, 139, 143, 98, 121, 222, 144, 100, 184, 192, 35, 46, 10, 207, 202, 181, 22, 135, 134, 204, 0, 253, 3, 51, 163, 169, 102, 57, 233, 191, 16, 8, 159, 181, 128, 66, 27, 250, 93, 52, 65, 148, 124, 0, 28, 1, 13, 71, 192, 192, 189, 118, 245, 140, 228, 229, 33, 223, 132, 150, 147, 36, 191, 186, 16, 114, 211, 184, 63, 59, 24, 66, 197, 125, 166, 253, 158, 39, 78, 174, 67}, +{36, 184, 235, 171, 41, 115, 109, 149, 132, 20, 225, 71, 77, 222, 15, 156, 110, 255, 72, 186, 52, 246, 127, 154, 76, 235, 209, 39, 20, 106, 243, 96, 115, 66, 172, 208, 114, 17, 128, 244, 152, 207, 237, 194, 243, 213, 86, 106, 196, 94, 81, 156, 202, 120, 120, 80, 189, 162, 141, 38, 153, 56, 5, 178, 220, 100, 210, 252, 131, 89, 18, 255, 20, 3, 234, 153, 75, 29, 68, 254, 7, 154, 234, 117, 161, 108, 213, 1, 165, 119, 243, 12, 197, 107, 84, 200, 132, 183, 192, 117, 158, 27, 231, 32, 20, 77, 125, 139, 69, 63, 218, 170, 219, 29, 177, 251, 244, 8, 154, 181, 51, 81, 155, 122, 195, 27, 150, 179}, +{119, 56, 216, 89, 250, 187, 3, 226, 27, 21, 1, 74, 85, 76, 147, 163, 218, 86, 29, 200, 178, 95, 225, 199, 44, 249, 174, 219, 136, 171, 170, 105, 52, 133, 250, 137, 139, 55, 246, 94, 32, 8, 207, 17, 46, 149, 169, 25, 230, 21, 59, 128, 124, 31, 186, 139, 39, 38, 12, 96, 80, 211, 122, 192, 14, 67, 143, 84, 65, 137, 54, 237, 44, 97, 203, 114, 163, 75, 177, 117, 235, 42, 72, 154, 234, 229, 99, 86, 223, 247, 204, 89, 78, 104, 34, 141, 160, 227, 224, 82, 23, 19, 109, 134, 44, 173, 48, 18, 247, 74, 56, 151, 191, 154, 38, 250, 14, 48, 67, 131, 88, 216, 42, 235, 212, 149, 156, 46}, +{60, 102, 215, 10, 140, 173, 62, 144, 82, 197, 235, 134, 236, 54, 184, 42, 89, 38, 237, 32, 142, 36, 115, 134, 82, 191, 239, 243, 136, 225, 192, 221, 180, 12, 191, 79, 62, 168, 70, 47, 67, 200, 192, 112, 122, 79, 54, 180, 124, 245, 9, 217, 137, 233, 175, 7, 223, 31, 67, 144, 7, 105, 77, 237, 75, 105, 106, 33, 38, 63, 190, 35, 82, 161, 6, 85, 6, 174, 151, 129, 142, 87, 225, 95, 150, 243, 188, 159, 0, 97, 35, 170, 40, 224, 163, 50, 5, 145, 132, 226, 186, 26, 61, 12, 15, 184, 72, 69, 140, 147, 46, 119, 103, 15, 93, 16, 26, 137, 182, 160, 218, 5, 136, 240, 218, 215, 223, 188}, +{186, 198, 41, 0, 111, 180, 133, 115, 221, 96, 116, 228, 2, 136, 154, 29, 49, 87, 112, 97, 157, 0, 38, 231, 217, 59, 79, 156, 157, 24, 147, 187, 41, 45, 61, 137, 42, 128, 166, 136, 244, 91, 236, 221, 141, 6, 107, 255, 95, 55, 60, 223, 176, 68, 179, 210, 139, 151, 125, 142, 42, 88, 114, 63, 152, 226, 188, 25, 49, 181, 204, 91, 147, 249, 245, 77, 184, 204, 32, 236, 47, 147, 41, 158, 76, 173, 3, 49, 96, 60, 166, 95, 49, 246, 61, 216, 253, 43, 129, 6, 155, 22, 161, 227, 43, 19, 44, 178, 221, 225, 82, 215, 217, 255, 210, 16, 110, 231, 17, 245, 84, 40, 217, 178, 38, 203, 121, 40}, +{12, 1, 188, 208, 90, 20, 157, 255, 158, 140, 177, 101, 182, 150, 109, 176, 157, 148, 103, 251, 166, 249, 184, 97, 140, 152, 225, 205, 241, 109, 131, 113, 249, 191, 63, 87, 240, 34, 89, 98, 220, 144, 252, 247, 75, 39, 36, 130, 107, 109, 134, 1, 246, 82, 208, 71, 162, 135, 96, 118, 239, 132, 190, 247, 94, 229, 128, 167, 126, 220, 237, 124, 241, 81, 230, 251, 236, 202, 202, 169, 214, 3, 100, 216, 208, 181, 243, 201, 199, 228, 126, 41, 173, 110, 12, 167, 230, 156, 31, 102, 71, 151, 159, 196, 61, 0, 201, 96, 78, 21, 93, 78, 70, 124, 102, 207, 239, 86, 171, 218, 89, 54, 107, 232, 121, 228, 97, 34}, +{136, 18, 145, 255, 39, 199, 87, 89, 184, 78, 51, 183, 149, 228, 29, 70, 196, 110, 136, 60, 175, 110, 115, 34, 111, 87, 140, 56, 173, 214, 201, 214, 69, 94, 60, 21, 97, 81, 58, 114, 170, 34, 94, 192, 45, 74, 64, 97, 58, 215, 63, 254, 89, 28, 144, 102, 231, 199, 115, 8, 162, 193, 150, 9, 174, 90, 230, 63, 118, 93, 219, 243, 27, 161, 75, 178, 182, 21, 127, 236, 25, 39, 98, 156, 171, 35, 161, 187, 176, 31, 248, 103, 170, 210, 130, 181, 136, 80, 143, 109, 193, 248, 10, 92, 157, 200, 245, 177, 219, 252, 84, 70, 56, 2, 252, 112, 67, 140, 200, 195, 202, 45, 153, 77, 86, 235, 111, 214}, +{185, 166, 65, 115, 148, 206, 223, 140, 193, 252, 252, 105, 39, 130, 99, 20, 164, 8, 125, 75, 255, 42, 217, 193, 114, 81, 35, 194, 23, 18, 177, 0, 182, 254, 116, 52, 101, 132, 50, 49, 8, 0, 215, 169, 180, 62, 62, 19, 171, 223, 202, 212, 195, 54, 29, 62, 94, 224, 105, 76, 111, 36, 188, 171, 171, 242, 188, 7, 212, 59, 143, 111, 130, 237, 104, 124, 150, 203, 118, 132, 25, 7, 184, 217, 255, 159, 238, 108, 253, 169, 200, 113, 172, 242, 46, 11, 97, 145, 73, 231, 100, 141, 160, 134, 54, 180, 109, 240, 93, 65, 240, 241, 135, 107, 231, 2, 120, 238, 127, 197, 12, 214, 122, 200, 230, 220, 67, 159}, +{12, 104, 43, 31, 6, 62, 13, 78, 36, 26, 117, 35, 89, 195, 95, 116, 99, 84, 114, 24, 207, 82, 220, 141, 55, 194, 188, 17, 160, 107, 10, 86, 254, 109, 38, 196, 134, 140, 124, 229, 165, 148, 186, 211, 69, 170, 194, 210, 71, 209, 138, 166, 127, 241, 180, 68, 247, 58, 130, 41, 200, 250, 61, 195, 236, 214, 34, 21, 97, 125, 216, 194, 59, 114, 31, 117, 254, 254, 12, 137, 182, 66, 58, 78, 121, 56, 129, 91, 106, 134, 107, 246, 144, 77, 141, 6, 57, 208, 38, 83, 141, 186, 164, 241, 115, 14, 150, 189, 43, 48, 4, 218, 161, 177, 67, 106, 122, 207, 80, 232, 192, 35, 28, 156, 26, 108, 178, 142}, +{36, 38, 157, 186, 8, 130, 84, 207, 81, 1, 54, 189, 234, 62, 151, 120, 234, 199, 42, 180, 10, 205, 64, 134, 128, 130, 29, 119, 175, 237, 25, 81, 191, 113, 8, 237, 155, 51, 171, 172, 204, 243, 117, 104, 160, 120, 180, 40, 161, 74, 132, 74, 132, 55, 151, 25, 64, 53, 72, 197, 166, 166, 117, 162, 66, 22, 91, 75, 121, 123, 110, 151, 6, 30, 30, 147, 184, 189, 11, 225, 234, 209, 150, 125, 23, 27, 158, 115, 227, 188, 252, 255, 221, 119, 55, 191, 170, 42, 158, 48, 128, 217, 174, 29, 16, 36, 236, 88, 56, 182, 144, 33, 189, 216, 40, 11, 161, 117, 52, 221, 112, 234, 43, 190, 136, 34, 173, 119}, +{202, 130, 169, 238, 225, 95, 227, 18, 178, 108, 57, 102, 29, 99, 105, 234, 250, 230, 227, 215, 162, 119, 84, 45, 167, 61, 2, 75, 24, 175, 124, 164, 199, 242, 111, 204, 174, 91, 35, 120, 15, 88, 184, 31, 58, 223, 16, 156, 54, 164, 100, 194, 61, 186, 75, 228, 94, 86, 43, 71, 18, 107, 224, 137, 107, 175, 39, 94, 19, 203, 102, 179, 82, 177, 93, 129, 162, 77, 176, 195, 62, 71, 35, 208, 137, 214, 148, 174, 161, 69, 119, 3, 183, 188, 25, 12, 240, 102, 128, 233, 70, 160, 55, 185, 233, 250, 77, 140, 94, 97, 61, 188, 33, 223, 211, 170, 188, 219, 212, 167, 219, 164, 247, 149, 89, 130, 91, 138}, +{10, 72, 66, 213, 210, 229, 103, 162, 209, 213, 128, 60, 115, 255, 71, 6, 13, 163, 228, 195, 223, 232, 208, 231, 159, 41, 40, 27, 187, 147, 177, 150, 52, 2, 81, 197, 208, 10, 166, 150, 95, 173, 169, 249, 103, 23, 14, 218, 151, 141, 39, 162, 7, 103, 202, 216, 221, 157, 240, 195, 98, 10, 96, 24, 117, 184, 198, 68, 228, 60, 175, 157, 19, 173, 203, 243, 221, 83, 151, 182, 110, 249, 152, 215, 94, 231, 143, 250, 163, 77, 235, 126, 232, 208, 146, 70, 164, 10, 117, 250, 204, 188, 151, 182, 12, 33, 135, 49, 247, 86, 34, 54, 209, 177, 79, 211, 219, 49, 2, 173, 224, 122, 58, 76, 74, 90, 220, 131}, +{36, 13, 64, 138, 122, 45, 220, 8, 63, 240, 251, 187, 140, 133, 131, 235, 153, 42, 237, 105, 173, 255, 145, 148, 192, 43, 190, 11, 13, 170, 187, 164, 231, 69, 235, 56, 255, 243, 127, 17, 58, 24, 130, 213, 232, 208, 199, 117, 237, 247, 37, 69, 200, 99, 205, 47, 219, 196, 165, 148, 47, 73, 137, 30, 92, 20, 200, 191, 246, 200, 185, 132, 183, 36, 63, 126, 17, 114, 57, 237, 110, 222, 100, 243, 47, 9, 194, 89, 84, 23, 64, 227, 158, 106, 166, 190, 157, 33, 162, 58, 89, 75, 223, 225, 101, 250, 59, 208, 38, 86, 175, 194, 61, 98, 95, 175, 19, 27, 4, 22, 140, 62, 173, 63, 61, 40, 36, 0}, +{117, 63, 169, 39, 172, 109, 145, 163, 45, 67, 116, 133, 253, 19, 223, 150, 125, 231, 22, 41, 212, 244, 189, 80, 103, 58, 44, 17, 198, 131, 226, 60, 10, 209, 167, 91, 64, 128, 160, 62, 116, 23, 228, 139, 129, 57, 238, 138, 223, 212, 194, 239, 10, 17, 34, 250, 36, 68, 11, 88, 159, 148, 164, 137, 92, 9, 88, 161, 126, 6, 2, 14, 91, 226, 120, 50, 28, 47, 10, 223, 198, 10, 152, 8, 74, 82, 43, 215, 103, 80, 135, 75, 152, 159, 66, 21, 239, 47, 80, 180, 37, 185, 56, 169, 32, 237, 64, 163, 252, 116, 111, 63, 194, 8, 211, 115, 237, 218, 194, 33, 221, 221, 195, 110, 242, 191, 34, 241}, +{120, 119, 198, 131, 51, 21, 43, 145, 131, 101, 155, 2, 120, 98, 148, 132, 118, 244, 141, 17, 63, 86, 2, 113, 205, 39, 212, 139, 82, 105, 12, 15, 19, 9, 132, 39, 44, 15, 131, 158, 18, 117, 216, 221, 104, 0, 99, 7, 212, 212, 60, 117, 216, 23, 204, 49, 74, 134, 255, 161, 200, 106, 119, 57, 219, 124, 89, 232, 195, 124, 151, 248, 7, 181, 23, 93, 95, 169, 158, 92, 155, 50, 86, 187, 110, 173, 82, 202, 163, 16, 212, 111, 7, 178, 145, 84, 143, 112, 26, 71, 142, 107, 213, 98, 93, 57, 251, 36, 244, 170, 87, 219, 181, 63, 134, 253, 233, 186, 238, 208, 90, 254, 167, 107, 192, 178, 223, 220}, +{192, 86, 141, 194, 22, 223, 46, 175, 168, 133, 133, 39, 74, 202, 62, 210, 180, 135, 227, 16, 79, 189, 254, 252, 114, 235, 25, 255, 29, 21, 225, 107, 123, 249, 38, 92, 46, 219, 9, 113, 115, 81, 137, 137, 52, 85, 32, 166, 91, 13, 11, 134, 60, 116, 4, 83, 90, 97, 104, 63, 87, 203, 162, 215, 198, 107, 149, 130, 23, 2, 123, 147, 46, 241, 207, 167, 14, 121, 237, 203, 65, 87, 173, 110, 250, 2, 244, 153, 14, 81, 16, 198, 105, 177, 175, 115, 162, 57, 192, 59, 233, 129, 18, 92, 65, 5, 149, 229, 20, 18, 228, 142, 239, 139, 237, 162, 204, 45, 25, 60, 136, 41, 253, 127, 6, 207, 139, 106}, +{98, 100, 24, 208, 74, 212, 121, 225, 104, 139, 7, 208, 13, 222, 165, 182, 172, 154, 172, 75, 58, 2, 24, 135, 134, 226, 173, 94, 123, 44, 182, 34, 50, 230, 175, 108, 188, 0, 248, 142, 72, 196, 51, 49, 214, 51, 142, 198, 116, 222, 102, 50, 124, 138, 213, 90, 11, 205, 36, 80, 79, 80, 166, 228, 61, 219, 102, 202, 164, 238, 197, 204, 210, 105, 221, 9, 239, 144, 167, 55, 197, 205, 212, 153, 164, 161, 184, 96, 215, 217, 15, 254, 178, 63, 221, 99, 228, 58, 87, 113, 67, 145, 212, 96, 148, 97, 228, 233, 143, 19, 153, 157, 79, 80, 4, 90, 133, 70, 72, 162, 216, 90, 107, 169, 19, 217, 90, 74}, +{182, 201, 208, 167, 77, 11, 178, 184, 92, 51, 13, 12, 186, 94, 238, 104, 123, 150, 178, 216, 164, 30, 167, 156, 39, 79, 192, 3, 53, 39, 70, 158, 160, 61, 45, 50, 139, 69, 179, 163, 39, 50, 94, 203, 199, 81, 71, 127, 42, 226, 241, 41, 110, 102, 162, 49, 251, 129, 135, 92, 252, 79, 173, 103, 194, 246, 205, 68, 19, 202, 152, 116, 111, 43, 165, 234, 54, 218, 127, 28, 50, 150, 192, 48, 252, 216, 55, 171, 110, 87, 194, 83, 66, 178, 226, 71, 231, 176, 72, 208, 120, 160, 20, 75, 34, 186, 138, 136, 20, 200, 87, 162, 229, 24, 135, 69, 2, 116, 142, 236, 111, 6, 244, 170, 228, 225, 185, 40}, +{120, 93, 154, 250, 168, 20, 168, 217, 45, 208, 132, 217, 186, 87, 20, 187, 244, 97, 67, 86, 92, 83, 216, 6, 97, 202, 39, 157, 127, 216, 10, 123, 109, 60, 213, 101, 166, 224, 43, 225, 88, 220, 100, 105, 98, 104, 114, 132, 80, 115, 142, 239, 174, 85, 166, 30, 164, 124, 110, 120, 223, 53, 99, 247, 136, 251, 244, 240, 5, 30, 63, 141, 98, 187, 238, 238, 138, 45, 76, 31, 205, 253, 47, 154, 226, 199, 87, 156, 173, 137, 95, 107, 156, 230, 185, 94, 18, 233, 193, 172, 203, 81, 46, 228, 76, 39, 93, 118, 3, 104, 17, 47, 196, 103, 186, 243, 137, 79, 27, 102, 199, 69, 96, 190, 47, 22, 1, 165}, +{26, 103, 28, 121, 165, 110, 152, 82, 62, 149, 53, 177, 42, 192, 213, 48, 19, 6, 133, 86, 164, 8, 238, 202, 164, 174, 199, 101, 187, 205, 160, 205, 175, 124, 237, 209, 104, 43, 86, 71, 199, 188, 66, 176, 100, 108, 74, 58, 68, 54, 176, 75, 24, 194, 181, 203, 150, 189, 212, 173, 22, 130, 3, 147, 125, 7, 154, 166, 157, 60, 114, 79, 184, 168, 36, 253, 223, 156, 52, 88, 180, 252, 197, 223, 160, 152, 123, 224, 166, 12, 255, 234, 231, 154, 213, 155, 113, 14, 58, 65, 242, 190, 83, 123, 59, 84, 131, 162, 131, 132, 49, 246, 54, 104, 16, 125, 132, 83, 94, 231, 50, 16, 224, 83, 53, 10, 115, 131}, +{151, 65, 144, 16, 71, 40, 154, 241, 107, 155, 166, 220, 14, 204, 87, 13, 201, 223, 229, 49, 42, 42, 123, 119, 76, 203, 208, 19, 96, 133, 203, 218, 123, 183, 156, 251, 186, 247, 38, 71, 204, 36, 114, 66, 249, 222, 106, 166, 178, 251, 141, 163, 44, 131, 254, 122, 23, 127, 150, 154, 119, 3, 87, 66, 221, 45, 147, 55, 200, 130, 45, 182, 21, 150, 222, 68, 246, 209, 87, 168, 1, 41, 149, 34, 55, 228, 182, 3, 14, 28, 98, 246, 201, 213, 195, 115, 72, 178, 195, 128, 15, 170, 84, 175, 99, 253, 55, 137, 10, 165, 40, 186, 185, 117, 31, 217, 201, 168, 146, 179, 146, 129, 74, 175, 42, 192, 75, 254}, +{93, 82, 173, 79, 28, 142, 86, 55, 218, 212, 107, 172, 38, 222, 214, 84, 242, 224, 150, 57, 55, 1, 49, 171, 109, 14, 165, 197, 214, 212, 61, 100, 137, 17, 196, 153, 39, 186, 33, 198, 227, 4, 244, 175, 52, 230, 14, 84, 74, 73, 17, 72, 4, 200, 149, 101, 64, 211, 98, 32, 14, 233, 43, 233, 91, 209, 101, 82, 110, 93, 202, 27, 168, 121, 129, 42, 98, 127, 173, 83, 38, 45, 172, 62, 148, 83, 15, 10, 56, 117, 172, 78, 13, 116, 179, 57, 148, 245, 240, 211, 224, 213, 167, 247, 92, 139, 203, 175, 209, 120, 201, 127, 242, 93, 219, 149, 127, 48, 152, 181, 90, 181, 216, 238, 38, 114, 155, 223}, +{80, 245, 87, 215, 66, 234, 155, 56, 134, 211, 77, 194, 38, 24, 145, 239, 36, 214, 220, 106, 192, 21, 182, 74, 168, 178, 174, 90, 73, 208, 104, 149, 202, 115, 161, 133, 234, 45, 212, 245, 169, 105, 16, 99, 113, 116, 95, 157, 190, 31, 54, 198, 202, 205, 165, 15, 43, 67, 189, 232, 129, 43, 61, 221, 72, 11, 236, 121, 228, 63, 132, 14, 3, 58, 197, 1, 133, 88, 181, 167, 117, 77, 245, 250, 36, 54, 188, 157, 33, 66, 236, 87, 53, 58, 150, 244, 151, 96, 153, 129, 183, 249, 19, 244, 68, 240, 189, 129, 69, 176, 131, 1, 130, 202, 51, 203, 247, 136, 124, 73, 112, 218, 42, 208, 205, 32, 211, 165}, +{85, 18, 2, 90, 28, 39, 215, 223, 134, 26, 46, 90, 67, 22, 196, 103, 200, 216, 116, 153, 245, 133, 223, 234, 114, 93, 154, 22, 198, 37, 112, 226, 144, 68, 133, 248, 237, 208, 110, 241, 86, 55, 122, 10, 18, 135, 0, 205, 21, 247, 68, 133, 254, 29, 249, 45, 160, 104, 128, 211, 144, 34, 214, 88, 39, 204, 78, 102, 126, 68, 125, 179, 159, 240, 248, 43, 205, 151, 201, 88, 185, 23, 77, 79, 35, 59, 202, 99, 162, 91, 163, 71, 18, 61, 192, 176, 116, 130, 176, 233, 93, 131, 181, 105, 19, 157, 101, 255, 175, 154, 56, 170, 191, 25, 148, 157, 208, 56, 224, 233, 75, 74, 222, 45, 14, 23, 35, 10}, +{120, 138, 27, 68, 72, 226, 103, 200, 194, 15, 95, 104, 56, 184, 131, 217, 61, 66, 16, 85, 156, 254, 40, 234, 218, 136, 100, 143, 193, 202, 96, 236, 82, 144, 12, 205, 15, 237, 166, 220, 116, 152, 225, 237, 187, 177, 89, 203, 44, 179, 227, 224, 51, 185, 56, 169, 63, 6, 201, 111, 234, 247, 209, 151, 110, 182, 237, 110, 182, 10, 136, 183, 26, 151, 59, 144, 153, 99, 14, 84, 33, 189, 192, 96, 216, 119, 164, 70, 97, 138, 223, 23, 147, 203, 72, 91, 107, 49, 52, 231, 174, 49, 124, 246, 111, 193, 176, 181, 144, 179, 2, 69, 137, 64, 163, 238, 106, 156, 236, 93, 228, 142, 174, 4, 62, 123, 113, 200}, +{41, 38, 90, 28, 71, 175, 203, 255, 122, 95, 140, 5, 21, 82, 253, 10, 90, 138, 135, 233, 242, 65, 28, 164, 43, 209, 85, 227, 185, 65, 10, 32, 168, 75, 74, 74, 137, 105, 17, 241, 208, 26, 26, 43, 141, 134, 0, 89, 243, 99, 62, 57, 175, 101, 193, 102, 76, 132, 250, 162, 129, 230, 70, 186, 99, 152, 51, 219, 209, 51, 162, 223, 149, 195, 100, 9, 21, 172, 232, 7, 156, 229, 155, 180, 67, 65, 219, 168, 48, 236, 169, 167, 165, 206, 55, 163, 246, 182, 240, 35, 187, 56, 109, 234, 203, 116, 49, 42, 1, 182, 226, 72, 65, 10, 58, 179, 236, 205, 234, 249, 94, 246, 176, 204, 203, 103, 227, 174}, +{168, 228, 175, 156, 220, 19, 191, 193, 36, 44, 222, 251, 235, 227, 235, 192, 55, 131, 42, 160, 171, 43, 89, 107, 107, 10, 7, 9, 246, 226, 150, 11, 55, 191, 239, 52, 207, 208, 7, 70, 51, 183, 246, 72, 223, 159, 112, 240, 252, 8, 226, 168, 110, 136, 82, 104, 210, 202, 33, 82, 233, 122, 65, 227, 49, 156, 139, 246, 230, 172, 128, 214, 242, 215, 217, 62, 148, 173, 102, 209, 154, 247, 174, 1, 202, 193, 136, 75, 103, 164, 146, 153, 126, 29, 74, 33, 108, 116, 105, 29, 243, 201, 148, 33, 76, 131, 207, 197, 250, 187, 63, 223, 59, 25, 247, 6, 148, 114, 224, 178, 129, 149, 153, 130, 12, 38, 123, 111}, +{173, 101, 43, 52, 78, 72, 196, 9, 234, 142, 204, 201, 169, 112, 116, 98, 96, 198, 91, 9, 71, 161, 176, 21, 169, 228, 189, 113, 109, 241, 152, 74, 222, 37, 125, 136, 26, 128, 145, 204, 52, 191, 25, 27, 92, 140, 178, 177, 241, 222, 187, 157, 112, 21, 62, 90, 92, 160, 233, 189, 221, 60, 55, 91, 40, 135, 56, 31, 112, 240, 212, 88, 76, 165, 122, 99, 50, 54, 238, 156, 203, 172, 11, 183, 128, 85, 231, 37, 128, 21, 63, 208, 208, 110, 9, 251, 192, 214, 229, 235, 72, 36, 19, 185, 190, 200, 82, 131, 153, 105, 136, 112, 4, 165, 37, 173, 48, 2, 105, 222, 104, 112, 216, 30, 222, 79, 119, 30}, +{56, 240, 172, 30, 206, 144, 94, 183, 31, 252, 19, 93, 249, 166, 44, 30, 24, 122, 118, 74, 193, 220, 245, 197, 220, 142, 39, 14, 44, 1, 146, 215, 112, 122, 153, 92, 191, 207, 170, 234, 248, 238, 70, 180, 181, 60, 141, 0, 241, 5, 152, 126, 143, 0, 194, 83, 81, 197, 7, 195, 44, 193, 103, 6, 191, 107, 80, 128, 78, 116, 179, 90, 219, 226, 179, 30, 255, 177, 139, 228, 17, 118, 126, 173, 26, 79, 5, 64, 136, 58, 209, 192, 189, 197, 73, 96, 12, 18, 247, 166, 56, 170, 105, 171, 140, 222, 226, 242, 105, 82, 184, 194, 205, 71, 66, 49, 49, 93, 142, 75, 181, 24, 53, 56, 186, 50, 72, 133}, +{22, 42, 169, 150, 27, 227, 81, 155, 81, 28, 156, 126, 249, 31, 193, 89, 42, 72, 126, 194, 218, 236, 15, 179, 105, 211, 229, 36, 62, 236, 16, 223, 254, 189, 134, 31, 13, 150, 125, 8, 47, 74, 193, 134, 33, 15, 65, 12, 209, 17, 92, 151, 241, 32, 17, 23, 228, 245, 63, 118, 219, 146, 130, 197, 26, 218, 142, 144, 53, 54, 115, 33, 160, 39, 175, 219, 88, 208, 217, 224, 0, 79, 155, 49, 145, 43, 111, 57, 90, 217, 139, 13, 147, 224, 212, 90, 73, 231, 15, 77, 63, 231, 131, 24, 34, 100, 28, 103, 46, 5, 161, 18, 202, 164, 220, 183, 121, 29, 158, 100, 183, 243, 171, 49, 120, 179, 174, 202}, +{125, 80, 153, 253, 89, 168, 156, 127, 107, 219, 145, 139, 242, 231, 173, 211, 99, 220, 75, 175, 65, 45, 8, 222, 210, 138, 95, 160, 22, 252, 114, 90, 223, 0, 226, 220, 115, 199, 103, 39, 132, 120, 93, 104, 193, 13, 1, 242, 100, 99, 4, 97, 198, 163, 67, 198, 214, 169, 64, 47, 99, 60, 188, 213, 74, 248, 113, 28, 203, 51, 94, 67, 85, 53, 172, 55, 137, 70, 179, 220, 47, 50, 24, 105, 101, 70, 254, 199, 241, 185, 93, 162, 114, 80, 20, 44, 67, 118, 170, 59, 115, 152, 101, 243, 252, 65, 61, 7, 171, 165, 151, 189, 238, 8, 235, 132, 237, 141, 68, 209, 74, 92, 89, 224, 142, 54, 138, 165}, +{18, 82, 148, 158, 237, 65, 65, 240, 98, 22, 130, 248, 56, 78, 76, 129, 123, 112, 14, 206, 201, 243, 171, 126, 58, 103, 212, 124, 68, 70, 249, 23, 20, 100, 166, 205, 201, 198, 46, 97, 114, 18, 191, 120, 52, 94, 162, 223, 95, 10, 168, 185, 185, 48, 127, 145, 20, 101, 202, 9, 158, 111, 170, 118, 66, 170, 131, 70, 160, 186, 211, 99, 221, 255, 46, 14, 158, 26, 201, 135, 156, 149, 97, 162, 132, 243, 214, 75, 224, 202, 133, 237, 149, 151, 217, 194, 122, 182, 123, 100, 210, 122, 220, 241, 100, 108, 45, 185, 183, 35, 179, 137, 224, 3, 188, 177, 235, 132, 17, 62, 253, 54, 5, 194, 134, 15, 249, 129}, +{150, 107, 230, 146, 232, 85, 3, 57, 184, 99, 191, 66, 44, 152, 244, 252, 75, 81, 133, 34, 231, 246, 31, 62, 25, 36, 180, 152, 108, 191, 69, 0, 101, 233, 197, 17, 109, 72, 3, 56, 35, 113, 102, 20, 5, 81, 54, 142, 20, 165, 179, 117, 181, 170, 80, 189, 211, 254, 233, 228, 189, 76, 175, 44, 252, 233, 0, 65, 215, 182, 62, 124, 38, 74, 30, 62, 92, 197, 241, 133, 0, 201, 134, 62, 191, 245, 129, 227, 68, 28, 139, 160, 83, 231, 174, 29, 133, 205, 129, 22, 65, 102, 50, 164, 75, 226, 137, 160, 8, 110, 88, 140, 228, 176, 7, 178, 245, 170, 103, 211, 39, 132, 85, 171, 246, 167, 16, 43}, +{177, 64, 41, 23, 125, 21, 249, 43, 26, 213, 222, 211, 51, 10, 62, 105, 63, 115, 198, 199, 45, 100, 87, 107, 228, 176, 244, 166, 190, 180, 177, 40, 183, 192, 82, 32, 37, 66, 188, 243, 247, 139, 11, 38, 162, 144, 227, 249, 188, 33, 41, 71, 78, 86, 85, 80, 57, 59, 198, 162, 216, 251, 77, 124, 207, 11, 6, 211, 210, 25, 29, 53, 251, 163, 124, 144, 207, 219, 107, 163, 178, 168, 217, 202, 108, 168, 133, 203, 24, 114, 163, 97, 201, 133, 41, 1, 57, 2, 128, 108, 43, 189, 52, 156, 223, 168, 148, 184, 251, 3, 176, 37, 111, 191, 7, 196, 18, 24, 225, 234, 32, 209, 108, 131, 248, 217, 91, 210}, +{96, 101, 23, 46, 116, 47, 125, 165, 57, 162, 114, 249, 171, 86, 185, 79, 154, 91, 176, 228, 120, 119, 108, 189, 209, 143, 222, 112, 207, 102, 10, 173, 171, 27, 12, 65, 120, 137, 185, 200, 250, 200, 34, 113, 208, 47, 225, 96, 230, 197, 19, 198, 28, 204, 239, 78, 165, 86, 116, 193, 140, 10, 138, 15, 2, 151, 76, 1, 49, 47, 244, 1, 212, 131, 220, 84, 235, 122, 205, 180, 217, 105, 67, 163, 99, 66, 124, 125, 38, 253, 27, 101, 176, 45, 58, 157, 39, 114, 27, 158, 73, 184, 195, 98, 148, 172, 16, 217, 89, 80, 235, 70, 3, 89, 211, 234, 210, 10, 69, 247, 134, 55, 155, 217, 137, 117, 71, 167}, +{168, 123, 218, 19, 27, 108, 6, 164, 166, 57, 62, 75, 45, 244, 163, 60, 237, 27, 93, 32, 112, 230, 237, 30, 49, 96, 142, 246, 81, 158, 141, 203, 63, 95, 47, 205, 217, 101, 219, 144, 135, 191, 189, 122, 134, 250, 221, 231, 15, 171, 220, 254, 26, 132, 144, 152, 180, 181, 223, 230, 215, 151, 168, 61, 135, 5, 246, 4, 16, 34, 136, 33, 114, 140, 67, 160, 151, 207, 79, 194, 147, 147, 203, 191, 144, 38, 124, 86, 71, 169, 182, 108, 17, 21, 80, 62, 139, 155, 108, 107, 225, 159, 102, 93, 156, 56, 248, 186, 238, 126, 34, 220, 107, 99, 42, 64, 42, 209, 159, 213, 91, 232, 88, 233, 87, 208, 251, 208}, +{44, 130, 179, 225, 193, 124, 49, 243, 147, 83, 107, 230, 3, 215, 131, 126, 114, 146, 137, 87, 206, 52, 134, 146, 231, 229, 97, 63, 104, 54, 239, 77, 166, 54, 55, 177, 88, 14, 122, 38, 98, 10, 105, 4, 93, 152, 233, 170, 19, 230, 66, 79, 75, 200, 235, 127, 143, 208, 20, 124, 185, 131, 10, 215, 175, 251, 78, 238, 27, 116, 250, 4, 250, 12, 32, 25, 233, 172, 231, 224, 56, 102, 26, 98, 236, 182, 156, 25, 246, 158, 141, 211, 23, 101, 158, 177, 197, 248, 67, 156, 29, 127, 134, 23, 230, 188, 166, 245, 123, 40, 112, 102, 171, 117, 146, 230, 144, 88, 35, 183, 78, 7, 60, 149, 103, 10, 117, 166}, +{58, 71, 69, 230, 77, 73, 203, 94, 169, 108, 65, 118, 36, 89, 59, 223, 9, 156, 54, 185, 210, 222, 222, 18, 142, 37, 218, 244, 76, 213, 37, 84, 175, 145, 81, 11, 15, 152, 209, 169, 14, 22, 11, 138, 163, 106, 120, 145, 42, 209, 50, 34, 212, 182, 1, 247, 17, 86, 84, 59, 127, 81, 87, 155, 163, 159, 146, 99, 166, 234, 245, 111, 31, 9, 244, 188, 160, 162, 141, 97, 29, 108, 216, 35, 24, 39, 138, 215, 154, 73, 43, 206, 93, 81, 124, 144, 38, 86, 9, 66, 236, 106, 92, 201, 107, 174, 190, 96, 60, 203, 34, 145, 205, 38, 219, 17, 49, 89, 252, 97, 174, 244, 59, 182, 90, 83, 215, 72}, +{149, 184, 250, 137, 175, 244, 210, 110, 251, 48, 233, 218, 17, 150, 200, 46, 9, 78, 102, 118, 130, 165, 160, 98, 28, 158, 42, 157, 195, 61, 4, 134, 134, 197, 20, 56, 186, 26, 99, 125, 148, 121, 74, 172, 172, 107, 106, 213, 170, 250, 10, 214, 182, 153, 238, 193, 191, 187, 42, 28, 191, 195, 249, 148, 94, 189, 216, 215, 146, 0, 201, 12, 21, 215, 226, 215, 240, 54, 227, 9, 252, 72, 87, 12, 167, 203, 196, 105, 66, 35, 127, 248, 21, 178, 184, 195, 20, 233, 237, 82, 163, 81, 40, 49, 80, 226, 65, 151, 69, 40, 14, 50, 168, 67, 4, 134, 76, 239, 67, 43, 120, 51, 152, 161, 252, 73, 20, 247}, +{62, 253, 244, 37, 254, 170, 120, 198, 74, 23, 35, 106, 166, 218, 134, 181, 132, 240, 28, 124, 201, 94, 134, 224, 105, 150, 185, 244, 76, 231, 110, 183, 28, 35, 114, 132, 186, 68, 152, 128, 143, 202, 235, 74, 73, 175, 89, 50, 235, 65, 67, 192, 89, 239, 130, 56, 234, 209, 203, 41, 47, 35, 61, 201, 52, 251, 54, 178, 15, 41, 114, 202, 249, 94, 2, 3, 31, 198, 199, 38, 173, 231, 96, 39, 41, 183, 35, 6, 145, 8, 195, 73, 117, 169, 30, 141, 78, 240, 56, 8, 23, 167, 62, 124, 231, 155, 235, 171, 67, 228, 59, 229, 230, 42, 238, 122, 233, 62, 249, 169, 188, 0, 131, 68, 129, 200, 90, 184}, +{161, 131, 13, 119, 157, 170, 36, 255, 171, 141, 208, 22, 185, 158, 151, 48, 118, 37, 245, 37, 183, 189, 34, 53, 182, 68, 37, 70, 114, 68, 235, 97, 43, 191, 86, 51, 34, 193, 41, 234, 168, 32, 205, 118, 229, 242, 52, 248, 212, 242, 241, 175, 31, 85, 188, 182, 116, 201, 102, 49, 208, 99, 8, 117, 73, 229, 225, 106, 20, 42, 175, 16, 219, 161, 118, 113, 199, 90, 29, 74, 96, 88, 104, 30, 47, 58, 36, 141, 134, 135, 246, 114, 64, 51, 24, 206, 90, 192, 164, 129, 152, 173, 124, 80, 151, 84, 246, 85, 197, 75, 53, 43, 125, 74, 215, 249, 197, 142, 0, 132, 209, 95, 234, 51, 149, 131, 115, 156}, +{20, 206, 141, 242, 231, 36, 102, 217, 33, 81, 142, 99, 245, 219, 191, 133, 26, 142, 101, 43, 135, 186, 210, 119, 194, 82, 9, 236, 134, 190, 202, 116, 76, 203, 139, 22, 177, 146, 97, 91, 22, 123, 126, 184, 223, 172, 34, 127, 28, 219, 219, 241, 178, 10, 18, 59, 150, 57, 123, 77, 8, 101, 132, 137, 131, 19, 212, 221, 253, 149, 187, 189, 80, 59, 181, 77, 193, 92, 244, 142, 248, 12, 9, 52, 188, 149, 40, 129, 212, 1, 226, 102, 75, 149, 91, 243, 34, 238, 99, 1, 202, 62, 41, 43, 6, 243, 6, 37, 220, 63, 161, 43, 255, 128, 110, 141, 74, 55, 117, 119, 131, 239, 68, 125, 252, 202, 2, 32}, +{152, 117, 113, 92, 175, 28, 48, 157, 250, 185, 182, 4, 28, 66, 41, 105, 113, 144, 131, 180, 120, 88, 155, 169, 37, 116, 252, 38, 130, 252, 238, 60, 147, 67, 246, 42, 137, 205, 210, 84, 252, 115, 229, 233, 167, 11, 41, 17, 152, 240, 46, 131, 240, 247, 18, 147, 26, 57, 252, 56, 88, 104, 123, 243, 58, 206, 201, 5, 15, 158, 230, 186, 192, 100, 182, 254, 51, 161, 184, 45, 43, 74, 59, 153, 191, 254, 107, 87, 166, 21, 157, 150, 247, 56, 74, 227, 103, 207, 79, 37, 179, 236, 136, 255, 45, 218, 227, 100, 119, 184, 115, 27, 206, 12, 227, 100, 61, 160, 35, 149, 234, 166, 215, 247, 42, 140, 51, 211}, +{126, 148, 49, 134, 204, 232, 143, 81, 203, 245, 245, 187, 58, 153, 154, 169, 32, 135, 243, 159, 81, 191, 233, 62, 157, 24, 144, 7, 52, 35, 105, 212, 134, 179, 166, 137, 232, 115, 6, 127, 169, 71, 182, 215, 208, 135, 27, 114, 90, 178, 53, 209, 225, 221, 190, 179, 84, 230, 216, 215, 139, 13, 36, 113, 89, 41, 214, 201, 250, 174, 72, 56, 180, 90, 125, 58, 95, 81, 7, 48, 77, 234, 44, 116, 250, 222, 127, 26, 49, 58, 146, 72, 242, 174, 194, 27, 255, 232, 224, 208, 22, 48, 99, 35, 52, 147, 64, 34, 2, 191, 112, 203, 153, 58, 41, 118, 127, 153, 30, 236, 43, 247, 59, 62, 73, 71, 97, 83}, +{205, 178, 226, 227, 79, 31, 222, 154, 168, 33, 30, 204, 155, 4, 205, 63, 136, 126, 204, 160, 14, 83, 6, 211, 47, 90, 140, 149, 201, 134, 151, 28, 129, 187, 237, 141, 53, 147, 211, 39, 151, 47, 34, 1, 10, 124, 12, 245, 48, 44, 181, 223, 231, 135, 209, 238, 208, 18, 174, 172, 0, 184, 46, 20, 184, 233, 167, 199, 78, 26, 196, 144, 164, 67, 143, 69, 1, 169, 184, 220, 59, 232, 129, 81, 84, 190, 236, 132, 32, 178, 129, 218, 86, 6, 49, 248, 93, 119, 239, 98, 108, 142, 242, 114, 219, 142, 253, 16, 49, 251, 200, 108, 79, 112, 180, 245, 113, 162, 173, 248, 150, 246, 2, 148, 56, 214, 205, 27}, +{28, 128, 220, 166, 59, 177, 133, 31, 74, 123, 252, 20, 166, 137, 35, 173, 230, 108, 75, 124, 12, 110, 89, 216, 61, 166, 159, 29, 195, 109, 168, 154, 171, 5, 24, 246, 229, 203, 234, 42, 116, 190, 33, 230, 191, 36, 36, 29, 203, 75, 216, 65, 210, 168, 34, 245, 29, 182, 229, 133, 167, 188, 248, 119, 46, 249, 131, 197, 211, 33, 218, 190, 3, 226, 198, 251, 78, 150, 244, 147, 134, 137, 4, 241, 59, 217, 32, 165, 64, 234, 243, 75, 157, 86, 52, 1, 192, 176, 185, 173, 89, 45, 188, 236, 75, 170, 156, 85, 100, 248, 217, 21, 205, 33, 192, 192, 196, 91, 95, 229, 90, 253, 33, 154, 65, 81, 85, 129}, +{6, 107, 169, 137, 144, 131, 11, 236, 72, 3, 173, 108, 22, 14, 143, 6, 187, 204, 30, 96, 67, 18, 236, 3, 244, 4, 164, 172, 57, 100, 253, 178, 32, 33, 255, 139, 47, 161, 61, 42, 193, 15, 10, 34, 203, 44, 94, 56, 245, 62, 53, 106, 143, 168, 248, 173, 218, 68, 100, 122, 255, 222, 229, 62, 165, 66, 184, 94, 126, 67, 100, 185, 219, 156, 249, 253, 93, 57, 217, 144, 123, 30, 228, 173, 200, 185, 117, 116, 44, 57, 48, 108, 38, 39, 238, 56, 82, 234, 19, 149, 205, 215, 5, 11, 120, 250, 213, 51, 54, 179, 18, 160, 50, 9, 112, 55, 30, 255, 102, 233, 213, 185, 223, 233, 63, 252, 124, 248}, +{36, 136, 52, 113, 116, 153, 161, 217, 168, 184, 48, 246, 118, 229, 177, 14, 122, 165, 226, 244, 231, 1, 172, 162, 168, 246, 190, 216, 242, 169, 78, 214, 83, 229, 248, 45, 164, 155, 197, 75, 2, 87, 107, 121, 142, 167, 128, 200, 147, 187, 129, 135, 77, 109, 138, 230, 129, 140, 99, 231, 36, 6, 102, 73, 203, 16, 158, 156, 209, 178, 87, 218, 46, 172, 8, 114, 69, 19, 77, 175, 8, 5, 94, 29, 219, 202, 175, 100, 51, 242, 151, 220, 137, 71, 157, 169, 219, 230, 232, 105, 40, 175, 13, 29, 70, 43, 90, 116, 8, 131, 117, 172, 32, 149, 19, 236, 93, 194, 144, 128, 157, 204, 12, 244, 205, 117, 173, 128}, +{93, 78, 78, 141, 95, 127, 175, 39, 53, 183, 185, 36, 16, 134, 131, 99, 96, 120, 98, 79, 97, 246, 236, 231, 117, 94, 171, 79, 226, 203, 119, 161, 140, 252, 251, 65, 216, 130, 73, 240, 68, 177, 14, 186, 254, 207, 204, 237, 252, 1, 176, 185, 167, 165, 17, 25, 29, 32, 36, 93, 144, 0, 215, 3, 71, 137, 101, 18, 62, 77, 123, 195, 82, 62, 54, 104, 99, 18, 58, 1, 113, 55, 140, 26, 159, 42, 228, 95, 127, 206, 233, 63, 112, 192, 189, 116, 78, 18, 51, 218, 130, 121, 142, 255, 216, 32, 153, 149, 29, 55, 91, 41, 199, 58, 92, 172, 181, 197, 225, 179, 166, 174, 110, 16, 232, 204, 125, 161}, +{70, 217, 58, 196, 69, 137, 85, 129, 143, 239, 21, 232, 172, 26, 184, 219, 35, 70, 241, 161, 254, 61, 194, 134, 3, 26, 181, 185, 132, 84, 71, 153, 249, 125, 150, 111, 91, 191, 41, 215, 71, 110, 7, 67, 221, 128, 174, 77, 167, 146, 37, 60, 205, 184, 42, 29, 227, 12, 95, 17, 123, 148, 160, 53, 7, 72, 54, 100, 14, 74, 93, 161, 47, 138, 103, 188, 88, 88, 240, 106, 222, 110, 29, 243, 70, 204, 102, 232, 179, 185, 41, 36, 170, 13, 99, 230, 99, 12, 80, 175, 222, 170, 209, 132, 243, 132, 78, 65, 27, 80, 38, 174, 49, 153, 55, 99, 20, 249, 185, 81, 232, 63, 144, 137, 159, 220, 194, 253}, +{193, 24, 119, 62, 42, 112, 180, 252, 8, 124, 158, 155, 13, 137, 75, 124, 41, 170, 187, 106, 112, 110, 228, 167, 222, 160, 204, 41, 178, 212, 107, 146, 117, 78, 193, 150, 200, 54, 223, 203, 231, 113, 204, 248, 112, 37, 134, 251, 149, 186, 71, 49, 165, 55, 168, 192, 108, 207, 40, 132, 86, 37, 198, 99, 136, 95, 116, 141, 23, 1, 214, 215, 121, 118, 55, 27, 182, 221, 174, 141, 239, 227, 229, 41, 163, 130, 211, 178, 123, 132, 80, 96, 2, 45, 53, 72, 205, 187, 66, 15, 212, 94, 250, 160, 114, 50, 177, 170, 40, 119, 23, 38, 103, 147, 112, 147, 21, 115, 215, 106, 249, 129, 213, 184, 242, 184, 245, 188}, +{162, 156, 247, 37, 176, 182, 143, 137, 141, 171, 91, 142, 248, 5, 140, 50, 50, 236, 115, 30, 109, 103, 130, 69, 26, 233, 236, 255, 187, 191, 203, 184, 48, 145, 104, 167, 164, 72, 139, 72, 86, 5, 185, 119, 135, 140, 128, 79, 160, 143, 242, 85, 96, 142, 107, 161, 166, 184, 19, 3, 61, 140, 211, 216, 100, 243, 58, 115, 88, 150, 2, 12, 88, 23, 21, 57, 4, 199, 229, 221, 50, 126, 6, 193, 186, 184, 70, 151, 14, 59, 235, 21, 157, 37, 206, 169, 78, 107, 213, 106, 89, 217, 196, 83, 133, 85, 24, 237, 137, 94, 55, 219, 179, 76, 173, 148, 30, 7, 145, 129, 230, 102, 19, 216, 54, 29, 72, 12}, +{41, 31, 154, 145, 64, 136, 144, 176, 10, 90, 203, 10, 48, 250, 100, 28, 180, 222, 133, 12, 53, 56, 236, 21, 36, 252, 15, 236, 194, 83, 174, 5, 198, 152, 39, 72, 244, 66, 241, 17, 93, 89, 177, 89, 135, 125, 7, 187, 224, 40, 104, 73, 48, 207, 98, 219, 183, 246, 169, 108, 169, 0, 191, 138, 190, 185, 200, 12, 61, 22, 63, 211, 239, 16, 130, 101, 210, 119, 86, 3, 137, 2, 183, 90, 215, 90, 211, 2, 76, 140, 234, 230, 226, 211, 39, 114, 218, 201, 131, 110, 74, 61, 20, 192, 138, 127, 232, 37, 119, 56, 86, 69, 89, 123, 253, 112, 75, 61, 119, 114, 52, 164, 234, 179, 56, 43, 224, 247}, +{20, 118, 36, 86, 116, 139, 26, 238, 124, 205, 112, 196, 254, 154, 98, 196, 44, 140, 206, 80, 225, 255, 64, 111, 1, 89, 13, 164, 198, 113, 107, 19, 183, 179, 176, 56, 65, 11, 117, 248, 166, 193, 191, 253, 95, 118, 229, 30, 141, 236, 128, 87, 174, 76, 233, 117, 96, 226, 64, 34, 63, 73, 3, 1, 245, 141, 78, 45, 79, 93, 24, 171, 144, 161, 72, 229, 116, 223, 253, 223, 50, 143, 140, 227, 21, 204, 180, 33, 21, 77, 155, 33, 37, 180, 96, 40, 130, 153, 15, 158, 121, 180, 196, 78, 124, 22, 1, 183, 213, 239, 76, 20, 15, 109, 164, 72, 250, 54, 163, 197, 94, 199, 48, 183, 226, 83, 134, 246}, +{133, 79, 14, 97, 97, 216, 129, 194, 3, 93, 45, 82, 119, 75, 194, 82, 227, 100, 154, 36, 163, 176, 64, 80, 186, 125, 36, 135, 59, 178, 120, 128, 188, 102, 34, 226, 212, 221, 16, 129, 179, 91, 0, 79, 248, 20, 5, 89, 118, 75, 25, 161, 87, 139, 162, 18, 110, 89, 218, 47, 89, 91, 142, 84, 239, 103, 156, 254, 149, 125, 112, 9, 10, 93, 193, 123, 185, 102, 6, 24, 154, 175, 2, 205, 68, 42, 191, 249, 129, 161, 202, 201, 198, 67, 199, 19, 115, 41, 104, 145, 81, 49, 67, 247, 163, 11, 242, 244, 249, 225, 12, 25, 252, 144, 68, 55, 246, 80, 69, 159, 138, 56, 32, 7, 52, 204, 78, 196}, +{146, 46, 130, 71, 158, 118, 134, 108, 246, 238, 240, 214, 11, 16, 38, 126, 216, 169, 86, 126, 254, 37, 11, 205, 63, 175, 167, 204, 229, 7, 246, 143, 112, 65, 162, 139, 8, 126, 146, 134, 242, 123, 69, 1, 174, 230, 46, 237, 245, 218, 121, 37, 139, 92, 5, 177, 240, 67, 46, 198, 150, 154, 78, 84, 143, 12, 48, 108, 166, 143, 138, 244, 159, 65, 145, 43, 67, 99, 45, 51, 104, 168, 105, 85, 120, 95, 135, 121, 103, 26, 199, 10, 55, 128, 138, 54, 76, 7, 26, 111, 231, 98, 19, 243, 105, 99, 177, 102, 207, 123, 43, 204, 7, 246, 194, 131, 85, 2, 152, 191, 79, 65, 109, 133, 247, 213, 11, 63}, +{72, 134, 246, 154, 192, 82, 240, 245, 232, 252, 210, 253, 138, 193, 26, 246, 191, 158, 226, 130, 59, 213, 184, 59, 92, 74, 171, 34, 230, 145, 188, 187, 45, 118, 151, 30, 126, 238, 145, 254, 111, 169, 143, 87, 218, 65, 39, 35, 188, 156, 249, 110, 141, 216, 200, 150, 160, 224, 148, 3, 15, 185, 161, 162, 32, 208, 156, 239, 248, 172, 169, 119, 132, 250, 137, 7, 86, 15, 67, 31, 10, 17, 174, 67, 5, 41, 241, 170, 7, 93, 31, 195, 22, 34, 108, 147, 211, 30, 160, 3, 214, 48, 162, 23, 181, 24, 87, 149, 84, 204, 234, 58, 137, 167, 104, 167, 37, 237, 149, 83, 69, 116, 65, 210, 199, 106, 106, 98}, +{163, 10, 241, 238, 38, 35, 69, 51, 23, 174, 32, 190, 183, 66, 77, 62, 70, 93, 129, 252, 201, 42, 227, 175, 169, 168, 160, 33, 127, 108, 119, 170, 5, 214, 198, 72, 230, 212, 212, 149, 11, 67, 103, 162, 197, 48, 154, 14, 62, 152, 232, 216, 196, 250, 216, 171, 87, 31, 70, 206, 252, 159, 157, 106, 222, 106, 111, 192, 74, 229, 91, 215, 72, 225, 172, 76, 176, 104, 112, 214, 2, 41, 175, 12, 36, 105, 144, 156, 25, 222, 135, 16, 30, 207, 179, 32, 80, 177, 127, 134, 102, 88, 246, 60, 31, 14, 193, 142, 90, 245, 243, 253, 238, 15, 39, 101, 202, 108, 243, 72, 138, 100, 125, 144, 155, 1, 232, 148}, +{10, 106, 7, 160, 119, 13, 246, 221, 183, 88, 17, 122, 9, 102, 194, 146, 62, 64, 157, 110, 198, 112, 183, 209, 199, 63, 108, 115, 246, 62, 199, 114, 223, 180, 145, 241, 188, 159, 15, 186, 2, 29, 73, 142, 31, 63, 229, 251, 234, 159, 229, 78, 117, 216, 233, 245, 115, 182, 228, 8, 189, 105, 37, 94, 170, 69, 157, 48, 65, 136, 166, 37, 143, 114, 40, 92, 197, 63, 59, 212, 125, 117, 126, 130, 220, 194, 173, 104, 23, 227, 12, 3, 120, 110, 127, 169, 100, 178, 204, 25, 221, 87, 123, 107, 168, 66, 92, 177, 205, 240, 20, 78, 204, 134, 239, 49, 19, 158, 219, 17, 243, 252, 22, 213, 91, 201, 48, 240}, +{23, 187, 224, 19, 67, 217, 154, 87, 120, 171, 47, 237, 176, 35, 231, 167, 34, 53, 87, 21, 218, 111, 24, 115, 251, 244, 69, 5, 146, 231, 83, 58, 86, 189, 161, 239, 206, 87, 231, 35, 158, 160, 123, 244, 211, 237, 199, 3, 162, 141, 7, 185, 107, 215, 250, 44, 161, 130, 20, 191, 58, 138, 198, 181, 89, 176, 91, 162, 80, 87, 78, 88, 8, 101, 89, 93, 145, 219, 136, 246, 230, 206, 48, 122, 234, 219, 147, 172, 68, 167, 182, 108, 149, 200, 142, 156, 6, 65, 126, 28, 59, 170, 181, 240, 105, 246, 50, 110, 31, 178, 84, 71, 160, 67, 111, 168, 190, 74, 193, 218, 81, 237, 212, 72, 240, 173, 134, 65}, +{48, 232, 215, 174, 28, 226, 214, 71, 8, 213, 82, 74, 156, 60, 156, 51, 95, 46, 27, 174, 147, 181, 173, 186, 178, 32, 224, 37, 77, 14, 143, 39, 252, 60, 18, 39, 185, 133, 20, 92, 134, 90, 172, 147, 73, 81, 195, 115, 135, 106, 75, 155, 176, 73, 0, 82, 212, 107, 135, 10, 119, 71, 254, 141, 178, 153, 36, 88, 79, 151, 230, 86, 77, 18, 22, 253, 174, 80, 163, 85, 64, 64, 10, 121, 19, 229, 20, 157, 133, 234, 178, 60, 178, 61, 176, 233, 121, 110, 206, 161, 178, 83, 163, 138, 139, 28, 99, 242, 111, 21, 233, 241, 173, 47, 242, 114, 144, 64, 167, 198, 64, 158, 61, 80, 105, 195, 106, 28}, +{149, 210, 197, 94, 137, 126, 210, 101, 32, 48, 3, 175, 191, 20, 123, 118, 220, 66, 100, 66, 118, 183, 152, 9, 48, 40, 189, 185, 89, 191, 132, 237, 233, 234, 200, 57, 220, 3, 54, 244, 9, 137, 238, 212, 170, 205, 28, 8, 64, 32, 58, 255, 170, 182, 51, 252, 150, 200, 137, 226, 212, 201, 72, 1, 208, 14, 186, 25, 227, 46, 84, 91, 208, 205, 214, 120, 218, 38, 77, 102, 78, 18, 51, 60, 86, 11, 142, 172, 194, 224, 147, 110, 144, 86, 241, 172, 43, 159, 120, 106, 89, 140, 173, 54, 158, 36, 92, 168, 179, 147, 62, 136, 78, 125, 193, 80, 237, 71, 25, 79, 153, 62, 215, 169, 14, 213, 20, 178}, +{197, 128, 169, 141, 23, 157, 110, 203, 113, 69, 252, 212, 156, 122, 157, 25, 166, 137, 133, 156, 56, 62, 253, 11, 193, 113, 38, 227, 222, 13, 66, 191, 91, 253, 79, 219, 233, 153, 65, 17, 9, 171, 188, 111, 216, 13, 78, 47, 210, 194, 56, 242, 53, 37, 55, 213, 186, 122, 154, 242, 112, 234, 67, 41, 45, 15, 60, 156, 15, 29, 178, 194, 58, 56, 18, 130, 238, 250, 167, 128, 61, 222, 223, 188, 81, 203, 19, 114, 240, 209, 143, 137, 115, 13, 36, 118, 215, 189, 2, 24, 1, 182, 189, 11, 58, 133, 52, 100, 43, 127, 154, 65, 103, 131, 118, 53, 22, 216, 34, 141, 34, 163, 135, 115, 108, 87, 164, 226}, +{61, 29, 233, 152, 44, 103, 117, 213, 214, 161, 238, 74, 50, 67, 202, 21, 135, 72, 18, 107, 214, 4, 114, 71, 137, 114, 135, 225, 226, 46, 60, 145, 242, 95, 21, 147, 83, 176, 163, 99, 74, 204, 149, 194, 130, 109, 56, 228, 11, 19, 173, 48, 134, 187, 19, 13, 206, 175, 160, 29, 201, 44, 175, 39, 113, 193, 144, 169, 186, 219, 13, 99, 121, 207, 51, 200, 120, 215, 169, 138, 155, 106, 70, 215, 122, 58, 172, 215, 250, 1, 179, 246, 124, 102, 226, 191, 198, 100, 210, 208, 79, 75, 253, 68, 30, 53, 41, 107, 145, 199, 104, 120, 65, 9, 162, 175, 47, 35, 91, 193, 163, 8, 110, 169, 34, 125, 18, 126}, +{154, 8, 212, 113, 250, 170, 128, 183, 161, 199, 141, 100, 119, 114, 51, 188, 53, 214, 51, 234, 255, 11, 152, 218, 196, 43, 98, 248, 35, 131, 55, 144, 199, 217, 151, 39, 18, 227, 230, 94, 239, 4, 241, 47, 113, 73, 148, 189, 17, 43, 57, 183, 140, 207, 80, 21, 37, 230, 77, 65, 73, 225, 233, 160, 168, 17, 16, 143, 189, 225, 208, 30, 128, 27, 192, 211, 105, 132, 29, 81, 132, 59, 129, 234, 131, 167, 179, 240, 12, 106, 129, 66, 68, 205, 74, 105, 94, 167, 2, 70, 112, 111, 10, 99, 221, 227, 238, 172, 205, 132, 24, 251, 111, 201, 242, 18, 132, 183, 136, 253, 34, 98, 68, 255, 36, 212, 16, 171}, +{84, 216, 196, 181, 229, 104, 221, 227, 203, 174, 198, 134, 18, 221, 152, 166, 58, 51, 151, 63, 109, 116, 145, 156, 17, 97, 50, 243, 18, 210, 42, 235, 132, 33, 123, 41, 165, 200, 179, 42, 31, 128, 95, 253, 106, 206, 111, 36, 254, 177, 134, 118, 229, 176, 107, 229, 222, 177, 89, 59, 54, 136, 165, 249, 68, 169, 234, 123, 240, 145, 115, 75, 106, 77, 136, 254, 236, 118, 206, 57, 206, 11, 84, 157, 225, 237, 234, 156, 207, 206, 47, 84, 91, 44, 149, 206, 223, 205, 249, 218, 78, 165, 253, 221, 251, 166, 72, 50, 254, 106, 78, 42, 9, 80, 145, 41, 83, 75, 116, 180, 186, 225, 141, 119, 17, 236, 251, 160}, +{132, 16, 245, 254, 157, 113, 164, 7, 182, 228, 144, 22, 63, 199, 139, 123, 173, 206, 107, 118, 113, 190, 174, 10, 68, 226, 103, 243, 214, 86, 153, 211, 118, 225, 45, 107, 113, 38, 5, 252, 175, 176, 214, 65, 2, 20, 26, 52, 11, 139, 46, 47, 90, 164, 128, 120, 39, 99, 164, 62, 70, 203, 130, 95, 21, 61, 194, 40, 135, 22, 227, 72, 170, 69, 240, 199, 7, 190, 103, 56, 12, 171, 171, 167, 149, 116, 40, 169, 219, 130, 221, 191, 155, 39, 253, 187, 235, 243, 235, 3, 182, 20, 82, 146, 94, 244, 151, 103, 131, 107, 98, 92, 69, 42, 42, 152, 161, 230, 157, 103, 72, 88, 244, 55, 12, 25, 248, 32}, +{192, 155, 255, 105, 11, 128, 170, 144, 111, 27, 84, 248, 168, 154, 82, 84, 251, 107, 18, 171, 122, 209, 235, 25, 209, 176, 167, 206, 145, 32, 97, 26, 67, 240, 30, 209, 108, 145, 30, 92, 127, 56, 3, 124, 73, 233, 30, 45, 240, 68, 25, 216, 217, 83, 58, 25, 52, 4, 108, 98, 251, 200, 249, 67, 216, 63, 201, 91, 84, 36, 243, 110, 69, 237, 203, 127, 33, 203, 47, 45, 4, 143, 165, 137, 209, 88, 125, 69, 189, 251, 151, 157, 96, 59, 148, 252, 57, 61, 180, 86, 244, 23, 182, 156, 126, 197, 9, 129, 33, 233, 168, 2, 92, 5, 31, 42, 211, 202, 113, 134, 91, 213, 225, 123, 141, 186, 201, 110}, +{175, 40, 38, 154, 132, 204, 118, 89, 170, 21, 164, 61, 35, 84, 15, 78, 17, 88, 113, 106, 82, 95, 15, 155, 228, 92, 56, 60, 238, 75, 130, 250, 239, 33, 91, 200, 247, 221, 68, 212, 48, 203, 240, 24, 77, 217, 173, 230, 221, 104, 184, 186, 96, 75, 210, 197, 125, 157, 137, 48, 107, 152, 108, 6, 23, 153, 113, 5, 54, 30, 112, 246, 231, 243, 159, 143, 75, 32, 236, 23, 86, 115, 191, 164, 235, 198, 212, 159, 76, 171, 67, 154, 120, 233, 223, 197, 59, 227, 86, 162, 200, 193, 218, 182, 212, 130, 213, 215, 82, 242, 61, 11, 78, 139, 174, 96, 133, 203, 126, 247, 113, 182, 166, 24, 16, 248, 108, 148}, +{139, 16, 204, 159, 194, 200, 125, 7, 28, 42, 179, 96, 121, 206, 35, 0, 160, 232, 116, 234, 121, 12, 126, 53, 48, 184, 56, 108, 95, 212, 21, 129, 13, 34, 207, 60, 192, 112, 187, 93, 196, 239, 128, 82, 206, 178, 129, 213, 1, 159, 7, 93, 150, 251, 71, 105, 124, 57, 219, 64, 208, 143, 254, 234, 76, 80, 96, 156, 30, 195, 226, 161, 122, 62, 187, 146, 219, 119, 106, 127, 65, 157, 12, 40, 254, 122, 132, 143, 180, 233, 254, 209, 74, 201, 188, 183, 82, 155, 178, 42, 219, 7, 70, 188, 107, 194, 231, 138, 94, 121, 171, 64, 17, 156, 17, 247, 149, 240, 220, 171, 168, 51, 95, 208, 130, 46, 207, 78}, +{34, 26, 32, 63, 244, 30, 221, 115, 20, 57, 210, 255, 85, 10, 175, 185, 75, 75, 111, 11, 6, 84, 20, 114, 218, 68, 208, 238, 104, 139, 60, 104, 66, 138, 118, 147, 200, 225, 23, 93, 225, 193, 96, 114, 122, 226, 141, 162, 62, 139, 28, 243, 233, 108, 89, 228, 159, 255, 61, 30, 248, 208, 17, 230, 47, 102, 147, 190, 169, 105, 249, 48, 28, 156, 100, 143, 47, 250, 208, 14, 102, 159, 111, 201, 228, 115, 52, 77, 211, 53, 197, 29, 24, 180, 106, 138, 111, 14, 92, 47, 111, 60, 0, 98, 4, 93, 176, 118, 70, 247, 202, 90, 88, 196, 206, 118, 144, 17, 31, 82, 65, 142, 26, 44, 143, 105, 92, 19}, +{69, 137, 231, 169, 42, 168, 209, 114, 155, 228, 122, 100, 182, 246, 176, 205, 255, 39, 176, 222, 144, 183, 11, 136, 175, 192, 141, 111, 195, 0, 53, 181, 213, 184, 124, 114, 211, 255, 223, 69, 122, 179, 166, 176, 50, 39, 15, 192, 19, 17, 0, 231, 193, 17, 143, 22, 33, 71, 120, 76, 28, 93, 171, 31, 27, 109, 238, 84, 206, 105, 93, 133, 168, 34, 246, 112, 181, 188, 39, 16, 218, 127, 248, 25, 170, 24, 201, 252, 186, 228, 106, 118, 131, 235, 59, 202, 60, 141, 195, 158, 77, 143, 199, 39, 70, 11, 39, 98, 167, 85, 210, 94, 96, 208, 249, 74, 177, 103, 49, 99, 186, 39, 34, 126, 76, 117, 63, 178}, +{150, 113, 251, 234, 133, 53, 229, 244, 171, 113, 114, 231, 41, 205, 114, 104, 173, 110, 110, 34, 30, 107, 90, 58, 156, 83, 215, 117, 60, 148, 100, 117, 101, 125, 150, 72, 136, 190, 247, 155, 85, 165, 116, 20, 36, 222, 182, 1, 106, 125, 209, 198, 110, 237, 114, 188, 45, 3, 149, 58, 238, 121, 18, 154, 11, 97, 8, 201, 173, 55, 207, 160, 237, 73, 138, 28, 178, 173, 75, 142, 68, 34, 15, 204, 113, 100, 123, 102, 6, 122, 166, 113, 226, 148, 167, 90, 146, 176, 3, 180, 59, 68, 196, 203, 49, 70, 203, 177, 88, 7, 130, 85, 234, 172, 34, 38, 117, 57, 160, 56, 119, 198, 29, 153, 55, 167, 109, 33}, +{165, 74, 12, 191, 209, 18, 93, 154, 55, 148, 233, 169, 64, 27, 123, 169, 92, 87, 154, 67, 51, 215, 199, 43, 94, 106, 117, 119, 63, 138, 165, 211, 4, 49, 40, 252, 61, 221, 50, 119, 223, 159, 228, 92, 96, 116, 105, 81, 223, 84, 116, 164, 107, 127, 174, 240, 35, 165, 176, 156, 114, 41, 78, 44, 17, 90, 148, 146, 209, 214, 200, 152, 231, 146, 237, 144, 189, 131, 22, 248, 221, 23, 52, 63, 134, 22, 33, 23, 86, 10, 162, 91, 170, 129, 24, 26, 132, 192, 185, 6, 99, 112, 157, 222, 195, 16, 181, 143, 202, 139, 82, 223, 226, 149, 126, 233, 64, 167, 214, 51, 182, 168, 40, 46, 71, 226, 235, 2}, +{90, 38, 179, 7, 193, 104, 121, 209, 111, 193, 106, 49, 192, 86, 232, 178, 114, 182, 42, 57, 254, 101, 160, 123, 37, 1, 156, 149, 88, 46, 90, 139, 44, 146, 137, 215, 123, 65, 109, 21, 180, 155, 30, 110, 75, 229, 234, 103, 196, 7, 195, 8, 14, 63, 175, 191, 154, 100, 11, 74, 59, 102, 253, 105, 191, 202, 39, 241, 102, 226, 172, 58, 177, 194, 102, 181, 88, 156, 147, 17, 163, 218, 88, 176, 163, 150, 51, 202, 104, 200, 113, 213, 73, 18, 183, 40, 58, 167, 73, 192, 78, 179, 20, 34, 78, 203, 23, 86, 127, 171, 125, 201, 245, 254, 222, 13, 107, 63, 226, 3, 253, 35, 36, 145, 204, 129, 185, 17}, +{176, 43, 3, 110, 159, 24, 160, 14, 195, 20, 230, 28, 113, 60, 244, 165, 226, 41, 191, 27, 203, 221, 113, 61, 62, 117, 34, 176, 9, 65, 54, 78, 194, 235, 175, 88, 159, 151, 245, 21, 194, 200, 47, 73, 39, 124, 80, 186, 185, 95, 237, 196, 171, 2, 178, 136, 3, 47, 255, 98, 129, 109, 49, 100, 217, 64, 156, 91, 53, 246, 52, 4, 127, 39, 21, 238, 108, 242, 60, 57, 133, 11, 101, 179, 42, 140, 99, 102, 70, 100, 157, 245, 83, 56, 145, 36, 125, 39, 135, 117, 205, 127, 84, 161, 129, 162, 198, 2, 253, 197, 41, 243, 223, 233, 54, 141, 23, 166, 110, 77, 226, 235, 177, 197, 129, 162, 118, 122}, +{89, 137, 116, 19, 126, 20, 250, 232, 228, 200, 180, 108, 22, 231, 171, 135, 196, 190, 0, 101, 213, 188, 226, 199, 91, 89, 152, 106, 223, 20, 181, 103, 142, 228, 125, 53, 214, 210, 121, 248, 215, 135, 205, 99, 16, 17, 228, 243, 38, 72, 64, 4, 84, 13, 142, 203, 148, 110, 107, 16, 188, 223, 210, 239, 197, 22, 216, 69, 189, 227, 96, 129, 7, 197, 230, 20, 60, 240, 140, 0, 45, 214, 22, 199, 185, 237, 25, 7, 75, 179, 142, 51, 25, 255, 150, 59, 176, 170, 126, 188, 1, 22, 102, 195, 29, 82, 88, 46, 101, 61, 47, 136, 220, 211, 205, 133, 131, 221, 0, 168, 151, 240, 255, 219, 68, 240, 66, 117}, +{133, 66, 220, 154, 160, 121, 129, 163, 22, 103, 241, 165, 152, 112, 53, 248, 66, 234, 202, 135, 122, 211, 107, 49, 204, 239, 125, 253, 145, 113, 140, 215, 194, 251, 202, 69, 61, 218, 20, 216, 203, 59, 175, 205, 240, 169, 48, 119, 164, 45, 36, 154, 57, 102, 70, 129, 133, 24, 150, 237, 79, 229, 136, 164, 115, 133, 68, 227, 244, 238, 44, 153, 93, 183, 216, 107, 67, 66, 69, 236, 32, 144, 155, 7, 99, 251, 111, 218, 22, 145, 240, 95, 101, 124, 188, 12, 45, 7, 43, 18, 54, 238, 38, 20, 189, 127, 174, 108, 7, 36, 245, 253, 255, 141, 64, 170, 204, 207, 66, 27, 96, 79, 50, 76, 214, 72, 33, 226}, +{199, 212, 90, 1, 189, 80, 84, 205, 120, 242, 26, 81, 233, 50, 63, 176, 50, 253, 88, 70, 18, 107, 248, 195, 211, 4, 141, 138, 200, 243, 141, 61, 172, 136, 118, 228, 150, 246, 128, 56, 86, 9, 45, 24, 12, 171, 79, 246, 94, 196, 41, 16, 106, 216, 202, 188, 238, 143, 98, 220, 104, 42, 100, 186, 171, 103, 238, 40, 249, 123, 123, 149, 248, 48, 201, 223, 208, 113, 189, 167, 90, 61, 64, 129, 121, 46, 48, 198, 46, 68, 251, 50, 192, 64, 37, 156, 98, 221, 113, 170, 73, 194, 58, 129, 91, 66, 132, 106, 117, 188, 159, 131, 53, 218, 86, 127, 176, 243, 140, 117, 222, 85, 172, 16, 211, 213, 108, 97}, +{89, 144, 152, 7, 39, 65, 252, 179, 164, 131, 7, 148, 218, 105, 153, 251, 250, 77, 91, 206, 200, 100, 244, 145, 22, 96, 26, 143, 49, 143, 27, 6, 98, 237, 138, 59, 208, 9, 90, 103, 116, 121, 101, 111, 238, 140, 207, 100, 78, 157, 236, 21, 180, 242, 197, 144, 102, 2, 64, 102, 162, 21, 244, 6, 205, 52, 3, 116, 121, 18, 96, 30, 235, 120, 140, 201, 110, 141, 91, 46, 153, 160, 61, 206, 105, 82, 207, 145, 17, 13, 221, 67, 164, 43, 61, 127, 46, 36, 126, 114, 118, 77, 16, 158, 199, 23, 201, 91, 134, 22, 115, 129, 244, 119, 242, 114, 67, 183, 169, 66, 90, 254, 136, 109, 125, 166, 62, 107}, +{48, 110, 122, 199, 213, 82, 23, 64, 72, 188, 67, 196, 230, 227, 229, 215, 107, 238, 177, 237, 194, 104, 72, 96, 65, 171, 158, 9, 180, 110, 95, 13, 32, 221, 234, 50, 172, 203, 251, 237, 5, 213, 27, 75, 243, 189, 126, 96, 241, 151, 83, 224, 104, 9, 121, 230, 57, 138, 213, 50, 52, 246, 36, 54, 234, 47, 130, 11, 37, 92, 134, 91, 168, 43, 220, 253, 24, 105, 100, 96, 21, 242, 38, 144, 12, 82, 131, 32, 128, 129, 76, 204, 177, 49, 128, 87, 81, 131, 152, 172, 254, 149, 143, 236, 47, 96, 46, 156, 116, 84, 28, 70, 245, 12, 193, 155, 255, 90, 59, 45, 108, 64, 73, 109, 141, 252, 165, 230}, +{114, 174, 254, 141, 190, 133, 102, 162, 128, 201, 223, 190, 78, 55, 11, 206, 224, 112, 123, 46, 45, 169, 216, 0, 251, 248, 192, 158, 39, 146, 36, 14, 32, 176, 153, 40, 245, 215, 149, 190, 134, 230, 9, 128, 170, 95, 127, 212, 147, 232, 42, 110, 175, 111, 73, 158, 170, 45, 244, 118, 120, 31, 14, 132, 37, 15, 91, 247, 54, 176, 76, 211, 226, 232, 162, 94, 199, 224, 10, 190, 37, 85, 5, 132, 116, 59, 33, 30, 130, 246, 92, 154, 44, 189, 174, 31, 190, 78, 208, 12, 20, 18, 63, 90, 105, 54, 11, 61, 251, 212, 124, 206, 129, 160, 6, 117, 209, 16, 239, 17, 187, 40, 193, 138, 150, 142, 186, 105}, +{176, 219, 31, 52, 237, 92, 13, 174, 86, 143, 215, 126, 114, 203, 104, 121, 7, 175, 194, 73, 161, 204, 186, 118, 206, 204, 132, 126, 179, 59, 196, 15, 190, 208, 173, 0, 6, 241, 255, 36, 139, 124, 80, 31, 85, 89, 59, 191, 25, 47, 66, 81, 241, 131, 222, 150, 130, 92, 54, 17, 187, 58, 176, 196, 74, 178, 180, 148, 189, 67, 139, 219, 128, 143, 42, 226, 166, 78, 44, 2, 242, 48, 28, 35, 66, 141, 199, 56, 113, 172, 221, 69, 211, 241, 160, 1, 33, 115, 161, 246, 11, 181, 74, 178, 54, 131, 214, 164, 4, 160, 133, 198, 129, 116, 161, 96, 208, 29, 43, 63, 171, 80, 79, 233, 61, 41, 139, 185}, +{104, 94, 187, 114, 20, 227, 52, 227, 18, 42, 248, 87, 20, 62, 162, 247, 114, 23, 179, 40, 84, 71, 46, 240, 112, 161, 8, 54, 29, 121, 198, 83, 207, 58, 191, 94, 233, 84, 252, 112, 182, 141, 81, 227, 89, 250, 245, 131, 221, 244, 12, 172, 130, 158, 68, 132, 74, 96, 210, 29, 239, 134, 47, 154, 9, 251, 31, 14, 250, 126, 141, 75, 81, 76, 13, 152, 116, 202, 30, 166, 194, 204, 3, 107, 35, 144, 45, 13, 18, 114, 128, 34, 180, 191, 239, 121, 74, 71, 203, 3, 234, 91, 194, 0, 4, 125, 126, 252, 131, 57, 192, 63, 70, 189, 80, 208, 203, 231, 9, 105, 27, 238, 42, 137, 227, 225, 125, 66}, +{175, 197, 215, 0, 141, 105, 181, 224, 196, 187, 140, 205, 222, 198, 232, 29, 180, 49, 98, 161, 133, 63, 130, 10, 34, 81, 112, 166, 56, 140, 73, 31, 119, 62, 232, 102, 247, 99, 119, 115, 49, 244, 187, 135, 77, 121, 112, 24, 249, 158, 158, 213, 88, 252, 141, 139, 13, 81, 134, 223, 47, 130, 115, 122, 165, 197, 242, 52, 240, 46, 10, 0, 243, 192, 240, 98, 110, 237, 213, 210, 193, 37, 53, 180, 58, 155, 159, 143, 206, 183, 60, 190, 193, 18, 206, 162, 196, 130, 57, 24, 154, 183, 144, 132, 62, 125, 21, 194, 192, 140, 40, 35, 229, 145, 4, 58, 34, 165, 46, 47, 9, 143, 160, 184, 228, 248, 248, 101}, +{105, 143, 245, 215, 66, 35, 173, 173, 114, 237, 173, 218, 240, 107, 33, 210, 232, 70, 81, 132, 63, 90, 117, 12, 113, 44, 191, 161, 219, 248, 203, 153, 165, 153, 84, 37, 155, 92, 255, 125, 103, 10, 82, 224, 75, 224, 97, 213, 178, 68, 110, 56, 187, 49, 90, 183, 90, 52, 108, 150, 82, 66, 228, 112, 227, 110, 250, 102, 24, 55, 171, 176, 124, 104, 23, 123, 228, 3, 230, 91, 144, 176, 206, 118, 83, 171, 15, 100, 124, 130, 231, 4, 203, 19, 204, 6, 228, 92, 246, 22, 85, 201, 98, 101, 142, 169, 104, 6, 114, 76, 118, 9, 213, 210, 94, 248, 46, 242, 47, 131, 70, 255, 231, 123, 180, 74, 151, 149}, +{128, 35, 152, 201, 15, 113, 193, 168, 245, 88, 181, 92, 204, 7, 144, 98, 74, 160, 94, 216, 89, 28, 1, 40, 186, 26, 172, 136, 5, 148, 240, 71, 99, 83, 212, 181, 216, 50, 54, 8, 231, 208, 247, 122, 75, 7, 28, 115, 62, 237, 203, 208, 89, 107, 17, 0, 149, 162, 93, 27, 146, 93, 106, 140, 119, 120, 198, 199, 226, 238, 83, 206, 155, 128, 26, 204, 95, 25, 222, 155, 142, 169, 21, 146, 13, 7, 132, 39, 24, 230, 217, 246, 255, 128, 23, 132, 129, 89, 144, 8, 240, 226, 217, 177, 173, 191, 195, 206, 34, 177, 216, 232, 160, 89, 165, 120, 233, 254, 5, 103, 5, 53, 127, 68, 215, 25, 11, 60}, +{181, 252, 199, 28, 127, 194, 101, 222, 176, 157, 71, 66, 66, 30, 224, 157, 93, 23, 73, 187, 102, 48, 92, 146, 216, 14, 165, 138, 68, 111, 81, 136, 1, 61, 50, 183, 240, 136, 94, 110, 176, 162, 232, 134, 7, 117, 226, 31, 11, 80, 136, 195, 49, 156, 254, 211, 0, 26, 117, 239, 109, 150, 215, 232, 239, 27, 115, 64, 22, 1, 232, 117, 221, 90, 193, 101, 177, 81, 26, 189, 129, 70, 211, 166, 12, 94, 73, 26, 138, 81, 253, 49, 42, 78, 174, 203, 37, 120, 140, 162, 123, 19, 222, 187, 132, 18, 56, 183, 230, 87, 63, 106, 104, 217, 21, 163, 198, 103, 147, 15, 23, 208, 4, 27, 117, 88, 4, 88}, +{147, 111, 190, 229, 106, 78, 96, 97, 105, 68, 129, 113, 122, 161, 13, 13, 11, 161, 53, 205, 37, 226, 99, 53, 53, 187, 22, 71, 250, 153, 180, 232, 232, 135, 26, 188, 5, 169, 194, 77, 240, 197, 67, 83, 185, 185, 164, 15, 110, 245, 144, 203, 141, 154, 162, 67, 25, 198, 141, 100, 100, 123, 2, 101, 13, 159, 2, 114, 251, 0, 121, 166, 7, 105, 162, 94, 108, 110, 174, 11, 181, 48, 94, 228, 186, 100, 8, 99, 39, 147, 26, 104, 252, 187, 120, 216, 94, 148, 116, 38, 148, 188, 236, 16, 168, 45, 252, 83, 141, 238, 59, 226, 125, 138, 159, 138, 0, 232, 60, 115, 226, 224, 61, 28, 102, 186, 88, 160}, +{170, 130, 123, 17, 245, 118, 178, 158, 173, 162, 231, 128, 41, 208, 116, 24, 59, 106, 206, 229, 78, 113, 158, 228, 224, 166, 2, 50, 130, 196, 8, 168, 142, 124, 21, 221, 209, 96, 139, 75, 165, 118, 189, 33, 129, 39, 8, 129, 49, 40, 132, 228, 179, 115, 92, 43, 18, 34, 190, 179, 50, 46, 215, 87, 187, 187, 72, 224, 70, 223, 205, 57, 82, 39, 232, 135, 224, 1, 202, 232, 182, 42, 117, 173, 83, 57, 81, 35, 185, 4, 43, 147, 58, 70, 211, 198, 168, 94, 93, 211, 96, 157, 239, 221, 19, 126, 95, 169, 87, 121, 101, 74, 231, 150, 178, 212, 56, 254, 192, 97, 25, 77, 46, 57, 236, 213, 207, 129}, +{208, 199, 9, 53, 175, 213, 247, 224, 178, 67, 226, 29, 196, 231, 221, 41, 44, 9, 231, 163, 76, 174, 196, 58, 101, 66, 213, 245, 91, 205, 109, 105, 100, 31, 250, 206, 64, 135, 126, 31, 141, 151, 206, 66, 229, 3, 23, 243, 126, 194, 133, 167, 233, 102, 226, 190, 114, 84, 158, 232, 128, 228, 196, 212, 85, 239, 175, 254, 243, 200, 145, 11, 166, 101, 71, 149, 116, 70, 24, 176, 99, 136, 194, 202, 65, 218, 252, 74, 190, 154, 62, 60, 228, 140, 118, 172, 157, 163, 208, 137, 12, 200, 193, 241, 125, 233, 68, 10, 41, 201, 143, 135, 139, 196, 79, 201, 157, 79, 231, 17, 68, 143, 47, 47, 136, 75, 168, 105}, +{92, 207, 72, 176, 171, 46, 79, 251, 93, 151, 203, 142, 17, 87, 47, 239, 214, 106, 142, 221, 187, 202, 196, 103, 220, 242, 95, 234, 32, 249, 215, 47, 112, 219, 140, 172, 123, 124, 78, 182, 189, 235, 250, 38, 21, 9, 228, 30, 219, 184, 77, 180, 124, 57, 61, 110, 208, 61, 33, 216, 75, 56, 115, 148, 178, 68, 251, 115, 193, 221, 122, 214, 192, 66, 143, 170, 158, 145, 53, 153, 122, 224, 101, 104, 156, 5, 188, 155, 74, 198, 138, 235, 179, 72, 85, 119, 67, 3, 41, 250, 174, 54, 30, 153, 37, 17, 173, 85, 207, 166, 43, 40, 239, 75, 11, 137, 110, 44, 152, 15, 182, 49, 159, 133, 229, 165, 43, 251}, +{1, 223, 40, 58, 131, 167, 189, 7, 104, 6, 241, 253, 95, 142, 73, 205, 172, 136, 195, 233, 3, 219, 77, 140, 241, 96, 36, 223, 217, 198, 196, 173, 235, 105, 107, 66, 135, 92, 190, 132, 71, 49, 197, 16, 72, 118, 75, 8, 161, 167, 119, 71, 47, 175, 78, 113, 123, 192, 67, 252, 3, 61, 200, 94, 196, 103, 107, 115, 98, 147, 200, 123, 103, 148, 41, 95, 239, 75, 22, 157, 170, 163, 26, 195, 27, 81, 163, 127, 100, 92, 103, 52, 46, 35, 124, 205, 234, 58, 107, 93, 1, 90, 178, 117, 86, 25, 137, 49, 146, 136, 166, 218, 6, 147, 125, 31, 66, 152, 197, 0, 107, 189, 251, 23, 72, 213, 144, 58}, +{143, 59, 106, 33, 197, 18, 202, 246, 93, 2, 156, 66, 67, 56, 165, 20, 5, 22, 152, 31, 46, 44, 65, 22, 75, 46, 134, 136, 100, 49, 103, 127, 245, 116, 66, 23, 173, 55, 74, 71, 90, 57, 98, 185, 62, 182, 26, 250, 70, 144, 15, 107, 82, 180, 221, 251, 34, 12, 118, 115, 25, 119, 109, 51, 234, 245, 86, 185, 62, 215, 211, 85, 118, 65, 124, 28, 4, 255, 90, 52, 143, 198, 246, 52, 72, 108, 68, 142, 70, 220, 62, 129, 153, 202, 174, 18, 1, 90, 82, 29, 124, 115, 32, 64, 78, 253, 180, 93, 37, 58, 213, 129, 234, 43, 216, 209, 90, 250, 103, 124, 45, 43, 39, 83, 54, 147, 37, 205}, +{19, 182, 79, 21, 203, 202, 248, 49, 11, 80, 142, 98, 162, 239, 104, 82, 117, 167, 176, 81, 163, 84, 14, 207, 161, 234, 159, 157, 126, 177, 53, 68, 31, 141, 54, 149, 0, 111, 43, 164, 141, 23, 138, 84, 96, 255, 167, 237, 197, 1, 163, 181, 114, 248, 254, 67, 143, 126, 225, 81, 93, 72, 1, 119, 47, 180, 110, 80, 167, 154, 16, 254, 123, 12, 249, 83, 172, 83, 27, 26, 148, 35, 119, 65, 71, 93, 253, 129, 194, 82, 62, 144, 248, 63, 122, 210, 49, 126, 99, 15, 81, 133, 25, 168, 156, 250, 109, 248, 163, 188, 127, 160, 19, 137, 226, 122, 31, 69, 240, 94, 204, 153, 193, 179, 144, 3, 126, 59}, +{85, 63, 80, 115, 43, 0, 220, 251, 138, 241, 9, 233, 149, 218, 23, 70, 207, 105, 252, 24, 222, 45, 110, 5, 43, 238, 210, 248, 151, 12, 134, 195, 164, 83, 165, 252, 122, 231, 57, 151, 244, 180, 48, 88, 212, 10, 191, 125, 23, 54, 181, 194, 131, 185, 83, 174, 118, 250, 148, 240, 98, 178, 86, 215, 55, 181, 112, 121, 238, 255, 210, 79, 23, 14, 58, 127, 139, 155, 172, 22, 128, 197, 78, 102, 156, 130, 57, 186, 191, 6, 111, 228, 20, 174, 157, 25, 13, 238, 76, 124, 79, 210, 105, 13, 38, 106, 54, 151, 9, 128, 82, 252, 237, 10, 247, 209, 88, 106, 18, 58, 28, 247, 132, 15, 225, 77, 58, 160}, +{136, 181, 196, 207, 19, 43, 243, 203, 106, 203, 75, 144, 216, 158, 145, 52, 196, 95, 203, 7, 81, 75, 86, 115, 2, 125, 186, 43, 78, 57, 169, 89, 65, 216, 120, 78, 182, 176, 141, 71, 118, 114, 129, 102, 184, 169, 75, 239, 61, 250, 86, 96, 254, 213, 205, 42, 160, 240, 152, 197, 219, 119, 187, 200, 3, 180, 76, 254, 222, 205, 5, 169, 21, 147, 63, 133, 120, 228, 44, 19, 141, 186, 206, 92, 165, 123, 175, 200, 13, 121, 199, 185, 50, 94, 72, 147, 246, 133, 63, 130, 96, 147, 139, 7, 66, 172, 173, 39, 208, 95, 58, 123, 24, 79, 26, 202, 38, 62, 173, 229, 106, 72, 170, 134, 9, 186, 18, 215}, +{126, 119, 58, 83, 135, 116, 238, 151, 44, 97, 69, 212, 248, 115, 70, 140, 213, 100, 204, 92, 33, 186, 184, 21, 45, 220, 55, 88, 225, 113, 139, 70, 229, 150, 161, 205, 232, 20, 117, 102, 180, 12, 235, 230, 22, 14, 177, 188, 42, 224, 10, 12, 0, 190, 203, 29, 132, 25, 87, 110, 146, 191, 102, 217, 93, 90, 178, 171, 108, 239, 146, 97, 162, 90, 43, 210, 123, 207, 144, 212, 62, 204, 59, 143, 182, 241, 239, 208, 146, 185, 108, 237, 149, 75, 137, 222, 22, 185, 160, 143, 201, 112, 62, 97, 32, 128, 85, 151, 121, 86, 115, 202, 83, 211, 112, 11, 159, 161, 35, 151, 128, 93, 106, 65, 148, 104, 26, 29}, +{102, 205, 217, 134, 34, 7, 147, 41, 40, 132, 75, 191, 41, 147, 193, 6, 11, 231, 243, 147, 114, 34, 245, 153, 188, 82, 234, 202, 1, 49, 171, 95, 172, 87, 9, 67, 156, 82, 88, 95, 163, 80, 80, 204, 74, 109, 43, 144, 239, 157, 142, 224, 2, 77, 251, 78, 200, 59, 105, 14, 223, 175, 111, 57, 98, 76, 113, 56, 174, 44, 185, 84, 154, 126, 121, 20, 82, 135, 74, 203, 158, 147, 63, 28, 139, 171, 186, 84, 21, 159, 71, 94, 76, 127, 53, 160, 103, 228, 245, 88, 222, 183, 97, 130, 106, 76, 204, 133, 88, 29, 200, 2, 168, 163, 119, 180, 233, 145, 12, 172, 215, 0, 29, 157, 223, 71, 30, 230}, +{94, 84, 247, 115, 199, 1, 174, 50, 225, 99, 234, 248, 145, 241, 5, 33, 50, 175, 171, 48, 2, 204, 212, 143, 185, 16, 4, 29, 233, 66, 173, 47, 74, 68, 242, 224, 107, 26, 80, 25, 35, 105, 96, 50, 96, 168, 59, 66, 245, 205, 252, 63, 28, 74, 209, 198, 250, 182, 210, 104, 232, 38, 87, 200, 15, 222, 67, 107, 122, 42, 30, 183, 3, 44, 121, 80, 250, 141, 50, 201, 69, 51, 106, 209, 232, 15, 56, 81, 84, 188, 148, 253, 120, 245, 149, 135, 96, 42, 123, 54, 141, 255, 101, 8, 0, 194, 147, 173, 124, 62, 12, 217, 213, 214, 172, 20, 6, 196, 147, 10, 3, 105, 23, 12, 87, 25, 93, 40}, +{98, 182, 190, 57, 65, 214, 199, 203, 194, 18, 40, 84, 230, 76, 162, 206, 189, 195, 128, 101, 200, 7, 101, 39, 8, 52, 5, 78, 250, 141, 36, 223, 245, 140, 59, 125, 126, 167, 6, 36, 133, 149, 81, 253, 153, 122, 102, 167, 164, 74, 98, 248, 157, 227, 119, 215, 189, 183, 170, 243, 184, 73, 156, 254, 128, 101, 163, 147, 202, 199, 96, 203, 36, 32, 255, 100, 176, 30, 120, 2, 111, 4, 61, 67, 236, 85, 154, 21, 245, 17, 228, 234, 251, 147, 250, 37, 150, 153, 198, 90, 104, 68, 188, 58, 85, 4, 178, 127, 162, 223, 206, 115, 183, 233, 66, 247, 86, 213, 85, 67, 119, 26, 41, 86, 196, 11, 132, 27}, +{75, 172, 233, 188, 33, 21, 164, 184, 175, 118, 199, 120, 243, 247, 209, 250, 184, 200, 79, 252, 53, 253, 65, 209, 213, 1, 129, 90, 127, 240, 168, 106, 111, 240, 223, 171, 89, 126, 110, 128, 1, 38, 145, 200, 244, 238, 13, 88, 252, 83, 179, 202, 19, 183, 1, 144, 50, 216, 74, 128, 244, 236, 147, 86, 235, 234, 93, 210, 102, 94, 29, 198, 192, 33, 138, 170, 196, 53, 129, 175, 192, 222, 76, 0, 33, 77, 241, 74, 165, 6, 22, 28, 153, 235, 153, 232, 178, 213, 112, 188, 36, 80, 43, 18, 240, 127, 106, 148, 233, 16, 186, 225, 83, 196, 135, 36, 173, 33, 97, 205, 132, 137, 95, 142, 59, 139, 64, 235}, +{139, 204, 214, 108, 8, 85, 123, 88, 90, 189, 240, 120, 78, 47, 122, 251, 83, 188, 16, 170, 67, 119, 56, 90, 198, 11, 126, 185, 231, 113, 10, 109, 237, 115, 249, 107, 247, 236, 81, 31, 158, 73, 58, 252, 56, 170, 234, 129, 175, 116, 155, 199, 251, 142, 129, 165, 179, 73, 81, 191, 175, 208, 97, 203, 127, 52, 190, 41, 184, 244, 89, 138, 45, 150, 156, 136, 97, 22, 10, 126, 210, 61, 140, 71, 156, 0, 225, 251, 31, 91, 184, 146, 216, 229, 73, 154, 205, 42, 148, 31, 196, 153, 95, 248, 141, 125, 207, 159, 73, 87, 161, 25, 38, 169, 18, 201, 170, 57, 123, 219, 205, 151, 46, 37, 179, 53, 21, 216}, +{44, 195, 29, 194, 147, 214, 234, 29, 69, 208, 72, 246, 55, 220, 127, 58, 45, 53, 115, 52, 198, 233, 191, 61, 251, 62, 127, 174, 182, 242, 151, 118, 228, 29, 240, 49, 145, 8, 42, 20, 4, 172, 114, 115, 204, 113, 4, 241, 255, 32, 43, 32, 22, 243, 191, 130, 27, 7, 237, 171, 218, 184, 189, 187, 199, 26, 103, 184, 225, 239, 0, 32, 205, 53, 108, 61, 50, 252, 60, 187, 23, 196, 114, 218, 196, 218, 37, 3, 165, 190, 190, 48, 186, 170, 92, 91, 148, 115, 6, 132, 198, 9, 1, 92, 231, 162, 100, 221, 13, 62, 90, 109, 73, 162, 35, 11, 251, 144, 68, 69, 24, 121, 254, 92, 85, 79, 179, 135}, +{8, 205, 79, 113, 45, 141, 114, 142, 10, 234, 157, 27, 10, 143, 164, 191, 246, 27, 109, 185, 252, 35, 221, 174, 143, 145, 50, 115, 145, 72, 224, 163, 214, 108, 238, 93, 178, 148, 191, 53, 150, 141, 172, 64, 251, 136, 170, 13, 16, 202, 120, 160, 203, 186, 178, 216, 87, 73, 219, 203, 239, 37, 108, 60, 5, 185, 251, 64, 99, 33, 231, 130, 127, 192, 197, 30, 5, 126, 142, 242, 68, 183, 79, 225, 27, 165, 254, 108, 224, 116, 211, 131, 184, 16, 234, 145, 36, 56, 17, 214, 64, 53, 73, 243, 72, 207, 159, 82, 73, 144, 255, 207, 88, 16, 181, 126, 130, 11, 88, 196, 9, 78, 120, 49, 16, 178, 85, 222}, +{48, 216, 149, 16, 4, 184, 156, 64, 81, 188, 167, 42, 11, 46, 162, 49, 128, 232, 216, 134, 248, 89, 99, 221, 129, 215, 21, 38, 140, 44, 53, 229, 9, 77, 157, 4, 194, 224, 193, 108, 9, 140, 154, 170, 109, 133, 216, 110, 8, 5, 150, 142, 106, 211, 88, 158, 201, 40, 45, 134, 157, 44, 223, 63, 239, 236, 218, 45, 112, 167, 47, 22, 38, 143, 29, 12, 25, 133, 253, 7, 214, 64, 192, 20, 66, 203, 193, 77, 47, 101, 35, 85, 122, 118, 180, 102, 168, 222, 244, 233, 27, 174, 37, 219, 31, 219, 198, 173, 228, 120, 8, 248, 222, 74, 132, 0, 81, 34, 184, 174, 129, 134, 236, 85, 247, 2, 149, 140}, +{41, 246, 187, 183, 30, 143, 147, 189, 48, 220, 108, 135, 65, 162, 223, 25, 223, 21, 187, 145, 162, 206, 255, 207, 144, 125, 100, 147, 153, 208, 84, 88, 163, 51, 253, 45, 223, 222, 96, 164, 203, 107, 166, 4, 6, 102, 219, 150, 87, 63, 18, 56, 158, 168, 87, 186, 205, 5, 87, 140, 233, 106, 185, 23, 212, 11, 124, 186, 2, 236, 181, 16, 178, 12, 8, 120, 252, 110, 116, 159, 87, 192, 62, 87, 183, 159, 126, 234, 209, 75, 187, 91, 62, 220, 206, 183, 94, 51, 22, 163, 226, 45, 48, 109, 191, 182, 99, 52, 218, 204, 224, 63, 107, 251, 103, 134, 213, 149, 216, 210, 168, 89, 247, 118, 189, 161, 251, 249}, +{4, 204, 232, 184, 78, 129, 99, 153, 86, 122, 144, 222, 211, 239, 229, 183, 180, 88, 35, 222, 28, 34, 218, 138, 237, 241, 228, 53, 120, 208, 83, 66, 100, 247, 77, 57, 33, 49, 114, 17, 199, 102, 198, 137, 125, 21, 24, 104, 176, 205, 187, 52, 125, 32, 121, 130, 251, 148, 155, 120, 114, 234, 25, 81, 98, 142, 64, 16, 125, 239, 111, 147, 123, 7, 67, 44, 117, 218, 141, 236, 204, 77, 29, 206, 214, 211, 48, 173, 191, 188, 103, 98, 162, 93, 223, 5, 196, 51, 105, 82, 226, 208, 241, 246, 229, 218, 75, 93, 67, 57, 139, 137, 9, 110, 80, 216, 146, 40, 170, 110, 123, 245, 1, 46, 161, 166, 226, 173}, +{129, 169, 235, 118, 114, 124, 122, 156, 67, 189, 116, 142, 174, 252, 122, 12, 1, 21, 172, 103, 183, 167, 81, 59, 249, 196, 176, 133, 120, 245, 73, 233, 97, 79, 29, 248, 208, 141, 50, 127, 55, 215, 16, 234, 57, 39, 239, 41, 201, 68, 52, 44, 185, 250, 215, 91, 153, 76, 240, 2, 31, 249, 243, 77, 240, 145, 48, 170, 159, 33, 175, 104, 61, 95, 129, 129, 88, 94, 235, 225, 157, 255, 248, 109, 90, 119, 174, 161, 157, 161, 49, 255, 220, 129, 189, 202, 192, 132, 90, 235, 188, 42, 188, 122, 129, 212, 168, 244, 203, 25, 233, 0, 238, 105, 90, 220, 63, 170, 93, 25, 209, 189, 123, 94, 165, 206, 38, 22}, +{94, 17, 124, 155, 7, 80, 165, 39, 210, 80, 186, 203, 107, 94, 236, 68, 193, 244, 103, 0, 210, 55, 216, 215, 13, 220, 148, 177, 6, 255, 173, 243, 193, 172, 215, 39, 172, 99, 151, 38, 173, 155, 217, 97, 132, 150, 254, 132, 185, 111, 177, 63, 21, 195, 96, 34, 239, 170, 151, 157, 20, 113, 152, 103, 244, 191, 235, 167, 111, 197, 133, 34, 145, 217, 161, 178, 17, 50, 144, 231, 205, 55, 65, 129, 87, 54, 74, 134, 9, 135, 103, 136, 214, 213, 228, 47, 103, 180, 158, 6, 134, 62, 8, 112, 17, 65, 44, 146, 51, 101, 111, 173, 127, 129, 249, 87, 101, 220, 18, 122, 161, 73, 152, 225, 64, 219, 149, 96}, +{124, 87, 168, 32, 42, 172, 10, 13, 217, 169, 240, 132, 177, 252, 15, 177, 115, 218, 31, 237, 139, 131, 104, 232, 38, 37, 195, 8, 37, 60, 65, 74, 237, 248, 71, 116, 4, 105, 56, 100, 77, 218, 103, 41, 52, 34, 28, 99, 43, 95, 151, 128, 219, 179, 144, 235, 79, 29, 62, 230, 104, 238, 221, 186, 79, 133, 112, 91, 77, 66, 230, 100, 140, 144, 196, 31, 160, 240, 184, 25, 56, 109, 36, 48, 214, 12, 162, 52, 180, 165, 158, 72, 94, 79, 237, 27, 190, 189, 18, 204, 48, 4, 131, 96, 141, 95, 96, 97, 86, 21, 180, 176, 10, 92, 48, 209, 252, 76, 18, 75, 237, 189, 27, 74, 249, 22, 147, 162}, +{149, 59, 4, 135, 200, 119, 72, 175, 8, 125, 10, 133, 71, 252, 62, 141, 61, 236, 19, 147, 174, 146, 73, 134, 60, 20, 167, 99, 27, 104, 119, 230, 251, 74, 183, 225, 174, 57, 73, 7, 215, 161, 154, 89, 15, 247, 224, 183, 243, 51, 9, 205, 78, 186, 84, 241, 194, 118, 215, 62, 151, 6, 106, 254, 59, 165, 206, 189, 107, 73, 194, 243, 247, 14, 28, 142, 27, 41, 235, 230, 91, 163, 153, 225, 40, 163, 101, 161, 184, 211, 122, 21, 242, 13, 37, 35, 120, 75, 87, 100, 96, 29, 64, 197, 7, 142, 183, 120, 160, 249, 231, 75, 98, 111, 232, 69, 84, 72, 102, 156, 41, 202, 188, 82, 212, 128, 9, 221}, +{9, 0, 1, 95, 106, 129, 18, 193, 124, 168, 135, 100, 63, 87, 59, 4, 91, 123, 115, 205, 208, 5, 20, 56, 185, 223, 229, 80, 214, 140, 98, 240, 82, 140, 144, 141, 196, 131, 8, 77, 226, 47, 203, 127, 227, 181, 24, 52, 45, 230, 78, 83, 200, 221, 50, 174, 130, 117, 142, 31, 121, 221, 222, 31, 11, 56, 153, 206, 222, 57, 143, 218, 234, 164, 237, 205, 173, 115, 97, 40, 115, 155, 180, 165, 197, 175, 160, 208, 205, 223, 201, 39, 77, 0, 49, 46, 169, 67, 250, 186, 18, 59, 31, 6, 219, 63, 192, 11, 207, 126, 34, 58, 124, 211, 62, 173, 36, 111, 121, 158, 97, 47, 129, 167, 54, 43, 39, 145}, +{204, 62, 48, 69, 162, 136, 21, 23, 234, 217, 15, 134, 5, 204, 1, 145, 44, 79, 139, 92, 67, 229, 33, 48, 231, 65, 139, 88, 59, 221, 170, 110, 83, 120, 239, 95, 153, 224, 111, 213, 248, 185, 139, 24, 233, 196, 15, 166, 244, 27, 152, 149, 85, 154, 114, 221, 214, 231, 204, 179, 225, 188, 135, 34, 224, 97, 239, 142, 187, 84, 196, 178, 32, 21, 220, 55, 181, 155, 111, 246, 239, 29, 216, 128, 111, 50, 233, 173, 190, 78, 165, 14, 74, 28, 47, 54, 55, 151, 162, 145, 155, 148, 85, 220, 138, 41, 179, 177, 255, 134, 191, 127, 245, 196, 35, 83, 190, 204, 195, 47, 234, 183, 69, 104, 85, 41, 178, 254}, +{108, 243, 105, 197, 193, 224, 14, 225, 146, 127, 130, 238, 72, 57, 1, 147, 68, 209, 22, 24, 118, 159, 74, 193, 52, 229, 40, 214, 66, 188, 193, 4, 60, 97, 128, 68, 22, 138, 113, 101, 242, 17, 12, 115, 115, 12, 103, 191, 117, 160, 245, 53, 224, 106, 20, 109, 14, 171, 223, 15, 89, 91, 26, 91, 128, 70, 5, 122, 197, 125, 30, 15, 135, 84, 57, 201, 240, 198, 21, 206, 195, 53, 114, 0, 169, 106, 58, 156, 14, 170, 8, 183, 20, 90, 253, 167, 213, 204, 55, 14, 253, 154, 197, 9, 172, 23, 202, 186, 121, 109, 0, 60, 47, 135, 193, 72, 126, 183, 76, 42, 68, 114, 121, 121, 166, 8, 84, 198}, +{184, 130, 160, 249, 102, 15, 221, 60, 150, 21, 249, 144, 166, 14, 143, 176, 58, 203, 252, 127, 225, 237, 17, 10, 157, 108, 23, 27, 70, 104, 219, 211, 137, 224, 41, 178, 61, 204, 8, 45, 229, 212, 93, 254, 191, 209, 174, 76, 184, 7, 14, 52, 90, 90, 122, 157, 92, 254, 16, 42, 98, 95, 10, 36, 185, 146, 19, 251, 232, 180, 13, 147, 189, 249, 147, 246, 135, 20, 154, 18, 70, 240, 91, 37, 211, 180, 237, 17, 95, 255, 6, 0, 175, 12, 217, 35, 55, 158, 240, 30, 210, 170, 92, 195, 198, 251, 19, 204, 171, 167, 77, 163, 120, 71, 31, 207, 205, 109, 5, 108, 140, 125, 167, 220, 42, 178, 218, 192}, +{108, 136, 254, 149, 127, 249, 180, 133, 150, 244, 176, 180, 168, 79, 13, 219, 16, 202, 65, 47, 75, 222, 85, 69, 203, 145, 21, 186, 154, 141, 186, 116, 113, 247, 9, 230, 183, 14, 130, 27, 211, 67, 201, 47, 64, 189, 111, 43, 173, 222, 48, 220, 17, 47, 207, 154, 231, 84, 115, 104, 185, 71, 171, 139, 37, 120, 71, 147, 35, 104, 123, 195, 49, 41, 238, 121, 12, 107, 29, 195, 191, 179, 196, 232, 151, 85, 51, 4, 122, 31, 16, 189, 60, 212, 10, 214, 113, 115, 161, 137, 242, 82, 191, 21, 127, 117, 79, 156, 117, 195, 38, 49, 76, 4, 107, 35, 1, 21, 70, 204, 38, 249, 135, 17, 0, 96, 25, 233}, +{26, 152, 250, 109, 198, 92, 52, 96, 98, 105, 196, 79, 89, 85, 143, 113, 128, 63, 88, 2, 226, 145, 88, 81, 239, 177, 195, 179, 172, 209, 41, 158, 198, 43, 67, 187, 76, 50, 7, 170, 97, 126, 90, 126, 140, 253, 119, 73, 33, 128, 1, 83, 114, 254, 251, 119, 103, 23, 99, 230, 63, 126, 226, 89, 29, 216, 226, 50, 9, 202, 17, 168, 49, 101, 213, 135, 95, 12, 126, 86, 231, 29, 73, 198, 123, 0, 198, 185, 95, 196, 113, 45, 123, 235, 78, 103, 206, 228, 222, 113, 126, 100, 117, 5, 212, 108, 207, 156, 181, 105, 157, 58, 249, 219, 178, 213, 209, 118, 101, 108, 159, 53, 82, 52, 169, 160, 36, 57}, +{147, 35, 63, 240, 156, 86, 111, 26, 52, 213, 223, 119, 219, 236, 130, 243, 2, 102, 143, 13, 179, 200, 96, 69, 177, 28, 114, 194, 87, 181, 50, 227, 148, 21, 79, 6, 129, 95, 250, 41, 25, 174, 185, 231, 206, 234, 158, 89, 239, 92, 52, 110, 80, 85, 197, 57, 24, 204, 236, 116, 216, 150, 233, 92, 246, 108, 32, 102, 0, 15, 192, 7, 202, 56, 125, 32, 87, 193, 100, 105, 222, 142, 191, 208, 81, 50, 193, 9, 241, 170, 7, 88, 64, 230, 85, 134, 53, 109, 134, 193, 27, 184, 214, 234, 189, 53, 25, 182, 63, 68, 195, 240, 33, 140, 244, 93, 87, 72, 151, 118, 194, 125, 254, 120, 159, 89, 19, 133}, +{110, 185, 44, 153, 159, 47, 52, 159, 232, 242, 73, 138, 186, 133, 190, 45, 114, 30, 108, 72, 70, 102, 74, 90, 95, 198, 242, 12, 217, 165, 124, 46, 225, 184, 236, 154, 97, 66, 183, 95, 207, 44, 185, 116, 30, 207, 236, 58, 141, 165, 5, 92, 11, 153, 166, 10, 198, 243, 249, 22, 105, 82, 94, 34, 35, 126, 112, 237, 31, 251, 236, 34, 103, 232, 183, 140, 13, 130, 48, 53, 23, 84, 131, 58, 227, 165, 56, 109, 206, 104, 63, 217, 176, 35, 232, 173, 195, 31, 32, 139, 17, 40, 125, 22, 144, 223, 5, 199, 174, 42, 87, 66, 206, 184, 15, 167, 45, 136, 169, 51, 185, 226, 96, 67, 92, 159, 194, 164}, +{98, 197, 16, 135, 134, 31, 27, 47, 72, 117, 37, 215, 89, 93, 168, 228, 209, 199, 201, 115, 141, 110, 230, 70, 118, 73, 215, 117, 159, 169, 57, 164, 217, 106, 192, 180, 126, 185, 21, 99, 83, 10, 184, 247, 242, 226, 75, 89, 182, 59, 179, 229, 179, 60, 49, 216, 140, 30, 49, 164, 60, 29, 202, 225, 75, 211, 218, 26, 82, 176, 121, 105, 9, 236, 156, 104, 42, 119, 171, 6, 241, 94, 206, 16, 232, 115, 3, 6, 92, 100, 160, 115, 188, 183, 143, 194, 121, 48, 215, 213, 189, 230, 131, 142, 65, 42, 25, 129, 77, 152, 91, 102, 204, 76, 109, 163, 44, 155, 182, 173, 244, 191, 186, 55, 60, 108, 8, 198}, +{110, 53, 56, 5, 148, 243, 95, 149, 249, 112, 107, 128, 58, 118, 46, 154, 152, 248, 202, 18, 17, 175, 111, 125, 233, 40, 148, 196, 211, 123, 147, 118, 129, 97, 80, 149, 11, 75, 204, 133, 111, 243, 195, 205, 142, 181, 198, 94, 189, 153, 64, 102, 68, 0, 77, 101, 68, 9, 25, 217, 230, 142, 25, 10, 39, 196, 5, 86, 8, 236, 196, 145, 61, 154, 194, 89, 151, 218, 67, 246, 233, 59, 189, 196, 24, 60, 109, 86, 131, 201, 76, 96, 230, 25, 251, 126, 162, 175, 25, 198, 186, 184, 224, 144, 228, 63, 150, 108, 233, 93, 223, 24, 137, 121, 125, 222, 16, 25, 193, 204, 120, 217, 247, 137, 60, 234, 41, 3}, +{91, 230, 9, 23, 69, 83, 217, 41, 20, 57, 234, 81, 82, 229, 244, 76, 208, 151, 155, 60, 40, 117, 64, 130, 238, 138, 248, 113, 3, 84, 245, 165, 54, 30, 255, 60, 96, 107, 75, 183, 39, 206, 238, 0, 185, 241, 225, 141, 148, 51, 17, 107, 221, 78, 30, 218, 171, 249, 199, 67, 31, 75, 194, 41, 40, 72, 89, 101, 143, 105, 6, 235, 244, 104, 69, 147, 10, 166, 157, 152, 116, 162, 16, 213, 187, 50, 36, 213, 26, 81, 64, 92, 108, 143, 47, 87, 186, 26, 78, 12, 79, 225, 172, 17, 204, 185, 62, 97, 210, 65, 24, 197, 192, 140, 44, 152, 74, 215, 253, 172, 161, 185, 12, 129, 81, 102, 3, 145}, +{2, 246, 72, 192, 56, 46, 239, 75, 241, 121, 155, 74, 73, 159, 125, 33, 206, 248, 167, 201, 39, 82, 118, 188, 245, 200, 74, 46, 148, 235, 40, 248, 231, 128, 234, 140, 53, 210, 234, 115, 43, 15, 119, 74, 183, 11, 16, 47, 123, 183, 87, 117, 43, 233, 70, 166, 39, 98, 226, 58, 89, 155, 45, 243, 120, 140, 3, 126, 60, 172, 4, 8, 198, 118, 164, 122, 170, 71, 160, 183, 194, 35, 179, 58, 226, 35, 9, 66, 69, 93, 84, 5, 37, 37, 14, 106, 13, 181, 205, 145, 206, 98, 96, 66, 216, 39, 133, 5, 58, 92, 137, 19, 152, 181, 133, 200, 76, 5, 105, 50, 17, 158, 129, 167, 102, 175, 22, 217}, +{164, 45, 94, 35, 148, 197, 126, 123, 142, 206, 175, 253, 58, 77, 111, 253, 48, 140, 13, 45, 27, 148, 106, 41, 117, 187, 197, 232, 115, 135, 111, 90, 12, 156, 168, 52, 199, 39, 125, 27, 103, 158, 129, 72, 29, 153, 172, 165, 223, 226, 108, 169, 230, 74, 4, 176, 136, 70, 177, 28, 28, 220, 15, 63, 205, 205, 103, 172, 13, 172, 226, 117, 193, 162, 85, 230, 18, 235, 151, 90, 165, 34, 140, 233, 119, 67, 224, 223, 201, 245, 48, 12, 44, 15, 64, 137, 193, 51, 28, 24, 219, 42, 14, 60, 94, 157, 124, 252, 189, 29, 37, 115, 56, 232, 213, 121, 90, 42, 6, 208, 0, 169, 171, 215, 166, 226, 211, 21}, +{5, 161, 37, 105, 214, 231, 109, 246, 80, 35, 36, 9, 222, 234, 29, 112, 194, 22, 13, 70, 173, 233, 24, 199, 141, 224, 218, 182, 240, 147, 87, 252, 192, 161, 238, 149, 54, 117, 72, 221, 180, 185, 245, 102, 173, 31, 77, 57, 201, 131, 106, 134, 155, 20, 251, 48, 230, 145, 208, 142, 48, 79, 146, 158, 45, 67, 217, 139, 46, 218, 166, 199, 162, 116, 48, 111, 122, 215, 124, 121, 23, 120, 6, 35, 154, 64, 79, 57, 10, 250, 226, 172, 100, 209, 224, 183, 222, 225, 192, 76, 111, 136, 194, 74, 62, 119, 37, 245, 123, 22, 163, 234, 184, 9, 88, 84, 113, 6, 62, 164, 11, 210, 141, 76, 35, 210, 20, 1}, +{201, 149, 166, 225, 83, 127, 144, 253, 142, 172, 170, 222, 152, 112, 210, 162, 66, 208, 21, 194, 11, 140, 131, 102, 140, 169, 153, 200, 52, 99, 135, 217, 156, 60, 218, 244, 23, 10, 84, 238, 179, 157, 42, 119, 193, 50, 72, 119, 106, 234, 146, 34, 144, 246, 159, 96, 60, 116, 104, 93, 0, 154, 179, 216, 96, 239, 101, 182, 14, 156, 110, 198, 170, 126, 75, 38, 222, 80, 245, 112, 92, 207, 67, 179, 113, 149, 176, 167, 104, 253, 53, 15, 22, 38, 197, 146, 176, 55, 70, 207, 93, 138, 115, 240, 0, 126, 207, 200, 186, 159, 216, 240, 121, 2, 245, 203, 46, 9, 141, 4, 20, 110, 99, 222, 163, 101, 106, 22}, +{10, 251, 142, 33, 15, 145, 202, 40, 143, 221, 133, 221, 181, 254, 86, 51, 46, 124, 80, 159, 91, 242, 126, 112, 135, 99, 145, 174, 88, 167, 147, 34, 51, 144, 169, 212, 246, 246, 194, 27, 94, 183, 169, 240, 182, 197, 136, 3, 194, 240, 1, 81, 68, 15, 101, 182, 110, 147, 12, 21, 190, 199, 158, 232, 86, 91, 134, 218, 151, 137, 79, 18, 2, 113, 234, 98, 55, 175, 171, 98, 30, 73, 197, 92, 232, 60, 102, 236, 246, 129, 235, 1, 254, 199, 198, 236, 232, 252, 254, 144, 138, 173, 13, 165, 241, 85, 254, 64, 21, 171, 18, 43, 46, 17, 36, 217, 53, 203, 76, 156, 238, 29, 21, 97, 230, 213, 12, 72}, +{89, 140, 248, 1, 90, 48, 85, 219, 87, 82, 51, 186, 163, 160, 1, 158, 6, 49, 108, 46, 232, 77, 197, 198, 44, 140, 129, 82, 104, 92, 200, 172, 144, 30, 72, 241, 10, 88, 178, 47, 80, 180, 59, 234, 4, 111, 121, 34, 59, 194, 47, 131, 220, 222, 70, 97, 162, 72, 91, 26, 35, 203, 45, 88, 171, 251, 231, 77, 197, 187, 157, 82, 225, 90, 125, 199, 64, 171, 10, 156, 102, 78, 18, 142, 198, 120, 118, 124, 137, 113, 188, 1, 96, 38, 38, 81, 167, 42, 107, 143, 71, 254, 175, 208, 40, 136, 224, 92, 100, 41, 114, 51, 14, 62, 255, 218, 4, 32, 119, 51, 34, 38, 139, 110, 117, 116, 145, 166}, +{72, 117, 102, 91, 129, 45, 248, 78, 199, 7, 116, 107, 195, 75, 144, 120, 86, 14, 65, 248, 121, 38, 97, 50, 227, 112, 56, 95, 10, 28, 190, 50, 215, 246, 117, 22, 155, 153, 65, 92, 169, 145, 32, 232, 159, 80, 200, 32, 79, 184, 106, 60, 242, 49, 82, 75, 100, 172, 81, 27, 2, 150, 89, 37, 246, 106, 145, 51, 118, 58, 254, 5, 187, 18, 3, 107, 106, 145, 195, 109, 239, 145, 147, 113, 224, 44, 218, 223, 18, 59, 223, 23, 87, 88, 109, 134, 179, 19, 173, 24, 181, 48, 143, 238, 4, 199, 12, 151, 136, 108, 208, 248, 156, 129, 219, 141, 166, 117, 82, 162, 34, 202, 104, 95, 242, 76, 12, 46}, +{38, 21, 92, 144, 142, 48, 182, 65, 203, 216, 203, 11, 144, 250, 23, 122, 48, 131, 214, 95, 44, 182, 50, 235, 203, 106, 10, 72, 80, 126, 69, 113, 194, 209, 115, 213, 101, 53, 43, 166, 16, 190, 114, 71, 194, 63, 72, 72, 24, 96, 156, 9, 158, 162, 59, 32, 181, 162, 88, 133, 96, 41, 125, 130, 213, 174, 116, 52, 89, 170, 26, 243, 11, 141, 80, 162, 102, 245, 97, 101, 66, 147, 92, 133, 85, 254, 167, 201, 202, 65, 37, 124, 103, 170, 40, 131, 23, 254, 42, 26, 187, 131, 113, 14, 239, 28, 228, 56, 236, 194, 58, 34, 120, 58, 200, 104, 238, 121, 195, 35, 34, 0, 211, 36, 226, 222, 203, 241}, +{194, 163, 179, 115, 225, 246, 20, 156, 112, 206, 89, 55, 163, 75, 162, 29, 119, 121, 187, 73, 78, 144, 18, 247, 23, 165, 221, 175, 89, 95, 36, 140, 157, 164, 57, 127, 48, 194, 136, 167, 250, 229, 152, 53, 41, 236, 130, 170, 17, 115, 12, 75, 195, 240, 59, 239, 117, 235, 249, 119, 37, 54, 45, 13, 151, 33, 93, 131, 242, 25, 47, 224, 217, 240, 28, 21, 137, 74, 41, 23, 206, 118, 212, 156, 165, 169, 111, 229, 94, 140, 81, 191, 214, 40, 62, 5, 180, 218, 96, 188, 121, 100, 217, 43, 102, 0, 108, 97, 110, 162, 47, 62, 14, 81, 121, 94, 165, 131, 208, 79, 252, 29, 215, 217, 12, 155, 19, 194}, +{33, 109, 54, 67, 118, 220, 13, 138, 19, 15, 197, 105, 200, 168, 220, 132, 44, 113, 166, 238, 95, 242, 6, 236, 186, 173, 43, 42, 120, 77, 105, 123, 81, 14, 108, 43, 170, 238, 52, 202, 165, 51, 173, 80, 9, 147, 222, 45, 190, 228, 124, 203, 65, 1, 141, 17, 95, 254, 117, 85, 123, 28, 12, 12, 44, 4, 177, 156, 197, 178, 144, 61, 110, 27, 41, 154, 212, 101, 56, 218, 50, 0, 168, 180, 147, 25, 156, 126, 3, 200, 17, 7, 213, 236, 207, 48, 174, 36, 42, 150, 98, 27, 35, 132, 117, 250, 130, 121, 24, 53, 34, 140, 154, 150, 191, 187, 7, 117, 72, 97, 209, 147, 75, 198, 183, 171, 236, 14}, +{26, 176, 168, 86, 162, 205, 184, 223, 131, 82, 18, 39, 120, 153, 11, 138, 105, 79, 17, 20, 33, 15, 63, 109, 30, 110, 30, 230, 121, 26, 56, 86, 215, 255, 1, 9, 216, 91, 246, 95, 102, 111, 138, 12, 166, 39, 31, 238, 229, 163, 185, 25, 29, 112, 31, 77, 161, 23, 77, 58, 241, 255, 91, 12, 164, 199, 247, 123, 3, 19, 182, 134, 20, 234, 16, 225, 27, 134, 186, 32, 35, 156, 66, 144, 7, 58, 24, 209, 91, 255, 181, 150, 16, 82, 67, 102, 223, 71, 59, 114, 95, 189, 68, 175, 252, 17, 63, 54, 81, 242, 4, 78, 2, 162, 91, 106, 233, 107, 225, 251, 144, 111, 231, 104, 165, 112, 29, 48}, +{165, 141, 122, 59, 17, 5, 67, 163, 31, 76, 97, 206, 164, 42, 85, 243, 190, 31, 168, 133, 136, 205, 74, 1, 60, 166, 86, 150, 128, 81, 24, 183, 200, 113, 118, 48, 192, 212, 226, 252, 81, 145, 169, 164, 102, 211, 204, 249, 184, 57, 23, 233, 229, 124, 206, 246, 184, 178, 217, 148, 100, 186, 255, 138, 108, 31, 73, 238, 37, 129, 179, 88, 13, 139, 93, 67, 128, 176, 252, 245, 41, 114, 197, 176, 126, 129, 116, 215, 54, 21, 162, 100, 142, 162, 95, 236, 16, 237, 189, 193, 80, 35, 109, 54, 74, 225, 5, 43, 211, 187, 122, 92, 169, 232, 126, 198, 169, 211, 73, 177, 85, 224, 112, 56, 117, 218, 180, 115}, +{155, 59, 191, 35, 51, 122, 37, 1, 15, 39, 39, 46, 253, 169, 108, 108, 124, 16, 120, 131, 40, 124, 246, 184, 31, 69, 67, 230, 102, 149, 187, 255, 104, 44, 2, 79, 114, 76, 218, 152, 40, 100, 187, 68, 227, 88, 234, 59, 19, 5, 92, 147, 177, 115, 162, 154, 171, 25, 137, 73, 123, 67, 166, 167, 227, 153, 16, 188, 154, 41, 118, 11, 190, 123, 120, 110, 111, 58, 72, 207, 109, 89, 141, 50, 252, 73, 18, 83, 183, 120, 51, 15, 227, 85, 153, 130, 14, 74, 216, 11, 121, 4, 86, 46, 5, 199, 108, 109, 230, 170, 249, 68, 2, 245, 11, 174, 90, 205, 59, 170, 159, 213, 233, 208, 45, 89, 52, 231}, +{98, 201, 32, 31, 97, 232, 24, 178, 163, 45, 197, 149, 82, 204, 228, 227, 60, 61, 226, 83, 147, 17, 219, 194, 139, 119, 233, 20, 18, 70, 88, 153, 75, 221, 114, 77, 232, 124, 25, 114, 59, 166, 61, 167, 109, 150, 193, 1, 244, 127, 114, 149, 67, 120, 37, 14, 25, 224, 216, 244, 88, 247, 211, 223, 250, 136, 150, 108, 64, 226, 106, 226, 194, 13, 249, 247, 39, 202, 141, 54, 165, 226, 155, 37, 59, 158, 87, 34, 61, 51, 249, 86, 219, 28, 130, 37, 134, 107, 117, 64, 180, 25, 79, 239, 163, 251, 42, 22, 115, 184, 57, 118, 225, 64, 218, 166, 245, 231, 127, 26, 131, 243, 74, 122, 5, 76, 155, 186}, +{88, 192, 151, 131, 152, 195, 70, 26, 244, 213, 47, 177, 173, 178, 58, 8, 55, 1, 253, 228, 230, 167, 3, 42, 206, 31, 143, 148, 102, 161, 32, 93, 36, 48, 164, 85, 89, 224, 29, 74, 247, 46, 202, 222, 62, 92, 240, 159, 61, 199, 244, 158, 54, 21, 177, 216, 36, 135, 73, 22, 237, 13, 207, 62, 100, 50, 207, 177, 8, 140, 126, 25, 220, 248, 93, 82, 187, 248, 44, 91, 8, 103, 192, 245, 112, 136, 134, 14, 118, 41, 51, 243, 74, 127, 74, 50, 216, 184, 231, 25, 134, 131, 45, 148, 211, 117, 248, 42, 139, 215, 180, 35, 208, 130, 80, 12, 195, 205, 171, 236, 114, 75, 41, 103, 48, 80, 227, 34}, +{101, 235, 113, 85, 149, 139, 199, 192, 71, 126, 12, 229, 99, 121, 28, 27, 132, 17, 99, 25, 59, 131, 41, 148, 74, 183, 249, 81, 180, 154, 142, 225, 32, 76, 148, 25, 95, 150, 77, 220, 43, 76, 192, 19, 5, 1, 65, 221, 147, 60, 188, 93, 14, 122, 119, 235, 163, 28, 50, 128, 198, 16, 72, 93, 229, 12, 60, 255, 75, 252, 155, 161, 91, 94, 103, 18, 174, 17, 101, 230, 154, 249, 64, 240, 226, 140, 58, 234, 125, 62, 65, 127, 66, 255, 196, 167, 171, 215, 134, 84, 191, 128, 205, 34, 210, 140, 62, 232, 217, 235, 11, 82, 67, 106, 137, 84, 91, 237, 37, 13, 55, 18, 132, 35, 175, 111, 154, 42}, +{121, 66, 246, 246, 112, 253, 13, 37, 210, 117, 57, 220, 116, 89, 149, 166, 147, 131, 90, 204, 210, 49, 106, 129, 221, 168, 84, 248, 146, 24, 249, 136, 131, 142, 177, 106, 183, 126, 58, 15, 179, 53, 228, 50, 211, 105, 205, 44, 224, 238, 183, 104, 104, 104, 177, 185, 104, 48, 160, 43, 12, 58, 255, 181, 216, 143, 87, 56, 186, 208, 121, 64, 14, 248, 233, 47, 149, 214, 106, 189, 105, 27, 180, 227, 115, 221, 207, 55, 178, 165, 107, 77, 185, 56, 157, 136, 176, 39, 105, 236, 42, 210, 159, 212, 188, 223, 13, 113, 133, 89, 6, 180, 28, 116, 165, 91, 239, 165, 186, 109, 210, 109, 32, 145, 94, 207, 108, 105}, +{142, 108, 119, 131, 194, 206, 184, 187, 0, 175, 199, 113, 75, 233, 222, 255, 194, 230, 156, 40, 209, 184, 220, 97, 173, 44, 194, 226, 253, 71, 19, 65, 30, 95, 58, 102, 35, 129, 40, 164, 76, 177, 209, 240, 223, 12, 239, 227, 209, 203, 183, 192, 198, 45, 225, 205, 172, 68, 240, 241, 245, 4, 190, 19, 48, 140, 148, 122, 128, 113, 172, 108, 164, 36, 203, 168, 184, 82, 6, 100, 77, 69, 156, 206, 144, 177, 176, 246, 4, 56, 119, 193, 71, 30, 122, 116, 135, 101, 230, 226, 57, 150, 60, 51, 21, 144, 167, 157, 103, 139, 42, 240, 25, 128, 95, 7, 8, 60, 83, 17, 139, 69, 255, 59, 181, 91, 181, 79}, +{53, 230, 31, 66, 109, 139, 104, 130, 56, 80, 78, 211, 223, 237, 93, 23, 162, 104, 254, 150, 132, 52, 125, 13, 183, 9, 211, 204, 184, 227, 206, 15, 12, 47, 33, 56, 215, 208, 138, 44, 179, 142, 136, 84, 175, 187, 204, 174, 2, 201, 157, 21, 13, 72, 52, 85, 43, 149, 142, 63, 183, 166, 215, 250, 179, 54, 69, 139, 37, 83, 20, 121, 190, 69, 30, 182, 153, 0, 95, 150, 196, 11, 242, 25, 34, 67, 13, 201, 63, 241, 23, 233, 131, 28, 24, 214, 77, 109, 88, 83, 76, 60, 58, 129, 59, 253, 181, 132, 77, 211, 203, 183, 227, 9, 198, 7, 172, 80, 37, 199, 121, 100, 116, 193, 40, 101, 159, 184}, +{64, 115, 179, 166, 117, 184, 76, 36, 210, 4, 189, 126, 64, 60, 210, 200, 172, 3, 67, 215, 67, 121, 197, 135, 219, 111, 132, 239, 203, 194, 121, 218, 49, 232, 130, 61, 225, 217, 126, 249, 251, 222, 212, 35, 12, 18, 158, 168, 55, 88, 232, 94, 80, 72, 104, 100, 197, 174, 38, 94, 110, 93, 83, 47, 8, 3, 78, 50, 246, 166, 52, 138, 221, 221, 137, 13, 174, 130, 9, 13, 128, 141, 69, 189, 104, 119, 49, 206, 119, 87, 232, 215, 225, 60, 92, 233, 30, 174, 193, 235, 203, 44, 92, 56, 210, 212, 11, 193, 163, 49, 222, 168, 204, 91, 0, 133, 117, 215, 226, 117, 76, 219, 171, 240, 6, 0, 141, 180}, +{45, 153, 170, 51, 164, 34, 247, 218, 227, 52, 191, 195, 215, 192, 57, 236, 169, 200, 190, 112, 124, 76, 175, 147, 89, 240, 180, 90, 64, 26, 38, 242, 156, 236, 189, 54, 110, 175, 218, 32, 132, 113, 146, 120, 90, 210, 161, 117, 160, 208, 175, 179, 185, 75, 43, 255, 140, 199, 68, 99, 79, 246, 50, 38, 161, 91, 97, 148, 1, 3, 240, 2, 14, 212, 246, 251, 235, 86, 42, 161, 170, 110, 35, 87, 169, 20, 36, 171, 190, 179, 4, 185, 53, 70, 247, 117, 137, 213, 195, 7, 56, 206, 69, 87, 227, 160, 99, 229, 121, 174, 66, 83, 188, 173, 127, 160, 56, 122, 15, 165, 62, 191, 164, 47, 172, 98, 196, 195}, +{28, 166, 151, 31, 35, 34, 165, 140, 29, 79, 147, 14, 152, 17, 4, 102, 20, 180, 51, 112, 222, 214, 189, 139, 115, 205, 193, 52, 55, 31, 193, 167, 213, 34, 235, 251, 154, 215, 244, 252, 101, 252, 42, 94, 54, 98, 57, 215, 249, 89, 197, 247, 233, 143, 27, 240, 245, 130, 52, 212, 133, 201, 47, 246, 24, 99, 37, 42, 165, 112, 136, 173, 183, 33, 164, 168, 228, 157, 51, 93, 183, 128, 194, 105, 167, 228, 110, 97, 48, 223, 50, 181, 154, 122, 1, 117, 230, 134, 78, 51, 21, 37, 175, 18, 39, 183, 24, 199, 178, 57, 186, 107, 186, 49, 183, 232, 139, 89, 17, 246, 149, 65, 39, 30, 206, 66, 177, 75}, +{129, 247, 86, 74, 26, 22, 138, 160, 30, 198, 158, 66, 114, 31, 101, 149, 200, 67, 175, 118, 151, 161, 138, 51, 192, 88, 205, 143, 222, 241, 239, 15, 205, 29, 190, 160, 224, 52, 165, 55, 80, 222, 56, 12, 162, 59, 34, 177, 175, 116, 172, 124, 8, 50, 233, 48, 112, 176, 105, 196, 145, 68, 129, 173, 66, 218, 249, 118, 190, 57, 68, 145, 82, 244, 137, 9, 180, 125, 85, 53, 23, 146, 46, 145, 56, 183, 151, 54, 84, 113, 30, 116, 14, 89, 103, 153, 10, 56, 234, 28, 162, 170, 205, 227, 117, 48, 56, 253, 78, 25, 78, 0, 166, 127, 117, 179, 208, 238, 37, 23, 121, 69, 45, 129, 203, 107, 192, 35}, +{69, 202, 141, 166, 225, 79, 197, 43, 9, 224, 252, 137, 126, 35, 255, 105, 23, 211, 201, 114, 214, 157, 210, 51, 75, 97, 140, 98, 16, 41, 198, 132, 214, 173, 108, 156, 152, 185, 2, 41, 12, 45, 233, 67, 52, 194, 144, 139, 99, 242, 12, 67, 109, 109, 2, 75, 195, 244, 229, 105, 240, 37, 28, 74, 27, 34, 119, 74, 122, 241, 208, 102, 187, 175, 251, 203, 173, 199, 209, 44, 120, 97, 20, 188, 132, 148, 165, 248, 241, 218, 120, 14, 186, 16, 98, 217, 12, 229, 130, 96, 86, 253, 91, 217, 233, 230, 135, 65, 184, 241, 2, 0, 53, 10, 183, 56, 217, 134, 56, 12, 55, 91, 48, 195, 18, 226, 143, 217}, +{198, 214, 196, 28, 100, 115, 1, 249, 152, 109, 155, 234, 12, 206, 179, 107, 62, 153, 195, 162, 160, 15, 220, 89, 42, 98, 66, 75, 215, 199, 160, 215, 248, 234, 74, 150, 220, 62, 183, 131, 55, 235, 86, 207, 146, 95, 199, 176, 130, 104, 250, 139, 6, 114, 43, 43, 150, 160, 24, 80, 108, 96, 125, 1, 174, 74, 157, 172, 229, 28, 254, 111, 37, 52, 209, 102, 219, 154, 203, 173, 158, 193, 169, 48, 66, 69, 11, 247, 227, 50, 47, 6, 231, 229, 25, 180, 171, 19, 198, 154, 170, 6, 54, 56, 244, 65, 205, 189, 167, 15, 229, 102, 224, 101, 255, 120, 239, 108, 236, 112, 174, 225, 232, 160, 253, 105, 120, 103}, +{13, 193, 133, 197, 236, 142, 242, 11, 10, 125, 243, 135, 33, 205, 107, 29, 154, 187, 140, 179, 26, 41, 44, 50, 135, 41, 81, 59, 134, 134, 163, 174, 52, 49, 132, 21, 48, 61, 4, 36, 187, 64, 24, 244, 40, 67, 226, 151, 205, 48, 50, 54, 133, 56, 7, 235, 187, 103, 149, 133, 115, 77, 142, 84, 187, 87, 255, 86, 225, 173, 87, 243, 194, 170, 81, 185, 32, 172, 120, 18, 117, 207, 250, 55, 29, 104, 151, 142, 89, 12, 135, 118, 38, 94, 22, 225, 213, 158, 193, 150, 90, 177, 35, 9, 190, 59, 89, 238, 244, 117, 223, 176, 69, 103, 84, 244, 96, 11, 199, 81, 220, 56, 138, 140, 159, 38, 34, 153}, +{39, 27, 68, 229, 79, 254, 168, 151, 93, 38, 18, 161, 187, 66, 110, 173, 125, 5, 110, 145, 15, 19, 153, 157, 34, 178, 84, 138, 149, 44, 143, 145, 57, 208, 235, 141, 206, 187, 107, 211, 29, 206, 122, 81, 139, 133, 94, 149, 110, 52, 219, 178, 44, 47, 93, 86, 253, 215, 250, 79, 193, 22, 230, 42, 161, 16, 249, 209, 17, 14, 185, 191, 29, 216, 217, 179, 160, 85, 252, 7, 73, 92, 34, 21, 99, 21, 45, 171, 31, 141, 57, 91, 184, 235, 248, 27, 245, 55, 190, 107, 17, 34, 44, 139, 9, 215, 43, 93, 76, 158, 53, 58, 238, 77, 138, 167, 243, 106, 164, 68, 135, 240, 126, 159, 126, 19, 250, 162}, +{8, 96, 212, 37, 126, 203, 235, 25, 214, 140, 107, 142, 120, 123, 163, 104, 216, 214, 119, 17, 178, 103, 132, 23, 58, 90, 12, 95, 18, 165, 159, 32, 23, 29, 120, 231, 209, 180, 34, 16, 138, 186, 78, 51, 99, 84, 147, 11, 119, 202, 8, 251, 94, 253, 110, 243, 138, 223, 224, 78, 23, 78, 129, 31, 254, 92, 3, 204, 159, 143, 17, 64, 179, 72, 77, 31, 159, 180, 15, 146, 167, 180, 187, 62, 74, 226, 151, 73, 116, 105, 163, 13, 31, 62, 3, 193, 230, 208, 153, 253, 234, 21, 214, 16, 172, 53, 113, 220, 108, 144, 133, 58, 172, 187, 209, 122, 179, 39, 122, 248, 230, 154, 15, 8, 68, 48, 98, 98}, +{81, 173, 118, 69, 141, 164, 9, 191, 203, 80, 159, 223, 3, 141, 197, 146, 61, 42, 155, 207, 216, 16, 61, 196, 17, 219, 23, 135, 152, 8, 231, 203, 207, 245, 135, 235, 69, 52, 216, 230, 37, 168, 91, 194, 143, 122, 239, 1, 101, 190, 78, 184, 24, 98, 170, 187, 68, 120, 137, 203, 31, 197, 166, 44, 46, 46, 185, 174, 160, 69, 72, 204, 180, 10, 25, 155, 197, 169, 249, 213, 209, 193, 228, 79, 59, 202, 246, 12, 221, 40, 55, 57, 216, 144, 128, 229, 214, 226, 221, 39, 161, 69, 117, 55, 164, 170, 56, 244, 112, 2, 107, 28, 200, 199, 192, 159, 243, 106, 93, 72, 98, 221, 97, 30, 28, 138, 213, 94}, +{56, 58, 193, 225, 25, 140, 70, 241, 193, 210, 178, 153, 122, 100, 4, 29, 18, 181, 23, 212, 24, 153, 181, 134, 30, 230, 96, 169, 60, 187, 202, 162, 92, 137, 32, 249, 195, 48, 215, 200, 40, 250, 35, 94, 54, 10, 65, 164, 77, 227, 124, 128, 247, 150, 158, 6, 48, 55, 74, 196, 229, 113, 70, 250, 18, 98, 87, 209, 245, 179, 150, 71, 241, 65, 64, 215, 154, 45, 204, 166, 178, 9, 163, 81, 90, 206, 123, 48, 159, 164, 241, 53, 74, 8, 116, 12, 103, 239, 126, 105, 210, 4, 70, 216, 147, 14, 178, 229, 26, 100, 210, 136, 102, 176, 238, 234, 141, 152, 248, 4, 59, 234, 230, 199, 246, 249, 42, 241}, +{154, 161, 158, 235, 20, 79, 4, 1, 88, 43, 20, 219, 162, 50, 141, 220, 211, 255, 62, 154, 235, 225, 52, 219, 158, 122, 237, 242, 173, 38, 161, 83, 225, 82, 72, 29, 116, 94, 237, 97, 128, 130, 254, 137, 84, 123, 71, 85, 221, 160, 212, 209, 153, 131, 156, 22, 164, 214, 238, 57, 7, 162, 27, 95, 80, 236, 85, 144, 120, 244, 246, 146, 234, 84, 150, 67, 134, 238, 29, 131, 16, 221, 52, 3, 41, 106, 162, 47, 16, 38, 52, 13, 19, 61, 201, 72, 184, 4, 97, 4, 219, 224, 201, 215, 118, 126, 94, 224, 56, 202, 58, 158, 108, 124, 89, 118, 56, 254, 162, 184, 36, 60, 24, 229, 129, 96, 198, 186}, +{33, 164, 86, 144, 43, 114, 78, 118, 171, 187, 102, 198, 15, 153, 5, 241, 17, 87, 60, 107, 94, 168, 191, 46, 149, 221, 105, 150, 33, 213, 17, 35, 197, 232, 16, 254, 141, 233, 139, 211, 227, 136, 192, 149, 162, 200, 222, 45, 219, 255, 189, 114, 132, 0, 168, 212, 59, 130, 29, 193, 116, 238, 187, 82, 117, 10, 150, 80, 32, 223, 187, 4, 48, 158, 108, 26, 58, 115, 112, 137, 182, 222, 99, 112, 62, 184, 200, 42, 75, 249, 255, 247, 26, 14, 153, 68, 43, 125, 147, 134, 68, 176, 148, 28, 229, 79, 39, 163, 53, 149, 148, 184, 73, 246, 181, 156, 22, 245, 144, 125, 170, 70, 23, 196, 58, 144, 119, 86}, +{75, 222, 136, 250, 109, 255, 31, 241, 1, 30, 61, 245, 172, 237, 92, 56, 30, 170, 75, 197, 145, 209, 52, 119, 143, 202, 48, 144, 151, 17, 197, 175, 107, 227, 8, 162, 188, 243, 89, 178, 131, 0, 64, 57, 59, 135, 68, 137, 16, 28, 85, 115, 7, 60, 131, 128, 108, 122, 55, 16, 134, 137, 251, 129, 235, 99, 148, 169, 87, 60, 222, 192, 77, 217, 162, 214, 64, 18, 48, 46, 199, 240, 153, 197, 132, 124, 57, 226, 54, 166, 255, 159, 216, 80, 79, 56, 32, 207, 69, 255, 37, 13, 245, 2, 174, 235, 3, 1, 233, 2, 102, 166, 120, 23, 151, 84, 55, 97, 163, 50, 13, 244, 70, 209, 19, 131, 178, 245}, +{144, 91, 156, 87, 165, 162, 200, 62, 157, 179, 176, 60, 79, 10, 126, 27, 44, 181, 164, 88, 170, 14, 140, 210, 206, 105, 5, 191, 186, 196, 53, 59, 55, 233, 53, 206, 62, 14, 213, 132, 250, 248, 85, 194, 225, 118, 44, 193, 75, 222, 89, 163, 208, 63, 8, 112, 128, 130, 219, 71, 39, 38, 99, 71, 32, 50, 102, 165, 211, 51, 162, 105, 206, 128, 186, 236, 200, 242, 178, 9, 9, 124, 114, 126, 101, 198, 10, 39, 203, 115, 21, 88, 178, 242, 107, 200, 143, 31, 151, 142, 210, 21, 135, 50, 125, 199, 55, 106, 116, 27, 222, 82, 7, 74, 58, 53, 206, 8, 44, 109, 106, 137, 163, 88, 68, 49, 198, 93}, +{177, 130, 249, 75, 232, 87, 31, 120, 249, 232, 75, 90, 40, 0, 7, 209, 231, 85, 83, 116, 142, 60, 250, 232, 8, 97, 219, 139, 94, 206, 134, 241, 237, 49, 68, 235, 92, 60, 13, 151, 50, 29, 146, 216, 188, 112, 45, 115, 121, 60, 225, 187, 32, 115, 25, 181, 195, 75, 144, 140, 105, 25, 49, 225, 155, 201, 7, 54, 90, 237, 102, 38, 53, 250, 235, 161, 136, 57, 240, 99, 90, 103, 205, 214, 183, 193, 234, 69, 232, 115, 30, 113, 179, 180, 185, 240, 28, 90, 255, 6, 146, 203, 178, 116, 195, 216, 63, 14, 169, 79, 143, 213, 135, 199, 196, 199, 143, 254, 39, 166, 88, 135, 72, 32, 193, 236, 58, 157}, +{174, 218, 5, 103, 148, 15, 130, 138, 57, 61, 252, 66, 9, 140, 224, 79, 127, 156, 155, 145, 64, 159, 229, 74, 247, 55, 8, 144, 215, 195, 168, 62, 244, 152, 91, 52, 88, 46, 152, 30, 254, 148, 185, 0, 249, 30, 248, 14, 33, 220, 231, 235, 132, 196, 213, 180, 229, 47, 194, 224, 45, 166, 11, 255, 114, 23, 10, 141, 206, 187, 158, 237, 141, 104, 93, 95, 240, 59, 136, 92, 169, 141, 202, 102, 189, 58, 23, 180, 131, 169, 229, 115, 68, 79, 125, 186, 26, 40, 63, 88, 96, 113, 240, 75, 7, 179, 157, 32, 137, 72, 83, 216, 15, 214, 172, 231, 96, 67, 97, 128, 235, 145, 164, 121, 220, 37, 145, 167}, +{105, 48, 247, 76, 206, 72, 252, 250, 239, 28, 169, 1, 80, 152, 31, 39, 199, 253, 183, 1, 16, 15, 7, 74, 103, 46, 131, 49, 72, 105, 9, 151, 129, 230, 68, 180, 22, 185, 141, 77, 29, 218, 37, 152, 74, 190, 164, 199, 228, 200, 98, 208, 171, 29, 91, 155, 94, 191, 53, 247, 169, 36, 23, 155, 109, 147, 20, 56, 177, 159, 247, 7, 169, 81, 248, 182, 4, 138, 215, 174, 104, 147, 191, 153, 71, 80, 224, 215, 129, 250, 16, 0, 195, 103, 83, 240, 183, 202, 30, 239, 154, 220, 194, 250, 212, 135, 228, 214, 192, 148, 77, 158, 48, 146, 216, 209, 153, 18, 145, 247, 229, 146, 253, 200, 83, 167, 149, 251}, +{145, 201, 197, 31, 253, 110, 20, 78, 190, 44, 102, 168, 80, 244, 102, 93, 161, 153, 171, 223, 43, 40, 121, 193, 69, 87, 59, 66, 54, 179, 161, 99, 1, 116, 27, 167, 2, 24, 208, 75, 22, 24, 159, 195, 237, 185, 152, 157, 3, 236, 158, 215, 45, 120, 45, 33, 11, 103, 121, 68, 246, 170, 119, 5, 112, 77, 174, 168, 174, 202, 4, 103, 109, 185, 168, 74, 42, 3, 12, 166, 69, 32, 72, 72, 74, 59, 165, 173, 9, 27, 167, 31, 186, 180, 53, 104, 199, 74, 137, 4, 59, 159, 209, 16, 95, 11, 247, 104, 6, 126, 255, 255, 148, 72, 147, 7, 248, 130, 55, 224, 86, 203, 201, 76, 84, 104, 198, 76}, +{186, 127, 151, 171, 59, 181, 109, 105, 57, 1, 156, 30, 252, 65, 88, 7, 197, 198, 79, 197, 50, 50, 184, 249, 52, 1, 53, 142, 123, 234, 34, 252, 139, 196, 67, 173, 85, 20, 231, 18, 61, 168, 134, 70, 59, 21, 40, 92, 200, 105, 220, 70, 10, 86, 181, 230, 54, 145, 0, 197, 240, 135, 70, 192, 175, 159, 84, 165, 3, 209, 187, 11, 42, 7, 149, 23, 87, 13, 248, 7, 152, 252, 211, 255, 118, 17, 67, 152, 232, 0, 15, 229, 237, 157, 156, 2, 122, 143, 253, 160, 156, 24, 56, 173, 189, 149, 73, 93, 22, 48, 119, 220, 81, 57, 184, 135, 164, 157, 111, 96, 113, 62, 107, 239, 134, 32, 74, 191}, +{83, 13, 240, 87, 93, 156, 86, 220, 57, 245, 216, 180, 113, 135, 173, 52, 235, 5, 38, 144, 61, 200, 49, 10, 87, 98, 160, 170, 72, 93, 41, 241, 159, 217, 193, 63, 46, 249, 24, 117, 188, 78, 220, 218, 231, 230, 33, 97, 123, 86, 0, 39, 15, 10, 73, 2, 25, 246, 222, 51, 173, 253, 19, 10, 133, 109, 230, 140, 202, 202, 50, 148, 81, 109, 190, 230, 67, 70, 232, 236, 235, 169, 83, 233, 183, 200, 109, 11, 116, 150, 149, 181, 141, 46, 202, 147, 17, 54, 82, 116, 39, 54, 170, 53, 5, 66, 120, 176, 245, 65, 132, 254, 158, 199, 39, 1, 217, 245, 197, 252, 210, 19, 139, 159, 201, 193, 242, 106}, +{103, 39, 211, 0, 16, 166, 143, 225, 109, 237, 181, 178, 218, 189, 33, 125, 179, 153, 29, 118, 59, 141, 250, 26, 178, 56, 20, 39, 96, 123, 203, 63, 86, 173, 49, 55, 1, 171, 91, 6, 1, 5, 28, 43, 148, 200, 220, 75, 244, 200, 247, 244, 248, 249, 14, 86, 228, 186, 93, 112, 242, 181, 54, 164, 26, 159, 178, 253, 3, 193, 109, 164, 144, 98, 120, 211, 132, 178, 116, 68, 37, 19, 122, 25, 64, 155, 47, 26, 168, 248, 75, 202, 51, 226, 160, 79, 112, 87, 118, 53, 177, 72, 4, 219, 244, 54, 215, 154, 246, 51, 80, 21, 210, 8, 50, 150, 111, 138, 161, 175, 151, 25, 4, 155, 254, 211, 103, 89}, +{98, 189, 84, 169, 115, 144, 47, 222, 52, 101, 120, 232, 139, 129, 28, 126, 21, 118, 48, 159, 220, 251, 102, 22, 14, 151, 12, 18, 57, 152, 249, 172, 122, 115, 53, 216, 164, 70, 185, 81, 203, 221, 107, 236, 82, 226, 68, 157, 96, 78, 202, 178, 5, 249, 158, 171, 113, 253, 160, 30, 243, 220, 110, 100, 160, 83, 13, 118, 59, 96, 116, 120, 147, 74, 182, 125, 36, 130, 154, 202, 126, 215, 121, 17, 246, 249, 13, 82, 148, 220, 5, 52, 104, 204, 82, 52, 35, 186, 174, 248, 236, 207, 107, 122, 183, 141, 134, 39, 179, 12, 74, 73, 196, 120, 111, 204, 66, 70, 54, 186, 5, 78, 214, 2, 205, 188, 163, 236}, +{163, 210, 246, 92, 243, 171, 6, 132, 83, 31, 37, 24, 232, 4, 242, 207, 222, 191, 156, 172, 97, 149, 254, 251, 141, 129, 236, 199, 30, 155, 254, 162, 72, 135, 243, 1, 25, 41, 200, 210, 233, 239, 69, 145, 85, 182, 254, 12, 155, 134, 8, 167, 219, 162, 168, 192, 80, 6, 42, 155, 232, 165, 238, 91, 166, 101, 223, 221, 155, 85, 29, 248, 43, 55, 135, 69, 134, 119, 238, 156, 34, 164, 232, 20, 21, 223, 137, 190, 175, 16, 106, 242, 147, 90, 107, 202, 231, 49, 48, 151, 230, 37, 80, 55, 117, 9, 122, 190, 26, 59, 226, 186, 157, 202, 65, 128, 96, 24, 184, 180, 151, 37, 152, 61, 129, 8, 26, 160}, +{66, 246, 122, 54, 154, 144, 140, 5, 75, 165, 77, 101, 2, 201, 177, 206, 225, 81, 109, 24, 12, 254, 2, 195, 46, 210, 101, 235, 214, 63, 15, 43, 116, 69, 189, 70, 130, 63, 20, 15, 76, 240, 160, 105, 15, 196, 79, 152, 50, 225, 111, 62, 95, 54, 172, 92, 230, 52, 33, 63, 96, 164, 129, 32, 177, 12, 144, 161, 36, 232, 96, 243, 208, 158, 29, 70, 234, 153, 147, 30, 123, 200, 68, 142, 117, 213, 18, 39, 193, 44, 118, 120, 129, 5, 65, 117, 163, 153, 250, 163, 227, 131, 9, 39, 23, 142, 47, 16, 228, 147, 184, 149, 198, 236, 32, 205, 124, 15, 109, 71, 215, 107, 114, 215, 0, 8, 245, 160}, +{132, 214, 10, 15, 33, 124, 182, 106, 252, 115, 24, 241, 160, 138, 174, 204, 128, 253, 89, 253, 62, 165, 223, 143, 209, 202, 42, 207, 246, 62, 220, 244, 58, 77, 49, 214, 134, 69, 176, 73, 5, 15, 168, 236, 26, 48, 152, 28, 153, 128, 47, 148, 171, 210, 83, 163, 30, 7, 225, 252, 6, 67, 215, 165, 197, 19, 223, 192, 26, 36, 143, 255, 100, 19, 204, 40, 229, 222, 168, 124, 158, 151, 217, 113, 51, 34, 130, 63, 32, 12, 102, 164, 96, 79, 250, 18, 254, 252, 237, 250, 88, 12, 129, 158, 94, 71, 198, 234, 249, 144, 66, 190, 142, 114, 5, 204, 114, 165, 78, 132, 26, 199, 50, 254, 79, 8, 7, 247}, +{54, 32, 51, 84, 91, 102, 228, 83, 167, 38, 114, 106, 68, 0, 89, 90, 35, 113, 198, 140, 174, 16, 82, 62, 146, 199, 75, 140, 98, 155, 201, 239, 137, 106, 202, 68, 225, 104, 34, 29, 251, 26, 144, 22, 214, 159, 104, 221, 3, 212, 126, 31, 97, 55, 63, 202, 198, 31, 130, 158, 109, 136, 175, 132, 148, 128, 6, 55, 67, 241, 231, 15, 242, 61, 77, 28, 241, 121, 69, 40, 53, 156, 64, 217, 144, 3, 204, 102, 50, 9, 176, 239, 97, 109, 173, 191, 123, 27, 157, 255, 68, 249, 3, 152, 71, 140, 195, 78, 227, 28, 95, 205, 240, 86, 52, 224, 128, 37, 136, 203, 94, 20, 151, 73, 211, 123, 165, 251}, +{60, 242, 102, 145, 25, 101, 126, 162, 240, 2, 239, 41, 136, 160, 170, 127, 224, 215, 156, 90, 221, 163, 19, 121, 134, 16, 53, 111, 80, 25, 93, 82, 201, 162, 94, 92, 162, 234, 204, 246, 140, 4, 121, 198, 160, 104, 226, 130, 235, 232, 93, 56, 53, 199, 0, 212, 237, 43, 78, 60, 68, 6, 52, 214, 62, 107, 213, 77, 39, 154, 20, 71, 174, 6, 113, 76, 145, 212, 135, 230, 80, 74, 90, 80, 50, 253, 89, 20, 127, 193, 80, 163, 7, 231, 69, 78, 66, 178, 205, 255, 236, 79, 135, 77, 89, 117, 57, 9, 216, 233, 194, 253, 180, 114, 168, 206, 31, 151, 94, 20, 120, 29, 114, 79, 235, 19, 121, 252}, +{99, 232, 88, 63, 5, 126, 186, 60, 247, 128, 165, 194, 252, 24, 5, 132, 141, 102, 43, 148, 74, 198, 119, 21, 163, 37, 255, 92, 141, 49, 169, 152, 43, 202, 85, 238, 77, 118, 59, 81, 134, 5, 79, 36, 55, 117, 175, 1, 90, 130, 83, 138, 252, 160, 130, 178, 154, 64, 34, 79, 50, 129, 126, 161, 0, 212, 111, 107, 59, 197, 251, 42, 169, 67, 38, 8, 201, 75, 52, 90, 149, 82, 24, 235, 80, 187, 123, 57, 57, 222, 217, 66, 173, 116, 146, 5, 120, 112, 161, 186, 79, 17, 137, 134, 32, 142, 156, 81, 56, 136, 255, 157, 101, 88, 179, 137, 225, 125, 137, 178, 19, 10, 214, 188, 176, 118, 188, 125}, +{109, 207, 31, 4, 216, 16, 231, 224, 125, 7, 152, 96, 156, 46, 148, 166, 122, 32, 254, 152, 160, 167, 156, 143, 221, 22, 251, 8, 73, 191, 193, 160, 223, 233, 65, 212, 253, 241, 208, 85, 211, 18, 9, 228, 39, 248, 234, 32, 19, 82, 4, 241, 160, 254, 118, 49, 65, 236, 90, 149, 207, 9, 89, 154, 213, 171, 191, 88, 111, 110, 217, 172, 217, 249, 47, 182, 197, 69, 0, 64, 57, 14, 70, 94, 231, 172, 167, 131, 32, 224, 65, 60, 43, 119, 224, 142, 11, 222, 27, 193, 141, 126, 234, 41, 55, 75, 232, 205, 43, 228, 90, 19, 121, 154, 247, 219, 72, 15, 145, 112, 28, 223, 76, 244, 131, 72, 17, 169}, +{178, 199, 217, 42, 134, 79, 251, 166, 64, 85, 33, 220, 36, 146, 190, 228, 5, 105, 197, 55, 194, 29, 200, 233, 207, 201, 36, 74, 67, 172, 97, 3, 23, 223, 29, 96, 37, 122, 116, 170, 95, 48, 118, 166, 224, 246, 198, 174, 175, 132, 251, 242, 252, 73, 137, 202, 91, 143, 74, 131, 54, 188, 197, 222, 198, 199, 3, 215, 145, 168, 45, 187, 213, 105, 93, 108, 34, 48, 114, 135, 197, 226, 21, 184, 52, 184, 132, 236, 243, 66, 138, 108, 94, 225, 63, 206, 104, 15, 118, 3, 254, 164, 227, 200, 252, 168, 204, 185, 210, 233, 190, 57, 242, 95, 209, 26, 96, 168, 63, 251, 97, 19, 235, 122, 24, 234, 173, 238}, +{76, 96, 27, 219, 30, 254, 87, 31, 15, 57, 87, 99, 94, 26, 141, 101, 234, 163, 205, 118, 149, 121, 228, 213, 211, 201, 254, 117, 138, 32, 0, 160, 25, 179, 232, 85, 85, 177, 60, 29, 4, 22, 8, 153, 71, 243, 239, 0, 98, 159, 170, 24, 54, 231, 200, 6, 80, 146, 61, 79, 80, 62, 129, 92, 95, 184, 10, 162, 54, 250, 66, 84, 15, 168, 252, 58, 248, 136, 51, 22, 70, 211, 161, 85, 57, 136, 107, 230, 239, 119, 95, 157, 45, 15, 82, 215, 110, 16, 169, 9, 124, 50, 34, 24, 219, 174, 172, 216, 152, 224, 127, 6, 25, 242, 59, 67, 34, 248, 99, 30, 81, 67, 80, 240, 243, 80, 163, 76}, +{201, 66, 194, 5, 176, 240, 191, 199, 57, 32, 117, 26, 205, 213, 9, 12, 80, 86, 90, 7, 161, 211, 183, 63, 140, 15, 190, 252, 19, 209, 79, 52, 247, 42, 223, 166, 169, 18, 113, 245, 51, 114, 117, 234, 62, 10, 117, 68, 73, 55, 51, 225, 19, 89, 108, 242, 116, 239, 246, 0, 111, 221, 116, 242, 125, 206, 76, 163, 236, 169, 35, 14, 239, 125, 19, 229, 61, 30, 246, 112, 200, 214, 56, 108, 5, 229, 220, 21, 234, 188, 66, 246, 198, 211, 224, 49, 144, 131, 29, 64, 65, 170, 160, 40, 127, 227, 163, 192, 192, 134, 217, 128, 167, 169, 117, 49, 31, 72, 30, 183, 0, 41, 20, 81, 10, 115, 191, 209}, +{76, 12, 29, 239, 20, 99, 138, 217, 155, 178, 236, 161, 254, 150, 226, 160, 5, 51, 253, 194, 77, 246, 160, 6, 99, 19, 4, 104, 129, 31, 42, 29, 34, 32, 80, 240, 52, 173, 114, 111, 72, 218, 211, 249, 30, 50, 27, 240, 126, 108, 112, 235, 237, 24, 234, 240, 170, 34, 147, 212, 20, 207, 116, 16, 83, 153, 56, 90, 74, 88, 65, 41, 225, 240, 197, 205, 202, 150, 196, 61, 46, 245, 185, 166, 254, 250, 138, 243, 177, 118, 228, 85, 1, 251, 80, 216, 173, 108, 90, 49, 207, 85, 37, 76, 5, 201, 40, 173, 208, 105, 27, 156, 158, 183, 177, 72, 205, 188, 198, 72, 215, 103, 14, 38, 174, 19, 69, 139}, +{134, 222, 63, 112, 25, 68, 203, 186, 172, 38, 149, 161, 183, 66, 101, 29, 109, 154, 152, 178, 106, 21, 131, 74, 117, 165, 228, 105, 185, 43, 15, 43, 115, 197, 29, 142, 18, 31, 37, 192, 179, 176, 231, 79, 3, 59, 154, 32, 218, 197, 45, 52, 17, 132, 205, 171, 112, 241, 19, 218, 225, 193, 197, 68, 241, 200, 23, 86, 234, 190, 214, 65, 5, 81, 249, 82, 170, 6, 74, 177, 89, 112, 103, 77, 222, 23, 193, 89, 160, 137, 227, 4, 210, 242, 22, 104, 217, 117, 195, 138, 209, 74, 131, 16, 110, 236, 121, 81, 101, 122, 84, 3, 123, 191, 53, 190, 101, 222, 71, 58, 230, 27, 4, 86, 192, 255, 7, 169}, +{174, 42, 77, 153, 207, 254, 92, 149, 245, 199, 151, 175, 114, 197, 148, 185, 198, 13, 215, 119, 14, 228, 8, 24, 186, 97, 6, 34, 188, 213, 206, 99, 49, 197, 147, 239, 43, 226, 236, 2, 92, 224, 207, 241, 138, 40, 68, 139, 50, 184, 162, 33, 5, 78, 243, 212, 213, 140, 180, 86, 58, 209, 188, 9, 127, 58, 20, 120, 209, 17, 50, 183, 46, 248, 91, 203, 254, 223, 1, 147, 43, 89, 156, 210, 55, 143, 193, 244, 33, 109, 7, 174, 224, 158, 202, 19, 16, 69, 204, 189, 187, 210, 246, 56, 93, 81, 58, 190, 46, 31, 28, 166, 184, 142, 84, 196, 181, 153, 238, 190, 66, 93, 59, 213, 234, 98, 211, 175}, +{173, 53, 157, 95, 168, 21, 50, 84, 74, 168, 60, 185, 25, 44, 211, 34, 213, 25, 237, 248, 90, 98, 141, 204, 3, 249, 70, 36, 97, 24, 84, 231, 106, 55, 251, 85, 211, 77, 48, 241, 161, 226, 238, 43, 215, 130, 151, 143, 132, 229, 175, 237, 156, 76, 91, 248, 206, 46, 24, 229, 208, 144, 154, 131, 200, 247, 68, 79, 37, 44, 19, 14, 208, 40, 34, 102, 137, 93, 244, 95, 8, 45, 6, 121, 221, 50, 197, 43, 26, 185, 201, 6, 241, 135, 107, 40, 52, 115, 127, 103, 101, 212, 45, 210, 52, 168, 244, 191, 201, 234, 113, 37, 47, 151, 179, 166, 224, 124, 85, 95, 148, 189, 142, 190, 232, 81, 201, 195}, +{77, 95, 181, 160, 129, 43, 25, 107, 125, 127, 59, 170, 2, 179, 216, 174, 51, 161, 228, 146, 137, 18, 136, 121, 244, 201, 179, 229, 214, 203, 34, 104, 231, 25, 0, 53, 162, 80, 166, 157, 216, 48, 9, 55, 26, 235, 95, 186, 6, 158, 149, 76, 153, 15, 144, 107, 245, 22, 182, 48, 104, 19, 107, 4, 159, 30, 96, 52, 141, 96, 27, 213, 152, 141, 58, 244, 178, 68, 4, 165, 22, 108, 179, 80, 43, 127, 16, 229, 197, 26, 231, 253, 245, 36, 244, 41, 161, 237, 206, 138, 67, 74, 131, 254, 113, 106, 252, 174, 3, 13, 23, 239, 229, 215, 135, 224, 248, 216, 215, 180, 46, 75, 249, 240, 175, 195, 95, 209}, +{166, 247, 12, 33, 58, 208, 225, 87, 187, 186, 33, 129, 127, 195, 130, 152, 28, 51, 102, 70, 167, 101, 116, 117, 140, 111, 248, 207, 62, 161, 104, 130, 28, 120, 16, 6, 196, 189, 156, 10, 40, 83, 91, 224, 231, 16, 120, 227, 33, 19, 242, 174, 158, 202, 122, 70, 156, 227, 67, 118, 58, 115, 38, 136, 97, 63, 229, 211, 191, 225, 0, 89, 40, 59, 150, 148, 39, 86, 68, 188, 211, 183, 249, 247, 47, 196, 18, 94, 231, 253, 192, 72, 31, 82, 179, 40, 209, 15, 11, 21, 171, 50, 43, 148, 219, 161, 11, 49, 240, 214, 54, 105, 170, 212, 39, 175, 41, 0, 17, 18, 9, 207, 38, 2, 47, 38, 182, 190}, +{179, 160, 241, 216, 243, 12, 20, 249, 61, 175, 149, 215, 185, 188, 112, 52, 163, 154, 49, 119, 153, 84, 189, 221, 207, 2, 232, 34, 229, 60, 240, 118, 12, 111, 199, 97, 135, 236, 73, 205, 35, 37, 137, 106, 217, 192, 100, 150, 133, 144, 206, 63, 68, 225, 51, 254, 67, 83, 136, 241, 241, 45, 137, 161, 21, 55, 203, 30, 180, 34, 212, 42, 96, 78, 43, 216, 51, 81, 85, 82, 51, 137, 63, 229, 200, 71, 110, 102, 153, 138, 145, 43, 178, 73, 104, 81, 159, 143, 70, 213, 156, 31, 193, 79, 178, 243, 129, 192, 48, 33, 170, 16, 39, 8, 175, 33, 164, 24, 192, 30, 15, 12, 5, 14, 16, 144, 58, 245}, +{5, 236, 141, 231, 107, 90, 61, 83, 131, 137, 179, 101, 114, 43, 38, 98, 202, 135, 88, 87, 110, 245, 104, 63, 74, 229, 244, 126, 47, 239, 51, 60, 28, 41, 116, 253, 72, 91, 201, 226, 55, 246, 143, 197, 233, 210, 20, 50, 197, 180, 156, 251, 145, 150, 173, 192, 114, 89, 27, 85, 149, 153, 76, 194, 141, 237, 167, 133, 167, 246, 188, 162, 155, 105, 55, 148, 163, 163, 99, 87, 243, 139, 99, 64, 145, 49, 192, 3, 47, 26, 89, 67, 229, 64, 232, 58, 147, 115, 173, 39, 79, 8, 49, 133, 171, 168, 205, 2, 141, 217, 8, 105, 156, 218, 108, 207, 139, 134, 67, 122, 231, 196, 131, 164, 156, 132, 240, 37}, +{107, 19, 123, 171, 26, 247, 160, 134, 153, 147, 31, 226, 161, 123, 122, 10, 98, 180, 77, 111, 248, 37, 223, 142, 136, 97, 251, 167, 182, 8, 203, 15, 141, 165, 178, 104, 240, 144, 26, 113, 164, 190, 210, 240, 176, 167, 194, 69, 91, 133, 1, 2, 169, 76, 131, 136, 109, 166, 85, 94, 175, 108, 93, 230, 237, 131, 176, 6, 133, 196, 69, 87, 246, 77, 194, 70, 108, 80, 31, 122, 179, 95, 176, 109, 33, 152, 136, 88, 131, 7, 228, 210, 161, 58, 106, 182, 194, 185, 38, 150, 205, 115, 83, 83, 197, 67, 21, 227, 93, 232, 205, 50, 63, 80, 131, 134, 203, 208, 44, 247, 242, 7, 46, 52, 164, 163, 81, 82}, +{164, 0, 131, 221, 4, 52, 208, 235, 8, 244, 101, 253, 197, 82, 114, 24, 11, 31, 59, 56, 122, 9, 128, 8, 240, 249, 15, 92, 131, 249, 57, 254, 155, 120, 241, 107, 157, 121, 84, 79, 123, 204, 160, 43, 90, 111, 130, 75, 152, 35, 206, 62, 152, 48, 62, 214, 10, 248, 254, 148, 247, 22, 226, 167, 181, 120, 109, 246, 204, 27, 133, 138, 54, 10, 71, 221, 238, 53, 131, 243, 181, 67, 66, 200, 10, 223, 26, 194, 39, 172, 171, 201, 218, 17, 33, 117, 36, 60, 10, 55, 111, 208, 79, 202, 36, 3, 105, 243, 140, 155, 189, 174, 56, 138, 240, 247, 160, 104, 165, 28, 13, 168, 93, 68, 224, 227, 211, 174}, +{179, 254, 135, 126, 132, 3, 41, 87, 84, 77, 112, 16, 102, 172, 55, 171, 243, 231, 9, 161, 251, 233, 4, 176, 172, 30, 141, 16, 213, 183, 198, 129, 126, 131, 50, 178, 140, 83, 84, 100, 37, 81, 148, 252, 133, 141, 206, 141, 171, 246, 162, 86, 107, 198, 98, 57, 147, 47, 213, 142, 201, 13, 92, 127, 164, 228, 82, 183, 86, 91, 194, 120, 121, 251, 174, 161, 202, 146, 255, 33, 47, 121, 243, 195, 246, 181, 235, 119, 101, 244, 140, 40, 193, 83, 191, 148, 76, 18, 46, 149, 155, 141, 219, 138, 109, 145, 234, 77, 29, 62, 245, 89, 32, 158, 91, 234, 196, 231, 40, 162, 253, 35, 160, 128, 218, 101, 75, 240}, +{120, 76, 87, 235, 80, 141, 128, 182, 12, 48, 107, 218, 103, 100, 163, 14, 199, 62, 64, 118, 21, 46, 133, 13, 12, 247, 73, 166, 210, 47, 148, 16, 60, 26, 150, 184, 87, 195, 9, 141, 20, 117, 218, 116, 1, 251, 158, 87, 15, 32, 227, 28, 143, 127, 237, 43, 14, 220, 35, 254, 77, 60, 56, 7, 69, 145, 168, 32, 92, 229, 250, 204, 20, 74, 187, 207, 242, 28, 211, 32, 145, 132, 190, 251, 55, 53, 142, 49, 167, 115, 18, 28, 43, 177, 218, 186, 121, 70, 67, 35, 19, 131, 120, 95, 110, 134, 155, 99, 141, 202, 177, 190, 253, 105, 40, 253, 200, 102, 153, 234, 168, 87, 157, 21, 99, 157, 112, 110}, +{137, 147, 20, 84, 218, 152, 7, 205, 201, 120, 17, 72, 16, 21, 6, 32, 248, 24, 49, 106, 141, 165, 36, 52, 24, 252, 64, 206, 183, 39, 200, 171, 178, 229, 147, 200, 228, 165, 150, 116, 110, 21, 80, 180, 62, 60, 155, 104, 47, 199, 14, 150, 48, 95, 45, 66, 82, 235, 233, 6, 174, 43, 114, 48, 244, 182, 151, 2, 197, 44, 210, 247, 180, 75, 211, 167, 48, 139, 1, 166, 128, 10, 121, 108, 203, 90, 98, 186, 125, 169, 207, 16, 11, 136, 79, 58, 110, 93, 33, 40, 121, 122, 135, 42, 170, 81, 47, 228, 71, 20, 72, 63, 110, 60, 175, 93, 18, 147, 87, 156, 238, 244, 48, 57, 113, 185, 187, 232}, +{199, 206, 32, 205, 141, 83, 251, 79, 219, 118, 28, 192, 226, 221, 101, 151, 228, 124, 76, 44, 241, 88, 126, 91, 64, 114, 220, 56, 225, 175, 45, 53, 167, 36, 26, 154, 191, 66, 24, 141, 201, 108, 131, 191, 62, 91, 59, 133, 251, 64, 84, 52, 247, 243, 139, 159, 200, 41, 34, 184, 137, 203, 127, 72, 204, 44, 67, 242, 170, 176, 130, 44, 55, 47, 173, 210, 176, 104, 159, 78, 118, 60, 130, 179, 168, 156, 110, 123, 72, 213, 57, 221, 151, 243, 138, 192, 136, 55, 78, 89, 111, 245, 240, 209, 116, 17, 73, 216, 74, 223, 241, 212, 193, 244, 213, 47, 148, 181, 247, 254, 251, 177, 103, 155, 42, 201, 99, 255}, +{50, 118, 22, 161, 176, 30, 19, 164, 128, 183, 15, 230, 59, 100, 42, 165, 102, 91, 245, 51, 171, 93, 126, 92, 98, 59, 122, 71, 41, 228, 43, 142, 203, 236, 77, 141, 246, 203, 40, 222, 154, 22, 128, 172, 189, 12, 169, 97, 233, 6, 199, 46, 21, 229, 61, 140, 29, 119, 6, 105, 234, 229, 27, 140, 228, 38, 125, 182, 178, 229, 179, 79, 29, 64, 105, 22, 96, 244, 187, 90, 135, 135, 251, 218, 83, 176, 115, 168, 151, 190, 120, 250, 45, 22, 94, 87, 185, 46, 146, 244, 37, 183, 98, 238, 108, 117, 124, 120, 52, 238, 87, 216, 85, 167, 144, 5, 159, 197, 232, 60, 242, 104, 47, 112, 14, 194, 215, 28}, +{20, 161, 21, 208, 68, 177, 255, 116, 2, 110, 246, 186, 59, 236, 43, 160, 157, 130, 122, 10, 241, 179, 101, 240, 243, 216, 151, 202, 114, 255, 38, 148, 161, 214, 22, 76, 5, 180, 59, 196, 166, 134, 154, 169, 38, 63, 181, 36, 129, 114, 7, 94, 236, 246, 108, 153, 155, 253, 90, 114, 211, 120, 250, 185, 179, 145, 11, 192, 29, 77, 70, 219, 13, 63, 121, 1, 192, 46, 136, 38, 188, 223, 114, 75, 188, 92, 42, 22, 118, 223, 184, 86, 9, 148, 12, 142, 29, 53, 254, 207, 173, 254, 59, 44, 204, 66, 115, 53, 199, 174, 85, 133, 215, 178, 85, 127, 231, 18, 21, 72, 66, 70, 146, 100, 59, 43, 45, 75}, +{43, 225, 60, 217, 206, 101, 225, 241, 215, 56, 47, 101, 90, 122, 15, 230, 197, 184, 61, 29, 21, 23, 197, 46, 90, 213, 18, 200, 221, 199, 96, 200, 140, 119, 85, 89, 172, 218, 108, 21, 247, 191, 123, 132, 72, 78, 214, 23, 131, 171, 112, 165, 219, 53, 93, 220, 231, 24, 193, 117, 138, 174, 78, 187, 175, 106, 102, 161, 75, 26, 217, 196, 87, 153, 125, 34, 71, 94, 126, 99, 21, 141, 163, 62, 161, 23, 238, 141, 177, 193, 107, 241, 46, 248, 57, 98, 94, 68, 122, 252, 132, 139, 105, 88, 83, 102, 5, 87, 225, 121, 35, 3, 7, 70, 89, 196, 204, 134, 219, 211, 182, 10, 193, 146, 19, 27, 210, 1}, +{133, 236, 95, 125, 193, 168, 100, 14, 71, 121, 140, 147, 131, 195, 141, 53, 113, 198, 85, 29, 22, 206, 68, 254, 55, 235, 232, 126, 220, 8, 12, 129, 239, 71, 120, 138, 163, 177, 53, 171, 51, 1, 0, 32, 196, 224, 62, 110, 197, 1, 19, 199, 104, 166, 224, 105, 247, 253, 96, 24, 69, 21, 9, 27, 119, 54, 198, 36, 68, 165, 174, 190, 228, 70, 149, 148, 36, 3, 161, 100, 102, 134, 158, 45, 54, 178, 200, 251, 43, 155, 27, 50, 204, 181, 82, 230, 61, 188, 137, 131, 43, 218, 185, 153, 3, 40, 247, 163, 67, 39, 134, 95, 0, 28, 57, 1, 214, 207, 241, 81, 233, 230, 69, 225, 46, 72, 76, 248}, +{151, 133, 2, 253, 199, 51, 35, 78, 179, 204, 38, 230, 5, 67, 213, 140, 45, 185, 66, 17, 233, 253, 245, 214, 19, 69, 195, 202, 69, 62, 232, 103, 116, 98, 11, 157, 196, 187, 214, 165, 141, 61, 60, 85, 45, 122, 40, 84, 38, 134, 137, 69, 122, 167, 236, 186, 17, 175, 100, 112, 135, 123, 255, 221, 51, 94, 230, 162, 246, 237, 236, 59, 8, 108, 162, 71, 227, 0, 150, 12, 73, 165, 49, 139, 224, 79, 18, 220, 141, 205, 45, 75, 193, 26, 185, 234, 132, 151, 56, 255, 190, 134, 179, 162, 77, 64, 15, 102, 93, 153, 107, 76, 192, 58, 1, 80, 245, 126, 157, 157, 147, 14, 53, 165, 139, 0, 221, 96}, +{139, 175, 117, 18, 127, 247, 144, 233, 67, 156, 183, 217, 113, 79, 160, 114, 87, 121, 103, 175, 220, 159, 144, 251, 174, 232, 247, 35, 116, 183, 19, 200, 174, 39, 170, 17, 167, 162, 149, 108, 240, 52, 11, 138, 174, 135, 54, 119, 220, 126, 166, 3, 233, 122, 91, 95, 253, 161, 17, 186, 53, 94, 142, 205, 191, 92, 168, 4, 239, 162, 114, 215, 60, 60, 224, 186, 162, 149, 182, 64, 78, 121, 132, 11, 233, 181, 224, 42, 135, 67, 80, 205, 92, 77, 238, 253, 0, 60, 13, 22, 25, 251, 125, 124, 209, 78, 20, 106, 209, 137, 78, 240, 2, 33, 141, 125, 48, 34, 95, 175, 31, 240, 80, 233, 102, 132, 14, 68}, +{8, 151, 124, 173, 4, 45, 189, 87, 245, 79, 176, 187, 174, 183, 106, 13, 12, 156, 165, 241, 149, 45, 158, 134, 177, 94, 238, 211, 76, 150, 146, 193, 214, 224, 159, 137, 105, 220, 231, 118, 239, 99, 112, 158, 96, 126, 23, 88, 98, 42, 77, 182, 3, 139, 1, 68, 206, 88, 170, 176, 163, 45, 128, 143, 85, 61, 34, 251, 32, 34, 65, 93, 77, 24, 109, 209, 1, 243, 201, 52, 191, 42, 203, 203, 14, 82, 73, 83, 60, 231, 6, 30, 129, 50, 148, 225, 249, 210, 207, 232, 85, 137, 52, 31, 9, 47, 65, 218, 179, 136, 54, 46, 107, 22, 251, 144, 145, 173, 167, 6, 118, 107, 169, 200, 110, 139, 29, 38}, +{85, 121, 145, 0, 197, 102, 177, 177, 178, 158, 15, 204, 233, 66, 93, 115, 50, 210, 124, 74, 95, 109, 247, 45, 75, 110, 77, 38, 219, 161, 247, 37, 246, 254, 34, 12, 238, 59, 144, 54, 208, 230, 209, 99, 73, 173, 19, 201, 175, 251, 223, 52, 37, 238, 141, 225, 241, 61, 127, 1, 141, 31, 228, 109, 184, 117, 246, 9, 72, 97, 213, 12, 14, 114, 223, 66, 195, 230, 84, 166, 79, 130, 50, 246, 138, 250, 155, 117, 213, 152, 32, 107, 142, 62, 57, 130, 26, 239, 186, 156, 255, 89, 159, 187, 56, 224, 228, 101, 121, 127, 121, 64, 57, 157, 148, 93, 95, 198, 116, 55, 39, 77, 41, 94, 108, 190, 255, 187}, +{197, 125, 237, 156, 104, 42, 81, 115, 6, 151, 34, 126, 45, 67, 197, 71, 93, 216, 106, 107, 154, 13, 115, 189, 15, 41, 43, 50, 76, 240, 1, 77, 106, 152, 39, 4, 83, 155, 86, 192, 215, 164, 197, 54, 60, 229, 97, 15, 21, 204, 227, 190, 160, 37, 196, 58, 125, 216, 43, 197, 172, 77, 0, 202, 182, 125, 106, 236, 225, 179, 211, 145, 13, 12, 86, 76, 230, 218, 153, 173, 252, 94, 20, 45, 132, 138, 174, 13, 122, 128, 76, 86, 132, 186, 225, 213, 134, 222, 222, 6, 21, 182, 55, 160, 141, 222, 46, 244, 101, 92, 117, 152, 68, 155, 142, 57, 98, 18, 154, 174, 78, 248, 63, 124, 146, 177, 16, 87}, +{8, 139, 205, 108, 213, 48, 69, 15, 207, 176, 8, 66, 49, 251, 24, 107, 138, 115, 134, 94, 199, 187, 121, 135, 161, 122, 175, 146, 218, 49, 159, 241, 208, 29, 72, 6, 176, 236, 83, 231, 96, 127, 111, 4, 230, 144, 82, 208, 205, 201, 123, 53, 254, 197, 154, 173, 91, 215, 149, 143, 11, 147, 204, 129, 59, 240, 215, 194, 239, 63, 254, 39, 165, 64, 223, 203, 57, 144, 106, 110, 138, 251, 77, 185, 157, 111, 217, 242, 82, 182, 109, 229, 103, 222, 55, 50, 129, 64, 194, 205, 222, 74, 222, 79, 117, 49, 151, 37, 40, 160, 106, 132, 215, 214, 122, 115, 110, 214, 0, 245, 168, 44, 71, 125, 7, 56, 223, 246}, +{111, 59, 150, 145, 201, 227, 176, 191, 216, 95, 13, 240, 58, 73, 14, 49, 25, 19, 31, 84, 33, 106, 43, 27, 5, 194, 35, 241, 30, 214, 167, 159, 4, 224, 111, 218, 16, 234, 129, 9, 130, 51, 120, 158, 42, 224, 118, 161, 37, 180, 84, 68, 198, 44, 78, 247, 29, 34, 9, 45, 11, 252, 178, 109, 64, 139, 190, 197, 61, 92, 32, 65, 250, 186, 218, 155, 155, 68, 133, 12, 248, 104, 137, 67, 49, 41, 194, 85, 95, 89, 74, 130, 161, 179, 245, 56, 215, 20, 55, 241, 147, 135, 245, 0, 70, 250, 123, 61, 98, 22, 150, 139, 181, 211, 166, 157, 238, 132, 244, 66, 134, 92, 111, 213, 84, 70, 70, 54}, +{192, 4, 20, 42, 143, 67, 65, 135, 100, 193, 1, 170, 213, 79, 108, 191, 93, 146, 239, 148, 140, 36, 26, 191, 243, 13, 201, 27, 232, 222, 63, 239, 164, 58, 11, 156, 6, 218, 156, 152, 117, 28, 247, 218, 185, 255, 6, 255, 48, 236, 67, 89, 201, 70, 134, 130, 144, 145, 45, 25, 235, 141, 85, 22, 237, 192, 81, 68, 6, 228, 118, 57, 108, 76, 131, 108, 60, 27, 215, 244, 200, 101, 55, 84, 80, 111, 57, 240, 73, 52, 79, 191, 51, 235, 245, 71, 190, 26, 119, 25, 7, 112, 19, 63, 216, 106, 155, 182, 117, 254, 227, 252, 0, 172, 184, 187, 74, 88, 194, 223, 142, 65, 105, 251, 171, 65, 228, 45}, +{188, 55, 114, 115, 180, 189, 35, 69, 34, 133, 215, 44, 178, 42, 194, 140, 125, 241, 253, 139, 169, 134, 235, 27, 65, 175, 103, 243, 42, 137, 171, 38, 224, 97, 24, 109, 236, 113, 81, 211, 106, 139, 122, 103, 195, 56, 175, 163, 132, 7, 105, 227, 250, 177, 48, 192, 172, 5, 110, 173, 183, 4, 232, 236, 115, 197, 138, 209, 146, 38, 168, 89, 197, 161, 34, 219, 139, 20, 153, 97, 212, 77, 21, 225, 14, 45, 141, 141, 73, 147, 84, 110, 251, 0, 35, 10, 250, 36, 5, 163, 244, 140, 169, 230, 10, 188, 123, 47, 182, 76, 209, 37, 221, 59, 164, 93, 12, 246, 27, 206, 235, 166, 234, 128, 180, 170, 122, 136}, +{120, 12, 78, 83, 132, 112, 114, 251, 108, 55, 231, 171, 38, 14, 75, 21, 142, 245, 148, 224, 127, 28, 195, 130, 196, 144, 73, 58, 171, 72, 48, 53, 7, 244, 177, 187, 89, 163, 48, 35, 212, 99, 178, 126, 232, 212, 222, 116, 199, 60, 246, 100, 171, 108, 221, 66, 253, 42, 231, 217, 237, 19, 153, 154, 189, 39, 176, 16, 167, 97, 36, 76, 152, 250, 213, 106, 122, 188, 13, 103, 71, 214, 103, 223, 114, 243, 99, 174, 173, 100, 143, 112, 100, 182, 131, 252, 157, 106, 203, 145, 70, 123, 238, 185, 13, 158, 245, 89, 81, 242, 165, 226, 242, 107, 132, 19, 19, 231, 93, 177, 178, 122, 103, 167, 80, 248, 166, 145}, +{170, 225, 93, 19, 177, 98, 34, 139, 4, 254, 192, 245, 1, 160, 115, 213, 14, 92, 36, 81, 99, 15, 200, 213, 156, 34, 25, 11, 90, 4, 251, 245, 106, 3, 227, 45, 51, 9, 59, 184, 30, 123, 123, 246, 162, 111, 4, 33, 213, 171, 146, 100, 116, 5, 105, 1, 225, 105, 65, 80, 66, 213, 89, 175, 36, 200, 69, 84, 196, 147, 52, 7, 144, 136, 57, 30, 166, 163, 207, 19, 167, 18, 201, 80, 147, 55, 180, 226, 106, 65, 126, 149, 190, 168, 129, 88, 129, 225, 80, 70, 210, 209, 217, 198, 242, 152, 151, 192, 242, 141, 245, 28, 56, 214, 112, 255, 174, 138, 99, 180, 15, 155, 204, 231, 10, 209, 225, 190}, +{102, 29, 76, 101, 181, 6, 16, 16, 53, 97, 126, 139, 182, 75, 23, 36, 21, 63, 69, 130, 188, 73, 180, 217, 52, 98, 110, 117, 85, 38, 164, 139, 75, 170, 47, 126, 47, 75, 70, 221, 214, 156, 223, 92, 92, 17, 151, 38, 205, 36, 122, 84, 204, 243, 251, 78, 10, 6, 94, 240, 224, 23, 142, 218, 172, 87, 186, 151, 106, 206, 249, 115, 44, 222, 46, 251, 173, 233, 93, 254, 233, 96, 252, 212, 161, 122, 2, 123, 113, 77, 49, 193, 7, 234, 52, 84, 63, 223, 131, 55, 191, 42, 111, 107, 100, 40, 78, 212, 44, 13, 154, 24, 28, 171, 214, 149, 46, 82, 183, 36, 218, 58, 11, 244, 150, 30, 243, 191}, +{203, 53, 37, 80, 107, 10, 193, 182, 167, 45, 217, 62, 254, 124, 189, 97, 135, 189, 217, 62, 28, 185, 45, 241, 63, 4, 69, 9, 249, 69, 251, 47, 18, 32, 247, 71, 236, 17, 45, 135, 24, 200, 103, 202, 47, 193, 94, 149, 32, 74, 64, 91, 5, 36, 78, 123, 51, 45, 236, 243, 160, 208, 114, 140, 107, 129, 76, 13, 244, 36, 78, 79, 155, 251, 182, 176, 110, 150, 94, 199, 201, 146, 101, 24, 1, 181, 207, 63, 236, 211, 181, 175, 92, 94, 15, 246, 137, 170, 32, 199, 169, 175, 161, 26, 53, 100, 161, 75, 47, 8, 98, 76, 188, 89, 126, 146, 161, 49, 231, 15, 152, 166, 80, 193, 23, 102, 239, 18}, +{172, 123, 73, 75, 214, 179, 69, 22, 164, 134, 140, 244, 125, 101, 152, 149, 76, 30, 66, 180, 232, 107, 196, 207, 144, 148, 27, 127, 171, 221, 189, 6, 99, 7, 238, 33, 9, 164, 149, 69, 0, 84, 35, 198, 48, 234, 28, 237, 22, 178, 150, 93, 168, 103, 71, 240, 68, 205, 96, 15, 254, 250, 136, 188, 236, 255, 15, 103, 164, 100, 143, 92, 205, 168, 15, 131, 58, 9, 228, 171, 215, 80, 152, 106, 117, 118, 146, 67, 255, 119, 197, 134, 88, 154, 17, 201, 160, 240, 15, 21, 122, 79, 240, 45, 152, 255, 34, 115, 212, 207, 111, 41, 45, 232, 195, 63, 189, 61, 73, 227, 36, 225, 46, 7, 74, 107, 252, 72}, +{13, 190, 175, 112, 190, 139, 232, 115, 14, 129, 231, 113, 213, 206, 136, 217, 130, 215, 238, 109, 24, 7, 176, 231, 166, 167, 153, 246, 55, 96, 166, 247, 4, 208, 25, 164, 220, 196, 60, 97, 88, 155, 189, 62, 64, 53, 135, 194, 227, 75, 65, 112, 186, 46, 170, 212, 196, 43, 253, 13, 170, 184, 59, 212, 27, 26, 229, 2, 99, 36, 197, 70, 51, 175, 31, 228, 189, 115, 182, 228, 156, 188, 63, 90, 38, 20, 170, 244, 42, 250, 108, 120, 241, 2, 162, 128, 23, 4, 169, 45, 86, 152, 72, 60, 154, 187, 19, 18, 48, 62, 37, 216, 7, 229, 64, 249, 236, 239, 147, 85, 75, 244, 218, 62, 186, 64, 176, 231}, +{183, 56, 244, 89, 246, 70, 170, 104, 200, 184, 199, 53, 219, 165, 59, 59, 65, 41, 123, 10, 181, 107, 131, 236, 194, 6, 193, 186, 204, 131, 42, 123, 29, 113, 62, 106, 238, 171, 129, 196, 167, 2, 65, 122, 72, 9, 120, 237, 110, 95, 130, 159, 233, 152, 5, 19, 231, 12, 47, 137, 107, 254, 221, 228, 157, 23, 92, 129, 147, 140, 199, 156, 72, 112, 55, 115, 150, 91, 234, 224, 155, 4, 173, 36, 181, 114, 85, 26, 152, 73, 208, 35, 206, 178, 165, 71, 6, 75, 94, 14, 141, 253, 237, 198, 205, 3, 98, 190, 38, 112, 220, 255, 16, 16, 106, 114, 186, 69, 23, 178, 34, 208, 38, 92, 69, 56, 158, 46}, +{66, 82, 56, 164, 151, 217, 211, 172, 48, 102, 128, 199, 44, 139, 7, 208, 42, 96, 160, 244, 211, 218, 209, 11, 159, 177, 4, 163, 194, 109, 186, 63, 123, 170, 211, 66, 25, 220, 107, 223, 193, 115, 13, 191, 74, 22, 19, 96, 53, 191, 167, 27, 182, 53, 188, 171, 44, 102, 46, 244, 194, 170, 204, 219, 74, 210, 124, 170, 68, 157, 76, 125, 142, 120, 86, 172, 217, 155, 95, 120, 48, 124, 247, 50, 28, 251, 50, 59, 141, 43, 173, 88, 157, 217, 218, 109, 187, 45, 240, 244, 165, 181, 75, 72, 57, 106, 112, 149, 74, 116, 151, 146, 153, 82, 113, 26, 73, 23, 170, 53, 230, 199, 128, 235, 108, 198, 173, 135}, +{150, 189, 210, 209, 179, 182, 246, 3, 176, 224, 195, 210, 139, 28, 240, 251, 13, 101, 242, 61, 238, 8, 175, 253, 71, 22, 114, 204, 192, 141, 153, 192, 208, 81, 190, 87, 250, 56, 129, 247, 146, 124, 133, 44, 88, 114, 187, 229, 129, 170, 79, 148, 105, 45, 24, 148, 137, 99, 84, 84, 240, 34, 160, 235, 89, 240, 184, 79, 97, 117, 76, 174, 157, 15, 246, 184, 150, 61, 21, 131, 191, 132, 131, 146, 228, 210, 143, 74, 140, 72, 95, 36, 61, 254, 94, 116, 101, 179, 54, 110, 7, 159, 14, 0, 207, 5, 199, 239, 251, 240, 160, 219, 135, 202, 185, 6, 83, 174, 63, 148, 91, 186, 228, 169, 245, 208, 4, 18}, +{113, 1, 136, 247, 46, 135, 25, 196, 74, 104, 195, 163, 225, 251, 209, 140, 164, 24, 228, 2, 30, 20, 12, 117, 180, 221, 169, 82, 31, 146, 252, 114, 154, 182, 160, 201, 118, 207, 58, 56, 153, 191, 108, 216, 70, 157, 12, 209, 93, 166, 219, 88, 103, 151, 27, 151, 175, 91, 86, 0, 124, 74, 170, 147, 202, 34, 197, 130, 58, 100, 34, 203, 243, 7, 218, 24, 185, 222, 248, 234, 184, 80, 169, 63, 59, 141, 3, 21, 38, 60, 110, 243, 199, 98, 5, 193, 129, 75, 166, 114, 187, 126, 105, 46, 173, 115, 21, 62, 54, 91, 167, 98, 84, 201, 217, 64, 200, 227, 68, 205, 100, 203, 242, 185, 196, 214, 250, 186}, +{40, 116, 249, 8, 51, 223, 63, 174, 89, 223, 185, 141, 243, 156, 245, 175, 247, 16, 187, 197, 21, 119, 218, 29, 99, 25, 110, 48, 187, 62, 7, 152, 42, 240, 40, 5, 158, 75, 113, 14, 36, 213, 58, 253, 87, 157, 5, 154, 150, 90, 105, 111, 99, 40, 149, 154, 101, 139, 211, 97, 149, 223, 18, 74, 222, 27, 88, 144, 39, 17, 158, 129, 86, 94, 213, 37, 198, 42, 102, 235, 19, 117, 96, 236, 45, 225, 166, 113, 160, 248, 132, 91, 92, 48, 18, 94, 192, 61, 84, 210, 90, 36, 214, 212, 22, 83, 218, 241, 245, 19, 12, 239, 164, 214, 65, 88, 38, 91, 119, 16, 176, 32, 36, 5, 233, 225, 204, 16}, +{207, 181, 75, 246, 226, 191, 163, 1, 185, 102, 229, 238, 100, 146, 208, 22, 119, 226, 108, 52, 72, 64, 156, 187, 35, 140, 147, 12, 53, 83, 158, 237, 227, 171, 35, 229, 158, 95, 167, 2, 222, 193, 85, 121, 241, 31, 183, 152, 167, 211, 177, 133, 220, 137, 121, 103, 233, 109, 125, 169, 155, 255, 28, 253, 150, 58, 108, 49, 39, 201, 54, 195, 77, 32, 56, 129, 220, 182, 149, 42, 143, 28, 29, 54, 23, 160, 43, 124, 59, 20, 216, 126, 162, 62, 205, 99, 226, 162, 81, 58, 157, 1, 140, 78, 87, 77, 184, 9, 61, 182, 14, 240, 91, 126, 135, 29, 247, 246, 52, 211, 114, 34, 144, 112, 0, 80, 249, 104}, +{46, 207, 72, 123, 156, 78, 210, 133, 84, 60, 113, 70, 6, 226, 195, 4, 230, 11, 85, 87, 250, 63, 240, 80, 218, 140, 151, 236, 121, 55, 88, 74, 19, 176, 173, 240, 45, 44, 111, 15, 223, 231, 241, 253, 112, 208, 84, 19, 0, 34, 237, 34, 212, 141, 115, 114, 20, 116, 199, 51, 208, 248, 20, 132, 95, 165, 84, 180, 218, 201, 42, 82, 188, 107, 15, 69, 236, 20, 179, 157, 195, 26, 149, 225, 211, 74, 50, 112, 29, 223, 81, 36, 222, 198, 84, 70, 84, 128, 211, 222, 241, 122, 101, 14, 172, 214, 142, 100, 129, 20, 212, 142, 166, 81, 93, 161, 61, 65, 183, 222, 206, 118, 41, 69, 48, 39, 143, 73}, +{120, 143, 114, 136, 184, 156, 209, 26, 219, 137, 170, 105, 73, 15, 125, 45, 141, 192, 192, 142, 20, 59, 75, 95, 205, 241, 130, 255, 188, 243, 176, 241, 177, 238, 114, 75, 0, 94, 44, 23, 168, 98, 187, 108, 41, 179, 194, 34, 183, 1, 247, 98, 2, 116, 111, 29, 197, 227, 209, 193, 18, 226, 113, 247, 34, 11, 244, 135, 226, 54, 119, 226, 94, 101, 174, 120, 253, 114, 119, 57, 150, 221, 235, 3, 243, 97, 119, 170, 133, 152, 5, 226, 247, 49, 175, 71, 205, 186, 45, 194, 22, 68, 135, 229, 71, 193, 249, 80, 165, 129, 151, 111, 71, 80, 196, 100, 67, 133, 219, 241, 113, 196, 207, 29, 75, 241, 186, 195}, +{14, 150, 229, 89, 154, 83, 102, 114, 69, 140, 80, 142, 155, 115, 110, 185, 212, 252, 177, 103, 126, 138, 96, 125, 206, 15, 26, 59, 47, 176, 150, 119, 85, 91, 24, 233, 234, 115, 213, 89, 14, 70, 107, 72, 72, 217, 214, 176, 231, 112, 22, 79, 215, 228, 93, 80, 173, 67, 33, 41, 54, 108, 192, 86, 130, 151, 117, 19, 141, 209, 174, 170, 58, 120, 121, 6, 17, 31, 240, 148, 106, 77, 118, 55, 88, 89, 13, 73, 226, 86, 103, 191, 253, 227, 187, 218, 120, 193, 124, 241, 183, 62, 65, 0, 47, 200, 240, 137, 35, 214, 9, 182, 103, 113, 78, 1, 28, 37, 49, 165, 70, 228, 60, 66, 120, 18, 126, 11}, +{151, 240, 227, 26, 229, 123, 159, 106, 132, 56, 132, 194, 147, 157, 108, 55, 20, 45, 84, 229, 116, 97, 221, 70, 117, 139, 203, 27, 76, 84, 138, 75, 66, 43, 217, 242, 105, 123, 156, 147, 136, 29, 186, 26, 238, 7, 202, 165, 53, 211, 42, 217, 234, 166, 17, 109, 36, 113, 96, 66, 86, 245, 47, 178, 52, 207, 139, 145, 208, 249, 58, 110, 231, 105, 13, 161, 67, 85, 56, 187, 50, 122, 191, 180, 224, 113, 238, 99, 211, 18, 223, 173, 161, 57, 47, 104, 22, 110, 8, 224, 223, 126, 14, 82, 139, 156, 30, 232, 251, 132, 205, 77, 5, 116, 57, 250, 95, 14, 214, 213, 145, 183, 237, 113, 249, 176, 76, 142}, +{2, 188, 63, 148, 73, 244, 246, 77, 137, 152, 43, 75, 32, 13, 4, 16, 113, 31, 110, 243, 211, 90, 106, 182, 1, 215, 209, 227, 36, 44, 109, 194, 133, 234, 210, 207, 173, 184, 84, 190, 200, 42, 173, 9, 156, 131, 103, 102, 89, 220, 161, 152, 130, 118, 143, 106, 221, 233, 150, 118, 156, 6, 99, 185, 113, 181, 197, 64, 43, 39, 237, 78, 226, 210, 104, 233, 28, 23, 149, 225, 143, 52, 34, 98, 78, 18, 173, 248, 98, 180, 181, 163, 171, 51, 85, 10, 62, 66, 90, 154, 36, 97, 71, 123, 119, 113, 199, 209, 182, 34, 41, 42, 58, 67, 133, 237, 60, 41, 79, 196, 107, 185, 16, 53, 123, 39, 9, 95}, +{90, 125, 237, 103, 117, 170, 3, 86, 238, 192, 50, 248, 227, 244, 104, 234, 16, 84, 132, 23, 27, 145, 112, 231, 52, 0, 124, 77, 50, 111, 153, 248, 126, 10, 1, 70, 46, 201, 90, 155, 233, 144, 194, 8, 184, 124, 91, 124, 251, 145, 13, 95, 148, 227, 153, 53, 163, 13, 17, 185, 63, 8, 184, 169, 147, 163, 12, 103, 161, 117, 147, 30, 7, 157, 7, 165, 253, 69, 187, 35, 44, 176, 136, 4, 147, 195, 215, 210, 160, 252, 48, 193, 47, 158, 98, 39, 56, 83, 185, 39, 224, 197, 70, 101, 244, 71, 199, 96, 36, 54, 82, 86, 17, 119, 22, 94, 195, 118, 59, 138, 24, 40, 195, 146, 108, 46, 211, 72}, +{73, 28, 104, 99, 226, 229, 195, 202, 174, 234, 148, 186, 117, 209, 32, 243, 232, 56, 44, 17, 119, 158, 122, 245, 174, 114, 22, 86, 219, 208, 164, 177, 144, 81, 7, 183, 114, 202, 81, 42, 237, 81, 134, 74, 124, 176, 126, 115, 16, 33, 236, 124, 198, 34, 81, 93, 5, 134, 51, 147, 190, 193, 17, 181, 198, 177, 83, 82, 121, 59, 223, 155, 28, 233, 222, 224, 37, 80, 11, 115, 133, 56, 251, 7, 223, 98, 212, 112, 231, 60, 138, 38, 63, 92, 220, 101, 154, 27, 83, 192, 41, 90, 220, 16, 201, 103, 42, 208, 209, 206, 91, 211, 41, 170, 147, 181, 25, 36, 68, 110, 0, 226, 254, 72, 149, 78, 171, 141}, +{35, 45, 30, 151, 247, 113, 110, 67, 116, 94, 214, 42, 39, 17, 75, 1, 217, 128, 207, 2, 239, 68, 120, 82, 160, 188, 157, 160, 211, 134, 74, 178, 14, 31, 254, 126, 216, 238, 137, 149, 75, 63, 180, 77, 227, 47, 105, 218, 167, 98, 234, 213, 208, 67, 204, 231, 55, 183, 93, 134, 69, 192, 10, 167, 0, 18, 251, 50, 86, 85, 2, 32, 172, 166, 127, 82, 249, 147, 71, 32, 25, 14, 36, 111, 48, 36, 136, 198, 139, 235, 67, 87, 26, 179, 117, 99, 231, 79, 199, 16, 141, 53, 220, 237, 99, 6, 191, 27, 120, 7, 151, 11, 130, 129, 230, 193, 13, 214, 113, 237, 22, 97, 99, 101, 97, 137, 239, 208}, +{159, 171, 181, 79, 151, 228, 177, 154, 108, 27, 157, 56, 13, 248, 226, 211, 241, 248, 242, 255, 228, 227, 248, 176, 28, 168, 151, 235, 167, 5, 20, 225, 141, 196, 185, 209, 147, 209, 213, 74, 60, 50, 5, 150, 169, 48, 27, 136, 8, 73, 13, 108, 86, 224, 36, 222, 125, 111, 68, 157, 248, 26, 102, 29, 106, 7, 31, 36, 47, 186, 123, 234, 82, 146, 204, 160, 57, 59, 139, 3, 4, 198, 198, 125, 146, 106, 207, 227, 36, 222, 61, 136, 108, 136, 196, 136, 183, 223, 76, 188, 44, 180, 138, 118, 194, 30, 66, 45, 54, 21, 82, 140, 130, 228, 179, 201, 171, 226, 111, 218, 113, 254, 226, 15, 148, 122, 140, 211}, +{87, 54, 37, 95, 204, 13, 251, 52, 29, 230, 56, 123, 139, 212, 96, 205, 184, 14, 79, 2, 240, 81, 117, 132, 42, 45, 218, 107, 94, 184, 153, 30, 169, 237, 117, 38, 46, 223, 138, 182, 127, 104, 198, 55, 96, 39, 119, 243, 199, 99, 129, 54, 47, 215, 148, 85, 77, 97, 233, 58, 100, 86, 129, 58, 56, 5, 197, 212, 185, 104, 164, 164, 206, 242, 31, 16, 70, 165, 76, 105, 240, 147, 209, 239, 24, 28, 13, 93, 129, 99, 20, 141, 202, 16, 170, 248, 25, 115, 29, 10, 60, 205, 229, 193, 21, 212, 54, 230, 137, 250, 0, 133, 30, 26, 175, 169, 144, 234, 0, 63, 118, 131, 157, 73, 40, 196, 240, 138}, +{53, 64, 131, 88, 112, 249, 167, 155, 86, 136, 77, 152, 236, 39, 248, 85, 141, 112, 122, 215, 123, 99, 158, 180, 58, 154, 62, 243, 109, 114, 129, 124, 199, 89, 144, 199, 197, 53, 93, 53, 156, 126, 141, 196, 163, 71, 51, 160, 82, 220, 156, 90, 191, 242, 23, 9, 6, 216, 107, 68, 230, 57, 6, 96, 186, 49, 85, 80, 179, 217, 207, 84, 135, 160, 40, 19, 107, 91, 201, 46, 239, 81, 106, 202, 249, 14, 220, 251, 253, 205, 148, 214, 203, 74, 16, 247, 215, 176, 1, 236, 87, 194, 134, 84, 128, 74, 196, 6, 103, 79, 14, 204, 62, 26, 241, 3, 188, 16, 164, 84, 107, 226, 190, 28, 30, 44, 1, 65}, +{51, 245, 61, 83, 21, 37, 88, 98, 14, 3, 222, 51, 199, 189, 87, 32, 130, 59, 4, 98, 208, 199, 214, 203, 86, 110, 233, 199, 225, 251, 196, 209, 88, 40, 129, 105, 114, 91, 152, 104, 70, 132, 93, 48, 98, 246, 31, 115, 197, 72, 57, 42, 247, 67, 213, 229, 45, 102, 106, 171, 76, 241, 72, 234, 57, 249, 115, 105, 188, 18, 246, 36, 77, 207, 111, 169, 33, 104, 84, 15, 77, 175, 234, 109, 62, 83, 139, 93, 218, 248, 158, 160, 63, 58, 196, 119, 186, 123, 91, 2, 7, 144, 180, 78, 21, 68, 134, 44, 50, 20, 110, 247, 89, 8, 132, 34, 63, 82, 166, 252, 171, 228, 123, 209, 249, 106, 240, 181}, +{39, 190, 175, 79, 25, 48, 101, 147, 104, 178, 184, 155, 93, 11, 147, 113, 162, 111, 100, 9, 93, 73, 193, 187, 134, 57, 235, 75, 225, 169, 52, 188, 219, 60, 37, 242, 216, 191, 179, 103, 69, 40, 200, 242, 239, 143, 245, 231, 195, 57, 206, 70, 28, 45, 54, 74, 162, 140, 82, 17, 30, 23, 243, 92, 166, 46, 165, 3, 7, 193, 47, 136, 18, 43, 217, 229, 155, 98, 150, 60, 159, 91, 138, 210, 212, 40, 238, 3, 4, 192, 177, 11, 197, 218, 126, 241, 108, 7, 234, 119, 64, 181, 1, 160, 177, 155, 202, 27, 112, 85, 108, 187, 136, 185, 120, 165, 181, 134, 159, 40, 185, 211, 7, 121, 153, 190, 71, 49}, +{100, 25, 246, 12, 127, 93, 92, 100, 97, 60, 31, 218, 235, 236, 20, 97, 110, 41, 75, 95, 157, 63, 70, 0, 237, 207, 206, 209, 194, 180, 47, 126, 65, 19, 179, 243, 164, 13, 145, 59, 231, 124, 30, 37, 78, 78, 25, 242, 246, 255, 149, 195, 10, 80, 23, 63, 119, 178, 32, 182, 198, 183, 104, 147, 119, 95, 47, 17, 173, 6, 192, 181, 62, 5, 59, 75, 255, 28, 226, 64, 152, 51, 179, 172, 209, 173, 53, 120, 108, 50, 37, 132, 209, 59, 24, 225, 44, 55, 5, 86, 51, 31, 222, 146, 241, 3, 2, 109, 130, 130, 113, 201, 147, 199, 228, 155, 17, 166, 149, 76, 115, 211, 1, 159, 136, 171, 217, 228}, +{162, 198, 123, 221, 204, 55, 27, 6, 240, 44, 22, 6, 58, 62, 244, 134, 5, 13, 98, 254, 235, 243, 182, 133, 181, 105, 143, 114, 19, 33, 77, 158, 141, 137, 106, 45, 253, 230, 120, 15, 43, 241, 224, 255, 35, 88, 113, 245, 28, 10, 157, 62, 74, 115, 77, 162, 132, 31, 115, 136, 199, 198, 61, 145, 50, 165, 220, 236, 16, 16, 169, 43, 89, 165, 163, 113, 123, 157, 173, 217, 146, 205, 82, 47, 116, 50, 85, 239, 38, 240, 150, 96, 148, 5, 221, 152, 169, 89, 195, 102, 44, 11, 218, 240, 92, 89, 201, 18, 78, 70, 38, 210, 215, 189, 210, 78, 94, 88, 120, 150, 135, 84, 162, 47, 156, 121, 237, 23}, +{168, 21, 62, 39, 253, 15, 226, 87, 178, 13, 191, 52, 41, 85, 209, 128, 113, 98, 190, 80, 85, 189, 171, 144, 62, 143, 152, 109, 249, 53, 115, 190, 140, 131, 233, 30, 51, 202, 131, 110, 213, 120, 41, 133, 199, 48, 117, 30, 73, 133, 107, 229, 10, 215, 208, 145, 129, 205, 4, 53, 88, 84, 104, 68, 119, 212, 226, 213, 149, 169, 48, 215, 117, 4, 162, 0, 173, 34, 250, 239, 195, 79, 222, 91, 128, 144, 2, 213, 246, 7, 203, 67, 187, 54, 23, 26, 54, 221, 250, 111, 139, 168, 58, 234, 39, 72, 90, 206, 112, 247, 42, 174, 180, 75, 160, 15, 231, 83, 223, 113, 200, 94, 34, 88, 12, 108, 131, 109}, +{201, 46, 149, 102, 208, 96, 120, 185, 118, 183, 220, 224, 77, 75, 249, 119, 233, 24, 130, 116, 80, 225, 134, 76, 166, 54, 179, 107, 124, 209, 90, 24, 27, 55, 33, 165, 98, 190, 243, 36, 220, 236, 40, 243, 138, 214, 191, 59, 78, 239, 235, 220, 45, 25, 100, 76, 246, 143, 73, 218, 85, 62, 64, 138, 237, 212, 239, 151, 157, 210, 33, 151, 207, 106, 122, 34, 78, 114, 213, 215, 189, 167, 127, 223, 34, 143, 141, 48, 1, 128, 41, 152, 200, 212, 165, 69, 145, 62, 38, 160, 13, 215, 27, 35, 49, 102, 113, 18, 16, 171, 244, 221, 14, 11, 31, 161, 235, 101, 170, 226, 43, 14, 223, 93, 237, 68, 58, 54}, +{146, 206, 253, 246, 95, 172, 67, 207, 192, 116, 217, 133, 82, 151, 14, 252, 192, 143, 36, 139, 96, 96, 107, 117, 61, 35, 44, 105, 188, 160, 241, 165, 137, 251, 140, 210, 253, 150, 132, 160, 25, 168, 20, 223, 226, 234, 47, 173, 25, 26, 205, 120, 56, 92, 76, 67, 7, 60, 161, 210, 91, 236, 237, 117, 128, 186, 120, 249, 208, 168, 104, 111, 23, 142, 173, 204, 196, 212, 219, 123, 113, 32, 14, 72, 246, 81, 58, 161, 55, 169, 156, 95, 176, 44, 135, 17, 13, 13, 29, 181, 164, 41, 84, 148, 82, 23, 90, 200, 7, 144, 140, 90, 47, 197, 233, 151, 179, 30, 130, 173, 179, 134, 194, 78, 118, 62, 13, 5}, +{6, 2, 148, 113, 58, 60, 192, 113, 18, 79, 147, 117, 27, 204, 178, 123, 22, 69, 234, 58, 154, 85, 39, 13, 192, 215, 27, 42, 211, 16, 177, 8, 139, 52, 170, 113, 157, 74, 41, 184, 88, 120, 236, 104, 234, 225, 119, 141, 93, 171, 202, 54, 59, 223, 227, 113, 49, 35, 126, 110, 21, 24, 45, 67, 76, 178, 33, 0, 6, 150, 76, 0, 89, 4, 62, 107, 236, 254, 222, 15, 20, 221, 108, 44, 119, 245, 23, 167, 144, 187, 85, 33, 100, 72, 72, 105, 25, 126, 63, 43, 23, 79, 194, 100, 155, 208, 222, 47, 183, 125, 253, 221, 175, 139, 73, 46, 171, 195, 154, 151, 170, 185, 185, 245, 77, 177, 254, 188}, +{159, 71, 227, 108, 112, 40, 169, 39, 57, 197, 152, 254, 12, 169, 199, 85, 34, 153, 100, 197, 171, 108, 171, 34, 117, 247, 108, 253, 216, 151, 115, 136, 127, 185, 166, 110, 13, 46, 204, 132, 77, 149, 188, 19, 81, 189, 234, 241, 254, 40, 81, 132, 255, 173, 36, 242, 55, 144, 40, 41, 28, 41, 248, 194, 110, 179, 19, 201, 93, 69, 182, 66, 93, 73, 49, 22, 135, 168, 208, 144, 164, 174, 21, 4, 71, 230, 205, 205, 216, 229, 49, 10, 58, 28, 167, 158, 130, 158, 228, 42, 171, 255, 149, 179, 71, 204, 182, 119, 193, 154, 34, 58, 146, 228, 213, 183, 189, 73, 231, 49, 142, 182, 176, 244, 114, 145, 138, 23}, +{102, 125, 147, 214, 73, 14, 164, 201, 45, 162, 36, 113, 148, 207, 85, 232, 26, 45, 37, 61, 250, 247, 182, 222, 228, 146, 16, 122, 216, 159, 233, 187, 94, 115, 110, 157, 165, 245, 203, 91, 253, 5, 127, 76, 249, 147, 12, 143, 105, 200, 236, 113, 240, 194, 42, 70, 24, 44, 91, 38, 4, 213, 10, 214, 30, 164, 71, 118, 213, 15, 184, 162, 134, 248, 142, 76, 90, 156, 163, 185, 186, 90, 198, 74, 88, 102, 125, 60, 207, 241, 223, 198, 193, 217, 54, 235, 56, 248, 121, 65, 175, 50, 7, 26, 30, 130, 102, 220, 126, 5, 10, 11, 224, 106, 109, 43, 123, 245, 147, 173, 118, 4, 249, 161, 87, 117, 168, 72}, +{57, 85, 70, 106, 210, 51, 220, 17, 9, 110, 135, 4, 4, 14, 169, 75, 236, 27, 185, 54, 98, 104, 84, 30, 53, 235, 64, 129, 166, 17, 39, 233, 194, 198, 111, 165, 213, 207, 18, 102, 16, 158, 20, 226, 247, 220, 191, 170, 123, 136, 56, 203, 161, 153, 102, 40, 85, 132, 163, 139, 4, 96, 112, 0, 45, 76, 68, 69, 214, 178, 6, 92, 247, 68, 135, 189, 91, 3, 18, 111, 191, 112, 23, 150, 141, 6, 214, 184, 70, 167, 64, 146, 143, 237, 138, 142, 224, 248, 164, 90, 90, 100, 232, 111, 214, 196, 83, 168, 204, 72, 127, 65, 30, 44, 21, 209, 152, 18, 193, 5, 224, 42, 31, 142, 182, 174, 225, 26}, +{149, 105, 65, 230, 148, 253, 121, 29, 37, 168, 85, 119, 26, 75, 180, 61, 22, 111, 183, 246, 217, 47, 37, 91, 187, 76, 99, 246, 122, 201, 194, 241, 61, 117, 27, 252, 204, 193, 143, 5, 183, 97, 244, 23, 200, 198, 192, 142, 135, 216, 207, 153, 130, 174, 241, 198, 235, 4, 120, 167, 228, 41, 87, 201, 2, 135, 107, 231, 228, 177, 143, 80, 146, 139, 161, 15, 193, 247, 80, 29, 169, 227, 129, 22, 168, 113, 28, 10, 154, 171, 190, 0, 218, 164, 206, 186, 39, 116, 210, 129, 170, 71, 172, 96, 54, 98, 119, 232, 147, 102, 241, 33, 198, 103, 21, 31, 109, 129, 57, 255, 194, 148, 251, 220, 194, 13, 184, 207}, +{110, 189, 141, 66, 6, 50, 6, 48, 70, 37, 107, 120, 138, 35, 27, 24, 95, 235, 236, 103, 165, 71, 196, 72, 255, 189, 157, 178, 110, 61, 186, 164, 150, 1, 149, 41, 158, 0, 213, 125, 147, 154, 180, 36, 243, 255, 176, 231, 89, 44, 16, 99, 25, 56, 219, 10, 159, 21, 219, 13, 34, 246, 23, 118, 228, 45, 117, 146, 30, 99, 160, 232, 199, 154, 216, 143, 167, 153, 91, 228, 104, 21, 91, 220, 20, 91, 144, 75, 78, 172, 19, 17, 34, 240, 72, 219, 10, 77, 75, 108, 157, 14, 114, 226, 175, 226, 219, 26, 202, 86, 89, 236, 145, 89, 112, 70, 206, 246, 76, 122, 66, 41, 251, 108, 86, 101, 141, 223}, +{153, 3, 85, 182, 26, 37, 150, 131, 158, 43, 153, 205, 150, 35, 125, 42, 23, 1, 255, 190, 24, 220, 243, 253, 196, 250, 213, 132, 166, 3, 134, 48, 133, 147, 244, 117, 100, 20, 176, 19, 76, 158, 248, 115, 4, 14, 95, 88, 91, 98, 125, 115, 44, 112, 164, 58, 205, 45, 37, 1, 235, 186, 23, 85, 214, 169, 48, 200, 17, 238, 216, 184, 19, 33, 225, 221, 212, 119, 58, 117, 209, 56, 166, 234, 92, 30, 124, 164, 255, 33, 255, 161, 234, 67, 199, 150, 160, 195, 115, 16, 223, 77, 141, 93, 254, 68, 137, 87, 240, 254, 7, 66, 223, 195, 146, 247, 204, 236, 132, 177, 213, 223, 235, 213, 150, 232, 134, 173}, +{9, 43, 168, 140, 208, 224, 114, 97, 211, 217, 61, 10, 155, 29, 77, 64, 163, 48, 183, 19, 120, 174, 40, 85, 223, 51, 22, 93, 32, 194, 76, 103, 87, 117, 127, 242, 0, 92, 16, 231, 95, 162, 154, 197, 88, 13, 172, 102, 101, 218, 188, 147, 229, 96, 126, 236, 102, 76, 92, 150, 117, 61, 163, 159, 162, 222, 6, 200, 174, 112, 238, 92, 145, 12, 10, 8, 36, 61, 14, 11, 49, 177, 239, 104, 128, 38, 185, 191, 133, 32, 110, 112, 1, 194, 12, 217, 100, 133, 24, 253, 133, 191, 214, 109, 184, 84, 60, 117, 142, 53, 172, 188, 72, 167, 224, 86, 125, 201, 175, 56, 169, 109, 207, 11, 211, 151, 107, 248}, +{43, 50, 173, 57, 65, 72, 165, 9, 160, 186, 97, 155, 83, 125, 127, 26, 188, 150, 149, 246, 189, 157, 149, 13, 67, 200, 48, 174, 152, 58, 238, 137, 173, 185, 224, 246, 99, 21, 96, 213, 190, 104, 66, 110, 9, 78, 29, 81, 99, 61, 254, 107, 185, 83, 241, 198, 0, 243, 243, 23, 78, 147, 186, 178, 99, 234, 39, 229, 193, 172, 100, 60, 126, 37, 41, 84, 141, 127, 74, 77, 21, 112, 196, 230, 255, 69, 34, 236, 117, 230, 114, 129, 85, 61, 149, 22, 28, 250, 112, 127, 254, 230, 57, 147, 235, 125, 13, 239, 141, 98, 32, 176, 33, 61, 192, 132, 141, 226, 18, 115, 163, 175, 6, 141, 40, 182, 97, 117}, +{10, 216, 180, 179, 176, 1, 134, 154, 173, 162, 115, 152, 105, 64, 153, 117, 132, 202, 192, 59, 72, 201, 24, 123, 206, 208, 47, 216, 137, 143, 25, 132, 201, 66, 153, 72, 230, 92, 104, 28, 59, 128, 228, 76, 209, 200, 185, 141, 239, 144, 127, 85, 149, 94, 113, 24, 121, 221, 25, 69, 148, 33, 122, 34, 95, 89, 128, 26, 83, 63, 42, 14, 46, 154, 80, 166, 21, 38, 29, 232, 70, 196, 163, 199, 165, 60, 229, 154, 24, 72, 122, 46, 169, 108, 139, 10, 43, 192, 199, 71, 108, 116, 155, 21, 206, 114, 50, 226, 196, 88, 244, 238, 117, 187, 236, 147, 64, 90, 111, 31, 126, 186, 233, 186, 198, 253, 13, 93}, +{39, 193, 145, 93, 245, 60, 222, 205, 184, 145, 21, 177, 255, 209, 35, 246, 45, 190, 75, 26, 142, 150, 73, 187, 166, 142, 183, 156, 82, 209, 102, 147, 77, 128, 138, 96, 100, 111, 57, 117, 25, 37, 96, 157, 231, 233, 217, 17, 20, 7, 134, 129, 17, 102, 171, 212, 116, 97, 209, 181, 102, 111, 195, 29, 198, 69, 123, 27, 20, 84, 171, 253, 244, 148, 202, 192, 156, 136, 107, 219, 169, 39, 64, 178, 113, 14, 169, 156, 154, 186, 158, 61, 241, 79, 180, 135, 25, 173, 180, 80, 232, 253, 39, 80, 75, 91, 188, 65, 86, 71, 209, 13, 84, 152, 107, 16, 90, 203, 118, 112, 155, 62, 104, 104, 166, 254, 164, 173}, +{12, 222, 148, 165, 212, 122, 16, 51, 236, 228, 55, 109, 5, 13, 219, 19, 200, 51, 31, 208, 185, 13, 91, 174, 189, 61, 74, 211, 88, 195, 19, 104, 123, 77, 68, 211, 105, 89, 98, 14, 61, 82, 73, 26, 189, 178, 45, 217, 203, 27, 140, 94, 23, 47, 127, 109, 74, 218, 242, 134, 87, 45, 178, 183, 182, 180, 97, 36, 160, 152, 94, 140, 229, 153, 150, 181, 8, 238, 132, 171, 203, 4, 227, 74, 239, 156, 154, 193, 220, 0, 169, 103, 152, 12, 242, 107, 6, 112, 179, 242, 53, 132, 65, 229, 199, 125, 74, 116, 49, 4, 220, 54, 50, 154, 235, 66, 189, 225, 2, 171, 255, 132, 114, 228, 204, 171, 104, 163}, +{131, 111, 15, 213, 168, 97, 99, 153, 99, 46, 101, 79, 55, 58, 224, 70, 244, 115, 172, 44, 119, 90, 78, 191, 197, 35, 34, 51, 153, 183, 193, 236, 201, 161, 70, 21, 132, 97, 174, 115, 19, 135, 173, 209, 46, 175, 17, 160, 45, 224, 140, 92, 180, 115, 58, 25, 77, 89, 203, 82, 99, 28, 57, 6, 119, 233, 76, 124, 63, 23, 70, 6, 143, 130, 84, 233, 58, 77, 138, 129, 114, 118, 143, 112, 251, 87, 176, 121, 0, 95, 89, 133, 93, 162, 207, 203, 31, 199, 210, 120, 26, 46, 127, 210, 44, 76, 91, 56, 132, 124, 134, 104, 208, 35, 169, 229, 130, 10, 219, 11, 104, 172, 158, 245, 44, 1, 130, 255}, +{163, 94, 168, 200, 86, 18, 60, 135, 191, 140, 21, 60, 144, 50, 158, 119, 35, 38, 18, 189, 246, 123, 242, 209, 76, 13, 91, 51, 247, 176, 43, 37, 158, 96, 0, 42, 47, 104, 194, 50, 54, 163, 7, 89, 41, 17, 206, 56, 61, 217, 95, 125, 54, 35, 185, 56, 159, 212, 194, 200, 176, 118, 115, 144, 10, 26, 187, 186, 161, 170, 136, 57, 196, 109, 211, 209, 220, 65, 120, 162, 89, 93, 144, 134, 210, 144, 142, 88, 175, 105, 71, 143, 146, 132, 116, 41, 51, 213, 228, 223, 89, 169, 123, 164, 52, 106, 111, 240, 44, 2, 100, 51, 217, 183, 157, 9, 238, 105, 24, 192, 172, 91, 239, 152, 180, 214, 141, 249}, +{193, 96, 194, 34, 209, 81, 210, 191, 212, 218, 55, 90, 100, 90, 106, 108, 47, 59, 210, 104, 78, 109, 10, 16, 108, 148, 197, 51, 125, 225, 224, 75, 146, 77, 243, 162, 76, 34, 181, 40, 81, 232, 195, 13, 210, 133, 98, 175, 68, 73, 72, 4, 58, 130, 2, 22, 226, 94, 234, 146, 21, 167, 162, 247, 41, 105, 182, 108, 96, 62, 244, 28, 161, 228, 178, 175, 119, 132, 143, 197, 110, 141, 196, 164, 51, 209, 170, 114, 208, 167, 4, 236, 244, 120, 143, 95, 34, 62, 112, 126, 179, 248, 214, 191, 75, 246, 23, 103, 116, 74, 20, 81, 80, 246, 255, 39, 159, 122, 66, 154, 2, 104, 88, 47, 197, 132, 111, 109}, +{180, 58, 83, 40, 81, 60, 35, 239, 70, 109, 221, 140, 115, 120, 80, 195, 33, 145, 45, 182, 139, 55, 110, 147, 139, 154, 106, 230, 21, 70, 149, 102, 43, 248, 57, 178, 65, 115, 102, 108, 135, 212, 59, 92, 231, 37, 180, 174, 152, 240, 217, 96, 77, 192, 84, 220, 14, 90, 189, 95, 19, 61, 235, 231, 219, 4, 197, 105, 132, 127, 234, 95, 178, 197, 235, 168, 38, 74, 222, 103, 242, 97, 245, 83, 199, 21, 150, 154, 137, 132, 0, 45, 236, 115, 179, 233, 253, 134, 77, 39, 57, 161, 243, 6, 188, 228, 232, 206, 109, 118, 249, 43, 144, 216, 18, 82, 204, 16, 135, 165, 94, 202, 159, 205, 221, 97, 191, 72}, +{124, 220, 117, 127, 34, 124, 249, 252, 242, 249, 136, 242, 27, 129, 103, 15, 185, 33, 19, 54, 213, 73, 194, 191, 34, 111, 66, 218, 61, 222, 217, 36, 194, 234, 139, 138, 60, 213, 22, 127, 59, 94, 7, 48, 117, 24, 148, 180, 161, 126, 167, 242, 222, 98, 107, 221, 133, 251, 44, 206, 64, 170, 32, 35, 125, 92, 176, 144, 132, 230, 214, 209, 218, 232, 178, 71, 177, 55, 34, 49, 211, 191, 189, 61, 247, 114, 209, 39, 244, 43, 53, 82, 37, 138, 83, 173, 139, 64, 161, 117, 56, 251, 226, 83, 176, 74, 147, 237, 50, 24, 215, 162, 110, 225, 191, 183, 119, 96, 114, 246, 68, 145, 226, 106, 64, 244, 28, 251}, +{21, 158, 246, 230, 250, 230, 73, 112, 230, 22, 33, 181, 208, 220, 171, 175, 240, 147, 182, 59, 181, 248, 189, 155, 40, 146, 22, 93, 54, 244, 99, 106, 77, 56, 36, 151, 248, 190, 17, 241, 131, 230, 135, 110, 231, 177, 13, 138, 194, 181, 219, 168, 50, 188, 84, 122, 63, 205, 160, 187, 41, 229, 146, 38, 152, 159, 172, 140, 110, 128, 85, 28, 237, 84, 15, 101, 109, 188, 104, 146, 210, 206, 251, 236, 135, 80, 8, 233, 7, 123, 152, 38, 59, 104, 18, 13, 14, 190, 235, 30, 234, 165, 60, 138, 221, 207, 201, 86, 181, 237, 142, 95, 92, 47, 69, 20, 2, 177, 146, 240, 95, 139, 66, 221, 18, 171, 199, 52}, +{110, 105, 154, 191, 121, 133, 65, 236, 138, 178, 122, 10, 41, 232, 188, 65, 223, 226, 122, 149, 72, 149, 35, 176, 91, 90, 201, 48, 63, 241, 183, 201, 224, 26, 128, 250, 29, 219, 18, 240, 69, 220, 95, 186, 79, 129, 66, 199, 112, 68, 124, 5, 56, 163, 44, 98, 24, 55, 203, 40, 69, 229, 98, 79, 65, 173, 102, 63, 237, 101, 246, 240, 190, 80, 229, 246, 134, 67, 239, 232, 71, 187, 169, 233, 25, 137, 245, 193, 67, 215, 194, 104, 109, 227, 94, 166, 109, 246, 110, 219, 56, 134, 98, 92, 96, 196, 33, 49, 131, 12, 167, 211, 69, 76, 14, 114, 228, 245, 133, 12, 29, 49, 250, 230, 177, 69, 247, 253}, +{73, 118, 213, 67, 29, 204, 35, 19, 198, 126, 197, 27, 155, 98, 127, 226, 6, 215, 148, 168, 65, 167, 210, 168, 229, 157, 156, 254, 177, 51, 203, 68, 133, 82, 123, 239, 145, 77, 142, 20, 19, 223, 34, 241, 140, 0, 172, 67, 78, 254, 31, 2, 1, 178, 131, 111, 32, 249, 89, 57, 60, 48, 7, 114, 45, 222, 242, 219, 60, 15, 76, 246, 145, 218, 41, 89, 228, 7, 128, 137, 29, 8, 4, 134, 39, 53, 202, 223, 123, 220, 149, 202, 196, 150, 38, 227, 203, 253, 49, 112, 180, 45, 189, 104, 55, 234, 55, 57, 134, 242, 218, 240, 157, 203, 218, 67, 167, 243, 22, 106, 71, 246, 38, 201, 184, 225, 39, 75}, +{100, 146, 132, 19, 71, 230, 213, 158, 2, 106, 83, 172, 94, 38, 141, 127, 132, 220, 184, 253, 98, 161, 72, 141, 187, 82, 66, 120, 133, 227, 174, 193, 149, 119, 126, 70, 226, 39, 75, 31, 159, 126, 251, 234, 1, 98, 204, 11, 206, 205, 242, 245, 123, 245, 100, 19, 1, 237, 69, 113, 239, 35, 7, 250, 172, 252, 246, 150, 132, 215, 36, 132, 95, 95, 40, 81, 177, 45, 62, 30, 176, 15, 245, 52, 36, 219, 110, 230, 48, 188, 114, 137, 251, 220, 211, 6, 214, 213, 111, 123, 232, 172, 154, 169, 135, 32, 160, 15, 154, 226, 16, 183, 253, 64, 109, 213, 242, 236, 250, 18, 119, 255, 35, 190, 217, 71, 32, 136}, +{124, 145, 181, 145, 26, 142, 229, 188, 241, 49, 234, 27, 226, 151, 158, 51, 229, 223, 8, 190, 95, 109, 176, 108, 238, 251, 236, 229, 244, 112, 20, 163, 71, 65, 95, 99, 112, 219, 133, 98, 151, 137, 112, 139, 127, 56, 24, 48, 223, 201, 67, 66, 180, 190, 54, 157, 71, 163, 97, 192, 195, 183, 62, 187, 203, 93, 5, 38, 133, 1, 233, 148, 97, 36, 131, 230, 153, 149, 87, 218, 90, 228, 73, 163, 148, 95, 43, 27, 172, 170, 86, 238, 245, 99, 173, 238, 231, 208, 123, 39, 175, 90, 246, 245, 132, 17, 98, 149, 55, 147, 23, 156, 120, 247, 62, 26, 115, 196, 134, 84, 57, 193, 125, 90, 159, 136, 44, 229}, +{49, 34, 252, 190, 43, 229, 113, 116, 143, 53, 58, 4, 150, 132, 204, 161, 43, 116, 226, 226, 86, 151, 223, 17, 175, 94, 227, 18, 71, 58, 41, 155, 44, 186, 160, 71, 191, 97, 239, 141, 215, 253, 62, 170, 132, 248, 227, 139, 137, 240, 57, 88, 235, 182, 180, 148, 52, 197, 135, 13, 46, 94, 105, 16, 167, 145, 153, 83, 163, 183, 17, 0, 141, 108, 205, 34, 160, 0, 182, 83, 188, 205, 177, 175, 114, 219, 163, 247, 130, 111, 171, 170, 141, 174, 40, 21, 32, 214, 109, 84, 118, 243, 8, 194, 127, 214, 242, 227, 114, 170, 119, 133, 148, 47, 179, 33, 22, 64, 87, 95, 29, 30, 107, 119, 145, 164, 162, 151}, +{80, 140, 130, 139, 125, 1, 9, 139, 206, 141, 139, 2, 126, 110, 154, 56, 204, 57, 240, 224, 150, 106, 83, 30, 69, 6, 201, 67, 113, 163, 134, 14, 229, 125, 41, 102, 185, 224, 192, 47, 22, 235, 246, 214, 240, 54, 241, 128, 199, 12, 186, 21, 53, 10, 139, 47, 210, 33, 74, 80, 55, 119, 117, 48, 183, 62, 161, 180, 64, 117, 221, 86, 241, 139, 247, 187, 50, 59, 32, 22, 160, 119, 250, 123, 238, 7, 41, 60, 247, 132, 124, 205, 53, 174, 159, 62, 111, 243, 213, 22, 158, 5, 33, 126, 1, 151, 44, 0, 11, 44, 7, 36, 232, 233, 108, 201, 0, 99, 13, 190, 172, 207, 22, 244, 103, 59, 168, 132}, +{38, 122, 201, 40, 105, 181, 184, 186, 186, 206, 47, 221, 220, 58, 131, 178, 6, 173, 153, 248, 63, 190, 163, 177, 114, 178, 228, 76, 180, 156, 2, 106, 218, 171, 112, 107, 249, 126, 153, 146, 69, 101, 50, 142, 150, 128, 147, 241, 233, 164, 115, 17, 118, 55, 107, 76, 166, 158, 93, 21, 168, 47, 7, 138, 149, 182, 145, 155, 248, 217, 76, 92, 151, 113, 235, 117, 227, 198, 103, 152, 240, 81, 181, 202, 17, 57, 246, 247, 242, 105, 227, 250, 146, 202, 136, 39, 223, 232, 242, 80, 99, 58, 162, 1, 201, 15, 7, 50, 149, 208, 234, 128, 12, 65, 62, 25, 150, 178, 247, 19, 97, 30, 0, 185, 68, 157, 49, 92}, +{154, 12, 43, 201, 87, 60, 40, 119, 193, 73, 110, 203, 0, 249, 202, 115, 202, 161, 167, 72, 153, 249, 55, 254, 28, 44, 217, 210, 235, 166, 219, 103, 199, 208, 149, 253, 62, 69, 138, 107, 159, 187, 98, 136, 19, 146, 223, 84, 162, 0, 171, 61, 45, 13, 192, 55, 170, 142, 255, 71, 245, 230, 126, 204, 13, 228, 158, 181, 93, 179, 18, 201, 140, 117, 45, 56, 135, 82, 0, 205, 100, 137, 161, 255, 173, 122, 105, 249, 41, 148, 45, 118, 249, 179, 139, 226, 58, 127, 5, 144, 195, 217, 184, 57, 114, 17, 159, 107, 201, 183, 232, 253, 223, 44, 107, 141, 178, 149, 38, 180, 133, 250, 87, 107, 122, 183, 26, 230}, +{46, 209, 176, 231, 219, 197, 156, 224, 105, 157, 138, 39, 56, 13, 5, 154, 129, 179, 57, 48, 16, 189, 238, 169, 197, 238, 230, 110, 9, 28, 191, 79, 110, 153, 88, 160, 55, 139, 58, 38, 187, 23, 83, 70, 97, 26, 242, 225, 37, 149, 212, 84, 120, 32, 69, 52, 139, 49, 141, 164, 41, 38, 216, 186, 151, 73, 155, 184, 55, 14, 50, 35, 25, 57, 74, 116, 208, 97, 16, 141, 40, 253, 103, 253, 16, 227, 64, 245, 248, 252, 47, 205, 100, 98, 129, 225, 219, 88, 20, 171, 122, 160, 21, 76, 142, 118, 233, 45, 240, 190, 102, 201, 83, 168, 200, 237, 100, 10, 186, 42, 142, 175, 80, 89, 165, 65, 57, 176}, +{16, 173, 6, 19, 107, 107, 10, 10, 178, 242, 157, 87, 56, 72, 248, 128, 168, 228, 108, 109, 224, 208, 126, 38, 154, 114, 36, 19, 163, 20, 225, 121, 208, 92, 70, 252, 112, 109, 211, 29, 171, 87, 251, 8, 91, 44, 81, 222, 167, 12, 46, 225, 105, 188, 63, 76, 122, 182, 107, 233, 172, 242, 238, 48, 194, 247, 208, 254, 29, 140, 143, 144, 74, 30, 136, 157, 121, 247, 165, 132, 14, 198, 21, 40, 155, 224, 19, 248, 210, 86, 155, 101, 225, 201, 123, 40, 94, 156, 151, 223, 186, 125, 33, 104, 28, 123, 206, 22, 156, 35, 158, 162, 88, 17, 41, 53, 225, 108, 208, 165, 97, 70, 145, 164, 4, 180, 239, 174}, +{159, 129, 106, 47, 114, 135, 57, 38, 165, 68, 6, 99, 255, 84, 192, 148, 45, 80, 251, 37, 252, 12, 69, 243, 166, 129, 176, 113, 182, 201, 169, 147, 254, 24, 38, 221, 190, 218, 12, 193, 198, 240, 180, 181, 82, 172, 23, 104, 231, 73, 207, 132, 253, 172, 67, 79, 193, 8, 108, 62, 78, 50, 213, 48, 28, 211, 237, 236, 212, 109, 57, 16, 197, 189, 253, 78, 224, 233, 168, 179, 170, 232, 49, 130, 34, 233, 253, 198, 3, 117, 22, 32, 63, 163, 1, 92, 91, 48, 111, 225, 104, 35, 195, 115, 247, 59, 255, 59, 114, 127, 254, 32, 103, 140, 53, 178, 61, 71, 240, 130, 75, 123, 242, 44, 44, 63, 217, 30}, +{5, 200, 149, 71, 143, 105, 151, 223, 38, 201, 150, 213, 187, 179, 32, 140, 202, 79, 55, 9, 37, 96, 199, 18, 242, 148, 240, 193, 62, 128, 62, 244, 212, 191, 202, 110, 95, 27, 70, 64, 5, 239, 126, 126, 91, 153, 111, 152, 231, 83, 62, 233, 59, 246, 180, 22, 142, 3, 194, 84, 33, 149, 24, 214, 208, 205, 137, 231, 53, 46, 30, 13, 155, 32, 68, 196, 108, 128, 169, 25, 43, 20, 60, 238, 124, 1, 210, 72, 92, 140, 13, 138, 252, 206, 123, 87, 13, 219, 188, 179, 136, 247, 141, 27, 26, 246, 249, 130, 133, 113, 245, 248, 233, 142, 253, 25, 115, 55, 162, 9, 142, 216, 156, 11, 200, 147, 144, 151}, +{193, 102, 254, 168, 96, 7, 151, 64, 150, 90, 136, 118, 221, 111, 194, 35, 215, 142, 12, 53, 57, 36, 208, 253, 167, 247, 113, 151, 156, 162, 48, 17, 220, 94, 254, 191, 78, 54, 59, 115, 197, 160, 174, 199, 246, 64, 129, 231, 197, 29, 150, 187, 182, 220, 170, 198, 151, 239, 253, 58, 237, 161, 47, 31, 177, 225, 121, 108, 147, 167, 132, 65, 125, 159, 113, 167, 132, 178, 36, 61, 226, 104, 141, 103, 94, 49, 21, 117, 17, 66, 30, 9, 75, 13, 196, 37, 251, 149, 92, 250, 243, 236, 209, 114, 239, 43, 16, 91, 218, 119, 86, 75, 11, 241, 49, 108, 2, 247, 250, 210, 51, 145, 248, 111, 203, 47, 35, 9}, +{168, 211, 207, 15, 32, 9, 199, 83, 220, 28, 148, 248, 75, 220, 105, 4, 169, 29, 79, 253, 136, 254, 135, 249, 56, 225, 26, 161, 248, 171, 174, 65, 74, 105, 70, 67, 229, 202, 244, 41, 111, 39, 72, 243, 39, 248, 23, 83, 21, 225, 46, 62, 231, 214, 194, 3, 116, 133, 133, 56, 215, 163, 64, 202, 69, 73, 243, 19, 210, 238, 153, 236, 207, 69, 236, 75, 135, 31, 12, 254, 69, 155, 1, 26, 252, 162, 251, 184, 45, 250, 138, 129, 61, 32, 94, 58, 246, 171, 82, 30, 188, 52, 128, 43, 37, 255, 145, 179, 167, 122, 86, 40, 153, 73, 146, 181, 230, 44, 18, 222, 193, 49, 190, 179, 30, 200, 78, 55}, +{23, 193, 214, 97, 144, 30, 131, 59, 117, 210, 232, 168, 85, 66, 149, 234, 10, 201, 150, 224, 65, 199, 29, 203, 47, 222, 115, 210, 164, 248, 236, 35, 140, 108, 214, 134, 180, 99, 50, 204, 78, 6, 44, 150, 99, 140, 30, 2, 97, 178, 235, 36, 82, 198, 122, 169, 5, 55, 131, 24, 143, 69, 14, 158, 196, 86, 118, 108, 59, 31, 142, 170, 44, 198, 9, 214, 161, 144, 134, 67, 41, 59, 253, 230, 200, 72, 40, 66, 228, 56, 178, 112, 15, 233, 208, 22, 92, 50, 216, 237, 213, 190, 91, 114, 124, 157, 107, 238, 109, 251, 57, 4, 207, 235, 187, 188, 190, 159, 107, 199, 107, 41, 156, 76, 228, 151, 199, 119}, +{2, 107, 220, 23, 140, 176, 185, 70, 16, 206, 58, 12, 208, 88, 246, 15, 201, 13, 204, 240, 136, 236, 208, 146, 41, 133, 190, 43, 176, 195, 13, 211, 149, 50, 91, 115, 68, 160, 131, 131, 177, 43, 179, 30, 146, 108, 200, 210, 78, 221, 121, 190, 14, 153, 99, 26, 237, 118, 101, 252, 181, 154, 133, 186, 106, 98, 136, 123, 107, 128, 26, 156, 147, 124, 7, 125, 93, 103, 41, 155, 253, 205, 191, 222, 135, 220, 68, 69, 61, 91, 35, 226, 201, 58, 34, 126, 213, 132, 244, 17, 122, 172, 134, 92, 128, 107, 17, 92, 199, 251, 221, 184, 252, 230, 235, 107, 90, 103, 36, 124, 174, 205, 143, 157, 98, 205, 116, 102}, +{90, 42, 129, 132, 58, 231, 72, 242, 147, 253, 58, 198, 181, 81, 228, 103, 124, 148, 10, 196, 150, 87, 235, 126, 62, 41, 47, 226, 87, 42, 13, 58, 234, 40, 182, 56, 91, 131, 149, 201, 49, 236, 238, 156, 158, 12, 38, 63, 203, 174, 15, 32, 47, 164, 11, 255, 145, 27, 162, 179, 89, 84, 174, 135, 72, 57, 174, 210, 225, 45, 27, 200, 115, 197, 41, 201, 42, 89, 165, 16, 86, 164, 218, 210, 14, 58, 135, 179, 74, 188, 101, 186, 116, 149, 113, 95, 27, 101, 241, 99, 108, 234, 81, 216, 90, 102, 77, 231, 117, 75, 107, 200, 8, 118, 17, 66, 43, 222, 19, 144, 191, 101, 87, 39, 35, 30, 103, 160}, +{151, 222, 236, 85, 71, 146, 93, 51, 120, 73, 28, 153, 22, 111, 130, 82, 245, 130, 176, 57, 196, 105, 251, 190, 218, 106, 46, 47, 224, 15, 39, 170, 106, 30, 45, 210, 227, 126, 55, 215, 162, 86, 202, 186, 113, 198, 27, 47, 206, 205, 170, 223, 244, 144, 227, 220, 94, 246, 157, 104, 58, 10, 24, 114, 154, 156, 246, 61, 156, 104, 0, 114, 167, 141, 243, 167, 152, 22, 134, 252, 192, 215, 197, 225, 106, 136, 20, 28, 233, 39, 114, 24, 98, 126, 42, 152, 58, 5, 117, 43, 190, 40, 34, 127, 85, 73, 250, 249, 148, 61, 226, 229, 71, 119, 160, 24, 140, 90, 51, 14, 42, 31, 143, 188, 218, 1, 146}, +{206, 35, 21, 145, 100, 109, 60, 103, 165, 63, 130, 198, 118, 17, 155, 39, 212, 186, 234, 212, 217, 114, 229, 80, 129, 90, 206, 51, 176, 4, 27, 114, 71, 124, 96, 211, 56, 38, 219, 142, 237, 153, 98, 228, 53, 40, 167, 45, 12, 61, 105, 188, 32, 143, 97, 91, 90, 67, 217, 246, 53, 229, 198, 211, 93, 92, 229, 158, 37, 244, 213, 121, 60, 122, 233, 198, 26, 13, 215, 238, 245, 51, 183, 82, 204, 129, 58, 232, 25, 254, 38, 28, 90, 59, 131, 104, 8, 254, 89, 151, 56, 23, 231, 52, 198, 141, 14, 75, 74, 126, 1, 62, 254, 26, 224, 9, 204, 239, 90, 158, 230, 119, 158, 27, 110, 71, 210, 213}, +{84, 91, 137, 67, 255, 63, 216, 73, 191, 126, 36, 104, 139, 235, 6, 156, 21, 135, 227, 184, 10, 59, 239, 122, 50, 127, 146, 3, 84, 178, 168, 15, 148, 3, 160, 43, 37, 223, 150, 236, 235, 190, 60, 24, 129, 160, 218, 86, 81, 206, 97, 189, 185, 139, 130, 250, 9, 215, 26, 243, 168, 254, 159, 189, 146, 64, 70, 146, 3, 144, 246, 2, 119, 191, 71, 229, 46, 66, 220, 201, 10, 45, 85, 188, 214, 183, 20, 59, 186, 125, 74, 86, 9, 240, 26, 192, 95, 116, 152, 100, 217, 251, 25, 52, 222, 230, 3, 185, 230, 36, 44, 61, 104, 133, 57, 142, 152, 146, 158, 233, 49, 142, 168, 237, 217, 187, 117, 51}, +{54, 49, 123, 169, 32, 86, 142, 166, 247, 157, 150, 253, 17, 180, 2, 216, 14, 197, 220, 236, 218, 30, 192, 60, 94, 155, 41, 94, 18, 87, 109, 176, 68, 250, 218, 169, 76, 98, 250, 52, 152, 179, 129, 250, 237, 229, 140, 166, 174, 55, 18, 43, 12, 41, 207, 24, 135, 151, 160, 84, 228, 237, 199, 25, 255, 249, 107, 149, 4, 31, 246, 242, 105, 93, 135, 27, 237, 248, 199, 253, 69, 214, 45, 178, 77, 0, 193, 36, 220, 157, 62, 138, 74, 83, 188, 73, 194, 124, 63, 232, 173, 228, 76, 146, 22, 163, 95, 220, 158, 216, 160, 217, 173, 176, 107, 229, 9, 59, 117, 177, 192, 90, 195, 224, 20, 251, 21, 155}, +{169, 53, 144, 160, 111, 45, 204, 89, 21, 250, 79, 199, 138, 17, 161, 240, 247, 35, 84, 220, 170, 78, 151, 167, 223, 82, 235, 241, 78, 211, 44, 111, 94, 16, 128, 233, 164, 252, 96, 239, 161, 89, 84, 83, 55, 106, 5, 242, 8, 139, 160, 50, 221, 105, 189, 236, 225, 11, 19, 181, 89, 224, 157, 250, 0, 214, 201, 191, 139, 38, 159, 251, 67, 16, 106, 246, 240, 235, 105, 128, 242, 43, 41, 74, 230, 250, 149, 15, 60, 150, 151, 87, 233, 204, 189, 30, 110, 0, 11, 186, 183, 164, 222, 115, 90, 173, 158, 79, 53, 90, 124, 63, 138, 102, 35, 246, 97, 8, 194, 75, 12, 145, 109, 18, 216, 72, 139, 241}, +{160, 25, 29, 171, 252, 141, 197, 252, 15, 41, 42, 138, 89, 116, 214, 194, 198, 157, 11, 212, 9, 116, 8, 252, 209, 193, 182, 80, 248, 127, 214, 211, 70, 79, 13, 84, 191, 108, 52, 69, 230, 155, 100, 169, 95, 255, 79, 82, 49, 83, 168, 101, 166, 0, 126, 220, 250, 134, 106, 107, 153, 219, 13, 11, 205, 167, 223, 170, 230, 195, 15, 253, 30, 209, 105, 243, 251, 30, 53, 27, 71, 10, 234, 218, 251, 10, 97, 164, 209, 129, 186, 242, 100, 219, 164, 6, 106, 177, 13, 205, 29, 147, 107, 192, 141, 66, 97, 28, 154, 98, 131, 106, 221, 107, 145, 69, 113, 184, 53, 133, 118, 223, 110, 205, 25, 165, 210, 134}, +{120, 154, 26, 28, 96, 122, 170, 196, 167, 48, 193, 120, 224, 205, 186, 138, 133, 113, 252, 174, 109, 3, 8, 147, 14, 67, 44, 190, 26, 169, 125, 95, 1, 81, 198, 171, 22, 70, 34, 159, 79, 110, 134, 226, 1, 120, 242, 155, 105, 225, 161, 199, 243, 12, 128, 174, 245, 126, 58, 187, 110, 170, 245, 247, 248, 85, 236, 164, 54, 0, 245, 244, 214, 177, 110, 5, 97, 124, 250, 28, 26, 162, 57, 31, 95, 93, 89, 200, 164, 233, 169, 130, 44, 241, 234, 238, 157, 178, 230, 240, 24, 52, 110, 238, 68, 169, 152, 139, 239, 207, 115, 83, 90, 192, 77, 171, 43, 239, 95, 56, 144, 214, 236, 123, 116, 247, 25, 154}, +{3, 210, 33, 90, 241, 233, 37, 169, 201, 12, 183, 113, 67, 204, 44, 216, 59, 240, 10, 214, 208, 1, 200, 133, 84, 24, 148, 139, 166, 19, 168, 200, 231, 215, 197, 206, 37, 79, 229, 84, 115, 43, 159, 191, 25, 87, 210, 4, 125, 185, 203, 224, 93, 156, 36, 203, 129, 177, 116, 119, 118, 219, 110, 161, 238, 107, 39, 216, 220, 118, 42, 9, 132, 86, 107, 47, 105, 188, 46, 121, 3, 199, 222, 183, 26, 25, 147, 142, 11, 202, 197, 21, 15, 188, 198, 226, 29, 118, 102, 9, 35, 232, 121, 64, 128, 149, 233, 58, 7, 15, 148, 151, 54, 47, 26, 131, 207, 21, 41, 2, 140, 174, 226, 146, 7, 183, 93, 116}, +{57, 95, 166, 73, 48, 8, 112, 228, 96, 34, 25, 95, 191, 224, 14, 30, 30, 46, 40, 207, 153, 93, 45, 122, 48, 45, 211, 175, 244, 243, 141, 62, 223, 80, 78, 157, 147, 165, 40, 46, 33, 141, 167, 29, 196, 137, 37, 99, 108, 176, 255, 151, 151, 54, 238, 170, 117, 219, 69, 73, 254, 116, 149, 101, 7, 119, 96, 118, 79, 221, 10, 249, 61, 219, 80, 135, 106, 34, 249, 91, 106, 14, 226, 255, 25, 218, 201, 30, 246, 224, 169, 112, 118, 229, 189, 251, 141, 251, 121, 230, 53, 255, 14, 183, 223, 251, 147, 68, 212, 161, 240, 19, 113, 36, 84, 212, 189, 14, 202, 13, 104, 63, 73, 192, 162, 228, 141, 253}, +{188, 145, 218, 180, 141, 80, 60, 226, 51, 180, 16, 187, 128, 35, 123, 23, 99, 207, 69, 71, 46, 241, 107, 146, 76, 40, 136, 108, 233, 82, 155, 189, 121, 110, 201, 234, 160, 237, 215, 19, 43, 167, 66, 65, 204, 213, 196, 75, 88, 83, 223, 160, 122, 127, 205, 166, 229, 175, 37, 198, 91, 124, 49, 209, 81, 12, 221, 107, 140, 106, 169, 87, 106, 9, 229, 155, 183, 172, 173, 217, 231, 67, 50, 120, 182, 201, 88, 232, 181, 226, 122, 125, 41, 103, 222, 17, 128, 208, 153, 27, 85, 160, 195, 78, 173, 131, 122, 171, 237, 247, 198, 49, 228, 1, 184, 65, 190, 102, 43, 87, 80, 155, 142, 57, 207, 59, 195, 35}, +{106, 148, 146, 96, 12, 11, 113, 166, 204, 89, 236, 224, 23, 191, 203, 165, 66, 37, 46, 108, 231, 232, 156, 22, 183, 140, 176, 125, 91, 129, 185, 22, 60, 209, 214, 63, 197, 97, 212, 133, 197, 116, 193, 112, 93, 192, 36, 177, 185, 26, 223, 237, 135, 170, 127, 144, 222, 244, 102, 56, 254, 230, 215, 57, 52, 37, 49, 110, 126, 43, 81, 225, 241, 173, 57, 149, 64, 70, 209, 161, 2, 186, 252, 32, 97, 98, 52, 77, 121, 143, 102, 80, 56, 187, 56, 149, 132, 170, 4, 233, 29, 218, 19, 78, 124, 149, 2, 92, 180, 106, 73, 241, 129, 157, 136, 44, 110, 4, 212, 33, 237, 136, 66, 35, 62, 167, 141, 185}, +{140, 241, 134, 131, 91, 212, 254, 110, 123, 183, 225, 199, 93, 41, 88, 53, 207, 223, 99, 143, 90, 243, 95, 158, 81, 189, 100, 54, 235, 19, 50, 242, 237, 175, 199, 63, 101, 108, 194, 181, 171, 30, 225, 147, 128, 104, 62, 96, 199, 156, 230, 210, 122, 71, 135, 113, 79, 59, 70, 233, 192, 24, 252, 79, 111, 253, 132, 37, 128, 20, 19, 45, 194, 195, 160, 57, 156, 71, 192, 235, 198, 46, 124, 222, 244, 12, 174, 86, 249, 18, 109, 208, 64, 62, 68, 251, 204, 246, 230, 105, 172, 225, 159, 4, 69, 221, 53, 22, 44, 87, 187, 76, 39, 123, 33, 97, 249, 160, 148, 49, 105, 75, 77, 142, 91, 241, 106, 160}, +{71, 214, 212, 182, 3, 184, 146, 66, 113, 91, 22, 90, 176, 150, 20, 90, 156, 83, 217, 75, 91, 231, 149, 119, 170, 165, 147, 58, 107, 130, 23, 7, 132, 204, 65, 87, 162, 172, 183, 213, 210, 96, 13, 189, 253, 206, 198, 21, 97, 19, 63, 62, 94, 212, 227, 97, 212, 200, 180, 8, 252, 104, 69, 147, 92, 187, 203, 73, 173, 24, 215, 110, 218, 101, 245, 209, 20, 164, 38, 91, 182, 245, 3, 145, 148, 244, 167, 56, 253, 137, 80, 127, 38, 99, 248, 212, 252, 139, 110, 205, 243, 135, 119, 64, 85, 132, 30, 68, 123, 50, 248, 102, 49, 201, 106, 201, 83, 72, 41, 58, 243, 6, 234, 53, 8, 68, 43, 116}, +{32, 244, 56, 202, 215, 33, 47, 33, 127, 6, 171, 235, 113, 154, 252, 155, 50, 228, 7, 81, 131, 99, 226, 114, 109, 114, 182, 141, 1, 205, 99, 235, 122, 63, 143, 155, 218, 6, 186, 87, 83, 147, 59, 140, 222, 134, 188, 171, 59, 249, 75, 190, 240, 84, 15, 216, 149, 217, 122, 89, 83, 226, 190, 251, 174, 154, 110, 17, 7, 54, 203, 75, 104, 193, 229, 227, 43, 147, 118, 220, 220, 229, 110, 0, 146, 153, 194, 184, 81, 41, 14, 190, 209, 213, 36, 89, 148, 117, 16, 74, 133, 33, 208, 251, 70, 217, 220, 230, 102, 147, 69, 184, 167, 174, 115, 212, 162, 235, 114, 239, 75, 213, 51, 23, 5, 240, 250, 204}, +{207, 209, 31, 207, 201, 235, 81, 204, 64, 85, 158, 252, 100, 219, 22, 36, 116, 62, 106, 223, 90, 250, 83, 9, 9, 84, 131, 9, 243, 198, 189, 41, 43, 235, 66, 180, 247, 226, 126, 221, 179, 60, 229, 225, 144, 44, 50, 159, 160, 59, 234, 252, 97, 23, 81, 165, 227, 179, 109, 152, 146, 253, 35, 155, 226, 231, 55, 147, 237, 192, 20, 218, 21, 3, 189, 158, 221, 249, 21, 199, 88, 225, 204, 99, 194, 131, 235, 118, 172, 161, 150, 254, 115, 80, 92, 243, 202, 222, 118, 49, 16, 27, 124, 255, 197, 154, 77, 76, 210, 52, 89, 123, 6, 38, 185, 194, 178, 66, 212, 25, 132, 110, 110, 128, 49, 54, 47, 171}, +{70, 246, 103, 130, 128, 241, 132, 83, 169, 16, 93, 147, 159, 104, 27, 226, 174, 4, 38, 92, 203, 1, 191, 124, 133, 54, 222, 126, 52, 157, 179, 19, 99, 133, 166, 100, 245, 117, 0, 228, 223, 12, 248, 34, 5, 81, 129, 151, 66, 118, 246, 244, 74, 149, 93, 102, 162, 209, 116, 128, 149, 176, 158, 8, 15, 151, 115, 172, 117, 185, 84, 24, 107, 225, 102, 79, 117, 181, 163, 85, 231, 26, 167, 224, 101, 237, 103, 234, 127, 224, 209, 34, 84, 81, 151, 146, 30, 152, 55, 197, 253, 252, 106, 13, 5, 53, 133, 98, 182, 83, 191, 125, 53, 201, 47, 168, 3, 179, 177, 223, 104, 234, 136, 119, 201, 63, 127, 230}, +{90, 96, 156, 153, 54, 243, 245, 187, 54, 219, 138, 48, 245, 123, 255, 165, 2, 64, 46, 220, 36, 64, 6, 215, 53, 171, 19, 38, 123, 253, 87, 208, 154, 54, 178, 249, 109, 34, 170, 116, 129, 186, 201, 226, 179, 150, 103, 118, 143, 57, 124, 83, 210, 122, 247, 169, 160, 167, 232, 232, 53, 86, 116, 229, 40, 244, 37, 130, 188, 147, 225, 205, 120, 224, 228, 186, 177, 105, 234, 171, 192, 242, 161, 35, 34, 145, 148, 13, 156, 231, 81, 137, 72, 91, 246, 144, 49, 40, 98, 136, 229, 39, 8, 82, 16, 104, 56, 40, 188, 180, 236, 41, 29, 228, 55, 136, 115, 126, 202, 28, 159, 203, 103, 226, 19, 219, 131, 96}, +{177, 154, 26, 15, 12, 140, 37, 56, 141, 246, 204, 42, 204, 20, 86, 206, 46, 128, 166, 78, 92, 30, 207, 132, 1, 254, 11, 180, 233, 139, 249, 219, 204, 225, 224, 50, 143, 43, 86, 133, 138, 97, 18, 9, 5, 126, 216, 10, 111, 161, 127, 100, 97, 134, 112, 225, 57, 195, 101, 150, 101, 45, 214, 210, 174, 211, 30, 72, 166, 68, 164, 97, 4, 11, 22, 225, 119, 208, 191, 139, 28, 122, 160, 3, 114, 103, 137, 254, 203, 238, 110, 120, 34, 164, 218, 104, 218, 219, 25, 155, 209, 62, 121, 217, 92, 83, 118, 201, 44, 167, 158, 18, 223, 96, 146, 124, 129, 219, 23, 5, 245, 46, 221, 93, 129, 167, 18, 195}, +{209, 81, 128, 25, 210, 33, 209, 225, 119, 129, 165, 92, 107, 137, 131, 7, 156, 249, 194, 223, 14, 185, 243, 103, 102, 105, 136, 252, 206, 236, 173, 155, 44, 134, 139, 215, 101, 181, 43, 193, 151, 214, 246, 209, 12, 147, 99, 145, 124, 25, 197, 24, 113, 253, 29, 249, 152, 32, 196, 42, 230, 17, 243, 170, 102, 119, 8, 180, 212, 97, 244, 152, 23, 208, 122, 45, 222, 60, 106, 35, 17, 140, 38, 64, 30, 172, 100, 86, 42, 141, 138, 246, 208, 199, 4, 82, 162, 190, 235, 186, 46, 255, 210, 151, 11, 145, 117, 156, 201, 124, 224, 209, 147, 127, 21, 49, 59, 213, 1, 205, 70, 93, 153, 76, 233, 247, 220, 166}, +{190, 55, 33, 161, 234, 165, 146, 83, 102, 193, 122, 172, 114, 131, 247, 75, 63, 101, 157, 156, 26, 206, 217, 162, 235, 216, 29, 165, 66, 220, 118, 241, 197, 170, 31, 217, 141, 207, 153, 130, 123, 229, 137, 197, 173, 179, 68, 55, 43, 124, 216, 203, 74, 150, 5, 123, 161, 54, 248, 246, 251, 171, 139, 186, 240, 71, 72, 97, 120, 230, 57, 213, 202, 43, 51, 192, 105, 74, 99, 158, 245, 234, 134, 212, 131, 44, 106, 248, 206, 246, 97, 96, 20, 69, 244, 56, 162, 103, 94, 195, 82, 241, 101, 126, 87, 214, 225, 8, 119, 128, 31, 229, 66, 2, 111, 185, 21, 81, 181, 79, 36, 51, 228, 47, 92, 210, 9, 108}, +{103, 221, 147, 221, 251, 102, 46, 191, 55, 243, 147, 158, 186, 177, 200, 139, 143, 4, 132, 112, 64, 76, 23, 184, 19, 172, 224, 148, 40, 99, 43, 241, 93, 179, 253, 149, 85, 184, 121, 5, 135, 238, 138, 44, 46, 236, 86, 95, 111, 14, 248, 99, 44, 252, 12, 122, 172, 68, 110, 171, 207, 72, 147, 73, 72, 23, 236, 101, 90, 174, 89, 96, 206, 228, 56, 9, 124, 49, 165, 168, 71, 124, 190, 156, 189, 255, 180, 71, 201, 227, 41, 62, 26, 34, 60, 145, 108, 42, 129, 71, 63, 39, 239, 173, 195, 183, 114, 154, 16, 216, 193, 102, 180, 65, 162, 127, 28, 34, 137, 186, 11, 171, 171, 99, 175, 134, 10, 98}, +{207, 248, 185, 12, 112, 106, 179, 217, 30, 210, 230, 96, 147, 227, 86, 148, 140, 55, 191, 166, 80, 8, 232, 89, 147, 58, 247, 5, 168, 233, 11, 188, 229, 252, 112, 235, 160, 234, 231, 84, 209, 190, 158, 164, 143, 119, 246, 122, 177, 126, 82, 0, 118, 28, 142, 204, 47, 93, 252, 49, 130, 194, 81, 13, 118, 91, 141, 35, 55, 82, 115, 232, 140, 153, 154, 131, 117, 44, 169, 233, 40, 27, 44, 237, 184, 208, 136, 250, 140, 205, 74, 175, 145, 206, 252, 76, 48, 68, 201, 199, 212, 223, 250, 178, 86, 237, 196, 169, 27, 79, 209, 140, 187, 139, 42, 109, 22, 194, 198, 53, 42, 246, 222, 105, 184, 192, 255, 244}, +{206, 15, 44, 113, 125, 2, 185, 209, 143, 2, 72, 106, 109, 249, 61, 160, 145, 246, 191, 84, 169, 237, 29, 233, 33, 167, 9, 192, 185, 91, 236, 102, 254, 251, 98, 112, 43, 54, 99, 28, 172, 134, 92, 41, 221, 113, 163, 189, 8, 104, 44, 77, 246, 32, 95, 249, 209, 139, 7, 253, 241, 125, 13, 144, 201, 53, 94, 244, 56, 154, 53, 20, 170, 156, 249, 157, 28, 125, 73, 52, 52, 143, 4, 163, 83, 229, 179, 119, 83, 4, 226, 8, 40, 248, 108, 123, 227, 109, 139, 255, 10, 45, 163, 201, 192, 88, 83, 22, 30, 240, 49, 237, 27, 83, 226, 148, 25, 37, 187, 230, 161, 178, 83, 169, 7, 182, 103, 211}, +{58, 249, 93, 25, 176, 227, 191, 160, 32, 55, 190, 12, 23, 209, 198, 116, 247, 0, 11, 107, 14, 22, 218, 105, 195, 134, 30, 11, 161, 176, 209, 60, 238, 181, 4, 209, 234, 87, 72, 172, 179, 54, 128, 94, 115, 86, 226, 183, 57, 17, 69, 113, 5, 53, 20, 24, 201, 234, 7, 104, 237, 76, 147, 158, 149, 133, 115, 26, 233, 39, 61, 104, 67, 31, 158, 137, 146, 2, 124, 207, 118, 223, 233, 81, 172, 141, 89, 96, 235, 243, 10, 187, 158, 66, 48, 58, 132, 124, 17, 165, 240, 69, 8, 11, 160, 208, 104, 120, 207, 236, 151, 111, 237, 99, 109, 128, 208, 99, 130, 252, 118, 174, 117, 132, 127, 144, 229, 189}, +{110, 255, 113, 37, 65, 255, 120, 227, 180, 59, 72, 80, 67, 20, 110, 146, 40, 134, 109, 227, 236, 225, 60, 236, 192, 61, 213, 80, 123, 249, 66, 252, 245, 199, 220, 198, 51, 63, 62, 95, 78, 244, 12, 234, 19, 140, 106, 221, 0, 43, 156, 237, 165, 83, 249, 179, 255, 151, 199, 231, 81, 19, 102, 227, 214, 58, 201, 156, 211, 148, 75, 187, 99, 252, 146, 136, 26, 220, 203, 202, 22, 245, 134, 30, 92, 40, 243, 57, 92, 0, 118, 223, 176, 36, 223, 77, 65, 22, 188, 125, 21, 136, 201, 71, 156, 148, 106, 199, 236, 67, 214, 199, 49, 9, 177, 174, 65, 25, 183, 59, 119, 44, 38, 91, 68, 181, 198, 8}, +{116, 162, 168, 88, 182, 101, 131, 25, 235, 83, 0, 54, 86, 166, 179, 160, 123, 184, 167, 123, 217, 252, 194, 123, 179, 22, 118, 186, 104, 96, 105, 129, 122, 46, 230, 114, 6, 102, 217, 196, 216, 233, 29, 54, 201, 251, 200, 220, 151, 33, 26, 229, 52, 120, 214, 53, 115, 239, 14, 183, 20, 90, 59, 85, 124, 160, 61, 179, 13, 223, 111, 249, 1, 229, 203, 172, 233, 183, 148, 29, 77, 250, 116, 233, 76, 26, 108, 205, 4, 28, 223, 107, 37, 70, 20, 40, 122, 124, 236, 247, 77, 247, 200, 102, 165, 168, 3, 191, 202, 43, 254, 139, 221, 141, 236, 237, 159, 46, 184, 64, 98, 25, 31, 111, 89, 132, 46, 29}, +{54, 3, 195, 49, 193, 125, 18, 242, 230, 21, 186, 169, 199, 12, 89, 252, 23, 54, 78, 42, 90, 251, 95, 26, 228, 238, 120, 131, 3, 162, 57, 42, 22, 99, 144, 204, 42, 19, 37, 84, 253, 181, 76, 40, 255, 73, 254, 107, 112, 114, 239, 121, 253, 121, 213, 119, 25, 69, 231, 152, 14, 98, 229, 134, 44, 187, 180, 38, 33, 107, 197, 95, 67, 209, 216, 199, 63, 153, 237, 209, 194, 42, 25, 35, 140, 4, 96, 211, 88, 184, 254, 61, 38, 71, 236, 57, 95, 8, 157, 14, 82, 222, 111, 9, 234, 111, 81, 193, 152, 189, 198, 153, 68, 227, 143, 147, 148, 125, 191, 225, 233, 71, 169, 64, 192, 30, 149, 193}, +{112, 218, 93, 3, 159, 162, 73, 28, 204, 235, 179, 85, 50, 116, 216, 224, 131, 9, 100, 7, 253, 252, 61, 127, 195, 65, 234, 153, 116, 18, 58, 191, 21, 76, 251, 98, 138, 209, 91, 188, 6, 53, 65, 206, 21, 254, 9, 52, 153, 112, 85, 222, 189, 161, 181, 56, 165, 103, 98, 98, 85, 149, 3, 210, 245, 103, 57, 191, 235, 17, 35, 217, 112, 5, 97, 88, 135, 15, 182, 132, 228, 5, 236, 255, 49, 126, 109, 2, 51, 77, 42, 50, 250, 21, 67, 54, 173, 132, 100, 204, 28, 166, 221, 20, 207, 63, 219, 134, 23, 224, 134, 209, 4, 197, 154, 70, 4, 166, 200, 131, 247, 101, 160, 113, 196, 65, 173, 174}, +{108, 171, 222, 104, 242, 182, 105, 128, 224, 219, 47, 163, 87, 133, 74, 210, 170, 246, 171, 189, 13, 211, 83, 236, 194, 49, 89, 91, 112, 28, 119, 245, 165, 251, 43, 122, 111, 178, 101, 16, 236, 135, 58, 240, 157, 248, 184, 155, 193, 158, 63, 97, 121, 212, 88, 213, 243, 243, 198, 153, 193, 199, 140, 159, 101, 127, 5, 214, 51, 198, 227, 203, 200, 162, 47, 229, 163, 171, 232, 85, 100, 163, 149, 111, 145, 89, 0, 45, 158, 37, 121, 78, 224, 126, 130, 50, 212, 154, 68, 126, 187, 162, 121, 251, 190, 160, 239, 141, 47, 71, 85, 92, 49, 241, 171, 212, 144, 207, 76, 30, 132, 84, 17, 218, 162, 241, 242, 46}, +{11, 179, 154, 129, 134, 105, 121, 207, 227, 223, 128, 167, 242, 55, 221, 136, 148, 10, 82, 200, 141, 176, 201, 231, 63, 109, 80, 136, 210, 61, 190, 215, 186, 135, 158, 228, 170, 104, 26, 249, 246, 168, 69, 217, 216, 254, 144, 35, 91, 22, 204, 150, 95, 113, 147, 7, 146, 242, 106, 72, 133, 233, 205, 38, 168, 100, 119, 188, 99, 21, 78, 242, 115, 153, 80, 83, 253, 36, 212, 198, 197, 254, 160, 133, 152, 68, 110, 54, 89, 64, 26, 6, 197, 54, 173, 141, 111, 174, 60, 1, 1, 113, 3, 172, 71, 143, 239, 189, 172, 248, 57, 224, 74, 105, 239, 70, 11, 3, 36, 100, 70, 170, 119, 196, 220, 94, 50, 197}, +{62, 93, 229, 26, 110, 193, 73, 9, 55, 64, 140, 89, 204, 200, 99, 101, 225, 86, 24, 254, 39, 150, 125, 81, 181, 205, 98, 233, 66, 176, 239, 188, 154, 183, 226, 77, 191, 232, 251, 51, 162, 92, 213, 118, 136, 88, 215, 240, 172, 247, 72, 124, 163, 71, 50, 6, 175, 51, 107, 153, 39, 85, 190, 17, 76, 161, 62, 191, 225, 66, 20, 0, 126, 109, 115, 167, 143, 102, 34, 143, 190, 183, 179, 15, 206, 121, 8, 80, 2, 144, 16, 204, 207, 40, 107, 55, 33, 189, 140, 34, 37, 31, 153, 71, 16, 181, 237, 150, 23, 115, 11, 223, 188, 232, 182, 108, 210, 87, 25, 236, 47, 134, 132, 251, 236, 219, 46, 225}, +{145, 19, 8, 214, 136, 27, 25, 134, 79, 26, 155, 199, 205, 160, 94, 241, 249, 227, 142, 217, 179, 201, 146, 250, 145, 101, 250, 50, 44, 114, 66, 25, 74, 168, 3, 233, 162, 4, 11, 140, 134, 122, 55, 87, 49, 249, 180, 35, 154, 127, 74, 178, 138, 227, 64, 137, 216, 45, 53, 192, 93, 114, 16, 118, 140, 160, 216, 17, 3, 57, 212, 49, 77, 203, 223, 79, 26, 187, 75, 113, 7, 201, 15, 227, 65, 237, 78, 200, 248, 28, 83, 71, 127, 185, 128, 208, 229, 243, 239, 234, 18, 152, 7, 246, 57, 243, 146, 214, 168, 13, 21, 203, 200, 58, 226, 17, 247, 66, 155, 120, 137, 9, 147, 192, 201, 19, 46, 148}, +{186, 149, 198, 67, 101, 61, 35, 155, 129, 15, 104, 212, 213, 74, 70, 114, 119, 94, 133, 175, 63, 247, 21, 187, 108, 85, 140, 203, 204, 51, 149, 222, 92, 16, 178, 159, 112, 153, 171, 203, 85, 145, 153, 226, 218, 81, 209, 161, 181, 46, 244, 92, 31, 155, 169, 140, 36, 202, 148, 74, 246, 217, 176, 141, 116, 137, 39, 118, 81, 226, 118, 200, 103, 25, 189, 99, 176, 80, 149, 106, 123, 217, 27, 64, 125, 212, 172, 126, 100, 214, 167, 111, 233, 118, 143, 173, 73, 79, 90, 114, 114, 74, 192, 253, 193, 151, 113, 20, 196, 91, 179, 246, 203, 198, 64, 161, 112, 15, 115, 139, 136, 86, 239, 239, 206, 132, 72, 94}, +{45, 63, 45, 215, 71, 109, 162, 167, 232, 193, 33, 171, 195, 228, 104, 137, 130, 115, 183, 84, 78, 39, 212, 219, 223, 232, 94, 16, 15, 84, 108, 78, 157, 191, 49, 221, 101, 235, 112, 4, 192, 110, 200, 58, 125, 243, 158, 124, 95, 42, 70, 50, 170, 227, 93, 228, 228, 86, 76, 31, 219, 17, 141, 175, 171, 56, 237, 215, 77, 36, 131, 245, 206, 200, 32, 31, 249, 186, 222, 87, 139, 29, 144, 201, 64, 245, 100, 107, 29, 116, 172, 229, 38, 233, 152, 163, 54, 83, 222, 45, 11, 73, 107, 95, 164, 238, 227, 6, 30, 170, 35, 31, 244, 135, 34, 162, 201, 52, 238, 63, 196, 111, 231, 40, 140, 245, 17, 11}, +{207, 24, 66, 123, 237, 100, 159, 164, 207, 68, 181, 176, 249, 19, 82, 202, 70, 72, 104, 131, 77, 144, 67, 218, 148, 16, 238, 9, 53, 163, 14, 250, 35, 160, 197, 76, 69, 251, 135, 65, 127, 105, 88, 92, 22, 164, 155, 84, 68, 155, 174, 99, 230, 185, 167, 175, 140, 158, 53, 210, 201, 211, 172, 209, 107, 229, 47, 232, 238, 168, 187, 157, 54, 172, 179, 246, 148, 61, 75, 129, 60, 220, 183, 220, 193, 210, 30, 210, 253, 175, 71, 17, 224, 101, 161, 176, 255, 233, 163, 67, 35, 90, 242, 189, 63, 35, 224, 85, 222, 249, 176, 178, 141, 32, 85, 245, 112, 24, 88, 103, 196, 117, 205, 252, 46, 120, 144, 32}, +{11, 223, 249, 143, 206, 171, 153, 124, 99, 102, 244, 86, 218, 27, 28, 102, 33, 13, 121, 64, 253, 112, 249, 0, 56, 22, 17, 83, 83, 230, 131, 90, 135, 120, 225, 43, 185, 16, 123, 209, 139, 222, 172, 59, 218, 31, 87, 226, 201, 22, 9, 253, 184, 106, 208, 73, 7, 145, 138, 227, 136, 94, 220, 153, 249, 225, 53, 141, 166, 102, 227, 219, 172, 51, 240, 34, 60, 168, 11, 173, 14, 145, 60, 16, 39, 114, 74, 29, 189, 34, 177, 226, 31, 3, 141, 157, 144, 211, 108, 97, 51, 0, 25, 60, 149, 47, 11, 26, 129, 199, 53, 250, 61, 229, 42, 206, 196, 237, 225, 189, 220, 182, 64, 231, 143, 216, 159, 222}, +{207, 124, 254, 158, 40, 61, 110, 54, 89, 48, 52, 166, 41, 216, 25, 101, 82, 222, 10, 194, 138, 228, 100, 75, 10, 116, 71, 70, 29, 41, 200, 181, 178, 187, 246, 110, 107, 53, 235, 180, 80, 5, 187, 181, 183, 100, 96, 83, 95, 150, 233, 189, 254, 197, 187, 148, 243, 182, 201, 52, 31, 30, 131, 107, 182, 64, 97, 117, 163, 162, 104, 238, 224, 56, 205, 192, 7, 95, 114, 212, 187, 5, 38, 245, 84, 252, 196, 103, 54, 186, 226, 140, 131, 122, 253, 162, 153, 182, 78, 175, 178, 94, 244, 48, 60, 164, 146, 65, 119, 235, 254, 211, 8, 203, 64, 156, 252, 226, 53, 213, 12, 178, 80, 212, 44, 167, 252, 72}, +{115, 131, 60, 124, 194, 149, 204, 55, 211, 251, 123, 117, 204, 15, 192, 124, 234, 62, 221, 221, 97, 180, 40, 130, 72, 191, 17, 219, 82, 74, 131, 251, 88, 225, 138, 205, 98, 55, 58, 249, 30, 158, 55, 146, 234, 102, 168, 9, 55, 167, 201, 35, 38, 156, 147, 14, 34, 242, 190, 68, 199, 159, 107, 135, 119, 222, 173, 119, 115, 138, 167, 33, 87, 155, 212, 236, 6, 209, 156, 245, 136, 46, 141, 87, 146, 243, 184, 9, 171, 193, 51, 123, 37, 181, 138, 108, 130, 159, 102, 22, 31, 185, 33, 1, 22, 141, 175, 51, 123, 137, 90, 201, 146, 153, 236, 105, 129, 95, 94, 78, 156, 153, 223, 160, 170, 158, 73, 147}, +{130, 144, 243, 172, 190, 14, 135, 64, 196, 224, 183, 234, 125, 47, 188, 146, 242, 19, 41, 141, 149, 70, 77, 50, 123, 120, 204, 205, 221, 146, 141, 174, 143, 42, 21, 217, 96, 86, 193, 17, 60, 69, 75, 178, 94, 180, 149, 151, 154, 248, 21, 56, 59, 17, 248, 215, 48, 73, 108, 66, 62, 44, 18, 100, 248, 67, 137, 216, 66, 50, 79, 17, 9, 154, 173, 44, 229, 60, 44, 225, 247, 73, 248, 51, 31, 239, 67, 125, 228, 99, 86, 32, 149, 43, 143, 43, 104, 207, 63, 200, 168, 62, 193, 2, 142, 52, 38, 88, 196, 72, 191, 188, 15, 185, 159, 131, 193, 77, 207, 133, 213, 83, 221, 190, 18, 44, 98, 140}, +{67, 151, 114, 29, 27, 124, 253, 46, 6, 63, 59, 204, 111, 116, 203, 57, 1, 40, 60, 205, 252, 247, 95, 161, 45, 137, 78, 237, 178, 182, 175, 105, 171, 249, 112, 106, 43, 219, 178, 225, 31, 219, 254, 22, 85, 32, 187, 62, 148, 205, 116, 128, 188, 142, 18, 132, 135, 106, 165, 32, 31, 40, 231, 184, 2, 42, 235, 23, 238, 133, 114, 167, 195, 238, 207, 238, 163, 177, 232, 234, 45, 250, 194, 169, 45, 123, 94, 100, 123, 228, 155, 79, 38, 138, 174, 58, 39, 148, 146, 117, 131, 177, 62, 215, 97, 184, 251, 162, 181, 12, 24, 150, 158, 144, 93, 127, 222, 185, 119, 38, 65, 63, 113, 195, 217, 76, 1, 82}, +{196, 98, 44, 245, 200, 165, 233, 121, 152, 24, 237, 228, 42, 209, 129, 35, 123, 196, 192, 119, 8, 29, 110, 63, 16, 199, 234, 123, 235, 128, 166, 239, 40, 95, 179, 190, 14, 14, 219, 14, 239, 146, 225, 47, 69, 73, 171, 182, 175, 174, 250, 47, 105, 23, 136, 102, 36, 234, 39, 218, 5, 141, 171, 174, 90, 37, 243, 60, 240, 241, 27, 5, 164, 167, 86, 148, 224, 232, 165, 83, 159, 212, 250, 162, 19, 58, 11, 9, 180, 137, 58, 233, 224, 18, 32, 198, 155, 235, 190, 47, 206, 178, 142, 119, 29, 13, 17, 239, 90, 160, 16, 228, 168, 117, 71, 142, 67, 88, 234, 214, 186, 101, 255, 171, 3, 17, 68, 81}, +{153, 106, 32, 158, 21, 188, 109, 239, 16, 229, 123, 234, 183, 79, 2, 214, 205, 13, 254, 204, 44, 121, 58, 5, 126, 151, 164, 43, 64, 146, 130, 218, 4, 141, 115, 209, 241, 40, 62, 130, 190, 19, 201, 226, 85, 217, 109, 134, 151, 129, 2, 196, 146, 1, 40, 194, 161, 95, 148, 44, 53, 197, 51, 55, 74, 95, 172, 200, 118, 109, 232, 204, 26, 94, 133, 86, 178, 89, 3, 171, 161, 129, 124, 107, 74, 161, 128, 41, 82, 234, 234, 1, 46, 133, 103, 222, 18, 127, 191, 162, 182, 192, 145, 170, 252, 161, 71, 19, 111, 202, 170, 115, 210, 72, 111, 169, 13, 33, 171, 41, 168, 175, 106, 20, 192, 68, 108, 0}, +{69, 112, 251, 162, 61, 46, 190, 15, 153, 116, 188, 57, 9, 172, 7, 139, 162, 95, 88, 218, 142, 31, 108, 41, 72, 31, 66, 151, 228, 57, 164, 142, 175, 96, 59, 79, 173, 182, 134, 215, 253, 20, 169, 24, 75, 26, 180, 178, 191, 27, 94, 209, 61, 148, 20, 142, 145, 214, 86, 3, 134, 185, 60, 170, 97, 132, 224, 54, 136, 98, 147, 11, 52, 187, 16, 246, 236, 143, 34, 222, 239, 68, 174, 158, 228, 150, 224, 94, 44, 70, 121, 49, 87, 122, 220, 33, 46, 105, 102, 160, 72, 114, 190, 99, 92, 47, 95, 160, 61, 140, 238, 135, 40, 74, 157, 83, 143, 189, 32, 151, 96, 221, 100, 2, 88, 125, 124, 7}, +{9, 34, 227, 207, 42, 71, 14, 209, 84, 213, 143, 243, 32, 150, 214, 222, 171, 229, 152, 220, 232, 105, 3, 79, 149, 129, 168, 209, 49, 86, 15, 210, 80, 14, 240, 97, 24, 207, 189, 19, 152, 42, 229, 43, 202, 53, 104, 97, 182, 236, 54, 246, 2, 221, 193, 213, 212, 141, 191, 28, 34, 52, 247, 177, 68, 49, 87, 70, 133, 19, 196, 236, 152, 50, 68, 77, 199, 39, 25, 220, 93, 210, 197, 93, 36, 80, 142, 69, 51, 125, 220, 187, 105, 46, 168, 99, 140, 131, 69, 69, 235, 253, 186, 210, 64, 213, 210, 42, 59, 17, 215, 42, 112, 108, 18, 163, 109, 77, 43, 70, 213, 118, 98, 102, 90, 21, 13, 236}, +{34, 61, 127, 93, 77, 170, 118, 47, 194, 223, 10, 114, 224, 231, 54, 116, 151, 68, 117, 69, 42, 219, 176, 252, 76, 30, 18, 202, 73, 95, 84, 253, 71, 76, 154, 25, 61, 14, 135, 194, 223, 172, 173, 200, 87, 78, 140, 52, 154, 79, 159, 215, 208, 236, 201, 75, 191, 18, 0, 192, 254, 66, 235, 96, 238, 203, 53, 42, 62, 207, 207, 34, 10, 11, 164, 96, 72, 100, 70, 121, 123, 93, 152, 137, 178, 15, 193, 119, 35, 20, 208, 192, 101, 13, 179, 32, 91, 7, 88, 221, 87, 159, 175, 121, 159, 63, 188, 18, 217, 174, 104, 45, 181, 199, 73, 41, 130, 254, 20, 109, 95, 234, 235, 163, 253, 54, 100, 29}, +{105, 54, 90, 246, 180, 195, 164, 23, 111, 73, 218, 106, 96, 21, 130, 215, 146, 159, 13, 79, 169, 210, 169, 189, 239, 29, 227, 128, 110, 240, 25, 13, 251, 156, 217, 197, 150, 139, 52, 99, 181, 4, 185, 14, 163, 242, 198, 76, 61, 226, 117, 53, 162, 194, 3, 167, 219, 129, 191, 22, 155, 205, 76, 19, 93, 243, 72, 42, 213, 225, 156, 72, 180, 246, 209, 199, 78, 14, 9, 111, 243, 40, 175, 45, 252, 227, 6, 190, 68, 40, 85, 175, 184, 152, 21, 187, 237, 81, 60, 26, 233, 161, 236, 132, 161, 10, 214, 250, 109, 230, 237, 157, 57, 25, 21, 45, 35, 132, 160, 216, 107, 248, 153, 121, 168, 243, 206, 255}, +{38, 22, 127, 55, 222, 40, 14, 238, 47, 156, 77, 68, 171, 167, 50, 156, 27, 131, 249, 38, 140, 108, 107, 160, 6, 97, 28, 149, 184, 209, 226, 188, 245, 171, 95, 225, 130, 61, 190, 111, 225, 246, 118, 43, 193, 6, 127, 182, 201, 147, 49, 21, 24, 214, 225, 205, 48, 225, 106, 113, 40, 245, 192, 42, 205, 39, 122, 123, 248, 18, 63, 118, 233, 108, 29, 212, 173, 29, 83, 166, 127, 172, 255, 171, 182, 108, 15, 152, 17, 40, 162, 165, 74, 34, 147, 189, 245, 117, 98, 21, 7, 91, 235, 112, 182, 135, 163, 128, 27, 247, 250, 198, 142, 103, 50, 21, 28, 231, 3, 122, 117, 101, 127, 254, 130, 241, 68, 54}, +{31, 3, 23, 199, 214, 128, 72, 235, 99, 164, 253, 40, 71, 255, 157, 132, 255, 13, 126, 184, 79, 24, 134, 226, 136, 85, 210, 250, 194, 180, 90, 200, 10, 152, 250, 171, 222, 187, 25, 57, 137, 216, 95, 100, 120, 70, 46, 244, 104, 76, 18, 6, 74, 251, 214, 109, 216, 115, 21, 162, 52, 157, 153, 152, 222, 58, 123, 29, 212, 253, 92, 253, 229, 30, 153, 96, 15, 219, 152, 132, 9, 183, 155, 43, 75, 78, 70, 129, 150, 182, 34, 29, 124, 149, 156, 57, 115, 37, 193, 74, 93, 212, 202, 171, 58, 96, 79, 74, 5, 95, 211, 68, 220, 148, 55, 15, 156, 73, 123, 137, 67, 221, 117, 167, 55, 169, 158, 29}, +{202, 103, 72, 182, 0, 149, 32, 70, 26, 172, 230, 123, 7, 18, 177, 179, 49, 35, 251, 6, 233, 116, 210, 237, 137, 225, 251, 144, 192, 176, 155, 40, 111, 140, 192, 71, 155, 179, 126, 77, 215, 45, 83, 216, 157, 91, 101, 137, 196, 207, 106, 19, 16, 91, 167, 213, 60, 225, 149, 78, 162, 64, 192, 111, 93, 212, 236, 98, 155, 14, 128, 95, 110, 45, 49, 129, 149, 124, 169, 60, 32, 185, 4, 200, 1, 230, 185, 130, 137, 114, 72, 56, 209, 40, 213, 75, 104, 1, 214, 149, 105, 128, 83, 233, 239, 113, 252, 215, 29, 59, 11, 98, 243, 203, 0, 5, 106, 213, 98, 250, 238, 40, 119, 235, 79, 214, 36, 204}, +{188, 53, 181, 44, 105, 27, 13, 194, 210, 205, 155, 74, 54, 197, 209, 145, 139, 113, 156, 48, 122, 72, 21, 24, 104, 128, 204, 16, 10, 31, 242, 106, 22, 199, 142, 169, 86, 67, 173, 196, 180, 142, 47, 33, 168, 199, 211, 108, 215, 184, 73, 113, 227, 108, 33, 31, 255, 251, 80, 22, 208, 67, 86, 23, 17, 218, 233, 194, 62, 252, 236, 135, 201, 228, 12, 91, 152, 211, 40, 154, 94, 25, 78, 12, 19, 9, 10, 174, 101, 160, 252, 13, 254, 126, 183, 219, 195, 88, 167, 143, 67, 238, 251, 45, 230, 72, 107, 77, 137, 212, 249, 118, 113, 17, 126, 204, 182, 27, 219, 5, 228, 9, 84, 241, 99, 61, 135, 105}, +{100, 249, 122, 121, 13, 85, 201, 138, 50, 27, 66, 223, 27, 122, 57, 27, 75, 236, 131, 28, 76, 30, 189, 253, 33, 86, 141, 96, 120, 136, 126, 4, 111, 47, 110, 201, 157, 102, 4, 133, 216, 25, 166, 54, 212, 159, 223, 71, 172, 77, 42, 79, 157, 243, 253, 247, 215, 29, 102, 41, 221, 125, 156, 35, 15, 178, 178, 128, 170, 17, 13, 7, 161, 179, 141, 10, 73, 151, 251, 123, 37, 197, 241, 215, 29, 145, 22, 186, 88, 81, 94, 164, 28, 77, 199, 173, 94, 208, 111, 97, 135, 250, 108, 66, 220, 171, 156, 42, 80, 194, 252, 235, 224, 12, 23, 50, 150, 215, 224, 53, 151, 82, 242, 41, 35, 210, 17, 105}, +{198, 90, 84, 159, 153, 168, 125, 85, 10, 73, 35, 101, 210, 208, 193, 246, 249, 66, 69, 220, 82, 71, 100, 249, 39, 223, 109, 171, 117, 172, 100, 103, 132, 98, 235, 206, 199, 199, 77, 127, 65, 235, 205, 200, 96, 163, 186, 151, 3, 52, 62, 247, 51, 26, 0, 195, 183, 20, 188, 119, 52, 254, 171, 26, 27, 154, 209, 211, 5, 223, 243, 252, 73, 192, 100, 99, 214, 159, 178, 213, 60, 203, 255, 198, 216, 10, 111, 89, 49, 136, 204, 152, 55, 155, 47, 144, 84, 223, 162, 209, 81, 96, 255, 138, 211, 110, 55, 145, 16, 244, 163, 217, 75, 11, 189, 107, 27, 80, 87, 98, 5, 43, 184, 49, 241, 139, 104, 187}, +{173, 248, 165, 73, 62, 141, 99, 92, 236, 75, 133, 126, 57, 252, 50, 117, 204, 238, 142, 121, 218, 41, 248, 234, 119, 35, 56, 163, 221, 30, 211, 97, 26, 149, 96, 226, 84, 34, 98, 82, 118, 189, 224, 227, 69, 64, 30, 250, 212, 202, 164, 184, 88, 183, 208, 14, 148, 172, 152, 45, 216, 239, 35, 26, 103, 255, 158, 219, 105, 111, 173, 76, 105, 174, 144, 64, 63, 1, 145, 185, 215, 46, 88, 41, 193, 171, 185, 21, 38, 128, 83, 24, 125, 9, 32, 225, 210, 206, 239, 56, 195, 162, 144, 89, 26, 249, 127, 117, 172, 110, 168, 207, 178, 221, 47, 123, 78, 76, 253, 239, 53, 39, 99, 163, 78, 33, 14, 231}, +{183, 17, 27, 105, 49, 47, 125, 25, 83, 186, 164, 133, 119, 243, 137, 251, 211, 192, 200, 202, 214, 94, 144, 191, 220, 212, 122, 156, 196, 127, 223, 112, 152, 227, 228, 227, 58, 11, 133, 77, 18, 187, 68, 220, 158, 138, 157, 15, 253, 150, 162, 108, 202, 161, 218, 250, 138, 39, 243, 238, 119, 154, 93, 210, 168, 226, 189, 147, 9, 248, 96, 101, 86, 23, 90, 11, 154, 16, 237, 20, 115, 34, 28, 52, 224, 10, 195, 115, 187, 174, 118, 169, 52, 0, 188, 176, 206, 196, 97, 239, 136, 231, 228, 82, 41, 188, 70, 109, 254, 72, 137, 204, 39, 70, 230, 253, 185, 101, 158, 221, 26, 208, 52, 188, 232, 64, 149, 232}, +{25, 151, 135, 99, 204, 246, 39, 109, 215, 112, 212, 107, 248, 212, 31, 94, 89, 164, 147, 204, 16, 47, 255, 40, 138, 34, 81, 228, 149, 118, 124, 161, 18, 170, 94, 168, 40, 74, 36, 24, 253, 158, 49, 199, 168, 157, 14, 8, 234, 96, 166, 70, 37, 85, 58, 42, 87, 39, 72, 101, 196, 43, 36, 82, 173, 43, 22, 150, 123, 50, 60, 95, 40, 30, 202, 242, 32, 65, 36, 85, 101, 115, 76, 101, 75, 24, 150, 15, 153, 156, 111, 64, 44, 170, 196, 205, 231, 53, 205, 235, 74, 236, 193, 44, 117, 26, 208, 99, 56, 103, 36, 141, 206, 168, 236, 114, 27, 179, 8, 244, 244, 205, 56, 153, 230, 156, 31, 147}, +{134, 5, 37, 235, 171, 238, 48, 70, 115, 28, 143, 168, 144, 39, 83, 51, 17, 68, 246, 77, 176, 5, 25, 45, 136, 170, 19, 225, 251, 126, 52, 27, 237, 129, 112, 227, 184, 254, 241, 91, 17, 117, 44, 123, 219, 150, 62, 20, 67, 73, 246, 200, 233, 156, 252, 81, 161, 118, 187, 95, 10, 222, 15, 32, 188, 219, 251, 59, 182, 245, 118, 4, 243, 239, 134, 164, 70, 46, 7, 124, 109, 88, 25, 186, 193, 158, 96, 99, 182, 71, 54, 60, 46, 143, 21, 38, 34, 195, 181, 23, 10, 19, 17, 17, 89, 84, 56, 109, 213, 30, 140, 46, 42, 90, 14, 223, 159, 96, 33, 73, 77, 35, 10, 39, 38, 66, 160, 255}, +{128, 99, 1, 122, 211, 90, 79, 174, 3, 87, 15, 8, 109, 115, 170, 141, 230, 22, 53, 59, 47, 228, 73, 87, 96, 231, 72, 67, 121, 132, 213, 125, 92, 47, 167, 154, 55, 6, 197, 147, 104, 119, 72, 13, 134, 29, 115, 119, 12, 187, 147, 65, 12, 82, 197, 234, 68, 84, 151, 128, 205, 89, 104, 151, 96, 10, 216, 206, 223, 20, 248, 228, 22, 61, 107, 169, 149, 92, 184, 120, 194, 53, 87, 206, 200, 32, 25, 42, 8, 151, 40, 241, 104, 204, 123, 96, 46, 64, 75, 146, 92, 25, 143, 15, 140, 158, 239, 9, 165, 58, 100, 102, 82, 164, 65, 2, 217, 90, 227, 241, 113, 220, 59, 18, 218, 91, 132, 244}, +{61, 72, 164, 76, 102, 207, 35, 158, 22, 79, 121, 248, 101, 8, 54, 109, 255, 188, 33, 168, 83, 64, 251, 245, 59, 219, 251, 239, 113, 41, 164, 181, 120, 30, 239, 95, 7, 237, 214, 216, 167, 121, 133, 138, 146, 103, 89, 139, 254, 48, 153, 156, 149, 178, 168, 162, 146, 116, 248, 222, 119, 29, 214, 251, 159, 168, 84, 211, 19, 198, 195, 147, 120, 216, 10, 15, 140, 117, 203, 84, 187, 241, 117, 107, 151, 199, 157, 221, 53, 186, 243, 209, 183, 163, 156, 30, 167, 7, 221, 255, 248, 142, 254, 12, 183, 130, 52, 37, 238, 73, 235, 56, 162, 41, 17, 63, 184, 57, 209, 191, 43, 210, 212, 147, 100, 204, 35, 8}, +{140, 228, 193, 241, 144, 215, 228, 128, 104, 40, 24, 94, 164, 93, 26, 84, 84, 151, 114, 179, 249, 86, 99, 69, 165, 55, 74, 0, 136, 110, 168, 76, 214, 215, 215, 65, 105, 183, 56, 240, 159, 135, 208, 152, 67, 233, 218, 190, 227, 113, 59, 14, 48, 192, 164, 234, 185, 221, 231, 137, 221, 70, 153, 36, 93, 11, 32, 124, 128, 87, 109, 11, 39, 27, 179, 176, 17, 103, 19, 15, 107, 131, 165, 158, 185, 44, 79, 112, 121, 192, 181, 232, 134, 120, 56, 170, 122, 119, 215, 159, 220, 161, 240, 238, 66, 57, 95, 61, 183, 57, 175, 75, 251, 4, 90, 113, 243, 50, 143, 7, 82, 116, 192, 30, 83, 241, 13, 96}, +{182, 116, 52, 62, 209, 105, 246, 59, 143, 43, 2, 64, 193, 115, 118, 29, 88, 131, 136, 45, 129, 36, 216, 21, 227, 143, 213, 62, 161, 201, 202, 48, 157, 216, 83, 52, 139, 17, 36, 177, 215, 222, 146, 198, 200, 57, 64, 6, 123, 232, 139, 50, 213, 228, 73, 34, 248, 110, 145, 194, 242, 94, 71, 185, 216, 3, 5, 53, 131, 10, 45, 229, 135, 199, 145, 40, 209, 68, 32, 145, 161, 179, 50, 73, 46, 43, 217, 189, 203, 168, 249, 38, 181, 198, 81, 49, 42, 210, 35, 208, 85, 42, 82, 20, 246, 153, 162, 171, 95, 55, 167, 210, 87, 214, 164, 91, 15, 60, 64, 244, 201, 131, 162, 242, 223, 18, 87, 172}, +{22, 226, 17, 11, 145, 146, 179, 52, 210, 149, 60, 147, 96, 100, 193, 245, 1, 59, 239, 225, 9, 81, 181, 228, 135, 213, 129, 53, 104, 197, 92, 9, 204, 151, 157, 227, 239, 247, 37, 185, 58, 90, 228, 239, 184, 92, 205, 61, 199, 219, 227, 197, 130, 141, 138, 187, 9, 179, 144, 20, 142, 75, 26, 204, 92, 24, 87, 116, 147, 221, 227, 23, 249, 7, 127, 225, 205, 138, 192, 56, 79, 253, 253, 231, 44, 141, 181, 99, 206, 37, 82, 161, 168, 227, 55, 225, 182, 5, 31, 139, 86, 167, 132, 66, 19, 96, 27, 170, 212, 234, 8, 226, 11, 96, 58, 242, 35, 31, 90, 212, 149, 106, 29, 64, 105, 194, 83, 77}, +{123, 89, 88, 223, 230, 208, 101, 191, 77, 71, 50, 240, 31, 206, 166, 190, 238, 26, 56, 205, 118, 229, 154, 228, 255, 80, 232, 234, 199, 129, 117, 23, 212, 212, 99, 2, 116, 233, 51, 90, 121, 218, 114, 151, 179, 35, 136, 214, 150, 35, 246, 92, 93, 63, 199, 45, 93, 216, 195, 250, 68, 72, 235, 173, 226, 122, 17, 33, 49, 172, 215, 26, 83, 182, 184, 122, 127, 175, 198, 136, 248, 205, 54, 241, 220, 145, 237, 165, 93, 9, 219, 8, 24, 192, 157, 37, 33, 105, 17, 144, 4, 202, 55, 87, 42, 236, 103, 255, 158, 36, 149, 60, 49, 207, 133, 32, 102, 165, 202, 202, 100, 99, 52, 251, 43, 156, 80, 192}, +{118, 91, 49, 85, 47, 111, 139, 140, 9, 63, 187, 181, 150, 92, 156, 104, 116, 26, 28, 220, 177, 60, 244, 38, 192, 109, 72, 114, 99, 234, 132, 247, 58, 123, 55, 160, 94, 128, 175, 107, 126, 99, 153, 92, 43, 77, 40, 252, 123, 232, 169, 193, 120, 236, 9, 99, 123, 130, 83, 0, 87, 189, 25, 240, 147, 208, 72, 2, 197, 234, 0, 67, 72, 143, 231, 56, 250, 56, 224, 209, 74, 201, 5, 193, 219, 206, 253, 0, 42, 109, 220, 154, 250, 107, 16, 118, 208, 162, 251, 108, 128, 232, 147, 153, 94, 223, 113, 112, 48, 85, 90, 219, 162, 218, 233, 130, 233, 169, 205, 120, 4, 32, 58, 66, 115, 69, 3, 172}, +{174, 150, 23, 27, 65, 98, 77, 122, 195, 93, 222, 41, 109, 159, 207, 176, 216, 193, 137, 73, 221, 88, 147, 234, 203, 64, 29, 234, 112, 37, 101, 203, 232, 244, 46, 51, 240, 1, 117, 36, 67, 23, 3, 104, 235, 37, 120, 209, 244, 210, 193, 157, 193, 48, 16, 157, 181, 126, 187, 21, 16, 189, 61, 17, 211, 187, 122, 249, 235, 186, 15, 49, 43, 97, 188, 238, 68, 206, 83, 204, 201, 205, 239, 22, 30, 12, 154, 246, 6, 36, 5, 211, 2, 121, 51, 114, 164, 183, 132, 174, 208, 150, 119, 211, 143, 211, 25, 233, 45, 240, 202, 68, 22, 103, 150, 147, 209, 142, 33, 4, 36, 22, 225, 129, 167, 79, 70, 148}, +{81, 151, 244, 100, 32, 193, 200, 13, 43, 168, 186, 118, 61, 22, 254, 208, 207, 19, 170, 203, 234, 254, 91, 61, 245, 245, 202, 137, 189, 134, 126, 152, 185, 221, 3, 238, 183, 17, 117, 187, 93, 88, 3, 192, 109, 234, 164, 91, 125, 93, 55, 163, 93, 80, 97, 205, 216, 26, 48, 203, 81, 136, 104, 89, 91, 15, 171, 147, 196, 169, 55, 122, 243, 68, 215, 87, 135, 221, 248, 228, 36, 37, 233, 111, 199, 206, 60, 232, 17, 212, 19, 228, 167, 180, 193, 43, 249, 101, 65, 179, 17, 36, 27, 17, 122, 83, 94, 169, 75, 10, 165, 3, 48, 188, 206, 128, 231, 149, 111, 147, 190, 204, 31, 253, 10, 236, 26, 116}, +{54, 194, 147, 222, 237, 89, 37, 22, 131, 145, 198, 24, 63, 120, 224, 253, 84, 191, 48, 212, 118, 222, 198, 29, 240, 178, 27, 202, 188, 221, 68, 45, 247, 152, 181, 225, 206, 21, 170, 24, 139, 1, 50, 108, 184, 94, 203, 49, 133, 196, 125, 78, 212, 163, 97, 179, 124, 205, 17, 89, 65, 179, 145, 182, 120, 209, 115, 179, 60, 129, 146, 112, 201, 37, 110, 89, 27, 193, 17, 121, 62, 252, 3, 32, 98, 174, 218, 37, 231, 34, 98, 46, 201, 125, 44, 17, 29, 43, 66, 183, 218, 213, 168, 26, 220, 131, 141, 168, 200, 166, 164, 104, 184, 191, 22, 234, 95, 166, 171, 49, 13, 149, 121, 216, 99, 123, 16, 138}, +{55, 115, 125, 140, 24, 66, 208, 166, 185, 70, 137, 10, 156, 118, 32, 253, 63, 83, 25, 200, 33, 108, 247, 54, 208, 186, 22, 18, 215, 146, 37, 82, 54, 133, 177, 78, 245, 83, 156, 114, 238, 30, 104, 222, 27, 164, 29, 191, 218, 237, 15, 232, 16, 212, 81, 165, 247, 170, 167, 222, 168, 226, 159, 73, 17, 180, 178, 0, 248, 239, 206, 179, 142, 39, 141, 193, 30, 136, 38, 60, 230, 62, 200, 87, 203, 192, 222, 172, 182, 49, 115, 133, 92, 218, 189, 144, 200, 145, 239, 157, 113, 206, 89, 96, 152, 62, 90, 127, 200, 157, 3, 79, 180, 140, 19, 151, 156, 160, 99, 206, 194, 142, 205, 46, 31, 85, 12, 179}, +{13, 80, 114, 62, 238, 26, 100, 65, 251, 53, 164, 253, 244, 31, 113, 79, 229, 74, 193, 120, 249, 87, 205, 45, 108, 138, 211, 89, 116, 205, 191, 249, 150, 150, 212, 63, 120, 82, 123, 18, 211, 19, 70, 7, 186, 234, 55, 28, 196, 209, 94, 220, 7, 137, 161, 119, 102, 217, 206, 253, 10, 30, 170, 21, 5, 154, 250, 20, 245, 177, 73, 113, 241, 180, 17, 213, 5, 237, 152, 31, 104, 98, 125, 243, 187, 15, 41, 135, 205, 75, 87, 89, 57, 131, 152, 248, 30, 238, 213, 188, 132, 155, 206, 62, 221, 140, 190, 184, 59, 66, 100, 158, 109, 171, 141, 89, 99, 118, 152, 160, 3, 43, 43, 22, 7, 224, 173, 164}, +{123, 51, 64, 11, 130, 19, 128, 174, 168, 105, 86, 67, 33, 92, 14, 164, 24, 138, 42, 49, 24, 251, 142, 104, 137, 76, 15, 213, 123, 209, 216, 67, 180, 56, 242, 108, 154, 53, 179, 48, 144, 178, 113, 31, 146, 194, 99, 63, 90, 157, 147, 88, 7, 124, 245, 199, 232, 255, 12, 145, 5, 13, 205, 158, 76, 184, 21, 177, 51, 181, 74, 65, 181, 129, 25, 173, 19, 240, 147, 125, 112, 74, 39, 165, 131, 196, 159, 49, 136, 235, 237, 203, 107, 226, 20, 156, 131, 55, 3, 91, 19, 72, 194, 219, 247, 87, 128, 138, 224, 230, 241, 153, 30, 114, 246, 160, 7, 231, 164, 100, 25, 51, 11, 34, 36, 220, 4, 49}, +{180, 101, 19, 17, 243, 30, 89, 181, 128, 211, 208, 73, 200, 84, 41, 21, 67, 211, 28, 176, 92, 129, 229, 67, 94, 228, 128, 75, 188, 13, 22, 5, 98, 201, 253, 131, 250, 187, 95, 21, 42, 26, 10, 240, 103, 222, 7, 132, 127, 44, 174, 204, 105, 10, 149, 154, 106, 60, 227, 102, 231, 56, 158, 195, 12, 143, 184, 11, 254, 117, 68, 161, 77, 66, 40, 203, 246, 21, 231, 13, 194, 115, 231, 22, 186, 122, 148, 8, 35, 239, 75, 31, 252, 95, 233, 5, 99, 158, 38, 106, 228, 90, 35, 7, 150, 111, 95, 221, 95, 168, 31, 103, 114, 166, 73, 6, 102, 156, 184, 238, 126, 74, 198, 51, 247, 158, 44, 139}, +{91, 95, 166, 128, 34, 81, 38, 27, 53, 210, 214, 51, 5, 245, 82, 170, 172, 101, 9, 182, 145, 54, 184, 51, 45, 132, 104, 120, 252, 223, 80, 151, 27, 111, 2, 178, 7, 116, 3, 67, 182, 101, 132, 136, 60, 233, 215, 87, 223, 159, 55, 149, 40, 62, 235, 198, 35, 44, 180, 83, 11, 30, 44, 81, 115, 126, 30, 179, 188, 100, 80, 94, 112, 12, 183, 178, 49, 3, 97, 159, 136, 100, 156, 195, 54, 195, 173, 220, 132, 209, 198, 104, 68, 220, 176, 161, 174, 118, 238, 203, 244, 39, 84, 88, 219, 187, 108, 79, 56, 15, 120, 117, 163, 215, 125, 199, 2, 105, 251, 235, 74, 168, 202, 28, 45, 173, 40, 46}, +{178, 243, 155, 81, 81, 164, 206, 129, 31, 233, 211, 136, 165, 175, 111, 228, 201, 71, 95, 153, 12, 183, 115, 0, 81, 73, 218, 184, 99, 126, 169, 252, 168, 250, 248, 144, 173, 94, 59, 147, 93, 212, 89, 207, 169, 53, 214, 145, 42, 178, 253, 192, 51, 136, 182, 3, 93, 206, 232, 207, 83, 44, 3, 36, 171, 163, 192, 140, 82, 33, 89, 207, 143, 225, 228, 187, 67, 79, 223, 194, 189, 5, 46, 89, 205, 239, 185, 187, 66, 93, 130, 210, 231, 8, 217, 212, 240, 107, 140, 237, 63, 66, 127, 69, 175, 102, 89, 36, 252, 79, 28, 250, 197, 249, 163, 235, 253, 72, 250, 133, 210, 172, 245, 242, 252, 12, 140, 78}, +{106, 137, 68, 14, 74, 9, 13, 172, 243, 160, 231, 41, 64, 221, 8, 92, 216, 52, 213, 129, 230, 51, 53, 205, 136, 63, 154, 233, 131, 14, 169, 224, 203, 251, 27, 107, 206, 197, 177, 203, 166, 99, 66, 105, 146, 78, 118, 199, 229, 159, 214, 175, 60, 124, 123, 104, 210, 177, 119, 107, 220, 240, 159, 154, 29, 105, 247, 46, 185, 183, 19, 129, 227, 143, 73, 114, 38, 159, 118, 138, 211, 186, 121, 67, 131, 99, 251, 41, 218, 227, 19, 204, 178, 144, 221, 150, 80, 53, 30, 194, 190, 247, 144, 23, 240, 81, 227, 165, 141, 117, 223, 69, 166, 15, 67, 244, 194, 143, 26, 152, 211, 43, 9, 47, 98, 157, 217, 212}, +{54, 53, 205, 16, 201, 84, 231, 53, 248, 19, 74, 173, 122, 232, 77, 30, 160, 30, 14, 48, 10, 177, 131, 41, 191, 21, 61, 173, 254, 131, 159, 168, 177, 198, 153, 81, 58, 203, 177, 246, 207, 12, 75, 182, 195, 7, 137, 33, 75, 236, 198, 129, 43, 68, 113, 29, 70, 160, 144, 153, 103, 100, 45, 157, 3, 165, 58, 84, 123, 88, 190, 19, 3, 51, 165, 97, 121, 32, 42, 240, 15, 234, 172, 88, 31, 93, 240, 131, 171, 40, 104, 212, 187, 129, 46, 225, 231, 58, 78, 86, 142, 217, 105, 248, 29, 80, 219, 177, 64, 140, 232, 222, 205, 8, 191, 26, 158, 164, 229, 107, 217, 144, 112, 104, 173, 11, 205, 217}, +{24, 151, 166, 156, 176, 243, 136, 191, 243, 45, 232, 47, 140, 33, 140, 58, 225, 136, 120, 156, 31, 42, 75, 160, 78, 143, 180, 118, 37, 164, 185, 126, 221, 54, 169, 183, 52, 240, 64, 136, 158, 121, 69, 101, 72, 176, 50, 156, 163, 128, 169, 153, 77, 159, 111, 43, 115, 212, 155, 151, 50, 43, 46, 0, 93, 132, 198, 210, 224, 57, 93, 116, 0, 10, 87, 166, 55, 110, 250, 254, 244, 99, 26, 146, 14, 13, 104, 79, 81, 86, 175, 174, 231, 14, 72, 141, 74, 16, 222, 245, 118, 224, 223, 124, 150, 99, 172, 111, 223, 188, 247, 165, 255, 41, 77, 246, 18, 110, 131, 49, 129, 157, 73, 130, 132, 7, 201, 22}, +{15, 143, 168, 187, 135, 210, 141, 237, 123, 79, 30, 203, 11, 221, 96, 154, 156, 254, 122, 36, 21, 36, 4, 80, 11, 189, 139, 62, 23, 10, 17, 79, 184, 214, 67, 179, 26, 124, 143, 186, 110, 100, 161, 196, 103, 191, 176, 175, 175, 169, 188, 250, 169, 20, 149, 170, 149, 168, 198, 103, 187, 216, 81, 201, 93, 75, 204, 209, 88, 92, 197, 55, 183, 241, 124, 82, 118, 83, 223, 54, 233, 236, 1, 2, 188, 25, 159, 187, 225, 7, 96, 137, 142, 196, 156, 93, 151, 206, 67, 49, 17, 165, 19, 183, 236, 63, 230, 208, 122, 172, 53, 168, 173, 174, 11, 195, 232, 201, 13, 122, 245, 124, 144, 6, 230, 137, 225, 36}, +{167, 130, 94, 132, 87, 126, 151, 182, 99, 185, 195, 177, 77, 177, 0, 12, 18, 152, 219, 176, 10, 27, 181, 25, 184, 196, 245, 209, 124, 139, 104, 234, 228, 193, 55, 70, 50, 239, 183, 70, 98, 221, 236, 87, 177, 229, 90, 185, 116, 205, 45, 78, 113, 127, 162, 16, 159, 5, 59, 34, 71, 227, 14, 30, 111, 141, 63, 197, 196, 2, 126, 227, 246, 94, 248, 83, 97, 16, 190, 10, 40, 97, 213, 37, 138, 132, 252, 220, 185, 155, 28, 197, 32, 78, 172, 43, 159, 205, 49, 130, 83, 204, 207, 109, 161, 2, 214, 247, 172, 192, 160, 53, 165, 255, 48, 36, 185, 59, 175, 212, 20, 11, 145, 162, 190, 28, 158, 247}, +{154, 70, 79, 180, 58, 108, 58, 184, 49, 87, 101, 231, 163, 105, 170, 46, 53, 244, 245, 32, 54, 233, 154, 139, 235, 213, 225, 239, 41, 64, 116, 85, 36, 224, 167, 210, 250, 8, 114, 6, 25, 110, 72, 133, 32, 39, 148, 203, 174, 184, 130, 186, 90, 94, 100, 111, 99, 211, 118, 215, 99, 200, 85, 7, 212, 108, 163, 82, 215, 231, 188, 101, 133, 72, 175, 74, 44, 25, 219, 202, 83, 100, 151, 163, 94, 19, 7, 100, 126, 132, 176, 104, 232, 169, 15, 227, 17, 205, 29, 207, 253, 38, 78, 75, 206, 171, 218, 3, 19, 76, 227, 188, 252, 171, 218, 243, 115, 121, 53, 199, 41, 52, 5, 168, 133, 205, 187, 189}, +{196, 167, 14, 231, 72, 100, 51, 55, 193, 98, 105, 135, 42, 136, 183, 41, 156, 27, 206, 168, 131, 240, 242, 214, 183, 128, 114, 145, 218, 157, 76, 27, 248, 45, 110, 240, 146, 185, 117, 50, 90, 83, 65, 122, 20, 213, 124, 17, 45, 250, 198, 155, 248, 81, 84, 5, 94, 93, 39, 205, 87, 93, 251, 66, 182, 92, 40, 158, 99, 36, 45, 77, 65, 55, 178, 170, 176, 170, 253, 167, 6, 75, 28, 148, 171, 242, 181, 186, 97, 138, 22, 125, 93, 98, 172, 159, 107, 0, 49, 19, 54, 252, 211, 59, 180, 140, 243, 112, 213, 9, 203, 203, 65, 151, 116, 105, 87, 175, 12, 7, 105, 66, 50, 26, 61, 144, 229, 122}, +{201, 202, 153, 199, 250, 122, 205, 136, 61, 63, 76, 101, 7, 236, 84, 82, 49, 156, 31, 119, 211, 39, 228, 198, 135, 93, 171, 135, 35, 89, 176, 157, 87, 118, 5, 102, 65, 220, 200, 163, 170, 141, 10, 166, 126, 201, 254, 150, 147, 188, 132, 49, 101, 56, 165, 54, 59, 33, 219, 12, 151, 196, 79, 183, 28, 178, 5, 60, 247, 168, 120, 166, 143, 98, 65, 138, 32, 229, 131, 19, 28, 170, 150, 34, 236, 254, 177, 5, 182, 219, 106, 15, 114, 110, 227, 89, 32, 158, 140, 147, 83, 211, 229, 200, 217, 160, 0, 43, 152, 63, 188, 212, 196, 79, 227, 42, 178, 53, 16, 25, 5, 121, 126, 11, 23, 131, 57, 109}, +{1, 67, 3, 245, 199, 137, 33, 43, 36, 4, 237, 183, 80, 43, 57, 186, 122, 93, 82, 130, 17, 151, 110, 240, 252, 107, 33, 100, 200, 112, 150, 253, 185, 13, 207, 244, 235, 11, 170, 239, 36, 135, 173, 70, 194, 197, 236, 146, 245, 232, 21, 239, 90, 179, 67, 121, 17, 132, 56, 120, 19, 100, 191, 105, 40, 8, 13, 77, 95, 122, 222, 57, 173, 157, 184, 77, 9, 96, 81, 64, 71, 199, 30, 132, 15, 207, 198, 238, 16, 172, 95, 139, 181, 113, 38, 58, 111, 152, 251, 47, 125, 14, 24, 231, 141, 249, 47, 10, 26, 47, 252, 147, 82, 251, 109, 215, 32, 34, 113, 13, 18, 57, 85, 224, 160, 126, 93, 209}, +{46, 49, 171, 237, 72, 197, 89, 144, 162, 48, 234, 16, 156, 163, 103, 125, 51, 234, 223, 127, 182, 40, 24, 247, 124, 222, 93, 219, 159, 149, 126, 62, 208, 118, 134, 94, 47, 55, 11, 83, 26, 245, 209, 207, 209, 243, 83, 233, 94, 17, 144, 110, 173, 0, 233, 55, 113, 254, 103, 227, 72, 212, 132, 119, 153, 19, 136, 211, 244, 202, 20, 47, 91, 36, 128, 128, 207, 192, 139, 214, 125, 54, 90, 154, 230, 16, 235, 92, 84, 232, 75, 150, 17, 58, 36, 240, 140, 23, 127, 236, 83, 73, 109, 160, 247, 137, 41, 159, 205, 32, 110, 190, 209, 185, 178, 208, 158, 176, 37, 125, 234, 254, 25, 4, 246, 236, 15, 247}, +{160, 179, 120, 104, 147, 160, 185, 194, 199, 75, 56, 240, 208, 117, 48, 138, 9, 41, 70, 59, 15, 130, 225, 16, 233, 127, 6, 68, 43, 134, 208, 173, 103, 191, 152, 161, 119, 253, 171, 15, 26, 109, 187, 236, 46, 186, 30, 203, 173, 124, 148, 33, 227, 61, 123, 64, 233, 187, 14, 18, 218, 121, 115, 152, 36, 158, 61, 113, 197, 88, 219, 102, 3, 17, 61, 209, 89, 75, 25, 36, 210, 242, 242, 37, 108, 202, 203, 215, 23, 140, 219, 125, 203, 35, 100, 23, 40, 118, 174, 169, 146, 129, 52, 48, 148, 10, 101, 162, 218, 180, 45, 57, 88, 199, 123, 110, 136, 13, 4, 46, 183, 208, 57, 187, 19, 63, 86, 13}, +{168, 161, 207, 129, 92, 170, 229, 222, 217, 160, 87, 98, 132, 224, 51, 29, 44, 209, 61, 207, 142, 244, 253, 152, 46, 172, 53, 123, 136, 203, 159, 56, 134, 88, 82, 238, 93, 123, 56, 37, 177, 134, 19, 206, 4, 200, 154, 211, 67, 229, 245, 74, 68, 9, 170, 115, 78, 188, 185, 136, 139, 69, 84, 247, 250, 10, 204, 25, 120, 115, 147, 215, 166, 198, 81, 66, 147, 84, 16, 60, 212, 96, 172, 181, 226, 79, 85, 170, 155, 216, 57, 77, 96, 98, 187, 21, 31, 252, 193, 204, 218, 246, 120, 64, 110, 243, 22, 44, 127, 238, 251, 82, 185, 48, 87, 61, 26, 160, 60, 190, 41, 82, 104, 1, 28, 218, 24, 43}, +{77, 243, 0, 32, 95, 164, 83, 112, 43, 199, 55, 213, 97, 99, 109, 136, 57, 98, 112, 190, 235, 53, 92, 38, 214, 166, 13, 149, 140, 251, 94, 168, 104, 53, 150, 6, 244, 204, 255, 143, 99, 219, 184, 115, 90, 5, 61, 12, 36, 41, 115, 211, 56, 10, 131, 155, 0, 23, 9, 21, 42, 110, 167, 45, 212, 3, 2, 191, 208, 251, 172, 110, 131, 197, 175, 203, 26, 115, 95, 169, 20, 62, 201, 105, 39, 42, 245, 112, 123, 179, 233, 192, 132, 197, 230, 12, 72, 17, 12, 0, 115, 209, 141, 47, 52, 97, 230, 152, 12, 96, 87, 199, 228, 44, 8, 136, 47, 159, 162, 72, 87, 109, 11, 94, 188, 73, 88, 175}, +{150, 134, 55, 153, 242, 215, 223, 202, 248, 113, 73, 183, 223, 92, 201, 146, 188, 110, 54, 0, 143, 63, 234, 194, 44, 39, 107, 244, 252, 1, 243, 13, 157, 74, 114, 62, 77, 199, 67, 122, 178, 147, 227, 180, 210, 216, 47, 247, 90, 12, 125, 87, 50, 221, 208, 153, 115, 136, 33, 4, 16, 182, 41, 136, 20, 6, 73, 64, 30, 228, 11, 64, 227, 142, 230, 226, 189, 51, 18, 209, 31, 15, 119, 202, 51, 40, 144, 235, 6, 122, 119, 97, 156, 181, 201, 35, 33, 224, 140, 231, 222, 129, 176, 245, 2, 175, 126, 64, 74, 119, 105, 117, 120, 245, 116, 42, 68, 191, 180, 230, 5, 78, 70, 23, 92, 151, 156, 18}, +{65, 128, 25, 221, 49, 39, 75, 217, 214, 173, 218, 17, 105, 127, 55, 27, 109, 89, 137, 201, 217, 7, 174, 161, 128, 255, 182, 0, 4, 160, 46, 137, 168, 29, 78, 164, 161, 151, 173, 125, 78, 33, 157, 221, 107, 42, 146, 201, 6, 2, 189, 249, 251, 240, 241, 210, 117, 228, 84, 9, 59, 31, 208, 191, 185, 194, 248, 16, 131, 129, 13, 78, 100, 153, 43, 244, 224, 94, 82, 166, 179, 183, 192, 30, 185, 197, 16, 232, 184, 236, 53, 198, 160, 17, 10, 191, 50, 166, 209, 73, 70, 90, 251, 63, 67, 59, 230, 92, 31, 199, 45, 64, 237, 128, 94, 227, 139, 189, 185, 234, 56, 16, 89, 215, 14, 64, 159, 253}, +{193, 37, 3, 39, 195, 42, 51, 159, 239, 154, 236, 237, 5, 30, 87, 122, 13, 249, 62, 52, 67, 119, 13, 166, 187, 69, 94, 97, 241, 23, 62, 232, 111, 93, 93, 120, 55, 8, 157, 124, 80, 161, 19, 148, 161, 252, 169, 200, 89, 72, 49, 142, 171, 12, 18, 97, 207, 127, 225, 15, 2, 48, 136, 124, 152, 159, 64, 28, 148, 187, 106, 232, 29, 13, 37, 60, 101, 159, 218, 223, 244, 174, 190, 200, 146, 32, 135, 66, 157, 12, 80, 50, 222, 35, 222, 140, 8, 135, 53, 66, 87, 205, 43, 82, 161, 149, 241, 138, 148, 218, 75, 125, 56, 223, 242, 63, 183, 188, 152, 178, 49, 21, 43, 158, 138, 104, 152, 184}, +{118, 220, 26, 93, 92, 122, 87, 45, 124, 99, 253, 167, 53, 156, 246, 4, 217, 0, 233, 159, 28, 1, 162, 198, 245, 94, 90, 187, 9, 250, 199, 94, 117, 130, 167, 25, 75, 166, 126, 93, 132, 185, 224, 155, 158, 250, 191, 144, 61, 30, 13, 108, 127, 155, 20, 23, 231, 44, 199, 31, 18, 125, 235, 106, 59, 67, 174, 219, 249, 48, 231, 61, 141, 35, 234, 114, 18, 181, 117, 226, 192, 164, 89, 107, 203, 15, 245, 64, 162, 254, 174, 36, 169, 4, 32, 193, 22, 13, 98, 12, 95, 2, 55, 141, 68, 2, 214, 55, 248, 190, 150, 115, 36, 59, 228, 47, 218, 0, 81, 77, 20, 155, 247, 64, 155, 117, 36, 25}, +{171, 205, 198, 226, 126, 53, 195, 180, 24, 65, 34, 127, 114, 246, 186, 91, 226, 226, 202, 61, 62, 21, 226, 67, 33, 93, 54, 104, 79, 165, 102, 16, 171, 141, 192, 15, 254, 133, 150, 34, 63, 235, 231, 146, 8, 33, 163, 126, 2, 161, 147, 83, 230, 201, 85, 232, 205, 134, 252, 38, 180, 172, 50, 168, 78, 236, 202, 209, 120, 155, 224, 174, 117, 186, 153, 175, 228, 148, 169, 179, 68, 47, 101, 170, 218, 73, 149, 230, 15, 32, 163, 205, 121, 116, 246, 253, 242, 116, 92, 233, 252, 245, 56, 52, 213, 154, 221, 74, 196, 106, 200, 201, 118, 131, 130, 61, 109, 140, 108, 227, 197, 61, 109, 67, 34, 124, 169, 53}, +{122, 123, 15, 2, 190, 25, 244, 7, 204, 160, 12, 31, 156, 211, 152, 205, 76, 20, 159, 247, 127, 233, 198, 118, 200, 54, 123, 57, 145, 65, 19, 126, 221, 252, 209, 251, 233, 109, 245, 57, 47, 45, 154, 222, 94, 178, 38, 157, 54, 32, 58, 187, 26, 243, 178, 51, 156, 25, 26, 60, 14, 38, 212, 198, 181, 53, 31, 178, 252, 131, 44, 230, 40, 163, 131, 210, 112, 200, 118, 214, 49, 110, 75, 182, 104, 75, 79, 215, 187, 14, 85, 45, 17, 188, 28, 225, 226, 217, 75, 45, 160, 190, 90, 215, 26, 254, 192, 59, 56, 15, 230, 37, 91, 178, 252, 147, 81, 206, 204, 187, 98, 63, 11, 22, 187, 191, 100, 172}, +{169, 224, 183, 146, 149, 21, 3, 202, 150, 104, 253, 238, 164, 187, 55, 208, 35, 52, 155, 233, 167, 169, 213, 191, 26, 190, 71, 62, 242, 42, 157, 31, 105, 218, 34, 145, 69, 91, 187, 128, 205, 185, 16, 231, 56, 162, 9, 194, 136, 135, 122, 13, 190, 31, 245, 166, 149, 63, 242, 200, 174, 138, 154, 186, 170, 129, 173, 159, 127, 244, 43, 61, 60, 218, 161, 111, 108, 48, 42, 136, 214, 251, 109, 133, 156, 255, 177, 198, 14, 116, 68, 250, 44, 136, 15, 51, 12, 236, 95, 237, 78, 187, 42, 78, 121, 189, 51, 4, 61, 125, 244, 135, 250, 169, 26, 127, 15, 237, 17, 239, 55, 48, 214, 238, 25, 169, 43, 241}, +{68, 219, 0, 143, 127, 202, 7, 204, 208, 223, 75, 8, 86, 118, 85, 43, 245, 227, 183, 125, 75, 159, 181, 25, 143, 157, 254, 76, 87, 30, 70, 150, 216, 6, 18, 60, 65, 202, 150, 49, 44, 86, 114, 150, 122, 200, 83, 123, 173, 38, 253, 42, 216, 170, 168, 230, 30, 65, 15, 255, 123, 133, 134, 20, 66, 22, 125, 14, 211, 38, 111, 141, 227, 129, 64, 203, 159, 180, 79, 139, 9, 197, 160, 24, 97, 183, 26, 123, 39, 225, 54, 198, 167, 247, 75, 63, 1, 104, 122, 112, 79, 165, 113, 122, 110, 197, 222, 193, 242, 106, 109, 64, 193, 179, 5, 24, 152, 101, 174, 151, 121, 183, 238, 17, 227, 239, 127, 109}, +{34, 234, 130, 73, 212, 136, 130, 114, 138, 110, 217, 187, 136, 49, 204, 113, 141, 219, 79, 219, 170, 34, 11, 253, 12, 198, 52, 253, 110, 190, 214, 224, 36, 27, 221, 239, 247, 150, 174, 141, 133, 112, 141, 88, 243, 147, 219, 148, 13, 231, 126, 166, 100, 30, 175, 172, 55, 190, 80, 49, 185, 8, 36, 55, 154, 233, 196, 129, 83, 161, 63, 222, 39, 119, 175, 167, 122, 90, 196, 144, 188, 0, 174, 70, 171, 208, 78, 231, 188, 221, 234, 224, 216, 78, 179, 230, 11, 72, 246, 21, 30, 60, 133, 58, 23, 252, 162, 18, 20, 103, 192, 246, 220, 12, 218, 147, 175, 121, 37, 20, 92, 150, 166, 104, 10, 21, 226, 222}, +{155, 254, 192, 204, 231, 86, 121, 250, 214, 201, 162, 128, 177, 95, 13, 254, 38, 119, 254, 214, 48, 197, 30, 215, 37, 163, 49, 71, 222, 120, 133, 191, 13, 112, 138, 64, 54, 228, 0, 21, 129, 253, 154, 73, 103, 107, 23, 119, 211, 104, 183, 140, 171, 135, 144, 91, 92, 245, 36, 147, 196, 106, 180, 125, 117, 168, 147, 59, 28, 82, 178, 28, 153, 82, 81, 163, 150, 176, 98, 127, 55, 85, 100, 82, 25, 210, 100, 204, 178, 14, 103, 104, 137, 153, 101, 69, 99, 87, 136, 72, 22, 207, 3, 224, 53, 179, 133, 245, 191, 214, 255, 212, 125, 203, 198, 128, 59, 71, 40, 26, 39, 114, 110, 116, 208, 0, 228, 76}, +{179, 39, 21, 146, 20, 189, 140, 80, 120, 77, 110, 134, 7, 159, 166, 57, 87, 64, 100, 52, 243, 69, 172, 96, 184, 86, 141, 55, 33, 77, 196, 20, 12, 248, 217, 30, 103, 191, 177, 208, 169, 172, 148, 101, 28, 52, 35, 14, 59, 255, 14, 12, 80, 41, 144, 210, 241, 47, 176, 29, 200, 250, 77, 118, 253, 67, 179, 77, 136, 186, 94, 190, 131, 133, 83, 228, 235, 51, 85, 145, 139, 223, 12, 97, 56, 25, 138, 17, 237, 116, 115, 139, 20, 218, 150, 183, 161, 195, 43, 162, 103, 14, 16, 112, 99, 187, 245, 39, 222, 176, 196, 174, 235, 145, 75, 36, 136, 9, 59, 100, 179, 99, 66, 77, 13, 126, 53, 55}, +{60, 194, 13, 138, 254, 72, 128, 120, 187, 82, 82, 211, 186, 72, 9, 16, 214, 212, 43, 131, 203, 9, 249, 58, 55, 189, 225, 247, 84, 41, 148, 114, 243, 154, 152, 172, 148, 102, 68, 87, 130, 148, 192, 139, 152, 79, 50, 164, 114, 252, 254, 154, 102, 173, 134, 242, 176, 171, 79, 39, 38, 212, 116, 60, 255, 81, 81, 16, 21, 88, 203, 122, 141, 17, 16, 63, 236, 5, 190, 119, 187, 59, 40, 197, 84, 117, 8, 147, 136, 211, 230, 208, 144, 27, 79, 173, 101, 222, 146, 5, 94, 0, 123, 37, 5, 56, 155, 60, 125, 124, 209, 145, 162, 87, 203, 31, 176, 74, 16, 196, 49, 144, 28, 158, 93, 119, 158, 250}, +{181, 123, 80, 86, 169, 228, 65, 173, 43, 90, 236, 69, 45, 192, 215, 166, 187, 189, 146, 10, 160, 42, 203, 16, 6, 16, 168, 201, 171, 203, 223, 174, 251, 222, 128, 240, 31, 164, 24, 97, 78, 208, 119, 3, 177, 218, 71, 81, 111, 143, 162, 246, 80, 157, 91, 180, 83, 10, 216, 20, 225, 91, 167, 124, 213, 5, 242, 138, 91, 17, 57, 221, 95, 88, 166, 132, 242, 34, 239, 221, 110, 120, 197, 156, 213, 62, 109, 115, 209, 52, 187, 135, 61, 228, 88, 218, 131, 95, 210, 51, 239, 212, 206, 253, 76, 243, 107, 119, 8, 2, 193, 154, 254, 78, 114, 181, 219, 131, 199, 20, 109, 181, 19, 15, 122, 148, 3, 250}, +{126, 191, 109, 27, 214, 154, 131, 116, 253, 251, 201, 102, 63, 100, 22, 131, 180, 70, 188, 57, 84, 223, 169, 147, 205, 165, 67, 138, 70, 207, 40, 70, 57, 44, 83, 68, 198, 196, 227, 141, 30, 42, 142, 108, 210, 218, 195, 31, 139, 5, 193, 195, 83, 19, 16, 157, 108, 69, 152, 157, 194, 30, 79, 243, 109, 20, 197, 96, 17, 7, 30, 254, 96, 119, 121, 152, 194, 59, 181, 44, 55, 8, 117, 254, 144, 135, 140, 30, 62, 150, 62, 136, 51, 5, 105, 187, 220, 90, 109, 12, 157, 78, 31, 17, 15, 93, 98, 9, 241, 188, 229, 82, 82, 199, 217, 247, 251, 131, 48, 118, 146, 229, 210, 158, 188, 25, 118, 209}, +{126, 102, 18, 228, 110, 236, 122, 25, 194, 194, 248, 102, 135, 215, 92, 41, 240, 0, 173, 166, 30, 222, 43, 92, 162, 142, 222, 180, 171, 190, 198, 37, 61, 170, 15, 189, 3, 216, 67, 95, 28, 232, 153, 97, 150, 52, 82, 5, 236, 62, 19, 28, 40, 37, 119, 162, 50, 183, 90, 55, 86, 114, 14, 218, 161, 22, 248, 183, 18, 188, 190, 225, 217, 8, 13, 107, 167, 158, 199, 34, 77, 43, 171, 45, 54, 8, 17, 202, 234, 61, 195, 152, 77, 139, 228, 249, 96, 219, 104, 160, 145, 164, 127, 207, 222, 100, 141, 118, 13, 235, 8, 46, 145, 154, 62, 218, 231, 56, 236, 2, 33, 142, 195, 86, 130, 199, 89, 93}, +{77, 163, 115, 3, 60, 195, 208, 114, 225, 80, 78, 136, 155, 139, 144, 113, 122, 199, 200, 88, 33, 122, 95, 242, 166, 2, 38, 69, 16, 86, 200, 237, 190, 205, 74, 108, 83, 208, 61, 146, 33, 88, 58, 136, 196, 190, 244, 193, 251, 225, 23, 245, 232, 130, 45, 120, 82, 179, 184, 192, 33, 63, 45, 199, 103, 155, 120, 49, 65, 147, 124, 157, 140, 251, 55, 170, 117, 153, 121, 245, 140, 13, 151, 204, 53, 6, 170, 124, 199, 124, 243, 18, 248, 144, 233, 35, 191, 121, 167, 82, 171, 68, 149, 209, 28, 44, 245, 43, 241, 180, 52, 40, 117, 227, 111, 95, 28, 33, 240, 215, 46, 202, 175, 149, 12, 127, 49, 25}, +{69, 121, 92, 174, 53, 235, 11, 45, 0, 211, 111, 220, 192, 160, 23, 225, 250, 5, 143, 135, 45, 231, 225, 238, 47, 71, 85, 86, 203, 99, 239, 59, 134, 65, 108, 154, 63, 99, 160, 59, 199, 84, 105, 121, 219, 49, 62, 120, 71, 28, 55, 59, 237, 165, 195, 247, 119, 55, 66, 117, 247, 49, 69, 55, 245, 105, 43, 199, 19, 28, 3, 182, 250, 14, 204, 167, 108, 246, 15, 165, 100, 103, 220, 77, 173, 42, 131, 4, 83, 200, 72, 254, 19, 64, 242, 242, 244, 19, 14, 9, 59, 32, 39, 139, 66, 188, 99, 250, 112, 61, 85, 64, 31, 21, 31, 139, 3, 213, 155, 107, 71, 135, 192, 92, 0, 153, 202, 165}, +{166, 129, 17, 185, 99, 86, 133, 157, 194, 183, 90, 169, 103, 201, 41, 224, 196, 59, 0, 101, 5, 124, 141, 73, 151, 49, 10, 113, 80, 121, 134, 52, 66, 30, 90, 101, 226, 32, 71, 137, 104, 178, 37, 237, 91, 84, 169, 29, 65, 111, 218, 160, 216, 75, 218, 118, 15, 246, 253, 41, 202, 226, 8, 176, 108, 151, 48, 150, 122, 237, 210, 88, 65, 243, 156, 67, 220, 181, 10, 224, 169, 157, 87, 77, 57, 39, 110, 5, 140, 73, 71, 98, 123, 161, 241, 80, 33, 165, 242, 68, 139, 122, 21, 96, 149, 205, 202, 157, 173, 163, 72, 70, 91, 243, 209, 177, 8, 106, 164, 233, 36, 219, 137, 64, 91, 137, 116, 163}, +{74, 224, 240, 160, 218, 80, 19, 116, 167, 169, 55, 181, 208, 87, 20, 17, 85, 138, 230, 8, 2, 196, 46, 200, 141, 231, 100, 213, 64, 105, 102, 49, 250, 71, 230, 91, 213, 23, 112, 127, 203, 195, 100, 239, 76, 137, 28, 41, 163, 241, 117, 193, 188, 52, 92, 0, 144, 46, 98, 190, 85, 110, 102, 106, 156, 146, 112, 7, 55, 1, 53, 212, 118, 194, 153, 239, 233, 76, 1, 1, 126, 228, 205, 16, 213, 166, 105, 104, 51, 137, 175, 110, 40, 31, 144, 196, 7, 82, 166, 2, 197, 61, 240, 193, 144, 188, 14, 159, 243, 43, 25, 163, 125, 170, 44, 76, 34, 131, 54, 162, 136, 5, 247, 52, 104, 74, 55, 196}, +{77, 140, 169, 184, 77, 57, 253, 107, 33, 205, 145, 100, 43, 3, 165, 15, 123, 157, 55, 64, 77, 235, 231, 206, 180, 0, 186, 120, 174, 197, 69, 142, 29, 28, 55, 136, 190, 255, 167, 174, 208, 155, 24, 36, 5, 152, 153, 252, 129, 199, 146, 101, 81, 108, 55, 117, 83, 217, 6, 22, 215, 214, 8, 215, 128, 18, 151, 60, 75, 196, 51, 197, 27, 5, 32, 55, 141, 226, 69, 116, 131, 103, 159, 63, 7, 96, 118, 205, 246, 241, 180, 68, 27, 69, 240, 232, 220, 114, 97, 20, 162, 225, 142, 243, 164, 133, 2, 125, 119, 111, 7, 239, 42, 248, 232, 54, 241, 52, 41, 78, 222, 108, 137, 111, 145, 5, 173, 93}, +{110, 7, 39, 50, 3, 172, 40, 157, 187, 149, 25, 235, 56, 48, 28, 1, 65, 13, 138, 7, 132, 195, 9, 115, 192, 212, 222, 211, 137, 0, 5, 147, 7, 115, 73, 250, 177, 240, 42, 2, 40, 43, 186, 126, 0, 129, 230, 16, 165, 66, 20, 62, 208, 72, 83, 45, 118, 86, 98, 78, 109, 126, 121, 108, 142, 194, 33, 184, 126, 108, 174, 119, 107, 153, 61, 65, 80, 177, 90, 148, 162, 142, 146, 230, 46, 237, 78, 254, 19, 89, 42, 33, 146, 39, 150, 46, 115, 179, 33, 153, 228, 180, 27, 205, 209, 156, 203, 86, 4, 143, 31, 112, 234, 181, 167, 210, 29, 124, 205, 233, 40, 53, 43, 251, 62, 4, 169, 240}, +{168, 81, 216, 120, 52, 99, 229, 222, 182, 115, 33, 192, 204, 172, 19, 7, 195, 110, 70, 136, 14, 224, 99, 227, 71, 43, 85, 182, 235, 81, 214, 230, 59, 254, 24, 5, 99, 137, 112, 101, 102, 96, 55, 53, 162, 59, 93, 173, 221, 98, 7, 195, 80, 156, 32, 67, 232, 28, 62, 205, 6, 203, 204, 223, 24, 228, 86, 154, 59, 127, 62, 103, 177, 139, 2, 223, 238, 231, 4, 25, 196, 150, 160, 52, 65, 63, 95, 49, 88, 212, 199, 115, 67, 80, 99, 53, 7, 111, 61, 75, 80, 120, 180, 209, 17, 118, 47, 234, 226, 191, 42, 168, 227, 236, 143, 230, 153, 69, 250, 20, 44, 242, 172, 67, 216, 25, 31, 104}, +{72, 250, 163, 135, 59, 111, 153, 229, 139, 171, 236, 176, 253, 89, 8, 147, 25, 103, 139, 69, 234, 186, 143, 113, 240, 40, 39, 113, 211, 33, 146, 55, 15, 88, 122, 68, 161, 235, 193, 13, 166, 253, 239, 87, 213, 197, 238, 101, 81, 87, 95, 0, 52, 62, 218, 174, 192, 111, 37, 130, 206, 246, 134, 61, 106, 245, 59, 107, 222, 213, 146, 246, 164, 184, 124, 120, 137, 117, 154, 82, 166, 211, 36, 79, 116, 11, 84, 166, 33, 204, 111, 78, 94, 130, 157, 18, 204, 129, 8, 129, 195, 151, 25, 3, 169, 43, 33, 254, 31, 242, 226, 163, 95, 23, 238, 41, 57, 49, 234, 0, 137, 6, 19, 165, 101, 179, 53, 240}, +{46, 84, 94, 114, 111, 186, 253, 95, 44, 106, 92, 147, 248, 226, 170, 200, 79, 204, 57, 141, 20, 188, 136, 181, 162, 79, 43, 242, 60, 30, 69, 251, 130, 128, 154, 26, 154, 102, 32, 105, 228, 155, 67, 83, 205, 112, 49, 210, 19, 107, 241, 109, 163, 116, 180, 20, 196, 194, 144, 135, 157, 181, 95, 182, 35, 88, 61, 57, 169, 236, 123, 9, 254, 211, 40, 242, 237, 21, 76, 54, 180, 170, 116, 232, 48, 148, 80, 23, 168, 108, 87, 144, 71, 75, 116, 151, 156, 153, 119, 36, 196, 45, 16, 58, 83, 200, 162, 137, 104, 9, 16, 210, 210, 105, 214, 123, 29, 187, 171, 165, 225, 209, 182, 237, 112, 83, 30, 67}, +{165, 21, 231, 185, 118, 75, 30, 6, 47, 67, 195, 88, 241, 107, 218, 220, 67, 229, 110, 42, 69, 46, 109, 201, 83, 86, 128, 30, 239, 19, 44, 37, 152, 194, 89, 131, 37, 208, 102, 131, 119, 93, 74, 98, 208, 122, 216, 207, 50, 80, 89, 99, 188, 175, 139, 11, 106, 105, 178, 198, 210, 251, 47, 255, 94, 244, 240, 90, 97, 56, 85, 12, 2, 21, 122, 78, 98, 50, 20, 144, 190, 11, 150, 211, 63, 55, 214, 197, 241, 235, 166, 248, 118, 236, 225, 129, 59, 21, 21, 112, 187, 144, 136, 193, 86, 212, 52, 232, 78, 157, 2, 245, 125, 126, 206, 225, 222, 134, 168, 92, 137, 0, 16, 79, 180, 81, 42, 185}, +{9, 195, 93, 80, 29, 50, 134, 220, 118, 202, 56, 15, 39, 97, 120, 167, 50, 29, 238, 75, 163, 250, 41, 19, 53, 0, 75, 51, 226, 144, 17, 87, 105, 73, 189, 61, 153, 137, 162, 20, 110, 182, 63, 156, 88, 223, 58, 88, 85, 108, 92, 79, 100, 11, 11, 1, 141, 64, 74, 175, 112, 152, 29, 65, 188, 24, 172, 194, 171, 238, 242, 160, 237, 2, 93, 86, 221, 177, 252, 95, 178, 209, 201, 169, 70, 7, 130, 24, 82, 214, 229, 231, 14, 10, 55, 87, 28, 107, 201, 87, 183, 26, 164, 166, 170, 219, 35, 248, 21, 144, 166, 6, 117, 56, 137, 227, 82, 57, 223, 147, 187, 47, 62, 203, 158, 186, 120, 249}, +{109, 85, 40, 153, 230, 179, 223, 97, 56, 28, 49, 73, 160, 105, 170, 189, 171, 107, 16, 143, 70, 184, 245, 194, 17, 130, 210, 45, 237, 242, 40, 6, 42, 41, 73, 96, 99, 102, 223, 174, 33, 107, 249, 96, 76, 23, 241, 46, 111, 244, 56, 222, 16, 105, 108, 171, 46, 217, 17, 238, 132, 180, 136, 108, 65, 44, 173, 33, 175, 22, 166, 6, 24, 172, 201, 22, 142, 85, 245, 151, 17, 115, 0, 180, 51, 88, 6, 57, 116, 170, 38, 23, 187, 196, 231, 149, 229, 137, 2, 86, 72, 221, 77, 58, 134, 154, 132, 220, 128, 84, 151, 14, 83, 151, 181, 81, 250, 11, 149, 152, 244, 184, 5, 163, 24, 90, 191, 164}, +{170, 140, 14, 196, 198, 222, 13, 117, 24, 117, 210, 3, 227, 175, 121, 246, 41, 178, 55, 21, 30, 177, 11, 83, 34, 81, 210, 207, 25, 87, 245, 211, 112, 3, 222, 63, 155, 255, 15, 160, 144, 219, 239, 68, 120, 246, 149, 251, 52, 246, 240, 47, 152, 76, 169, 188, 82, 17, 47, 34, 233, 176, 64, 142, 96, 139, 188, 73, 56, 95, 29, 30, 71, 152, 6, 192, 224, 173, 209, 92, 240, 211, 242, 192, 203, 30, 8, 36, 191, 202, 83, 163, 139, 4, 181, 56, 242, 106, 253, 38, 139, 95, 93, 160, 10, 204, 31, 6, 2, 47, 64, 161, 107, 137, 40, 135, 233, 218, 88, 57, 40, 107, 64, 137, 229, 186, 31, 193}, +{204, 216, 204, 47, 190, 209, 189, 1, 73, 78, 0, 123, 176, 214, 174, 74, 128, 171, 214, 228, 161, 188, 174, 121, 255, 219, 136, 203, 221, 235, 91, 236, 245, 185, 161, 58, 226, 88, 94, 252, 143, 5, 224, 250, 232, 232, 117, 212, 224, 47, 205, 183, 41, 255, 35, 233, 82, 30, 91, 111, 70, 240, 244, 144, 93, 243, 31, 205, 198, 175, 8, 244, 208, 124, 34, 54, 207, 190, 227, 128, 173, 3, 135, 84, 146, 31, 120, 160, 164, 246, 109, 123, 163, 116, 171, 0, 187, 26, 59, 25, 170, 65, 182, 74, 61, 178, 59, 125, 203, 44, 10, 234, 68, 158, 83, 85, 208, 60, 208, 181, 182, 76, 73, 167, 96, 90, 130, 128}, +{49, 246, 152, 19, 97, 107, 104, 69, 33, 61, 100, 2, 205, 238, 227, 185, 193, 249, 107, 223, 134, 146, 78, 236, 39, 123, 222, 227, 76, 33, 231, 244, 33, 96, 117, 147, 121, 226, 14, 197, 134, 81, 109, 35, 64, 86, 219, 163, 223, 201, 184, 88, 188, 158, 45, 68, 234, 190, 234, 28, 24, 189, 208, 165, 127, 35, 22, 253, 51, 35, 209, 101, 131, 40, 33, 132, 96, 12, 228, 222, 164, 218, 133, 251, 63, 214, 236, 20, 29, 189, 226, 55, 241, 96, 105, 77, 1, 13, 143, 16, 157, 11, 227, 171, 94, 204, 196, 123, 127, 139, 113, 76, 34, 199, 24, 159, 38, 128, 159, 102, 208, 25, 19, 176, 101, 14, 12, 34}, +{16, 187, 176, 124, 198, 250, 170, 214, 139, 237, 182, 106, 208, 194, 220, 241, 61, 5, 159, 94, 186, 215, 204, 194, 45, 135, 181, 26, 137, 118, 23, 129, 216, 140, 109, 170, 201, 229, 32, 168, 55, 230, 33, 162, 11, 188, 250, 17, 177, 210, 73, 128, 205, 202, 217, 95, 53, 243, 243, 197, 57, 184, 51, 213, 133, 235, 64, 83, 16, 8, 23, 114, 145, 99, 112, 54, 181, 134, 183, 63, 19, 135, 32, 127, 107, 78, 101, 215, 195, 237, 176, 65, 238, 245, 88, 231, 44, 99, 156, 118, 195, 46, 24, 64, 17, 60, 241, 52, 131, 91, 28, 58, 243, 177, 231, 1, 46, 154, 97, 136, 230, 190, 250, 149, 113, 247, 42, 58}, +{126, 193, 77, 166, 48, 100, 169, 168, 214, 239, 157, 57, 62, 244, 28, 55, 7, 183, 241, 64, 134, 12, 139, 151, 1, 165, 231, 174, 126, 108, 221, 205, 227, 108, 84, 21, 203, 123, 42, 214, 215, 179, 83, 214, 165, 28, 158, 48, 171, 171, 213, 218, 252, 178, 175, 190, 77, 194, 249, 167, 191, 246, 62, 57, 103, 177, 18, 128, 63, 228, 249, 138, 151, 241, 82, 97, 164, 155, 117, 145, 184, 181, 177, 82, 77, 102, 100, 3, 187, 89, 92, 221, 177, 115, 65, 119, 49, 108, 41, 246, 125, 2, 23, 209, 51, 191, 156, 195, 33, 131, 221, 6, 227, 93, 182, 16, 225, 58, 34, 154, 118, 140, 165, 109, 72, 132, 205, 202}, +{167, 242, 162, 213, 127, 118, 57, 175, 220, 41, 91, 66, 167, 118, 101, 78, 196, 124, 203, 79, 28, 200, 210, 187, 54, 160, 210, 125, 51, 94, 158, 10, 222, 20, 167, 170, 216, 123, 41, 212, 53, 57, 190, 162, 151, 112, 188, 216, 253, 53, 43, 194, 209, 247, 219, 74, 64, 62, 184, 188, 117, 70, 206, 99, 138, 198, 215, 150, 102, 26, 50, 188, 11, 65, 101, 145, 58, 142, 175, 102, 49, 85, 146, 181, 67, 72, 47, 167, 179, 6, 8, 181, 224, 247, 68, 47, 12, 98, 246, 101, 97, 215, 108, 18, 131, 154, 169, 12, 255, 105, 75, 90, 26, 213, 6, 52, 164, 147, 79, 124, 15, 238, 184, 126, 155, 4, 165, 146}, +{158, 4, 161, 30, 208, 253, 72, 75, 229, 81, 112, 160, 245, 146, 145, 89, 195, 127, 215, 103, 78, 96, 128, 128, 234, 39, 208, 32, 47, 133, 81, 62, 76, 65, 221, 58, 155, 202, 16, 71, 173, 134, 8, 145, 96, 234, 188, 215, 154, 25, 63, 186, 150, 56, 219, 15, 140, 82, 201, 191, 204, 95, 234, 109, 196, 50, 60, 114, 46, 126, 125, 94, 250, 221, 18, 181, 126, 85, 218, 75, 187, 41, 41, 40, 108, 193, 85, 178, 54, 139, 19, 255, 62, 199, 1, 183, 182, 70, 57, 4, 117, 34, 129, 54, 130, 237, 129, 98, 103, 159, 133, 160, 160, 203, 146, 200, 135, 181, 222, 91, 213, 88, 37, 92, 101, 239, 118, 76}, +{166, 203, 241, 134, 170, 127, 93, 104, 157, 35, 131, 152, 21, 249, 7, 39, 179, 147, 0, 11, 238, 44, 171, 67, 173, 250, 109, 207, 146, 240, 158, 96, 232, 147, 97, 146, 87, 167, 230, 231, 53, 156, 35, 218, 77, 129, 28, 22, 146, 104, 209, 77, 4, 174, 195, 191, 231, 100, 226, 68, 165, 168, 144, 185, 241, 80, 171, 96, 66, 13, 126, 1, 168, 134, 46, 61, 151, 1, 2, 52, 57, 170, 178, 93, 185, 6, 44, 113, 244, 244, 21, 81, 104, 42, 124, 3, 244, 31, 76, 181, 128, 197, 203, 204, 35, 70, 147, 24, 136, 103, 79, 79, 19, 219, 105, 233, 205, 82, 99, 89, 224, 77, 32, 7, 30, 147, 63, 249}, +{95, 109, 199, 184, 232, 241, 211, 102, 187, 209, 140, 135, 178, 252, 56, 45, 205, 219, 136, 176, 105, 61, 80, 15, 123, 169, 65, 219, 81, 93, 238, 213, 142, 30, 132, 172, 124, 38, 242, 136, 187, 86, 89, 54, 35, 79, 54, 108, 237, 252, 174, 19, 187, 149, 163, 88, 162, 3, 215, 60, 84, 113, 171, 129, 103, 146, 252, 84, 55, 236, 211, 216, 24, 161, 3, 240, 61, 189, 40, 169, 181, 99, 197, 166, 137, 104, 120, 80, 93, 87, 164, 93, 220, 202, 185, 70, 50, 155, 66, 146, 217, 151, 122, 17, 89, 45, 8, 89, 123, 252, 60, 51, 179, 205, 1, 124, 51, 63, 27, 67, 151, 11, 136, 54, 199, 204, 21, 239}, +{152, 146, 185, 40, 169, 131, 212, 68, 202, 158, 35, 77, 7, 142, 208, 15, 34, 134, 168, 255, 99, 217, 138, 240, 114, 156, 231, 6, 206, 105, 227, 5, 244, 236, 38, 13, 247, 118, 245, 166, 160, 5, 190, 41, 5, 155, 34, 54, 214, 18, 56, 67, 106, 252, 207, 92, 25, 32, 21, 149, 81, 11, 44, 252, 164, 220, 156, 27, 54, 185, 28, 22, 69, 215, 113, 18, 110, 25, 42, 219, 205, 236, 51, 127, 153, 73, 53, 167, 62, 42, 190, 212, 221, 134, 211, 147, 57, 178, 19, 174, 226, 133, 253, 126, 250, 24, 68, 240, 2, 180, 36, 238, 84, 230, 232, 213, 244, 205, 121, 84, 212, 5, 223, 145, 239, 137, 99, 115}, +{117, 153, 49, 51, 238, 152, 17, 144, 17, 9, 191, 244, 58, 61, 143, 67, 19, 169, 151, 167, 131, 50, 183, 12, 31, 74, 90, 37, 87, 169, 159, 182, 129, 162, 114, 28, 16, 75, 157, 89, 151, 131, 178, 164, 135, 168, 1, 119, 249, 170, 16, 67, 111, 83, 173, 198, 136, 240, 86, 70, 115, 213, 205, 88, 165, 19, 253, 27, 86, 146, 153, 134, 168, 128, 159, 51, 42, 226, 243, 189, 179, 146, 133, 129, 83, 114, 124, 200, 113, 153, 241, 212, 169, 172, 181, 125, 27, 41, 86, 177, 35, 124, 171, 67, 4, 224, 31, 56, 17, 72, 66, 216, 123, 189, 140, 216, 51, 134, 107, 151, 8, 161, 248, 80, 60, 97, 172, 143}, +{94, 53, 218, 144, 163, 251, 32, 114, 158, 100, 118, 141, 71, 182, 35, 67, 247, 121, 224, 21, 241, 84, 8, 27, 10, 214, 212, 26, 60, 240, 58, 69, 153, 41, 130, 162, 192, 62, 111, 185, 167, 94, 95, 60, 7, 197, 32, 71, 172, 244, 119, 89, 95, 121, 39, 161, 73, 98, 243, 218, 129, 52, 203, 75, 22, 227, 15, 193, 171, 102, 142, 164, 92, 94, 89, 155, 22, 56, 40, 130, 156, 86, 21, 14, 160, 253, 182, 195, 126, 100, 188, 182, 213, 115, 166, 244, 239, 66, 176, 44, 87, 121, 158, 182, 224, 71, 217, 144, 173, 86, 186, 180, 205, 187, 128, 146, 254, 114, 149, 18, 172, 55, 254, 242, 120, 239, 53, 31}, +{106, 163, 184, 13, 33, 15, 211, 111, 194, 111, 252, 136, 217, 179, 234, 213, 171, 70, 131, 45, 203, 169, 152, 165, 13, 223, 116, 239, 252, 138, 170, 247, 64, 166, 136, 201, 39, 182, 141, 190, 132, 122, 170, 39, 0, 239, 226, 105, 180, 103, 81, 224, 192, 252, 2, 106, 151, 50, 208, 93, 93, 31, 124, 71, 14, 136, 105, 176, 218, 99, 111, 119, 149, 171, 103, 27, 46, 221, 253, 58, 159, 55, 14, 155, 84, 219, 162, 219, 45, 210, 229, 88, 10, 201, 233, 201, 122, 69, 15, 164, 37, 114, 65, 26, 132, 239, 43, 130, 156, 242, 233, 118, 20, 4, 217, 27, 137, 107, 168, 171, 122, 207, 150, 98, 164, 203, 126, 65}, +{9, 91, 188, 149, 134, 35, 140, 157, 95, 250, 47, 92, 184, 186, 204, 4, 1, 150, 220, 64, 74, 73, 236, 217, 42, 166, 205, 143, 210, 242, 137, 221, 201, 53, 86, 254, 250, 174, 140, 75, 82, 203, 126, 190, 115, 78, 209, 58, 224, 185, 144, 163, 86, 224, 250, 69, 144, 144, 167, 126, 128, 25, 54, 164, 167, 50, 6, 66, 101, 201, 174, 226, 17, 183, 206, 233, 202, 213, 147, 237, 100, 165, 217, 183, 95, 20, 205, 213, 56, 175, 133, 79, 12, 183, 167, 62, 73, 69, 187, 127, 196, 60, 117, 95, 33, 153, 19, 143, 240, 59, 10, 165, 194, 59, 61, 72, 134, 249, 217, 220, 58, 89, 88, 159, 169, 41, 43, 3}, +{59, 196, 170, 185, 123, 18, 244, 203, 217, 9, 137, 176, 100, 141, 94, 42, 219, 190, 237, 172, 29, 55, 150, 71, 192, 74, 39, 194, 192, 143, 98, 52, 183, 11, 62, 19, 111, 63, 16, 184, 41, 2, 250, 118, 11, 15, 83, 172, 160, 71, 37, 55, 164, 185, 124, 76, 20, 168, 62, 4, 22, 132, 14, 43, 169, 166, 227, 50, 53, 120, 45, 254, 252, 58, 156, 111, 190, 81, 0, 216, 131, 136, 237, 80, 99, 19, 212, 98, 77, 52, 232, 189, 75, 221, 33, 252, 149, 30, 34, 94, 8, 223, 51, 204, 19, 170, 203, 34, 58, 195, 184, 139, 128, 81, 16, 120, 188, 31, 156, 250, 45, 73, 37, 93, 62, 235, 94, 187}, +{207, 151, 237, 227, 229, 139, 89, 191, 43, 155, 166, 252, 211, 14, 102, 164, 149, 45, 79, 202, 164, 156, 66, 3, 154, 19, 106, 51, 192, 195, 54, 23, 29, 51, 225, 23, 216, 145, 167, 245, 244, 172, 233, 56, 208, 13, 213, 200, 94, 65, 249, 165, 150, 22, 208, 129, 40, 232, 195, 226, 148, 191, 120, 139, 103, 139, 129, 150, 147, 99, 110, 254, 90, 161, 65, 60, 23, 183, 60, 143, 254, 114, 79, 94, 82, 238, 16, 164, 214, 121, 178, 84, 61, 161, 161, 161, 252, 91, 124, 209, 115, 244, 11, 207, 17, 29, 64, 97, 139, 241, 247, 156, 63, 49, 19, 56, 49, 182, 240, 152, 98, 161, 88, 236, 201, 17, 195, 151}, +{90, 94, 57, 37, 132, 177, 133, 246, 59, 35, 164, 189, 35, 144, 42, 244, 127, 174, 103, 232, 101, 243, 5, 140, 120, 38, 51, 34, 122, 13, 30, 90, 15, 247, 162, 81, 75, 171, 48, 192, 152, 42, 150, 185, 199, 119, 203, 137, 6, 65, 80, 228, 225, 105, 51, 47, 35, 115, 69, 16, 8, 190, 222, 149, 166, 209, 122, 78, 183, 158, 187, 59, 181, 229, 196, 25, 107, 236, 134, 172, 200, 13, 104, 196, 79, 43, 5, 67, 72, 234, 16, 58, 5, 53, 195, 70, 178, 27, 217, 38, 238, 60, 137, 162, 62, 151, 246, 155, 132, 114, 41, 209, 97, 25, 226, 137, 224, 193, 158, 47, 153, 39, 24, 253, 195, 95, 213, 253}, +{88, 120, 42, 61, 159, 136, 104, 219, 61, 102, 111, 151, 185, 71, 209, 206, 143, 28, 96, 219, 95, 28, 82, 163, 85, 163, 32, 86, 60, 126, 20, 116, 167, 20, 198, 79, 9, 67, 6, 48, 223, 224, 41, 154, 161, 189, 65, 20, 99, 110, 211, 215, 142, 87, 75, 134, 103, 62, 31, 87, 175, 202, 184, 220, 68, 144, 97, 32, 65, 124, 120, 232, 181, 82, 233, 21, 120, 31, 126, 188, 249, 100, 81, 140, 36, 166, 226, 188, 28, 191, 148, 28, 232, 155, 33, 12, 95, 92, 224, 44, 188, 12, 101, 137, 225, 146, 9, 180, 244, 221, 64, 237, 101, 229, 136, 10, 221, 214, 144, 108, 216, 41, 16, 252, 165, 166, 211, 159}, +{90, 23, 164, 102, 205, 223, 124, 152, 23, 198, 251, 224, 77, 156, 166, 225, 203, 194, 153, 166, 17, 157, 149, 104, 154, 247, 190, 10, 4, 214, 36, 168, 157, 187, 159, 107, 12, 138, 115, 247, 93, 91, 39, 13, 149, 174, 25, 127, 15, 67, 184, 26, 137, 53, 216, 160, 5, 30, 235, 59, 168, 128, 216, 158, 86, 160, 48, 135, 158, 108, 43, 96, 233, 91, 164, 74, 119, 96, 0, 61, 238, 195, 232, 31, 62, 106, 133, 121, 123, 71, 50, 93, 67, 152, 235, 223, 42, 162, 61, 91, 11, 181, 86, 150, 146, 238, 182, 43, 221, 61, 225, 118, 105, 3, 156, 80, 196, 235, 18, 96, 237, 37, 227, 209, 133, 191, 43, 40}, +{147, 81, 161, 82, 114, 240, 104, 26, 129, 56, 113, 51, 144, 246, 172, 45, 210, 16, 145, 55, 121, 207, 118, 234, 189, 207, 64, 201, 217, 158, 125, 53, 188, 91, 25, 235, 28, 12, 136, 53, 94, 248, 113, 31, 77, 51, 38, 179, 88, 132, 159, 216, 228, 250, 82, 105, 233, 38, 199, 54, 6, 67, 136, 56, 187, 89, 220, 112, 176, 85, 14, 84, 245, 115, 220, 93, 85, 17, 68, 41, 155, 194, 42, 230, 248, 232, 23, 159, 85, 42, 157, 139, 81, 97, 64, 239, 10, 96, 195, 157, 196, 141, 116, 148, 159, 128, 244, 160, 91, 182, 104, 134, 229, 11, 186, 205, 190, 166, 147, 105, 214, 251, 187, 23, 127, 221, 143, 104}, +{160, 161, 128, 241, 18, 113, 217, 134, 40, 45, 41, 146, 51, 202, 244, 255, 223, 205, 61, 73, 196, 101, 57, 53, 42, 23, 41, 107, 164, 179, 236, 245, 216, 11, 187, 92, 47, 48, 216, 211, 94, 173, 136, 82, 218, 161, 80, 187, 213, 41, 39, 106, 0, 113, 184, 158, 248, 1, 243, 213, 192, 55, 247, 152, 222, 203, 32, 96, 59, 80, 130, 19, 91, 243, 175, 156, 242, 249, 21, 145, 21, 249, 191, 60, 222, 49, 102, 34, 222, 33, 53, 31, 161, 177, 226, 145, 168, 106, 38, 0, 134, 88, 96, 51, 79, 122, 211, 233, 185, 193, 172, 74, 136, 180, 108, 75, 157, 4, 222, 80, 186, 226, 1, 145, 49, 129, 118, 71}, +{91, 47, 15, 64, 78, 78, 231, 123, 216, 152, 111, 234, 100, 99, 94, 83, 19, 151, 32, 227, 59, 41, 183, 241, 154, 145, 156, 205, 194, 248, 84, 123, 146, 253, 26, 128, 199, 233, 149, 251, 43, 190, 254, 107, 207, 234, 164, 240, 143, 224, 138, 28, 167, 182, 196, 103, 105, 96, 33, 14, 113, 196, 160, 232, 86, 93, 26, 44, 62, 78, 47, 125, 45, 21, 242, 7, 132, 21, 175, 151, 140, 125, 35, 50, 216, 177, 108, 243, 30, 57, 65, 169, 5, 229, 236, 193, 72, 83, 191, 175, 91, 198, 6, 155, 43, 99, 26, 30, 11, 152, 85, 72, 90, 85, 176, 242, 254, 58, 232, 155, 125, 206, 142, 168, 143, 92, 7, 63}, +{71, 77, 126, 186, 45, 136, 118, 164, 66, 163, 78, 62, 241, 159, 34, 162, 5, 30, 86, 117, 66, 218, 59, 39, 103, 4, 228, 178, 51, 189, 62, 249, 84, 125, 0, 255, 123, 211, 215, 35, 184, 178, 31, 223, 49, 17, 175, 222, 139, 114, 174, 70, 191, 138, 198, 37, 133, 108, 53, 168, 118, 108, 99, 241, 210, 232, 21, 128, 43, 242, 246, 127, 15, 39, 140, 21, 191, 245, 72, 234, 181, 41, 213, 93, 113, 139, 245, 115, 164, 113, 78, 169, 48, 224, 104, 40, 230, 54, 218, 138, 131, 19, 134, 220, 19, 193, 234, 108, 251, 133, 209, 24, 229, 9, 71, 5, 84, 48, 64, 254, 99, 65, 179, 35, 231, 5, 49, 239}, +{143, 27, 12, 115, 247, 209, 91, 79, 64, 55, 72, 237, 116, 242, 115, 149, 12, 19, 72, 237, 5, 206, 132, 39, 195, 28, 61, 94, 174, 81, 226, 188, 1, 60, 164, 0, 9, 146, 213, 53, 234, 31, 39, 195, 248, 26, 193, 12, 177, 177, 166, 11, 71, 68, 235, 222, 77, 197, 242, 55, 245, 168, 58, 61, 179, 212, 38, 96, 64, 169, 117, 210, 110, 246, 107, 222, 132, 24, 237, 237, 157, 20, 196, 62, 5, 217, 152, 152, 65, 231, 109, 185, 152, 253, 71, 228, 134, 121, 192, 247, 159, 39, 230, 223, 14, 135, 115, 12, 203, 242, 55, 162, 154, 120, 228, 52, 92, 231, 157, 64, 70, 72, 189, 151, 113, 81, 221, 11}, +{167, 147, 60, 237, 181, 99, 188, 61, 94, 38, 13, 189, 30, 2, 20, 138, 225, 44, 248, 202, 11, 114, 48, 90, 156, 192, 242, 201, 172, 112, 209, 102, 97, 3, 161, 147, 20, 6, 52, 119, 7, 4, 236, 177, 200, 151, 79, 5, 9, 21, 167, 131, 93, 53, 199, 202, 52, 32, 209, 52, 136, 254, 153, 203, 149, 107, 129, 175, 117, 53, 10, 253, 46, 234, 110, 224, 61, 27, 101, 163, 53, 140, 251, 108, 154, 100, 243, 214, 74, 38, 175, 86, 87, 167, 27, 255, 48, 24, 238, 64, 184, 151, 234, 238, 63, 206, 172, 234, 8, 62, 207, 108, 174, 203, 93, 184, 89, 198, 181, 23, 50, 133, 31, 14, 169, 97, 23, 177}, +{99, 51, 25, 188, 60, 2, 188, 83, 93, 0, 239, 197, 186, 22, 202, 215, 178, 97, 243, 145, 16, 236, 85, 125, 69, 228, 30, 119, 100, 100, 58, 54, 121, 110, 29, 113, 138, 36, 229, 202, 196, 228, 158, 44, 119, 11, 223, 246, 250, 72, 137, 148, 142, 223, 216, 130, 213, 23, 252, 133, 179, 98, 24, 131, 32, 158, 90, 158, 217, 129, 233, 98, 203, 9, 171, 97, 47, 237, 81, 39, 223, 153, 191, 216, 157, 164, 30, 234, 38, 90, 16, 175, 138, 163, 242, 129, 33, 20, 60, 158, 157, 223, 185, 221, 127, 134, 186, 94, 71, 43, 195, 211, 78, 113, 194, 56, 96, 250, 227, 161, 99, 56, 159, 57, 95, 58, 152, 29}, +{71, 172, 99, 243, 210, 169, 218, 242, 7, 250, 166, 182, 17, 27, 20, 18, 14, 37, 248, 144, 152, 203, 110, 18, 175, 8, 151, 145, 88, 207, 142, 17, 212, 183, 124, 111, 118, 171, 36, 56, 34, 34, 144, 255, 213, 162, 180, 206, 107, 240, 0, 38, 76, 133, 224, 39, 17, 34, 184, 207, 187, 191, 120, 165, 141, 58, 163, 60, 12, 113, 198, 173, 52, 34, 236, 144, 166, 73, 8, 223, 154, 127, 168, 18, 90, 209, 68, 231, 219, 111, 155, 156, 57, 166, 191, 97, 57, 200, 1, 11, 121, 156, 128, 85, 14, 168, 100, 135, 226, 20, 49, 106, 151, 27, 254, 18, 137, 224, 147, 252, 223, 245, 253, 15, 51, 156, 93, 42}, +{208, 39, 91, 45, 161, 238, 217, 148, 107, 1, 39, 141, 170, 180, 49, 206, 78, 204, 222, 84, 201, 124, 14, 221, 21, 170, 155, 29, 138, 12, 76, 151, 232, 46, 168, 62, 130, 127, 231, 247, 49, 150, 100, 54, 22, 169, 148, 207, 215, 193, 11, 1, 177, 130, 158, 139, 202, 127, 251, 13, 190, 102, 242, 235, 198, 199, 42, 50, 206, 49, 8, 74, 160, 82, 55, 8, 56, 82, 203, 67, 209, 38, 165, 185, 123, 129, 242, 211, 144, 221, 28, 120, 92, 78, 44, 26, 153, 210, 243, 48, 39, 90, 12, 3, 181, 180, 115, 12, 58, 213, 17, 218, 160, 64, 188, 226, 232, 70, 162, 175, 244, 63, 236, 29, 47, 48, 144, 158}, +{92, 180, 229, 50, 52, 27, 218, 175, 137, 142, 166, 13, 40, 141, 3, 173, 114, 243, 27, 100, 201, 88, 144, 248, 221, 107, 249, 20, 177, 104, 215, 99, 70, 228, 144, 195, 170, 75, 2, 5, 93, 191, 93, 20, 152, 113, 117, 20, 23, 246, 119, 170, 16, 95, 33, 71, 172, 50, 249, 220, 71, 146, 129, 21, 205, 111, 46, 178, 246, 237, 117, 255, 36, 20, 158, 178, 55, 185, 139, 142, 248, 96, 138, 11, 239, 251, 249, 130, 87, 214, 34, 245, 41, 83, 207, 184, 53, 55, 205, 172, 49, 13, 167, 105, 17, 119, 219, 192, 23, 129, 112, 66, 249, 137, 47, 23, 58, 109, 103, 26, 199, 201, 35, 73, 185, 202, 195, 33}, +{135, 245, 242, 142, 1, 80, 69, 43, 149, 247, 91, 193, 225, 43, 88, 114, 30, 50, 91, 242, 125, 242, 115, 1, 131, 245, 159, 220, 74, 116, 85, 165, 79, 186, 250, 182, 72, 201, 255, 178, 233, 37, 91, 116, 158, 150, 132, 103, 173, 193, 153, 153, 197, 255, 152, 181, 48, 233, 231, 231, 230, 158, 209, 189, 208, 193, 20, 64, 181, 226, 174, 146, 174, 208, 4, 108, 66, 194, 63, 52, 71, 121, 86, 214, 254, 225, 175, 109, 108, 102, 95, 10, 28, 216, 125, 13, 235, 40, 20, 61, 67, 184, 39, 150, 31, 124, 48, 46, 54, 217, 220, 248, 249, 68, 55, 21, 160, 152, 200, 231, 156, 206, 73, 53, 151, 184, 31, 34}, +{22, 202, 16, 120, 60, 132, 155, 112, 146, 62, 34, 30, 201, 94, 50, 146, 121, 194, 41, 214, 117, 49, 12, 205, 189, 250, 139, 185, 87, 250, 216, 254, 34, 3, 133, 106, 180, 107, 74, 188, 32, 192, 12, 22, 211, 225, 51, 93, 201, 171, 115, 82, 222, 45, 39, 88, 161, 159, 53, 23, 70, 246, 97, 220, 237, 8, 32, 139, 13, 192, 49, 87, 90, 208, 121, 144, 173, 86, 173, 225, 186, 229, 9, 185, 17, 155, 98, 224, 93, 117, 209, 118, 240, 125, 237, 157, 240, 8, 68, 34, 68, 22, 26, 243, 193, 76, 238, 49, 32, 76, 221, 167, 173, 4, 253, 199, 85, 80, 123, 4, 9, 57, 13, 154, 165, 183, 131, 169}, +{161, 167, 51, 195, 251, 155, 200, 239, 64, 183, 223, 160, 32, 27, 214, 11, 83, 44, 78, 203, 255, 46, 87, 141, 91, 178, 37, 185, 27, 54, 106, 177, 141, 217, 131, 56, 130, 169, 103, 64, 106, 227, 11, 101, 1, 86, 169, 133, 96, 145, 95, 103, 79, 129, 71, 172, 98, 184, 118, 204, 203, 241, 50, 41, 122, 220, 213, 78, 223, 247, 73, 19, 39, 47, 57, 136, 172, 183, 207, 154, 127, 33, 94, 209, 217, 160, 32, 170, 229, 202, 126, 52, 101, 157, 55, 183, 39, 167, 125, 83, 241, 13, 124, 168, 178, 203, 111, 50, 88, 136, 87, 216, 41, 244, 36, 128, 237, 100, 132, 5, 204, 188, 151, 212, 177, 225, 71, 10}, +{64, 96, 61, 5, 62, 54, 200, 148, 10, 126, 93, 13, 214, 19, 233, 156, 44, 42, 245, 11, 124, 241, 3, 9, 243, 197, 32, 156, 137, 132, 207, 176, 33, 133, 66, 234, 22, 173, 98, 30, 120, 224, 186, 132, 76, 0, 225, 190, 116, 254, 253, 244, 47, 51, 88, 202, 52, 108, 167, 175, 131, 141, 188, 143, 238, 104, 166, 67, 71, 114, 234, 101, 27, 208, 154, 223, 67, 38, 166, 212, 187, 187, 44, 27, 96, 118, 34, 197, 241, 250, 142, 245, 4, 189, 92, 191, 114, 116, 191, 142, 84, 249, 51, 193, 165, 179, 49, 136, 109, 141, 82, 249, 152, 42, 215, 26, 19, 87, 177, 196, 79, 213, 156, 77, 144, 89, 3, 62}, +{78, 60, 160, 40, 204, 238, 43, 106, 62, 27, 31, 106, 43, 69, 131, 5, 146, 178, 160, 41, 138, 61, 70, 39, 182, 149, 72, 211, 225, 213, 199, 196, 177, 207, 215, 44, 53, 69, 90, 54, 174, 249, 30, 142, 232, 76, 175, 131, 55, 50, 215, 36, 85, 173, 247, 126, 249, 162, 70, 115, 172, 179, 137, 126, 74, 120, 179, 184, 100, 123, 145, 78, 235, 152, 190, 88, 199, 186, 115, 9, 66, 57, 97, 69, 27, 15, 144, 182, 104, 44, 15, 180, 71, 28, 107, 205, 5, 201, 53, 137, 66, 100, 175, 211, 69, 254, 180, 143, 84, 154, 7, 132, 169, 227, 121, 86, 218, 26, 154, 223, 241, 22, 30, 105, 63, 236, 24, 248}, +{66, 143, 224, 79, 66, 254, 48, 90, 249, 56, 145, 236, 165, 5, 190, 177, 94, 242, 5, 45, 185, 27, 218, 215, 247, 100, 144, 103, 127, 217, 89, 46, 21, 60, 190, 41, 91, 242, 166, 178, 105, 70, 35, 238, 46, 7, 43, 162, 137, 72, 31, 245, 211, 40, 24, 44, 13, 230, 116, 64, 209, 248, 44, 159, 13, 197, 64, 203, 58, 193, 17, 145, 240, 149, 101, 143, 158, 103, 229, 247, 4, 92, 47, 242, 84, 141, 183, 190, 65, 218, 179, 67, 230, 79, 43, 86, 222, 100, 165, 160, 141, 62, 224, 73, 197, 45, 142, 15, 92, 11, 227, 237, 39, 52, 147, 243, 198, 138, 131, 160, 145, 87, 214, 71, 28, 19, 246, 127}, +{52, 83, 120, 179, 223, 248, 12, 81, 13, 237, 75, 34, 194, 92, 114, 210, 87, 255, 167, 55, 22, 30, 4, 115, 218, 130, 203, 196, 61, 0, 21, 151, 116, 70, 224, 196, 231, 117, 23, 64, 74, 202, 189, 251, 182, 15, 188, 224, 138, 176, 72, 161, 119, 28, 47, 75, 55, 131, 106, 148, 93, 210, 149, 36, 187, 164, 67, 15, 23, 209, 182, 21, 83, 9, 231, 157, 126, 255, 153, 180, 7, 39, 25, 14, 185, 181, 224, 233, 79, 116, 192, 98, 132, 242, 22, 12, 9, 168, 188, 154, 242, 100, 197, 253, 5, 222, 12, 11, 40, 116, 93, 228, 121, 14, 176, 46, 200, 182, 183, 165, 250, 67, 251, 217, 22, 75, 51, 178}, +{192, 176, 60, 123, 179, 153, 243, 99, 147, 153, 178, 164, 138, 163, 113, 148, 76, 171, 81, 241, 61, 184, 147, 111, 79, 238, 14, 239, 85, 78, 79, 9, 139, 176, 12, 33, 212, 164, 92, 49, 235, 105, 157, 132, 43, 254, 114, 174, 21, 142, 180, 5, 148, 78, 253, 0, 9, 97, 215, 154, 222, 140, 69, 23, 17, 57, 175, 7, 221, 2, 187, 205, 150, 174, 154, 191, 185, 7, 17, 188, 29, 242, 224, 69, 235, 54, 169, 40, 162, 165, 198, 230, 138, 70, 158, 118, 127, 164, 235, 255, 16, 177, 76, 137, 255, 144, 255, 75, 59, 19, 254, 190, 170, 225, 241, 129, 56, 229, 241, 83, 126, 90, 44, 104, 80, 132, 132, 195}, +{170, 156, 23, 24, 35, 62, 109, 186, 107, 170, 53, 184, 147, 40, 143, 232, 187, 124, 127, 44, 158, 209, 159, 77, 38, 234, 142, 20, 162, 217, 146, 8, 102, 14, 5, 48, 245, 201, 104, 161, 104, 125, 140, 237, 185, 169, 123, 212, 24, 147, 196, 243, 56, 136, 42, 208, 166, 120, 51, 12, 110, 224, 6, 214, 246, 213, 38, 190, 95, 117, 184, 159, 94, 175, 231, 15, 250, 111, 244, 154, 193, 34, 139, 105, 98, 117, 187, 239, 110, 212, 122, 112, 4, 137, 71, 1, 161, 58, 209, 221, 15, 101, 70, 99, 20, 89, 147, 81, 211, 36, 228, 124, 39, 136, 210, 69, 89, 205, 118, 122, 85, 67, 134, 90, 210, 9, 88, 247}, +{154, 37, 148, 120, 184, 136, 16, 255, 28, 173, 54, 250, 182, 129, 96, 131, 112, 24, 252, 115, 235, 251, 203, 12, 42, 189, 132, 1, 102, 199, 92, 46, 214, 108, 60, 219, 53, 218, 174, 72, 119, 60, 167, 127, 53, 180, 45, 24, 22, 106, 127, 69, 167, 72, 173, 93, 152, 200, 4, 218, 178, 165, 208, 33, 52, 94, 20, 17, 174, 20, 231, 164, 208, 38, 210, 61, 214, 35, 161, 78, 234, 111, 249, 214, 176, 212, 21, 151, 178, 186, 104, 35, 128, 78, 117, 217, 236, 193, 143, 143, 203, 99, 12, 130, 33, 53, 41, 1, 178, 253, 96, 154, 111, 210, 8, 208, 185, 9, 121, 14, 35, 209, 21, 118, 229, 16, 76, 84}, +{63, 67, 29, 27, 191, 231, 61, 214, 183, 238, 114, 128, 188, 89, 71, 7, 238, 82, 27, 247, 179, 27, 208, 196, 131, 61, 59, 43, 61, 186, 5, 189, 116, 89, 6, 196, 60, 5, 107, 124, 113, 130, 40, 18, 41, 51, 38, 216, 81, 211, 127, 122, 36, 13, 183, 3, 205, 43, 214, 227, 143, 237, 80, 179, 126, 241, 169, 155, 37, 58, 219, 244, 147, 82, 60, 204, 203, 180, 80, 188, 175, 32, 82, 138, 0, 204, 212, 92, 58, 204, 119, 130, 80, 168, 10, 62, 192, 203, 83, 105, 137, 201, 189, 229, 31, 14, 155, 83, 37, 34, 136, 172, 229, 177, 206, 201, 188, 130, 244, 64, 215, 43, 4, 253, 225, 55, 204, 19}, +{18, 246, 28, 197, 161, 106, 125, 243, 98, 74, 11, 63, 158, 251, 239, 207, 135, 145, 216, 180, 195, 66, 137, 172, 52, 234, 129, 61, 16, 43, 137, 68, 242, 172, 93, 166, 52, 219, 229, 216, 143, 92, 228, 129, 174, 227, 71, 220, 74, 228, 134, 222, 110, 2, 13, 235, 24, 74, 81, 25, 129, 70, 50, 7, 148, 155, 254, 226, 194, 249, 250, 237, 205, 228, 186, 92, 50, 240, 169, 106, 99, 82, 48, 228, 195, 106, 236, 92, 220, 4, 81, 77, 167, 183, 113, 140, 78, 124, 236, 136, 195, 76, 79, 242, 209, 100, 118, 83, 112, 125, 89, 16, 114, 238, 207, 106, 236, 221, 162, 9, 200, 164, 7, 67, 38, 120, 15, 214}, +{148, 187, 0, 37, 99, 236, 132, 197, 167, 116, 238, 74, 178, 6, 218, 148, 130, 206, 234, 57, 151, 228, 205, 226, 117, 125, 73, 140, 38, 239, 240, 75, 84, 155, 175, 112, 95, 169, 222, 85, 232, 197, 93, 93, 102, 48, 221, 92, 15, 191, 104, 60, 78, 86, 125, 45, 140, 157, 146, 164, 154, 53, 169, 173, 171, 69, 23, 133, 198, 59, 180, 204, 29, 47, 212, 49, 184, 110, 115, 112, 6, 223, 13, 83, 75, 231, 201, 201, 85, 32, 30, 138, 10, 203, 140, 255, 75, 186, 202, 211, 14, 50, 220, 7, 68, 60, 166, 57, 196, 158, 230, 253, 165, 11, 188, 76, 243, 150, 90, 43, 124, 89, 77, 44, 254, 47, 230, 148}, +{55, 67, 61, 229, 21, 124, 41, 226, 242, 201, 238, 240, 182, 126, 146, 234, 177, 115, 23, 45, 23, 219, 149, 109, 43, 220, 245, 220, 177, 155, 59, 214, 207, 73, 70, 213, 116, 23, 166, 118, 50, 207, 16, 105, 177, 139, 27, 130, 71, 196, 45, 233, 145, 97, 146, 105, 202, 94, 52, 137, 74, 235, 43, 192, 91, 138, 131, 192, 232, 167, 231, 97, 139, 24, 211, 209, 63, 45, 106, 47, 138, 188, 86, 224, 182, 254, 198, 249, 248, 130, 233, 193, 149, 158, 101, 10, 204, 184, 210, 225, 2, 190, 124, 246, 240, 149, 39, 251, 166, 44, 142, 126, 195, 72, 14, 117, 37, 124, 98, 216, 73, 233, 51, 179, 97, 172, 105, 140}, +{171, 5, 55, 8, 46, 77, 15, 21, 100, 150, 52, 189, 82, 88, 96, 139, 105, 217, 38, 87, 123, 237, 2, 177, 148, 56, 171, 116, 204, 151, 40, 249, 108, 119, 37, 46, 19, 240, 234, 36, 31, 38, 140, 194, 43, 113, 123, 33, 103, 33, 199, 124, 67, 17, 70, 88, 207, 149, 148, 132, 2, 169, 46, 207, 77, 237, 170, 8, 80, 137, 206, 236, 33, 3, 135, 187, 244, 232, 216, 32, 175, 22, 214, 247, 119, 15, 108, 86, 251, 73, 153, 13, 75, 149, 17, 6, 234, 174, 111, 140, 78, 207, 203, 120, 44, 142, 242, 32, 139, 205, 167, 164, 229, 96, 55, 121, 246, 140, 252, 152, 121, 142, 118, 70, 7, 97, 4, 156}, +{197, 25, 235, 199, 168, 167, 61, 186, 118, 103, 50, 93, 151, 115, 82, 72, 7, 66, 159, 131, 4, 154, 7, 60, 34, 111, 219, 135, 91, 139, 211, 170, 100, 21, 249, 14, 23, 98, 96, 132, 147, 122, 154, 80, 134, 135, 86, 143, 13, 55, 109, 120, 179, 59, 110, 192, 45, 58, 147, 225, 84, 80, 156, 31, 133, 114, 134, 9, 18, 150, 150, 208, 199, 184, 50, 86, 103, 15, 68, 218, 36, 42, 219, 30, 81, 146, 101, 103, 165, 146, 227, 209, 29, 135, 68, 229, 182, 231, 168, 25, 61, 129, 160, 50, 176, 98, 185, 113, 27, 140, 197, 244, 148, 178, 71, 67, 216, 13, 210, 43, 101, 60, 163, 167, 84, 2, 2, 148}, +{94, 147, 25, 176, 163, 24, 71, 24, 178, 40, 202, 163, 202, 82, 59, 171, 172, 31, 52, 55, 20, 48, 224, 83, 155, 62, 64, 97, 106, 210, 125, 212, 213, 181, 60, 73, 139, 60, 4, 127, 139, 13, 42, 46, 101, 133, 243, 156, 29, 25, 139, 103, 168, 225, 133, 54, 139, 185, 41, 82, 203, 136, 28, 132, 81, 205, 32, 247, 12, 37, 24, 179, 153, 143, 143, 185, 168, 148, 73, 140, 174, 211, 171, 160, 29, 117, 26, 99, 93, 4, 175, 9, 91, 171, 164, 7, 133, 131, 39, 245, 247, 117, 1, 140, 114, 171, 96, 180, 198, 247, 162, 150, 212, 210, 215, 30, 201, 187, 167, 96, 30, 33, 51, 66, 140, 63, 18, 195}, +{41, 107, 178, 81, 214, 6, 138, 186, 229, 19, 205, 110, 186, 121, 226, 200, 234, 127, 140, 17, 87, 40, 252, 57, 232, 106, 231, 82, 29, 148, 210, 116, 241, 140, 136, 114, 134, 183, 231, 84, 157, 75, 220, 144, 43, 219, 181, 236, 82, 182, 217, 12, 201, 14, 92, 236, 221, 6, 221, 250, 198, 138, 171, 73, 114, 105, 189, 236, 36, 85, 116, 181, 160, 214, 53, 182, 255, 128, 93, 241, 22, 177, 16, 225, 226, 248, 52, 19, 22, 109, 102, 88, 96, 131, 175, 108, 57, 133, 24, 204, 255, 91, 61, 2, 84, 14, 159, 110, 113, 73, 192, 1, 73, 142, 135, 13, 58, 173, 231, 242, 3, 127, 0, 38, 33, 121, 219, 248}, +{14, 146, 75, 174, 115, 227, 12, 188, 150, 227, 25, 177, 117, 21, 205, 151, 117, 142, 95, 193, 176, 140, 23, 184, 94, 166, 85, 126, 164, 10, 33, 45, 157, 130, 35, 58, 31, 195, 149, 224, 205, 167, 171, 56, 244, 220, 45, 115, 78, 139, 86, 78, 179, 163, 116, 217, 75, 105, 67, 113, 67, 111, 7, 43, 171, 130, 175, 218, 231, 102, 235, 107, 217, 132, 166, 180, 118, 115, 11, 180, 114, 53, 92, 196, 88, 90, 39, 91, 185, 67, 85, 140, 131, 13, 251, 23, 251, 160, 233, 140, 152, 147, 16, 145, 185, 147, 68, 254, 4, 6, 7, 77, 126, 144, 23, 11, 175, 8, 216, 133, 228, 81, 186, 203, 81, 113, 29, 95}, +{116, 6, 82, 1, 123, 62, 80, 177, 100, 126, 100, 123, 251, 173, 86, 207, 12, 67, 158, 222, 220, 96, 195, 241, 31, 55, 81, 56, 225, 127, 202, 68, 14, 233, 27, 220, 141, 75, 247, 60, 64, 213, 67, 167, 193, 103, 252, 21, 122, 56, 134, 34, 74, 150, 111, 125, 196, 167, 18, 36, 191, 121, 11, 215, 49, 73, 32, 235, 107, 68, 137, 112, 134, 246, 248, 239, 83, 44, 9, 212, 221, 220, 34, 21, 46, 36, 249, 51, 242, 56, 21, 80, 100, 175, 220, 209, 6, 26, 130, 112, 144, 126, 56, 179, 128, 92, 247, 177, 105, 85, 197, 163, 156, 15, 145, 98, 79, 76, 130, 246, 6, 148, 40, 68, 112, 123, 145, 57}, +{151, 16, 22, 48, 213, 182, 96, 163, 72, 181, 14, 222, 194, 194, 12, 126, 59, 104, 120, 219, 153, 212, 97, 140, 121, 93, 232, 114, 116, 91, 83, 232, 39, 225, 6, 228, 130, 154, 22, 22, 147, 132, 135, 10, 217, 186, 211, 94, 141, 146, 78, 5, 103, 159, 29, 150, 47, 122, 239, 191, 135, 109, 52, 243, 248, 253, 153, 97, 27, 64, 19, 23, 12, 108, 182, 89, 252, 124, 92, 209, 249, 87, 209, 226, 175, 232, 50, 89, 100, 212, 125, 17, 85, 177, 47, 122, 204, 85, 25, 56, 93, 110, 222, 156, 15, 162, 49, 189, 253, 141, 45, 184, 136, 8, 59, 146, 153, 224, 12, 33, 5, 216, 243, 222, 117, 97, 101, 55}, +{190, 168, 245, 175, 68, 164, 63, 193, 164, 6, 223, 136, 38, 150, 199, 86, 106, 12, 51, 218, 33, 83, 3, 237, 74, 58, 183, 16, 197, 199, 187, 197, 219, 109, 172, 228, 10, 193, 146, 74, 8, 113, 171, 221, 156, 79, 98, 150, 154, 24, 248, 10, 162, 211, 194, 74, 55, 128, 212, 37, 78, 6, 164, 170, 184, 233, 83, 187, 23, 47, 251, 193, 143, 170, 14, 240, 241, 46, 158, 124, 242, 117, 170, 176, 157, 58, 242, 185, 70, 76, 153, 16, 226, 163, 117, 128, 66, 192, 197, 204, 59, 124, 167, 14, 81, 212, 86, 147, 99, 80, 56, 243, 14, 159, 66, 31, 128, 84, 120, 213, 208, 166, 244, 99, 145, 20, 252, 227}, +{101, 1, 170, 222, 46, 237, 87, 85, 138, 55, 89, 132, 24, 16, 104, 88, 11, 203, 181, 238, 233, 222, 236, 219, 220, 70, 226, 45, 187, 233, 66, 92, 99, 127, 36, 7, 228, 96, 97, 9, 108, 186, 164, 215, 160, 160, 130, 48, 202, 21, 225, 180, 183, 58, 56, 114, 235, 45, 61, 232, 150, 231, 147, 78, 119, 120, 22, 218, 146, 248, 83, 11, 18, 41, 180, 211, 117, 155, 80, 177, 177, 67, 121, 98, 60, 158, 190, 131, 72, 8, 136, 42, 38, 251, 85, 27, 221, 30, 235, 157, 69, 242, 209, 181, 83, 195, 63, 239, 186, 77, 48, 82, 148, 100, 101, 122, 219, 160, 162, 177, 101, 56, 183, 128, 56, 224, 86, 91}, +{160, 148, 161, 235, 69, 81, 125, 174, 179, 104, 52, 147, 115, 113, 174, 123, 164, 35, 226, 123, 124, 151, 90, 181, 104, 40, 49, 33, 221, 136, 232, 101, 128, 102, 35, 196, 196, 221, 61, 67, 18, 196, 80, 219, 154, 47, 168, 27, 72, 228, 201, 165, 255, 251, 132, 244, 165, 46, 196, 16, 191, 101, 82, 95, 113, 98, 90, 2, 27, 131, 248, 46, 53, 114, 31, 249, 86, 136, 149, 216, 220, 239, 244, 212, 238, 199, 23, 110, 168, 168, 111, 128, 179, 138, 148, 201, 32, 219, 79, 146, 67, 138, 115, 45, 133, 10, 52, 246, 87, 100, 73, 251, 102, 16, 88, 139, 179, 135, 123, 228, 82, 238, 167, 182, 60, 3, 81, 135}, +{5, 106, 12, 214, 180, 7, 86, 2, 35, 106, 222, 228, 63, 126, 91, 11, 113, 55, 180, 47, 38, 16, 13, 6, 53, 160, 235, 134, 133, 175, 190, 230, 25, 12, 192, 61, 10, 219, 250, 143, 217, 42, 237, 69, 107, 130, 162, 231, 209, 140, 229, 142, 208, 250, 147, 2, 104, 148, 99, 25, 92, 213, 155, 190, 35, 16, 95, 198, 65, 38, 61, 80, 85, 140, 176, 153, 7, 35, 103, 18, 254, 224, 77, 107, 236, 248, 167, 21, 149, 109, 82, 187, 109, 224, 103, 250, 101, 133, 10, 184, 211, 41, 216, 133, 16, 244, 157, 64, 175, 123, 118, 125, 188, 207, 245, 132, 189, 232, 100, 54, 50, 72, 24, 137, 160, 179, 142, 62}, +{62, 93, 151, 43, 69, 121, 119, 247, 231, 198, 13, 163, 226, 102, 131, 28, 127, 138, 205, 56, 91, 65, 8, 132, 171, 169, 119, 243, 243, 4, 234, 218, 84, 183, 1, 180, 217, 131, 42, 251, 54, 86, 196, 225, 236, 125, 29, 18, 139, 142, 72, 238, 215, 215, 167, 54, 18, 168, 239, 203, 17, 228, 9, 8, 108, 61, 202, 24, 242, 16, 181, 176, 83, 24, 162, 113, 211, 55, 234, 54, 89, 128, 152, 1, 212, 240, 161, 215, 140, 166, 14, 254, 116, 215, 196, 32, 171, 63, 36, 148, 72, 181, 73, 163, 13, 119, 120, 218, 169, 198, 180, 92, 57, 34, 99, 67, 81, 132, 224, 200, 7, 52, 234, 49, 51, 70, 255, 138}, +{179, 139, 38, 197, 71, 31, 195, 82, 37, 187, 45, 175, 124, 139, 177, 169, 39, 137, 202, 86, 162, 215, 82, 5, 158, 145, 117, 62, 44, 239, 252, 103, 99, 100, 116, 111, 182, 207, 61, 247, 83, 37, 229, 179, 255, 186, 172, 196, 48, 106, 164, 91, 109, 98, 22, 137, 46, 12, 81, 78, 231, 52, 186, 254, 9, 165, 64, 179, 99, 89, 154, 201, 78, 63, 110, 205, 207, 233, 208, 237, 42, 195, 17, 154, 101, 252, 235, 178, 85, 101, 32, 36, 169, 165, 241, 138, 64, 71, 66, 234, 16, 115, 132, 185, 177, 34, 77, 72, 218, 176, 107, 8, 138, 75, 83, 89, 80, 202, 163, 230, 177, 254, 138, 254, 57, 214, 228, 231}, +{12, 67, 173, 239, 124, 127, 57, 222, 91, 46, 74, 194, 138, 101, 98, 8, 65, 109, 131, 23, 232, 53, 189, 176, 244, 70, 69, 233, 171, 167, 13, 63, 11, 19, 69, 42, 182, 232, 117, 66, 28, 165, 0, 102, 164, 162, 253, 222, 146, 239, 202, 189, 123, 111, 94, 100, 124, 126, 235, 239, 231, 121, 186, 125, 90, 2, 67, 216, 59, 243, 176, 213, 255, 173, 79, 56, 28, 122, 63, 103, 21, 193, 209, 24, 3, 208, 43, 95, 249, 229, 110, 27, 157, 158, 77, 113, 192, 156, 15, 30, 166, 47, 200, 167, 90, 87, 116, 212, 174, 53, 231, 95, 120, 72, 184, 107, 88, 172, 213, 133, 101, 63, 50, 110, 153, 249, 133, 25}, +{136, 34, 235, 32, 84, 164, 149, 4, 50, 122, 66, 6, 121, 212, 30, 6, 199, 149, 130, 185, 170, 162, 217, 242, 18, 46, 76, 177, 170, 136, 202, 187, 179, 95, 188, 203, 37, 144, 188, 45, 14, 245, 254, 181, 26, 173, 137, 121, 44, 113, 130, 125, 248, 98, 57, 187, 38, 61, 111, 65, 208, 119, 23, 224, 41, 143, 85, 55, 35, 253, 75, 182, 114, 55, 199, 51, 245, 219, 173, 180, 74, 217, 124, 233, 205, 119, 37, 68, 238, 246, 190, 105, 66, 148, 4, 140, 57, 240, 226, 121, 176, 155, 41, 5, 116, 83, 170, 241, 113, 139, 176, 133, 226, 69, 183, 107, 109, 36, 52, 214, 20, 26, 154, 62, 184, 113, 64, 67}, +{96, 220, 182, 84, 18, 144, 194, 2, 165, 240, 136, 243, 239, 53, 160, 84, 101, 183, 69, 59, 124, 182, 37, 209, 167, 206, 128, 65, 99, 18, 249, 254, 150, 204, 15, 37, 180, 44, 255, 248, 185, 74, 165, 18, 119, 6, 154, 201, 174, 179, 41, 194, 167, 65, 161, 8, 155, 219, 179, 7, 163, 114, 124, 252, 4, 215, 56, 51, 239, 48, 64, 19, 159, 28, 215, 248, 73, 35, 117, 94, 149, 230, 33, 197, 63, 135, 94, 103, 215, 79, 78, 36, 11, 14, 137, 79, 179, 107, 253, 139, 191, 139, 20, 34, 2, 229, 124, 253, 224, 67, 232, 68, 69, 158, 226, 81, 96, 243, 61, 56, 29, 205, 28, 151, 132, 206, 69, 112}, +{204, 21, 110, 68, 150, 136, 162, 151, 143, 71, 143, 160, 226, 236, 180, 7, 28, 110, 30, 87, 71, 182, 49, 220, 159, 104, 161, 65, 108, 181, 13, 239, 172, 161, 73, 167, 243, 147, 145, 51, 49, 28, 177, 0, 18, 21, 127, 88, 166, 86, 194, 243, 158, 55, 38, 151, 26, 184, 65, 47, 241, 59, 104, 103, 61, 40, 141, 134, 16, 248, 30, 111, 86, 199, 226, 66, 169, 88, 145, 19, 116, 142, 140, 206, 105, 22, 1, 25, 4, 221, 28, 19, 172, 164, 204, 134, 42, 175, 190, 103, 33, 19, 180, 29, 41, 191, 129, 74, 18, 52, 223, 96, 152, 45, 51, 141, 248, 106, 169, 168, 109, 130, 21, 197, 16, 84, 183, 0}, +{29, 178, 234, 45, 231, 117, 166, 138, 251, 163, 152, 88, 239, 120, 133, 78, 20, 255, 200, 249, 0, 14, 227, 40, 15, 126, 252, 227, 212, 224, 161, 174, 22, 238, 206, 163, 37, 205, 16, 182, 79, 128, 198, 185, 104, 86, 174, 42, 62, 23, 152, 87, 8, 26, 190, 214, 79, 100, 124, 73, 135, 236, 76, 62, 187, 125, 186, 8, 166, 20, 215, 34, 172, 51, 68, 224, 85, 32, 48, 161, 213, 217, 97, 245, 112, 207, 40, 35, 64, 209, 187, 240, 46, 15, 114, 37, 144, 125, 14, 24, 53, 171, 161, 109, 73, 245, 85, 35, 54, 152, 121, 193, 75, 210, 126, 122, 244, 229, 228, 110, 20, 190, 14, 7, 103, 36, 71, 27}, +{139, 172, 201, 112, 173, 16, 21, 41, 170, 38, 58, 23, 135, 15, 45, 33, 163, 30, 118, 23, 89, 113, 43, 241, 175, 72, 13, 213, 92, 37, 46, 19, 149, 46, 48, 174, 114, 222, 216, 105, 213, 152, 75, 220, 178, 199, 12, 214, 183, 196, 19, 208, 121, 61, 87, 228, 202, 93, 230, 8, 160, 219, 93, 103, 190, 169, 1, 235, 139, 174, 109, 186, 102, 70, 131, 64, 216, 184, 202, 148, 62, 184, 144, 78, 149, 1, 250, 57, 20, 161, 132, 50, 94, 190, 125, 134, 86, 82, 47, 94, 101, 122, 150, 35, 233, 135, 190, 63, 89, 231, 53, 191, 194, 179, 210, 92, 207, 116, 242, 62, 148, 241, 72, 108, 27, 130, 88, 66}, +{144, 20, 13, 151, 162, 205, 139, 36, 174, 219, 28, 62, 59, 88, 210, 52, 141, 51, 233, 186, 56, 106, 177, 17, 213, 152, 202, 179, 131, 23, 164, 106, 152, 36, 240, 90, 203, 51, 175, 29, 250, 73, 176, 64, 158, 39, 141, 153, 94, 93, 35, 157, 131, 85, 96, 206, 168, 6, 162, 251, 224, 225, 136, 159, 148, 119, 196, 86, 146, 101, 234, 243, 111, 167, 4, 35, 118, 228, 169, 143, 195, 129, 218, 254, 97, 224, 205, 229, 165, 182, 244, 248, 195, 215, 238, 49, 198, 44, 46, 5, 39, 254, 250, 227, 247, 142, 27, 202, 96, 239, 22, 123, 231, 16, 235, 199, 81, 169, 252, 14, 137, 255, 193, 174, 239, 193, 192, 243}, +{168, 246, 255, 91, 199, 53, 80, 199, 245, 23, 56, 142, 79, 86, 125, 151, 159, 104, 156, 48, 132, 180, 187, 244, 162, 34, 46, 80, 5, 131, 242, 134, 174, 226, 97, 154, 28, 248, 121, 183, 87, 48, 118, 239, 221, 74, 183, 87, 131, 78, 184, 14, 217, 31, 237, 133, 58, 124, 88, 250, 31, 200, 140, 127, 142, 82, 180, 243, 229, 81, 136, 11, 180, 211, 18, 57, 208, 147, 248, 223, 34, 46, 127, 233, 172, 95, 95, 171, 77, 31, 125, 143, 15, 253, 112, 126, 113, 72, 40, 177, 69, 139, 97, 124, 193, 56, 247, 240, 180, 189, 91, 128, 52, 121, 188, 115, 255, 60, 59, 251, 0, 156, 75, 186, 234, 45, 99, 145}, +{12, 218, 32, 118, 214, 215, 203, 179, 208, 123, 72, 9, 48, 123, 207, 205, 83, 65, 174, 98, 174, 75, 249, 122, 144, 175, 225, 252, 153, 80, 215, 141, 88, 124, 146, 83, 139, 148, 158, 121, 34, 205, 16, 231, 61, 42, 25, 72, 23, 115, 145, 118, 73, 131, 135, 191, 252, 134, 214, 112, 95, 164, 27, 107, 95, 92, 252, 194, 64, 89, 209, 28, 4, 232, 79, 7, 220, 54, 195, 96, 60, 205, 52, 66, 135, 170, 98, 64, 136, 24, 178, 34, 231, 223, 249, 39, 216, 20, 161, 77, 225, 12, 254, 120, 130, 90, 4, 153, 237, 195, 206, 69, 56, 182, 78, 167, 130, 87, 195, 29, 198, 66, 185, 71, 209, 92, 159, 230}, +{185, 145, 180, 49, 155, 168, 20, 75, 229, 57, 61, 243, 242, 159, 226, 221, 62, 173, 121, 104, 150, 191, 28, 203, 252, 121, 72, 162, 97, 190, 251, 113, 239, 88, 39, 178, 251, 213, 204, 151, 72, 174, 40, 124, 166, 243, 70, 41, 8, 174, 95, 29, 144, 20, 176, 126, 192, 174, 33, 53, 64, 180, 65, 213, 4, 119, 172, 131, 144, 210, 225, 97, 202, 108, 169, 175, 95, 234, 206, 85, 97, 58, 22, 186, 118, 20, 133, 140, 84, 144, 231, 185, 6, 60, 58, 243, 214, 203, 128, 20, 153, 72, 8, 127, 36, 193, 175, 67, 213, 192, 69, 161, 19, 182, 2, 202, 169, 60, 32, 74, 85, 96, 75, 172, 99, 109, 12, 210}, +{160, 11, 131, 234, 229, 0, 16, 182, 217, 11, 87, 178, 153, 252, 174, 56, 140, 16, 54, 165, 104, 255, 72, 39, 132, 44, 128, 145, 183, 36, 78, 106, 171, 126, 7, 98, 196, 80, 178, 165, 203, 220, 132, 182, 39, 174, 47, 204, 253, 214, 251, 189, 150, 237, 153, 76, 76, 5, 76, 140, 127, 186, 144, 49, 17, 54, 227, 98, 122, 84, 184, 27, 130, 139, 201, 4, 121, 233, 86, 7, 158, 64, 46, 209, 138, 203, 60, 211, 249, 197, 28, 75, 44, 195, 190, 151, 175, 241, 4, 153, 203, 60, 91, 110, 243, 79, 75, 239, 168, 23, 171, 138, 101, 75, 254, 136, 215, 146, 55, 108, 5, 183, 17, 229, 209, 129, 55, 142}, +{160, 250, 119, 127, 176, 84, 146, 94, 231, 120, 84, 215, 52, 64, 213, 111, 84, 198, 74, 111, 74, 106, 195, 195, 251, 30, 148, 49, 53, 135, 31, 224, 130, 201, 166, 213, 76, 37, 6, 126, 160, 31, 158, 10, 215, 14, 58, 119, 250, 126, 166, 64, 165, 225, 195, 44, 128, 148, 55, 35, 6, 161, 246, 67, 199, 149, 144, 18, 55, 63, 228, 127, 9, 164, 197, 75, 17, 136, 226, 122, 165, 225, 34, 155, 80, 179, 79, 109, 36, 57, 215, 156, 26, 106, 241, 173, 46, 127, 14, 192, 172, 31, 133, 60, 78, 210, 188, 255, 179, 133, 218, 179, 19, 137, 124, 92, 207, 82, 20, 107, 76, 124, 191, 191, 115, 255, 156, 174}, +{42, 129, 254, 72, 5, 122, 189, 199, 67, 115, 84, 78, 253, 179, 44, 146, 8, 51, 38, 58, 50, 108, 80, 170, 233, 188, 102, 100, 179, 66, 62, 165, 151, 98, 109, 171, 148, 68, 206, 46, 198, 148, 168, 149, 255, 6, 39, 220, 142, 120, 242, 155, 9, 44, 58, 24, 0, 66, 22, 195, 161, 54, 49, 217, 177, 65, 123, 1, 113, 254, 231, 212, 192, 121, 57, 160, 120, 213, 33, 73, 164, 155, 65, 15, 138, 252, 114, 50, 140, 98, 68, 72, 156, 222, 148, 12, 61, 163, 51, 11, 223, 4, 193, 197, 178, 238, 77, 184, 10, 64, 51, 223, 168, 96, 169, 195, 171, 172, 225, 236, 215, 107, 240, 209, 162, 120, 137, 162}, +{164, 139, 67, 107, 168, 9, 118, 5, 141, 165, 233, 85, 235, 249, 196, 91, 248, 234, 54, 50, 81, 194, 96, 60, 91, 223, 137, 95, 59, 182, 199, 66, 116, 166, 20, 209, 207, 165, 192, 56, 146, 48, 127, 67, 152, 117, 246, 25, 246, 172, 167, 11, 200, 99, 76, 27, 18, 73, 248, 104, 49, 232, 8, 137, 74, 112, 79, 144, 161, 114, 136, 157, 136, 69, 151, 15, 158, 103, 254, 239, 219, 13, 104, 182, 204, 84, 226, 114, 181, 83, 79, 205, 67, 112, 149, 68, 31, 109, 214, 61, 25, 251, 224, 210, 12, 59, 32, 170, 210, 12, 164, 46, 56, 24, 235, 221, 107, 135, 156, 239, 112, 104, 20, 52, 4, 166, 236, 39}, +{90, 33, 244, 252, 198, 77, 73, 212, 94, 77, 169, 130, 59, 103, 28, 184, 27, 12, 3, 43, 107, 228, 117, 216, 70, 104, 83, 64, 213, 109, 59, 1, 40, 58, 232, 157, 28, 170, 96, 223, 158, 46, 113, 181, 67, 194, 69, 34, 12, 145, 89, 252, 136, 40, 160, 75, 10, 60, 178, 137, 166, 176, 113, 77, 136, 8, 79, 119, 104, 52, 65, 100, 160, 82, 221, 64, 189, 168, 168, 60, 115, 6, 9, 153, 87, 132, 150, 23, 74, 213, 90, 255, 45, 196, 182, 114, 81, 172, 235, 52, 83, 96, 206, 106, 159, 137, 232, 147, 247, 43, 39, 10, 46, 6, 67, 250, 169, 100, 46, 54, 120, 106, 232, 72, 147, 184, 179, 222}, +{42, 170, 75, 8, 215, 251, 134, 123, 103, 200, 85, 28, 148, 56, 57, 14, 12, 107, 11, 92, 62, 164, 170, 125, 164, 66, 189, 42, 107, 194, 111, 235, 137, 82, 10, 27, 168, 185, 93, 216, 215, 235, 111, 179, 109, 16, 187, 106, 116, 250, 62, 131, 81, 67, 48, 52, 197, 75, 91, 251, 232, 24, 155, 80, 81, 255, 71, 164, 67, 110, 15, 80, 127, 176, 140, 87, 226, 222, 5, 157, 213, 197, 82, 88, 26, 234, 61, 120, 126, 71, 223, 153, 135, 9, 140, 127, 68, 221, 3, 189, 189, 202, 199, 19, 189, 204, 125, 66, 77, 119, 187, 129, 155, 43, 67, 24, 234, 239, 111, 238, 213, 120, 98, 67, 70, 216, 172, 46}, +{172, 75, 195, 9, 220, 88, 124, 57, 217, 207, 237, 57, 113, 124, 108, 111, 118, 171, 193, 215, 232, 33, 61, 208, 244, 42, 255, 128, 223, 193, 193, 133, 18, 100, 41, 1, 124, 70, 177, 252, 207, 176, 210, 37, 52, 147, 88, 63, 51, 216, 129, 237, 14, 46, 112, 115, 89, 136, 245, 180, 57, 181, 110, 85, 188, 227, 20, 168, 60, 123, 189, 20, 182, 157, 64, 194, 67, 89, 179, 177, 109, 94, 41, 121, 116, 30, 67, 185, 90, 177, 37, 34, 144, 94, 184, 181, 13, 137, 7, 183, 118, 80, 252, 137, 208, 231, 250, 50, 33, 250, 185, 54, 242, 239, 22, 91, 210, 227, 214, 42, 207, 220, 146, 233, 53, 210, 188, 137}, +{176, 84, 27, 27, 152, 186, 140, 31, 79, 183, 115, 139, 83, 240, 165, 124, 29, 158, 43, 113, 206, 113, 24, 41, 126, 89, 8, 230, 39, 181, 105, 177, 231, 215, 173, 123, 19, 213, 252, 195, 97, 4, 44, 56, 218, 2, 165, 4, 222, 35, 165, 180, 39, 99, 119, 240, 55, 54, 182, 74, 15, 184, 92, 210, 130, 137, 52, 248, 160, 71, 15, 184, 230, 170, 119, 210, 150, 116, 20, 121, 21, 177, 186, 189, 66, 144, 217, 163, 16, 44, 249, 75, 24, 248, 206, 128, 112, 129, 112, 26, 210, 10, 152, 223, 73, 212, 127, 62, 101, 249, 13, 166, 129, 52, 138, 186, 210, 217, 134, 253, 34, 186, 219, 79, 196, 143, 21, 63}, +{192, 39, 84, 88, 97, 147, 48, 255, 103, 135, 200, 167, 76, 123, 187, 197, 237, 240, 5, 98, 159, 219, 170, 56, 229, 11, 179, 4, 134, 70, 105, 148, 170, 208, 227, 74, 185, 138, 1, 103, 0, 242, 233, 57, 72, 132, 116, 247, 64, 192, 76, 205, 132, 139, 130, 135, 137, 21, 152, 71, 91, 11, 173, 128, 221, 97, 169, 87, 61, 156, 234, 3, 214, 117, 10, 1, 42, 22, 23, 156, 57, 12, 242, 232, 20, 59, 187, 161, 123, 103, 238, 204, 239, 113, 85, 57, 135, 222, 220, 136, 179, 137, 107, 70, 118, 217, 151, 8, 5, 89, 58, 129, 129, 155, 77, 142, 115, 247, 192, 251, 211, 40, 142, 164, 246, 50, 71, 25}, +{172, 250, 193, 95, 180, 195, 171, 95, 115, 107, 113, 26, 63, 229, 253, 115, 179, 203, 54, 4, 226, 58, 40, 193, 124, 110, 198, 110, 254, 114, 252, 136, 47, 155, 194, 75, 215, 133, 17, 44, 65, 88, 197, 176, 255, 138, 165, 212, 254, 216, 89, 186, 104, 160, 223, 171, 82, 236, 201, 195, 61, 165, 144, 253, 108, 58, 233, 170, 72, 203, 206, 186, 197, 255, 118, 119, 184, 235, 227, 19, 254, 140, 100, 203, 205, 149, 225, 152, 195, 60, 25, 17, 138, 161, 202, 38, 186, 186, 151, 52, 36, 239, 143, 161, 75, 189, 191, 100, 60, 174, 119, 58, 59, 128, 211, 162, 78, 47, 194, 60, 191, 244, 247, 232, 204, 62, 67, 22}, +{37, 218, 252, 44, 227, 82, 46, 161, 221, 180, 9, 245, 21, 241, 22, 232, 140, 222, 101, 166, 26, 230, 135, 100, 149, 103, 76, 86, 176, 103, 200, 113, 24, 249, 175, 237, 147, 214, 211, 4, 143, 248, 40, 106, 15, 8, 111, 14, 237, 219, 18, 133, 154, 112, 163, 171, 215, 156, 133, 168, 11, 146, 21, 88, 223, 129, 145, 98, 50, 144, 89, 54, 164, 120, 140, 10, 114, 208, 63, 120, 2, 58, 200, 158, 128, 39, 150, 7, 11, 143, 240, 6, 210, 13, 84, 186, 240, 87, 238, 39, 155, 75, 201, 211, 41, 243, 104, 124, 102, 244, 21, 138, 29, 228, 168, 36, 141, 17, 121, 193, 15, 66, 210, 136, 212, 18, 48, 179}, +{167, 184, 201, 247, 45, 165, 170, 75, 65, 22, 183, 246, 172, 243, 19, 62, 98, 63, 123, 3, 220, 181, 220, 41, 240, 18, 146, 47, 168, 116, 72, 119, 252, 111, 80, 202, 229, 166, 11, 174, 165, 111, 23, 250, 183, 8, 217, 84, 224, 23, 72, 83, 49, 205, 216, 96, 121, 249, 130, 96, 29, 78, 37, 182, 218, 172, 22, 70, 95, 37, 255, 178, 63, 194, 91, 64, 246, 217, 170, 157, 210, 40, 7, 15, 2, 233, 99, 60, 50, 50, 73, 28, 89, 187, 122, 171, 83, 236, 246, 53, 109, 30, 109, 90, 243, 214, 106, 130, 59, 99, 55, 217, 175, 232, 234, 91, 122, 237, 39, 11, 82, 214, 123, 168, 15, 111, 184, 84}, +{100, 223, 51, 202, 49, 74, 148, 121, 176, 115, 171, 178, 239, 190, 157, 114, 10, 216, 73, 222, 255, 136, 57, 116, 137, 103, 142, 75, 85, 239, 30, 54, 114, 125, 207, 36, 192, 125, 230, 96, 71, 196, 46, 108, 69, 178, 35, 211, 247, 13, 122, 73, 254, 98, 130, 233, 84, 119, 171, 28, 56, 66, 108, 122, 93, 71, 73, 71, 91, 113, 248, 18, 193, 198, 128, 101, 165, 141, 202, 198, 47, 165, 41, 233, 83, 62, 15, 127, 193, 40, 80, 100, 4, 246, 198, 115, 5, 79, 67, 187, 14, 25, 34, 184, 39, 212, 28, 15, 11, 126, 144, 87, 81, 250, 118, 154, 254, 205, 129, 59, 172, 168, 77, 64, 233, 192, 176, 139}, +{91, 248, 99, 230, 163, 73, 28, 253, 100, 97, 15, 109, 234, 68, 2, 70, 48, 236, 91, 113, 245, 84, 65, 72, 232, 209, 120, 21, 121, 85, 108, 46, 201, 6, 81, 178, 19, 92, 114, 15, 127, 179, 137, 149, 175, 195, 40, 161, 21, 79, 173, 145, 182, 66, 86, 39, 219, 162, 43, 106, 207, 145, 85, 202, 46, 84, 71, 226, 137, 148, 243, 12, 139, 72, 167, 199, 230, 72, 18, 178, 167, 196, 17, 229, 110, 178, 232, 91, 163, 250, 149, 78, 33, 16, 87, 184, 136, 42, 84, 86, 7, 223, 43, 64, 123, 218, 212, 72, 128, 32, 192, 217, 228, 170, 2, 215, 51, 205, 229, 155, 107, 71, 153, 168, 167, 32, 203, 29}, +{91, 119, 222, 205, 34, 129, 170, 25, 189, 96, 190, 15, 162, 207, 149, 249, 246, 105, 251, 135, 28, 27, 14, 232, 39, 41, 246, 210, 248, 111, 150, 198, 19, 108, 99, 222, 57, 132, 96, 221, 45, 8, 136, 153, 37, 249, 156, 20, 42, 189, 210, 214, 161, 172, 196, 190, 160, 199, 118, 54, 34, 91, 44, 122, 39, 187, 137, 250, 194, 234, 113, 205, 152, 152, 29, 101, 211, 235, 2, 50, 156, 220, 181, 48, 47, 67, 125, 179, 83, 37, 206, 12, 60, 39, 235, 39, 176, 82, 165, 60, 161, 131, 70, 157, 147, 5, 84, 15, 148, 71, 130, 43, 54, 62, 70, 250, 67, 241, 42, 73, 128, 171, 15, 234, 103, 37, 187, 248}, +{89, 46, 33, 4, 38, 54, 26, 102, 249, 236, 171, 0, 101, 55, 136, 157, 231, 240, 192, 49, 36, 99, 32, 108, 91, 98, 49, 110, 181, 105, 67, 247, 11, 112, 175, 167, 106, 203, 183, 75, 159, 12, 4, 234, 3, 6, 168, 159, 130, 254, 6, 165, 35, 184, 115, 184, 226, 9, 56, 164, 106, 61, 148, 45, 130, 118, 141, 18, 93, 166, 185, 210, 88, 248, 128, 164, 179, 114, 95, 231, 185, 91, 230, 19, 115, 24, 25, 220, 85, 187, 156, 92, 153, 66, 165, 118, 115, 112, 116, 185, 143, 33, 191, 215, 63, 67, 159, 56, 63, 158, 144, 90, 182, 119, 151, 73, 134, 158, 86, 232, 244, 49, 153, 14, 218, 175, 47, 211}, +{175, 31, 86, 250, 41, 217, 151, 190, 13, 64, 88, 46, 14, 14, 32, 178, 244, 80, 253, 226, 106, 139, 93, 101, 5, 168, 57, 219, 190, 169, 139, 195, 216, 96, 102, 61, 50, 188, 189, 110, 32, 161, 50, 150, 27, 89, 109, 230, 175, 228, 14, 222, 147, 132, 130, 239, 236, 137, 70, 164, 146, 175, 187, 23, 152, 82, 26, 123, 89, 32, 133, 77, 255, 6, 49, 162, 98, 115, 71, 253, 108, 90, 11, 236, 170, 142, 62, 18, 58, 130, 21, 180, 160, 98, 57, 133, 228, 114, 23, 192, 21, 196, 80, 217, 95, 38, 86, 18, 92, 169, 180, 60, 70, 10, 241, 20, 6, 59, 198, 47, 54, 151, 161, 186, 186, 31, 233, 117}, +{179, 45, 249, 19, 146, 235, 253, 196, 121, 96, 115, 125, 212, 53, 213, 0, 84, 19, 132, 187, 168, 194, 200, 74, 197, 144, 63, 99, 121, 52, 115, 46, 195, 187, 231, 123, 8, 49, 64, 111, 83, 127, 23, 116, 218, 213, 224, 37, 199, 210, 2, 29, 136, 99, 129, 215, 185, 171, 179, 63, 62, 154, 153, 218, 135, 225, 202, 108, 38, 66, 82, 93, 148, 202, 166, 27, 207, 193, 77, 197, 252, 231, 174, 162, 234, 255, 187, 88, 206, 60, 224, 198, 176, 52, 230, 89, 216, 193, 138, 221, 108, 119, 185, 42, 214, 125, 233, 115, 89, 94, 61, 194, 92, 5, 222, 228, 221, 177, 7, 2, 56, 84, 67, 93, 167, 48, 71, 216}, +{160, 116, 91, 69, 197, 73, 226, 250, 32, 255, 130, 168, 170, 74, 73, 168, 204, 161, 130, 87, 188, 204, 106, 226, 42, 33, 41, 224, 147, 234, 52, 124, 102, 122, 41, 11, 1, 166, 209, 108, 107, 113, 44, 97, 84, 26, 130, 198, 176, 252, 232, 31, 125, 219, 242, 146, 10, 208, 189, 43, 221, 119, 155, 169, 221, 209, 203, 187, 130, 210, 150, 91, 38, 3, 52, 53, 160, 147, 155, 14, 179, 177, 41, 122, 185, 216, 0, 169, 90, 193, 12, 29, 8, 156, 21, 97, 180, 115, 149, 241, 225, 149, 19, 159, 77, 198, 239, 39, 0, 53, 6, 38, 175, 156, 92, 134, 197, 236, 149, 42, 39, 5, 176, 110, 214, 39, 253, 236}, +{198, 175, 80, 7, 161, 45, 29, 86, 198, 148, 147, 101, 112, 185, 248, 231, 124, 245, 86, 169, 123, 117, 112, 136, 133, 75, 106, 78, 95, 224, 32, 69, 249, 14, 184, 192, 49, 152, 43, 80, 9, 99, 121, 3, 174, 82, 171, 92, 84, 109, 8, 56, 214, 49, 36, 181, 83, 155, 78, 47, 215, 38, 228, 69, 32, 36, 148, 49, 229, 206, 66, 121, 95, 238, 137, 19, 194, 217, 100, 108, 204, 10, 121, 1, 250, 169, 181, 33, 155, 0, 53, 63, 193, 10, 80, 188, 162, 215, 20, 118, 31, 245, 96, 74, 32, 175, 75, 102, 33, 229, 173, 224, 114, 190, 236, 111, 44, 27, 145, 204, 202, 47, 233, 108, 57, 59, 24, 220}, +{49, 100, 212, 90, 64, 112, 208, 232, 41, 55, 35, 193, 19, 164, 213, 205, 134, 240, 184, 206, 8, 175, 33, 61, 120, 90, 139, 145, 84, 166, 207, 60, 119, 176, 7, 235, 53, 190, 62, 243, 248, 66, 63, 104, 105, 184, 44, 144, 68, 215, 211, 75, 68, 201, 18, 63, 226, 131, 207, 144, 137, 148, 162, 106, 130, 118, 169, 58, 166, 121, 118, 143, 125, 0, 59, 18, 35, 182, 182, 82, 71, 150, 24, 159, 14, 167, 98, 241, 35, 75, 60, 183, 113, 223, 142, 133, 50, 252, 222, 121, 6, 79, 234, 252, 125, 72, 43, 233, 80, 165, 10, 199, 1, 186, 39, 178, 131, 59, 33, 203, 73, 211, 122, 230, 64, 41, 92, 4}, +{107, 178, 3, 246, 8, 1, 108, 125, 43, 68, 243, 151, 188, 90, 124, 134, 254, 222, 247, 101, 180, 44, 65, 75, 51, 33, 146, 214, 30, 132, 218, 36, 65, 54, 8, 63, 224, 49, 182, 3, 231, 61, 232, 2, 15, 222, 49, 61, 63, 13, 231, 210, 156, 255, 170, 246, 22, 140, 202, 63, 206, 233, 96, 237, 142, 128, 84, 216, 11, 163, 26, 104, 177, 94, 182, 215, 45, 58, 237, 172, 241, 220, 219, 148, 87, 230, 87, 100, 98, 129, 49, 80, 146, 225, 127, 20, 47, 254, 115, 242, 248, 9, 57, 255, 200, 102, 117, 19, 139, 144, 110, 1, 30, 154, 30, 250, 225, 237, 238, 50, 3, 125, 69, 164, 122, 45, 82, 107}, +{34, 8, 186, 138, 235, 35, 239, 104, 13, 214, 48, 137, 203, 242, 249, 246, 158, 28, 204, 230, 102, 62, 147, 49, 30, 185, 21, 180, 218, 50, 177, 62, 168, 158, 203, 28, 136, 207, 31, 154, 118, 203, 152, 54, 187, 15, 153, 181, 84, 103, 47, 245, 164, 224, 100, 82, 178, 242, 86, 116, 171, 235, 192, 123, 62, 135, 147, 152, 79, 166, 214, 221, 16, 75, 112, 12, 18, 216, 114, 9, 133, 195, 227, 96, 15, 122, 108, 232, 69, 13, 59, 71, 12, 225, 169, 250, 103, 102, 114, 105, 136, 190, 129, 51, 104, 194, 40, 44, 59, 45, 168, 229, 17, 184, 239, 229, 80, 164, 213, 22, 111, 76, 248, 156, 158, 63, 138, 7}, +{28, 228, 21, 194, 171, 123, 243, 96, 2, 161, 154, 89, 251, 76, 153, 81, 220, 134, 77, 102, 242, 55, 121, 193, 209, 83, 226, 129, 239, 9, 226, 181, 244, 231, 163, 49, 94, 132, 126, 46, 238, 154, 168, 202, 200, 210, 118, 249, 246, 201, 95, 116, 110, 48, 1, 92, 28, 36, 104, 174, 7, 93, 227, 234, 205, 174, 62, 23, 220, 90, 15, 174, 15, 117, 162, 86, 222, 94, 83, 30, 248, 174, 160, 206, 9, 150, 72, 207, 206, 139, 245, 137, 232, 157, 61, 98, 87, 113, 11, 196, 247, 136, 45, 248, 191, 65, 58, 158, 138, 204, 71, 209, 228, 109, 149, 248, 213, 50, 69, 184, 159, 203, 245, 143, 65, 111, 182, 205}, +{143, 7, 176, 192, 219, 193, 80, 240, 114, 228, 74, 70, 198, 34, 65, 126, 197, 105, 226, 175, 124, 49, 231, 201, 144, 71, 138, 121, 105, 125, 221, 145, 209, 11, 189, 65, 159, 238, 205, 225, 13, 230, 88, 75, 171, 95, 123, 175, 47, 158, 178, 194, 9, 2, 210, 161, 199, 24, 73, 25, 56, 93, 114, 216, 149, 105, 215, 197, 25, 224, 184, 15, 188, 141, 89, 186, 43, 209, 110, 21, 247, 83, 40, 143, 137, 132, 22, 214, 208, 156, 75, 170, 106, 140, 189, 69, 212, 216, 116, 156, 2, 244, 172, 127, 244, 54, 161, 208, 108, 46, 143, 215, 37, 84, 189, 130, 141, 131, 35, 118, 78, 233, 221, 58, 75, 38, 241, 234}, +{179, 195, 233, 45, 247, 166, 146, 131, 184, 24, 77, 115, 208, 119, 83, 184, 111, 203, 138, 197, 202, 92, 188, 46, 36, 11, 122, 219, 112, 143, 68, 248, 47, 205, 183, 161, 238, 189, 159, 223, 103, 160, 167, 10, 101, 109, 198, 81, 31, 73, 157, 173, 249, 27, 69, 48, 233, 8, 108, 29, 119, 216, 30, 238, 80, 14, 223, 90, 137, 152, 214, 155, 71, 136, 211, 126, 27, 139, 10, 73, 28, 38, 25, 33, 238, 29, 129, 192, 119, 148, 57, 213, 174, 165, 100, 101, 114, 112, 102, 129, 111, 209, 21, 223, 231, 95, 205, 37, 91, 18, 106, 195, 194, 150, 163, 86, 174, 71, 155, 146, 183, 93, 9, 33, 136, 191, 123, 144}, +{13, 10, 81, 204, 225, 77, 174, 207, 114, 243, 17, 218, 208, 63, 83, 226, 116, 20, 92, 149, 139, 192, 201, 140, 26, 227, 73, 34, 114, 140, 131, 93, 209, 74, 101, 249, 96, 202, 199, 93, 133, 228, 70, 153, 221, 134, 4, 20, 21, 232, 229, 224, 177, 4, 135, 75, 245, 193, 64, 94, 129, 165, 220, 145, 172, 192, 217, 136, 210, 27, 206, 231, 32, 173, 172, 92, 194, 123, 217, 119, 39, 121, 205, 1, 110, 11, 123, 208, 117, 235, 87, 92, 90, 214, 91, 188, 147, 83, 229, 70, 133, 174, 103, 162, 149, 102, 142, 53, 119, 125, 56, 63, 198, 54, 86, 91, 199, 109, 44, 113, 45, 211, 14, 209, 70, 51, 67, 43}, +{79, 111, 9, 177, 171, 85, 88, 107, 30, 62, 192, 136, 170, 187, 160, 117, 223, 167, 132, 179, 136, 128, 153, 158, 203, 29, 30, 33, 246, 75, 61, 75, 94, 229, 28, 194, 224, 130, 34, 197, 64, 223, 129, 40, 56, 140, 135, 98, 25, 43, 221, 177, 86, 65, 163, 174, 140, 64, 113, 195, 26, 54, 216, 227, 94, 57, 97, 27, 92, 44, 104, 57, 180, 134, 149, 30, 112, 141, 214, 133, 49, 181, 229, 72, 50, 16, 64, 41, 31, 23, 62, 75, 167, 86, 126, 184, 48, 153, 53, 40, 87, 49, 75, 58, 123, 52, 56, 44, 236, 255, 250, 163, 188, 47, 126, 239, 220, 137, 31, 80, 208, 77, 232, 134, 79, 125, 129, 139}, +{32, 108, 143, 51, 71, 254, 237, 143, 0, 15, 224, 78, 40, 202, 25, 95, 38, 220, 105, 242, 79, 72, 118, 235, 133, 203, 216, 144, 29, 18, 13, 3, 185, 252, 75, 141, 19, 72, 139, 240, 166, 216, 110, 70, 54, 12, 120, 182, 140, 244, 233, 148, 220, 209, 92, 85, 219, 247, 33, 171, 226, 104, 71, 199, 119, 140, 187, 55, 235, 210, 87, 194, 58, 224, 253, 16, 114, 94, 108, 249, 227, 101, 102, 238, 171, 248, 227, 171, 206, 164, 242, 87, 221, 120, 177, 15, 233, 101, 213, 71, 226, 33, 210, 191, 216, 168, 98, 50, 152, 18, 72, 14, 127, 132, 89, 89, 130, 85, 184, 130, 104, 220, 143, 249, 87, 137, 178, 54}, +{41, 93, 6, 188, 6, 109, 194, 168, 246, 86, 102, 50, 242, 100, 226, 254, 255, 219, 139, 149, 72, 243, 24, 173, 226, 254, 38, 30, 78, 90, 254, 2, 88, 35, 130, 50, 169, 84, 101, 207, 223, 177, 36, 169, 223, 120, 249, 20, 227, 4, 249, 119, 166, 226, 90, 16, 217, 104, 53, 143, 54, 92, 93, 62, 227, 165, 21, 148, 168, 120, 178, 44, 240, 56, 242, 215, 255, 245, 79, 225, 142, 7, 140, 214, 199, 69, 67, 210, 62, 127, 58, 30, 248, 78, 254, 168, 152, 104, 232, 242, 140, 18, 159, 209, 246, 2, 197, 135, 165, 75, 26, 110, 249, 188, 50, 162, 76, 106, 21, 137, 123, 104, 45, 48, 23, 160, 90, 175}, +{33, 247, 88, 221, 154, 49, 223, 105, 215, 124, 118, 236, 167, 64, 46, 33, 56, 54, 231, 77, 94, 245, 39, 2, 73, 188, 163, 5, 154, 139, 204, 225, 144, 67, 227, 123, 160, 141, 66, 185, 149, 9, 207, 172, 167, 111, 246, 13, 125, 136, 136, 66, 195, 174, 59, 70, 173, 138, 215, 145, 7, 231, 183, 184, 24, 198, 68, 49, 27, 86, 157, 162, 7, 55, 224, 217, 105, 251, 162, 72, 234, 58, 102, 225, 81, 191, 120, 48, 177, 7, 13, 237, 158, 247, 172, 41, 159, 163, 1, 12, 174, 199, 217, 249, 47, 216, 46, 75, 86, 13, 250, 166, 194, 77, 195, 48, 103, 89, 114, 34, 27, 196, 237, 80, 212, 181, 194, 30}, +{127, 13, 102, 44, 254, 222, 251, 112, 196, 108, 3, 113, 117, 175, 65, 161, 158, 124, 20, 122, 246, 53, 235, 36, 93, 77, 233, 30, 240, 99, 237, 70, 228, 214, 174, 234, 48, 71, 77, 94, 230, 53, 155, 52, 194, 63, 212, 179, 69, 233, 72, 107, 42, 47, 166, 136, 159, 39, 252, 184, 163, 147, 190, 1, 60, 174, 156, 155, 105, 110, 20, 149, 166, 207, 160, 67, 143, 165, 92, 191, 31, 186, 101, 182, 73, 100, 202, 245, 160, 151, 199, 103, 11, 130, 119, 170, 112, 137, 121, 80, 117, 99, 53, 202, 26, 49, 133, 66, 57, 7, 31, 72, 251, 169, 81, 53, 233, 128, 151, 42, 149, 148, 14, 220, 175, 106, 25, 17}, +{85, 18, 151, 64, 15, 22, 0, 132, 73, 144, 170, 23, 212, 197, 236, 29, 125, 240, 5, 87, 71, 180, 10, 3, 120, 245, 27, 149, 68, 139, 51, 195, 220, 205, 15, 121, 154, 186, 51, 120, 236, 111, 195, 57, 170, 246, 17, 192, 172, 222, 61, 173, 143, 0, 15, 152, 199, 207, 119, 126, 245, 91, 81, 59, 12, 35, 89, 150, 29, 239, 71, 196, 180, 167, 109, 5, 242, 173, 237, 88, 13, 118, 151, 217, 246, 101, 229, 163, 233, 150, 22, 241, 149, 199, 154, 19, 228, 115, 58, 55, 6, 175, 167, 179, 189, 191, 148, 170, 160, 126, 76, 65, 251, 255, 8, 150, 160, 232, 159, 242, 54, 188, 217, 183, 112, 15, 248, 165}, +{150, 44, 151, 222, 244, 31, 17, 130, 163, 22, 177, 31, 155, 16, 103, 228, 177, 3, 83, 177, 32, 81, 141, 55, 22, 103, 142, 194, 217, 225, 53, 171, 73, 246, 147, 138, 111, 22, 166, 144, 73, 153, 139, 49, 111, 143, 27, 86, 180, 32, 181, 207, 52, 199, 196, 147, 116, 248, 214, 132, 165, 92, 18, 11, 111, 31, 96, 14, 58, 38, 201, 126, 243, 210, 216, 150, 13, 56, 204, 104, 27, 142, 138, 140, 192, 136, 166, 165, 69, 1, 156, 231, 118, 124, 33, 96, 249, 71, 87, 13, 151, 183, 14, 126, 136, 23, 119, 141, 113, 153, 45, 219, 156, 249, 18, 181, 159, 153, 64, 37, 160, 109, 90, 10, 197, 47, 111, 133}, +{91, 128, 210, 46, 42, 154, 64, 182, 5, 94, 40, 237, 167, 185, 52, 237, 246, 69, 75, 224, 206, 132, 124, 0, 10, 197, 170, 170, 168, 182, 180, 233, 231, 2, 66, 207, 155, 196, 101, 97, 105, 206, 65, 221, 154, 238, 103, 104, 45, 188, 107, 155, 35, 78, 88, 9, 31, 133, 79, 104, 147, 79, 224, 140, 38, 28, 55, 121, 143, 211, 222, 44, 4, 2, 200, 182, 43, 251, 168, 166, 6, 78, 92, 115, 88, 159, 167, 89, 136, 199, 148, 23, 172, 253, 78, 70, 67, 0, 1, 124, 255, 181, 217, 252, 33, 7, 204, 85, 27, 66, 187, 214, 248, 160, 85, 218, 118, 136, 112, 110, 11, 226, 227, 153, 165, 35, 132, 195}, +{183, 86, 20, 137, 226, 52, 147, 130, 169, 170, 38, 80, 132, 172, 231, 2, 79, 182, 21, 9, 48, 254, 218, 141, 123, 204, 214, 89, 201, 63, 198, 100, 229, 250, 104, 247, 14, 146, 181, 112, 48, 248, 228, 82, 135, 19, 199, 23, 229, 96, 7, 48, 152, 80, 139, 174, 128, 151, 239, 180, 58, 162, 121, 95, 122, 65, 168, 38, 28, 101, 199, 107, 36, 211, 234, 210, 160, 139, 236, 241, 240, 70, 243, 202, 30, 88, 90, 135, 221, 1, 87, 221, 42, 173, 110, 27, 174, 30, 34, 76, 194, 15, 139, 98, 178, 176, 162, 34, 112, 12, 207, 152, 233, 62, 45, 135, 202, 143, 131, 197, 217, 27, 173, 24, 243, 233, 164, 91}, +{63, 194, 143, 137, 154, 34, 212, 10, 60, 99, 8, 237, 108, 149, 29, 211, 46, 71, 209, 174, 17, 58, 163, 250, 109, 30, 103, 89, 66, 66, 140, 10, 183, 214, 187, 247, 125, 221, 210, 59, 110, 171, 96, 62, 132, 191, 81, 95, 136, 111, 229, 6, 128, 233, 178, 148, 103, 7, 98, 120, 41, 206, 248, 26, 35, 160, 101, 25, 91, 72, 137, 211, 181, 25, 81, 210, 68, 115, 38, 221, 172, 47, 208, 204, 5, 162, 9, 117, 127, 12, 124, 220, 170, 178, 107, 135, 30, 131, 190, 176, 19, 52, 138, 227, 129, 207, 157, 131, 98, 199, 210, 102, 170, 153, 107, 193, 20, 116, 64, 254, 97, 35, 114, 96, 174, 66, 65, 137}, +{107, 127, 142, 162, 123, 74, 50, 12, 135, 160, 252, 53, 168, 117, 35, 223, 206, 6, 99, 205, 212, 122, 38, 80, 240, 188, 155, 123, 175, 61, 55, 178, 22, 32, 143, 162, 134, 118, 107, 80, 237, 138, 106, 87, 202, 205, 236, 19, 24, 33, 193, 77, 57, 166, 136, 46, 55, 66, 171, 3, 107, 94, 0, 49, 93, 60, 173, 136, 187, 163, 127, 220, 8, 252, 100, 194, 59, 192, 171, 134, 207, 124, 95, 200, 123, 43, 248, 83, 108, 254, 70, 167, 11, 68, 161, 210, 101, 214, 44, 217, 4, 129, 133, 52, 78, 235, 84, 130, 233, 93, 73, 28, 74, 132, 114, 168, 82, 222, 212, 23, 169, 57, 27, 42, 40, 72, 117, 233}, +{119, 233, 69, 122, 254, 221, 139, 82, 34, 71, 188, 64, 207, 57, 40, 70, 222, 91, 185, 125, 69, 176, 205, 41, 44, 223, 253, 234, 119, 13, 83, 123, 199, 15, 169, 105, 142, 222, 220, 70, 254, 9, 171, 63, 183, 57, 111, 41, 218, 113, 85, 103, 99, 181, 51, 87, 217, 145, 1, 235, 58, 134, 207, 121, 52, 66, 78, 98, 45, 125, 106, 84, 205, 89, 251, 17, 84, 92, 218, 220, 161, 96, 60, 183, 150, 232, 158, 117, 9, 22, 48, 225, 73, 249, 89, 202, 190, 172, 164, 57, 170, 120, 165, 49, 37, 75, 74, 202, 136, 157, 98, 97, 5, 96, 180, 45, 120, 222, 21, 255, 41, 32, 104, 45, 50, 178, 114, 2}, +{163, 61, 195, 200, 190, 10, 34, 119, 177, 114, 42, 253, 190, 43, 139, 26, 137, 76, 167, 108, 98, 100, 120, 99, 196, 86, 201, 42, 210, 225, 131, 75, 98, 183, 217, 160, 181, 186, 209, 214, 212, 225, 240, 222, 222, 53, 227, 210, 117, 140, 208, 155, 128, 92, 82, 193, 197, 108, 213, 20, 139, 101, 137, 5, 221, 208, 242, 45, 114, 58, 123, 72, 144, 219, 189, 196, 53, 110, 35, 90, 133, 196, 116, 100, 227, 154, 247, 167, 96, 192, 113, 134, 83, 130, 211, 157, 253, 239, 5, 181, 205, 168, 234, 223, 152, 100, 246, 56, 89, 152, 167, 123, 249, 206, 32, 139, 251, 157, 87, 146, 100, 2, 212, 90, 228, 9, 105, 53}, +{109, 3, 125, 137, 107, 244, 160, 178, 94, 32, 71, 213, 44, 104, 24, 89, 254, 143, 121, 112, 142, 52, 189, 218, 152, 150, 29, 157, 107, 194, 115, 92, 122, 91, 85, 22, 247, 233, 12, 186, 96, 225, 67, 86, 109, 229, 204, 191, 11, 111, 195, 107, 196, 163, 190, 141, 120, 251, 146, 11, 115, 134, 171, 193, 198, 250, 123, 58, 143, 27, 10, 51, 154, 111, 45, 22, 131, 36, 144, 130, 157, 146, 237, 167, 36, 7, 193, 42, 150, 79, 169, 0, 179, 176, 74, 21, 65, 210, 198, 152, 184, 169, 206, 144, 102, 81, 123, 213, 41, 134, 181, 111, 4, 217, 130, 60, 233, 228, 109, 173, 214, 180, 230, 13, 151, 11, 241, 246}, +{106, 227, 139, 78, 219, 249, 36, 251, 163, 53, 121, 42, 173, 8, 14, 206, 13, 25, 227, 203, 81, 30, 104, 223, 43, 1, 216, 207, 119, 231, 255, 19, 21, 147, 11, 226, 70, 234, 56, 128, 231, 233, 26, 6, 93, 246, 95, 191, 214, 153, 219, 245, 78, 67, 206, 228, 115, 213, 149, 97, 188, 188, 163, 106, 56, 63, 208, 111, 20, 160, 42, 160, 132, 227, 94, 42, 87, 82, 143, 10, 241, 54, 98, 234, 90, 143, 141, 227, 196, 10, 40, 104, 89, 254, 20, 167, 111, 86, 29, 247, 255, 124, 3, 144, 22, 79, 156, 42, 129, 201, 223, 78, 163, 106, 131, 252, 108, 145, 234, 206, 69, 118, 60, 66, 77, 20, 150, 23}, +{190, 255, 43, 50, 107, 141, 112, 223, 149, 163, 228, 107, 54, 7, 248, 137, 13, 230, 173, 215, 140, 169, 117, 19, 130, 34, 156, 18, 189, 89, 111, 184, 109, 62, 155, 127, 203, 156, 81, 17, 127, 203, 71, 22, 163, 221, 254, 147, 68, 244, 132, 17, 120, 17, 20, 171, 216, 12, 73, 44, 147, 203, 25, 82, 93, 160, 175, 20, 122, 52, 147, 163, 2, 139, 113, 189, 97, 235, 101, 136, 93, 46, 113, 23, 163, 35, 101, 214, 22, 152, 27, 176, 73, 93, 3, 42, 13, 107, 98, 136, 235, 239, 67, 237, 205, 254, 17, 220, 54, 137, 255, 253, 245, 217, 131, 213, 29, 146, 213, 73, 73, 114, 1, 219, 31, 167, 126, 2}, +{143, 138, 17, 112, 150, 220, 118, 129, 88, 64, 237, 206, 177, 230, 95, 178, 217, 157, 43, 202, 98, 225, 195, 237, 49, 226, 157, 58, 117, 102, 205, 123, 240, 164, 228, 36, 11, 103, 149, 140, 133, 240, 13, 142, 210, 201, 124, 48, 24, 215, 29, 18, 81, 247, 89, 187, 231, 5, 241, 54, 57, 143, 157, 60, 137, 60, 88, 155, 249, 234, 200, 28, 176, 224, 0, 10, 177, 125, 213, 161, 138, 212, 249, 127, 202, 213, 230, 252, 3, 235, 135, 69, 210, 71, 174, 224, 74, 19, 27, 23, 134, 247, 162, 26, 42, 167, 227, 251, 102, 233, 1, 230, 92, 114, 215, 216, 120, 69, 35, 160, 34, 172, 254, 203, 40, 39, 143, 227}, +{125, 84, 162, 152, 175, 54, 145, 124, 34, 78, 64, 113, 27, 173, 95, 35, 219, 185, 132, 211, 143, 99, 145, 238, 36, 159, 8, 210, 187, 123, 228, 78, 200, 46, 88, 233, 43, 44, 200, 227, 144, 24, 72, 2, 92, 192, 142, 37, 234, 104, 31, 236, 224, 31, 225, 30, 210, 196, 224, 242, 161, 154, 65, 237, 99, 233, 81, 194, 176, 9, 231, 34, 135, 63, 199, 167, 228, 179, 54, 25, 34, 0, 130, 71, 199, 10, 107, 102, 194, 162, 246, 145, 9, 87, 202, 166, 65, 118, 224, 14, 215, 218, 179, 189, 133, 112, 93, 185, 137, 31, 229, 90, 55, 7, 145, 38, 253, 51, 53, 158, 153, 187, 220, 118, 250, 150, 55, 145}, +{50, 43, 97, 211, 63, 2, 188, 162, 155, 26, 107, 203, 250, 145, 203, 135, 97, 39, 105, 88, 183, 241, 47, 219, 136, 187, 255, 178, 92, 43, 236, 136, 130, 59, 38, 235, 239, 14, 249, 206, 73, 49, 191, 1, 28, 34, 29, 225, 246, 182, 13, 137, 179, 126, 254, 254, 133, 90, 40, 53, 174, 117, 78, 32, 85, 147, 144, 14, 88, 180, 158, 171, 241, 80, 101, 209, 50, 148, 27, 158, 51, 12, 29, 75, 75, 230, 27, 205, 84, 36, 112, 252, 255, 255, 0, 1, 18, 165, 140, 199, 230, 0, 64, 114, 168, 159, 36, 14, 29, 205, 160, 221, 211, 241, 95, 230, 161, 221, 119, 6, 98, 85, 84, 252, 54, 170, 249, 249}, +{49, 198, 141, 181, 173, 88, 143, 131, 72, 199, 45, 186, 138, 168, 43, 42, 188, 56, 206, 223, 11, 155, 212, 66, 110, 169, 12, 34, 245, 180, 87, 91, 177, 227, 55, 76, 92, 155, 85, 189, 191, 235, 167, 117, 25, 85, 40, 12, 216, 179, 20, 180, 238, 230, 168, 182, 61, 225, 143, 150, 131, 233, 143, 65, 7, 85, 87, 245, 140, 103, 84, 58, 159, 91, 72, 179, 209, 12, 201, 80, 216, 234, 70, 104, 172, 108, 130, 211, 61, 11, 60, 221, 197, 116, 187, 213, 122, 16, 112, 11, 2, 135, 121, 179, 31, 147, 44, 79, 32, 189, 48, 227, 17, 227, 145, 85, 204, 223, 137, 124, 165, 251, 21, 48, 9, 3, 99, 135}, +{129, 100, 183, 7, 116, 107, 251, 55, 229, 30, 175, 76, 64, 126, 88, 195, 193, 178, 240, 205, 96, 175, 141, 134, 27, 173, 227, 214, 214, 189, 73, 218, 137, 118, 47, 62, 66, 71, 192, 174, 22, 70, 170, 174, 180, 136, 55, 73, 201, 36, 30, 84, 78, 46, 37, 182, 230, 248, 249, 195, 35, 203, 239, 142, 177, 46, 62, 102, 163, 135, 207, 34, 116, 240, 214, 3, 117, 179, 31, 222, 34, 123, 80, 22, 243, 8, 251, 103, 223, 148, 64, 229, 1, 12, 63, 134, 223, 55, 176, 11, 13, 136, 2, 22, 76, 62, 6, 126, 196, 67, 211, 146, 91, 102, 124, 195, 169, 134, 149, 212, 135, 215, 142, 105, 87, 114, 32, 226}, +{161, 215, 220, 162, 103, 26, 167, 153, 64, 150, 45, 172, 155, 217, 123, 169, 188, 87, 148, 107, 60, 61, 247, 247, 95, 98, 135, 128, 68, 158, 197, 15, 42, 14, 155, 114, 132, 44, 18, 18, 33, 242, 25, 205, 207, 45, 98, 107, 152, 130, 231, 4, 18, 149, 19, 117, 151, 165, 84, 73, 174, 13, 94, 213, 114, 197, 138, 182, 31, 44, 26, 89, 0, 226, 5, 202, 182, 219, 208, 243, 212, 0, 99, 209, 52, 0, 191, 1, 72, 53, 255, 60, 191, 50, 248, 7, 149, 114, 0, 208, 88, 207, 73, 77, 157, 141, 186, 253, 127, 220, 59, 251, 106, 21, 153, 28, 229, 90, 247, 142, 25, 185, 157, 236, 4, 128, 197, 211}, +{42, 10, 96, 80, 19, 3, 89, 53, 24, 35, 52, 58, 247, 206, 236, 100, 132, 206, 87, 242, 106, 244, 78, 63, 189, 115, 22, 67, 222, 175, 226, 128, 209, 216, 132, 252, 122, 106, 29, 38, 69, 186, 247, 153, 123, 77, 6, 97, 72, 180, 162, 2, 123, 4, 140, 65, 105, 90, 11, 33, 99, 138, 239, 111, 214, 200, 80, 39, 209, 145, 235, 153, 91, 6, 202, 7, 131, 69, 80, 180, 94, 196, 44, 173, 151, 165, 36, 144, 180, 123, 162, 87, 168, 202, 4, 98, 80, 194, 158, 177, 233, 91, 162, 56, 241, 165, 158, 250, 162, 191, 126, 24, 186, 216, 103, 122, 212, 162, 98, 129, 115, 178, 238, 57, 151, 207, 239, 250}, +{60, 127, 243, 81, 128, 71, 82, 167, 160, 118, 217, 132, 19, 28, 243, 210, 175, 232, 19, 167, 39, 36, 68, 107, 93, 251, 119, 162, 206, 139, 168, 154, 64, 189, 208, 117, 16, 75, 161, 156, 174, 169, 108, 249, 109, 64, 97, 122, 16, 187, 26, 17, 62, 74, 197, 9, 224, 190, 17, 46, 136, 115, 105, 245, 79, 132, 127, 67, 201, 38, 199, 143, 121, 111, 44, 108, 156, 86, 156, 241, 4, 227, 211, 176, 214, 185, 44, 165, 116, 140, 96, 109, 168, 37, 119, 123, 129, 143, 85, 248, 70, 13, 243, 149, 182, 204, 126, 53, 184, 211, 49, 161, 218, 220, 156, 60, 130, 113, 98, 169, 147, 55, 249, 195, 106, 186, 216, 9}, +{63, 168, 149, 153, 102, 32, 140, 150, 139, 14, 36, 187, 200, 196, 121, 3, 140, 243, 5, 30, 223, 64, 193, 238, 19, 206, 30, 115, 230, 105, 228, 232, 33, 183, 200, 177, 225, 61, 150, 9, 87, 231, 78, 42, 205, 63, 106, 103, 176, 198, 5, 204, 138, 173, 218, 200, 142, 206, 94, 195, 117, 101, 171, 24, 52, 0, 19, 170, 223, 104, 176, 84, 141, 237, 116, 36, 113, 163, 12, 43, 35, 106, 116, 97, 45, 11, 242, 246, 148, 82, 115, 94, 50, 151, 11, 111, 181, 92, 67, 1, 168, 163, 53, 212, 167, 198, 206, 186, 100, 234, 205, 154, 43, 79, 175, 245, 232, 247, 164, 148, 183, 131, 194, 242, 129, 15, 223, 195}, +{51, 184, 218, 219, 146, 159, 186, 31, 188, 3, 60, 191, 204, 90, 126, 227, 0, 0, 95, 161, 238, 218, 217, 117, 227, 133, 17, 149, 186, 243, 4, 196, 63, 190, 78, 146, 108, 131, 169, 227, 151, 145, 147, 236, 204, 255, 177, 93, 49, 195, 235, 160, 159, 144, 104, 26, 42, 160, 208, 182, 46, 152, 239, 157, 20, 214, 67, 94, 176, 176, 136, 99, 132, 218, 26, 138, 238, 51, 219, 232, 31, 245, 193, 84, 177, 19, 85, 158, 10, 23, 148, 211, 155, 118, 205, 21, 33, 109, 204, 63, 93, 166, 30, 65, 235, 5, 48, 111, 135, 112, 189, 38, 84, 187, 174, 227, 139, 170, 87, 59, 69, 118, 188, 36, 140, 191, 51, 107}, +{169, 3, 197, 66, 240, 19, 151, 70, 170, 27, 180, 52, 127, 54, 105, 190, 248, 9, 95, 248, 209, 54, 195, 247, 120, 198, 74, 145, 80, 169, 159, 54, 92, 229, 226, 49, 147, 54, 173, 52, 252, 18, 138, 79, 210, 101, 199, 42, 154, 191, 84, 133, 79, 108, 251, 3, 198, 19, 237, 206, 194, 179, 106, 20, 246, 118, 158, 144, 215, 153, 147, 223, 233, 116, 36, 232, 191, 171, 207, 98, 16, 234, 169, 67, 195, 54, 21, 21, 5, 93, 117, 219, 138, 132, 110, 97, 181, 153, 222, 106, 49, 244, 26, 220, 187, 35, 66, 30, 36, 209, 134, 176, 112, 132, 83, 144, 154, 188, 96, 203, 77, 67, 195, 106, 91, 145, 230, 205}, +{169, 12, 2, 46, 151, 107, 203, 165, 60, 235, 253, 112, 185, 144, 127, 56, 127, 79, 175, 108, 90, 43, 208, 224, 237, 121, 17, 165, 218, 68, 148, 92, 132, 199, 222, 63, 25, 132, 235, 38, 234, 120, 32, 8, 56, 175, 96, 124, 41, 183, 181, 180, 212, 160, 44, 28, 159, 49, 125, 134, 212, 212, 22, 14, 127, 111, 172, 104, 219, 104, 9, 166, 77, 2, 200, 193, 16, 227, 157, 150, 214, 246, 83, 108, 199, 129, 61, 64, 18, 45, 15, 152, 238, 13, 34, 51, 34, 200, 85, 98, 161, 164, 135, 9, 232, 80, 215, 197, 57, 3, 242, 30, 142, 103, 236, 152, 65, 182, 182, 16, 232, 241, 56, 103, 249, 248, 72, 179}, +{11, 147, 10, 182, 94, 80, 206, 106, 176, 155, 85, 131, 100, 179, 129, 245, 108, 175, 121, 91, 4, 234, 170, 67, 205, 202, 62, 24, 175, 49, 37, 176, 179, 52, 149, 163, 61, 78, 233, 81, 245, 103, 251, 202, 192, 85, 17, 203, 145, 158, 124, 112, 243, 130, 192, 72, 68, 74, 144, 8, 26, 58, 130, 27, 157, 161, 105, 37, 237, 124, 61, 22, 111, 243, 99, 47, 156, 187, 196, 209, 0, 52, 146, 200, 151, 4, 84, 52, 148, 250, 190, 9, 55, 211, 45, 118, 198, 5, 251, 185, 15, 211, 38, 211, 94, 157, 54, 91, 237, 60, 240, 81, 212, 35, 246, 143, 219, 226, 183, 242, 237, 94, 183, 1, 83, 14, 36, 25}, +{137, 167, 175, 211, 63, 107, 96, 135, 201, 12, 41, 57, 217, 119, 86, 143, 191, 163, 244, 46, 99, 158, 219, 30, 212, 216, 179, 179, 65, 68, 24, 3, 255, 68, 222, 103, 81, 111, 184, 18, 251, 173, 58, 209, 53, 169, 172, 172, 188, 127, 131, 246, 213, 179, 255, 111, 42, 96, 101, 190, 23, 101, 160, 199, 104, 165, 8, 167, 243, 132, 180, 250, 182, 34, 187, 239, 45, 41, 111, 24, 100, 43, 179, 226, 55, 27, 103, 93, 155, 11, 108, 154, 43, 191, 155, 246, 159, 182, 237, 11, 113, 204, 236, 137, 106, 120, 143, 125, 186, 236, 253, 162, 151, 161, 15, 0, 113, 83, 15, 64, 45, 171, 118, 238, 102, 219, 228, 51}, +{24, 115, 83, 253, 23, 103, 197, 204, 129, 40, 171, 59, 212, 138, 230, 75, 214, 109, 119, 104, 49, 232, 243, 230, 66, 62, 210, 72, 186, 96, 207, 10, 7, 136, 100, 215, 39, 231, 173, 221, 220, 5, 185, 180, 55, 150, 159, 232, 180, 166, 139, 203, 22, 9, 15, 111, 12, 40, 245, 42, 217, 98, 179, 80, 161, 252, 181, 217, 76, 223, 195, 111, 66, 134, 46, 0, 66, 232, 55, 199, 124, 251, 224, 210, 223, 43, 155, 154, 109, 151, 39, 95, 218, 145, 246, 24, 191, 46, 101, 73, 35, 189, 117, 193, 21, 113, 168, 252, 154, 90, 28, 252, 73, 111, 210, 147, 235, 70, 233, 64, 238, 218, 58, 17, 202, 253, 202, 112}, +{178, 228, 78, 151, 159, 240, 166, 172, 12, 74, 125, 127, 201, 156, 187, 108, 235, 250, 199, 5, 92, 174, 136, 49, 182, 19, 183, 35, 134, 160, 81, 122, 198, 150, 232, 18, 94, 118, 8, 224, 238, 91, 235, 77, 84, 104, 72, 6, 247, 12, 198, 148, 251, 70, 229, 254, 34, 98, 245, 179, 36, 44, 8, 223, 150, 25, 61, 81, 253, 122, 206, 25, 25, 187, 172, 99, 19, 158, 224, 123, 184, 222, 165, 149, 179, 90, 102, 14, 151, 63, 120, 21, 148, 70, 94, 41, 94, 38, 70, 250, 204, 56, 163, 199, 55, 18, 231, 4, 63, 221, 30, 221, 124, 46, 7, 133, 156, 88, 226, 242, 60, 242, 231, 169, 104, 215, 97, 8}, +{67, 139, 229, 25, 44, 255, 154, 214, 203, 85, 26, 79, 141, 151, 202, 148, 185, 220, 236, 169, 220, 159, 91, 70, 7, 177, 12, 151, 167, 138, 177, 154, 19, 57, 24, 196, 243, 112, 102, 63, 73, 155, 27, 36, 243, 137, 28, 177, 174, 220, 215, 140, 180, 34, 244, 32, 105, 198, 25, 50, 95, 96, 222, 193, 226, 245, 3, 35, 7, 210, 134, 222, 44, 19, 200, 124, 58, 45, 130, 139, 84, 175, 75, 124, 5, 218, 221, 255, 103, 227, 99, 75, 98, 93, 3, 46, 57, 68, 73, 34, 35, 122, 192, 112, 57, 221, 167, 97, 18, 184, 165, 199, 182, 168, 110, 200, 163, 21, 173, 99, 181, 175, 185, 251, 95, 173, 164, 163}, +{195, 145, 69, 108, 216, 29, 27, 146, 36, 19, 200, 217, 131, 46, 26, 41, 164, 106, 37, 245, 9, 166, 23, 191, 1, 224, 16, 209, 118, 189, 65, 186, 19, 2, 98, 226, 59, 251, 147, 216, 54, 235, 155, 98, 169, 162, 83, 36, 4, 134, 208, 113, 93, 71, 250, 31, 76, 43, 14, 9, 138, 136, 102, 177, 173, 147, 45, 122, 128, 196, 55, 65, 100, 217, 125, 204, 22, 86, 73, 89, 181, 244, 106, 242, 151, 115, 121, 63, 218, 254, 147, 76, 8, 210, 245, 185, 34, 40, 216, 134, 206, 161, 9, 150, 143, 98, 21, 58, 216, 16, 193, 52, 245, 193, 52, 79, 44, 134, 182, 133, 103, 92, 32, 251, 95, 19, 106, 214}, +{99, 26, 47, 177, 189, 4, 251, 254, 224, 172, 141, 187, 45, 138, 128, 172, 220, 118, 239, 25, 5, 72, 4, 53, 124, 248, 40, 201, 203, 59, 105, 121, 218, 158, 196, 99, 77, 231, 93, 4, 145, 248, 188, 60, 144, 108, 200, 86, 178, 205, 121, 133, 251, 101, 206, 43, 153, 63, 46, 176, 6, 137, 42, 78, 228, 243, 48, 213, 184, 124, 30, 151, 137, 110, 209, 89, 239, 202, 99, 207, 206, 141, 16, 7, 251, 11, 7, 8, 120, 185, 181, 249, 177, 6, 18, 167, 45, 233, 16, 109, 85, 118, 105, 184, 10, 211, 117, 216, 108, 145, 179, 217, 61, 229, 53, 14, 153, 119, 237, 37, 39, 46, 117, 178, 3, 55, 190, 21}, +{54, 192, 228, 79, 154, 160, 208, 160, 96, 23, 230, 11, 195, 222, 104, 233, 14, 56, 112, 250, 69, 19, 33, 155, 60, 89, 108, 134, 19, 67, 154, 236, 103, 109, 217, 152, 46, 132, 160, 99, 129, 118, 155, 158, 39, 176, 81, 8, 166, 32, 9, 243, 229, 28, 114, 195, 237, 106, 206, 151, 165, 102, 145, 3, 196, 188, 252, 101, 237, 105, 146, 103, 192, 9, 143, 231, 126, 7, 211, 194, 209, 29, 17, 62, 166, 172, 138, 237, 121, 57, 96, 241, 219, 199, 5, 11, 151, 9, 21, 161, 232, 199, 64, 198, 118, 74, 17, 168, 65, 146, 26, 37, 136, 36, 139, 39, 206, 83, 181, 191, 119, 144, 135, 169, 98, 118, 111, 29}, +{27, 152, 26, 254, 160, 211, 46, 221, 99, 61, 135, 168, 192, 187, 117, 252, 64, 31, 193, 66, 144, 248, 179, 144, 84, 245, 242, 220, 96, 44, 99, 196, 225, 228, 226, 178, 18, 21, 156, 212, 158, 167, 207, 131, 51, 251, 92, 82, 176, 1, 200, 93, 83, 28, 197, 120, 131, 42, 179, 5, 230, 109, 44, 174, 236, 13, 159, 35, 64, 163, 218, 149, 84, 55, 191, 193, 135, 139, 229, 112, 157, 108, 196, 124, 17, 204, 237, 34, 26, 0, 67, 148, 67, 153, 21, 212, 46, 126, 45, 119, 84, 201, 255, 21, 195, 57, 200, 155, 224, 113, 174, 226, 103, 216, 34, 185, 19, 230, 7, 65, 245, 54, 93, 231, 184, 4, 88, 234}, +{51, 213, 32, 142, 213, 73, 58, 212, 23, 252, 164, 241, 160, 97, 148, 92, 255, 154, 62, 103, 117, 163, 225, 249, 63, 59, 81, 166, 79, 85, 199, 189, 243, 196, 49, 253, 87, 60, 79, 156, 228, 83, 137, 20, 17, 82, 79, 43, 139, 38, 12, 81, 129, 127, 59, 93, 233, 80, 112, 141, 91, 143, 91, 224, 207, 165, 193, 51, 235, 109, 86, 97, 160, 0, 184, 228, 72, 33, 251, 150, 248, 17, 40, 220, 183, 98, 84, 3, 206, 122, 76, 93, 244, 63, 88, 12, 238, 196, 241, 246, 136, 202, 211, 231, 3, 142, 49, 140, 125, 119, 1, 131, 140, 6, 236, 149, 211, 174, 218, 247, 70, 136, 122, 44, 16, 166, 96, 236}, +{24, 90, 219, 180, 12, 30, 140, 178, 32, 169, 49, 103, 124, 174, 63, 84, 199, 124, 24, 232, 6, 27, 49, 12, 201, 134, 89, 227, 197, 64, 65, 245, 52, 77, 188, 67, 61, 158, 211, 45, 61, 82, 77, 192, 124, 190, 19, 224, 96, 169, 152, 63, 20, 58, 51, 166, 69, 144, 173, 41, 72, 3, 170, 174, 35, 237, 88, 172, 250, 45, 248, 245, 153, 76, 110, 225, 235, 150, 93, 96, 10, 183, 69, 238, 122, 170, 91, 208, 142, 237, 159, 27, 84, 200, 23, 116, 75, 76, 150, 103, 196, 6, 147, 162, 28, 253, 32, 148, 246, 122, 5, 0, 179, 139, 148, 153, 36, 38, 132, 235, 44, 93, 243, 237, 74, 17, 146, 170}, +{43, 145, 145, 178, 243, 48, 167, 124, 184, 49, 44, 209, 167, 125, 245, 102, 189, 113, 157, 96, 154, 191, 127, 70, 126, 97, 155, 27, 168, 3, 142, 151, 19, 145, 6, 53, 185, 193, 140, 12, 202, 151, 161, 122, 92, 239, 162, 230, 42, 175, 158, 253, 14, 131, 250, 81, 108, 154, 193, 42, 107, 77, 210, 197, 192, 105, 75, 6, 138, 22, 137, 243, 253, 196, 80, 104, 100, 25, 184, 110, 103, 132, 192, 229, 165, 88, 23, 99, 241, 242, 57, 21, 82, 173, 19, 126, 72, 129, 13, 194, 235, 65, 230, 126, 86, 242, 79, 127, 150, 60, 232, 183, 38, 127, 36, 12, 50, 139, 194, 124, 139, 68, 79, 132, 254, 196, 206, 35}, +{162, 113, 230, 125, 77, 53, 216, 152, 247, 74, 246, 104, 83, 14, 18, 121, 237, 24, 253, 126, 132, 121, 120, 242, 148, 191, 128, 82, 96, 158, 157, 189, 19, 150, 239, 78, 160, 21, 59, 130, 72, 155, 216, 21, 97, 61, 148, 156, 96, 118, 235, 42, 185, 93, 210, 79, 149, 228, 201, 52, 206, 47, 138, 85, 200, 167, 109, 184, 217, 65, 65, 17, 235, 244, 157, 66, 108, 159, 68, 81, 64, 206, 34, 0, 167, 180, 110, 155, 156, 65, 96, 133, 50, 130, 29, 119, 167, 184, 43, 103, 134, 121, 0, 251, 70, 110, 151, 206, 51, 52, 164, 90, 240, 194, 140, 247, 65, 25, 177, 55, 8, 247, 93, 162, 178, 72, 204, 114}, +{47, 156, 8, 134, 142, 26, 24, 111, 238, 33, 80, 72, 14, 80, 176, 38, 44, 207, 120, 143, 223, 69, 110, 44, 190, 73, 235, 194, 186, 222, 248, 198, 72, 215, 242, 14, 195, 194, 64, 156, 13, 139, 62, 242, 159, 93, 244, 106, 188, 101, 110, 4, 168, 202, 179, 193, 8, 252, 175, 190, 127, 218, 231, 20, 178, 107, 128, 226, 82, 2, 192, 86, 47, 13, 243, 162, 211, 129, 23, 174, 33, 179, 46, 181, 227, 255, 56, 48, 226, 223, 10, 100, 48, 177, 68, 165, 60, 155, 5, 188, 96, 42, 58, 242, 19, 6, 172, 183, 19, 187, 164, 86, 250, 82, 248, 4, 251, 218, 199, 158, 64, 253, 169, 225, 100, 159, 213, 42}, +{156, 76, 206, 98, 77, 1, 3, 181, 94, 253, 83, 74, 154, 166, 51, 241, 119, 30, 147, 57, 195, 0, 196, 65, 54, 248, 233, 61, 23, 37, 118, 174, 65, 61, 114, 219, 183, 240, 50, 11, 229, 232, 17, 34, 62, 18, 77, 171, 144, 191, 37, 61, 127, 69, 89, 26, 169, 185, 78, 127, 249, 124, 156, 78, 206, 17, 85, 78, 38, 23, 235, 56, 68, 95, 222, 50, 132, 7, 116, 21, 130, 136, 83, 110, 196, 2, 27, 208, 70, 16, 160, 38, 25, 83, 241, 104, 68, 11, 203, 118, 68, 186, 73, 117, 51, 234, 69, 156, 18, 143, 83, 79, 15, 103, 151, 47, 35, 214, 63, 44, 128, 129, 28, 223, 137, 235, 68, 55}, +{40, 27, 148, 158, 198, 40, 123, 27, 163, 190, 205, 81, 82, 23, 14, 27, 45, 196, 12, 211, 33, 111, 151, 134, 184, 57, 85, 39, 29, 123, 0, 169, 105, 255, 41, 59, 131, 138, 104, 161, 61, 246, 38, 169, 203, 184, 1, 197, 210, 96, 236, 218, 252, 8, 229, 132, 91, 174, 182, 192, 198, 156, 113, 189, 163, 166, 33, 210, 115, 237, 234, 130, 92, 211, 131, 188, 104, 192, 144, 235, 122, 71, 224, 203, 101, 55, 111, 223, 224, 24, 65, 165, 146, 188, 177, 45, 95, 1, 22, 38, 173, 112, 139, 249, 58, 127, 162, 32, 100, 147, 59, 137, 117, 158, 69, 69, 6, 75, 105, 49, 53, 12, 219, 85, 171, 106, 13, 138}, +{6, 164, 167, 246, 80, 84, 63, 83, 158, 18, 150, 156, 67, 187, 194, 207, 63, 222, 168, 220, 129, 13, 222, 51, 205, 87, 210, 37, 132, 76, 108, 123, 141, 218, 140, 211, 29, 29, 212, 134, 123, 53, 235, 124, 188, 85, 29, 43, 86, 44, 52, 19, 66, 134, 74, 142, 26, 68, 177, 250, 66, 106, 203, 221, 199, 168, 131, 175, 249, 2, 162, 184, 143, 193, 184, 184, 213, 60, 136, 117, 206, 98, 164, 34, 248, 115, 146, 191, 41, 184, 150, 164, 27, 224, 82, 144, 172, 55, 174, 10, 128, 70, 226, 213, 174, 255, 204, 33, 54, 152, 61, 50, 90, 205, 0, 230, 177, 224, 117, 8, 62, 148, 248, 89, 125, 198, 111, 232}, +{205, 217, 10, 34, 133, 51, 105, 247, 55, 36, 82, 224, 57, 78, 129, 109, 35, 193, 241, 35, 193, 90, 12, 21, 183, 228, 137, 18, 103, 0, 177, 162, 176, 209, 21, 116, 71, 242, 224, 243, 185, 23, 235, 107, 128, 17, 249, 197, 120, 75, 43, 112, 51, 35, 33, 114, 84, 255, 55, 168, 137, 60, 199, 119, 218, 164, 253, 166, 187, 140, 201, 217, 228, 239, 131, 123, 185, 69, 75, 153, 31, 243, 154, 130, 226, 139, 80, 35, 26, 54, 76, 218, 188, 112, 48, 209, 182, 65, 48, 132, 127, 104, 55, 182, 207, 147, 101, 7, 96, 188, 114, 151, 83, 6, 243, 131, 136, 45, 32, 210, 8, 173, 164, 161, 185, 112, 119, 64}, +{49, 6, 4, 74, 99, 73, 191, 177, 244, 215, 227, 132, 137, 230, 196, 93, 185, 137, 229, 236, 86, 156, 25, 151, 103, 99, 17, 111, 199, 197, 138, 121, 157, 4, 33, 70, 218, 4, 74, 162, 2, 22, 28, 147, 79, 87, 200, 86, 32, 121, 115, 97, 163, 1, 59, 77, 143, 247, 2, 218, 242, 216, 246, 219, 141, 217, 219, 119, 246, 145, 4, 192, 160, 34, 251, 105, 98, 227, 179, 198, 23, 41, 210, 181, 249, 6, 141, 180, 223, 169, 206, 222, 39, 60, 110, 215, 27, 139, 251, 145, 149, 33, 189, 21, 60, 138, 178, 7, 173, 11, 91, 237, 63, 33, 211, 48, 199, 192, 3, 237, 141, 64, 140, 144, 136, 82, 33, 212}, +{163, 55, 44, 198, 162, 80, 16, 182, 28, 60, 241, 245, 195, 121, 41, 59, 230, 8, 149, 168, 148, 78, 67, 206, 112, 150, 252, 151, 113, 210, 122, 61, 9, 71, 29, 77, 16, 215, 11, 106, 157, 86, 192, 141, 200, 86, 28, 232, 192, 240, 247, 215, 210, 238, 28, 27, 49, 8, 150, 1, 25, 171, 184, 140, 1, 168, 188, 100, 105, 62, 138, 82, 73, 137, 186, 225, 54, 69, 22, 149, 216, 194, 201, 26, 122, 183, 93, 120, 112, 58, 83, 182, 66, 148, 248, 159, 42, 218, 184, 182, 19, 60, 31, 54, 107, 144, 218, 162, 22, 112, 39, 143, 15, 11, 171, 58, 27, 88, 166, 53, 66, 74, 42, 95, 149, 20, 118, 12}, +{153, 64, 165, 30, 112, 92, 252, 147, 128, 207, 9, 211, 5, 70, 86, 56, 139, 254, 66, 107, 0, 89, 58, 80, 177, 244, 162, 126, 245, 229, 36, 57, 235, 85, 227, 16, 200, 25, 151, 253, 200, 86, 191, 15, 17, 246, 153, 198, 222, 150, 141, 183, 110, 13, 0, 178, 242, 74, 180, 222, 198, 58, 23, 110, 151, 156, 106, 218, 219, 120, 57, 232, 202, 85, 138, 247, 80, 216, 123, 25, 72, 4, 249, 172, 155, 200, 232, 246, 91, 118, 164, 183, 119, 62, 121, 14, 92, 227, 212, 96, 47, 236, 202, 244, 202, 21, 168, 134, 41, 213, 130, 250, 173, 109, 80, 50, 154, 175, 249, 115, 225, 81, 193, 152, 177, 66, 94, 247}, +{207, 244, 97, 105, 3, 112, 97, 58, 93, 210, 41, 127, 24, 23, 83, 62, 49, 226, 209, 233, 211, 164, 159, 73, 155, 149, 94, 242, 70, 230, 143, 3, 96, 116, 242, 154, 14, 137, 41, 57, 206, 101, 144, 81, 183, 73, 129, 84, 62, 21, 139, 28, 201, 15, 133, 72, 251, 156, 69, 93, 5, 209, 81, 176, 80, 80, 199, 239, 242, 33, 188, 236, 235, 10, 69, 26, 1, 2, 117, 74, 50, 79, 159, 177, 13, 186, 180, 92, 215, 148, 75, 15, 199, 232, 65, 35, 182, 53, 78, 199, 106, 56, 27, 55, 203, 217, 238, 66, 160, 56, 55, 153, 133, 27, 247, 70, 65, 51, 31, 118, 240, 225, 177, 249, 164, 237, 20, 217}, +{28, 26, 229, 238, 42, 59, 1, 193, 124, 227, 134, 54, 179, 149, 136, 29, 124, 20, 128, 71, 20, 88, 53, 56, 67, 4, 113, 53, 86, 102, 90, 203, 168, 212, 132, 59, 200, 131, 253, 129, 225, 79, 195, 21, 43, 139, 38, 9, 126, 149, 52, 218, 146, 85, 88, 194, 62, 142, 66, 101, 141, 32, 206, 133, 197, 45, 8, 242, 67, 68, 255, 134, 48, 34, 231, 50, 78, 33, 181, 244, 1, 167, 5, 70, 121, 17, 110, 186, 194, 183, 79, 128, 157, 214, 25, 233, 195, 170, 159, 55, 215, 247, 234, 13, 42, 197, 171, 6, 10, 94, 213, 77, 104, 87, 35, 24, 244, 215, 75, 40, 0, 15, 155, 221, 152, 152, 254, 252}, +{123, 10, 237, 243, 163, 171, 96, 47, 85, 214, 183, 188, 67, 78, 225, 44, 134, 123, 174, 212, 97, 102, 114, 11, 214, 168, 242, 156, 205, 45, 251, 183, 151, 37, 40, 198, 252, 196, 220, 75, 131, 121, 203, 161, 75, 194, 153, 148, 237, 109, 112, 206, 253, 145, 102, 11, 83, 253, 205, 162, 178, 173, 14, 81, 216, 185, 224, 230, 55, 208, 44, 45, 228, 204, 222, 228, 250, 103, 253, 197, 103, 64, 153, 114, 176, 17, 219, 226, 142, 161, 93, 102, 24, 123, 135, 87, 205, 191, 10, 67, 133, 12, 60, 4, 220, 75, 3, 17, 250, 131, 181, 20, 148, 143, 154, 232, 0, 10, 249, 134, 172, 227, 12, 47, 202, 165, 112, 183}, +{116, 192, 50, 113, 190, 38, 62, 120, 14, 254, 93, 51, 140, 183, 232, 133, 17, 79, 79, 18, 56, 137, 144, 135, 239, 187, 141, 80, 107, 103, 167, 228, 207, 198, 184, 12, 209, 162, 109, 221, 57, 249, 108, 46, 70, 92, 200, 108, 79, 108, 225, 103, 148, 40, 29, 235, 127, 22, 216, 252, 98, 162, 170, 165, 53, 51, 241, 157, 13, 106, 25, 219, 53, 185, 161, 175, 46, 195, 213, 40, 242, 137, 104, 174, 221, 156, 140, 118, 56, 125, 139, 138, 162, 80, 105, 115, 145, 237, 114, 186, 71, 239, 239, 56, 106, 205, 7, 109, 195, 236, 193, 23, 115, 28, 144, 188, 101, 61, 185, 182, 78, 97, 27, 155, 1, 155, 63, 98}, +{57, 230, 142, 58, 9, 195, 145, 26, 223, 108, 10, 214, 17, 214, 67, 33, 125, 3, 73, 176, 19, 3, 230, 195, 209, 138, 239, 89, 89, 232, 92, 134, 119, 92, 16, 34, 226, 177, 61, 36, 208, 134, 114, 181, 49, 240, 125, 220, 14, 222, 71, 203, 167, 122, 23, 150, 155, 86, 4, 201, 131, 27, 43, 253, 160, 133, 142, 42, 75, 49, 119, 65, 139, 90, 66, 29, 138, 55, 35, 155, 32, 24, 149, 126, 254, 191, 165, 83, 112, 205, 0, 184, 146, 204, 238, 79, 238, 71, 26, 245, 146, 45, 78, 41, 118, 219, 36, 60, 24, 129, 93, 122, 227, 164, 159, 100, 144, 19, 218, 248, 171, 238, 213, 38, 213, 152, 2, 41}, +{177, 1, 127, 25, 23, 191, 62, 99, 166, 119, 72, 0, 207, 38, 114, 77, 17, 193, 226, 132, 37, 143, 179, 106, 133, 176, 203, 221, 96, 124, 114, 165, 59, 62, 201, 55, 26, 113, 31, 202, 52, 55, 110, 181, 64, 22, 21, 118, 248, 14, 154, 237, 201, 212, 8, 219, 8, 93, 47, 159, 109, 222, 62, 126, 14, 229, 206, 138, 21, 41, 132, 113, 242, 154, 185, 21, 226, 118, 76, 172, 199, 70, 96, 38, 32, 209, 206, 42, 45, 181, 80, 39, 116, 125, 187, 147, 217, 164, 2, 47, 199, 75, 175, 92, 176, 145, 115, 194, 70, 215, 81, 4, 37, 181, 25, 40, 227, 8, 35, 31, 94, 149, 254, 62, 63, 227, 70, 215}, +{88, 132, 130, 62, 199, 190, 234, 233, 122, 32, 28, 137, 46, 226, 240, 35, 97, 48, 239, 177, 116, 33, 69, 137, 15, 153, 53, 229, 195, 137, 47, 252, 238, 21, 11, 161, 82, 88, 172, 147, 40, 0, 250, 241, 194, 144, 1, 246, 90, 33, 224, 125, 186, 162, 176, 166, 251, 205, 45, 112, 86, 113, 55, 118, 125, 48, 85, 111, 209, 96, 69, 79, 111, 4, 24, 236, 100, 141, 15, 247, 25, 240, 53, 136, 118, 87, 248, 24, 68, 23, 62, 24, 168, 59, 234, 42, 202, 238, 31, 140, 252, 16, 186, 85, 87, 116, 71, 232, 42, 65, 254, 189, 144, 205, 85, 188, 234, 32, 26, 237, 221, 204, 28, 146, 20, 87, 153, 250}, +{178, 27, 124, 207, 228, 88, 185, 219, 192, 16, 65, 240, 91, 204, 27, 101, 213, 20, 139, 205, 18, 17, 129, 218, 19, 230, 168, 209, 70, 181, 58, 62, 59, 157, 17, 223, 226, 0, 0, 79, 187, 218, 60, 111, 0, 60, 26, 239, 199, 228, 67, 0, 26, 106, 67, 121, 70, 255, 18, 150, 134, 69, 233, 116, 206, 148, 28, 124, 137, 63, 76, 53, 54, 162, 52, 23, 165, 36, 202, 229, 75, 91, 28, 43, 208, 4, 24, 136, 97, 130, 173, 151, 240, 206, 186, 236, 11, 80, 129, 19, 217, 8, 56, 165, 158, 119, 6, 6, 77, 252, 153, 234, 172, 252, 105, 254, 92, 218, 138, 27, 129, 191, 178, 33, 69, 78, 147, 134}, +{80, 106, 30, 167, 86, 184, 207, 39, 191, 34, 125, 37, 127, 157, 110, 48, 46, 59, 153, 201, 46, 13, 37, 27, 94, 75, 144, 52, 1, 90, 188, 165, 24, 214, 7, 83, 166, 168, 241, 147, 208, 221, 24, 28, 239, 160, 91, 84, 0, 112, 139, 56, 183, 117, 6, 184, 190, 44, 169, 176, 64, 86, 220, 25, 2, 79, 108, 68, 168, 230, 5, 204, 61, 236, 243, 138, 240, 14, 221, 205, 191, 34, 207, 128, 122, 223, 61, 111, 141, 83, 140, 72, 226, 106, 110, 218, 141, 83, 208, 92, 103, 253, 28, 123, 60, 71, 249, 0, 193, 97, 32, 100, 24, 59, 87, 106, 253, 240, 1, 220, 71, 135, 152, 69, 95, 31, 0, 135}, +{196, 221, 249, 177, 236, 105, 115, 146, 62, 222, 121, 97, 88, 221, 56, 240, 184, 214, 116, 15, 79, 54, 234, 81, 73, 81, 110, 249, 224, 78, 204, 196, 179, 142, 227, 216, 234, 171, 209, 215, 3, 64, 57, 126, 98, 81, 189, 83, 87, 126, 160, 44, 94, 52, 231, 224, 92, 68, 174, 229, 6, 194, 151, 242, 201, 15, 216, 65, 89, 100, 55, 124, 111, 223, 137, 226, 147, 239, 83, 223, 251, 126, 217, 116, 21, 94, 20, 143, 111, 52, 54, 10, 78, 184, 18, 176, 179, 21, 150, 178, 52, 219, 200, 254, 236, 223, 37, 115, 194, 254, 216, 165, 82, 228, 80, 186, 227, 37, 86, 135, 227, 57, 79, 59, 213, 229, 174, 34}, +{26, 92, 57, 10, 131, 108, 7, 161, 6, 163, 191, 15, 156, 60, 62, 178, 244, 0, 97, 180, 166, 122, 103, 153, 123, 20, 6, 231, 73, 134, 181, 76, 143, 220, 197, 176, 249, 137, 84, 6, 21, 175, 27, 218, 217, 41, 213, 63, 117, 221, 115, 46, 225, 172, 199, 191, 175, 181, 60, 81, 78, 30, 169, 137, 205, 54, 166, 179, 75, 25, 196, 210, 188, 180, 247, 173, 204, 65, 27, 215, 126, 229, 29, 45, 154, 212, 76, 213, 163, 158, 92, 122, 22, 0, 82, 228, 182, 118, 56, 246, 44, 194, 203, 116, 86, 44, 187, 232, 46, 172, 212, 164, 241, 157, 49, 147, 103, 111, 165, 154, 210, 136, 21, 187, 213, 41, 11, 19}, +{199, 132, 63, 164, 218, 133, 233, 72, 254, 177, 87, 70, 145, 199, 191, 75, 127, 8, 245, 243, 239, 129, 44, 236, 120, 60, 184, 108, 16, 86, 126, 132, 35, 4, 245, 33, 172, 149, 150, 52, 185, 147, 122, 140, 72, 158, 201, 60, 13, 151, 235, 109, 100, 221, 115, 131, 123, 217, 112, 119, 178, 19, 189, 191, 84, 108, 25, 56, 163, 213, 255, 40, 208, 101, 4, 65, 235, 160, 197, 23, 4, 71, 246, 62, 145, 226, 168, 200, 117, 163, 174, 255, 66, 88, 137, 45, 201, 210, 235, 50, 185, 188, 218, 70, 1, 214, 97, 41, 20, 50, 96, 166, 1, 228, 63, 7, 72, 22, 39, 195, 90, 27, 139, 63, 58, 105, 213, 163}, +{78, 202, 102, 137, 149, 111, 113, 153, 89, 155, 124, 226, 187, 151, 138, 120, 103, 2, 20, 82, 85, 195, 13, 186, 53, 254, 172, 129, 100, 230, 245, 165, 38, 88, 95, 32, 188, 91, 9, 77, 108, 12, 65, 66, 168, 216, 62, 125, 168, 136, 167, 204, 171, 131, 209, 8, 108, 232, 170, 247, 201, 153, 32, 23, 41, 214, 243, 231, 107, 44, 223, 75, 151, 151, 148, 138, 177, 181, 48, 205, 168, 77, 242, 33, 130, 96, 191, 27, 56, 192, 100, 229, 173, 138, 87, 77, 159, 37, 140, 213, 105, 173, 161, 180, 69, 156, 138, 183, 248, 99, 218, 151, 126, 44, 66, 200, 137, 36, 144, 185, 80, 176, 90, 199, 218, 186, 118, 3}, +{40, 180, 93, 155, 196, 162, 177, 184, 63, 62, 178, 166, 54, 239, 208, 246, 17, 91, 88, 151, 80, 246, 121, 198, 63, 76, 81, 194, 204, 58, 231, 199, 221, 30, 131, 180, 179, 60, 222, 198, 147, 103, 4, 137, 2, 150, 153, 221, 222, 249, 219, 212, 217, 194, 211, 81, 94, 241, 3, 172, 132, 109, 116, 14, 174, 79, 65, 53, 215, 62, 250, 210, 74, 245, 44, 56, 36, 105, 14, 172, 30, 157, 239, 34, 7, 149, 154, 80, 7, 78, 223, 212, 150, 149, 130, 61, 149, 191, 127, 56, 29, 125, 19, 192, 236, 46, 66, 181, 237, 108, 99, 209, 243, 240, 156, 241, 139, 151, 40, 85, 79, 240, 168, 27, 217, 207, 127, 126}, +{153, 75, 60, 68, 216, 44, 141, 85, 215, 169, 6, 231, 45, 62, 68, 148, 206, 101, 15, 0, 154, 247, 123, 211, 130, 145, 120, 81, 20, 181, 25, 175, 145, 207, 83, 131, 104, 64, 109, 2, 133, 102, 84, 30, 69, 3, 113, 193, 193, 146, 29, 28, 55, 142, 95, 60, 112, 214, 27, 73, 204, 196, 43, 25, 156, 18, 249, 139, 135, 19, 63, 246, 255, 132, 221, 147, 115, 185, 181, 160, 224, 150, 57, 157, 245, 241, 85, 225, 175, 148, 135, 197, 83, 14, 125, 73, 175, 51, 13, 96, 170, 122, 101, 157, 236, 64, 111, 221, 245, 170, 44, 142, 166, 72, 251, 74, 113, 44, 30, 26, 146, 21, 138, 122, 200, 168, 76, 142}, +{154, 192, 56, 142, 107, 132, 194, 125, 138, 83, 3, 113, 24, 15, 119, 156, 17, 133, 48, 12, 234, 209, 79, 210, 87, 147, 29, 55, 195, 207, 140, 199, 41, 191, 15, 83, 164, 73, 13, 61, 75, 133, 34, 7, 192, 87, 204, 33, 204, 67, 110, 193, 180, 81, 235, 242, 211, 104, 246, 190, 18, 86, 20, 59, 224, 124, 12, 150, 30, 60, 88, 94, 206, 170, 175, 162, 108, 52, 239, 247, 128, 54, 152, 185, 7, 98, 54, 81, 14, 99, 16, 73, 245, 79, 21, 171, 158, 208, 68, 31, 144, 58, 32, 250, 183, 63, 0, 217, 48, 192, 194, 142, 80, 133, 84, 33, 4, 129, 160, 137, 28, 169, 67, 87, 156, 0, 112, 244}, +{190, 107, 122, 113, 109, 251, 16, 155, 24, 208, 228, 143, 231, 10, 176, 25, 109, 101, 29, 98, 252, 234, 87, 84, 236, 5, 206, 118, 106, 129, 130, 147, 108, 49, 118, 165, 63, 177, 57, 24, 220, 215, 220, 76, 111, 29, 82, 109, 190, 224, 185, 30, 186, 103, 153, 31, 104, 223, 36, 103, 232, 156, 102, 68, 60, 137, 97, 30, 138, 87, 198, 215, 102, 214, 140, 155, 239, 52, 211, 244, 33, 233, 130, 95, 9, 82, 139, 137, 58, 143, 228, 222, 166, 201, 188, 42, 55, 212, 193, 103, 248, 223, 117, 245, 241, 211, 170, 210, 191, 45, 37, 104, 199, 125, 58, 15, 194, 69, 173, 217, 80, 0, 169, 250, 176, 45, 10, 127}, +{198, 25, 85, 56, 124, 43, 197, 204, 229, 116, 48, 47, 50, 151, 64, 236, 244, 113, 39, 183, 169, 114, 64, 128, 185, 195, 30, 0, 100, 179, 140, 157, 131, 189, 51, 136, 187, 101, 97, 1, 215, 192, 153, 147, 103, 186, 24, 129, 21, 14, 221, 122, 128, 246, 170, 79, 19, 216, 7, 82, 47, 10, 88, 77, 203, 105, 75, 155, 219, 234, 7, 175, 30, 245, 41, 51, 224, 184, 58, 122, 162, 171, 213, 176, 160, 98, 108, 39, 49, 12, 81, 224, 157, 14, 60, 215, 54, 23, 131, 153, 35, 131, 27, 138, 19, 70, 87, 34, 126, 250, 174, 99, 216, 69, 2, 93, 199, 22, 2, 150, 68, 39, 108, 243, 154, 251, 61, 242}, +{125, 177, 196, 221, 74, 12, 157, 89, 88, 167, 70, 229, 20, 97, 193, 171, 250, 177, 171, 166, 179, 205, 134, 39, 168, 186, 193, 145, 28, 58, 103, 188, 187, 241, 113, 168, 144, 20, 204, 228, 164, 172, 31, 91, 198, 61, 24, 237, 229, 134, 171, 102, 51, 60, 193, 182, 150, 114, 41, 243, 56, 178, 100, 211, 205, 123, 91, 76, 252, 255, 239, 86, 132, 65, 123, 230, 29, 162, 241, 13, 37, 57, 186, 47, 98, 19, 56, 216, 246, 7, 195, 53, 55, 124, 196, 35, 54, 207, 17, 198, 50, 172, 86, 104, 196, 72, 83, 30, 80, 231, 231, 66, 138, 99, 20, 71, 93, 216, 222, 129, 176, 39, 85, 182, 205, 77, 74, 41}, +{100, 80, 207, 172, 83, 235, 57, 20, 244, 11, 110, 47, 213, 50, 142, 100, 182, 137, 33, 157, 55, 20, 98, 103, 72, 92, 83, 164, 12, 125, 248, 91, 111, 33, 130, 135, 155, 90, 164, 135, 24, 162, 92, 104, 13, 143, 12, 16, 134, 114, 214, 250, 143, 127, 83, 55, 99, 224, 243, 34, 126, 142, 154, 243, 248, 55, 220, 207, 203, 231, 102, 245, 233, 148, 229, 164, 108, 210, 222, 125, 193, 130, 24, 222, 207, 145, 9, 67, 149, 60, 9, 204, 142, 103, 135, 231, 233, 168, 196, 246, 226, 110, 40, 210, 162, 66, 96, 162, 113, 178, 228, 184, 17, 18, 181, 182, 128, 213, 30, 31, 39, 91, 232, 43, 77, 130, 70, 43}, +{6, 30, 146, 153, 63, 60, 84, 180, 238, 237, 131, 103, 231, 109, 79, 97, 51, 12, 201, 134, 25, 224, 181, 27, 205, 187, 1, 129, 36, 4, 252, 148, 41, 64, 10, 10, 229, 138, 1, 102, 243, 163, 35, 6, 14, 188, 180, 82, 175, 5, 197, 23, 241, 36, 181, 2, 24, 160, 235, 10, 211, 7, 183, 145, 174, 51, 169, 193, 82, 158, 123, 61, 120, 93, 185, 234, 55, 58, 174, 220, 148, 60, 48, 208, 124, 127, 186, 113, 255, 240, 68, 168, 197, 144, 15, 107, 16, 161, 46, 123, 22, 218, 118, 114, 142, 95, 105, 234, 69, 26, 208, 116, 249, 197, 207, 86, 8, 115, 68, 131, 169, 94, 9, 135, 98, 24, 118, 112}, +{111, 97, 211, 198, 29, 218, 60, 57, 39, 39, 190, 224, 146, 70, 173, 98, 227, 34, 12, 124, 169, 201, 122, 245, 207, 55, 165, 97, 8, 77, 59, 61, 86, 203, 251, 86, 160, 38, 103, 208, 239, 142, 239, 183, 156, 241, 170, 136, 242, 204, 45, 185, 135, 93, 205, 16, 0, 137, 104, 18, 68, 178, 49, 210, 121, 72, 241, 31, 57, 159, 121, 212, 242, 34, 150, 212, 61, 126, 80, 17, 242, 75, 32, 225, 139, 64, 240, 233, 29, 178, 171, 23, 98, 72, 150, 110, 181, 4, 2, 25, 250, 240, 139, 61, 113, 34, 86, 64, 231, 47, 216, 218, 249, 36, 106, 46, 238, 20, 84, 150, 23, 237, 176, 236, 255, 201, 57, 183}, +{209, 235, 139, 210, 129, 252, 76, 38, 85, 177, 228, 217, 215, 10, 142, 105, 214, 46, 15, 159, 66, 173, 133, 203, 30, 47, 181, 81, 243, 110, 31, 166, 62, 114, 134, 196, 32, 18, 254, 16, 33, 242, 106, 239, 208, 77, 186, 116, 134, 177, 19, 136, 230, 42, 88, 42, 102, 174, 254, 166, 235, 123, 251, 173, 12, 98, 176, 182, 234, 5, 183, 11, 165, 232, 157, 252, 94, 23, 149, 51, 145, 252, 165, 252, 80, 162, 82, 176, 94, 129, 96, 32, 87, 146, 197, 132, 70, 170, 237, 128, 188, 17, 84, 248, 186, 113, 179, 127, 249, 199, 107, 86, 141, 204, 32, 150, 213, 178, 233, 249, 133, 182, 48, 148, 247, 182, 231, 10}, +{178, 162, 35, 192, 148, 118, 143, 242, 19, 50, 99, 40, 72, 253, 3, 204, 101, 130, 193, 80, 184, 250, 234, 166, 175, 29, 229, 166, 165, 191, 12, 126, 159, 106, 57, 253, 133, 173, 69, 207, 216, 77, 183, 59, 181, 155, 226, 107, 251, 43, 81, 244, 255, 108, 69, 187, 189, 69, 122, 124, 15, 128, 127, 220, 9, 109, 202, 52, 220, 55, 237, 8, 142, 20, 210, 252, 7, 114, 169, 115, 171, 180, 163, 111, 43, 218, 27, 122, 99, 142, 62, 136, 64, 132, 250, 155, 30, 83, 65, 87, 34, 106, 128, 70, 7, 185, 188, 1, 180, 127, 209, 38, 168, 36, 96, 51, 159, 61, 35, 190, 188, 25, 120, 65, 90, 3, 227, 178}, +{90, 231, 45, 71, 205, 1, 192, 20, 141, 53, 78, 35, 133, 16, 85, 84, 233, 62, 225, 206, 71, 91, 105, 44, 30, 222, 8, 25, 212, 111, 29, 229, 212, 18, 243, 40, 19, 191, 107, 171, 27, 87, 163, 41, 26, 102, 93, 165, 54, 83, 196, 241, 87, 71, 238, 160, 3, 207, 167, 43, 230, 62, 205, 54, 76, 137, 37, 240, 184, 90, 92, 114, 204, 245, 84, 236, 198, 195, 111, 184, 252, 160, 180, 106, 174, 60, 221, 42, 59, 3, 187, 3, 73, 228, 247, 43, 11, 169, 43, 180, 133, 55, 83, 98, 50, 229, 85, 2, 188, 35, 102, 201, 98, 226, 87, 19, 240, 25, 20, 159, 240, 209, 193, 194, 198, 161, 209, 58}, +{164, 254, 131, 130, 0, 116, 232, 236, 97, 236, 71, 143, 252, 183, 173, 138, 143, 58, 131, 32, 20, 11, 48, 134, 198, 71, 134, 201, 41, 54, 200, 39, 205, 128, 24, 27, 161, 94, 14, 99, 218, 10, 132, 241, 67, 207, 94, 208, 74, 119, 210, 96, 78, 244, 96, 136, 142, 72, 164, 75, 101, 152, 245, 182, 241, 198, 238, 94, 100, 45, 64, 108, 169, 225, 235, 57, 65, 127, 107, 87, 211, 24, 213, 241, 78, 18, 73, 13, 20, 154, 59, 102, 227, 43, 46, 161, 78, 248, 238, 37, 214, 21, 174, 102, 66, 44, 176, 14, 5, 208, 181, 171, 32, 138, 95, 8, 19, 22, 100, 54, 127, 89, 196, 94, 139, 114, 169, 226}, +{184, 138, 161, 82, 143, 219, 73, 100, 165, 196, 181, 214, 246, 84, 211, 229, 61, 46, 92, 184, 23, 197, 89, 94, 79, 97, 108, 110, 253, 86, 126, 156, 60, 10, 176, 52, 45, 126, 180, 162, 15, 194, 104, 11, 246, 108, 75, 97, 6, 84, 177, 17, 219, 65, 72, 135, 50, 71, 9, 188, 162, 209, 32, 46, 189, 133, 89, 252, 105, 86, 227, 145, 249, 33, 160, 14, 147, 4, 244, 70, 85, 130, 99, 222, 150, 105, 194, 215, 206, 18, 123, 145, 130, 216, 80, 141, 134, 35, 205, 71, 54, 221, 22, 146, 30, 156, 33, 16, 50, 238, 53, 150, 144, 29, 51, 37, 141, 25, 94, 89, 187, 108, 210, 127, 122, 156, 103, 8}, +{92, 83, 88, 46, 136, 29, 34, 160, 102, 5, 110, 90, 131, 239, 99, 1, 136, 166, 95, 109, 7, 58, 132, 120, 255, 176, 203, 43, 36, 246, 38, 68, 63, 9, 110, 79, 212, 103, 204, 123, 152, 134, 145, 106, 122, 247, 210, 93, 53, 76, 120, 244, 246, 63, 126, 88, 190, 128, 170, 203, 153, 233, 53, 223, 94, 97, 50, 10, 185, 140, 112, 221, 38, 252, 237, 243, 43, 118, 123, 186, 135, 138, 25, 102, 170, 25, 45, 229, 17, 86, 15, 133, 118, 120, 124, 10, 117, 249, 120, 172, 138, 25, 26, 92, 12, 253, 249, 187, 170, 48, 171, 41, 86, 62, 19, 55, 198, 92, 190, 129, 58, 148, 50, 25, 157, 46, 157, 101}, +{14, 114, 110, 168, 181, 68, 117, 171, 111, 15, 249, 76, 158, 134, 187, 74, 241, 247, 131, 232, 54, 72, 121, 231, 81, 118, 42, 182, 166, 84, 12, 115, 33, 238, 109, 66, 109, 226, 90, 169, 186, 119, 128, 26, 241, 115, 148, 30, 126, 70, 147, 2, 197, 88, 145, 121, 114, 166, 241, 201, 201, 86, 81, 131, 100, 179, 171, 226, 24, 42, 53, 213, 233, 145, 174, 171, 238, 33, 60, 187, 56, 113, 51, 13, 246, 217, 70, 12, 180, 139, 134, 38, 188, 79, 76, 191, 98, 52, 93, 11, 48, 233, 214, 116, 195, 226, 227, 48, 184, 255, 127, 120, 85, 47, 194, 179, 19, 156, 131, 96, 59, 39, 132, 57, 129, 175, 58, 139}, +{141, 18, 38, 135, 13, 65, 46, 65, 165, 36, 182, 97, 95, 180, 228, 44, 5, 132, 73, 196, 170, 143, 198, 168, 31, 134, 61, 204, 196, 79, 106, 5, 254, 93, 181, 131, 186, 150, 34, 206, 24, 235, 94, 34, 83, 132, 108, 216, 4, 59, 154, 72, 177, 199, 102, 206, 149, 222, 105, 169, 98, 100, 158, 158, 47, 119, 147, 198, 250, 218, 32, 222, 212, 15, 14, 137, 235, 198, 100, 219, 253, 135, 33, 89, 98, 43, 219, 18, 10, 131, 150, 84, 164, 232, 218, 243, 223, 228, 50, 198, 195, 102, 197, 48, 235, 55, 181, 27, 241, 164, 59, 176, 29, 104, 100, 51, 33, 250, 142, 143, 5, 169, 147, 231, 95, 17, 191, 0}, +{32, 217, 184, 57, 211, 78, 58, 180, 163, 11, 212, 193, 174, 186, 223, 237, 148, 89, 20, 228, 226, 215, 160, 30, 35, 6, 75, 240, 164, 233, 67, 71, 21, 88, 249, 179, 5, 161, 255, 57, 87, 100, 130, 96, 245, 136, 147, 116, 82, 142, 100, 241, 163, 84, 6, 216, 86, 211, 165, 187, 172, 179, 241, 220, 113, 61, 86, 139, 26, 91, 12, 106, 69, 172, 57, 35, 168, 48, 183, 90, 221, 229, 237, 47, 231, 231, 219, 76, 231, 230, 80, 194, 128, 177, 224, 249, 204, 238, 79, 168, 41, 151, 140, 172, 142, 247, 11, 83, 125, 174, 228, 38, 169, 224, 26, 134, 198, 127, 115, 39, 132, 186, 205, 38, 118, 87, 74, 7}, +{198, 222, 207, 142, 75, 8, 129, 95, 10, 129, 83, 20, 47, 14, 3, 23, 212, 144, 196, 95, 165, 173, 51, 252, 151, 73, 212, 180, 155, 112, 55, 141, 20, 159, 150, 32, 245, 180, 98, 158, 55, 73, 164, 245, 195, 179, 110, 1, 221, 118, 206, 51, 254, 180, 229, 111, 146, 103, 128, 135, 162, 146, 151, 26, 217, 205, 218, 255, 8, 84, 48, 52, 134, 197, 58, 41, 122, 236, 116, 91, 193, 75, 18, 207, 179, 128, 67, 213, 150, 59, 30, 89, 88, 140, 58, 184, 37, 99, 36, 245, 10, 2, 117, 89, 138, 216, 121, 148, 192, 237, 195, 70, 8, 169, 160, 73, 185, 79, 216, 148, 202, 26, 76, 251, 70, 181, 110, 40}, +{117, 167, 19, 147, 19, 2, 24, 218, 255, 204, 116, 72, 247, 142, 75, 146, 220, 26, 254, 247, 206, 30, 161, 152, 202, 80, 166, 164, 244, 1, 237, 147, 190, 254, 1, 130, 241, 103, 7, 38, 34, 254, 234, 19, 8, 184, 52, 34, 44, 233, 168, 214, 125, 21, 12, 47, 135, 128, 78, 196, 80, 9, 93, 225, 203, 88, 84, 72, 113, 216, 102, 200, 116, 154, 185, 82, 93, 90, 64, 10, 143, 208, 29, 154, 238, 73, 224, 253, 137, 99, 82, 146, 9, 244, 203, 163, 180, 11, 242, 224, 173, 42, 29, 20, 58, 1, 199, 162, 120, 145, 37, 147, 7, 123, 2, 136, 138, 236, 194, 189, 220, 118, 135, 68, 210, 128, 68, 13}, +{192, 147, 251, 206, 155, 135, 241, 154, 81, 152, 174, 231, 232, 122, 180, 172, 17, 240, 105, 244, 153, 217, 77, 100, 43, 5, 191, 11, 217, 14, 112, 209, 96, 158, 107, 81, 113, 230, 120, 31, 20, 135, 37, 141, 38, 130, 67, 190, 32, 10, 101, 102, 254, 133, 45, 132, 233, 205, 64, 82, 194, 59, 230, 194, 182, 172, 109, 155, 150, 221, 169, 71, 63, 246, 220, 201, 151, 18, 251, 211, 149, 99, 22, 137, 158, 143, 16, 197, 109, 71, 248, 129, 53, 210, 5, 246, 118, 16, 149, 225, 140, 40, 94, 138, 64, 178, 4, 165, 204, 14, 12, 57, 146, 219, 87, 242, 51, 55, 83, 101, 82, 164, 176, 0, 136, 33, 78, 224}, +{73, 239, 70, 27, 174, 121, 65, 93, 97, 55, 160, 113, 20, 233, 166, 10, 124, 9, 11, 76, 61, 84, 185, 162, 75, 251, 25, 117, 153, 249, 42, 115, 63, 253, 8, 66, 201, 255, 168, 180, 49, 166, 88, 26, 190, 180, 184, 175, 161, 54, 49, 204, 84, 89, 30, 156, 191, 19, 12, 255, 235, 154, 233, 191, 193, 72, 175, 88, 250, 70, 211, 190, 143, 31, 69, 237, 48, 154, 38, 96, 149, 164, 99, 116, 139, 226, 241, 109, 243, 100, 176, 247, 205, 160, 27, 8, 108, 14, 191, 83, 93, 165, 236, 39, 169, 157, 37, 152, 242, 225, 255, 255, 33, 123, 168, 168, 153, 51, 52, 65, 137, 1, 23, 53, 81, 85, 36, 188}, +{206, 43, 240, 113, 51, 240, 22, 78, 1, 207, 229, 229, 134, 236, 187, 132, 8, 50, 240, 234, 32, 158, 205, 166, 186, 196, 55, 152, 155, 229, 125, 57, 235, 83, 56, 66, 251, 151, 33, 55, 112, 133, 84, 246, 5, 43, 97, 33, 26, 82, 152, 215, 45, 37, 31, 154, 194, 139, 188, 17, 118, 240, 166, 27, 240, 99, 255, 123, 79, 63, 38, 114, 145, 156, 65, 3, 79, 233, 223, 117, 209, 109, 57, 88, 230, 196, 187, 219, 183, 244, 50, 222, 97, 143, 191, 180, 42, 112, 28, 159, 142, 208, 217, 137, 207, 143, 2, 202, 61, 167, 237, 19, 207, 73, 87, 45, 32, 3, 117, 112, 234, 70, 100, 165, 192, 70, 157, 64}, +{162, 189, 22, 39, 40, 167, 159, 203, 97, 25, 168, 102, 214, 21, 171, 146, 225, 50, 2, 13, 139, 79, 79, 57, 80, 120, 82, 135, 128, 29, 219, 98, 203, 44, 76, 214, 47, 222, 109, 203, 193, 160, 9, 248, 70, 112, 255, 45, 173, 96, 168, 1, 104, 44, 113, 113, 223, 83, 212, 142, 199, 225, 106, 181, 2, 52, 247, 64, 167, 208, 70, 186, 0, 142, 154, 133, 15, 55, 235, 97, 116, 64, 69, 42, 98, 116, 122, 82, 4, 39, 112, 160, 197, 124, 232, 24, 100, 106, 37, 84, 50, 47, 114, 139, 213, 200, 103, 55, 31, 253, 181, 3, 113, 218, 11, 72, 196, 101, 248, 55, 232, 29, 236, 68, 176, 104, 210, 94}, +{33, 188, 18, 14, 84, 29, 54, 68, 49, 160, 22, 88, 131, 195, 173, 60, 157, 253, 38, 23, 181, 130, 247, 207, 228, 58, 185, 47, 21, 40, 154, 38, 163, 191, 41, 229, 94, 222, 9, 65, 174, 131, 50, 44, 39, 218, 225, 252, 14, 123, 254, 164, 198, 53, 15, 211, 185, 198, 25, 66, 165, 228, 64, 98, 18, 64, 243, 3, 98, 82, 98, 113, 250, 105, 157, 186, 56, 204, 181, 106, 214, 191, 218, 166, 4, 128, 218, 183, 138, 174, 158, 216, 215, 227, 179, 16, 139, 221, 22, 50, 160, 62, 180, 197, 178, 199, 7, 147, 102, 16, 215, 116, 126, 222, 58, 59, 234, 27, 109, 234, 159, 33, 242, 219, 119, 16, 45, 24}, +{172, 174, 211, 154, 197, 236, 234, 131, 168, 226, 149, 163, 83, 29, 250, 107, 100, 186, 186, 217, 211, 86, 64, 137, 183, 195, 98, 161, 136, 81, 194, 115, 248, 1, 125, 78, 42, 239, 26, 141, 167, 239, 45, 68, 90, 186, 147, 208, 96, 220, 49, 222, 31, 122, 37, 80, 110, 241, 252, 219, 108, 65, 84, 34, 86, 179, 108, 209, 102, 161, 123, 95, 144, 89, 32, 252, 243, 29, 27, 9, 63, 65, 194, 230, 127, 200, 41, 154, 211, 29, 70, 222, 113, 83, 124, 146, 204, 214, 22, 164, 48, 213, 192, 10, 158, 224, 50, 47, 176, 6, 64, 152, 104, 251, 102, 208, 159, 145, 178, 90, 25, 95, 117, 121, 59, 16, 161, 47}, +{114, 229, 130, 138, 86, 204, 182, 75, 36, 133, 213, 168, 67, 170, 73, 138, 253, 178, 104, 191, 107, 182, 113, 7, 11, 5, 102, 74, 67, 207, 134, 147, 128, 200, 110, 239, 67, 152, 162, 83, 168, 31, 197, 185, 95, 192, 58, 155, 61, 248, 44, 133, 11, 214, 211, 49, 95, 176, 76, 86, 142, 129, 52, 155, 73, 160, 86, 10, 148, 189, 180, 129, 152, 163, 59, 210, 173, 191, 127, 178, 159, 187, 137, 212, 117, 230, 159, 151, 88, 97, 93, 202, 65, 24, 151, 219, 56, 116, 143, 214, 243, 143, 107, 144, 102, 169, 74, 174, 28, 236, 236, 210, 70, 245, 13, 212, 95, 197, 148, 103, 14, 29, 49, 249, 213, 7, 35, 59}, +{91, 177, 246, 169, 192, 51, 134, 186, 199, 22, 152, 50, 227, 135, 95, 207, 165, 243, 215, 17, 252, 91, 132, 216, 129, 114, 5, 168, 68, 137, 255, 6, 167, 143, 94, 205, 129, 66, 35, 110, 212, 48, 175, 60, 200, 80, 64, 231, 152, 2, 255, 73, 225, 148, 194, 243, 252, 121, 84, 234, 105, 143, 80, 13, 170, 219, 150, 33, 147, 142, 97, 245, 93, 246, 151, 131, 202, 20, 67, 99, 114, 233, 63, 11, 55, 55, 81, 131, 4, 168, 52, 43, 182, 107, 226, 236, 18, 178, 61, 80, 135, 161, 149, 58, 184, 248, 238, 61, 33, 189, 61, 49, 103, 91, 207, 154, 194, 108, 228, 251, 226, 91, 93, 5, 67, 200, 179, 252}, +{21, 44, 104, 6, 151, 91, 9, 51, 63, 131, 158, 195, 19, 49, 124, 130, 59, 237, 176, 103, 21, 191, 135, 46, 181, 185, 233, 225, 251, 169, 188, 182, 17, 122, 216, 224, 248, 22, 195, 193, 236, 45, 65, 151, 201, 47, 177, 58, 10, 110, 203, 133, 255, 151, 187, 81, 114, 177, 110, 146, 254, 137, 51, 197, 21, 80, 93, 29, 166, 43, 231, 222, 156, 58, 95, 146, 164, 71, 160, 18, 106, 185, 193, 172, 251, 2, 54, 166, 238, 199, 0, 85, 33, 72, 182, 119, 185, 209, 212, 103, 194, 28, 225, 233, 114, 202, 123, 152, 113, 255, 90, 33, 95, 212, 157, 91, 158, 21, 237, 80, 188, 126, 130, 212, 122, 253, 189, 51}, +{36, 36, 43, 117, 245, 74, 151, 163, 130, 233, 75, 66, 117, 173, 35, 120, 51, 186, 150, 174, 110, 11, 200, 17, 114, 183, 176, 67, 104, 225, 181, 37, 93, 52, 1, 47, 161, 190, 98, 188, 47, 199, 97, 158, 168, 165, 224, 11, 34, 246, 108, 153, 194, 178, 245, 179, 31, 33, 110, 224, 0, 149, 238, 121, 161, 136, 93, 218, 128, 110, 34, 126, 116, 12, 72, 20, 214, 9, 147, 242, 74, 161, 6, 240, 8, 239, 73, 248, 13, 174, 98, 128, 126, 244, 252, 169, 137, 197, 2, 32, 126, 43, 39, 218, 85, 58, 230, 191, 238, 219, 82, 2, 108, 178, 75, 176, 63, 2, 5, 223, 226, 81, 207, 97, 122, 99, 200, 221}, +{11, 136, 167, 41, 237, 220, 183, 126, 166, 49, 5, 111, 173, 165, 17, 182, 170, 173, 41, 200, 65, 201, 215, 27, 148, 194, 164, 186, 184, 135, 253, 127, 143, 251, 230, 132, 201, 75, 128, 75, 12, 96, 94, 54, 28, 104, 129, 189, 163, 54, 88, 174, 105, 209, 97, 89, 197, 145, 205, 149, 138, 64, 220, 250, 87, 16, 253, 113, 71, 144, 67, 145, 220, 9, 207, 46, 80, 31, 36, 166, 97, 150, 19, 187, 140, 10, 223, 199, 196, 135, 85, 60, 144, 96, 157, 177, 89, 94, 51, 64, 249, 138, 91, 51, 75, 183, 153, 28, 56, 127, 228, 100, 168, 94, 146, 147, 208, 2, 107, 142, 7, 51, 232, 197, 95, 59, 232, 74}, +{57, 214, 102, 140, 122, 95, 230, 207, 186, 211, 91, 40, 194, 61, 85, 244, 247, 8, 74, 107, 43, 108, 253, 204, 18, 163, 64, 182, 28, 32, 206, 150, 205, 248, 231, 224, 44, 52, 72, 7, 85, 92, 87, 174, 153, 80, 62, 73, 239, 221, 201, 127, 171, 106, 156, 224, 200, 131, 240, 228, 92, 176, 80, 20, 169, 169, 151, 81, 162, 118, 250, 233, 188, 170, 24, 169, 160, 82, 106, 205, 250, 19, 128, 253, 163, 251, 14, 196, 102, 50, 61, 81, 161, 225, 169, 115, 129, 235, 163, 132, 250, 155, 127, 217, 220, 94, 5, 15, 81, 16, 116, 110, 152, 231, 191, 82, 162, 20, 76, 59, 39, 91, 150, 181, 111, 209, 0, 144}, +{58, 92, 10, 226, 76, 183, 136, 225, 163, 235, 77, 179, 90, 134, 252, 2, 47, 68, 64, 241, 245, 190, 242, 197, 44, 123, 62, 61, 102, 159, 34, 162, 100, 95, 11, 254, 238, 199, 103, 229, 69, 6, 116, 186, 220, 49, 183, 253, 178, 211, 197, 81, 57, 144, 105, 18, 136, 61, 204, 133, 60, 128, 97, 219, 19, 233, 185, 32, 239, 183, 26, 90, 173, 251, 179, 111, 169, 180, 172, 180, 250, 34, 206, 169, 81, 113, 42, 193, 50, 173, 15, 27, 185, 224, 25, 4, 96, 183, 45, 50, 233, 227, 247, 20, 46, 112, 56, 51, 104, 204, 165, 134, 12, 57, 200, 41, 170, 84, 188, 5, 114, 6, 82, 31, 124, 122, 19, 127}, +{180, 220, 137, 213, 205, 94, 108, 149, 151, 94, 82, 202, 215, 45, 136, 231, 22, 51, 186, 194, 96, 178, 7, 205, 7, 164, 48, 106, 225, 157, 96, 116, 121, 220, 73, 89, 1, 172, 217, 14, 156, 104, 213, 171, 90, 18, 90, 129, 18, 159, 159, 5, 12, 250, 63, 148, 126, 154, 40, 111, 112, 59, 173, 122, 95, 93, 251, 148, 17, 179, 66, 242, 81, 6, 155, 101, 1, 5, 27, 35, 85, 78, 199, 96, 118, 172, 146, 138, 27, 107, 106, 92, 22, 145, 244, 158, 181, 29, 231, 215, 31, 30, 81, 213, 205, 37, 152, 180, 154, 11, 157, 5, 15, 83, 114, 111, 46, 164, 191, 49, 175, 146, 6, 218, 152, 4, 75, 224}, +{138, 51, 251, 172, 175, 184, 140, 79, 249, 249, 232, 68, 224, 151, 181, 235, 131, 57, 157, 92, 44, 70, 12, 105, 28, 152, 147, 172, 239, 89, 249, 157, 216, 169, 31, 199, 27, 80, 255, 8, 163, 249, 71, 35, 103, 44, 129, 209, 36, 210, 154, 242, 203, 196, 170, 207, 73, 237, 142, 129, 110, 48, 10, 240, 252, 102, 179, 158, 39, 43, 121, 246, 98, 0, 183, 111, 175, 119, 241, 21, 34, 159, 185, 44, 20, 21, 140, 217, 98, 207, 245, 178, 168, 54, 82, 7, 3, 226, 241, 124, 86, 1, 21, 173, 46, 232, 213, 152, 26, 130, 167, 186, 177, 92, 30, 47, 250, 149, 251, 179, 93, 231, 187, 161, 46, 245, 218, 180}, +{71, 244, 7, 203, 170, 150, 110, 100, 147, 175, 244, 220, 104, 245, 235, 11, 219, 20, 158, 202, 74, 168, 134, 77, 107, 36, 36, 8, 127, 26, 31, 249, 208, 241, 71, 115, 77, 68, 71, 156, 24, 145, 202, 231, 156, 216, 146, 94, 80, 93, 78, 245, 207, 178, 115, 179, 110, 149, 246, 179, 40, 134, 247, 51, 30, 208, 82, 253, 22, 113, 114, 235, 209, 45, 212, 90, 21, 117, 255, 52, 29, 165, 115, 143, 24, 222, 198, 66, 185, 79, 231, 137, 202, 125, 102, 107, 30, 213, 121, 85, 167, 143, 112, 101, 174, 249, 42, 88, 87, 23, 216, 191, 208, 120, 113, 178, 143, 125, 12, 231, 242, 112, 89, 184, 57, 161, 238, 28}, +{159, 157, 77, 71, 75, 20, 201, 7, 48, 253, 154, 102, 139, 43, 153, 175, 106, 42, 161, 64, 63, 207, 12, 28, 198, 43, 133, 209, 123, 23, 155, 15, 55, 176, 95, 35, 158, 151, 245, 235, 148, 128, 152, 93, 159, 254, 144, 13, 250, 246, 77, 94, 149, 95, 129, 154, 17, 45, 196, 146, 43, 226, 1, 78, 120, 235, 45, 215, 198, 10, 6, 33, 94, 24, 155, 117, 95, 179, 100, 125, 14, 183, 188, 215, 160, 155, 237, 225, 159, 249, 202, 49, 53, 139, 218, 98, 167, 77, 133, 166, 138, 140, 193, 167, 50, 56, 112, 183, 253, 152, 29, 144, 166, 114, 132, 17, 167, 98, 201, 100, 19, 82, 199, 172, 156, 194, 207, 201}, +{117, 193, 52, 107, 5, 27, 136, 89, 143, 48, 177, 229, 82, 99, 221, 79, 175, 61, 51, 106, 38, 132, 151, 236, 121, 210, 123, 114, 125, 250, 5, 250, 228, 147, 241, 114, 72, 45, 237, 167, 222, 176, 152, 85, 162, 180, 0, 108, 196, 227, 87, 5, 121, 219, 202, 36, 17, 249, 205, 9, 175, 163, 23, 106, 121, 235, 105, 148, 64, 205, 98, 137, 19, 190, 88, 186, 117, 153, 4, 71, 85, 197, 175, 176, 139, 103, 24, 161, 8, 33, 244, 179, 101, 112, 130, 70, 23, 39, 207, 4, 124, 188, 172, 247, 254, 101, 249, 109, 72, 181, 52, 167, 216, 162, 104, 149, 236, 160, 57, 130, 86, 199, 251, 19, 155, 13, 179, 64}, +{48, 222, 138, 100, 110, 82, 33, 201, 71, 187, 125, 80, 64, 208, 146, 67, 76, 25, 138, 67, 177, 88, 159, 22, 173, 14, 251, 112, 14, 31, 67, 35, 145, 162, 236, 148, 220, 255, 11, 78, 75, 103, 44, 189, 188, 237, 178, 87, 111, 126, 14, 70, 75, 186, 232, 86, 235, 133, 147, 170, 233, 248, 204, 197, 162, 83, 103, 215, 47, 160, 238, 5, 190, 170, 67, 96, 87, 210, 193, 8, 154, 198, 71, 242, 230, 113, 233, 23, 111, 248, 141, 36, 95, 92, 240, 252, 113, 69, 211, 174, 110, 168, 33, 200, 221, 210, 208, 11, 244, 48, 12, 171, 25, 199, 153, 35, 128, 247, 245, 93, 58, 73, 249, 241, 228, 92, 133, 236}, +{59, 23, 182, 211, 19, 159, 245, 169, 44, 65, 26, 46, 232, 84, 16, 231, 153, 35, 103, 94, 188, 178, 56, 237, 48, 57, 140, 86, 171, 156, 79, 230, 54, 62, 92, 62, 38, 158, 11, 68, 97, 40, 105, 172, 73, 241, 113, 52, 65, 247, 165, 155, 88, 116, 247, 13, 211, 12, 159, 233, 78, 35, 231, 109, 158, 230, 73, 61, 243, 23, 68, 210, 38, 8, 211, 155, 233, 24, 154, 96, 190, 144, 132, 220, 77, 37, 118, 26, 79, 74, 18, 175, 243, 226, 16, 32, 127, 147, 141, 135, 227, 212, 149, 64, 181, 91, 248, 33, 120, 40, 250, 215, 112, 67, 76, 162, 30, 90, 188, 220, 121, 243, 40, 197, 31, 55, 112, 136}, +{112, 86, 153, 144, 102, 107, 28, 125, 133, 102, 87, 147, 138, 179, 229, 19, 202, 78, 120, 157, 195, 152, 12, 68, 82, 142, 52, 49, 93, 17, 163, 134, 37, 35, 215, 160, 11, 14, 65, 28, 108, 210, 99, 107, 175, 71, 145, 46, 42, 44, 234, 167, 98, 137, 163, 226, 100, 126, 179, 129, 119, 132, 156, 172, 56, 137, 102, 244, 182, 164, 167, 45, 114, 144, 80, 174, 88, 219, 186, 72, 13, 149, 106, 51, 34, 232, 118, 152, 122, 4, 13, 73, 138, 254, 46, 92, 0, 224, 232, 4, 54, 187, 153, 46, 16, 155, 195, 153, 43, 46, 25, 93, 52, 141, 49, 196, 255, 70, 175, 161, 141, 87, 17, 5, 148, 42, 26, 93}, +{22, 159, 192, 205, 110, 124, 234, 64, 98, 190, 190, 40, 127, 238, 194, 152, 141, 102, 173, 100, 206, 6, 180, 68, 233, 226, 95, 180, 164, 219, 205, 34, 239, 147, 138, 251, 68, 4, 95, 160, 110, 107, 194, 72, 94, 210, 99, 213, 127, 168, 19, 5, 16, 61, 236, 173, 152, 63, 192, 56, 45, 22, 49, 85, 139, 227, 65, 177, 33, 67, 14, 106, 100, 41, 9, 29, 234, 248, 219, 30, 76, 252, 110, 56, 82, 103, 104, 138, 180, 182, 11, 187, 204, 150, 11, 244, 39, 125, 132, 236, 33, 217, 220, 196, 16, 18, 155, 220, 57, 200, 138, 174, 49, 166, 192, 94, 70, 11, 199, 9, 199, 211, 236, 15, 20, 27, 237, 134}, +{56, 117, 1, 93, 212, 233, 81, 104, 209, 134, 137, 153, 33, 56, 242, 108, 129, 171, 93, 10, 82, 84, 229, 35, 13, 246, 12, 212, 223, 125, 76, 148, 160, 191, 110, 214, 216, 152, 118, 70, 168, 60, 198, 246, 135, 247, 80, 45, 110, 46, 8, 145, 247, 177, 115, 188, 7, 60, 220, 236, 242, 202, 1, 251, 27, 141, 39, 40, 22, 189, 121, 97, 182, 51, 227, 72, 148, 26, 119, 13, 218, 7, 64, 253, 34, 100, 165, 148, 170, 240, 235, 200, 46, 9, 224, 193, 170, 66, 216, 30, 62, 164, 252, 167, 145, 124, 95, 56, 29, 31, 184, 128, 33, 227, 99, 218, 13, 213, 153, 231, 60, 37, 40, 6, 209, 4, 87, 23}, +{70, 173, 153, 27, 82, 166, 238, 52, 161, 60, 119, 140, 135, 214, 158, 94, 135, 43, 124, 178, 0, 156, 146, 65, 202, 211, 10, 200, 18, 129, 248, 162, 118, 40, 253, 188, 123, 173, 220, 229, 194, 76, 33, 68, 73, 54, 240, 111, 206, 50, 75, 32, 123, 217, 99, 95, 242, 104, 122, 1, 191, 5, 23, 216, 35, 47, 48, 139, 113, 236, 129, 161, 51, 177, 114, 178, 15, 210, 249, 126, 137, 221, 24, 232, 1, 63, 113, 193, 233, 115, 74, 176, 46, 218, 86, 202, 251, 217, 129, 143, 203, 60, 168, 216, 107, 71, 89, 97, 156, 203, 245, 56, 87, 114, 226, 62, 40, 16, 83, 157, 26, 224, 213, 24, 29, 200, 50, 51}, +{49, 90, 214, 53, 145, 234, 23, 169, 250, 50, 157, 208, 187, 88, 150, 130, 246, 65, 181, 100, 177, 175, 27, 96, 203, 121, 41, 192, 107, 156, 2, 188, 164, 26, 58, 179, 12, 183, 14, 79, 48, 244, 81, 192, 152, 238, 181, 33, 164, 149, 190, 210, 56, 94, 195, 123, 44, 254, 226, 93, 196, 232, 154, 189, 160, 116, 14, 156, 91, 82, 199, 24, 10, 131, 63, 228, 81, 35, 224, 8, 132, 166, 1, 132, 152, 245, 254, 111, 122, 199, 125, 245, 98, 234, 162, 152, 59, 22, 29, 213, 133, 226, 42, 145, 40, 29, 118, 51, 166, 207, 86, 19, 62, 24, 234, 180, 191, 40, 215, 210, 243, 155, 172, 77, 167, 145, 71, 249}, +{169, 246, 207, 43, 227, 23, 220, 109, 183, 184, 225, 99, 218, 166, 124, 163, 170, 52, 1, 252, 155, 237, 80, 170, 111, 65, 44, 92, 168, 112, 57, 191, 52, 44, 173, 37, 245, 90, 126, 252, 68, 88, 146, 7, 62, 207, 236, 251, 242, 79, 133, 181, 161, 52, 108, 69, 74, 145, 1, 146, 158, 179, 165, 102, 197, 64, 141, 133, 214, 109, 155, 88, 163, 227, 142, 2, 35, 190, 180, 80, 49, 202, 147, 135, 156, 46, 91, 231, 160, 93, 209, 118, 54, 196, 2, 42, 128, 231, 234, 21, 232, 132, 233, 255, 239, 153, 247, 192, 87, 114, 59, 75, 34, 13, 187, 179, 245, 167, 30, 5, 51, 4, 234, 235, 43, 9, 151, 218}, +{59, 149, 126, 147, 142, 220, 186, 7, 68, 213, 111, 212, 176, 25, 70, 207, 39, 193, 186, 178, 50, 12, 73, 199, 193, 195, 246, 78, 0, 255, 87, 106, 4, 5, 92, 180, 195, 91, 131, 205, 189, 146, 99, 229, 50, 168, 192, 152, 39, 20, 25, 100, 48, 4, 7, 241, 218, 212, 105, 149, 236, 221, 218, 4, 30, 109, 184, 250, 74, 121, 127, 74, 77, 203, 91, 224, 12, 80, 10, 7, 80, 186, 9, 70, 194, 180, 60, 18, 214, 177, 52, 182, 66, 88, 51, 201, 87, 136, 107, 136, 105, 51, 134, 46, 120, 167, 146, 243, 162, 253, 7, 126, 234, 195, 30, 201, 14, 186, 54, 4, 56, 220, 141, 70, 14, 159, 200, 73}, +{67, 229, 213, 185, 229, 126, 208, 85, 70, 8, 52, 167, 137, 213, 25, 163, 17, 186, 77, 249, 71, 232, 114, 47, 68, 208, 88, 178, 134, 202, 139, 80, 75, 197, 82, 32, 107, 241, 220, 112, 159, 63, 223, 203, 109, 178, 71, 186, 91, 82, 142, 7, 160, 221, 36, 156, 82, 25, 51, 221, 38, 6, 224, 66, 247, 59, 111, 184, 193, 147, 152, 217, 218, 133, 111, 248, 229, 180, 103, 42, 93, 228, 166, 28, 211, 241, 143, 226, 178, 212, 20, 195, 60, 84, 62, 47, 223, 31, 65, 28, 63, 238, 11, 137, 60, 35, 60, 236, 211, 180, 25, 87, 43, 21, 68, 24, 136, 212, 20, 80, 109, 137, 187, 85, 121, 14, 212, 85}, +{102, 211, 50, 139, 122, 64, 29, 59, 14, 80, 85, 228, 155, 109, 224, 53, 111, 222, 242, 86, 30, 92, 129, 128, 51, 89, 82, 91, 129, 33, 184, 169, 68, 49, 179, 91, 251, 55, 49, 128, 168, 201, 65, 61, 100, 143, 185, 206, 254, 158, 115, 166, 124, 138, 109, 248, 236, 69, 86, 73, 147, 125, 217, 149, 181, 134, 185, 87, 48, 222, 206, 200, 190, 88, 201, 166, 6, 95, 196, 152, 143, 49, 13, 215, 217, 151, 142, 202, 155, 2, 34, 182, 253, 2, 206, 134, 163, 162, 84, 14, 243, 9, 241, 74, 228, 227, 112, 24, 10, 86, 49, 236, 55, 15, 242, 64, 154, 84, 4, 140, 120, 188, 2, 151, 15, 144, 197, 120}, +{175, 36, 208, 149, 22, 112, 15, 101, 248, 212, 210, 73, 171, 115, 3, 146, 214, 9, 153, 237, 82, 66, 20, 206, 76, 176, 184, 140, 61, 71, 116, 177, 102, 104, 52, 234, 154, 114, 11, 141, 83, 194, 215, 19, 154, 102, 135, 184, 21, 127, 107, 251, 51, 210, 241, 189, 164, 254, 48, 205, 190, 129, 85, 90, 163, 12, 140, 174, 106, 33, 158, 43, 200, 223, 158, 73, 139, 1, 150, 87, 153, 173, 176, 68, 107, 57, 103, 197, 140, 161, 26, 5, 1, 137, 179, 16, 130, 242, 159, 1, 219, 206, 87, 221, 217, 169, 13, 253, 193, 251, 122, 219, 200, 127, 20, 169, 225, 135, 206, 24, 251, 63, 133, 241, 107, 83, 229, 154}, +{3, 231, 90, 171, 111, 61, 157, 126, 199, 2, 22, 242, 26, 179, 74, 140, 145, 230, 192, 209, 60, 228, 221, 227, 37, 25, 238, 30, 89, 91, 255, 89, 189, 178, 75, 19, 2, 196, 151, 117, 109, 169, 225, 172, 153, 6, 249, 187, 0, 243, 189, 251, 128, 43, 205, 69, 94, 7, 15, 126, 159, 180, 60, 4, 1, 20, 240, 212, 103, 213, 122, 178, 53, 6, 81, 181, 87, 133, 55, 86, 155, 213, 38, 72, 76, 134, 233, 230, 180, 44, 210, 70, 4, 206, 244, 245, 168, 185, 182, 10, 200, 90, 182, 244, 197, 240, 88, 74, 219, 76, 241, 182, 147, 199, 80, 12, 70, 106, 251, 201, 154, 4, 164, 78, 39, 195, 153, 170}, +{132, 115, 175, 141, 51, 136, 241, 127, 153, 44, 173, 161, 193, 155, 53, 4, 235, 12, 139, 98, 77, 66, 38, 196, 240, 132, 66, 21, 248, 200, 74, 71, 206, 186, 131, 160, 218, 134, 147, 69, 226, 13, 223, 204, 208, 82, 57, 230, 251, 54, 52, 227, 173, 105, 202, 132, 13, 185, 203, 22, 71, 96, 105, 102, 117, 175, 4, 213, 215, 6, 182, 19, 50, 175, 239, 110, 30, 164, 109, 29, 64, 238, 103, 82, 99, 88, 103, 140, 57, 115, 199, 90, 8, 123, 237, 50, 46, 200, 146, 80, 105, 72, 176, 142, 128, 148, 34, 16, 144, 237, 104, 238, 177, 46, 102, 59, 65, 131, 168, 83, 223, 240, 82, 27, 156, 204, 76, 241}, +{205, 140, 221, 246, 50, 235, 115, 220, 70, 129, 219, 107, 13, 200, 113, 127, 194, 61, 11, 107, 63, 229, 223, 201, 83, 50, 6, 133, 1, 1, 238, 153, 249, 88, 107, 202, 222, 131, 80, 136, 123, 217, 124, 68, 85, 192, 14, 31, 172, 12, 210, 29, 146, 67, 17, 240, 242, 116, 52, 240, 115, 64, 111, 212, 221, 241, 224, 214, 214, 201, 204, 100, 231, 62, 52, 200, 219, 87, 249, 108, 4, 211, 95, 125, 22, 72, 93, 9, 15, 180, 250, 146, 100, 107, 206, 200, 205, 86, 44, 99, 138, 117, 71, 213, 245, 90, 241, 164, 134, 8, 70, 163, 30, 219, 13, 107, 80, 85, 1, 163, 94, 125, 255, 165, 11, 58, 112, 41}, +{70, 88, 25, 88, 22, 20, 97, 161, 174, 129, 221, 65, 157, 80, 154, 135, 192, 24, 24, 39, 108, 251, 118, 130, 118, 123, 253, 95, 176, 201, 32, 40, 159, 166, 97, 98, 252, 182, 209, 226, 100, 77, 23, 91, 241, 252, 198, 202, 183, 6, 107, 181, 94, 128, 222, 17, 88, 236, 130, 70, 132, 216, 147, 65, 84, 199, 18, 84, 220, 156, 208, 248, 63, 236, 203, 162, 252, 128, 172, 35, 91, 241, 118, 67, 98, 160, 154, 170, 208, 144, 218, 21, 57, 191, 51, 192, 66, 218, 30, 108, 73, 222, 191, 210, 173, 230, 254, 111, 88, 116, 184, 38, 232, 237, 200, 68, 171, 208, 181, 211, 28, 69, 27, 193, 46, 20, 58, 138}, +{3, 102, 180, 233, 24, 10, 110, 244, 235, 3, 12, 157, 133, 39, 170, 181, 120, 88, 206, 86, 109, 87, 166, 206, 156, 39, 113, 50, 82, 224, 209, 83, 90, 207, 121, 73, 106, 200, 123, 106, 103, 180, 37, 236, 131, 250, 122, 136, 142, 95, 90, 11, 189, 25, 55, 174, 13, 158, 218, 170, 137, 58, 217, 122, 190, 17, 57, 156, 151, 199, 145, 238, 22, 16, 80, 172, 253, 70, 55, 27, 80, 189, 221, 62, 12, 61, 245, 166, 197, 12, 162, 157, 126, 36, 138, 128, 57, 189, 28, 240, 252, 228, 92, 243, 11, 228, 77, 251, 225, 250, 224, 51, 141, 158, 63, 69, 10, 215, 15, 128, 16, 173, 221, 137, 40, 189, 160, 252}, +{25, 13, 78, 54, 230, 157, 168, 213, 45, 199, 153, 106, 68, 16, 123, 47, 19, 243, 72, 48, 37, 73, 161, 143, 54, 129, 95, 20, 84, 92, 187, 107, 179, 94, 120, 198, 11, 126, 154, 186, 134, 241, 68, 103, 42, 54, 55, 67, 255, 68, 95, 169, 97, 146, 185, 141, 197, 54, 122, 49, 65, 107, 56, 61, 224, 17, 239, 153, 91, 136, 79, 202, 42, 82, 52, 19, 50, 121, 42, 7, 214, 29, 136, 130, 27, 172, 113, 249, 51, 24, 240, 151, 81, 237, 112, 47, 81, 224, 225, 183, 27, 62, 179, 227, 147, 142, 130, 41, 20, 18, 88, 197, 228, 202, 224, 209, 210, 35, 85, 23, 40, 65, 7, 0, 147, 154, 51, 41}, +{175, 125, 220, 29, 111, 130, 36, 50, 6, 107, 66, 69, 179, 112, 144, 33, 246, 140, 63, 207, 119, 86, 90, 162, 194, 232, 103, 208, 151, 20, 222, 57, 224, 232, 197, 235, 241, 176, 148, 145, 121, 80, 92, 4, 172, 19, 228, 138, 95, 172, 128, 67, 48, 25, 209, 232, 51, 102, 49, 205, 52, 183, 68, 250, 10, 158, 233, 63, 133, 197, 246, 155, 122, 197, 244, 176, 181, 103, 68, 74, 31, 1, 251, 235, 199, 241, 179, 212, 248, 74, 11, 77, 206, 114, 187, 126, 190, 235, 228, 209, 227, 177, 60, 232, 233, 181, 16, 59, 180, 144, 167, 170, 94, 147, 235, 244, 204, 169, 33, 137, 23, 243, 71, 167, 167, 104, 254, 203}, +{181, 40, 192, 179, 121, 174, 208, 54, 150, 241, 126, 110, 231, 37, 72, 145, 205, 210, 49, 61, 238, 35, 94, 214, 20, 251, 72, 219, 201, 158, 103, 217, 214, 19, 129, 223, 35, 177, 247, 29, 147, 101, 162, 140, 11, 61, 27, 197, 134, 113, 117, 159, 74, 220, 5, 6, 7, 92, 194, 34, 65, 42, 210, 196, 95, 111, 201, 130, 221, 227, 171, 208, 18, 166, 220, 22, 140, 31, 94, 155, 196, 93, 145, 56, 185, 60, 7, 167, 53, 157, 158, 14, 164, 21, 49, 146, 153, 40, 19, 168, 198, 242, 198, 169, 108, 7, 7, 211, 93, 184, 8, 6, 138, 57, 122, 3, 99, 179, 165, 116, 211, 240, 231, 57, 31, 113, 60, 138}, +{116, 62, 97, 191, 174, 123, 16, 234, 193, 175, 147, 133, 209, 62, 110, 37, 107, 64, 1, 73, 225, 202, 175, 168, 172, 243, 214, 214, 82, 75, 240, 62, 217, 78, 210, 231, 54, 37, 129, 185, 151, 63, 67, 144, 166, 124, 222, 76, 204, 18, 5, 139, 33, 231, 214, 154, 163, 222, 85, 63, 84, 20, 181, 13, 187, 235, 187, 88, 198, 211, 41, 202, 92, 242, 160, 12, 202, 63, 126, 212, 228, 154, 199, 109, 231, 54, 179, 221, 58, 32, 144, 149, 156, 120, 130, 202, 234, 89, 172, 32, 73, 9, 228, 117, 88, 224, 230, 162, 23, 204, 144, 21, 136, 246, 241, 51, 152, 183, 60, 94, 103, 104, 49, 73, 220, 18, 46}, +{168, 145, 121, 9, 224, 57, 71, 29, 194, 29, 192, 61, 80, 246, 14, 59, 108, 236, 100, 213, 217, 224, 72, 86, 134, 89, 4, 42, 249, 226, 140, 1, 192, 231, 144, 182, 63, 2, 108, 194, 140, 174, 142, 113, 179, 27, 42, 92, 207, 230, 199, 224, 191, 243, 113, 73, 19, 213, 172, 118, 36, 199, 105, 115, 86, 36, 243, 213, 197, 135, 23, 139, 102, 160, 83, 61, 51, 155, 121, 71, 20, 99, 2, 3, 165, 87, 46, 58, 71, 210, 18, 98, 244, 8, 237, 13, 193, 111, 115, 173, 56, 132, 110, 39, 119, 21, 123, 25, 8, 197, 206, 248, 245, 215, 87, 96, 54, 86, 190, 62, 86, 80, 76, 221, 246, 173, 114, 242}, +{72, 183, 117, 235, 32, 33, 4, 110, 45, 114, 111, 176, 75, 243, 114, 6, 181, 93, 69, 83, 129, 77, 176, 8, 82, 255, 120, 175, 9, 246, 16, 188, 148, 99, 201, 97, 19, 158, 189, 25, 221, 64, 81, 108, 126, 54, 187, 85, 56, 82, 193, 236, 107, 141, 39, 139, 101, 62, 176, 215, 87, 215, 57, 96, 129, 4, 68, 22, 145, 204, 23, 100, 69, 124, 242, 70, 156, 175, 82, 143, 208, 118, 145, 193, 250, 250, 248, 61, 147, 6, 120, 59, 78, 25, 115, 195, 109, 108, 198, 226, 225, 107, 196, 158, 234, 174, 130, 187, 200, 175, 130, 146, 177, 45, 85, 53, 139, 135, 69, 75, 24, 78, 65, 100, 109, 180, 128, 121}, +{64, 105, 235, 144, 71, 143, 190, 151, 43, 108, 200, 208, 223, 100, 101, 89, 192, 136, 36, 142, 162, 4, 134, 227, 242, 180, 114, 134, 111, 36, 85, 10, 53, 248, 118, 217, 125, 56, 134, 47, 190, 17, 153, 123, 230, 201, 239, 100, 106, 252, 30, 99, 231, 179, 211, 27, 155, 77, 202, 200, 93, 140, 195, 181, 148, 162, 139, 179, 80, 22, 27, 118, 21, 153, 130, 182, 174, 225, 249, 16, 15, 16, 99, 114, 104, 82, 121, 181, 108, 58, 124, 245, 187, 202, 8, 14, 169, 217, 45, 194, 90, 124, 224, 125, 170, 38, 24, 137, 137, 15, 9, 89, 113, 193, 40, 164, 229, 87, 219, 161, 100, 234, 70, 93, 175, 10, 90, 26}, +{197, 4, 237, 78, 2, 14, 247, 40, 228, 17, 189, 121, 210, 60, 235, 229, 183, 245, 76, 167, 224, 178, 154, 101, 233, 224, 4, 218, 217, 108, 36, 57, 116, 234, 50, 96, 62, 32, 162, 57, 178, 136, 221, 123, 63, 34, 150, 9, 136, 232, 116, 87, 63, 75, 222, 108, 179, 236, 45, 233, 185, 207, 185, 40, 31, 75, 101, 16, 87, 40, 49, 137, 117, 195, 76, 83, 195, 40, 115, 194, 163, 186, 233, 6, 67, 91, 204, 154, 7, 190, 239, 27, 0, 92, 45, 14, 114, 199, 207, 0, 36, 24, 4, 136, 148, 203, 165, 82, 20, 102, 174, 199, 181, 141, 76, 139, 53, 90, 149, 248, 59, 65, 242, 185, 131, 206, 15, 168}, +{6, 64, 199, 27, 139, 98, 194, 102, 243, 117, 226, 140, 39, 29, 211, 134, 229, 62, 224, 105, 151, 102, 86, 116, 234, 146, 235, 25, 107, 130, 229, 247, 147, 158, 61, 210, 64, 158, 173, 12, 23, 198, 52, 89, 32, 177, 244, 42, 65, 37, 118, 149, 30, 175, 45, 130, 168, 128, 86, 250, 46, 38, 75, 110, 102, 134, 243, 172, 88, 97, 243, 97, 25, 254, 248, 151, 37, 23, 106, 181, 52, 171, 198, 111, 38, 233, 169, 66, 132, 190, 174, 107, 255, 101, 2, 75, 59, 118, 222, 247, 3, 170, 86, 68, 12, 185, 232, 3, 2, 209, 186, 180, 185, 195, 116, 191, 76, 111, 129, 248, 151, 184, 23, 70, 196, 4, 48, 27}, +{96, 42, 71, 38, 122, 15, 92, 33, 232, 76, 156, 203, 238, 164, 226, 156, 164, 102, 139, 30, 70, 96, 127, 103, 114, 64, 94, 249, 33, 250, 16, 110, 125, 230, 20, 225, 74, 84, 89, 180, 102, 121, 1, 54, 147, 2, 41, 128, 233, 51, 88, 253, 151, 11, 193, 37, 44, 46, 167, 253, 104, 67, 65, 78, 237, 34, 179, 89, 79, 212, 28, 90, 84, 249, 167, 136, 42, 212, 3, 168, 251, 204, 157, 100, 47, 154, 34, 157, 20, 105, 57, 100, 69, 73, 181, 68, 204, 212, 144, 100, 176, 222, 223, 51, 122, 161, 251, 169, 101, 245, 26, 24, 33, 93, 124, 71, 168, 91, 25, 149, 11, 159, 166, 174, 111, 213, 130, 146}, +{40, 20, 58, 55, 83, 94, 255, 201, 72, 166, 183, 5, 38, 238, 6, 185, 36, 145, 77, 131, 166, 48, 243, 238, 195, 162, 99, 31, 251, 137, 179, 197, 181, 196, 53, 82, 232, 91, 103, 161, 189, 157, 163, 184, 83, 114, 28, 75, 217, 158, 210, 102, 141, 80, 58, 44, 77, 237, 33, 62, 241, 224, 252, 186, 23, 43, 37, 239, 211, 131, 202, 109, 84, 106, 10, 151, 106, 125, 185, 47, 155, 239, 240, 166, 125, 224, 100, 30, 204, 211, 143, 208, 194, 0, 250, 111, 126, 57, 196, 128, 157, 125, 135, 61, 11, 235, 163, 76, 18, 239, 60, 104, 29, 182, 232, 111, 35, 184, 96, 209, 82, 78, 124, 48, 44, 12, 204, 76}, +{198, 235, 48, 63, 104, 37, 230, 252, 34, 81, 182, 46, 62, 155, 199, 188, 108, 2, 164, 112, 245, 167, 152, 177, 200, 110, 57, 95, 179, 32, 0, 156, 113, 186, 34, 215, 20, 192, 239, 237, 96, 131, 15, 37, 73, 190, 146, 171, 114, 49, 6, 236, 80, 109, 166, 4, 152, 84, 215, 83, 92, 212, 174, 65, 103, 218, 44, 121, 156, 195, 206, 168, 229, 127, 203, 141, 212, 131, 168, 20, 75, 248, 38, 201, 216, 12, 21, 135, 43, 167, 181, 45, 198, 21, 230, 57, 93, 190, 107, 168, 111, 168, 221, 148, 155, 170, 234, 41, 142, 241, 83, 207, 252, 28, 212, 108, 216, 112, 47, 50, 7, 27, 104, 96, 149, 110, 160, 203}, +{87, 195, 51, 245, 107, 227, 132, 205, 51, 183, 88, 26, 65, 156, 83, 244, 14, 152, 83, 135, 225, 128, 218, 240, 212, 54, 132, 204, 14, 44, 190, 64, 116, 47, 87, 255, 76, 215, 212, 235, 182, 239, 71, 192, 27, 120, 235, 217, 127, 48, 133, 30, 59, 229, 17, 227, 227, 13, 180, 150, 187, 220, 56, 231, 91, 56, 134, 157, 167, 47, 55, 133, 155, 73, 21, 209, 48, 66, 25, 49, 52, 93, 103, 178, 22, 184, 188, 146, 100, 159, 224, 144, 253, 22, 35, 216, 6, 50, 225, 142, 129, 170, 160, 159, 174, 250, 198, 35, 81, 109, 155, 236, 49, 246, 118, 228, 27, 128, 120, 94, 53, 42, 13, 201, 229, 193, 193, 161}, +{14, 172, 223, 83, 42, 70, 24, 248, 144, 98, 54, 140, 26, 236, 116, 32, 50, 145, 132, 176, 73, 237, 159, 36, 152, 78, 34, 56, 29, 128, 225, 160, 118, 106, 66, 184, 167, 50, 118, 171, 209, 121, 174, 36, 145, 39, 78, 52, 217, 187, 185, 30, 222, 9, 152, 231, 136, 50, 153, 124, 53, 197, 168, 55, 29, 65, 0, 54, 79, 176, 101, 183, 173, 41, 19, 141, 207, 95, 241, 145, 135, 204, 40, 4, 178, 17, 233, 88, 71, 130, 232, 174, 75, 76, 245, 94, 206, 139, 238, 100, 68, 104, 136, 246, 164, 80, 120, 240, 159, 8, 233, 92, 7, 169, 241, 140, 77, 15, 106, 50, 79, 72, 103, 82, 224, 117, 40, 196}, +{14, 99, 107, 229, 57, 169, 21, 202, 191, 149, 152, 203, 131, 246, 10, 155, 27, 208, 60, 63, 238, 20, 66, 48, 39, 167, 218, 45, 24, 132, 1, 137, 77, 121, 36, 253, 54, 105, 31, 130, 149, 55, 50, 119, 211, 14, 74, 68, 146, 170, 185, 61, 83, 209, 183, 246, 238, 146, 220, 78, 81, 12, 68, 157, 241, 181, 169, 44, 3, 165, 211, 139, 102, 144, 44, 160, 130, 34, 121, 192, 15, 186, 86, 162, 226, 245, 95, 47, 66, 109, 224, 242, 93, 53, 142, 92, 96, 221, 56, 91, 227, 4, 148, 11, 139, 65, 128, 52, 32, 43, 30, 73, 101, 174, 74, 167, 132, 82, 179, 111, 140, 113, 43, 230, 134, 112, 31, 251}, +{158, 2, 159, 68, 29, 192, 123, 39, 61, 200, 68, 90, 144, 37, 107, 153, 234, 120, 22, 42, 36, 117, 51, 69, 142, 101, 188, 204, 215, 225, 44, 189, 152, 87, 86, 25, 215, 147, 201, 93, 194, 226, 160, 125, 170, 31, 17, 144, 174, 126, 159, 10, 209, 144, 37, 227, 206, 126, 222, 114, 209, 59, 233, 101, 46, 189, 11, 129, 65, 63, 185, 169, 196, 112, 133, 27, 113, 194, 188, 133, 2, 222, 74, 154, 155, 98, 2, 223, 84, 77, 12, 149, 1, 242, 0, 165, 215, 10, 126, 11, 71, 98, 132, 18, 250, 94, 72, 216, 186, 206, 126, 22, 97, 241, 159, 53, 46, 168, 243, 13, 22, 37, 6, 128, 2, 245, 184, 179}, +{113, 16, 123, 176, 39, 13, 8, 153, 245, 137, 233, 19, 127, 93, 115, 231, 5, 95, 96, 0, 227, 149, 58, 67, 135, 112, 95, 60, 204, 124, 18, 97, 213, 136, 13, 200, 148, 1, 152, 204, 62, 198, 246, 180, 62, 140, 188, 129, 30, 35, 214, 110, 173, 11, 125, 117, 77, 124, 64, 171, 225, 9, 137, 165, 35, 79, 120, 146, 204, 222, 47, 13, 149, 84, 12, 189, 125, 220, 111, 185, 28, 108, 25, 169, 49, 151, 241, 89, 6, 93, 20, 90, 73, 103, 30, 30, 116, 105, 5, 34, 235, 176, 23, 155, 20, 188, 148, 179, 31, 78, 2, 163, 78, 207, 3, 165, 230, 32, 63, 6, 20, 29, 30, 131, 231, 78, 234, 167}, +{13, 138, 210, 249, 153, 18, 97, 169, 0, 37, 46, 109, 68, 42, 192, 122, 226, 247, 139, 224, 104, 139, 122, 34, 93, 32, 62, 109, 214, 216, 187, 253, 115, 200, 198, 181, 184, 20, 87, 172, 6, 4, 173, 6, 108, 236, 173, 120, 181, 97, 134, 13, 212, 100, 120, 51, 87, 3, 73, 255, 87, 34, 110, 0, 181, 126, 176, 157, 80, 168, 182, 235, 158, 172, 172, 119, 59, 233, 143, 6, 171, 171, 37, 123, 137, 205, 34, 124, 16, 77, 92, 108, 133, 42, 181, 143, 117, 62, 100, 68, 87, 14, 124, 49, 79, 195, 76, 129, 129, 51, 181, 81, 39, 216, 151, 215, 126, 233, 192, 90, 61, 33, 80, 255, 58, 220, 154, 132}, +{2, 137, 114, 56, 33, 77, 95, 34, 220, 5, 58, 210, 39, 161, 48, 158, 228, 75, 90, 167, 179, 202, 74, 39, 157, 150, 237, 114, 227, 38, 82, 224, 63, 108, 71, 180, 113, 231, 157, 145, 206, 111, 18, 68, 245, 51, 155, 242, 7, 135, 229, 89, 92, 191, 111, 232, 151, 226, 151, 132, 83, 151, 159, 231, 69, 98, 65, 157, 61, 104, 147, 41, 198, 190, 167, 50, 169, 137, 192, 213, 41, 14, 27, 177, 13, 23, 222, 242, 207, 11, 31, 79, 226, 66, 107, 87, 172, 165, 61, 237, 17, 8, 152, 118, 60, 212, 150, 37, 88, 172, 127, 113, 8, 214, 236, 67, 146, 35, 152, 16, 223, 6, 1, 110, 149, 148, 200, 25}, +{167, 231, 248, 224, 28, 39, 15, 31, 156, 111, 103, 96, 95, 253, 162, 92, 167, 150, 36, 127, 9, 249, 172, 91, 81, 201, 76, 109, 238, 185, 84, 247, 13, 92, 116, 218, 77, 54, 244, 176, 90, 216, 254, 67, 237, 130, 14, 25, 227, 63, 170, 226, 198, 254, 58, 150, 7, 125, 150, 36, 144, 75, 245, 69, 100, 128, 138, 5, 94, 21, 243, 49, 207, 20, 109, 110, 43, 154, 180, 68, 197, 162, 173, 8, 211, 90, 255, 109, 126, 77, 213, 41, 230, 254, 210, 225, 166, 139, 138, 212, 87, 177, 8, 201, 228, 77, 252, 140, 208, 67, 146, 91, 29, 69, 244, 86, 50, 178, 128, 0, 93, 8, 33, 103, 1, 140, 113, 251}, +{80, 70, 185, 244, 47, 152, 64, 208, 131, 86, 143, 205, 184, 166, 253, 55, 32, 72, 157, 79, 14, 42, 192, 34, 68, 43, 95, 147, 211, 188, 136, 184, 64, 238, 16, 59, 158, 20, 148, 211, 154, 68, 91, 46, 221, 217, 87, 49, 229, 139, 161, 230, 60, 177, 74, 134, 78, 20, 63, 195, 165, 11, 93, 104, 90, 25, 1, 142, 226, 200, 100, 43, 241, 165, 58, 114, 36, 147, 40, 186, 194, 115, 88, 68, 241, 201, 32, 141, 172, 91, 185, 228, 102, 191, 188, 134, 156, 11, 167, 242, 162, 137, 131, 80, 49, 175, 69, 67, 120, 77, 120, 150, 28, 251, 129, 237, 46, 51, 164, 92, 193, 84, 59, 236, 49, 150, 193, 89}, +{175, 103, 207, 134, 85, 67, 96, 159, 6, 201, 230, 25, 245, 63, 56, 92, 50, 241, 52, 100, 109, 23, 40, 108, 174, 29, 156, 212, 94, 242, 152, 219, 75, 253, 138, 128, 23, 130, 172, 174, 209, 60, 141, 45, 194, 38, 24, 43, 75, 148, 98, 80, 167, 190, 248, 34, 91, 115, 55, 76, 108, 127, 245, 54, 206, 151, 174, 0, 99, 131, 167, 219, 17, 117, 245, 211, 193, 245, 42, 32, 146, 16, 231, 206, 73, 28, 215, 148, 63, 99, 100, 230, 230, 12, 247, 31, 139, 93, 190, 138, 176, 208, 74, 84, 56, 39, 73, 205, 173, 183, 219, 60, 144, 247, 170, 4, 201, 182, 95, 227, 80, 215, 180, 123, 160, 50, 159, 46}, +{159, 136, 152, 180, 78, 48, 159, 30, 220, 217, 201, 176, 143, 149, 219, 116, 144, 29, 76, 174, 48, 224, 115, 95, 212, 255, 150, 168, 55, 211, 241, 229, 182, 228, 196, 75, 57, 112, 10, 72, 132, 197, 224, 192, 37, 247, 15, 143, 105, 215, 124, 106, 120, 108, 206, 111, 243, 210, 143, 226, 208, 201, 114, 210, 117, 183, 199, 229, 109, 114, 154, 16, 127, 94, 125, 128, 87, 158, 70, 174, 33, 170, 102, 40, 94, 224, 203, 151, 188, 217, 139, 89, 15, 189, 147, 236, 248, 187, 242, 114, 167, 78, 211, 98, 191, 242, 115, 243, 232, 104, 144, 84, 232, 85, 177, 34, 5, 9, 236, 19, 253, 183, 30, 143, 190, 39, 59, 14}, +{130, 223, 4, 205, 202, 207, 203, 171, 242, 69, 20, 82, 183, 110, 119, 125, 189, 88, 166, 201, 131, 215, 144, 243, 146, 70, 7, 159, 83, 163, 236, 106, 199, 228, 106, 227, 167, 177, 81, 47, 226, 2, 124, 194, 232, 211, 77, 191, 215, 230, 9, 193, 44, 124, 126, 251, 147, 126, 160, 215, 57, 42, 124, 63, 229, 201, 152, 17, 42, 30, 167, 0, 197, 134, 50, 5, 97, 85, 171, 202, 182, 55, 152, 237, 63, 224, 224, 174, 231, 97, 223, 118, 135, 199, 21, 163, 7, 85, 30, 128, 34, 151, 23, 252, 116, 66, 95, 0, 197, 10, 66, 126, 161, 90, 117, 192, 177, 37, 42, 57, 149, 62, 83, 232, 212, 137, 214, 135}, +{106, 231, 36, 218, 115, 208, 128, 28, 43, 234, 112, 97, 99, 120, 165, 69, 53, 45, 123, 214, 168, 200, 58, 102, 67, 61, 109, 237, 105, 204, 51, 110, 29, 162, 21, 214, 28, 38, 148, 174, 96, 155, 13, 65, 148, 141, 218, 79, 191, 87, 7, 19, 99, 188, 97, 66, 60, 252, 92, 13, 180, 141, 69, 203, 187, 0, 80, 28, 89, 50, 113, 156, 95, 149, 0, 177, 8, 122, 81, 103, 180, 39, 247, 1, 235, 159, 230, 55, 225, 8, 205, 190, 203, 250, 153, 142, 163, 15, 26, 88, 121, 8, 100, 190, 163, 79, 157, 41, 161, 151, 153, 101, 61, 12, 143, 42, 15, 113, 30, 90, 160, 133, 171, 85, 208, 97, 93, 120}, +{79, 8, 110, 218, 167, 89, 113, 146, 78, 235, 113, 151, 203, 11, 124, 188, 152, 212, 60, 110, 198, 177, 8, 14, 120, 174, 120, 130, 236, 239, 196, 81, 10, 180, 187, 122, 134, 207, 183, 162, 112, 154, 40, 51, 110, 139, 53, 181, 38, 232, 149, 72, 163, 7, 189, 208, 7, 16, 8, 123, 26, 228, 39, 197, 176, 196, 133, 77, 34, 50, 232, 5, 121, 236, 12, 253, 132, 158, 119, 58, 89, 106, 231, 160, 31, 158, 51, 244, 157, 177, 12, 139, 37, 76, 26, 140, 209, 1, 0, 194, 116, 180, 73, 212, 102, 184, 57, 128, 188, 60, 154, 193, 84, 37, 227, 181, 200, 56, 71, 139, 226, 69, 124, 205, 171, 169, 227, 50}, +{40, 110, 231, 18, 41, 193, 178, 131, 14, 23, 196, 201, 199, 227, 186, 130, 154, 202, 140, 234, 135, 88, 129, 78, 118, 169, 176, 160, 146, 21, 152, 76, 67, 66, 172, 74, 222, 16, 118, 241, 138, 102, 101, 51, 36, 225, 0, 53, 151, 124, 112, 223, 250, 6, 146, 176, 100, 31, 83, 146, 157, 163, 148, 38, 65, 79, 143, 85, 42, 117, 44, 201, 248, 21, 29, 101, 39, 197, 21, 143, 192, 147, 138, 56, 92, 141, 48, 161, 125, 43, 200, 68, 103, 0, 100, 142, 59, 186, 11, 74, 99, 33, 141, 13, 239, 2, 79, 116, 135, 226, 21, 10, 88, 31, 0, 72, 55, 164, 73, 170, 224, 76, 255, 41, 185, 189, 235, 232}, +{127, 25, 12, 40, 14, 239, 239, 252, 78, 162, 178, 196, 112, 31, 201, 161, 99, 7, 16, 227, 235, 13, 22, 161, 130, 135, 28, 118, 146, 206, 47, 217, 230, 163, 57, 55, 168, 27, 145, 58, 17, 21, 201, 134, 173, 244, 255, 5, 122, 188, 22, 226, 148, 14, 88, 242, 102, 213, 200, 38, 235, 45, 71, 47, 132, 205, 140, 156, 254, 96, 61, 221, 95, 70, 207, 240, 22, 185, 42, 167, 107, 173, 220, 173, 121, 149, 157, 81, 171, 5, 237, 165, 89, 195, 138, 220, 116, 96, 109, 145, 53, 161, 42, 240, 245, 114, 49, 179, 39, 109, 177, 139, 215, 176, 192, 139, 142, 238, 168, 173, 121, 242, 69, 0, 228, 136, 142, 37}, +{178, 64, 210, 163, 139, 61, 185, 96, 125, 84, 193, 173, 220, 70, 213, 225, 249, 7, 247, 189, 31, 40, 103, 132, 31, 12, 248, 90, 26, 6, 40, 164, 183, 137, 112, 231, 25, 26, 178, 4, 213, 115, 83, 199, 237, 85, 75, 130, 100, 130, 119, 71, 253, 198, 87, 239, 207, 166, 129, 110, 211, 136, 174, 136, 218, 243, 221, 231, 185, 173, 0, 123, 252, 33, 155, 174, 186, 247, 38, 69, 222, 182, 27, 182, 155, 116, 68, 209, 196, 190, 182, 14, 113, 149, 20, 189, 205, 42, 253, 135, 175, 61, 225, 53, 148, 103, 76, 230, 99, 204, 54, 61, 25, 120, 186, 47, 108, 68, 30, 62, 97, 46, 69, 92, 31, 246, 24, 223}, +{100, 43, 4, 112, 28, 250, 69, 32, 38, 22, 163, 26, 177, 5, 203, 202, 233, 190, 229, 166, 120, 179, 165, 41, 163, 132, 173, 157, 194, 102, 236, 42, 114, 253, 222, 135, 54, 23, 176, 139, 139, 91, 12, 111, 53, 1, 131, 147, 163, 4, 93, 58, 166, 105, 19, 192, 158, 232, 109, 0, 218, 191, 126, 107, 61, 74, 208, 240, 90, 36, 236, 128, 223, 141, 208, 3, 192, 134, 210, 91, 229, 142, 122, 171, 128, 27, 63, 239, 83, 83, 174, 179, 64, 163, 171, 28, 243, 236, 65, 79, 175, 127, 176, 225, 246, 237, 208, 11, 195, 208, 137, 148, 67, 156, 228, 166, 177, 197, 252, 75, 31, 61, 122, 158, 118, 10, 119, 212}, +{86, 123, 228, 85, 82, 16, 251, 5, 214, 4, 27, 16, 62, 221, 8, 240, 202, 105, 5, 115, 82, 245, 67, 142, 34, 11, 41, 38, 212, 45, 228, 26, 40, 148, 129, 8, 22, 25, 69, 211, 230, 35, 183, 159, 188, 7, 245, 21, 140, 166, 105, 162, 92, 150, 5, 109, 80, 159, 218, 153, 183, 189, 170, 38, 6, 74, 14, 60, 151, 58, 125, 207, 208, 27, 101, 36, 232, 48, 65, 57, 195, 8, 150, 135, 47, 124, 171, 10, 37, 105, 179, 59, 127, 131, 167, 133, 153, 130, 158, 192, 155, 76, 53, 244, 105, 203, 151, 140, 52, 8, 215, 193, 176, 207, 179, 70, 184, 201, 249, 156, 190, 244, 45, 174, 180, 67, 144, 8}, +{138, 171, 24, 221, 54, 173, 199, 2, 253, 84, 241, 208, 29, 149, 210, 19, 98, 139, 179, 67, 235, 148, 51, 177, 138, 160, 187, 18, 195, 168, 75, 134, 40, 26, 55, 209, 236, 58, 170, 140, 127, 37, 160, 171, 215, 124, 77, 79, 237, 165, 195, 24, 221, 29, 134, 191, 121, 12, 205, 202, 152, 215, 186, 183, 116, 244, 248, 200, 133, 208, 72, 20, 222, 57, 137, 22, 100, 106, 214, 8, 48, 66, 177, 235, 92, 166, 111, 243, 188, 206, 126, 135, 102, 11, 141, 173, 147, 242, 184, 169, 73, 136, 247, 160, 69, 210, 7, 147, 197, 119, 168, 60, 30, 31, 107, 229, 20, 238, 148, 30, 156, 70, 188, 12, 151, 194, 82, 12}, +{187, 69, 228, 72, 67, 165, 42, 216, 68, 122, 165, 138, 113, 228, 72, 249, 231, 99, 89, 187, 145, 174, 202, 108, 111, 191, 186, 28, 241, 178, 156, 239, 179, 21, 128, 71, 110, 154, 101, 244, 218, 174, 167, 164, 11, 191, 241, 199, 34, 228, 220, 145, 106, 73, 214, 144, 246, 31, 191, 22, 166, 13, 176, 136, 4, 147, 115, 210, 88, 241, 145, 137, 101, 239, 124, 200, 58, 48, 171, 98, 2, 143, 195, 139, 200, 102, 194, 132, 158, 176, 165, 6, 23, 99, 5, 8, 166, 184, 232, 156, 61, 132, 161, 163, 97, 139, 22, 57, 113, 201, 177, 42, 250, 25, 241, 104, 50, 127, 154, 82, 84, 62, 71, 222, 48, 24, 117, 137}, +{18, 72, 206, 63, 83, 34, 196, 44, 139, 59, 246, 124, 110, 115, 85, 43, 136, 113, 194, 89, 59, 133, 102, 13, 234, 135, 1, 241, 159, 17, 227, 118, 22, 96, 219, 62, 62, 198, 193, 55, 222, 164, 159, 242, 28, 125, 186, 188, 33, 28, 26, 91, 70, 40, 201, 230, 128, 163, 125, 239, 63, 140, 112, 75, 89, 128, 94, 209, 37, 30, 25, 191, 188, 49, 196, 69, 66, 71, 107, 191, 40, 92, 191, 0, 218, 235, 200, 152, 143, 136, 60, 183, 137, 149, 206, 215, 216, 121, 131, 199, 66, 220, 201, 85, 219, 41, 20, 10, 59, 118, 245, 182, 23, 97, 149, 159, 189, 214, 6, 180, 138, 135, 123, 189, 88, 14, 255, 105}, +{86, 82, 244, 24, 116, 224, 147, 227, 178, 229, 211, 198, 198, 186, 198, 248, 149, 74, 196, 135, 85, 14, 97, 235, 38, 212, 248, 5, 178, 78, 129, 139, 228, 65, 77, 16, 13, 121, 232, 218, 107, 210, 228, 235, 85, 223, 29, 12, 156, 170, 240, 3, 221, 34, 32, 60, 48, 211, 58, 81, 16, 27, 181, 245, 106, 174, 186, 43, 20, 56, 150, 149, 50, 232, 234, 114, 20, 54, 177, 168, 54, 56, 82, 50, 162, 162, 130, 233, 24, 38, 57, 160, 220, 118, 221, 45, 95, 126, 41, 115, 30, 112, 22, 33, 16, 49, 226, 200, 201, 158, 234, 77, 181, 22, 28, 128, 173, 72, 148, 232, 191, 131, 18, 138, 174, 39, 4, 148}, +{204, 88, 251, 161, 165, 62, 167, 34, 37, 44, 95, 94, 44, 48, 170, 175, 169, 28, 173, 14, 151, 10, 165, 169, 187, 131, 37, 72, 66, 31, 77, 166, 43, 132, 199, 16, 210, 231, 91, 106, 146, 85, 11, 108, 120, 183, 191, 14, 72, 1, 240, 211, 117, 56, 242, 143, 181, 143, 131, 181, 30, 103, 120, 254, 55, 80, 201, 28, 125, 84, 72, 116, 144, 69, 233, 146, 73, 251, 14, 248, 196, 10, 239, 75, 128, 118, 161, 87, 123, 221, 161, 60, 24, 115, 38, 182, 155, 98, 168, 224, 126, 173, 217, 148, 229, 65, 79, 183, 37, 45, 217, 200, 10, 172, 75, 23, 194, 92, 67, 196, 174, 176, 13, 187, 191, 122, 164, 151}, +{102, 67, 211, 81, 132, 223, 149, 145, 56, 170, 251, 76, 204, 9, 183, 114, 31, 90, 150, 232, 146, 29, 155, 236, 224, 115, 244, 39, 17, 13, 63, 236, 118, 62, 107, 94, 73, 17, 153, 81, 222, 182, 226, 77, 65, 112, 246, 86, 134, 99, 37, 212, 159, 135, 162, 235, 66, 83, 204, 120, 198, 116, 247, 122, 5, 237, 221, 80, 205, 3, 103, 240, 36, 172, 1, 162, 26, 95, 77, 220, 97, 212, 185, 190, 171, 90, 105, 238, 178, 35, 79, 25, 19, 143, 214, 150, 220, 150, 125, 67, 99, 224, 182, 225, 127, 14, 74, 169, 196, 181, 180, 171, 192, 100, 78, 208, 131, 180, 178, 115, 42, 5, 153, 180, 157, 91, 150, 137}, +{114, 144, 185, 114, 63, 203, 124, 7, 178, 128, 159, 45, 207, 80, 10, 117, 224, 168, 35, 247, 228, 248, 134, 95, 125, 77, 102, 84, 102, 166, 105, 94, 106, 94, 132, 10, 190, 67, 214, 184, 17, 2, 49, 50, 207, 246, 226, 20, 119, 76, 61, 228, 231, 183, 122, 184, 206, 7, 194, 255, 138, 32, 90, 71, 33, 236, 242, 119, 183, 122, 181, 214, 11, 132, 33, 71, 56, 71, 189, 60, 124, 243, 157, 0, 245, 114, 162, 70, 43, 99, 250, 253, 14, 220, 125, 2, 212, 185, 52, 20, 36, 73, 218, 42, 204, 169, 212, 222, 120, 80, 39, 34, 215, 104, 216, 219, 45, 67, 254, 194, 17, 213, 157, 118, 151, 81, 188, 106}, +{124, 104, 139, 13, 246, 143, 140, 91, 220, 48, 224, 230, 199, 142, 94, 43, 0, 17, 136, 71, 219, 77, 98, 189, 31, 11, 55, 222, 85, 81, 65, 26, 139, 14, 69, 97, 52, 202, 194, 246, 88, 188, 187, 170, 15, 218, 46, 109, 49, 141, 142, 35, 133, 220, 207, 153, 65, 87, 59, 9, 195, 189, 88, 171, 184, 61, 23, 144, 95, 16, 228, 100, 235, 165, 197, 105, 20, 90, 158, 209, 205, 244, 192, 148, 111, 189, 140, 79, 146, 253, 55, 173, 159, 151, 185, 230, 7, 186, 132, 213, 94, 176, 138, 245, 67, 59, 89, 97, 160, 84, 113, 188, 131, 168, 229, 198, 51, 78, 124, 107, 176, 101, 108, 92, 120, 235, 195, 109}, +{153, 176, 179, 24, 12, 168, 54, 229, 111, 36, 169, 251, 253, 173, 86, 251, 42, 24, 209, 170, 192, 41, 54, 189, 147, 235, 74, 36, 223, 52, 161, 118, 148, 201, 226, 147, 38, 245, 210, 5, 45, 217, 35, 163, 248, 91, 140, 218, 84, 24, 41, 129, 166, 80, 176, 11, 131, 139, 193, 236, 3, 201, 46, 124, 26, 215, 192, 82, 59, 220, 83, 170, 138, 195, 126, 144, 60, 167, 61, 186, 32, 76, 182, 84, 234, 95, 34, 19, 110, 182, 11, 143, 52, 190, 148, 96, 29, 1, 59, 114, 88, 51, 94, 50, 95, 203, 254, 208, 30, 14, 166, 85, 25, 106, 56, 23, 4, 208, 78, 94, 217, 201, 78, 179, 52, 138, 207, 186}, +{127, 226, 6, 133, 69, 62, 250, 100, 191, 139, 245, 22, 216, 197, 241, 209, 153, 38, 87, 174, 79, 38, 113, 0, 107, 60, 106, 154, 245, 24, 10, 42, 209, 220, 160, 143, 206, 122, 70, 85, 190, 201, 178, 140, 85, 63, 30, 132, 233, 118, 204, 150, 241, 183, 48, 109, 188, 23, 55, 170, 38, 2, 163, 132, 116, 214, 134, 231, 27, 105, 224, 10, 237, 70, 44, 10, 127, 13, 236, 197, 141, 6, 224, 145, 206, 151, 120, 222, 108, 99, 27, 77, 76, 70, 247, 86, 248, 221, 23, 29, 61, 35, 14, 53, 221, 145, 35, 73, 40, 29, 153, 118, 73, 33, 13, 243, 149, 63, 71, 243, 71, 187, 81, 77, 118, 56, 201, 113}, +{149, 221, 107, 146, 125, 187, 148, 161, 215, 94, 3, 242, 167, 73, 56, 54, 249, 192, 113, 140, 114, 154, 199, 95, 93, 247, 20, 15, 117, 228, 104, 207, 193, 53, 123, 240, 220, 141, 91, 72, 63, 36, 110, 217, 141, 183, 16, 140, 50, 252, 0, 140, 136, 160, 225, 205, 142, 248, 172, 191, 25, 162, 19, 155, 209, 192, 200, 248, 117, 130, 35, 116, 248, 64, 252, 69, 244, 15, 92, 25, 18, 186, 193, 36, 7, 135, 128, 251, 237, 251, 248, 74, 108, 35, 196, 98, 90, 77, 64, 237, 26, 0, 149, 23, 40, 14, 206, 50, 191, 179, 167, 201, 225, 58, 241, 143, 215, 237, 155, 232, 135, 68, 127, 39, 85, 120, 166, 94}, +{45, 129, 247, 208, 154, 86, 17, 242, 242, 145, 114, 28, 248, 49, 177, 184, 19, 159, 71, 125, 185, 224, 164, 6, 39, 226, 109, 105, 88, 1, 217, 68, 131, 80, 41, 61, 31, 27, 223, 28, 254, 145, 60, 118, 194, 91, 69, 9, 45, 190, 207, 38, 102, 80, 241, 133, 7, 251, 122, 154, 230, 100, 197, 151, 156, 155, 131, 43, 99, 55, 14, 32, 148, 49, 31, 9, 141, 38, 87, 34, 214, 31, 79, 122, 77, 37, 49, 32, 41, 204, 241, 242, 122, 20, 3, 73, 75, 124, 216, 178, 75, 67, 207, 243, 33, 77, 115, 213, 240, 78, 111, 23, 204, 64, 159, 202, 184, 16, 6, 76, 28, 64, 142, 74, 151, 122, 25, 182}, +{146, 188, 250, 142, 104, 222, 219, 90, 75, 172, 248, 115, 0, 152, 245, 81, 147, 255, 57, 50, 191, 27, 111, 67, 93, 219, 157, 240, 251, 71, 173, 222, 23, 130, 111, 234, 108, 138, 131, 128, 49, 14, 106, 224, 160, 87, 225, 88, 70, 161, 155, 39, 120, 129, 129, 201, 12, 68, 5, 165, 42, 220, 33, 196, 0, 25, 16, 16, 34, 155, 74, 1, 217, 214, 183, 146, 157, 80, 97, 49, 183, 202, 184, 133, 144, 74, 189, 185, 2, 24, 147, 211, 187, 225, 162, 86, 55, 219, 242, 185, 180, 69, 71, 18, 119, 109, 221, 110, 211, 67, 7, 198, 174, 217, 158, 36, 208, 194, 20, 79, 67, 28, 224, 0, 6, 27, 44, 181}, +{66, 255, 129, 19, 75, 194, 99, 90, 114, 100, 64, 226, 47, 243, 146, 215, 189, 184, 117, 37, 119, 14, 211, 109, 109, 135, 109, 34, 48, 143, 89, 139, 181, 155, 4, 32, 143, 22, 121, 35, 39, 230, 205, 14, 134, 153, 218, 250, 61, 121, 187, 45, 96, 201, 196, 182, 87, 14, 29, 219, 114, 64, 79, 144, 183, 105, 21, 235, 208, 77, 0, 53, 129, 93, 126, 12, 241, 136, 227, 62, 233, 186, 33, 111, 25, 229, 226, 169, 243, 125, 140, 227, 47, 248, 81, 168, 26, 226, 163, 97, 224, 181, 74, 75, 173, 75, 172, 179, 135, 178, 139, 224, 214, 176, 69, 82, 159, 193, 73, 52, 13, 153, 249, 41, 66, 104, 49, 160}, +{184, 248, 221, 168, 127, 222, 141, 221, 49, 97, 192, 142, 17, 238, 132, 205, 110, 33, 78, 168, 102, 234, 173, 198, 200, 153, 169, 72, 162, 216, 23, 222, 59, 88, 150, 133, 120, 214, 205, 18, 177, 38, 15, 105, 241, 235, 128, 217, 96, 136, 193, 203, 209, 129, 193, 184, 75, 83, 138, 0, 163, 4, 161, 218, 226, 127, 161, 240, 111, 121, 244, 198, 138, 46, 12, 72, 60, 117, 255, 87, 142, 199, 100, 81, 139, 255, 115, 59, 231, 253, 41, 7, 110, 121, 244, 118, 158, 0, 200, 125, 205, 176, 0, 164, 14, 16, 150, 220, 200, 72, 71, 218, 230, 163, 116, 143, 66, 80, 191, 91, 26, 162, 188, 40, 244, 85, 83, 176}, +{94, 134, 153, 124, 133, 167, 145, 72, 160, 219, 190, 145, 156, 61, 46, 173, 120, 182, 100, 136, 165, 89, 55, 181, 31, 131, 131, 151, 181, 75, 125, 179, 110, 222, 40, 144, 189, 192, 42, 75, 98, 17, 113, 64, 127, 208, 112, 193, 165, 174, 236, 150, 213, 64, 159, 226, 93, 52, 214, 89, 180, 109, 45, 140, 165, 151, 103, 23, 92, 154, 170, 240, 171, 197, 99, 187, 222, 225, 92, 159, 89, 120, 229, 44, 212, 123, 180, 112, 74, 215, 228, 120, 205, 43, 46, 255, 84, 35, 184, 32, 101, 167, 133, 159, 67, 3, 236, 244, 174, 254, 234, 10, 115, 169, 1, 143, 3, 33, 72, 67, 70, 71, 57, 24, 239, 188, 13, 142}, +{55, 82, 114, 209, 169, 146, 105, 149, 43, 245, 77, 254, 121, 102, 4, 0, 28, 140, 10, 177, 122, 119, 9, 224, 54, 10, 134, 76, 142, 184, 68, 44, 245, 125, 206, 239, 55, 25, 112, 149, 11, 60, 14, 169, 119, 179, 248, 107, 169, 25, 187, 172, 17, 13, 86, 110, 137, 32, 37, 96, 126, 156, 238, 111, 86, 212, 204, 116, 94, 103, 181, 233, 195, 171, 234, 235, 144, 32, 119, 185, 215, 148, 80, 176, 109, 239, 70, 171, 228, 53, 122, 229, 141, 158, 232, 137, 214, 115, 176, 169, 127, 128, 73, 64, 13, 64, 119, 46, 23, 74, 109, 196, 254, 5, 27, 98, 33, 151, 134, 62, 140, 140, 66, 133, 174, 95, 145, 192}, +{120, 126, 2, 13, 216, 156, 223, 253, 52, 111, 166, 22, 62, 238, 192, 148, 99, 8, 136, 155, 14, 172, 70, 241, 171, 248, 226, 225, 81, 186, 71, 200, 24, 244, 18, 3, 155, 80, 150, 234, 51, 137, 224, 6, 43, 168, 67, 58, 25, 233, 228, 176, 97, 237, 25, 56, 104, 203, 125, 223, 172, 105, 83, 248, 10, 157, 198, 12, 225, 169, 223, 174, 216, 224, 214, 139, 190, 26, 44, 53, 0, 132, 246, 201, 128, 237, 223, 62, 13, 94, 1, 178, 136, 203, 241, 199, 23, 88, 134, 203, 122, 15, 76, 172, 188, 63, 195, 223, 173, 180, 140, 118, 60, 235, 46, 60, 183, 26, 37, 212, 244, 130, 131, 80, 252, 75, 215, 16}, +{55, 216, 215, 44, 22, 138, 129, 52, 3, 205, 92, 237, 148, 152, 166, 27, 198, 30, 52, 154, 114, 59, 64, 226, 22, 51, 110, 55, 108, 109, 201, 3, 147, 150, 187, 7, 207, 164, 119, 239, 227, 178, 77, 185, 214, 118, 204, 216, 3, 54, 156, 62, 221, 25, 49, 103, 131, 142, 75, 249, 136, 209, 133, 65, 2, 24, 218, 19, 49, 110, 136, 114, 158, 54, 166, 83, 26, 121, 109, 255, 223, 166, 69, 130, 55, 153, 137, 111, 193, 178, 246, 86, 84, 27, 73, 237, 150, 92, 70, 33, 133, 60, 209, 68, 19, 106, 163, 200, 155, 121, 192, 165, 117, 201, 200, 140, 219, 131, 63, 206, 165, 228, 46, 236, 33, 43, 242, 209}, +{63, 186, 8, 50, 62, 13, 150, 67, 225, 210, 218, 84, 156, 173, 158, 206, 129, 165, 69, 61, 65, 147, 33, 77, 26, 33, 64, 122, 77, 241, 157, 84, 50, 99, 105, 146, 167, 206, 238, 97, 162, 164, 174, 199, 14, 151, 253, 64, 72, 175, 250, 70, 250, 35, 175, 88, 42, 42, 149, 44, 68, 40, 147, 99, 104, 84, 74, 142, 237, 132, 158, 119, 14, 168, 172, 106, 247, 55, 179, 202, 235, 122, 220, 235, 71, 105, 129, 130, 109, 51, 27, 91, 27, 168, 34, 140, 119, 160, 109, 23, 68, 162, 170, 103, 23, 81, 199, 220, 220, 215, 229, 223, 239, 193, 166, 133, 101, 45, 131, 62, 159, 245, 230, 186, 51, 228, 116, 131}, +{52, 41, 194, 184, 97, 140, 172, 73, 170, 146, 199, 56, 204, 19, 80, 221, 7, 123, 13, 161, 186, 186, 154, 231, 253, 95, 234, 81, 144, 201, 118, 45, 153, 127, 153, 75, 6, 72, 169, 4, 114, 218, 153, 203, 136, 9, 108, 234, 111, 247, 38, 35, 255, 151, 209, 28, 101, 150, 1, 75, 93, 9, 80, 157, 184, 18, 149, 14, 216, 29, 201, 13, 79, 40, 8, 28, 8, 121, 42, 194, 152, 220, 24, 88, 21, 194, 96, 138, 206, 166, 209, 19, 137, 6, 22, 111, 187, 224, 56, 2, 218, 162, 174, 67, 8, 241, 127, 180, 60, 160, 84, 73, 19, 53, 229, 208, 47, 179, 118, 13, 142, 59, 135, 196, 71, 246, 235, 16}, +{173, 214, 164, 63, 69, 225, 79, 198, 134, 24, 29, 153, 51, 134, 227, 119, 140, 232, 133, 249, 18, 159, 103, 61, 15, 217, 57, 24, 221, 70, 15, 48, 60, 233, 213, 102, 196, 39, 239, 172, 44, 153, 194, 95, 167, 122, 98, 151, 154, 188, 2, 52, 223, 66, 179, 41, 19, 120, 210, 194, 65, 248, 141, 60, 149, 19, 27, 246, 137, 5, 254, 5, 133, 250, 142, 160, 225, 234, 239, 243, 56, 100, 145, 54, 19, 76, 5, 47, 164, 76, 65, 150, 238, 33, 216, 41, 84, 16, 28, 135, 108, 50, 13, 147, 189, 196, 241, 135, 163, 223, 246, 201, 132, 181, 118, 194, 49, 185, 197, 192, 40, 96, 158, 149, 157, 188, 196, 64}, +{81, 167, 85, 43, 234, 48, 146, 102, 84, 65, 90, 45, 116, 219, 130, 252, 73, 65, 213, 176, 235, 39, 96, 220, 29, 95, 75, 20, 50, 93, 228, 123, 230, 10, 153, 253, 245, 130, 96, 145, 73, 95, 178, 147, 202, 155, 191, 254, 166, 87, 183, 200, 44, 138, 169, 96, 35, 171, 223, 180, 60, 153, 46, 66, 137, 227, 86, 152, 204, 129, 204, 154, 9, 107, 105, 185, 223, 41, 223, 111, 218, 199, 116, 238, 108, 187, 200, 145, 141, 38, 157, 3, 214, 58, 112, 65, 51, 95, 27, 214, 72, 231, 240, 144, 250, 114, 204, 9, 87, 29, 228, 223, 161, 171, 86, 62, 242, 195, 154, 243, 47, 197, 252, 175, 88, 132, 185, 3}, +{93, 149, 113, 99, 54, 235, 112, 1, 13, 78, 133, 156, 205, 105, 222, 225, 244, 249, 254, 186, 248, 185, 194, 12, 65, 31, 5, 120, 116, 168, 157, 48, 67, 231, 221, 117, 160, 178, 148, 148, 43, 194, 230, 150, 117, 135, 122, 12, 126, 118, 108, 105, 158, 33, 7, 208, 231, 173, 19, 223, 253, 207, 29, 128, 68, 90, 134, 108, 0, 153, 43, 146, 210, 204, 60, 219, 141, 218, 50, 213, 203, 246, 138, 172, 101, 100, 61, 124, 221, 111, 249, 187, 237, 8, 34, 199, 193, 35, 191, 147, 37, 93, 146, 143, 139, 165, 95, 135, 124, 63, 230, 90, 172, 185, 24, 211, 206, 198, 255, 218, 12, 165, 153, 33, 43, 129, 149, 238}, +{145, 23, 94, 227, 43, 195, 104, 107, 223, 59, 193, 42, 37, 212, 123, 241, 243, 80, 187, 3, 44, 132, 11, 233, 205, 243, 215, 151, 211, 48, 127, 42, 50, 215, 94, 115, 104, 130, 118, 171, 26, 62, 189, 211, 164, 199, 89, 65, 18, 167, 132, 101, 218, 74, 183, 47, 115, 59, 169, 165, 53, 164, 50, 6, 190, 242, 78, 241, 249, 70, 59, 123, 35, 176, 50, 190, 114, 61, 33, 157, 76, 59, 215, 200, 62, 46, 52, 144, 250, 60, 9, 90, 130, 207, 68, 195, 123, 9, 162, 60, 110, 98, 161, 133, 175, 181, 106, 204, 92, 17, 178, 160, 127, 199, 187, 125, 92, 44, 186, 49, 251, 221, 38, 132, 37, 208, 144, 0}, +{198, 64, 210, 129, 83, 110, 150, 89, 58, 125, 77, 26, 104, 153, 118, 247, 135, 36, 110, 103, 79, 160, 161, 107, 161, 199, 249, 146, 59, 48, 73, 128, 10, 9, 178, 212, 248, 143, 68, 66, 83, 176, 31, 71, 66, 188, 209, 173, 215, 247, 72, 30, 127, 218, 74, 92, 24, 109, 35, 15, 102, 230, 112, 106, 113, 89, 6, 127, 16, 55, 199, 123, 64, 144, 47, 204, 93, 24, 144, 196, 248, 221, 173, 112, 223, 209, 78, 175, 22, 129, 72, 195, 35, 130, 0, 242, 169, 122, 180, 180, 0, 129, 205, 75, 249, 230, 240, 140, 60, 210, 216, 42, 222, 96, 213, 134, 4, 151, 56, 147, 218, 159, 142, 53, 22, 114, 251, 118}, +{63, 208, 187, 7, 0, 37, 237, 6, 193, 142, 183, 29, 101, 246, 152, 130, 1, 47, 237, 253, 98, 248, 22, 61, 44, 118, 61, 20, 215, 95, 18, 67, 153, 203, 211, 220, 26, 65, 147, 190, 107, 139, 52, 19, 251, 114, 107, 134, 179, 79, 11, 57, 124, 171, 191, 200, 43, 231, 211, 72, 75, 65, 23, 15, 0, 65, 93, 26, 99, 11, 46, 57, 114, 115, 127, 228, 122, 71, 211, 141, 4, 254, 34, 2, 129, 103, 193, 171, 62, 166, 119, 9, 222, 189, 147, 76, 22, 221, 17, 248, 12, 151, 218, 113, 226, 113, 103, 165, 135, 135, 28, 75, 129, 141, 102, 249, 164, 172, 241, 61, 103, 33, 110, 179, 72, 127, 197, 246}, +{52, 72, 118, 192, 14, 196, 179, 90, 45, 28, 45, 26, 161, 83, 181, 23, 155, 115, 188, 49, 130, 155, 237, 174, 174, 116, 113, 202, 128, 190, 83, 4, 153, 94, 30, 98, 199, 165, 218, 53, 251, 17, 201, 111, 181, 230, 189, 152, 153, 105, 251, 54, 166, 73, 251, 46, 194, 179, 170, 146, 149, 78, 107, 19, 199, 7, 149, 130, 93, 71, 135, 169, 236, 181, 214, 77, 245, 65, 228, 153, 145, 142, 43, 184, 218, 100, 137, 190, 202, 66, 47, 30, 145, 119, 178, 16, 180, 227, 22, 147, 211, 224, 55, 87, 46, 185, 154, 159, 133, 143, 75, 105, 171, 131, 254, 25, 242, 185, 199, 76, 195, 25, 153, 167, 178, 162, 213, 123}, +{137, 48, 179, 160, 188, 149, 157, 91, 180, 61, 234, 143, 61, 92, 229, 188, 106, 1, 81, 93, 229, 81, 75, 244, 199, 3, 106, 104, 14, 168, 241, 228, 180, 104, 41, 51, 43, 222, 172, 138, 205, 105, 124, 89, 230, 68, 101, 170, 31, 65, 89, 52, 19, 110, 30, 3, 99, 71, 230, 109, 2, 75, 152, 210, 140, 119, 18, 77, 123, 102, 102, 172, 96, 13, 215, 33, 89, 21, 220, 74, 94, 98, 133, 244, 198, 120, 221, 89, 34, 149, 176, 61, 132, 26, 15, 69, 23, 59, 6, 78, 22, 224, 232, 11, 17, 89, 246, 151, 33, 157, 210, 246, 41, 155, 65, 104, 79, 198, 126, 249, 2, 255, 123, 201, 191, 72, 233, 4}, +{103, 22, 27, 143, 100, 201, 78, 134, 92, 142, 215, 2, 91, 218, 144, 119, 59, 93, 233, 219, 110, 238, 9, 106, 252, 138, 205, 244, 108, 114, 251, 114, 242, 116, 112, 191, 79, 104, 231, 144, 87, 9, 223, 11, 133, 33, 114, 230, 116, 67, 188, 215, 59, 40, 70, 152, 153, 117, 135, 220, 106, 97, 178, 231, 51, 110, 178, 77, 24, 40, 155, 242, 80, 185, 21, 17, 226, 191, 0, 91, 232, 154, 94, 51, 62, 132, 24, 214, 69, 149, 129, 169, 42, 202, 222, 246, 100, 190, 189, 67, 177, 106, 153, 80, 43, 126, 199, 245, 122, 21, 237, 69, 148, 5, 89, 191, 241, 82, 229, 222, 248, 129, 236, 90, 213, 109, 69, 107}, +{29, 166, 189, 43, 178, 130, 192, 66, 150, 145, 157, 255, 132, 51, 133, 104, 143, 54, 29, 27, 237, 255, 245, 47, 55, 163, 190, 79, 75, 76, 96, 96, 152, 85, 149, 112, 8, 125, 49, 33, 122, 191, 17, 91, 114, 155, 16, 172, 1, 215, 117, 23, 3, 7, 0, 13, 61, 58, 219, 192, 76, 226, 181, 252, 169, 163, 179, 83, 35, 122, 51, 111, 183, 127, 144, 173, 101, 10, 154, 32, 49, 23, 90, 120, 61, 27, 227, 168, 142, 250, 209, 150, 19, 31, 122, 8, 177, 234, 242, 231, 110, 97, 169, 26, 241, 4, 162, 178, 2, 62, 93, 162, 235, 171, 107, 151, 216, 167, 56, 251, 191, 121, 143, 254, 50, 234, 245, 27}, +{95, 224, 69, 183, 102, 47, 84, 50, 191, 53, 218, 147, 140, 160, 75, 87, 137, 4, 37, 169, 146, 169, 155, 70, 120, 67, 249, 21, 97, 186, 117, 23, 53, 207, 252, 60, 179, 238, 65, 204, 38, 9, 230, 238, 103, 235, 111, 164, 104, 178, 145, 153, 223, 34, 3, 145, 239, 27, 126, 60, 107, 1, 195, 26, 217, 75, 104, 0, 58, 226, 29, 79, 186, 61, 154, 45, 233, 166, 34, 130, 94, 17, 168, 10, 108, 169, 120, 183, 149, 176, 226, 230, 56, 68, 24, 117, 195, 216, 116, 117, 214, 125, 175, 207, 99, 245, 131, 82, 59, 27, 197, 232, 71, 228, 61, 194, 192, 57, 124, 12, 121, 84, 144, 197, 90, 54, 26, 77}, +{77, 53, 12, 51, 89, 247, 127, 16, 24, 102, 187, 146, 178, 181, 39, 214, 204, 222, 154, 238, 153, 108, 188, 43, 162, 12, 207, 209, 218, 229, 37, 170, 17, 89, 127, 201, 203, 134, 137, 48, 200, 98, 57, 126, 40, 250, 186, 9, 15, 177, 201, 127, 48, 7, 65, 10, 87, 207, 150, 1, 192, 86, 66, 29, 123, 19, 241, 13, 42, 194, 121, 232, 191, 203, 98, 35, 97, 189, 106, 54, 81, 160, 102, 165, 202, 136, 9, 149, 147, 248, 206, 98, 4, 128, 81, 129, 92, 200, 210, 97, 253, 130, 130, 166, 243, 71, 148, 81, 92, 184, 138, 146, 115, 2, 107, 194, 89, 7, 166, 126, 87, 12, 201, 25, 17, 246, 60, 93}, +{45, 168, 109, 30, 77, 119, 6, 108, 16, 136, 109, 236, 65, 44, 9, 158, 81, 121, 215, 44, 227, 168, 139, 253, 114, 212, 82, 116, 35, 111, 203, 235, 106, 100, 92, 135, 109, 122, 158, 201, 132, 99, 40, 165, 119, 123, 108, 104, 255, 141, 122, 245, 11, 225, 9, 225, 196, 74, 51, 183, 93, 130, 212, 131, 252, 51, 4, 185, 234, 190, 77, 145, 14, 136, 13, 39, 203, 3, 173, 234, 155, 235, 96, 56, 85, 199, 224, 98, 140, 79, 243, 71, 190, 108, 169, 36, 153, 73, 187, 211, 194, 191, 55, 133, 155, 149, 225, 99, 19, 179, 218, 118, 198, 39, 170, 105, 211, 75, 181, 101, 111, 209, 181, 64, 154, 102, 152, 177}, +{150, 50, 56, 153, 125, 0, 159, 243, 190, 103, 9, 8, 184, 83, 139, 48, 53, 128, 65, 84, 108, 171, 187, 9, 82, 34, 168, 150, 76, 74, 148, 217, 172, 144, 133, 166, 6, 2, 118, 183, 107, 95, 152, 78, 115, 37, 91, 0, 146, 64, 160, 64, 49, 85, 8, 51, 45, 108, 243, 174, 160, 8, 209, 221, 114, 59, 169, 39, 202, 215, 68, 202, 72, 163, 136, 235, 65, 86, 61, 202, 107, 129, 69, 53, 98, 89, 182, 159, 2, 210, 95, 240, 182, 251, 137, 205, 3, 122, 178, 124, 242, 214, 103, 54, 201, 38, 183, 72, 67, 233, 136, 103, 156, 119, 214, 41, 172, 118, 223, 14, 20, 82, 223, 52, 20, 102, 168, 173}, +{115, 131, 219, 204, 26, 59, 147, 23, 61, 251, 88, 72, 4, 71, 171, 77, 129, 47, 186, 3, 73, 63, 191, 164, 162, 59, 35, 106, 228, 71, 6, 8, 220, 224, 119, 197, 56, 140, 52, 235, 83, 33, 191, 42, 139, 250, 41, 182, 14, 67, 14, 162, 130, 215, 21, 174, 34, 241, 154, 229, 201, 220, 225, 183, 110, 31, 92, 231, 214, 241, 94, 62, 248, 76, 254, 102, 68, 204, 144, 60, 55, 116, 254, 123, 31, 121, 249, 248, 119, 11, 167, 156, 255, 1, 214, 147, 47, 99, 249, 67, 198, 178, 5, 114, 10, 184, 52, 139, 206, 96, 233, 203, 1, 230, 220, 4, 73, 231, 179, 46, 31, 154, 135, 23, 42, 3, 99, 245}, +{153, 131, 11, 144, 167, 10, 235, 129, 4, 196, 164, 93, 121, 192, 150, 205, 127, 221, 91, 44, 157, 189, 22, 57, 122, 123, 227, 13, 206, 48, 159, 66, 229, 226, 64, 211, 167, 126, 101, 193, 249, 137, 115, 138, 225, 32, 212, 73, 110, 74, 109, 33, 247, 155, 51, 50, 191, 242, 236, 172, 29, 178, 147, 77, 112, 197, 145, 173, 48, 22, 79, 233, 86, 241, 160, 47, 140, 16, 246, 135, 175, 10, 149, 58, 178, 168, 68, 175, 254, 68, 219, 64, 44, 226, 201, 102, 156, 62, 68, 156, 184, 255, 230, 140, 45, 142, 240, 149, 223, 181, 227, 59, 230, 53, 64, 16, 184, 240, 150, 98, 134, 162, 52, 173, 228, 200, 93, 137}, +{59, 197, 38, 254, 32, 251, 69, 84, 148, 188, 15, 77, 96, 32, 232, 9, 203, 60, 212, 254, 229, 158, 26, 184, 138, 162, 236, 202, 69, 205, 53, 49, 107, 162, 225, 224, 141, 229, 59, 246, 7, 82, 192, 167, 209, 182, 20, 154, 16, 201, 82, 222, 168, 235, 1, 254, 20, 245, 94, 219, 96, 92, 215, 226, 94, 14, 189, 170, 83, 31, 92, 84, 26, 57, 83, 232, 158, 86, 103, 12, 235, 206, 191, 240, 181, 82, 251, 28, 213, 179, 209, 146, 255, 24, 158, 158, 208, 216, 18, 26, 227, 251, 19, 114, 154, 118, 108, 118, 9, 233, 46, 33, 15, 129, 87, 50, 127, 21, 56, 216, 17, 210, 118, 237, 200, 83, 246, 135}, +{68, 224, 14, 92, 63, 145, 105, 185, 153, 205, 173, 156, 243, 136, 123, 181, 87, 195, 35, 192, 13, 97, 8, 235, 29, 222, 11, 97, 41, 116, 61, 148, 41, 232, 187, 200, 73, 136, 203, 191, 37, 152, 154, 122, 212, 173, 253, 49, 183, 206, 132, 187, 246, 252, 205, 209, 252, 146, 96, 2, 8, 79, 27, 195, 46, 116, 112, 251, 252, 185, 188, 150, 58, 118, 235, 188, 240, 23, 6, 238, 236, 225, 61, 87, 55, 253, 16, 79, 81, 68, 85, 187, 37, 218, 174, 95, 48, 28, 195, 28, 202, 212, 241, 71, 141, 223, 241, 104, 115, 72, 18, 171, 145, 250, 6, 53, 8, 185, 139, 3, 186, 214, 243, 84, 227, 223, 214, 171}, +{116, 98, 240, 120, 17, 92, 138, 9, 228, 179, 82, 50, 235, 227, 47, 25, 170, 149, 60, 182, 150, 110, 76, 60, 10, 45, 91, 198, 81, 241, 15, 168, 242, 165, 166, 172, 157, 19, 238, 44, 155, 140, 80, 115, 206, 63, 48, 33, 105, 121, 23, 181, 45, 180, 238, 206, 35, 183, 182, 168, 183, 244, 34, 75, 173, 251, 60, 219, 208, 220, 17, 220, 33, 44, 171, 181, 251, 113, 48, 111, 128, 240, 208, 138, 81, 27, 234, 142, 84, 32, 10, 162, 135, 177, 180, 133, 55, 87, 187, 113, 83, 154, 63, 197, 255, 140, 234, 143, 114, 243, 241, 32, 10, 187, 137, 252, 174, 249, 7, 245, 252, 161, 176, 163, 206, 34, 206, 1}, +{79, 241, 79, 170, 12, 2, 88, 148, 253, 238, 24, 104, 65, 221, 117, 248, 177, 208, 133, 50, 77, 97, 214, 232, 136, 128, 60, 255, 226, 91, 156, 15, 123, 242, 160, 42, 223, 109, 221, 125, 152, 199, 88, 53, 33, 12, 148, 11, 194, 68, 116, 93, 56, 255, 198, 123, 227, 74, 218, 250, 212, 76, 186, 238, 175, 122, 60, 207, 9, 130, 95, 242, 180, 141, 227, 174, 234, 80, 215, 115, 13, 235, 68, 173, 52, 100, 120, 85, 37, 61, 44, 229, 225, 241, 135, 107, 126, 248, 98, 10, 201, 93, 242, 70, 45, 204, 104, 200, 29, 38, 246, 138, 130, 70, 225, 6, 219, 212, 111, 97, 111, 112, 61, 38, 208, 247, 128, 5}, +{75, 190, 27, 41, 96, 201, 221, 33, 142, 171, 119, 147, 99, 157, 245, 58, 50, 105, 204, 85, 246, 233, 105, 2, 216, 159, 37, 4, 12, 57, 186, 130, 180, 34, 82, 232, 47, 89, 29, 192, 215, 198, 251, 228, 202, 123, 114, 208, 212, 81, 53, 186, 199, 183, 14, 126, 148, 55, 85, 134, 240, 119, 156, 106, 55, 143, 86, 14, 216, 193, 6, 75, 152, 65, 51, 74, 91, 170, 96, 253, 221, 50, 206, 174, 206, 173, 238, 62, 123, 96, 254, 124, 39, 248, 167, 156, 176, 50, 80, 107, 6, 90, 91, 64, 163, 94, 104, 90, 172, 208, 106, 189, 37, 212, 255, 178, 151, 179, 158, 168, 207, 129, 147, 4, 156, 194, 11, 41}, +{113, 178, 248, 56, 154, 32, 222, 158, 137, 200, 51, 170, 156, 68, 33, 155, 142, 45, 120, 4, 147, 123, 49, 123, 11, 134, 185, 88, 209, 69, 46, 41, 161, 113, 163, 109, 83, 104, 81, 161, 162, 201, 60, 14, 190, 133, 21, 238, 227, 80, 16, 185, 73, 120, 255, 125, 29, 26, 179, 231, 71, 232, 245, 241, 6, 76, 214, 191, 120, 99, 236, 142, 37, 15, 155, 89, 166, 225, 182, 242, 19, 82, 29, 112, 61, 12, 237, 171, 66, 94, 60, 185, 112, 250, 114, 119, 112, 176, 5, 105, 111, 18, 2, 49, 59, 180, 199, 176, 124, 188, 14, 181, 222, 117, 205, 210, 168, 36, 137, 55, 76, 41, 122, 15, 121, 221, 126, 168}, +{49, 165, 86, 213, 222, 222, 8, 2, 217, 150, 62, 46, 121, 147, 38, 31, 152, 175, 174, 1, 131, 124, 45, 204, 215, 35, 95, 195, 116, 251, 150, 35, 33, 222, 125, 238, 182, 233, 157, 4, 41, 77, 38, 183, 123, 163, 72, 52, 190, 13, 66, 144, 254, 58, 22, 103, 30, 13, 99, 120, 34, 63, 14, 49, 201, 34, 66, 74, 53, 119, 3, 44, 206, 51, 159, 134, 7, 10, 86, 81, 103, 15, 176, 180, 151, 165, 231, 56, 81, 217, 63, 125, 243, 50, 15, 70, 139, 202, 116, 63, 63, 3, 226, 244, 237, 27, 83, 0, 61, 65, 61, 93, 216, 241, 94, 74, 115, 113, 72, 201, 126, 127, 128, 145, 23, 222, 5, 104}, +{166, 195, 42, 78, 219, 75, 75, 30, 116, 58, 78, 51, 227, 143, 174, 208, 238, 248, 41, 53, 160, 50, 202, 157, 6, 9, 180, 188, 215, 49, 94, 100, 137, 211, 100, 201, 247, 163, 54, 84, 92, 225, 3, 47, 21, 194, 165, 32, 2, 45, 231, 252, 37, 11, 105, 212, 17, 25, 81, 246, 92, 165, 243, 245, 128, 5, 40, 95, 55, 117, 251, 122, 38, 75, 54, 221, 36, 36, 232, 42, 65, 127, 126, 52, 143, 90, 17, 225, 49, 177, 208, 115, 200, 111, 110, 92, 201, 76, 59, 136, 40, 136, 127, 38, 60, 16, 182, 94, 158, 48, 100, 142, 79, 199, 150, 51, 94, 2, 132, 160, 129, 121, 173, 53, 168, 117, 82, 203}, +{11, 188, 237, 170, 37, 108, 157, 177, 35, 201, 29, 215, 149, 76, 94, 66, 194, 29, 174, 44, 235, 145, 156, 230, 31, 98, 46, 161, 192, 149, 68, 78, 37, 50, 203, 247, 59, 178, 121, 119, 35, 123, 56, 240, 31, 113, 3, 89, 18, 233, 38, 127, 108, 178, 194, 197, 161, 174, 191, 238, 94, 147, 145, 235, 24, 250, 186, 117, 201, 232, 250, 255, 13, 53, 183, 132, 117, 87, 190, 209, 97, 214, 84, 37, 186, 229, 116, 36, 126, 125, 97, 230, 116, 154, 89, 84, 92, 30, 255, 84, 223, 163, 245, 228, 96, 14, 101, 117, 93, 199, 87, 155, 88, 181, 73, 111, 7, 164, 68, 45, 9, 36, 141, 160, 242, 173, 154, 139}, +{140, 212, 104, 88, 40, 109, 133, 60, 82, 123, 133, 58, 201, 226, 188, 163, 249, 1, 78, 205, 81, 69, 40, 217, 6, 83, 58, 174, 53, 108, 26, 151, 165, 24, 85, 246, 158, 3, 131, 64, 64, 234, 22, 56, 205, 222, 141, 12, 36, 19, 75, 162, 218, 66, 65, 117, 12, 126, 86, 244, 243, 59, 16, 95, 32, 231, 72, 148, 42, 29, 250, 195, 106, 11, 241, 248, 98, 229, 68, 234, 103, 218, 71, 185, 215, 68, 162, 85, 181, 159, 123, 132, 147, 175, 164, 201, 104, 66, 145, 40, 111, 74, 138, 87, 191, 253, 183, 249, 1, 131, 193, 21, 147, 93, 144, 45, 64, 60, 69, 165, 90, 96, 86, 67, 240, 63, 67, 131}, +{186, 235, 151, 197, 68, 47, 8, 151, 56, 82, 153, 67, 118, 156, 154, 62, 28, 48, 247, 36, 192, 16, 120, 243, 135, 155, 101, 90, 228, 117, 105, 222, 199, 98, 32, 53, 183, 51, 22, 137, 20, 146, 111, 9, 120, 143, 57, 132, 235, 154, 63, 217, 190, 13, 29, 26, 200, 134, 230, 145, 90, 0, 206, 65, 11, 246, 134, 196, 225, 217, 135, 13, 86, 225, 50, 113, 251, 182, 167, 118, 156, 1, 24, 105, 200, 240, 58, 216, 145, 148, 207, 103, 5, 156, 90, 196, 248, 244, 31, 204, 236, 97, 58, 79, 42, 178, 129, 164, 189, 9, 107, 220, 117, 232, 218, 96, 36, 151, 92, 241, 106, 228, 120, 76, 116, 89, 174, 233}, +{148, 231, 89, 51, 138, 166, 105, 194, 59, 83, 72, 33, 225, 61, 8, 168, 228, 162, 90, 251, 42, 193, 2, 220, 10, 8, 218, 7, 235, 36, 11, 163, 68, 245, 41, 52, 135, 74, 107, 2, 197, 161, 248, 29, 27, 216, 140, 143, 186, 233, 34, 19, 66, 171, 138, 138, 23, 23, 48, 111, 30, 208, 213, 172, 96, 188, 91, 181, 165, 207, 159, 137, 144, 185, 176, 150, 80, 82, 246, 227, 34, 126, 64, 94, 206, 182, 165, 187, 31, 174, 206, 160, 255, 234, 83, 151, 32, 130, 148, 207, 120, 216, 109, 78, 208, 137, 140, 217, 39, 213, 171, 17, 163, 117, 180, 8, 114, 232, 219, 109, 49, 89, 183, 175, 52, 82, 230, 200}, +{208, 147, 217, 255, 204, 87, 8, 121, 67, 98, 25, 52, 64, 75, 168, 63, 149, 104, 188, 3, 95, 106, 206, 181, 56, 0, 119, 51, 88, 254, 74, 151, 76, 21, 84, 187, 135, 19, 144, 190, 222, 88, 249, 47, 17, 111, 86, 194, 18, 177, 164, 41, 18, 236, 22, 100, 112, 206, 213, 32, 134, 127, 179, 0, 127, 107, 241, 60, 77, 127, 13, 119, 104, 100, 9, 162, 161, 35, 7, 81, 133, 46, 247, 225, 43, 253, 134, 253, 157, 133, 85, 142, 26, 53, 121, 216, 42, 175, 122, 249, 19, 247, 16, 229, 60, 71, 176, 179, 31, 76, 175, 223, 226, 204, 236, 179, 221, 246, 18, 48, 83, 159, 149, 66, 12, 181, 195, 194}, +{35, 234, 52, 175, 30, 192, 198, 162, 70, 124, 2, 59, 13, 97, 86, 235, 234, 189, 75, 155, 155, 140, 73, 169, 127, 23, 28, 195, 17, 184, 27, 41, 26, 103, 194, 172, 66, 105, 119, 102, 244, 96, 191, 158, 66, 225, 198, 145, 212, 46, 24, 151, 24, 255, 147, 76, 222, 163, 114, 101, 112, 58, 40, 51, 36, 100, 152, 226, 249, 5, 186, 158, 67, 172, 4, 101, 209, 14, 161, 130, 48, 148, 71, 166, 172, 72, 174, 51, 215, 204, 192, 87, 167, 93, 15, 235, 233, 21, 63, 127, 153, 65, 221, 157, 141, 37, 5, 171, 49, 214, 44, 145, 105, 71, 27, 203, 177, 74, 119, 24, 86, 190, 189, 91, 213, 6, 109, 164}, +{150, 193, 185, 96, 85, 143, 238, 196, 203, 137, 4, 247, 146, 153, 29, 205, 35, 73, 245, 9, 2, 198, 101, 251, 110, 181, 144, 109, 126, 118, 197, 197, 160, 188, 251, 235, 39, 235, 190, 75, 224, 127, 105, 52, 210, 211, 27, 90, 196, 212, 43, 201, 183, 82, 210, 176, 240, 170, 3, 79, 116, 231, 4, 100, 22, 32, 25, 189, 119, 138, 38, 100, 158, 4, 74, 54, 145, 70, 58, 55, 179, 130, 19, 139, 100, 177, 2, 122, 142, 119, 83, 152, 22, 80, 131, 217, 15, 228, 25, 199, 233, 102, 169, 1, 94, 59, 220, 214, 46, 135, 186, 185, 31, 13, 26, 17, 139, 254, 132, 20, 114, 130, 18, 200, 204, 195, 66, 159}, +{80, 255, 42, 82, 97, 134, 31, 43, 158, 164, 134, 219, 35, 231, 174, 69, 25, 224, 234, 220, 216, 167, 5, 55, 130, 94, 59, 186, 26, 11, 239, 6, 34, 87, 195, 73, 169, 200, 83, 172, 192, 15, 111, 9, 20, 32, 143, 55, 128, 0, 122, 107, 21, 231, 69, 87, 225, 254, 90, 69, 160, 137, 119, 178, 219, 177, 58, 83, 31, 26, 120, 29, 137, 111, 224, 162, 73, 44, 212, 145, 42, 196, 28, 217, 177, 88, 50, 91, 46, 98, 108, 240, 113, 155, 52, 100, 206, 45, 185, 94, 212, 158, 22, 170, 211, 172, 129, 201, 22, 79, 78, 45, 102, 134, 155, 139, 69, 210, 215, 52, 55, 140, 199, 197, 184, 140, 202, 121}, +{14, 147, 141, 243, 223, 172, 255, 172, 5, 15, 108, 46, 127, 92, 238, 139, 140, 210, 58, 175, 134, 246, 169, 121, 232, 16, 97, 194, 253, 94, 26, 55, 255, 102, 164, 58, 124, 192, 126, 203, 182, 37, 81, 137, 131, 72, 140, 19, 240, 237, 63, 54, 88, 78, 210, 95, 77, 226, 138, 155, 111, 167, 131, 204, 218, 166, 250, 37, 85, 230, 202, 214, 12, 229, 127, 170, 68, 147, 227, 105, 77, 18, 56, 11, 165, 112, 242, 52, 45, 145, 178, 82, 208, 5, 130, 121, 92, 192, 62, 237, 45, 1, 189, 142, 176, 74, 39, 220, 210, 190, 39, 243, 152, 4, 190, 152, 228, 253, 100, 22, 122, 222, 66, 61, 126, 73, 28, 86}, +{195, 82, 235, 220, 239, 21, 116, 234, 125, 233, 226, 13, 113, 185, 102, 230, 152, 241, 46, 234, 128, 70, 131, 138, 193, 223, 113, 1, 237, 132, 75, 132, 242, 168, 115, 49, 13, 254, 127, 179, 115, 194, 101, 185, 239, 211, 176, 56, 251, 191, 99, 1, 226, 215, 94, 218, 213, 156, 255, 37, 62, 184, 60, 15, 38, 110, 254, 10, 228, 28, 70, 87, 20, 53, 196, 4, 19, 246, 191, 24, 96, 229, 184, 74, 44, 33, 49, 113, 172, 176, 95, 155, 195, 209, 16, 144, 95, 250, 188, 106, 230, 37, 15, 50, 224, 101, 240, 66, 194, 129, 140, 60, 167, 109, 87, 214, 206, 52, 144, 48, 19, 10, 128, 147, 166, 86, 161, 80}, +{74, 159, 214, 86, 183, 20, 206, 70, 250, 37, 175, 237, 194, 215, 129, 244, 44, 20, 66, 171, 40, 236, 119, 113, 91, 217, 122, 189, 249, 201, 85, 17, 5, 50, 212, 75, 81, 44, 223, 217, 20, 44, 179, 134, 121, 87, 1, 111, 155, 138, 87, 188, 10, 26, 64, 216, 149, 145, 125, 170, 183, 143, 64, 154, 90, 156, 37, 117, 63, 92, 40, 242, 137, 151, 155, 80, 143, 105, 137, 237, 212, 136, 174, 43, 145, 143, 31, 69, 132, 139, 181, 171, 133, 157, 219, 25, 250, 47, 48, 146, 116, 30, 220, 166, 58, 23, 131, 118, 105, 176, 150, 211, 85, 89, 57, 253, 119, 26, 44, 103, 173, 221, 52, 64, 225, 3, 1, 115}, +{163, 139, 144, 143, 122, 220, 40, 43, 249, 236, 240, 77, 122, 56, 235, 28, 80, 208, 213, 150, 68, 101, 56, 59, 68, 31, 74, 114, 210, 185, 226, 83, 214, 241, 81, 145, 30, 27, 49, 89, 237, 239, 163, 94, 84, 177, 49, 167, 234, 183, 2, 82, 192, 134, 200, 153, 105, 126, 130, 214, 207, 204, 41, 179, 9, 218, 200, 14, 207, 233, 86, 107, 146, 185, 140, 58, 127, 172, 30, 167, 52, 253, 170, 240, 45, 30, 143, 163, 24, 227, 88, 166, 39, 59, 208, 50, 63, 143, 194, 3, 59, 34, 47, 112, 82, 249, 99, 18, 99, 153, 40, 102, 36, 115, 3, 120, 20, 126, 73, 198, 134, 155, 219, 58, 155, 202, 85, 176}, +{116, 40, 214, 120, 29, 45, 235, 67, 240, 124, 214, 100, 202, 139, 179, 183, 150, 83, 255, 154, 68, 196, 165, 197, 62, 109, 122, 73, 185, 19, 217, 191, 83, 85, 26, 150, 203, 29, 191, 160, 125, 53, 252, 231, 240, 74, 183, 174, 171, 25, 22, 142, 70, 120, 180, 244, 21, 78, 65, 32, 234, 231, 1, 243, 23, 98, 234, 253, 33, 16, 54, 190, 28, 136, 228, 211, 153, 73, 229, 15, 71, 106, 202, 147, 200, 226, 126, 97, 242, 70, 48, 112, 107, 153, 206, 181, 84, 173, 133, 16, 226, 55, 158, 169, 168, 248, 110, 197, 17, 159, 113, 121, 110, 197, 186, 177, 191, 61, 11, 159, 141, 207, 244, 125, 115, 184, 220, 59}, +{125, 140, 51, 250, 97, 218, 57, 164, 59, 83, 96, 28, 0, 157, 42, 102, 202, 159, 69, 147, 129, 199, 108, 127, 180, 227, 138, 246, 37, 8, 79, 180, 149, 8, 149, 29, 60, 166, 176, 174, 243, 56, 127, 87, 28, 66, 145, 40, 171, 238, 57, 32, 254, 124, 38, 55, 80, 222, 98, 22, 230, 28, 235, 23, 3, 141, 118, 157, 96, 142, 27, 150, 41, 122, 124, 111, 2, 60, 206, 102, 44, 130, 138, 233, 129, 148, 150, 200, 171, 119, 42, 190, 211, 252, 170, 183, 51, 186, 66, 120, 33, 69, 84, 216, 12, 157, 70, 94, 222, 28, 28, 140, 153, 197, 42, 235, 212, 229, 93, 29, 125, 138, 110, 182, 41, 129, 5, 87}, +{92, 89, 64, 99, 82, 70, 197, 26, 122, 13, 228, 103, 198, 136, 133, 15, 127, 62, 247, 193, 246, 97, 3, 169, 205, 237, 163, 136, 213, 209, 216, 18, 10, 75, 167, 107, 99, 35, 24, 5, 144, 246, 126, 210, 82, 73, 32, 77, 40, 219, 67, 245, 114, 218, 219, 12, 204, 236, 83, 67, 208, 130, 101, 59, 99, 231, 73, 72, 184, 241, 122, 139, 141, 0, 120, 114, 89, 189, 38, 23, 176, 84, 212, 151, 237, 137, 149, 16, 109, 247, 227, 54, 96, 48, 215, 158, 177, 247, 141, 133, 217, 84, 49, 254, 116, 96, 184, 64, 141, 11, 150, 125, 163, 42, 80, 255, 147, 183, 242, 245, 218, 105, 134, 184, 153, 111, 205, 210}, +{164, 158, 106, 140, 6, 174, 228, 155, 83, 62, 197, 76, 14, 134, 37, 45, 52, 41, 30, 43, 2, 204, 37, 238, 242, 253, 245, 59, 168, 220, 49, 12, 169, 44, 34, 101, 231, 40, 247, 174, 42, 65, 141, 96, 106, 231, 212, 124, 114, 225, 234, 104, 222, 39, 43, 186, 123, 193, 54, 47, 142, 173, 90, 19, 113, 219, 192, 47, 143, 249, 40, 212, 20, 196, 110, 35, 236, 215, 169, 110, 129, 252, 91, 87, 234, 40, 164, 208, 36, 100, 9, 120, 26, 128, 22, 245, 181, 33, 251, 145, 119, 243, 72, 40, 173, 92, 56, 100, 67, 34, 75, 234, 99, 133, 88, 182, 145, 67, 109, 179, 156, 227, 130, 54, 157, 249, 42, 46}, +{142, 250, 48, 253, 81, 143, 109, 52, 254, 194, 66, 3, 51, 139, 229, 36, 1, 63, 211, 182, 170, 208, 181, 81, 196, 52, 55, 10, 104, 228, 68, 212, 11, 201, 219, 14, 113, 205, 164, 233, 181, 144, 13, 84, 119, 174, 18, 128, 87, 241, 122, 22, 109, 144, 100, 135, 226, 196, 218, 121, 37, 102, 59, 35, 215, 167, 36, 249, 171, 135, 254, 229, 118, 83, 154, 138, 178, 7, 210, 196, 190, 77, 95, 134, 245, 253, 214, 109, 248, 87, 146, 37, 124, 38, 149, 112, 148, 23, 121, 9, 49, 67, 242, 161, 220, 12, 63, 64, 185, 26, 55, 65, 137, 49, 126, 193, 84, 223, 190, 240, 35, 115, 172, 136, 234, 157, 147, 222}, +{118, 166, 230, 20, 72, 122, 57, 247, 239, 92, 60, 85, 85, 68, 33, 133, 181, 181, 82, 218, 128, 226, 125, 230, 63, 8, 156, 57, 241, 216, 50, 208, 216, 249, 147, 205, 90, 6, 29, 32, 40, 139, 23, 173, 46, 55, 205, 123, 132, 143, 171, 25, 215, 198, 11, 30, 53, 40, 209, 63, 106, 120, 94, 144, 230, 231, 57, 247, 48, 178, 235, 218, 20, 43, 98, 220, 219, 208, 23, 233, 66, 21, 238, 42, 36, 231, 185, 156, 38, 234, 79, 144, 203, 170, 113, 49, 191, 96, 141, 253, 220, 181, 168, 138, 160, 68, 89, 147, 226, 36, 50, 118, 143, 183, 26, 40, 107, 170, 169, 130, 138, 158, 132, 119, 142, 114, 226, 112}, +{200, 1, 38, 180, 233, 209, 139, 130, 200, 5, 196, 65, 246, 81, 59, 58, 57, 148, 76, 4, 100, 82, 162, 214, 240, 27, 216, 57, 28, 108, 161, 196, 189, 128, 126, 7, 98, 120, 33, 162, 56, 245, 132, 242, 96, 7, 81, 110, 52, 76, 225, 28, 239, 29, 233, 55, 24, 225, 188, 97, 231, 127, 145, 12, 65, 19, 196, 12, 236, 166, 21, 108, 192, 85, 171, 93, 235, 174, 249, 178, 178, 8, 44, 197, 12, 230, 141, 25, 30, 252, 112, 231, 224, 183, 56, 18, 198, 179, 90, 220, 201, 15, 42, 51, 71, 210, 131, 181, 103, 195, 173, 126, 113, 138, 172, 59, 171, 250, 76, 218, 231, 162, 80, 33, 174, 120, 167, 10}, +{199, 99, 117, 98, 224, 38, 254, 236, 10, 192, 220, 40, 106, 209, 126, 154, 139, 4, 83, 149, 241, 154, 55, 89, 118, 247, 242, 232, 22, 104, 106, 189, 138, 42, 186, 137, 3, 249, 168, 62, 110, 52, 143, 78, 110, 202, 176, 118, 89, 87, 193, 137, 134, 178, 59, 25, 62, 101, 192, 160, 144, 6, 152, 88, 127, 107, 187, 18, 184, 246, 57, 205, 39, 122, 82, 191, 37, 106, 186, 69, 134, 16, 103, 254, 126, 102, 39, 40, 5, 76, 213, 62, 10, 14, 15, 185, 237, 227, 101, 164, 166, 54, 79, 74, 153, 107, 93, 174, 200, 220, 200, 88, 83, 151, 91, 125, 214, 186, 53, 143, 75, 191, 68, 162, 20, 194, 4, 42}, +{173, 87, 22, 250, 138, 220, 162, 230, 210, 145, 74, 153, 1, 73, 205, 1, 29, 71, 116, 203, 189, 252, 97, 251, 91, 22, 132, 6, 239, 210, 134, 196, 94, 187, 187, 41, 236, 190, 213, 98, 227, 45, 134, 116, 233, 234, 208, 183, 121, 213, 100, 196, 33, 207, 179, 157, 91, 134, 253, 167, 178, 155, 151, 108, 8, 84, 132, 153, 138, 73, 30, 205, 208, 102, 232, 64, 38, 27, 50, 195, 3, 94, 25, 179, 106, 92, 129, 144, 158, 151, 205, 216, 86, 130, 68, 97, 102, 232, 23, 120, 35, 123, 237, 177, 36, 11, 242, 240, 124, 190, 79, 8, 73, 137, 84, 145, 13, 39, 121, 60, 230, 31, 178, 240, 8, 211, 3, 63}, +{58, 79, 188, 169, 105, 228, 223, 29, 85, 213, 161, 166, 160, 154, 181, 151, 83, 176, 76, 96, 123, 157, 149, 193, 109, 18, 134, 231, 145, 183, 227, 64, 227, 161, 232, 81, 189, 118, 20, 74, 191, 237, 244, 239, 133, 249, 40, 49, 147, 3, 81, 43, 99, 164, 70, 160, 8, 190, 74, 202, 43, 5, 40, 108, 251, 40, 241, 184, 137, 86, 252, 158, 114, 106, 162, 69, 187, 100, 233, 27, 6, 138, 203, 20, 115, 150, 47, 128, 48, 182, 187, 81, 110, 102, 161, 203, 243, 227, 9, 9, 6, 133, 202, 52, 46, 166, 229, 178, 196, 120, 39, 153, 171, 133, 224, 34, 164, 106, 243, 116, 180, 97, 172, 95, 200, 160, 41, 93}, +{22, 208, 63, 222, 210, 210, 52, 114, 110, 40, 170, 244, 245, 204, 92, 83, 205, 95, 165, 36, 138, 90, 199, 242, 103, 197, 122, 44, 179, 250, 53, 89, 47, 82, 125, 28, 184, 180, 176, 81, 19, 229, 9, 24, 161, 75, 214, 245, 107, 22, 186, 71, 30, 169, 24, 126, 171, 6, 162, 70, 216, 144, 3, 178, 34, 204, 197, 33, 121, 243, 16, 107, 28, 214, 214, 78, 52, 152, 19, 215, 66, 31, 48, 238, 35, 254, 189, 147, 1, 238, 37, 160, 128, 82, 152, 33, 71, 247, 72, 228, 56, 171, 205, 148, 246, 32, 220, 163, 191, 136, 73, 146, 43, 23, 218, 199, 20, 198, 66, 187, 230, 70, 120, 181, 86, 239, 11}, +{169, 108, 180, 202, 101, 142, 78, 1, 100, 68, 112, 31, 60, 143, 140, 49, 104, 32, 252, 225, 138, 70, 175, 37, 34, 200, 224, 191, 26, 82, 216, 67, 174, 73, 174, 231, 113, 40, 224, 54, 190, 18, 121, 7, 16, 170, 49, 73, 230, 34, 38, 159, 236, 84, 32, 35, 219, 174, 14, 107, 154, 59, 123, 107, 73, 30, 218, 65, 21, 85, 152, 75, 132, 218, 46, 251, 22, 108, 253, 97, 40, 27, 197, 105, 171, 127, 171, 66, 184, 147, 209, 200, 224, 255, 114, 89, 119, 10, 251, 233, 118, 135, 34, 5, 105, 143, 145, 181, 228, 79, 100, 154, 114, 245, 250, 76, 211, 209, 236, 138, 100, 77, 105, 95, 61, 17, 186, 69}, +{6, 83, 48, 238, 85, 169, 139, 237, 8, 153, 51, 149, 232, 141, 213, 13, 83, 77, 104, 49, 226, 136, 93, 238, 68, 135, 127, 133, 63, 95, 89, 211, 81, 61, 189, 79, 98, 2, 186, 112, 95, 225, 38, 66, 194, 186, 240, 242, 233, 56, 81, 152, 242, 94, 51, 187, 140, 151, 9, 170, 121, 148, 251, 168, 151, 88, 40, 142, 100, 160, 1, 193, 38, 200, 74, 164, 234, 54, 239, 170, 201, 244, 176, 13, 115, 129, 165, 205, 220, 105, 94, 0, 106, 231, 68, 181, 53, 74, 101, 185, 103, 1, 220, 48, 183, 121, 2, 167, 193, 117, 205, 148, 36, 0, 231, 31, 159, 50, 118, 86, 183, 1, 213, 103, 234, 217, 129, 114}, +{167, 228, 69, 132, 222, 71, 136, 88, 139, 106, 7, 150, 97, 252, 210, 18, 83, 164, 80, 44, 25, 102, 87, 125, 137, 229, 82, 164, 208, 187, 161, 14, 156, 230, 54, 121, 191, 53, 74, 119, 101, 151, 91, 53, 67, 232, 91, 224, 223, 120, 74, 53, 147, 118, 156, 61, 203, 0, 141, 49, 90, 176, 219, 179, 10, 62, 221, 32, 79, 63, 58, 144, 53, 251, 207, 232, 8, 167, 49, 166, 226, 78, 112, 228, 175, 71, 119, 49, 68, 94, 228, 89, 94, 162, 49, 110, 32, 117, 162, 143, 60, 25, 178, 240, 137, 14, 205, 21, 49, 97, 54, 33, 17, 200, 251, 158, 175, 74, 125, 42, 144, 160, 160, 233, 78, 126, 226, 161}, +{34, 223, 65, 146, 188, 197, 132, 20, 151, 81, 202, 247, 12, 125, 226, 215, 203, 81, 102, 224, 231, 120, 78, 168, 127, 205, 40, 217, 221, 196, 99, 191, 209, 114, 189, 98, 167, 249, 51, 24, 115, 77, 219, 238, 217, 189, 74, 241, 16, 79, 247, 9, 119, 136, 245, 70, 160, 161, 221, 144, 233, 3, 139, 134, 63, 143, 246, 177, 146, 210, 50, 191, 20, 144, 190, 122, 135, 212, 67, 178, 67, 90, 60, 98, 113, 144, 243, 28, 147, 167, 11, 92, 143, 252, 94, 208, 124, 247, 235, 146, 174, 42, 129, 202, 244, 37, 172, 36, 52, 165, 159, 175, 123, 25, 104, 226, 83, 150, 78, 113, 175, 128, 196, 243, 190, 53, 3, 208}, +{119, 232, 118, 93, 99, 1, 155, 241, 138, 229, 245, 92, 231, 68, 209, 122, 128, 99, 69, 74, 31, 158, 219, 92, 198, 220, 122, 249, 156, 167, 209, 184, 99, 253, 91, 243, 51, 245, 254, 31, 233, 171, 78, 215, 36, 194, 225, 120, 162, 31, 25, 35, 8, 129, 93, 130, 26, 58, 28, 35, 133, 179, 25, 13, 243, 94, 107, 193, 69, 112, 250, 39, 145, 126, 152, 198, 66, 201, 181, 140, 178, 58, 181, 154, 52, 24, 240, 73, 19, 234, 100, 172, 101, 210, 207, 253, 94, 204, 2, 204, 101, 159, 15, 108, 95, 50, 216, 18, 54, 153, 146, 29, 55, 160, 213, 6, 22, 75, 3, 210, 219, 77, 252, 132, 155, 121, 29, 100}, +{19, 46, 105, 100, 231, 219, 151, 129, 87, 162, 245, 65, 167, 249, 217, 250, 188, 44, 247, 33, 2, 58, 151, 88, 84, 81, 159, 80, 117, 29, 234, 155, 136, 204, 150, 196, 111, 198, 172, 250, 235, 198, 212, 28, 59, 3, 226, 15, 200, 69, 153, 250, 205, 75, 106, 157, 44, 105, 186, 182, 141, 177, 33, 176, 198, 183, 40, 11, 224, 218, 40, 57, 24, 72, 11, 96, 207, 223, 32, 13, 76, 3, 113, 184, 29, 141, 91, 210, 180, 53, 112, 252, 99, 112, 126, 143, 75, 93, 111, 221, 19, 253, 185, 84, 78, 69, 204, 219, 240, 249, 124, 118, 171, 14, 13, 130, 82, 211, 160, 68, 254, 42, 16, 74, 104, 250, 19, 113}, +{183, 185, 0, 120, 2, 214, 115, 219, 144, 227, 84, 41, 155, 85, 145, 217, 176, 144, 20, 156, 99, 154, 81, 209, 255, 20, 76, 19, 129, 180, 42, 123, 246, 213, 173, 208, 61, 206, 1, 140, 77, 133, 27, 236, 154, 227, 243, 247, 227, 19, 103, 152, 219, 144, 181, 162, 120, 97, 253, 244, 44, 226, 214, 59, 127, 156, 212, 47, 63, 87, 91, 152, 183, 62, 67, 109, 22, 111, 255, 136, 217, 247, 14, 124, 216, 68, 208, 103, 164, 232, 88, 240, 134, 113, 36, 120, 21, 101, 111, 69, 244, 255, 32, 80, 230, 76, 160, 102, 28, 136, 101, 178, 119, 158, 222, 116, 190, 24, 6, 154, 187, 241, 21, 133, 128, 251, 80, 228}, +{150, 130, 64, 25, 202, 58, 131, 71, 197, 33, 111, 146, 53, 142, 82, 143, 108, 101, 79, 96, 125, 240, 211, 207, 128, 75, 231, 177, 189, 203, 37, 159, 192, 31, 57, 226, 134, 53, 243, 39, 82, 10, 213, 130, 57, 245, 60, 28, 110, 54, 138, 117, 32, 212, 94, 195, 165, 26, 88, 110, 182, 77, 16, 6, 107, 64, 225, 7, 103, 65, 120, 228, 237, 22, 214, 63, 95, 160, 250, 70, 215, 59, 199, 126, 199, 233, 241, 23, 218, 94, 122, 96, 215, 175, 211, 133, 19, 55, 13, 147, 61, 37, 76, 6, 29, 78, 98, 20, 148, 237, 199, 198, 79, 177, 53, 191, 137, 71, 164, 86, 168, 31, 215, 82, 62, 78, 77, 209}, +{171, 131, 245, 158, 211, 221, 85, 51, 126, 20, 215, 130, 222, 88, 82, 126, 149, 174, 136, 35, 20, 110, 186, 109, 224, 25, 94, 142, 232, 200, 138, 220, 140, 12, 251, 126, 248, 242, 205, 232, 169, 247, 165, 63, 164, 42, 144, 246, 50, 97, 174, 7, 60, 106, 147, 86, 199, 121, 139, 33, 210, 193, 159, 49, 250, 147, 234, 189, 236, 194, 189, 162, 75, 248, 187, 182, 25, 249, 86, 1, 24, 1, 195, 35, 205, 201, 167, 154, 199, 57, 58, 70, 197, 28, 59, 5, 204, 82, 71, 96, 96, 118, 241, 180, 154, 77, 2, 204, 23, 193, 169, 164, 187, 180, 211, 153, 113, 240, 46, 177, 101, 190, 73, 206, 229, 171, 146, 199}, +{51, 72, 104, 140, 207, 242, 194, 24, 79, 206, 94, 50, 65, 241, 5, 55, 108, 237, 220, 106, 158, 24, 158, 122, 100, 32, 108, 163, 171, 123, 9, 126, 126, 190, 162, 58, 231, 165, 90, 70, 52, 183, 51, 243, 37, 249, 191, 190, 17, 118, 152, 230, 137, 25, 191, 160, 66, 150, 180, 144, 160, 46, 4, 69, 91, 88, 51, 29, 50, 196, 162, 48, 145, 10, 165, 230, 95, 21, 134, 189, 59, 158, 216, 252, 208, 235, 3, 154, 116, 150, 233, 108, 144, 172, 202, 10, 172, 51, 224, 42, 48, 32, 36, 21, 203, 108, 157, 20, 252, 203, 90, 226, 205, 26, 223, 245, 202, 96, 119, 172, 119, 23, 166, 201, 13, 151, 233, 12}, +{142, 100, 37, 157, 100, 221, 247, 229, 145, 204, 223, 40, 157, 164, 197, 99, 234, 124, 75, 207, 178, 9, 255, 75, 85, 30, 144, 255, 144, 229, 54, 217, 119, 157, 82, 232, 191, 155, 13, 160, 39, 148, 210, 2, 233, 129, 18, 167, 65, 205, 146, 36, 194, 74, 160, 157, 130, 65, 161, 220, 83, 49, 104, 191, 227, 158, 71, 164, 231, 139, 96, 189, 204, 39, 205, 18, 84, 65, 181, 239, 6, 37, 132, 241, 137, 174, 219, 99, 208, 233, 49, 180, 182, 212, 245, 147, 29, 189, 70, 157, 21, 170, 96, 2, 211, 15, 230, 88, 253, 142, 27, 20, 206, 105, 242, 20, 134, 38, 4, 242, 21, 106, 94, 107, 40, 43, 18, 235}, +{88, 216, 21, 221, 132, 193, 196, 93, 139, 130, 73, 19, 68, 241, 196, 22, 175, 45, 122, 63, 195, 145, 236, 104, 217, 69, 84, 7, 19, 149, 2, 42, 65, 110, 137, 247, 13, 34, 142, 124, 162, 32, 107, 57, 32, 232, 92, 221, 49, 213, 117, 86, 62, 100, 86, 2, 9, 17, 114, 247, 164, 62, 214, 140, 164, 107, 77, 48, 24, 146, 7, 233, 239, 206, 59, 232, 98, 249, 203, 3, 160, 152, 168, 210, 140, 151, 27, 10, 15, 148, 244, 27, 201, 120, 195, 161, 227, 112, 0, 148, 115, 75, 45, 36, 120, 66, 230, 134, 170, 53, 22, 11, 36, 139, 244, 15, 215, 97, 155, 64, 245, 95, 169, 127, 94, 128, 59, 245}, +{113, 25, 131, 195, 30, 232, 178, 250, 150, 169, 3, 20, 60, 244, 95, 255, 11, 166, 164, 8, 160, 101, 103, 58, 249, 101, 145, 200, 136, 127, 139, 198, 75, 56, 200, 111, 224, 149, 222, 159, 116, 45, 250, 81, 193, 198, 186, 13, 228, 85, 230, 205, 144, 105, 1, 173, 181, 144, 106, 101, 111, 80, 205, 16, 18, 211, 193, 4, 92, 122, 43, 24, 85, 92, 234, 239, 1, 28, 217, 190, 206, 215, 12, 138, 207, 20, 87, 243, 214, 181, 115, 223, 125, 1, 225, 216, 114, 193, 171, 164, 38, 97, 215, 52, 31, 245, 51, 193, 52, 244, 51, 162, 148, 180, 33, 134, 195, 8, 42, 64, 83, 246, 33, 148, 118, 84, 104, 83}, +{170, 99, 13, 44, 23, 171, 72, 148, 201, 86, 80, 100, 205, 133, 240, 211, 100, 238, 190, 124, 78, 116, 171, 52, 144, 156, 44, 231, 221, 25, 8, 236, 239, 37, 179, 80, 111, 213, 184, 117, 98, 142, 177, 249, 47, 51, 198, 135, 18, 178, 117, 215, 208, 49, 204, 41, 228, 253, 226, 63, 124, 66, 93, 22, 117, 199, 250, 100, 197, 190, 252, 122, 125, 21, 36, 87, 25, 244, 71, 104, 232, 122, 102, 213, 100, 28, 88, 168, 140, 230, 164, 30, 6, 204, 234, 35, 21, 104, 68, 207, 131, 125, 44, 29, 57, 219, 25, 10, 196, 68, 46, 78, 3, 158, 125, 67, 36, 44, 79, 63, 80, 35, 251, 144, 96, 5, 212, 13}, +{107, 117, 109, 4, 82, 226, 73, 73, 144, 254, 251, 140, 73, 53, 61, 17, 27, 253, 150, 68, 215, 202, 164, 91, 112, 245, 17, 219, 209, 190, 0, 84, 50, 159, 214, 138, 226, 206, 136, 152, 16, 83, 87, 66, 16, 174, 155, 72, 13, 239, 218, 0, 69, 50, 8, 40, 35, 8, 255, 158, 149, 195, 19, 72, 60, 235, 162, 94, 94, 168, 227, 53, 244, 212, 104, 206, 184, 235, 200, 24, 197, 24, 106, 113, 56, 80, 86, 93, 163, 150, 23, 58, 85, 94, 43, 112, 204, 71, 244, 58, 164, 196, 18, 131, 40, 216, 159, 250, 167, 123, 228, 118, 239, 136, 44, 204, 105, 43, 166, 82, 68, 11, 71, 139, 235, 76, 59, 185}, +{63, 224, 4, 180, 208, 168, 156, 168, 107, 96, 220, 16, 89, 252, 239, 251, 143, 185, 23, 240, 109, 9, 45, 210, 101, 116, 105, 233, 139, 20, 144, 162, 177, 2, 204, 126, 234, 5, 175, 214, 110, 102, 233, 148, 129, 0, 121, 85, 149, 25, 172, 132, 249, 94, 243, 111, 84, 90, 150, 122, 167, 204, 137, 8, 1, 231, 158, 201, 130, 20, 158, 198, 163, 57, 97, 106, 139, 244, 16, 194, 234, 76, 235, 165, 132, 7, 182, 37, 154, 243, 77, 104, 252, 97, 107, 230, 26, 170, 42, 45, 78, 218, 137, 223, 212, 5, 93, 241, 68, 94, 170, 136, 47, 88, 226, 146, 40, 107, 130, 132, 71, 112, 154, 131, 129, 104, 211, 96}, +{15, 199, 182, 26, 228, 16, 229, 27, 139, 117, 62, 95, 188, 170, 217, 174, 148, 62, 218, 106, 129, 232, 194, 95, 24, 185, 169, 236, 131, 26, 71, 150, 6, 95, 4, 151, 112, 202, 133, 75, 176, 12, 86, 27, 110, 166, 134, 63, 164, 120, 170, 10, 84, 231, 112, 32, 159, 154, 9, 177, 221, 205, 73, 181, 83, 84, 19, 148, 243, 114, 97, 160, 138, 54, 35, 169, 156, 98, 44, 173, 87, 117, 242, 254, 83, 29, 39, 85, 217, 26, 54, 22, 23, 66, 73, 18, 42, 132, 244, 120, 80, 235, 135, 232, 56, 163, 165, 153, 60, 118, 224, 82, 45, 163, 66, 169, 65, 34, 132, 17, 192, 217, 9, 179, 6, 250, 151, 18}, +{72, 34, 227, 187, 26, 50, 135, 144, 97, 94, 225, 167, 155, 84, 168, 210, 47, 116, 26, 162, 163, 41, 82, 94, 249, 87, 88, 196, 60, 99, 58, 58, 40, 206, 5, 21, 238, 26, 75, 110, 30, 198, 18, 124, 250, 167, 138, 49, 52, 81, 79, 164, 175, 30, 160, 184, 129, 113, 243, 205, 203, 84, 112, 200, 141, 132, 232, 224, 128, 11, 244, 23, 47, 229, 55, 142, 172, 206, 131, 15, 44, 14, 28, 31, 32, 215, 103, 109, 110, 10, 204, 212, 204, 97, 166, 189, 160, 174, 50, 0, 240, 253, 53, 60, 38, 125, 239, 215, 112, 167, 50, 60, 228, 169, 34, 46, 173, 107, 134, 213, 123, 19, 166, 1, 199, 141, 246, 143}, +{66, 81, 244, 5, 174, 85, 75, 143, 218, 185, 26, 119, 151, 103, 69, 57, 5, 22, 95, 236, 194, 68, 214, 224, 207, 93, 183, 28, 230, 191, 138, 242, 177, 77, 97, 230, 65, 237, 1, 234, 54, 36, 106, 20, 74, 62, 158, 7, 228, 239, 20, 173, 149, 88, 204, 83, 215, 221, 79, 42, 218, 102, 243, 124, 79, 156, 239, 30, 227, 44, 203, 33, 163, 194, 70, 159, 216, 246, 214, 19, 49, 200, 98, 200, 87, 186, 2, 153, 94, 144, 174, 228, 195, 201, 58, 188, 170, 37, 123, 249, 194, 136, 29, 13, 206, 201, 123, 68, 252, 80, 218, 124, 204, 234, 193, 96, 18, 19, 125, 37, 111, 245, 138, 118, 247, 249, 150, 82}, +{1, 126, 94, 236, 199, 205, 136, 111, 144, 158, 208, 227, 169, 187, 47, 118, 174, 85, 112, 31, 111, 74, 138, 83, 81, 136, 205, 133, 129, 123, 127, 207, 12, 145, 61, 150, 52, 79, 238, 166, 219, 8, 67, 26, 149, 53, 39, 137, 43, 132, 248, 133, 151, 29, 25, 4, 39, 164, 246, 226, 98, 146, 230, 145, 135, 149, 193, 216, 246, 96, 16, 135, 94, 160, 204, 43, 116, 222, 161, 204, 14, 75, 20, 117, 61, 81, 51, 111, 71, 213, 238, 245, 203, 79, 208, 186, 107, 116, 82, 142, 62, 86, 121, 189, 119, 132, 136, 50, 76, 27, 219, 182, 172, 24, 160, 161, 245, 233, 72, 165, 149, 76, 231, 93, 162, 136, 7, 44}, +{14, 21, 95, 203, 128, 76, 49, 42, 96, 137, 8, 92, 240, 87, 80, 93, 253, 119, 143, 233, 158, 77, 8, 51, 150, 148, 134, 161, 104, 77, 21, 88, 235, 252, 246, 222, 243, 58, 110, 92, 148, 129, 251, 192, 215, 143, 248, 80, 52, 153, 21, 208, 195, 123, 134, 252, 82, 168, 71, 26, 135, 242, 28, 146, 173, 54, 78, 91, 31, 17, 44, 188, 34, 64, 130, 98, 151, 57, 179, 91, 115, 251, 177, 34, 153, 193, 120, 101, 82, 177, 202, 72, 34, 229, 155, 58, 30, 81, 250, 87, 237, 83, 121, 205, 131, 16, 78, 175, 37, 141, 119, 175, 157, 83, 178, 209, 106, 112, 202, 56, 21, 219, 165, 161, 243, 131, 205, 248}, +{182, 136, 121, 134, 119, 54, 137, 3, 206, 93, 168, 196, 157, 250, 173, 119, 115, 8, 215, 254, 174, 118, 225, 244, 164, 128, 21, 151, 138, 204, 219, 61, 228, 78, 101, 29, 110, 210, 183, 46, 65, 106, 55, 148, 42, 39, 206, 99, 49, 15, 255, 114, 32, 212, 58, 13, 252, 160, 64, 46, 155, 112, 34, 189, 158, 66, 1, 220, 222, 126, 126, 81, 202, 226, 79, 153, 242, 52, 169, 116, 212, 208, 87, 106, 20, 222, 156, 42, 105, 144, 117, 116, 68, 97, 1, 117, 29, 176, 0, 156, 25, 45, 64, 75, 236, 88, 74, 57, 153, 6, 200, 117, 229, 23, 128, 116, 141, 153, 216, 145, 128, 35, 164, 101, 165, 104, 234, 193}, +{188, 214, 39, 232, 88, 191, 246, 27, 167, 189, 225, 14, 148, 166, 47, 187, 140, 178, 33, 138, 166, 141, 113, 226, 75, 2, 186, 19, 220, 242, 108, 224, 14, 218, 12, 228, 3, 215, 230, 248, 123, 38, 112, 220, 203, 58, 201, 234, 241, 213, 99, 253, 191, 53, 157, 178, 150, 0, 188, 174, 72, 163, 176, 117, 223, 77, 244, 55, 165, 163, 34, 140, 218, 191, 60, 143, 243, 80, 64, 8, 83, 52, 9, 155, 236, 126, 58, 177, 154, 180, 189, 2, 17, 182, 158, 250, 64, 208, 141, 112, 126, 176, 238, 135, 196, 32, 82, 207, 237, 70, 207, 88, 93, 159, 24, 228, 85, 207, 239, 255, 144, 63, 194, 233, 107, 177, 69, 103}, +{94, 238, 246, 184, 95, 193, 81, 116, 14, 145, 119, 86, 199, 78, 79, 238, 156, 133, 75, 39, 59, 169, 44, 55, 68, 87, 123, 213, 170, 225, 82, 112, 49, 238, 217, 213, 212, 105, 34, 158, 87, 94, 123, 170, 155, 116, 83, 11, 194, 120, 254, 235, 156, 186, 124, 17, 152, 62, 28, 251, 205, 21, 114, 101, 167, 8, 236, 159, 167, 131, 227, 88, 116, 26, 144, 76, 65, 91, 3, 236, 255, 198, 61, 98, 209, 19, 146, 29, 4, 146, 126, 27, 13, 18, 114, 107, 54, 211, 84, 248, 68, 236, 235, 232, 235, 213, 112, 161, 223, 208, 180, 225, 63, 167, 205, 76, 127, 39, 154, 188, 63, 41, 40, 83, 163, 116, 200, 156}, +{47, 218, 143, 82, 94, 178, 140, 177, 213, 156, 199, 180, 161, 42, 78, 71, 145, 65, 240, 107, 123, 109, 167, 124, 55, 116, 127, 138, 37, 210, 155, 157, 54, 210, 67, 214, 51, 104, 57, 248, 165, 138, 91, 79, 109, 242, 116, 25, 237, 220, 245, 158, 237, 128, 75, 212, 157, 116, 24, 169, 7, 26, 97, 111, 34, 208, 168, 96, 212, 86, 166, 199, 52, 43, 42, 210, 170, 72, 205, 184, 144, 47, 210, 13, 206, 194, 198, 92, 214, 235, 121, 6, 187, 107, 167, 155, 102, 245, 210, 6, 158, 143, 181, 134, 157, 203, 234, 105, 113, 35, 253, 153, 153, 89, 201, 157, 144, 201, 65, 178, 32, 156, 188, 161, 93, 153, 234, 97}, +{205, 192, 89, 208, 109, 57, 89, 196, 12, 65, 151, 56, 192, 105, 226, 156, 211, 7, 104, 62, 18, 37, 151, 82, 93, 112, 25, 141, 64, 61, 199, 86, 178, 18, 125, 177, 97, 22, 121, 93, 182, 79, 157, 166, 126, 65, 252, 174, 97, 237, 83, 237, 240, 203, 60, 119, 61, 223, 21, 11, 30, 134, 53, 219, 75, 30, 131, 209, 27, 70, 128, 160, 53, 154, 252, 138, 72, 54, 188, 112, 54, 113, 1, 249, 8, 231, 186, 215, 63, 20, 8, 249, 194, 117, 94, 165, 250, 127, 2, 86, 251, 235, 51, 78, 251, 226, 163, 85, 100, 10, 71, 220, 238, 104, 49, 18, 76, 64, 222, 192, 112, 237, 170, 196, 143, 177, 209, 146}, +{23, 195, 210, 23, 158, 194, 215, 154, 112, 167, 171, 249, 144, 36, 120, 243, 8, 82, 24, 79, 244, 43, 108, 32, 139, 99, 117, 131, 155, 215, 163, 179, 206, 185, 30, 18, 29, 171, 248, 30, 94, 179, 25, 84, 126, 240, 153, 196, 158, 255, 138, 39, 242, 29, 218, 121, 137, 57, 126, 216, 95, 220, 242, 121, 142, 44, 153, 203, 217, 102, 117, 167, 231, 180, 204, 198, 69, 215, 33, 178, 133, 27, 167, 235, 133, 16, 188, 222, 29, 30, 129, 95, 246, 197, 220, 173, 100, 104, 110, 48, 36, 147, 59, 173, 79, 243, 7, 3, 211, 174, 154, 166, 220, 84, 29, 38, 189, 100, 67, 111, 242, 188, 129, 125, 173, 160, 177, 174}, +{65, 190, 17, 34, 12, 251, 122, 137, 83, 42, 178, 210, 236, 250, 111, 134, 9, 56, 166, 103, 188, 30, 60, 149, 156, 89, 163, 119, 194, 78, 217, 153, 199, 17, 40, 86, 3, 84, 15, 232, 44, 109, 87, 199, 88, 167, 48, 240, 172, 27, 87, 18, 150, 73, 103, 21, 240, 35, 74, 66, 105, 183, 70, 39, 79, 156, 236, 136, 4, 79, 115, 0, 128, 187, 199, 106, 42, 235, 224, 123, 69, 203, 79, 161, 250, 148, 205, 130, 111, 134, 185, 172, 146, 143, 203, 109, 246, 252, 50, 178, 253, 90, 193, 132, 175, 156, 120, 30, 67, 148, 185, 207, 49, 226, 162, 92, 78, 45, 224, 30, 176, 228, 33, 21, 52, 123, 217, 184}, +{102, 56, 164, 54, 40, 178, 24, 32, 168, 218, 255, 147, 220, 168, 206, 201, 64, 107, 101, 165, 121, 208, 232, 179, 122, 128, 173, 147, 111, 230, 24, 255, 191, 129, 1, 1, 142, 43, 128, 29, 44, 58, 12, 137, 141, 81, 104, 2, 27, 240, 245, 19, 145, 86, 47, 79, 178, 158, 134, 108, 160, 241, 115, 34, 151, 237, 19, 185, 200, 59, 183, 48, 235, 243, 1, 201, 114, 202, 249, 83, 123, 81, 126, 235, 100, 133, 88, 37, 133, 22, 240, 62, 155, 161, 97, 132, 134, 232, 119, 181, 208, 122, 123, 255, 103, 41, 26, 46, 193, 27, 177, 249, 180, 248, 132, 20, 88, 120, 98, 131, 107, 183, 157, 95, 128, 91, 77, 85}, +{33, 113, 111, 140, 194, 247, 21, 7, 208, 48, 135, 72, 185, 20, 219, 38, 117, 139, 7, 93, 148, 180, 237, 207, 34, 212, 28, 26, 77, 143, 195, 95, 204, 193, 232, 242, 128, 247, 183, 174, 73, 115, 221, 91, 214, 213, 149, 146, 102, 107, 190, 200, 191, 255, 147, 112, 45, 253, 194, 88, 44, 71, 82, 135, 27, 124, 212, 144, 201, 44, 77, 213, 37, 49, 154, 168, 59, 100, 179, 0, 235, 80, 229, 244, 112, 133, 56, 176, 197, 243, 224, 206, 105, 167, 85, 121, 10, 59, 1, 128, 238, 92, 216, 41, 49, 36, 50, 164, 215, 207, 158, 216, 228, 59, 187, 55, 194, 16, 133, 231, 80, 234, 112, 221, 48, 63, 202, 219}, +{148, 151, 214, 240, 3, 69, 26, 164, 251, 135, 192, 193, 80, 3, 12, 193, 13, 32, 124, 221, 205, 59, 196, 46, 140, 120, 48, 150, 244, 18, 241, 152, 5, 196, 32, 135, 163, 59, 189, 221, 35, 121, 33, 201, 162, 184, 219, 31, 203, 146, 183, 41, 253, 247, 217, 186, 133, 167, 213, 105, 160, 141, 6, 191, 110, 91, 243, 159, 200, 28, 4, 231, 197, 10, 134, 125, 175, 253, 218, 250, 124, 86, 243, 48, 248, 58, 14, 143, 148, 210, 182, 6, 112, 145, 110, 117, 191, 134, 164, 87, 238, 38, 249, 11, 8, 90, 245, 103, 213, 226, 181, 202, 142, 178, 168, 44, 59, 123, 218, 218, 167, 237, 102, 50, 146, 14, 4, 24}, +{117, 167, 77, 152, 141, 25, 135, 1, 226, 92, 201, 81, 169, 151, 197, 204, 108, 86, 193, 181, 38, 220, 171, 2, 134, 77, 87, 125, 1, 177, 45, 51, 205, 11, 31, 76, 253, 204, 45, 206, 74, 97, 117, 131, 185, 236, 241, 125, 128, 27, 89, 248, 101, 27, 206, 138, 47, 135, 130, 85, 19, 122, 226, 229, 24, 57, 142, 106, 246, 3, 139, 51, 129, 55, 76, 195, 77, 230, 251, 205, 97, 2, 79, 65, 36, 96, 219, 164, 144, 88, 83, 244, 81, 1, 157, 249, 173, 76, 145, 115, 182, 214, 27, 50, 16, 108, 161, 19, 159, 34, 176, 29, 58, 238, 23, 70, 210, 202, 233, 153, 59, 107, 254, 204, 19, 54, 77, 117}, +{139, 217, 75, 35, 241, 207, 247, 253, 183, 190, 35, 161, 199, 216, 4, 128, 4, 52, 84, 122, 32, 147, 147, 19, 86, 216, 115, 131, 237, 85, 72, 124, 39, 121, 138, 47, 5, 124, 166, 109, 195, 34, 235, 163, 79, 231, 220, 29, 102, 39, 132, 47, 224, 35, 170, 78, 35, 154, 225, 125, 224, 191, 184, 39, 61, 120, 54, 6, 15, 16, 70, 233, 30, 186, 107, 110, 203, 49, 57, 193, 241, 175, 185, 192, 21, 143, 46, 251, 231, 80, 127, 185, 220, 213, 171, 93, 35, 223, 252, 228, 228, 60, 81, 243, 244, 22, 232, 158, 66, 153, 214, 94, 170, 81, 144, 28, 8, 9, 42, 135, 167, 251, 217, 93, 54, 165, 106, 74}, +{187, 209, 177, 124, 32, 108, 242, 169, 214, 144, 144, 220, 167, 215, 190, 132, 246, 167, 78, 19, 137, 211, 168, 144, 189, 182, 140, 187, 125, 28, 250, 168, 227, 161, 251, 236, 12, 201, 171, 246, 166, 180, 248, 233, 190, 196, 75, 83, 222, 120, 241, 234, 39, 243, 227, 160, 183, 143, 204, 103, 163, 152, 252, 0, 244, 193, 170, 172, 77, 122, 99, 94, 38, 154, 240, 61, 27, 208, 37, 210, 186, 174, 36, 99, 140, 118, 151, 50, 106, 114, 5, 211, 63, 209, 63, 167, 131, 39, 9, 52, 57, 79, 144, 226, 111, 70, 101, 66, 147, 194, 38, 135, 152, 186, 240, 35, 50, 157, 144, 88, 150, 90, 55, 157, 152, 18, 161, 110}, +{186, 64, 57, 73, 20, 14, 127, 5, 152, 55, 23, 233, 242, 54, 41, 109, 1, 144, 12, 95, 19, 203, 236, 36, 100, 232, 83, 234, 218, 251, 125, 206, 87, 251, 193, 114, 206, 104, 14, 120, 229, 250, 248, 0, 41, 118, 182, 3, 96, 24, 218, 241, 151, 196, 7, 141, 166, 244, 14, 70, 133, 85, 100, 84, 122, 26, 6, 248, 19, 34, 54, 67, 182, 14, 228, 20, 254, 212, 227, 24, 155, 232, 156, 50, 84, 109, 70, 190, 217, 115, 214, 55, 34, 85, 11, 28, 226, 136, 222, 198, 30, 155, 18, 34, 116, 228, 61, 144, 247, 247, 59, 189, 171, 1, 31, 251, 107, 138, 154, 31, 234, 14, 222, 81, 50, 86, 91, 81}, +{64, 169, 49, 36, 117, 175, 127, 116, 39, 27, 152, 17, 129, 234, 2, 183, 158, 20, 195, 162, 118, 226, 223, 100, 235, 34, 239, 90, 60, 35, 130, 98, 52, 21, 67, 238, 166, 142, 163, 117, 136, 135, 158, 253, 189, 95, 202, 253, 138, 5, 120, 249, 85, 212, 61, 185, 41, 150, 105, 239, 59, 251, 196, 109, 94, 206, 181, 69, 32, 219, 203, 234, 248, 123, 134, 234, 150, 132, 150, 255, 168, 135, 47, 191, 156, 130, 42, 249, 188, 142, 242, 238, 117, 199, 155, 249, 93, 130, 239, 101, 28, 23, 142, 50, 112, 125, 185, 37, 35, 170, 8, 183, 222, 24, 232, 88, 15, 123, 69, 76, 168, 104, 137, 206, 159, 81, 125, 194}, +{131, 166, 144, 71, 55, 178, 106, 166, 154, 9, 73, 186, 115, 240, 130, 211, 111, 69, 100, 58, 46, 132, 37, 57, 155, 49, 228, 99, 50, 24, 43, 140, 254, 233, 31, 184, 214, 41, 183, 105, 167, 99, 219, 221, 99, 203, 248, 160, 200, 28, 55, 167, 148, 198, 148, 229, 239, 83, 170, 147, 21, 216, 74, 211, 40, 254, 211, 138, 247, 199, 170, 207, 145, 185, 201, 126, 94, 48, 58, 254, 145, 0, 176, 172, 12, 133, 49, 186, 52, 11, 204, 114, 179, 180, 221, 137, 6, 144, 75, 215, 205, 95, 41, 141, 83, 45, 254, 191, 149, 154, 107, 248, 137, 247, 159, 58, 15, 63, 35, 131, 202, 78, 136, 103, 14, 101, 18, 155}, +{12, 126, 44, 26, 134, 119, 209, 220, 208, 213, 169, 100, 230, 243, 222, 218, 63, 161, 99, 163, 183, 202, 4, 148, 9, 141, 71, 151, 118, 24, 211, 96, 220, 111, 92, 249, 36, 121, 43, 51, 4, 237, 148, 247, 74, 182, 30, 227, 16, 143, 197, 254, 126, 222, 216, 197, 197, 162, 82, 14, 227, 19, 132, 209, 37, 211, 62, 164, 128, 34, 1, 117, 252, 91, 82, 237, 10, 12, 115, 16, 191, 149, 119, 120, 134, 142, 187, 173, 97, 169, 7, 250, 3, 58, 60, 22, 60, 2, 179, 143, 85, 212, 168, 28, 153, 195, 137, 173, 109, 202, 242, 4, 230, 47, 97, 29, 84, 116, 186, 70, 42, 35, 137, 240, 243, 127, 232, 255}, +{163, 193, 250, 100, 114, 146, 138, 185, 60, 147, 170, 182, 204, 193, 179, 223, 194, 40, 147, 204, 212, 11, 235, 69, 9, 164, 64, 177, 131, 203, 19, 149, 246, 117, 170, 192, 87, 228, 34, 34, 10, 36, 255, 238, 32, 19, 60, 170, 4, 180, 47, 145, 24, 161, 232, 208, 182, 154, 27, 167, 11, 37, 155, 45, 30, 111, 163, 79, 78, 51, 47, 14, 19, 42, 205, 127, 240, 14, 34, 153, 198, 238, 248, 43, 10, 255, 201, 53, 154, 21, 54, 5, 62, 164, 223, 100, 141, 229, 10, 142, 28, 201, 176, 104, 133, 199, 140, 2, 69, 173, 209, 180, 66, 128, 192, 121, 98, 177, 170, 195, 48, 75, 103, 69, 83, 53, 242, 189}, +{157, 7, 40, 8, 172, 81, 214, 247, 249, 75, 190, 106, 225, 254, 17, 173, 52, 144, 46, 207, 56, 23, 175, 113, 22, 175, 206, 166, 181, 107, 112, 96, 235, 189, 23, 27, 15, 229, 132, 19, 173, 209, 77, 221, 115, 39, 53, 199, 211, 16, 145, 125, 25, 80, 90, 86, 147, 214, 76, 121, 132, 197, 146, 121, 100, 235, 245, 82, 47, 118, 94, 109, 107, 17, 27, 213, 84, 229, 33, 142, 138, 83, 108, 188, 216, 40, 124, 178, 8, 105, 186, 113, 61, 44, 189, 191, 179, 45, 158, 135, 93, 61, 180, 6, 196, 221, 218, 191, 155, 186, 211, 29, 147, 187, 95, 186, 80, 116, 162, 66, 143, 19, 3, 231, 167, 55, 80, 65}, +{7, 194, 94, 61, 160, 226, 3, 54, 132, 237, 133, 211, 74, 101, 89, 161, 158, 173, 72, 180, 243, 238, 109, 96, 10, 38, 77, 128, 170, 104, 0, 147, 60, 221, 134, 73, 122, 186, 119, 224, 106, 11, 177, 94, 44, 111, 68, 170, 248, 198, 111, 176, 18, 112, 36, 180, 0, 103, 193, 193, 66, 152, 23, 183, 156, 132, 133, 102, 132, 238, 54, 24, 86, 21, 240, 167, 189, 164, 52, 30, 195, 65, 92, 149, 75, 207, 175, 15, 47, 245, 22, 149, 146, 157, 80, 123, 105, 150, 57, 116, 182, 175, 59, 38, 73, 216, 212, 33, 255, 121, 138, 32, 7, 75, 223, 180, 73, 175, 26, 147, 90, 128, 109, 0, 247, 87, 162, 102}, +{62, 102, 228, 206, 4, 131, 152, 254, 235, 197, 204, 148, 39, 42, 59, 228, 125, 88, 231, 151, 187, 54, 75, 4, 100, 12, 190, 29, 42, 96, 58, 49, 222, 237, 144, 193, 57, 23, 235, 162, 85, 150, 155, 212, 192, 82, 34, 181, 84, 255, 46, 54, 54, 182, 146, 193, 168, 6, 71, 160, 176, 57, 106, 153, 147, 185, 43, 251, 249, 204, 28, 222, 125, 131, 87, 144, 254, 232, 149, 76, 237, 159, 131, 244, 31, 31, 149, 117, 224, 10, 59, 99, 198, 3, 68, 173, 79, 28, 45, 158, 129, 203, 163, 67, 129, 159, 127, 203, 78, 107, 134, 139, 10, 200, 205, 192, 129, 149, 173, 160, 28, 247, 39, 99, 68, 169, 228, 164}, +{187, 238, 156, 11, 253, 8, 235, 217, 237, 200, 126, 77, 126, 168, 21, 60, 90, 94, 100, 49, 106, 129, 193, 39, 10, 162, 167, 179, 53, 155, 120, 241, 123, 43, 248, 144, 192, 200, 26, 250, 13, 175, 196, 229, 241, 74, 106, 184, 97, 29, 108, 165, 139, 188, 36, 190, 105, 120, 143, 102, 124, 45, 68, 195, 47, 37, 106, 39, 136, 136, 245, 236, 162, 35, 172, 90, 195, 152, 74, 241, 115, 146, 56, 82, 43, 201, 224, 4, 107, 28, 109, 200, 206, 160, 66, 117, 0, 113, 13, 103, 11, 79, 171, 139, 219, 60, 107, 83, 134, 72, 29, 115, 116, 248, 36, 198, 119, 228, 224, 4, 240, 112, 101, 198, 20, 239, 105, 253}, +{75, 2, 100, 100, 231, 24, 200, 237, 34, 111, 181, 206, 210, 17, 129, 186, 111, 201, 53, 108, 182, 110, 224, 216, 44, 42, 37, 201, 119, 243, 220, 10, 218, 185, 225, 5, 170, 81, 193, 45, 197, 14, 73, 57, 74, 117, 247, 153, 252, 54, 170, 241, 11, 151, 114, 186, 110, 106, 6, 94, 245, 62, 4, 90, 7, 43, 90, 204, 44, 229, 184, 80, 39, 138, 237, 134, 38, 131, 205, 122, 193, 80, 96, 206, 7, 72, 9, 72, 128, 41, 47, 17, 255, 81, 160, 112, 116, 194, 91, 23, 129, 157, 106, 162, 75, 169, 200, 74, 190, 28, 52, 201, 19, 3, 231, 143, 204, 137, 112, 72, 237, 172, 188, 63, 110, 195, 195, 97}, +{107, 156, 5, 254, 89, 51, 44, 39, 124, 216, 251, 205, 173, 243, 119, 6, 152, 213, 53, 114, 0, 143, 211, 196, 174, 52, 18, 39, 188, 28, 94, 164, 191, 218, 61, 241, 76, 90, 167, 93, 46, 100, 82, 212, 142, 166, 218, 156, 27, 30, 52, 66, 216, 118, 239, 19, 190, 144, 131, 20, 16, 30, 234, 163, 169, 238, 93, 101, 85, 230, 217, 110, 32, 193, 127, 21, 213, 76, 14, 63, 2, 177, 121, 60, 183, 118, 37, 95, 30, 53, 86, 173, 149, 124, 59, 248, 80, 81, 152, 11, 52, 190, 37, 127, 100, 145, 220, 163, 129, 152, 23, 177, 170, 203, 69, 246, 168, 10, 237, 124, 35, 251, 155, 114, 58, 47, 248, 86}, +{163, 199, 93, 192, 5, 186, 162, 242, 211, 210, 160, 141, 181, 133, 86, 35, 195, 111, 49, 165, 181, 206, 41, 144, 196, 20, 231, 71, 194, 127, 214, 109, 8, 52, 68, 148, 8, 0, 134, 195, 59, 213, 106, 161, 217, 102, 198, 152, 125, 254, 57, 230, 40, 211, 114, 34, 225, 237, 123, 21, 72, 217, 210, 130, 158, 51, 170, 129, 210, 57, 189, 40, 255, 252, 141, 91, 228, 47, 18, 188, 132, 200, 77, 220, 98, 171, 218, 39, 218, 196, 183, 152, 97, 59, 176, 220, 161, 201, 215, 46, 114, 201, 79, 129, 6, 133, 178, 47, 228, 94, 145, 171, 13, 71, 119, 1, 221, 227, 131, 91, 235, 87, 8, 253, 185, 114, 61, 96}, +{209, 197, 157, 211, 152, 18, 41, 153, 128, 195, 142, 131, 222, 212, 252, 11, 4, 103, 132, 180, 179, 55, 197, 198, 113, 237, 8, 153, 189, 248, 46, 212, 188, 28, 7, 133, 162, 97, 141, 218, 80, 15, 193, 77, 171, 202, 127, 93, 75, 31, 177, 203, 117, 40, 183, 62, 135, 248, 124, 10, 42, 91, 88, 27, 42, 85, 192, 251, 249, 75, 73, 214, 142, 25, 157, 179, 18, 128, 12, 148, 184, 249, 145, 90, 53, 177, 236, 47, 171, 118, 183, 93, 34, 92, 23, 33, 231, 36, 80, 62, 168, 127, 23, 195, 78, 203, 70, 66, 179, 121, 188, 253, 97, 16, 75, 1, 249, 26, 33, 61, 38, 2, 159, 51, 2, 205, 212, 135}, +{127, 89, 9, 85, 149, 251, 196, 73, 49, 89, 71, 145, 43, 224, 195, 81, 100, 38, 193, 102, 246, 11, 75, 3, 62, 139, 237, 8, 95, 52, 67, 102, 142, 41, 229, 153, 201, 121, 75, 216, 98, 225, 175, 48, 124, 206, 82, 207, 43, 181, 24, 152, 173, 21, 156, 9, 77, 125, 253, 98, 90, 159, 0, 6, 171, 185, 31, 65, 58, 238, 59, 85, 196, 195, 182, 104, 126, 50, 221, 9, 194, 22, 253, 37, 12, 245, 158, 250, 166, 153, 208, 63, 202, 121, 107, 81, 197, 69, 46, 123, 235, 117, 113, 134, 14, 138, 239, 53, 60, 54, 29, 92, 239, 129, 5, 190, 201, 122, 232, 24, 10, 240, 40, 253, 154, 156, 150, 46}, +{115, 221, 240, 157, 167, 16, 74, 137, 94, 165, 83, 184, 133, 92, 224, 28, 144, 173, 225, 92, 147, 99, 189, 118, 14, 16, 94, 81, 214, 128, 115, 206, 87, 248, 6, 151, 34, 166, 17, 224, 207, 60, 70, 178, 131, 221, 117, 152, 170, 71, 137, 72, 91, 107, 108, 89, 35, 107, 172, 5, 2, 234, 68, 186, 203, 49, 178, 70, 215, 138, 102, 22, 139, 191, 12, 31, 242, 250, 82, 97, 158, 88, 20, 173, 165, 110, 205, 6, 190, 49, 86, 18, 151, 241, 134, 149, 237, 121, 244, 54, 216, 236, 92, 240, 122, 64, 21, 104, 208, 19, 187, 7, 212, 185, 108, 199, 161, 35, 201, 83, 222, 119, 27, 200, 13, 28, 89, 19}, +{79, 211, 99, 109, 147, 178, 210, 99, 85, 22, 75, 77, 2, 123, 243, 99, 222, 15, 112, 114, 199, 30, 184, 153, 67, 255, 200, 133, 199, 230, 182, 186, 192, 9, 254, 225, 9, 229, 98, 46, 69, 242, 195, 79, 65, 47, 104, 175, 150, 155, 11, 214, 252, 71, 216, 3, 219, 189, 86, 181, 65, 44, 129, 241, 105, 218, 189, 104, 197, 210, 237, 169, 150, 121, 163, 79, 112, 233, 12, 163, 28, 54, 192, 114, 58, 194, 128, 195, 193, 98, 121, 102, 220, 235, 6, 240, 185, 33, 169, 207, 170, 203, 214, 102, 98, 95, 163, 111, 85, 179, 30, 251, 55, 170, 250, 145, 248, 37, 168, 231, 214, 142, 22, 214, 7, 65, 41, 236}, +{127, 69, 78, 169, 131, 52, 88, 178, 46, 157, 16, 69, 73, 204, 97, 140, 167, 110, 91, 164, 60, 121, 84, 224, 171, 21, 60, 125, 9, 68, 58, 72, 102, 202, 51, 15, 133, 181, 99, 152, 130, 243, 149, 47, 15, 15, 84, 224, 254, 230, 98, 63, 136, 77, 78, 33, 128, 144, 149, 28, 45, 224, 209, 150, 154, 142, 67, 94, 251, 6, 101, 22, 188, 134, 244, 216, 48, 153, 193, 232, 123, 7, 239, 162, 222, 130, 82, 91, 239, 3, 145, 43, 195, 64, 185, 42, 2, 215, 253, 120, 227, 38, 31, 35, 5, 194, 189, 28, 244, 204, 93, 3, 162, 147, 252, 13, 124, 62, 245, 241, 140, 246, 142, 162, 178, 0, 216, 153}, +{85, 93, 69, 30, 206, 175, 142, 92, 243, 233, 155, 248, 251, 195, 149, 46, 130, 21, 12, 84, 5, 119, 83, 179, 45, 231, 110, 122, 122, 223, 201, 35, 138, 1, 167, 171, 57, 230, 97, 238, 82, 111, 117, 141, 246, 136, 16, 54, 98, 166, 121, 249, 64, 196, 221, 211, 132, 61, 200, 179, 63, 166, 222, 210, 3, 36, 87, 134, 187, 21, 28, 50, 149, 25, 215, 28, 130, 67, 92, 52, 232, 57, 214, 26, 148, 174, 126, 255, 48, 141, 96, 168, 255, 252, 225, 88, 143, 182, 146, 6, 174, 171, 232, 18, 134, 94, 156, 155, 175, 119, 163, 206, 235, 189, 60, 78, 147, 111, 110, 44, 104, 54, 193, 119, 158, 208, 211, 215}, +{141, 27, 103, 85, 84, 130, 225, 194, 56, 65, 225, 2, 1, 16, 77, 236, 112, 125, 77, 227, 194, 200, 255, 55, 26, 123, 15, 187, 125, 30, 121, 161, 78, 173, 209, 28, 157, 145, 41, 6, 123, 74, 240, 108, 198, 125, 81, 111, 143, 81, 131, 178, 180, 182, 219, 35, 112, 93, 250, 127, 134, 222, 34, 7, 150, 6, 136, 165, 132, 25, 179, 70, 7, 70, 95, 234, 217, 194, 224, 1, 217, 87, 126, 223, 202, 94, 126, 136, 174, 185, 196, 172, 80, 249, 165, 243, 240, 42, 244, 29, 220, 91, 66, 48, 7, 101, 188, 101, 160, 243, 149, 249, 134, 147, 244, 203, 61, 52, 168, 65, 102, 147, 211, 207, 39, 120, 100, 28}, +{113, 198, 198, 197, 160, 165, 239, 255, 144, 137, 117, 186, 178, 54, 141, 74, 90, 126, 150, 114, 73, 158, 120, 196, 255, 16, 23, 44, 24, 205, 156, 29, 74, 185, 19, 178, 28, 171, 227, 247, 250, 9, 48, 86, 87, 68, 198, 98, 217, 174, 91, 132, 7, 121, 152, 161, 233, 165, 28, 74, 51, 85, 109, 242, 107, 25, 139, 178, 7, 28, 113, 211, 94, 117, 22, 215, 214, 190, 35, 193, 55, 255, 36, 195, 107, 106, 158, 187, 234, 178, 11, 59, 252, 158, 79, 165, 131, 64, 188, 156, 169, 24, 157, 180, 146, 113, 162, 117, 95, 86, 155, 81, 168, 3, 248, 100, 91, 189, 60, 187, 36, 189, 6, 145, 8, 106, 198, 87}, +{75, 226, 1, 226, 223, 116, 167, 14, 51, 84, 56, 227, 82, 21, 248, 64, 21, 24, 165, 122, 87, 167, 38, 215, 243, 6, 224, 167, 46, 202, 48, 97, 103, 47, 203, 49, 40, 18, 194, 52, 251, 217, 137, 247, 135, 213, 170, 34, 218, 18, 15, 61, 113, 70, 4, 23, 170, 207, 169, 223, 249, 73, 3, 194, 65, 81, 210, 153, 238, 66, 126, 185, 54, 127, 215, 252, 40, 148, 91, 29, 26, 225, 105, 79, 156, 251, 253, 253, 130, 68, 127, 226, 46, 169, 189, 13, 14, 65, 183, 40, 217, 239, 249, 160, 118, 127, 254, 104, 188, 115, 215, 128, 245, 255, 75, 126, 180, 150, 113, 94, 180, 178, 33, 46, 237, 117, 77, 61}, +{79, 154, 139, 113, 210, 27, 6, 67, 205, 47, 235, 120, 65, 173, 73, 173, 197, 34, 43, 173, 154, 42, 196, 34, 135, 97, 37, 25, 129, 110, 1, 63, 15, 146, 227, 226, 249, 226, 9, 103, 7, 205, 204, 229, 227, 24, 38, 74, 210, 101, 55, 131, 140, 175, 243, 177, 39, 197, 47, 89, 72, 234, 231, 78, 99, 255, 80, 34, 229, 83, 215, 192, 2, 37, 44, 4, 105, 14, 118, 251, 215, 91, 28, 253, 64, 199, 84, 201, 149, 235, 43, 121, 100, 153, 72, 75, 143, 203, 176, 63, 245, 6, 209, 102, 18, 177, 179, 124, 204, 134, 26, 204, 143, 100, 211, 78, 54, 216, 97, 92, 124, 79, 107, 175, 91, 192, 225, 166}, +{186, 193, 93, 251, 204, 158, 98, 152, 180, 41, 241, 16, 239, 0, 204, 69, 55, 91, 9, 148, 44, 144, 244, 151, 164, 34, 14, 205, 92, 175, 219, 180, 231, 35, 123, 57, 144, 4, 2, 91, 158, 244, 229, 16, 162, 89, 33, 60, 77, 91, 147, 29, 65, 51, 81, 83, 202, 142, 148, 152, 166, 238, 202, 170, 237, 44, 162, 99, 9, 43, 161, 4, 95, 86, 167, 90, 95, 86, 154, 148, 68, 162, 78, 130, 89, 231, 25, 75, 115, 224, 186, 124, 160, 219, 199, 242, 20, 105, 183, 216, 166, 247, 111, 61, 153, 242, 27, 226, 96, 234, 200, 159, 57, 91, 152, 111, 103, 249, 27, 226, 203, 117, 213, 159, 34, 244, 212, 18}, +{183, 127, 146, 232, 66, 242, 39, 229, 131, 164, 119, 186, 109, 88, 69, 215, 69, 153, 228, 254, 0, 187, 101, 42, 110, 129, 41, 53, 199, 116, 215, 140, 225, 87, 110, 32, 128, 217, 156, 149, 220, 185, 14, 73, 163, 92, 82, 130, 55, 244, 233, 66, 155, 125, 112, 107, 109, 216, 1, 181, 84, 71, 232, 56, 6, 88, 108, 135, 34, 138, 111, 242, 114, 108, 42, 214, 163, 123, 248, 200, 23, 174, 222, 62, 155, 151, 225, 81, 102, 187, 2, 130, 74, 5, 79, 157, 237, 134, 215, 86, 215, 143, 252, 33, 175, 35, 194, 42, 199, 170, 147, 199, 4, 60, 24, 21, 64, 178, 87, 66, 214, 170, 0, 154, 5, 115, 136, 7}, +{141, 33, 13, 126, 189, 152, 114, 215, 81, 232, 138, 183, 161, 147, 130, 192, 153, 107, 3, 217, 119, 53, 213, 52, 66, 107, 154, 132, 176, 86, 127, 15, 4, 34, 29, 59, 233, 29, 152, 53, 174, 167, 238, 148, 223, 94, 97, 74, 246, 75, 125, 96, 93, 195, 41, 136, 105, 161, 30, 238, 207, 227, 236, 188, 231, 139, 246, 35, 143, 230, 136, 242, 8, 202, 139, 137, 142, 50, 35, 176, 117, 188, 24, 150, 100, 235, 234, 126, 124, 14, 234, 17, 65, 114, 168, 215, 50, 196, 168, 127, 158, 56, 248, 118, 255, 166, 48, 39, 110, 44, 117, 87, 145, 134, 165, 127, 152, 40, 101, 18, 60, 202, 23, 227, 88, 153, 150, 23}, +{41, 12, 238, 85, 1, 24, 138, 11, 217, 42, 108, 40, 66, 128, 120, 180, 58, 173, 192, 91, 136, 134, 23, 93, 141, 225, 186, 239, 225, 212, 202, 57, 94, 88, 217, 182, 186, 181, 235, 26, 135, 34, 124, 31, 137, 216, 66, 143, 15, 154, 199, 152, 151, 237, 32, 231, 176, 89, 46, 205, 126, 192, 60, 5, 66, 177, 111, 71, 168, 98, 24, 138, 154, 39, 204, 77, 130, 176, 35, 101, 129, 4, 164, 230, 139, 211, 45, 100, 254, 144, 250, 83, 159, 246, 217, 123, 249, 248, 199, 81, 61, 161, 38, 254, 66, 126, 145, 165, 25, 162, 224, 237, 89, 235, 167, 66, 236, 96, 115, 160, 169, 220, 198, 251, 186, 228, 251, 112}, +{89, 217, 16, 76, 171, 111, 150, 87, 226, 151, 86, 51, 110, 158, 61, 131, 243, 194, 33, 81, 232, 126, 172, 96, 7, 68, 7, 177, 11, 217, 7, 1, 20, 46, 44, 93, 183, 207, 146, 20, 212, 119, 111, 243, 47, 108, 125, 110, 219, 3, 19, 151, 86, 33, 103, 2, 176, 132, 57, 192, 254, 160, 254, 70, 80, 76, 106, 210, 57, 0, 233, 88, 35, 40, 100, 183, 135, 230, 146, 201, 11, 192, 138, 13, 169, 139, 102, 21, 189, 19, 135, 50, 39, 91, 114, 28, 158, 24, 84, 82, 207, 237, 75, 7, 19, 122, 238, 214, 181, 200, 31, 90, 3, 7, 242, 143, 127, 131, 226, 248, 130, 201, 0, 203, 19, 54, 125, 159}, +{104, 230, 110, 229, 191, 215, 92, 127, 221, 207, 230, 127, 18, 212, 90, 24, 199, 211, 157, 117, 7, 213, 169, 51, 132, 86, 66, 28, 128, 190, 72, 200, 150, 95, 49, 79, 54, 149, 233, 219, 95, 105, 123, 59, 35, 241, 98, 49, 91, 255, 190, 154, 22, 79, 39, 52, 95, 124, 77, 202, 94, 81, 197, 37, 31, 122, 161, 5, 183, 43, 182, 129, 248, 200, 66, 5, 235, 32, 140, 0, 37, 116, 131, 125, 11, 65, 235, 111, 36, 115, 209, 156, 32, 208, 218, 184, 61, 130, 44, 34, 216, 111, 201, 130, 46, 181, 148, 223, 57, 205, 59, 8, 33, 26, 208, 243, 195, 90, 236, 253, 43, 66, 145, 91, 144, 187, 136, 223}, +{105, 93, 44, 89, 216, 97, 168, 53, 137, 114, 49, 60, 152, 150, 38, 107, 153, 19, 10, 216, 0, 192, 6, 142, 166, 105, 108, 37, 23, 70, 50, 57, 30, 226, 41, 136, 172, 19, 33, 194, 216, 146, 208, 236, 0, 67, 225, 206, 28, 182, 4, 132, 186, 124, 136, 223, 116, 14, 210, 39, 84, 228, 96, 114, 69, 255, 29, 25, 25, 234, 141, 116, 32, 29, 77, 189, 95, 111, 155, 79, 151, 7, 119, 127, 238, 16, 49, 150, 230, 136, 77, 233, 9, 118, 127, 16, 24, 210, 155, 248, 43, 227, 98, 65, 92, 209, 212, 202, 42, 147, 218, 201, 71, 176, 30, 51, 244, 21, 88, 243, 206, 121, 217, 198, 21, 17, 186, 32}, +{17, 13, 54, 107, 144, 168, 54, 238, 193, 177, 200, 11, 161, 29, 197, 36, 44, 47, 56, 82, 232, 54, 110, 34, 15, 233, 54, 107, 251, 242, 104, 180, 224, 219, 229, 104, 86, 158, 191, 178, 81, 80, 158, 136, 189, 5, 55, 149, 106, 18, 190, 77, 1, 74, 81, 62, 99, 52, 170, 155, 149, 77, 110, 135, 139, 121, 85, 45, 168, 117, 96, 168, 89, 220, 86, 119, 38, 185, 133, 36, 49, 3, 226, 122, 52, 98, 30, 66, 201, 229, 113, 114, 44, 54, 111, 60, 33, 5, 38, 67, 218, 92, 94, 136, 61, 238, 151, 73, 229, 149, 61, 33, 104, 37, 191, 23, 237, 199, 38, 128, 185, 46, 27, 26, 55, 97, 95, 202}, +{132, 53, 228, 153, 41, 217, 220, 217, 6, 74, 15, 46, 26, 5, 222, 22, 1, 248, 17, 30, 74, 88, 51, 160, 146, 200, 104, 167, 235, 197, 234, 131, 53, 33, 232, 45, 198, 15, 198, 222, 136, 118, 254, 182, 172, 203, 7, 40, 24, 53, 51, 34, 208, 140, 9, 190, 87, 169, 106, 237, 249, 121, 91, 44, 74, 107, 172, 52, 56, 167, 27, 52, 236, 175, 37, 92, 61, 26, 136, 160, 158, 97, 196, 62, 116, 87, 15, 123, 45, 93, 161, 241, 64, 115, 69, 167, 167, 209, 123, 112, 115, 73, 165, 124, 244, 211, 219, 139, 233, 75, 230, 144, 192, 7, 108, 16, 52, 10, 52, 138, 55, 230, 53, 56, 84, 193, 119, 124}, +{27, 55, 96, 201, 63, 68, 78, 142, 163, 86, 34, 192, 154, 72, 30, 111, 193, 106, 15, 29, 160, 69, 126, 82, 40, 118, 185, 81, 150, 44, 76, 143, 199, 190, 201, 29, 39, 116, 122, 43, 173, 140, 45, 25, 202, 73, 137, 246, 240, 126, 30, 222, 13, 93, 41, 36, 192, 222, 143, 227, 49, 62, 19, 89, 41, 156, 15, 87, 225, 220, 70, 20, 242, 192, 9, 54, 224, 194, 69, 56, 71, 133, 254, 229, 31, 73, 228, 218, 221, 115, 106, 156, 4, 22, 203, 145, 16, 2, 9, 227, 40, 8, 159, 233, 153, 29, 2, 203, 1, 21, 83, 122, 74, 104, 4, 228, 56, 53, 233, 104, 175, 127, 235, 170, 75, 96, 151, 68}, +{5, 147, 2, 147, 205, 111, 34, 75, 99, 115, 5, 87, 142, 205, 200, 127, 17, 108, 228, 15, 153, 69, 102, 128, 160, 47, 227, 70, 223, 104, 165, 83, 7, 129, 49, 113, 229, 24, 224, 19, 156, 250, 93, 31, 196, 202, 70, 127, 135, 24, 141, 159, 184, 9, 107, 16, 98, 125, 70, 15, 161, 103, 201, 188, 168, 253, 9, 188, 104, 120, 226, 125, 252, 152, 211, 177, 88, 139, 114, 180, 243, 238, 216, 13, 65, 85, 237, 178, 235, 36, 35, 48, 234, 240, 60, 46, 211, 148, 255, 14, 7, 40, 214, 168, 60, 111, 118, 113, 136, 181, 220, 44, 221, 23, 201, 49, 186, 96, 36, 30, 181, 75, 102, 18, 193, 154, 83, 180}, +{52, 12, 183, 200, 142, 140, 167, 239, 208, 203, 139, 28, 74, 235, 18, 19, 105, 43, 49, 24, 132, 214, 225, 250, 51, 84, 39, 80, 187, 222, 110, 58, 189, 170, 17, 2, 178, 123, 219, 109, 254, 74, 67, 82, 102, 26, 146, 108, 196, 179, 49, 37, 73, 50, 63, 75, 112, 229, 95, 108, 168, 20, 150, 125, 194, 181, 137, 44, 84, 70, 10, 152, 210, 11, 163, 153, 154, 215, 67, 113, 13, 119, 24, 126, 48, 126, 18, 166, 14, 142, 124, 206, 181, 199, 92, 194, 147, 157, 160, 218, 176, 104, 250, 175, 87, 58, 187, 253, 143, 195, 167, 187, 241, 124, 239, 45, 206, 3, 98, 145, 93, 137, 8, 35, 168, 253, 79, 234}, +{135, 190, 35, 131, 134, 96, 24, 155, 158, 17, 33, 30, 54, 107, 228, 142, 37, 159, 153, 251, 223, 125, 5, 79, 238, 59, 186, 155, 70, 212, 13, 162, 91, 82, 9, 168, 29, 16, 248, 57, 132, 170, 81, 91, 139, 5, 149, 170, 26, 165, 234, 157, 251, 61, 149, 121, 42, 63, 234, 249, 139, 88, 82, 152, 107, 74, 216, 93, 193, 10, 20, 226, 147, 142, 12, 212, 89, 231, 23, 154, 84, 195, 204, 253, 138, 138, 90, 30, 210, 71, 113, 42, 5, 216, 252, 65, 71, 194, 208, 167, 80, 147, 242, 109, 175, 89, 222, 240, 252, 18, 212, 98, 111, 242, 210, 118, 229, 91, 102, 131, 50, 29, 17, 151, 135, 40, 120, 190}, +{124, 223, 40, 177, 231, 102, 95, 186, 251, 172, 233, 146, 224, 251, 114, 207, 14, 168, 118, 149, 19, 212, 44, 171, 148, 168, 95, 111, 181, 133, 132, 99, 182, 167, 4, 51, 130, 133, 224, 7, 193, 34, 183, 166, 232, 109, 146, 154, 115, 136, 183, 20, 112, 98, 19, 44, 234, 211, 42, 88, 215, 251, 213, 151, 118, 147, 188, 88, 147, 183, 215, 216, 180, 219, 60, 200, 64, 180, 63, 133, 49, 89, 6, 184, 184, 40, 76, 88, 46, 109, 244, 113, 91, 176, 41, 19, 117, 213, 219, 151, 223, 153, 104, 237, 197, 19, 94, 106, 118, 90, 233, 0, 25, 22, 30, 220, 197, 10, 21, 55, 198, 140, 27, 193, 135, 25, 141, 95}, +{189, 119, 56, 108, 197, 62, 27, 48, 119, 241, 84, 243, 142, 58, 206, 240, 122, 235, 137, 12, 123, 52, 46, 242, 137, 31, 159, 167, 134, 221, 46, 185, 233, 80, 150, 21, 113, 2, 240, 142, 89, 15, 170, 23, 107, 12, 41, 213, 94, 223, 83, 71, 21, 183, 57, 84, 149, 124, 186, 171, 78, 80, 211, 58, 236, 37, 8, 47, 145, 221, 236, 172, 139, 160, 80, 63, 28, 62, 126, 26, 159, 147, 178, 74, 208, 72, 145, 74, 179, 107, 136, 241, 234, 138, 157, 151, 136, 122, 5, 47, 117, 61, 77, 41, 218, 48, 112, 174, 35, 95, 242, 224, 191, 53, 254, 51, 129, 52, 187, 84, 38, 151, 56, 145, 28, 182, 240, 246}, +{27, 239, 207, 253, 79, 59, 169, 194, 189, 198, 189, 169, 117, 12, 123, 152, 10, 175, 180, 191, 148, 95, 248, 102, 176, 222, 134, 82, 230, 16, 190, 62, 83, 191, 28, 185, 60, 220, 168, 0, 204, 228, 107, 216, 95, 115, 65, 121, 255, 0, 42, 226, 80, 248, 81, 44, 248, 25, 210, 142, 49, 99, 214, 1, 133, 153, 130, 228, 135, 206, 67, 214, 120, 6, 173, 40, 210, 193, 12, 75, 11, 52, 173, 96, 198, 52, 47, 69, 162, 93, 213, 214, 125, 18, 5, 13, 160, 57, 82, 25, 188, 47, 124, 49, 131, 36, 6, 113, 69, 150, 101, 38, 71, 96, 222, 136, 177, 8, 186, 83, 127, 93, 195, 68, 114, 220, 165, 174}, +{118, 121, 57, 192, 245, 178, 178, 179, 117, 89, 214, 94, 20, 139, 190, 86, 97, 154, 20, 187, 175, 33, 199, 200, 195, 149, 122, 160, 150, 243, 177, 120, 84, 21, 140, 110, 208, 71, 247, 236, 57, 186, 157, 200, 75, 157, 204, 220, 184, 115, 123, 108, 15, 104, 118, 206, 233, 211, 253, 92, 112, 183, 40, 91, 165, 81, 121, 40, 107, 213, 206, 165, 45, 24, 47, 12, 247, 3, 93, 183, 8, 104, 179, 126, 226, 106, 232, 146, 8, 109, 29, 162, 0, 30, 122, 243, 24, 197, 173, 118, 60, 74, 48, 235, 217, 236, 142, 228, 32, 9, 111, 9, 60, 35, 52, 48, 105, 42, 42, 40, 134, 64, 22, 182, 104, 241, 161, 169}, +{157, 156, 192, 112, 211, 106, 229, 82, 25, 241, 125, 133, 127, 67, 48, 165, 171, 230, 232, 82, 254, 238, 39, 72, 204, 174, 35, 62, 111, 205, 65, 113, 124, 230, 66, 64, 95, 42, 70, 112, 36, 231, 17, 5, 215, 60, 14, 124, 227, 23, 232, 226, 51, 33, 99, 98, 111, 11, 159, 70, 41, 37, 172, 42, 67, 183, 126, 190, 131, 25, 233, 172, 220, 136, 177, 42, 80, 236, 49, 50, 212, 50, 229, 104, 109, 139, 148, 50, 240, 128, 138, 34, 67, 24, 84, 7, 218, 80, 161, 171, 172, 134, 21, 160, 105, 255, 153, 138, 186, 168, 186, 54, 149, 187, 241, 94, 209, 141, 106, 162, 237, 252, 142, 45, 217, 229, 17, 206}, +{207, 251, 158, 241, 99, 70, 203, 110, 61, 226, 59, 205, 244, 184, 25, 186, 233, 175, 51, 92, 59, 124, 114, 69, 201, 40, 139, 242, 134, 200, 15, 211, 56, 73, 233, 114, 251, 23, 50, 208, 246, 187, 252, 251, 234, 193, 252, 133, 29, 14, 89, 9, 235, 219, 31, 56, 193, 18, 243, 101, 231, 249, 37, 149, 30, 239, 200, 68, 2, 175, 212, 198, 221, 219, 51, 192, 201, 23, 165, 151, 209, 252, 200, 217, 48, 36, 12, 167, 226, 199, 167, 226, 237, 103, 83, 45, 52, 196, 231, 14, 229, 141, 149, 194, 180, 94, 236, 69, 164, 90, 232, 53, 108, 62, 110, 140, 159, 0, 234, 10, 197, 173, 190, 206, 224, 126, 97, 139}, +{90, 102, 161, 140, 184, 207, 21, 181, 231, 180, 19, 105, 181, 165, 107, 54, 22, 203, 227, 22, 158, 244, 178, 42, 34, 11, 116, 170, 53, 18, 152, 56, 16, 214, 15, 160, 135, 114, 43, 17, 55, 155, 192, 190, 147, 30, 8, 59, 193, 23, 95, 77, 141, 59, 31, 113, 97, 24, 232, 75, 35, 72, 222, 38, 169, 173, 110, 143, 115, 110, 148, 1, 174, 83, 215, 227, 65, 217, 184, 48, 157, 49, 151, 62, 245, 53, 234, 42, 18, 58, 207, 30, 156, 62, 91, 17, 89, 75, 154, 227, 237, 131, 0, 28, 190, 73, 43, 174, 0, 8, 99, 242, 187, 21, 85, 175, 248, 0, 164, 154, 204, 131, 111, 60, 213, 133, 255, 99}, +{17, 191, 14, 212, 120, 148, 183, 27, 78, 135, 31, 37, 166, 24, 60, 25, 112, 31, 91, 178, 204, 232, 142, 98, 32, 41, 158, 116, 137, 164, 153, 21, 122, 40, 245, 189, 99, 89, 19, 251, 80, 88, 164, 99, 6, 240, 149, 121, 159, 42, 211, 252, 245, 20, 27, 120, 233, 207, 117, 184, 78, 238, 163, 205, 32, 240, 11, 42, 136, 58, 67, 127, 188, 169, 218, 32, 136, 14, 254, 95, 9, 183, 47, 30, 245, 242, 8, 235, 241, 59, 70, 148, 205, 124, 21, 166, 137, 214, 33, 47, 50, 166, 121, 157, 238, 151, 5, 101, 179, 225, 74, 126, 246, 146, 124, 153, 72, 193, 117, 184, 70, 59, 44, 128, 47, 6, 70, 198}, +{1, 103, 207, 24, 208, 247, 179, 75, 55, 156, 0, 235, 222, 182, 84, 20, 154, 242, 129, 125, 159, 177, 207, 127, 44, 221, 83, 200, 196, 23, 97, 139, 108, 204, 206, 136, 215, 228, 224, 163, 191, 232, 111, 56, 84, 69, 32, 156, 184, 207, 70, 183, 156, 250, 212, 177, 64, 229, 51, 101, 107, 225, 199, 38, 187, 48, 205, 32, 182, 245, 100, 40, 24, 177, 171, 122, 243, 69, 28, 252, 44, 103, 57, 36, 38, 52, 183, 125, 57, 169, 187, 235, 224, 238, 243, 247, 94, 90, 160, 24, 85, 34, 220, 154, 229, 230, 51, 47, 219, 162, 15, 4, 119, 131, 181, 7, 40, 85, 149, 227, 140, 22, 132, 17, 174, 221, 45, 206}, +{28, 94, 68, 10, 48, 214, 218, 70, 214, 63, 252, 89, 68, 25, 111, 54, 93, 159, 166, 175, 121, 120, 36, 208, 246, 57, 185, 6, 238, 132, 133, 196, 104, 16, 189, 205, 77, 230, 255, 23, 158, 197, 131, 147, 30, 39, 252, 232, 115, 99, 144, 209, 187, 128, 103, 126, 146, 120, 41, 166, 60, 108, 159, 255, 93, 89, 205, 71, 68, 149, 113, 51, 110, 112, 82, 201, 244, 199, 208, 116, 2, 145, 38, 45, 237, 83, 236, 143, 80, 83, 249, 219, 186, 147, 121, 32, 19, 118, 126, 130, 180, 123, 81, 4, 1, 64, 176, 249, 66, 170, 35, 142, 166, 85, 78, 133, 221, 34, 51, 252, 215, 81, 191, 174, 57, 95, 32, 12}, +{7, 36, 85, 211, 44, 4, 171, 187, 109, 164, 184, 184, 175, 161, 154, 133, 42, 84, 246, 191, 13, 53, 250, 154, 84, 204, 25, 215, 200, 141, 39, 247, 21, 156, 142, 152, 81, 224, 230, 3, 182, 184, 205, 109, 207, 210, 138, 23, 18, 150, 246, 117, 93, 167, 135, 105, 49, 180, 31, 49, 8, 78, 103, 68, 106, 188, 57, 132, 63, 141, 34, 45, 141, 209, 244, 66, 23, 195, 192, 199, 242, 26, 231, 35, 180, 5, 39, 78, 27, 91, 155, 215, 150, 48, 21, 29, 19, 17, 103, 152, 49, 245, 179, 61, 206, 130, 21, 126, 29, 125, 255, 198, 116, 154, 118, 60, 255, 252, 183, 252, 100, 245, 4, 143, 9, 17, 108, 7}, +{167, 178, 76, 251, 125, 226, 222, 92, 217, 223, 189, 204, 122, 193, 248, 159, 231, 25, 194, 119, 27, 18, 36, 119, 163, 182, 2, 130, 74, 190, 229, 14, 15, 218, 74, 122, 146, 214, 95, 207, 196, 23, 181, 111, 220, 226, 192, 1, 72, 86, 106, 144, 129, 235, 241, 15, 105, 82, 140, 23, 204, 201, 18, 32, 6, 129, 95, 99, 78, 197, 234, 10, 34, 222, 247, 247, 141, 109, 108, 169, 192, 247, 103, 136, 242, 221, 214, 129, 172, 244, 26, 106, 205, 99, 101, 80, 143, 161, 155, 255, 191, 176, 175, 116, 1, 224, 104, 84, 15, 220, 212, 181, 5, 25, 50, 244, 235, 109, 251, 55, 2, 150, 44, 2, 159, 17, 34, 206}, +{116, 254, 228, 155, 37, 104, 172, 22, 54, 195, 195, 126, 141, 12, 91, 30, 162, 229, 231, 146, 56, 203, 65, 189, 176, 110, 30, 77, 195, 21, 164, 110, 7, 187, 80, 12, 51, 66, 17, 244, 148, 246, 104, 128, 98, 242, 44, 27, 249, 167, 245, 42, 157, 85, 112, 212, 115, 207, 34, 172, 26, 91, 124, 156, 48, 46, 190, 217, 115, 234, 25, 79, 93, 80, 13, 184, 113, 35, 188, 75, 99, 1, 107, 34, 168, 108, 247, 173, 72, 63, 205, 77, 171, 3, 42, 246, 81, 122, 231, 136, 161, 100, 1, 43, 21, 252, 79, 9, 222, 217, 29, 116, 246, 106, 234, 6, 83, 50, 10, 231, 240, 253, 108, 14, 30, 108, 174, 9}, +{7, 110, 87, 56, 113, 119, 128, 207, 162, 149, 36, 74, 145, 105, 13, 93, 65, 173, 10, 130, 138, 135, 76, 18, 172, 161, 111, 109, 149, 73, 246, 61, 145, 163, 125, 211, 183, 66, 66, 23, 164, 57, 9, 125, 180, 37, 205, 27, 203, 8, 152, 253, 119, 178, 202, 246, 22, 14, 55, 216, 231, 90, 54, 98, 165, 198, 103, 215, 57, 179, 199, 91, 7, 209, 215, 107, 201, 247, 28, 47, 173, 187, 184, 47, 171, 74, 54, 180, 58, 241, 203, 192, 208, 23, 97, 245, 203, 122, 164, 114, 7, 244, 20, 238, 24, 158, 198, 251, 117, 250, 160, 56, 92, 128, 29, 18, 158, 102, 251, 97, 159, 54, 211, 126, 245, 133, 3, 84}, +{60, 214, 91, 37, 64, 137, 68, 102, 73, 27, 91, 51, 211, 161, 71, 141, 117, 113, 207, 159, 100, 31, 141, 165, 125, 64, 192, 110, 116, 104, 30, 253, 105, 164, 143, 103, 38, 179, 145, 15, 120, 170, 153, 202, 253, 60, 196, 85, 235, 60, 37, 182, 228, 89, 173, 31, 163, 175, 90, 162, 7, 11, 146, 89, 213, 15, 139, 70, 240, 146, 249, 53, 237, 1, 106, 144, 178, 197, 187, 124, 64, 3, 236, 228, 131, 64, 178, 97, 153, 10, 227, 114, 234, 83, 209, 101, 84, 158, 95, 178, 107, 29, 152, 77, 37, 167, 22, 15, 239, 149, 203, 61, 69, 244, 171, 190, 163, 39, 22, 96, 93, 86, 112, 166, 85, 19, 195, 241}, +{102, 122, 227, 149, 134, 46, 6, 210, 101, 0, 58, 139, 50, 85, 130, 116, 87, 110, 142, 20, 30, 96, 192, 62, 138, 90, 165, 153, 80, 188, 109, 52, 203, 18, 174, 72, 212, 201, 67, 209, 70, 41, 167, 141, 140, 85, 197, 247, 87, 140, 213, 224, 62, 0, 207, 180, 145, 218, 191, 209, 15, 92, 27, 65, 219, 115, 111, 94, 47, 157, 236, 122, 249, 80, 35, 246, 215, 187, 230, 211, 39, 215, 86, 173, 95, 167, 74, 89, 127, 99, 162, 125, 177, 245, 180, 27, 78, 7, 16, 245, 245, 68, 126, 236, 146, 242, 201, 11, 97, 49, 117, 182, 47, 170, 230, 60, 30, 188, 148, 138, 197, 224, 87, 193, 107, 71, 41, 0}, +{189, 97, 90, 153, 160, 70, 233, 146, 225, 221, 54, 17, 77, 43, 229, 61, 65, 89, 80, 174, 6, 161, 178, 170, 37, 191, 22, 178, 241, 153, 107, 94, 148, 106, 31, 36, 156, 30, 13, 89, 245, 113, 86, 34, 69, 213, 244, 156, 255, 76, 244, 242, 88, 139, 240, 145, 211, 243, 208, 78, 155, 116, 18, 62, 205, 122, 118, 5, 161, 91, 10, 10, 81, 64, 177, 53, 74, 121, 98, 12, 76, 237, 102, 241, 178, 93, 245, 214, 51, 7, 176, 1, 238, 219, 211, 118, 183, 216, 130, 46, 240, 67, 135, 196, 163, 87, 43, 179, 121, 219, 90, 198, 53, 241, 85, 211, 219, 191, 21, 144, 1, 34, 204, 154, 77, 28, 147, 193}, +{95, 177, 229, 255, 140, 74, 36, 238, 115, 147, 122, 70, 165, 19, 129, 243, 135, 161, 250, 13, 201, 73, 148, 76, 128, 50, 84, 136, 6, 39, 92, 34, 239, 7, 23, 121, 84, 148, 89, 164, 14, 243, 68, 67, 7, 127, 159, 78, 103, 253, 190, 217, 92, 251, 21, 52, 48, 163, 114, 84, 29, 83, 240, 54, 195, 145, 115, 18, 12, 182, 122, 177, 44, 155, 172, 217, 162, 244, 46, 211, 7, 212, 138, 35, 173, 174, 2, 123, 50, 79, 161, 97, 247, 190, 223, 7, 177, 26, 196, 8, 228, 93, 68, 122, 28, 246, 127, 69, 173, 248, 80, 214, 171, 96, 109, 107, 137, 206, 24, 82, 84, 64, 71, 151, 71, 58, 126, 222}, +{76, 191, 203, 87, 54, 161, 76, 45, 168, 208, 144, 92, 122, 9, 211, 228, 106, 161, 98, 224, 72, 17, 101, 132, 53, 245, 196, 139, 165, 247, 43, 146, 85, 18, 68, 165, 99, 93, 73, 25, 100, 108, 80, 47, 57, 161, 75, 86, 55, 172, 206, 190, 141, 183, 67, 107, 81, 115, 188, 157, 39, 16, 39, 254, 210, 166, 50, 196, 202, 227, 1, 112, 106, 208, 13, 37, 124, 238, 207, 26, 60, 199, 36, 22, 48, 189, 213, 11, 39, 193, 231, 224, 130, 45, 110, 122, 187, 100, 32, 9, 202, 23, 78, 33, 72, 61, 179, 194, 132, 221, 147, 46, 57, 137, 178, 154, 203, 139, 73, 212, 5, 113, 64, 98, 56, 59, 145, 215}, +{112, 152, 197, 72, 213, 8, 80, 41, 120, 126, 213, 198, 179, 139, 131, 11, 89, 6, 103, 212, 210, 46, 79, 138, 165, 11, 6, 145, 17, 235, 251, 165, 129, 82, 84, 60, 131, 56, 173, 26, 87, 64, 141, 42, 8, 88, 133, 154, 8, 27, 132, 36, 140, 59, 158, 145, 19, 21, 84, 231, 38, 206, 241, 17, 160, 214, 39, 107, 5, 217, 72, 153, 110, 237, 159, 88, 133, 220, 222, 144, 237, 33, 95, 129, 255, 178, 83, 80, 95, 144, 223, 237, 152, 75, 217, 29, 35, 68, 215, 117, 22, 97, 31, 16, 142, 34, 203, 231, 40, 143, 59, 190, 240, 20, 38, 180, 18, 223, 240, 68, 92, 155, 239, 12, 189, 146, 74, 52}, +{122, 66, 64, 43, 215, 185, 129, 149, 205, 5, 24, 69, 85, 55, 155, 189, 181, 136, 180, 1, 106, 137, 210, 254, 162, 182, 38, 160, 43, 44, 179, 177, 255, 83, 239, 230, 68, 181, 230, 157, 219, 103, 66, 89, 66, 78, 240, 237, 92, 173, 238, 151, 186, 20, 199, 208, 200, 12, 60, 38, 104, 145, 155, 160, 76, 204, 51, 218, 24, 182, 225, 12, 26, 11, 33, 15, 106, 128, 207, 93, 73, 236, 74, 28, 236, 188, 66, 175, 228, 0, 247, 212, 111, 97, 194, 1, 117, 10, 47, 189, 235, 97, 58, 154, 177, 22, 8, 133, 178, 197, 155, 29, 151, 5, 211, 8, 51, 186, 106, 197, 133, 105, 242, 135, 40, 61, 250, 142}, +{122, 66, 64, 43, 215, 185, 129, 149, 205, 5, 24, 69, 85, 55, 155, 189, 181, 136, 180, 1, 106, 137, 210, 254, 162, 182, 38, 160, 43, 44, 179, 177, 255, 83, 239, 230, 68, 181, 230, 157, 219, 103, 66, 89, 66, 78, 240, 237, 92, 173, 238, 151, 186, 20, 199, 208, 200, 12, 60, 38, 104, 145, 155, 160, 76, 204, 51, 218, 24, 182, 225, 12, 26, 11, 33, 15, 106, 128, 207, 93, 73, 236, 74, 28, 236, 188, 66, 175, 228, 0, 247, 212, 111, 97, 194, 1, 117, 10, 47, 189, 235, 97, 58, 154, 177, 22, 8, 133, 178, 197, 155, 29, 151, 5, 211, 8, 51, 186, 106, 197, 133, 105, 242, 135, 40, 61, 250, 142}, +{99, 93, 190, 44, 131, 79, 184, 114, 214, 85, 112, 172, 83, 18, 157, 182, 232, 91, 96, 16, 249, 228, 135, 120, 216, 222, 92, 250, 205, 216, 60, 5, 135, 238, 96, 105, 30, 23, 89, 143, 147, 42, 108, 126, 254, 91, 212, 227, 238, 123, 180, 26, 204, 185, 185, 172, 193, 67, 54, 80, 130, 202, 229, 255, 91, 254, 205, 235, 34, 65, 102, 213, 4, 69, 163, 12, 207, 117, 6, 66, 67, 155, 188, 78, 212, 138, 230, 202, 96, 143, 67, 106, 80, 52, 233, 17, 65, 50, 250, 187, 60, 97, 92, 183, 93, 185, 205, 115, 252, 210, 213, 219, 56, 127, 238, 219, 99, 194, 58, 40, 64, 206, 132, 19, 117, 207, 218, 118}, +{88, 35, 203, 131, 7, 19, 168, 135, 66, 148, 163, 125, 64, 239, 198, 91, 20, 53, 185, 144, 93, 87, 242, 188, 31, 145, 96, 217, 166, 112, 73, 182, 200, 224, 32, 212, 95, 91, 37, 234, 105, 128, 197, 88, 151, 179, 227, 53, 111, 0, 131, 201, 31, 131, 99, 86, 81, 225, 120, 69, 57, 37, 135, 113, 68, 166, 173, 251, 57, 245, 211, 136, 184, 44, 255, 182, 229, 134, 252, 247, 198, 78, 227, 140, 255, 59, 82, 160, 132, 107, 149, 201, 141, 30, 190, 209, 108, 249, 140, 238, 35, 12, 224, 182, 65, 81, 71, 211, 7, 240, 210, 56, 5, 128, 52, 237, 2, 69, 151, 92, 120, 6, 32, 64, 182, 217, 153, 36}, +{85, 99, 129, 44, 112, 127, 65, 230, 232, 229, 247, 59, 51, 43, 142, 72, 19, 85, 239, 63, 67, 205, 229, 25, 121, 93, 64, 113, 170, 242, 120, 180, 198, 76, 243, 174, 230, 187, 105, 162, 150, 75, 15, 254, 224, 188, 140, 232, 182, 94, 81, 161, 153, 83, 127, 52, 50, 155, 51, 106, 68, 251, 253, 127, 99, 35, 248, 15, 10, 17, 183, 107, 101, 210, 18, 60, 134, 110, 236, 67, 127, 173, 132, 224, 235, 20, 155, 181, 34, 154, 52, 231, 240, 176, 219, 217, 242, 147, 131, 236, 11, 255, 162, 204, 146, 96, 132, 33, 39, 12, 112, 5, 251, 9, 7, 228, 230, 140, 86, 210, 190, 77, 20, 0, 120, 176, 32, 223}, +{177, 57, 141, 233, 115, 72, 8, 16, 198, 250, 113, 111, 33, 43, 198, 140, 190, 198, 136, 156, 9, 249, 237, 134, 79, 218, 19, 18, 66, 83, 218, 171, 82, 169, 71, 222, 202, 5, 0, 108, 92, 41, 137, 207, 128, 184, 172, 25, 140, 233, 16, 199, 107, 113, 72, 164, 211, 170, 255, 86, 216, 50, 219, 24, 125, 193, 251, 59, 49, 117, 3, 99, 194, 239, 120, 112, 196, 244, 27, 212, 93, 173, 158, 157, 201, 230, 86, 61, 145, 211, 22, 175, 224, 78, 54, 84, 24, 20, 55, 66, 221, 37, 177, 150, 101, 167, 228, 53, 77, 175, 35, 85, 61, 66, 188, 9, 139, 125, 251, 104, 3, 217, 68, 123, 25, 206, 21, 248}, +{142, 167, 105, 90, 86, 236, 156, 142, 18, 157, 9, 190, 43, 206, 130, 25, 54, 102, 226, 66, 126, 26, 157, 208, 169, 144, 212, 243, 107, 35, 212, 144, 140, 93, 214, 248, 121, 177, 146, 235, 26, 53, 170, 97, 242, 106, 12, 237, 108, 172, 70, 105, 233, 193, 171, 164, 62, 68, 151, 158, 11, 245, 251, 69, 139, 217, 9, 47, 94, 166, 137, 208, 190, 116, 177, 66, 45, 243, 72, 143, 219, 145, 250, 10, 121, 119, 245, 17, 156, 6, 96, 85, 222, 137, 26, 192, 65, 46, 200, 51, 199, 132, 87, 143, 207, 235, 199, 83, 181, 142, 35, 12, 229, 141, 191, 68, 223, 23, 84, 240, 169, 115, 89, 180, 195, 43, 10, 86}, +{68, 133, 222, 95, 34, 27, 26, 1, 140, 80, 222, 104, 243, 27, 188, 105, 134, 44, 184, 77, 105, 38, 159, 53, 213, 34, 5, 225, 10, 12, 99, 65, 224, 141, 4, 131, 127, 144, 197, 130, 47, 91, 72, 171, 92, 59, 206, 188, 239, 54, 236, 204, 91, 250, 4, 62, 208, 208, 70, 153, 12, 155, 63, 43, 155, 34, 22, 160, 174, 162, 202, 66, 102, 142, 245, 67, 28, 199, 93, 205, 178, 50, 239, 254, 202, 109, 251, 90, 65, 247, 204, 63, 55, 217, 161, 22, 87, 67, 186, 116, 16, 0, 2, 158, 212, 52, 153, 168, 163, 31, 189, 101, 229, 246, 125, 198, 79, 128, 244, 123, 11, 38, 147, 90, 207, 58, 16, 7}, +{66, 243, 40, 64, 19, 250, 239, 84, 117, 76, 115, 237, 66, 67, 108, 46, 23, 68, 113, 209, 136, 194, 10, 102, 76, 17, 151, 175, 172, 41, 212, 149, 194, 120, 98, 152, 36, 117, 16, 95, 65, 56, 78, 34, 84, 61, 44, 82, 140, 27, 187, 174, 22, 33, 6, 24, 240, 10, 176, 186, 57, 181, 80, 96, 128, 10, 157, 48, 137, 151, 99, 195, 239, 72, 202, 251, 96, 145, 66, 250, 134, 169, 202, 192, 238, 161, 222, 37, 121, 200, 205, 82, 140, 4, 34, 17, 92, 206, 206, 246, 122, 159, 238, 197, 231, 142, 239, 181, 217, 210, 157, 128, 157, 198, 182, 174, 151, 12, 155, 0, 125, 39, 96, 124, 121, 119, 141, 245}, +{35, 181, 101, 29, 69, 218, 138, 22, 215, 251, 187, 108, 47, 83, 89, 159, 39, 248, 252, 32, 181, 133, 35, 215, 182, 157, 64, 100, 237, 23, 150, 235, 33, 145, 159, 181, 5, 215, 223, 113, 81, 121, 195, 29, 66, 145, 151, 167, 79, 5, 76, 81, 88, 95, 206, 11, 239, 142, 187, 118, 168, 180, 4, 124, 222, 50, 101, 224, 115, 18, 85, 240, 210, 104, 62, 13, 122, 159, 177, 86, 190, 113, 55, 85, 98, 214, 2, 159, 5, 201, 199, 98, 238, 205, 97, 209, 140, 191, 228, 85, 250, 131, 188, 98, 136, 71, 253, 58, 48, 191, 158, 108, 21, 147, 104, 144, 36, 243, 88, 178, 2, 193, 49, 247, 228, 205, 1, 189}, +{91, 233, 241, 71, 40, 246, 120, 85, 168, 178, 230, 109, 74, 30, 42, 51, 203, 170, 4, 222, 18, 254, 4, 53, 119, 60, 24, 197, 195, 241, 44, 104, 23, 155, 77, 104, 132, 130, 23, 117, 231, 119, 205, 69, 149, 17, 203, 134, 28, 124, 194, 135, 110, 134, 49, 73, 136, 196, 72, 46, 228, 68, 138, 8, 45, 28, 32, 37, 85, 183, 15, 94, 233, 193, 15, 116, 46, 173, 39, 114, 43, 35, 77, 75, 34, 192, 213, 57, 91, 74, 243, 3, 25, 101, 213, 28, 232, 233, 78, 47, 160, 87, 113, 218, 75, 169, 198, 103, 161, 7, 20, 69, 200, 234, 86, 13, 102, 192, 135, 221, 235, 95, 212, 144, 246, 82, 23, 34}, +{55, 134, 26, 148, 188, 57, 150, 106, 169, 113, 66, 196, 253, 130, 60, 12, 152, 229, 206, 153, 165, 2, 237, 209, 111, 104, 155, 29, 178, 193, 210, 205, 151, 129, 144, 71, 131, 184, 10, 204, 25, 241, 20, 10, 89, 12, 72, 91, 110, 154, 91, 184, 102, 211, 136, 32, 153, 208, 101, 9, 194, 152, 208, 68, 245, 141, 243, 45, 3, 142, 18, 23, 83, 135, 207, 176, 174, 159, 212, 217, 215, 209, 97, 86, 173, 175, 126, 82, 100, 180, 131, 102, 11, 65, 181, 7, 212, 103, 205, 226, 94, 211, 249, 214, 219, 138, 26, 247, 145, 25, 18, 254, 178, 132, 188, 14, 162, 243, 212, 250, 29, 80, 77, 211, 187, 24, 249, 49}, +{155, 185, 16, 152, 142, 57, 171, 106, 102, 183, 141, 40, 183, 19, 107, 214, 90, 174, 193, 117, 179, 139, 244, 75, 2, 162, 68, 72, 100, 83, 41, 9, 164, 89, 36, 234, 214, 123, 103, 200, 94, 108, 66, 89, 66, 156, 186, 113, 192, 143, 126, 202, 222, 113, 59, 196, 140, 18, 11, 97, 41, 20, 18, 209, 41, 83, 130, 213, 85, 123, 214, 106, 32, 209, 147, 131, 254, 26, 11, 172, 133, 251, 220, 61, 234, 189, 105, 244, 227, 155, 36, 56, 1, 223, 115, 159, 96, 191, 211, 196, 210, 164, 71, 143, 76, 171, 221, 41, 4, 136, 168, 94, 186, 123, 44, 59, 208, 254, 205, 28, 156, 91, 39, 206, 148, 2, 52, 86}, +{53, 117, 62, 214, 137, 73, 25, 230, 59, 95, 11, 151, 204, 168, 114, 235, 179, 251, 57, 116, 127, 150, 173, 110, 120, 119, 26, 0, 215, 82, 233, 76, 107, 63, 12, 251, 138, 144, 41, 179, 158, 255, 34, 214, 189, 38, 18, 122, 197, 3, 24, 63, 254, 235, 142, 219, 166, 28, 173, 224, 91, 165, 63, 242, 231, 247, 98, 0, 206, 191, 26, 119, 222, 247, 138, 243, 241, 218, 155, 23, 154, 168, 82, 207, 215, 165, 18, 33, 164, 87, 0, 30, 78, 168, 122, 27, 22, 145, 197, 220, 27, 254, 51, 127, 249, 39, 60, 154, 65, 102, 129, 155, 179, 63, 78, 80, 105, 35, 183, 196, 94, 21, 177, 208, 201, 157, 240, 26}, +{53, 117, 62, 214, 137, 73, 25, 230, 59, 95, 11, 151, 204, 168, 114, 235, 179, 251, 57, 116, 127, 150, 173, 110, 120, 119, 26, 0, 215, 82, 233, 76, 107, 63, 12, 251, 138, 144, 41, 179, 158, 255, 34, 214, 189, 38, 18, 122, 197, 3, 24, 63, 254, 235, 142, 219, 166, 28, 173, 224, 91, 165, 63, 242, 231, 247, 98, 0, 206, 191, 26, 119, 222, 247, 138, 243, 241, 218, 155, 23, 154, 168, 82, 207, 215, 165, 18, 33, 164, 87, 0, 30, 78, 168, 122, 27, 22, 145, 197, 220, 27, 254, 51, 127, 249, 39, 60, 154, 65, 102, 129, 155, 179, 63, 78, 80, 105, 35, 183, 196, 94, 21, 177, 208, 201, 157, 240, 26}, +{36, 34, 17, 112, 7, 189, 187, 190, 113, 18, 82, 144, 199, 177, 83, 117, 242, 112, 241, 182, 178, 98, 232, 101, 171, 213, 174, 61, 144, 46, 148, 113, 177, 69, 69, 2, 29, 68, 170, 223, 237, 240, 175, 10, 236, 1, 216, 139, 41, 77, 16, 123, 175, 187, 249, 165, 95, 167, 64, 124, 211, 193, 17, 59, 116, 126, 186, 165, 131, 73, 232, 205, 80, 117, 245, 35, 175, 107, 133, 209, 230, 219, 111, 163, 113, 192, 61, 199, 151, 61, 180, 83, 53, 220, 88, 99, 78, 18, 239, 221, 235, 169, 68, 26, 122, 138, 0, 185, 50, 116, 31, 56, 22, 209, 139, 169, 248, 231, 103, 72, 61, 20, 187, 248, 156, 97, 212, 113}, +{195, 19, 234, 157, 135, 133, 79, 122, 37, 166, 218, 128, 59, 246, 143, 128, 127, 74, 109, 184, 179, 73, 206, 249, 66, 1, 186, 43, 172, 220, 97, 183, 127, 138, 253, 76, 55, 175, 255, 129, 80, 138, 236, 24, 255, 182, 89, 247, 194, 187, 57, 167, 129, 192, 56, 42, 41, 129, 10, 242, 253, 21, 53, 219, 59, 101, 152, 149, 231, 33, 205, 164, 218, 63, 16, 95, 199, 131, 169, 142, 78, 64, 1, 249, 60, 166, 35, 71, 163, 107, 46, 233, 108, 109, 172, 191, 156, 11, 196, 223, 75, 40, 60, 111, 230, 220, 71, 75, 88, 108, 185, 5, 220, 40, 225, 104, 222, 91, 112, 226, 212, 44, 211, 134, 114, 114, 173, 237}, +{119, 28, 8, 65, 11, 25, 174, 108, 83, 161, 244, 8, 195, 213, 209, 39, 4, 59, 31, 242, 148, 47, 252, 243, 186, 171, 93, 248, 228, 161, 74, 79, 117, 70, 145, 142, 116, 164, 163, 7, 43, 229, 73, 105, 167, 30, 79, 114, 18, 214, 225, 69, 16, 233, 118, 117, 216, 187, 229, 10, 17, 170, 109, 128, 140, 4, 95, 53, 82, 139, 93, 175, 248, 203, 98, 126, 232, 67, 41, 181, 151, 24, 242, 216, 204, 174, 173, 250, 83, 202, 97, 154, 58, 228, 124, 74, 109, 24, 41, 193, 205, 85, 60, 138, 38, 165, 224, 225, 102, 252, 85, 73, 39, 198, 77, 212, 154, 210, 35, 20, 165, 80, 63, 18, 77, 252, 172, 195}, +{115, 135, 214, 88, 240, 231, 73, 153, 30, 219, 68, 66, 247, 127, 213, 185, 75, 17, 58, 184, 102, 83, 103, 32, 165, 207, 113, 81, 213, 109, 24, 198, 221, 225, 161, 106, 202, 165, 119, 53, 181, 223, 63, 41, 213, 99, 120, 81, 155, 85, 252, 16, 105, 174, 150, 86, 83, 59, 231, 206, 186, 15, 223, 221, 5, 86, 71, 75, 145, 160, 57, 2, 83, 144, 164, 33, 221, 135, 141, 152, 91, 236, 171, 25, 246, 230, 182, 182, 128, 217, 117, 113, 120, 35, 95, 192, 230, 68, 6, 211, 177, 124, 59, 74, 150, 240, 204, 152, 215, 149, 112, 52, 105, 248, 29, 68, 148, 47, 70, 33, 107, 255, 247, 117, 201, 13, 87, 122}, +{113, 165, 13, 39, 118, 199, 189, 22, 20, 247, 25, 204, 176, 224, 85, 42, 83, 65, 90, 57, 186, 197, 48, 188, 94, 198, 170, 82, 232, 140, 33, 239, 247, 240, 192, 157, 29, 181, 241, 237, 172, 72, 79, 225, 87, 92, 135, 211, 253, 253, 213, 77, 98, 2, 140, 19, 172, 217, 158, 0, 222, 151, 166, 157, 52, 188, 186, 19, 192, 118, 107, 97, 187, 232, 134, 241, 67, 249, 198, 8, 203, 22, 69, 232, 102, 158, 45, 43, 160, 95, 160, 108, 151, 145, 204, 115, 44, 74, 147, 101, 37, 71, 182, 28, 82, 199, 129, 15, 188, 211, 227, 167, 150, 102, 183, 73, 230, 38, 45, 187, 0, 15, 93, 41, 10, 86, 100, 16}, +{148, 90, 59, 228, 247, 69, 74, 67, 16, 145, 3, 182, 241, 173, 159, 124, 139, 237, 222, 55, 238, 231, 45, 42, 4, 70, 90, 195, 157, 175, 195, 90, 209, 185, 37, 100, 140, 70, 95, 42, 159, 24, 176, 228, 49, 165, 32, 188, 154, 217, 75, 158, 35, 31, 151, 98, 145, 166, 152, 54, 92, 229, 24, 37, 226, 1, 95, 89, 75, 168, 100, 187, 188, 185, 249, 93, 218, 87, 131, 236, 68, 159, 103, 240, 32, 184, 151, 224, 142, 247, 237, 85, 82, 184, 15, 32, 71, 162, 238, 168, 238, 222, 216, 97, 4, 186, 180, 64, 250, 106, 226, 255, 207, 237, 88, 1, 125, 239, 255, 99, 53, 50, 10, 135, 59, 185, 132, 142}, +{131, 32, 101, 147, 42, 133, 101, 195, 99, 10, 176, 17, 177, 197, 186, 66, 123, 238, 189, 67, 205, 171, 76, 169, 63, 152, 30, 142, 73, 162, 45, 146, 236, 147, 206, 212, 107, 35, 4, 242, 178, 48, 236, 77, 124, 56, 172, 16, 252, 60, 140, 101, 74, 102, 24, 203, 21, 154, 235, 0, 59, 199, 78, 118, 115, 98, 157, 51, 177, 206, 70, 212, 19, 193, 225, 56, 59, 155, 173, 44, 149, 8, 68, 222, 138, 119, 206, 15, 156, 230, 116, 254, 111, 158, 190, 78, 189, 1, 127, 94, 143, 133, 11, 138, 18, 207, 246, 205, 212, 106, 17, 207, 30, 14, 47, 205, 154, 131, 186, 37, 134, 67, 105, 104, 69, 31, 83, 214}, +{148, 184, 51, 223, 40, 30, 208, 34, 13, 49, 22, 202, 29, 90, 243, 184, 250, 243, 197, 203, 227, 222, 92, 54, 223, 38, 117, 27, 166, 225, 73, 219, 79, 20, 55, 70, 25, 110, 125, 176, 168, 200, 145, 63, 215, 21, 58, 206, 86, 227, 95, 174, 200, 129, 88, 215, 140, 195, 234, 118, 13, 81, 95, 116, 64, 188, 172, 13, 82, 141, 73, 252, 226, 140, 7, 193, 254, 128, 122, 117, 121, 250, 102, 124, 254, 216, 157, 91, 57, 111, 235, 220, 196, 221, 9, 186, 255, 116, 184, 65, 206, 42, 147, 40, 108, 75, 63, 114, 185, 0, 108, 135, 206, 132, 237, 148, 87, 210, 29, 207, 245, 97, 90, 101, 94, 131, 175, 118}, +{71, 196, 16, 147, 99, 67, 54, 253, 59, 90, 105, 196, 47, 27, 189, 86, 249, 246, 145, 23, 125, 248, 211, 144, 250, 44, 77, 3, 180, 83, 16, 2, 150, 78, 23, 192, 73, 24, 191, 120, 32, 32, 6, 137, 206, 31, 69, 26, 144, 187, 251, 63, 139, 16, 3, 12, 220, 45, 115, 86, 163, 88, 214, 167, 13, 212, 91, 12, 234, 38, 1, 246, 122, 111, 181, 52, 243, 26, 214, 81, 250, 20, 134, 49, 64, 226, 195, 91, 123, 26, 128, 76, 105, 219, 128, 158, 197, 93, 206, 72, 116, 158, 214, 110, 97, 254, 125, 112, 97, 147, 101, 39, 135, 159, 247, 130, 162, 236, 136, 84, 120, 141, 74, 81, 31, 1, 66, 236}, +{13, 84, 0, 208, 173, 178, 160, 79, 137, 176, 112, 149, 123, 27, 105, 45, 255, 22, 211, 108, 145, 202, 255, 72, 206, 182, 75, 78, 134, 231, 218, 56, 115, 47, 8, 29, 25, 204, 49, 232, 148, 136, 5, 140, 32, 40, 218, 173, 113, 149, 146, 26, 251, 117, 150, 19, 244, 11, 104, 100, 123, 153, 251, 58, 55, 132, 63, 159, 197, 239, 72, 20, 252, 146, 108, 57, 52, 69, 120, 161, 110, 196, 41, 153, 2, 111, 204, 231, 36, 251, 155, 189, 112, 230, 39, 210, 18, 107, 81, 2, 163, 237, 228, 12, 37, 107, 117, 68, 226, 159, 187, 20, 245, 235, 122, 167, 103, 207, 204, 39, 35, 204, 225, 208, 139, 206, 21, 247}, +{193, 68, 136, 58, 82, 126, 221, 154, 179, 121, 124, 44, 51, 173, 61, 109, 46, 186, 102, 85, 0, 235, 204, 158, 150, 95, 77, 16, 168, 39, 205, 83, 38, 130, 162, 69, 58, 205, 215, 137, 117, 45, 107, 190, 232, 121, 143, 46, 187, 148, 7, 199, 182, 230, 117, 19, 62, 74, 151, 25, 86, 222, 186, 120, 216, 65, 21, 9, 165, 199, 11, 175, 225, 24, 112, 131, 78, 45, 135, 138, 97, 72, 108, 239, 175, 162, 40, 245, 65, 122, 226, 89, 225, 70, 194, 154, 247, 226, 46, 119, 63, 102, 151, 135, 70, 1, 112, 31, 77, 22, 221, 162, 247, 243, 208, 6, 224, 154, 100, 15, 21, 17, 7, 127, 93, 9, 159, 79}, +{183, 132, 30, 99, 251, 250, 222, 202, 219, 209, 193, 218, 118, 191, 25, 8, 40, 129, 237, 225, 243, 135, 63, 83, 107, 7, 207, 252, 137, 185, 167, 185, 241, 195, 181, 55, 60, 132, 106, 168, 175, 6, 77, 169, 183, 80, 227, 185, 95, 21, 44, 55, 16, 36, 161, 249, 239, 147, 97, 14, 75, 63, 234, 40, 125, 162, 173, 80, 170, 19, 240, 232, 197, 131, 64, 15, 205, 135, 102, 153, 202, 183, 168, 78, 8, 126, 94, 6, 234, 151, 126, 110, 135, 78, 202, 106, 222, 148, 3, 25, 144, 190, 107, 57, 43, 113, 223, 161, 255, 71, 202, 53, 204, 173, 175, 7, 83, 207, 1, 77, 136, 141, 136, 32, 144, 29, 87, 7}, +{8, 232, 87, 116, 143, 254, 141, 251, 188, 129, 237, 70, 116, 110, 13, 59, 79, 231, 251, 9, 60, 128, 161, 196, 16, 44, 54, 136, 8, 93, 107, 166, 198, 167, 132, 42, 75, 254, 133, 176, 127, 106, 216, 64, 87, 115, 143, 204, 183, 40, 227, 241, 36, 247, 48, 130, 204, 89, 199, 165, 167, 49, 178, 201, 224, 130, 207, 215, 181, 56, 89, 190, 240, 139, 19, 180, 186, 160, 157, 244, 140, 247, 51, 28, 115, 65, 253, 180, 252, 224, 55, 134, 143, 249, 133, 200, 53, 229, 55, 100, 86, 200, 229, 27, 22, 68, 80, 134, 255, 146, 244, 48, 133, 121, 253, 81, 233, 61, 73, 250, 134, 44, 190, 124, 250, 229, 72, 223}, +{20, 220, 85, 5, 11, 224, 13, 254, 10, 39, 227, 73, 188, 5, 226, 97, 149, 8, 246, 237, 126, 85, 215, 203, 106, 88, 15, 148, 222, 59, 29, 240, 204, 176, 133, 115, 5, 29, 215, 179, 241, 24, 227, 48, 103, 12, 8, 48, 234, 35, 171, 154, 39, 169, 37, 235, 80, 254, 9, 10, 147, 48, 173, 127, 252, 118, 78, 130, 126, 4, 109, 199, 85, 115, 63, 152, 175, 113, 178, 62, 66, 27, 12, 77, 140, 164, 140, 18, 248, 210, 92, 192, 165, 252, 63, 20, 160, 182, 74, 206, 49, 78, 104, 83, 196, 159, 13, 138, 75, 101, 150, 167, 198, 112, 189, 66, 73, 132, 216, 246, 234, 179, 214, 88, 126, 248, 161, 197}, +{179, 229, 211, 215, 173, 212, 27, 106, 8, 205, 248, 12, 104, 212, 115, 108, 184, 31, 163, 248, 79, 40, 188, 159, 215, 17, 203, 209, 128, 27, 209, 85, 217, 106, 76, 143, 91, 25, 127, 233, 190, 165, 173, 111, 165, 79, 76, 92, 123, 181, 255, 227, 165, 30, 6, 227, 148, 188, 140, 228, 9, 138, 50, 80, 63, 181, 131, 132, 0, 195, 100, 248, 136, 0, 83, 31, 131, 116, 8, 181, 94, 60, 111, 87, 36, 103, 4, 203, 118, 149, 249, 189, 124, 249, 17, 75, 75, 77, 21, 102, 4, 155, 68, 50, 188, 201, 5, 34, 142, 103, 128, 149, 248, 25, 141, 195, 218, 158, 10, 65, 97, 0, 115, 142, 85, 127, 16, 102}, +{113, 159, 132, 199, 110, 21, 27, 168, 173, 22, 24, 179, 171, 158, 22, 142, 151, 218, 211, 129, 45, 30, 207, 21, 193, 164, 101, 53, 182, 111, 64, 182, 71, 171, 65, 240, 94, 141, 134, 93, 169, 218, 30, 109, 130, 135, 220, 143, 139, 215, 120, 131, 3, 58, 11, 76, 42, 252, 58, 60, 160, 38, 43, 180, 85, 141, 61, 82, 193, 77, 59, 101, 78, 151, 15, 203, 244, 220, 253, 55, 124, 34, 178, 159, 126, 36, 42, 94, 163, 3, 44, 216, 34, 87, 233, 107, 12, 67, 177, 169, 13, 53, 136, 204, 238, 252, 126, 14, 63, 76, 158, 78, 84, 96, 56, 115, 110, 119, 14, 85, 194, 156, 208, 2, 37, 109, 135, 153}, +{187, 56, 204, 234, 57, 148, 105, 53, 232, 169, 10, 171, 232, 45, 170, 15, 223, 167, 215, 61, 240, 129, 167, 119, 153, 141, 211, 219, 167, 176, 80, 109, 99, 217, 62, 124, 127, 110, 38, 54, 108, 205, 161, 25, 85, 18, 119, 251, 132, 115, 94, 83, 9, 115, 246, 77, 242, 217, 173, 172, 56, 52, 38, 250, 100, 202, 22, 36, 8, 97, 207, 101, 46, 46, 28, 47, 176, 116, 126, 25, 149, 125, 197, 94, 193, 34, 213, 0, 150, 190, 12, 202, 10, 6, 65, 55, 128, 49, 147, 159, 99, 157, 150, 97, 188, 170, 107, 98, 219, 26, 230, 60, 209, 3, 125, 255, 248, 148, 20, 117, 86, 241, 175, 69, 185, 252, 184, 34}, +{124, 118, 27, 124, 9, 222, 250, 222, 200, 17, 117, 27, 184, 137, 70, 10, 200, 97, 85, 59, 35, 177, 74, 243, 226, 153, 238, 159, 172, 32, 95, 169, 183, 150, 104, 68, 146, 65, 15, 159, 45, 10, 184, 45, 90, 195, 101, 254, 90, 240, 205, 24, 142, 102, 67, 15, 114, 146, 47, 62, 146, 213, 99, 221, 142, 108, 66, 60, 168, 226, 40, 211, 111, 184, 156, 112, 188, 51, 157, 204, 121, 189, 30, 158, 235, 74, 248, 107, 250, 203, 124, 251, 171, 82, 169, 139, 141, 5, 213, 132, 58, 67, 81, 143, 40, 205, 45, 107, 33, 51, 161, 58, 107, 179, 122, 38, 129, 164, 56, 229, 249, 163, 53, 190, 215, 38, 123, 8}, +{26, 227, 53, 114, 51, 59, 39, 49, 162, 72, 165, 132, 48, 116, 124, 157, 223, 9, 18, 35, 78, 171, 169, 28, 249, 204, 185, 168, 211, 200, 169, 92, 35, 36, 45, 49, 44, 75, 138, 248, 86, 46, 72, 244, 199, 178, 122, 94, 179, 223, 21, 112, 108, 58, 204, 148, 252, 233, 253, 7, 248, 34, 206, 114, 48, 183, 188, 94, 113, 30, 205, 37, 127, 122, 131, 204, 133, 181, 4, 50, 91, 135, 162, 199, 180, 245, 112, 221, 79, 125, 111, 171, 231, 254, 25, 182, 201, 126, 119, 47, 33, 20, 111, 176, 170, 93, 53, 58, 131, 153, 221, 155, 180, 222, 172, 97, 19, 215, 53, 65, 70, 54, 72, 218, 5, 126, 95, 110}, +{203, 60, 73, 159, 230, 140, 65, 140, 243, 196, 136, 83, 189, 227, 236, 70, 231, 68, 95, 62, 206, 27, 174, 27, 84, 21, 172, 75, 28, 144, 221, 174, 198, 170, 74, 118, 89, 43, 131, 1, 119, 132, 130, 111, 88, 153, 172, 119, 56, 255, 70, 204, 187, 214, 37, 255, 175, 142, 177, 129, 78, 211, 194, 197, 219, 143, 88, 240, 29, 158, 249, 45, 241, 173, 141, 29, 84, 18, 25, 56, 235, 194, 113, 228, 53, 212, 44, 49, 77, 133, 57, 233, 247, 128, 52, 226, 72, 10, 205, 106, 175, 9, 118, 234, 222, 240, 240, 55, 188, 163, 223, 19, 179, 254, 41, 6, 15, 98, 55, 185, 154, 139, 148, 217, 41, 1, 121, 122}, +{166, 154, 33, 191, 219, 227, 102, 5, 125, 96, 5, 16, 157, 14, 14, 132, 64, 229, 212, 11, 15, 8, 90, 78, 110, 199, 225, 23, 171, 183, 59, 197, 38, 238, 243, 197, 7, 224, 53, 112, 192, 48, 234, 164, 2, 87, 242, 144, 236, 95, 5, 252, 51, 106, 67, 101, 86, 10, 30, 152, 70, 155, 134, 69, 92, 136, 74, 131, 22, 47, 81, 118, 221, 124, 161, 232, 111, 103, 220, 173, 37, 97, 247, 175, 80, 110, 101, 187, 84, 206, 10, 8, 231, 246, 79, 173, 164, 138, 242, 144, 103, 148, 135, 152, 161, 30, 188, 0, 9, 15, 110, 219, 125, 135, 22, 106, 193, 4, 126, 190, 118, 192, 84, 127, 140, 139, 55, 83}, +{108, 190, 71, 109, 189, 154, 179, 245, 233, 143, 39, 47, 168, 204, 28, 234, 83, 22, 161, 117, 52, 148, 235, 52, 75, 225, 236, 104, 159, 93, 0, 76, 85, 245, 118, 139, 205, 81, 152, 122, 240, 58, 68, 102, 100, 239, 219, 72, 138, 3, 40, 101, 240, 85, 21, 44, 137, 100, 29, 11, 247, 72, 135, 232, 226, 106, 80, 163, 104, 162, 241, 225, 194, 241, 252, 255, 151, 50, 178, 110, 173, 74, 220, 138, 149, 65, 35, 132, 181, 15, 240, 8, 193, 154, 91, 45, 136, 61, 229, 251, 143, 14, 181, 184, 56, 85, 214, 175, 56, 160, 43, 220, 163, 238, 151, 128, 191, 119, 132, 133, 168, 23, 40, 203, 230, 199, 143, 123}, +{200, 160, 70, 11, 114, 110, 188, 171, 76, 149, 180, 194, 12, 167, 196, 8, 130, 9, 89, 235, 46, 233, 83, 154, 63, 162, 251, 220, 216, 104, 10, 139, 77, 54, 197, 126, 78, 216, 62, 17, 200, 180, 216, 0, 187, 162, 15, 144, 99, 57, 168, 192, 179, 233, 206, 227, 231, 167, 9, 27, 203, 152, 192, 89, 62, 83, 185, 175, 171, 195, 147, 94, 203, 169, 203, 97, 100, 70, 178, 86, 242, 28, 45, 111, 58, 89, 166, 146, 191, 171, 71, 246, 31, 57, 227, 152, 201, 174, 251, 181, 119, 23, 35, 25, 247, 191, 37, 107, 32, 224, 87, 211, 12, 108, 243, 123, 40, 124, 19, 91, 196, 195, 12, 215, 101, 113, 217, 60}, +{185, 76, 40, 119, 63, 173, 35, 67, 238, 116, 85, 252, 144, 175, 195, 205, 186, 100, 67, 106, 248, 159, 194, 93, 95, 26, 255, 204, 218, 230, 18, 215, 136, 92, 31, 148, 6, 102, 59, 61, 85, 193, 98, 106, 67, 91, 17, 14, 19, 122, 109, 185, 246, 56, 98, 207, 209, 82, 185, 19, 116, 152, 199, 89, 138, 40, 194, 246, 184, 227, 118, 146, 98, 97, 79, 43, 91, 235, 217, 243, 206, 63, 203, 110, 200, 96, 174, 61, 133, 150, 107, 71, 48, 110, 214, 44, 41, 179, 141, 177, 243, 229, 143, 237, 177, 145, 159, 120, 94, 120, 200, 119, 61, 211, 30, 253, 53, 112, 56, 213, 11, 89, 85, 247, 70, 205, 23, 253}, +{209, 92, 198, 28, 215, 166, 44, 150, 141, 67, 209, 62, 161, 55, 154, 147, 102, 105, 137, 71, 37, 244, 237, 29, 202, 112, 70, 194, 2, 8, 119, 4, 101, 70, 37, 3, 91, 24, 184, 110, 120, 14, 232, 5, 176, 160, 76, 139, 78, 228, 163, 129, 93, 8, 55, 223, 40, 125, 210, 132, 173, 123, 237, 228, 251, 34, 117, 0, 239, 32, 222, 194, 212, 106, 70, 91, 25, 82, 238, 33, 82, 59, 201, 229, 158, 9, 74, 85, 73, 189, 153, 146, 161, 162, 244, 7, 187, 19, 142, 124, 65, 174, 116, 71, 6, 193, 141, 158, 188, 53, 25, 242, 21, 130, 91, 29, 208, 121, 125, 199, 172, 48, 225, 235, 83, 43, 180, 159}, +{12, 55, 16, 204, 219, 140, 136, 232, 2, 4, 181, 56, 73, 207, 102, 89, 210, 3, 78, 160, 24, 146, 60, 181, 165, 44, 10, 183, 21, 176, 143, 18, 46, 127, 67, 56, 80, 28, 200, 252, 32, 234, 13, 99, 220, 149, 212, 85, 74, 104, 46, 223, 196, 154, 66, 96, 51, 142, 177, 30, 34, 196, 205, 63, 65, 150, 46, 34, 65, 41, 112, 194, 8, 103, 37, 142, 114, 157, 165, 191, 37, 228, 127, 51, 174, 212, 81, 177, 5, 204, 249, 78, 226, 212, 225, 148, 44, 148, 153, 21, 135, 120, 95, 98, 116, 2, 123, 227, 33, 17, 251, 252, 231, 226, 159, 204, 61, 164, 3, 95, 219, 172, 13, 191, 44, 67, 12, 117}, +{197, 38, 243, 229, 208, 16, 205, 42, 106, 137, 107, 26, 28, 229, 53, 2, 202, 119, 56, 187, 112, 219, 26, 179, 152, 177, 176, 219, 194, 29, 35, 111, 80, 42, 65, 111, 221, 2, 254, 61, 123, 197, 21, 82, 119, 34, 104, 185, 156, 105, 179, 204, 121, 101, 169, 241, 110, 94, 84, 110, 63, 185, 98, 17, 49, 141, 195, 116, 134, 141, 58, 169, 121, 212, 129, 219, 195, 201, 170, 123, 202, 58, 16, 54, 248, 62, 4, 146, 13, 89, 223, 238, 146, 40, 44, 199, 189, 74, 13, 14, 200, 15, 222, 8, 213, 36, 123, 12, 42, 230, 33, 24, 155, 151, 161, 208, 249, 86, 38, 58, 134, 112, 233, 4, 164, 226, 195, 151}, +{158, 87, 51, 59, 68, 38, 178, 195, 104, 163, 252, 190, 64, 1, 243, 234, 13, 108, 173, 119, 22, 218, 218, 174, 103, 18, 104, 145, 5, 122, 35, 187, 185, 136, 108, 222, 36, 128, 180, 248, 4, 222, 241, 69, 76, 4, 23, 139, 139, 110, 228, 7, 78, 62, 92, 246, 30, 214, 105, 99, 123, 72, 165, 116, 18, 23, 71, 155, 14, 175, 137, 66, 106, 29, 48, 63, 143, 143, 129, 143, 164, 135, 191, 94, 25, 222, 240, 29, 228, 243, 9, 39, 52, 255, 211, 171, 6, 127, 38, 16, 142, 187, 37, 18, 113, 88, 3, 51, 173, 188, 255, 86, 102, 80, 136, 56, 203, 83, 37, 193, 12, 109, 5, 171, 135, 208, 175, 180}, +{128, 134, 183, 40, 112, 229, 120, 89, 148, 149, 217, 235, 3, 214, 205, 114, 16, 49, 132, 207, 60, 140, 99, 26, 225, 249, 78, 193, 195, 94, 47, 17, 205, 115, 153, 244, 203, 205, 204, 179, 163, 255, 181, 60, 180, 245, 34, 157, 81, 211, 43, 19, 234, 194, 5, 158, 192, 198, 200, 25, 124, 220, 217, 153, 164, 40, 255, 169, 241, 28, 214, 222, 125, 211, 173, 246, 37, 100, 207, 102, 193, 154, 71, 151, 81, 75, 216, 12, 42, 33, 126, 2, 12, 156, 95, 230, 168, 139, 233, 193, 214, 199, 115, 151, 24, 246, 20, 250, 57, 16, 17, 40, 247, 34, 51, 92, 182, 111, 130, 197, 191, 245, 229, 177, 217, 28, 143, 206}, +{186, 185, 32, 130, 127, 60, 187, 82, 226, 154, 140, 93, 96, 93, 167, 86, 206, 184, 148, 124, 179, 81, 195, 127, 39, 159, 145, 192, 242, 247, 188, 166, 195, 227, 108, 134, 21, 67, 157, 94, 11, 83, 121, 20, 33, 77, 45, 8, 49, 65, 167, 138, 21, 115, 167, 108, 195, 217, 245, 59, 85, 118, 184, 24, 130, 75, 174, 200, 88, 250, 146, 103, 23, 247, 158, 3, 123, 217, 50, 58, 140, 162, 104, 208, 126, 140, 250, 185, 29, 181, 134, 159, 91, 214, 46, 45, 113, 116, 199, 210, 80, 237, 177, 38, 193, 169, 35, 65, 143, 30, 85, 211, 23, 47, 96, 73, 49, 240, 214, 230, 47, 167, 206, 46, 110, 243, 83, 40}, +{80, 114, 253, 148, 159, 242, 244, 223, 99, 117, 55, 236, 245, 199, 153, 9, 230, 81, 214, 188, 247, 220, 83, 44, 159, 40, 167, 47, 198, 201, 194, 106, 41, 205, 201, 73, 189, 54, 155, 52, 7, 86, 134, 244, 149, 14, 213, 9, 216, 15, 18, 101, 158, 34, 150, 206, 236, 149, 59, 128, 197, 224, 185, 180, 31, 245, 180, 225, 193, 212, 211, 32, 29, 107, 91, 99, 247, 179, 206, 33, 183, 230, 100, 119, 91, 132, 243, 146, 105, 74, 37, 63, 38, 250, 241, 79, 69, 3, 216, 140, 169, 117, 19, 138, 154, 156, 26, 166, 191, 150, 219, 111, 130, 153, 68, 15, 73, 201, 144, 65, 54, 201, 222, 222, 235, 46, 103, 190}, +{66, 78, 94, 14, 12, 100, 249, 214, 98, 243, 63, 28, 83, 105, 61, 8, 47, 13, 171, 44, 124, 158, 93, 43, 205, 157, 2, 185, 136, 191, 105, 160, 45, 183, 254, 213, 159, 212, 213, 237, 214, 128, 180, 34, 144, 174, 132, 142, 231, 50, 27, 11, 140, 73, 78, 132, 37, 1, 34, 251, 40, 133, 24, 87, 204, 161, 145, 27, 108, 109, 186, 150, 164, 6, 221, 29, 205, 134, 135, 129, 2, 54, 139, 11, 157, 75, 187, 188, 253, 20, 12, 92, 128, 134, 96, 63, 48, 110, 94, 200, 45, 186, 102, 79, 221, 210, 0, 102, 247, 191, 58, 42, 130, 248, 107, 126, 36, 61, 250, 50, 6, 5, 156, 136, 217, 179, 140, 12}, +{84, 9, 36, 251, 116, 239, 77, 157, 98, 134, 147, 103, 175, 57, 14, 57, 38, 67, 93, 190, 42, 194, 190, 70, 65, 139, 25, 223, 76, 0, 137, 10, 253, 131, 129, 186, 124, 122, 138, 34, 165, 219, 241, 36, 163, 88, 196, 119, 41, 41, 152, 90, 99, 217, 66, 244, 119, 226, 196, 191, 38, 22, 151, 51, 208, 253, 123, 34, 15, 178, 114, 88, 37, 124, 188, 40, 142, 219, 56, 155, 46, 221, 99, 200, 104, 153, 227, 186, 5, 76, 225, 140, 107, 131, 0, 29, 8, 110, 40, 92, 102, 225, 161, 233, 228, 15, 93, 105, 104, 236, 92, 43, 163, 224, 41, 12, 4, 143, 186, 55, 95, 66, 167, 240, 87, 40, 162, 189}, +{114, 33, 38, 72, 226, 198, 132, 26, 232, 85, 74, 152, 115, 49, 50, 35, 132, 176, 254, 89, 214, 107, 61, 167, 158, 131, 85, 104, 87, 51, 12, 211, 233, 105, 15, 206, 18, 231, 140, 5, 91, 238, 92, 199, 45, 15, 192, 60, 37, 50, 182, 7, 57, 118, 249, 199, 23, 178, 219, 181, 127, 175, 169, 22, 67, 157, 217, 3, 243, 27, 240, 130, 65, 26, 70, 176, 248, 69, 40, 50, 168, 164, 230, 61, 70, 115, 121, 86, 57, 190, 37, 178, 64, 160, 252, 9, 24, 115, 190, 147, 188, 47, 19, 208, 155, 207, 107, 46, 76, 5, 48, 24, 46, 220, 111, 120, 173, 155, 23, 149, 231, 14, 194, 98, 177, 208, 10, 63}, +{115, 6, 13, 243, 156, 5, 23, 149, 169, 209, 221, 50, 137, 222, 162, 140, 125, 42, 249, 54, 27, 199, 223, 187, 148, 12, 49, 150, 248, 104, 180, 189, 216, 52, 175, 233, 99, 157, 160, 54, 245, 50, 166, 60, 49, 42, 80, 1, 134, 200, 208, 22, 169, 58, 169, 31, 105, 192, 21, 175, 136, 60, 29, 191, 226, 80, 11, 44, 112, 91, 108, 138, 160, 15, 126, 108, 225, 251, 127, 92, 177, 209, 88, 164, 207, 43, 113, 126, 65, 217, 68, 137, 45, 84, 232, 226, 222, 229, 86, 74, 162, 112, 55, 8, 215, 140, 54, 17, 246, 165, 13, 23, 244, 90, 97, 46, 186, 213, 149, 54, 56, 215, 223, 76, 121, 235, 231, 132}, +{104, 232, 227, 203, 67, 100, 239, 145, 1, 165, 79, 38, 61, 41, 6, 205, 52, 186, 193, 29, 22, 253, 61, 60, 2, 17, 129, 228, 43, 225, 35, 37, 138, 229, 57, 110, 35, 175, 25, 185, 95, 127, 65, 66, 193, 11, 23, 176, 177, 197, 156, 4, 200, 182, 202, 222, 146, 45, 181, 141, 227, 35, 6, 197, 168, 156, 195, 53, 252, 25, 64, 91, 225, 111, 212, 65, 13, 90, 13, 36, 228, 11, 181, 194, 31, 231, 181, 69, 61, 48, 100, 52, 157, 146, 210, 105, 152, 146, 74, 95, 22, 69, 159, 37, 103, 43, 129, 39, 240, 9, 177, 244, 87, 226, 203, 47, 162, 92, 202, 191, 168, 240, 107, 51, 120, 67, 67, 190}, +{76, 24, 195, 191, 141, 246, 158, 110, 132, 233, 112, 250, 122, 243, 188, 225, 169, 2, 97, 227, 148, 59, 55, 120, 213, 44, 6, 237, 251, 145, 52, 14, 32, 174, 221, 236, 95, 98, 27, 32, 18, 91, 211, 253, 5, 128, 69, 115, 25, 196, 101, 175, 137, 92, 230, 89, 67, 240, 2, 105, 255, 148, 202, 166, 78, 56, 196, 227, 119, 176, 112, 178, 37, 194, 62, 121, 218, 151, 214, 99, 186, 145, 71, 123, 110, 227, 131, 13, 205, 130, 32, 84, 39, 131, 65, 231, 46, 20, 125, 83, 129, 139, 77, 99, 150, 219, 177, 157, 95, 216, 51, 172, 142, 137, 153, 90, 214, 124, 101, 244, 54, 31, 241, 67, 30, 202, 24, 156}, +{181, 197, 43, 144, 190, 150, 155, 164, 5, 70, 60, 192, 1, 139, 242, 12, 9, 38, 156, 165, 133, 212, 199, 228, 248, 118, 58, 122, 86, 191, 176, 23, 33, 29, 101, 246, 97, 8, 42, 40, 109, 251, 188, 192, 102, 90, 189, 145, 248, 68, 202, 92, 207, 41, 143, 200, 242, 56, 86, 236, 185, 91, 229, 47, 167, 48, 184, 17, 167, 205, 179, 124, 165, 217, 169, 95, 132, 56, 26, 195, 68, 137, 164, 75, 98, 96, 172, 237, 198, 63, 228, 149, 99, 57, 166, 110, 207, 47, 205, 43, 72, 17, 46, 5, 41, 36, 28, 169, 62, 94, 132, 166, 215, 199, 220, 158, 218, 181, 33, 156, 29, 84, 192, 84, 200, 231, 16, 45}, +{134, 179, 154, 86, 238, 11, 252, 141, 232, 10, 155, 208, 233, 133, 133, 112, 89, 252, 219, 143, 185, 177, 194, 120, 30, 210, 111, 170, 188, 124, 7, 152, 43, 39, 51, 246, 198, 200, 4, 7, 160, 88, 56, 0, 58, 64, 70, 56, 181, 45, 177, 167, 195, 180, 211, 57, 184, 51, 195, 157, 51, 179, 95, 140, 6, 97, 19, 125, 178, 75, 56, 72, 127, 36, 131, 165, 118, 6, 138, 86, 166, 165, 136, 83, 54, 88, 16, 110, 170, 140, 175, 79, 192, 150, 179, 59, 25, 36, 95, 78, 17, 89, 173, 214, 110, 207, 163, 91, 161, 67, 188, 214, 159, 136, 133, 201, 53, 158, 138, 87, 194, 2, 254, 109, 96, 102, 144, 254}, +{43, 229, 42, 137, 199, 98, 253, 188, 10, 4, 203, 45, 139, 182, 0, 114, 113, 197, 83, 238, 184, 5, 162, 255, 56, 51, 200, 21, 137, 114, 100, 101, 223, 77, 154, 22, 166, 70, 223, 90, 135, 37, 222, 243, 151, 99, 67, 43, 178, 94, 205, 159, 65, 252, 242, 105, 64, 50, 88, 189, 136, 78, 216, 219, 20, 160, 15, 232, 129, 22, 124, 2, 63, 14, 183, 221, 179, 190, 97, 49, 135, 230, 36, 103, 96, 162, 55, 153, 130, 179, 64, 46, 166, 172, 160, 61, 96, 74, 23, 95, 91, 104, 102, 163, 58, 95, 242, 253, 29, 10, 75, 229, 62, 86, 175, 160, 249, 237, 194, 49, 137, 80, 129, 25, 52, 109, 151, 62}, +{54, 199, 121, 21, 59, 45, 254, 193, 45, 100, 236, 239, 129, 16, 90, 233, 175, 194, 63, 62, 102, 55, 71, 4, 231, 125, 199, 168, 68, 214, 244, 237, 177, 107, 148, 28, 126, 74, 27, 208, 222, 221, 253, 154, 87, 162, 10, 176, 159, 136, 108, 61, 151, 24, 82, 148, 123, 175, 200, 111, 79, 169, 74, 92, 3, 206, 81, 1, 15, 52, 62, 244, 158, 181, 155, 29, 217, 66, 111, 128, 143, 218, 59, 106, 253, 185, 69, 247, 28, 12, 220, 223, 192, 29, 33, 223, 29, 144, 147, 13, 37, 216, 144, 184, 11, 108, 135, 207, 217, 99, 102, 248, 255, 189, 37, 151, 193, 208, 159, 105, 74, 228, 35, 200, 208, 139, 125, 3}, +{84, 32, 137, 248, 225, 99, 69, 182, 17, 124, 175, 184, 170, 244, 251, 144, 96, 213, 88, 81, 104, 107, 73, 3, 63, 210, 139, 182, 200, 187, 200, 173, 214, 25, 198, 77, 161, 176, 55, 1, 8, 137, 253, 212, 141, 65, 254, 178, 26, 141, 208, 142, 163, 184, 0, 255, 216, 182, 193, 115, 118, 114, 231, 77, 211, 119, 133, 101, 200, 126, 11, 80, 144, 5, 205, 52, 139, 15, 153, 146, 23, 108, 245, 94, 155, 246, 159, 51, 253, 234, 242, 176, 126, 152, 192, 68, 142, 247, 250, 46, 80, 31, 12, 3, 23, 204, 88, 129, 162, 55, 55, 215, 91, 214, 117, 187, 226, 86, 239, 187, 55, 205, 156, 60, 244, 157, 188, 92}, +{4, 235, 148, 21, 236, 30, 66, 71, 116, 159, 169, 252, 32, 200, 106, 140, 63, 53, 43, 34, 202, 92, 109, 201, 128, 190, 215, 111, 212, 133, 211, 68, 239, 64, 0, 181, 82, 129, 13, 141, 198, 201, 54, 141, 199, 228, 207, 246, 138, 154, 211, 66, 125, 218, 210, 184, 75, 34, 236, 54, 159, 176, 13, 253, 221, 137, 214, 35, 213, 140, 109, 122, 187, 155, 120, 146, 24, 188, 227, 84, 46, 128, 174, 164, 189, 137, 178, 77, 131, 203, 149, 134, 240, 79, 232, 191, 184, 228, 39, 6, 99, 93, 117, 48, 240, 100, 93, 22, 24, 67, 109, 177, 234, 146, 42, 222, 131, 195, 109, 52, 193, 145, 5, 86, 186, 17, 112, 243}, +{89, 23, 83, 151, 3, 74, 110, 84, 146, 79, 161, 5, 67, 98, 11, 108, 65, 43, 231, 196, 163, 145, 250, 229, 164, 9, 190, 211, 189, 47, 80, 66, 46, 217, 159, 140, 59, 42, 205, 119, 111, 181, 226, 50, 146, 229, 56, 143, 20, 106, 161, 255, 83, 90, 33, 72, 18, 104, 179, 235, 109, 244, 220, 140, 125, 42, 86, 108, 32, 98, 165, 49, 133, 139, 162, 112, 167, 119, 39, 142, 200, 34, 54, 159, 65, 7, 231, 9, 150, 52, 188, 163, 11, 57, 16, 72, 101, 216, 175, 118, 90, 191, 105, 44, 169, 143, 181, 57, 230, 207, 214, 70, 50, 6, 154, 184, 192, 130, 240, 67, 157, 172, 85, 97, 160, 108, 235, 74}, +{180, 209, 177, 170, 197, 51, 82, 42, 193, 97, 250, 68, 130, 225, 185, 94, 153, 26, 197, 234, 67, 167, 224, 62, 169, 108, 233, 173, 169, 255, 105, 102, 185, 74, 218, 237, 134, 124, 22, 5, 213, 171, 221, 107, 79, 158, 224, 142, 190, 231, 186, 192, 197, 135, 98, 16, 169, 234, 39, 246, 64, 159, 60, 184, 220, 13, 199, 49, 31, 245, 59, 222, 7, 240, 146, 170, 36, 72, 72, 11, 129, 26, 200, 166, 120, 107, 174, 188, 205, 188, 254, 74, 4, 72, 138, 137, 92, 171, 41, 148, 129, 233, 62, 13, 64, 8, 240, 154, 119, 98, 147, 223, 230, 237, 131, 58, 167, 184, 6, 9, 227, 69, 23, 219, 68, 61, 242, 78}, +{157, 135, 23, 190, 253, 79, 193, 159, 18, 172, 193, 81, 201, 96, 137, 102, 0, 176, 238, 91, 44, 231, 201, 12, 31, 131, 143, 38, 94, 174, 23, 235, 26, 224, 157, 218, 59, 240, 141, 235, 48, 251, 209, 190, 6, 76, 38, 10, 229, 56, 90, 96, 208, 16, 222, 141, 65, 214, 52, 165, 37, 8, 188, 195, 68, 91, 110, 120, 75, 163, 20, 102, 77, 43, 212, 53, 140, 62, 243, 249, 5, 211, 240, 196, 103, 132, 163, 85, 141, 246, 202, 244, 6, 134, 227, 249, 92, 224, 127, 169, 196, 21, 170, 68, 206, 234, 42, 9, 1, 122, 0, 65, 138, 232, 147, 195, 67, 13, 17, 3, 32, 200, 175, 186, 5, 86, 166, 51}, +{48, 34, 20, 9, 175, 250, 173, 89, 150, 2, 229, 230, 151, 83, 179, 117, 64, 21, 177, 101, 8, 95, 39, 221, 192, 43, 254, 105, 209, 225, 185, 108, 183, 116, 200, 84, 150, 85, 167, 163, 225, 213, 242, 140, 41, 155, 28, 78, 5, 107, 227, 93, 40, 172, 36, 111, 179, 125, 224, 34, 3, 104, 128, 243, 16, 85, 190, 195, 179, 26, 101, 51, 230, 235, 159, 225, 174, 51, 147, 151, 144, 3, 192, 37, 193, 229, 53, 78, 27, 146, 215, 83, 117, 23, 49, 115, 65, 108, 3, 44, 130, 22, 15, 40, 94, 250, 70, 190, 141, 190, 43, 193, 247, 111, 181, 53, 75, 247, 84, 176, 78, 58, 111, 108, 105, 239, 59, 254}, +{148, 147, 150, 218, 213, 64, 33, 100, 245, 200, 202, 58, 187, 47, 111, 148, 198, 190, 109, 1, 232, 254, 108, 146, 160, 197, 106, 122, 96, 141, 13, 153, 134, 133, 251, 173, 190, 183, 1, 73, 149, 128, 142, 136, 163, 148, 242, 14, 235, 250, 157, 38, 0, 191, 165, 254, 151, 71, 164, 112, 135, 135, 144, 201, 86, 149, 74, 191, 92, 177, 250, 206, 124, 172, 159, 31, 160, 78, 24, 177, 227, 168, 60, 133, 143, 18, 81, 75, 49, 187, 231, 73, 236, 169, 221, 222, 130, 198, 40, 215, 156, 78, 228, 120, 58, 25, 209, 30, 57, 164, 8, 75, 170, 124, 216, 90, 222, 141, 63, 25, 35, 163, 109, 149, 12, 31, 97, 20}, +{106, 201, 8, 3, 204, 235, 0, 176, 5, 35, 193, 139, 65, 171, 118, 131, 163, 78, 170, 238, 222, 128, 166, 116, 120, 24, 214, 27, 135, 186, 246, 104, 141, 147, 78, 49, 120, 89, 10, 208, 47, 30, 55, 239, 125, 137, 83, 44, 241, 204, 127, 198, 132, 189, 246, 73, 11, 12, 157, 231, 217, 33, 48, 113, 22, 178, 44, 107, 187, 186, 66, 62, 33, 136, 157, 123, 214, 23, 31, 59, 86, 33, 41, 147, 45, 113, 216, 19, 16, 206, 177, 13, 113, 46, 77, 33, 229, 50, 114, 175, 97, 63, 115, 242, 63, 125, 154, 125, 38, 42, 46, 207, 96, 215, 65, 108, 225, 231, 244, 199, 174, 106, 236, 117, 250, 73, 96, 117}, +{37, 180, 202, 62, 91, 86, 210, 74, 168, 235, 218, 112, 113, 95, 78, 90, 45, 204, 92, 98, 107, 80, 5, 246, 27, 28, 216, 61, 228, 251, 16, 103, 67, 147, 139, 90, 104, 128, 153, 62, 103, 120, 200, 61, 243, 132, 206, 254, 41, 170, 45, 9, 213, 237, 231, 120, 209, 29, 14, 249, 158, 30, 102, 5, 178, 100, 88, 77, 2, 75, 130, 49, 75, 184, 152, 82, 118, 150, 2, 192, 196, 51, 97, 131, 181, 45, 159, 147, 67, 211, 159, 142, 148, 17, 171, 188, 129, 232, 249, 150, 71, 200, 131, 36, 57, 183, 29, 136, 83, 87, 153, 237, 64, 51, 78, 66, 186, 52, 158, 223, 92, 144, 254, 244, 181, 90, 226, 123}, +{186, 60, 32, 92, 79, 151, 111, 93, 108, 16, 178, 47, 252, 206, 15, 214, 115, 167, 62, 157, 30, 111, 225, 176, 238, 27, 93, 240, 203, 215, 177, 71, 185, 203, 165, 151, 168, 252, 30, 166, 32, 241, 151, 65, 149, 106, 70, 153, 159, 188, 77, 70, 82, 158, 40, 6, 73, 16, 86, 59, 123, 245, 63, 15, 230, 8, 221, 250, 164, 74, 196, 223, 45, 83, 141, 248, 178, 66, 7, 225, 237, 129, 249, 42, 53, 15, 153, 163, 2, 159, 231, 153, 228, 48, 238, 120, 41, 174, 157, 47, 197, 34, 208, 113, 217, 249, 40, 206, 157, 73, 83, 177, 225, 37, 212, 201, 2, 74, 155, 114, 158, 216, 218, 58, 167, 33, 234, 132}, +{170, 211, 226, 105, 205, 65, 123, 105, 1, 30, 147, 252, 236, 103, 109, 91, 82, 205, 139, 55, 194, 202, 194, 55, 128, 117, 193, 133, 8, 82, 156, 158, 94, 9, 233, 96, 70, 204, 242, 227, 253, 108, 113, 216, 123, 228, 232, 83, 197, 243, 214, 190, 24, 69, 62, 74, 58, 44, 126, 180, 166, 32, 15, 202, 164, 69, 243, 200, 165, 151, 158, 249, 33, 242, 43, 103, 253, 215, 82, 119, 177, 255, 200, 175, 222, 228, 123, 214, 84, 120, 109, 103, 96, 46, 97, 239, 243, 46, 69, 146, 203, 225, 161, 129, 135, 253, 25, 121, 145, 130, 80, 225, 57, 0, 211, 111, 60, 238, 35, 27, 228, 164, 197, 104, 232, 137, 194, 20}, +{72, 176, 33, 157, 112, 154, 235, 224, 180, 17, 8, 213, 224, 83, 141, 191, 63, 173, 38, 168, 183, 50, 222, 198, 196, 167, 85, 144, 223, 176, 171, 79, 52, 124, 91, 39, 225, 192, 210, 15, 77, 136, 207, 225, 169, 68, 53, 123, 206, 210, 139, 29, 242, 204, 124, 121, 75, 229, 114, 192, 162, 110, 150, 196, 238, 158, 87, 136, 26, 124, 253, 116, 244, 32, 201, 223, 26, 217, 197, 154, 30, 54, 51, 33, 229, 48, 42, 109, 166, 118, 4, 15, 214, 227, 110, 228, 42, 230, 98, 74, 31, 25, 142, 222, 6, 194, 172, 45, 62, 36, 216, 239, 138, 140, 24, 42, 103, 3, 11, 26, 68, 89, 177, 109, 185, 16, 135, 49}, +{86, 21, 115, 208, 152, 200, 4, 124, 117, 50, 52, 7, 238, 159, 78, 82, 228, 29, 44, 228, 183, 47, 220, 126, 253, 21, 76, 93, 19, 183, 8, 63, 190, 197, 222, 136, 14, 28, 88, 170, 185, 140, 180, 122, 33, 146, 248, 245, 37, 213, 137, 148, 200, 29, 176, 235, 213, 216, 126, 21, 70, 116, 40, 126, 115, 241, 130, 99, 177, 73, 172, 214, 125, 175, 247, 236, 174, 24, 42, 220, 112, 218, 103, 65, 138, 215, 105, 236, 82, 161, 79, 101, 73, 236, 8, 45, 41, 129, 209, 253, 37, 96, 204, 204, 127, 143, 26, 47, 116, 68, 63, 169, 201, 231, 141, 140, 124, 125, 188, 54, 61, 170, 150, 2, 184, 13, 237, 203}, +{123, 155, 27, 237, 195, 42, 89, 204, 3, 173, 194, 196, 143, 123, 115, 48, 201, 97, 138, 65, 191, 245, 152, 174, 112, 119, 11, 196, 122, 104, 189, 149, 16, 75, 56, 52, 133, 110, 234, 143, 69, 178, 118, 95, 14, 94, 69, 6, 208, 47, 215, 189, 125, 198, 237, 244, 84, 208, 243, 223, 89, 71, 5, 101, 232, 16, 63, 157, 95, 122, 156, 164, 205, 218, 20, 251, 111, 185, 106, 23, 199, 55, 116, 99, 93, 143, 125, 136, 117, 225, 127, 164, 91, 142, 14, 57, 86, 142, 107, 105, 233, 71, 209, 116, 174, 39, 63, 143, 11, 65, 39, 180, 51, 138, 223, 227, 222, 228, 170, 19, 33, 49, 153, 87, 253, 57, 239, 245}, +{38, 249, 216, 216, 228, 106, 205, 11, 0, 111, 228, 189, 43, 250, 145, 235, 217, 131, 81, 150, 45, 172, 171, 103, 244, 81, 168, 4, 19, 201, 157, 58, 64, 140, 78, 214, 180, 72, 255, 55, 126, 162, 63, 97, 172, 70, 108, 54, 29, 246, 203, 103, 18, 212, 105, 220, 202, 95, 63, 102, 150, 7, 196, 64, 180, 46, 27, 122, 110, 12, 63, 242, 45, 223, 108, 255, 251, 164, 0, 86, 116, 249, 0, 251, 245, 83, 150, 33, 107, 190, 114, 238, 67, 132, 214, 132, 146, 51, 180, 206, 126, 49, 163, 203, 124, 224, 212, 64, 195, 149, 115, 105, 20, 47, 34, 146, 72, 191, 106, 216, 85, 151, 95, 119, 179, 128, 187, 187}, +{209, 128, 127, 13, 9, 135, 254, 1, 52, 109, 186, 199, 1, 169, 206, 196, 150, 220, 115, 6, 225, 73, 24, 200, 102, 1, 10, 80, 247, 217, 153, 20, 31, 226, 33, 64, 167, 50, 27, 118, 96, 170, 179, 60, 174, 1, 156, 21, 11, 164, 194, 80, 74, 158, 41, 40, 91, 188, 73, 153, 88, 13, 243, 218, 233, 36, 45, 237, 229, 228, 224, 111, 39, 7, 198, 204, 73, 164, 67, 179, 7, 25, 218, 62, 230, 221, 179, 146, 221, 110, 130, 129, 10, 33, 193, 97, 17, 179, 204, 225, 48, 1, 226, 168, 182, 66, 169, 78, 2, 64, 219, 26, 132, 215, 166, 91, 201, 241, 178, 189, 104, 244, 163, 59, 165, 10, 15, 121}, +{75, 76, 136, 21, 207, 236, 48, 153, 29, 21, 186, 131, 23, 49, 137, 71, 230, 146, 226, 101, 66, 220, 89, 225, 84, 102, 155, 20, 110, 214, 155, 126, 17, 232, 222, 76, 247, 238, 71, 230, 81, 170, 127, 130, 229, 142, 178, 45, 175, 70, 145, 248, 199, 172, 91, 146, 185, 80, 81, 152, 24, 46, 156, 213, 101, 26, 95, 27, 164, 16, 52, 106, 124, 10, 84, 173, 207, 44, 250, 218, 132, 180, 112, 217, 145, 77, 47, 97, 27, 15, 84, 78, 8, 5, 154, 40, 225, 90, 89, 220, 151, 141, 204, 175, 140, 208, 59, 81, 22, 202, 114, 106, 142, 123, 78, 232, 223, 234, 85, 228, 135, 76, 38, 168, 26, 55, 188, 59}, +{33, 251, 1, 227, 171, 148, 177, 166, 7, 76, 106, 39, 173, 81, 167, 203, 29, 169, 51, 166, 37, 6, 199, 28, 126, 210, 196, 113, 75, 9, 246, 155, 161, 48, 65, 90, 173, 173, 178, 190, 147, 104, 107, 170, 165, 120, 227, 81, 234, 75, 187, 210, 227, 242, 160, 181, 1, 31, 36, 96, 225, 253, 142, 101, 120, 76, 79, 167, 113, 206, 231, 150, 212, 74, 146, 26, 181, 17, 78, 193, 236, 209, 116, 236, 89, 171, 106, 180, 76, 98, 54, 157, 231, 230, 200, 23, 92, 200, 84, 217, 100, 128, 95, 90, 254, 22, 223, 75, 65, 33, 41, 85, 101, 209, 121, 140, 219, 237, 197, 105, 164, 37, 217, 151, 195, 229, 34, 183}, +{118, 106, 167, 40, 170, 174, 161, 22, 219, 217, 187, 59, 135, 10, 20, 140, 68, 91, 86, 163, 126, 123, 136, 140, 16, 144, 174, 108, 149, 218, 162, 14, 109, 182, 44, 132, 163, 0, 14, 61, 22, 31, 9, 50, 208, 102, 80, 226, 72, 4, 90, 37, 209, 134, 76, 36, 219, 200, 131, 24, 161, 84, 251, 51, 6, 172, 224, 214, 227, 209, 88, 8, 134, 248, 128, 186, 15, 160, 63, 20, 75, 212, 194, 187, 236, 254, 57, 77, 194, 223, 45, 86, 200, 192, 187, 27, 169, 125, 175, 186, 202, 225, 246, 79, 220, 145, 83, 162, 147, 10, 42, 92, 91, 1, 228, 140, 42, 33, 5, 134, 67, 50, 186, 121, 55, 166, 247, 3}, +{29, 124, 186, 234, 96, 123, 116, 146, 71, 220, 51, 54, 232, 171, 73, 24, 171, 29, 92, 222, 16, 73, 147, 84, 201, 106, 204, 232, 235, 87, 213, 193, 164, 71, 136, 233, 248, 240, 153, 31, 211, 86, 56, 80, 147, 186, 131, 249, 128, 234, 213, 2, 228, 160, 105, 77, 249, 57, 12, 254, 134, 67, 75, 115, 135, 102, 60, 196, 27, 74, 161, 112, 49, 212, 222, 120, 132, 204, 250, 28, 68, 203, 124, 174, 91, 20, 93, 76, 128, 193, 54, 166, 249, 54, 244, 43, 56, 2, 223, 183, 173, 222, 137, 233, 115, 25, 163, 217, 26, 202, 79, 222, 134, 253, 163, 253, 15, 245, 10, 146, 184, 134, 174, 126, 113, 235, 11, 66}, +{110, 73, 64, 47, 90, 87, 49, 193, 33, 188, 223, 164, 141, 50, 63, 20, 240, 208, 156, 56, 147, 223, 166, 215, 142, 167, 177, 113, 248, 51, 138, 71, 138, 226, 233, 171, 76, 105, 13, 75, 159, 53, 121, 202, 149, 35, 177, 214, 104, 18, 68, 240, 120, 88, 39, 241, 167, 94, 129, 226, 9, 25, 52, 9, 143, 174, 143, 202, 64, 45, 142, 115, 243, 195, 242, 36, 95, 138, 4, 75, 5, 151, 122, 40, 66, 102, 11, 161, 53, 161, 185, 128, 36, 195, 222, 191, 229, 29, 53, 57, 178, 82, 65, 113, 224, 176, 30, 211, 189, 179, 172, 253, 218, 116, 57, 229, 218, 29, 234, 81, 210, 0, 157, 174, 155, 143, 135, 58}, +{82, 79, 231, 25, 253, 70, 21, 60, 68, 165, 75, 228, 138, 24, 193, 73, 135, 187, 72, 142, 44, 35, 77, 149, 26, 32, 112, 102, 249, 133, 171, 65, 72, 254, 166, 231, 245, 65, 11, 212, 108, 136, 34, 126, 160, 48, 253, 199, 146, 115, 70, 209, 153, 27, 95, 93, 178, 237, 23, 99, 144, 102, 158, 240, 0, 236, 166, 224, 200, 145, 25, 218, 136, 201, 193, 134, 1, 74, 30, 165, 114, 223, 118, 92, 96, 147, 185, 137, 35, 179, 48, 57, 182, 5, 223, 209, 234, 184, 56, 248, 14, 124, 8, 31, 197, 10, 106, 61, 254, 245, 130, 162, 234, 142, 194, 35, 81, 219, 205, 108, 128, 232, 64, 101, 222, 139, 55, 78}, +{64, 74, 82, 172, 60, 8, 172, 47, 207, 235, 109, 162, 213, 171, 127, 216, 190, 73, 178, 67, 110, 213, 129, 0, 165, 248, 141, 236, 192, 198, 67, 166, 67, 136, 181, 210, 93, 129, 230, 156, 183, 131, 191, 225, 151, 101, 234, 150, 16, 59, 0, 29, 196, 84, 184, 218, 194, 102, 173, 197, 1, 187, 149, 136, 27, 40, 146, 40, 143, 198, 93, 28, 31, 208, 106, 191, 227, 230, 7, 63, 217, 22, 142, 203, 53, 137, 78, 190, 224, 181, 175, 225, 113, 20, 139, 188, 70, 233, 166, 10, 115, 127, 254, 141, 128, 254, 253, 28, 104, 51, 163, 159, 137, 23, 50, 237, 228, 51, 217, 64, 178, 4, 29, 74, 157, 43, 120, 95}, +{1, 49, 153, 0, 12, 222, 131, 234, 243, 152, 48, 247, 41, 159, 199, 186, 247, 208, 213, 91, 126, 47, 191, 41, 112, 15, 39, 77, 216, 61, 65, 226, 103, 30, 139, 46, 113, 27, 171, 123, 138, 86, 241, 235, 169, 137, 105, 86, 177, 53, 67, 48, 88, 12, 228, 54, 74, 91, 93, 60, 66, 11, 139, 78, 174, 56, 245, 17, 90, 53, 225, 187, 122, 205, 221, 227, 94, 10, 17, 1, 12, 62, 133, 81, 182, 145, 207, 201, 187, 160, 108, 30, 248, 176, 2, 77, 250, 89, 222, 46, 130, 159, 231, 54, 155, 144, 132, 16, 171, 200, 181, 100, 180, 114, 177, 39, 156, 249, 127, 145, 142, 70, 227, 209, 18, 169, 147, 241}, +{73, 240, 211, 66, 38, 109, 219, 99, 240, 81, 202, 254, 71, 11, 40, 160, 219, 217, 102, 203, 233, 187, 184, 237, 91, 76, 246, 184, 69, 33, 42, 137, 92, 32, 0, 50, 101, 59, 187, 180, 24, 182, 63, 32, 111, 207, 160, 86, 166, 49, 200, 237, 38, 74, 190, 209, 248, 199, 134, 230, 126, 86, 119, 213, 103, 60, 179, 68, 161, 255, 188, 135, 152, 214, 118, 65, 74, 222, 44, 166, 185, 139, 28, 43, 68, 4, 101, 229, 213, 169, 141, 103, 132, 232, 81, 90, 197, 43, 49, 251, 87, 4, 127, 77, 49, 147, 4, 230, 30, 173, 167, 113, 106, 63, 255, 111, 250, 202, 174, 98, 50, 35, 117, 229, 164, 196, 44, 48}, +{80, 77, 58, 111, 68, 89, 84, 43, 159, 250, 151, 22, 186, 246, 215, 181, 84, 157, 153, 225, 232, 106, 232, 248, 187, 2, 161, 209, 78, 155, 195, 167, 67, 151, 181, 243, 19, 177, 162, 63, 207, 143, 245, 39, 216, 145, 210, 103, 148, 121, 196, 182, 177, 128, 248, 226, 56, 137, 223, 5, 214, 249, 30, 193, 225, 36, 92, 125, 18, 1, 207, 64, 8, 20, 9, 220, 40, 45, 135, 163, 246, 65, 152, 47, 50, 51, 43, 161, 62, 183, 13, 42, 32, 240, 240, 25, 138, 211, 4, 180, 219, 173, 65, 136, 255, 220, 216, 93, 36, 191, 96, 245, 28, 159, 34, 244, 10, 150, 149, 250, 255, 41, 56, 20, 102, 194, 140, 119}, +{150, 67, 216, 26, 243, 172, 15, 172, 28, 215, 189, 40, 187, 160, 53, 155, 188, 250, 173, 172, 60, 240, 249, 222, 191, 246, 112, 220, 85, 121, 94, 18, 96, 190, 137, 58, 166, 164, 102, 72, 192, 44, 45, 204, 10, 25, 173, 112, 117, 184, 237, 1, 16, 106, 4, 112, 159, 173, 221, 28, 173, 232, 90, 95, 219, 62, 240, 170, 160, 12, 42, 47, 249, 237, 136, 114, 231, 196, 200, 249, 246, 134, 127, 88, 121, 209, 52, 234, 168, 185, 218, 160, 152, 175, 122, 54, 3, 111, 29, 201, 150, 246, 237, 127, 79, 42, 147, 229, 133, 206, 70, 100, 100, 71, 199, 57, 172, 107, 115, 166, 84, 242, 239, 244, 39, 209, 184, 246}, +{83, 13, 12, 241, 52, 59, 255, 221, 225, 159, 48, 84, 156, 237, 126, 213, 230, 143, 86, 129, 27, 220, 13, 17, 20, 246, 39, 167, 103, 18, 113, 94, 199, 31, 249, 80, 161, 8, 61, 166, 220, 195, 118, 242, 172, 235, 113, 199, 150, 56, 236, 24, 174, 20, 227, 13, 61, 91, 192, 67, 180, 114, 205, 188, 63, 107, 37, 129, 103, 240, 10, 76, 55, 30, 95, 6, 144, 126, 15, 223, 36, 127, 97, 210, 110, 104, 29, 18, 179, 225, 77, 174, 67, 104, 74, 103, 175, 86, 240, 13, 109, 1, 147, 10, 192, 45, 58, 27, 30, 102, 145, 152, 133, 70, 29, 204, 215, 165, 118, 34, 156, 144, 68, 246, 68, 63, 120, 166}, +{149, 212, 229, 86, 75, 223, 176, 230, 111, 123, 210, 96, 193, 244, 255, 90, 229, 96, 244, 199, 125, 173, 68, 243, 114, 156, 147, 183, 68, 133, 246, 148, 176, 23, 82, 236, 50, 115, 18, 220, 5, 89, 6, 220, 12, 42, 152, 90, 165, 44, 167, 157, 164, 56, 162, 136, 157, 164, 163, 243, 177, 157, 168, 202, 185, 60, 4, 20, 75, 4, 28, 111, 111, 89, 44, 12, 154, 49, 172, 172, 243, 153, 29, 4, 88, 137, 88, 251, 31, 100, 205, 91, 158, 7, 56, 173, 250, 117, 153, 89, 28, 80, 223, 123, 15, 30, 56, 33, 115, 210, 246, 211, 118, 200, 146, 55, 210, 133, 34, 128, 114, 68, 34, 27, 29, 156, 29, 152}, +{2, 186, 243, 193, 58, 250, 209, 204, 98, 108, 213, 21, 154, 219, 56, 212, 19, 88, 202, 78, 240, 37, 50, 235, 129, 112, 190, 250, 62, 123, 124, 124, 60, 79, 109, 211, 122, 217, 159, 118, 18, 201, 41, 152, 155, 174, 91, 214, 32, 10, 51, 57, 56, 40, 143, 100, 8, 78, 239, 89, 4, 99, 9, 172, 45, 213, 202, 46, 250, 200, 151, 86, 77, 79, 174, 122, 56, 153, 170, 2, 151, 98, 18, 40, 244, 186, 164, 185, 231, 221, 162, 75, 228, 194, 130, 175, 42, 186, 53, 125, 219, 28, 26, 113, 91, 183, 164, 119, 94, 90, 56, 157, 49, 54, 95, 7, 180, 8, 18, 84, 50, 163, 216, 172, 80, 231, 248, 222}, +{172, 123, 169, 199, 237, 138, 12, 12, 37, 249, 140, 63, 243, 171, 27, 169, 242, 39, 222, 213, 20, 222, 123, 233, 218, 240, 57, 158, 200, 214, 160, 159, 168, 135, 198, 221, 150, 201, 186, 82, 69, 213, 113, 48, 113, 116, 199, 194, 227, 0, 177, 21, 207, 14, 158, 97, 80, 48, 143, 200, 141, 66, 43, 217, 140, 73, 4, 247, 222, 235, 91, 135, 233, 111, 23, 191, 126, 192, 44, 74, 182, 10, 13, 30, 113, 233, 10, 33, 90, 223, 155, 31, 206, 107, 54, 45, 230, 116, 175, 103, 56, 79, 74, 219, 39, 227, 192, 179, 169, 161, 144, 182, 132, 154, 59, 129, 14, 175, 231, 150, 188, 86, 147, 174, 188, 189, 27, 203}, +{31, 155, 134, 113, 230, 55, 245, 136, 92, 32, 110, 53, 89, 22, 80, 164, 249, 106, 48, 154, 32, 71, 97, 188, 138, 30, 210, 67, 248, 154, 95, 200, 81, 160, 211, 189, 23, 185, 22, 177, 78, 178, 128, 252, 77, 73, 199, 223, 38, 246, 102, 127, 33, 63, 108, 113, 214, 182, 112, 143, 69, 173, 40, 160, 171, 50, 92, 12, 206, 246, 12, 165, 95, 58, 134, 241, 85, 170, 153, 173, 86, 129, 50, 80, 204, 174, 82, 195, 145, 157, 208, 87, 3, 42, 214, 194, 210, 173, 28, 48, 27, 150, 128, 253, 113, 110, 149, 91, 173, 121, 95, 2, 29, 169, 171, 224, 118, 136, 60, 73, 245, 70, 138, 9, 96, 93, 223, 49}, +{150, 146, 122, 141, 152, 201, 117, 232, 147, 74, 49, 65, 79, 196, 233, 101, 174, 61, 157, 195, 155, 246, 51, 87, 131, 33, 5, 187, 51, 223, 148, 24, 44, 41, 143, 26, 225, 242, 141, 228, 34, 70, 88, 35, 154, 129, 111, 65, 25, 195, 142, 10, 60, 43, 43, 53, 135, 255, 59, 37, 48, 110, 110, 2, 42, 12, 51, 59, 247, 0, 137, 205, 188, 1, 147, 164, 76, 140, 160, 16, 57, 54, 201, 42, 160, 150, 181, 176, 203, 219, 246, 124, 84, 78, 82, 68, 94, 122, 48, 91, 87, 70, 7, 168, 248, 57, 148, 73, 42, 124, 94, 237, 85, 18, 49, 41, 55, 104, 227, 77, 7, 166, 197, 199, 131, 177, 60, 148}, +{133, 203, 252, 151, 122, 222, 222, 195, 1, 139, 130, 4, 142, 143, 90, 104, 91, 7, 158, 102, 100, 161, 106, 194, 13, 211, 65, 166, 42, 162, 161, 8, 91, 52, 234, 247, 156, 212, 237, 21, 233, 61, 69, 144, 35, 24, 234, 73, 144, 139, 165, 11, 20, 126, 92, 116, 41, 166, 223, 204, 83, 203, 61, 219, 159, 141, 214, 96, 4, 62, 2, 203, 25, 5, 220, 117, 4, 208, 34, 143, 29, 209, 238, 59, 79, 111, 248, 34, 32, 53, 179, 30, 14, 245, 13, 46, 85, 41, 178, 155, 209, 187, 195, 34, 51, 254, 81, 43, 145, 99, 67, 80, 225, 40, 238, 46, 75, 253, 176, 40, 203, 28, 28, 22, 36, 152, 116, 168}, +{12, 180, 105, 39, 11, 177, 246, 178, 127, 225, 13, 199, 0, 41, 36, 237, 254, 45, 37, 77, 78, 215, 187, 242, 59, 139, 1, 185, 108, 19, 35, 212, 190, 65, 8, 203, 53, 250, 157, 105, 134, 30, 227, 50, 178, 226, 149, 199, 32, 213, 60, 62, 235, 246, 200, 153, 163, 191, 24, 171, 226, 244, 8, 183, 49, 56, 135, 39, 97, 45, 109, 223, 57, 232, 193, 85, 45, 228, 215, 0, 254, 154, 32, 133, 130, 112, 181, 200, 199, 186, 98, 55, 247, 225, 192, 151, 188, 88, 164, 110, 104, 199, 107, 173, 192, 244, 121, 3, 61, 15, 149, 34, 74, 164, 239, 186, 48, 210, 65, 176, 104, 185, 201, 199, 34, 195, 53, 154}, +{55, 254, 210, 182, 155, 85, 145, 170, 244, 72, 130, 56, 107, 148, 135, 36, 171, 150, 40, 180, 132, 20, 59, 98, 64, 29, 188, 147, 220, 1, 108, 221, 217, 165, 88, 15, 7, 159, 22, 235, 27, 142, 124, 33, 135, 216, 80, 243, 122, 81, 53, 223, 121, 237, 32, 209, 214, 180, 233, 148, 126, 53, 17, 136, 152, 83, 246, 208, 242, 185, 136, 65, 106, 127, 165, 177, 48, 174, 142, 124, 41, 130, 222, 45, 234, 140, 50, 111, 146, 139, 28, 170, 148, 102, 255, 200, 91, 2, 226, 188, 7, 231, 238, 3, 220, 229, 75, 96, 254, 161, 108, 51, 170, 246, 90, 144, 68, 41, 231, 190, 4, 226, 10, 148, 93, 195, 150, 255}, +{64, 126, 151, 67, 75, 169, 186, 35, 29, 152, 140, 53, 190, 21, 33, 195, 187, 219, 78, 163, 138, 41, 142, 171, 158, 9, 47, 232, 224, 116, 69, 102, 212, 73, 101, 81, 81, 77, 53, 103, 69, 201, 46, 236, 81, 131, 58, 197, 83, 7, 253, 26, 103, 57, 122, 44, 104, 59, 97, 134, 201, 182, 48, 12, 45, 72, 142, 98, 4, 108, 185, 254, 137, 50, 154, 105, 245, 192, 110, 212, 187, 20, 8, 82, 124, 148, 243, 108, 120, 145, 50, 142, 191, 4, 36, 115, 15, 27, 125, 98, 174, 144, 146, 41, 129, 11, 48, 23, 71, 47, 34, 211, 62, 40, 125, 75, 225, 217, 96, 170, 172, 211, 70, 49, 92, 107, 121, 85}, +{136, 143, 127, 73, 252, 255, 41, 67, 240, 148, 120, 9, 66, 59, 44, 227, 111, 155, 249, 148, 28, 44, 18, 191, 123, 219, 199, 143, 202, 182, 21, 210, 74, 67, 40, 99, 254, 200, 120, 176, 158, 32, 115, 215, 165, 10, 52, 85, 15, 85, 212, 130, 38, 110, 1, 105, 242, 249, 2, 132, 224, 189, 101, 117, 57, 155, 156, 254, 56, 224, 28, 137, 100, 44, 230, 144, 19, 152, 236, 240, 30, 170, 45, 213, 211, 139, 117, 245, 126, 118, 152, 159, 130, 236, 116, 80, 157, 164, 5, 46, 13, 64, 11, 5, 172, 82, 243, 2, 210, 138, 87, 250, 215, 218, 207, 166, 126, 222, 111, 82, 240, 203, 252, 184, 231, 45, 77, 51}, +{24, 55, 200, 158, 121, 238, 33, 253, 136, 104, 197, 80, 50, 238, 254, 183, 254, 247, 224, 232, 93, 179, 241, 218, 199, 221, 214, 219, 95, 6, 66, 128, 170, 30, 31, 49, 119, 180, 168, 67, 202, 90, 49, 196, 135, 23, 194, 87, 234, 190, 225, 254, 28, 216, 232, 125, 112, 169, 166, 115, 22, 31, 128, 83, 160, 4, 86, 177, 238, 151, 247, 123, 62, 104, 38, 82, 134, 174, 231, 148, 24, 114, 136, 61, 156, 133, 90, 196, 3, 31, 40, 220, 13, 76, 64, 182, 78, 91, 133, 231, 155, 162, 94, 105, 232, 19, 145, 233, 214, 228, 48, 32, 56, 176, 28, 218, 175, 56, 245, 0, 213, 15, 54, 6, 202, 119, 160, 160}, +{23, 208, 227, 170, 116, 43, 62, 232, 127, 24, 130, 164, 107, 64, 72, 222, 42, 167, 13, 63, 85, 75, 45, 44, 238, 225, 104, 138, 9, 208, 138, 177, 203, 196, 51, 78, 94, 215, 149, 174, 180, 72, 128, 8, 43, 121, 153, 22, 63, 147, 180, 186, 145, 119, 47, 72, 0, 159, 100, 29, 233, 128, 79, 120, 229, 161, 211, 157, 37, 219, 38, 214, 36, 21, 194, 27, 129, 141, 31, 39, 145, 177, 125, 223, 249, 24, 5, 52, 137, 221, 26, 198, 16, 239, 67, 144, 155, 135, 166, 206, 184, 196, 43, 91, 150, 142, 186, 249, 209, 213, 213, 227, 53, 146, 174, 24, 215, 133, 55, 61, 111, 239, 219, 4, 10, 44, 37, 136}, +{203, 91, 43, 35, 34, 100, 70, 160, 84, 237, 3, 19, 32, 22, 4, 155, 231, 16, 39, 63, 200, 133, 117, 134, 196, 23, 187, 94, 210, 176, 109, 134, 147, 185, 170, 177, 95, 103, 108, 155, 151, 74, 193, 181, 17, 106, 140, 45, 99, 10, 176, 208, 162, 87, 222, 39, 118, 62, 125, 168, 33, 210, 10, 36, 39, 122, 70, 46, 125, 142, 87, 213, 106, 190, 78, 134, 153, 144, 224, 106, 144, 67, 137, 170, 144, 251, 32, 240, 16, 157, 154, 55, 62, 146, 24, 81, 224, 198, 51, 25, 88, 254, 74, 131, 190, 159, 195, 81, 145, 183, 192, 107, 53, 243, 240, 254, 221, 193, 92, 204, 8, 37, 241, 162, 225, 147, 236, 94}, +{93, 134, 146, 62, 231, 201, 222, 22, 58, 88, 207, 209, 205, 30, 29, 45, 154, 152, 168, 37, 212, 235, 45, 81, 161, 54, 59, 87, 177, 115, 11, 175, 100, 64, 41, 210, 188, 113, 121, 8, 214, 88, 141, 240, 127, 90, 60, 113, 124, 203, 11, 253, 104, 139, 197, 127, 7, 234, 64, 16, 73, 117, 158, 153, 143, 121, 14, 182, 175, 49, 184, 137, 126, 84, 3, 172, 146, 65, 78, 166, 252, 52, 152, 72, 125, 155, 213, 68, 115, 191, 105, 230, 31, 2, 32, 164, 51, 200, 32, 99, 106, 219, 123, 189, 143, 215, 88, 188, 165, 182, 64, 204, 239, 216, 86, 84, 170, 55, 214, 56, 142, 87, 176, 97, 110, 175, 243, 71}, +{158, 51, 225, 8, 51, 156, 227, 222, 58, 126, 49, 46, 155, 253, 104, 154, 13, 96, 145, 248, 147, 218, 198, 8, 134, 128, 107, 71, 219, 114, 133, 40, 123, 176, 69, 106, 233, 23, 192, 15, 145, 164, 20, 3, 202, 108, 88, 50, 251, 51, 120, 110, 40, 93, 81, 142, 238, 130, 84, 135, 178, 251, 115, 79, 84, 233, 123, 195, 116, 86, 132, 10, 109, 135, 98, 106, 145, 53, 116, 62, 191, 178, 107, 144, 7, 141, 23, 241, 21, 253, 103, 209, 252, 20, 254, 14, 98, 41, 226, 162, 116, 130, 210, 119, 60, 225, 194, 51, 86, 238, 0, 64, 144, 163, 50, 211, 19, 62, 245, 116, 92, 32, 92, 42, 159, 195, 207, 147}, +{195, 48, 174, 152, 112, 27, 16, 21, 104, 149, 167, 202, 81, 113, 0, 247, 69, 195, 15, 93, 208, 52, 83, 162, 197, 22, 0, 195, 4, 166, 114, 116, 165, 93, 142, 25, 136, 234, 205, 160, 34, 155, 50, 150, 67, 149, 35, 120, 5, 231, 145, 230, 34, 214, 103, 190, 77, 172, 24, 0, 135, 132, 96, 137, 198, 163, 24, 251, 214, 68, 53, 82, 254, 198, 129, 153, 125, 124, 18, 135, 148, 205, 154, 120, 254, 112, 3, 224, 242, 117, 190, 193, 28, 116, 11, 77, 79, 247, 29, 133, 80, 135, 123, 66, 154, 133, 159, 211, 98, 28, 138, 65, 118, 52, 252, 37, 176, 36, 126, 114, 170, 148, 110, 32, 239, 235, 132, 199}, +{99, 144, 194, 53, 201, 30, 129, 89, 38, 150, 45, 237, 215, 89, 83, 2, 250, 33, 206, 72, 201, 10, 21, 232, 230, 5, 78, 33, 52, 75, 178, 228, 148, 120, 54, 165, 136, 155, 67, 164, 37, 242, 135, 6, 58, 22, 139, 248, 140, 47, 66, 228, 191, 16, 78, 116, 77, 132, 180, 115, 1, 168, 249, 250, 53, 32, 209, 76, 172, 244, 88, 82, 227, 207, 191, 196, 37, 33, 228, 113, 151, 84, 101, 60, 35, 34, 163, 187, 106, 231, 251, 102, 48, 52, 123, 174, 235, 160, 148, 126, 243, 103, 66, 3, 97, 75, 167, 49, 228, 238, 0, 143, 204, 46, 230, 104, 84, 31, 94, 97, 111, 126, 41, 232, 136, 229, 181, 239}, +{114, 75, 232, 228, 245, 220, 170, 17, 13, 245, 54, 198, 138, 108, 33, 107, 60, 234, 95, 187, 195, 5, 91, 163, 189, 167, 250, 121, 16, 246, 238, 212, 158, 200, 82, 171, 46, 57, 147, 244, 136, 213, 243, 63, 57, 170, 229, 172, 233, 179, 236, 214, 226, 246, 2, 163, 21, 45, 216, 175, 116, 67, 12, 178, 188, 92, 230, 252, 92, 28, 171, 159, 98, 233, 233, 159, 23, 109, 230, 4, 104, 144, 105, 96, 132, 108, 157, 181, 121, 229, 160, 109, 208, 64, 224, 148, 132, 157, 200, 68, 21, 227, 30, 94, 218, 202, 90, 122, 46, 32, 200, 238, 137, 91, 130, 255, 166, 178, 1, 193, 157, 196, 53, 68, 176, 82, 179, 185}, +{75, 241, 181, 97, 176, 156, 21, 16, 107, 9, 228, 83, 174, 70, 68, 195, 138, 55, 88, 52, 108, 95, 64, 171, 157, 92, 25, 115, 63, 55, 185, 11, 61, 185, 78, 12, 128, 243, 54, 127, 90, 22, 4, 119, 38, 102, 59, 22, 240, 10, 79, 247, 235, 252, 49, 45, 135, 84, 207, 190, 198, 88, 64, 36, 239, 213, 56, 6, 184, 40, 201, 147, 109, 132, 187, 245, 9, 181, 185, 231, 136, 221, 64, 57, 72, 184, 39, 59, 124, 14, 1, 94, 237, 178, 56, 177, 86, 116, 155, 221, 184, 71, 205, 221, 224, 250, 93, 94, 60, 88, 174, 15, 209, 94, 76, 184, 200, 219, 119, 69, 108, 29, 23, 41, 27, 182, 91, 211}, +{54, 29, 70, 188, 133, 150, 135, 158, 165, 199, 82, 243, 120, 15, 233, 97, 38, 238, 44, 209, 217, 83, 246, 149, 157, 81, 150, 148, 169, 78, 42, 149, 216, 158, 215, 186, 135, 148, 79, 120, 20, 125, 227, 133, 104, 111, 217, 101, 125, 57, 87, 106, 195, 70, 67, 244, 116, 215, 90, 3, 92, 5, 220, 251, 144, 166, 28, 176, 239, 18, 115, 43, 25, 245, 97, 21, 38, 213, 57, 161, 200, 102, 137, 32, 255, 122, 235, 251, 97, 77, 66, 91, 197, 214, 220, 132, 181, 72, 132, 94, 143, 57, 61, 185, 182, 151, 226, 175, 252, 36, 193, 218, 181, 100, 121, 243, 145, 85, 236, 241, 220, 173, 173, 83, 101, 127, 238, 189}, +{82, 160, 170, 176, 184, 6, 50, 55, 54, 110, 65, 132, 22, 213, 12, 139, 87, 172, 239, 3, 7, 194, 40, 78, 96, 115, 204, 159, 163, 150, 93, 170, 61, 92, 184, 178, 5, 63, 205, 181, 66, 93, 125, 160, 177, 73, 223, 144, 183, 219, 95, 83, 145, 79, 237, 245, 23, 168, 192, 113, 182, 12, 75, 56, 60, 117, 237, 228, 138, 72, 205, 165, 124, 35, 94, 94, 190, 218, 97, 98, 254, 236, 64, 2, 102, 87, 30, 73, 194, 68, 80, 157, 8, 12, 199, 181, 10, 102, 187, 135, 215, 104, 106, 56, 172, 120, 83, 103, 18, 42, 211, 87, 81, 2, 204, 164, 126, 129, 23, 145, 238, 254, 117, 44, 91, 132, 41, 123}, +{162, 152, 104, 210, 163, 221, 138, 16, 131, 99, 62, 47, 105, 161, 56, 94, 45, 68, 190, 39, 44, 112, 170, 4, 89, 26, 201, 127, 93, 122, 7, 225, 134, 223, 151, 138, 107, 63, 138, 175, 24, 17, 249, 178, 218, 85, 241, 20, 24, 33, 162, 93, 47, 180, 86, 139, 126, 154, 201, 142, 177, 227, 0, 44, 98, 110, 135, 118, 96, 8, 154, 215, 238, 51, 146, 105, 144, 29, 138, 27, 30, 29, 175, 96, 215, 183, 59, 48, 137, 141, 46, 29, 192, 138, 237, 7, 226, 157, 204, 73, 156, 63, 133, 96, 112, 15, 171, 84, 176, 34, 9, 125, 188, 43, 166, 19, 73, 183, 197, 252, 3, 100, 183, 72, 213, 163, 158, 43}, +{58, 41, 252, 48, 57, 210, 14, 240, 214, 185, 141, 0, 37, 217, 22, 60, 168, 38, 24, 215, 161, 4, 54, 124, 140, 193, 96, 252, 28, 114, 23, 131, 149, 212, 191, 179, 98, 224, 227, 34, 160, 205, 113, 128, 93, 55, 249, 18, 241, 235, 246, 6, 43, 115, 225, 160, 148, 78, 174, 142, 115, 86, 248, 176, 47, 65, 125, 18, 28, 185, 14, 199, 190, 131, 24, 20, 83, 96, 192, 108, 5, 45, 41, 34, 1, 122, 87, 74, 70, 147, 29, 17, 127, 10, 104, 122, 220, 79, 33, 134, 113, 235, 46, 208, 77, 236, 62, 84, 9, 143, 237, 171, 26, 78, 223, 9, 240, 164, 177, 138, 112, 204, 0, 215, 100, 200, 251, 145}, +{185, 125, 27, 61, 62, 147, 106, 183, 72, 15, 90, 166, 196, 187, 77, 67, 249, 251, 44, 130, 22, 78, 139, 231, 216, 102, 63, 58, 91, 196, 56, 64, 91, 84, 41, 212, 248, 80, 98, 36, 63, 112, 8, 99, 138, 82, 141, 214, 97, 76, 145, 177, 233, 66, 196, 14, 211, 192, 224, 84, 127, 146, 10, 230, 0, 45, 246, 85, 95, 45, 20, 205, 143, 247, 60, 24, 126, 244, 181, 177, 94, 72, 102, 164, 120, 89, 151, 163, 75, 81, 179, 249, 162, 115, 6, 96, 242, 69, 24, 78, 69, 143, 214, 250, 107, 250, 124, 41, 129, 110, 224, 213, 38, 11, 138, 128, 12, 232, 56, 71, 122, 219, 61, 69, 167, 81, 101, 33}, +{123, 60, 49, 153, 250, 111, 138, 178, 182, 148, 158, 0, 74, 23, 10, 236, 12, 100, 227, 123, 82, 51, 146, 232, 129, 225, 98, 20, 91, 253, 165, 9, 199, 134, 242, 48, 128, 210, 121, 225, 59, 160, 107, 161, 67, 8, 176, 236, 212, 79, 202, 106, 232, 111, 163, 55, 9, 69, 238, 7, 104, 241, 0, 50, 199, 159, 20, 16, 19, 54, 86, 173, 252, 182, 108, 7, 163, 223, 196, 108, 87, 139, 165, 212, 176, 211, 246, 115, 199, 244, 175, 88, 218, 166, 31, 105, 147, 101, 224, 134, 3, 51, 189, 29, 156, 53, 156, 1, 57, 184, 81, 18, 45, 65, 139, 193, 57, 46, 216, 60, 91, 118, 153, 24, 216, 19, 17, 165}, +{17, 202, 85, 189, 254, 97, 105, 193, 250, 231, 124, 60, 37, 97, 68, 157, 97, 247, 107, 132, 217, 128, 99, 147, 123, 41, 54, 125, 170, 153, 91, 28, 84, 0, 75, 125, 132, 105, 10, 91, 46, 247, 94, 121, 113, 227, 197, 79, 199, 235, 219, 87, 243, 183, 65, 102, 143, 253, 66, 137, 29, 156, 162, 39, 138, 136, 91, 232, 36, 233, 135, 124, 192, 221, 16, 85, 230, 88, 228, 138, 139, 23, 196, 180, 28, 159, 3, 122, 103, 171, 4, 183, 59, 182, 207, 167, 20, 149, 25, 187, 239, 193, 56, 79, 156, 68, 130, 168, 167, 26, 113, 225, 59, 70, 188, 110, 106, 233, 249, 5, 151, 18, 128, 15, 83, 172, 32, 184}, +{159, 37, 33, 35, 30, 243, 45, 110, 214, 122, 213, 62, 142, 242, 87, 53, 31, 251, 65, 69, 39, 156, 79, 102, 1, 6, 141, 233, 168, 68, 138, 198, 121, 73, 223, 207, 90, 119, 69, 255, 67, 5, 164, 15, 24, 48, 140, 76, 1, 73, 192, 164, 41, 206, 11, 211, 253, 139, 207, 87, 5, 11, 50, 107, 35, 26, 155, 132, 124, 134, 26, 230, 52, 214, 104, 106, 204, 85, 246, 104, 157, 14, 83, 157, 238, 40, 57, 115, 186, 229, 211, 253, 41, 110, 185, 73, 222, 121, 250, 59, 161, 213, 194, 96, 160, 153, 58, 53, 110, 170, 24, 179, 157, 22, 117, 160, 119, 7, 238, 144, 121, 35, 80, 192, 1, 240, 91, 145}, +{155, 101, 50, 2, 145, 58, 54, 171, 234, 220, 38, 28, 64, 148, 110, 144, 140, 172, 98, 159, 38, 148, 131, 203, 29, 188, 204, 91, 232, 73, 155, 165, 157, 133, 143, 243, 179, 78, 170, 251, 71, 253, 3, 206, 181, 205, 24, 33, 47, 253, 250, 105, 70, 247, 191, 60, 116, 81, 214, 25, 69, 205, 21, 192, 112, 25, 201, 241, 93, 244, 151, 20, 240, 90, 167, 5, 225, 102, 251, 124, 247, 166, 54, 216, 124, 99, 107, 11, 0, 34, 209, 1, 170, 46, 184, 224, 27, 95, 28, 212, 127, 74, 194, 123, 86, 103, 133, 225, 25, 200, 118, 22, 134, 106, 26, 228, 92, 197, 130, 12, 34, 92, 195, 199, 204, 216, 132, 241}, +{88, 5, 41, 97, 253, 136, 43, 187, 52, 246, 223, 75, 104, 68, 228, 211, 65, 203, 3, 125, 246, 195, 67, 188, 129, 89, 245, 86, 185, 222, 16, 249, 220, 178, 153, 153, 66, 226, 167, 127, 91, 128, 99, 189, 108, 78, 201, 63, 191, 30, 198, 5, 236, 22, 250, 236, 135, 247, 37, 24, 190, 47, 32, 120, 65, 85, 134, 217, 185, 189, 27, 10, 156, 29, 86, 26, 151, 88, 143, 76, 34, 78, 108, 165, 96, 107, 111, 7, 250, 77, 97, 223, 51, 123, 111, 45, 240, 15, 116, 214, 145, 207, 155, 220, 200, 60, 131, 64, 247, 203, 28, 228, 207, 160, 107, 188, 5, 38, 188, 59, 29, 236, 144, 225, 147, 116, 111, 72}, +{77, 230, 41, 191, 146, 215, 187, 13, 212, 10, 16, 149, 242, 75, 42, 30, 150, 137, 213, 185, 2, 49, 144, 99, 59, 85, 165, 46, 171, 65, 120, 55, 253, 192, 3, 40, 102, 239, 157, 126, 154, 54, 18, 53, 40, 131, 115, 221, 246, 155, 134, 251, 151, 11, 55, 153, 52, 14, 95, 13, 36, 65, 110, 161, 211, 4, 231, 3, 110, 161, 44, 109, 90, 86, 89, 76, 3, 58, 47, 194, 207, 203, 164, 218, 82, 235, 72, 250, 12, 188, 64, 60, 172, 25, 99, 17, 58, 195, 87, 233, 12, 14, 142, 192, 23, 116, 180, 219, 119, 238, 159, 203, 189, 76, 77, 182, 236, 28, 69, 26, 127, 56, 175, 100, 113, 37, 177, 116}, +{113, 48, 65, 45, 111, 5, 190, 50, 188, 135, 207, 144, 23, 8, 221, 88, 195, 40, 223, 38, 226, 41, 137, 87, 155, 139, 143, 181, 46, 45, 127, 23, 112, 166, 188, 148, 195, 158, 224, 34, 189, 47, 166, 82, 200, 122, 186, 172, 67, 229, 184, 248, 189, 187, 217, 97, 154, 13, 128, 161, 210, 181, 108, 35, 124, 4, 74, 50, 61, 190, 106, 251, 255, 2, 52, 15, 140, 250, 237, 33, 175, 241, 64, 116, 102, 33, 34, 244, 102, 147, 216, 25, 145, 1, 71, 91, 0, 185, 159, 53, 31, 65, 167, 168, 22, 85, 185, 182, 57, 206, 173, 33, 131, 17, 26, 147, 206, 152, 107, 55, 22, 116, 89, 88, 54, 252, 91, 60}, +{44, 12, 140, 66, 119, 205, 177, 0, 179, 98, 174, 22, 40, 114, 33, 254, 23, 232, 152, 223, 208, 250, 59, 201, 63, 175, 4, 140, 187, 151, 96, 191, 201, 208, 85, 77, 79, 206, 175, 243, 85, 28, 141, 110, 70, 134, 7, 201, 185, 41, 128, 66, 232, 164, 23, 161, 163, 24, 223, 119, 80, 164, 174, 24, 147, 208, 126, 2, 72, 86, 133, 248, 154, 88, 188, 44, 99, 149, 155, 135, 71, 151, 51, 97, 24, 55, 133, 25, 217, 102, 146, 115, 28, 167, 251, 189, 231, 156, 39, 184, 13, 101, 1, 125, 172, 70, 149, 206, 115, 53, 7, 165, 255, 144, 182, 207, 200, 78, 142, 128, 9, 191, 131, 14, 84, 56, 253, 189}, +{20, 120, 240, 239, 217, 65, 57, 87, 115, 99, 210, 170, 131, 108, 71, 196, 181, 173, 78, 141, 214, 240, 116, 148, 51, 196, 220, 193, 141, 8, 24, 91, 243, 71, 29, 171, 226, 205, 44, 123, 68, 185, 199, 94, 239, 38, 137, 140, 222, 109, 87, 22, 244, 43, 143, 212, 153, 181, 112, 220, 106, 116, 108, 176, 24, 17, 134, 177, 109, 177, 91, 70, 242, 133, 47, 88, 143, 139, 152, 44, 28, 79, 169, 17, 146, 194, 44, 174, 153, 122, 163, 31, 172, 218, 97, 192, 102, 150, 224, 244, 66, 79, 82, 233, 208, 250, 82, 25, 205, 29, 215, 11, 71, 56, 168, 161, 20, 65, 172, 31, 94, 181, 8, 223, 168, 58, 144, 117}, +{50, 51, 119, 145, 222, 116, 159, 8, 86, 141, 79, 210, 65, 20, 185, 65, 22, 156, 27, 244, 35, 53, 181, 102, 222, 224, 153, 226, 206, 44, 138, 67, 58, 162, 53, 62, 1, 116, 74, 104, 21, 118, 37, 44, 185, 86, 36, 231, 85, 187, 179, 220, 52, 99, 223, 197, 82, 67, 250, 63, 206, 140, 254, 162, 202, 4, 228, 97, 251, 239, 56, 176, 215, 151, 248, 60, 162, 193, 211, 106, 52, 18, 193, 125, 239, 123, 72, 86, 129, 87, 235, 69, 73, 14, 245, 185, 90, 10, 49, 222, 159, 118, 0, 86, 36, 123, 2, 152, 28, 168, 202, 216, 109, 6, 143, 212, 91, 59, 4, 85, 78, 233, 162, 125, 233, 14, 149, 70}, +{57, 248, 70, 18, 36, 158, 155, 192, 178, 215, 30, 55, 156, 45, 95, 106, 207, 236, 73, 177, 215, 23, 16, 124, 176, 238, 72, 157, 6, 74, 143, 5, 150, 140, 232, 95, 215, 59, 217, 142, 133, 39, 118, 179, 126, 226, 144, 116, 253, 36, 78, 36, 85, 105, 86, 129, 53, 90, 165, 223, 137, 132, 250, 133, 49, 47, 216, 103, 243, 174, 212, 22, 190, 112, 57, 209, 0, 193, 226, 199, 34, 205, 3, 229, 121, 129, 143, 146, 100, 8, 73, 185, 22, 15, 99, 254, 242, 150, 126, 112, 222, 24, 49, 88, 182, 7, 33, 85, 233, 17, 204, 53, 132, 167, 159, 161, 41, 148, 1, 7, 135, 220, 151, 43, 237, 56, 77, 239}, +{185, 150, 188, 66, 29, 177, 113, 213, 69, 160, 148, 141, 114, 37, 212, 27, 98, 62, 9, 140, 45, 93, 250, 255, 226, 231, 56, 136, 189, 157, 3, 20, 128, 92, 250, 77, 55, 220, 81, 76, 69, 164, 106, 206, 157, 91, 3, 189, 213, 45, 68, 123, 195, 72, 67, 233, 91, 106, 89, 26, 92, 222, 253, 146, 28, 199, 125, 3, 126, 93, 2, 54, 174, 141, 18, 199, 129, 99, 95, 193, 165, 54, 161, 118, 0, 186, 11, 53, 253, 146, 246, 179, 53, 149, 183, 12, 62, 247, 220, 119, 163, 102, 141, 163, 225, 213, 158, 168, 103, 16, 101, 200, 86, 231, 179, 226, 159, 232, 229, 185, 210, 97, 83, 91, 45, 220, 226, 159}, +{30, 129, 41, 102, 149, 21, 164, 151, 148, 88, 175, 74, 240, 25, 167, 163, 126, 203, 72, 140, 108, 235, 200, 128, 161, 219, 133, 250, 150, 8, 15, 226, 38, 192, 12, 212, 65, 88, 159, 185, 93, 87, 59, 189, 132, 109, 92, 11, 189, 58, 255, 130, 118, 39, 134, 204, 207, 238, 8, 50, 65, 154, 240, 248, 41, 38, 97, 166, 182, 219, 28, 112, 73, 212, 183, 89, 112, 101, 153, 87, 103, 23, 12, 28, 252, 185, 68, 133, 36, 23, 128, 128, 90, 102, 85, 192, 19, 85, 183, 32, 53, 139, 232, 230, 201, 83, 160, 236, 216, 92, 27, 187, 121, 136, 2, 20, 129, 222, 121, 152, 66, 194, 78, 16, 113, 39, 241, 127}, +{131, 228, 177, 159, 64, 174, 85, 74, 126, 102, 208, 11, 124, 135, 171, 180, 5, 48, 169, 225, 145, 172, 237, 150, 194, 199, 152, 53, 25, 212, 175, 52, 8, 251, 225, 58, 189, 224, 5, 61, 89, 102, 183, 237, 254, 103, 58, 104, 28, 139, 206, 97, 149, 125, 202, 92, 238, 6, 8, 109, 48, 216, 42, 189, 238, 158, 121, 74, 204, 201, 185, 170, 143, 136, 51, 24, 160, 5, 98, 193, 254, 77, 50, 71, 12, 82, 183, 197, 217, 120, 201, 219, 87, 93, 82, 90, 54, 197, 205, 181, 142, 37, 12, 130, 124, 72, 192, 59, 163, 126, 28, 124, 153, 48, 35, 147, 142, 198, 19, 54, 46, 122, 119, 110, 31, 26, 92, 28}, +{68, 58, 129, 8, 64, 183, 176, 207, 219, 202, 150, 70, 120, 66, 175, 215, 77, 12, 138, 191, 150, 177, 44, 142, 167, 15, 228, 29, 21, 152, 106, 246, 159, 205, 107, 94, 234, 41, 127, 217, 84, 199, 83, 245, 173, 3, 210, 153, 155, 226, 12, 186, 137, 144, 236, 118, 143, 76, 25, 51, 208, 9, 97, 191, 55, 128, 178, 156, 13, 46, 102, 171, 31, 6, 113, 174, 34, 91, 214, 21, 243, 70, 201, 61, 4, 186, 151, 223, 2, 22, 24, 52, 133, 19, 89, 123, 33, 128, 108, 24, 89, 135, 226, 236, 197, 4, 61, 98, 47, 55, 240, 180, 60, 59, 188, 2, 220, 45, 140, 107, 45, 107, 43, 14, 50, 18, 65, 244}, +{173, 149, 185, 40, 233, 47, 92, 167, 164, 190, 250, 70, 163, 40, 203, 195, 118, 73, 117, 145, 227, 211, 228, 24, 38, 85, 148, 42, 73, 28, 109, 63, 87, 46, 144, 203, 239, 249, 70, 83, 157, 63, 58, 240, 172, 58, 185, 28, 158, 68, 238, 199, 161, 130, 130, 139, 45, 149, 138, 120, 209, 234, 55, 27, 44, 50, 46, 246, 97, 217, 203, 226, 181, 18, 4, 192, 163, 220, 60, 84, 239, 93, 122, 153, 124, 247, 12, 106, 192, 30, 11, 2, 76, 73, 113, 52, 47, 40, 107, 84, 34, 168, 44, 131, 120, 114, 31, 48, 10, 124, 189, 61, 252, 17, 189, 162, 190, 4, 150, 24, 185, 89, 252, 135, 92, 94, 22, 175}, +{36, 156, 222, 157, 192, 208, 74, 119, 177, 181, 138, 6, 22, 197, 101, 101, 128, 15, 206, 38, 240, 254, 201, 20, 54, 162, 109, 49, 128, 247, 33, 83, 99, 161, 93, 248, 221, 30, 122, 57, 46, 48, 151, 179, 115, 83, 86, 36, 227, 65, 91, 22, 89, 163, 185, 144, 179, 100, 59, 214, 243, 9, 105, 9, 243, 241, 139, 132, 131, 10, 127, 42, 132, 10, 4, 189, 14, 14, 35, 100, 9, 210, 9, 12, 225, 96, 36, 214, 135, 200, 29, 50, 200, 211, 213, 105, 245, 184, 136, 254, 162, 11, 134, 162, 139, 91, 165, 156, 2, 7, 69, 24, 66, 62, 195, 14, 194, 196, 166, 38, 63, 219, 31, 79, 95, 249, 172, 162}, +{104, 58, 147, 103, 0, 116, 126, 94, 49, 93, 226, 19, 179, 36, 216, 39, 28, 103, 79, 200, 253, 207, 180, 242, 147, 133, 133, 24, 115, 3, 158, 168, 32, 169, 71, 41, 68, 229, 228, 76, 143, 109, 216, 96, 238, 46, 56, 224, 177, 138, 66, 184, 216, 187, 215, 113, 172, 78, 18, 56, 65, 91, 132, 115, 220, 136, 135, 31, 106, 54, 30, 162, 250, 79, 244, 73, 151, 74, 124, 55, 179, 87, 18, 214, 165, 90, 225, 73, 40, 163, 189, 224, 128, 113, 148, 119, 212, 69, 213, 77, 117, 18, 127, 236, 151, 94, 26, 45, 240, 36, 130, 164, 56, 62, 250, 93, 112, 57, 42, 52, 106, 171, 230, 66, 116, 92, 181, 25}, +{189, 192, 228, 50, 219, 204, 17, 89, 180, 58, 94, 84, 70, 19, 38, 160, 52, 68, 62, 14, 50, 117, 2, 178, 152, 148, 203, 58, 70, 5, 69, 105, 221, 245, 111, 200, 0, 95, 55, 204, 196, 12, 89, 30, 224, 5, 251, 216, 36, 187, 229, 244, 14, 222, 87, 35, 156, 112, 36, 107, 192, 249, 25, 174, 235, 18, 89, 66, 121, 32, 159, 125, 45, 183, 166, 84, 134, 208, 181, 86, 126, 191, 253, 255, 234, 184, 204, 135, 248, 225, 104, 6, 236, 150, 237, 33, 90, 205, 186, 208, 120, 10, 164, 128, 142, 5, 84, 163, 83, 217, 47, 82, 119, 85, 60, 125, 69, 250, 11, 227, 160, 68, 58, 80, 248, 56, 65, 47}, +{205, 137, 35, 46, 243, 63, 150, 241, 248, 135, 228, 94, 208, 75, 23, 219, 164, 100, 168, 147, 49, 80, 183, 29, 107, 174, 150, 199, 87, 100, 104, 122, 233, 177, 162, 249, 86, 71, 156, 126, 233, 30, 62, 54, 141, 16, 107, 75, 157, 98, 149, 237, 121, 222, 116, 49, 122, 111, 244, 146, 208, 17, 90, 81, 119, 254, 46, 210, 161, 32, 226, 163, 172, 211, 92, 23, 209, 136, 80, 188, 169, 61, 43, 162, 244, 141, 12, 34, 108, 31, 178, 76, 253, 182, 65, 127, 190, 14, 13, 203, 88, 173, 152, 190, 39, 201, 41, 88, 45, 194, 227, 52, 141, 212, 6, 99, 16, 166, 12, 114, 227, 137, 70, 186, 151, 102, 136, 224}, +{174, 84, 236, 229, 218, 209, 159, 122, 193, 63, 126, 191, 158, 36, 3, 34, 173, 236, 11, 237, 163, 124, 123, 89, 227, 99, 218, 181, 210, 197, 211, 14, 122, 144, 133, 185, 202, 144, 147, 119, 255, 23, 138, 180, 220, 64, 76, 99, 244, 169, 14, 173, 52, 70, 16, 139, 165, 244, 190, 16, 63, 167, 116, 13, 139, 14, 213, 3, 115, 94, 214, 197, 62, 26, 73, 137, 46, 158, 230, 236, 239, 36, 153, 82, 36, 232, 36, 71, 201, 230, 215, 183, 84, 214, 171, 25, 247, 71, 2, 52, 114, 87, 106, 61, 172, 195, 223, 221, 141, 84, 217, 149, 63, 93, 191, 33, 222, 113, 33, 5, 167, 14, 104, 76, 20, 235, 71, 140}, +{68, 133, 236, 218, 147, 29, 95, 157, 129, 189, 135, 143, 117, 218, 99, 97, 8, 212, 246, 220, 26, 117, 119, 172, 137, 128, 223, 39, 34, 17, 88, 72, 52, 196, 20, 249, 38, 240, 58, 180, 73, 10, 225, 199, 240, 114, 94, 33, 189, 126, 88, 211, 10, 38, 124, 64, 76, 59, 147, 225, 99, 107, 93, 214, 159, 84, 135, 152, 91, 214, 59, 199, 122, 9, 185, 246, 217, 19, 255, 178, 5, 215, 253, 3, 235, 64, 128, 210, 157, 46, 227, 173, 103, 162, 105, 215, 100, 58, 244, 43, 131, 158, 100, 135, 84, 45, 59, 163, 205, 134, 160, 79, 84, 190, 74, 91, 6, 213, 134, 134, 80, 37, 36, 141, 224, 108, 192, 100}, +{198, 229, 78, 176, 216, 65, 16, 241, 181, 178, 81, 153, 253, 77, 118, 157, 204, 228, 161, 244, 55, 53, 91, 40, 182, 112, 176, 175, 4, 180, 52, 20, 232, 243, 203, 101, 180, 200, 87, 120, 171, 156, 136, 161, 101, 20, 146, 236, 95, 46, 170, 131, 43, 150, 62, 132, 253, 132, 154, 217, 180, 189, 13, 190, 11, 111, 14, 95, 165, 75, 98, 22, 254, 224, 70, 178, 220, 90, 32, 201, 84, 244, 174, 200, 51, 117, 239, 140, 178, 193, 94, 3, 87, 170, 77, 96, 18, 80, 7, 253, 61, 1, 92, 201, 240, 165, 29, 101, 170, 1, 51, 16, 48, 56, 52, 105, 215, 72, 28, 197, 41, 194, 200, 0, 27, 16, 40, 161}, +{149, 214, 182, 17, 93, 66, 137, 160, 42, 43, 157, 87, 62, 36, 68, 88, 30, 207, 114, 222, 255, 17, 188, 37, 130, 42, 222, 205, 191, 107, 130, 198, 50, 175, 186, 179, 255, 113, 20, 19, 135, 35, 29, 170, 60, 156, 18, 182, 20, 52, 63, 3, 79, 239, 190, 208, 117, 147, 204, 79, 58, 221, 7, 29, 108, 191, 33, 83, 240, 156, 108, 119, 51, 71, 61, 68, 60, 173, 137, 13, 137, 120, 48, 111, 72, 45, 17, 73, 94, 208, 242, 53, 160, 102, 65, 233, 56, 235, 229, 129, 163, 44, 106, 247, 184, 56, 125, 88, 86, 229, 195, 181, 250, 62, 212, 54, 197, 87, 243, 227, 114, 123, 4, 201, 134, 132, 12, 3}, +{141, 206, 49, 32, 109, 5, 115, 82, 183, 97, 173, 115, 170, 157, 46, 187, 63, 46, 108, 174, 127, 243, 137, 30, 85, 132, 175, 192, 249, 93, 190, 15, 34, 60, 169, 89, 5, 87, 159, 38, 213, 40, 188, 160, 196, 160, 163, 20, 148, 124, 194, 53, 131, 50, 198, 117, 189, 67, 126, 195, 200, 108, 109, 161, 110, 118, 222, 174, 21, 175, 96, 120, 210, 8, 223, 177, 141, 28, 147, 159, 244, 145, 150, 207, 222, 56, 166, 192, 171, 119, 183, 170, 59, 56, 74, 44, 16, 213, 2, 99, 205, 208, 114, 204, 105, 31, 151, 223, 80, 18, 185, 69, 238, 126, 106, 119, 119, 27, 52, 180, 244, 108, 228, 54, 131, 108, 73, 43}, +{93, 77, 186, 79, 40, 2, 204, 83, 86, 85, 184, 92, 210, 151, 66, 22, 25, 229, 70, 113, 192, 30, 51, 101, 158, 17, 61, 55, 194, 185, 71, 182, 29, 232, 215, 250, 10, 58, 153, 146, 83, 162, 184, 76, 133, 45, 25, 8, 11, 187, 87, 74, 78, 164, 213, 251, 174, 38, 79, 116, 195, 210, 6, 80, 32, 44, 134, 5, 86, 32, 24, 35, 86, 163, 199, 144, 154, 32, 75, 3, 78, 114, 184, 11, 111, 129, 38, 237, 126, 106, 115, 46, 90, 1, 1, 183, 255, 71, 190, 193, 51, 35, 28, 167, 240, 151, 29, 209, 11, 195, 120, 184, 184, 141, 98, 39, 216, 237, 55, 50, 138, 92, 221, 66, 195, 15, 255, 112}, +{136, 39, 249, 20, 47, 156, 118, 29, 175, 134, 235, 211, 24, 129, 40, 32, 203, 11, 40, 23, 231, 69, 212, 253, 128, 204, 255, 21, 92, 51, 234, 221, 126, 125, 47, 94, 167, 85, 119, 197, 182, 69, 40, 183, 158, 83, 252, 129, 123, 191, 109, 241, 77, 39, 233, 14, 127, 110, 61, 161, 108, 31, 130, 187, 57, 95, 192, 236, 182, 11, 198, 183, 237, 130, 10, 30, 86, 95, 131, 161, 192, 214, 246, 141, 166, 73, 116, 215, 140, 50, 93, 77, 78, 39, 180, 8, 5, 208, 169, 98, 169, 201, 5, 51, 228, 181, 213, 11, 104, 147, 180, 58, 130, 110, 139, 13, 72, 49, 229, 28, 167, 125, 138, 252, 160, 102, 179, 185}, +{99, 6, 172, 144, 189, 44, 188, 247, 99, 167, 4, 128, 42, 106, 88, 199, 46, 70, 159, 159, 246, 30, 174, 196, 147, 210, 149, 129, 161, 54, 146, 182, 171, 13, 203, 78, 41, 53, 227, 26, 250, 204, 165, 201, 88, 59, 29, 211, 68, 62, 180, 151, 219, 216, 235, 153, 222, 102, 23, 59, 28, 11, 214, 97, 36, 219, 171, 177, 54, 43, 6, 185, 89, 154, 156, 232, 90, 115, 201, 155, 243, 152, 45, 134, 171, 88, 208, 17, 104, 158, 30, 253, 16, 116, 187, 212, 253, 8, 162, 107, 217, 123, 167, 203, 121, 15, 109, 77, 19, 4, 43, 161, 55, 33, 102, 123, 186, 42, 159, 31, 198, 115, 144, 119, 201, 18, 67, 4}, +{143, 130, 170, 45, 71, 248, 11, 134, 173, 192, 248, 51, 169, 222, 177, 207, 73, 70, 139, 219, 87, 227, 64, 13, 240, 56, 18, 139, 3, 236, 193, 201, 200, 78, 69, 94, 98, 15, 78, 73, 29, 55, 120, 114, 176, 11, 63, 220, 135, 177, 89, 186, 96, 154, 223, 14, 230, 136, 59, 168, 245, 67, 175, 104, 169, 19, 103, 0, 82, 253, 221, 137, 95, 206, 116, 186, 193, 79, 107, 232, 233, 61, 142, 167, 132, 67, 8, 150, 166, 169, 34, 142, 245, 49, 39, 139, 73, 20, 92, 158, 168, 167, 32, 41, 74, 42, 165, 37, 111, 98, 90, 13, 236, 236, 120, 89, 138, 160, 153, 24, 138, 131, 204, 121, 246, 169, 8, 52}, +{67, 1, 231, 180, 111, 170, 108, 166, 192, 52, 176, 15, 63, 124, 155, 198, 81, 61, 199, 49, 208, 35, 59, 16, 139, 205, 153, 23, 55, 22, 185, 207, 17, 200, 179, 106, 203, 107, 32, 0, 119, 212, 30, 250, 171, 60, 99, 137, 110, 1, 70, 88, 60, 121, 111, 22, 227, 253, 1, 86, 142, 240, 202, 222, 82, 135, 215, 239, 75, 214, 234, 151, 9, 118, 56, 164, 10, 124, 74, 147, 47, 67, 50, 125, 12, 219, 16, 149, 153, 24, 184, 163, 121, 111, 17, 8, 206, 225, 171, 104, 163, 237, 216, 167, 108, 166, 213, 34, 81, 84, 190, 177, 159, 61, 90, 63, 119, 185, 85, 103, 251, 27, 208, 195, 212, 213, 173, 9}, +{125, 231, 227, 89, 229, 210, 158, 237, 101, 43, 133, 125, 5, 244, 199, 146, 90, 239, 217, 56, 232, 45, 191, 24, 36, 139, 172, 55, 26, 113, 228, 196, 215, 189, 131, 6, 140, 0, 211, 135, 119, 145, 216, 36, 240, 125, 138, 102, 44, 24, 200, 109, 53, 142, 106, 172, 245, 30, 157, 99, 218, 62, 212, 198, 193, 82, 151, 10, 56, 19, 155, 148, 180, 86, 242, 103, 208, 90, 140, 137, 184, 140, 131, 48, 4, 66, 179, 104, 37, 192, 235, 95, 209, 101, 253, 147, 180, 220, 101, 147, 50, 96, 226, 217, 47, 239, 158, 204, 45, 102, 212, 97, 190, 64, 26, 2, 15, 252, 83, 27, 244, 251, 65, 60, 13, 63, 12, 249}, +{29, 245, 66, 197, 26, 102, 230, 18, 206, 71, 96, 247, 201, 81, 66, 167, 91, 74, 151, 33, 86, 69, 244, 112, 45, 91, 177, 145, 8, 0, 207, 17, 19, 131, 20, 147, 152, 60, 48, 24, 210, 206, 42, 103, 107, 40, 240, 176, 72, 162, 1, 19, 32, 199, 233, 207, 240, 162, 99, 147, 52, 120, 217, 203, 136, 42, 61, 135, 61, 43, 167, 94, 71, 157, 201, 250, 52, 231, 174, 202, 66, 213, 131, 180, 243, 107, 78, 137, 191, 85, 25, 53, 83, 240, 225, 247, 204, 115, 158, 93, 57, 64, 56, 85, 118, 200, 124, 173, 24, 205, 31, 93, 29, 180, 227, 78, 88, 61, 146, 168, 58, 102, 22, 210, 108, 6, 126, 60}, +{28, 210, 152, 135, 191, 243, 124, 220, 251, 100, 101, 115, 171, 39, 217, 228, 64, 149, 2, 253, 76, 255, 139, 206, 25, 174, 112, 57, 104, 191, 128, 76, 145, 67, 71, 116, 80, 87, 219, 60, 132, 38, 218, 242, 17, 225, 180, 184, 7, 20, 145, 214, 235, 160, 65, 26, 212, 8, 255, 133, 151, 0, 107, 74, 204, 28, 22, 161, 39, 175, 211, 122, 234, 135, 21, 177, 191, 130, 12, 105, 45, 188, 227, 148, 115, 164, 196, 238, 230, 30, 175, 24, 38, 113, 211, 233, 196, 246, 238, 173, 23, 221, 221, 8, 145, 213, 61, 162, 137, 84, 84, 48, 156, 174, 63, 224, 140, 111, 117, 166, 169, 8, 27, 62, 97, 209, 112, 60}, +{209, 36, 180, 54, 129, 27, 178, 234, 91, 121, 6, 102, 249, 116, 155, 147, 212, 206, 88, 93, 143, 167, 239, 34, 2, 198, 3, 36, 165, 55, 24, 163, 242, 82, 21, 39, 14, 163, 141, 198, 151, 73, 214, 133, 24, 92, 153, 27, 117, 137, 20, 168, 242, 17, 161, 50, 181, 141, 174, 50, 143, 236, 50, 232, 87, 100, 237, 170, 76, 1, 241, 78, 196, 73, 135, 147, 208, 151, 161, 208, 107, 242, 97, 221, 242, 34, 7, 67, 221, 52, 33, 72, 215, 96, 252, 153, 65, 196, 139, 253, 110, 84, 0, 6, 248, 107, 254, 253, 134, 185, 229, 83, 83, 180, 49, 10, 181, 162, 222, 222, 169, 209, 155, 178, 53, 209, 189, 9}, +{50, 221, 236, 188, 188, 209, 113, 39, 49, 33, 223, 65, 130, 162, 35, 60, 37, 253, 221, 69, 126, 97, 225, 194, 184, 91, 156, 207, 101, 64, 236, 233, 124, 168, 112, 166, 204, 160, 65, 31, 162, 56, 174, 103, 125, 49, 228, 205, 206, 44, 92, 19, 200, 40, 19, 35, 33, 127, 237, 40, 214, 108, 162, 247, 42, 94, 94, 191, 78, 230, 191, 19, 46, 94, 73, 194, 167, 199, 121, 224, 229, 103, 110, 244, 56, 112, 225, 46, 176, 63, 93, 123, 221, 152, 140, 243, 66, 108, 193, 16, 184, 206, 212, 159, 107, 74, 255, 53, 177, 174, 108, 98, 73, 142, 38, 145, 35, 236, 144, 198, 90, 159, 79, 21, 83, 204, 46, 66}, +{208, 163, 20, 71, 178, 168, 226, 35, 141, 240, 210, 87, 86, 57, 34, 242, 73, 107, 115, 137, 214, 161, 1, 155, 172, 196, 214, 28, 17, 117, 60, 247, 66, 119, 86, 109, 36, 59, 195, 17, 7, 103, 71, 14, 208, 58, 86, 69, 169, 124, 125, 139, 15, 5, 25, 118, 207, 59, 100, 220, 110, 193, 122, 100, 244, 164, 130, 26, 49, 99, 102, 53, 67, 189, 55, 159, 45, 66, 70, 153, 178, 217, 192, 125, 63, 157, 171, 4, 192, 154, 14, 112, 198, 98, 115, 247, 112, 186, 239, 98, 185, 41, 219, 19, 87, 116, 154, 24, 6, 207, 45, 77, 113, 216, 217, 61, 64, 34, 33, 52, 4, 126, 212, 169, 158, 13, 83, 22}, +{6, 178, 149, 60, 68, 93, 10, 43, 2, 16, 122, 164, 192, 11, 58, 86, 253, 131, 49, 8, 212, 200, 202, 74, 190, 138, 48, 146, 216, 188, 192, 155, 211, 156, 98, 50, 216, 63, 140, 7, 96, 199, 60, 184, 156, 40, 135, 244, 93, 150, 2, 236, 14, 198, 122, 57, 57, 50, 46, 88, 234, 171, 207, 248, 12, 45, 10, 51, 25, 185, 59, 5, 185, 181, 111, 253, 225, 251, 33, 227, 149, 148, 173, 13, 141, 153, 90, 181, 212, 156, 151, 124, 125, 250, 157, 241, 146, 105, 60, 36, 144, 153, 65, 244, 107, 16, 36, 17, 184, 151, 189, 9, 82, 116, 79, 138, 255, 185, 186, 247, 25, 31, 82, 247, 58, 218, 79, 175}, +{22, 180, 132, 217, 48, 155, 147, 142, 229, 72, 91, 191, 243, 15, 30, 78, 74, 137, 23, 102, 212, 82, 241, 18, 57, 103, 149, 5, 86, 19, 41, 44, 193, 33, 4, 18, 237, 107, 98, 50, 37, 42, 152, 11, 222, 86, 83, 99, 75, 36, 186, 34, 41, 220, 109, 132, 238, 62, 220, 10, 253, 146, 46, 36, 3, 255, 108, 18, 10, 29, 228, 48, 200, 8, 207, 227, 144, 91, 224, 93, 42, 157, 250, 36, 19, 31, 92, 251, 160, 113, 231, 249, 59, 1, 114, 38, 220, 141, 236, 255, 180, 118, 53, 230, 221, 136, 58, 196, 122, 52, 99, 106, 152, 3, 173, 73, 219, 29, 4, 136, 215, 104, 171, 88, 171, 14, 212, 39}, +{129, 52, 138, 101, 127, 28, 145, 107, 95, 193, 151, 111, 88, 155, 92, 159, 79, 131, 83, 36, 169, 17, 117, 30, 215, 180, 87, 236, 120, 114, 44, 155, 57, 150, 163, 17, 238, 4, 64, 245, 19, 210, 44, 30, 158, 135, 65, 239, 219, 125, 54, 220, 70, 113, 48, 96, 180, 45, 243, 4, 18, 210, 30, 27, 45, 113, 242, 101, 225, 101, 75, 145, 185, 179, 15, 82, 205, 165, 175, 36, 211, 125, 236, 141, 187, 50, 95, 54, 144, 205, 169, 98, 206, 237, 219, 218, 27, 45, 246, 187, 197, 245, 5, 145, 131, 136, 233, 87, 51, 143, 87, 217, 250, 84, 172, 107, 156, 214, 57, 205, 150, 28, 240, 146, 147, 70, 78, 192}, +{55, 159, 209, 126, 203, 145, 72, 215, 37, 234, 141, 168, 131, 255, 119, 247, 161, 100, 24, 77, 141, 116, 243, 92, 192, 191, 42, 60, 151, 83, 244, 53, 249, 23, 43, 73, 152, 162, 195, 112, 94, 8, 194, 41, 30, 64, 97, 130, 214, 81, 85, 74, 141, 77, 137, 254, 170, 180, 55, 241, 27, 177, 75, 186, 132, 88, 142, 9, 247, 11, 248, 190, 2, 215, 165, 8, 125, 0, 41, 178, 76, 229, 67, 56, 149, 148, 141, 65, 80, 223, 212, 128, 208, 170, 14, 136, 28, 4, 216, 141, 123, 103, 229, 125, 137, 201, 128, 51, 86, 185, 95, 173, 80, 240, 141, 70, 91, 96, 189, 138, 171, 128, 189, 147, 230, 67, 25, 64}, +{105, 208, 59, 95, 241, 218, 105, 218, 245, 249, 65, 82, 92, 13, 64, 35, 62, 143, 41, 22, 186, 51, 206, 138, 145, 246, 233, 99, 130, 213, 168, 251, 127, 217, 22, 224, 46, 44, 165, 243, 56, 235, 55, 49, 123, 239, 137, 114, 211, 18, 156, 179, 220, 26, 11, 255, 151, 159, 72, 34, 151, 103, 155, 78, 78, 222, 181, 249, 43, 199, 244, 35, 78, 136, 25, 66, 85, 162, 170, 105, 242, 61, 182, 184, 27, 90, 108, 115, 173, 46, 15, 240, 45, 205, 144, 198, 198, 144, 190, 70, 226, 147, 200, 220, 197, 148, 31, 237, 144, 237, 27, 44, 153, 52, 113, 82, 178, 145, 184, 49, 60, 162, 66, 80, 96, 161, 32, 143}, +{133, 105, 188, 116, 6, 247, 49, 69, 94, 27, 72, 65, 172, 154, 214, 205, 67, 234, 89, 101, 138, 32, 18, 84, 94, 22, 179, 105, 36, 255, 149, 230, 119, 77, 215, 111, 99, 133, 193, 208, 63, 168, 242, 42, 200, 94, 254, 51, 189, 224, 5, 200, 242, 170, 41, 164, 159, 55, 191, 155, 49, 181, 119, 146, 109, 139, 159, 148, 124, 146, 40, 255, 102, 175, 96, 44, 24, 100, 138, 100, 119, 153, 23, 86, 102, 216, 239, 84, 182, 186, 228, 214, 140, 102, 213, 138, 104, 95, 217, 172, 47, 5, 197, 49, 158, 204, 149, 129, 71, 42, 76, 180, 141, 37, 153, 228, 106, 177, 44, 36, 197, 191, 237, 191, 189, 110, 51, 72}, +{93, 179, 176, 189, 5, 233, 110, 36, 182, 227, 146, 110, 131, 3, 32, 125, 140, 109, 104, 42, 15, 22, 127, 228, 107, 77, 1, 177, 11, 34, 138, 213, 85, 162, 52, 59, 224, 77, 40, 138, 123, 7, 34, 98, 254, 188, 21, 97, 170, 5, 188, 43, 202, 214, 91, 251, 226, 121, 52, 189, 172, 111, 241, 197, 113, 133, 162, 243, 227, 245, 9, 149, 52, 21, 113, 216, 255, 167, 154, 189, 93, 139, 58, 194, 84, 197, 200, 240, 147, 159, 31, 100, 150, 239, 128, 255, 93, 183, 112, 127, 70, 181, 192, 205, 215, 34, 115, 4, 54, 44, 181, 67, 93, 184, 22, 193, 100, 9, 195, 164, 110, 61, 229, 19, 94, 141, 195, 21}, +{3, 15, 209, 214, 224, 170, 124, 185, 32, 46, 61, 220, 157, 210, 89, 28, 184, 108, 98, 80, 96, 204, 44, 225, 90, 54, 167, 38, 10, 24, 194, 63, 27, 18, 242, 221, 50, 175, 147, 186, 44, 231, 6, 39, 187, 122, 219, 248, 75, 68, 125, 200, 136, 166, 2, 41, 117, 239, 4, 215, 54, 239, 187, 92, 79, 102, 88, 156, 212, 180, 183, 229, 53, 81, 17, 162, 237, 151, 72, 4, 170, 62, 220, 148, 42, 214, 188, 239, 91, 36, 143, 109, 44, 252, 77, 120, 179, 211, 156, 7, 82, 45, 71, 87, 66, 34, 73, 52, 33, 159, 151, 203, 2, 50, 116, 107, 220, 199, 99, 249, 132, 16, 248, 122, 0, 209, 48, 151}, +{164, 37, 166, 28, 165, 95, 33, 63, 215, 226, 237, 35, 170, 232, 57, 182, 185, 190, 224, 88, 57, 157, 5, 142, 37, 156, 23, 130, 226, 228, 98, 4, 173, 237, 123, 122, 252, 32, 101, 117, 17, 188, 65, 159, 140, 169, 178, 74, 190, 238, 196, 24, 80, 47, 235, 255, 123, 177, 20, 39, 211, 179, 55, 52, 11, 229, 185, 216, 57, 188, 160, 251, 165, 162, 92, 1, 164, 22, 39, 214, 233, 207, 48, 90, 25, 125, 207, 229, 220, 4, 159, 63, 40, 255, 181, 142, 26, 22, 177, 36, 16, 175, 247, 32, 26, 8, 180, 97, 93, 45, 198, 189, 58, 52, 237, 82, 117, 117, 152, 93, 65, 190, 193, 60, 139, 21, 3, 90}, +{151, 4, 16, 18, 208, 70, 120, 194, 161, 123, 251, 21, 49, 105, 11, 1, 51, 176, 205, 214, 221, 1, 100, 110, 16, 1, 205, 252, 129, 69, 216, 241, 34, 44, 45, 112, 174, 102, 43, 203, 224, 207, 0, 43, 192, 161, 13, 8, 67, 12, 222, 32, 30, 139, 148, 43, 220, 158, 205, 127, 39, 137, 115, 157, 59, 52, 251, 11, 199, 161, 210, 66, 246, 179, 120, 228, 93, 26, 187, 116, 133, 93, 165, 193, 84, 118, 190, 155, 125, 38, 59, 40, 31, 217, 220, 47, 218, 97, 41, 129, 242, 2, 65, 169, 165, 118, 105, 118, 205, 106, 59, 111, 221, 224, 248, 126, 0, 245, 205, 17, 40, 175, 40, 142, 169, 207, 90, 19}, +{123, 26, 136, 97, 58, 49, 110, 50, 17, 62, 196, 241, 19, 245, 156, 179, 233, 104, 155, 138, 36, 243, 53, 42, 47, 229, 120, 198, 240, 168, 136, 125, 234, 99, 189, 136, 238, 165, 180, 130, 107, 122, 91, 99, 39, 216, 127, 65, 103, 127, 69, 125, 159, 195, 173, 97, 138, 188, 1, 201, 160, 244, 247, 184, 241, 73, 21, 223, 22, 246, 47, 99, 51, 58, 229, 111, 167, 173, 173, 34, 209, 157, 228, 130, 35, 105, 154, 193, 108, 79, 157, 30, 144, 186, 254, 103, 85, 116, 192, 145, 68, 42, 43, 101, 137, 164, 132, 56, 132, 204, 34, 91, 127, 40, 85, 134, 192, 143, 230, 31, 30, 58, 194, 226, 222, 117, 86, 18}, +{156, 215, 183, 116, 254, 145, 183, 185, 212, 58, 237, 210, 177, 90, 220, 44, 171, 99, 86, 70, 244, 122, 160, 67, 150, 17, 61, 41, 242, 221, 203, 154, 2, 93, 115, 116, 93, 205, 172, 251, 144, 53, 65, 20, 246, 162, 62, 165, 75, 159, 79, 211, 250, 222, 41, 198, 213, 176, 156, 27, 90, 89, 185, 124, 172, 138, 10, 41, 226, 2, 42, 247, 159, 229, 132, 13, 151, 133, 103, 149, 159, 218, 20, 101, 187, 64, 236, 46, 157, 86, 147, 154, 163, 11, 209, 72, 92, 166, 104, 95, 177, 32, 145, 181, 98, 225, 97, 145, 33, 47, 22, 33, 237, 193, 27, 235, 57, 127, 62, 236, 253, 209, 111, 126, 145, 224, 158, 245}, +{47, 162, 250, 153, 169, 151, 101, 103, 40, 178, 102, 131, 226, 190, 140, 67, 92, 249, 247, 207, 154, 156, 85, 95, 7, 116, 68, 106, 40, 253, 182, 121, 136, 198, 142, 104, 234, 50, 73, 98, 140, 72, 79, 147, 189, 0, 159, 102, 190, 53, 75, 131, 249, 3, 60, 22, 62, 102, 29, 195, 190, 1, 169, 62, 52, 122, 37, 36, 39, 229, 71, 130, 77, 227, 174, 26, 87, 57, 33, 150, 97, 54, 251, 78, 114, 174, 61, 202, 119, 175, 152, 35, 59, 202, 32, 73, 196, 87, 178, 33, 231, 81, 220, 248, 46, 45, 85, 189, 198, 77, 137, 103, 168, 147, 153, 39, 224, 44, 174, 111, 61, 206, 99, 123, 223, 100, 208, 96}, +{104, 12, 225, 120, 208, 34, 141, 241, 60, 82, 172, 12, 187, 209, 188, 177, 250, 7, 37, 115, 33, 226, 68, 20, 117, 252, 192, 66, 25, 16, 216, 74, 181, 188, 180, 199, 222, 17, 97, 225, 51, 155, 138, 47, 155, 101, 172, 242, 63, 94, 224, 238, 182, 229, 140, 126, 92, 232, 155, 24, 120, 12, 60, 133, 238, 33, 30, 134, 250, 159, 210, 120, 181, 167, 133, 72, 106, 57, 34, 153, 168, 71, 43, 109, 155, 31, 226, 102, 255, 135, 35, 176, 188, 138, 232, 204, 222, 196, 61, 234, 15, 23, 237, 124, 193, 210, 57, 34, 115, 253, 62, 8, 144, 101, 31, 162, 194, 117, 134, 129, 24, 9, 204, 115, 12, 219, 102, 208}, +{164, 176, 160, 245, 62, 42, 236, 228, 41, 10, 33, 224, 129, 111, 155, 235, 19, 196, 223, 125, 4, 63, 90, 193, 238, 193, 58, 54, 240, 40, 48, 74, 202, 87, 236, 141, 252, 225, 229, 74, 227, 16, 175, 221, 100, 81, 127, 128, 200, 210, 60, 247, 100, 44, 168, 94, 121, 208, 221, 115, 240, 143, 15, 81, 51, 158, 129, 80, 65, 36, 9, 233, 142, 191, 153, 41, 168, 19, 218, 38, 8, 11, 111, 25, 77, 240, 244, 115, 183, 126, 56, 206, 128, 177, 232, 8, 239, 75, 146, 115, 139, 99, 218, 87, 37, 144, 187, 97, 207, 153, 114, 44, 188, 251, 16, 209, 166, 57, 233, 39, 214, 77, 175, 126, 155, 54, 141, 95}, +{193, 60, 4, 30, 238, 122, 124, 4, 170, 217, 231, 255, 56, 205, 138, 64, 27, 33, 163, 99, 128, 45, 92, 131, 253, 246, 237, 54, 187, 129, 164, 31, 110, 123, 199, 108, 29, 9, 234, 44, 86, 248, 189, 213, 221, 108, 106, 239, 238, 195, 246, 119, 193, 98, 56, 206, 115, 153, 92, 204, 215, 136, 103, 15, 87, 244, 62, 160, 241, 91, 77, 217, 187, 84, 83, 97, 91, 155, 143, 155, 32, 22, 36, 198, 238, 90, 214, 131, 22, 61, 12, 68, 6, 16, 212, 7, 218, 225, 32, 33, 166, 29, 11, 232, 214, 69, 177, 106, 201, 167, 253, 120, 131, 253, 13, 95, 11, 174, 22, 63, 73, 6, 51, 128, 194, 214, 84, 100}, +{37, 190, 59, 214, 215, 185, 104, 247, 88, 99, 0, 127, 109, 215, 105, 66, 109, 128, 10, 10, 109, 168, 72, 233, 57, 248, 103, 85, 247, 111, 134, 235, 153, 205, 108, 22, 191, 192, 98, 30, 170, 40, 31, 146, 42, 56, 136, 148, 215, 211, 68, 151, 181, 55, 118, 198, 41, 12, 203, 75, 132, 236, 215, 33, 149, 158, 181, 53, 243, 195, 137, 137, 177, 178, 109, 242, 169, 110, 149, 155, 94, 124, 85, 69, 32, 70, 202, 54, 48, 62, 39, 158, 222, 40, 206, 159, 61, 45, 102, 17, 65, 21, 244, 216, 130, 203, 236, 41, 65, 253, 135, 125, 121, 207, 191, 75, 3, 250, 152, 195, 242, 111, 225, 94, 226, 25, 37, 228}, +{95, 211, 122, 47, 218, 108, 154, 5, 15, 53, 173, 156, 250, 191, 123, 188, 222, 158, 219, 211, 178, 229, 233, 180, 30, 104, 238, 76, 112, 28, 50, 108, 16, 99, 46, 70, 196, 218, 164, 95, 157, 7, 237, 209, 21, 248, 27, 118, 216, 199, 121, 226, 41, 196, 253, 125, 88, 132, 179, 237, 244, 228, 243, 207, 174, 118, 54, 113, 202, 92, 184, 211, 176, 66, 130, 150, 16, 111, 215, 109, 138, 61, 47, 160, 242, 5, 112, 41, 23, 37, 106, 187, 145, 62, 54, 128, 123, 155, 192, 170, 233, 127, 20, 33, 86, 254, 11, 213, 165, 15, 31, 240, 86, 31, 90, 75, 128, 102, 128, 8, 7, 177, 159, 124, 82, 191, 106, 5}, +{148, 27, 121, 52, 71, 52, 226, 219, 241, 28, 148, 170, 227, 177, 0, 241, 123, 197, 17, 23, 90, 232, 95, 187, 125, 130, 165, 96, 125, 60, 118, 12, 104, 201, 42, 76, 94, 9, 83, 130, 159, 210, 154, 174, 31, 14, 173, 243, 157, 124, 224, 43, 176, 174, 201, 80, 38, 3, 159, 191, 12, 148, 210, 102, 13, 17, 59, 101, 121, 52, 59, 91, 172, 115, 65, 84, 236, 18, 166, 199, 192, 29, 13, 158, 89, 228, 28, 143, 78, 132, 193, 14, 158, 157, 135, 75, 19, 246, 232, 205, 142, 77, 164, 215, 138, 74, 95, 61, 146, 178, 188, 106, 144, 161, 214, 237, 47, 31, 43, 4, 49, 65, 215, 130, 19, 157, 106, 3}, +{65, 14, 132, 251, 214, 241, 187, 87, 221, 189, 193, 6, 20, 198, 69, 251, 3, 13, 60, 86, 57, 4, 183, 36, 57, 146, 221, 238, 231, 23, 122, 159, 205, 166, 158, 124, 107, 9, 108, 179, 36, 66, 133, 206, 151, 132, 226, 95, 215, 253, 237, 12, 86, 90, 177, 12, 135, 211, 128, 254, 217, 25, 60, 255, 213, 138, 247, 114, 110, 79, 136, 74, 57, 186, 73, 255, 140, 244, 111, 78, 73, 169, 24, 129, 58, 26, 144, 128, 217, 113, 153, 40, 29, 135, 34, 50, 235, 97, 154, 46, 221, 133, 28, 62, 130, 106, 27, 150, 68, 51, 49, 94, 212, 19, 69, 2, 67, 173, 166, 1, 35, 148, 134, 245, 120, 97, 253, 167}, +{64, 209, 247, 46, 99, 9, 222, 233, 11, 152, 87, 93, 61, 9, 107, 197, 202, 31, 203, 235, 217, 147, 161, 145, 130, 221, 199, 93, 93, 82, 180, 187, 174, 236, 223, 113, 212, 77, 242, 146, 185, 181, 101, 33, 162, 130, 157, 166, 0, 50, 78, 11, 96, 182, 51, 134, 252, 89, 125, 60, 214, 62, 158, 55, 100, 113, 29, 92, 192, 124, 139, 50, 84, 75, 194, 0, 15, 29, 83, 18, 195, 137, 29, 69, 136, 219, 56, 190, 145, 67, 174, 151, 102, 140, 135, 219, 195, 171, 40, 56, 5, 246, 147, 174, 142, 34, 153, 43, 183, 198, 4, 44, 252, 92, 167, 189, 1, 205, 238, 46, 190, 228, 6, 141, 16, 108, 240, 184}, +{198, 89, 51, 224, 246, 125, 121, 235, 173, 112, 235, 154, 43, 110, 41, 132, 22, 187, 75, 65, 174, 140, 190, 23, 248, 46, 143, 241, 22, 49, 243, 48, 135, 91, 26, 58, 234, 192, 140, 243, 209, 230, 137, 165, 82, 85, 161, 168, 200, 77, 123, 231, 228, 45, 76, 146, 84, 86, 66, 16, 255, 213, 42, 134, 98, 110, 223, 4, 227, 140, 59, 151, 136, 220, 207, 188, 135, 31, 176, 11, 255, 37, 2, 155, 64, 165, 43, 236, 7, 19, 156, 24, 156, 71, 116, 30, 167, 213, 224, 231, 89, 97, 229, 63, 16, 84, 89, 232, 171, 81, 238, 21, 94, 30, 28, 74, 158, 123, 173, 157, 87, 141, 144, 187, 213, 154, 170, 248}, +{178, 44, 204, 156, 178, 145, 3, 41, 159, 228, 113, 40, 161, 253, 39, 214, 36, 249, 122, 159, 223, 105, 252, 136, 85, 100, 168, 43, 146, 96, 85, 108, 206, 163, 169, 235, 243, 237, 115, 180, 3, 80, 29, 138, 239, 20, 160, 201, 176, 231, 126, 225, 226, 134, 25, 125, 21, 167, 38, 67, 72, 124, 125, 250, 23, 156, 111, 138, 147, 193, 180, 42, 127, 178, 210, 11, 248, 120, 35, 62, 38, 82, 200, 25, 62, 111, 178, 134, 31, 112, 224, 182, 150, 148, 251, 135, 146, 63, 244, 76, 127, 215, 35, 181, 132, 0, 75, 27, 51, 43, 179, 97, 1, 62, 38, 250, 87, 4, 235, 13, 4, 23, 110, 116, 212, 206, 122, 140}, +{59, 219, 29, 55, 58, 225, 225, 94, 181, 62, 69, 199, 85, 252, 145, 150, 16, 168, 200, 185, 35, 214, 204, 133, 14, 199, 46, 99, 118, 88, 69, 149, 194, 100, 82, 106, 204, 253, 187, 50, 44, 245, 50, 196, 116, 173, 104, 139, 234, 75, 127, 149, 130, 243, 116, 234, 194, 202, 79, 184, 249, 108, 197, 124, 34, 113, 162, 3, 162, 7, 15, 47, 58, 196, 197, 150, 230, 174, 20, 201, 226, 95, 20, 231, 96, 234, 47, 147, 108, 121, 207, 151, 44, 139, 188, 251, 45, 183, 82, 148, 0, 197, 98, 225, 236, 140, 163, 25, 194, 86, 214, 11, 174, 1, 207, 132, 172, 158, 2, 50, 155, 224, 185, 108, 96, 74, 181, 64}, +{98, 141, 72, 96, 47, 23, 50, 222, 56, 246, 21, 106, 3, 251, 139, 14, 177, 79, 67, 169, 245, 87, 58, 75, 209, 5, 172, 39, 49, 187, 98, 246, 109, 154, 183, 146, 136, 220, 74, 202, 132, 112, 254, 207, 230, 39, 224, 27, 186, 119, 95, 51, 137, 181, 141, 123, 75, 99, 252, 248, 67, 161, 106, 26, 215, 191, 32, 48, 192, 170, 175, 37, 26, 178, 143, 16, 190, 232, 79, 58, 127, 246, 210, 206, 170, 99, 30, 186, 84, 151, 229, 202, 208, 133, 216, 218, 123, 107, 75, 228, 26, 187, 129, 8, 191, 29, 49, 160, 253, 190, 92, 158, 96, 207, 98, 246, 196, 1, 118, 159, 7, 113, 198, 201, 41, 194, 174, 133}, +{36, 210, 215, 83, 209, 197, 171, 241, 175, 91, 239, 112, 5, 0, 79, 164, 12, 114, 212, 82, 80, 189, 61, 211, 250, 185, 206, 159, 179, 76, 89, 246, 150, 127, 237, 190, 232, 32, 53, 143, 63, 178, 129, 252, 49, 72, 165, 58, 129, 214, 181, 50, 67, 72, 192, 244, 108, 48, 243, 29, 19, 207, 174, 10, 152, 120, 124, 233, 150, 157, 171, 190, 19, 151, 44, 125, 188, 167, 102, 252, 73, 47, 156, 219, 143, 17, 189, 40, 36, 224, 76, 153, 213, 207, 208, 78, 189, 93, 99, 55, 94, 151, 80, 118, 104, 90, 14, 159, 160, 154, 117, 114, 81, 176, 143, 141, 217, 115, 202, 80, 50, 11, 181, 73, 192, 149, 13, 143}, +{101, 242, 142, 141, 173, 136, 37, 34, 13, 131, 177, 85, 141, 2, 94, 246, 169, 12, 251, 183, 40, 18, 31, 100, 139, 214, 191, 45, 252, 193, 36, 16, 16, 178, 245, 153, 142, 115, 35, 97, 27, 86, 236, 79, 237, 217, 154, 38, 180, 67, 147, 125, 192, 78, 73, 157, 164, 138, 214, 85, 149, 211, 189, 208, 217, 45, 10, 173, 183, 218, 49, 241, 64, 197, 17, 144, 183, 49, 250, 101, 85, 29, 242, 173, 248, 11, 230, 153, 235, 49, 120, 193, 205, 225, 16, 167, 94, 210, 180, 166, 150, 179, 155, 85, 56, 43, 209, 121, 217, 45, 92, 77, 73, 196, 133, 110, 200, 160, 155, 182, 49, 210, 113, 15, 24, 149, 72, 64}, +{140, 71, 73, 152, 48, 231, 167, 96, 239, 51, 151, 60, 174, 184, 112, 194, 73, 142, 135, 57, 160, 127, 74, 138, 130, 28, 144, 171, 229, 209, 149, 68, 17, 66, 41, 74, 110, 237, 209, 185, 80, 247, 147, 249, 248, 116, 251, 115, 24, 158, 173, 195, 190, 76, 223, 23, 92, 148, 68, 134, 96, 40, 225, 240, 185, 60, 95, 235, 67, 181, 51, 250, 37, 125, 133, 213, 46, 218, 179, 184, 226, 242, 106, 183, 116, 46, 99, 42, 138, 139, 29, 94, 109, 89, 64, 227, 149, 21, 40, 172, 189, 190, 125, 2, 44, 28, 219, 183, 89, 65, 159, 4, 209, 107, 163, 127, 250, 24, 199, 70, 131, 193, 132, 128, 114, 233, 165, 60}, +{99, 125, 240, 221, 43, 53, 71, 17, 235, 51, 46, 185, 223, 55, 201, 52, 210, 134, 206, 89, 181, 46, 74, 8, 23, 233, 19, 223, 220, 218, 214, 222, 189, 199, 62, 9, 196, 93, 107, 93, 58, 26, 204, 4, 60, 91, 205, 49, 21, 97, 0, 122, 177, 158, 113, 185, 4, 42, 248, 19, 162, 2, 74, 144, 24, 206, 182, 128, 46, 19, 48, 189, 104, 149, 14, 238, 75, 46, 178, 233, 159, 80, 69, 158, 185, 96, 240, 60, 138, 153, 235, 106, 16, 229, 203, 140, 247, 54, 62, 198, 110, 85, 134, 240, 131, 74, 11, 234, 6, 212, 34, 48, 171, 42, 216, 24, 241, 172, 35, 159, 150, 121, 255, 2, 85, 137, 49, 51}, +{170, 188, 52, 185, 180, 17, 117, 177, 82, 13, 125, 108, 70, 144, 44, 254, 215, 192, 166, 124, 43, 99, 38, 230, 230, 175, 16, 118, 144, 172, 111, 239, 138, 105, 132, 140, 183, 225, 23, 130, 144, 43, 61, 59, 4, 214, 113, 151, 52, 191, 183, 90, 186, 223, 118, 242, 181, 146, 93, 219, 75, 189, 68, 221, 155, 160, 96, 145, 59, 161, 69, 118, 101, 134, 46, 89, 228, 100, 120, 39, 185, 71, 118, 141, 150, 23, 137, 245, 45, 211, 191, 79, 213, 163, 39, 32, 119, 183, 153, 152, 131, 233, 21, 160, 12, 90, 44, 97, 142, 60, 150, 164, 101, 252, 245, 63, 179, 102, 217, 114, 80, 149, 98, 143, 82, 83, 222, 64}, +{120, 51, 75, 184, 137, 246, 13, 218, 103, 154, 11, 184, 10, 251, 177, 119, 193, 73, 13, 102, 194, 38, 166, 141, 109, 177, 75, 112, 224, 99, 145, 204, 31, 5, 142, 235, 130, 6, 182, 83, 169, 108, 221, 88, 253, 178, 79, 46, 223, 17, 230, 211, 19, 153, 143, 35, 192, 52, 208, 81, 171, 59, 50, 180, 22, 87, 187, 52, 220, 63, 181, 53, 164, 124, 168, 161, 89, 35, 140, 136, 219, 144, 193, 121, 243, 31, 153, 71, 188, 221, 125, 3, 117, 152, 241, 127, 244, 150, 184, 172, 66, 138, 2, 123, 171, 112, 94, 19, 182, 225, 196, 240, 210, 210, 251, 132, 60, 240, 245, 179, 2, 128, 102, 50, 35, 246, 188, 167}, +{171, 30, 244, 184, 161, 242, 25, 227, 140, 46, 112, 123, 122, 165, 13, 217, 62, 83, 82, 208, 118, 48, 174, 198, 126, 110, 118, 139, 38, 162, 90, 206, 154, 159, 225, 30, 171, 145, 188, 166, 149, 222, 229, 59, 136, 199, 33, 149, 86, 82, 114, 55, 251, 99, 223, 61, 151, 38, 214, 118, 214, 129, 210, 91, 76, 127, 54, 141, 71, 91, 182, 41, 212, 90, 207, 28, 53, 176, 115, 154, 248, 100, 230, 108, 101, 114, 132, 87, 49, 123, 194, 11, 172, 211, 187, 228, 37, 85, 78, 120, 32, 158, 155, 41, 118, 177, 73, 170, 199, 50, 112, 116, 149, 210, 39, 255, 77, 79, 60, 232, 198, 231, 184, 252, 201, 74, 62, 173}, +{107, 215, 58, 192, 112, 8, 190, 93, 31, 52, 176, 110, 202, 224, 49, 208, 152, 127, 37, 222, 61, 99, 143, 45, 207, 133, 37, 35, 72, 149, 213, 224, 136, 68, 147, 15, 69, 179, 162, 83, 136, 117, 138, 231, 156, 216, 46, 220, 12, 215, 153, 180, 107, 92, 43, 70, 24, 101, 111, 51, 126, 13, 124, 46, 216, 245, 185, 1, 241, 180, 152, 227, 79, 154, 68, 41, 171, 228, 63, 100, 109, 93, 89, 42, 93, 30, 226, 133, 196, 194, 200, 253, 12, 241, 141, 88, 47, 246, 146, 76, 60, 88, 93, 218, 207, 175, 72, 38, 183, 234, 191, 17, 249, 18, 193, 127, 230, 89, 118, 164, 67, 167, 104, 52, 23, 250, 126, 120}, +{106, 157, 80, 150, 49, 230, 244, 220, 171, 148, 89, 58, 224, 23, 213, 173, 252, 146, 86, 6, 95, 114, 71, 148, 252, 85, 234, 95, 33, 69, 192, 212, 63, 192, 167, 220, 236, 151, 111, 125, 16, 28, 75, 239, 223, 0, 147, 138, 93, 235, 114, 162, 0, 110, 17, 105, 113, 121, 155, 5, 43, 247, 252, 250, 196, 148, 177, 146, 53, 247, 190, 115, 102, 75, 31, 86, 21, 119, 135, 51, 178, 220, 141, 10, 160, 129, 189, 214, 135, 53, 82, 67, 33, 195, 236, 158, 71, 52, 154, 168, 163, 122, 207, 88, 180, 201, 88, 206, 150, 66, 93, 99, 200, 2, 184, 55, 98, 143, 227, 56, 77, 6, 253, 223, 237, 190, 133, 19}, +{153, 215, 150, 126, 151, 21, 232, 175, 239, 213, 148, 12, 124, 15, 75, 231, 177, 143, 71, 96, 77, 54, 70, 176, 207, 196, 172, 39, 115, 223, 225, 89, 138, 9, 103, 69, 80, 56, 216, 7, 3, 230, 139, 31, 18, 219, 154, 118, 44, 36, 58, 81, 114, 33, 161, 161, 241, 16, 136, 92, 102, 39, 75, 182, 124, 234, 127, 37, 35, 64, 223, 179, 240, 44, 129, 178, 198, 90, 64, 109, 79, 51, 15, 244, 37, 50, 234, 90, 49, 71, 141, 234, 155, 3, 15, 199, 113, 73, 201, 61, 194, 71, 76, 166, 141, 123, 202, 69, 44, 92, 153, 163, 192, 31, 92, 203, 164, 47, 119, 226, 3, 167, 102, 130, 57, 23, 246, 80}, +{12, 68, 63, 232, 160, 5, 233, 243, 209, 103, 42, 116, 226, 5, 136, 236, 44, 103, 66, 89, 211, 174, 125, 206, 223, 47, 55, 55, 171, 36, 57, 255, 178, 149, 123, 23, 50, 186, 111, 187, 233, 178, 1, 130, 77, 246, 85, 102, 132, 103, 214, 157, 246, 44, 68, 235, 140, 49, 56, 43, 212, 42, 250, 64, 193, 133, 223, 184, 27, 69, 133, 180, 81, 109, 81, 120, 216, 121, 242, 83, 198, 241, 105, 204, 131, 158, 70, 105, 138, 161, 248, 246, 233, 165, 170, 222, 251, 132, 98, 146, 59, 93, 216, 255, 110, 166, 191, 42, 99, 207, 28, 89, 201, 254, 17, 202, 7, 51, 229, 90, 111, 179, 237, 136, 245, 187, 150, 56}, +{98, 173, 38, 48, 30, 1, 26, 3, 79, 252, 66, 114, 115, 251, 189, 53, 232, 104, 17, 16, 32, 207, 34, 84, 176, 159, 181, 19, 193, 70, 73, 11, 218, 80, 185, 51, 40, 209, 129, 93, 170, 163, 85, 59, 108, 87, 225, 214, 111, 19, 98, 151, 212, 225, 124, 18, 86, 151, 157, 56, 55, 140, 40, 3, 136, 157, 21, 9, 8, 182, 253, 153, 82, 32, 187, 17, 241, 15, 25, 72, 189, 137, 161, 5, 91, 193, 74, 184, 158, 5, 217, 139, 174, 252, 162, 209, 18, 98, 166, 191, 224, 146, 43, 137, 13, 125, 208, 233, 77, 172, 187, 31, 47, 5, 195, 127, 4, 95, 163, 226, 46, 150, 252, 180, 8, 77, 95, 221}, +{102, 135, 236, 133, 84, 9, 40, 56, 88, 58, 133, 53, 200, 131, 217, 55, 206, 45, 27, 187, 173, 169, 137, 149, 41, 180, 128, 153, 213, 172, 187, 186, 24, 212, 36, 48, 108, 241, 176, 132, 188, 46, 33, 89, 213, 113, 103, 137, 249, 239, 30, 130, 20, 30, 72, 109, 6, 245, 247, 64, 235, 145, 105, 206, 117, 106, 225, 68, 133, 24, 84, 75, 248, 153, 38, 47, 74, 209, 172, 79, 138, 8, 190, 27, 70, 205, 46, 108, 154, 213, 224, 189, 62, 198, 8, 60, 144, 230, 208, 204, 242, 141, 45, 111, 185, 156, 169, 66, 66, 76, 128, 199, 189, 217, 141, 136, 14, 80, 84, 72, 95, 250, 74, 178, 237, 220, 231, 97}, +{200, 79, 78, 63, 3, 8, 67, 178, 222, 22, 76, 223, 141, 224, 241, 169, 178, 250, 64, 92, 148, 36, 67, 56, 129, 222, 97, 112, 148, 233, 42, 209, 98, 57, 223, 154, 61, 61, 227, 63, 77, 136, 127, 100, 54, 101, 240, 70, 109, 36, 93, 67, 81, 78, 10, 142, 41, 92, 219, 98, 178, 237, 171, 126, 90, 48, 108, 124, 11, 235, 118, 222, 3, 87, 90, 113, 9, 106, 222, 210, 26, 176, 88, 65, 91, 84, 255, 35, 105, 29, 185, 1, 31, 93, 227, 184, 42, 109, 165, 245, 44, 186, 127, 216, 31, 141, 32, 9, 88, 141, 202, 50, 95, 71, 214, 253, 214, 68, 247, 197, 195, 69, 3, 172, 49, 57, 219, 104}, +{123, 87, 203, 37, 231, 2, 36, 40, 102, 81, 142, 248, 3, 230, 108, 124, 227, 227, 209, 173, 162, 87, 182, 27, 29, 177, 25, 203, 204, 29, 243, 84, 200, 82, 53, 226, 29, 131, 169, 151, 254, 78, 196, 196, 133, 190, 222, 69, 121, 60, 207, 54, 222, 1, 15, 53, 8, 86, 124, 40, 171, 33, 252, 19, 84, 61, 106, 16, 105, 40, 212, 59, 107, 214, 82, 203, 215, 253, 99, 136, 36, 26, 246, 70, 128, 155, 96, 129, 71, 216, 102, 109, 109, 178, 123, 145, 71, 187, 52, 186, 223, 203, 226, 104, 192, 158, 88, 181, 110, 230, 5, 76, 48, 55, 213, 143, 5, 127, 63, 200, 134, 155, 10, 195, 220, 174, 66, 209}, +{167, 130, 14, 227, 235, 26, 116, 250, 150, 23, 119, 24, 210, 142, 46, 176, 135, 38, 153, 96, 202, 108, 64, 221, 83, 50, 87, 7, 94, 191, 167, 217, 48, 148, 228, 49, 134, 202, 1, 162, 239, 186, 135, 62, 199, 246, 212, 208, 63, 100, 198, 78, 219, 92, 141, 9, 95, 146, 18, 147, 251, 246, 29, 199, 234, 79, 152, 79, 41, 233, 165, 166, 120, 13, 220, 38, 78, 167, 66, 25, 132, 254, 112, 154, 94, 119, 194, 34, 132, 77, 228, 212, 175, 158, 129, 231, 3, 76, 18, 219, 212, 102, 4, 134, 36, 81, 84, 204, 211, 164, 220, 154, 11, 216, 51, 232, 157, 153, 212, 153, 107, 202, 125, 30, 215, 146, 244, 60}, +{198, 1, 57, 205, 14, 13, 129, 176, 177, 96, 51, 187, 49, 167, 153, 15, 8, 185, 207, 57, 158, 236, 152, 28, 35, 38, 220, 73, 250, 54, 21, 246, 7, 203, 5, 133, 222, 162, 107, 12, 155, 102, 95, 159, 142, 128, 243, 169, 132, 13, 30, 116, 101, 215, 219, 173, 205, 60, 180, 243, 106, 193, 240, 230, 100, 244, 233, 126, 201, 169, 173, 39, 226, 16, 218, 255, 15, 234, 210, 32, 126, 150, 41, 144, 193, 61, 107, 166, 103, 141, 212, 174, 109, 160, 26, 26, 253, 183, 141, 226, 136, 176, 3, 99, 139, 67, 44, 88, 144, 201, 153, 255, 78, 222, 113, 174, 147, 176, 251, 205, 25, 50, 158, 193, 230, 31, 87, 243}, +{187, 27, 242, 238, 32, 236, 33, 119, 17, 180, 159, 44, 24, 92, 232, 130, 181, 159, 20, 31, 124, 198, 241, 118, 148, 199, 46, 37, 73, 163, 169, 252, 165, 65, 253, 48, 118, 213, 17, 187, 212, 82, 164, 22, 165, 226, 150, 84, 239, 72, 13, 67, 28, 237, 66, 16, 68, 27, 210, 183, 222, 88, 4, 234, 150, 145, 157, 151, 7, 170, 250, 53, 102, 21, 243, 9, 76, 97, 211, 205, 248, 247, 68, 37, 220, 237, 215, 72, 140, 236, 222, 117, 55, 137, 243, 203, 227, 212, 64, 58, 43, 5, 189, 6, 133, 114, 241, 195, 193, 165, 202, 218, 113, 97, 226, 109, 78, 238, 188, 211, 254, 46, 34, 209, 34, 23, 147, 168}, +{167, 175, 222, 55, 109, 105, 82, 246, 160, 14, 82, 26, 98, 161, 202, 51, 119, 42, 188, 25, 190, 9, 113, 138, 64, 145, 175, 87, 244, 131, 67, 129, 151, 11, 226, 148, 19, 197, 228, 33, 124, 168, 229, 43, 135, 199, 16, 41, 244, 189, 56, 193, 91, 13, 79, 209, 207, 250, 34, 127, 247, 166, 68, 137, 9, 207, 246, 51, 218, 80, 240, 111, 89, 238, 90, 196, 216, 242, 238, 75, 168, 116, 137, 130, 58, 136, 121, 228, 205, 56, 146, 18, 134, 92, 47, 141, 88, 113, 20, 73, 172, 2, 115, 109, 126, 181, 11, 168, 71, 223, 132, 130, 64, 249, 225, 118, 43, 196, 130, 21, 9, 185, 37, 107, 79, 87, 215, 194}, +{46, 78, 60, 17, 30, 220, 74, 206, 52, 120, 197, 211, 192, 51, 124, 125, 118, 8, 249, 148, 157, 197, 206, 117, 50, 75, 25, 244, 64, 114, 199, 170, 116, 86, 142, 79, 191, 133, 22, 95, 49, 182, 125, 80, 23, 46, 7, 69, 230, 45, 117, 7, 54, 166, 168, 248, 82, 45, 241, 161, 200, 45, 80, 166, 114, 77, 108, 250, 188, 196, 103, 34, 131, 151, 64, 142, 243, 142, 158, 196, 73, 148, 126, 43, 227, 215, 6, 11, 126, 106, 76, 79, 103, 122, 248, 160, 162, 99, 181, 49, 39, 230, 220, 127, 218, 31, 100, 52, 178, 20, 28, 167, 154, 30, 146, 39, 27, 15, 142, 77, 178, 164, 240, 146, 190, 148, 181, 178}, +{19, 12, 8, 8, 237, 173, 199, 243, 157, 208, 16, 90, 137, 162, 241, 52, 3, 152, 25, 157, 85, 194, 24, 180, 83, 71, 86, 93, 235, 52, 164, 190, 102, 213, 99, 17, 44, 208, 174, 191, 74, 227, 200, 60, 146, 182, 215, 87, 83, 158, 253, 60, 225, 82, 4, 109, 242, 156, 77, 40, 6, 102, 74, 131, 163, 198, 120, 20, 36, 59, 167, 170, 181, 211, 35, 110, 243, 50, 173, 67, 127, 64, 63, 111, 51, 242, 192, 255, 65, 152, 159, 16, 135, 177, 206, 107, 14, 86, 131, 3, 49, 235, 4, 171, 68, 96, 179, 106, 106, 242, 238, 3, 35, 165, 65, 21, 0, 113, 213, 235, 122, 40, 116, 60, 146, 33, 79, 67}, +{52, 57, 5, 247, 242, 14, 81, 111, 222, 183, 93, 49, 52, 145, 16, 139, 88, 160, 201, 105, 9, 167, 185, 229, 240, 196, 128, 199, 182, 191, 195, 232, 208, 37, 15, 2, 233, 181, 134, 249, 102, 216, 65, 44, 14, 62, 58, 106, 226, 88, 215, 44, 142, 217, 113, 145, 65, 56, 250, 209, 254, 158, 240, 242, 166, 50, 163, 107, 147, 23, 68, 162, 161, 214, 38, 191, 53, 49, 155, 164, 74, 231, 72, 133, 160, 208, 209, 80, 192, 246, 225, 30, 197, 240, 255, 79, 159, 9, 135, 32, 27, 234, 192, 190, 61, 60, 149, 234, 200, 176, 157, 137, 140, 111, 95, 25, 159, 77, 64, 130, 127, 45, 40, 91, 92, 95, 108, 151}, +{184, 193, 138, 102, 134, 249, 75, 25, 186, 34, 13, 43, 70, 148, 108, 58, 198, 189, 131, 67, 122, 74, 177, 84, 123, 64, 93, 230, 86, 96, 223, 144, 133, 95, 38, 3, 150, 88, 22, 79, 190, 49, 163, 208, 183, 34, 111, 77, 221, 182, 30, 64, 9, 23, 54, 144, 60, 167, 197, 20, 36, 96, 233, 46, 160, 77, 168, 204, 130, 246, 72, 45, 106, 236, 154, 116, 191, 215, 165, 39, 146, 1, 26, 9, 78, 244, 92, 244, 66, 152, 19, 28, 33, 7, 240, 179, 67, 152, 104, 59, 48, 179, 224, 204, 4, 81, 58, 49, 188, 135, 32, 194, 118, 177, 195, 169, 209, 219, 64, 56, 10, 190, 127, 215, 229, 209, 192, 22}, +{187, 28, 41, 230, 75, 116, 166, 63, 193, 140, 177, 152, 122, 109, 67, 216, 98, 69, 202, 239, 53, 105, 202, 224, 121, 232, 128, 118, 101, 214, 218, 124, 103, 88, 70, 86, 239, 184, 94, 64, 140, 180, 168, 43, 53, 38, 216, 85, 111, 171, 231, 244, 174, 12, 250, 5, 90, 207, 238, 236, 161, 111, 58, 48, 110, 221, 145, 36, 186, 31, 234, 15, 123, 124, 244, 230, 58, 204, 81, 135, 34, 119, 193, 145, 162, 248, 215, 22, 245, 189, 239, 219, 60, 158, 151, 64, 80, 178, 111, 249, 167, 49, 72, 6, 43, 74, 61, 132, 214, 176, 33, 45, 41, 64, 207, 123, 10, 100, 18, 128, 52, 53, 33, 100, 61, 242, 189, 94}, +{44, 47, 11, 123, 120, 142, 13, 56, 57, 145, 175, 188, 220, 43, 32, 66, 13, 222, 160, 72, 128, 28, 25, 129, 85, 110, 126, 235, 21, 86, 7, 161, 85, 174, 55, 244, 248, 180, 114, 234, 27, 43, 229, 10, 37, 65, 12, 35, 225, 15, 223, 144, 100, 117, 116, 74, 37, 240, 75, 155, 75, 28, 84, 96, 225, 38, 50, 24, 94, 8, 239, 217, 91, 99, 97, 46, 102, 240, 98, 235, 58, 187, 130, 53, 104, 30, 250, 219, 34, 125, 208, 102, 17, 25, 14, 57, 63, 184, 70, 132, 54, 204, 115, 236, 97, 140, 245, 165, 244, 199, 35, 253, 7, 64, 180, 41, 80, 55, 106, 218, 151, 69, 123, 47, 74, 153, 193, 106}, +{181, 134, 12, 209, 197, 19, 45, 90, 161, 189, 126, 122, 146, 34, 195, 253, 222, 139, 129, 179, 149, 43, 78, 220, 153, 55, 248, 101, 27, 56, 97, 25, 227, 111, 189, 242, 137, 226, 23, 158, 101, 193, 203, 139, 194, 62, 108, 103, 203, 66, 222, 184, 53, 66, 21, 0, 199, 200, 121, 221, 154, 40, 168, 221, 143, 198, 247, 94, 73, 227, 191, 90, 63, 120, 187, 128, 251, 3, 113, 179, 102, 6, 152, 105, 96, 51, 121, 238, 169, 24, 205, 14, 37, 197, 221, 215, 236, 220, 62, 70, 151, 94, 124, 125, 32, 23, 243, 135, 165, 106, 40, 168, 251, 153, 115, 41, 229, 90, 174, 24, 136, 3, 14, 95, 54, 55, 84, 34}, +{195, 247, 255, 24, 182, 84, 161, 105, 192, 1, 123, 53, 251, 78, 122, 213, 62, 224, 229, 26, 243, 11, 255, 245, 111, 126, 121, 188, 3, 7, 109, 58, 195, 76, 221, 225, 57, 7, 40, 254, 48, 172, 59, 248, 11, 152, 205, 5, 33, 139, 12, 116, 22, 95, 13, 40, 111, 30, 112, 209, 176, 240, 104, 169, 165, 81, 168, 42, 108, 10, 81, 30, 78, 233, 155, 251, 142, 200, 62, 201, 117, 231, 185, 13, 60, 89, 125, 88, 209, 153, 42, 135, 153, 24, 124, 152, 252, 89, 6, 45, 132, 247, 130, 10, 77, 214, 215, 195, 193, 38, 173, 29, 193, 50, 170, 154, 214, 10, 39, 86, 105, 133, 103, 63, 187, 33, 60, 208}, +{100, 30, 54, 249, 255, 201, 163, 138, 122, 12, 147, 76, 230, 239, 249, 113, 141, 99, 34, 90, 23, 190, 212, 168, 74, 19, 129, 214, 62, 182, 8, 107, 214, 59, 11, 163, 62, 78, 1, 166, 186, 224, 218, 198, 8, 62, 168, 206, 154, 139, 134, 246, 93, 15, 101, 231, 186, 166, 149, 66, 195, 79, 83, 220, 222, 29, 66, 90, 127, 67, 220, 220, 185, 206, 17, 75, 255, 179, 43, 81, 236, 174, 219, 159, 249, 228, 23, 64, 148, 177, 32, 131, 184, 194, 24, 81, 185, 31, 144, 163, 6, 174, 184, 104, 9, 82, 155, 127, 142, 35, 0, 225, 86, 231, 118, 137, 130, 20, 10, 74, 68, 243, 99, 254, 210, 67, 118, 242}, +{140, 166, 208, 251, 103, 91, 24, 111, 138, 104, 79, 217, 22, 237, 85, 27, 39, 116, 230, 112, 99, 191, 146, 234, 243, 205, 31, 181, 104, 227, 187, 250, 150, 89, 49, 134, 103, 149, 32, 87, 222, 247, 8, 177, 31, 203, 74, 233, 97, 83, 61, 148, 56, 188, 209, 210, 157, 39, 234, 78, 245, 240, 118, 156, 154, 156, 216, 193, 63, 119, 174, 85, 223, 4, 43, 169, 17, 79, 212, 229, 108, 159, 103, 61, 106, 48, 7, 191, 114, 255, 197, 134, 53, 120, 29, 13, 156, 37, 156, 184, 113, 135, 42, 145, 145, 0, 216, 89, 17, 143, 205, 75, 220, 56, 135, 214, 121, 10, 218, 109, 209, 18, 87, 92, 215, 191, 241, 121}, +{34, 205, 151, 44, 43, 210, 232, 166, 189, 107, 161, 201, 46, 41, 162, 127, 97, 45, 247, 140, 248, 224, 247, 189, 174, 160, 18, 42, 149, 185, 169, 208, 191, 87, 15, 68, 215, 146, 50, 178, 223, 228, 144, 92, 244, 72, 208, 217, 0, 110, 175, 74, 212, 114, 250, 76, 213, 105, 126, 130, 105, 203, 222, 63, 40, 174, 34, 43, 125, 173, 237, 228, 24, 6, 230, 243, 193, 43, 70, 172, 195, 194, 101, 204, 92, 23, 91, 99, 102, 103, 132, 255, 134, 164, 21, 22, 131, 208, 27, 132, 170, 176, 135, 178, 127, 198, 64, 221, 72, 173, 62, 105, 5, 69, 20, 22, 168, 208, 11, 22, 130, 173, 75, 131, 111, 193, 47, 93}, +{86, 72, 91, 233, 58, 83, 210, 220, 15, 204, 220, 60, 119, 6, 195, 84, 75, 209, 116, 4, 64, 217, 237, 125, 109, 217, 18, 133, 20, 11, 188, 105, 199, 182, 54, 138, 193, 250, 135, 103, 245, 31, 64, 105, 8, 132, 13, 20, 47, 206, 28, 50, 244, 142, 213, 165, 169, 169, 0, 143, 17, 55, 226, 213, 131, 117, 80, 160, 140, 77, 167, 62, 82, 70, 187, 131, 14, 147, 218, 11, 215, 6, 234, 201, 137, 10, 8, 91, 66, 169, 107, 165, 120, 218, 41, 67, 100, 68, 126, 239, 144, 54, 22, 142, 160, 218, 101, 208, 26, 177, 224, 59, 5, 92, 44, 212, 106, 169, 187, 40, 225, 92, 32, 53, 184, 30, 70, 26}, +{207, 247, 102, 216, 56, 126, 127, 153, 70, 84, 66, 105, 116, 156, 118, 28, 211, 86, 156, 138, 92, 20, 65, 203, 16, 69, 220, 197, 14, 138, 84, 156, 227, 178, 144, 28, 176, 211, 83, 179, 80, 186, 121, 7, 147, 198, 14, 65, 102, 188, 57, 136, 55, 44, 207, 159, 127, 76, 68, 208, 36, 28, 57, 83, 94, 186, 65, 147, 9, 158, 45, 70, 203, 13, 197, 12, 202, 119, 241, 50, 99, 174, 33, 142, 71, 83, 50, 180, 203, 30, 233, 218, 134, 3, 12, 182, 142, 50, 141, 35, 102, 125, 202, 167, 96, 230, 84, 21, 152, 44, 137, 73, 78, 10, 246, 132, 170, 187, 156, 195, 105, 17, 196, 49, 237, 220, 153, 242}, +{44, 12, 41, 172, 36, 107, 20, 153, 78, 128, 68, 100, 68, 255, 226, 35, 123, 244, 23, 167, 82, 90, 220, 113, 116, 0, 186, 182, 81, 95, 213, 156, 209, 188, 221, 206, 92, 240, 70, 92, 115, 119, 196, 166, 16, 180, 9, 177, 115, 39, 233, 140, 92, 160, 216, 87, 246, 250, 175, 193, 163, 232, 58, 61, 156, 122, 231, 30, 72, 211, 42, 136, 253, 22, 109, 127, 0, 32, 0, 247, 107, 150, 32, 94, 67, 53, 134, 142, 156, 93, 229, 143, 57, 197, 166, 11, 45, 102, 221, 147, 170, 143, 101, 165, 122, 25, 61, 102, 159, 79, 130, 33, 12, 13, 137, 255, 50, 233, 155, 179, 198, 244, 133, 149, 54, 239, 76, 222}, +{148, 112, 143, 221, 172, 232, 124, 190, 214, 7, 36, 98, 145, 91, 88, 235, 131, 95, 222, 10, 54, 34, 168, 20, 161, 70, 194, 192, 193, 55, 246, 16, 207, 138, 189, 62, 109, 86, 215, 115, 97, 148, 243, 2, 121, 168, 168, 139, 122, 183, 163, 205, 61, 83, 211, 20, 60, 226, 48, 232, 32, 141, 175, 205, 180, 120, 225, 22, 164, 106, 216, 186, 252, 182, 11, 120, 22, 157, 109, 64, 30, 163, 121, 97, 180, 55, 59, 245, 238, 147, 39, 56, 114, 214, 116, 80, 1, 174, 55, 153, 208, 251, 115, 131, 196, 8, 160, 108, 41, 108, 48, 71, 203, 245, 50, 41, 125, 135, 131, 86, 204, 42, 245, 80, 56, 68, 145, 78}, +{165, 35, 113, 73, 131, 11, 4, 73, 15, 135, 231, 22, 197, 198, 178, 80, 101, 54, 240, 1, 193, 236, 168, 132, 33, 84, 167, 215, 172, 178, 177, 66, 52, 223, 62, 95, 92, 251, 34, 80, 10, 240, 138, 92, 115, 185, 76, 255, 118, 207, 151, 88, 59, 29, 7, 65, 244, 108, 132, 236, 124, 137, 214, 138, 128, 132, 178, 184, 177, 228, 199, 255, 98, 27, 69, 28, 255, 17, 123, 58, 237, 144, 141, 158, 39, 23, 183, 220, 140, 153, 6, 195, 89, 87, 169, 88, 233, 64, 232, 184, 182, 134, 224, 0, 134, 199, 118, 244, 190, 249, 80, 156, 135, 69, 241, 135, 72, 121, 51, 224, 197, 15, 35, 13, 155, 198, 209, 161}, +{141, 74, 27, 214, 179, 158, 228, 99, 60, 29, 215, 123, 32, 84, 141, 158, 108, 112, 242, 255, 17, 116, 213, 22, 220, 185, 247, 112, 141, 195, 95, 62, 191, 55, 38, 249, 126, 103, 125, 125, 63, 2, 135, 17, 96, 163, 249, 131, 216, 94, 234, 222, 253, 164, 235, 37, 18, 154, 135, 218, 36, 176, 65, 92, 11, 133, 201, 233, 3, 7, 113, 197, 120, 223, 185, 254, 116, 154, 68, 255, 126, 100, 95, 209, 94, 51, 34, 104, 165, 88, 215, 161, 33, 161, 141, 132, 117, 112, 0, 206, 81, 50, 55, 121, 32, 112, 174, 223, 10, 5, 174, 31, 216, 142, 185, 110, 225, 60, 38, 36, 84, 117, 16, 148, 4, 48, 104, 229}, +{197, 211, 130, 213, 207, 145, 121, 90, 74, 151, 246, 65, 67, 88, 87, 18, 6, 83, 106, 252, 203, 183, 192, 38, 143, 70, 133, 158, 128, 221, 181, 151, 20, 22, 40, 2, 238, 255, 233, 226, 79, 138, 227, 230, 74, 71, 51, 40, 173, 214, 13, 229, 181, 11, 234, 111, 115, 8, 7, 153, 36, 94, 251, 34, 80, 11, 255, 210, 238, 38, 99, 252, 215, 234, 85, 90, 140, 201, 154, 125, 126, 118, 24, 21, 0, 119, 15, 238, 189, 126, 175, 96, 170, 58, 101, 138, 195, 85, 205, 153, 5, 213, 91, 92, 0, 172, 207, 101, 67, 28, 45, 207, 163, 145, 125, 81, 23, 254, 102, 5, 60, 202, 5, 87, 96, 230, 207, 123}, +{103, 51, 215, 97, 51, 88, 121, 176, 93, 112, 228, 137, 105, 46, 4, 206, 223, 163, 39, 173, 9, 211, 255, 104, 232, 133, 26, 41, 0, 190, 152, 157, 233, 180, 163, 77, 116, 120, 221, 204, 59, 249, 131, 50, 58, 25, 205, 75, 14, 220, 209, 148, 232, 56, 178, 85, 95, 201, 255, 148, 197, 187, 228, 28, 97, 140, 196, 222, 36, 131, 254, 203, 218, 103, 139, 158, 52, 123, 70, 79, 197, 215, 247, 172, 21, 137, 124, 106, 225, 54, 107, 161, 165, 69, 243, 125, 203, 32, 55, 249, 99, 19, 214, 233, 240, 173, 246, 71, 138, 253, 90, 194, 156, 213, 43, 176, 12, 35, 6, 33, 202, 192, 115, 200, 107, 69, 50, 225}, +{124, 38, 147, 90, 87, 134, 182, 144, 61, 160, 17, 42, 211, 112, 0, 102, 254, 131, 56, 220, 99, 28, 10, 37, 67, 233, 134, 207, 145, 234, 63, 136, 95, 112, 79, 10, 49, 105, 177, 88, 156, 61, 243, 156, 139, 204, 67, 222, 191, 181, 187, 29, 136, 235, 220, 110, 126, 54, 16, 130, 109, 62, 108, 135, 8, 79, 247, 3, 35, 160, 166, 127, 74, 13, 179, 223, 68, 65, 176, 133, 114, 162, 196, 197, 89, 185, 124, 17, 4, 64, 45, 222, 24, 114, 192, 86, 2, 6, 248, 161, 3, 100, 152, 246, 248, 104, 19, 60, 39, 241, 201, 186, 18, 210, 102, 64, 252, 138, 247, 251, 214, 201, 108, 68, 232, 124, 70, 133}, +{42, 168, 210, 181, 110, 212, 13, 234, 230, 127, 71, 203, 3, 102, 143, 12, 50, 38, 231, 244, 245, 249, 199, 107, 36, 59, 88, 124, 225, 52, 102, 97, 252, 7, 109, 9, 234, 180, 145, 221, 211, 235, 184, 79, 39, 74, 46, 0, 235, 52, 92, 102, 161, 62, 37, 191, 249, 148, 84, 221, 29, 28, 241, 166, 160, 212, 175, 147, 145, 206, 228, 149, 4, 10, 104, 59, 246, 115, 66, 83, 152, 49, 249, 171, 187, 133, 31, 243, 195, 61, 171, 223, 197, 59, 171, 181, 122, 42, 105, 73, 228, 230, 198, 159, 127, 64, 127, 244, 128, 195, 19, 184, 156, 63, 170, 111, 121, 17, 77, 170, 57, 135, 12, 106, 136, 141, 133, 131}, +{177, 128, 83, 120, 25, 145, 207, 180, 159, 132, 35, 191, 3, 192, 183, 64, 251, 163, 239, 161, 85, 43, 136, 242, 99, 238, 212, 227, 102, 252, 62, 27, 27, 80, 15, 170, 13, 137, 33, 163, 154, 161, 145, 14, 168, 64, 67, 218, 197, 125, 154, 242, 155, 32, 121, 176, 11, 51, 177, 232, 110, 75, 8, 115, 133, 36, 35, 5, 136, 182, 1, 154, 175, 64, 196, 26, 150, 90, 184, 130, 76, 144, 157, 149, 77, 169, 122, 241, 91, 81, 39, 121, 66, 182, 100, 254, 68, 88, 41, 128, 122, 205, 95, 243, 97, 251, 70, 128, 134, 7, 103, 21, 28, 100, 16, 174, 26, 1, 252, 10, 213, 39, 30, 113, 59, 28, 214, 241}, +{81, 99, 168, 180, 226, 181, 167, 114, 188, 80, 8, 78, 207, 119, 193, 154, 11, 153, 179, 54, 49, 240, 175, 149, 67, 87, 117, 31, 183, 97, 24, 240, 16, 5, 65, 248, 25, 144, 29, 203, 122, 11, 114, 196, 105, 138, 139, 249, 88, 144, 184, 55, 235, 142, 67, 79, 185, 169, 102, 71, 87, 6, 12, 128, 115, 161, 59, 224, 205, 244, 197, 176, 23, 117, 249, 42, 226, 103, 78, 224, 128, 238, 140, 113, 131, 169, 88, 205, 105, 31, 176, 150, 108, 220, 104, 163, 231, 61, 54, 19, 147, 166, 91, 255, 64, 65, 236, 254, 42, 214, 145, 16, 113, 147, 147, 78, 30, 168, 23, 39, 173, 250, 96, 13, 42, 90, 16, 200}, +{202, 149, 89, 22, 112, 140, 28, 24, 215, 245, 85, 14, 221, 171, 95, 144, 129, 17, 22, 126, 196, 55, 183, 120, 64, 163, 122, 112, 41, 104, 155, 3, 67, 197, 155, 143, 123, 53, 80, 23, 106, 100, 247, 53, 42, 224, 127, 59, 89, 175, 222, 250, 100, 33, 151, 165, 131, 202, 169, 100, 81, 61, 12, 203, 212, 64, 248, 182, 183, 99, 254, 189, 75, 98, 87, 195, 145, 4, 229, 124, 120, 58, 91, 162, 56, 195, 133, 188, 78, 18, 137, 24, 247, 108, 61, 176, 130, 192, 198, 229, 238, 149, 199, 114, 58, 212, 120, 73, 251, 202, 40, 142, 23, 234, 189, 148, 224, 217, 183, 78, 172, 149, 236, 250, 237, 196, 76, 206}, +{155, 61, 191, 255, 65, 226, 78, 61, 255, 77, 80, 10, 98, 77, 99, 198, 58, 20, 208, 67, 8, 84, 21, 35, 221, 223, 237, 36, 155, 239, 201, 65, 201, 50, 95, 148, 83, 49, 118, 33, 33, 163, 100, 8, 148, 253, 12, 204, 176, 180, 37, 190, 236, 165, 252, 255, 54, 42, 21, 18, 251, 43, 3, 4, 117, 254, 157, 156, 102, 103, 81, 88, 12, 88, 234, 81, 242, 158, 182, 124, 146, 63, 67, 118, 21, 164, 196, 252, 70, 251, 163, 101, 244, 52, 143, 174, 69, 81, 31, 132, 78, 24, 241, 125, 177, 207, 113, 1, 49, 252, 92, 72, 49, 12, 212, 201, 36, 43, 89, 20, 246, 236, 177, 11, 118, 186, 220, 6}, +{18, 201, 124, 179, 54, 166, 220, 154, 239, 44, 89, 164, 209, 233, 173, 88, 208, 187, 10, 50, 166, 50, 49, 78, 233, 133, 177, 185, 147, 116, 49, 27, 21, 118, 196, 252, 88, 221, 250, 244, 157, 167, 173, 128, 35, 145, 228, 22, 112, 50, 169, 132, 142, 181, 131, 163, 171, 217, 94, 240, 171, 63, 68, 95, 139, 75, 209, 148, 96, 250, 75, 117, 189, 118, 125, 37, 166, 74, 116, 134, 92, 52, 76, 244, 142, 206, 136, 17, 96, 37, 211, 201, 174, 6, 189, 125, 20, 84, 18, 41, 163, 0, 170, 254, 223, 245, 188, 139, 214, 100, 106, 10, 128, 71, 238, 23, 15, 190, 122, 79, 93, 101, 186, 49, 102, 10, 245, 168}, +{191, 120, 34, 222, 77, 32, 174, 147, 157, 47, 206, 109, 173, 177, 105, 182, 92, 126, 181, 20, 186, 183, 54, 200, 125, 192, 174, 125, 241, 179, 107, 151, 42, 120, 236, 202, 191, 185, 212, 32, 57, 45, 23, 167, 184, 7, 33, 165, 12, 103, 32, 168, 6, 112, 233, 253, 192, 40, 210, 108, 236, 147, 47, 223, 98, 244, 241, 184, 105, 189, 103, 235, 252, 127, 215, 209, 48, 53, 127, 143, 138, 100, 136, 144, 215, 23, 123, 200, 43, 217, 88, 111, 44, 132, 60, 57, 99, 3, 64, 157, 44, 166, 91, 41, 152, 60, 17, 213, 76, 39, 138, 11, 91, 49, 89, 124, 114, 187, 11, 86, 238, 132, 50, 141, 128, 202, 172, 76}, +{118, 18, 103, 106, 220, 146, 159, 187, 87, 76, 251, 205, 194, 139, 219, 91, 168, 47, 140, 23, 193, 95, 39, 185, 144, 51, 156, 105, 99, 106, 34, 233, 103, 222, 52, 138, 240, 229, 179, 201, 52, 159, 197, 176, 63, 81, 179, 252, 46, 75, 160, 63, 78, 213, 115, 149, 181, 224, 44, 39, 211, 71, 108, 199, 17, 125, 211, 30, 70, 74, 152, 117, 228, 224, 236, 167, 156, 13, 171, 84, 38, 24, 191, 147, 199, 219, 240, 216, 139, 54, 204, 24, 50, 90, 99, 63, 237, 185, 90, 148, 38, 25, 78, 151, 178, 226, 94, 191, 59, 164, 198, 45, 49, 1, 16, 20, 220, 233, 221, 250, 60, 35, 157, 233, 197, 77, 169, 164}, +{173, 248, 195, 249, 112, 242, 249, 168, 26, 81, 127, 184, 196, 157, 174, 254, 164, 117, 115, 215, 42, 180, 231, 203, 39, 141, 180, 252, 196, 160, 214, 86, 149, 196, 169, 74, 123, 6, 68, 191, 123, 153, 105, 77, 122, 214, 185, 171, 202, 167, 223, 28, 184, 116, 229, 44, 201, 225, 255, 57, 126, 165, 145, 217, 243, 129, 250, 88, 30, 229, 144, 228, 96, 52, 205, 137, 67, 236, 22, 230, 184, 212, 45, 246, 97, 189, 148, 244, 51, 123, 121, 107, 145, 45, 186, 153, 49, 135, 47, 184, 186, 163, 186, 194, 151, 74, 229, 136, 222, 171, 86, 174, 122, 15, 102, 235, 24, 204, 69, 113, 70, 31, 87, 20, 164, 199, 65, 31}, +{109, 55, 184, 5, 149, 102, 61, 68, 180, 93, 12, 46, 148, 82, 109, 90, 65, 86, 7, 183, 210, 101, 139, 109, 217, 91, 113, 28, 198, 5, 220, 109, 219, 66, 60, 185, 243, 173, 205, 238, 33, 203, 117, 209, 113, 112, 56, 5, 7, 12, 102, 108, 34, 240, 174, 131, 9, 114, 108, 177, 233, 150, 46, 91, 234, 129, 121, 95, 16, 60, 165, 148, 158, 210, 99, 98, 84, 31, 126, 124, 105, 184, 132, 56, 108, 222, 123, 230, 42, 163, 125, 48, 77, 70, 130, 131, 254, 123, 130, 142, 131, 99, 125, 230, 36, 136, 65, 201, 0, 21, 136, 242, 243, 242, 119, 198, 228, 198, 60, 189, 127, 2, 209, 9, 171, 195, 18, 131}, +{206, 97, 134, 35, 223, 51, 229, 168, 171, 142, 34, 39, 178, 144, 248, 2, 140, 158, 51, 0, 72, 200, 127, 192, 40, 118, 10, 167, 150, 92, 41, 92, 33, 99, 25, 240, 219, 188, 132, 207, 197, 194, 194, 202, 16, 152, 13, 63, 50, 104, 18, 255, 111, 125, 100, 42, 232, 204, 210, 135, 30, 209, 132, 206, 172, 164, 70, 69, 252, 171, 117, 154, 223, 23, 6, 88, 15, 130, 74, 65, 114, 205, 44, 245, 133, 180, 116, 193, 23, 197, 170, 142, 133, 241, 249, 209, 212, 97, 164, 192, 236, 115, 160, 106, 64, 176, 118, 171, 205, 28, 86, 195, 155, 252, 199, 225, 183, 19, 176, 33, 3, 220, 248, 213, 88, 75, 23, 15}, +{96, 212, 228, 207, 150, 242, 18, 61, 196, 217, 40, 4, 148, 233, 33, 249, 177, 133, 158, 11, 220, 7, 131, 180, 116, 123, 183, 205, 168, 44, 41, 47, 251, 141, 183, 240, 174, 151, 41, 145, 27, 190, 215, 183, 193, 77, 114, 74, 227, 242, 227, 252, 28, 139, 120, 100, 202, 51, 119, 149, 47, 203, 247, 64, 140, 250, 97, 31, 130, 87, 103, 239, 246, 165, 136, 98, 81, 209, 57, 80, 196, 69, 163, 37, 134, 23, 197, 130, 37, 184, 142, 242, 185, 47, 129, 73, 101, 34, 246, 124, 139, 56, 3, 147, 185, 88, 75, 109, 63, 21, 253, 9, 166, 117, 175, 160, 235, 107, 59, 192, 151, 29, 243, 157, 151, 41, 116, 87}, +{11, 102, 227, 77, 107, 231, 63, 248, 34, 55, 234, 119, 46, 85, 246, 163, 157, 12, 92, 5, 231, 157, 3, 111, 138, 159, 96, 39, 242, 23, 89, 170, 28, 44, 5, 236, 230, 62, 33, 77, 227, 222, 142, 204, 95, 33, 117, 151, 176, 0, 236, 252, 28, 242, 245, 2, 73, 220, 231, 48, 125, 15, 85, 171, 172, 77, 247, 52, 189, 138, 160, 118, 64, 13, 142, 209, 65, 200, 161, 207, 252, 93, 56, 56, 60, 182, 210, 12, 255, 69, 81, 46, 69, 145, 90, 223, 61, 215, 124, 44, 13, 94, 171, 45, 12, 235, 212, 26, 209, 125, 23, 106, 173, 19, 131, 57, 124, 178, 224, 43, 164, 119, 216, 156, 222, 101, 16, 248}, +{55, 155, 158, 171, 80, 142, 210, 213, 89, 254, 57, 205, 153, 38, 227, 53, 173, 44, 12, 252, 210, 219, 240, 139, 13, 212, 36, 141, 42, 14, 65, 123, 108, 31, 159, 88, 205, 164, 194, 184, 223, 120, 197, 239, 151, 168, 214, 158, 16, 206, 163, 168, 91, 47, 77, 230, 198, 152, 197, 106, 226, 137, 179, 48, 229, 57, 142, 13, 152, 26, 12, 177, 41, 130, 54, 96, 5, 28, 32, 58, 172, 15, 188, 115, 200, 196, 236, 226, 200, 11, 82, 213, 10, 188, 176, 234, 134, 214, 219, 114, 37, 212, 127, 224, 74, 179, 177, 252, 118, 136, 117, 172, 225, 91, 194, 245, 179, 227, 198, 197, 129, 233, 150, 13, 112, 88, 69, 6}, +{18, 230, 35, 63, 184, 92, 95, 140, 129, 52, 87, 19, 119, 166, 74, 94, 193, 44, 4, 225, 202, 190, 78, 253, 218, 135, 19, 169, 54, 213, 49, 86, 55, 182, 25, 220, 97, 185, 57, 65, 103, 152, 231, 205, 101, 180, 172, 57, 107, 26, 92, 14, 238, 190, 93, 45, 60, 174, 196, 77, 62, 226, 31, 11, 48, 8, 39, 194, 150, 85, 251, 197, 109, 104, 208, 30, 90, 151, 13, 244, 75, 239, 58, 51, 110, 13, 202, 243, 154, 55, 247, 79, 142, 184, 118, 58, 100, 246, 107, 116, 39, 71, 182, 55, 26, 13, 57, 133, 86, 139, 123, 228, 9, 100, 234, 52, 215, 150, 70, 215, 151, 196, 152, 196, 62, 240, 200, 6}, +{98, 34, 99, 172, 72, 178, 239, 185, 253, 117, 34, 214, 225, 96, 247, 54, 108, 138, 143, 29, 31, 35, 210, 225, 183, 18, 208, 148, 146, 126, 169, 250, 78, 26, 184, 239, 213, 51, 226, 175, 23, 55, 56, 93, 96, 168, 248, 170, 126, 241, 21, 203, 218, 246, 190, 144, 121, 204, 43, 177, 193, 79, 140, 110, 139, 82, 135, 164, 71, 209, 2, 184, 52, 33, 100, 113, 13, 55, 96, 36, 251, 88, 96, 215, 31, 38, 208, 210, 149, 82, 161, 51, 209, 76, 55, 150, 110, 205, 247, 118, 3, 1, 161, 79, 42, 153, 76, 214, 67, 9, 53, 26, 153, 22, 52, 3, 176, 87, 121, 73, 115, 219, 63, 27, 24, 84, 37, 16}, +{83, 131, 84, 28, 62, 213, 102, 24, 171, 20, 138, 104, 232, 28, 87, 84, 113, 187, 254, 179, 131, 240, 165, 108, 206, 75, 49, 159, 33, 138, 112, 194, 25, 68, 71, 178, 67, 98, 21, 73, 77, 8, 127, 123, 67, 178, 211, 124, 213, 229, 139, 24, 165, 120, 124, 130, 198, 173, 137, 191, 123, 39, 42, 2, 222, 202, 140, 71, 26, 22, 214, 55, 79, 14, 244, 51, 148, 12, 70, 253, 34, 235, 144, 64, 56, 4, 49, 168, 146, 176, 71, 92, 100, 51, 0, 220, 21, 40, 102, 7, 118, 234, 35, 233, 209, 75, 168, 60, 101, 167, 102, 89, 144, 56, 235, 122, 115, 54, 206, 228, 121, 60, 178, 7, 16, 220, 68, 174}, +{163, 31, 44, 255, 123, 201, 78, 151, 227, 179, 12, 219, 146, 82, 156, 27, 91, 234, 4, 139, 101, 157, 148, 13, 106, 112, 37, 183, 212, 116, 186, 253, 222, 71, 170, 44, 214, 218, 250, 117, 246, 76, 237, 198, 124, 91, 255, 140, 171, 180, 59, 184, 104, 107, 47, 70, 115, 199, 62, 98, 219, 166, 113, 196, 83, 94, 5, 76, 181, 200, 39, 31, 91, 158, 167, 119, 204, 125, 55, 201, 112, 255, 160, 215, 227, 143, 186, 97, 215, 180, 184, 115, 18, 230, 145, 32, 90, 36, 192, 27, 151, 121, 75, 215, 38, 118, 98, 192, 209, 102, 55, 198, 157, 31, 93, 2, 197, 202, 215, 146, 97, 3, 52, 47, 59, 94, 7, 42}, +{171, 94, 6, 35, 96, 100, 131, 158, 110, 211, 18, 87, 16, 200, 181, 143, 48, 213, 154, 23, 110, 8, 176, 223, 53, 251, 21, 92, 152, 88, 216, 179, 203, 131, 138, 136, 76, 70, 52, 122, 190, 218, 250, 207, 69, 61, 60, 255, 232, 120, 221, 185, 31, 52, 194, 184, 245, 159, 134, 16, 232, 158, 188, 153, 188, 27, 245, 20, 222, 206, 234, 66, 53, 230, 167, 4, 158, 192, 122, 255, 207, 61, 157, 31, 31, 81, 209, 229, 43, 176, 41, 159, 81, 159, 71, 26, 70, 53, 25, 208, 130, 55, 56, 227, 3, 167, 64, 132, 169, 202, 72, 233, 34, 98, 32, 226, 136, 208, 30, 105, 90, 172, 85, 189, 194, 221, 57, 23}, +{77, 243, 215, 32, 134, 68, 220, 4, 113, 170, 82, 41, 39, 70, 104, 135, 126, 93, 95, 228, 201, 218, 106, 142, 56, 88, 201, 75, 8, 209, 75, 52, 112, 128, 213, 49, 177, 234, 74, 172, 224, 105, 196, 77, 85, 110, 176, 243, 240, 144, 180, 138, 9, 49, 51, 154, 96, 57, 243, 235, 192, 80, 39, 185, 178, 1, 149, 42, 221, 203, 144, 186, 72, 10, 0, 88, 136, 87, 61, 85, 96, 152, 168, 235, 236, 99, 63, 227, 61, 14, 163, 23, 16, 165, 42, 102, 181, 64, 90, 227, 48, 19, 195, 116, 12, 40, 88, 144, 135, 147, 208, 100, 25, 80, 62, 144, 209, 135, 145, 158, 146, 117, 157, 188, 20, 161, 88, 99}, +{62, 192, 161, 168, 94, 176, 65, 243, 251, 180, 210, 208, 163, 175, 234, 60, 182, 173, 101, 222, 15, 166, 171, 39, 250, 218, 43, 37, 161, 247, 69, 160, 193, 48, 195, 250, 5, 71, 98, 11, 104, 218, 245, 90, 107, 157, 216, 64, 114, 133, 27, 62, 108, 152, 46, 171, 151, 11, 218, 247, 86, 39, 40, 8, 14, 80, 62, 61, 194, 88, 204, 130, 252, 30, 188, 86, 216, 113, 206, 201, 202, 44, 159, 66, 119, 60, 78, 158, 147, 243, 110, 249, 222, 148, 63, 145, 148, 179, 137, 247, 62, 104, 0, 212, 197, 125, 38, 223, 204, 245, 59, 139, 9, 24, 3, 199, 182, 20, 26, 220, 236, 219, 17, 29, 11, 10, 33, 25}, +{21, 254, 69, 53, 43, 220, 237, 235, 67, 133, 59, 190, 29, 92, 78, 194, 218, 177, 114, 58, 36, 147, 109, 212, 135, 25, 242, 50, 177, 100, 92, 229, 128, 141, 132, 173, 188, 63, 84, 86, 23, 133, 235, 123, 101, 66, 226, 100, 27, 128, 5, 56, 191, 171, 219, 195, 181, 7, 153, 87, 217, 25, 217, 35, 234, 126, 184, 189, 242, 181, 46, 42, 143, 84, 53, 127, 141, 10, 52, 26, 8, 186, 16, 93, 192, 242, 89, 77, 232, 194, 229, 184, 199, 165, 232, 164, 98, 128, 83, 215, 37, 116, 161, 205, 92, 153, 155, 149, 193, 155, 103, 181, 180, 172, 2, 32, 121, 216, 236, 113, 55, 20, 138, 145, 34, 207, 80, 231}, +{81, 254, 141, 215, 211, 18, 97, 43, 147, 30, 139, 245, 218, 245, 167, 14, 88, 237, 162, 229, 78, 138, 34, 183, 88, 52, 88, 181, 19, 127, 215, 4, 135, 150, 188, 225, 224, 117, 196, 107, 138, 14, 236, 167, 101, 0, 150, 190, 90, 28, 85, 63, 252, 242, 221, 240, 123, 28, 226, 205, 73, 92, 72, 223, 233, 190, 195, 39, 203, 140, 56, 114, 115, 199, 193, 7, 46, 83, 184, 181, 29, 179, 204, 224, 72, 232, 156, 53, 19, 191, 145, 120, 216, 66, 102, 121, 192, 110, 59, 46, 250, 193, 58, 228, 115, 62, 94, 14, 197, 83, 93, 95, 58, 37, 168, 206, 35, 70, 203, 158, 111, 5, 111, 7, 198, 125, 192, 201}, +{184, 144, 176, 47, 203, 204, 208, 199, 185, 141, 100, 248, 189, 217, 31, 176, 205, 101, 135, 64, 86, 45, 14, 13, 103, 60, 6, 175, 158, 189, 64, 242, 118, 69, 187, 174, 2, 34, 185, 240, 161, 230, 138, 169, 118, 107, 104, 224, 44, 2, 87, 56, 26, 140, 249, 185, 249, 233, 12, 160, 218, 11, 218, 217, 39, 175, 32, 35, 15, 214, 43, 74, 23, 126, 243, 107, 23, 207, 231, 183, 192, 211, 18, 96, 147, 228, 172, 167, 172, 208, 167, 109, 122, 136, 133, 152, 108, 139, 77, 205, 93, 99, 87, 60, 170, 173, 249, 43, 223, 133, 166, 129, 59, 54, 83, 137, 76, 181, 41, 74, 37, 173, 29, 50, 99, 43, 17, 37}, +{43, 196, 30, 82, 187, 249, 95, 77, 76, 9, 40, 19, 159, 247, 90, 25, 93, 105, 25, 42, 165, 158, 174, 107, 122, 91, 84, 9, 249, 232, 83, 133, 216, 215, 236, 96, 55, 53, 233, 114, 75, 40, 213, 223, 34, 43, 136, 128, 201, 44, 130, 11, 65, 139, 60, 102, 3, 14, 184, 100, 102, 69, 234, 251, 139, 96, 132, 15, 68, 32, 173, 180, 101, 83, 208, 229, 116, 42, 3, 168, 170, 115, 91, 152, 55, 170, 44, 253, 66, 15, 104, 50, 153, 207, 43, 223, 38, 17, 21, 233, 159, 84, 227, 33, 209, 172, 76, 59, 96, 69, 199, 135, 65, 17, 54, 250, 63, 54, 109, 103, 243, 125, 250, 194, 143, 138, 154, 225}, +{23, 140, 114, 84, 173, 194, 133, 13, 65, 192, 243, 70, 153, 160, 98, 204, 115, 93, 124, 209, 33, 13, 23, 68, 192, 26, 120, 56, 111, 175, 25, 109, 90, 9, 182, 127, 253, 118, 238, 17, 132, 21, 235, 19, 122, 250, 253, 141, 5, 25, 154, 177, 243, 15, 36, 111, 171, 230, 221, 231, 201, 77, 29, 166, 13, 93, 120, 14, 106, 189, 191, 78, 48, 18, 177, 89, 236, 31, 241, 196, 17, 218, 158, 62, 4, 80, 46, 230, 68, 232, 74, 70, 253, 137, 185, 147, 39, 164, 21, 48, 175, 172, 85, 168, 205, 8, 217, 83, 89, 1, 48, 62, 54, 235, 53, 244, 209, 46, 54, 165, 29, 19, 227, 39, 188, 152, 189, 30}, +{75, 50, 88, 56, 198, 160, 155, 50, 51, 145, 245, 185, 39, 95, 158, 159, 49, 201, 153, 169, 198, 52, 149, 17, 31, 61, 202, 122, 13, 21, 254, 104, 208, 242, 238, 102, 43, 10, 234, 183, 141, 197, 244, 161, 212, 74, 42, 191, 224, 47, 224, 138, 155, 224, 226, 185, 10, 91, 177, 228, 66, 71, 128, 48, 21, 160, 247, 25, 243, 103, 234, 229, 230, 225, 50, 220, 117, 162, 89, 21, 139, 75, 107, 23, 70, 5, 19, 212, 104, 132, 97, 51, 99, 210, 44, 122, 103, 162, 135, 156, 17, 130, 44, 20, 141, 58, 46, 182, 188, 186, 77, 75, 90, 228, 132, 8, 192, 237, 15, 81, 117, 69, 34, 221, 152, 246, 240, 184}, +{188, 70, 124, 83, 119, 73, 136, 133, 3, 124, 236, 23, 106, 188, 145, 19, 93, 16, 75, 105, 5, 140, 214, 59, 93, 194, 59, 147, 62, 237, 85, 72, 154, 119, 82, 232, 222, 90, 141, 195, 244, 139, 129, 166, 143, 166, 12, 32, 108, 227, 155, 242, 17, 172, 179, 210, 204, 128, 116, 49, 79, 195, 47, 22, 220, 1, 93, 171, 185, 172, 163, 0, 147, 176, 106, 60, 118, 6, 212, 39, 116, 180, 126, 59, 99, 14, 139, 208, 213, 96, 76, 255, 209, 184, 16, 95, 43, 42, 194, 39, 31, 81, 119, 55, 165, 154, 233, 248, 77, 219, 184, 107, 57, 25, 40, 105, 231, 85, 238, 186, 94, 102, 27, 250, 79, 163, 233, 119}, +{82, 138, 112, 20, 0, 197, 7, 193, 233, 208, 18, 88, 85, 236, 121, 64, 97, 166, 194, 78, 99, 154, 151, 187, 112, 58, 117, 219, 21, 247, 90, 169, 96, 64, 173, 111, 213, 162, 5, 95, 215, 74, 224, 198, 146, 228, 84, 217, 9, 41, 178, 114, 231, 66, 218, 78, 152, 114, 159, 194, 67, 56, 184, 89, 16, 83, 215, 157, 109, 143, 147, 34, 248, 62, 17, 102, 53, 71, 244, 199, 77, 179, 66, 37, 3, 49, 133, 181, 1, 8, 225, 2, 166, 226, 164, 119, 118, 4, 157, 158, 236, 245, 155, 168, 181, 19, 188, 212, 209, 62, 38, 43, 123, 20, 211, 162, 65, 244, 94, 52, 70, 169, 156, 67, 85, 181, 166, 51}, +{103, 133, 35, 214, 21, 75, 149, 91, 102, 45, 254, 52, 40, 215, 172, 73, 159, 10, 253, 138, 22, 24, 245, 152, 234, 237, 112, 66, 52, 153, 154, 139, 74, 216, 224, 176, 11, 67, 106, 110, 166, 226, 71, 34, 129, 193, 89, 46, 3, 145, 154, 123, 148, 125, 216, 240, 248, 4, 232, 30, 186, 104, 161, 118, 82, 209, 60, 51, 76, 46, 209, 145, 126, 67, 97, 52, 151, 101, 163, 173, 202, 132, 100, 254, 235, 164, 12, 137, 170, 127, 178, 141, 7, 164, 75, 190, 58, 84, 233, 102, 138, 163, 242, 82, 187, 237, 15, 67, 38, 179, 29, 5, 194, 72, 1, 123, 130, 106, 230, 41, 144, 175, 32, 112, 123, 246, 12, 200}, +{170, 129, 118, 243, 28, 24, 103, 162, 20, 86, 71, 217, 238, 242, 142, 252, 79, 245, 238, 23, 183, 90, 3, 190, 207, 6, 222, 218, 230, 84, 103, 78, 105, 159, 9, 23, 7, 238, 235, 146, 42, 152, 38, 34, 58, 90, 17, 143, 230, 70, 170, 84, 142, 108, 207, 158, 17, 190, 9, 248, 180, 186, 24, 180, 91, 169, 223, 64, 235, 252, 236, 99, 226, 44, 172, 175, 199, 54, 28, 76, 161, 26, 21, 98, 226, 122, 50, 56, 112, 125, 153, 139, 221, 30, 253, 72, 173, 45, 138, 31, 160, 144, 19, 233, 115, 0, 94, 140, 178, 203, 43, 151, 115, 44, 31, 133, 163, 94, 86, 51, 56, 158, 231, 132, 118, 232, 158, 125}, +{84, 52, 88, 203, 109, 171, 175, 21, 114, 134, 98, 148, 211, 200, 34, 5, 70, 147, 82, 93, 251, 14, 198, 253, 239, 13, 130, 138, 51, 194, 154, 241, 253, 10, 71, 80, 233, 230, 162, 58, 124, 113, 121, 96, 93, 135, 178, 191, 172, 181, 125, 88, 96, 97, 84, 167, 13, 112, 19, 204, 53, 206, 154, 59, 100, 130, 34, 213, 63, 198, 211, 63, 204, 72, 10, 76, 34, 221, 158, 210, 188, 86, 238, 139, 212, 237, 179, 254, 195, 11, 239, 29, 192, 181, 74, 11, 26, 20, 59, 106, 234, 105, 70, 69, 63, 196, 196, 170, 250, 164, 14, 5, 102, 33, 2, 240, 202, 173, 254, 200, 158, 155, 117, 211, 199, 52, 192, 157}, +{203, 16, 21, 66, 230, 108, 220, 9, 78, 59, 180, 238, 7, 47, 176, 190, 169, 166, 141, 197, 94, 155, 224, 244, 17, 181, 132, 156, 240, 206, 181, 116, 206, 159, 100, 156, 82, 210, 255, 54, 119, 74, 151, 241, 121, 60, 89, 238, 124, 83, 141, 113, 82, 93, 249, 133, 183, 19, 165, 114, 191, 246, 160, 125, 52, 105, 71, 194, 228, 190, 86, 153, 138, 226, 178, 241, 16, 79, 253, 88, 166, 133, 155, 56, 145, 6, 105, 15, 133, 245, 193, 232, 149, 1, 23, 42, 175, 13, 46, 223, 77, 189, 255, 107, 195, 82, 48, 108, 78, 210, 17, 155, 55, 162, 235, 22, 145, 156, 104, 82, 154, 11, 142, 98, 98, 121, 166, 82}, +{103, 105, 51, 34, 83, 44, 225, 89, 108, 91, 155, 186, 174, 90, 66, 36, 245, 48, 247, 217, 106, 151, 211, 254, 150, 142, 242, 97, 229, 140, 82, 112, 94, 4, 78, 231, 187, 77, 136, 118, 63, 126, 150, 33, 155, 156, 31, 24, 147, 137, 41, 124, 10, 205, 179, 34, 41, 195, 119, 79, 167, 71, 249, 141, 238, 96, 45, 36, 105, 41, 30, 102, 148, 182, 188, 75, 152, 53, 146, 34, 136, 144, 165, 232, 230, 146, 24, 196, 63, 136, 57, 85, 220, 120, 196, 77, 78, 51, 180, 115, 54, 173, 18, 97, 66, 86, 188, 56, 65, 162, 235, 84, 92, 89, 101, 93, 188, 161, 143, 152, 10, 235, 164, 111, 151, 229, 251, 209}, +{64, 254, 167, 86, 57, 231, 234, 139, 182, 56, 145, 207, 12, 184, 246, 102, 249, 82, 237, 129, 54, 216, 248, 115, 221, 125, 252, 185, 175, 194, 136, 161, 121, 150, 46, 175, 158, 187, 248, 69, 124, 12, 231, 158, 243, 75, 28, 147, 193, 130, 25, 244, 128, 175, 100, 32, 69, 195, 252, 172, 72, 207, 228, 12, 121, 55, 224, 19, 84, 35, 63, 16, 227, 112, 1, 27, 85, 208, 53, 100, 21, 192, 12, 67, 131, 87, 108, 169, 255, 198, 241, 119, 69, 36, 236, 117, 115, 156, 195, 191, 24, 174, 75, 183, 138, 239, 145, 21, 2, 149, 22, 200, 251, 233, 150, 91, 98, 39, 160, 234, 238, 188, 191, 45, 225, 113, 35, 195}, +{57, 79, 124, 40, 55, 166, 72, 88, 160, 24, 97, 217, 30, 54, 47, 232, 206, 103, 207, 145, 10, 185, 158, 149, 9, 168, 197, 220, 22, 56, 182, 198, 223, 46, 104, 204, 205, 27, 64, 231, 240, 44, 79, 135, 99, 66, 143, 243, 13, 116, 30, 17, 167, 225, 59, 179, 208, 20, 127, 177, 238, 17, 109, 178, 140, 134, 85, 102, 57, 100, 123, 85, 208, 94, 131, 236, 78, 99, 240, 201, 173, 107, 17, 123, 136, 176, 143, 73, 196, 190, 36, 175, 148, 247, 83, 13, 23, 200, 64, 63, 232, 36, 156, 43, 216, 81, 52, 28, 219, 64, 25, 216, 29, 5, 58, 69, 251, 44, 122, 19, 67, 141, 192, 119, 169, 9, 48, 187}, +{61, 226, 224, 76, 145, 28, 77, 158, 29, 114, 39, 237, 221, 164, 190, 99, 239, 164, 212, 173, 127, 9, 33, 181, 228, 213, 69, 182, 28, 80, 21, 34, 161, 237, 141, 204, 63, 7, 1, 103, 129, 16, 150, 252, 74, 223, 79, 251, 72, 214, 141, 153, 11, 53, 162, 26, 49, 180, 232, 117, 47, 135, 97, 70, 126, 243, 152, 228, 100, 242, 179, 89, 199, 165, 49, 49, 9, 212, 77, 251, 111, 197, 106, 128, 146, 198, 194, 20, 215, 29, 129, 89, 76, 104, 9, 57, 202, 204, 47, 116, 155, 96, 217, 83, 253, 202, 172, 245, 180, 20, 142, 163, 28, 14, 78, 255, 149, 219, 59, 151, 164, 246, 69, 40, 123, 91, 103, 83}, +{114, 54, 178, 229, 128, 171, 117, 228, 103, 75, 143, 121, 16, 165, 191, 173, 237, 70, 36, 212, 120, 59, 52, 100, 168, 112, 19, 86, 129, 44, 114, 171, 81, 72, 179, 62, 152, 163, 228, 37, 229, 129, 56, 113, 151, 18, 165, 193, 111, 40, 43, 12, 75, 39, 234, 117, 221, 180, 186, 199, 32, 247, 146, 32, 9, 106, 158, 235, 117, 247, 245, 68, 56, 93, 241, 85, 112, 58, 198, 104, 43, 69, 153, 190, 127, 41, 210, 210, 79, 210, 87, 112, 60, 22, 126, 88, 201, 229, 233, 147, 136, 37, 21, 47, 237, 230, 54, 114, 65, 117, 51, 74, 195, 36, 98, 137, 172, 121, 104, 166, 231, 183, 34, 139, 251, 92, 202, 92}, +{171, 200, 227, 138, 44, 137, 209, 29, 123, 220, 150, 238, 101, 6, 79, 211, 66, 80, 143, 1, 20, 229, 154, 126, 61, 12, 246, 24, 133, 111, 60, 169, 100, 191, 171, 49, 64, 102, 180, 181, 21, 172, 182, 121, 235, 178, 147, 37, 22, 88, 63, 239, 6, 214, 38, 83, 84, 105, 79, 86, 82, 205, 205, 159, 86, 208, 65, 102, 30, 50, 19, 65, 77, 102, 187, 28, 213, 233, 206, 96, 124, 4, 111, 157, 105, 145, 124, 72, 99, 255, 218, 148, 47, 178, 203, 230, 0, 158, 2, 147, 0, 159, 235, 88, 212, 95, 188, 95, 171, 116, 122, 17, 233, 240, 59, 148, 243, 11, 67, 35, 218, 219, 239, 228, 237, 88, 121, 115}, +{35, 99, 171, 177, 22, 142, 150, 93, 3, 98, 185, 85, 151, 254, 224, 141, 55, 241, 76, 203, 81, 56, 10, 24, 225, 27, 231, 156, 15, 206, 13, 67, 206, 56, 131, 221, 254, 144, 16, 59, 112, 252, 156, 157, 28, 195, 117, 121, 36, 230, 21, 223, 211, 203, 105, 169, 163, 141, 1, 6, 163, 96, 239, 249, 81, 52, 11, 176, 198, 77, 54, 48, 242, 41, 111, 107, 120, 253, 254, 160, 211, 183, 132, 164, 122, 168, 76, 178, 143, 85, 121, 103, 46, 95, 201, 105, 183, 55, 34, 228, 248, 252, 24, 160, 124, 44, 239, 255, 88, 18, 55, 60, 132, 200, 212, 5, 219, 214, 24, 49, 52, 10, 24, 194, 42, 55, 9, 169}, +{25, 99, 238, 179, 130, 9, 122, 57, 31, 5, 119, 122, 70, 5, 195, 138, 249, 216, 106, 63, 221, 246, 157, 92, 133, 126, 1, 67, 189, 163, 159, 100, 140, 69, 220, 148, 8, 222, 245, 19, 60, 109, 167, 221, 118, 176, 71, 15, 172, 177, 131, 39, 179, 166, 239, 209, 108, 103, 5, 32, 187, 198, 143, 149, 134, 172, 31, 57, 99, 40, 26, 172, 99, 209, 129, 165, 60, 123, 103, 184, 72, 225, 140, 181, 245, 199, 5, 150, 122, 253, 52, 76, 168, 140, 39, 62, 41, 202, 171, 150, 246, 167, 121, 110, 237, 213, 48, 18, 248, 31, 210, 20, 80, 190, 13, 175, 183, 167, 115, 100, 209, 177, 152, 103, 232, 130, 86, 121}, +{176, 217, 171, 56, 27, 236, 194, 92, 159, 58, 223, 132, 178, 250, 150, 18, 115, 34, 39, 82, 176, 41, 244, 18, 86, 32, 49, 174, 183, 246, 32, 165, 127, 220, 127, 191, 59, 30, 116, 189, 42, 85, 24, 216, 78, 66, 180, 128, 74, 177, 106, 152, 239, 104, 186, 118, 39, 43, 197, 235, 245, 137, 6, 212, 192, 144, 225, 232, 193, 150, 198, 168, 74, 70, 9, 140, 142, 229, 119, 140, 5, 67, 153, 254, 108, 143, 81, 102, 174, 140, 115, 255, 89, 167, 32, 79, 226, 132, 148, 196, 27, 76, 231, 100, 167, 139, 207, 26, 222, 168, 54, 224, 57, 152, 88, 198, 56, 60, 33, 227, 67, 16, 124, 54, 118, 253, 153, 168}, +{23, 127, 54, 122, 63, 251, 144, 163, 80, 35, 192, 106, 196, 16, 147, 228, 244, 114, 75, 3, 163, 185, 224, 178, 175, 110, 162, 17, 202, 237, 243, 193, 86, 140, 99, 228, 100, 135, 154, 40, 161, 87, 64, 167, 48, 73, 185, 39, 195, 146, 55, 229, 7, 161, 87, 231, 184, 87, 133, 255, 133, 166, 48, 14, 158, 86, 118, 191, 73, 128, 162, 154, 19, 133, 252, 49, 111, 210, 205, 66, 229, 247, 76, 211, 221, 234, 191, 249, 94, 148, 181, 10, 57, 100, 43, 141, 193, 231, 202, 183, 207, 39, 5, 211, 221, 228, 185, 213, 215, 236, 146, 67, 70, 31, 208, 184, 150, 139, 27, 214, 99, 22, 209, 50, 103, 212, 232, 169}, +{89, 27, 89, 207, 151, 246, 6, 23, 218, 0, 128, 180, 181, 53, 208, 123, 20, 48, 111, 188, 137, 141, 110, 206, 7, 125, 226, 196, 64, 14, 136, 10, 57, 173, 255, 9, 145, 43, 12, 176, 173, 17, 47, 71, 238, 121, 245, 118, 255, 171, 171, 194, 16, 188, 71, 1, 41, 106, 55, 248, 243, 25, 65, 255, 116, 75, 43, 103, 144, 170, 252, 212, 159, 44, 142, 44, 192, 152, 24, 223, 110, 8, 42, 32, 41, 79, 44, 80, 216, 83, 57, 184, 233, 51, 103, 218, 101, 151, 123, 244, 91, 110, 201, 68, 147, 122, 98, 138, 49, 245, 252, 144, 68, 28, 233, 40, 129, 100, 124, 104, 40, 248, 5, 90, 193, 95, 181, 168}, +{30, 148, 85, 57, 247, 17, 187, 156, 172, 199, 1, 173, 32, 152, 36, 203, 2, 255, 126, 12, 64, 37, 245, 35, 224, 149, 29, 154, 21, 250, 152, 46, 124, 158, 107, 237, 96, 157, 7, 90, 49, 125, 89, 153, 169, 117, 26, 92, 18, 26, 245, 87, 16, 161, 254, 188, 78, 92, 177, 2, 194, 56, 48, 1, 65, 92, 34, 81, 219, 232, 63, 80, 243, 99, 215, 109, 54, 140, 146, 101, 18, 167, 104, 127, 116, 51, 216, 92, 11, 131, 107, 143, 9, 163, 217, 7, 147, 173, 7, 148, 169, 58, 226, 236, 103, 166, 150, 135, 63, 59, 201, 159, 83, 169, 253, 232, 34, 194, 172, 6, 140, 166, 128, 121, 25, 172, 95, 139}, +{75, 196, 121, 203, 89, 138, 239, 187, 68, 40, 79, 183, 246, 35, 249, 57, 73, 224, 253, 127, 79, 181, 174, 18, 188, 109, 32, 46, 166, 175, 215, 83, 193, 116, 219, 81, 142, 36, 124, 229, 197, 54, 100, 57, 253, 122, 106, 34, 194, 40, 153, 180, 166, 228, 234, 206, 43, 219, 108, 181, 84, 160, 46, 221, 155, 195, 209, 17, 134, 50, 137, 192, 210, 6, 164, 210, 95, 82, 136, 241, 138, 97, 144, 162, 150, 63, 167, 43, 48, 183, 86, 31, 38, 26, 86, 115, 2, 17, 45, 113, 183, 70, 158, 112, 87, 156, 11, 247, 84, 39, 56, 244, 5, 213, 100, 51, 131, 76, 103, 168, 32, 84, 79, 142, 54, 130, 65, 184}, +{160, 157, 198, 24, 204, 238, 69, 123, 58, 174, 156, 239, 100, 40, 18, 19, 206, 163, 78, 112, 68, 180, 165, 132, 26, 14, 13, 252, 188, 107, 103, 153, 194, 150, 34, 253, 234, 212, 46, 177, 90, 3, 157, 196, 46, 73, 243, 204, 146, 6, 23, 38, 183, 83, 150, 219, 61, 138, 130, 222, 105, 93, 54, 153, 93, 41, 237, 195, 207, 19, 224, 145, 131, 160, 11, 160, 205, 43, 28, 210, 89, 52, 24, 56, 162, 200, 240, 218, 57, 213, 194, 128, 92, 88, 11, 71, 69, 181, 156, 64, 199, 109, 198, 165, 244, 72, 179, 140, 114, 42, 141, 99, 244, 187, 37, 190, 206, 113, 227, 94, 101, 111, 117, 123, 225, 24, 55, 88}, +{162, 115, 41, 181, 78, 252, 134, 197, 146, 196, 115, 112, 21, 79, 189, 120, 88, 77, 26, 172, 173, 232, 75, 109, 96, 97, 88, 189, 117, 15, 168, 0, 254, 123, 9, 125, 127, 66, 51, 24, 194, 208, 178, 39, 89, 0, 200, 135, 254, 10, 217, 90, 123, 112, 106, 2, 139, 177, 136, 46, 128, 83, 108, 194, 137, 83, 67, 124, 117, 241, 109, 59, 76, 27, 173, 139, 29, 10, 144, 66, 179, 141, 118, 131, 55, 19, 210, 62, 159, 201, 140, 33, 123, 194, 76, 30, 139, 80, 61, 167, 20, 91, 228, 68, 180, 2, 255, 27, 164, 140, 95, 252, 74, 29, 141, 32, 77, 205, 106, 18, 118, 242, 119, 125, 163, 199, 212, 90}, +{194, 246, 254, 18, 111, 251, 52, 117, 112, 248, 88, 128, 143, 98, 64, 182, 239, 125, 51, 207, 175, 202, 200, 64, 252, 72, 38, 82, 173, 61, 180, 56, 227, 70, 214, 63, 77, 73, 162, 227, 115, 223, 134, 90, 149, 203, 68, 135, 80, 211, 55, 131, 186, 107, 194, 58, 103, 174, 219, 229, 243, 96, 205, 43, 81, 87, 91, 102, 61, 82, 152, 133, 164, 115, 47, 102, 61, 149, 39, 159, 129, 13, 151, 107, 167, 83, 220, 116, 191, 59, 17, 67, 228, 80, 41, 220, 54, 11, 1, 196, 67, 100, 77, 123, 56, 159, 98, 177, 98, 22, 145, 219, 176, 50, 132, 21, 45, 221, 95, 100, 103, 128, 162, 134, 56, 171, 176, 92}, +{10, 134, 135, 74, 240, 89, 130, 93, 46, 212, 152, 145, 243, 43, 131, 38, 107, 205, 125, 117, 101, 60, 241, 148, 143, 248, 207, 1, 110, 98, 9, 78, 93, 94, 249, 196, 104, 105, 218, 135, 128, 0, 123, 101, 166, 170, 114, 224, 139, 185, 232, 195, 44, 204, 228, 113, 101, 151, 166, 6, 12, 98, 226, 255, 118, 240, 251, 99, 173, 5, 20, 206, 164, 55, 126, 142, 189, 148, 75, 246, 236, 56, 215, 64, 189, 78, 50, 130, 174, 13, 229, 216, 45, 220, 86, 88, 140, 82, 104, 207, 245, 159, 128, 39, 226, 61, 185, 133, 45, 101, 164, 195, 25, 91, 213, 61, 65, 246, 204, 243, 18, 100, 76, 71, 121, 251, 200, 67}, +{75, 147, 74, 255, 163, 1, 180, 44, 100, 34, 108, 2, 105, 201, 126, 165, 149, 42, 90, 73, 226, 197, 26, 1, 46, 82, 215, 23, 8, 120, 202, 49, 151, 12, 2, 212, 213, 181, 63, 176, 28, 185, 93, 205, 50, 113, 104, 152, 209, 78, 160, 107, 101, 54, 160, 64, 179, 89, 44, 184, 168, 174, 217, 154, 209, 23, 18, 12, 17, 80, 210, 88, 214, 240, 71, 132, 94, 74, 159, 242, 202, 39, 195, 227, 92, 197, 249, 133, 17, 25, 237, 31, 79, 131, 209, 119, 67, 65, 209, 234, 243, 241, 219, 69, 51, 229, 31, 67, 196, 12, 102, 24, 236, 158, 180, 157, 56, 234, 145, 22, 50, 60, 204, 216, 72, 251, 135, 89}, +{75, 45, 234, 88, 252, 210, 104, 216, 38, 19, 125, 42, 188, 93, 33, 42, 254, 83, 12, 133, 203, 117, 0, 102, 22, 250, 165, 41, 149, 249, 225, 222, 36, 247, 71, 22, 73, 179, 230, 21, 131, 90, 235, 121, 96, 65, 86, 203, 137, 59, 235, 89, 180, 19, 196, 17, 244, 99, 224, 5, 137, 230, 64, 135, 35, 217, 94, 109, 35, 56, 5, 137, 1, 238, 4, 53, 228, 137, 125, 97, 70, 217, 176, 90, 136, 34, 201, 255, 190, 23, 37, 111, 165, 109, 246, 213, 209, 45, 68, 79, 180, 101, 39, 195, 229, 142, 197, 85, 179, 121, 53, 132, 14, 94, 106, 12, 148, 242, 203, 194, 170, 157, 142, 202, 189, 67, 144, 167}, +{122, 243, 31, 112, 193, 40, 227, 248, 33, 106, 99, 124, 249, 6, 201, 118, 97, 225, 189, 155, 68, 147, 249, 47, 93, 125, 147, 136, 216, 66, 105, 238, 133, 123, 36, 136, 30, 217, 189, 56, 190, 190, 38, 87, 3, 252, 151, 129, 253, 53, 221, 167, 15, 197, 95, 148, 14, 197, 44, 195, 53, 76, 192, 114, 56, 161, 222, 180, 4, 112, 199, 110, 105, 43, 194, 19, 219, 231, 182, 254, 233, 100, 73, 83, 225, 111, 0, 154, 224, 146, 104, 218, 255, 59, 46, 46, 122, 40, 189, 12, 218, 90, 196, 178, 23, 65, 154, 229, 218, 156, 145, 239, 157, 75, 210, 109, 236, 103, 29, 244, 26, 26, 103, 64, 149, 172, 117, 164}, +{148, 44, 67, 56, 22, 49, 226, 63, 53, 192, 6, 204, 109, 76, 146, 33, 163, 85, 160, 104, 247, 96, 59, 24, 228, 14, 82, 157, 177, 164, 239, 109, 12, 181, 249, 43, 111, 109, 181, 9, 156, 149, 108, 157, 245, 136, 53, 96, 255, 119, 174, 37, 190, 141, 40, 222, 151, 166, 88, 217, 144, 146, 80, 235, 50, 86, 74, 193, 124, 217, 216, 170, 22, 205, 206, 187, 223, 47, 39, 11, 108, 143, 186, 20, 131, 150, 148, 193, 70, 140, 81, 158, 183, 106, 78, 30, 0, 98, 142, 5, 55, 217, 181, 241, 149, 56, 168, 38, 242, 142, 208, 114, 90, 178, 101, 134, 81, 147, 65, 173, 114, 119, 234, 146, 161, 223, 62, 49}, +{185, 114, 74, 219, 17, 95, 135, 21, 200, 226, 93, 225, 65, 124, 156, 172, 69, 202, 54, 56, 186, 157, 157, 44, 48, 162, 238, 144, 157, 212, 103, 170, 75, 56, 244, 25, 99, 83, 33, 33, 130, 51, 28, 245, 186, 249, 62, 253, 122, 186, 96, 182, 88, 17, 147, 242, 253, 53, 244, 194, 48, 34, 135, 221, 101, 14, 145, 60, 159, 65, 59, 177, 175, 20, 130, 2, 16, 104, 123, 5, 178, 154, 101, 47, 3, 92, 101, 122, 209, 7, 27, 229, 92, 135, 93, 69, 42, 50, 184, 129, 50, 245, 41, 31, 201, 239, 106, 153, 136, 79, 252, 217, 113, 136, 121, 41, 251, 183, 204, 197, 250, 135, 218, 75, 208, 106, 255, 107}, +{19, 228, 105, 108, 134, 246, 16, 107, 205, 42, 177, 218, 163, 170, 9, 40, 66, 214, 6, 27, 20, 237, 166, 128, 177, 212, 14, 138, 252, 207, 100, 160, 253, 71, 176, 56, 18, 63, 105, 156, 189, 112, 64, 66, 242, 178, 58, 254, 26, 206, 12, 100, 93, 48, 103, 11, 16, 63, 0, 111, 221, 93, 57, 131, 39, 170, 65, 235, 112, 96, 112, 138, 164, 25, 135, 101, 87, 27, 200, 31, 191, 155, 205, 232, 54, 90, 52, 23, 153, 7, 45, 115, 220, 174, 93, 191, 188, 151, 2, 138, 134, 85, 184, 43, 167, 100, 207, 244, 45, 126, 66, 41, 66, 115, 109, 44, 37, 70, 115, 137, 206, 3, 26, 197, 134, 119, 185, 253}, +{76, 68, 192, 116, 40, 2, 38, 168, 62, 201, 157, 170, 58, 231, 163, 135, 0, 188, 10, 174, 149, 16, 195, 64, 138, 104, 137, 6, 137, 49, 225, 109, 22, 124, 113, 170, 141, 228, 218, 168, 59, 170, 69, 102, 94, 222, 121, 32, 188, 16, 156, 135, 255, 206, 83, 72, 126, 175, 204, 18, 69, 154, 225, 248, 66, 69, 125, 150, 100, 196, 195, 102, 100, 122, 30, 116, 246, 150, 182, 245, 44, 23, 173, 42, 43, 145, 131, 221, 55, 230, 16, 206, 123, 157, 21, 69, 112, 44, 107, 162, 8, 164, 153, 50, 188, 230, 11, 206, 30, 91, 214, 13, 243, 49, 233, 195, 206, 211, 74, 6, 140, 219, 63, 122, 28, 151, 128, 45}, +{102, 92, 245, 125, 168, 143, 111, 231, 37, 27, 45, 62, 213, 206, 239, 93, 3, 2, 177, 98, 85, 130, 149, 9, 131, 176, 240, 199, 254, 79, 166, 173, 165, 75, 133, 101, 247, 225, 205, 212, 88, 92, 14, 158, 221, 233, 128, 183, 33, 129, 155, 159, 16, 247, 207, 44, 85, 230, 176, 117, 78, 42, 240, 196, 105, 209, 166, 50, 0, 131, 85, 157, 255, 161, 26, 68, 252, 124, 247, 193, 237, 238, 164, 154, 177, 199, 218, 200, 139, 199, 106, 188, 143, 126, 185, 194, 251, 25, 234, 208, 57, 79, 249, 65, 24, 112, 125, 52, 201, 175, 2, 8, 104, 34, 1, 41, 183, 110, 171, 137, 211, 69, 2, 21, 202, 116, 15, 31}, +{196, 24, 52, 158, 146, 102, 187, 172, 223, 75, 18, 230, 101, 192, 104, 124, 91, 89, 199, 5, 111, 53, 64, 166, 230, 94, 163, 106, 66, 200, 190, 5, 76, 56, 122, 195, 87, 156, 123, 129, 98, 15, 228, 83, 182, 201, 165, 97, 89, 33, 67, 94, 233, 38, 24, 64, 218, 244, 170, 96, 123, 64, 235, 252, 16, 77, 239, 137, 136, 47, 227, 177, 211, 226, 67, 28, 79, 246, 30, 25, 127, 31, 178, 178, 175, 96, 166, 144, 144, 188, 79, 126, 92, 181, 32, 87, 185, 116, 74, 122, 105, 223, 132, 181, 164, 77, 31, 76, 88, 251, 250, 29, 69, 139, 105, 189, 181, 131, 40, 59, 239, 30, 252, 184, 67, 12, 165, 152}, +{149, 180, 148, 0, 249, 78, 194, 149, 109, 40, 216, 23, 33, 61, 205, 71, 192, 149, 85, 53, 38, 131, 206, 87, 106, 118, 68, 220, 58, 185, 111, 46, 207, 232, 234, 49, 196, 132, 28, 110, 5, 72, 208, 127, 62, 176, 24, 245, 105, 232, 114, 62, 179, 193, 57, 79, 9, 123, 117, 203, 34, 166, 177, 29, 186, 190, 211, 200, 50, 5, 37, 62, 66, 251, 54, 244, 122, 20, 118, 247, 239, 211, 120, 4, 104, 179, 114, 121, 180, 115, 239, 8, 102, 252, 128, 51, 242, 205, 94, 26, 37, 238, 58, 165, 89, 207, 97, 228, 238, 149, 93, 168, 166, 179, 29, 234, 142, 190, 121, 127, 159, 149, 69, 211, 102, 203, 33, 31}, +{41, 242, 211, 82, 246, 107, 31, 55, 249, 118, 252, 119, 127, 159, 65, 132, 163, 49, 248, 33, 87, 137, 110, 133, 51, 136, 245, 48, 172, 10, 126, 145, 50, 93, 125, 244, 105, 56, 182, 151, 85, 59, 34, 147, 249, 68, 90, 156, 246, 202, 174, 58, 181, 13, 182, 245, 199, 215, 234, 78, 159, 13, 132, 206, 224, 160, 60, 206, 245, 126, 168, 22, 217, 132, 218, 4, 235, 2, 90, 213, 103, 255, 186, 190, 90, 76, 225, 44, 104, 207, 131, 135, 77, 39, 231, 205, 172, 79, 170, 187, 154, 164, 41, 49, 13, 65, 232, 159, 151, 110, 142, 198, 192, 91, 238, 109, 12, 105, 232, 106, 30, 74, 238, 177, 127, 144, 22, 0}, +{51, 202, 44, 16, 126, 253, 89, 10, 114, 123, 113, 34, 144, 187, 92, 54, 108, 241, 253, 110, 251, 89, 62, 17, 164, 42, 176, 123, 81, 254, 93, 234, 208, 101, 58, 219, 144, 118, 100, 199, 189, 165, 72, 99, 84, 204, 34, 65, 22, 126, 97, 203, 238, 220, 113, 84, 195, 109, 251, 150, 69, 249, 219, 178, 158, 226, 120, 148, 175, 33, 149, 120, 4, 228, 121, 32, 60, 113, 86, 164, 93, 162, 244, 181, 72, 191, 174, 141, 34, 211, 190, 67, 7, 146, 71, 225, 229, 123, 138, 24, 199, 60, 136, 236, 82, 78, 99, 65, 190, 33, 65, 158, 103, 156, 105, 104, 163, 49, 252, 226, 50, 100, 19, 227, 132, 91, 91, 59}, +{16, 3, 147, 59, 15, 175, 210, 50, 57, 213, 64, 140, 138, 128, 110, 95, 80, 202, 41, 164, 44, 131, 191, 243, 23, 46, 222, 40, 242, 93, 167, 138, 191, 115, 81, 9, 12, 20, 86, 141, 210, 48, 123, 6, 244, 101, 77, 168, 237, 102, 197, 153, 83, 181, 106, 171, 48, 231, 11, 118, 16, 99, 188, 34, 39, 51, 240, 172, 44, 242, 17, 165, 25, 105, 22, 94, 40, 211, 84, 223, 67, 132, 80, 123, 218, 2, 84, 166, 178, 73, 217, 123, 23, 10, 83, 216, 111, 127, 118, 57, 173, 222, 164, 238, 3, 21, 60, 207, 35, 101, 171, 106, 143, 16, 190, 211, 208, 253, 119, 67, 119, 68, 125, 118, 53, 143, 54, 73}, +{138, 101, 168, 237, 217, 9, 43, 44, 249, 44, 149, 45, 27, 22, 174, 97, 95, 61, 248, 138, 45, 123, 220, 144, 23, 72, 168, 136, 0, 217, 19, 141, 81, 193, 245, 40, 0, 69, 60, 125, 9, 0, 170, 128, 124, 147, 122, 168, 63, 157, 132, 35, 190, 183, 163, 171, 23, 106, 37, 232, 73, 155, 147, 102, 207, 9, 159, 92, 137, 119, 209, 175, 41, 214, 122, 148, 11, 107, 219, 191, 152, 37, 214, 75, 142, 208, 58, 80, 57, 80, 191, 131, 9, 74, 182, 234, 37, 134, 76, 57, 141, 220, 209, 168, 148, 231, 127, 126, 231, 169, 196, 129, 146, 206, 207, 110, 213, 250, 116, 248, 215, 74, 190, 168, 214, 78, 140, 218}, +{37, 223, 33, 172, 77, 238, 28, 120, 120, 207, 185, 73, 229, 191, 40, 68, 208, 16, 175, 2, 165, 157, 73, 243, 94, 242, 138, 60, 90, 108, 33, 110, 52, 67, 180, 203, 29, 2, 158, 100, 119, 82, 254, 219, 107, 17, 67, 63, 106, 115, 100, 86, 65, 50, 111, 239, 141, 54, 196, 50, 156, 218, 122, 180, 237, 249, 115, 24, 133, 19, 204, 210, 237, 193, 49, 172, 246, 5, 197, 53, 158, 173, 39, 136, 3, 130, 249, 35, 128, 81, 132, 41, 213, 3, 92, 146, 154, 47, 67, 235, 234, 23, 233, 208, 58, 225, 66, 69, 226, 140, 250, 78, 246, 27, 210, 222, 73, 99, 133, 33, 42, 156, 60, 4, 104, 25, 7, 40}, +{135, 5, 136, 215, 55, 234, 38, 94, 74, 197, 77, 9, 204, 155, 72, 102, 56, 11, 195, 159, 179, 46, 138, 89, 177, 242, 65, 221, 153, 159, 250, 31, 195, 203, 167, 72, 150, 39, 240, 220, 167, 84, 39, 149, 139, 66, 74, 253, 254, 134, 116, 222, 236, 33, 189, 75, 220, 22, 187, 217, 156, 155, 17, 63, 229, 164, 184, 224, 121, 59, 48, 77, 69, 175, 138, 221, 164, 252, 70, 27, 67, 15, 241, 62, 144, 63, 84, 155, 79, 12, 140, 166, 6, 90, 99, 165, 81, 222, 91, 146, 35, 235, 96, 2, 208, 171, 171, 154, 10, 241, 101, 64, 207, 254, 145, 228, 69, 163, 33, 245, 192, 102, 153, 153, 55, 222, 81, 215}, +{159, 239, 156, 196, 130, 72, 247, 58, 116, 191, 2, 163, 46, 106, 215, 38, 158, 154, 131, 133, 163, 200, 108, 22, 63, 135, 111, 48, 56, 17, 67, 8, 4, 48, 153, 205, 254, 163, 166, 182, 166, 242, 104, 162, 224, 80, 35, 142, 214, 122, 173, 241, 74, 194, 124, 122, 191, 215, 46, 194, 2, 48, 176, 90, 216, 32, 122, 116, 101, 244, 93, 35, 84, 65, 112, 71, 94, 15, 18, 116, 111, 58, 121, 72, 112, 99, 73, 129, 44, 182, 85, 79, 8, 63, 222, 55, 116, 227, 124, 231, 79, 15, 217, 23, 24, 35, 122, 235, 232, 124, 92, 98, 57, 70, 99, 154, 151, 73, 144, 55, 61, 241, 9, 156, 17, 249, 94, 69}, +{35, 63, 193, 68, 114, 79, 108, 18, 242, 15, 124, 110, 119, 97, 183, 90, 181, 45, 215, 15, 22, 251, 207, 30, 22, 56, 182, 252, 72, 157, 119, 112, 90, 89, 71, 54, 109, 152, 3, 247, 108, 64, 178, 6, 212, 102, 251, 157, 32, 233, 0, 126, 106, 187, 182, 78, 132, 239, 112, 137, 149, 16, 190, 169, 213, 161, 54, 131, 5, 121, 236, 58, 183, 189, 206, 72, 163, 9, 153, 105, 36, 205, 238, 240, 123, 255, 128, 131, 170, 173, 149, 225, 55, 229, 99, 96, 152, 109, 87, 42, 240, 22, 75, 153, 79, 179, 11, 149, 115, 232, 111, 67, 10, 87, 22, 92, 175, 28, 52, 236, 125, 46, 19, 9, 204, 44, 119, 175}, +{168, 94, 243, 63, 81, 24, 216, 28, 163, 239, 213, 27, 190, 96, 145, 66, 220, 109, 180, 165, 75, 132, 117, 168, 1, 186, 37, 18, 170, 36, 222, 203, 33, 203, 61, 23, 11, 220, 70, 151, 138, 223, 61, 55, 51, 145, 208, 11, 226, 45, 153, 207, 193, 43, 233, 216, 238, 154, 117, 99, 119, 128, 156, 250, 245, 198, 234, 61, 7, 110, 254, 145, 158, 19, 16, 72, 81, 0, 208, 214, 81, 172, 53, 79, 45, 31, 238, 192, 226, 67, 135, 90, 166, 88, 250, 115, 89, 243, 241, 23, 168, 150, 26, 5, 36, 207, 122, 22, 69, 38, 105, 98, 5, 184, 202, 77, 35, 153, 16, 182, 210, 225, 188, 233, 234, 162, 154, 161}, +{165, 153, 163, 101, 252, 95, 19, 125, 210, 102, 214, 48, 139, 179, 76, 112, 42, 64, 215, 175, 243, 58, 155, 201, 186, 185, 14, 152, 224, 12, 85, 31, 184, 74, 155, 31, 18, 50, 7, 247, 143, 71, 236, 235, 159, 121, 245, 204, 17, 195, 215, 128, 112, 171, 22, 28, 158, 135, 212, 160, 133, 213, 96, 210, 80, 213, 193, 210, 91, 11, 240, 130, 158, 247, 234, 142, 149, 209, 160, 121, 188, 52, 182, 154, 215, 78, 161, 134, 78, 172, 25, 180, 248, 236, 121, 82, 142, 251, 182, 139, 230, 67, 73, 36, 44, 17, 27, 72, 58, 104, 106, 62, 60, 207, 171, 117, 237, 30, 168, 9, 36, 197, 28, 232, 190, 123, 13, 244}, +{9, 97, 176, 198, 48, 62, 109, 84, 20, 105, 21, 33, 32, 184, 131, 209, 228, 175, 25, 212, 59, 220, 19, 78, 213, 121, 157, 106, 192, 200, 87, 230, 73, 199, 67, 121, 228, 70, 227, 216, 29, 133, 33, 196, 28, 232, 89, 96, 61, 2, 189, 28, 120, 202, 106, 210, 94, 167, 158, 175, 157, 102, 65, 146, 167, 173, 150, 43, 8, 202, 63, 169, 17, 4, 160, 250, 72, 119, 136, 11, 157, 76, 222, 6, 177, 196, 138, 80, 128, 207, 214, 205, 143, 182, 219, 136, 178, 72, 63, 33, 225, 48, 65, 238, 133, 252, 64, 78, 139, 99, 169, 169, 47, 167, 50, 163, 245, 54, 28, 130, 166, 255, 85, 75, 116, 181, 33, 174}, +{21, 99, 58, 253, 62, 193, 117, 243, 79, 154, 184, 22, 106, 52, 227, 18, 19, 94, 6, 168, 17, 225, 57, 238, 251, 59, 223, 188, 207, 37, 16, 234, 193, 201, 36, 172, 121, 69, 213, 255, 70, 2, 174, 76, 41, 125, 85, 114, 1, 134, 35, 214, 85, 55, 169, 44, 253, 147, 136, 48, 189, 209, 124, 225, 43, 231, 167, 7, 100, 62, 142, 251, 135, 141, 224, 199, 138, 185, 129, 229, 170, 253, 103, 149, 51, 111, 102, 106, 72, 235, 188, 194, 26, 43, 38, 191, 54, 196, 98, 57, 68, 91, 163, 124, 38, 171, 173, 34, 175, 180, 174, 13, 101, 56, 88, 54, 223, 29, 22, 58, 155, 208, 87, 250, 71, 245, 38, 99}, +{26, 208, 147, 132, 72, 39, 154, 20, 54, 78, 228, 236, 67, 169, 113, 204, 51, 183, 66, 69, 244, 182, 132, 65, 54, 157, 32, 202, 190, 103, 45, 3, 96, 135, 37, 104, 66, 166, 109, 205, 207, 1, 179, 84, 57, 119, 144, 94, 142, 174, 174, 64, 81, 239, 245, 51, 78, 82, 91, 31, 209, 164, 46, 173, 169, 109, 131, 134, 93, 221, 243, 194, 10, 250, 129, 223, 148, 151, 181, 234, 132, 119, 192, 142, 113, 97, 171, 65, 143, 237, 101, 40, 59, 100, 136, 252, 20, 104, 161, 121, 119, 220, 54, 90, 37, 81, 232, 179, 85, 37, 188, 19, 235, 114, 231, 109, 53, 141, 100, 12, 215, 59, 59, 70, 110, 236, 124, 251}, +{152, 20, 141, 236, 155, 91, 255, 58, 92, 106, 94, 156, 74, 230, 146, 142, 222, 245, 34, 7, 186, 203, 79, 37, 164, 81, 197, 147, 73, 68, 253, 242, 204, 208, 60, 243, 203, 252, 51, 144, 21, 150, 6, 173, 169, 44, 196, 117, 50, 201, 164, 92, 134, 178, 181, 108, 241, 118, 80, 232, 69, 229, 15, 42, 122, 221, 105, 160, 222, 242, 33, 195, 239, 102, 127, 46, 89, 112, 199, 84, 14, 9, 127, 152, 19, 252, 157, 69, 172, 189, 212, 149, 222, 44, 63, 54, 184, 52, 67, 102, 154, 180, 54, 13, 42, 254, 14, 170, 13, 39, 60, 57, 154, 154, 4, 153, 137, 100, 209, 97, 242, 142, 178, 247, 69, 164, 218, 70}, +{41, 169, 49, 110, 40, 230, 179, 178, 53, 25, 155, 163, 216, 152, 252, 156, 106, 29, 185, 163, 246, 165, 176, 67, 192, 245, 67, 85, 200, 235, 108, 126, 129, 67, 41, 235, 7, 249, 225, 149, 48, 97, 30, 172, 123, 220, 53, 236, 26, 54, 248, 208, 35, 85, 194, 136, 70, 244, 70, 227, 72, 8, 174, 147, 108, 12, 26, 163, 252, 197, 86, 226, 253, 39, 229, 135, 216, 225, 197, 232, 144, 47, 98, 47, 85, 234, 179, 80, 65, 246, 172, 163, 162, 246, 20, 234, 154, 97, 26, 162, 90, 32, 145, 38, 188, 159, 85, 78, 183, 230, 45, 49, 188, 238, 17, 158, 108, 228, 167, 37, 42, 54, 203, 85, 10, 102, 208, 103}, +{196, 216, 56, 219, 166, 187, 74, 178, 115, 36, 79, 251, 212, 245, 128, 245, 18, 215, 125, 49, 37, 127, 118, 3, 137, 169, 249, 119, 63, 239, 2, 171, 85, 122, 223, 79, 94, 21, 34, 223, 130, 222, 221, 60, 90, 239, 254, 179, 118, 124, 239, 249, 58, 177, 77, 219, 144, 129, 59, 28, 20, 47, 134, 77, 110, 66, 135, 251, 10, 82, 223, 56, 45, 229, 142, 141, 244, 26, 27, 155, 190, 195, 62, 218, 189, 6, 182, 56, 51, 171, 245, 162, 189, 83, 200, 19, 90, 89, 24, 60, 23, 194, 56, 109, 225, 92, 74, 127, 153, 154, 103, 160, 22, 193, 207, 216, 53, 174, 80, 8, 247, 158, 99, 84, 36, 126, 165, 66}, +{95, 132, 240, 217, 203, 28, 139, 210, 149, 121, 2, 248, 70, 139, 89, 151, 112, 117, 161, 115, 217, 63, 15, 180, 233, 86, 204, 255, 111, 62, 230, 233, 136, 66, 165, 72, 131, 15, 74, 249, 200, 38, 61, 16, 122, 22, 94, 34, 4, 145, 180, 234, 200, 21, 97, 26, 49, 233, 137, 163, 76, 216, 228, 28, 87, 250, 223, 78, 187, 108, 35, 49, 5, 68, 249, 114, 230, 18, 180, 104, 151, 143, 76, 35, 12, 81, 38, 199, 115, 34, 110, 108, 230, 82, 182, 14, 169, 203, 75, 67, 121, 46, 144, 174, 52, 233, 244, 41, 75, 220, 150, 29, 54, 179, 31, 236, 70, 98, 173, 73, 106, 123, 121, 18, 153, 245, 97, 188}, +{154, 124, 10, 63, 47, 108, 61, 109, 201, 114, 108, 203, 27, 188, 162, 53, 136, 42, 128, 84, 36, 235, 233, 62, 109, 171, 255, 102, 224, 73, 60, 1, 245, 187, 191, 88, 236, 195, 223, 186, 61, 81, 35, 71, 71, 3, 90, 123, 37, 103, 138, 179, 44, 244, 42, 67, 77, 79, 84, 230, 9, 172, 167, 142, 238, 47, 57, 75, 134, 28, 210, 30, 130, 88, 155, 9, 3, 85, 244, 161, 17, 24, 3, 162, 127, 101, 250, 11, 64, 144, 76, 28, 229, 193, 55, 105, 164, 16, 219, 77, 165, 15, 250, 209, 201, 98, 82, 158, 87, 243, 84, 65, 129, 246, 181, 179, 149, 241, 99, 216, 172, 211, 185, 50, 250, 114, 52, 254}, +{187, 87, 246, 170, 201, 230, 37, 86, 191, 124, 134, 4, 82, 221, 193, 158, 145, 221, 31, 137, 135, 82, 19, 141, 191, 150, 251, 121, 125, 56, 0, 42, 21, 168, 30, 147, 27, 78, 20, 223, 200, 65, 185, 49, 27, 179, 232, 29, 137, 139, 100, 196, 188, 52, 145, 97, 209, 181, 241, 50, 245, 136, 234, 86, 58, 109, 183, 48, 227, 222, 127, 56, 141, 151, 91, 219, 204, 246, 202, 168, 228, 137, 40, 170, 220, 18, 227, 193, 12, 195, 242, 66, 76, 215, 154, 63, 112, 199, 25, 237, 148, 44, 99, 224, 165, 109, 239, 239, 196, 172, 110, 196, 91, 53, 21, 195, 39, 220, 3, 250, 54, 3, 253, 169, 170, 216, 147, 6}, +{145, 62, 6, 236, 31, 30, 26, 127, 121, 231, 25, 140, 227, 80, 203, 65, 68, 67, 255, 224, 83, 198, 235, 16, 94, 64, 216, 18, 97, 41, 242, 247, 75, 103, 173, 142, 194, 14, 182, 87, 123, 196, 73, 206, 94, 48, 232, 211, 21, 136, 31, 232, 115, 197, 234, 207, 84, 193, 8, 24, 12, 53, 208, 90, 230, 107, 248, 239, 74, 134, 20, 181, 224, 127, 56, 185, 5, 198, 67, 169, 213, 136, 120, 113, 110, 163, 194, 67, 105, 12, 31, 160, 31, 225, 208, 139, 67, 15, 16, 208, 123, 114, 182, 136, 28, 129, 116, 7, 209, 92, 6, 10, 17, 238, 245, 93, 5, 128, 0, 248, 144, 207, 4, 89, 75, 106, 137, 66}, +{171, 67, 231, 104, 191, 125, 227, 170, 132, 63, 167, 159, 145, 6, 16, 80, 139, 172, 40, 200, 54, 190, 57, 113, 199, 118, 22, 155, 206, 118, 252, 210, 103, 187, 47, 13, 155, 150, 154, 174, 116, 12, 168, 104, 153, 219, 148, 104, 202, 226, 249, 216, 139, 171, 90, 73, 224, 14, 59, 235, 31, 87, 184, 209, 108, 158, 194, 45, 91, 222, 16, 188, 14, 243, 44, 51, 18, 203, 27, 3, 140, 231, 73, 69, 34, 251, 67, 119, 208, 137, 84, 42, 5, 159, 13, 144, 175, 24, 91, 177, 32, 161, 246, 106, 108, 129, 160, 160, 240, 33, 233, 43, 105, 193, 33, 162, 252, 188, 30, 141, 163, 115, 193, 198, 119, 79, 207, 20}, +{36, 216, 138, 88, 220, 78, 134, 234, 209, 214, 243, 24, 40, 115, 234, 157, 16, 229, 88, 203, 252, 155, 76, 59, 210, 185, 94, 7, 96, 163, 249, 58, 110, 121, 187, 144, 221, 91, 113, 52, 105, 113, 64, 143, 113, 21, 138, 158, 157, 65, 170, 233, 113, 46, 99, 127, 100, 154, 85, 113, 7, 32, 200, 166, 175, 252, 212, 49, 57, 62, 103, 223, 63, 101, 150, 162, 171, 45, 249, 166, 226, 218, 24, 155, 209, 72, 108, 211, 5, 64, 149, 125, 92, 230, 28, 66, 212, 169, 229, 206, 102, 0, 60, 74, 15, 30, 182, 223, 193, 83, 163, 68, 109, 86, 103, 68, 193, 77, 78, 231, 13, 84, 35, 138, 139, 236, 87, 65}, +{105, 127, 69, 79, 33, 163, 253, 179, 201, 137, 68, 127, 109, 154, 132, 203, 108, 3, 114, 168, 91, 82, 11, 115, 253, 235, 203, 208, 122, 123, 151, 204, 94, 79, 136, 5, 21, 179, 50, 232, 100, 104, 5, 215, 234, 211, 119, 190, 3, 183, 54, 29, 231, 202, 90, 254, 93, 88, 242, 143, 70, 211, 56, 66, 141, 124, 5, 216, 97, 89, 218, 81, 23, 181, 240, 136, 145, 56, 27, 87, 33, 245, 78, 97, 129, 36, 57, 188, 33, 11, 96, 145, 249, 221, 177, 224, 58, 84, 189, 50, 186, 188, 0, 113, 59, 212, 241, 76, 217, 31, 145, 249, 129, 1, 11, 18, 71, 239, 124, 179, 20, 44, 251, 21, 176, 54, 161, 52}, +{75, 208, 242, 227, 214, 232, 201, 131, 238, 93, 5, 143, 239, 92, 207, 112, 215, 181, 248, 69, 32, 158, 120, 181, 55, 12, 190, 153, 13, 120, 81, 237, 119, 80, 92, 14, 80, 189, 18, 89, 249, 199, 88, 55, 161, 111, 169, 1, 223, 153, 123, 127, 240, 193, 254, 111, 240, 225, 33, 180, 135, 215, 63, 94, 91, 229, 55, 14, 220, 17, 86, 224, 208, 145, 57, 191, 241, 23, 62, 10, 113, 165, 85, 213, 71, 191, 168, 253, 145, 163, 252, 75, 53, 208, 224, 178, 115, 24, 27, 247, 178, 175, 223, 179, 57, 186, 236, 219, 57, 51, 241, 137, 207, 38, 118, 78, 74, 168, 31, 144, 77, 43, 17, 176, 0, 158, 20, 111}, +{64, 199, 232, 165, 217, 204, 173, 45, 32, 158, 82, 47, 94, 158, 147, 16, 186, 121, 142, 184, 214, 128, 54, 91, 198, 82, 205, 251, 239, 24, 122, 146, 138, 170, 79, 24, 94, 95, 63, 50, 228, 77, 12, 113, 27, 120, 22, 18, 137, 56, 29, 181, 216, 33, 85, 75, 30, 115, 162, 36, 2, 113, 53, 242, 158, 254, 230, 20, 110, 229, 121, 85, 45, 253, 72, 88, 56, 146, 247, 141, 12, 28, 34, 67, 119, 59, 33, 11, 10, 176, 63, 117, 190, 99, 205, 184, 36, 82, 141, 75, 114, 112, 88, 148, 127, 63, 234, 64, 55, 29, 171, 129, 0, 169, 160, 152, 77, 183, 202, 201, 26, 96, 52, 236, 215, 118, 147, 240}, +{5, 230, 165, 48, 87, 193, 109, 159, 175, 186, 252, 40, 212, 26, 69, 225, 139, 79, 13, 176, 198, 245, 4, 245, 204, 118, 172, 113, 135, 69, 85, 129, 196, 85, 10, 54, 125, 37, 210, 53, 130, 197, 240, 175, 76, 8, 129, 152, 159, 237, 29, 162, 228, 124, 143, 245, 205, 118, 98, 97, 123, 157, 106, 134, 40, 58, 161, 102, 126, 128, 141, 135, 98, 101, 206, 40, 205, 42, 241, 44, 223, 150, 126, 72, 25, 158, 90, 62, 80, 170, 59, 11, 60, 200, 47, 51, 13, 112, 112, 0, 158, 81, 172, 10, 194, 218, 103, 226, 103, 232, 227, 21, 201, 208, 60, 89, 117, 149, 68, 229, 219, 211, 103, 92, 133, 68, 152, 175}, +{26, 184, 116, 161, 60, 239, 92, 199, 125, 39, 235, 108, 141, 57, 129, 193, 25, 200, 164, 17, 111, 24, 61, 14, 118, 163, 71, 181, 93, 158, 183, 10, 47, 109, 79, 143, 242, 218, 30, 126, 181, 180, 99, 85, 229, 193, 64, 234, 19, 223, 54, 41, 253, 15, 112, 141, 227, 33, 51, 227, 34, 191, 42, 131, 109, 42, 177, 214, 130, 121, 1, 133, 142, 122, 39, 229, 102, 105, 211, 22, 112, 1, 181, 251, 186, 170, 13, 206, 188, 86, 214, 215, 9, 28, 87, 106, 156, 244, 143, 190, 212, 181, 197, 226, 235, 116, 118, 17, 234, 55, 196, 68, 90, 175, 149, 186, 162, 42, 213, 174, 142, 124, 152, 237, 31, 173, 32, 133}, +{65, 234, 103, 28, 41, 161, 29, 113, 43, 42, 76, 14, 80, 155, 56, 130, 48, 203, 236, 46, 243, 109, 173, 233, 246, 92, 175, 129, 76, 235, 231, 155, 246, 247, 95, 22, 231, 66, 124, 6, 39, 63, 95, 129, 3, 181, 4, 184, 88, 6, 17, 206, 77, 46, 176, 148, 85, 46, 143, 1, 223, 91, 179, 1, 170, 234, 97, 66, 226, 116, 81, 113, 213, 81, 19, 205, 133, 198, 235, 43, 77, 18, 140, 238, 61, 244, 219, 118, 209, 173, 240, 36, 48, 42, 230, 85, 232, 247, 118, 170, 208, 233, 71, 56, 75, 252, 2, 40, 104, 104, 227, 74, 67, 76, 70, 62, 254, 71, 212, 37, 102, 125, 232, 237, 175, 29, 142, 50}, +{156, 227, 203, 55, 164, 127, 129, 216, 116, 236, 208, 77, 106, 7, 184, 29, 68, 23, 213, 219, 138, 108, 17, 195, 131, 242, 39, 230, 104, 7, 148, 207, 7, 10, 166, 128, 42, 138, 42, 88, 152, 91, 8, 176, 151, 168, 94, 27, 161, 224, 185, 46, 179, 131, 109, 33, 150, 199, 120, 63, 144, 107, 195, 54, 161, 6, 15, 116, 219, 85, 165, 107, 139, 96, 17, 90, 91, 151, 119, 202, 20, 174, 192, 5, 54, 107, 172, 102, 218, 163, 118, 237, 139, 224, 253, 76, 241, 64, 157, 23, 93, 126, 116, 28, 208, 215, 187, 69, 27, 18, 86, 144, 68, 49, 67, 145, 2, 10, 249, 110, 154, 244, 133, 103, 161, 167, 59, 183}, +{20, 241, 96, 158, 35, 161, 64, 238, 144, 63, 45, 45, 13, 82, 190, 97, 198, 64, 87, 143, 28, 164, 248, 55, 16, 140, 144, 188, 215, 163, 45, 250, 58, 116, 203, 30, 21, 47, 44, 1, 233, 166, 120, 99, 132, 250, 150, 139, 102, 182, 135, 180, 70, 229, 152, 21, 206, 157, 252, 124, 213, 211, 106, 96, 150, 105, 109, 83, 122, 117, 100, 253, 177, 230, 70, 102, 227, 224, 17, 11, 150, 242, 129, 222, 245, 146, 78, 168, 58, 48, 235, 180, 124, 212, 7, 226, 200, 72, 80, 239, 199, 245, 172, 54, 244, 189, 104, 185, 17, 222, 60, 67, 46, 185, 202, 248, 223, 212, 60, 193, 39, 189, 42, 80, 196, 21, 148, 24}, +{122, 117, 66, 254, 88, 15, 1, 198, 136, 155, 183, 225, 207, 137, 11, 76, 222, 139, 105, 18, 193, 115, 217, 186, 195, 168, 17, 176, 101, 100, 235, 56, 157, 61, 17, 132, 11, 70, 206, 100, 91, 133, 39, 106, 222, 251, 178, 158, 217, 245, 18, 109, 109, 197, 161, 232, 107, 170, 157, 139, 121, 90, 102, 91, 220, 218, 54, 214, 111, 174, 25, 248, 210, 214, 56, 3, 58, 83, 198, 133, 34, 65, 234, 116, 221, 190, 91, 13, 173, 13, 66, 88, 198, 239, 120, 180, 228, 104, 48, 94, 139, 240, 14, 19, 192, 14, 107, 89, 24, 214, 109, 165, 204, 247, 208, 170, 210, 42, 251, 15, 82, 24, 131, 213, 151, 228, 164, 25}, +{186, 96, 64, 252, 152, 202, 181, 217, 71, 31, 47, 57, 206, 71, 173, 219, 15, 222, 231, 50, 210, 57, 239, 25, 96, 182, 227, 181, 206, 218, 137, 243, 149, 142, 148, 81, 209, 242, 142, 91, 119, 27, 22, 179, 175, 206, 57, 168, 91, 8, 26, 77, 156, 7, 40, 189, 241, 213, 47, 10, 217, 73, 67, 254, 184, 152, 73, 89, 222, 230, 184, 123, 82, 142, 195, 102, 233, 64, 42, 248, 52, 125, 231, 227, 228, 155, 68, 238, 118, 81, 8, 150, 121, 124, 253, 161, 2, 93, 113, 123, 110, 70, 155, 2, 247, 191, 205, 35, 214, 192, 28, 107, 169, 129, 233, 209, 194, 26, 130, 127, 151, 207, 117, 101, 93, 170, 246, 133}, +{175, 136, 17, 30, 148, 210, 141, 106, 195, 21, 171, 32, 64, 82, 53, 173, 33, 243, 173, 26, 182, 212, 186, 67, 224, 87, 189, 87, 174, 228, 77, 82, 22, 245, 66, 104, 14, 49, 8, 111, 53, 228, 232, 245, 30, 233, 121, 214, 68, 61, 141, 175, 93, 214, 233, 179, 41, 77, 208, 73, 144, 127, 24, 14, 98, 39, 213, 104, 125, 158, 118, 28, 210, 232, 194, 95, 22, 158, 34, 74, 84, 137, 219, 199, 171, 49, 147, 51, 102, 18, 36, 42, 107, 22, 247, 252, 8, 31, 139, 138, 61, 181, 108, 13, 251, 51, 28, 63, 243, 78, 133, 172, 77, 155, 17, 164, 240, 213, 106, 27, 132, 252, 104, 71, 217, 185, 147, 160}, +{166, 136, 181, 10, 0, 167, 213, 45, 198, 246, 108, 201, 198, 188, 4, 154, 246, 10, 28, 14, 143, 49, 55, 254, 226, 33, 189, 87, 159, 83, 116, 7, 193, 169, 217, 209, 89, 140, 190, 121, 200, 96, 227, 85, 26, 186, 81, 186, 64, 135, 144, 58, 94, 250, 25, 85, 10, 130, 48, 114, 148, 77, 71, 144, 110, 47, 65, 136, 69, 230, 211, 182, 196, 203, 185, 229, 212, 105, 206, 222, 77, 249, 104, 248, 250, 148, 9, 144, 82, 34, 223, 37, 245, 1, 35, 86, 220, 220, 165, 94, 119, 224, 198, 130, 17, 247, 96, 118, 189, 144, 186, 122, 196, 116, 216, 95, 109, 115, 134, 148, 22, 128, 192, 105, 81, 58, 162, 146}, +{145, 197, 127, 226, 244, 110, 56, 20, 28, 186, 254, 25, 103, 106, 71, 222, 9, 235, 99, 128, 17, 209, 128, 206, 37, 250, 89, 252, 136, 224, 208, 149, 200, 3, 10, 61, 111, 176, 216, 190, 45, 117, 174, 165, 94, 134, 13, 7, 241, 102, 224, 15, 162, 99, 44, 81, 171, 48, 222, 90, 220, 95, 63, 229, 166, 25, 124, 187, 126, 244, 143, 88, 173, 152, 95, 182, 79, 36, 197, 142, 177, 105, 179, 74, 51, 85, 155, 203, 41, 22, 200, 13, 144, 104, 66, 240, 240, 84, 198, 237, 20, 172, 74, 215, 167, 4, 217, 227, 221, 169, 218, 98, 158, 133, 168, 199, 243, 146, 236, 39, 219, 57, 147, 88, 25, 247, 190, 238}, +{29, 68, 211, 164, 35, 38, 135, 4, 115, 209, 154, 157, 143, 217, 98, 18, 119, 8, 247, 84, 229, 26, 252, 50, 233, 187, 115, 69, 181, 227, 12, 29, 43, 22, 139, 16, 130, 50, 112, 217, 181, 3, 107, 210, 200, 248, 140, 176, 10, 226, 46, 178, 104, 61, 170, 240, 65, 35, 7, 67, 23, 184, 75, 255, 190, 3, 27, 241, 45, 86, 121, 167, 252, 73, 89, 108, 225, 176, 161, 121, 80, 21, 172, 249, 251, 48, 12, 6, 26, 67, 229, 93, 182, 182, 216, 199, 29, 253, 47, 252, 145, 191, 123, 234, 92, 24, 64, 38, 134, 169, 19, 208, 128, 194, 96, 245, 197, 213, 160, 80, 53, 17, 208, 37, 74, 3, 178, 209}, +{193, 161, 191, 72, 161, 176, 10, 98, 79, 228, 138, 177, 29, 78, 149, 36, 40, 10, 54, 171, 145, 27, 178, 176, 41, 161, 31, 146, 207, 40, 15, 243, 191, 39, 123, 181, 229, 189, 169, 168, 169, 130, 57, 180, 192, 39, 137, 78, 179, 107, 40, 4, 48, 128, 44, 84, 25, 152, 65, 252, 187, 55, 197, 18, 193, 179, 12, 229, 16, 253, 4, 2, 29, 15, 106, 107, 141, 99, 221, 79, 130, 93, 65, 120, 203, 26, 147, 60, 231, 233, 48, 139, 110, 29, 49, 246, 92, 165, 203, 118, 113, 140, 35, 237, 103, 153, 169, 79, 7, 68, 173, 102, 65, 199, 178, 234, 136, 18, 16, 30, 89, 160, 247, 71, 73, 183, 208, 21}, +{169, 186, 116, 82, 198, 205, 242, 24, 128, 190, 68, 11, 221, 216, 90, 141, 3, 153, 114, 147, 78, 193, 218, 201, 73, 81, 67, 177, 228, 70, 165, 15, 92, 118, 93, 115, 255, 80, 156, 240, 48, 9, 14, 126, 111, 164, 28, 45, 19, 147, 172, 181, 50, 54, 106, 36, 90, 11, 27, 0, 244, 52, 25, 129, 232, 36, 99, 189, 80, 180, 13, 193, 183, 40, 149, 161, 118, 218, 184, 23, 120, 199, 65, 50, 13, 53, 241, 250, 101, 144, 222, 232, 96, 168, 242, 178, 249, 14, 196, 4, 169, 135, 113, 36, 20, 183, 120, 171, 124, 224, 25, 55, 3, 212, 117, 153, 141, 253, 102, 223, 21, 220, 132, 107, 30, 100, 113, 165}, +{124, 238, 195, 230, 8, 27, 233, 4, 119, 60, 199, 71, 104, 13, 95, 2, 59, 19, 137, 226, 16, 17, 186, 205, 22, 202, 74, 52, 164, 249, 69, 170, 203, 228, 72, 237, 201, 87, 23, 53, 183, 78, 176, 193, 55, 221, 54, 104, 90, 69, 68, 146, 15, 184, 152, 128, 8, 231, 204, 190, 71, 125, 164, 182, 140, 149, 135, 220, 184, 235, 40, 224, 127, 43, 85, 226, 212, 180, 163, 185, 138, 70, 107, 42, 243, 30, 26, 42, 20, 200, 39, 18, 233, 232, 237, 112, 100, 60, 242, 255, 237, 237, 145, 245, 120, 125, 21, 53, 200, 121, 168, 77, 131, 30, 132, 150, 201, 65, 58, 30, 104, 168, 241, 170, 115, 31, 162, 5}, +{90, 132, 128, 80, 239, 216, 97, 221, 81, 245, 171, 222, 227, 159, 148, 79, 64, 125, 92, 70, 11, 87, 229, 117, 81, 15, 240, 66, 200, 143, 1, 176, 149, 20, 27, 137, 87, 244, 113, 201, 193, 215, 132, 100, 107, 65, 239, 158, 122, 253, 79, 35, 198, 84, 139, 163, 251, 164, 223, 160, 37, 127, 31, 25, 2, 24, 153, 9, 115, 243, 200, 173, 30, 73, 173, 33, 128, 58, 186, 184, 13, 76, 254, 200, 137, 74, 226, 48, 70, 69, 188, 33, 132, 44, 122, 158, 220, 116, 194, 113, 240, 86, 25, 41, 143, 163, 188, 159, 12, 9, 70, 210, 116, 125, 48, 243, 116, 255, 128, 19, 67, 193, 150, 88, 25, 10, 171, 174}, +{175, 231, 204, 141, 255, 46, 220, 248, 207, 162, 32, 40, 148, 29, 19, 252, 15, 149, 9, 93, 66, 16, 135, 180, 60, 28, 24, 22, 67, 113, 139, 137, 221, 110, 66, 229, 82, 52, 254, 210, 179, 2, 141, 5, 97, 242, 151, 244, 152, 31, 98, 166, 68, 169, 84, 181, 125, 141, 186, 90, 135, 38, 121, 3, 100, 45, 57, 208, 167, 215, 157, 117, 57, 38, 182, 54, 194, 184, 101, 250, 70, 62, 165, 204, 97, 54, 89, 41, 74, 116, 179, 152, 96, 193, 189, 163, 145, 1, 53, 130, 31, 168, 159, 127, 4, 125, 159, 169, 159, 114, 222, 154, 236, 213, 100, 51, 97, 244, 223, 88, 126, 57, 173, 25, 180, 229, 50, 158}, +{115, 117, 175, 104, 21, 44, 74, 7, 119, 117, 175, 203, 57, 56, 152, 181, 35, 176, 40, 111, 81, 168, 248, 91, 89, 21, 185, 247, 117, 185, 216, 223, 89, 161, 216, 29, 68, 12, 51, 84, 118, 145, 141, 55, 1, 174, 4, 68, 190, 109, 205, 125, 167, 228, 251, 47, 15, 155, 170, 25, 88, 80, 10, 59, 202, 198, 101, 92, 123, 218, 220, 216, 101, 254, 214, 69, 33, 200, 59, 151, 226, 71, 111, 212, 226, 190, 145, 181, 177, 239, 37, 39, 143, 175, 254, 47, 98, 156, 34, 153, 225, 14, 143, 157, 205, 255, 155, 246, 240, 49, 24, 148, 185, 61, 143, 212, 137, 115, 86, 245, 186, 247, 105, 28, 194, 49, 92, 144}, +{182, 170, 227, 234, 85, 139, 87, 204, 68, 33, 208, 181, 152, 243, 223, 132, 26, 147, 95, 128, 134, 54, 27, 26, 42, 177, 94, 67, 109, 227, 223, 145, 182, 20, 233, 5, 175, 16, 77, 221, 94, 122, 183, 127, 27, 170, 117, 97, 19, 14, 153, 203, 62, 51, 253, 64, 18, 14, 197, 4, 128, 31, 138, 158, 111, 188, 43, 2, 123, 248, 92, 168, 129, 203, 68, 59, 61, 218, 250, 244, 27, 105, 100, 76, 34, 128, 38, 210, 111, 102, 211, 162, 175, 132, 89, 61, 184, 46, 120, 189, 218, 42, 32, 139, 63, 2, 99, 75, 218, 224, 75, 165, 212, 109, 125, 17, 240, 214, 184, 33, 231, 142, 122, 185, 114, 225, 227}, +{145, 26, 71, 152, 167, 43, 139, 26, 198, 239, 81, 205, 206, 72, 154, 182, 99, 160, 26, 55, 33, 202, 78, 25, 208, 88, 39, 189, 91, 26, 187, 254, 102, 86, 3, 81, 116, 87, 193, 62, 168, 94, 74, 158, 200, 18, 171, 174, 221, 10, 54, 67, 136, 86, 35, 24, 227, 115, 5, 180, 190, 226, 180, 83, 21, 199, 19, 169, 61, 114, 136, 201, 194, 104, 86, 211, 190, 31, 219, 140, 57, 221, 122, 184, 215, 150, 246, 166, 233, 192, 220, 198, 232, 90, 200, 138, 21, 151, 196, 199, 179, 215, 255, 195, 74, 87, 116, 120, 60, 230, 183, 1, 79, 37, 13, 247, 243, 210, 221, 59, 203, 237, 47, 184, 77, 130, 51, 142}, +{73, 37, 119, 200, 60, 64, 207, 54, 243, 198, 184, 110, 32, 156, 33, 236, 55, 40, 168, 255, 122, 121, 28, 35, 12, 46, 66, 141, 206, 48, 201, 138, 223, 243, 8, 126, 40, 150, 176, 33, 155, 125, 105, 128, 207, 126, 188, 241, 160, 25, 5, 189, 24, 77, 176, 226, 209, 81, 207, 227, 192, 16, 126, 121, 81, 163, 24, 37, 122, 175, 51, 90, 205, 250, 54, 64, 50, 139, 180, 244, 58, 1, 50, 244, 201, 225, 105, 114, 149, 145, 18, 120, 11, 116, 196, 161, 235, 41, 195, 57, 55, 238, 88, 186, 111, 34, 109, 39, 3, 49, 19, 102, 95, 8, 233, 17, 65, 226, 205, 192, 81, 17, 176, 133, 100, 244, 153, 91}, +{176, 152, 116, 71, 86, 210, 151, 128, 83, 165, 155, 129, 118, 46, 253, 224, 4, 62, 101, 235, 33, 103, 166, 51, 53, 101, 36, 189, 130, 130, 235, 113, 239, 29, 24, 12, 170, 112, 229, 24, 183, 230, 116, 2, 237, 160, 124, 89, 225, 212, 95, 24, 147, 67, 160, 15, 110, 68, 130, 101, 165, 174, 246, 247, 131, 6, 153, 157, 202, 220, 222, 188, 242, 37, 221, 181, 15, 178, 135, 172, 241, 12, 23, 155, 42, 32, 93, 1, 245, 161, 192, 119, 205, 252, 169, 68, 217, 82, 9, 151, 152, 49, 5, 119, 125, 2, 52, 210, 24, 21, 111, 131, 254, 173, 35, 253, 235, 231, 40, 193, 198, 96, 150, 239, 210, 80, 248, 220}, +{194, 5, 7, 239, 100, 139, 223, 16, 241, 86, 185, 45, 150, 42, 117, 19, 223, 90, 178, 10, 81, 235, 23, 251, 101, 168, 72, 64, 135, 11, 150, 67, 214, 198, 155, 216, 236, 174, 15, 63, 129, 226, 114, 139, 131, 188, 105, 38, 197, 2, 195, 181, 34, 201, 180, 231, 169, 227, 246, 60, 134, 210, 55, 67, 33, 225, 199, 14, 222, 114, 213, 254, 77, 122, 210, 154, 90, 78, 108, 52, 210, 88, 192, 153, 2, 243, 112, 0, 203, 222, 200, 70, 144, 43, 24, 187, 158, 221, 111, 153, 56, 102, 246, 188, 50, 229, 234, 110, 234, 240, 82, 232, 126, 190, 247, 120, 143, 112, 232, 240, 248, 157, 230, 109, 21, 164, 248, 25}, +{178, 156, 107, 120, 88, 43, 28, 157, 99, 156, 219, 252, 24, 254, 81, 142, 21, 130, 183, 219, 187, 35, 16, 164, 116, 146, 109, 196, 104, 120, 54, 35, 25, 188, 210, 6, 197, 208, 228, 154, 238, 172, 65, 246, 151, 91, 195, 212, 159, 198, 81, 37, 251, 253, 240, 12, 251, 21, 190, 121, 118, 43, 182, 53, 189, 14, 0, 77, 198, 163, 222, 57, 187, 95, 113, 0, 147, 61, 39, 88, 53, 141, 36, 216, 96, 205, 211, 30, 99, 196, 2, 94, 129, 215, 131, 64, 39, 207, 109, 162, 246, 89, 90, 226, 8, 43, 195, 28, 200, 22, 116, 204, 212, 242, 97, 60, 150, 67, 49, 76, 197, 186, 68, 166, 179, 115, 50, 162}, +{177, 83, 215, 137, 173, 194, 105, 255, 119, 35, 243, 71, 33, 109, 40, 144, 171, 70, 104, 160, 18, 252, 2, 153, 18, 169, 112, 108, 95, 136, 48, 113, 98, 153, 159, 177, 147, 30, 202, 231, 211, 154, 166, 30, 25, 180, 104, 185, 23, 153, 177, 153, 68, 31, 207, 118, 7, 242, 222, 22, 75, 242, 123, 174, 90, 116, 98, 11, 243, 253, 182, 199, 165, 68, 226, 120, 98, 113, 28, 101, 77, 43, 90, 148, 185, 71, 156, 10, 11, 177, 136, 94, 17, 34, 72, 219, 0, 1, 110, 33, 55, 127, 63, 141, 136, 12, 59, 32, 54, 238, 10, 74, 157, 125, 26, 222, 233, 148, 166, 1, 222, 175, 160, 118, 9, 139, 73, 227}, +{61, 203, 224, 209, 81, 205, 165, 152, 224, 8, 94, 199, 238, 190, 201, 85, 56, 54, 151, 4, 84, 32, 40, 213, 150, 99, 107, 131, 192, 8, 75, 139, 193, 44, 112, 100, 231, 16, 239, 200, 18, 104, 110, 75, 79, 140, 225, 80, 151, 28, 16, 167, 185, 156, 230, 86, 74, 179, 203, 209, 144, 49, 2, 250, 138, 228, 81, 89, 229, 97, 31, 68, 33, 173, 173, 3, 136, 56, 150, 216, 108, 9, 71, 208, 138, 22, 230, 124, 220, 234, 33, 13, 160, 0, 73, 79, 58, 147, 90, 152, 191, 222, 64, 136, 57, 221, 111, 149, 18, 42, 52, 190, 27, 187, 37, 30, 216, 53, 142, 169, 153, 136, 27, 56, 170, 62, 129, 77}, +{194, 110, 90, 133, 107, 91, 156, 101, 126, 67, 144, 35, 191, 61, 182, 77, 91, 224, 107, 160, 120, 180, 224, 251, 240, 12, 188, 20, 186, 246, 126, 208, 82, 104, 111, 32, 36, 38, 229, 32, 37, 37, 235, 15, 36, 31, 104, 152, 96, 190, 108, 120, 239, 80, 53, 1, 224, 131, 213, 228, 87, 118, 36, 238, 227, 71, 187, 238, 26, 238, 19, 195, 155, 167, 4, 198, 155, 69, 127, 32, 226, 133, 192, 116, 219, 182, 249, 226, 117, 30, 79, 199, 240, 251, 204, 34, 70, 191, 21, 94, 194, 216, 163, 194, 144, 176, 61, 91, 125, 97, 40, 1, 229, 211, 235, 79, 91, 28, 35, 221, 182, 120, 165, 89, 117, 182, 118, 115}, +{44, 134, 211, 173, 134, 130, 213, 31, 35, 235, 232, 1, 149, 155, 234, 237, 163, 83, 173, 12, 212, 171, 189, 37, 168, 28, 253, 14, 46, 63, 111, 149, 12, 70, 14, 50, 12, 221, 168, 117, 207, 147, 163, 53, 70, 147, 166, 233, 206, 94, 81, 101, 157, 197, 166, 246, 64, 9, 76, 153, 87, 48, 35, 170, 158, 144, 2, 136, 168, 19, 83, 65, 220, 135, 144, 189, 67, 251, 88, 40, 149, 115, 59, 53, 224, 119, 18, 196, 23, 87, 86, 11, 1, 29, 24, 218, 48, 251, 13, 4, 56, 121, 71, 166, 46, 157, 150, 215, 188, 157, 44, 173, 148, 116, 244, 177, 44, 111, 41, 47, 234, 36, 44, 181, 0, 194, 195, 66}, +{2, 2, 74, 188, 57, 193, 211, 46, 126, 179, 41, 14, 204, 151, 58, 124, 123, 184, 120, 34, 71, 81, 224, 190, 19, 152, 117, 194, 195, 170, 58, 9, 45, 180, 31, 147, 215, 40, 7, 144, 28, 184, 98, 198, 154, 94, 170, 66, 120, 250, 205, 63, 16, 150, 124, 207, 41, 168, 18, 116, 95, 91, 205, 244, 138, 198, 236, 38, 161, 225, 55, 93, 184, 158, 87, 254, 142, 203, 140, 139, 55, 232, 216, 119, 100, 191, 120, 110, 175, 209, 195, 22, 186, 153, 160, 27, 181, 38, 146, 139, 234, 144, 103, 67, 93, 207, 128, 190, 223, 35, 118, 55, 25, 62, 204, 89, 113, 154, 202, 58, 100, 231, 119, 206, 0, 166, 212, 243}, +{120, 166, 244, 27, 3, 87, 174, 235, 109, 128, 182, 61, 58, 203, 84, 76, 187, 222, 251, 224, 44, 228, 54, 219, 184, 232, 213, 225, 82, 210, 13, 185, 74, 96, 248, 235, 65, 0, 47, 221, 180, 77, 69, 223, 48, 138, 68, 53, 63, 155, 152, 76, 176, 144, 47, 188, 71, 9, 37, 193, 11, 169, 222, 41, 248, 28, 179, 138, 137, 152, 197, 123, 244, 165, 214, 137, 124, 57, 119, 250, 50, 59, 160, 199, 140, 54, 68, 56, 194, 230, 121, 115, 31, 21, 141, 135, 196, 92, 245, 9, 63, 114, 179, 75, 52, 129, 244, 31, 132, 25, 230, 187, 224, 230, 172, 219, 210, 183, 141, 59, 94, 156, 126, 32, 106, 71, 201, 55}, +{210, 120, 9, 127, 30, 26, 4, 112, 170, 225, 210, 180, 4, 167, 205, 134, 145, 213, 50, 92, 166, 134, 90, 132, 208, 153, 254, 205, 9, 195, 16, 183, 97, 49, 44, 116, 38, 192, 252, 61, 74, 8, 54, 235, 113, 68, 141, 171, 51, 26, 118, 51, 244, 37, 7, 95, 62, 208, 57, 70, 175, 183, 25, 70, 150, 245, 232, 177, 36, 237, 169, 3, 175, 37, 214, 92, 62, 17, 200, 110, 158, 83, 19, 79, 118, 21, 246, 98, 50, 158, 191, 120, 209, 243, 51, 119, 20, 78, 176, 70, 90, 200, 70, 251, 239, 55, 103, 196, 250, 97, 94, 68, 192, 45, 159, 152, 242, 168, 207, 208, 75, 140, 111, 153, 123, 48, 103, 8}, +{98, 40, 185, 206, 106, 117, 88, 146, 79, 116, 220, 160, 166, 168, 17, 69, 255, 24, 126, 209, 135, 72, 136, 154, 74, 97, 109, 79, 183, 167, 7, 121, 246, 176, 126, 228, 252, 188, 107, 159, 175, 234, 165, 61, 195, 196, 202, 94, 160, 166, 201, 235, 243, 18, 122, 147, 20, 55, 239, 78, 150, 241, 54, 228, 169, 122, 9, 225, 140, 210, 99, 178, 202, 27, 41, 44, 127, 240, 221, 200, 208, 105, 248, 171, 216, 117, 102, 217, 121, 216, 193, 13, 70, 193, 6, 236, 105, 152, 47, 126, 2, 40, 1, 210, 57, 158, 166, 238, 170, 123, 242, 135, 18, 40, 9, 164, 138, 149, 136, 115, 176, 189, 58, 13, 31, 123, 233, 25}, +{199, 151, 60, 9, 190, 184, 138, 253, 31, 147, 89, 55, 198, 234, 230, 55, 21, 113, 112, 202, 23, 57, 127, 2, 92, 208, 30, 188, 3, 209, 75, 243, 222, 75, 163, 228, 248, 106, 40, 238, 69, 173, 147, 205, 79, 181, 176, 135, 228, 207, 129, 165, 35, 164, 228, 184, 118, 128, 27, 231, 144, 163, 3, 129, 118, 253, 38, 164, 144, 38, 24, 5, 224, 85, 13, 162, 23, 132, 34, 82, 142, 194, 205, 78, 247, 49, 16, 194, 215, 238, 141, 217, 137, 21, 182, 31, 32, 177, 50, 111, 229, 251, 98, 172, 116, 100, 146, 52, 169, 127, 10, 139, 100, 9, 224, 116, 228, 187, 14, 64, 224, 29, 133, 37, 177, 164, 16, 178}, +{200, 94, 32, 10, 245, 247, 107, 137, 210, 58, 25, 221, 102, 56, 43, 227, 8, 55, 97, 109, 166, 231, 242, 140, 166, 229, 195, 58, 170, 6, 65, 11, 214, 64, 241, 151, 163, 147, 31, 198, 119, 98, 237, 254, 90, 79, 16, 5, 28, 255, 194, 93, 168, 1, 177, 53, 59, 56, 136, 2, 95, 203, 22, 25, 93, 133, 132, 171, 190, 28, 37, 255, 236, 204, 3, 105, 24, 11, 148, 102, 127, 45, 17, 234, 230, 128, 83, 158, 5, 98, 224, 233, 90, 84, 2, 123, 20, 196, 50, 230, 11, 149, 46, 150, 65, 30, 124, 117, 154, 176, 113, 214, 24, 77, 29, 110, 241, 119, 46, 241, 56, 176, 136, 219, 57, 213, 198, 28}, +{158, 136, 32, 11, 10, 6, 60, 12, 217, 157, 179, 172, 26, 229, 137, 236, 30, 221, 223, 26, 28, 94, 166, 13, 175, 77, 248, 170, 81, 108, 231, 22, 15, 145, 171, 245, 7, 247, 189, 92, 51, 147, 34, 195, 144, 241, 90, 199, 140, 82, 103, 12, 161, 40, 255, 106, 103, 82, 130, 33, 45, 147, 53, 180, 206, 183, 247, 143, 221, 126, 98, 251, 216, 125, 85, 144, 105, 163, 132, 179, 137, 71, 204, 13, 125, 252, 1, 171, 135, 119, 158, 49, 183, 43, 240, 73, 115, 164, 80, 186, 2, 105, 230, 5, 15, 27, 198, 103, 111, 239, 27, 200, 151, 188, 205, 182, 32, 157, 254, 108, 196, 148, 149, 168, 47, 29, 237, 137}, +{177, 115, 5, 190, 193, 19, 150, 10, 104, 106, 247, 107, 149, 226, 42, 69, 232, 228, 18, 150, 183, 191, 98, 165, 147, 2, 106, 24, 195, 121, 228, 230, 201, 185, 126, 123, 168, 210, 132, 157, 127, 200, 194, 155, 217, 73, 147, 66, 64, 16, 105, 24, 94, 166, 142, 158, 193, 58, 6, 94, 69, 193, 14, 134, 107, 215, 183, 34, 178, 192, 235, 5, 4, 205, 195, 43, 210, 72, 196, 76, 135, 96, 176, 27, 251, 134, 166, 171, 33, 9, 224, 218, 97, 119, 11, 45, 40, 46, 59, 97, 235, 21, 150, 251, 198, 79, 201, 200, 37, 4, 130, 86, 219, 64, 250, 187, 58, 81, 85, 199, 81, 11, 161, 234, 16, 28, 192, 97}, +{135, 202, 109, 145, 221, 238, 62, 230, 23, 226, 236, 14, 183, 21, 196, 249, 32, 133, 127, 194, 131, 218, 224, 113, 198, 45, 49, 128, 160, 227, 149, 104, 216, 80, 33, 158, 236, 126, 164, 128, 126, 37, 147, 44, 1, 82, 70, 166, 225, 95, 191, 95, 15, 148, 60, 71, 21, 244, 181, 185, 100, 240, 182, 161, 228, 44, 216, 222, 171, 139, 110, 179, 56, 167, 229, 186, 18, 171, 29, 214, 134, 78, 82, 31, 48, 14, 229, 149, 91, 29, 111, 168, 109, 198, 224, 228, 85, 127, 33, 200, 236, 199, 75, 249, 40, 23, 123, 229, 209, 36, 160, 52, 128, 164, 14, 239, 242, 124, 28, 52, 180, 93, 100, 39, 68, 145, 207, 237}, +{179, 209, 248, 146, 21, 60, 224, 96, 255, 251, 144, 63, 39, 237, 79, 131, 58, 40, 192, 111, 77, 149, 145, 74, 67, 126, 57, 254, 205, 75, 205, 135, 171, 238, 177, 193, 254, 89, 253, 193, 52, 203, 118, 37, 94, 77, 232, 59, 120, 153, 39, 185, 243, 67, 36, 28, 83, 59, 99, 79, 120, 28, 16, 134, 210, 132, 26, 251, 107, 109, 92, 70, 68, 21, 197, 78, 108, 176, 43, 111, 66, 185, 216, 135, 40, 238, 136, 248, 199, 97, 63, 165, 57, 69, 134, 189, 76, 10, 175, 35, 107, 95, 232, 14, 68, 40, 84, 20, 32, 99, 131, 28, 203, 58, 188, 90, 19, 232, 191, 224, 7, 190, 217, 237, 169, 102, 163, 175}, +{207, 97, 122, 82, 207, 25, 129, 136, 166, 125, 224, 122, 182, 184, 146, 226, 5, 170, 62, 238, 131, 132, 223, 33, 252, 18, 238, 178, 176, 155, 186, 75, 243, 42, 179, 140, 93, 50, 39, 135, 231, 2, 152, 205, 7, 252, 150, 81, 34, 60, 78, 196, 197, 210, 4, 166, 200, 242, 48, 85, 111, 224, 77, 214, 183, 222, 15, 253, 124, 73, 97, 185, 118, 201, 74, 49, 0, 154, 211, 7, 8, 222, 72, 119, 39, 250, 96, 156, 64, 166, 231, 113, 68, 1, 103, 82, 0, 102, 134, 165, 217, 45, 1, 37, 56, 38, 114, 158, 246, 166, 86, 89, 191, 50, 162, 252, 148, 45, 127, 61, 41, 44, 242, 248, 10, 192, 148, 9}, +{103, 186, 117, 14, 153, 70, 101, 239, 123, 175, 210, 17, 99, 211, 86, 100, 234, 160, 254, 232, 134, 126, 108, 123, 250, 177, 187, 139, 233, 223, 14, 213, 250, 202, 229, 5, 123, 158, 190, 35, 16, 184, 159, 214, 150, 177, 171, 137, 21, 87, 121, 68, 49, 6, 92, 149, 32, 171, 60, 236, 234, 166, 177, 241, 8, 52, 68, 170, 83, 189, 1, 20, 228, 175, 65, 64, 243, 90, 75, 239, 181, 88, 204, 190, 146, 226, 239, 29, 232, 112, 213, 189, 155, 254, 13, 243, 246, 214, 151, 64, 233, 247, 28, 73, 55, 202, 155, 116, 66, 56, 149, 192, 77, 161, 171, 127, 246, 208, 250, 31, 81, 13, 146, 112, 223, 43, 249, 153}, +{47, 97, 143, 207, 150, 166, 120, 215, 209, 120, 167, 74, 212, 135, 89, 14, 155, 100, 130, 24, 170, 106, 241, 143, 44, 234, 192, 167, 109, 147, 155, 145, 128, 90, 177, 100, 150, 249, 74, 50, 143, 160, 246, 58, 9, 213, 52, 180, 191, 82, 215, 168, 98, 45, 16, 171, 181, 207, 177, 118, 106, 3, 30, 226, 154, 92, 23, 157, 173, 193, 32, 70, 123, 228, 187, 47, 179, 207, 83, 211, 243, 127, 11, 144, 200, 117, 112, 168, 249, 110, 156, 126, 40, 253, 131, 112, 37, 16, 40, 38, 248, 211, 112, 211, 247, 37, 29, 65, 92, 242, 68, 67, 51, 162, 192, 214, 202, 53, 254, 127, 11, 97, 122, 177, 86, 144, 74, 68}, +{11, 236, 233, 244, 128, 241, 170, 65, 220, 169, 85, 113, 44, 19, 11, 123, 67, 73, 11, 241, 243, 97, 237, 207, 182, 92, 232, 79, 59, 202, 38, 69, 208, 62, 38, 109, 83, 101, 239, 2, 85, 0, 144, 118, 121, 117, 2, 202, 249, 217, 195, 22, 229, 152, 100, 175, 221, 149, 135, 97, 12, 65, 174, 228, 56, 51, 139, 167, 78, 136, 103, 129, 94, 117, 120, 48, 84, 57, 182, 93, 231, 129, 39, 28, 249, 144, 240, 64, 34, 154, 132, 173, 74, 23, 165, 82, 202, 196, 225, 164, 170, 212, 36, 236, 191, 217, 40, 230, 227, 19, 152, 134, 138, 84, 138, 199, 22, 107, 177, 244, 229, 28, 167, 166, 244, 186, 226, 168}, +{10, 136, 103, 211, 173, 173, 161, 170, 35, 232, 154, 224, 82, 67, 197, 128, 39, 59, 38, 182, 222, 133, 185, 204, 91, 127, 13, 75, 248, 233, 175, 159, 116, 131, 153, 70, 125, 99, 79, 225, 90, 113, 148, 35, 93, 16, 117, 200, 152, 182, 222, 127, 24, 228, 218, 147, 190, 42, 33, 13, 219, 42, 191, 132, 86, 188, 113, 119, 159, 73, 243, 191, 10, 73, 205, 139, 92, 85, 46, 187, 222, 136, 141, 181, 236, 60, 244, 243, 72, 158, 191, 81, 40, 43, 153, 242, 250, 87, 49, 198, 10, 214, 205, 42, 2, 142, 26, 226, 117, 239, 240, 27, 42, 141, 98, 118, 219, 245, 175, 160, 155, 56, 34, 154, 79, 50, 182, 207}, +{91, 36, 132, 176, 238, 99, 166, 218, 200, 55, 27, 95, 90, 240, 135, 68, 237, 205, 59, 172, 22, 187, 138, 119, 5, 37, 21, 204, 33, 163, 42, 250, 118, 131, 88, 32, 124, 163, 183, 180, 74, 243, 194, 82, 22, 95, 252, 221, 209, 123, 149, 39, 175, 225, 9, 145, 28, 123, 8, 29, 79, 201, 151, 231, 47, 200, 80, 50, 219, 91, 196, 48, 20, 8, 247, 211, 188, 226, 189, 134, 43, 157, 81, 113, 243, 142, 160, 110, 70, 218, 97, 175, 205, 182, 76, 240, 64, 144, 52, 103, 141, 174, 164, 129, 198, 18, 166, 233, 184, 136, 229, 168, 43, 176, 188, 136, 252, 138, 49, 238, 251, 85, 140, 154, 107, 80, 71, 98}, +{183, 239, 179, 133, 195, 226, 210, 143, 229, 130, 74, 27, 162, 207, 238, 141, 3, 246, 177, 36, 140, 23, 60, 210, 0, 161, 87, 33, 104, 178, 10, 103, 134, 143, 186, 39, 84, 222, 27, 25, 161, 59, 56, 76, 183, 155, 109, 242, 152, 198, 17, 49, 24, 205, 254, 191, 44, 5, 158, 6, 66, 252, 119, 86, 120, 190, 203, 196, 124, 4, 177, 142, 135, 226, 173, 146, 64, 244, 126, 12, 103, 62, 174, 63, 137, 156, 225, 172, 0, 106, 109, 32, 203, 229, 61, 76, 110, 128, 158, 150, 93, 90, 200, 73, 126, 201, 153, 47, 112, 91, 189, 173, 205, 72, 130, 229, 181, 174, 186, 148, 62, 112, 227, 202, 251, 121, 144, 112}, +{127, 152, 67, 114, 165, 250, 229, 145, 32, 250, 157, 36, 70, 199, 63, 56, 2, 2, 51, 31, 133, 21, 3, 111, 206, 72, 59, 211, 21, 175, 193, 109, 245, 133, 117, 195, 2, 132, 87, 25, 14, 122, 249, 82, 28, 10, 112, 189, 249, 234, 65, 15, 84, 224, 11, 196, 249, 156, 30, 215, 22, 63, 122, 130, 240, 168, 191, 216, 23, 0, 120, 205, 42, 140, 137, 87, 249, 76, 249, 209, 57, 74, 14, 82, 58, 138, 104, 111, 108, 65, 77, 94, 130, 120, 67, 85, 68, 69, 14, 10, 167, 153, 119, 203, 75, 11, 24, 239, 167, 165, 31, 91, 4, 170, 101, 65, 207, 221, 143, 208, 112, 51, 182, 143, 240, 205, 44, 243}, +{30, 15, 101, 143, 12, 171, 62, 163, 37, 19, 239, 63, 165, 160, 126, 147, 202, 43, 69, 154, 63, 152, 194, 214, 73, 103, 62, 95, 2, 174, 21, 125, 90, 202, 37, 84, 75, 175, 177, 15, 51, 88, 4, 113, 21, 67, 116, 255, 151, 176, 48, 183, 29, 235, 95, 152, 246, 104, 9, 41, 139, 58, 9, 142, 45, 194, 223, 4, 205, 26, 208, 232, 139, 227, 105, 16, 58, 183, 123, 101, 26, 195, 167, 106, 180, 86, 164, 6, 213, 25, 15, 24, 248, 189, 215, 254, 193, 91, 159, 59, 108, 104, 132, 84, 152, 148, 90, 91, 148, 205, 141, 132, 7, 105, 230, 221, 63, 47, 19, 223, 139, 116, 181, 246, 220, 12, 65, 115}, +{111, 130, 69, 212, 6, 39, 232, 152, 30, 54, 52, 33, 106, 20, 146, 235, 212, 70, 156, 36, 192, 23, 244, 220, 179, 79, 61, 224, 86, 127, 111, 2, 1, 248, 245, 138, 208, 136, 122, 211, 36, 176, 50, 31, 174, 252, 76, 93, 155, 97, 76, 145, 97, 229, 144, 11, 131, 98, 0, 76, 104, 35, 35, 189, 83, 22, 53, 234, 230, 108, 191, 177, 247, 252, 230, 246, 94, 210, 92, 159, 180, 156, 45, 50, 120, 121, 154, 187, 43, 50, 96, 66, 107, 98, 46, 157, 214, 8, 74, 205, 162, 8, 0, 70, 19, 224, 59, 1, 125, 48, 78, 108, 111, 14, 88, 190, 28, 108, 126, 18, 179, 130, 3, 247, 107, 57, 243, 154}, +{21, 125, 154, 2, 252, 248, 189, 144, 21, 113, 217, 153, 155, 32, 226, 71, 121, 69, 40, 39, 34, 84, 44, 141, 207, 241, 84, 62, 203, 234, 208, 85, 106, 104, 131, 26, 174, 106, 174, 98, 155, 66, 175, 67, 200, 125, 216, 175, 10, 134, 138, 150, 188, 187, 171, 145, 13, 200, 209, 246, 19, 81, 90, 158, 225, 23, 4, 39, 43, 232, 132, 128, 187, 193, 56, 14, 43, 80, 184, 141, 50, 223, 159, 78, 49, 131, 10, 23, 35, 208, 174, 250, 168, 230, 192, 159, 75, 120, 173, 45, 21, 242, 100, 224, 64, 249, 101, 101, 158, 228, 8, 69, 134, 191, 94, 175, 20, 49, 180, 5, 22, 255, 49, 254, 84, 245, 5, 198}, +{2, 246, 45, 233, 215, 227, 237, 0, 229, 209, 252, 106, 233, 66, 218, 95, 209, 61, 196, 249, 15, 110, 33, 41, 5, 78, 250, 193, 70, 94, 229, 110, 213, 6, 42, 247, 93, 201, 165, 97, 59, 178, 203, 211, 163, 58, 182, 145, 23, 159, 18, 248, 9, 247, 100, 141, 120, 233, 189, 143, 220, 233, 45, 161, 200, 52, 142, 127, 21, 233, 246, 147, 204, 3, 154, 90, 95, 190, 27, 26, 103, 193, 233, 230, 188, 156, 31, 232, 43, 173, 29, 16, 87, 149, 202, 18, 180, 87, 56, 105, 79, 28, 123, 17, 110, 89, 222, 80, 178, 153, 58, 15, 127, 26, 142, 82, 186, 222, 146, 17, 34, 117, 57, 36, 33, 171, 22, 128}, +{187, 216, 5, 18, 226, 167, 192, 152, 163, 127, 91, 94, 141, 161, 89, 139, 188, 159, 121, 138, 234, 190, 125, 24, 238, 156, 238, 71, 52, 60, 195, 134, 125, 5, 216, 134, 64, 216, 251, 185, 65, 83, 208, 221, 163, 170, 183, 200, 45, 244, 71, 9, 169, 179, 113, 14, 188, 175, 240, 161, 23, 235, 165, 190, 208, 125, 96, 226, 13, 36, 115, 192, 0, 21, 99, 162, 11, 164, 120, 138, 86, 209, 243, 3, 38, 214, 171, 43, 50, 149, 34, 201, 160, 135, 164, 255, 161, 102, 166, 157, 250, 180, 173, 149, 125, 80, 110, 173, 15, 22, 129, 65, 85, 194, 184, 83, 241, 151, 11, 34, 205, 192, 226, 139, 185, 208, 167, 218}, +{111, 77, 154, 7, 35, 233, 213, 148, 129, 124, 206, 178, 86, 30, 218, 78, 87, 134, 225, 210, 46, 91, 76, 205, 35, 106, 197, 83, 176, 199, 229, 95, 247, 249, 12, 209, 11, 32, 152, 131, 200, 93, 229, 30, 13, 137, 125, 167, 100, 48, 55, 74, 204, 149, 69, 90, 44, 254, 1, 102, 150, 80, 62, 61, 58, 242, 107, 109, 79, 163, 74, 116, 67, 120, 130, 106, 25, 198, 238, 55, 36, 110, 29, 223, 124, 179, 162, 64, 69, 98, 147, 47, 148, 57, 88, 86, 23, 53, 212, 155, 23, 197, 215, 152, 139, 50, 104, 133, 142, 78, 255, 88, 205, 249, 112, 241, 162, 26, 28, 158, 68, 106, 252, 178, 51, 205, 159, 107}, +{54, 1, 2, 217, 200, 17, 144, 120, 246, 164, 234, 218, 153, 62, 33, 218, 152, 214, 121, 111, 21, 37, 45, 209, 65, 168, 252, 118, 167, 74, 229, 104, 90, 175, 148, 253, 209, 168, 209, 222, 224, 77, 71, 168, 49, 117, 155, 138, 100, 46, 74, 153, 116, 157, 154, 164, 99, 168, 53, 221, 115, 67, 16, 184, 100, 149, 11, 107, 106, 191, 157, 87, 20, 16, 169, 103, 117, 26, 8, 154, 189, 148, 222, 94, 152, 185, 149, 237, 53, 250, 4, 149, 220, 76, 58, 74, 66, 191, 245, 124, 140, 84, 247, 21, 43, 52, 47, 49, 57, 217, 246, 191, 21, 176, 54, 93, 105, 224, 97, 40, 170, 41, 231, 216, 252, 248, 196, 157}, +{89, 193, 95, 185, 3, 202, 250, 9, 103, 251, 255, 177, 94, 50, 176, 53, 240, 191, 212, 138, 217, 80, 148, 50, 190, 216, 179, 122, 240, 140, 62, 144, 86, 120, 92, 180, 117, 158, 230, 30, 232, 210, 161, 67, 90, 221, 253, 70, 159, 196, 213, 210, 206, 139, 64, 93, 53, 151, 153, 144, 137, 71, 63, 11, 226, 165, 146, 9, 70, 10, 72, 185, 136, 119, 103, 204, 36, 33, 13, 19, 241, 234, 132, 58, 178, 234, 242, 136, 92, 49, 35, 75, 83, 47, 171, 208, 133, 95, 244, 5, 227, 223, 253, 219, 52, 20, 200, 229, 55, 240, 74, 179, 226, 140, 147, 60, 112, 207, 173, 233, 117, 60, 183, 232, 169, 63, 239, 48}, +{86, 43, 78, 85, 152, 239, 30, 84, 130, 243, 251, 234, 243, 226, 243, 241, 155, 59, 89, 220, 14, 142, 98, 134, 220, 60, 90, 9, 190, 98, 185, 3, 10, 27, 5, 61, 221, 93, 23, 21, 208, 27, 21, 108, 146, 179, 195, 38, 211, 28, 95, 102, 226, 66, 160, 207, 191, 87, 50, 158, 62, 227, 149, 51, 162, 228, 118, 232, 251, 177, 57, 184, 57, 61, 235, 242, 103, 48, 251, 90, 31, 83, 126, 89, 179, 247, 104, 174, 111, 85, 111, 199, 16, 36, 187, 127, 113, 110, 10, 167, 189, 253, 192, 223, 23, 49, 153, 50, 182, 242, 99, 160, 240, 72, 87, 238, 80, 46, 230, 57, 118, 167, 153, 73, 74, 216, 182, 197}, +{26, 99, 174, 109, 78, 178, 226, 165, 240, 44, 107, 40, 161, 63, 172, 249, 250, 9, 129, 161, 152, 28, 11, 95, 243, 88, 174, 126, 68, 223, 0, 88, 237, 237, 132, 191, 23, 190, 38, 180, 61, 126, 62, 158, 21, 61, 124, 108, 222, 81, 160, 7, 204, 115, 200, 128, 64, 41, 240, 210, 185, 246, 171, 248, 251, 151, 38, 213, 13, 253, 244, 57, 225, 1, 205, 230, 157, 91, 195, 103, 11, 152, 194, 128, 124, 66, 187, 0, 125, 195, 12, 212, 70, 32, 32, 241, 30, 193, 177, 22, 178, 42, 161, 91, 41, 230, 234, 103, 203, 72, 180, 66, 164, 119, 185, 238, 139, 246, 159, 193, 214, 90, 156, 169, 71, 141, 246, 235}, +{43, 143, 72, 24, 146, 7, 95, 70, 11, 157, 30, 57, 181, 126, 151, 182, 221, 32, 239, 171, 225, 115, 59, 152, 197, 213, 197, 217, 195, 68, 108, 160, 181, 87, 64, 70, 97, 243, 253, 68, 159, 35, 61, 86, 46, 44, 101, 110, 2, 186, 66, 239, 84, 118, 158, 220, 183, 237, 208, 162, 141, 126, 73, 77, 117, 191, 242, 44, 75, 141, 215, 218, 160, 220, 84, 119, 10, 218, 118, 134, 185, 216, 144, 170, 23, 220, 185, 44, 75, 229, 148, 227, 170, 204, 0, 192, 78, 234, 35, 92, 180, 231, 25, 36, 169, 4, 28, 13, 166, 133, 128, 85, 124, 79, 234, 249, 244, 228, 198, 167, 24, 151, 84, 128, 28, 210, 237, 217}, +{64, 239, 181, 67, 36, 129, 179, 235, 208, 45, 245, 223, 223, 4, 167, 110, 142, 39, 95, 31, 249, 178, 221, 197, 130, 230, 171, 178, 14, 183, 171, 63, 251, 144, 186, 57, 153, 245, 158, 201, 157, 74, 206, 139, 111, 122, 119, 55, 167, 92, 137, 153, 199, 121, 101, 145, 89, 163, 104, 11, 195, 245, 205, 121, 76, 60, 164, 22, 52, 183, 34, 206, 168, 83, 176, 72, 138, 241, 218, 222, 202, 151, 190, 130, 234, 85, 140, 240, 112, 105, 170, 143, 249, 197, 206, 151, 68, 152, 205, 94, 163, 146, 125, 170, 8, 72, 52, 48, 166, 106, 111, 134, 76, 107, 123, 235, 152, 196, 3, 253, 111, 204, 88, 141, 204, 67, 129, 81}, +{75, 203, 161, 78, 44, 56, 85, 207, 54, 201, 219, 61, 26, 137, 219, 122, 112, 156, 111, 1, 86, 146, 169, 160, 216, 28, 171, 110, 247, 252, 93, 192, 121, 185, 49, 127, 67, 135, 182, 99, 49, 160, 85, 92, 230, 226, 26, 244, 215, 171, 229, 213, 19, 52, 193, 212, 160, 208, 76, 125, 165, 92, 100, 93, 57, 40, 38, 134, 227, 27, 156, 48, 8, 164, 90, 25, 76, 18, 3, 141, 101, 240, 225, 31, 178, 181, 44, 30, 120, 247, 151, 21, 188, 0, 193, 195, 207, 83, 132, 247, 90, 138, 211, 146, 15, 45, 250, 150, 210, 167, 55, 201, 248, 229, 148, 169, 205, 19, 21, 67, 32, 90, 125, 139, 23, 8, 212, 163}, +{75, 203, 161, 78, 44, 56, 85, 207, 54, 201, 219, 61, 26, 137, 219, 122, 112, 156, 111, 1, 86, 146, 169, 160, 216, 28, 171, 110, 247, 252, 93, 192, 121, 185, 49, 127, 67, 135, 182, 99, 49, 160, 85, 92, 230, 226, 26, 244, 215, 171, 229, 213, 19, 52, 193, 212, 160, 208, 76, 125, 165, 92, 100, 93, 57, 40, 38, 134, 227, 27, 156, 48, 8, 164, 90, 25, 76, 18, 3, 141, 101, 240, 225, 31, 178, 181, 44, 30, 120, 247, 151, 21, 188, 0, 193, 195, 207, 83, 132, 247, 90, 138, 211, 146, 15, 45, 250, 150, 210, 167, 55, 201, 248, 229, 148, 169, 205, 19, 21, 67, 32, 90, 125, 139, 23, 8, 212, 163}, +{75, 203, 161, 78, 44, 56, 85, 207, 54, 201, 219, 61, 26, 137, 219, 122, 112, 156, 111, 1, 86, 146, 169, 160, 216, 28, 171, 110, 247, 252, 93, 192, 121, 185, 49, 127, 67, 135, 182, 99, 49, 160, 85, 92, 230, 226, 26, 244, 215, 171, 229, 213, 19, 52, 193, 212, 160, 208, 76, 125, 165, 92, 100, 93, 57, 40, 38, 134, 227, 27, 156, 48, 8, 164, 90, 25, 76, 18, 3, 141, 101, 240, 225, 31, 178, 181, 44, 30, 120, 247, 151, 21, 188, 0, 193, 195, 207, 83, 132, 247, 90, 138, 211, 146, 15, 45, 250, 150, 210, 167, 55, 201, 248, 229, 148, 169, 205, 19, 21, 67, 32, 90, 125, 139, 23, 8, 212, 163}, +{113, 198, 198, 197, 160, 165, 239, 255, 144, 137, 117, 186, 178, 54, 141, 74, 90, 126, 150, 114, 73, 158, 120, 196, 255, 16, 23, 44, 24, 205, 156, 29, 74, 185, 19, 178, 28, 171, 227, 247, 250, 9, 48, 86, 87, 68, 198, 98, 217, 174, 91, 132, 7, 121, 152, 161, 233, 165, 28, 74, 51, 85, 109, 242, 107, 25, 139, 178, 7, 28, 113, 211, 94, 117, 22, 215, 214, 190, 35, 193, 55, 255, 36, 195, 107, 106, 158, 187, 234, 178, 11, 59, 252, 158, 79, 165, 131, 64, 188, 156, 169, 24, 157, 180, 146, 113, 162, 117, 95, 86, 155, 81, 168, 3, 248, 100, 91, 189, 60, 187, 36, 189, 6, 145, 8, 106, 198, 87}, +{51, 23, 100, 31, 200, 96, 188, 79, 98, 86, 46, 240, 155, 80, 216, 103, 229, 10, 104, 134, 4, 167, 118, 10, 8, 51, 229, 137, 103, 25, 14, 16, 200, 39, 6, 252, 200, 139, 205, 236, 244, 113, 97, 99, 194, 128, 196, 126, 80, 49, 87, 170, 92, 76, 8, 214, 149, 234, 246, 216, 98, 31, 58, 53, 221, 4, 168, 155, 249, 131, 137, 32, 124, 203, 187, 116, 1, 36, 48, 202, 231, 192, 29, 153, 227, 111, 241, 139, 77, 83, 239, 212, 53, 156, 81, 208, 223, 83, 15, 46, 234, 129, 232, 14, 55, 20, 105, 209, 76, 20, 67, 39, 163, 74, 78, 50, 121, 203, 141, 44, 231, 248, 48, 238, 76, 121, 74, 189}, +{75, 226, 1, 226, 223, 116, 167, 14, 51, 84, 56, 227, 82, 21, 248, 64, 21, 24, 165, 122, 87, 167, 38, 215, 243, 6, 224, 167, 46, 202, 48, 97, 103, 47, 203, 49, 40, 18, 194, 52, 251, 217, 137, 247, 135, 213, 170, 34, 218, 18, 15, 61, 113, 70, 4, 23, 170, 207, 169, 223, 249, 73, 3, 194, 65, 81, 210, 153, 238, 66, 126, 185, 54, 127, 215, 252, 40, 148, 91, 29, 26, 225, 105, 79, 156, 251, 253, 253, 130, 68, 127, 226, 46, 169, 189, 13, 14, 65, 183, 40, 217, 239, 249, 160, 118, 127, 254, 104, 188, 115, 215, 128, 245, 255, 75, 126, 180, 150, 113, 94, 180, 178, 33, 46, 237, 117, 77, 61}, +{88, 91, 114, 49, 112, 224, 215, 12, 150, 62, 119, 28, 184, 103, 160, 20, 150, 87, 172, 221, 207, 171, 209, 208, 199, 253, 231, 92, 64, 96, 187, 189, 183, 52, 14, 188, 89, 49, 34, 116, 204, 48, 231, 31, 205, 255, 12, 64, 227, 30, 41, 95, 35, 223, 180, 170, 3, 54, 162, 2, 93, 230, 236, 32, 58, 100, 196, 43, 154, 67, 76, 60, 98, 33, 12, 66, 50, 189, 96, 87, 21, 238, 177, 192, 53, 69, 58, 123, 116, 91, 249, 253, 105, 129, 9, 240, 39, 196, 128, 201, 9, 21, 134, 242, 166, 74, 95, 139, 209, 113, 1, 207, 177, 230, 7, 31, 253, 52, 112, 41, 37, 224, 132, 55, 182, 62, 208, 51}, +{79, 154, 139, 113, 210, 27, 6, 67, 205, 47, 235, 120, 65, 173, 73, 173, 197, 34, 43, 173, 154, 42, 196, 34, 135, 97, 37, 25, 129, 110, 1, 63, 15, 146, 227, 226, 249, 226, 9, 103, 7, 205, 204, 229, 227, 24, 38, 74, 210, 101, 55, 131, 140, 175, 243, 177, 39, 197, 47, 89, 72, 234, 231, 78, 99, 255, 80, 34, 229, 83, 215, 192, 2, 37, 44, 4, 105, 14, 118, 251, 215, 91, 28, 253, 64, 199, 84, 201, 149, 235, 43, 121, 100, 153, 72, 75, 143, 203, 176, 63, 245, 6, 209, 102, 18, 177, 179, 124, 204, 134, 26, 204, 143, 100, 211, 78, 54, 216, 97, 92, 124, 79, 107, 175, 91, 192, 225, 166}, +{69, 172, 151, 157, 194, 179, 98, 136, 56, 143, 50, 183, 149, 117, 146, 223, 103, 225, 83, 125, 77, 22, 241, 187, 207, 226, 34, 50, 145, 208, 63, 132, 106, 51, 200, 74, 180, 31, 24, 142, 12, 224, 236, 11, 9, 44, 174, 255, 2, 128, 218, 64, 25, 56, 194, 228, 115, 160, 184, 83, 117, 21, 209, 245, 217, 129, 244, 116, 130, 183, 14, 24, 111, 86, 227, 84, 146, 46, 72, 196, 24, 61, 177, 89, 165, 139, 215, 168, 72, 91, 209, 1, 72, 5, 70, 174, 231, 172, 255, 9, 247, 241, 242, 91, 85, 179, 127, 220, 54, 198, 230, 76, 118, 12, 40, 52, 168, 113, 232, 169, 147, 143, 208, 154, 31, 80, 120, 143}, +{114, 32, 147, 217, 239, 215, 145, 157, 50, 124, 224, 85, 158, 24, 74, 55, 8, 53, 109, 204, 0, 80, 249, 44, 160, 176, 227, 85, 168, 57, 86, 97, 229, 114, 107, 179, 123, 121, 30, 96, 78, 20, 133, 66, 9, 219, 169, 23, 222, 48, 218, 149, 36, 195, 42, 190, 148, 4, 181, 161, 229, 162, 2, 137, 209, 234, 139, 182, 49, 183, 2, 150, 87, 66, 147, 11, 177, 185, 19, 60, 252, 146, 30, 142, 45, 106, 235, 252, 153, 156, 124, 91, 241, 49, 225, 254, 194, 102, 127, 103, 92, 130, 217, 136, 170, 166, 166, 28, 176, 34, 39, 218, 38, 108, 62, 77, 247, 114, 74, 48, 236, 73, 41, 85, 104, 170, 128, 127}, +{127, 7, 76, 136, 64, 254, 66, 153, 160, 20, 232, 187, 156, 145, 226, 213, 111, 139, 3, 234, 39, 194, 35, 29, 33, 160, 13, 170, 108, 64, 193, 48, 40, 142, 182, 62, 230, 196, 92, 32, 190, 15, 189, 55, 102, 26, 183, 230, 161, 118, 130, 11, 155, 183, 208, 237, 225, 66, 47, 182, 37, 208, 112, 118, 18, 114, 44, 107, 180, 230, 39, 254, 26, 141, 48, 6, 2, 95, 8, 45, 87, 26, 5, 20, 72, 116, 177, 214, 28, 143, 225, 254, 91, 198, 95, 127, 196, 103, 152, 179, 215, 149, 12, 106, 128, 237, 8, 226, 116, 185, 137, 185, 147, 190, 5, 74, 65, 60, 108, 122, 41, 197, 222, 182, 16, 136, 3, 161}, +{186, 193, 93, 251, 204, 158, 98, 152, 180, 41, 241, 16, 239, 0, 204, 69, 55, 91, 9, 148, 44, 144, 244, 151, 164, 34, 14, 205, 92, 175, 219, 180, 231, 35, 123, 57, 144, 4, 2, 91, 158, 244, 229, 16, 162, 89, 33, 60, 77, 91, 147, 29, 65, 51, 81, 83, 202, 142, 148, 152, 166, 238, 202, 170, 237, 44, 162, 99, 9, 43, 161, 4, 95, 86, 167, 90, 95, 86, 154, 148, 68, 162, 78, 130, 89, 231, 25, 75, 115, 224, 186, 124, 160, 219, 199, 242, 20, 105, 183, 216, 166, 247, 111, 61, 153, 242, 27, 226, 96, 234, 200, 159, 57, 91, 152, 111, 103, 249, 27, 226, 203, 117, 213, 159, 34, 244, 212, 18}, +{126, 44, 189, 71, 5, 157, 244, 153, 58, 11, 223, 197, 201, 190, 103, 34, 249, 96, 87, 31, 35, 8, 252, 49, 209, 92, 253, 68, 221, 254, 143, 100, 126, 160, 35, 216, 49, 57, 40, 55, 229, 187, 151, 243, 31, 227, 253, 78, 211, 161, 31, 183, 19, 75, 200, 44, 90, 35, 190, 206, 230, 3, 168, 41, 235, 129, 5, 37, 129, 175, 29, 88, 63, 43, 63, 16, 61, 55, 160, 147, 124, 233, 109, 66, 203, 228, 222, 95, 165, 160, 70, 193, 95, 201, 80, 239, 147, 119, 194, 11, 94, 125, 206, 200, 136, 191, 235, 75, 49, 88, 96, 220, 102, 49, 20, 71, 174, 243, 61, 250, 37, 148, 173, 123, 155, 94, 210, 211}, +{154, 118, 77, 7, 118, 81, 153, 216, 227, 245, 210, 62, 255, 152, 151, 133, 184, 39, 51, 195, 232, 125, 127, 170, 24, 212, 9, 175, 206, 130, 236, 139, 181, 200, 10, 20, 116, 72, 41, 214, 118, 139, 150, 61, 156, 199, 243, 1, 125, 244, 224, 240, 255, 235, 138, 92, 209, 188, 125, 35, 250, 238, 52, 238, 178, 5, 89, 132, 231, 124, 115, 143, 177, 200, 83, 255, 251, 147, 175, 147, 58, 149, 136, 183, 156, 55, 177, 18, 236, 248, 220, 150, 130, 251, 91, 136, 79, 202, 32, 142, 137, 39, 155, 17, 217, 195, 171, 95, 134, 68, 170, 23, 79, 145, 16, 182, 239, 107, 246, 60, 163, 86, 164, 62, 195, 182, 99, 246}, +{49, 138, 241, 246, 248, 175, 80, 94, 233, 181, 132, 46, 59, 24, 233, 112, 23, 202, 134, 205, 30, 146, 215, 77, 123, 136, 78, 100, 217, 224, 237, 32, 101, 90, 29, 127, 30, 128, 154, 149, 124, 191, 247, 177, 216, 60, 228, 143, 220, 22, 19, 21, 112, 16, 123, 198, 11, 2, 153, 5, 206, 195, 181, 54, 128, 210, 42, 187, 71, 214, 237, 121, 18, 100, 236, 232, 91, 113, 108, 81, 255, 253, 23, 16, 139, 171, 43, 227, 77, 237, 51, 40, 141, 225, 164, 109, 210, 127, 66, 146, 126, 225, 174, 55, 119, 119, 107, 25, 233, 119, 198, 150, 2, 192, 14, 207, 24, 242, 73, 17, 177, 33, 87, 30, 24, 155, 230, 244}, +{34, 204, 38, 98, 180, 228, 47, 236, 107, 226, 82, 201, 192, 252, 239, 248, 136, 112, 218, 86, 246, 11, 125, 104, 62, 238, 199, 24, 214, 9, 163, 98, 199, 251, 35, 164, 43, 57, 240, 115, 237, 231, 167, 167, 237, 237, 222, 4, 76, 211, 192, 111, 236, 241, 240, 78, 197, 97, 65, 3, 0, 68, 78, 196, 234, 234, 92, 68, 163, 142, 26, 154, 143, 24, 179, 30, 112, 13, 70, 46, 53, 139, 225, 254, 184, 58, 242, 95, 143, 255, 143, 29, 128, 16, 145, 215, 188, 83, 192, 47, 127, 174, 242, 203, 195, 99, 200, 226, 189, 237, 220, 41, 110, 189, 178, 28, 0, 90, 111, 226, 109, 116, 227, 32, 208, 122, 194, 91}, +{73, 160, 177, 249, 254, 118, 21, 97, 64, 81, 120, 196, 64, 87, 37, 5, 252, 10, 225, 2, 101, 210, 61, 184, 166, 61, 18, 196, 207, 86, 25, 102, 8, 39, 240, 140, 53, 44, 237, 127, 244, 67, 94, 218, 102, 165, 123, 61, 160, 174, 105, 7, 53, 247, 92, 169, 46, 201, 114, 138, 243, 203, 189, 166, 80, 45, 90, 172, 202, 131, 106, 123, 229, 161, 20, 228, 228, 249, 89, 7, 190, 179, 188, 163, 88, 79, 181, 191, 63, 114, 51, 190, 15, 198, 9, 65, 139, 225, 244, 167, 13, 243, 103, 173, 126, 85, 52, 18, 133, 217, 108, 191, 12, 61, 148, 113, 93, 25, 107, 221, 43, 124, 33, 71, 131, 182, 202, 48}, +{12, 210, 220, 169, 124, 219, 59, 222, 115, 199, 134, 81, 112, 200, 14, 230, 161, 11, 80, 68, 40, 99, 42, 179, 10, 132, 29, 9, 153, 53, 151, 10, 123, 101, 45, 94, 29, 109, 70, 128, 121, 116, 131, 139, 177, 7, 229, 154, 164, 242, 142, 187, 54, 87, 108, 189, 152, 147, 194, 146, 119, 153, 192, 210, 0, 219, 11, 50, 125, 211, 125, 72, 214, 176, 154, 235, 135, 87, 71, 1, 188, 127, 123, 148, 0, 94, 41, 118, 13, 205, 105, 152, 250, 204, 250, 41, 65, 223, 48, 159, 23, 206, 83, 220, 177, 200, 210, 231, 66, 188, 200, 181, 159, 63, 124, 195, 237, 71, 240, 170, 177, 31, 62, 68, 129, 23, 121, 84}, +{107, 172, 140, 50, 130, 172, 213, 26, 197, 156, 130, 163, 161, 205, 124, 32, 22, 28, 21, 225, 98, 235, 228, 159, 64, 113, 49, 2, 44, 88, 130, 80, 201, 158, 9, 12, 235, 246, 251, 13, 141, 110, 31, 127, 0, 0, 31, 213, 213, 195, 34, 99, 93, 253, 230, 3, 9, 238, 63, 106, 230, 184, 189, 44, 163, 229, 88, 95, 187, 226, 225, 142, 183, 17, 179, 193, 51, 74, 15, 174, 242, 251, 39, 151, 62, 249, 6, 137, 253, 73, 208, 13, 196, 35, 218, 28, 250, 35, 149, 25, 168, 35, 180, 237, 219, 47, 88, 36, 104, 28, 88, 60, 26, 133, 197, 39, 117, 67, 30, 100, 206, 60, 210, 190, 16, 4, 27, 215}, +{183, 127, 146, 232, 66, 242, 39, 229, 131, 164, 119, 186, 109, 88, 69, 215, 69, 153, 228, 254, 0, 187, 101, 42, 110, 129, 41, 53, 199, 116, 215, 140, 225, 87, 110, 32, 128, 217, 156, 149, 220, 185, 14, 73, 163, 92, 82, 130, 55, 244, 233, 66, 155, 125, 112, 107, 109, 216, 1, 181, 84, 71, 232, 56, 6, 88, 108, 135, 34, 138, 111, 242, 114, 108, 42, 214, 163, 123, 248, 200, 23, 174, 222, 62, 155, 151, 225, 81, 102, 187, 2, 130, 74, 5, 79, 157, 237, 134, 215, 86, 215, 143, 252, 33, 175, 35, 194, 42, 199, 170, 147, 199, 4, 60, 24, 21, 64, 178, 87, 66, 214, 170, 0, 154, 5, 115, 136, 7}, +{97, 231, 222, 131, 195, 245, 195, 222, 220, 95, 186, 226, 220, 143, 45, 121, 144, 200, 140, 242, 149, 87, 187, 64, 187, 250, 44, 150, 43, 119, 10, 45, 0, 131, 110, 242, 210, 128, 89, 216, 192, 169, 125, 124, 104, 71, 249, 165, 22, 141, 145, 79, 122, 175, 253, 230, 96, 70, 68, 194, 234, 211, 38, 23, 22, 254, 151, 204, 160, 198, 33, 164, 113, 27, 217, 61, 205, 138, 95, 214, 161, 223, 140, 191, 205, 96, 191, 10, 200, 242, 183, 160, 132, 175, 173, 82, 36, 22, 225, 209, 130, 23, 9, 166, 155, 42, 21, 67, 165, 149, 126, 107, 183, 237, 86, 245, 247, 154, 126, 227, 145, 220, 227, 170, 161, 206, 244, 214}, +{74, 17, 125, 222, 218, 18, 72, 96, 103, 210, 173, 146, 210, 71, 48, 247, 148, 90, 228, 55, 221, 79, 76, 242, 190, 112, 173, 25, 229, 93, 198, 122, 97, 93, 63, 162, 46, 125, 144, 54, 213, 65, 27, 222, 237, 168, 125, 122, 35, 37, 95, 243, 168, 23, 18, 19, 188, 129, 77, 102, 74, 132, 81, 112, 176, 23, 175, 58, 139, 192, 202, 182, 55, 24, 181, 143, 82, 67, 187, 224, 202, 171, 159, 209, 241, 126, 226, 68, 153, 52, 42, 171, 30, 73, 199, 56, 100, 76, 208, 127, 120, 135, 50, 166, 233, 105, 253, 223, 15, 43, 76, 235, 21, 153, 2, 206, 87, 65, 191, 74, 86, 189, 21, 190, 103, 43, 103, 221}, +{175, 225, 86, 75, 125, 148, 118, 139, 104, 42, 135, 62, 180, 142, 178, 195, 203, 198, 92, 160, 232, 98, 158, 43, 110, 52, 146, 200, 140, 191, 114, 107, 217, 213, 136, 184, 8, 171, 72, 72, 35, 195, 70, 213, 29, 185, 40, 174, 39, 195, 15, 238, 24, 70, 21, 59, 30, 16, 77, 52, 49, 98, 230, 41, 220, 190, 82, 164, 142, 147, 139, 60, 112, 98, 192, 151, 28, 1, 192, 206, 95, 155, 143, 15, 163, 120, 92, 17, 201, 118, 162, 2, 75, 166, 72, 139, 205, 70, 249, 205, 47, 99, 58, 158, 130, 204, 109, 137, 210, 225, 244, 218, 110, 131, 225, 47, 234, 47, 177, 134, 215, 45, 185, 251, 148, 213, 176, 248}, +{161, 95, 0, 203, 56, 204, 37, 23, 84, 153, 58, 8, 155, 111, 21, 92, 12, 244, 10, 55, 32, 106, 110, 139, 33, 24, 138, 167, 222, 95, 35, 188, 243, 57, 72, 44, 176, 102, 62, 29, 189, 79, 85, 195, 25, 89, 58, 9, 133, 76, 95, 224, 181, 114, 167, 44, 27, 206, 33, 189, 87, 80, 38, 6, 182, 111, 197, 225, 243, 59, 8, 222, 20, 85, 180, 131, 229, 50, 48, 161, 237, 130, 53, 141, 20, 197, 82, 238, 17, 228, 158, 132, 123, 15, 163, 66, 122, 110, 102, 226, 216, 138, 189, 63, 134, 6, 240, 211, 140, 233, 119, 209, 228, 130, 128, 248, 206, 154, 169, 229, 180, 150, 83, 81, 25, 242, 230, 60}, +{34, 163, 205, 244, 12, 212, 40, 250, 128, 100, 31, 63, 53, 67, 122, 153, 163, 233, 245, 25, 96, 220, 90, 31, 56, 248, 59, 255, 149, 81, 240, 133, 67, 253, 211, 39, 212, 239, 220, 14, 92, 59, 54, 56, 69, 233, 88, 52, 134, 20, 233, 25, 254, 122, 33, 36, 129, 87, 83, 224, 126, 244, 98, 143, 157, 191, 44, 41, 244, 163, 74, 146, 147, 36, 220, 13, 227, 146, 143, 136, 104, 175, 224, 39, 13, 237, 236, 246, 75, 45, 47, 207, 133, 210, 98, 85, 5, 245, 225, 58, 35, 33, 216, 153, 111, 205, 12, 16, 116, 25, 109, 110, 250, 221, 238, 61, 166, 163, 96, 215, 26, 218, 84, 188, 20, 20, 210, 19}, +{16, 111, 208, 41, 251, 106, 243, 92, 91, 225, 126, 116, 111, 70, 190, 142, 217, 135, 174, 127, 106, 164, 94, 210, 145, 176, 27, 251, 171, 87, 242, 59, 219, 76, 61, 107, 232, 222, 103, 41, 150, 237, 16, 220, 139, 52, 150, 250, 5, 186, 94, 109, 51, 160, 39, 169, 104, 200, 140, 129, 125, 154, 241, 171, 161, 208, 197, 41, 63, 73, 238, 197, 99, 144, 226, 38, 176, 37, 118, 90, 113, 120, 172, 199, 207, 70, 79, 118, 157, 121, 86, 8, 111, 244, 203, 99, 72, 140, 228, 2, 249, 86, 217, 120, 169, 87, 30, 237, 11, 217, 108, 221, 0, 30, 221, 37, 204, 46, 249, 236, 60, 55, 221, 181, 132, 20, 25, 163}, +{172, 31, 26, 129, 41, 19, 173, 173, 215, 164, 48, 114, 39, 35, 249, 169, 129, 86, 193, 112, 30, 91, 157, 147, 119, 169, 72, 78, 0, 104, 216, 98, 171, 120, 211, 183, 97, 208, 209, 19, 122, 23, 90, 81, 118, 56, 107, 28, 48, 120, 187, 241, 189, 62, 106, 135, 166, 222, 64, 187, 78, 182, 21, 167, 180, 28, 62, 20, 238, 217, 235, 207, 204, 243, 87, 72, 81, 28, 118, 247, 47, 255, 197, 28, 132, 54, 27, 125, 112, 119, 164, 106, 54, 52, 81, 101, 110, 25, 178, 216, 66, 228, 39, 200, 60, 95, 140, 94, 1, 131, 225, 205, 141, 78, 111, 110, 16, 233, 155, 219, 19, 90, 17, 93, 35, 146, 75, 70}, +{47, 125, 57, 243, 154, 238, 209, 10, 177, 196, 77, 56, 228, 42, 10, 111, 143, 21, 252, 245, 167, 222, 64, 228, 133, 233, 181, 123, 229, 52, 240, 213, 188, 207, 59, 55, 1, 76, 196, 222, 244, 78, 7, 167, 29, 87, 56, 127, 232, 57, 229, 227, 229, 200, 163, 232, 83, 32, 46, 187, 226, 235, 12, 121, 223, 136, 158, 239, 34, 29, 186, 53, 169, 8, 207, 50, 131, 99, 5, 88, 130, 181, 62, 36, 186, 57, 226, 131, 18, 252, 246, 9, 5, 130, 184, 190, 7, 241, 243, 223, 179, 191, 217, 106, 99, 201, 183, 27, 30, 155, 126, 169, 208, 33, 153, 141, 169, 39, 55, 199, 139, 28, 4, 50, 184, 123, 112, 36}, +{172, 12, 202, 72, 200, 210, 21, 156, 33, 229, 81, 69, 112, 198, 183, 43, 168, 159, 144, 230, 162, 147, 215, 49, 113, 252, 101, 222, 241, 107, 73, 189, 90, 124, 87, 25, 183, 30, 133, 235, 60, 127, 100, 233, 174, 147, 53, 213, 136, 109, 94, 168, 235, 40, 236, 169, 229, 209, 149, 36, 142, 136, 170, 201, 26, 110, 30, 174, 64, 220, 174, 16, 15, 232, 252, 215, 236, 43, 4, 121, 239, 35, 146, 103, 204, 123, 89, 31, 116, 16, 21, 251, 128, 143, 25, 104, 44, 20, 31, 27, 218, 47, 6, 238, 95, 127, 129, 95, 105, 84, 74, 254, 60, 241, 72, 254, 152, 27, 235, 207, 215, 206, 137, 2, 211, 31, 172, 180}, +{172, 185, 177, 181, 245, 162, 24, 162, 85, 75, 166, 84, 161, 254, 177, 56, 216, 117, 76, 162, 178, 20, 154, 29, 177, 244, 233, 154, 172, 185, 109, 75, 197, 251, 192, 184, 164, 146, 101, 193, 100, 155, 231, 246, 106, 71, 144, 37, 55, 39, 124, 89, 171, 160, 185, 108, 179, 118, 14, 175, 60, 158, 190, 72, 12, 33, 76, 5, 220, 42, 195, 88, 247, 254, 190, 67, 224, 37, 54, 4, 219, 30, 194, 82, 1, 127, 118, 195, 174, 94, 230, 186, 117, 197, 186, 20, 8, 111, 25, 22, 168, 172, 104, 73, 119, 198, 54, 209, 151, 25, 125, 149, 96, 234, 161, 190, 134, 183, 208, 136, 61, 34, 153, 220, 167, 6, 139, 80}, +{65, 164, 35, 206, 232, 236, 98, 214, 141, 84, 147, 202, 138, 159, 109, 41, 243, 139, 199, 132, 46, 177, 152, 142, 91, 215, 230, 97, 55, 249, 51, 135, 0, 139, 134, 175, 196, 102, 50, 214, 236, 16, 85, 75, 10, 139, 54, 163, 147, 167, 27, 180, 143, 74, 29, 9, 101, 191, 45, 207, 171, 176, 91, 240, 46, 196, 116, 64, 42, 172, 228, 65, 54, 203, 34, 121, 123, 250, 237, 40, 3, 150, 186, 235, 241, 173, 214, 247, 8, 174, 105, 8, 31, 11, 199, 100, 195, 144, 235, 74, 155, 62, 176, 232, 106, 124, 56, 52, 84, 144, 69, 40, 18, 83, 132, 186, 39, 30, 4, 84, 166, 11, 37, 60, 214, 202, 42, 171}, +{127, 20, 61, 250, 201, 191, 255, 230, 219, 203, 101, 90, 143, 78, 105, 135, 203, 104, 238, 235, 35, 129, 8, 64, 56, 3, 54, 81, 71, 31, 83, 169, 235, 169, 180, 88, 192, 197, 76, 192, 34, 197, 224, 120, 88, 98, 195, 196, 134, 101, 81, 177, 136, 29, 1, 41, 227, 149, 61, 225, 32, 215, 182, 29, 113, 14, 56, 167, 235, 61, 92, 89, 234, 72, 192, 158, 129, 223, 29, 52, 144, 142, 199, 144, 176, 94, 207, 250, 71, 201, 196, 60, 60, 158, 207, 128, 119, 207, 115, 233, 156, 89, 192, 232, 16, 208, 120, 221, 77, 102, 76, 178, 11, 119, 32, 224, 162, 153, 76, 238, 246, 105, 240, 179, 50, 40, 132, 234}, +{11, 194, 200, 126, 237, 14, 158, 120, 209, 30, 176, 234, 119, 91, 77, 25, 78, 125, 138, 99, 138, 222, 143, 3, 215, 165, 4, 143, 128, 209, 68, 20, 81, 141, 156, 20, 111, 199, 154, 174, 160, 88, 50, 108, 4, 205, 255, 176, 179, 109, 165, 133, 147, 184, 168, 109, 233, 70, 57, 47, 63, 130, 102, 132, 180, 142, 108, 97, 9, 44, 29, 182, 163, 94, 82, 52, 178, 122, 218, 100, 43, 210, 34, 3, 136, 8, 217, 64, 112, 28, 32, 104, 0, 71, 48, 209, 116, 230, 247, 70, 124, 204, 69, 198, 17, 101, 78, 80, 83, 187, 6, 18, 15, 45, 137, 222, 199, 70, 229, 68, 167, 107, 93, 152, 6, 179, 106, 170}, +{160, 158, 75, 41, 74, 191, 226, 97, 94, 168, 110, 18, 64, 73, 180, 71, 125, 252, 63, 72, 181, 182, 53, 62, 155, 131, 74, 220, 235, 16, 54, 106, 162, 205, 163, 101, 115, 207, 82, 87, 54, 41, 52, 127, 153, 183, 225, 218, 109, 194, 181, 57, 1, 118, 106, 211, 219, 42, 243, 120, 168, 94, 45, 170, 249, 124, 172, 232, 25, 171, 98, 196, 68, 123, 167, 181, 182, 135, 45, 248, 0, 182, 134, 194, 244, 148, 65, 225, 65, 36, 160, 230, 202, 67, 176, 226, 129, 255, 233, 222, 254, 109, 176, 138, 222, 252, 98, 141, 98, 236, 28, 10, 233, 158, 175, 23, 98, 156, 123, 129, 68, 148, 212, 154, 113, 205, 171, 232}, +{73, 83, 55, 146, 37, 238, 151, 104, 19, 84, 88, 194, 110, 83, 129, 35, 123, 196, 96, 253, 221, 179, 191, 119, 189, 139, 49, 199, 64, 182, 139, 242, 65, 220, 168, 206, 187, 81, 188, 186, 12, 103, 60, 143, 79, 125, 74, 53, 229, 2, 146, 251, 235, 247, 145, 161, 111, 169, 139, 198, 125, 223, 104, 42, 3, 63, 214, 210, 30, 102, 110, 171, 211, 114, 55, 171, 6, 134, 14, 27, 166, 42, 184, 236, 196, 95, 236, 53, 245, 21, 98, 95, 199, 235, 176, 36, 25, 32, 50, 125, 43, 97, 153, 37, 242, 114, 80, 216, 185, 165, 23, 17, 92, 67, 41, 50, 147, 199, 174, 219, 56, 22, 236, 124, 78, 5, 135, 217}, +{141, 33, 13, 126, 189, 152, 114, 215, 81, 232, 138, 183, 161, 147, 130, 192, 153, 107, 3, 217, 119, 53, 213, 52, 66, 107, 154, 132, 176, 86, 127, 15, 4, 34, 29, 59, 233, 29, 152, 53, 174, 167, 238, 148, 223, 94, 97, 74, 246, 75, 125, 96, 93, 195, 41, 136, 105, 161, 30, 238, 207, 227, 236, 188, 231, 139, 246, 35, 143, 230, 136, 242, 8, 202, 139, 137, 142, 50, 35, 176, 117, 188, 24, 150, 100, 235, 234, 126, 124, 14, 234, 17, 65, 114, 168, 215, 50, 196, 168, 127, 158, 56, 248, 118, 255, 166, 48, 39, 110, 44, 117, 87, 145, 134, 165, 127, 152, 40, 101, 18, 60, 202, 23, 227, 88, 153, 150, 23}, +{64, 82, 187, 134, 104, 250, 119, 230, 132, 152, 236, 45, 171, 184, 188, 25, 46, 164, 167, 172, 159, 95, 119, 32, 235, 182, 140, 22, 219, 55, 20, 188, 116, 206, 147, 149, 101, 114, 56, 187, 33, 134, 121, 27, 109, 121, 165, 117, 237, 60, 139, 36, 15, 231, 145, 140, 150, 4, 57, 154, 208, 158, 149, 98, 218, 195, 102, 172, 44, 39, 218, 219, 38, 85, 208, 211, 118, 33, 240, 133, 1, 36, 193, 30, 107, 102, 19, 70, 186, 129, 42, 87, 40, 83, 31, 51, 63, 48, 11, 250, 213, 55, 174, 109, 24, 209, 255, 203, 246, 237, 49, 99, 60, 49, 173, 115, 163, 22, 169, 174, 68, 167, 177, 60, 61, 231, 105, 61}, +{173, 103, 121, 63, 52, 53, 0, 93, 159, 172, 15, 96, 12, 38, 107, 83, 179, 39, 71, 249, 143, 113, 152, 170, 208, 225, 105, 29, 67, 254, 200, 131, 25, 186, 87, 212, 4, 155, 199, 18, 232, 27, 107, 206, 169, 96, 201, 155, 35, 140, 219, 80, 213, 220, 86, 190, 181, 119, 136, 164, 194, 156, 100, 75, 42, 239, 235, 175, 179, 149, 235, 252, 161, 204, 177, 217, 46, 118, 32, 19, 171, 185, 81, 95, 160, 120, 147, 149, 106, 1, 80, 121, 179, 14, 119, 205, 148, 232, 159, 191, 161, 224, 117, 27, 195, 18, 8, 18, 36, 168, 205, 75, 92, 58, 225, 183, 86, 61, 64, 172, 3, 57, 160, 29, 40, 47, 33, 182}, +{143, 65, 173, 210, 234, 88, 5, 179, 223, 37, 32, 28, 84, 9, 148, 195, 40, 142, 25, 233, 178, 36, 80, 210, 208, 128, 56, 3, 197, 90, 115, 10, 219, 175, 142, 25, 146, 99, 125, 40, 254, 148, 28, 207, 7, 132, 12, 215, 173, 226, 64, 117, 37, 95, 211, 17, 113, 29, 107, 193, 93, 87, 55, 156, 69, 225, 100, 238, 225, 236, 118, 1, 211, 103, 146, 42, 121, 67, 201, 55, 231, 181, 43, 189, 76, 251, 185, 64, 144, 29, 154, 249, 50, 168, 100, 181, 2, 175, 196, 108, 248, 131, 156, 124, 208, 71, 206, 200, 44, 151, 89, 108, 70, 140, 109, 48, 174, 254, 169, 166, 90, 105, 237, 131, 51, 109, 114, 15}, +{93, 4, 88, 163, 191, 248, 113, 204, 70, 99, 19, 81, 179, 5, 251, 129, 45, 177, 163, 22, 141, 25, 200, 132, 175, 26, 50, 226, 253, 28, 151, 235, 54, 213, 57, 53, 101, 160, 55, 227, 166, 109, 52, 233, 156, 160, 248, 186, 222, 6, 185, 75, 46, 67, 81, 171, 254, 120, 33, 251, 155, 151, 63, 81, 223, 169, 74, 218, 42, 176, 250, 182, 127, 14, 246, 100, 173, 105, 61, 75, 229, 136, 88, 64, 177, 91, 221, 215, 31, 123, 53, 216, 122, 84, 248, 57, 124, 5, 254, 243, 156, 145, 179, 163, 45, 208, 41, 99, 37, 32, 15, 83, 27, 239, 207, 80, 66, 45, 144, 38, 205, 183, 72, 35, 117, 142, 170, 212}, +{117, 163, 201, 104, 24, 212, 31, 245, 22, 122, 165, 177, 55, 188, 22, 86, 250, 244, 86, 160, 253, 86, 242, 79, 231, 47, 127, 26, 169, 225, 92, 70, 124, 37, 184, 93, 49, 171, 216, 179, 92, 167, 84, 36, 73, 201, 47, 160, 223, 24, 190, 82, 211, 112, 165, 164, 11, 37, 202, 117, 146, 92, 238, 212, 130, 107, 95, 139, 201, 106, 108, 113, 6, 192, 114, 98, 238, 207, 179, 12, 118, 1, 13, 59, 71, 42, 244, 153, 93, 248, 248, 113, 17, 120, 195, 64, 21, 251, 114, 147, 155, 244, 25, 217, 145, 167, 182, 69, 243, 91, 110, 244, 81, 196, 181, 240, 231, 179, 12, 252, 218, 181, 222, 79, 123, 99, 7, 165}, +{116, 208, 6, 17, 70, 75, 233, 147, 149, 146, 205, 76, 227, 240, 195, 170, 168, 193, 227, 29, 208, 85, 149, 81, 175, 49, 74, 91, 232, 118, 191, 244, 42, 147, 204, 193, 24, 116, 122, 251, 153, 154, 150, 78, 31, 220, 238, 126, 57, 118, 165, 239, 172, 167, 14, 159, 16, 171, 181, 233, 29, 124, 139, 218, 108, 128, 58, 206, 6, 200, 45, 135, 121, 243, 10, 181, 118, 221, 44, 45, 150, 87, 163, 110, 54, 230, 155, 24, 252, 61, 162, 102, 72, 83, 89, 133, 83, 106, 42, 25, 94, 5, 248, 136, 229, 175, 72, 151, 179, 223, 140, 205, 149, 115, 209, 107, 107, 231, 41, 27, 203, 162, 70, 190, 150, 144, 176, 12}, +{29, 198, 205, 159, 39, 232, 47, 179, 53, 213, 62, 207, 203, 194, 80, 25, 104, 115, 149, 76, 168, 49, 228, 171, 78, 235, 242, 124, 63, 80, 237, 198, 229, 12, 223, 81, 97, 149, 215, 109, 213, 0, 241, 222, 103, 252, 55, 56, 75, 232, 221, 47, 121, 2, 238, 39, 195, 48, 206, 171, 168, 108, 11, 73, 40, 119, 94, 70, 158, 22, 7, 61, 135, 238, 249, 51, 77, 20, 97, 67, 132, 169, 218, 124, 85, 60, 128, 140, 155, 70, 69, 226, 223, 176, 136, 26, 81, 169, 100, 91, 126, 164, 163, 32, 150, 229, 252, 40, 81, 206, 151, 238, 240, 69, 14, 10, 226, 78, 78, 204, 126, 29, 6, 194, 190, 133, 235, 146}, +{142, 235, 12, 80, 239, 235, 13, 128, 166, 201, 218, 83, 150, 72, 160, 107, 129, 195, 73, 123, 232, 243, 217, 228, 110, 162, 162, 106, 87, 188, 252, 27, 74, 161, 47, 82, 158, 141, 136, 252, 37, 241, 33, 36, 69, 17, 115, 145, 177, 185, 176, 212, 248, 207, 156, 192, 38, 225, 63, 18, 118, 223, 163, 144, 229, 216, 97, 161, 136, 181, 106, 220, 229, 114, 68, 77, 199, 209, 99, 139, 118, 225, 251, 155, 218, 88, 13, 142, 166, 5, 209, 187, 42, 87, 130, 164, 59, 153, 48, 75, 121, 42, 19, 198, 196, 214, 248, 86, 99, 159, 184, 55, 212, 127, 93, 197, 205, 165, 165, 126, 237, 20, 110, 140, 232, 114, 158, 155}, +{166, 252, 241, 189, 178, 198, 195, 103, 44, 25, 144, 150, 2, 115, 181, 147, 48, 237, 99, 233, 62, 124, 154, 25, 14, 246, 255, 197, 49, 23, 151, 193, 88, 247, 91, 247, 63, 155, 147, 71, 134, 231, 223, 230, 123, 4, 82, 115, 126, 121, 196, 239, 75, 153, 4, 16, 132, 82, 221, 63, 187, 11, 116, 29, 24, 245, 43, 12, 165, 132, 164, 105, 200, 235, 21, 97, 30, 63, 173, 193, 32, 244, 132, 110, 83, 119, 233, 1, 163, 242, 221, 139, 242, 185, 50, 12, 186, 146, 243, 30, 205, 36, 66, 175, 211, 193, 232, 34, 241, 202, 193, 56, 123, 214, 180, 185, 80, 191, 47, 200, 130, 215, 241, 177, 2, 28, 79, 87}, +{16, 203, 88, 68, 94, 48, 34, 60, 101, 213, 8, 19, 81, 237, 5, 160, 116, 107, 168, 253, 250, 104, 232, 70, 242, 210, 100, 66, 200, 226, 194, 169, 136, 118, 201, 16, 192, 168, 21, 236, 202, 42, 121, 96, 138, 251, 77, 75, 100, 2, 102, 244, 111, 176, 168, 213, 249, 236, 10, 207, 141, 66, 229, 235, 60, 36, 63, 13, 107, 136, 170, 147, 225, 135, 255, 74, 167, 165, 32, 58, 72, 252, 241, 43, 164, 140, 23, 191, 3, 35, 250, 79, 145, 98, 4, 133, 132, 75, 163, 225, 234, 5, 144, 132, 239, 116, 187, 89, 94, 79, 179, 189, 58, 171, 242, 68, 99, 134, 35, 6, 166, 89, 210, 175, 246, 161, 205, 128}, +{114, 39, 110, 89, 9, 73, 166, 90, 93, 3, 57, 127, 206, 255, 100, 187, 7, 120, 9, 89, 71, 162, 214, 106, 81, 216, 126, 225, 164, 213, 184, 75, 67, 108, 116, 92, 126, 146, 50, 165, 4, 31, 17, 197, 217, 7, 184, 75, 13, 11, 170, 250, 17, 93, 209, 100, 104, 189, 174, 17, 62, 172, 33, 53, 72, 199, 146, 132, 18, 19, 215, 70, 184, 38, 123, 28, 1, 228, 59, 99, 17, 32, 254, 45, 168, 211, 115, 44, 145, 179, 255, 242, 38, 98, 177, 47, 156, 91, 192, 186, 93, 177, 194, 226, 117, 81, 185, 174, 194, 22, 7, 41, 7, 59, 245, 154, 9, 65, 58, 195, 20, 197, 216, 163, 165, 20, 52, 72}, +{53, 88, 139, 141, 251, 241, 168, 65, 184, 39, 127, 28, 48, 250, 107, 62, 163, 166, 79, 214, 8, 237, 143, 59, 45, 180, 170, 41, 250, 38, 226, 226, 33, 238, 20, 76, 21, 99, 103, 184, 109, 50, 82, 201, 79, 120, 66, 19, 182, 157, 116, 6, 77, 78, 188, 153, 170, 107, 165, 109, 15, 85, 232, 51, 127, 174, 208, 202, 208, 224, 247, 58, 75, 80, 26, 48, 202, 93, 223, 193, 1, 5, 36, 194, 225, 215, 177, 158, 92, 139, 143, 140, 244, 61, 167, 114, 162, 10, 33, 69, 160, 50, 228, 90, 180, 210, 2, 106, 126, 122, 42, 75, 245, 223, 237, 246, 197, 85, 135, 119, 203, 192, 150, 131, 69, 157, 246, 127}, +{14, 254, 241, 140, 205, 244, 49, 105, 106, 195, 82, 66, 133, 174, 222, 90, 109, 144, 115, 224, 48, 40, 69, 40, 212, 62, 72, 78, 201, 111, 221, 83, 126, 233, 136, 47, 243, 90, 249, 80, 45, 244, 253, 105, 217, 193, 34, 244, 23, 226, 203, 31, 142, 11, 175, 195, 223, 152, 243, 188, 159, 113, 112, 169, 140, 81, 221, 236, 168, 75, 166, 237, 169, 180, 0, 44, 85, 140, 37, 189, 236, 181, 21, 184, 233, 248, 30, 232, 66, 251, 29, 101, 125, 144, 224, 176, 219, 225, 177, 128, 234, 140, 212, 243, 84, 137, 12, 229, 181, 153, 237, 136, 250, 112, 70, 134, 18, 104, 158, 63, 48, 224, 113, 65, 174, 213, 21, 92}, +{4, 134, 151, 89, 200, 27, 1, 73, 230, 143, 82, 107, 181, 225, 159, 27, 226, 72, 71, 238, 251, 5, 189, 30, 192, 133, 223, 255, 144, 170, 91, 53, 141, 182, 222, 173, 247, 131, 0, 91, 222, 87, 62, 171, 17, 201, 103, 99, 2, 100, 171, 216, 212, 173, 163, 158, 143, 211, 111, 80, 26, 43, 100, 183, 96, 253, 119, 99, 205, 233, 132, 0, 11, 84, 32, 98, 127, 237, 184, 88, 97, 122, 196, 223, 212, 36, 137, 176, 250, 123, 137, 44, 118, 51, 78, 10, 169, 39, 137, 207, 196, 131, 131, 224, 87, 60, 210, 246, 223, 171, 237, 59, 13, 113, 79, 7, 227, 91, 130, 227, 126, 31, 28, 141, 40, 153, 227, 185}, +{80, 227, 209, 133, 17, 135, 81, 221, 80, 195, 8, 93, 219, 11, 149, 105, 135, 162, 249, 103, 246, 158, 1, 176, 68, 222, 156, 99, 22, 1, 48, 24, 54, 77, 200, 249, 73, 200, 87, 169, 8, 222, 153, 33, 187, 204, 186, 1, 44, 61, 34, 100, 161, 112, 109, 241, 78, 198, 74, 136, 130, 177, 131, 191, 110, 190, 172, 90, 83, 31, 45, 17, 122, 57, 211, 212, 224, 216, 63, 240, 228, 57, 158, 195, 46, 47, 84, 105, 50, 218, 93, 72, 174, 83, 250, 79, 147, 25, 26, 228, 159, 167, 240, 245, 188, 19, 22, 64, 124, 199, 228, 123, 50, 223, 217, 6, 195, 72, 34, 154, 49, 70, 26, 86, 83, 185, 39, 163}, +{117, 68, 40, 72, 254, 55, 62, 129, 181, 227, 9, 133, 16, 91, 9, 232, 110, 60, 92, 218, 140, 27, 19, 32, 43, 28, 90, 239, 163, 213, 91, 157, 181, 69, 176, 13, 194, 208, 192, 61, 11, 126, 27, 128, 129, 156, 204, 121, 252, 248, 163, 30, 138, 201, 124, 54, 202, 225, 255, 40, 239, 22, 158, 84, 117, 81, 25, 174, 156, 159, 178, 21, 9, 148, 120, 245, 79, 242, 161, 13, 147, 118, 100, 16, 205, 11, 214, 127, 202, 50, 177, 58, 44, 190, 119, 168, 107, 197, 49, 100, 255, 37, 61, 188, 250, 172, 82, 147, 179, 88, 158, 104, 42, 85, 237, 25, 17, 121, 133, 250, 231, 37, 187, 74, 165, 217, 56, 245}, +{99, 1, 109, 115, 70, 84, 111, 132, 202, 17, 127, 136, 113, 86, 33, 244, 74, 200, 188, 76, 2, 232, 14, 47, 248, 34, 141, 187, 86, 44, 86, 93, 131, 51, 118, 10, 129, 53, 201, 201, 59, 67, 172, 3, 30, 125, 62, 2, 4, 137, 180, 95, 104, 181, 39, 160, 103, 120, 93, 54, 167, 50, 78, 90, 155, 140, 233, 28, 111, 65, 95, 108, 113, 214, 220, 235, 242, 151, 182, 142, 59, 185, 249, 121, 171, 149, 223, 208, 96, 120, 233, 154, 124, 144, 18, 40, 189, 150, 24, 95, 179, 51, 13, 188, 174, 100, 11, 26, 182, 231, 2, 37, 255, 224, 198, 125, 154, 131, 108, 79, 77, 13, 142, 151, 249, 201, 21, 222}, +{20, 236, 196, 94, 50, 63, 89, 140, 95, 78, 164, 126, 214, 132, 174, 214, 75, 221, 126, 87, 111, 98, 13, 142, 44, 223, 63, 214, 28, 60, 66, 43, 71, 17, 196, 147, 66, 26, 88, 7, 141, 118, 105, 0, 116, 128, 51, 12, 32, 126, 148, 128, 21, 164, 101, 226, 249, 170, 235, 149, 85, 105, 250, 189, 38, 192, 214, 170, 113, 68, 34, 190, 234, 163, 97, 59, 147, 95, 79, 225, 247, 197, 89, 35, 70, 202, 233, 95, 184, 50, 73, 83, 149, 73, 112, 22, 80, 182, 161, 80, 217, 149, 96, 155, 89, 205, 25, 122, 130, 14, 184, 70, 161, 106, 170, 216, 46, 133, 108, 132, 216, 185, 108, 90, 138, 223, 169, 139}, +{61, 181, 33, 79, 43, 215, 72, 248, 236, 217, 75, 135, 103, 192, 28, 223, 0, 254, 27, 54, 30, 184, 212, 17, 91, 171, 232, 171, 143, 147, 83, 194, 138, 25, 172, 240, 53, 111, 70, 87, 24, 83, 213, 175, 229, 155, 250, 133, 32, 226, 167, 120, 29, 91, 134, 241, 136, 31, 221, 124, 208, 143, 159, 136, 223, 34, 106, 114, 142, 58, 90, 173, 76, 166, 5, 72, 63, 247, 119, 248, 82, 17, 98, 181, 35, 162, 233, 76, 154, 26, 62, 204, 239, 105, 141, 96, 163, 248, 66, 39, 74, 191, 77, 203, 63, 254, 76, 230, 155, 169, 37, 57, 81, 229, 216, 236, 137, 245, 2, 249, 171, 48, 32, 153, 147, 171, 40, 56}, +{200, 130, 152, 68, 234, 170, 208, 253, 168, 205, 89, 32, 228, 84, 217, 182, 181, 59, 111, 227, 39, 234, 218, 147, 111, 53, 163, 57, 127, 97, 146, 240, 157, 158, 125, 122, 132, 186, 178, 121, 102, 181, 129, 36, 32, 80, 25, 34, 131, 63, 156, 53, 132, 184, 130, 12, 52, 10, 58, 132, 57, 245, 234, 221, 20, 137, 79, 143, 130, 27, 58, 123, 148, 161, 217, 27, 115, 92, 130, 151, 245, 231, 24, 135, 198, 124, 223, 195, 28, 90, 155, 144, 166, 31, 62, 62, 107, 40, 233, 66, 191, 216, 134, 132, 31, 122, 0, 25, 177, 77, 119, 12, 223, 239, 255, 20, 249, 125, 128, 72, 47, 32, 206, 153, 122, 28, 125, 151}, +{178, 108, 238, 98, 42, 158, 250, 84, 88, 9, 198, 241, 151, 51, 146, 249, 252, 166, 180, 189, 34, 33, 132, 23, 81, 243, 240, 174, 209, 208, 46, 78, 101, 101, 86, 31, 233, 240, 48, 163, 120, 131, 171, 230, 131, 151, 4, 57, 74, 26, 166, 186, 200, 184, 224, 7, 42, 149, 85, 122, 134, 41, 188, 208, 21, 63, 37, 15, 23, 30, 18, 199, 247, 16, 247, 191, 51, 66, 195, 176, 67, 84, 240, 189, 85, 74, 246, 229, 196, 56, 76, 233, 17, 135, 65, 170, 38, 190, 1, 237, 218, 7, 33, 155, 125, 188, 34, 82, 29, 92, 143, 62, 134, 157, 212, 96, 167, 199, 133, 128, 4, 110, 130, 252, 22, 5, 59, 26}, +{60, 165, 83, 142, 4, 231, 242, 44, 222, 24, 96, 139, 40, 50, 149, 115, 151, 152, 208, 142, 4, 43, 2, 106, 168, 115, 118, 71, 53, 177, 55, 8, 70, 107, 182, 13, 84, 147, 126, 25, 250, 183, 195, 132, 95, 228, 242, 172, 185, 113, 41, 252, 147, 127, 148, 2, 247, 205, 184, 179, 55, 31, 172, 23, 61, 216, 52, 157, 73, 165, 12, 44, 219, 113, 98, 162, 11, 72, 195, 95, 114, 63, 47, 247, 65, 107, 12, 152, 216, 96, 186, 110, 235, 254, 60, 119, 181, 20, 198, 251, 145, 187, 31, 21, 220, 191, 32, 66, 218, 43, 142, 56, 140, 110, 37, 15, 229, 79, 15, 234, 3, 67, 162, 54, 38, 222, 114, 153}, +{210, 25, 72, 182, 176, 151, 98, 197, 169, 32, 36, 161, 76, 76, 180, 31, 75, 58, 4, 139, 196, 222, 225, 207, 46, 52, 191, 7, 186, 165, 58, 213, 38, 138, 62, 75, 92, 26, 180, 35, 179, 3, 85, 17, 32, 114, 225, 31, 15, 45, 244, 68, 52, 80, 31, 8, 226, 112, 129, 171, 41, 80, 44, 128, 30, 248, 190, 243, 205, 226, 188, 46, 126, 32, 110, 79, 24, 192, 117, 135, 47, 222, 9, 17, 38, 82, 155, 75, 170, 221, 96, 3, 175, 57, 93, 110, 211, 235, 222, 128, 152, 208, 185, 40, 131, 98, 198, 120, 238, 235, 242, 221, 203, 211, 33, 107, 73, 1, 165, 246, 180, 121, 222, 76, 31, 100, 144, 216}, +{29, 41, 190, 84, 196, 51, 150, 230, 200, 154, 238, 95, 131, 144, 224, 171, 18, 193, 106, 200, 246, 115, 102, 134, 105, 18, 158, 219, 254, 0, 158, 221, 106, 201, 142, 74, 189, 196, 9, 44, 69, 69, 74, 149, 67, 199, 60, 81, 12, 115, 248, 22, 239, 129, 19, 4, 10, 75, 19, 230, 62, 21, 4, 89, 101, 254, 144, 199, 225, 242, 196, 126, 17, 218, 60, 226, 154, 172, 172, 35, 157, 233, 205, 242, 54, 214, 182, 145, 218, 76, 94, 119, 186, 95, 80, 132, 2, 217, 121, 20, 139, 119, 146, 5, 78, 144, 93, 187, 206, 88, 203, 233, 9, 20, 243, 161, 34, 31, 9, 216, 157, 45, 227, 138, 113, 158, 224, 47}, +{209, 14, 15, 212, 116, 3, 191, 254, 30, 208, 155, 24, 209, 247, 244, 74, 208, 152, 251, 170, 233, 218, 167, 120, 184, 232, 119, 25, 222, 49, 193, 172, 173, 71, 168, 53, 117, 97, 207, 247, 172, 94, 172, 78, 12, 170, 215, 181, 123, 191, 230, 109, 160, 33, 25, 24, 33, 93, 44, 189, 202, 238, 99, 175, 93, 150, 140, 250, 22, 34, 189, 223, 165, 202, 36, 96, 211, 106, 42, 226, 155, 145, 34, 222, 104, 31, 143, 214, 63, 55, 96, 75, 158, 253, 194, 162, 126, 233, 74, 128, 65, 143, 93, 202, 25, 82, 27, 36, 105, 236, 58, 208, 207, 18, 43, 169, 13, 93, 200, 244, 216, 206, 244, 203, 142, 218, 253, 129}, +{77, 102, 60, 165, 45, 12, 1, 146, 212, 35, 1, 82, 142, 38, 179, 16, 156, 236, 235, 210, 19, 66, 147, 139, 7, 213, 44, 207, 156, 174, 13, 52, 144, 179, 105, 50, 183, 191, 131, 90, 189, 181, 119, 195, 17, 176, 139, 139, 6, 115, 69, 134, 176, 170, 150, 238, 104, 59, 75, 205, 255, 90, 7, 233, 111, 90, 88, 164, 129, 187, 69, 100, 165, 41, 211, 166, 130, 42, 91, 53, 45, 169, 39, 31, 172, 101, 121, 111, 102, 221, 109, 112, 9, 84, 130, 172, 162, 137, 155, 199, 119, 252, 196, 137, 123, 148, 95, 55, 32, 29, 188, 101, 116, 126, 210, 41, 200, 109, 117, 141, 16, 15, 183, 240, 73, 140, 246, 72}, +{101, 172, 105, 183, 157, 97, 149, 122, 43, 23, 245, 131, 97, 237, 211, 155, 77, 140, 159, 37, 15, 230, 189, 83, 170, 101, 251, 100, 54, 227, 117, 39, 144, 250, 68, 21, 41, 114, 105, 235, 80, 108, 134, 118, 87, 240, 142, 20, 164, 227, 137, 79, 228, 132, 129, 157, 41, 112, 113, 247, 50, 113, 58, 105, 59, 112, 178, 42, 73, 110, 60, 79, 132, 242, 244, 99, 192, 191, 88, 93, 88, 78, 9, 77, 115, 55, 212, 97, 225, 83, 70, 239, 70, 193, 244, 50, 70, 97, 18, 223, 210, 133, 99, 77, 61, 84, 11, 36, 44, 100, 251, 134, 51, 22, 250, 126, 34, 164, 35, 114, 157, 200, 203, 38, 22, 61, 125, 126}, +{112, 77, 102, 47, 17, 130, 145, 63, 219, 3, 12, 110, 120, 250, 2, 139, 122, 162, 227, 192, 153, 52, 190, 1, 106, 61, 167, 67, 61, 163, 135, 73, 219, 9, 167, 137, 219, 78, 143, 95, 239, 178, 207, 80, 68, 154, 15, 83, 252, 12, 181, 146, 180, 230, 151, 107, 81, 187, 11, 240, 85, 66, 177, 82, 10, 178, 244, 112, 192, 213, 219, 144, 106, 165, 247, 59, 179, 198, 143, 90, 136, 14, 211, 21, 174, 94, 74, 103, 156, 162, 200, 9, 34, 168, 79, 44, 166, 119, 46, 229, 169, 48, 95, 122, 248, 165, 22, 124, 54, 4, 53, 18, 195, 107, 137, 63, 242, 88, 156, 18, 121, 206, 182, 242, 253, 53, 196, 207}, +{203, 1, 244, 249, 71, 167, 208, 33, 70, 180, 170, 38, 14, 250, 56, 234, 233, 174, 157, 121, 97, 61, 92, 2, 203, 150, 20, 62, 125, 250, 50, 167, 188, 135, 80, 110, 42, 5, 111, 108, 22, 251, 119, 170, 145, 17, 124, 206, 12, 24, 60, 254, 193, 224, 190, 252, 215, 54, 148, 217, 49, 228, 53, 56, 229, 59, 140, 16, 219, 138, 165, 245, 139, 173, 20, 81, 23, 99, 241, 65, 183, 224, 13, 2, 168, 229, 176, 19, 130, 250, 155, 150, 170, 246, 76, 159, 129, 75, 11, 119, 131, 18, 204, 132, 142, 146, 85, 14, 98, 125, 234, 27, 24, 134, 199, 136, 213, 229, 166, 98, 16, 207, 211, 123, 93, 179, 90, 95}, +{88, 126, 12, 191, 132, 160, 203, 68, 187, 237, 183, 170, 113, 145, 184, 16, 13, 188, 138, 187, 4, 16, 238, 64, 129, 137, 230, 189, 242, 67, 254, 162, 173, 60, 132, 188, 200, 99, 97, 191, 79, 149, 98, 118, 195, 93, 242, 144, 178, 212, 187, 218, 255, 143, 122, 123, 58, 23, 149, 30, 28, 212, 10, 199, 86, 36, 219, 182, 63, 93, 202, 104, 121, 71, 234, 180, 127, 199, 95, 254, 169, 190, 23, 28, 39, 148, 75, 13, 60, 163, 112, 77, 55, 86, 16, 11, 130, 127, 13, 211, 21, 200, 246, 160, 178, 24, 159, 140, 147, 206, 225, 231, 24, 201, 46, 80, 206, 11, 163, 232, 250, 134, 107, 140, 116, 156, 9, 97}, +{184, 55, 11, 16, 206, 52, 241, 103, 89, 70, 251, 164, 54, 53, 200, 139, 116, 136, 160, 211, 229, 255, 249, 231, 14, 54, 50, 55, 246, 111, 38, 182, 68, 195, 249, 95, 136, 236, 159, 123, 71, 108, 13, 164, 20, 77, 124, 23, 76, 185, 246, 222, 134, 229, 106, 34, 179, 90, 224, 148, 97, 28, 181, 136, 86, 23, 237, 69, 67, 147, 217, 104, 1, 76, 250, 133, 221, 19, 211, 216, 82, 32, 245, 44, 11, 240, 241, 110, 166, 107, 97, 170, 238, 235, 28, 60, 107, 132, 225, 126, 195, 250, 71, 126, 245, 92, 25, 48, 243, 221, 85, 222, 239, 93, 172, 38, 23, 236, 208, 109, 109, 131, 37, 85, 124, 219, 255, 158}, +{41, 12, 238, 85, 1, 24, 138, 11, 217, 42, 108, 40, 66, 128, 120, 180, 58, 173, 192, 91, 136, 134, 23, 93, 141, 225, 186, 239, 225, 212, 202, 57, 94, 88, 217, 182, 186, 181, 235, 26, 135, 34, 124, 31, 137, 216, 66, 143, 15, 154, 199, 152, 151, 237, 32, 231, 176, 89, 46, 205, 126, 192, 60, 5, 66, 177, 111, 71, 168, 98, 24, 138, 154, 39, 204, 77, 130, 176, 35, 101, 129, 4, 164, 230, 139, 211, 45, 100, 254, 144, 250, 83, 159, 246, 217, 123, 249, 248, 199, 81, 61, 161, 38, 254, 66, 126, 145, 165, 25, 162, 224, 237, 89, 235, 167, 66, 236, 96, 115, 160, 169, 220, 198, 251, 186, 228, 251, 112}, +{80, 129, 68, 96, 131, 84, 86, 34, 146, 170, 70, 126, 91, 225, 113, 241, 142, 165, 52, 198, 1, 140, 232, 38, 41, 141, 64, 26, 105, 238, 2, 156, 172, 54, 217, 44, 244, 143, 191, 22, 169, 29, 212, 171, 8, 4, 113, 40, 45, 50, 100, 67, 164, 79, 173, 167, 75, 66, 106, 218, 96, 110, 127, 123, 0, 190, 238, 208, 229, 179, 39, 3, 142, 50, 90, 133, 196, 153, 35, 116, 199, 109, 36, 80, 213, 152, 200, 226, 195, 248, 109, 38, 151, 182, 84, 240, 178, 34, 116, 93, 107, 224, 202, 155, 240, 178, 38, 204, 126, 229, 203, 147, 221, 57, 237, 97, 196, 40, 26, 72, 122, 98, 95, 68, 64, 82, 120, 240}, +{120, 183, 115, 185, 42, 55, 23, 83, 182, 216, 255, 164, 71, 156, 199, 117, 28, 60, 67, 237, 145, 252, 51, 62, 44, 71, 91, 201, 140, 16, 209, 157, 150, 248, 246, 122, 119, 9, 84, 106, 136, 24, 157, 155, 15, 36, 45, 161, 203, 76, 176, 42, 15, 66, 43, 87, 235, 209, 177, 212, 110, 123, 203, 156, 195, 202, 6, 242, 19, 200, 248, 154, 59, 191, 70, 169, 157, 107, 226, 1, 102, 71, 51, 227, 194, 1, 217, 116, 150, 10, 92, 199, 135, 82, 77, 184, 216, 76, 43, 178, 136, 74, 48, 150, 160, 120, 70, 103, 38, 95, 108, 49, 230, 77, 88, 75, 59, 247, 25, 123, 93, 114, 178, 124, 51, 116, 134, 2}, +{177, 204, 70, 102, 76, 95, 95, 80, 219, 99, 58, 239, 241, 43, 247, 19, 165, 19, 208, 116, 208, 80, 15, 72, 75, 198, 9, 132, 245, 36, 192, 116, 74, 160, 11, 133, 167, 243, 128, 254, 110, 22, 168, 177, 85, 203, 64, 63, 86, 175, 108, 180, 112, 56, 213, 142, 244, 156, 198, 203, 188, 54, 226, 132, 212, 191, 7, 25, 148, 167, 217, 247, 136, 252, 50, 4, 98, 75, 138, 198, 142, 161, 19, 136, 82, 194, 237, 149, 67, 41, 104, 10, 25, 46, 76, 43, 68, 180, 55, 219, 100, 241, 104, 0, 115, 195, 124, 48, 238, 21, 87, 64, 100, 58, 212, 179, 244, 79, 105, 63, 6, 202, 191, 5, 171, 121, 140, 182}, +{15, 5, 57, 160, 25, 136, 118, 215, 120, 67, 73, 251, 72, 101, 122, 65, 132, 157, 190, 176, 77, 112, 12, 208, 126, 102, 5, 247, 16, 66, 140, 49, 82, 106, 234, 14, 77, 61, 3, 86, 174, 142, 94, 5, 225, 203, 168, 109, 117, 100, 222, 80, 47, 157, 174, 205, 136, 165, 51, 43, 101, 14, 219, 193, 177, 28, 180, 146, 208, 124, 6, 113, 83, 62, 39, 35, 131, 238, 159, 142, 211, 54, 60, 231, 17, 97, 88, 170, 127, 187, 70, 171, 211, 41, 197, 134, 174, 1, 181, 195, 181, 4, 163, 141, 128, 96, 54, 41, 54, 237, 180, 239, 244, 131, 181, 254, 60, 157, 141, 92, 195, 168, 114, 128, 201, 122, 233, 20}, +{208, 246, 90, 58, 219, 232, 182, 92, 189, 121, 173, 133, 137, 101, 161, 243, 193, 119, 194, 89, 224, 189, 217, 86, 58, 104, 223, 43, 123, 251, 69, 93, 192, 5, 110, 37, 149, 58, 62, 25, 54, 201, 185, 81, 255, 204, 182, 161, 94, 80, 44, 116, 97, 250, 244, 21, 154, 115, 42, 49, 152, 24, 205, 3, 233, 73, 214, 185, 59, 140, 75, 255, 69, 120, 99, 184, 108, 26, 20, 22, 192, 43, 212, 140, 108, 145, 36, 214, 94, 161, 72, 44, 128, 195, 137, 153, 238, 80, 94, 166, 153, 66, 14, 176, 124, 61, 94, 210, 184, 130, 21, 19, 147, 106, 22, 110, 125, 13, 193, 219, 28, 182, 165, 167, 172, 87, 105, 244}, +{177, 86, 70, 221, 103, 244, 185, 237, 53, 19, 48, 185, 78, 160, 199, 165, 237, 133, 119, 128, 127, 148, 134, 120, 141, 32, 47, 43, 213, 22, 65, 33, 129, 255, 44, 110, 3, 56, 108, 220, 139, 72, 185, 136, 80, 167, 146, 252, 66, 105, 170, 61, 76, 115, 187, 17, 237, 244, 111, 255, 59, 194, 47, 157, 242, 90, 184, 235, 37, 202, 166, 240, 98, 78, 132, 95, 136, 136, 65, 56, 223, 151, 119, 10, 195, 76, 92, 237, 236, 132, 198, 255, 145, 93, 47, 23, 34, 219, 151, 220, 243, 213, 157, 64, 242, 15, 175, 59, 53, 27, 191, 203, 226, 62, 111, 73, 186, 247, 108, 206, 62, 161, 77, 45, 50, 216, 166, 73}, +{41, 9, 237, 179, 119, 30, 209, 118, 192, 85, 41, 6, 188, 90, 115, 44, 114, 136, 1, 111, 70, 246, 250, 152, 161, 176, 231, 202, 186, 28, 167, 11, 35, 107, 63, 93, 85, 120, 62, 176, 86, 125, 89, 107, 19, 117, 20, 56, 146, 5, 45, 19, 61, 229, 107, 26, 75, 138, 56, 142, 67, 71, 59, 153, 155, 141, 77, 179, 164, 142, 96, 179, 58, 133, 142, 14, 188, 12, 119, 139, 38, 231, 112, 78, 111, 91, 249, 247, 153, 235, 177, 85, 243, 134, 42, 72, 102, 165, 124, 225, 88, 160, 254, 131, 8, 75, 189, 91, 251, 118, 132, 21, 211, 179, 223, 242, 196, 163, 228, 184, 13, 51, 248, 63, 104, 8, 67, 81}, +{141, 9, 182, 224, 245, 77, 88, 19, 148, 84, 202, 119, 191, 97, 5, 164, 150, 61, 183, 174, 162, 91, 199, 203, 37, 98, 76, 153, 122, 139, 224, 234, 66, 173, 163, 186, 141, 79, 129, 125, 206, 12, 28, 74, 32, 226, 18, 151, 94, 146, 179, 191, 173, 77, 116, 183, 39, 80, 204, 128, 229, 147, 192, 23, 235, 68, 252, 104, 89, 187, 118, 15, 248, 178, 188, 251, 171, 235, 94, 203, 91, 184, 217, 175, 101, 160, 79, 196, 181, 20, 100, 153, 3, 196, 151, 105, 67, 239, 180, 244, 228, 92, 53, 119, 139, 88, 70, 246, 0, 88, 109, 49, 177, 86, 251, 226, 6, 150, 88, 48, 242, 123, 4, 90, 55, 109, 46, 70}, +{117, 161, 202, 35, 138, 254, 248, 198, 152, 177, 196, 117, 135, 148, 26, 40, 152, 219, 86, 77, 17, 123, 201, 36, 150, 241, 3, 3, 108, 155, 227, 23, 23, 53, 204, 243, 54, 240, 121, 169, 26, 206, 209, 194, 19, 241, 2, 247, 246, 105, 235, 224, 176, 120, 44, 184, 13, 112, 71, 218, 226, 207, 68, 248, 252, 132, 59, 106, 102, 180, 18, 39, 122, 248, 111, 168, 127, 67, 189, 10, 108, 183, 72, 46, 154, 183, 117, 84, 76, 51, 177, 58, 148, 153, 199, 246, 120, 173, 22, 92, 251, 174, 59, 251, 41, 249, 151, 82, 86, 87, 6, 147, 168, 155, 140, 25, 223, 170, 248, 147, 101, 252, 54, 86, 133, 200, 157, 181}, +{64, 148, 144, 24, 217, 165, 184, 229, 128, 101, 238, 130, 183, 208, 60, 180, 197, 96, 35, 177, 251, 29, 255, 164, 190, 209, 172, 131, 78, 48, 143, 82, 194, 76, 38, 232, 93, 119, 226, 176, 120, 162, 88, 203, 2, 121, 25, 226, 162, 121, 204, 125, 108, 146, 162, 35, 52, 242, 110, 200, 33, 129, 217, 141, 140, 24, 172, 152, 192, 58, 115, 118, 80, 105, 42, 117, 254, 17, 131, 34, 200, 220, 79, 34, 70, 204, 52, 78, 68, 129, 114, 241, 142, 254, 134, 180, 95, 230, 86, 232, 84, 66, 166, 23, 52, 27, 162, 251, 134, 136, 204, 81, 173, 147, 73, 103, 141, 220, 46, 195, 173, 247, 99, 99, 235, 113, 7, 156}, +{136, 150, 42, 90, 208, 227, 196, 244, 58, 221, 133, 50, 176, 26, 1, 102, 137, 43, 234, 63, 254, 113, 216, 236, 142, 208, 172, 30, 129, 69, 233, 22, 89, 115, 25, 234, 149, 4, 102, 254, 124, 4, 46, 66, 106, 102, 6, 110, 58, 217, 211, 195, 209, 216, 249, 216, 119, 208, 117, 5, 168, 149, 153, 225, 172, 100, 233, 188, 163, 205, 102, 56, 28, 21, 216, 145, 196, 248, 21, 153, 129, 184, 30, 202, 126, 127, 187, 139, 43, 192, 2, 32, 48, 252, 2, 161, 81, 41, 177, 14, 163, 93, 64, 56, 137, 172, 76, 97, 13, 22, 205, 77, 2, 6, 85, 196, 236, 153, 182, 72, 10, 109, 36, 46, 25, 166, 114, 163}, +{46, 164, 30, 21, 2, 138, 141, 77, 2, 203, 220, 246, 169, 15, 18, 117, 72, 94, 68, 71, 80, 145, 94, 241, 8, 130, 229, 143, 159, 124, 111, 231, 190, 220, 101, 120, 35, 54, 192, 18, 170, 101, 214, 67, 27, 233, 126, 204, 185, 33, 68, 63, 190, 234, 186, 213, 250, 174, 127, 47, 72, 87, 31, 23, 171, 198, 153, 243, 244, 184, 117, 232, 28, 125, 123, 50, 44, 65, 69, 24, 42, 210, 55, 55, 56, 116, 102, 167, 70, 152, 252, 19, 188, 109, 237, 35, 53, 111, 168, 220, 209, 140, 106, 248, 185, 3, 221, 218, 17, 53, 211, 64, 212, 115, 103, 143, 120, 30, 72, 143, 109, 35, 181, 128, 26, 86, 234, 180}, +{64, 140, 77, 159, 150, 161, 158, 247, 14, 167, 12, 71, 235, 203, 99, 11, 101, 243, 163, 179, 148, 108, 38, 15, 250, 190, 2, 52, 116, 188, 190, 107, 149, 225, 223, 31, 102, 151, 210, 172, 240, 144, 238, 235, 43, 179, 160, 213, 48, 250, 99, 139, 204, 170, 253, 174, 108, 157, 117, 61, 0, 45, 7, 73, 213, 177, 41, 172, 26, 14, 150, 227, 110, 160, 164, 227, 117, 190, 167, 209, 35, 47, 235, 30, 210, 21, 239, 208, 114, 26, 3, 240, 39, 136, 189, 80, 103, 251, 198, 26, 9, 28, 155, 119, 162, 200, 248, 233, 166, 54, 135, 79, 196, 4, 33, 76, 54, 95, 51, 30, 141, 17, 93, 62, 60, 87, 197, 118}, +{31, 218, 225, 41, 228, 203, 167, 230, 222, 194, 60, 43, 117, 25, 212, 132, 126, 239, 183, 91, 40, 234, 187, 183, 101, 15, 81, 175, 119, 189, 133, 122, 33, 6, 87, 194, 41, 249, 99, 16, 137, 252, 183, 54, 118, 30, 126, 96, 183, 136, 42, 13, 50, 21, 15, 230, 185, 157, 24, 189, 72, 108, 200, 86, 212, 63, 155, 30, 213, 252, 233, 175, 81, 195, 143, 113, 179, 244, 133, 24, 220, 43, 197, 60, 42, 41, 191, 208, 219, 128, 117, 14, 243, 161, 179, 134, 2, 169, 34, 189, 91, 184, 14, 221, 35, 97, 17, 63, 54, 232, 227, 192, 73, 72, 206, 216, 131, 13, 28, 161, 78, 253, 5, 150, 214, 81, 249, 17}, +{12, 84, 32, 6, 0, 199, 19, 209, 107, 17, 83, 47, 156, 186, 110, 231, 228, 215, 179, 43, 153, 181, 46, 58, 158, 156, 184, 158, 75, 11, 241, 153, 137, 16, 129, 209, 135, 46, 80, 253, 49, 76, 165, 190, 180, 194, 52, 86, 197, 208, 140, 142, 132, 215, 75, 158, 113, 7, 47, 21, 131, 92, 36, 157, 143, 223, 55, 245, 44, 195, 16, 222, 94, 228, 145, 178, 148, 102, 227, 172, 40, 184, 123, 10, 119, 22, 136, 245, 22, 169, 69, 124, 102, 124, 209, 6, 181, 143, 240, 217, 2, 59, 164, 127, 41, 250, 77, 241, 119, 252, 251, 69, 158, 124, 208, 214, 248, 154, 140, 6, 174, 91, 117, 128, 226, 183, 76, 241}, +{62, 190, 232, 161, 19, 212, 16, 0, 176, 254, 146, 10, 122, 216, 179, 99, 62, 244, 133, 44, 158, 127, 65, 82, 184, 123, 42, 117, 58, 219, 17, 49, 96, 194, 169, 171, 247, 90, 115, 28, 172, 41, 203, 200, 228, 162, 81, 88, 2, 7, 40, 192, 204, 6, 119, 62, 205, 151, 151, 196, 201, 25, 225, 2, 159, 41, 42, 161, 56, 233, 85, 177, 65, 98, 90, 230, 58, 74, 149, 29, 59, 82, 189, 102, 103, 52, 44, 158, 66, 20, 242, 87, 210, 48, 228, 26, 243, 213, 19, 67, 193, 108, 54, 223, 209, 76, 237, 178, 7, 144, 117, 140, 253, 205, 100, 17, 31, 211, 159, 206, 216, 32, 101, 53, 172, 234, 3, 2}, +{28, 44, 97, 11, 84, 211, 172, 71, 255, 36, 247, 166, 38, 41, 62, 136, 152, 157, 157, 222, 120, 50, 166, 227, 139, 53, 118, 54, 70, 242, 40, 160, 36, 251, 8, 240, 240, 88, 171, 33, 202, 29, 124, 134, 82, 129, 24, 62, 186, 37, 239, 187, 9, 69, 255, 41, 42, 187, 220, 164, 0, 182, 167, 6, 22, 250, 178, 122, 31, 114, 123, 239, 122, 134, 56, 10, 154, 199, 102, 165, 178, 81, 62, 232, 158, 222, 79, 7, 44, 83, 209, 41, 71, 221, 130, 113, 62, 245, 178, 203, 102, 105, 64, 153, 235, 28, 97, 41, 192, 232, 191, 24, 173, 225, 41, 197, 30, 161, 129, 200, 244, 224, 112, 124, 188, 139, 149, 80}, +{43, 66, 242, 91, 144, 251, 130, 50, 220, 160, 0, 240, 50, 18, 7, 199, 163, 195, 216, 122, 85, 94, 67, 189, 191, 15, 43, 172, 201, 245, 236, 122, 192, 146, 138, 182, 74, 103, 237, 159, 3, 246, 238, 18, 126, 247, 107, 238, 230, 242, 81, 120, 19, 104, 60, 154, 174, 170, 140, 172, 55, 85, 246, 23, 250, 113, 237, 3, 124, 116, 26, 240, 64, 120, 67, 219, 24, 249, 30, 218, 73, 104, 32, 57, 64, 91, 5, 205, 218, 205, 155, 225, 19, 33, 162, 99, 154, 245, 137, 72, 44, 241, 78, 154, 83, 43, 191, 0, 28, 205, 124, 35, 144, 70, 255, 59, 187, 4, 53, 90, 168, 207, 54, 238, 251, 249, 17, 69}, +{51, 13, 79, 171, 213, 134, 45, 9, 41, 229, 33, 204, 82, 91, 192, 146, 86, 107, 179, 175, 31, 143, 91, 120, 251, 218, 49, 219, 149, 202, 25, 165, 110, 249, 155, 174, 131, 79, 182, 75, 79, 230, 191, 185, 16, 144, 37, 139, 122, 38, 184, 88, 120, 123, 198, 157, 11, 47, 237, 187, 233, 151, 137, 120, 129, 138, 230, 62, 198, 157, 39, 219, 143, 224, 38, 102, 158, 39, 75, 251, 200, 117, 38, 131, 102, 139, 240, 223, 7, 197, 182, 156, 62, 148, 123, 103, 197, 150, 138, 52, 128, 141, 251, 158, 255, 163, 5, 232, 187, 41, 154, 7, 212, 174, 19, 221, 24, 202, 88, 81, 141, 172, 92, 222, 152, 176, 107, 172}, +{106, 21, 17, 219, 223, 92, 94, 194, 23, 89, 170, 85, 92, 2, 11, 230, 30, 113, 232, 97, 121, 193, 148, 226, 237, 209, 242, 4, 127, 165, 56, 135, 15, 204, 63, 134, 91, 119, 26, 188, 67, 49, 140, 191, 95, 216, 22, 171, 182, 170, 74, 213, 39, 87, 182, 70, 205, 87, 34, 120, 124, 166, 61, 134, 99, 137, 84, 74, 195, 45, 251, 21, 28, 75, 231, 103, 28, 248, 49, 67, 117, 191, 243, 131, 14, 112, 167, 250, 84, 57, 153, 122, 235, 80, 18, 28, 221, 197, 4, 62, 194, 53, 101, 1, 64, 21, 97, 193, 64, 86, 63, 92, 165, 63, 47, 162, 36, 160, 65, 236, 82, 35, 67, 191, 101, 25, 217, 196}, +{80, 205, 180, 147, 23, 42, 180, 115, 135, 94, 31, 3, 247, 79, 27, 233, 231, 51, 239, 115, 40, 161, 2, 99, 229, 79, 151, 67, 230, 210, 46, 96, 122, 255, 62, 158, 171, 188, 125, 56, 150, 163, 255, 63, 194, 117, 233, 59, 71, 5, 157, 96, 63, 31, 247, 221, 68, 34, 241, 172, 79, 36, 191, 65, 252, 208, 66, 114, 195, 241, 145, 33, 21, 234, 244, 97, 160, 179, 144, 140, 11, 41, 53, 4, 232, 128, 73, 224, 138, 187, 8, 7, 30, 125, 14, 28, 3, 207, 23, 97, 44, 34, 208, 131, 50, 40, 178, 60, 50, 148, 9, 149, 183, 12, 25, 134, 75, 81, 116, 48, 154, 52, 180, 145, 9, 188, 169, 155}, +{197, 140, 17, 23, 231, 168, 156, 187, 251, 38, 19, 22, 230, 148, 26, 37, 183, 72, 9, 215, 196, 121, 95, 16, 156, 95, 246, 212, 178, 80, 152, 243, 65, 201, 136, 157, 149, 5, 233, 109, 88, 87, 156, 216, 31, 51, 199, 88, 56, 12, 67, 180, 129, 128, 107, 179, 60, 111, 110, 115, 211, 252, 188, 250, 175, 35, 84, 213, 208, 132, 84, 212, 83, 221, 149, 97, 148, 249, 0, 94, 110, 132, 50, 137, 79, 52, 39, 146, 25, 34, 175, 197, 169, 170, 252, 179, 181, 191, 116, 97, 70, 38, 143, 225, 132, 104, 34, 135, 25, 155, 168, 248, 177, 246, 96, 154, 15, 198, 171, 189, 33, 226, 192, 37, 124, 115, 121, 84}, +{80, 165, 185, 114, 65, 26, 115, 238, 71, 53, 72, 164, 159, 147, 58, 14, 152, 61, 17, 189, 57, 45, 170, 124, 28, 0, 127, 185, 157, 2, 39, 36, 78, 225, 122, 156, 223, 174, 171, 151, 15, 201, 79, 175, 137, 248, 108, 198, 34, 189, 22, 49, 51, 136, 158, 248, 236, 196, 83, 40, 105, 182, 22, 209, 194, 150, 139, 168, 153, 218, 20, 127, 169, 107, 75, 141, 208, 252, 165, 212, 187, 219, 124, 88, 176, 150, 58, 17, 215, 199, 81, 164, 192, 57, 50, 142, 187, 195, 35, 56, 145, 49, 80, 109, 235, 7, 129, 142, 234, 126, 45, 140, 142, 177, 127, 201, 29, 1, 202, 178, 10, 91, 224, 168, 216, 123, 165, 77}, +{154, 174, 167, 92, 95, 59, 100, 82, 19, 151, 108, 39, 52, 254, 157, 9, 150, 59, 201, 139, 117, 226, 100, 248, 173, 91, 96, 245, 202, 162, 79, 193, 47, 91, 41, 197, 164, 126, 185, 225, 124, 220, 39, 11, 85, 147, 88, 112, 163, 181, 184, 27, 94, 84, 94, 212, 88, 184, 148, 54, 86, 95, 255, 242, 177, 36, 187, 86, 92, 120, 100, 119, 144, 99, 247, 221, 28, 189, 192, 235, 238, 167, 231, 66, 194, 210, 127, 37, 184, 203, 233, 33, 59, 4, 48, 113, 190, 213, 154, 105, 2, 211, 124, 54, 150, 42, 58, 254, 25, 84, 6, 143, 62, 226, 206, 19, 208, 160, 22, 102, 216, 59, 103, 195, 37, 198, 40, 193}, +{35, 109, 41, 90, 230, 206, 241, 76, 143, 22, 112, 80, 121, 47, 36, 48, 193, 210, 90, 193, 66, 153, 223, 203, 52, 172, 92, 53, 121, 22, 105, 34, 178, 84, 55, 211, 245, 134, 17, 130, 192, 124, 129, 180, 142, 124, 248, 50, 179, 162, 163, 205, 80, 206, 23, 57, 193, 19, 166, 240, 48, 123, 119, 225, 169, 80, 195, 33, 245, 29, 59, 20, 30, 132, 104, 34, 219, 186, 108, 93, 64, 156, 252, 235, 40, 29, 208, 17, 69, 185, 215, 169, 188, 74, 193, 210, 153, 33, 204, 151, 185, 37, 173, 246, 90, 165, 121, 221, 35, 128, 248, 67, 196, 113, 185, 242, 46, 183, 4, 213, 50, 216, 8, 215, 13, 124, 90, 44}, +{91, 70, 234, 31, 203, 231, 93, 5, 179, 203, 105, 152, 73, 31, 248, 3, 244, 64, 39, 36, 213, 14, 197, 76, 86, 235, 39, 153, 99, 50, 95, 80, 205, 33, 207, 155, 49, 203, 27, 77, 152, 169, 142, 149, 77, 130, 209, 198, 72, 168, 242, 91, 105, 225, 218, 67, 42, 108, 227, 11, 103, 179, 2, 210, 121, 46, 132, 93, 42, 185, 240, 190, 120, 40, 181, 2, 17, 181, 234, 59, 57, 69, 231, 68, 111, 124, 249, 129, 97, 126, 227, 168, 230, 140, 119, 138, 126, 138, 173, 80, 73, 95, 111, 146, 14, 46, 145, 165, 31, 138, 95, 147, 40, 54, 14, 113, 43, 74, 198, 118, 8, 34, 236, 240, 69, 244, 46, 16}, +{7, 108, 150, 200, 205, 128, 69, 96, 52, 104, 58, 67, 166, 117, 241, 155, 99, 174, 193, 121, 255, 97, 5, 2, 175, 201, 162, 28, 252, 94, 118, 134, 98, 142, 134, 89, 15, 62, 190, 178, 52, 219, 42, 66, 237, 139, 25, 71, 194, 125, 167, 48, 81, 49, 128, 151, 166, 24, 229, 210, 15, 229, 67, 183, 138, 255, 81, 82, 106, 59, 3, 72, 131, 158, 147, 62, 15, 171, 132, 177, 74, 63, 50, 48, 154, 75, 249, 227, 147, 227, 191, 116, 213, 210, 72, 40, 173, 71, 17, 49, 140, 234, 136, 92, 21, 136, 133, 9, 107, 80, 71, 182, 90, 226, 238, 49, 203, 66, 200, 98, 241, 44, 154, 154, 236, 218, 51, 145}, +{21, 239, 142, 52, 20, 89, 123, 46, 80, 86, 108, 239, 91, 115, 227, 213, 40, 201, 38, 141, 206, 125, 245, 69, 164, 176, 198, 168, 124, 96, 142, 32, 87, 16, 246, 189, 82, 186, 209, 47, 130, 104, 84, 141, 248, 15, 182, 41, 139, 6, 201, 195, 163, 193, 216, 181, 143, 60, 135, 192, 10, 83, 45, 76, 16, 5, 157, 234, 0, 37, 96, 3, 147, 134, 253, 203, 31, 247, 92, 216, 104, 251, 226, 101, 155, 171, 16, 129, 150, 175, 179, 246, 140, 178, 179, 141, 247, 8, 1, 58, 15, 70, 228, 148, 240, 114, 224, 166, 212, 178, 15, 80, 121, 42, 29, 60, 212, 86, 162, 96, 51, 69, 114, 217, 167, 33, 218, 78}, +{15, 172, 131, 50, 139, 244, 147, 239, 4, 105, 33, 99, 59, 73, 153, 251, 150, 109, 18, 55, 128, 224, 118, 217, 237, 113, 155, 95, 151, 128, 205, 39, 131, 14, 133, 128, 163, 116, 45, 123, 245, 109, 226, 172, 58, 139, 151, 200, 244, 99, 243, 69, 226, 174, 33, 202, 235, 248, 210, 233, 40, 61, 187, 230, 42, 50, 14, 214, 195, 105, 77, 185, 151, 215, 94, 106, 140, 211, 174, 60, 74, 64, 226, 251, 26, 33, 12, 43, 243, 108, 201, 15, 145, 222, 32, 158, 6, 228, 162, 157, 166, 112, 31, 236, 113, 45, 68, 196, 90, 138, 227, 36, 1, 162, 78, 98, 87, 132, 68, 155, 129, 232, 83, 121, 39, 245, 97, 46}, +{93, 61, 129, 234, 18, 21, 54, 34, 32, 233, 93, 76, 249, 145, 224, 199, 15, 34, 117, 254, 5, 170, 122, 213, 212, 230, 10, 202, 15, 124, 125, 161, 64, 212, 148, 152, 16, 176, 213, 143, 124, 162, 161, 130, 157, 68, 203, 32, 1, 252, 3, 174, 143, 70, 4, 233, 152, 24, 156, 57, 40, 196, 157, 43, 132, 188, 82, 76, 228, 109, 55, 87, 99, 209, 79, 202, 171, 189, 13, 118, 46, 216, 197, 53, 164, 20, 128, 166, 26, 77, 205, 86, 25, 115, 88, 154, 63, 47, 235, 98, 117, 180, 170, 22, 81, 170, 192, 134, 116, 59, 3, 249, 29, 225, 172, 126, 239, 74, 224, 119, 187, 106, 149, 201, 91, 69, 7, 244}, +{11, 104, 28, 113, 30, 123, 222, 195, 229, 191, 69, 83, 245, 38, 209, 218, 251, 59, 189, 72, 121, 36, 162, 77, 11, 78, 95, 136, 125, 228, 86, 37, 211, 11, 203, 169, 38, 129, 57, 19, 233, 251, 255, 114, 249, 117, 195, 68, 18, 203, 120, 176, 101, 190, 91, 155, 138, 196, 33, 44, 183, 29, 99, 207, 32, 228, 115, 83, 206, 164, 114, 202, 246, 88, 84, 58, 41, 254, 90, 76, 252, 37, 5, 11, 247, 79, 189, 59, 39, 66, 74, 158, 201, 121, 172, 60, 84, 187, 118, 137, 26, 214, 111, 254, 170, 141, 81, 5, 150, 136, 76, 196, 198, 208, 217, 231, 64, 196, 251, 251, 192, 190, 51, 69, 141, 96, 162, 74}, +{158, 94, 86, 151, 78, 102, 227, 105, 131, 131, 81, 101, 177, 82, 88, 33, 251, 86, 23, 215, 22, 97, 39, 180, 247, 94, 67, 130, 232, 61, 82, 143, 214, 135, 125, 220, 205, 8, 137, 143, 133, 74, 240, 77, 157, 35, 163, 204, 183, 223, 44, 197, 141, 160, 245, 212, 3, 123, 9, 65, 220, 73, 159, 4, 113, 223, 89, 196, 47, 117, 182, 215, 10, 61, 255, 70, 122, 127, 45, 228, 42, 83, 133, 28, 170, 99, 135, 145, 115, 47, 251, 110, 161, 141, 167, 162, 66, 103, 161, 200, 59, 156, 17, 104, 55, 221, 150, 219, 200, 202, 225, 106, 201, 68, 45, 105, 143, 215, 142, 109, 244, 12, 158, 185, 115, 46, 99, 58}, +{163, 177, 4, 82, 247, 123, 40, 253, 250, 163, 176, 229, 43, 54, 187, 54, 251, 19, 194, 186, 132, 192, 3, 139, 198, 81, 55, 68, 108, 189, 8, 164, 47, 208, 15, 188, 55, 181, 131, 202, 111, 126, 234, 211, 232, 18, 40, 192, 105, 57, 108, 231, 52, 235, 116, 191, 183, 185, 240, 147, 188, 213, 21, 68, 140, 83, 71, 89, 144, 82, 155, 174, 118, 96, 40, 205, 213, 245, 149, 93, 149, 73, 64, 61, 169, 222, 29, 26, 43, 227, 5, 22, 249, 123, 205, 168, 152, 154, 128, 51, 5, 70, 126, 55, 42, 33, 254, 179, 218, 178, 51, 25, 15, 88, 86, 163, 68, 28, 221, 241, 84, 198, 204, 46, 231, 30, 143, 188}, +{65, 107, 203, 212, 134, 70, 9, 69, 251, 73, 80, 107, 187, 17, 82, 191, 188, 97, 192, 102, 95, 62, 75, 153, 156, 164, 213, 34, 156, 206, 67, 221, 140, 160, 11, 216, 9, 44, 231, 83, 195, 26, 119, 18, 95, 92, 221, 239, 90, 127, 144, 146, 139, 36, 225, 56, 212, 13, 164, 203, 194, 23, 127, 19, 147, 39, 217, 142, 141, 28, 193, 148, 253, 2, 86, 53, 131, 146, 246, 164, 187, 153, 36, 211, 70, 57, 249, 240, 186, 67, 254, 65, 11, 167, 176, 92, 35, 247, 186, 161, 139, 81, 25, 205, 136, 182, 242, 142, 75, 129, 158, 116, 121, 20, 72, 74, 94, 217, 34, 168, 118, 89, 105, 56, 94, 221, 150, 234}, +{48, 230, 242, 128, 219, 18, 110, 78, 112, 167, 249, 206, 204, 124, 151, 26, 2, 178, 106, 23, 14, 161, 28, 95, 112, 104, 90, 131, 248, 148, 62, 157, 248, 185, 254, 61, 166, 32, 14, 223, 88, 162, 38, 98, 29, 185, 161, 178, 240, 116, 7, 137, 78, 2, 116, 166, 126, 132, 140, 255, 148, 151, 228, 139, 114, 196, 218, 130, 68, 108, 55, 31, 109, 40, 186, 236, 66, 110, 56, 202, 190, 151, 207, 203, 245, 167, 253, 118, 249, 39, 160, 254, 170, 155, 63, 183, 210, 233, 55, 231, 179, 108, 120, 19, 3, 94, 68, 252, 148, 147, 208, 4, 227, 237, 74, 236, 192, 232, 197, 64, 205, 237, 190, 151, 126, 55, 57, 13}, +{63, 178, 81, 218, 17, 235, 206, 114, 170, 129, 19, 245, 199, 198, 110, 207, 201, 133, 113, 56, 86, 119, 15, 37, 142, 26, 147, 89, 32, 60, 195, 187, 234, 11, 134, 57, 108, 55, 135, 78, 232, 129, 49, 206, 39, 30, 95, 249, 192, 107, 211, 89, 229, 166, 203, 105, 73, 235, 37, 71, 35, 104, 9, 235, 16, 86, 114, 120, 104, 199, 18, 253, 45, 133, 184, 208, 179, 226, 168, 35, 187, 95, 230, 105, 126, 113, 240, 88, 201, 138, 186, 209, 5, 139, 42, 218, 72, 90, 106, 104, 69, 165, 36, 120, 204, 34, 202, 249, 132, 67, 124, 117, 91, 204, 251, 119, 91, 195, 135, 99, 33, 167, 238, 119, 105, 158, 172, 157}, +{179, 103, 18, 22, 250, 119, 52, 174, 169, 58, 60, 45, 140, 108, 122, 219, 103, 89, 1, 211, 193, 134, 3, 230, 157, 174, 9, 141, 63, 139, 217, 4, 84, 7, 26, 136, 217, 164, 30, 154, 172, 119, 74, 91, 69, 42, 111, 48, 87, 28, 31, 157, 216, 101, 81, 164, 78, 120, 44, 70, 196, 223, 34, 96, 115, 113, 65, 220, 38, 66, 198, 191, 168, 203, 66, 42, 70, 118, 110, 188, 156, 112, 186, 174, 81, 248, 15, 222, 35, 57, 45, 144, 243, 61, 66, 178, 173, 105, 151, 139, 223, 222, 164, 90, 165, 222, 134, 9, 9, 226, 99, 209, 226, 34, 140, 90, 92, 32, 195, 165, 28, 144, 176, 139, 48, 158, 24, 143}, +{42, 189, 168, 210, 117, 8, 36, 73, 3, 51, 21, 50, 10, 153, 195, 30, 93, 206, 148, 95, 154, 80, 113, 206, 221, 5, 31, 222, 202, 116, 123, 226, 4, 83, 116, 99, 113, 185, 38, 163, 216, 179, 164, 2, 239, 16, 182, 181, 220, 230, 218, 28, 124, 184, 170, 167, 17, 247, 190, 118, 32, 160, 136, 127, 228, 184, 210, 3, 129, 140, 251, 218, 227, 186, 15, 208, 227, 29, 189, 177, 42, 217, 47, 51, 145, 121, 150, 89, 116, 225, 183, 97, 228, 104, 15, 96, 18, 180, 194, 128, 234, 8, 183, 11, 1, 187, 173, 45, 61, 51, 225, 107, 91, 168, 239, 230, 40, 8, 168, 9, 45, 52, 125, 56, 248, 168, 253, 34}, +{198, 159, 250, 42, 243, 233, 252, 101, 88, 57, 160, 179, 75, 243, 165, 100, 211, 110, 221, 168, 232, 231, 33, 70, 199, 126, 72, 28, 223, 127, 175, 126, 197, 185, 196, 248, 62, 145, 205, 235, 90, 94, 194, 107, 130, 64, 23, 156, 40, 33, 121, 36, 186, 246, 93, 161, 81, 35, 56, 224, 152, 112, 29, 169, 16, 204, 180, 44, 152, 58, 140, 118, 102, 20, 34, 43, 142, 253, 203, 52, 71, 238, 22, 232, 7, 132, 6, 110, 117, 49, 231, 15, 40, 138, 145, 243, 186, 143, 207, 211, 143, 234, 35, 35, 36, 91, 199, 132, 7, 68, 29, 172, 236, 136, 241, 17, 147, 241, 178, 28, 38, 186, 39, 45, 60, 129, 56, 229}, +{140, 245, 227, 114, 218, 221, 11, 35, 196, 122, 25, 120, 15, 242, 159, 185, 209, 166, 3, 162, 106, 88, 68, 136, 235, 187, 38, 28, 221, 32, 184, 31, 141, 6, 226, 95, 84, 171, 252, 222, 66, 0, 50, 240, 151, 167, 63, 126, 220, 212, 234, 77, 133, 188, 198, 138, 58, 57, 186, 110, 112, 244, 74, 203, 44, 142, 90, 147, 245, 90, 202, 163, 214, 241, 252, 106, 56, 14, 123, 230, 241, 211, 214, 187, 23, 74, 152, 236, 197, 169, 28, 53, 119, 15, 7, 5, 159, 252, 22, 16, 131, 112, 157, 92, 125, 48, 215, 171, 238, 195, 193, 21, 166, 22, 195, 164, 66, 34, 237, 69, 100, 222, 202, 213, 208, 166, 43, 33}, +{37, 44, 17, 175, 109, 104, 68, 241, 49, 162, 128, 211, 56, 70, 166, 71, 0, 20, 97, 74, 139, 134, 142, 38, 248, 212, 138, 177, 22, 99, 182, 67, 10, 4, 130, 200, 30, 34, 37, 251, 68, 3, 72, 83, 21, 30, 213, 87, 146, 187, 244, 216, 195, 93, 238, 219, 134, 135, 134, 122, 125, 140, 70, 140, 156, 6, 93, 41, 20, 224, 8, 14, 218, 37, 28, 73, 130, 51, 224, 9, 72, 16, 100, 170, 68, 246, 144, 27, 168, 133, 28, 157, 17, 135, 25, 180, 192, 243, 120, 29, 203, 40, 39, 228, 213, 139, 9, 77, 233, 159, 93, 92, 37, 185, 21, 115, 189, 107, 64, 95, 136, 238, 200, 194, 89, 104, 30, 26}, +{162, 187, 158, 23, 114, 7, 82, 237, 175, 97, 107, 103, 227, 74, 139, 126, 253, 216, 81, 81, 228, 239, 67, 199, 239, 165, 87, 165, 52, 69, 201, 91, 108, 9, 35, 250, 141, 130, 28, 94, 30, 189, 151, 10, 163, 33, 138, 18, 182, 62, 96, 114, 210, 227, 240, 193, 19, 21, 74, 240, 93, 241, 231, 128, 38, 139, 216, 220, 220, 150, 224, 14, 130, 58, 101, 25, 140, 61, 182, 20, 18, 54, 28, 50, 55, 159, 179, 124, 235, 46, 180, 173, 189, 74, 81, 24, 52, 254, 164, 90, 117, 198, 77, 57, 100, 154, 93, 189, 241, 133, 100, 94, 194, 78, 101, 225, 54, 31, 156, 187, 43, 156, 144, 124, 57, 35, 68, 208}, +{122, 66, 52, 198, 64, 181, 186, 232, 112, 93, 98, 15, 104, 1, 242, 85, 174, 57, 81, 142, 197, 231, 32, 12, 42, 220, 6, 61, 65, 203, 186, 185, 229, 162, 114, 189, 174, 186, 42, 156, 24, 148, 161, 43, 40, 81, 100, 91, 54, 199, 105, 91, 36, 167, 80, 175, 122, 146, 124, 37, 119, 107, 245, 93, 119, 115, 69, 229, 104, 137, 253, 95, 12, 216, 69, 188, 154, 142, 64, 31, 102, 146, 115, 181, 77, 170, 111, 183, 169, 199, 172, 248, 232, 75, 78, 10, 254, 171, 144, 200, 235, 2, 88, 148, 36, 84, 86, 102, 20, 224, 162, 186, 44, 253, 125, 72, 199, 244, 220, 130, 48, 157, 60, 5, 235, 78, 207, 224}, +{111, 140, 167, 207, 113, 64, 176, 54, 235, 20, 84, 105, 205, 94, 108, 241, 223, 147, 199, 87, 99, 71, 207, 156, 179, 253, 75, 134, 136, 251, 67, 61, 171, 8, 79, 101, 157, 186, 240, 157, 233, 141, 207, 24, 37, 128, 59, 1, 103, 91, 253, 86, 140, 221, 77, 99, 253, 192, 50, 161, 225, 150, 143, 151, 216, 49, 191, 212, 170, 236, 20, 197, 236, 205, 10, 157, 106, 33, 20, 3, 18, 215, 146, 47, 28, 91, 149, 147, 136, 41, 116, 59, 100, 0, 22, 194, 103, 34, 195, 25, 179, 187, 208, 152, 106, 216, 64, 75, 80, 18, 91, 128, 207, 188, 35, 237, 96, 74, 152, 35, 238, 206, 179, 87, 22, 135, 7, 222}, +{174, 175, 213, 188, 230, 191, 118, 253, 124, 175, 223, 146, 21, 8, 244, 199, 44, 162, 92, 35, 108, 41, 174, 93, 161, 174, 106, 46, 53, 35, 181, 252, 237, 157, 32, 115, 29, 209, 160, 54, 210, 115, 27, 45, 77, 222, 41, 155, 184, 247, 156, 78, 204, 91, 181, 107, 90, 5, 29, 41, 253, 167, 92, 145, 234, 144, 75, 136, 133, 135, 69, 235, 72, 142, 170, 141, 231, 78, 248, 213, 99, 39, 251, 5, 49, 183, 169, 96, 105, 204, 128, 2, 143, 1, 22, 100, 152, 159, 68, 98, 10, 83, 119, 85, 210, 89, 34, 30, 25, 163, 110, 137, 10, 2, 234, 183, 39, 180, 173, 126, 244, 147, 63, 28, 188, 247, 40, 55}, +{45, 49, 162, 246, 217, 94, 229, 72, 215, 16, 136, 243, 203, 74, 204, 38, 175, 215, 190, 78, 200, 111, 127, 137, 123, 74, 93, 91, 131, 49, 74, 212, 197, 130, 71, 146, 41, 182, 226, 31, 16, 114, 197, 19, 179, 208, 127, 252, 132, 60, 185, 224, 237, 109, 161, 155, 132, 229, 18, 16, 69, 68, 139, 202, 222, 98, 173, 73, 126, 31, 163, 181, 219, 111, 121, 105, 187, 75, 223, 79, 130, 238, 120, 160, 162, 116, 212, 173, 95, 155, 204, 90, 182, 140, 220, 57, 155, 97, 88, 111, 240, 79, 38, 34, 97, 192, 25, 4, 20, 42, 184, 189, 207, 105, 213, 11, 75, 142, 198, 205, 50, 41, 253, 68, 43, 206, 63, 85}, +{143, 26, 157, 119, 132, 89, 38, 84, 93, 245, 64, 204, 240, 243, 13, 239, 229, 245, 56, 71, 54, 233, 116, 134, 10, 243, 99, 221, 42, 7, 116, 125, 235, 187, 186, 167, 214, 110, 23, 52, 114, 192, 144, 56, 172, 43, 91, 191, 108, 221, 7, 5, 141, 196, 186, 183, 228, 66, 112, 43, 216, 151, 192, 84, 37, 53, 44, 54, 251, 42, 229, 219, 194, 126, 248, 77, 196, 187, 17, 236, 162, 217, 30, 2, 228, 33, 36, 13, 120, 55, 91, 206, 198, 185, 177, 210, 33, 154, 123, 170, 106, 134, 37, 211, 158, 85, 152, 32, 86, 147, 168, 144, 223, 239, 111, 137, 136, 72, 129, 210, 220, 175, 250, 133, 8, 74, 114, 118}, +{108, 30, 31, 14, 119, 207, 197, 128, 121, 140, 114, 97, 76, 25, 197, 158, 246, 121, 161, 24, 230, 129, 108, 168, 114, 52, 19, 148, 237, 85, 25, 3, 88, 123, 254, 0, 247, 147, 244, 73, 1, 198, 43, 241, 155, 124, 96, 225, 149, 202, 241, 38, 1, 218, 247, 176, 29, 182, 196, 96, 22, 94, 98, 161, 76, 215, 254, 207, 158, 162, 28, 121, 125, 132, 67, 144, 162, 68, 196, 209, 128, 154, 163, 72, 13, 223, 196, 208, 96, 79, 1, 106, 104, 84, 206, 182, 173, 8, 106, 29, 161, 225, 55, 161, 229, 46, 246, 17, 216, 38, 239, 81, 14, 61, 170, 65, 243, 243, 171, 214, 190, 212, 59, 70, 166, 50, 7, 47}, +{207, 57, 181, 231, 173, 112, 77, 57, 104, 60, 73, 136, 53, 207, 53, 166, 230, 29, 83, 239, 35, 17, 201, 213, 251, 93, 145, 131, 195, 134, 24, 177, 21, 143, 59, 156, 73, 109, 19, 224, 88, 39, 220, 166, 251, 163, 190, 195, 7, 166, 220, 185, 192, 136, 149, 205, 172, 242, 185, 138, 176, 37, 121, 75, 83, 28, 97, 55, 38, 193, 10, 167, 143, 45, 8, 193, 99, 56, 199, 188, 198, 50, 111, 188, 134, 232, 172, 46, 135, 109, 11, 147, 205, 208, 237, 251, 186, 95, 133, 83, 196, 213, 77, 192, 172, 153, 219, 229, 201, 121, 207, 156, 218, 82, 248, 190, 136, 105, 129, 73, 233, 240, 246, 10, 158, 18, 73, 37}, +{83, 179, 41, 32, 162, 109, 36, 13, 219, 124, 94, 103, 252, 232, 79, 148, 204, 39, 46, 209, 233, 168, 29, 253, 241, 12, 50, 119, 86, 0, 134, 99, 76, 7, 227, 6, 54, 193, 143, 180, 185, 234, 111, 71, 89, 65, 95, 7, 131, 218, 157, 188, 32, 111, 91, 17, 190, 160, 252, 220, 133, 2, 123, 156, 244, 104, 217, 24, 5, 190, 145, 187, 170, 69, 185, 128, 32, 76, 134, 228, 44, 184, 144, 160, 7, 142, 24, 140, 240, 242, 91, 51, 107, 111, 77, 46, 221, 79, 87, 59, 63, 77, 227, 145, 70, 120, 129, 62, 246, 63, 16, 203, 170, 13, 69, 160, 101, 197, 127, 88, 5, 217, 214, 162, 147, 201, 51, 129}, +{45, 54, 102, 178, 108, 113, 32, 253, 39, 160, 151, 58, 158, 121, 41, 212, 4, 245, 224, 248, 8, 11, 6, 100, 66, 43, 251, 18, 93, 35, 70, 9, 231, 205, 117, 19, 249, 214, 181, 241, 1, 125, 31, 39, 39, 23, 29, 7, 67, 19, 150, 29, 11, 226, 66, 1, 11, 86, 129, 5, 228, 255, 219, 66, 19, 201, 217, 168, 169, 180, 2, 78, 92, 58, 110, 114, 147, 150, 99, 230, 21, 203, 92, 48, 115, 235, 65, 95, 57, 202, 167, 27, 107, 148, 84, 240, 55, 25, 160, 93, 118, 195, 84, 203, 221, 87, 228, 238, 172, 232, 182, 51, 160, 147, 163, 74, 206, 25, 18, 61, 181, 1, 18, 145, 4, 76, 214, 171}, +{190, 173, 103, 130, 8, 159, 55, 127, 148, 247, 237, 51, 28, 73, 56, 171, 101, 62, 239, 69, 167, 219, 97, 124, 90, 131, 68, 24, 251, 11, 143, 111, 228, 47, 32, 202, 52, 222, 22, 89, 180, 102, 150, 223, 32, 9, 29, 75, 155, 122, 213, 92, 179, 103, 66, 9, 119, 39, 49, 46, 133, 216, 195, 65, 151, 207, 187, 153, 88, 93, 210, 11, 158, 69, 194, 138, 4, 13, 172, 127, 223, 98, 3, 49, 208, 174, 36, 33, 49, 166, 141, 50, 255, 9, 2, 136, 248, 128, 65, 219, 73, 56, 164, 13, 65, 117, 119, 35, 101, 165, 202, 28, 25, 219, 68, 142, 90, 56, 92, 119, 226, 113, 147, 77, 128, 141, 97, 211}, +{69, 69, 29, 127, 97, 212, 157, 142, 106, 78, 10, 64, 13, 136, 174, 133, 15, 215, 220, 147, 50, 87, 215, 249, 232, 85, 244, 33, 236, 206, 97, 124, 175, 114, 212, 74, 253, 50, 239, 159, 153, 202, 107, 226, 111, 26, 128, 4, 203, 4, 34, 114, 234, 235, 203, 198, 172, 91, 22, 148, 125, 194, 117, 39, 83, 209, 36, 96, 160, 249, 52, 15, 171, 138, 166, 70, 65, 173, 22, 24, 111, 137, 16, 102, 178, 56, 230, 44, 140, 73, 76, 144, 185, 240, 101, 72, 46, 254, 203, 120, 96, 85, 231, 88, 31, 38, 33, 206, 180, 253, 58, 168, 121, 58, 129, 171, 50, 216, 7, 201, 70, 67, 10, 158, 218, 25, 200, 246}, +{176, 237, 65, 200, 47, 209, 124, 194, 83, 145, 239, 233, 74, 245, 58, 58, 22, 130, 30, 30, 36, 139, 197, 165, 186, 20, 1, 127, 52, 213, 125, 222, 131, 179, 191, 198, 246, 140, 196, 184, 169, 101, 205, 138, 52, 23, 116, 253, 79, 125, 109, 162, 196, 161, 103, 134, 89, 75, 187, 149, 148, 106, 181, 131, 94, 207, 249, 205, 168, 162, 138, 214, 232, 154, 164, 39, 54, 11, 185, 79, 16, 200, 56, 227, 96, 174, 157, 154, 72, 173, 171, 126, 174, 58, 62, 98, 118, 249, 89, 58, 98, 54, 162, 150, 120, 127, 128, 54, 159, 165, 9, 73, 206, 102, 69, 162, 226, 81, 36, 213, 187, 81, 53, 214, 203, 42, 250, 49}, +{43, 103, 250, 18, 11, 53, 208, 131, 204, 86, 81, 168, 2, 8, 238, 4, 2, 143, 223, 184, 141, 10, 105, 116, 104, 23, 210, 233, 236, 9, 234, 246, 148, 46, 97, 27, 159, 166, 17, 58, 166, 160, 128, 91, 142, 101, 43, 170, 48, 186, 248, 37, 42, 38, 235, 220, 216, 185, 41, 108, 133, 108, 32, 243, 89, 249, 12, 72, 23, 238, 228, 42, 34, 207, 41, 11, 195, 187, 115, 87, 139, 217, 104, 78, 107, 46, 64, 165, 187, 39, 61, 107, 214, 211, 100, 178, 49, 213, 69, 227, 160, 50, 133, 128, 193, 32, 53, 179, 227, 101, 186, 174, 32, 238, 55, 62, 72, 219, 232, 163, 133, 85, 87, 223, 38, 209, 161, 226}, +{180, 172, 158, 209, 19, 188, 55, 248, 10, 147, 252, 253, 42, 16, 7, 254, 33, 122, 51, 158, 90, 159, 118, 158, 210, 12, 189, 132, 0, 211, 148, 196, 159, 104, 23, 153, 101, 140, 51, 76, 18, 106, 164, 144, 17, 37, 60, 96, 86, 215, 121, 104, 173, 255, 42, 69, 113, 126, 132, 240, 12, 151, 48, 171, 245, 220, 178, 231, 105, 251, 10, 27, 219, 77, 59, 120, 176, 66, 221, 53, 36, 190, 83, 33, 73, 117, 92, 28, 243, 248, 169, 34, 126, 42, 43, 231, 80, 3, 227, 47, 149, 83, 245, 173, 82, 145, 155, 166, 250, 30, 182, 222, 246, 166, 173, 181, 158, 101, 129, 49, 147, 208, 232, 33, 216, 211, 221, 138}, +{168, 135, 144, 166, 30, 204, 240, 91, 129, 170, 8, 29, 249, 29, 18, 195, 132, 247, 199, 166, 135, 207, 100, 5, 151, 102, 118, 109, 107, 242, 41, 107, 240, 94, 196, 122, 254, 42, 201, 237, 55, 53, 115, 142, 179, 48, 225, 163, 49, 3, 89, 75, 203, 180, 101, 214, 240, 60, 226, 162, 153, 246, 129, 205, 117, 28, 137, 153, 37, 219, 248, 136, 231, 177, 69, 146, 111, 87, 91, 58, 90, 211, 80, 16, 224, 24, 191, 216, 71, 245, 31, 190, 58, 219, 221, 219, 84, 232, 150, 194, 206, 11, 21, 100, 48, 225, 140, 52, 217, 204, 100, 59, 7, 166, 27, 52, 207, 45, 165, 148, 122, 17, 32, 255, 241, 243, 237, 196}, +{97, 15, 221, 243, 19, 71, 43, 195, 104, 132, 47, 120, 71, 23, 53, 210, 234, 79, 153, 188, 189, 187, 1, 179, 220, 245, 229, 30, 5, 71, 90, 156, 163, 94, 146, 57, 157, 204, 224, 95, 152, 248, 43, 71, 65, 152, 161, 28, 227, 99, 175, 20, 127, 199, 109, 249, 154, 249, 177, 250, 181, 51, 10, 151, 19, 50, 181, 161, 195, 126, 127, 158, 253, 37, 150, 62, 151, 145, 31, 126, 244, 37, 107, 203, 94, 191, 76, 57, 58, 21, 82, 54, 177, 55, 163, 235, 101, 220, 134, 153, 132, 247, 28, 2, 150, 234, 36, 11, 190, 146, 44, 173, 0, 95, 130, 32, 83, 9, 182, 65, 233, 93, 33, 134, 101, 27, 187, 164}, +{72, 247, 62, 56, 120, 13, 24, 144, 120, 218, 234, 253, 56, 22, 123, 67, 212, 183, 148, 215, 93, 51, 177, 192, 164, 97, 213, 216, 118, 127, 184, 168, 80, 42, 166, 69, 39, 28, 180, 233, 115, 106, 131, 154, 135, 55, 92, 25, 172, 217, 156, 36, 65, 190, 171, 50, 250, 63, 44, 62, 52, 18, 2, 106, 28, 228, 29, 67, 78, 36, 72, 208, 29, 173, 219, 244, 124, 28, 1, 229, 119, 29, 156, 108, 31, 65, 66, 58, 150, 128, 161, 155, 142, 251, 22, 10, 183, 11, 219, 115, 129, 240, 201, 96, 26, 136, 246, 82, 213, 183, 222, 78, 115, 60, 209, 129, 47, 229, 219, 229, 252, 209, 250, 236, 164, 10, 128, 123}, +{104, 169, 247, 120, 192, 33, 110, 186, 7, 157, 112, 63, 65, 187, 104, 217, 217, 26, 231, 144, 88, 140, 99, 226, 87, 57, 109, 171, 184, 207, 129, 230, 39, 41, 43, 115, 149, 35, 137, 57, 219, 127, 44, 92, 34, 30, 212, 102, 18, 171, 20, 236, 171, 157, 123, 11, 45, 52, 2, 33, 70, 61, 33, 251, 50, 124, 8, 211, 34, 145, 144, 203, 83, 229, 240, 133, 41, 43, 100, 9, 12, 12, 159, 6, 62, 43, 142, 238, 57, 130, 28, 174, 6, 8, 228, 95, 137, 23, 247, 57, 191, 91, 135, 6, 33, 94, 85, 214, 226, 61, 202, 26, 75, 38, 56, 197, 81, 4, 70, 64, 193, 121, 71, 10, 196, 209, 202, 84}, +{104, 192, 62, 118, 103, 96, 169, 203, 217, 143, 132, 178, 5, 141, 10, 212, 109, 249, 130, 138, 43, 13, 191, 122, 94, 52, 216, 2, 20, 12, 226, 135, 97, 96, 216, 103, 2, 232, 132, 52, 185, 202, 71, 221, 74, 31, 246, 40, 93, 75, 46, 174, 9, 111, 6, 149, 175, 216, 7, 8, 28, 246, 118, 159, 177, 166, 205, 98, 127, 246, 115, 177, 150, 250, 110, 3, 162, 20, 84, 240, 198, 245, 68, 144, 184, 0, 233, 67, 231, 156, 244, 7, 208, 198, 145, 215, 189, 123, 170, 173, 187, 213, 135, 43, 255, 190, 67, 30, 173, 24, 54, 106, 104, 181, 61, 16, 34, 194, 155, 166, 168, 203, 184, 122, 71, 167, 200, 194}, +{205, 21, 224, 74, 254, 53, 180, 237, 190, 23, 66, 49, 132, 130, 126, 62, 161, 12, 65, 102, 246, 78, 209, 157, 9, 30, 183, 114, 89, 29, 224, 251, 184, 134, 42, 104, 148, 102, 60, 135, 87, 37, 115, 52, 210, 1, 86, 137, 118, 233, 78, 22, 95, 27, 53, 237, 8, 251, 102, 168, 239, 175, 178, 184, 109, 209, 72, 80, 32, 29, 9, 230, 132, 166, 46, 100, 190, 112, 239, 79, 173, 44, 181, 112, 207, 124, 39, 247, 78, 218, 180, 123, 248, 203, 236, 6, 110, 25, 7, 234, 246, 47, 10, 107, 24, 184, 149, 249, 211, 198, 118, 107, 104, 170, 94, 45, 96, 220, 29, 97, 255, 237, 231, 47, 67, 68, 85, 210}, +{85, 33, 181, 113, 111, 104, 102, 177, 145, 192, 158, 28, 213, 99, 197, 58, 55, 137, 197, 65, 200, 22, 68, 146, 244, 168, 2, 191, 38, 160, 106, 23, 99, 186, 72, 111, 119, 133, 5, 251, 101, 75, 78, 236, 147, 234, 137, 107, 71, 121, 135, 253, 94, 45, 182, 56, 134, 137, 93, 144, 165, 251, 35, 8, 81, 8, 77, 245, 168, 6, 9, 144, 75, 47, 149, 129, 100, 240, 195, 177, 62, 82, 235, 178, 231, 66, 79, 213, 213, 225, 3, 115, 186, 3, 122, 239, 97, 153, 200, 127, 81, 49, 82, 110, 77, 109, 227, 49, 92, 81, 226, 57, 0, 124, 118, 35, 114, 145, 108, 3, 163, 137, 116, 87, 90, 221, 50, 68}, +{89, 217, 16, 76, 171, 111, 150, 87, 226, 151, 86, 51, 110, 158, 61, 131, 243, 194, 33, 81, 232, 126, 172, 96, 7, 68, 7, 177, 11, 217, 7, 1, 20, 46, 44, 93, 183, 207, 146, 20, 212, 119, 111, 243, 47, 108, 125, 110, 219, 3, 19, 151, 86, 33, 103, 2, 176, 132, 57, 192, 254, 160, 254, 70, 80, 76, 106, 210, 57, 0, 233, 88, 35, 40, 100, 183, 135, 230, 146, 201, 11, 192, 138, 13, 169, 139, 102, 21, 189, 19, 135, 50, 39, 91, 114, 28, 158, 24, 84, 82, 207, 237, 75, 7, 19, 122, 238, 214, 181, 200, 31, 90, 3, 7, 242, 143, 127, 131, 226, 248, 130, 201, 0, 203, 19, 54, 125, 159}, +{112, 70, 191, 113, 147, 85, 176, 243, 50, 93, 152, 131, 145, 197, 61, 188, 231, 219, 246, 64, 88, 141, 245, 151, 147, 253, 171, 143, 154, 144, 195, 172, 48, 89, 158, 110, 26, 1, 216, 247, 215, 85, 253, 24, 154, 161, 23, 132, 111, 38, 141, 236, 213, 161, 220, 129, 74, 41, 111, 181, 180, 75, 80, 142, 48, 187, 89, 20, 4, 109, 214, 121, 192, 24, 17, 70, 209, 43, 150, 76, 228, 169, 225, 202, 43, 240, 189, 132, 179, 185, 14, 4, 92, 142, 27, 137, 157, 229, 142, 241, 59, 11, 45, 140, 166, 158, 135, 43, 65, 244, 238, 55, 233, 21, 223, 216, 173, 100, 142, 150, 202, 81, 138, 34, 171, 110, 134, 230}, +{87, 71, 236, 158, 152, 26, 89, 193, 94, 192, 162, 83, 3, 205, 114, 160, 17, 233, 213, 39, 241, 86, 139, 134, 108, 241, 156, 209, 159, 199, 152, 149, 151, 164, 31, 38, 50, 73, 153, 26, 214, 206, 51, 151, 232, 141, 38, 87, 242, 166, 172, 7, 102, 199, 185, 90, 50, 62, 102, 189, 69, 198, 50, 121, 221, 160, 34, 167, 81, 133, 173, 209, 54, 61, 20, 250, 213, 200, 160, 50, 9, 116, 232, 152, 9, 91, 74, 53, 98, 70, 151, 31, 172, 60, 78, 15, 54, 25, 202, 18, 224, 64, 100, 172, 23, 245, 139, 148, 33, 35, 70, 241, 182, 85, 193, 70, 172, 79, 134, 134, 24, 121, 246, 23, 63, 86, 191, 134}, +{80, 140, 249, 186, 7, 190, 240, 233, 156, 17, 219, 213, 231, 38, 16, 76, 4, 41, 124, 168, 14, 51, 167, 32, 42, 30, 251, 28, 209, 66, 60, 104, 3, 177, 192, 193, 134, 27, 239, 171, 171, 47, 123, 133, 252, 155, 212, 99, 242, 10, 119, 23, 224, 24, 31, 95, 175, 200, 149, 22, 5, 243, 166, 1, 5, 231, 51, 4, 180, 39, 234, 9, 115, 144, 177, 209, 159, 122, 103, 199, 88, 189, 211, 74, 63, 232, 54, 59, 170, 164, 109, 32, 162, 48, 225, 128, 87, 10, 141, 230, 119, 167, 12, 101, 108, 234, 57, 163, 105, 93, 198, 72, 87, 223, 138, 91, 212, 61, 113, 177, 99, 86, 127, 242, 24, 240, 144, 103}, +{120, 20, 125, 180, 49, 72, 41, 36, 58, 92, 219, 181, 14, 80, 85, 205, 30, 70, 123, 213, 30, 112, 142, 178, 170, 181, 196, 169, 29, 76, 155, 123, 136, 102, 231, 148, 6, 123, 68, 43, 38, 253, 162, 4, 95, 18, 28, 90, 92, 140, 117, 66, 22, 24, 255, 216, 247, 177, 78, 199, 92, 67, 54, 81, 51, 47, 214, 112, 28, 180, 219, 164, 229, 150, 229, 50, 210, 216, 52, 32, 185, 168, 164, 93, 182, 194, 159, 78, 128, 166, 216, 159, 66, 36, 238, 82, 65, 124, 241, 151, 58, 129, 70, 224, 139, 144, 130, 156, 5, 13, 38, 104, 188, 169, 207, 109, 210, 75, 37, 180, 239, 201, 223, 233, 182, 228, 76, 233}, +{165, 56, 169, 3, 153, 25, 110, 116, 178, 82, 60, 53, 27, 75, 11, 33, 21, 58, 190, 141, 180, 207, 127, 188, 15, 249, 233, 46, 53, 34, 230, 32, 194, 62, 111, 40, 241, 66, 233, 82, 15, 108, 66, 153, 11, 166, 85, 131, 140, 196, 210, 54, 244, 250, 101, 109, 25, 170, 253, 28, 200, 210, 39, 102, 202, 89, 196, 180, 169, 62, 22, 15, 38, 72, 229, 96, 88, 96, 141, 75, 120, 227, 229, 202, 94, 117, 255, 76, 230, 22, 210, 221, 185, 36, 131, 17, 3, 240, 137, 16, 115, 12, 85, 47, 239, 249, 30, 206, 68, 22, 159, 35, 151, 217, 210, 150, 6, 111, 223, 28, 164, 109, 82, 61, 35, 73, 229, 181}, +{91, 175, 188, 150, 194, 118, 205, 41, 105, 178, 24, 107, 101, 101, 213, 53, 23, 27, 84, 145, 19, 199, 155, 51, 136, 41, 44, 93, 5, 92, 234, 200, 58, 14, 101, 76, 247, 107, 120, 10, 134, 98, 107, 1, 112, 241, 116, 143, 219, 214, 116, 78, 120, 0, 45, 84, 127, 3, 192, 189, 178, 113, 173, 85, 166, 92, 232, 72, 15, 144, 13, 51, 0, 228, 48, 130, 23, 76, 217, 209, 109, 247, 156, 62, 34, 114, 45, 208, 85, 190, 165, 236, 224, 5, 88, 9, 224, 75, 201, 167, 93, 224, 192, 46, 201, 62, 129, 210, 90, 251, 166, 50, 173, 109, 179, 212, 65, 99, 96, 245, 38, 14, 44, 248, 174, 37, 255, 39}, +{205, 149, 163, 29, 24, 182, 86, 190, 234, 85, 224, 67, 129, 11, 4, 164, 29, 82, 9, 145, 233, 195, 59, 33, 182, 38, 145, 120, 124, 118, 126, 7, 223, 146, 100, 133, 16, 140, 194, 49, 105, 230, 182, 59, 93, 71, 94, 100, 235, 21, 245, 155, 104, 240, 84, 42, 15, 23, 204, 150, 236, 131, 21, 53, 7, 2, 43, 184, 146, 88, 172, 108, 227, 55, 4, 59, 220, 15, 145, 95, 19, 253, 73, 197, 98, 198, 62, 92, 116, 104, 20, 194, 150, 166, 107, 46, 145, 147, 98, 145, 216, 182, 31, 127, 73, 101, 114, 216, 136, 122, 155, 50, 167, 164, 221, 174, 18, 244, 100, 63, 30, 69, 199, 65, 146, 19, 72, 174}, +{199, 131, 204, 241, 55, 67, 115, 254, 226, 218, 110, 94, 170, 14, 227, 228, 250, 118, 211, 126, 105, 145, 132, 171, 21, 22, 177, 116, 74, 52, 38, 150, 126, 255, 31, 190, 65, 189, 152, 31, 177, 90, 226, 7, 105, 41, 45, 218, 145, 24, 103, 198, 46, 110, 77, 122, 250, 212, 28, 116, 196, 82, 213, 53, 21, 207, 249, 94, 110, 27, 165, 173, 35, 162, 215, 116, 117, 98, 62, 203, 37, 24, 17, 110, 139, 103, 124, 208, 90, 77, 86, 83, 54, 14, 93, 192, 225, 222, 222, 180, 249, 234, 190, 23, 35, 20, 21, 194, 155, 58, 212, 234, 144, 242, 237, 18, 89, 161, 136, 190, 85, 96, 178, 22, 29, 152, 144, 17}, +{195, 183, 226, 177, 1, 175, 193, 245, 152, 229, 152, 191, 120, 71, 40, 221, 57, 66, 217, 224, 31, 25, 140, 52, 225, 38, 66, 31, 37, 165, 64, 71, 224, 6, 49, 23, 96, 97, 207, 206, 198, 241, 190, 41, 183, 157, 32, 188, 147, 32, 55, 131, 233, 226, 0, 152, 26, 245, 163, 29, 226, 100, 118, 24, 85, 136, 219, 198, 240, 75, 87, 7, 179, 138, 238, 65, 223, 77, 208, 217, 84, 211, 167, 96, 68, 160, 204, 249, 183, 91, 237, 225, 126, 118, 127, 134, 255, 133, 67, 50, 199, 89, 89, 99, 94, 117, 8, 85, 202, 240, 208, 108, 184, 99, 151, 130, 163, 128, 43, 148, 16, 183, 59, 63, 198, 225, 100, 153}, +{168, 38, 122, 37, 244, 119, 177, 216, 3, 82, 196, 73, 141, 172, 103, 93, 20, 251, 82, 51, 18, 78, 71, 70, 137, 169, 42, 79, 232, 24, 225, 20, 246, 152, 246, 4, 56, 231, 202, 168, 144, 150, 26, 250, 35, 189, 222, 254, 38, 108, 246, 121, 159, 38, 239, 253, 51, 110, 147, 189, 47, 204, 238, 151, 50, 31, 195, 92, 83, 25, 28, 4, 62, 247, 69, 40, 55, 26, 49, 148, 49, 74, 9, 127, 121, 206, 163, 42, 45, 152, 160, 183, 196, 244, 174, 248, 104, 72, 131, 108, 228, 11, 34, 71, 43, 161, 182, 129, 125, 167, 193, 217, 94, 134, 166, 64, 31, 155, 39, 138, 169, 164, 90, 36, 139, 227, 48, 223}, +{171, 178, 210, 71, 241, 56, 165, 198, 227, 156, 69, 110, 139, 98, 70, 201, 84, 87, 141, 222, 13, 135, 64, 163, 237, 15, 77, 155, 68, 164, 156, 184, 0, 166, 243, 198, 227, 52, 177, 156, 232, 249, 246, 114, 142, 213, 198, 113, 178, 190, 250, 43, 75, 156, 129, 198, 72, 252, 140, 248, 15, 41, 150, 149, 204, 190, 192, 162, 159, 41, 36, 28, 243, 35, 232, 28, 93, 79, 224, 3, 187, 68, 221, 249, 213, 202, 62, 123, 164, 177, 89, 166, 23, 121, 184, 68, 245, 93, 174, 148, 229, 249, 139, 201, 108, 179, 211, 31, 10, 80, 64, 61, 88, 208, 21, 69, 170, 202, 163, 58, 198, 201, 227, 144, 184, 128, 208, 106}, +{185, 252, 242, 127, 75, 45, 66, 86, 224, 169, 140, 107, 255, 178, 142, 230, 171, 30, 165, 169, 50, 52, 123, 95, 25, 5, 43, 61, 139, 79, 111, 60, 164, 119, 115, 245, 15, 118, 124, 34, 15, 7, 54, 81, 172, 4, 121, 41, 206, 29, 181, 198, 161, 252, 93, 18, 13, 119, 132, 81, 27, 11, 137, 129, 151, 191, 248, 158, 175, 183, 8, 51, 6, 252, 66, 138, 98, 206, 56, 103, 136, 240, 235, 233, 105, 121, 36, 131, 52, 112, 153, 133, 155, 104, 251, 222, 224, 244, 114, 234, 46, 247, 240, 149, 245, 26, 192, 122, 202, 41, 167, 218, 107, 164, 206, 109, 145, 37, 174, 11, 241, 58, 118, 75, 193, 32, 228, 150}, +{118, 124, 199, 172, 24, 204, 109, 197, 129, 153, 52, 7, 250, 201, 92, 89, 118, 217, 98, 254, 121, 29, 147, 232, 48, 98, 102, 46, 182, 236, 77, 151, 120, 223, 144, 145, 9, 69, 153, 174, 3, 47, 129, 84, 176, 149, 135, 70, 22, 119, 74, 35, 247, 145, 247, 243, 108, 111, 36, 130, 153, 61, 47, 35, 31, 149, 225, 178, 4, 127, 158, 113, 208, 34, 89, 151, 111, 148, 252, 126, 64, 128, 173, 86, 57, 73, 44, 85, 211, 50, 105, 21, 216, 167, 21, 165, 117, 103, 142, 38, 44, 41, 14, 136, 169, 253, 17, 233, 10, 64, 176, 217, 55, 42, 138, 188, 80, 117, 204, 246, 21, 251, 23, 21, 116, 72, 85, 121}, +{116, 203, 70, 218, 54, 142, 135, 148, 220, 106, 210, 165, 13, 129, 123, 8, 68, 193, 112, 88, 89, 114, 251, 169, 94, 85, 139, 109, 176, 207, 136, 251, 43, 247, 88, 188, 252, 137, 122, 75, 29, 186, 24, 78, 9, 113, 168, 126, 183, 175, 35, 219, 158, 87, 85, 146, 248, 206, 190, 150, 136, 170, 197, 224, 79, 226, 196, 199, 139, 95, 157, 70, 224, 98, 165, 193, 11, 148, 123, 250, 72, 6, 86, 213, 50, 251, 224, 66, 33, 162, 231, 127, 150, 113, 72, 113, 0, 157, 198, 171, 21, 87, 25, 234, 102, 111, 11, 55, 89, 143, 40, 9, 43, 111, 240, 219, 15, 120, 47, 44, 174, 66, 166, 230, 97, 102, 185, 38}, +{157, 225, 142, 187, 188, 53, 74, 95, 165, 202, 190, 52, 148, 136, 122, 83, 251, 128, 192, 182, 203, 68, 142, 142, 207, 238, 218, 46, 61, 45, 213, 107, 5, 200, 54, 241, 63, 217, 251, 190, 41, 119, 239, 43, 233, 56, 114, 69, 53, 137, 226, 50, 223, 21, 239, 90, 135, 150, 53, 192, 220, 189, 185, 112, 84, 185, 19, 216, 253, 152, 73, 96, 45, 21, 83, 38, 44, 54, 255, 178, 3, 231, 28, 196, 3, 208, 2, 161, 232, 36, 47, 152, 34, 202, 82, 120, 28, 151, 126, 185, 19, 85, 233, 172, 80, 145, 150, 122, 113, 45, 31, 145, 155, 78, 21, 97, 198, 203, 62, 132, 32, 196, 3, 60, 50, 224, 125, 18}, +{99, 124, 235, 192, 234, 122, 108, 202, 184, 223, 113, 90, 158, 128, 245, 156, 227, 35, 49, 20, 220, 100, 74, 190, 135, 63, 34, 117, 95, 82, 160, 158, 77, 244, 222, 11, 8, 18, 248, 146, 17, 34, 39, 93, 202, 182, 103, 108, 182, 30, 29, 210, 171, 240, 222, 254, 77, 17, 170, 95, 143, 232, 207, 141, 218, 254, 113, 94, 34, 64, 209, 21, 230, 2, 82, 228, 220, 28, 171, 34, 74, 88, 45, 119, 214, 130, 193, 22, 9, 30, 233, 115, 99, 58, 124, 63, 183, 252, 22, 238, 40, 179, 87, 8, 94, 9, 207, 145, 163, 178, 63, 216, 126, 223, 200, 91, 15, 170, 185, 197, 174, 124, 138, 28, 17, 44, 195, 123}, +{31, 192, 214, 174, 240, 246, 244, 242, 216, 18, 228, 48, 34, 235, 179, 18, 185, 24, 34, 213, 167, 86, 153, 83, 241, 69, 159, 27, 98, 193, 153, 126, 3, 162, 227, 200, 41, 137, 123, 202, 118, 172, 187, 164, 228, 102, 171, 14, 94, 195, 123, 93, 57, 168, 181, 251, 59, 203, 193, 224, 212, 195, 90, 51, 31, 58, 3, 17, 184, 208, 232, 91, 182, 114, 197, 122, 46, 187, 218, 171, 89, 155, 242, 0, 202, 153, 15, 196, 7, 57, 233, 53, 107, 163, 149, 87, 0, 235, 106, 224, 107, 91, 207, 99, 4, 47, 84, 182, 120, 141, 4, 66, 98, 11, 105, 136, 67, 251, 60, 216, 43, 247, 253, 113, 55, 181, 183, 228}, +{101, 190, 128, 196, 36, 119, 111, 240, 78, 161, 24, 143, 140, 162, 254, 101, 104, 13, 242, 117, 95, 29, 112, 146, 130, 31, 75, 109, 252, 247, 190, 238, 248, 0, 8, 20, 38, 107, 178, 71, 148, 164, 57, 114, 9, 144, 91, 146, 37, 33, 214, 103, 6, 127, 122, 154, 150, 167, 188, 16, 209, 176, 201, 92, 151, 20, 228, 23, 144, 76, 240, 155, 72, 193, 55, 181, 98, 113, 208, 30, 98, 241, 232, 161, 91, 85, 200, 150, 138, 221, 213, 154, 153, 221, 223, 213, 170, 52, 22, 147, 166, 29, 200, 227, 175, 232, 119, 159, 58, 118, 72, 114, 106, 76, 3, 123, 7, 99, 53, 236, 84, 247, 181, 205, 237, 244, 179, 218}, +{45, 28, 123, 197, 152, 200, 178, 100, 66, 254, 223, 247, 107, 35, 162, 155, 90, 142, 132, 217, 252, 231, 32, 31, 218, 2, 23, 168, 135, 143, 71, 121, 131, 76, 122, 232, 156, 246, 199, 166, 68, 29, 149, 240, 202, 95, 80, 69, 10, 216, 142, 183, 227, 54, 62, 77, 186, 34, 193, 163, 209, 227, 39, 46, 69, 40, 54, 133, 75, 117, 172, 25, 84, 217, 23, 17, 115, 174, 145, 34, 131, 132, 163, 132, 173, 83, 150, 226, 246, 65, 31, 218, 62, 115, 52, 234, 149, 210, 151, 237, 60, 81, 82, 254, 136, 39, 72, 203, 58, 118, 186, 148, 154, 175, 169, 113, 211, 221, 73, 121, 141, 37, 125, 127, 96, 120, 99, 139}, +{66, 81, 13, 176, 239, 127, 247, 170, 23, 115, 117, 112, 91, 196, 81, 53, 203, 240, 159, 110, 206, 114, 78, 30, 168, 143, 38, 172, 161, 225, 79, 0, 175, 17, 19, 92, 191, 206, 169, 221, 39, 228, 123, 248, 15, 57, 167, 54, 203, 6, 100, 175, 152, 45, 135, 204, 79, 50, 41, 9, 64, 8, 210, 103, 46, 93, 121, 206, 198, 152, 240, 59, 85, 93, 35, 188, 145, 227, 40, 237, 249, 23, 69, 241, 136, 168, 66, 242, 58, 21, 28, 209, 41, 223, 17, 120, 120, 253, 145, 240, 71, 64, 203, 218, 140, 47, 178, 49, 176, 225, 49, 120, 12, 130, 115, 157, 202, 217, 104, 37, 254, 189, 36, 33, 213, 248, 134, 16}, +{193, 205, 173, 189, 210, 45, 219, 74, 173, 252, 183, 155, 162, 138, 143, 207, 245, 168, 37, 10, 147, 193, 238, 95, 2, 78, 147, 194, 204, 193, 189, 255, 240, 205, 230, 200, 248, 0, 132, 241, 242, 242, 165, 217, 124, 227, 131, 220, 231, 209, 199, 22, 3, 41, 104, 65, 251, 93, 7, 252, 18, 198, 72, 222, 68, 117, 37, 163, 150, 87, 73, 148, 112, 54, 208, 193, 218, 151, 33, 8, 18, 41, 211, 136, 254, 232, 198, 244, 253, 73, 52, 223, 68, 77, 64, 32, 206, 197, 76, 157, 64, 120, 103, 55, 93, 5, 97, 183, 221, 153, 171, 224, 76, 76, 102, 89, 163, 66, 147, 111, 158, 228, 121, 91, 193, 67, 186, 243}, +{165, 245, 225, 142, 150, 232, 217, 156, 180, 150, 125, 206, 59, 200, 238, 250, 115, 129, 232, 89, 67, 81, 161, 217, 205, 80, 128, 229, 69, 189, 212, 91, 217, 117, 87, 150, 1, 145, 18, 154, 32, 219, 231, 100, 10, 110, 68, 22, 112, 91, 150, 194, 174, 207, 33, 63, 1, 155, 220, 114, 136, 209, 76, 214, 210, 197, 247, 238, 201, 26, 61, 255, 29, 250, 208, 150, 238, 26, 32, 40, 221, 232, 144, 77, 195, 177, 109, 17, 148, 141, 42, 183, 62, 62, 107, 70, 66, 238, 62, 50, 87, 239, 198, 239, 152, 30, 22, 21, 235, 203, 114, 202, 142, 127, 236, 18, 170, 43, 93, 209, 69, 153, 121, 25, 88, 183, 139, 28}, +{7, 53, 211, 52, 251, 106, 237, 75, 156, 205, 87, 50, 36, 241, 132, 175, 110, 226, 219, 170, 17, 155, 238, 119, 232, 164, 84, 10, 97, 227, 203, 23, 37, 69, 235, 254, 177, 13, 150, 86, 67, 143, 29, 230, 235, 132, 96, 63, 188, 55, 74, 53, 211, 3, 177, 2, 7, 85, 78, 245, 143, 87, 248, 55, 210, 45, 213, 128, 132, 84, 194, 99, 149, 82, 34, 2, 172, 207, 35, 89, 130, 126, 191, 38, 92, 118, 146, 30, 25, 164, 45, 20, 43, 63, 110, 174, 197, 201, 228, 140, 6, 22, 179, 179, 53, 167, 119, 192, 255, 193, 190, 158, 161, 164, 220, 89, 234, 168, 81, 26, 182, 172, 238, 86, 60, 244, 22, 71}, +{200, 247, 118, 194, 226, 50, 68, 113, 5, 46, 161, 31, 115, 35, 129, 40, 184, 110, 244, 25, 54, 68, 107, 17, 75, 189, 131, 37, 175, 145, 86, 146, 53, 20, 77, 74, 67, 142, 6, 172, 148, 168, 240, 61, 189, 147, 216, 240, 132, 252, 238, 25, 113, 234, 45, 40, 42, 135, 227, 189, 172, 39, 60, 51, 167, 44, 64, 206, 230, 7, 92, 33, 130, 123, 110, 97, 241, 77, 4, 96, 127, 149, 236, 219, 170, 222, 109, 255, 26, 254, 209, 13, 130, 50, 108, 27, 248, 47, 93, 189, 174, 209, 230, 124, 236, 216, 170, 245, 211, 224, 213, 10, 6, 224, 52, 177, 39, 90, 235, 21, 180, 169, 94, 91, 169, 75, 192, 247}, +{204, 110, 20, 130, 231, 155, 247, 136, 26, 147, 162, 39, 94, 201, 148, 145, 68, 5, 111, 245, 160, 222, 73, 166, 220, 169, 179, 84, 157, 233, 88, 37, 173, 227, 186, 147, 114, 202, 142, 163, 7, 162, 207, 42, 141, 232, 231, 148, 106, 245, 122, 203, 42, 2, 18, 225, 225, 36, 69, 149, 34, 193, 217, 105, 242, 56, 151, 228, 112, 84, 3, 232, 216, 3, 57, 175, 176, 177, 55, 89, 96, 187, 51, 35, 177, 184, 177, 149, 218, 9, 8, 125, 23, 9, 239, 239, 131, 220, 248, 177, 197, 120, 179, 215, 61, 145, 254, 13, 39, 131, 45, 38, 136, 111, 35, 234, 209, 247, 240, 112, 33, 50, 23, 36, 99, 97, 127, 16}, +{143, 15, 107, 139, 145, 82, 177, 183, 100, 140, 179, 107, 237, 105, 210, 120, 30, 68, 62, 218, 173, 67, 0, 189, 250, 154, 213, 177, 217, 135, 117, 83, 82, 41, 204, 179, 160, 31, 107, 140, 33, 206, 102, 165, 5, 210, 137, 159, 212, 175, 23, 151, 31, 106, 5, 250, 49, 40, 241, 22, 225, 155, 58, 121, 234, 123, 108, 38, 101, 178, 157, 23, 52, 111, 137, 26, 100, 155, 161, 58, 242, 189, 92, 65, 85, 237, 216, 238, 186, 135, 213, 113, 187, 105, 49, 193, 105, 90, 156, 161, 4, 61, 89, 174, 245, 66, 123, 75, 243, 180, 50, 203, 113, 57, 42, 65, 200, 175, 125, 206, 7, 254, 233, 33, 205, 225, 249, 164}, +{166, 250, 138, 111, 245, 109, 44, 43, 145, 44, 188, 187, 63, 246, 185, 190, 127, 174, 25, 176, 69, 69, 170, 99, 194, 59, 107, 218, 62, 67, 227, 130, 207, 95, 170, 196, 130, 16, 83, 236, 52, 213, 246, 157, 19, 120, 237, 37, 182, 134, 86, 229, 240, 50, 239, 184, 175, 158, 237, 3, 166, 32, 151, 13, 20, 204, 171, 247, 237, 132, 26, 34, 137, 64, 222, 66, 222, 234, 120, 10, 66, 102, 168, 40, 46, 43, 68, 71, 187, 196, 215, 252, 217, 41, 53, 190, 84, 237, 222, 47, 248, 230, 186, 217, 151, 40, 241, 122, 90, 26, 2, 253, 211, 175, 182, 222, 111, 80, 125, 248, 41, 205, 221, 0, 199, 5, 206, 185}, +{65, 102, 31, 200, 208, 197, 102, 20, 175, 194, 93, 244, 75, 181, 203, 96, 121, 40, 156, 134, 93, 29, 21, 131, 35, 206, 101, 92, 161, 110, 14, 250, 208, 149, 148, 184, 2, 136, 252, 198, 130, 115, 221, 23, 6, 57, 47, 32, 67, 104, 193, 141, 5, 240, 134, 202, 216, 35, 70, 167, 236, 220, 223, 127, 180, 145, 103, 69, 175, 254, 16, 232, 32, 108, 70, 5, 107, 77, 84, 166, 224, 13, 201, 200, 146, 126, 226, 93, 47, 237, 90, 63, 216, 48, 216, 113, 100, 97, 157, 247, 95, 116, 207, 44, 244, 184, 35, 97, 166, 185, 21, 11, 251, 19, 88, 133, 61, 144, 254, 129, 130, 46, 138, 207, 232, 57, 40, 4}, +{86, 195, 209, 247, 219, 246, 77, 252, 216, 29, 117, 41, 40, 210, 249, 155, 49, 0, 47, 153, 114, 133, 242, 143, 225, 81, 86, 66, 214, 30, 29, 227, 108, 230, 78, 50, 97, 206, 46, 51, 95, 110, 74, 12, 223, 212, 52, 249, 0, 47, 195, 136, 32, 214, 213, 90, 201, 19, 196, 125, 237, 107, 100, 178, 104, 56, 97, 242, 158, 193, 61, 30, 119, 136, 234, 219, 112, 4, 152, 196, 113, 179, 150, 171, 57, 37, 80, 153, 121, 151, 36, 95, 219, 82, 17, 248, 13, 45, 23, 146, 70, 190, 99, 206, 64, 75, 13, 6, 20, 115, 9, 216, 159, 60, 33, 107, 110, 167, 168, 31, 216, 157, 155, 163, 177, 112, 191, 101}, +{141, 129, 175, 212, 34, 125, 136, 136, 66, 223, 239, 92, 86, 247, 34, 95, 45, 90, 182, 64, 97, 168, 49, 21, 67, 70, 78, 228, 188, 179, 188, 148, 217, 253, 205, 8, 104, 195, 53, 249, 104, 224, 71, 48, 205, 240, 223, 1, 95, 141, 9, 159, 95, 65, 229, 69, 109, 222, 29, 165, 75, 93, 20, 55, 82, 154, 189, 12, 2, 93, 27, 207, 14, 207, 58, 191, 103, 145, 190, 163, 144, 4, 152, 30, 132, 179, 116, 22, 48, 95, 91, 74, 141, 213, 239, 47, 36, 156, 179, 245, 56, 59, 129, 31, 62, 82, 178, 208, 157, 24, 11, 119, 244, 233, 10, 219, 13, 123, 31, 37, 26, 158, 61, 36, 61, 40, 111, 122}, +{29, 110, 70, 119, 129, 221, 91, 30, 242, 116, 73, 156, 139, 92, 83, 21, 142, 32, 46, 121, 231, 129, 63, 5, 146, 66, 60, 130, 172, 47, 120, 122, 144, 221, 109, 60, 37, 145, 238, 228, 47, 81, 60, 84, 17, 149, 240, 155, 83, 20, 152, 54, 34, 133, 81, 247, 42, 2, 240, 23, 160, 179, 15, 218, 128, 79, 210, 56, 27, 68, 70, 133, 65, 227, 213, 94, 197, 129, 183, 51, 160, 197, 177, 39, 144, 1, 180, 183, 28, 7, 78, 92, 14, 74, 237, 161, 41, 22, 205, 245, 186, 23, 202, 120, 86, 136, 137, 132, 246, 183, 192, 154, 207, 223, 110, 65, 246, 249, 239, 72, 119, 23, 16, 34, 157, 64, 93, 3}, +{209, 39, 227, 84, 22, 204, 128, 227, 47, 160, 158, 203, 67, 11, 86, 208, 63, 96, 230, 15, 85, 183, 227, 28, 53, 48, 218, 245, 163, 96, 86, 148, 19, 165, 250, 173, 174, 16, 244, 220, 177, 205, 159, 194, 21, 111, 160, 217, 169, 23, 118, 159, 242, 38, 178, 171, 4, 37, 227, 129, 156, 195, 158, 229, 234, 53, 251, 151, 3, 137, 67, 180, 92, 117, 117, 145, 15, 142, 237, 175, 238, 22, 183, 45, 82, 184, 194, 75, 60, 130, 195, 252, 97, 255, 7, 222, 14, 131, 12, 216, 184, 165, 55, 148, 84, 60, 116, 61, 136, 42, 40, 96, 185, 37, 184, 77, 240, 96, 177, 142, 59, 189, 249, 95, 201, 173, 202, 212}, +{170, 2, 56, 229, 10, 180, 80, 206, 25, 247, 158, 105, 189, 180, 71, 68, 165, 147, 20, 232, 221, 213, 129, 195, 147, 253, 2, 16, 59, 78, 220, 89, 182, 226, 204, 151, 224, 145, 66, 241, 211, 49, 202, 95, 171, 10, 107, 249, 195, 113, 148, 148, 198, 140, 245, 109, 7, 166, 122, 38, 203, 205, 183, 128, 211, 232, 149, 198, 222, 124, 108, 157, 149, 72, 88, 86, 213, 210, 158, 226, 228, 114, 138, 23, 106, 9, 129, 161, 178, 89, 117, 105, 28, 83, 96, 72, 9, 52, 248, 115, 15, 73, 249, 202, 80, 73, 211, 153, 200, 101, 83, 217, 86, 98, 147, 29, 155, 171, 135, 73, 171, 72, 239, 77, 99, 62, 26, 42}, +{118, 251, 58, 64, 28, 212, 231, 44, 24, 234, 38, 70, 5, 39, 79, 45, 38, 122, 53, 244, 145, 30, 121, 106, 114, 184, 238, 176, 242, 101, 103, 27, 155, 93, 91, 122, 28, 162, 3, 251, 172, 242, 153, 220, 70, 226, 202, 202, 213, 229, 134, 7, 168, 137, 65, 214, 4, 103, 104, 130, 127, 112, 116, 13, 207, 109, 99, 98, 233, 42, 14, 50, 55, 128, 36, 9, 125, 67, 51, 188, 175, 231, 214, 12, 42, 236, 177, 20, 78, 114, 254, 143, 36, 71, 237, 220, 189, 67, 140, 72, 18, 57, 35, 111, 180, 168, 19, 172, 209, 124, 247, 96, 91, 87, 192, 124, 210, 248, 115, 74, 194, 35, 193, 195, 11, 228, 223, 36}, +{27, 39, 73, 246, 146, 55, 52, 150, 154, 204, 62, 164, 12, 251, 206, 221, 105, 16, 35, 103, 235, 243, 195, 24, 95, 65, 76, 232, 231, 30, 114, 35, 156, 41, 109, 103, 241, 3, 197, 73, 151, 191, 150, 105, 42, 86, 25, 234, 76, 8, 123, 111, 124, 168, 136, 150, 150, 254, 102, 129, 132, 159, 160, 23, 86, 151, 140, 168, 52, 76, 227, 157, 87, 253, 225, 192, 59, 81, 231, 89, 188, 139, 228, 92, 93, 32, 114, 197, 113, 56, 211, 78, 104, 37, 1, 9, 100, 11, 150, 50, 187, 101, 104, 81, 135, 143, 200, 6, 21, 182, 222, 183, 143, 104, 65, 39, 30, 2, 59, 7, 122, 7, 255, 164, 9, 195, 214, 103}, +{37, 49, 132, 182, 220, 14, 30, 235, 43, 142, 161, 192, 183, 145, 132, 140, 252, 82, 146, 13, 134, 232, 248, 117, 171, 140, 205, 38, 104, 192, 252, 69, 221, 144, 120, 34, 65, 62, 239, 203, 87, 49, 49, 80, 130, 42, 98, 149, 89, 71, 3, 224, 27, 237, 61, 162, 224, 6, 147, 166, 80, 162, 241, 14, 231, 11, 119, 233, 75, 219, 101, 85, 91, 252, 108, 248, 78, 234, 115, 67, 94, 22, 139, 126, 73, 179, 17, 160, 83, 40, 212, 27, 227, 80, 93, 212, 23, 216, 105, 130, 39, 16, 37, 232, 13, 169, 51, 147, 52, 38, 174, 122, 185, 200, 139, 30, 248, 10, 221, 141, 109, 111, 152, 149, 180, 46, 82, 11}, +{179, 229, 92, 72, 228, 210, 176, 248, 106, 5, 147, 101, 131, 247, 235, 125, 172, 100, 232, 101, 124, 35, 96, 144, 205, 21, 182, 246, 58, 182, 212, 243, 203, 42, 86, 186, 250, 27, 85, 76, 155, 143, 199, 76, 224, 241, 30, 88, 207, 137, 67, 172, 76, 85, 73, 38, 106, 178, 115, 238, 52, 111, 10, 23, 105, 106, 8, 98, 158, 98, 241, 151, 206, 199, 241, 254, 34, 246, 54, 32, 53, 117, 110, 161, 212, 88, 8, 125, 224, 65, 98, 250, 91, 91, 133, 103, 83, 114, 236, 198, 241, 26, 155, 240, 166, 73, 69, 70, 144, 243, 157, 105, 98, 98, 118, 47, 19, 188, 254, 118, 176, 145, 128, 90, 180, 9, 142, 145}, +{113, 225, 163, 117, 122, 3, 236, 234, 53, 0, 164, 184, 88, 224, 197, 150, 243, 220, 100, 7, 140, 192, 117, 189, 95, 219, 178, 11, 184, 200, 245, 187, 211, 251, 53, 205, 195, 4, 52, 157, 244, 188, 105, 114, 164, 153, 227, 218, 137, 102, 172, 21, 19, 192, 40, 5, 115, 37, 108, 208, 184, 75, 156, 40, 205, 209, 124, 139, 97, 25, 108, 185, 242, 56, 146, 236, 224, 44, 214, 173, 12, 162, 24, 49, 212, 82, 198, 199, 215, 164, 22, 209, 136, 168, 147, 249, 123, 29, 27, 13, 57, 36, 243, 203, 124, 81, 71, 118, 90, 159, 111, 93, 162, 137, 114, 79, 129, 221, 206, 216, 162, 122, 96, 0, 200, 239, 32, 79}, +{47, 135, 53, 228, 178, 76, 150, 209, 120, 8, 129, 24, 186, 211, 30, 161, 4, 232, 19, 147, 60, 96, 116, 5, 209, 158, 179, 76, 67, 215, 161, 75, 185, 136, 87, 34, 220, 26, 93, 71, 55, 12, 73, 248, 141, 252, 199, 186, 18, 184, 64, 55, 129, 89, 189, 178, 115, 41, 101, 113, 99, 146, 66, 213, 63, 5, 59, 13, 231, 69, 57, 105, 251, 183, 97, 186, 166, 17, 254, 175, 110, 209, 147, 181, 7, 22, 120, 75, 136, 193, 54, 130, 85, 154, 200, 123, 216, 230, 153, 3, 94, 98, 172, 15, 254, 13, 174, 180, 187, 224, 170, 187, 40, 115, 248, 186, 123, 34, 166, 129, 84, 88, 15, 48, 47, 129, 177, 214}, +{177, 182, 166, 34, 247, 132, 232, 134, 70, 165, 144, 191, 51, 109, 103, 204, 218, 38, 166, 19, 106, 66, 165, 77, 204, 47, 243, 3, 49, 37, 31, 55, 0, 214, 54, 68, 254, 223, 6, 68, 243, 183, 157, 123, 55, 90, 62, 67, 98, 255, 53, 31, 13, 94, 68, 78, 160, 94, 94, 64, 19, 20, 32, 99, 0, 194, 115, 127, 101, 231, 59, 63, 159, 35, 165, 95, 63, 200, 208, 164, 43, 143, 79, 145, 180, 206, 223, 82, 23, 216, 22, 175, 194, 50, 177, 130, 204, 114, 36, 25, 44, 204, 160, 17, 24, 99, 120, 232, 229, 81, 217, 28, 43, 227, 43, 86, 250, 199, 8, 242, 225, 77, 196, 117, 234, 86, 178, 92}, +{149, 127, 123, 240, 7, 84, 9, 60, 106, 98, 151, 23, 116, 232, 106, 60, 172, 223, 182, 8, 194, 65, 45, 83, 28, 220, 237, 48, 210, 216, 119, 204, 109, 146, 236, 173, 251, 0, 151, 35, 31, 33, 23, 73, 43, 243, 16, 8, 159, 244, 130, 12, 71, 224, 70, 12, 125, 96, 183, 147, 54, 98, 215, 216, 8, 171, 152, 115, 219, 30, 13, 135, 159, 111, 120, 43, 26, 105, 119, 14, 180, 19, 251, 191, 210, 55, 116, 7, 120, 132, 219, 175, 187, 247, 242, 117, 18, 72, 118, 109, 102, 224, 159, 30, 250, 72, 15, 13, 180, 2, 233, 182, 121, 5, 15, 214, 49, 163, 151, 118, 161, 201, 125, 58, 2, 150, 214, 168}, +{15, 205, 43, 1, 116, 65, 190, 168, 58, 162, 219, 228, 5, 213, 247, 65, 73, 222, 64, 53, 193, 27, 55, 37, 209, 211, 245, 196, 140, 113, 55, 146, 186, 246, 131, 79, 167, 202, 102, 52, 89, 134, 33, 187, 29, 246, 3, 137, 248, 178, 53, 53, 6, 134, 90, 209, 70, 85, 34, 184, 1, 242, 5, 124, 20, 171, 231, 238, 223, 249, 142, 49, 34, 96, 166, 217, 240, 33, 162, 23, 200, 232, 44, 70, 47, 111, 33, 69, 78, 25, 244, 108, 239, 246, 17, 153, 145, 221, 125, 53, 191, 83, 14, 36, 252, 217, 240, 160, 17, 99, 25, 44, 31, 78, 34, 217, 110, 180, 224, 18, 230, 173, 36, 18, 150, 229, 18, 55}, +{179, 200, 21, 214, 185, 155, 100, 200, 250, 11, 220, 27, 96, 220, 4, 85, 39, 243, 37, 243, 113, 104, 86, 194, 187, 108, 129, 128, 51, 187, 5, 73, 155, 72, 210, 91, 217, 41, 233, 129, 123, 60, 141, 110, 240, 199, 135, 69, 54, 119, 63, 67, 52, 49, 45, 16, 79, 14, 242, 153, 102, 57, 130, 118, 192, 47, 138, 98, 118, 26, 63, 250, 6, 58, 132, 72, 139, 80, 213, 97, 195, 120, 52, 165, 77, 168, 83, 206, 252, 158, 13, 230, 71, 215, 12, 145, 248, 55, 210, 68, 12, 251, 121, 123, 237, 112, 116, 231, 225, 102, 181, 196, 124, 60, 233, 243, 52, 65, 53, 115, 242, 100, 95, 119, 158, 206, 144, 149}, +{99, 169, 56, 78, 214, 177, 75, 248, 138, 55, 18, 240, 27, 0, 138, 155, 83, 37, 3, 195, 251, 252, 148, 161, 216, 208, 237, 27, 196, 255, 111, 192, 172, 93, 143, 248, 127, 204, 121, 77, 232, 252, 45, 250, 100, 196, 28, 41, 107, 73, 229, 41, 194, 0, 197, 229, 217, 177, 127, 217, 132, 49, 103, 185, 1, 75, 252, 187, 67, 149, 127, 171, 36, 24, 61, 209, 179, 218, 207, 199, 134, 8, 241, 214, 240, 115, 38, 254, 137, 7, 211, 221, 211, 155, 114, 82, 90, 238, 74, 23, 109, 84, 49, 153, 165, 234, 89, 147, 62, 110, 163, 57, 138, 35, 63, 138, 41, 218, 115, 38, 146, 189, 251, 101, 19, 63, 212, 188}, +{182, 183, 45, 242, 32, 218, 47, 247, 36, 28, 147, 88, 56, 184, 204, 197, 29, 183, 37, 215, 118, 51, 209, 199, 241, 33, 17, 149, 120, 200, 19, 8, 84, 46, 65, 235, 216, 94, 3, 160, 170, 85, 225, 191, 41, 121, 142, 167, 68, 84, 18, 4, 90, 207, 240, 133, 33, 187, 245, 86, 179, 210, 214, 75, 70, 154, 233, 221, 42, 9, 53, 1, 137, 186, 42, 223, 216, 18, 242, 74, 107, 70, 210, 56, 137, 110, 168, 226, 209, 211, 50, 48, 196, 250, 70, 81, 185, 236, 221, 18, 53, 118, 202, 45, 104, 95, 207, 234, 154, 192, 149, 90, 134, 247, 27, 29, 25, 209, 196, 45, 115, 38, 185, 104, 86, 209, 201, 105}, +{56, 236, 211, 130, 112, 233, 143, 65, 242, 49, 24, 73, 114, 197, 44, 187, 19, 192, 3, 9, 232, 245, 117, 132, 23, 204, 119, 231, 23, 92, 151, 169, 182, 114, 130, 214, 107, 209, 93, 152, 153, 107, 36, 197, 183, 226, 73, 63, 35, 154, 126, 248, 189, 155, 113, 100, 132, 81, 242, 11, 48, 234, 116, 114, 24, 178, 60, 248, 121, 1, 236, 16, 0, 222, 138, 248, 214, 163, 226, 98, 246, 222, 243, 74, 35, 5, 36, 147, 24, 224, 227, 30, 180, 21, 74, 188, 240, 0, 219, 73, 143, 40, 13, 18, 132, 158, 163, 253, 182, 135, 78, 169, 207, 143, 110, 24, 139, 239, 229, 89, 95, 64, 137, 213, 141, 65, 155, 92}, +{63, 32, 31, 233, 204, 57, 66, 18, 189, 245, 250, 228, 124, 172, 151, 224, 230, 181, 202, 111, 106, 50, 18, 189, 29, 184, 43, 9, 29, 65, 172, 131, 157, 6, 209, 157, 196, 182, 195, 89, 163, 155, 57, 180, 90, 212, 208, 121, 237, 160, 217, 171, 38, 82, 245, 151, 229, 77, 224, 26, 8, 181, 253, 14, 112, 115, 72, 189, 206, 68, 154, 54, 87, 168, 159, 91, 16, 114, 118, 213, 158, 12, 227, 48, 192, 102, 199, 160, 78, 220, 87, 103, 226, 123, 135, 156, 238, 83, 193, 16, 81, 73, 10, 30, 40, 183, 233, 211, 51, 162, 17, 56, 155, 207, 226, 81, 173, 73, 148, 31, 219, 234, 222, 98, 10, 0, 17, 126}, +{151, 199, 75, 172, 17, 252, 214, 226, 254, 13, 167, 2, 73, 152, 245, 195, 176, 94, 32, 33, 112, 148, 160, 20, 247, 237, 151, 60, 133, 212, 97, 225, 128, 171, 38, 230, 17, 89, 163, 230, 179, 137, 199, 10, 180, 0, 75, 149, 217, 229, 171, 230, 158, 21, 174, 200, 169, 144, 98, 254, 65, 143, 143, 39, 156, 128, 37, 70, 151, 235, 148, 75, 11, 20, 57, 168, 50, 30, 114, 183, 56, 229, 5, 103, 149, 91, 173, 146, 17, 123, 47, 221, 235, 108, 232, 208, 150, 220, 64, 15, 28, 213, 6, 118, 187, 159, 229, 88, 174, 72, 58, 51, 177, 88, 184, 184, 201, 206, 99, 7, 106, 21, 107, 193, 90, 241, 98, 46}, +{189, 45, 200, 4, 35, 205, 114, 208, 191, 9, 253, 91, 172, 46, 121, 216, 104, 133, 85, 24, 78, 166, 28, 192, 79, 50, 223, 77, 174, 186, 41, 242, 36, 208, 54, 93, 112, 15, 178, 94, 165, 68, 36, 251, 231, 131, 85, 114, 175, 70, 247, 59, 233, 3, 219, 151, 119, 48, 21, 175, 228, 217, 48, 239, 133, 215, 4, 153, 180, 46, 96, 77, 129, 129, 219, 165, 139, 2, 203, 90, 255, 106, 65, 108, 22, 112, 52, 127, 13, 240, 212, 226, 166, 168, 251, 181, 224, 181, 241, 122, 205, 101, 14, 157, 18, 140, 27, 60, 88, 235, 68, 206, 43, 185, 5, 46, 6, 255, 27, 44, 191, 38, 85, 160, 97, 0, 93, 67}, +{99, 58, 169, 85, 149, 248, 13, 224, 194, 189, 156, 28, 61, 11, 102, 227, 79, 147, 7, 142, 87, 12, 249, 224, 129, 179, 143, 173, 2, 122, 28, 159, 133, 191, 168, 133, 241, 57, 222, 170, 166, 23, 31, 211, 64, 123, 225, 230, 148, 83, 3, 151, 236, 131, 71, 77, 254, 79, 110, 56, 176, 132, 43, 107, 175, 163, 16, 36, 18, 152, 145, 126, 214, 162, 216, 248, 108, 176, 65, 149, 239, 150, 71, 238, 52, 148, 6, 30, 174, 55, 19, 199, 230, 8, 121, 165, 52, 118, 163, 190, 116, 40, 170, 105, 151, 128, 194, 122, 190, 102, 208, 224, 125, 16, 30, 57, 88, 173, 181, 137, 218, 190, 247, 119, 14, 223, 51, 158}, +{178, 182, 230, 13, 130, 61, 185, 23, 211, 37, 204, 207, 230, 220, 245, 219, 186, 166, 38, 0, 1, 61, 52, 57, 145, 165, 54, 42, 67, 197, 82, 6, 56, 77, 39, 3, 48, 103, 114, 118, 102, 41, 171, 175, 138, 7, 155, 41, 217, 209, 203, 34, 252, 66, 13, 176, 88, 75, 171, 242, 51, 29, 20, 78, 90, 3, 55, 230, 100, 149, 184, 151, 137, 246, 62, 204, 97, 140, 60, 191, 26, 54, 88, 116, 193, 195, 135, 209, 74, 5, 17, 4, 196, 198, 210, 12, 214, 77, 29, 249, 213, 50, 139, 15, 176, 76, 36, 179, 81, 63, 100, 65, 130, 106, 233, 172, 22, 231, 189, 187, 36, 186, 219, 194, 82, 30, 146, 164}, +{183, 164, 28, 153, 38, 35, 26, 248, 204, 14, 41, 221, 0, 128, 252, 57, 115, 82, 109, 62, 101, 8, 223, 167, 118, 104, 18, 160, 127, 118, 42, 171, 55, 14, 189, 196, 200, 80, 88, 55, 238, 107, 70, 239, 190, 222, 191, 132, 9, 1, 58, 130, 176, 110, 14, 17, 8, 58, 142, 107, 70, 132, 68, 9, 218, 24, 205, 113, 5, 48, 231, 12, 173, 213, 178, 210, 141, 228, 5, 7, 191, 25, 181, 189, 209, 125, 144, 11, 54, 214, 191, 14, 210, 158, 90, 217, 96, 62, 179, 174, 89, 6, 0, 27, 195, 137, 91, 123, 165, 38, 236, 115, 216, 166, 103, 108, 64, 69, 161, 99, 208, 35, 18, 184, 17, 200, 55, 204}, +{117, 143, 92, 182, 101, 95, 83, 140, 242, 97, 185, 6, 81, 84, 5, 116, 40, 123, 144, 62, 237, 30, 192, 246, 97, 248, 41, 150, 151, 78, 189, 17, 125, 74, 74, 10, 28, 203, 66, 90, 172, 220, 240, 4, 40, 229, 70, 239, 123, 42, 193, 176, 115, 133, 199, 224, 66, 235, 21, 1, 160, 5, 213, 218, 70, 147, 84, 229, 26, 58, 105, 17, 138, 115, 187, 87, 67, 227, 253, 45, 179, 64, 187, 90, 82, 201, 29, 105, 31, 173, 186, 221, 75, 112, 2, 138, 151, 122, 37, 101, 92, 47, 4, 205, 66, 12, 115, 22, 57, 125, 16, 155, 58, 136, 136, 153, 180, 212, 133, 67, 98, 1, 137, 59, 239, 191, 106, 62}, +{139, 229, 129, 128, 93, 77, 239, 168, 38, 248, 193, 127, 243, 236, 27, 192, 224, 249, 14, 166, 224, 154, 156, 239, 117, 195, 170, 90, 122, 177, 229, 29, 99, 178, 188, 229, 64, 186, 226, 236, 250, 247, 84, 216, 195, 122, 192, 59, 196, 62, 12, 191, 74, 200, 237, 21, 52, 126, 255, 19, 75, 90, 242, 19, 58, 45, 19, 2, 23, 92, 32, 214, 100, 138, 19, 50, 195, 228, 40, 1, 124, 107, 206, 61, 62, 177, 168, 195, 80, 247, 22, 211, 183, 28, 138, 194, 6, 234, 159, 170, 53, 98, 120, 116, 246, 206, 199, 174, 215, 229, 77, 86, 107, 186, 191, 228, 146, 107, 41, 3, 121, 255, 40, 208, 97, 54, 88, 42}, +{38, 226, 147, 90, 227, 99, 82, 71, 124, 8, 208, 20, 240, 189, 247, 233, 84, 32, 16, 251, 121, 87, 141, 24, 185, 88, 45, 14, 198, 27, 55, 86, 172, 84, 77, 22, 171, 120, 207, 240, 181, 31, 14, 5, 175, 216, 212, 118, 84, 254, 44, 210, 155, 37, 2, 137, 38, 49, 5, 239, 235, 9, 98, 158, 146, 154, 87, 6, 129, 117, 61, 194, 124, 245, 244, 97, 164, 196, 131, 232, 154, 160, 183, 57, 81, 178, 53, 140, 219, 37, 158, 17, 215, 220, 14, 81, 88, 169, 197, 68, 225, 41, 165, 154, 217, 245, 21, 19, 24, 18, 56, 163, 145, 179, 216, 76, 243, 170, 33, 254, 186, 19, 152, 248, 206, 46, 225, 247}, +{72, 47, 78, 134, 79, 109, 84, 34, 146, 205, 6, 214, 57, 12, 249, 254, 143, 226, 232, 182, 13, 144, 246, 8, 78, 51, 5, 138, 47, 68, 81, 59, 46, 102, 62, 176, 50, 23, 57, 145, 7, 250, 172, 234, 24, 115, 216, 177, 149, 70, 148, 46, 46, 68, 157, 42, 244, 166, 178, 223, 40, 130, 21, 126, 38, 242, 81, 40, 1, 200, 140, 191, 80, 57, 157, 142, 74, 137, 61, 198, 123, 80, 197, 46, 117, 31, 60, 212, 211, 210, 182, 227, 163, 254, 24, 142, 245, 3, 40, 184, 35, 126, 26, 215, 166, 59, 157, 31, 69, 147, 50, 36, 68, 170, 160, 211, 0, 221, 125, 58, 221, 166, 196, 91, 154, 78, 95, 53}, +{119, 52, 46, 169, 91, 187, 107, 231, 251, 186, 198, 89, 146, 237, 93, 189, 178, 66, 31, 208, 171, 10, 254, 145, 80, 36, 26, 148, 250, 16, 139, 147, 85, 82, 149, 152, 188, 123, 21, 246, 244, 5, 14, 11, 61, 119, 111, 247, 66, 163, 129, 161, 210, 59, 126, 176, 218, 54, 72, 179, 223, 221, 186, 130, 43, 147, 185, 31, 1, 9, 103, 80, 25, 70, 211, 1, 1, 135, 113, 61, 93, 212, 221, 161, 249, 153, 74, 238, 207, 66, 39, 209, 165, 79, 160, 1, 185, 93, 189, 220, 3, 132, 165, 114, 254, 30, 185, 99, 94, 76, 212, 2, 38, 52, 35, 190, 234, 156, 5, 155, 227, 124, 211, 242, 157, 155, 238, 67}, +{7, 130, 161, 247, 168, 87, 75, 173, 245, 3, 118, 125, 80, 128, 7, 157, 125, 216, 86, 21, 141, 253, 234, 244, 157, 215, 151, 247, 11, 154, 110, 2, 50, 117, 119, 191, 16, 12, 33, 107, 138, 71, 250, 203, 126, 17, 145, 112, 166, 94, 213, 118, 15, 194, 45, 201, 172, 4, 183, 113, 145, 35, 103, 172, 218, 35, 113, 158, 3, 51, 109, 236, 39, 33, 130, 245, 235, 105, 61, 138, 228, 121, 64, 71, 144, 56, 91, 56, 169, 11, 32, 177, 218, 8, 154, 95, 198, 101, 148, 160, 143, 27, 110, 102, 71, 234, 168, 35, 54, 115, 158, 48, 121, 22, 95, 19, 127, 236, 130, 131, 231, 43, 159, 39, 81, 142, 254, 206}, +{200, 124, 218, 171, 163, 211, 45, 48, 74, 17, 148, 157, 241, 143, 40, 8, 28, 184, 1, 120, 27, 229, 229, 247, 169, 196, 245, 83, 22, 53, 164, 163, 1, 250, 193, 36, 178, 228, 115, 243, 184, 199, 194, 110, 129, 17, 177, 33, 101, 238, 121, 206, 86, 253, 84, 62, 144, 235, 18, 122, 95, 139, 203, 254, 152, 144, 198, 236, 198, 121, 210, 183, 123, 38, 154, 4, 117, 123, 28, 248, 81, 196, 248, 49, 187, 120, 71, 22, 166, 6, 94, 204, 251, 148, 196, 200, 185, 171, 8, 254, 26, 193, 51, 16, 139, 211, 85, 204, 14, 255, 123, 187, 23, 74, 112, 238, 106, 168, 223, 176, 150, 242, 5, 123, 177, 213, 53, 79}, +{79, 64, 208, 172, 187, 24, 112, 28, 224, 207, 56, 217, 97, 97, 36, 216, 246, 40, 48, 127, 72, 36, 169, 68, 53, 232, 163, 38, 177, 246, 61, 156, 133, 47, 83, 166, 89, 180, 100, 182, 54, 195, 56, 49, 147, 128, 40, 233, 89, 176, 190, 110, 253, 50, 84, 176, 131, 149, 44, 176, 102, 214, 150, 203, 25, 86, 119, 55, 60, 22, 91, 74, 114, 102, 57, 240, 229, 226, 17, 53, 61, 171, 168, 21, 13, 100, 213, 139, 39, 110, 7, 58, 117, 162, 31, 139, 46, 208, 51, 152, 12, 68, 161, 89, 27, 138, 10, 226, 129, 5, 173, 16, 156, 121, 250, 206, 216, 161, 122, 128, 30, 92, 135, 226, 217, 34, 208, 80}, +{75, 19, 127, 46, 216, 180, 27, 135, 90, 198, 200, 131, 226, 65, 28, 86, 101, 72, 199, 5, 122, 169, 48, 233, 179, 15, 167, 225, 84, 108, 244, 114, 175, 142, 180, 186, 225, 18, 72, 124, 252, 241, 30, 148, 135, 199, 85, 109, 33, 97, 190, 3, 136, 195, 135, 198, 231, 134, 153, 86, 169, 172, 12, 221, 202, 40, 168, 162, 101, 10, 154, 251, 175, 182, 76, 79, 98, 6, 64, 4, 126, 66, 33, 42, 219, 107, 24, 228, 117, 158, 48, 194, 235, 63, 90, 237, 65, 85, 134, 67, 91, 201, 96, 230, 63, 169, 91, 229, 250, 57, 149, 22, 243, 238, 106, 159, 93, 169, 30, 144, 63, 183, 33, 154, 203, 71, 127, 68}, +{200, 169, 112, 242, 147, 28, 12, 186, 93, 218, 12, 51, 91, 42, 177, 134, 183, 91, 167, 58, 242, 253, 42, 3, 169, 180, 65, 170, 99, 15, 225, 95, 118, 151, 131, 243, 25, 140, 212, 252, 161, 194, 61, 4, 236, 45, 16, 73, 170, 0, 95, 248, 226, 131, 197, 151, 97, 237, 107, 132, 50, 205, 21, 86, 239, 181, 32, 124, 194, 30, 68, 234, 81, 186, 30, 238, 196, 235, 24, 234, 29, 239, 52, 183, 78, 99, 5, 104, 111, 108, 99, 69, 224, 45, 153, 235, 14, 225, 47, 145, 86, 5, 49, 63, 36, 171, 222, 59, 140, 78, 16, 34, 239, 128, 3, 127, 222, 208, 220, 116, 49, 64, 126, 150, 25, 8, 194, 167}, +{96, 36, 13, 151, 150, 224, 164, 118, 75, 119, 156, 160, 35, 83, 27, 32, 177, 163, 181, 192, 179, 36, 159, 177, 214, 172, 131, 24, 164, 61, 83, 76, 161, 9, 247, 70, 170, 14, 225, 81, 194, 184, 151, 212, 18, 20, 179, 254, 3, 0, 115, 241, 183, 38, 38, 85, 182, 221, 184, 36, 90, 9, 219, 85, 135, 19, 49, 158, 100, 84, 231, 61, 216, 188, 165, 59, 54, 220, 95, 252, 181, 127, 53, 190, 153, 86, 217, 145, 50, 42, 100, 72, 117, 64, 204, 247, 34, 192, 16, 102, 234, 46, 76, 95, 23, 152, 113, 67, 174, 87, 32, 248, 106, 103, 193, 197, 33, 118, 70, 28, 139, 215, 174, 207, 87, 185, 15, 222}, +{39, 162, 152, 218, 160, 28, 155, 247, 108, 222, 38, 33, 167, 82, 155, 126, 250, 29, 81, 67, 45, 22, 123, 69, 195, 28, 213, 88, 247, 101, 7, 79, 235, 70, 28, 121, 203, 58, 62, 143, 236, 87, 196, 95, 149, 202, 206, 21, 134, 247, 114, 63, 50, 215, 199, 217, 143, 138, 157, 121, 83, 39, 137, 239, 112, 111, 150, 204, 64, 14, 120, 95, 100, 213, 243, 35, 106, 105, 247, 178, 228, 206, 196, 79, 74, 17, 72, 87, 86, 88, 103, 147, 220, 249, 194, 14, 37, 207, 16, 57, 15, 254, 159, 116, 119, 212, 0, 194, 190, 35, 185, 177, 2, 46, 228, 247, 58, 84, 100, 54, 248, 192, 108, 44, 184, 136, 40, 204}, +{74, 86, 121, 220, 130, 78, 199, 1, 59, 146, 234, 4, 238, 200, 54, 77, 133, 213, 17, 20, 92, 42, 99, 77, 240, 165, 241, 12, 222, 96, 232, 103, 131, 30, 101, 228, 35, 53, 183, 152, 159, 182, 119, 169, 76, 33, 10, 19, 168, 100, 159, 78, 237, 192, 69, 141, 67, 14, 215, 135, 86, 187, 192, 162, 61, 61, 82, 51, 124, 133, 15, 182, 49, 150, 43, 185, 59, 200, 30, 98, 189, 100, 146, 179, 253, 133, 236, 80, 98, 103, 62, 130, 43, 5, 97, 29, 18, 246, 58, 116, 176, 198, 42, 216, 70, 0, 14, 193, 230, 235, 2, 168, 215, 225, 44, 79, 150, 49, 26, 204, 159, 114, 236, 3, 250, 124, 7, 253}, +{9, 33, 163, 56, 189, 226, 80, 233, 217, 32, 35, 35, 239, 163, 177, 245, 198, 232, 78, 20, 79, 186, 232, 26, 19, 233, 185, 173, 218, 36, 210, 63, 128, 5, 249, 196, 122, 13, 42, 31, 182, 67, 126, 29, 60, 94, 189, 115, 187, 178, 101, 92, 94, 84, 100, 238, 150, 117, 103, 248, 25, 252, 161, 204, 82, 91, 144, 99, 19, 124, 130, 245, 116, 125, 199, 19, 199, 42, 52, 48, 47, 164, 12, 113, 145, 110, 159, 195, 169, 101, 134, 175, 72, 107, 174, 49, 29, 166, 241, 121, 158, 132, 75, 53, 170, 182, 215, 17, 191, 127, 156, 198, 41, 52, 64, 28, 99, 97, 66, 79, 101, 60, 46, 14, 228, 34, 94, 71}, +{57, 210, 88, 47, 69, 218, 123, 110, 203, 253, 226, 83, 148, 140, 118, 22, 47, 221, 112, 175, 86, 168, 144, 59, 129, 2, 50, 114, 194, 107, 112, 114, 29, 94, 91, 216, 75, 99, 120, 134, 247, 78, 177, 182, 4, 210, 88, 74, 11, 135, 27, 78, 253, 111, 44, 7, 152, 122, 45, 204, 70, 144, 97, 131, 241, 30, 218, 210, 26, 43, 44, 48, 35, 115, 130, 168, 190, 109, 51, 106, 84, 137, 159, 254, 96, 50, 28, 217, 132, 188, 65, 30, 102, 102, 157, 127, 102, 81, 204, 33, 59, 14, 92, 117, 194, 47, 106, 70, 109, 219, 124, 252, 188, 251, 173, 0, 7, 217, 91, 26, 132, 109, 188, 113, 206, 15, 65, 228}, +{12, 103, 235, 107, 113, 251, 242, 128, 133, 29, 74, 189, 194, 76, 146, 103, 112, 124, 82, 11, 254, 111, 41, 138, 49, 142, 47, 250, 147, 77, 11, 253, 93, 24, 127, 224, 163, 208, 194, 253, 64, 167, 235, 136, 129, 220, 112, 244, 252, 219, 245, 248, 199, 35, 4, 132, 242, 136, 131, 227, 48, 151, 219, 196, 35, 178, 7, 32, 48, 103, 235, 210, 36, 117, 3, 83, 120, 250, 13, 224, 47, 216, 131, 254, 51, 199, 87, 251, 46, 51, 137, 0, 101, 245, 1, 176, 231, 29, 38, 82, 101, 77, 155, 177, 115, 122, 251, 186, 173, 50, 44, 47, 43, 8, 54, 50, 101, 236, 161, 99, 232, 113, 124, 63, 178, 78, 6, 80}, +{82, 184, 112, 2, 9, 104, 127, 21, 71, 135, 161, 247, 86, 224, 49, 247, 70, 102, 229, 246, 149, 78, 178, 23, 72, 185, 168, 70, 112, 200, 126, 127, 124, 68, 152, 225, 9, 79, 35, 160, 78, 197, 195, 155, 124, 25, 177, 80, 101, 195, 182, 15, 255, 34, 96, 236, 167, 222, 206, 90, 168, 74, 197, 220, 216, 104, 145, 73, 103, 157, 234, 179, 186, 242, 139, 84, 90, 47, 96, 7, 237, 65, 3, 45, 114, 245, 16, 131, 137, 81, 203, 209, 221, 195, 184, 96, 122, 201, 20, 54, 226, 33, 228, 190, 103, 136, 211, 9, 182, 10, 70, 212, 26, 198, 143, 23, 91, 112, 107, 4, 55, 186, 119, 21, 199, 11, 80, 180}, +{13, 149, 85, 135, 211, 168, 200, 217, 82, 76, 14, 194, 209, 148, 108, 44, 7, 81, 68, 153, 85, 167, 107, 164, 84, 178, 47, 38, 96, 111, 59, 129, 154, 188, 92, 204, 154, 182, 14, 152, 30, 27, 183, 171, 129, 84, 232, 166, 85, 126, 244, 232, 163, 181, 147, 196, 69, 154, 57, 76, 203, 195, 68, 176, 106, 175, 137, 91, 48, 14, 94, 220, 40, 151, 7, 226, 62, 20, 197, 48, 243, 110, 96, 200, 49, 253, 113, 52, 26, 93, 226, 22, 194, 5, 136, 183, 30, 100, 197, 116, 39, 211, 159, 102, 171, 108, 161, 155, 197, 32, 184, 161, 198, 164, 81, 235, 67, 31, 166, 243, 6, 204, 203, 49, 115, 149, 26, 254}, +{54, 7, 43, 190, 163, 27, 206, 78, 83, 119, 187, 51, 183, 49, 177, 127, 105, 85, 53, 232, 115, 75, 92, 151, 189, 242, 19, 176, 136, 120, 72, 241, 78, 195, 232, 76, 2, 38, 108, 184, 190, 85, 22, 192, 41, 228, 234, 3, 71, 252, 178, 207, 114, 23, 200, 173, 194, 140, 43, 118, 31, 93, 4, 93, 37, 94, 201, 213, 207, 18, 241, 232, 6, 2, 121, 191, 176, 235, 13, 217, 190, 169, 184, 98, 188, 145, 60, 234, 25, 79, 151, 10, 47, 50, 83, 194, 155, 193, 190, 141, 174, 131, 58, 178, 138, 135, 243, 38, 60, 203, 190, 141, 69, 233, 222, 111, 167, 114, 219, 115, 218, 167, 1, 218, 183, 219, 75, 138}, +{156, 25, 219, 225, 169, 39, 75, 225, 153, 185, 157, 110, 76, 18, 224, 199, 38, 216, 255, 177, 91, 224, 30, 93, 64, 83, 118, 56, 216, 13, 126, 165, 175, 27, 61, 103, 90, 202, 22, 39, 52, 194, 232, 94, 202, 197, 184, 212, 104, 23, 1, 251, 196, 15, 26, 191, 193, 108, 181, 223, 228, 140, 148, 174, 198, 128, 90, 169, 55, 70, 73, 221, 161, 111, 211, 121, 124, 121, 173, 89, 36, 120, 193, 87, 185, 86, 60, 182, 188, 158, 76, 201, 79, 203, 7, 63, 207, 40, 143, 116, 31, 246, 107, 72, 17, 214, 249, 160, 235, 41, 211, 126, 172, 166, 190, 28, 44, 164, 243, 248, 99, 163, 116, 77, 93, 185, 203, 91}, +{123, 53, 100, 246, 78, 237, 246, 177, 171, 42, 181, 69, 99, 114, 137, 32, 204, 73, 66, 227, 166, 74, 111, 5, 78, 181, 156, 191, 195, 184, 78, 171, 155, 3, 2, 206, 163, 8, 2, 235, 88, 14, 205, 148, 112, 144, 215, 157, 103, 40, 106, 155, 19, 234, 228, 83, 59, 236, 133, 120, 14, 69, 19, 240, 206, 115, 9, 29, 55, 155, 78, 185, 142, 93, 26, 115, 155, 232, 240, 45, 202, 220, 137, 107, 121, 112, 12, 3, 39, 224, 112, 148, 3, 62, 255, 16, 102, 197, 252, 250, 217, 55, 33, 146, 22, 159, 248, 228, 109, 123, 95, 99, 84, 92, 104, 239, 145, 248, 170, 110, 148, 26, 13, 164, 192, 228, 210, 63}, +{114, 151, 95, 88, 162, 157, 83, 35, 7, 186, 194, 189, 228, 58, 130, 54, 193, 81, 126, 53, 156, 38, 17, 213, 83, 52, 254, 76, 13, 183, 246, 45, 37, 3, 119, 150, 165, 244, 148, 3, 104, 45, 107, 102, 162, 144, 149, 136, 86, 142, 28, 179, 233, 229, 74, 251, 91, 86, 38, 3, 25, 241, 128, 225, 198, 75, 5, 110, 53, 151, 103, 38, 52, 134, 75, 129, 203, 4, 100, 71, 238, 237, 230, 90, 139, 249, 250, 227, 252, 22, 66, 163, 248, 150, 195, 173, 64, 146, 134, 83, 153, 251, 8, 158, 148, 174, 123, 110, 85, 113, 226, 69, 140, 41, 86, 128, 63, 75, 172, 21, 139, 79, 166, 243, 7, 243, 69, 118}, +{148, 66, 109, 251, 240, 143, 165, 134, 105, 239, 146, 133, 77, 64, 188, 6, 151, 201, 36, 138, 65, 43, 40, 194, 102, 70, 9, 179, 120, 253, 139, 41, 111, 155, 51, 170, 31, 228, 166, 182, 28, 137, 248, 106, 102, 192, 156, 175, 52, 64, 197, 34, 239, 0, 204, 170, 241, 56, 187, 42, 220, 109, 229, 96, 245, 41, 211, 84, 44, 199, 54, 127, 135, 216, 191, 191, 75, 185, 42, 8, 63, 232, 108, 33, 78, 79, 255, 197, 146, 21, 17, 210, 19, 39, 61, 188, 141, 239, 69, 11, 44, 223, 121, 49, 160, 77, 213, 186, 207, 60, 133, 34, 197, 30, 51, 116, 187, 98, 201, 168, 216, 30, 252, 89, 0, 218, 32, 216}, +{119, 253, 158, 28, 73, 51, 228, 150, 61, 206, 112, 147, 186, 208, 185, 78, 158, 79, 179, 0, 95, 127, 66, 99, 101, 142, 25, 244, 9, 31, 222, 133, 150, 178, 164, 89, 188, 126, 221, 130, 56, 142, 186, 46, 203, 176, 159, 172, 203, 202, 107, 176, 181, 11, 81, 1, 226, 213, 13, 33, 12, 61, 52, 24, 240, 121, 97, 206, 175, 199, 162, 105, 39, 174, 155, 195, 213, 163, 29, 105, 147, 134, 219, 189, 115, 91, 2, 103, 160, 152, 6, 16, 71, 117, 218, 187, 254, 144, 134, 50, 10, 7, 184, 34, 111, 100, 39, 59, 25, 174, 183, 26, 251, 48, 168, 103, 43, 88, 226, 109, 21, 4, 45, 183, 148, 66, 70, 238}, +{132, 216, 84, 171, 205, 178, 233, 52, 46, 243, 90, 197, 72, 29, 181, 50, 228, 41, 222, 209, 54, 79, 178, 35, 79, 223, 112, 241, 74, 91, 206, 32, 81, 73, 247, 50, 68, 218, 39, 154, 97, 139, 139, 83, 18, 33, 198, 78, 253, 211, 71, 97, 227, 89, 190, 60, 17, 148, 254, 127, 193, 174, 202, 176, 67, 215, 64, 131, 255, 200, 24, 103, 125, 6, 190, 155, 152, 251, 67, 94, 52, 10, 251, 52, 180, 209, 172, 160, 153, 59, 170, 63, 23, 82, 17, 243, 134, 239, 111, 25, 102, 168, 212, 32, 124, 51, 100, 227, 64, 230, 214, 240, 237, 224, 46, 104, 153, 176, 3, 65, 4, 137, 234, 171, 87, 118, 171, 33}, +{42, 40, 117, 99, 169, 91, 62, 154, 103, 202, 236, 135, 146, 195, 229, 64, 156, 220, 58, 32, 123, 141, 98, 209, 165, 25, 171, 105, 40, 0, 165, 168, 193, 156, 180, 97, 29, 87, 171, 1, 127, 185, 71, 68, 168, 101, 73, 102, 254, 142, 47, 116, 142, 221, 176, 174, 185, 150, 43, 114, 130, 54, 222, 54, 213, 27, 20, 68, 51, 19, 29, 155, 208, 20, 11, 3, 85, 222, 30, 187, 189, 23, 228, 69, 244, 248, 202, 252, 6, 195, 128, 44, 235, 64, 78, 149, 154, 80, 202, 122, 91, 254, 148, 176, 111, 254, 97, 255, 159, 126, 9, 188, 4, 119, 6, 132, 1, 51, 156, 60, 42, 46, 203, 254, 188, 195, 135, 66}, +{52, 222, 200, 93, 25, 224, 67, 140, 151, 191, 245, 141, 114, 194, 243, 94, 187, 69, 158, 75, 124, 62, 50, 65, 136, 155, 65, 155, 145, 36, 10, 158, 197, 170, 32, 233, 84, 142, 160, 46, 219, 49, 52, 7, 93, 152, 30, 188, 241, 223, 188, 130, 186, 20, 18, 172, 160, 206, 107, 159, 52, 52, 198, 224, 21, 154, 250, 4, 176, 115, 30, 194, 37, 242, 143, 218, 26, 13, 25, 41, 121, 39, 61, 113, 86, 153, 20, 16, 182, 51, 70, 19, 102, 88, 142, 13, 100, 52, 83, 61, 252, 67, 99, 22, 22, 203, 89, 61, 223, 161, 87, 103, 29, 169, 48, 89, 22, 133, 106, 4, 200, 238, 197, 56, 46, 45, 145, 111}, +{184, 11, 203, 158, 37, 203, 111, 210, 240, 183, 222, 63, 74, 37, 92, 158, 117, 168, 17, 152, 199, 228, 251, 159, 0, 252, 107, 246, 192, 206, 152, 62, 213, 185, 120, 105, 127, 15, 168, 115, 219, 151, 34, 86, 120, 184, 32, 25, 177, 23, 136, 19, 189, 106, 180, 48, 43, 32, 137, 57, 106, 167, 76, 31, 231, 24, 80, 151, 164, 131, 164, 187, 233, 185, 84, 61, 228, 196, 218, 215, 122, 62, 215, 198, 138, 114, 189, 85, 141, 211, 166, 245, 230, 74, 236, 124, 53, 184, 146, 97, 228, 149, 7, 205, 142, 213, 2, 68, 70, 231, 173, 185, 149, 36, 182, 148, 211, 72, 71, 8, 250, 31, 22, 45, 245, 154, 244, 40}, +{90, 57, 223, 193, 224, 139, 210, 60, 36, 59, 98, 209, 82, 223, 189, 35, 141, 217, 192, 214, 215, 200, 93, 112, 252, 0, 141, 35, 216, 50, 57, 225, 200, 104, 166, 184, 86, 235, 96, 240, 217, 143, 251, 145, 5, 31, 133, 199, 210, 19, 129, 195, 41, 238, 195, 166, 226, 176, 57, 9, 108, 129, 140, 176, 54, 174, 44, 238, 164, 100, 209, 55, 21, 49, 202, 23, 240, 126, 230, 49, 199, 182, 233, 24, 224, 241, 48, 152, 159, 116, 218, 216, 100, 201, 252, 215, 104, 220, 75, 147, 253, 144, 1, 117, 135, 244, 76, 134, 205, 250, 191, 115, 98, 211, 224, 253, 255, 176, 178, 10, 133, 72, 14, 25, 203, 109, 14, 163}, +{23, 153, 38, 175, 23, 29, 161, 58, 72, 204, 181, 151, 255, 226, 141, 104, 121, 235, 16, 2, 180, 150, 217, 28, 181, 80, 62, 240, 131, 216, 16, 4, 22, 56, 84, 203, 58, 250, 217, 65, 72, 138, 162, 211, 149, 65, 34, 76, 177, 232, 34, 45, 248, 8, 222, 10, 5, 126, 109, 2, 69, 129, 168, 27, 107, 115, 93, 205, 49, 255, 193, 196, 77, 237, 30, 193, 174, 55, 241, 178, 118, 150, 203, 152, 100, 23, 8, 152, 33, 190, 93, 183, 242, 171, 136, 52, 124, 82, 24, 49, 98, 217, 203, 41, 28, 206, 209, 230, 197, 218, 103, 13, 55, 48, 164, 188, 202, 164, 52, 20, 109, 106, 174, 64, 97, 6, 26, 165}, +{36, 92, 2, 81, 34, 11, 114, 107, 49, 156, 185, 65, 157, 8, 128, 112, 85, 209, 232, 98, 106, 22, 166, 31, 122, 167, 232, 27, 158, 82, 76, 14, 46, 202, 50, 200, 14, 10, 173, 151, 220, 126, 62, 52, 163, 36, 100, 124, 200, 229, 37, 27, 168, 118, 9, 189, 51, 28, 76, 235, 172, 89, 241, 190, 150, 190, 223, 156, 120, 169, 218, 31, 81, 156, 206, 73, 64, 162, 219, 146, 255, 227, 253, 251, 104, 61, 184, 39, 69, 32, 97, 218, 103, 162, 220, 116, 202, 68, 185, 160, 193, 149, 98, 138, 141, 99, 42, 216, 68, 244, 191, 235, 148, 157, 187, 125, 121, 45, 34, 91, 101, 178, 133, 17, 128, 219, 230, 170}, +{120, 111, 95, 25, 233, 208, 137, 16, 144, 87, 59, 233, 47, 173, 148, 204, 36, 108, 139, 11, 6, 50, 241, 6, 145, 147, 147, 223, 48, 182, 166, 122, 219, 13, 87, 65, 164, 118, 155, 87, 126, 31, 191, 198, 108, 204, 152, 51, 36, 27, 23, 104, 70, 222, 7, 68, 51, 62, 127, 178, 248, 70, 58, 133, 167, 97, 71, 82, 5, 149, 208, 237, 176, 171, 43, 161, 30, 204, 246, 214, 16, 252, 131, 248, 219, 53, 96, 37, 41, 85, 249, 229, 231, 140, 193, 94, 91, 61, 229, 6, 237, 243, 22, 67, 27, 40, 214, 147, 39, 147, 192, 166, 196, 254, 169, 87, 159, 235, 251, 77, 107, 24, 99, 130, 37, 102, 227, 169}, +{28, 115, 33, 205, 235, 57, 93, 235, 40, 95, 3, 248, 225, 147, 246, 136, 93, 126, 168, 85, 255, 92, 123, 19, 10, 37, 189, 255, 147, 239, 190, 24, 158, 193, 157, 41, 198, 107, 50, 73, 120, 189, 110, 164, 229, 82, 53, 107, 161, 218, 176, 144, 107, 35, 85, 245, 74, 85, 240, 136, 11, 56, 34, 135, 14, 138, 104, 93, 6, 246, 162, 76, 12, 120, 170, 86, 93, 238, 108, 99, 116, 113, 206, 65, 25, 214, 49, 217, 175, 51, 202, 66, 27, 82, 251, 176, 178, 168, 72, 217, 202, 162, 152, 208, 110, 116, 176, 174, 59, 172, 11, 87, 141, 221, 160, 44, 5, 98, 152, 50, 199, 153, 32, 142, 229, 132, 179, 124}, +{127, 251, 85, 168, 67, 92, 223, 117, 41, 7, 231, 248, 16, 133, 157, 204, 230, 21, 206, 99, 150, 177, 94, 124, 246, 73, 228, 244, 231, 134, 248, 167, 151, 50, 103, 185, 224, 96, 65, 105, 232, 92, 200, 159, 157, 195, 60, 146, 206, 157, 141, 18, 68, 154, 255, 61, 166, 105, 235, 165, 224, 162, 34, 217, 179, 180, 38, 118, 233, 249, 151, 102, 244, 147, 99, 207, 209, 149, 46, 108, 127, 229, 16, 125, 13, 218, 237, 1, 221, 67, 77, 246, 96, 45, 134, 101, 65, 205, 39, 36, 106, 192, 61, 204, 43, 50, 68, 166, 21, 77, 46, 253, 240, 27, 97, 58, 227, 81, 173, 219, 236, 238, 157, 233, 36, 163, 215, 169}, +{41, 129, 136, 167, 128, 22, 187, 188, 148, 187, 71, 32, 197, 217, 86, 98, 18, 126, 170, 167, 188, 49, 2, 65, 86, 173, 0, 161, 97, 195, 209, 128, 169, 129, 75, 45, 192, 149, 196, 41, 181, 99, 217, 8, 47, 18, 210, 230, 88, 243, 90, 186, 197, 57, 225, 249, 127, 124, 27, 146, 179, 8, 251, 92, 185, 220, 167, 11, 144, 147, 195, 2, 246, 240, 153, 135, 195, 207, 166, 74, 42, 245, 53, 19, 210, 170, 70, 106, 109, 243, 197, 204, 134, 94, 164, 67, 42, 122, 82, 227, 197, 68, 53, 213, 244, 232, 104, 254, 192, 193, 234, 67, 91, 143, 150, 179, 78, 145, 119, 10, 41, 235, 110, 63, 209, 64, 171, 38}, +{2, 196, 12, 108, 91, 242, 206, 168, 57, 207, 238, 44, 11, 212, 144, 164, 111, 185, 5, 12, 67, 47, 70, 85, 246, 124, 146, 227, 86, 218, 244, 99, 30, 119, 43, 207, 52, 213, 209, 101, 48, 226, 119, 206, 41, 250, 179, 68, 113, 217, 118, 151, 126, 134, 227, 52, 149, 52, 141, 96, 218, 154, 115, 254, 144, 235, 63, 4, 182, 59, 92, 133, 112, 245, 231, 244, 178, 100, 102, 129, 146, 41, 31, 77, 62, 1, 239, 21, 18, 197, 17, 100, 98, 89, 218, 140, 101, 145, 65, 230, 209, 75, 149, 58, 95, 153, 74, 63, 171, 61, 133, 150, 12, 153, 247, 123, 180, 207, 189, 133, 98, 255, 248, 61, 167, 122, 58, 234}, +{40, 78, 152, 204, 97, 72, 5, 70, 43, 168, 24, 237, 194, 245, 110, 233, 52, 159, 87, 45, 69, 64, 9, 246, 64, 37, 96, 111, 116, 145, 236, 29, 47, 104, 17, 129, 223, 138, 107, 248, 188, 229, 215, 246, 129, 111, 39, 164, 174, 25, 16, 11, 94, 103, 211, 107, 96, 131, 110, 151, 239, 171, 25, 48, 151, 233, 97, 3, 18, 148, 37, 238, 92, 2, 53, 0, 120, 191, 150, 8, 224, 236, 145, 109, 230, 150, 61, 37, 154, 36, 47, 142, 10, 206, 69, 92, 4, 167, 152, 81, 153, 3, 248, 197, 214, 63, 55, 143, 218, 122, 146, 102, 154, 170, 38, 146, 205, 232, 3, 153, 4, 238, 134, 74, 203, 158, 175, 42}, +{3, 75, 250, 248, 135, 180, 94, 58, 136, 36, 202, 249, 12, 223, 194, 192, 217, 107, 251, 139, 216, 222, 29, 129, 50, 119, 161, 79, 141, 149, 40, 104, 68, 149, 91, 42, 84, 111, 58, 244, 82, 197, 249, 219, 103, 27, 24, 150, 76, 223, 122, 51, 136, 136, 243, 122, 7, 98, 54, 134, 26, 138, 166, 46, 89, 182, 15, 195, 46, 43, 249, 61, 206, 101, 118, 82, 61, 251, 247, 186, 58, 106, 74, 17, 56, 68, 68, 100, 203, 184, 149, 86, 187, 86, 125, 10, 71, 18, 194, 49, 199, 194, 114, 10, 70, 179, 231, 175, 108, 119, 29, 9, 119, 34, 73, 1, 34, 196, 204, 63, 32, 76, 59, 156, 3, 6, 0, 140}, +{18, 18, 127, 213, 40, 12, 14, 75, 138, 119, 134, 241, 147, 242, 161, 27, 21, 12, 162, 167, 6, 208, 57, 174, 224, 212, 180, 119, 255, 22, 114, 210, 67, 255, 230, 206, 165, 71, 225, 211, 20, 20, 235, 112, 51, 21, 233, 176, 70, 11, 197, 177, 37, 36, 186, 98, 132, 174, 10, 4, 149, 240, 187, 107, 207, 159, 84, 55, 13, 114, 34, 192, 69, 71, 122, 194, 172, 38, 104, 179, 214, 78, 16, 3, 124, 194, 158, 104, 35, 84, 36, 253, 124, 121, 151, 201, 148, 251, 154, 209, 152, 88, 60, 5, 204, 233, 134, 142, 155, 217, 202, 197, 93, 141, 26, 26, 187, 243, 106, 181, 86, 27, 20, 106, 42, 140, 20, 200}, +{49, 51, 98, 159, 32, 137, 29, 198, 132, 218, 67, 153, 185, 114, 220, 148, 201, 33, 223, 68, 118, 174, 97, 130, 38, 181, 137, 18, 23, 75, 33, 198, 209, 212, 118, 234, 59, 108, 224, 104, 251, 228, 88, 68, 54, 118, 41, 4, 55, 64, 201, 46, 184, 15, 218, 247, 202, 181, 196, 0, 156, 244, 81, 136, 35, 243, 23, 24, 32, 109, 195, 245, 104, 169, 63, 63, 132, 108, 83, 164, 13, 103, 40, 23, 29, 178, 64, 230, 226, 161, 12, 86, 78, 190, 184, 49, 40, 235, 25, 58, 182, 153, 243, 154, 48, 162, 121, 14, 154, 235, 9, 91, 91, 10, 72, 123, 201, 51, 168, 7, 253, 129, 205, 112, 105, 252, 239, 124}, +{154, 67, 59, 223, 71, 149, 185, 65, 248, 22, 85, 46, 55, 24, 20, 151, 186, 29, 8, 195, 142, 101, 155, 177, 134, 11, 109, 246, 225, 150, 243, 245, 137, 113, 109, 206, 86, 166, 121, 252, 146, 93, 85, 95, 155, 207, 246, 1, 233, 108, 219, 40, 50, 55, 232, 245, 248, 147, 196, 181, 43, 5, 71, 212, 170, 100, 122, 7, 117, 71, 228, 91, 47, 22, 203, 248, 5, 222, 142, 43, 15, 78, 243, 205, 118, 232, 41, 187, 22, 222, 19, 198, 124, 66, 1, 80, 181, 16, 233, 236, 99, 235, 49, 4, 116, 97, 112, 181, 251, 239, 99, 112, 9, 72, 150, 126, 182, 105, 242, 211, 141, 127, 6, 214, 32, 17, 108, 63}, +{136, 8, 254, 39, 65, 234, 121, 95, 165, 154, 176, 160, 196, 84, 84, 146, 78, 182, 123, 137, 5, 54, 155, 119, 96, 209, 19, 84, 129, 224, 191, 138, 79, 101, 248, 108, 34, 129, 96, 73, 91, 184, 255, 111, 119, 183, 86, 173, 177, 74, 254, 24, 129, 34, 200, 199, 24, 187, 103, 71, 11, 40, 55, 175, 160, 59, 169, 95, 69, 15, 37, 3, 9, 185, 235, 19, 169, 177, 92, 104, 111, 219, 252, 238, 218, 146, 212, 68, 193, 55, 227, 86, 179, 34, 221, 63, 59, 153, 80, 217, 45, 82, 45, 105, 216, 48, 75, 178, 183, 187, 199, 217, 102, 150, 207, 121, 66, 83, 126, 209, 168, 230, 203, 41, 81, 178, 216, 156}, +{74, 94, 20, 212, 97, 91, 6, 172, 223, 35, 130, 213, 130, 25, 138, 221, 149, 159, 252, 97, 41, 91, 75, 194, 65, 166, 193, 23, 12, 63, 63, 188, 210, 131, 127, 248, 126, 6, 57, 253, 76, 159, 229, 98, 238, 118, 76, 40, 53, 189, 70, 68, 8, 65, 123, 181, 212, 245, 247, 219, 182, 89, 59, 218, 51, 112, 254, 140, 110, 226, 200, 142, 5, 253, 106, 185, 11, 105, 107, 222, 182, 78, 37, 220, 146, 56, 76, 188, 235, 56, 80, 59, 59, 40, 140, 247, 215, 199, 238, 61, 119, 126, 14, 164, 98, 96, 96, 30, 125, 43, 200, 243, 156, 130, 114, 171, 145, 205, 160, 55, 112, 33, 205, 215, 49, 248, 52, 228}, +{126, 233, 70, 26, 216, 139, 25, 65, 62, 92, 167, 126, 4, 110, 180, 217, 123, 120, 155, 186, 175, 60, 163, 143, 237, 45, 37, 40, 8, 241, 114, 245, 171, 84, 37, 13, 45, 211, 2, 17, 133, 1, 153, 154, 100, 166, 28, 117, 180, 203, 0, 133, 253, 13, 175, 85, 2, 153, 93, 213, 28, 205, 92, 87, 158, 98, 133, 148, 168, 150, 55, 209, 74, 0, 58, 67, 37, 153, 127, 71, 145, 120, 69, 68, 255, 74, 189, 118, 159, 130, 253, 155, 88, 129, 255, 213, 38, 139, 16, 64, 250, 182, 33, 43, 226, 123, 14, 168, 175, 99, 219, 34, 192, 64, 120, 122, 180, 216, 169, 188, 195, 231, 208, 244, 206, 33, 1, 223}, +{37, 20, 174, 233, 185, 43, 185, 104, 154, 110, 247, 241, 76, 19, 27, 98, 41, 176, 178, 49, 215, 62, 176, 149, 96, 239, 95, 17, 223, 255, 88, 203, 148, 11, 104, 41, 224, 145, 205, 74, 140, 112, 213, 164, 232, 45, 155, 162, 137, 151, 227, 124, 198, 210, 176, 13, 210, 26, 104, 184, 231, 174, 202, 188, 161, 100, 90, 197, 153, 128, 237, 190, 24, 146, 247, 6, 27, 114, 47, 19, 144, 202, 33, 135, 224, 166, 109, 5, 183, 28, 203, 57, 45, 73, 144, 75, 235, 146, 56, 30, 1, 144, 83, 183, 40, 180, 162, 213, 34, 157, 12, 227, 25, 174, 185, 184, 29, 39, 145, 152, 85, 248, 219, 236, 31, 60, 108, 32}, +{60, 196, 242, 123, 49, 1, 193, 123, 128, 42, 51, 5, 23, 199, 52, 91, 224, 183, 165, 96, 199, 175, 219, 155, 228, 65, 71, 189, 69, 143, 149, 214, 196, 243, 161, 195, 116, 153, 112, 122, 188, 50, 232, 208, 21, 76, 141, 191, 220, 139, 125, 246, 2, 167, 24, 80, 70, 244, 14, 232, 183, 208, 180, 202, 33, 194, 56, 234, 146, 21, 182, 162, 44, 108, 203, 72, 21, 232, 255, 95, 115, 249, 149, 236, 96, 69, 43, 75, 81, 11, 9, 164, 56, 170, 18, 101, 206, 119, 130, 108, 95, 136, 171, 62, 246, 87, 124, 78, 182, 222, 164, 20, 130, 130, 200, 235, 21, 94, 195, 137, 83, 53, 167, 110, 34, 2, 211, 13}, +{3, 87, 217, 51, 42, 24, 142, 31, 168, 91, 15, 98, 67, 43, 56, 77, 203, 129, 185, 9, 226, 74, 146, 17, 211, 35, 2, 173, 49, 229, 226, 44, 233, 0, 65, 179, 7, 193, 192, 102, 163, 7, 81, 101, 112, 148, 40, 77, 142, 222, 21, 227, 106, 48, 58, 43, 241, 51, 48, 186, 0, 76, 87, 148, 136, 88, 211, 91, 173, 158, 203, 153, 46, 246, 177, 58, 177, 246, 104, 85, 200, 152, 66, 139, 222, 52, 79, 191, 125, 153, 182, 246, 137, 207, 125, 242, 50, 140, 28, 13, 136, 61, 92, 72, 110, 69, 152, 225, 200, 136, 67, 207, 104, 60, 45, 153, 109, 106, 155, 11, 40, 11, 75, 165, 97, 92, 197, 127}, +{41, 159, 156, 123, 144, 167, 6, 123, 85, 246, 116, 139, 92, 99, 230, 101, 68, 17, 204, 240, 114, 237, 51, 79, 124, 218, 17, 254, 149, 151, 66, 199, 75, 201, 239, 251, 26, 219, 243, 8, 11, 152, 143, 99, 39, 221, 105, 125, 121, 204, 37, 36, 212, 146, 159, 87, 7, 132, 241, 58, 141, 123, 49, 243, 7, 135, 97, 90, 29, 158, 228, 141, 61, 74, 27, 226, 227, 203, 20, 248, 169, 199, 176, 12, 161, 149, 47, 8, 242, 170, 24, 7, 164, 221, 5, 65, 210, 191, 98, 172, 212, 30, 183, 9, 37, 122, 122, 167, 140, 28, 7, 219, 152, 130, 84, 197, 203, 144, 182, 61, 2, 5, 214, 40, 24, 147, 178, 80}, +{33, 251, 234, 68, 160, 52, 108, 82, 32, 73, 109, 50, 171, 224, 103, 95, 192, 143, 65, 66, 4, 215, 82, 18, 92, 31, 104, 30, 176, 229, 231, 149, 195, 248, 54, 56, 14, 181, 200, 90, 187, 81, 99, 185, 136, 131, 34, 65, 76, 182, 16, 210, 196, 122, 144, 14, 130, 251, 122, 155, 109, 151, 151, 102, 168, 195, 204, 233, 37, 221, 209, 246, 143, 193, 218, 193, 16, 146, 193, 104, 198, 54, 32, 87, 155, 78, 98, 10, 190, 146, 181, 250, 109, 9, 1, 232, 254, 30, 99, 229, 4, 6, 73, 84, 161, 141, 164, 67, 121, 65, 211, 247, 48, 240, 15, 144, 46, 101, 5, 0, 48, 232, 99, 71, 212, 96, 233, 45}, +{26, 254, 41, 59, 29, 253, 57, 43, 159, 106, 46, 253, 141, 15, 112, 78, 165, 19, 17, 87, 12, 243, 164, 70, 146, 34, 22, 242, 13, 119, 123, 178, 97, 109, 16, 88, 80, 21, 228, 2, 218, 22, 24, 237, 0, 224, 30, 41, 211, 163, 227, 135, 114, 141, 253, 156, 19, 15, 237, 33, 206, 196, 155, 70, 175, 227, 50, 143, 68, 130, 160, 108, 50, 248, 244, 255, 106, 17, 40, 61, 13, 228, 23, 148, 157, 32, 117, 221, 229, 189, 103, 102, 150, 4, 174, 234, 60, 70, 95, 0, 103, 202, 206, 58, 206, 103, 229, 175, 101, 189, 190, 4, 209, 24, 198, 193, 32, 165, 30, 206, 238, 209, 245, 237, 58, 107, 150, 135}, +{194, 243, 244, 22, 195, 183, 29, 128, 59, 113, 12, 106, 220, 219, 199, 98, 97, 101, 153, 255, 236, 6, 77, 39, 21, 10, 223, 187, 218, 38, 133, 214, 69, 158, 13, 89, 204, 243, 227, 16, 56, 150, 199, 114, 196, 227, 19, 48, 224, 36, 186, 114, 81, 60, 125, 225, 197, 167, 129, 95, 187, 71, 115, 30, 196, 138, 142, 34, 230, 141, 10, 40, 189, 18, 89, 22, 215, 207, 73, 122, 76, 216, 222, 197, 154, 68, 242, 53, 147, 154, 52, 89, 14, 232, 29, 188, 29, 207, 199, 248, 193, 55, 49, 79, 44, 13, 229, 181, 217, 92, 14, 101, 178, 114, 110, 34, 231, 178, 150, 60, 44, 221, 7, 75, 185, 167, 167, 0}, +{91, 62, 9, 82, 123, 125, 20, 216, 26, 152, 192, 3, 201, 1, 199, 249, 215, 18, 44, 111, 20, 12, 106, 246, 77, 200, 246, 218, 122, 147, 26, 159, 32, 234, 105, 27, 19, 143, 3, 60, 151, 141, 75, 25, 28, 174, 174, 36, 145, 208, 110, 170, 142, 129, 199, 194, 137, 113, 107, 220, 163, 250, 114, 110, 131, 142, 20, 236, 221, 103, 53, 122, 129, 205, 27, 64, 163, 84, 199, 126, 78, 98, 32, 252, 51, 189, 212, 136, 178, 79, 87, 74, 79, 254, 91, 229, 116, 145, 11, 254, 177, 143, 180, 205, 162, 23, 60, 4, 207, 187, 243, 163, 90, 202, 64, 76, 111, 153, 182, 239, 110, 65, 172, 236, 42, 191, 144, 23}, +{95, 166, 168, 89, 1, 211, 235, 56, 41, 13, 154, 176, 226, 156, 118, 30, 152, 29, 38, 229, 71, 58, 57, 172, 120, 204, 191, 130, 192, 36, 247, 148, 21, 232, 85, 159, 254, 24, 73, 96, 50, 212, 40, 179, 216, 211, 211, 103, 29, 64, 209, 169, 178, 166, 239, 220, 164, 150, 87, 161, 6, 103, 90, 80, 27, 219, 169, 196, 6, 189, 149, 195, 219, 46, 112, 72, 249, 28, 188, 237, 1, 146, 193, 104, 177, 106, 110, 89, 87, 139, 100, 2, 109, 104, 95, 77, 36, 69, 244, 147, 49, 73, 14, 98, 197, 67, 174, 189, 177, 101, 239, 114, 239, 13, 146, 90, 22, 31, 45, 132, 255, 64, 195, 192, 188, 243, 187, 52}, +{73, 232, 76, 136, 246, 205, 63, 242, 63, 206, 166, 214, 30, 248, 36, 34, 62, 124, 131, 95, 184, 231, 199, 233, 33, 226, 17, 76, 144, 233, 194, 214, 36, 210, 250, 255, 53, 72, 52, 125, 144, 187, 38, 195, 66, 26, 95, 252, 194, 151, 39, 159, 160, 210, 33, 59, 154, 177, 120, 135, 34, 40, 187, 207, 92, 83, 127, 135, 49, 209, 231, 151, 129, 84, 227, 194, 31, 69, 9, 116, 161, 101, 115, 158, 0, 221, 194, 225, 115, 186, 97, 85, 14, 242, 125, 23, 222, 25, 245, 213, 119, 211, 124, 73, 37, 173, 229, 106, 110, 47, 39, 17, 252, 147, 231, 136, 22, 48, 67, 46, 88, 246, 255, 65, 86, 196, 154, 63}, +{112, 46, 165, 126, 48, 53, 131, 83, 74, 46, 166, 168, 43, 21, 111, 88, 76, 98, 179, 117, 41, 204, 170, 253, 69, 149, 146, 174, 55, 78, 217, 200, 170, 231, 250, 206, 53, 61, 225, 101, 26, 62, 230, 68, 128, 9, 169, 174, 183, 99, 198, 105, 237, 21, 79, 113, 191, 48, 241, 251, 131, 15, 93, 82, 0, 173, 108, 99, 38, 173, 198, 131, 25, 130, 19, 143, 244, 210, 111, 63, 215, 64, 182, 238, 229, 220, 238, 174, 162, 183, 195, 78, 186, 249, 14, 119, 12, 241, 123, 80, 203, 181, 176, 37, 15, 10, 81, 101, 161, 143, 179, 42, 230, 149, 192, 98, 172, 241, 242, 144, 191, 195, 94, 224, 93, 196, 100, 112}, +{43, 166, 0, 215, 194, 106, 55, 62, 231, 67, 18, 220, 152, 205, 129, 72, 45, 229, 124, 99, 38, 173, 76, 204, 105, 253, 21, 120, 236, 92, 26, 39, 19, 79, 59, 101, 62, 117, 39, 98, 93, 78, 133, 42, 238, 246, 115, 194, 168, 150, 128, 95, 198, 140, 144, 88, 108, 202, 39, 31, 151, 250, 254, 237, 29, 4, 61, 34, 3, 119, 248, 2, 12, 5, 49, 216, 59, 120, 224, 84, 132, 45, 102, 178, 47, 6, 166, 12, 4, 142, 239, 198, 68, 205, 55, 1, 55, 237, 113, 83, 106, 19, 112, 41, 97, 132, 223, 42, 251, 116, 213, 90, 155, 106, 35, 242, 101, 222, 56, 55, 94, 138, 239, 175, 229, 220, 211, 233}, +{86, 55, 225, 189, 74, 174, 248, 82, 1, 248, 0, 206, 13, 133, 114, 235, 112, 84, 194, 174, 144, 177, 101, 99, 254, 129, 221, 204, 236, 193, 134, 6, 217, 52, 205, 59, 78, 118, 81, 3, 18, 108, 223, 109, 56, 179, 220, 121, 216, 115, 83, 145, 187, 28, 101, 60, 51, 215, 73, 55, 213, 129, 22, 99, 50, 213, 201, 108, 108, 163, 42, 60, 159, 233, 113, 215, 146, 220, 81, 203, 51, 90, 179, 250, 99, 144, 81, 230, 152, 38, 43, 98, 78, 69, 4, 160, 249, 108, 145, 236, 82, 13, 125, 91, 180, 7, 134, 169, 176, 195, 150, 118, 141, 109, 60, 157, 70, 192, 96, 85, 56, 165, 69, 29, 45, 219, 112, 82}, +{160, 131, 146, 159, 65, 118, 7, 36, 70, 154, 104, 220, 212, 197, 31, 135, 201, 171, 70, 251, 115, 98, 182, 134, 173, 175, 199, 94, 234, 199, 204, 246, 35, 26, 11, 228, 201, 217, 65, 211, 246, 2, 151, 43, 138, 242, 53, 108, 189, 121, 65, 31, 93, 74, 134, 103, 146, 243, 134, 246, 62, 16, 191, 123, 148, 35, 60, 26, 228, 253, 15, 18, 233, 199, 63, 57, 57, 35, 218, 193, 117, 224, 44, 122, 198, 169, 198, 166, 82, 162, 130, 239, 229, 200, 25, 232, 93, 147, 204, 57, 68, 141, 169, 175, 96, 175, 207, 75, 21, 212, 28, 19, 25, 176, 34, 81, 74, 39, 89, 95, 110, 55, 60, 9, 198, 62, 108, 134}, +{108, 112, 191, 235, 128, 6, 130, 85, 65, 229, 73, 49, 86, 29, 218, 145, 184, 139, 96, 25, 254, 142, 38, 106, 16, 11, 254, 24, 5, 40, 35, 72, 38, 191, 47, 24, 255, 179, 106, 57, 241, 12, 12, 129, 63, 188, 236, 156, 105, 17, 88, 30, 164, 165, 221, 40, 58, 98, 20, 191, 56, 105, 22, 246, 126, 71, 48, 76, 190, 198, 111, 56, 243, 162, 37, 175, 111, 175, 22, 121, 54, 194, 94, 237, 106, 75, 232, 63, 22, 164, 113, 111, 1, 183, 132, 96, 204, 140, 119, 55, 232, 51, 120, 222, 6, 16, 5, 202, 241, 239, 61, 174, 63, 25, 76, 211, 125, 38, 105, 196, 144, 75, 35, 58, 153, 193, 38, 7}, +{72, 67, 129, 250, 11, 190, 80, 220, 61, 31, 38, 171, 119, 230, 50, 88, 78, 88, 39, 71, 68, 160, 245, 127, 145, 238, 3, 187, 37, 21, 118, 207, 190, 155, 103, 81, 204, 138, 153, 201, 98, 83, 159, 90, 102, 159, 26, 23, 13, 131, 65, 241, 33, 151, 82, 146, 92, 196, 134, 139, 48, 131, 23, 77, 203, 54, 189, 241, 146, 52, 24, 174, 78, 178, 247, 74, 184, 85, 176, 179, 68, 229, 2, 215, 4, 232, 36, 238, 253, 23, 10, 212, 80, 37, 64, 195, 82, 219, 57, 66, 156, 125, 158, 35, 87, 94, 2, 196, 76, 187, 234, 117, 30, 49, 74, 2, 25, 45, 40, 192, 208, 132, 148, 76, 55, 196, 143, 178}, +{41, 141, 227, 154, 76, 172, 232, 194, 234, 224, 151, 131, 130, 206, 216, 217, 226, 174, 103, 136, 85, 64, 94, 122, 108, 92, 83, 36, 154, 237, 73, 234, 19, 25, 41, 20, 19, 160, 8, 29, 53, 141, 8, 186, 178, 101, 54, 30, 166, 201, 83, 110, 124, 107, 120, 221, 158, 71, 145, 52, 7, 251, 82, 83, 209, 11, 80, 185, 174, 41, 245, 39, 176, 212, 166, 117, 123, 56, 30, 173, 232, 36, 191, 54, 26, 182, 240, 234, 38, 221, 24, 164, 181, 13, 209, 10, 48, 217, 112, 83, 13, 239, 92, 171, 7, 16, 23, 91, 176, 245, 223, 206, 234, 125, 177, 245, 200, 222, 144, 152, 184, 24, 55, 121, 204, 224, 156, 158}, +{54, 172, 64, 137, 27, 214, 73, 64, 240, 185, 255, 187, 80, 40, 112, 188, 172, 77, 54, 122, 196, 178, 228, 171, 182, 60, 214, 41, 153, 243, 24, 91, 121, 130, 207, 239, 251, 129, 236, 171, 114, 65, 168, 231, 254, 149, 145, 21, 165, 165, 80, 120, 201, 45, 17, 56, 65, 116, 152, 116, 121, 200, 139, 63, 68, 99, 153, 118, 92, 142, 81, 186, 200, 25, 200, 9, 230, 245, 250, 4, 96, 205, 123, 214, 242, 71, 183, 129, 39, 23, 123, 223, 76, 179, 178, 95, 185, 179, 207, 127, 235, 186, 172, 215, 76, 250, 18, 26, 193, 56, 38, 230, 243, 246, 9, 130, 151, 26, 212, 210, 56, 27, 211, 139, 76, 23, 214, 251}, +{33, 50, 21, 19, 79, 34, 90, 145, 208, 166, 160, 129, 200, 158, 50, 56, 118, 110, 231, 197, 214, 16, 207, 76, 252, 218, 69, 246, 1, 90, 2, 15, 10, 170, 77, 200, 181, 27, 141, 116, 26, 211, 102, 121, 147, 112, 17, 62, 247, 37, 105, 138, 123, 4, 22, 252, 54, 184, 59, 100, 103, 82, 240, 229, 114, 209, 159, 104, 151, 254, 231, 226, 103, 6, 189, 184, 200, 18, 40, 57, 25, 52, 48, 107, 11, 91, 142, 149, 237, 10, 93, 80, 6, 247, 174, 69, 131, 112, 77, 88, 134, 20, 159, 3, 254, 33, 8, 30, 167, 82, 254, 23, 250, 51, 199, 108, 75, 201, 88, 247, 195, 94, 97, 128, 91, 1, 63, 144}, +{182, 115, 88, 183, 0, 241, 161, 98, 235, 43, 224, 204, 170, 4, 192, 98, 113, 114, 182, 118, 13, 163, 191, 107, 207, 172, 189, 199, 41, 105, 69, 246, 6, 223, 94, 86, 102, 142, 255, 58, 84, 205, 22, 47, 248, 87, 78, 98, 253, 171, 38, 228, 33, 126, 189, 101, 141, 89, 143, 191, 92, 196, 0, 124, 50, 23, 36, 3, 43, 253, 213, 117, 73, 121, 217, 109, 9, 240, 19, 17, 18, 251, 162, 169, 6, 50, 144, 193, 239, 19, 103, 215, 150, 190, 14, 226, 10, 10, 203, 119, 122, 149, 175, 137, 19, 126, 143, 112, 152, 208, 11, 62, 188, 59, 80, 168, 121, 189, 27, 33, 97, 125, 25, 229, 15, 156, 151, 119}, +{198, 182, 140, 233, 157, 177, 150, 53, 5, 130, 250, 199, 171, 11, 41, 205, 39, 232, 96, 36, 57, 34, 189, 54, 47, 114, 182, 12, 150, 175, 232, 162, 115, 73, 17, 255, 132, 109, 117, 194, 101, 124, 103, 31, 148, 195, 151, 21, 77, 216, 22, 139, 222, 194, 184, 41, 64, 2, 74, 232, 208, 108, 169, 91, 201, 127, 1, 197, 20, 14, 245, 98, 172, 16, 155, 23, 222, 160, 3, 235, 74, 104, 152, 204, 85, 124, 127, 143, 25, 132, 199, 79, 241, 24, 117, 57, 29, 245, 93, 175, 45, 153, 116, 188, 226, 58, 103, 87, 105, 133, 164, 217, 64, 100, 46, 239, 175, 87, 174, 122, 1, 76, 82, 245, 82, 142, 110, 140}, +{84, 226, 121, 152, 44, 130, 9, 171, 249, 64, 148, 37, 6, 14, 183, 74, 169, 137, 51, 92, 99, 26, 131, 175, 138, 49, 14, 44, 178, 87, 7, 140, 129, 39, 80, 253, 27, 128, 77, 86, 25, 195, 86, 119, 13, 201, 128, 197, 16, 15, 107, 93, 207, 62, 74, 205, 22, 77, 41, 185, 166, 6, 157, 77, 29, 227, 47, 53, 213, 2, 187, 174, 152, 107, 216, 57, 24, 101, 186, 186, 147, 104, 41, 110, 234, 141, 229, 42, 206, 253, 198, 34, 65, 27, 228, 67, 206, 115, 38, 29, 201, 166, 193, 22, 129, 153, 158, 100, 190, 167, 158, 58, 78, 76, 89, 31, 102, 64, 25, 112, 164, 132, 131, 231, 75, 117, 34, 198}, +{150, 17, 193, 90, 203, 154, 234, 234, 246, 132, 173, 45, 55, 91, 118, 35, 190, 30, 182, 184, 46, 38, 28, 85, 202, 70, 182, 30, 170, 92, 91, 157, 172, 123, 190, 151, 195, 3, 109, 125, 92, 9, 209, 39, 127, 26, 79, 233, 205, 143, 176, 79, 168, 1, 54, 50, 12, 135, 96, 97, 243, 169, 232, 74, 40, 95, 215, 63, 16, 160, 31, 182, 55, 184, 153, 122, 255, 179, 173, 88, 182, 71, 153, 237, 248, 219, 41, 186, 245, 137, 75, 227, 65, 10, 130, 235, 152, 17, 77, 133, 116, 245, 11, 40, 68, 2, 163, 156, 196, 78, 46, 136, 192, 74, 181, 224, 47, 172, 204, 29, 33, 244, 212, 99, 87, 244, 44, 170}, +{15, 158, 38, 247, 87, 11, 97, 165, 202, 106, 150, 113, 148, 171, 163, 28, 195, 84, 78, 183, 50, 231, 122, 50, 146, 127, 20, 174, 150, 102, 215, 105, 156, 41, 151, 178, 78, 12, 152, 188, 242, 46, 36, 100, 189, 136, 89, 81, 99, 55, 141, 57, 143, 26, 243, 221, 211, 250, 105, 108, 195, 120, 245, 159, 2, 184, 55, 15, 186, 217, 85, 64, 219, 214, 165, 51, 217, 100, 243, 88, 93, 25, 239, 113, 3, 28, 30, 62, 110, 65, 211, 144, 158, 210, 124, 174, 2, 97, 251, 167, 25, 182, 135, 219, 5, 12, 7, 208, 120, 206, 93, 54, 169, 95, 78, 19, 46, 249, 170, 101, 135, 250, 41, 228, 105, 101, 143, 131}, +{1, 79, 156, 99, 86, 156, 211, 92, 177, 234, 46, 194, 191, 40, 248, 50, 78, 225, 79, 34, 26, 78, 142, 117, 84, 246, 58, 230, 103, 156, 198, 181, 10, 44, 105, 72, 204, 7, 188, 35, 210, 77, 144, 49, 213, 220, 2, 86, 32, 26, 254, 70, 84, 82, 168, 230, 254, 26, 192, 238, 195, 23, 124, 136, 102, 120, 239, 254, 173, 115, 180, 247, 230, 9, 79, 156, 177, 42, 178, 191, 108, 131, 233, 215, 230, 14, 154, 208, 227, 67, 246, 244, 85, 85, 64, 163, 187, 245, 247, 84, 171, 142, 100, 126, 248, 173, 246, 14, 229, 251, 100, 115, 67, 44, 67, 35, 239, 207, 58, 124, 58, 148, 164, 120, 143, 168, 176, 173}, +{114, 86, 142, 177, 194, 201, 139, 196, 62, 31, 162, 178, 175, 112, 145, 67, 10, 117, 189, 182, 249, 211, 216, 58, 158, 150, 170, 145, 186, 238, 17, 0, 13, 126, 90, 218, 205, 116, 111, 161, 7, 63, 47, 112, 161, 32, 158, 216, 238, 80, 10, 225, 170, 7, 251, 198, 20, 78, 79, 15, 162, 77, 244, 250, 177, 47, 32, 239, 63, 233, 136, 220, 110, 184, 235, 161, 123, 77, 43, 225, 123, 232, 22, 204, 152, 142, 82, 212, 73, 103, 88, 207, 248, 144, 156, 32, 190, 42, 75, 11, 82, 226, 181, 115, 66, 132, 54, 244, 16, 26, 106, 162, 235, 37, 161, 35, 45, 102, 90, 111, 205, 124, 181, 1, 174, 53, 96, 72}, +{27, 43, 215, 219, 221, 151, 13, 2, 253, 254, 242, 163, 200, 188, 226, 13, 143, 109, 31, 120, 12, 135, 195, 203, 46, 191, 115, 226, 209, 172, 150, 116, 71, 66, 94, 109, 64, 154, 135, 242, 7, 136, 45, 86, 241, 194, 54, 231, 27, 117, 119, 220, 48, 87, 42, 63, 226, 185, 179, 2, 212, 165, 215, 77, 119, 147, 183, 114, 132, 153, 89, 178, 74, 76, 146, 66, 109, 247, 94, 74, 229, 255, 227, 152, 90, 15, 139, 156, 189, 226, 245, 52, 1, 248, 202, 191, 142, 187, 93, 13, 140, 9, 44, 103, 190, 176, 243, 126, 146, 94, 60, 244, 14, 161, 84, 23, 211, 171, 254, 47, 204, 80, 89, 1, 115, 131, 197, 13}, +{125, 51, 208, 112, 136, 245, 203, 14, 63, 84, 145, 149, 77, 10, 40, 64, 92, 37, 104, 103, 161, 195, 204, 65, 40, 127, 79, 8, 122, 93, 126, 226, 199, 8, 214, 97, 51, 89, 162, 97, 51, 5, 210, 102, 246, 207, 168, 169, 15, 254, 54, 127, 138, 14, 255, 122, 103, 40, 219, 1, 131, 22, 19, 54, 240, 177, 168, 27, 24, 29, 245, 170, 124, 148, 210, 199, 253, 153, 251, 11, 11, 174, 219, 126, 10, 207, 157, 53, 26, 244, 223, 241, 105, 207, 127, 203, 215, 6, 236, 102, 195, 129, 79, 170, 217, 241, 112, 214, 247, 71, 178, 223, 212, 201, 50, 179, 2, 92, 233, 231, 62, 167, 44, 236, 62, 125, 23, 245}, +{99, 105, 163, 184, 142, 218, 173, 195, 117, 238, 74, 202, 144, 162, 215, 5, 33, 128, 119, 146, 41, 104, 31, 160, 1, 72, 10, 167, 99, 234, 88, 168, 68, 53, 76, 116, 136, 32, 21, 206, 75, 201, 45, 151, 194, 225, 72, 33, 238, 175, 97, 118, 40, 162, 250, 110, 122, 193, 91, 207, 250, 45, 106, 155, 45, 142, 179, 141, 115, 5, 37, 81, 57, 170, 118, 128, 164, 20, 63, 237, 0, 226, 223, 169, 93, 75, 203, 167, 15, 221, 175, 110, 155, 47, 235, 75, 239, 203, 180, 208, 83, 148, 77, 57, 31, 198, 160, 199, 223, 199, 124, 175, 28, 172, 162, 210, 34, 21, 209, 144, 231, 97, 139, 208, 173, 13, 98, 162}, +{186, 187, 148, 111, 24, 98, 203, 207, 239, 155, 81, 253, 141, 167, 228, 185, 166, 212, 149, 154, 174, 253, 40, 216, 143, 226, 88, 140, 69, 143, 34, 56, 192, 23, 53, 215, 131, 155, 72, 80, 20, 67, 110, 86, 9, 23, 138, 66, 172, 17, 82, 46, 231, 71, 67, 76, 158, 132, 215, 172, 189, 30, 102, 98, 245, 221, 179, 246, 50, 194, 240, 183, 229, 223, 166, 124, 23, 76, 99, 211, 170, 137, 39, 0, 112, 98, 135, 218, 237, 30, 157, 78, 212, 180, 116, 34, 68, 200, 212, 36, 223, 51, 243, 78, 220, 165, 140, 112, 255, 225, 115, 21, 54, 72, 194, 94, 252, 125, 211, 160, 216, 218, 37, 64, 65, 113, 103, 95} diff --git a/tests/testcases/test_file b/tests/testcases/test_file new file mode 100644 index 0000000..9322cf1 Binary files /dev/null and b/tests/testcases/test_file differ diff --git a/tests/testcases/test_file.rsa1024_sha1.sig b/tests/testcases/test_file.rsa1024_sha1.sig new file mode 100644 index 0000000..7c1e9ef Binary files /dev/null and b/tests/testcases/test_file.rsa1024_sha1.sig differ diff --git a/tests/testcases/test_file.rsa1024_sha256.sig b/tests/testcases/test_file.rsa1024_sha256.sig new file mode 100644 index 0000000..112eb89 --- /dev/null +++ b/tests/testcases/test_file.rsa1024_sha256.sig @@ -0,0 +1,3 @@ +$ü¾ªŽâvUmÃ-ÔUq ÁXøhoÃÛ"e/°rc“ô){e—ÑT,î\Õ +š;™oÄCè¯ô¼xá$šE&í¡{É?a>ž£`¸<Ø^ý‹ŒE€Ë +VÆRù!™Ð±À®Âê³FVã³»~N—÷ÒCÕµöU SQ›+ \ No newline at end of file diff --git a/tests/testcases/test_file.rsa1024_sha512.sig b/tests/testcases/test_file.rsa1024_sha512.sig new file mode 100644 index 0000000..1bb708d --- /dev/null +++ b/tests/testcases/test_file.rsa1024_sha512.sig @@ -0,0 +1 @@ +R‰Q&öYôV>1ÅêàJlrhMü‘5…löxØ=IF WãБ5® øÙKæ'°#L)~;b¥üµ½&A‹ï‘êN§¼bÒ‡ródzŒmýÁTɬۤòeú÷X¤øêÌO6‹·™ÑŠsVô֝o!b·³ \ No newline at end of file diff --git a/tests/testcases/test_file.rsa2048_exp3_sha1.sig b/tests/testcases/test_file.rsa2048_exp3_sha1.sig new file mode 100644 index 0000000..75cd3ba Binary files /dev/null and b/tests/testcases/test_file.rsa2048_exp3_sha1.sig differ diff --git a/tests/testcases/test_file.rsa2048_exp3_sha256.sig b/tests/testcases/test_file.rsa2048_exp3_sha256.sig new file mode 100644 index 0000000..1192c8e --- /dev/null +++ b/tests/testcases/test_file.rsa2048_exp3_sha256.sig @@ -0,0 +1,2 @@ +Û »_ñ#ٌ%:ê¥a¨ olÂlnLN¨„A¤UÊ©u4y Ñ·_é02úÛmÔ©Ê*aÿ¶.Ъ‚ÒÉøçõ§aÎÝ-¸ÂÍf@9Á+‰é"×ýù+|+»Yx¡H4¸ðê~ÒÆ›VWÄgÃà¨-LÄQ÷3Ë<ëßtUùˆ”û–G)•×Su®¥7À¤R拆:$—G{ ïî?µµÔ|‹ ªÁ²dXmâåûH \ No newline at end of file diff --git a/tests/testcases/test_file.rsa2048_sha256.sig b/tests/testcases/test_file.rsa2048_sha256.sig new file mode 100644 index 0000000..59efe89 --- /dev/null +++ b/tests/testcases/test_file.rsa2048_sha256.sig @@ -0,0 +1,2 @@ +{Úû<ôªN³CӔIöö7Ì€1{[]ë7”d½ŽxÌA:*°b¢N¹Æî¹™º¨ãm3¡Þzùl”ÆÙ–#Wù‹K§H׈‡9¾6^‚‘wŠp$h™eMõ.HÓf¢ÒÖÁJt—‹|;à<ʪ« y¶’Ñî ½h.}/–øú•#Se+:Á)3ìÔÀ%j)ØZâÏb©‰"Ïç#iœØ +%z“/e@Û@_…)MÆ¶J¡ єė™X›‹>JÛ*H°+Õhu:a¼Á͆;ÂíßF$Éñ#²wD Wø7­æ O«/¼'žêô|Uç/qBEћ=4®Q \ No newline at end of file diff --git a/tests/testcases/test_file.rsa2048_sha512.sig b/tests/testcases/test_file.rsa2048_sha512.sig new file mode 100644 index 0000000..a87d4b8 Binary files /dev/null and b/tests/testcases/test_file.rsa2048_sha512.sig differ diff --git a/tests/testcases/test_file.rsa3072_exp3_sha1.sig b/tests/testcases/test_file.rsa3072_exp3_sha1.sig new file mode 100644 index 0000000..caac8e9 --- /dev/null +++ b/tests/testcases/test_file.rsa3072_exp3_sha1.sig @@ -0,0 +1,3 @@ +Fù šƒbdÉm=È%±ÒŸ>/£ñmÞºzÏJ‹ÕåÂ Q‚5¸ÊJqþ%Ó£O_ô^DrÝIgY;Iª{ {M„œ²šÔ›_ÑY0Ãs½îOø¬ßG÷ú@Í«ö Ûœí®ûIÊ‡¶ê?ƒ»{Y“½Cû»œ#±ê×ë\œ¬¤¢õ n€í¢².bÒ©v廎8 †í4@d7ªU4žð‚Ò³·šq@FÊϦ,à…„YuÃï¯ñzüT ¨B ÿÞÔ àߦùöõÇ`~ØÈŒu³qý´™óà¥{[¢ Ðÿ^‚ +pVïüªQW3îe ª ÙãÞ§ý8‰2„¨xZISn¬JVƒ€d÷%§ìóžöp…QÝô+<íÍ Dë+œ ÙØ‘Ÿ.\־҉„k%×$‡mS„‹_‘ÄH/倫Ä:¹C +J<%½È ­îÿšÕ½²ò"X?Y³þup_éŒJ³SX5pk+>­À+mA¿¡í‘ˍ @ß \ No newline at end of file diff --git a/tests/testcases/test_file.rsa3072_exp3_sha256.sig b/tests/testcases/test_file.rsa3072_exp3_sha256.sig new file mode 100644 index 0000000..67bb39f --- /dev/null +++ b/tests/testcases/test_file.rsa3072_exp3_sha256.sig @@ -0,0 +1,4 @@ +‚Ä>È´5/ˆÐ¢/÷(Œ O¢\4î1~ÞÊvBGK +ýkÓ’’‡›M +ý€B‘¡'ñÑz²¡„rjfQ1Á9ÔºQ¼Ò¾æYF|ÓddUŠJfÚ4ºÀénQGªa]¶Ù*/j‡5/ªÑ˜L‡AwU:£qU3¢+o,¦Ë./åiç_IÓµÍAø&¶5ØÕŽ„ü>JZ#6`õ®|8WíÔÏ]×ûÞké½ml‚ØPà¼<™ƒµëO‹xØH4*”Ì$ŒA(éjÀ¦Êʝ9íÄvª>ž@M²8EîÁ/J~HEËyÆPՅ&myw#ƒ%ñäŠÒKÏúçñîq¯Ÿ÷ŒÈbwÕ m start_time); +} + +void StopTimer(ClockTimerState* ct) { + clock_gettime(CLOCK_REALTIME, &ct->end_time); +} + +uint32_t GetDurationMsecs(ClockTimerState* ct) { + uint64_t start = ((uint64_t) ct->start_time.tv_sec * 1000000000 + + (uint64_t) ct->start_time.tv_nsec); + uint64_t end = ((uint64_t) ct->end_time.tv_sec * 1000000000 + + (uint64_t) ct->end_time.tv_nsec); + uint64_t duration_msecs = (end - start) / 1000000U; /* Nanoseconds -> + * Milliseconds. */ + return (uint32_t) duration_msecs; +} diff --git a/tests/timer_utils.h b/tests/timer_utils.h new file mode 100644 index 0000000..8cafdf9 --- /dev/null +++ b/tests/timer_utils.h @@ -0,0 +1,26 @@ + /* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_TIMER_UTILS_H_ +#define VBOOT_REFERENCE_TIMER_UTILS_H_ + +#include +#include + +typedef struct ClockTimer { + struct timespec start_time; + struct timespec end_time; +} ClockTimerState; + +/* Start timer and update [ct]. */ +void StartTimer(ClockTimerState* ct); + +/* Stop timer and update [ct]. */ +void StopTimer(ClockTimerState* ct); + +/* Get duration in milliseconds. */ +uint32_t GetDurationMsecs(ClockTimerState* ct); + +#endif /* VBOOT_REFERENCE_TIMER_UTILS_H_ */ diff --git a/tests/tlcl_tests.c b/tests/tlcl_tests.c new file mode 100644 index 0000000..328abbe --- /dev/null +++ b/tests/tlcl_tests.c @@ -0,0 +1,1173 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for TPM lite library + */ + +#include +#include +#include +#include + +#include "2api.h" +#include "host_common.h" +#include "test_common.h" +#include "tlcl.h" +#include "tlcl_internal.h" + +/* Mock data */ +static char debug_info[4096]; +static vb2_error_t mock_retval; + +/* Call to mocked vb2ex_tpm_send_recv() */ +struct srcall +{ + const uint8_t *req; /* Request */ + uint8_t *rsp; /* Response */ + uint8_t rsp_buf[32]; /* Default response buffer, if not overridden */ + int req_size; /* Request size */ + uint32_t req_cmd; /* Request command code */ + int rsp_size; /* Response size */ + vb2_error_t retval; /* Value to return */ +}; + +#define MAXCALLS 8 +static struct srcall calls[MAXCALLS]; +static int ncalls; + +/** + * Reset mock data (for use before each test) + */ +static void ResetMocks(void) +{ + int i; + + *debug_info = 0; + mock_retval = VB2_SUCCESS; + + memset(calls, 0, sizeof(calls)); + for (i = 0; i < MAXCALLS; i++) + calls[i].rsp = calls[i].rsp_buf; + ncalls = 0; +} + +/** + * Set response code and length for call . + */ +static void SetResponse(int call_idx, uint32_t response_code, int rsp_size) +{ + struct srcall *c = calls + call_idx; + + c->rsp_size = rsp_size; + ToTpmUint32(c->rsp_buf + 6, response_code); +} + +/* Mocks */ + +vb2_error_t vb2ex_tpm_init(void) +{ + return mock_retval; +} + +vb2_error_t vb2ex_tpm_close(void) +{ + return mock_retval; +} + +uint32_t vb2ex_tpm_send_recv(const uint8_t *request, uint32_t request_length, + uint8_t *response, uint32_t *response_length) +{ + struct srcall *c = calls + ncalls++; + + c->req = request; + c->req_size = request_length; + + /* Parse out the command code */ + FromTpmUint32(request + 6, &c->req_cmd); + + // KLUDGE - remove + printf("TSR [%d] %#x\n", ncalls-1, c->req_cmd); + + memset(response, 0, *response_length); + if (c->rsp_size) + memcpy(response, c->rsp, c->rsp_size); + *response_length = c->rsp_size; + + return c->retval; +} + +vb2_error_t vb2ex_tpm_get_random(uint8_t *buf, uint32_t length) +{ + memset(buf, 0xa5, length); + return VB2_SUCCESS; +} + +/** + * Test assorted tlcl functions + */ +static void TlclTest(void) +{ + uint8_t buf[32], buf2[32]; + + ResetMocks(); + TEST_EQ(TlclLibInit(), VB2_SUCCESS, "Init"); + + ResetMocks(); + mock_retval = VB2_ERROR_MOCK; + TEST_EQ(TlclLibInit(), mock_retval, "Init bad"); + + ResetMocks(); + TEST_EQ(TlclLibClose(), VB2_SUCCESS, "Close"); + + ResetMocks(); + mock_retval = VB2_ERROR_MOCK; + TEST_EQ(TlclLibClose(), mock_retval, "Close bad"); + + ResetMocks(); + ToTpmUint32(buf + 2, 123); + TEST_EQ(TlclPacketSize(buf), 123, "TlclPacketSize"); + + ResetMocks(); + ToTpmUint32(buf + 2, 10); + TEST_EQ(TlclSendReceive(buf, buf2, sizeof(buf2)), 0, "SendReceive"); + TEST_PTR_EQ(calls[0].req, buf, "SendReceive req ptr"); + TEST_EQ(calls[0].req_size, 10, "SendReceive size"); + + ResetMocks(); + calls[0].retval = VB2_ERROR_MOCK; + ToTpmUint32(buf + 2, 10); + TEST_EQ(TlclSendReceive(buf, buf2, sizeof(buf2)), VB2_ERROR_MOCK, + "SendReceive fail"); + + ResetMocks(); + SetResponse(0, 123, 10); + ToTpmUint32(buf + 2, 10); + TEST_EQ(TlclSendReceive(buf, buf2, sizeof(buf2)), 123, + "SendReceive error response"); + + // TODO: continue self test (if needed or doing) + // TODO: then retry doing self test + +} + + +/** + * Test send-command functions + */ +static void SendCommandTest(void) +{ + ResetMocks(); + TEST_EQ(TlclStartup(), 0, "SaveState"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_Startup, " cmd"); + + ResetMocks(); + TEST_EQ(TlclSaveState(), 0, "SaveState"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_SaveState, " cmd"); + + ResetMocks(); + TEST_EQ(TlclResume(), 0, "Resume"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_Startup, " cmd"); + + ResetMocks(); + TEST_EQ(TlclSelfTestFull(), 0, "SelfTestFull"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_SelfTestFull, " cmd"); + + ResetMocks(); + TEST_EQ(TlclContinueSelfTest(), 0, "ContinueSelfTest"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_ContinueSelfTest, " cmd"); + + ResetMocks(); + TEST_EQ(TlclAssertPhysicalPresence(), 0, + "AssertPhysicalPresence"); + TEST_EQ(calls[0].req_cmd, TSC_ORD_PhysicalPresence, " cmd"); + + ResetMocks(); + TEST_EQ(TlclPhysicalPresenceCMDEnable(), 0, + "PhysicalPresenceCMDEnable"); + TEST_EQ(calls[0].req_cmd, TSC_ORD_PhysicalPresence, " cmd"); + + ResetMocks(); + TEST_EQ(TlclFinalizePhysicalPresence(), 0, + "FinalizePhysicalPresence"); + TEST_EQ(calls[0].req_cmd, TSC_ORD_PhysicalPresence, " cmd"); + + ResetMocks(); + TEST_EQ(TlclAssertPhysicalPresenceResult(), 0, + "AssertPhysicalPresenceResult"); + TEST_EQ(calls[0].req_cmd, TSC_ORD_PhysicalPresence, " cmd"); + + ResetMocks(); + TEST_EQ(TlclLockPhysicalPresence(), 0, + "LockPhysicalPresence"); + TEST_EQ(calls[0].req_cmd, TSC_ORD_PhysicalPresence, " cmd"); + + ResetMocks(); + TEST_EQ(TlclIsOwned(), 0, "IsOwned"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_ReadPubek, " cmd"); + ResetMocks(); + calls[0].retval = VB2_ERROR_MOCK; + TEST_NEQ(TlclIsOwned(), 0, "IsOwned"); + + ResetMocks(); + TEST_EQ(TlclForceClear(), 0, "ForceClear"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_ForceClear, " cmd"); + + ResetMocks(); + TEST_EQ(TlclSetEnable(), 0, "SetEnable"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_PhysicalEnable, " cmd"); + + ResetMocks(); + TEST_EQ(TlclClearEnable(), 0, "ClearEnable"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_PhysicalDisable, " cmd"); + + ResetMocks(); + TEST_EQ(TlclSetDeactivated(0), 0, "SetDeactivated"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_PhysicalSetDeactivated, " cmd"); +} + +/** + * NV spaces test + * + * TODO: check params/data read/written. + */ +static void ReadWriteTest(void) +{ + uint8_t buf[32]; + + ResetMocks(); + TEST_EQ(TlclDefineSpace(1, 2, 3), 0, "DefineSpace"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_NV_DefineSpace, " cmd"); + + ResetMocks(); + TEST_EQ(TlclUndefineSpace(1), 0, "UndefineSpace"); + // TPM1.2 use TPM_ORD_NV_DefineSpace with size 0 to delete space + TEST_EQ(calls[0].req_cmd, TPM_ORD_NV_DefineSpace, " cmd"); + + ResetMocks(); + TEST_EQ(TlclSetNvLocked(), 0, "SetNvLocked"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_NV_DefineSpace, " cmd"); + + ResetMocks(); + TEST_EQ(TlclWrite(1, buf, 3), 0, "Write"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_NV_WriteValue, " cmd"); + + ResetMocks(); + TEST_EQ(TlclRead(1, buf, 3), 0, "Read"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_NV_ReadValue, " cmd"); + + ResetMocks(); + TEST_EQ(TlclWriteLock(1), 0, "WriteLock"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_NV_WriteValue, " cmd"); + + ResetMocks(); + TEST_EQ(TlclReadLock(1), 0, "ReadLock"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_NV_ReadValue, " cmd"); + + ResetMocks(); + TEST_EQ(TlclSetGlobalLock(), 0, "SetGlobalLock"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_NV_WriteValue, " cmd"); +} + +/** + * Test DefineSpaceEx + */ +static void DefineSpaceExTest(void) { + uint8_t osap_response[] = { + 0x00, 0xc4, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x41, 0x3d, 0xce, 0x20, 0xa2, + 0x5a, 0xa5, 0x95, 0xbe, 0x26, 0xe8, 0x76, 0x74, + 0x6c, 0x61, 0xf7, 0xa7, 0x24, 0x17, 0xa1, 0x06, + 0xcf, 0x53, 0x6d, 0xd4, 0x26, 0x98, 0x68, 0x86, + 0xe6, 0xf6, 0x62, 0x58, 0xdb, 0xa2, 0x9f, 0x5b, + 0x18, 0xa6, 0xae, 0x36, 0x32, 0x5d, + }; + uint8_t define_space_response[] = { + 0x00, 0xc5, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, + 0x00, 0x00, 0x42, 0xe6, 0x38, 0xc6, 0x37, 0x2a, + 0xf2, 0xfe, 0xb4, 0x01, 0x4b, 0x29, 0x63, 0x30, + 0x4e, 0x2f, 0x2e, 0x74, 0x58, 0xcd, 0x00, 0x40, + 0x42, 0x10, 0x40, 0xac, 0x93, 0x0c, 0xff, 0x8a, + 0xc4, 0x98, 0x78, 0xe3, 0xfe, 0x48, 0x5b, 0xb7, + 0xc8, 0x8d, 0xf4, + }; + uint8_t owner_secret[TPM_AUTH_DATA_LEN] = { 0 }; + TPM_NV_AUTH_POLICY policy; + + ResetMocks(); + calls[0].rsp = osap_response; + calls[0].rsp_size = sizeof(osap_response); + calls[1].rsp = define_space_response; + calls[1].rsp_size = sizeof(define_space_response); + TEST_EQ(TlclDefineSpaceEx(owner_secret, sizeof(owner_secret), + 0x20000005, 0x2000, 0x10, NULL, 0), + TPM_SUCCESS, "DefineSpace"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_OSAP, " osap cmd"); + TEST_EQ(calls[1].req_cmd, TPM_ORD_NV_DefineSpace, " definespace cmd"); + + /* Pass an auth policy. */ + ResetMocks(); + calls[0].rsp = osap_response; + calls[0].rsp_size = sizeof(osap_response); + calls[1].rsp = define_space_response; + calls[1].rsp_size = sizeof(define_space_response); + TEST_EQ(TlclDefineSpaceEx(owner_secret, sizeof(owner_secret), + 0x20000005, 0x2000, 0x10, &policy, + sizeof(policy)), + TPM_SUCCESS, "DefineSpace"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_OSAP, " osap cmd"); + TEST_EQ(calls[1].req_cmd, TPM_ORD_NV_DefineSpace, " definespace cmd"); + + /* Verify that the response gets authenticated. */ + ResetMocks(); + calls[0].rsp = osap_response; + calls[0].rsp_size = sizeof(osap_response); + calls[1].rsp = define_space_response; + calls[1].rsp_size = sizeof(define_space_response); + define_space_response[31] = 0; + TEST_EQ(TlclDefineSpaceEx(owner_secret, sizeof(owner_secret), + 0x20000005, 0x2000, 0x10, NULL, 0), + TPM_E_AUTHFAIL, "DefineSpace - response auth"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_OSAP, " osap cmd"); + TEST_EQ(calls[1].req_cmd, TPM_ORD_NV_DefineSpace, " definespace cmd"); + define_space_response[31] = 0x40; + + /* Verify that a short OSAP response gets caught. */ + ResetMocks(); + calls[0].rsp = osap_response; + calls[0].rsp_size = sizeof(osap_response); + ToTpmUint32(osap_response + sizeof(uint16_t), + kTpmRequestHeaderLength + sizeof(uint32_t) + + 2 * sizeof(TPM_NONCE) - 1); + TEST_EQ(TlclDefineSpaceEx(owner_secret, sizeof(owner_secret), + 0x20000005, 0x2000, 0x10, NULL, 0), + TPM_E_INVALID_RESPONSE, "DefineSpace - short OSAP response"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_OSAP, " osap cmd"); + ToTpmUint32(osap_response + sizeof(uint16_t), sizeof(osap_response)); + + /* Verify that a short DefineSpace response gets caught. */ + ResetMocks(); + calls[0].rsp = osap_response; + calls[0].rsp_size = sizeof(osap_response); + calls[1].rsp = define_space_response; + calls[1].rsp_size = sizeof(define_space_response); + ToTpmUint32(define_space_response + sizeof(uint16_t), + kTpmResponseHeaderLength + kTpmResponseAuthBlockLength - 1); + TEST_EQ(TlclDefineSpaceEx(owner_secret, sizeof(owner_secret), + 0x20000005, 0x2000, 0x10, NULL, 0), + TPM_E_INVALID_RESPONSE, + "DefineSpace - short DefineSpace response"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_OSAP, " osap cmd"); + TEST_EQ(calls[1].req_cmd, TPM_ORD_NV_DefineSpace, " definespace cmd"); + ToTpmUint32(define_space_response + sizeof(uint16_t), + sizeof(define_space_response)); +} + +/** + * Test TlclInitNvAuthPolicy. + */ +static void InitNvAuthPolicyTest(void) { + const uint8_t empty_selection_digest[] = { + 0x79, 0xdd, 0xda, 0xfd, 0xc1, 0x97, 0xdc, 0xcc, + 0xe9, 0x98, 0x9a, 0xee, 0xf5, 0x52, 0x89, 0xee, + 0x24, 0x96, 0x4c, 0xac, + }; + const uint8_t pcr0_selection_digest[] = { + 0xb3, 0x2b, 0x96, 0x30, 0xd3, 0x21, 0x1e, 0x99, + 0x78, 0x9e, 0xd3, 0x1f, 0x11, 0x8e, 0x96, 0xbc, + 0xf7, 0x7e, 0x7b, 0x06, + }; + const uint8_t empty_selection_encoding[] = { 0x0, 0x0, 0x0 }; + const uint8_t pcr0_selection_encoding[] = { 0x1, 0x0, 0x0 }; + const uint8_t pcr_values[][TPM_PCR_DIGEST] = { + { 0x06, 0x4a, 0xec, 0x9b, 0xbd, 0x94, 0xde, 0xa1, + 0x23, 0x1a, 0xe7, 0x57, 0x67, 0x64, 0x7f, 0x09, + 0x8c, 0x39, 0x8e, 0x79, }, + }; + TPM_NV_AUTH_POLICY policy; + + /* Test empty selection. */ + uint32_t policy_size = sizeof(policy); + TlclInitNvAuthPolicy(0x0, NULL, &policy, &policy_size); + TEST_EQ(policy_size, sizeof(policy), "policy size"); + + uint16_t size_of_select; + FromTpmUint16( + (uint8_t*)&policy.pcr_info_read.pcrSelection.sizeOfSelect, + &size_of_select); + TEST_EQ(size_of_select, 3, "empty PCR selection read size of select"); + TEST_EQ(memcmp(policy.pcr_info_read.pcrSelection.pcrSelect, + empty_selection_encoding, + sizeof(empty_selection_encoding)), 0, + "empty PCR selection read selection encoding"); + TEST_EQ(policy.pcr_info_read.localityAtRelease, + TPM_ALL_LOCALITIES & ~TPM_LOC_THREE, + "empty PCR selection read locality"); + TEST_EQ(memcmp(empty_selection_digest, + policy.pcr_info_read.digestAtRelease.digest, + TPM_PCR_DIGEST), + 0, "empty PCR selection read digest"); + + FromTpmUint16( + (uint8_t*)&policy.pcr_info_write.pcrSelection.sizeOfSelect, + &size_of_select); + TEST_EQ(size_of_select, 3, "empty PCR selection write size of select"); + TEST_EQ(memcmp(policy.pcr_info_write.pcrSelection.pcrSelect, + empty_selection_encoding, + sizeof(empty_selection_encoding)), 0, + "empty PCR selection write selection encoding"); + TEST_EQ(policy.pcr_info_write.localityAtRelease, + TPM_ALL_LOCALITIES & ~TPM_LOC_THREE, + "empty PCR selection write locality"); + TEST_EQ(memcmp(empty_selection_digest, + policy.pcr_info_write.digestAtRelease.digest, + TPM_PCR_DIGEST), + 0, "empty PCR selection write digest"); + + /* Test PCR0 selection. */ + TlclInitNvAuthPolicy(0x1, pcr_values, &policy, &policy_size); + TEST_EQ(policy_size, sizeof(policy), "policy size"); + + TEST_EQ(memcmp(policy.pcr_info_read.pcrSelection.pcrSelect, + pcr0_selection_encoding, + sizeof(pcr0_selection_encoding)), 0, + "PCR0 selection read selection encoding"); + TEST_EQ(memcmp(pcr0_selection_digest, + policy.pcr_info_read.digestAtRelease.digest, + TPM_PCR_DIGEST), + 0, "PCR0 selection read digest"); + + TEST_EQ(memcmp(policy.pcr_info_write.pcrSelection.pcrSelect, + pcr0_selection_encoding, + sizeof(pcr0_selection_encoding)), 0, + "PCR0 selection write selection encoding"); + TEST_EQ(memcmp(pcr0_selection_digest, + policy.pcr_info_write.digestAtRelease.digest, + TPM_PCR_DIGEST), + 0, "PCR0 selection write digest"); +} + +/** + * Test PCR funcs + * + * TODO: check params/data read/written. + */ +static void PcrTest(void) +{ + uint8_t buf[kPcrDigestLength], buf2[kPcrDigestLength]; + + ResetMocks(); + TEST_EQ(TlclPCRRead(1, buf, kPcrDigestLength), 0, "PCRRead"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_PcrRead, " cmd"); + + ResetMocks(); + TEST_EQ(TlclPCRRead(1, buf, kPcrDigestLength - 1), TPM_E_IOERROR, + "PCRRead too small"); + + ResetMocks(); + TEST_EQ(TlclExtend(1, buf, buf2), 0, "Extend"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_Extend, " cmd"); +} + +/** + * Test TlclGetSpaceInfo. + */ +static void GetSpaceInfoTest(void) +{ + uint8_t response[] = { + 0x00, 0xc4, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x18, + 0x20, 0x00, 0x00, 0x04, 0x00, 0x03, 0x01, 0x00, + 0x00, 0x01, 0xb3, 0x2b, 0x96, 0x30, 0xd3, 0x21, + 0x1e, 0x99, 0x78, 0x9e, 0xd3, 0x1f, 0x11, 0x8e, + 0x96, 0xbc, 0xf7, 0x7e, 0x7b, 0x06, 0x00, 0x03, + 0x20, 0x00, 0x00, 0x10, 0x3b, 0xb2, 0x69, 0x03, + 0x3d, 0x12, 0xe1, 0x99, 0x87, 0xe9, 0x3d, 0xf1, + 0x11, 0xe8, 0x69, 0xcb, 0x7f, 0xe7, 0xb7, 0x60, + 0x00, 0x17, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x45, + }; + + uint32_t attributes = 0; + uint32_t size = 0; + TPM_NV_AUTH_POLICY policy; + uint32_t policy_size = sizeof(policy); + + /* Test successful parsing. */ + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + TEST_EQ(TlclGetSpaceInfo(0x20000004, &attributes, &size, &policy, + &policy_size), + TPM_SUCCESS, "GetSpaceInfo"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_GetCapability, " cmd"); + TEST_EQ(policy_size, sizeof(policy), " policy_size"); + TEST_EQ(attributes, TPM_NV_PER_WRITEDEFINE, " attributes"); + TEST_EQ(size, 0x45, " size"); + TEST_EQ(memcmp(&policy, response + 20, sizeof(policy)), 0, " policy"); + + /* Test that GetPermissions returns the attributes as well. */ + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + TEST_EQ(TlclGetPermissions(0x20000004, &attributes), + TPM_SUCCESS, "GetPermissions"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_GetCapability, " cmd"); + TEST_EQ(attributes, TPM_NV_PER_WRITEDEFINE, " attributes"); + + /* Test whether a short response gets detected. */ + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + ToTpmUint32(response + 10, 0x46); + TEST_EQ(TlclGetSpaceInfo(0x20000004, &attributes, &size, &policy, + &policy_size), + TPM_E_INVALID_RESPONSE, "GetSpaceInfo short length"); + ToTpmUint32(response + 10, 0x47); + + /* Test whether an overlong PCR selection length causes failure. */ + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + ToTpmUint16(response + 20, 4); + TEST_EQ(TlclGetSpaceInfo(0x20000004, &attributes, &size, &policy, + &policy_size), + TPM_E_INVALID_RESPONSE, "GetSpaceInfo overlong pcr selection"); + ToTpmUint16(response + 20, 3); + + /* Test that a short policy buffer triggers an error. */ + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + policy_size = sizeof(policy) - 1; + TEST_EQ(TlclGetSpaceInfo(0x20000004, &attributes, &size, &policy, + &policy_size), + TPM_E_BUFFER_SIZE, "GetSpaceInfo short policy buffer"); + TEST_EQ(sizeof(policy), policy_size, " policy_size"); +} + +/** + * Test flags / capabilities + * + * TODO: check params/data read/written. + */ +static void FlagsTest(void) +{ + TPM_PERMANENT_FLAGS pflags; + TPM_STCLEAR_FLAGS vflags; + uint8_t disable = 0, deactivated = 0, nvlocked = 0; + uint8_t buf[32]; + + ResetMocks(); + TEST_EQ(TlclGetPermanentFlags(&pflags), 0, "GetPermanentFlags"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_GetCapability, " cmd"); + + ResetMocks(); + TEST_EQ(TlclGetSTClearFlags(&vflags), 0, "GetSTClearFlags"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_GetCapability, " cmd"); + + ResetMocks(); + TEST_EQ(TlclGetFlags(NULL, NULL, NULL), 0, "GetFlags NULL"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_GetCapability, " cmd"); + ResetMocks(); + TEST_EQ(TlclGetFlags(&disable, &deactivated, &nvlocked), 0, "GetFlags"); + + ResetMocks(); + TEST_EQ(TlclGetOwnership(buf), 0, "GetOwnership"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_GetCapability, " cmd"); +} + +/** + * Test random + * + * TODO: check params/data read/written. + * TODO: check overflow tests. + */ +static void RandomTest(void) +{ + uint8_t buf[32]; + uint32_t size; + + ResetMocks(); + size = sizeof(buf); + TEST_EQ(TlclGetRandom(buf, sizeof(buf), &size), 0, "GetRandom"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_GetRandom, " cmd"); + TEST_EQ(size, 0, " size 0"); +} + +/** + * Test GetVersion + */ +static void GetVersionTest(void) +{ + uint8_t response[] = { + 0x00, 0xc4, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x30, + 0x01, 0x02, 0x04, 0x20, 0x00, 0x02, 0x03, 0x49, + 0x46, 0x58, 0x00, 0x00, 0x0d, 0x04, 0x20, 0x03, + 0x6f, 0x00, 0x74, 0x70, 0x6d, 0x33, 0x38, 0xff, + 0xff, 0xff + }; + + uint32_t vendor; + uint64_t firmware_version; + uint8_t vendor_specific[32]; + size_t vendor_specific_size; + + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + TEST_EQ(TlclGetVersion(&vendor, &firmware_version, NULL, NULL), 0, + "GetVersion"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_GetCapability, " cmd"); + TEST_EQ(vendor, 0x49465800, " vendor"); + TEST_EQ(firmware_version, 0x420, " firmware_version"); + + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + vendor_specific_size = 100; + TEST_EQ(TlclGetVersion(&vendor, &firmware_version, + NULL, &vendor_specific_size), 0, + "GetVersion - vendor specific size"); + TEST_EQ(vendor_specific_size, 0xd, " vendor specific size"); + + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + vendor_specific_size = sizeof(vendor_specific); + TEST_EQ(TlclGetVersion(&vendor, &firmware_version, + vendor_specific, &vendor_specific_size), 0, + "GetVersion - vendor specific data"); + TEST_EQ(vendor_specific_size, 0xd, " vendor specific size"); + TEST_EQ(memcmp(vendor_specific, response + 29, 0xd), 0, + " vendor specific data check"); + + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + vendor_specific_size = 4; + TEST_EQ(TlclGetVersion(&vendor, &firmware_version, + vendor_specific, &vendor_specific_size), 0, + "GetVersion - vendor specific data, short buf"); + TEST_EQ(vendor_specific_size, 4, + " min(vendor specific size, buf size)"); + TEST_EQ(memcmp(vendor_specific, response + 29, 4), 0, + " vendor specific data check"); + + ResetMocks(); + SetResponse(0, TPM_E_IOERROR, 0); + TEST_EQ(TlclGetVersion(&vendor, &firmware_version, NULL, NULL), + TPM_E_IOERROR, "GetVersion - error"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_GetCapability, " cmd"); + + /* Adjust response to indicate a 1 byte too short payload size. */ + ToTpmUint32(response + kTpmResponseHeaderLength, 14); + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + TEST_EQ(TlclGetVersion(&vendor, &firmware_version, NULL, NULL), + TPM_E_IOERROR, "GetVersion -- short"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_GetCapability, " cmd"); + + /* Adjust response to indicate a payload size too long for the + * response buffer. */ + ToTpmUint32(response + kTpmResponseHeaderLength, + TPM_LARGE_ENOUGH_COMMAND_SIZE - sizeof(uint32_t) - + kTpmResponseHeaderLength + 1); + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + TEST_EQ(TlclGetVersion(&vendor, &firmware_version, NULL, NULL), + TPM_E_IOERROR, "GetVersion -- long"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_GetCapability, " cmd"); + + /* Restore the original payload length and adjust response to contain + * less vendor specific data than indicated in its size. */ + ToTpmUint32(response + kTpmResponseHeaderLength, 0x1c); + ToTpmUint16(response + 27, 0xd + 1); + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + TEST_EQ(TlclGetVersion(&vendor, &firmware_version, + NULL, &vendor_specific_size), TPM_E_IOERROR, + "GetVersion -- short with vendor specific"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_GetCapability, " cmd"); +} + +/** + * Test IFX FieldUpgradeInfoRequest2 + */ +static void IFXFieldUpgradeInfoTest(void) +{ + uint8_t version_response[] = { + 0x00, 0xc4, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x30, + 0x01, 0x02, 0x04, 0x20, 0x00, 0x02, 0x03, 0x49, + 0x46, 0x58, 0x00, 0x00, 0x0d, 0x04, 0x20, 0x03, + 0x6f, 0x00, 0x74, 0x70, 0x6d, 0x33, 0x38, 0xff, + 0xff, 0xff + }; + uint8_t upgrade_info_response[] = { + 0x00, 0xc4, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x6a, 0x03, 0x02, 0x04, 0x9c, + 0x04, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xee, 0xee, 0x5a, 0x3c, + 0x04, 0x01, 0x02, 0x00, 0x00, 0x00, 0x08, 0x32, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f + }; + + ResetMocks(); + calls[0].rsp = version_response; + calls[0].rsp_size = sizeof(version_response); + calls[1].rsp = upgrade_info_response; + calls[1].rsp_size = sizeof(upgrade_info_response); + TPM_IFX_FIELDUPGRADEINFO info; + TEST_EQ(TlclIFXFieldUpgradeInfo(&info), 0, "IFXFieldUpgradeInfo"); + TEST_EQ(calls[1].req_cmd, TPM_ORD_FieldUpgrade, " cmd"); + TEST_EQ(info.wMaxDataSize, 1180, " wMaxDatasize"); + TEST_EQ(info.sBootloaderFirmwarePackage.FwPackageIdentifier, 0x50100, + " bootloader FWPackageIdeintifier"); + TEST_EQ(info.sBootloaderFirmwarePackage.Version, 0xffff, + " bootloader Version"); + TEST_EQ(info.sBootloaderFirmwarePackage.StaleVersion, 0x0, + " bootloader StaleVersion"); + TEST_EQ(info.sFirmwarePackages[0].FwPackageIdentifier, 0x4010100, + " fw[0] FWPackageIdeintifier"); + TEST_EQ(info.sFirmwarePackages[0].Version, 0xbe, + " fw[0] Version"); + TEST_EQ(info.sFirmwarePackages[0].StaleVersion, 0x0, + " fw[0] StaleVersion"); + TEST_EQ(info.sFirmwarePackages[1].FwPackageIdentifier, 0x4010200, + " fw[1] FWPackageIdeintifier"); + TEST_EQ(info.sFirmwarePackages[1].Version, 0x0, + " fw[1] Version"); + TEST_EQ(info.sFirmwarePackages[1].StaleVersion, 0xffffeeee, + " fw[1] StaleVersion"); + TEST_EQ(info.wSecurityModuleStatus, 0x5a3c, " wSecurityModuleStatus"); + TEST_EQ(info.sProcessFirmwarePackage.FwPackageIdentifier, 0x4010200, + " process FWPackageIdeintifier"); + TEST_EQ(info.sProcessFirmwarePackage.Version, 0x832, + " process Version"); + TEST_EQ(info.sProcessFirmwarePackage.StaleVersion, 0x0, + " process StaleVersion"); + TEST_EQ(info.wFieldUpgradeCounter, 0x3f, " wFieldUpgradeCounter"); + + ResetMocks(); + calls[0].rsp = version_response; + calls[0].rsp_size = sizeof(version_response); + SetResponse(1, TPM_E_IOERROR, sizeof(upgrade_info_response) - 1); + TEST_EQ(TlclIFXFieldUpgradeInfo(&info), TPM_E_IOERROR, + "IFXFieldUpgradeInfo - error"); + TEST_EQ(calls[1].req_cmd, TPM_ORD_FieldUpgrade, " cmd"); + + /* Adjust response to indicate a 1 byte too short payload size. */ + ToTpmUint16(upgrade_info_response + kTpmRequestHeaderLength, + sizeof(upgrade_info_response) - kTpmRequestHeaderLength - + sizeof(uint16_t) - 1); + ResetMocks(); + calls[0].rsp = version_response; + calls[0].rsp_size = sizeof(version_response); + calls[1].rsp = upgrade_info_response; + calls[1].rsp_size = sizeof(upgrade_info_response); + TEST_EQ(TlclIFXFieldUpgradeInfo(&info), TPM_E_INVALID_RESPONSE, + "IFXFieldUpgradeInfo - short"); + TEST_EQ(calls[1].req_cmd, TPM_ORD_FieldUpgrade, " cmd"); + + /* Adjust version response to claim a non-IFX vendor. */ + ToTpmUint32(version_response + kTpmResponseHeaderLength + + sizeof(uint32_t), 0); + ResetMocks(); + calls[0].rsp = version_response; + calls[0].rsp_size = sizeof(version_response); + TEST_EQ(TlclIFXFieldUpgradeInfo(&info), TPM_E_INVALID_RESPONSE, + "IFXFieldUpgradeInfo - bad vendor"); + TEST_EQ(calls[1].req_cmd, TPM_ORD_FieldUpgrade, " cmd"); +} + +/** + * Test ReadPubek + */ +static void ReadPubekTest(void) { + uint8_t response[] = { + 0x00, 0xc4, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x9c, 0xa8, + 0x8f, 0x15, 0x6d, 0xbf, 0x37, 0x6f, 0x8d, 0xb7, + 0xb2, 0xe2, 0x79, 0x81, 0xf7, 0xc2, 0x3c, 0x84, + 0x64, 0x35, 0x38, 0x59, 0x6a, 0x87, 0x23, 0xe0, + 0x2a, 0xca, 0x40, 0x37, 0x78, 0x75, 0x18, 0xfc, + 0x2d, 0xbe, 0x2b, 0xd9, 0x77, 0x49, 0x4b, 0x8c, + 0xea, 0xe3, 0xcd, 0xa5, 0x27, 0x2b, 0x48, 0x2f, + 0xbe, 0x3b, 0x14, 0xca, 0xe5, 0x22, 0x31, 0xb8, + 0xa1, 0x14, 0xc6, 0x06, 0x8d, 0x14, 0xe8, 0x4a, + 0x36, 0x4d, 0xd3, 0x5f, 0xde, 0x23, 0xd1, 0x7b, + 0xec, 0x3b, 0xdd, 0x84, 0xa4, 0xd4, 0xe9, 0x9a, + 0x89, 0x94, 0x5c, 0xa0, 0x01, 0xfb, 0x95, 0x61, + 0x01, 0xaf, 0x6b, 0x17, 0x39, 0x44, 0x7e, 0x25, + 0x9b, 0x73, 0xfa, 0xde, 0x20, 0xb6, 0x92, 0x95, + 0x7b, 0x76, 0x9f, 0x44, 0xb0, 0xfb, 0x86, 0x9f, + 0xc5, 0xe2, 0x38, 0x9d, 0xcf, 0xce, 0x32, 0x53, + 0x3b, 0x3d, 0x10, 0xb7, 0x89, 0x53, 0x54, 0xc0, + 0x28, 0x52, 0xfc, 0x7a, 0xa9, 0x5b, 0x03, 0xd7, + 0x55, 0x2b, 0x07, 0xa7, 0x22, 0x5b, 0x1e, 0xe5, + 0x4f, 0x43, 0x70, 0x7d, 0x81, 0xbb, 0x3d, 0x56, + 0xfe, 0x5c, 0x47, 0xcc, 0xc0, 0x6e, 0xc8, 0xc7, + 0xd9, 0x96, 0x53, 0x2d, 0xd2, 0x28, 0xc7, 0xdf, + 0x5a, 0x07, 0x50, 0x3b, 0x17, 0x25, 0xe7, 0x51, + 0xed, 0xf7, 0x94, 0x02, 0x2a, 0x4c, 0x31, 0x57, + 0x34, 0x51, 0x05, 0x26, 0x43, 0xd4, 0x40, 0x47, + 0x3e, 0x02, 0xfe, 0xa5, 0x08, 0xc7, 0x94, 0xaa, + 0xd3, 0x14, 0x02, 0x1b, 0x41, 0x4c, 0xcd, 0xd6, + 0x8c, 0xad, 0x8e, 0x72, 0x1a, 0x36, 0xc7, 0x23, + 0xd1, 0x38, 0x83, 0x9f, 0xac, 0x66, 0xc5, 0x25, + 0x82, 0x9d, 0x18, 0x67, 0x78, 0xca, 0x15, 0x63, + 0x15, 0xd8, 0x83, 0xbd, 0xcc, 0xe7, 0xf7, 0xe9, + 0xba, 0xda, 0x23, 0xdf, 0x53, 0x30, 0x51, 0x1a, + 0xf1, 0x0c, 0x02, 0xe7, 0x65, 0x0d, 0x95, 0x52, + 0x76, 0xd1, 0x1b, 0xb0, 0x77, 0xba, 0x31, 0x0b, + 0x17, 0xb5, 0x63, 0x0d, 0x50, 0x7c, 0xbc, 0x63, + 0xbf, 0xc3, + }; + uint32_t exponent = 0; + uint8_t modulus[TPM_RSA_2048_LEN]; + uint32_t modulus_size = TPM_RSA_2048_LEN; + + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + TEST_EQ(TlclReadPubek(&exponent, modulus, &modulus_size), TPM_SUCCESS, + "ReadPubek"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_ReadPubek, " cmd"); + TEST_EQ(exponent, 0x10001, " exponent"); + TEST_EQ(memcmp(modulus, response + 38, sizeof(modulus)), TPM_SUCCESS, + " modulus"); + TEST_EQ(modulus_size, 0x100, " modulus_size"); + + /* Test that the command returns the full size of the modulus if the + * input buffer is too small. */ + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + modulus_size = 0; + TEST_EQ(TlclReadPubek(&exponent, NULL, &modulus_size), + TPM_E_BUFFER_SIZE, "ReadPubek - returns modulus size"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_ReadPubek, " cmd"); + TEST_EQ(modulus_size, 0x100, " modulus_size"); + + /* Test that a too large parm_size value gets handled correctly. */ + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + ToTpmUint32(response + 18, 1 << 24); + TEST_EQ(TlclReadPubek(&exponent, NULL, &modulus_size), + TPM_E_INVALID_RESPONSE, "ReadPubek - large parm_size"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_ReadPubek, " cmd"); + ToTpmUint32(response + 18, 12); + + /* Test that a too small parm_size value gets handled correctly. */ + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + ToTpmUint32(response + 18, 11); + TEST_EQ(TlclReadPubek(&exponent, NULL, &modulus_size), + TPM_E_INVALID_RESPONSE, "ReadPubek - small parm_size"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_ReadPubek, " cmd"); + ToTpmUint32(response + 18, 12); + + /* Test that an overlong modulus size gets handled correctly. */ + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + ToTpmUint32(response + 34, 1 << 24); + modulus_size = sizeof(modulus); + TEST_EQ(TlclReadPubek(&exponent, NULL, &modulus_size), + TPM_E_INVALID_RESPONSE, "ReadPubek - large modulus size"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_ReadPubek, " cmd"); + ToTpmUint32(response + 34, TPM_RSA_2048_LEN); + + /* Test that a large exponent size gets handled correctly. */ + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + ToTpmUint32(response + 20, 1 << 24); + TEST_EQ(TlclReadPubek(&exponent, NULL, &modulus_size), + TPM_E_INVALID_RESPONSE, "ReadPubek - large exponent size"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_ReadPubek, " cmd"); + ToTpmUint32(response + 20, 0); + + /* Test that an incorrect auth tag causes an error. */ + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + response[294] = 0; + TEST_EQ(TlclReadPubek(&exponent, NULL, &modulus_size), + TPM_E_INVALID_RESPONSE, "ReadPubek - incorrect auth"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_ReadPubek, " cmd"); + response[294] = 0x60; +} + +/** + * Test TakeOwnership + */ +static void TakeOwnershipTest(void) { + uint8_t oiap_response[] = { + 0x00, 0xc4, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x4c, 0x04, 0x1a, 0x18, 0xa9, + 0xf7, 0x9b, 0x2e, 0xe1, 0xf2, 0x16, 0x99, 0xa0, + 0x27, 0x5f, 0x0c, 0x8f, 0x24, 0x55, 0x1d, 0xaf, + 0x96, 0x49, + }; + uint8_t take_ownership_response[] = { + 0x00, 0xc5, 0x00, 0x00, 0x01, 0x62, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x11, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x92, 0x61, 0xa5, + 0x30, 0x5f, 0x39, 0xb7, 0xc3, 0x51, 0x53, 0x84, + 0xaf, 0x51, 0x64, 0x65, 0xd7, 0x58, 0xda, 0x15, + 0xb0, 0xb8, 0xe8, 0xea, 0xf5, 0xb2, 0x21, 0x34, + 0x09, 0x71, 0xa0, 0xd5, 0x2b, 0x21, 0xd6, 0x16, + 0xbd, 0x03, 0xc3, 0x83, 0x7e, 0x48, 0x36, 0xd7, + 0xfa, 0xc7, 0x5e, 0x5e, 0xb4, 0xc3, 0x9f, 0x00, + 0xcc, 0x7a, 0x3e, 0x0a, 0x00, 0x34, 0xbd, 0xbc, + 0x7b, 0x28, 0x0e, 0x4a, 0xef, 0xa5, 0x86, 0x50, + 0xa5, 0xfe, 0x8f, 0x7d, 0xbc, 0x86, 0xf3, 0x3d, + 0x8c, 0x65, 0x4c, 0x3b, 0x29, 0x3b, 0x40, 0x8b, + 0xca, 0xf9, 0xa1, 0xc8, 0x62, 0x52, 0xe1, 0x1f, + 0x0d, 0x89, 0x71, 0xca, 0xbb, 0x64, 0xef, 0x3f, + 0x97, 0x97, 0xed, 0x57, 0xb3, 0xd8, 0x67, 0x4c, + 0x46, 0x1c, 0x35, 0x0c, 0xba, 0x12, 0xae, 0x2e, + 0x6d, 0xa7, 0x48, 0xd6, 0x9a, 0x8a, 0x60, 0x22, + 0xd9, 0xe5, 0x97, 0x50, 0xc1, 0x24, 0xaf, 0xb6, + 0x41, 0xfe, 0x6d, 0xfe, 0x28, 0x3f, 0xce, 0x35, + 0x9b, 0x77, 0xe9, 0xd5, 0x36, 0xdb, 0x70, 0x5e, + 0xd7, 0xb9, 0x89, 0xac, 0xae, 0x55, 0x59, 0x00, + 0x7d, 0x47, 0x5d, 0x73, 0x4f, 0x1b, 0x17, 0xfa, + 0xae, 0xb0, 0xf7, 0xb7, 0x63, 0x4d, 0xa9, 0x94, + 0x0c, 0x1e, 0x02, 0x59, 0x8d, 0x34, 0x1f, 0x01, + 0x6d, 0xa7, 0x05, 0xa7, 0xae, 0xbd, 0x9b, 0xfa, + 0xed, 0xe6, 0xe3, 0xf2, 0xc0, 0xa9, 0x16, 0xb6, + 0xd2, 0x23, 0x37, 0x2e, 0x43, 0x5e, 0x5f, 0xe6, + 0x77, 0x0d, 0x49, 0x48, 0x07, 0x57, 0x64, 0xd2, + 0xd9, 0x60, 0xff, 0xe3, 0x60, 0xb6, 0xd7, 0xa5, + 0xe3, 0xd8, 0xa3, 0x93, 0xb3, 0xe9, 0xeb, 0x1c, + 0x53, 0x42, 0x08, 0x9f, 0x0c, 0x13, 0x72, 0x3c, + 0x80, 0xf8, 0xa1, 0x8c, 0x4d, 0xe5, 0x1e, 0xe7, + 0xef, 0x2b, 0x33, 0x23, 0x1e, 0x5a, 0xf6, 0xc1, + 0x46, 0x78, 0x06, 0x7e, 0xe7, 0x00, 0x00, 0x00, + 0x00, 0xef, 0x84, 0x26, 0xd3, 0xb6, 0x27, 0x4a, + 0x4a, 0x0f, 0x84, 0x65, 0x4b, 0xff, 0x80, 0x7e, + 0xb5, 0xf6, 0xbe, 0x8c, 0xed, 0x00, 0xad, 0xd1, + 0x73, 0x8a, 0x55, 0x9f, 0x50, 0xb4, 0x34, 0xba, + 0x2d, 0x6d, 0x80, 0x3a, 0xdc, 0x82, 0x94, 0x3b, + 0x96, 0x58, + }; + uint8_t encrypted_secret[] = { + 0x46, 0x9a, 0x17, 0x31, 0x04, 0x72, 0x58, 0xcd, + 0xac, 0xe7, 0xa4, 0x1f, 0x48, 0xa3, 0x89, 0x10, + 0xac, 0x40, 0xe2, 0x66, 0xfa, 0xfd, 0xe9, 0xab, + 0x7a, 0x55, 0xd3, 0xc0, 0x61, 0xca, 0x28, 0x0d, + 0x29, 0x4a, 0xe4, 0x9a, 0xbe, 0x62, 0x51, 0xe8, + 0x3f, 0xbf, 0x84, 0xae, 0x4e, 0x6c, 0x0e, 0x11, + 0x2b, 0xba, 0x62, 0x5d, 0xf5, 0x9d, 0xf8, 0xcd, + 0x5c, 0x9d, 0x5b, 0xee, 0x5e, 0xdc, 0xaf, 0xc1, + 0xbf, 0x22, 0x14, 0x0d, 0x68, 0xdf, 0xe1, 0x94, + 0x6b, 0x06, 0xc4, 0x5b, 0xdd, 0xee, 0xd3, 0xef, + 0x67, 0xb5, 0xb0, 0xee, 0x58, 0x88, 0x2d, 0x5c, + 0x7d, 0xda, 0x83, 0xd5, 0xb5, 0x72, 0x43, 0x33, + 0xf7, 0x9e, 0xf0, 0x52, 0x8c, 0xc1, 0xf1, 0xea, + 0xcf, 0x9f, 0x0e, 0xfb, 0xb3, 0x03, 0xfe, 0xb3, + 0xb4, 0x38, 0xa2, 0xfb, 0x2f, 0x64, 0xb6, 0x42, + 0x4c, 0x76, 0x70, 0xfa, 0x67, 0xc0, 0x48, 0x98, + 0x52, 0x3e, 0xdb, 0xe6, 0xfe, 0x44, 0x96, 0x14, + 0x5a, 0x6a, 0x19, 0x53, 0x46, 0x13, 0xe6, 0xc9, + 0x21, 0xee, 0x8e, 0xc2, 0xf2, 0x39, 0x2d, 0xba, + 0x6f, 0xeb, 0x80, 0x89, 0xf3, 0xea, 0xfa, 0x5c, + 0x9c, 0x88, 0xe0, 0xb1, 0x53, 0xa0, 0xe5, 0xe0, + 0x90, 0x33, 0x9d, 0x9d, 0x5f, 0xba, 0x6d, 0x68, + 0xb2, 0x9f, 0x4f, 0xa1, 0x28, 0xf9, 0xc4, 0x53, + 0x72, 0x51, 0x48, 0x4b, 0xb3, 0xf9, 0x18, 0x43, + 0x3a, 0x85, 0xdc, 0x70, 0x46, 0x0c, 0x3c, 0xe1, + 0x17, 0x1c, 0x18, 0x6f, 0xfd, 0xff, 0x77, 0x8d, + 0x04, 0xfc, 0xb3, 0xc0, 0x9a, 0x03, 0x74, 0x1d, + 0x06, 0x8f, 0xb6, 0x0a, 0x3e, 0xea, 0x91, 0x87, + 0xa9, 0x68, 0x26, 0x91, 0x81, 0x02, 0xe4, 0x10, + 0x66, 0xb6, 0x5f, 0x43, 0x47, 0x55, 0x25, 0xe0, + 0xbd, 0xd3, 0xab, 0xbd, 0xfd, 0x15, 0x85, 0x39, + 0x22, 0x93, 0xfc, 0x9d, 0x74, 0x0e, 0xcf, 0x5a, + }; + uint8_t owner_secret[TPM_AUTH_DATA_LEN] = { 0 }; + + ResetMocks(); + calls[0].rsp = oiap_response; + calls[0].rsp_size = sizeof(oiap_response); + calls[1].rsp = take_ownership_response; + calls[1].rsp_size = sizeof(take_ownership_response); + TEST_EQ(TlclTakeOwnership(encrypted_secret, encrypted_secret, + owner_secret), TPM_SUCCESS, "TakeOwnership"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_OIAP, " oiap cmd"); + TEST_EQ(calls[1].req_cmd, TPM_ORD_TakeOwnership, " takeownership cmd"); + + /* Verify that the response gets authenticated. */ + ResetMocks(); + calls[0].rsp = oiap_response; + calls[0].rsp_size = sizeof(oiap_response); + calls[1].rsp = take_ownership_response; + calls[1].rsp_size = sizeof(take_ownership_response); + take_ownership_response[334] = 0; + TEST_EQ(TlclTakeOwnership(encrypted_secret, encrypted_secret, + owner_secret), + TPM_E_AUTHFAIL, "TakeOwnership - response auth"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_OIAP, " oiap cmd"); + TEST_EQ(calls[1].req_cmd, TPM_ORD_TakeOwnership, " takeownership cmd"); + take_ownership_response[334] = 0xad; + + /* Verify that a short OIAP response gets caught. */ + ResetMocks(); + calls[0].rsp = oiap_response; + calls[0].rsp_size = sizeof(oiap_response); + ToTpmUint32(oiap_response + sizeof(uint16_t), + kTpmRequestHeaderLength + sizeof(uint32_t) + + sizeof(TPM_NONCE) - 1); + TEST_EQ(TlclTakeOwnership(encrypted_secret, encrypted_secret, + owner_secret), + TPM_E_INVALID_RESPONSE, "TakeOwnership - short OIAP response"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_OIAP, " oiap cmd"); + ToTpmUint32(oiap_response + sizeof(uint16_t), sizeof(oiap_response)); + + /* Verify that a short TakeOwnership response gets caught. */ + ResetMocks(); + calls[0].rsp = oiap_response; + calls[0].rsp_size = sizeof(oiap_response); + calls[1].rsp = take_ownership_response; + calls[1].rsp_size = sizeof(take_ownership_response); + ToTpmUint32(take_ownership_response + sizeof(uint16_t), + kTpmResponseHeaderLength + kTpmResponseAuthBlockLength - 1); + TEST_EQ(TlclTakeOwnership(encrypted_secret, encrypted_secret, + owner_secret), + TPM_E_INVALID_RESPONSE, + "TakeOwnership - short TakeOwnership response"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_OIAP, " oiap cmd"); + TEST_EQ(calls[1].req_cmd, TPM_ORD_TakeOwnership, " takeownership cmd"); + ToTpmUint32(take_ownership_response + sizeof(uint16_t), + sizeof(take_ownership_response)); +} + +/** + * Test ReadDelegationFamilyTable + */ +static void ReadDelegationFamilyTableTest(void) { + uint8_t response[] = { + 0x00, 0xc4, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x25, + 0x17, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x25, 0x42, + 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }; + + TPM_FAMILY_TABLE_ENTRY table[20]; + uint32_t table_size; + + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + table_size = 8; + TEST_EQ(TlclReadDelegationFamilyTable(table, &table_size), + TPM_SUCCESS, "ReadDelegationFamilyTable"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_Delegate_ReadTable, " cmd"); + TEST_EQ(table_size, 2, " table_size"); + TEST_EQ(table[0].tag, 0x25, " table[0].tag"); + TEST_EQ(table[0].familyLabel, 0x17, " table[0].familyLabel"); + TEST_EQ(table[0].familyID, 0x4f, " table[0].familyID"); + TEST_EQ(table[0].verificationCount, 0x1, + " table[0].verificationCount"); + TEST_EQ(table[0].flags, 0x2, " table[0].flags"); + TEST_EQ(table[1].tag, 0x25, " table[1].tag"); + TEST_EQ(table[1].familyLabel, 0x42, " table[1].familyLabel"); + TEST_EQ(table[1].familyID, 0x50, " table[1].familyID"); + TEST_EQ(table[1].verificationCount, 0x1, + " table[1].verificationCount"); + TEST_EQ(table[1].flags, 0x0, " table[1].flags"); + + /* Test that required table size is returned if more space required. */ + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + table_size = 1; + TEST_EQ(TlclReadDelegationFamilyTable(table, &table_size), + TPM_E_BUFFER_SIZE, "ReadDelegationFamilyTable"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_Delegate_ReadTable, " cmd"); + TEST_EQ(table_size, 2, " table_size"); + + /* Test that an overlong response gets caught. */ + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + ToTpmUint32(response + sizeof(uint16_t), TPM_LARGE_ENOUGH_COMMAND_SIZE + + 1); + TEST_EQ(TlclReadDelegationFamilyTable(table, &table_size), + TPM_E_INVALID_RESPONSE, + "ReadDelegationFamilyTable - too long response"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_Delegate_ReadTable, " cmd"); + ToTpmUint32(response + sizeof(uint16_t), sizeof(response)); + + /* Test that a short response gets caught. */ + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + ToTpmUint32(response + sizeof(uint16_t), + kTpmRequestHeaderLength + sizeof(uint32_t) - 1); + TEST_EQ(TlclReadDelegationFamilyTable(table, &table_size), + TPM_E_INVALID_RESPONSE, + "ReadDelegationFamilyTable - too short response"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_Delegate_ReadTable, " cmd"); + ToTpmUint32(response + sizeof(uint16_t), sizeof(response)); + + /* Test that long table size in response gets caught. */ + ResetMocks(); + calls[0].rsp = response; + calls[0].rsp_size = sizeof(response); + table_size = 20; + ToTpmUint32(response + kTpmResponseHeaderLength, + TPM_LARGE_ENOUGH_COMMAND_SIZE); + TEST_EQ(TlclReadDelegationFamilyTable(table, &table_size), + TPM_E_INVALID_RESPONSE, + "ReadDelegationFamilyTable - overlong family table"); + TEST_EQ(calls[0].req_cmd, TPM_ORD_Delegate_ReadTable, " cmd"); + ToTpmUint32(response + kTpmResponseHeaderLength, 0x1e); +} + +int main(void) +{ + TlclTest(); + SendCommandTest(); + ReadWriteTest(); + DefineSpaceExTest(); + InitNvAuthPolicyTest(); + PcrTest(); + GetSpaceInfoTest(); + FlagsTest(); + RandomTest(); + GetVersionTest(); + IFXFieldUpgradeInfoTest(); + ReadPubekTest(); + TakeOwnershipTest(); + ReadDelegationFamilyTableTest(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/tpm_lite/lock.c b/tests/tpm_lite/lock.c new file mode 100644 index 0000000..55d2dfe --- /dev/null +++ b/tests/tpm_lite/lock.c @@ -0,0 +1,29 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Test of locking, to see if locks count as writes. (They should.) + */ + +#include +#include + +#include "tlcl.h" + +#define INDEX0 0xda70 + + +int main(int argc, char** argv) { + TlclLibInit(); + + TlclStartup(); + TlclSelfTestFull(); + + TlclAssertPhysicalPresence(); + + TlclWriteLock(INDEX0); + + printf("Locked %#x\n", INDEX0); + exit(0); +} diff --git a/tests/tpm_lite/readonly.c b/tests/tpm_lite/readonly.c new file mode 100644 index 0000000..68de06b --- /dev/null +++ b/tests/tpm_lite/readonly.c @@ -0,0 +1,114 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* This program mimicks the TPM usage from read-only firmware. It exercises + * the TPM functionality needed in the read-only firmware. It is meant to be + * integrated with the rest of the read-only firmware. It is also provided as + * a test. + */ + +#include +#include +#include + +#include "tlcl.h" + +/* These index values are used to create NVRAM spaces. They only need to be + * unique. + */ +#define INDEX0 0xda70 +#define INDEX1 0xda71 +#define INDEX2 0xda72 +#define INDEX3 0xda73 + +#define INDEX_INITIALIZED 0xda80 + +/* This is called once at initialization time. It may be called again from + * recovery mode to rebuild the spaces if something incomprehensible happened + * and the spaces are gone or messed up. This is called after TPM_Startup and + * before the spaces are write-locked, so there is a chance that they can be + * recreated (but who knows---if anything can happen, there are plenty of ways + * of making this FUBAR). + */ +void InitializeSpaces(void) { + uint32_t zero = 0; + uint32_t perm = TPM_NV_PER_WRITE_STCLEAR | TPM_NV_PER_PPWRITE; + + printf("Initializing spaces\n"); + TlclSetNvLocked(); /* useful only the first time */ + + TlclDefineSpace(INDEX0, perm, 4); + TlclWrite(INDEX0, (uint8_t *) &zero, 4); + TlclDefineSpace(INDEX1, perm, 4); + TlclWrite(INDEX1, (uint8_t *) &zero, 4); + TlclDefineSpace(INDEX2, perm, 4); + TlclWrite(INDEX2, (uint8_t *) &zero, 4); + TlclDefineSpace(INDEX3, perm, 4); + TlclWrite(INDEX3, (uint8_t *) &zero, 4); + + perm = (TPM_NV_PER_READ_STCLEAR | TPM_NV_PER_WRITE_STCLEAR | + TPM_NV_PER_PPWRITE); + TlclDefineSpace(INDEX_INITIALIZED, perm, 1); +} + + +void EnterRecoveryMode(void) { + printf("entering recovery mode"); + exit(0); +} + + +int main(int argc, char** argv) { + uint8_t c; + uint32_t index_0, index_1, index_2, index_3; + + TlclLibInit(); + + TlclStartup(); + TlclSelfTestFull(); + + TlclAssertPhysicalPresence(); + + /* Checks if initialization has completed by trying to read-lock a space + * that's created at the end of initialization. + */ + if (TlclRead(INDEX_INITIALIZED, &c, 0) == TPM_E_BADINDEX) { + /* The initialization did not complete. + */ + InitializeSpaces(); + } + + /* Checks if spaces are OK or messed up. + */ + if (TlclRead(INDEX0, (uint8_t*) &index_0, + sizeof(index_0)) != TPM_SUCCESS || + TlclRead(INDEX1, (uint8_t*) &index_1, + sizeof(index_1)) != TPM_SUCCESS || + TlclRead(INDEX2, (uint8_t*) &index_2, + sizeof(index_2)) != TPM_SUCCESS || + TlclRead(INDEX3, (uint8_t*) &index_3, + sizeof(index_3)) != TPM_SUCCESS) { + EnterRecoveryMode(); + } + + /* Writes space, and locks it. Then attempts to write again. I really wish + * I could use the imperative. + */ + index_0 += 1; + if (TlclWrite(INDEX0, (uint8_t*) &index_0, + sizeof(index_0) != TPM_SUCCESS)) { + error("could not write index 0\n"); + } + TlclWriteLock(INDEX0); + if (TlclWrite(INDEX0, (uint8_t*) &index_0, + sizeof(index_0)) == TPM_SUCCESS) { + error("index 0 is not locked\n"); + } + + /* Done for now. + */ + printf("TEST SUCCEEDED\n"); + exit(0); +} diff --git a/tests/tpm_lite/startup.c b/tests/tpm_lite/startup.c new file mode 100644 index 0000000..573373d --- /dev/null +++ b/tests/tpm_lite/startup.c @@ -0,0 +1,32 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Only perform a TPM_Startup command. + */ + +#include + +#include "tlcl.h" + +int main(int argc, char** argv) { + uint32_t result; + TlclLibInit(); + result = TlclStartup(); + if (result != 0) { + printf("tpm startup failed with %#x\n", result); + } + result = TlclGetFlags(NULL, NULL, NULL); + if (result != 0) { + printf("tpm getflags failed with %#x\n", result); + } + printf("executing SelfTestFull\n"); + TlclSelfTestFull(); + result = TlclGetFlags(NULL, NULL, NULL); + if (result != 0) { + printf("tpm getflags failed with %#x\n", result); + } + printf("TEST SUCCEEDED\n"); + return 0; +} diff --git a/tests/tpm_lite/tlcl_tests.c b/tests/tpm_lite/tlcl_tests.c new file mode 100644 index 0000000..40b9888 --- /dev/null +++ b/tests/tpm_lite/tlcl_tests.c @@ -0,0 +1,29 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Shared code for tests. + */ + +#include "2sysincludes.h" + +#include "tlcl.h" +#include "tlcl_tests.h" + +const char* resilient_startup = NULL; + +uint32_t TlclStartupIfNeeded(void) { + static const char* null_getenv = "some string"; /* a unique address */ + uint32_t result = TlclStartup(); + if (resilient_startup == NULL) { + resilient_startup = getenv("TLCL_RESILIENT_STARTUP"); + if (resilient_startup == NULL) { + resilient_startup = null_getenv; + } + } + if (resilient_startup == null_getenv) { + return result; + } + return result == TPM_E_INVALID_POSTINIT ? TPM_SUCCESS : result; +} diff --git a/tests/tpm_lite/tlcl_tests.h b/tests/tpm_lite/tlcl_tests.h new file mode 100644 index 0000000..db0999c --- /dev/null +++ b/tests/tpm_lite/tlcl_tests.h @@ -0,0 +1,34 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Common definitions for test programs. + */ + +#ifndef VBOOT_REFERENCE_TLCL_TESTS_H_ +#define VBOOT_REFERENCE_TLCL_TESTS_H_ + +/* Standard testing indexes. */ +#define INDEX0 0xcafe +#define INDEX1 0xcaff + +/* Prints error and returns on failure */ +#define TPM_CHECK(tpm_command) TPM_EXPECT(tpm_command, TPM_SUCCESS) + +#define TPM_EXPECT(tpm_command, expected_result) do { \ + uint32_t _result = (tpm_command); \ + uint32_t _exp = (expected_result); \ + if (_result != _exp) { \ + printf("TEST FAILED: line %d: " #tpm_command ": %#x" \ + " (expecting %#x)\n", __LINE__, _result, _exp); \ + return _result; \ + } \ +} while (0) + + +/* Executes TlclStartup(), but ignores POSTINIT error if the + * TLCL_RESILIENT_STARTUP environment variable is set. + */ +uint32_t TlclStartupIfNeeded(void); + +#endif /* VBOOT_REFERENCE_TLCL_TESTS_H_ */ diff --git a/tests/tpm_lite/tpmtest_earlyextend.c b/tests/tpm_lite/tpmtest_earlyextend.c new file mode 100644 index 0000000..8bab8af --- /dev/null +++ b/tests/tpm_lite/tpmtest_earlyextend.c @@ -0,0 +1,26 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Test of early use of TPM_Extend. + */ + +#include +#include +#include + +#include "tlcl.h" +#include "tlcl_tests.h" + +int main(int argc, char** argv) { + uint8_t value_in[20]; + uint8_t value_out[20]; + + TlclLibInit(); + TPM_CHECK(TlclStartup()); + TPM_CHECK(TlclContinueSelfTest()); + TPM_CHECK(TlclExtend(1, value_in, value_out)); + printf("TEST SUCCEEDED\n"); + exit(0); +} diff --git a/tests/tpm_lite/tpmtest_earlynvram.c b/tests/tpm_lite/tpmtest_earlynvram.c new file mode 100644 index 0000000..db44862 --- /dev/null +++ b/tests/tpm_lite/tpmtest_earlynvram.c @@ -0,0 +1,28 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Test of early writing to the NVRAM. + */ + +#include +#include +#include + +#include "tlcl.h" +#include "tlcl_tests.h" + +#define INDEX0 0xcafe + +int main(int argc, char** argv) { + uint32_t x; + + TlclLibInit(); + TPM_CHECK(TlclStartup()); + TPM_CHECK(TlclContinueSelfTest()); + TPM_CHECK(TlclAssertPhysicalPresence()); + TPM_CHECK(TlclRead(INDEX0, (uint8_t*) &x, sizeof(x))); + printf("TEST SUCCEEDED\n"); + return 0; +} diff --git a/tests/tpm_lite/tpmtest_earlynvram2.c b/tests/tpm_lite/tpmtest_earlynvram2.c new file mode 100644 index 0000000..9307a58 --- /dev/null +++ b/tests/tpm_lite/tpmtest_earlynvram2.c @@ -0,0 +1,26 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Test of early writing to the NVRAM. + */ + +#include +#include +#include + +#include "tlcl.h" +#include "tlcl_tests.h" + +int main(int argc, char** argv) { + uint32_t x; + + TlclLibInit(); + TPM_CHECK(TlclStartup()); + TPM_CHECK(TlclContinueSelfTest()); + TPM_CHECK(TlclAssertPhysicalPresence()); + TPM_CHECK(TlclWrite(INDEX0, (uint8_t*) &x, sizeof(x))); + printf("TEST SUCCEEDED\n"); + return 0; +} diff --git a/tests/tpm_lite/tpmtest_enable.c b/tests/tpm_lite/tpmtest_enable.c new file mode 100644 index 0000000..c2fe54b --- /dev/null +++ b/tests/tpm_lite/tpmtest_enable.c @@ -0,0 +1,36 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Testing: ownership testing code, ForceClear, and nvram write limit. + */ + +#include + +#include "2common.h" +#include "host_common.h" +#include "tlcl.h" +#include "tlcl_tests.h" + + +int main(int argc, char** argv) { + uint8_t disable, deactivated; + + TlclLibInit(); + TPM_CHECK(TlclStartupIfNeeded()); + TPM_CHECK(TlclSelfTestFull()); + TPM_CHECK(TlclAssertPhysicalPresence()); + TPM_CHECK(TlclGetFlags(&disable, &deactivated, NULL)); + printf("disable is %d, deactivated is %d\n", disable, deactivated); + TPM_CHECK(TlclSetEnable()); + TPM_CHECK(TlclSetDeactivated(0)); + TPM_CHECK(TlclGetFlags(&disable, &deactivated, NULL)); + printf("disable is %d, deactivated is %d\n", disable, deactivated); + if (disable == 1 || deactivated == 1) { + VB2_DEBUG("failed to enable or activate"); + return 1; + } + printf("TEST SUCCEEDED\n"); + return 0; +} diff --git a/tests/tpm_lite/tpmtest_fastenable.c b/tests/tpm_lite/tpmtest_fastenable.c new file mode 100644 index 0000000..a93dfd7 --- /dev/null +++ b/tests/tpm_lite/tpmtest_fastenable.c @@ -0,0 +1,49 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Testing: ForceClear and behavior of disable and permanent deactivated flags. + * + * ForceClear sets the permanent disable and deactivated flags to their default + * value of TRUE. The specs say nothing about STCLEAR flags, so they should be + * left alone. This test checks that both flags may be reset without a reboot, + * resulting in a fully enabled and activated TPM. (We know that because + * ForceClear requires that the TPM be enabled and activated to run.) + */ + +#include + +#include "host_common.h" +#include "test_common.h" +#include "tlcl.h" +#include "tlcl_tests.h" + +int main(int argc, char** argv) { + uint8_t disable, deactivated; + int i; + + TlclLibInit(); + TPM_CHECK(TlclStartupIfNeeded()); + TPM_CHECK(TlclSelfTestFull()); + TPM_CHECK(TlclAssertPhysicalPresence()); + TPM_CHECK(TlclGetFlags(&disable, &deactivated, NULL)); + printf("disable is %d, deactivated is %d\n", disable, deactivated); + + for (i = 0; i < 2; i++) { + TPM_CHECK(TlclForceClear()); + TPM_CHECK(TlclGetFlags(&disable, &deactivated, NULL)); + printf("disable is %d, deactivated is %d\n", disable, deactivated); + TEST_EQ(disable, 1, "after ForceClear, disable"); + TEST_EQ(deactivated, 1, "after ForceClear, deactivated"); + TPM_CHECK(TlclSetEnable()); + TPM_CHECK(TlclSetDeactivated(0)); + TPM_CHECK(TlclGetFlags(&disable, &deactivated, NULL)); + printf("disable is %d, deactivated is %d\n", disable, deactivated); + TEST_EQ(disable, 0, "after SetEnable, enabled"); + TEST_EQ(deactivated, 0, "after SetDeactivated(0), activated"); + } + + printf("TEST SUCCEEDED\n"); + return 0; +} diff --git a/tests/tpm_lite/tpmtest_globallock.c b/tests/tpm_lite/tpmtest_globallock.c new file mode 100644 index 0000000..14f16de --- /dev/null +++ b/tests/tpm_lite/tpmtest_globallock.c @@ -0,0 +1,56 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Test of two-stage locking using bGlobalLock and PP. + */ + +#include +#include +#include + +#include "host_common.h" +#include "test_common.h" +#include "tlcl.h" +#include "tlcl_tests.h" + +int main(int argc, char** argv) { + uint32_t zero = 0; + uint32_t x; + + TlclLibInit(); + TPM_CHECK(TlclStartupIfNeeded()); + TPM_CHECK(TlclSelfTestFull()); + TPM_CHECK(TlclAssertPhysicalPresence()); + TPM_CHECK(TlclRead(INDEX0, (uint8_t*) &x, sizeof(x))); + TPM_CHECK(TlclWrite(INDEX0, (uint8_t*) &zero, sizeof(uint32_t))); + TPM_CHECK(TlclRead(INDEX1, (uint8_t*) &x, sizeof(x))); + TPM_CHECK(TlclWrite(INDEX1, (uint8_t*) &zero, sizeof(uint32_t))); + TPM_CHECK(TlclSetGlobalLock()); + + // Verifies that write to index0 fails. + x = 1; + TPM_EXPECT(TlclWrite(INDEX0, (uint8_t*) &x, sizeof(x)), + TPM_E_AREA_LOCKED); + TPM_CHECK(TlclRead(INDEX0, (uint8_t*) &x, sizeof(x))); + TEST_EQ(x, 0, "Read from INDEX0 should give 0"); + + // Verifies that write to index1 is still possible. + x = 2; + TPM_CHECK(TlclWrite(INDEX1, (uint8_t*) &x, sizeof(x))); + TPM_CHECK(TlclRead(INDEX1, (uint8_t*) &x, sizeof(x))); + TEST_EQ(x, 0, "Read from INDEX1 should give 2"); + + // Turns off PP. + TlclLockPhysicalPresence(); + + // Verifies that write to index1 fails. + x = 3; + TPM_EXPECT(TlclWrite(INDEX1, (uint8_t*) &x, sizeof(x)), + TPM_E_BAD_PRESENCE); + TPM_CHECK(TlclRead(INDEX1, (uint8_t*) &x, sizeof(x))); + TEST_EQ(x, 2, "Read from INDEX1 should give 2"); + printf("TEST SUCCEEDED\n"); + exit(0); +} diff --git a/tests/tpm_lite/tpmtest_redefine_unowned.c b/tests/tpm_lite/tpmtest_redefine_unowned.c new file mode 100644 index 0000000..0f89870 --- /dev/null +++ b/tests/tpm_lite/tpmtest_redefine_unowned.c @@ -0,0 +1,64 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Test of protection from space redefinition when an owner is NOT present. + */ + +#include +#include +#include + +#include "host_common.h" +#include "test_common.h" +#include "tlcl.h" +#include "tlcl_tests.h" + +int main(int argc, char** argv) { + uint32_t perm; + uint32_t x; + + TlclLibInit(); + TPM_CHECK(TlclStartupIfNeeded()); + TPM_CHECK(TlclSelfTestFull()); + TPM_CHECK(TlclAssertPhysicalPresence()); + + TEST_FALSE(TlclIsOwned(), "TlclIsOwned should return false"); + + /* Ensures spaces exist. */ + TPM_CHECK(TlclRead(INDEX0, (uint8_t*) &x, sizeof(x))); + TPM_CHECK(TlclRead(INDEX1, (uint8_t*) &x, sizeof(x))); + + /* Redefines spaces a couple of times. */ + perm = TPM_NV_PER_PPWRITE | TPM_NV_PER_GLOBALLOCK; + TPM_CHECK(TlclDefineSpace(INDEX0, perm, 2 * sizeof(uint32_t))); + TPM_CHECK(TlclDefineSpace(INDEX0, perm, sizeof(uint32_t))); + + perm = TPM_NV_PER_PPWRITE; + TPM_CHECK(TlclDefineSpace(INDEX1, perm, 2 * sizeof(uint32_t))); + TPM_CHECK(TlclDefineSpace(INDEX1, perm, sizeof(uint32_t))); + + // Sets the global lock. + TlclSetGlobalLock(); + + // Verifies that index0 cannot be redefined. + TPM_EXPECT(TlclDefineSpace(INDEX0, perm, sizeof(uint32_t)), + TPM_E_AREA_LOCKED); + + // Checks that index1 can. + TPM_CHECK(TlclDefineSpace(INDEX1, perm, 2 * sizeof(uint32_t))); + TPM_CHECK(TlclDefineSpace(INDEX1, perm, sizeof(uint32_t))); + + // Turns off PP. + TlclLockPhysicalPresence(); + + // Verifies that neither index0 nor index1 can be redefined. + TPM_EXPECT(TlclDefineSpace(INDEX0, perm, sizeof(uint32_t)), + TPM_E_BAD_PRESENCE); + TPM_EXPECT(TlclDefineSpace(INDEX1, perm, sizeof(uint32_t)), + TPM_E_BAD_PRESENCE); + + printf("TEST SUCCEEDED\n"); + exit(0); +} diff --git a/tests/tpm_lite/tpmtest_spaceperm.c b/tests/tpm_lite/tpmtest_spaceperm.c new file mode 100644 index 0000000..8c9232b --- /dev/null +++ b/tests/tpm_lite/tpmtest_spaceperm.c @@ -0,0 +1,37 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Test of space permissions retrieval. + */ + +#include +#include +#include + +#include "host_common.h" +#include "test_common.h" +#include "tlcl.h" +#include "tlcl_tests.h" + +#define PERMPPGL (TPM_NV_PER_PPWRITE | TPM_NV_PER_GLOBALLOCK) +#define PERMPP TPM_NV_PER_PPWRITE + +int main(int argc, char** argv) { + uint32_t perm; + + TlclLibInit(); + TPM_CHECK(TlclStartupIfNeeded()); + TPM_CHECK(TlclContinueSelfTest()); + TPM_CHECK(TlclAssertPhysicalPresence()); + + TPM_CHECK(TlclGetPermissions(INDEX0, &perm)); + TEST_NEQ(perm & PERMPPGL, 0, "INDEX0: PERMPPGL is not set"); + + TPM_CHECK(TlclGetPermissions(INDEX1, &perm)); + TEST_NEQ(perm & PERMPP, 0, "INDEX1: PERMPP is not set"); + + printf("TEST SUCCEEDED\n"); + exit(0); +} diff --git a/tests/tpm_lite/tpmtest_testsetup.c b/tests/tpm_lite/tpmtest_testsetup.c new file mode 100644 index 0000000..a6331d9 --- /dev/null +++ b/tests/tpm_lite/tpmtest_testsetup.c @@ -0,0 +1,44 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Create two spaces for uses in tests. OK if they already exist. + */ + +#include +#include +#include + +#include "tlcl.h" +#include "tlcl_tests.h" + +int main(int argc, char** argv) { + uint32_t perm; + uint32_t result; + uint32_t x; + + TlclLibInit(); + + TPM_CHECK(TlclStartupIfNeeded()); + TPM_CHECK(TlclSelfTestFull()); + TPM_CHECK(TlclAssertPhysicalPresence()); + TPM_CHECK(TlclForceClear()); + TPM_CHECK(TlclSetEnable()); + TPM_CHECK(TlclSetDeactivated(0)); + + result = TlclRead(INDEX0, (uint8_t*) &x, sizeof(x)); + if (result == TPM_E_BADINDEX) { + perm = TPM_NV_PER_PPWRITE | TPM_NV_PER_GLOBALLOCK; + TPM_CHECK(TlclDefineSpace(INDEX0, perm, sizeof(uint32_t))); + } + + result = TlclRead(INDEX1, (uint8_t*) &x, sizeof(x)); + if (result == TPM_E_BADINDEX) { + perm = TPM_NV_PER_PPWRITE; + TPM_CHECK(TlclDefineSpace(INDEX1, perm, sizeof(uint32_t))); + } + + printf("TEST SUCCEEDED\n"); + exit(0); +} diff --git a/tests/tpm_lite/tpmtest_timing.c b/tests/tpm_lite/tpmtest_timing.c new file mode 100644 index 0000000..b021763 --- /dev/null +++ b/tests/tpm_lite/tpmtest_timing.c @@ -0,0 +1,67 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Timing test for various TPM operations. This is mostly a validity check to + * make sure the part doesn't have ridicolously bad timing on simple + * operations. + */ + +#include +#include +#include +#include +#include + +#include "tlcl.h" +#include "tlcl_tests.h" + +/* Runs [op] and ensures it returns success and doesn't run longer than + * [time_limit] in milliseconds. + */ +#define TTPM_CHECK(op, time_limit) do { \ + struct timeval before, after; \ + int time; \ + uint32_t __result; \ + gettimeofday(&before, NULL); \ + __result = op; \ + if (__result != TPM_SUCCESS) { \ + printf(#op ": error %#x\n", __result); \ + errors++; \ + } \ + gettimeofday(&after, NULL); \ + time = (int) ((after.tv_sec - before.tv_sec) * 1000 + \ + (after.tv_usec - before.tv_usec) / 1000); \ + printf(#op ": %d ms\n", time); \ + if (time > time_limit) { \ + printf(#op " exceeded " #time_limit " ms\n"); \ + time_limit_exceeded = 1; \ + } \ +} while (0) + +int main(int argc, char** argv) { + uint32_t x; + uint8_t in[20], out[20]; + int time_limit_exceeded = 0; + int errors = 0; + + TlclLibInit(); + TTPM_CHECK(0, 50); + TTPM_CHECK(TlclStartupIfNeeded(), 50); + TTPM_CHECK(TlclContinueSelfTest(), 100); + TTPM_CHECK(TlclSelfTestFull(), 1000); + TTPM_CHECK(TlclAssertPhysicalPresence(), 100); + TTPM_CHECK(TlclWrite(INDEX0, (uint8_t*) &x, sizeof(x)), 100); + TTPM_CHECK(TlclRead(INDEX0, (uint8_t*) &x, sizeof(x)), 100); + TTPM_CHECK(TlclExtend(0, in, out), 200); + TTPM_CHECK(TlclSetGlobalLock(), 50); + TTPM_CHECK(TlclLockPhysicalPresence(), 100); + if (time_limit_exceeded || errors > 0) { + printf("TEST FAILED\n"); + exit(1); + } else { + printf("TEST SUCCEEDED\n"); + return 0; + } +} diff --git a/tests/tpm_lite/tpmtest_writelimit.c b/tests/tpm_lite/tpmtest_writelimit.c new file mode 100644 index 0000000..05e4a17 --- /dev/null +++ b/tests/tpm_lite/tpmtest_writelimit.c @@ -0,0 +1,63 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Test of recovery when we hit the NVRAM write limit for an unowned TPM. + */ + +#include +#include +#include + +#include "2common.h" +#include "host_common.h" +#include "test_common.h" +#include "tlcl.h" +#include "tlcl_tests.h" + +#define TPM_MAX_NV_WRITES_NOOWNER 64 + +int main(int argc, char** argv) { + int i; + + uint32_t result; + + TlclLibInit(); + + TPM_CHECK(TlclStartupIfNeeded()); + TPM_CHECK(TlclSelfTestFull()); + TPM_CHECK(TlclAssertPhysicalPresence()); + TPM_CHECK(TlclForceClear()); + TPM_CHECK(TlclSetEnable()); + TPM_CHECK(TlclSetDeactivated(0)); + + for (i = 0; i < TPM_MAX_NV_WRITES_NOOWNER + 2; i++) { + printf("writing %d\n", i); + if ((result = TlclWrite(INDEX0, (uint8_t*)&i, + sizeof(i))) != TPM_SUCCESS) { + switch (result) { + case TPM_E_MAXNVWRITES: + TEST_TRUE(i >= TPM_MAX_NV_WRITES_NOOWNER, + "MAXNVWRITES should only occur after " + "MAX_NV_WRITES_NOOWNER reached"); + break; + default: + VB2_DEBUG("unexpected error code %d (%#x)\n", + result, result); + exit(1); + } + } + } + + /* Reset write count */ + TPM_CHECK(TlclForceClear()); + TPM_CHECK(TlclSetEnable()); + TPM_CHECK(TlclSetDeactivated(0)); + + /* Try writing again. */ + TPM_CHECK(TlclWrite(INDEX0, (uint8_t*)&i, sizeof(i))); + + printf("TEST SUCCEEDED\n"); + exit(0); +} diff --git a/tests/vb20_api_kernel_tests.c b/tests/vb20_api_kernel_tests.c new file mode 100644 index 0000000..b835251 --- /dev/null +++ b/tests/vb20_api_kernel_tests.c @@ -0,0 +1,367 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for kernel verification library, api layer + */ + +#include + +#include "2api.h" +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2rsa.h" +#include "2secdata.h" +#include "2sysincludes.h" +#include "test_common.h" +#include "vboot_struct.h" + +/* Common context for tests */ +static uint8_t workbuf[VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); +static struct vb2_context *ctx; +static struct vb2_shared_data *sd; +static struct vb2_fw_preamble *fwpre; +static struct vb2_kernel_preamble *kpre; +static struct vb2_packed_key *kdkey; +static const char fw_kernel_key_data[36] = "Test kernel key data"; +static char kernel_data[0x4008] = "Sure it's a kernel..."; + +/* Mocked function data */ + +static struct { + struct vb2_gbb_header h; + struct vb2_packed_key recovery_key; + char recovery_key_data[32]; +} mock_gbb; + +static int mock_read_res_fail_on_call; +static int mock_unpack_key_retval; +static int mock_load_kernel_keyblock_retval; +static int mock_load_kernel_preamble_retval; +static int mock_secdata_fwmp_check_retval; + +/* Type of test to reset for */ +enum reset_type { + FOR_PHASE1, + FOR_PHASE2, + FOR_PHASE3, +}; + +static void reset_common_data(enum reset_type t) +{ + struct vb2_packed_key *k; + + memset(workbuf, 0xaa, sizeof(workbuf)); + + TEST_SUCC(vb2api_init(workbuf, sizeof(workbuf), &ctx), + "vb2api_init failed"); + + sd = vb2_get_sd(ctx); + sd->status |= VB2_SD_STATUS_RECOVERY_DECIDED; + vb2_nv_init(ctx); + + vb2api_secdata_kernel_create(ctx); + vb2_secdata_kernel_init(ctx); + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_VERSIONS, 0x20002); + + mock_read_res_fail_on_call = 0; + mock_unpack_key_retval = VB2_SUCCESS; + mock_load_kernel_keyblock_retval = VB2_SUCCESS; + mock_load_kernel_preamble_retval = VB2_SUCCESS; + mock_secdata_fwmp_check_retval = VB2_SUCCESS; + + /* Recovery key in mock GBB */ + memset(&mock_gbb, 0, sizeof(mock_gbb)); + mock_gbb.recovery_key.algorithm = 11; + mock_gbb.recovery_key.key_offset = + vb2_offset_of(&mock_gbb.recovery_key, + &mock_gbb.recovery_key_data); + mock_gbb.recovery_key.key_size = sizeof(mock_gbb.recovery_key_data); + strcpy(mock_gbb.recovery_key_data, "The recovery key"); + mock_gbb.h.recovery_key_offset = + vb2_offset_of(&mock_gbb, &mock_gbb.recovery_key); + mock_gbb.h.recovery_key_size = + mock_gbb.recovery_key.key_offset + + mock_gbb.recovery_key.key_size; + + + if (t == FOR_PHASE1) { + uint8_t *kdata; + + /* Create mock firmware preamble in the context */ + sd->preamble_offset = sd->workbuf_used; + fwpre = (struct vb2_fw_preamble *) + vb2_member_of(sd, sd->preamble_offset); + k = &fwpre->kernel_subkey; + kdata = (uint8_t *)fwpre + sizeof(*fwpre); + memcpy(kdata, fw_kernel_key_data, sizeof(fw_kernel_key_data)); + k->algorithm = 7; + k->key_offset = vb2_offset_of(k, kdata); + k->key_size = sizeof(fw_kernel_key_data); + sd->preamble_size = sizeof(*fwpre) + k->key_size; + vb2_set_workbuf_used(ctx, + sd->preamble_offset + sd->preamble_size); + + /* Needed to check that secdata_kernel initialization is + performed by phase1 function. */ + sd->status &= ~VB2_SD_STATUS_SECDATA_KERNEL_INIT; + + } else if (t == FOR_PHASE2) { + struct vb2_signature *sig; + struct vb2_digest_context dc; + uint8_t *sdata; + + /* Create mock kernel data key */ + sd->data_key_offset = sd->workbuf_used; + kdkey = (struct vb2_packed_key *) + vb2_member_of(sd, sd->data_key_offset); + kdkey->algorithm = VB2_ALG_RSA2048_SHA256; + sd->data_key_size = sizeof(*kdkey); + vb2_set_workbuf_used(ctx, + sd->data_key_offset + sd->data_key_size); + + /* Create mock kernel preamble in the context */ + sd->preamble_offset = sd->workbuf_used; + kpre = (struct vb2_kernel_preamble *) + vb2_member_of(sd, sd->preamble_offset); + sdata = (uint8_t *)kpre + sizeof(*kpre); + + sig = &kpre->body_signature; + sig->data_size = sizeof(kernel_data); + sig->sig_offset = vb2_offset_of(sig, sdata); + sig->sig_size = VB2_SHA512_DIGEST_SIZE; + + vb2_digest_init(&dc, VB2_HASH_SHA256); + vb2_digest_extend(&dc, (const uint8_t *)kernel_data, + sizeof(kernel_data)); + vb2_digest_finalize(&dc, sdata, sig->sig_size); + + sd->preamble_size = sizeof(*kpre) + sig->sig_size; + sd->vblock_preamble_offset = + 0x10000 - sd->preamble_size; + vb2_set_workbuf_used(ctx, + sd->preamble_offset + sd->preamble_size); + + } else { + /* Set flags and versions for roll-forward */ + sd->kernel_version = 0x20004; + sd->kernel_version_secdata = 0x20002; + sd->flags |= VB2_SD_FLAG_KERNEL_SIGNED; + ctx->flags |= VB2_CONTEXT_ALLOW_KERNEL_ROLL_FORWARD; + } +}; + +/* Mocked functions */ + +vb2_error_t vb2api_secdata_fwmp_check(struct vb2_context *c, uint8_t *size) +{ + return mock_secdata_fwmp_check_retval; +} + +struct vb2_gbb_header *vb2_get_gbb(struct vb2_context *c) +{ + return &mock_gbb.h; +} + +vb2_error_t vb2ex_read_resource(struct vb2_context *c, + enum vb2_resource_index index, uint32_t offset, + void *buf, uint32_t size) +{ + uint8_t *rptr; + uint32_t rsize; + + if (--mock_read_res_fail_on_call == 0) + return VB2_ERROR_MOCK; + + switch(index) { + case VB2_RES_GBB: + rptr = (uint8_t *)&mock_gbb; + rsize = sizeof(mock_gbb); + break; + default: + return VB2_ERROR_EX_READ_RESOURCE_INDEX; + } + + if (offset > rsize || offset + size > rsize) + return VB2_ERROR_EX_READ_RESOURCE_SIZE; + + memcpy(buf, rptr + offset, size); + return VB2_SUCCESS; +} + +vb2_error_t vb2_load_kernel_keyblock(struct vb2_context *c) +{ + return mock_load_kernel_keyblock_retval; +} + +vb2_error_t vb2_load_kernel_preamble(struct vb2_context *c) +{ + return mock_load_kernel_preamble_retval; +} + +vb2_error_t vb2_unpack_key_buffer(struct vb2_public_key *key, + const uint8_t *buf, uint32_t size) +{ + const struct vb2_packed_key *k = (const struct vb2_packed_key *)buf; + + key->arrsize = 0; + key->hash_alg = vb2_crypto_to_hash(k->algorithm); + return mock_unpack_key_retval; +} + +vb2_error_t vb2_verify_digest(const struct vb2_public_key *key, + struct vb2_signature *sig, const uint8_t *digest, + const struct vb2_workbuf *wb) +{ + if (memcmp(digest, (uint8_t *)sig + sig->sig_offset, sig->sig_size)) + return VB2_ERROR_VDATA_VERIFY_DIGEST; + + return VB2_SUCCESS; +} + +/* Tests */ + +static void load_kernel_vblock_tests(void) +{ + reset_common_data(FOR_PHASE1); + TEST_SUCC(vb2api_load_kernel_vblock(ctx), "load vblock good"); + + reset_common_data(FOR_PHASE1); + mock_load_kernel_keyblock_retval = VB2_ERROR_MOCK; + TEST_EQ(vb2api_load_kernel_vblock(ctx), VB2_ERROR_MOCK, + "load vblock bad keyblock"); + + reset_common_data(FOR_PHASE1); + mock_load_kernel_preamble_retval = VB2_ERROR_MOCK; + TEST_EQ(vb2api_load_kernel_vblock(ctx), VB2_ERROR_MOCK, + "load vblock bad preamble"); +} + +static void get_kernel_size_tests(void) +{ + uint32_t offs, size; + + reset_common_data(FOR_PHASE2); + offs = size = 0; + TEST_SUCC(vb2api_get_kernel_size(ctx, &offs, &size), "get size good"); + TEST_EQ(offs, 0x10000, " offset"); + TEST_EQ(size, sizeof(kernel_data), " size"); + + /* Don't need to pass pointers */ + reset_common_data(FOR_PHASE2); + TEST_SUCC(vb2api_get_kernel_size(ctx, NULL, NULL), "get size null"); + + reset_common_data(FOR_PHASE2); + sd->preamble_size = 0; + TEST_EQ(vb2api_get_kernel_size(ctx, &offs, &size), + VB2_ERROR_API_GET_KERNEL_SIZE_PREAMBLE, + "get size no preamble"); +} + +static void verify_kernel_data_tests(void) +{ + reset_common_data(FOR_PHASE2); + TEST_SUCC(vb2api_verify_kernel_data(ctx, kernel_data, + sizeof(kernel_data)), + "verify data good"); + + reset_common_data(FOR_PHASE2); + sd->preamble_size = 0; + TEST_EQ(vb2api_verify_kernel_data(ctx, kernel_data, + sizeof(kernel_data)), + VB2_ERROR_API_VERIFY_KDATA_PREAMBLE, "verify no preamble"); + + reset_common_data(FOR_PHASE2); + TEST_EQ(vb2api_verify_kernel_data(ctx, kernel_data, + sizeof(kernel_data) + 1), + VB2_ERROR_API_VERIFY_KDATA_SIZE, "verify size"); + + reset_common_data(FOR_PHASE2); + sd->workbuf_used = sd->workbuf_size + VB2_WORKBUF_ALIGN - + vb2_wb_round_up(sizeof(struct vb2_digest_context)); + TEST_EQ(vb2api_verify_kernel_data(ctx, kernel_data, + sizeof(kernel_data)), + VB2_ERROR_API_VERIFY_KDATA_WORKBUF, "verify workbuf"); + + reset_common_data(FOR_PHASE2); + sd->data_key_size = 0; + TEST_EQ(vb2api_verify_kernel_data(ctx, kernel_data, + sizeof(kernel_data)), + VB2_ERROR_API_VERIFY_KDATA_KEY, "verify no key"); + + reset_common_data(FOR_PHASE2); + mock_unpack_key_retval = VB2_ERROR_MOCK; + TEST_EQ(vb2api_verify_kernel_data(ctx, kernel_data, + sizeof(kernel_data)), + VB2_ERROR_MOCK, "verify unpack key"); + + reset_common_data(FOR_PHASE2); + kdkey->algorithm = VB2_ALG_COUNT; + TEST_EQ(vb2api_verify_kernel_data(ctx, kernel_data, + sizeof(kernel_data)), + VB2_ERROR_SHA_INIT_ALGORITHM, "verify hash init"); + + reset_common_data(FOR_PHASE2); + sd->workbuf_used = sd->workbuf_size - + vb2_wb_round_up(sizeof(struct vb2_digest_context)); + TEST_EQ(vb2api_verify_kernel_data(ctx, kernel_data, + sizeof(kernel_data)), + VB2_ERROR_API_CHECK_HASH_WORKBUF_DIGEST, "verify hash workbuf"); + + reset_common_data(FOR_PHASE2); + kernel_data[3] ^= 0xd0; + TEST_EQ(vb2api_verify_kernel_data(ctx, kernel_data, + sizeof(kernel_data)), + VB2_ERROR_VDATA_VERIFY_DIGEST, "verify hash digest"); + kernel_data[3] ^= 0xd0; +} + +static void phase3_tests(void) +{ + uint32_t v; + + reset_common_data(FOR_PHASE3); + TEST_SUCC(vb2api_kernel_phase3(ctx), "phase3 good"); + v = vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_VERSIONS); + TEST_EQ(v, 0x20004, " version"); + + reset_common_data(FOR_PHASE3); + sd->kernel_version = 0x20001; + TEST_SUCC(vb2api_kernel_phase3(ctx), "phase3 no rollback"); + v = vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_VERSIONS); + TEST_EQ(v, 0x20002, " version"); + + reset_common_data(FOR_PHASE3); + sd->flags &= ~VB2_SD_FLAG_KERNEL_SIGNED; + TEST_SUCC(vb2api_kernel_phase3(ctx), "phase3 unsigned kernel"); + v = vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_VERSIONS); + TEST_EQ(v, 0x20002, " version"); + + reset_common_data(FOR_PHASE3); + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + TEST_SUCC(vb2api_kernel_phase3(ctx), "phase3 recovery"); + v = vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_VERSIONS); + TEST_EQ(v, 0x20002, " version"); + + reset_common_data(FOR_PHASE3); + ctx->flags &= ~VB2_CONTEXT_ALLOW_KERNEL_ROLL_FORWARD; + TEST_SUCC(vb2api_kernel_phase3(ctx), "phase3 no rollforward"); + v = vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_VERSIONS); + TEST_EQ(v, 0x20002, " version"); + + reset_common_data(FOR_PHASE3); + sd->status &= ~VB2_SD_STATUS_SECDATA_KERNEL_INIT; + TEST_ABORT(vb2api_kernel_phase3(ctx), "phase3 set fail"); +} + +int main(int argc, char* argv[]) +{ + load_kernel_vblock_tests(); + get_kernel_size_tests(); + verify_kernel_data_tests(); + phase3_tests(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb20_kernel_tests.c b/tests/vb20_kernel_tests.c new file mode 100644 index 0000000..8766114 --- /dev/null +++ b/tests/vb20_kernel_tests.c @@ -0,0 +1,476 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for kernel verification library + */ + +#include + +#include "2api.h" +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2rsa.h" +#include "2secdata.h" +#include "2sysincludes.h" +#include "test_common.h" + +/* Common context for tests */ +static uint8_t workbuf[VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); +static struct vb2_workbuf wb; +static struct vb2_context *ctx; +static struct vb2_shared_data *sd; + +/* Mocked function data */ + +static struct { + struct vb2_gbb_header h; + struct vb2_packed_key recovery_key; + char recovery_key_data[32]; +} mock_gbb; + +static struct { + /* Keyblock */ + struct { + struct vb2_keyblock kb; + char data_key_data[16]; + uint8_t kbdata[128]; + uint8_t hash[VB2_SHA512_DIGEST_SIZE]; + } k; + /* Preamble follows keyblock */ + struct { + struct vb2_kernel_preamble pre; + uint8_t predata[128]; + } p; +} mock_vblock; + +static int mock_read_res_fail_on_call; +static int mock_unpack_key_retval; +static int mock_verify_keyblock_retval; +static int mock_verify_preamble_retval; + +/* Type of test to reset for */ +enum reset_type { + FOR_KEYBLOCK, + FOR_PREAMBLE +}; + +static void rehash_keyblock(void) +{ + struct vb2_keyblock *kb = &mock_vblock.k.kb; + struct vb2_signature *hashsig = &mock_vblock.k.kb.keyblock_hash; + struct vb2_digest_context dc; + + + hashsig->sig_offset = vb2_offset_of(hashsig, mock_vblock.k.hash); + hashsig->sig_size = sizeof(mock_vblock.k.hash); + hashsig->data_size = hashsig->sig_offset; + vb2_digest_init(&dc, VB2_HASH_SHA512); + vb2_digest_extend(&dc, (const uint8_t *)kb, hashsig->data_size); + vb2_digest_finalize(&dc, mock_vblock.k.hash, hashsig->sig_size); +} + +static void reset_common_data(enum reset_type t) +{ + struct vb2_keyblock *kb = &mock_vblock.k.kb; + struct vb2_kernel_preamble *pre = &mock_vblock.p.pre; + + memset(workbuf, 0xaa, sizeof(workbuf)); + + TEST_SUCC(vb2api_init(workbuf, sizeof(workbuf), &ctx), + "vb2api_init failed"); + + vb2_workbuf_from_ctx(ctx, &wb); + sd = vb2_get_sd(ctx); + + vb2_nv_init(ctx); + + vb2api_secdata_kernel_create(ctx); + vb2_secdata_kernel_init(ctx); + + mock_read_res_fail_on_call = 0; + mock_unpack_key_retval = VB2_SUCCESS; + mock_verify_keyblock_retval = VB2_SUCCESS; + mock_verify_preamble_retval = VB2_SUCCESS; + + /* Set up mock data for verifying keyblock */ + sd->kernel_version_secdata = 0x20002; + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_VERSIONS, 0x20002); + + mock_gbb.recovery_key.algorithm = 11; + mock_gbb.recovery_key.key_offset = + vb2_offset_of(&mock_gbb.recovery_key, + &mock_gbb.recovery_key_data); + mock_gbb.recovery_key.key_size = sizeof(mock_gbb.recovery_key_data); + + kb->keyblock_size = sizeof(mock_vblock.k); + memcpy(kb->magic, VB2_KEYBLOCK_MAGIC, VB2_KEYBLOCK_MAGIC_SIZE); + + kb->keyblock_flags = VB2_KEYBLOCK_FLAG_DEVELOPER_1 | + VB2_KEYBLOCK_FLAG_DEVELOPER_0 | + VB2_KEYBLOCK_FLAG_RECOVERY_1 | VB2_KEYBLOCK_FLAG_RECOVERY_0; + kb->header_version_major = VB2_KEYBLOCK_VERSION_MAJOR; + kb->header_version_minor = VB2_KEYBLOCK_VERSION_MINOR; + kb->data_key.algorithm = 7; + kb->data_key.key_version = 2; + kb->data_key.key_offset = + vb2_offset_of(&mock_vblock.k, &mock_vblock.k.data_key_data) - + vb2_offset_of(&mock_vblock.k, &kb->data_key); + kb->data_key.key_size = sizeof(mock_vblock.k.data_key_data); + strcpy(mock_vblock.k.data_key_data, "data key data!!"); + rehash_keyblock(); + + pre->preamble_size = sizeof(mock_vblock.p); + pre->kernel_version = 2; + + /* If verifying preamble, verify keyblock first to set up data key */ + if (t == FOR_PREAMBLE) + vb2_load_kernel_keyblock(ctx); +}; + +/* Mocked functions */ + +vb2_error_t vb2ex_read_resource(struct vb2_context *c, + enum vb2_resource_index index, uint32_t offset, + void *buf, uint32_t size) +{ + uint8_t *rptr; + uint32_t rsize; + + if (--mock_read_res_fail_on_call == 0) + return VB2_ERROR_MOCK; + + switch(index) { + case VB2_RES_GBB: + rptr = (uint8_t *)&mock_gbb; + rsize = sizeof(mock_gbb); + break; + case VB2_RES_KERNEL_VBLOCK: + rptr = (uint8_t *)&mock_vblock; + rsize = sizeof(mock_vblock); + break; + default: + return VB2_ERROR_EX_READ_RESOURCE_INDEX; + } + + if (offset > rsize || offset + size > rsize) + return VB2_ERROR_EX_READ_RESOURCE_SIZE; + + memcpy(buf, rptr + offset, size); + return VB2_SUCCESS; +} + +vb2_error_t vb2_unpack_key_buffer(struct vb2_public_key *key, + const uint8_t *buf, uint32_t size) +{ + key->arrsize = 0; + return mock_unpack_key_retval; +} + +vb2_error_t vb2_verify_keyblock(struct vb2_keyblock *block, uint32_t size, + const struct vb2_public_key *key, + const struct vb2_workbuf *w) +{ + return mock_verify_keyblock_retval; +} + +vb2_error_t vb2_verify_kernel_preamble(struct vb2_kernel_preamble *preamble, + uint32_t size, + const struct vb2_public_key *key, + const struct vb2_workbuf *w) +{ + return mock_verify_preamble_retval; +} + +/* Tests */ + +static void verify_keyblock_hash_tests(void) +{ + struct vb2_keyblock *kb = &mock_vblock.k.kb; + + /* Test successful call */ + reset_common_data(FOR_KEYBLOCK); + TEST_SUCC(vb2_verify_keyblock_hash(kb, kb->keyblock_size, &wb), + "Keyblock hash good"); + + /* Validity check keyblock */ + reset_common_data(FOR_KEYBLOCK); + kb->magic[0] ^= 0xd0; + TEST_EQ(vb2_verify_keyblock_hash(kb, kb->keyblock_size, &wb), + VB2_ERROR_KEYBLOCK_MAGIC, "Keyblock validity check"); + + /* + * Validity check should be looking at the keyblock hash struct, not + * the keyblock signature struct. + */ + reset_common_data(FOR_KEYBLOCK); + kb->keyblock_hash.data_size = sizeof(*kb) - 1; + TEST_EQ(vb2_verify_keyblock_hash(kb, kb->keyblock_size, &wb), + VB2_ERROR_KEYBLOCK_SIGNED_TOO_LITTLE, + "Keyblock check hash sig"); + + reset_common_data(FOR_KEYBLOCK); + wb.size = VB2_SHA512_DIGEST_SIZE - 1; + TEST_EQ(vb2_verify_keyblock_hash(kb, kb->keyblock_size, &wb), + VB2_ERROR_VDATA_WORKBUF_DIGEST, + "Keyblock check hash workbuf digest"); + + reset_common_data(FOR_KEYBLOCK); + wb.size = VB2_SHA512_DIGEST_SIZE + + sizeof(struct vb2_digest_context) - 1; + TEST_EQ(vb2_verify_keyblock_hash(kb, kb->keyblock_size, &wb), + VB2_ERROR_VDATA_WORKBUF_HASHING, + "Keyblock check hash workbuf hashing"); + + reset_common_data(FOR_KEYBLOCK); + mock_vblock.k.data_key_data[0] ^= 0xa0; + TEST_EQ(vb2_verify_keyblock_hash(kb, kb->keyblock_size, &wb), + VB2_ERROR_KEYBLOCK_HASH_INVALID_IN_DEV_MODE, + "Keyblock check hash invalid"); +} + +static void load_kernel_keyblock_tests(void) +{ + struct vb2_keyblock *kb = &mock_vblock.k.kb; + struct vb2_packed_key *k; + int expected_offset; + + /* Test successful call */ + reset_common_data(FOR_KEYBLOCK); + expected_offset = sd->workbuf_used; + TEST_SUCC(vb2_load_kernel_keyblock(ctx), "Kernel keyblock good"); + TEST_NEQ(sd->flags & VB2_SD_FLAG_KERNEL_SIGNED, 0, " Kernel signed"); + TEST_EQ(sd->kernel_version, 0x20000, "keyblock version"); + TEST_EQ(sd->vblock_preamble_offset, sizeof(mock_vblock.k), + "preamble offset"); + TEST_EQ(sd->data_key_offset, expected_offset, + "keyblock data key offset"); + TEST_EQ(sd->workbuf_used, + vb2_wb_round_up(sd->data_key_offset + + sd->data_key_size), + "workbuf used"); + + /* Make sure data key was properly saved */ + k = vb2_member_of(sd, sd->data_key_offset); + TEST_EQ(k->algorithm, 7, "data key algorithm"); + TEST_EQ(k->key_version, 2, "data key version"); + TEST_EQ(k->key_size, sizeof(mock_vblock.k.data_key_data), + "data key size"); + TEST_EQ(memcmp(vb2_member_of(k, k->key_offset), + mock_vblock.k.data_key_data, + sizeof(mock_vblock.k.data_key_data)), + 0, "data key data"); + TEST_EQ(sd->workbuf_used, + vb2_wb_round_up(sd->data_key_offset + + sd->data_key_size), + "workbuf used after"); + + /* Test failures */ + reset_common_data(FOR_KEYBLOCK); + mock_unpack_key_retval = VB2_ERROR_MOCK; + TEST_EQ(vb2_load_kernel_keyblock(ctx), + VB2_ERROR_MOCK, "Kernel keyblock unpack key"); + + reset_common_data(FOR_KEYBLOCK); + sd->workbuf_used = sd->workbuf_size + VB2_WORKBUF_ALIGN - + vb2_wb_round_up(sizeof(*kb)); + TEST_EQ(vb2_load_kernel_keyblock(ctx), + VB2_ERROR_KERNEL_KEYBLOCK_WORKBUF_HEADER, + "Kernel keyblock workbuf header"); + + reset_common_data(FOR_KEYBLOCK); + mock_read_res_fail_on_call = 1; + TEST_EQ(vb2_load_kernel_keyblock(ctx), + VB2_ERROR_MOCK, "Kernel keyblock read header"); + + reset_common_data(FOR_KEYBLOCK); + sd->workbuf_used = sd->workbuf_size + VB2_WORKBUF_ALIGN - + vb2_wb_round_up(kb->keyblock_size); + TEST_EQ(vb2_load_kernel_keyblock(ctx), + VB2_ERROR_KERNEL_KEYBLOCK_WORKBUF, + "Kernel keyblock workbuf"); + + reset_common_data(FOR_KEYBLOCK); + mock_read_res_fail_on_call = 2; + TEST_EQ(vb2_load_kernel_keyblock(ctx), + VB2_ERROR_MOCK, "Kernel keyblock read"); + + /* Normally, require signed keyblock */ + reset_common_data(FOR_KEYBLOCK); + mock_verify_keyblock_retval = VB2_ERROR_MOCK; + TEST_EQ(vb2_load_kernel_keyblock(ctx), + VB2_ERROR_MOCK, "Verify keyblock"); + + /* Not in dev mode */ + reset_common_data(FOR_KEYBLOCK); + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; + mock_verify_keyblock_retval = VB2_ERROR_MOCK; + TEST_SUCC(vb2_load_kernel_keyblock(ctx), "Kernel keyblock hash good"); + TEST_EQ(sd->flags & VB2_SD_FLAG_KERNEL_SIGNED, 0, " Kernel signed"); + + /* But we do in dev+rec mode */ + reset_common_data(FOR_KEYBLOCK); + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE | VB2_CONTEXT_RECOVERY_MODE; + mock_verify_keyblock_retval = VB2_ERROR_MOCK; + TEST_EQ(vb2_load_kernel_keyblock(ctx), + VB2_ERROR_MOCK, "Kernel keyblock dev+rec"); + + /* Test keyblock flags matching mode */ + reset_common_data(FOR_KEYBLOCK); + kb->keyblock_flags &= ~VB2_KEYBLOCK_FLAG_DEVELOPER_0; + TEST_EQ(vb2_load_kernel_keyblock(ctx), + VB2_ERROR_KERNEL_KEYBLOCK_DEV_FLAG, + "Kernel keyblock dev only"); + + reset_common_data(FOR_KEYBLOCK); + kb->keyblock_flags &= ~VB2_KEYBLOCK_FLAG_RECOVERY_0; + TEST_EQ(vb2_load_kernel_keyblock(ctx), + VB2_ERROR_KERNEL_KEYBLOCK_REC_FLAG, + "Kernel keyblock rec only"); + + reset_common_data(FOR_KEYBLOCK); + kb->keyblock_flags &= ~VB2_KEYBLOCK_FLAG_RECOVERY_1; + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + TEST_EQ(vb2_load_kernel_keyblock(ctx), + VB2_ERROR_KERNEL_KEYBLOCK_REC_FLAG, + "Kernel keyblock not rec"); + + reset_common_data(FOR_KEYBLOCK); + kb->keyblock_flags &= ~VB2_KEYBLOCK_FLAG_DEVELOPER_0; + kb->keyblock_flags &= ~VB2_KEYBLOCK_FLAG_RECOVERY_0; + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + TEST_EQ(vb2_load_kernel_keyblock(ctx), + VB2_ERROR_KERNEL_KEYBLOCK_DEV_FLAG, + "Kernel keyblock rec but not dev+rec"); + + reset_common_data(FOR_KEYBLOCK); + kb->keyblock_flags &= ~VB2_KEYBLOCK_FLAG_DEVELOPER_0; + kb->keyblock_flags &= ~VB2_KEYBLOCK_FLAG_RECOVERY_0; + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE | VB2_CONTEXT_RECOVERY_MODE; + TEST_SUCC(vb2_load_kernel_keyblock(ctx), + "Kernel keyblock flags dev+rec"); + + /* System in dev mode ignores flags */ + reset_common_data(FOR_KEYBLOCK); + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; + kb->keyblock_flags = 0; + TEST_SUCC(vb2_load_kernel_keyblock(ctx), "Kernel keyblock dev flags"); + + /* Test rollback */ + reset_common_data(FOR_KEYBLOCK); + kb->data_key.key_version = 0x10000; + TEST_EQ(vb2_load_kernel_keyblock(ctx), + VB2_ERROR_KERNEL_KEYBLOCK_VERSION_RANGE, + "Kernel keyblock version range"); + + reset_common_data(FOR_KEYBLOCK); + kb->data_key.key_version = 1; + TEST_EQ(vb2_load_kernel_keyblock(ctx), + VB2_ERROR_KERNEL_KEYBLOCK_VERSION_ROLLBACK, + "Kernel keyblock rollback"); + + /* Rollback ok in developer mode */ + reset_common_data(FOR_KEYBLOCK); + kb->data_key.key_version = 1; + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; + TEST_SUCC(vb2_load_kernel_keyblock(ctx), + "Kernel keyblock rollback dev"); + + /* + * Recovery keyblocks aren't versioned (and even if they were, it + * wouldn't be with the same version as a normal kernel). + */ + reset_common_data(FOR_KEYBLOCK); + kb->data_key.key_version = 1; + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + TEST_SUCC(vb2_load_kernel_keyblock(ctx), + "Kernel keyblock rollback rec"); +} + +static void load_kernel_preamble_tests(void) +{ + struct vb2_kernel_preamble *pre = &mock_vblock.p.pre; + int expected_offset; + //uint32_t v; + + /* Test successful call */ + reset_common_data(FOR_PREAMBLE); + expected_offset = sd->workbuf_used; + TEST_SUCC(vb2_load_kernel_preamble(ctx), "preamble good"); + TEST_EQ(sd->kernel_version, 0x20002, "combined version"); + TEST_EQ(sd->preamble_offset, expected_offset, + "preamble offset"); + TEST_EQ(sd->preamble_size, pre->preamble_size, "preamble size"); + TEST_EQ(sd->workbuf_used, + vb2_wb_round_up(sd->preamble_offset + + sd->preamble_size), + "workbuf used"); + + /* Expected failures */ + reset_common_data(FOR_PREAMBLE); + sd->data_key_size = 0; + TEST_EQ(vb2_load_kernel_preamble(ctx), + VB2_ERROR_KERNEL_PREAMBLE2_DATA_KEY, + "preamble no data key"); + + reset_common_data(FOR_PREAMBLE); + mock_unpack_key_retval = VB2_ERROR_UNPACK_KEY_HASH_ALGORITHM; + TEST_EQ(vb2_load_kernel_preamble(ctx), + VB2_ERROR_UNPACK_KEY_HASH_ALGORITHM, + "preamble unpack data key"); + + reset_common_data(FOR_PREAMBLE); + sd->workbuf_used = sd->workbuf_size + VB2_WORKBUF_ALIGN - + vb2_wb_round_up(sizeof(struct vb2_kernel_preamble)); + TEST_EQ(vb2_load_kernel_preamble(ctx), + VB2_ERROR_KERNEL_PREAMBLE2_WORKBUF_HEADER, + "preamble not enough workbuf for header"); + + reset_common_data(FOR_PREAMBLE); + sd->vblock_preamble_offset = sizeof(mock_vblock); + TEST_EQ(vb2_load_kernel_preamble(ctx), + VB2_ERROR_EX_READ_RESOURCE_SIZE, + "preamble read header"); + + reset_common_data(FOR_PREAMBLE); + sd->workbuf_used = sd->workbuf_size + VB2_WORKBUF_ALIGN - + vb2_wb_round_up(sizeof(mock_vblock.p)); + TEST_EQ(vb2_load_kernel_preamble(ctx), + VB2_ERROR_KERNEL_PREAMBLE2_WORKBUF, + "preamble not enough workbuf"); + + reset_common_data(FOR_PREAMBLE); + pre->preamble_size = sizeof(mock_vblock); + TEST_EQ(vb2_load_kernel_preamble(ctx), + VB2_ERROR_EX_READ_RESOURCE_SIZE, + "preamble read full"); + + reset_common_data(FOR_PREAMBLE); + mock_verify_preamble_retval = VB2_ERROR_MOCK; + TEST_EQ(vb2_load_kernel_preamble(ctx), + VB2_ERROR_MOCK, + "preamble verify"); + + reset_common_data(FOR_PREAMBLE); + pre->kernel_version = 0x10000; + TEST_EQ(vb2_load_kernel_preamble(ctx), + VB2_ERROR_KERNEL_PREAMBLE_VERSION_RANGE, + "preamble version range"); + + reset_common_data(FOR_PREAMBLE); + pre->kernel_version = 1; + TEST_EQ(vb2_load_kernel_preamble(ctx), + VB2_ERROR_KERNEL_PREAMBLE_VERSION_ROLLBACK, + "preamble version rollback"); +} + +int main(int argc, char* argv[]) +{ + verify_keyblock_hash_tests(); + load_kernel_keyblock_tests(); + load_kernel_preamble_tests(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb20_rsa_padding_tests.c b/tests/vb20_rsa_padding_tests.c new file mode 100644 index 0000000..90ff42a --- /dev/null +++ b/tests/vb20_rsa_padding_tests.c @@ -0,0 +1,153 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include + +#include "2common.h" +#include "2rsa.h" +#include "2sysincludes.h" +#include "file_keys.h" +#include "host_key.h" +#include "rsa_padding_test.h" +#include "test_common.h" + +vb2_error_t hwcrypto_modexp_return_value = VB2_SUCCESS; +vb2_error_t vb2ex_hwcrypto_modexp(const struct vb2_public_key *key, + uint8_t *inout, + uint32_t *workbuf32, int exp) { + return hwcrypto_modexp_return_value; +} + + +/** + * Test valid and invalid signatures. + */ +static void test_signatures(const struct vb2_public_key *key) +{ + uint8_t workbuf[VB2_VERIFY_DIGEST_WORKBUF_BYTES] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + uint8_t sig[RSA1024NUMBYTES]; + struct vb2_workbuf wb; + int unexpected_success; + int i; + + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + /* The first test signature is valid. */ + memcpy(sig, signatures[0], sizeof(sig)); + TEST_SUCC(vb2_rsa_verify_digest(key, sig, test_message_sha1_hash, &wb), + "RSA Padding Test valid sig"); + + /* All other signatures should fail verification. */ + unexpected_success = 0; + for (i = 1; i < sizeof(signatures) / sizeof(signatures[0]); i++) { + memcpy(sig, signatures[i], sizeof(sig)); + if (!vb2_rsa_verify_digest(key, sig, + test_message_sha1_hash, &wb)) { + fprintf(stderr, + "RSA Padding Test vector %d FAILED!\n", i); + unexpected_success++; + } + } + TEST_EQ(unexpected_success, 0, "RSA Padding Test invalid sigs"); +} + + +/** + * Test other error conditions in vb2_rsa_verify_digest(). + */ +static void test_verify_digest(struct vb2_public_key *key) { + uint8_t workbuf[VB2_VERIFY_DIGEST_WORKBUF_BYTES] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + uint8_t sig[RSA1024NUMBYTES]; + struct vb2_workbuf wb; + enum vb2_signature_algorithm orig_key_alg = key->sig_alg; + + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + memcpy(sig, signatures[0], sizeof(sig)); + TEST_SUCC(vb2_rsa_verify_digest(key, sig, test_message_sha1_hash, &wb), + "vb2_rsa_verify_digest() good"); + + TEST_EQ(vb2_rsa_verify_digest(key, NULL, test_message_sha1_hash, &wb), + VB2_ERROR_RSA_VERIFY_PARAM, "vb2_rsa_verify_digest() bad arg"); + + key->allow_hwcrypto = 1; + memcpy(sig, signatures[0], sizeof(sig)); + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + hwcrypto_modexp_return_value = VB2_SUCCESS; + TEST_NEQ(vb2_rsa_verify_digest(key, sig, test_message_sha1_hash, &wb), + VB2_SUCCESS, "vb2_rsa_verify_digest() hwcrypto modexp fails"); + + memcpy(sig, signatures[0], sizeof(sig)); + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + hwcrypto_modexp_return_value = VB2_ERROR_EX_HWCRYPTO_UNSUPPORTED; + TEST_SUCC(vb2_rsa_verify_digest(key, sig, test_message_sha1_hash, &wb), + "vb2_rsa_verify_digest() hwcrypto modexp fallback to sw"); + key->allow_hwcrypto = 0; + + memcpy(sig, signatures[0], sizeof(sig)); + vb2_workbuf_init(&wb, workbuf, sizeof(sig) * 3 - 1); + TEST_EQ(vb2_rsa_verify_digest(key, sig, test_message_sha1_hash, &wb), + VB2_ERROR_RSA_VERIFY_WORKBUF, + "vb2_rsa_verify_digest() small workbuf"); + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + key->sig_alg = VB2_SIG_INVALID; + memcpy(sig, signatures[0], sizeof(sig)); + TEST_EQ(vb2_rsa_verify_digest(key, sig, test_message_sha1_hash, &wb), + VB2_ERROR_RSA_VERIFY_ALGORITHM, + "vb2_rsa_verify_digest() bad key alg"); + key->sig_alg = orig_key_alg; + + key->arrsize *= 2; + memcpy(sig, signatures[0], sizeof(sig)); + TEST_EQ(vb2_rsa_verify_digest(key, sig, test_message_sha1_hash, &wb), + VB2_ERROR_RSA_VERIFY_SIG_LEN, + "vb2_rsa_verify_digest() bad sig len"); + key->arrsize /= 2; + + /* Corrupt the signature near start and end */ + memcpy(sig, signatures[0], sizeof(sig)); + sig[3] ^= 0x42; + TEST_EQ(vb2_rsa_verify_digest(key, sig, test_message_sha1_hash, &wb), + VB2_ERROR_RSA_PADDING, "vb2_rsa_verify_digest() bad sig"); + + memcpy(sig, signatures[0], sizeof(sig)); + sig[RSA1024NUMBYTES - 3] ^= 0x56; + TEST_EQ(vb2_rsa_verify_digest(key, sig, test_message_sha1_hash, &wb), + VB2_ERROR_RSA_PADDING, "vb2_rsa_verify_digest() bad sig end"); +} + +int main(int argc, char *argv[]) +{ + struct vb2_public_key k2; + struct vb2_packed_key *pk; + + /* Read test key */ + if (argc != 2) { + fprintf(stderr, "Usage: %s \n", argv[0]); + return 1; + } + pk = vb2_read_packed_keyb(argv[1], VB2_ALG_RSA1024_SHA1, 0); + if (!pk) { + fprintf(stderr, "Couldn't read RSA public key for the test.\n"); + return 1; + } + if (VB2_SUCCESS != vb2_unpack_key(&k2, pk)) { + fprintf(stderr, "Couldn't unpack RSA public key.\n"); + free(pk); + return 1; + } + + /* Run tests */ + test_signatures(&k2); + test_verify_digest(&k2); + + /* Clean up and exit */ + free(pk); + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb20_verify_fw.c b/tests/vb20_verify_fw.c new file mode 100644 index 0000000..f732b8b --- /dev/null +++ b/tests/vb20_verify_fw.c @@ -0,0 +1,227 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Routines for verifying a firmware image's signature. + */ + +#include +#include +#include + +#include "2common.h" +#include "2misc.h" +#include "2sysincludes.h" + +const char *gbb_fname; +const char *vblock_fname; +const char *body_fname; + +/** + * Local implementation which reads resources from individual files. Could be + * more elegant and read from bios.bin, if we understood the fmap. + */ +vb2_error_t vb2ex_read_resource(struct vb2_context *c, + enum vb2_resource_index index, uint32_t offset, + void *buf, uint32_t size) +{ + const char *fname; + FILE *f; + int got_size; + + /* Get the filename for the resource */ + switch (index) { + case VB2_RES_GBB: + fname = gbb_fname; + break; + case VB2_RES_FW_VBLOCK: + fname = vblock_fname; + break; + default: + return VB2_ERROR_UNKNOWN; + } + + /* Open file and seek to the requested offset */ + f = fopen(fname, "rb"); + if (!f) + return VB2_ERROR_UNKNOWN; + + if (fseek(f, offset, SEEK_SET)) { + fclose(f); + return VB2_ERROR_UNKNOWN; + } + + /* Read data and close file */ + got_size = fread(buf, 1, size, f); + fclose(f); + + /* Return success if we read everything */ + return got_size == size ? VB2_SUCCESS : VB2_ERROR_UNKNOWN; +} + +vb2_error_t vb2ex_tpm_clear_owner(struct vb2_context *c) +{ + // TODO: implement + return VB2_SUCCESS; +} + +/** + * Save non-volatile and/or secure data if needed. + */ +static void save_if_needed(struct vb2_context *c) +{ + + if (c->flags & VB2_CONTEXT_NVDATA_CHANGED) { + // TODO: implement + c->flags &= ~VB2_CONTEXT_NVDATA_CHANGED; + } + + if (c->flags & VB2_CONTEXT_SECDATA_FIRMWARE_CHANGED) { + // TODO: implement + c->flags &= ~VB2_CONTEXT_SECDATA_FIRMWARE_CHANGED; + } +} + +/** + * Verify firmware body + */ +static vb2_error_t hash_body(struct vb2_context *c) +{ + uint32_t remaining; + uint8_t block[8192]; + uint32_t size; + FILE *f; + vb2_error_t rv; + + /* Open the body data */ + f = fopen(body_fname, "rb"); + if (!f) + return VB2_ERROR_TEST_INPUT_FILE; + + /* Start the body hash */ + rv = vb2api_init_hash(c, VB2_HASH_TAG_FW_BODY); + if (rv) { + fclose(f); + return rv; + } + + remaining = vb2api_get_firmware_size(c); + printf("Expect %d bytes of body...\n", remaining); + + /* Extend over the body */ + while (remaining) { + size = sizeof(block); + if (size > remaining) + size = remaining; + + /* Read next body block */ + size = fread(block, 1, size, f); + if (size <= 0) + break; + + /* Hash it */ + rv = vb2api_extend_hash(c, block, size); + if (rv) { + fclose(f); + return rv; + } + + remaining -= size; + } + + fclose(f); + + /* Check the result */ + rv = vb2api_check_hash(c); + if (rv) + return rv; + + return VB2_SUCCESS; +} + +static void print_help(const char *progname) +{ + printf("Usage: %s \n", progname); +} + +int main(int argc, char *argv[]) +{ + uint8_t workbuf[VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + struct vb2_context *ctx; + struct vb2_shared_data *sd; + vb2_error_t rv; + + if (argc < 4) { + print_help(argv[0]); + return 1; + } + + /* Save filenames */ + gbb_fname = argv[1]; + vblock_fname = argv[2]; + body_fname = argv[3]; + + /* Intialize workbuf with sentinel value to see how much we'll use. */ + uint32_t *ptr = (uint32_t *)workbuf; + while ((uint8_t *)ptr + sizeof(*ptr) <= workbuf + sizeof(workbuf)) + *ptr++ = 0xbeefdead; + + /* Set up context */ + if (vb2api_init(workbuf, sizeof(workbuf), &ctx)) { + printf("Failed to initialize workbuf.\n"); + return 1; + } + sd = vb2_get_sd(ctx); + + /* Initialize secure context */ + vb2api_secdata_firmware_create(ctx); + vb2api_secdata_kernel_create(ctx); + + // TODO: optional args to set contents for nvdata, secdata? + + /* Do early init */ + printf("Phase 1...\n"); + rv = vb2api_fw_phase1(ctx); + if (rv) { + printf("Phase 1 wants recovery mode.\n"); + save_if_needed(ctx); + return rv; + } + + /* Determine which firmware slot to boot */ + printf("Phase 2...\n"); + rv = vb2api_fw_phase2(ctx); + if (rv) { + printf("Phase 2 wants reboot.\n"); + save_if_needed(ctx); + return rv; + } + + /* Try that slot */ + printf("Phase 3...\n"); + rv = vb2api_fw_phase3(ctx); + if (rv) { + printf("Phase 3 wants reboot.\n"); + save_if_needed(ctx); + return rv; + } + + /* Verify body */ + printf("Hash body...\n"); + rv = hash_body(ctx); + save_if_needed(ctx); + if (rv) { + printf("Phase 4 wants reboot.\n"); + return rv; + } + + printf("Yaay!\n"); + + while ((uint8_t *)ptr > workbuf && *--ptr == 0xbeefdead) + /* find last used workbuf offset */; + printf("Workbuf used = %d bytes, high watermark = %zu bytes\n", + sd->workbuf_used, (uint8_t *)ptr + sizeof(*ptr) - workbuf); + + return 0; +} diff --git a/tests/vb21_host_common2_tests.c b/tests/vb21_host_common2_tests.c new file mode 100644 index 0000000..b2ceb95 --- /dev/null +++ b/tests/vb21_host_common2_tests.c @@ -0,0 +1,340 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for firmware image library. + */ + +#include +#include +#include + +#include "2common.h" +#include "2rsa.h" +#include "2sysincludes.h" +#include "host_common.h" +#include "host_common21.h" +#include "host_key21.h" +#include "host_signature21.h" +#include "test_common.h" +#include "util_misc.h" + +static const uint8_t test_data[] = "This is some test data to sign."; +static const uint32_t test_size = sizeof(test_data); + +static void test_unpack_key(const struct vb21_packed_key *key) +{ + struct vb2_public_key pubk; + struct vb21_packed_key *key2; + uint32_t size = key->c.total_size; + + /* Make a copy of the key for testing */ + key2 = (struct vb21_packed_key *)malloc(size); + + memcpy(key2, key, size); + TEST_SUCC(vb21_unpack_key(&pubk, (uint8_t *)key2, size), + "vb21_unpack_key() ok"); + + memcpy(key2, key, size); + key2->key_offset += 4; + TEST_EQ(vb21_unpack_key(&pubk, (uint8_t *)key2, size), + VB2_ERROR_COMMON_MEMBER_SIZE, + "vb21_unpack_key() buffer too small"); + + memcpy(key2, key, size); + key2->c.fixed_size += size; + TEST_EQ(vb21_unpack_key(&pubk, (uint8_t *)key2, size), + VB2_ERROR_COMMON_FIXED_SIZE, + "vb21_unpack_key() buffer too small for desc"); + + memcpy(key2, key, size); + key2->c.desc_size = 0; + TEST_SUCC(vb21_unpack_key(&pubk, (uint8_t *)key2, size), + "vb21_unpack_key() no desc"); + TEST_EQ(strcmp(pubk.desc, ""), 0, " empty desc string"); + + memcpy(key2, key, size); + key2->c.magic++; + TEST_EQ(vb21_unpack_key(&pubk, (uint8_t *)key2, size), + VB2_ERROR_UNPACK_KEY_MAGIC, + "vb21_unpack_key() bad magic"); + + memcpy(key2, key, size); + key2->c.struct_version_major++; + TEST_EQ(vb21_unpack_key(&pubk, (uint8_t *)key2, size), + VB2_ERROR_UNPACK_KEY_STRUCT_VERSION, + "vb21_unpack_key() bad major version"); + + /* + * Minor version changes are ok. Note that this test assumes that the + * source key struct version is the highest actually known to the + * reader. If the reader does know about minor version + 1 and that + * adds fields, this test will likely fail. But at that point, we + * should have already added a test for minor version compatibility to + * handle both old and new struct versions, so someone will have + * noticed this comment. + */ + memcpy(key2, key, size); + key2->c.struct_version_minor++; + TEST_SUCC(vb21_unpack_key(&pubk, (uint8_t *)key2, size), + "vb21_unpack_key() minor version change ok"); + + memcpy(key2, key, size); + key2->sig_alg = VB2_SIG_INVALID; + TEST_EQ(vb21_unpack_key(&pubk, (uint8_t *)key2, size), + VB2_ERROR_UNPACK_KEY_SIG_ALGORITHM, + "vb21_unpack_key() bad sig algorithm"); + + memcpy(key2, key, size); + key2->hash_alg = VB2_HASH_INVALID; + TEST_EQ(vb21_unpack_key(&pubk, (uint8_t *)key2, size), + VB2_ERROR_UNPACK_KEY_HASH_ALGORITHM, + "vb21_unpack_key() bad hash algorithm"); + + memcpy(key2, key, size); + key2->key_size -= 4; + TEST_EQ(vb21_unpack_key(&pubk, (uint8_t *)key2, size), + VB2_ERROR_UNPACK_KEY_SIZE, + "vb21_unpack_key() invalid size"); + + memcpy(key2, key, size); + key2->key_offset--; + TEST_EQ(vb21_unpack_key(&pubk, (uint8_t *)key2, size), + VB2_ERROR_COMMON_MEMBER_UNALIGNED, + "vb21_unpack_key() unaligned data"); + + memcpy(key2, key, size); + *(uint32_t *)((uint8_t *)key2 + key2->key_offset) /= 2; + TEST_EQ(vb21_unpack_key(&pubk, (uint8_t *)key2, size), + VB2_ERROR_UNPACK_KEY_ARRAY_SIZE, + "vb21_unpack_key() invalid key array size"); + + free(key2); +} + +static void test_verify_signature(const struct vb21_signature *sig) +{ + struct vb21_signature *sig2; + uint8_t *buf2; + uint32_t size; + + /* Make a copy of the signature */ + size = sig->c.total_size; + buf2 = malloc(size); + sig2 = (struct vb21_signature *)buf2; + + memcpy(buf2, sig, size); + TEST_SUCC(vb21_verify_signature(sig2, size), "verify_sig ok"); + sig2->c.magic = VB21_MAGIC_PACKED_KEY; + TEST_EQ(vb21_verify_signature(sig2, size), VB2_ERROR_SIG_MAGIC, + "verify_sig magic"); + + memcpy(buf2, sig, size); + sig2->c.total_size += 4; + TEST_EQ(vb21_verify_signature(sig2, size), VB2_ERROR_COMMON_TOTAL_SIZE, + "verify_sig common header"); + + memcpy(buf2, sig, size); + sig2->c.struct_version_minor++; + TEST_SUCC(vb21_verify_signature(sig2, size), "verify_sig minor ver"); + sig2->c.struct_version_major++; + TEST_EQ(vb21_verify_signature(sig2, size), VB2_ERROR_SIG_VERSION, + "verify_sig major ver"); + + memcpy(buf2, sig, size); + sig2->c.fixed_size -= 4; + sig2->c.desc_size += 4; + TEST_EQ(vb21_verify_signature(sig2, size), VB2_ERROR_SIG_HEADER_SIZE, + "verify_sig header size"); + + memcpy(buf2, sig, size); + sig2->sig_size += 4; + TEST_EQ(vb21_verify_signature(sig2, size), VB2_ERROR_COMMON_MEMBER_SIZE, + "verify_sig sig size"); + + memcpy(buf2, sig, size); + sig2->sig_alg = VB2_SIG_INVALID; + TEST_EQ(vb21_verify_signature(sig2, size), VB2_ERROR_SIG_ALGORITHM, + "verify_sig sig alg"); + + memcpy(buf2, sig, size); + sig2->sig_alg = (sig2->sig_alg == VB2_SIG_NONE ? + VB2_SIG_RSA1024 : VB2_SIG_NONE); + TEST_EQ(vb21_verify_signature(sig2, size), VB2_ERROR_SIG_SIZE, + "verify_sig sig size"); + + free(buf2); +} + +static void test_verify_data(const struct vb2_public_key *pubk_orig, + const struct vb21_signature *sig) +{ + uint8_t workbuf[VB2_VERIFY_DATA_WORKBUF_BYTES] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + struct vb2_workbuf wb; + + struct vb2_public_key pubk; + struct vb21_signature *sig2; + uint8_t *buf2; + uint32_t size; + + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + pubk = *pubk_orig; + + /* Allocate signature copy for tests */ + size = sig->c.total_size; + buf2 = malloc(size); + sig2 = (struct vb21_signature *)buf2; + + memcpy(buf2, sig, size); + pubk.sig_alg = VB2_SIG_INVALID; + TEST_EQ(vb21_verify_data(test_data, test_size, sig2, &pubk, &wb), + VB2_ERROR_VDATA_ALGORITHM, "vb21_verify_data() bad sig alg"); + pubk = *pubk_orig; + + memcpy(buf2, sig, size); + pubk.hash_alg = VB2_HASH_INVALID; + TEST_EQ(vb21_verify_data(test_data, test_size, sig2, &pubk, &wb), + VB2_ERROR_VDATA_DIGEST_SIZE, + "vb21_verify_data() bad hash alg"); + pubk = *pubk_orig; + + vb2_workbuf_init(&wb, workbuf, 4); + memcpy(buf2, sig, size); + TEST_EQ(vb21_verify_data(test_data, test_size, sig2, &pubk, &wb), + VB2_ERROR_VDATA_WORKBUF_DIGEST, + "vb21_verify_data() workbuf too small"); + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + memcpy(buf2, sig, size); + TEST_EQ(vb21_verify_data(test_data, test_size, sig2, &pubk, &wb), + 0, "vb21_verify_data() ok"); + + memcpy(buf2, sig, size); + sig2->sig_size -= 16; + TEST_EQ(vb21_verify_data(test_data, test_size, sig2, &pubk, &wb), + VB2_ERROR_VDATA_SIG_SIZE, "vb21_verify_data() wrong sig size"); + + memcpy(buf2, sig, size); + TEST_EQ(vb21_verify_data(test_data, test_size - 1, sig2, &pubk, &wb), + VB2_ERROR_VDATA_SIZE, "vb21_verify_data() wrong data size"); + + memcpy(buf2, sig, size); + sig2->hash_alg = (sig2->hash_alg == VB2_HASH_SHA1 ? + VB2_HASH_SHA256 : VB2_HASH_SHA1); + TEST_EQ(vb21_verify_data(test_data, test_size, sig2, &pubk, &wb), + VB2_ERROR_VDATA_ALGORITHM_MISMATCH, + "vb21_verify_data() alg mismatch"); + + + memcpy(buf2, sig, size); + buf2[sig2->sig_offset] ^= 0x5A; + TEST_EQ(vb21_verify_data(test_data, test_size, sig2, &pubk, &wb), + VB2_ERROR_RSA_PADDING, "vb21_verify_data() wrong sig"); + + free(buf2); +} + +static int test_algorithm(int key_algorithm, const char *keys_dir) +{ + char filename[1024]; + + enum vb2_signature_algorithm sig_alg = + vb2_crypto_to_signature(key_algorithm); + enum vb2_hash_algorithm hash_alg = vb2_crypto_to_hash(key_algorithm); + + struct vb2_private_key *prik = NULL; + struct vb21_signature *sig2 = NULL; + struct vb2_public_key *pubk; + uint8_t *pubk_buf = 0; + uint8_t *keyb_data = 0; + uint32_t keyb_size; + struct vb21_packed_key *key2 = NULL; + + printf("***Testing algorithm: %s\n", + vb2_get_crypto_algorithm_name(key_algorithm)); + + snprintf(filename, sizeof(filename), "%s/key_%s.pem", + keys_dir, + vb2_get_crypto_algorithm_file(key_algorithm)); + TEST_SUCC(vb2_private_key_read_pem(&prik, filename), + "Read private key"); + prik->hash_alg = hash_alg; + prik->sig_alg = sig_alg; + vb2_private_key_set_desc(prik, "private key"); + + + /* Create the public key */ + TEST_SUCC(vb2_public_key_alloc(&pubk, sig_alg), "Allocate public key"); + /* Extract the keyb blob */ + TEST_SUCC(vb_keyb_from_rsa(prik->rsa_private_key, + &keyb_data, &keyb_size), + "Extract public key"); + + /* + * Copy the keyb blob to the public key's buffer, because that's + * where vb2_unpack_key_data() and vb2_public_key_pack() expect + * to find it. + */ + pubk_buf = vb2_public_key_packed_data(pubk); + memcpy(pubk_buf, keyb_data, keyb_size); + + /* Fill in the internal struct pointers */ + TEST_SUCC(vb2_unpack_key_data(pubk, pubk_buf, keyb_size), + "unpack public key blob"); + + pubk->hash_alg = hash_alg; + vb2_public_key_set_desc(pubk, "public key"); + TEST_SUCC(vb21_public_key_pack(&key2, pubk), "Pack public key"); + + /* Calculate good signatures */ + TEST_SUCC(vb21_sign_data(&sig2, test_data, test_size, prik, ""), + "Make test signature"); + + test_unpack_key(key2); + test_verify_data(pubk, sig2); + test_verify_signature(sig2); + + free(keyb_data); + free(key2); + free(sig2); + vb2_private_key_free(prik); + vb2_public_key_free(pubk); + + return 0; +} + +/* Test only the algorithms we use */ +const int key_algs[] = { + VB2_ALG_RSA2048_SHA256, + VB2_ALG_RSA4096_SHA256, + VB2_ALG_RSA8192_SHA512, +}; + +int main(int argc, char *argv[]) { + + if (argc == 2) { + int i; + + for (i = 0; i < ARRAY_SIZE(key_algs); i++) { + if (test_algorithm(key_algs[i], argv[1])) + return 1; + } + + } else if (argc == 3 && !strcasecmp(argv[2], "--all")) { + /* Test all the algorithms */ + int alg; + + for (alg = 0; alg < VB2_ALG_COUNT; alg++) { + if (test_algorithm(alg, argv[1])) + return 1; + } + + } else { + fprintf(stderr, "Usage: %s [--all]", argv[0]); + return -1; + } + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb21_host_common_tests.c b/tests/vb21_host_common_tests.c new file mode 100644 index 0000000..3ab5dbc --- /dev/null +++ b/tests/vb21_host_common_tests.c @@ -0,0 +1,247 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for firmware 2common.c + */ + +#include "2common.h" +#include "2rsa.h" +#include "2sysincludes.h" +#include "host_common21.h" +#include "host_key21.h" +#include "host_signature21.h" +#include "test_common.h" + +static const uint8_t test_data[] = "This is some test data to sign."; + +/* + * Test struct packing for vboot_struct.h structs which are passed between + * firmware and OS, or passed between different phases of firmware. + */ +static void test_struct_packing(void) +{ + /* Test new struct sizes */ + TEST_EQ(EXPECTED_ID_SIZE, + sizeof(struct vb2_id), + "sizeof(vb2_id)"); + TEST_EQ(EXPECTED_VB21_STRUCT_COMMON_SIZE, + sizeof(struct vb21_struct_common), + "sizeof(vb21_struct_common)"); + TEST_EQ(EXPECTED_VB21_PACKED_KEY_SIZE, + sizeof(struct vb21_packed_key), + "sizeof(vb21_packed_key)"); + TEST_EQ(EXPECTED_VB21_SIGNATURE_SIZE, + sizeof(struct vb21_signature), + "sizeof(vb21_signature)"); +} + +/** + * Common header functions + */ +static void test_common_header_functions(void) +{ + uint8_t cbuf[sizeof(struct vb21_struct_common) + 128]; + uint8_t cbufgood[sizeof(cbuf)]; + struct vb21_struct_common *c = (struct vb21_struct_common *)cbuf; + struct vb21_struct_common *c2; + const char test_desc[32] = "test desc"; + uint32_t desc_end, m; + + c->total_size = sizeof(cbuf); + c->fixed_size = sizeof(*c); + c->desc_size = sizeof(test_desc); + memcpy(cbuf + c->fixed_size, test_desc, sizeof(test_desc)); + desc_end = c->fixed_size + c->desc_size; + + c2 = (struct vb21_struct_common *)(cbuf + desc_end); + c2->total_size = c->total_size - desc_end; + c2->fixed_size = sizeof(*c2); + c2->desc_size = 0; + + /* Description helper */ + TEST_EQ(0, strcmp(vb21_common_desc(c), test_desc), "vb21_common_desc()"); + TEST_EQ(0, strcmp(vb21_common_desc(c2), ""), "vb21_common_desc() empty"); + + TEST_SUCC(vb21_verify_common_header(cbuf, sizeof(cbuf)), + "vb21_verify_common_header() good"); + memcpy(cbufgood, cbuf, sizeof(cbufgood)); + + memcpy(cbuf, cbufgood, sizeof(cbuf)); + c->total_size += 4; + TEST_EQ(vb21_verify_common_header(cbuf, sizeof(cbuf)), + VB2_ERROR_COMMON_TOTAL_SIZE, + "vb21_verify_common_header() total size"); + + memcpy(cbuf, cbufgood, sizeof(cbuf)); + c->fixed_size = c->total_size + 4; + TEST_EQ(vb21_verify_common_header(cbuf, sizeof(cbuf)), + VB2_ERROR_COMMON_FIXED_SIZE, + "vb21_verify_common_header() fixed size"); + + memcpy(cbuf, cbufgood, sizeof(cbuf)); + c->desc_size = c->total_size - c->fixed_size + 4; + TEST_EQ(vb21_verify_common_header(cbuf, sizeof(cbuf)), + VB2_ERROR_COMMON_DESC_SIZE, + "vb21_verify_common_header() desc size"); + + memcpy(cbuf, cbufgood, sizeof(cbuf)); + c->total_size--; + TEST_EQ(vb21_verify_common_header(cbuf, sizeof(cbuf)), + VB2_ERROR_COMMON_TOTAL_UNALIGNED, + "vb21_verify_common_header() total unaligned"); + + memcpy(cbuf, cbufgood, sizeof(cbuf)); + c->fixed_size++; + TEST_EQ(vb21_verify_common_header(cbuf, sizeof(cbuf)), + VB2_ERROR_COMMON_FIXED_UNALIGNED, + "vb21_verify_common_header() fixed unaligned"); + + memcpy(cbuf, cbufgood, sizeof(cbuf)); + c->desc_size--; + TEST_EQ(vb21_verify_common_header(cbuf, sizeof(cbuf)), + VB2_ERROR_COMMON_DESC_UNALIGNED, + "vb21_verify_common_header() desc unaligned"); + + memcpy(cbuf, cbufgood, sizeof(cbuf)); + c->desc_size = -4; + TEST_EQ(vb21_verify_common_header(cbuf, sizeof(cbuf)), + VB2_ERROR_COMMON_DESC_WRAPS, + "vb21_verify_common_header() desc wraps"); + + memcpy(cbuf, cbufgood, sizeof(cbuf)); + cbuf[desc_end - 1] = 1; + TEST_EQ(vb21_verify_common_header(cbuf, sizeof(cbuf)), + VB2_ERROR_COMMON_DESC_TERMINATOR, + "vb21_verify_common_header() desc not terminated"); + + /* Member checking function */ + memcpy(cbuf, cbufgood, sizeof(cbuf)); + m = 0; + TEST_SUCC(vb21_verify_common_member(cbuf, &m, c->total_size - 8, 4), + "vb21_verify_common_member()"); + TEST_EQ(m, c->total_size - 4, " new minimum"); + + m = desc_end; + TEST_SUCC(vb21_verify_common_member(cbuf, &m, desc_end, 4), + "vb21_verify_common_member() good offset"); + TEST_EQ(m, desc_end + 4, " new minimum"); + + m = 0; + TEST_EQ(vb21_verify_common_member(cbuf, &m, c->total_size - 8, -4), + VB2_ERROR_COMMON_MEMBER_WRAPS, + "vb21_verify_common_member() wraps"); + + m = 0; + TEST_EQ(vb21_verify_common_member(cbuf, &m, c->total_size - 7, 4), + VB2_ERROR_COMMON_MEMBER_UNALIGNED, + "vb21_verify_common_member() offset unaligned"); + + m = 0; + TEST_EQ(vb21_verify_common_member(cbuf, &m, c->total_size - 8, 5), + VB2_ERROR_COMMON_MEMBER_UNALIGNED, + "vb21_verify_common_member() size unaligned"); + + m = 0; + TEST_EQ(vb21_verify_common_member(cbuf, &m, desc_end - 4, 4), + VB2_ERROR_COMMON_MEMBER_OVERLAP, + "vb21_verify_common_member() overlap"); + + m = desc_end + 4; + TEST_EQ(vb21_verify_common_member(cbuf, &m, desc_end, 4), + VB2_ERROR_COMMON_MEMBER_OVERLAP, + "vb21_verify_common_member() overlap 2"); + + m = 0; + TEST_EQ(vb21_verify_common_member(cbuf, &m, c->total_size - 4, 8), + VB2_ERROR_COMMON_MEMBER_SIZE, + "vb21_verify_common_member() size"); + + /* Subobject checking */ + m = 0; + TEST_SUCC(vb21_verify_common_subobject(cbuf, &m, desc_end), + "vb21_verify_common_subobject() good offset"); + TEST_EQ(m, sizeof(cbuf), " new minimum"); + + m = desc_end + 4; + TEST_EQ(vb21_verify_common_subobject(cbuf, &m, desc_end), + VB2_ERROR_COMMON_MEMBER_OVERLAP, + "vb21_verify_common_subobject() overlap"); + + m = 0; + c2->total_size += 4; + TEST_EQ(vb21_verify_common_subobject(cbuf, &m, desc_end), + VB2_ERROR_COMMON_TOTAL_SIZE, + "vb21_verify_common_subobject() size"); +} + +/** + * Signature size + */ +static void test_sig_size(void) +{ + TEST_EQ(vb2_sig_size(VB2_SIG_INVALID, VB2_HASH_SHA256), 0, + "vb2_sig_size() sig invalid"); + + TEST_EQ(vb2_sig_size(VB2_SIG_RSA2048, VB2_HASH_INVALID), 0, + "vb2_sig_size() hash invalid"); + + TEST_EQ(vb2_sig_size(VB2_SIG_RSA2048, VB2_HASH_SHA256), 2048 / 8, + "vb2_sig_size() RSA2048"); + TEST_EQ(vb2_sig_size(VB2_SIG_RSA4096, VB2_HASH_SHA256), 4096 / 8, + "vb2_sig_size() RSA4096"); + TEST_EQ(vb2_sig_size(VB2_SIG_RSA8192, VB2_HASH_SHA512), 8192 / 8, + "vb2_sig_size() RSA8192"); + + TEST_EQ(vb2_sig_size(VB2_SIG_NONE, VB2_HASH_SHA1), + VB2_SHA1_DIGEST_SIZE, "vb2_sig_size() SHA1"); + TEST_EQ(vb2_sig_size(VB2_SIG_NONE, VB2_HASH_SHA256), + VB2_SHA256_DIGEST_SIZE, "vb2_sig_size() SHA256"); + TEST_EQ(vb2_sig_size(VB2_SIG_NONE, VB2_HASH_SHA512), + VB2_SHA512_DIGEST_SIZE, "vb2_sig_size() SHA512"); +} + +/** + * Verify data on bare hash + */ +static void test_verify_hash(void) +{ + struct vb21_signature *sig; + const struct vb2_private_key *prik; + struct vb2_public_key pubk; + uint8_t workbuf[VB2_VERIFY_DATA_WORKBUF_BYTES] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + struct vb2_workbuf wb; + + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + TEST_SUCC(vb2_private_key_hash(&prik, VB2_HASH_SHA256), + "create private hash key"); + TEST_SUCC(vb2_public_key_hash(&pubk, VB2_HASH_SHA256), + "create hash key"); + + /* Create the signature */ + TEST_SUCC(vb21_sign_data(&sig, test_data, sizeof(test_data), + prik, NULL), + "create hash sig"); + + TEST_SUCC(vb21_verify_data(test_data, sizeof(test_data), + sig, &pubk, &wb), + "vb21_verify_data() hash ok"); + + *((uint8_t *)sig + sig->sig_offset) ^= 0xab; + TEST_EQ(vb21_verify_data(test_data, sizeof(test_data), sig, &pubk, &wb), + VB2_ERROR_VDATA_VERIFY_DIGEST, "vb21_verify_data() hash bad"); + + free(sig); +} + +int main(int argc, char* argv[]) +{ + test_struct_packing(); + test_common_header_functions(); + test_sig_size(); + test_verify_hash(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb21_host_key_tests.c b/tests/vb21_host_key_tests.c new file mode 100644 index 0000000..e8eef9b --- /dev/null +++ b/tests/vb21_host_key_tests.c @@ -0,0 +1,320 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for host library vboot2 key functions + */ + +#include +#include + +#include "2common.h" +#include "2rsa.h" +#include "2sysincludes.h" +#include "host_common.h" +#include "host_common21.h" +#include "host_key21.h" +#include "test_common.h" + +/* Test only the algorithms we use */ +struct alg_combo { + const char *name; + enum vb2_signature_algorithm sig_alg; + enum vb2_hash_algorithm hash_alg; +}; + +static const struct alg_combo test_algs[] = { + {"RSA2048/SHA-256", VB2_SIG_RSA2048, VB2_HASH_SHA256}, + {"RSA4096/SHA-256", VB2_SIG_RSA4096, VB2_HASH_SHA256}, + {"RSA8192/SHA-512", VB2_SIG_RSA8192, VB2_HASH_SHA512}, +}; + +static void private_key_tests(const struct alg_combo *combo, + const char *pemfile, const char *temp_dir) +{ + struct vb2_private_key *key, *k2; + const struct vb2_private_key *ckey; + struct vb21_packed_private_key *pkey; + char *testfile; + const char notapem[] = "not_a_pem"; + const char testdesc[] = "test desc"; + const struct vb2_id test_id = {.raw = {0xaa}}; + uint8_t *buf, *buf2; + uint32_t bufsize; + + xasprintf(&testfile, "%s/test.vbprik2", temp_dir); + + TEST_SUCC(vb2_private_key_read_pem(&key, pemfile), "Read pem - good"); + TEST_PTR_NEQ(key, NULL, " key_ptr"); + TEST_PTR_NEQ(key->rsa_private_key, NULL, " rsa_private_key"); + TEST_PTR_EQ(key->desc, NULL, " desc"); + vb2_private_key_free(key); + + TEST_EQ(vb2_private_key_read_pem(&key, "no_such_key"), + VB2_ERROR_READ_PEM_FILE_OPEN, "Read pem - no key"); + TEST_PTR_EQ(key, NULL, " key_ptr"); + + vb2_write_file(testfile, (const uint8_t *)notapem, sizeof(notapem)); + TEST_EQ(vb2_private_key_read_pem(&key, testfile), + VB2_ERROR_READ_PEM_RSA, "Read pem - not a pem"); + unlink(testfile); + + TEST_SUCC(vb2_private_key_read_pem(&key, pemfile), "Read pem - good2"); + TEST_SUCC(vb2_private_key_set_desc(key, testdesc), "Set desc"); + TEST_PTR_NEQ(key->desc, NULL, " desc"); + TEST_PTR_NEQ(key->desc, testdesc, " made a copy"); + TEST_EQ(strcmp(key->desc, testdesc), 0, " right contents"); + TEST_SUCC(vb2_private_key_set_desc(key, NULL), "Clear desc"); + TEST_PTR_EQ(key->desc, NULL, " desc"); + TEST_SUCC(vb2_private_key_set_desc(key, testdesc), "Set desc"); + vb2_private_key_free(key); + + TEST_SUCC(vb2_private_key_read_pem(&key, pemfile), "Read pem - good3"); + TEST_SUCC(vb2_private_key_set_desc(key, testdesc), "Set desc"); + key->hash_alg = combo->hash_alg; + key->sig_alg = combo->sig_alg; + key->id = test_id; + + unlink(testfile); + + TEST_EQ(vb21_private_key_read(&k2, testfile), + VB2_ERROR_READ_FILE_OPEN, "Read key no file"); + TEST_EQ(vb21_private_key_write(key, "no/such/dir"), + VB2_ERROR_PRIVATE_KEY_WRITE_FILE, "Write key to bad path"); + + TEST_SUCC(vb21_private_key_write(key, testfile), "Write key good"); + TEST_SUCC(vb21_private_key_read(&k2, testfile), "Read key good"); + TEST_PTR_NEQ(k2, NULL, " key_ptr"); + TEST_EQ(k2->sig_alg, key->sig_alg, " sig alg"); + TEST_EQ(k2->hash_alg, key->hash_alg, " hash alg"); + TEST_EQ(memcmp(&k2->id, &key->id, sizeof(k2->id)), 0, " id"); + TEST_EQ(strcmp(k2->desc, testdesc), 0, " desc"); + vb2_private_key_free(k2); + + TEST_SUCC(vb2_read_file(testfile, &buf, &bufsize), "Read key raw"); + pkey = (struct vb21_packed_private_key *)buf; + + /* Make a backup of the good buffer so we can mangle it */ + buf2 = malloc(bufsize); + memcpy(buf2, buf, bufsize); + + TEST_SUCC(vb21_private_key_unpack(&k2, buf, bufsize), + "Unpack private key good"); + vb2_private_key_free(k2); + + memcpy(buf, buf2, bufsize); + pkey->c.magic = VB21_MAGIC_PACKED_KEY; + TEST_EQ(vb21_private_key_unpack(&k2, buf, bufsize), + VB2_ERROR_UNPACK_PRIVATE_KEY_MAGIC, + "Unpack private key bad magic"); + TEST_PTR_EQ(k2, NULL, " key_ptr"); + + memcpy(buf, buf2, bufsize); + pkey->c.desc_size++; + TEST_EQ(vb21_private_key_unpack(&k2, buf, bufsize), + VB2_ERROR_UNPACK_PRIVATE_KEY_HEADER, + "Unpack private key bad header"); + + memcpy(buf, buf2, bufsize); + pkey->key_size += pkey->c.total_size; + TEST_EQ(vb21_private_key_unpack(&k2, buf, bufsize), + VB2_ERROR_UNPACK_PRIVATE_KEY_DATA, + "Unpack private key bad data size"); + + memcpy(buf, buf2, bufsize); + pkey->c.struct_version_major++; + TEST_EQ(vb21_private_key_unpack(&k2, buf, bufsize), + VB2_ERROR_UNPACK_PRIVATE_KEY_STRUCT_VERSION, + "Unpack private key bad struct version"); + + memcpy(buf, buf2, bufsize); + pkey->c.struct_version_minor++; + TEST_SUCC(vb21_private_key_unpack(&k2, buf, bufsize), + "Unpack private key minor version"); + vb2_private_key_free(k2); + + memcpy(buf, buf2, bufsize); + pkey->key_size -= 32; + TEST_EQ(vb21_private_key_unpack(&k2, buf, bufsize), + VB2_ERROR_UNPACK_PRIVATE_KEY_RSA, + "Unpack private key bad rsa data"); + + memcpy(buf, buf2, bufsize); + pkey->sig_alg = VB2_SIG_NONE; + TEST_EQ(vb21_private_key_unpack(&k2, buf, bufsize), + VB2_ERROR_UNPACK_PRIVATE_KEY_HASH, + "Unpack private key hash but has data"); + + free(buf); + free(buf2); + unlink(testfile); + + TEST_EQ(vb2_private_key_hash(&ckey, VB2_HASH_INVALID), + VB2_ERROR_PRIVATE_KEY_HASH, + "Hash key invalid"); + TEST_PTR_EQ(ckey, NULL, " key_ptr"); + + TEST_SUCC(vb2_private_key_hash(&ckey, combo->hash_alg), "Hash key"); + TEST_PTR_NEQ(ckey, NULL, " key_ptr"); + TEST_EQ(ckey->hash_alg, combo->hash_alg, " hash_alg"); + TEST_EQ(ckey->sig_alg, VB2_SIG_NONE, " sig_alg"); + TEST_EQ(memcmp(&ckey->id, vb2_hash_id(combo->hash_alg), + sizeof(ckey->id)), 0, " id"); + + TEST_SUCC(vb21_private_key_write(ckey, testfile), "Write hash key"); + TEST_SUCC(vb21_private_key_read(&key, testfile), "Read hash key"); + unlink(testfile); +} + +static void public_key_tests(const struct alg_combo *combo, + const char *keybfile, const char *temp_dir) +{ + struct vb2_public_key *key, k2; + struct vb21_packed_key *pkey; + char *testfile; + const char *testdesc = "test desc"; + const struct vb2_id test_id = {.raw = {0xbb}}; + const uint32_t test_version = 0xcc01; + uint8_t *buf; + uint32_t bufsize; + + xasprintf(&testfile, "%s/test.vbprik2", temp_dir); + + TEST_EQ(vb2_public_key_read_keyb(&key, "no_such_key"), + VB2_ERROR_READ_KEYB_DATA, "Read keyb - no file"); + TEST_PTR_EQ(key, NULL, " key_ptr"); + + TEST_SUCC(vb2_public_key_read_keyb(&key, keybfile), "Read keyb - good"); + TEST_PTR_NEQ(key, NULL, " key_ptr"); + TEST_EQ(key->sig_alg, combo->sig_alg, " sig_alg"); + TEST_PTR_EQ(key->desc, NULL, " desc"); + vb2_public_key_free(key); + + bufsize = vb2_packed_key_size(combo->sig_alg); + buf = calloc(1, bufsize); + + vb2_write_file(testfile, buf, bufsize - 1); + TEST_EQ(vb2_public_key_read_keyb(&key, testfile), + VB2_ERROR_READ_KEYB_SIZE, "Read keyb - bad size"); + unlink(testfile); + + vb2_write_file(testfile, buf, bufsize); + free(buf); + TEST_EQ(vb2_public_key_read_keyb(&key, testfile), + VB2_ERROR_READ_KEYB_UNPACK, "Read keyb - unpack"); + unlink(testfile); + + TEST_SUCC(vb2_public_key_read_keyb(&key, keybfile), "Read keyb 2"); + TEST_SUCC(vb2_public_key_set_desc(key, testdesc), "Set desc"); + TEST_PTR_NEQ(key->desc, NULL, " desc"); + TEST_PTR_NEQ(key->desc, testdesc, " made a copy"); + TEST_EQ(strcmp(key->desc, testdesc), 0, " right contents"); + TEST_SUCC(vb2_public_key_set_desc(key, NULL), "Clear desc"); + TEST_PTR_EQ(key->desc, NULL, " desc"); + TEST_SUCC(vb2_public_key_set_desc(key, testdesc), "Set desc"); + vb2_public_key_free(key); + + TEST_SUCC(vb2_public_key_read_keyb(&key, keybfile), "Read keyb 3"); + TEST_SUCC(vb2_public_key_set_desc(key, testdesc), "Set desc"); + key->hash_alg = combo->hash_alg; + key->id = &test_id; + key->version = test_version; + + TEST_SUCC(vb21_public_key_pack(&pkey, key), "Pack public key"); + TEST_PTR_NEQ(pkey, NULL, " key_ptr"); + TEST_EQ(pkey->hash_alg, key->hash_alg, " hash_alg"); + TEST_EQ(pkey->sig_alg, key->sig_alg, " sig_alg"); + TEST_EQ(pkey->key_version, key->version, " version"); + TEST_EQ(memcmp(&pkey->id, key->id, sizeof(pkey->id)), 0, + " id"); + TEST_EQ(strcmp(vb21_common_desc(pkey), key->desc), 0, " desc"); + TEST_SUCC(vb21_unpack_key(&k2, (uint8_t *)pkey, pkey->c.total_size), + "Unpack public key"); + TEST_EQ(key->arrsize, k2.arrsize, " arrsize"); + TEST_EQ(key->n0inv, k2.n0inv, " n0inv"); + TEST_EQ(memcmp(key->n, k2.n, key->arrsize * sizeof(uint32_t)), 0, + " n"); + TEST_EQ(memcmp(key->rr, k2.rr, key->arrsize * sizeof(uint32_t)), 0, + " rr"); + + TEST_SUCC(vb21_write_object(testfile, pkey), "Write packed key"); + free(pkey); + + TEST_SUCC(vb21_packed_key_read(&pkey, testfile), "Read packed key"); + TEST_PTR_NEQ(pkey, NULL, " key_ptr"); + unlink(testfile); + + pkey->hash_alg = VB2_HASH_INVALID; + TEST_SUCC(vb21_write_object(testfile, pkey), "Write bad packed key"); + free(pkey); + + TEST_EQ(vb21_packed_key_read(&pkey, testfile), + VB2_ERROR_READ_PACKED_KEY, "Read bad packed key"); + TEST_PTR_EQ(pkey, NULL, " key_ptr"); + unlink(testfile); + + TEST_EQ(vb21_packed_key_read(&pkey, testfile), + VB2_ERROR_READ_PACKED_KEY_DATA, "Read missing packed key"); + + key->sig_alg = VB2_SIG_INVALID; + TEST_EQ(vb21_public_key_pack(&pkey, key), + VB2_ERROR_PUBLIC_KEY_PACK_SIZE, + "Pack invalid sig alg"); + vb2_public_key_free(key); + + TEST_EQ(vb2_public_key_hash(&k2, VB2_HASH_INVALID), + VB2_ERROR_PUBLIC_KEY_HASH, + "Hash key invalid"); + + TEST_SUCC(vb2_public_key_hash(&k2, combo->hash_alg), "Hash key"); + TEST_EQ(k2.hash_alg, combo->hash_alg, " hash_alg"); + TEST_EQ(k2.sig_alg, VB2_SIG_NONE, " sig_alg"); + TEST_EQ(memcmp(k2.id, vb2_hash_id(combo->hash_alg), + sizeof(*k2.id)), 0, " id"); + + TEST_SUCC(vb21_public_key_pack(&pkey, &k2), "Pack public hash key"); + TEST_PTR_NEQ(pkey, NULL, " key_ptr"); + TEST_SUCC(vb21_unpack_key(&k2, (uint8_t *)pkey, pkey->c.total_size), + "Unpack public hash key"); + free(pkey); +} + +static int test_algorithm(const struct alg_combo *combo, const char *keys_dir, + const char *temp_dir) +{ + int rsa_bits = vb2_rsa_sig_size(combo->sig_alg) * 8; + char *pemfile; + char *keybfile; + + printf("***Testing algorithm: %s\n", combo->name); + + xasprintf(&pemfile, "%s/key_rsa%d.pem", keys_dir, rsa_bits); + xasprintf(&keybfile, "%s/key_rsa%d.keyb", keys_dir, rsa_bits); + + private_key_tests(combo, pemfile, temp_dir); + public_key_tests(combo, keybfile, temp_dir); + + free(pemfile); + free(keybfile); + + return 0; +} + +int main(int argc, char *argv[]) { + + if (argc == 3) { + const char *keys_dir = argv[1]; + const char *temp_dir = argv[2]; + int i; + + for (i = 0; i < ARRAY_SIZE(test_algs); i++) { + if (test_algorithm(test_algs + i, keys_dir, temp_dir)) + return 1; + } + } else { + fprintf(stderr, "Usage: %s \n", argv[0]); + return -1; + } + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb21_host_misc_tests.c b/tests/vb21_host_misc_tests.c new file mode 100644 index 0000000..f437803 --- /dev/null +++ b/tests/vb21_host_misc_tests.c @@ -0,0 +1,85 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for host misc library vboot2 functions + */ + +#include +#include + +#include "2common.h" +#include "2sysincludes.h" +#include "host_common.h" +#include "host_common21.h" +#include "host_misc.h" +#include "test_common.h" + +static void misc_tests(void) +{ + TEST_EQ(roundup32(0), 0, "roundup32(0)"); + TEST_EQ(roundup32(15), 16, "roundup32(15)"); + TEST_EQ(roundup32(16), 16, "roundup32(16)"); + + TEST_EQ(vb2_desc_size(NULL), 0, "desc size null"); + TEST_EQ(vb2_desc_size(""), 0, "desc size empty"); + TEST_EQ(vb2_desc_size("foo"), 4, "desc size 'foo'"); + TEST_EQ(vb2_desc_size("foob"), 8, "desc size 'foob'"); +} + +static void file_tests(const char *temp_dir) +{ + char *testfile; + const uint8_t test_data[] = "Some test data"; + uint8_t *read_data; + uint32_t read_size; + + uint8_t cbuf[sizeof(struct vb21_struct_common) + 12]; + struct vb21_struct_common *c = (struct vb21_struct_common *)cbuf; + + xasprintf(&testfile, "%s/file_tests.dat", temp_dir); + + unlink(testfile); + + TEST_EQ(vb2_read_file(testfile, &read_data, &read_size), + VB2_ERROR_READ_FILE_OPEN, "vb2_read_file() missing"); + TEST_EQ(vb2_write_file("no/such/dir", test_data, sizeof(test_data)), + VB2_ERROR_WRITE_FILE_OPEN, "vb2_write_file() open"); + + TEST_SUCC(vb2_write_file(testfile, test_data, sizeof(test_data)), + "vb2_write_file() good"); + TEST_SUCC(vb2_read_file(testfile, &read_data, &read_size), + "vb2_read_file() good"); + TEST_EQ(read_size, sizeof(test_data), " data size"); + TEST_EQ(memcmp(read_data, test_data, read_size), 0, " data"); + free(read_data); + unlink(testfile); + + memset(cbuf, 0, sizeof(cbuf)); + c->fixed_size = sizeof(*c); + c->total_size = sizeof(cbuf); + c->magic = 0x1234; + cbuf[sizeof(cbuf) - 1] = 0xed; /* Some non-zero data at the end */ + TEST_SUCC(vb21_write_object(testfile, c), "vb2_write_object() good"); + TEST_SUCC(vb2_read_file(testfile, &read_data, &read_size), + "vb2_read_file() object"); + TEST_EQ(read_size, c->total_size, " data size"); + /* Compare the entire buffer, including the non-zero data at the end */ + TEST_EQ(memcmp(read_data, c, read_size), 0, " data"); + free(read_data); + unlink(testfile); +} + +int main(int argc, char* argv[]) +{ + if (argc != 2) { + fprintf(stderr, "Usage: %s \n", argv[0]); + return -1; + } + const char *temp_dir = argv[1]; + + misc_tests(); + file_tests(temp_dir); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb21_host_sig_tests.c b/tests/vb21_host_sig_tests.c new file mode 100644 index 0000000..f337eaa --- /dev/null +++ b/tests/vb21_host_sig_tests.c @@ -0,0 +1,199 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for host library vboot2 key functions + */ + +#include +#include + +#include "2common.h" +#include "2rsa.h" +#include "2sysincludes.h" +#include "host_common.h" +#include "host_common21.h" +#include "host_key21.h" +#include "host_signature21.h" +#include "test_common.h" + +/* Test only the algorithms we use */ +struct alg_combo { + const char *name; + enum vb2_signature_algorithm sig_alg; + enum vb2_hash_algorithm hash_alg; +}; + +static const struct alg_combo test_algs[] = { + {"RSA2048/SHA-256", VB2_SIG_RSA2048, VB2_HASH_SHA256}, + {"RSA4096/SHA-256", VB2_SIG_RSA4096, VB2_HASH_SHA256}, + {"RSA8192/SHA-512", VB2_SIG_RSA8192, VB2_HASH_SHA512}, +}; + +const struct vb2_id test_id = {.raw = {0xaa}}; +const char *test_desc = "The test key"; +const char *test_sig_desc = "The test signature"; +const uint8_t test_data[] = "Some test data"; +const uint32_t test_size = sizeof(test_data); + +static void sig_tests(const struct alg_combo *combo, + const char *pemfile, + const char *keybfile) +{ + struct vb2_private_key *prik, prik2; + const struct vb2_private_key *prihash, *priks[2]; + struct vb2_public_key *pubk, pubhash; + struct vb21_signature *sig, *sig2; + uint32_t size; + + uint8_t workbuf[VB2_VERIFY_DATA_WORKBUF_BYTES] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + struct vb2_workbuf wb; + + uint8_t *buf; + uint32_t bufsize; + struct vb21_struct_common *c; + uint32_t c_sig_offs; + + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + /* Create test keys */ + /* TODO: should read these from .vbprik2, .vbpubk2 files */ + TEST_SUCC(vb2_private_key_read_pem(&prik, pemfile), "Read private key"); + prik->id = test_id; + prik->hash_alg = combo->hash_alg; + prik->sig_alg = combo->sig_alg; + vb2_private_key_set_desc(prik, test_desc); + + TEST_SUCC(vb2_public_key_read_keyb(&pubk, keybfile), "Read pub key"); + pubk->id = &test_id; + pubk->hash_alg = combo->hash_alg; + vb2_public_key_set_desc(pubk, test_desc); + + TEST_SUCC(vb2_private_key_hash(&prihash, combo->hash_alg), + "Private hash key"); + TEST_SUCC(vb2_public_key_hash(&pubhash, combo->hash_alg), + "Public hash key"); + + priks[0] = prik; + priks[1] = prihash; + + /* Sign test data */ + TEST_SUCC(vb21_sign_data(&sig, test_data, test_size, prik, NULL), + "Sign good"); + TEST_PTR_NEQ(sig, NULL, " sig_ptr"); + TEST_EQ(0, strcmp(vb21_common_desc(sig), test_desc), " desc"); + TEST_EQ(0, memcmp(&sig->id, &test_id, sizeof(test_id)), " id"); + TEST_EQ(sig->data_size, test_size, " data_size"); + TEST_SUCC(vb21_sig_size_for_key(&size, prik, NULL), "Sig size"); + TEST_EQ(size, sig->c.total_size, " size"); + TEST_SUCC(vb21_verify_data(test_data, test_size, sig, pubk, &wb), + "Verify good"); + free(sig); + + TEST_SUCC(vb21_sign_data(&sig, test_data, test_size, prik, + test_sig_desc), + "Sign with desc"); + TEST_EQ(0, strcmp(vb21_common_desc(sig), test_sig_desc), " desc"); + free(sig); + + TEST_SUCC(vb21_sign_data(&sig, test_data, test_size, prik, ""), + "Sign with no desc"); + TEST_EQ(sig->c.desc_size, 0, " desc"); + TEST_SUCC(vb21_sig_size_for_key(&size, prik, ""), "Sig size"); + TEST_EQ(size, sig->c.total_size, " size"); + free(sig); + + TEST_SUCC(vb21_sign_data(&sig, test_data, test_size, prihash, NULL), + "Sign with hash"); + TEST_SUCC(vb21_verify_data(test_data, test_size, sig, &pubhash, &wb), + "Verify with hash"); + free(sig); + + prik2 = *prik; + prik2.sig_alg = VB2_SIG_INVALID; + TEST_EQ(vb21_sign_data(&sig, test_data, test_size, &prik2, NULL), + VB2_SIGN_DATA_SIG_SIZE, "Sign bad sig alg"); + + /* Sign an object with a little (24 bytes) data */ + c_sig_offs = sizeof(*c) + 24; + TEST_SUCC(vb21_sig_size_for_key(&size, prik, NULL), "Sig size"); + bufsize = c_sig_offs + size; + buf = calloc(1, bufsize); + memset(buf + sizeof(*c), 0x12, 24); + c = (struct vb21_struct_common *)buf; + c->total_size = bufsize; + + TEST_SUCC(vb21_sign_object(buf, c_sig_offs, prik, NULL), "Sign object"); + sig = (struct vb21_signature *)(buf + c_sig_offs); + TEST_SUCC(vb21_verify_data(buf, c_sig_offs, sig, pubk, &wb), + "Verify object"); + + TEST_EQ(vb21_sign_object(buf, c_sig_offs + 4, prik, NULL), + VB2_SIGN_OBJECT_OVERFLOW, "Sign object overflow"); + free(buf); + + /* Multiply sign an object */ + TEST_SUCC(vb21_sig_size_for_keys(&size, priks, 2), "Sigs size"); + bufsize = c_sig_offs + size; + buf = calloc(1, bufsize); + memset(buf + sizeof(*c), 0x12, 24); + c = (struct vb21_struct_common *)buf; + c->total_size = bufsize; + + TEST_SUCC(vb21_sign_object_multiple(buf, c_sig_offs, priks, 2), + "Sign multiple"); + sig = (struct vb21_signature *)(buf + c_sig_offs); + TEST_SUCC(vb21_verify_data(buf, c_sig_offs, sig, pubk, &wb), + "Verify object with sig 1"); + sig2 = (struct vb21_signature *)(buf + c_sig_offs + sig->c.total_size); + TEST_SUCC(vb21_verify_data(buf, c_sig_offs, sig2, &pubhash, &wb), + "Verify object with sig 2"); + + c->total_size -= 4; + TEST_EQ(vb21_sign_object_multiple(buf, c_sig_offs, priks, 2), + VB2_SIGN_OBJECT_OVERFLOW, "Sign multple overflow"); + + TEST_EQ(size, sig->c.total_size + sig2->c.total_size, + "Sigs size total"); + + free(buf); + + vb2_private_key_free(prik); + vb2_public_key_free(pubk); +} + +static int test_algorithm(const struct alg_combo *combo, const char *keys_dir) +{ + int rsa_bits = vb2_rsa_sig_size(combo->sig_alg) * 8; + char pemfile[1024]; + char keybfile[1024]; + + printf("***Testing algorithm: %s\n", combo->name); + + snprintf(pemfile, sizeof(pemfile), + "%s/key_rsa%d.pem", keys_dir, rsa_bits); + snprintf(keybfile, sizeof(keybfile), + "%s/key_rsa%d.keyb", keys_dir, rsa_bits); + + sig_tests(combo, pemfile, keybfile); + + return 0; +} + +int main(int argc, char *argv[]) { + + if (argc == 2) { + int i; + + for (i = 0; i < ARRAY_SIZE(test_algs); i++) { + if (test_algorithm(test_algs + i, argv[1])) + return 1; + } + } else { + fprintf(stderr, "Usage: %s ", argv[0]); + return -1; + } + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_api_tests.c b/tests/vb2_api_tests.c new file mode 100644 index 0000000..15c9bd1 --- /dev/null +++ b/tests/vb2_api_tests.c @@ -0,0 +1,876 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for api.c + */ + +#include + +#include "2api.h" +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2rsa.h" +#include "2secdata.h" +#include "2sysincludes.h" +#include "test_common.h" + +/* Common context for tests */ + +static uint8_t workbuf[VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); +static struct vb2_context *ctx; +static struct vb2_shared_data *sd; +static struct vb2_gbb_header gbb; + +const char mock_body[320] = "Mock body"; +const int mock_body_size = sizeof(mock_body); +const int mock_algorithm = VB2_ALG_RSA2048_SHA256; +const int mock_hash_alg = VB2_HASH_SHA256; +static const uint8_t mock_hwid_digest[VB2_GBB_HWID_DIGEST_SIZE] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, +}; +const int mock_sig_size = 64; +static uint8_t digest_result[VB2_SHA256_DIGEST_SIZE]; +static const uint32_t digest_result_size = sizeof(digest_result); + +/* Mocked function data */ + +static enum { + HWCRYPTO_DISABLED, + HWCRYPTO_ENABLED, + HWCRYPTO_FORBIDDEN, +} hwcrypto_state; + +static int force_dev_mode; +static vb2_error_t retval_vb2_fw_init_gbb; +static vb2_error_t retval_vb2_check_dev_switch; +static vb2_error_t retval_vb2_check_tpm_clear; +static vb2_error_t retval_vb2_select_fw_slot; +static vb2_error_t retval_vb2_load_fw_keyblock; +static vb2_error_t retval_vb2_load_fw_preamble; +static vb2_error_t retval_vb2_digest_finalize; +static vb2_error_t retval_vb2_verify_digest; + +/* Type of test to reset for */ + +enum reset_type { + FOR_MISC, + FOR_EXTEND_HASH, + FOR_CHECK_HASH, +}; + +static void reset_common_data(enum reset_type t) +{ + struct vb2_fw_preamble *pre; + struct vb2_packed_key *k; + + memset(workbuf, 0xaa, sizeof(workbuf)); + + TEST_SUCC(vb2api_init(workbuf, sizeof(workbuf), &ctx), + "vb2api_init failed"); + sd = vb2_get_sd(ctx); + + vb2_nv_init(ctx); + + vb2api_secdata_firmware_create(ctx); + + vb2api_secdata_kernel_create(ctx); + vb2_secdata_kernel_init(ctx); + if (hwcrypto_state != HWCRYPTO_FORBIDDEN) + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_FLAGS, + VB2_SECDATA_KERNEL_FLAG_HWCRYPTO_ALLOWED); + + force_dev_mode = 0; + retval_vb2_fw_init_gbb = VB2_SUCCESS; + retval_vb2_check_dev_switch = VB2_SUCCESS; + retval_vb2_check_tpm_clear = VB2_SUCCESS; + retval_vb2_select_fw_slot = VB2_SUCCESS; + retval_vb2_load_fw_keyblock = VB2_SUCCESS; + retval_vb2_load_fw_preamble = VB2_SUCCESS; + retval_vb2_digest_finalize = VB2_SUCCESS; + retval_vb2_verify_digest = VB2_SUCCESS; + + memcpy(&gbb.hwid_digest, mock_hwid_digest, + sizeof(gbb.hwid_digest)); + + sd->preamble_offset = sd->workbuf_used; + sd->preamble_size = sizeof(*pre); + vb2_set_workbuf_used(ctx, sd->preamble_offset + sd->preamble_size); + pre = vb2_member_of(sd, sd->preamble_offset); + pre->body_signature.data_size = mock_body_size; + pre->body_signature.sig_size = mock_sig_size; + pre->flags = 0; + + sd->data_key_offset = sd->workbuf_used; + sd->data_key_size = sizeof(*k) + 8; + vb2_set_workbuf_used(ctx, sd->data_key_offset + sd->data_key_size); + k = vb2_member_of(sd, sd->data_key_offset); + k->algorithm = mock_algorithm; + + if (t == FOR_EXTEND_HASH || t == FOR_CHECK_HASH) + vb2api_init_hash(ctx, VB2_HASH_TAG_FW_BODY); + + if (t == FOR_CHECK_HASH) + vb2api_extend_hash(ctx, mock_body, mock_body_size); + + /* Always clear out the digest result. */ + memset(digest_result, 0, digest_result_size); +}; + +/* Mocked functions */ +struct vb2_gbb_header *vb2_get_gbb(struct vb2_context *c) +{ + return &gbb; +} + +vb2_error_t vb2_fw_init_gbb(struct vb2_context *c) +{ + return retval_vb2_fw_init_gbb; +} + +vb2_error_t vb2_check_dev_switch(struct vb2_context *c) +{ + if (force_dev_mode) + sd->flags |= VB2_SD_FLAG_DEV_MODE_ENABLED; + return retval_vb2_check_dev_switch; +} + +vb2_error_t vb2_check_tpm_clear(struct vb2_context *c) +{ + return retval_vb2_check_tpm_clear; +} + +vb2_error_t vb2_select_fw_slot(struct vb2_context *c) +{ + return retval_vb2_select_fw_slot; +} + +vb2_error_t vb2_load_fw_keyblock(struct vb2_context *c) +{ + return retval_vb2_load_fw_keyblock; +} + +vb2_error_t vb2_load_fw_preamble(struct vb2_context *c) +{ + return retval_vb2_load_fw_preamble; +} + +vb2_error_t vb2_unpack_key_buffer(struct vb2_public_key *key, + const uint8_t *buf, uint32_t size) +{ + struct vb2_packed_key *k = (struct vb2_packed_key *)buf; + + if (size != sizeof(*k) + 8) + return VB2_ERROR_UNPACK_KEY_SIZE; + + key->sig_alg = vb2_crypto_to_signature(k->algorithm); + key->hash_alg = vb2_crypto_to_hash(k->algorithm); + + return VB2_SUCCESS; +} + +vb2_error_t vb2ex_hwcrypto_digest_init(enum vb2_hash_algorithm hash_alg, + uint32_t data_size) +{ + switch (hwcrypto_state) { + case HWCRYPTO_DISABLED: + return VB2_ERROR_EX_HWCRYPTO_UNSUPPORTED; + case HWCRYPTO_ENABLED: + if (hash_alg != mock_hash_alg) + return VB2_ERROR_SHA_INIT_ALGORITHM; + else + return VB2_SUCCESS; + case HWCRYPTO_FORBIDDEN: + default: + return VB2_ERROR_UNKNOWN; + } +} + +vb2_error_t vb2ex_hwcrypto_digest_extend(const uint8_t *buf, + uint32_t size) +{ + if (hwcrypto_state != HWCRYPTO_ENABLED) + return VB2_ERROR_UNKNOWN; + + return VB2_SUCCESS; +} + +static void fill_digest(uint8_t *digest, uint32_t digest_size) +{ + /* Set the result to a known value. */ + memset(digest, 0x0a, digest_size); +} + +vb2_error_t vb2ex_hwcrypto_digest_finalize(uint8_t *digest, + uint32_t digest_size) +{ + if (hwcrypto_state != HWCRYPTO_ENABLED) + return VB2_ERROR_UNKNOWN; + + if (retval_vb2_digest_finalize == VB2_SUCCESS) + fill_digest(digest, digest_size); + + return retval_vb2_digest_finalize; +} + +vb2_error_t vb2_digest_init(struct vb2_digest_context *dc, + enum vb2_hash_algorithm hash_alg) +{ + if (hwcrypto_state == HWCRYPTO_ENABLED) + return VB2_ERROR_UNKNOWN; + if (hash_alg != mock_hash_alg) + return VB2_ERROR_SHA_INIT_ALGORITHM; + + dc->hash_alg = hash_alg; + dc->using_hwcrypto = 0; + + return VB2_SUCCESS; +} + +vb2_error_t vb2_digest_extend(struct vb2_digest_context *dc, const uint8_t *buf, + uint32_t size) +{ + if (hwcrypto_state == HWCRYPTO_ENABLED) + return VB2_ERROR_UNKNOWN; + if (dc->hash_alg != mock_hash_alg) + return VB2_ERROR_SHA_EXTEND_ALGORITHM; + + return VB2_SUCCESS; +} + +vb2_error_t vb2_digest_finalize(struct vb2_digest_context *dc, uint8_t *digest, + uint32_t digest_size) +{ + if (hwcrypto_state == HWCRYPTO_ENABLED) + return VB2_ERROR_UNKNOWN; + + if (retval_vb2_digest_finalize == VB2_SUCCESS) + fill_digest(digest, digest_size); + + return retval_vb2_digest_finalize; +} + +uint32_t vb2_rsa_sig_size(enum vb2_signature_algorithm sig_alg) +{ + return mock_sig_size; +} + +static struct vb2_public_key last_used_key; + +vb2_error_t vb2_rsa_verify_digest(const struct vb2_public_key *key, + uint8_t *sig, const uint8_t *digest, + const struct vb2_workbuf *wb) +{ + memcpy(&last_used_key, key, sizeof(struct vb2_public_key)); + return retval_vb2_verify_digest; +} + +/* Tests */ +static int vb2_try_returned; + +static vb2_error_t call_vb2_try(vb2_error_t expr, uint8_t recovery_reason, + int one_arg) +{ + vb2_try_returned = 1; + if (one_arg) + VB2_TRY(expr); + else + VB2_TRY(expr, ctx, recovery_reason); + vb2_try_returned = 0; + return VB2_SUCCESS; +} + +static void misc_tests(void) +{ + /* Test secdata_firmware passthru functions */ + reset_common_data(FOR_MISC); + /* Corrupt secdata_firmware so initial check will fail */ + ctx->secdata_firmware[0] ^= 0x42; + TEST_EQ(vb2api_secdata_firmware_check(ctx), + VB2_ERROR_SECDATA_FIRMWARE_CRC, + "secdata_firmware check"); + TEST_EQ(vb2api_secdata_firmware_create(ctx), VB2_SECDATA_FIRMWARE_SIZE, + "secdata_firmware create"); + TEST_SUCC(vb2api_secdata_firmware_check(ctx), + "secdata_firmware check 2"); + + /* Test fail passthru */ + reset_common_data(FOR_MISC); + vb2api_fail(ctx, 12, 34); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + 12, "vb2api_fail request"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_SUBCODE), + 34, "vb2api_fail subcode"); + + /* Test get_firmware_size() */ + reset_common_data(FOR_MISC); + TEST_EQ(vb2api_get_firmware_size(ctx), mock_body_size, "firmware_size"); + + reset_common_data(FOR_MISC); + sd->preamble_size = 0; + TEST_EQ(vb2api_get_firmware_size(ctx), 0, "firmware_size too early"); + + /* Test VB2_TRY() */ + reset_common_data(FOR_MISC); + call_vb2_try(VB2_SUCCESS, VB2_RECOVERY_NOT_REQUESTED, 1); + TEST_EQ(vb2_try_returned, 0, "VB2_TRY(expr) success"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_NOT_REQUESTED, " vb2api_fail no request"); + + reset_common_data(FOR_MISC); + call_vb2_try(VB2_REQUEST, VB2_RECOVERY_NOT_REQUESTED, 1); + TEST_EQ(vb2_try_returned, 1, "VB2_TRY(expr) request"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_NOT_REQUESTED, " vb2api_fail no request"); + + reset_common_data(FOR_MISC); + call_vb2_try(VB2_ERROR_MOCK, VB2_RECOVERY_NOT_REQUESTED, 1); + TEST_EQ(vb2_try_returned, 1, "VB2_TRY(expr) error"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_NOT_REQUESTED, " vb2api_fail no request"); + + reset_common_data(FOR_MISC); + call_vb2_try(VB2_SUCCESS, 123, 0); + TEST_EQ(vb2_try_returned, 0, "VB2_TRY(expr, ...) success"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_NOT_REQUESTED, " vb2api_fail no request"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_SUBCODE), + 0, " vb2api_fail no subcode"); + + reset_common_data(FOR_MISC); + call_vb2_try(VB2_REQUEST, 123, 0); + TEST_EQ(vb2_try_returned, 1, "VB2_TRY(expr, ...) request"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_NOT_REQUESTED, " vb2api_fail no request"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_SUBCODE), + 0, " vb2api_fail no subcode"); + + reset_common_data(FOR_MISC); + call_vb2_try(VB2_ERROR_MOCK, 123, 0); + TEST_EQ(vb2_try_returned, 1, "VB2_TRY(expr, ...) error"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + 123, " vb2api_fail request"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_SUBCODE), + VB2_ERROR_MOCK & 0xff, " vb2api_fail subcode"); +} + +static void phase1_tests(void) +{ + reset_common_data(FOR_MISC); + TEST_SUCC(vb2api_fw_phase1(ctx), "phase1 good"); + TEST_EQ(sd->recovery_reason, 0, " not recovery"); + TEST_EQ(ctx->flags & VB2_CONTEXT_RECOVERY_MODE, 0, " recovery flag"); + TEST_EQ(ctx->flags & VB2_CONTEXT_CLEAR_RAM, 0, " clear ram flag"); + TEST_EQ(ctx->flags & VB2_CONTEXT_DISPLAY_INIT, + 0, " display init context flag"); + TEST_EQ(sd->flags & VB2_SD_FLAG_DISPLAY_AVAILABLE, + 0, " display available SD flag"); + TEST_NEQ(sd->status & VB2_SD_STATUS_SECDATA_FIRMWARE_INIT, + 0, " secdata firmware initialized"); + TEST_NEQ(sd->status & VB2_SD_STATUS_SECDATA_KERNEL_INIT, + 0, " secdata kernel initialized"); + TEST_NEQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, " recovery decided"); + + reset_common_data(FOR_MISC); + retval_vb2_fw_init_gbb = VB2_ERROR_GBB_MAGIC; + TEST_EQ(vb2api_fw_phase1(ctx), VB2_ERROR_API_PHASE1_RECOVERY, + "phase1 gbb"); + TEST_EQ(sd->recovery_reason, VB2_RECOVERY_GBB_HEADER, + " recovery reason"); + TEST_NEQ(ctx->flags & VB2_CONTEXT_RECOVERY_MODE, 0, " recovery flag"); + TEST_NEQ(ctx->flags & VB2_CONTEXT_CLEAR_RAM, 0, " clear ram flag"); + TEST_NEQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, " recovery decided"); + + /* Dev switch error proceeds to a recovery boot */ + reset_common_data(FOR_MISC); + retval_vb2_check_dev_switch = VB2_ERROR_MOCK; + TEST_EQ(vb2api_fw_phase1(ctx), VB2_ERROR_API_PHASE1_RECOVERY, + "phase1 dev switch error proceeds to recovery"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_DEV_SWITCH, " recovery request"); + TEST_EQ(sd->recovery_reason, VB2_RECOVERY_DEV_SWITCH, + " recovery reason"); + /* Check that DISPLAY_AVAILABLE gets set on recovery mode. */ + TEST_NEQ(ctx->flags & VB2_CONTEXT_DISPLAY_INIT, + 0, " display init context flag"); + TEST_NEQ(sd->flags & VB2_SD_FLAG_DISPLAY_AVAILABLE, + 0, " display available SD flag"); + TEST_NEQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, " recovery decided"); + + reset_common_data(FOR_MISC); + ctx->secdata_firmware[0] ^= 0x42; + TEST_EQ(vb2api_fw_phase1(ctx), VB2_ERROR_API_PHASE1_RECOVERY, + "phase1 secdata_firmware"); + TEST_EQ(sd->recovery_reason, VB2_RECOVERY_SECDATA_FIRMWARE_INIT, + " recovery reason"); + TEST_NEQ(ctx->flags & VB2_CONTEXT_RECOVERY_MODE, 0, " recovery flag"); + TEST_NEQ(ctx->flags & VB2_CONTEXT_CLEAR_RAM, 0, " clear ram flag"); + TEST_NEQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, " recovery decided"); + + /* Bad secdata_kernel causes recovery mode */ + reset_common_data(FOR_MISC); + ctx->secdata_kernel[2] ^= 0x42; /* 3rd byte is CRC */ + TEST_EQ(vb2api_fw_phase1(ctx), VB2_ERROR_API_PHASE1_RECOVERY, + "phase1 bad secdata_kernel"); + TEST_EQ(sd->recovery_reason, VB2_RECOVERY_SECDATA_KERNEL_INIT, + " recovery reason"); + TEST_NEQ(ctx->flags & VB2_CONTEXT_RECOVERY_MODE, 0, " recovery flag"); + TEST_NEQ(ctx->flags & VB2_CONTEXT_CLEAR_RAM, 0, " clear ram flag"); + TEST_NEQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, " recovery decided"); + + /* Test secdata_firmware-requested reboot */ + reset_common_data(FOR_MISC); + ctx->flags |= VB2_CONTEXT_SECDATA_WANTS_REBOOT; + TEST_EQ(vb2api_fw_phase1(ctx), VB2_ERROR_API_PHASE1_SECDATA_REBOOT, + "phase1 secdata_firmware reboot normal"); + TEST_EQ(sd->recovery_reason, 0, " recovery reason"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_TPM_REQUESTED_REBOOT), + 1, " tpm reboot request"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + 0, " recovery request"); + TEST_EQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, " recovery decided"); + + reset_common_data(FOR_MISC); + vb2_nv_set(ctx, VB2_NV_TPM_REQUESTED_REBOOT, 1); + TEST_SUCC(vb2api_fw_phase1(ctx), + "phase1 secdata_firmware reboot back normal"); + TEST_EQ(sd->recovery_reason, 0, " recovery reason"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_TPM_REQUESTED_REBOOT), + 0, " tpm reboot request"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + 0, " recovery request"); + TEST_NEQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, " recovery decided"); + + reset_common_data(FOR_MISC); + ctx->flags |= VB2_CONTEXT_SECDATA_WANTS_REBOOT; + memset(ctx->secdata_firmware, 0, sizeof(ctx->secdata_firmware)); + TEST_EQ(vb2api_fw_phase1(ctx), VB2_ERROR_API_PHASE1_SECDATA_REBOOT, + "phase1 secdata_firmware reboot normal, " + "secdata_firmware blank"); + TEST_EQ(sd->recovery_reason, 0, " recovery reason"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_TPM_REQUESTED_REBOOT), + 1, " tpm reboot request"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + 0, " recovery request"); + TEST_EQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, " recovery decided"); + + reset_common_data(FOR_MISC); + ctx->flags |= VB2_CONTEXT_SECDATA_WANTS_REBOOT; + vb2_nv_set(ctx, VB2_NV_TPM_REQUESTED_REBOOT, 1); + TEST_EQ(vb2api_fw_phase1(ctx), VB2_ERROR_API_PHASE1_RECOVERY, + "phase1 secdata_firmware reboot normal again"); + TEST_EQ(sd->recovery_reason, VB2_RECOVERY_RO_TPM_REBOOT, + " recovery reason"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_TPM_REQUESTED_REBOOT), + 1, " tpm reboot request"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_RO_TPM_REBOOT, " recovery request"); + TEST_NEQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, " recovery decided"); + + reset_common_data(FOR_MISC); + ctx->flags |= VB2_CONTEXT_SECDATA_WANTS_REBOOT; + vb2_nv_set(ctx, VB2_NV_RECOVERY_REQUEST, VB2_RECOVERY_RO_UNSPECIFIED); + TEST_EQ(vb2api_fw_phase1(ctx), VB2_ERROR_API_PHASE1_SECDATA_REBOOT, + "phase1 secdata_firmware reboot recovery"); + /* Recovery reason isn't set this boot because we're rebooting first */ + TEST_EQ(sd->recovery_reason, 0, " recovery reason not set THIS boot"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_TPM_REQUESTED_REBOOT), + 1, " tpm reboot request"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_RO_UNSPECIFIED, " recovery request"); + TEST_EQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, " recovery decided"); + + reset_common_data(FOR_MISC); + vb2_nv_set(ctx, VB2_NV_TPM_REQUESTED_REBOOT, 1); + vb2_nv_set(ctx, VB2_NV_RECOVERY_REQUEST, VB2_RECOVERY_RO_UNSPECIFIED); + TEST_EQ(vb2api_fw_phase1(ctx), VB2_ERROR_API_PHASE1_RECOVERY, + "phase1 secdata_firmware reboot back recovery"); + TEST_EQ(sd->recovery_reason, VB2_RECOVERY_RO_UNSPECIFIED, + " recovery reason"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_TPM_REQUESTED_REBOOT), + 0, " tpm reboot request"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_RO_UNSPECIFIED, " recovery request"); + TEST_NEQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, " recovery decided"); + + reset_common_data(FOR_MISC); + ctx->flags |= VB2_CONTEXT_SECDATA_WANTS_REBOOT; + vb2_nv_set(ctx, VB2_NV_TPM_REQUESTED_REBOOT, 1); + vb2_nv_set(ctx, VB2_NV_RECOVERY_REQUEST, VB2_RECOVERY_RO_UNSPECIFIED); + TEST_EQ(vb2api_fw_phase1(ctx), VB2_ERROR_API_PHASE1_RECOVERY, + "phase1 secdata_firmware reboot recovery again"); + TEST_EQ(sd->recovery_reason, VB2_RECOVERY_RO_UNSPECIFIED, + " recovery reason"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_TPM_REQUESTED_REBOOT), + 1, " tpm reboot request"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_RO_UNSPECIFIED, " recovery request"); + TEST_NEQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, " recovery decided"); + + /* Cases for checking DISPLAY_INIT and DISPLAY_AVAILABLE. */ + reset_common_data(FOR_MISC); + ctx->flags |= VB2_CONTEXT_DISPLAY_INIT; + TEST_SUCC(vb2api_fw_phase1(ctx), "phase1 with DISPLAY_INIT"); + TEST_NEQ(ctx->flags & VB2_CONTEXT_DISPLAY_INIT, + 0, " display init context flag"); + TEST_NEQ(sd->flags & VB2_SD_FLAG_DISPLAY_AVAILABLE, + 0, " display available SD flag"); + TEST_NEQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, " recovery decided"); + + reset_common_data(FOR_MISC); + vb2_nv_set(ctx, VB2_NV_DISPLAY_REQUEST, 1); + TEST_SUCC(vb2api_fw_phase1(ctx), "phase1 with DISPLAY_REQUEST"); + TEST_NEQ(ctx->flags & VB2_CONTEXT_DISPLAY_INIT, + 0, " display init context flag"); + TEST_NEQ(sd->flags & VB2_SD_FLAG_DISPLAY_AVAILABLE, + 0, " display available SD flag"); + TEST_NEQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, " recovery decided"); + + reset_common_data(FOR_MISC); + force_dev_mode = 1; + TEST_SUCC(vb2api_fw_phase1(ctx), "phase1 in dev mode"); + TEST_NEQ(ctx->flags & VB2_CONTEXT_DISPLAY_INIT, + 0, " display init context flag"); + TEST_NEQ(sd->flags & VB2_SD_FLAG_DISPLAY_AVAILABLE, + 0, " display available SD flag"); + TEST_NEQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, " recovery decided"); +} + +static void phase2_tests(void) +{ + reset_common_data(FOR_MISC); + TEST_SUCC(vb2api_fw_phase2(ctx), "phase2 good"); + TEST_EQ(ctx->flags & VB2_CONTEXT_CLEAR_RAM, 0, " clear ram flag"); + TEST_EQ(ctx->flags & VB2_CONTEXT_FW_SLOT_B, 0, " slot b flag"); + + reset_common_data(FOR_MISC); + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; + TEST_SUCC(vb2api_fw_phase2(ctx), "phase2 dev"); + TEST_NEQ(ctx->flags & VB2_CONTEXT_CLEAR_RAM, 0, " clear ram flag"); + + reset_common_data(FOR_MISC); + retval_vb2_check_tpm_clear = VB2_ERROR_MOCK; + TEST_EQ(vb2api_fw_phase2(ctx), VB2_ERROR_MOCK, "phase2 tpm clear"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_TPM_CLEAR_OWNER, " recovery reason"); + + reset_common_data(FOR_MISC); + retval_vb2_select_fw_slot = VB2_ERROR_MOCK; + TEST_EQ(vb2api_fw_phase2(ctx), VB2_ERROR_MOCK, "phase2 slot"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_FW_SLOT, " recovery reason"); + + /* S3 resume exits before clearing RAM */ + reset_common_data(FOR_MISC); + ctx->flags |= VB2_CONTEXT_S3_RESUME; + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; + TEST_SUCC(vb2api_fw_phase2(ctx), "phase2 s3 dev"); + TEST_EQ(ctx->flags & VB2_CONTEXT_CLEAR_RAM, 0, " clear ram flag"); + TEST_EQ(ctx->flags & VB2_CONTEXT_FW_SLOT_B, 0, " slot b flag"); + + reset_common_data(FOR_MISC); + ctx->flags |= VB2_CONTEXT_S3_RESUME; + vb2_nv_set(ctx, VB2_NV_FW_TRIED, 1); + TEST_SUCC(vb2api_fw_phase2(ctx), "phase2 s3"); + TEST_NEQ(ctx->flags & VB2_CONTEXT_FW_SLOT_B, 0, " slot b flag"); +} + +static void get_pcr_digest_tests(void) +{ + uint8_t digest[VB2_PCR_DIGEST_RECOMMENDED_SIZE]; + uint8_t digest_org[VB2_PCR_DIGEST_RECOMMENDED_SIZE]; + uint32_t digest_size; + + reset_common_data(FOR_MISC); + memset(digest_org, 0, sizeof(digest_org)); + + digest_size = sizeof(digest); + memset(digest, 0, sizeof(digest)); + TEST_SUCC(vb2api_get_pcr_digest( + ctx, BOOT_MODE_PCR, digest, &digest_size), + "BOOT_MODE_PCR"); + TEST_EQ(digest_size, VB2_SHA1_DIGEST_SIZE, "BOOT_MODE_PCR digest size"); + TEST_TRUE(memcmp(digest, digest_org, digest_size), + "BOOT_MODE_PCR digest"); + + digest_size = sizeof(digest); + memset(digest, 0, sizeof(digest)); + TEST_SUCC(vb2api_get_pcr_digest( + ctx, HWID_DIGEST_PCR, digest, &digest_size), + "HWID_DIGEST_PCR"); + TEST_EQ(digest_size, VB2_GBB_HWID_DIGEST_SIZE, + "HWID_DIGEST_PCR digest size"); + TEST_FALSE(memcmp(digest, mock_hwid_digest, digest_size), + "HWID_DIGEST_PCR digest"); + + digest_size = 1; + TEST_EQ(vb2api_get_pcr_digest(ctx, BOOT_MODE_PCR, digest, &digest_size), + VB2_ERROR_API_PCR_DIGEST_BUF, + "BOOT_MODE_PCR buffer too small"); + + TEST_EQ(vb2api_get_pcr_digest( + ctx, HWID_DIGEST_PCR + 1, digest, &digest_size), + VB2_ERROR_API_PCR_DIGEST, + "invalid enum vb2_pcr_digest"); +} + +static void phase3_tests(void) +{ + reset_common_data(FOR_MISC); + TEST_SUCC(vb2api_fw_phase3(ctx), "phase3 good"); + + reset_common_data(FOR_MISC); + retval_vb2_load_fw_keyblock = VB2_ERROR_MOCK; + TEST_EQ(vb2api_fw_phase3(ctx), VB2_ERROR_MOCK, "phase3 keyblock"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_RO_INVALID_RW, " recovery reason"); + + reset_common_data(FOR_MISC); + retval_vb2_load_fw_preamble = VB2_ERROR_MOCK; + TEST_EQ(vb2api_fw_phase3(ctx), VB2_ERROR_MOCK, "phase3 keyblock"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_RO_INVALID_RW, " recovery reason"); +} + +static void init_hash_tests(void) +{ + struct vb2_packed_key *k; + int wb_used_before; + + /* For now, all we support is body signature hash */ + reset_common_data(FOR_MISC); + wb_used_before = sd->workbuf_used; + TEST_SUCC(vb2api_init_hash(ctx, VB2_HASH_TAG_FW_BODY), + "init hash good"); + TEST_EQ(sd->hash_offset, wb_used_before, "hash context offset"); + TEST_EQ(sd->hash_size, sizeof(struct vb2_digest_context), + "hash context size"); + TEST_EQ(sd->workbuf_used, + vb2_wb_round_up(sd->hash_offset + sd->hash_size), + "hash uses workbuf"); + TEST_EQ(sd->hash_tag, VB2_HASH_TAG_FW_BODY, "hash tag"); + TEST_EQ(sd->hash_remaining_size, mock_body_size, "hash remaining"); + + wb_used_before = sd->workbuf_used; + TEST_SUCC(vb2api_init_hash(ctx, VB2_HASH_TAG_FW_BODY), + "init hash again"); + TEST_EQ(sd->workbuf_used, wb_used_before, "init hash reuses context"); + + reset_common_data(FOR_MISC); + TEST_EQ(vb2api_init_hash(ctx, VB2_HASH_TAG_INVALID), + VB2_ERROR_API_INIT_HASH_TAG, "init hash invalid tag"); + + reset_common_data(FOR_MISC); + sd->preamble_size = 0; + TEST_EQ(vb2api_init_hash(ctx, VB2_HASH_TAG_FW_BODY), + VB2_ERROR_API_INIT_HASH_PREAMBLE, "init hash preamble"); + + reset_common_data(FOR_MISC); + TEST_EQ(vb2api_init_hash(ctx, VB2_HASH_TAG_FW_BODY + 1), + VB2_ERROR_API_INIT_HASH_TAG, "init hash unknown tag"); + + reset_common_data(FOR_MISC); + sd->workbuf_used = sd->workbuf_size + VB2_WORKBUF_ALIGN - + vb2_wb_round_up(sizeof(struct vb2_digest_context)); + TEST_EQ(vb2api_init_hash(ctx, VB2_HASH_TAG_FW_BODY), + VB2_ERROR_API_INIT_HASH_WORKBUF, "init hash workbuf"); + + reset_common_data(FOR_MISC); + sd->data_key_size = 0; + TEST_EQ(vb2api_init_hash(ctx, VB2_HASH_TAG_FW_BODY), + VB2_ERROR_API_INIT_HASH_DATA_KEY, "init hash data key"); + + reset_common_data(FOR_MISC); + sd->data_key_size--; + TEST_EQ(vb2api_init_hash(ctx, VB2_HASH_TAG_FW_BODY), + VB2_ERROR_UNPACK_KEY_SIZE, "init hash data key size"); + + reset_common_data(FOR_MISC); + k = vb2_member_of(sd, sd->data_key_offset); + k->algorithm--; + TEST_EQ(vb2api_init_hash(ctx, VB2_HASH_TAG_FW_BODY), + VB2_ERROR_SHA_INIT_ALGORITHM, "init hash algorithm"); +} + +static void extend_hash_tests(void) +{ + struct vb2_digest_context *dc; + + reset_common_data(FOR_EXTEND_HASH); + TEST_SUCC(vb2api_extend_hash(ctx, mock_body, 32), + "hash extend good"); + TEST_EQ(sd->hash_remaining_size, mock_body_size - 32, + "hash extend remaining"); + TEST_SUCC(vb2api_extend_hash(ctx, mock_body, mock_body_size - 32), + "hash extend again"); + TEST_EQ(sd->hash_remaining_size, 0, "hash extend remaining 2"); + + reset_common_data(FOR_EXTEND_HASH); + sd->hash_size = 0; + TEST_EQ(vb2api_extend_hash(ctx, mock_body, mock_body_size), + VB2_ERROR_API_EXTEND_HASH_WORKBUF, "hash extend no workbuf"); + + reset_common_data(FOR_EXTEND_HASH); + TEST_EQ(vb2api_extend_hash(ctx, mock_body, mock_body_size + 1), + VB2_ERROR_API_EXTEND_HASH_SIZE, "hash extend too much"); + + reset_common_data(FOR_EXTEND_HASH); + TEST_EQ(vb2api_extend_hash(ctx, mock_body, 0), + VB2_ERROR_API_EXTEND_HASH_SIZE, "hash extend empty"); + + if (hwcrypto_state != HWCRYPTO_ENABLED) { + reset_common_data(FOR_EXTEND_HASH); + dc = (struct vb2_digest_context *) + vb2_member_of(sd, sd->hash_offset); + dc->hash_alg = mock_hash_alg + 1; + TEST_EQ(vb2api_extend_hash(ctx, mock_body, mock_body_size), + VB2_ERROR_SHA_EXTEND_ALGORITHM, "hash extend fail"); + } +} + +static void check_hash_tests(void) +{ + struct vb2_fw_preamble *pre; + const uint32_t digest_value = 0x0a0a0a0a; + + reset_common_data(FOR_CHECK_HASH); + TEST_SUCC(vb2api_check_hash(ctx), "check hash good"); + + reset_common_data(FOR_CHECK_HASH); + TEST_SUCC(vb2api_check_hash_get_digest(ctx, digest_result, + digest_result_size), "check hash good with result"); + /* Check the first 4 bytes to ensure it was copied over. */ + TEST_SUCC(memcmp(digest_result, &digest_value, sizeof(digest_value)), + "check digest value"); + + /* Test hwcrypto conditions */ + if (hwcrypto_state == HWCRYPTO_FORBIDDEN) { + reset_common_data(FOR_CHECK_HASH); + TEST_SUCC(vb2api_check_hash(ctx), "check hash good"); + TEST_EQ(last_used_key.allow_hwcrypto, 0, + "hwcrypto is forbidden by TPM flag"); + + reset_common_data(FOR_CHECK_HASH); + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + TEST_SUCC(vb2api_check_hash(ctx), "check hash good"); + TEST_EQ(last_used_key.allow_hwcrypto, 0, + "hwcrypto is forbidden by TPM flag on recovery mode"); + } else { + reset_common_data(FOR_CHECK_HASH); + TEST_SUCC(vb2api_check_hash(ctx), "check hash good"); + TEST_EQ(last_used_key.allow_hwcrypto, 1, "hwcrypto is allowed"); + + reset_common_data(FOR_CHECK_HASH); + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + TEST_SUCC(vb2api_check_hash(ctx), "check hash good"); + TEST_EQ(last_used_key.allow_hwcrypto, 0, + "hwcrypto is forbidden on recovery mode"); + } + + reset_common_data(FOR_CHECK_HASH); + TEST_EQ(vb2api_check_hash_get_digest(ctx, digest_result, + digest_result_size - 1), + VB2_ERROR_API_CHECK_DIGEST_SIZE, "check digest size"); + TEST_NEQ(memcmp(digest_result, &digest_value, sizeof(digest_value)), 0, + "check digest wrong size"); + + reset_common_data(FOR_CHECK_HASH); + sd->preamble_size = 0; + TEST_EQ(vb2api_check_hash(ctx), + VB2_ERROR_API_CHECK_HASH_PREAMBLE, "check hash preamble"); + + reset_common_data(FOR_CHECK_HASH); + sd->hash_size = 0; + TEST_EQ(vb2api_check_hash(ctx), + VB2_ERROR_API_CHECK_HASH_WORKBUF, "check hash no workbuf"); + + reset_common_data(FOR_CHECK_HASH); + sd->hash_remaining_size = 1; + TEST_EQ(vb2api_check_hash(ctx), + VB2_ERROR_API_CHECK_HASH_SIZE, "check hash size"); + + reset_common_data(FOR_CHECK_HASH); + sd->workbuf_used = sd->workbuf_size; + TEST_EQ(vb2api_check_hash(ctx), + VB2_ERROR_API_CHECK_HASH_WORKBUF_DIGEST, "check hash workbuf"); + + reset_common_data(FOR_CHECK_HASH); + retval_vb2_digest_finalize = VB2_ERROR_MOCK; + TEST_EQ(vb2api_check_hash(ctx), VB2_ERROR_MOCK, "check hash finalize"); + + reset_common_data(FOR_CHECK_HASH); + sd->hash_tag = VB2_HASH_TAG_INVALID; + TEST_EQ(vb2api_check_hash(ctx), + VB2_ERROR_API_CHECK_HASH_TAG, "check hash tag"); + + reset_common_data(FOR_CHECK_HASH); + sd->data_key_size = 0; + TEST_EQ(vb2api_check_hash(ctx), + VB2_ERROR_API_CHECK_HASH_DATA_KEY, "check hash data key"); + + reset_common_data(FOR_CHECK_HASH); + sd->data_key_size--; + TEST_EQ(vb2api_check_hash(ctx), + VB2_ERROR_UNPACK_KEY_SIZE, "check hash data key size"); + + reset_common_data(FOR_CHECK_HASH); + pre = vb2_member_of(sd, sd->preamble_offset); + pre->body_signature.sig_size++; + TEST_EQ(vb2api_check_hash(ctx), + VB2_ERROR_VDATA_SIG_SIZE, "check hash sig size"); + + reset_common_data(FOR_CHECK_HASH); + retval_vb2_digest_finalize = VB2_ERROR_RSA_VERIFY_DIGEST; + TEST_EQ(vb2api_check_hash(ctx), + VB2_ERROR_RSA_VERIFY_DIGEST, "check hash finalize"); +} + +int main(int argc, char* argv[]) +{ + misc_tests(); + phase1_tests(); + phase2_tests(); + phase3_tests(); + + fprintf(stderr, "Running hash API tests without hwcrypto support...\n"); + hwcrypto_state = HWCRYPTO_DISABLED; + init_hash_tests(); + extend_hash_tests(); + check_hash_tests(); + + fprintf(stderr, "Running hash API tests with hwcrypto support...\n"); + hwcrypto_state = HWCRYPTO_ENABLED; + init_hash_tests(); + extend_hash_tests(); + check_hash_tests(); + + fprintf(stderr, "Running hash API tests with forbidden hwcrypto...\n"); + hwcrypto_state = HWCRYPTO_FORBIDDEN; + init_hash_tests(); + extend_hash_tests(); + check_hash_tests(); + + get_pcr_digest_tests(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_auxfw_sync_tests.c b/tests/vb2_auxfw_sync_tests.c new file mode 100644 index 0000000..bcdd67a --- /dev/null +++ b/tests/vb2_auxfw_sync_tests.c @@ -0,0 +1,165 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for auxfw synchronization. + */ + +#include +#include +#include + +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2sysincludes.h" +#include "host_common.h" +#include "load_kernel_fw.h" +#include "test_common.h" +#include "vboot_struct.h" + +/* Mock data */ +static struct vb2_context *ctx; +static uint8_t workbuf[VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); +static struct vb2_shared_data *sd; +static struct vb2_gbb_header gbb; + +static vb2_error_t auxfw_retval; +static int auxfw_update_req; +static enum vb2_auxfw_update_severity auxfw_mock_severity; +static enum vb2_auxfw_update_severity auxfw_update_severity; +static int auxfw_mock_display_available; +static int auxfw_protected; +static vb2_error_t auxfw_done_retval; + +/* Reset mock data (for use before each test) */ +static void ResetMocks(void) +{ + TEST_SUCC(vb2api_init(workbuf, sizeof(workbuf), &ctx), + "vb2api_init failed"); + + ctx->flags = VB2_CONTEXT_EC_SYNC_SUPPORTED; + vb2_nv_init(ctx); + + sd = vb2_get_sd(ctx); + + memset(&gbb, 0, sizeof(gbb)); + + auxfw_retval = VB2_SUCCESS; + auxfw_mock_severity = VB2_AUXFW_NO_UPDATE; + auxfw_update_severity = VB2_AUXFW_NO_UPDATE; + auxfw_mock_display_available = 1; + auxfw_update_req = 0; + auxfw_protected = 0; + auxfw_done_retval = VB2_SUCCESS; +} + +/* Mock functions */ +struct vb2_gbb_header *vb2_get_gbb(struct vb2_context *c) +{ + return &gbb; +} + +vb2_error_t vb2ex_auxfw_check(enum vb2_auxfw_update_severity *severity) +{ + *severity = auxfw_mock_severity; + auxfw_update_severity = auxfw_mock_severity; + return VB2_SUCCESS; +} + +vb2_error_t vb2ex_auxfw_update(void) +{ + if (auxfw_update_severity == VB2_AUXFW_SLOW_UPDATE) + if (!auxfw_mock_display_available) + return VB2_REQUEST_REBOOT; + + if (auxfw_update_severity != VB2_AUXFW_NO_DEVICE && + auxfw_update_severity != VB2_AUXFW_NO_UPDATE) + auxfw_update_req = 1; + return auxfw_retval; +} + +vb2_error_t vb2ex_auxfw_finalize(struct vb2_context *c) +{ + auxfw_protected = auxfw_update_severity != VB2_AUXFW_NO_DEVICE; + return auxfw_done_retval; +} + +static void test_auxsync(vb2_error_t retval, int recovery_reason, + const char *desc) +{ + TEST_EQ(vb2api_auxfw_sync(ctx), retval, desc); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + recovery_reason, " recovery reason"); +} + +/* Tests */ + +static void VbSoftwareSyncTest(void) +{ + ResetMocks(); + gbb.flags |= VB2_GBB_FLAG_DISABLE_EC_SOFTWARE_SYNC; + auxfw_mock_severity = VB2_AUXFW_FAST_UPDATE; + test_auxsync(VB2_REQUEST_REBOOT_EC_TO_RO, 0, + "VB2_GBB_FLAG_DISABLE_EC_SOFTWARE_SYNC" + " does not disable auxfw update request"); + TEST_EQ(auxfw_update_req, 1, " auxfw update requested"); + TEST_EQ(auxfw_protected, 0, " auxfw protected"); + + ResetMocks(); + gbb.flags |= VB2_GBB_FLAG_DISABLE_AUXFW_SOFTWARE_SYNC; + auxfw_mock_severity = VB2_AUXFW_FAST_UPDATE; + test_auxsync(VB2_SUCCESS, 0, + "VB2_GBB_FLAG_DISABLE_AUXFW_SOFTWARE_SYNC" + " disables auxfw update request"); + TEST_EQ(auxfw_update_req, 0, " auxfw update disabled"); + TEST_EQ(auxfw_protected, 1, " auxfw protected"); + + ResetMocks(); + auxfw_mock_severity = VB2_AUXFW_NO_DEVICE; + test_auxsync(VB2_SUCCESS, 0, + "No auxfw update needed"); + TEST_EQ(auxfw_update_req, 0, " no auxfw update requested"); + TEST_EQ(auxfw_protected, 0, " no auxfw protected"); + + ResetMocks(); + auxfw_mock_severity = VB2_AUXFW_NO_UPDATE; + test_auxsync(VB2_SUCCESS, 0, + "No auxfw update needed"); + TEST_EQ(auxfw_update_req, 0, " no auxfw update requested"); + TEST_EQ(auxfw_protected, 1, " auxfw protected"); + + ResetMocks(); + auxfw_mock_severity = VB2_AUXFW_FAST_UPDATE; + test_auxsync(VB2_REQUEST_REBOOT_EC_TO_RO, 0, + "Fast auxfw update needed"); + TEST_EQ(auxfw_update_req, 1, " auxfw update requested"); + TEST_EQ(auxfw_protected, 0, " auxfw protected"); + + ResetMocks(); + auxfw_mock_severity = VB2_AUXFW_SLOW_UPDATE; + auxfw_mock_display_available = 0; + test_auxsync(VB2_REQUEST_REBOOT, 0, + "Slow auxfw update needed - reboot for display"); + + ResetMocks(); + auxfw_mock_severity = VB2_AUXFW_SLOW_UPDATE; + test_auxsync(VB2_REQUEST_REBOOT_EC_TO_RO, 0, + "Slow auxfw update needed"); + TEST_EQ(auxfw_update_req, 1, " auxfw update requested"); + TEST_EQ(auxfw_protected, 0, " auxfw protected"); + + ResetMocks(); + auxfw_mock_severity = VB2_AUXFW_FAST_UPDATE; + auxfw_retval = VB2_ERROR_UNKNOWN; + test_auxsync(VB2_ERROR_UNKNOWN, VB2_RECOVERY_AUXFW_UPDATE, + "Error updating auxfw"); +} + +int main(void) +{ + VbSoftwareSyncTest(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_common2_tests.c b/tests/vb2_common2_tests.c new file mode 100644 index 0000000..5f065f8 --- /dev/null +++ b/tests/vb2_common2_tests.c @@ -0,0 +1,341 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for firmware image library. + */ + +#include +#include +#include + +#include "2common.h" +#include "2rsa.h" +#include "2sysincludes.h" +#include "file_keys.h" +#include "host_common.h" +#include "host_key21.h" +#include "test_common.h" + +static const uint8_t test_data[] = "This is some test data to sign."; +static const uint32_t test_size = sizeof(test_data); + +static enum hwcrypto_state { + HWCRYPTO_OK, + HWCRYPTO_NOTSUPPORTED, + HWCRYPTO_ERROR, + HWCRYPTO_ABORT, +} hwcrypto_state_rsa, hwcrypto_state_digest; + +static vb2_error_t hwcrypto_mock(enum hwcrypto_state *state) +{ + switch (*state) { + case HWCRYPTO_OK: + return VB2_SUCCESS; + case HWCRYPTO_NOTSUPPORTED: + return VB2_ERROR_EX_HWCRYPTO_UNSUPPORTED; + case HWCRYPTO_ERROR: + return VB2_ERROR_MOCK; + case HWCRYPTO_ABORT: + vb2ex_abort(); + /* shouldn't reach here but added for compiler */ + return VB2_ERROR_MOCK; + } + return VB2_ERROR_MOCK; +} + +vb2_error_t vb2ex_hwcrypto_digest_init(enum vb2_hash_algorithm hash_alg, + uint32_t data_size) +{ + return hwcrypto_mock(&hwcrypto_state_digest); +} + +vb2_error_t vb2ex_hwcrypto_digest_extend(const uint8_t *buf, uint32_t size) +{ + return hwcrypto_mock(&hwcrypto_state_digest); +} + +vb2_error_t vb2ex_hwcrypto_digest_finalize(uint8_t *digest, + uint32_t digest_size) +{ + return hwcrypto_mock(&hwcrypto_state_digest); +} + +vb2_error_t vb2ex_hwcrypto_rsa_verify_digest(const struct vb2_public_key *key, + const uint8_t *sig, const uint8_t *digest) +{ + return hwcrypto_mock(&hwcrypto_state_rsa); +} + + +static void test_unpack_key(const struct vb2_packed_key *key1) +{ + struct vb2_public_key pubk; + + /* + * Key data follows the header for a newly allocated key, so we can + * calculate the buffer size by looking at how far the key data goes. + */ + uint32_t size = key1->key_offset + key1->key_size; + uint8_t *buf = malloc(size); + struct vb2_packed_key *key = (struct vb2_packed_key *)buf; + + memcpy(key, key1, size); + TEST_SUCC(vb2_unpack_key_buffer(&pubk, buf, size), + "vb2_unpack_key_buffer() ok"); + + TEST_EQ(pubk.sig_alg, vb2_crypto_to_signature(key->algorithm), + "vb2_unpack_key_buffer() sig_alg"); + TEST_EQ(pubk.hash_alg, vb2_crypto_to_hash(key->algorithm), + "vb2_unpack_key_buffer() hash_alg"); + + + memcpy(key, key1, size); + key->algorithm = VB2_ALG_COUNT; + TEST_EQ(vb2_unpack_key_buffer(&pubk, buf, size), + VB2_ERROR_UNPACK_KEY_SIG_ALGORITHM, + "vb2_unpack_key_buffer() invalid algorithm"); + + memcpy(key, key1, size); + key->key_size--; + TEST_EQ(vb2_unpack_key_buffer(&pubk, buf, size), + VB2_ERROR_UNPACK_KEY_SIZE, + "vb2_unpack_key_buffer() invalid size"); + + memcpy(key, key1, size); + key->key_offset++; + TEST_EQ(vb2_unpack_key_buffer(&pubk, buf, size + 1), + VB2_ERROR_UNPACK_KEY_ALIGN, + "vb2_unpack_key_buffer() unaligned data"); + + memcpy(key, key1, size); + *(uint32_t *)(buf + key->key_offset) /= 2; + TEST_EQ(vb2_unpack_key_buffer(&pubk, buf, size), + VB2_ERROR_UNPACK_KEY_ARRAY_SIZE, + "vb2_unpack_key_buffer() invalid key array size"); + + memcpy(key, key1, size); + TEST_EQ(vb2_unpack_key_buffer(&pubk, buf, size - 1), + VB2_ERROR_INSIDE_DATA_OUTSIDE, + "vb2_unpack_key_buffer() buffer too small"); + + free(key); + + TEST_EQ(vb2_unpack_key(&pubk, NULL), + VB2_ERROR_UNPACK_KEY_BUFFER, + "vb2_unpack_key_() buffer NULL"); +} + +static void test_verify_data(const struct vb2_packed_key *key1, + const struct vb2_signature *sig) +{ + uint8_t workbuf[VB2_VERIFY_DATA_WORKBUF_BYTES] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + struct vb2_workbuf wb; + + struct vb2_public_key pubk, pubk_orig; + uint32_t sig_total_size = sig->sig_offset + sig->sig_size; + struct vb2_signature *sig2; + + hwcrypto_state_rsa = HWCRYPTO_ABORT; + hwcrypto_state_digest = HWCRYPTO_ABORT; + + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + /* Allocate signature copy for tests */ + sig2 = (struct vb2_signature *)malloc(sig_total_size); + + TEST_SUCC(vb2_unpack_key(&pubk, key1), "vb2_verify_data() unpack key"); + pubk_orig = pubk; + + memcpy(sig2, sig, sig_total_size); + pubk.sig_alg = VB2_SIG_INVALID; + TEST_NEQ(vb2_verify_data(test_data, test_size, sig2, &pubk, &wb), + 0, "vb2_verify_data() bad sig alg"); + pubk.sig_alg = pubk_orig.sig_alg; + + memcpy(sig2, sig, sig_total_size); + pubk.hash_alg = VB2_HASH_INVALID; + TEST_NEQ(vb2_verify_data(test_data, test_size, sig2, &pubk, &wb), + 0, "vb2_verify_data() bad hash alg"); + pubk.hash_alg = pubk_orig.hash_alg; + + vb2_workbuf_init(&wb, workbuf, 4); + memcpy(sig2, sig, sig_total_size); + TEST_NEQ(vb2_verify_data(test_data, test_size, sig2, &pubk, &wb), + 0, "vb2_verify_data() workbuf too small"); + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + memcpy(sig2, sig, sig_total_size); + TEST_EQ(vb2_verify_data(test_data, test_size, sig2, &pubk, &wb), + 0, "vb2_verify_data() ok"); + + memcpy(sig2, sig, sig_total_size); + sig2->sig_size -= 16; + TEST_NEQ(vb2_verify_data(test_data, test_size, sig2, &pubk, &wb), + 0, "vb2_verify_data() wrong sig size"); + + memcpy(sig2, sig, sig_total_size); + TEST_NEQ(vb2_verify_data(test_data, test_size - 1, sig2, &pubk, &wb), + 0, "vb2_verify_data() input buffer too small"); + + memcpy(sig2, sig, sig_total_size); + vb2_signature_data_mutable(sig2)[0] ^= 0x5A; + TEST_NEQ(vb2_verify_data(test_data, test_size, sig2, &pubk, &wb), + 0, "vb2_verify_data() wrong sig"); + + pubk.allow_hwcrypto = 1; + + hwcrypto_state_digest = HWCRYPTO_OK; + hwcrypto_state_rsa = HWCRYPTO_OK; + memcpy(sig2, sig, sig_total_size); + vb2_signature_data_mutable(sig2)[0] ^= 0x5A; + TEST_EQ(vb2_verify_data(test_data, test_size, sig2, &pubk, &wb), + 0, "vb2_verify_data() hwcrypto ok"); + + hwcrypto_state_rsa = HWCRYPTO_ERROR; + memcpy(sig2, sig, sig_total_size); + TEST_NEQ(vb2_verify_data(test_data, test_size, sig2, &pubk, &wb), + 0, "vb2_verify_data() hwcrypto error"); + + hwcrypto_state_rsa = HWCRYPTO_NOTSUPPORTED; + memcpy(sig2, sig, sig_total_size); + TEST_EQ(vb2_verify_data(test_data, test_size, sig2, &pubk, &wb), + 0, "vb2_verify_data() hwcrypto fallback ok"); + + memcpy(sig2, sig, sig_total_size); + sig2->sig_size -= 16; + TEST_NEQ(vb2_verify_data(test_data, test_size, sig2, &pubk, &wb), + 0, "vb2_verify_data() hwcrypto fallback error"); + + hwcrypto_state_digest = HWCRYPTO_ERROR; + hwcrypto_state_rsa = HWCRYPTO_OK; + memcpy(sig2, sig, sig_total_size); + TEST_NEQ(vb2_verify_data(test_data, test_size, sig2, &pubk, &wb), + 0, "vb2_verify_data() hwcrypto error"); + + hwcrypto_state_rsa = HWCRYPTO_ERROR; + memcpy(sig2, sig, sig_total_size); + TEST_NEQ(vb2_verify_data(test_data, test_size, sig2, &pubk, &wb), + 0, "vb2_verify_data() hwcrypto error"); + + hwcrypto_state_rsa = HWCRYPTO_NOTSUPPORTED; + memcpy(sig2, sig, sig_total_size); + TEST_NEQ(vb2_verify_data(test_data, test_size, sig2, &pubk, &wb), + 0, "vb2_verify_data() hwcrypto fallback error"); + + hwcrypto_state_digest = HWCRYPTO_NOTSUPPORTED; + hwcrypto_state_rsa = HWCRYPTO_OK; + memcpy(sig2, sig, sig_total_size); + vb2_signature_data_mutable(sig2)[0] ^= 0x5A; + TEST_EQ(vb2_verify_data(test_data, test_size, sig2, &pubk, &wb), + 0, "vb2_verify_data() hwcrypto ok"); + + hwcrypto_state_rsa = HWCRYPTO_ERROR; + memcpy(sig2, sig, sig_total_size); + TEST_NEQ(vb2_verify_data(test_data, test_size, sig2, &pubk, &wb), + 0, "vb2_verify_data() hwcrypto error"); + + hwcrypto_state_rsa = HWCRYPTO_NOTSUPPORTED; + memcpy(sig2, sig, sig_total_size); + TEST_EQ(vb2_verify_data(test_data, test_size, sig2, &pubk, &wb), + 0, "vb2_verify_data() hwcrypto fallback ok"); + + memcpy(sig2, sig, sig_total_size); + sig2->sig_size -= 16; + TEST_NEQ(vb2_verify_data(test_data, test_size, sig2, &pubk, &wb), + 0, "vb2_verify_data() hwcrypto fallback error"); + + pubk.allow_hwcrypto = 0; + + + free(sig2); +} + + +static int test_algorithm(int key_algorithm, const char *keys_dir) +{ + char filename[1024]; + struct vb2_private_key *private_key = NULL; + struct vb2_signature *sig = NULL; + struct vb2_packed_key *key1 = NULL; + + int retval = 1; + + printf("***Testing algorithm: %s\n", + vb2_get_crypto_algorithm_name(key_algorithm)); + + snprintf(filename, sizeof(filename), "%s/key_%s.pem", + keys_dir, + vb2_get_crypto_algorithm_file(key_algorithm)); + private_key = vb2_read_private_key_pem(filename, key_algorithm); + if (!private_key) { + fprintf(stderr, "Error reading private_key: %s\n", filename); + goto cleanup_algorithm; + } + + snprintf(filename, sizeof(filename), "%s/key_%s.keyb", + keys_dir, + vb2_get_crypto_algorithm_file(key_algorithm)); + key1 = vb2_read_packed_keyb(filename, key_algorithm, 1); + if (!key1) { + fprintf(stderr, "Error reading public_key: %s\n", filename); + goto cleanup_algorithm; + } + + /* Calculate good signatures */ + sig = vb2_calculate_signature(test_data, sizeof(test_data), + private_key); + TEST_PTR_NEQ(sig, 0, "Calculate signature"); + if (!sig) + goto cleanup_algorithm; + + test_unpack_key(key1); + test_verify_data(key1, sig); + + retval = 0; + +cleanup_algorithm: + if (key1) + free(key1); + if (private_key) + free(private_key); + if (sig) + free(sig); + + return retval; +} + +/* Test only the algorithms we use */ +const int key_algs[] = { + VB2_ALG_RSA2048_SHA256, + VB2_ALG_RSA4096_SHA256, + VB2_ALG_RSA8192_SHA512, +}; + +int main(int argc, char *argv[]) { + + if (argc == 2) { + int i; + + for (i = 0; i < ARRAY_SIZE(key_algs); i++) { + if (test_algorithm(key_algs[i], argv[1])) + return 1; + } + + } else if (argc == 3 && !strcasecmp(argv[2], "--all")) { + /* Test all the algorithms */ + int alg; + + for (alg = 0; alg < VB2_ALG_COUNT; alg++) { + if (test_algorithm(alg, argv[1])) + return 1; + } + + } else { + fprintf(stderr, "Usage: %s [--all]", argv[0]); + return -1; + } + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_common3_tests.c b/tests/vb2_common3_tests.c new file mode 100644 index 0000000..5805204 --- /dev/null +++ b/tests/vb2_common3_tests.c @@ -0,0 +1,635 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for firmware image library. + */ + +#include + +#include "2common.h" +#include "2rsa.h" +#include "2sysincludes.h" +#include "file_keys.h" +#include "host_common.h" +#include "host_keyblock.h" +#include "host_key.h" +#include "host_signature.h" +#include "test_common.h" + +static void resign_keyblock(struct vb2_keyblock *h, + const struct vb2_private_key *key) +{ + struct vb2_signature *sig = + vb2_calculate_signature((const uint8_t *)h, + h->keyblock_signature.data_size, key); + + vb2_copy_signature(&h->keyblock_signature, sig); + free(sig); +} + +static void test_check_keyblock(const struct vb2_public_key *public_key, + const struct vb2_private_key *private_key, + const struct vb2_packed_key *data_key) +{ + struct vb2_keyblock *hdr; + struct vb2_keyblock *h; + struct vb2_signature *sig; + uint32_t hsize; + + hdr = vb2_create_keyblock(data_key, private_key, 0x1234); + TEST_NEQ((size_t)hdr, 0, "vb2_verify_keyblock() prerequisites"); + if (!hdr) + return; + hsize = hdr->keyblock_size; + h = (struct vb2_keyblock *)malloc(hsize + 2048); + sig = &h->keyblock_signature; + + memcpy(h, hdr, hsize); + TEST_SUCC(vb2_check_keyblock(h, hsize, sig), + "vb2_check_keyblock() ok"); + + memcpy(h, hdr, hsize); + TEST_EQ(vb2_check_keyblock(h, hsize - 1, sig), + VB2_ERROR_KEYBLOCK_SIZE, "vb2_check_keyblock() size--"); + + /* Buffer is allowed to be bigger than keyblock */ + memcpy(h, hdr, hsize); + TEST_SUCC(vb2_check_keyblock(h, hsize + 1, sig), + "vb2_check_keyblock() size++"); + + memcpy(h, hdr, hsize); + h->magic[0] &= 0x12; + TEST_EQ(vb2_check_keyblock(h, hsize, sig), + VB2_ERROR_KEYBLOCK_MAGIC, "vb2_check_keyblock() magic"); + + /* Care about major version but not minor */ + memcpy(h, hdr, hsize); + h->header_version_major++; + resign_keyblock(h, private_key); + TEST_EQ(vb2_check_keyblock(h, hsize, sig), + VB2_ERROR_KEYBLOCK_HEADER_VERSION, + "vb2_check_keyblock() major++"); + + memcpy(h, hdr, hsize); + h->header_version_major--; + resign_keyblock(h, private_key); + TEST_EQ(vb2_check_keyblock(h, hsize, sig), + VB2_ERROR_KEYBLOCK_HEADER_VERSION, + "vb2_check_keyblock() major--"); + + memcpy(h, hdr, hsize); + h->header_version_minor++; + resign_keyblock(h, private_key); + TEST_SUCC(vb2_check_keyblock(h, hsize, sig), + "vb2_check_keyblock() minor++"); + + memcpy(h, hdr, hsize); + h->header_version_minor--; + resign_keyblock(h, private_key); + TEST_SUCC(vb2_check_keyblock(h, hsize, sig), + "vb2_check_keyblock() minor--"); + + /* Check signature */ + memcpy(h, hdr, hsize); + h->keyblock_signature.sig_offset = hsize; + resign_keyblock(h, private_key); + TEST_EQ(vb2_check_keyblock(h, hsize, sig), + VB2_ERROR_KEYBLOCK_SIG_OUTSIDE, + "vb2_check_keyblock() sig off end"); + + memcpy(h, hdr, hsize); + h->keyblock_signature.data_size = h->keyblock_size + 1; + TEST_EQ(vb2_check_keyblock(h, hsize, sig), + VB2_ERROR_KEYBLOCK_SIGNED_TOO_MUCH, + "vb2_check_keyblock() sig data past end of block"); + + /* Check that we signed header and data key */ + memcpy(h, hdr, hsize); + h->keyblock_signature.data_size = 4; + h->data_key.key_offset = 0; + h->data_key.key_size = 0; + resign_keyblock(h, private_key); + TEST_EQ(vb2_check_keyblock(h, hsize, sig), + VB2_ERROR_KEYBLOCK_SIGNED_TOO_LITTLE, + "vb2_check_keyblock() didn't sign header"); + + memcpy(h, hdr, hsize); + h->data_key.key_offset = hsize; + resign_keyblock(h, private_key); + TEST_EQ(vb2_check_keyblock(h, hsize, sig), + VB2_ERROR_KEYBLOCK_DATA_KEY_OUTSIDE, + "vb2_check_keyblock() data key off end"); + + /* Corner cases for error checking */ + TEST_EQ(vb2_check_keyblock(NULL, 4, sig), + VB2_ERROR_KEYBLOCK_TOO_SMALL_FOR_HEADER, + "vb2_check_keyblock size too small"); + + /* + * TODO: verify parser can support a bigger header (i.e., one where + * data_key.key_offset is bigger than expected). + */ + + free(h); + free(hdr); +} + +static void test_verify_keyblock(const struct vb2_public_key *public_key, + const struct vb2_private_key *private_key, + const struct vb2_packed_key *data_key) +{ + uint8_t workbuf[VB2_KEYBLOCK_VERIFY_WORKBUF_BYTES] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + struct vb2_workbuf wb; + struct vb2_keyblock *hdr; + struct vb2_keyblock *h; + uint32_t hsize; + + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + hdr = vb2_create_keyblock(data_key, private_key, 0x1234); + TEST_NEQ((size_t)hdr, 0, "vb2_verify_keyblock() prerequisites"); + if (!hdr) + return; + hsize = hdr->keyblock_size; + h = (struct vb2_keyblock *)malloc(hsize + 2048); + + memcpy(h, hdr, hsize); + TEST_SUCC(vb2_verify_keyblock(h, hsize, public_key, &wb), + "vb2_verify_keyblock() ok using key"); + + /* Failures in keyblock check also cause verify to fail */ + memcpy(h, hdr, hsize); + TEST_EQ(vb2_verify_keyblock(h, hsize - 1, public_key, &wb), + VB2_ERROR_KEYBLOCK_SIZE, "vb2_verify_keyblock() check"); + + /* Check signature */ + memcpy(h, hdr, hsize); + h->keyblock_signature.sig_size--; + resign_keyblock(h, private_key); + TEST_EQ(vb2_verify_keyblock(h, hsize, public_key, &wb), + VB2_ERROR_KEYBLOCK_SIG_INVALID, + "vb2_verify_keyblock() sig too small"); + + memcpy(h, hdr, hsize); + ((uint8_t *)vb2_packed_key_data_mutable(&h->data_key))[0] ^= 0x34; + TEST_EQ(vb2_verify_keyblock(h, hsize, public_key, &wb), + VB2_ERROR_KEYBLOCK_SIG_INVALID, + "vb2_verify_keyblock() sig mismatch"); + + /* + * TODO: verify parser can support a bigger header (i.e., one where + * data_key.key_offset is bigger than expected). + */ + + free(h); + free(hdr); +} + +static void resign_fw_preamble(struct vb2_fw_preamble *h, + struct vb2_private_key *key) +{ + struct vb2_signature *sig = vb2_calculate_signature( + (const uint8_t *)h, h->preamble_signature.data_size, key); + + vb2_copy_signature(&h->preamble_signature, sig); + free(sig); +} + +static void test_verify_fw_preamble(struct vb2_packed_key *public_key, + struct vb2_private_key *private_key, + struct vb2_packed_key *kernel_subkey) +{ + struct vb2_fw_preamble *hdr; + struct vb2_fw_preamble *h; + struct vb2_public_key rsa; + uint8_t workbuf[VB2_VERIFY_FIRMWARE_PREAMBLE_WORKBUF_BYTES] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + struct vb2_workbuf wb; + uint32_t hsize; + + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + /* Create a dummy signature */ + struct vb2_signature *body_sig = vb2_alloc_signature(56, 78); + + TEST_SUCC(vb2_unpack_key(&rsa, public_key), + "vb2_verify_fw_preamble() prereq key"); + + hdr = vb2_create_fw_preamble(0x1234, kernel_subkey, body_sig, + private_key, 0x5678); + TEST_PTR_NEQ(hdr, NULL, + "vb2_verify_fw_preamble() prereq test preamble"); + if (!hdr) { + free(body_sig); + return; + } + + hsize = (uint32_t) hdr->preamble_size; + h = (struct vb2_fw_preamble *)malloc(hsize + 16384); + + memcpy(h, hdr, hsize); + TEST_SUCC(vb2_verify_fw_preamble(h, hsize, &rsa, &wb), + "vb2_verify_fw_preamble() ok using key"); + + memcpy(h, hdr, hsize); + TEST_EQ(vb2_verify_fw_preamble(h, 4, &rsa, &wb), + VB2_ERROR_PREAMBLE_TOO_SMALL_FOR_HEADER, + "vb2_verify_fw_preamble() size tiny"); + + memcpy(h, hdr, hsize); + TEST_EQ(vb2_verify_fw_preamble(h, hsize - 1, &rsa, &wb), + VB2_ERROR_PREAMBLE_SIZE, + "vb2_verify_fw_preamble() size--"); + + /* Buffer is allowed to be bigger than preamble */ + memcpy(h, hdr, hsize); + TEST_SUCC(vb2_verify_fw_preamble(h, hsize + 1, &rsa, &wb), + "vb2_verify_fw_preamble() size++"); + + /* Care about major version but not minor */ + memcpy(h, hdr, hsize); + h->header_version_major++; + resign_fw_preamble(h, private_key); + TEST_EQ(vb2_verify_fw_preamble(h, hsize, &rsa, &wb), + VB2_ERROR_PREAMBLE_HEADER_VERSION + , "vb2_verify_fw_preamble() major++"); + + memcpy(h, hdr, hsize); + h->header_version_major--; + resign_fw_preamble(h, private_key); + TEST_EQ(vb2_verify_fw_preamble(h, hsize, &rsa, &wb), + VB2_ERROR_PREAMBLE_HEADER_VERSION, + "vb2_verify_fw_preamble() major--"); + + memcpy(h, hdr, hsize); + h->header_version_minor++; + resign_fw_preamble(h, private_key); + TEST_SUCC(vb2_verify_fw_preamble(h, hsize, &rsa, &wb), + "vb2_verify_fw_preamble() minor++"); + + memcpy(h, hdr, hsize); + h->header_version_minor--; + resign_fw_preamble(h, private_key); + TEST_EQ(vb2_verify_fw_preamble(h, hsize, &rsa, &wb), + VB2_ERROR_PREAMBLE_HEADER_OLD, + "vb2_verify_fw_preamble() 2.0 not supported"); + + /* Check signature */ + memcpy(h, hdr, hsize); + h->preamble_signature.sig_offset = hsize; + resign_fw_preamble(h, private_key); + TEST_EQ(vb2_verify_fw_preamble(h, hsize, &rsa, &wb), + VB2_ERROR_PREAMBLE_SIG_OUTSIDE, + "vb2_verify_fw_preamble() sig off end"); + + memcpy(h, hdr, hsize); + h->preamble_signature.sig_size--; + resign_fw_preamble(h, private_key); + TEST_EQ(vb2_verify_fw_preamble(h, hsize, &rsa, &wb), + VB2_ERROR_PREAMBLE_SIG_INVALID, + "vb2_verify_fw_preamble() sig too small"); + + memcpy(h, hdr, hsize); + ((uint8_t *)vb2_packed_key_data_mutable(&h->kernel_subkey))[0] ^= 0x34; + TEST_EQ(vb2_verify_fw_preamble(h, hsize, &rsa, &wb), + VB2_ERROR_PREAMBLE_SIG_INVALID, + "vb2_verify_fw_preamble() sig mismatch"); + + /* Check that we signed header, kernel subkey, and body sig */ + memcpy(h, hdr, hsize); + h->preamble_signature.data_size = 4; + h->kernel_subkey.key_offset = 0; + h->kernel_subkey.key_size = 0; + h->body_signature.sig_offset = 0; + h->body_signature.sig_size = 0; + resign_fw_preamble(h, private_key); + TEST_EQ(vb2_verify_fw_preamble(h, hsize, &rsa, &wb), + VB2_ERROR_PREAMBLE_SIGNED_TOO_LITTLE, + "vb2_verify_fw_preamble() didn't sign header"); + + memcpy(h, hdr, hsize); + h->kernel_subkey.key_offset = hsize; + resign_fw_preamble(h, private_key); + TEST_EQ(vb2_verify_fw_preamble(h, hsize, &rsa, &wb), + VB2_ERROR_PREAMBLE_KERNEL_SUBKEY_OUTSIDE, + "vb2_verify_fw_preamble() kernel subkey off end"); + + memcpy(h, hdr, hsize); + h->body_signature.sig_offset = hsize; + resign_fw_preamble(h, private_key); + TEST_EQ(vb2_verify_fw_preamble(h, hsize, &rsa, &wb), + VB2_ERROR_PREAMBLE_BODY_SIG_OUTSIDE, + "vb2_verify_fw_preamble() body sig off end"); + + /* TODO: verify with extra padding at end of header. */ + + free(h); + free(hdr); + free(body_sig); +} + +static void resign_kernel_preamble(struct vb2_kernel_preamble *h, + const struct vb2_private_key *key) +{ + struct vb2_signature *sig = vb2_calculate_signature( + (const uint8_t *)h, h->preamble_signature.data_size, key); + + vb2_copy_signature(&h->preamble_signature, sig); + free(sig); +} + +static void test_verify_kernel_preamble( + const struct vb2_packed_key *public_key, + const struct vb2_private_key *private_key) +{ + struct vb2_public_key rsa; + // TODO: how many workbuf bytes? + uint8_t workbuf[VB2_VERIFY_FIRMWARE_PREAMBLE_WORKBUF_BYTES] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + struct vb2_workbuf wb; + uint32_t hsize; + + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + /* Create a dummy signature */ + struct vb2_signature *body_sig = vb2_alloc_signature(56, 0x214000); + + TEST_SUCC(vb2_unpack_key(&rsa, public_key), + "vb2_verify_kernel_preamble() prereq key"); + + struct vb2_kernel_preamble *hdr = + vb2_create_kernel_preamble(0x1234, 0x100000, 0x300000, 0x4000, + body_sig, 0x304000, 0x10000, 0, 0, + private_key); + TEST_PTR_NEQ(hdr, NULL, + "vb2_verify_kernel_preamble() prereq test preamble"); + if (!hdr) { + free(body_sig); + return; + } + + hsize = (uint32_t) hdr->preamble_size; + struct vb2_kernel_preamble *h = + (struct vb2_kernel_preamble *)malloc(hsize + 16384); + + memcpy(h, hdr, hsize); + TEST_SUCC(vb2_verify_kernel_preamble(h, hsize, &rsa, &wb), + "vb2_verify_kernel_preamble() ok using key"); + + memcpy(h, hdr, hsize); + TEST_EQ(vb2_verify_kernel_preamble(h, 4, &rsa, &wb), + VB2_ERROR_PREAMBLE_TOO_SMALL_FOR_HEADER, + "vb2_verify_kernel_preamble() size tiny"); + + memcpy(h, hdr, hsize); + TEST_EQ(vb2_verify_kernel_preamble(h, hsize - 1, &rsa, &wb), + VB2_ERROR_PREAMBLE_SIZE, + "vb2_verify_kernel_preamble() size--"); + + /* Buffer is allowed to be bigger than preamble */ + memcpy(h, hdr, hsize); + TEST_SUCC(vb2_verify_kernel_preamble(h, hsize + 1, &rsa, &wb), + "vb2_verify_kernel_preamble() size++"); + + /* Care about major version but not minor */ + memcpy(h, hdr, hsize); + h->header_version_major++; + resign_kernel_preamble(h, private_key); + TEST_EQ(vb2_verify_kernel_preamble(h, hsize, &rsa, &wb), + VB2_ERROR_PREAMBLE_HEADER_VERSION + , "vb2_verify_kernel_preamble() major++"); + + memcpy(h, hdr, hsize); + h->header_version_major--; + resign_kernel_preamble(h, private_key); + TEST_EQ(vb2_verify_kernel_preamble(h, hsize, &rsa, &wb), + VB2_ERROR_PREAMBLE_HEADER_VERSION, + "vb2_verify_kernel_preamble() major--"); + + memcpy(h, hdr, hsize); + h->header_version_minor++; + resign_kernel_preamble(h, private_key); + TEST_SUCC(vb2_verify_kernel_preamble(h, hsize, &rsa, &wb), + "vb2_verify_kernel_preamble() minor++"); + + /* Check signature */ + memcpy(h, hdr, hsize); + h->preamble_signature.sig_offset = hsize; + resign_kernel_preamble(h, private_key); + TEST_EQ(vb2_verify_kernel_preamble(h, hsize, &rsa, &wb), + VB2_ERROR_PREAMBLE_SIG_OUTSIDE, + "vb2_verify_kernel_preamble() sig off end"); + + memcpy(h, hdr, hsize); + h->preamble_signature.sig_size--; + resign_kernel_preamble(h, private_key); + TEST_EQ(vb2_verify_kernel_preamble(h, hsize, &rsa, &wb), + VB2_ERROR_PREAMBLE_SIG_INVALID, + "vb2_verify_kernel_preamble() sig too small"); + + memcpy(h, hdr, hsize); + h->flags++; + TEST_EQ(vb2_verify_kernel_preamble(h, hsize, &rsa, &wb), + VB2_ERROR_PREAMBLE_SIG_INVALID, + "vb2_verify_kernel_preamble() sig mismatch"); + + /* Check that we signed header and body sig */ + memcpy(h, hdr, hsize); + h->preamble_signature.data_size = 4; + h->body_signature.sig_offset = 0; + h->body_signature.sig_size = 0; + resign_kernel_preamble(h, private_key); + TEST_EQ(vb2_verify_kernel_preamble(h, hsize, &rsa, &wb), + VB2_ERROR_PREAMBLE_SIGNED_TOO_LITTLE, + "vb2_verify_kernel_preamble() didn't sign header"); + + memcpy(h, hdr, hsize); + h->body_signature.sig_offset = hsize; + resign_kernel_preamble(h, private_key); + TEST_EQ(vb2_verify_kernel_preamble(h, hsize, &rsa, &wb), + VB2_ERROR_PREAMBLE_BODY_SIG_OUTSIDE, + "vb2_verify_kernel_preamble() body sig off end"); + + /* Check bootloader inside signed body */ + memcpy(h, hdr, hsize); + h->bootloader_address = h->body_load_address - 1; + resign_kernel_preamble(h, private_key); + TEST_EQ(vb2_verify_kernel_preamble(h, hsize, &rsa, &wb), + VB2_ERROR_PREAMBLE_BOOTLOADER_OUTSIDE, + "vb2_verify_kernel_preamble() bootloader before body"); + + memcpy(h, hdr, hsize); + h->bootloader_address = h->body_load_address + + h->body_signature.data_size + 1; + resign_kernel_preamble(h, private_key); + TEST_EQ(vb2_verify_kernel_preamble(h, hsize, &rsa, &wb), + VB2_ERROR_PREAMBLE_BOOTLOADER_OUTSIDE, + "vb2_verify_kernel_preamble() bootloader off end of body"); + + memcpy(h, hdr, hsize); + h->bootloader_address = h->body_load_address + + h->body_signature.data_size + 1; + h->bootloader_size = 0; + resign_kernel_preamble(h, private_key); + TEST_SUCC(vb2_verify_kernel_preamble(h, hsize, &rsa, &wb), + "vb2_verify_kernel_preamble() no bootloader"); + + /* Check vmlinuz inside signed body */ + memcpy(h, hdr, hsize); + h->vmlinuz_header_address = h->body_load_address - 1; + resign_kernel_preamble(h, private_key); + TEST_EQ(vb2_verify_kernel_preamble(h, hsize, &rsa, &wb), + VB2_ERROR_PREAMBLE_VMLINUZ_HEADER_OUTSIDE, + "vb2_verify_kernel_preamble() vmlinuz_header before body"); + + memcpy(h, hdr, hsize); + h->vmlinuz_header_address = h->body_load_address + + h->body_signature.data_size + 1; + resign_kernel_preamble(h, private_key); + TEST_EQ(vb2_verify_kernel_preamble(h, hsize, &rsa, &wb), + VB2_ERROR_PREAMBLE_VMLINUZ_HEADER_OUTSIDE, + "vb2_verify_kernel_preamble() vmlinuz_header off end of body"); + + memcpy(h, hdr, hsize); + h->vmlinuz_header_address = h->body_load_address + + h->body_signature.data_size + 1; + h->vmlinuz_header_size = 0; + resign_kernel_preamble(h, private_key); + TEST_SUCC(vb2_verify_kernel_preamble(h, hsize, &rsa, &wb), + "vb2_verify_kernel_preamble() no vmlinuz_header"); + + /* TODO: verify with extra padding at end of header. */ + + free(h); + free(hdr); + free(body_sig); +} + +static int test_permutation(int signing_key_algorithm, int data_key_algorithm, + const char *keys_dir) +{ + char filename[1024]; + int retval = 1; + + struct vb2_private_key *signing_private_key = NULL; + struct vb2_packed_key *signing_public_key = NULL; + struct vb2_packed_key *data_public_key = NULL; + + printf("***Testing signing algorithm: %s\n", + vb2_get_crypto_algorithm_name(signing_key_algorithm)); + printf("***With data key algorithm: %s\n", + vb2_get_crypto_algorithm_name(data_key_algorithm)); + + snprintf(filename, sizeof(filename), "%s/key_%s.pem", + keys_dir, + vb2_get_crypto_algorithm_file(signing_key_algorithm)); + signing_private_key = + vb2_read_private_key_pem(filename, signing_key_algorithm); + if (!signing_private_key) { + fprintf(stderr, "Error reading signing_private_key: %s\n", + filename); + goto cleanup_permutation; + } + + snprintf(filename, sizeof(filename), "%s/key_%s.keyb", + keys_dir, + vb2_get_crypto_algorithm_file(signing_key_algorithm)); + signing_public_key = + vb2_read_packed_keyb(filename, signing_key_algorithm, 1); + if (!signing_public_key) { + fprintf(stderr, "Error reading signing_public_key: %s\n", + filename); + goto cleanup_permutation; + } + + snprintf(filename, sizeof(filename), "%s/key_%s.keyb", + keys_dir, + vb2_get_crypto_algorithm_file(data_key_algorithm)); + data_public_key = + vb2_read_packed_keyb(filename, data_key_algorithm, 1); + if (!data_public_key) { + fprintf(stderr, "Error reading data_public_key: %s\n", + filename); + goto cleanup_permutation; + } + + /* Unpack public key */ + struct vb2_public_key signing_public_key2; + if (VB2_SUCCESS != + vb2_unpack_key_buffer(&signing_public_key2, + (uint8_t *)signing_public_key, + signing_public_key->key_offset + + signing_public_key->key_size)) { + fprintf(stderr, "Error unpacking signing_public_key: %s\n", + filename); + goto cleanup_permutation; + } + + test_check_keyblock(&signing_public_key2, signing_private_key, + data_public_key); + test_verify_keyblock(&signing_public_key2, signing_private_key, + data_public_key); + test_verify_fw_preamble(signing_public_key, signing_private_key, + data_public_key); + test_verify_kernel_preamble(signing_public_key, signing_private_key); + + retval = 0; + +cleanup_permutation: + if (signing_public_key) + free(signing_public_key); + if (signing_private_key) + free(signing_private_key); + if (data_public_key) + free(data_public_key); + + return retval; +} + +struct test_perm +{ + int signing_algorithm; + int data_key_algorithm; +}; + +/* Permutations of signing and data key algorithms in active use */ +const struct test_perm test_perms[] = { + {VB2_ALG_RSA4096_SHA256, VB2_ALG_RSA2048_SHA256}, + {VB2_ALG_RSA8192_SHA512, VB2_ALG_RSA2048_SHA256}, + {VB2_ALG_RSA8192_SHA512, VB2_ALG_RSA4096_SHA256}, +}; + +int main(int argc, char *argv[]) +{ + if (argc == 2) { + /* Test only the algorithms we use */ + int i; + + for (i = 0; i < ARRAY_SIZE(test_perms); i++) { + if (test_permutation(test_perms[i].signing_algorithm, + test_perms[i].data_key_algorithm, + argv[1])) + return 1; + } + + } else if (argc == 3 && !strcasecmp(argv[2], "--all")) { + /* Test all the algorithms */ + int sign_alg, data_alg; + + for (sign_alg = 0; sign_alg < VB2_ALG_COUNT; sign_alg++) { + for (data_alg = 0; data_alg < VB2_ALG_COUNT; + data_alg++) { + if (test_permutation(sign_alg, data_alg, + argv[1])) + return 1; + } + } + } else { + fprintf(stderr, "Usage: %s [--all]", argv[0]); + return -1; + } + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_common_tests.c b/tests/vb2_common_tests.c new file mode 100644 index 0000000..d76c402 --- /dev/null +++ b/tests/vb2_common_tests.c @@ -0,0 +1,352 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for firmware 2common.c + */ + +#include "2common.h" +#include "2sysincludes.h" +#include "test_common.h" +#include "vboot_struct.h" /* For old struct sizes */ + +/* Mock data */ +static int counter_calls_left = 0; + +/* Mock functions */ +static int counter(void) +{ + counter_calls_left--; + return 0; +} + +/* + * Test arithmetic-related macros and operators. + */ +static void test_arithmetic(void) +{ + int64_t a = -10, b = -20; + uint64_t u = (0xabcd00000000ULL); + uint64_t v = (0xabcd000000ULL); + + TEST_EQ(VB2_MIN(1, 2), 1, "MIN 1"); + TEST_EQ(VB2_MIN(4, 3), 3, "MIN 3"); + TEST_EQ(VB2_MIN(5, 5), 5, "MIN 5"); + TEST_EQ(VB2_MIN(a, b), b, "MIN uint64 1"); + TEST_EQ(VB2_MIN(b, a), b, "MIN uint64 2"); + TEST_EQ(VB2_MIN(b, b), b, "MIN uint64 same"); + + counter_calls_left = 2; + VB2_MIN(counter(), counter()); + TEST_EQ(counter_calls_left, 0, "MIN double-evaluation"); + + TEST_EQ(VB2_MAX(1, 2), 2, "MAX 2"); + TEST_EQ(VB2_MAX(4, 3), 4, "MAX 4"); + TEST_EQ(VB2_MAX(5, 5), 5, "MAX 5"); + TEST_EQ(VB2_MAX(a, b), a, "MAX uint64 1"); + TEST_EQ(VB2_MAX(b, a), a, "MAX uint64 2"); + TEST_EQ(VB2_MAX(b, b), b, "MAX uint64 same"); + + counter_calls_left = 2; + VB2_MAX(counter(), counter()); + TEST_EQ(counter_calls_left, 0, "MAX double-evaluation"); + + TEST_EQ(u >> 8, v, "uint64_t >> 8"); + TEST_EQ(u >> 0, u, "uint64_t >> 0"); + TEST_EQ(u >> 36, (uint64_t)0xabc, "uint64_t >> 36"); + + TEST_EQ(v * (uint32_t)0, 0, "uint64_t * uint32_t 0"); + TEST_EQ(v * (uint32_t)1, v, "uint64_t * uint32_t 1"); + TEST_EQ(v * (uint32_t)256, u, "uint64_t * uint32_t 256"); +} + +/* + * Test array size macro. + */ +static void test_array_size(void) +{ + uint8_t arr1[12]; + uint32_t arr2[7]; + uint64_t arr3[9]; + + TEST_EQ(ARRAY_SIZE(arr1), 12, "ARRAYSIZE(uint8_t)"); + TEST_EQ(ARRAY_SIZE(arr2), 7, "ARRAYSIZE(uint32_t)"); + TEST_EQ(ARRAY_SIZE(arr3), 9, "ARRAYSIZE(uint64_t)"); +} + +/* + * Test struct packing for vboot_struct.h structs which are passed between + * firmware and OS, or passed between different phases of firmware. + */ +static void test_struct_packing(void) +{ + TEST_EQ(EXPECTED_VB2_PACKED_KEY_SIZE, + sizeof(struct vb2_packed_key), + "sizeof(vb2_packed_key)"); + TEST_EQ(EXPECTED_VB2_GBB_HEADER_SIZE, + sizeof(struct vb2_gbb_header), + "sizeof(vb2_gbb_header)"); + TEST_EQ(EXPECTED_VB2_SIGNATURE_SIZE, + sizeof(struct vb2_signature), + "sizeof(vb2_signature)"); + TEST_EQ(EXPECTED_VB2_KEYBLOCK_SIZE, + sizeof(struct vb2_keyblock), + "sizeof(vb2_keyblock)"); +} + +/** + * Test memory compare functions + */ +static void test_memcmp(void) +{ + TEST_EQ(vb2_safe_memcmp("foo", "foo", 3), 0, "memcmp equal"); + TEST_NEQ(vb2_safe_memcmp("foo1", "foo2", 4), 0, "memcmp different"); + TEST_EQ(vb2_safe_memcmp("foo1", "foo2", 0), 0, "memcmp 0-size"); +} + +/** + * Test alignment functions + */ +static void test_align(void) +{ + uint64_t buf[4]; + uint8_t *p0, *ptr; + uint32_t size; + + /* Already aligned */ + p0 = (uint8_t *)buf; + ptr = p0; + size = 16; + TEST_SUCC(vb2_align(&ptr, &size, 4, 16), "vb2_align() aligned"); + TEST_EQ(vb2_offset_of(p0, ptr), 0, "ptr"); + TEST_EQ(size, 16, " size"); + TEST_EQ(vb2_align(&ptr, &size, 4, 17), + VB2_ERROR_ALIGN_SIZE, "vb2_align() small"); + + /* Offset */ + ptr = p0 + 1; + size = 15; + TEST_SUCC(vb2_align(&ptr, &size, 4, 12), "vb2_align() offset"); + TEST_EQ(vb2_offset_of(p0, ptr), 4, "ptr"); + TEST_EQ(size, 12, " size"); + + /* Offset, now too small */ + ptr = p0 + 1; + size = 15; + TEST_EQ(vb2_align(&ptr, &size, 4, 15), + VB2_ERROR_ALIGN_SIZE, "vb2_align() offset small"); + + /* Offset, too small even to align */ + ptr = p0 + 1; + size = 1; + TEST_EQ(vb2_align(&ptr, &size, 4, 1), + VB2_ERROR_ALIGN_BIGGER_THAN_SIZE, "vb2_align() offset tiny"); +} + +/** + * Test work buffer functions + */ +static void test_workbuf(void) +{ + uint64_t buf[8] __attribute__((aligned(VB2_WORKBUF_ALIGN))); + uint8_t *p0 = (uint8_t *)buf, *ptr; + struct vb2_workbuf wb; + + /* Init */ + vb2_workbuf_init(&wb, p0, VB2_WORKBUF_ALIGN * 2); + TEST_EQ(vb2_offset_of(p0, wb.buf), 0, "Workbuf init aligned"); + TEST_EQ(wb.size, VB2_WORKBUF_ALIGN * 2, " size"); + + /* Unaligned init */ + vb2_workbuf_init(&wb, p0 + 1, VB2_WORKBUF_ALIGN * 2); + TEST_EQ(vb2_offset_of(p0, wb.buf), VB2_WORKBUF_ALIGN, + "Workbuf init unaligned"); + TEST_EQ(wb.size, VB2_WORKBUF_ALIGN + 1, " size"); + + /* No size left after align */ + vb2_workbuf_init(&wb, p0 + 1, VB2_WORKBUF_ALIGN - 1); + TEST_EQ(wb.size, 0, "Workbuf init size=0 after align"); + vb2_workbuf_init(&wb, p0 + 1, VB2_WORKBUF_ALIGN - 2); + TEST_EQ(wb.size, 0, "Workbuf init size=-1 after align"); + + /* Alloc rounds up */ + vb2_workbuf_init(&wb, p0, VB2_WORKBUF_ALIGN * 2); + ptr = vb2_workbuf_alloc(&wb, VB2_WORKBUF_ALIGN - 1); + TEST_EQ(vb2_offset_of(p0, ptr), 0, "Workbuf alloc"); + TEST_EQ(vb2_offset_of(p0, wb.buf), VB2_WORKBUF_ALIGN, " buf"); + TEST_EQ(wb.size, VB2_WORKBUF_ALIGN, " size"); + + /* Alloc doesn't fit */ + vb2_workbuf_init(&wb, p0, VB2_WORKBUF_ALIGN); + TEST_PTR_EQ(vb2_workbuf_alloc(&wb, VB2_WORKBUF_ALIGN + 1), NULL, + "Workbuf alloc too big"); + + /* Free reverses alloc */ + vb2_workbuf_init(&wb, p0, VB2_WORKBUF_ALIGN * 2); + vb2_workbuf_alloc(&wb, VB2_WORKBUF_ALIGN + 1); + vb2_workbuf_free(&wb, VB2_WORKBUF_ALIGN + 1); + TEST_EQ(vb2_offset_of(p0, wb.buf), 0, "Workbuf free buf"); + TEST_EQ(wb.size, VB2_WORKBUF_ALIGN * 2, " size"); + + /* Realloc keeps same pointer as alloc */ + vb2_workbuf_init(&wb, p0, VB2_WORKBUF_ALIGN * 3); + vb2_workbuf_alloc(&wb, VB2_WORKBUF_ALIGN - 1); + ptr = vb2_workbuf_realloc(&wb, VB2_WORKBUF_ALIGN - 1, + VB2_WORKBUF_ALIGN + 1); + TEST_EQ(vb2_offset_of(p0, ptr), 0, "Workbuf realloc"); + TEST_EQ(vb2_offset_of(p0, wb.buf), VB2_WORKBUF_ALIGN * 2, " buf"); + TEST_EQ(wb.size, VB2_WORKBUF_ALIGN, " size"); +} + +/** + * Helper functions not dependent on specific key sizes + */ +static void test_helper_functions(void) +{ + { + struct vb2_packed_key k = {.key_offset = sizeof(k)}; + TEST_EQ((int)vb2_offset_of(&k, vb2_packed_key_data(&k)), + sizeof(k), "vb2_packed_key_data() adjacent"); + } + + { + struct vb2_packed_key k = {.key_offset = 123}; + TEST_EQ((int)vb2_offset_of(&k, vb2_packed_key_data(&k)), 123, + "vb2_packed_key_data() spaced"); + } + { + struct vb2_signature s = {.sig_offset = sizeof(s)}; + TEST_EQ((int)vb2_offset_of(&s, vb2_signature_data(&s)), + sizeof(s), "vb2_signature_data() adjacent"); + } + + { + struct vb2_signature s = {.sig_offset = 123}; + TEST_EQ((int)vb2_offset_of(&s, vb2_signature_data(&s)), 123, + "vb2_signature_data() spaced"); + } + + { + uint8_t *p = (uint8_t *)test_helper_functions; + TEST_EQ((int)vb2_offset_of(p, p), 0, "vb2_offset_of() equal"); + TEST_EQ((int)vb2_offset_of(p, p+10), 10, + "vb2_offset_of() positive"); + TEST_EQ((int)vb2_offset_of(p, p+0x12345678), 0x12345678, + "vb2_offset_of() large"); + } + + { + uint8_t *p = (uint8_t *)test_helper_functions; + TEST_SUCC(vb2_verify_member_inside(p, 20, p, 6, 11, 3), + "vb2_verify_member_inside() ok 1"); + TEST_SUCC(vb2_verify_member_inside(p, 20, p+4, 4, 8, 4), + "vb2_verify_member_inside() ok 2"); + TEST_EQ(vb2_verify_member_inside(p, 20, p-4, 4, 8, 4), + VB2_ERROR_INSIDE_MEMBER_OUTSIDE, + "vb2_verify_member_inside() member before parent"); + TEST_EQ(vb2_verify_member_inside(p, 20, p+20, 4, 8, 4), + VB2_ERROR_INSIDE_MEMBER_OUTSIDE, + "vb2_verify_member_inside() member after parent"); + TEST_EQ(vb2_verify_member_inside(p, 20, p, 21, 0, 0), + VB2_ERROR_INSIDE_MEMBER_OUTSIDE, + "vb2_verify_member_inside() member too big"); + TEST_EQ(vb2_verify_member_inside(p, 20, p, 4, 21, 0), + VB2_ERROR_INSIDE_DATA_OUTSIDE, + "vb2_verify_member_inside() data after parent"); + TEST_EQ(vb2_verify_member_inside(p, 20, p, 4, SIZE_MAX, 0), + VB2_ERROR_INSIDE_DATA_OUTSIDE, + "vb2_verify_member_inside() data before parent"); + TEST_EQ(vb2_verify_member_inside(p, 20, p, 4, 4, 17), + VB2_ERROR_INSIDE_DATA_OUTSIDE, + "vb2_verify_member_inside() data too big"); + TEST_EQ(vb2_verify_member_inside(p, 20, p, 8, 4, 8), + VB2_ERROR_INSIDE_DATA_OVERLAP, + "vb2_verify_member_inside() data overlaps member"); + TEST_EQ(vb2_verify_member_inside(p, -8, p, 12, 0, 0), + VB2_ERROR_INSIDE_PARENT_WRAPS, + "vb2_verify_member_inside() wraparound 1"); + TEST_EQ(vb2_verify_member_inside(p, 20, p, -8, 0, 0), + VB2_ERROR_INSIDE_MEMBER_WRAPS, + "vb2_verify_member_inside() wraparound 2"); + TEST_EQ(vb2_verify_member_inside(p, 20, p, 4, 4, -12), + VB2_ERROR_INSIDE_DATA_WRAPS, + "vb2_verify_member_inside() wraparound 3"); + } + + { + struct vb2_packed_key k = {.key_offset = sizeof(k), + .key_size = 128}; + const void *lower_base; + TEST_SUCC(vb2_verify_packed_key_inside(&k, sizeof(k)+128, &k), + "vb2_packed_key_inside() ok 1"); + lower_base = (const void *)((uintptr_t)&k - sizeof(k)); + TEST_SUCC(vb2_verify_packed_key_inside(lower_base, + 2*sizeof(k)+128, &k), + "vb2_packed_key_inside() ok 2"); + TEST_EQ(vb2_verify_packed_key_inside(&k, 128, &k), + VB2_ERROR_INSIDE_DATA_OUTSIDE, + "vb2_packed_key_inside() key too big"); + } + + { + struct vb2_packed_key k = {.key_offset = 100, + .key_size = 4}; + TEST_EQ(vb2_verify_packed_key_inside(&k, 99, &k), + VB2_ERROR_INSIDE_DATA_OUTSIDE, + "vb2_packed_key_inside() offset too big"); + } + + { + struct vb2_signature s = {.sig_offset = sizeof(s), + .sig_size = 128}; + const void *lower_base; + TEST_SUCC(vb2_verify_signature_inside(&s, sizeof(s)+128, &s), + "vb2_verify_signature_inside() ok 1"); + lower_base = (const void *)((uintptr_t)&s - sizeof(s)); + TEST_SUCC(vb2_verify_signature_inside(lower_base, + 2*sizeof(s)+128, &s), + "vb2_verify_signature_inside() ok 2"); + TEST_EQ(vb2_verify_signature_inside(&s, 128, &s), + VB2_ERROR_INSIDE_DATA_OUTSIDE, + "vb2_verify_signature_inside() sig too big"); + } + + { + struct vb2_signature s = {.sig_offset = 100, + .sig_size = 4}; + TEST_EQ(vb2_verify_signature_inside(&s, 99, &s), + VB2_ERROR_INSIDE_DATA_OUTSIDE, + "vb2_verify_signature_inside() offset too big"); + } +} + +/* Helper for test_assert_die() below */ +static int _true_assertion_helper(void) +{ + VB2_ASSERT(2 + 2 == 4); + return 1; +} + +/** + * Test VB2_ASSERT and VB2_DIE macros + */ +static void test_assert_die(void) +{ + TEST_ABORT(VB2_DIE("die"), "DIE should abort"); + TEST_ABORT(VB2_ASSERT(2 + 2 == 5), "ASSERT false should abort"); + TEST_TRUE(_true_assertion_helper(), "ASSERT true should continue"); +} + +int main(int argc, char* argv[]) +{ + test_arithmetic(); + test_array_size(); + test_struct_packing(); + test_memcmp(); + test_align(); + test_workbuf(); + test_helper_functions(); + test_assert_die(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_crypto_tests.c b/tests/vb2_crypto_tests.c new file mode 100644 index 0000000..c7d6676 --- /dev/null +++ b/tests/vb2_crypto_tests.c @@ -0,0 +1,104 @@ +/* Copyright 2020 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for generic crypto algorithm helper stuff. + */ + +#include + +#include "2crypto.h" +#include "2return_codes.h" +#include "2rsa.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "test_common.h" +#include "vboot_host.h" + +static void hash_algorithm_name_tests(void) +{ + enum vb2_hash_algorithm alg; + char test_name[256]; + + for (alg = 0; alg < VB2_HASH_ALG_COUNT; alg++) { + sprintf(test_name, "%s (alg=%d)", + vb2_get_hash_algorithm_name(alg), alg); + TEST_STR_NEQ(vb2_get_hash_algorithm_name(alg), + VB2_INVALID_ALG_NAME, test_name); + } + + TEST_STR_EQ(vb2_get_hash_algorithm_name(VB2_HASH_ALG_COUNT), + VB2_INVALID_ALG_NAME, "hash alg name out of range"); +} + +static void sig_algorithm_name_tests(void) +{ + enum vb2_signature_algorithm alg; + char test_name[256]; + + for (alg = 1; alg < VB2_SIG_ALG_COUNT; alg++) { + sprintf(test_name, "%s (alg=%d)", + vb2_get_sig_algorithm_name(alg), alg); + TEST_STR_NEQ(vb2_get_sig_algorithm_name(alg), + VB2_INVALID_ALG_NAME, test_name); + } + + TEST_STR_EQ(vb2_get_sig_algorithm_name(VB2_SIG_INVALID), + VB2_INVALID_ALG_NAME, "sig alg name invalid"); + TEST_STR_EQ(vb2_get_sig_algorithm_name(VB2_SIG_ALG_COUNT), + VB2_INVALID_ALG_NAME, "sig alg name out of range"); +} + +static void hash_algorithm_lookup_tests(void) +{ + enum vb2_hash_algorithm alg, out; + char test_name[256]; + + for (alg = 1; alg < VB2_HASH_ALG_COUNT; alg++) { + sprintf(test_name, "%s (alg=%d)", + vb2_get_hash_algorithm_name(alg), alg); + TEST_EQ(vb2_lookup_hash_alg(vb2_get_hash_algorithm_name(alg), + &out), 1, test_name); + TEST_EQ(out, alg, " algorithm correct"); + } + + TEST_EQ(vb2_lookup_hash_alg(VB2_INVALID_ALG_NAME, &out), 0, + "invalid algorithm cannot be parsed"); + TEST_EQ(vb2_lookup_hash_alg("RSA1024", &out), 0, + "cannot parse hash as signature"); + TEST_EQ(vb2_lookup_hash_alg("shA512", &out), 1, + "case insensitivity spot check"); + TEST_EQ(out, VB2_HASH_SHA512, " algorithm correct"); +} + +static void sig_algorithm_lookup_tests(void) +{ + enum vb2_signature_algorithm alg, out; + char test_name[256]; + + for (alg = 1; alg < VB2_SIG_ALG_COUNT; alg++) { + sprintf(test_name, "%s (alg=%d)", + vb2_get_sig_algorithm_name(alg), alg); + TEST_EQ(vb2_lookup_sig_alg(vb2_get_sig_algorithm_name(alg), + &out), 1, test_name); + TEST_EQ(out, alg, " algorithm correct"); + } + + TEST_EQ(vb2_lookup_sig_alg(VB2_INVALID_ALG_NAME, &out), 0, + "invalid algorithm cannot be parsed"); + TEST_EQ(vb2_lookup_sig_alg("SHA256", &out), 0, + "cannot parse signature as hash"); + TEST_EQ(vb2_lookup_sig_alg("rSa2048", &out), 1, + "case insensitivity spot check"); + TEST_EQ(out, VB2_SIG_RSA2048, " algorithm correct"); +} + +int main(int argc, char *argv[]) +{ + hash_algorithm_name_tests(); + sig_algorithm_name_tests(); + hash_algorithm_lookup_tests(); + sig_algorithm_lookup_tests(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_ec_sync_tests.c b/tests/vb2_ec_sync_tests.c new file mode 100644 index 0000000..f4631b7 --- /dev/null +++ b/tests/vb2_ec_sync_tests.c @@ -0,0 +1,594 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for vboot_api_kernel, part 3 - software sync + */ + +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2secdata.h" +#include "2sysincludes.h" +#include "host_common.h" +#include "load_kernel_fw.h" +#include "test_common.h" +#include "vboot_struct.h" + +/* Mock data */ +static int ec_ro_updated; +static int ec_rw_updated; +static int ec_ro_protected; +static int ec_rw_protected; +static int ec_run_image; /* 0 = RO, 1 = RW */ + +static vb2_error_t in_rw_retval; +static int protect_retval; +static int jump_retval; +static int update_retval; +static int get_expected_retval; +static int shutdown_request_calls_left; +static vb2_error_t ec_vboot_done_retval; +static int ec_vboot_done_calls; + +static int mock_display_available; +static uint8_t mock_ec_ro_hash[32]; +static uint8_t mock_ec_rw_hash[32]; +static uint8_t hmir[32]; +static int mock_ec_ro_hash_size; +static int mock_ec_rw_hash_size; +static uint8_t hexp[32]; +static uint8_t update_hash; +static int hexp_size; +static uint8_t workbuf[VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); +static struct vb2_context *ctx; +static struct vb2_shared_data *sd; +static struct vb2_gbb_header gbb; + +/* Reset mock data (for use before each test) */ +static void ResetMocks(void) +{ + TEST_SUCC(vb2api_init(workbuf, sizeof(workbuf), &ctx), + "vb2api_init passed"); + + ctx->flags = VB2_CONTEXT_EC_SYNC_SUPPORTED; + vb2_nv_init(ctx); + + sd = vb2_get_sd(ctx); + + memset(&gbb, 0, sizeof(gbb)); + + mock_display_available = 1; + + ec_ro_updated = 0; + ec_rw_updated = 0; + ec_ro_protected = 0; + ec_rw_protected = 0; + ec_run_image = 0; + + in_rw_retval = VB2_SUCCESS; + protect_retval = VB2_SUCCESS; + update_retval = VB2_SUCCESS; + jump_retval = VB2_SUCCESS; + get_expected_retval = VB2_SUCCESS; + shutdown_request_calls_left = -1; + ec_vboot_done_retval = VB2_SUCCESS; + ec_vboot_done_calls = 0; + + memset(mock_ec_ro_hash, 0, sizeof(mock_ec_ro_hash)); + mock_ec_ro_hash[0] = 42; + mock_ec_ro_hash_size = sizeof(mock_ec_ro_hash); + + memset(mock_ec_rw_hash, 0, sizeof(mock_ec_rw_hash)); + mock_ec_rw_hash[0] = 42; + mock_ec_rw_hash_size = sizeof(mock_ec_rw_hash); + + memset(hexp, 0, sizeof(hexp)); + hexp[0] = 42; + hexp_size = sizeof(hexp); + + update_hash = 42; + + vb2api_secdata_kernel_create(ctx); + vb2_secdata_kernel_init(ctx); + + memset(hmir, 0, sizeof(hmir)); + hmir[0] = 42; + vb2_secdata_kernel_set_ec_hash(ctx, hmir); + + /* + * This flag should not involve in the steps deciding whether EC is + * running RW. The only concern here is we need to clear this flag after + * attempting a jump to RW. + */ + ctx->flags |= VB2_CONTEXT_EC_TRUSTED; +} + +/* Mock functions */ +struct vb2_gbb_header *vb2_get_gbb(struct vb2_context *c) +{ + return &gbb; +} + +vb2_error_t vb2ex_ec_running_rw(int *in_rw) +{ + *in_rw = ec_run_image; + return in_rw_retval; +} + +vb2_error_t vb2ex_ec_protect(enum vb2_firmware_selection select) +{ + if (protect_retval) + return protect_retval; + + if (select == VB_SELECT_FIRMWARE_READONLY) + ec_ro_protected = 1; + else + ec_rw_protected = 1; + + return VB2_SUCCESS; +} + +vb2_error_t vb2ex_ec_disable_jump(void) +{ + return VB2_SUCCESS; +} + +vb2_error_t vb2ex_ec_jump_to_rw(void) +{ + if (jump_retval == VB2_SUCCESS) + ec_run_image = 1; + + return jump_retval; +} + +vb2_error_t vb2ex_ec_hash_image(enum vb2_firmware_selection select, + const uint8_t **hash, int *hash_size) +{ + *hash = select == VB_SELECT_FIRMWARE_READONLY ? + mock_ec_ro_hash : mock_ec_rw_hash; + *hash_size = select == VB_SELECT_FIRMWARE_READONLY ? + mock_ec_ro_hash_size : mock_ec_rw_hash_size; + return *hash_size ? VB2_SUCCESS : VB2_ERROR_MOCK; +} + +vb2_error_t vb2ex_ec_get_expected_image_hash(enum vb2_firmware_selection select, + const uint8_t **hash, int *hash_size) +{ + *hash = hexp; + *hash_size = hexp_size; + + return hexp_size ? VB2_SUCCESS : VB2_ERROR_MOCK; +} + +vb2_error_t vb2ex_ec_update_image(enum vb2_firmware_selection select) +{ + if (update_retval) + return update_retval; + + if (!mock_display_available) + return VB2_REQUEST_REBOOT; + + if (select == VB_SELECT_FIRMWARE_READONLY) { + ec_ro_updated = 1; + mock_ec_ro_hash[0] = update_hash; + } else { + ec_rw_updated = 1; + mock_ec_rw_hash[0] = update_hash; + } + return VB2_SUCCESS; +} + +vb2_error_t vb2ex_ec_vboot_done(struct vb2_context *c) +{ + ec_vboot_done_calls++; + return ec_vboot_done_retval; +} + +static void test_ssync(vb2_error_t retval, int recovery_reason, + const char *desc) +{ + TEST_EQ(vb2api_ec_sync(ctx), retval, desc); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + recovery_reason, " recovery reason"); + struct vb2_secdata_kernel_v1 *sec = (void *)ctx->secdata_kernel; + if (sec->struct_version >= VB2_SECDATA_KERNEL_VERSION_V10) { + const uint8_t *hash = vb2_secdata_kernel_get_ec_hash(ctx); + TEST_EQ(memcmp(hash, hexp, sizeof(hexp)), 0, "Hmir synced"); + } +} + +/* Tests */ + +static void VbSoftwareSyncTest(void) +{ + /* Check flag toggling */ + ResetMocks(); + test_ssync(VB2_SUCCESS, 0, "Normal (no) sync"); + TEST_NEQ(sd->status & VB2_SD_STATUS_EC_SYNC_COMPLETE, 0, + " EC sync complete"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 1, " ec ro protected"); + TEST_EQ(ec_rw_protected, 1, " ec rw protected"); + TEST_EQ(ec_run_image, 1, " ec run image"); + TEST_EQ(ec_vboot_done_calls, 1, "ec_vboot_done calls"); + /* Sync again to check ec_vboot_done */ + test_ssync(VB2_SUCCESS, 0, "Normal sync"); + TEST_EQ(ec_vboot_done_calls, 1, "ec_vboot_done calls"); + + ResetMocks(); + sd->status |= VB2_SD_STATUS_EC_SYNC_COMPLETE; + test_ssync(VB2_SUCCESS, 0, "EC sync already complete"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 0, " ec run image"); + TEST_EQ(ec_vboot_done_calls, 0, "ec_vboot_done calls"); + + ResetMocks(); + ctx->flags &= ~VB2_CONTEXT_EC_SYNC_SUPPORTED; + test_ssync(VB2_SUCCESS, 0, "EC sync not supported"); + TEST_NEQ(sd->status & VB2_SD_STATUS_EC_SYNC_COMPLETE, 0, + " EC sync complete"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 0, " ec run image"); + TEST_EQ(ec_vboot_done_calls, 1, "ec_vboot_done calls"); + + ResetMocks(); + gbb.flags |= VB2_GBB_FLAG_DISABLE_EC_SOFTWARE_SYNC; + test_ssync(VB2_SUCCESS, 0, "EC sync disabled by GBB"); + TEST_NEQ(sd->status & VB2_SD_STATUS_EC_SYNC_COMPLETE, 0, + " EC sync complete"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 0, " ec run image"); + TEST_EQ(ec_vboot_done_calls, 1, "ec_vboot_done calls"); + + /* AP-RO cases */ + ResetMocks(); + in_rw_retval = VB2_ERROR_MOCK; + test_ssync(VB2_REQUEST_REBOOT_EC_TO_RO, + VB2_RECOVERY_EC_UNKNOWN_IMAGE, "Unknown EC image"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 0, " ec run image"); + + /* Calculate hashes */ + ResetMocks(); + mock_ec_rw_hash_size = 0; + test_ssync(VB2_REQUEST_REBOOT_EC_TO_RO, + VB2_RECOVERY_EC_HASH_FAILED, "Bad EC hash"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 0, " ec run image"); + + ResetMocks(); + mock_ec_rw_hash_size = 16; + test_ssync(VB2_REQUEST_REBOOT_EC_TO_RO, + VB2_RECOVERY_EC_HASH_SIZE, "Bad EC hash size"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 0, " ec run image"); + + ResetMocks(); + hexp_size = 0; + test_ssync(VB2_REQUEST_REBOOT_EC_TO_RO, + VB2_RECOVERY_EC_EXPECTED_HASH, "Bad precalculated hash"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 0, " ec run image"); + + ResetMocks(); + hexp_size = 16; + test_ssync(VB2_REQUEST_REBOOT_EC_TO_RO, + VB2_RECOVERY_EC_HASH_SIZE, + "Hash size mismatch"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 0, " ec run image"); + + ResetMocks(); + hexp_size = 4; + mock_ec_rw_hash_size = 4; + test_ssync(VB2_REQUEST_REBOOT_EC_TO_RO, VB2_RECOVERY_EC_HASH_SIZE, + "Custom hash size secdata_kernel v1"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 0, " ec run image"); + + ResetMocks(); + vb2api_secdata_kernel_create_v0(ctx); + vb2_secdata_kernel_init(ctx); + hexp_size = 4; + mock_ec_rw_hash_size = 4; + test_ssync(0, 0, "Custom hash size secdata_kernel v0"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 1, " ec ro protected"); + TEST_EQ(ec_rw_protected, 1, " ec rw protected"); + TEST_EQ(ec_run_image, 1, " ec run image"); + + /* Updates required */ + ResetMocks(); + ec_run_image = 1; + mock_ec_rw_hash[0]++; + test_ssync(VB2_REQUEST_REBOOT_EC_TO_RO, + 0, "Pending update needs reboot"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 1, " ec run image"); + + /* Hexp != Hmir == Heff */ + ResetMocks(); + hmir[0] = 43; + vb2_secdata_kernel_set_ec_hash(ctx, hmir); + ec_run_image = 1; + mock_ec_rw_hash[0] = 43; + test_ssync(VB2_REQUEST_REBOOT_EC_TO_RO, + 0, "Reboot after synching Hmir"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 1, " ec run image"); + + /* Hexp == Hmir != Heff */ + ResetMocks(); + ec_run_image = 0; + ctx->flags |= VB2_CONTEXT_NO_BOOT; + mock_ec_rw_hash[0] = 43; + test_ssync(VB2_REQUEST_REBOOT_EC_TO_RO, + 0, "Reboot after synching Heff"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 1, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 0, " ec run image"); + + /* Hexp != Hmir != Heff */ + ResetMocks(); + hmir[0] = 44; + vb2_secdata_kernel_set_ec_hash(ctx, hmir); + ec_run_image = 0; + ctx->flags |= VB2_CONTEXT_NO_BOOT; + mock_ec_rw_hash[0] = 43; + test_ssync(VB2_REQUEST_REBOOT_EC_TO_RO, + 0, "Reboot after synching Hmir and Heff"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 1, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 0, " ec run image"); + + /* Hexp == Heff != Hmir */ + ResetMocks(); + hmir[0] = 44; + vb2_secdata_kernel_set_ec_hash(ctx, hmir); + ec_run_image = 0; + ctx->flags |= VB2_CONTEXT_NO_BOOT; + test_ssync(VB2_REQUEST_REBOOT_EC_TO_RO, + 0, "Reboot after synching Hmir"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 0, " ec run image"); + + ResetMocks(); + mock_ec_rw_hash[0]++; + vb2_nv_set(ctx, VB2_NV_TRY_RO_SYNC, 1); + test_ssync(0, 0, "Update rw without reboot"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 1, " ec rw updated"); + TEST_EQ(ec_ro_protected, 1, " ec ro protected"); + TEST_EQ(ec_rw_protected, 1, " ec rw protected"); + TEST_EQ(ec_run_image, 1, " ec run image"); + + ResetMocks(); + mock_ec_rw_hash[0]++; + mock_ec_ro_hash[0]++; + vb2_nv_set(ctx, VB2_NV_TRY_RO_SYNC, 1); + test_ssync(0, 0, "Update rw and ro images without reboot"); + TEST_EQ(ec_ro_updated, 1, " ec ro updated"); + TEST_EQ(ec_rw_updated, 1, " ec rw updated"); + TEST_EQ(ec_ro_protected, 1, " ec ro protected"); + TEST_EQ(ec_rw_protected, 1, " ec rw protected"); + TEST_EQ(ec_run_image, 1, " ec run image"); + + ResetMocks(); + vb2_nv_set(ctx, VB2_NV_TRY_RO_SYNC, 1); + mock_ec_ro_hash[0]++; + vb2_nv_set(ctx, VB2_NV_DISPLAY_REQUEST, 1); + test_ssync(0, 0, "rw update not needed"); + TEST_EQ(ec_ro_updated, 1, " ec ro updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 1, " ec ro protected"); + TEST_EQ(ec_rw_protected, 1, " ec rw protected"); + TEST_EQ(ec_run_image, 1, " ec run image"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_DISPLAY_REQUEST), 1, + " DISPLAY_REQUEST left untouched"); + + ResetMocks(); + mock_ec_rw_hash[0]++; + mock_ec_ro_hash[0]++; + test_ssync(0, 0, "ro update not requested"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 1, " ec rw updated"); + TEST_EQ(ec_ro_protected, 1, " ec ro protected"); + TEST_EQ(ec_rw_protected, 1, " ec rw protected"); + TEST_EQ(ec_run_image, 1, " ec run image"); + + ResetMocks(); + mock_ec_rw_hash[0]++; + update_hash++; + test_ssync(VB2_REQUEST_REBOOT_EC_TO_RO, + VB2_RECOVERY_EC_UPDATE, "Updated hash mismatch"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 1, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 0, " ec run image"); + + ResetMocks(); + mock_ec_rw_hash[0]++; + update_retval = VB2_REQUEST_REBOOT_EC_TO_RO; + test_ssync(VB2_REQUEST_REBOOT_EC_TO_RO, + 0, "Reboot for rw update"); + TEST_EQ(ec_ro_updated, 0, " ec rw updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 0, " ec run image"); + + ResetMocks(); + mock_ec_rw_hash[0]++; + update_retval = VB2_ERROR_MOCK; + test_ssync(VB2_ERROR_MOCK, + VB2_RECOVERY_EC_UPDATE, "Update failed"); + TEST_EQ(ec_ro_updated, 0, " ec rw updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 0, " ec run image"); + + /* Display not available - RW */ + ResetMocks(); + mock_ec_rw_hash[0]++; + mock_display_available = 0; + test_ssync(VB2_REQUEST_REBOOT, 0, + "Reboot for display - ec rw"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 0, " ec run image"); + + /* Display not available - RO */ + ResetMocks(); + vb2_nv_set(ctx, VB2_NV_TRY_RO_SYNC, 1); + mock_ec_ro_hash[0]++; + mock_display_available = 0; + test_ssync(VB2_REQUEST_REBOOT, 0, + "Reboot for display - ec ro"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 1, " ec run image"); + + /* RW cases, no update */ + ResetMocks(); + ec_run_image = 1; + test_ssync(0, 0, "AP-RW, EC-RW"); + TEST_EQ(ec_ro_updated, 0, "ec ro updated"); + TEST_EQ(ec_rw_updated, 0, "ec rw updated"); + TEST_EQ(ec_ro_protected, 1, "ec ro protected"); + TEST_EQ(ec_rw_protected, 1, "ec rw protected"); + TEST_EQ(ec_run_image, 1, "ec run image"); + TEST_FALSE(ctx->flags & VB2_CONTEXT_EC_TRUSTED, + " VB2_CONTEXT_EC_TRUSTED is cleared"); + + ResetMocks(); + test_ssync(0, 0, "AP-RW, EC-RO -> EC-RW"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 1, " ec ro protected"); + TEST_EQ(ec_rw_protected, 1, " ec rw protected"); + TEST_EQ(ec_run_image, 1, " ec run image"); + TEST_FALSE(ctx->flags & VB2_CONTEXT_EC_TRUSTED, + " VB2_CONTEXT_EC_TRUSTED is cleared"); + + ResetMocks(); + jump_retval = VB2_ERROR_MOCK; + test_ssync(VB2_ERROR_MOCK, + VB2_RECOVERY_EC_JUMP_RW, "Jump to RW fail"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 0, " ec run image"); + TEST_FALSE(ctx->flags & VB2_CONTEXT_EC_TRUSTED, + " VB2_CONTEXT_EC_TRUSTED is cleared"); + + ResetMocks(); + jump_retval = VB2_REQUEST_REBOOT_EC_TO_RO; + test_ssync(VB2_REQUEST_REBOOT_EC_TO_RO, + 0, "Jump to RW fail because locked"); + TEST_EQ(ec_ro_updated, 0, " ec ro updated"); + TEST_EQ(ec_rw_updated, 0, " ec rw updated"); + TEST_EQ(ec_ro_protected, 0, " ec ro protected"); + TEST_EQ(ec_rw_protected, 0, " ec rw protected"); + TEST_EQ(ec_run_image, 0, " ec run image"); + TEST_FALSE(ctx->flags & VB2_CONTEXT_EC_TRUSTED, + " VB2_CONTEXT_EC_TRUSTED is cleared"); + + ResetMocks(); + protect_retval = VB2_ERROR_MOCK; + test_ssync(VB2_ERROR_MOCK, VB2_RECOVERY_EC_PROTECT, "Protect error"); + TEST_EQ(ec_ro_updated, 0, "ec ro updated"); + TEST_EQ(ec_rw_updated, 0, "ec rw updated"); + TEST_EQ(ec_ro_protected, 0, "ec ro protected"); + TEST_EQ(ec_rw_protected, 0, "ec rw protected"); + TEST_EQ(ec_run_image, 1, "ec run image"); + TEST_FALSE(ctx->flags & VB2_CONTEXT_EC_TRUSTED, + " VB2_CONTEXT_EC_TRUSTED is cleared"); + + /* No longer check for shutdown requested */ + ResetMocks(); + shutdown_request_calls_left = 0; + test_ssync(0, 0, "AP-RW, EC-RO -> EC-RW shutdown requested"); + TEST_EQ(ec_ro_updated, 0, "ec ro updated"); + TEST_EQ(ec_rw_updated, 0, "ec rw updated"); + TEST_EQ(ec_ro_protected, 1, "ec ro protected"); + TEST_EQ(ec_rw_protected, 1, "ec rw protected"); + TEST_EQ(ec_run_image, 1, "ec run image"); + + ResetMocks(); + ec_run_image = 1; + shutdown_request_calls_left = 0; + test_ssync(0, 0, "AP-RW shutdown requested"); + TEST_EQ(ec_ro_updated, 0, "ec ro updated"); + TEST_EQ(ec_rw_updated, 0, "ec rw updated"); + TEST_EQ(ec_ro_protected, 1, "ec ro protected"); + TEST_EQ(ec_rw_protected, 1, "ec rw protected"); + TEST_EQ(ec_run_image, 1, "ec run image"); + + /* EC sync not allowed in recovery mode */ + ResetMocks(); + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + test_ssync(0, 0, "No sync in recovery mode"); + TEST_EQ(ec_ro_updated, 0, "ec ro updated"); + TEST_EQ(ec_rw_updated, 0, "ec rw updated"); + TEST_EQ(ec_ro_protected, 0, "ec ro protected"); + TEST_EQ(ec_rw_protected, 0, "ec rw protected"); + TEST_EQ(ec_run_image, 0, "ec run image"); +} + +int main(void) +{ + VbSoftwareSyncTest(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_firmware_tests.c b/tests/vb2_firmware_tests.c new file mode 100644 index 0000000..681e5d6 --- /dev/null +++ b/tests/vb2_firmware_tests.c @@ -0,0 +1,449 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for firmware verification library + */ + +#include + +#include "2api.h" +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2rsa.h" +#include "2secdata.h" +#include "2sysincludes.h" +#include "test_common.h" + +/* Common context for tests */ +static uint8_t workbuf[VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); +static struct vb2_context *ctx; +static struct vb2_shared_data *sd; +static struct vb2_gbb_header gbb; + +/* Mocked function data */ + +static struct { + struct vb2_gbb_header h; + struct vb2_packed_key rootkey; + char rootkey_data[32]; +} mock_gbb; + +static struct { + /* Keyblock */ + struct { + struct vb2_keyblock kb; + char data_key_data[16]; + uint8_t kbdata[128]; + } k; + /* Preamble follows keyblock */ + struct { + struct vb2_fw_preamble pre; + uint8_t predata[128]; + } p; + +} mock_vblock; + +static int mock_read_res_fail_on_call; +static int mock_unpack_key_retval; +static int mock_verify_keyblock_retval; +static int mock_verify_preamble_retval; + +/* Type of test to reset for */ +enum reset_type { + FOR_KEYBLOCK, + FOR_PREAMBLE +}; + +static void reset_common_data(enum reset_type t) +{ + struct vb2_keyblock *kb = &mock_vblock.k.kb; + struct vb2_fw_preamble *pre = &mock_vblock.p.pre; + + memset(workbuf, 0xaa, sizeof(workbuf)); + + TEST_SUCC(vb2api_init(workbuf, sizeof(workbuf), &ctx), + "vb2api_init failed"); + + memset(&gbb, 0, sizeof(gbb)); + sd = vb2_get_sd(ctx); + + vb2_nv_init(ctx); + + vb2api_secdata_firmware_create(ctx); + vb2_secdata_firmware_init(ctx); + + vb2api_secdata_kernel_create(ctx); + vb2_secdata_kernel_init(ctx); + + mock_read_res_fail_on_call = 0; + mock_unpack_key_retval = VB2_SUCCESS; + mock_verify_keyblock_retval = VB2_SUCCESS; + mock_verify_preamble_retval = VB2_SUCCESS; + + /* Set up mock data for verifying keyblock */ + sd->fw_version_secdata = 0x20002; + vb2_secdata_firmware_set(ctx, VB2_SECDATA_FIRMWARE_VERSIONS, + sd->fw_version_secdata); + + gbb.rootkey_offset = vb2_offset_of(&mock_gbb, &mock_gbb.rootkey); + gbb.rootkey_size = sizeof(mock_gbb.rootkey_data); + sd->last_fw_result = VB2_FW_RESULT_SUCCESS; + + mock_gbb.rootkey.algorithm = 11; + mock_gbb.rootkey.key_offset = + vb2_offset_of(&mock_gbb.rootkey, + &mock_gbb.rootkey_data); + mock_gbb.rootkey.key_size = sizeof(mock_gbb.rootkey_data); + + kb->keyblock_size = sizeof(mock_vblock.k); + kb->data_key.algorithm = 7; + kb->data_key.key_version = 2; + kb->data_key.key_offset = + vb2_offset_of(&mock_vblock.k, &mock_vblock.k.data_key_data) - + vb2_offset_of(&mock_vblock.k, &kb->data_key); + kb->data_key.key_size = sizeof(mock_vblock.k.data_key_data); + strcpy(mock_vblock.k.data_key_data, "data key data!!"); + + pre->preamble_size = sizeof(mock_vblock.p); + pre->firmware_version = 2; + + /* If verifying preamble, verify keyblock first to set up data key */ + if (t == FOR_PREAMBLE) + vb2_load_fw_keyblock(ctx); +}; + +/* Mocked functions */ +struct vb2_gbb_header *vb2_get_gbb(struct vb2_context *c) +{ + return &gbb; +} + +vb2_error_t vb2ex_read_resource(struct vb2_context *c, + enum vb2_resource_index index, uint32_t offset, + void *buf, uint32_t size) +{ + uint8_t *rptr; + uint32_t rsize; + + if (--mock_read_res_fail_on_call == 0) + return VB2_ERROR_EX_READ_RESOURCE_INDEX; + + switch(index) { + case VB2_RES_GBB: + rptr = (uint8_t *)&mock_gbb; + rsize = sizeof(mock_gbb); + break; + case VB2_RES_FW_VBLOCK: + rptr = (uint8_t *)&mock_vblock; + rsize = sizeof(mock_vblock); + break; + default: + return VB2_ERROR_EX_READ_RESOURCE_INDEX; + } + + if (offset > rsize || offset + size > rsize) + return VB2_ERROR_EX_READ_RESOURCE_SIZE; + + memcpy(buf, rptr + offset, size); + return VB2_SUCCESS; +} + +vb2_error_t vb2_unpack_key_buffer(struct vb2_public_key *key, + const uint8_t *buf, uint32_t size) +{ + key->arrsize = 0; + return mock_unpack_key_retval; +} + +static struct vb2_public_key last_used_key; + +vb2_error_t vb2_verify_keyblock(struct vb2_keyblock *block, uint32_t size, + const struct vb2_public_key *key, + const struct vb2_workbuf *wb) +{ + memcpy(&last_used_key, key, sizeof(struct vb2_public_key)); + return mock_verify_keyblock_retval; +} + +vb2_error_t vb2_verify_fw_preamble(struct vb2_fw_preamble *preamble, + uint32_t size, + const struct vb2_public_key *key, + const struct vb2_workbuf *wb) +{ + memcpy(&last_used_key, key, sizeof(struct vb2_public_key)); + return mock_verify_preamble_retval; +} + +/* Tests */ + +static void verify_keyblock_tests(void) +{ + struct vb2_keyblock *kb = &mock_vblock.k.kb; + struct vb2_packed_key *k; + int expected_offset; + + /* Test successful call */ + reset_common_data(FOR_KEYBLOCK); + expected_offset = sd->workbuf_used; + TEST_SUCC(vb2_load_fw_keyblock(ctx), "keyblock verify"); + TEST_EQ(sd->fw_version, 0x20000, "keyblock version"); + TEST_EQ(sd->vblock_preamble_offset, sizeof(mock_vblock.k), + "preamble offset"); + TEST_EQ(sd->data_key_offset, expected_offset, + "keyblock data key offset"); + TEST_EQ(sd->workbuf_used, + vb2_wb_round_up(sd->data_key_offset + + sd->data_key_size), + "workbuf used"); + + /* Make sure data key was properly saved */ + k = vb2_member_of(sd, sd->data_key_offset); + TEST_EQ(k->algorithm, 7, "data key algorithm"); + TEST_EQ(k->key_version, 2, "data key version"); + TEST_EQ(k->key_size, sizeof(mock_vblock.k.data_key_data), + "data key size"); + TEST_EQ(memcmp(vb2_member_of(k, k->key_offset), + mock_vblock.k.data_key_data, + sizeof(mock_vblock.k.data_key_data)), + 0, "data key data"); + TEST_EQ(sd->workbuf_used, + vb2_wb_round_up(sd->data_key_offset + + sd->data_key_size), + "workbuf used after"); + + /* Test hwcrypto conditions */ + reset_common_data(FOR_KEYBLOCK); + + TEST_SUCC(vb2_load_fw_keyblock(ctx), "keyblock verify"); + TEST_EQ(last_used_key.allow_hwcrypto, 0, + "hwcrypto is forbidden by TPM flag"); + + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + TEST_SUCC(vb2_load_fw_keyblock(ctx), "keyblock verify"); + TEST_EQ(last_used_key.allow_hwcrypto, 0, + "hwcrypto is forbidden by TPM flag on recovery mode"); + + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_FLAGS, + VB2_SECDATA_KERNEL_FLAG_HWCRYPTO_ALLOWED); + + TEST_SUCC(vb2_load_fw_keyblock(ctx), "keyblock verify"); + TEST_EQ(last_used_key.allow_hwcrypto, 0, + "hwcrypto is forbidden on recovery mode"); + + ctx->flags &= ~VB2_CONTEXT_RECOVERY_MODE; + TEST_SUCC(vb2_load_fw_keyblock(ctx), "keyblock verify"); + TEST_EQ(last_used_key.allow_hwcrypto, 1, "hwcrypto is allowed"); + + /* Test failures */ + reset_common_data(FOR_KEYBLOCK); + sd->workbuf_used = sd->workbuf_size + VB2_WORKBUF_ALIGN - + vb2_wb_round_up(gbb.rootkey_size); + TEST_EQ(vb2_load_fw_keyblock(ctx), + VB2_ERROR_FW_KEYBLOCK_WORKBUF_ROOT_KEY, + "keyblock not enough workbuf for root key"); + + reset_common_data(FOR_KEYBLOCK); + gbb.rootkey_size = sizeof(mock_gbb); + TEST_EQ(vb2_load_fw_keyblock(ctx), + VB2_ERROR_EX_READ_RESOURCE_SIZE, + "keyblock read root key"); + + reset_common_data(FOR_KEYBLOCK); + mock_unpack_key_retval = VB2_ERROR_UNPACK_KEY_SIG_ALGORITHM; + TEST_EQ(vb2_load_fw_keyblock(ctx), + VB2_ERROR_UNPACK_KEY_SIG_ALGORITHM, + "keyblock unpack root key"); + + reset_common_data(FOR_KEYBLOCK); + sd->workbuf_used = sd->workbuf_size - + vb2_wb_round_up(gbb.rootkey_size); + TEST_EQ(vb2_load_fw_keyblock(ctx), + VB2_ERROR_FW_KEYBLOCK_WORKBUF_HEADER, + "keyblock not enough workbuf for header"); + + reset_common_data(FOR_KEYBLOCK); + mock_read_res_fail_on_call = 2; + TEST_EQ(vb2_load_fw_keyblock(ctx), + VB2_ERROR_EX_READ_RESOURCE_INDEX, + "keyblock read keyblock header"); + + reset_common_data(FOR_KEYBLOCK); + sd->workbuf_used = sd->workbuf_size - + vb2_wb_round_up(gbb.rootkey_size) - + vb2_wb_round_up(sizeof(struct vb2_keyblock)); + TEST_EQ(vb2_load_fw_keyblock(ctx), + VB2_ERROR_FW_KEYBLOCK_WORKBUF, + "keyblock not enough workbuf for entire keyblock"); + + reset_common_data(FOR_KEYBLOCK); + kb->keyblock_size = sizeof(mock_vblock) + 1; + TEST_EQ(vb2_load_fw_keyblock(ctx), + VB2_ERROR_EX_READ_RESOURCE_SIZE, + "keyblock read keyblock"); + + reset_common_data(FOR_KEYBLOCK); + mock_verify_keyblock_retval = VB2_ERROR_KEYBLOCK_MAGIC; + TEST_EQ(vb2_load_fw_keyblock(ctx), + VB2_ERROR_KEYBLOCK_MAGIC, + "keyblock verify keyblock"); + + reset_common_data(FOR_KEYBLOCK); + kb->data_key.key_version = 0x10000; + TEST_EQ(vb2_load_fw_keyblock(ctx), + VB2_ERROR_FW_KEYBLOCK_VERSION_RANGE, + "keyblock version range"); + + reset_common_data(FOR_KEYBLOCK); + kb->data_key.key_version = 1; + TEST_EQ(vb2_load_fw_keyblock(ctx), + VB2_ERROR_FW_KEYBLOCK_VERSION_ROLLBACK, + "keyblock rollback"); + + reset_common_data(FOR_KEYBLOCK); + kb->data_key.key_version = 1; + gbb.flags |= VB2_GBB_FLAG_DISABLE_FW_ROLLBACK_CHECK; + TEST_SUCC(vb2_load_fw_keyblock(ctx), "keyblock rollback with GBB flag"); +} + +static void verify_preamble_tests(void) +{ + struct vb2_fw_preamble *pre = &mock_vblock.p.pre; + int expected_offset; + uint32_t v; + + /* Test successful call */ + reset_common_data(FOR_PREAMBLE); + expected_offset = sd->workbuf_used; + TEST_SUCC(vb2_load_fw_preamble(ctx), "preamble good"); + TEST_EQ(sd->fw_version, 0x20002, "combined version"); + TEST_EQ(sd->preamble_offset, expected_offset, + "preamble offset"); + TEST_EQ(sd->preamble_size, pre->preamble_size, "preamble size"); + TEST_EQ(sd->workbuf_used, + vb2_wb_round_up(sd->preamble_offset + + sd->preamble_size), + "workbuf used"); + + /* Test hwcrypto conditions */ + reset_common_data(FOR_PREAMBLE); + + TEST_SUCC(vb2_load_fw_preamble(ctx), "preamble good"); + TEST_EQ(last_used_key.allow_hwcrypto, 0, + "hwcrypto is forbidden by TPM flag"); + + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + TEST_SUCC(vb2_load_fw_preamble(ctx), "preamble good"); + TEST_EQ(last_used_key.allow_hwcrypto, 0, + "hwcrypto is forbidden by TPM flag on recovery mode"); + + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_FLAGS, + VB2_SECDATA_KERNEL_FLAG_HWCRYPTO_ALLOWED); + + TEST_SUCC(vb2_load_fw_preamble(ctx), "preamble good"); + TEST_EQ(last_used_key.allow_hwcrypto, 0, + "hwcrypto is forbidden on recovery mode"); + + ctx->flags &= ~VB2_CONTEXT_RECOVERY_MODE; + TEST_SUCC(vb2_load_fw_preamble(ctx), "preamble good"); + TEST_EQ(last_used_key.allow_hwcrypto, 1, + "hwcrypto is allowed"); + + + /* Expected failures */ + reset_common_data(FOR_PREAMBLE); + sd->data_key_size = 0; + TEST_EQ(vb2_load_fw_preamble(ctx), + VB2_ERROR_FW_PREAMBLE2_DATA_KEY, + "preamble no data key"); + + reset_common_data(FOR_PREAMBLE); + mock_unpack_key_retval = VB2_ERROR_UNPACK_KEY_HASH_ALGORITHM; + TEST_EQ(vb2_load_fw_preamble(ctx), + VB2_ERROR_UNPACK_KEY_HASH_ALGORITHM, + "preamble unpack data key"); + + reset_common_data(FOR_PREAMBLE); + sd->workbuf_used = sd->workbuf_size + VB2_WORKBUF_ALIGN - + vb2_wb_round_up(sizeof(struct vb2_fw_preamble)); + TEST_EQ(vb2_load_fw_preamble(ctx), + VB2_ERROR_FW_PREAMBLE2_WORKBUF_HEADER, + "preamble not enough workbuf for header"); + + reset_common_data(FOR_PREAMBLE); + sd->vblock_preamble_offset = sizeof(mock_vblock); + TEST_EQ(vb2_load_fw_preamble(ctx), + VB2_ERROR_EX_READ_RESOURCE_SIZE, + "preamble read header"); + + reset_common_data(FOR_PREAMBLE); + sd->workbuf_used = sd->workbuf_size + VB2_WORKBUF_ALIGN - + vb2_wb_round_up(sizeof(mock_vblock.p)); + TEST_EQ(vb2_load_fw_preamble(ctx), + VB2_ERROR_FW_PREAMBLE2_WORKBUF, + "preamble not enough workbuf"); + + reset_common_data(FOR_PREAMBLE); + pre->preamble_size = sizeof(mock_vblock); + TEST_EQ(vb2_load_fw_preamble(ctx), + VB2_ERROR_EX_READ_RESOURCE_SIZE, + "preamble read full"); + + reset_common_data(FOR_PREAMBLE); + mock_verify_preamble_retval = VB2_ERROR_PREAMBLE_SIG_INVALID; + TEST_EQ(vb2_load_fw_preamble(ctx), + VB2_ERROR_PREAMBLE_SIG_INVALID, + "preamble verify"); + + reset_common_data(FOR_PREAMBLE); + pre->firmware_version = 0x10000; + TEST_EQ(vb2_load_fw_preamble(ctx), + VB2_ERROR_FW_PREAMBLE_VERSION_RANGE, + "preamble version range"); + + reset_common_data(FOR_PREAMBLE); + pre->firmware_version = 1; + TEST_EQ(vb2_load_fw_preamble(ctx), + VB2_ERROR_FW_PREAMBLE_VERSION_ROLLBACK, + "preamble version rollback"); + + reset_common_data(FOR_PREAMBLE); + pre->firmware_version = 1; + gbb.flags |= VB2_GBB_FLAG_DISABLE_FW_ROLLBACK_CHECK; + TEST_SUCC(vb2_load_fw_preamble(ctx), "version rollback with GBB flag"); + + reset_common_data(FOR_PREAMBLE); + pre->firmware_version = 3; + TEST_SUCC(vb2_load_fw_preamble(ctx), + "preamble version roll forward"); + v = vb2_secdata_firmware_get(ctx, VB2_SECDATA_FIRMWARE_VERSIONS); + TEST_EQ(v, 0x20003, "roll forward"); + + /* Newer version without result success doesn't roll forward */ + reset_common_data(FOR_PREAMBLE); + pre->firmware_version = 3; + sd->last_fw_result = VB2_FW_RESULT_UNKNOWN; + TEST_SUCC(vb2_load_fw_preamble(ctx), + "preamble version no roll forward 1"); + v = vb2_secdata_firmware_get(ctx, VB2_SECDATA_FIRMWARE_VERSIONS); + TEST_EQ(v, 0x20002, "no roll forward"); + + /* Newer version with success but for other slot doesn't roll forward */ + reset_common_data(FOR_PREAMBLE); + pre->firmware_version = 3; + sd->last_fw_slot = 1; + TEST_SUCC(vb2_load_fw_preamble(ctx), + "preamble version no roll forward 2"); + v = vb2_secdata_firmware_get(ctx, VB2_SECDATA_FIRMWARE_VERSIONS); + TEST_EQ(v, 0x20002, "no roll forward"); +} + +int main(int argc, char* argv[]) +{ + verify_keyblock_tests(); + verify_preamble_tests(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_firmware_tests.sh b/tests/vb2_firmware_tests.sh new file mode 100755 index 0000000..88b6e6a --- /dev/null +++ b/tests/vb2_firmware_tests.sh @@ -0,0 +1,99 @@ +#!/bin/bash + +# Copyright (c) 2014 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# End-to-end test for vboot2 firmware verification + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +set -e + +echo 'Creating test firmware' + +# Run tests in a dedicated directory for easy cleanup or debugging. +DIR="${TEST_DIR}/vb2fw_test_dir" +[ -d "$DIR" ] || mkdir -p "$DIR" +echo "Testing vb2_verify_fw in $DIR" +cd "$DIR" + +# Dummy firmware body +echo 'This is a test firmware body. This is only a test. Lalalalala' \ + > body.test + +algo_to_rsa() +{ + case $1 in + 0|1|2) printf "rsa1024";; + 3|4|5) printf "rsa2048";; + 6|7|8) printf "rsa4096";; + 9|10|11) printf "rsa8192";; + *) exit 1;; + esac +} + +algo_to_sha() +{ + case $1 in + 0|3|6|9) printf "sha1";; + 1|4|7|10) printf "sha256";; + 2|5|8|11) printf "sha512";; + *) exit 1;; + esac +} + +run_test() +{ + local root_algo=$1 + local fw_algo=$2 + local kern_algo=$3 + + local root_rsa="$(algo_to_rsa ${root_algo})" + local fw_rsa="$(algo_to_rsa ${fw_algo})" + local kern_rsa="$(algo_to_rsa ${kern_algo})" + + local root_sha="$(algo_to_sha ${root_algo})" + local fw_sha="$(algo_to_sha ${fw_algo})" + local kern_sha="$(algo_to_sha ${kern_algo})" + + # Pack keys using original vboot utilities + ${FUTILITY} vbutil_key --pack rootkey.test \ + --key "${TESTKEY_DIR}/key_${root_rsa}.keyb" --algorithm ${root_algo} + ${FUTILITY} vbutil_key --pack fwsubkey.test \ + --key "${TESTKEY_DIR}/key_${fw_rsa}.keyb" --algorithm ${fw_algo} + ${FUTILITY} vbutil_key --pack kernkey.test \ + --key "${TESTKEY_DIR}/key_${kern_rsa}.keyb" --algorithm ${kern_algo} + + # Create a GBB with the root key + ${FUTILITY} gbb -c 128,2400,0,0 gbb.test + ${FUTILITY} gbb gbb.test -s --hwid='Test GBB' \ + --rootkey=rootkey.test + + # Keyblock with firmware subkey is signed by root key + ${FUTILITY} vbutil_keyblock --pack keyblock.test \ + --datapubkey fwsubkey.test \ + --signprivate "${TESTKEY_DIR}/key_${root_rsa}.${root_sha}.vbprivk" + + # Firmware preamble is signed with the firmware subkey + ${FUTILITY} vbutil_firmware \ + --vblock vblock.test \ + --keyblock keyblock.test \ + --signprivate "${TESTKEY_DIR}/key_${fw_rsa}.${fw_sha}.vbprivk" \ + --fv body.test \ + --version 1 \ + --kernelkey kernkey.test + + echo "Verifying test firmware using vb2_verify_fw" \ + "(root=${root_algo}, fw=${fw_algo}, kernel=${kern_algo})" + + # Verify the firmware using vboot2 checks + ${BUILD_RUN}/tests/vb20_verify_fw gbb.test vblock.test body.test + + happy 'vb2_verify_fw succeeded' +} + +run_test 11 7 4 +run_test 11 11 11 +run_test 1 1 1 diff --git a/tests/vb2_gbb_tests.c b/tests/vb2_gbb_tests.c new file mode 100644 index 0000000..047fa42 --- /dev/null +++ b/tests/vb2_gbb_tests.c @@ -0,0 +1,355 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for GBB library. + */ + +#include "2common.h" +#include "2misc.h" +#include "test_common.h" + +/* Mock data */ +static char gbb_data[4096 + sizeof(struct vb2_gbb_header)]; +static struct vb2_gbb_header *gbb = (struct vb2_gbb_header *)gbb_data; +static struct vb2_packed_key *rootkey; +static struct vb2_context *ctx; +static struct vb2_workbuf wb; +static uint8_t workbuf[VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + +static void set_gbb_hwid(const char *hwid, size_t size) +{ + memcpy(gbb_data + gbb->hwid_offset, hwid, size); + gbb->hwid_size = size; +} + +static void reset_common_data(void) +{ + int gbb_used; + + memset(gbb_data, 0, sizeof(gbb_data)); + gbb->header_size = sizeof(*gbb); + gbb->major_version = VB2_GBB_MAJOR_VER; + gbb->minor_version = VB2_GBB_MINOR_VER; + gbb->flags = 0; + gbb_used = sizeof(struct vb2_gbb_header); + + gbb->recovery_key_offset = gbb_used; + gbb->recovery_key_size = 64; + gbb_used += gbb->recovery_key_size; + gbb->rootkey_offset = gbb_used; + gbb->rootkey_size = sizeof(struct vb2_packed_key); + gbb_used += gbb->rootkey_size; + + rootkey = ((void *)gbb + gbb->rootkey_offset); + rootkey->key_offset = sizeof(*rootkey); + + gbb->hwid_offset = gbb_used; + const char hwid_src[] = "Test HWID"; + set_gbb_hwid(hwid_src, sizeof(hwid_src)); + + TEST_SUCC(vb2api_init(workbuf, sizeof(workbuf), &ctx), + "vb2api_init failed"); + vb2_workbuf_from_ctx(ctx, &wb); +} + +/* Mocks */ +struct vb2_gbb_header *vb2_get_gbb(struct vb2_context *c) +{ + return gbb; +} + +vb2_error_t vb2ex_read_resource(struct vb2_context *c, + enum vb2_resource_index index, uint32_t offset, + void *buf, uint32_t size) +{ + uint8_t *rptr; + uint32_t rsize; + + switch(index) { + case VB2_RES_GBB: + rptr = (uint8_t *)&gbb_data; + rsize = sizeof(gbb_data); + break; + default: + return VB2_ERROR_EX_READ_RESOURCE_INDEX; + } + + if (offset + size >= rsize) + return VB2_ERROR_EX_READ_RESOURCE_SIZE; + + memcpy(buf, rptr + offset, size); + return VB2_SUCCESS; +} + +/* Tests */ +static void flag_tests(void) +{ + reset_common_data(); + gbb->flags = 0xdeadbeef; + TEST_EQ(vb2api_gbb_get_flags(ctx), gbb->flags, + "retrieve GBB flags"); +} + +static void key_tests(void) +{ + /* Assume that root key and recovery key are dealt with using the same + code in our GBB library functions. */ + struct vb2_packed_key *keyp; + struct vb2_workbuf wborig; + const char key_data[] = "HELLOWORLD"; + uint32_t size; + + /* gbb.offset < sizeof(vb2_gbb_header) */ + reset_common_data(); + wborig = wb; + gbb->rootkey_offset = sizeof(*gbb) - 1; + TEST_EQ(vb2_gbb_read_root_key(ctx, &keyp, &size, &wb), + VB2_ERROR_GBB_INVALID, + "gbb.rootkey offset too small"); + TEST_TRUE(wb.buf == wborig.buf, + " workbuf restored on error"); + + /* gbb.offset > gbb_data */ + reset_common_data(); + wborig = wb; + gbb->rootkey_offset = sizeof(gbb_data) + 1; + TEST_EQ(vb2_gbb_read_root_key(ctx, &keyp, &size, &wb), + VB2_ERROR_EX_READ_RESOURCE_SIZE, + "gbb.rootkey offset too large"); + TEST_TRUE(wb.buf == wborig.buf, + " workbuf restored on error"); + + /* gbb.size < sizeof(vb2_packed_key) */ + reset_common_data(); + wborig = wb; + gbb->rootkey_size = sizeof(*rootkey) - 1; + TEST_EQ(vb2_gbb_read_root_key(ctx, &keyp, &size, &wb), + VB2_ERROR_GBB_INVALID, + "gbb.rootkey size too small"); + TEST_TRUE(wb.buf == wborig.buf, + " workbuf restored on error"); + + /* sizeof(vb2_packed_key) > workbuf.size */ + reset_common_data(); + wborig = wb; + wb.size = sizeof(*rootkey) - 1; + TEST_EQ(vb2_gbb_read_root_key(ctx, &keyp, &size, &wb), + VB2_ERROR_GBB_WORKBUF, + "workbuf size too small for vb2_packed_key header"); + TEST_TRUE(wb.buf == wborig.buf, + " workbuf restored on error"); + + /* packed_key.offset < sizeof(vb2_packed_key) */ + reset_common_data(); + wborig = wb; + rootkey->key_size = 1; + rootkey->key_offset = sizeof(*rootkey) - 1; + TEST_EQ(vb2_gbb_read_root_key(ctx, &keyp, &size, &wb), + VB2_ERROR_INSIDE_DATA_OVERLAP, + "rootkey offset too small"); + TEST_TRUE(wb.buf == wborig.buf, + " workbuf restored on error"); + + /* packed_key.offset > gbb_data */ + reset_common_data(); + wborig = wb; + rootkey->key_size = 1; + rootkey->key_offset = sizeof(gbb_data) + 1; + gbb->rootkey_size = rootkey->key_offset + rootkey->key_size; + TEST_EQ(vb2_gbb_read_root_key(ctx, &keyp, &size, &wb), + VB2_ERROR_EX_READ_RESOURCE_SIZE, + "rootkey size too large"); + TEST_TRUE(wb.buf == wborig.buf, + " workbuf restored on error"); + + /* packed_key.size > workbuf.size */ + reset_common_data(); + wborig = wb; + rootkey->key_size = wb.size + 1; + gbb->rootkey_size = rootkey->key_offset + rootkey->key_size + 1; + TEST_EQ(vb2_gbb_read_root_key(ctx, &keyp, &size, &wb), + VB2_ERROR_GBB_WORKBUF, + "workbuf size too small for vb2_packed_key contents"); + TEST_TRUE(wb.buf == wborig.buf, + " workbuf restored on error"); + + /* gbb.size < sizeof(vb2_packed_key) + packed_key.size */ + reset_common_data(); + wborig = wb; + rootkey->key_size = 2; + gbb->rootkey_size = rootkey->key_offset + rootkey->key_size - 1; + TEST_EQ(vb2_gbb_read_root_key(ctx, &keyp, &size, &wb), + VB2_ERROR_INSIDE_DATA_OUTSIDE, + "rootkey size exceeds gbb.rootkey size"); + TEST_TRUE(wb.buf == wborig.buf, + " workbuf restored on error"); + + /* gbb.size == sizeof(vb2_packed_key) + packed_key.size */ + reset_common_data(); + wborig = wb; + rootkey->key_size = sizeof(key_data); + memcpy((void *)rootkey + rootkey->key_offset, + key_data, sizeof(key_data)); + gbb->rootkey_size = rootkey->key_offset + rootkey->key_size; + TEST_SUCC(vb2_gbb_read_root_key(ctx, &keyp, &size, &wb), + "succeeds when gbb.rootkey and rootkey sizes agree"); + TEST_TRUE(wb.size < wborig.size, + " workbuf shrank on success"); + TEST_EQ(memcmp(rootkey, keyp, rootkey->key_offset + rootkey->key_size), + 0, " copied key data successfully"); + TEST_EQ(size, rootkey->key_offset + rootkey->key_size, + " correct size returned"); + + /* gbb.size > sizeof(vb2_packed_key) + packed_key.size + packed_key.offset = +0 */ + reset_common_data(); + wborig = wb; + rootkey->key_size = 1; + gbb->rootkey_size = rootkey->key_offset + rootkey->key_size + 1; + TEST_SUCC(vb2_gbb_read_root_key(ctx, &keyp, &size, &wb), + "succeeds when gbb.rootkey is padded after key"); + TEST_TRUE(wb.size < wborig.size, + " workbuf shrank on success"); + TEST_EQ(size, rootkey->key_offset + rootkey->key_size, + " correct size returned"); + + /* gbb.size > sizeof(vb2_packed_key) + packed_key.size + packed_key.offset = +1 */ + reset_common_data(); + wborig = wb; + rootkey->key_offset = sizeof(*rootkey) + 1; + rootkey->key_size = 1; + gbb->rootkey_size = rootkey->key_offset + rootkey->key_size; + TEST_SUCC(vb2_gbb_read_root_key(ctx, &keyp, &size, &wb), + "succeeds when gbb.rootkey is padded before key"); + TEST_TRUE(wb.size < wborig.size, + " workbuf shrank on success"); + TEST_EQ(size, rootkey->key_offset + rootkey->key_size, + " correct size returned"); + + /* packed_key.size = 0, packed_key.offset = +1 */ + reset_common_data(); + wborig = wb; + rootkey->key_offset = sizeof(*rootkey) + 1; + rootkey->key_size = 0; + gbb->rootkey_size = rootkey->key_offset + rootkey->key_size + 1; + TEST_SUCC(vb2_gbb_read_root_key(ctx, &keyp, &size, &wb), + "succeeds when gbb.rootkey is padded; empty test key"); + TEST_TRUE(wb.size < wborig.size, + " workbuf shrank on success"); + TEST_EQ(size, rootkey->key_offset + rootkey->key_size, + " correct size returned"); + + /* packed_key.size = 0, packed_key.offset = -1 */ + reset_common_data(); + wborig = wb; + rootkey->key_offset = sizeof(*rootkey) - 1; + rootkey->key_size = 0; + gbb->rootkey_size = sizeof(*rootkey) + rootkey->key_size + 1; + TEST_SUCC(vb2_gbb_read_root_key(ctx, &keyp, &size, &wb), + "succeeds when gbb.rootkey is padded; empty test key"); + TEST_TRUE(wb.size < wborig.size, + " workbuf shrank on success"); + TEST_EQ(size, sizeof(*rootkey), " correct size returned"); +} + +static void hwid_tests(void) +{ + char hwid[VB2_GBB_HWID_MAX_SIZE]; + uint32_t size; + + /* GBB HWID size = 0 */ + { + reset_common_data(); + gbb->hwid_size = 0; + size = VB2_GBB_HWID_MAX_SIZE; + TEST_EQ(vb2api_gbb_read_hwid(ctx, hwid, &size), + VB2_ERROR_GBB_INVALID, + "GBB HWID size invalid (HWID missing)"); + } + + /* GBB HWID offset > GBB size */ + { + reset_common_data(); + gbb->hwid_offset = sizeof(gbb_data) + 1; + size = VB2_GBB_HWID_MAX_SIZE; + TEST_EQ(vb2api_gbb_read_hwid(ctx, hwid, &size), + VB2_ERROR_EX_READ_RESOURCE_SIZE, + "GBB HWID offset invalid"); + } + + /* buffer size < HWID size */ + { + const char hwid_src[] = "Test HWID"; + reset_common_data(); + set_gbb_hwid(hwid_src, sizeof(hwid_src)); + size = sizeof(hwid_src) - 1; + TEST_EQ(vb2api_gbb_read_hwid(ctx, hwid, &size), + VB2_ERROR_INVALID_PARAMETER, + "HWID too large for buffer"); + } + + /* GBB HWID size < HWID size */ + { + const char hwid_src[] = "Test HWID"; + reset_common_data(); + set_gbb_hwid(hwid_src, sizeof(hwid_src) - 1); + size = sizeof(hwid_src); + TEST_EQ(vb2api_gbb_read_hwid(ctx, hwid, &size), + VB2_ERROR_INVALID_PARAMETER, + "HWID larger than GBB HWID size"); + } + + /* buffer size == HWID size */ + { + const char hwid_src[] = "Test HWID"; + reset_common_data(); + set_gbb_hwid(hwid_src, sizeof(hwid_src)); + size = sizeof(hwid_src); + TEST_SUCC(vb2api_gbb_read_hwid(ctx, hwid, &size), + "read normal HWID"); + TEST_EQ(strcmp(hwid, "Test HWID"), 0, " HWID correct"); + TEST_EQ(strlen(hwid) + 1, size, " HWID size consistent"); + TEST_EQ(strlen(hwid), strlen("Test HWID"), + " HWID size correct"); + } + + /* buffer size > HWID size */ + { + const char hwid_src[] = "Test HWID"; + reset_common_data(); + set_gbb_hwid(hwid_src, sizeof(hwid_src)); + size = sizeof(hwid_src) + 1; + TEST_SUCC(vb2api_gbb_read_hwid(ctx, hwid, &size), + "read normal HWID"); + TEST_EQ(strcmp(hwid, "Test HWID"), 0, " HWID correct"); + TEST_EQ(strlen(hwid) + 1, size, " HWID size consistent"); + TEST_EQ(strlen(hwid), strlen("Test HWID"), + " HWID size correct"); + } + + /* HWID with garbage */ + { + const char hwid_src[] = "Test HWID\0garbagegarbage"; + reset_common_data(); + set_gbb_hwid(hwid_src, sizeof(hwid_src)); + size = VB2_GBB_HWID_MAX_SIZE; + TEST_SUCC(vb2api_gbb_read_hwid(ctx, hwid, &size), + "read HWID with garbage"); + TEST_EQ(strcmp(hwid, "Test HWID"), 0, " HWID correct"); + TEST_EQ(strlen(hwid) + 1, size, " HWID size consistent"); + TEST_EQ(strlen(hwid), strlen("Test HWID"), + " HWID size correct"); + } +} + +int main(int argc, char* argv[]) +{ + flag_tests(); + key_tests(); + hwid_tests(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_host_flashrom_tests.c b/tests/vb2_host_flashrom_tests.c new file mode 100644 index 0000000..8552d0a --- /dev/null +++ b/tests/vb2_host_flashrom_tests.c @@ -0,0 +1,267 @@ +/* Copyright 2020 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for host flashrom utilities. + */ + +/* For strdup */ +#define _POSIX_C_SOURCE 200809L + +#include +#include +#include +#include +#include +#include +#include + +#include "2common.h" +#include "2return_codes.h" +#include "host_misc.h" +#include "flashrom.h" +#include "subprocess.h" +#include "test_common.h" + +#define MOCK_TMPFILE_NAME "/tmp/vb2_unittest" +#define MOCK_ROM_CONTENTS "bloop123" + +static bool flashrom_mock_success = true; +static enum { FLASHROM_NONE, FLASHROM_READ, FLASHROM_WRITE } captured_operation; +static enum { + FLASHROM_VERIFY_UNSPECIFIED, + FLASHROM_VERIFY_FAST, +} captured_verify; +static const char *captured_op_filename; +static const char *captured_region_param; +static const char *captured_programmer; +static uint8_t *captured_rom_contents; +static uint32_t captured_rom_size; + +/* Mocked mkstemp for tests. */ +int mkstemp(char *template_name) +{ + strncpy(template_name, MOCK_TMPFILE_NAME, strlen(template_name)); + return open(template_name, O_RDWR | O_CREAT | O_TRUNC, 0666); +} + +/* Mocked subprocess_run for tests. */ +int subprocess_run(const char *const argv[], + struct subprocess_target *input, + struct subprocess_target *output, + struct subprocess_target *error) +{ + int argc; + int opt; + int rv; + /* getopt_long wants an int instead of an enum, bummer... */ + int captured_verify_int = FLASHROM_VERIFY_UNSPECIFIED; + struct option long_opts[] = { + { + .name = "noverify-all", + .has_arg = no_argument, + .flag = &captured_verify_int, + .val = FLASHROM_VERIFY_FAST, + }, + }; + + /* Reset static variables to their defaults. */ + captured_operation = FLASHROM_NONE; + captured_operation = FLASHROM_VERIFY_UNSPECIFIED; + captured_op_filename = NULL; + captured_region_param = NULL; + captured_programmer = NULL; + captured_rom_contents = NULL; + captured_rom_size = 0; + optind = 0; + + /* Count the number of arguments, a required formalism for + getopt. */ + for (argc = 0; argv[argc]; argc++) + continue; + + /* We only understand the subset of arguments used by the + wrapper library. If it's updated to support more modes of + operation, this unit test code should be updated too. */ + while ((opt = getopt_long(argc, (char *const *)argv, + ":p:r:w:i:", long_opts, NULL)) != -1) { + /* Always consume the next argument if it does not + start with a dash. We have to muck with getopt's + global variables to make this happen. */ + if (opt == ':' && argv[optind] && argv[optind][0] != '-') { + optarg = strdup(argv[optind]); + optind++; + opt = optopt; + } else if (optarg && optarg[0] == '-') { + optarg = NULL; + optind--; + } else if (optarg) { + optarg = strdup(optarg); + } + + switch (opt) { + case 'p': + captured_programmer = optarg; + break; + case 'r': + captured_operation = FLASHROM_READ; + captured_op_filename = optarg; + break; + case 'w': + captured_operation = FLASHROM_WRITE; + captured_op_filename = optarg; + break; + case 'i': + captured_region_param = optarg; + break; + case 0: + /* long option */ + break; + default: + return 1; + } + } + + if (optind != argc) { + /* Extra arguments we don't understand. */ + return 1; + } + + rv = !flashrom_mock_success; + captured_verify = captured_verify_int; + + if (captured_operation == FLASHROM_READ) { + /* Write the mocked string we read from the ROM. */ + rv |= vb2_write_file(MOCK_TMPFILE_NAME, MOCK_ROM_CONTENTS, + strlen(MOCK_ROM_CONTENTS)); + } else if (captured_operation == FLASHROM_WRITE) { + /* Capture the buffer contents we wrote to the ROM. */ + rv |= vb2_read_file(MOCK_TMPFILE_NAME, &captured_rom_contents, + &captured_rom_size); + } + + return rv; +} + +static void test_read_whole_chip(void) +{ + uint8_t *buf; + uint32_t buf_sz; + + TEST_SUCC(flashrom_read("someprog", NULL, &buf, &buf_sz), + "Flashrom read succeeds"); + TEST_STR_EQ(captured_programmer, "someprog", + "Using specified programmer"); + TEST_EQ(captured_operation, FLASHROM_READ, "Doing a read operation"); + TEST_EQ(captured_verify, FLASHROM_VERIFY_UNSPECIFIED, + "Verification not enabled"); + TEST_STR_EQ(captured_op_filename, MOCK_TMPFILE_NAME, + "Reading to correct file"); + TEST_PTR_EQ(captured_region_param, NULL, "Not operating on a region"); + TEST_EQ(buf_sz, strlen(MOCK_ROM_CONTENTS), "Contents correct size"); + TEST_SUCC(memcmp(buf, MOCK_ROM_CONTENTS, buf_sz), + "Buffer has correct contents"); + + free(buf); +} + +static void test_read_region(void) +{ + uint8_t *buf; + uint32_t buf_sz; + + TEST_SUCC(flashrom_read("someprog", "SOME_REGION", &buf, &buf_sz), + "Flashrom read succeeds"); + TEST_STR_EQ(captured_programmer, "someprog", + "Using specified programmer"); + TEST_EQ(captured_operation, FLASHROM_READ, "Doing a read operation"); + TEST_EQ(captured_verify, FLASHROM_VERIFY_UNSPECIFIED, + "Verification not enabled"); + TEST_PTR_EQ(captured_op_filename, NULL, + "Not doing a read of the whole ROM"); + TEST_STR_EQ(captured_region_param, "SOME_REGION:" MOCK_TMPFILE_NAME, + "Reading to correct file and from correct region"); + TEST_EQ(buf_sz, strlen(MOCK_ROM_CONTENTS), "Contents correct size"); + TEST_SUCC(memcmp(buf, MOCK_ROM_CONTENTS, buf_sz), + "Buffer has correct contents"); + + free(buf); +} + +static void test_read_failure(void) +{ + uint8_t *buf; + uint32_t buf_sz; + + flashrom_mock_success = false; + TEST_NEQ(flashrom_read("someprog", "SOME_REGION", &buf, &buf_sz), + VB2_SUCCESS, "Flashrom read fails"); + flashrom_mock_success = true; +} + +static void test_write_whole_chip(void) +{ + uint8_t buf[sizeof(MOCK_ROM_CONTENTS) - 1]; + + memcpy(buf, MOCK_ROM_CONTENTS, sizeof(buf)); + + TEST_SUCC(flashrom_write("someprog", NULL, buf, sizeof(buf)), + "Flashrom write succeeds"); + TEST_STR_EQ(captured_programmer, "someprog", + "Using specified programmer"); + TEST_EQ(captured_operation, FLASHROM_WRITE, "Doing a write operation"); + TEST_EQ(captured_verify, FLASHROM_VERIFY_FAST, + "Fast verification enabled"); + TEST_STR_EQ(captured_op_filename, MOCK_TMPFILE_NAME, + "Writing to correct file"); + TEST_PTR_EQ(captured_region_param, NULL, "Not operating on a region"); + TEST_EQ(captured_rom_size, strlen(MOCK_ROM_CONTENTS), + "Contents correct size"); + TEST_SUCC(memcmp(captured_rom_contents, MOCK_ROM_CONTENTS, + captured_rom_size), "Buffer has correct contents"); +} + +static void test_write_region(void) +{ + uint8_t buf[sizeof(MOCK_ROM_CONTENTS) - 1]; + + memcpy(buf, MOCK_ROM_CONTENTS, sizeof(buf)); + + TEST_SUCC(flashrom_write("someprog", "SOME_REGION", buf, sizeof(buf)), + "Flashrom write succeeds"); + TEST_STR_EQ(captured_programmer, "someprog", + "Using specified programmer"); + TEST_EQ(captured_operation, FLASHROM_WRITE, "Doing a write operation"); + TEST_EQ(captured_verify, FLASHROM_VERIFY_FAST, + "Fast verification enabled"); + TEST_PTR_EQ(captured_op_filename, NULL, + "Not doing a write of the whole ROM"); + TEST_STR_EQ(captured_region_param, "SOME_REGION:" MOCK_TMPFILE_NAME, + "Writing to correct file and from correct region"); + TEST_EQ(captured_rom_size, strlen(MOCK_ROM_CONTENTS), + "Contents correct size"); + TEST_SUCC(memcmp(captured_rom_contents, MOCK_ROM_CONTENTS, + captured_rom_size), "Buffer has correct contents"); +} + +static void test_write_failure(void) +{ + uint8_t buf[20] = { 0 }; + + flashrom_mock_success = false; + TEST_NEQ(flashrom_write("someprog", "SOME_REGION", buf, sizeof(buf)), + VB2_SUCCESS, "Flashrom write fails"); + flashrom_mock_success = true; +} + +int main(int argc, char *argv[]) +{ + test_read_whole_chip(); + test_read_region(); + test_read_failure(); + test_write_whole_chip(); + test_write_region(); + test_write_failure(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_host_key_tests.c b/tests/vb2_host_key_tests.c new file mode 100644 index 0000000..82dd357 --- /dev/null +++ b/tests/vb2_host_key_tests.c @@ -0,0 +1,68 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for host library vboot2 key functions + */ + +#include "2common.h" +#include "host_common.h" +#include "test_common.h" + +/* Public key utility functions */ +static void public_key_tests(void) +{ + struct vb2_packed_key k[3]; + struct vb2_packed_key j[5]; + + /* Fill some bits of the public key data */ + memset(j, 0, sizeof(j)); + memset(k, 0x42, sizeof(k)); + k[1].key_size = 12345; + k[2].key_version = 67; + + vb2_init_packed_key(k, (uint8_t*)(k + 1), + 2 * sizeof(struct vb2_packed_key)); + TEST_EQ(k->key_offset, sizeof(struct vb2_packed_key), + "vb2_init_packed_key key_offset"); + TEST_EQ(k->key_size, 2 * sizeof(struct vb2_packed_key), + "vb2_init_packed_key key_size"); + TEST_EQ(k->algorithm, VB2_ALG_COUNT, "vb2_init_packed_key algorithm"); + TEST_EQ(k->key_version, 0, "vb2_init_packed_key key_version"); + + /* Set algorithm and version, so we can tell if they get copied */ + k->algorithm = 3; + k->key_version = 21; + + /* Copying to a smaller destination should fail */ + vb2_init_packed_key(j, (uint8_t*)(j + 1), + 2 * sizeof(struct vb2_packed_key) - 1); + TEST_NEQ(0, vb2_copy_packed_key(j, k), "vb2_copy_packed_key too small"); + + /* Copying to same or larger size should succeed */ + vb2_init_packed_key(j, (uint8_t*)(j + 2), + 2 * sizeof(struct vb2_packed_key) + 1); + TEST_EQ(0, vb2_copy_packed_key(j, k), "vb2_copy_packed_key same"); + /* Offset in destination shouldn't have been modified */ + TEST_EQ(j->key_offset, 2 * sizeof(struct vb2_packed_key), + "vb2_copy_packed_key key_offset"); + /* Size should have been reduced to match the source */ + TEST_EQ(k->key_size, 2 * sizeof(struct vb2_packed_key), + "vb2_copy_packed_key key_size"); + /* Other fields should have been copied */ + TEST_EQ(k->algorithm, j->algorithm, "vb2_copy_packed_key algorithm"); + TEST_EQ(k->key_version, j->key_version, + "vb2_copy_packed_key key_version"); + /* Data should have been copied */ + TEST_EQ(0, + memcmp(vb2_packed_key_data(k), + vb2_packed_key_data(j), k->key_size), + "vb2_copy_packed_key data"); +} + +int main(int argc, char* argv[]) +{ + public_key_tests(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_host_nvdata_flashrom_tests.c b/tests/vb2_host_nvdata_flashrom_tests.c new file mode 100644 index 0000000..33b435d --- /dev/null +++ b/tests/vb2_host_nvdata_flashrom_tests.c @@ -0,0 +1,279 @@ +/* Copyright 2020 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for crossystem flashrom-based nvdata functions. + */ + +#include +#include +#include +#include +#include +#include + +#include "2api.h" +#include "2common.h" +#include "2constants.h" +#include "2nvstorage.h" +#include "2return_codes.h" +#include "crossystem_vbnv.h" +#include "flashrom.h" +#include "test_common.h" + +/* Mocked flashrom only supports host programmer, and RW_NVRAM + region. */ +static void assert_mock_params(const char *programmer, const char *region) +{ + TEST_STR_EQ(programmer, FLASHROM_PROGRAMMER_INTERNAL_AP, + "Using internal AP programmer"); + TEST_STR_EQ(region, "RW_NVRAM", "Using NVRAM region"); +} + +static bool mock_flashrom_fail; + +/* To support both 16-byte and 64-byte nvdata with the same fake + eeprom, we can size the flash chip to be 16x64. So, for 16-byte + nvdata, this is a flash chip with 64 entries, and for 64-byte + nvdata, this is a flash chip with 16 entries. */ +static uint8_t fake_flash_region[VB2_NVDATA_SIZE * VB2_NVDATA_SIZE_V2]; +static int fake_flash_entry_count; + +static const uint8_t test_nvdata_16b[] = { + 0x60, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x4e, + 0x00, 0xfe, 0xff, 0x00, 0x00, 0xff, 0xff, 0x5e, +}; + +static const uint8_t test_nvdata2_16b[] = { + 0x60, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x4c, + 0x00, 0xfe, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, +}; + +static void reset_test_data(struct vb2_context *ctx, int nvdata_size) +{ + /* Initialize the context value. */ + ctx->flags = 0; + + switch (nvdata_size) { + case VB2_NVDATA_SIZE: + fake_flash_entry_count = VB2_NVDATA_SIZE_V2; + memcpy(ctx->nvdata, test_nvdata_16b, sizeof(test_nvdata_16b)); + break; + case VB2_NVDATA_SIZE_V2: + ctx->flags |= VB2_CONTEXT_NVDATA_V2; + fake_flash_entry_count = VB2_NVDATA_SIZE; + /* TODO: create some test data for 64-byte nvdata and + put it here. Right now, this only tests 16-byte + nvdata. */ + break; + default: + /* This is not valid. */ + TEST_TRUE(false, "Test failed, invalid nvdata size"); + fake_flash_entry_count = 0; + break; + } + + /* Clear the fake flash chip. */ + memset(fake_flash_region, 0xff, sizeof(fake_flash_region)); + + /* Flashrom succeeds unless the test says otherwise. */ + mock_flashrom_fail = false; +} + +/* Mocked flashrom_read for tests. */ +vb2_error_t flashrom_read(const char *programmer, const char *region, + uint8_t **data_out, uint32_t *size_out) +{ + if (mock_flashrom_fail) { + *data_out = NULL; + *size_out = 0; + return VB2_ERROR_FLASHROM; + } + + assert_mock_params(programmer, region); + + *data_out = malloc(sizeof(fake_flash_region)); + *size_out = sizeof(fake_flash_region); + memcpy(*data_out, fake_flash_region, sizeof(fake_flash_region)); + return VB2_SUCCESS; +} + +/* Mocked flashrom_write for tests. */ +vb2_error_t flashrom_write(const char *programmer, const char *region, + uint8_t *data, uint32_t data_size) +{ + if (mock_flashrom_fail) + return VB2_ERROR_FLASHROM; + + assert_mock_params(programmer, region); + + TEST_EQ(data_size, sizeof(fake_flash_region), + "The flash size is correct"); + memcpy(fake_flash_region, data, data_size); + return VB2_SUCCESS; +} + +static void test_read_ok_beginning(void) +{ + struct vb2_context ctx; + + reset_test_data(&ctx, sizeof(test_nvdata_16b)); + memcpy(fake_flash_region, test_nvdata2_16b, sizeof(test_nvdata2_16b)); + + TEST_EQ(vb2_read_nv_storage_flashrom(&ctx), 0, + "Reading storage succeeds"); + TEST_EQ(memcmp(ctx.nvdata, test_nvdata2_16b, sizeof(test_nvdata2_16b)), + 0, "The nvdata in the vb2_context was updated from flash"); +} + +static void test_read_ok_2ndentry(void) +{ + struct vb2_context ctx; + + reset_test_data(&ctx, sizeof(test_nvdata_16b)); + memcpy(fake_flash_region, test_nvdata_16b, sizeof(test_nvdata_16b)); + memcpy(fake_flash_region + VB2_NVDATA_SIZE, test_nvdata2_16b, + sizeof(test_nvdata2_16b)); + + TEST_EQ(vb2_read_nv_storage_flashrom(&ctx), 0, + "Reading storage succeeds"); + TEST_EQ(memcmp(ctx.nvdata, test_nvdata2_16b, sizeof(test_nvdata2_16b)), + 0, "The nvdata in the vb2_context was updated from flash"); +} + +static void test_read_ok_full(void) +{ + struct vb2_context ctx; + + reset_test_data(&ctx, sizeof(test_nvdata_16b)); + + for (int entry = 0; entry < fake_flash_entry_count - 1; entry++) + memcpy(fake_flash_region + (entry * VB2_NVDATA_SIZE), + test_nvdata_16b, sizeof(test_nvdata_16b)); + + memcpy(fake_flash_region + + ((fake_flash_entry_count - 1) * VB2_NVDATA_SIZE), + test_nvdata2_16b, sizeof(test_nvdata2_16b)); + + TEST_EQ(vb2_read_nv_storage_flashrom(&ctx), 0, + "Reading storage succeeds"); + TEST_EQ(memcmp(ctx.nvdata, test_nvdata2_16b, sizeof(test_nvdata2_16b)), + 0, "The nvdata in the vb2_context was updated from flash"); +} + +static void test_read_fail_uninitialized(void) +{ + struct vb2_context ctx; + + reset_test_data(&ctx, sizeof(test_nvdata_16b)); + + TEST_NEQ(vb2_read_nv_storage_flashrom(&ctx), 0, + "Reading storage fails when flash is erased"); +} + +static void test_read_fail_flashrom(void) +{ + struct vb2_context ctx; + + reset_test_data(&ctx, sizeof(test_nvdata_16b)); + memcpy(fake_flash_region, test_nvdata_16b, sizeof(test_nvdata_16b)); + mock_flashrom_fail = true; + + TEST_NEQ(vb2_read_nv_storage_flashrom(&ctx), 0, + "Reading storage fails when flashrom fails"); +} + +static void test_write_ok_beginning(void) +{ + struct vb2_context ctx; + + reset_test_data(&ctx, sizeof(test_nvdata_16b)); + memcpy(fake_flash_region, test_nvdata_16b, sizeof(test_nvdata_16b)); + memcpy(ctx.nvdata, test_nvdata2_16b, sizeof(test_nvdata2_16b)); + + TEST_EQ(vb2_write_nv_storage_flashrom(&ctx), 0, + "Writing storage succeeds"); + TEST_EQ(memcmp(fake_flash_region + VB2_NVDATA_SIZE, test_nvdata2_16b, + sizeof(test_nvdata2_16b)), + 0, "The flash was updated with a new entry"); +} + +static void test_write_ok_2ndentry(void) +{ + struct vb2_context ctx; + + reset_test_data(&ctx, sizeof(test_nvdata_16b)); + memcpy(fake_flash_region, test_nvdata_16b, sizeof(test_nvdata_16b)); + memcpy(fake_flash_region + VB2_NVDATA_SIZE, test_nvdata_16b, + sizeof(test_nvdata_16b)); + memcpy(ctx.nvdata, test_nvdata2_16b, sizeof(test_nvdata2_16b)); + + TEST_EQ(vb2_write_nv_storage_flashrom(&ctx), 0, + "Writing storage succeeds"); + TEST_EQ(memcmp(fake_flash_region + (2 * VB2_NVDATA_SIZE), + test_nvdata2_16b, sizeof(test_nvdata2_16b)), + 0, "The flash was updated with a new entry"); +} + +static void test_write_ok_full(void) +{ + struct vb2_context ctx; + uint8_t expected_flash[sizeof(fake_flash_region)]; + + reset_test_data(&ctx, sizeof(test_nvdata_16b)); + + for (int entry = 0; entry < fake_flash_entry_count; entry++) + memcpy(fake_flash_region + (entry * VB2_NVDATA_SIZE), + test_nvdata_16b, sizeof(test_nvdata_16b)); + + memcpy(expected_flash, test_nvdata2_16b, sizeof(test_nvdata2_16b)); + memset(expected_flash + VB2_NVDATA_SIZE, 0xff, + sizeof(expected_flash) - VB2_NVDATA_SIZE); + memcpy(ctx.nvdata, test_nvdata2_16b, sizeof(test_nvdata2_16b)); + + TEST_EQ(vb2_write_nv_storage_flashrom(&ctx), 0, + "Writing storage succeeds"); + TEST_EQ(memcmp(fake_flash_region, expected_flash, + sizeof(expected_flash)), + 0, + "The flash was erased and the new entry was placed at " + "the beginning"); +} + +static void test_write_fail_uninitialized(void) +{ + struct vb2_context ctx; + + reset_test_data(&ctx, sizeof(test_nvdata_16b)); + + TEST_NEQ(vb2_write_nv_storage_flashrom(&ctx), 0, + "Writing storage fails when the flash is erased"); +} + +static void test_write_fail_flashrom(void) +{ + struct vb2_context ctx; + + reset_test_data(&ctx, sizeof(test_nvdata_16b)); + memcpy(fake_flash_region, test_nvdata_16b, sizeof(test_nvdata_16b)); + mock_flashrom_fail = true; + + TEST_NEQ(vb2_write_nv_storage_flashrom(&ctx), 0, + "Writing storage fails when flashrom fails"); +} + +int main(int argc, char *argv[]) +{ + test_read_ok_beginning(); + test_read_ok_2ndentry(); + test_read_ok_full(); + test_read_fail_uninitialized(); + test_read_fail_flashrom(); + test_write_ok_beginning(); + test_write_ok_2ndentry(); + test_write_ok_full(); + test_write_fail_uninitialized(); + test_write_fail_flashrom(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_kernel_tests.c b/tests/vb2_kernel_tests.c new file mode 100644 index 0000000..0b3e94c --- /dev/null +++ b/tests/vb2_kernel_tests.c @@ -0,0 +1,341 @@ +/* Copyright 2020 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for kernel selection, loading, verification, and booting. + */ + +#include "2api.h" +#include "2common.h" +#include "2kernel.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2rsa.h" +#include "2secdata.h" +#include "2sysincludes.h" +#include "test_common.h" +#include "vboot_struct.h" +#include "vboot_api.h" + +/* Common context for tests */ +static uint8_t workbuf[VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); +static struct vb2_context *ctx; +static struct vb2_shared_data *sd; +static struct vb2_fw_preamble *fwpre; +static const char fw_kernel_key_data[36] = "Test kernel key data"; +static enum vb2_boot_mode *boot_mode; + +/* Mocked function data */ + +static struct { + struct vb2_gbb_header h; + struct vb2_packed_key recovery_key; + char recovery_key_data[32]; +} mock_gbb; + +static int mock_read_res_fail_on_call; +static int mock_secdata_fwmp_check_retval; +static int mock_vbtlk_expect_fixed; +static int mock_vbtlk_expect_removable; +static vb2_error_t mock_vbtlk_retval; + +/* Type of test to reset for */ +enum reset_type { + FOR_PHASE1, + FOR_NORMAL_BOOT, +}; + +static void reset_common_data(enum reset_type t) +{ + struct vb2_packed_key *k; + + memset(workbuf, 0xaa, sizeof(workbuf)); + + TEST_SUCC(vb2api_init(workbuf, sizeof(workbuf), &ctx), + "vb2api_init failed"); + + sd = vb2_get_sd(ctx); + vb2_nv_init(ctx); + + vb2api_secdata_kernel_create(ctx); + vb2_secdata_kernel_init(ctx); + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_VERSIONS, 0x20002); + + mock_read_res_fail_on_call = 0; + mock_secdata_fwmp_check_retval = VB2_SUCCESS; + mock_vbtlk_expect_fixed = 0; + mock_vbtlk_expect_removable = 0; + mock_vbtlk_retval = VB2_SUCCESS; + + + /* Recovery key in mock GBB */ + memset(&mock_gbb, 0, sizeof(mock_gbb)); + mock_gbb.recovery_key.algorithm = 11; + mock_gbb.recovery_key.key_offset = + vb2_offset_of(&mock_gbb.recovery_key, + &mock_gbb.recovery_key_data); + mock_gbb.recovery_key.key_size = sizeof(mock_gbb.recovery_key_data); + strcpy(mock_gbb.recovery_key_data, "The recovery key"); + mock_gbb.h.recovery_key_offset = + vb2_offset_of(&mock_gbb, &mock_gbb.recovery_key); + mock_gbb.h.recovery_key_size = + mock_gbb.recovery_key.key_offset + + mock_gbb.recovery_key.key_size; + + /* For boot_mode */ + boot_mode = (enum vb2_boot_mode *)&ctx->boot_mode; + if (t == FOR_PHASE1) + *boot_mode = VB2_BOOT_MODE_BROKEN_SCREEN; + else if (t == FOR_NORMAL_BOOT) + *boot_mode = VB2_BOOT_MODE_NORMAL; + else + *boot_mode = VB2_BOOT_MODE_UNDEFINED; + + if (t == FOR_PHASE1) { + uint8_t *kdata; + + /* Create mock firmware preamble in the context */ + sd->preamble_offset = sd->workbuf_used; + fwpre = (struct vb2_fw_preamble *) + vb2_member_of(sd, sd->preamble_offset); + k = &fwpre->kernel_subkey; + kdata = (uint8_t *)fwpre + sizeof(*fwpre); + memcpy(kdata, fw_kernel_key_data, sizeof(fw_kernel_key_data)); + k->algorithm = 7; + k->key_offset = vb2_offset_of(k, kdata); + k->key_size = sizeof(fw_kernel_key_data); + sd->preamble_size = sizeof(*fwpre) + k->key_size; + vb2_set_workbuf_used(ctx, + sd->preamble_offset + sd->preamble_size); + } +}; + +/* Mocked functions */ + +vb2_error_t vb2api_secdata_fwmp_check(struct vb2_context *c, uint8_t *size) +{ + return mock_secdata_fwmp_check_retval; +} + +struct vb2_gbb_header *vb2_get_gbb(struct vb2_context *c) +{ + return &mock_gbb.h; +} + +vb2_error_t vb2ex_read_resource(struct vb2_context *c, + enum vb2_resource_index index, uint32_t offset, + void *buf, uint32_t size) +{ + uint8_t *rptr; + uint32_t rsize; + + if (--mock_read_res_fail_on_call == 0) + return VB2_ERROR_MOCK; + + switch(index) { + case VB2_RES_GBB: + rptr = (uint8_t *)&mock_gbb; + rsize = sizeof(mock_gbb); + break; + default: + return VB2_ERROR_EX_READ_RESOURCE_INDEX; + } + + if (offset > rsize || offset + size > rsize) + return VB2_ERROR_EX_READ_RESOURCE_SIZE; + + memcpy(buf, rptr + offset, size); + return VB2_SUCCESS; +} + +vb2_error_t VbTryLoadKernel(struct vb2_context *c, uint32_t disk_flags) +{ + /* + * TODO: Currently we don't have a good way of testing for an ordered + * sequence of VB_DISK_FLAG_FIXED and then VB_DISK_FLAG_REMOVABLE. If + * both are set, then just assume success. + */ + if (mock_vbtlk_expect_fixed && mock_vbtlk_expect_removable) + return mock_vbtlk_retval; + + TEST_EQ(!!mock_vbtlk_expect_fixed, + !!(disk_flags & VB_DISK_FLAG_FIXED), + " VbTryLoadKernel unexpected fixed disk call"); + TEST_EQ(!!mock_vbtlk_expect_removable, + !!(disk_flags & VB_DISK_FLAG_REMOVABLE), + " VbTryLoadKernel unexpected removable disk call"); + + return mock_vbtlk_retval; +} + +/* Tests */ + +static void phase1_tests(void) +{ + struct vb2_packed_key *k; + uint32_t wb_used_before; + + /* Test successful call */ + reset_common_data(FOR_PHASE1); + TEST_SUCC(vb2api_kernel_phase1(ctx), "phase1 good"); + /* Make sure normal key was loaded */ + TEST_EQ(sd->kernel_key_offset, sd->preamble_offset + + offsetof(struct vb2_fw_preamble, kernel_subkey), + " workbuf key offset"); + k = vb2_member_of(sd, sd->kernel_key_offset); + TEST_EQ(sd->kernel_key_size, k->key_offset + k->key_size, + " workbuf key size"); + TEST_EQ(sd->workbuf_used, + vb2_wb_round_up(sd->kernel_key_offset + + sd->kernel_key_size), + " workbuf used"); + TEST_EQ(k->algorithm, 7, " key algorithm"); + TEST_EQ(k->key_size, sizeof(fw_kernel_key_data), " key_size"); + TEST_EQ(memcmp((uint8_t *)k + k->key_offset, fw_kernel_key_data, + k->key_size), 0, " key data"); + TEST_EQ(sd->kernel_version_secdata, 0x20002, + " secdata_kernel version"); + + /* Test successful call in recovery mode */ + reset_common_data(FOR_PHASE1); + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + /* No preamble needed in recovery mode */ + sd->workbuf_used = sd->preamble_offset; + sd->preamble_offset = sd->preamble_size = 0; + wb_used_before = sd->workbuf_used; + TEST_SUCC(vb2api_kernel_phase1(ctx), "phase1 rec good"); + /* Make sure recovery key was loaded */ + TEST_EQ(sd->kernel_key_offset, wb_used_before, + " workbuf key offset"); + k = vb2_member_of(sd, sd->kernel_key_offset); + TEST_EQ(sd->kernel_key_size, k->key_offset + k->key_size, + " workbuf key size"); + TEST_EQ(sd->workbuf_used, + vb2_wb_round_up(sd->kernel_key_offset + + sd->kernel_key_size), + " workbuf used"); + TEST_EQ(k->algorithm, 11, " key algorithm"); + TEST_EQ(k->key_size, sizeof(mock_gbb.recovery_key_data), " key_size"); + TEST_EQ(memcmp((uint8_t *)k + k->key_offset, + mock_gbb.recovery_key_data, k->key_size), 0, + " key data"); + TEST_EQ(sd->kernel_version_secdata, 0x20002, + " secdata_kernel version"); + + /* Test flags for experimental features in non-recovery path */ + reset_common_data(FOR_PHASE1); + ctx->flags &= ~VB2_CONTEXT_RECOVERY_MODE; + TEST_SUCC(vb2api_kernel_phase1(ctx), "phase1 non-rec good"); + /* Make sure phone recovery functionality is enabled, but UI disabled */ + TEST_EQ(vb2api_phone_recovery_enabled(ctx), 1, + " phone recovery enabled"); + TEST_EQ(vb2api_phone_recovery_ui_enabled(ctx), 0, + " phone recovery ui disabled"); + /* Make sure diagnostic UI is enabled */ + TEST_EQ(vb2api_diagnostic_ui_enabled(ctx), 1, + " diagnostic ui enabled"); + + /* + * Test flags are unchanged for experimental features in recovery path + */ + + /* Set 8 bits to 0 */ + reset_common_data(FOR_PHASE1); + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_FLAGS, 0); + TEST_SUCC(vb2api_kernel_phase1(ctx), "phase1 rec good"); + TEST_EQ(vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_FLAGS), 0, + "VB2_SECDATA_KERNEL_FLAGS remains unchanged in recovery path"); + + /* Set 8 bits to 1 */ + reset_common_data(FOR_PHASE1); + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_FLAGS, UINT8_MAX); + TEST_SUCC(vb2api_kernel_phase1(ctx), "phase1 rec good"); + TEST_EQ(vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_FLAGS), + UINT8_MAX, + "VB2_SECDATA_KERNEL_FLAGS remains unchanged in recovery path"); + + /* Bad secdata_fwmp causes failure in normal mode only */ + reset_common_data(FOR_PHASE1); + mock_secdata_fwmp_check_retval = VB2_ERROR_SECDATA_FWMP_CRC; + TEST_EQ(vb2api_kernel_phase1(ctx), mock_secdata_fwmp_check_retval, + "phase1 bad secdata_fwmp"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_SECDATA_FWMP_INIT, " recovery reason"); + + reset_common_data(FOR_PHASE1); + mock_secdata_fwmp_check_retval = VB2_ERROR_SECDATA_FWMP_CRC; + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + TEST_SUCC(vb2api_kernel_phase1(ctx), "phase1 bad secdata_fwmp rec"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_NOT_REQUESTED, " no recovery"); + + /* Failures while reading recovery key */ + reset_common_data(FOR_PHASE1); + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + mock_gbb.h.recovery_key_size = sd->workbuf_size - 1; + mock_gbb.recovery_key.key_size = + mock_gbb.h.recovery_key_size - sizeof(mock_gbb.recovery_key); + TEST_EQ(vb2api_kernel_phase1(ctx), VB2_SUCCESS, + "phase1 rec workbuf key"); + TEST_EQ(sd->kernel_key_offset, 0, " workbuf key offset"); + TEST_EQ(sd->kernel_key_size, 0, " workbuf key size"); + mock_gbb.h.flags |= VB2_GBB_FLAG_FORCE_MANUAL_RECOVERY; + *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + TEST_ABORT(vb2api_kernel_phase1(ctx), " fatal for manual recovery"); + + reset_common_data(FOR_PHASE1); + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + mock_read_res_fail_on_call = 1; + TEST_EQ(vb2api_kernel_phase1(ctx), VB2_SUCCESS, + "phase1 rec gbb read key"); + TEST_EQ(sd->kernel_key_offset, 0, " workbuf key offset"); + TEST_EQ(sd->kernel_key_size, 0, " workbuf key size"); + mock_gbb.h.flags |= VB2_GBB_FLAG_FORCE_MANUAL_RECOVERY; + *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + mock_read_res_fail_on_call = 1; + TEST_ABORT(vb2api_kernel_phase1(ctx), " fatal for manual recovery"); + + /* Failures while parsing subkey from firmware preamble */ + reset_common_data(FOR_PHASE1); + sd->preamble_size = 0; + TEST_EQ(vb2api_kernel_phase1(ctx), VB2_ERROR_API_KPHASE1_PREAMBLE, + "phase1 fw preamble"); +} + +static void normal_boot_tests(void) +{ + reset_common_data(FOR_NORMAL_BOOT); + mock_vbtlk_expect_fixed = 1; + TEST_EQ(vb2_normal_boot(ctx), VB2_SUCCESS, + "vb2_normal_boot() returns VB2_SUCCESS"); + + reset_common_data(FOR_NORMAL_BOOT); + mock_vbtlk_expect_fixed = 1; + mock_vbtlk_retval = VB2_ERROR_MOCK; + TEST_EQ(vb2_normal_boot(ctx), VB2_ERROR_MOCK, + "vb2_normal_boot() returns VB2_ERROR_MOCK"); + + reset_common_data(FOR_NORMAL_BOOT); + vb2_nv_set(ctx, VB2_NV_DISPLAY_REQUEST, 1); + TEST_EQ(vb2_normal_boot(ctx), VB2_REQUEST_REBOOT, + "vb2_normal_boot() reboot to reset NVRAM display request"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_DISPLAY_REQUEST), 0, + " display request reset"); + + reset_common_data(FOR_NORMAL_BOOT); + vb2_nv_set(ctx, VB2_NV_DIAG_REQUEST, 1); + TEST_EQ(vb2_normal_boot(ctx), VB2_REQUEST_REBOOT, + "vb2_normal_boot() reboot to reset NVRAM diag request"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_DIAG_REQUEST), 0, + " diag request reset");} + +int main(int argc, char* argv[]) +{ + phase1_tests(); + normal_boot_tests(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_keyblock_fuzzer.c b/tests/vb2_keyblock_fuzzer.c new file mode 100644 index 0000000..2aa83e1 --- /dev/null +++ b/tests/vb2_keyblock_fuzzer.c @@ -0,0 +1,102 @@ +// Copyright 2019 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "2api.h" +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2rsa.h" +#include "2rsa_private.h" +#include "2secdata.h" +#include "vboot_test.h" + +static struct vb2_context *ctx; +static uint8_t workbuf[VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); +static struct { + struct vb2_gbb_header h; + uint8_t rootkey[4096]; +} gbb; + +static const uint8_t *mock_keyblock; +static size_t mock_keyblock_size; + +/* Limit exposure of code for which we didn't set up the environment right. */ +void vb2api_fail(struct vb2_context *c, uint8_t reason, uint8_t subcode) +{ + return; +} + +struct vb2_gbb_header *vb2_get_gbb(struct vb2_context *c) +{ + return &gbb.h; +} + +vb2_error_t vb2ex_read_resource(struct vb2_context *c, + enum vb2_resource_index index, uint32_t offset, + void *buf, uint32_t size) +{ + const void *rbase; + size_t rsize; + + switch (index) { + case VB2_RES_GBB: + rbase = &gbb; + rsize = sizeof(gbb); + break; + case VB2_RES_FW_VBLOCK: + rbase = mock_keyblock; + rsize = mock_keyblock_size; + break; + default: + return VB2_ERROR_EX_READ_RESOURCE_INDEX; + } + + if (offset > rsize || rsize - offset < size) + return VB2_ERROR_EX_READ_RESOURCE_SIZE; + + memcpy(buf, rbase + offset, size); + return VB2_SUCCESS; +} + +/* Pretend that signature checks always succeed so the fuzzer can cover more. */ +vb2_error_t vb2_check_padding(const uint8_t *sig, + const struct vb2_public_key *key) +{ + return VB2_SUCCESS; +} + +vb2_error_t vb2_safe_memcmp(const void *s1, const void *s2, size_t size) +{ + return VB2_SUCCESS; +} + +int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size); +int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + /* Initialize fuzzing inputs. */ + if (size < sizeof(gbb.rootkey)) + return 0; + + memset(&gbb.h, 0, sizeof(gbb.h)); + gbb.h.rootkey_offset = gbb.rootkey - (uint8_t *)&gbb; + gbb.h.rootkey_size = sizeof(gbb.rootkey); + + memcpy(gbb.rootkey, data, sizeof(gbb.rootkey)); + mock_keyblock = data + sizeof(gbb.rootkey); + mock_keyblock_size = size - sizeof(gbb.rootkey); + + /* Set up data structures needed by the tested function. */ + if (vb2api_init(workbuf, sizeof(workbuf), &ctx)) + abort(); + vb2_nv_init(ctx); + vb2api_secdata_firmware_create(ctx); + vb2api_secdata_kernel_create(ctx); + if (vb2_secdata_firmware_init(ctx) || vb2_secdata_kernel_init(ctx)) + abort(); + + /* Run function to test. */ + vb2_load_fw_keyblock(ctx); + + return 0; +} diff --git a/tests/vb2_misc_tests.c b/tests/vb2_misc_tests.c new file mode 100644 index 0000000..99f8bae --- /dev/null +++ b/tests/vb2_misc_tests.c @@ -0,0 +1,1108 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for misc library + */ + +#include "2api.h" +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2secdata.h" +#include "2sysincludes.h" +#include "test_common.h" + +/* Common context for tests */ +static uint8_t workbuf[VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); +static uint8_t workbuf2[VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); +static struct vb2_context *ctx; +static struct vb2_shared_data *sd; +static struct vb2_gbb_header gbb; +static struct vb2_secdata_fwmp *fwmp; +static enum vb2_boot_mode *boot_mode; + +/* Mocked function data */ +static enum vb2_resource_index mock_resource_index; +static void *mock_resource_ptr; +static uint32_t mock_resource_size; +static int mock_tpm_clear_called; +static int mock_tpm_clear_retval; + +static void reset_common_data(void) +{ + memset(workbuf, 0xaa, sizeof(workbuf)); + memset(workbuf2, 0xbb, sizeof(workbuf2)); + + TEST_SUCC(vb2api_init(workbuf, sizeof(workbuf), &ctx), + "vb2api_init failed"); + + sd = vb2_get_sd(ctx); + sd->status |= VB2_SD_STATUS_SECDATA_FWMP_INIT; + + memset(&gbb, 0, sizeof(gbb)); + + vb2_nv_init(ctx); + + vb2api_secdata_firmware_create(ctx); + vb2_secdata_firmware_init(ctx); + + fwmp = (struct vb2_secdata_fwmp *)&ctx->secdata_fwmp; + + mock_tpm_clear_called = 0; + mock_tpm_clear_retval = VB2_SUCCESS; + + boot_mode = (enum vb2_boot_mode *)&ctx->boot_mode; + *boot_mode = VB2_BOOT_MODE_NORMAL; +}; + +/* Mocked functions */ + +struct vb2_gbb_header *vb2_get_gbb(struct vb2_context *c) +{ + return &gbb; +} + +vb2_error_t vb2ex_read_resource(struct vb2_context *c, + enum vb2_resource_index index, uint32_t offset, + void *buf, uint32_t size) +{ + if (index != mock_resource_index) + return VB2_ERROR_EX_READ_RESOURCE_INDEX; + + if (offset > mock_resource_size || offset + size > mock_resource_size) + return VB2_ERROR_EX_READ_RESOURCE_SIZE; + + memcpy(buf, (uint8_t *)mock_resource_ptr + offset, size); + return VB2_SUCCESS; +} + +vb2_error_t vb2ex_tpm_clear_owner(struct vb2_context *c) +{ + mock_tpm_clear_called++; + + return mock_tpm_clear_retval; +} + +/* Tests */ +static void init_workbuf_tests(void) +{ + struct vb2_context *orig_ctx; + + /* check constants */ + TEST_TRUE(sizeof(struct vb2_context) < VB2_CONTEXT_MAX_SIZE, + "vb2_context max size constant"); + + /* vb2api_init() - misaligned */ + TEST_EQ(vb2api_init(workbuf + 1, sizeof(workbuf) - 1, &ctx), + VB2_ERROR_WORKBUF_ALIGN, "vb2api_init - misaligned"); + + /* vb2api_init() - size too small */ + TEST_EQ(vb2api_init(workbuf, sizeof(struct vb2_shared_data) - 1, + &ctx), VB2_ERROR_WORKBUF_SMALL, + "vb2api_init - size too small"); + + /* vb2api_init() - success */ + TEST_SUCC(vb2api_init(workbuf, sizeof(workbuf), &ctx), + "vb2api_init - success"); + TEST_TRUE((uintptr_t)workbuf < (uintptr_t)ctx && + (uintptr_t)ctx < (uintptr_t)workbuf + sizeof(workbuf), + " return proper pointer"); + struct vb2_context zero_ctx = {0}; + TEST_SUCC(memcmp(ctx, &zero_ctx, sizeof(struct vb2_context)), + " vb2_context set to zero"); + sd = vb2_get_sd(ctx); + TEST_EQ(sd->magic, VB2_SHARED_DATA_MAGIC, " set magic"); + TEST_EQ(sd->struct_version_major, VB2_SHARED_DATA_VERSION_MAJOR, + " set major version"); + TEST_EQ(sd->struct_version_minor, VB2_SHARED_DATA_VERSION_MINOR, + " set minor version"); + TEST_EQ(sd->workbuf_size, sizeof(workbuf), " set workbuf size"); + TEST_TRUE(sd->workbuf_used - sizeof(struct vb2_shared_data) + < VB2_WORKBUF_ALIGN, " set workbuf used"); + + /* vb2api_relocate() - misaligned source */ + reset_common_data(); + memmove(workbuf + 1, workbuf, sizeof(workbuf) - 1); + TEST_SUCC(vb2api_relocate(workbuf2, workbuf + 1, sizeof(workbuf) - 1, + &ctx), "vb2api_relocate - misaligned source"); + + /* vb2api_relocate() - misaligned target */ + reset_common_data(); + TEST_EQ(vb2api_relocate(workbuf2 + 1, workbuf, sizeof(workbuf) - 1, + &ctx), + VB2_ERROR_WORKBUF_ALIGN, "vb2api_relocate - misaligned target"); + + /* vb2api_relocate() - bad magic */ + reset_common_data(); + sd->magic = 0; + TEST_EQ(vb2api_relocate(workbuf2, workbuf, sizeof(workbuf), &ctx), + VB2_ERROR_SHARED_DATA_MAGIC, "vb2api_relocate - bad magic"); + + /* vb2api_relocate() - small major version */ + reset_common_data(); + sd->struct_version_major--; + TEST_EQ(vb2api_relocate(workbuf2, workbuf, sizeof(workbuf), &ctx), + VB2_ERROR_SHARED_DATA_VERSION, + "vb2api_relocate - small major version"); + + /* vb2api_relocate() - big major version */ + reset_common_data(); + sd->struct_version_major++; + TEST_EQ(vb2api_relocate(workbuf2, workbuf, sizeof(workbuf), &ctx), + VB2_ERROR_SHARED_DATA_VERSION, + "vb2api_relocate - big major version"); + + /* vb2api_relocate() - small minor version */ + if (VB2_SHARED_DATA_VERSION_MINOR > 0) { + reset_common_data(); + sd->struct_version_minor--; + TEST_EQ(vb2api_relocate(workbuf2, workbuf, sizeof(workbuf), + &ctx), + VB2_ERROR_SHARED_DATA_VERSION, + "vb2api_relocate - small minor version"); + } + + /* vb2api_relocate() - big minor version */ + reset_common_data(); + sd->struct_version_minor++; + TEST_SUCC(vb2api_relocate(workbuf2, workbuf, sizeof(workbuf), &ctx), + "vb2api_relocate - big minor version"); + + /* vb2api_relocate() - small workbuf_used */ + reset_common_data(); + sd->workbuf_used = sizeof(struct vb2_shared_data) - 1; + TEST_EQ(vb2api_relocate(workbuf2, workbuf, sizeof(workbuf), &ctx), + VB2_ERROR_WORKBUF_INVALID, + "vb2api_relocate - small workbuf_used"); + + /* vb2api_relocate() - workbuf_size < workbuf_used */ + reset_common_data(); + sd->workbuf_used = sd->workbuf_size; + sd->workbuf_size--; + TEST_EQ(vb2api_relocate(workbuf2, workbuf, sizeof(workbuf), &ctx), + VB2_ERROR_WORKBUF_INVALID, + "vb2api_relocate - workbuf_size < workbuf_used"); + + /* vb2api_relocate() - target workbuf too small */ + reset_common_data(); + sd->workbuf_used = sd->workbuf_size - 1; + TEST_EQ(vb2api_relocate(workbuf2, workbuf, sd->workbuf_used - 1, &ctx), + VB2_ERROR_WORKBUF_SMALL, + "vb2api_relocate - target workbuf too small"); + + /* vb2api_relocate() - success (same size) */ + reset_common_data(); + orig_ctx = ctx; + TEST_SUCC(vb2api_relocate(workbuf2, workbuf, sizeof(workbuf), &ctx), + "vb2api_relocate - success (same size)"); + sd = vb2_get_sd(ctx); + TEST_EQ((uintptr_t)orig_ctx - (uintptr_t)workbuf, + (uintptr_t)ctx - (uintptr_t)workbuf2, + " same context pointer"); + TEST_SUCC(memcmp(workbuf2, workbuf, sd->workbuf_used), + " same workbuf"); + + /* vb2api_relocate() - success (smaller size) */ + reset_common_data(); + TEST_SUCC(vb2api_relocate(workbuf2, workbuf, sizeof(workbuf) - 1, &ctx), + "vb2api_relocate - success (smaller size)"); + sd = vb2_get_sd(ctx); + TEST_EQ(sd->workbuf_size, sizeof(workbuf) - 1, " set workbuf size"); + + /* vb2api_relocate() - success (larger size) */ + reset_common_data(); + sd->workbuf_size--; + TEST_SUCC(vb2api_relocate(workbuf2, workbuf, sizeof(workbuf), &ctx), + "vb2api_relocate - success (larger size)"); + sd = vb2_get_sd(ctx); + TEST_EQ(sd->workbuf_size, sizeof(workbuf), " set workbuf size"); + + /* vb2api_relocate() - success (overlapping) */ + reset_common_data(); + orig_ctx = ctx; + sd->workbuf_size -= VB2_WORKBUF_ALIGN; + memcpy(workbuf2, workbuf, sd->workbuf_used); + TEST_SUCC(vb2api_relocate(workbuf + VB2_WORKBUF_ALIGN, workbuf, + sizeof(workbuf) - VB2_WORKBUF_ALIGN, &ctx), + "vb2api_relocate - success (overlapping)"); + sd = vb2_get_sd(ctx); + TEST_EQ((uintptr_t)ctx - (uintptr_t)orig_ctx, + VB2_WORKBUF_ALIGN, + " context pointer moved"); + TEST_SUCC(memcmp(workbuf2, workbuf + VB2_WORKBUF_ALIGN, + sd->workbuf_used), " same workbuf"); + + /* vb2api_reinit() - workbuf_size < workbuf_used */ + reset_common_data(); + sd->workbuf_size = sd->workbuf_used - 1; + TEST_EQ(vb2api_reinit(workbuf, &ctx), VB2_ERROR_WORKBUF_INVALID, + "vb2api_reinit - workbuf_size < workbuf_used"); + + /* vb2api_reinit() - success */ + reset_common_data(); + orig_ctx = ctx; + TEST_SUCC(vb2api_reinit(workbuf, &ctx), + "vb2api_reinit - success"); + TEST_EQ((uintptr_t)ctx, (uintptr_t)orig_ctx, + " context pointer unchanged"); +} + +static void misc_tests(void) +{ + struct vb2_workbuf wb; + + reset_common_data(); + sd->workbuf_used = VB2_WORKBUF_ALIGN; + + vb2_workbuf_from_ctx(ctx, &wb); + + TEST_PTR_EQ(wb.buf, workbuf + VB2_WORKBUF_ALIGN, + "vb_workbuf_from_ctx() buf"); + TEST_EQ(wb.size, sd->workbuf_size - VB2_WORKBUF_ALIGN, + "vb_workbuf_from_ctx() size"); + + reset_common_data(); + sd->status |= VB2_SD_STATUS_RECOVERY_DECIDED; + TEST_ABORT(VB2_REC_OR_DIE(ctx, "die\n"), "REC_OR_DIE in normal mode"); + + reset_common_data(); + sd->status |= VB2_SD_STATUS_RECOVERY_DECIDED; + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + VB2_REC_OR_DIE(ctx, "VB2_REC_OR_DIE() test in recovery mode\n"); + /* Would exit here if it didn't work as intended. */ + + reset_common_data(); + VB2_REC_OR_DIE(ctx, "VB2_REC_OR_DIE() test in fw_phase1\n"); +} + +static void gbb_tests(void) +{ + struct vb2_gbb_header gbbsrc = { + .signature = {'$', 'G', 'B', 'B'}, + .major_version = VB2_GBB_MAJOR_VER, + .minor_version = VB2_GBB_MINOR_VER, + .header_size = sizeof(struct vb2_gbb_header), + .flags = 0x1234, + .rootkey_offset = 240, + .rootkey_size = 1040, + }; + + struct vb2_gbb_header gbbdest; + + TEST_EQ(sizeof(struct vb2_gbb_header), + EXPECTED_VB2_GBB_HEADER_SIZE, + "sizeof(struct vb2_gbb_header)"); + + reset_common_data(); + + /* Good contents */ + mock_resource_index = VB2_RES_GBB; + mock_resource_ptr = &gbbsrc; + mock_resource_size = sizeof(gbbsrc); + TEST_SUCC(vb2_read_gbb_header(ctx, &gbbdest), "read gbb header good"); + TEST_SUCC(memcmp(&gbbsrc, &gbbdest, sizeof(gbbsrc)), + "read gbb contents"); + + mock_resource_index = VB2_RES_GBB + 1; + TEST_EQ(vb2_read_gbb_header(ctx, &gbbdest), + VB2_ERROR_EX_READ_RESOURCE_INDEX, "read gbb header missing"); + mock_resource_index = VB2_RES_GBB; + + gbbsrc.signature[0]++; + TEST_EQ(vb2_read_gbb_header(ctx, &gbbdest), + VB2_ERROR_GBB_MAGIC, "read gbb header bad magic"); + gbbsrc.signature[0]--; + + gbbsrc.major_version = VB2_GBB_MAJOR_VER + 1; + TEST_EQ(vb2_read_gbb_header(ctx, &gbbdest), + VB2_ERROR_GBB_VERSION, "read gbb header major version"); + gbbsrc.major_version = VB2_GBB_MAJOR_VER; + + gbbsrc.minor_version = VB2_GBB_MINOR_VER + 1; + TEST_SUCC(vb2_read_gbb_header(ctx, &gbbdest), + "read gbb header minor++"); + gbbsrc.minor_version = 1; + TEST_EQ(vb2_read_gbb_header(ctx, &gbbdest), + VB2_ERROR_GBB_TOO_OLD, "read gbb header 1.1 fails"); + gbbsrc.minor_version = 0; + TEST_EQ(vb2_read_gbb_header(ctx, &gbbdest), + VB2_ERROR_GBB_TOO_OLD, "read gbb header 1.0 fails"); + gbbsrc.minor_version = VB2_GBB_MINOR_VER; + + gbbsrc.header_size--; + TEST_EQ(vb2_read_gbb_header(ctx, &gbbdest), + VB2_ERROR_GBB_HEADER_SIZE, "read gbb header size"); + TEST_EQ(vb2_fw_init_gbb(ctx), + VB2_ERROR_GBB_HEADER_SIZE, "init gbb failure"); + gbbsrc.header_size++; + + /* Init GBB */ + int used_before = sd->workbuf_used; + TEST_SUCC(vb2_fw_init_gbb(ctx), "init gbb"); + /* Manually calculate the location of GBB since we have mocked out the + original definition of vb2_get_gbb. */ + struct vb2_gbb_header *current_gbb = vb2_member_of(sd, sd->gbb_offset); + TEST_SUCC(memcmp(&gbbsrc, current_gbb, sizeof(gbbsrc)), + " copy gbb contents"); + TEST_TRUE(sd->workbuf_used - sizeof(gbbsrc) - used_before + < VB2_WORKBUF_ALIGN, " unexpected workbuf size"); + + /* Workbuf failure */ + reset_common_data(); + sd->workbuf_used = sd->workbuf_size - 4; + TEST_EQ(vb2_fw_init_gbb(ctx), + VB2_ERROR_GBB_WORKBUF, "init gbb no workbuf"); + + /* Check for setting NO_SECDATA_FWMP context flag */ + reset_common_data(); + TEST_SUCC(vb2_fw_init_gbb(ctx), "init gbb"); + TEST_EQ(ctx->flags & VB2_CONTEXT_NO_SECDATA_FWMP, 0, + "without DISABLE_FWMP: NO_SECDATA_FWMP shouldn't be set"); + reset_common_data(); + gbbsrc.flags |= VB2_GBB_FLAG_DISABLE_FWMP; + TEST_SUCC(vb2_fw_init_gbb(ctx), "init gbb"); + TEST_NEQ(ctx->flags & VB2_CONTEXT_NO_SECDATA_FWMP, 0, + "with DISABLE_FWMP: NO_SECDATA_FWMP should be set"); +} + +static void fail_tests(void) +{ + /* Early fail (before even NV init) */ + reset_common_data(); + sd->status &= ~VB2_SD_STATUS_NV_INIT; + vb2api_fail(ctx, 1, 2); + TEST_NEQ(sd->status & VB2_SD_STATUS_NV_INIT, 0, "vb2api_fail inits NV"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + 1, "vb2api_fail request"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_SUBCODE), + 2, "vb2api_fail subcode"); + + /* Repeated fail doesn't overwrite the error code */ + vb2api_fail(ctx, 3, 4); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + 1, "vb2api_fail repeat"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_SUBCODE), + 2, "vb2api_fail repeat2"); + + /* Fail with other slot good doesn't trigger recovery */ + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_TRY_COUNT, 3); + vb2_nv_set(ctx, VB2_NV_FW_RESULT, VB2_FW_RESULT_UNKNOWN); + sd->status |= VB2_SD_STATUS_CHOSE_SLOT; + sd->fw_slot = 0; + sd->last_fw_slot = 1; + sd->last_fw_result = VB2_FW_RESULT_UNKNOWN; + vb2api_fail(ctx, 5, 6); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), 0, "vb2_failover"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FW_RESULT), + VB2_FW_RESULT_FAILURE, "vb2api_fail this fw"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_TRY_COUNT), 0, + "vb2api_fail use up tries"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_TRY_NEXT), 1, + "vb2api_fail try other slot"); + + /* Fail with other slot already failing triggers recovery */ + reset_common_data(); + sd->status |= VB2_SD_STATUS_CHOSE_SLOT; + sd->fw_slot = 1; + sd->last_fw_slot = 0; + sd->last_fw_result = VB2_FW_RESULT_FAILURE; + vb2api_fail(ctx, 7, 8); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), 7, + "vb2api_fail both slots bad"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FW_RESULT), + VB2_FW_RESULT_FAILURE, "vb2api_fail this fw"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_TRY_NEXT), 0, + "vb2api_fail try other slot"); +} + +static void recovery_tests(void) +{ + /* No recovery */ + reset_common_data(); + TEST_EQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, "recovery not yet decided before testing check_recovery()"); + vb2_check_recovery(ctx); + TEST_EQ(sd->recovery_reason, 0, "No recovery reason"); + TEST_EQ(ctx->flags & VB2_CONTEXT_RECOVERY_MODE, + 0, "Not recovery mode"); + TEST_NEQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, "Recovery decided"); + + /* From request */ + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_RECOVERY_REQUEST, 3); + vb2_check_recovery(ctx); + TEST_EQ(sd->recovery_reason, 3, "Recovery reason from request"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), 3, "NV not cleared"); + TEST_NEQ(ctx->flags & VB2_CONTEXT_RECOVERY_MODE, + 0, "Recovery mode"); + TEST_NEQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, "Recovery decided"); + + /* From request, but already failed */ + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_RECOVERY_REQUEST, 4); + sd->recovery_reason = 5; + vb2_check_recovery(ctx); + TEST_EQ(sd->recovery_reason, 5, "Recovery reason already failed"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + 4, "NV not cleared"); + TEST_NEQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, "Recovery decided"); + + /* Override */ + reset_common_data(); + sd->recovery_reason = 6; + ctx->flags |= VB2_CONTEXT_FORCE_RECOVERY_MODE; + vb2_check_recovery(ctx); + TEST_EQ(sd->recovery_reason, VB2_RECOVERY_RO_MANUAL, + "Recovery reason forced"); + TEST_NEQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, "Recovery decided"); + + /* Override subcode TRAIN_AND_REBOOT */ + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_RECOVERY_SUBCODE, VB2_RECOVERY_TRAIN_AND_REBOOT); + ctx->flags |= VB2_CONTEXT_FORCE_RECOVERY_MODE; + vb2_check_recovery(ctx); + TEST_EQ(sd->recovery_reason, VB2_RECOVERY_RO_MANUAL, + "Recovery reason forced"); + TEST_NEQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, "Recovery decided"); + + /* Promote subcode from BROKEN screen*/ + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_RECOVERY_SUBCODE, VB2_RECOVERY_US_TEST); + ctx->flags |= VB2_CONTEXT_FORCE_RECOVERY_MODE; + vb2_check_recovery(ctx); + TEST_EQ(sd->recovery_reason, VB2_RECOVERY_US_TEST, + "Recovery reason forced from BROKEN"); + TEST_NEQ(sd->status & VB2_SD_STATUS_RECOVERY_DECIDED, + 0, "Recovery decided"); +} + +static void dev_switch_tests(void) +{ + uint32_t v; + + /* Normal mode */ + reset_common_data(); + TEST_SUCC(vb2_check_dev_switch(ctx), "dev mode off"); + TEST_EQ(sd->flags & VB2_SD_FLAG_DEV_MODE_ENABLED, 0, " sd not in dev"); + TEST_EQ(ctx->flags & VB2_CONTEXT_DEVELOPER_MODE, 0, " ctx not in dev"); + TEST_EQ(mock_tpm_clear_called, 0, " no tpm clear"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_REQ_WIPEOUT), 0, " no nv wipeout"); + + /* Dev mode */ + reset_common_data(); + vb2_secdata_firmware_set( + ctx, VB2_SECDATA_FIRMWARE_FLAGS, + (VB2_SECDATA_FIRMWARE_FLAG_DEV_MODE | + VB2_SECDATA_FIRMWARE_FLAG_LAST_BOOT_DEVELOPER)); + TEST_SUCC(vb2_check_dev_switch(ctx), "dev mode on"); + TEST_NEQ(sd->flags & VB2_SD_FLAG_DEV_MODE_ENABLED, 0, " sd in dev"); + TEST_NEQ(ctx->flags & VB2_CONTEXT_DEVELOPER_MODE, 0, " ctx in dev"); + TEST_EQ(mock_tpm_clear_called, 0, " no tpm clear"); + + /* Any normal mode boot clears dev boot flags */ + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_DEV_BOOT_EXTERNAL, 1); + vb2_nv_set(ctx, VB2_NV_DEV_BOOT_ALTFW, 1); + vb2_nv_set(ctx, VB2_NV_DEV_BOOT_SIGNED_ONLY, 1); + vb2_nv_set(ctx, VB2_NV_DEV_DEFAULT_BOOT, 1); + TEST_SUCC(vb2_check_dev_switch(ctx), "dev mode off"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_DEV_BOOT_EXTERNAL), + 0, " cleared dev boot external"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_DEV_BOOT_ALTFW), + 0, " cleared dev boot altfw"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_DEV_BOOT_SIGNED_ONLY), + 0, " cleared dev boot signed only"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_DEV_DEFAULT_BOOT), + 0, " cleared dev default boot"); + + /* Normal-dev transition clears TPM */ + reset_common_data(); + vb2_secdata_firmware_set(ctx, VB2_SECDATA_FIRMWARE_FLAGS, + VB2_SECDATA_FIRMWARE_FLAG_DEV_MODE); + TEST_SUCC(vb2_check_dev_switch(ctx), "to dev mode"); + TEST_EQ(mock_tpm_clear_called, 1, " tpm clear"); + v = vb2_secdata_firmware_get(ctx, VB2_SECDATA_FIRMWARE_FLAGS); + TEST_EQ(v, (VB2_SECDATA_FIRMWARE_FLAG_DEV_MODE | + VB2_SECDATA_FIRMWARE_FLAG_LAST_BOOT_DEVELOPER), + " last boot developer now"); + + /* Dev-normal transition clears TPM too */ + reset_common_data(); + vb2_secdata_firmware_set(ctx, VB2_SECDATA_FIRMWARE_FLAGS, + VB2_SECDATA_FIRMWARE_FLAG_LAST_BOOT_DEVELOPER); + TEST_SUCC(vb2_check_dev_switch(ctx), "from dev mode"); + TEST_EQ(mock_tpm_clear_called, 1, " tpm clear"); + v = vb2_secdata_firmware_get(ctx, VB2_SECDATA_FIRMWARE_FLAGS); + TEST_EQ(v, 0, " last boot not developer now"); + + /* Disable dev mode */ + reset_common_data(); + vb2_secdata_firmware_set( + ctx, VB2_SECDATA_FIRMWARE_FLAGS, + (VB2_SECDATA_FIRMWARE_FLAG_DEV_MODE | + VB2_SECDATA_FIRMWARE_FLAG_LAST_BOOT_DEVELOPER)); + vb2_nv_set(ctx, VB2_NV_DISABLE_DEV_REQUEST, 1); + TEST_SUCC(vb2_check_dev_switch(ctx), "disable dev request"); + TEST_EQ(sd->flags & VB2_SD_FLAG_DEV_MODE_ENABLED, 0, " sd not in dev"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_DISABLE_DEV_REQUEST), + 0, " request cleared"); + + /* Force enabled by GBB */ + reset_common_data(); + gbb.flags |= VB2_GBB_FLAG_FORCE_DEV_SWITCH_ON; + TEST_SUCC(vb2_check_dev_switch(ctx), "dev on via gbb"); + TEST_NEQ(sd->flags & VB2_SD_FLAG_DEV_MODE_ENABLED, 0, " sd in dev"); + v = vb2_secdata_firmware_get(ctx, VB2_SECDATA_FIRMWARE_FLAGS); + TEST_EQ(v, VB2_SECDATA_FIRMWARE_FLAG_LAST_BOOT_DEVELOPER, + " doesn't set dev on in secdata_firmware " + "but does set last boot dev"); + TEST_EQ(mock_tpm_clear_called, 1, " tpm clear"); + + /* Request disable by ctx flag */ + reset_common_data(); + vb2_secdata_firmware_set( + ctx, VB2_SECDATA_FIRMWARE_FLAGS, + (VB2_SECDATA_FIRMWARE_FLAG_DEV_MODE | + VB2_SECDATA_FIRMWARE_FLAG_LAST_BOOT_DEVELOPER)); + ctx->flags |= VB2_CONTEXT_DISABLE_DEVELOPER_MODE; + TEST_SUCC(vb2_check_dev_switch(ctx), "disable dev on ctx request"); + TEST_EQ(sd->flags & VB2_SD_FLAG_DEV_MODE_ENABLED, 0, " sd not in dev"); + + /* Simulate clear owner failure */ + reset_common_data(); + vb2_secdata_firmware_set(ctx, VB2_SECDATA_FIRMWARE_FLAGS, + VB2_SECDATA_FIRMWARE_FLAG_LAST_BOOT_DEVELOPER); + mock_tpm_clear_retval = VB2_ERROR_EX_TPM_CLEAR_OWNER; + TEST_EQ(vb2_check_dev_switch(ctx), + VB2_ERROR_EX_TPM_CLEAR_OWNER, "tpm clear fail"); + TEST_EQ(mock_tpm_clear_called, 1, " tpm clear"); + v = vb2_secdata_firmware_get(ctx, VB2_SECDATA_FIRMWARE_FLAGS); + TEST_EQ(v, VB2_SECDATA_FIRMWARE_FLAG_LAST_BOOT_DEVELOPER, + " last boot still developer"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_TPM_CLEAR_OWNER, " requests recovery"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_SUBCODE), + (uint8_t)VB2_ERROR_EX_TPM_CLEAR_OWNER, " recovery subcode"); + + /* + * secdata_firmware failure in normal mode fails and shows dev=0 even + * if dev mode was on in the (inaccessible) secdata_firmware. Since this + * happens in fw_phase1, we do not abort -- we know that when secdata + * is uninitialized here, we must be headed for recovery mode. + */ + reset_common_data(); + vb2_secdata_firmware_set(ctx, VB2_SECDATA_FIRMWARE_FLAGS, + VB2_SECDATA_FIRMWARE_FLAG_DEV_MODE); + sd->status &= ~VB2_SD_STATUS_SECDATA_FIRMWARE_INIT; + TEST_SUCC(vb2_check_dev_switch(ctx), "secdata_firmware fail normal"); + TEST_EQ(sd->flags & VB2_SD_FLAG_DEV_MODE_ENABLED, 0, " sd not in dev"); + TEST_EQ(ctx->flags & VB2_CONTEXT_DEVELOPER_MODE, 0, " ctx not in dev"); + + /* secdata_firmware failure in recovery mode continues */ + reset_common_data(); + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + sd->status &= ~VB2_SD_STATUS_SECDATA_FIRMWARE_INIT; + TEST_SUCC(vb2_check_dev_switch(ctx), "secdata_firmware fail recovery"); + TEST_EQ(sd->flags & VB2_SD_FLAG_DEV_MODE_ENABLED, 0, " sd not in dev"); + TEST_EQ(ctx->flags & VB2_CONTEXT_DEVELOPER_MODE, 0, " ctx not in dev"); + + /* And doesn't check or clear dev disable request */ + reset_common_data(); + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + sd->status &= ~VB2_SD_STATUS_SECDATA_FIRMWARE_INIT; + vb2_nv_set(ctx, VB2_NV_DISABLE_DEV_REQUEST, 1); + TEST_SUCC(vb2_check_dev_switch(ctx), + "secdata_firmware fail recovery disable"); + TEST_EQ(sd->flags & VB2_SD_FLAG_DEV_MODE_ENABLED, 0, " sd not in dev"); + TEST_EQ(ctx->flags & VB2_CONTEXT_DEVELOPER_MODE, 0, " ctx not in dev"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_DISABLE_DEV_REQUEST), + 1, " request not cleared"); + + /* Can still override with GBB flag */ + reset_common_data(); + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + sd->status &= ~VB2_SD_STATUS_SECDATA_FIRMWARE_INIT; + gbb.flags |= VB2_GBB_FLAG_FORCE_DEV_SWITCH_ON; + TEST_SUCC(vb2_check_dev_switch(ctx), + "secdata_firmware fail recovery gbb"); + TEST_NEQ(sd->flags & VB2_SD_FLAG_DEV_MODE_ENABLED, 0, " sd in dev"); + TEST_NEQ(ctx->flags & VB2_CONTEXT_DEVELOPER_MODE, 0, " ctx in dev"); + TEST_EQ(mock_tpm_clear_called, 1, " tpm clear"); + + /* Force wipeout by ctx flag */ + reset_common_data(); + ctx->flags |= VB2_CONTEXT_FORCE_WIPEOUT_MODE; + TEST_SUCC(vb2_check_dev_switch(ctx), "wipeout on ctx flag"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_REQ_WIPEOUT), 1, " nv wipeout"); +} + +static void enable_dev_tests(void) +{ + reset_common_data(); + TEST_FAIL(vb2api_enable_developer_mode(ctx), + "vb2api_enable_developer_mode - failed"); + TEST_EQ(vb2_secdata_firmware_get(ctx, VB2_SECDATA_FIRMWARE_FLAGS) & + VB2_SECDATA_FIRMWARE_FLAG_DEV_MODE, 0, + " dev mode flag not set"); + + reset_common_data(); + *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + TEST_SUCC(vb2api_enable_developer_mode(ctx), + "vb2api_enable_developer_mode - success"); + TEST_NEQ(vb2_secdata_firmware_get(ctx, VB2_SECDATA_FIRMWARE_FLAGS) & + VB2_SECDATA_FIRMWARE_FLAG_DEV_MODE, 0, + " dev mode flag set"); + + /* secdata_firmware not initialized, aborts */ + reset_common_data(); + *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + sd->status &= ~VB2_SD_STATUS_SECDATA_FIRMWARE_INIT; + sd->status |= VB2_SD_STATUS_RECOVERY_DECIDED; + TEST_ABORT(vb2api_enable_developer_mode(ctx), + "secdata_firmware no init, enable dev mode aborted"); + sd->status |= VB2_SD_STATUS_SECDATA_FIRMWARE_INIT; + TEST_EQ(vb2_secdata_firmware_get(ctx, VB2_SECDATA_FIRMWARE_FLAGS) & + VB2_SECDATA_FIRMWARE_FLAG_DEV_MODE, 0, + " dev mode flag not set"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_DEV_BOOT_EXTERNAL), 0, + " NV_DEV_BOOT_EXTERNAL not set"); +} + +static void tpm_clear_tests(void) +{ + /* No clear request */ + reset_common_data(); + TEST_SUCC(vb2_check_tpm_clear(ctx), "no clear request"); + TEST_EQ(mock_tpm_clear_called, 0, "tpm not cleared"); + + /* Successful request */ + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_CLEAR_TPM_OWNER_REQUEST, 1); + TEST_SUCC(vb2_check_tpm_clear(ctx), "clear request"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_CLEAR_TPM_OWNER_REQUEST), + 0, "request cleared"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_CLEAR_TPM_OWNER_DONE), + 1, "done set"); + TEST_EQ(mock_tpm_clear_called, 1, "tpm cleared"); + + /* Failed request */ + reset_common_data(); + mock_tpm_clear_retval = VB2_ERROR_EX_TPM_CLEAR_OWNER; + vb2_nv_set(ctx, VB2_NV_CLEAR_TPM_OWNER_REQUEST, 1); + TEST_EQ(vb2_check_tpm_clear(ctx), + VB2_ERROR_EX_TPM_CLEAR_OWNER, "clear failure"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_CLEAR_TPM_OWNER_REQUEST), + 0, "request cleared"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_CLEAR_TPM_OWNER_DONE), + 0, "done not set"); +} + +static void select_slot_tests(void) +{ + /* Slot A */ + reset_common_data(); + TEST_SUCC(vb2_select_fw_slot(ctx), "select slot A"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FW_RESULT), + VB2_FW_RESULT_UNKNOWN, "result unknown"); + TEST_NEQ(sd->status & VB2_SD_STATUS_CHOSE_SLOT, 0, "chose slot"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FW_TRIED), 0, "tried A"); + TEST_EQ(sd->fw_slot, 0, "selected A"); + TEST_EQ(ctx->flags & VB2_CONTEXT_FW_SLOT_B, 0, "didn't choose B"); + + /* Slot B */ + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_TRY_NEXT, 1); + TEST_SUCC(vb2_select_fw_slot(ctx), "select slot B"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FW_RESULT), + VB2_FW_RESULT_UNKNOWN, "result unknown"); + TEST_NEQ(sd->status & VB2_SD_STATUS_CHOSE_SLOT, 0, "chose slot"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FW_TRIED), 1, "tried B"); + TEST_EQ(sd->fw_slot, 1, "selected B"); + TEST_NEQ(ctx->flags & VB2_CONTEXT_FW_SLOT_B, 0, "ctx says choose B"); + + /* Slot A ran out of tries */ + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_FW_RESULT, VB2_FW_RESULT_TRYING); + TEST_SUCC(vb2_select_fw_slot(ctx), "select slot A out of tries"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_TRY_NEXT), 1, "try B next"); + TEST_NEQ(sd->status & VB2_SD_STATUS_CHOSE_SLOT, 0, "chose slot"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FW_TRIED), 1, "tried B"); + TEST_EQ(sd->fw_slot, 1, "selected B"); + TEST_NEQ(ctx->flags & VB2_CONTEXT_FW_SLOT_B, 0, "ctx says choose B"); + + /* Slot A ran out of tries, even with nofail active */ + reset_common_data(); + ctx->flags |= VB2_CONTEXT_NOFAIL_BOOT; + vb2_nv_set(ctx, VB2_NV_FW_RESULT, VB2_FW_RESULT_TRYING); + TEST_SUCC(vb2_select_fw_slot(ctx), "select slot A out of tries"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_TRY_NEXT), 1, "try B next"); + TEST_NEQ(sd->status & VB2_SD_STATUS_CHOSE_SLOT, 0, "chose slot"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FW_TRIED), 1, "tried B"); + TEST_EQ(sd->fw_slot, 1, "selected B"); + TEST_NEQ(ctx->flags & VB2_CONTEXT_FW_SLOT_B, 0, "ctx says choose B"); + + /* Slot A used up a try */ + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_TRY_COUNT, 3); + TEST_SUCC(vb2_select_fw_slot(ctx), "try slot A"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FW_RESULT), + VB2_FW_RESULT_TRYING, "result trying"); + TEST_NEQ(sd->status & VB2_SD_STATUS_CHOSE_SLOT, 0, "chose slot"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FW_TRIED), 0, "tried A"); + TEST_EQ(sd->fw_slot, 0, "selected A"); + TEST_EQ(ctx->flags & VB2_CONTEXT_FW_SLOT_B, 0, "didn't choose B"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_TRY_COUNT), 2, "tries decremented"); + + /* Slot A failed, but nofail active */ + reset_common_data(); + ctx->flags |= VB2_CONTEXT_NOFAIL_BOOT; + vb2_nv_set(ctx, VB2_NV_TRY_COUNT, 3); + TEST_SUCC(vb2_select_fw_slot(ctx), "try slot A"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FW_RESULT), + VB2_FW_RESULT_TRYING, "result trying"); + TEST_NEQ(sd->status & VB2_SD_STATUS_CHOSE_SLOT, 0, "chose slot"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FW_TRIED), 0, "tried A"); + TEST_EQ(sd->fw_slot, 0, "selected A"); + TEST_EQ(ctx->flags & VB2_CONTEXT_FW_SLOT_B, 0, "didn't choose B"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_TRY_COUNT), 3, "tries not decremented"); + + /* Tried/result get copied to the previous fields */ + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_FW_TRIED, 0); + vb2_nv_set(ctx, VB2_NV_FW_RESULT, VB2_FW_RESULT_SUCCESS); + vb2_select_fw_slot(ctx); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FW_PREV_TRIED), 0, "prev A"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FW_PREV_RESULT), VB2_FW_RESULT_SUCCESS, + "prev success"); + + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_FW_TRIED, 1); + vb2_nv_set(ctx, VB2_NV_FW_RESULT, VB2_FW_RESULT_FAILURE); + vb2_select_fw_slot(ctx); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FW_PREV_TRIED), 1, "prev B"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FW_PREV_RESULT), VB2_FW_RESULT_FAILURE, + "prev failure"); +} + +static void need_reboot_for_display_tests(void) +{ + /* Display not available, reboot required */ + reset_common_data(); + TEST_EQ(vb2api_need_reboot_for_display(ctx), 1, + "need_reboot_for_display: need reboot"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_DISPLAY_REQUEST), 1, + " set display request"); + + /* Display available, don't need reboot */ + reset_common_data(); + sd->flags |= VB2_SD_FLAG_DISPLAY_AVAILABLE; + TEST_EQ(vb2api_need_reboot_for_display(ctx), 0, + "need_reboot_for_display: don't need reboot"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_DISPLAY_REQUEST), 0, + " not set display request"); +} + +static void clear_recovery_tests(void) +{ + + /* Manual recovery */ + reset_common_data(); + *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + sd->recovery_reason = 4; + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + vb2_nv_set(ctx, VB2_NV_RECOVERY_REQUEST, 5); + vb2_nv_set(ctx, VB2_NV_RECOVERY_SUBCODE, 13); + vb2_clear_recovery(ctx); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + 0, " request cleared"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_SUBCODE), + 0, " subcode cleared"); + + /* Broken screen */ + reset_common_data(); + *boot_mode = VB2_BOOT_MODE_BROKEN_SCREEN; + sd->recovery_reason = 4; + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + vb2_nv_set(ctx, VB2_NV_RECOVERY_REQUEST, 5); + vb2_nv_set(ctx, VB2_NV_RECOVERY_SUBCODE, 13); + vb2_clear_recovery(ctx); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + 0, " request cleared"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_SUBCODE), + 4, " subcode shifted"); +} + +static void get_recovery_reason_tests(void) +{ + reset_common_data(); + sd->recovery_reason = 4; + TEST_EQ(vb2api_get_recovery_reason(ctx), 4, "correct recovery reason"); +} + +static void phone_recovery_enabled_tests(void) +{ + /* Phone recovery enabled */ + reset_common_data(); + vb2api_secdata_kernel_create(ctx); + vb2_secdata_kernel_init(ctx); + TEST_EQ(vb2api_phone_recovery_enabled(ctx), 1, + "phone recovery enabled"); + TEST_EQ(vb2api_phone_recovery_ui_enabled(ctx), 1, + " ui also enabled"); + + /* Phone recovery disabled */ + reset_common_data(); + vb2api_secdata_kernel_create(ctx); + vb2_secdata_kernel_init(ctx); + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_FLAGS, + VB2_SECDATA_KERNEL_FLAG_PHONE_RECOVERY_DISABLED); + TEST_EQ(vb2api_phone_recovery_enabled(ctx), 0, + "phone recovery disabled"); + TEST_EQ(vb2api_phone_recovery_ui_enabled(ctx), 0, + " ui also disabled"); + + /* Only UI disabled */ + reset_common_data(); + vb2api_secdata_kernel_create(ctx); + vb2_secdata_kernel_init(ctx); + vb2_secdata_kernel_set( + ctx, VB2_SECDATA_KERNEL_FLAGS, + VB2_SECDATA_KERNEL_FLAG_PHONE_RECOVERY_UI_DISABLED); + TEST_EQ(vb2api_phone_recovery_enabled(ctx), 1, + "phone recovery enabled again"); + TEST_EQ(vb2api_phone_recovery_ui_enabled(ctx), 0, + " ui disabled"); +} + +static void diagnostic_ui_enabled_tests(void) +{ + reset_common_data(); + vb2api_secdata_kernel_create(ctx); + vb2_secdata_kernel_init(ctx); + TEST_EQ(vb2api_diagnostic_ui_enabled(ctx), 1, + "diagnostic UI enabled"); + + reset_common_data(); + vb2api_secdata_kernel_create(ctx); + vb2_secdata_kernel_init(ctx); + vb2_secdata_kernel_set( + ctx, VB2_SECDATA_KERNEL_FLAGS, + VB2_SECDATA_KERNEL_FLAG_DIAGNOSTIC_UI_DISABLED); + TEST_EQ(vb2api_diagnostic_ui_enabled(ctx), 0, + "diagnostic UI disabled"); +} + +static void dev_default_boot_tests(void) +{ + /* No default boot */ + reset_common_data(); + TEST_EQ(vb2api_get_dev_default_boot_target(ctx), + VB2_DEV_DEFAULT_BOOT_TARGET_INTERNAL, + "no default boot, boot disk"); + + /* Set boot altfw by GBB */ + reset_common_data(); + gbb.flags |= VB2_GBB_FLAG_DEFAULT_DEV_BOOT_ALTFW; + vb2_nv_set(ctx, VB2_NV_DEV_DEFAULT_BOOT, + VB2_DEV_DEFAULT_BOOT_TARGET_EXTERNAL); + TEST_EQ(vb2api_get_dev_default_boot_target(ctx), + VB2_DEV_DEFAULT_BOOT_TARGET_ALTFW, + "GBB set default boot altfw"); + + /* Boot from internal disk */ + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_DEV_DEFAULT_BOOT, + VB2_DEV_DEFAULT_BOOT_TARGET_INTERNAL); + TEST_EQ(vb2api_get_dev_default_boot_target(ctx), + VB2_DEV_DEFAULT_BOOT_TARGET_INTERNAL, + "set default boot internal disk"); + + /* Boot from external disk */ + reset_common_data(); + ctx->flags |= VB2_CONTEXT_DEV_BOOT_EXTERNAL_ALLOWED; + vb2_nv_set(ctx, VB2_NV_DEV_DEFAULT_BOOT, + VB2_DEV_DEFAULT_BOOT_TARGET_EXTERNAL); + TEST_EQ(vb2api_get_dev_default_boot_target(ctx), + VB2_DEV_DEFAULT_BOOT_TARGET_EXTERNAL, + "set default boot external disk"); + + /* Boot from external disk not allowed */ + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_DEV_DEFAULT_BOOT, + VB2_DEV_DEFAULT_BOOT_TARGET_EXTERNAL); + TEST_EQ(vb2api_get_dev_default_boot_target(ctx), + VB2_DEV_DEFAULT_BOOT_TARGET_INTERNAL, + "default boot external not allowed"); + reset_common_data(); + ctx->flags |= VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED; + vb2_nv_set(ctx, VB2_NV_DEV_DEFAULT_BOOT, + VB2_DEV_DEFAULT_BOOT_TARGET_EXTERNAL); + TEST_EQ(vb2api_get_dev_default_boot_target(ctx), + VB2_DEV_DEFAULT_BOOT_TARGET_INTERNAL, + "default boot external not allowed"); + + /* Boot altfw */ + reset_common_data(); + ctx->flags |= VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED; + vb2_nv_set(ctx, VB2_NV_DEV_DEFAULT_BOOT, + VB2_DEV_DEFAULT_BOOT_TARGET_ALTFW); + TEST_EQ(vb2api_get_dev_default_boot_target(ctx), + VB2_DEV_DEFAULT_BOOT_TARGET_ALTFW, + "set default boot altfw"); + + /* Boot altfw not allowed */ + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_DEV_DEFAULT_BOOT, + VB2_DEV_DEFAULT_BOOT_TARGET_ALTFW); + TEST_EQ(vb2api_get_dev_default_boot_target(ctx), + VB2_DEV_DEFAULT_BOOT_TARGET_INTERNAL, + "default boot altfw not allowed"); + reset_common_data(); + ctx->flags |= VB2_CONTEXT_DEV_BOOT_EXTERNAL_ALLOWED; + vb2_nv_set(ctx, VB2_NV_DEV_DEFAULT_BOOT, + VB2_DEV_DEFAULT_BOOT_TARGET_ALTFW); + TEST_EQ(vb2api_get_dev_default_boot_target(ctx), + VB2_DEV_DEFAULT_BOOT_TARGET_INTERNAL, + "default boot altfw not allowed"); +} + +static void fill_dev_boot_flags_tests(void) +{ + /* Dev boot - allowed by default */ + reset_common_data(); + vb2_fill_dev_boot_flags(ctx); + TEST_TRUE(ctx->flags & VB2_CONTEXT_DEV_BOOT_ALLOWED, + "dev boot - allowed by default"); + + /* Dev boot - disabled by FWMP */ + reset_common_data(); + fwmp->flags |= VB2_SECDATA_FWMP_DEV_DISABLE_BOOT; + vb2_fill_dev_boot_flags(ctx); + TEST_FALSE(ctx->flags & VB2_CONTEXT_DEV_BOOT_ALLOWED, + "dev boot - FWMP disabled"); + + /* Dev boot - force enabled by GBB */ + reset_common_data(); + fwmp->flags |= VB2_SECDATA_FWMP_DEV_DISABLE_BOOT; + gbb.flags |= VB2_GBB_FLAG_FORCE_DEV_SWITCH_ON; + vb2_fill_dev_boot_flags(ctx); + TEST_TRUE(ctx->flags & VB2_CONTEXT_DEV_BOOT_ALLOWED, + "dev boot - GBB force dev on"); + + /* External boot - not allowed by default */ + reset_common_data(); + vb2_fill_dev_boot_flags(ctx); + TEST_FALSE(ctx->flags & VB2_CONTEXT_DEV_BOOT_EXTERNAL_ALLOWED, + "dev boot external - not allowed by default"); + + /* External boot - enabled by nvdata */ + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_DEV_BOOT_EXTERNAL, 1); + vb2_fill_dev_boot_flags(ctx); + TEST_TRUE(ctx->flags & VB2_CONTEXT_DEV_BOOT_EXTERNAL_ALLOWED, + "dev boot external - nvdata enabled"); + + /* External boot - enabled by FWMP */ + reset_common_data(); + fwmp->flags |= VB2_SECDATA_FWMP_DEV_ENABLE_EXTERNAL; + vb2_fill_dev_boot_flags(ctx); + TEST_TRUE(ctx->flags & VB2_CONTEXT_DEV_BOOT_EXTERNAL_ALLOWED, + "dev boot external - secdata enabled"); + + /* External boot - force enabled by GBB */ + reset_common_data(); + gbb.flags |= VB2_GBB_FLAG_FORCE_DEV_BOOT_USB; + vb2_fill_dev_boot_flags(ctx); + TEST_TRUE(ctx->flags & VB2_CONTEXT_DEV_BOOT_EXTERNAL_ALLOWED, + "dev boot external - GBB force enabled"); + + /* External boot - set all flags */ + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_DEV_BOOT_EXTERNAL, 1); + fwmp->flags |= VB2_SECDATA_FWMP_DEV_ENABLE_EXTERNAL; + gbb.flags |= VB2_GBB_FLAG_FORCE_DEV_BOOT_USB; + vb2_fill_dev_boot_flags(ctx); + TEST_TRUE(ctx->flags & VB2_CONTEXT_DEV_BOOT_EXTERNAL_ALLOWED, + "dev boot external - all flags set"); + + /* Alternate boot - not allowed by default */ + reset_common_data(); + vb2_fill_dev_boot_flags(ctx); + TEST_FALSE(ctx->flags & VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED, + "dev boot altfw - not allowed by default"); + + /* Alternate boot - enabled by nvdata */ + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_DEV_BOOT_ALTFW, 1); + vb2_fill_dev_boot_flags(ctx); + TEST_TRUE(ctx->flags & VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED, + "dev boot altfw - nvdata enabled"); + + /* Alternate boot - enabled by FWMP */ + reset_common_data(); + fwmp->flags |= VB2_SECDATA_FWMP_DEV_ENABLE_ALTFW; + vb2_fill_dev_boot_flags(ctx); + TEST_TRUE(ctx->flags & VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED, + "dev boot altfw - secdata enabled"); + + /* Alternate boot - force enabled by GBB */ + reset_common_data(); + gbb.flags |= VB2_GBB_FLAG_FORCE_DEV_BOOT_ALTFW; + vb2_fill_dev_boot_flags(ctx); + TEST_TRUE(ctx->flags & VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED, + "dev boot altfw - GBB force enabled"); + + /* Alternate boot - set all flags */ + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_DEV_BOOT_ALTFW, 1); + fwmp->flags |= VB2_SECDATA_FWMP_DEV_ENABLE_ALTFW; + gbb.flags |= VB2_GBB_FLAG_FORCE_DEV_BOOT_ALTFW; + vb2_fill_dev_boot_flags(ctx); + TEST_TRUE(ctx->flags & VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED, + "dev boot altfw - all flags set"); +} + +static void use_dev_screen_short_delay_tests(void) +{ + /* Normal delay */ + reset_common_data(); + TEST_EQ(vb2api_use_short_dev_screen_delay(ctx), 0, + "short delay: no"); + + /* Short delay */ + gbb.flags |= VB2_GBB_FLAG_DEV_SCREEN_SHORT_DELAY; + TEST_EQ(vb2api_use_short_dev_screen_delay(ctx), 1, + "short delay: yes"); +} + +int main(int argc, char* argv[]) +{ + init_workbuf_tests(); + misc_tests(); + gbb_tests(); + fail_tests(); + recovery_tests(); + dev_switch_tests(); + enable_dev_tests(); + tpm_clear_tests(); + select_slot_tests(); + need_reboot_for_display_tests(); + clear_recovery_tests(); + get_recovery_reason_tests(); + phone_recovery_enabled_tests(); + diagnostic_ui_enabled_tests(); + dev_default_boot_tests(); + fill_dev_boot_flags_tests(); + use_dev_screen_short_delay_tests(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_nvstorage_tests.c b/tests/vb2_nvstorage_tests.c new file mode 100644 index 0000000..94bcfca --- /dev/null +++ b/tests/vb2_nvstorage_tests.c @@ -0,0 +1,277 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for firmware NV storage library. + */ + +#include +#include +#include +#include + +#include "2api.h" +#include "2common.h" +#include "2misc.h" +#include "2nvstorage_fields.h" +#include "2nvstorage.h" +#include "2sysincludes.h" +#include "test_common.h" + +/* Single NV storage field to test */ +struct nv_field { + enum vb2_nv_param param; /* Parameter index */ + uint32_t default_value; /* Expected default value */ + uint32_t test_value; /* Value to test writing */ + uint32_t test_value2; /* Second value to test writing */ + const char *desc; /* Field description */ +}; + +/* Array of fields to test, terminated with a field with desc==NULL. */ +static struct nv_field nvfields[] = { + {VB2_NV_DEBUG_RESET_MODE, 0, 1, 0, "debug reset mode"}, + {VB2_NV_TRY_NEXT, 0, 1, 0, "try next"}, + {VB2_NV_TRY_COUNT, 0, 6, 15, "try B count"}, + {VB2_NV_FW_TRIED, 0, 1, 0, "firmware tried"}, + {VB2_NV_FW_RESULT, 0, 1, 2, "firmware result"}, + {VB2_NV_FW_PREV_TRIED, 0, 1, 0, "firmware prev tried"}, + {VB2_NV_FW_PREV_RESULT, 0, 1, 3, "firmware prev result"}, + {VB2_NV_RECOVERY_REQUEST, 0, 0x42, 0xED, "recovery request"}, + {VB2_NV_RECOVERY_SUBCODE, 0, 0x56, 0xAC, "recovery subcode"}, + {VB2_NV_LOCALIZATION_INDEX, 0, 0x69, 0xB0, "localization index"}, + {VB2_NV_KERNEL_FIELD, 0, 0x1234, 0xFEDC, "kernel field"}, + {VB2_NV_DEV_BOOT_EXTERNAL, 0, 1, 0, "dev boot usb"}, + {VB2_NV_DEV_BOOT_ALTFW, 0, 1, 0, "dev boot altfw"}, + {VB2_NV_DEV_BOOT_SIGNED_ONLY, 0, 1, 0, "dev boot custom"}, + {VB2_NV_DEV_DEFAULT_BOOT, 0, 1, 2, "dev default boot"}, + {VB2_NV_DIAG_REQUEST, 0, 1, 0, "diagnostic rom request"}, + {VB2_NV_DISABLE_DEV_REQUEST, 0, 1, 0, "disable dev request"}, + {VB2_NV_CLEAR_TPM_OWNER_REQUEST, 0, 1, 0, "clear tpm owner request"}, + {VB2_NV_CLEAR_TPM_OWNER_DONE, 0, 1, 0, "clear tpm owner done"}, + {VB2_NV_TPM_REQUESTED_REBOOT, 0, 1, 0, "tpm requested reboot"}, + {VB2_NV_REQ_WIPEOUT, 0, 1, 0, "request wipeout"}, + {VB2_NV_DISPLAY_REQUEST, 0, 1, 0, "oprom needed"}, + {VB2_NV_BACKUP_NVRAM_REQUEST, 0, 1, 0, "backup nvram request"}, + {VB2_NV_BOOT_ON_AC_DETECT, 0, 1, 0, "boot on ac detect"}, + {VB2_NV_TRY_RO_SYNC, 0, 1, 0, "try read only software sync"}, + {VB2_NV_BATTERY_CUTOFF_REQUEST, 0, 1, 0, "battery cutoff request"}, + {VB2_NV_KERNEL_MAX_ROLLFORWARD, 0, 0x12345678, 0xFEDCBA98, + "kernel max rollforward"}, + {VB2_NV_POST_EC_SYNC_DELAY, 0, 1, 0, "enable post-ec sync delay"}, + {0, 0, 0, 0, NULL} +}; + +/* Fields added in v2. The test_value field is the default returned for V1. */ +static struct nv_field nv2fields[] = { + {VB2_NV_FW_MAX_ROLLFORWARD, 0, VB2_FW_MAX_ROLLFORWARD_V1_DEFAULT, + 0x87654321, "firmware max rollforward"}, + {0, 0, 0, 0, NULL} +}; + +static void test_changed(struct vb2_context *c, int changed, const char *why) +{ + if (changed) + TEST_NEQ(c->flags & VB2_CONTEXT_NVDATA_CHANGED, 0, why); + else + TEST_EQ(c->flags & VB2_CONTEXT_NVDATA_CHANGED, 0, why); +}; + +static void nv_storage_test(uint32_t ctxflags) +{ + struct nv_field *vnf; + uint8_t goodcrc; + uint8_t workbuf[VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + struct vb2_context *ctx; + + TEST_SUCC(vb2api_init(workbuf, sizeof(workbuf), &ctx), + "vb2api_init failed"); + ctx->flags = ctxflags; + + struct vb2_shared_data *sd = vb2_get_sd(ctx); + + /* Things that change between V1 and V2 */ + int expect_header = 0x30 | (ctxflags ? VB2_NV_HEADER_SIGNATURE_V2 : + VB2_NV_HEADER_SIGNATURE_V1); + int crc_offs = ctxflags ? VB2_NV_OFFS_CRC_V2 : VB2_NV_OFFS_CRC_V1; + + TEST_EQ(vb2_nv_get_size(ctx), ctxflags ? VB2_NVDATA_SIZE_V2 : + VB2_NVDATA_SIZE, "vb2_nv_get_size()"); + + memset(ctx->nvdata, 0xA6, sizeof(ctx->nvdata)); + + /* Init with invalid data should set defaults and regenerate CRC */ + vb2_nv_init(ctx); + TEST_EQ(ctx->nvdata[VB2_NV_OFFS_HEADER], expect_header, + "vb2_nv_init() reset header byte"); + TEST_NEQ(ctx->nvdata[crc_offs], 0, "vb2_nv_init() CRC"); + TEST_EQ(sd->status, VB2_SD_STATUS_NV_INIT | VB2_SD_STATUS_NV_REINIT, + "vb2_nv_init() status changed"); + test_changed(ctx, 1, "vb2_nv_init() reset changed"); + goodcrc = ctx->nvdata[crc_offs]; + TEST_SUCC(vb2_nv_check_crc(ctx), "vb2_nv_check_crc() good"); + + /* Another init should not cause further changes */ + ctx->flags = ctxflags; + sd->status = 0; + vb2_nv_init(ctx); + test_changed(ctx, 0, "vb2_nv_init() didn't re-reset"); + TEST_EQ(ctx->nvdata[crc_offs], goodcrc, + "vb2_nv_init() CRC same"); + TEST_EQ(sd->status, VB2_SD_STATUS_NV_INIT, + "vb2_nv_init() status same"); + + /* Perturbing signature bits in the header should force defaults */ + ctx->nvdata[VB2_NV_OFFS_HEADER] ^= 0x40; + TEST_EQ(vb2_nv_check_crc(ctx), + VB2_ERROR_NV_HEADER, "vb2_nv_check_crc() bad header"); + vb2_nv_init(ctx); + TEST_EQ(ctx->nvdata[VB2_NV_OFFS_HEADER], expect_header, + "vb2_nv_init() reset header byte again"); + test_changed(ctx, 1, "vb2_nv_init() corrupt changed"); + TEST_EQ(ctx->nvdata[crc_offs], goodcrc, + "vb2_nv_init() CRC same again"); + + /* So should perturbing some other byte */ + TEST_EQ(ctx->nvdata[VB2_NV_OFFS_KERNEL1], 0, "Kernel byte starts at 0"); + ctx->nvdata[VB2_NV_OFFS_KERNEL1] = 12; + TEST_EQ(vb2_nv_check_crc(ctx), + VB2_ERROR_NV_CRC, "vb2_nv_check_crc() bad CRC"); + vb2_nv_init(ctx); + TEST_EQ(ctx->nvdata[VB2_NV_OFFS_KERNEL1], 0, + "vb2_nv_init() reset kernel byte"); + test_changed(ctx, 1, "vb2_nv_init() corrupt elsewhere changed"); + TEST_EQ(ctx->nvdata[crc_offs], goodcrc, + "vb2_nv_init() CRC same again"); + + /* Clear the kernel and firmware flags */ + vb2_nv_init(ctx); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FIRMWARE_SETTINGS_RESET), + 1, "Firmware settings are reset"); + vb2_nv_set(ctx, VB2_NV_FIRMWARE_SETTINGS_RESET, 0); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FIRMWARE_SETTINGS_RESET), + 0, "Firmware settings are clear"); + + TEST_EQ(vb2_nv_get(ctx, VB2_NV_KERNEL_SETTINGS_RESET), + 1, "Kernel settings are reset"); + vb2_nv_set(ctx, VB2_NV_KERNEL_SETTINGS_RESET, 0); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_KERNEL_SETTINGS_RESET), + 0, "Kernel settings are clear"); + + TEST_EQ(ctx->nvdata[VB2_NV_OFFS_HEADER], + expect_header & VB2_NV_HEADER_SIGNATURE_MASK, + "Header byte now just has the signature"); + /* That should have changed the CRC */ + TEST_NEQ(ctx->nvdata[crc_offs], goodcrc, + "vb2_nv_init() CRC changed due to flags clear"); + + /* Test explicitly setting the reset flags again */ + vb2_nv_init(ctx); + vb2_nv_set(ctx, VB2_NV_FIRMWARE_SETTINGS_RESET, 1); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FIRMWARE_SETTINGS_RESET), + 1, "Firmware settings forced reset"); + vb2_nv_set(ctx, VB2_NV_FIRMWARE_SETTINGS_RESET, 0); + + vb2_nv_set(ctx, VB2_NV_KERNEL_SETTINGS_RESET, 1); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_KERNEL_SETTINGS_RESET), + 1, "Kernel settings forced reset"); + vb2_nv_set(ctx, VB2_NV_KERNEL_SETTINGS_RESET, 0); + + /* Get/set an invalid field */ + vb2_nv_init(ctx); + vb2_nv_set(ctx, -1, 1); + TEST_EQ(vb2_nv_get(ctx, -1), 0, "Get invalid setting"); + + /* Test other fields */ + vb2_nv_init(ctx); + for (vnf = nvfields; vnf->desc; vnf++) { + TEST_EQ(vb2_nv_get(ctx, vnf->param), vnf->default_value, + vnf->desc); + vb2_nv_set(ctx, vnf->param, vnf->test_value); + TEST_EQ(vb2_nv_get(ctx, vnf->param), vnf->test_value, vnf->desc); + vb2_nv_set(ctx, vnf->param, vnf->test_value2); + TEST_EQ(vb2_nv_get(ctx, vnf->param), vnf->test_value2, + vnf->desc); + } + + for (vnf = nv2fields; vnf->desc; vnf++) { + if (ctxflags) { + TEST_EQ(vb2_nv_get(ctx, vnf->param), vnf->default_value, + vnf->desc); + vb2_nv_set(ctx, vnf->param, vnf->test_value); + TEST_EQ(vb2_nv_get(ctx, vnf->param), vnf->test_value, + vnf->desc); + vb2_nv_set(ctx, vnf->param, vnf->test_value2); + TEST_EQ(vb2_nv_get(ctx, vnf->param), vnf->test_value2, + vnf->desc); + } else { + /* + * V2 fields always return defaults and can't be set if + * a V1 struct is present. + */ + TEST_EQ(vb2_nv_get(ctx, vnf->param), vnf->test_value, + vnf->desc); + vb2_nv_set(ctx, vnf->param, vnf->test_value2); + TEST_EQ(vb2_nv_get(ctx, vnf->param), vnf->test_value, + vnf->desc); + } + } + + /* None of those changes should have caused a reset to defaults */ + vb2_nv_init(ctx); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FIRMWARE_SETTINGS_RESET), + 0, "Firmware settings are still clear"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_KERNEL_SETTINGS_RESET), + 0, "Kernel settings are still clear"); + + /* Writing identical settings doesn't cause the CRC to regenerate */ + ctx->flags = ctxflags; + vb2_nv_init(ctx); + test_changed(ctx, 0, "No regen CRC on open"); + for (vnf = nvfields; vnf->desc; vnf++) + vb2_nv_set(ctx, vnf->param, vnf->test_value2); + test_changed(ctx, 0, "No regen CRC if data not changed"); + /* + * If struct is V2, this is the same test. If struct is V1, this + * verifies that the field couldn't be changed anyway. + */ + for (vnf = nv2fields; vnf->desc; vnf++) + vb2_nv_set(ctx, vnf->param, vnf->test_value2); + test_changed(ctx, 0, "No regen CRC if V2 data not changed"); + + /* Test out-of-range fields mapping to defaults or failing */ + vb2_nv_init(ctx); + vb2_nv_set(ctx, VB2_NV_TRY_COUNT, 16); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_TRY_COUNT), + 15, "Try b count out of range"); + vb2_nv_set(ctx, VB2_NV_RECOVERY_REQUEST, 0x101); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_LEGACY, "Recovery request out of range"); + vb2_nv_set(ctx, VB2_NV_LOCALIZATION_INDEX, 0x102); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_LOCALIZATION_INDEX), + 0, "Localization index out of range"); + + vb2_nv_set(ctx, VB2_NV_FW_RESULT, 100); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FW_RESULT), + VB2_FW_RESULT_UNKNOWN, "Firmware result out of range"); + + vb2_nv_set(ctx, VB2_NV_FW_PREV_RESULT, 100); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_FW_PREV_RESULT), + VB2_FW_RESULT_UNKNOWN, "Fw prev result out of range"); + + vb2_nv_set(ctx, VB2_NV_DEV_DEFAULT_BOOT, + VB2_DEV_DEFAULT_BOOT_TARGET_INTERNAL + 100); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_DEV_DEFAULT_BOOT), + VB2_DEV_DEFAULT_BOOT_TARGET_INTERNAL, + "default to booting from disk"); +} + +int main(int argc, char* argv[]) +{ + printf("Testing V1\n"); + nv_storage_test(0); + printf("Testing V2\n"); + nv_storage_test(VB2_CONTEXT_NVDATA_V2); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_preamble_fuzzer.c b/tests/vb2_preamble_fuzzer.c new file mode 100644 index 0000000..186ee9f --- /dev/null +++ b/tests/vb2_preamble_fuzzer.c @@ -0,0 +1,90 @@ +// Copyright 2019 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "2api.h" +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2rsa.h" +#include "2rsa_private.h" +#include "2secdata.h" +#include "vboot_test.h" + +static struct vb2_context *ctx; +static uint8_t workbuf[VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + +static const uint8_t *mock_preamble; +static size_t mock_preamble_size; + +/* Limit exposure of code for which we didn't set up the environment right. */ +void vb2api_fail(struct vb2_context *c, uint8_t reason, uint8_t subcode) +{ + return; +} + +vb2_error_t vb2ex_read_resource(struct vb2_context *c, + enum vb2_resource_index index, uint32_t offset, + void *buf, uint32_t size) +{ + if (index != VB2_RES_FW_VBLOCK) + return VB2_ERROR_EX_READ_RESOURCE_INDEX; + + /* The preamble_offset in our mock shared data is 0, so we can assume + that offset here is a direct offset into the preamble. */ + if (offset > mock_preamble_size || mock_preamble_size - offset < size) + return VB2_ERROR_EX_READ_RESOURCE_SIZE; + + memcpy(buf, mock_preamble + offset, size); + return VB2_SUCCESS; +} + +/* Pretend that signature checks always succeed so the fuzzer can cover more. */ +vb2_error_t vb2_check_padding(const uint8_t *sig, + const struct vb2_public_key *key) +{ + return VB2_SUCCESS; +} + +vb2_error_t vb2_safe_memcmp(const void *s1, const void *s2, size_t size) +{ + return VB2_SUCCESS; +} + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + const size_t datakey_size = 4096; // enough for all our signatures + + if (size < datakey_size) + return 0; + + if (vb2api_init(workbuf, sizeof(workbuf), &ctx)) + abort(); + vb2_nv_init(ctx); + vb2api_secdata_firmware_create(ctx); + vb2api_secdata_kernel_create(ctx); + if (vb2_secdata_firmware_init(ctx) || vb2_secdata_kernel_init(ctx)) + abort(); + + struct vb2_workbuf wb; + vb2_workbuf_from_ctx(ctx, &wb); + + uint8_t *key = vb2_workbuf_alloc(&wb, datakey_size); + if (!key) + abort(); + memcpy(key, data, datakey_size); + + mock_preamble = data + datakey_size; + mock_preamble_size = size - datakey_size; + + struct vb2_shared_data *sd = vb2_get_sd(ctx); + sd->data_key_offset = vb2_offset_of(sd, key); + sd->data_key_size = datakey_size; + vb2_set_workbuf_used(ctx, sd->data_key_offset + sd->data_key_size); + + sd->vblock_preamble_offset = 0; + vb2_load_fw_preamble(ctx); + + return 0; +} diff --git a/tests/vb2_recovery_reasons_tests.c b/tests/vb2_recovery_reasons_tests.c new file mode 100644 index 0000000..5def4d2 --- /dev/null +++ b/tests/vb2_recovery_reasons_tests.c @@ -0,0 +1,31 @@ +/* Copyright 2020 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for recovery reasons. + */ + +#include "2recovery_reasons.h" +#include "test_common.h" + +static void get_recovery_reason_string_tests(void) +{ + int i; + + /* Recovery string should be non-null for any code */ + for (i = 0; i < 0x100; i++) + TEST_PTR_NEQ(vb2_get_recovery_reason_string(i), NULL, + "Non-null reason"); + + /* Validity check on one of the strings */ + TEST_EQ(strcmp(vb2_get_recovery_reason_string(VB2_RECOVERY_GBB_HEADER), + "Error parsing GBB header"), 0, + "Recovery reason validity check"); +} + +int main(void) +{ + get_recovery_reason_string_tests(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_rsa_tests.sh b/tests/vb2_rsa_tests.sh new file mode 100755 index 0000000..903d38d --- /dev/null +++ b/tests/vb2_rsa_tests.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# Run tests for RSA Signature verification. + +# Load common constants and variables. +. "$(dirname "$0")/common.sh" + +set -e + +return_code=0 +TEST_FILE=${TESTCASE_DIR}/test_file + +function test_signatures { + algorithmcounter=0 + for keylen in ${key_lengths[@]} + do + for hashalgo in ${hash_algos[@]} + do + echo -e "For ${COL_YELLOW}RSA-$keylen and $hashalgo${COL_STOP}:" + ${BIN_DIR}/verify_data $algorithmcounter \ + ${TESTKEY_DIR}/key_rsa${keylen}.keyb \ + ${TEST_FILE}.rsa${keylen}_${hashalgo}.sig \ + ${TEST_FILE} + if [ $? -ne 0 ] + then + return_code=255 + fi + let algorithmcounter=algorithmcounter+1 + done + done + echo -e "Peforming ${COL_YELLOW}PKCS #1 v1.5 Padding Tests${COL_STOP}..." + ${TEST_DIR}/vb20_rsa_padding_tests ${TESTKEY_DIR}/rsa_padding_test_pubkey.keyb +} + +check_test_keys +echo "Testing signature verification..." +test_signatures + +exit $return_code + diff --git a/tests/vb2_rsa_utility_tests.c b/tests/vb2_rsa_utility_tests.c new file mode 100644 index 0000000..4ad5a95 --- /dev/null +++ b/tests/vb2_rsa_utility_tests.c @@ -0,0 +1,120 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include + +#include "2common.h" +#include "2rsa.h" +#include "2rsa_private.h" +#include "2sysincludes.h" +#include "file_keys.h" +#include "rsa_padding_test.h" +#include "test_common.h" +#include "vboot_api.h" +#include "vboot_test.h" + +/** + * Test RSA utility funcs + */ +static void test_utils(void) +{ + uint8_t sig[RSA1024NUMBYTES]; + struct vb2_public_key kbad = {.sig_alg = VB2_SIG_INVALID, + .hash_alg = VB2_HASH_INVALID}; + + /* Verify old and new algorithm count constants match */ + TEST_EQ(VB2_ALG_COUNT, VB2_ALG_COUNT, "Algorithm counts"); + + /* Crypto algorithm to sig algorithm mapping */ + TEST_EQ(vb2_crypto_to_signature(VB2_ALG_RSA1024_SHA1), + VB2_SIG_RSA1024, "Crypto map to RSA1024"); + TEST_EQ(vb2_crypto_to_signature(VB2_ALG_RSA2048_SHA256), + VB2_SIG_RSA2048, "Crypto map to RSA2048"); + TEST_EQ(vb2_crypto_to_signature(VB2_ALG_RSA4096_SHA256), + VB2_SIG_RSA4096, "Crypto map to RSA4096"); + TEST_EQ(vb2_crypto_to_signature(VB2_ALG_RSA8192_SHA512), + VB2_SIG_RSA8192, "Crypto map to RSA8192"); + TEST_EQ(vb2_crypto_to_signature(VB2_ALG_COUNT), + VB2_SIG_INVALID, "Crypto map to invalid"); + + /* Sig size */ + TEST_EQ(vb2_rsa_sig_size(VB2_SIG_RSA1024), RSA1024NUMBYTES, + "Sig size RSA1024"); + TEST_EQ(vb2_rsa_sig_size(VB2_SIG_RSA2048), RSA2048NUMBYTES, + "Sig size RSA2048"); + TEST_EQ(vb2_rsa_sig_size(VB2_SIG_RSA4096), RSA4096NUMBYTES, + "Sig size RSA4096"); + TEST_EQ(vb2_rsa_sig_size(VB2_SIG_RSA8192), RSA8192NUMBYTES, + "Sig size RSA8192"); + TEST_EQ(vb2_rsa_sig_size(VB2_SIG_RSA2048_EXP3), RSA2048NUMBYTES, + "Sig size RSA2048_EXP3"); + TEST_EQ(vb2_rsa_sig_size(VB2_SIG_RSA3072_EXP3), RSA3072NUMBYTES, + "Sig size RSA3072_EXP3"); + TEST_EQ(vb2_rsa_sig_size(VB2_SIG_INVALID), 0, + "Sig size invalid algorithm"); + TEST_EQ(vb2_rsa_sig_size(VB2_SIG_NONE), 0, + "Sig size no signing algorithm"); + + /* Packed key size */ + TEST_EQ(vb2_packed_key_size(VB2_SIG_RSA1024), + RSA1024NUMBYTES * 2 + sizeof(uint32_t) * 2, + "Packed key size VB2_SIG_RSA1024"); + TEST_EQ(vb2_packed_key_size(VB2_SIG_RSA2048), + RSA2048NUMBYTES * 2 + sizeof(uint32_t) * 2, + "Packed key size VB2_SIG_RSA2048"); + TEST_EQ(vb2_packed_key_size(VB2_SIG_RSA4096), + RSA4096NUMBYTES * 2 + sizeof(uint32_t) * 2, + "Packed key size VB2_SIG_RSA4096"); + TEST_EQ(vb2_packed_key_size(VB2_SIG_RSA8192), + RSA8192NUMBYTES * 2 + sizeof(uint32_t) * 2, + "Packed key size VB2_SIG_RSA8192"); + TEST_EQ(vb2_packed_key_size(VB2_SIG_RSA2048_EXP3), + RSA2048NUMBYTES * 2 + sizeof(uint32_t) * 2, + "Packed key size VB2_SIG_RSA2048_EXP3"); + TEST_EQ(vb2_packed_key_size(VB2_SIG_RSA3072_EXP3), + RSA3072NUMBYTES * 2 + sizeof(uint32_t) * 2, + "Packed key size VB2_SIG_RSA3072_EXP3"); + TEST_EQ(vb2_packed_key_size(VB2_SIG_INVALID), 0, + "Packed key size invalid algorithm"); + TEST_EQ(vb2_packed_key_size(VB2_SIG_NONE), 0, + "Packed key size no signing algorithm"); + + /* Test padding check with bad algorithm */ + memcpy(sig, signatures[0], sizeof(sig)); + TEST_EQ(vb2_check_padding(sig, &kbad), + VB2_ERROR_RSA_PADDING_SIZE, + "vb2_check_padding() bad padding algorithm/size"); + + /* Test safe memcmp */ + TEST_EQ(vb2_safe_memcmp("foo", "foo", 3), 0, "vb2_safe_memcmp() good"); + TEST_NEQ(vb2_safe_memcmp("foo", "bar", 3), 0, "vb2_safe_memcmp() bad"); + TEST_EQ(vb2_safe_memcmp("foo", "bar", 0), 0, "vb2_safe_memcmp() zero"); + + /* Test Montgomery >= */ + { + uint32_t n[4] = {4, 4, 4, 4}; + uint32_t a[4] = {4, 4, 4, 4}; + struct vb2_public_key k = { + .arrsize = 4, + .n = n, + }; + TEST_EQ(vb2_mont_ge(&k, a), 1, "mont_ge equal"); + + a[2] = 3; + TEST_EQ(vb2_mont_ge(&k, a), 0, "mont_ge less"); + + a[1] = 5; + TEST_EQ(vb2_mont_ge(&k, a), 0, "mont_ge greater"); + } +} + +int main(int argc, char* argv[]) +{ + /* Run tests */ + test_utils(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_secdata_firmware_tests.c b/tests/vb2_secdata_firmware_tests.c new file mode 100644 index 0000000..c1b0a73 --- /dev/null +++ b/tests/vb2_secdata_firmware_tests.c @@ -0,0 +1,168 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for firmware secure storage library. + */ + +#include "2api.h" +#include "2common.h" +#include "2crc8.h" +#include "2misc.h" +#include "2secdata.h" +#include "2secdata_struct.h" +#include "2sysincludes.h" +#include "test_common.h" + +static uint8_t workbuf[VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); +static struct vb2_context *ctx; +static struct vb2_shared_data *sd; +static struct vb2_secdata_firmware *sec; + +static void reset_common_data(void) +{ + memset(workbuf, 0xaa, sizeof(workbuf)); + TEST_SUCC(vb2api_init(workbuf, sizeof(workbuf), &ctx), + "vb2api_init failed"); + + sd = vb2_get_sd(ctx); + + /* Most tests assume we have passed fw_phase1() */ + sd->status |= VB2_SD_STATUS_RECOVERY_DECIDED; + + sec = (struct vb2_secdata_firmware *)ctx->secdata_firmware; +} + +static void test_changed(struct vb2_context *c, int changed, const char *why) +{ + if (changed) + TEST_NEQ(c->flags & VB2_CONTEXT_SECDATA_FIRMWARE_CHANGED, + 0, why); + else + TEST_EQ(c->flags & VB2_CONTEXT_SECDATA_FIRMWARE_CHANGED, + 0, why); + + c->flags &= ~VB2_CONTEXT_SECDATA_FIRMWARE_CHANGED; +}; + +static void secdata_firmware_test(void) +{ + uint32_t v = 1; + reset_common_data(); + + /* Check size constant */ + TEST_EQ(VB2_SECDATA_FIRMWARE_SIZE, sizeof(struct vb2_secdata_firmware), + "Struct size constant"); + + /* Blank data is invalid */ + memset(&ctx->secdata_firmware, 0xa6, sizeof(ctx->secdata_firmware)); + TEST_EQ(vb2api_secdata_firmware_check(ctx), + VB2_ERROR_SECDATA_FIRMWARE_CRC, "Check blank CRC"); + TEST_EQ(vb2_secdata_firmware_init(ctx), + VB2_ERROR_SECDATA_FIRMWARE_CRC, "Init blank CRC"); + + /* Ensure zeroed buffers are invalid (coreboot relies on this) */ + memset(&ctx->secdata_firmware, 0, sizeof(ctx->secdata_firmware)); + TEST_EQ(vb2_secdata_firmware_init(ctx), + VB2_ERROR_SECDATA_FIRMWARE_VERSION, + "Zeroed buffer (invalid version)"); + + /* Try with bad version */ + TEST_EQ(vb2api_secdata_firmware_create(ctx), VB2_SECDATA_FIRMWARE_SIZE, + "Create"); + sec->struct_version -= 1; + sec->crc8 = vb2_crc8(sec, offsetof(struct vb2_secdata_firmware, crc8)); + TEST_EQ(vb2api_secdata_firmware_check(ctx), + VB2_ERROR_SECDATA_FIRMWARE_VERSION, "Check invalid version"); + TEST_EQ(vb2_secdata_firmware_init(ctx), + VB2_ERROR_SECDATA_FIRMWARE_VERSION, "Init invalid version"); + + /* Create good data */ + vb2api_secdata_firmware_create(ctx); + TEST_SUCC(vb2api_secdata_firmware_check(ctx), "Check created CRC"); + TEST_SUCC(vb2_secdata_firmware_init(ctx), "Init created CRC"); + TEST_NEQ(sd->status & VB2_SD_STATUS_SECDATA_FIRMWARE_INIT, 0, + "Init set SD status"); + sd->status &= ~VB2_SD_STATUS_SECDATA_FIRMWARE_INIT; + test_changed(ctx, 1, "Create changes data"); + + /* Now corrupt it */ + ctx->secdata_firmware[2]++; + TEST_EQ(vb2api_secdata_firmware_check(ctx), + VB2_ERROR_SECDATA_FIRMWARE_CRC, "Check invalid CRC"); + TEST_EQ(vb2_secdata_firmware_init(ctx), + VB2_ERROR_SECDATA_FIRMWARE_CRC, "Init invalid CRC"); + + /* Read/write flags */ + vb2api_secdata_firmware_create(ctx); + vb2_secdata_firmware_init(ctx); + ctx->flags = 0; + v = vb2_secdata_firmware_get(ctx, VB2_SECDATA_FIRMWARE_FLAGS); + TEST_EQ(v, 0, "Flags created 0"); + test_changed(ctx, 0, "Get doesn't change data"); + vb2_secdata_firmware_set(ctx, VB2_SECDATA_FIRMWARE_FLAGS, 0x12); + test_changed(ctx, 1, "Set changes data"); + vb2_secdata_firmware_set(ctx, VB2_SECDATA_FIRMWARE_FLAGS, 0x12); + test_changed(ctx, 0, "Set again doesn't change data"); + v = vb2_secdata_firmware_get(ctx, VB2_SECDATA_FIRMWARE_FLAGS); + TEST_EQ(v, 0x12, "Flags changed"); + TEST_ABORT(vb2_secdata_firmware_set(ctx, VB2_SECDATA_FIRMWARE_FLAGS, + 0x100), + "Bad flags"); + + /* Read/write versions */ + v = vb2_secdata_firmware_get(ctx, VB2_SECDATA_FIRMWARE_VERSIONS); + TEST_EQ(v, 0, "Versions created 0"); + test_changed(ctx, 0, "Get doesn't change data"); + vb2_secdata_firmware_set(ctx, VB2_SECDATA_FIRMWARE_VERSIONS, + 0x123456ff); + test_changed(ctx, 1, "Set changes data"); + vb2_secdata_firmware_set(ctx, VB2_SECDATA_FIRMWARE_VERSIONS, + 0x123456ff); + test_changed(ctx, 0, "Set again doesn't change data"); + v = vb2_secdata_firmware_get(ctx, VB2_SECDATA_FIRMWARE_VERSIONS); + TEST_EQ(v, 0x123456ff, "Versions changed"); + + /* Invalid field fails */ + TEST_ABORT(vb2_secdata_firmware_get(ctx, -1), "Get invalid"); + TEST_ABORT(vb2_secdata_firmware_set(ctx, -1, 456), "Set invalid"); + test_changed(ctx, 0, "Set invalid field doesn't change data"); + + /* Read/write uninitialized data fails */ + sd->status &= ~VB2_SD_STATUS_SECDATA_FIRMWARE_INIT; + TEST_ABORT(vb2_secdata_firmware_get(ctx, + VB2_SECDATA_FIRMWARE_VERSIONS), + "Get uninitialized"); + test_changed(ctx, 0, "Get uninitialized doesn't change data"); + TEST_ABORT(vb2_secdata_firmware_set(ctx, VB2_SECDATA_FIRMWARE_VERSIONS, + 0x123456ff), + "Set uninitialized"); + test_changed(ctx, 0, "Set uninitialized doesn't change data"); + + /* Read/write uninitialized in recovery mode */ + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + TEST_EQ(vb2_secdata_firmware_get(ctx, VB2_SECDATA_FIRMWARE_VERSIONS), 0, + "Get uninitialized (recmode)"); + test_changed(ctx, 0, "Get uninitialized (recmode) doesn't change data"); + vb2_secdata_firmware_set(ctx, VB2_SECDATA_FIRMWARE_VERSIONS, + 0x123456ff); + test_changed(ctx, 0, "Set uninitialized (recmode) doesn't change data"); + + /* Read/write early in fw_phase1 */ + ctx->flags &= ~VB2_CONTEXT_RECOVERY_MODE; + sd->status &= ~VB2_SD_STATUS_RECOVERY_DECIDED; + TEST_EQ(vb2_secdata_firmware_get(ctx, VB2_SECDATA_FIRMWARE_VERSIONS), 0, + "Get uninitialized (phase1)"); + test_changed(ctx, 0, "Get uninitialized (phase1) doesn't change data"); + vb2_secdata_firmware_set(ctx, VB2_SECDATA_FIRMWARE_VERSIONS, + 0x123456ff); + test_changed(ctx, 0, "Set uninitialized (phase1) doesn't change data"); +} + +int main(int argc, char* argv[]) +{ + secdata_firmware_test(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_secdata_fwmp_tests.c b/tests/vb2_secdata_fwmp_tests.c new file mode 100644 index 0000000..79b0f55 --- /dev/null +++ b/tests/vb2_secdata_fwmp_tests.c @@ -0,0 +1,253 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for firmware management parameters (FWMP) library. + */ + +#include "2common.h" +#include "2misc.h" +#include "2secdata.h" +#include "2secdata_struct.h" +#include "test_common.h" + +static uint8_t workbuf[VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); +static struct vb2_context *ctx; +static struct vb2_gbb_header gbb; +static struct vb2_shared_data *sd; +static struct vb2_secdata_fwmp *sec; + +static void reset_common_data(void) +{ + memset(workbuf, 0xaa, sizeof(workbuf)); + TEST_SUCC(vb2api_init(workbuf, sizeof(workbuf), &ctx), + "vb2api_init failed"); + + sd = vb2_get_sd(ctx); + sd->status |= VB2_SD_STATUS_SECDATA_FWMP_INIT; + sd->status |= VB2_SD_STATUS_RECOVERY_DECIDED; + + memset(&gbb, 0, sizeof(gbb)); + + sec = (struct vb2_secdata_fwmp *)ctx->secdata_fwmp; + sec->struct_size = VB2_SECDATA_FWMP_MIN_SIZE; + sec->struct_version = VB2_SECDATA_FWMP_VERSION; + sec->flags = 0; + sec->crc8 = vb2_secdata_fwmp_crc(sec); +} + +/* Mocked functions */ + +struct vb2_gbb_header *vb2_get_gbb(struct vb2_context *c) +{ + return &gbb; +} + +static void check_init_test(void) +{ + uint8_t size; + + /* Check size constants */ + TEST_TRUE(sizeof(struct vb2_secdata_fwmp) >= VB2_SECDATA_FWMP_MIN_SIZE, + "Struct min size constant"); + TEST_TRUE(sizeof(struct vb2_secdata_fwmp) <= VB2_SECDATA_FWMP_MAX_SIZE, + "Struct max size constant"); + + /* struct_size too large */ + reset_common_data(); + sec->struct_size = VB2_SECDATA_FWMP_MAX_SIZE + 1; + sec->crc8 = vb2_secdata_fwmp_crc(sec); + size = sec->struct_size; + TEST_EQ(vb2api_secdata_fwmp_check(ctx, &size), + VB2_ERROR_SECDATA_FWMP_SIZE, "Check struct_size too large"); + TEST_EQ(vb2_secdata_fwmp_init(ctx), + VB2_ERROR_SECDATA_FWMP_SIZE, "Init struct_size too large"); + + /* struct_size too small */ + reset_common_data(); + sec->struct_size = VB2_SECDATA_FWMP_MIN_SIZE - 1; + sec->crc8 = vb2_secdata_fwmp_crc(sec); + size = VB2_SECDATA_FWMP_MIN_SIZE; + TEST_EQ(vb2api_secdata_fwmp_check(ctx, &size), + VB2_ERROR_SECDATA_FWMP_SIZE, "Check struct_size too small"); + + /* Need more data to reach minimum size */ + reset_common_data(); + sec->struct_size = VB2_SECDATA_FWMP_MIN_SIZE - 1; + sec->crc8 = vb2_secdata_fwmp_crc(sec); + size = 0; + TEST_EQ(vb2api_secdata_fwmp_check(ctx, &size), + VB2_ERROR_SECDATA_FWMP_INCOMPLETE, "Check more to reach MIN"); + TEST_EQ(vb2_secdata_fwmp_init(ctx), + VB2_ERROR_SECDATA_FWMP_INCOMPLETE, "Init more to reach MIN"); + + /* Need more data to reach full size */ + reset_common_data(); + sec->struct_size = VB2_SECDATA_FWMP_MIN_SIZE + 1; + sec->crc8 = vb2_secdata_fwmp_crc(sec); + size = VB2_SECDATA_FWMP_MIN_SIZE; + TEST_EQ(vb2api_secdata_fwmp_check(ctx, &size), + VB2_ERROR_SECDATA_FWMP_INCOMPLETE, "Check more for full size"); + + /* Bad data is invalid */ + reset_common_data(); + memset(&ctx->secdata_fwmp, 0xa6, sizeof(ctx->secdata_fwmp)); + sec->struct_size = VB2_SECDATA_FWMP_MIN_SIZE; + size = sec->struct_size; + TEST_EQ(vb2api_secdata_fwmp_check(ctx, &size), + VB2_ERROR_SECDATA_FWMP_CRC, "Check bad data CRC"); + TEST_EQ(vb2_secdata_fwmp_init(ctx), + VB2_ERROR_SECDATA_FWMP_CRC, "Init bad data CRC"); + + /* Bad CRC with corruption past minimum size */ + reset_common_data(); + sec->struct_size = VB2_SECDATA_FWMP_MIN_SIZE + 1; + sec->crc8 = vb2_secdata_fwmp_crc(sec); + size = sec->struct_size; + *((uint8_t *)sec + sec->struct_size - 1) += 1; + TEST_EQ(vb2api_secdata_fwmp_check(ctx, &size), + VB2_ERROR_SECDATA_FWMP_CRC, "Check corruption CRC"); + TEST_EQ(vb2_secdata_fwmp_init(ctx), + VB2_ERROR_SECDATA_FWMP_CRC, "Init corruption CRC"); + + /* Zeroed data is invalid */ + reset_common_data(); + memset(&ctx->secdata_fwmp, 0, sizeof(ctx->secdata_fwmp)); + sec->struct_size = VB2_SECDATA_FWMP_MIN_SIZE; + size = sec->struct_size; + TEST_EQ(vb2api_secdata_fwmp_check(ctx, &size), + VB2_ERROR_SECDATA_FWMP_VERSION, "Check zeroed data CRC"); + TEST_EQ(vb2_secdata_fwmp_init(ctx), + VB2_ERROR_SECDATA_FWMP_VERSION, "Init zeroed data CRC"); + + /* Major version too high */ + reset_common_data(); + sec->struct_version = ((VB2_SECDATA_FWMP_VERSION >> 4) + 1) << 4; + sec->crc8 = vb2_secdata_fwmp_crc(sec); + TEST_EQ(vb2api_secdata_fwmp_check(ctx, &size), + VB2_ERROR_SECDATA_FWMP_VERSION, "Check major too high"); + TEST_EQ(vb2_secdata_fwmp_init(ctx), + VB2_ERROR_SECDATA_FWMP_VERSION, "Init major too high"); + + /* Major version too low */ + reset_common_data(); + sec->struct_version = ((VB2_SECDATA_FWMP_VERSION >> 4) - 1) << 4; + sec->crc8 = vb2_secdata_fwmp_crc(sec); + TEST_EQ(vb2api_secdata_fwmp_check(ctx, &size), + VB2_ERROR_SECDATA_FWMP_VERSION, "Check major too low"); + TEST_EQ(vb2_secdata_fwmp_init(ctx), + VB2_ERROR_SECDATA_FWMP_VERSION, "Init major too low"); + + /* Minor version difference okay */ + reset_common_data(); + sec->struct_version += 1; + sec->crc8 = vb2_secdata_fwmp_crc(sec); + TEST_SUCC(vb2api_secdata_fwmp_check(ctx, &size), "Check minor okay"); + TEST_SUCC(vb2_secdata_fwmp_init(ctx), "Init minor okay"); + + /* Good FWMP data at minimum size */ + reset_common_data(); + TEST_SUCC(vb2api_secdata_fwmp_check(ctx, &size), "Check good (min)"); + TEST_SUCC(vb2_secdata_fwmp_init(ctx), "Init good (min)"); + TEST_NEQ(sd->status & VB2_SD_STATUS_SECDATA_FWMP_INIT, 0, + "Init flag set"); + + /* Good FWMP data at minimum + N size */ + reset_common_data(); + sec->struct_size = VB2_SECDATA_FWMP_MIN_SIZE + 1; + sec->crc8 = vb2_secdata_fwmp_crc(sec); + size = sec->struct_size; + TEST_SUCC(vb2api_secdata_fwmp_check(ctx, &size), "Check good (min+N)"); + TEST_SUCC(vb2_secdata_fwmp_init(ctx), "Init good (min+N)"); + TEST_NEQ(sd->status & VB2_SD_STATUS_SECDATA_FWMP_INIT, 0, + "Init flag set"); + + /* Skip data check when NO_SECDATA_FWMP set */ + reset_common_data(); + memset(&ctx->secdata_fwmp, 0xa6, sizeof(ctx->secdata_fwmp)); + ctx->flags |= VB2_CONTEXT_NO_SECDATA_FWMP; + TEST_EQ(vb2_secdata_fwmp_init(ctx), 0, + "Init skip data check when NO_SECDATA_FWMP set"); + TEST_NEQ(sd->status & VB2_SD_STATUS_SECDATA_FWMP_INIT, 0, + "Init flag set"); +} + +static void get_flag_test(void) +{ + /* Successfully returns value */ + reset_common_data(); + sec->flags |= 1; + TEST_EQ(vb2_secdata_fwmp_get_flag(ctx, 1), 1, + "Successfully returns flag value"); + + /* NO_SECDATA_FWMP */ + reset_common_data(); + sec->flags |= 1; + ctx->flags |= VB2_CONTEXT_NO_SECDATA_FWMP; + TEST_EQ(vb2_secdata_fwmp_get_flag(ctx, 1), 0, + "NO_SECDATA_FWMP forces default flag value"); + + /* FWMP hasn't been initialized (recovery mode) */ + reset_common_data(); + sd->status &= ~VB2_SD_STATUS_SECDATA_FWMP_INIT; + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + TEST_EQ(vb2_secdata_fwmp_get_flag(ctx, 0), 0, + "non-init in recovery mode forces default flag value"); + + /* FWMP hasn't been initialized (normal mode) */ + reset_common_data(); + sd->status &= ~VB2_SD_STATUS_SECDATA_FWMP_INIT; + TEST_ABORT(vb2_secdata_fwmp_get_flag(ctx, 0), + "non-init in normal mode triggers abort"); + + /* FWMP hasn't been initialized (before recovery decision) */ + reset_common_data(); + sd->status &= ~VB2_SD_STATUS_SECDATA_FWMP_INIT; + sd->status &= ~VB2_SD_STATUS_RECOVERY_DECIDED; + TEST_EQ(vb2_secdata_fwmp_get_flag(ctx, 0), 0, + "non-init in fw_phase1 forces default flag value"); +} + +static void get_dev_key_hash_test(void) +{ + /* CONTEXT_NO_SECDATA_FWMP */ + reset_common_data(); + ctx->flags |= VB2_CONTEXT_NO_SECDATA_FWMP; + TEST_TRUE(vb2_secdata_fwmp_get_dev_key_hash(ctx) == NULL, + "NO_SECDATA_FWMP forces NULL pointer"); + + /* FWMP hasn't been initialized (recovery mode) */ + reset_common_data(); + sd->status &= ~VB2_SD_STATUS_SECDATA_FWMP_INIT; + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + TEST_TRUE(vb2_secdata_fwmp_get_dev_key_hash(ctx) == NULL, + "non-init in recovery mode forces NULL pointer"); + + /* FWMP hasn't been initialized (normal mode) */ + reset_common_data(); + sd->status &= ~VB2_SD_STATUS_SECDATA_FWMP_INIT; + TEST_ABORT(vb2_secdata_fwmp_get_dev_key_hash(ctx), + "non-init in normal mode triggers abort"); + + /* FWMP hasn't been initialized (before recovery decision) */ + reset_common_data(); + sd->status &= ~VB2_SD_STATUS_SECDATA_FWMP_INIT; + sd->status &= ~VB2_SD_STATUS_RECOVERY_DECIDED; + TEST_TRUE(vb2_secdata_fwmp_get_dev_key_hash(ctx) == NULL, + "non-init in fw_phase1 forces NULL pointer"); + + /* Success case */ + reset_common_data(); + TEST_TRUE(vb2_secdata_fwmp_get_dev_key_hash(ctx) == + sec->dev_key_hash, "proper dev_key_hash pointer returned"); +} + +int main(int argc, char* argv[]) +{ + check_init_test(); + get_flag_test(); + get_dev_key_hash_test(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_secdata_kernel_tests.c b/tests/vb2_secdata_kernel_tests.c new file mode 100644 index 0000000..dc41f1a --- /dev/null +++ b/tests/vb2_secdata_kernel_tests.c @@ -0,0 +1,358 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for kernel secure storage library. + */ + +#include "2api.h" +#include "2common.h" +#include "2crc8.h" +#include "2misc.h" +#include "2secdata.h" +#include "2secdata_struct.h" +#include "2sysincludes.h" +#include "test_common.h" +#include "vboot_test.h" + +static uint8_t workbuf[VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); +static struct vb2_context *ctx; +static struct vb2_shared_data *sd; +static struct vb2_secdata_kernel_v0 *sec02; +static struct vb2_secdata_kernel_v1 *sec10; + +static void reset_common_data(void) +{ + memset(workbuf, 0xaa, sizeof(workbuf)); + TEST_SUCC(vb2api_init(workbuf, sizeof(workbuf), &ctx), + "vb2api_init failed"); + + sd = vb2_get_sd(ctx); + + /* Most tests assume we have passed fw_phase1() */ + sd->status |= VB2_SD_STATUS_RECOVERY_DECIDED; + + sec02 = (struct vb2_secdata_kernel_v0 *)ctx->secdata_kernel; + sec10 = (struct vb2_secdata_kernel_v1 *)ctx->secdata_kernel; +} + +static void test_init(struct vb2_shared_data *s, int init, const char *why) +{ + if (init) + TEST_NEQ(s->status & VB2_SD_STATUS_SECDATA_KERNEL_INIT, 0, why); + else + TEST_EQ(s->status & VB2_SD_STATUS_SECDATA_KERNEL_INIT, 0, why); +} + +static void test_changed(struct vb2_context *c, int changed, const char *why) +{ + if (changed) + TEST_NEQ(c->flags & VB2_CONTEXT_SECDATA_KERNEL_CHANGED, 0, why); + else + TEST_EQ(c->flags & VB2_CONTEXT_SECDATA_KERNEL_CHANGED, 0, why); + + c->flags &= ~VB2_CONTEXT_SECDATA_KERNEL_CHANGED; +} + +/* + * Version-independent tests + */ +static void secdata_kernel_test(void) +{ + uint8_t size; + + reset_common_data(); + + /* Blank data is invalid */ + size = VB2_SECDATA_KERNEL_MIN_SIZE; + memset(&ctx->secdata_kernel, 0xa6, size); + TEST_EQ(vb2api_secdata_kernel_check(ctx, &size), + VB2_ERROR_SECDATA_KERNEL_VERSION, "Check blank bad version"); + TEST_EQ(vb2_secdata_kernel_init(ctx), + VB2_ERROR_SECDATA_KERNEL_VERSION, "Init blank bad version"); + test_init(sd, 0, "Init set SD status"); + + /* Ensure zeroed buffers are invalid */ + size = VB2_SECDATA_KERNEL_MIN_SIZE; + memset(&ctx->secdata_kernel, 0, size); + TEST_EQ(vb2api_secdata_kernel_check(ctx, &size), + VB2_ERROR_SECDATA_KERNEL_VERSION, "Check zero bad version"); + TEST_EQ(vb2_secdata_kernel_init(ctx), + VB2_ERROR_SECDATA_KERNEL_VERSION, "Init zero incomplete"); + test_init(sd, 0, "Init set SD status"); + + /* Read data less than minimum size */ + size = VB2_SECDATA_KERNEL_MIN_SIZE - 1; + TEST_EQ(vb2api_secdata_kernel_check(ctx, &size), + VB2_ERROR_SECDATA_KERNEL_INCOMPLETE, "Check incomplete"); + TEST_EQ(size, VB2_SECDATA_KERNEL_MIN_SIZE, "Return minimum size"); +} + +static void secdata_kernel_test_v10(void) +{ + uint8_t size; + + reset_common_data(); + + /* Create good data */ + size = VB2_SECDATA_KERNEL_SIZE_V10; + TEST_EQ(vb2api_secdata_kernel_create(ctx), + VB2_SECDATA_KERNEL_SIZE_V10, "Create v1.0"); + TEST_SUCC(vb2api_secdata_kernel_check(ctx, &size), "Check created CRC"); + TEST_SUCC(vb2_secdata_kernel_init(ctx), "Init created CRC"); + test_init(sd, 1, "Init set SD status"); + test_changed(ctx, 1, "Create changes data"); + + /* Check excessive data */ + size = VB2_SECDATA_KERNEL_SIZE_V10 + 1; + TEST_SUCC(vb2api_secdata_kernel_check(ctx, &size), + "Check large v1.0 data"); + TEST_EQ(size, VB2_SECDATA_KERNEL_SIZE_V10, "Return expected size"); + + /* Check incomplete data */ + size = VB2_SECDATA_KERNEL_SIZE_V10 - 1; + vb2api_secdata_kernel_create(ctx); + TEST_EQ(vb2api_secdata_kernel_check(ctx, &size), + VB2_ERROR_SECDATA_KERNEL_INCOMPLETE, "Check incomplete"); + TEST_EQ(size, VB2_SECDATA_KERNEL_SIZE_V10, "Return expected size"); + + reset_common_data(); + + /* Bad version */ + size = VB2_SECDATA_KERNEL_SIZE_V10; + vb2api_secdata_kernel_create(ctx); + sec10->struct_version -= 1; + TEST_EQ(vb2api_secdata_kernel_check(ctx, &size), + VB2_ERROR_SECDATA_KERNEL_VERSION, "Check invalid version"); + TEST_EQ(vb2_secdata_kernel_init(ctx), + VB2_ERROR_SECDATA_KERNEL_VERSION, "Init invalid version"); + test_init(sd, 0, "Init set SD status"); + + /* Higher minor version */ + vb2api_secdata_kernel_create(ctx); + sec10->struct_version += 1; + TEST_SUCC(vb2api_secdata_kernel_check(ctx, &size), "Check v1.1 data"); + TEST_SUCC(vb2_secdata_kernel_init(ctx), "Init v1.1 data"); + test_init(sd, 1, "Init set SD status"); + + reset_common_data(); + + /* Higher major version */ + vb2api_secdata_kernel_create(ctx); + sec10->struct_version += 0x10; + TEST_EQ(vb2api_secdata_kernel_check(ctx, &size), + VB2_ERROR_SECDATA_KERNEL_VERSION, "Check v2.0 data"); + TEST_EQ(vb2_secdata_kernel_init(ctx), + VB2_ERROR_SECDATA_KERNEL_VERSION, "Init v2.0 data"); + test_init(sd, 0, "Init set SD status"); + + reset_common_data(); + + /* Corrupt data */ + size = VB2_SECDATA_KERNEL_SIZE_V10; + vb2api_secdata_kernel_create(ctx); + sec10->kernel_versions++; + TEST_EQ(vb2api_secdata_kernel_check(ctx, &size), + VB2_ERROR_SECDATA_KERNEL_CRC, "Check invalid CRC"); + TEST_EQ(vb2_secdata_kernel_init(ctx), + VB2_ERROR_SECDATA_KERNEL_CRC, "Init invalid CRC"); + test_init(sd, 0, "Init set SD status"); +} + +static void secdata_kernel_test_v02(void) +{ + uint8_t size; + + reset_common_data(); + + /* Create good data */ + size = VB2_SECDATA_KERNEL_SIZE_V02; + TEST_EQ(vb2api_secdata_kernel_create_v0(ctx), size, "Create v0.2"); + TEST_SUCC(vb2api_secdata_kernel_check(ctx, &size), "Check v0.2"); + TEST_SUCC(vb2_secdata_kernel_init(ctx), "Init created CRC"); + test_init(sd, 1, "Init set SD status"); + + /* Check excessive data */ + size = VB2_SECDATA_KERNEL_SIZE_V02 + 1; + TEST_SUCC(vb2api_secdata_kernel_check(ctx, &size), + "Check large v0.2 data"); + TEST_EQ(size, VB2_SECDATA_KERNEL_SIZE_V02, "Return expected size"); + + /* Check incomplete data */ + size = VB2_SECDATA_KERNEL_SIZE_V02 - 1; + TEST_EQ(vb2api_secdata_kernel_check(ctx, &size), + VB2_ERROR_SECDATA_KERNEL_INCOMPLETE, "Check small v0.2 data"); + TEST_EQ(size, VB2_SECDATA_KERNEL_SIZE_V02, "Return expected size"); + reset_common_data(); + + /* Corrupt data */ + vb2api_secdata_kernel_create_v0(ctx); + sec02->kernel_versions++; + TEST_EQ(vb2api_secdata_kernel_check(ctx, &size), + VB2_ERROR_SECDATA_KERNEL_CRC, "Check invalid CRC"); + TEST_EQ(vb2_secdata_kernel_init(ctx), + VB2_ERROR_SECDATA_KERNEL_CRC, "Init invalid CRC"); +} + +static void secdata_kernel_access_test_v10(void) +{ + uint32_t v = 1; + const uint8_t *p; + uint8_t ec_hash[VB2_SHA256_DIGEST_SIZE]; + + reset_common_data(); + + /* Read/write versions */ + vb2api_secdata_kernel_create(ctx); + vb2_secdata_kernel_init(ctx); + ctx->flags = 0; + v = vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_VERSIONS); + TEST_EQ(v, 0, "Versions created 0"); + test_changed(ctx, 0, "Get doesn't change data"); + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_VERSIONS, 0x123456ff); + test_changed(ctx, 1, "Set changes data"); + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_VERSIONS, 0x123456ff); + test_changed(ctx, 0, "Set again doesn't change data"); + v = vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_VERSIONS); + TEST_EQ(v, 0x123456ff, "Versions changed"); + + /* Read/write flags */ + vb2api_secdata_kernel_create(ctx); + vb2_secdata_kernel_init(ctx); + ctx->flags = 0; + v = vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_FLAGS); + TEST_EQ(v, 0, "Flags created 0"); + test_changed(ctx, 0, "Get doesn't change data"); + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_FLAGS, 0x12); + test_changed(ctx, 1, "Set changes data"); + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_FLAGS, 0x12); + test_changed(ctx, 0, "Set again doesn't change data"); + v = vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_FLAGS); + TEST_EQ(v, 0x12, "Flags changed"); + TEST_ABORT(vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_FLAGS, 0x100), + "Bad flags"); + + /* Invalid field fails */ + TEST_ABORT(vb2_secdata_kernel_get(ctx, -1), "Get invalid"); + TEST_ABORT(vb2_secdata_kernel_set(ctx, -1, 456), "Set invalid"); + test_changed(ctx, 0, "Set invalid field doesn't change data"); + + /* Read/write uninitialized data fails */ + sd->status &= ~VB2_SD_STATUS_SECDATA_KERNEL_INIT; + TEST_ABORT(vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_VERSIONS), + "Get uninitialized"); + test_changed(ctx, 0, "Get uninitialized doesn't change data"); + TEST_ABORT(vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_VERSIONS, + 0x123456ff), + "Set uninitialized"); + test_changed(ctx, 0, "Set uninitialized doesn't change data"); + + /* Read/write uninitialized in recovery mode */ + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + TEST_EQ(vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_VERSIONS), 0, + "Get uninitialized (recmode)"); + test_changed(ctx, 0, "Get uninitialized (recmode) doesn't change data"); + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_VERSIONS, + 0x123456ff); + test_changed(ctx, 0, "Set uninitialized (recmode) doesn't change data"); + + /* Read/write early in fw_phase1 */ + ctx->flags &= ~VB2_CONTEXT_RECOVERY_MODE; + sd->status &= ~VB2_SD_STATUS_RECOVERY_DECIDED; + TEST_EQ(vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_VERSIONS), 0, + "Get uninitialized (phase1)"); + test_changed(ctx, 0, "Get uninitialized (phase1) doesn't change data"); + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_VERSIONS, + 0x123456ff); + test_changed(ctx, 0, "Set uninitialized (phase1) doesn't change data"); + + /* Test EC hash set */ + reset_common_data(); + vb2api_secdata_kernel_create(ctx); + vb2_secdata_kernel_init(ctx); + memset(ec_hash, 0xaa, sizeof(ec_hash)); + vb2_secdata_kernel_set_ec_hash(ctx, ec_hash); + TEST_EQ(memcmp(ec_hash, sec10->ec_hash, sizeof(ec_hash)), 0, + "Check EC hash"); + test_changed(ctx, 1, "Set EC hash changes data"); + + sec10->struct_version = VB2_SECDATA_KERNEL_VERSION_V02; + TEST_ABORT(vb2_secdata_kernel_set_ec_hash(ctx, ec_hash), + "Can't set EC hash for v0.2"); + test_changed(ctx, 0, "Failing to set EC hash doesn't change data"); + sec10->struct_version = VB2_SECDATA_KERNEL_VERSION_V10; + + sd->status &= ~VB2_SD_STATUS_SECDATA_KERNEL_INIT; + TEST_ABORT(vb2_secdata_kernel_set_ec_hash(ctx, ec_hash), + "Can't set EC hash before init"); + sd->status |= VB2_SD_STATUS_SECDATA_KERNEL_INIT; + + /* Test EC hash get */ + p = vb2_secdata_kernel_get_ec_hash(ctx); + TEST_PTR_EQ(p, sec10->ec_hash, "Get EC hash returns pointer"); + test_changed(ctx, 0, "Get EC hash doesn't change data"); + + sec10->struct_version = VB2_SECDATA_KERNEL_VERSION_V02; + TEST_PTR_EQ(vb2_secdata_kernel_get_ec_hash(ctx), NULL, + "Can't get EC hash for v0.2"); + sec10->struct_version = VB2_SECDATA_KERNEL_VERSION_V10; + + sd->status &= ~VB2_SD_STATUS_SECDATA_KERNEL_INIT; + TEST_ABORT(vb2_secdata_kernel_get_ec_hash(ctx), + "Can't get EC hash before init"); + sd->status |= VB2_SD_STATUS_SECDATA_KERNEL_INIT; +} + +static void secdata_kernel_access_test_v02(void) +{ + uint32_t v = 1; + reset_common_data(); + + /* Read/write versions */ + vb2api_secdata_kernel_create_v0(ctx); + vb2_secdata_kernel_init(ctx); + ctx->flags = 0; + v = vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_VERSIONS); + TEST_EQ(v, 0, "Versions created 0"); + test_changed(ctx, 0, "Get doesn't change data"); + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_VERSIONS, 0x123456ff); + test_changed(ctx, 1, "Set changes data"); + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_VERSIONS, 0x123456ff); + test_changed(ctx, 0, "Set again doesn't change data"); + v = vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_VERSIONS); + TEST_EQ(v, 0x123456ff, "Versions changed"); + + /* Read/write flags: should be no-op for v0 */ + TEST_EQ(vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_FLAGS), 0, + "Get flags"); + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_FLAGS, 0x1); + TEST_EQ(vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_FLAGS), 0, + "Get flags again"); + + /* Invalid field fails */ + TEST_ABORT(vb2_secdata_kernel_get(ctx, -1), "Get invalid"); + TEST_ABORT(vb2_secdata_kernel_set(ctx, -1, 456), "Set invalid"); + test_changed(ctx, 0, "Set invalid field doesn't change data"); + + /* Read/write uninitialized data fails */ + sd->status &= ~VB2_SD_STATUS_SECDATA_KERNEL_INIT; + TEST_ABORT(vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_VERSIONS), + "Get uninitialized"); + test_changed(ctx, 0, "Get uninitialized doesn't change data"); + TEST_ABORT(vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_VERSIONS, + 0x123456ff), + "Set uninitialized"); + test_changed(ctx, 0, "Set uninitialized doesn't change data"); +} + +int main(int argc, char* argv[]) +{ + secdata_kernel_test(); + secdata_kernel_test_v10(); + secdata_kernel_test_v02(); + secdata_kernel_access_test_v10(); + secdata_kernel_access_test_v02(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_sha256_x86_tests.c b/tests/vb2_sha256_x86_tests.c new file mode 100644 index 0000000..06ba12e --- /dev/null +++ b/tests/vb2_sha256_x86_tests.c @@ -0,0 +1,137 @@ +/* Copyright 2021 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* FIPS 180-2 Tests for message digest functions. */ + +#include +#include + +#include "2api.h" +#include "2sha.h" +#include "sha_test_vectors.h" +#include "test_common.h" + +vb2_error_t vb2_digest_buffer(const uint8_t *buf, uint32_t size, + enum vb2_hash_algorithm hash_alg, uint8_t *digest, + uint32_t digest_size) +{ + VB2_TRY(vb2ex_hwcrypto_digest_init(hash_alg, size)); + VB2_TRY(vb2ex_hwcrypto_digest_extend(buf, size)); + + return vb2ex_hwcrypto_digest_finalize(digest, digest_size); + +} + +static void sha256_tests(void) +{ + uint8_t digest[VB2_SHA256_DIGEST_SIZE]; + uint8_t *test_inputs[3]; + const uint8_t expect_multiple[VB2_SHA256_DIGEST_SIZE] = { + 0x07, 0x08, 0xb4, 0xca, 0x46, 0x4c, 0x40, 0x39, + 0x07, 0x06, 0x88, 0x80, 0x30, 0x55, 0x5d, 0x86, + 0x0e, 0x4a, 0x0d, 0x2b, 0xc6, 0xc4, 0x87, 0x39, + 0x2c, 0x16, 0x55, 0xb0, 0x82, 0x13, 0x16, 0x29 }; + int i; + + test_inputs[0] = (uint8_t *) oneblock_msg; + test_inputs[1] = (uint8_t *) multiblock_msg1; + test_inputs[2] = (uint8_t *) long_msg; + + for (i = 0; i < 3; i++) { + TEST_SUCC(vb2_digest_buffer(test_inputs[i], + strlen((char *)test_inputs[i]), + VB2_HASH_SHA256, + digest, sizeof(digest)), + "vb2_digest_buffer() SHA256"); + TEST_EQ(memcmp(digest, sha256_results[i], sizeof(digest)), + 0, "SHA-256 digest"); + } + + TEST_EQ(vb2_digest_buffer(test_inputs[0], + strlen((char *)test_inputs[0]), + VB2_HASH_SHA256, digest, sizeof(digest) - 1), + VB2_ERROR_SHA_FINALIZE_DIGEST_SIZE, + "vb2_digest_buffer() too small"); + + /* Test multiple small extends */ + vb2ex_hwcrypto_digest_init(VB2_HASH_SHA256, 15); + vb2ex_hwcrypto_digest_extend((uint8_t *)"test1", 5); + vb2ex_hwcrypto_digest_extend((uint8_t *)"test2", 5); + vb2ex_hwcrypto_digest_extend((uint8_t *)"test3", 5); + vb2ex_hwcrypto_digest_finalize(digest, VB2_SHA256_DIGEST_SIZE); + TEST_EQ(memcmp(digest, expect_multiple, sizeof(digest)), 0, + "SHA-256 multiple extends"); + + TEST_EQ(vb2_hash_block_size(VB2_HASH_SHA256), VB2_SHA256_BLOCK_SIZE, + "vb2_hash_block_size(VB2_HASH_SHA256)"); + +} + +static void known_value_tests(void) +{ + const char sentinel[] = "keepme"; + union { + struct vb2_hash hash; + char overflow[sizeof(struct vb2_hash) + 8]; + } test; + +#define TEST_KNOWN_VALUE(algo, str, value) \ + TEST_EQ(vb2_digest_size(algo), sizeof(value) - 1, \ + "Known hash size " #algo ": " #str); \ + { \ + char *sent_base = test.overflow + \ + offsetof(struct vb2_hash, raw) + sizeof(value) - 1; \ + strcpy(sent_base, sentinel); \ + strcpy(sent_base, sentinel); \ + TEST_SUCC(vb2_digest_buffer((const uint8_t *)str, \ + sizeof(str) - 1, \ + algo, test.hash.raw, \ + vb2_digest_size(algo)), \ + "Calculate known hash " #algo ": " #str); \ + TEST_EQ(memcmp(test.hash.raw, value, sizeof(value) - 1), 0, \ + "Known hash " #algo ": " #str); \ + TEST_EQ(strcmp(sent_base, sentinel), 0, \ + "Overflow known hash " #algo ": " #str); \ + } + + TEST_KNOWN_VALUE(VB2_HASH_SHA256, "", + "\xe3\xb0\xc4\x42\x98\xfc\x1c\x14\x9a\xfb\xf4\xc8\x99\x6f\xb9" + "\x24\x27\xae\x41\xe4\x64\x9b\x93\x4c\xa4\x95\x99\x1b\x78\x52" + "\xb8\x55"); + + const char long_test_string[] = "abcdefghbcdefghicdefghijdefghijkefgh" + "ijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrs" + "mnopqrstnopqrstu"; + TEST_KNOWN_VALUE(VB2_HASH_SHA256, long_test_string, + "\xcf\x5b\x16\xa7\x78\xaf\x83\x80\x03\x6c\xe5\x9e\x7b\x04\x92" + "\x37\x0b\x24\x9b\x11\xe8\xf0\x7a\x51\xaf\xac\x45\x03\x7a\xfe" + "\xe9\xd1"); + + /* vim helper to escape hex: :s/\([a-f0-9]\{2\}\)/\\x\1/g */ +#undef TEST_KNOWN_VALUE +} + +int main(int argc, char *argv[]) +{ + uint32_t a, b = 0, c, d; + /* EAX = 07H, sub-leaf 0 */ + __get_cpuid_count(7, 0, &a, &b, &c, &d); + if ((b & bit_SHA) == 0) { + fprintf(stderr, "SHA-NI not supported.\n"); + return 254; + } + + /* Initialize long_msg with 'a' x 1,000,000 */ + long_msg = (char *) malloc(1000001); + memset(long_msg, 'a', 1000000); + long_msg[1000000]=0; + + sha256_tests(); + known_value_tests(); + + free(long_msg); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_sha_api_tests.c b/tests/vb2_sha_api_tests.c new file mode 100644 index 0000000..cb58f7b --- /dev/null +++ b/tests/vb2_sha_api_tests.c @@ -0,0 +1,137 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for vb2_hash_(calculate|verify) functions. + */ + +#include "2return_codes.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "test_common.h" + +uint8_t mock_sha1[] = {0x1, 0x3, 0x5, 0x2, 0x4, 0x6, 0xa, 0xb, 0xc, 0xd, + 0xd, 0xe, 0xa, 0xd, 0xb, 0xe, 0xe, 0xf, 0x0, 0xf0}; +_Static_assert(sizeof(mock_sha1) == VB2_SHA1_DIGEST_SIZE, ""); + +struct vb2_hash mock_hash; +uint8_t mock_buffer[] = "Mock Buffer"; + +vb2_error_t mock_init_rv; +vb2_error_t mock_extend_rv; +vb2_error_t mock_finalize_rv; + +static void reset_common_data(void) +{ + memset(&mock_hash, 0xaa, sizeof(mock_hash)); + + mock_init_rv = VB2_SUCCESS; + mock_extend_rv = VB2_SUCCESS; + mock_finalize_rv = VB2_SUCCESS; +} + +vb2_error_t vb2_digest_init(struct vb2_digest_context *dc, + enum vb2_hash_algorithm hash_alg) +{ + if (hash_alg != VB2_HASH_SHA1) + return VB2_ERROR_MOCK; + return mock_init_rv; +} + +vb2_error_t vb2_digest_extend(struct vb2_digest_context *dc, const uint8_t *buf, + uint32_t size) +{ + TEST_PTR_EQ(buf, mock_buffer, "digest_extend unexpected buf"); + TEST_EQ(size, sizeof(mock_buffer), "digest_extend unexpected size"); + return mock_extend_rv; +} + +vb2_error_t vb2_digest_finalize(struct vb2_digest_context *dc, uint8_t *digest, + uint32_t size) +{ + TEST_EQ(size, VB2_SHA1_DIGEST_SIZE, "digest_finalize unexpected size"); + memcpy(digest, mock_sha1, size); + return mock_finalize_rv; +} + +static void vb2_hash_cbfs_compatibility_test(void) +{ + /* 'algo' used to be represented as a 4-byte big-endian in CBFS. Confirm + that the new representation is binary compatible for small values. */ + union { + struct vb2_hash hash; + struct { + uint32_t be32; + uint8_t bytes[0]; + }; + } test = {0}; + + test.be32 = htobe32(0xa5); + TEST_EQ(test.hash.algo, 0xa5, "vb2_hash algo compatible to CBFS attr"); + TEST_PTR_EQ(&test.hash.raw, &test.bytes, " digest offset matches"); +} + +static void vb2_hash_calculate_tests(void) +{ + reset_common_data(); + TEST_SUCC(vb2_hash_calculate(&mock_buffer, sizeof(mock_buffer), + VB2_HASH_SHA1, &mock_hash), + "hash_calculate success"); + TEST_SUCC(memcmp(mock_hash.sha1, mock_sha1, sizeof(mock_sha1)), + " got the right hash"); + TEST_EQ(mock_hash.algo, VB2_HASH_SHA1, " set algo correctly"); + + reset_common_data(); + mock_init_rv = VB2_ERROR_MOCK; + TEST_EQ(vb2_hash_calculate(mock_buffer, sizeof(mock_buffer), + VB2_HASH_SHA1, &mock_hash), + VB2_ERROR_MOCK, "hash_calculate init error"); + + reset_common_data(); + mock_extend_rv = VB2_ERROR_MOCK; + TEST_EQ(vb2_hash_calculate(mock_buffer, sizeof(mock_buffer), + VB2_HASH_SHA1, &mock_hash), + VB2_ERROR_MOCK, "hash_calculate extend error"); + + reset_common_data(); + mock_finalize_rv = VB2_ERROR_MOCK; + TEST_EQ(vb2_hash_calculate(mock_buffer, sizeof(mock_buffer), + VB2_HASH_SHA1, &mock_hash), + VB2_ERROR_MOCK, "hash_calculate finalize error"); +} + +static void vb2_hash_verify_tests(void) +{ + reset_common_data(); + + memcpy(mock_hash.sha1, mock_sha1, sizeof(mock_sha1)); + mock_hash.algo = VB2_HASH_SHA1; + TEST_SUCC(vb2_hash_verify(mock_buffer, sizeof(mock_buffer), + &mock_hash), "hash_verify success"); + + memcpy(mock_hash.sha1, mock_sha1, sizeof(mock_sha1)); + mock_hash.algo = VB2_HASH_SHA256; + TEST_EQ(vb2_hash_verify(mock_buffer, sizeof(mock_buffer), + &mock_hash), VB2_ERROR_MOCK, + "hash_verify wrong algo"); + + memcpy(mock_hash.sha1, mock_sha1, sizeof(mock_sha1)); + mock_hash.sha1[5] = 0xfe; + mock_hash.algo = VB2_HASH_SHA1; + TEST_EQ(vb2_hash_verify(mock_buffer, sizeof(mock_buffer), + &mock_hash), VB2_ERROR_SHA_MISMATCH, + "hash_verify mismatch"); +} + +int main(int argc, char *argv[]) +{ + TEST_EQ(sizeof(mock_hash), + offsetof(struct vb2_hash, raw) + VB2_SHA512_DIGEST_SIZE, + "tests run with all SHA algorithms enabled"); + + vb2_hash_cbfs_compatibility_test(); + vb2_hash_calculate_tests(); + vb2_hash_verify_tests(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vb2_sha_tests.c b/tests/vb2_sha_tests.c new file mode 100644 index 0000000..a14af65 --- /dev/null +++ b/tests/vb2_sha_tests.c @@ -0,0 +1,264 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* FIPS 180-2 Tests for message digest functions. */ + +#include + +#include "2return_codes.h" +#include "2rsa.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "sha_test_vectors.h" +#include "test_common.h" + +static void sha1_tests(void) +{ + uint8_t digest[VB2_SHA1_DIGEST_SIZE]; + uint8_t *test_inputs[3]; + int i; + + test_inputs[0] = (uint8_t *) oneblock_msg; + test_inputs[1] = (uint8_t *) multiblock_msg1; + test_inputs[2] = (uint8_t *) long_msg; + + for (i = 0; i < 3; i++) { + TEST_SUCC(vb2_digest_buffer(test_inputs[i], + strlen((char *)test_inputs[i]), + VB2_HASH_SHA1, + digest, sizeof(digest)), + "vb2_digest_buffer() SHA1"); + TEST_EQ(memcmp(digest, sha1_results[i], sizeof(digest)), + 0, "SHA1 digest"); + } + + TEST_EQ(vb2_digest_buffer(test_inputs[0], + strlen((char *)test_inputs[0]), + VB2_HASH_SHA1, digest, sizeof(digest) - 1), + VB2_ERROR_SHA_FINALIZE_DIGEST_SIZE, + "vb2_digest_buffer() too small"); + + TEST_EQ(vb2_hash_block_size(VB2_HASH_SHA1), VB2_SHA1_BLOCK_SIZE, + "vb2_hash_block_size(VB2_HASH_SHA1)"); +} + +static void sha256_tests(void) +{ + uint8_t digest[VB2_SHA256_DIGEST_SIZE]; + uint8_t *test_inputs[3]; + struct vb2_sha256_context ctx; + const uint8_t expect_multiple[VB2_SHA256_DIGEST_SIZE] = { + 0x07, 0x08, 0xb4, 0xca, 0x46, 0x4c, 0x40, 0x39, + 0x07, 0x06, 0x88, 0x80, 0x30, 0x55, 0x5d, 0x86, + 0x0e, 0x4a, 0x0d, 0x2b, 0xc6, 0xc4, 0x87, 0x39, + 0x2c, 0x16, 0x55, 0xb0, 0x82, 0x13, 0x16, 0x29 }; + const uint8_t extend_from[VB2_SHA256_DIGEST_SIZE] = { 0x00, }; + const uint8_t extend_by[VB2_SHA256_BLOCK_SIZE] = { 0x00, }; + const uint8_t expected_extend[VB2_SHA256_DIGEST_SIZE] = { + 0x7c, 0xa5, 0x16, 0x14, 0x42, 0x5c, 0x3b, 0xa8, 0xce, 0x54, + 0xdd, 0x2f, 0xc2, 0x02, 0x0a, 0xe7, 0xb6, 0xe5, 0x74, 0xd1, + 0x98, 0x13, 0x6d, 0x0f, 0xae, 0x7e, 0x26, 0xcc, 0xbf, 0x0b, + 0xe7, 0xa6 }; + int i; + + test_inputs[0] = (uint8_t *) oneblock_msg; + test_inputs[1] = (uint8_t *) multiblock_msg1; + test_inputs[2] = (uint8_t *) long_msg; + + for (i = 0; i < 3; i++) { + TEST_SUCC(vb2_digest_buffer(test_inputs[i], + strlen((char *)test_inputs[i]), + VB2_HASH_SHA256, + digest, sizeof(digest)), + "vb2_digest_buffer() SHA256"); + TEST_EQ(memcmp(digest, sha256_results[i], sizeof(digest)), + 0, "SHA-256 digest"); + } + + TEST_EQ(vb2_digest_buffer(test_inputs[0], + strlen((char *)test_inputs[0]), + VB2_HASH_SHA256, digest, sizeof(digest) - 1), + VB2_ERROR_SHA_FINALIZE_DIGEST_SIZE, + "vb2_digest_buffer() too small"); + + /* Test multiple small extends */ + vb2_sha256_init(&ctx, VB2_HASH_SHA256); + vb2_sha256_update(&ctx, (uint8_t *)"test1", 5); + vb2_sha256_update(&ctx, (uint8_t *)"test2", 5); + vb2_sha256_update(&ctx, (uint8_t *)"test3", 5); + vb2_sha256_finalize(&ctx, digest, VB2_HASH_SHA256); + TEST_EQ(memcmp(digest, expect_multiple, sizeof(digest)), 0, + "SHA-256 multiple extends"); + + TEST_EQ(vb2_hash_block_size(VB2_HASH_SHA256), VB2_SHA256_BLOCK_SIZE, + "vb2_hash_block_size(VB2_HASH_SHA256)"); + + /* Test SHA256 hash extend */ + vb2_sha256_extend(extend_from, extend_by, digest); + TEST_SUCC(memcmp(digest, expected_extend, sizeof(digest)), NULL); +} + +static void sha512_tests(void) +{ + uint8_t digest[VB2_SHA512_DIGEST_SIZE]; + uint8_t *test_inputs[3]; + int i; + + test_inputs[0] = (uint8_t *) oneblock_msg; + test_inputs[1] = (uint8_t *) multiblock_msg2; + test_inputs[2] = (uint8_t *) long_msg; + + for (i = 0; i < 3; i++) { + TEST_SUCC(vb2_digest_buffer(test_inputs[i], + strlen((char *)test_inputs[i]), + VB2_HASH_SHA512, + digest, sizeof(digest)), + "vb2_digest_buffer() SHA512"); + TEST_EQ(memcmp(digest, sha512_results[i], sizeof(digest)), + 0, "SHA-512 digest"); + } + + TEST_EQ(vb2_digest_buffer(test_inputs[0], + strlen((char *)test_inputs[0]), + VB2_HASH_SHA512, digest, sizeof(digest) - 1), + VB2_ERROR_SHA_FINALIZE_DIGEST_SIZE, + "vb2_digest_buffer() too small"); + + TEST_EQ(vb2_hash_block_size(VB2_HASH_SHA512), VB2_SHA512_BLOCK_SIZE, + "vb2_hash_block_size(VB2_HASH_SHA512)"); +} + +static void misc_tests(void) +{ + uint8_t digest[VB2_SHA512_DIGEST_SIZE]; + struct vb2_digest_context dc; + + /* Crypto algorithm to hash algorithm mapping */ + TEST_EQ(vb2_crypto_to_hash(VB2_ALG_RSA1024_SHA1), VB2_HASH_SHA1, + "Crypto map to SHA1"); + TEST_EQ(vb2_crypto_to_hash(VB2_ALG_RSA2048_SHA256), VB2_HASH_SHA256, + "Crypto map to SHA256"); + TEST_EQ(vb2_crypto_to_hash(VB2_ALG_RSA4096_SHA256), VB2_HASH_SHA256, + "Crypto map to SHA256 2"); + TEST_EQ(vb2_crypto_to_hash(VB2_ALG_RSA8192_SHA512), VB2_HASH_SHA512, + "Crypto map to SHA512"); + TEST_EQ(vb2_crypto_to_hash(VB2_ALG_COUNT), VB2_HASH_INVALID, + "Crypto map to invalid"); + + TEST_EQ(vb2_digest_size(VB2_HASH_INVALID), 0, + "digest size invalid alg"); + + TEST_EQ(vb2_hash_block_size(VB2_HASH_INVALID), 0, + "vb2_hash_block_size(VB2_HASH_INVALID)"); + + TEST_EQ(vb2_digest_buffer((uint8_t *)oneblock_msg, strlen(oneblock_msg), + VB2_HASH_INVALID, digest, sizeof(digest)), + VB2_ERROR_SHA_INIT_ALGORITHM, + "vb2_digest_buffer() invalid alg"); + + /* Test bad algorithm inside extend and finalize */ + vb2_digest_init(&dc, VB2_HASH_SHA256); + dc.hash_alg = VB2_HASH_INVALID; + TEST_EQ(vb2_digest_extend(&dc, digest, sizeof(digest)), + VB2_ERROR_SHA_EXTEND_ALGORITHM, + "vb2_digest_extend() invalid alg"); + TEST_EQ(vb2_digest_finalize(&dc, digest, sizeof(digest)), + VB2_ERROR_SHA_FINALIZE_ALGORITHM, + "vb2_digest_finalize() invalid alg"); +} + +static void known_value_tests(void) +{ + const char sentinel[] = "keepme"; + union { + struct vb2_hash hash; + char overflow[sizeof(struct vb2_hash) + 8]; + } test; + + +#define TEST_KNOWN_VALUE(algo, str, value) \ + TEST_EQ(vb2_digest_size(algo), sizeof(value) - 1, \ + "Known hash size " #algo ": " #str); \ + { \ + char *sent_base = test.overflow + \ + offsetof(struct vb2_hash, raw) + sizeof(value) - 1; \ + strcpy(sent_base, sentinel); \ + TEST_SUCC(vb2_hash_calculate(str, sizeof(str) - 1, \ + algo, &test.hash), \ + "Calculate known hash " #algo ": " #str); \ + TEST_EQ(memcmp(test.hash.raw, value, sizeof(value) - 1), 0, \ + "Known hash " #algo ": " #str); \ + TEST_EQ(strcmp(sent_base, sentinel), 0, \ + "Overflow known hash " #algo ": " #str); \ + } + + TEST_KNOWN_VALUE(VB2_HASH_SHA1, "", + "\xda\x39\xa3\xee\x5e\x6b\x4b\x0d\x32\x55\xbf\xef\x95\x60\x18" + "\x90\xaf\xd8\x07\x09"); + TEST_KNOWN_VALUE(VB2_HASH_SHA256, "", + "\xe3\xb0\xc4\x42\x98\xfc\x1c\x14\x9a\xfb\xf4\xc8\x99\x6f\xb9" + "\x24\x27\xae\x41\xe4\x64\x9b\x93\x4c\xa4\x95\x99\x1b\x78\x52" + "\xb8\x55"); + TEST_KNOWN_VALUE(VB2_HASH_SHA512, "", + "\xcf\x83\xe1\x35\x7e\xef\xb8\xbd\xf1\x54\x28\x50\xd6\x6d\x80" + "\x07\xd6\x20\xe4\x05\x0b\x57\x15\xdc\x83\xf4\xa9\x21\xd3\x6c" + "\xe9\xce\x47\xd0\xd1\x3c\x5d\x85\xf2\xb0\xff\x83\x18\xd2\x87" + "\x7e\xec\x2f\x63\xb9\x31\xbd\x47\x41\x7a\x81\xa5\x38\x32\x7a" + "\xf9\x27\xda\x3e"); + TEST_KNOWN_VALUE(VB2_HASH_SHA224, "", + "\xd1\x4a\x02\x8c\x2a\x3a\x2b\xc9\x47\x61\x02\xbb\x28\x82\x34" + "\xc4\x15\xa2\xb0\x1f\x82\x8e\xa6\x2a\xc5\xb3\xe4\x2f"); + TEST_KNOWN_VALUE(VB2_HASH_SHA384, "", + "\x38\xb0\x60\xa7\x51\xac\x96\x38\x4c\xd9\x32\x7e\xb1\xb1\xe3" + "\x6a\x21\xfd\xb7\x11\x14\xbe\x07\x43\x4c\x0c\xc7\xbf\x63\xf6" + "\xe1\xda\x27\x4e\xde\xbf\xe7\x6f\x65\xfb\xd5\x1a\xd2\xf1\x48" + "\x98\xb9\x5b"); + + const char long_test_string[] = "abcdefghbcdefghicdefghijdefghijkefgh" + "ijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrs" + "mnopqrstnopqrstu"; + TEST_KNOWN_VALUE(VB2_HASH_SHA1, long_test_string, + "\xa4\x9b\x24\x46\xa0\x2c\x64\x5b\xf4\x19\xf9\x95\xb6\x70\x91" + "\x25\x3a\x04\xa2\x59"); + TEST_KNOWN_VALUE(VB2_HASH_SHA256, long_test_string, + "\xcf\x5b\x16\xa7\x78\xaf\x83\x80\x03\x6c\xe5\x9e\x7b\x04\x92" + "\x37\x0b\x24\x9b\x11\xe8\xf0\x7a\x51\xaf\xac\x45\x03\x7a\xfe" + "\xe9\xd1"); + TEST_KNOWN_VALUE(VB2_HASH_SHA512, long_test_string, + "\x8e\x95\x9b\x75\xda\xe3\x13\xda\x8c\xf4\xf7\x28\x14\xfc\x14" + "\x3f\x8f\x77\x79\xc6\xeb\x9f\x7f\xa1\x72\x99\xae\xad\xb6\x88" + "\x90\x18\x50\x1d\x28\x9e\x49\x00\xf7\xe4\x33\x1b\x99\xde\xc4" + "\xb5\x43\x3a\xc7\xd3\x29\xee\xb6\xdd\x26\x54\x5e\x96\xe5\x5b" + "\x87\x4b\xe9\x09"); + TEST_KNOWN_VALUE(VB2_HASH_SHA224, long_test_string, + "\xc9\x7c\xa9\xa5\x59\x85\x0c\xe9\x7a\x04\xa9\x6d\xef\x6d\x99" + "\xa9\xe0\xe0\xe2\xab\x14\xe6\xb8\xdf\x26\x5f\xc0\xb3"); + TEST_KNOWN_VALUE(VB2_HASH_SHA384, long_test_string, + "\x09\x33\x0c\x33\xf7\x11\x47\xe8\x3d\x19\x2f\xc7\x82\xcd\x1b" + "\x47\x53\x11\x1b\x17\x3b\x3b\x05\xd2\x2f\xa0\x80\x86\xe3\xb0" + "\xf7\x12\xfc\xc7\xc7\x1a\x55\x7e\x2d\xb9\x66\xc3\xe9\xfa\x91" + "\x74\x60\x39"); + + /* vim helper to escape hex: :s/\([a-f0-9]\{2\}\)/\\x\1/g */ +#undef TEST_KNOWN_VALUE +} + +int main(int argc, char *argv[]) +{ + /* Initialize long_msg with 'a' x 1,000,000 */ + long_msg = (char *) malloc(1000001); + memset(long_msg, 'a', 1000000); + long_msg[1000000]=0; + + sha1_tests(); + sha256_tests(); + sha512_tests(); + misc_tests(); + known_value_tests(); + + free(long_msg); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vboot_api_kernel4_tests.c b/tests/vboot_api_kernel4_tests.c new file mode 100644 index 0000000..e3f19a8 --- /dev/null +++ b/tests/vboot_api_kernel4_tests.c @@ -0,0 +1,341 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for vboot_api_kernel, part 4 - select and load kernel + */ + +#include "2api.h" +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2secdata.h" +#include "2sysincludes.h" +#include "host_common.h" +#include "load_kernel_fw.h" +#include "test_common.h" +#include "tlcl.h" +#include "tss_constants.h" +#include "vboot_struct.h" +#include "vboot_test.h" + +/* Mock data */ + +static uint8_t workbuf[VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); +static struct vb2_context *ctx; +static struct vb2_shared_data *sd; +static VbSelectAndLoadKernelParams kparams; +static struct vb2_gbb_header gbb; + +static uint32_t kernel_version; +static uint32_t new_version; +static vb2_error_t vbboot_retval; +static int commit_data_called; +static vb2_error_t secdata_kernel_init_retval; +static vb2_error_t secdata_fwmp_init_retval; +static vb2_error_t kernel_phase1_retval; +static uint32_t current_recovery_reason; +static uint32_t expected_recovery_reason; + +static int mock_diagnostic_ui_enabled; + +static void reset_common_data(void) +{ + memset(&kparams, 0, sizeof(kparams)); + + memset(&gbb, 0, sizeof(gbb)); + gbb.major_version = VB2_GBB_MAJOR_VER; + gbb.minor_version = VB2_GBB_MINOR_VER; + gbb.flags = 0; + + TEST_SUCC(vb2api_init(workbuf, sizeof(workbuf), &ctx), + "vb2api_init failed"); + sd = vb2_get_sd(ctx); + sd->flags |= VB2_SD_FLAG_DISPLAY_AVAILABLE; + ctx->flags |= VB2_CONTEXT_NO_SECDATA_FWMP; + sd->preamble_size = 1; + + vb2_nv_init(ctx); + vb2_nv_set(ctx, VB2_NV_KERNEL_MAX_ROLLFORWARD, 0xffffffff); + commit_data_called = 0; + + kernel_version = new_version = 0x10002; + vbboot_retval = VB2_SUCCESS; + secdata_kernel_init_retval = VB2_SUCCESS; + secdata_fwmp_init_retval = VB2_SUCCESS; + kernel_phase1_retval = VB2_SUCCESS; + current_recovery_reason = 0; + expected_recovery_reason = 0; + + mock_diagnostic_ui_enabled = 0; + + sd->status |= VB2_SD_STATUS_SECDATA_KERNEL_INIT; + sd->status |= VB2_SD_STATUS_SECDATA_FWMP_INIT; +} + +static void test_slk(vb2_error_t retval, int recovery_reason, const char *desc) +{ + if (sd->recovery_reason) + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + + expected_recovery_reason = recovery_reason; + /* The VbSelectAndLoadKernel directly leverages the value at + ctx->boot_mode, so we have to call vb2_set_boot_mode first. */ + vb2_set_boot_mode(ctx); + TEST_EQ(VbSelectAndLoadKernel(ctx, &kparams), retval, desc); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), + recovery_reason, " recovery reason"); +} + +/* Mock functions */ + +struct vb2_gbb_header *vb2_get_gbb(struct vb2_context *c) +{ + return &gbb; +} + +vb2_error_t vb2api_kernel_phase1(struct vb2_context *c) +{ + sd->kernel_version_secdata = kernel_version; + sd->kernel_version = kernel_version; + return kernel_phase1_retval; +} + +vb2_error_t vb2ex_commit_data(struct vb2_context *c) +{ + current_recovery_reason = vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST); + commit_data_called = 1; + return VB2_SUCCESS; +} + +vb2_error_t vb2_secdata_fwmp_init(struct vb2_context *c) +{ + return secdata_fwmp_init_retval; +} + +void vb2_secdata_kernel_set(struct vb2_context *c, + enum vb2_secdata_kernel_param param, + uint32_t value) +{ + kernel_version = value; +} + +vb2_error_t VbTryLoadKernel(struct vb2_context *c, uint32_t disk_flags) +{ + sd->kernel_version = new_version; + + if (vbboot_retval == -1) + return VB2_ERROR_MOCK; + + return vbboot_retval; +} + +static vb2_error_t boot_dev(struct vb2_context *c) +{ + if (vbboot_retval == -2) + return VB2_ERROR_MOCK; + + return vbboot_retval; +} + +vb2_error_t vb2ex_developer_ui(struct vb2_context *c) +{ + return boot_dev(c); +} + +static void rec_check(struct vb2_context *c) +{ + TEST_EQ(current_recovery_reason, expected_recovery_reason, + " recovery reason"); + TEST_TRUE(commit_data_called, " commit data"); +} + +vb2_error_t vb2ex_manual_recovery_ui(struct vb2_context *c) +{ + rec_check(c); + if (vbboot_retval == -3) + return VB2_ERROR_MOCK; + return vbboot_retval; +} + +vb2_error_t vb2ex_broken_screen_ui(struct vb2_context *c) +{ + rec_check(c); + if (vbboot_retval == -4) + return VB2_ERROR_MOCK; + return vbboot_retval; +} + +vb2_error_t vb2ex_diagnostic_ui(struct vb2_context *c) +{ + if (vbboot_retval == -5) + return VB2_ERROR_MOCK; + + return vbboot_retval; +} + +int vb2api_diagnostic_ui_enabled(struct vb2_context *c) +{ + return mock_diagnostic_ui_enabled; +} + +vb2_error_t vb2ex_tpm_set_mode(enum vb2_tpm_mode mode_val) +{ + return VB2_SUCCESS; +} + +/* Tests */ + +static void select_and_load_kernel_tests(void) +{ + /* Normal boot */ + reset_common_data(); + test_slk(0, 0, "Normal"); + TEST_EQ(kernel_version, 0x10002, " version"); + TEST_NEQ(sd->status & VB2_SD_STATUS_EC_SYNC_COMPLETE, 0, + " EC sync complete"); + TEST_FALSE(commit_data_called, " no commit data"); + + /* Check EC sync toggling */ + reset_common_data(); + ctx->flags |= VB2_CONTEXT_EC_SYNC_SUPPORTED; + gbb.flags |= VB2_GBB_FLAG_DISABLE_EC_SOFTWARE_SYNC; + test_slk(0, 0, "EC sync disabled by GBB"); + TEST_NEQ(sd->status & VB2_SD_STATUS_EC_SYNC_COMPLETE, 0, + " EC sync complete"); + + reset_common_data(); + ctx->flags |= VB2_CONTEXT_EC_SYNC_SUPPORTED; + test_slk(0, 0, "Normal with EC sync"); + TEST_NEQ(sd->status & VB2_SD_STATUS_EC_SYNC_COMPLETE, 0, + " EC sync complete"); + + reset_common_data(); + new_version = 0x20003; + test_slk(0, 0, "Roll forward"); + TEST_EQ(kernel_version, 0x20003, " version"); + + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_FW_RESULT, VB2_FW_RESULT_TRYING); + new_version = 0x20003; + test_slk(0, 0, "Don't roll forward kernel when trying new FW"); + TEST_EQ(kernel_version, 0x10002, " version"); + + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_KERNEL_MAX_ROLLFORWARD, 0x30005); + new_version = 0x40006; + test_slk(0, 0, "Limit max roll forward"); + TEST_EQ(kernel_version, 0x30005, " version"); + + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_KERNEL_MAX_ROLLFORWARD, 0x10001); + new_version = 0x40006; + test_slk(0, 0, "Max roll forward can't rollback"); + TEST_EQ(kernel_version, 0x10002, " version"); + + /* Boot normal */ + reset_common_data(); + vbboot_retval = -1; + test_slk(VB2_ERROR_MOCK, 0, "Normal boot bad"); + + /* Check that NV_DIAG_REQUEST triggers diagnostic UI */ + reset_common_data(); + mock_diagnostic_ui_enabled = 1; + vb2_nv_set(ctx, VB2_NV_DIAG_REQUEST, 1); + vbboot_retval = -5; + test_slk(VB2_ERROR_MOCK, 0, + "Normal boot with diag enabled"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_DIAG_REQUEST), 0, + " diag not requested"); + + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_DIAG_REQUEST, 1); + test_slk(VB2_REQUEST_REBOOT, 0, + "Normal boot with diag disabled (reboot to unset)"); + + /* Boot normal - phase1 failure */ + reset_common_data(); + kernel_phase1_retval = VB2_ERROR_MOCK; + test_slk(VB2_ERROR_MOCK, 0, "Normal phase1 failure"); + + /* Recovery - VB2_ERROR_ESCAPE_NO_BOOT */ + reset_common_data(); + ctx->flags |= VB2_CONTEXT_NO_BOOT; + test_slk(VB2_ERROR_ESCAPE_NO_BOOT, + VB2_RECOVERY_ESCAPE_NO_BOOT, "Recovery for NO_BOOT escape"); + + /* Boot normal - VB2_ERROR_ESCAPE_NO_BOOT */ + reset_common_data(); + ctx->flags |= VB2_CONTEXT_NO_BOOT; + gbb.flags |= VB2_GBB_FLAG_DISABLE_EC_SOFTWARE_SYNC; + test_slk(VB2_SUCCESS, 0, "DISABLE_EC_SOFTWARE_SYNC ignores NO_BOOT"); + + /* Boot dev */ + reset_common_data(); + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; + vbboot_retval = -2; + test_slk(VB2_ERROR_MOCK, 0, "Dev boot bad"); + TEST_FALSE(commit_data_called, " no commit data"); + + reset_common_data(); + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; + new_version = 0x20003; + test_slk(0, 0, "Dev doesn't roll forward"); + TEST_EQ(kernel_version, 0x10002, " version"); + + /* Boot dev - phase1 failure */ + reset_common_data(); + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; + kernel_phase1_retval = VB2_ERROR_MOCK; + test_slk(VB2_ERROR_MOCK, 0, "Dev phase1 failure"); + + /* Boot recovery */ + reset_common_data(); + sd->recovery_reason = 123; + vbboot_retval = -4; + test_slk(VB2_ERROR_MOCK, 0, "Recovery boot bad"); + TEST_TRUE(commit_data_called, " commit data"); + + reset_common_data(); + sd->recovery_reason = 123; + new_version = 0x20003; + test_slk(0, 0, "Recovery doesn't roll forward"); + TEST_EQ(kernel_version, 0x10002, " version"); + TEST_TRUE(commit_data_called, " commit data"); + + /* Boot recovery - phase1 failure */ + reset_common_data(); + sd->recovery_reason = 123; + kernel_phase1_retval = VB2_ERROR_MOCK; + test_slk(VB2_ERROR_MOCK, 0, "Recovery phase1 failure"); + TEST_FALSE(commit_data_called, " no commit data"); + + /* Boot recovery - memory retraining */ + reset_common_data(); + sd->recovery_reason = VB2_RECOVERY_TRAIN_AND_REBOOT; + test_slk(VB2_REQUEST_REBOOT, 0, "Recovery train and reboot"); + TEST_FALSE(commit_data_called, " no commit data"); + + /* Boot BROKEN recovery */ + reset_common_data(); + sd->recovery_reason = 123; + vb2_nv_set(ctx, VB2_NV_RECOVERY_SUBCODE, 13); + test_slk(0, 0, "BROKEN recovery"); + TEST_TRUE(commit_data_called, " commit data"); + + /* Boot manual recovery */ + reset_common_data(); + sd->recovery_reason = VB2_RECOVERY_RO_MANUAL; + vb2_nv_set(ctx, VB2_NV_RECOVERY_SUBCODE, 13); + ctx->flags &= VB2_CONTEXT_FORCE_RECOVERY_MODE; + test_slk(0, 0, "Manual recovery"); + TEST_TRUE(commit_data_called, " commit data"); +} + +int main(void) +{ + select_and_load_kernel_tests(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vboot_api_kernel_tests.c b/tests/vboot_api_kernel_tests.c new file mode 100644 index 0000000..b66c432 --- /dev/null +++ b/tests/vboot_api_kernel_tests.c @@ -0,0 +1,642 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for VbTryLoadKernel() + */ + +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2sysincludes.h" +#include "load_kernel_fw.h" +#include "test_common.h" +#include "vboot_api.h" +#include "vboot_test.h" + +#define MAX_TEST_DISKS 10 +#define DEFAULT_COUNT -1 + +typedef struct { + uint64_t bytes_per_lba; + uint64_t lba_count; + uint32_t flags; + const char *diskname; +} disk_desc_t; + +typedef struct { + const char *name; + + /* inputs for test case */ + uint32_t ctx_flags; + uint32_t want_flags; + vb2_error_t diskgetinfo_return_val; + disk_desc_t disks_to_provide[MAX_TEST_DISKS]; + int disk_count_to_return; + vb2_error_t loadkernel_return_val[MAX_TEST_DISKS]; + uint8_t external_expected[MAX_TEST_DISKS]; + + /* outputs from test */ + uint32_t expected_recovery_request_val; + const char *expected_to_find_disk; + const char *expected_to_load_disk; + uint32_t expected_return_val; + +} test_case_t; + +/****************************************************************************/ +/* Test cases */ + +static const char pickme[] = "correct choice"; +#define DONT_CARE ((const char *)42) + +test_case_t normal_tests[] = { + { + .name = "first drive (removable)", + .ctx_flags = 0, + .want_flags = VB_DISK_FLAG_REMOVABLE | VB_DISK_FLAG_FIXED, + .disks_to_provide = { + {4096, 100, VB_DISK_FLAG_REMOVABLE, pickme}, + {4096, 100, VB_DISK_FLAG_FIXED, "holygrail"}, + }, + .disk_count_to_return = DEFAULT_COUNT, + .diskgetinfo_return_val = VB2_SUCCESS, + .loadkernel_return_val = {0}, + .external_expected = {0}, + + .expected_recovery_request_val = VB2_RECOVERY_NOT_REQUESTED, + .expected_to_find_disk = pickme, + .expected_to_load_disk = pickme, + .expected_return_val = VB2_SUCCESS + }, + { + .name = "first drive (fixed)", + .ctx_flags = 0, + .want_flags = VB_DISK_FLAG_REMOVABLE | VB_DISK_FLAG_FIXED, + .disks_to_provide = { + {4096, 100, VB_DISK_FLAG_FIXED, pickme}, + {4096, 100, VB_DISK_FLAG_REMOVABLE, "holygrail"}, + }, + .disk_count_to_return = DEFAULT_COUNT, + .diskgetinfo_return_val = VB2_SUCCESS, + .loadkernel_return_val = {0}, + .external_expected = {0}, + + .expected_recovery_request_val = VB2_RECOVERY_NOT_REQUESTED, + .expected_to_find_disk = pickme, + .expected_to_load_disk = pickme, + .expected_return_val = VB2_SUCCESS + }, + { + .name = "first removable drive", + .ctx_flags = 0, + .want_flags = VB_DISK_FLAG_REMOVABLE, + .disks_to_provide = { + /* too small */ + {512, 10, VB_DISK_FLAG_REMOVABLE, 0}, + /* wrong LBA */ + {511, 100, VB_DISK_FLAG_REMOVABLE, 0}, + /* not a power of 2 */ + {2047, 100, VB_DISK_FLAG_REMOVABLE, 0}, + /* wrong type */ + {512, 100, VB_DISK_FLAG_FIXED, 0}, + /* wrong flags */ + {512, 100, 0, 0}, + /* still wrong flags */ + {512, 100, -1, 0}, + {4096, 100, VB_DISK_FLAG_REMOVABLE, pickme}, + /* already got one */ + {512, 100, VB_DISK_FLAG_REMOVABLE, "holygrail"}, + }, + .disk_count_to_return = DEFAULT_COUNT, + .diskgetinfo_return_val = VB2_SUCCESS, + .loadkernel_return_val = {0}, + .external_expected = {0}, + + .expected_recovery_request_val = VB2_RECOVERY_NOT_REQUESTED, + .expected_to_find_disk = pickme, + .expected_to_load_disk = pickme, + .expected_return_val = VB2_SUCCESS + }, + { + .name = "first removable drive (skip external GPT)", + .ctx_flags = 0, + .want_flags = VB_DISK_FLAG_REMOVABLE, + .disks_to_provide = { + /* too small */ + {512, 10, VB_DISK_FLAG_REMOVABLE, 0}, + /* wrong LBA */ + {511, 100, VB_DISK_FLAG_REMOVABLE, 0}, + /* not a power of 2 */ + {2047, 100, VB_DISK_FLAG_REMOVABLE, 0}, + /* wrong type */ + {512, 100, VB_DISK_FLAG_FIXED, 0}, + /* wrong flags */ + {512, 100, 0, 0}, + /* still wrong flags */ + {512, 100, -1, 0}, + {512, 100, + VB_DISK_FLAG_REMOVABLE | VB_DISK_FLAG_EXTERNAL_GPT, + pickme}, + /* already got one */ + {512, 100, VB_DISK_FLAG_REMOVABLE, "holygrail"}, + }, + .disk_count_to_return = DEFAULT_COUNT, + .diskgetinfo_return_val = VB2_SUCCESS, + .loadkernel_return_val = {0, 0}, + .external_expected = {1, 0}, + + .expected_recovery_request_val = VB2_RECOVERY_NOT_REQUESTED, + .expected_to_find_disk = pickme, + .expected_to_load_disk = pickme, + .expected_return_val = VB2_SUCCESS + }, + { + .name = "second removable drive", + .ctx_flags = 0, + .want_flags = VB_DISK_FLAG_REMOVABLE, + .disks_to_provide = { + /* wrong flags */ + {512, 100, 0, 0}, + {512, 100, VB_DISK_FLAG_REMOVABLE, "not yet"}, + {512, 100, VB_DISK_FLAG_REMOVABLE, pickme}, + }, + .disk_count_to_return = DEFAULT_COUNT, + .diskgetinfo_return_val = VB2_SUCCESS, + .loadkernel_return_val = {VB2_ERROR_LK_INVALID_KERNEL_FOUND, 0}, + + .expected_recovery_request_val = VB2_RECOVERY_NOT_REQUESTED, + .expected_to_find_disk = pickme, + .expected_to_load_disk = pickme, + .expected_return_val = VB2_SUCCESS + }, + { + .name = "first fixed drive", + .ctx_flags = 0, + .want_flags = VB_DISK_FLAG_FIXED, + .disks_to_provide = { + /* too small */ + {512, 10, VB_DISK_FLAG_FIXED, 0}, + /* wrong LBA */ + {511, 100, VB_DISK_FLAG_FIXED, 0}, + /* not a power of 2 */ + {2047, 100, VB_DISK_FLAG_REMOVABLE, 0}, + /* wrong type */ + {512, 100, VB_DISK_FLAG_REMOVABLE, 0}, + /* wrong flags */ + {512, 100, 0, 0}, + /* still wrong flags */ + {512, 100, -1, 0}, + /* flags */ + {512, 100, VB_DISK_FLAG_REMOVABLE|VB_DISK_FLAG_FIXED, + 0}, + {512, 100, VB_DISK_FLAG_FIXED, pickme}, + /* already got one */ + {512, 100, VB_DISK_FLAG_FIXED, "holygrail"}, + }, + .disk_count_to_return = DEFAULT_COUNT, + .diskgetinfo_return_val = VB2_SUCCESS, + .loadkernel_return_val = {0}, + + .expected_recovery_request_val = VB2_RECOVERY_NOT_REQUESTED, + .expected_to_find_disk = pickme, + .expected_to_load_disk = pickme, + .expected_return_val = VB2_SUCCESS + }, + { + .name = "no drives at all", + .ctx_flags = 0, + .want_flags = VB_DISK_FLAG_FIXED, + .disks_to_provide = {}, + .disk_count_to_return = DEFAULT_COUNT, + .diskgetinfo_return_val = VB2_SUCCESS, + + .expected_recovery_request_val = VB2_RECOVERY_RW_NO_DISK, + .expected_to_find_disk = 0, + .expected_to_load_disk = 0, + .expected_return_val = VB2_ERROR_LK_NO_DISK_FOUND + }, + { + .name = "VbExDiskGetInfo() error", + .ctx_flags = 0, + .want_flags = VB_DISK_FLAG_FIXED, + .disks_to_provide = { + {512, 10, VB_DISK_FLAG_REMOVABLE, 0}, + {512, 100, VB_DISK_FLAG_FIXED, 0}, + }, + .disk_count_to_return = DEFAULT_COUNT, + .diskgetinfo_return_val = VB2_ERROR_UNKNOWN, + + .expected_recovery_request_val = VB2_RECOVERY_RW_NO_DISK, + .expected_to_find_disk = 0, + .expected_to_load_disk = 0, + .expected_return_val = VB2_ERROR_LK_NO_DISK_FOUND, + }, + { + .name = "invalid kernel", + .ctx_flags = 0, + .want_flags = VB_DISK_FLAG_FIXED, + .disks_to_provide = { + /* too small */ + {512, 10, VB_DISK_FLAG_FIXED, 0}, + /* wrong LBA */ + {511, 100, VB_DISK_FLAG_FIXED, 0}, + /* not a power of 2 */ + {2047, 100, VB_DISK_FLAG_FIXED, 0}, + /* wrong type */ + {512, 100, VB_DISK_FLAG_REMOVABLE, 0}, + /* wrong flags */ + {512, 100, 0, 0}, + /* still wrong flags */ + {512, 100, -1, 0}, + /* doesn't load */ + {512, 100, VB_DISK_FLAG_FIXED, "corrupted kernel"}, + /* doesn't load */ + {512, 100, VB_DISK_FLAG_FIXED, "stateful partition"}, + }, + .disk_count_to_return = DEFAULT_COUNT, + .diskgetinfo_return_val = VB2_SUCCESS, + .loadkernel_return_val = {VB2_ERROR_LK_INVALID_KERNEL_FOUND, + VB2_ERROR_LK_NO_KERNEL_FOUND}, + + .expected_recovery_request_val = VB2_RECOVERY_RW_INVALID_OS, + .expected_to_find_disk = DONT_CARE, + .expected_to_load_disk = 0, + .expected_return_val = VB2_ERROR_LK_INVALID_KERNEL_FOUND, + }, + { + .name = "invalid kernel, order flipped", + .ctx_flags = 0, + .want_flags = VB_DISK_FLAG_FIXED, + .disks_to_provide = { + {512, 1000, VB_DISK_FLAG_FIXED, "stateful partition"}, + {512, 1000, VB_DISK_FLAG_FIXED, "corrupted kernel"}, + }, + .disk_count_to_return = DEFAULT_COUNT, + .diskgetinfo_return_val = VB2_SUCCESS, + .loadkernel_return_val = {VB2_ERROR_LK_NO_KERNEL_FOUND, + VB2_ERROR_LK_INVALID_KERNEL_FOUND}, + + .expected_recovery_request_val = VB2_RECOVERY_RW_INVALID_OS, + .expected_to_find_disk = DONT_CARE, + .expected_to_load_disk = 0, + .expected_return_val = VB2_ERROR_LK_INVALID_KERNEL_FOUND, + }, + { + .name = "no Chrome OS partitions", + .ctx_flags = 0, + .want_flags = VB_DISK_FLAG_FIXED, + .disks_to_provide = { + {512, 100, VB_DISK_FLAG_FIXED, "stateful partition"}, + {512, 1000, VB_DISK_FLAG_FIXED, "Chrubuntu"}, + }, + .disk_count_to_return = DEFAULT_COUNT, + .diskgetinfo_return_val = VB2_SUCCESS, + .loadkernel_return_val = {VB2_ERROR_LK_NO_KERNEL_FOUND, + VB2_ERROR_LK_NO_KERNEL_FOUND}, + + .expected_recovery_request_val = VB2_RECOVERY_RW_NO_KERNEL, + .expected_to_find_disk = DONT_CARE, + .expected_to_load_disk = 0, + .expected_return_val = VB2_ERROR_LK_NO_KERNEL_FOUND, + }, + { + .name = "invalid kernel (removable)", + .ctx_flags = 0, + .want_flags = VB_DISK_FLAG_REMOVABLE, + .disks_to_provide = { + {512, 100, VB_DISK_FLAG_REMOVABLE, "corrupted"}, + {512, 100, VB_DISK_FLAG_REMOVABLE, "data"}, + }, + .disk_count_to_return = DEFAULT_COUNT, + .diskgetinfo_return_val = VB2_SUCCESS, + .loadkernel_return_val = {VB2_ERROR_LK_INVALID_KERNEL_FOUND, + VB2_ERROR_LK_NO_KERNEL_FOUND}, + + .expected_recovery_request_val = VB2_RECOVERY_RW_INVALID_OS, + .expected_to_find_disk = DONT_CARE, + .expected_to_load_disk = 0, + .expected_return_val = VB2_ERROR_LK_INVALID_KERNEL_FOUND, + }, + { + .name = "invalid kernel (removable, rec mode)", + .ctx_flags = VB2_CONTEXT_RECOVERY_MODE, + .want_flags = VB_DISK_FLAG_REMOVABLE, + .disks_to_provide = { + {512, 100, VB_DISK_FLAG_REMOVABLE, "corrupted"}, + {512, 100, VB_DISK_FLAG_REMOVABLE, "data"}, + }, + .disk_count_to_return = DEFAULT_COUNT, + .diskgetinfo_return_val = VB2_SUCCESS, + .loadkernel_return_val = {VB2_ERROR_LK_INVALID_KERNEL_FOUND, + VB2_ERROR_LK_NO_KERNEL_FOUND}, + + .expected_recovery_request_val = VB2_RECOVERY_NOT_REQUESTED, + .expected_to_find_disk = DONT_CARE, + .expected_to_load_disk = 0, + .expected_return_val = VB2_ERROR_LK_INVALID_KERNEL_FOUND, + }, + { + .name = "invalid kernel (removable, dev mode)", + .ctx_flags = VB2_CONTEXT_DEVELOPER_MODE, + .want_flags = VB_DISK_FLAG_REMOVABLE, + .disks_to_provide = { + {512, 100, VB_DISK_FLAG_REMOVABLE, "corrupted"}, + {512, 100, VB_DISK_FLAG_REMOVABLE, "data"}, + }, + .disk_count_to_return = DEFAULT_COUNT, + .diskgetinfo_return_val = VB2_SUCCESS, + .loadkernel_return_val = {VB2_ERROR_LK_INVALID_KERNEL_FOUND, + VB2_ERROR_LK_NO_KERNEL_FOUND}, + + .expected_recovery_request_val = VB2_RECOVERY_NOT_REQUESTED, + .expected_to_find_disk = DONT_CARE, + .expected_to_load_disk = 0, + .expected_return_val = VB2_ERROR_LK_INVALID_KERNEL_FOUND, + }, + { + .name = "no kernel (removable)", + .ctx_flags = 0, + .want_flags = VB_DISK_FLAG_REMOVABLE, + .disks_to_provide = { + {512, 100, VB_DISK_FLAG_REMOVABLE, "data"}, + }, + .disk_count_to_return = DEFAULT_COUNT, + .diskgetinfo_return_val = VB2_SUCCESS, + .loadkernel_return_val = {VB2_ERROR_LK_NO_KERNEL_FOUND}, + + .expected_recovery_request_val = VB2_RECOVERY_RW_NO_KERNEL, + .expected_to_find_disk = DONT_CARE, + .expected_to_load_disk = 0, + .expected_return_val = VB2_ERROR_LK_NO_KERNEL_FOUND, + }, + { + .name = "no kernel (removable, rec mode)", + .ctx_flags = VB2_CONTEXT_RECOVERY_MODE, + .want_flags = VB_DISK_FLAG_REMOVABLE, + .disks_to_provide = { + {512, 100, VB_DISK_FLAG_REMOVABLE, "data"}, + }, + .disk_count_to_return = DEFAULT_COUNT, + .diskgetinfo_return_val = VB2_SUCCESS, + .loadkernel_return_val = {VB2_ERROR_LK_NO_KERNEL_FOUND}, + + .expected_recovery_request_val = VB2_RECOVERY_NOT_REQUESTED, + .expected_to_find_disk = DONT_CARE, + .expected_to_load_disk = 0, + .expected_return_val = VB2_ERROR_LK_NO_KERNEL_FOUND, + }, +}; + +test_case_t minios_tests[] = { + { + .name = "pick first fixed drive", + .ctx_flags = 0, + .disks_to_provide = { + {4096, 100, VB_DISK_FLAG_REMOVABLE, 0}, + {4096, 100, VB_DISK_FLAG_FIXED, pickme}, + {4096, 100, VB_DISK_FLAG_FIXED, "holygrail"}, + }, + .disk_count_to_return = DEFAULT_COUNT, + .diskgetinfo_return_val = VB2_SUCCESS, + .loadkernel_return_val = {0}, + .external_expected = {0}, + + .expected_recovery_request_val = VB2_RECOVERY_NOT_REQUESTED, + .expected_to_find_disk = pickme, + .expected_to_load_disk = pickme, + .expected_return_val = VB2_SUCCESS + }, + { + .name = "skip failed fixed drive", + .ctx_flags = 0, + .disks_to_provide = { + {4096, 100, VB_DISK_FLAG_FIXED, "holygrail"}, + {4096, 100, VB_DISK_FLAG_FIXED, pickme}, + }, + .disk_count_to_return = DEFAULT_COUNT, + .diskgetinfo_return_val = VB2_SUCCESS, + .loadkernel_return_val = {VB2_ERROR_LK_INVALID_KERNEL_FOUND, 0}, + .external_expected = {0}, + + .expected_recovery_request_val = VB2_RECOVERY_NOT_REQUESTED, + .expected_to_find_disk = pickme, + .expected_to_load_disk = pickme, + .expected_return_val = VB2_SUCCESS + }, +}; + +/****************************************************************************/ + +/* Mock data */ +static VbDiskInfo mock_disks[MAX_TEST_DISKS]; +static test_case_t *t; +static int load_kernel_calls; +static int lk_normal_calls; +static int lk_minios_calls; +static uint32_t got_recovery_request_val; +static const char *got_find_disk; +static const char *got_load_disk; +static uint32_t got_return_val; +static uint32_t got_external_mismatch; +static uint8_t workbuf[VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); +static struct vb2_context *ctx; +static struct VbSelectAndLoadKernelParams kparams; + +/** + * Reset mock data (for use before each test) + */ +static void ResetMocks(test_case_t *test_case) +{ + TEST_SUCC(vb2api_init(workbuf, sizeof(workbuf), &ctx), + "vb2api_init failed"); + + memset(&kparams, 0, sizeof(VbSelectAndLoadKernelParams)); + *VbApiKernelGetParamsPtr() = &kparams; + + + memset(&mock_disks, 0, sizeof(mock_disks)); + load_kernel_calls = 0; + lk_normal_calls = 0; + lk_minios_calls = 0; + + got_recovery_request_val = VB2_RECOVERY_NOT_REQUESTED; + got_find_disk = 0; + got_load_disk = 0; + got_return_val = 0xdeadbeef; + + t = test_case; +} + +static int is_nonzero(const void *vptr, size_t count) +{ + const char *p = (const char *)vptr; + while (count--) + if (*p++) + return 1; + + return 0; +} + +/****************************************************************************/ +/* Mocked verification functions */ + +vb2_error_t VbExDiskGetInfo(VbDiskInfo **infos_ptr, uint32_t *count, + uint32_t disk_flags) +{ + int i; + int num_disks = 0; + + VB2_DEBUG("My %s\n", __FUNCTION__); + + *infos_ptr = mock_disks; + + for(i = 0; i < MAX_TEST_DISKS; i++) { + if (is_nonzero(&t->disks_to_provide[i], + sizeof(t->disks_to_provide[i]))) { + mock_disks[num_disks].bytes_per_lba = + t->disks_to_provide[i].bytes_per_lba; + mock_disks[num_disks].lba_count = + mock_disks[num_disks].streaming_lba_count = + t->disks_to_provide[i].lba_count; + mock_disks[num_disks].flags = + t->disks_to_provide[i].flags; + mock_disks[num_disks].handle = (VbExDiskHandle_t) + t->disks_to_provide[i].diskname; + VB2_DEBUG(" mock_disk[%d] %" PRIu64 " %" PRIu64 + " %#x %s\n", i, + mock_disks[num_disks].bytes_per_lba, + mock_disks[num_disks].lba_count, + mock_disks[num_disks].flags, + (mock_disks[num_disks].handle + ? (char *)mock_disks[num_disks].handle + : "0")); + num_disks++; + } else { + mock_disks[num_disks].handle = + (VbExDiskHandle_t)"INVALID"; + } + } + + if (t->disk_count_to_return >= 0) + *count = t->disk_count_to_return; + else + *count = num_disks; + + VB2_DEBUG(" *count=%" PRIu32 "\n", *count); + VB2_DEBUG(" return %#x\n", t->diskgetinfo_return_val); + + return t->diskgetinfo_return_val; +} + +vb2_error_t VbExDiskFreeInfo(VbDiskInfo *infos, + VbExDiskHandle_t preserve_handle) +{ + got_load_disk = (const char *)preserve_handle; + VB2_DEBUG("%s(): got_load_disk = %s\n", __FUNCTION__, + got_load_disk ? got_load_disk : "0"); + return VB2_SUCCESS; +} + +static vb2_error_t LoadKernelImpl(struct vb2_context *c, + VbSelectAndLoadKernelParams *params, + VbDiskInfo *disk_info) +{ + got_find_disk = (const char *)params->disk_handle; + VB2_DEBUG("%s(%d): got_find_disk = %s\n", __FUNCTION__, + load_kernel_calls, + got_find_disk ? got_find_disk : "0"); + if (t->external_expected[load_kernel_calls] != + !!(disk_info->flags & VB_DISK_FLAG_EXTERNAL_GPT)) + got_external_mismatch++; + return t->loadkernel_return_val[load_kernel_calls++]; +} + +vb2_error_t LoadKernel(struct vb2_context *c, + VbSelectAndLoadKernelParams *params, + VbDiskInfo *disk_info) +{ + lk_normal_calls++; + return LoadKernelImpl(c, params, disk_info); +} + +vb2_error_t LoadMiniOsKernel(struct vb2_context *c, + VbSelectAndLoadKernelParams *params, + VbDiskInfo *disk_info, uint32_t minios_flags) +{ + lk_minios_calls++; + return LoadKernelImpl(c, params, disk_info); +} + +void vb2_nv_set(struct vb2_context *c, + enum vb2_nv_param param, + uint32_t value) +{ + if (param != VB2_NV_RECOVERY_REQUEST) + return; + VB2_DEBUG("%s(): got_recovery_request_val = %d (%#x)\n", __FUNCTION__, + value, value); + got_recovery_request_val = value; +} + +/****************************************************************************/ + +static void VbTryLoadKernelTest(void) +{ + int i; + int num_tests = ARRAY_SIZE(normal_tests); + + for (i = 0; i < num_tests; i++) { + printf("Test case: %s ...\n", normal_tests[i].name); + ResetMocks(&normal_tests[i]); + ctx->flags = t->ctx_flags; + TEST_EQ(VbTryLoadKernel(ctx, t->want_flags), + t->expected_return_val, " return value"); + TEST_EQ(got_recovery_request_val, + t->expected_recovery_request_val, " recovery_request"); + if (t->expected_to_find_disk != DONT_CARE) { + TEST_PTR_EQ(got_find_disk, t->expected_to_find_disk, + " find disk"); + TEST_PTR_EQ(got_load_disk, t->expected_to_load_disk, + " load disk"); + } + TEST_EQ(got_external_mismatch, 0, " external GPT errors"); + } + TEST_EQ(lk_normal_calls, load_kernel_calls, " LoadKernel called"); + TEST_EQ(lk_minios_calls, 0, " LoadMiniOsKernel not called"); +} + +static void VbTryLoadMiniOsKernelTest(void) +{ + int i; + int num_tests = ARRAY_SIZE(minios_tests); + + for (i = 0; i < num_tests; i++) { + printf("Test case: %s ...\n", minios_tests[i].name); + ResetMocks(&minios_tests[i]); + ctx->flags = t->ctx_flags; + TEST_EQ(VbTryLoadMiniOsKernel(ctx, 0), + t->expected_return_val, " return value"); + TEST_EQ(got_recovery_request_val, + t->expected_recovery_request_val, " recovery_request"); + if (t->expected_to_find_disk != DONT_CARE) { + TEST_PTR_EQ(got_find_disk, t->expected_to_find_disk, + " find disk"); + TEST_PTR_EQ(got_load_disk, t->expected_to_load_disk, + " load disk"); + } + TEST_EQ(got_external_mismatch, 0, " external GPT errors"); + } + TEST_EQ(lk_normal_calls, 0, " LoadKernel not called"); + TEST_EQ(lk_minios_calls, load_kernel_calls, + " LoadMiniOsKernel called"); +} + +int main(void) +{ + VbTryLoadKernelTest(); + VbTryLoadMiniOsKernelTest(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vboot_kernel2_tests.c b/tests/vboot_kernel2_tests.c new file mode 100644 index 0000000..5fc66f1 --- /dev/null +++ b/tests/vboot_kernel2_tests.c @@ -0,0 +1,459 @@ +/* Copyright 2021 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for miniOS kernel selection, loading, verification, and booting. + */ + +#include "2api.h" +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2secdata.h" +#include "load_kernel_fw.h" +#include "test_common.h" +#include "vboot_api.h" + +#define MAX_MOCK_KERNELS 10 +#define KBUF_SIZE 65536 + +/* Internal struct to simulate a stream for sector-based disks */ +struct disk_stream { + /* Disk handle */ + VbExDiskHandle_t handle; + + /* Next sector to read */ + uint64_t sector; + + /* Number of sectors left */ + uint64_t sectors_left; +}; + +/* Represent a "kernel" located on the disk */ +struct mock_kernel { + /* Sector where the kernel begins */ + uint64_t sector; + + /* Return value from vb2_load_partition */ + vb2_error_t rv; + + /* Number of times the sector was read */ + int read_count; +}; + +/* Mock data */ +static struct vb2_context *ctx; +static struct vb2_shared_data *sd; +static struct vb2_workbuf wb; +static uint8_t workbuf[VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); +static enum vb2_boot_mode *boot_mode; + +static VbSelectAndLoadKernelParams lkp; +static VbDiskInfo disk_info; +static struct vb2_keyblock kbh; +static struct vb2_kernel_preamble kph; +static uint8_t kernel_buffer[80000]; + +static struct mock_kernel kernels[MAX_MOCK_KERNELS]; +static int kernel_count; +static struct mock_kernel *cur_kernel; + +static int mock_tpm_set_mode_calls; + +static void add_mock_kernel(uint64_t sector, vb2_error_t rv) +{ + if (kernel_count >= ARRAY_SIZE(kernels)) { + TEST_TRUE(0, " kernel_count ran out of entries!"); + return; + } + + kernels[kernel_count].sector = sector; + kernels[kernel_count].rv = rv; + kernel_count++; +} + +static void reset_common_data(void) +{ + TEST_SUCC(vb2api_init(workbuf, sizeof(workbuf), &ctx), + "vb2api_init failed"); + vb2_workbuf_from_ctx(ctx, &wb); + vb2_nv_init(ctx); + vb2api_secdata_kernel_create(ctx); + vb2_secdata_kernel_init(ctx); + ctx->flags = VB2_CONTEXT_RECOVERY_MODE; + + boot_mode = (enum vb2_boot_mode *)&ctx->boot_mode; + *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + + sd = vb2_get_sd(ctx); + sd->kernel_version_secdata = 0xabcdef | (1 << 24); + + memset(&lkp, 0, sizeof(lkp)); + lkp.kernel_buffer = kernel_buffer; + lkp.kernel_buffer_size = sizeof(kernel_buffer); + lkp.disk_handle = (VbExDiskHandle_t)1; + + memset(&disk_info, 0, sizeof(disk_info)); + disk_info.bytes_per_lba = 512; + disk_info.lba_count = 1024; + disk_info.handle = lkp.disk_handle; + + memset(&kbh, 0, sizeof(kbh)); + kbh.data_key.key_version = 2; + kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_DEVELOPER_0 + | VB2_KEYBLOCK_FLAG_DEVELOPER_1 + | VB2_KEYBLOCK_FLAG_RECOVERY_1 + | VB2_KEYBLOCK_FLAG_MINIOS_1; + kbh.keyblock_size = sizeof(kbh); + + memset(&kph, 0, sizeof(kph)); + kph.kernel_version = 1; + kph.preamble_size = 4096 - kbh.keyblock_size; + kph.body_signature.data_size = 0; + kph.bootloader_address = 0xbeadd008; + kph.bootloader_size = 0x1234; + + + memset(&kernels, 0, sizeof(kernels)); + kernel_count = 0; + cur_kernel = NULL; + + mock_tpm_set_mode_calls = 0; +} + +/* Mocks */ + +vb2_error_t VbExStreamOpen(VbExDiskHandle_t handle, uint64_t lba_start, + uint64_t lba_count, VbExStream_t *stream) +{ + struct disk_stream *s; + uint64_t i; + + if (!handle) { + *stream = NULL; + return VB2_ERROR_UNKNOWN; + } + + if (lba_start + lba_count > disk_info.lba_count) + return VB2_ERROR_UNKNOWN; + + s = malloc(sizeof(*s)); + s->handle = handle; + s->sector = lba_start; + s->sectors_left = lba_count; + + *stream = (void *)s; + + for (i = 0; i < kernel_count; i++) { + if (kernels[i].sector == lba_start) + cur_kernel = &kernels[i]; + } + + return VB2_SUCCESS; +} + +vb2_error_t VbExStreamRead(VbExStream_t stream, uint32_t bytes, void *buffer) +{ + struct disk_stream *s = (struct disk_stream *)stream; + uint64_t sectors; + uint64_t i; + + if (!s) + return VB2_ERROR_UNKNOWN; + + /* For now, require reads to be a multiple of the LBA size */ + if (bytes % disk_info.bytes_per_lba) + return VB2_ERROR_UNKNOWN; + + /* Fail on overflow */ + sectors = bytes / disk_info.bytes_per_lba; + if (sectors > s->sectors_left) + return VB2_ERROR_UNKNOWN; + + memset(buffer, 0, bytes); + for (i = 0; i < kernel_count; i++) { + if (kernels[i].sector >= s->sector && + kernels[i].sector < s->sector + sectors) { + VB2_DEBUG("Simulating kernel %" PRIu64 " match\n", i); + uint64_t buf_offset = (kernels[i].sector - s->sector) + * disk_info.bytes_per_lba; + memcpy(buffer + buf_offset, VB2_KEYBLOCK_MAGIC, + VB2_KEYBLOCK_MAGIC_SIZE); + kernels[i].read_count++; + TEST_TRUE(kernels[i].read_count <= 2, + " Max read count exceeded"); + } + } + + s->sector += sectors; + s->sectors_left -= sectors; + + return VB2_SUCCESS; +} + +void VbExStreamClose(VbExStream_t stream) +{ + free(stream); +} + +vb2_error_t vb2_unpack_key_buffer(struct vb2_public_key *key, + const uint8_t *buf, uint32_t size) +{ + return cur_kernel->rv; +} + +vb2_error_t vb2_verify_keyblock(struct vb2_keyblock *block, uint32_t size, + const struct vb2_public_key *key, + const struct vb2_workbuf *w) +{ + /* Use this as an opportunity to override the keyblock */ + memcpy((void *)block, &kbh, sizeof(kbh)); + + return cur_kernel->rv; +} + +vb2_error_t vb2_verify_keyblock_hash(const struct vb2_keyblock *block, + uint32_t size, + const struct vb2_workbuf *w) +{ + /* Use this as an opportunity to override the keyblock */ + memcpy((void *)block, &kbh, sizeof(kbh)); + + return cur_kernel->rv; +} + +vb2_error_t vb2_verify_kernel_preamble(struct vb2_kernel_preamble *preamble, + uint32_t size, const struct vb2_public_key *key, + const struct vb2_workbuf *w) +{ + /* Use this as an opportunity to override the preamble */ + memcpy((void *)preamble, &kph, sizeof(kph)); + + return cur_kernel->rv; +} + +vb2_error_t vb2_verify_data(const uint8_t *data, uint32_t size, + struct vb2_signature *sig, + const struct vb2_public_key *key, + const struct vb2_workbuf *w) +{ + return cur_kernel->rv; +} + +vb2_error_t vb2_digest_buffer(const uint8_t *buf, uint32_t size, + enum vb2_hash_algorithm hash_alg, uint8_t *digest, + uint32_t digest_size) +{ + return cur_kernel->rv; +} + +vb2_error_t vb2ex_tpm_set_mode(enum vb2_tpm_mode mode_val) +{ + mock_tpm_set_mode_calls++; + return VB2_SUCCESS; +} + +/* Make sure nothing tested here ever calls this directly. */ +void vb2api_fail(struct vb2_context *c, uint8_t reason, uint8_t subcode) +{ + TEST_TRUE(0, " called vb2api_fail()"); +} + +/* Tests */ + +static void load_minios_kernel_tests(void) +{ + reset_common_data(); + disk_info.bytes_per_lba = KBUF_SIZE; + disk_info.lba_count = 1; + add_mock_kernel(0, VB2_SUCCESS); + TEST_SUCC(LoadMiniOsKernel(ctx, &lkp, &disk_info, 0), + "{valid kernel}"); + TEST_EQ(mock_tpm_set_mode_calls, 1, + " TPM disabled"); + + reset_common_data(); + disk_info.bytes_per_lba = KBUF_SIZE; + disk_info.lba_count = 1; + TEST_EQ(LoadMiniOsKernel(ctx, &lkp, &disk_info, 0), + VB2_ERROR_LK_NO_KERNEL_FOUND, "{no kernel}"); + TEST_EQ(mock_tpm_set_mode_calls, 0, + " TPM not disabled"); + + reset_common_data(); + disk_info.bytes_per_lba = KBUF_SIZE; + disk_info.lba_count = 2; + add_mock_kernel(1, VB2_SUCCESS); + TEST_SUCC(LoadMiniOsKernel(ctx, &lkp, &disk_info, 0), + "{no kernel, valid kernel}"); + TEST_EQ(cur_kernel->sector, 1, " select kernel"); + + reset_common_data(); + disk_info.bytes_per_lba = KBUF_SIZE; + disk_info.lba_count = 2; + add_mock_kernel(0, VB2_ERROR_MOCK); + add_mock_kernel(1, VB2_SUCCESS); + TEST_SUCC(LoadMiniOsKernel(ctx, &lkp, &disk_info, 0), + "{invalid kernel, valid kernel}"); + TEST_EQ(cur_kernel->sector, 1, " select second kernel"); + + reset_common_data(); + disk_info.bytes_per_lba = KBUF_SIZE; + disk_info.lba_count = 2; + add_mock_kernel(0, VB2_ERROR_MOCK); + add_mock_kernel(1, VB2_ERROR_MOCK); + TEST_EQ(LoadMiniOsKernel(ctx, &lkp, &disk_info, 0), + VB2_ERROR_LK_NO_KERNEL_FOUND, + "{invalid kernel, invalid kernel}"); + TEST_EQ(mock_tpm_set_mode_calls, 0, + " TPM not disabled"); + + reset_common_data(); + disk_info.bytes_per_lba = KBUF_SIZE; + disk_info.lba_count = 2; + add_mock_kernel(0, VB2_SUCCESS); + add_mock_kernel(1, VB2_SUCCESS); + TEST_SUCC(LoadMiniOsKernel(ctx, &lkp, &disk_info, 0), + "{valid kernel, valid kernel} minios_priority=0"); + TEST_EQ(cur_kernel->sector, 0, " select first kernel"); + + reset_common_data(); + disk_info.bytes_per_lba = KBUF_SIZE; + disk_info.lba_count = 2; + add_mock_kernel(0, VB2_SUCCESS); + add_mock_kernel(1, VB2_SUCCESS); + vb2_nv_set(ctx, VB2_NV_MINIOS_PRIORITY, 1); + TEST_SUCC(LoadMiniOsKernel(ctx, &lkp, &disk_info, 0), + "{valid kernel, valid kernel} minios_priority=1"); + TEST_EQ(cur_kernel->sector, 1, " select second kernel"); + + reset_common_data(); + disk_info.bytes_per_lba = KBUF_SIZE; + disk_info.lba_count = 2; + add_mock_kernel(0, VB2_SUCCESS); + add_mock_kernel(1, VB2_SUCCESS); + TEST_SUCC(LoadMiniOsKernel(ctx, &lkp, &disk_info, + VB_MINIOS_FLAG_NON_ACTIVE), + "{valid kernel, valid kernel} minios_priority=0 non-active"); + TEST_EQ(cur_kernel->sector, 1, " select second kernel"); + + reset_common_data(); + disk_info.bytes_per_lba = KBUF_SIZE; + disk_info.lba_count = 2; + add_mock_kernel(0, VB2_ERROR_MOCK); + add_mock_kernel(1, VB2_SUCCESS); + vb2_nv_set(ctx, VB2_NV_MINIOS_PRIORITY, 1); + TEST_EQ(LoadMiniOsKernel(ctx, &lkp, &disk_info, + VB_MINIOS_FLAG_NON_ACTIVE), + VB2_ERROR_LK_NO_KERNEL_FOUND, + "{invalid kernel, valid kernel} minios_priority=1 non-active"); + + reset_common_data(); + disk_info.bytes_per_lba = VB2_KEYBLOCK_MAGIC_SIZE; + disk_info.lba_count = 4; + add_mock_kernel(1, VB2_SUCCESS); + TEST_EQ(LoadMiniOsKernel(ctx, &lkp, &disk_info, 0), + VB2_ERROR_LK_NO_KERNEL_FOUND, + "valid kernel header near start of disk (disk too small)"); + + reset_common_data(); + disk_info.bytes_per_lba = VB2_KEYBLOCK_MAGIC_SIZE; + disk_info.lba_count = 1000; + add_mock_kernel(999, VB2_SUCCESS); + TEST_EQ(LoadMiniOsKernel(ctx, &lkp, &disk_info, 0), + VB2_ERROR_LK_NO_KERNEL_FOUND, + "valid kernel header near end of disk"); + + reset_common_data(); + disk_info.bytes_per_lba = 1024; + disk_info.lba_count = 128; + add_mock_kernel(63, VB2_SUCCESS); + TEST_SUCC(LoadMiniOsKernel(ctx, &lkp, &disk_info, 0), + "start/end overlap assuming >128 MB search range (start)"); + + reset_common_data(); + disk_info.bytes_per_lba = 1024; + disk_info.lba_count = 128; + add_mock_kernel(64, VB2_SUCCESS); + TEST_SUCC(LoadMiniOsKernel(ctx, &lkp, &disk_info, 0), + "start/end overlap assuming >128 MB search range (end)"); + + reset_common_data(); + disk_info.bytes_per_lba = 128; + disk_info.lba_count = 1024; + add_mock_kernel(3, VB2_SUCCESS); + TEST_SUCC(LoadMiniOsKernel(ctx, &lkp, &disk_info, 0), + "kernel at last sector in batch assuming 512 KB batches"); + + reset_common_data(); + disk_info.bytes_per_lba = 256; + disk_info.lba_count = 1024; + add_mock_kernel(3, VB2_SUCCESS); + TEST_SUCC(LoadMiniOsKernel(ctx, &lkp, &disk_info, 0), + "kernel at last sector in batch assuming 1 MB batches"); + + reset_common_data(); + disk_info.bytes_per_lba = 512; + disk_info.lba_count = 1024; + add_mock_kernel(3, VB2_SUCCESS); + TEST_SUCC(LoadMiniOsKernel(ctx, &lkp, &disk_info, 0), + "kernel at last sector in batch assuming 2 MB batches"); + + reset_common_data(); + kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_DEVELOPER_0 + | VB2_KEYBLOCK_FLAG_RECOVERY_1 + | VB2_KEYBLOCK_FLAG_MINIOS_1; + disk_info.bytes_per_lba = KBUF_SIZE; + disk_info.lba_count = 2; + add_mock_kernel(0, VB2_SUCCESS); + TEST_SUCC(LoadMiniOsKernel(ctx, &lkp, &disk_info, 0), + "kernel with minios keyblock flag"); + + reset_common_data(); + kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_DEVELOPER_0 + | VB2_KEYBLOCK_FLAG_RECOVERY_1 + | VB2_KEYBLOCK_FLAG_MINIOS_0; + disk_info.bytes_per_lba = KBUF_SIZE; + disk_info.lba_count = 2; + add_mock_kernel(0, VB2_SUCCESS); + TEST_EQ(LoadMiniOsKernel(ctx, &lkp, &disk_info, 0), + VB2_ERROR_LK_NO_KERNEL_FOUND, + "kernel with !minios keyblock flag"); + + reset_common_data(); + disk_info.bytes_per_lba = KBUF_SIZE; + disk_info.lba_count = 2; + add_mock_kernel(0, VB2_SUCCESS); + sd->kernel_version_secdata = 5 << 24; + kph.kernel_version = 4; + TEST_EQ(LoadMiniOsKernel(ctx, &lkp, &disk_info, 0), + VB2_ERROR_LK_NO_KERNEL_FOUND, + "kernel version too old"); + + reset_common_data(); + disk_info.bytes_per_lba = KBUF_SIZE; + disk_info.lba_count = 2; + add_mock_kernel(0, VB2_SUCCESS); + sd->kernel_version_secdata = 5 << 24; + kph.kernel_version = 0x100; + TEST_EQ(LoadMiniOsKernel(ctx, &lkp, &disk_info, 0), + VB2_ERROR_LK_NO_KERNEL_FOUND, + "kernel version greater than 0xff"); + + reset_common_data(); + disk_info.bytes_per_lba = KBUF_SIZE; + disk_info.lba_count = 2; + add_mock_kernel(0, VB2_SUCCESS); + sd->kernel_version_secdata = 5 << 24; + kph.kernel_version = 6; + TEST_SUCC(LoadMiniOsKernel(ctx, &lkp, &disk_info, 0), + "newer kernel version"); +} + +int main(void) +{ + load_minios_kernel_tests(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/vboot_kernel_tests.c b/tests/vboot_kernel_tests.c new file mode 100644 index 0000000..1f77cc5 --- /dev/null +++ b/tests/vboot_kernel_tests.c @@ -0,0 +1,625 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for vboot_kernel.c + */ + +#include "2api.h" +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2secdata.h" +#include "2secdata_struct.h" +#include "cgptlib.h" +#include "cgptlib_internal.h" +#include "gpt.h" +#include "load_kernel_fw.h" +#include "test_common.h" +#include "vboot_api.h" + +/* Mock kernel partition */ +struct mock_part { + uint32_t start; + uint32_t size; +}; + +/* Partition list; ends with a 0-size partition. */ +#define MOCK_PART_COUNT 8 +static struct mock_part mock_parts[MOCK_PART_COUNT]; +static int mock_part_next; + +/* Mock data */ +static uint8_t kernel_buffer[80000]; +static int disk_read_to_fail; +static int gpt_init_fail; +static int keyblock_verify_fail; /* 0=ok, 1=sig, 2=hash */ +static int preamble_verify_fail; +static int verify_data_fail; +static int unpack_key_fail; +static int gpt_flag_external; + +static struct vb2_gbb_header gbb; +static VbSelectAndLoadKernelParams lkp; +static VbDiskInfo disk_info; +static struct vb2_keyblock kbh; +static struct vb2_kernel_preamble kph; +static struct vb2_secdata_fwmp *fwmp; +static uint8_t mock_digest[VB2_SHA256_DIGEST_SIZE] = {12, 34, 56, 78}; +static uint8_t workbuf[VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); +static struct vb2_context *ctx; +static struct vb2_shared_data *sd; +static struct vb2_packed_key mock_key; +static enum vb2_boot_mode *boot_mode; + +/** + * Reset mock data (for use before each test) + */ +static void ResetMocks(void) +{ + disk_read_to_fail = -1; + + gpt_init_fail = 0; + keyblock_verify_fail = 0; + preamble_verify_fail = 0; + verify_data_fail = 0; + unpack_key_fail = 0; + + gpt_flag_external = 0; + + memset(&gbb, 0, sizeof(gbb)); + gbb.major_version = VB2_GBB_MAJOR_VER; + gbb.minor_version = VB2_GBB_MINOR_VER; + gbb.flags = 0; + + memset(&lkp, 0, sizeof(lkp)); + lkp.kernel_buffer = kernel_buffer; + lkp.kernel_buffer_size = sizeof(kernel_buffer); + lkp.disk_handle = (VbExDiskHandle_t)1; + + memset(&disk_info, 0, sizeof(disk_info)); + disk_info.bytes_per_lba = 512; + disk_info.streaming_lba_count = 1024; + disk_info.lba_count = 1024; + disk_info.handle = lkp.disk_handle; + + memset(&kbh, 0, sizeof(kbh)); + kbh.data_key.key_version = 2; + kbh.keyblock_flags = -1; + kbh.keyblock_size = sizeof(kbh); + + memset(&kph, 0, sizeof(kph)); + kph.kernel_version = 1; + kph.preamble_size = 4096 - kbh.keyblock_size; + kph.body_signature.data_size = 70144; + kph.bootloader_address = 0xbeadd008; + kph.bootloader_size = 0x1234; + + memset(mock_parts, 0, sizeof(mock_parts)); + mock_parts[0].start = 100; + mock_parts[0].size = 150; /* 75 KB */ + mock_part_next = 0; + + memset(&mock_key, 0, sizeof(mock_key)); + + TEST_SUCC(vb2api_init(workbuf, sizeof(workbuf), &ctx), + "vb2api_init failed"); + vb2_nv_init(ctx); + + sd = vb2_get_sd(ctx); + sd->kernel_version_secdata = 0x20001; + + /* CRC will be invalid after here, but nobody's checking */ + sd->status |= VB2_SD_STATUS_SECDATA_FWMP_INIT; + fwmp = (struct vb2_secdata_fwmp *)ctx->secdata_fwmp; + memcpy(&fwmp->dev_key_hash, mock_digest, sizeof(fwmp->dev_key_hash)); + + boot_mode = (enum vb2_boot_mode *)&ctx->boot_mode; + *boot_mode = VB2_BOOT_MODE_NORMAL; + + // TODO: more workbuf fields - flags, secdata_firmware + + vb2api_secdata_kernel_create(ctx); + vb2_secdata_kernel_init(ctx); + vb2_secdata_kernel_set(ctx, VB2_SECDATA_KERNEL_FLAGS, + VB2_SECDATA_KERNEL_FLAG_HWCRYPTO_ALLOWED); +} + +/* Mocks */ +struct vb2_gbb_header *vb2_get_gbb(struct vb2_context *c) +{ + return &gbb; +} + +vb2_error_t vb2ex_read_resource(struct vb2_context *c, + enum vb2_resource_index index, uint32_t offset, + void *buf, uint32_t size) +{ + memset(buf, 0, size); + return VB2_SUCCESS; +} + +vb2_error_t vb2_gbb_read_root_key(struct vb2_context *c, + struct vb2_packed_key **keyp, uint32_t *size, + struct vb2_workbuf *wb) +{ + *keyp = &mock_key; + return VB2_SUCCESS; +} + +vb2_error_t vb2_gbb_read_recovery_key(struct vb2_context *c, + struct vb2_packed_key **keyp, + uint32_t *size, struct vb2_workbuf *wb) +{ + *keyp = &mock_key; + return VB2_SUCCESS; +} + +vb2_error_t VbExDiskRead(VbExDiskHandle_t h, uint64_t lba_start, + uint64_t lba_count, void *buffer) +{ + if ((int)lba_start == disk_read_to_fail) + return VB2_ERROR_MOCK; + + return VB2_SUCCESS; +} + +int AllocAndReadGptData(VbExDiskHandle_t disk_handle, GptData *gptdata) +{ + return GPT_SUCCESS; +} + +int GptInit(GptData *gpt) +{ + return gpt_init_fail; +} + +int GptNextKernelEntry(GptData *gpt, uint64_t *start_sector, uint64_t *size) +{ + struct mock_part *p = mock_parts + mock_part_next; + + if (!p->size) + return GPT_ERROR_NO_VALID_KERNEL; + + if (gpt->flags & GPT_FLAG_EXTERNAL) + gpt_flag_external++; + + gpt->current_kernel = mock_part_next; + *start_sector = p->start; + *size = p->size; + mock_part_next++; + return GPT_SUCCESS; +} + +int GptUpdateKernelEntry(GptData *gpt, uint32_t update_type) +{ + return GPT_SUCCESS; +} + +int WriteAndFreeGptData(VbExDiskHandle_t disk_handle, GptData *gptdata) +{ + return GPT_SUCCESS; +} + +void GetCurrentKernelUniqueGuid(GptData *gpt, void *dest) +{ + static char fake_guid[] = "FakeGuid"; + + memcpy(dest, fake_guid, sizeof(fake_guid)); +} + +vb2_error_t vb2_unpack_key_buffer(struct vb2_public_key *key, + const uint8_t *buf, uint32_t size) +{ + if (--unpack_key_fail == 0) + return VB2_ERROR_MOCK; + + return VB2_SUCCESS; +} + +vb2_error_t vb2_verify_keyblock(struct vb2_keyblock *block, uint32_t size, + const struct vb2_public_key *key, + const struct vb2_workbuf *wb) +{ + if (keyblock_verify_fail >= 1) + return VB2_ERROR_MOCK; + + /* Use this as an opportunity to override the keyblock */ + memcpy((void *)block, &kbh, sizeof(kbh)); + return VB2_SUCCESS; +} + +vb2_error_t vb2_verify_keyblock_hash(const struct vb2_keyblock *block, + uint32_t size, + const struct vb2_workbuf *wb) +{ + if (keyblock_verify_fail >= 2) + return VB2_ERROR_MOCK; + + /* Use this as an opportunity to override the keyblock */ + memcpy((void *)block, &kbh, sizeof(kbh)); + return VB2_SUCCESS; +} + +vb2_error_t vb2_verify_kernel_preamble(struct vb2_kernel_preamble *preamble, + uint32_t size, const struct vb2_public_key *key, + const struct vb2_workbuf *wb) +{ + if (preamble_verify_fail) + return VB2_ERROR_MOCK; + + /* Use this as an opportunity to override the preamble */ + memcpy((void *)preamble, &kph, sizeof(kph)); + return VB2_SUCCESS; +} + +vb2_error_t vb2_verify_data(const uint8_t *data, uint32_t size, + struct vb2_signature *sig, + const struct vb2_public_key *key, + const struct vb2_workbuf *wb) +{ + if (verify_data_fail) + return VB2_ERROR_MOCK; + + return VB2_SUCCESS; +} + +vb2_error_t vb2_digest_buffer(const uint8_t *buf, uint32_t size, + enum vb2_hash_algorithm hash_alg, uint8_t *digest, + uint32_t digest_size) +{ + memcpy(digest, mock_digest, sizeof(mock_digest)); + return VB2_SUCCESS; +} + +/* Make sure nothing tested here ever calls this directly. */ +void vb2api_fail(struct vb2_context *c, uint8_t reason, uint8_t subcode) +{ + TEST_TRUE(0, " called vb2api_fail()"); +} + +static void TestLoadKernel(int expect_retval, const char *test_name) +{ + TEST_EQ(LoadKernel(ctx, &lkp, &disk_info), expect_retval, test_name); +} + +/** + * Trivial invalid calls to LoadKernel() + */ +static void InvalidParamsTest(void) +{ + ResetMocks(); + gpt_init_fail = 1; + TestLoadKernel(VB2_ERROR_LK_NO_KERNEL_FOUND, "Bad GPT"); + + /* This causes the stream open call to fail */ + ResetMocks(); + lkp.disk_handle = NULL; + disk_info.handle = NULL; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, "Bad disk handle"); +} + +static void LoadKernelTest(void) +{ + ResetMocks(); + TestLoadKernel(0, "First kernel good"); + TEST_EQ(lkp.partition_number, 1, " part num"); + TEST_EQ(lkp.bootloader_address, 0xbeadd008, " bootloader addr"); + TEST_EQ(lkp.bootloader_size, 0x1234, " bootloader size"); + TEST_STR_EQ((char *)lkp.partition_guid, "FakeGuid", " guid"); + TEST_EQ(gpt_flag_external, 0, "GPT was internal"); + TEST_NEQ(sd->flags & VB2_SD_FLAG_KERNEL_SIGNED, 0, " use signature"); + + ResetMocks(); + mock_parts[1].start = 300; + mock_parts[1].size = 150; + TestLoadKernel(0, "Two good kernels"); + TEST_EQ(lkp.partition_number, 1, " part num"); + TEST_EQ(mock_part_next, 1, " didn't read second one"); + + /* Fail if no kernels found */ + ResetMocks(); + mock_parts[0].size = 0; + TestLoadKernel(VB2_ERROR_LK_NO_KERNEL_FOUND, "No kernels"); + + /* Skip kernels which are too small */ + ResetMocks(); + mock_parts[0].size = 10; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, "Too small"); + + ResetMocks(); + disk_read_to_fail = 100; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Fail reading kernel start"); + + ResetMocks(); + keyblock_verify_fail = 1; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Fail key block sig"); + + /* In dev mode, fail if hash is bad too */ + ResetMocks(); + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; + *boot_mode = VB2_BOOT_MODE_DEVELOPER; + keyblock_verify_fail = 2; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Fail key block dev hash"); + + /* But just bad sig is ok */ + ResetMocks(); + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; + *boot_mode = VB2_BOOT_MODE_DEVELOPER; + keyblock_verify_fail = 1; + TestLoadKernel(0, "Succeed keyblock dev sig"); + TEST_EQ(sd->flags & VB2_SD_FLAG_KERNEL_SIGNED, 0, " use hash"); + + /* In dev mode and requiring signed kernel, fail if sig is bad */ + ResetMocks(); + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; + *boot_mode = VB2_BOOT_MODE_DEVELOPER; + vb2_nv_set(ctx, VB2_NV_DEV_BOOT_SIGNED_ONLY, 1); + keyblock_verify_fail = 1; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Fail key block dev sig"); + + ResetMocks(); + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; + *boot_mode = VB2_BOOT_MODE_DEVELOPER; + fwmp->flags |= VB2_SECDATA_FWMP_DEV_ENABLE_OFFICIAL_ONLY; + keyblock_verify_fail = 1; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Fail key block dev sig fwmp"); + + /* Check keyblock flags */ + ResetMocks(); + kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_RECOVERY_0 + | VB2_KEYBLOCK_FLAG_DEVELOPER_1 + | VB2_KEYBLOCK_FLAG_MINIOS_0; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Keyblock dev flag mismatch"); + + ResetMocks(); + kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_RECOVERY_1 + | VB2_KEYBLOCK_FLAG_DEVELOPER_0 + | VB2_KEYBLOCK_FLAG_MINIOS_0; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Keyblock rec flag mismatch"); + + ResetMocks(); + kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_RECOVERY_0 + | VB2_KEYBLOCK_FLAG_DEVELOPER_0 + | VB2_KEYBLOCK_FLAG_MINIOS_1; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Keyblock minios flag mismatch"); + + ResetMocks(); + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_RECOVERY_1 + | VB2_KEYBLOCK_FLAG_DEVELOPER_1 + | VB2_KEYBLOCK_FLAG_MINIOS_0; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Keyblock recdev flag mismatch"); + + ResetMocks(); + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_RECOVERY_1 + | VB2_KEYBLOCK_FLAG_DEVELOPER_0 + | VB2_KEYBLOCK_FLAG_MINIOS_0; + TestLoadKernel(0, "Keyblock rec flag okay"); + + ResetMocks(); + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE | VB2_CONTEXT_DEVELOPER_MODE; + *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_RECOVERY_1 + | VB2_KEYBLOCK_FLAG_DEVELOPER_0 + | VB2_KEYBLOCK_FLAG_MINIOS_0; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Keyblock rec!dev flag mismatch"); + + ResetMocks(); + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE | VB2_CONTEXT_DEVELOPER_MODE; + *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_RECOVERY_1 + | VB2_KEYBLOCK_FLAG_DEVELOPER_1 + | VB2_KEYBLOCK_FLAG_MINIOS_0; + TestLoadKernel(0, "Keyblock recdev flag okay"); + + /* Check keyblock flags (dev mode + signed kernel required) */ + ResetMocks(); + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; + *boot_mode = VB2_BOOT_MODE_DEVELOPER; + vb2_nv_set(ctx, VB2_NV_DEV_BOOT_SIGNED_ONLY, 1); + kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_RECOVERY_1 + | VB2_KEYBLOCK_FLAG_DEVELOPER_0 + | VB2_KEYBLOCK_FLAG_MINIOS_0; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Keyblock dev flag mismatch (signed kernel required)"); + + ResetMocks(); + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; + *boot_mode = VB2_BOOT_MODE_DEVELOPER; + fwmp->flags |= VB2_SECDATA_FWMP_DEV_ENABLE_OFFICIAL_ONLY; + kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_RECOVERY_1 + | VB2_KEYBLOCK_FLAG_DEVELOPER_0 + | VB2_KEYBLOCK_FLAG_MINIOS_0; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Keyblock dev flag mismatch (signed kernel required)"); + + ResetMocks(); + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; + *boot_mode = VB2_BOOT_MODE_DEVELOPER; + fwmp->flags |= VB2_SECDATA_FWMP_DEV_ENABLE_OFFICIAL_ONLY; + kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_RECOVERY_0 + | VB2_KEYBLOCK_FLAG_DEVELOPER_0 + | VB2_KEYBLOCK_FLAG_MINIOS_1; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Keyblock dev flag mismatch (signed kernel required)"); + + ResetMocks(); + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; + *boot_mode = VB2_BOOT_MODE_DEVELOPER; + vb2_nv_set(ctx, VB2_NV_DEV_BOOT_SIGNED_ONLY, 1); + kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_RECOVERY_0 + | VB2_KEYBLOCK_FLAG_DEVELOPER_1 + | VB2_KEYBLOCK_FLAG_MINIOS_0; + TestLoadKernel(0, "Keyblock dev flag okay (signed kernel required)"); + + /* Check kernel key version */ + ResetMocks(); + kbh.data_key.key_version = 1; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Keyblock kernel key rollback"); + + ResetMocks(); + kbh.data_key.key_version = 0x10000; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Keyblock kernel key version too big"); + + ResetMocks(); + kbh.data_key.key_version = 3; + TestLoadKernel(0, "Keyblock version roll forward"); + TEST_EQ(sd->kernel_version, 0x30001, " SD version"); + + ResetMocks(); + kbh.data_key.key_version = 3; + mock_parts[1].start = 300; + mock_parts[1].size = 150; + TestLoadKernel(0, "Two kernels roll forward"); + TEST_EQ(mock_part_next, 2, " read both"); + TEST_EQ(sd->kernel_version, 0x30001, " SD version"); + + ResetMocks(); + kbh.data_key.key_version = 1; + *boot_mode = VB2_BOOT_MODE_DEVELOPER; + TestLoadKernel(0, "Key version ignored in dev mode"); + + ResetMocks(); + kbh.data_key.key_version = 1; + *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + TestLoadKernel(0, "Key version ignored in rec mode"); + + ResetMocks(); + unpack_key_fail = 2; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, "Bad data key"); + + ResetMocks(); + preamble_verify_fail = 1; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, "Bad preamble"); + + ResetMocks(); + kph.kernel_version = 0; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Kernel version rollback"); + + ResetMocks(); + kph.kernel_version = 0; + *boot_mode = VB2_BOOT_MODE_DEVELOPER; + TestLoadKernel(0, "Kernel version ignored in dev mode"); + + ResetMocks(); + kph.kernel_version = 0; + *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + TestLoadKernel(0, "Kernel version ignored in rec mode"); + + /* Check kernel version (dev mode + signed kernel required) */ + ResetMocks(); + kbh.data_key.key_version = 0; + *boot_mode = VB2_BOOT_MODE_DEVELOPER; + vb2_nv_set(ctx, VB2_NV_DEV_BOOT_SIGNED_ONLY, 1); + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Keyblock key version checked in dev mode " + "(signed kernel required)"); + + ResetMocks(); + kbh.data_key.key_version = 0; + *boot_mode = VB2_BOOT_MODE_DEVELOPER; + fwmp->flags |= VB2_SECDATA_FWMP_DEV_ENABLE_OFFICIAL_ONLY; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Keyblock key version checked in dev mode " + "(signed kernel required)"); + + /* Check developer key hash - bad */ + ResetMocks(); + *boot_mode = VB2_BOOT_MODE_DEVELOPER; + fwmp->flags |= VB2_SECDATA_FWMP_DEV_USE_KEY_HASH; + fwmp->dev_key_hash[0]++; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Fail keyblock dev fwmp hash"); + + /* Check developer key hash - bad (recovery mode) */ + ResetMocks(); + *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + fwmp->flags |= VB2_SECDATA_FWMP_DEV_USE_KEY_HASH; + fwmp->dev_key_hash[0]++; + TestLoadKernel(0, "Bad keyblock dev fwmp hash ignored in rec mode"); + + /* Check developer key hash - good */ + ResetMocks(); + *boot_mode = VB2_BOOT_MODE_DEVELOPER; + fwmp->flags |= VB2_SECDATA_FWMP_DEV_USE_KEY_HASH; + TestLoadKernel(0, "Good keyblock dev fwmp hash"); + + ResetMocks(); + kph.preamble_size |= 0x07; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Kernel body offset"); + + ResetMocks(); + kph.preamble_size += 65536; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Kernel body offset huge"); + + /* Check getting kernel load address from header */ + ResetMocks(); + kph.body_load_address = (size_t)kernel_buffer; + lkp.kernel_buffer = NULL; + TestLoadKernel(0, "Get load address from preamble"); + TEST_PTR_EQ(lkp.kernel_buffer, kernel_buffer, " address"); + /* Size is rounded up to nearest sector */ + TEST_EQ(lkp.kernel_buffer_size, 70144, " size"); + + ResetMocks(); + lkp.kernel_buffer_size = 8192; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Kernel too big for buffer"); + + ResetMocks(); + mock_parts[0].size = 130; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Kernel too big for partition"); + + ResetMocks(); + kph.body_signature.data_size = 8192; + TestLoadKernel(0, "Kernel tiny"); + + ResetMocks(); + disk_read_to_fail = 228; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, + "Fail reading kernel data"); + + ResetMocks(); + verify_data_fail = 1; + TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, "Bad data"); + + /* Check that EXTERNAL_GPT flag makes it down */ + ResetMocks(); + disk_info.flags |= VB_DISK_FLAG_EXTERNAL_GPT; + TestLoadKernel(0, "Succeed external GPT"); + TEST_EQ(gpt_flag_external, 1, "GPT was external"); + + /* Check recovery from unreadble primary GPT */ + ResetMocks(); + disk_read_to_fail = 1; + TestLoadKernel(0, "Can't read disk"); +} + +int main(void) +{ + InvalidParamsTest(); + LoadKernelTest(); + + return gTestSuccess ? 0 : 255; +} diff --git a/tests/verify_kernel.c b/tests/verify_kernel.c new file mode 100644 index 0000000..a79f33a --- /dev/null +++ b/tests/verify_kernel.c @@ -0,0 +1,152 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Routines for verifying a kernel or disk image + */ + +#include "2sysincludes.h" +#include "2api.h" +#include "2common.h" +#include "2misc.h" +#include "2nvstorage.h" +#include "2secdata.h" +#include "host_common.h" +#include "util_misc.h" +#include "vboot_api.h" +#include "load_kernel_fw.h" + +static uint8_t workbuf[VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); +static struct vb2_context *ctx; +static struct vb2_shared_data *sd; + +static uint8_t *diskbuf; + +static VbSelectAndLoadKernelParams params; +static VbDiskInfo disk_info; + +vb2_error_t VbExDiskRead(VbExDiskHandle_t handle, uint64_t lba_start, + uint64_t lba_count, void *buffer) +{ + if (handle != (VbExDiskHandle_t)1) + return VB2_ERROR_UNKNOWN; + if (lba_start >= disk_info.streaming_lba_count) + return VB2_ERROR_UNKNOWN; + if (lba_start + lba_count > disk_info.streaming_lba_count) + return VB2_ERROR_UNKNOWN; + + memcpy(buffer, diskbuf + lba_start * 512, lba_count * 512); + return VB2_SUCCESS; +} + +vb2_error_t VbExDiskWrite(VbExDiskHandle_t handle, uint64_t lba_start, + uint64_t lba_count, const void *buffer) +{ + if (handle != (VbExDiskHandle_t)1) + return VB2_ERROR_UNKNOWN; + if (lba_start >= disk_info.streaming_lba_count) + return VB2_ERROR_UNKNOWN; + if (lba_start + lba_count > disk_info.streaming_lba_count) + return VB2_ERROR_UNKNOWN; + + memcpy(diskbuf + lba_start * 512, buffer, lba_count * 512); + return VB2_SUCCESS; +} + +static void print_help(const char *progname) +{ + printf("\nUsage: %s \n\n", + progname); +} + +int main(int argc, char *argv[]) +{ + struct vb2_packed_key *kernkey; + uint64_t disk_bytes = 0; + vb2_error_t rv; + + if (argc < 3) { + print_help(argv[0]); + return 1; + } + + /* Load disk file */ + /* TODO: is it better to mmap() in the long run? */ + diskbuf = ReadFile(argv[1], &disk_bytes); + if (!diskbuf) { + fprintf(stderr, "Can't read disk file %s\n", argv[1]); + return 1; + } + + /* Read public key */ + kernkey = vb2_read_packed_key(argv[2]); + if (!kernkey) { + fprintf(stderr, "Can't read key file %s\n", argv[2]); + return 1; + } + + /* Set up params */ + params.disk_handle = (VbExDiskHandle_t)1; + disk_info.handle = (VbExDiskHandle_t)1; + disk_info.bytes_per_lba = 512; + disk_info.streaming_lba_count = disk_bytes / 512; + disk_info.lba_count = disk_info.streaming_lba_count; + + params.kernel_buffer_size = 16 * 1024 * 1024; + params.kernel_buffer = malloc(params.kernel_buffer_size); + if (!params.kernel_buffer) { + fprintf(stderr, "Can't allocate kernel buffer\n"); + return 1; + } + + /* TODO(chromium:441893): support dev-mode flag and external gpt flag */ + disk_info.flags = 0; + + if (vb2api_init(&workbuf, sizeof(workbuf), &ctx)) { + fprintf(stderr, "Can't initialize workbuf\n"); + return 1; + } + sd = vb2_get_sd(ctx); + + /* Copy kernel subkey to workbuf */ + { + struct vb2_workbuf wb; + struct vb2_packed_key *dst; + uint32_t kernkey_size = kernkey->key_offset + kernkey->key_size; + vb2_workbuf_from_ctx(ctx, &wb); + dst = vb2_workbuf_alloc(&wb, kernkey_size); + memcpy(dst, kernkey, kernkey_size); + vb2_set_workbuf_used(ctx, vb2_offset_of(sd, wb.buf)); + sd->kernel_key_offset = vb2_offset_of(sd, dst); + sd->kernel_key_size = kernkey_size; + } + + /* + * LoadKernel() cares only about VBNV_DEV_BOOT_SIGNED_ONLY, and only in + * dev mode. So just use defaults for nv storage. + */ + vb2_nv_init(ctx); + /* We need to init kernel secdata for + * VB2_SECDATA_KERNEL_FLAG_HWCRYPTO_ALLOWED. + */ + vb2api_secdata_kernel_create(ctx); + vb2_secdata_kernel_init(ctx); + + /* Try loading kernel */ + rv = LoadKernel(ctx, ¶ms, &disk_info); + if (rv != VB2_SUCCESS) { + fprintf(stderr, "LoadKernel() failed with code %d\n", rv); + return 1; + } + + printf("Found a good kernel.\n"); + printf("Partition number: %u\n", params.partition_number); + printf("Bootloader address: 0x%" PRIx64 "\n", + params.bootloader_address); + + /* TODO: print other things (partition GUID, shared_data) */ + + printf("Yaay!\n"); + return 0; +} diff --git a/unblocked_terms.txt b/unblocked_terms.txt new file mode 100644 index 0000000..e9ad8c2 --- /dev/null +++ b/unblocked_terms.txt @@ -0,0 +1,2 @@ +dummy +master \ No newline at end of file diff --git a/utility/chromeos-tpm-recovery b/utility/chromeos-tpm-recovery new file mode 100755 index 0000000..12616b4 --- /dev/null +++ b/utility/chromeos-tpm-recovery @@ -0,0 +1,229 @@ +#!/bin/sh -u +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# Run TPM diagnostics in recovery mode, and attempt to fix problems. This is +# specific to devices with chromeos firmware. +# +# Most of the diagnostics examine the TPM state and try to fix it. This may +# require clearing TPM ownership. + +tpmc=${USR_BIN:=/usr/bin}/tpmc +crossystem=${USR_BIN}/crossystem +dot_recovery=${DOT_RECOVERY:=/mnt/stateful_partition/.recovery} +awk=/usr/bin/awk +initctl=/sbin/initctl +daemon_was_running= +err=0 +secdata_firmware=0x1007 +secdata_kernel=0x1008 + +tpm2_target() { + # This is not an ideal way to tell if we are running on a tpm2 target, but + # it will have to do for now. + if [ -f "/etc/init/trunksd.conf" ]; then + return 0 + else + return 1 + fi +} + +use_v0_secdata_kernel() { + local fwid="$(crossystem ro_fwid)" + local major="$(printf "$fwid" | cut -d. -f2)" + local minor="$(printf "$fwid" | cut -d. -f3)" + + # TPM1 firmware never supports the v1 kernel space format. + if ! tpm2_target; then + return 0 + fi + + # First some validity checks: X -eq X checks that X is a number. cut may + # return the whole string if no delimiter found, so major != minor checks that + # the version was at least somewhat correctly formatted. + if [ $major -eq $major ] && [ $minor -eq $minor ] && [ $major -ne $minor ]; then + # Now what we really care about: is this firmware older than CL:2041695? + if [ $major -lt 12953 ]; then + return 0 + else + return 1 + fi + else + log "Cannot parse FWID. Assuming local build that supports v1 kernel space." + return 1 + fi +} + +log() { + echo "$*" +} + +quit() { + log "ERROR: $*" + restart_daemon_if_needed + log "exiting" + + exit 1 +} + +log_tryfix() { + log "$*: attempting to fix" +} + +log_error() { + err=$((err + 1)) + log "ERROR: $*" +} + + +log_warn() { + log "WARNING: $*" +} + +tpm_clear_and_reenable () { + $tpmc clear + + # The below commands are are no-op on tpm2, but let's keep them here for + # both TPM versions in case they are implemented in the future for + # version 2. + $tpmc enable + $tpmc activate +} + +write_space () { + # do not quote "$2", as we mean to expand it here + if ! $tpmc write $1 $2; then + log_error "writing to $1 failed" + else + log "$1 written successfully" + fi +} + +reset_ro_space () { + local index=$1 + local bytes="$2" + local size=$(printf "$bytes" | wc -w) + local permissions=0x8001 + + if tpm2_target; then + log "Cannot redefine RO space for TPM2 (b/140958855). Let's just hope it looks good..." + else + if ! $tpmc definespace $index $size $permissions; then + log_error "could not redefine RO space $index" + # try writing it anyway, just in case it works... + fi + fi + + write_space $index "$bytes" +} + +reset_rw_space () { + local index=$1 + local bytes="$2" + local size=$(printf "$bytes" | wc -w) + local permissions=0x1 + + if tpm2_target; then + permissions=0x40050001 + fi + + if ! $tpmc definespace $index $size $permissions; then + log_error "could not redefine RW space $index" + # try writing it anyway, just in case it works... + fi + + write_space $index "$bytes" +} + +restart_daemon_if_needed() { + if [ "$daemon_was_running" = 1 ]; then + log "Restarting ${DAEMON}..." + $initctl start "${DAEMON}" >/dev/null + fi +} + +# ------------ +# MAIN PROGRAM +# ------------ + +# validity check: are we executing in a recovery image? + +if [ -e $dot_recovery ]; then + quit "This is a developer utility, it should never run on a (production) recovery image" +fi + +# Did the firmware keep the TPM unlocked? + +if ! $($crossystem mainfw_type?recovery); then + quit "You must put a test image on a USB stick and boot it in recovery mode (this means Esc+Refresh+Power, *not* Ctrl-U!) to run this" +fi + +if tpm2_target; then + DAEMON="trunksd" +else + DAEMON="tcsd" +fi + +# TPM daemon may or may not be running + +log "Stopping ${DAEMON}..." +if $initctl stop "${DAEMON}" >/dev/null 2>/dev/null; then + daemon_was_running=1 + log "done" +else + daemon_was_running=0 + log "(was not running)" +fi + +# Is the state of the PP enable flags correct? + +if ! tpm2_target; then + if ! ($tpmc getpf | grep -q "physicalPresenceLifetimeLock 1" && + $tpmc getpf | grep -q "physicalPresenceHWEnable 0" && + $tpmc getpf | grep -q "physicalPresenceCMDEnable 1"); then + log_tryfix "bad state of physical presence enable flags" + if $tpmc ppfin; then + log "physical presence enable flags are now correctly set" + else + quit "could not set physical presence enable flags" + fi + fi + + # Is physical presence turned on? + + if $tpmc getvf | grep -q "physicalPresence 0"; then + log_tryfix "physical presence is OFF, expected ON" + # attempt to turn on physical presence + if $tpmc ppon; then + log "physical presence is now on" + else + quit "could not turn physical presence on" + fi + fi +else + if ! $tpmc getvf | grep -q 'phEnable 1'; then + quit "Platform Hierarchy is disabled, TPM can't be recovered" + fi +fi + +# I never learned what this does, but it's probably good just in case... +tpm_clear_and_reenable + +# Reset firmware and kernel spaces to default (rollback version 1/1) +reset_ro_space $secdata_firmware "02 0 1 0 1 0 0 0 0 4f" + +if use_v0_secdata_kernel; then + reset_rw_space $secdata_kernel "02 4c 57 52 47 1 0 1 0 0 0 0 55" +else + reset_rw_space $secdata_kernel "10 28 0c 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0" +fi + +restart_daemon_if_needed + +if [ "$err" -eq 0 ]; then + log "TPM has successfully been reset to factory defaults" +else + log_error "TPM was not fully recovered." + exit 1 +fi diff --git a/utility/chromeos-tpm-recovery-test b/utility/chromeos-tpm-recovery-test new file mode 100755 index 0000000..42331e2 --- /dev/null +++ b/utility/chromeos-tpm-recovery-test @@ -0,0 +1,343 @@ +#!/bin/sh -u +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# Test the chromeos TPM recovery script by faking the entire execution +# environment. + +rm -rf tpm-recovery-test-workdir +mkdir tpm-recovery-test-workdir +cd tpm-recovery-test-workdir + +test_kind= +if [ $# -ge 1 ]; then + test_kind="$1" +fi + +if [ "$test_kind" != "" -a "$test_kind" != "fake" ]; then + echo "$0: usage: $0 [fake]" + echo "With fake as the argument, use a simulated TPM instead of the real one" +fi + +if [ "$test_kind" = "fake" ]; then + export USR_BIN=. + export USR_SBIN=. + export USR_LOCAL_BIN=. + export USR_LOCAL_SBIN=. + export DOT_RECOVERY=.recovery + export ACPI_DIR=. + ctr=../chromeos-tpm-recovery + tpmc=./tpmc +else + ctr=chromeos-tpm-recovery + tpmc=tpmc +fi + +# For simplicity, build the permanent environment as if we prepared to run the +# fake test, even if we're running the test on a real TPM. + +echo > .recovery +echo 3 > BINF.0 +echo 0 > CHSW + +export NVRAM_SPACE_OVERHEAD=200 +space_overhead=$NVRAM_SPACE_OVERHEAD + +# build tpmc +cat > tpmc <<"EOF" +#!/bin/sh -u +# Fake tpmc program + +definespace () { + index=$2 + size=$3 + permissions=$4 + space_overhead=$NVRAM_SPACE_OVERHEAD + + if [ -e space.$index.data -a -e tpm-owned ]; then + echo "cannot redefine space without auth" + fi + + totalsize=$(( $size + $space_overhead )) + free=$(cat nvram.freespace) + + if [ $totalsize -gt $free ]; then + return 17 # NO_SPACE + fi + + if [ $index != 0xf004 ]; then + echo $size > space.$index.size + echo $permissions > space.$index.perm + for i in $(seq 1 $(($size))); do + echo -n "ff " >> space.$index.data + done + echo $(( $free - $totalsize )) > nvram.freespace + fi + return 0 +} + +case $1 in + + clear) + rm -f tpm-owned + ;; + + enable) + # boring + ;; + + activate) + # boring + ;; + + definespace) + definespace $* + ;; + + getp) + echo space blah has permissions $(cat space.$2.perm) + ;; + + read) + index=$2 + size=$3 + maxsize=$(cat space.$index.size) + if [ $(($size > $maxsize)) -eq 1 ]; then + echo "size $size too large for space (max is $maxsize)" + exit 1 + fi + dd if=space.$index.data bs=1 count=$(($3 * 3)) 2> /dev/null + ;; + + write) + args="$@" + index=$2 + bytes="$(echo $args | sed 's/[^ ]* [^ ]* //')" + size=$(echo $bytes | wc -w) + maxsize=$(cat space.$index.size) + if [ $(($size > $maxsize)) -eq 1 ]; then + echo "size $size too large for space (max is $(($maxsize)))" + exit 1 + fi + re=$(echo "$bytes " | sed 's/././g') + sed "s/$re/$bytes /" < space.$index.data > _tmp_ + mv _tmp_ space.$index.data + ;; + + getpf) + echo "disable 0" + echo "deactivated 0" + echo "nvLocked 1" + echo "physicalPresenceLifetimeLock 1" + echo "physicalPresenceHWEnable 0" + echo "physicalPresenceCMDEnable 1" + ;; + + getvf) + echo "bGlobalLock 1" + echo "physicalPresence 1" + echo "physicalPresenceLock 0" + ;; + + ppfin) + # boring + ;; + + ppon) + # boring + ;; + + *) + echo "tpmc: invalid command $1" + exit 1 + ;; +esac + +EOF + +# build nvtool +cat > tpm-nvtool <<"EOF" +#!/bin/sh -u + +space_overhead=$NVRAM_SPACE_OVERHEAD + +print_space () { + local index=$1 + printf "# NV Index 0x%08x" $(( $index )) + echo " uninteresting random garbage" + echo " further random garbage" + echo "" +} + +if [ "$1" = "--release" ]; then + if [ "$2" != "--index" -o \ + "$4" != "--owner_password" ]; then + echo "sorry, picky tpm-nvtool" + exit 1 + fi + index=$3 + if [ ! -f tpm-owned ]; then + echo "tpm is unowned" + exit 1 + fi + size=$(cat space.$index.size) + free=$(cat nvram.freespace) + rm space.$index.* + echo $(( $size + $space_overhead + $free )) > nvram.freespace +elif [ "$1" = "--list" ]; then + for s in space.*.data; do + print_space $(echo $s | sed -e "s/[^.]*\.//" -e "s/\..*//") + done +fi +EOF + +# build tpm_takeownership +cat > tpm_takeownership <<"EOF" +#!/bin/sh -u +if [ -f tpm-owned ]; then + echo "tpm is already owned" + exit 1 +fi +echo > tpm-owned +EOF + +# build tcsd +cat > tcsd <<"EOF" +#!/bin/sh -u +trap "{ rm tcsd_is_running; }" EXIT +echo > tcsd_is_running +sleep 365d +EOF + +tcsd_pid=0 + +start_tcsd () { + if [ $tcsd_pid -ne 0 ]; then + echo TCSD is already started + exit 1 + fi + tcsd -f & + tcsd_pid=$! + sleep 2 +} + +stop_tcsd () { + if [ $tcsd_pid -eq 0 ]; then + echo TCSD is already stopped + exit 1 + fi + kill $tcsd_pid + sleep 0.5 + kill $tcsd_pid > /dev/null 2>&1 + sleep 0.5 + wait $tcsd_pid > /dev/null 2>&1 # we trust that tcsd will agree to die + tcsd_pid=0 +} + +tpm_clear_and_reenable () { + tpmc clear + tpmc enable + tpmc activate +} + +takeownership () { + if [ "$test_kind" = "fake" ]; then + touch tpm_owned + else + tpm_clear_and_reenable + start_tcsd + tpm_takeownership -y -z + stop_tcsd + fi +} + +remove_chromeos_spaces () { + if [ "$test_kind" = "fake" ]; then + rm -f space.* + echo 1500 > nvram.freespace + else + takeownership + start_tcsd + tpm-nvtool --release --index 0x1007 --owner_password "" + tpm-nvtool --release --index 0x1008 --owner_password "" + stop_tcsd + tpm_clear_and_reenable + fi +} + +chmod 755 tpmc tpm-nvtool tpm_takeownership tcsd + +echo "starting test, results in $(pwd)/log" +echo "starting TPM recovery test" > log + +if ps ax | grep "tcs[d]"; then + echo "a tcsd is process appears to be running, please kill it first" + exit 1 +fi + +# normal run +test_normal_run () { + echo "TEST: normal run" >> log + + remove_chromeos_spaces + $tpmc definespace 0x1007 0xa 0x8001 + $tpmc definespace 0x1008 0xd 0x1 + $tpmc write 0x1008 01 4c 57 52 47 + takeownership + + $ctr log +} + +# Kernel space with wrong ID +test_wrong_id () { + echo "TEST: bad kernel space ID" >> log + + remove_chromeos_spaces + $tpmc definespace 0x1007 0xa 0x8001 + $tpmc definespace 0x1008 0xd 0x1 + takeownership + + $ctr log +} + +# Kernel space with wrong size +test_wrong_size () { + echo "TEST: bad kernel space size" >> log + + remove_chromeos_spaces + $tpmc definespace 0x1007 0xa 0x8001 + $tpmc definespace 0x1008 0xc 0x1 + takeownership + + $ctr log +} + +# Kernel space with wrong size AND bogus space to exhaust nvram +test_wrong_size_hog () { + echo "TEST: bad kernel space size and no room" >> log + + remove_chromeos_spaces + $tpmc definespace 0x1007 0xa 0x8001 + $tpmc definespace 0x1008 0x1 0x1 + if [ "$test_kind" = "fake" ]; then + space_hog_size=$(( $(cat nvram.freespace) - $space_overhead - 1 )) + echo "remaining $(cat nvram.freespace) bytes" >> log + else + space_hog_size=$(( $(tpm-nvsize) - 2 )) + fi + echo "hogging $(( $space_hog_size )) bytes" >> log + $tpmc definespace 0xcafe $(printf "%#x" $space_hog_size) 0x1 \ + || echo "hogging failed!" >> log + takeownership + + $ctr log +} + +test_normal_run +test_wrong_id +test_wrong_size +test_wrong_size_hog + +echo "test completed" >> log +echo "test completed" diff --git a/utility/crossystem.c b/utility/crossystem.c new file mode 100644 index 0000000..7781e94 --- /dev/null +++ b/utility/crossystem.c @@ -0,0 +1,341 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Chrome OS firmware/system interface utility + */ + +#include +#include +#include + +#include "crossystem.h" + +/* Flags for Param */ +#define IS_STRING 0x01 /* String (not present = integer) */ +#define CAN_WRITE 0x02 /* Writable (not present = read-only */ +#define NO_PRINT_ALL 0x04 /* Don't print contents of parameter when + * doing a print-all */ + +typedef struct Param { + const char* name; /* Parameter name */ + int flags; /* Flags (see above) */ + const char* desc; /* Human-readable description */ + const char* format; /* Format string, if non-NULL and 0==is_string*/ +} Param; + +/* List of parameters, terminated with a param with NULL name */ +const Param sys_param_list[] = { + {"arch", IS_STRING, "Platform architecture"}, + {"backup_nvram_request", CAN_WRITE, + "Backup the nvram somewhere at the next boot. Cleared on success."}, + {"battery_cutoff_request", CAN_WRITE, + "Cut off battery and shutdown on next boot"}, + {"block_devmode", CAN_WRITE, "Block all use of developer mode"}, + {"clear_tpm_owner_done", CAN_WRITE, "Clear TPM owner done"}, + {"clear_tpm_owner_request", CAN_WRITE, "Clear TPM owner on next boot"}, + {"cros_debug", 0, "OS should allow debug features"}, + {"dbg_reset", CAN_WRITE, "Debug reset mode request"}, + {"debug_build", 0, "OS image built for debug features"}, + {"dev_boot_altfw", CAN_WRITE, "Enable developer mode alternate bootloader"}, + {"dev_boot_signed_only", CAN_WRITE, + "Enable developer mode boot only from official kernels"}, + {"dev_boot_usb", CAN_WRITE, + "Enable developer mode boot from external disk (USB/SD)"}, + {"dev_default_boot", IS_STRING|CAN_WRITE, + "Default boot from disk, altfw or usb"}, + {"dev_enable_udc", CAN_WRITE, "Enable USB Device Controller"}, + {"devsw_boot", 0, "Developer switch position at boot"}, + {"devsw_cur", 0, "Developer switch current position"}, + {"diagnostic_request", CAN_WRITE, "Request diagnostic rom run on next boot"}, + {"disable_dev_request", CAN_WRITE, "Disable virtual dev-mode on next boot"}, + {"ecfw_act", IS_STRING, "Active EC firmware"}, + {"post_ec_sync_delay", CAN_WRITE, + "Short delay after EC software sync (persistent, writable, eve only)"}, + {"fw_prev_result", IS_STRING, "Firmware result of previous boot"}, + {"fw_prev_tried", IS_STRING, "Firmware tried on previous boot (A or B)"}, + {"fw_result", IS_STRING|CAN_WRITE, "Firmware result this boot"}, + {"fw_tried", IS_STRING, "Firmware tried this boot (A or B)"}, + {"fw_try_count", CAN_WRITE, "Number of times to try fw_try_next"}, + {"fw_try_next", IS_STRING|CAN_WRITE, "Firmware to try next (A or B)"}, + {"fw_vboot2", 0, "1 if firmware was selected by vboot2 or 0 otherwise"}, + {"fwb_tries", CAN_WRITE, "Try firmware B count"}, + {"fwid", IS_STRING, "Active firmware ID"}, + {"fwupdate_tries", CAN_WRITE, + "Times to try OS firmware update (inside kern_nv)"}, + {"hwid", IS_STRING, "Hardware ID"}, + {"inside_vm", 0, "Running in a VM?"}, + {"kern_nv", 0, "Non-volatile field for kernel use", "0x%04x"}, + {"kernel_max_rollforward", CAN_WRITE, "Max kernel version to store into TPM", + "0x%08x"}, + {"kernkey_vfy", IS_STRING, "Type of verification done on kernel keyblock"}, + {"loc_idx", CAN_WRITE, "Localization index for firmware screens"}, + {"mainfw_act", IS_STRING, "Active main firmware"}, + {"mainfw_type", IS_STRING, "Active main firmware type"}, + {"minios_priority", IS_STRING|CAN_WRITE, + "miniOS image to try first (A or B)"}, + {"nvram_cleared", CAN_WRITE, "Have NV settings been lost? Write 0 to clear"}, + {"display_request", CAN_WRITE, "Should we initialize the display at boot?"}, + {"phase_enforcement", 0, + "Board should have full security settings applied"}, + {"recovery_reason", 0, "Recovery mode reason for current boot"}, + {"recovery_request", CAN_WRITE, "Recovery mode request"}, + {"recovery_subcode", CAN_WRITE, "Recovery reason subcode"}, + {"recoverysw_boot", 0, "Recovery switch position at boot"}, + {"recoverysw_cur", 0, "Recovery switch current position"}, + {"recoverysw_ec_boot", 0, "Recovery switch position at EC boot"}, + {"ro_fwid", IS_STRING, "Read-only firmware ID"}, + {"tpm_attack", CAN_WRITE, "TPM was interrupted since this flag was cleared"}, + {"tpm_fwver", 0, "Firmware version stored in TPM", "0x%08x"}, + {"tpm_kernver", 0, "Kernel version stored in TPM", "0x%08x"}, + {"tpm_rebooted", 0, "TPM requesting repeated reboot"}, + {"tried_fwb", 0, "Tried firmware B before A this boot"}, + {"try_ro_sync", 0, "try read only software sync"}, + {"vdat_flags", 0, "Flags from VbSharedData", "0x%08x"}, + {"vdat_lfdebug", IS_STRING|NO_PRINT_ALL, + "LoadFirmware() debug data (not in print-all)"}, + {"wipeout_request", CAN_WRITE, "Firmware requested factory reset (wipeout)"}, + {"wpsw_cur", 0, "Firmware write protect hardware switch current position"}, + /* Terminate with null name */ + {NULL, 0, NULL} +}; + +/* Longest Param name. */ +static const int kNameWidth = 23; + + +/* Print help */ +static void PrintHelp(const char *progname) { + const Param *p; + + printf("Usage:\n" + " %s [--all]\n" + " Prints all parameters with descriptions and current values.\n" + " If --all is specified, prints even normally hidden fields.\n" + " %s [param1 [param2 [...]]]\n" + " Prints the current value(s) of the parameter(s).\n" + " %s [param1=value1] [param2=value2 [...]]]\n" + " Sets the parameter(s) to the specified value(s).\n" + " %s [param1?value1] [param2?value2 [...]]]\n" + " Checks if the parameter(s) all contain the specified value(s).\n" + " Stops at the first error.\n" + "\n" + "Valid parameters:\n", progname, progname, progname, progname); + for (p = sys_param_list; p->name; p++) { + printf(" %-*s [%s/%s] %s\n", kNameWidth, p->name, + (p->flags & CAN_WRITE) ? "RW" : "RO", + (p->flags & IS_STRING) ? "str" : "int", + p->desc); + } + printf("\n" + "For more information, please see:\n" + "https://chromium.googlesource.com/chromiumos/docs/+/HEAD/" + "os_config.md#crossystem\n"); +} + + +/* Find the parameter in the list. + * + * Returns the parameter, or NULL if no match. */ +static const Param* FindParam(const char* name) { + const Param* p; + if (!name) + return NULL; + /* "legacy" term deprecated in favour of "altfw" (see: b/179458327) */ + if (!strcasecmp(name, "dev_boot_legacy")) { + fprintf(stderr, + "!!!\n" + "!!! PLEASE USE 'dev_boot_altfw' INSTEAD OF 'dev_boot_legacy'\n" + "!!!\n"); + name = "dev_boot_altfw"; + } + for (p = sys_param_list; p->name; p++) { + if (!strcasecmp(p->name, name)) + return p; + } + return NULL; +} + +/* Return code of SetParam() below. */ +enum { + PARAM_SUCCESS = 0, + PARAM_ERROR_UNKNOWN, + PARAM_ERROR_READ_ONLY, + PARAM_ERROR_INVALID_INT, +}; + +/* Set the specified parameter. + * + * Returns PARAM_SUCCESS if success, PARAM_ERROR_* if error. */ +static int SetParam(const Param* p, const char* value) { + if (!(p->flags & CAN_WRITE)) + return PARAM_ERROR_READ_ONLY; + + if (p->flags & IS_STRING) { + return (0 == VbSetSystemPropertyString(p->name, value) ? + 0 : PARAM_ERROR_UNKNOWN); + } else { + char* e; + int i = (int)strtol(value, &e, 0); + if (!*value || (e && *e)) + return PARAM_ERROR_INVALID_INT; + return (0 == VbSetSystemPropertyInt(p->name, i) ? + 0 : PARAM_ERROR_UNKNOWN); + } +} + +/* Compares the parameter with the expected value. + * + * Returns 0 if success (match), non-zero if error (mismatch). */ +static int CheckParam(const Param* p, const char* expect) { + if (p->flags & IS_STRING) { + char buf[VB_MAX_STRING_PROPERTY]; + const char* v = VbGetSystemPropertyString(p->name, buf, sizeof(buf)); + if (!v || 0 != strcmp(v, expect)) + return 1; + } else { + char* e; + int i = (int)strtol(expect, &e, 0); + int v = VbGetSystemPropertyInt(p->name); + if (!*expect || (e && *e)) + return 1; + if (v == -1 || i != v) + return 1; + } + return 0; +} + + +/* Print the specified parameter. + * + * Returns 0 if success, non-zero if error. */ +static int PrintParam(const Param* p) { + if (p->flags & IS_STRING) { + char buf[VB_MAX_STRING_PROPERTY]; + const char* v = VbGetSystemPropertyString(p->name, buf, sizeof(buf)); + if (!v) + return 1; + printf("%s", v); + } else { + int v = VbGetSystemPropertyInt(p->name); + if (v == -1) + return 1; + printf(p->format ? p->format : "%d", v); + } + return 0; +} + + +/* Print all parameters with descriptions. If force_all!=0, prints even + * parameters that specify the NO_PRINT_ALL flag. + * + * Returns 0 if success, non-zero if error. */ +static int PrintAllParams(int force_all) { + const Param* p; + int retval = 0; + char buf[VB_MAX_STRING_PROPERTY]; + const char* value; + + for (p = sys_param_list; p->name; p++) { + if (0 == force_all && (p->flags & NO_PRINT_ALL)) + continue; + if (p->flags & IS_STRING) { + value = VbGetSystemPropertyString(p->name, buf, sizeof(buf)); + } else { + int v = VbGetSystemPropertyInt(p->name); + if (v == -1) + value = NULL; + else { + snprintf(buf, sizeof(buf), p->format ? p->format : "%d", v); + value = buf; + } + } + printf("%-*s = %-30s # [%s/%s] %s\n", kNameWidth, p->name, + (value ? value : "(error)"), + (p->flags & CAN_WRITE) ? "RW" : "RO", + (p->flags & IS_STRING) ? "str" : "int", + p->desc); + } + return retval; +} + + +int main(int argc, char* argv[]) { + int retval = 0; + int i; + + char* progname = strrchr(argv[0], '/'); + if (progname) + progname++; + else + progname = argv[0]; + + /* If no args specified, print all params */ + if (argc == 1) + return PrintAllParams(0); + /* --all or -a prints all params including normally hidden ones */ + if (!strcasecmp(argv[1], "--all") || !strcmp(argv[1], "-a")) + return PrintAllParams(1); + + /* Print help if needed */ + if (!strcasecmp(argv[1], "-h") || !strcmp(argv[1], "-?") || + !strcmp(argv[1], "--help")) { + PrintHelp(progname); + return 0; + } + + /* Otherwise, loop through params and get/set them */ + for (i = 1; i < argc && retval == 0; i++) { + char* has_set = strchr(argv[i], '='); + char* has_expect = strchr(argv[i], '?'); + char* name = strtok(argv[i], "=?"); + const char* value = strtok(NULL, "=?"); + const Param* p; + + /* Make sure args are well-formed. '' or '=foo' or '?foo' not allowed. */ + if (!name || has_set == argv[i] || has_expect == argv[i]) { + fprintf(stderr, "Poorly formed parameter\n"); + PrintHelp(progname); + return 1; + } + if (!value) + value=""; /* Allow setting/checking an empty string ('foo=' or 'foo?') */ + if (has_set && has_expect) { + fprintf(stderr, "Use either = or ? in a parameter, but not both.\n"); + PrintHelp(progname); + return 1; + } + + /* Find the parameter */ + p = FindParam(name); + if (!p) { + fprintf(stderr, "Invalid parameter name: %s\n", name); + PrintHelp(progname); + return 1; + } + + if (i > 1) + printf(" "); /* Output params space-delimited */ + if (has_set) { + retval = SetParam(p, value); + switch (retval) { + case PARAM_SUCCESS: + break; + case PARAM_ERROR_READ_ONLY: + fprintf(stderr, "Parameter %s is read-only\n", p->name); + break; + case PARAM_ERROR_INVALID_INT: + fprintf(stderr, "Value %s is not a valid integer\n", value); + break; + default: + fprintf(stderr, "Failed to set parameter %s\n", p->name); + break; + } + } else if (has_expect) + retval = CheckParam(p, value); + else + retval = PrintParam(p); + } + + return retval; +} diff --git a/utility/dev_debug_vboot b/utility/dev_debug_vboot new file mode 100755 index 0000000..48c48a1 --- /dev/null +++ b/utility/dev_debug_vboot @@ -0,0 +1,387 @@ +#!/bin/sh -ue +# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# Usage: dev_debug_vboot [ --cleanup | DIRECTORY ] +# +# This extracts some useful debugging information about verified boot. A short +# summary is printed on stdout, more detailed information and working files are +# left in a log directory. +# +############################################################################## + +# Clean up PATH for root use. Note that we're assuming [ is always built-in. +[ "${EUID:-0}" = 0 ] && PATH=/bin:/sbin:/usr/bin:/usr/sbin + +PUBLOGFILE="/var/log/debug_vboot_noisy.log" + +OPT_CLEANUP= +OPT_BIOS= +OPT_FORCE= +OPT_IMAGE= +OPT_KERNEL= +OPT_VERBOSE= + +FLAG_SAVE_LOG_FILE=yes + +LOGFILE=/dev/stdout +TMPDIR= + +############################################################################## + +usage() { + local prog + + prog=${0##*/} + cat </dev/null; then + info "Exporting log file as ${PUBLOGFILE}" + fi + fi + if [ -n "${OPT_CLEANUP}" ] && [ -d "${TMPDIR}" ] ; then + cd / + rm -rf "${TMPDIR}" + fi +} + +die() { + echo "$*" 1>&2 + exit 1 +} + +info() { + echo "$@" + echo "#" "$@" >> "$LOGFILE" +} + +infon() { + echo -n "$@" + echo "#" "$@" >> "$LOGFILE" +} + +debug() { + echo "#" "$@" >> "$LOGFILE" +} + +log() { + echo "+" "$@" >> "$LOGFILE" + "$@" >> "$LOGFILE" 2>&1 +} + +loghead() { + echo "+" "$@" "| head" >> "$LOGFILE" + "$@" | head >> "$LOGFILE" 2>&1 +} + +logdie() { + echo "+ERROR:" "$@" >> "$LOGFILE" + die "$@" +} + +result() { + LAST_RESULT=$? + if [ "${LAST_RESULT}" = "0" ]; then + info "OK" + else + info "FAILED" + fi +} + +require_utils() { + local missing + + missing= + for tool in $* ; do + if ! type "$tool" >/dev/null 2>&1 ; then + missing="$missing $tool" + fi + done + if [ -n "$missing" ]; then + logdie "can't find these programs: $missing" + fi +} + +extract_kerns_from_file() { + local start + local size + local part + local rest + + debug "Extracting kernel partitions from $1 ..." + cgpt find -v -t kernel "$1" | grep 'Label:' | + while read start size part rest; do + name="part_${part}" + log dd if="$1" bs=512 skip=${start} count=${size} of="${name}" && + echo "${name}" + done +} + +format_as_tpm_version() { + local a + local b + local what + local num + local rest + + a='/(Data|Kernel) key version/ {print $1,$4}' + b='/Kernel version/ {print $1, $3}' + awk "$a $b" "$1" | while read what num rest; do + [ "${what}" = "Data" ] && block="${num}" + [ "${what}" = "Kernel" ] && printf '0x%04x%04x' "${block}" "${num}" + done +} + +fix_old_names() { + # Convert any old-style names to new-style + [ -f GBB_Area ] && log mv -f GBB_Area GBB + [ -f Firmware_A_Key ] && log mv -f Firmware_A_Key VBLOCK_A + [ -f Firmware_B_Key ] && log mv -f Firmware_B_Key VBLOCK_B + [ -f Firmware_A_Data ] && log mv -f Firmware_A_Data FW_MAIN_A + [ -f Firmware_B_Data ] && log mv -f Firmware_B_Data FW_MAIN_B + true +} + +############################################################################## +# Here we go... + +umask 022 + +# defaults +DEV_DEBUG_FORCE= + +# override them? +[ -f /etc/default/vboot_reference ] && . /etc/default/vboot_reference + +# Pre-parse args to replace actual args with a sanitized version. +TEMP=$(getopt -o hvb:i:k:cf --long help,bios:,image:,kernel:,cleanup,force \ + -n $0 -- "$@") +eval set -- "$TEMP" + +# Now look at them. +while true ; do + case "${1:-}" in + -b|--bios) + OPT_BIOS=$(readlink -f "$2") + shift 2 + FLAG_SAVE_LOG_FILE= + ;; + -i|--image=*) + OPT_IMAGE=$(readlink -f "$2") + shift 2 + FLAG_SAVE_LOG_FILE= + ;; + -k|--kernel) + OPT_KERNEL=$(readlink -f "$2") + shift 2 + FLAG_SAVE_LOG_FILE= + ;; + -c|--cleanup) + OPT_CLEANUP=yes + shift + ;; + -f|--force) + OPT_FORCE=yes + shift + ;; + -v) + OPT_VERBOSE=yes + shift + FLAG_SAVE_LOG_FILE= + ;; + -h|--help) + usage + break + ;; + --) + shift + break + ;; + *) + die "Internal error in option parsing" + ;; + esac +done + +if [ -z "${1:-}" ]; then + TMPDIR=$(mktemp -d /tmp/debug_vboot_XXXXXXXXX) +else + TMPDIR="$1" + [ -d ${TMPDIR} ] || die "$TMPDIR doesn't exist" + FLAG_SAVE_LOG_FILE= +fi +[ -z "${OPT_VERBOSE}" ] && LOGFILE="${TMPDIR}/noisy.log" + +[ -d ${TMPDIR} ] || mkdir -p ${TMPDIR} || exit 1 +cd ${TMPDIR} || exit 1 +echo "Running $0 $*" > "$LOGFILE" +log date +debug "DEV_DEBUG_FORCE=($DEV_DEBUG_FORCE)" +debug "OPT_CLEANUP=($OPT_CLEANUP)" +debug "OPT_BIOS=($OPT_BIOS)" +debug "OPT_FORCE=($OPT_FORCE)" +debug "OPT_IMAGE=($OPT_IMAGE)" +debug "OPT_KERNEL=($OPT_KERNEL)" +debug "FLAG_SAVE_LOG_FILE=($FLAG_SAVE_LOG_FILE)" +echo "Saving verbose log as $LOGFILE" +trap cleanup EXIT + +if [ -n "${DEV_DEBUG_FORCE}" ] && [ -z "${OPT_FORCE}" ]; then + info "Not gonna do anything without the --force option." + exit 0 +fi + + +# Make sure we have the programs we need +need="futility" +[ -z "${OPT_BIOS}" ] && need="$need flashrom" +[ -z "${OPT_KERNEL}" ] && need="$need cgpt" +require_utils $need + + +# Assuming we're on a ChromeOS device, see what we know. +set +e +log crossystem --all +log rootdev -s +log ls -aCF /root +log ls -aCF /mnt/stateful_partition +devs=$(awk '/(mmcblk[0-9])$|(sd[a-z])$|(nvme[0-9]+n[0-9]+)$/ {print "/dev/"$4}' /proc/partitions) +for d in $devs; do + log cgpt show $d +done +log flashrom -V -p host --wp-status +tpm_fwver=$(crossystem tpm_fwver) || tpm_fwver="UNKNOWN" +tpm_kernver=$(crossystem tpm_kernver) || tpm_kernver="UNKNOWN" +set -e + + +info "Extracting BIOS components..." +if [ -n "${OPT_BIOS}" ]; then + # If we've already got a file, just extract everything. + log futility dump_fmap -x "${OPT_BIOS}" + fix_old_names +else + # First try pulling just the components we want (using new-style names) + if log flashrom -p host -r /dev/null \ + -i"GBB":GBB \ + -i"FMAP":FMAP \ + -i"VBLOCK_A":VBLOCK_A \ + -i"VBLOCK_B":VBLOCK_B \ + -i"FW_MAIN_A":FW_MAIN_A \ + -i"FW_MAIN_B":FW_MAIN_B ; then + log futility dump_fmap FMAP + else + info "Couldn't read individual components. Read the whole thing..." + if log flashrom -p host -r bios.rom ; then + log futility dump_fmap -x bios.rom + fix_old_names + else + logdie "Can't read BIOS at all. Giving up." + fi + fi +fi + +info "Pulling root and recovery keys from GBB..." +log futility gbb -g --rootkey rootkey.vbpubk \ + --recoverykey recoverykey.vbpubk \ + "GBB" || logdie "Unable to extract keys from GBB" +log futility vbutil_key --unpack rootkey.vbpubk +log futility vbutil_key --unpack recoverykey.vbpubk +futility vbutil_key --unpack rootkey.vbpubk | + grep -q b11d74edd286c144e1135b49e7f0bc20cf041f10 && + info " Looks like dev-keys" +# Okay if one of the firmware verifications fails +set +e +for fw in A B; do + infon "Verify firmware ${fw} with root key: " + log futility vbutil_firmware --verify "VBLOCK_${fw}" \ + --signpubkey rootkey.vbpubk \ + --fv "FW_MAIN_${fw}" --kernelkey "kern_subkey_${fw}.vbpubk" ; result + if [ "${LAST_RESULT}" = "0" ]; then + # rerun to get version numbers + futility vbutil_firmware --verify "VBLOCK_${fw}" \ + --signpubkey rootkey.vbpubk \ + --fv "FW_MAIN_${fw}" > tmp.txt + ver=$(format_as_tpm_version tmp.txt) + info " TPM=${tpm_fwver}, this=${ver}" + fi +done +set -e + +info "Examining kernels..." +if [ -n "${OPT_KERNEL}" ]; then + kernparts="${OPT_KERNEL}" +elif [ -n "${OPT_IMAGE}" ]; then + if [ -f "${OPT_IMAGE}" ]; then + kernparts=$(extract_kerns_from_file "${OPT_IMAGE}") + else + kernparts=$(cgpt find -t kernel "${OPT_IMAGE}") + fi +else + kernparts=$(cgpt find -t kernel) +fi +[ -n "${kernparts}" ] || logdie "No kernels found" + +# Okay if any of the kernel verifications fails +set +e +kc=0 +for kname in ${kernparts}; do + if [ -f "${kname}" ]; then + kfile="${kname}" + else + kfile="kern_${kc}" + debug "copying ${kname} to ${kfile}..." + log dd if="${kname}" of="${kfile}" + fi + + infon "Kernel ${kname}: " + log futility vbutil_keyblock --unpack "${kfile}" ; result + if [ "${LAST_RESULT}" != "0" ]; then + loghead od -Ax -tx1 "${kfile}" + else + # Test each kernel with each key + for key in kern_subkey_A.vbpubk kern_subkey_B.vbpubk recoverykey.vbpubk; do + infon " Verify ${kname} with $key: " + log futility vbutil_kernel --verify "${kfile}" --signpubkey "$key" ; result + if [ "${LAST_RESULT}" = "0" ]; then + # rerun to get version numbers + futility vbutil_kernel --verify "${kfile}" --signpubkey "$key" > tmp.txt + ver=$(format_as_tpm_version tmp.txt) + info " TPM=${tpm_kernver} this=${ver}" + fi + done + fi + + kc=$(expr $kc + 1) +done + +exit 0 diff --git a/utility/dev_make_keypair b/utility/dev_make_keypair new file mode 100755 index 0000000..7486d9e --- /dev/null +++ b/utility/dev_make_keypair @@ -0,0 +1,83 @@ +#!/bin/bash -e +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# + +# Check args first. +if [ "$#" -lt "1" ]; then + cat <&2 + +Usage: ${0##*/} BASENAME [ALG] + +This creates BASENAME.vbpubk and BASENAME.vbprivk pairs for use in signing +developer files. This also creates a BASENAME.keyblock file containing the +BASENAME.vbpubk, which can be used to sign a developer kernel. + +If specified, ALG is one of: + + 0 = RSA1024 with SHA1 + 1 = RSA1024 with SHA256 + 2 = RSA1024 with SHA512 + 3 = RSA2048 with SHA1 + 4 = RSA2048 with SHA256 + 5 = RSA2048 with SHA512 + 6 = RSA4096 with SHA1 + 7 = RSA4096 with SHA256 + 8 = RSA4096 with SHA512 + 9 = RSA8192 with SHA1 + 10 = RSA8192 with SHA256 + 11 = RSA8192 with SHA512 + +If ALG is not specified, a default value will be used. + +EOF + exit 1 +fi + + +# Compute the key length assuming the sizes shown above. +function alg_to_keylen { + echo $(( 1 << (10 + ($1 / 3)) )) +} + +# Emit .vbpubk and .vbprivk using given basename and algorithm. +function make_pair { + local base=$1 + local alg=$2 + local len=$(alg_to_keylen $alg) + + # make the RSA keypair + openssl genrsa -F4 -out "${base}_${len}.pem" $len + # create a self-signed certificate + openssl req -batch -new -x509 -key "${base}_${len}.pem" \ + -out "${base}_${len}.crt" + # generate pre-processed RSA public key + dumpRSAPublicKey -cert "${base}_${len}.crt" > "${base}_${len}.keyb" + + # wrap the public key + futility vbutil_key \ + --pack "${base}.vbpubk" \ + --key "${base}_${len}.keyb" \ + --version 1 \ + --algorithm $alg + + # wrap the private key + futility vbutil_key \ + --pack "${base}.vbprivk" \ + --key "${base}_${len}.pem" \ + --algorithm $alg + + # remove intermediate files + rm -f "${base}_${len}.pem" "${base}_${len}.crt" "${base}_${len}.keyb" +} + +# First create the .vbpubk and .vbprivk pair. +make_pair "$1" "${2:-4}" + +# Now create a .keyblock to hold our .vbpubk. Since it's for developer use, it +# won't be signed, just checksummed. Developer kernels can only be run in +# non-recovery mode with the developer switch enabled, but it won't hurt us to +# turn on all the flags bits anyway. +futility vbutil_keyblock --pack "$1.keyblock" \ + --datapubkey "$1.vbpubk" --flags 15 diff --git a/utility/dumpRSAPublicKey.c b/utility/dumpRSAPublicKey.c new file mode 100644 index 0000000..d7f66e5 --- /dev/null +++ b/utility/dumpRSAPublicKey.c @@ -0,0 +1,207 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* C port of DumpPublicKey.java from the Android Open source project with + * support for additional RSA key sizes. (platform/system/core,git/libmincrypt + * /tools/DumpPublicKey.java). Uses the OpenSSL X509 and BIGNUM library. + */ + +#include + +#include +#include +#include + +#include "openssl_compat.h" + +/* Command line tool to extract RSA public keys from X.509 certificates + * and output a pre-processed version of keys for use by RSA verification + * routines. + */ + +static int check(RSA* key) { + const BIGNUM *n, *e; + int public_exponent, modulus; + + RSA_get0_key(key, &n, &e, NULL); + public_exponent = BN_get_word(e); + modulus = BN_num_bits(n); + + if (public_exponent != 3 && public_exponent != 65537) { + fprintf(stderr, + "WARNING: Public exponent should be 3 or 65537 (but is %d).\n", + public_exponent); + } + + if (modulus != 1024 && modulus != 2048 && modulus != 3072 && modulus != 4096 + && modulus != 8192) { + fprintf(stderr, "ERROR: Unknown modulus length = %d.\n", modulus); + return 0; + } + return 1; +} + +/* Pre-processes and outputs RSA public key to standard out. + */ +static void output(RSA* key) { + int i, nwords; + const BIGNUM *key_n; + BIGNUM *N = NULL; + BIGNUM *Big1 = NULL, *Big2 = NULL, *Big32 = NULL, *BigMinus1 = NULL; + BIGNUM *B = NULL; + BIGNUM *N0inv= NULL, *R = NULL, *RR = NULL, *RRTemp = NULL, *NnumBits = NULL; + BIGNUM *n = NULL, *rr = NULL; + BN_CTX *bn_ctx = BN_CTX_new(); + uint32_t n0invout; + + /* Output size of RSA key in 32-bit words */ + nwords = RSA_size(key) / 4; + if (-1 == write(1, &nwords, sizeof(nwords))) + goto failure; + + + /* Initialize BIGNUMs */ + RSA_get0_key(key, &key_n, NULL, NULL); + N = BN_dup(key_n); + Big1 = BN_new(); + Big2 = BN_new(); + Big32 = BN_new(); + BigMinus1 = BN_new(); + N0inv= BN_new(); + R = BN_new(); + RR = BN_new(); + RRTemp = BN_new(); + NnumBits = BN_new(); + n = BN_new(); + rr = BN_new(); + + + BN_set_word(Big1, 1L); + BN_set_word(Big2, 2L); + BN_set_word(Big32, 32L); + BN_sub(BigMinus1, Big1, Big2); + + B = BN_new(); + BN_exp(B, Big2, Big32, bn_ctx); /* B = 2^32 */ + + /* Calculate and output N0inv = -1 / N[0] mod 2^32 */ + BN_mod_inverse(N0inv, N, B, bn_ctx); + BN_sub(N0inv, B, N0inv); + n0invout = BN_get_word(N0inv); + if (-1 == write(1, &n0invout, sizeof(n0invout))) + goto failure; + + /* Calculate R = 2^(# of key bits) */ + BN_set_word(NnumBits, BN_num_bits(N)); + BN_exp(R, Big2, NnumBits, bn_ctx); + + /* Calculate RR = R^2 mod N */ + BN_copy(RR, R); + BN_mul(RRTemp, RR, R, bn_ctx); + BN_mod(RR, RRTemp, N, bn_ctx); + + + /* Write out modulus as little endian array of integers. */ + for (i = 0; i < nwords; ++i) { + uint32_t nout; + + BN_mod(n, N, B, bn_ctx); /* n = N mod B */ + nout = BN_get_word(n); + if (-1 == write(1, &nout, sizeof(nout))) + goto failure; + + BN_rshift(N, N, 32); /* N = N/B */ + } + + /* Write R^2 as little endian array of integers. */ + for (i = 0; i < nwords; ++i) { + uint32_t rrout; + + BN_mod(rr, RR, B, bn_ctx); /* rr = RR mod B */ + rrout = BN_get_word(rr); + if (-1 == write(1, &rrout, sizeof(rrout))) + goto failure; + + BN_rshift(RR, RR, 32); /* RR = RR/B */ + } + +failure: + /* Free BIGNUMs. */ + BN_free(N); + BN_free(Big1); + BN_free(Big2); + BN_free(Big32); + BN_free(BigMinus1); + BN_free(N0inv); + BN_free(R); + BN_free(RRTemp); + BN_free(NnumBits); + BN_free(n); + BN_free(rr); + +} + +int main(int argc, char* argv[]) { + int cert_mode = 0; + FILE* fp; + X509* cert = NULL; + RSA* pubkey = NULL; + EVP_PKEY* key; + char *progname; + + if (argc != 3 || (strcmp(argv[1], "-cert") && strcmp(argv[1], "-pub"))) { + progname = strrchr(argv[0], '/'); + if (progname) + progname++; + else + progname = argv[0]; + fprintf(stderr, "Usage: %s <-cert | -pub> \n", progname); + return -1; + } + + if (!strcmp(argv[1], "-cert")) + cert_mode = 1; + + fp = fopen(argv[2], "r"); + + if (!fp) { + fprintf(stderr, "Couldn't open file %s!\n", argv[2]); + return -1; + } + + if (cert_mode) { + /* Read the certificate */ + if (!PEM_read_X509(fp, &cert, NULL, NULL)) { + fprintf(stderr, "Couldn't read certificate.\n"); + goto fail; + } + + /* Get the public key from the certificate. */ + key = X509_get_pubkey(cert); + + /* Convert to a RSA_style key. */ + if (!(pubkey = EVP_PKEY_get1_RSA(key))) { + fprintf(stderr, "Couldn't convert to a RSA style key.\n"); + goto fail; + } + } else { + /* Read the pubkey in .PEM format. */ + if (!(pubkey = PEM_read_RSA_PUBKEY(fp, NULL, NULL, NULL))) { + fprintf(stderr, "Couldn't read public key file.\n"); + goto fail; + } + } + + if (check(pubkey)) { + output(pubkey); + } + +fail: + X509_free(cert); + RSA_free(pubkey); + fclose(fp); + + return 0; +} diff --git a/utility/enable_dev_usb_boot b/utility/enable_dev_usb_boot new file mode 100755 index 0000000..8cf16ba --- /dev/null +++ b/utility/enable_dev_usb_boot @@ -0,0 +1,38 @@ +#!/bin/sh +# Copyright (c) 2012 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +alert() { + echo "$*" >&2 +} + +die() { + alert "ERROR: $*" + exit 1 +} + +case "$(crossystem fwid 2>/dev/null || true)" in + Mario.* ) + die "Sorry, your platform does not support booting from USB." + ;; + + Alex.* | ZGB.* ) + # For these legacy platforms, we need to re-flash firmware to get USB boot. + chromeos-firmwareupdate --mode=todev || die "Failed to enable USB boot." + ;; + + "" ) + die "Sorry, your firmware does not look like ChromeOS firmware." + ;; + + * ) + crossystem dev_boot_usb=1 2>/dev/null || die "Failed to enable USB boot." + echo " + SUCCESS: Booting any self-signed kernel from SSD/USB/SDCard slot is enabled. + + Insert bootable media into USB / SDCard slot and press Ctrl-U in developer + screen to boot your self-signed image. + " + ;; +esac diff --git a/utility/include/gbb_utility.h b/utility/include/gbb_utility.h new file mode 100644 index 0000000..da4504b --- /dev/null +++ b/utility/include/gbb_utility.h @@ -0,0 +1,102 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VBOOT_REFERENCE_GBB_UTILITY_H_ +#define VBOOT_REFERENCE_GBB_UTILITY_H_ + +#include +#include + +namespace vboot_reference { + +class GoogleBinaryBlockUtil { + public: + // enumerate of available data fields + enum PROPINDEX { + PROP_FLAGS = -1,// flags (virtual property) + PROP_HWID, // hardware id + PROP_ROOTKEY, // root key + PROP_BMPFV, // bitmap FV + PROP_RCVKEY, // recovery key + PROP_RANGE, // indicator of valid property range + }; + + GoogleBinaryBlockUtil(); + ~GoogleBinaryBlockUtil(); + + // load GBB from a BIOS image file. + // return true if a valid GBB was retrieved. + bool load_from_file(const char *filename); + + // save loaded (and modified) GBB with BIOS image to new file + // return true on success. + bool save_to_file(const char *filename); + + // create a new GBB blob by providing a list of reserved data size for each + // properties, following the order described in vb2_gbb_header. + // return true on success. + bool create_new(const std::vector &create_param); + + // retrieve the value of GBB header flags. + // return the flags value. + uint32_t get_flags() const; + + // overwrite GBB header flags. + // return true on success. + bool set_flags(const uint32_t flags); + + // retrieve the value of a property from GBB data. + // return the property value. + std::string get_property(PROPINDEX i) const; + + // overwrite a property in GBB data. + // return true on success. + bool set_property(PROPINDEX i, const std::string &value); + + // get a readable name by a property index. + // return the name for valid properties, otherwise unexpected empty string. + std::string get_property_name(PROPINDEX i) const; + + // quick getters and setters of known properties in GBB + bool set_hwid(const char *hwid); // NOTE: hwid is NUL-terminated. + bool set_rootkey(const std::string &value); + bool set_bmpfv(const std::string &value); + bool set_recovery_key(const std::string &value); + std::string get_hwid() const { return get_property(PROP_HWID); } + std::string get_rootkey() const { return get_property(PROP_ROOTKEY); } + std::string get_bmpfv() const { return get_property(PROP_BMPFV); } + std::string get_recovery_key() const { return get_property(PROP_RCVKEY); } + + private: + // clear all cached data and initialize to original state + void initialize(); + + // search and count for GBB signatures in loaded image. + // return the number of signatures found. + int search_header_signatures(const std::string &image, long *poffset) const; + + // load and check header structure from image by given offset. + // return true if a valid GBB header is loaded into *phdr. + bool load_gbb_header(const std::string &image, long offset, + struct vb2_gbb_header *phdr) const; + + // find the size, offset, and name information for given property. + // return true if the offset and size are assign to *poffset and *psize; + // if pname is not NULL, *pname will hold a pointer to a readable name. + // return false if the property index is invalid. + bool find_property(PROPINDEX i, uint32_t *poffset, uint32_t *psize, + const char **pname) const; + + struct vb2_gbb_header header_; // copy of GBB header from image + std::string file_content_; // complete image file content + long header_offset_; // offset to GBB header in file_content_ + bool is_valid_gbb; // if we are holding a valid GBB + + bool verbose; // provide verbose messages +}; + +} // namespace vboot_reference + +#endif /* VBOOT_REFERENCE_GBB_UTILITY_H_ */ diff --git a/utility/include/tpmextras.h b/utility/include/tpmextras.h new file mode 100644 index 0000000..10802fc --- /dev/null +++ b/utility/include/tpmextras.h @@ -0,0 +1,22 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * TPM definitions not available in any TSS include file :-( + */ + +#ifndef VBOOT_REFERENCE_TPMEXTRAS_H_ +#define VBOOT_REFERENCE_TPMEXTRAS_H_ + +#define TPM_MAX_COMMAND_SIZE 4096 +#define TPM_LARGE_ENOUGH_COMMAND_SIZE 256 /* saves space in the firmware */ +#define TPM_ENCAUTH_SIZE 20 +#define TPM_PUBEK_SIZE 256 + +typedef struct tdTPM_WRITE_INFO { + uint32_t nvIndex; + uint32_t offset; + uint32_t dataSize; +} TPM_WRITE_INFO; + +#endif /* VBOOT_REFERENCE_TPMEXTRAS_H_ */ diff --git a/utility/load_kernel_test.c b/utility/load_kernel_test.c new file mode 100644 index 0000000..405fced --- /dev/null +++ b/utility/load_kernel_test.c @@ -0,0 +1,279 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Routines for verifying a file's signature. Useful in testing the core + * RSA verification implementation. + */ + +#include +#include +#include + +#include "2api.h" +#include "2common.h" +#include "2misc.h" +#include "2sysincludes.h" +#include "host_common.h" +#include "load_kernel_fw.h" + +#define LBA_BYTES 512 +#define KERNEL_BUFFER_SIZE 0xA00000 + +static uint8_t workbuf[VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE]; +static struct vb2_context *ctx; +static struct vb2_shared_data *sd; + +/* Global variables for stub functions */ +static VbSelectAndLoadKernelParams lkp; +static VbDiskInfo disk_info; +static FILE *image_file = NULL; + + +/* Boot device stub implementations to read from the image file */ +vb2_error_t VbExDiskRead(VbExDiskHandle_t handle, uint64_t lba_start, + uint64_t lba_count, void *buffer) +{ + printf("Read(%" PRIu64 ", %" PRIu64 ")\n", lba_start, lba_count); + + if (lba_start >= disk_info.streaming_lba_count || + lba_start + lba_count > disk_info.streaming_lba_count) { + fprintf(stderr, + "Read overrun: %" PRIu64 " + %" PRIu64 + " > %" PRIu64 "\n", lba_start, + lba_count, disk_info.streaming_lba_count); + return 1; + } + + if (0 != fseek(image_file, lba_start * disk_info.bytes_per_lba, + SEEK_SET) || + 1 != fread(buffer, lba_count * disk_info.bytes_per_lba, 1, + image_file)) { + fprintf(stderr, "Read error."); + return 1; + } + return VB2_SUCCESS; +} + + +vb2_error_t VbExDiskWrite(VbExDiskHandle_t handle, uint64_t lba_start, + uint64_t lba_count, const void *buffer) +{ + printf("Write(%" PRIu64 ", %" PRIu64 ")\n", lba_start, lba_count); + + if (lba_start >= disk_info.streaming_lba_count || + lba_start + lba_count > disk_info.streaming_lba_count) { + fprintf(stderr, + "Read overrun: %" PRIu64 " + %" PRIu64 + " > %" PRIu64 "\n", lba_start, lba_count, + disk_info.streaming_lba_count); + return 1; + } + + /* TODO: enable writes, once we're sure it won't trash + our example file */ + return VB2_SUCCESS; + + fseek(image_file, lba_start * disk_info.bytes_per_lba, SEEK_SET); + if (1 != fwrite(buffer, lba_count * disk_info.bytes_per_lba, 1, + image_file)) { + fprintf(stderr, "Read error."); + return 1; + } + return VB2_SUCCESS; +} + + +#define BOOT_FLAG_DEVELOPER (1 << 0) +#define BOOT_FLAG_RECOVERY (1 << 1) + +/* Main routine */ +int main(int argc, char* argv[]) +{ + const char* image_name; + uint64_t key_size = 0; + struct vb2_packed_key *key_blob = NULL; + struct vb2_gbb_header* gbb; + vb2_error_t rv; + int c, argsleft; + int errorcnt = 0; + char *e = 0; + + memset(&lkp, 0, sizeof(VbSelectAndLoadKernelParams)); + disk_info.bytes_per_lba = LBA_BYTES; + int boot_flags = BOOT_FLAG_RECOVERY; + + /* Parse options */ + opterr = 0; + while ((c = getopt(argc, argv, ":b:")) != -1) { + switch (c) { + case 'b': + boot_flags = strtoull(optarg, &e, 0); + if (!*optarg || (e && *e)) { + fprintf(stderr, + "Invalid argument to -%c: \"%s\"\n", + c, optarg); + errorcnt++; + } + break; + case '?': + fprintf(stderr, "Unrecognized switch: -%c\n", optopt); + errorcnt++; + break; + case ':': + fprintf(stderr, "Missing argument to -%c\n", optopt); + errorcnt++; + break; + default: + errorcnt++; + break; + } + } + + /* Update argc */ + argsleft = argc - optind; + + if (errorcnt || !argsleft) { + fprintf(stderr, + "usage: %s [options] []\n", + argv[0]); + fprintf(stderr, "\noptions:\n"); + /* These cases are because uint64_t isn't necessarily the same + as ULL. */ + fprintf(stderr, " -b NUM boot flag bits (default %d):\n", + BOOT_FLAG_RECOVERY); + fprintf(stderr, " %d = developer mode on\n", + BOOT_FLAG_DEVELOPER); + fprintf(stderr, " %d = recovery mode on\n", + BOOT_FLAG_RECOVERY); + return 1; + } + + image_name = argv[optind]; + + /* Read header signing key blob */ + if (argsleft > 1) { + key_blob = (struct vb2_packed_key *) + ReadFile(argv[optind+1], &key_size); + if (!key_blob) { + fprintf(stderr, "Unable to read key file %s\n", + argv[optind+1]); + return 1; + } + printf("Read %" PRIu64 " bytes of key from %s\n", key_size, + argv[optind+1]); + if (key_size > 16*1024*1024) { + fprintf(stderr, "Key blob size=%" PRIu64 + " is ridiculous.\n", key_size); + free(key_blob); + return 1; + } + } + + /* Initialize the GBB */ + uint32_t gbb_size = sizeof(struct vb2_gbb_header) + key_size; + gbb = (struct vb2_gbb_header*)malloc(gbb_size); + memset(gbb, 0, gbb_size); + memcpy(gbb->signature, VB2_GBB_SIGNATURE, VB2_GBB_SIGNATURE_SIZE); + gbb->major_version = VB2_GBB_MAJOR_VER; + gbb->minor_version = VB2_GBB_MINOR_VER; + gbb->header_size = sizeof(struct vb2_gbb_header); + /* Fill in the given key, if any, for both root and recovery */ + if (key_blob) { + gbb->rootkey_offset = gbb->header_size; + gbb->rootkey_size = key_size; + memcpy((uint8_t*)gbb + gbb->rootkey_offset, key_blob, key_size); + + gbb->recovery_key_offset = gbb->rootkey_offset; + gbb->recovery_key_size = key_size; + } + + printf("bootflags = %d\n", boot_flags); + + /* Get image size */ + printf("Reading from image: %s\n", image_name); + image_file = fopen(image_name, "rb"); + if (!image_file) { + fprintf(stderr, "Unable to open image file %s\n", image_name); + return 1; + } + fseek(image_file, 0, SEEK_END); + disk_info.streaming_lba_count = (ftell(image_file) / LBA_BYTES); + disk_info.lba_count = disk_info.streaming_lba_count; + rewind(image_file); + printf("Streaming LBA count: %" PRIu64 "\n", + disk_info.streaming_lba_count); + + /* Allocate a buffer for the kernel */ + lkp.kernel_buffer = malloc(KERNEL_BUFFER_SIZE); + if(!lkp.kernel_buffer) { + fprintf(stderr, "Unable to allocate kernel buffer.\n"); + return 1; + } + lkp.kernel_buffer_size = KERNEL_BUFFER_SIZE; + + /* Set up vboot context. */ + if (vb2api_init(&workbuf, sizeof(workbuf), &ctx)) { + fprintf(stderr, "Can't initialize workbuf\n"); + return 1; + } + sd = vb2_get_sd(ctx); + + /* Copy kernel subkey to workbuf, if any */ + if (key_blob) { + struct vb2_workbuf wb; + struct vb2_packed_key *dst; + uint32_t kernkey_size = + key_blob->key_offset + key_blob->key_size; + vb2_workbuf_from_ctx(ctx, &wb); + dst = vb2_workbuf_alloc(&wb, kernkey_size); + memcpy(dst, key_blob, kernkey_size); + vb2_set_workbuf_used(ctx, vb2_offset_of(sd, wb.buf)); + sd->kernel_key_offset = vb2_offset_of(sd, dst); + sd->kernel_key_size = kernkey_size; + } + + /* Free the key blob, now that we're done with it */ + free(key_blob); + + /* No need to initialize ctx->nvdata[]; defaults are fine */ + /* TODO(chromium:441893): support dev-mode flag and external gpt flag */ + if (boot_flags & BOOT_FLAG_RECOVERY) + ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; + if (boot_flags & BOOT_FLAG_DEVELOPER) + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; + + /* Call LoadKernel() */ + rv = LoadKernel(ctx, &lkp, &disk_info); + printf("LoadKernel() returned %d\n", rv); + + if (VB2_SUCCESS == rv) { + printf("Partition number: %u\n", lkp.partition_number); + printf("Bootloader address: %" PRIu64 "\n", + lkp.bootloader_address); + printf("Bootloader size: %u\n", lkp.bootloader_size); + printf("Partition guid: " + "%02x%02x%02x%02x-%02x%02x-%02x%02x" + "-%02x%02x-%02x%02x%02x%02x%02x%02x\n", + lkp.partition_guid[3], + lkp.partition_guid[2], + lkp.partition_guid[1], + lkp.partition_guid[0], + lkp.partition_guid[5], + lkp.partition_guid[4], + lkp.partition_guid[7], + lkp.partition_guid[6], + lkp.partition_guid[8], + lkp.partition_guid[9], + lkp.partition_guid[10], + lkp.partition_guid[11], + lkp.partition_guid[12], + lkp.partition_guid[13], + lkp.partition_guid[14], + lkp.partition_guid[15]); + } + + fclose(image_file); + free(lkp.kernel_buffer); + return rv != VB2_SUCCESS; +} diff --git a/utility/pad_digest_utility.c b/utility/pad_digest_utility.c new file mode 100644 index 0000000..6f91cf3 --- /dev/null +++ b/utility/pad_digest_utility.c @@ -0,0 +1,70 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + + +#include +#include +#include + +#include "2common.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "host_common.h" +#include "host_signature21.h" +#include "signature_digest.h" + +static void usage(char* argv[]) { + fprintf(stderr, + "Usage: %s \n" + "\n" + "Generate a padded hash suitable for generating PKCS#1.5 " + "signatures.\n", + basename(argv[0])); +} + +int main(int argc, char* argv[]) +{ + int algorithm = -1; + int error_code = -1; + uint8_t* digest = NULL; + uint8_t* padded_digest = NULL; + uint32_t len; + + if (argc != 3) { + usage(argv); + goto cleanup; + } + algorithm = atoi(argv[1]); + if (algorithm < 0 || algorithm >= VB2_ALG_COUNT) { + fprintf(stderr, "Invalid Algorithm!\n"); + goto cleanup; + } + + enum vb2_hash_algorithm hash_alg = vb2_crypto_to_hash(algorithm); + uint32_t digest_size = vb2_digest_size(hash_alg); + uint32_t digestinfo_size = 0; + const uint8_t* digestinfo = NULL; + if (VB2_SUCCESS != vb2_digest_info(hash_alg, &digestinfo, + &digestinfo_size)) { + fprintf(stderr, "SignatureBuf(): Couldn't get digest info\n"); + goto cleanup; + } + uint32_t padded_digest_len = digest_size + digestinfo_size; + + if (VB2_SUCCESS != vb2_read_file(argv[2], &digest, &len)) { + fprintf(stderr, "Could not read file: %s\n", argv[2]); + goto cleanup; + } + + padded_digest = PrependDigestInfo(hash_alg, digest); + if(padded_digest && + fwrite(padded_digest, padded_digest_len, 1, stdout) == 1) + error_code = 0; + +cleanup: + free(padded_digest); + free(digest); + return error_code; +} diff --git a/utility/signature_digest_utility.c b/utility/signature_digest_utility.c new file mode 100644 index 0000000..9f5138f --- /dev/null +++ b/utility/signature_digest_utility.c @@ -0,0 +1,61 @@ +/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Utility that outputs the cryptographic digest of a contents of a + * file in a format that can be directly used to generate PKCS#1 v1.5 + * signatures via the "openssl" command line utility. + */ + + +#include +#include + +#include "2common.h" +#include "2sysincludes.h" +#include "host_common.h" +#include "host_signature21.h" +#include "signature_digest.h" + +int main(int argc, char* argv[]) +{ + int error_code = -1; + uint8_t *buf = NULL; + uint8_t *signature_digest = NULL; + uint32_t len; + + if (argc != 3) { + fprintf(stderr, "Usage: %s ", argv[0]); + goto cleanup; + } + + int algorithm = atoi(argv[1]); + if (algorithm < 0 || algorithm >= VB2_ALG_COUNT) { + fprintf(stderr, "Invalid Algorithm!\n"); + goto cleanup; + } + + if (VB2_SUCCESS != vb2_read_file(argv[2], &buf, &len)) { + fprintf(stderr, "Could not read file: %s\n", argv[2]); + goto cleanup; + } + + enum vb2_hash_algorithm hash_alg = vb2_crypto_to_hash(algorithm); + uint32_t digest_size = vb2_digest_size(hash_alg); + uint32_t digestinfo_size = 0; + const uint8_t *digestinfo = NULL; + if (VB2_SUCCESS != vb2_digest_info(hash_alg, &digestinfo, + &digestinfo_size)) + goto cleanup; + + uint32_t signature_digest_len = digest_size + digestinfo_size; + signature_digest = SignatureDigest(buf, len, algorithm); + if(signature_digest && + fwrite(signature_digest, signature_digest_len, 1, stdout) == 1) + error_code = 0; + +cleanup: + free(signature_digest); + free(buf); + return error_code; +} diff --git a/utility/tlcl_generator.c b/utility/tlcl_generator.c new file mode 100644 index 0000000..99ec4a5 --- /dev/null +++ b/utility/tlcl_generator.c @@ -0,0 +1,680 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* This program generates partially filled TPM datagrams and other compile-time + * constants (e.g. structure sizes and offsets). Compile this file---and ONLY + * this file---with -fpack-struct. We take advantage of the fact that the + * (packed) TPM structures layout (mostly) match the TPM request and response + * datagram layout. When they don't completely match, some fixing is necessary + * (see PCR_SELECTION_FIX below). + */ + +#include +#include + +#include "2sysincludes.h" +#include "tlcl_internal.h" +#include "tpmextras.h" +#include "tss_constants.h" + +/* See struct Command below. This structure represent a field in a TPM + * command. [name] is the field name. [visible] is 1 if the field is + * modified by the run-time. Non-visible fields are initialized at build time + * and remain constant. [size] is the field size in bytes. [value] is the + * fixed value of non-visible fields. + */ +typedef struct Field { + const char* name; + int visible; + int offset; + int size; + uint32_t value; /* large enough for all initializers */ + struct Field* next; +} Field; + +/* This structure is used to build (at build time) and manipulate (at firmware + * or emulation run time) buffers containing TPM datagrams. [name] is the name + * of a TPM command. [size] is the size of the command buffer in bytes, when + * known. [max_size] is the maximum size allowed for variable-length commands + * (such as Read and Write). [fields] is a link-list of command fields. + */ +typedef struct Command { + const char* name; + int size; + int max_size; + Field* fields; + struct Command* next; +} Command; + +/* Adds a field to a command, and makes its offset visible. The fields must be + * added at increasing offsets. + */ +static void AddVisibleField(Command* cmd, const char* name, int offset) { + Field* fld = (Field*) calloc(1, sizeof(Field)); + if (cmd->fields != NULL) { + assert(offset > fn->offset); + } + fld->next = cmd->fields; + cmd->fields = fld; + fld->name = name; + fld->visible = 1; + fld->offset = offset; +} + +/* Adds a constant field with its value. The fields must be added at + * increasing offsets. + */ +static void AddInitializedField(Command* cmd, int offset, + int size, uint32_t value) { + Field* fld = (Field*) calloc(1, sizeof(Field)); + fld->next = cmd->fields; + cmd->fields = fld; + fld->name = NULL; + fld->visible = 0; + fld->size = size; + fld->offset = offset; + fld->value = value; +} + +/* Create a structure representing a TPM command datagram. + */ +Command* newCommandWithTag(TPM_COMMAND_CODE code, int size, TPM_TAG tag) { + Command* cmd = (Command*) calloc(1, sizeof(Command)); + cmd->size = size; + AddInitializedField(cmd, 0, sizeof(TPM_TAG), tag); + AddInitializedField(cmd, sizeof(TPM_TAG), sizeof(uint32_t), size); + AddInitializedField(cmd, sizeof(TPM_TAG) + sizeof(uint32_t), + sizeof(TPM_COMMAND_CODE), code); + return cmd; +} + +Command* newCommand(TPM_COMMAND_CODE code, int size) { + return newCommandWithTag(code, size, TPM_TAG_RQU_COMMAND); +} + +/* BuildXXX builds TPM command XXX. + */ +Command* BuildDefineSpaceCommand(void) { + int nv_data_public = kTpmRequestHeaderLength; + int nv_index = nv_data_public + offsetof(TPM_NV_DATA_PUBLIC, nvIndex); + int nv_pcr_info_read = nv_data_public + + offsetof(TPM_NV_DATA_PUBLIC, pcrInfoRead); + int read_locality = nv_pcr_info_read + + offsetof(TPM_PCR_INFO_SHORT, localityAtRelease); + int nv_pcr_info_write = nv_data_public + + offsetof(TPM_NV_DATA_PUBLIC, pcrInfoWrite); + int write_locality = nv_pcr_info_write + + offsetof(TPM_PCR_INFO_SHORT, localityAtRelease); + int nv_permission = nv_data_public + + offsetof(TPM_NV_DATA_PUBLIC, permission); + int nv_permission_tag = + nv_permission + offsetof(TPM_NV_ATTRIBUTES, tag); + int nv_permission_attributes = + nv_permission + offsetof(TPM_NV_ATTRIBUTES, attributes); + int nv_datasize = nv_data_public + + offsetof(TPM_NV_DATA_PUBLIC, dataSize); + + int size = kTpmRequestHeaderLength + sizeof(TPM_NV_DATA_PUBLIC) + + kEncAuthLength; + Command* cmd = newCommand(TPM_ORD_NV_DefineSpace, size); + cmd->name = "tpm_nv_definespace_cmd"; + + AddVisibleField(cmd, "index", nv_index); + AddVisibleField(cmd, "pcr_info_read", nv_pcr_info_read); + AddVisibleField(cmd, "pcr_info_write", nv_pcr_info_write); + AddVisibleField(cmd, "perm", nv_permission_attributes); + AddVisibleField(cmd, "size", nv_datasize); + + AddInitializedField(cmd, nv_data_public, sizeof(uint16_t), + TPM_TAG_NV_DATA_PUBLIC); + AddInitializedField(cmd, nv_pcr_info_read, sizeof(uint16_t), 3); + AddInitializedField(cmd, read_locality, sizeof(TPM_LOCALITY_SELECTION), + TPM_ALL_LOCALITIES); + AddInitializedField(cmd, nv_pcr_info_write, sizeof(uint16_t), 3); + AddInitializedField(cmd, write_locality, sizeof(TPM_LOCALITY_SELECTION), + TPM_ALL_LOCALITIES); + AddInitializedField(cmd, nv_permission_tag, sizeof(TPM_STRUCTURE_TAG), + TPM_TAG_NV_ATTRIBUTES); + return cmd; +} + +/* BuildXXX builds TPM command XXX. + */ +Command* BuildWriteCommand(void) { + Command* cmd = newCommand(TPM_ORD_NV_WriteValue, 0); + cmd->name = "tpm_nv_write_cmd"; + cmd->max_size = TPM_LARGE_ENOUGH_COMMAND_SIZE; + AddVisibleField(cmd, "index", kTpmRequestHeaderLength); + AddVisibleField(cmd, "length", kTpmRequestHeaderLength + 8); + AddVisibleField(cmd, "data", kTpmRequestHeaderLength + 12); + return cmd; +} + +Command* BuildReadCommand(void) { + int size = kTpmRequestHeaderLength + kTpmReadInfoLength; + Command* cmd = newCommand(TPM_ORD_NV_ReadValue, size); + cmd->name = "tpm_nv_read_cmd"; + AddVisibleField(cmd, "index", kTpmRequestHeaderLength); + AddVisibleField(cmd, "length", kTpmRequestHeaderLength + 8); + return cmd; +} + +Command* BuildPCRReadCommand(void) { + int size = kTpmRequestHeaderLength + sizeof(uint32_t); + Command* cmd = newCommand(TPM_ORD_PcrRead, size); + cmd->name = "tpm_pcr_read_cmd"; + AddVisibleField(cmd, "pcrNum", kTpmRequestHeaderLength); + return cmd; +} + +Command* BuildPPAssertCommand(void) { + int size = kTpmRequestHeaderLength + sizeof(TPM_PHYSICAL_PRESENCE); + Command* cmd = newCommand(TSC_ORD_PhysicalPresence, size); + cmd->name = "tpm_ppassert_cmd"; + AddInitializedField(cmd, kTpmRequestHeaderLength, + sizeof(TPM_PHYSICAL_PRESENCE), + TPM_PHYSICAL_PRESENCE_PRESENT); + return cmd; +} + +Command* BuildPPEnableCommand(void) { + int size = kTpmRequestHeaderLength + sizeof(TPM_PHYSICAL_PRESENCE); + Command* cmd = newCommand(TSC_ORD_PhysicalPresence, size); + cmd->name = "tpm_ppenable_cmd"; + AddInitializedField(cmd, kTpmRequestHeaderLength, + sizeof(TPM_PHYSICAL_PRESENCE), + TPM_PHYSICAL_PRESENCE_CMD_ENABLE); + return cmd; +} + +Command* BuildFinalizePPCommand(void) { + int size = kTpmRequestHeaderLength + sizeof(TPM_PHYSICAL_PRESENCE); + Command* cmd = newCommand(TSC_ORD_PhysicalPresence, size); + cmd->name = "tpm_finalizepp_cmd"; + AddInitializedField(cmd, kTpmRequestHeaderLength, + sizeof(TPM_PHYSICAL_PRESENCE), + TPM_PHYSICAL_PRESENCE_CMD_ENABLE | + TPM_PHYSICAL_PRESENCE_HW_DISABLE | + TPM_PHYSICAL_PRESENCE_LIFETIME_LOCK); + return cmd; +} + +Command* BuildPPLockCommand(void) { + int size = kTpmRequestHeaderLength + sizeof(TPM_PHYSICAL_PRESENCE); + Command* cmd = newCommand(TSC_ORD_PhysicalPresence, size); + cmd->name = "tpm_pplock_cmd"; + AddInitializedField(cmd, kTpmRequestHeaderLength, + sizeof(TPM_PHYSICAL_PRESENCE), + TPM_PHYSICAL_PRESENCE_LOCK); + return cmd; +} + +Command* BuildStartupCommand(void) { + int size = kTpmRequestHeaderLength + sizeof(TPM_STARTUP_TYPE); + Command* cmd = newCommand(TPM_ORD_Startup, size); + cmd->name = "tpm_startup_cmd"; + AddInitializedField(cmd, kTpmRequestHeaderLength, + sizeof(TPM_STARTUP_TYPE), + TPM_ST_CLEAR); + return cmd; +} + +Command* BuildSaveStateCommand(void) { + int size = kTpmRequestHeaderLength; + Command* cmd = newCommand(TPM_ORD_SaveState, size); + cmd->name = "tpm_savestate_cmd"; + return cmd; +} + +Command* BuildResumeCommand(void) { + int size = kTpmRequestHeaderLength + sizeof(TPM_STARTUP_TYPE); + Command* cmd = newCommand(TPM_ORD_Startup, size); + cmd->name = "tpm_resume_cmd"; + AddInitializedField(cmd, kTpmRequestHeaderLength, + sizeof(TPM_STARTUP_TYPE), + TPM_ST_STATE); + return cmd; +} + +Command* BuildSelftestfullCommand(void) { + int size = kTpmRequestHeaderLength; + Command* cmd = newCommand(TPM_ORD_SelfTestFull, size); + cmd->name = "tpm_selftestfull_cmd"; + return cmd; +} + +Command* BuildContinueSelfTestCommand(void) { + int size = kTpmRequestHeaderLength; + Command* cmd = newCommand(TPM_ORD_ContinueSelfTest, size); + cmd->name = "tpm_continueselftest_cmd"; + return cmd; +} + +Command* BuildReadPubekCommand(void) { + int size = kTpmRequestHeaderLength + sizeof(TPM_NONCE); + Command* cmd = newCommand(TPM_ORD_ReadPubek, size); + cmd->name = "tpm_readpubek_cmd"; + AddVisibleField(cmd, "antiReplay", kTpmRequestHeaderLength); + return cmd; +} + +Command* BuildForceClearCommand(void) { + int size = kTpmRequestHeaderLength; + Command* cmd = newCommand(TPM_ORD_ForceClear, size); + cmd->name = "tpm_forceclear_cmd"; + return cmd; +} + +Command* BuildPhysicalEnableCommand(void) { + int size = kTpmRequestHeaderLength; + Command* cmd = newCommand(TPM_ORD_PhysicalEnable, size); + cmd->name = "tpm_physicalenable_cmd"; + return cmd; +} + +Command* BuildPhysicalDisableCommand(void) { + int size = kTpmRequestHeaderLength; + Command* cmd = newCommand(TPM_ORD_PhysicalDisable, size); + cmd->name = "tpm_physicaldisable_cmd"; + return cmd; +} + +Command* BuildPhysicalSetDeactivatedCommand(void) { + int size = kTpmRequestHeaderLength + sizeof(uint8_t); + Command* cmd = newCommand(TPM_ORD_PhysicalSetDeactivated, size); + cmd->name = "tpm_physicalsetdeactivated_cmd"; + AddVisibleField(cmd, "deactivated", kTpmRequestHeaderLength); + return cmd; +} + +Command* BuildExtendCommand(void) { + int size = kTpmRequestHeaderLength + sizeof(uint32_t) + kPcrDigestLength; + Command* cmd = newCommand(TPM_ORD_Extend, size); + cmd->name = "tpm_extend_cmd"; + AddVisibleField(cmd, "pcrNum", kTpmRequestHeaderLength); + AddVisibleField(cmd, "inDigest", kTpmRequestHeaderLength + sizeof(uint32_t)); + return cmd; +} + +Command* BuildGetFlagsCommand(void) { + int size = (kTpmRequestHeaderLength + + sizeof(TPM_CAPABILITY_AREA) + /* capArea */ + sizeof(uint32_t) + /* subCapSize */ + sizeof(uint32_t)); /* subCap */ + + Command* cmd = newCommand(TPM_ORD_GetCapability, size); + cmd->name = "tpm_getflags_cmd"; + AddInitializedField(cmd, kTpmRequestHeaderLength, + sizeof(TPM_CAPABILITY_AREA), TPM_CAP_FLAG); + AddInitializedField(cmd, kTpmRequestHeaderLength + + sizeof(TPM_CAPABILITY_AREA), + sizeof(uint32_t), sizeof(uint32_t)); + AddInitializedField(cmd, kTpmRequestHeaderLength + + sizeof(TPM_CAPABILITY_AREA) + sizeof(uint32_t), + sizeof(uint32_t), TPM_CAP_FLAG_PERMANENT); + return cmd; +} + +Command* BuildGetSTClearFlagsCommand(void) { + int size = (kTpmRequestHeaderLength + + sizeof(TPM_CAPABILITY_AREA) + /* capArea */ + sizeof(uint32_t) + /* subCapSize */ + sizeof(uint32_t)); /* subCap */ + + Command* cmd = newCommand(TPM_ORD_GetCapability, size); + cmd->name = "tpm_getstclearflags_cmd"; + AddInitializedField(cmd, kTpmRequestHeaderLength, + sizeof(TPM_CAPABILITY_AREA), TPM_CAP_FLAG); + AddInitializedField(cmd, kTpmRequestHeaderLength + + sizeof(TPM_CAPABILITY_AREA), + sizeof(uint32_t), sizeof(uint32_t)); + AddInitializedField(cmd, kTpmRequestHeaderLength + + sizeof(TPM_CAPABILITY_AREA) + sizeof(uint32_t), + sizeof(uint32_t), TPM_CAP_FLAG_VOLATILE); + return cmd; +} + +Command* BuildGetSpaceInfoCommand(void) { + int size = (kTpmRequestHeaderLength + + sizeof(TPM_CAPABILITY_AREA) + /* capArea */ + sizeof(uint32_t) + /* subCapSize */ + sizeof(uint32_t)); /* subCap */ + + Command* cmd = newCommand(TPM_ORD_GetCapability, size); + cmd->name = "tpm_getspaceinfo_cmd"; + AddInitializedField(cmd, kTpmRequestHeaderLength, + sizeof(TPM_CAPABILITY_AREA), TPM_CAP_NV_INDEX); + AddInitializedField(cmd, kTpmRequestHeaderLength + + sizeof(TPM_CAPABILITY_AREA), + sizeof(uint32_t), sizeof(uint32_t)); + AddVisibleField(cmd, "index", kTpmRequestHeaderLength + + sizeof(TPM_CAPABILITY_AREA) + sizeof(uint32_t)); + return cmd; +} + +Command* BuildGetOwnershipCommand(void) { + int size = (kTpmRequestHeaderLength + + sizeof(TPM_CAPABILITY_AREA) + /* capArea */ + sizeof(uint32_t) + /* subCapSize */ + sizeof(uint32_t)); /* subCap */ + + Command* cmd = newCommand(TPM_ORD_GetCapability, size); + cmd->name = "tpm_getownership_cmd"; + AddInitializedField(cmd, kTpmRequestHeaderLength, + sizeof(TPM_CAPABILITY_AREA), TPM_CAP_PROPERTY); + AddInitializedField(cmd, kTpmRequestHeaderLength + + sizeof(TPM_CAPABILITY_AREA), + sizeof(uint32_t), sizeof(uint32_t)); + AddInitializedField(cmd, kTpmRequestHeaderLength + + sizeof(TPM_CAPABILITY_AREA) + sizeof(uint32_t), + sizeof(uint32_t), TPM_CAP_PROP_OWNER); + return cmd; +} + +Command* BuildGetRandomCommand(void) { + int size = kTpmRequestHeaderLength + sizeof(uint32_t); + Command* cmd = newCommand(TPM_ORD_GetRandom, size); + cmd->name = "tpm_get_random_cmd"; + AddVisibleField(cmd, "bytesRequested", kTpmRequestHeaderLength); + return cmd; +} + +Command* BuildGetVersionValCommand(void) { + int size = (kTpmRequestHeaderLength + + sizeof(TPM_CAPABILITY_AREA) + /* capArea */ + sizeof(uint32_t)); /* subCapSize */ + + Command* cmd = newCommand(TPM_ORD_GetCapability, size); + cmd->name = "tpm_getversionval_cmd"; + AddInitializedField(cmd, kTpmRequestHeaderLength, + sizeof(TPM_CAPABILITY_AREA), TPM_CAP_GET_VERSION_VAL); + AddInitializedField(cmd, kTpmRequestHeaderLength + + sizeof(TPM_CAPABILITY_AREA), + sizeof(uint32_t), 0); + return cmd; +} + +Command* BuildIFXFieldUpgradeInfoRequest2Command(void) { + int size = (kTpmRequestHeaderLength + + sizeof(TPM_IFX_FieldUpgradeInfoRequest2) + + sizeof(uint16_t)); + Command* cmd = newCommand(TPM_ORD_FieldUpgrade, size); + cmd->name = "tpm_ifx_fieldupgradeinforequest2_cmd"; + AddInitializedField(cmd, kTpmRequestHeaderLength, + sizeof(TPM_IFX_FieldUpgradeInfoRequest2), + TPM_IFX_FieldUpgradeInfoRequest2); + AddInitializedField(cmd, kTpmRequestHeaderLength + + sizeof(TPM_IFX_FieldUpgradeInfoRequest2), + sizeof(uint16_t), 0); + return cmd; +} + +Command* BuildOIAPCommand(void) { + int size = kTpmRequestHeaderLength; + Command* cmd = newCommand(TPM_ORD_OIAP, size); + cmd->name = "tpm_oiap_cmd"; + return cmd; +} + +Command* BuildOSAPCommand(void) { + int size = kTpmRequestHeaderLength + sizeof(uint16_t) + sizeof(uint32_t) + + sizeof(TPM_NONCE); + Command* cmd = newCommand(TPM_ORD_OSAP, size); + cmd->name = "tpm_osap_cmd"; + AddVisibleField(cmd, "entityType", kTpmRequestHeaderLength); + AddVisibleField(cmd, "entityValue", + kTpmRequestHeaderLength + sizeof(uint16_t)); + AddVisibleField( + cmd, "nonceOddOSAP", + kTpmRequestHeaderLength + sizeof(uint16_t) + sizeof(uint32_t)); + return cmd; +} + +Command* BuildTakeOwnershipCommand(void) { + Command* cmd = newCommandWithTag(TPM_ORD_TakeOwnership, 624, + TPM_TAG_RQU_AUTH1_COMMAND); + cmd->name = "tpm_takeownership_cmd"; + int offset = kTpmRequestHeaderLength; + AddInitializedField(cmd, offset, sizeof(uint16_t), TPM_PID_OWNER); + offset += sizeof(uint16_t); + AddInitializedField(cmd, offset, sizeof(uint32_t), TPM_RSA_2048_LEN); + offset += sizeof(uint32_t); + AddVisibleField(cmd, "encOwnerAuth", offset); + offset += sizeof(uint8_t[TPM_RSA_2048_LEN]); + AddInitializedField(cmd, offset, sizeof(uint32_t), TPM_RSA_2048_LEN); + offset += sizeof(uint32_t); + AddVisibleField(cmd, "encSrkAuth", offset); + offset += sizeof(uint8_t[TPM_RSA_2048_LEN]); + + /* The remainder are the srkParams struct TPM_KEY12 contents. */ + AddInitializedField(cmd, offset, sizeof(uint16_t), TPM_TAG_KEY12); + offset += sizeof(uint16_t); + AddInitializedField(cmd, offset, sizeof(uint16_t), 0); + offset += sizeof(uint16_t); + AddInitializedField(cmd, offset, sizeof(uint16_t), TPM_KEY_USAGE_STORAGE); + offset += sizeof(uint16_t); + AddInitializedField(cmd, offset, sizeof(uint32_t), 0 /* keyFlags */); + offset += sizeof(uint32_t); + AddInitializedField(cmd, offset, sizeof(uint8_t), TPM_AUTH_ALWAYS); + offset += sizeof(uint8_t); + AddInitializedField(cmd, offset, sizeof(uint32_t), TPM_ALG_RSA); + offset += sizeof(uint32_t); + AddInitializedField(cmd, offset, sizeof(uint16_t), + TPM_ES_RSAESOAEP_SHA1_MGF1); + offset += sizeof(uint16_t); + AddInitializedField(cmd, offset, sizeof(uint16_t), TPM_SS_NONE); + offset += sizeof(uint16_t); + AddInitializedField(cmd, offset, sizeof(uint32_t), + 3 * sizeof(uint32_t) /* algorithmParams.parmSize */); + offset += sizeof(uint32_t); + AddInitializedField(cmd, offset, sizeof(uint32_t), + 2048 /* algorithmParms.parms.keyLength */); + offset += sizeof(uint32_t); + AddInitializedField(cmd, offset, sizeof(uint32_t), + 2 /* algorithmParms.parms.numPrimes */); + offset += sizeof(uint32_t); + AddInitializedField(cmd, offset, sizeof(uint32_t), + 0 /* algorithmParms.parms.exponentSize */); + offset += sizeof(uint32_t); + AddInitializedField(cmd, offset, sizeof(uint32_t), 0 /* PCRInfoSize */); + offset += sizeof(uint32_t); + AddInitializedField(cmd, offset, sizeof(uint32_t), 0 /* pubkey.keyLength */); + offset += sizeof(uint32_t); + AddInitializedField(cmd, offset, sizeof(uint32_t), 0 /* encDataSize */); + offset += sizeof(uint32_t); + + /* Allocate space for the auth block. */ + offset += kTpmRequestAuthBlockLength; + + assert(offset == cmd->size); + + return cmd; +} + +Command* BuildCreateDelegationFamilyCommand(void) { + int size = kTpmRequestHeaderLength + 3 * sizeof(uint32_t) + sizeof(uint8_t); + Command* cmd = newCommand(TPM_ORD_Delegate_Manage, size); + cmd->name = "tpm_create_delegation_family_cmd"; + AddInitializedField(cmd, kTpmRequestHeaderLength, sizeof(uint32_t), + 0 /* familyID */); + AddInitializedField(cmd, kTpmRequestHeaderLength + sizeof(uint32_t), + sizeof(uint32_t), TPM_FAMILY_CREATE); + AddInitializedField(cmd, kTpmRequestHeaderLength + 2 * sizeof(uint32_t), + sizeof(uint32_t), sizeof(uint8_t) /* opDataSize */); + AddVisibleField(cmd, "familyLabel", + kTpmRequestHeaderLength + 3 * sizeof(uint32_t)); + return cmd; +} + +Command* BuildReadDelegationFamilyTableCommand(void) { + Command* cmd = + newCommand(TPM_ORD_Delegate_ReadTable, kTpmRequestHeaderLength); + cmd->name = "tpm_delegate_read_table_cmd"; + return cmd; +} + +/* Output the fields of a structure. + */ +void OutputFields(Field* fld) { + /* + * Field order is reversed. + */ + if (fld != NULL) { + OutputFields(fld->next); + if (fld->visible) { + printf(" uint16_t %s;\n", fld->name); + } + } +} + +/* Outputs a structure initializer. + */ +int OutputBytes_(Command* cmd, Field* fld) { + int cursor = 0; + int i; + /* + * Field order is reversed. + */ + if (fld != NULL) { + cursor = OutputBytes_(cmd, fld->next); + } else { + return 0; + } + if (!fld->visible) { + /* + * Catch up missing fields. + */ + assert(fld->offset >= cursor); + for (i = 0; i < fld->offset - cursor; i++) { + printf("0, "); + } + cursor = fld->offset; + switch (fld->size) { + case 1: + printf("%#x, ", fld->value); + cursor += 1; + break; + case 2: + printf("%#x, %#x, ", fld->value >> 8, fld->value & 0xff); + cursor += 2; + break; + case 4: + printf("%#x, %#x, %#x, %#x, ", fld->value >> 24, + (fld->value >> 16) & 0xff, + (fld->value >> 8) & 0xff, + fld->value & 0xff); + cursor += 4; + break; + default: + fprintf(stderr, "invalid field size %d\n", fld->size); + exit(1); + break; + } + } + return cursor; +} + +/* Helper to output a structure initializer. + */ +void OutputBytes(Command* cmd) { + (void) OutputBytes_(cmd, cmd->fields); +} + +void OutputFieldPointers(Command* cmd, Field* fld) { + if (fld == NULL) { + return; + } else { + OutputFieldPointers(cmd, fld->next); + if (fld->visible) { + printf("%d, ", fld->offset); + } + } +} + +/* Outputs the structure initializers for all commands. + */ +void OutputCommands(Command* cmd) { + if (cmd == NULL) { + return; + } else { + printf("const struct s_%s{\n uint8_t buffer[%d];\n", + cmd->name, cmd->size == 0 ? cmd->max_size : cmd->size); + OutputFields(cmd->fields); + printf("} %s = {{", cmd->name); + OutputBytes(cmd); + printf("},\n"); + OutputFieldPointers(cmd, cmd->fields); + printf("};\n\n"); + } + OutputCommands(cmd->next); +} + +Command* (*builders[])(void) = { + BuildDefineSpaceCommand, + BuildWriteCommand, + BuildReadCommand, + BuildPCRReadCommand, + BuildPPAssertCommand, + BuildPPEnableCommand, + BuildPPLockCommand, + BuildFinalizePPCommand, + BuildStartupCommand, + BuildSaveStateCommand, + BuildResumeCommand, + BuildSelftestfullCommand, + BuildContinueSelfTestCommand, + BuildReadPubekCommand, + BuildForceClearCommand, + BuildPhysicalDisableCommand, + BuildPhysicalEnableCommand, + BuildPhysicalSetDeactivatedCommand, + BuildGetFlagsCommand, + BuildGetSTClearFlagsCommand, + BuildGetSpaceInfoCommand, + BuildGetOwnershipCommand, + BuildGetRandomCommand, + BuildExtendCommand, + BuildGetVersionValCommand, + BuildIFXFieldUpgradeInfoRequest2Command, + BuildOIAPCommand, + BuildOSAPCommand, + BuildTakeOwnershipCommand, + BuildCreateDelegationFamilyCommand, + BuildReadDelegationFamilyTableCommand, +}; + +static void FreeFields(Field* fld) { + if (fld != NULL) { + Field* next_field = fld->next; + free(fld); + FreeFields(next_field); + } +} + +static void FreeCommands(Command* cmd) { + if (cmd != NULL) { + Command* next_command = cmd->next; + FreeFields(cmd->fields); + free(cmd); + FreeCommands(next_command); + } +} + +int main(void) { + Command* commands = NULL; + int i; + for (i = 0; i < sizeof(builders) / sizeof(builders[0]); i++) { + Command* cmd = builders[i](); + cmd->next = commands; + commands = cmd; + } + + printf("/* This file is automatically generated */\n\n"); + OutputCommands(commands); + printf("const int kWriteInfoLength = %d;\n", (int) sizeof(TPM_WRITE_INFO)); + + FreeCommands(commands); + return 0; +} diff --git a/utility/tpm-dad-lock b/utility/tpm-dad-lock new file mode 100644 index 0000000..ba5527c --- /dev/null +++ b/utility/tpm-dad-lock @@ -0,0 +1,51 @@ +#!/bin/bash -e +# +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Attempt to trigger the TPM Dictionary Attack Defense Lock and measure its +# behavior. + +if [ -f /sys/class/misc/tpm0/device/owned ]; then + owned=$(cat /sys/class/misc/tpm0/device/owned) +else + owned=$(cat /sys/class/tpm/tpm0/device/owned) +fi +if [ "$owned" = "" ]; then + echo "TPM is not functional" + exit 1 +fi +if [ "$owned" = "0" ]; then + echo "please use random, non-empty passwords" + tpm_takeownership || exit 1 +fi + +attempts=0 +max=1 +e=/tmp/x$$ + +while true; do + attempts=$(( $attempts + 1 )) + before=$(date +%s) + defending=1 + while [ $defending -eq 1 ]; do + if tpm_getpubek -z 2> $e; then + echo "unexpected success of tpm_getpubek" + exit 1 + fi + if grep -q communication $e; then + echo "communication failure" + exit 1 + fi + if ! grep -q dictionary $e; then + defending=0 + fi + done + after=$(date +%s) + elapsed=$(( $after - $before )) + if [ $elapsed -gt $max ]; then + echo delay of $elapsed seconds after $attempts attempts + max=$elapsed + fi +done diff --git a/utility/tpm-nvsize b/utility/tpm-nvsize new file mode 100755 index 0000000..ec2d033 --- /dev/null +++ b/utility/tpm-nvsize @@ -0,0 +1,50 @@ +#! /bin/sh -e +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# Finds the largest NV space that can be defined on the TPM in this state +# (i.e. without removing existing spaces). +# +# The TPM must be unowned, and physical presence must be on. + +low=1 +high=1500 +try=$high + +# Binary search with no upper bound +while true; do + ## echo trying $try [ $low $high ] + if /usr/bin/tpmc definespace 0xf004 $(printf "%#x" $try) 0x1 \ + > /dev/null 2>&1; then + # definespace success: end, or $try must grow + if [ $try -eq $low ]; then + echo $low + exit 0 + elif [ $try -lt $high ]; then + low=$try + try=$(( ( $high + $low ) / 2 )) + else + # special case: when try == high, expand the search + low=$try + try=$(( $try * 2 )) + high=$try + fi + else + # check for unexpected errors + result=$? + if [ $result -ne 17 ]; then + echo running tpmc definespace 0xf004 0x1 0x1 + /usr/bin/tpmc definespace 0xf004 0x1 0x1 + echo please correct this condition and try again + exit 1 + fi + # definespace failure: end, or $try must shrink + if [ $try -eq $low ]; then + echo 0 + exit 0 + fi + high=$try + try=$(( ( $high + $low ) / 2 )) + fi +done diff --git a/utility/tpmc.c b/utility/tpmc.c new file mode 100644 index 0000000..841551c --- /dev/null +++ b/utility/tpmc.c @@ -0,0 +1,712 @@ +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * TPM command utility. Runs simple TPM commands. Mostly useful when physical + * presence has not been locked. + * + * The exit code is 0 for success, the TPM error code for TPM errors, and 255 + * for other errors. + */ + +#include +#include +#include +#include +#include +#include + +#include "tlcl.h" +#include "tpm_error_messages.h" +#include "tss_constants.h" + +#define OTHER_ERROR 255 /* OTHER_ERROR must be the largest uint8_t value. */ + +#ifdef TPM2_MODE +#define TPM_MODE_SELECT(_, tpm20_ver) tpm20_ver +#else +#define TPM_MODE_SELECT(tpm12_ver, _) tpm12_ver +#endif + +#define TPM_MODE_STRING TPM_MODE_SELECT("1.2", "2.0") +#define TPM12_NEEDS_PP TPM_MODE_SELECT(" (needs PP)", "") +#define TPM12_NEEDS_PP_REBOOT TPM_MODE_SELECT(" (needs PP, maybe reboot)", "") + +#define TPM20_NOT_IMPLEMENTED_DESCR(descr) \ + descr TPM_MODE_SELECT("", " [not-implemented for TPM2.0]") +#define TPM20_NOT_IMPLEMENTED_HANDLER(handler) \ + TPM_MODE_SELECT(handler, HandlerNotImplementedForTPM2) +#define TPM20_NOT_IMPLEMENTED(descr, handler) \ + TPM20_NOT_IMPLEMENTED_DESCR(descr), \ + TPM20_NOT_IMPLEMENTED_HANDLER(handler) + +#define TPM20_DOES_NOTHING_DESCR(descr) \ + descr TPM_MODE_SELECT("", " [no-op for TPM2.0]") +#define TPM20_DOES_NOTHING_HANDLER(handler) \ + TPM_MODE_SELECT(handler, HandlerDoNothingForTPM2) +#define TPM20_DOES_NOTHING(descr, handler) \ + TPM20_DOES_NOTHING_DESCR(descr), \ + TPM20_DOES_NOTHING_HANDLER(handler) + +typedef struct command_record { + const char* name; + const char* abbr; + const char* description; + uint32_t (*handler)(void); +} command_record; + +/* Set in main, consumed by handler functions below. We use global variables + * so we can also choose to call Tlcl*() functions directly; they don't take + * argv/argc. + */ +int nargs; +char** args; + +/* Converts a string in the form 0x[0-9a-f]+ to a 32-bit value. Returns 0 for + * success, non-zero for failure. + */ +static int HexStringToUint32(const char* string, uint32_t* value) { + char tail; + /* strtoul is not as good because it overflows silently */ + const char* format = strncmp(string, "0x", 2) ? "%8x%c" : "0x%8x%c"; + int n = sscanf(string, format, value, &tail); + return n != 1; +} + +/* Converts a string in the form [0-9a-f]+ to an 8-bit value. Returns 0 for + * success, non-zero for failure. + */ +static int HexStringToUint8(const char* string, uint8_t* value) { + char* end; + uint32_t large_value = strtoul(string, &end, 16); + if (*end != '\0' || large_value > 0xff) { + return 1; + } + *value = large_value; + return 0; +} + +static int HexStringToArray(const char* string, uint8_t* value, int num_bytes) { + int len = strlen(string); + if (!strncmp(string, "0x", 2)) { + string += 2; + len -= 2; + } + if (len != num_bytes * 2) { + return 1; + } + for (; len > 0; string += 2, len -= 2, value++) { + if (sscanf(string, "%2hhx", value) != 1) { + return 1; + } + } + return 0; +} + +/* TPM error check and reporting. Returns 0 if |result| is 0 (TPM_SUCCESS). + * Otherwise looks up a TPM error in the error table and prints the error if + * found. Then returns min(result, OTHER_ERROR) since some error codes, such + * as TPM_E_RETRY, do not fit in a byte. + */ +static uint8_t ErrorCheck(uint32_t result, const char* cmd) { + uint8_t exit_code = result > OTHER_ERROR ? OTHER_ERROR : result; + if (result == 0) { + return 0; + } else { + int i; + int n = sizeof(tpm_error_table) / sizeof(tpm_error_table[0]); + fprintf(stderr, "command \"%s\" failed with code %#x\n", cmd, result); + for (i = 0; i < n; i++) { + if (tpm_error_table[i].code == result) { + fprintf(stderr, "%s\n%s\n", tpm_error_table[i].name, + tpm_error_table[i].description); + return exit_code; + } + } + fprintf(stderr, "the TPM error code is unknown to this program\n"); + return exit_code; + } +} + +/* Handler functions. These wouldn't exist if C had closures. + */ +static uint32_t HandlerTpmVersion(void) { + puts(TPM_MODE_STRING); + return 0; +} + +/* TODO(apronin): stub for selected flags for TPM2 */ +#ifdef TPM2_MODE +static uint32_t HandlerGetFlags(void) { + fprintf(stderr, "getflags not implemented for TPM2\n"); + exit(OTHER_ERROR); +} +#else +static uint32_t HandlerGetFlags(void) { + uint8_t disabled; + uint8_t deactivated; + uint8_t nvlocked; + uint32_t result = TlclGetFlags(&disabled, &deactivated, &nvlocked); + if (result == 0) { + printf("disabled: %d\ndeactivated: %d\nnvlocked: %d\n", + disabled, deactivated, nvlocked); + } + return result; +} +#endif + +#ifndef TPM2_MODE +static uint32_t HandlerActivate(void) { + return TlclSetDeactivated(0); +} + +static uint32_t HandlerDeactivate(void) { + return TlclSetDeactivated(1); +} +#endif + +static uint32_t HandlerDefineSpace(void) { + uint32_t index, size, perm; + int overwrite = 1; + + if (nargs != 5 && nargs != 6) { + fprintf(stderr, "usage: tpmc def " + "[--no-overwrite])\n"); + exit(OTHER_ERROR); + } + + if (HexStringToUint32(args[2], &index) != 0 || + HexStringToUint32(args[3], &size) != 0 || + HexStringToUint32(args[4], &perm) != 0) { + fprintf(stderr, ", , and must be " + "32-bit hex (0x[0-9a-f]+)\n"); + exit(OTHER_ERROR); + } + + if (args[5] && strcmp(args[5], "--no-overwrite") == 0) { + overwrite = 0; + } + +#ifdef TPM2_MODE + // For TPM 2.0, DefineSpace will fail if the space already exists, so to + // support the default 'overwrite' mode, need to undefine the space first. + if (overwrite) { + TlclUndefineSpace(index); + } +#else /* ifndef TPM2_MODE */ + // For TPM 1.2, we have to check the existing before calling DefineSpace(), + // since it will automaticly overwrite the existing space by default. + // Do nothing for TPM 2.0. We rely on DefineSpace() to return the appropriate + // error code. + if (!overwrite) { + uint32_t result , permissions; + result = TlclGetPermissions(index, &permissions); + if (!result) { + fprintf(stderr, "The space is existing but --no-overwrite is set.\n"); + exit(OTHER_ERROR); + } + } +#endif + + return TlclDefineSpace(index, perm, size); +} + +static uint32_t HandlerUndefineSpace(void) { + uint32_t index; + if (nargs != 3) { + fprintf(stderr, "usage: tpmc undef \n"); + exit(OTHER_ERROR); + } + if (HexStringToUint32(args[2], &index) != 0) { + fprintf(stderr, " must be " + "32-bit hex (0x[0-9a-f]+)\n"); + exit(OTHER_ERROR); + } + return TlclUndefineSpace(index); +} + +static uint32_t HandlerWrite(void) { + uint32_t index, size; + uint8_t value[TPM_MAX_COMMAND_SIZE]; + char** byteargs; + int i; + if (nargs < 3) { + fprintf(stderr, "usage: tpmc write [ ...]\n"); + exit(OTHER_ERROR); + } + if (HexStringToUint32(args[2], &index) != 0) { + fprintf(stderr, " must be 32-bit hex (0x[0-9a-f]+)\n"); + exit(OTHER_ERROR); + } + size = nargs - 3; + if (size > sizeof(value)) { + fprintf(stderr, "byte array too large\n"); + exit(OTHER_ERROR); + } + + byteargs = args + 3; + for (i = 0; i < size; i++) { + if (HexStringToUint8(byteargs[i], &value[i]) != 0) { + fprintf(stderr, "invalid byte %s, should be [0-9a-f][0-9a-f]?\n", + byteargs[i]); + exit(OTHER_ERROR); + } + } + + if (size == 0) { +#ifndef TPM2_MODE + if (index == TPM_NV_INDEX_LOCK) { + fprintf(stderr, "This would set the nvLocked bit. " + "Use \"tpmc setnv\" instead.\n"); + exit(OTHER_ERROR); + } +#endif + printf("warning: zero-length write\n"); + } else { + printf("writing %d byte%s\n", size, size > 1 ? "s" : ""); + } + + return TlclWrite(index, value, size); +} + +static uint32_t HandlerPCRRead(void) { + uint32_t index; + uint8_t value[TPM_PCR_DIGEST]; + uint32_t result; + int i; + if (nargs != 3) { + fprintf(stderr, "usage: tpmc pcrread \n"); + exit(OTHER_ERROR); + } + if (HexStringToUint32(args[2], &index) != 0) { + fprintf(stderr, " must be 32-bit hex (0x[0-9a-f]+)\n"); + exit(OTHER_ERROR); + } + result = TlclPCRRead(index, value, sizeof(value)); + if (result == 0) { + for (i = 0; i < TPM_PCR_DIGEST; i++) { + printf("%02x", value[i]); + } + printf("\n"); + } + return result; +} + +static uint32_t HandlerPCRExtend(void) { + uint32_t index; + uint8_t value[TPM_PCR_DIGEST]; + if (nargs != 4) { + fprintf(stderr, "usage: tpmc pcrextend \n"); + exit(OTHER_ERROR); + } + if (HexStringToUint32(args[2], &index) != 0) { + fprintf(stderr, " must be 32-bit hex (0x[0-9a-f]+)\n"); + exit(OTHER_ERROR); + } + if (HexStringToArray(args[3], value, TPM_PCR_DIGEST)) { + fprintf(stderr, " must be a %d-byte hex string\n", + TPM_PCR_DIGEST); + exit(OTHER_ERROR); + } + return TlclExtend(index, value, value); +} + +static uint32_t HandlerRead(void) { + uint32_t index, size; + uint8_t value[4096]; + uint32_t result; + int i; + if (nargs != 4) { + fprintf(stderr, "usage: tpmc read \n"); + exit(OTHER_ERROR); + } + if (HexStringToUint32(args[2], &index) != 0 || + HexStringToUint32(args[3], &size) != 0) { + fprintf(stderr, " and must be 32-bit hex (0x[0-9a-f]+)\n"); + exit(OTHER_ERROR); + } + if (size > sizeof(value)) { + fprintf(stderr, "size of read (%#x) is too big\n", size); + exit(OTHER_ERROR); + } + result = TlclRead(index, value, size); + if (result == 0 && size > 0) { + for (i = 0; i < size - 1; i++) { + printf("%x ", value[i]); + } + printf("%x\n", value[i]); + } + return result; +} + +static uint32_t HandlerGetPermissions(void) { + uint32_t index, permissions, result; + if (nargs != 3) { + fprintf(stderr, "usage: tpmc getp \n"); + exit(OTHER_ERROR); + } + if (HexStringToUint32(args[2], &index) != 0) { + fprintf(stderr, " must be 32-bit hex (0x[0-9a-f]+)\n"); + exit(OTHER_ERROR); + } + result = TlclGetPermissions(index, &permissions); + if (result == 0) { + printf("space %#x has permissions %#x\n", index, permissions); + } + return result; +} + +static uint32_t HandlerGetOwnership(void) { + uint8_t owned = 0; + uint32_t result; + if (nargs != 2) { + fprintf(stderr, "usage: tpmc getownership\n"); + exit(OTHER_ERROR); + } + result = TlclGetOwnership(&owned); + if (result == 0) { + printf("Owned: %s\n", owned ? "yes" : "no"); + } + return result; +} + +static uint32_t HandlerGetRandom(void) { + uint32_t length, size = 0; + uint8_t* bytes; + uint32_t result; + int i; + if (nargs != 3) { + fprintf(stderr, "usage: tpmc getrandom \n"); + exit(OTHER_ERROR); + } + if (HexStringToUint32(args[2], &length) != 0) { + fprintf(stderr, " must be 32-bit hex (0x[0-9a-f]+)\n"); + exit(OTHER_ERROR); + } + bytes = calloc(1, length); + if (bytes == NULL) { + perror("calloc"); + exit(OTHER_ERROR); + } + result = TlclGetRandom(bytes, length, &size); + if (result == 0 && size > 0) { + for (i = 0; i < size; i++) { + printf("%02x", bytes[i]); + } + printf("\n"); + } + free(bytes); + return result; +} + +static uint32_t HandlerGetPermanentFlags(void) { + TPM_PERMANENT_FLAGS pflags; + uint32_t result = TlclGetPermanentFlags(&pflags); + if (result == 0) { +#define P(name) printf("%s %d\n", #name, pflags.name) +#ifdef TPM2_MODE + P(ownerAuthSet); + P(endorsementAuthSet); + P(lockoutAuthSet); + P(disableClear); + P(inLockout); + P(tpmGeneratedEPS); +#else + P(disable); + P(ownership); + P(deactivated); + P(readPubek); + P(disableOwnerClear); + P(allowMaintenance); + P(physicalPresenceLifetimeLock); + P(physicalPresenceHWEnable); + P(physicalPresenceCMDEnable); + P(CEKPUsed); + P(TPMpost); + P(TPMpostLock); + P(FIPS); + P(Operator); + P(enableRevokeEK); + P(nvLocked); + P(readSRKPub); + P(tpmEstablished); + P(maintenanceDone); + P(disableFullDALogicInfo); +#endif +#undef P + } + return result; +} + +static uint32_t HandlerGetSTClearFlags(void) { + TPM_STCLEAR_FLAGS vflags; + uint32_t result = TlclGetSTClearFlags(&vflags); + if (result == 0) { +#define P(name) printf("%s %d\n", #name, vflags.name) +#ifdef TPM2_MODE + P(phEnable); + P(shEnable); + P(ehEnable); + P(phEnableNV); + P(orderly); +#else + P(deactivated); + P(disableForceClear); + P(physicalPresence); + P(physicalPresenceLock); + P(bGlobalLock); +#endif +#undef P + } + return result; +} + +static uint32_t HandlerSendRaw(void) { + uint8_t request[4096]; + uint8_t response[4096]; + uint32_t result; + int size; + int i; + if (nargs == 2) { + fprintf(stderr, "usage: tpmc sendraw ... \n"); + exit(OTHER_ERROR); + } + for (i = 0; i < nargs - 2 && i < sizeof(request); i++) { + if (HexStringToUint8(args[2 + i], &request[i]) != 0) { + fprintf(stderr, "bad byte value \"%s\"\n", args[2 + i]); + exit(OTHER_ERROR); + } + } + size = TlclPacketSize(request); + if (size != i) { + fprintf(stderr, "bad request: size field is %d, but packet has %d bytes\n", + size, i); + exit(OTHER_ERROR); + } + bzero(response, sizeof(response)); + result = TlclSendReceive(request, response, sizeof(response)); + if (result != 0) { + fprintf(stderr, "request failed with code %d\n", result); + } + size = TlclPacketSize(response); + if (size < 10 || size > sizeof(response)) { + fprintf(stderr, "unexpected response size %d\n", size); + exit(OTHER_ERROR); + } + for (i = 0; i < size; i++) { + printf("0x%02x ", response[i]); + if (i == size - 1 || (i + 1) % 8 == 0) { + printf("\n"); + } + } + return result; +} + +static uint32_t HandlerGetVersion(void) { + uint32_t vendor; + uint64_t firmware_version; + uint8_t vendor_specific[32]; + size_t vendor_specific_size = sizeof(vendor_specific); + uint32_t result = TlclGetVersion(&vendor, &firmware_version, vendor_specific, + &vendor_specific_size); + if (result == 0) { + printf("vendor %08x\nfirmware_version %016" PRIx64 "\nvendor_specific ", + vendor, firmware_version); + size_t n; + for (n = 0; n < vendor_specific_size; ++n) { + printf("%02x", vendor_specific[n]); + } + printf("\n"); + } + return result; +} + +#ifndef TPM2_MODE +static void PrintIFXFirmwarePackage(TPM_IFX_FIRMWAREPACKAGE* firmware_package, + const char* prefix) { + printf("%s_package_id %08x\n", prefix, + firmware_package->FwPackageIdentifier); + printf("%s_version %08x\n", prefix, firmware_package->Version); + printf("%s_stale_version %08x\n", prefix, firmware_package->StaleVersion); +} + +static uint32_t HandlerIFXFieldUpgradeInfo(void) { + TPM_IFX_FIELDUPGRADEINFO info; + uint32_t result = TlclIFXFieldUpgradeInfo(&info); + if (result == 0) { + printf("max_data_size %u\n", info.wMaxDataSize); + PrintIFXFirmwarePackage(&info.sBootloaderFirmwarePackage, "bootloader"); + PrintIFXFirmwarePackage(&info.sFirmwarePackages[0], "fw0"); + PrintIFXFirmwarePackage(&info.sFirmwarePackages[1], "fw1"); + printf("status %04x\n", info.wSecurityModuleStatus); + PrintIFXFirmwarePackage(&info.sProcessFirmwarePackage, "process_fw"); + printf("field_upgrade_counter %u\n", info.wFieldUpgradeCounter); + } + return result; +} + +static uint32_t HandlerCheckOwnerAuth(void) { + /* Attempt to define an NVRAM space using owner auth. We're using + * TPM_NV_INDEX_TRIAL, which doesn't actually allocate a space but still + * performs the owner authorization checks. Thus the return status indicates + * whether owner authorization was successful or not. + * + * The owner_auth value below is the commonly used well-known secret, i.e. the + * SHA1 hash of 20 zero bytes. This is the owner secret that is effective + * immediately after taking TPM ownership when we haven't configured a random + * owner password yet. + */ + uint8_t owner_auth[TPM_AUTH_DATA_LEN] = { + 0x67, 0x68, 0x03, 0x3e, 0x21, 0x64, 0x68, 0x24, 0x7b, 0xd0, + 0x31, 0xa0, 0xa2, 0xd9, 0x87, 0x6d, 0x79, 0x81, 0x8f, 0x8f}; + return TlclDefineSpaceEx(owner_auth, sizeof(owner_auth), TPM_NV_INDEX_TRIAL, + TPM_NV_PER_OWNERWRITE, 1, NULL, 0); +} +#endif /* !TPM2_MODE */ + +#ifdef TPM2_MODE +static uint32_t HandlerDoNothingForTPM2(void) { + return 0; +} + +static uint32_t HandlerNotImplementedForTPM2(void) { + fprintf(stderr, "%s: not implemented for TPM2.0\n", args[1]); + exit(OTHER_ERROR); +} +#endif + +/* Table of TPM commands. + */ +command_record command_table[] = { + { "tpmversion", "tpmver", "print TPM version: 1.2 or 2.0", + HandlerTpmVersion }, + { "getflags", "getf", "read and print the value of selected flags", + HandlerGetFlags }, + { "startup", "sta", "issue a Startup command", TlclStartup }, + { "selftestfull", "test", "issue a SelfTestFull command", TlclSelfTestFull }, + { "continueselftest", "ctest", "issue a ContinueSelfTest command", + TlclContinueSelfTest }, + { "assertphysicalpresence", "ppon", + TPM20_DOES_NOTHING("assert Physical Presence", + TlclAssertPhysicalPresence) }, + { "physicalpresencecmdenable", "ppcmd", + TPM20_NOT_IMPLEMENTED("turn on software PP", + TlclPhysicalPresenceCMDEnable) }, + { "enable", "ena", + TPM20_DOES_NOTHING("enable the TPM" TPM12_NEEDS_PP, + TlclSetEnable) }, + { "disable", "dis", + TPM20_NOT_IMPLEMENTED("disable the TPM" TPM12_NEEDS_PP, + TlclClearEnable) }, + { "activate", "act", + TPM20_DOES_NOTHING("activate the TPM" TPM12_NEEDS_PP_REBOOT, + HandlerActivate) }, + { "deactivate", "deact", + TPM20_NOT_IMPLEMENTED("deactivate the TPM" TPM12_NEEDS_PP_REBOOT, + HandlerDeactivate) }, + { "clear", "clr", + "clear the TPM owner" TPM12_NEEDS_PP, + TlclForceClear }, + { "setnvlocked", "setnv", + TPM20_NOT_IMPLEMENTED("set the nvLocked flag permanently (IRREVERSIBLE!)", + TlclSetNvLocked) }, + { "lockphysicalpresence", "pplock", + TPM_MODE_SELECT("lock (turn off) PP until reboot", + "set rollback protection lock for kernel image until reboot"), + TlclLockPhysicalPresence }, + { "setbgloballock", "block", + TPM_MODE_SELECT("set the bGlobalLock until reboot", + "set rollback protection lock for R/W firmware until reboot"), + TlclSetGlobalLock }, + { "definespace", "def", + TPM_MODE_SELECT("define a space (def ). ", + "define a space (def [--no-overwrite]). ") + "Default will overwrite if the space is defined.", + HandlerDefineSpace }, + { "undefinespace", "undef", + "undefine a space (undef )" + TPM_MODE_SELECT(" only succeeds when NvLocked is not set", ""), + HandlerUndefineSpace }, + { "write", "write", "write to a space (write [ ...])", + HandlerWrite }, + { "read", "read", "read from a space (read )", + HandlerRead }, + { "pcrread", "pcr", "read from a PCR (pcrread )", + HandlerPCRRead }, + { "pcrextend", "extend", "extend a PCR (extend )", + HandlerPCRExtend }, + { "getownership", "geto", "print state of TPM ownership", + HandlerGetOwnership }, + { "getpermissions", "getp", "print space permissions (getp )", + HandlerGetPermissions }, + { "getpermanentflags", "getpf", "print all permanent flags", + HandlerGetPermanentFlags }, + { "getrandom", "rand", "read bytes from RNG (rand )", + HandlerGetRandom }, + { "getstclearflags", "getvf", "print all volatile (ST_CLEAR) flags", + HandlerGetSTClearFlags }, + { "resume", "res", "execute TPM_Startup(ST_STATE)", TlclResume }, + { "savestate", "save", "execute TPM_SaveState", TlclSaveState }, + { "sendraw", "raw", "send a raw request and print raw response", + HandlerSendRaw }, + { "getversion", "getver", "get TPM vendor and firmware version", + HandlerGetVersion }, + { "ifxfieldupgradeinfo", "ifxfui", + TPM20_NOT_IMPLEMENTED("read and print IFX field upgrade info", + HandlerIFXFieldUpgradeInfo) }, + { "checkownerauth", "chko", + TPM20_NOT_IMPLEMENTED("Check owner authorization with well-known secret", + HandlerCheckOwnerAuth) }, +}; + +static int n_commands = sizeof(command_table) / sizeof(command_table[0]); + +int main(int argc, char* argv[]) { + char *progname; + uint32_t result; + + progname = strrchr(argv[0], '/'); + if (progname) + progname++; + else + progname = argv[0]; + + if (argc < 2) { + fprintf(stderr, "usage: %s [args]\n or: %s help\n", + progname, progname); + return OTHER_ERROR; + } else { + command_record* c; + const char* cmd = argv[1]; + nargs = argc; + args = argv; + + if (strcmp(cmd, "help") == 0) { + printf("tpmc mode: TPM%s\n", TPM_MODE_STRING); + printf("%26s %7s %s\n\n", "command", "abbr.", "description"); + for (c = command_table; c < command_table + n_commands; c++) { + printf("%26s %7s %s\n", c->name, c->abbr, c->description); + } + return 0; + } + if (!strcmp(cmd, "tpmversion") || !strcmp(cmd, "tpmver")) { + return HandlerTpmVersion(); + } + + result = TlclLibInit(); + if (result) { + fprintf(stderr, "initialization failed with code %d\n", result); + return result > OTHER_ERROR ? OTHER_ERROR : result; + } + + for (c = command_table; c < command_table + n_commands; c++) { + if (strcmp(cmd, c->name) == 0 || strcmp(cmd, c->abbr) == 0) { + return ErrorCheck(c->handler(), cmd); + } + } + + /* No command matched. */ + fprintf(stderr, "%s: unknown command: %s\n", progname, cmd); + return OTHER_ERROR; + } +} diff --git a/utility/vbutil_what_keys b/utility/vbutil_what_keys new file mode 100755 index 0000000..b4427a3 --- /dev/null +++ b/utility/vbutil_what_keys @@ -0,0 +1,425 @@ +#!/bin/sh -u +# Copyright (c) 2014 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +if [ -z "$*" ]; then + cat <&2 + +Usage: vbutil_what_keys [-v|-V] IMAGE [IMAGE...] + +Given a ChromiumOS disk (or BIOS) image, try to figure out how it's signed. +Note that this does not verify the signature, it just reports which keyblock +was used to create the signature. + +With the -v option, it will attempt to mount any rootfs partitions from disk +images (using sudo), extract the BIOS from /usr/sbin/chromeos-firmwareupdate, +and process it as well. Use -V to display the shellball -V message too. +that. + +EOF + exit 1 +fi + +# We'll grep for the known sha1sums within this script (they're at the end). +# Obtain them by running script on images you know have been signed correctly +# (since the keys themselves are inside the HSM). +# +# BTW, the default H2C HWIDs are fixed for each platform: +# +# {97A1FBD6-FDE1-4FC5-BB81-286608B90FCE} Alex H2C +# {9D799111-A88A-439E-9E1F-FBBB41B00A9A} Mario H2C +# {24B107F2-BA6A-4EBD-8CDD-E768438CE0F0} Stumpy H2C +# {FA42644C-CF3A-4692-A9D3-1A667CB232E9} ZGB H2C + + +# args? +unpack_it= +verbose= +if [ "${1:-}" = "-v" ]; then + unpack_it=yes + shift +fi +if [ "${1:-}" = "-V" ]; then + unpack_it=yes + verbose=yes + shift +fi + +# clean up on exit +cleanup() { + [ -n "${CLEAN_UM:-}" ] && sudo umount $CLEAN_UM + [ -n "${CLEAN_RM:-}" ] && rm -rf $CLEAN_RM +} +trap cleanup EXIT + +# temp stuff +TMPFILE=$(mktemp /tmp/keyblock_XXXXXXXXX) +CLEAN_RM="$TMPFILE" +if [ -n "$unpack_it" ]; then + TMPMNT=$(mktemp -d /tmp/mountdir_XXXXXXXXX) + TMPDIR=$(mktemp -d /tmp/extractdir_XXXXXXXXX) + CLEAN_RM="$CLEAN_RM $TMPDIR $TMPMNT" +fi + +greppy() { + local key="$1" + grep "$key" "$0" 2>/dev/null | sed -e 's/ \+/ /g' | \ + cut -d ' ' -f 4- | sed -e ':a;N;$!ba;s/\n/, /g' +} + + +showbios() { + local file="$1" space="$2" + local hwid matchh rootkey matchn recoverykey matchr + + hwid=$(futility gbb --hwid "$file" | sed -e 's/^.*: *//') || return + matchh=$(grep "$hwid" "$0" 2>/dev/null | sed -e 's/^# //') + + futility gbb --rootkey="$TMPFILE" "$file" >/dev/null + rootkey=$(futility vbutil_key --unpack "$TMPFILE" | grep sha1sum | \ + sed -e 's/^.*: *//') + matchn=$(greppy "$rootkey") + + futility gbb --recoverykey="$TMPFILE" "$file" >/dev/null + recoverykey=$(futility vbutil_key --unpack "$TMPFILE" | grep sha1sum | \ + sed -e 's/^.*: *//') + matchr=$(greppy "$recoverykey") + + echo "$space hwid: ${matchh:-$hwid}" + echo "$space root key: ${rootkey} ${matchn}" + echo "$space recovery key: ${recoverykey} ${matchr}" +} + + + +# handle one input file +dofile() { + file="$1" + size=$(stat -c %s "$file") + + if [ -f "$file" ] && [ "$size" -le 16777216 ]; then + echo -e "\nBIOS: $file" + + showbios "$file" "" + + else + echo -e "\nIMAGE: $file" + + for pnum in $(cgpt find -n -t kernel "$file" 2>/dev/null); do + + psize=$(cgpt show -s -i "$pnum" "$file") + if [ "$psize" -ge 128 ]; then + + pstart=$(cgpt show -b -i "$pnum" "$file") + dd if="$file" of="$TMPFILE" bs=512 count=128 skip="$pstart" 2>/dev/null + + psum=$(futility vbutil_keyblock --unpack "$TMPFILE" 2>/dev/null | \ + grep sha1sum | sed -e 's/^.*: *//') + + if [ -n "$psum" ]; then + match=$(greppy "$psum") + flags=$(futility vbutil_keyblock --unpack "$TMPFILE" 2>/dev/null | \ + grep Flags: | sed -e 's/^.*:[ 0-9]*//') + else + match="" + psum="--invalid--" + flags="" + fi + + echo " part $pnum kernel: $psum ($flags) $match" + fi + + done + + if [ -n "$unpack_it" ]; then + for pnum in $(cgpt find -n -t rootfs "$file" 2>/dev/null); do + + psize=$(cgpt show -s -i "$pnum" "$file") + if [ "$psize" -ge 128 ]; then + + pstart=$(cgpt show -b -i "$pnum" "$file") + + echo " part $pnum shellball:" + sudo mount -o loop,ro,offset=$(( $pstart * 512 )) "$file" "$TMPMNT" + CLEAN_UM="$TMPMNT" + [ -n "$verbose" ] && "$TMPMNT/usr/sbin/chromeos-firmwareupdate" -V + "$TMPMNT/usr/sbin/chromeos-firmwareupdate" \ + --sb_extract "$TMPDIR" > /dev/null + sudo umount "$TMPMNT" + CLEAN_UM= + + showbios "$TMPDIR/bios.bin" " " + fi + + done + fi + + fi +} + + +for file in "$@"; do + dofile $file +done + +echo "" + +exit 0; + +############################################################################## +# Here are the known keys +############################################################################## +# +# Firmware recovery keys +# +# c14bd720b70d97394257e3e826bd8f43de48d4ed recovery developer keys +# +# 5c5776bf7574e5601c25042e0748b6844cfdd1dc recovery Alex MP +# 5c5776bf7574e5601c25042e0748b6844cfdd1dc recovery Alex MP-v4 +# 5c5776bf7574e5601c25042e0748b6844cfdd1dc recovery Alex-HE MP-v4 +# b3373d76358c3528d0653c4035bdd0020e2b0e1b recovery Butterfly MP-v3 +# 8a22e18a91e89f46f1f59b44a7887ab3821cb18d recovery Butterfly Pre-MP +# b6079520f8c8dc7192a78d111b9fefb98cee49b3 recovery Clapper MP +# 13b0ddf343bb0c325b178e5be138d4969a9e02be recovery Daisy MP-v3 +# 5e9d23b2d908a6ac5ee5c9747a9e2fe6dff01372 recovery Daisy-Skate MP +# 540bb135df55fe0036fe061b7a1f2a52d287cd1b recovery Daisy-Spring MP-v2 +# ae67678f8ed662ef4d1e4a639226d278b90ccaa3 recovery Enguarde MP-v10 +# ff7c07ae0ac04ccb92090e339545b716228a6da4 recovery Expresso MP-v10 +# 3c359d59432641a151161e2738ba8ca2b3eb12ab recovery Falco MP-v2 +# 3c359d59432641a151161e2738ba8ca2b3eb12ab recovery Falco-li MP-v2 +# c989d1ab66d2a67886e1019330812cb9e4e48f31 recovery Glimmer MP +# ab325d5411c6a21b41142b71b747335144e12538 recovery Gnawty MP +# d81c751df76a7d53a6d3c2f58987562c87416735 recovery Kiev MP +# 02601fcbcac953f043a53eac6fed7a5367a7189c recovery Kiev PreMP +# 6eaa4b094cd75eacc0f2fa4516d33ed86ea6f3d2 recovery Kip MP +# dc65a88c92511494999d2c03a72ec2584d21917d recovery Leon MP +# 7e74cd6d66f361da068c0419d2e0946b4d091e1c recovery Link MP +# 7e74cd6d66f361da068c0419d2e0946b4d091e1c recovery Link MP-v4 +# 08b2d19bc87d05d860a1c274f874bc9fa9ab7dfb recovery Link Pre-MP +# 0d800afb53cdd05dd849addee0143ca1d96e893c recovery Lumpy MP +# 0d800afb53cdd05dd849addee0143ca1d96e893c recovery Lumpy MP-v3 +# ebcac421fbf411bee99ee90672a3add17f5a967b recovery Lumpy PVT +# 5d0d163b824cab5ae4f23fb2cc012e2a4124f4fe recovery Mario MP +# 5d0d163b824cab5ae4f23fb2cc012e2a4124f4fe recovery Mario MP-v3 +# 51dd0b446540182fd91c6196b9a8dfcd7bcf6256 recovery McCloud MP +# 67f01715f3acf6526ce48a3d2cf81b003a01f334 recovery Monroe MP +# 40832bb15fa40a18b8e5d80fd17d0405b624884e recovery Nyan PreMP +# 2b356618cd0f739877b7a3f155917341f8778523 recovery Nyan-Big MP +# 26900310befce802836cca982f819aa72445e190 recovery Nyan-Blaze MP +# e74e63e14b285700324ffd3acc4b776dc3104b8f recovery Panther MP +# 7f03c648d2bb4ab3979cb87633da51ed90267f03 recovery Parrot MP +# 7f03c648d2bb4ab3979cb87633da51ed90267f03 recovery Parrot MP-v3 +# 7f03c648d2bb4ab3979cb87633da51ed90267f03 recovery Parrot-ivb MP-v3 +# d254b3b3ddaac32f7b843753de9257ec4f6c67ed recovery Peach-Pi MP +# 6d9a2ca8b3080a97e1e5a4efbc5386ead77c3c7f recovery Peach-Pit MP-v2 +# bf39d0d3e30cbf6a121416d04df4603ad5310779 recovery Peppy MP-v2 +# 60aa1bbbea1d2f724c6e5daa0653ca472ac3085e recovery Quawks MP +# fb4847ecb6bfcc300e5f570c5e8f3ab881204968 recovery Rambi PreMP +# abd575549848c82b481068ddf0242ea38d2e5fdd recovery Rowan PreMP +# 462edb5ebfd817e29e813db7a424582c3ce35768 recovery Samus PreMP +# 13b0ddf343bb0c325b178e5be138d4969a9e02be recovery Snow MP +# cdc2858ca78351dc4b54d5d5d02bc695830f7802 recovery Squawks MP +# 5cb31faf8c524672a15fd4628c585af79eca0247 recovery Stout MP +# 5cb31faf8c524672a15fd4628c585af79eca0247 recovery Stout MP-v3 +# 37e7bad73449f782f280b1668fed48d1132137fa recovery Stumpy MP +# 8540f56f87d91c5403704c960c1f385705201e20 recovery Stumpy PVT +# e0b610bc85908c35fb7bd11bfd34afb84d547190 recovery Swanky MP +# 50759cb8bc2f86ef378571fa7b30a161e7dcdc03 recovery Tricky MP +# a0c56006541cd38d6c884d27210a135f5c309a3f recovery Winky PreMP +# a4ee431f7a07c59e920fe570ead0b938cdd4019d recovery Wolf MP +# 9bd99a594c45b6739899a17ec29ac2289ee75463 recovery ZGB MP +# 9bd99a594c45b6739899a17ec29ac2289ee75463 recovery ZGB MP-v3 +# 9bd99a594c45b6739899a17ec29ac2289ee75463 recovery ZGB-HE MP-v3 +# ba07696c1c82891fdacab28a434148d239e7c834 recovery Zako MP-v2 +# +# Firmware root keys +# +# b11d74edd286c144e1135b49e7f0bc20cf041f10 root developer keys +# +# 00f77be2a0c013343db84fc6259da09e558b8318 root Alex MP +# 00f77be2a0c013343db84fc6259da09e558b8318 root Alex MP-v4 +# 00f77be2a0c013343db84fc6259da09e558b8318 root Alex-HE MP-v4 +# c788cee8c798669fe4822b7544dd3e399ce22604 root Butterfly MP-v3 +# 12a2c88b58cbd9eef6b777a3af440f611ea4f561 root Butterfly Pre-MP +# 952dd6852c11fd8b36b4fb88f3335ecae722e0e6 root Clapper MP +# a026a7a4a0bf0fa32d6b7aa90a80d5ef01a3b799 root Daisy MP-v3 +# c788cee8c798669fe4822b7544dd3e399ce22604 root Daisy-Skate MP +# ab3521d3b1938af52009b2c3dfad964594f6b367 root Daisy-Spring MP-v2 +# 48dc3c5917b9095d6b4188560c9726ba31a192ee root Enguarde MP-v10 +# 82f706e156e5927bbdf8f14f4a9f45bc59986311 root Expresso MP-v10 +# c788cee8c798669fe4822b7544dd3e399ce22604 root Falco MP-v2 +# c788cee8c798669fe4822b7544dd3e399ce22604 root Falco-li MP-v2 +# 952dd6852c11fd8b36b4fb88f3335ecae722e0e6 root Glimmer MP +# fc68bcb88bf9af1907289a9f377d658b3b9fe5b0 root Gnawty MP +# 4c5067795ddbbf100d19f9ba08928af1c1ef37c6 root Kiev MP +# 9c138273527db0a0797233e2345ee39e46c0df95 root Kiev PreMP +# c788cee8c798669fe4822b7544dd3e399ce22604 root Kip MP +# 154512de86cc1cc36a67d4225eb2fcc37dac1b7c root Leon MP +# 7b5c520ceabce86f13e02b7ca363cfb509fc5b98 root Link MP +# 7b5c520ceabce86f13e02b7ca363cfb509fc5b98 root Link MP-v4 +# e63058bf4b86b6fb1f148bc7acea9c71fe51675f root Link Pre-MP +# 4e92f07efd4a920c4e4f1ed97cf47b7b04ee1428 root Lumpy MP +# 4e92f07efd4a920c4e4f1ed97cf47b7b04ee1428 root Lumpy MP-v3 +# c9fc61f331b34e00a148e657bde5fb6b0b576c0a root Lumpy PVT +# 541f467a7d8747f55ae9087ee4e34155f5ee3cd7 root Mario MP +# 541f467a7d8747f55ae9087ee4e34155f5ee3cd7 root Mario MP-v3 +# fc68bcb88bf9af1907289a9f377d658b3b9fe5b0 root McCloud MP +# eec186f8a0cd6be2e9d86dc9ce284790739be202 root Monroe MP +# 3f54dd6a6e16128aec5c6c3052763388ae99d350 root Nyan PreMP +# fc68bcb88bf9af1907289a9f377d658b3b9fe5b0 root Nyan-Big MP +# c788cee8c798669fe4822b7544dd3e399ce22604 root Nyan-Blaze MP +# 758a59f4f911b63a1335223d761d2485313674c8 root Panther MP +# 9f59876c7f7dc881f02d934786c6b7c2c17dcaac root Parrot MP +# 9f59876c7f7dc881f02d934786c6b7c2c17dcaac root Parrot MP-v3 +# 9f59876c7f7dc881f02d934786c6b7c2c17dcaac root Parrot-ivb MP-v3 +# a026a7a4a0bf0fa32d6b7aa90a80d5ef01a3b799 root Peach-Pi MP +# a026a7a4a0bf0fa32d6b7aa90a80d5ef01a3b799 root Peach-Pit MP-v2 +# fc68bcb88bf9af1907289a9f377d658b3b9fe5b0 root Peppy MP-v2 +# 758a59f4f911b63a1335223d761d2485313674c8 root Quawks MP +# b3119b02f2b5371da5596b13d612facbca99b94f root Rambi PreMP +# cb67b1bda9965eebae6c477abf557d2c13690c30 root Rowan PreMP +# cb8086a9c1cd26318fef9a9fb3f846ca12320737 root Samus PreMP +# a026a7a4a0bf0fa32d6b7aa90a80d5ef01a3b799 root Snow MP +# 758a59f4f911b63a1335223d761d2485313674c8 root Squawks MP +# 952dd6852c11fd8b36b4fb88f3335ecae722e0e6 root Stout MP +# 952dd6852c11fd8b36b4fb88f3335ecae722e0e6 root Stout MP-v3 +# 4ec4ba0a746b37b1c6286ab807c2a5b1e7ab4ab0 root Stumpy MP +# 06939c65797eadfe6be1b3343a2e339800a34108 root Stumpy PVT +# 154512de86cc1cc36a67d4225eb2fcc37dac1b7c root Swanky MP +# ed3dab48746de569513aa288439f86fe24cc3386 root Tricky MP +# 5915703fb47bf569d7a6b8726cb9a1bd159487b0 root Winky PreMP +# ed3dab48746de569513aa288439f86fe24cc3386 root Wolf MP +# 9f59876c7f7dc881f02d934786c6b7c2c17dcaac root ZGB MP +# 9f59876c7f7dc881f02d934786c6b7c2c17dcaac root ZGB MP-v3 +# 9f59876c7f7dc881f02d934786c6b7c2c17dcaac root ZGB-HE MP-v3 +# c788cee8c798669fe4822b7544dd3e399ce22604 root Zako MP-v2 +# +# Normal kernel keys +# +# d6170aa480136f1f29cf339a5ab1b960585fa444 normal developer keys +# +# af24e46b6c3805869616e71c002c9a2a847ad266 normal Alex MP +# af24e46b6c3805869616e71c002c9a2a847ad266 normal Alex MP-v4 +# af24e46b6c3805869616e71c002c9a2a847ad266 normal Alex-HE MP-v4 +# 6026d95d1f11e1b88c19a139effbb02660523904 normal Butterfly MP-v3 +# 24fcff70ef3d834451384452bd9bc64c4d01c559 normal Butterfly Pre-MP +# d03ba05319cd77d0830b268804804f21fcb7672c normal Clapper MP +# 0d96e14c31a405b28dd7c7d2e416bbf960bc9779 normal Daisy MP-v3 +# da0bb5a3e2e80ebab0ac268ba2204ec360e9bb45 normal Daisy-Skate MP +# 94b5cfc5933e2f6294095820fa9eaf8162ca8021 normal Daisy-Spring MP-v2 +# dd15b9458ffc5ecb8048dbc4ae5e7f480c9e1852 normal Duck PreMP +# d9ffc2514c179472b6c5553b8ed20237cdfef73e normal Enguarde MP-v10 +# bd99dc86506b9ebe3025e5af69a26decf607173d normal Expresso MP-v10 +# c5d935b69950c29b2d2bba7cecacd2859fb9afbd normal Falco MP-v2 +# c5d935b69950c29b2d2bba7cecacd2859fb9afbd normal Falco-li MP-v2 +# c6bc5788eb62701cdd69b309766fe2a49ead14d1 normal Glimmer MP +# 32778b8483e14e4570b582c34df065c5ee833a59 normal Gnawty MP +# f82f08a5953b688b078f465731f1077fdf0d97cf normal Kiev MP +# b3ad5503fda8b06c74a000fed289006c97bf5600 normal Kip MP +# 933610d5c9926ec5540e180cda18c0395a853012 normal Leon MP +# d5927774fc14bb18a38c27fef47a36517a089d04 normal Link MP +# ad9e35dcd4287a3e27264ce49df6df40aaf2dcbb normal Link MP-v4 +# 7cb50f352af15f807f4bf3eaaede62d2f9c70d27 normal Link Pre-MP +# ad9e35dcd4287a3e27264ce49df6df40aaf2dcbb normal Link-freon MP-v4 +# cc887372ac2d1c415eac93fc11e753629c387358 normal Lumpy MP v2 +# cc887372ac2d1c415eac93fc11e753629c387358 normal Lumpy MP-v3 +# fa55cba16857a49270fb1561f87343c00959eb19 normal Lumpy PVT +# a1454fcecb98a6f33b38638564bdfc20161a7b04 normal Mario MP v2 +# a1454fcecb98a6f33b38638564bdfc20161a7b04 normal Mario MP-v3 +# 8848be24f4c34f064ae23c0450d27b62e558d2ed normal McCloud MP +# ac65608a05976a904f4c6123953968cd1aa444ab normal Monroe MP +# 78d388d49c494510d48cfa1650eacd45aa871da5 normal Nyan PreMP +# 71dd606970080aab093da2bbe91ca4348988175c normal Nyan-Big MP +# c4c00693dd7b99fffc1b272641f769d0a2f19ef5 normal Nyan-Blaze MP +# 39f6088397ebfcc8fffbd933b4bcd8a0e74ba409 normal Panther MP +# 8975d168123d5cfc7cebf674627958445f0d2a52 normal Parrot MP v2 +# e18e8ac7835390a71d2d70d02880694c6da9ac92 normal Parrot MP-v3 +# e18e8ac7835390a71d2d70d02880694c6da9ac92 normal Parrot-ivb MP-v3 +# ef469c6417138a8a371b51483d941a01453d27a3 normal Peach-Pi MP +# 2cf0eddab3a021044fc66fdca492c7899de5b7eb normal Peach-Pit MP-v2 +# 320e083d80e1a49d9c11cc0d8d055b050a92805a normal Peppy MP-v2 +# c65c3e3648eca66449ac9cdaf60edc2ba1b136e8 normal Quawks MP +# 037f4ed441ac39ca0a7fdd6c0829d4add9bf5f34 normal Rambi PreMP +# 3ca9ee2c112826aa89f0edf3cedcc5b65f250271 normal Rowan PreMP +# 989186f9aec3bced013d7f085c0f8caa07518e34 normal Samus PreMP +# c5120666c642f031e76edab8a2b45dd32232f80d normal Snow MP v2 +# 1cab1dedc34076b8887c9ebd4e6769eda6c41ed2 normal Squawks MP +# 09cb9b45c2cd4ca674861fe484aa758ba5568be0 normal Stout MP +# 47a82928807763a30956f40e4de0e68af2a17975 normal Stout MP-v3 +# de0b76af3caa55a8e7aa34c805e4248ad03b18e7 normal Stumpy MP +# f7e48006982a0ad4a41c0ca6610f062adb0eec44 normal Stumpy MP v2 +# 04dd63e835c979b57f87fd74e99af68e0cd39ad7 normal Stumpy PVT +# c321ed66f9b999598d39be7be3246bb25362740b normal Swanky MP +# 5c626cd8a684e470e74d3ceaf518aae745fe15dc normal Tegra2-Kaen PVT +# 09790fcb8c2b6732ec54bc406d34ec16c55992ba normal Tricky MP +# 202bb448a3f269771cffe53c38d6f05b2d1329ae normal Winky PreMP +# 7d4f5255af3552d8c8b40f60873d683268050015 normal Wolf MP +# 7b7ae8652775ad7305f565161b3acc00fcc8ea22 normal ZGB MP v2 +# 7b7ae8652775ad7305f565161b3acc00fcc8ea22 normal ZGB MP-v3 +# 7b7ae8652775ad7305f565161b3acc00fcc8ea22 normal ZGB-HE MP-v3 +# f70f0373b60ea8e2c5df7a9afeb75726fe0c8eb3 normal Zako MP-v2 +# +# Recovery kernel keys +# +# e78ce746a037837155388a1096212ded04fb86eb recovery developer keys +# +# 03172b08f0b99172c73d947f51e8ca23d418bcbf recovery Alex MP +# 03172b08f0b99172c73d947f51e8ca23d418bcbf recovery Alex MP-v4 +# 03172b08f0b99172c73d947f51e8ca23d418bcbf recovery Alex-HE MP-v4 +# c65d20649d35019a40642a4e2540b19587ee6458 recovery Butterfly MP-v3 +# 934e38b44b11eb892d1edc32cb3ba87c558232d9 recovery Butterfly Pre-MP +# 889367bc86d0af857412a409f98e2ab9d798f887 recovery Clapper MP +# f32b5f6b6cfb6d77136ac0d8ed0cdf67e6df7b91 recovery Daisy MP-v3 +# 66496dd27c44ae81cf0c41671b5af59a316969da recovery Daisy-Skate MP +# a1f00935770234a434c4b14414c48866b1661e40 recovery Daisy-Spring MP-v2 +# 9a04d0ea29b095c6c227b50d4bb75f431355dbb0 recovery Duck PreMP +# e30dc74a05de0d0e7522817f8d97f04f08ff6a8b recovery Enguarde MP-v10 +# 4e22acdedf89a3dbb6b9861b513e2121bd457a96 recovery Expresso MP-v10 +# af1e6c23c3148d3261b5fc7c30860d89faeee7a6 recovery Falco MP-v2 +# af1e6c23c3148d3261b5fc7c30860d89faeee7a6 recovery Falco-li MP-v2 +# 45145bcfc866b5cc7d711d6451fd1272f55ba087 recovery Glimmer MP +# 377f89af74389c1d06876981bda3a7a591332f67 recovery Gnawty MP +# 10d73c2b24b35c0ea387babd72e9b242f2d79c9f recovery Kiev MP +# 5dea047c25331a6b3ed0f40efa7e2b8b90676abf recovery Kip MP +# 51a7f92ef6d727da9b0f0ebd8882a836db296e97 recovery Leon MP +# e8c4e66b00df5468e4d7ec9757347842cfd6c1da recovery Link MP +# e8c4e66b00df5468e4d7ec9757347842cfd6c1da recovery Link MP-v4 +# 93e0ecffb36199071a3d995f6726770e799dcd0e recovery Link Pre-MP +# e8c4e66b00df5468e4d7ec9757347842cfd6c1da recovery Link-freon MP-v4 +# 49d40533b0812d3f31232c5eedd47e7e11acc293 recovery Lumpy MP +# 49d40533b0812d3f31232c5eedd47e7e11acc293 recovery Lumpy MP-v3 +# cb45bc04a932e4bcac41b44d31afd9516ca0fe24 recovery Lumpy PVT +# f6fadd7e31eebf4bcc4eb8d2dd512e3a2313627f recovery Mario MP +# f6fadd7e31eebf4bcc4eb8d2dd512e3a2313627f recovery Mario MP-v3 +# 95b4a4abb2a55e7163824e36583c109c90a2e78d recovery McCloud MP +# 5e2ca8bc287af2d94615e940ee17e9620d3191dd recovery Monroe MP +# b914dc4800f6929d0c1ecea536dbff9ef618af26 recovery Nyan PreMP +# 9cdfb53d6ef4f4746de2dace828d1142c216a130 recovery Nyan-Big MP +# 934ce4a3a23316457727a500b7dce4e04b2f7147 recovery Nyan-Blaze MP +# ef1c9cdbf547acc397288cf58fd3ee274383abbb recovery Panther MP +# cfa1a4a784a90cc7c1df6859fa226b89e6afbeb5 recovery Parrot MP +# cfa1a4a784a90cc7c1df6859fa226b89e6afbeb5 recovery Parrot MP-v3 +# cfa1a4a784a90cc7c1df6859fa226b89e6afbeb5 recovery Parrot-ivb MP-v3 +# 7cabfc4c72cb300399c8c490b39c1ce0c45b11c0 recovery Peach-Pi MP +# b39e9b9b12f3ab4fd1017e6c92d4ccff2723347d recovery Peach-Pit MP-v2 +# 74ec605d3525e24b7f7a4b633afd2ec048dc6d12 recovery Peppy MP-v2 +# 315417a5d8a95b954f5f101acaef5b107136a418 recovery Quawks MP +# d0b7feba2bb53ecd8eda6602ccf6a0c25e5b001f recovery Rambi PreMP +# 942e15e118dca77b75a668c8c814bf8d67b774b2 recovery Rowan PreMP +# 61cad57963dd64202cead8dcfc62aea76c9911c2 recovery Samus PreMP +# f32b5f6b6cfb6d77136ac0d8ed0cdf67e6df7b91 recovery Snow MP +# d45eb14119d14b5b1d4b259f177e32c522d27f99 recovery Squawks MP +# fa4497f70968a1820ceb0ac4364d8e9ec0abc0b2 recovery Stout MP +# fa4497f70968a1820ceb0ac4364d8e9ec0abc0b2 recovery Stout MP-v3 +# 6f6d6df4e328633904990cf8c60baa18b8cf6fc7 recovery Stumpy MP +# 057a03c1526a1be7f42d29095c5a583231a75b35 recovery Stumpy PVT +# d56ac05587d7d45d681cb52d113fb5d95e787d1d recovery Swanky MP +# de11a604715a920d7371ceefda75a5b1b062443f recovery Tegra2-Kaen PVT +# 4fe89a587d09c9fb58e79b556014b833f64559fb recovery Tricky MP +# 72bb00bb0c89d06569df2d9d2e8087e040bbbb8b recovery Winky PreMP +# a01a2a2502fe8f6e3dc8100080b0e486bc0a3468 recovery Wolf MP +# 20f3e8b77da6577706c91feefb203f98ee20d479 recovery ZGB MP +# 20f3e8b77da6577706c91feefb203f98ee20d479 recovery ZGB MP-v3 +# 20f3e8b77da6577706c91feefb203f98ee20d479 recovery ZGB-HE MP-v3 +# 070611f0aa70b6887dd3c96b4086c13894ffa25f recovery Zako MP-v2 diff --git a/utility/verify_data.c b/utility/verify_data.c new file mode 100644 index 0000000..6d3ea15 --- /dev/null +++ b/utility/verify_data.c @@ -0,0 +1,110 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Routines for verifying a file's signature. Useful in testing the core + * RSA verification implementation. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "2common.h" +#include "2rsa.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "file_keys.h" +#include "host_common.h" + +/* ANSI Color coding sequences. */ +#define COL_GREEN "\e[1;32m" +#define COL_RED "\e[0;31m" +#define COL_STOP "\e[m" + +int main(int argc, char* argv[]) +{ + uint8_t workbuf[VB2_VERIFY_DIGEST_WORKBUF_BYTES] + __attribute__((aligned(VB2_WORKBUF_ALIGN))); + struct vb2_workbuf wb; + vb2_workbuf_init(&wb, workbuf, sizeof(workbuf)); + + int return_code = 1; /* Default to error. */ + uint8_t digest[VB2_MAX_DIGEST_SIZE]; + struct vb2_packed_key *pk = NULL; + uint8_t *signature = NULL; + uint32_t sig_len = 0; + + if (argc != 5) { + int i; + fprintf(stderr, + "Usage: %s " + " \n\n", argv[0]); + fprintf(stderr, + "where depends on the signature algorithm" + " used:\n"); + for(i = 0; i < VB2_ALG_COUNT; i++) + fprintf(stderr, "\t%d for %s\n", i, + vb2_get_crypto_algorithm_name(i)); + return -1; + } + + int algorithm = atoi(argv[1]); + if (algorithm >= VB2_ALG_COUNT) { + fprintf(stderr, "Invalid algorithm %d\n", algorithm); + goto error; + } + + pk = vb2_read_packed_keyb(argv[2], algorithm, 0); + if (!pk) { + fprintf(stderr, "Can't read RSA public key.\n"); + goto error; + } + + struct vb2_public_key k2; + if (VB2_SUCCESS != vb2_unpack_key(&k2, pk)) { + fprintf(stderr, "Can't unpack RSA public key.\n"); + goto error; + } + + if (VB2_SUCCESS != vb2_read_file(argv[3], &signature, &sig_len)) { + fprintf(stderr, "Can't read signature.\n"); + goto error; + } + + uint32_t expect_sig_size = + vb2_rsa_sig_size(vb2_crypto_to_signature(algorithm)); + if (sig_len != expect_sig_size) { + fprintf(stderr, "Expected signature size %u, got %u\n", + expect_sig_size, sig_len); + goto error; + } + + if (VB2_SUCCESS != DigestFile(argv[4], vb2_crypto_to_hash(algorithm), + digest, sizeof(digest))) { + fprintf(stderr, "Error calculating digest.\n"); + goto error; + } + + if (VB2_SUCCESS == vb2_rsa_verify_digest(&k2, signature, digest, &wb)) { + return_code = 0; + fprintf(stderr, "Signature Verification " + COL_GREEN "SUCCEEDED" COL_STOP "\n"); + } else { + fprintf(stderr, "Signature Verification " + COL_RED "FAILED" COL_STOP "\n"); + } + +error: + if (pk) + free(pk); + if (signature) + free(signature); + + return return_code; +} diff --git a/vboot_host.pc.in b/vboot_host.pc.in new file mode 100644 index 0000000..46243db --- /dev/null +++ b/vboot_host.pc.in @@ -0,0 +1,10 @@ +prefix=/usr +exec_prefix=${prefix} +includedir=${prefix}/include +libdir=${prefix}/@LIBDIR@ + +Name: libvboot_host +Version: 2 +Description: Static library of functions related to vboot and cgpt. +Cflags: -I${includedir} +Libs: -L${libdir} -lvboot_host @LDLIBS@